{"version":3,"file":"kara-ui-alfa-components-form-input.mjs","sources":["../../../libs/kara-ui/components/form/input/input.component.ts","../../../libs/kara-ui/components/form/input/input.component.html","../../../libs/kara-ui/components/form/input/kara-ui-alfa-components-form-input.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  ViewChild,\n  computed,\n  input,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { NgxMaskDirective } from 'ngx-mask';\nimport { KBaseInputComponent, KInputControlValueWithMask } from 'kara-ui-alfa/components/form/base';\nimport { KIconComponent } from 'kara-ui-alfa/components/icon';\nimport { KFieldErrorComponent } from 'kara-ui-alfa/components/form/field-error';\nimport { KHintComponent } from 'kara-ui-alfa/components/form/hint';\nimport { KButtonComponent } from 'kara-ui-alfa/components/button';\nimport { KMaskShadowDirective } from 'kara-ui-alfa/components/form/mask-shadow';\n\ntype InputType = 'text' | 'email' | 'number' | 'search' | 'tel' | 'url' | 'password';\ntype InputMode = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';\n\n@Component({\n  selector: 'k-input',\n  templateUrl: './input.component.html',\n  styleUrls: ['./input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    KBaseInputComponent,\n    NgxMaskDirective,\n    FormsModule,\n    KIconComponent,\n    KFieldErrorComponent,\n    KHintComponent,\n    KButtonComponent,\n    KMaskShadowDirective,\n  ],\n})\nexport class KInputComponent<T = string> extends KInputControlValueWithMask<T> {\n  @ViewChild('kInput') protected readonly input?: ElementRef<HTMLInputElement>;\n\n  readonly inputmode = input<InputMode>();\n  @Input() public placeholder = '';\n  @Input() public spellcheck?: 'true' | 'false' | '';\n  @Input() public autocorrect?: 'on' | 'off' | '';\n  @Input() public autocapitalize?: 'on' | 'off' | 'characters' | 'words' | 'sentences' | '';\n  @Input() public clearButton = false;\n  @Input() public name?: string;\n  @Input() public hint?: string;\n  @Input() public label?: string;\n  /** The maximum number of characters (UTF-16 code units) that the user can enter.  */\n  @Input() public maxlength?: number;\n  /** Отображать иконку для валидных/невалидных данных */\n  @Input() public showValidationIcon = false;\n  @Input() set type(type: InputType) {\n    this.definiteType = this.getInputType(type);\n  }\n\n  get type(): InputType {\n    return this.definiteType;\n  }\n\n  @Output() readonly valueChange = new EventEmitter<T>();\n  @Output() readonly focusedChange = new EventEmitter<boolean>();\n\n  isFocused = false;\n\n  readonly inputMode = computed<InputMode>(() => {\n    return this.inputmode() ?? this.getInputModeByType(this.type);\n  });\n\n  private definiteType: InputType = 'text';\n\n  public onBlur(): void {\n    this.isFocused = false;\n    this.onTouched();\n    this.focusedChange.emit(false);\n    this.cdr.markForCheck();\n  }\n\n  public onFocus(): void {\n    this.isFocused = true;\n    this.focusedChange.emit(true);\n  }\n\n  public clearInput(): void {\n    this.onTouched();\n    // TODO избавится от as T\n    this.updateValue('' as T);\n  }\n\n  public onModelChange(value: T): void {\n    this.updateValue(value);\n  }\n\n  public setFocus(event: MouseEvent): void {\n    if (!this.input || event.target === this.input.nativeElement) {\n      return;\n    }\n\n    event.preventDefault();\n    this.input.nativeElement.focus();\n  }\n\n  protected updateValue(value: T): void {\n    this.value = value;\n\n    this.onChange(value);\n    this.valueChange.emit(value);\n  }\n\n  private getInputModeByType(type: InputType): InputMode {\n    switch (type) {\n      case 'email':\n        return 'email';\n      case 'number':\n        return 'decimal';\n      case 'search':\n        return 'search';\n      case 'tel':\n        return 'tel';\n      case 'url':\n        return 'url';\n\n      default:\n        return 'text';\n    }\n  }\n\n  private getInputType(type: InputType): InputType {\n    switch (type) {\n      case 'email':\n        return 'email';\n      case 'search':\n        return 'search';\n      case 'url':\n        return 'url';\n      case 'password':\n        return 'password';\n\n      default:\n        return 'text';\n    }\n  }\n}\n","<k-input-container\n  [id]=\"id\"\n  [label]=\"label\"\n  [isActive]=\"isFocused || !!value\"\n  [disabled]=\"disabled\"\n  [isLoading]=\"isLoading\"\n  (mousedown)=\"setFocus($event)\"\n>\n  <div class=\"k-input-shadow-container kui-base-default-medium\">\n    <input\n      #kInput\n      autocomplete=\"off\"\n      class=\"k-input_input kui-base-default-medium\"\n      [id]=\"id\"\n      [kMaskShadow]=\"maskShadow\"\n      [mask]=\"mask\"\n      [specialCharacters]=\"specialCharacters\"\n      [dropSpecialCharacters]=\"dropSpecialCharacters\"\n      [prefix]=\"prefix\"\n      [suffix]=\"suffix\"\n      [type]=\"type\"\n      [attr.inputmode]=\"inputMode()\"\n      [attr.name]=\"name\"\n      [class.filled]=\"value\"\n      [class.with-label]=\"label\"\n      [attr.maxlength]=\"maxlength || null\"\n      [attr.placeholder]=\"placeholder || null\"\n      [attr.autocapitalize]=\"autocapitalize || undefined\"\n      [attr.spellcheck]=\"spellcheck || undefined\"\n      [attr.autocorrect]=\"autocorrect || undefined\"\n      [attr.readonly]=\"readonly ? 'readonly' : undefined\"\n      [disabled]=\"disabled\"\n      [ngModel]=\"value\"\n      (ngModelChange)=\"onModelChange($event)\"\n      (focus)=\"onFocus()\"\n      (blur)=\"onBlur()\"\n    />\n  </div>\n  <ng-content ngProjectAs=\"[kuiPrefix]\" select=\"[kuiPrefix]\"></ng-content>\n  <ng-container ngProjectAs=\"[kuiActions]\">\n    <ng-content select=\"[kuiActions]\"></ng-content>\n\n    @if (showValidationIcon) {\n      <k-icon icon=\"checkmark-m\" class=\"k-input_icon-action k-input_icon-success\"></k-icon>\n      <k-icon icon=\"alert-m\" class=\"k-input_icon-action k-input_icon-error\"></k-icon>\n    }\n\n    @if (!(disabled || readonly) && isFocused && clearButton && value) {\n      <button\n        type=\"button\"\n        kButton\n        theme=\"phantom-secondary\"\n        icon=\"dismiss-m\"\n        size=\"M\"\n        [onlyIcon]=\"true\"\n        (click)=\"clearInput()\"\n      ></button>\n    }\n  </ng-container>\n</k-input-container>\n\n@if (control && control.touched && !disabled) {\n  <k-field-error [control]=\"control.control\" [errorMessages]=\"errorMessages()\"></k-field-error>\n}\n\n@if (hint) {\n  <k-hint [disabled]=\"disabled\">{{ hint }}</k-hint>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}