@updevs/components 1.0.0-alpha.80 → 1.0.0-alpha.82

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.
@@ -152,7 +152,7 @@ export class DynamicFieldComponent extends BaseComponent {
152
152
  }
153
153
  }
154
154
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DynamicFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
155
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: DynamicFieldComponent, selector: "upd-dynamic-field", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { submitForm: "submitForm" }, host: { properties: { "class": "this.hostClasses" } }, usesInheritance: true, ngImport: i0, template: "@switch (field().type) {\n @case (DynamicFieldType.Input) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\" [isDisabled]=\"field().isDisabled || false\"\n [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\" [value]=\"formControl.value\"\n (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case (DynamicFieldType.Checkbox) {\n <upd-checkbox [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isDisabled]=\"field().isDisabled || false\" [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n [isSwitch]=\"checkboxField.isSwitch || false\" (changed)=\"setControlValue($event)\"></upd-checkbox>\n }\n @case (DynamicFieldType.CheckboxGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of checkboxGroupOptionsKeys; track option) {\n <upd-checkbox [name]=\"field().name\" [label]=\"getOptionDescription(option, 'checkbox')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\" [isSwitch]=\"checkboxField.isSwitch || false\"\n (changed)=\"setControlValue(option)\"></upd-checkbox>\n }\n }\n @case (DynamicFieldType.Radio) {\n <upd-radio [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isChecked]=\"formControl.value\" [isDisabled]=\"field().isDisabled || false\" [isInline]=\"radioField.isInline || false\"\n (selected)=\"setControlValue($event)\">\n </upd-radio>\n }\n @case (DynamicFieldType.RadioGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of radioGroupOptionsKeys; track option) {\n <upd-radio [name]=\"field().name\" [label]=\"getOptionDescription(option, 'radio')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n (selected)=\"setControlValue(option)\"></upd-radio>\n }\n }\n @case (DynamicFieldType.Select) {\n <upd-select [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\"\n [useSystemStyle]=\"singleSelectField.useSystemStyle || false\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n [shouldTruncateSelectedText]=\"selectField.shouldTruncateSelectedText\" [parentValue]=\"selectField.parentValue\"\n [value]=\"formControl.value\" (selectedItem)=\"setControlValue($event?.value)\"></upd-select>\n }\n @case (DynamicFieldType.SelectMultiple) {\n <upd-select-multiple [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\" [parentValue]=\"selectField.parentValue\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n [selectedValues]=\"formControl.value\" (selectedIds)=\"setControlValue($event)\"></upd-select-multiple>\n }\n @case (DynamicFieldType.Label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n @case (DynamicFieldType.TextArea) {\n <upd-textarea [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [value]=\"formControl.value\" [customClasses]=\"textareaField.customClasses\" [wrapperClasses]=\"textareaField.wrapperClasses\"\n [maxLength]=\"textareaField.maxLength\" [rows]=\"textareaField.rows\"\n [displayCharactersCount]=\"textareaField.displayCharactersCount || false\" (valueChange)=\"setControlValue($event)\">\n </upd-textarea>\n }\n @case (DynamicFieldType.FileUpload) {\n <upd-file-upload [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [isDisabled]=\"field().isDisabled || false\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [fileName]=\"fileNameControl?.value\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [allowFilesDrop]=\"fileUploadField.allowFilesDrop || false\"\n [title]=\"fileUploadField.title\" [labelColSize]=\"field().labelColSize\" [minFileSize]=\"fileUploadField.minFileSize\"\n [isMultiple]=\"fileUploadField.isMultiple || false\" [allowedExtensions]=\"fileUploadField.allowedExtensions || '*'\"\n [maxFileSize]=\"fileUploadField.maxFileSize\" [layout]=\"layout()\" (fileChanged)=\"handleFileSelected($event)\"></upd-file-upload>\n }\n @case (DynamicFieldType.MaskedInput) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [mask]=\"maskedField.mask\"\n [maskConfig]=\"maskedField.maskConfig\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\"\n [isDisabled]=\"field().isDisabled || false\" [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\"\n [value]=\"formControl.value\" (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case(DynamicFieldType.Button) {\n <upd-button [text]=\"field().label\" [isDisabled]=\"field().isDisabled || false\" [model]=\"buttonField.model\" />\n }\n @case(DynamicFieldType.ButtonGroup) {\n @if(!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n <div class=\"btn-group\" role=\"group\">\n @for (btn of buttonGroupField.buttons; track btn) {\n <upd-button [model]=\"btn\" [isDisabled]=\"field().isDisabled || false\" />\n }\n </div>\n }\n}", styles: [""], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i2.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "maxLength", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "directive", type: i2.InputAppendDirective, selector: "ng-template[updInputAppend]" }, { kind: "directive", type: i2.InputPrependDirective, selector: "ng-template[updInputPrepend]" }, { kind: "component", type: i3.CheckboxComponent, selector: "upd-checkbox", inputs: ["wrapperClasses", "value", "customClasses", "isChecked", "isInline", "isSwitch", "isIndeterminate"], outputs: ["changed", "isCheckedChange", "isIndeterminateChange"] }, { kind: "component", type: i4.RadioComponent, selector: "upd-radio", inputs: ["wrapperClasses", "value", "customClasses", "isChecked", "isInline"], outputs: ["selected"] }, { kind: "component", type: i5.SelectComponent, selector: "upd-select", inputs: ["useSystemStyle", "shouldShowClearButton", "shouldTruncateSelectedText", "isCompact", "value"], outputs: ["selectedItem"] }, { kind: "component", type: i5.SelectMultipleComponent, selector: "upd-select-multiple", inputs: ["selectedValues"], outputs: ["selectedItems", "selectedIds"] }, { kind: "component", type: i6.TextareaComponent, selector: "upd-textarea", inputs: ["value", "customClasses", "wrapperClasses", "maxLength", "rows", "displayCharactersCount"], outputs: ["valueChange"] }, { kind: "component", type: i7.FileUploadComponent, selector: "upd-file-upload", inputs: ["fileName", "title", "allowFilesDrop", "isMultiple", "allowedExtensions", "minFileSize", "maxFileSize", "layout"], outputs: ["fileChanged"] }] }); }
155
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: DynamicFieldComponent, selector: "upd-dynamic-field", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { submitForm: "submitForm" }, host: { properties: { "class": "this.hostClasses" } }, usesInheritance: true, ngImport: i0, template: "@switch (field().type) {\n @case (DynamicFieldType.Input) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\" [isDisabled]=\"field().isDisabled || false\"\n [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\" [value]=\"formControl.value\"\n (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case (DynamicFieldType.Checkbox) {\n <upd-checkbox [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isDisabled]=\"field().isDisabled || false\" [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n [isSwitch]=\"checkboxField.isSwitch || false\" (changed)=\"setControlValue($event)\"></upd-checkbox>\n }\n @case (DynamicFieldType.CheckboxGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of checkboxGroupOptionsKeys; track option) {\n <upd-checkbox [name]=\"field().name\" [label]=\"getOptionDescription(option, 'checkbox')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\" [isSwitch]=\"checkboxField.isSwitch || false\"\n (changed)=\"setControlValue(option)\"></upd-checkbox>\n }\n }\n @case (DynamicFieldType.Radio) {\n <upd-radio [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isChecked]=\"formControl.value\" [isDisabled]=\"field().isDisabled || false\" [isInline]=\"radioField.isInline || false\"\n (selected)=\"setControlValue($event)\">\n </upd-radio>\n }\n @case (DynamicFieldType.RadioGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of radioGroupOptionsKeys; track option) {\n <upd-radio [name]=\"field().name\" [label]=\"getOptionDescription(option, 'radio')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n (selected)=\"setControlValue(option)\"></upd-radio>\n }\n }\n @case (DynamicFieldType.Select) {\n <upd-select [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\"\n [useSystemStyle]=\"singleSelectField.useSystemStyle || false\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n [shouldTruncateSelectedText]=\"selectField.shouldTruncateSelectedText\" [parentValue]=\"selectField.parentValue\"\n [value]=\"formControl.value\" (selectedItem)=\"setControlValue($event?.value)\"></upd-select>\n }\n @case (DynamicFieldType.SelectMultiple) {\n <upd-select-multiple [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\" [parentValue]=\"selectField.parentValue\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n [selectedValues]=\"formControl.value\" (selectedIds)=\"setControlValue($event)\"></upd-select-multiple>\n }\n @case (DynamicFieldType.Label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n @case (DynamicFieldType.TextArea) {\n <upd-textarea [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [value]=\"formControl.value\" [customClasses]=\"textareaField.customClasses\" [wrapperClasses]=\"textareaField.wrapperClasses\"\n [maxLength]=\"textareaField.maxLength\" [rows]=\"textareaField.rows\"\n [displayCharactersCount]=\"textareaField.displayCharactersCount || false\" (valueChange)=\"setControlValue($event)\">\n </upd-textarea>\n }\n @case (DynamicFieldType.FileUpload) {\n <upd-file-upload [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [isDisabled]=\"field().isDisabled || false\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [fileName]=\"fileNameControl?.value\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [allowFilesDrop]=\"fileUploadField.allowFilesDrop || false\"\n [title]=\"fileUploadField.title\" [labelColSize]=\"field().labelColSize\" [minFileSize]=\"fileUploadField.minFileSize\"\n [isMultiple]=\"fileUploadField.isMultiple || false\" [allowedExtensions]=\"fileUploadField.allowedExtensions || '*'\"\n [maxFileSize]=\"fileUploadField.maxFileSize\" [layout]=\"layout()\" (fileChanged)=\"handleFileSelected($event)\"></upd-file-upload>\n }\n @case (DynamicFieldType.MaskedInput) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [mask]=\"maskedField.mask\"\n [maskConfig]=\"maskedField.maskConfig\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\"\n [isDisabled]=\"field().isDisabled || false\" [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\"\n [value]=\"formControl.value\" (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case(DynamicFieldType.Button) {\n <upd-button [text]=\"field().label\" [isDisabled]=\"field().isDisabled || false\" [model]=\"buttonField.model\" />\n }\n @case(DynamicFieldType.ButtonGroup) {\n @if(!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n <div class=\"btn-group\" role=\"group\">\n @for (btn of buttonGroupField.buttons; track btn) {\n <upd-button [model]=\"btn\" [isDisabled]=\"field().isDisabled || false\" />\n }\n </div>\n }\n}", styles: [""], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i2.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "maxLength", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "directive", type: i2.InputAppendDirective, selector: "ng-template[updInputAppend]" }, { kind: "directive", type: i2.InputPrependDirective, selector: "ng-template[updInputPrepend]" }, { kind: "component", type: i3.CheckboxComponent, selector: "upd-checkbox", inputs: ["wrapperClasses", "value", "customClasses", "isChecked", "isInline", "isSwitch", "isIndeterminate"], outputs: ["changed", "isCheckedChange", "isIndeterminateChange"] }, { kind: "component", type: i4.RadioComponent, selector: "upd-radio", inputs: ["wrapperClasses", "value", "customClasses", "isChecked", "isInline"], outputs: ["selected"] }, { kind: "component", type: i5.SelectComponent, selector: "upd-select", inputs: ["useSystemStyle", "shouldShowClearButton", "shouldTruncateSelectedText", "isCompact", "value", "parentSelectedId", "parentDependentLoader", "getItemById"], outputs: ["selectedItem"] }, { kind: "component", type: i5.SelectMultipleComponent, selector: "upd-select-multiple", inputs: ["selectedValues"], outputs: ["selectedItems", "selectedIds"] }, { kind: "component", type: i6.TextareaComponent, selector: "upd-textarea", inputs: ["value", "customClasses", "wrapperClasses", "maxLength", "rows", "displayCharactersCount"], outputs: ["valueChange"] }, { kind: "component", type: i7.FileUploadComponent, selector: "upd-file-upload", inputs: ["fileName", "title", "allowFilesDrop", "isMultiple", "allowedExtensions", "minFileSize", "maxFileSize", "layout"], outputs: ["fileChanged"] }] }); }
156
156
  }
157
157
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DynamicFieldComponent, decorators: [{
158
158
  type: Component,
@@ -1,4 +1,4 @@
1
- import { Component, ViewEncapsulation, Input, ContentChild, HostBinding, Output, EventEmitter } from '@angular/core';
1
+ import { Component, ViewEncapsulation, Input, ContentChild, HostBinding, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';
2
2
  import { ColumnSizeHelper } from '@updevs/components';
3
3
  import { BaseControl } from '@updevs/components/form-controls/abstractions';
4
4
  import { Subject } from 'rxjs';
@@ -79,6 +79,10 @@ export class InputComponent extends BaseControl {
79
79
  }
80
80
  this.valueChange.emit(evt.target.value);
81
81
  }
82
+ focus() {
83
+ this.inputElement?.nativeElement.focus();
84
+ this.maskedInputElement?.nativeElement.focus();
85
+ }
82
86
  updateClasses() {
83
87
  const lClasses = !this.isPlainText ? ['form-control'] : ['form-control-plaintext'];
84
88
  if (this.isRound) {
@@ -113,14 +117,20 @@ export class InputComponent extends BaseControl {
113
117
  ];
114
118
  }
115
119
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
116
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: InputComponent, selector: "upd-input", inputs: { type: "type", mask: "mask", maskConfig: "maskConfig", value: "value", size: "size", customClasses: "customClasses", wrapperClasses: "wrapperClasses", maxLength: "maxLength", isPlainText: "isPlainText", isReadOnly: "isReadOnly", isLoading: "isLoading", isRound: "isRound", isFlush: "isFlush", isInputGroupFlat: "isInputGroupFlat", isPrependButton: "isPrependButton", isAppendButton: "isAppendButton", isFloating: "isFloating", loaderPosition: "loaderPosition", prependIconModel: "prependIconModel", appendIconModel: "appendIconModel", isValidationStatusLight: "isValidationStatusLight", layout: "layout" }, outputs: { valueChange: "valueChange", blurred: "blurred", keyDown: "keyDown", keyDownEsc: "keyDownEsc", keyUpEnter: "keyUpEnter" }, host: { properties: { "class": "this.hostWrapperClasses" } }, queries: [{ propertyName: "appendTemplate", first: true, predicate: InputAppendDirective, descendants: true }, { propertyName: "prependTemplate", first: true, predicate: InputPrependDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (!!appendTemplate || !!prependTemplate) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n <div class=\"input-group\" [class.input-group-flat]=\"isInputGroupFlat\" [ngClass]=\"validationClass\">\n @if (!!prependTemplate) {\n @if (!isPrependButton) {\n <div class=\"input-group-text\" [ngClass]=\"validationBorderClass\">\n <ng-template [ngTemplateOutlet]=\"prependTemplate.templateRef\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"prependTemplate.templateRef\"></ng-template>\n }\n }\n\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n\n @if (!!appendTemplate) {\n @if (!isAppendButton) {\n <div class=\"input-group-text\" [ngClass]=\"validationBorderClass\">\n <ng-template [ngTemplateOutlet]=\"appendTemplate.templateRef\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"appendTemplate.templateRef\"></ng-template>\n }\n }\n </div>\n\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n} @else if (!!prependIconModel || !!appendIconModel || isLoading) {\n <ng-template [ngTemplateOutlet]=\"inputIconTpl\"></ng-template>\n} @else {\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n}\n\n<ng-template #inputTpl>\n @if (shouldDisplayInnerLabel && !isFloating) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n }\n\n <ng-template [ngTemplateOutlet]=\"basicInputTpl\"></ng-template>\n\n @if (shouldDisplayInnerLabel && isFloating) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n }\n</ng-template>\n\n<ng-template #inputIconTpl>\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n <div [class.col]=\"layout === 'horizontal'\" [class.input-icon]=\"layout === 'vertical'\">\n @if (layout === 'horizontal') {\n <div class=\"input-icon\">\n <ng-template [ngTemplateOutlet]=\"inputIconBaseTpl\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"inputIconBaseTpl\"></ng-template>\n }\n </div>\n</ng-template>\n\n<ng-template #inputIconBaseTpl>\n @if (!!prependIconModel || (isLoading && loaderPosition === 'prepend')) {\n <span class=\"input-icon-addon\">\n @if (!!prependIconModel) {\n <upd-icon [model]=\"prependIconModel\"></upd-icon>\n } @else {\n <ng-template [ngTemplateOutlet]=\"loaderTpl\"></ng-template>\n }\n </span>\n }\n\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n\n @if (!!appendIconModel || (isLoading && loaderPosition === 'append')) {\n <span class=\"input-icon-addon\">\n @if (!!appendIconModel) {\n <upd-icon [model]=\"appendIconModel\"></upd-icon>\n } @else {\n <ng-template [ngTemplateOutlet]=\"loaderTpl\"></ng-template>\n }\n </span>\n }\n</ng-template>\n\n<ng-template #loaderTpl>\n <div class=\"spinner-border spinner-border-sm text-muted\" role=\"status\"></div>\n</ng-template>\n\n<ng-template #basicInputTpl>\n @if (!!mask) {\n <input [updMask]=\"mask\" [updMaskConfig]=\"maskConfig\" [updateMaskValueSubject]=\"valueChangedSub\" [attr.type]=\"type\"\n [attr.maxlength]=\"maxLength\" [disabled]=\"isDisabled()\" [ngClass]=\"classes\" [placeholder]=\"placeholderText\" [value]=\"value || ''\"\n [attr.name]=\"name()\" [attr.readonly]=\"isReadOnly ? '' : undefined\" (input)=\"onInputChange($event)\" (blur)=\"blurred.emit()\"\n (keydown)=\"keyDown.emit($event)\" (keydown.escape)=\"keyDownEsc.emit()\" (keyup.enter)=\"keyUpEnter.emit()\" />\n } @else {\n <input [attr.type]=\"type\" [attr.maxlength]=\"maxLength\" [disabled]=\"isDisabled()\" [ngClass]=\"classes\" [placeholder]=\"placeholderText\"\n [value]=\"value || ''\" [attr.name]=\"name()\" [attr.readonly]=\"isReadOnly ? '' : undefined\" (input)=\"onInputChange($event)\"\n (blur)=\"blurred.emit()\" (keydown)=\"keyDown.emit($event)\" (keydown.escape)=\"keyDownEsc.emit()\"\n (keyup.enter)=\"keyUpEnter.emit()\" />\n }\n</ng-template>\n\n<ng-template #feedbackTpl>\n @if (validationStatus() === 'invalid' && validationStatusTexts.length > 0) {\n @for (desc of validationStatusTexts; track desc) {\n <div class=\"invalid-feedback\">{{ desc }}</div>\n }\n }\n</ng-template>\n\n<ng-template #hintTpl>\n <span class=\"form-help ms-2\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\n\n<ng-template #labelTpl>\n @if (!!labelText && !isFloating) {\n <div [ngClass]=\"labelSizeClasses\">\n <label [class.required]=\"isRequired()\">{{ labelText }}</label>\n\n @if (!!hintText || !!this.hintTemplate()) {\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n }\n </div>\n } @else if (!!labelText) {\n <label [ngClass]=\"labelSizeClasses\" [class.required]=\"isRequired()\">{{ labelText }}</label>\n }\n</ng-template>\n", styles: [".input-group-text .form-check>.form-check-input{margin:0!important}.input-group-text>upd-checkbox{height:16px!important}.input-group-text .form-check{margin:0!important;padding-left:0!important;min-height:16px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "directive", type: i3.MaskDirective, selector: "[updMask]", inputs: ["updMask", "updMaskConfig", "specialCharacters", "patterns", "prefix", "thousandSeparator", "decimalMarker", "suffix", "shownMaskExpression", "removeSpecialCharacters", "placeholderCharacter", "isHiddenInput", "showMaskTyped", "showTemplate", "clearIfNoMatch", "shouldValidate", "shouldTriggerOnMaskChange", "allowNegativeNumbers", "leadZeroDateTime", "separatorLimit", "updateMaskValueSubject"], outputs: ["maskFilled"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[updPopover]", inputs: ["updPopover", "updPopoverTitle", "updPopoverTitleTemplate", "updPopoverTemplate", "updPopoverPlacement", "updPopoverCustomClasses", "updPopoverActAsTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: InputComponent, selector: "upd-input", inputs: { type: "type", mask: "mask", maskConfig: "maskConfig", value: "value", size: "size", customClasses: "customClasses", wrapperClasses: "wrapperClasses", maxLength: "maxLength", isPlainText: "isPlainText", isReadOnly: "isReadOnly", isLoading: "isLoading", isRound: "isRound", isFlush: "isFlush", isInputGroupFlat: "isInputGroupFlat", isPrependButton: "isPrependButton", isAppendButton: "isAppendButton", isFloating: "isFloating", loaderPosition: "loaderPosition", prependIconModel: "prependIconModel", appendIconModel: "appendIconModel", isValidationStatusLight: "isValidationStatusLight", layout: "layout" }, outputs: { valueChange: "valueChange", blurred: "blurred", keyDown: "keyDown", keyDownEsc: "keyDownEsc", keyUpEnter: "keyUpEnter" }, host: { properties: { "class": "this.hostWrapperClasses" } }, queries: [{ propertyName: "appendTemplate", first: true, predicate: InputAppendDirective, descendants: true }, { propertyName: "prependTemplate", first: true, predicate: InputPrependDirective, descendants: true }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputEl"], descendants: true, read: (ElementRef) }, { propertyName: "maskedInputElement", first: true, predicate: ["maskedInputEl"], descendants: true, read: (ElementRef) }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (!!appendTemplate || !!prependTemplate) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n <div class=\"input-group\" [class.input-group-flat]=\"isInputGroupFlat\" [ngClass]=\"validationClass\">\n @if (!!prependTemplate) {\n @if (!isPrependButton) {\n <div class=\"input-group-text\" [ngClass]=\"validationBorderClass\">\n <ng-template [ngTemplateOutlet]=\"prependTemplate.templateRef\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"prependTemplate.templateRef\"></ng-template>\n }\n }\n\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n\n @if (!!appendTemplate) {\n @if (!isAppendButton) {\n <div class=\"input-group-text\" [ngClass]=\"validationBorderClass\">\n <ng-template [ngTemplateOutlet]=\"appendTemplate.templateRef\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"appendTemplate.templateRef\"></ng-template>\n }\n }\n </div>\n\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n} @else if (!!prependIconModel || !!appendIconModel || isLoading) {\n <ng-template [ngTemplateOutlet]=\"inputIconTpl\"></ng-template>\n} @else {\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n}\n\n<ng-template #inputTpl>\n @if (shouldDisplayInnerLabel && !isFloating) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n }\n\n <ng-template [ngTemplateOutlet]=\"basicInputTpl\"></ng-template>\n\n @if (shouldDisplayInnerLabel && isFloating) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n }\n</ng-template>\n\n<ng-template #inputIconTpl>\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n <div [class.col]=\"layout === 'horizontal'\" [class.input-icon]=\"layout === 'vertical'\">\n @if (layout === 'horizontal') {\n <div class=\"input-icon\">\n <ng-template [ngTemplateOutlet]=\"inputIconBaseTpl\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"inputIconBaseTpl\"></ng-template>\n }\n </div>\n</ng-template>\n\n<ng-template #inputIconBaseTpl>\n @if (!!prependIconModel || (isLoading && loaderPosition === 'prepend')) {\n <span class=\"input-icon-addon\">\n @if (!!prependIconModel) {\n <upd-icon [model]=\"prependIconModel\"></upd-icon>\n } @else {\n <ng-template [ngTemplateOutlet]=\"loaderTpl\"></ng-template>\n }\n </span>\n }\n\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n\n @if (!!appendIconModel || (isLoading && loaderPosition === 'append')) {\n <span class=\"input-icon-addon\">\n @if (!!appendIconModel) {\n <upd-icon [model]=\"appendIconModel\"></upd-icon>\n } @else {\n <ng-template [ngTemplateOutlet]=\"loaderTpl\"></ng-template>\n }\n </span>\n }\n</ng-template>\n\n<ng-template #loaderTpl>\n <div class=\"spinner-border spinner-border-sm text-muted\" role=\"status\"></div>\n</ng-template>\n\n<ng-template #basicInputTpl>\n @if (!!mask) {\n <input #maskedInputEl [updMask]=\"mask\" [updMaskConfig]=\"maskConfig\" [updateMaskValueSubject]=\"valueChangedSub\" [attr.type]=\"type\"\n [attr.maxlength]=\"maxLength\" [disabled]=\"isDisabled()\" [ngClass]=\"classes\" [placeholder]=\"placeholderText\" [value]=\"value || ''\"\n [attr.name]=\"name()\" [attr.readonly]=\"isReadOnly ? '' : undefined\" (input)=\"onInputChange($event)\" (blur)=\"blurred.emit()\"\n (keydown)=\"keyDown.emit($event)\" (keydown.escape)=\"keyDownEsc.emit()\" (keyup.enter)=\"keyUpEnter.emit()\" />\n } @else {\n <input #inputEl [attr.type]=\"type\" [attr.maxlength]=\"maxLength\" [disabled]=\"isDisabled()\" [ngClass]=\"classes\"\n [placeholder]=\"placeholderText\" [value]=\"value || ''\" [attr.name]=\"name()\" [attr.readonly]=\"isReadOnly ? '' : undefined\"\n (input)=\"onInputChange($event)\" (blur)=\"blurred.emit()\" (keydown)=\"keyDown.emit($event)\" (keydown.escape)=\"keyDownEsc.emit()\"\n (keyup.enter)=\"keyUpEnter.emit()\" />\n }\n</ng-template>\n\n<ng-template #feedbackTpl>\n @if (validationStatus() === 'invalid' && validationStatusTexts.length > 0) {\n @for (desc of validationStatusTexts; track desc) {\n <div class=\"invalid-feedback\">{{ desc }}</div>\n }\n }\n</ng-template>\n\n<ng-template #hintTpl>\n <span class=\"form-help ms-2\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\n\n<ng-template #labelTpl>\n @if (!!labelText && !isFloating) {\n <div [ngClass]=\"labelSizeClasses\">\n <label [class.required]=\"isRequired()\">{{ labelText }}</label>\n\n @if (!!hintText || !!this.hintTemplate()) {\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n }\n </div>\n } @else if (!!labelText) {\n <label [ngClass]=\"labelSizeClasses\" [class.required]=\"isRequired()\">{{ labelText }}</label>\n }\n</ng-template>\n", styles: [".input-group-text .form-check>.form-check-input{margin:0!important}.input-group-text>upd-checkbox{height:16px!important}.input-group-text .form-check{margin:0!important;padding-left:0!important;min-height:16px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "directive", type: i3.MaskDirective, selector: "[updMask]", inputs: ["updMask", "updMaskConfig", "specialCharacters", "patterns", "prefix", "thousandSeparator", "decimalMarker", "suffix", "shownMaskExpression", "removeSpecialCharacters", "placeholderCharacter", "isHiddenInput", "showMaskTyped", "showTemplate", "clearIfNoMatch", "shouldValidate", "shouldTriggerOnMaskChange", "allowNegativeNumbers", "leadZeroDateTime", "separatorLimit", "updateMaskValueSubject"], outputs: ["maskFilled"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[updPopover]", inputs: ["updPopover", "updPopoverTitle", "updPopoverTitleTemplate", "updPopoverTemplate", "updPopoverPlacement", "updPopoverCustomClasses", "updPopoverActAsTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
117
121
  }
118
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InputComponent, decorators: [{
119
123
  type: Component,
120
- args: [{ selector: 'upd-input', encapsulation: ViewEncapsulation.None, template: "@if (!!appendTemplate || !!prependTemplate) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n <div class=\"input-group\" [class.input-group-flat]=\"isInputGroupFlat\" [ngClass]=\"validationClass\">\n @if (!!prependTemplate) {\n @if (!isPrependButton) {\n <div class=\"input-group-text\" [ngClass]=\"validationBorderClass\">\n <ng-template [ngTemplateOutlet]=\"prependTemplate.templateRef\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"prependTemplate.templateRef\"></ng-template>\n }\n }\n\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n\n @if (!!appendTemplate) {\n @if (!isAppendButton) {\n <div class=\"input-group-text\" [ngClass]=\"validationBorderClass\">\n <ng-template [ngTemplateOutlet]=\"appendTemplate.templateRef\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"appendTemplate.templateRef\"></ng-template>\n }\n }\n </div>\n\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n} @else if (!!prependIconModel || !!appendIconModel || isLoading) {\n <ng-template [ngTemplateOutlet]=\"inputIconTpl\"></ng-template>\n} @else {\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n}\n\n<ng-template #inputTpl>\n @if (shouldDisplayInnerLabel && !isFloating) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n }\n\n <ng-template [ngTemplateOutlet]=\"basicInputTpl\"></ng-template>\n\n @if (shouldDisplayInnerLabel && isFloating) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n }\n</ng-template>\n\n<ng-template #inputIconTpl>\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n <div [class.col]=\"layout === 'horizontal'\" [class.input-icon]=\"layout === 'vertical'\">\n @if (layout === 'horizontal') {\n <div class=\"input-icon\">\n <ng-template [ngTemplateOutlet]=\"inputIconBaseTpl\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"inputIconBaseTpl\"></ng-template>\n }\n </div>\n</ng-template>\n\n<ng-template #inputIconBaseTpl>\n @if (!!prependIconModel || (isLoading && loaderPosition === 'prepend')) {\n <span class=\"input-icon-addon\">\n @if (!!prependIconModel) {\n <upd-icon [model]=\"prependIconModel\"></upd-icon>\n } @else {\n <ng-template [ngTemplateOutlet]=\"loaderTpl\"></ng-template>\n }\n </span>\n }\n\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n\n @if (!!appendIconModel || (isLoading && loaderPosition === 'append')) {\n <span class=\"input-icon-addon\">\n @if (!!appendIconModel) {\n <upd-icon [model]=\"appendIconModel\"></upd-icon>\n } @else {\n <ng-template [ngTemplateOutlet]=\"loaderTpl\"></ng-template>\n }\n </span>\n }\n</ng-template>\n\n<ng-template #loaderTpl>\n <div class=\"spinner-border spinner-border-sm text-muted\" role=\"status\"></div>\n</ng-template>\n\n<ng-template #basicInputTpl>\n @if (!!mask) {\n <input [updMask]=\"mask\" [updMaskConfig]=\"maskConfig\" [updateMaskValueSubject]=\"valueChangedSub\" [attr.type]=\"type\"\n [attr.maxlength]=\"maxLength\" [disabled]=\"isDisabled()\" [ngClass]=\"classes\" [placeholder]=\"placeholderText\" [value]=\"value || ''\"\n [attr.name]=\"name()\" [attr.readonly]=\"isReadOnly ? '' : undefined\" (input)=\"onInputChange($event)\" (blur)=\"blurred.emit()\"\n (keydown)=\"keyDown.emit($event)\" (keydown.escape)=\"keyDownEsc.emit()\" (keyup.enter)=\"keyUpEnter.emit()\" />\n } @else {\n <input [attr.type]=\"type\" [attr.maxlength]=\"maxLength\" [disabled]=\"isDisabled()\" [ngClass]=\"classes\" [placeholder]=\"placeholderText\"\n [value]=\"value || ''\" [attr.name]=\"name()\" [attr.readonly]=\"isReadOnly ? '' : undefined\" (input)=\"onInputChange($event)\"\n (blur)=\"blurred.emit()\" (keydown)=\"keyDown.emit($event)\" (keydown.escape)=\"keyDownEsc.emit()\"\n (keyup.enter)=\"keyUpEnter.emit()\" />\n }\n</ng-template>\n\n<ng-template #feedbackTpl>\n @if (validationStatus() === 'invalid' && validationStatusTexts.length > 0) {\n @for (desc of validationStatusTexts; track desc) {\n <div class=\"invalid-feedback\">{{ desc }}</div>\n }\n }\n</ng-template>\n\n<ng-template #hintTpl>\n <span class=\"form-help ms-2\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\n\n<ng-template #labelTpl>\n @if (!!labelText && !isFloating) {\n <div [ngClass]=\"labelSizeClasses\">\n <label [class.required]=\"isRequired()\">{{ labelText }}</label>\n\n @if (!!hintText || !!this.hintTemplate()) {\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n }\n </div>\n } @else if (!!labelText) {\n <label [ngClass]=\"labelSizeClasses\" [class.required]=\"isRequired()\">{{ labelText }}</label>\n }\n</ng-template>\n", styles: [".input-group-text .form-check>.form-check-input{margin:0!important}.input-group-text>upd-checkbox{height:16px!important}.input-group-text .form-check{margin:0!important;padding-left:0!important;min-height:16px!important}\n"] }]
124
+ args: [{ selector: 'upd-input', encapsulation: ViewEncapsulation.None, template: "@if (!!appendTemplate || !!prependTemplate) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n <div class=\"input-group\" [class.input-group-flat]=\"isInputGroupFlat\" [ngClass]=\"validationClass\">\n @if (!!prependTemplate) {\n @if (!isPrependButton) {\n <div class=\"input-group-text\" [ngClass]=\"validationBorderClass\">\n <ng-template [ngTemplateOutlet]=\"prependTemplate.templateRef\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"prependTemplate.templateRef\"></ng-template>\n }\n }\n\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n\n @if (!!appendTemplate) {\n @if (!isAppendButton) {\n <div class=\"input-group-text\" [ngClass]=\"validationBorderClass\">\n <ng-template [ngTemplateOutlet]=\"appendTemplate.templateRef\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"appendTemplate.templateRef\"></ng-template>\n }\n }\n </div>\n\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n} @else if (!!prependIconModel || !!appendIconModel || isLoading) {\n <ng-template [ngTemplateOutlet]=\"inputIconTpl\"></ng-template>\n} @else {\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n}\n\n<ng-template #inputTpl>\n @if (shouldDisplayInnerLabel && !isFloating) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n }\n\n <ng-template [ngTemplateOutlet]=\"basicInputTpl\"></ng-template>\n\n @if (shouldDisplayInnerLabel && isFloating) {\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n }\n</ng-template>\n\n<ng-template #inputIconTpl>\n <ng-template [ngTemplateOutlet]=\"labelTpl\"></ng-template>\n <div [class.col]=\"layout === 'horizontal'\" [class.input-icon]=\"layout === 'vertical'\">\n @if (layout === 'horizontal') {\n <div class=\"input-icon\">\n <ng-template [ngTemplateOutlet]=\"inputIconBaseTpl\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"inputIconBaseTpl\"></ng-template>\n }\n </div>\n</ng-template>\n\n<ng-template #inputIconBaseTpl>\n @if (!!prependIconModel || (isLoading && loaderPosition === 'prepend')) {\n <span class=\"input-icon-addon\">\n @if (!!prependIconModel) {\n <upd-icon [model]=\"prependIconModel\"></upd-icon>\n } @else {\n <ng-template [ngTemplateOutlet]=\"loaderTpl\"></ng-template>\n }\n </span>\n }\n\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"feedbackTpl\"></ng-template>\n\n @if (!!appendIconModel || (isLoading && loaderPosition === 'append')) {\n <span class=\"input-icon-addon\">\n @if (!!appendIconModel) {\n <upd-icon [model]=\"appendIconModel\"></upd-icon>\n } @else {\n <ng-template [ngTemplateOutlet]=\"loaderTpl\"></ng-template>\n }\n </span>\n }\n</ng-template>\n\n<ng-template #loaderTpl>\n <div class=\"spinner-border spinner-border-sm text-muted\" role=\"status\"></div>\n</ng-template>\n\n<ng-template #basicInputTpl>\n @if (!!mask) {\n <input #maskedInputEl [updMask]=\"mask\" [updMaskConfig]=\"maskConfig\" [updateMaskValueSubject]=\"valueChangedSub\" [attr.type]=\"type\"\n [attr.maxlength]=\"maxLength\" [disabled]=\"isDisabled()\" [ngClass]=\"classes\" [placeholder]=\"placeholderText\" [value]=\"value || ''\"\n [attr.name]=\"name()\" [attr.readonly]=\"isReadOnly ? '' : undefined\" (input)=\"onInputChange($event)\" (blur)=\"blurred.emit()\"\n (keydown)=\"keyDown.emit($event)\" (keydown.escape)=\"keyDownEsc.emit()\" (keyup.enter)=\"keyUpEnter.emit()\" />\n } @else {\n <input #inputEl [attr.type]=\"type\" [attr.maxlength]=\"maxLength\" [disabled]=\"isDisabled()\" [ngClass]=\"classes\"\n [placeholder]=\"placeholderText\" [value]=\"value || ''\" [attr.name]=\"name()\" [attr.readonly]=\"isReadOnly ? '' : undefined\"\n (input)=\"onInputChange($event)\" (blur)=\"blurred.emit()\" (keydown)=\"keyDown.emit($event)\" (keydown.escape)=\"keyDownEsc.emit()\"\n (keyup.enter)=\"keyUpEnter.emit()\" />\n }\n</ng-template>\n\n<ng-template #feedbackTpl>\n @if (validationStatus() === 'invalid' && validationStatusTexts.length > 0) {\n @for (desc of validationStatusTexts; track desc) {\n <div class=\"invalid-feedback\">{{ desc }}</div>\n }\n }\n</ng-template>\n\n<ng-template #hintTpl>\n <span class=\"form-help ms-2\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\n\n<ng-template #labelTpl>\n @if (!!labelText && !isFloating) {\n <div [ngClass]=\"labelSizeClasses\">\n <label [class.required]=\"isRequired()\">{{ labelText }}</label>\n\n @if (!!hintText || !!this.hintTemplate()) {\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n }\n </div>\n } @else if (!!labelText) {\n <label [ngClass]=\"labelSizeClasses\" [class.required]=\"isRequired()\">{{ labelText }}</label>\n }\n</ng-template>\n", styles: [".input-group-text .form-check>.form-check-input{margin:0!important}.input-group-text>upd-checkbox{height:16px!important}.input-group-text .form-check{margin:0!important;padding-left:0!important;min-height:16px!important}\n"] }]
121
125
  }], propDecorators: { hostWrapperClasses: [{
122
126
  type: HostBinding,
123
127
  args: ['class']
128
+ }], inputElement: [{
129
+ type: ViewChild,
130
+ args: ['inputEl', { read: (ElementRef) }]
131
+ }], maskedInputElement: [{
132
+ type: ViewChild,
133
+ args: ['maskedInputEl', { read: (ElementRef) }]
124
134
  }], appendTemplate: [{
125
135
  type: ContentChild,
126
136
  args: [InputAppendDirective]
@@ -182,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
182
192
  }], keyUpEnter: [{
183
193
  type: Output
184
194
  }] } });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm0tY29udHJvbHMvaW5wdXQvc3JjL2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2lucHV0L3NyYy9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixLQUFLLEVBSUwsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBNkMsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDNUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7O0FBUzdFLE1BQU0sT0FBTyxjQUFlLFNBQVEsV0FBVztJQU4vQzs7UUFPMEIsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBSXJDLFNBQUksR0FBYyxNQUFNLENBQUM7UUFJekIsU0FBSSxHQUFzQixTQUFTLENBQUM7UUFJcEMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsbUJBQWMsR0FB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QixNQUFNO2dCQUlZLE9BQU87c0JBQXpCLE1BQU07Z0JBSVksVUFBVTtzQkFBNUIsTUFBTTtnQkFJWSxVQUFVO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5wdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvbk1vZGVsIH0gZnJvbSAnQHVwZGV2cy9pY29ucyc7XG5pbXBvcnQgeyBVcGRNYXNrQ29uZmlnIH0gZnJvbSAnQHVwZGV2cy9zZGsvbWFzayc7XG5pbXBvcnQgeyBDb21wb25lbnRTaXplVHlwZSwgSG9yaXpvbnRhbFZlcnRpY2FsVHlwZSwgQ29sdW1uU2l6ZUhlbHBlciB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCYXNlQ29udHJvbCB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2Fic3RyYWN0aW9ucyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElucHV0VHlwZSB9IGZyb20gJy4vdHlwZXMvaW5wdXQudHlwZSc7XG5pbXBvcnQgeyBJbnB1dEFwcGVuZERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pbnB1dC1hcHBlbmQuZGlyZWN0aXZlJztcbmltcG9ydCB7IElucHV0UHJlcGVuZERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pbnB1dC1wcmVwZW5kLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMb2FkZXJQb3NpdGlvblR5cGUgfSBmcm9tICcuL3R5cGVzL2xvYWRlci1wb3NpdGlvbi50eXBlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1cGQtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbnRyb2wgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RXcmFwcGVyQ2xhc3NlcyA9ICcnO1xuICAgIEBDb250ZW50Q2hpbGQoSW5wdXRBcHBlbmREaXJlY3RpdmUpIGFwcGVuZFRlbXBsYXRlPzogSW5wdXRBcHBlbmREaXJlY3RpdmU7XG4gICAgQENvbnRlbnRDaGlsZChJbnB1dFByZXBlbmREaXJlY3RpdmUpIHByZXBlbmRUZW1wbGF0ZT86IElucHV0UHJlcGVuZERpcmVjdGl2ZTtcblxuICAgIEBJbnB1dCgpIHR5cGU6IElucHV0VHlwZSA9ICd0ZXh0JztcbiAgICBASW5wdXQoKSBtYXNrPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1hc2tDb25maWc/OiBVcGRNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIHZhbHVlPzogYW55O1xuICAgIEBJbnB1dCgpIHNpemU6IENvbXBvbmVudFNpemVUeXBlID0gJ2RlZmF1bHQnO1xuICAgIEBJbnB1dCgpIGN1c3RvbUNsYXNzZXM/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgd3JhcHBlckNsYXNzZXM/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGlzUGxhaW5UZXh0ID0gZmFsc2U7XG4gICAgQElucHV0KCkgaXNSZWFkT25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGlzTG9hZGluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGlzUm91bmQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpc0ZsdXNoID0gZmFsc2U7XG4gICAgQElucHV0KCkgaXNJbnB1dEdyb3VwRmxhdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGlzUHJlcGVuZEJ1dHRvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGlzQXBwZW5kQnV0dG9uID0gZmFsc2U7XG4gICAgQElucHV0KCkgaXNGbG9hdGluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGxvYWRlclBvc2l0aW9uOiBMb2FkZXJQb3NpdGlvblR5cGUgPSAnYXBwZW5kJztcbiAgICBASW5wdXQoKSBwcmVwZW5kSWNvbk1vZGVsPzogSWNvbk1vZGVsO1xuICAgIEBJbnB1dCgpIGFwcGVuZEljb25Nb2RlbD86IEljb25Nb2RlbDtcbiAgICBASW5wdXQoKSBpc1ZhbGlkYXRpb25TdGF0dXNMaWdodCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGxheW91dDogSG9yaXpvbnRhbFZlcnRpY2FsVHlwZSA9ICd2ZXJ0aWNhbCc7XG5cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gYW55IGtleSBpcyBwcmVzc2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBrZXlEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBFU0Mga2V5IGlzIHByZXNzZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGtleURvd25Fc2MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBFTlRFUiBrZXkgaXMgcmVsZWFzZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGtleVVwRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGdldCBzaG91bGREaXNwbGF5SW5uZXJMYWJlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCgpXG4gICAgICAgICAgICAmJiAhdGhpcy5wcmVwZW5kSWNvbk1vZGVsXG4gICAgICAgICAgICAmJiAhdGhpcy5hcHBlbmRJY29uTW9kZWxcbiAgICAgICAgICAgICYmICF0aGlzLmlzTG9hZGluZ1xuICAgICAgICAgICAgJiYgIXRoaXMuYXBwZW5kVGVtcGxhdGVcbiAgICAgICAgICAgICYmICF0aGlzLnByZXBlbmRUZW1wbGF0ZTtcbiAgICB9XG4gICAgZ2V0IGxhYmVsU2l6ZUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0ICE9PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICAgIHJldHVybiAnZm9ybS1sYWJlbCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQ29sdW1uU2l6ZUhlbHBlci5nZXRDbGFzc2VzKFxuICAgICAgICAgICAgJ2NvbC1mb3JtLWxhYmVsJyxcbiAgICAgICAgICAgIENvbHVtblNpemVIZWxwZXIuZ2V0U2l6ZUNsYXNzZXModGhpcy5sYWJlbENvbFNpemUoKSwgMylcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZ2V0IHZhbGlkYXRpb25DbGFzcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gISF0aGlzLnZhbGlkYXRpb25TdGF0dXMoKSA/IGBpcy0ke3RoaXMudmFsaWRhdGlvblN0YXR1cygpfWAgOiAnJztcbiAgICB9XG4gICAgZ2V0IHZhbGlkYXRpb25Cb3JkZXJDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gISF0aGlzLnZhbGlkYXRpb25TdGF0dXMoKSA/IGBib3JkZXItJHt0aGlzLnZhbGlkYXRpb25TdGF0dXMoKSA9PT0gJ2ludmFsaWQnID8gJ2RhbmdlcicgOiAnc3VjY2Vzcyd9YCA6ICcnO1xuICAgIH1cblxuICAgIHJlYWRvbmx5IHZhbHVlQ2hhbmdlZFN1YiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzZXMoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2xhc3NlcygpO1xuXG4gICAgICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddICYmICEhdGhpcy5tYXNrKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZFN1Yi5uZXh0KGNoYW5nZXNbJ3ZhbHVlJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXRDaGFuZ2UoZXZ0OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIWV2dC50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCgoZXZ0LnRhcmdldCBhcyBhbnkpLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNsYXNzZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxDbGFzc2VzOiBzdHJpbmdbXSA9ICF0aGlzLmlzUGxhaW5UZXh0ID8gWydmb3JtLWNvbnRyb2wnXSA6IFsnZm9ybS1jb250cm9sLXBsYWludGV4dCddO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUm91bmQpIHtcbiAgICAgICAgICAgIGxDbGFzc2VzLnB1c2goJ2Zvcm0tY29udHJvbC1yb3VuZGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0ZsdXNoKSB7XG4gICAgICAgICAgICBsQ2xhc3Nlcy5wdXNoKCdmb3JtLWNvbnRyb2wtZmx1c2gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNpemUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgbENsYXNzZXMucHVzaChgZm9ybS1jb250cm9sLSR7dGhpcy5zaXplID09PSAnbGFyZ2UnID8gJ2xnJyA6ICdzbSd9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISF0aGlzLnZhbGlkYXRpb25TdGF0dXMoKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ2xzID0gYGlzLSR7dGhpcy52YWxpZGF0aW9uU3RhdHVzKCl9YDtcbiAgICAgICAgICAgIGxDbGFzc2VzLnB1c2goc3RhdHVzQ2xzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZGF0aW9uU3RhdHVzTGlnaHQpIHtcbiAgICAgICAgICAgICAgICBsQ2xhc3Nlcy5wdXNoKGAke3N0YXR1c0Nsc30tbGl0ZWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuaG9zdFdyYXBwZXJDbGFzc2VzID0gJ3Jvdyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISF0aGlzLndyYXBwZXJDbGFzc2VzKSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RXcmFwcGVyQ2xhc3NlcyArPSBgICR7dGhpcy53cmFwcGVyQ2xhc3Nlc31gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNGbG9hdGluZykge1xuICAgICAgICAgICAgdGhpcy5ob3N0V3JhcHBlckNsYXNzZXMgKz0gJyBmb3JtLWZsb2F0aW5nJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xhc3NlcyA9IFtcbiAgICAgICAgICAgIC4uLmxDbGFzc2VzLFxuICAgICAgICAgICAgLi4uKHRoaXMuY3VzdG9tQ2xhc3NlcyB8fCAnJykuc3BsaXQoJyAnKSxcbiAgICAgICAgICAgIHRoaXMubGF5b3V0ID09PSAnaG9yaXpvbnRhbCcgPyAnY29sJyA6ICcnXG4gICAgICAgIF07XG4gICAgfVxufVxuIiwiQGlmICghIWFwcGVuZFRlbXBsYXRlIHx8ICEhcHJlcGVuZFRlbXBsYXRlKSB7XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIiBbY2xhc3MuaW5wdXQtZ3JvdXAtZmxhdF09XCJpc0lucHV0R3JvdXBGbGF0XCIgW25nQ2xhc3NdPVwidmFsaWRhdGlvbkNsYXNzXCI+XG4gICAgICAgIEBpZiAoISFwcmVwZW5kVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIEBpZiAoIWlzUHJlcGVuZEJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCIgW25nQ2xhc3NdPVwidmFsaWRhdGlvbkJvcmRlckNsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwcmVwZW5kVGVtcGxhdGUudGVtcGxhdGVSZWZcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByZXBlbmRUZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW5wdXRUcGxcIj48L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIEBpZiAoISFhcHBlbmRUZW1wbGF0ZSkge1xuICAgICAgICAgICAgQGlmICghaXNBcHBlbmRCdXR0b24pIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiIFtuZ0NsYXNzXT1cInZhbGlkYXRpb25Cb3JkZXJDbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXBwZW5kVGVtcGxhdGUudGVtcGxhdGVSZWZcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFwcGVuZFRlbXBsYXRlLnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZlZWRiYWNrVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbn0gQGVsc2UgaWYgKCEhcHJlcGVuZEljb25Nb2RlbCB8fCAhIWFwcGVuZEljb25Nb2RlbCB8fCBpc0xvYWRpbmcpIHtcbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW5wdXRJY29uVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbn0gQGVsc2Uge1xuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dFRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZlZWRiYWNrVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbn1cblxuPG5nLXRlbXBsYXRlICNpbnB1dFRwbD5cbiAgICBAaWYgKHNob3VsZERpc3BsYXlJbm5lckxhYmVsICYmICFpc0Zsb2F0aW5nKSB7XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgfVxuXG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJhc2ljSW5wdXRUcGxcIj48L25nLXRlbXBsYXRlPlxuXG4gICAgQGlmIChzaG91bGREaXNwbGF5SW5uZXJMYWJlbCAmJiBpc0Zsb2F0aW5nKSB7XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbnB1dEljb25UcGw+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2IFtjbGFzcy5jb2xdPVwibGF5b3V0ID09PSAnaG9yaXpvbnRhbCdcIiBbY2xhc3MuaW5wdXQtaWNvbl09XCJsYXlvdXQgPT09ICd2ZXJ0aWNhbCdcIj5cbiAgICAgICAgQGlmIChsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWljb25cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW5wdXRJY29uQmFzZVRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW5wdXRJY29uQmFzZVRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRJY29uQmFzZVRwbD5cbiAgICBAaWYgKCEhcHJlcGVuZEljb25Nb2RlbCB8fCAoaXNMb2FkaW5nICYmIGxvYWRlclBvc2l0aW9uID09PSAncHJlcGVuZCcpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtaWNvbi1hZGRvblwiPlxuICAgICAgICAgICAgQGlmICghIXByZXBlbmRJY29uTW9kZWwpIHtcbiAgICAgICAgICAgICAgICA8dXBkLWljb24gW21vZGVsXT1cInByZXBlbmRJY29uTW9kZWxcIj48L3VwZC1pY29uPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvYWRlclRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICB9XG5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW5wdXRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmZWVkYmFja1RwbFwiPjwvbmctdGVtcGxhdGU+XG5cbiAgICBAaWYgKCEhYXBwZW5kSWNvbk1vZGVsIHx8IChpc0xvYWRpbmcgJiYgbG9hZGVyUG9zaXRpb24gPT09ICdhcHBlbmQnKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWljb24tYWRkb25cIj5cbiAgICAgICAgICAgIEBpZiAoISFhcHBlbmRJY29uTW9kZWwpIHtcbiAgICAgICAgICAgICAgICA8dXBkLWljb24gW21vZGVsXT1cImFwcGVuZEljb25Nb2RlbFwiPjwvdXBkLWljb24+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZGVyVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9zcGFuPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGVyVHBsPlxuICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSB0ZXh0LW11dGVkXCIgcm9sZT1cInN0YXR1c1wiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNiYXNpY0lucHV0VHBsPlxuICAgIEBpZiAoISFtYXNrKSB7XG4gICAgICAgIDxpbnB1dCBbdXBkTWFza109XCJtYXNrXCIgW3VwZE1hc2tDb25maWddPVwibWFza0NvbmZpZ1wiIFt1cGRhdGVNYXNrVmFsdWVTdWJqZWN0XT1cInZhbHVlQ2hhbmdlZFN1YlwiIFthdHRyLnR5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwibWF4TGVuZ3RoXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiIFtuZ0NsYXNzXT1cImNsYXNzZXNcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJUZXh0XCIgW3ZhbHVlXT1cInZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgIFthdHRyLm5hbWVdPVwibmFtZSgpXCIgW2F0dHIucmVhZG9ubHldPVwiaXNSZWFkT25seSA/ICcnIDogdW5kZWZpbmVkXCIgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIChibHVyKT1cImJsdXJyZWQuZW1pdCgpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImtleURvd24uZW1pdCgkZXZlbnQpXCIgKGtleWRvd24uZXNjYXBlKT1cImtleURvd25Fc2MuZW1pdCgpXCIgKGtleXVwLmVudGVyKT1cImtleVVwRW50ZXIuZW1pdCgpXCIgLz5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGlucHV0IFthdHRyLnR5cGVdPVwidHlwZVwiIFthdHRyLm1heGxlbmd0aF09XCJtYXhMZW5ndGhcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCIgW25nQ2xhc3NdPVwiY2xhc3Nlc1wiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclRleHRcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlIHx8ICcnXCIgW2F0dHIubmFtZV09XCJuYW1lKClcIiBbYXR0ci5yZWFkb25seV09XCJpc1JlYWRPbmx5ID8gJycgOiB1bmRlZmluZWRcIiAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChibHVyKT1cImJsdXJyZWQuZW1pdCgpXCIgKGtleWRvd24pPVwia2V5RG93bi5lbWl0KCRldmVudClcIiAoa2V5ZG93bi5lc2NhcGUpPVwia2V5RG93bkVzYy5lbWl0KClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImtleVVwRW50ZXIuZW1pdCgpXCIgLz5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZlZWRiYWNrVHBsPlxuICAgIEBpZiAodmFsaWRhdGlvblN0YXR1cygpID09PSAnaW52YWxpZCcgJiYgdmFsaWRhdGlvblN0YXR1c1RleHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgQGZvciAoZGVzYyBvZiB2YWxpZGF0aW9uU3RhdHVzVGV4dHM7IHRyYWNrIGRlc2MpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+e3sgZGVzYyB9fTwvZGl2PlxuICAgICAgICB9XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoaW50VHBsPlxuICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oZWxwIG1zLTJcIiBbdXBkUG9wb3Zlcl09XCJoaW50VGV4dFwiIFt1cGRQb3BvdmVyVGVtcGxhdGVdPVwiaGludFRlbXBsYXRlKClcIiBbdXBkUG9wb3ZlckFjdEFzVG9vbHRpcF09XCJoaW50QXNUb29sdGlwKClcIj5cbiAgICAgICAgP1xuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGFiZWxUcGw+XG4gICAgQGlmICghIWxhYmVsVGV4dCAmJiAhaXNGbG9hdGluZykge1xuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImxhYmVsU2l6ZUNsYXNzZXNcIj5cbiAgICAgICAgICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiaXNSZXF1aXJlZCgpXCI+e3sgbGFiZWxUZXh0IH19PC9sYWJlbD5cblxuICAgICAgICAgICAgQGlmICghIWhpbnRUZXh0IHx8ICEhdGhpcy5oaW50VGVtcGxhdGUoKSkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoaW50VHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoISFsYWJlbFRleHQpIHtcbiAgICAgICAgPGxhYmVsIFtuZ0NsYXNzXT1cImxhYmVsU2l6ZUNsYXNzZXNcIiBbY2xhc3MucmVxdWlyZWRdPVwiaXNSZXF1aXJlZCgpXCI+e3sgbGFiZWxUZXh0IH19PC9sYWJlbD5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm0tY29udHJvbHMvaW5wdXQvc3JjL2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2lucHV0L3NyYy9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixLQUFLLEVBSUwsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxVQUFVLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUE2QyxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7QUFTN0UsTUFBTSxPQUFPLGNBQWUsU0FBUSxXQUFXO0lBTi9DOztRQU8wQix1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFNckMsU0FBSSxHQUFjLE1BQU0sQ0FBQztRQUl6QixTQUFJLEdBQXNCLFNBQVMsQ0FBQztRQUlwQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixvQkFBZSxHQUFHLEtBQUss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O2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRWEsV0FBVztzQkFBN0IsTUFBTTtnQkFDWSxPQUFPO3NCQUF6QixNQUFNO2dCQUlZLE9BQU87c0JBQXpCLE1BQU07Z0JBSVksVUFBVTtzQkFBNUIsTUFBTTtnQkFJWSxVQUFVO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5wdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvbk1vZGVsIH0gZnJvbSAnQHVwZGV2cy9pY29ucyc7XG5pbXBvcnQgeyBVcGRNYXNrQ29uZmlnIH0gZnJvbSAnQHVwZGV2cy9zZGsvbWFzayc7XG5pbXBvcnQgeyBDb21wb25lbnRTaXplVHlwZSwgSG9yaXpvbnRhbFZlcnRpY2FsVHlwZSwgQ29sdW1uU2l6ZUhlbHBlciB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCYXNlQ29udHJvbCB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2Fic3RyYWN0aW9ucyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElucHV0VHlwZSB9IGZyb20gJy4vdHlwZXMvaW5wdXQudHlwZSc7XG5pbXBvcnQgeyBJbnB1dEFwcGVuZERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pbnB1dC1hcHBlbmQuZGlyZWN0aXZlJztcbmltcG9ydCB7IElucHV0UHJlcGVuZERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pbnB1dC1wcmVwZW5kLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMb2FkZXJQb3NpdGlvblR5cGUgfSBmcm9tICcuL3R5cGVzL2xvYWRlci1wb3NpdGlvbi50eXBlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1cGQtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbnRyb2wgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RXcmFwcGVyQ2xhc3NlcyA9ICcnO1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfSkgaW5wdXRFbGVtZW50PzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgICBAVmlld0NoaWxkKCdtYXNrZWRJbnB1dEVsJywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IH0pIG1hc2tlZElucHV0RWxlbWVudD86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gICAgQENvbnRlbnRDaGlsZChJbnB1dEFwcGVuZERpcmVjdGl2ZSkgYXBwZW5kVGVtcGxhdGU/OiBJbnB1dEFwcGVuZERpcmVjdGl2ZTtcbiAgICBAQ29udGVudENoaWxkKElucHV0UHJlcGVuZERpcmVjdGl2ZSkgcHJlcGVuZFRlbXBsYXRlPzogSW5wdXRQcmVwZW5kRGlyZWN0aXZlO1xuXG4gICAgQElucHV0KCkgdHlwZTogSW5wdXRUeXBlID0gJ3RleHQnO1xuICAgIEBJbnB1dCgpIG1hc2s/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWFza0NvbmZpZz86IFVwZE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgdmFsdWU/OiBhbnk7XG4gICAgQElucHV0KCkgc2l6ZTogQ29tcG9uZW50U2l6ZVR5cGUgPSAnZGVmYXVsdCc7XG4gICAgQElucHV0KCkgY3VzdG9tQ2xhc3Nlcz86IHN0cmluZztcbiAgICBASW5wdXQoKSB3cmFwcGVyQ2xhc3Nlcz86IHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhMZW5ndGg/OiBudW1iZXI7XG4gICAgQElucHV0KCkgaXNQbGFpblRleHQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpc1JlYWRPbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgQElucHV0KCkgaXNSb3VuZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGlzRmx1c2ggPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpc0lucHV0R3JvdXBGbGF0ID0gZmFsc2U7XG4gICAgQElucHV0KCkgaXNQcmVwZW5kQnV0dG9uID0gZmFsc2U7XG4gICAgQElucHV0KCkgaXNBcHBlbmRCdXR0b24gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpc0Zsb2F0aW5nID0gZmFsc2U7XG4gICAgQElucHV0KCkgbG9hZGVyUG9zaXRpb246IExvYWRlclBvc2l0aW9uVHlwZSA9ICdhcHBlbmQnO1xuICAgIEBJbnB1dCgpIHByZXBlbmRJY29uTW9kZWw/OiBJY29uTW9kZWw7XG4gICAgQElucHV0KCkgYXBwZW5kSWNvbk1vZGVsPzogSWNvbk1vZGVsO1xuICAgIEBJbnB1dCgpIGlzVmFsaWRhdGlvblN0YXR1c0xpZ2h0ID0gZmFsc2U7XG4gICAgQElucHV0KCkgbGF5b3V0OiBIb3Jpem9udGFsVmVydGljYWxUeXBlID0gJ3ZlcnRpY2FsJztcblxuICAgIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBibHVycmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhbnkga2V5IGlzIHByZXNzZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGtleURvd24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIEVTQyBrZXkgaXMgcHJlc3NlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkga2V5RG93bkVzYyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIEVOVEVSIGtleSBpcyByZWxlYXNlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkga2V5VXBFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG4gICAgZ2V0IHNob3VsZERpc3BsYXlJbm5lckxhYmVsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxhYmVsKClcbiAgICAgICAgICAgICYmICF0aGlzLnByZXBlbmRJY29uTW9kZWxcbiAgICAgICAgICAgICYmICF0aGlzLmFwcGVuZEljb25Nb2RlbFxuICAgICAgICAgICAgJiYgIXRoaXMuaXNMb2FkaW5nXG4gICAgICAgICAgICAmJiAhdGhpcy5hcHBlbmRUZW1wbGF0ZVxuICAgICAgICAgICAgJiYgIXRoaXMucHJlcGVuZFRlbXBsYXRlO1xuICAgIH1cbiAgICBnZXQgbGFiZWxTaXplQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5sYXlvdXQgIT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgICAgcmV0dXJuICdmb3JtLWxhYmVsJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBDb2x1bW5TaXplSGVscGVyLmdldENsYXNzZXMoXG4gICAgICAgICAgICAnY29sLWZvcm0tbGFiZWwnLFxuICAgICAgICAgICAgQ29sdW1uU2l6ZUhlbHBlci5nZXRTaXplQ2xhc3Nlcyh0aGlzLmxhYmVsQ29sU2l6ZSgpLCAzKVxuICAgICAgICApO1xuICAgIH1cbiAgICBnZXQgdmFsaWRhdGlvbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudmFsaWRhdGlvblN0YXR1cygpID8gYGlzLSR7dGhpcy52YWxpZGF0aW9uU3RhdHVzKCl9YCA6ICcnO1xuICAgIH1cbiAgICBnZXQgdmFsaWRhdGlvbkJvcmRlckNsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudmFsaWRhdGlvblN0YXR1cygpID8gYGJvcmRlci0ke3RoaXMudmFsaWRhdGlvblN0YXR1cygpID09PSAnaW52YWxpZCcgPyAnZGFuZ2VyJyA6ICdzdWNjZXNzJ31gIDogJyc7XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgdmFsdWVDaGFuZ2VkU3ViID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2xhc3NlcygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVDbGFzc2VzKCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10gJiYgISF0aGlzLm1hc2spIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkU3ViLm5leHQoY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbnB1dENoYW5nZShldnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghZXZ0LnRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KChldnQudGFyZ2V0IGFzIGFueSkudmFsdWUpO1xuICAgIH1cblxuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLm1hc2tlZElucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2xhc3NlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbENsYXNzZXM6IHN0cmluZ1tdID0gIXRoaXMuaXNQbGFpblRleHQgPyBbJ2Zvcm0tY29udHJvbCddIDogWydmb3JtLWNvbnRyb2wtcGxhaW50ZXh0J107XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSb3VuZCkge1xuICAgICAgICAgICAgbENsYXNzZXMucHVzaCgnZm9ybS1jb250cm9sLXJvdW5kZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRmx1c2gpIHtcbiAgICAgICAgICAgIGxDbGFzc2VzLnB1c2goJ2Zvcm0tY29udHJvbC1mbHVzaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2l6ZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICBsQ2xhc3Nlcy5wdXNoKGBmb3JtLWNvbnRyb2wtJHt0aGlzLnNpemUgPT09ICdsYXJnZScgPyAnbGcnIDogJ3NtJ31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghIXRoaXMudmFsaWRhdGlvblN0YXR1cygpKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNDbHMgPSBgaXMtJHt0aGlzLnZhbGlkYXRpb25TdGF0dXMoKX1gO1xuICAgICAgICAgICAgbENsYXNzZXMucHVzaChzdGF0dXNDbHMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkYXRpb25TdGF0dXNMaWdodCkge1xuICAgICAgICAgICAgICAgIGxDbGFzc2VzLnB1c2goYCR7c3RhdHVzQ2xzfS1saXRlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgICAgdGhpcy5ob3N0V3JhcHBlckNsYXNzZXMgPSAncm93JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghIXRoaXMud3JhcHBlckNsYXNzZXMpIHtcbiAgICAgICAgICAgIHRoaXMuaG9zdFdyYXBwZXJDbGFzc2VzICs9IGAgJHt0aGlzLndyYXBwZXJDbGFzc2VzfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0Zsb2F0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RXcmFwcGVyQ2xhc3NlcyArPSAnIGZvcm0tZmxvYXRpbmcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGFzc2VzID0gW1xuICAgICAgICAgICAgLi4ubENsYXNzZXMsXG4gICAgICAgICAgICAuLi4odGhpcy5jdXN0b21DbGFzc2VzIHx8ICcnKS5zcGxpdCgnICcpLFxuICAgICAgICAgICAgdGhpcy5sYXlvdXQgPT09ICdob3Jpem9udGFsJyA/ICdjb2wnIDogJydcbiAgICAgICAgXTtcbiAgICB9XG59XG4iLCJAaWYgKCEhYXBwZW5kVGVtcGxhdGUgfHwgISFwcmVwZW5kVGVtcGxhdGUpIHtcbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiIFtjbGFzcy5pbnB1dC1ncm91cC1mbGF0XT1cImlzSW5wdXRHcm91cEZsYXRcIiBbbmdDbGFzc109XCJ2YWxpZGF0aW9uQ2xhc3NcIj5cbiAgICAgICAgQGlmICghIXByZXBlbmRUZW1wbGF0ZSkge1xuICAgICAgICAgICAgQGlmICghaXNQcmVwZW5kQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBbbmdDbGFzc109XCJ2YWxpZGF0aW9uQm9yZGVyQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByZXBlbmRUZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwicHJlcGVuZFRlbXBsYXRlLnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dFRwbFwiPjwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgQGlmICghIWFwcGVuZFRlbXBsYXRlKSB7XG4gICAgICAgICAgICBAaWYgKCFpc0FwcGVuZEJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCIgW25nQ2xhc3NdPVwidmFsaWRhdGlvbkJvcmRlckNsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJhcHBlbmRUZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXBwZW5kVGVtcGxhdGUudGVtcGxhdGVSZWZcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmVlZGJhY2tUcGxcIj48L25nLXRlbXBsYXRlPlxufSBAZWxzZSBpZiAoISFwcmVwZW5kSWNvbk1vZGVsIHx8ICEhYXBwZW5kSWNvbk1vZGVsIHx8IGlzTG9hZGluZykge1xuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dEljb25UcGxcIj48L25nLXRlbXBsYXRlPlxufSBAZWxzZSB7XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImlucHV0VHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmVlZGJhY2tUcGxcIj48L25nLXRlbXBsYXRlPlxufVxuXG48bmctdGVtcGxhdGUgI2lucHV0VHBsPlxuICAgIEBpZiAoc2hvdWxkRGlzcGxheUlubmVyTGFiZWwgJiYgIWlzRmxvYXRpbmcpIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYmFzaWNJbnB1dFRwbFwiPjwvbmctdGVtcGxhdGU+XG5cbiAgICBAaWYgKHNob3VsZERpc3BsYXlJbm5lckxhYmVsICYmIGlzRmxvYXRpbmcpIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0SWNvblRwbD5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgIDxkaXYgW2NsYXNzLmNvbF09XCJsYXlvdXQgPT09ICdob3Jpem9udGFsJ1wiIFtjbGFzcy5pbnB1dC1pY29uXT1cImxheW91dCA9PT0gJ3ZlcnRpY2FsJ1wiPlxuICAgICAgICBAaWYgKGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaWNvblwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dEljb25CYXNlVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dEljb25CYXNlVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbnB1dEljb25CYXNlVHBsPlxuICAgIEBpZiAoISFwcmVwZW5kSWNvbk1vZGVsIHx8IChpc0xvYWRpbmcgJiYgbG9hZGVyUG9zaXRpb24gPT09ICdwcmVwZW5kJykpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1pY29uLWFkZG9uXCI+XG4gICAgICAgICAgICBAaWYgKCEhcHJlcGVuZEljb25Nb2RlbCkge1xuICAgICAgICAgICAgICAgIDx1cGQtaWNvbiBbbW9kZWxdPVwicHJlcGVuZEljb25Nb2RlbFwiPjwvdXBkLWljb24+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZGVyVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9zcGFuPlxuICAgIH1cblxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dFRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZlZWRiYWNrVHBsXCI+PC9uZy10ZW1wbGF0ZT5cblxuICAgIEBpZiAoISFhcHBlbmRJY29uTW9kZWwgfHwgKGlzTG9hZGluZyAmJiBsb2FkZXJQb3NpdGlvbiA9PT0gJ2FwcGVuZCcpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtaWNvbi1hZGRvblwiPlxuICAgICAgICAgICAgQGlmICghIWFwcGVuZEljb25Nb2RlbCkge1xuICAgICAgICAgICAgICAgIDx1cGQtaWNvbiBbbW9kZWxdPVwiYXBwZW5kSWNvbk1vZGVsXCI+PC91cGQtaWNvbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsb2FkZXJUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L3NwYW4+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2FkZXJUcGw+XG4gICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIHRleHQtbXV0ZWRcIiByb2xlPVwic3RhdHVzXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Jhc2ljSW5wdXRUcGw+XG4gICAgQGlmICghIW1hc2spIHtcbiAgICAgICAgPGlucHV0ICNtYXNrZWRJbnB1dEVsIFt1cGRNYXNrXT1cIm1hc2tcIiBbdXBkTWFza0NvbmZpZ109XCJtYXNrQ29uZmlnXCIgW3VwZGF0ZU1hc2tWYWx1ZVN1YmplY3RdPVwidmFsdWVDaGFuZ2VkU3ViXCIgW2F0dHIudHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICAgIFthdHRyLm1heGxlbmd0aF09XCJtYXhMZW5ndGhcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCIgW25nQ2xhc3NdPVwiY2xhc3Nlc1wiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclRleHRcIiBbdmFsdWVdPVwidmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lKClcIiBbYXR0ci5yZWFkb25seV09XCJpc1JlYWRPbmx5ID8gJycgOiB1bmRlZmluZWRcIiAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCIgKGJsdXIpPVwiYmx1cnJlZC5lbWl0KClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwia2V5RG93bi5lbWl0KCRldmVudClcIiAoa2V5ZG93bi5lc2NhcGUpPVwia2V5RG93bkVzYy5lbWl0KClcIiAoa2V5dXAuZW50ZXIpPVwia2V5VXBFbnRlci5lbWl0KClcIiAvPlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8aW5wdXQgI2lucHV0RWwgW2F0dHIudHlwZV09XCJ0eXBlXCIgW2F0dHIubWF4bGVuZ3RoXT1cIm1heExlbmd0aFwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIiBbbmdDbGFzc109XCJjbGFzc2VzXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclRleHRcIiBbdmFsdWVdPVwidmFsdWUgfHwgJydcIiBbYXR0ci5uYW1lXT1cIm5hbWUoKVwiIFthdHRyLnJlYWRvbmx5XT1cImlzUmVhZE9ubHkgPyAnJyA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCIgKGJsdXIpPVwiYmx1cnJlZC5lbWl0KClcIiAoa2V5ZG93bik9XCJrZXlEb3duLmVtaXQoJGV2ZW50KVwiIChrZXlkb3duLmVzY2FwZSk9XCJrZXlEb3duRXNjLmVtaXQoKVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwia2V5VXBFbnRlci5lbWl0KClcIiAvPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZmVlZGJhY2tUcGw+XG4gICAgQGlmICh2YWxpZGF0aW9uU3RhdHVzKCkgPT09ICdpbnZhbGlkJyAmJiB2YWxpZGF0aW9uU3RhdHVzVGV4dHMubGVuZ3RoID4gMCkge1xuICAgICAgICBAZm9yIChkZXNjIG9mIHZhbGlkYXRpb25TdGF0dXNUZXh0czsgdHJhY2sgZGVzYykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj57eyBkZXNjIH19PC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2hpbnRUcGw+XG4gICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhlbHAgbXMtMlwiIFt1cGRQb3BvdmVyXT1cImhpbnRUZXh0XCIgW3VwZFBvcG92ZXJUZW1wbGF0ZV09XCJoaW50VGVtcGxhdGUoKVwiIFt1cGRQb3BvdmVyQWN0QXNUb29sdGlwXT1cImhpbnRBc1Rvb2x0aXAoKVwiPlxuICAgICAgICA/XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsYWJlbFRwbD5cbiAgICBAaWYgKCEhbGFiZWxUZXh0ICYmICFpc0Zsb2F0aW5nKSB7XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwibGFiZWxTaXplQ2xhc3Nlc1wiPlxuICAgICAgICAgICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJpc1JlcXVpcmVkKClcIj57eyBsYWJlbFRleHQgfX08L2xhYmVsPlxuXG4gICAgICAgICAgICBAaWYgKCEhaGludFRleHQgfHwgISF0aGlzLmhpbnRUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhpbnRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIGlmICghIWxhYmVsVGV4dCkge1xuICAgICAgICA8bGFiZWwgW25nQ2xhc3NdPVwibGFiZWxTaXplQ2xhc3Nlc1wiIFtjbGFzcy5yZXF1aXJlZF09XCJpc1JlcXVpcmVkKClcIj57eyBsYWJlbFRleHQgfX08L2xhYmVsPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -21,6 +21,9 @@ export class SelectComponent extends BaseSelectComponent {
21
21
  this.shouldTruncateSelectedText = input(true);
22
22
  this.isCompact = input(false);
23
23
  this.value = input();
24
+ this.parentSelectedId = input();
25
+ this.parentDependentLoader = input();
26
+ this.getItemById = input();
24
27
  this.shouldShowHintWithoutLabel = computed(() => !this.labelText && (!!this.hintText || !!this.hintTemplate()));
25
28
  /**
26
29
  * Triggered when an item is selected.
@@ -29,15 +32,40 @@ export class SelectComponent extends BaseSelectComponent {
29
32
  effect(() => {
30
33
  const val = this.value();
31
34
  const items = this.localItems();
32
- if (val !== undefined && val !== null && items.length > 0) {
33
- // eslint-disable-next-line eqeqeq
34
- const item = items.find(i => i.value == val);
35
- this.currentSelection = item;
35
+ const getItemFn = this.getItemById();
36
+ // eslint-disable-next-line no-null/no-null
37
+ if (val !== undefined && val !== null) {
38
+ if (items.length > 0) {
39
+ // eslint-disable-next-line eqeqeq
40
+ const item = items.find(i => i.value == val);
41
+ if (!!item) {
42
+ this.currentSelection = item;
43
+ }
44
+ else if (!!getItemFn) {
45
+ this.fetchMissingItem(val, getItemFn);
46
+ }
47
+ else {
48
+ this.currentSelection = undefined;
49
+ }
50
+ }
51
+ else if (!!getItemFn) {
52
+ this.fetchMissingItem(val, getItemFn);
53
+ }
36
54
  }
37
- else if (val === undefined || val === null) {
55
+ else {
38
56
  this.currentSelection = undefined;
39
57
  }
40
58
  });
59
+ effect(() => {
60
+ const parentId = this.parentSelectedId();
61
+ const loader = this.parentDependentLoader();
62
+ if (!!parentId && !!loader) {
63
+ this.loadDependentData(parentId, loader);
64
+ }
65
+ else if (!parentId && !!loader) {
66
+ this.clearData();
67
+ }
68
+ });
41
69
  }
42
70
  onSelectItem(item) {
43
71
  this._currentTerm = item.text;
@@ -49,6 +77,7 @@ export class SelectComponent extends BaseSelectComponent {
49
77
  if (!!this.currentSelection) {
50
78
  break;
51
79
  }
80
+ // eslint-disable-next-line eqeqeq
52
81
  }
53
82
  else if (localBackupItem.value == item.id) {
54
83
  this.currentSelection = localBackupItem;
@@ -67,11 +96,48 @@ export class SelectComponent extends BaseSelectComponent {
67
96
  this._currentTerm = undefined;
68
97
  this.selectedItem.emit(undefined);
69
98
  }
99
+ loadDependentData(parentId, loader) {
100
+ loader(parentId).subscribe({
101
+ next: (items) => {
102
+ this._setupLocalItems(items);
103
+ this.clearSelection();
104
+ },
105
+ error: () => {
106
+ this._setupLocalItems([]);
107
+ this.clearSelection();
108
+ }
109
+ });
110
+ }
111
+ clearData() {
112
+ this._setupLocalItems([]);
113
+ this.clearSelection();
114
+ }
115
+ fetchMissingItem(id, getItemFn) {
116
+ getItemFn(id).subscribe({
117
+ next: (item) => {
118
+ if (!!item) {
119
+ this.currentSelection = item;
120
+ const currentItems = this.localItems();
121
+ // eslint-disable-next-line eqeqeq
122
+ if (!currentItems.find(i => i.value == item.value)) {
123
+ this._setupLocalItems([...currentItems, item]);
124
+ }
125
+ }
126
+ else {
127
+ this.currentSelection = undefined;
128
+ }
129
+ this.selectedItem.emit(this.currentSelection);
130
+ },
131
+ error: () => {
132
+ this.currentSelection = undefined;
133
+ }
134
+ });
135
+ }
70
136
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
71
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SelectComponent, selector: "upd-select", inputs: { useSystemStyle: { classPropertyName: "useSystemStyle", publicName: "useSystemStyle", isSignal: true, isRequired: false, transformFunction: null }, shouldShowClearButton: { classPropertyName: "shouldShowClearButton", publicName: "shouldShowClearButton", isSignal: true, isRequired: false, transformFunction: null }, shouldTruncateSelectedText: { classPropertyName: "shouldTruncateSelectedText", publicName: "shouldTruncateSelectedText", isSignal: true, isRequired: false, transformFunction: null }, isCompact: { classPropertyName: "isCompact", publicName: "isCompact", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedItem: "selectedItem" }, usesInheritance: true, ngImport: i0, template: "@if (!!labelText) {\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n </div>\n <div class=\"col-auto\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n }\n}\n\n@if (!useSystemStyle()) {\n <div class=\"dropdown\" [attr.id]=\"name()\" [ngClass]=\"layoutClasses()\">\n @if (shouldShowHintWithoutLabel()) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n\n <div #searchBox>\n <div #searchBoxChild [style.visibility]=\"isDropdownOpen ? 'visible' : 'hidden'\" class=\"select-search-box\">\n <upd-input [placeholder]=\"placeholder()\" [isInputGroupFlat]=\"true\" (valueChange)=\"search($event)\">\n <ng-template updInputPrepend>\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </ng-template>\n </upd-input>\n </div>\n </div>\n <upd-list #list [items]=\"listItems\" [maxHeight]=\"dropdownMaxHeight() + 'px'\" (selectedItem)=\"onSelectItem($event)\"\n [wrapperClasses]=\"dropdownClasses\" [isVisible]=\"isDropdownOpen\" [shouldOverflow]=\"true\" [shouldDisplayItemsCounter]=\"true\">\n </upd-list>\n </div>\n} @else {\n @if (shouldShowHintWithoutLabel()) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #hintTpl>\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\n\n<ng-template #contentTpl>\n <div #componentBox class=\"input-group input-group-flat\">\n <div class=\"form-control\" [class.remove-bottom-radius]=\"isDropdownOpen\" [class.disabled]=\"isDisabled()\"\n [class.pe-none]=\"isDisabled()\" [class.select-cursor-default]=\"!isDisabled()\"\n [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\" (click)=\"openDropdown()\">\n @if (!!currentSelection) {\n <span [ngClass]=\"canTruncateText ? 'd-block text-truncate' : ''\">{{ currentSelection.text }}</span>\n }\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (!!currentSelection && shouldShowClearButton()) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"clearSelection()\"\n customClasses=\"link-secondary\" [class.select-cursor-pointer]=\"!isDisabled()\"\n [iconModel]=\"{tablerIcon:'x', tablerIconSize: 16}\">\n </upd-button>\n }\n @if (!isLoading) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"openDropdown()\"\n customClasses=\"link-secondary ms-2\" [class.select-cursor-pointer]=\"!isDisabled()\"\n [iconModel]=\"{tablerIcon:'chevron-down', tablerIconSize: 16}\">\n </upd-button>\n } @else {\n <div class=\"select-loader-wrapper\">\n <div class=\"spinner-border spinner-border-sm text-muted select-loader\" role=\"status\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #contentDefaultStyleTpl>\n <select class=\"form-select\" [class.compact]=\"isCompact()\" [attr.placeholder]=\"placeholder()\" [attr.name]=\"name()\"\n [class.select-cursor-pointer]=\"!isDisabled()\" [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\"\n (change)=\"onSystemSelect($event)\">\n @for (item of localItems(); track item) {\n @if ((item.children?.length || 0) > 0) {\n <optgroup [label]=\"item.text\">\n @for (child of item.children; track child) {\n <option [attr.selected]=\"!!currentSelection && child.value === currentSelection.value ? true : undefined\"\n [value]=\"child.value\">\n {{ child.text }}\n </option>\n }\n </optgroup>\n } @else {\n <option [attr.selected]=\"!!currentSelection && item.value === currentSelection.value ? true : undefined\"\n [value]=\"item.value\">\n {{ item.text }}\n </option>\n }\n }\n </select>\n</ng-template>", styles: [".select-dropdown-content{position:absolute!important;background-color:var(--upd-card-bg);z-index:1;border:var(--upd-card-border-width) solid var(--upd-card-border-color)!important;border-radius:var(--upd-card-border-radius)!important;box-shadow:0 1px 1px #0000002e}.select-dropdown-content-open{display:block!important}.select-loader-wrapper{height:24px}.select-loader-wrapper .select-loader{height:24px;width:24px}.select-search-box{position:absolute;z-index:1;padding:.5rem;margin-top:-1px;background:var(--upd-body-bg);border:var(--upd-border-width) var(--upd-border-style) var(--upd-border-color)}.remove-bottom-radius{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.remove-top-radius{border-top-left-radius:0!important;border-top-right-radius:0!important}.compact{padding:.25rem 2rem .25rem .75rem!important}.select-cursor-default{cursor:default}.select-cursor-pointer{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ListComponent, selector: "upd-list", inputs: ["items", "shouldOverflow", "isFlush", "isVisible", "isHoverable", "shouldDisplayItemsCounter", "wrapperClasses", "maxHeight"], outputs: ["checkboxChanged", "selectedItem"] }, { kind: "component", type: i3.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "maxLength", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "directive", type: i3.InputPrependDirective, selector: "ng-template[updInputPrepend]" }, { kind: "component", type: i4.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i5.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "directive", type: i6.PopoverDirective, selector: "[updPopover]", inputs: ["updPopover", "updPopoverTitle", "updPopoverTitleTemplate", "updPopoverTemplate", "updPopoverPlacement", "updPopoverCustomClasses", "updPopoverActAsTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
137
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SelectComponent, selector: "upd-select", inputs: { useSystemStyle: { classPropertyName: "useSystemStyle", publicName: "useSystemStyle", isSignal: true, isRequired: false, transformFunction: null }, shouldShowClearButton: { classPropertyName: "shouldShowClearButton", publicName: "shouldShowClearButton", isSignal: true, isRequired: false, transformFunction: null }, shouldTruncateSelectedText: { classPropertyName: "shouldTruncateSelectedText", publicName: "shouldTruncateSelectedText", isSignal: true, isRequired: false, transformFunction: null }, isCompact: { classPropertyName: "isCompact", publicName: "isCompact", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, parentSelectedId: { classPropertyName: "parentSelectedId", publicName: "parentSelectedId", isSignal: true, isRequired: false, transformFunction: null }, parentDependentLoader: { classPropertyName: "parentDependentLoader", publicName: "parentDependentLoader", isSignal: true, isRequired: false, transformFunction: null }, getItemById: { classPropertyName: "getItemById", publicName: "getItemById", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedItem: "selectedItem" }, usesInheritance: true, ngImport: i0, template: "@if (!!labelText) {\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n </div>\n <div class=\"col-auto\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n }\n}\n\n@if (!useSystemStyle()) {\n <div class=\"dropdown\" [attr.id]=\"name()\" [ngClass]=\"layoutClasses()\">\n @if (shouldShowHintWithoutLabel()) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n\n <div #searchBox>\n <div #searchBoxChild [style.visibility]=\"isDropdownOpen ? 'visible' : 'hidden'\" class=\"select-search-box\">\n <upd-input [placeholder]=\"placeholder()\" [isInputGroupFlat]=\"true\" (valueChange)=\"search($event)\">\n <ng-template updInputPrepend>\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </ng-template>\n </upd-input>\n </div>\n </div>\n <upd-list #list [items]=\"listItems\" [maxHeight]=\"dropdownMaxHeight() + 'px'\" (selectedItem)=\"onSelectItem($event)\"\n [wrapperClasses]=\"dropdownClasses\" [isVisible]=\"isDropdownOpen\" [shouldOverflow]=\"true\" [shouldDisplayItemsCounter]=\"true\">\n </upd-list>\n </div>\n} @else {\n @if (shouldShowHintWithoutLabel()) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #hintTpl>\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\n\n<ng-template #contentTpl>\n <div #componentBox class=\"input-group input-group-flat\">\n <div class=\"form-control\" [class.remove-bottom-radius]=\"isDropdownOpen\" [class.disabled]=\"isDisabled()\"\n [class.pe-none]=\"isDisabled()\" [class.select-cursor-default]=\"!isDisabled()\"\n [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\" (click)=\"openDropdown()\">\n @if (!!currentSelection) {\n <span [ngClass]=\"canTruncateText ? 'd-block text-truncate' : ''\">{{ currentSelection.text }}</span>\n }\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (!!currentSelection && shouldShowClearButton()) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"clearSelection()\"\n customClasses=\"link-secondary\" [class.select-cursor-pointer]=\"!isDisabled()\"\n [iconModel]=\"{tablerIcon:'x', tablerIconSize: 16}\">\n </upd-button>\n }\n @if (!isLoading) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"openDropdown()\"\n customClasses=\"link-secondary ms-2\" [class.select-cursor-pointer]=\"!isDisabled()\"\n [iconModel]=\"{tablerIcon:'chevron-down', tablerIconSize: 16}\">\n </upd-button>\n } @else {\n <div class=\"select-loader-wrapper\">\n <div class=\"spinner-border spinner-border-sm text-muted select-loader\" role=\"status\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #contentDefaultStyleTpl>\n <select class=\"form-select\" [class.compact]=\"isCompact()\" [attr.placeholder]=\"placeholder()\" [attr.name]=\"name()\"\n [class.select-cursor-pointer]=\"!isDisabled()\" [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\"\n (change)=\"onSystemSelect($event)\">\n @for (item of localItems(); track item) {\n @if ((item.children?.length || 0) > 0) {\n <optgroup [label]=\"item.text\">\n @for (child of item.children; track child) {\n <option [attr.selected]=\"!!currentSelection && child.value === currentSelection.value ? true : undefined\"\n [value]=\"child.value\">\n {{ child.text }}\n </option>\n }\n </optgroup>\n } @else {\n <option [attr.selected]=\"!!currentSelection && item.value === currentSelection.value ? true : undefined\"\n [value]=\"item.value\">\n {{ item.text }}\n </option>\n }\n }\n </select>\n</ng-template>", styles: [".select-dropdown-content{position:absolute!important;background-color:var(--upd-card-bg);z-index:1;border:var(--upd-card-border-width) solid var(--upd-card-border-color)!important;border-radius:var(--upd-card-border-radius)!important;box-shadow:0 1px 1px #0000002e}.select-dropdown-content-open{display:block!important}.select-loader-wrapper{height:24px}.select-loader-wrapper .select-loader{height:24px;width:24px}.select-search-box{position:absolute;z-index:1;padding:.5rem;margin-top:-1px;background:var(--upd-body-bg);border:var(--upd-border-width) var(--upd-border-style) var(--upd-border-color)}.remove-bottom-radius{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.remove-top-radius{border-top-left-radius:0!important;border-top-right-radius:0!important}.compact{padding:.25rem 2rem .25rem .75rem!important}.select-cursor-default{cursor:default}.select-cursor-pointer{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ListComponent, selector: "upd-list", inputs: ["items", "shouldOverflow", "isFlush", "isVisible", "isHoverable", "shouldDisplayItemsCounter", "wrapperClasses", "maxHeight"], outputs: ["checkboxChanged", "selectedItem"] }, { kind: "component", type: i3.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "maxLength", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "directive", type: i3.InputPrependDirective, selector: "ng-template[updInputPrepend]" }, { kind: "component", type: i4.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i5.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "directive", type: i6.PopoverDirective, selector: "[updPopover]", inputs: ["updPopover", "updPopoverTitle", "updPopoverTitleTemplate", "updPopoverTemplate", "updPopoverPlacement", "updPopoverCustomClasses", "updPopoverActAsTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
72
138
  }
73
139
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SelectComponent, decorators: [{
74
140
  type: Component,
75
141
  args: [{ selector: 'upd-select', encapsulation: ViewEncapsulation.None, template: "@if (!!labelText) {\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n </div>\n <div class=\"col-auto\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n }\n}\n\n@if (!useSystemStyle()) {\n <div class=\"dropdown\" [attr.id]=\"name()\" [ngClass]=\"layoutClasses()\">\n @if (shouldShowHintWithoutLabel()) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n\n <div #searchBox>\n <div #searchBoxChild [style.visibility]=\"isDropdownOpen ? 'visible' : 'hidden'\" class=\"select-search-box\">\n <upd-input [placeholder]=\"placeholder()\" [isInputGroupFlat]=\"true\" (valueChange)=\"search($event)\">\n <ng-template updInputPrepend>\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </ng-template>\n </upd-input>\n </div>\n </div>\n <upd-list #list [items]=\"listItems\" [maxHeight]=\"dropdownMaxHeight() + 'px'\" (selectedItem)=\"onSelectItem($event)\"\n [wrapperClasses]=\"dropdownClasses\" [isVisible]=\"isDropdownOpen\" [shouldOverflow]=\"true\" [shouldDisplayItemsCounter]=\"true\">\n </upd-list>\n </div>\n} @else {\n @if (shouldShowHintWithoutLabel()) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #hintTpl>\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\n\n<ng-template #contentTpl>\n <div #componentBox class=\"input-group input-group-flat\">\n <div class=\"form-control\" [class.remove-bottom-radius]=\"isDropdownOpen\" [class.disabled]=\"isDisabled()\"\n [class.pe-none]=\"isDisabled()\" [class.select-cursor-default]=\"!isDisabled()\"\n [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\" (click)=\"openDropdown()\">\n @if (!!currentSelection) {\n <span [ngClass]=\"canTruncateText ? 'd-block text-truncate' : ''\">{{ currentSelection.text }}</span>\n }\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (!!currentSelection && shouldShowClearButton()) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"clearSelection()\"\n customClasses=\"link-secondary\" [class.select-cursor-pointer]=\"!isDisabled()\"\n [iconModel]=\"{tablerIcon:'x', tablerIconSize: 16}\">\n </upd-button>\n }\n @if (!isLoading) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"openDropdown()\"\n customClasses=\"link-secondary ms-2\" [class.select-cursor-pointer]=\"!isDisabled()\"\n [iconModel]=\"{tablerIcon:'chevron-down', tablerIconSize: 16}\">\n </upd-button>\n } @else {\n <div class=\"select-loader-wrapper\">\n <div class=\"spinner-border spinner-border-sm text-muted select-loader\" role=\"status\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #contentDefaultStyleTpl>\n <select class=\"form-select\" [class.compact]=\"isCompact()\" [attr.placeholder]=\"placeholder()\" [attr.name]=\"name()\"\n [class.select-cursor-pointer]=\"!isDisabled()\" [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\"\n (change)=\"onSystemSelect($event)\">\n @for (item of localItems(); track item) {\n @if ((item.children?.length || 0) > 0) {\n <optgroup [label]=\"item.text\">\n @for (child of item.children; track child) {\n <option [attr.selected]=\"!!currentSelection && child.value === currentSelection.value ? true : undefined\"\n [value]=\"child.value\">\n {{ child.text }}\n </option>\n }\n </optgroup>\n } @else {\n <option [attr.selected]=\"!!currentSelection && item.value === currentSelection.value ? true : undefined\"\n [value]=\"item.value\">\n {{ item.text }}\n </option>\n }\n }\n </select>\n</ng-template>", styles: [".select-dropdown-content{position:absolute!important;background-color:var(--upd-card-bg);z-index:1;border:var(--upd-card-border-width) solid var(--upd-card-border-color)!important;border-radius:var(--upd-card-border-radius)!important;box-shadow:0 1px 1px #0000002e}.select-dropdown-content-open{display:block!important}.select-loader-wrapper{height:24px}.select-loader-wrapper .select-loader{height:24px;width:24px}.select-search-box{position:absolute;z-index:1;padding:.5rem;margin-top:-1px;background:var(--upd-body-bg);border:var(--upd-border-width) var(--upd-border-style) var(--upd-border-color)}.remove-bottom-radius{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.remove-top-radius{border-top-left-radius:0!important;border-top-right-radius:0!important}.compact{padding:.25rem 2rem .25rem .75rem!important}.select-cursor-default{cursor:default}.select-cursor-pointer{cursor:pointer}\n"] }]
76
142
  }], ctorParameters: () => [] });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL3NlbGVjdC9zcmMvY29tcG9uZW50cy9zaW5nbGUvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL3NlbGVjdC9zcmMvY29tcG9uZW50cy9zaW5nbGUvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTlGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7OztBQVN0RixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxtQkFBbUI7SUFrQnBELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRSxLQUFLLFNBQVMsQ0FBQztJQUN6RyxDQUFDO0lBRUQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQXRCWjs7V0FFRztRQUNNLG1CQUFjLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLDBCQUFxQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQywrQkFBMEIsR0FBRyxLQUFLLENBQXdCLElBQUksQ0FBQyxDQUFDO1FBQ2hFLGNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsVUFBSyxHQUFHLEtBQUssRUFBTyxDQUFDO1FBRXJCLCtCQUEwQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUks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bnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBjb21wdXRlZCwgZWZmZWN0LCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPcHRpb25hbFR5cGUgfSBmcm9tICdAdXBkZXZzL3Nkay90eXBlcyc7XG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cy9saXN0JztcblxuaW1wb3J0IHsgQmFzZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vZGVscy9hYnN0cmFjdGlvbnMvYmFzZS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VsZWN0LWl0ZW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgQmFzZVNlbGVjdENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgaXQnbGwgdXNlIHRoZSBkZWZhdWx0IHN0eWxlIG9mIHRoZSBPUywgbm8gc2VhcmNoIGNhcGFiaWxpdGllcy5cbiAgICAgKi9cbiAgICByZWFkb25seSB1c2VTeXN0ZW1TdHlsZSA9IGlucHV0KGZhbHNlKTtcbiAgICByZWFkb25seSBzaG91bGRTaG93Q2xlYXJCdXR0b24gPSBpbnB1dCh0cnVlKTtcbiAgICByZWFkb25seSBzaG91bGRUcnVuY2F0ZVNlbGVjdGVkVGV4dCA9IGlucHV0PE9wdGlvbmFsVHlwZTxib29sZWFuPj4odHJ1ZSk7XG4gICAgcmVhZG9ubHkgaXNDb21wYWN0ID0gaW5wdXQoZmFsc2UpO1xuICAgIHJlYWRvbmx5IHZhbHVlID0gaW5wdXQ8YW55PigpO1xuXG4gICAgcmVhZG9ubHkgc2hvdWxkU2hvd0hpbnRXaXRob3V0TGFiZWwgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5sYWJlbFRleHQgJiYgKCEhdGhpcy5oaW50VGV4dCB8fCAhIXRoaXMuaGludFRlbXBsYXRlKCkpKTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGFuIGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtID0gb3V0cHV0PE9wdGlvbmFsVHlwZTxTZWxlY3RJdGVtPj4oKTtcblxuICAgIGN1cnJlbnRTZWxlY3Rpb24/OiBTZWxlY3RJdGVtO1xuICAgIGdldCBjYW5UcnVuY2F0ZVRleHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3VsZFRydW5jYXRlU2VsZWN0ZWRUZXh0KCkgPT09IHRydWUgfHwgdGhpcy5zaG91bGRUcnVuY2F0ZVNlbGVjdGVkVGV4dCgpID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnZhbHVlKCk7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMubG9jYWxJdGVtcygpO1xuXG4gICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zLmZpbmQoaSA9PiBpLnZhbHVlID09IHZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gaXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBvblNlbGVjdEl0ZW0oaXRlbTogTGlzdEl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRlcm0gPSBpdGVtLnRleHQ7XG4gICAgICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxvY2FsQmFja3VwSXRlbSBvZiB0aGlzLl9sb2NhbEJhY2t1cEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoKGxvY2FsQmFja3VwSXRlbS5jaGlsZHJlbj8ubGVuZ3RoIHx8IDApID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSBsb2NhbEJhY2t1cEl0ZW0uY2hpbGRyZW4/LmZpbmQoYyA9PiBjLnZhbHVlID09IGl0ZW0uaWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5jdXJyZW50U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxCYWNrdXBJdGVtLnZhbHVlID09IGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSBsb2NhbEJhY2t1cEl0ZW07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHRoaXMuY3VycmVudFNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgb25TeXN0ZW1TZWxlY3QoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiA9IHRoaXMubG9jYWxJdGVtcygpLmZpbmQoYyA9PiBjLnZhbHVlID09IGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQodGhpcy5jdXJyZW50U2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGVybSA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgfVxufSIsIkBpZiAoISFsYWJlbFRleHQpIHtcbiAgICBAaWYgKCEhaGludFRleHQgfHwgISFoaW50VGVtcGxhdGUoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtuZ0NsYXNzXT1cImxhYmVsU2l6ZUNsYXNzZXNcIj57eyBsYWJlbFRleHQgfX08L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGludFRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIDxsYWJlbCBbbmdDbGFzc109XCJsYWJlbFNpemVDbGFzc2VzXCI+e3sgbGFiZWxUZXh0IH19PC9sYWJlbD5cbiAgICB9XG59XG5cbkBpZiAoIXVzZVN5c3RlbVN0eWxlKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiBbYXR0ci5pZF09XCJuYW1lKClcIiBbbmdDbGFzc109XCJsYXlvdXRDbGFzc2VzKClcIj5cbiAgICAgICAgQGlmIChzaG91bGRTaG93SGludFdpdGhvdXRMYWJlbCgpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBhbGlnbi1zZWxmLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGludFRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cblxuICAgICAgICA8ZGl2ICNzZWFyY2hCb3g+XG4gICAgICAgICAgICA8ZGl2ICNzZWFyY2hCb3hDaGlsZCBbc3R5bGUudmlzaWJpbGl0eV09XCJpc0Ryb3Bkb3duT3BlbiA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCIgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoLWJveFwiPlxuICAgICAgICAgICAgICAgIDx1cGQtaW5wdXQgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIiBbaXNJbnB1dEdyb3VwRmxhdF09XCJ0cnVlXCIgKHZhbHVlQ2hhbmdlKT1cInNlYXJjaCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSB1cGRJbnB1dFByZXBlbmQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWljb24gdGFibGVySWNvbj1cInNlYXJjaFwiPjwvdXBkLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC91cGQtaW5wdXQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx1cGQtbGlzdCAjbGlzdCBbaXRlbXNdPVwibGlzdEl0ZW1zXCIgW21heEhlaWdodF09XCJkcm9wZG93bk1heEhlaWdodCgpICsgJ3B4J1wiIChzZWxlY3RlZEl0ZW0pPVwib25TZWxlY3RJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgW3dyYXBwZXJDbGFzc2VzXT1cImRyb3Bkb3duQ2xhc3Nlc1wiIFtpc1Zpc2libGVdPVwiaXNEcm9wZG93bk9wZW5cIiBbc2hvdWxkT3ZlcmZsb3ddPVwidHJ1ZVwiIFtzaG91bGREaXNwbGF5SXRlbXNDb3VudGVyXT1cInRydWVcIj5cbiAgICAgICAgPC91cGQtbGlzdD5cbiAgICA8L2Rpdj5cbn0gQGVsc2Uge1xuICAgIEBpZiAoc2hvdWxkU2hvd0hpbnRXaXRob3V0TGFiZWwoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50RGVmYXVsdFN0eWxlVHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIGFsaWduLXNlbGYtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhpbnRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudERlZmF1bHRTdHlsZVRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgfVxufVxuXG48bmctdGVtcGxhdGUgI2hpbnRUcGw+XG4gICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhlbHBcIiBbdXBkUG9wb3Zlcl09XCJoaW50VGV4dFwiIFt1cGRQb3BvdmVyVGVtcGxhdGVdPVwiaGludFRlbXBsYXRlKClcIiBbdXBkUG9wb3ZlckFjdEFzVG9vbHRpcF09XCJoaW50QXNUb29sdGlwKClcIj5cbiAgICAgICAgP1xuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudFRwbD5cbiAgICA8ZGl2ICNjb21wb25lbnRCb3ggY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1mbGF0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbY2xhc3MucmVtb3ZlLWJvdHRvbS1yYWRpdXNdPVwiaXNEcm9wZG93bk9wZW5cIiBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgICAgICAgICAgIFtjbGFzcy5wZS1ub25lXT1cImlzRGlzYWJsZWQoKVwiIFtjbGFzcy5zZWxlY3QtY3Vyc29yLWRlZmF1bHRdPVwiIWlzRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpc0Rpc2FibGVkKCkgPyAnZGlzYWJsZWQnIDogdW5kZWZpbmVkXCIgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigpXCI+XG4gICAgICAgICAgICBAaWYgKCEhY3VycmVudFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImNhblRydW5jYXRlVGV4dCA/ICdkLWJsb2NrIHRleHQtdHJ1bmNhdGUnIDogJydcIj57eyBjdXJyZW50U2VsZWN0aW9uLnRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiIFtjbGFzcy5yZW1vdmUtYm90dG9tLXJhZGl1c109XCJpc0Ryb3Bkb3duT3BlblwiPlxuICAgICAgICAgICAgQGlmICghIWN1cnJlbnRTZWxlY3Rpb24gJiYgc2hvdWxkU2hvd0NsZWFyQnV0dG9uKCkpIHtcbiAgICAgICAgICAgICAgICA8dXBkLWJ1dHRvbiBbc2hvdWxkSWdub3JlQnRuQ2xhc3NdPVwidHJ1ZVwiIFtpc0Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiIChjbGlja2VkKT1cImNsZWFyU2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBjdXN0b21DbGFzc2VzPVwibGluay1zZWNvbmRhcnlcIiBbY2xhc3Muc2VsZWN0LWN1cnNvci1wb2ludGVyXT1cIiFpc0Rpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbk1vZGVsXT1cInt0YWJsZXJJY29uOid4JywgdGFibGVySWNvblNpemU6IDE2fVwiPlxuICAgICAgICAgICAgICAgIDwvdXBkLWJ1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIWlzTG9hZGluZykge1xuICAgICAgICAgICAgICAgIDx1cGQtYnV0dG9uIFtzaG91bGRJZ25vcmVCdG5DbGFzc109XCJ0cnVlXCIgW2lzRGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCIgKGNsaWNrZWQpPVwib3BlbkRyb3Bkb3duKClcIlxuICAgICAgICAgICAgICAgICAgICBjdXN0b21DbGFzc2VzPVwibGluay1zZWNvbmRhcnkgbXMtMlwiIFtjbGFzcy5zZWxlY3QtY3Vyc29yLXBvaW50ZXJdPVwiIWlzRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uTW9kZWxdPVwie3RhYmxlckljb246J2NoZXZyb24tZG93bicsIHRhYmxlckljb25TaXplOiAxNn1cIj5cbiAgICAgICAgICAgICAgICA8L3VwZC1idXR0b24+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWxvYWRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSB0ZXh0LW11dGVkIHNlbGVjdC1sb2FkZXJcIiByb2xlPVwic3RhdHVzXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50RGVmYXVsdFN0eWxlVHBsPlxuICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFtjbGFzcy5jb21wYWN0XT1cImlzQ29tcGFjdCgpXCIgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiIFthdHRyLm5hbWVdPVwibmFtZSgpXCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdC1jdXJzb3ItcG9pbnRlcl09XCIhaXNEaXNhYmxlZCgpXCIgW2F0dHIuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpID8gJ2Rpc2FibGVkJyA6IHVuZGVmaW5lZFwiXG4gICAgICAgIChjaGFuZ2UpPVwib25TeXN0ZW1TZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGxvY2FsSXRlbXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgQGlmICgoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoIHx8IDApID4gMCkge1xuICAgICAgICAgICAgICAgIDxvcHRncm91cCBbbGFiZWxdPVwiaXRlbS50ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGl0ZW0uY2hpbGRyZW47IHRyYWNrIGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFthdHRyLnNlbGVjdGVkXT1cIiEhY3VycmVudFNlbGVjdGlvbiAmJiBjaGlsZC52YWx1ZSA9PT0gY3VycmVudFNlbGVjdGlvbi52YWx1ZSA/IHRydWUgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjaGlsZC52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoaWxkLnRleHQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9vcHRncm91cD5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxvcHRpb24gW2F0dHIuc2VsZWN0ZWRdPVwiISFjdXJyZW50U2VsZWN0aW9uICYmIGl0ZW0udmFsdWUgPT09IGN1cnJlbnRTZWxlY3Rpb24udmFsdWUgPyB0cnVlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS50ZXh0IH19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICA8L3NlbGVjdD5cbjwvbmctdGVtcGxhdGU+Il19
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL3NlbGVjdC9zcmMvY29tcG9uZW50cy9zaW5nbGUvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL3NlbGVjdC9zcmMvY29tcG9uZW50cy9zaW5nbGUvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzlGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7OztBQVV0RixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxtQkFBbUI7SUFxQnBELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRSxLQUFLLFNBQVMsQ0FBQztJQUN6RyxDQUFDO0lBRUQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQXpCWjs7V0FFRztRQUNNLG1CQUFjLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLDBCQUFxQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQywrQkFBMEIsR0FBRyxLQUFLLENBQXdCLElBQUksQ0FBQyxDQUFDO1FBQ2hFLGNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsVUFBSyxHQUFHLEtBQUssRUFBTyxDQUFDO1FBQ3JCLHFCQUFnQixHQUFHLEtBQUssRUFBcUIsQ0FBQztRQUM5QywwQkFBcUIsR0FBRyxLQUFLLEVBQW9CLENBQUM7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LGVBQWU7a0dBQWYsZUFBZSx5ekNDZjVCLHc3S0FvSGM7OzJGRHJHRCxlQUFlO2tCQU4zQixTQUFTOytCQUNJLFlBQVksaUJBR1AsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIGNvbXB1dGVkLCBlZmZlY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9wdGlvbmFsVHlwZSB9IGZyb20gJ0B1cGRldnMvc2RrL3R5cGVzJztcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnQHVwZGV2cy9jb21wb25lbnRzL2xpc3QnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCYXNlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Fic3RyYWN0aW9ucy9iYXNlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9zZWxlY3QtaXRlbSc7XG5pbXBvcnQgeyBHZXRJdGVtQnlJZFR5cGUsIFBhcmVudExvYWRlclR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgQmFzZVNlbGVjdENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgaXQnbGwgdXNlIHRoZSBkZWZhdWx0IHN0eWxlIG9mIHRoZSBPUywgbm8gc2VhcmNoIGNhcGFiaWxpdGllcy5cbiAgICAgKi9cbiAgICByZWFkb25seSB1c2VTeXN0ZW1TdHlsZSA9IGlucHV0KGZhbHNlKTtcbiAgICByZWFkb25seSBzaG91bGRTaG93Q2xlYXJCdXR0b24gPSBpbnB1dCh0cnVlKTtcbiAgICByZWFkb25seSBzaG91bGRUcnVuY2F0ZVNlbGVjdGVkVGV4dCA9IGlucHV0PE9wdGlvbmFsVHlwZTxib29sZWFuPj4odHJ1ZSk7XG4gICAgcmVhZG9ubHkgaXNDb21wYWN0ID0gaW5wdXQoZmFsc2UpO1xuICAgIHJlYWRvbmx5IHZhbHVlID0gaW5wdXQ8YW55PigpO1xuICAgIHJlYWRvbmx5IHBhcmVudFNlbGVjdGVkSWQgPSBpbnB1dDxPcHRpb25hbFR5cGU8YW55Pj4oKTtcbiAgICByZWFkb25seSBwYXJlbnREZXBlbmRlbnRMb2FkZXIgPSBpbnB1dDxQYXJlbnRMb2FkZXJUeXBlPigpO1xuICAgIHJlYWRvbmx5IGdldEl0ZW1CeUlkID0gaW5wdXQ8R2V0SXRlbUJ5SWRUeXBlPigpO1xuXG4gICAgcmVhZG9ubHkgc2hvdWxkU2hvd0hpbnRXaXRob3V0TGFiZWwgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5sYWJlbFRleHQgJiYgKCEhdGhpcy5oaW50VGV4dCB8fCAhIXRoaXMuaGludFRlbXBsYXRlKCkpKTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGFuIGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtID0gb3V0cHV0PE9wdGlvbmFsVHlwZTxTZWxlY3RJdGVtPj4oKTtcblxuICAgIGN1cnJlbnRTZWxlY3Rpb24/OiBTZWxlY3RJdGVtO1xuICAgIGdldCBjYW5UcnVuY2F0ZVRleHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3VsZFRydW5jYXRlU2VsZWN0ZWRUZXh0KCkgPT09IHRydWUgfHwgdGhpcy5zaG91bGRUcnVuY2F0ZVNlbGVjdGVkVGV4dCgpID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMudmFsdWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5sb2NhbEl0ZW1zKCk7XG4gICAgICAgICAgICBjb25zdCBnZXRJdGVtRm4gPSB0aGlzLmdldEl0ZW1CeUlkKCk7XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1udWxsL25vLW51bGxcbiAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtcy5maW5kKGkgPT4gaS52YWx1ZSA9PSB2YWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiA9IGl0ZW07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoISFnZXRJdGVtRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hNaXNzaW5nSXRlbSh2YWwsIGdldEl0ZW1Gbik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEhZ2V0SXRlbUZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hNaXNzaW5nSXRlbSh2YWwsIGdldEl0ZW1Gbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucGFyZW50U2VsZWN0ZWRJZCgpO1xuICAgICAgICAgICAgY29uc3QgbG9hZGVyID0gdGhpcy5wYXJlbnREZXBlbmRlbnRMb2FkZXIoKTtcblxuICAgICAgICAgICAgaWYgKCEhcGFyZW50SWQgJiYgISFsb2FkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREZXBlbmRlbnREYXRhKHBhcmVudElkLCBsb2FkZXIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghcGFyZW50SWQgJiYgISFsb2FkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBvblNlbGVjdEl0ZW0oaXRlbTogTGlzdEl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRlcm0gPSBpdGVtLnRleHQ7XG4gICAgICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxvY2FsQmFja3VwSXRlbSBvZiB0aGlzLl9sb2NhbEJhY2t1cEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoKGxvY2FsQmFja3VwSXRlbS5jaGlsZHJlbj8ubGVuZ3RoIHx8IDApID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSBsb2NhbEJhY2t1cEl0ZW0uY2hpbGRyZW4/LmZpbmQoYyA9PiBjLnZhbHVlID09IGl0ZW0uaWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5jdXJyZW50U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsQmFja3VwSXRlbS52YWx1ZSA9PSBpdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gbG9jYWxCYWNrdXBJdGVtO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh0aGlzLmN1cnJlbnRTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIG9uU3lzdGVtU2VsZWN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLmxvY2FsSXRlbXMoKS5maW5kKGMgPT4gYy52YWx1ZSA9PSBldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHRoaXMuY3VycmVudFNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fY3VycmVudFRlcm0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZERlcGVuZGVudERhdGEocGFyZW50SWQ6IHN0cmluZyB8IG51bWJlciwgbG9hZGVyOiAocGFyZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gT2JzZXJ2YWJsZTxTZWxlY3RJdGVtW10+KTogdm9pZCB7XG4gICAgICAgIGxvYWRlcihwYXJlbnRJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwTG9jYWxJdGVtcyhpdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBMb2NhbEl0ZW1zKFtdKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJEYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXR1cExvY2FsSXRlbXMoW10pO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmZXRjaE1pc3NpbmdJdGVtKGlkOiBhbnksIGdldEl0ZW1GbjogKGlkOiBhbnkpID0+IE9ic2VydmFibGU8U2VsZWN0SXRlbT4pOiB2b2lkIHtcbiAgICAgICAgZ2V0SXRlbUZuKGlkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiA9IGl0ZW07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtcyA9IHRoaXMubG9jYWxJdGVtcygpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SXRlbXMuZmluZChpID0+IGkudmFsdWUgPT0gaXRlbS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwTG9jYWxJdGVtcyhbLi4uY3VycmVudEl0ZW1zLCBpdGVtXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh0aGlzLmN1cnJlbnRTZWxlY3Rpb24pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJAaWYgKCEhbGFiZWxUZXh0KSB7XG4gICAgQGlmICghIWhpbnRUZXh0IHx8ICEhaGludFRlbXBsYXRlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbbmdDbGFzc109XCJsYWJlbFNpemVDbGFzc2VzXCI+e3sgbGFiZWxUZXh0IH19PC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhpbnRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8bGFiZWwgW25nQ2xhc3NdPVwibGFiZWxTaXplQ2xhc3Nlc1wiPnt7IGxhYmVsVGV4dCB9fTwvbGFiZWw+XG4gICAgfVxufVxuXG5AaWYgKCF1c2VTeXN0ZW1TdHlsZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgW2F0dHIuaWRdPVwibmFtZSgpXCIgW25nQ2xhc3NdPVwibGF5b3V0Q2xhc3NlcygpXCI+XG4gICAgICAgIEBpZiAoc2hvdWxkU2hvd0hpbnRXaXRob3V0TGFiZWwoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gYWxpZ24tc2VsZi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhpbnRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiAjc2VhcmNoQm94PlxuICAgICAgICAgICAgPGRpdiAjc2VhcmNoQm94Q2hpbGQgW3N0eWxlLnZpc2liaWxpdHldPVwiaXNEcm9wZG93bk9wZW4gPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiIGNsYXNzPVwic2VsZWN0LXNlYXJjaC1ib3hcIj5cbiAgICAgICAgICAgICAgICA8dXBkLWlucHV0IFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCIgW2lzSW5wdXRHcm91cEZsYXRdPVwidHJ1ZVwiICh2YWx1ZUNoYW5nZSk9XCJzZWFyY2goJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgdXBkSW5wdXRQcmVwZW5kPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVwZC1pY29uIHRhYmxlckljb249XCJzZWFyY2hcIj48L3VwZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvdXBkLWlucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dXBkLWxpc3QgI2xpc3QgW2l0ZW1zXT1cImxpc3RJdGVtc1wiIFttYXhIZWlnaHRdPVwiZHJvcGRvd25NYXhIZWlnaHQoKSArICdweCdcIiAoc2VsZWN0ZWRJdGVtKT1cIm9uU2VsZWN0SXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFt3cmFwcGVyQ2xhc3Nlc109XCJkcm9wZG93bkNsYXNzZXNcIiBbaXNWaXNpYmxlXT1cImlzRHJvcGRvd25PcGVuXCIgW3Nob3VsZE92ZXJmbG93XT1cInRydWVcIiBbc2hvdWxkRGlzcGxheUl0ZW1zQ291bnRlcl09XCJ0cnVlXCI+XG4gICAgICAgIDwvdXBkLWxpc3Q+XG4gICAgPC9kaXY+XG59IEBlbHNlIHtcbiAgICBAaWYgKHNob3VsZFNob3dIaW50V2l0aG91dExhYmVsKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudERlZmF1bHRTdHlsZVRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBhbGlnbi1zZWxmLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoaW50VHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnREZWZhdWx0U3R5bGVUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgIH1cbn1cblxuPG5nLXRlbXBsYXRlICNoaW50VHBsPlxuICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oZWxwXCIgW3VwZFBvcG92ZXJdPVwiaGludFRleHRcIiBbdXBkUG9wb3ZlclRlbXBsYXRlXT1cImhpbnRUZW1wbGF0ZSgpXCIgW3VwZFBvcG92ZXJBY3RBc1Rvb2x0aXBdPVwiaGludEFzVG9vbHRpcCgpXCI+XG4gICAgICAgID9cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnRUcGw+XG4gICAgPGRpdiAjY29tcG9uZW50Qm94IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtZmxhdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2NsYXNzLnJlbW92ZS1ib3R0b20tcmFkaXVzXT1cImlzRHJvcGRvd25PcGVuXCIgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICBbY2xhc3MucGUtbm9uZV09XCJpc0Rpc2FibGVkKClcIiBbY2xhc3Muc2VsZWN0LWN1cnNvci1kZWZhdWx0XT1cIiFpc0Rpc2FibGVkKClcIlxuICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpID8gJ2Rpc2FibGVkJyA6IHVuZGVmaW5lZFwiIChjbGljayk9XCJvcGVuRHJvcGRvd24oKVwiPlxuICAgICAgICAgICAgQGlmICghIWN1cnJlbnRTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJjYW5UcnVuY2F0ZVRleHQgPyAnZC1ibG9jayB0ZXh0LXRydW5jYXRlJyA6ICcnXCI+e3sgY3VycmVudFNlbGVjdGlvbi50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBbY2xhc3MucmVtb3ZlLWJvdHRvbS1yYWRpdXNdPVwiaXNEcm9wZG93bk9wZW5cIj5cbiAgICAgICAgICAgIEBpZiAoISFjdXJyZW50U2VsZWN0aW9uICYmIHNob3VsZFNob3dDbGVhckJ1dHRvbigpKSB7XG4gICAgICAgICAgICAgICAgPHVwZC1idXR0b24gW3Nob3VsZElnbm9yZUJ0bkNsYXNzXT1cInRydWVcIiBbaXNEaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIiAoY2xpY2tlZCk9XCJjbGVhclNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ2xhc3Nlcz1cImxpbmstc2Vjb25kYXJ5XCIgW2NsYXNzLnNlbGVjdC1jdXJzb3ItcG9pbnRlcl09XCIhaXNEaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25Nb2RlbF09XCJ7dGFibGVySWNvbjoneCcsIHRhYmxlckljb25TaXplOiAxNn1cIj5cbiAgICAgICAgICAgICAgICA8L3VwZC1idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpc0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICA8dXBkLWJ1dHRvbiBbc2hvdWxkSWdub3JlQnRuQ2xhc3NdPVwidHJ1ZVwiIFtpc0Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiIChjbGlja2VkKT1cIm9wZW5Ecm9wZG93bigpXCJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ2xhc3Nlcz1cImxpbmstc2Vjb25kYXJ5IG1zLTJcIiBbY2xhc3Muc2VsZWN0LWN1cnNvci1wb2ludGVyXT1cIiFpc0Rpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbk1vZGVsXT1cInt0YWJsZXJJY29uOidjaGV2cm9uLWRvd24nLCB0YWJsZXJJY29uU2l6ZTogMTZ9XCI+XG4gICAgICAgICAgICAgICAgPC91cGQtYnV0dG9uPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC1sb2FkZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gdGV4dC1tdXRlZCBzZWxlY3QtbG9hZGVyXCIgcm9sZT1cInN0YXR1c1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudERlZmF1bHRTdHlsZVRwbD5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBbY2xhc3MuY29tcGFjdF09XCJpc0NvbXBhY3QoKVwiIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIiBbYXR0ci5uYW1lXT1cIm5hbWUoKVwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3QtY3Vyc29yLXBvaW50ZXJdPVwiIWlzRGlzYWJsZWQoKVwiIFthdHRyLmRpc2FibGVkXT1cImlzRGlzYWJsZWQoKSA/ICdkaXNhYmxlZCcgOiB1bmRlZmluZWRcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uU3lzdGVtU2VsZWN0KCRldmVudClcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBsb2NhbEl0ZW1zKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgIEBpZiAoKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCB8fCAwKSA+IDApIHtcbiAgICAgICAgICAgICAgICA8b3B0Z3JvdXAgW2xhYmVsXT1cIml0ZW0udGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBpdGVtLmNoaWxkcmVuOyB0cmFjayBjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbYXR0ci5zZWxlY3RlZF09XCIhIWN1cnJlbnRTZWxlY3Rpb24gJiYgY2hpbGQudmFsdWUgPT09IGN1cnJlbnRTZWxlY3Rpb24udmFsdWUgPyB0cnVlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY2hpbGQudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGlsZC50ZXh0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvb3B0Z3JvdXA+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8b3B0aW9uIFthdHRyLnNlbGVjdGVkXT1cIiEhY3VycmVudFNlbGVjdGlvbiAmJiBpdGVtLnZhbHVlID09PSBjdXJyZW50U2VsZWN0aW9uLnZhbHVlID8gdHJ1ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPC9zZWxlY3Q+XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -1,3 +1,4 @@
1
1
  export * from './defaults';
2
2
  export * from './select-item';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL3NlbGVjdC9zcmMvbW9kZWxzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0LWl0ZW0nO1xuIl19
3
+ export * from './types';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL3NlbGVjdC9zcmMvbW9kZWxzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0LWl0ZW0nO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybS1jb250cm9scy9zZWxlY3Qvc3JjL21vZGVscy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAnLi9zZWxlY3QtaXRlbSc7XG5cbmV4cG9ydCB0eXBlIFBhcmVudExvYWRlclR5cGUgPSAocGFyZW50SWQ6IGFueSkgPT4gT2JzZXJ2YWJsZTxTZWxlY3RJdGVtW10+O1xuZXhwb3J0IHR5cGUgR2V0SXRlbUJ5SWRUeXBlID0gKGlkOiBhbnkpID0+IE9ic2VydmFibGU8U2VsZWN0SXRlbT47XG4iXX0=