@libs-ui/components-datetime-dropdown 0.2.10-6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- 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 +274 -0
- package/esm2022/index.mjs +2 -0
- 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/libs-ui-components-datetime-dropdown.mjs +5 -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 +922 -0
- package/fesm2022/libs-ui-components-datetime-dropdown.mjs.map +1 -0
- package/index.d.ts +1 -0
- 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 +25 -0
- package/pipes/build-list-by-date-type-.pipe.d.ts +15 -0
- package/pipes/build-width.pipe.d.ts +7 -0
|
@@ -0,0 +1,274 @@
|
|
|
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({ from: signal({}), to: signal({}) });
|
|
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
|
+
console.log(widthElementParent);
|
|
109
|
+
if (widthElementParent < width) {
|
|
110
|
+
this.isResponsive.set(true);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
handlerChangeSelectedKey(event, type) {
|
|
114
|
+
this.chooseDate.update(current => {
|
|
115
|
+
if (current) {
|
|
116
|
+
current[type].set(event);
|
|
117
|
+
}
|
|
118
|
+
return current;
|
|
119
|
+
});
|
|
120
|
+
if (this.isEmitAfterChanged()) {
|
|
121
|
+
const dataEmit = this.isMultiple() ? this.chooseDate() : this.chooseDate()?.from();
|
|
122
|
+
if (dataEmit) {
|
|
123
|
+
this.outSelectedDropdown.emit(dataEmit);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
this.applyDate();
|
|
127
|
+
}
|
|
128
|
+
async resetDropdown() {
|
|
129
|
+
this.functionsControl.forEach(control => control.resetDropdown());
|
|
130
|
+
}
|
|
131
|
+
async resetError() {
|
|
132
|
+
this.functionsControl.forEach(control => control.resetError());
|
|
133
|
+
}
|
|
134
|
+
setWidthDate() {
|
|
135
|
+
if (!this.containerRef() || !this.containerRef()?.nativeElement) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
timer(0).pipe().subscribe(() => {
|
|
139
|
+
this.checkResponsive();
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
handlerFunctionControl(event, type) {
|
|
143
|
+
this.functionsControl.set(type, event);
|
|
144
|
+
}
|
|
145
|
+
async checkValid() {
|
|
146
|
+
let valid = true;
|
|
147
|
+
for (const control of this.functionsControl.values()) {
|
|
148
|
+
if (!(await control.checkIsValid())) {
|
|
149
|
+
valid = false;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (this.compareDate()) {
|
|
153
|
+
valid = false;
|
|
154
|
+
}
|
|
155
|
+
return valid;
|
|
156
|
+
}
|
|
157
|
+
setError(error) {
|
|
158
|
+
this.functionsControl.forEach(control => control.setError(error));
|
|
159
|
+
}
|
|
160
|
+
compareDate() {
|
|
161
|
+
const type = this.typeFormat().split('-');
|
|
162
|
+
const dateCompare = [];
|
|
163
|
+
type.forEach(item => {
|
|
164
|
+
const from = this.chooseDate()?.from()[item];
|
|
165
|
+
const to = this.chooseDate()?.to()[item];
|
|
166
|
+
dateCompare.push({ from: from, to: to });
|
|
167
|
+
});
|
|
168
|
+
if (this.ignoreValidTimeCompare() || !this.checkCondition(true)) {
|
|
169
|
+
this.isErrorCompareDate.set(false);
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
if (CompareDate(dateCompare, this.ignoreAllowTimeEqual())) {
|
|
173
|
+
this.setError(true);
|
|
174
|
+
this.isErrorCompareDate.set(true);
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
this.isErrorCompareDate.set(false);
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
async validate() {
|
|
181
|
+
let valid = true;
|
|
182
|
+
if (!this.validRequired()) {
|
|
183
|
+
if (!this.checkCondition(false) && !this.ignoreRequiredValueSecondWhenNotValidRequired()) {
|
|
184
|
+
valid = await this.checkValid();
|
|
185
|
+
}
|
|
186
|
+
return valid;
|
|
187
|
+
}
|
|
188
|
+
return await this.checkValid();
|
|
189
|
+
}
|
|
190
|
+
checkCondition(hasValue) {
|
|
191
|
+
let checkValue = true;
|
|
192
|
+
const type = this.typeFormat().split('-');
|
|
193
|
+
type.forEach(item => {
|
|
194
|
+
if (hasValue && (!this.chooseDate()?.from()[item] || !this.chooseDate()?.to()[item])) {
|
|
195
|
+
checkValue = false;
|
|
196
|
+
}
|
|
197
|
+
if (!hasValue && (this.chooseDate()?.from()[item] || this.chooseDate()?.to()[item])) {
|
|
198
|
+
checkValue = false;
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
return checkValue;
|
|
202
|
+
}
|
|
203
|
+
applyDate() {
|
|
204
|
+
this.setError(false);
|
|
205
|
+
this.isErrorCompareDate.set(false);
|
|
206
|
+
if (this.isCheckErrorWhenSelectItem() && !this.validate()) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const from = this.chooseDate()?.from;
|
|
210
|
+
const to = this.chooseDate()?.to;
|
|
211
|
+
console.log(from?.(), to?.(), this.isMultiple());
|
|
212
|
+
if (this.isMultiple()) {
|
|
213
|
+
if (this.compareDate()) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
let dataSelected = { from: signal({}), to: signal({}) };
|
|
217
|
+
this.arrayFormat().forEach(key => {
|
|
218
|
+
if (!from?.()?.[key] || !to?.()?.[key]) {
|
|
219
|
+
dataSelected = undefined;
|
|
220
|
+
}
|
|
221
|
+
if (dataSelected) {
|
|
222
|
+
dataSelected.from.update(current => {
|
|
223
|
+
current[key] = Number(from?.()[key]);
|
|
224
|
+
return current;
|
|
225
|
+
});
|
|
226
|
+
dataSelected.to.update(current => {
|
|
227
|
+
current[key] = Number(to?.()[key]);
|
|
228
|
+
return current;
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
if (dataSelected) {
|
|
233
|
+
this.outChooseMultiDate.emit(dataSelected);
|
|
234
|
+
}
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
let dataSelected = {};
|
|
238
|
+
this.arrayFormat().forEach(key => {
|
|
239
|
+
if (!from?.()?.[key]) {
|
|
240
|
+
dataSelected = undefined;
|
|
241
|
+
}
|
|
242
|
+
if (dataSelected) {
|
|
243
|
+
dataSelected[key] = Number(from?.()?.[key]);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
if (dataSelected) {
|
|
247
|
+
this.outChooseSingleDate.emit(dataSelected);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
handlerChangeWidthLabel(width) {
|
|
251
|
+
this.cacheWidthLabel.set(width < (this.cacheWidthLabel() || 0) ? this.cacheWidthLabel() : Math.ceil(width));
|
|
252
|
+
if (this.timeOut()) {
|
|
253
|
+
clearTimeout(this.timeOut());
|
|
254
|
+
}
|
|
255
|
+
this.timeOut.set(setTimeout(() => {
|
|
256
|
+
this.widthLabel.set(this.cacheWidthLabel());
|
|
257
|
+
}, 100));
|
|
258
|
+
}
|
|
259
|
+
handlerChangStageFlagMouse(flagMouse) {
|
|
260
|
+
this.outChangStageFlagMouse.emit(flagMouse);
|
|
261
|
+
}
|
|
262
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimeDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
263
|
+
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 libs-ui-text-error\">{{ 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 });
|
|
264
|
+
}
|
|
265
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimeDropdownComponent, decorators: [{
|
|
266
|
+
type: Component,
|
|
267
|
+
args: [{ selector: 'libs_ui-components-datetime-dropdown', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
268
|
+
TranslateModule,
|
|
269
|
+
LibsUiComponentsLabelComponent,
|
|
270
|
+
LibsUiComponentsDatetimeDropdownDirective,
|
|
271
|
+
LibsUiComponentsDatetimeDropdownItemComponent
|
|
272
|
+
], 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 libs-ui-text-error\">{{ validRequired()?.messageValidCompareTime || \"i18n_invalid_end_date_selected\" | translate:validRequired()?.interpolateParamsCompareTime }}</span>\n </div>\n}\n" }]
|
|
273
|
+
}], ctorParameters: () => [] });
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0ssT0FBTyxFQUFVLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBS2hHLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFpQnRGLE1BQU0sT0FBTyx5Q0FBeUM7SUFDcEQsY0FBYztJQUNKLEtBQUssR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsWUFBWSxHQUFHLE1BQU0sQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFDckQsVUFBVSxHQUFHLE1BQU0sQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFDbkQsY0FBYyxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FB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QUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbkIsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUMsRUFBRSxHQUFHLENBQXVCLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRVMsMEJBQTBCLENBQUMsU0FBcUI7UUFDeEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDO3dHQWhUVSx5Q0FBeUM7NEZBQXpDLHlDQUF5QyxxektDNUJ0RCx5ME1Bb0lBLHlERC9HSSxlQUFlLDRGQUNmLDhCQUE4Qiw0cUJBQzlCLHlDQUF5QyxxSEFDekMsNkNBQTZDOzs0RkFJcEMseUNBQXlDO2tCQWZyRCxTQUFTOytCQUVFLHNDQUFzQyxjQUdwQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZUFBZTt3QkFDZiw4QkFBOEI7d0JBQzlCLHlDQUF5Qzt3QkFDekMsNkNBQTZDO3FCQUM5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWxcIjtcbmltcG9ydCB7IElGbGFnTW91c2UgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwsIHRpbWVyIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IENvbXBhcmVEYXRlIH0gZnJvbSBcIi4vZGVmaW5lcy9kYXRlLWRyb3Bkb3duLmRlZmluZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tIFwiLi9kaXJlY3RpdmUvZGF0ZS1kcm9wZG93bi5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IElEYXRlRHJvcGRvd25EaXNhYmxlS2V5cywgSUZyb21BbmRUb0RhdGVMYWJlbCwgSUhpZGRlbkRhdGUsIFRZUEVfREFURV9EUk9QRE9XTl9GT1JNQVQsIFRZUEVfREFURV9GT1JNQVQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2RhdGUtZHJvcGRvd24uaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJRW1pdE11bHRpRGF0ZURyb3Bkb3duLCBJRW1pdFNpbmdsZURhdGVEcm9wZG93biB9IGZyb20gXCIuL2ludGVyZmFjZXMvZW1pdC1kcm9wZG93bi5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IElEYXRlRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSURhdGVEcm9wZG93bkl0ZW1GdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gXCIuL2ludGVyZmFjZXMvZnVuY3Rpb25zLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJVmFsaWREYXRlRHJvcGRvd24gfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3ZhbGlkLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25JdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4vaXRlbS9pdGVtLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25EaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25JdGVtQ29tcG9uZW50XG4gIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzRGF0ZXRpbWVEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCB3aWR0aCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgd2lkdGhFbGVtZW50ID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHdpZHRoTGFiZWwgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgd2lkdGhMYWJlbEZyb20gPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHdpZHRoTGFiZWxUbyA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgaXNFcnJvckNvbXBhcmVEYXRlID0gc2lnbmFsPGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBjaG9vc2VEYXRlID0gc2lnbmFsPElFbWl0TXVsdGlEYXRlRHJvcGRvd24gfCB1bmRlZmluZWQ+KHsgZnJvbTogc2lnbmFsKHt9KSwgdG86IHNpZ25hbCh7fSkgfSk7XG4gIHByb3RlY3RlZCBpc1Jlc3BvbnNpdmUgPSBzaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGFycmF5Rm9ybWF0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnR5cGVGb3JtYXQoKS5zcGxpdCgnLScpIGFzIEFycmF5PFRZUEVfREFURV9GT1JNQVQ+O1xuICB9KTtcbiAgcHJvdGVjdGVkIGNoYW5nZVR5cGUgPSBzaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIGNhY2hlV2lkdGhMYWJlbCA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdGltZU91dCA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBmdW5jdGlvbnNDb250cm9sID0gbmV3IE1hcDxzdHJpbmcsIElEYXRlRHJvcGRvd25JdGVtRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgbGFiZWxDb25maWcgPSBpbnB1dDxJTGFiZWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHdpZHRoRHJvcGRvd24gPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oMTM2LCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMzYgfSk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyPigxMjAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMjAwIH0pO1xuICByZWFkb25seSBtYXhZZWFyID0gaW5wdXQ8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgbWluWWVhciA9IGlucHV0PG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IG1pbldpZHRoID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNNdWx0aXBsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcmV2ZXJzZVllYXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBpc0JvcmRlckVycm9yID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBpZ25vcmVXaWR0aDEwMCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgd2lkdGhCeUVsZW1lbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc2FibGVTZWNvbmQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHR5cGVGb3JtYXQgPSBpbnB1dDxUWVBFX0RBVEVfRFJPUERPV05fRk9STUFULCBUWVBFX0RBVEVfRFJPUERPV05fRk9STUFUPignbW9udGgtZGF5JywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ21vbnRoLWRheScgfSk7XG4gIHJlYWRvbmx5IGZyb21BbmRUb0RhdGVMYWJlbCA9IGlucHV0PElGcm9tQW5kVG9EYXRlTGFiZWw+KHsgZnJvbTogJ2kxOG5fbGFiZWxfZnJvbScsIHRvOiAnaTE4bl90bycgfSk7XG4gIHJlYWRvbmx5IGxpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlVGltZSA9IGlucHV0PElFbWl0TXVsdGlEYXRlRHJvcGRvd24gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGlzRW1pdEFmdGVyQ2hhbmdlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTsgLy8gZMO5bmcgxJHhu4MgZW1pdCBt4buXaSBs4bqnbiBjaOG7jW4gZ2nDoSB0cuG7iyB2w6AgbOG6p24gxJHhuqd1IGluaXRcbiAgcmVhZG9ubHkgZ2V0SXRlbVllYXJEaXNwbGF5ID0gaW5wdXQ8KHllYXI6IHN0cmluZykgPT4gc3RyaW5nPigpO1xuICByZWFkb25seSBpZ25vcmVGcm9tQW5kVG9EYXRlTGFiZWwgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBoaWRkZW5EYXRlID0gaW5wdXQ8SUhpZGRlbkRhdGUgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGxpc3RNYXhJdGVtU2hvdyA9IGlucHV0PHsgeWVhcj86IG51bWJlcjsgbW9udGg/OiBudW1iZXI7IHF1YXJ0ZXI/OiBudW1iZXI7IGRheT86IG51bWJlcjsgfSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgaWdub3JlQ29udmVydFllYXJTZWxlY3RlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbGlzdEtleXNEaXNhYmxlID0gaW5wdXQ8SURhdGVEcm9wZG93bkRpc2FibGVLZXlzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IGlnbm9yZUFsbG93VGltZUVxdWFsID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4odHJ1ZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlVmFsaWRUaW1lQ29tcGFyZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaXNDaGVja0Vycm9yV2hlblNlbGVjdEl0ZW0gPSBpbnB1dDxib29sZWFuLCBib29sZWFuPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyB0cnVlIH0pO1xuICByZWFkb25seSBpZ25vcmVSZXF1aXJlZFZhbHVlU2Vjb25kV2hlbk5vdFZhbGlkUmVxdWlyZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7IC8vIGPDsyB2YWxpZGF0ZSBnacOhIHRy4buLIHRo4bupIDIga2hpIHZhbGlkUmVxdWlyZWQga2jDtG5nP1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SVZhbGlkRGF0ZURyb3Bkb3duPigpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElEYXRlRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0ZWREcm9wZG93biA9IG91dHB1dDxJRW1pdFNpbmdsZURhdGVEcm9wZG93biB8IElFbWl0TXVsdGlEYXRlRHJvcGRvd24+KCk7Ly8gZMO5bmcgY2hvIHRyxrDhu51uZyBo4bujcCBlbWl0IG3hu5dpIG3hu5l0IGzhuqduIGNo4buNbiBnacOhIHRy4buLIG7Dqm4ga2hpIHPhu60gZOG7pW5nIHBo4bqjaSBjaGVjayBrxKkgdW5kZWZpbmVkXG4gIHJlYWRvbmx5IG91dENob29zZU11bHRpRGF0ZSA9IG91dHB1dDxJRW1pdE11bHRpRGF0ZURyb3Bkb3duPigpO1xuICByZWFkb25seSBvdXRDaG9vc2VTaW5nbGVEYXRlID0gb3V0cHV0PElFbWl0U2luZ2xlRGF0ZURyb3Bkb3duPigpO1xuICByZWFkb25seSBvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICBwcml2YXRlIGNvbnRhaW5lclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigncGFyZW50Jyk7XG4gIHByaXZhdGUgbGFiZWxGcm9tUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdsYWJlbEZyb20nKTtcbiAgcHJpdmF0ZSBsYWJlbFRvUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdsYWJlbFRvJyk7XG5cbiAgLyogSU5KRUNUICovXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBpc011bHRpcGxlID0gdGhpcy5pc011bHRpcGxlKCk7XG5cbiAgICAgIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlVHlwZS5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25zQ29udHJvbC5jbGVhcigpO1xuICAgICAgICB0aW1lcigwKS5waXBlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNoZWNrUmVzcG9uc2l2ZSgpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlVHlwZS5zZXQoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoeyBjaGVja0lzVmFsaWQ6IHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKSwgcmVzZXRFcnJvcjogdGhpcy5yZXNldEVycm9yLmJpbmQodGhpcyksIHJlc2V0VGltZTogdGhpcy5yZXNldERyb3Bkb3duLmJpbmQodGhpcykgfSk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlVGltZSgpKSB7XG4gICAgICB0aGlzLmNob29zZURhdGUuc2V0KHRoaXMuc2VsZWN0ZWREYXRlVGltZSgpKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKHRoaXMuc2V0V2lkdGhEYXRlLmJpbmQodGhpcykpO1xuICAgIHRoaXMud2lkdGhMYWJlbC5zZXQodW5kZWZpbmVkKTtcbiAgICB0aW1lcigwKS5waXBlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tSZXNwb25zaXZlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tSZXNwb25zaXZlKCkge1xuICAgIHRoaXMuaXNSZXNwb25zaXZlLnNldChmYWxzZSk7XG4gICAgY29uc3Qgd2lkdGhFbGVtZW50UGFyZW50ID0gdGhpcy5jb250YWluZXJSZWYoKT8ubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMDtcblxuICAgIHRoaXMud2lkdGhMYWJlbEZyb20uc2V0KHRoaXMubGFiZWxGcm9tUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApO1xuICAgIHRoaXMud2lkdGhMYWJlbFRvLnNldCh0aGlzLmxhYmVsVG9SZWYoKT8ubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMCk7XG5cbiAgICBjb25zdCBzcGFjZUJldHdlZW5EYXRlID0gKHRoaXMuYXJyYXlGb3JtYXQoKS5sZW5ndGggKiAyKSArICh0aGlzLmZyb21BbmRUb0RhdGVMYWJlbCgpLmZyb20gPyAxIDogMCk7XG4gICAgY29uc3Qgd2lkdGggPSAodGhpcy53aWR0aERyb3Bkb3duKCkgKiA0KSArICg4ICogc3BhY2VCZXR3ZWVuRGF0ZSkgKyB0aGlzLndpZHRoTGFiZWxGcm9tKCkgKyB0aGlzLndpZHRoTGFiZWxUbygpO1xuXG4gICAgY29uc29sZS5sb2cod2lkdGhFbGVtZW50UGFyZW50KTtcblxuXG4gICAgaWYgKHdpZHRoRWxlbWVudFBhcmVudCA8IHdpZHRoKSB7XG4gICAgICB0aGlzLmlzUmVzcG9uc2l2ZS5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VTZWxlY3RlZEtleShldmVudDogSUVtaXRTaW5nbGVEYXRlRHJvcGRvd24sIHR5cGU6ICdmcm9tJyB8ICd0bycpIHtcbiAgICB0aGlzLmNob29zZURhdGUudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgY3VycmVudFt0eXBlXS5zZXQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5pc0VtaXRBZnRlckNoYW5nZWQoKSkge1xuICAgICAgY29uc3QgZGF0YUVtaXQgPSB0aGlzLmlzTXVsdGlwbGUoKSA/IHRoaXMuY2hvb3NlRGF0ZSgpIDogdGhpcy5jaG9vc2VEYXRlKCk/LmZyb20oKTtcblxuICAgICAgaWYgKGRhdGFFbWl0KSB7XG4gICAgICAgIHRoaXMub3V0U2VsZWN0ZWREcm9wZG93bi5lbWl0KGRhdGFFbWl0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hcHBseURhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzZXREcm9wZG93bigpIHtcbiAgICB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wuZm9yRWFjaChjb250cm9sID0+IGNvbnRyb2wucmVzZXREcm9wZG93bigpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzZXRFcnJvcigpIHtcbiAgICB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wuZm9yRWFjaChjb250cm9sID0+IGNvbnRyb2wucmVzZXRFcnJvcigpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0V2lkdGhEYXRlKCkge1xuICAgIGlmICghdGhpcy5jb250YWluZXJSZWYoKSB8fCAhdGhpcy5jb250YWluZXJSZWYoKT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aW1lcigwKS5waXBlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tSZXNwb25zaXZlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURhdGVEcm9wZG93bkl0ZW1GdW5jdGlvbkNvbnRyb2xFdmVudCwgdHlwZTogJ2Zyb20nIHwgJ3RvJykge1xuICAgIHRoaXMuZnVuY3Rpb25zQ29udHJvbC5zZXQodHlwZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNoZWNrVmFsaWQoKSB7XG4gICAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wudmFsdWVzKCkpIHtcbiAgICAgIGlmICghKGF3YWl0IGNvbnRyb2wuY2hlY2tJc1ZhbGlkKCkpKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbXBhcmVEYXRlKCkpIHtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFcnJvcihlcnJvcjogYm9vbGVhbikge1xuICAgIHRoaXMuZnVuY3Rpb25zQ29udHJvbC5mb3JFYWNoKGNvbnRyb2wgPT4gY29udHJvbC5zZXRFcnJvcihlcnJvcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlRGF0ZSgpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlRm9ybWF0KCkuc3BsaXQoJy0nKSBhcyBBcnJheTxUWVBFX0RBVEVfRk9STUFUPjtcbiAgICBjb25zdCBkYXRlQ29tcGFyZTogQXJyYXk8eyBmcm9tOiBudW1iZXIgfCB1bmRlZmluZWQsIHRvOiBudW1iZXIgfCB1bmRlZmluZWQgfT4gPSBbXTtcblxuICAgIHR5cGUuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmNob29zZURhdGUoKT8uZnJvbSgpW2l0ZW1dO1xuICAgICAgY29uc3QgdG8gPSB0aGlzLmNob29zZURhdGUoKT8udG8oKVtpdGVtXTtcblxuICAgICAgZGF0ZUNvbXBhcmUucHVzaCh7IGZyb206IGZyb20sIHRvOiB0byB9KTtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5pZ25vcmVWYWxpZFRpbWVDb21wYXJlKCkgfHwgIXRoaXMuY2hlY2tDb25kaXRpb24odHJ1ZSkpIHtcbiAgICAgIHRoaXMuaXNFcnJvckNvbXBhcmVEYXRlLnNldChmYWxzZSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKENvbXBhcmVEYXRlKGRhdGVDb21wYXJlLCB0aGlzLmlnbm9yZUFsbG93VGltZUVxdWFsKCkpKSB7XG4gICAgICB0aGlzLnNldEVycm9yKHRydWUpO1xuICAgICAgdGhpcy5pc0Vycm9yQ29tcGFyZURhdGUuc2V0KHRydWUpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5pc0Vycm9yQ29tcGFyZURhdGUuc2V0KGZhbHNlKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy52YWxpZFJlcXVpcmVkKCkpIHtcbiAgICAgIGlmICghdGhpcy5jaGVja0NvbmRpdGlvbihmYWxzZSkgJiYgIXRoaXMuaWdub3JlUmVxdWlyZWRWYWx1ZVNlY29uZFdoZW5Ob3RWYWxpZFJlcXVpcmVkKCkpIHtcbiAgICAgICAgdmFsaWQgPSBhd2FpdCB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tDb25kaXRpb24oaGFzVmFsdWU6IGJvb2xlYW4pIHtcbiAgICBsZXQgY2hlY2tWYWx1ZSA9IHRydWU7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZUZvcm1hdCgpLnNwbGl0KCctJykgYXMgQXJyYXk8VFlQRV9EQVRFX0ZPUk1BVD47XG5cbiAgICB0eXBlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaGFzVmFsdWUgJiYgKCF0aGlzLmNob29zZURhdGUoKT8uZnJvbSgpW2l0ZW1dIHx8ICF0aGlzLmNob29zZURhdGUoKT8udG8oKVtpdGVtXSkpIHtcbiAgICAgICAgY2hlY2tWYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFoYXNWYWx1ZSAmJiAodGhpcy5jaG9vc2VEYXRlKCk/LmZyb20oKVtpdGVtXSB8fCB0aGlzLmNob29zZURhdGUoKT8udG8oKVtpdGVtXSkpIHtcbiAgICAgICAgY2hlY2tWYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNoZWNrVmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlEYXRlKCkge1xuICAgIHRoaXMuc2V0RXJyb3IoZmFsc2UpO1xuICAgIHRoaXMuaXNFcnJvckNvbXBhcmVEYXRlLnNldChmYWxzZSk7XG4gICAgaWYgKHRoaXMuaXNDaGVja0Vycm9yV2hlblNlbGVjdEl0ZW0oKSAmJiAhdGhpcy52YWxpZGF0ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZyb20gPSB0aGlzLmNob29zZURhdGUoKT8uZnJvbTtcbiAgICBjb25zdCB0byA9IHRoaXMuY2hvb3NlRGF0ZSgpPy50bztcblxuICAgIGNvbnNvbGUubG9nKGZyb20/LigpLCB0bz8uKCksIHRoaXMuaXNNdWx0aXBsZSgpKTtcblxuXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSgpKSB7XG4gICAgICBpZiAodGhpcy5jb21wYXJlRGF0ZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBkYXRhU2VsZWN0ZWQ6IElFbWl0TXVsdGlEYXRlRHJvcGRvd24gfCB1bmRlZmluZWQgPSB7IGZyb206IHNpZ25hbCh7fSksIHRvOiBzaWduYWwoe30pIH07XG5cbiAgICAgIHRoaXMuYXJyYXlGb3JtYXQoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmICghZnJvbT8uKCk/LltrZXldIHx8ICF0bz8uKCk/LltrZXldKSB7XG4gICAgICAgICAgZGF0YVNlbGVjdGVkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhU2VsZWN0ZWQpIHtcbiAgICAgICAgICBkYXRhU2VsZWN0ZWQuZnJvbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50W2tleV0gPSBOdW1iZXIoZnJvbT8uKClba2V5XSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRhdGFTZWxlY3RlZC50by51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50W2tleV0gPSBOdW1iZXIodG8/LigpW2tleV0pO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkYXRhU2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5vdXRDaG9vc2VNdWx0aURhdGUuZW1pdChkYXRhU2VsZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBkYXRhU2VsZWN0ZWQ6IElFbWl0U2luZ2xlRGF0ZURyb3Bkb3duIHwgdW5kZWZpbmVkID0ge307XG5cbiAgICB0aGlzLmFycmF5Rm9ybWF0KCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFmcm9tPy4oKT8uW2tleV0pIHtcbiAgICAgICAgZGF0YVNlbGVjdGVkID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFTZWxlY3RlZCkge1xuICAgICAgICBkYXRhU2VsZWN0ZWRba2V5XSA9IE51bWJlcihmcm9tPy4oKT8uW2tleV0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGRhdGFTZWxlY3RlZCkge1xuICAgICAgdGhpcy5vdXRDaG9vc2VTaW5nbGVEYXRlLmVtaXQoZGF0YVNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVdpZHRoTGFiZWwod2lkdGg6IG51bWJlcikge1xuICAgIHRoaXMuY2FjaGVXaWR0aExhYmVsLnNldCh3aWR0aCA8ICh0aGlzLmNhY2hlV2lkdGhMYWJlbCgpIHx8IDApID8gdGhpcy5jYWNoZVdpZHRoTGFiZWwoKSA6IE1hdGguY2VpbCh3aWR0aCkpO1xuICAgIGlmICh0aGlzLnRpbWVPdXQoKSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZU91dCgpKTtcbiAgICB9XG4gICAgdGhpcy50aW1lT3V0LnNldCgoc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLndpZHRoTGFiZWwuc2V0KHRoaXMuY2FjaGVXaWR0aExhYmVsKCkpO1xuICAgIH0sIDEwMCkgYXMgdW5rbm93bikgYXMgbnVtYmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZShmbGFnTW91c2U6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdChmbGFnTW91c2UpO1xuICB9XG59IiwiQGlmIChsYWJlbENvbmZpZygpOyBhcyBsYWJlbENvbmZpZykge1xuICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgW2xhYmVsTGVmdENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdENsYXNzXCJcbiAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWQgXCJcbiAgICBbZGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgIFtsYWJlbFJpZ2h0XT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICBbYnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgW2Rlc2NyaXB0aW9uQ2xhc3NdPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25DbGFzc1wiXG4gICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgIFtkaXNhYmxlQnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgIFtoYXNUb2dnbGVdPVwibGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgIFtwb3BvdmVyXT1cImxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgIFtsaW1pdExlbmd0aF09XCJsYWJlbENvbmZpZy5saW1pdExlbmd0aFwiXG4gICAgW2NvdW50XT1cImxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbn1cbjxkaXYgI3BhcmVudFxuICBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnRcIlxuICBbY2xhc3MuIXctZnVsbF09XCJ3aWR0aEJ5RWxlbWVudCgpXCJcbiAgW2NsYXNzLiFjb2x1bW5dPVwiaXNSZXNwb25zaXZlKCkgJiYgaXNNdWx0aXBsZSgpXCI+XG4gIDxkaXYgI2NoaWxkRnJvbVxuICAgIGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydFwiXG4gICAgW2NsYXNzLnctWzUwJV1dPVwid2lkdGhCeUVsZW1lbnQoKSAmJiAhaXNSZXNwb25zaXZlKClcIlxuICAgIFtjbGFzcy4hbWItWzhweF1dPVwiaXNSZXNwb25zaXZlKCkgJiYgaXNNdWx0aXBsZSgpXCJcbiAgICBbY2xhc3MuIW1yLVs4cHhdXT1cIiFpc1Jlc3BvbnNpdmUoKSAmJiBpc011bHRpcGxlKClcIlxuICAgIFtjbGFzcy53LWZ1bGxdPVwiIWlzTXVsdGlwbGUoKSAmJiAhd2lkdGhCeUVsZW1lbnQoKSB8fCBpc1Jlc3BvbnNpdmUoKVwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cIiF3aWR0aEJ5RWxlbWVudCgpICYmIGlzTXVsdGlwbGUoKSAmJiAhaXNSZXNwb25zaXZlKCkgPygod2lkdGhEcm9wZG93bigpICogYXJyYXlGb3JtYXQoKS5sZW5ndGgpKyg4ICogYXJyYXlGb3JtYXQoKS5sZW5ndGgpICsgd2lkdGhMYWJlbEZyb20oKSk6dW5kZWZpbmVkXCI+XG5cbiAgICBAaWYgKGlzTXVsdGlwbGUoKSAmJiAhaWdub3JlRnJvbUFuZFRvRGF0ZUxhYmVsKCkgJiYgZnJvbUFuZFRvRGF0ZUxhYmVsKCkuZnJvbSkge1xuICAgICAgPGRpdiBjbGFzcz1cIm1yLVs4cHhdIGZsZXgtc2hyaW5rLTAgaC1bMzJweF0gZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiaXNSZXNwb25zaXZlKCkgPyAod2lkdGhMYWJlbCgpIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWRcIj5cbiAgICAgICAgPHNwYW4gI2xhYmVsRnJvbVxuICAgICAgICAgIExpYnNVaUNvbXBvbmVudHNEYXRldGltZURyb3Bkb3duRGlyZWN0aXZlXG4gICAgICAgICAgW2NsYXNzLiFvcGFjaXR5LVswLjVdXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIHRleHQtbm93cmFwIHt7IGZyb21BbmRUb0RhdGVMYWJlbCgpLmNsYXNzTGFiZWxGcm9tIHx8ICcnIH19XCJcbiAgICAgICAgICAob3V0Q2hhbmdlV2lkdGgpPVwiaGFuZGxlckNoYW5nZVdpZHRoTGFiZWwoJGV2ZW50KVwiPlxuICAgICAgICAgIHt7IChmcm9tQW5kVG9EYXRlTGFiZWwoKS5mcm9tfHwnICcpfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJmbGV4XCJcbiAgICAgIFtjbGFzcy4hdy1mdWxsXT1cIndpZHRoQnlFbGVtZW50KClcIj5cbiAgICAgIEBpZiAoIWNoYW5nZVR5cGUoKSkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLWRyb3Bkb3duLWl0ZW0gW2NsYXNzLiF3LWZ1bGxdPVwid2lkdGhCeUVsZW1lbnQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVTZWNvbmRdPVwiZGlzYWJsZVNlY29uZCgpXCJcbiAgICAgICAgICBbdHlwZURhdGVdPVwidHlwZUZvcm1hdCgpXCJcbiAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgICBbbWF4WWVhcl09XCJtYXhZZWFyKClcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgW21pblllYXJdPVwibWluWWVhcigpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2lzTXVsdGlwbGVdPVwiaXNNdWx0aXBsZSgpID8gaXNSZXNwb25zaXZlKCkgPyB0cnVlIDogZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICBbcmV2ZXJzZVllYXJdPVwicmV2ZXJzZVllYXIoKVwiXG4gICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVUaW1lKCk/LmZyb20oKSB8fCB7fVwiXG4gICAgICAgICAgW3dpZHRoRHJvcGRvd25dPVwid2lkdGhEcm9wZG93bigpXCJcbiAgICAgICAgICBbd2lkdGhCeUVsZW1lbnRdPVwid2lkdGhCeUVsZW1lbnQoKVwiXG4gICAgICAgICAgW2dldEl0ZW1ZZWFyRGlzcGxheV09XCJnZXRJdGVtWWVhckRpc3BsYXkoKVwiXG4gICAgICAgICAgW2xpc3RNYXhJdGVtU2hvd109XCJsaXN0TWF4SXRlbVNob3coKVwiXG4gICAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJsaXN0S2V5c0Rpc2FibGUoKT8uZnJvbSgpXCJcbiAgICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImxpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbigpXCJcbiAgICAgICAgICBbaXNFbWl0U2VsZWN0ZWREcm9wRG93bl09XCJpc0VtaXRBZnRlckNoYW5nZWQoKVwiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0XT1cIidsaWJzLXVpLWZvbnQtaDVyICcgKyBjbGFzc0luY2x1ZGVUZXh0RGlzcGxheVdoZW5Ob1NlbGVjdCgpXCJcbiAgICAgICAgICAob3V0U2VsZWN0ZWREYXRhKT1cImhhbmRsZXJDaGFuZ2VTZWxlY3RlZEtleSgkZXZlbnQsICdmcm9tJylcIlxuICAgICAgICAgIChvdXRGdW5jdGlvbkNvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsJ2Zyb20nKVwiXG4gICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBAaWYgKGlzTXVsdGlwbGUoKSkge1xuICAgIDxkaXYgI2NoaWxkVG9cbiAgICAgIFtjbGFzcy4hdy1bNTAlXV09XCJ3aWR0aEJ5RWxlbWVudCgpXCJcbiAgICAgIFtjbGFzcy4hdy1mdWxsXT1cIiAhd2lkdGhCeUVsZW1lbnQoKSB8fCBpc1Jlc3BvbnNpdmUoKVwiXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtci1bOHB4XSBoLVszMnB4XSBmbGV4LXNocmluay0wIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImlzUmVzcG9uc2l2ZSgpID8gd2lkdGhMYWJlbCgpIDogdW5kZWZpbmVkXCI+XG4gICAgICAgIEBpZiAoIWlnbm9yZUZyb21BbmRUb0RhdGVMYWJlbCgpKSB7XG4gICAgICAgICAgPHNwYW4gI2xhYmVsVG9cbiAgICAgICAgICAgIExpYnNVaUNvbXBvbmVudHNEYXRldGltZURyb3Bkb3duRGlyZWN0aXZlXG4gICAgICAgICAgICBbY2xhc3MuIW9wYWNpdHktWzAuNV1dPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg1ciB0ZXh0LW5vd3JhcCB7eyBmcm9tQW5kVG9EYXRlTGFiZWwoKS5jbGFzc0xhYmVsVG8gfHwgJycgfX1cIlxuICAgICAgICAgICAgKG91dENoYW5nZVdpZHRoKT1cImhhbmRsZXJDaGFuZ2VXaWR0aExhYmVsKCRldmVudClcIj5cbiAgICAgICAgICAgIHt7IChmcm9tQW5kVG9EYXRlTGFiZWwoKS50b3x8JyAnKXwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoaWdub3JlRnJvbUFuZFRvRGF0ZUxhYmVsKCkpIHtcbiAgICAgICAgICA8c3BhbiBbY2xhc3MuIW9wYWNpdHktWzAuNV1dPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg1clwiPi08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIlxuICAgICAgICBbY2xhc3MuIXctZnVsbF09XCJ3aWR0aEJ5RWxlbWVudCgpXCI+XG4gICAgICAgIEBpZiAoIWNoYW5nZVR5cGUoKSkge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtZHJvcGRvd24taXRlbSBbY2xhc3Mudy1mdWxsXT1cIndpZHRoQnlFbGVtZW50KClcIlxuICAgICAgICAgICAgW2Rpc2FibGVTZWNvbmRdPVwiZGlzYWJsZVNlY29uZCgpXCJcbiAgICAgICAgICAgIFt0eXBlRGF0ZV09XCJ0eXBlRm9ybWF0KClcIlxuICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICBbbWF4WWVhcl09XCJtYXhZZWFyKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIFttaW5ZZWFyXT1cIm1pblllYXIoKVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgICBbaXNNdWx0aXBsZV09XCJpc011bHRpcGxlKClcIlxuICAgICAgICAgICAgW3JldmVyc2VZZWFyXT1cInJldmVyc2VZZWFyKClcIlxuICAgICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVUaW1lKCk/LnRvKCkgfHwge31cIlxuICAgICAgICAgICAgW3dpZHRoRHJvcGRvd25dPVwid2lkdGhEcm9wZG93bigpXCJcbiAgICAgICAgICAgIFt3aWR0aEJ5RWxlbWVudF09XCJ3aWR0aEJ5RWxlbWVudCgpXCJcbiAgICAgICAgICAgIFtnZXRJdGVtWWVhckRpc3BsYXldPVwiZ2V0SXRlbVllYXJEaXNwbGF5KClcIlxuICAgICAgICAgICAgW2xpc3RNYXhJdGVtU2hvd109XCJsaXN0TWF4SXRlbVNob3coKVwiXG4gICAgICAgICAgICBbbGlzdEtleXNEaXNhYmxlXT1cImxpc3RLZXlzRGlzYWJsZSgpPy50bygpXCJcbiAgICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwibGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uKClcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0XT1cIidsaWJzLXVpLWZvbnQtaDVyICcgKyBjbGFzc0luY2x1ZGVUZXh0RGlzcGxheVdoZW5Ob1NlbGVjdFwiXG4gICAgICAgICAgICBbaXNFbWl0U2VsZWN0ZWREcm9wRG93bl09XCJpc0VtaXRBZnRlckNoYW5nZWQoKVwiXG4gICAgICAgICAgICAob3V0U2VsZWN0ZWREYXRhKT1cImhhbmRsZXJDaGFuZ2VTZWxlY3RlZEtleSgkZXZlbnQsICd0bycpXCJcbiAgICAgICAgICAgIChvdXRGdW5jdGlvbkNvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsJ3RvJylcIlxuICAgICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuQGlmIChpc0Vycm9yQ29tcGFyZURhdGUoKSkge1xuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbXQtWzRweF1cIj5cbiAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktbWVzc2FnZS1lcnJvciBsaWJzLXVpLWZvbnQtaDdyIGxpYnMtdWktdGV4dC1lcnJvclwiPnt7IHZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZVZhbGlkQ29tcGFyZVRpbWUgfHwgXCJpMThuX2ludmFsaWRfZW5kX2RhdGVfc2VsZWN0ZWRcIiB8IHRyYW5zbGF0ZTp2YWxpZFJlcXVpcmVkKCk/LmludGVycG9sYXRlUGFyYW1zQ29tcGFyZVRpbWUgfX08L3NwYW4+XG4gIDwvZGl2PlxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
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()) {\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-text-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()) {\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-text-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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QUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFFN0osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFDTSwyQkFBMkI7UUFDakMsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN4QixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxpQkFBaUIsQ0FBQztZQUUzQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxtQkFBbUIsQ0FBQztZQUU3QixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxrQkFBa0IsQ0FBQztZQUU1QixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxxQkFBcUIsQ0FBQztZQUUvQjtnQkFDRSxPQUFPLE9BQU8sQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzdELENBQUM7UUFFRCxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7SUFDckMsQ0FBQzt3R0E3SFUsa0RBQWtEOzRGQUFsRCxrREFBa0QsODFGQ3JCL0QsaTRDQTZCQSwyQ0RiSSxlQUFlLDRGQUNmLGlDQUFpQzs7NEZBSXhCLGtEQUFrRDtrQkFYOUQsU0FBUzsrQkFFRSxpREFBaUQsY0FFL0MsSUFBSSxXQUNQO3dCQUNQLGVBQWU7d0JBQ2YsaUNBQWlDO3FCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duXCI7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1saXN0XCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgSUh0dHBSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcIkBsaWJzLXVpL3NlcnZpY2VzLWh0dHAtcmVxdWVzdFwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IGNvbnZlcnRHZXRWYWx1ZSwgY29udmVydEl0ZW1TZWxlY3RlZERlZmluZSwgZ2V0Q29uZmlnSHR0cFJlcXVlc3REZXRhaWxEYXRlLCBnZXRDb25maWdIdHRwUmVxdWVzdExpc3REYXRlIH0gZnJvbSBcIi4uLy4uL2RlZmluZXMvZGF0ZS1kcm9wZG93bi5kZWZpbmVcIjtcbmltcG9ydCB7IFRZUEVfREFURV9GT1JNQVQgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9kYXRlLWRyb3Bkb3duLmludGVyZmFjZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtZHJvcGRvd24taXRlbS1jaGlsZCcsXG4gIHRlbXBsYXRlVXJsOiAnY2hpbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudFxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25JdGVtQ2hpbGRDb21wb25lbnQge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCA9IHNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsaXN0Q29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbT4oe1xuICAgIHR5cGU6ICd0ZXh0JyxcbiAgICBjb25maWdUZW1wbGF0ZVRleHQ6IHNpZ25hbCh7XG4gICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgIGF1dG9TY3JvbGxUb0l0ZW1TZWxlY3RlZDogdHJ1ZSxcbiAgICB9KVxuICB9KTtcbiAgcHJvdGVjdGVkIHRleHROb1NlbGVjdERpc3BsYXkgPSBjb21wdXRlZCh0aGlzLmNvbXB1dGVkVGV4dE5vU2VsZWN0RGlzcGxheS5iaW5kKHRoaXMpKTtcbiAgcHJvdGVjdGVkIHVzaW5nV2lkdGggPSBjb21wdXRlZCh0aGlzLmNvbXB1dGVkV2lkdGguYmluZCh0aGlzKSk7XG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgdHlwZURhdGUgPSBpbnB1dDxUWVBFX0RBVEVfRk9STUFUIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBnZXRJdGVtWWVhckRpc3BsYXkgPSBpbnB1dDwoeWVhcjogc3RyaW5nKSA9PiBzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBsaXN0RGF0YSA9IGlucHV0PEFycmF5PHsgaWQ6IG51bWJlciwgbGFiZWw6IHN0cmluZyB9Pj4oW10pO1xuICByZWFkb25seSBzaG93Qm9yZGVyRXJyb3IgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBsaXN0TWF4SXRlbVNob3cgPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oNiwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gNiB9KTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXI+KDEwMDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDEwMDAgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGxpc3RLZXlTZWxlY3RlZCA9IGlucHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgd2lkdGhEcm9wZG93biA9IGlucHV0PG51bWJlcj4oMTM2KTtcbiAgcmVhZG9ubHkgZmlyc3QgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBpc0Vycm9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgd2lkdGhCeUVsZW1lbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDb252ZXJ0WWVhclNlbGVjdGVkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdEtleXNEaXNhYmxlID0gaW5wdXQ8QXJyYXk8YW55PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGludGVycG9sYXRlUGFyYW1zPzogeyBhbnk6IG9iamVjdCB9O1xuICB9PigpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRTZWxlY3RlZEtleSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uQ29udHJvbCA9IG91dHB1dDxJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuXG4gIC8qIElOSkVDVCAqL1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgbGlzdERhdGEgPSB0aGlzLmxpc3REYXRhKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZC5zZXQoZ2V0Q29uZmlnSHR0cFJlcXVlc3REZXRhaWxEYXRlKGxpc3REYXRhKSk7XG4gICAgICAgIHRoaXMubGlzdENvbmZpZy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50Lmh0dHBSZXF1ZXN0RGF0YSkge1xuICAgICAgICAgICAgY3VycmVudC5odHRwUmVxdWVzdERhdGEgPSBzaWduYWw8SUh0dHBSZXF1ZXN0Q29uZmlnPihnZXRDb25maWdIdHRwUmVxdWVzdExpc3REYXRlKGxpc3REYXRhKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQuaHR0cFJlcXVlc3REYXRhLnNldChnZXRDb25maWdIdHRwUmVxdWVzdExpc3REYXRlKGxpc3REYXRhKSk7XG4gICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ1RlbXBsYXRlVGV4dCkge1xuICAgICAgICAgICAgY3VycmVudC5jb25maWdUZW1wbGF0ZVRleHQgPSBzaWduYWwoe1xuICAgICAgICAgICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgICAgICAgICAgYXV0b1Njcm9sbFRvSXRlbVNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQuY29uZmlnVGVtcGxhdGVUZXh0LnNldCh7XG4gICAgICAgICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgICAgICAgIGF1dG9TY3JvbGxUb0l0ZW1TZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgIGdldFZhbHVlOiAoaXRlbTogeyBsYWJlbDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRHZXRWYWx1ZSh0aGlzLnR5cGVEYXRlKCkgfHwgJ21vbnRoJywgaXRlbSwgdGhpcy50cmFuc2xhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VTZWxlY3RlZEl0ZW0oZXZlbnQ/OiBJRW1pdFNlbGVjdEtleSkge1xuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmtleSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3RlZEtleS5lbWl0KHVuZGVmaW5lZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRTZWxlY3RlZEtleS5lbWl0KGV2ZW50LmtleSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uQ29udHJvbC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdGbGFnTW91c2UoZmxhZ01vdXNlOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZmxhZ01vdXNlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydEl0ZW1TZWxlY3RlZCA9IChpdGVtOiBhbnkpID0+IHtcbiAgICBpZiAoIWl0ZW0gfHwgIXRoaXMudHlwZURhdGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtLmxhYmVsRGlzcGxheSA9IGNvbnZlcnRJdGVtU2VsZWN0ZWREZWZpbmUodGhpcy50eXBlRGF0ZSgpID8/ICdtb250aCcsIGl0ZW0sIHRoaXMudHJhbnNsYXRlLCB0aGlzLmdldEl0ZW1ZZWFyRGlzcGxheSgpLCB0aGlzLmlnbm9yZUNvbnZlcnRZZWFyU2VsZWN0ZWQoKSk7XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfTtcbiAgcHJpdmF0ZSBjb21wdXRlZFRleHROb1NlbGVjdERpc3BsYXkoKSB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGVEYXRlKCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHJldHVybiAnaTE4bl9zZWxlY3RfZGF5JztcblxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICByZXR1cm4gJ2kxOG5fc2VsZWN0X21vbnRoJztcblxuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHJldHVybiAnaTE4bl9zZWxlY3RfeWVhcic7XG5cbiAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICByZXR1cm4gJ2kxOG5fc2VsZWN0X3F1YXJ0ZXInO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ21vbnRoJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkV2lkdGgoKSB7XG4gICAgaWYgKHRoaXMud2lkdGhCeUVsZW1lbnQoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlyc3QoKSA/IGAke3RoaXMud2lkdGhEcm9wZG93bigpfXB4YCA6ICcxMDAlJztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aERyb3Bkb3duKCl9cHhgO1xuICB9XG59IiwiICBAaWYgKHR5cGVEYXRlKCkpIHtcbiAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJ1c2luZ1dpZHRoKClcIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb24oKVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgW3RleHREaXNwbGF5V2hlbk5vU2VsZWN0XT1cInRleHROb1NlbGVjdERpc3BsYXkoKVwiXG4gICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICAgIFtzaG93Qm9yZGVyRXJyb3JdPVwic2hvd0JvcmRlckVycm9yKClcIlxuICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cImxpc3RNYXhJdGVtU2hvdygpXCJcbiAgICAgICAgW2xpc3RDbGlja0V4YWN0bHldPVwiZmFsc2VcIlxuICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgW2xhYmVsUG9wb3ZlckNvbmZpZ109XCJ7IHpJbmRleDogekluZGV4KCkgKzEgfVwiXG4gICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RDb25maWcoKVwiXG4gICAgICAgIFtsaXN0S2V5c0Rpc2FibGVdPVwibGlzdEtleXNEaXNhYmxlKClcIlxuICAgICAgICBbY29udmVydEl0ZW1TZWxlY3RlZF09XCJjb252ZXJ0SXRlbVNlbGVjdGVkXCJcbiAgICAgICAgW29ubHlFbWl0RGF0YVdoZW5SZXNldF09XCJ0cnVlXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0XT1cImNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0KClcIlxuICAgICAgICBbaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZF09XCJodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkKClcIlxuICAgICAgICBbbGlzdEtleVNlbGVjdGVkXT1cImxpc3RLZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyQ2hhbmdlU2VsZWN0ZWRJdGVtKCRldmVudClcIlxuICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudClcIlxuICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdGbGFnTW91c2UoJGV2ZW50KVwiIC8+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChpc0Vycm9yKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbXQtWzRweF1cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS10ZXh0LWVycm9yIGxpYnMtdWktZm9udC1oN3JcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cIih2YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2UgfHwgJ2kxOG5fdmFsaWRfZW1wdHlfbWVzc2FnZScpfCB0cmFuc2xhdGU6dmFsaWRSZXF1aXJlZCgpPy5pbnRlcnBvbGF0ZVBhcmFtc1wiPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgfVxuIl19
|