{"version":3,"file":"ngx-formly-material-datepicker.mjs","sources":["../../../../src/ui/material/datepicker/src/datepicker.type.ts","../../../../src/ui/material/datepicker/src/datepicker.config.ts","../../../../src/ui/material/datepicker/src/datepicker.module.ts","../../../../src/ui/material/datepicker/src/ngx-formly-material-datepicker.ts"],"sourcesContent":["import {\n  Component,\n  ChangeDetectionStrategy,\n  ViewChild,\n  AfterViewInit,\n  OnDestroy,\n  TemplateRef,\n  ChangeDetectorRef,\n  Type,\n} from '@angular/core';\nimport { FieldTypeConfig, FormlyConfig, FormlyFieldConfig, ɵobserve as observe } from '@ngx-formly/core';\nimport { FieldType, FormlyFieldProps } from '@ngx-formly/material/form-field';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { MatCalendarCellClassFunction, MatDatepicker } from '@angular/material/datepicker';\n\ninterface DatepickerProps extends FormlyFieldProps {\n  datepickerOptions?: Partial<{\n    touchUi: boolean;\n    opened: boolean;\n    disabled: boolean;\n    startView: 'month' | 'year' | 'multi-year';\n    datepickerTogglePosition: 'suffix' | 'prefix';\n    calendarHeaderComponent: ComponentType<any>;\n    filter: (date: any | null) => boolean;\n    min: any;\n    max: any;\n    dateInput: (field: FieldTypeConfig<DatepickerProps>, event: any) => void;\n    dateChange: (field: FieldTypeConfig<DatepickerProps>, event: any) => void;\n\n    monthSelected: (field: FieldTypeConfig<DatepickerProps>, event: any, picker: MatDatepicker<any>) => void;\n    yearSelected: (field: FieldTypeConfig<DatepickerProps>, event: any, picker: MatDatepicker<any>) => void;\n\n    dateClass: MatCalendarCellClassFunction<any>;\n    panelClass: string | string[];\n    startAt: any | null;\n  }>;\n}\n\nexport interface FormlyDatepickerFieldConfig extends FormlyFieldConfig<DatepickerProps> {\n  type: 'datepicker' | Type<FormlyFieldDatepicker>;\n}\n\n@Component({\n  selector: 'formly-field-mat-datepicker',\n  template: `\n    <input\n      matInput\n      [id]=\"id\"\n      [name]=\"field.name\"\n      [errorStateMatcher]=\"errorStateMatcher\"\n      [formControl]=\"formControl\"\n      [matDatepicker]=\"picker\"\n      [matDatepickerFilter]=\"props.datepickerOptions.filter\"\n      [max]=\"props.datepickerOptions.max\"\n      [min]=\"props.datepickerOptions.min\"\n      [formlyAttributes]=\"field\"\n      [placeholder]=\"props.placeholder\"\n      [tabindex]=\"props.tabindex\"\n      [readonly]=\"props.readonly\"\n      [required]=\"required\"\n      (dateInput)=\"props.datepickerOptions.dateInput(field, $event)\"\n      (dateChange)=\"props.datepickerOptions.dateChange(field, $event)\"\n    />\n    <ng-template #datepickerToggle>\n      <mat-datepicker-toggle\n        (click)=\"detectChanges()\"\n        [disabled]=\"props.disabled\"\n        [for]=\"picker\"\n      ></mat-datepicker-toggle>\n    </ng-template>\n    <mat-datepicker\n      #picker\n      [color]=\"props.color\"\n      [dateClass]=\"props.datepickerOptions.dateClass\"\n      [disabled]=\"props.datepickerOptions.disabled\"\n      [opened]=\"props.datepickerOptions.opened\"\n      [panelClass]=\"props.datepickerOptions.panelClass\"\n      [startAt]=\"props.datepickerOptions.startAt\"\n      [startView]=\"props.datepickerOptions.startView\"\n      [touchUi]=\"props.datepickerOptions.touchUi\"\n      [calendarHeaderComponent]=\"props.datepickerOptions.calendarHeaderComponent\"\n      (monthSelected)=\"props.datepickerOptions.monthSelected(field, $event, picker)\"\n      (yearSelected)=\"props.datepickerOptions.yearSelected(field, $event, picker)\"\n      (opened)=\"props.datepickerOptions.opened = true\"\n      (closed)=\"props.datepickerOptions.opened = false\"\n    >\n    </mat-datepicker>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormlyFieldDatepicker\n  extends FieldType<FieldTypeConfig<DatepickerProps>>\n  implements AfterViewInit, OnDestroy\n{\n  @ViewChild('datepickerToggle', { static: true }) datepickerToggle!: TemplateRef<any>;\n\n  override defaultOptions = {\n    props: {\n      datepickerOptions: {\n        startView: 'month' as const,\n        datepickerTogglePosition: 'suffix' as const,\n        disabled: false,\n        opened: false,\n        dateInput: () => {},\n        dateChange: () => {},\n        monthSelected: () => {},\n        yearSelected: () => {},\n      },\n    },\n  };\n  private fieldErrorsObserver!: ReturnType<typeof observe>;\n\n  constructor(\n    private config: FormlyConfig,\n    private cdRef: ChangeDetectorRef,\n  ) {\n    super();\n  }\n\n  detectChanges() {\n    this.options.detectChanges?.(this.field);\n  }\n\n  ngAfterViewInit() {\n    this.props[this.props.datepickerOptions.datepickerTogglePosition] = this.datepickerToggle;\n    observe<boolean>(this.field, ['props', 'datepickerOptions', 'opened'], () => {\n      this.cdRef.detectChanges();\n    });\n\n    // temporary fix for https://github.com/angular/components/issues/16761\n    if (this.config.getValidatorMessage('matDatepickerParse')) {\n      this.fieldErrorsObserver = observe<any>(this.field, ['formControl', 'errors'], ({ currentValue }) => {\n        if (currentValue && currentValue.required && currentValue.matDatepickerParse) {\n          const errors = Object.keys(currentValue)\n            .sort((prop) => (prop === 'matDatepickerParse' ? -1 : 0))\n            .reduce((errors, prop) => ({ ...errors, [prop]: currentValue[prop] }), {});\n\n          this.fieldErrorsObserver?.setValue(errors);\n        }\n      });\n    }\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n    this.fieldErrorsObserver?.unsubscribe();\n  }\n}\n","import { FormlyFieldDatepicker } from './datepicker.type';\nimport { ConfigOption } from '@ngx-formly/core';\n\nexport function withFormlyFieldDatepicker(): ConfigOption {\n  return {\n    types: [\n      {\n        name: 'datepicker',\n        component: FormlyFieldDatepicker,\n        wrappers: ['form-field'],\n      },\n    ],\n  };\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { FormlyMatFormFieldModule } from '@ngx-formly/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\n\nimport { FormlyFieldDatepicker } from './datepicker.type';\nimport { withFormlyFieldDatepicker } from './datepicker.config';\n\n@NgModule({\n  declarations: [FormlyFieldDatepicker],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    MatInputModule,\n    MatDatepickerModule,\n\n    FormlyMatFormFieldModule,\n    FormlyModule.forChild(withFormlyFieldDatepicker()),\n  ],\n})\nexport class FormlyMatDatepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["observe"],"mappings":";;;;;;;;;;;;;AA0FM,MAAO,qBACX,SAAQ,SAA2C,CAAA;IAqBnD,WACU,CAAA,MAAoB,EACpB,KAAwB,EAAA;AAEhC,QAAA,KAAK,EAAE;QAHC,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAK,CAAA,KAAA,GAAL,KAAK;AAlBN,QAAA,IAAA,CAAA,cAAc,GAAG;AACxB,YAAA,KAAK,EAAE;AACL,gBAAA,iBAAiB,EAAE;AACjB,oBAAA,SAAS,EAAE,OAAgB;AAC3B,oBAAA,wBAAwB,EAAE,QAAiB;AAC3C,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,SAAS,EAAE,MAAK,GAAG;AACnB,oBAAA,UAAU,EAAE,MAAK,GAAG;AACpB,oBAAA,aAAa,EAAE,MAAK,GAAG;AACvB,oBAAA,YAAY,EAAE,MAAK,GAAG;AACvB,iBAAA;AACF,aAAA;SACF;;IAUD,aAAa,GAAA;QACX,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;;IAG1C,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAAC,gBAAgB;AACzF,QAAAA,QAAO,CAAU,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,CAAC,EAAE,MAAK;AAC1E,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AAC5B,SAAC,CAAC;;QAGF,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,EAAE;YACzD,IAAI,CAAC,mBAAmB,GAAGA,QAAO,CAAM,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,KAAI;gBAClG,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,kBAAkB,EAAE;AAC5E,oBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY;yBACpC,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,KAAK,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;yBACvD,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAE5E,oBAAA,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC;;AAE9C,aAAC,CAAC;;;IAIG,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;;+GAvD9B,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EA9CtB,QAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAGU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAhDjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;iHAKkD,gBAAgB,EAAA,CAAA;sBAAhE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;SC3FjC,yBAAyB,GAAA;IACvC,OAAO;AACL,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,SAAS,EAAE,qBAAqB;gBAChC,QAAQ,EAAE,CAAC,YAAY,CAAC;AACzB,aAAA;AACF,SAAA;KACF;AACH;;MCWa,yBAAyB,CAAA;+GAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAzB,yBAAyB,EAAA,YAAA,EAAA,CAXrB,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAElC,YAAY;YACZ,mBAAmB;YACnB,cAAc;YACd,mBAAmB;YAEnB,wBAAwB,EAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,CAAA;AAIf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YATlC,YAAY;YACZ,mBAAmB;YACnB,cAAc;YACd,mBAAmB;YAEnB,wBAAwB;AACxB,YAAA,YAAY,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAGzC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAZrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,qBAAqB,CAAC;AACrC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,cAAc;wBACd,mBAAmB;wBAEnB,wBAAwB;AACxB,wBAAA,YAAY,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC;AACnD,qBAAA;AACF,iBAAA;;;ACvBD;;AAEG;;;;"}