{"version":3,"file":"kara-ui-alfa-components-form-input-date.mjs","sources":["../../../libs/kara-ui/components/form/input-date/input-date-abstract.component.ts","../../../libs/kara-ui/components/form/input-date/input-date.component.ts","../../../libs/kara-ui/components/form/input-date/input-date.component.html","../../../libs/kara-ui/components/form/input-date/kara-ui-alfa-components-form-input-date.ts"],"sourcesContent":["import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable, fromEvent, of } from 'rxjs';\nimport { distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';\nimport { FormControl } from '@angular/forms';\nimport { KARA_LANGUAGE } from 'kara-ui-alfa/i18n';\nimport {\n  DisabledHandler,\n  FULL_DATE_LENGTH,\n  KaraDate,\n  MONTH_DATE_LENGTH,\n  dateToKaraDate,\n  getDefaultMaxDate,\n  getDefaultMinDate,\n  isSameDate,\n  isSameYearAndMonth,\n} from 'kara-ui-alfa/components/calendar';\nimport { KInputControlWithErrorsValueAccessor } from 'kara-ui-alfa/components/form/base';\n\nconst DATE_ALLOWED_PATTERN = /^[0-9.]+$/;\n\n@Directive()\nexport abstract class KInputDateAbstract<T>\n  extends KInputControlWithErrorsValueAccessor<T>\n  implements OnInit, OnChanges\n{\n  @ViewChild('kInput') protected readonly input?: ElementRef<HTMLInputElement>;\n  @ViewChild('panel') protected readonly panel?: ElementRef<HTMLInputElement>;\n\n  @Input() label?: string;\n  @Input() hint?: string;\n  @Input() minDate?: KaraDate = getDefaultMinDate();\n  @Input() maxDate?: KaraDate = getDefaultMaxDate();\n  @Input() monthOnly?: boolean;\n  @Input() clearButton?: boolean;\n  @Input() disabledItemHandler?: DisabledHandler;\n\n  @Output() valueChange = new EventEmitter<T>();\n  @Output() readonly focusedChange = new EventEmitter<boolean>();\n\n  readonly dateControl = new FormControl('');\n  readonly formattedValue$ = new BehaviorSubject<Observable<string>>(of(''));\n  readonly months$ = inject(KARA_LANGUAGE).pipe(map((lang) => lang.monthName));\n\n  get dateMask(): string | undefined {\n    if (this.monthOnly) {\n      return undefined;\n    }\n\n    return '00.00.0000';\n  }\n\n  get placeholder(): string {\n    if (this.monthOnly) {\n      return 'mm.yyyy';\n    }\n\n    return 'dd.mm.yyyy';\n  }\n\n  isOpen = false;\n  isFocused = false;\n\n  private destroyRef = inject(DestroyRef);\n  private host = inject(ElementRef<HTMLElement>);\n\n  abstract onModelChange(value: string | null): void;\n  protected abstract getFormattedDate(date: T | undefined): Observable<string>;\n\n  ngOnInit(): void {\n    this.outsideClickListener();\n\n    this.dateControl.valueChanges\n      .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n      .subscribe((value) => this.onModelChange(value));\n\n    this.formattedValue$\n      .pipe(\n        switchMap((observable) => observable),\n        filter((formattedValue) => formattedValue !== this.dateControl.value),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe((formattedValue) => {\n        this.dateControl.setValue(formattedValue);\n      });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.value) {\n      this.writeValue(changes.value.currentValue);\n    }\n\n    if (changes.monthOnly && this.value) {\n      this.updateFormattedValue(this.value);\n    }\n\n    if (changes.disabled) {\n      if (changes.disabled.currentValue) {\n        this.dateControl.disable();\n      } else {\n        this.dateControl.enable();\n      }\n    }\n  }\n\n  public onBlur(): void {\n    this.isFocused = false;\n    this.updateFormattedValue(this.value);\n    this.onTouched();\n    this.focusedChange.emit(false);\n    this.cdr.detectChanges();\n  }\n\n  public onFocus(): void {\n    this.isFocused = true;\n    this.isOpen = true;\n    this.focusedChange.emit(true);\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  selectDate(date: T): void {\n    this.updateValue(date);\n    this.close();\n  }\n\n  close(): void {\n    this.isOpen = false;\n    this.cdr.markForCheck();\n  }\n\n  clearInput(event: Event): void {\n    event.stopPropagation();\n    this.updateValue(undefined);\n  }\n\n  protected updateValue(value: T | undefined): void {\n    if (this.isSameValue(value, this.value)) {\n      return;\n    }\n\n    this.value = value;\n    this.updateFormattedValue(value);\n\n    this.onChange(value);\n    this.valueChange.emit(value);\n  }\n\n  protected parseDate(value: string): Date | null {\n    return this.monthOnly ? this.monthModeParse(value) : this.fullDateModeParse(value);\n  }\n\n  private monthModeParse(value: string): Date | null {\n    if (value?.length !== MONTH_DATE_LENGTH || !DATE_ALLOWED_PATTERN.test(value)) {\n      return null;\n    }\n\n    const [month, year] = value.split('.');\n    const date = new Date(`${year}-${month}-01`);\n\n    if (Number.isNaN(date.getTime())) {\n      return null;\n    }\n\n    return date;\n  }\n\n  private fullDateModeParse(value: string): Date | null {\n    if (value?.length !== FULL_DATE_LENGTH || !DATE_ALLOWED_PATTERN.test(value)) {\n      return null;\n    }\n\n    const [day, month, year] = value.split('.');\n    const date = new Date(`${year}-${month}-${day}`);\n\n    if (Number.isNaN(date.getTime())) {\n      return null;\n    }\n\n    return date;\n  }\n\n  public override writeValue(value: T | undefined): void {\n    super.writeValue(value);\n    this.updateFormattedValue(value);\n  }\n\n  updateFormattedValue(value: T | undefined): void {\n    this.formattedValue$.next(this.getFormattedDate(value));\n  }\n\n  protected dateConvert(date: KaraDate | undefined): Observable<string> {\n    if (!date) {\n      return of('');\n    }\n\n    if (this.monthOnly) {\n      return this.months$.pipe(map((months) => `${months[date.month]} ${date.year}`));\n    }\n\n    return of(`${date.day.toString().padStart(2, '0')}.${(date.month + 1).toString().padStart(2, '0')}.${date.year}`);\n  }\n\n  // TODO should find better solution\n  private outsideClickListener(): void {\n    fromEvent(document, 'click')\n      .pipe(\n        filter(() => this.isOpen),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe((event) => {\n        if (\n          this.host.nativeElement.contains(event.target as Node) ||\n          this.panel?.nativeElement.contains(event.target as Node)\n        ) {\n          return;\n        }\n\n        this.close();\n      });\n  }\n\n  protected abstract isSameValue(a: T | undefined, b: T | undefined): boolean;\n\n  protected isSameDate(a: KaraDate | undefined, b: KaraDate | undefined): boolean {\n    if (!a && !b) return true;\n\n    return this.monthOnly ? isSameYearAndMonth(a, b) : isSameDate(a, b);\n  }\n\n  protected normalize(value: KaraDate): KaraDate | undefined {\n    const date = new Date(value?.year, value?.month, this.monthOnly ? 1 : value?.day);\n\n    if (Number.isNaN(date.getTime())) {\n      return undefined;\n    }\n\n    return dateToKaraDate(date);\n  }\n}\n","import { ChangeDetectionStrategy, Component, OnChanges, OnInit } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxMaskDirective } from 'ngx-mask';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { Observable } from 'rxjs';\nimport { KBaseInputComponent } from 'kara-ui-alfa/components/form/base';\nimport { KFieldErrorComponent } from 'kara-ui-alfa/components/form/field-error';\nimport { KHintComponent } from 'kara-ui-alfa/components/form/hint';\nimport {\n  KCalendarComponent,\n  KaraDate,\n  KaraRangeDate,\n  disabledItemHandlerMapper,\n} from 'kara-ui-alfa/components/calendar';\nimport { KButtonComponent } from 'kara-ui-alfa/components/button';\nimport { KMaskShadowDirective } from 'kara-ui-alfa/components/form/mask-shadow';\nimport { KInputDateAbstract } from './input-date-abstract.component';\n\n@Component({\n  selector: 'k-input-date',\n  templateUrl: './input-date.component.html',\n  styleUrls: ['./input-date.component.scss', '../input/input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    KBaseInputComponent,\n    CdkOverlayOrigin,\n    NgxMaskDirective,\n    FormsModule,\n    ReactiveFormsModule,\n    KFieldErrorComponent,\n    KHintComponent,\n    CdkConnectedOverlay,\n    KCalendarComponent,\n    KButtonComponent,\n    KMaskShadowDirective,\n  ],\n})\nexport class KInputDateComponent extends KInputDateAbstract<KaraDate> implements OnInit, OnChanges {\n  calendarValue: KaraRangeDate | undefined;\n\n  public onModelChange(value: string): void {\n    if (!value) {\n      this.updateValue(undefined);\n      return;\n    }\n\n    const date = this.parseDate(value);\n    if (!date) {\n      return;\n    }\n\n    const selectedDate: KaraDate = {\n      year: date.getFullYear(),\n      month: date.getMonth(),\n      day: date.getDate(),\n    };\n\n    const isDisabled = disabledItemHandlerMapper(this.minDate, this.maxDate, this.disabledItemHandler);\n\n    if (isDisabled(selectedDate)) {\n      return;\n    }\n\n    this.updateValue(selectedDate);\n  }\n\n  protected override getFormattedDate(date: KaraDate | undefined): Observable<string> {\n    return this.dateConvert(date);\n  }\n\n  protected override updateValue(value: KaraDate | undefined): void {\n    this.calendarValue = value ? { from: value, to: value } : undefined;\n    super.updateValue(value);\n  }\n\n  override writeValue(value: KaraDate | undefined): void {\n    const normalizedValue = this.normalize(value as KaraDate);\n\n    this.calendarValue = normalizedValue ? { from: normalizedValue, to: normalizedValue } : undefined;\n    super.writeValue(normalizedValue);\n  }\n\n  protected override isSameValue(a: KaraDate | undefined, b: KaraDate | undefined): boolean {\n    return this.isSameDate(a, b);\n  }\n}\n","<k-input-container\n  #origin=\"cdkOverlayOrigin\"\n  cdkOverlayOrigin\n  [id]=\"id\"\n  [label]=\"label\"\n  [isActive]=\"isFocused || isOpen || !!dateControl.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      type=\"text\"\n      class=\"k-input_input kui-base-default-medium\"\n      [id]=\"id\"\n      [mask]=\"dateMask\"\n      [dropSpecialCharacters]=\"false\"\n      [kMaskShadow]=\"placeholder\"\n      [attr.readonly]=\"readonly || monthOnly || undefined\"\n      [class.filled]=\"isFocused || isOpen || dateControl.value\"\n      [class.with-label]=\"label\"\n      [formControl]=\"dateControl\"\n      (focus)=\"onFocus()\"\n      (blur)=\"onBlur()\"\n    />\n  </div>\n\n  <ng-container ngProjectAs=\"[kuiActions]\">\n    <ng-content select=\"[kuiActions]\"></ng-content>\n    @if (!(disabled || readonly) && isFocused && clearButton && dateControl.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($event)\"\n      ></button>\n    }\n    <button\n      type=\"button\"\n      kButton\n      theme=\"phantom-secondary\"\n      icon=\"calendar-m\"\n      size=\"M\"\n      [disabled]=\"disabled || readonly\"\n      [onlyIcon]=\"true\"\n    ></button>\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@if (hint) {\n  <k-hint [disabled]=\"disabled\">{{ hint }}</k-hint>\n}\n\n<ng-template\n  cdkConnectedOverlay\n  [cdkConnectedOverlayOrigin]=\"origin\"\n  [cdkConnectedOverlayOpen]=\"isOpen\"\n  (detach)=\"close()\"\n>\n  <div #panel class=\"panel\">\n    <k-calendar\n      [value]=\"calendarValue\"\n      [monthOnly]=\"monthOnly\"\n      [minDate]=\"minDate\"\n      [maxDate]=\"maxDate\"\n      [disabledItemHandler]=\"disabledItemHandler\"\n      (valueChanges)=\"selectDate($event.from)\"\n    ></k-calendar>\n  </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}