{"version":3,"file":"sebgroup-green-angular-src-v-angular-input.mjs","sources":["../../../../libs/angular/src/v-angular/input/input.component.ts","../../../../libs/angular/src/v-angular/input/input.component.html","../../../../libs/angular/src/v-angular/input/input.module.ts","../../../../libs/angular/src/v-angular/input/sebgroup-green-angular-src-v-angular-input.ts"],"sourcesContent":["import {\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  Self,\n} from '@angular/core'\nimport { NgControl, UntypedFormControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { Subject } from 'rxjs'\nimport { debounceTime, takeUntil } from 'rxjs/operators'\n\nimport type { InputmaskOptions } from '@sebgroup/green-angular/src/v-angular/input-mask'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/**\n * Input fields allow users to add and edit text.\n * https://designlibrary.sebgroup.com/components/component-input\n */\n@Component({\n    selector: 'nggv-input',\n    templateUrl: './input.component.html',\n    styleUrls: ['./input.component.scss'],\n    standalone: false\n})\nexport class NggvInputComponent\n  extends NggvBaseControlValueAccessorComponent\n  implements OnInit, OnDestroy\n{\n  /**\n   * Adding .gds-form-item as a class to host element\n   */\n  @HostBinding('class') class = 'gds-form-item'\n  /**\n   * Adding .gds-form-item--small class based on size input for styling\n   */\n  @HostBinding('class') @Input() size: 'small' | 'large' = 'large'\n  /**\n   * Special property used for selecting DOM elements during automated UI testing.\n   */\n  @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n    'input'\n  /**\n   * Type of input field. Should avoid types that modify field too much such as range.\n   */\n  @Input() type = 'text'\n  /**\n   * Text shown before input has a written value.\n   */\n  @Input() placeholder?: string\n  /**\n   * If set to \"on\", hint for form autofill feature.\n   */\n  @Input() autocomplete = 'on'\n  /**\n   * If set to true, the value will not be editable.\n   */\n  @Input() readonly = false\n  /**\n   * If set to true, enables the Angular template-driven email validator.\n   */\n  @Input() email = false\n  /**\n   * Minimum value required for numeric input types.\n   */\n  @Input() min = 0\n  /**\n   * Maximum value required for numeric input types.\n   */\n  @Input() max = Number.MAX_SAFE_INTEGER\n  /**\n   * Incremental values that are valid for numeric input types.\n   */\n  @Input() step = 1\n  /**\n   * Minimum length (number of characters) of value.\n   */\n  @Input() set minLength(length: number) {\n    this._minlength = length\n  }\n  /**\n   * Minimum length (number of characters) of value.\n   * @deprecated minlength triggers angular-template-validation. Use @Input() minLength instead.\n   */\n  @Input() set minlength(length: number) {\n    this._minlength = length\n  }\n  get minlength(): number {\n    return this._minlength\n  }\n  /** Maximum length (number of characters) of value. */\n  @Input() set maxLength(length: number) {\n    this._maxlength = length\n    this.writeValue(this.state)\n  }\n  get maxlength(): number {\n    return this._maxlength\n  }\n  /**\n   * Maximum length (number of characters) of value.\n   * @deprecated maxlength triggers angular-template-validation. Use @Input() maxLength instead.\n   */\n  @Input() set maxlength(length: number) {\n    this._maxlength = length\n    this.writeValue(this.state)\n  }\n  private _maxlength = Number.MAX_SAFE_INTEGER\n\n  private _minlength = 0\n\n  /** Wether to show label that tells how many characters are still left to be entered. Will only be set if maxLength is also set */\n  private _showCharacterCountDown = true\n  @Input() set showCharacterCountdown(option: boolean) {\n    this._showCharacterCountDown = option\n  }\n  get showCharacterCountdown(): boolean {\n    return this._showCharacterCountDown && this.hasMaxLength\n  }\n\n  /** Pattern the value must match to be valid. */\n  @Input() pattern = ''\n  /** Amount of time to wait until emitting (nggvINput) event */\n  @Input() debounceTime = 500\n\n  /** Settings for input mask if requested */\n  private _inputMask!: InputmaskOptions<any>\n  @Input() set inputMask(newInputMask: InputmaskOptions<any>) {\n    // Hide input field\n    this.hideInput$.next(true)\n    this.cdr.detectChanges()\n    this._inputMask = newInputMask\n\n    // Show input field to reload input-mask settings upon update\n    setTimeout(() => {\n      this.hideInput$.next(false)\n      this.cdr.detectChanges()\n    }, 200)\n  }\n  get inputMask(): InputmaskOptions<any> {\n    return this._inputMask\n  }\n\n  /** Emits every time the value of the inner input field changes, independantly of updates on the formcontroller */\n  @Output() nggvInput = new EventEmitter<any>()\n\n  private _formControl = new UntypedFormControl()\n  get control(): UntypedFormControl {\n    return (this.ngControl?.control as UntypedFormControl) ?? this._formControl\n  }\n  /** Returns if maxlength is used */\n  get hasMaxLength(): boolean {\n    return !!this.maxlength && this.maxlength !== Number.MAX_SAFE_INTEGER\n  }\n\n  /** Toggler for showing or hiding the input field */\n  hideInput$ = new Subject<boolean>()\n\n  protected inputChange$ = new Subject<any>()\n  protected _destroy$ = new Subject<boolean>()\n\n  constructor(\n    @Self() @Optional() public ngControl: NgControl,\n    @Optional()\n    @Inject(TRANSLOCO_SCOPE)\n    protected translocoScope: TranslocoScope,\n    protected cdr: ChangeDetectorRef,\n    public element: ElementRef,\n  ) {\n    super(ngControl, translocoScope, cdr)\n  }\n\n  ngOnInit() {\n    super.ngOnInit()\n    this.inputChange$\n      .pipe(takeUntil(this._destroy$), debounceTime(this.debounceTime))\n      .subscribe((inputValue) => {\n        this.nggvInput.emit(inputValue)\n      })\n  }\n\n  ngOnDestroy(): void {\n    this._destroy$.next(true)\n    this._destroy$.complete()\n  }\n\n  writeValue(value: any) {\n    // maxLength will only work with string values\n    if (\n      value?.length &&\n      value.length > this.maxlength &&\n      this.control.touched\n    ) {\n      // cut value to match max length\n      this.state = this.cutTextAfterMaxLength(value)\n      if (value.length !== this.state.length) {\n        this.onChange(this.state)\n      }\n      // emit value\n    } else {\n      // update state\n      this.state = value\n    }\n    this.cdr.detectChanges()\n  }\n\n  cutTextAfterMaxLength(value: any): any {\n    if (typeof value === 'string') {\n      return value.substring(0, this.maxlength)\n    }\n    return value\n  }\n\n  /** @internal */\n  onInput(event: Event) {\n    event.stopPropagation()\n    if (this.disabled) return\n    this.state = (event.target as HTMLInputElement).value\n    this.onChange(this.state)\n    this.inputChange$.next(this.state)\n  }\n}\n","<!-- LABEL -->\n<label\n  [id]=\"id + '-label'\"\n  class=\"gds-field-label hide-if-empty\"\n  [attr.for]=\"id + '-input'\"\n  *transloco=\"let t; read: scope\"\n>\n  <ng-template\n    *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n  ></ng-template>\n  <ng-template #basicLabelContentTpl>\n    <!-- to trigger css:empty if no label was added -->\n    <ng-container *ngIf=\"label\">\n      {{ label }}\n      <span\n        *ngIf=\"optional === true || (required !== true && optional !== false)\"\n        class=\"gds-field-label--optional\"\n      >\n        ({{ t('label.optional') }})\n      </span>\n    </ng-container>\n  </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div\n  class=\"gds-form-info description hide-if-empty\"\n  *ngIf=\"description && descriptionIsVisible\"\n>\n  {{ description }}\n</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n  <ng-template\n    *ngTemplateOutlet=\"\n      lockedTpl || defaultLockedTpl;\n      context: { $implicit: state }\n    \"\n  ></ng-template>\n  <ng-template #defaultLockedTpl>\n    <div\n      [id]=\"id + '-input'\"\n      class=\"nggv-field--locked\"\n      [attr.name]=\"name\"\n      [attr.value]=\"state\"\n      [attr.role]=\"role\"\n    >\n      <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n      <ng-container *ngIf=\"state\">\n        <ng-container *ngIf=\"!inputMask\">\n          {{ state }}\n        </ng-container>\n        <ng-container *ngIf=\"!!inputMask\">\n          {{ state | nggvInputMaskFormat: inputMask }}\n        </ng-container>\n      </ng-container>\n    </div>\n  </ng-template>\n</ng-container>\n\n<!-- INPUT WRAPPER -->\n<ng-container *ngIf=\"!locked\">\n  <div class=\"gds-input-wrapper\" [class.nggv-field--error]=\"invalid\">\n    <div class=\"input-group-prefix hide-if-empty\">\n      <ng-content select=\"[slot='prefix']\"></ng-content>\n    </div>\n\n    <!-- INPUT FIELD -->\n    <div class=\"input-group\" *ngIf=\"!inputMask\">\n      <input\n        #input\n        [id]=\"id + '-input'\"\n        class=\"gds-field\"\n        [attr.type]=\"type\"\n        [attr.name]=\"name\"\n        [attr.required]=\"required || null\"\n        [attr.email]=\"email\"\n        [attr.aria-describedby]=\"id + '-message'\"\n        [min]=\"min\"\n        [max]=\"max\"\n        [step]=\"step\"\n        [attr.maxlength]=\"maxlength\"\n        [attr.minlength]=\"minlength\"\n        [pattern]=\"pattern\"\n        title=\"\"\n        [disabled]=\"disabled\"\n        [autocomplete]=\"autocomplete\"\n        [autofocus]=\"autofocus\"\n        [readOnly]=\"readonly\"\n        [attr.role]=\"role\"\n        [attr.placeholder]=\"placeholder\"\n        [attr.aria-label]=\"description\"\n        [value]=\"state\"\n        (input)=\"onInput($event)\"\n        (focus)=\"onFocus($event)\"\n        (blur)=\"onBlur($event)\"\n      />\n    </div>\n\n    <!-- INPUT FIELD WITH MASK -->\n    <div\n      class=\"input-group\"\n      *ngIf=\"!!inputMask && (hideInput$ | async) === false\"\n    >\n      <input\n        #input\n        [id]=\"id + '-input'\"\n        class=\"gds-field\"\n        autocomplete=\"off\"\n        [attr.name]=\"name\"\n        [attr.required]=\"required || null\"\n        [readOnly]=\"readonly\"\n        [attr.role]=\"role\"\n        [attr.placeholder]=\"placeholder\"\n        [attr.aria-label]=\"description\"\n        [attr.aria-describedby]=\"id + '-message'\"\n        [nggvInputMask]=\"inputMask\"\n        title=\"\"\n        [formControl]=\"control\"\n      />\n    </div>\n\n    <div class=\"input-group-suffix hide-if-empty\">\n      <ng-content select=\"[slot='suffix']\"></ng-content>\n      <ng-content></ng-content>\n    </div>\n  </div>\n\n  <!-- ERRORS -->\n  <div\n    class=\"gds-form-item__footer error-wrapper\"\n    *transloco=\"let t; read: scope\"\n  >\n    <span\n      class=\"gds-form-info gds-form-info--error\"\n      [attr.for]=\"id + '-input'\"\n      *ngIf=\"invalid && (error || ngControl?.invalid)\"\n    >\n      <span class=\"error-icon\">\n        <gds-icon-triangle-exclamation\n          width=\"16\"\n          height=\"16\"\n          solid=\"true\"\n          *nggCoreElement\n        ></gds-icon-triangle-exclamation>\n      </span>\n\n      <span\n        *ngIf=\"error; else errorsRef\"\n        [attr.data-thook]=\"thook + '-errorlabel'\"\n        >{{ error }}</span\n      >\n      <ng-template #errorsRef>\n        <span\n          *ngIf=\"firstError as error\"\n          [attr.data-thook]=\"thook + '-errorlabel'\"\n        >\n          {{ t('error.field' + error?.code, error?.params) }}\n        </span>\n      </ng-template>\n    </span>\n\n    <ng-container *ngIf=\"!inputMask && hasMaxLength && showCharacterCountdown\">\n      <span\n        *nggvCharacterCountdown=\"\n          maxlength;\n          currentLength: (inputRef?.nativeElement?.value ?? '').length;\n          charactersLeft as charactersLeft\n        \"\n        class=\"gds-form-info gds-form-info--countdown\"\n        style=\"text-align: right\"\n      >\n        {{ charactersLeft }} {{ t('label.maxlength') }}\n      </span>\n    </ng-container>\n  </div>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { ReactiveFormsModule } from '@angular/forms'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvCharacterCountdownDirectiveModule } from '@sebgroup/green-angular/src/v-angular/character-countdown'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvInputMaskModule } from '@sebgroup/green-angular/src/v-angular/input-mask'\nimport { NggvInputComponent } from './input.component'\n\n@NgModule({\n  declarations: [NggvInputComponent],\n  imports: [\n    CommonModule,\n    NggvI18nModule,\n    NggvInputMaskModule,\n    ReactiveFormsModule,\n    NggvCharacterCountdownDirectiveModule,\n    NggCoreWrapperModule,\n  ],\n  exports: [NggvInputComponent],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}