{"version":3,"file":"bootkit-angular-components-form-field.mjs","sources":["../../../projects/bootkit/components/form-field/form-field.component.ts","../../../projects/bootkit/components/form-field/form-field.component.html","../../../projects/bootkit/components/form-field/form-field.module.ts","../../../projects/bootkit/components/form-field/bootkit-angular-components-form-field.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { DestroyRef, HostListener } from '@angular/core';\r\nimport { Component, Input, ContentChild, AfterContentInit, Optional, HostBinding, OnInit, OnDestroy, ElementRef, Renderer2 } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, NgControl, NgForm } from '@angular/forms';\r\nimport { Locale, LocalizationService, LocalizedValidationError } from '@bootkit/angular/localization';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'bk-form-field, bk-field',\r\n  exportAs: 'bkFormField',\r\n  templateUrl: './form-field.component.html',\r\n  styleUrls: ['./form-field.component.scss'],\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n})\r\nexport class FormFieldComponent implements OnInit, AfterContentInit, OnDestroy {\r\n  @Input() label?: string;\r\n  @Input() hint?: string;\r\n  @Input() showErrors = true;\r\n  @Input() showRequiredMarker = true;\r\n  @Input() showSubscripts = true;\r\n  @Input() useInputGroup = true;\r\n  @ContentChild(NgControl, { static: true }) private _ngControl?: NgControl;\r\n  @ContentChild(NgControl, { static: true, read: ElementRef }) private _ngControlElement?: ElementRef;\r\n  private _isRequired = false;\r\n  private _locale?: Locale;\r\n  private _localizedErrors?: { [key: string]: LocalizedValidationError };\r\n  private _firstLocalizedError?: LocalizedValidationError;\r\n  private _errorText?: string;\r\n\r\n  /**\r\n   * Returns the first localized error of the control \r\n   */\r\n  get errorText() { return this._errorText; }\r\n\r\n  /** Reports whether the control is touched. */\r\n  get touched(): boolean | null | undefined { return this._ngControl?.touched; }\r\n\r\n  /** Reports whether the control is dirty. */\r\n  get dirty(): boolean | null | undefined { return this._ngControl?.dirty; }\r\n\r\n  /** Returns true if this form-field is required, otherwise returns false. */\r\n  @HostBinding('class.bk-required-form-field') get isRequired(): boolean { return this._isRequired; }\r\n\r\n  @HostListener('focusout') private _onFocusOut() { this._validate(); }\r\n\r\n  constructor(\r\n    private _renderer: Renderer2,\r\n    private _destroyRef: DestroyRef,\r\n    @Optional() private _form: NgForm,\r\n    private _ls: LocalizationService,\r\n  ) {\r\n    this._locale = this._ls.tryGetActive();\r\n    this._ls.change.pipe(takeUntilDestroyed()).subscribe(e => this._locale = e);\r\n  }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._isRequired = this._isRequiredField();\r\n\r\n    if (this._ngControl) {\r\n      this._ngControl.statusChanges\r\n        .pipe(takeUntilDestroyed(this._destroyRef)).subscribe(change => {\r\n          if (this.dirty || this.touched) {\r\n            this._validate();\r\n          }\r\n        });\r\n    }\r\n  }\r\n\r\n  private _validate() {\r\n    if (!this._ngControl) {\r\n      return;\r\n    }\r\n\r\n    const invalid = this._ngControl.status === 'INVALID';\r\n    if (invalid && this._locale) {\r\n      this._errorText = this._locale.translateError(this._ngControl.errors);\r\n    } else {\r\n      this._errorText = 'error';\r\n    }\r\n\r\n    this._renderer.addClass(this._ngControlElement!.nativeElement, invalid ? 'is-invalid' : 'is-valid');\r\n    this._renderer.removeClass(this._ngControlElement!.nativeElement, invalid ? 'is-valid' : 'is-invalid');\r\n  }\r\n\r\n  private _isRequiredField(): boolean {\r\n    const validator = this._ngControl?.validator;\r\n    const errors = validator && validator(new FormControl(null));\r\n    return errors != null && errors['required'] === true;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n  }\r\n}\r\n","<label *ngIf=\"label\" class=\"bk-form-field-label\">\r\n  {{label}}\r\n  <span *ngIf=\"isRequired && showRequiredMarker\" class=\"bk-form-field-required-marker\">*</span>\r\n</label>\r\n\r\n<div class=\"input-group\" *ngIf=\"useInputGroup else contentTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n</div>\r\n\r\n<ng-template #contentTemplate>\r\n  <ng-content></ng-content>\r\n</ng-template>\r\n\r\n<small *ngIf=\"showSubscripts\" class=\"bk-form-field-subscript\">\r\n  <span *ngIf=\"showErrors && errorText && (touched || dirty); else hintTemplate\"\r\n        class=\"bk-form-field-error text-danger\">\r\n    {{errorText}}\r\n  </span>\r\n  <ng-template #hintTemplate>\r\n    <span *ngIf=\"hint\" class=\"bk-form-field-hint\">{{hint}}</span>\r\n  </ng-template>\r\n</small>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormFieldComponent } from './form-field.component';\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    FormFieldComponent,\r\n  ],\r\n  exports: [\r\n    FormFieldComponent,\r\n  ]\r\n})\r\nexport class FormFieldModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}