@libs-ui/components-datetime-dropdown 0.2.77 → 0.2.78
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/defines/date-dropdown.define.d.ts +40 -0
- package/directive/date-dropdown.directive.d.ts +11 -0
- package/dropdown.component.d.ts +88 -0
- package/esm2022/defines/date-dropdown.define.mjs +248 -0
- package/esm2022/directive/date-dropdown.directive.mjs +33 -0
- package/esm2022/dropdown.component.mjs +272 -0
- package/esm2022/index.mjs +2 -2
- package/esm2022/interfaces/date-dropdown.interface.mjs +7 -0
- package/esm2022/interfaces/emit-dropdown.interface.mjs +2 -0
- package/esm2022/interfaces/functions-control-event.interface.mjs +2 -0
- package/esm2022/interfaces/valid.interface.mjs +3 -0
- package/esm2022/item/child/child.component.mjs +124 -0
- package/esm2022/item/item.component.mjs +216 -0
- package/esm2022/pipes/build-list-by-date-type-.pipe.mjs +19 -0
- package/esm2022/pipes/build-width.pipe.mjs +23 -0
- package/fesm2022/libs-ui-components-datetime-dropdown.mjs +910 -9
- package/fesm2022/libs-ui-components-datetime-dropdown.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/interfaces/date-dropdown.interface.d.ts +47 -0
- package/interfaces/emit-dropdown.interface.d.ts +11 -0
- package/interfaces/functions-control-event.interface.d.ts +11 -0
- package/interfaces/valid.interface.d.ts +10 -0
- package/item/child/child.component.d.ts +51 -0
- package/item/item.component.d.ts +59 -0
- package/package.json +1 -1
- package/pipes/build-list-by-date-type-.pipe.d.ts +15 -0
- package/pipes/build-width.pipe.d.ts +7 -0
- package/esm2022/lib/datetime-dropdown/datetime-dropdown.component.mjs +0 -12
- package/lib/datetime-dropdown/datetime-dropdown.component.d.ts +0 -5
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, untracked, viewChild } from "@angular/core";
|
|
2
|
+
import { LibsUiComponentsLabelComponent } from "@libs-ui/components-label";
|
|
3
|
+
import { TranslateModule, TranslateService } from "@ngx-translate/core";
|
|
4
|
+
import { fromEvent, Subject, takeUntil, timer } from "rxjs";
|
|
5
|
+
import { CompareDate } from "./defines/date-dropdown.define";
|
|
6
|
+
import { LibsUiComponentsDatetimeDropdownDirective } from "./directive/date-dropdown.directive";
|
|
7
|
+
import { LibsUiComponentsDatetimeDropdownItemComponent } from "./item/item.component";
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@ngx-translate/core";
|
|
10
|
+
export class LibsUiComponentsDatetimeDropdownComponent {
|
|
11
|
+
/* PROPERTY */
|
|
12
|
+
width = signal(0);
|
|
13
|
+
widthElement = signal(undefined);
|
|
14
|
+
widthLabel = signal(undefined);
|
|
15
|
+
widthLabelFrom = signal(0);
|
|
16
|
+
widthLabelTo = signal(0);
|
|
17
|
+
isErrorCompareDate = signal(undefined);
|
|
18
|
+
chooseDate = signal(undefined);
|
|
19
|
+
isResponsive = signal(undefined);
|
|
20
|
+
arrayFormat = computed(() => {
|
|
21
|
+
return this.typeFormat().split('-');
|
|
22
|
+
});
|
|
23
|
+
changeType = signal(undefined);
|
|
24
|
+
cacheWidthLabel = signal(undefined);
|
|
25
|
+
timeOut = signal(undefined);
|
|
26
|
+
onDestroy = new Subject();
|
|
27
|
+
functionsControl = new Map();
|
|
28
|
+
/* INPUT */
|
|
29
|
+
labelConfig = input(undefined);
|
|
30
|
+
widthDropdown = input(136, { transform: (value) => value ?? 136 });
|
|
31
|
+
zIndex = input(1200, { transform: (value) => value ?? 1200 });
|
|
32
|
+
maxYear = input(0);
|
|
33
|
+
minYear = input(0);
|
|
34
|
+
minWidth = input(undefined);
|
|
35
|
+
disable = input(false);
|
|
36
|
+
readonly = input(false);
|
|
37
|
+
isMultiple = input(false);
|
|
38
|
+
reverseYear = input(undefined);
|
|
39
|
+
isBorderError = input(false);
|
|
40
|
+
ignoreWidth100 = input(false);
|
|
41
|
+
widthByElement = input(false);
|
|
42
|
+
disableSecond = input(false);
|
|
43
|
+
typeFormat = input('month-day', { transform: (value) => value ?? 'month-day' });
|
|
44
|
+
fromAndToDateLabel = input({ from: 'i18n_label_from', to: 'i18n_to' });
|
|
45
|
+
listHasButtonUnSelectOption = input(false);
|
|
46
|
+
selectedDateTime = input(undefined);
|
|
47
|
+
isEmitAfterChanged = input(false); // dùng để emit mỗi lần chọn giá trị và lần đầu init
|
|
48
|
+
getItemYearDisplay = input();
|
|
49
|
+
ignoreFromAndToDateLabel = input(false);
|
|
50
|
+
classIncludeTextDisplayWhenNoSelect = input(undefined);
|
|
51
|
+
hiddenDate = input();
|
|
52
|
+
listMaxItemShow = input(undefined);
|
|
53
|
+
ignoreConvertYearSelected = input(false);
|
|
54
|
+
listKeysDisable = input(undefined);
|
|
55
|
+
ignoreAllowTimeEqual = input(true, { transform: (value) => value ?? true });
|
|
56
|
+
ignoreValidTimeCompare = input(false, { transform: (value) => value ?? false });
|
|
57
|
+
isCheckErrorWhenSelectItem = input(true, { transform: (value) => value ?? true });
|
|
58
|
+
ignoreRequiredValueSecondWhenNotValidRequired = input(false); // có validate giá trị thứ 2 khi validRequired không?
|
|
59
|
+
validRequired = input();
|
|
60
|
+
/* OUTPUT */
|
|
61
|
+
outFunctionsControl = output();
|
|
62
|
+
outSelectedDropdown = output(); // dùng cho trường hợp emit mỗi một lần chọn giá trị nên khi sử dụng phải check kĩ undefined
|
|
63
|
+
outChooseMultiDate = output();
|
|
64
|
+
outChooseSingleDate = output();
|
|
65
|
+
outChangStageFlagMouse = output();
|
|
66
|
+
/* VIEW CHILD */
|
|
67
|
+
containerRef = viewChild('parent');
|
|
68
|
+
labelFromRef = viewChild('labelFrom');
|
|
69
|
+
labelToRef = viewChild('labelTo');
|
|
70
|
+
/* INJECT */
|
|
71
|
+
translate = inject(TranslateService);
|
|
72
|
+
constructor() {
|
|
73
|
+
effect(() => {
|
|
74
|
+
const isMultiple = this.isMultiple();
|
|
75
|
+
if (!isMultiple) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
untracked(() => {
|
|
79
|
+
this.changeType.set(true);
|
|
80
|
+
this.functionsControl.clear();
|
|
81
|
+
timer(0).pipe().subscribe(() => {
|
|
82
|
+
this.checkResponsive();
|
|
83
|
+
this.changeType.set(false);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
ngOnInit() {
|
|
89
|
+
this.outFunctionsControl.emit({ checkIsValid: this.validate.bind(this), resetError: this.resetError.bind(this), resetTime: this.resetDropdown.bind(this) });
|
|
90
|
+
if (this.selectedDateTime()) {
|
|
91
|
+
this.chooseDate.set(this.selectedDateTime());
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
ngAfterViewInit() {
|
|
95
|
+
fromEvent(window, 'resize').pipe(takeUntil(this.onDestroy)).subscribe(this.setWidthDate.bind(this));
|
|
96
|
+
this.widthLabel.set(undefined);
|
|
97
|
+
timer(0).pipe().subscribe(() => {
|
|
98
|
+
this.checkResponsive();
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
checkResponsive() {
|
|
102
|
+
this.isResponsive.set(false);
|
|
103
|
+
const widthElementParent = this.containerRef()?.nativeElement?.getBoundingClientRect().width || 0;
|
|
104
|
+
this.widthLabelFrom.set(this.labelFromRef()?.nativeElement?.getBoundingClientRect().width || 0);
|
|
105
|
+
this.widthLabelTo.set(this.labelToRef()?.nativeElement?.getBoundingClientRect().width || 0);
|
|
106
|
+
const spaceBetweenDate = (this.arrayFormat().length * 2) + (this.fromAndToDateLabel().from ? 1 : 0);
|
|
107
|
+
const width = (this.widthDropdown() * 4) + (8 * spaceBetweenDate) + this.widthLabelFrom() + this.widthLabelTo();
|
|
108
|
+
if (widthElementParent < width) {
|
|
109
|
+
this.isResponsive.set(true);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
handlerChangeSelectedKey(event, type) {
|
|
113
|
+
this.chooseDate.update(current => {
|
|
114
|
+
if (current) {
|
|
115
|
+
current[type].set(event);
|
|
116
|
+
}
|
|
117
|
+
return current;
|
|
118
|
+
});
|
|
119
|
+
if (this.isEmitAfterChanged()) {
|
|
120
|
+
const dataEmit = this.isMultiple() ? this.chooseDate() : this.chooseDate()?.from();
|
|
121
|
+
if (dataEmit) {
|
|
122
|
+
this.outSelectedDropdown.emit(dataEmit);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
this.applyDate();
|
|
126
|
+
}
|
|
127
|
+
async resetDropdown() {
|
|
128
|
+
this.functionsControl.forEach(control => control.resetDropdown());
|
|
129
|
+
}
|
|
130
|
+
async resetError() {
|
|
131
|
+
this.functionsControl.forEach(control => control.resetError());
|
|
132
|
+
}
|
|
133
|
+
setWidthDate() {
|
|
134
|
+
if (!this.containerRef() || !this.containerRef()?.nativeElement) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
timer(0).pipe().subscribe(() => {
|
|
138
|
+
this.checkResponsive();
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
handlerFunctionControl(event, type) {
|
|
142
|
+
this.functionsControl.set(type, event);
|
|
143
|
+
}
|
|
144
|
+
async checkValid() {
|
|
145
|
+
let valid = true;
|
|
146
|
+
for (const control of this.functionsControl.values()) {
|
|
147
|
+
if (!(await control.checkIsValid())) {
|
|
148
|
+
valid = false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (this.compareDate()) {
|
|
152
|
+
valid = false;
|
|
153
|
+
}
|
|
154
|
+
return valid;
|
|
155
|
+
}
|
|
156
|
+
setError(error) {
|
|
157
|
+
this.functionsControl.forEach(control => control.setError(error));
|
|
158
|
+
}
|
|
159
|
+
compareDate() {
|
|
160
|
+
const type = this.typeFormat().split('-');
|
|
161
|
+
const dateCompare = [];
|
|
162
|
+
type.forEach(item => {
|
|
163
|
+
const from = this.chooseDate()?.from()[item];
|
|
164
|
+
const to = this.chooseDate()?.to()[item];
|
|
165
|
+
dateCompare.push({ from: from, to: to });
|
|
166
|
+
});
|
|
167
|
+
if (this.ignoreValidTimeCompare() || !this.checkCondition(true)) {
|
|
168
|
+
this.isErrorCompareDate.set(false);
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
if (CompareDate(dateCompare, this.ignoreAllowTimeEqual())) {
|
|
172
|
+
this.setError(true);
|
|
173
|
+
this.isErrorCompareDate.set(true);
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
this.isErrorCompareDate.set(false);
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
async validate() {
|
|
180
|
+
let valid = true;
|
|
181
|
+
if (!this.validRequired()) {
|
|
182
|
+
if (!this.checkCondition(false) && !this.ignoreRequiredValueSecondWhenNotValidRequired()) {
|
|
183
|
+
valid = await this.checkValid();
|
|
184
|
+
}
|
|
185
|
+
return valid;
|
|
186
|
+
}
|
|
187
|
+
return await this.checkValid();
|
|
188
|
+
}
|
|
189
|
+
checkCondition(hasValue) {
|
|
190
|
+
let checkValue = true;
|
|
191
|
+
const type = this.typeFormat().split('-');
|
|
192
|
+
type.forEach(item => {
|
|
193
|
+
if (hasValue && (!this.chooseDate()?.from()[item] || !this.chooseDate()?.to()[item])) {
|
|
194
|
+
checkValue = false;
|
|
195
|
+
}
|
|
196
|
+
if (!hasValue && (this.chooseDate()?.from()[item] || this.chooseDate()?.to()[item])) {
|
|
197
|
+
checkValue = false;
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
return checkValue;
|
|
201
|
+
}
|
|
202
|
+
applyDate() {
|
|
203
|
+
this.setError(false);
|
|
204
|
+
this.isErrorCompareDate.set(false);
|
|
205
|
+
if (this.isCheckErrorWhenSelectItem() && !this.validate()) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const from = this.chooseDate()?.from;
|
|
209
|
+
const to = this.chooseDate()?.to;
|
|
210
|
+
if (this.isMultiple()) {
|
|
211
|
+
if (this.compareDate()) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
let dataSelected = { from: signal({}), to: signal({}) };
|
|
215
|
+
this.arrayFormat().forEach(key => {
|
|
216
|
+
if (!from?.()?.[key] || !to?.()?.[key]) {
|
|
217
|
+
dataSelected = undefined;
|
|
218
|
+
}
|
|
219
|
+
if (dataSelected) {
|
|
220
|
+
dataSelected.from.update(current => {
|
|
221
|
+
current[key] = Number(from?.()[key]);
|
|
222
|
+
return current;
|
|
223
|
+
});
|
|
224
|
+
dataSelected.to.update(current => {
|
|
225
|
+
current[key] = Number(to?.()[key]);
|
|
226
|
+
return current;
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
if (dataSelected) {
|
|
231
|
+
this.outChooseMultiDate.emit(dataSelected);
|
|
232
|
+
}
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
let dataSelected = {};
|
|
236
|
+
this.arrayFormat().forEach(key => {
|
|
237
|
+
if (!from?.()?.[key]) {
|
|
238
|
+
dataSelected = undefined;
|
|
239
|
+
}
|
|
240
|
+
if (dataSelected) {
|
|
241
|
+
dataSelected[key] = Number(from?.()?.[key]);
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
if (dataSelected) {
|
|
245
|
+
this.outChooseSingleDate.emit(dataSelected);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
handlerChangeWidthLabel(width) {
|
|
249
|
+
this.cacheWidthLabel.set(width < (this.cacheWidthLabel() || 0) ? this.cacheWidthLabel() : Math.ceil(width));
|
|
250
|
+
if (this.timeOut()) {
|
|
251
|
+
clearTimeout(this.timeOut());
|
|
252
|
+
}
|
|
253
|
+
this.timeOut.set(setTimeout(() => {
|
|
254
|
+
this.widthLabel.set(this.cacheWidthLabel());
|
|
255
|
+
}, 100));
|
|
256
|
+
}
|
|
257
|
+
handlerChangStageFlagMouse(flagMouse) {
|
|
258
|
+
this.outChangStageFlagMouse.emit(flagMouse);
|
|
259
|
+
}
|
|
260
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimeDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
261
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDatetimeDropdownComponent, isStandalone: true, selector: "libs_ui-components-datetime-dropdown", inputs: { labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, widthDropdown: { classPropertyName: "widthDropdown", publicName: "widthDropdown", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, maxYear: { classPropertyName: "maxYear", publicName: "maxYear", isSignal: true, isRequired: false, transformFunction: null }, minYear: { classPropertyName: "minYear", publicName: "minYear", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, isMultiple: { classPropertyName: "isMultiple", publicName: "isMultiple", isSignal: true, isRequired: false, transformFunction: null }, reverseYear: { classPropertyName: "reverseYear", publicName: "reverseYear", isSignal: true, isRequired: false, transformFunction: null }, isBorderError: { classPropertyName: "isBorderError", publicName: "isBorderError", isSignal: true, isRequired: false, transformFunction: null }, ignoreWidth100: { classPropertyName: "ignoreWidth100", publicName: "ignoreWidth100", isSignal: true, isRequired: false, transformFunction: null }, widthByElement: { classPropertyName: "widthByElement", publicName: "widthByElement", isSignal: true, isRequired: false, transformFunction: null }, disableSecond: { classPropertyName: "disableSecond", publicName: "disableSecond", isSignal: true, isRequired: false, transformFunction: null }, typeFormat: { classPropertyName: "typeFormat", publicName: "typeFormat", isSignal: true, isRequired: false, transformFunction: null }, fromAndToDateLabel: { classPropertyName: "fromAndToDateLabel", publicName: "fromAndToDateLabel", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, selectedDateTime: { classPropertyName: "selectedDateTime", publicName: "selectedDateTime", isSignal: true, isRequired: false, transformFunction: null }, isEmitAfterChanged: { classPropertyName: "isEmitAfterChanged", publicName: "isEmitAfterChanged", isSignal: true, isRequired: false, transformFunction: null }, getItemYearDisplay: { classPropertyName: "getItemYearDisplay", publicName: "getItemYearDisplay", isSignal: true, isRequired: false, transformFunction: null }, ignoreFromAndToDateLabel: { classPropertyName: "ignoreFromAndToDateLabel", publicName: "ignoreFromAndToDateLabel", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, hiddenDate: { classPropertyName: "hiddenDate", publicName: "hiddenDate", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, ignoreConvertYearSelected: { classPropertyName: "ignoreConvertYearSelected", publicName: "ignoreConvertYearSelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, ignoreAllowTimeEqual: { classPropertyName: "ignoreAllowTimeEqual", publicName: "ignoreAllowTimeEqual", isSignal: true, isRequired: false, transformFunction: null }, ignoreValidTimeCompare: { classPropertyName: "ignoreValidTimeCompare", publicName: "ignoreValidTimeCompare", isSignal: true, isRequired: false, transformFunction: null }, isCheckErrorWhenSelectItem: { classPropertyName: "isCheckErrorWhenSelectItem", publicName: "isCheckErrorWhenSelectItem", isSignal: true, isRequired: false, transformFunction: null }, ignoreRequiredValueSecondWhenNotValidRequired: { classPropertyName: "ignoreRequiredValueSecondWhenNotValidRequired", publicName: "ignoreRequiredValueSecondWhenNotValidRequired", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outFunctionsControl: "outFunctionsControl", outSelectedDropdown: "outSelectedDropdown", outChooseMultiDate: "outChooseMultiDate", outChooseSingleDate: "outChooseSingleDate", outChangStageFlagMouse: "outChangStageFlagMouse" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["parent"], descendants: true, isSignal: true }, { propertyName: "labelFromRef", first: true, predicate: ["labelFrom"], descendants: true, isSignal: true }, { propertyName: "labelToRef", first: true, predicate: ["labelTo"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [limitLength]=\"labelConfig.limitLength\"\n [count]=\"labelConfig.count\" />\n}\n<div #parent\n class=\"flex items-start\"\n [class.!w-full]=\"widthByElement()\"\n [class.!column]=\"isResponsive() && isMultiple()\">\n <div #childFrom\n class=\"flex items-start\"\n [class.!w-[50%]]=\"widthByElement() && !isResponsive()\"\n [class.!mb-[8px]]=\"isResponsive() && isMultiple()\"\n [class.!mr-[8px]]=\"!isResponsive() && isMultiple()\"\n [class.!w-full]=\"!isMultiple() && !widthByElement() || isResponsive()\"\n [style.width.px]=\"!widthByElement() && isMultiple() && !isResponsive() ?((widthDropdown() * arrayFormat.length)+(8 * arrayFormat.length) + widthLabelFrom()):undefined\">\n\n @if (isMultiple() && !ignoreFromAndToDateLabel() && fromAndToDateLabel().from) {\n <div class=\"mr-[8px] flex-shrink-0 h-[32px] flex items-center\"\n [style.width.px]=\"isResponsive() ? (widthLabel() || undefined) : undefined\">\n <span #labelFrom\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelFrom || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n {{ (fromAndToDateLabel().from||' ')| translate }}\n </span>\n </div>\n }\n <div class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item [class.!w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple() ? isResponsive() ? true : false : true\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.from() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.from()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'from')\"\n (outFunctionControl)=\"handlerFunctionControl($event,'from')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n @if (isMultiple()) {\n <div #childTo\n [class.!w-[50%]]=\"widthByElement()\"\n [class.!w-full]=\" !widthByElement() || isResponsive()\"\n class=\"flex items-start\">\n <div class=\"mr-[8px] h-[32px] flex-shrink-0 flex items-center\"\n [style.width.px]=\"isResponsive() ? widthLabel() : undefined\">\n @if (!ignoreFromAndToDateLabel()) {\n <span #labelTo\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelTo || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n {{ (fromAndToDateLabel().to||' ')| translate }}\n </span>\n }\n @if (ignoreFromAndToDateLabel()) {\n <span [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r\">-</span>\n }\n </div>\n <div class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item [class.w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple()\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.to() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.to()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'to')\"\n (outFunctionControl)=\"handlerFunctionControl($event,'to')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n }\n</div>\n\n@if (isErrorCompareDate()) {\n <div class=\"flex items-center mt-[4px]\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r\">{{ validRequired()?.messageValidCompareTime || \"i18n_invalid_end_date_selected\" | translate:validRequired()?.interpolateParamsCompareTime }}</span>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "directive", type: LibsUiComponentsDatetimeDropdownDirective, selector: "[LibsUiComponentsDatetimeDropdownDirective]", outputs: ["outChangeWidth"] }, { kind: "component", type: LibsUiComponentsDatetimeDropdownItemComponent, selector: "libs_ui-components-datetime-dropdown-item", inputs: ["typeDate", "disableSecond", "selectedDate", "widthDropdown", "widthByElement", "getItemYearDisplay", "listHasButtonUnSelectOption", "readonly", "disable", "zIndex", "isMultiple", "classIncludeTextDisplayWhenNoSelect", "isCheckErrorWhenSelectItem", "maxYear", "minYear", "reverseYear", "listKeysDisable", "ignoreConvertYearSelected", "validRequired", "isEmitSelectedDropDown", "listMaxItemShow"], outputs: ["outSelectedData", "outFunctionControl", "outChangStageFlagMouse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
262
|
+
}
|
|
263
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimeDropdownComponent, decorators: [{
|
|
264
|
+
type: Component,
|
|
265
|
+
args: [{ selector: 'libs_ui-components-datetime-dropdown', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
266
|
+
TranslateModule,
|
|
267
|
+
LibsUiComponentsLabelComponent,
|
|
268
|
+
LibsUiComponentsDatetimeDropdownDirective,
|
|
269
|
+
LibsUiComponentsDatetimeDropdownItemComponent
|
|
270
|
+
], template: "@if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [limitLength]=\"labelConfig.limitLength\"\n [count]=\"labelConfig.count\" />\n}\n<div #parent\n class=\"flex items-start\"\n [class.!w-full]=\"widthByElement()\"\n [class.!column]=\"isResponsive() && isMultiple()\">\n <div #childFrom\n class=\"flex items-start\"\n [class.!w-[50%]]=\"widthByElement() && !isResponsive()\"\n [class.!mb-[8px]]=\"isResponsive() && isMultiple()\"\n [class.!mr-[8px]]=\"!isResponsive() && isMultiple()\"\n [class.!w-full]=\"!isMultiple() && !widthByElement() || isResponsive()\"\n [style.width.px]=\"!widthByElement() && isMultiple() && !isResponsive() ?((widthDropdown() * arrayFormat.length)+(8 * arrayFormat.length) + widthLabelFrom()):undefined\">\n\n @if (isMultiple() && !ignoreFromAndToDateLabel() && fromAndToDateLabel().from) {\n <div class=\"mr-[8px] flex-shrink-0 h-[32px] flex items-center\"\n [style.width.px]=\"isResponsive() ? (widthLabel() || undefined) : undefined\">\n <span #labelFrom\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelFrom || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n {{ (fromAndToDateLabel().from||' ')| translate }}\n </span>\n </div>\n }\n <div class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item [class.!w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple() ? isResponsive() ? true : false : true\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.from() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.from()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'from')\"\n (outFunctionControl)=\"handlerFunctionControl($event,'from')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n @if (isMultiple()) {\n <div #childTo\n [class.!w-[50%]]=\"widthByElement()\"\n [class.!w-full]=\" !widthByElement() || isResponsive()\"\n class=\"flex items-start\">\n <div class=\"mr-[8px] h-[32px] flex-shrink-0 flex items-center\"\n [style.width.px]=\"isResponsive() ? widthLabel() : undefined\">\n @if (!ignoreFromAndToDateLabel()) {\n <span #labelTo\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelTo || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n {{ (fromAndToDateLabel().to||' ')| translate }}\n </span>\n }\n @if (ignoreFromAndToDateLabel()) {\n <span [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r\">-</span>\n }\n </div>\n <div class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item [class.w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple()\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.to() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.to()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'to')\"\n (outFunctionControl)=\"handlerFunctionControl($event,'to')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n }\n</div>\n\n@if (isErrorCompareDate()) {\n <div class=\"flex items-center mt-[4px]\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r\">{{ validRequired()?.messageValidCompareTime || \"i18n_invalid_end_date_selected\" | translate:validRequired()?.interpolateParamsCompareTime }}</span>\n </div>\n}\n" }]
|
|
271
|
+
}], ctorParameters: () => [] });
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0ssT0FBTyxFQUFVLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBS2hHLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFpQnRGLE1BQU0sT0FBTyx5Q0FBeUM7SUFDcEQsY0FBYztJQUNKLEtBQUssR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsWUFBWSxHQUFHLE1BQU0sQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFDckQsVUFBVSxHQUFHLE1BQU0sQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFDbkQsY0FBYyxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FB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QztRQUMvQixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDLEVBQUUsR0FBRyxDQUF1QixDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVTLDBCQUEwQixDQUFDLFNBQXFCO1FBQ3hELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQzt3R0F6U1UseUNBQXlDOzRGQUF6Qyx5Q0FBeUMscXpLQzVCdEQsa3pNQW9JQSx5REQvR0ksZUFBZSw0RkFDZiw4QkFBOEIsNHFCQUM5Qix5Q0FBeUMscUhBQ3pDLDZDQUE2Qzs7NEZBSXBDLHlDQUF5QztrQkFmckQsU0FBUzsrQkFFRSxzQ0FBc0MsY0FHcEMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2YsOEJBQThCO3dCQUM5Qix5Q0FBeUM7d0JBQ3pDLDZDQUE2QztxQkFDOUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxhYmVsXCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDb21wYXJlRGF0ZSB9IGZyb20gXCIuL2RlZmluZXMvZGF0ZS1kcm9wZG93bi5kZWZpbmVcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEYXRldGltZURyb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSBcIi4vZGlyZWN0aXZlL2RhdGUtZHJvcGRvd24uZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBJRGF0ZURyb3Bkb3duRGlzYWJsZUtleXMsIElGcm9tQW5kVG9EYXRlTGFiZWwsIElIaWRkZW5EYXRlLCBUWVBFX0RBVEVfRFJPUERPV05fRk9STUFULCBUWVBFX0RBVEVfRk9STUFUIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9kYXRlLWRyb3Bkb3duLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSUVtaXRNdWx0aURhdGVEcm9wZG93biwgSUVtaXRTaW5nbGVEYXRlRHJvcGRvd24gfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2VtaXQtZHJvcGRvd24uaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJRGF0ZURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQsIElEYXRlRHJvcGRvd25JdGVtRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2Z1bmN0aW9ucy1jb250cm9sLWV2ZW50LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSVZhbGlkRGF0ZURyb3Bkb3duIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy92YWxpZC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEYXRldGltZURyb3Bkb3duSXRlbUNvbXBvbmVudCB9IGZyb20gXCIuL2l0ZW0vaXRlbS5jb21wb25lbnRcIjtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNEYXRldGltZURyb3Bkb3duRGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNEYXRldGltZURyb3Bkb3duSXRlbUNvbXBvbmVudFxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgd2lkdGggPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHdpZHRoRWxlbWVudCA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCB3aWR0aExhYmVsID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHdpZHRoTGFiZWxGcm9tID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCB3aWR0aExhYmVsVG8gPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIGlzRXJyb3JDb21wYXJlRGF0ZSA9IHNpZ25hbDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgY2hvb3NlRGF0ZSA9IHNpZ25hbDxJRW1pdE11bHRpRGF0ZURyb3Bkb3duIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgaXNSZXNwb25zaXZlID0gc2lnbmFsPGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBhcnJheUZvcm1hdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy50eXBlRm9ybWF0KCkuc3BsaXQoJy0nKSBhcyBBcnJheTxUWVBFX0RBVEVfRk9STUFUPjtcbiAgfSk7XG4gIHByb3RlY3RlZCBjaGFuZ2VUeXBlID0gc2lnbmFsPGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBjYWNoZVdpZHRoTGFiZWwgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHRpbWVPdXQgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgZnVuY3Rpb25zQ29udHJvbCA9IG5ldyBNYXA8c3RyaW5nLCBJRGF0ZURyb3Bkb3duSXRlbUZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIC8qIElOUFVUICovXG4gIHJlYWRvbmx5IGxhYmVsQ29uZmlnID0gaW5wdXQ8SUxhYmVsIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSB3aWR0aERyb3Bkb3duID0gaW5wdXQ8bnVtYmVyLCBudW1iZXI+KDEzNiwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTM2IH0pO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTIwMCB9KTtcbiAgcmVhZG9ubHkgbWF4WWVhciA9IGlucHV0PG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IG1pblllYXIgPSBpbnB1dDxudW1iZXI+KDApO1xuICByZWFkb25seSBtaW5XaWR0aCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzTXVsdGlwbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHJldmVyc2VZZWFyID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgaXNCb3JkZXJFcnJvciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaWdub3JlV2lkdGgxMDAgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHdpZHRoQnlFbGVtZW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBkaXNhYmxlU2Vjb25kID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB0eXBlRm9ybWF0ID0gaW5wdXQ8VFlQRV9EQVRFX0RST1BET1dOX0ZPUk1BVCwgVFlQRV9EQVRFX0RST1BET1dOX0ZPUk1BVD4oJ21vbnRoLWRheScsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/ICdtb250aC1kYXknIH0pO1xuICByZWFkb25seSBmcm9tQW5kVG9EYXRlTGFiZWwgPSBpbnB1dDxJRnJvbUFuZFRvRGF0ZUxhYmVsPih7IGZyb206ICdpMThuX2xhYmVsX2Zyb20nLCB0bzogJ2kxOG5fdG8nIH0pO1xuICByZWFkb25seSBsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZVRpbWUgPSBpbnB1dDxJRW1pdE11bHRpRGF0ZURyb3Bkb3duIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBpc0VtaXRBZnRlckNoYW5nZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7IC8vIGTDuW5nIMSR4buDIGVtaXQgbeG7l2kgbOG6p24gY2jhu41uIGdpw6EgdHLhu4sgdsOgIGzhuqduIMSR4bqndSBpbml0XG4gIHJlYWRvbmx5IGdldEl0ZW1ZZWFyRGlzcGxheSA9IGlucHV0PCh5ZWFyOiBzdHJpbmcpID0+IHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaWdub3JlRnJvbUFuZFRvRGF0ZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVUZXh0RGlzcGxheVdoZW5Ob1NlbGVjdCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgaGlkZGVuRGF0ZSA9IGlucHV0PElIaWRkZW5EYXRlIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBsaXN0TWF4SXRlbVNob3cgPSBpbnB1dDx7IHllYXI/OiBudW1iZXI7IG1vbnRoPzogbnVtYmVyOyBxdWFydGVyPzogbnVtYmVyOyBkYXk/OiBudW1iZXI7IH0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGlnbm9yZUNvbnZlcnRZZWFyU2VsZWN0ZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxpc3RLZXlzRGlzYWJsZSA9IGlucHV0PElEYXRlRHJvcGRvd25EaXNhYmxlS2V5cyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBpZ25vcmVBbGxvd1RpbWVFcXVhbCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRydWUgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVZhbGlkVGltZUNvbXBhcmUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGlzQ2hlY2tFcnJvcldoZW5TZWxlY3RJdGVtID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4odHJ1ZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlUmVxdWlyZWRWYWx1ZVNlY29uZFdoZW5Ob3RWYWxpZFJlcXVpcmVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpOyAvLyBjw7MgdmFsaWRhdGUgZ2nDoSB0cuG7iyB0aOG7qSAyIGtoaSB2YWxpZFJlcXVpcmVkIGtow7RuZz9cbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PElWYWxpZERhdGVEcm9wZG93bj4oKTtcblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJRGF0ZURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdGVkRHJvcGRvd24gPSBvdXRwdXQ8SUVtaXRTaW5nbGVEYXRlRHJvcGRvd24gfCBJRW1pdE11bHRpRGF0ZURyb3Bkb3duPigpOy8vIGTDuW5nIGNobyB0csaw4budbmcgaOG7o3AgZW1pdCBt4buXaSBt4buZdCBs4bqnbiBjaOG7jW4gZ2nDoSB0cuG7iyBuw6puIGtoaSBz4butIGThu6VuZyBwaOG6o2kgY2hlY2sga8SpIHVuZGVmaW5lZFxuICByZWFkb25seSBvdXRDaG9vc2VNdWx0aURhdGUgPSBvdXRwdXQ8SUVtaXRNdWx0aURhdGVEcm9wZG93bj4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hvb3NlU2luZ2xlRGF0ZSA9IG91dHB1dDxJRW1pdFNpbmdsZURhdGVEcm9wZG93bj4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJpdmF0ZSBjb250YWluZXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3BhcmVudCcpO1xuICBwcml2YXRlIGxhYmVsRnJvbVJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignbGFiZWxGcm9tJyk7XG4gIHByaXZhdGUgbGFiZWxUb1JlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignbGFiZWxUbycpO1xuXG4gIC8qIElOSkVDVCAqL1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHRoaXMuaXNNdWx0aXBsZSgpO1xuXG4gICAgICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNoYW5nZVR5cGUuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wuY2xlYXIoKTtcbiAgICAgICAgdGltZXIoMCkucGlwZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGVja1Jlc3BvbnNpdmUoKTtcbiAgICAgICAgICB0aGlzLmNoYW5nZVR5cGUuc2V0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHsgY2hlY2tJc1ZhbGlkOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyksIHJlc2V0RXJyb3I6IHRoaXMucmVzZXRFcnJvci5iaW5kKHRoaXMpLCByZXNldFRpbWU6IHRoaXMucmVzZXREcm9wZG93bi5iaW5kKHRoaXMpIH0pO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZVRpbWUoKSkge1xuICAgICAgdGhpcy5jaG9vc2VEYXRlLnNldCh0aGlzLnNlbGVjdGVkRGF0ZVRpbWUoKSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSh0aGlzLnNldFdpZHRoRGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLndpZHRoTGFiZWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGltZXIoMCkucGlwZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrUmVzcG9uc2l2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrUmVzcG9uc2l2ZSgpIHtcbiAgICB0aGlzLmlzUmVzcG9uc2l2ZS5zZXQoZmFsc2UpO1xuICAgIGNvbnN0IHdpZHRoRWxlbWVudFBhcmVudCA9IHRoaXMuY29udGFpbmVyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDA7XG5cbiAgICB0aGlzLndpZHRoTGFiZWxGcm9tLnNldCh0aGlzLmxhYmVsRnJvbVJlZigpPy5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwKTtcbiAgICB0aGlzLndpZHRoTGFiZWxUby5zZXQodGhpcy5sYWJlbFRvUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApO1xuXG4gICAgY29uc3Qgc3BhY2VCZXR3ZWVuRGF0ZSA9ICh0aGlzLmFycmF5Rm9ybWF0KCkubGVuZ3RoICogMikgKyAodGhpcy5mcm9tQW5kVG9EYXRlTGFiZWwoKS5mcm9tID8gMSA6IDApO1xuICAgIGNvbnN0IHdpZHRoID0gKHRoaXMud2lkdGhEcm9wZG93bigpICogNCkgKyAoOCAqIHNwYWNlQmV0d2VlbkRhdGUpICsgdGhpcy53aWR0aExhYmVsRnJvbSgpICsgdGhpcy53aWR0aExhYmVsVG8oKTtcblxuICAgIGlmICh3aWR0aEVsZW1lbnRQYXJlbnQgPCB3aWR0aCkge1xuICAgICAgdGhpcy5pc1Jlc3BvbnNpdmUuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlU2VsZWN0ZWRLZXkoZXZlbnQ6IElFbWl0U2luZ2xlRGF0ZURyb3Bkb3duLCB0eXBlOiAnZnJvbScgfCAndG8nKSB7XG4gICAgdGhpcy5jaG9vc2VEYXRlLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgIGN1cnJlbnRbdHlwZV0uc2V0KGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuaXNFbWl0QWZ0ZXJDaGFuZ2VkKCkpIHtcbiAgICAgIGNvbnN0IGRhdGFFbWl0ID0gdGhpcy5pc011bHRpcGxlKCkgPyB0aGlzLmNob29zZURhdGUoKSA6IHRoaXMuY2hvb3NlRGF0ZSgpPy5mcm9tKCk7XG5cbiAgICAgIGlmIChkYXRhRW1pdCkge1xuICAgICAgICB0aGlzLm91dFNlbGVjdGVkRHJvcGRvd24uZW1pdChkYXRhRW1pdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXBwbHlEYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0RHJvcGRvd24oKSB7XG4gICAgdGhpcy5mdW5jdGlvbnNDb250cm9sLmZvckVhY2goY29udHJvbCA9PiBjb250cm9sLnJlc2V0RHJvcGRvd24oKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0RXJyb3IoKSB7XG4gICAgdGhpcy5mdW5jdGlvbnNDb250cm9sLmZvckVhY2goY29udHJvbCA9PiBjb250cm9sLnJlc2V0RXJyb3IoKSk7XG4gIH1cblxuICBwcml2YXRlIHNldFdpZHRoRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyUmVmKCkgfHwgIXRoaXMuY29udGFpbmVyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGltZXIoMCkucGlwZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrUmVzcG9uc2l2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGdW5jdGlvbkNvbnRyb2woZXZlbnQ6IElEYXRlRHJvcGRvd25JdGVtRnVuY3Rpb25Db250cm9sRXZlbnQsIHR5cGU6ICdmcm9tJyB8ICd0bycpIHtcbiAgICB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wuc2V0KHR5cGUsIGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja1ZhbGlkKCkge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5mdW5jdGlvbnNDb250cm9sLnZhbHVlcygpKSB7XG4gICAgICBpZiAoIShhd2FpdCBjb250cm9sLmNoZWNrSXNWYWxpZCgpKSkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5jb21wYXJlRGF0ZSgpKSB7XG4gICAgICB2YWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RXJyb3IoZXJyb3I6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wuZm9yRWFjaChjb250cm9sID0+IGNvbnRyb2wuc2V0RXJyb3IoZXJyb3IpKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZURhdGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZUZvcm1hdCgpLnNwbGl0KCctJykgYXMgQXJyYXk8VFlQRV9EQVRFX0ZPUk1BVD47XG4gICAgY29uc3QgZGF0ZUNvbXBhcmU6IEFycmF5PHsgZnJvbTogbnVtYmVyIHwgdW5kZWZpbmVkLCB0bzogbnVtYmVyIHwgdW5kZWZpbmVkIH0+ID0gW107XG5cbiAgICB0eXBlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBmcm9tID0gdGhpcy5jaG9vc2VEYXRlKCk/LmZyb20oKVtpdGVtXTtcbiAgICAgIGNvbnN0IHRvID0gdGhpcy5jaG9vc2VEYXRlKCk/LnRvKClbaXRlbV07XG5cbiAgICAgIGRhdGVDb21wYXJlLnB1c2goeyBmcm9tOiBmcm9tLCB0bzogdG8gfSk7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuaWdub3JlVmFsaWRUaW1lQ29tcGFyZSgpIHx8ICF0aGlzLmNoZWNrQ29uZGl0aW9uKHRydWUpKSB7XG4gICAgICB0aGlzLmlzRXJyb3JDb21wYXJlRGF0ZS5zZXQoZmFsc2UpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChDb21wYXJlRGF0ZShkYXRlQ29tcGFyZSwgdGhpcy5pZ25vcmVBbGxvd1RpbWVFcXVhbCgpKSkge1xuICAgICAgdGhpcy5zZXRFcnJvcih0cnVlKTtcbiAgICAgIHRoaXMuaXNFcnJvckNvbXBhcmVEYXRlLnNldCh0cnVlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRoaXMuaXNFcnJvckNvbXBhcmVEYXRlLnNldChmYWxzZSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG5cbiAgICBpZiAoIXRoaXMudmFsaWRSZXF1aXJlZCgpKSB7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tDb25kaXRpb24oZmFsc2UpICYmICF0aGlzLmlnbm9yZVJlcXVpcmVkVmFsdWVTZWNvbmRXaGVuTm90VmFsaWRSZXF1aXJlZCgpKSB7XG4gICAgICAgIHZhbGlkID0gYXdhaXQgdGhpcy5jaGVja1ZhbGlkKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jaGVja1ZhbGlkKCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQ29uZGl0aW9uKGhhc1ZhbHVlOiBib29sZWFuKSB7XG4gICAgbGV0IGNoZWNrVmFsdWUgPSB0cnVlO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGVGb3JtYXQoKS5zcGxpdCgnLScpIGFzIEFycmF5PFRZUEVfREFURV9GT1JNQVQ+O1xuXG4gICAgdHlwZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGhhc1ZhbHVlICYmICghdGhpcy5jaG9vc2VEYXRlKCk/LmZyb20oKVtpdGVtXSB8fCAhdGhpcy5jaG9vc2VEYXRlKCk/LnRvKClbaXRlbV0pKSB7XG4gICAgICAgIGNoZWNrVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghaGFzVmFsdWUgJiYgKHRoaXMuY2hvb3NlRGF0ZSgpPy5mcm9tKClbaXRlbV0gfHwgdGhpcy5jaG9vc2VEYXRlKCk/LnRvKClbaXRlbV0pKSB7XG4gICAgICAgIGNoZWNrVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjaGVja1ZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwcGx5RGF0ZSgpIHtcbiAgICB0aGlzLnNldEVycm9yKGZhbHNlKTtcbiAgICB0aGlzLmlzRXJyb3JDb21wYXJlRGF0ZS5zZXQoZmFsc2UpO1xuICAgIGlmICh0aGlzLmlzQ2hlY2tFcnJvcldoZW5TZWxlY3RJdGVtKCkgJiYgIXRoaXMudmFsaWRhdGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmcm9tID0gdGhpcy5jaG9vc2VEYXRlKCk/LmZyb207XG4gICAgY29uc3QgdG8gPSB0aGlzLmNob29zZURhdGUoKT8udG87XG5cbiAgICBpZiAodGhpcy5pc011bHRpcGxlKCkpIHtcbiAgICAgIGlmICh0aGlzLmNvbXBhcmVEYXRlKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGRhdGFTZWxlY3RlZDogSUVtaXRNdWx0aURhdGVEcm9wZG93biB8IHVuZGVmaW5lZCA9IHsgZnJvbTogc2lnbmFsKHt9KSwgdG86IHNpZ25hbCh7fSkgfTtcblxuICAgICAgdGhpcy5hcnJheUZvcm1hdCgpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKCFmcm9tPy4oKT8uW2tleV0gfHwgIXRvPy4oKT8uW2tleV0pIHtcbiAgICAgICAgICBkYXRhU2VsZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFTZWxlY3RlZCkge1xuICAgICAgICAgIGRhdGFTZWxlY3RlZC5mcm9tLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IE51bWJlcihmcm9tPy4oKVtrZXldKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGF0YVNlbGVjdGVkLnRvLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IE51bWJlcih0bz8uKClba2V5XSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChkYXRhU2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5vdXRDaG9vc2VNdWx0aURhdGUuZW1pdChkYXRhU2VsZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBkYXRhU2VsZWN0ZWQ6IElFbWl0U2luZ2xlRGF0ZURyb3Bkb3duIHwgdW5kZWZpbmVkID0ge307XG5cbiAgICB0aGlzLmFycmF5Rm9ybWF0KCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFmcm9tPy4oKT8uW2tleV0pIHtcbiAgICAgICAgZGF0YVNlbGVjdGVkID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFTZWxlY3RlZCkge1xuICAgICAgICBkYXRhU2VsZWN0ZWRba2V5XSA9IE51bWJlcihmcm9tPy4oKT8uW2tleV0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGRhdGFTZWxlY3RlZCkge1xuICAgICAgdGhpcy5vdXRDaG9vc2VTaW5nbGVEYXRlLmVtaXQoZGF0YVNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVdpZHRoTGFiZWwod2lkdGg6IG51bWJlcikge1xuICAgIHRoaXMuY2FjaGVXaWR0aExhYmVsLnNldCh3aWR0aCA8ICh0aGlzLmNhY2hlV2lkdGhMYWJlbCgpIHx8IDApID8gdGhpcy5jYWNoZVdpZHRoTGFiZWwoKSA6IE1hdGguY2VpbCh3aWR0aCkpO1xuICAgIGlmICh0aGlzLnRpbWVPdXQoKSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZU91dCgpKTtcbiAgICB9XG4gICAgdGhpcy50aW1lT3V0LnNldCgoc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLndpZHRoTGFiZWwuc2V0KHRoaXMuY2FjaGVXaWR0aExhYmVsKCkpO1xuICAgIH0sIDEwMCkgYXMgdW5rbm93bikgYXMgbnVtYmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZShmbGFnTW91c2U6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdChmbGFnTW91c2UpO1xuICB9XG59IiwiQGlmIChsYWJlbENvbmZpZygpOyBhcyBsYWJlbENvbmZpZykge1xuICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgW2xhYmVsTGVmdENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdENsYXNzXCJcbiAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWQgXCJcbiAgICBbZGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgIFtsYWJlbFJpZ2h0XT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICBbYnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgW2Rlc2NyaXB0aW9uQ2xhc3NdPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25DbGFzc1wiXG4gICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgIFtkaXNhYmxlQnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgIFtoYXNUb2dnbGVdPVwibGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgIFtwb3BvdmVyXT1cImxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgIFtsaW1pdExlbmd0aF09XCJsYWJlbENvbmZpZy5saW1pdExlbmd0aFwiXG4gICAgW2NvdW50XT1cImxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbn1cbjxkaXYgI3BhcmVudFxuICBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnRcIlxuICBbY2xhc3MuIXctZnVsbF09XCJ3aWR0aEJ5RWxlbWVudCgpXCJcbiAgW2NsYXNzLiFjb2x1bW5dPVwiaXNSZXNwb25zaXZlKCkgJiYgaXNNdWx0aXBsZSgpXCI+XG4gIDxkaXYgI2NoaWxkRnJvbVxuICAgIGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydFwiXG4gICAgW2NsYXNzLiF3LVs1MCVdXT1cIndpZHRoQnlFbGVtZW50KCkgJiYgIWlzUmVzcG9uc2l2ZSgpXCJcbiAgICBbY2xhc3MuIW1iLVs4cHhdXT1cImlzUmVzcG9uc2l2ZSgpICYmIGlzTXVsdGlwbGUoKVwiXG4gICAgW2NsYXNzLiFtci1bOHB4XV09XCIhaXNSZXNwb25zaXZlKCkgJiYgaXNNdWx0aXBsZSgpXCJcbiAgICBbY2xhc3MuIXctZnVsbF09XCIhaXNNdWx0aXBsZSgpICYmICF3aWR0aEJ5RWxlbWVudCgpIHx8IGlzUmVzcG9uc2l2ZSgpXCJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwiIXdpZHRoQnlFbGVtZW50KCkgJiYgaXNNdWx0aXBsZSgpICYmICFpc1Jlc3BvbnNpdmUoKSA/KCh3aWR0aERyb3Bkb3duKCkgKiBhcnJheUZvcm1hdC5sZW5ndGgpKyg4ICogYXJyYXlGb3JtYXQubGVuZ3RoKSArIHdpZHRoTGFiZWxGcm9tKCkpOnVuZGVmaW5lZFwiPlxuXG4gICAgQGlmIChpc011bHRpcGxlKCkgJiYgIWlnbm9yZUZyb21BbmRUb0RhdGVMYWJlbCgpICYmIGZyb21BbmRUb0RhdGVMYWJlbCgpLmZyb20pIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJtci1bOHB4XSBmbGV4LXNocmluay0wIGgtWzMycHhdIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImlzUmVzcG9uc2l2ZSgpID8gKHdpZHRoTGFiZWwoKSB8fCB1bmRlZmluZWQpIDogdW5kZWZpbmVkXCI+XG4gICAgICAgIDxzcGFuICNsYWJlbEZyb21cbiAgICAgICAgICBMaWJzVWlDb21wb25lbnRzRGF0ZXRpbWVEcm9wZG93bkRpcmVjdGl2ZVxuICAgICAgICAgIFtjbGFzcy4hb3BhY2l0eS1bMC41XV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg1ciB0ZXh0LW5vd3JhcCB7eyBmcm9tQW5kVG9EYXRlTGFiZWwoKS5jbGFzc0xhYmVsRnJvbSB8fCAnJyB9fVwiXG4gICAgICAgICAgKG91dENoYW5nZVdpZHRoKT1cImhhbmRsZXJDaGFuZ2VXaWR0aExhYmVsKCRldmVudClcIj5cbiAgICAgICAgICB7eyAoZnJvbUFuZFRvRGF0ZUxhYmVsKCkuZnJvbXx8JyAnKXwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwiZmxleFwiXG4gICAgICBbY2xhc3MuIXctZnVsbF09XCJ3aWR0aEJ5RWxlbWVudCgpXCI+XG4gICAgICBAaWYgKCFjaGFuZ2VUeXBlKCkpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kYXRldGltZS1kcm9wZG93bi1pdGVtIFtjbGFzcy4hdy1mdWxsXT1cIndpZHRoQnlFbGVtZW50KClcIlxuICAgICAgICAgIFtkaXNhYmxlU2Vjb25kXT1cImRpc2FibGVTZWNvbmQoKVwiXG4gICAgICAgICAgW3R5cGVEYXRlXT1cInR5cGVGb3JtYXQoKVwiXG4gICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgW21heFllYXJdPVwibWF4WWVhcigpXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgIFttaW5ZZWFyXT1cIm1pblllYXIoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtpc011bHRpcGxlXT1cImlzTXVsdGlwbGUoKSA/IGlzUmVzcG9uc2l2ZSgpID8gdHJ1ZSA6IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgW3JldmVyc2VZZWFyXT1cInJldmVyc2VZZWFyKClcIlxuICAgICAgICAgIFtzZWxlY3RlZERhdGVdPVwic2VsZWN0ZWREYXRlVGltZSgpPy5mcm9tKCkgfHwge31cIlxuICAgICAgICAgIFt3aWR0aERyb3Bkb3duXT1cIndpZHRoRHJvcGRvd24oKVwiXG4gICAgICAgICAgW3dpZHRoQnlFbGVtZW50XT1cIndpZHRoQnlFbGVtZW50KClcIlxuICAgICAgICAgIFtnZXRJdGVtWWVhckRpc3BsYXldPVwiZ2V0SXRlbVllYXJEaXNwbGF5KClcIlxuICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwibGlzdE1heEl0ZW1TaG93KClcIlxuICAgICAgICAgIFtsaXN0S2V5c0Rpc2FibGVdPVwibGlzdEtleXNEaXNhYmxlKCk/LmZyb20oKVwiXG4gICAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb24oKVwiXG4gICAgICAgICAgW2lzRW1pdFNlbGVjdGVkRHJvcERvd25dPVwiaXNFbWl0QWZ0ZXJDaGFuZ2VkKClcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVUZXh0RGlzcGxheVdoZW5Ob1NlbGVjdF09XCInbGlicy11aS1mb250LWg1ciAnICsgY2xhc3NJbmNsdWRlVGV4dERpc3BsYXlXaGVuTm9TZWxlY3RcIlxuICAgICAgICAgIChvdXRTZWxlY3RlZERhdGEpPVwiaGFuZGxlckNoYW5nZVNlbGVjdGVkS2V5KCRldmVudCwgJ2Zyb20nKVwiXG4gICAgICAgICAgKG91dEZ1bmN0aW9uQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwnZnJvbScpXCJcbiAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIEBpZiAoaXNNdWx0aXBsZSgpKSB7XG4gICAgPGRpdiAjY2hpbGRUb1xuICAgICAgW2NsYXNzLiF3LVs1MCVdXT1cIndpZHRoQnlFbGVtZW50KClcIlxuICAgICAgW2NsYXNzLiF3LWZ1bGxdPVwiICF3aWR0aEJ5RWxlbWVudCgpIHx8IGlzUmVzcG9uc2l2ZSgpXCJcbiAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1yLVs4cHhdIGgtWzMycHhdIGZsZXgtc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiaXNSZXNwb25zaXZlKCkgPyB3aWR0aExhYmVsKCkgOiB1bmRlZmluZWRcIj5cbiAgICAgICAgQGlmICghaWdub3JlRnJvbUFuZFRvRGF0ZUxhYmVsKCkpIHtcbiAgICAgICAgICA8c3BhbiAjbGFiZWxUb1xuICAgICAgICAgICAgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25EaXJlY3RpdmVcbiAgICAgICAgICAgIFtjbGFzcy4hb3BhY2l0eS1bMC41XV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIHRleHQtbm93cmFwIHt7IGZyb21BbmRUb0RhdGVMYWJlbCgpLmNsYXNzTGFiZWxUbyB8fCAnJyB9fVwiXG4gICAgICAgICAgICAob3V0Q2hhbmdlV2lkdGgpPVwiaGFuZGxlckNoYW5nZVdpZHRoTGFiZWwoJGV2ZW50KVwiPlxuICAgICAgICAgICAge3sgKGZyb21BbmRUb0RhdGVMYWJlbCgpLnRvfHwnICcpfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChpZ25vcmVGcm9tQW5kVG9EYXRlTGFiZWwoKSkge1xuICAgICAgICAgIDxzcGFuIFtjbGFzcy4hb3BhY2l0eS1bMC41XV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyXCI+LTwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiXG4gICAgICAgIFtjbGFzcy4hdy1mdWxsXT1cIndpZHRoQnlFbGVtZW50KClcIj5cbiAgICAgICAgQGlmICghY2hhbmdlVHlwZSgpKSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kYXRldGltZS1kcm9wZG93bi1pdGVtIFtjbGFzcy53LWZ1bGxdPVwid2lkdGhCeUVsZW1lbnQoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZVNlY29uZF09XCJkaXNhYmxlU2Vjb25kKClcIlxuICAgICAgICAgICAgW3R5cGVEYXRlXT1cInR5cGVGb3JtYXQoKVwiXG4gICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgICAgIFttYXhZZWFyXT1cIm1heFllYXIoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgW21pblllYXJdPVwibWluWWVhcigpXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICAgIFtpc011bHRpcGxlXT1cImlzTXVsdGlwbGUoKVwiXG4gICAgICAgICAgICBbcmV2ZXJzZVllYXJdPVwicmV2ZXJzZVllYXIoKVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cInNlbGVjdGVkRGF0ZVRpbWUoKT8udG8oKSB8fCB7fVwiXG4gICAgICAgICAgICBbd2lkdGhEcm9wZG93bl09XCJ3aWR0aERyb3Bkb3duKClcIlxuICAgICAgICAgICAgW3dpZHRoQnlFbGVtZW50XT1cIndpZHRoQnlFbGVtZW50KClcIlxuICAgICAgICAgICAgW2dldEl0ZW1ZZWFyRGlzcGxheV09XCJnZXRJdGVtWWVhckRpc3BsYXkoKVwiXG4gICAgICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cImxpc3RNYXhJdGVtU2hvdygpXCJcbiAgICAgICAgICAgIFtsaXN0S2V5c0Rpc2FibGVdPVwibGlzdEtleXNEaXNhYmxlKCk/LnRvKClcIlxuICAgICAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb24oKVwiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlVGV4dERpc3BsYXlXaGVuTm9TZWxlY3RdPVwiJ2xpYnMtdWktZm9udC1oNXIgJyArIGNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0XCJcbiAgICAgICAgICAgIFtpc0VtaXRTZWxlY3RlZERyb3BEb3duXT1cImlzRW1pdEFmdGVyQ2hhbmdlZCgpXCJcbiAgICAgICAgICAgIChvdXRTZWxlY3RlZERhdGEpPVwiaGFuZGxlckNoYW5nZVNlbGVjdGVkS2V5KCRldmVudCwgJ3RvJylcIlxuICAgICAgICAgICAgKG91dEZ1bmN0aW9uQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwndG8nKVwiXG4gICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG5AaWYgKGlzRXJyb3JDb21wYXJlRGF0ZSgpKSB7XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBtdC1bNHB4XVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1tZXNzYWdlLWVycm9yIGxpYnMtdWktZm9udC1oN3JcIj57eyB2YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2VWYWxpZENvbXBhcmVUaW1lIHx8IFwiaTE4bl9pbnZhbGlkX2VuZF9kYXRlX3NlbGVjdGVkXCIgfCB0cmFuc2xhdGU6dmFsaWRSZXF1aXJlZCgpPy5pbnRlcnBvbGF0ZVBhcmFtc0NvbXBhcmVUaW1lIH19PC9zcGFuPlxuICA8L2Rpdj5cbn1cbiJdfQ==
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './dropdown.component';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
export var SideEnum;
|
|
3
|
+
(function (SideEnum) {
|
|
4
|
+
SideEnum["from"] = "from";
|
|
5
|
+
SideEnum["to"] = "to";
|
|
6
|
+
})(SideEnum || (SideEnum = {}));
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1kcm9wZG93bi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2ludGVyZmFjZXMvZGF0ZS1kcm9wZG93bi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBOEJ2RCxNQUFNLENBQU4sSUFBWSxRQUdYO0FBSEQsV0FBWSxRQUFRO0lBQ2xCLHlCQUFhLENBQUE7SUFDYixxQkFBUyxDQUFBO0FBQ1gsQ0FBQyxFQUhXLFFBQVEsS0FBUixRQUFRLFFBR25CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5pbXBvcnQgeyBXcml0YWJsZVNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duXCI7XG5cbmV4cG9ydCB0eXBlIFRZUEVfRFJPUERPV05fTU9OVEhfSUQgPSAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDkgfCAxMCB8IDExIHwgMTI7XG5leHBvcnQgdHlwZSBUWVBFX0RBVEVfRFJPUERPV05fRk9STUFUID0gJ3llYXInIHwgJ21vbnRoJyB8ICdxdWFydGVyJyB8ICd5ZWFyLW1vbnRoJyB8ICdtb250aC1kYXknIHwgJ3llYXItcXVhcnRlcicgfCBzdHJpbmc7XG5leHBvcnQgdHlwZSBUWVBFX0RBVEVfRk9STUFUID0gJ3llYXInIHwgJ21vbnRoJyB8ICdxdWFydGVyJyB8ICdkYXknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUeXBlRGF0ZSB7XG4gIGlkOiBUWVBFX0RBVEVfRk9STUFULFxuICBrZXlTZWxlY3RlZDogYW55LFxuICBkaXNhYmxlPzogYm9vbGVhbixcbiAgc2hvd0JvcmRlckVycm9yPzogYm9vbGVhbixcbiAgaXNFcnJvcj86IGJvb2xlYW4sXG4gIGZ1bmN0aW9uQ29udHJvbD86IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVEcm9wZG93bkRpc2FibGVLZXlzIHtcbiAgZnJvbT86IFdyaXRhYmxlU2lnbmFsPElEYXRlRHJvcGRvd25EaXNhYmxlPjtcbiAgdG8/OiBXcml0YWJsZVNpZ25hbDxJRGF0ZURyb3Bkb3duRGlzYWJsZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVEcm9wZG93bkRpc2FibGUge1xuICB5ZWFyPzogV3JpdGFibGVTaWduYWw8QXJyYXk8bnVtYmVyPj47XG4gIG1vbnRoPzogV3JpdGFibGVTaWduYWw8QXJyYXk8bnVtYmVyPj47XG4gIHF1YXJ0ZXI/OiBXcml0YWJsZVNpZ25hbDxBcnJheTxudW1iZXI+PjtcbiAgZGF5PzogV3JpdGFibGVTaWduYWw8QXJyYXk8bnVtYmVyPj47XG59XG5cbmV4cG9ydCBlbnVtIFNpZGVFbnVtIHtcbiAgZnJvbSA9ICdmcm9tJyxcbiAgdG8gPSAndG8nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhpZGRlbkRhdGUge1xuICBmb3JtYXREYXRlOiBUWVBFX0RBVEVfRFJPUERPV05fRk9STUFUO1xuICB5ZWFyTW9udGg/OiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJSGlkZGVuRGF0ZVllYXJNb250aD4+PjtcbiAgbW9udGhEYXk/OiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJSGlkZGVuRGF0ZU1vbnRoRGF5Pj4+O1xufVxuXG5pbnRlcmZhY2UgSUhpZGRlbkRhdGVNb250aERheSB7XG4gIGhpZGRlbk1vbnRoOiBudW1iZXI7XG4gIGhpZGRlbkRheXM6IEFycmF5PG51bWJlcj5cbn1cbmludGVyZmFjZSBJSGlkZGVuRGF0ZVllYXJNb250aCB7XG4gIGhpZGRlblllYXI6IG51bWJlcjtcbiAgaGlkZGVuTW9udGhzOiBBcnJheTxudW1iZXI+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZyb21BbmRUb0RhdGVMYWJlbCB7XG4gIHRvPzogc3RyaW5nLFxuICBmcm9tPzogc3RyaW5nLFxuICBjbGFzc0xhYmVsVG8/OiBzdHJpbmcsXG4gIGNsYXNzTGFiZWxGcm9tPzogc3RyaW5nO1xufSJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdC1kcm9wZG93bi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2ludGVyZmFjZXMvZW1pdC1kcm9wZG93bi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyaXRhYmxlU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJRW1pdE11bHRpRGF0ZURyb3Bkb3duIHtcbiAgZnJvbTogV3JpdGFibGVTaWduYWw8SUVtaXRTaW5nbGVEYXRlRHJvcGRvd24+O1xuICB0bzogV3JpdGFibGVTaWduYWw8SUVtaXRTaW5nbGVEYXRlRHJvcGRvd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbWl0U2luZ2xlRGF0ZURyb3Bkb3duIHtcbiAgeWVhcj86IG51bWJlcjtcbiAgbW9udGg/OiBudW1iZXI7XG4gIHF1YXJ0ZXI/OiBudW1iZXI7XG4gIGRheT86IG51bWJlcjtcbn0iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL2Ryb3Bkb3duL3NyYy9pbnRlcmZhY2VzL2Z1bmN0aW9ucy1jb250cm9sLWV2ZW50LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJRGF0ZURyb3Bkb3duSXRlbUZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgY2hlY2tJc1ZhbGlkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICByZXNldERyb3Bkb3duOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZXNldEVycm9yOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzZXRFcnJvcjogKGVycm9yOiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgY2hlY2tJc1ZhbGlkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICByZXNldEVycm9yPzogKCkgPT4gUHJvbWlzZTx2b2lkPlxuICByZXNldFRpbWU/OiAoKSA9PiBQcm9taXNlPHZvaWQ+XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
;
|
|
2
|
+
export {};
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL2Ryb3Bkb3duL3NyYy9pbnRlcmZhY2VzL3ZhbGlkLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJVmFsaWREYXRlRHJvcGRvd24ge1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBpbnRlcnBvbGF0ZVBhcmFtcz86IHsgYW55OiBvYmplY3QgfTtcbiAgbWVzc2FnZVZhbGlkQ29tcGFyZVRpbWU/OiBzdHJpbmc7XG4gIGludGVycG9sYXRlUGFyYW1zQ29tcGFyZVRpbWU/OiB7IGFueTogb2JqZWN0IH07XG59O1xuIl19
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { Component, computed, effect, inject, input, output, signal, untracked } from "@angular/core";
|
|
3
|
+
import { LibsUiComponentsDropdownComponent } from "@libs-ui/components-dropdown";
|
|
4
|
+
import { TranslateModule, TranslateService } from "@ngx-translate/core";
|
|
5
|
+
import { convertGetValue, convertItemSelectedDefine, getConfigHttpRequestDetailDate, getConfigHttpRequestListDate } from "../../defines/date-dropdown.define";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@ngx-translate/core";
|
|
8
|
+
export class LibsUiComponentsDatetimeDropdownItemChildComponent {
|
|
9
|
+
/* PROPERTY */
|
|
10
|
+
httpRequestDetailItemById = signal(undefined);
|
|
11
|
+
listConfig = signal({
|
|
12
|
+
type: 'text',
|
|
13
|
+
configTemplateText: signal({
|
|
14
|
+
fieldKey: 'id',
|
|
15
|
+
autoScrollToItemSelected: true,
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
textNoSelectDisplay = computed(this.computedTextNoSelectDisplay.bind(this));
|
|
19
|
+
usingWidth = computed(this.computedWidth.bind(this));
|
|
20
|
+
/* INPUT */
|
|
21
|
+
typeDate = input(undefined);
|
|
22
|
+
getItemYearDisplay = input();
|
|
23
|
+
listHasButtonUnSelectOption = input();
|
|
24
|
+
readonly = input(false, { transform: (value) => value ?? false });
|
|
25
|
+
disable = input(false, { transform: (value) => value ?? false });
|
|
26
|
+
listData = input([]);
|
|
27
|
+
showBorderError = input(undefined);
|
|
28
|
+
listMaxItemShow = input(6, { transform: (value) => value ?? 6 });
|
|
29
|
+
zIndex = input(1000, { transform: (value) => value ?? 1000 });
|
|
30
|
+
classIncludeTextDisplayWhenNoSelect = input('');
|
|
31
|
+
listKeySelected = input();
|
|
32
|
+
widthDropdown = input(136);
|
|
33
|
+
first = input(undefined);
|
|
34
|
+
isError = input();
|
|
35
|
+
widthByElement = input();
|
|
36
|
+
ignoreConvertYearSelected = input();
|
|
37
|
+
listKeysDisable = input(undefined);
|
|
38
|
+
validRequired = input();
|
|
39
|
+
/* OUTPUT */
|
|
40
|
+
outSelectedKey = output();
|
|
41
|
+
outFunctionControl = output();
|
|
42
|
+
outChangStageFlagMouse = output();
|
|
43
|
+
/* INJECT */
|
|
44
|
+
translate = inject(TranslateService);
|
|
45
|
+
constructor() {
|
|
46
|
+
effect(() => {
|
|
47
|
+
const listData = this.listData();
|
|
48
|
+
untracked(() => {
|
|
49
|
+
this.httpRequestDetailItemById.set(getConfigHttpRequestDetailDate(listData));
|
|
50
|
+
this.listConfig.update(current => {
|
|
51
|
+
if (!current.httpRequestData) {
|
|
52
|
+
current.httpRequestData = signal(getConfigHttpRequestListDate(listData));
|
|
53
|
+
}
|
|
54
|
+
current.httpRequestData.set(getConfigHttpRequestListDate(listData));
|
|
55
|
+
if (!current.configTemplateText) {
|
|
56
|
+
current.configTemplateText = signal({
|
|
57
|
+
fieldKey: 'id',
|
|
58
|
+
autoScrollToItemSelected: true,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
current.configTemplateText.set({
|
|
62
|
+
fieldKey: 'id',
|
|
63
|
+
autoScrollToItemSelected: true,
|
|
64
|
+
getValue: (item) => {
|
|
65
|
+
return convertGetValue(this.typeDate() || 'month', item, this.translate);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return current;
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/* FUNCTIONS */
|
|
74
|
+
handlerChangeSelectedItem(event) {
|
|
75
|
+
if (!event || !event.key) {
|
|
76
|
+
this.outSelectedKey.emit(undefined);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this.outSelectedKey.emit(event.key);
|
|
80
|
+
}
|
|
81
|
+
handlerFunctionControl(event) {
|
|
82
|
+
this.outFunctionControl.emit(event);
|
|
83
|
+
}
|
|
84
|
+
handlerChangFlagMouse(flagMouse) {
|
|
85
|
+
this.outChangStageFlagMouse.emit(flagMouse);
|
|
86
|
+
}
|
|
87
|
+
convertItemSelected = (item) => {
|
|
88
|
+
if (!item || !this.typeDate()) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
item.labelDisplay = convertItemSelectedDefine(this.typeDate() ?? 'month', item, this.translate, this.getItemYearDisplay(), this.ignoreConvertYearSelected());
|
|
92
|
+
return item;
|
|
93
|
+
};
|
|
94
|
+
computedTextNoSelectDisplay() {
|
|
95
|
+
switch (this.typeDate()) {
|
|
96
|
+
case 'day':
|
|
97
|
+
return 'i18n_select_day';
|
|
98
|
+
case 'month':
|
|
99
|
+
return 'i18n_select_month';
|
|
100
|
+
case 'year':
|
|
101
|
+
return 'i18n_select_year';
|
|
102
|
+
case 'quarter':
|
|
103
|
+
return 'i18n_select_quarter';
|
|
104
|
+
default:
|
|
105
|
+
return 'month';
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
computedWidth() {
|
|
109
|
+
if (this.widthByElement()) {
|
|
110
|
+
return this.first() ? `${this.widthDropdown()}px` : '100%';
|
|
111
|
+
}
|
|
112
|
+
return `${this.widthDropdown()}px`;
|
|
113
|
+
}
|
|
114
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimeDropdownItemChildComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
115
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDatetimeDropdownItemChildComponent, isStandalone: true, selector: "libs_ui-components-datetime-dropdown-item-child", inputs: { typeDate: { classPropertyName: "typeDate", publicName: "typeDate", isSignal: true, isRequired: false, transformFunction: null }, getItemYearDisplay: { classPropertyName: "getItemYearDisplay", publicName: "getItemYearDisplay", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, listData: { classPropertyName: "listData", publicName: "listData", isSignal: true, isRequired: false, transformFunction: null }, showBorderError: { classPropertyName: "showBorderError", publicName: "showBorderError", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, listKeySelected: { classPropertyName: "listKeySelected", publicName: "listKeySelected", isSignal: true, isRequired: false, transformFunction: null }, widthDropdown: { classPropertyName: "widthDropdown", publicName: "widthDropdown", isSignal: true, isRequired: false, transformFunction: null }, first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, isError: { classPropertyName: "isError", publicName: "isError", isSignal: true, isRequired: false, transformFunction: null }, widthByElement: { classPropertyName: "widthByElement", publicName: "widthByElement", isSignal: true, isRequired: false, transformFunction: null }, ignoreConvertYearSelected: { classPropertyName: "ignoreConvertYearSelected", publicName: "ignoreConvertYearSelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outSelectedKey: "outSelectedKey", outFunctionControl: "outFunctionControl", outChangStageFlagMouse: "outChangStageFlagMouse" }, ngImport: i0, template: " @if (typeDate() && this.listConfig().httpRequestData?.()) {\n <div [style.width]=\"usingWidth()\">\n <libs_ui-components-dropdown [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [readonly]=\"readonly()\"\n [textDisplayWhenNoSelect]=\"textNoSelectDisplay()\"\n [disable]=\"disable()\"\n [showBorderError]=\"showBorderError()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listClickExactly]=\"false\"\n [zIndex]=\"zIndex()\"\n [labelPopoverConfig]=\"{ zIndex: zIndex() +1 }\"\n [listConfig]=\"listConfig()\"\n [listKeysDisable]=\"listKeysDisable()\"\n [convertItemSelected]=\"convertItemSelected\"\n [onlyEmitDataWhenReset]=\"true\"\n [classIncludeTextDisplayWhenNoSelect]=\"classIncludeTextDisplayWhenNoSelect()\"\n [httpRequestDetailItemById]=\"httpRequestDetailItemById()\"\n [listKeySelected]=\"listKeySelected()\"\n (outSelectKey)=\"handlerChangeSelectedItem($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outChangStageFlagMouse)=\"handlerChangFlagMouse($event)\" />\n </div>\n }\n @if (isError()) {\n <div class=\"flex items-center mt-[4px]\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r\"\n [innerHtml]=\"(validRequired()?.message || 'i18n_valid_empty_message')| translate:validRequired()?.interpolateParams\"></span>\n </div>\n }\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }] });
|
|
116
|
+
}
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimeDropdownItemChildComponent, decorators: [{
|
|
118
|
+
type: Component,
|
|
119
|
+
args: [{ selector: 'libs_ui-components-datetime-dropdown-item-child', standalone: true, imports: [
|
|
120
|
+
TranslateModule,
|
|
121
|
+
LibsUiComponentsDropdownComponent
|
|
122
|
+
], template: " @if (typeDate() && this.listConfig().httpRequestData?.()) {\n <div [style.width]=\"usingWidth()\">\n <libs_ui-components-dropdown [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [readonly]=\"readonly()\"\n [textDisplayWhenNoSelect]=\"textNoSelectDisplay()\"\n [disable]=\"disable()\"\n [showBorderError]=\"showBorderError()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listClickExactly]=\"false\"\n [zIndex]=\"zIndex()\"\n [labelPopoverConfig]=\"{ zIndex: zIndex() +1 }\"\n [listConfig]=\"listConfig()\"\n [listKeysDisable]=\"listKeysDisable()\"\n [convertItemSelected]=\"convertItemSelected\"\n [onlyEmitDataWhenReset]=\"true\"\n [classIncludeTextDisplayWhenNoSelect]=\"classIncludeTextDisplayWhenNoSelect()\"\n [httpRequestDetailItemById]=\"httpRequestDetailItemById()\"\n [listKeySelected]=\"listKeySelected()\"\n (outSelectKey)=\"handlerChangeSelectedItem($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outChangStageFlagMouse)=\"handlerChangFlagMouse($event)\" />\n </div>\n }\n @if (isError()) {\n <div class=\"flex items-center mt-[4px]\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r\"\n [innerHtml]=\"(validRequired()?.message || 'i18n_valid_empty_message')| translate:validRequired()?.interpolateParams\"></span>\n </div>\n }\n" }]
|
|
123
|
+
}], ctorParameters: () => [] });
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL2Ryb3Bkb3duL3NyYy9pdGVtL2NoaWxkL2NoaWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kYXRldGltZS9kcm9wZG93bi9zcmMvaXRlbS9jaGlsZC9jaGlsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFpRCxpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSWhJLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLDhCQUE4QixFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQWM5SixNQUFNLE9BQU8sa0RBQWtEO0lBQzdELGNBQWM7SUFDSix5QkFBeUIsR0FBRyxNQUFNLENBQWlDLFNBQVMsQ0FBQyxDQUFDO0lBQzlFLFVBQVUsR0FBRyxNQUFNLENBQWtCO1FBQzdDLElBQUksRUFBRSxNQUFNO1FBQ1osa0JBQWtCLEVBQUUsTUFBTSxDQUFDO1lBQ3pCLFFBQVEsRUFBRSxJQUFJO1lBQ2Qsd0JBQXdCLEVBQUUsSUFBSTtTQUMvQixDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ08sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RSxV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QUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFFN0osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFDTSwyQkFBMkI7UUFDakMsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN4QixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxpQkFBaUIsQ0FBQztZQUUzQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxtQkFBbUIsQ0FBQztZQUU3QixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxrQkFBa0IsQ0FBQztZQUU1QixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxxQkFBcUIsQ0FBQztZQUUvQjtnQkFDRSxPQUFPLE9BQU8sQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzdELENBQUM7UUFFRCxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7SUFDckMsQ0FBQzt3R0E3SFUsa0RBQWtEOzRGQUFsRCxrREFBa0QsODFGQ3JCL0QsNjZDQTZCQSwyQ0RiSSxlQUFlLDRGQUNmLGlDQUFpQzs7NEZBSXhCLGtEQUFrRDtrQkFYOUQsU0FBUzsrQkFFRSxpREFBaUQsY0FFL0MsSUFBSSxXQUNQO3dCQUNQLGVBQWU7d0JBQ2YsaUNBQWlDO3FCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duXCI7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1saXN0XCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgSUh0dHBSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcIkBsaWJzLXVpL3NlcnZpY2VzLWh0dHAtcmVxdWVzdFwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IGNvbnZlcnRHZXRWYWx1ZSwgY29udmVydEl0ZW1TZWxlY3RlZERlZmluZSwgZ2V0Q29uZmlnSHR0cFJlcXVlc3REZXRhaWxEYXRlLCBnZXRDb25maWdIdHRwUmVxdWVzdExpc3REYXRlIH0gZnJvbSBcIi4uLy4uL2RlZmluZXMvZGF0ZS1kcm9wZG93bi5kZWZpbmVcIjtcbmltcG9ydCB7IFRZUEVfREFURV9GT1JNQVQgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9kYXRlLWRyb3Bkb3duLmludGVyZmFjZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtZHJvcGRvd24taXRlbS1jaGlsZCcsXG4gIHRlbXBsYXRlVXJsOiAnY2hpbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudFxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25JdGVtQ2hpbGRDb21wb25lbnQge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCA9IHNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsaXN0Q29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbT4oe1xuICAgIHR5cGU6ICd0ZXh0JyxcbiAgICBjb25maWdUZW1wbGF0ZVRleHQ6IHNpZ25hbCh7XG4gICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgIGF1dG9TY3JvbGxUb0l0ZW1TZWxlY3RlZDogdHJ1ZSxcbiAgICB9KVxuICB9KTtcbiAgcHJvdGVjdGVkIHRleHROb1NlbGVjdERpc3BsYXkgPSBjb21wdXRlZCh0aGlzLmNvbXB1dGVkVGV4dE5vU2VsZWN0RGlzcGxheS5iaW5kKHRoaXMpKTtcbiAgcHJvdGVjdGVkIHVzaW5nV2lkdGggPSBjb21wdXRlZCh0aGlzLmNvbXB1dGVkV2lkdGguYmluZCh0aGlzKSk7XG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgdHlwZURhdGUgPSBpbnB1dDxUWVBFX0RBVEVfRk9STUFUIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBnZXRJdGVtWWVhckRpc3BsYXkgPSBpbnB1dDwoeWVhcjogc3RyaW5nKSA9PiBzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBsaXN0RGF0YSA9IGlucHV0PEFycmF5PHsgaWQ6IG51bWJlciwgbGFiZWw6IHN0cmluZyB9Pj4oW10pO1xuICByZWFkb25seSBzaG93Qm9yZGVyRXJyb3IgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBsaXN0TWF4SXRlbVNob3cgPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oNiwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gNiB9KTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXI+KDEwMDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDEwMDAgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGxpc3RLZXlTZWxlY3RlZCA9IGlucHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgd2lkdGhEcm9wZG93biA9IGlucHV0PG51bWJlcj4oMTM2KTtcbiAgcmVhZG9ubHkgZmlyc3QgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBpc0Vycm9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgd2lkdGhCeUVsZW1lbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDb252ZXJ0WWVhclNlbGVjdGVkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdEtleXNEaXNhYmxlID0gaW5wdXQ8QXJyYXk8YW55PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGludGVycG9sYXRlUGFyYW1zPzogeyBhbnk6IG9iamVjdCB9O1xuICB9PigpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRTZWxlY3RlZEtleSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uQ29udHJvbCA9IG91dHB1dDxJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuXG4gIC8qIElOSkVDVCAqL1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgbGlzdERhdGEgPSB0aGlzLmxpc3REYXRhKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZC5zZXQoZ2V0Q29uZmlnSHR0cFJlcXVlc3REZXRhaWxEYXRlKGxpc3REYXRhKSk7XG4gICAgICAgIHRoaXMubGlzdENvbmZpZy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50Lmh0dHBSZXF1ZXN0RGF0YSkge1xuICAgICAgICAgICAgY3VycmVudC5odHRwUmVxdWVzdERhdGEgPSBzaWduYWw8SUh0dHBSZXF1ZXN0Q29uZmlnPihnZXRDb25maWdIdHRwUmVxdWVzdExpc3REYXRlKGxpc3REYXRhKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQuaHR0cFJlcXVlc3REYXRhLnNldChnZXRDb25maWdIdHRwUmVxdWVzdExpc3REYXRlKGxpc3REYXRhKSk7XG4gICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ1RlbXBsYXRlVGV4dCkge1xuICAgICAgICAgICAgY3VycmVudC5jb25maWdUZW1wbGF0ZVRleHQgPSBzaWduYWwoe1xuICAgICAgICAgICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgICAgICAgICAgYXV0b1Njcm9sbFRvSXRlbVNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQuY29uZmlnVGVtcGxhdGVUZXh0LnNldCh7XG4gICAgICAgICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgICAgICAgIGF1dG9TY3JvbGxUb0l0ZW1TZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgIGdldFZhbHVlOiAoaXRlbTogeyBsYWJlbDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRHZXRWYWx1ZSh0aGlzLnR5cGVEYXRlKCkgfHwgJ21vbnRoJywgaXRlbSwgdGhpcy50cmFuc2xhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VTZWxlY3RlZEl0ZW0oZXZlbnQ/OiBJRW1pdFNlbGVjdEtleSkge1xuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmtleSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3RlZEtleS5lbWl0KHVuZGVmaW5lZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRTZWxlY3RlZEtleS5lbWl0KGV2ZW50LmtleSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uQ29udHJvbC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdGbGFnTW91c2UoZmxhZ01vdXNlOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZmxhZ01vdXNlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydEl0ZW1TZWxlY3RlZCA9IChpdGVtOiBhbnkpID0+IHtcbiAgICBpZiAoIWl0ZW0gfHwgIXRoaXMudHlwZURhdGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtLmxhYmVsRGlzcGxheSA9IGNvbnZlcnRJdGVtU2VsZWN0ZWREZWZpbmUodGhpcy50eXBlRGF0ZSgpID8/ICdtb250aCcsIGl0ZW0sIHRoaXMudHJhbnNsYXRlLCB0aGlzLmdldEl0ZW1ZZWFyRGlzcGxheSgpLCB0aGlzLmlnbm9yZUNvbnZlcnRZZWFyU2VsZWN0ZWQoKSk7XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfTtcbiAgcHJpdmF0ZSBjb21wdXRlZFRleHROb1NlbGVjdERpc3BsYXkoKSB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGVEYXRlKCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHJldHVybiAnaTE4bl9zZWxlY3RfZGF5JztcblxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICByZXR1cm4gJ2kxOG5fc2VsZWN0X21vbnRoJztcblxuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHJldHVybiAnaTE4bl9zZWxlY3RfeWVhcic7XG5cbiAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICByZXR1cm4gJ2kxOG5fc2VsZWN0X3F1YXJ0ZXInO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ21vbnRoJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkV2lkdGgoKSB7XG4gICAgaWYgKHRoaXMud2lkdGhCeUVsZW1lbnQoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlyc3QoKSA/IGAke3RoaXMud2lkdGhEcm9wZG93bigpfXB4YCA6ICcxMDAlJztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aERyb3Bkb3duKCl9cHhgO1xuICB9XG59IiwiICBAaWYgKHR5cGVEYXRlKCkgJiYgdGhpcy5saXN0Q29uZmlnKCkuaHR0cFJlcXVlc3REYXRhPy4oKSkge1xuICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cInVzaW5nV2lkdGgoKVwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93biBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImxpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbigpXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICBbdGV4dERpc3BsYXlXaGVuTm9TZWxlY3RdPVwidGV4dE5vU2VsZWN0RGlzcGxheSgpXCJcbiAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgW3Nob3dCb3JkZXJFcnJvcl09XCJzaG93Qm9yZGVyRXJyb3IoKVwiXG4gICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwibGlzdE1heEl0ZW1TaG93KClcIlxuICAgICAgICBbbGlzdENsaWNrRXhhY3RseV09XCJmYWxzZVwiXG4gICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICBbbGFiZWxQb3BvdmVyQ29uZmlnXT1cInsgekluZGV4OiB6SW5kZXgoKSArMSB9XCJcbiAgICAgICAgW2xpc3RDb25maWddPVwibGlzdENvbmZpZygpXCJcbiAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJsaXN0S2V5c0Rpc2FibGUoKVwiXG4gICAgICAgIFtjb252ZXJ0SXRlbVNlbGVjdGVkXT1cImNvbnZlcnRJdGVtU2VsZWN0ZWRcIlxuICAgICAgICBbb25seUVtaXREYXRhV2hlblJlc2V0XT1cInRydWVcIlxuICAgICAgICBbY2xhc3NJbmNsdWRlVGV4dERpc3BsYXlXaGVuTm9TZWxlY3RdPVwiY2xhc3NJbmNsdWRlVGV4dERpc3BsYXlXaGVuTm9TZWxlY3QoKVwiXG4gICAgICAgIFtodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkXT1cImh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWQoKVwiXG4gICAgICAgIFtsaXN0S2V5U2VsZWN0ZWRdPVwibGlzdEtleVNlbGVjdGVkKClcIlxuICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJDaGFuZ2VTZWxlY3RlZEl0ZW0oJGV2ZW50KVwiXG4gICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50KVwiXG4gICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ0ZsYWdNb3VzZSgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKGlzRXJyb3IoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBtdC1bNHB4XVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLW1lc3NhZ2UtZXJyb3IgbGlicy11aS1mb250LWg3clwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwiKHZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZSB8fCAnaTE4bl92YWxpZF9lbXB0eV9tZXNzYWdlJyl8IHRyYW5zbGF0ZTp2YWxpZFJlcXVpcmVkKCk/LmludGVycG9sYXRlUGFyYW1zXCI+PC9zcGFuPlxuICAgIDwvZGl2PlxuICB9XG4iXX0=
|