@libs-ui/components-inputs-valid 0.2.357-7 → 0.2.357-9
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
CHANGED
|
@@ -391,7 +391,7 @@ export class ContactFormComponent {
|
|
|
391
391
|
|
|
392
392
|
| Output | Type | Mô tả | Handler TS | Binding HTML |
|
|
393
393
|
|---|---|---|---|---|
|
|
394
|
-
| `(outChangeValueByButtonUpDown)` | `void` | Phát ra khi giá trị thay đổi bởi nút tăng/giảm | `handlerChangeByUpDown(): void {
|
|
394
|
+
| `(outChangeValueByButtonUpDown)` | `void` | Phát ra khi giá trị thay đổi bởi nút tăng/giảm | `handlerChangeByUpDown(): void { this.refreshSummary(); }` | `(outChangeValueByButtonUpDown)="handlerChangeByUpDown()"` |
|
|
395
395
|
| `(outClickButtonLabel)` | `IButton` | Phát ra khi người dùng click vào button trong label | `handlerClickButtonLabel(button: IButton): void { button; }` | `(outClickButtonLabel)="handlerClickButtonLabel($event)"` |
|
|
396
396
|
| `(outEnterInputEvent)` | `IEvent` | Phát ra khi nhấn phím Enter trong ô nhập liệu | `handlerEnterInput(e: IEvent): void { e; }` | `(outEnterInputEvent)="handlerEnterInput($event)"` |
|
|
397
397
|
| `(outFocusAndBlur)` | `IFocusAndBlurEvent` | Phát ra khi input được focus hoặc blur | `handlerFocusAndBlur(e: IFocusAndBlurEvent): void { e; }` | `(outFocusAndBlur)="handlerFocusAndBlur($event)"` |
|
|
@@ -562,11 +562,3 @@ protected readonly checkUsernameAvailable: TYPE_FUNCTION_INPUT_VALID = async (va
|
|
|
562
562
|
⚠️ **`debounceTimeValidate` chỉ áp dụng cho `outValueChange`**: Validate vẫn chạy ngay khi gọi `checkIsValid()` programmatically, bất kể debounce.
|
|
563
563
|
|
|
564
564
|
⚠️ **Selector đúng là `libs_ui-components-inputs-valid`**: Lưu ý dùng dấu gạch dưới `_` không phải gạch ngang `-` sau `libs_ui`.
|
|
565
|
-
|
|
566
|
-
## Demo
|
|
567
|
-
|
|
568
|
-
```bash
|
|
569
|
-
npx nx serve core-ui
|
|
570
|
-
```
|
|
571
|
-
|
|
572
|
-
Truy cập: http://localhost:4500 và tìm phần demo của `inputs-valid` trong menu Components.
|
|
@@ -15,8 +15,8 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
15
15
|
singleError = signal({ message: undefined, interpolateParams: undefined });
|
|
16
16
|
rectLeft = signal(undefined);
|
|
17
17
|
calledEffect = signal(false);
|
|
18
|
-
timer
|
|
19
|
-
timerValueChange
|
|
18
|
+
timer;
|
|
19
|
+
timerValueChange;
|
|
20
20
|
functionControlInput;
|
|
21
21
|
// #region INPUT
|
|
22
22
|
item = model.required({});
|
|
@@ -177,12 +177,12 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
177
177
|
}
|
|
178
178
|
handlerValueChange(value) {
|
|
179
179
|
set(this.item(), this.fieldNameBind(), value);
|
|
180
|
-
// Support trường hợp call API hoặc validate cần xử lý check tốn nhiều thời gian thì cần
|
|
181
|
-
clearTimeout(this.timerValueChange
|
|
182
|
-
this.timerValueChange
|
|
180
|
+
// Support trường hợp call API hoặc validate cần xử lý check tốn nhiều thời gian thì cần debounce time để tránh call liên tục
|
|
181
|
+
clearTimeout(this.timerValueChange);
|
|
182
|
+
this.timerValueChange = setTimeout(() => {
|
|
183
183
|
this.validate(value);
|
|
184
184
|
this.outValueChange.emit(value);
|
|
185
|
-
}, this.debounceTimeValidate())
|
|
185
|
+
}, this.debounceTimeValidate());
|
|
186
186
|
}
|
|
187
187
|
handlerEventIconLeft(eventName) {
|
|
188
188
|
this.outIconLeft.emit(eventName);
|
|
@@ -283,7 +283,7 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
283
283
|
if (this.item() && (this.readonly() || this.disable())) {
|
|
284
284
|
return true;
|
|
285
285
|
}
|
|
286
|
-
clearTimeout(this.timerValueChange
|
|
286
|
+
clearTimeout(this.timerValueChange);
|
|
287
287
|
await this.validate(get(this.item, this.fieldNameBind()));
|
|
288
288
|
return !this.singleError().message;
|
|
289
289
|
}
|
|
@@ -298,17 +298,17 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
298
298
|
}
|
|
299
299
|
getRectLeft() {
|
|
300
300
|
if (!this.rectLeft() || this.positionMessageErrorStartInput()) {
|
|
301
|
-
this.timer
|
|
301
|
+
this.timer = setTimeout(() => {
|
|
302
302
|
this.rectLeft.set(this.elementLeftRef()?.nativeElement.getBoundingClientRect());
|
|
303
|
-
})
|
|
303
|
+
});
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
306
|
handlerChangeValueByButtonUpDown() {
|
|
307
307
|
this.outChangeValueByButtonUpDown.emit();
|
|
308
308
|
}
|
|
309
309
|
ngOnDestroy() {
|
|
310
|
-
clearTimeout(this.timer
|
|
311
|
-
clearTimeout(this.timerValueChange
|
|
310
|
+
clearTimeout(this.timer);
|
|
311
|
+
clearTimeout(this.timerValueChange);
|
|
312
312
|
}
|
|
313
313
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsValidComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
314
314
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsInputsValidComponent, isStandalone: true, selector: "libs_ui-components-inputs-valid", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, emitEmptyInDataTypeNumber: { classPropertyName: "emitEmptyInDataTypeNumber", publicName: "emitEmptyInDataTypeNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreBlockInputMaxValue: { classPropertyName: "ignoreBlockInputMaxValue", publicName: "ignoreBlockInputMaxValue", isSignal: true, isRequired: false, transformFunction: null }, fieldNameBind: { classPropertyName: "fieldNameBind", publicName: "fieldNameBind", isSignal: true, isRequired: true, transformFunction: null }, showCount: { classPropertyName: "showCount", publicName: "showCount", isSignal: true, isRequired: false, transformFunction: null }, typeComponentSelectItem: { classPropertyName: "typeComponentSelectItem", publicName: "typeComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, valueComponentSelectItem: { classPropertyName: "valueComponentSelectItem", publicName: "valueComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, disableComponentSelectItem: { classPropertyName: "disableComponentSelectItem", publicName: "disableComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, tagInput: { classPropertyName: "tagInput", publicName: "tagInput", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, typeInput: { classPropertyName: "typeInput", publicName: "typeInput", isSignal: true, isRequired: false, transformFunction: null }, modeInput: { classPropertyName: "modeInput", publicName: "modeInput", isSignal: true, isRequired: false, transformFunction: null }, resetAutoCompletePassword: { classPropertyName: "resetAutoCompletePassword", publicName: "resetAutoCompletePassword", isSignal: true, isRequired: false, transformFunction: null }, textAreaEnterNotNewLine: { classPropertyName: "textAreaEnterNotNewLine", publicName: "textAreaEnterNotNewLine", isSignal: true, isRequired: false, transformFunction: null }, fixedFloat: { classPropertyName: "fixedFloat", publicName: "fixedFloat", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreWidthInput100: { classPropertyName: "ignoreWidthInput100", publicName: "ignoreWidthInput100", isSignal: true, isRequired: false, transformFunction: null }, classIncludeInput: { classPropertyName: "classIncludeInput", publicName: "classIncludeInput", isSignal: true, isRequired: false, transformFunction: null }, classContainerInput: { classPropertyName: "classContainerInput", publicName: "classContainerInput", 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 }, noBorder: { classPropertyName: "noBorder", publicName: "noBorder", isSignal: true, isRequired: false, transformFunction: null }, backgroundNone: { classPropertyName: "backgroundNone", publicName: "backgroundNone", isSignal: true, isRequired: false, transformFunction: null }, useColorModeExist: { classPropertyName: "useColorModeExist", publicName: "useColorModeExist", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, keepPlaceholderOnly: { classPropertyName: "keepPlaceholderOnly", publicName: "keepPlaceholderOnly", isSignal: true, isRequired: false, transformFunction: null }, classContainerBottomInput: { classPropertyName: "classContainerBottomInput", publicName: "classContainerBottomInput", isSignal: true, isRequired: false, transformFunction: null }, autoRemoveEmoji: { classPropertyName: "autoRemoveEmoji", publicName: "autoRemoveEmoji", isSignal: true, isRequired: false, transformFunction: null }, defaultHeight: { classPropertyName: "defaultHeight", publicName: "defaultHeight", isSignal: true, isRequired: false, transformFunction: null }, maxHeightTextArea: { classPropertyName: "maxHeightTextArea", publicName: "maxHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, minHeightTextArea: { classPropertyName: "minHeightTextArea", publicName: "minHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowError: { classPropertyName: "ignoreShowError", publicName: "ignoreShowError", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowMessageError: { classPropertyName: "ignoreShowMessageError", publicName: "ignoreShowMessageError", isSignal: true, isRequired: false, transformFunction: null }, borderError: { classPropertyName: "borderError", publicName: "borderError", isSignal: true, isRequired: false, transformFunction: null }, iconLeftClass: { classPropertyName: "iconLeftClass", publicName: "iconLeftClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconLeft: { classPropertyName: "popoverContentIconLeft", publicName: "popoverContentIconLeft", isSignal: true, isRequired: false, transformFunction: null }, iconRightClass: { classPropertyName: "iconRightClass", publicName: "iconRightClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconRight: { classPropertyName: "popoverContentIconRight", publicName: "popoverContentIconRight", isSignal: true, isRequired: false, transformFunction: null }, zIndexPopoverContent: { classPropertyName: "zIndexPopoverContent", publicName: "zIndexPopoverContent", isSignal: true, isRequired: false, transformFunction: null }, unitsLeft: { classPropertyName: "unitsLeft", publicName: "unitsLeft", isSignal: true, isRequired: false, transformFunction: null }, configUnitLeft: { classPropertyName: "configUnitLeft", publicName: "configUnitLeft", isSignal: true, isRequired: false, transformFunction: null }, keySelectedUnitLeft: { classPropertyName: "keySelectedUnitLeft", publicName: "keySelectedUnitLeft", isSignal: true, isRequired: false, transformFunction: null }, unitsRight: { classPropertyName: "unitsRight", publicName: "unitsRight", isSignal: true, isRequired: false, transformFunction: null }, configUnitRight: { classPropertyName: "configUnitRight", publicName: "configUnitRight", isSignal: true, isRequired: false, transformFunction: null }, keySelectedUnitRight: { classPropertyName: "keySelectedUnitRight", publicName: "keySelectedUnitRight", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, minValueNumber: { classPropertyName: "minValueNumber", publicName: "minValueNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreContentLeft: { classPropertyName: "ignoreContentLeft", publicName: "ignoreContentLeft", isSignal: true, isRequired: false, transformFunction: null }, ignoreContentRight: { classPropertyName: "ignoreContentRight", publicName: "ignoreContentRight", isSignal: true, isRequired: false, transformFunction: null }, isBaselineStyle: { classPropertyName: "isBaselineStyle", publicName: "isBaselineStyle", isSignal: true, isRequired: false, transformFunction: null }, valuePatternShowError: { classPropertyName: "valuePatternShowError", publicName: "valuePatternShowError", isSignal: true, isRequired: false, transformFunction: null }, validPattern: { classPropertyName: "validPattern", publicName: "validPattern", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, validMinLength: { classPropertyName: "validMinLength", publicName: "validMinLength", isSignal: true, isRequired: false, transformFunction: null }, validMinValue: { classPropertyName: "validMinValue", publicName: "validMinValue", isSignal: true, isRequired: false, transformFunction: null }, validMaxValue: { classPropertyName: "validMaxValue", publicName: "validMaxValue", isSignal: true, isRequired: false, transformFunction: null }, validMaxLength: { classPropertyName: "validMaxLength", publicName: "validMaxLength", isSignal: true, isRequired: false, transformFunction: null }, functionValid: { classPropertyName: "functionValid", publicName: "functionValid", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, positionMessageErrorStartInput: { classPropertyName: "positionMessageErrorStartInput", publicName: "positionMessageErrorStartInput", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, resize: { classPropertyName: "resize", publicName: "resize", isSignal: true, isRequired: false, transformFunction: null }, templateLeftBottomInput: { classPropertyName: "templateLeftBottomInput", publicName: "templateLeftBottomInput", isSignal: true, isRequired: false, transformFunction: null }, templateRightBottomInput: { classPropertyName: "templateRightBottomInput", publicName: "templateRightBottomInput", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, autoAddZeroLessThan10InTypeInt: { classPropertyName: "autoAddZeroLessThan10InTypeInt", publicName: "autoAddZeroLessThan10InTypeInt", isSignal: true, isRequired: false, transformFunction: null }, maxLengthNumberCount: { classPropertyName: "maxLengthNumberCount", publicName: "maxLengthNumberCount", isSignal: true, isRequired: false, transformFunction: null }, classMessageErrorInclude: { classPropertyName: "classMessageErrorInclude", publicName: "classMessageErrorInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreUnitRightClassReadOnly: { classPropertyName: "ignoreUnitRightClassReadOnly", publicName: "ignoreUnitRightClassReadOnly", isSignal: true, isRequired: false, transformFunction: null }, paddingRightCustomSpecific: { classPropertyName: "paddingRightCustomSpecific", publicName: "paddingRightCustomSpecific", isSignal: true, isRequired: false, transformFunction: null }, focusTimeOut: { classPropertyName: "focusTimeOut", publicName: "focusTimeOut", isSignal: true, isRequired: false, transformFunction: null }, debounceTimeValidate: { classPropertyName: "debounceTimeValidate", publicName: "debounceTimeValidate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { item: "itemChange", outValueChange: "outValueChange", outSelect: "outSelect", outIconLeft: "outIconLeft", outIconRight: "outIconRight", outClickButtonLabel: "outClickButtonLabel", outSwitchEventLabel: "outSwitchEventLabel", outLabelRightClick: "outLabelRightClick", outEnterInputEvent: "outEnterInputEvent", outHeightAreaChange: "outHeightAreaChange", outFunctionsControl: "outFunctionsControl", outFocusAndBlur: "outFocusAndBlur", outChangeValueByButtonUpDown: "outChangeValueByButtonUpDown" }, viewQueries: [{ propertyName: "elementLeftRef", first: true, predicate: ["elementLeftRef"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (fieldNameBind() && item(); as item) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"disable() || labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsRight]=\"disable() || labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"disable() || labelConfig.toggleDisable\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"value()?.length\"\n (outClickButton)=\"handlerClickButtonLabel($event)\"\n (outSwitchEvent)=\"handlerSwitchLabel($event)\"\n (outLabelRightClick)=\"handlerEventLabelRightLabel()\" />\n }\n <div\n [class]=\"'libs-ui-input-valid w-full ' + (classInclude() ?? '')\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (!ignoreContentLeft()) {\n <div\n #elementLeftRef\n class=\"libs-ui-input-valid-left\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (typeComponentSelectItem(); as typeComponentSelectItem) {\n <div class=\"mr-[8px]\">\n @if (typeComponentSelectItem === 'checkbox') {\n <libs_ui-components-checkbox-single\n [checked]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.checked)\" />\n }\n @if (typeComponentSelectItem === 'radio') {\n <libs_ui-components-radio-single\n [active]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.active)\" />\n }\n </div>\n }\n\n <ng-content select=\".libs-ui-input-valid-left-content-custom\" />\n @for (unit of unitsLeft(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-left !rounded-tr-none !rounded-br-none libs-ui-font-h5r {{ configUnitLeft().classInclude || '' }}\"\n [class.!flex]=\"unit[configUnitLeft().fieldKey] === keySelectedUnitLeft()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [class.libs-ui-disable]=\"disable() || false\">\n @let constHtmlLabel = unit[configUnitLeft().fieldLabel || 'label'] || ' ';\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', zIndex: zIndexPopoverContent() }\"\n [innerHtml]=\"constHtmlLabel | translate\" />\n </div>\n }\n </div>\n }\n @if (calledEffect() === true) {\n <libs_ui-components-inputs-input\n [tagInput]=\"tagInput()\"\n [dataType]=\"dataType() || 'string'\"\n [typeInput]=\"typeInput()\"\n [modeInput]=\"modeInput()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [textAreaEnterNotNewLine]=\"textAreaEnterNotNewLine() || false\"\n [classInclude]=\"(classIncludeInput() || '') + (unitsLeft() && unitsLeft()?.length ? ' !rounded-tl-none !rounded-bl-none' : '') + (unitsRight()?.length ? ' !rounded-tr-none !rounded-br-none' : '')\"\n [maxValueNumber]=\"maxValueNumber()\"\n [minValueNumber]=\"minValueNumber()\"\n [fixedFloat]=\"fixedFloat() ?? 1\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxLength]=\"maxLength()\"\n [showCount]=\"showCount()\"\n [readonly]=\"readonly()\"\n [disable]=\"disable()\"\n [autoAddZeroLessThan10InTypeInt]=\"autoAddZeroLessThan10InTypeInt()\"\n [noBorder]=\"noBorder()\"\n [backgroundNone]=\"backgroundNone()\"\n [useColorModeExist]=\"useColorModeExist()\"\n [placeholder]=\"placeholder() || ''\"\n [keepPlaceholderOnly]=\"keepPlaceholderOnly()\"\n [autoRemoveEmoji]=\"autoRemoveEmoji()\"\n [defaultHeight]=\"defaultHeight()\"\n [maxHeightTextArea]=\"maxHeightTextArea() || 250\"\n [minHeightTextArea]=\"minHeightTextArea()\"\n [borderError]=\"borderError() || (!!singleError().message && !ignoreShowError())\"\n [iconLeftClass]=\"iconLeftClass()\"\n [popoverContentIconLeft]=\"popoverContentIconLeft()\"\n [popoverContentIconRight]=\"popoverContentIconRight()\"\n [iconRightClass]=\"iconRightClass()\"\n [zIndexPopoverContent]=\"zIndexPopoverContent()\"\n [emitEmptyInDataTypeNumber]=\"emitEmptyInDataTypeNumber()\"\n [ignoreBlockInputMaxValue]=\"!!ignoreBlockInputMaxValue() ? ignoreBlockInputMaxValue() : validMaxValue()?.message ? true : false\"\n [(value)]=\"value\"\n [classContainerInput]=\"classContainerInput()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n [resize]=\"resize()\"\n [classContainerBottomInput]=\"classContainerBottomInput()\"\n [templateLeftBottomInput]=\"templateLeftBottomInput()\"\n [templateRightBottomInput]=\"templateRightBottomInput()\"\n [maxLengthNumberCount]=\"maxLengthNumberCount()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [focusTimeOut]=\"focusTimeOut()\"\n (valueChange)=\"handlerValueChange($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outHeightAreaChange)=\"handlerHeightAreaChange($event)\"\n (outFunctionsControl)=\"handlerControlFunctionInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\"\n (outChangeValueByButtonUpDown)=\"handlerChangeValueByButtonUpDown()\" />\n }\n @if (!ignoreContentRight()) {\n <div\n class=\"libs-ui-input-valid-right\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @for (unit of unitsRight(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-right !rounded-tl-none !rounded-bl-none libs-ui-font-h5r {{ configUnitRight().classInclude || 'libs-ui-border-general' }}\"\n [class.!flex]=\"unit[configUnitRight().fieldKey] === keySelectedUnitRight()\"\n [class.libs-ui-readonly]=\"!ignoreUnitRightClassReadOnly() && (readonly() || false)\">\n @let constHtmlLabel = unit[configUnitRight().fieldLabel || 'label'] || ' ';\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', zIndex: zIndexPopoverContent() }\"\n [innerHtml]=\"constHtmlLabel | translate\" />\n </div>\n }\n <ng-content select=\".libs-ui-input-valid-right-content-custom\"></ng-content>\n </div>\n }\n </div>\n @if (!!singleError().message && !ignoreShowError() && !ignoreShowMessageError()) {\n <div class=\"libs-ui-input-valid-error {{ classMessageErrorInclude() || '' }}\">\n @let constHtmlMessage = singleError().message || ' ';\n <span\n class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\"\n [style.marginLeft.px]=\"rectLeft()?.width\"\n [innerHtml]=\"constHtmlMessage | translate: singleError().interpolateParams\"></span>\n </div>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .libs-ui-input-valid{position:relative;display:flex;align-items:center}:host .libs-ui-input-valid .libs-ui-input-valid-unit{height:32px;max-width:200px;overflow:hidden;text-align:center;border-radius:4px;background-color:#e6e7ea;display:none;align-items:center;padding:0 8px;border:1px solid #e6e7ea}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-left{border-bottom-left-radius:0;border-top-left-radius:0;border-left:none}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-right{border-bottom-right-radius:0;border-top-right-radius:0;border-right:none}:host .libs-ui-input-valid .libs-ui-input-valid-left{display:flex;align-items:center;justify-content:flex-start}:host .libs-ui-input-valid .libs-ui-input-valid-right{display:flex;align-items:center;justify-content:flex-end}:host .libs-ui-input-valid-error{display:flex;align-items:center;margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsInputsInputComponent, selector: "libs_ui-components-inputs-input", inputs: ["tagInput", "dataType", "typeInput", "modeInput", "tabInsertContentTagInput", "textAreaEnterNotNewLine", "emitEmptyInDataTypeNumber", "keepZeroInTypeInt", "autoAddZeroLessThan10InTypeInt", "ignoreBlockInputMaxValue", "maxValueNumber", "minValueNumber", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "classInclude", "maxLength", "readonly", "disable", "noBorder", "backgroundNone", "borderError", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "value", "autoRemoveEmoji", "defaultHeight", "minHeightTextArea", "maxHeightTextArea", "focusTimeOut", "selectAllTimeOut", "blurTimeOut", "zIndexPopoverContent", "classContainerInput", "showCount", "ignoreStopPropagationEvent", "resize", "templateLeftBottomInput", "templateRightBottomInput", "classContainerBottomInput", "ignoreWidthInput100", "iframeTextareaCustomStyle", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "resetAutoCompletePassword", "acceptOnlyClickIcon", "setIconRightColorSameColorDisableReadOnly", "onlyAcceptNegativeValue", "maxLengthNumberCount", "focusInput"], outputs: ["maxValueNumberChange", "minValueNumberChange", "fixedFloatChange", "acceptNegativeValueChange", "maxLengthChange", "valueChange", "maxLengthNumberCountChange", "outHeightAreaChange", "outChange", "outFocusAndBlurEvent", "outEnterEvent", "outInputEvent", "outIconLeft", "outIconRight", "outFunctionsControl", "outFilesDrop", "outFileDrop", "outChangeValueByButtonUpDown"] }, { 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: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder", "dataComponentOutlet", "componentOutlet"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabel", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon", "dataComponentOutlet", "componentOutlet"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
@@ -317,4 +317,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
317
317
|
type: Component,
|
|
318
318
|
args: [{ selector: 'libs_ui-components-inputs-valid', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsInputComponent, LibsUiComponentsLabelComponent, LibsUiComponentsCheckboxSingleComponent, LibsUiComponentsRadioSingleComponent, LibsUiComponentsPopoverComponent], template: "@if (fieldNameBind() && item(); as item) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"disable() || labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsRight]=\"disable() || labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"disable() || labelConfig.toggleDisable\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"value()?.length\"\n (outClickButton)=\"handlerClickButtonLabel($event)\"\n (outSwitchEvent)=\"handlerSwitchLabel($event)\"\n (outLabelRightClick)=\"handlerEventLabelRightLabel()\" />\n }\n <div\n [class]=\"'libs-ui-input-valid w-full ' + (classInclude() ?? '')\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (!ignoreContentLeft()) {\n <div\n #elementLeftRef\n class=\"libs-ui-input-valid-left\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (typeComponentSelectItem(); as typeComponentSelectItem) {\n <div class=\"mr-[8px]\">\n @if (typeComponentSelectItem === 'checkbox') {\n <libs_ui-components-checkbox-single\n [checked]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.checked)\" />\n }\n @if (typeComponentSelectItem === 'radio') {\n <libs_ui-components-radio-single\n [active]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.active)\" />\n }\n </div>\n }\n\n <ng-content select=\".libs-ui-input-valid-left-content-custom\" />\n @for (unit of unitsLeft(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-left !rounded-tr-none !rounded-br-none libs-ui-font-h5r {{ configUnitLeft().classInclude || '' }}\"\n [class.!flex]=\"unit[configUnitLeft().fieldKey] === keySelectedUnitLeft()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [class.libs-ui-disable]=\"disable() || false\">\n @let constHtmlLabel = unit[configUnitLeft().fieldLabel || 'label'] || ' ';\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', zIndex: zIndexPopoverContent() }\"\n [innerHtml]=\"constHtmlLabel | translate\" />\n </div>\n }\n </div>\n }\n @if (calledEffect() === true) {\n <libs_ui-components-inputs-input\n [tagInput]=\"tagInput()\"\n [dataType]=\"dataType() || 'string'\"\n [typeInput]=\"typeInput()\"\n [modeInput]=\"modeInput()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [textAreaEnterNotNewLine]=\"textAreaEnterNotNewLine() || false\"\n [classInclude]=\"(classIncludeInput() || '') + (unitsLeft() && unitsLeft()?.length ? ' !rounded-tl-none !rounded-bl-none' : '') + (unitsRight()?.length ? ' !rounded-tr-none !rounded-br-none' : '')\"\n [maxValueNumber]=\"maxValueNumber()\"\n [minValueNumber]=\"minValueNumber()\"\n [fixedFloat]=\"fixedFloat() ?? 1\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxLength]=\"maxLength()\"\n [showCount]=\"showCount()\"\n [readonly]=\"readonly()\"\n [disable]=\"disable()\"\n [autoAddZeroLessThan10InTypeInt]=\"autoAddZeroLessThan10InTypeInt()\"\n [noBorder]=\"noBorder()\"\n [backgroundNone]=\"backgroundNone()\"\n [useColorModeExist]=\"useColorModeExist()\"\n [placeholder]=\"placeholder() || ''\"\n [keepPlaceholderOnly]=\"keepPlaceholderOnly()\"\n [autoRemoveEmoji]=\"autoRemoveEmoji()\"\n [defaultHeight]=\"defaultHeight()\"\n [maxHeightTextArea]=\"maxHeightTextArea() || 250\"\n [minHeightTextArea]=\"minHeightTextArea()\"\n [borderError]=\"borderError() || (!!singleError().message && !ignoreShowError())\"\n [iconLeftClass]=\"iconLeftClass()\"\n [popoverContentIconLeft]=\"popoverContentIconLeft()\"\n [popoverContentIconRight]=\"popoverContentIconRight()\"\n [iconRightClass]=\"iconRightClass()\"\n [zIndexPopoverContent]=\"zIndexPopoverContent()\"\n [emitEmptyInDataTypeNumber]=\"emitEmptyInDataTypeNumber()\"\n [ignoreBlockInputMaxValue]=\"!!ignoreBlockInputMaxValue() ? ignoreBlockInputMaxValue() : validMaxValue()?.message ? true : false\"\n [(value)]=\"value\"\n [classContainerInput]=\"classContainerInput()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n [resize]=\"resize()\"\n [classContainerBottomInput]=\"classContainerBottomInput()\"\n [templateLeftBottomInput]=\"templateLeftBottomInput()\"\n [templateRightBottomInput]=\"templateRightBottomInput()\"\n [maxLengthNumberCount]=\"maxLengthNumberCount()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [focusTimeOut]=\"focusTimeOut()\"\n (valueChange)=\"handlerValueChange($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outHeightAreaChange)=\"handlerHeightAreaChange($event)\"\n (outFunctionsControl)=\"handlerControlFunctionInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\"\n (outChangeValueByButtonUpDown)=\"handlerChangeValueByButtonUpDown()\" />\n }\n @if (!ignoreContentRight()) {\n <div\n class=\"libs-ui-input-valid-right\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @for (unit of unitsRight(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-right !rounded-tl-none !rounded-bl-none libs-ui-font-h5r {{ configUnitRight().classInclude || 'libs-ui-border-general' }}\"\n [class.!flex]=\"unit[configUnitRight().fieldKey] === keySelectedUnitRight()\"\n [class.libs-ui-readonly]=\"!ignoreUnitRightClassReadOnly() && (readonly() || false)\">\n @let constHtmlLabel = unit[configUnitRight().fieldLabel || 'label'] || ' ';\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', zIndex: zIndexPopoverContent() }\"\n [innerHtml]=\"constHtmlLabel | translate\" />\n </div>\n }\n <ng-content select=\".libs-ui-input-valid-right-content-custom\"></ng-content>\n </div>\n }\n </div>\n @if (!!singleError().message && !ignoreShowError() && !ignoreShowMessageError()) {\n <div class=\"libs-ui-input-valid-error {{ classMessageErrorInclude() || '' }}\">\n @let constHtmlMessage = singleError().message || ' ';\n <span\n class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\"\n [style.marginLeft.px]=\"rectLeft()?.width\"\n [innerHtml]=\"constHtmlMessage | translate: singleError().interpolateParams\"></span>\n </div>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .libs-ui-input-valid{position:relative;display:flex;align-items:center}:host .libs-ui-input-valid .libs-ui-input-valid-unit{height:32px;max-width:200px;overflow:hidden;text-align:center;border-radius:4px;background-color:#e6e7ea;display:none;align-items:center;padding:0 8px;border:1px solid #e6e7ea}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-left{border-bottom-left-radius:0;border-top-left-radius:0;border-left:none}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-right{border-bottom-right-radius:0;border-top-right-radius:0;border-right:none}:host .libs-ui-input-valid .libs-ui-input-valid-left{display:flex;align-items:center;justify-content:flex-start}:host .libs-ui-input-valid .libs-ui-input-valid-right{display:flex;align-items:center;justify-content:flex-end}:host .libs-ui-input-valid-error{display:flex;align-items:center;margin-top:8px}\n"] }]
|
|
319
319
|
}], ctorParameters: () => [] });
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvdmFsaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvdmFsaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQThDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzSyxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RixPQUFPLEVBQWtELG9DQUFvQyxFQUE2RixNQUFNLGtDQUFrQyxDQUFDO0FBQ25PLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSwwQkFBMEIsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hPLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBWXRELE1BQU0sT0FBTyxvQ0FBb0M7SUFDL0MsbUJBQW1CO0lBQ1QsS0FBSyxHQUFHLE1BQU0sQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUMxQixXQUFXLEdBQUcsTUFBTSxDQUFv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OEIsRUFBRSxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQ1osVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztZQUNsRixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFUyxnQ0FBZ0M7UUFDeEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7d0dBdldVLG9DQUFvQzs0RkFBcEMsb0NBQW9DLHlqWUN2QmpELGd5UUErSkEsNC9CRDFJWSxlQUFlLDRGQUFFLG9DQUFvQyx3aERBQUUsOEJBQThCLDRxQkFBRSx1Q0FBdUMsMHBCQUFFLG9DQUFvQywyaEJBQUUsZ0NBQWdDOzs0RkFFck0sb0NBQW9DO2tCQVRoRCxTQUFTOytCQUVFLGlDQUFpQyxjQUcvQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsb0NBQW9DLEVBQUUsOEJBQThCLEVBQUUsdUNBQXVDLEVBQUUsb0NBQW9DLEVBQUUsZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtY2hlY2tib3gtc2luZ2xlJztcbmltcG9ydCB7IElGb2N1c0FuZEJsdXJFdmVudCwgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCwgVFlQRV9EQVRBX1RZUEVfSU5QVVQsIFRZUEVfSU5QVVQsIFRZUEVfSU5QVVRfUkVTSVpFX01PREUsIFRZUEVfTU9ERV9JTlBVVCwgVFlQRV9UQUdfSU5QVVQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy1pbnB1dCc7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWwnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1JhZGlvU2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1yYWRpby1zaW5nbGUnO1xuaW1wb3J0IHsgSVN3aXRjaEV2ZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zd2l0Y2gnO1xuaW1wb3J0IHsgSUJvdW5kaW5nQ2xpZW50UmVjdCwgSUV2ZW50LCBJTWVzc2FnZVRyYW5zbGF0ZSwgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQsIEVSUk9SX01FU1NBR0VfTUFYX0xFTkdUSCwgRVJST1JfTUVTU0FHRV9NQVhfVkFMSUQsIEVSUk9SX01FU1NBR0VfTUlOX0xFTkdUSCwgRVJST1JfTUVTU0FHRV9NSU5fVkFMSUQsIEVSUk9SX01FU1NBR0VfUEFUVEVOX1ZBTElELCBnZXQsIGlzTmlsLCBzZXQsIHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJSW5wdXRWYWxpZFVuaXRDb25maWcsIElWYWxpZExlbmd0aCwgSVZhbGlkUGF0dGVybiwgSVZhbGlkUmVxdWlyZWQsIFRZUEVfRlVOQ1RJT05fSU5QVVRfVkFMSUQgfSBmcm9tICcuL2ludGVyZmFjZXMvdmFsaWQuaW50ZXJmYWNlJztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmFsaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92YWxpZC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1JhZGlvU2luZ2xlQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgdmFsdWUgPSBzaWduYWw8YW55PihudWxsKTtcbiAgcHJvdGVjdGVkIHNpbmdsZUVycm9yID0gc2lnbmFsPElNZXNzYWdlVHJhbnNsYXRlPih7IG1lc3NhZ2U6IHVuZGVmaW5lZCwgaW50ZXJwb2xhdGVQYXJhbXM6IHVuZGVmaW5lZCB9KTtcbiAgcHJvdGVjdGVkIHJlY3RMZWZ0ID0gc2lnbmFsPElCb3VuZGluZ0NsaWVudFJlY3QgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBjYWxsZWRFZmZlY3QgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVyID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZXJWYWx1ZUNoYW5nZSA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIGZ1bmN0aW9uQ29udHJvbElucHV0OiBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZDtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGl0ZW0gPSBtb2RlbC5yZXF1aXJlZDxSZWNvcmQ8c3RyaW5nLCBhbnk+Pih7fSk7XG4gIHJlYWRvbmx5IGxhYmVsQ29uZmlnID0gaW5wdXQ8SUxhYmVsPigpO1xuICByZWFkb25seSBlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZmllbGROYW1lQmluZCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgc2hvd0NvdW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICByZWFkb25seSB0eXBlQ29tcG9uZW50U2VsZWN0SXRlbSA9IGlucHV0PCdyYWRpbycgfCAnY2hlY2tib3gnIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSB2YWx1ZUNvbXBvbmVudFNlbGVjdEl0ZW0gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlQ29tcG9uZW50U2VsZWN0SXRlbSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgdGFnSW5wdXQgPSBpbnB1dDxUWVBFX1RBR19JTlBVVD4oKTtcbiAgcmVhZG9ubHkgZGF0YVR5cGUgPSBpbnB1dDxUWVBFX0RBVEFfVFlQRV9JTlBVVD4oKTtcbiAgcmVhZG9ubHkgdHlwZUlucHV0ID0gaW5wdXQ8VFlQRV9JTlBVVD4oKTtcbiAgcmVhZG9ubHkgbW9kZUlucHV0ID0gaW5wdXQ8VFlQRV9NT0RFX0lOUFVUPigpO1xuICByZWFkb25seSByZXNldEF1dG9Db21wbGV0ZVBhc3N3b3JkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdGV4dEFyZWFFbnRlck5vdE5ld0xpbmUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBmaXhlZEZsb2F0ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBhY2NlcHROZWdhdGl2ZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdmFsdWVVcERvd25OdW1iZXIgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZVdpZHRoSW5wdXQxMDAgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVJbnB1dCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXJJbnB1dCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbm9Cb3JkZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBiYWNrZ3JvdW5kTm9uZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHVzZUNvbG9yTW9kZUV4aXN0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGtlZXBQbGFjZWhvbGRlck9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVyQm90dG9tSW5wdXQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGF1dG9SZW1vdmVFbW9qaSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRlZmF1bHRIZWlnaHQgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1heEhlaWdodFRleHRBcmVhID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtaW5IZWlnaHRUZXh0QXJlYSA9IGlucHV0PG51bWJlcj4oKTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIEtow7RuZyBz4butIGThu6VuZyBpbnB1dCBuw6B5LiBT4butIGThu6VuZyB7QGxpbmsgaWdub3JlU2hvd01lc3NhZ2VFcnJvcn0gdGhheSB0aOG6v1xuICAgKiBu4bq/dSB24bqrbiBtdeG7kW4gaGnhu4NuIHRo4buLIGJvcmRlciDEkeG7jyBuaMawbmcga2jDtG5nIHNob3cgbWVzc2FnZSBs4buXaS5cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVNob3dFcnJvciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIC8qKiDhuqhuIG1lc3NhZ2UgbOG7l2kgbmjGsG5nIHbhuqtuIGhp4buDbiB0aOG7iyBib3JkZXIgxJHhu48ga2hpIGPDsyBs4buXaSAqL1xuICByZWFkb25seSBpZ25vcmVTaG93TWVzc2FnZUVycm9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgLyoqIEx1w7RuIGhp4buDbiB0aOG7iyBib3JkZXIgxJHhu48gYuG6pXQga+G7gyB0cuG6oW5nIHRow6FpIGzhu5dpICovXG4gIHJlYWRvbmx5IGJvcmRlckVycm9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICByZWFkb25seSBpY29uTGVmdENsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBwb3BvdmVyQ29udGVudEljb25MZWZ0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBpY29uUmlnaHRDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnRJY29uUmlnaHQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHpJbmRleFBvcG92ZXJDb250ZW50ID0gaW5wdXQ8bnVtYmVyPigpO1xuXG4gIHJlYWRvbmx5IHVuaXRzTGVmdCA9IGlucHV0PEFycmF5PGFueT4+KCk7XG4gIHJlYWRvbmx5IGNvbmZpZ1VuaXRMZWZ0ID0gaW5wdXQ8SUlucHV0VmFsaWRVbml0Q29uZmlnPih7XG4gICAgZmllbGRLZXk6ICdpZCcsXG4gICAgZmllbGRMYWJlbDogJ2xhYmVsJyxcbiAgfSk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkVW5pdExlZnQgPSBpbnB1dDxhbnk+KCk7XG5cbiAgcmVhZG9ubHkgdW5pdHNSaWdodCA9IGlucHV0PEFycmF5PGFueT4+KCk7XG4gIHJlYWRvbmx5IGNvbmZpZ1VuaXRSaWdodCA9IGlucHV0PElJbnB1dFZhbGlkVW5pdENvbmZpZywgSUlucHV0VmFsaWRVbml0Q29uZmlnIHwgdW5kZWZpbmVkPihcbiAgICB7XG4gICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgIGZpZWxkTGFiZWw6ICdsYWJlbCcsXG4gICAgfSxcbiAgICB7XG4gICAgICB0cmFuc2Zvcm06ICh2YWx1ZSkgPT5cbiAgICAgICAgdmFsdWUgPz8ge1xuICAgICAgICAgIGZpZWxkS2V5OiAnaWQnLFxuICAgICAgICAgIGZpZWxkTGFiZWw6ICdsYWJlbCcsXG4gICAgICAgIH0sXG4gICAgfVxuICApO1xuICByZWFkb25seSBrZXlTZWxlY3RlZFVuaXRSaWdodCA9IGlucHV0PGFueT4oKTtcblxuICByZWFkb25seSBtYXhWYWx1ZU51bWJlciA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgbWluVmFsdWVOdW1iZXIgPSBpbnB1dDxudW1iZXI+KCk7XG5cbiAgcmVhZG9ubHkgaWdub3JlQ29udGVudExlZnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDb250ZW50UmlnaHQgPSBpbnB1dDxib29sZWFuPigpO1xuICAvKiogQ8SDbiBhbGlnbi1pdGVtcy1iYXNlbGluZSDigJQgZMO5bmcga2hpIGPhuqduIGPEg24gaW5wdXQgdGjhurNuZyBow6BuZyB24bubaSBjw6FjIHBo4bqnbiB04butIGtow6FjIGTDuSBjw7MgdmFsaWRhdGUgKi9cbiAgcmVhZG9ubHkgaXNCYXNlbGluZVN0eWxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvKiogTeG6t2MgxJHhu4tuaCBraGkgdGVzdCBwYXR0ZXJuIHRy4bqjIHbhu4EgZ2nDoSB0cuG7iyBi4bqxbmcgZmFsc2Ugc+G6vSBiw6FvIGzhu5dpICovXG4gIHJlYWRvbmx5IHZhbHVlUGF0dGVyblNob3dFcnJvciA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgdmFsaWRQYXR0ZXJuID0gaW5wdXQ8QXJyYXk8SVZhbGlkUGF0dGVybj4+KCk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJVmFsaWRSZXF1aXJlZD4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNaW5MZW5ndGggPSBpbnB1dDxJVmFsaWRMZW5ndGg+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWluVmFsdWUgPSBpbnB1dDxJTWVzc2FnZVRyYW5zbGF0ZT4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNYXhWYWx1ZSA9IGlucHV0PElNZXNzYWdlVHJhbnNsYXRlPigpO1xuICByZWFkb25seSB2YWxpZE1heExlbmd0aCA9IGlucHV0PElNZXNzYWdlVHJhbnNsYXRlPigpO1xuICByZWFkb25seSBmdW5jdGlvblZhbGlkID0gaW5wdXQ8VFlQRV9GVU5DVElPTl9JTlBVVF9WQUxJRD4oKTtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoID0gaW5wdXQ8bnVtYmVyPigpO1xuICAvKiogSGnhu4NuIHRo4buLIG1lc3NhZ2UgbOG7l2kgYuG6r3QgxJHhuqd1IHThu6sgduG7iyB0csOtIMO0IGlucHV0IHRoYXkgdsOsIHThu6sgdGVtcGxhdGUgdHLDoWkgKi9cbiAgcmVhZG9ubHkgcG9zaXRpb25NZXNzYWdlRXJyb3JTdGFydElucHV0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSByZXNpemUgPSBpbnB1dDxUWVBFX0lOUFVUX1JFU0laRV9NT0RFPigpO1xuICByZWFkb25seSB0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oKTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVSaWdodEJvdHRvbUlucHV0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSBvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGF1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG1heExlbmd0aE51bWJlckNvdW50ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBjbGFzc01lc3NhZ2VFcnJvckluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlVW5pdFJpZ2h0Q2xhc3NSZWFkT25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIC8qKiBDdXN0b20gcGFkZGluZy1yaWdodCBraGkgY291bnQga2jDtG5nIHThu7EgdMOtbmggxJHGsOG7o2MgKCM1MjE4NSkgKi9cbiAgcmVhZG9ubHkgcGFkZGluZ1JpZ2h0Q3VzdG9tU3BlY2lmaWMgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGZvY3VzVGltZU91dCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgZGVib3VuY2VUaW1lVmFsaWRhdGUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMCB9KTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRWYWx1ZUNoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdCA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRJY29uTGVmdCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEljb25SaWdodCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dENsaWNrQnV0dG9uTGFiZWwgPSBvdXRwdXQ8SUJ1dHRvbj4oKTtcbiAgcmVhZG9ubHkgb3V0U3dpdGNoRXZlbnRMYWJlbCA9IG91dHB1dDxJU3dpdGNoRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dExhYmVsUmlnaHRDbGljayA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRFbnRlcklucHV0RXZlbnQgPSBvdXRwdXQ8SUV2ZW50PigpO1xuICByZWFkb25seSBvdXRIZWlnaHRBcmVhQ2hhbmdlID0gb3V0cHV0PHsgaXNDaGFuZ2U6IGJvb2xlYW4gfT4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXRGb2N1c0FuZEJsdXIgPSBvdXRwdXQ8SUZvY3VzQW5kQmx1ckV2ZW50PigpO1xuICByZWFkb25seSBvdXRDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICByZWFkb25seSBlbGVtZW50TGVmdFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZWxlbWVudExlZnRSZWYnKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YUl0ZW0gPSBnZXQodGhpcy5pdGVtKCksICcnKTtcbiAgICAgIGlmICghZGF0YUl0ZW0gfHwgdHlwZW9mIGRhdGFJdGVtICE9PSAnb2JqZWN0JyB8fCBkYXRhSXRlbSBpbnN0YW5jZW9mIEFycmF5IHx8IChkYXRhSXRlbSBpbnN0YW5jZW9mIE1hcCAmJiBkYXRhSXRlbSBpbnN0YW5jZW9mIFdlYWtNYXApIHx8IGRhdGFJdGVtIGluc3RhbmNlb2YgU2V0IHx8IGRhdGFJdGVtIGluc3RhbmNlb2YgV2Vha1NldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlLnNldChnZXQodGhpcy5pdGVtKCksIHRoaXMuZmllbGROYW1lQmluZCgpKSk7XG4gICAgICAgIHRoaXMuZ2V0UmVjdExlZnQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZWZmZWN0Q2xlYXJVcEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGxlZEVmZmVjdC5zZXQodHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFyVXBFZmZlY3QuZGVzdHJveSgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQodGhpcy5GdW5jdGlvbnNDb250cm9sKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrSXNWYWxpZDogdGhpcy5jaGVja0lzVmFsaWQuYmluZCh0aGlzKSxcbiAgICAgIHNldE1lc3NhZ2VFcnJvcjogdGhpcy5zZXRNZXNzYWdlRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgIGJsdXI6IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/LmJsdXIoKSxcbiAgICAgIGZvY3VzOiBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5mb2N1cygpLFxuICAgICAgaW5zZXJ0Q29udGVudDogYXN5bmMgKGRhdGE6IHN0cmluZyB8IG51bWJlcikgPT4gYXdhaXQgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dD8uaW5zZXJ0Q29udGVudChkYXRhKSxcbiAgICAgIHJlc2V0VmFsdWU6IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/LnJlc2V0VmFsdWUoKSxcbiAgICAgIGN1cnJlbnRTdGF0ZUlzVmFsaWQ6IHRoaXMuY3VycmVudFN0YXRlSXNWYWxpZC5iaW5kKHRoaXMpLFxuICAgICAgZ2V0RWxlbWVudFZhbHVlOiB0aGlzLmdldEVsZW1lbnRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uOiBhc3luYyAodmFsdWUpID0+IGF3YWl0IHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/LmNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbih2YWx1ZSksXG4gICAgICBzZWxlY3RBbGxDb250ZW50OiBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5zZWxlY3RBbGxDb250ZW50KCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3VycmVudFN0YXRlSXNWYWxpZCgpIHtcbiAgICByZXR1cm4gIXRoaXMuc2luZ2xlRXJyb3IoKS5tZXNzYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbGVtZW50VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/LmdldEVsZW1lbnRWYWx1ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm91dFNlbGVjdC5lbWl0KHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlclZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBzZXQodGhpcy5pdGVtKCksIHRoaXMuZmllbGROYW1lQmluZCgpLCB2YWx1ZSk7XG5cbiAgICAvLyBTdXBwb3J0IHRyxrDhu51uZyBo4bujcCBjYWxsIEFQSSBob+G6t2MgdmFsaWRhdGUgY+G6p24geOG7rSBsw70gY2hlY2sgdOG7kW4gbmhp4buBdSB0aOG7nWkgZ2lhbiB0aMOsIGPhuqduIGRlYm91bmQgdGltZSDEkeG7gyB0csOhbmggY2FsbCBsacOqbiB04bulY1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyVmFsdWVDaGFuZ2UoKSk7XG4gICAgdGhpcy50aW1lclZhbHVlQ2hhbmdlLnNldChcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnZhbGlkYXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5vdXRWYWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgIH0sIHRoaXMuZGVib3VuY2VUaW1lVmFsaWRhdGUoKSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudEljb25MZWZ0KGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5vdXRJY29uTGVmdC5lbWl0KGV2ZW50TmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50SWNvblJpZ2h0KGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5vdXRJY29uUmlnaHQuZW1pdChldmVudE5hbWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0J1dHRvbkxhYmVsKGJ1dHRvbjogSUJ1dHRvbikge1xuICAgIHRoaXMub3V0Q2xpY2tCdXR0b25MYWJlbC5lbWl0KGJ1dHRvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclN3aXRjaExhYmVsKHRvZ2dsZUV2ZW50OiBJU3dpdGNoRXZlbnQpIHtcbiAgICB0aGlzLm91dFN3aXRjaEV2ZW50TGFiZWwuZW1pdCh0b2dnbGVFdmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50TGFiZWxSaWdodExhYmVsKCkge1xuICAgIHRoaXMub3V0TGFiZWxSaWdodENsaWNrLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckVudGVySW5wdXQoZTogSUV2ZW50KSB7XG4gICAgdGhpcy5vdXRFbnRlcklucHV0RXZlbnQuZW1pdChlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySGVpZ2h0QXJlYUNoYW5nZShldmVudDogeyBpc0NoYW5nZTogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5vdXRIZWlnaHRBcmVhQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5nZXRSZWN0TGVmdCgpO1xuICAgIHRoaXMuc2luZ2xlRXJyb3IudXBkYXRlKChvYmopID0+ICh7IC4uLm9iaiwgbWVzc2FnZTogdW5kZWZpbmVkIH0pKTtcbiAgICBpZiAodGhpcy52YWxpZFJlcXVpcmVkKCkgJiYgdGhpcy52YWxpZFJlcXVpcmVkKCk/LmlzUmVxdWlyZWQgJiYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICF2YWx1ZS50cmltKCkpIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmIGlzTmlsKHZhbHVlKSkpKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6IHRoaXMudmFsaWRSZXF1aXJlZCgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQsIGludGVycG9sYXRlUGFyYW1zOiB0aGlzLnZhbGlkUmVxdWlyZWQoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwge30gfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy52YWxpZE1pbkxlbmd0aCgpPy5tZXNzYWdlICYmICh0aGlzLnZhbGlkTWluTGVuZ3RoKCk/Lmxlbmd0aCB8fCAwKSA+IHZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoeyBtZXNzYWdlOiB0aGlzLnZhbGlkTWluTGVuZ3RoKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9NSU5fTEVOR1RILCBpbnRlcnBvbGF0ZVBhcmFtczogdGhpcy52YWxpZE1pbkxlbmd0aCgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7fSB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB0aGlzLnZhbGlkUGF0dGVybigpPy5sZW5ndGggJiYgdmFsdWU/LnRyaW0oKSkge1xuICAgICAgZm9yIChjb25zdCB2YWxpZCBvZiB0aGlzLnZhbGlkUGF0dGVybigpIHx8IFtdKSB7XG4gICAgICAgIGlmICghdmFsaWQucGF0dGVybikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBgJHt2YWxpZC5wYXR0ZXJufWA7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZTbGFzaCA9IHBhdHRlcm4ubGFzdEluZGV4T2YoJy8nKTtcblxuICAgICAgICBpZiAoIWluZGV4T2ZTbGFzaCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdHRlcm5TdHIgPSBwYXR0ZXJuLnN1YnN0cmluZygxLCBpbmRleE9mU2xhc2gpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuRmxhZyA9IHBhdHRlcm4uc3Vic3RyaW5nKGluZGV4T2ZTbGFzaCArIDEsIHBhdHRlcm4ubGVuZ3RoKTtcblxuICAgICAgICBpZiAobmV3IFJlZ0V4cChwYXR0ZXJuU3RyLCBwYXR0ZXJuRmxhZykudGVzdCh2YWx1ZSkgPT09ICh2YWxpZC52YWx1ZVBhdHRlcm5TaG93RXJyb3IgPz8gdGhpcy52YWx1ZVBhdHRlcm5TaG93RXJyb3IoKSkpIHtcbiAgICAgICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6IHZhbGlkLm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9QQVRURU5fVkFMSUQsIGludGVycG9sYXRlUGFyYW1zOiB2YWxpZC5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7fSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudmFsaWRNaW5WYWx1ZSgpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHRoaXMubWluVmFsdWVOdW1iZXIoKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPCAodGhpcy5taW5WYWx1ZU51bWJlcigpID8/IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKSkge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoeyBtZXNzYWdlOiB0aGlzLnZhbGlkTWluVmFsdWUoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01JTl9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRNaW5WYWx1ZSgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7IHZhbHVlOiB0aGlzLm1pblZhbHVlTnVtYmVyKCkgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKHRoaXMuaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlKCkgfHwgdGhpcy52YWxpZE1heFZhbHVlKCk/Lm1lc3NhZ2UpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHRoaXMubWF4VmFsdWVOdW1iZXIoKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPiAodGhpcy5tYXhWYWx1ZU51bWJlcigpID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoeyBtZXNzYWdlOiB0aGlzLnZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRNYXhWYWx1ZSgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7IHZhbHVlOiB0aGlzLm1heFZhbHVlTnVtYmVyKCkgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBtYXhNaW5WYWx1ZSA9IChCaWdJbnQoOTIyKSAqIEJpZ0ludCgxMCkgKiogQmlnSW50KDE4KSkgLyBCaWdJbnQoMTAwKTtcbiAgICAgIGNvbnN0IFtpbnQsIGRlY2ltYWxdID0gdmFsdWUuc3BsaXQoJy4nKTtcbiAgICAgIGxldCB2YWx1ZURpdmlkZWQgPSBCaWdJbnQoMSk7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgKGRlY2ltYWw/Lmxlbmd0aCB8fCAwKTsgaW5kZXgrKykge1xuICAgICAgICB2YWx1ZURpdmlkZWQgKj0gQmlnSW50KDEwKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWVDb21wYXJlID0gQmlnSW50KGAke2ludH0ke2RlY2ltYWwgfHwgJyd9YCkgKiAoQmlnSW50KDEwMDAwKSAvIHZhbHVlRGl2aWRlZCk7XG5cbiAgICAgIGlmICh2YWx1ZUNvbXBhcmUgPCAtbWF4TWluVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoe1xuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudmFsaWRNaW5WYWx1ZSgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUlOX1ZBTElELFxuICAgICAgICAgIGludGVycG9sYXRlUGFyYW1zOiB0aGlzLnZhbGlkTWluVmFsdWUoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwgeyB2YWx1ZTogdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGAtJHttYXhNaW5WYWx1ZSAvIEJpZ0ludCgxMDAwMCl9YCwgdHJ1ZSwgNCwgdHJ1ZSwgdHJ1ZSkgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlQ29tcGFyZSA+IG1heE1pblZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHtcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLnZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCxcbiAgICAgICAgICBpbnRlcnBvbGF0ZVBhcmFtczogdGhpcy52YWxpZE1heFZhbHVlKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHsgdmFsdWU6IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShgJHttYXhNaW5WYWx1ZSAvIEJpZ0ludCgxMDAwMCl9YCwgdHJ1ZSwgNCwgdHJ1ZSwgdHJ1ZSkgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXhMZW5ndGggJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAodGhpcy5tYXhMZW5ndGgoKSB8fCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogdGhpcy52YWxpZE1heExlbmd0aCgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUFYX0xFTkdUSCwgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRNYXhMZW5ndGgoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwgeyBudW1iZXI6IHRoaXMubWF4TGVuZ3RoKCkgfSB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5mdW5jdGlvblZhbGlkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHRoaXMuZnVuY3Rpb25WYWxpZCgpPy4odmFsdWUpO1xuXG4gICAgaWYgKHJlc3VsdD8udGhlbikge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoYXdhaXQgcmVzdWx0KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNpbmdsZUVycm9yLnNldChyZXN1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0lzVmFsaWQoKSB7XG4gICAgaWYgKHRoaXMuaXRlbSgpICYmICh0aGlzLnJlYWRvbmx5KCkgfHwgdGhpcy5kaXNhYmxlKCkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJWYWx1ZUNoYW5nZSgpKTtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKGdldCh0aGlzLml0ZW0sIHRoaXMuZmllbGROYW1lQmluZCgpKSk7XG5cbiAgICByZXR1cm4gIXRoaXMuc2luZ2xlRXJyb3IoKS5tZXNzYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRNZXNzYWdlRXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zaW5nbGVFcnJvci51cGRhdGUoKG9iaikgPT4gKHsgLi4ub2JqLCBtZXNzYWdlIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ29udHJvbEZ1bmN0aW9uSW5wdXQoZXZlbnQ6IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dCA9IGV2ZW50O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGb2N1c0FuZEJsdXIoZXZlbnQ6IElGb2N1c0FuZEJsdXJFdmVudCkge1xuICAgIHRoaXMub3V0Rm9jdXNBbmRCbHVyLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWN0TGVmdCgpIHtcbiAgICBpZiAoIXRoaXMucmVjdExlZnQoKSB8fCB0aGlzLnBvc2l0aW9uTWVzc2FnZUVycm9yU3RhcnRJbnB1dCgpKSB7XG4gICAgICB0aGlzLnRpbWVyLnNldChcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWN0TGVmdC5zZXQodGhpcy5lbGVtZW50TGVmdFJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duKCkge1xuICAgIHRoaXMub3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bi5lbWl0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcigpKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lclZhbHVlQ2hhbmdlKCkpO1xuICB9XG59XG4iLCJAaWYgKGZpZWxkTmFtZUJpbmQoKSAmJiBpdGVtKCk7IGFzIGl0ZW0pIHtcbiAgQGlmIChsYWJlbENvbmZpZygpOyBhcyBsYWJlbENvbmZpZykge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWxcbiAgICAgIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICAgIFtsYWJlbExlZnRdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0XCJcbiAgICAgIFtsYWJlbExlZnRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWRcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbkNsYXNzXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uQ2xhc3NcIlxuICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImRpc2FibGUoKSB8fCBsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgICAgW2J1dHRvbnNSaWdodF09XCJsYWJlbENvbmZpZy5idXR0b25zUmlnaHRcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwiZGlzYWJsZSgpIHx8IGxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgICAgW2hhc1RvZ2dsZV09XCJsYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJsYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgW3RvZ2dsZURpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGxhYmVsQ29uZmlnLnRvZ2dsZURpc2FibGVcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwidmFsdWUoKT8ubGVuZ3RoXCJcbiAgICAgIChvdXRDbGlja0J1dHRvbik9XCJoYW5kbGVyQ2xpY2tCdXR0b25MYWJlbCgkZXZlbnQpXCJcbiAgICAgIChvdXRTd2l0Y2hFdmVudCk9XCJoYW5kbGVyU3dpdGNoTGFiZWwoJGV2ZW50KVwiXG4gICAgICAob3V0TGFiZWxSaWdodENsaWNrKT1cImhhbmRsZXJFdmVudExhYmVsUmlnaHRMYWJlbCgpXCIgLz5cbiAgfVxuICA8ZGl2XG4gICAgW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0LXZhbGlkIHctZnVsbCAnICsgKGNsYXNzSW5jbHVkZSgpID8/ICcnKVwiXG4gICAgW2NsYXNzLml0ZW1zLWJhc2VsaW5lXT1cImlzQmFzZWxpbmVTdHlsZSgpXCI+XG4gICAgQGlmICghaWdub3JlQ29udGVudExlZnQoKSkge1xuICAgICAgPGRpdlxuICAgICAgICAjZWxlbWVudExlZnRSZWZcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWlucHV0LXZhbGlkLWxlZnRcIlxuICAgICAgICBbY2xhc3MuaXRlbXMtYmFzZWxpbmVdPVwiaXNCYXNlbGluZVN0eWxlKClcIj5cbiAgICAgICAgQGlmICh0eXBlQ29tcG9uZW50U2VsZWN0SXRlbSgpOyBhcyB0eXBlQ29tcG9uZW50U2VsZWN0SXRlbSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1bOHB4XVwiPlxuICAgICAgICAgICAgQGlmICh0eXBlQ29tcG9uZW50U2VsZWN0SXRlbSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZVxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInZhbHVlQ29tcG9uZW50U2VsZWN0SXRlbSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgZGlzYWJsZUNvbXBvbmVudFNlbGVjdEl0ZW0oKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyU2VsZWN0KCRldmVudC5jaGVja2VkKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHR5cGVDb21wb25lbnRTZWxlY3RJdGVtID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcmFkaW8tc2luZ2xlXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJ2YWx1ZUNvbXBvbmVudFNlbGVjdEl0ZW0oKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGRpc2FibGVDb21wb25lbnRTZWxlY3RJdGVtKCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlclNlbGVjdCgkZXZlbnQuYWN0aXZlKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIubGlicy11aS1pbnB1dC12YWxpZC1sZWZ0LWNvbnRlbnQtY3VzdG9tXCIgLz5cbiAgICAgICAgQGZvciAodW5pdCBvZiB1bml0c0xlZnQoKTsgdHJhY2sgdW5pdCkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pbnB1dC12YWxpZC11bml0IGxpYnMtdWktaW5wdXQtdmFsaWQtdW5pdC1sZWZ0ICFyb3VuZGVkLXRyLW5vbmUgIXJvdW5kZWQtYnItbm9uZSBsaWJzLXVpLWZvbnQtaDVyIHt7IGNvbmZpZ1VuaXRMZWZ0KCkuY2xhc3NJbmNsdWRlIHx8ICcnIH19XCJcbiAgICAgICAgICAgIFtjbGFzcy4hZmxleF09XCJ1bml0W2NvbmZpZ1VuaXRMZWZ0KCkuZmllbGRLZXldID09PSBrZXlTZWxlY3RlZFVuaXRMZWZ0KClcIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKSB8fCBmYWxzZVwiPlxuICAgICAgICAgICAgQGxldCBjb25zdEh0bWxMYWJlbCA9IHVuaXRbY29uZmlnVW5pdExlZnQoKS5maWVsZExhYmVsIHx8ICdsYWJlbCddIHx8ICcgJztcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwieyBtYXhXaWR0aDogMjUwLCBkaXJlY3Rpb246ICdib3R0b20nLCB6SW5kZXg6IHpJbmRleFBvcG92ZXJDb250ZW50KCkgfVwiXG4gICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiY29uc3RIdG1sTGFiZWwgfCB0cmFuc2xhdGVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChjYWxsZWRFZmZlY3QoKSA9PT0gdHJ1ZSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXRcbiAgICAgICAgW3RhZ0lucHV0XT1cInRhZ0lucHV0KClcIlxuICAgICAgICBbZGF0YVR5cGVdPVwiZGF0YVR5cGUoKSB8fCAnc3RyaW5nJ1wiXG4gICAgICAgIFt0eXBlSW5wdXRdPVwidHlwZUlucHV0KClcIlxuICAgICAgICBbbW9kZUlucHV0XT1cIm1vZGVJbnB1dCgpXCJcbiAgICAgICAgW2NsYXNzLnctZnVsbF09XCIhaWdub3JlV2lkdGhJbnB1dDEwMCgpXCJcbiAgICAgICAgW2lnbm9yZVdpZHRoSW5wdXQxMDBdPVwiaWdub3JlV2lkdGhJbnB1dDEwMCgpXCJcbiAgICAgICAgW3RleHRBcmVhRW50ZXJOb3ROZXdMaW5lXT1cInRleHRBcmVhRW50ZXJOb3ROZXdMaW5lKCkgfHwgZmFsc2VcIlxuICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIihjbGFzc0luY2x1ZGVJbnB1dCgpIHx8ICcnKSArICh1bml0c0xlZnQoKSAmJiB1bml0c0xlZnQoKT8ubGVuZ3RoID8gJyAhcm91bmRlZC10bC1ub25lICFyb3VuZGVkLWJsLW5vbmUnIDogJycpICsgKHVuaXRzUmlnaHQoKT8ubGVuZ3RoID8gJyAhcm91bmRlZC10ci1ub25lICFyb3VuZGVkLWJyLW5vbmUnIDogJycpXCJcbiAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm1heFZhbHVlTnVtYmVyKClcIlxuICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwibWluVmFsdWVOdW1iZXIoKVwiXG4gICAgICAgIFtmaXhlZEZsb2F0XT1cImZpeGVkRmxvYXQoKSA/PyAxXCJcbiAgICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpXCJcbiAgICAgICAgW29ubHlBY2NlcHROZWdhdGl2ZVZhbHVlXT1cIm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKClcIlxuICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwidmFsdWVVcERvd25OdW1iZXIoKVwiXG4gICAgICAgIFttYXhMZW5ndGhdPVwibWF4TGVuZ3RoKClcIlxuICAgICAgICBbc2hvd0NvdW50XT1cInNob3dDb3VudCgpXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICBbYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50XT1cImF1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludCgpXCJcbiAgICAgICAgW25vQm9yZGVyXT1cIm5vQm9yZGVyKClcIlxuICAgICAgICBbYmFja2dyb3VuZE5vbmVdPVwiYmFja2dyb3VuZE5vbmUoKVwiXG4gICAgICAgIFt1c2VDb2xvck1vZGVFeGlzdF09XCJ1c2VDb2xvck1vZGVFeGlzdCgpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKCkgfHwgJydcIlxuICAgICAgICBba2VlcFBsYWNlaG9sZGVyT25seV09XCJrZWVwUGxhY2Vob2xkZXJPbmx5KClcIlxuICAgICAgICBbYXV0b1JlbW92ZUVtb2ppXT1cImF1dG9SZW1vdmVFbW9qaSgpXCJcbiAgICAgICAgW2RlZmF1bHRIZWlnaHRdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgICAgW21heEhlaWdodFRleHRBcmVhXT1cIm1heEhlaWdodFRleHRBcmVhKCkgfHwgMjUwXCJcbiAgICAgICAgW21pbkhlaWdodFRleHRBcmVhXT1cIm1pbkhlaWdodFRleHRBcmVhKClcIlxuICAgICAgICBbYm9yZGVyRXJyb3JdPVwiYm9yZGVyRXJyb3IoKSB8fCAoISFzaW5nbGVFcnJvcigpLm1lc3NhZ2UgJiYgIWlnbm9yZVNob3dFcnJvcigpKVwiXG4gICAgICAgIFtpY29uTGVmdENsYXNzXT1cImljb25MZWZ0Q2xhc3MoKVwiXG4gICAgICAgIFtwb3BvdmVyQ29udGVudEljb25MZWZ0XT1cInBvcG92ZXJDb250ZW50SWNvbkxlZnQoKVwiXG4gICAgICAgIFtwb3BvdmVyQ29udGVudEljb25SaWdodF09XCJwb3BvdmVyQ29udGVudEljb25SaWdodCgpXCJcbiAgICAgICAgW2ljb25SaWdodENsYXNzXT1cImljb25SaWdodENsYXNzKClcIlxuICAgICAgICBbekluZGV4UG9wb3ZlckNvbnRlbnRdPVwiekluZGV4UG9wb3ZlckNvbnRlbnQoKVwiXG4gICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cImVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIoKVwiXG4gICAgICAgIFtpZ25vcmVCbG9ja0lucHV0TWF4VmFsdWVdPVwiISFpZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUoKSA/IGlnbm9yZUJsb2NrSW5wdXRNYXhWYWx1ZSgpIDogdmFsaWRNYXhWYWx1ZSgpPy5tZXNzYWdlID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICAgICAgWyh2YWx1ZSldPVwidmFsdWVcIlxuICAgICAgICBbY2xhc3NDb250YWluZXJJbnB1dF09XCJjbGFzc0NvbnRhaW5lcklucHV0KClcIlxuICAgICAgICBbcmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZF09XCJyZXNldEF1dG9Db21wbGV0ZVBhc3N3b3JkKClcIlxuICAgICAgICBbcmVzaXplXT1cInJlc2l6ZSgpXCJcbiAgICAgICAgW2NsYXNzQ29udGFpbmVyQm90dG9tSW5wdXRdPVwiY2xhc3NDb250YWluZXJCb3R0b21JbnB1dCgpXCJcbiAgICAgICAgW3RlbXBsYXRlTGVmdEJvdHRvbUlucHV0XT1cInRlbXBsYXRlTGVmdEJvdHRvbUlucHV0KClcIlxuICAgICAgICBbdGVtcGxhdGVSaWdodEJvdHRvbUlucHV0XT1cInRlbXBsYXRlUmlnaHRCb3R0b21JbnB1dCgpXCJcbiAgICAgICAgW21heExlbmd0aE51bWJlckNvdW50XT1cIm1heExlbmd0aE51bWJlckNvdW50KClcIlxuICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwiaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKVwiXG4gICAgICAgIFtmb2N1c1RpbWVPdXRdPVwiZm9jdXNUaW1lT3V0KClcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAob3V0RW50ZXJFdmVudCk9XCJoYW5kbGVyRW50ZXJJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgKG91dEljb25MZWZ0KT1cImhhbmRsZXJFdmVudEljb25MZWZ0KCRldmVudClcIlxuICAgICAgICAob3V0SWNvblJpZ2h0KT1cImhhbmRsZXJFdmVudEljb25SaWdodCgkZXZlbnQpXCJcbiAgICAgICAgKG91dEhlaWdodEFyZWFDaGFuZ2UpPVwiaGFuZGxlckhlaWdodEFyZWFDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJDb250cm9sRnVuY3Rpb25JbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgKG91dEZvY3VzQW5kQmx1ckV2ZW50KT1cImhhbmRsZXJGb2N1c0FuZEJsdXIoJGV2ZW50KVwiXG4gICAgICAgIChvdXRDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duKT1cImhhbmRsZXJDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duKClcIiAvPlxuICAgIH1cbiAgICBAaWYgKCFpZ25vcmVDb250ZW50UmlnaHQoKSkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtcmlnaHRcIlxuICAgICAgICBbY2xhc3MuaXRlbXMtYmFzZWxpbmVdPVwiaXNCYXNlbGluZVN0eWxlKClcIj5cbiAgICAgICAgQGZvciAodW5pdCBvZiB1bml0c1JpZ2h0KCk7IHRyYWNrIHVuaXQpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtdW5pdCBsaWJzLXVpLWlucHV0LXZhbGlkLXVuaXQtcmlnaHQgIXJvdW5kZWQtdGwtbm9uZSAhcm91bmRlZC1ibC1ub25lIGxpYnMtdWktZm9udC1oNXIge3sgY29uZmlnVW5pdFJpZ2h0KCkuY2xhc3NJbmNsdWRlIHx8ICdsaWJzLXVpLWJvcmRlci1nZW5lcmFsJyB9fVwiXG4gICAgICAgICAgICBbY2xhc3MuIWZsZXhdPVwidW5pdFtjb25maWdVbml0UmlnaHQoKS5maWVsZEtleV0gPT09IGtleVNlbGVjdGVkVW5pdFJpZ2h0KClcIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwiIWlnbm9yZVVuaXRSaWdodENsYXNzUmVhZE9ubHkoKSAmJiAocmVhZG9ubHkoKSB8fCBmYWxzZSlcIj5cbiAgICAgICAgICAgIEBsZXQgY29uc3RIdG1sTGFiZWwgPSB1bml0W2NvbmZpZ1VuaXRSaWdodCgpLmZpZWxkTGFiZWwgfHwgJ2xhYmVsJ10gfHwgJyAnO1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IG1heFdpZHRoOiAyNTAsIGRpcmVjdGlvbjogJ2JvdHRvbScsIHpJbmRleDogekluZGV4UG9wb3ZlckNvbnRlbnQoKSB9XCJcbiAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJjb25zdEh0bWxMYWJlbCB8IHRyYW5zbGF0ZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmxpYnMtdWktaW5wdXQtdmFsaWQtcmlnaHQtY29udGVudC1jdXN0b21cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICBAaWYgKCEhc2luZ2xlRXJyb3IoKS5tZXNzYWdlICYmICFpZ25vcmVTaG93RXJyb3IoKSAmJiAhaWdub3JlU2hvd01lc3NhZ2VFcnJvcigpKSB7XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtZXJyb3Ige3sgY2xhc3NNZXNzYWdlRXJyb3JJbmNsdWRlKCkgfHwgJycgfX1cIj5cbiAgICAgIEBsZXQgY29uc3RIdG1sTWVzc2FnZSA9IHNpbmdsZUVycm9yKCkubWVzc2FnZSB8fCAnICc7XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImxpYnMtdWktbWVzc2FnZS1lcnJvciBsaWJzLXVpLWZvbnQtaDdyIGxpYnMtdWktdGV4dC1lcnJvclwiXG4gICAgICAgIFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cInJlY3RMZWZ0KCk/LndpZHRoXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJjb25zdEh0bWxNZXNzYWdlIHwgdHJhbnNsYXRlOiBzaW5nbGVFcnJvcigpLmludGVycG9sYXRlUGFyYW1zXCI+PC9zcGFuPlxuICAgIDwvZGl2PlxuICB9XG59XG4iXX0=
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvdmFsaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvdmFsaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQThDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzSyxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RixPQUFPLEVBQWtELG9DQUFvQyxFQUE2RixNQUFNLGtDQUFrQyxDQUFDO0FBQ25PLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSwwQkFBMEIsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hPLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBWXRELE1BQU0sT0FBTyxvQ0FBb0M7SUFDL0MsbUJBQW1CO0lBQ1QsS0FBSyxHQUFHLE1BQU0sQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUMxQixXQUFXLEdBQUcsTUFBTSxDQUFv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QUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFUyxnQ0FBZ0M7UUFDeEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEMsQ0FBQzt3R0FuV1Usb0NBQW9DOzRGQUFwQyxvQ0FBb0MseWpZQ3ZCakQsZ3lRQStKQSw0L0JEMUlZLGVBQWUsNEZBQUUsb0NBQW9DLHdoREFBRSw4QkFBOEIsNHFCQUFFLHVDQUF1QywwcEJBQUUsb0NBQW9DLDJoQkFBRSxnQ0FBZ0M7OzRGQUVyTSxvQ0FBb0M7a0JBVGhELFNBQVM7K0JBRUUsaUNBQWlDLGNBRy9CLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGVBQWUsRUFBRSxvQ0FBb0MsRUFBRSw4QkFBOEIsRUFBRSx1Q0FBdUMsRUFBRSxvQ0FBb0MsRUFBRSxnQ0FBZ0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgZWZmZWN0LCBpbnB1dCwgbW9kZWwsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUJ1dHRvbiB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0NoZWNrYm94U2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUnO1xuaW1wb3J0IHsgSUZvY3VzQW5kQmx1ckV2ZW50LCBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50LCBUWVBFX0RBVEFfVFlQRV9JTlBVVCwgVFlQRV9JTlBVVCwgVFlQRV9JTlBVVF9SRVNJWkVfTU9ERSwgVFlQRV9NT0RFX0lOUFVULCBUWVBFX1RBR19JTlBVVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0JztcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUmFkaW9TaW5nbGVDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXJhZGlvLXNpbmdsZSc7XG5pbXBvcnQgeyBJU3dpdGNoRXZlbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXN3aXRjaCc7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0LCBJRXZlbnQsIElNZXNzYWdlVHJhbnNsYXRlLCBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCwgRVJST1JfTUVTU0FHRV9NQVhfTEVOR1RILCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgRVJST1JfTUVTU0FHRV9NSU5fTEVOR1RILCBFUlJPUl9NRVNTQUdFX01JTl9WQUxJRCwgRVJST1JfTUVTU0FHRV9QQVRURU5fVkFMSUQsIGdldCwgaXNOaWwsIHNldCwgdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElJbnB1dFZhbGlkVW5pdENvbmZpZywgSVZhbGlkTGVuZ3RoLCBJVmFsaWRQYXR0ZXJuLCBJVmFsaWRSZXF1aXJlZCwgVFlQRV9GVU5DVElPTl9JTlBVVF9WQUxJRCB9IGZyb20gJy4vaW50ZXJmYWNlcy92YWxpZC5pbnRlcmZhY2UnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi92YWxpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZhbGlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0NoZWNrYm94U2luZ2xlQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzUmFkaW9TaW5nbGVDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCB2YWx1ZSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuICBwcm90ZWN0ZWQgc2luZ2xlRXJyb3IgPSBzaWduYWw8SU1lc3NhZ2VUcmFuc2xhdGU+KHsgbWVzc2FnZTogdW5kZWZpbmVkLCBpbnRlcnBvbGF0ZVBhcmFtczogdW5kZWZpbmVkIH0pO1xuICBwcm90ZWN0ZWQgcmVjdExlZnQgPSBzaWduYWw8SUJvdW5kaW5nQ2xpZW50UmVjdCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGNhbGxlZEVmZmVjdCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgdGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSB0aW1lclZhbHVlQ2hhbmdlPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgZnVuY3Rpb25Db250cm9sSW5wdXQ6IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgaXRlbSA9IG1vZGVsLnJlcXVpcmVkPFJlY29yZDxzdHJpbmcsIGFueT4+KHt9KTtcbiAgcmVhZG9ubHkgbGFiZWxDb25maWcgPSBpbnB1dDxJTGFiZWw+KCk7XG4gIHJlYWRvbmx5IGVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBmaWVsZE5hbWVCaW5kID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBzaG93Q291bnQgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IHR5cGVDb21wb25lbnRTZWxlY3RJdGVtID0gaW5wdXQ8J3JhZGlvJyB8ICdjaGVja2JveCcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IHZhbHVlQ29tcG9uZW50U2VsZWN0SXRlbSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGVDb21wb25lbnRTZWxlY3RJdGVtID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICByZWFkb25seSB0YWdJbnB1dCA9IGlucHV0PFRZUEVfVEFHX0lOUFVUPigpO1xuICByZWFkb25seSBkYXRhVHlwZSA9IGlucHV0PFRZUEVfREFUQV9UWVBFX0lOUFVUPigpO1xuICByZWFkb25seSB0eXBlSW5wdXQgPSBpbnB1dDxUWVBFX0lOUFVUPigpO1xuICByZWFkb25seSBtb2RlSW5wdXQgPSBpbnB1dDxUWVBFX01PREVfSU5QVVQ+KCk7XG4gIHJlYWRvbmx5IHJlc2V0QXV0b0NvbXBsZXRlUGFzc3dvcmQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB0ZXh0QXJlYUVudGVyTm90TmV3TGluZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGZpeGVkRmxvYXQgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGFjY2VwdE5lZ2F0aXZlVmFsdWUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB2YWx1ZVVwRG93bk51bWJlciA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgaWdub3JlV2lkdGhJbnB1dDEwMCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUlucHV0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjbGFzc0NvbnRhaW5lcklucHV0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBub0JvcmRlciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGJhY2tncm91bmROb25lID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdXNlQ29sb3JNb2RlRXhpc3QgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkga2VlcFBsYWNlaG9sZGVyT25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXJCb3R0b21JbnB1dCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYXV0b1JlbW92ZUVtb2ppID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGVmYXVsdEhlaWdodCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgbWF4SGVpZ2h0VGV4dEFyZWEgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1pbkhlaWdodFRleHRBcmVhID0gaW5wdXQ8bnVtYmVyPigpO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgS2jDtG5nIHPhu60gZOG7pW5nIGlucHV0IG7DoHkuIFPhu60gZOG7pW5nIHtAbGluayBpZ25vcmVTaG93TWVzc2FnZUVycm9yfSB0aGF5IHRo4bq/XG4gICAqIG7hur91IHbhuqtuIG114buRbiBoaeG7g24gdGjhu4sgYm9yZGVyIMSR4buPIG5oxrBuZyBraMO0bmcgc2hvdyBtZXNzYWdlIGzhu5dpLlxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlU2hvd0Vycm9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgLyoqIOG6qG4gbWVzc2FnZSBs4buXaSBuaMawbmcgduG6q24gaGnhu4NuIHRo4buLIGJvcmRlciDEkeG7jyBraGkgY8OzIGzhu5dpICovXG4gIHJlYWRvbmx5IGlnbm9yZVNob3dNZXNzYWdlRXJyb3IgPSBpbnB1dDxib29sZWFuPigpO1xuICAvKiogTHXDtG4gaGnhu4NuIHRo4buLIGJvcmRlciDEkeG7jyBi4bqldCBr4buDIHRy4bqhbmcgdGjDoWkgbOG7l2kgKi9cbiAgcmVhZG9ubHkgYm9yZGVyRXJyb3IgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IGljb25MZWZ0Q2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDb250ZW50SWNvbkxlZnQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGljb25SaWdodENsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBwb3BvdmVyQ29udGVudEljb25SaWdodCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgekluZGV4UG9wb3ZlckNvbnRlbnQgPSBpbnB1dDxudW1iZXI+KCk7XG5cbiAgcmVhZG9ubHkgdW5pdHNMZWZ0ID0gaW5wdXQ8QXJyYXk8YW55Pj4oKTtcbiAgcmVhZG9ubHkgY29uZmlnVW5pdExlZnQgPSBpbnB1dDxJSW5wdXRWYWxpZFVuaXRDb25maWc+KHtcbiAgICBmaWVsZEtleTogJ2lkJyxcbiAgICBmaWVsZExhYmVsOiAnbGFiZWwnLFxuICB9KTtcbiAgcmVhZG9ubHkga2V5U2VsZWN0ZWRVbml0TGVmdCA9IGlucHV0PGFueT4oKTtcblxuICByZWFkb25seSB1bml0c1JpZ2h0ID0gaW5wdXQ8QXJyYXk8YW55Pj4oKTtcbiAgcmVhZG9ubHkgY29uZmlnVW5pdFJpZ2h0ID0gaW5wdXQ8SUlucHV0VmFsaWRVbml0Q29uZmlnLCBJSW5wdXRWYWxpZFVuaXRDb25maWcgfCB1bmRlZmluZWQ+KFxuICAgIHtcbiAgICAgIGZpZWxkS2V5OiAnaWQnLFxuICAgICAgZmllbGRMYWJlbDogJ2xhYmVsJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRyYW5zZm9ybTogKHZhbHVlKSA9PlxuICAgICAgICB2YWx1ZSA/PyB7XG4gICAgICAgICAgZmllbGRLZXk6ICdpZCcsXG4gICAgICAgICAgZmllbGRMYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgfSxcbiAgICB9XG4gICk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkVW5pdFJpZ2h0ID0gaW5wdXQ8YW55PigpO1xuXG4gIHJlYWRvbmx5IG1heFZhbHVlTnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtaW5WYWx1ZU51bWJlciA9IGlucHV0PG51bWJlcj4oKTtcblxuICByZWFkb25seSBpZ25vcmVDb250ZW50TGVmdCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUNvbnRlbnRSaWdodCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIC8qKiBDxINuIGFsaWduLWl0ZW1zLWJhc2VsaW5lIOKAlCBkw7luZyBraGkgY+G6p24gY8SDbiBpbnB1dCB0aOG6s25nIGjDoG5nIHbhu5tpIGPDoWMgcGjhuqduIHThu60ga2jDoWMgZMO5IGPDsyB2YWxpZGF0ZSAqL1xuICByZWFkb25seSBpc0Jhc2VsaW5lU3R5bGUgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIC8qKiBN4bq3YyDEkeG7i25oIGtoaSB0ZXN0IHBhdHRlcm4gdHLhuqMgduG7gSBnacOhIHRy4buLIGLhurFuZyBmYWxzZSBz4bq9IGLDoW8gbOG7l2kgKi9cbiAgcmVhZG9ubHkgdmFsdWVQYXR0ZXJuU2hvd0Vycm9yID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSB2YWxpZFBhdHRlcm4gPSBpbnB1dDxBcnJheTxJVmFsaWRQYXR0ZXJuPj4oKTtcbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PElWYWxpZFJlcXVpcmVkPigpO1xuICByZWFkb25seSB2YWxpZE1pbkxlbmd0aCA9IGlucHV0PElWYWxpZExlbmd0aD4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNaW5WYWx1ZSA9IGlucHV0PElNZXNzYWdlVHJhbnNsYXRlPigpO1xuICByZWFkb25seSB2YWxpZE1heFZhbHVlID0gaW5wdXQ8SU1lc3NhZ2VUcmFuc2xhdGU+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWF4TGVuZ3RoID0gaW5wdXQ8SU1lc3NhZ2VUcmFuc2xhdGU+KCk7XG4gIHJlYWRvbmx5IGZ1bmN0aW9uVmFsaWQgPSBpbnB1dDxUWVBFX0ZVTkNUSU9OX0lOUFVUX1ZBTElEPigpO1xuICByZWFkb25seSBtYXhMZW5ndGggPSBpbnB1dDxudW1iZXI+KCk7XG4gIC8qKiBIaeG7g24gdGjhu4sgbWVzc2FnZSBs4buXaSBi4bqvdCDEkeG6p3UgdOG7qyB24buLIHRyw60gw7QgaW5wdXQgdGhheSB2w6wgdOG7qyB0ZW1wbGF0ZSB0csOhaSAqL1xuICByZWFkb25seSBwb3NpdGlvbk1lc3NhZ2VFcnJvclN0YXJ0SW5wdXQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHJlc2l6ZSA9IGlucHV0PFRZUEVfSU5QVVRfUkVTSVpFX01PREU+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlTGVmdEJvdHRvbUlucHV0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4+KCk7XG4gIHJlYWRvbmx5IG9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoTnVtYmVyQ291bnQgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGNsYXNzTWVzc2FnZUVycm9ySW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVVbml0UmlnaHRDbGFzc1JlYWRPbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgLyoqIEN1c3RvbSBwYWRkaW5nLXJpZ2h0IGtoaSBjb3VudCBraMO0bmcgdOG7sSB0w61uaCDEkcaw4bujYyAoIzUyMTg1KSAqL1xuICByZWFkb25seSBwYWRkaW5nUmlnaHRDdXN0b21TcGVjaWZpYyA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgZm9jdXNUaW1lT3V0ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBkZWJvdW5jZVRpbWVWYWxpZGF0ZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAwIH0pO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dFZhbHVlQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dEljb25MZWZ0ID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0SWNvblJpZ2h0ID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0Q2xpY2tCdXR0b25MYWJlbCA9IG91dHB1dDxJQnV0dG9uPigpO1xuICByZWFkb25seSBvdXRTd2l0Y2hFdmVudExhYmVsID0gb3V0cHV0PElTd2l0Y2hFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0TGFiZWxSaWdodENsaWNrID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dEVudGVySW5wdXRFdmVudCA9IG91dHB1dDxJRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEhlaWdodEFyZWFDaGFuZ2UgPSBvdXRwdXQ8eyBpc0NoYW5nZTogYm9vbGVhbiB9PigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEZvY3VzQW5kQmx1ciA9IG91dHB1dDxJRm9jdXNBbmRCbHVyRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVZhbHVlQnlCdXR0b25VcERvd24gPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHJlYWRvbmx5IGVsZW1lbnRMZWZ0UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdlbGVtZW50TGVmdFJlZicpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhSXRlbSA9IGdldCh0aGlzLml0ZW0oKSwgJycpO1xuICAgICAgaWYgKCFkYXRhSXRlbSB8fCB0eXBlb2YgZGF0YUl0ZW0gIT09ICdvYmplY3QnIHx8IGRhdGFJdGVtIGluc3RhbmNlb2YgQXJyYXkgfHwgKGRhdGFJdGVtIGluc3RhbmNlb2YgTWFwICYmIGRhdGFJdGVtIGluc3RhbmNlb2YgV2Vha01hcCkgfHwgZGF0YUl0ZW0gaW5zdGFuY2VvZiBTZXQgfHwgZGF0YUl0ZW0gaW5zdGFuY2VvZiBXZWFrU2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUuc2V0KGdldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZE5hbWVCaW5kKCkpKTtcbiAgICAgICAgdGhpcy5nZXRSZWN0TGVmdCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBlZmZlY3RDbGVhclVwRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FsbGVkRWZmZWN0LnNldCh0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYXJVcEVmZmVjdC5kZXN0cm95KCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tJc1ZhbGlkOiB0aGlzLmNoZWNrSXNWYWxpZC5iaW5kKHRoaXMpLFxuICAgICAgc2V0TWVzc2FnZUVycm9yOiB0aGlzLnNldE1lc3NhZ2VFcnJvci5iaW5kKHRoaXMpLFxuICAgICAgYmx1cjogYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dD8uYmx1cigpLFxuICAgICAgZm9jdXM6IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/LmZvY3VzKCksXG4gICAgICBpbnNlcnRDb250ZW50OiBhc3luYyAoZGF0YTogc3RyaW5nIHwgbnVtYmVyKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5pbnNlcnRDb250ZW50KGRhdGEpLFxuICAgICAgcmVzZXRWYWx1ZTogYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dD8ucmVzZXRWYWx1ZSgpLFxuICAgICAgY3VycmVudFN0YXRlSXNWYWxpZDogdGhpcy5jdXJyZW50U3RhdGVJc1ZhbGlkLmJpbmQodGhpcyksXG4gICAgICBnZXRFbGVtZW50VmFsdWU6IHRoaXMuZ2V0RWxlbWVudFZhbHVlLmJpbmQodGhpcyksXG4gICAgICBjaGVja0FuZERpc2FibGVVcERvd25CdXR0b246IGFzeW5jICh2YWx1ZSkgPT4gYXdhaXQgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dD8uY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uKHZhbHVlKSxcbiAgICAgIHNlbGVjdEFsbENvbnRlbnQ6IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/LnNlbGVjdEFsbENvbnRlbnQoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjdXJyZW50U3RhdGVJc1ZhbGlkKCkge1xuICAgIHJldHVybiAhdGhpcy5zaW5nbGVFcnJvcigpLm1lc3NhZ2U7XG4gIH1cblxuICBwcml2YXRlIGdldEVsZW1lbnRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dD8uZ2V0RWxlbWVudFZhbHVlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMub3V0U2VsZWN0LmVtaXQodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVyVmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgIHNldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZE5hbWVCaW5kKCksIHZhbHVlKTtcblxuICAgIC8vIFN1cHBvcnQgdHLGsOG7nW5nIGjhu6NwIGNhbGwgQVBJIGhv4bq3YyB2YWxpZGF0ZSBj4bqnbiB44butIGzDvSBjaGVjayB04buRbiBuaGnhu4F1IHRo4budaSBnaWFuIHRow6wgY+G6p24gZGVib3VuY2UgdGltZSDEkeG7gyB0csOhbmggY2FsbCBsacOqbiB04bulY1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyVmFsdWVDaGFuZ2UpO1xuICAgIHRoaXMudGltZXJWYWx1ZUNoYW5nZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZSh2YWx1ZSk7XG4gICAgICB0aGlzLm91dFZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH0sIHRoaXMuZGVib3VuY2VUaW1lVmFsaWRhdGUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50SWNvbkxlZnQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dEljb25MZWZ0LmVtaXQoZXZlbnROYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRJY29uUmlnaHQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dEljb25SaWdodC5lbWl0KGV2ZW50TmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uTGFiZWwoYnV0dG9uOiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbkxhYmVsLmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU3dpdGNoTGFiZWwodG9nZ2xlRXZlbnQ6IElTd2l0Y2hFdmVudCkge1xuICAgIHRoaXMub3V0U3dpdGNoRXZlbnRMYWJlbC5lbWl0KHRvZ2dsZUV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRMYWJlbFJpZ2h0TGFiZWwoKSB7XG4gICAgdGhpcy5vdXRMYWJlbFJpZ2h0Q2xpY2suZW1pdCh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRW50ZXJJbnB1dChlOiBJRXZlbnQpIHtcbiAgICB0aGlzLm91dEVudGVySW5wdXRFdmVudC5lbWl0KGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJIZWlnaHRBcmVhQ2hhbmdlKGV2ZW50OiB7IGlzQ2hhbmdlOiBib29sZWFuIH0pIHtcbiAgICB0aGlzLm91dEhlaWdodEFyZWFDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICB0aGlzLmdldFJlY3RMZWZ0KCk7XG4gICAgdGhpcy5zaW5nbGVFcnJvci51cGRhdGUoKG9iaikgPT4gKHsgLi4ub2JqLCBtZXNzYWdlOiB1bmRlZmluZWQgfSkpO1xuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKSAmJiB0aGlzLnZhbGlkUmVxdWlyZWQoKT8uaXNSZXF1aXJlZCAmJiAoKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlLnRyaW0oKSkgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgaXNOaWwodmFsdWUpKSkpIHtcbiAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogdGhpcy52YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRSZXF1aXJlZCgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7fSB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB0aGlzLnZhbGlkTWluTGVuZ3RoKCk/Lm1lc3NhZ2UgJiYgKHRoaXMudmFsaWRNaW5MZW5ndGgoKT8ubGVuZ3RoIHx8IDApID4gdmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6IHRoaXMudmFsaWRNaW5MZW5ndGgoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01JTl9MRU5HVEgsIGludGVycG9sYXRlUGFyYW1zOiB0aGlzLnZhbGlkTWluTGVuZ3RoKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHt9IH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMudmFsaWRQYXR0ZXJuKCk/Lmxlbmd0aCAmJiB2YWx1ZT8udHJpbSgpKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkIG9mIHRoaXMudmFsaWRQYXR0ZXJuKCkgfHwgW10pIHtcbiAgICAgICAgaWYgKCF2YWxpZC5wYXR0ZXJuKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF0dGVybiA9IGAke3ZhbGlkLnBhdHRlcm59YDtcbiAgICAgICAgY29uc3QgaW5kZXhPZlNsYXNoID0gcGF0dGVybi5sYXN0SW5kZXhPZignLycpO1xuXG4gICAgICAgIGlmICghaW5kZXhPZlNsYXNoKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF0dGVyblN0ciA9IHBhdHRlcm4uc3Vic3RyaW5nKDEsIGluZGV4T2ZTbGFzaCk7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5GbGFnID0gcGF0dGVybi5zdWJzdHJpbmcoaW5kZXhPZlNsYXNoICsgMSwgcGF0dGVybi5sZW5ndGgpO1xuXG4gICAgICAgIGlmIChuZXcgUmVnRXhwKHBhdHRlcm5TdHIsIHBhdHRlcm5GbGFnKS50ZXN0KHZhbHVlKSA9PT0gKHZhbGlkLnZhbHVlUGF0dGVyblNob3dFcnJvciA/PyB0aGlzLnZhbHVlUGF0dGVyblNob3dFcnJvcigpKSkge1xuICAgICAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogdmFsaWQubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX1BBVFRFTl9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHZhbGlkLmludGVycG9sYXRlUGFyYW1zIHx8IHt9IH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy52YWxpZE1pblZhbHVlKCkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdGhpcy5taW5WYWx1ZU51bWJlcigpID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA8ICh0aGlzLm1pblZhbHVlTnVtYmVyKCkgPz8gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6IHRoaXMudmFsaWRNaW5WYWx1ZSgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUlOX1ZBTElELCBpbnRlcnBvbGF0ZVBhcmFtczogdGhpcy52YWxpZE1pblZhbHVlKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHsgdmFsdWU6IHRoaXMubWluVmFsdWVOdW1iZXIoKSB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgodGhpcy5pZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUoKSB8fCB0aGlzLnZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdGhpcy5tYXhWYWx1ZU51bWJlcigpID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+ICh0aGlzLm1heFZhbHVlTnVtYmVyKCkgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6IHRoaXMudmFsaWRNYXhWYWx1ZSgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUFYX1ZBTElELCBpbnRlcnBvbGF0ZVBhcmFtczogdGhpcy52YWxpZE1heFZhbHVlKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHsgdmFsdWU6IHRoaXMubWF4VmFsdWVOdW1iZXIoKSB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IG1heE1pblZhbHVlID0gKEJpZ0ludCg5MjIpICogQmlnSW50KDEwKSAqKiBCaWdJbnQoMTgpKSAvIEJpZ0ludCgxMDApO1xuICAgICAgY29uc3QgW2ludCwgZGVjaW1hbF0gPSB2YWx1ZS5zcGxpdCgnLicpO1xuICAgICAgbGV0IHZhbHVlRGl2aWRlZCA9IEJpZ0ludCgxKTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAoZGVjaW1hbD8ubGVuZ3RoIHx8IDApOyBpbmRleCsrKSB7XG4gICAgICAgIHZhbHVlRGl2aWRlZCAqPSBCaWdJbnQoMTApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZUNvbXBhcmUgPSBCaWdJbnQoYCR7aW50fSR7ZGVjaW1hbCB8fCAnJ31gKSAqIChCaWdJbnQoMTAwMDApIC8gdmFsdWVEaXZpZGVkKTtcblxuICAgICAgaWYgKHZhbHVlQ29tcGFyZSA8IC1tYXhNaW5WYWx1ZSkge1xuICAgICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy52YWxpZE1pblZhbHVlKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9NSU5fVkFMSUQsXG4gICAgICAgICAgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRNaW5WYWx1ZSgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7IHZhbHVlOiB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoYC0ke21heE1pblZhbHVlIC8gQmlnSW50KDEwMDAwKX1gLCB0cnVlLCA0LCB0cnVlLCB0cnVlKSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVDb21wYXJlID4gbWF4TWluVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoe1xuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudmFsaWRNYXhWYWx1ZSgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUFYX1ZBTElELFxuICAgICAgICAgIGludGVycG9sYXRlUGFyYW1zOiB0aGlzLnZhbGlkTWF4VmFsdWUoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwgeyB2YWx1ZTogdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGAke21heE1pblZhbHVlIC8gQmlnSW50KDEwMDAwKX1gLCB0cnVlLCA0LCB0cnVlLCB0cnVlKSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1heExlbmd0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICh0aGlzLm1heExlbmd0aCgpIHx8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoeyBtZXNzYWdlOiB0aGlzLnZhbGlkTWF4TGVuZ3RoKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9NQVhfTEVOR1RILCBpbnRlcnBvbGF0ZVBhcmFtczogdGhpcy52YWxpZE1heExlbmd0aCgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7IG51bWJlcjogdGhpcy5tYXhMZW5ndGgoKSB9IH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZ1bmN0aW9uVmFsaWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0gdGhpcy5mdW5jdGlvblZhbGlkKCk/Lih2YWx1ZSk7XG5cbiAgICBpZiAocmVzdWx0Py50aGVuKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldChhd2FpdCByZXN1bHQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHJlc3VsdCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSXNWYWxpZCgpIHtcbiAgICBpZiAodGhpcy5pdGVtKCkgJiYgKHRoaXMucmVhZG9ubHkoKSB8fCB0aGlzLmRpc2FibGUoKSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lclZhbHVlQ2hhbmdlKTtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKGdldCh0aGlzLml0ZW0sIHRoaXMuZmllbGROYW1lQmluZCgpKSk7XG5cbiAgICByZXR1cm4gIXRoaXMuc2luZ2xlRXJyb3IoKS5tZXNzYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRNZXNzYWdlRXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zaW5nbGVFcnJvci51cGRhdGUoKG9iaikgPT4gKHsgLi4ub2JqLCBtZXNzYWdlIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ29udHJvbEZ1bmN0aW9uSW5wdXQoZXZlbnQ6IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dCA9IGV2ZW50O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGb2N1c0FuZEJsdXIoZXZlbnQ6IElGb2N1c0FuZEJsdXJFdmVudCkge1xuICAgIHRoaXMub3V0Rm9jdXNBbmRCbHVyLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWN0TGVmdCgpIHtcbiAgICBpZiAoIXRoaXMucmVjdExlZnQoKSB8fCB0aGlzLnBvc2l0aW9uTWVzc2FnZUVycm9yU3RhcnRJbnB1dCgpKSB7XG4gICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVjdExlZnQuc2V0KHRoaXMuZWxlbWVudExlZnRSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVZhbHVlQnlCdXR0b25VcERvd24oKSB7XG4gICAgdGhpcy5vdXRDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duLmVtaXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lclZhbHVlQ2hhbmdlKTtcbiAgfVxufVxuIiwiQGlmIChmaWVsZE5hbWVCaW5kKCkgJiYgaXRlbSgpOyBhcyBpdGVtKSB7XG4gIEBpZiAobGFiZWxDb25maWcoKTsgYXMgbGFiZWxDb25maWcpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICBbY2xhc3NJbmNsdWRlXT1cImxhYmVsQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgW3JlcXVpcmVkXT1cImxhYmVsQ29uZmlnLnJlcXVpcmVkXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICBbZGVzY3JpcHRpb25DbGFzc109XCJsYWJlbENvbmZpZy5kZXNjcmlwdGlvbkNsYXNzXCJcbiAgICAgIFtsYWJlbFJpZ2h0XT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgICAgW2xhYmVsUmlnaHRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICBbYnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJkaXNhYmxlKCkgfHwgbGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0XCJcbiAgICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc1JpZ2h0XT1cImRpc2FibGUoKSB8fCBsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc1JpZ2h0XCJcbiAgICAgIFtoYXNUb2dnbGVdPVwibGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICAgIFt0b2dnbGVBY3RpdmVdPVwibGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgIFt0b2dnbGVEaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlXCJcbiAgICAgIFtwb3BvdmVyXT1cImxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwibGFiZWxDb25maWcuaWNvblBvcG92ZXJDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtsaW1pdExlbmd0aF09XCJsYWJlbENvbmZpZy5saW1pdExlbmd0aFwiXG4gICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uIHx8IGRpc2FibGUoKVwiXG4gICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NcIlxuICAgICAgW2NvdW50XT1cInZhbHVlKCk/Lmxlbmd0aFwiXG4gICAgICAob3V0Q2xpY2tCdXR0b24pPVwiaGFuZGxlckNsaWNrQnV0dG9uTGFiZWwoJGV2ZW50KVwiXG4gICAgICAob3V0U3dpdGNoRXZlbnQpPVwiaGFuZGxlclN3aXRjaExhYmVsKCRldmVudClcIlxuICAgICAgKG91dExhYmVsUmlnaHRDbGljayk9XCJoYW5kbGVyRXZlbnRMYWJlbFJpZ2h0TGFiZWwoKVwiIC8+XG4gIH1cbiAgPGRpdlxuICAgIFtjbGFzc109XCInbGlicy11aS1pbnB1dC12YWxpZCB3LWZ1bGwgJyArIChjbGFzc0luY2x1ZGUoKSA/PyAnJylcIlxuICAgIFtjbGFzcy5pdGVtcy1iYXNlbGluZV09XCJpc0Jhc2VsaW5lU3R5bGUoKVwiPlxuICAgIEBpZiAoIWlnbm9yZUNvbnRlbnRMZWZ0KCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgI2VsZW1lbnRMZWZ0UmVmXG4gICAgICAgIGNsYXNzPVwibGlicy11aS1pbnB1dC12YWxpZC1sZWZ0XCJcbiAgICAgICAgW2NsYXNzLml0ZW1zLWJhc2VsaW5lXT1cImlzQmFzZWxpbmVTdHlsZSgpXCI+XG4gICAgICAgIEBpZiAodHlwZUNvbXBvbmVudFNlbGVjdEl0ZW0oKTsgYXMgdHlwZUNvbXBvbmVudFNlbGVjdEl0ZW0pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzhweF1cIj5cbiAgICAgICAgICAgIEBpZiAodHlwZUNvbXBvbmVudFNlbGVjdEl0ZW0gPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGVcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ2YWx1ZUNvbXBvbmVudFNlbGVjdEl0ZW0oKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGRpc2FibGVDb21wb25lbnRTZWxlY3RJdGVtKCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlclNlbGVjdCgkZXZlbnQuY2hlY2tlZClcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICh0eXBlQ29tcG9uZW50U2VsZWN0SXRlbSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXJhZGlvLXNpbmdsZVxuICAgICAgICAgICAgICAgIFthY3RpdmVdPVwidmFsdWVDb21wb25lbnRTZWxlY3RJdGVtKCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCBkaXNhYmxlQ29tcG9uZW50U2VsZWN0SXRlbSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJTZWxlY3QoJGV2ZW50LmFjdGl2ZSlcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmxpYnMtdWktaW5wdXQtdmFsaWQtbGVmdC1jb250ZW50LWN1c3RvbVwiIC8+XG4gICAgICAgIEBmb3IgKHVuaXQgb2YgdW5pdHNMZWZ0KCk7IHRyYWNrIHVuaXQpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtdW5pdCBsaWJzLXVpLWlucHV0LXZhbGlkLXVuaXQtbGVmdCAhcm91bmRlZC10ci1ub25lICFyb3VuZGVkLWJyLW5vbmUgbGlicy11aS1mb250LWg1ciB7eyBjb25maWdVbml0TGVmdCgpLmNsYXNzSW5jbHVkZSB8fCAnJyB9fVwiXG4gICAgICAgICAgICBbY2xhc3MuIWZsZXhdPVwidW5pdFtjb25maWdVbml0TGVmdCgpLmZpZWxkS2V5XSA9PT0ga2V5U2VsZWN0ZWRVbml0TGVmdCgpXCJcbiAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5XT1cInJlYWRvbmx5KCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgZmFsc2VcIj5cbiAgICAgICAgICAgIEBsZXQgY29uc3RIdG1sTGFiZWwgPSB1bml0W2NvbmZpZ1VuaXRMZWZ0KCkuZmllbGRMYWJlbCB8fCAnbGFiZWwnXSB8fCAnICc7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cInsgbWF4V2lkdGg6IDI1MCwgZGlyZWN0aW9uOiAnYm90dG9tJywgekluZGV4OiB6SW5kZXhQb3BvdmVyQ29udGVudCgpIH1cIlxuICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cImNvbnN0SHRtbExhYmVsIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoY2FsbGVkRWZmZWN0KCkgPT09IHRydWUpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0XG4gICAgICAgIFt0YWdJbnB1dF09XCJ0YWdJbnB1dCgpXCJcbiAgICAgICAgW2RhdGFUeXBlXT1cImRhdGFUeXBlKCkgfHwgJ3N0cmluZydcIlxuICAgICAgICBbdHlwZUlucHV0XT1cInR5cGVJbnB1dCgpXCJcbiAgICAgICAgW21vZGVJbnB1dF09XCJtb2RlSW5wdXQoKVwiXG4gICAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWlnbm9yZVdpZHRoSW5wdXQxMDAoKVwiXG4gICAgICAgIFtpZ25vcmVXaWR0aElucHV0MTAwXT1cImlnbm9yZVdpZHRoSW5wdXQxMDAoKVwiXG4gICAgICAgIFt0ZXh0QXJlYUVudGVyTm90TmV3TGluZV09XCJ0ZXh0QXJlYUVudGVyTm90TmV3TGluZSgpIHx8IGZhbHNlXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIoY2xhc3NJbmNsdWRlSW5wdXQoKSB8fCAnJykgKyAodW5pdHNMZWZ0KCkgJiYgdW5pdHNMZWZ0KCk/Lmxlbmd0aCA/ICcgIXJvdW5kZWQtdGwtbm9uZSAhcm91bmRlZC1ibC1ub25lJyA6ICcnKSArICh1bml0c1JpZ2h0KCk/Lmxlbmd0aCA/ICcgIXJvdW5kZWQtdHItbm9uZSAhcm91bmRlZC1ici1ub25lJyA6ICcnKVwiXG4gICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCJtYXhWYWx1ZU51bWJlcigpXCJcbiAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIm1pblZhbHVlTnVtYmVyKClcIlxuICAgICAgICBbZml4ZWRGbG9hdF09XCJmaXhlZEZsb2F0KCkgPz8gMVwiXG4gICAgICAgIFthY2NlcHROZWdhdGl2ZVZhbHVlXT1cImFjY2VwdE5lZ2F0aXZlVmFsdWUoKVwiXG4gICAgICAgIFtvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZV09XCJvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpXCJcbiAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cInZhbHVlVXBEb3duTnVtYmVyKClcIlxuICAgICAgICBbbWF4TGVuZ3RoXT1cIm1heExlbmd0aCgpXCJcbiAgICAgICAgW3Nob3dDb3VudF09XCJzaG93Q291bnQoKVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgW2F1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludF09XCJhdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnQoKVwiXG4gICAgICAgIFtub0JvcmRlcl09XCJub0JvcmRlcigpXCJcbiAgICAgICAgW2JhY2tncm91bmROb25lXT1cImJhY2tncm91bmROb25lKClcIlxuICAgICAgICBbdXNlQ29sb3JNb2RlRXhpc3RdPVwidXNlQ29sb3JNb2RlRXhpc3QoKVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpIHx8ICcnXCJcbiAgICAgICAgW2tlZXBQbGFjZWhvbGRlck9ubHldPVwia2VlcFBsYWNlaG9sZGVyT25seSgpXCJcbiAgICAgICAgW2F1dG9SZW1vdmVFbW9qaV09XCJhdXRvUmVtb3ZlRW1vamkoKVwiXG4gICAgICAgIFtkZWZhdWx0SGVpZ2h0XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICAgIFttYXhIZWlnaHRUZXh0QXJlYV09XCJtYXhIZWlnaHRUZXh0QXJlYSgpIHx8IDI1MFwiXG4gICAgICAgIFttaW5IZWlnaHRUZXh0QXJlYV09XCJtaW5IZWlnaHRUZXh0QXJlYSgpXCJcbiAgICAgICAgW2JvcmRlckVycm9yXT1cImJvcmRlckVycm9yKCkgfHwgKCEhc2luZ2xlRXJyb3IoKS5tZXNzYWdlICYmICFpZ25vcmVTaG93RXJyb3IoKSlcIlxuICAgICAgICBbaWNvbkxlZnRDbGFzc109XCJpY29uTGVmdENsYXNzKClcIlxuICAgICAgICBbcG9wb3ZlckNvbnRlbnRJY29uTGVmdF09XCJwb3BvdmVyQ29udGVudEljb25MZWZ0KClcIlxuICAgICAgICBbcG9wb3ZlckNvbnRlbnRJY29uUmlnaHRdPVwicG9wb3ZlckNvbnRlbnRJY29uUmlnaHQoKVwiXG4gICAgICAgIFtpY29uUmlnaHRDbGFzc109XCJpY29uUmlnaHRDbGFzcygpXCJcbiAgICAgICAgW3pJbmRleFBvcG92ZXJDb250ZW50XT1cInpJbmRleFBvcG92ZXJDb250ZW50KClcIlxuICAgICAgICBbZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcl09XCJlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyKClcIlxuICAgICAgICBbaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlXT1cIiEhaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlKCkgPyBpZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUoKSA6IHZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgIFsodmFsdWUpXT1cInZhbHVlXCJcbiAgICAgICAgW2NsYXNzQ29udGFpbmVySW5wdXRdPVwiY2xhc3NDb250YWluZXJJbnB1dCgpXCJcbiAgICAgICAgW3Jlc2V0QXV0b0NvbXBsZXRlUGFzc3dvcmRdPVwicmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZCgpXCJcbiAgICAgICAgW3Jlc2l6ZV09XCJyZXNpemUoKVwiXG4gICAgICAgIFtjbGFzc0NvbnRhaW5lckJvdHRvbUlucHV0XT1cImNsYXNzQ29udGFpbmVyQm90dG9tSW5wdXQoKVwiXG4gICAgICAgIFt0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dF09XCJ0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCgpXCJcbiAgICAgICAgW3RlbXBsYXRlUmlnaHRCb3R0b21JbnB1dF09XCJ0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQoKVwiXG4gICAgICAgIFttYXhMZW5ndGhOdW1iZXJDb3VudF09XCJtYXhMZW5ndGhOdW1iZXJDb3VudCgpXCJcbiAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cImlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KClcIlxuICAgICAgICBbZm9jdXNUaW1lT3V0XT1cImZvY3VzVGltZU91dCgpXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZXJWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKG91dEVudGVyRXZlbnQpPVwiaGFuZGxlckVudGVySW5wdXQoJGV2ZW50KVwiXG4gICAgICAgIChvdXRJY29uTGVmdCk9XCJoYW5kbGVyRXZlbnRJY29uTGVmdCgkZXZlbnQpXCJcbiAgICAgICAgKG91dEljb25SaWdodCk9XCJoYW5kbGVyRXZlbnRJY29uUmlnaHQoJGV2ZW50KVwiXG4gICAgICAgIChvdXRIZWlnaHRBcmVhQ2hhbmdlKT1cImhhbmRsZXJIZWlnaHRBcmVhQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyQ29udHJvbEZ1bmN0aW9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyKCRldmVudClcIlxuICAgICAgICAob3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bik9XCJoYW5kbGVyQ2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bigpXCIgLz5cbiAgICB9XG4gICAgQGlmICghaWdub3JlQ29udGVudFJpZ2h0KCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWlucHV0LXZhbGlkLXJpZ2h0XCJcbiAgICAgICAgW2NsYXNzLml0ZW1zLWJhc2VsaW5lXT1cImlzQmFzZWxpbmVTdHlsZSgpXCI+XG4gICAgICAgIEBmb3IgKHVuaXQgb2YgdW5pdHNSaWdodCgpOyB0cmFjayB1bml0KSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWlucHV0LXZhbGlkLXVuaXQgbGlicy11aS1pbnB1dC12YWxpZC11bml0LXJpZ2h0ICFyb3VuZGVkLXRsLW5vbmUgIXJvdW5kZWQtYmwtbm9uZSBsaWJzLXVpLWZvbnQtaDVyIHt7IGNvbmZpZ1VuaXRSaWdodCgpLmNsYXNzSW5jbHVkZSB8fCAnbGlicy11aS1ib3JkZXItZ2VuZXJhbCcgfX1cIlxuICAgICAgICAgICAgW2NsYXNzLiFmbGV4XT1cInVuaXRbY29uZmlnVW5pdFJpZ2h0KCkuZmllbGRLZXldID09PSBrZXlTZWxlY3RlZFVuaXRSaWdodCgpXCJcbiAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5XT1cIiFpZ25vcmVVbml0UmlnaHRDbGFzc1JlYWRPbmx5KCkgJiYgKHJlYWRvbmx5KCkgfHwgZmFsc2UpXCI+XG4gICAgICAgICAgICBAbGV0IGNvbnN0SHRtbExhYmVsID0gdW5pdFtjb25maWdVbml0UmlnaHQoKS5maWVsZExhYmVsIHx8ICdsYWJlbCddIHx8ICcgJztcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwieyBtYXhXaWR0aDogMjUwLCBkaXJlY3Rpb246ICdib3R0b20nLCB6SW5kZXg6IHpJbmRleFBvcG92ZXJDb250ZW50KCkgfVwiXG4gICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiY29uc3RIdG1sTGFiZWwgfCB0cmFuc2xhdGVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5saWJzLXVpLWlucHV0LXZhbGlkLXJpZ2h0LWNvbnRlbnQtY3VzdG9tXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmICghIXNpbmdsZUVycm9yKCkubWVzc2FnZSAmJiAhaWdub3JlU2hvd0Vycm9yKCkgJiYgIWlnbm9yZVNob3dNZXNzYWdlRXJyb3IoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWlucHV0LXZhbGlkLWVycm9yIHt7IGNsYXNzTWVzc2FnZUVycm9ySW5jbHVkZSgpIHx8ICcnIH19XCI+XG4gICAgICBAbGV0IGNvbnN0SHRtbE1lc3NhZ2UgPSBzaW5nbGVFcnJvcigpLm1lc3NhZ2UgfHwgJyAnO1xuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLW1lc3NhZ2UtZXJyb3IgbGlicy11aS1mb250LWg3ciBsaWJzLXVpLXRleHQtZXJyb3JcIlxuICAgICAgICBbc3R5bGUubWFyZ2luTGVmdC5weF09XCJyZWN0TGVmdCgpPy53aWR0aFwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwiY29uc3RIdG1sTWVzc2FnZSB8IHRyYW5zbGF0ZTogc2luZ2xlRXJyb3IoKS5pbnRlcnBvbGF0ZVBhcmFtc1wiPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgfVxufVxuIl19
|
|
@@ -16,8 +16,8 @@ class LibsUiComponentsInputsValidComponent {
|
|
|
16
16
|
singleError = signal({ message: undefined, interpolateParams: undefined });
|
|
17
17
|
rectLeft = signal(undefined);
|
|
18
18
|
calledEffect = signal(false);
|
|
19
|
-
timer
|
|
20
|
-
timerValueChange
|
|
19
|
+
timer;
|
|
20
|
+
timerValueChange;
|
|
21
21
|
functionControlInput;
|
|
22
22
|
// #region INPUT
|
|
23
23
|
item = model.required({});
|
|
@@ -178,12 +178,12 @@ class LibsUiComponentsInputsValidComponent {
|
|
|
178
178
|
}
|
|
179
179
|
handlerValueChange(value) {
|
|
180
180
|
set(this.item(), this.fieldNameBind(), value);
|
|
181
|
-
// Support trường hợp call API hoặc validate cần xử lý check tốn nhiều thời gian thì cần
|
|
182
|
-
clearTimeout(this.timerValueChange
|
|
183
|
-
this.timerValueChange
|
|
181
|
+
// Support trường hợp call API hoặc validate cần xử lý check tốn nhiều thời gian thì cần debounce time để tránh call liên tục
|
|
182
|
+
clearTimeout(this.timerValueChange);
|
|
183
|
+
this.timerValueChange = setTimeout(() => {
|
|
184
184
|
this.validate(value);
|
|
185
185
|
this.outValueChange.emit(value);
|
|
186
|
-
}, this.debounceTimeValidate())
|
|
186
|
+
}, this.debounceTimeValidate());
|
|
187
187
|
}
|
|
188
188
|
handlerEventIconLeft(eventName) {
|
|
189
189
|
this.outIconLeft.emit(eventName);
|
|
@@ -284,7 +284,7 @@ class LibsUiComponentsInputsValidComponent {
|
|
|
284
284
|
if (this.item() && (this.readonly() || this.disable())) {
|
|
285
285
|
return true;
|
|
286
286
|
}
|
|
287
|
-
clearTimeout(this.timerValueChange
|
|
287
|
+
clearTimeout(this.timerValueChange);
|
|
288
288
|
await this.validate(get(this.item, this.fieldNameBind()));
|
|
289
289
|
return !this.singleError().message;
|
|
290
290
|
}
|
|
@@ -299,17 +299,17 @@ class LibsUiComponentsInputsValidComponent {
|
|
|
299
299
|
}
|
|
300
300
|
getRectLeft() {
|
|
301
301
|
if (!this.rectLeft() || this.positionMessageErrorStartInput()) {
|
|
302
|
-
this.timer
|
|
302
|
+
this.timer = setTimeout(() => {
|
|
303
303
|
this.rectLeft.set(this.elementLeftRef()?.nativeElement.getBoundingClientRect());
|
|
304
|
-
})
|
|
304
|
+
});
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
307
|
handlerChangeValueByButtonUpDown() {
|
|
308
308
|
this.outChangeValueByButtonUpDown.emit();
|
|
309
309
|
}
|
|
310
310
|
ngOnDestroy() {
|
|
311
|
-
clearTimeout(this.timer
|
|
312
|
-
clearTimeout(this.timerValueChange
|
|
311
|
+
clearTimeout(this.timer);
|
|
312
|
+
clearTimeout(this.timerValueChange);
|
|
313
313
|
}
|
|
314
314
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsValidComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
315
315
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsInputsValidComponent, isStandalone: true, selector: "libs_ui-components-inputs-valid", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, emitEmptyInDataTypeNumber: { classPropertyName: "emitEmptyInDataTypeNumber", publicName: "emitEmptyInDataTypeNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreBlockInputMaxValue: { classPropertyName: "ignoreBlockInputMaxValue", publicName: "ignoreBlockInputMaxValue", isSignal: true, isRequired: false, transformFunction: null }, fieldNameBind: { classPropertyName: "fieldNameBind", publicName: "fieldNameBind", isSignal: true, isRequired: true, transformFunction: null }, showCount: { classPropertyName: "showCount", publicName: "showCount", isSignal: true, isRequired: false, transformFunction: null }, typeComponentSelectItem: { classPropertyName: "typeComponentSelectItem", publicName: "typeComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, valueComponentSelectItem: { classPropertyName: "valueComponentSelectItem", publicName: "valueComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, disableComponentSelectItem: { classPropertyName: "disableComponentSelectItem", publicName: "disableComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, tagInput: { classPropertyName: "tagInput", publicName: "tagInput", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, typeInput: { classPropertyName: "typeInput", publicName: "typeInput", isSignal: true, isRequired: false, transformFunction: null }, modeInput: { classPropertyName: "modeInput", publicName: "modeInput", isSignal: true, isRequired: false, transformFunction: null }, resetAutoCompletePassword: { classPropertyName: "resetAutoCompletePassword", publicName: "resetAutoCompletePassword", isSignal: true, isRequired: false, transformFunction: null }, textAreaEnterNotNewLine: { classPropertyName: "textAreaEnterNotNewLine", publicName: "textAreaEnterNotNewLine", isSignal: true, isRequired: false, transformFunction: null }, fixedFloat: { classPropertyName: "fixedFloat", publicName: "fixedFloat", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreWidthInput100: { classPropertyName: "ignoreWidthInput100", publicName: "ignoreWidthInput100", isSignal: true, isRequired: false, transformFunction: null }, classIncludeInput: { classPropertyName: "classIncludeInput", publicName: "classIncludeInput", isSignal: true, isRequired: false, transformFunction: null }, classContainerInput: { classPropertyName: "classContainerInput", publicName: "classContainerInput", 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 }, noBorder: { classPropertyName: "noBorder", publicName: "noBorder", isSignal: true, isRequired: false, transformFunction: null }, backgroundNone: { classPropertyName: "backgroundNone", publicName: "backgroundNone", isSignal: true, isRequired: false, transformFunction: null }, useColorModeExist: { classPropertyName: "useColorModeExist", publicName: "useColorModeExist", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, keepPlaceholderOnly: { classPropertyName: "keepPlaceholderOnly", publicName: "keepPlaceholderOnly", isSignal: true, isRequired: false, transformFunction: null }, classContainerBottomInput: { classPropertyName: "classContainerBottomInput", publicName: "classContainerBottomInput", isSignal: true, isRequired: false, transformFunction: null }, autoRemoveEmoji: { classPropertyName: "autoRemoveEmoji", publicName: "autoRemoveEmoji", isSignal: true, isRequired: false, transformFunction: null }, defaultHeight: { classPropertyName: "defaultHeight", publicName: "defaultHeight", isSignal: true, isRequired: false, transformFunction: null }, maxHeightTextArea: { classPropertyName: "maxHeightTextArea", publicName: "maxHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, minHeightTextArea: { classPropertyName: "minHeightTextArea", publicName: "minHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowError: { classPropertyName: "ignoreShowError", publicName: "ignoreShowError", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowMessageError: { classPropertyName: "ignoreShowMessageError", publicName: "ignoreShowMessageError", isSignal: true, isRequired: false, transformFunction: null }, borderError: { classPropertyName: "borderError", publicName: "borderError", isSignal: true, isRequired: false, transformFunction: null }, iconLeftClass: { classPropertyName: "iconLeftClass", publicName: "iconLeftClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconLeft: { classPropertyName: "popoverContentIconLeft", publicName: "popoverContentIconLeft", isSignal: true, isRequired: false, transformFunction: null }, iconRightClass: { classPropertyName: "iconRightClass", publicName: "iconRightClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconRight: { classPropertyName: "popoverContentIconRight", publicName: "popoverContentIconRight", isSignal: true, isRequired: false, transformFunction: null }, zIndexPopoverContent: { classPropertyName: "zIndexPopoverContent", publicName: "zIndexPopoverContent", isSignal: true, isRequired: false, transformFunction: null }, unitsLeft: { classPropertyName: "unitsLeft", publicName: "unitsLeft", isSignal: true, isRequired: false, transformFunction: null }, configUnitLeft: { classPropertyName: "configUnitLeft", publicName: "configUnitLeft", isSignal: true, isRequired: false, transformFunction: null }, keySelectedUnitLeft: { classPropertyName: "keySelectedUnitLeft", publicName: "keySelectedUnitLeft", isSignal: true, isRequired: false, transformFunction: null }, unitsRight: { classPropertyName: "unitsRight", publicName: "unitsRight", isSignal: true, isRequired: false, transformFunction: null }, configUnitRight: { classPropertyName: "configUnitRight", publicName: "configUnitRight", isSignal: true, isRequired: false, transformFunction: null }, keySelectedUnitRight: { classPropertyName: "keySelectedUnitRight", publicName: "keySelectedUnitRight", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, minValueNumber: { classPropertyName: "minValueNumber", publicName: "minValueNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreContentLeft: { classPropertyName: "ignoreContentLeft", publicName: "ignoreContentLeft", isSignal: true, isRequired: false, transformFunction: null }, ignoreContentRight: { classPropertyName: "ignoreContentRight", publicName: "ignoreContentRight", isSignal: true, isRequired: false, transformFunction: null }, isBaselineStyle: { classPropertyName: "isBaselineStyle", publicName: "isBaselineStyle", isSignal: true, isRequired: false, transformFunction: null }, valuePatternShowError: { classPropertyName: "valuePatternShowError", publicName: "valuePatternShowError", isSignal: true, isRequired: false, transformFunction: null }, validPattern: { classPropertyName: "validPattern", publicName: "validPattern", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, validMinLength: { classPropertyName: "validMinLength", publicName: "validMinLength", isSignal: true, isRequired: false, transformFunction: null }, validMinValue: { classPropertyName: "validMinValue", publicName: "validMinValue", isSignal: true, isRequired: false, transformFunction: null }, validMaxValue: { classPropertyName: "validMaxValue", publicName: "validMaxValue", isSignal: true, isRequired: false, transformFunction: null }, validMaxLength: { classPropertyName: "validMaxLength", publicName: "validMaxLength", isSignal: true, isRequired: false, transformFunction: null }, functionValid: { classPropertyName: "functionValid", publicName: "functionValid", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, positionMessageErrorStartInput: { classPropertyName: "positionMessageErrorStartInput", publicName: "positionMessageErrorStartInput", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, resize: { classPropertyName: "resize", publicName: "resize", isSignal: true, isRequired: false, transformFunction: null }, templateLeftBottomInput: { classPropertyName: "templateLeftBottomInput", publicName: "templateLeftBottomInput", isSignal: true, isRequired: false, transformFunction: null }, templateRightBottomInput: { classPropertyName: "templateRightBottomInput", publicName: "templateRightBottomInput", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, autoAddZeroLessThan10InTypeInt: { classPropertyName: "autoAddZeroLessThan10InTypeInt", publicName: "autoAddZeroLessThan10InTypeInt", isSignal: true, isRequired: false, transformFunction: null }, maxLengthNumberCount: { classPropertyName: "maxLengthNumberCount", publicName: "maxLengthNumberCount", isSignal: true, isRequired: false, transformFunction: null }, classMessageErrorInclude: { classPropertyName: "classMessageErrorInclude", publicName: "classMessageErrorInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreUnitRightClassReadOnly: { classPropertyName: "ignoreUnitRightClassReadOnly", publicName: "ignoreUnitRightClassReadOnly", isSignal: true, isRequired: false, transformFunction: null }, paddingRightCustomSpecific: { classPropertyName: "paddingRightCustomSpecific", publicName: "paddingRightCustomSpecific", isSignal: true, isRequired: false, transformFunction: null }, focusTimeOut: { classPropertyName: "focusTimeOut", publicName: "focusTimeOut", isSignal: true, isRequired: false, transformFunction: null }, debounceTimeValidate: { classPropertyName: "debounceTimeValidate", publicName: "debounceTimeValidate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { item: "itemChange", outValueChange: "outValueChange", outSelect: "outSelect", outIconLeft: "outIconLeft", outIconRight: "outIconRight", outClickButtonLabel: "outClickButtonLabel", outSwitchEventLabel: "outSwitchEventLabel", outLabelRightClick: "outLabelRightClick", outEnterInputEvent: "outEnterInputEvent", outHeightAreaChange: "outHeightAreaChange", outFunctionsControl: "outFunctionsControl", outFocusAndBlur: "outFocusAndBlur", outChangeValueByButtonUpDown: "outChangeValueByButtonUpDown" }, viewQueries: [{ propertyName: "elementLeftRef", first: true, predicate: ["elementLeftRef"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (fieldNameBind() && item(); as item) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"disable() || labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsRight]=\"disable() || labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"disable() || labelConfig.toggleDisable\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"value()?.length\"\n (outClickButton)=\"handlerClickButtonLabel($event)\"\n (outSwitchEvent)=\"handlerSwitchLabel($event)\"\n (outLabelRightClick)=\"handlerEventLabelRightLabel()\" />\n }\n <div\n [class]=\"'libs-ui-input-valid w-full ' + (classInclude() ?? '')\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (!ignoreContentLeft()) {\n <div\n #elementLeftRef\n class=\"libs-ui-input-valid-left\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (typeComponentSelectItem(); as typeComponentSelectItem) {\n <div class=\"mr-[8px]\">\n @if (typeComponentSelectItem === 'checkbox') {\n <libs_ui-components-checkbox-single\n [checked]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.checked)\" />\n }\n @if (typeComponentSelectItem === 'radio') {\n <libs_ui-components-radio-single\n [active]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.active)\" />\n }\n </div>\n }\n\n <ng-content select=\".libs-ui-input-valid-left-content-custom\" />\n @for (unit of unitsLeft(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-left !rounded-tr-none !rounded-br-none libs-ui-font-h5r {{ configUnitLeft().classInclude || '' }}\"\n [class.!flex]=\"unit[configUnitLeft().fieldKey] === keySelectedUnitLeft()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [class.libs-ui-disable]=\"disable() || false\">\n @let constHtmlLabel = unit[configUnitLeft().fieldLabel || 'label'] || ' ';\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', zIndex: zIndexPopoverContent() }\"\n [innerHtml]=\"constHtmlLabel | translate\" />\n </div>\n }\n </div>\n }\n @if (calledEffect() === true) {\n <libs_ui-components-inputs-input\n [tagInput]=\"tagInput()\"\n [dataType]=\"dataType() || 'string'\"\n [typeInput]=\"typeInput()\"\n [modeInput]=\"modeInput()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [textAreaEnterNotNewLine]=\"textAreaEnterNotNewLine() || false\"\n [classInclude]=\"(classIncludeInput() || '') + (unitsLeft() && unitsLeft()?.length ? ' !rounded-tl-none !rounded-bl-none' : '') + (unitsRight()?.length ? ' !rounded-tr-none !rounded-br-none' : '')\"\n [maxValueNumber]=\"maxValueNumber()\"\n [minValueNumber]=\"minValueNumber()\"\n [fixedFloat]=\"fixedFloat() ?? 1\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxLength]=\"maxLength()\"\n [showCount]=\"showCount()\"\n [readonly]=\"readonly()\"\n [disable]=\"disable()\"\n [autoAddZeroLessThan10InTypeInt]=\"autoAddZeroLessThan10InTypeInt()\"\n [noBorder]=\"noBorder()\"\n [backgroundNone]=\"backgroundNone()\"\n [useColorModeExist]=\"useColorModeExist()\"\n [placeholder]=\"placeholder() || ''\"\n [keepPlaceholderOnly]=\"keepPlaceholderOnly()\"\n [autoRemoveEmoji]=\"autoRemoveEmoji()\"\n [defaultHeight]=\"defaultHeight()\"\n [maxHeightTextArea]=\"maxHeightTextArea() || 250\"\n [minHeightTextArea]=\"minHeightTextArea()\"\n [borderError]=\"borderError() || (!!singleError().message && !ignoreShowError())\"\n [iconLeftClass]=\"iconLeftClass()\"\n [popoverContentIconLeft]=\"popoverContentIconLeft()\"\n [popoverContentIconRight]=\"popoverContentIconRight()\"\n [iconRightClass]=\"iconRightClass()\"\n [zIndexPopoverContent]=\"zIndexPopoverContent()\"\n [emitEmptyInDataTypeNumber]=\"emitEmptyInDataTypeNumber()\"\n [ignoreBlockInputMaxValue]=\"!!ignoreBlockInputMaxValue() ? ignoreBlockInputMaxValue() : validMaxValue()?.message ? true : false\"\n [(value)]=\"value\"\n [classContainerInput]=\"classContainerInput()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n [resize]=\"resize()\"\n [classContainerBottomInput]=\"classContainerBottomInput()\"\n [templateLeftBottomInput]=\"templateLeftBottomInput()\"\n [templateRightBottomInput]=\"templateRightBottomInput()\"\n [maxLengthNumberCount]=\"maxLengthNumberCount()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [focusTimeOut]=\"focusTimeOut()\"\n (valueChange)=\"handlerValueChange($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outHeightAreaChange)=\"handlerHeightAreaChange($event)\"\n (outFunctionsControl)=\"handlerControlFunctionInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\"\n (outChangeValueByButtonUpDown)=\"handlerChangeValueByButtonUpDown()\" />\n }\n @if (!ignoreContentRight()) {\n <div\n class=\"libs-ui-input-valid-right\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @for (unit of unitsRight(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-right !rounded-tl-none !rounded-bl-none libs-ui-font-h5r {{ configUnitRight().classInclude || 'libs-ui-border-general' }}\"\n [class.!flex]=\"unit[configUnitRight().fieldKey] === keySelectedUnitRight()\"\n [class.libs-ui-readonly]=\"!ignoreUnitRightClassReadOnly() && (readonly() || false)\">\n @let constHtmlLabel = unit[configUnitRight().fieldLabel || 'label'] || ' ';\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', zIndex: zIndexPopoverContent() }\"\n [innerHtml]=\"constHtmlLabel | translate\" />\n </div>\n }\n <ng-content select=\".libs-ui-input-valid-right-content-custom\"></ng-content>\n </div>\n }\n </div>\n @if (!!singleError().message && !ignoreShowError() && !ignoreShowMessageError()) {\n <div class=\"libs-ui-input-valid-error {{ classMessageErrorInclude() || '' }}\">\n @let constHtmlMessage = singleError().message || ' ';\n <span\n class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\"\n [style.marginLeft.px]=\"rectLeft()?.width\"\n [innerHtml]=\"constHtmlMessage | translate: singleError().interpolateParams\"></span>\n </div>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .libs-ui-input-valid{position:relative;display:flex;align-items:center}:host .libs-ui-input-valid .libs-ui-input-valid-unit{height:32px;max-width:200px;overflow:hidden;text-align:center;border-radius:4px;background-color:#e6e7ea;display:none;align-items:center;padding:0 8px;border:1px solid #e6e7ea}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-left{border-bottom-left-radius:0;border-top-left-radius:0;border-left:none}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-right{border-bottom-right-radius:0;border-top-right-radius:0;border-right:none}:host .libs-ui-input-valid .libs-ui-input-valid-left{display:flex;align-items:center;justify-content:flex-start}:host .libs-ui-input-valid .libs-ui-input-valid-right{display:flex;align-items:center;justify-content:flex-end}:host .libs-ui-input-valid-error{display:flex;align-items:center;margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsInputsInputComponent, selector: "libs_ui-components-inputs-input", inputs: ["tagInput", "dataType", "typeInput", "modeInput", "tabInsertContentTagInput", "textAreaEnterNotNewLine", "emitEmptyInDataTypeNumber", "keepZeroInTypeInt", "autoAddZeroLessThan10InTypeInt", "ignoreBlockInputMaxValue", "maxValueNumber", "minValueNumber", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "classInclude", "maxLength", "readonly", "disable", "noBorder", "backgroundNone", "borderError", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "value", "autoRemoveEmoji", "defaultHeight", "minHeightTextArea", "maxHeightTextArea", "focusTimeOut", "selectAllTimeOut", "blurTimeOut", "zIndexPopoverContent", "classContainerInput", "showCount", "ignoreStopPropagationEvent", "resize", "templateLeftBottomInput", "templateRightBottomInput", "classContainerBottomInput", "ignoreWidthInput100", "iframeTextareaCustomStyle", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "resetAutoCompletePassword", "acceptOnlyClickIcon", "setIconRightColorSameColorDisableReadOnly", "onlyAcceptNegativeValue", "maxLengthNumberCount", "focusInput"], outputs: ["maxValueNumberChange", "minValueNumberChange", "fixedFloatChange", "acceptNegativeValueChange", "maxLengthChange", "valueChange", "maxLengthNumberCountChange", "outHeightAreaChange", "outChange", "outFocusAndBlurEvent", "outEnterEvent", "outInputEvent", "outIconLeft", "outIconRight", "outFunctionsControl", "outFilesDrop", "outFileDrop", "outChangeValueByButtonUpDown"] }, { 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: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder", "dataComponentOutlet", "componentOutlet"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabel", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon", "dataComponentOutlet", "componentOutlet"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-inputs-valid.mjs","sources":["../../../../../../libs-ui/components/inputs/valid/src/valid.component.ts","../../../../../../libs-ui/components/inputs/valid/src/valid.component.html","../../../../../../libs-ui/components/inputs/valid/src/libs-ui-components-inputs-valid.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, TemplateRef, effect, input, model, output, signal, untracked, viewChild } from '@angular/core';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsCheckboxSingleComponent } from '@libs-ui/components-checkbox-single';\nimport { IFocusAndBlurEvent, IInputFunctionControlEvent, LibsUiComponentsInputsInputComponent, TYPE_DATA_TYPE_INPUT, TYPE_INPUT, TYPE_INPUT_RESIZE_MODE, TYPE_MODE_INPUT, TYPE_TAG_INPUT } from '@libs-ui/components-inputs-input';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';\nimport { ISwitchEvent } from '@libs-ui/components-switch';\nimport { IBoundingClientRect, IEvent, IMessageTranslate, TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MIN_VALID, ERROR_MESSAGE_PATTEN_VALID, get, isNil, set, viewDataNumberByLanguage } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { IInputValidFunctionControlEvent } from './interfaces/function-control-event.interface';\nimport { IInputValidUnitConfig, IValidLength, IValidPattern, IValidRequired, TYPE_FUNCTION_INPUT_VALID } from './interfaces/valid.interface';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-valid',\n templateUrl: './valid.component.html',\n styleUrls: ['./valid.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule, LibsUiComponentsInputsInputComponent, LibsUiComponentsLabelComponent, LibsUiComponentsCheckboxSingleComponent, LibsUiComponentsRadioSingleComponent, LibsUiComponentsPopoverComponent],\n})\nexport class LibsUiComponentsInputsValidComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n protected value = signal<any>(null);\n protected singleError = signal<IMessageTranslate>({ message: undefined, interpolateParams: undefined });\n protected rectLeft = signal<IBoundingClientRect | undefined>(undefined);\n protected calledEffect = signal<boolean>(false);\n private readonly timer = signal<number>(0);\n private readonly timerValueChange = signal<number>(0);\n private functionControlInput: IInputFunctionControlEvent | undefined;\n\n // #region INPUT\n readonly item = model.required<Record<string, any>>({});\n readonly labelConfig = input<ILabel>();\n readonly emitEmptyInDataTypeNumber = input<boolean>();\n readonly ignoreBlockInputMaxValue = input<boolean>();\n readonly fieldNameBind = input.required<string>();\n readonly showCount = input<boolean>();\n\n readonly typeComponentSelectItem = input<'radio' | 'checkbox' | undefined>();\n readonly valueComponentSelectItem = input<boolean>();\n readonly disableComponentSelectItem = input<boolean>();\n\n readonly tagInput = input<TYPE_TAG_INPUT>();\n readonly dataType = input<TYPE_DATA_TYPE_INPUT>();\n readonly typeInput = input<TYPE_INPUT>();\n readonly modeInput = input<TYPE_MODE_INPUT>();\n readonly resetAutoCompletePassword = input<boolean>();\n readonly textAreaEnterNotNewLine = input<boolean>();\n readonly fixedFloat = input<number>();\n readonly acceptNegativeValue = input<boolean>();\n readonly valueUpDownNumber = input<number | undefined>();\n readonly ignoreWidthInput100 = input<boolean>();\n readonly classIncludeInput = input<string>();\n readonly classContainerInput = input<string>();\n readonly readonly = input<boolean>();\n readonly disable = input<boolean>();\n readonly noBorder = input<boolean>();\n readonly backgroundNone = input<boolean>();\n readonly useColorModeExist = input<boolean>();\n readonly placeholder = input<string>();\n readonly keepPlaceholderOnly = input<boolean>();\n\n readonly classContainerBottomInput = input<string>();\n readonly autoRemoveEmoji = input<boolean>();\n readonly defaultHeight = input<number>();\n readonly maxHeightTextArea = input<number>();\n readonly minHeightTextArea = input<number>();\n /**\n * @deprecated Không sử dụng input này. Sử dụng {@link ignoreShowMessageError} thay thế\n * nếu vẫn muốn hiển thị border đỏ nhưng không show message lỗi.\n */\n readonly ignoreShowError = input<boolean>();\n /** Ẩn message lỗi nhưng vẫn hiển thị border đỏ khi có lỗi */\n readonly ignoreShowMessageError = input<boolean>();\n /** Luôn hiển thị border đỏ bất kể trạng thái lỗi */\n readonly borderError = input<boolean>();\n\n readonly iconLeftClass = input<string>();\n readonly popoverContentIconLeft = input<string>();\n readonly iconRightClass = input<string>();\n readonly popoverContentIconRight = input<string>();\n readonly zIndexPopoverContent = input<number>();\n\n readonly unitsLeft = input<Array<any>>();\n readonly configUnitLeft = input<IInputValidUnitConfig>({\n fieldKey: 'id',\n fieldLabel: 'label',\n });\n readonly keySelectedUnitLeft = input<any>();\n\n readonly unitsRight = input<Array<any>>();\n readonly configUnitRight = input<IInputValidUnitConfig, IInputValidUnitConfig | undefined>(\n {\n fieldKey: 'id',\n fieldLabel: 'label',\n },\n {\n transform: (value) =>\n value ?? {\n fieldKey: 'id',\n fieldLabel: 'label',\n },\n }\n );\n readonly keySelectedUnitRight = input<any>();\n\n readonly maxValueNumber = input<number>();\n readonly minValueNumber = input<number>();\n\n readonly ignoreContentLeft = input<boolean>();\n readonly ignoreContentRight = input<boolean>();\n /** Căn align-items-baseline — dùng khi cần căn input thẳng hàng với các phần tử khác dù có validate */\n readonly isBaselineStyle = input<boolean>();\n\n /** Mặc định khi test pattern trả về giá trị bằng false sẽ báo lỗi */\n readonly valuePatternShowError = input<boolean, boolean | undefined>(false, { transform: (value) => value ?? false });\n readonly validPattern = input<Array<IValidPattern>>();\n readonly validRequired = input<IValidRequired>();\n readonly validMinLength = input<IValidLength>();\n readonly validMinValue = input<IMessageTranslate>();\n readonly validMaxValue = input<IMessageTranslate>();\n readonly validMaxLength = input<IMessageTranslate>();\n readonly functionValid = input<TYPE_FUNCTION_INPUT_VALID>();\n readonly maxLength = input<number>();\n /** Hiển thị message lỗi bắt đầu từ vị trí ô input thay vì từ template trái */\n readonly positionMessageErrorStartInput = input<boolean>();\n readonly classInclude = input<string>();\n readonly resize = input<TYPE_INPUT_RESIZE_MODE>();\n readonly templateLeftBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly templateRightBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly onlyAcceptNegativeValue = input<boolean>();\n readonly autoAddZeroLessThan10InTypeInt = input<boolean>();\n readonly maxLengthNumberCount = input<number>();\n readonly classMessageErrorInclude = input<string>();\n readonly ignoreStopPropagationEvent = input<boolean>();\n readonly ignoreUnitRightClassReadOnly = input<boolean>();\n /** Custom padding-right khi count không tự tính được (#52185) */\n readonly paddingRightCustomSpecific = input<number>();\n readonly focusTimeOut = input<number>();\n readonly debounceTimeValidate = input<number, number | undefined>(0, { transform: (value) => value ?? 0 });\n\n // #region OUTPUT\n readonly outValueChange = output<any>();\n readonly outSelect = output<boolean>();\n readonly outIconLeft = output<string>();\n readonly outIconRight = output<string>();\n readonly outClickButtonLabel = output<IButton>();\n readonly outSwitchEventLabel = output<ISwitchEvent>();\n readonly outLabelRightClick = output<boolean>();\n readonly outEnterInputEvent = output<IEvent>();\n readonly outHeightAreaChange = output<{ isChange: boolean }>();\n readonly outFunctionsControl = output<IInputValidFunctionControlEvent>();\n readonly outFocusAndBlur = output<IFocusAndBlurEvent>();\n readonly outChangeValueByButtonUpDown = output<void>();\n\n /* VIEW CHILD */\n readonly elementLeftRef = viewChild<ElementRef>('elementLeftRef');\n\n constructor() {\n effect(() => {\n const dataItem = get(this.item(), '');\n if (!dataItem || typeof dataItem !== 'object' || dataItem instanceof Array || (dataItem instanceof Map && dataItem instanceof WeakMap) || dataItem instanceof Set || dataItem instanceof WeakSet) {\n return;\n }\n untracked(() => {\n this.value.set(get(this.item(), this.fieldNameBind()));\n this.getRectLeft();\n });\n });\n\n const effectClearUpEffect = effect(() => {\n untracked(() => {\n this.calledEffect.set(true);\n });\n effectClearUpEffect.destroy();\n });\n }\n\n ngOnInit() {\n this.outFunctionsControl.emit(this.FunctionsControl);\n }\n\n /* FUNCTIONS */\n public get FunctionsControl(): IInputValidFunctionControlEvent {\n return {\n checkIsValid: this.checkIsValid.bind(this),\n setMessageError: this.setMessageError.bind(this),\n blur: async () => await this.functionControlInput?.blur(),\n focus: async () => await this.functionControlInput?.focus(),\n insertContent: async (data: string | number) => await this.functionControlInput?.insertContent(data),\n resetValue: async () => await this.functionControlInput?.resetValue(),\n currentStateIsValid: this.currentStateIsValid.bind(this),\n getElementValue: this.getElementValue.bind(this),\n checkAndDisableUpDownButton: async (value) => await this.functionControlInput?.checkAndDisableUpDownButton(value),\n selectAllContent: async () => await this.functionControlInput?.selectAllContent(),\n };\n }\n\n private async currentStateIsValid() {\n return !this.singleError().message;\n }\n\n private getElementValue() {\n return this.functionControlInput?.getElementValue();\n }\n\n protected handlerSelect(value: boolean) {\n this.outSelect.emit(value);\n }\n protected handlerValueChange(value: string | number) {\n set(this.item(), this.fieldNameBind(), value);\n\n // Support trường hợp call API hoặc validate cần xử lý check tốn nhiều thời gian thì cần debound time để tránh call liên tục\n clearTimeout(this.timerValueChange());\n this.timerValueChange.set(\n setTimeout(() => {\n this.validate(value);\n this.outValueChange.emit(value);\n }, this.debounceTimeValidate())\n );\n }\n\n protected handlerEventIconLeft(eventName: string) {\n this.outIconLeft.emit(eventName);\n }\n\n protected handlerEventIconRight(eventName: string) {\n this.outIconRight.emit(eventName);\n }\n\n protected handlerClickButtonLabel(button: IButton) {\n this.outClickButtonLabel.emit(button);\n }\n\n protected handlerSwitchLabel(toggleEvent: ISwitchEvent) {\n this.outSwitchEventLabel.emit(toggleEvent);\n }\n\n protected handlerEventLabelRightLabel() {\n this.outLabelRightClick.emit(true);\n }\n\n protected handlerEnterInput(e: IEvent) {\n this.outEnterInputEvent.emit(e);\n }\n\n protected handlerHeightAreaChange(event: { isChange: boolean }) {\n this.outHeightAreaChange.emit(event);\n }\n\n private async validate(value: string | number) {\n this.getRectLeft();\n this.singleError.update((obj) => ({ ...obj, message: undefined }));\n if (this.validRequired() && this.validRequired()?.isRequired && ((typeof value === 'string' && !value.trim()) || (typeof value !== 'string' && isNil(value)))) {\n this.singleError.set({ message: this.validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID, interpolateParams: this.validRequired()?.interpolateParams || {} });\n\n return;\n }\n if (typeof value === 'string' && this.validMinLength()?.message && (this.validMinLength()?.length || 0) > value.length) {\n this.singleError.set({ message: this.validMinLength()?.message || ERROR_MESSAGE_MIN_LENGTH, interpolateParams: this.validMinLength()?.interpolateParams || {} });\n\n return;\n }\n if (typeof value === 'string' && this.validPattern()?.length && value?.trim()) {\n for (const valid of this.validPattern() || []) {\n if (!valid.pattern) {\n continue;\n }\n const pattern = `${valid.pattern}`;\n const indexOfSlash = pattern.lastIndexOf('/');\n\n if (!indexOfSlash) {\n continue;\n }\n const patternStr = pattern.substring(1, indexOfSlash);\n const patternFlag = pattern.substring(indexOfSlash + 1, pattern.length);\n\n if (new RegExp(patternStr, patternFlag).test(value) === (valid.valuePatternShowError ?? this.valuePatternShowError())) {\n this.singleError.set({ message: valid.message || ERROR_MESSAGE_PATTEN_VALID, interpolateParams: valid.interpolateParams || {} });\n return;\n }\n }\n }\n if (this.validMinValue() && typeof value === 'number' && typeof this.minValueNumber() === 'number' && value < (this.minValueNumber() ?? Number.MIN_SAFE_INTEGER)) {\n this.singleError.set({ message: this.validMinValue()?.message || ERROR_MESSAGE_MIN_VALID, interpolateParams: this.validMinValue()?.interpolateParams || { value: this.minValueNumber() } });\n return;\n }\n\n if ((this.ignoreBlockInputMaxValue() || this.validMaxValue()?.message) && typeof value === 'number' && typeof this.maxValueNumber() === 'number' && value > (this.maxValueNumber() ?? Number.MAX_SAFE_INTEGER)) {\n this.singleError.set({ message: this.validMaxValue()?.message || ERROR_MESSAGE_MAX_VALID, interpolateParams: this.validMaxValue()?.interpolateParams || { value: this.maxValueNumber() } });\n return;\n }\n\n if (this.dataType() === 'bigint' && typeof value === 'string') {\n const maxMinValue = (BigInt(922) * BigInt(10) ** BigInt(18)) / BigInt(100);\n const [int, decimal] = value.split('.');\n let valueDivided = BigInt(1);\n for (let index = 0; index < (decimal?.length || 0); index++) {\n valueDivided *= BigInt(10);\n }\n\n const valueCompare = BigInt(`${int}${decimal || ''}`) * (BigInt(10000) / valueDivided);\n\n if (valueCompare < -maxMinValue) {\n this.singleError.set({\n message: this.validMinValue()?.message || ERROR_MESSAGE_MIN_VALID,\n interpolateParams: this.validMinValue()?.interpolateParams || { value: viewDataNumberByLanguage(`-${maxMinValue / BigInt(10000)}`, true, 4, true, true) },\n });\n return;\n }\n\n if (valueCompare > maxMinValue) {\n this.singleError.set({\n message: this.validMaxValue()?.message || ERROR_MESSAGE_MAX_VALID,\n interpolateParams: this.validMaxValue()?.interpolateParams || { value: viewDataNumberByLanguage(`${maxMinValue / BigInt(10000)}`, true, 4, true, true) },\n });\n return;\n }\n }\n\n if (this.maxLength && typeof value === 'string' && (this.maxLength() || Number.MAX_SAFE_INTEGER) < value.length) {\n this.singleError.set({ message: this.validMaxLength()?.message || ERROR_MESSAGE_MAX_LENGTH, interpolateParams: this.validMaxLength()?.interpolateParams || { number: this.maxLength() } });\n\n return;\n }\n\n if (!this.functionValid()) {\n return;\n }\n\n const result: any = this.functionValid()?.(value);\n\n if (result?.then) {\n this.singleError.set(await result);\n\n return;\n }\n this.singleError.set(result);\n }\n\n private async checkIsValid() {\n if (this.item() && (this.readonly() || this.disable())) {\n return true;\n }\n clearTimeout(this.timerValueChange());\n await this.validate(get(this.item, this.fieldNameBind()));\n\n return !this.singleError().message;\n }\n\n private async setMessageError(message: string) {\n this.singleError.update((obj) => ({ ...obj, message }));\n }\n\n protected handlerControlFunctionInput(event: IInputFunctionControlEvent) {\n this.functionControlInput = event;\n }\n\n protected handlerFocusAndBlur(event: IFocusAndBlurEvent) {\n this.outFocusAndBlur.emit(event);\n }\n\n private getRectLeft() {\n if (!this.rectLeft() || this.positionMessageErrorStartInput()) {\n this.timer.set(\n setTimeout(() => {\n this.rectLeft.set(this.elementLeftRef()?.nativeElement.getBoundingClientRect());\n })\n );\n }\n }\n\n protected handlerChangeValueByButtonUpDown() {\n this.outChangeValueByButtonUpDown.emit();\n }\n\n ngOnDestroy() {\n clearTimeout(this.timer());\n clearTimeout(this.timerValueChange());\n }\n}\n","@if (fieldNameBind() && item(); as item) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"disable() || labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsRight]=\"disable() || labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"disable() || labelConfig.toggleDisable\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"value()?.length\"\n (outClickButton)=\"handlerClickButtonLabel($event)\"\n (outSwitchEvent)=\"handlerSwitchLabel($event)\"\n (outLabelRightClick)=\"handlerEventLabelRightLabel()\" />\n }\n <div\n [class]=\"'libs-ui-input-valid w-full ' + (classInclude() ?? '')\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (!ignoreContentLeft()) {\n <div\n #elementLeftRef\n class=\"libs-ui-input-valid-left\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (typeComponentSelectItem(); as typeComponentSelectItem) {\n <div class=\"mr-[8px]\">\n @if (typeComponentSelectItem === 'checkbox') {\n <libs_ui-components-checkbox-single\n [checked]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.checked)\" />\n }\n @if (typeComponentSelectItem === 'radio') {\n <libs_ui-components-radio-single\n [active]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.active)\" />\n }\n </div>\n }\n\n <ng-content select=\".libs-ui-input-valid-left-content-custom\" />\n @for (unit of unitsLeft(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-left !rounded-tr-none !rounded-br-none libs-ui-font-h5r {{ configUnitLeft().classInclude || '' }}\"\n [class.!flex]=\"unit[configUnitLeft().fieldKey] === keySelectedUnitLeft()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [class.libs-ui-disable]=\"disable() || false\">\n @let constHtmlLabel = unit[configUnitLeft().fieldLabel || 'label'] || ' ';\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', zIndex: zIndexPopoverContent() }\"\n [innerHtml]=\"constHtmlLabel | translate\" />\n </div>\n }\n </div>\n }\n @if (calledEffect() === true) {\n <libs_ui-components-inputs-input\n [tagInput]=\"tagInput()\"\n [dataType]=\"dataType() || 'string'\"\n [typeInput]=\"typeInput()\"\n [modeInput]=\"modeInput()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [textAreaEnterNotNewLine]=\"textAreaEnterNotNewLine() || false\"\n [classInclude]=\"(classIncludeInput() || '') + (unitsLeft() && unitsLeft()?.length ? ' !rounded-tl-none !rounded-bl-none' : '') + (unitsRight()?.length ? ' !rounded-tr-none !rounded-br-none' : '')\"\n [maxValueNumber]=\"maxValueNumber()\"\n [minValueNumber]=\"minValueNumber()\"\n [fixedFloat]=\"fixedFloat() ?? 1\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxLength]=\"maxLength()\"\n [showCount]=\"showCount()\"\n [readonly]=\"readonly()\"\n [disable]=\"disable()\"\n [autoAddZeroLessThan10InTypeInt]=\"autoAddZeroLessThan10InTypeInt()\"\n [noBorder]=\"noBorder()\"\n [backgroundNone]=\"backgroundNone()\"\n [useColorModeExist]=\"useColorModeExist()\"\n [placeholder]=\"placeholder() || ''\"\n [keepPlaceholderOnly]=\"keepPlaceholderOnly()\"\n [autoRemoveEmoji]=\"autoRemoveEmoji()\"\n [defaultHeight]=\"defaultHeight()\"\n [maxHeightTextArea]=\"maxHeightTextArea() || 250\"\n [minHeightTextArea]=\"minHeightTextArea()\"\n [borderError]=\"borderError() || (!!singleError().message && !ignoreShowError())\"\n [iconLeftClass]=\"iconLeftClass()\"\n [popoverContentIconLeft]=\"popoverContentIconLeft()\"\n [popoverContentIconRight]=\"popoverContentIconRight()\"\n [iconRightClass]=\"iconRightClass()\"\n [zIndexPopoverContent]=\"zIndexPopoverContent()\"\n [emitEmptyInDataTypeNumber]=\"emitEmptyInDataTypeNumber()\"\n [ignoreBlockInputMaxValue]=\"!!ignoreBlockInputMaxValue() ? ignoreBlockInputMaxValue() : validMaxValue()?.message ? true : false\"\n [(value)]=\"value\"\n [classContainerInput]=\"classContainerInput()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n [resize]=\"resize()\"\n [classContainerBottomInput]=\"classContainerBottomInput()\"\n [templateLeftBottomInput]=\"templateLeftBottomInput()\"\n [templateRightBottomInput]=\"templateRightBottomInput()\"\n [maxLengthNumberCount]=\"maxLengthNumberCount()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [focusTimeOut]=\"focusTimeOut()\"\n (valueChange)=\"handlerValueChange($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outHeightAreaChange)=\"handlerHeightAreaChange($event)\"\n (outFunctionsControl)=\"handlerControlFunctionInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\"\n (outChangeValueByButtonUpDown)=\"handlerChangeValueByButtonUpDown()\" />\n }\n @if (!ignoreContentRight()) {\n <div\n class=\"libs-ui-input-valid-right\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @for (unit of unitsRight(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-right !rounded-tl-none !rounded-bl-none libs-ui-font-h5r {{ configUnitRight().classInclude || 'libs-ui-border-general' }}\"\n [class.!flex]=\"unit[configUnitRight().fieldKey] === keySelectedUnitRight()\"\n [class.libs-ui-readonly]=\"!ignoreUnitRightClassReadOnly() && (readonly() || false)\">\n @let constHtmlLabel = unit[configUnitRight().fieldLabel || 'label'] || ' ';\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', zIndex: zIndexPopoverContent() }\"\n [innerHtml]=\"constHtmlLabel | translate\" />\n </div>\n }\n <ng-content select=\".libs-ui-input-valid-right-content-custom\"></ng-content>\n </div>\n }\n </div>\n @if (!!singleError().message && !ignoreShowError() && !ignoreShowMessageError()) {\n <div class=\"libs-ui-input-valid-error {{ classMessageErrorInclude() || '' }}\">\n @let constHtmlMessage = singleError().message || ' ';\n <span\n class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\"\n [style.marginLeft.px]=\"rectLeft()?.width\"\n [innerHtml]=\"constHtmlMessage | translate: singleError().interpolateParams\"></span>\n </div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-inputs-valid.mjs","sources":["../../../../../../libs-ui/components/inputs/valid/src/valid.component.ts","../../../../../../libs-ui/components/inputs/valid/src/valid.component.html","../../../../../../libs-ui/components/inputs/valid/src/libs-ui-components-inputs-valid.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, TemplateRef, effect, input, model, output, signal, untracked, viewChild } from '@angular/core';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsCheckboxSingleComponent } from '@libs-ui/components-checkbox-single';\nimport { IFocusAndBlurEvent, IInputFunctionControlEvent, LibsUiComponentsInputsInputComponent, TYPE_DATA_TYPE_INPUT, TYPE_INPUT, TYPE_INPUT_RESIZE_MODE, TYPE_MODE_INPUT, TYPE_TAG_INPUT } from '@libs-ui/components-inputs-input';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';\nimport { ISwitchEvent } from '@libs-ui/components-switch';\nimport { IBoundingClientRect, IEvent, IMessageTranslate, TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MIN_VALID, ERROR_MESSAGE_PATTEN_VALID, get, isNil, set, viewDataNumberByLanguage } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { IInputValidFunctionControlEvent } from './interfaces/function-control-event.interface';\nimport { IInputValidUnitConfig, IValidLength, IValidPattern, IValidRequired, TYPE_FUNCTION_INPUT_VALID } from './interfaces/valid.interface';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-valid',\n templateUrl: './valid.component.html',\n styleUrls: ['./valid.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule, LibsUiComponentsInputsInputComponent, LibsUiComponentsLabelComponent, LibsUiComponentsCheckboxSingleComponent, LibsUiComponentsRadioSingleComponent, LibsUiComponentsPopoverComponent],\n})\nexport class LibsUiComponentsInputsValidComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n protected value = signal<any>(null);\n protected singleError = signal<IMessageTranslate>({ message: undefined, interpolateParams: undefined });\n protected rectLeft = signal<IBoundingClientRect | undefined>(undefined);\n protected calledEffect = signal<boolean>(false);\n private timer?: ReturnType<typeof setTimeout>;\n private timerValueChange?: ReturnType<typeof setTimeout>;\n private functionControlInput: IInputFunctionControlEvent | undefined;\n\n // #region INPUT\n readonly item = model.required<Record<string, any>>({});\n readonly labelConfig = input<ILabel>();\n readonly emitEmptyInDataTypeNumber = input<boolean>();\n readonly ignoreBlockInputMaxValue = input<boolean>();\n readonly fieldNameBind = input.required<string>();\n readonly showCount = input<boolean>();\n\n readonly typeComponentSelectItem = input<'radio' | 'checkbox' | undefined>();\n readonly valueComponentSelectItem = input<boolean>();\n readonly disableComponentSelectItem = input<boolean>();\n\n readonly tagInput = input<TYPE_TAG_INPUT>();\n readonly dataType = input<TYPE_DATA_TYPE_INPUT>();\n readonly typeInput = input<TYPE_INPUT>();\n readonly modeInput = input<TYPE_MODE_INPUT>();\n readonly resetAutoCompletePassword = input<boolean>();\n readonly textAreaEnterNotNewLine = input<boolean>();\n readonly fixedFloat = input<number>();\n readonly acceptNegativeValue = input<boolean>();\n readonly valueUpDownNumber = input<number | undefined>();\n readonly ignoreWidthInput100 = input<boolean>();\n readonly classIncludeInput = input<string>();\n readonly classContainerInput = input<string>();\n readonly readonly = input<boolean>();\n readonly disable = input<boolean>();\n readonly noBorder = input<boolean>();\n readonly backgroundNone = input<boolean>();\n readonly useColorModeExist = input<boolean>();\n readonly placeholder = input<string>();\n readonly keepPlaceholderOnly = input<boolean>();\n\n readonly classContainerBottomInput = input<string>();\n readonly autoRemoveEmoji = input<boolean>();\n readonly defaultHeight = input<number>();\n readonly maxHeightTextArea = input<number>();\n readonly minHeightTextArea = input<number>();\n /**\n * @deprecated Không sử dụng input này. Sử dụng {@link ignoreShowMessageError} thay thế\n * nếu vẫn muốn hiển thị border đỏ nhưng không show message lỗi.\n */\n readonly ignoreShowError = input<boolean>();\n /** Ẩn message lỗi nhưng vẫn hiển thị border đỏ khi có lỗi */\n readonly ignoreShowMessageError = input<boolean>();\n /** Luôn hiển thị border đỏ bất kể trạng thái lỗi */\n readonly borderError = input<boolean>();\n\n readonly iconLeftClass = input<string>();\n readonly popoverContentIconLeft = input<string>();\n readonly iconRightClass = input<string>();\n readonly popoverContentIconRight = input<string>();\n readonly zIndexPopoverContent = input<number>();\n\n readonly unitsLeft = input<Array<any>>();\n readonly configUnitLeft = input<IInputValidUnitConfig>({\n fieldKey: 'id',\n fieldLabel: 'label',\n });\n readonly keySelectedUnitLeft = input<any>();\n\n readonly unitsRight = input<Array<any>>();\n readonly configUnitRight = input<IInputValidUnitConfig, IInputValidUnitConfig | undefined>(\n {\n fieldKey: 'id',\n fieldLabel: 'label',\n },\n {\n transform: (value) =>\n value ?? {\n fieldKey: 'id',\n fieldLabel: 'label',\n },\n }\n );\n readonly keySelectedUnitRight = input<any>();\n\n readonly maxValueNumber = input<number>();\n readonly minValueNumber = input<number>();\n\n readonly ignoreContentLeft = input<boolean>();\n readonly ignoreContentRight = input<boolean>();\n /** Căn align-items-baseline — dùng khi cần căn input thẳng hàng với các phần tử khác dù có validate */\n readonly isBaselineStyle = input<boolean>();\n\n /** Mặc định khi test pattern trả về giá trị bằng false sẽ báo lỗi */\n readonly valuePatternShowError = input<boolean, boolean | undefined>(false, { transform: (value) => value ?? false });\n readonly validPattern = input<Array<IValidPattern>>();\n readonly validRequired = input<IValidRequired>();\n readonly validMinLength = input<IValidLength>();\n readonly validMinValue = input<IMessageTranslate>();\n readonly validMaxValue = input<IMessageTranslate>();\n readonly validMaxLength = input<IMessageTranslate>();\n readonly functionValid = input<TYPE_FUNCTION_INPUT_VALID>();\n readonly maxLength = input<number>();\n /** Hiển thị message lỗi bắt đầu từ vị trí ô input thay vì từ template trái */\n readonly positionMessageErrorStartInput = input<boolean>();\n readonly classInclude = input<string>();\n readonly resize = input<TYPE_INPUT_RESIZE_MODE>();\n readonly templateLeftBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly templateRightBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly onlyAcceptNegativeValue = input<boolean>();\n readonly autoAddZeroLessThan10InTypeInt = input<boolean>();\n readonly maxLengthNumberCount = input<number>();\n readonly classMessageErrorInclude = input<string>();\n readonly ignoreStopPropagationEvent = input<boolean>();\n readonly ignoreUnitRightClassReadOnly = input<boolean>();\n /** Custom padding-right khi count không tự tính được (#52185) */\n readonly paddingRightCustomSpecific = input<number>();\n readonly focusTimeOut = input<number>();\n readonly debounceTimeValidate = input<number, number | undefined>(0, { transform: (value) => value ?? 0 });\n\n // #region OUTPUT\n readonly outValueChange = output<any>();\n readonly outSelect = output<boolean>();\n readonly outIconLeft = output<string>();\n readonly outIconRight = output<string>();\n readonly outClickButtonLabel = output<IButton>();\n readonly outSwitchEventLabel = output<ISwitchEvent>();\n readonly outLabelRightClick = output<boolean>();\n readonly outEnterInputEvent = output<IEvent>();\n readonly outHeightAreaChange = output<{ isChange: boolean }>();\n readonly outFunctionsControl = output<IInputValidFunctionControlEvent>();\n readonly outFocusAndBlur = output<IFocusAndBlurEvent>();\n readonly outChangeValueByButtonUpDown = output<void>();\n\n /* VIEW CHILD */\n readonly elementLeftRef = viewChild<ElementRef>('elementLeftRef');\n\n constructor() {\n effect(() => {\n const dataItem = get(this.item(), '');\n if (!dataItem || typeof dataItem !== 'object' || dataItem instanceof Array || (dataItem instanceof Map && dataItem instanceof WeakMap) || dataItem instanceof Set || dataItem instanceof WeakSet) {\n return;\n }\n untracked(() => {\n this.value.set(get(this.item(), this.fieldNameBind()));\n this.getRectLeft();\n });\n });\n\n const effectClearUpEffect = effect(() => {\n untracked(() => {\n this.calledEffect.set(true);\n });\n effectClearUpEffect.destroy();\n });\n }\n\n ngOnInit() {\n this.outFunctionsControl.emit(this.FunctionsControl);\n }\n\n /* FUNCTIONS */\n public get FunctionsControl(): IInputValidFunctionControlEvent {\n return {\n checkIsValid: this.checkIsValid.bind(this),\n setMessageError: this.setMessageError.bind(this),\n blur: async () => await this.functionControlInput?.blur(),\n focus: async () => await this.functionControlInput?.focus(),\n insertContent: async (data: string | number) => await this.functionControlInput?.insertContent(data),\n resetValue: async () => await this.functionControlInput?.resetValue(),\n currentStateIsValid: this.currentStateIsValid.bind(this),\n getElementValue: this.getElementValue.bind(this),\n checkAndDisableUpDownButton: async (value) => await this.functionControlInput?.checkAndDisableUpDownButton(value),\n selectAllContent: async () => await this.functionControlInput?.selectAllContent(),\n };\n }\n\n private async currentStateIsValid() {\n return !this.singleError().message;\n }\n\n private getElementValue() {\n return this.functionControlInput?.getElementValue();\n }\n\n protected handlerSelect(value: boolean) {\n this.outSelect.emit(value);\n }\n protected handlerValueChange(value: string | number) {\n set(this.item(), this.fieldNameBind(), value);\n\n // Support trường hợp call API hoặc validate cần xử lý check tốn nhiều thời gian thì cần debounce time để tránh call liên tục\n clearTimeout(this.timerValueChange);\n this.timerValueChange = setTimeout(() => {\n this.validate(value);\n this.outValueChange.emit(value);\n }, this.debounceTimeValidate());\n }\n\n protected handlerEventIconLeft(eventName: string) {\n this.outIconLeft.emit(eventName);\n }\n\n protected handlerEventIconRight(eventName: string) {\n this.outIconRight.emit(eventName);\n }\n\n protected handlerClickButtonLabel(button: IButton) {\n this.outClickButtonLabel.emit(button);\n }\n\n protected handlerSwitchLabel(toggleEvent: ISwitchEvent) {\n this.outSwitchEventLabel.emit(toggleEvent);\n }\n\n protected handlerEventLabelRightLabel() {\n this.outLabelRightClick.emit(true);\n }\n\n protected handlerEnterInput(e: IEvent) {\n this.outEnterInputEvent.emit(e);\n }\n\n protected handlerHeightAreaChange(event: { isChange: boolean }) {\n this.outHeightAreaChange.emit(event);\n }\n\n private async validate(value: string | number) {\n this.getRectLeft();\n this.singleError.update((obj) => ({ ...obj, message: undefined }));\n if (this.validRequired() && this.validRequired()?.isRequired && ((typeof value === 'string' && !value.trim()) || (typeof value !== 'string' && isNil(value)))) {\n this.singleError.set({ message: this.validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID, interpolateParams: this.validRequired()?.interpolateParams || {} });\n\n return;\n }\n if (typeof value === 'string' && this.validMinLength()?.message && (this.validMinLength()?.length || 0) > value.length) {\n this.singleError.set({ message: this.validMinLength()?.message || ERROR_MESSAGE_MIN_LENGTH, interpolateParams: this.validMinLength()?.interpolateParams || {} });\n\n return;\n }\n if (typeof value === 'string' && this.validPattern()?.length && value?.trim()) {\n for (const valid of this.validPattern() || []) {\n if (!valid.pattern) {\n continue;\n }\n const pattern = `${valid.pattern}`;\n const indexOfSlash = pattern.lastIndexOf('/');\n\n if (!indexOfSlash) {\n continue;\n }\n const patternStr = pattern.substring(1, indexOfSlash);\n const patternFlag = pattern.substring(indexOfSlash + 1, pattern.length);\n\n if (new RegExp(patternStr, patternFlag).test(value) === (valid.valuePatternShowError ?? this.valuePatternShowError())) {\n this.singleError.set({ message: valid.message || ERROR_MESSAGE_PATTEN_VALID, interpolateParams: valid.interpolateParams || {} });\n return;\n }\n }\n }\n if (this.validMinValue() && typeof value === 'number' && typeof this.minValueNumber() === 'number' && value < (this.minValueNumber() ?? Number.MIN_SAFE_INTEGER)) {\n this.singleError.set({ message: this.validMinValue()?.message || ERROR_MESSAGE_MIN_VALID, interpolateParams: this.validMinValue()?.interpolateParams || { value: this.minValueNumber() } });\n return;\n }\n\n if ((this.ignoreBlockInputMaxValue() || this.validMaxValue()?.message) && typeof value === 'number' && typeof this.maxValueNumber() === 'number' && value > (this.maxValueNumber() ?? Number.MAX_SAFE_INTEGER)) {\n this.singleError.set({ message: this.validMaxValue()?.message || ERROR_MESSAGE_MAX_VALID, interpolateParams: this.validMaxValue()?.interpolateParams || { value: this.maxValueNumber() } });\n return;\n }\n\n if (this.dataType() === 'bigint' && typeof value === 'string') {\n const maxMinValue = (BigInt(922) * BigInt(10) ** BigInt(18)) / BigInt(100);\n const [int, decimal] = value.split('.');\n let valueDivided = BigInt(1);\n for (let index = 0; index < (decimal?.length || 0); index++) {\n valueDivided *= BigInt(10);\n }\n\n const valueCompare = BigInt(`${int}${decimal || ''}`) * (BigInt(10000) / valueDivided);\n\n if (valueCompare < -maxMinValue) {\n this.singleError.set({\n message: this.validMinValue()?.message || ERROR_MESSAGE_MIN_VALID,\n interpolateParams: this.validMinValue()?.interpolateParams || { value: viewDataNumberByLanguage(`-${maxMinValue / BigInt(10000)}`, true, 4, true, true) },\n });\n return;\n }\n\n if (valueCompare > maxMinValue) {\n this.singleError.set({\n message: this.validMaxValue()?.message || ERROR_MESSAGE_MAX_VALID,\n interpolateParams: this.validMaxValue()?.interpolateParams || { value: viewDataNumberByLanguage(`${maxMinValue / BigInt(10000)}`, true, 4, true, true) },\n });\n return;\n }\n }\n\n if (this.maxLength && typeof value === 'string' && (this.maxLength() || Number.MAX_SAFE_INTEGER) < value.length) {\n this.singleError.set({ message: this.validMaxLength()?.message || ERROR_MESSAGE_MAX_LENGTH, interpolateParams: this.validMaxLength()?.interpolateParams || { number: this.maxLength() } });\n\n return;\n }\n\n if (!this.functionValid()) {\n return;\n }\n\n const result: any = this.functionValid()?.(value);\n\n if (result?.then) {\n this.singleError.set(await result);\n\n return;\n }\n this.singleError.set(result);\n }\n\n private async checkIsValid() {\n if (this.item() && (this.readonly() || this.disable())) {\n return true;\n }\n clearTimeout(this.timerValueChange);\n await this.validate(get(this.item, this.fieldNameBind()));\n\n return !this.singleError().message;\n }\n\n private async setMessageError(message: string) {\n this.singleError.update((obj) => ({ ...obj, message }));\n }\n\n protected handlerControlFunctionInput(event: IInputFunctionControlEvent) {\n this.functionControlInput = event;\n }\n\n protected handlerFocusAndBlur(event: IFocusAndBlurEvent) {\n this.outFocusAndBlur.emit(event);\n }\n\n private getRectLeft() {\n if (!this.rectLeft() || this.positionMessageErrorStartInput()) {\n this.timer = setTimeout(() => {\n this.rectLeft.set(this.elementLeftRef()?.nativeElement.getBoundingClientRect());\n });\n }\n }\n\n protected handlerChangeValueByButtonUpDown() {\n this.outChangeValueByButtonUpDown.emit();\n }\n\n ngOnDestroy() {\n clearTimeout(this.timer);\n clearTimeout(this.timerValueChange);\n }\n}\n","@if (fieldNameBind() && item(); as item) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"disable() || labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsRight]=\"disable() || labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"disable() || labelConfig.toggleDisable\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"value()?.length\"\n (outClickButton)=\"handlerClickButtonLabel($event)\"\n (outSwitchEvent)=\"handlerSwitchLabel($event)\"\n (outLabelRightClick)=\"handlerEventLabelRightLabel()\" />\n }\n <div\n [class]=\"'libs-ui-input-valid w-full ' + (classInclude() ?? '')\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (!ignoreContentLeft()) {\n <div\n #elementLeftRef\n class=\"libs-ui-input-valid-left\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (typeComponentSelectItem(); as typeComponentSelectItem) {\n <div class=\"mr-[8px]\">\n @if (typeComponentSelectItem === 'checkbox') {\n <libs_ui-components-checkbox-single\n [checked]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.checked)\" />\n }\n @if (typeComponentSelectItem === 'radio') {\n <libs_ui-components-radio-single\n [active]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.active)\" />\n }\n </div>\n }\n\n <ng-content select=\".libs-ui-input-valid-left-content-custom\" />\n @for (unit of unitsLeft(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-left !rounded-tr-none !rounded-br-none libs-ui-font-h5r {{ configUnitLeft().classInclude || '' }}\"\n [class.!flex]=\"unit[configUnitLeft().fieldKey] === keySelectedUnitLeft()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [class.libs-ui-disable]=\"disable() || false\">\n @let constHtmlLabel = unit[configUnitLeft().fieldLabel || 'label'] || ' ';\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', zIndex: zIndexPopoverContent() }\"\n [innerHtml]=\"constHtmlLabel | translate\" />\n </div>\n }\n </div>\n }\n @if (calledEffect() === true) {\n <libs_ui-components-inputs-input\n [tagInput]=\"tagInput()\"\n [dataType]=\"dataType() || 'string'\"\n [typeInput]=\"typeInput()\"\n [modeInput]=\"modeInput()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [textAreaEnterNotNewLine]=\"textAreaEnterNotNewLine() || false\"\n [classInclude]=\"(classIncludeInput() || '') + (unitsLeft() && unitsLeft()?.length ? ' !rounded-tl-none !rounded-bl-none' : '') + (unitsRight()?.length ? ' !rounded-tr-none !rounded-br-none' : '')\"\n [maxValueNumber]=\"maxValueNumber()\"\n [minValueNumber]=\"minValueNumber()\"\n [fixedFloat]=\"fixedFloat() ?? 1\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxLength]=\"maxLength()\"\n [showCount]=\"showCount()\"\n [readonly]=\"readonly()\"\n [disable]=\"disable()\"\n [autoAddZeroLessThan10InTypeInt]=\"autoAddZeroLessThan10InTypeInt()\"\n [noBorder]=\"noBorder()\"\n [backgroundNone]=\"backgroundNone()\"\n [useColorModeExist]=\"useColorModeExist()\"\n [placeholder]=\"placeholder() || ''\"\n [keepPlaceholderOnly]=\"keepPlaceholderOnly()\"\n [autoRemoveEmoji]=\"autoRemoveEmoji()\"\n [defaultHeight]=\"defaultHeight()\"\n [maxHeightTextArea]=\"maxHeightTextArea() || 250\"\n [minHeightTextArea]=\"minHeightTextArea()\"\n [borderError]=\"borderError() || (!!singleError().message && !ignoreShowError())\"\n [iconLeftClass]=\"iconLeftClass()\"\n [popoverContentIconLeft]=\"popoverContentIconLeft()\"\n [popoverContentIconRight]=\"popoverContentIconRight()\"\n [iconRightClass]=\"iconRightClass()\"\n [zIndexPopoverContent]=\"zIndexPopoverContent()\"\n [emitEmptyInDataTypeNumber]=\"emitEmptyInDataTypeNumber()\"\n [ignoreBlockInputMaxValue]=\"!!ignoreBlockInputMaxValue() ? ignoreBlockInputMaxValue() : validMaxValue()?.message ? true : false\"\n [(value)]=\"value\"\n [classContainerInput]=\"classContainerInput()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n [resize]=\"resize()\"\n [classContainerBottomInput]=\"classContainerBottomInput()\"\n [templateLeftBottomInput]=\"templateLeftBottomInput()\"\n [templateRightBottomInput]=\"templateRightBottomInput()\"\n [maxLengthNumberCount]=\"maxLengthNumberCount()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [focusTimeOut]=\"focusTimeOut()\"\n (valueChange)=\"handlerValueChange($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outHeightAreaChange)=\"handlerHeightAreaChange($event)\"\n (outFunctionsControl)=\"handlerControlFunctionInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\"\n (outChangeValueByButtonUpDown)=\"handlerChangeValueByButtonUpDown()\" />\n }\n @if (!ignoreContentRight()) {\n <div\n class=\"libs-ui-input-valid-right\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @for (unit of unitsRight(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-right !rounded-tl-none !rounded-bl-none libs-ui-font-h5r {{ configUnitRight().classInclude || 'libs-ui-border-general' }}\"\n [class.!flex]=\"unit[configUnitRight().fieldKey] === keySelectedUnitRight()\"\n [class.libs-ui-readonly]=\"!ignoreUnitRightClassReadOnly() && (readonly() || false)\">\n @let constHtmlLabel = unit[configUnitRight().fieldLabel || 'label'] || ' ';\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', zIndex: zIndexPopoverContent() }\"\n [innerHtml]=\"constHtmlLabel | translate\" />\n </div>\n }\n <ng-content select=\".libs-ui-input-valid-right-content-custom\"></ng-content>\n </div>\n }\n </div>\n @if (!!singleError().message && !ignoreShowError() && !ignoreShowMessageError()) {\n <div class=\"libs-ui-input-valid-error {{ classMessageErrorInclude() || '' }}\">\n @let constHtmlMessage = singleError().message || ' ';\n <span\n class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\"\n [style.marginLeft.px]=\"rectLeft()?.width\"\n [innerHtml]=\"constHtmlMessage | translate: singleError().interpolateParams\"></span>\n </div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libs-ui/components-inputs-valid",
|
|
3
|
-
"version": "0.2.357-
|
|
3
|
+
"version": "0.2.357-9",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/core": ">=18.0.0",
|
|
6
|
-
"@libs-ui/components-inputs-input": "0.2.357-
|
|
7
|
-
"@libs-ui/interfaces-types": "0.2.357-
|
|
8
|
-
"@libs-ui/components-buttons-button": "0.2.357-
|
|
9
|
-
"@libs-ui/components-checkbox-single": "0.2.357-
|
|
10
|
-
"@libs-ui/components-label": "0.2.357-
|
|
11
|
-
"@libs-ui/components-popover": "0.2.357-
|
|
12
|
-
"@libs-ui/components-radio-single": "0.2.357-
|
|
13
|
-
"@libs-ui/components-switch": "0.2.357-
|
|
14
|
-
"@libs-ui/utils": "0.2.357-
|
|
6
|
+
"@libs-ui/components-inputs-input": "0.2.357-9",
|
|
7
|
+
"@libs-ui/interfaces-types": "0.2.357-9",
|
|
8
|
+
"@libs-ui/components-buttons-button": "0.2.357-9",
|
|
9
|
+
"@libs-ui/components-checkbox-single": "0.2.357-9",
|
|
10
|
+
"@libs-ui/components-label": "0.2.357-9",
|
|
11
|
+
"@libs-ui/components-popover": "0.2.357-9",
|
|
12
|
+
"@libs-ui/components-radio-single": "0.2.357-9",
|
|
13
|
+
"@libs-ui/components-switch": "0.2.357-9",
|
|
14
|
+
"@libs-ui/utils": "0.2.357-9",
|
|
15
15
|
"@ngx-translate/core": "^15.0.0"
|
|
16
16
|
},
|
|
17
17
|
"sideEffects": false,
|
package/valid.component.d.ts
CHANGED
|
@@ -12,8 +12,8 @@ export declare class LibsUiComponentsInputsValidComponent implements OnInit, OnD
|
|
|
12
12
|
protected singleError: import("@angular/core").WritableSignal<IMessageTranslate>;
|
|
13
13
|
protected rectLeft: import("@angular/core").WritableSignal<IBoundingClientRect | undefined>;
|
|
14
14
|
protected calledEffect: import("@angular/core").WritableSignal<boolean>;
|
|
15
|
-
private
|
|
16
|
-
private
|
|
15
|
+
private timer?;
|
|
16
|
+
private timerValueChange?;
|
|
17
17
|
private functionControlInput;
|
|
18
18
|
readonly item: import("@angular/core").ModelSignal<Record<string, any>>;
|
|
19
19
|
readonly labelConfig: import("@angular/core").InputSignal<ILabel | undefined>;
|