{"version":3,"file":"ngx-t-forms-date-range-picker-input-element.component-C-4fqOF0.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-range-picker-input-element/core/date-range-picker-reactive-input/date-range-picker-reactive-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-range-picker-input-element/core/date-range-picker-reactive-input/date-range-picker-reactive-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-range-picker-input-element/date-range-picker-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-range-picker-input-element/date-range-picker-input-element.component.html"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  ViewEncapsulation,\n  computed,\n  inject,\n  input,\n} from '@angular/core';\nimport { AbstractControl, FormGroup, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport type { ITowerStepColumn } from 'ngx-t-forms-types';\nimport {\n  BaseCustomInput,\n  BaseCustomInputConfig,\n} from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\nimport { resolveDateRangeControlNames } from '../../../../../../shared/functions/dateRangeControlNames';\n\nconst customInputConfig: BaseCustomInputConfig = {\n  controlType: 'lib-date-range-picker-reactive-input',\n  nextId: 0,\n};\n\n/**\n * Inner Material `MatFormFieldControl` host for the date-range-picker reactive\n * input. Owns start/end `FormControl` lookups and the cross-field required\n * validation reconciliation.\n */\n@Component({\n  selector: 'lib-date-range-picker-reactive-input',\n  imports: [\n    ReactiveFormsModule,\n    MatDatepickerModule,\n    MatInputModule,\n    MatIconModule,\n    MatButtonModule,\n  ],\n  host: {\n    '[class.floating]': 'shouldLabelFloat',\n    '[id]': 'id',\n  },\n  providers: [\n    { provide: MatFormFieldControl, useExisting: DateRangePickerReactiveInputComponent },\n  ],\n  templateUrl: './date-range-picker-reactive-input.component.html',\n  styleUrl: './date-range-picker-reactive-input.component.css',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.Emulated,\n})\nexport class DateRangePickerReactiveInputComponent extends BaseCustomInput<Date> {\n  /** Column definition used to resolve the start/end `FormControl` names. */\n  readonly inputConfig = input.required<ITowerStepColumn>();\n\n  constructor() {\n    super(\n      inject(NgControl, { self: true, optional: true }) as NgControl,\n      inject(ElementRef),\n      customInputConfig,\n    );\n  }\n\n  override get empty(): boolean {\n    const n: Date | null = this.value;\n    // Check for null, undefined, or empty string, but allow 0\n    return n === null || n === undefined || (typeof n === 'string' && n === '');\n  }\n\n  override get shouldLabelFloat(): boolean {\n    return true;\n  }\n\n  protected readonly startDateControl = computed(() => {\n    const parent = this.parentFormGroup;\n    const ctrl: AbstractControl | undefined =\n      parent?.controls[resolveDateRangeControlNames(this.inputConfig()).startControlName];\n    return ctrl ?? null;\n  });\n\n  protected readonly endDateControl = computed(() => {\n    const parent = this.parentFormGroup;\n    const ctrl: AbstractControl | undefined =\n      parent?.controls[resolveDateRangeControlNames(this.inputConfig()).endControlName];\n    return ctrl ?? null;\n  });\n\n  protected get parentFormGroup(): FormGroup | null {\n    return (this.ngControl?.control?.parent as FormGroup) ?? null;\n  }\n\n  override checkValidationsAnErrors(): void {\n    const control = this.ngControl?.control;\n    if (!control || !this.touched) return;\n    // A disabled control does not participate in validation, and a DISABLED\n    // half is never `valid` — so without this guard the required-sync below\n    // stamps `{required:true}` onto a control Angular just excluded from the\n    // form. `disable()` nulls errors but keeps the DISABLED status through a\n    // later `setErrors`, producing a form that is valid and 100% complete with\n    // a blocking error nobody can see. Conditionally-hidden date ranges hit\n    // this on every render; author-disabled ones could always have.\n    if (control.disabled) return;\n\n    const errors = { ...control.errors };\n\n    this.errors = errors;\n    const validStartDate = this.startDateControl()?.valid;\n    const validEndDate = this.endDateControl()?.valid;\n    if (validStartDate && validEndDate && 'required' in errors) {\n      const hasOtherErrors = Object.keys(errors).length > 1;\n      if (!hasOtherErrors) {\n        control.setErrors(null);\n      } else {\n        delete errors['required'];\n        control.setErrors(errors);\n      }\n    } else if (\n      (!('required' in errors) && this.required && !validStartDate) ||\n      (!('required' in errors) && this.required && !validEndDate)\n    ) {\n      control.setErrors({ required: true, ...errors });\n    }\n  }\n}\n","","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { provideNativeDateAdapter } from '@angular/material/core';\r\nimport { DateRange, MatDatepickerInputEvent, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport type { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { DateRangePickerReactiveInputComponent } from './core/date-range-picker-reactive-input/date-range-picker-reactive-input.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\nimport { resolveDateRangeControlNames } from '../../../../shared/functions/dateRangeControlNames';\r\n\r\n/** Wraps a reactive date-range-picker control inside a `mat-form-field`. */\r\n@Component({\r\n  selector: 'lib-date-range-picker-input-element',\r\n  templateUrl: './date-range-picker-input-element.component.html',\r\n  styleUrl: './date-range-picker-input-element.component.css',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  providers: [provideNativeDateAdapter()],\r\n  imports: [\r\n    ReactiveFormsModule,\r\n    MatFormFieldModule,\r\n    MatIconModule,\r\n    MatButtonModule,\r\n    MatTooltipModule,\r\n    MatDatepickerModule,\r\n    TFormInputStatusComponent,\r\n    DateRangePickerReactiveInputComponent,\r\n  ],\r\n})\r\nexport class DateRangePickerInputElementComponent {\r\n  readonly inputConfig = input.required<ITowerStepColumn>();\r\n  readonly formGroup = input.required<FormGroup>();\r\n  readonly reload = output<void>();\r\n\r\n  protected readonly errorMessage = computed(() =>\r\n    getInputErrorMessage(this.inputConfig(), this.formGroup()),\r\n  );\r\n\r\n  /**\r\n   * Flat control name of the start endpoint on the bound section group, with the\r\n   * shared `startDate` fallback applied so an incomplete descriptor still\r\n   * renders a `matStartDate` input (its absence makes Material throw).\r\n   */\r\n  protected readonly startControlName = computed<string>(\r\n    () => resolveDateRangeControlNames(this.inputConfig()).startControlName,\r\n  );\r\n\r\n  /** Flat control name of the end endpoint, with the `endDate` fallback. */\r\n  protected readonly endControlName = computed<string>(\r\n    () => resolveDateRangeControlNames(this.inputConfig()).endControlName,\r\n  );\r\n\r\n  protected hasStartDateError(errorName: string): boolean {\r\n    const control = this.formGroup().get(this.startControlName());\r\n    return control ? control.hasError(errorName) : false;\r\n  }\r\n\r\n  protected hasEndDateError(errorName: string): boolean {\r\n    const control = this.formGroup().get(this.endControlName());\r\n    return control ? control.hasError(errorName) : false;\r\n  }\r\n\r\n  /**\r\n   * Writes a committed endpoint date back to its own control.\r\n   *\r\n   * @param event Picker/typed commit event.\r\n   * @param controlName Flat control name — pass `startControlName()` /\r\n   *   `endControlName()`, already `id`-prefixed.\r\n   */\r\n  protected dateChanged(\r\n    event: MatDatepickerInputEvent<unknown, DateRange<unknown>>,\r\n    controlName: string,\r\n  ): void {\r\n    const control = this.formGroup().controls[controlName];\r\n    if (control) {\r\n      control.setValue(event.value);\r\n      control.updateValueAndValidity();\r\n      control.markAsTouched();\r\n      control.markAsDirty();\r\n    }\r\n  }\r\n}\r\n","<form [formGroup]=\"formGroup()\">\n  @if (inputConfig(); as inputConfig) {\n    <mat-form-field [appearance]=\"inputConfig.appearance || 'fill'\" subscriptSizing=\"dynamic\">\n      <mat-label>\n        {{ inputConfig.label }}\n        <lib-t-form-input-status [inputConfig]=\"inputConfig\"></lib-t-form-input-status>\n      </mat-label>\n\n      <lib-date-range-picker-reactive-input\n        [inputConfig]=\"inputConfig\"\n        [required]=\"inputConfig.required\"\n        [formControlName]=\"endControlName()\"\n      ></lib-date-range-picker-reactive-input>\n\n      <!--\n        Both endpoints render unconditionally, and their control names come from\n        `startControlName()` / `endControlName()` — never from the raw, optional\n        `inputConfig.startDateControl` / `.endDateControl`. These inputs used to sit\n        behind `@if (inputConfig.startDateControl)` guards, so a descriptor that\n        omitted either key built a `mat-date-range-input` with a missing endpoint\n        and Material threw \"must contain a matStartDate input\" from\n        `ngAfterContentInit`. The resolved names carry a `startDate` / `endDate`\n        fallback (see dateRangeControlNames.ts) that the control generator applies\n        too, so the control each input binds to always exists.\n      -->\n      <mat-date-range-input [required]=\"inputConfig.required\" [formGroup]=\"formGroup()\" [rangePicker]=\"picker\">\n        <input\n          matStartDate\n          [disabled]=\"!!(inputConfig.disabled ?? inputConfig.readonly)\"\n          [formControlName]=\"startControlName()\"\n          [min]=\"inputConfig.startMinDate\"\n          [max]=\"inputConfig.startMaxDate\"\n          [value]=\"formGroup().controls[startControlName()]?.value\"\n          (dateChange)=\"dateChanged($event, startControlName())\"\n          placeholder=\"Start date\"\n        />\n        <input\n          matEndDate\n          [disabled]=\"!!(inputConfig.disabled ?? inputConfig.readonly)\"\n          [formControlName]=\"endControlName()\"\n          [value]=\"formGroup().controls[endControlName()]?.value\"\n          placeholder=\"End date\"\n          [min]=\"inputConfig.endMinDate\"\n          [max]=\"inputConfig.endMaxDate\"\n          (dateChange)=\"dateChanged($event, endControlName())\"\n        />\n      </mat-date-range-input>\n\n      <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n      <mat-date-range-picker #picker>\n        <mat-datepicker-actions>\n          <button mat-button matDatepickerCancel>Cancel</button>\n          <button mat-raised-button color=\"primary\" matDatepickerApply>Apply</button>\n        </mat-datepicker-actions>\n      </mat-date-range-picker>\n\n      @if (inputConfig.hintLabel || inputConfig.temporaryHint) {\n        <mat-hint [matTooltip]=\"inputConfig.hintLabel || ''\" class=\"inputHint\">\n          {{ inputConfig.temporaryHint || inputConfig.hintLabel }}\n        </mat-hint>\n      }\n\n      @if (!!errorMessage()) {\n        <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{ errorMessage() }}</mat-error>\n      }\n\n      @if (inputConfig.canReload?.canReload) {\n        <button\n          mat-icon-button\n          style=\"margin-right: 4px;\"\n          matTooltip=\"Click to refresh this field.\"\n          class=\"input-sync-button\"\n          (click)=\"inputConfig.canReload.emit()\"\n          matSuffix\n        >\n          <mat-icon style=\"color: var(--mat-sys-primary)\">sync</mat-icon>\n        </button>\n      }\n\n      @if (inputConfig.prefixIcon) {\n        <mat-icon matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\n      }\n\n      @if (inputConfig.suffixIcon && inputConfig.id !== 'password') {\n        <mat-icon matSuffix>{{ inputConfig.suffixIcon }}</mat-icon>\n      }\n\n      @if (inputConfig.prefixText) {\n        <span matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\n      }\n      @if (inputConfig.suffixText) {\n        <span matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText }}</span>\n      }\n\n      @if (inputConfig.maxLength && formGroup()) {\n        <mat-hint>\n          {{ (formGroup().controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength }}\n        </mat-hint>\n      }\n    </mat-form-field>\n  }\n</form>\n"],"names":["i4"],"mappings":"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"}