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

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.
@@ -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=
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, TemplateRef, Directive, EventEmitter, Output, Input, ContentChild, HostBinding, ViewEncapsulation, Component, NgModule } from '@angular/core';
2
+ import { inject, TemplateRef, Directive, EventEmitter, ElementRef, Output, Input, ContentChild, ViewChild, HostBinding, ViewEncapsulation, Component, NgModule } from '@angular/core';
3
3
  import { ColumnSizeHelper } from '@updevs/components';
4
4
  import { BaseControl } from '@updevs/components/form-controls/abstractions';
5
5
  import { Subject } from 'rxjs';
@@ -110,6 +110,10 @@ class InputComponent extends BaseControl {
110
110
  }
111
111
  this.valueChange.emit(evt.target.value);
112
112
  }
113
+ focus() {
114
+ this.inputElement?.nativeElement.focus();
115
+ this.maskedInputElement?.nativeElement.focus();
116
+ }
113
117
  updateClasses() {
114
118
  const lClasses = !this.isPlainText ? ['form-control'] : ['form-control-plaintext'];
115
119
  if (this.isRound) {
@@ -144,14 +148,20 @@ class InputComponent extends BaseControl {
144
148
  ];
145
149
  }
146
150
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
147
- 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 }); }
151
+ 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 }); }
148
152
  }
149
153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InputComponent, decorators: [{
150
154
  type: Component,
151
- 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"] }]
155
+ 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"] }]
152
156
  }], propDecorators: { hostWrapperClasses: [{
153
157
  type: HostBinding,
154
158
  args: ['class']
159
+ }], inputElement: [{
160
+ type: ViewChild,
161
+ args: ['inputEl', { read: (ElementRef) }]
162
+ }], maskedInputElement: [{
163
+ type: ViewChild,
164
+ args: ['maskedInputEl', { read: (ElementRef) }]
155
165
  }], appendTemplate: [{
156
166
  type: ContentChild,
157
167
  args: [InputAppendDirective]
@@ -1 +1 @@
1
- {"version":3,"file":"updevs-components-form-controls-input.mjs","sources":["../../../../libs/components/form-controls/input/src/directives/input-append.directive.ts","../../../../libs/components/form-controls/input/src/directives/input-prepend.directive.ts","../../../../libs/components/form-controls/input/src/input.component.ts","../../../../libs/components/form-controls/input/src/input.component.html","../../../../libs/components/form-controls/input/src/upd-input.module.ts","../../../../libs/components/form-controls/input/src/updevs-components-form-controls-input.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: 'ng-template[updInputAppend]'\n})\nexport class InputAppendDirective {\n readonly templateRef = inject(TemplateRef<any>);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: 'ng-template[updInputPrepend]'\n})\nexport class InputPrependDirective {\n readonly templateRef = inject(TemplateRef<any>);\n}\n","import {\n Component,\n ViewEncapsulation,\n Input,\n SimpleChanges,\n OnInit,\n OnChanges,\n ContentChild,\n HostBinding,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { IconModel } from '@updevs/icons';\nimport { UpdMaskConfig } from '@updevs/sdk/mask';\nimport { ComponentSizeType, HorizontalVerticalType, ColumnSizeHelper } from '@updevs/components';\nimport { BaseControl } from '@updevs/components/form-controls/abstractions';\nimport { Subject } from 'rxjs';\n\nimport { InputType } from './types/input.type';\nimport { InputAppendDirective } from './directives/input-append.directive';\nimport { InputPrependDirective } from './directives/input-prepend.directive';\nimport { LoaderPositionType } from './types/loader-position.type';\n\n@Component({\n selector: 'upd-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class InputComponent extends BaseControl implements OnInit, OnChanges {\n @HostBinding('class') hostWrapperClasses = '';\n @ContentChild(InputAppendDirective) appendTemplate?: InputAppendDirective;\n @ContentChild(InputPrependDirective) prependTemplate?: InputPrependDirective;\n\n @Input() type: InputType = 'text';\n @Input() mask?: string;\n @Input() maskConfig?: UpdMaskConfig;\n @Input() value?: any;\n @Input() size: ComponentSizeType = 'default';\n @Input() customClasses?: string;\n @Input() wrapperClasses?: string;\n @Input() maxLength?: number;\n @Input() isPlainText = false;\n @Input() isReadOnly = false;\n @Input() isLoading = false;\n @Input() isRound = false;\n @Input() isFlush = false;\n @Input() isInputGroupFlat = false;\n @Input() isPrependButton = false;\n @Input() isAppendButton = false;\n @Input() isFloating = false;\n @Input() loaderPosition: LoaderPositionType = 'append';\n @Input() prependIconModel?: IconModel;\n @Input() appendIconModel?: IconModel;\n @Input() isValidationStatusLight = false;\n @Input() layout: HorizontalVerticalType = 'vertical';\n\n @Output() readonly valueChange = new EventEmitter<any>();\n @Output() readonly blurred = new EventEmitter<void>();\n /**\n * Emitted when any key is pressed.\n */\n @Output() readonly keyDown = new EventEmitter<any>();\n /**\n * Emitted when the ESC key is pressed.\n */\n @Output() readonly keyDownEsc = new EventEmitter<void>();\n /**\n * Emitted when the ENTER key is released.\n */\n @Output() readonly keyUpEnter = new EventEmitter<void>();\n\n classes: string[] = [];\n get shouldDisplayInnerLabel(): boolean {\n return !!this.label()\n && !this.prependIconModel\n && !this.appendIconModel\n && !this.isLoading\n && !this.appendTemplate\n && !this.prependTemplate;\n }\n get labelSizeClasses(): string {\n if (this.layout !== 'horizontal') {\n return 'form-label';\n }\n\n return ColumnSizeHelper.getClasses(\n 'col-form-label',\n ColumnSizeHelper.getSizeClasses(this.labelColSize(), 3)\n );\n }\n get validationClass(): string {\n return !!this.validationStatus() ? `is-${this.validationStatus()}` : '';\n }\n get validationBorderClass(): string {\n return !!this.validationStatus() ? `border-${this.validationStatus() === 'invalid' ? 'danger' : 'success'}` : '';\n }\n\n readonly valueChangedSub = new Subject<string>();\n\n ngOnInit(): void {\n this.updateClasses();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.updateClasses();\n\n if (changes['value'] && !!this.mask) {\n this.valueChangedSub.next(changes['value'].currentValue);\n }\n }\n\n onInputChange(evt: Event): void {\n if (!evt.target) {\n return;\n }\n\n this.valueChange.emit((evt.target as any).value);\n }\n\n private updateClasses(): void {\n const lClasses: string[] = !this.isPlainText ? ['form-control'] : ['form-control-plaintext'];\n\n if (this.isRound) {\n lClasses.push('form-control-rounded');\n }\n\n if (this.isFlush) {\n lClasses.push('form-control-flush');\n }\n\n if (this.size !== 'default') {\n lClasses.push(`form-control-${this.size === 'large' ? 'lg' : 'sm'}`);\n }\n\n if (!!this.validationStatus()) {\n const statusCls = `is-${this.validationStatus()}`;\n lClasses.push(statusCls);\n\n if (this.isValidationStatusLight) {\n lClasses.push(`${statusCls}-lite`);\n }\n }\n\n if (this.layout === 'horizontal') {\n this.hostWrapperClasses = 'row';\n }\n\n if (!!this.wrapperClasses) {\n this.hostWrapperClasses += ` ${this.wrapperClasses}`;\n }\n\n if (this.isFloating) {\n this.hostWrapperClasses += ' form-floating';\n }\n\n this.classes = [\n ...lClasses,\n ...(this.customClasses || '').split(' '),\n this.layout === 'horizontal' ? 'col' : ''\n ];\n }\n}\n","@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","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdMaskModule } from '@updevs/sdk/mask';\nimport { UpdPopoverModule } from '@updevs/components/popover';\n\nimport { InputComponent } from './input.component';\nimport { InputAppendDirective } from './directives/input-append.directive';\nimport { InputPrependDirective } from './directives/input-prepend.directive';\n\n@NgModule({\n imports: [\n CommonModule,\n UpdIconsModule,\n UpdMaskModule,\n UpdPopoverModule\n ],\n declarations: [\n InputComponent,\n InputAppendDirective,\n InputPrependDirective\n ],\n exports: [\n InputComponent,\n InputAppendDirective,\n InputPrependDirective\n ]\n})\nexport class UpdInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updevs-components-form-controls-input.mjs","sources":["../../../../libs/components/form-controls/input/src/directives/input-append.directive.ts","../../../../libs/components/form-controls/input/src/directives/input-prepend.directive.ts","../../../../libs/components/form-controls/input/src/input.component.ts","../../../../libs/components/form-controls/input/src/input.component.html","../../../../libs/components/form-controls/input/src/upd-input.module.ts","../../../../libs/components/form-controls/input/src/updevs-components-form-controls-input.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: 'ng-template[updInputAppend]'\n})\nexport class InputAppendDirective {\n readonly templateRef = inject(TemplateRef<any>);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: 'ng-template[updInputPrepend]'\n})\nexport class InputPrependDirective {\n readonly templateRef = inject(TemplateRef<any>);\n}\n","import {\n Component,\n ViewEncapsulation,\n Input,\n SimpleChanges,\n OnInit,\n OnChanges,\n ContentChild,\n HostBinding,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef\n} from '@angular/core';\nimport { IconModel } from '@updevs/icons';\nimport { UpdMaskConfig } from '@updevs/sdk/mask';\nimport { ComponentSizeType, HorizontalVerticalType, ColumnSizeHelper } from '@updevs/components';\nimport { BaseControl } from '@updevs/components/form-controls/abstractions';\nimport { Subject } from 'rxjs';\n\nimport { InputType } from './types/input.type';\nimport { InputAppendDirective } from './directives/input-append.directive';\nimport { InputPrependDirective } from './directives/input-prepend.directive';\nimport { LoaderPositionType } from './types/loader-position.type';\n\n@Component({\n selector: 'upd-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class InputComponent extends BaseControl implements OnInit, OnChanges {\n @HostBinding('class') hostWrapperClasses = '';\n @ViewChild('inputEl', { read: ElementRef<HTMLInputElement> }) inputElement?: ElementRef<HTMLInputElement>;\n @ViewChild('maskedInputEl', { read: ElementRef<HTMLInputElement> }) maskedInputElement?: ElementRef<HTMLInputElement>;\n @ContentChild(InputAppendDirective) appendTemplate?: InputAppendDirective;\n @ContentChild(InputPrependDirective) prependTemplate?: InputPrependDirective;\n\n @Input() type: InputType = 'text';\n @Input() mask?: string;\n @Input() maskConfig?: UpdMaskConfig;\n @Input() value?: any;\n @Input() size: ComponentSizeType = 'default';\n @Input() customClasses?: string;\n @Input() wrapperClasses?: string;\n @Input() maxLength?: number;\n @Input() isPlainText = false;\n @Input() isReadOnly = false;\n @Input() isLoading = false;\n @Input() isRound = false;\n @Input() isFlush = false;\n @Input() isInputGroupFlat = false;\n @Input() isPrependButton = false;\n @Input() isAppendButton = false;\n @Input() isFloating = false;\n @Input() loaderPosition: LoaderPositionType = 'append';\n @Input() prependIconModel?: IconModel;\n @Input() appendIconModel?: IconModel;\n @Input() isValidationStatusLight = false;\n @Input() layout: HorizontalVerticalType = 'vertical';\n\n @Output() readonly valueChange = new EventEmitter<any>();\n @Output() readonly blurred = new EventEmitter<void>();\n /**\n * Emitted when any key is pressed.\n */\n @Output() readonly keyDown = new EventEmitter<any>();\n /**\n * Emitted when the ESC key is pressed.\n */\n @Output() readonly keyDownEsc = new EventEmitter<void>();\n /**\n * Emitted when the ENTER key is released.\n */\n @Output() readonly keyUpEnter = new EventEmitter<void>();\n\n classes: string[] = [];\n get shouldDisplayInnerLabel(): boolean {\n return !!this.label()\n && !this.prependIconModel\n && !this.appendIconModel\n && !this.isLoading\n && !this.appendTemplate\n && !this.prependTemplate;\n }\n get labelSizeClasses(): string {\n if (this.layout !== 'horizontal') {\n return 'form-label';\n }\n\n return ColumnSizeHelper.getClasses(\n 'col-form-label',\n ColumnSizeHelper.getSizeClasses(this.labelColSize(), 3)\n );\n }\n get validationClass(): string {\n return !!this.validationStatus() ? `is-${this.validationStatus()}` : '';\n }\n get validationBorderClass(): string {\n return !!this.validationStatus() ? `border-${this.validationStatus() === 'invalid' ? 'danger' : 'success'}` : '';\n }\n\n readonly valueChangedSub = new Subject<string>();\n\n ngOnInit(): void {\n this.updateClasses();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.updateClasses();\n\n if (changes['value'] && !!this.mask) {\n this.valueChangedSub.next(changes['value'].currentValue);\n }\n }\n\n onInputChange(evt: Event): void {\n if (!evt.target) {\n return;\n }\n\n this.valueChange.emit((evt.target as any).value);\n }\n\n focus(): void {\n this.inputElement?.nativeElement.focus();\n this.maskedInputElement?.nativeElement.focus();\n }\n\n private updateClasses(): void {\n const lClasses: string[] = !this.isPlainText ? ['form-control'] : ['form-control-plaintext'];\n\n if (this.isRound) {\n lClasses.push('form-control-rounded');\n }\n\n if (this.isFlush) {\n lClasses.push('form-control-flush');\n }\n\n if (this.size !== 'default') {\n lClasses.push(`form-control-${this.size === 'large' ? 'lg' : 'sm'}`);\n }\n\n if (!!this.validationStatus()) {\n const statusCls = `is-${this.validationStatus()}`;\n lClasses.push(statusCls);\n\n if (this.isValidationStatusLight) {\n lClasses.push(`${statusCls}-lite`);\n }\n }\n\n if (this.layout === 'horizontal') {\n this.hostWrapperClasses = 'row';\n }\n\n if (!!this.wrapperClasses) {\n this.hostWrapperClasses += ` ${this.wrapperClasses}`;\n }\n\n if (this.isFloating) {\n this.hostWrapperClasses += ' form-floating';\n }\n\n this.classes = [\n ...lClasses,\n ...(this.customClasses || '').split(' '),\n this.layout === 'horizontal' ? 'col' : ''\n ];\n }\n}\n","@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","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdMaskModule } from '@updevs/sdk/mask';\nimport { UpdPopoverModule } from '@updevs/components/popover';\n\nimport { InputComponent } from './input.component';\nimport { InputAppendDirective } from './directives/input-append.directive';\nimport { InputPrependDirective } from './directives/input-prepend.directive';\n\n@NgModule({\n imports: [\n CommonModule,\n UpdIconsModule,\n UpdMaskModule,\n UpdPopoverModule\n ],\n declarations: [\n InputComponent,\n InputAppendDirective,\n InputPrependDirective\n ],\n exports: [\n InputComponent,\n InputAppendDirective,\n InputPrependDirective\n ]\n})\nexport class UpdInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { SimpleChanges, OnInit, OnChanges, EventEmitter } from '@angular/core';
1
+ import { SimpleChanges, OnInit, OnChanges, EventEmitter, ElementRef } from '@angular/core';
2
2
  import { IconModel } from '@updevs/icons';
3
3
  import { UpdMaskConfig } from '@updevs/sdk/mask';
4
4
  import { ComponentSizeType, HorizontalVerticalType } from '@updevs/components';
@@ -11,6 +11,8 @@ import { LoaderPositionType } from './types/loader-position.type';
11
11
  import * as i0 from "@angular/core";
12
12
  export declare class InputComponent extends BaseControl implements OnInit, OnChanges {
13
13
  hostWrapperClasses: string;
14
+ inputElement?: ElementRef<HTMLInputElement>;
15
+ maskedInputElement?: ElementRef<HTMLInputElement>;
14
16
  appendTemplate?: InputAppendDirective;
15
17
  prependTemplate?: InputPrependDirective;
16
18
  type: InputType;
@@ -58,6 +60,7 @@ export declare class InputComponent extends BaseControl implements OnInit, OnCha
58
60
  ngOnInit(): void;
59
61
  ngOnChanges(changes: SimpleChanges): void;
60
62
  onInputChange(evt: Event): void;
63
+ focus(): void;
61
64
  private updateClasses;
62
65
  static ɵfac: i0.ɵɵFactoryDeclaration<InputComponent, never>;
63
66
  static ɵcmp: i0.ɵɵComponentDeclaration<InputComponent, "upd-input", never, { "type": { "alias": "type"; "required": false; }; "mask": { "alias": "mask"; "required": false; }; "maskConfig": { "alias": "maskConfig"; "required": false; }; "value": { "alias": "value"; "required": false; }; "size": { "alias": "size"; "required": false; }; "customClasses": { "alias": "customClasses"; "required": false; }; "wrapperClasses": { "alias": "wrapperClasses"; "required": false; }; "maxLength": { "alias": "maxLength"; "required": false; }; "isPlainText": { "alias": "isPlainText"; "required": false; }; "isReadOnly": { "alias": "isReadOnly"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "isRound": { "alias": "isRound"; "required": false; }; "isFlush": { "alias": "isFlush"; "required": false; }; "isInputGroupFlat": { "alias": "isInputGroupFlat"; "required": false; }; "isPrependButton": { "alias": "isPrependButton"; "required": false; }; "isAppendButton": { "alias": "isAppendButton"; "required": false; }; "isFloating": { "alias": "isFloating"; "required": false; }; "loaderPosition": { "alias": "loaderPosition"; "required": false; }; "prependIconModel": { "alias": "prependIconModel"; "required": false; }; "appendIconModel": { "alias": "appendIconModel"; "required": false; }; "isValidationStatusLight": { "alias": "isValidationStatusLight"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; }, { "valueChange": "valueChange"; "blurred": "blurred"; "keyDown": "keyDown"; "keyDownEsc": "keyDownEsc"; "keyUpEnter": "keyUpEnter"; }, ["appendTemplate", "prependTemplate"], never, false, never>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@updevs/components",
3
- "version": "1.0.0-alpha.80",
3
+ "version": "1.0.0-alpha.81",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.0.1 || ^19.0.0",
6
6
  "@angular/core": "^18.0.1 || ^19.0.0",