{"version":3,"file":"191.65a15740b153860e.js","mappings":"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","names":["PageTitleComponent","selectors","i0","DynamicFormInputComponent","constructor","this","Subject","ngOnInit","input","isDropdown","Object","keys","options","length","controlType","unlimited","includes","key","fld60","form","controls","setOffshoreState","value","valueChanges","pipe","takeUntil","destroy$","subscribe","ngOnDestroy","next","unsubscribe","fld61","get","clearValidators","setValue","disable","offshoreDisabled","setValidators","Validators","enable","limitTo5Options","values","numberOnly","charCode","DynamicFormComponent","profileFormService","formFields","_formFields","edit","some","f","Array","isArray","toFormGroup","inputs","group","forEach","validator","push","UntypedFormControl","UntypedFormGroup","onSubmit","cleanWebsiteQuestion","updateProfileForm","profileType","addProfileForm","id","replace","core","addEmployerProfileFormAnswers","createAction","props","addEmployerProfileFormAnswersSuccess","updateEmployerProfileFormAnswers","addEmployerProfileFormAnswersFailure","updateEmployerProfileFormAnswersSuccess","updateEmployerProfileFormAnswersFailure","FormField","label","ProfileModule","CommonModule","SharedModule","MatDatepickerModule","MatNativeDateModule","RouterModule","ProfileFormService","http","store","cache","getSupplierProfileQuestionAnswerMappings","addSupplierProfileFormAnswers","responseAnswers","post","updateSupplierProfileFormAnswers","put","dispatch","supplierProfileFormAnswers","buildProfileAnswersFromForm","employerProfileFormAnswers","question","responseAnswer","questionId","questionChoiceIds","Number","isFinite","text","_angular_core__WEBPACK_IMPORTED_MODULE_3__","factory","addSupplierProfileFormAnswersSuccess","updateSupplierProfileFormAnswersSuccess","loadSupplierProfileQuestionAnswerMappings","loadSupplierProfileQuestionAnswerMappingsSuccess","_r9","ctx_r8","ctx_r10","index","day_r1","_r5","ctx_r4","ctx_r6","ctx_r7","_r10","ctx_r9","ctx_r11","ctx_r12","_r14","ctx_r13","ctx_r15","ctx_r16","MatDatepickerIntl","changes","calendarLabel","openCalendarLabel","closeCalendarLabel","prevMonthLabel","nextMonthLabel","prevYearLabel","nextYearLabel","prevMultiYearLabel","nextMultiYearLabel","switchToMonthViewLabel","switchToMultiYearViewLabel","startDateLabel","endDateLabel","formatYearRange","start","end","formatYearRangeLabel","ɵfac","ɵprov","MatCalendarCell","displayValue","ariaLabel","enabled","cssClasses","compareValue","rawValue","calendarBodyId","MatCalendarBody","ngAfterViewChecked","_focusActiveCellAfterViewChecked","_focusActiveCell","_elementRef","_ngZone","_platform","inject","Platform","numCols","activeCell","isRange","cellAspectRatio","previewStart","previewEnd","selectedValueChange","EventEmitter","previewChange","activeDateChange","dragStarted","dragEnded","_didDragSinceMouseDown","_enterHandler","event","_skipNextFocus","type","target","cell","_getCellFromElement","run","emit","_touchmoveHandler","getActualTouchTarget","getCellElement","preventDefault","_leaveHandler","relatedTarget","_mousedownHandler","_isInRange","_mouseupHandler","cellElement","closest","nativeElement","_touchendHandler","_id","_startDateLabelId","_endDateLabelId","runOutsideAngular","element","addEventListener","isBrowser","window","_cellClicked","_emitActiveDateChange","_isSelected","startValue","endValue","ngOnChanges","columnChanges","rows","_firstRowOffset","_cellPadding","_cellWidth","removeEventListener","_isActiveCell","rowIndex","colIndex","cellNumber","movePreview","onStable","take","setTimeout","querySelector","focus","_scheduleFocusActiveCellAfterViewChecked","_isRangeStart","isStart","_isRangeEnd","isEnd","isInRange","_isComparisonStart","comparisonStart","comparisonEnd","_isComparisonBridgeStart","previousCell","previousRow","_isComparisonBridgeEnd","_isComparisonEnd","nextCell","nextRow","_isInComparisonRange","_isComparisonIdentical","_isPreviewStart","_isPreviewEnd","_isInPreview","_getDescribedby","row","getAttribute","col","parseInt","ɵcmp","attrs","i1","styles","isTableCell","node","nodeName","parentNode","rangeEnabled","touchLocation","changedTouches","document","elementFromPoint","clientX","clientY","DateRange","MatDateSelectionModel","selection","_adapter","_selectionChanged","selectionChanged","updateSelection","source","oldValue","complete","_isValidDateInstance","date","isDateInstance","isValid","MatSingleDateSelectionModel","adapter","super","add","isComplete","clone","i1$1","MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER","provide","deps","Optional","SkipSelf","DateAdapter","useFactory","MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY","parent","MAT_DATE_RANGE_SELECTION_STRATEGY","InjectionToken","MatMonthView","activeDate","_activeDate","oldActiveDate","validDate","_dateAdapter","getValidDateOrNull","deserialize","today","clampDate","minDate","maxDate","_hasSameMonthAndYear","_init","selected","_selected","_setRanges","_minDate","_maxDate","_changeDetectorRef","_dateFormats","_dir","_rangeStrategy","_rerenderSubscription","Subscription","activeDrag","selectedChange","_userSelection","ngAfterContentInit","localeChanges","startWith","comparisonChange","firstChange","_clearPreview","_dateSelected","selectedDate","_getDateFromDayOfMonth","rangeStartDate","rangeEndDate","_getDateInCurrentMonth","markForCheck","_updateActiveDate","compareDate","_handleCalendarBodyKeydown","isRtl","_isRtl","keyCode","LEFT_ARROW","addCalendarDays","RIGHT_ARROW","UP_ARROW","DOWN_ARROW","HOME","getDate","END","getNumDaysInMonth","PAGE_UP","altKey","addCalendarYears","addCalendarMonths","PAGE_DOWN","ENTER","SPACE","_selectionKeyPressed","_canSelect","ESCAPE","_previewEnd","hasModifierKey","stopPropagation","_handleCalendarBodyKeyup","_todayDate","_getCellCompareValue","_monthLabel","display","monthLabel","format","getMonthNames","getMonth","toLocaleUpperCase","firstOfMonth","createDate","getYear","_firstWeekOffset","getDayOfWeek","getFirstDayOfWeek","_initWeekdays","_createWeekCells","_matCalendarBody","_previewChanged","previewRange","createPreview","_previewStart","dragRange","createDrag","detectChanges","_dragEnded","dragDropResult","dayOfMonth","firstDayOfWeek","narrowWeekdays","getDayOfWeekNames","weekdays","map","long","i","narrow","_weekdays","slice","concat","daysInMonth","dateNames","getDateNames","_weeks","_shouldEnableDate","dateA11yLabel","cellClasses","dateClass","undefined","dateFilter","d1","d2","year","month","day","Date","getTime","selectedValue","_rangeStart","_rangeEnd","_isRange","_comparisonRangeStart","_comparisonRangeEnd","MAT_DATE_FORMATS","i2","_t","ctx","decls","encapsulation","yearsPerPage","MatMultiYearView","isSameMultiYearView","_setSelectedYear","yearSelected","_todayYear","minYearOfPage","getActiveOffset","_years","_createCellForYear","_yearSelected","selectedYear","_getDateFromYear","_getActiveCell","activeMonth","Math","min","yearName","getYearName","_shouldEnableYear","_selectedYear","dateAdapter","date1","date2","year1","year2","startingYear","getStartingYear","floor","euclideanModulo","a","b","MatYearView","_setSelectedMonth","monthSelected","_monthSelected","selectedMonth","_getDateFromMonth","_todayMonth","_getMonthInCurrentYear","_yearLabel","monthNames","_months","_createCellForMonth","normalizedDate","monthName","monthYearA11yLabel","_shouldEnableMonth","activeYear","_isYearAndMonthAfterMaxDate","_isYearAndMonthBeforeMinDate","maxYear","maxMonth","minYear","minMonth","_selectedMonth","calendarHeaderId","MatCalendarHeader","_intl","calendar","changeDetectorRef","_periodButtonLabelId","stateChanges","periodButtonText","currentView","monthYearLabel","_formatMinAndMaxYearLabels","periodButtonDescription","periodButtonLabel","prevButtonLabel","nextButtonLabel","currentPeriodClicked","previousClicked","nextClicked","previousEnabled","_isSameView","nextEnabled","maxYearOfPage","forwardRef","MatCalendar","i3","startAt","_startAt","_clampedActiveDate","_currentView","viewChangedResult","_moveFocusOnNextTick","viewChanged","startView","_userDragDrop","_activeDrag","_intlChanges","_calendarHeaderPortal","ComponentPortal","headerComponent","focusActiveCell","minDateChange","sameDate","previousValue","currentValue","maxDateChange","change","view","_getCurrentViewComponent","updateTodaysDate","_yearSelectedInMultiYearView","normalizedYear","_monthSelectedInYearView","normalizedMonth","_goToDateInView","_dragStarted","monthView","yearView","multiYearView","i5","i6","matDatepickerAnimations","transformPanel","trigger","transition","animate","keyframes","style","opacity","transform","fadeInCalendar","state","datepickerUid","MAT_DATEPICKER_SCROLL_STRATEGY","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER","Overlay","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY","overlay","scrollStrategies","reposition","_MatDatepickerContentBase","mixinColor","MatDatepickerContent","elementRef","_globalModel","_rangeSelectionStrategy","intl","_subscriptions","_animationDone","_isAnimating","_actionsPortal","_closeButtonText","_animationState","datepicker","touchUi","ngAfterViewInit","_calendar","_handleUserSelection","_model","newSelection","selectionFinished","close","_handleUserDragDrop","_startExitAnimation","_handleAnimationEvent","phaseName","_getSelected","_applyPendingSelection","_assignActions","portal","forceRerender","changeDetection","MatDatepickerBase","datepickerInput","getStartValue","color","_color","getThemePalette","_touchUi","coerceBooleanProperty","disabled","_disabled","newValue","restoreFocus","_restoreFocus","panelClass","_panelClass","coerceStringArray","opened","_opened","open","_getMinDate","_getMaxDate","max","_getDateFilter","_overlay","_viewContainerRef","scrollStrategy","_inputStateChanges","_document","DOCUMENT","xPosition","yPosition","openedStream","closedStream","_focusedElementBeforeOpen","_backdropHarnessClass","_scrollStrategy","positionChange","_overlayRef","positionStrategy","getConfig","FlexibleConnectedPositionStrategy","_setConnectedPositions","updatePosition","_destroyOverlay","select","_selectYear","_selectMonth","_viewChanged","registerInput","registerActions","_componentRef","instance","removeActions","_getFocusedElementPierceShadowDom","_openOverlay","canRestoreFocus","completeClose","location","activeElement","contains","_forwardContentValues","_dialogLabelId","getOverlayLabelId","isDialog","overlayRef","create","OverlayConfig","_getDialogStrategy","_getDropdownStrategy","hasBackdrop","backdropClass","direction","block","_getCloseStream","keydownEvents","attach","dispose","position","global","centerHorizontally","centerVertically","strategy","flexibleConnectedTo","getConnectedOverlayOrigin","withTransformOriginOn","withFlexibleDimensions","withViewportMargin","withLockedPosition","primaryX","secondaryX","primaryY","secondaryY","withPositions","originX","originY","overlayX","overlayY","ctrlShiftMetaModifiers","merge","backdropClick","detachments","filter","every","modifier","i9","ɵdir","MatDatepicker","t","useExisting","MatDatepickerInputEvent","targetElement","MatDatepickerInputBase","_getValueFromModel","_pendingValue","_assignValueProgrammatically","_parentDisabled","_isInitialized","blur","_getValidators","_parseValidator","_minValidator","_maxValidator","_filterValidator","_registerModel","model","_valueChangesSubscription","_assignValue","_shouldHandleChangeEvent","_lastValueValid","_isValidValue","_cvaOnChange","_onTouched","_formatValue","dateInput","dateChange","_validatorOnChange","_localeSubscription","matDatepickerParse","control","controlValue","_matchesFilter","matDatepickerFilter","matDatepickerMin","actual","matDatepickerMax","dateInputsHaveChanged","registerOnValidatorChange","fn","validate","c","_validator","writeValue","registerOnChange","registerOnTouched","setDisabledState","isDisabled","_onKeydown","readOnly","_openPopup","_onInput","lastValueWasValid","parse","hasChanged","_onChange","_onBlur","_assignValueToModel","MAT_DATEPICKER_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","MatDatepickerInput","multi","MAT_DATEPICKER_VALIDATORS","NG_VALIDATORS","matDatepicker","_datepicker","_closedSubscription","_min","validValue","_max","_dateFilter","wasMatchingValue","dateFormats","_formField","getLabelId","modelValue","MAT_FORM_FIELD","MAT_INPUT_VALUE_ACCESSOR","MatDatepickerToggleIcon","MatDatepickerToggle","defaultTabIndex","_stateChanges","parsedTabIndex","tabIndex","_watchStateChanges","_open","datepickerStateChanged","of","inputStateChanged","datepickerToggled","dirIndex","_c2","ngContentSelectors","_c3","ɵmod","ɵinj","imports","MatButtonModule","OverlayModule","A11yModule","PortalModule","MatCommonModule","CdkScrollableModule"],"sourceRoot":"webpack:///","sources":["./src/app/@shared/components/page-title/page-title.component.ts","./src/app/profile/components/dynamic-form-input/dynamic-form-input.component.html","./src/app/profile/components/dynamic-form-input/dynamic-form-input.component.ts","./src/app/profile/components/dynamic-form/dynamic-form.component.html","./src/app/profile/components/dynamic-form/dynamic-form.component.ts","./src/app/profile/employer-profile/store/actions/employer-profile-form-answers.actions.ts","./src/app/profile/models/form-field.model.ts","./src/app/profile/profile.module.ts","./src/app/profile/services/profile-form-service.ts","./src/app/profile/supplier-profile/store/actions/supplier-profile-form-answers.actions.ts","./src/app/profile/supplier-profile/store/actions/load-supplier-profile-question-answer-mappings.actions.ts","./node_modules/@angular/material/fesm2020/datepicker.mjs"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'maas-page-title',\r\n template: ``,\r\n styles: [\r\n `maas-page-title {\r\n font-size: 28px;\r\n line-height: 40px;\r\n color: var(--blue);\r\n }`\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PageTitleComponent {}\r\n","
\r\n\r\n
{{ input.label }}
\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{opt.value}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{opt.value}}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {{opt.value}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{ opt.value }}  \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n
\r\n","import { FormField } from './../../models/form-field.model';\r\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'maas-dynamic-form-input',\r\n templateUrl: './dynamic-form-input.component.html',\r\n styleUrls: ['./dynamic-form-input.component.scss'],\r\n})\r\n\r\nexport class DynamicFormInputComponent implements OnInit, OnDestroy {\r\n @Input() input: FormField | undefined;\r\n @Input() form: UntypedFormGroup | undefined;\r\n\r\n private destroy$ = new Subject();\r\n isDropdown = false;\r\n unlimited = true;\r\n offshoreDisabled = false;\r\n\r\n ngOnInit(): void {\r\n if (!this.input) return;\r\n this.isDropdown = Object.keys(this.input.options).length > 2;\r\n if (this.isDropdown && this.input.controlType === 'multiple') {\r\n const questionsToLimit = ['8', '9', '10', '11', '62', '159', '160'];\r\n this.unlimited = !questionsToLimit.includes(this.input.key);\r\n }\r\n\r\n if (this.input.key === '61') {\r\n let fld60 = this.form?.controls['60'];\r\n if (fld60) {\r\n this.setOffshoreState(fld60.value)\r\n fld60.valueChanges\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(value => this.setOffshoreState(value))\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.unsubscribe();\r\n }\r\n\r\n setOffshoreState(value: number) {\r\n let fld61 = this.form?.get('61');\r\n if (!fld61) return;\r\n if (value === 1258) { // no\r\n fld61.clearValidators();\r\n fld61.setValue(null);\r\n fld61.disable();\r\n this.offshoreDisabled = true;\r\n } else if (value === 1257) { // yes\r\n fld61.setValidators([Validators.required]);\r\n fld61.enable();\r\n this.offshoreDisabled = false;\r\n }\r\n }\r\n\r\n limitTo5Options(value: number, values: number[]): boolean {\r\n return this.unlimited && values.length > 4 && !values.includes(value);\r\n }\r\n\r\n numberOnly(charCode: number): boolean {\r\n return !(charCode > 31 && (charCode < 48 || charCode > 57));\r\n }\r\n}\r\n","\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n","import { FormField } from '../../../profile/models/form-field.model';\r\nimport { Component, Input } from '@angular/core';\r\nimport { UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms';\r\nimport { ProfileFormService } from '../../../profile/services/profile-form-service';\r\n\r\n@Component({\r\n selector: 'maas-dynamic-form',\r\n templateUrl: './dynamic-form.component.html',\r\n})\r\nexport class DynamicFormComponent {\r\n\r\n form: UntypedFormGroup | undefined;\r\n private edit = false;\r\n private _formFields: FormField[] = [];\r\n\r\n @Input() profileType: string = '';\r\n\r\n @Input() set formFields(value: FormField[]) {\r\n if (value?.length > 0) {\r\n this._formFields = value;\r\n this.edit = this._formFields.some((f) => Array.isArray(f?.value) ? f?.value?.length > 0 : f?.value);\r\n this.form = this.toFormGroup(this.formFields);\r\n }\r\n }\r\n get formFields(): FormField[] {\r\n return this._formFields;\r\n }\r\n\r\n constructor(\r\n private profileFormService: ProfileFormService\r\n ) { }\r\n\r\n toFormGroup(inputs: FormField[]): UntypedFormGroup {\r\n const group: { [key: string]: UntypedFormControl } = {};\r\n inputs?.forEach((input) => {\r\n const validator: ValidatorFn[] = [Validators.required];\r\n if (input.validator === 'email') validator.push(Validators.email);\r\n\r\n group[input.key] =\r\n validator.length > 0\r\n ? new UntypedFormControl(input?.value || '', validator)\r\n : new UntypedFormControl(input?.value || '');\r\n });\r\n return new UntypedFormGroup(group);\r\n }\r\n\r\n\r\n onSubmit() {\r\n if (!this.form) return;\r\n\r\n // required to remove http/https string from form values because of gateway WAF rule\r\n this.cleanWebsiteQuestion('200');\r\n this.cleanWebsiteQuestion('201');\r\n\r\n this.edit\r\n ? this.profileFormService.updateProfileForm(this.form, this.profileType)\r\n : this.profileFormService.addProfileForm(this.form, this.profileType)\r\n }\r\n\r\n cleanWebsiteQuestion(id: string) {\r\n if (!this.form?.controls[id]) return;\r\n\r\n let value = this.form?.controls[id].value;\r\n if (value.includes('http') || value.includes('https')) {\r\n this.form?.get(id)?.setValue(value.replace(/^https?:\\/\\//, ''));\r\n }\r\n }\r\n}\r\n","import { IEmployerProfileCompany, IProfileFormAnswer } from '../../models';\r\nimport { createAction, props } from '@ngrx/store';\r\n\r\nexport const addEmployerProfileFormAnswers = createAction(\r\n '[Employer Profile - Current Suppliers] Add Employer Profile Form Answers',\r\n props<{ employerProfileFormAnswers: IProfileFormAnswer[] }>()\r\n);\r\n\r\nexport const addEmployerProfileFormAnswersSuccess = createAction(\r\n '[Employer Profile Effects] Add Employer Profile Form Answers Success',\r\n props<{ employerProfileFormAnswers: IProfileFormAnswer[] }>()\r\n);\r\n\r\nexport const addEmployerProfileFormAnswersFailure = createAction(\r\n '[Employer Profile Effects] Add Employer Profile Form Answers Failure',\r\n props<{ error: any }>()\r\n);\r\n\r\nexport const updateEmployerProfileFormAnswers = createAction(\r\n '[Employer Profile - Current Suppliers] Update Employer Profile Form Answers',\r\n props<{ employerProfileFormAnswers: IProfileFormAnswer[] }>()\r\n);\r\n\r\nexport const updateEmployerProfileFormAnswersSuccess = createAction(\r\n '[Employer Profile Effects] Update Employer Profile Form Answers Success',\r\n props<{ employerProfileFormAnswers: IProfileFormAnswer[]}>()\r\n);\r\n\r\nexport const updateEmployerProfileFormAnswersFailure = createAction(\r\n '[Employer Profile Effects] Update Employer Profile Form Answers Failure',\r\n props<{error: any}>()\r\n);\r\n","export class FormField {\r\n value: T;\r\n key: string;\r\n label: string;\r\n validator: string;\r\n controlType: string;\r\n options: { [key: number]: string; };\r\n\r\n constructor(\r\n options: {\r\n value: T;\r\n key?: string;\r\n label?: string;\r\n validator?: string;\r\n controlType?: string;\r\n options?: { [key: number]: string; };\r\n }\r\n ) {\r\n this.value = options.value;\r\n this.key = options.key || '';\r\n this.label = options.label || '';\r\n this.validator = options.validator || '';\r\n this.controlType = options.controlType || '';\r\n this.options = options.options || [];\r\n }\r\n}\r\n","import { SharedModule } from '@shared';\r\nimport { DynamicFormInputComponent } from './components/dynamic-form-input/dynamic-form-input.component';\r\nimport { DynamicFormComponent } from './components/dynamic-form/dynamic-form.component';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\n\r\n@NgModule({\r\n declarations: [DynamicFormComponent, DynamicFormInputComponent],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n RouterModule\r\n ],\r\n exports: [DynamicFormComponent, DynamicFormInputComponent]\r\n})\r\nexport class ProfileModule {}\r\n","import { addEmployerProfileFormAnswers, updateEmployerProfileFormAnswers } from './../employer-profile/store/actions/employer-profile-form-answers.actions';\r\nimport { CacheService, RootState } from '@core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { Injectable } from '@angular/core';\r\nimport { Store } from '@ngrx/store';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { IProfileQuestionAnswerMapping } from '../models/profile-question-answer-mapping.model';\r\nimport { IProfileFormAnswer } from '../employer-profile/models';\r\nimport { addSupplierProfileFormAnswers, updateSupplierProfileFormAnswers } from '../supplier-profile/store/actions';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProfileFormService {\r\n constructor(private http: HttpClient, private store: Store, private cache: CacheService) {}\r\n\r\n getSupplierProfileQuestionAnswerMappings() {\r\n return this.http.get(\r\n `Profiles/${this.cache.get('currentClientId')}/supplier/questionanswermappings`\r\n );\r\n }\r\n\r\n addSupplierProfileFormAnswers(responseAnswers: IProfileFormAnswer[]) {\r\n return this.http.post(\r\n `profiles/${this.cache.get('currentClientId')}/supplier/responses`,\r\n responseAnswers\r\n );\r\n }\r\n\r\n updateSupplierProfileFormAnswers(responseAnswers: IProfileFormAnswer[]) {\r\n return this.http.put(\r\n `profiles/${this.cache.get('currentClientId')}/supplier/responses`,\r\n responseAnswers\r\n );\r\n }\r\n\r\n addProfileForm(form: UntypedFormGroup, profileType: string) {\r\n if (profileType === 'sp')\r\n this.store.dispatch(\r\n addSupplierProfileFormAnswers({ supplierProfileFormAnswers: this.buildProfileAnswersFromForm(form) })\r\n );\r\n\r\n if (profileType === 'ep')\r\n this.store.dispatch(\r\n addEmployerProfileFormAnswers({ employerProfileFormAnswers: this.buildProfileAnswersFromForm(form) })\r\n );\r\n }\r\n\r\n\r\n updateProfileForm(form: UntypedFormGroup, profileType: string) {\r\n if (profileType === 'sp')\r\n this.store.dispatch(\r\n updateSupplierProfileFormAnswers({ supplierProfileFormAnswers: this.buildProfileAnswersFromForm(form) })\r\n );\r\n\r\n if (profileType === 'ep')\r\n this.store.dispatch(\r\n updateEmployerProfileFormAnswers({ employerProfileFormAnswers: this.buildProfileAnswersFromForm(form) })\r\n );\r\n }\r\n\r\n private buildProfileAnswersFromForm(form: UntypedFormGroup) {\r\n const supplierProfileFormAnswers: IProfileFormAnswer[] = [];\r\n // tslint:disable-next-line:forin\r\n for (const question in form?.controls) {\r\n const responseAnswer: IProfileFormAnswer = {\r\n questionId: +question,\r\n questionChoiceIds: Array.isArray(form.controls[question].value)\r\n ? form.controls[question].value\r\n : Number.isFinite(form.controls[question].value)\r\n ? [form.controls[question].value]\r\n : null,\r\n text:\r\n Array.isArray(form.controls[question].value) || Number.isFinite(form.controls[question].value)\r\n ? null\r\n : form.controls[question].value,\r\n };\r\n\r\n supplierProfileFormAnswers.push(responseAnswer);\r\n }\r\n\r\n return supplierProfileFormAnswers;\r\n }\r\n}\r\n","import { createAction, props } from '@ngrx/store';\r\nimport { IProfileFormAnswer } from 'src/app/profile/models/profile-form-answer.model';\r\n\r\nexport const addSupplierProfileFormAnswers = createAction(\r\n '[Supplier Profile - Current Suppliers] Add Supplier Profile Form Answers',\r\n props<{ supplierProfileFormAnswers: IProfileFormAnswer[] }>()\r\n);\r\n\r\nexport const addSupplierProfileFormAnswersSuccess = createAction(\r\n '[Supplier Profile Effects] Add Supplier Profile Form Answers Success',\r\n props<{ supplierProfileFormAnswers: IProfileFormAnswer[] }>()\r\n);\r\n\r\nexport const updateSupplierProfileFormAnswers = createAction(\r\n '[Supplier Profile - Current Suppliers] Update Supplier Profile Form Answers',\r\n props<{ supplierProfileFormAnswers: IProfileFormAnswer[] }>()\r\n);\r\n\r\nexport const updateSupplierProfileFormAnswersSuccess = createAction(\r\n '[Supplier Profile Effects] Update Supplier Profile Form Answers Success',\r\n props<{ supplierProfileFormAnswers: IProfileFormAnswer[]}>()\r\n);\r\n","import { createAction, props } from '@ngrx/store';\r\nimport { IProfileQuestionAnswerMapping } from '../../../models/profile-question-answer-mapping.model';\r\n\r\nexport const loadSupplierProfileQuestionAnswerMappings = createAction(\r\n '[Supplier Profile Root] Load Supplier Profile Question Answer Mappings'\r\n );\r\n\r\nexport const loadSupplierProfileQuestionAnswerMappingsSuccess = createAction(\r\n '[Supplier Profile Effects] Load Supplier Profile Question Answer Mappings Success',\r\n props<{\r\n questionAnswerMappings: IProfileQuestionAnswerMapping[]\r\n }>()\r\n);\r\n","import * as i5 from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport * as i9 from '@angular/cdk/overlay';\nimport { Overlay, FlexibleConnectedPositionStrategy, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport * as i6 from '@angular/cdk/portal';\nimport { ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport * as i1 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, inject, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, Optional, SkipSelf, InjectionToken, Inject, ViewChild, forwardRef, Directive, Attribute, ContentChild, Self, TemplateRef, NgModule } from '@angular/core';\nimport * as i3 from '@angular/material/button';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i1$1 from '@angular/material/core';\nimport { DateAdapter, MAT_DATE_FORMATS, mixinColor, mixinErrorState, MatCommonModule } from '@angular/material/core';\nimport { Subject, Subscription, merge, of } from 'rxjs';\nimport { ESCAPE, hasModifierKey, SPACE, ENTER, PAGE_DOWN, PAGE_UP, END, HOME, DOWN_ARROW, UP_ARROW, RIGHT_ARROW, LEFT_ARROW, BACKSPACE } from '@angular/cdk/keycodes';\nimport * as i2 from '@angular/cdk/bidi';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { take, startWith, filter } from 'rxjs/operators';\nimport { coerceBooleanProperty, coerceStringArray } from '@angular/cdk/coercion';\nimport { trigger, transition, animate, keyframes, style, state } from '@angular/animations';\nimport * as i2$1 from '@angular/forms';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, Validators, NgControl } from '@angular/forms';\nimport { MAT_FORM_FIELD, MatFormFieldControl } from '@angular/material/form-field';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** @docs-private */\nfunction createMissingDateImplError(provider) {\n return Error(`MatDatepicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: MatNativeDateModule, MatMomentDateModule, or provide a ` +\n `custom implementation.`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Datepicker data that requires internationalization. */\nclass MatDatepickerIntl {\n constructor() {\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n this.changes = new Subject();\n /** A label for the calendar popup (used by screen readers). */\n this.calendarLabel = 'Calendar';\n /** A label for the button used to open the calendar popup (used by screen readers). */\n this.openCalendarLabel = 'Open calendar';\n /** Label for the button used to close the calendar popup. */\n this.closeCalendarLabel = 'Close calendar';\n /** A label for the previous month button (used by screen readers). */\n this.prevMonthLabel = 'Previous month';\n /** A label for the next month button (used by screen readers). */\n this.nextMonthLabel = 'Next month';\n /** A label for the previous year button (used by screen readers). */\n this.prevYearLabel = 'Previous year';\n /** A label for the next year button (used by screen readers). */\n this.nextYearLabel = 'Next year';\n /** A label for the previous multi-year button (used by screen readers). */\n this.prevMultiYearLabel = 'Previous 24 years';\n /** A label for the next multi-year button (used by screen readers). */\n this.nextMultiYearLabel = 'Next 24 years';\n /** A label for the 'switch to month view' button (used by screen readers). */\n this.switchToMonthViewLabel = 'Choose date';\n /** A label for the 'switch to year view' button (used by screen readers). */\n this.switchToMultiYearViewLabel = 'Choose month and year';\n /**\n * A label for the first date of a range of dates (used by screen readers).\n * @deprecated Provide your own internationalization string.\n * @breaking-change 17.0.0\n */\n this.startDateLabel = 'Start date';\n /**\n * A label for the last date of a range of dates (used by screen readers).\n * @deprecated Provide your own internationalization string.\n * @breaking-change 17.0.0\n */\n this.endDateLabel = 'End date';\n }\n /** Formats a range of years (used for visuals). */\n formatYearRange(start, end) {\n return `${start} \\u2013 ${end}`;\n }\n /** Formats a label for a range of years (used by screen readers). */\n formatYearRangeLabel(start, end) {\n return `${start} to ${end}`;\n }\n}\nMatDatepickerIntl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMatDatepickerIntl.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerIntl, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerIntl, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nclass MatCalendarCell {\n constructor(value, displayValue, ariaLabel, enabled, cssClasses = {}, compareValue = value, rawValue) {\n this.value = value;\n this.displayValue = displayValue;\n this.ariaLabel = ariaLabel;\n this.enabled = enabled;\n this.cssClasses = cssClasses;\n this.compareValue = compareValue;\n this.rawValue = rawValue;\n }\n}\nlet calendarBodyId = 1;\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\nclass MatCalendarBody {\n ngAfterViewChecked() {\n if (this._focusActiveCellAfterViewChecked) {\n this._focusActiveCell();\n this._focusActiveCellAfterViewChecked = false;\n }\n }\n constructor(_elementRef, _ngZone) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._platform = inject(Platform);\n /**\n * Used to focus the active cell after change detection has run.\n */\n this._focusActiveCellAfterViewChecked = false;\n /** The number of columns in the table. */\n this.numCols = 7;\n /** The cell number of the active cell in the table. */\n this.activeCell = 0;\n /** Whether a range is being selected. */\n this.isRange = false;\n /**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\n this.cellAspectRatio = 1;\n /** Start of the preview range. */\n this.previewStart = null;\n /** End of the preview range. */\n this.previewEnd = null;\n /** Emits when a new value is selected. */\n this.selectedValueChange = new EventEmitter();\n /** Emits when the preview has changed as a result of a user action. */\n this.previewChange = new EventEmitter();\n this.activeDateChange = new EventEmitter();\n /** Emits the date at the possible start of a drag event. */\n this.dragStarted = new EventEmitter();\n /** Emits the date at the conclusion of a drag, or null if mouse was not released on a date. */\n this.dragEnded = new EventEmitter();\n this._didDragSinceMouseDown = false;\n /**\n * Event handler for when the user enters an element\n * inside the calendar body (e.g. by hovering in or focus).\n */\n this._enterHandler = (event) => {\n if (this._skipNextFocus && event.type === 'focus') {\n this._skipNextFocus = false;\n return;\n }\n // We only need to hit the zone when we're selecting a range.\n if (event.target && this.isRange) {\n const cell = this._getCellFromElement(event.target);\n if (cell) {\n this._ngZone.run(() => this.previewChange.emit({ value: cell.enabled ? cell : null, event }));\n }\n }\n };\n this._touchmoveHandler = (event) => {\n if (!this.isRange)\n return;\n const target = getActualTouchTarget(event);\n const cell = target ? this._getCellFromElement(target) : null;\n if (target !== event.target) {\n this._didDragSinceMouseDown = true;\n }\n // If the initial target of the touch is a date cell, prevent default so\n // that the move is not handled as a scroll.\n if (getCellElement(event.target)) {\n event.preventDefault();\n }\n this._ngZone.run(() => this.previewChange.emit({ value: cell?.enabled ? cell : null, event }));\n };\n /**\n * Event handler for when the user's pointer leaves an element\n * inside the calendar body (e.g. by hovering out or blurring).\n */\n this._leaveHandler = (event) => {\n // We only need to hit the zone when we're selecting a range.\n if (this.previewEnd !== null && this.isRange) {\n if (event.type !== 'blur') {\n this._didDragSinceMouseDown = true;\n }\n // Only reset the preview end value when leaving cells. This looks better, because\n // we have a gap between the cells and the rows and we don't want to remove the\n // range just for it to show up again when the user moves a few pixels to the side.\n if (event.target &&\n this._getCellFromElement(event.target) &&\n !(event.relatedTarget &&\n this._getCellFromElement(event.relatedTarget))) {\n this._ngZone.run(() => this.previewChange.emit({ value: null, event }));\n }\n }\n };\n /**\n * Triggered on mousedown or touchstart on a date cell.\n * Respsonsible for starting a drag sequence.\n */\n this._mousedownHandler = (event) => {\n if (!this.isRange)\n return;\n this._didDragSinceMouseDown = false;\n // Begin a drag if a cell within the current range was targeted.\n const cell = event.target && this._getCellFromElement(event.target);\n if (!cell || !this._isInRange(cell.rawValue)) {\n return;\n }\n this._ngZone.run(() => {\n this.dragStarted.emit({\n value: cell.rawValue,\n event,\n });\n });\n };\n /** Triggered on mouseup anywhere. Respsonsible for ending a drag sequence. */\n this._mouseupHandler = (event) => {\n if (!this.isRange)\n return;\n const cellElement = getCellElement(event.target);\n if (!cellElement) {\n // Mouseup happened outside of datepicker. Cancel drag.\n this._ngZone.run(() => {\n this.dragEnded.emit({ value: null, event });\n });\n return;\n }\n if (cellElement.closest('.mat-calendar-body') !== this._elementRef.nativeElement) {\n // Mouseup happened inside a different month instance.\n // Allow it to handle the event.\n return;\n }\n this._ngZone.run(() => {\n const cell = this._getCellFromElement(cellElement);\n this.dragEnded.emit({ value: cell?.rawValue ?? null, event });\n });\n };\n /** Triggered on touchend anywhere. Respsonsible for ending a drag sequence. */\n this._touchendHandler = (event) => {\n const target = getActualTouchTarget(event);\n if (target) {\n this._mouseupHandler({ target });\n }\n };\n this._id = `mat-calendar-body-${calendarBodyId++}`;\n this._startDateLabelId = `${this._id}-start-date`;\n this._endDateLabelId = `${this._id}-end-date`;\n _ngZone.runOutsideAngular(() => {\n const element = _elementRef.nativeElement;\n element.addEventListener('mouseenter', this._enterHandler, true);\n element.addEventListener('touchmove', this._touchmoveHandler, true);\n element.addEventListener('focus', this._enterHandler, true);\n element.addEventListener('mouseleave', this._leaveHandler, true);\n element.addEventListener('blur', this._leaveHandler, true);\n element.addEventListener('mousedown', this._mousedownHandler);\n element.addEventListener('touchstart', this._mousedownHandler);\n if (this._platform.isBrowser) {\n window.addEventListener('mouseup', this._mouseupHandler);\n window.addEventListener('touchend', this._touchendHandler);\n }\n });\n }\n /** Called when a cell is clicked. */\n _cellClicked(cell, event) {\n // Ignore \"clicks\" that are actually canceled drags (eg the user dragged\n // off and then went back to this cell to undo).\n if (this._didDragSinceMouseDown) {\n return;\n }\n if (cell.enabled) {\n this.selectedValueChange.emit({ value: cell.value, event });\n }\n }\n _emitActiveDateChange(cell, event) {\n if (cell.enabled) {\n this.activeDateChange.emit({ value: cell.value, event });\n }\n }\n /** Returns whether a cell should be marked as selected. */\n _isSelected(value) {\n return this.startValue === value || this.endValue === value;\n }\n ngOnChanges(changes) {\n const columnChanges = changes['numCols'];\n const { rows, numCols } = this;\n if (changes['rows'] || columnChanges) {\n this._firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n }\n if (changes['cellAspectRatio'] || columnChanges || !this._cellPadding) {\n this._cellPadding = `${(50 * this.cellAspectRatio) / numCols}%`;\n }\n if (columnChanges || !this._cellWidth) {\n this._cellWidth = `${100 / numCols}%`;\n }\n }\n ngOnDestroy() {\n const element = this._elementRef.nativeElement;\n element.removeEventListener('mouseenter', this._enterHandler, true);\n element.removeEventListener('touchmove', this._touchmoveHandler, true);\n element.removeEventListener('focus', this._enterHandler, true);\n element.removeEventListener('mouseleave', this._leaveHandler, true);\n element.removeEventListener('blur', this._leaveHandler, true);\n element.removeEventListener('mousedown', this._mousedownHandler);\n element.removeEventListener('touchstart', this._mousedownHandler);\n if (this._platform.isBrowser) {\n window.removeEventListener('mouseup', this._mouseupHandler);\n window.removeEventListener('touchend', this._touchendHandler);\n }\n }\n /** Returns whether a cell is active. */\n _isActiveCell(rowIndex, colIndex) {\n let cellNumber = rowIndex * this.numCols + colIndex;\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this._firstRowOffset;\n }\n return cellNumber == this.activeCell;\n }\n /**\n * Focuses the active cell after the microtask queue is empty.\n *\n * Adding a 0ms setTimeout seems to fix Voiceover losing focus when pressing PageUp/PageDown\n * (issue #24330).\n *\n * Determined a 0ms by gradually increasing duration from 0 and testing two use cases with screen\n * reader enabled:\n *\n * 1. Pressing PageUp/PageDown repeatedly with pausing between each key press.\n * 2. Pressing and holding the PageDown key with repeated keys enabled.\n *\n * Test 1 worked roughly 95-99% of the time with 0ms and got a little bit better as the duration\n * increased. Test 2 got slightly better until the duration was long enough to interfere with\n * repeated keys. If the repeated key speed was faster than the timeout duration, then pressing\n * and holding pagedown caused the entire page to scroll.\n *\n * Since repeated key speed can verify across machines, determined that any duration could\n * potentially interfere with repeated keys. 0ms would be best because it almost entirely\n * eliminates the focus being lost in Voiceover (#24330) without causing unintended side effects.\n * Adding delay also complicates writing tests.\n */\n _focusActiveCell(movePreview = true) {\n this._ngZone.runOutsideAngular(() => {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n setTimeout(() => {\n const activeCell = this._elementRef.nativeElement.querySelector('.mat-calendar-body-active');\n if (activeCell) {\n if (!movePreview) {\n this._skipNextFocus = true;\n }\n activeCell.focus();\n }\n });\n });\n });\n }\n /** Focuses the active cell after change detection has run and the microtask queue is empty. */\n _scheduleFocusActiveCellAfterViewChecked() {\n this._focusActiveCellAfterViewChecked = true;\n }\n /** Gets whether a value is the start of the main range. */\n _isRangeStart(value) {\n return isStart(value, this.startValue, this.endValue);\n }\n /** Gets whether a value is the end of the main range. */\n _isRangeEnd(value) {\n return isEnd(value, this.startValue, this.endValue);\n }\n /** Gets whether a value is within the currently-selected range. */\n _isInRange(value) {\n return isInRange(value, this.startValue, this.endValue, this.isRange);\n }\n /** Gets whether a value is the start of the comparison range. */\n _isComparisonStart(value) {\n return isStart(value, this.comparisonStart, this.comparisonEnd);\n }\n /** Whether the cell is a start bridge cell between the main and comparison ranges. */\n _isComparisonBridgeStart(value, rowIndex, colIndex) {\n if (!this._isComparisonStart(value) || this._isRangeStart(value) || !this._isInRange(value)) {\n return false;\n }\n let previousCell = this.rows[rowIndex][colIndex - 1];\n if (!previousCell) {\n const previousRow = this.rows[rowIndex - 1];\n previousCell = previousRow && previousRow[previousRow.length - 1];\n }\n return previousCell && !this._isRangeEnd(previousCell.compareValue);\n }\n /** Whether the cell is an end bridge cell between the main and comparison ranges. */\n _isComparisonBridgeEnd(value, rowIndex, colIndex) {\n if (!this._isComparisonEnd(value) || this._isRangeEnd(value) || !this._isInRange(value)) {\n return false;\n }\n let nextCell = this.rows[rowIndex][colIndex + 1];\n if (!nextCell) {\n const nextRow = this.rows[rowIndex + 1];\n nextCell = nextRow && nextRow[0];\n }\n return nextCell && !this._isRangeStart(nextCell.compareValue);\n }\n /** Gets whether a value is the end of the comparison range. */\n _isComparisonEnd(value) {\n return isEnd(value, this.comparisonStart, this.comparisonEnd);\n }\n /** Gets whether a value is within the current comparison range. */\n _isInComparisonRange(value) {\n return isInRange(value, this.comparisonStart, this.comparisonEnd, this.isRange);\n }\n /**\n * Gets whether a value is the same as the start and end of the comparison range.\n * For context, the functions that we use to determine whether something is the start/end of\n * a range don't allow for the start and end to be on the same day, because we'd have to use\n * much more specific CSS selectors to style them correctly in all scenarios. This is fine for\n * the regular range, because when it happens, the selected styles take over and still show where\n * the range would've been, however we don't have these selected styles for a comparison range.\n * This function is used to apply a class that serves the same purpose as the one for selected\n * dates, but it only applies in the context of a comparison range.\n */\n _isComparisonIdentical(value) {\n // Note that we don't need to null check the start/end\n // here, because the `value` will always be defined.\n return this.comparisonStart === this.comparisonEnd && value === this.comparisonStart;\n }\n /** Gets whether a value is the start of the preview range. */\n _isPreviewStart(value) {\n return isStart(value, this.previewStart, this.previewEnd);\n }\n /** Gets whether a value is the end of the preview range. */\n _isPreviewEnd(value) {\n return isEnd(value, this.previewStart, this.previewEnd);\n }\n /** Gets whether a value is inside the preview range. */\n _isInPreview(value) {\n return isInRange(value, this.previewStart, this.previewEnd, this.isRange);\n }\n /** Gets ids of aria descriptions for the start and end of a date range. */\n _getDescribedby(value) {\n if (!this.isRange) {\n return null;\n }\n if (this.startValue === value && this.endValue === value) {\n return `${this._startDateLabelId} ${this._endDateLabelId}`;\n }\n else if (this.startValue === value) {\n return this._startDateLabelId;\n }\n else if (this.endValue === value) {\n return this._endDateLabelId;\n }\n return null;\n }\n /** Finds the MatCalendarCell that corresponds to a DOM node. */\n _getCellFromElement(element) {\n const cell = getCellElement(element);\n if (cell) {\n const row = cell.getAttribute('data-mat-row');\n const col = cell.getAttribute('data-mat-col');\n if (row && col) {\n return this.rows[parseInt(row)][parseInt(col)];\n }\n }\n return null;\n }\n}\nMatCalendarBody.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatCalendarBody, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nMatCalendarBody.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatCalendarBody, selector: \"[mat-calendar-body]\", inputs: { label: \"label\", rows: \"rows\", todayValue: \"todayValue\", startValue: \"startValue\", endValue: \"endValue\", labelMinRequiredCells: \"labelMinRequiredCells\", numCols: \"numCols\", activeCell: \"activeCell\", isRange: \"isRange\", cellAspectRatio: \"cellAspectRatio\", comparisonStart: \"comparisonStart\", comparisonEnd: \"comparisonEnd\", previewStart: \"previewStart\", previewEnd: \"previewEnd\", startDateAccessibleName: \"startDateAccessibleName\", endDateAccessibleName: \"endDateAccessibleName\" }, outputs: { selectedValueChange: \"selectedValueChange\", previewChange: \"previewChange\", activeDateChange: \"activeDateChange\", dragStarted: \"dragStarted\", dragEnded: \"dragEnded\" }, host: { classAttribute: \"mat-calendar-body\" }, exportAs: [\"matCalendarBody\"], usesOnChanges: true, ngImport: i0, template: \"\\n\\n \\n {{label}}\\n \\n\\n\\n\\n\\n \\n \\n {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\\n \\n \\n \\n \\n \\n {{item.displayValue}}\\n \\n \\n \\n \\n\\n\\n\\n\\n\", styles: [\".mat-calendar-body{min-width:224px}.mat-calendar-body-label{height:0;line-height:0;text-align:left;padding-left:4.7142857143%;padding-right:4.7142857143%}.mat-calendar-body-hidden-label{display:none}.mat-calendar-body-cell-container{position:relative;height:0;line-height:0}.mat-calendar-body-cell{-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:absolute;top:0;left:0;width:100%;height:100%;background:none;text-align:center;outline:none;font-family:inherit;margin:0}.mat-calendar-body-cell::-moz-focus-inner{border:0}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\\\"\\\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;display:block;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.cdk-high-contrast-active .mat-calendar-body-disabled{opacity:.5}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}.cdk-high-contrast-active .mat-calendar-body-cell-content{border:none}.cdk-high-contrast-active .mat-datepicker-popup:not(:empty),.cdk-high-contrast-active .mat-calendar-body-cell:not(.mat-calendar-body-in-range) .mat-calendar-body-selected{outline:solid 1px}.cdk-high-contrast-active .mat-calendar-body-today{outline:dotted 1px}.cdk-high-contrast-active .mat-calendar-body-cell::before,.cdk-high-contrast-active .mat-calendar-body-cell::after,.cdk-high-contrast-active .mat-calendar-body-selected{background:none}.cdk-high-contrast-active .mat-calendar-body-in-range::before,.cdk-high-contrast-active .mat-calendar-body-comparison-bridge-start::before,.cdk-high-contrast-active .mat-calendar-body-comparison-bridge-end::before{border-top:solid 1px;border-bottom:solid 1px}.cdk-high-contrast-active .mat-calendar-body-range-start::before{border-left:solid 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-range-start::before{border-left:0;border-right:solid 1px}.cdk-high-contrast-active .mat-calendar-body-range-end::before{border-right:solid 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-range-end::before{border-right:0;border-left:solid 1px}.cdk-high-contrast-active .mat-calendar-body-in-comparison-range::before{border-top:dashed 1px;border-bottom:dashed 1px}.cdk-high-contrast-active .mat-calendar-body-comparison-start::before{border-left:dashed 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-comparison-start::before{border-left:0;border-right:dashed 1px}.cdk-high-contrast-active .mat-calendar-body-comparison-end::before{border-right:dashed 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-comparison-end::before{border-right:0;border-left:dashed 1px}[dir=rtl] .mat-calendar-body-label{text-align:right}\"], dependencies: [{ kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatCalendarBody, decorators: [{\n type: Component,\n args: [{ selector: '[mat-calendar-body]', host: {\n 'class': 'mat-calendar-body',\n }, exportAs: 'matCalendarBody', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n\\n \\n {{label}}\\n \\n\\n\\n\\n\\n \\n \\n {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\\n \\n \\n \\n \\n \\n {{item.displayValue}}\\n \\n \\n \\n \\n\\n\\n\\n\\n\", styles: [\".mat-calendar-body{min-width:224px}.mat-calendar-body-label{height:0;line-height:0;text-align:left;padding-left:4.7142857143%;padding-right:4.7142857143%}.mat-calendar-body-hidden-label{display:none}.mat-calendar-body-cell-container{position:relative;height:0;line-height:0}.mat-calendar-body-cell{-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:absolute;top:0;left:0;width:100%;height:100%;background:none;text-align:center;outline:none;font-family:inherit;margin:0}.mat-calendar-body-cell::-moz-focus-inner{border:0}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\\\"\\\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;display:block;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.cdk-high-contrast-active .mat-calendar-body-disabled{opacity:.5}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}.cdk-high-contrast-active .mat-calendar-body-cell-content{border:none}.cdk-high-contrast-active .mat-datepicker-popup:not(:empty),.cdk-high-contrast-active .mat-calendar-body-cell:not(.mat-calendar-body-in-range) .mat-calendar-body-selected{outline:solid 1px}.cdk-high-contrast-active .mat-calendar-body-today{outline:dotted 1px}.cdk-high-contrast-active .mat-calendar-body-cell::before,.cdk-high-contrast-active .mat-calendar-body-cell::after,.cdk-high-contrast-active .mat-calendar-body-selected{background:none}.cdk-high-contrast-active .mat-calendar-body-in-range::before,.cdk-high-contrast-active .mat-calendar-body-comparison-bridge-start::before,.cdk-high-contrast-active .mat-calendar-body-comparison-bridge-end::before{border-top:solid 1px;border-bottom:solid 1px}.cdk-high-contrast-active .mat-calendar-body-range-start::before{border-left:solid 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-range-start::before{border-left:0;border-right:solid 1px}.cdk-high-contrast-active .mat-calendar-body-range-end::before{border-right:solid 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-range-end::before{border-right:0;border-left:solid 1px}.cdk-high-contrast-active .mat-calendar-body-in-comparison-range::before{border-top:dashed 1px;border-bottom:dashed 1px}.cdk-high-contrast-active .mat-calendar-body-comparison-start::before{border-left:dashed 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-comparison-start::before{border-left:0;border-right:dashed 1px}.cdk-high-contrast-active .mat-calendar-body-comparison-end::before{border-right:dashed 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-comparison-end::before{border-right:0;border-left:dashed 1px}[dir=rtl] .mat-calendar-body-label{text-align:right}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { label: [{\n type: Input\n }], rows: [{\n type: Input\n }], todayValue: [{\n type: Input\n }], startValue: [{\n type: Input\n }], endValue: [{\n type: Input\n }], labelMinRequiredCells: [{\n type: Input\n }], numCols: [{\n type: Input\n }], activeCell: [{\n type: Input\n }], isRange: [{\n type: Input\n }], cellAspectRatio: [{\n type: Input\n }], comparisonStart: [{\n type: Input\n }], comparisonEnd: [{\n type: Input\n }], previewStart: [{\n type: Input\n }], previewEnd: [{\n type: Input\n }], startDateAccessibleName: [{\n type: Input\n }], endDateAccessibleName: [{\n type: Input\n }], selectedValueChange: [{\n type: Output\n }], previewChange: [{\n type: Output\n }], activeDateChange: [{\n type: Output\n }], dragStarted: [{\n type: Output\n }], dragEnded: [{\n type: Output\n }] } });\n/** Checks whether a node is a table cell element. */\nfunction isTableCell(node) {\n return node?.nodeName === 'TD';\n}\n/**\n * Gets the date table cell element that is or contains the specified element.\n * Or returns null if element is not part of a date cell.\n */\nfunction getCellElement(element) {\n let cell;\n if (isTableCell(element)) {\n cell = element;\n }\n else if (isTableCell(element.parentNode)) {\n cell = element.parentNode;\n }\n else if (isTableCell(element.parentNode?.parentNode)) {\n cell = element.parentNode.parentNode;\n }\n return cell?.getAttribute('data-mat-row') != null ? cell : null;\n}\n/** Checks whether a value is the start of a range. */\nfunction isStart(value, start, end) {\n return end !== null && start !== end && value < end && value === start;\n}\n/** Checks whether a value is the end of a range. */\nfunction isEnd(value, start, end) {\n return start !== null && start !== end && value >= start && value === end;\n}\n/** Checks whether a value is inside of a range. */\nfunction isInRange(value, start, end, rangeEnabled) {\n return (rangeEnabled &&\n start !== null &&\n end !== null &&\n start !== end &&\n value >= start &&\n value <= end);\n}\n/**\n * Extracts the element that actually corresponds to a touch event's location\n * (rather than the element that initiated the sequence of touch events).\n */\nfunction getActualTouchTarget(event) {\n const touchLocation = event.changedTouches[0];\n return document.elementFromPoint(touchLocation.clientX, touchLocation.clientY);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** A class representing a range of dates. */\nclass DateRange {\n constructor(\n /** The start date of the range. */\n start, \n /** The end date of the range. */\n end) {\n this.start = start;\n this.end = end;\n }\n}\n/**\n * A selection model containing a date selection.\n * @docs-private\n */\nclass MatDateSelectionModel {\n constructor(\n /** The current selection. */\n selection, _adapter) {\n this.selection = selection;\n this._adapter = _adapter;\n this._selectionChanged = new Subject();\n /** Emits when the selection has changed. */\n this.selectionChanged = this._selectionChanged;\n this.selection = selection;\n }\n /**\n * Updates the current selection in the model.\n * @param value New selection that should be assigned.\n * @param source Object that triggered the selection change.\n */\n updateSelection(value, source) {\n const oldValue = this.selection;\n this.selection = value;\n this._selectionChanged.next({ selection: value, source, oldValue });\n }\n ngOnDestroy() {\n this._selectionChanged.complete();\n }\n _isValidDateInstance(date) {\n return this._adapter.isDateInstance(date) && this._adapter.isValid(date);\n }\n}\nMatDateSelectionModel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDateSelectionModel, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Injectable });\nMatDateSelectionModel.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDateSelectionModel });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDateSelectionModel, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined }, { type: i1$1.DateAdapter }]; } });\n/**\n * A selection model that contains a single date.\n * @docs-private\n */\nclass MatSingleDateSelectionModel extends MatDateSelectionModel {\n constructor(adapter) {\n super(null, adapter);\n }\n /**\n * Adds a date to the current selection. In the case of a single date selection, the added date\n * simply overwrites the previous selection\n */\n add(date) {\n super.updateSelection(date, this);\n }\n /** Checks whether the current selection is valid. */\n isValid() {\n return this.selection != null && this._isValidDateInstance(this.selection);\n }\n /**\n * Checks whether the current selection is complete. In the case of a single date selection, this\n * is true if the current selection is not null.\n */\n isComplete() {\n return this.selection != null;\n }\n /** Clones the selection model. */\n clone() {\n const clone = new MatSingleDateSelectionModel(this._adapter);\n clone.updateSelection(this.selection, this);\n return clone;\n }\n}\nMatSingleDateSelectionModel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSingleDateSelectionModel, deps: [{ token: i1$1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });\nMatSingleDateSelectionModel.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSingleDateSelectionModel });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSingleDateSelectionModel, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1$1.DateAdapter }]; } });\n/**\n * A selection model that contains a date range.\n * @docs-private\n */\nclass MatRangeDateSelectionModel extends MatDateSelectionModel {\n constructor(adapter) {\n super(new DateRange(null, null), adapter);\n }\n /**\n * Adds a date to the current selection. In the case of a date range selection, the added date\n * fills in the next `null` value in the range. If both the start and the end already have a date,\n * the selection is reset so that the given date is the new `start` and the `end` is null.\n */\n add(date) {\n let { start, end } = this.selection;\n if (start == null) {\n start = date;\n }\n else if (end == null) {\n end = date;\n }\n else {\n start = date;\n end = null;\n }\n super.updateSelection(new DateRange(start, end), this);\n }\n /** Checks whether the current selection is valid. */\n isValid() {\n const { start, end } = this.selection;\n // Empty ranges are valid.\n if (start == null && end == null) {\n return true;\n }\n // Complete ranges are only valid if both dates are valid and the start is before the end.\n if (start != null && end != null) {\n return (this._isValidDateInstance(start) &&\n this._isValidDateInstance(end) &&\n this._adapter.compareDate(start, end) <= 0);\n }\n // Partial ranges are valid if the start/end is valid.\n return ((start == null || this._isValidDateInstance(start)) &&\n (end == null || this._isValidDateInstance(end)));\n }\n /**\n * Checks whether the current selection is complete. In the case of a date range selection, this\n * is true if the current selection has a non-null `start` and `end`.\n */\n isComplete() {\n return this.selection.start != null && this.selection.end != null;\n }\n /** Clones the selection model. */\n clone() {\n const clone = new MatRangeDateSelectionModel(this._adapter);\n clone.updateSelection(this.selection, this);\n return clone;\n }\n}\nMatRangeDateSelectionModel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatRangeDateSelectionModel, deps: [{ token: i1$1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });\nMatRangeDateSelectionModel.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatRangeDateSelectionModel });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatRangeDateSelectionModel, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1$1.DateAdapter }]; } });\n/** @docs-private */\nfunction MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY(parent, adapter) {\n return parent || new MatSingleDateSelectionModel(adapter);\n}\n/**\n * Used to provide a single selection model to a component.\n * @docs-private\n */\nconst MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER = {\n provide: MatDateSelectionModel,\n deps: [[new Optional(), new SkipSelf(), MatDateSelectionModel], DateAdapter],\n useFactory: MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY,\n};\n/** @docs-private */\nfunction MAT_RANGE_DATE_SELECTION_MODEL_FACTORY(parent, adapter) {\n return parent || new MatRangeDateSelectionModel(adapter);\n}\n/**\n * Used to provide a range selection model to a component.\n * @docs-private\n */\nconst MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER = {\n provide: MatDateSelectionModel,\n deps: [[new Optional(), new SkipSelf(), MatDateSelectionModel], DateAdapter],\n useFactory: MAT_RANGE_DATE_SELECTION_MODEL_FACTORY,\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token used to customize the date range selection behavior. */\nconst MAT_DATE_RANGE_SELECTION_STRATEGY = new InjectionToken('MAT_DATE_RANGE_SELECTION_STRATEGY');\n/** Provides the default date range selection behavior. */\nclass DefaultMatCalendarRangeStrategy {\n constructor(_dateAdapter) {\n this._dateAdapter = _dateAdapter;\n }\n selectionFinished(date, currentRange) {\n let { start, end } = currentRange;\n if (start == null) {\n start = date;\n }\n else if (end == null && date && this._dateAdapter.compareDate(date, start) >= 0) {\n end = date;\n }\n else {\n start = date;\n end = null;\n }\n return new DateRange(start, end);\n }\n createPreview(activeDate, currentRange) {\n let start = null;\n let end = null;\n if (currentRange.start && !currentRange.end && activeDate) {\n start = currentRange.start;\n end = activeDate;\n }\n return new DateRange(start, end);\n }\n createDrag(dragOrigin, originalRange, newDate) {\n let start = originalRange.start;\n let end = originalRange.end;\n if (!start || !end) {\n // Can't drag from an incomplete range.\n return null;\n }\n const adapter = this._dateAdapter;\n const isRange = adapter.compareDate(start, end) !== 0;\n const diffYears = adapter.getYear(newDate) - adapter.getYear(dragOrigin);\n const diffMonths = adapter.getMonth(newDate) - adapter.getMonth(dragOrigin);\n const diffDays = adapter.getDate(newDate) - adapter.getDate(dragOrigin);\n if (isRange && adapter.sameDate(dragOrigin, originalRange.start)) {\n start = newDate;\n if (adapter.compareDate(newDate, end) > 0) {\n end = adapter.addCalendarYears(end, diffYears);\n end = adapter.addCalendarMonths(end, diffMonths);\n end = adapter.addCalendarDays(end, diffDays);\n }\n }\n else if (isRange && adapter.sameDate(dragOrigin, originalRange.end)) {\n end = newDate;\n if (adapter.compareDate(newDate, start) < 0) {\n start = adapter.addCalendarYears(start, diffYears);\n start = adapter.addCalendarMonths(start, diffMonths);\n start = adapter.addCalendarDays(start, diffDays);\n }\n }\n else {\n start = adapter.addCalendarYears(start, diffYears);\n start = adapter.addCalendarMonths(start, diffMonths);\n start = adapter.addCalendarDays(start, diffDays);\n end = adapter.addCalendarYears(end, diffYears);\n end = adapter.addCalendarMonths(end, diffMonths);\n end = adapter.addCalendarDays(end, diffDays);\n }\n return new DateRange(start, end);\n }\n}\nDefaultMatCalendarRangeStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: DefaultMatCalendarRangeStrategy, deps: [{ token: i1$1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });\nDefaultMatCalendarRangeStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: DefaultMatCalendarRangeStrategy });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: DefaultMatCalendarRangeStrategy, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1$1.DateAdapter }]; } });\n/** @docs-private */\nfunction MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY(parent, adapter) {\n return parent || new DefaultMatCalendarRangeStrategy(adapter);\n}\n/** @docs-private */\nconst MAT_CALENDAR_RANGE_STRATEGY_PROVIDER = {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n deps: [[new Optional(), new SkipSelf(), MAT_DATE_RANGE_SELECTION_STRATEGY], DateAdapter],\n useFactory: MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY,\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DAYS_PER_WEEK = 7;\n/**\n * An internal component used to display a single month in the datepicker.\n * @docs-private\n */\nclass MatMonthView {\n /**\n * The date to display in this month view (everything other than the month and year is ignored).\n */\n get activeDate() {\n return this._activeDate;\n }\n set activeDate(value) {\n const oldActiveDate = this._activeDate;\n const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) ||\n this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (!this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\n this._init();\n }\n }\n /** The currently selected date. */\n get selected() {\n return this._selected;\n }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n }\n else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n this._setRanges(this._selected);\n }\n /** The minimum selectable date. */\n get minDate() {\n return this._minDate;\n }\n set minDate(value) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() {\n return this._maxDate;\n }\n set maxDate(value) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n constructor(_changeDetectorRef, _dateFormats, _dateAdapter, _dir, _rangeStrategy) {\n this._changeDetectorRef = _changeDetectorRef;\n this._dateFormats = _dateFormats;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._rangeStrategy = _rangeStrategy;\n this._rerenderSubscription = Subscription.EMPTY;\n /** Origin of active drag, or null when dragging is not active. */\n this.activeDrag = null;\n /** Emits when a new date is selected. */\n this.selectedChange = new EventEmitter();\n /** Emits when any date is selected. */\n this._userSelection = new EventEmitter();\n /** Emits when the user initiates a date range drag via mouse or touch. */\n this.dragStarted = new EventEmitter();\n /**\n * Emits when the user completes or cancels a date range drag.\n * Emits null when the drag was canceled or the newly selected date range if completed.\n */\n this.dragEnded = new EventEmitter();\n /** Emits when any date is activated. */\n this.activeDateChange = new EventEmitter();\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n }\n this._activeDate = this._dateAdapter.today();\n }\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges\n .pipe(startWith(null))\n .subscribe(() => this._init());\n }\n ngOnChanges(changes) {\n const comparisonChange = changes['comparisonStart'] || changes['comparisonEnd'];\n if (comparisonChange && !comparisonChange.firstChange) {\n this._setRanges(this.selected);\n }\n if (changes['activeDrag'] && !this.activeDrag) {\n this._clearPreview();\n }\n }\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n /** Handles when a new date is selected. */\n _dateSelected(event) {\n const date = event.value;\n const selectedDate = this._getDateFromDayOfMonth(date);\n let rangeStartDate;\n let rangeEndDate;\n if (this._selected instanceof DateRange) {\n rangeStartDate = this._getDateInCurrentMonth(this._selected.start);\n rangeEndDate = this._getDateInCurrentMonth(this._selected.end);\n }\n else {\n rangeStartDate = rangeEndDate = this._getDateInCurrentMonth(this._selected);\n }\n if (rangeStartDate !== date || rangeEndDate !== date) {\n this.selectedChange.emit(selectedDate);\n }\n this._userSelection.emit({ value: selectedDate, event: event.event });\n this._clearPreview();\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Takes the index of a calendar body cell wrapped in in an event as argument. For the date that\n * corresponds to the given cell, set `activeDate` to that date and fire `activeDateChange` with\n * that date.\n *\n * This function is used to match each component's model of the active date with the calendar\n * body cell that was focused. It updates its value of `activeDate` synchronously and updates the\n * parent's value asynchronously via the `activeDateChange` event. The child component receives an\n * updated value asynchronously via the `activeCell` Input.\n */\n _updateActiveDate(event) {\n const month = event.value;\n const oldActiveDate = this._activeDate;\n this.activeDate = this._getDateFromDayOfMonth(month);\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this._activeDate);\n }\n }\n /** Handles keydown events on the calendar body when calendar is in month view. */\n _handleCalendarBodyKeydown(event) {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 1 - this._dateAdapter.getDate(this._activeDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, this._dateAdapter.getNumDaysInMonth(this._activeDate) -\n this._dateAdapter.getDate(this._activeDate));\n break;\n case PAGE_UP:\n this.activeDate = event.altKey\n ? this._dateAdapter.addCalendarYears(this._activeDate, -1)\n : this._dateAdapter.addCalendarMonths(this._activeDate, -1);\n break;\n case PAGE_DOWN:\n this.activeDate = event.altKey\n ? this._dateAdapter.addCalendarYears(this._activeDate, 1)\n : this._dateAdapter.addCalendarMonths(this._activeDate, 1);\n break;\n case ENTER:\n case SPACE:\n this._selectionKeyPressed = true;\n if (this._canSelect(this._activeDate)) {\n // Prevent unexpected default actions such as form submission.\n // Note that we only prevent the default action here while the selection happens in\n // `keyup` below. We can't do the selection here, because it can cause the calendar to\n // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n // because it's too late (see #23305).\n event.preventDefault();\n }\n return;\n case ESCAPE:\n // Abort the current range selection if the user presses escape mid-selection.\n if (this._previewEnd != null && !hasModifierKey(event)) {\n this._clearPreview();\n // If a drag is in progress, cancel the drag without changing the\n // current selection.\n if (this.activeDrag) {\n this.dragEnded.emit({ value: null, event });\n }\n else {\n this.selectedChange.emit(null);\n this._userSelection.emit({ value: null, event });\n }\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n this._focusActiveCellAfterViewChecked();\n }\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n /** Handles keyup events on the calendar body when calendar is in month view. */\n _handleCalendarBodyKeyup(event) {\n if (event.keyCode === SPACE || event.keyCode === ENTER) {\n if (this._selectionKeyPressed && this._canSelect(this._activeDate)) {\n this._dateSelected({ value: this._dateAdapter.getDate(this._activeDate), event });\n }\n this._selectionKeyPressed = false;\n }\n }\n /** Initializes this month view. */\n _init() {\n this._setRanges(this.selected);\n this._todayDate = this._getCellCompareValue(this._dateAdapter.today());\n this._monthLabel = this._dateFormats.display.monthLabel\n ? this._dateAdapter.format(this.activeDate, this._dateFormats.display.monthLabel)\n : this._dateAdapter\n .getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)].toLocaleUpperCase();\n let firstOfMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), 1);\n this._firstWeekOffset =\n (DAYS_PER_WEEK +\n this._dateAdapter.getDayOfWeek(firstOfMonth) -\n this._dateAdapter.getFirstDayOfWeek()) %\n DAYS_PER_WEEK;\n this._initWeekdays();\n this._createWeekCells();\n this._changeDetectorRef.markForCheck();\n }\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell(movePreview) {\n this._matCalendarBody._focusActiveCell(movePreview);\n }\n /** Focuses the active cell after change detection has run and the microtask queue is empty. */\n _focusActiveCellAfterViewChecked() {\n this._matCalendarBody._scheduleFocusActiveCellAfterViewChecked();\n }\n /** Called when the user has activated a new cell and the preview needs to be updated. */\n _previewChanged({ event, value: cell }) {\n if (this._rangeStrategy) {\n // We can assume that this will be a range, because preview\n // events aren't fired for single date selections.\n const value = cell ? cell.rawValue : null;\n const previewRange = this._rangeStrategy.createPreview(value, this.selected, event);\n this._previewStart = this._getCellCompareValue(previewRange.start);\n this._previewEnd = this._getCellCompareValue(previewRange.end);\n if (this.activeDrag && value) {\n const dragRange = this._rangeStrategy.createDrag?.(this.activeDrag.value, this.selected, value, event);\n if (dragRange) {\n this._previewStart = this._getCellCompareValue(dragRange.start);\n this._previewEnd = this._getCellCompareValue(dragRange.end);\n }\n }\n // Note that here we need to use `detectChanges`, rather than `markForCheck`, because\n // the way `_focusActiveCell` is set up at the moment makes it fire at the wrong time\n // when navigating one month back using the keyboard which will cause this handler\n // to throw a \"changed after checked\" error when updating the preview state.\n this._changeDetectorRef.detectChanges();\n }\n }\n /**\n * Called when the user has ended a drag. If the drag/drop was successful,\n * computes and emits the new range selection.\n */\n _dragEnded(event) {\n if (!this.activeDrag)\n return;\n if (event.value) {\n // Propagate drag effect\n const dragDropResult = this._rangeStrategy?.createDrag?.(this.activeDrag.value, this.selected, event.value, event.event);\n this.dragEnded.emit({ value: dragDropResult ?? null, event: event.event });\n }\n else {\n this.dragEnded.emit({ value: null, event: event.event });\n }\n }\n /**\n * Takes a day of the month and returns a new date in the same month and year as the currently\n * active date. The returned date will have the same day of the month as the argument date.\n */\n _getDateFromDayOfMonth(dayOfMonth) {\n return this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), dayOfMonth);\n }\n /** Initializes the weekdays. */\n _initWeekdays() {\n const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\n const narrowWeekdays = this._dateAdapter.getDayOfWeekNames('narrow');\n const longWeekdays = this._dateAdapter.getDayOfWeekNames('long');\n // Rotate the labels for days of the week based on the configured first day of the week.\n let weekdays = longWeekdays.map((long, i) => {\n return { long, narrow: narrowWeekdays[i] };\n });\n this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n }\n /** Creates MatCalendarCells for the dates in this month. */\n _createWeekCells() {\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\n const dateNames = this._dateAdapter.getDateNames();\n this._weeks = [[]];\n for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell == DAYS_PER_WEEK) {\n this._weeks.push([]);\n cell = 0;\n }\n const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), i + 1);\n const enabled = this._shouldEnableDate(date);\n const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);\n const cellClasses = this.dateClass ? this.dateClass(date, 'month') : undefined;\n this._weeks[this._weeks.length - 1].push(new MatCalendarCell(i + 1, dateNames[i], ariaLabel, enabled, cellClasses, this._getCellCompareValue(date), date));\n }\n }\n /** Date filter for the month */\n _shouldEnableDate(date) {\n return (!!date &&\n (!this.minDate || this._dateAdapter.compareDate(date, this.minDate) >= 0) &&\n (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate) <= 0) &&\n (!this.dateFilter || this.dateFilter(date)));\n }\n /**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n */\n _getDateInCurrentMonth(date) {\n return date && this._hasSameMonthAndYear(date, this.activeDate)\n ? this._dateAdapter.getDate(date)\n : null;\n }\n /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n _hasSameMonthAndYear(d1, d2) {\n return !!(d1 &&\n d2 &&\n this._dateAdapter.getMonth(d1) == this._dateAdapter.getMonth(d2) &&\n this._dateAdapter.getYear(d1) == this._dateAdapter.getYear(d2));\n }\n /** Gets the value that will be used to one cell to another. */\n _getCellCompareValue(date) {\n if (date) {\n // We use the time since the Unix epoch to compare dates in this view, rather than the\n // cell values, because we need to support ranges that span across multiple months/years.\n const year = this._dateAdapter.getYear(date);\n const month = this._dateAdapter.getMonth(date);\n const day = this._dateAdapter.getDate(date);\n return new Date(year, month, day).getTime();\n }\n return null;\n }\n /** Determines whether the user has the RTL layout direction. */\n _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n /** Sets the current range based on a model value. */\n _setRanges(selectedValue) {\n if (selectedValue instanceof DateRange) {\n this._rangeStart = this._getCellCompareValue(selectedValue.start);\n this._rangeEnd = this._getCellCompareValue(selectedValue.end);\n this._isRange = true;\n }\n else {\n this._rangeStart = this._rangeEnd = this._getCellCompareValue(selectedValue);\n this._isRange = false;\n }\n this._comparisonRangeStart = this._getCellCompareValue(this.comparisonStart);\n this._comparisonRangeEnd = this._getCellCompareValue(this.comparisonEnd);\n }\n /** Gets whether a date can be selected in the month view. */\n _canSelect(date) {\n return !this.dateFilter || this.dateFilter(date);\n }\n /** Clears out preview state. */\n _clearPreview() {\n this._previewStart = this._previewEnd = null;\n }\n}\nMatMonthView.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatMonthView, deps: [{ token: i0.ChangeDetectorRef }, { token: MAT_DATE_FORMATS, optional: true }, { token: i1$1.DateAdapter, optional: true }, { token: i2.Directionality, optional: true }, { token: MAT_DATE_RANGE_SELECTION_STRATEGY, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatMonthView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatMonthView, selector: \"mat-month-view\", inputs: { activeDate: \"activeDate\", selected: \"selected\", minDate: \"minDate\", maxDate: \"maxDate\", dateFilter: \"dateFilter\", dateClass: \"dateClass\", comparisonStart: \"comparisonStart\", comparisonEnd: \"comparisonEnd\", startDateAccessibleName: \"startDateAccessibleName\", endDateAccessibleName: \"endDateAccessibleName\", activeDrag: \"activeDrag\" }, outputs: { selectedChange: \"selectedChange\", _userSelection: \"_userSelection\", dragStarted: \"dragStarted\", dragEnded: \"dragEnded\", activeDateChange: \"activeDateChange\" }, viewQueries: [{ propertyName: \"_matCalendarBody\", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: [\"matMonthView\"], usesOnChanges: true, ngImport: i0, template: \"\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{day.long}}\\n {{day.narrow}}\\n
\\n\", dependencies: [{ kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"component\", type: MatCalendarBody, selector: \"[mat-calendar-body]\", inputs: [\"label\", \"rows\", \"todayValue\", \"startValue\", \"endValue\", \"labelMinRequiredCells\", \"numCols\", \"activeCell\", \"isRange\", \"cellAspectRatio\", \"comparisonStart\", \"comparisonEnd\", \"previewStart\", \"previewEnd\", \"startDateAccessibleName\", \"endDateAccessibleName\"], outputs: [\"selectedValueChange\", \"previewChange\", \"activeDateChange\", \"dragStarted\", \"dragEnded\"], exportAs: [\"matCalendarBody\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatMonthView, decorators: [{\n type: Component,\n args: [{ selector: 'mat-month-view', exportAs: 'matMonthView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{day.long}}\\n {{day.narrow}}\\n
\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }, { type: i1$1.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: i2.Directionality, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DATE_RANGE_SELECTION_STRATEGY]\n }, {\n type: Optional\n }] }]; }, propDecorators: { activeDate: [{\n type: Input\n }], selected: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], dateClass: [{\n type: Input\n }], comparisonStart: [{\n type: Input\n }], comparisonEnd: [{\n type: Input\n }], startDateAccessibleName: [{\n type: Input\n }], endDateAccessibleName: [{\n type: Input\n }], activeDrag: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], _userSelection: [{\n type: Output\n }], dragStarted: [{\n type: Output\n }], dragEnded: [{\n type: Output\n }], activeDateChange: [{\n type: Output\n }], _matCalendarBody: [{\n type: ViewChild,\n args: [MatCalendarBody]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst yearsPerPage = 24;\nconst yearsPerRow = 4;\n/**\n * An internal component used to display a year selector in the datepicker.\n * @docs-private\n */\nclass MatMultiYearView {\n /** The date to display in this multi-year view (everything other than the year is ignored). */\n get activeDate() {\n return this._activeDate;\n }\n set activeDate(value) {\n let oldActiveDate = this._activeDate;\n const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) ||\n this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (!isSameMultiYearView(this._dateAdapter, oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {\n this._init();\n }\n }\n /** The currently selected date. */\n get selected() {\n return this._selected;\n }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n }\n else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n this._setSelectedYear(value);\n }\n /** The minimum selectable date. */\n get minDate() {\n return this._minDate;\n }\n set minDate(value) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() {\n return this._maxDate;\n }\n set maxDate(value) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n constructor(_changeDetectorRef, _dateAdapter, _dir) {\n this._changeDetectorRef = _changeDetectorRef;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._rerenderSubscription = Subscription.EMPTY;\n /** Emits when a new year is selected. */\n this.selectedChange = new EventEmitter();\n /** Emits the selected year. This doesn't imply a change on the selected date */\n this.yearSelected = new EventEmitter();\n /** Emits when any date is activated. */\n this.activeDateChange = new EventEmitter();\n if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw createMissingDateImplError('DateAdapter');\n }\n this._activeDate = this._dateAdapter.today();\n }\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges\n .pipe(startWith(null))\n .subscribe(() => this._init());\n }\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n /** Initializes this multi-year view. */\n _init() {\n this._todayYear = this._dateAdapter.getYear(this._dateAdapter.today());\n // We want a range years such that we maximize the number of\n // enabled dates visible at once. This prevents issues where the minimum year\n // is the last item of a page OR the maximum year is the first item of a page.\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view.\n const activeYear = this._dateAdapter.getYear(this._activeDate);\n const minYearOfPage = activeYear - getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n this._years = [];\n for (let i = 0, row = []; i < yearsPerPage; i++) {\n row.push(minYearOfPage + i);\n if (row.length == yearsPerRow) {\n this._years.push(row.map(year => this._createCellForYear(year)));\n row = [];\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /** Handles when a new year is selected. */\n _yearSelected(event) {\n const year = event.value;\n const selectedYear = this._dateAdapter.createDate(year, 0, 1);\n const selectedDate = this._getDateFromYear(year);\n this.yearSelected.emit(selectedYear);\n this.selectedChange.emit(selectedDate);\n }\n /**\n * Takes the index of a calendar body cell wrapped in in an event as argument. For the date that\n * corresponds to the given cell, set `activeDate` to that date and fire `activeDateChange` with\n * that date.\n *\n * This function is used to match each component's model of the active date with the calendar\n * body cell that was focused. It updates its value of `activeDate` synchronously and updates the\n * parent's value asynchronously via the `activeDateChange` event. The child component receives an\n * updated value asynchronously via the `activeCell` Input.\n */\n _updateActiveDate(event) {\n const year = event.value;\n const oldActiveDate = this._activeDate;\n this.activeDate = this._getDateFromYear(year);\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n }\n /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n _handleCalendarBodyKeydown(event) {\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -yearsPerRow);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerRow);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerPage -\n getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate) -\n 1);\n break;\n case PAGE_UP:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -yearsPerPage * 10 : -yearsPerPage);\n break;\n case PAGE_DOWN:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? yearsPerPage * 10 : yearsPerPage);\n break;\n case ENTER:\n case SPACE:\n // Note that we only prevent the default action here while the selection happens in\n // `keyup` below. We can't do the selection here, because it can cause the calendar to\n // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n // because it's too late (see #23305).\n this._selectionKeyPressed = true;\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n this._focusActiveCellAfterViewChecked();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n /** Handles keyup events on the calendar body when calendar is in multi-year view. */\n _handleCalendarBodyKeyup(event) {\n if (event.keyCode === SPACE || event.keyCode === ENTER) {\n if (this._selectionKeyPressed) {\n this._yearSelected({ value: this._dateAdapter.getYear(this._activeDate), event });\n }\n this._selectionKeyPressed = false;\n }\n }\n _getActiveCell() {\n return getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n }\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n /** Focuses the active cell after change detection has run and the microtask queue is empty. */\n _focusActiveCellAfterViewChecked() {\n this._matCalendarBody._scheduleFocusActiveCellAfterViewChecked();\n }\n /**\n * Takes a year and returns a new date on the same day and month as the currently active date\n * The returned date will have the same year as the argument date.\n */\n _getDateFromYear(year) {\n const activeMonth = this._dateAdapter.getMonth(this.activeDate);\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(year, activeMonth, 1));\n const normalizedDate = this._dateAdapter.createDate(year, activeMonth, Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth));\n return normalizedDate;\n }\n /** Creates an MatCalendarCell for the given year. */\n _createCellForYear(year) {\n const date = this._dateAdapter.createDate(year, 0, 1);\n const yearName = this._dateAdapter.getYearName(date);\n const cellClasses = this.dateClass ? this.dateClass(date, 'multi-year') : undefined;\n return new MatCalendarCell(year, yearName, yearName, this._shouldEnableYear(year), cellClasses);\n }\n /** Whether the given year is enabled. */\n _shouldEnableYear(year) {\n // disable if the year is greater than maxDate lower than minDate\n if (year === undefined ||\n year === null ||\n (this.maxDate && year > this._dateAdapter.getYear(this.maxDate)) ||\n (this.minDate && year < this._dateAdapter.getYear(this.minDate))) {\n return false;\n }\n // enable if it reaches here and there's no filter defined\n if (!this.dateFilter) {\n return true;\n }\n const firstOfYear = this._dateAdapter.createDate(year, 0, 1);\n // If any date in the year is enabled count the year as enabled.\n for (let date = firstOfYear; this._dateAdapter.getYear(date) == year; date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n return false;\n }\n /** Determines whether the user has the RTL layout direction. */\n _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n /** Sets the currently-highlighted year based on a model value. */\n _setSelectedYear(value) {\n this._selectedYear = null;\n if (value instanceof DateRange) {\n const displayValue = value.start || value.end;\n if (displayValue) {\n this._selectedYear = this._dateAdapter.getYear(displayValue);\n }\n }\n else if (value) {\n this._selectedYear = this._dateAdapter.getYear(value);\n }\n }\n}\nMatMultiYearView.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatMultiYearView, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$1.DateAdapter, optional: true }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatMultiYearView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatMultiYearView, selector: \"mat-multi-year-view\", inputs: { activeDate: \"activeDate\", selected: \"selected\", minDate: \"minDate\", maxDate: \"maxDate\", dateFilter: \"dateFilter\", dateClass: \"dateClass\" }, outputs: { selectedChange: \"selectedChange\", yearSelected: \"yearSelected\", activeDateChange: \"activeDateChange\" }, viewQueries: [{ propertyName: \"_matCalendarBody\", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: [\"matMultiYearView\"], ngImport: i0, template: \"\\n \\n \\n \\n \\n \\n
\\n\", dependencies: [{ kind: \"component\", type: MatCalendarBody, selector: \"[mat-calendar-body]\", inputs: [\"label\", \"rows\", \"todayValue\", \"startValue\", \"endValue\", \"labelMinRequiredCells\", \"numCols\", \"activeCell\", \"isRange\", \"cellAspectRatio\", \"comparisonStart\", \"comparisonEnd\", \"previewStart\", \"previewEnd\", \"startDateAccessibleName\", \"endDateAccessibleName\"], outputs: [\"selectedValueChange\", \"previewChange\", \"activeDateChange\", \"dragStarted\", \"dragEnded\"], exportAs: [\"matCalendarBody\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatMultiYearView, decorators: [{\n type: Component,\n args: [{ selector: 'mat-multi-year-view', exportAs: 'matMultiYearView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n \\n \\n \\n \\n \\n
\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1$1.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: i2.Directionality, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { activeDate: [{\n type: Input\n }], selected: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], dateClass: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], yearSelected: [{\n type: Output\n }], activeDateChange: [{\n type: Output\n }], _matCalendarBody: [{\n type: ViewChild,\n args: [MatCalendarBody]\n }] } });\nfunction isSameMultiYearView(dateAdapter, date1, date2, minDate, maxDate) {\n const year1 = dateAdapter.getYear(date1);\n const year2 = dateAdapter.getYear(date2);\n const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\n return (Math.floor((year1 - startingYear) / yearsPerPage) ===\n Math.floor((year2 - startingYear) / yearsPerPage));\n}\n/**\n * When the multi-year view is first opened, the active year will be in view.\n * So we compute how many years are between the active year and the *slot* where our\n * \"startingYear\" will render when paged into view.\n */\nfunction getActiveOffset(dateAdapter, activeDate, minDate, maxDate) {\n const activeYear = dateAdapter.getYear(activeDate);\n return euclideanModulo(activeYear - getStartingYear(dateAdapter, minDate, maxDate), yearsPerPage);\n}\n/**\n * We pick a \"starting\" year such that either the maximum year would be at the end\n * or the minimum year would be at the beginning of a page.\n */\nfunction getStartingYear(dateAdapter, minDate, maxDate) {\n let startingYear = 0;\n if (maxDate) {\n const maxYear = dateAdapter.getYear(maxDate);\n startingYear = maxYear - yearsPerPage + 1;\n }\n else if (minDate) {\n startingYear = dateAdapter.getYear(minDate);\n }\n return startingYear;\n}\n/** Gets remainder that is non-negative, even if first number is negative */\nfunction euclideanModulo(a, b) {\n return ((a % b) + b) % b;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * An internal component used to display a single year in the datepicker.\n * @docs-private\n */\nclass MatYearView {\n /** The date to display in this year view (everything other than the year is ignored). */\n get activeDate() {\n return this._activeDate;\n }\n set activeDate(value) {\n let oldActiveDate = this._activeDate;\n const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) ||\n this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (this._dateAdapter.getYear(oldActiveDate) !== this._dateAdapter.getYear(this._activeDate)) {\n this._init();\n }\n }\n /** The currently selected date. */\n get selected() {\n return this._selected;\n }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n }\n else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n this._setSelectedMonth(value);\n }\n /** The minimum selectable date. */\n get minDate() {\n return this._minDate;\n }\n set minDate(value) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() {\n return this._maxDate;\n }\n set maxDate(value) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n constructor(_changeDetectorRef, _dateFormats, _dateAdapter, _dir) {\n this._changeDetectorRef = _changeDetectorRef;\n this._dateFormats = _dateFormats;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._rerenderSubscription = Subscription.EMPTY;\n /** Emits when a new month is selected. */\n this.selectedChange = new EventEmitter();\n /** Emits the selected month. This doesn't imply a change on the selected date */\n this.monthSelected = new EventEmitter();\n /** Emits when any date is activated. */\n this.activeDateChange = new EventEmitter();\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n }\n this._activeDate = this._dateAdapter.today();\n }\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges\n .pipe(startWith(null))\n .subscribe(() => this._init());\n }\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n /** Handles when a new month is selected. */\n _monthSelected(event) {\n const month = event.value;\n const selectedMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n this.monthSelected.emit(selectedMonth);\n const selectedDate = this._getDateFromMonth(month);\n this.selectedChange.emit(selectedDate);\n }\n /**\n * Takes the index of a calendar body cell wrapped in in an event as argument. For the date that\n * corresponds to the given cell, set `activeDate` to that date and fire `activeDateChange` with\n * that date.\n *\n * This function is used to match each component's model of the active date with the calendar\n * body cell that was focused. It updates its value of `activeDate` synchronously and updates the\n * parent's value asynchronously via the `activeDateChange` event. The child component receives an\n * updated value asynchronously via the `activeCell` Input.\n */\n _updateActiveDate(event) {\n const month = event.value;\n const oldActiveDate = this._activeDate;\n this.activeDate = this._getDateFromMonth(month);\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n }\n /** Handles keydown events on the calendar body when calendar is in year view. */\n _handleCalendarBodyKeydown(event) {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -4);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 4);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -this._dateAdapter.getMonth(this._activeDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 11 - this._dateAdapter.getMonth(this._activeDate));\n break;\n case PAGE_UP:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\n break;\n case PAGE_DOWN:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n break;\n case ENTER:\n case SPACE:\n // Note that we only prevent the default action here while the selection happens in\n // `keyup` below. We can't do the selection here, because it can cause the calendar to\n // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n // because it's too late (see #23305).\n this._selectionKeyPressed = true;\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n this._focusActiveCellAfterViewChecked();\n }\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n /** Handles keyup events on the calendar body when calendar is in year view. */\n _handleCalendarBodyKeyup(event) {\n if (event.keyCode === SPACE || event.keyCode === ENTER) {\n if (this._selectionKeyPressed) {\n this._monthSelected({ value: this._dateAdapter.getMonth(this._activeDate), event });\n }\n this._selectionKeyPressed = false;\n }\n }\n /** Initializes this year view. */\n _init() {\n this._setSelectedMonth(this.selected);\n this._todayMonth = this._getMonthInCurrentYear(this._dateAdapter.today());\n this._yearLabel = this._dateAdapter.getYearName(this.activeDate);\n let monthNames = this._dateAdapter.getMonthNames('short');\n // First row of months only contains 5 elements so we can fit the year label on the same row.\n this._months = [\n [0, 1, 2, 3],\n [4, 5, 6, 7],\n [8, 9, 10, 11],\n ].map(row => row.map(month => this._createCellForMonth(month, monthNames[month])));\n this._changeDetectorRef.markForCheck();\n }\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n /** Schedules the matCalendarBody to focus the active cell after change detection has run */\n _focusActiveCellAfterViewChecked() {\n this._matCalendarBody._scheduleFocusActiveCellAfterViewChecked();\n }\n /**\n * Gets the month in this year that the given Date falls on.\n * Returns null if the given Date is in another year.\n */\n _getMonthInCurrentYear(date) {\n return date && this._dateAdapter.getYear(date) == this._dateAdapter.getYear(this.activeDate)\n ? this._dateAdapter.getMonth(date)\n : null;\n }\n /**\n * Takes a month and returns a new date in the same day and year as the currently active date.\n * The returned date will have the same month as the argument date.\n */\n _getDateFromMonth(month) {\n const normalizedDate = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(normalizedDate);\n return this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth));\n }\n /** Creates an MatCalendarCell for the given month. */\n _createCellForMonth(month, monthName) {\n const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.monthYearA11yLabel);\n const cellClasses = this.dateClass ? this.dateClass(date, 'year') : undefined;\n return new MatCalendarCell(month, monthName.toLocaleUpperCase(), ariaLabel, this._shouldEnableMonth(month), cellClasses);\n }\n /** Whether the given month is enabled. */\n _shouldEnableMonth(month) {\n const activeYear = this._dateAdapter.getYear(this.activeDate);\n if (month === undefined ||\n month === null ||\n this._isYearAndMonthAfterMaxDate(activeYear, month) ||\n this._isYearAndMonthBeforeMinDate(activeYear, month)) {\n return false;\n }\n if (!this.dateFilter) {\n return true;\n }\n const firstOfMonth = this._dateAdapter.createDate(activeYear, month, 1);\n // If any date in the month is enabled count the month as enabled.\n for (let date = firstOfMonth; this._dateAdapter.getMonth(date) == month; date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Tests whether the combination month/year is after this.maxDate, considering\n * just the month and year of this.maxDate\n */\n _isYearAndMonthAfterMaxDate(year, month) {\n if (this.maxDate) {\n const maxYear = this._dateAdapter.getYear(this.maxDate);\n const maxMonth = this._dateAdapter.getMonth(this.maxDate);\n return year > maxYear || (year === maxYear && month > maxMonth);\n }\n return false;\n }\n /**\n * Tests whether the combination month/year is before this.minDate, considering\n * just the month and year of this.minDate\n */\n _isYearAndMonthBeforeMinDate(year, month) {\n if (this.minDate) {\n const minYear = this._dateAdapter.getYear(this.minDate);\n const minMonth = this._dateAdapter.getMonth(this.minDate);\n return year < minYear || (year === minYear && month < minMonth);\n }\n return false;\n }\n /** Determines whether the user has the RTL layout direction. */\n _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n /** Sets the currently-selected month based on a model value. */\n _setSelectedMonth(value) {\n if (value instanceof DateRange) {\n this._selectedMonth =\n this._getMonthInCurrentYear(value.start) || this._getMonthInCurrentYear(value.end);\n }\n else {\n this._selectedMonth = this._getMonthInCurrentYear(value);\n }\n }\n}\nMatYearView.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatYearView, deps: [{ token: i0.ChangeDetectorRef }, { token: MAT_DATE_FORMATS, optional: true }, { token: i1$1.DateAdapter, optional: true }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatYearView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatYearView, selector: \"mat-year-view\", inputs: { activeDate: \"activeDate\", selected: \"selected\", minDate: \"minDate\", maxDate: \"maxDate\", dateFilter: \"dateFilter\", dateClass: \"dateClass\" }, outputs: { selectedChange: \"selectedChange\", monthSelected: \"monthSelected\", activeDateChange: \"activeDateChange\" }, viewQueries: [{ propertyName: \"_matCalendarBody\", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: [\"matYearView\"], ngImport: i0, template: \"\\n \\n \\n \\n \\n \\n
\\n\", dependencies: [{ kind: \"component\", type: MatCalendarBody, selector: \"[mat-calendar-body]\", inputs: [\"label\", \"rows\", \"todayValue\", \"startValue\", \"endValue\", \"labelMinRequiredCells\", \"numCols\", \"activeCell\", \"isRange\", \"cellAspectRatio\", \"comparisonStart\", \"comparisonEnd\", \"previewStart\", \"previewEnd\", \"startDateAccessibleName\", \"endDateAccessibleName\"], outputs: [\"selectedValueChange\", \"previewChange\", \"activeDateChange\", \"dragStarted\", \"dragEnded\"], exportAs: [\"matCalendarBody\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatYearView, decorators: [{\n type: Component,\n args: [{ selector: 'mat-year-view', exportAs: 'matYearView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n \\n \\n \\n \\n \\n
\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }, { type: i1$1.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: i2.Directionality, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { activeDate: [{\n type: Input\n }], selected: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], dateClass: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], monthSelected: [{\n type: Output\n }], activeDateChange: [{\n type: Output\n }], _matCalendarBody: [{\n type: ViewChild,\n args: [MatCalendarBody]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet calendarHeaderId = 1;\n/** Default header for MatCalendar */\nclass MatCalendarHeader {\n constructor(_intl, calendar, _dateAdapter, _dateFormats, changeDetectorRef) {\n this._intl = _intl;\n this.calendar = calendar;\n this._dateAdapter = _dateAdapter;\n this._dateFormats = _dateFormats;\n this._id = `mat-calendar-header-${calendarHeaderId++}`;\n this._periodButtonLabelId = `${this._id}-period-label`;\n this.calendar.stateChanges.subscribe(() => changeDetectorRef.markForCheck());\n }\n /** The display text for the current calendar view. */\n get periodButtonText() {\n if (this.calendar.currentView == 'month') {\n return this._dateAdapter\n .format(this.calendar.activeDate, this._dateFormats.display.monthYearLabel)\n .toLocaleUpperCase();\n }\n if (this.calendar.currentView == 'year') {\n return this._dateAdapter.getYearName(this.calendar.activeDate);\n }\n return this._intl.formatYearRange(...this._formatMinAndMaxYearLabels());\n }\n /** The aria description for the current calendar view. */\n get periodButtonDescription() {\n if (this.calendar.currentView == 'month') {\n return this._dateAdapter\n .format(this.calendar.activeDate, this._dateFormats.display.monthYearLabel)\n .toLocaleUpperCase();\n }\n if (this.calendar.currentView == 'year') {\n return this._dateAdapter.getYearName(this.calendar.activeDate);\n }\n // Format a label for the window of years displayed in the multi-year calendar view. Use\n // `formatYearRangeLabel` because it is TTS friendly.\n return this._intl.formatYearRangeLabel(...this._formatMinAndMaxYearLabels());\n }\n /** The `aria-label` for changing the calendar view. */\n get periodButtonLabel() {\n return this.calendar.currentView == 'month'\n ? this._intl.switchToMultiYearViewLabel\n : this._intl.switchToMonthViewLabel;\n }\n /** The label for the previous button. */\n get prevButtonLabel() {\n return {\n 'month': this._intl.prevMonthLabel,\n 'year': this._intl.prevYearLabel,\n 'multi-year': this._intl.prevMultiYearLabel,\n }[this.calendar.currentView];\n }\n /** The label for the next button. */\n get nextButtonLabel() {\n return {\n 'month': this._intl.nextMonthLabel,\n 'year': this._intl.nextYearLabel,\n 'multi-year': this._intl.nextMultiYearLabel,\n }[this.calendar.currentView];\n }\n /** Handles user clicks on the period label. */\n currentPeriodClicked() {\n this.calendar.currentView = this.calendar.currentView == 'month' ? 'multi-year' : 'month';\n }\n /** Handles user clicks on the previous button. */\n previousClicked() {\n this.calendar.activeDate =\n this.calendar.currentView == 'month'\n ? this._dateAdapter.addCalendarMonths(this.calendar.activeDate, -1)\n : this._dateAdapter.addCalendarYears(this.calendar.activeDate, this.calendar.currentView == 'year' ? -1 : -yearsPerPage);\n }\n /** Handles user clicks on the next button. */\n nextClicked() {\n this.calendar.activeDate =\n this.calendar.currentView == 'month'\n ? this._dateAdapter.addCalendarMonths(this.calendar.activeDate, 1)\n : this._dateAdapter.addCalendarYears(this.calendar.activeDate, this.calendar.currentView == 'year' ? 1 : yearsPerPage);\n }\n /** Whether the previous period button is enabled. */\n previousEnabled() {\n if (!this.calendar.minDate) {\n return true;\n }\n return (!this.calendar.minDate || !this._isSameView(this.calendar.activeDate, this.calendar.minDate));\n }\n /** Whether the next period button is enabled. */\n nextEnabled() {\n return (!this.calendar.maxDate || !this._isSameView(this.calendar.activeDate, this.calendar.maxDate));\n }\n /** Whether the two dates represent the same view in the current view mode (month or year). */\n _isSameView(date1, date2) {\n if (this.calendar.currentView == 'month') {\n return (this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2) &&\n this._dateAdapter.getMonth(date1) == this._dateAdapter.getMonth(date2));\n }\n if (this.calendar.currentView == 'year') {\n return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2);\n }\n // Otherwise we are in 'multi-year' view.\n return isSameMultiYearView(this._dateAdapter, date1, date2, this.calendar.minDate, this.calendar.maxDate);\n }\n /**\n * Format two individual labels for the minimum year and maximum year available in the multi-year\n * calendar view. Returns an array of two strings where the first string is the formatted label\n * for the minimum year, and the second string is the formatted label for the maximum year.\n */\n _formatMinAndMaxYearLabels() {\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view, and the last year is\n // just yearsPerPage - 1 away.\n const activeYear = this._dateAdapter.getYear(this.calendar.activeDate);\n const minYearOfPage = activeYear -\n getActiveOffset(this._dateAdapter, this.calendar.activeDate, this.calendar.minDate, this.calendar.maxDate);\n const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\n const minYearLabel = this._dateAdapter.getYearName(this._dateAdapter.createDate(minYearOfPage, 0, 1));\n const maxYearLabel = this._dateAdapter.getYearName(this._dateAdapter.createDate(maxYearOfPage, 0, 1));\n return [minYearLabel, maxYearLabel];\n }\n}\nMatCalendarHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatCalendarHeader, deps: [{ token: MatDatepickerIntl }, { token: forwardRef(() => MatCalendar) }, { token: i1$1.DateAdapter, optional: true }, { token: MAT_DATE_FORMATS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nMatCalendarHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatCalendarHeader, selector: \"mat-calendar-header\", exportAs: [\"matCalendarHeader\"], ngImport: i0, template: \"
\\n
\\n \\n\\n
\\n\\n \\n\\n \\n\\n \\n
\\n
\\n\\n\", dependencies: [{ kind: \"component\", type: i3.MatButton, selector: \" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] \", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"component\", type: i3.MatIconButton, selector: \"button[mat-icon-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatCalendarHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-calendar-header', exportAs: 'matCalendarHeader', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"
\\n
\\n \\n\\n
\\n\\n \\n\\n \\n\\n \\n
\\n
\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: MatDatepickerIntl }, { type: MatCalendar, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatCalendar)]\n }] }, { type: i1$1.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }, { type: i0.ChangeDetectorRef }]; } });\n/** A calendar that is used as part of the datepicker. */\nclass MatCalendar {\n /** A date representing the period (month or year) to start the calendar in. */\n get startAt() {\n return this._startAt;\n }\n set startAt(value) {\n this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The currently selected date. */\n get selected() {\n return this._selected;\n }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n }\n else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n }\n /** The minimum selectable date. */\n get minDate() {\n return this._minDate;\n }\n set minDate(value) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() {\n return this._maxDate;\n }\n set maxDate(value) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /**\n * The current active date. This determines which time period is shown and which date is\n * highlighted when using keyboard navigation.\n */\n get activeDate() {\n return this._clampedActiveDate;\n }\n set activeDate(value) {\n this._clampedActiveDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\n this.stateChanges.next();\n this._changeDetectorRef.markForCheck();\n }\n /** Whether the calendar is in month view. */\n get currentView() {\n return this._currentView;\n }\n set currentView(value) {\n const viewChangedResult = this._currentView !== value ? value : null;\n this._currentView = value;\n this._moveFocusOnNextTick = true;\n this._changeDetectorRef.markForCheck();\n if (viewChangedResult) {\n this.viewChanged.emit(viewChangedResult);\n }\n }\n constructor(_intl, _dateAdapter, _dateFormats, _changeDetectorRef) {\n this._dateAdapter = _dateAdapter;\n this._dateFormats = _dateFormats;\n this._changeDetectorRef = _changeDetectorRef;\n /**\n * Used for scheduling that focus should be moved to the active cell on the next tick.\n * We need to schedule it, rather than do it immediately, because we have to wait\n * for Angular to re-evaluate the view children.\n */\n this._moveFocusOnNextTick = false;\n /** Whether the calendar should be started in month or year view. */\n this.startView = 'month';\n /** Emits when the currently selected date changes. */\n this.selectedChange = new EventEmitter();\n /**\n * Emits the year chosen in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n this.yearSelected = new EventEmitter();\n /**\n * Emits the month chosen in year view.\n * This doesn't imply a change on the selected date.\n */\n this.monthSelected = new EventEmitter();\n /**\n * Emits when the current view changes.\n */\n this.viewChanged = new EventEmitter(true);\n /** Emits when any date is selected. */\n this._userSelection = new EventEmitter();\n /** Emits a new date range value when the user completes a drag drop operation. */\n this._userDragDrop = new EventEmitter();\n /** Origin of active drag, or null when dragging is not active. */\n this._activeDrag = null;\n /**\n * Emits whenever there is a state change that the header may need to respond to.\n */\n this.stateChanges = new Subject();\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n }\n this._intlChanges = _intl.changes.subscribe(() => {\n _changeDetectorRef.markForCheck();\n this.stateChanges.next();\n });\n }\n ngAfterContentInit() {\n this._calendarHeaderPortal = new ComponentPortal(this.headerComponent || MatCalendarHeader);\n this.activeDate = this.startAt || this._dateAdapter.today();\n // Assign to the private property since we don't want to move focus on init.\n this._currentView = this.startView;\n }\n ngAfterViewChecked() {\n if (this._moveFocusOnNextTick) {\n this._moveFocusOnNextTick = false;\n this.focusActiveCell();\n }\n }\n ngOnDestroy() {\n this._intlChanges.unsubscribe();\n this.stateChanges.complete();\n }\n ngOnChanges(changes) {\n // Ignore date changes that are at a different time on the same day. This fixes issues where\n // the calendar re-renders when there is no meaningful change to [minDate] or [maxDate]\n // (#24435).\n const minDateChange = changes['minDate'] &&\n !this._dateAdapter.sameDate(changes['minDate'].previousValue, changes['minDate'].currentValue)\n ? changes['minDate']\n : undefined;\n const maxDateChange = changes['maxDate'] &&\n !this._dateAdapter.sameDate(changes['maxDate'].previousValue, changes['maxDate'].currentValue)\n ? changes['maxDate']\n : undefined;\n const change = minDateChange || maxDateChange || changes['dateFilter'];\n if (change && !change.firstChange) {\n const view = this._getCurrentViewComponent();\n if (view) {\n // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n // passed down to the view via data bindings which won't be up-to-date when we call `_init`.\n this._changeDetectorRef.detectChanges();\n view._init();\n }\n }\n this.stateChanges.next();\n }\n /** Focuses the active date. */\n focusActiveCell() {\n this._getCurrentViewComponent()._focusActiveCell(false);\n }\n /** Updates today's date after an update of the active date */\n updateTodaysDate() {\n this._getCurrentViewComponent()._init();\n }\n /** Handles date selection in the month view. */\n _dateSelected(event) {\n const date = event.value;\n if (this.selected instanceof DateRange ||\n (date && !this._dateAdapter.sameDate(date, this.selected))) {\n this.selectedChange.emit(date);\n }\n this._userSelection.emit(event);\n }\n /** Handles year selection in the multiyear view. */\n _yearSelectedInMultiYearView(normalizedYear) {\n this.yearSelected.emit(normalizedYear);\n }\n /** Handles month selection in the year view. */\n _monthSelectedInYearView(normalizedMonth) {\n this.monthSelected.emit(normalizedMonth);\n }\n /** Handles year/month selection in the multi-year/year views. */\n _goToDateInView(date, view) {\n this.activeDate = date;\n this.currentView = view;\n }\n /** Called when the user starts dragging to change a date range. */\n _dragStarted(event) {\n this._activeDrag = event;\n }\n /**\n * Called when a drag completes. It may end in cancelation or in the selection\n * of a new range.\n */\n _dragEnded(event) {\n if (!this._activeDrag)\n return;\n if (event.value) {\n this._userDragDrop.emit(event);\n }\n this._activeDrag = null;\n }\n /** Returns the component instance that corresponds to the current calendar view. */\n _getCurrentViewComponent() {\n // The return type is explicitly written as a union to ensure that the Closure compiler does\n // not optimize calls to _init(). Without the explicit return type, TypeScript narrows it to\n // only the first component type. See https://github.com/angular/components/issues/22996.\n return this.monthView || this.yearView || this.multiYearView;\n }\n}\nMatCalendar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatCalendar, deps: [{ token: MatDatepickerIntl }, { token: i1$1.DateAdapter, optional: true }, { token: MAT_DATE_FORMATS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nMatCalendar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatCalendar, selector: \"mat-calendar\", inputs: { headerComponent: \"headerComponent\", startAt: \"startAt\", startView: \"startView\", selected: \"selected\", minDate: \"minDate\", maxDate: \"maxDate\", dateFilter: \"dateFilter\", dateClass: \"dateClass\", comparisonStart: \"comparisonStart\", comparisonEnd: \"comparisonEnd\", startDateAccessibleName: \"startDateAccessibleName\", endDateAccessibleName: \"endDateAccessibleName\" }, outputs: { selectedChange: \"selectedChange\", yearSelected: \"yearSelected\", monthSelected: \"monthSelected\", viewChanged: \"viewChanged\", _userSelection: \"_userSelection\", _userDragDrop: \"_userDragDrop\" }, host: { classAttribute: \"mat-calendar\" }, providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER], viewQueries: [{ propertyName: \"monthView\", first: true, predicate: MatMonthView, descendants: true }, { propertyName: \"yearView\", first: true, predicate: MatYearView, descendants: true }, { propertyName: \"multiYearView\", first: true, predicate: MatMultiYearView, descendants: true }], exportAs: [\"matCalendar\"], usesOnChanges: true, ngImport: i0, template: \"\\n\\n
\\n \\n \\n\\n \\n \\n\\n \\n \\n
\\n\", styles: [\".mat-calendar{display:block}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;align-items:center;margin:5% calc(4.7142857143% - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0;margin:0 8px}.mat-calendar-arrow{display:inline-block;width:10px;height:5px;margin:0 0 0 5px;vertical-align:middle}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}.cdk-high-contrast-active .mat-calendar-arrow{fill:CanvasText}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\\\"\\\";position:absolute;top:0;left:-8px;right:-8px;height:1px}.mat-calendar-body-cell-content::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px) * -1)}.mat-calendar-body-cell:focus .mat-focus-indicator::before{content:\\\"\\\"}.mat-calendar-hidden-label{display:none}\"], dependencies: [{ kind: \"directive\", type: i1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i5.CdkMonitorFocus, selector: \"[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]\", outputs: [\"cdkFocusChange\"], exportAs: [\"cdkMonitorFocus\"] }, { kind: \"directive\", type: i6.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }, { kind: \"component\", type: MatMonthView, selector: \"mat-month-view\", inputs: [\"activeDate\", \"selected\", \"minDate\", \"maxDate\", \"dateFilter\", \"dateClass\", \"comparisonStart\", \"comparisonEnd\", \"startDateAccessibleName\", \"endDateAccessibleName\", \"activeDrag\"], outputs: [\"selectedChange\", \"_userSelection\", \"dragStarted\", \"dragEnded\", \"activeDateChange\"], exportAs: [\"matMonthView\"] }, { kind: \"component\", type: MatYearView, selector: \"mat-year-view\", inputs: [\"activeDate\", \"selected\", \"minDate\", \"maxDate\", \"dateFilter\", \"dateClass\"], outputs: [\"selectedChange\", \"monthSelected\", \"activeDateChange\"], exportAs: [\"matYearView\"] }, { kind: \"component\", type: MatMultiYearView, selector: \"mat-multi-year-view\", inputs: [\"activeDate\", \"selected\", \"minDate\", \"maxDate\", \"dateFilter\", \"dateClass\"], outputs: [\"selectedChange\", \"yearSelected\", \"activeDateChange\"], exportAs: [\"matMultiYearView\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatCalendar, decorators: [{\n type: Component,\n args: [{ selector: 'mat-calendar', host: {\n 'class': 'mat-calendar',\n }, exportAs: 'matCalendar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER], template: \"\\n\\n
\\n \\n \\n\\n \\n \\n\\n \\n \\n
\\n\", styles: [\".mat-calendar{display:block}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;align-items:center;margin:5% calc(4.7142857143% - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0;margin:0 8px}.mat-calendar-arrow{display:inline-block;width:10px;height:5px;margin:0 0 0 5px;vertical-align:middle}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}.cdk-high-contrast-active .mat-calendar-arrow{fill:CanvasText}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\\\"\\\";position:absolute;top:0;left:-8px;right:-8px;height:1px}.mat-calendar-body-cell-content::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px) * -1)}.mat-calendar-body-cell:focus .mat-focus-indicator::before{content:\\\"\\\"}.mat-calendar-hidden-label{display:none}\"] }]\n }], ctorParameters: function () { return [{ type: MatDatepickerIntl }, { type: i1$1.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { headerComponent: [{\n type: Input\n }], startAt: [{\n type: Input\n }], startView: [{\n type: Input\n }], selected: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], dateClass: [{\n type: Input\n }], comparisonStart: [{\n type: Input\n }], comparisonEnd: [{\n type: Input\n }], startDateAccessibleName: [{\n type: Input\n }], endDateAccessibleName: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], yearSelected: [{\n type: Output\n }], monthSelected: [{\n type: Output\n }], viewChanged: [{\n type: Output\n }], _userSelection: [{\n type: Output\n }], _userDragDrop: [{\n type: Output\n }], monthView: [{\n type: ViewChild,\n args: [MatMonthView]\n }], yearView: [{\n type: ViewChild,\n args: [MatYearView]\n }], multiYearView: [{\n type: ViewChild,\n args: [MatMultiYearView]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material datepicker.\n * @docs-private\n */\nconst matDatepickerAnimations = {\n /** Transforms the height of the datepicker's calendar. */\n transformPanel: trigger('transformPanel', [\n transition('void => enter-dropdown', animate('120ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\n style({ opacity: 0, transform: 'scale(1, 0.8)' }),\n style({ opacity: 1, transform: 'scale(1, 1)' }),\n ]))),\n transition('void => enter-dialog', animate('150ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\n style({ opacity: 0, transform: 'scale(0.7)' }),\n style({ transform: 'none', opacity: 1 }),\n ]))),\n transition('* => void', animate('100ms linear', style({ opacity: 0 }))),\n ]),\n /** Fades in the content of the calendar. */\n fadeInCalendar: trigger('fadeInCalendar', [\n state('void', style({ opacity: 0 })),\n state('enter', style({ opacity: 1 })),\n // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\n // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')),\n ]),\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate a unique ID for each datepicker instance. */\nlet datepickerUid = 0;\n/** Injection token that determines the scroll handling while the calendar is open. */\nconst MAT_DATEPICKER_SCROLL_STRATEGY = new InjectionToken('mat-datepicker-scroll-strategy');\n/** @docs-private */\nfunction MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_DATEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n// Boilerplate for applying mixins to MatDatepickerContent.\n/** @docs-private */\nconst _MatDatepickerContentBase = mixinColor(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n});\n/**\n * Component used as the content for the datepicker overlay. We use this instead of using\n * MatCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the overlay that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\nclass MatDatepickerContent extends _MatDatepickerContentBase {\n constructor(elementRef, _changeDetectorRef, _globalModel, _dateAdapter, _rangeSelectionStrategy, intl) {\n super(elementRef);\n this._changeDetectorRef = _changeDetectorRef;\n this._globalModel = _globalModel;\n this._dateAdapter = _dateAdapter;\n this._rangeSelectionStrategy = _rangeSelectionStrategy;\n this._subscriptions = new Subscription();\n /** Emits when an animation has finished. */\n this._animationDone = new Subject();\n /** Whether there is an in-progress animation. */\n this._isAnimating = false;\n /** Portal with projected action buttons. */\n this._actionsPortal = null;\n this._closeButtonText = intl.closeCalendarLabel;\n }\n ngOnInit() {\n this._animationState = this.datepicker.touchUi ? 'enter-dialog' : 'enter-dropdown';\n }\n ngAfterViewInit() {\n this._subscriptions.add(this.datepicker.stateChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n }));\n this._calendar.focusActiveCell();\n }\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n this._animationDone.complete();\n }\n _handleUserSelection(event) {\n const selection = this._model.selection;\n const value = event.value;\n const isRange = selection instanceof DateRange;\n // If we're selecting a range and we have a selection strategy, always pass the value through\n // there. Otherwise don't assign null values to the model, unless we're selecting a range.\n // A null value when picking a range means that the user cancelled the selection (e.g. by\n // pressing escape), whereas when selecting a single value it means that the value didn't\n // change. This isn't very intuitive, but it's here for backwards-compatibility.\n if (isRange && this._rangeSelectionStrategy) {\n const newSelection = this._rangeSelectionStrategy.selectionFinished(value, selection, event.event);\n this._model.updateSelection(newSelection, this);\n }\n else if (value &&\n (isRange || !this._dateAdapter.sameDate(value, selection))) {\n this._model.add(value);\n }\n // Delegate closing the overlay to the actions.\n if ((!this._model || this._model.isComplete()) && !this._actionsPortal) {\n this.datepicker.close();\n }\n }\n _handleUserDragDrop(event) {\n this._model.updateSelection(event.value, this);\n }\n _startExitAnimation() {\n this._animationState = 'void';\n this._changeDetectorRef.markForCheck();\n }\n _handleAnimationEvent(event) {\n this._isAnimating = event.phaseName === 'start';\n if (!this._isAnimating) {\n this._animationDone.next();\n }\n }\n _getSelected() {\n return this._model.selection;\n }\n /** Applies the current pending selection to the global model. */\n _applyPendingSelection() {\n if (this._model !== this._globalModel) {\n this._globalModel.updateSelection(this._model.selection, this);\n }\n }\n /**\n * Assigns a new portal containing the datepicker actions.\n * @param portal Portal with the actions to be assigned.\n * @param forceRerender Whether a re-render of the portal should be triggered. This isn't\n * necessary if the portal is assigned during initialization, but it may be required if it's\n * added at a later point.\n */\n _assignActions(portal, forceRerender) {\n // If we have actions, clone the model so that we have the ability to cancel the selection,\n // otherwise update the global model directly. Note that we want to assign this as soon as\n // possible, but `_actionsPortal` isn't available in the constructor so we do it in `ngOnInit`.\n this._model = portal ? this._globalModel.clone() : this._globalModel;\n this._actionsPortal = portal;\n if (forceRerender) {\n this._changeDetectorRef.detectChanges();\n }\n }\n}\nMatDatepickerContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerContent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: MatDateSelectionModel }, { token: i1$1.DateAdapter }, { token: MAT_DATE_RANGE_SELECTION_STRATEGY, optional: true }, { token: MatDatepickerIntl }], target: i0.ɵɵFactoryTarget.Component });\nMatDatepickerContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatDatepickerContent, selector: \"mat-datepicker-content\", inputs: { color: \"color\" }, host: { listeners: { \"@transformPanel.start\": \"_handleAnimationEvent($event)\", \"@transformPanel.done\": \"_handleAnimationEvent($event)\" }, properties: { \"@transformPanel\": \"_animationState\", \"class.mat-datepicker-content-touch\": \"datepicker.touchUi\" }, classAttribute: \"mat-datepicker-content\" }, viewQueries: [{ propertyName: \"_calendar\", first: true, predicate: MatCalendar, descendants: true }], exportAs: [\"matDatepickerContent\"], usesInheritance: true, ngImport: i0, template: \"\\n \\n\\n \\n\\n \\n {{ _closeButtonText }}\\n\\n\", styles: [\".mat-datepicker-content{display:block;border-radius:4px}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content .mat-datepicker-content-container-with-custom-header .mat-calendar{height:auto}.mat-datepicker-content .mat-datepicker-close-button{position:absolute;top:100%;left:0;margin-top:8px}.ng-animating .mat-datepicker-content .mat-datepicker-close-button{display:none}.mat-datepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.mat-datepicker-content-touch{display:block;max-height:80vh;position:relative;overflow:visible}.mat-datepicker-content-touch .mat-datepicker-content-container{min-height:312px;max-height:788px;min-width:250px;max-width:750px}.mat-datepicker-content-touch .mat-calendar{width:100%;height:auto}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-datepicker-content-container{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-datepicker-content-container{width:80vw;height:100vw}.mat-datepicker-content-touch .mat-datepicker-content-container-with-actions{height:115vw}}\"], dependencies: [{ kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: i3.MatButton, selector: \" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] \", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"directive\", type: i5.CdkTrapFocus, selector: \"[cdkTrapFocus]\", inputs: [\"cdkTrapFocus\", \"cdkTrapFocusAutoCapture\"], exportAs: [\"cdkTrapFocus\"] }, { kind: \"directive\", type: i6.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }, { kind: \"component\", type: MatCalendar, selector: \"mat-calendar\", inputs: [\"headerComponent\", \"startAt\", \"startView\", \"selected\", \"minDate\", \"maxDate\", \"dateFilter\", \"dateClass\", \"comparisonStart\", \"comparisonEnd\", \"startDateAccessibleName\", \"endDateAccessibleName\"], outputs: [\"selectedChange\", \"yearSelected\", \"monthSelected\", \"viewChanged\", \"_userSelection\", \"_userDragDrop\"], exportAs: [\"matCalendar\"] }], animations: [matDatepickerAnimations.transformPanel, matDatepickerAnimations.fadeInCalendar], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerContent, decorators: [{\n type: Component,\n args: [{ selector: 'mat-datepicker-content', host: {\n 'class': 'mat-datepicker-content',\n '[@transformPanel]': '_animationState',\n '(@transformPanel.start)': '_handleAnimationEvent($event)',\n '(@transformPanel.done)': '_handleAnimationEvent($event)',\n '[class.mat-datepicker-content-touch]': 'datepicker.touchUi',\n }, animations: [matDatepickerAnimations.transformPanel, matDatepickerAnimations.fadeInCalendar], exportAs: 'matDatepickerContent', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['color'], template: \"\\n \\n\\n \\n\\n \\n {{ _closeButtonText }}\\n\\n\", styles: [\".mat-datepicker-content{display:block;border-radius:4px}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content .mat-datepicker-content-container-with-custom-header .mat-calendar{height:auto}.mat-datepicker-content .mat-datepicker-close-button{position:absolute;top:100%;left:0;margin-top:8px}.ng-animating .mat-datepicker-content .mat-datepicker-close-button{display:none}.mat-datepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.mat-datepicker-content-touch{display:block;max-height:80vh;position:relative;overflow:visible}.mat-datepicker-content-touch .mat-datepicker-content-container{min-height:312px;max-height:788px;min-width:250px;max-width:750px}.mat-datepicker-content-touch .mat-calendar{width:100%;height:auto}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-datepicker-content-container{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-datepicker-content-container{width:80vw;height:100vw}.mat-datepicker-content-touch .mat-datepicker-content-container-with-actions{height:115vw}}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: MatDateSelectionModel }, { type: i1$1.DateAdapter }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_RANGE_SELECTION_STRATEGY]\n }] }, { type: MatDatepickerIntl }]; }, propDecorators: { _calendar: [{\n type: ViewChild,\n args: [MatCalendar]\n }] } });\n/** Base class for a datepicker. */\nclass MatDatepickerBase {\n /** The date to open the calendar to initially. */\n get startAt() {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n return this._startAt || (this.datepickerInput ? this.datepickerInput.getStartValue() : null);\n }\n set startAt(value) {\n this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** Color palette to use on the datepicker's calendar. */\n get color() {\n return (this._color || (this.datepickerInput ? this.datepickerInput.getThemePalette() : undefined));\n }\n set color(value) {\n this._color = value;\n }\n /**\n * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n * than a dropdown and elements have more padding to allow for bigger touch targets.\n */\n get touchUi() {\n return this._touchUi;\n }\n set touchUi(value) {\n this._touchUi = coerceBooleanProperty(value);\n }\n /** Whether the datepicker pop-up should be disabled. */\n get disabled() {\n return this._disabled === undefined && this.datepickerInput\n ? this.datepickerInput.disabled\n : !!this._disabled;\n }\n set disabled(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this.stateChanges.next(undefined);\n }\n }\n /**\n * Whether to restore focus to the previously-focused element when the calendar is closed.\n * Note that automatic focus restoration is an accessibility feature and it is recommended that\n * you provide your own equivalent, if you decide to turn it off.\n */\n get restoreFocus() {\n return this._restoreFocus;\n }\n set restoreFocus(value) {\n this._restoreFocus = coerceBooleanProperty(value);\n }\n /**\n * Classes to be passed to the date picker panel.\n * Supports string and string array values, similar to `ngClass`.\n */\n get panelClass() {\n return this._panelClass;\n }\n set panelClass(value) {\n this._panelClass = coerceStringArray(value);\n }\n /** Whether the calendar is open. */\n get opened() {\n return this._opened;\n }\n set opened(value) {\n coerceBooleanProperty(value) ? this.open() : this.close();\n }\n /** The minimum selectable date. */\n _getMinDate() {\n return this.datepickerInput && this.datepickerInput.min;\n }\n /** The maximum selectable date. */\n _getMaxDate() {\n return this.datepickerInput && this.datepickerInput.max;\n }\n _getDateFilter() {\n return this.datepickerInput && this.datepickerInput.dateFilter;\n }\n constructor(_overlay, _ngZone, _viewContainerRef, scrollStrategy, _dateAdapter, _dir, _model) {\n this._overlay = _overlay;\n this._ngZone = _ngZone;\n this._viewContainerRef = _viewContainerRef;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._model = _model;\n this._inputStateChanges = Subscription.EMPTY;\n this._document = inject(DOCUMENT);\n /** The view that the calendar should start in. */\n this.startView = 'month';\n this._touchUi = false;\n /** Preferred position of the datepicker in the X axis. */\n this.xPosition = 'start';\n /** Preferred position of the datepicker in the Y axis. */\n this.yPosition = 'below';\n this._restoreFocus = true;\n /**\n * Emits selected year in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n this.yearSelected = new EventEmitter();\n /**\n * Emits selected month in year view.\n * This doesn't imply a change on the selected date.\n */\n this.monthSelected = new EventEmitter();\n /**\n * Emits when the current view changes.\n */\n this.viewChanged = new EventEmitter(true);\n /** Emits when the datepicker has been opened. */\n this.openedStream = new EventEmitter();\n /** Emits when the datepicker has been closed. */\n this.closedStream = new EventEmitter();\n this._opened = false;\n /** The id for the datepicker calendar. */\n this.id = `mat-datepicker-${datepickerUid++}`;\n /** The element that was focused before the datepicker was opened. */\n this._focusedElementBeforeOpen = null;\n /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */\n this._backdropHarnessClass = `${this.id}-backdrop`;\n /** Emits when the datepicker's state changes. */\n this.stateChanges = new Subject();\n if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw createMissingDateImplError('DateAdapter');\n }\n this._scrollStrategy = scrollStrategy;\n }\n ngOnChanges(changes) {\n const positionChange = changes['xPosition'] || changes['yPosition'];\n if (positionChange && !positionChange.firstChange && this._overlayRef) {\n const positionStrategy = this._overlayRef.getConfig().positionStrategy;\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n this._setConnectedPositions(positionStrategy);\n if (this.opened) {\n this._overlayRef.updatePosition();\n }\n }\n }\n this.stateChanges.next(undefined);\n }\n ngOnDestroy() {\n this._destroyOverlay();\n this.close();\n this._inputStateChanges.unsubscribe();\n this.stateChanges.complete();\n }\n /** Selects the given date */\n select(date) {\n this._model.add(date);\n }\n /** Emits the selected year in multiyear view */\n _selectYear(normalizedYear) {\n this.yearSelected.emit(normalizedYear);\n }\n /** Emits selected month in year view */\n _selectMonth(normalizedMonth) {\n this.monthSelected.emit(normalizedMonth);\n }\n /** Emits changed view */\n _viewChanged(view) {\n this.viewChanged.emit(view);\n }\n /**\n * Register an input with this datepicker.\n * @param input The datepicker input to register with this datepicker.\n * @returns Selection model that the input should hook itself up to.\n */\n registerInput(input) {\n if (this.datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('A MatDatepicker can only be associated with a single input.');\n }\n this._inputStateChanges.unsubscribe();\n this.datepickerInput = input;\n this._inputStateChanges = input.stateChanges.subscribe(() => this.stateChanges.next(undefined));\n return this._model;\n }\n /**\n * Registers a portal containing action buttons with the datepicker.\n * @param portal Portal to be registered.\n */\n registerActions(portal) {\n if (this._actionsPortal && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('A MatDatepicker can only be associated with a single actions row.');\n }\n this._actionsPortal = portal;\n this._componentRef?.instance._assignActions(portal, true);\n }\n /**\n * Removes a portal containing action buttons from the datepicker.\n * @param portal Portal to be removed.\n */\n removeActions(portal) {\n if (portal === this._actionsPortal) {\n this._actionsPortal = null;\n this._componentRef?.instance._assignActions(null, true);\n }\n }\n /** Open the calendar. */\n open() {\n // Skip reopening if there's an in-progress animation to avoid overlapping\n // sequences which can cause \"changed after checked\" errors. See #25837.\n if (this._opened || this.disabled || this._componentRef?.instance._isAnimating) {\n return;\n }\n if (!this.datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Attempted to open an MatDatepicker with no associated input.');\n }\n this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n this._openOverlay();\n this._opened = true;\n this.openedStream.emit();\n }\n /** Close the calendar. */\n close() {\n // Skip reopening if there's an in-progress animation to avoid overlapping\n // sequences which can cause \"changed after checked\" errors. See #25837.\n if (!this._opened || this._componentRef?.instance._isAnimating) {\n return;\n }\n const canRestoreFocus = this._restoreFocus &&\n this._focusedElementBeforeOpen &&\n typeof this._focusedElementBeforeOpen.focus === 'function';\n const completeClose = () => {\n // The `_opened` could've been reset already if\n // we got two events in quick succession.\n if (this._opened) {\n this._opened = false;\n this.closedStream.emit();\n }\n };\n if (this._componentRef) {\n const { instance, location } = this._componentRef;\n instance._startExitAnimation();\n instance._animationDone.pipe(take(1)).subscribe(() => {\n const activeElement = this._document.activeElement;\n // Since we restore focus after the exit animation, we have to check that\n // the user didn't move focus themselves inside the `close` handler.\n if (canRestoreFocus &&\n (!activeElement ||\n activeElement === this._document.activeElement ||\n location.nativeElement.contains(activeElement))) {\n this._focusedElementBeforeOpen.focus();\n }\n this._focusedElementBeforeOpen = null;\n this._destroyOverlay();\n });\n }\n if (canRestoreFocus) {\n // Because IE moves focus asynchronously, we can't count on it being restored before we've\n // marked the datepicker as closed. If the event fires out of sequence and the element that\n // we're refocusing opens the datepicker on focus, the user could be stuck with not being\n // able to close the calendar at all. We work around it by making the logic, that marks\n // the datepicker as closed, async as well.\n setTimeout(completeClose);\n }\n else {\n completeClose();\n }\n }\n /** Applies the current pending selection on the overlay to the model. */\n _applyPendingSelection() {\n this._componentRef?.instance?._applyPendingSelection();\n }\n /** Forwards relevant values from the datepicker to the datepicker content inside the overlay. */\n _forwardContentValues(instance) {\n instance.datepicker = this;\n instance.color = this.color;\n instance._dialogLabelId = this.datepickerInput.getOverlayLabelId();\n instance._assignActions(this._actionsPortal, false);\n }\n /** Opens the overlay with the calendar. */\n _openOverlay() {\n this._destroyOverlay();\n const isDialog = this.touchUi;\n const portal = new ComponentPortal(MatDatepickerContent, this._viewContainerRef);\n const overlayRef = (this._overlayRef = this._overlay.create(new OverlayConfig({\n positionStrategy: isDialog ? this._getDialogStrategy() : this._getDropdownStrategy(),\n hasBackdrop: true,\n backdropClass: [\n isDialog ? 'cdk-overlay-dark-backdrop' : 'mat-overlay-transparent-backdrop',\n this._backdropHarnessClass,\n ],\n direction: this._dir,\n scrollStrategy: isDialog ? this._overlay.scrollStrategies.block() : this._scrollStrategy(),\n panelClass: `mat-datepicker-${isDialog ? 'dialog' : 'popup'}`,\n })));\n this._getCloseStream(overlayRef).subscribe(event => {\n if (event) {\n event.preventDefault();\n }\n this.close();\n });\n // The `preventDefault` call happens inside the calendar as well, however focus moves into\n // it inside a timeout which can give browsers a chance to fire off a keyboard event in-between\n // that can scroll the page (see #24969). Always block default actions of arrow keys for the\n // entire overlay so the page doesn't get scrolled by accident.\n overlayRef.keydownEvents().subscribe(event => {\n const keyCode = event.keyCode;\n if (keyCode === UP_ARROW ||\n keyCode === DOWN_ARROW ||\n keyCode === LEFT_ARROW ||\n keyCode === RIGHT_ARROW ||\n keyCode === PAGE_UP ||\n keyCode === PAGE_DOWN) {\n event.preventDefault();\n }\n });\n this._componentRef = overlayRef.attach(portal);\n this._forwardContentValues(this._componentRef.instance);\n // Update the position once the calendar has rendered. Only relevant in dropdown mode.\n if (!isDialog) {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => overlayRef.updatePosition());\n }\n }\n /** Destroys the current overlay. */\n _destroyOverlay() {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = this._componentRef = null;\n }\n }\n /** Gets a position strategy that will open the calendar as a dropdown. */\n _getDialogStrategy() {\n return this._overlay.position().global().centerHorizontally().centerVertically();\n }\n /** Gets a position strategy that will open the calendar as a dropdown. */\n _getDropdownStrategy() {\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this.datepickerInput.getConnectedOverlayOrigin())\n .withTransformOriginOn('.mat-datepicker-content')\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withLockedPosition();\n return this._setConnectedPositions(strategy);\n }\n /** Sets the positions of the datepicker in dropdown mode based on the current configuration. */\n _setConnectedPositions(strategy) {\n const primaryX = this.xPosition === 'end' ? 'end' : 'start';\n const secondaryX = primaryX === 'start' ? 'end' : 'start';\n const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\n const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\n return strategy.withPositions([\n {\n originX: primaryX,\n originY: secondaryY,\n overlayX: primaryX,\n overlayY: primaryY,\n },\n {\n originX: primaryX,\n originY: primaryY,\n overlayX: primaryX,\n overlayY: secondaryY,\n },\n {\n originX: secondaryX,\n originY: secondaryY,\n overlayX: secondaryX,\n overlayY: primaryY,\n },\n {\n originX: secondaryX,\n originY: primaryY,\n overlayX: secondaryX,\n overlayY: secondaryY,\n },\n ]);\n }\n /** Gets an observable that will emit when the overlay is supposed to be closed. */\n _getCloseStream(overlayRef) {\n const ctrlShiftMetaModifiers = ['ctrlKey', 'shiftKey', 'metaKey'];\n return merge(overlayRef.backdropClick(), overlayRef.detachments(), overlayRef.keydownEvents().pipe(filter(event => {\n // Closing on alt + up is only valid when there's an input associated with the datepicker.\n return ((event.keyCode === ESCAPE && !hasModifierKey(event)) ||\n (this.datepickerInput &&\n hasModifierKey(event, 'altKey') &&\n event.keyCode === UP_ARROW &&\n ctrlShiftMetaModifiers.every((modifier) => !hasModifierKey(event, modifier))));\n })));\n }\n}\nMatDatepickerBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerBase, deps: [{ token: i9.Overlay }, { token: i0.NgZone }, { token: i0.ViewContainerRef }, { token: MAT_DATEPICKER_SCROLL_STRATEGY }, { token: i1$1.DateAdapter, optional: true }, { token: i2.Directionality, optional: true }, { token: MatDateSelectionModel }], target: i0.ɵɵFactoryTarget.Directive });\nMatDatepickerBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatDatepickerBase, inputs: { calendarHeaderComponent: \"calendarHeaderComponent\", startAt: \"startAt\", startView: \"startView\", color: \"color\", touchUi: \"touchUi\", disabled: \"disabled\", xPosition: \"xPosition\", yPosition: \"yPosition\", restoreFocus: \"restoreFocus\", dateClass: \"dateClass\", panelClass: \"panelClass\", opened: \"opened\" }, outputs: { yearSelected: \"yearSelected\", monthSelected: \"monthSelected\", viewChanged: \"viewChanged\", openedStream: \"opened\", closedStream: \"closed\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i9.Overlay }, { type: i0.NgZone }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DATEPICKER_SCROLL_STRATEGY]\n }] }, { type: i1$1.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: i2.Directionality, decorators: [{\n type: Optional\n }] }, { type: MatDateSelectionModel }]; }, propDecorators: { calendarHeaderComponent: [{\n type: Input\n }], startAt: [{\n type: Input\n }], startView: [{\n type: Input\n }], color: [{\n type: Input\n }], touchUi: [{\n type: Input\n }], disabled: [{\n type: Input\n }], xPosition: [{\n type: Input\n }], yPosition: [{\n type: Input\n }], restoreFocus: [{\n type: Input\n }], yearSelected: [{\n type: Output\n }], monthSelected: [{\n type: Output\n }], viewChanged: [{\n type: Output\n }], dateClass: [{\n type: Input\n }], openedStream: [{\n type: Output,\n args: ['opened']\n }], closedStream: [{\n type: Output,\n args: ['closed']\n }], panelClass: [{\n type: Input\n }], opened: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDatepicker\"). We can change this to a directive\n// if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the datepicker popup/dialog. */\nclass MatDatepicker extends MatDatepickerBase {\n}\nMatDatepicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepicker, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatDatepicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatDatepicker, selector: \"mat-datepicker\", providers: [\n MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,\n { provide: MatDatepickerBase, useExisting: MatDatepicker },\n ], exportAs: [\"matDatepicker\"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepicker, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-datepicker',\n template: '',\n exportAs: 'matDatepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,\n { provide: MatDatepickerBase, useExisting: MatDatepicker },\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.\n */\nclass MatDatepickerInputEvent {\n constructor(\n /** Reference to the datepicker input component that emitted the event. */\n target, \n /** Reference to the native input element associated with the datepicker input. */\n targetElement) {\n this.target = target;\n this.targetElement = targetElement;\n this.value = this.target.value;\n }\n}\n/** Base class for datepicker inputs. */\nclass MatDatepickerInputBase {\n /** The value of the input. */\n get value() {\n return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;\n }\n set value(value) {\n this._assignValueProgrammatically(value);\n }\n /** Whether the datepicker-input is disabled. */\n get disabled() {\n return !!this._disabled || this._parentDisabled();\n }\n set disabled(value) {\n const newValue = coerceBooleanProperty(value);\n const element = this._elementRef.nativeElement;\n if (this._disabled !== newValue) {\n this._disabled = newValue;\n this.stateChanges.next(undefined);\n }\n // We need to null check the `blur` method, because it's undefined during SSR.\n // In Ivy static bindings are invoked earlier, before the element is attached to the DOM.\n // This can cause an error to be thrown in some browsers (IE/Edge) which assert that the\n // element has been inserted.\n if (newValue && this._isInitialized && element.blur) {\n // Normally, native input elements automatically blur if they turn disabled. This behavior\n // is problematic, because it would mean that it triggers another change detection cycle,\n // which then causes a changed after checked error if the input element was focused before.\n element.blur();\n }\n }\n /** Gets the base validator functions. */\n _getValidators() {\n return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];\n }\n /** Registers a date selection model with the input. */\n _registerModel(model) {\n this._model = model;\n this._valueChangesSubscription.unsubscribe();\n if (this._pendingValue) {\n this._assignValue(this._pendingValue);\n }\n this._valueChangesSubscription = this._model.selectionChanged.subscribe(event => {\n if (this._shouldHandleChangeEvent(event)) {\n const value = this._getValueFromModel(event.selection);\n this._lastValueValid = this._isValidValue(value);\n this._cvaOnChange(value);\n this._onTouched();\n this._formatValue(value);\n this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n });\n }\n constructor(_elementRef, _dateAdapter, _dateFormats) {\n this._elementRef = _elementRef;\n this._dateAdapter = _dateAdapter;\n this._dateFormats = _dateFormats;\n /** Emits when a `change` event is fired on this ``. */\n this.dateChange = new EventEmitter();\n /** Emits when an `input` event is fired on this ``. */\n this.dateInput = new EventEmitter();\n /** Emits when the internal state has changed */\n this.stateChanges = new Subject();\n this._onTouched = () => { };\n this._validatorOnChange = () => { };\n this._cvaOnChange = () => { };\n this._valueChangesSubscription = Subscription.EMPTY;\n this._localeSubscription = Subscription.EMPTY;\n /** The form control validator for whether the input parses. */\n this._parseValidator = () => {\n return this._lastValueValid\n ? null\n : { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };\n };\n /** The form control validator for the date filter. */\n this._filterValidator = (control) => {\n const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n return !controlValue || this._matchesFilter(controlValue)\n ? null\n : { 'matDatepickerFilter': true };\n };\n /** The form control validator for the min date. */\n this._minValidator = (control) => {\n const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const min = this._getMinDate();\n return !min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0\n ? null\n : { 'matDatepickerMin': { 'min': min, 'actual': controlValue } };\n };\n /** The form control validator for the max date. */\n this._maxValidator = (control) => {\n const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const max = this._getMaxDate();\n return !max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0\n ? null\n : { 'matDatepickerMax': { 'max': max, 'actual': controlValue } };\n };\n /** Whether the last value set on the input was valid. */\n this._lastValueValid = false;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n }\n // Update the displayed date when the locale changes.\n this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n this._assignValueProgrammatically(this.value);\n });\n }\n ngAfterViewInit() {\n this._isInitialized = true;\n }\n ngOnChanges(changes) {\n if (dateInputsHaveChanged(changes, this._dateAdapter)) {\n this.stateChanges.next(undefined);\n }\n }\n ngOnDestroy() {\n this._valueChangesSubscription.unsubscribe();\n this._localeSubscription.unsubscribe();\n this.stateChanges.complete();\n }\n /** @docs-private */\n registerOnValidatorChange(fn) {\n this._validatorOnChange = fn;\n }\n /** @docs-private */\n validate(c) {\n return this._validator ? this._validator(c) : null;\n }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n this._assignValueProgrammatically(value);\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._cvaOnChange = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n _onKeydown(event) {\n const ctrlShiftMetaModifiers = ['ctrlKey', 'shiftKey', 'metaKey'];\n const isAltDownArrow = hasModifierKey(event, 'altKey') &&\n event.keyCode === DOWN_ARROW &&\n ctrlShiftMetaModifiers.every((modifier) => !hasModifierKey(event, modifier));\n if (isAltDownArrow && !this._elementRef.nativeElement.readOnly) {\n this._openPopup();\n event.preventDefault();\n }\n }\n _onInput(value) {\n const lastValueWasValid = this._lastValueValid;\n let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);\n this._lastValueValid = this._isValidValue(date);\n date = this._dateAdapter.getValidDateOrNull(date);\n const hasChanged = !this._dateAdapter.sameDate(date, this.value);\n // We need to fire the CVA change event for all\n // nulls, otherwise the validators won't run.\n if (!date || hasChanged) {\n this._cvaOnChange(date);\n }\n else {\n // Call the CVA change handler for invalid values\n // since this is what marks the control as dirty.\n if (value && !this.value) {\n this._cvaOnChange(date);\n }\n if (lastValueWasValid !== this._lastValueValid) {\n this._validatorOnChange();\n }\n }\n if (hasChanged) {\n this._assignValue(date);\n this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n }\n _onChange() {\n this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n /** Handles blur events on the input. */\n _onBlur() {\n // Reformat the input only if we have a valid value.\n if (this.value) {\n this._formatValue(this.value);\n }\n this._onTouched();\n }\n /** Formats a value and sets it on the input element. */\n _formatValue(value) {\n this._elementRef.nativeElement.value =\n value != null ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';\n }\n /** Assigns a value to the model. */\n _assignValue(value) {\n // We may get some incoming values before the model was\n // assigned. Save the value so that we can assign it later.\n if (this._model) {\n this._assignValueToModel(value);\n this._pendingValue = null;\n }\n else {\n this._pendingValue = value;\n }\n }\n /** Whether a value is considered valid. */\n _isValidValue(value) {\n return !value || this._dateAdapter.isValid(value);\n }\n /**\n * Checks whether a parent control is disabled. This is in place so that it can be overridden\n * by inputs extending this one which can be placed inside of a group that can be disabled.\n */\n _parentDisabled() {\n return false;\n }\n /** Programmatically assigns a value to the input. */\n _assignValueProgrammatically(value) {\n value = this._dateAdapter.deserialize(value);\n this._lastValueValid = this._isValidValue(value);\n value = this._dateAdapter.getValidDateOrNull(value);\n this._assignValue(value);\n this._formatValue(value);\n }\n /** Gets whether a value matches the current date filter. */\n _matchesFilter(value) {\n const filter = this._getDateFilter();\n return !filter || filter(value);\n }\n}\nMatDatepickerInputBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerInputBase, deps: [{ token: i0.ElementRef }, { token: i1$1.DateAdapter, optional: true }, { token: MAT_DATE_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatDatepickerInputBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatDatepickerInputBase, inputs: { value: \"value\", disabled: \"disabled\" }, outputs: { dateChange: \"dateChange\", dateInput: \"dateInput\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerInputBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$1.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }]; }, propDecorators: { value: [{\n type: Input\n }], disabled: [{\n type: Input\n }], dateChange: [{\n type: Output\n }], dateInput: [{\n type: Output\n }] } });\n/**\n * Checks whether the `SimpleChanges` object from an `ngOnChanges`\n * callback has any changes, accounting for date objects.\n */\nfunction dateInputsHaveChanged(changes, adapter) {\n const keys = Object.keys(changes);\n for (let key of keys) {\n const { previousValue, currentValue } = changes[key];\n if (adapter.isDateInstance(previousValue) && adapter.isDateInstance(currentValue)) {\n if (!adapter.sameDate(previousValue, currentValue)) {\n return true;\n }\n }\n else {\n return true;\n }\n }\n return false;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** @docs-private */\nconst MAT_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatDatepickerInput),\n multi: true,\n};\n/** @docs-private */\nconst MAT_DATEPICKER_VALIDATORS = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MatDatepickerInput),\n multi: true,\n};\n/** Directive used to connect an input to a MatDatepicker. */\nclass MatDatepickerInput extends MatDatepickerInputBase {\n /** The datepicker that this input is associated with. */\n set matDatepicker(datepicker) {\n if (datepicker) {\n this._datepicker = datepicker;\n this._closedSubscription = datepicker.closedStream.subscribe(() => this._onTouched());\n this._registerModel(datepicker.registerInput(this));\n }\n }\n /** The minimum valid date. */\n get min() {\n return this._min;\n }\n set min(value) {\n const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n if (!this._dateAdapter.sameDate(validValue, this._min)) {\n this._min = validValue;\n this._validatorOnChange();\n }\n }\n /** The maximum valid date. */\n get max() {\n return this._max;\n }\n set max(value) {\n const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n if (!this._dateAdapter.sameDate(validValue, this._max)) {\n this._max = validValue;\n this._validatorOnChange();\n }\n }\n /** Function that can be used to filter out dates within the datepicker. */\n get dateFilter() {\n return this._dateFilter;\n }\n set dateFilter(value) {\n const wasMatchingValue = this._matchesFilter(this.value);\n this._dateFilter = value;\n if (this._matchesFilter(this.value) !== wasMatchingValue) {\n this._validatorOnChange();\n }\n }\n constructor(elementRef, dateAdapter, dateFormats, _formField) {\n super(elementRef, dateAdapter, dateFormats);\n this._formField = _formField;\n this._closedSubscription = Subscription.EMPTY;\n this._validator = Validators.compose(super._getValidators());\n }\n /**\n * Gets the element that the datepicker popup should be connected to.\n * @return The element to connect the popup to.\n */\n getConnectedOverlayOrigin() {\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n }\n /** Gets the ID of an element that should be used a description for the calendar overlay. */\n getOverlayLabelId() {\n if (this._formField) {\n return this._formField.getLabelId();\n }\n return this._elementRef.nativeElement.getAttribute('aria-labelledby');\n }\n /** Returns the palette used by the input's form field, if any. */\n getThemePalette() {\n return this._formField ? this._formField.color : undefined;\n }\n /** Gets the value at which the calendar should start. */\n getStartValue() {\n return this.value;\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._closedSubscription.unsubscribe();\n }\n /** Opens the associated datepicker. */\n _openPopup() {\n if (this._datepicker) {\n this._datepicker.open();\n }\n }\n _getValueFromModel(modelValue) {\n return modelValue;\n }\n _assignValueToModel(value) {\n if (this._model) {\n this._model.updateSelection(value, this);\n }\n }\n /** Gets the input's minimum date. */\n _getMinDate() {\n return this._min;\n }\n /** Gets the input's maximum date. */\n _getMaxDate() {\n return this._max;\n }\n /** Gets the input's date filtering function. */\n _getDateFilter() {\n return this._dateFilter;\n }\n _shouldHandleChangeEvent(event) {\n return event.source !== this;\n }\n}\nMatDatepickerInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerInput, deps: [{ token: i0.ElementRef }, { token: i1$1.DateAdapter, optional: true }, { token: MAT_DATE_FORMATS, optional: true }, { token: MAT_FORM_FIELD, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatDatepickerInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatDatepickerInput, selector: \"input[matDatepicker]\", inputs: { matDatepicker: \"matDatepicker\", min: \"min\", max: \"max\", dateFilter: [\"matDatepickerFilter\", \"dateFilter\"] }, host: { listeners: { \"input\": \"_onInput($event.target.value)\", \"change\": \"_onChange()\", \"blur\": \"_onBlur()\", \"keydown\": \"_onKeydown($event)\" }, properties: { \"attr.aria-haspopup\": \"_datepicker ? \\\"dialog\\\" : null\", \"attr.aria-owns\": \"(_datepicker?.opened && _datepicker.id) || null\", \"attr.min\": \"min ? _dateAdapter.toIso8601(min) : null\", \"attr.max\": \"max ? _dateAdapter.toIso8601(max) : null\", \"attr.data-mat-calendar\": \"_datepicker ? _datepicker.id : null\", \"disabled\": \"disabled\" }, classAttribute: \"mat-datepicker-input\" }, providers: [\n MAT_DATEPICKER_VALUE_ACCESSOR,\n MAT_DATEPICKER_VALIDATORS,\n { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },\n ], exportAs: [\"matDatepickerInput\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerInput, decorators: [{\n type: Directive,\n args: [{\n selector: 'input[matDatepicker]',\n providers: [\n MAT_DATEPICKER_VALUE_ACCESSOR,\n MAT_DATEPICKER_VALIDATORS,\n { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },\n ],\n host: {\n 'class': 'mat-datepicker-input',\n '[attr.aria-haspopup]': '_datepicker ? \"dialog\" : null',\n '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',\n '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n // Used by the test harness to tie this input to its calendar. We can't depend on\n // `aria-owns` for this, because it's only defined while the calendar is open.\n '[attr.data-mat-calendar]': '_datepicker ? _datepicker.id : null',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(blur)': '_onBlur()',\n '(keydown)': '_onKeydown($event)',\n },\n exportAs: 'matDatepickerInput',\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$1.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD]\n }] }]; }, propDecorators: { matDatepicker: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], dateFilter: [{\n type: Input,\n args: ['matDatepickerFilter']\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Can be used to override the icon of a `matDatepickerToggle`. */\nclass MatDatepickerToggleIcon {\n}\nMatDatepickerToggleIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerToggleIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatDatepickerToggleIcon.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatDatepickerToggleIcon, selector: \"[matDatepickerToggleIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerToggleIcon, decorators: [{\n type: Directive,\n args: [{\n selector: '[matDatepickerToggleIcon]',\n }]\n }] });\nclass MatDatepickerToggle {\n /** Whether the toggle button is disabled. */\n get disabled() {\n if (this._disabled === undefined && this.datepicker) {\n return this.datepicker.disabled;\n }\n return !!this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n }\n constructor(_intl, _changeDetectorRef, defaultTabIndex) {\n this._intl = _intl;\n this._changeDetectorRef = _changeDetectorRef;\n this._stateChanges = Subscription.EMPTY;\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\n }\n ngOnChanges(changes) {\n if (changes['datepicker']) {\n this._watchStateChanges();\n }\n }\n ngOnDestroy() {\n this._stateChanges.unsubscribe();\n }\n ngAfterContentInit() {\n this._watchStateChanges();\n }\n _open(event) {\n if (this.datepicker && !this.disabled) {\n this.datepicker.open();\n event.stopPropagation();\n }\n }\n _watchStateChanges() {\n const datepickerStateChanged = this.datepicker ? this.datepicker.stateChanges : of();\n const inputStateChanged = this.datepicker && this.datepicker.datepickerInput\n ? this.datepicker.datepickerInput.stateChanges\n : of();\n const datepickerToggled = this.datepicker\n ? merge(this.datepicker.openedStream, this.datepicker.closedStream)\n : of();\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(this._intl.changes, datepickerStateChanged, inputStateChanged, datepickerToggled).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n}\nMatDatepickerToggle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerToggle, deps: [{ token: MatDatepickerIntl }, { token: i0.ChangeDetectorRef }, { token: 'tabindex', attribute: true }], target: i0.ɵɵFactoryTarget.Component });\nMatDatepickerToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatDatepickerToggle, selector: \"mat-datepicker-toggle\", inputs: { datepicker: [\"for\", \"datepicker\"], tabIndex: \"tabIndex\", ariaLabel: [\"aria-label\", \"ariaLabel\"], disabled: \"disabled\", disableRipple: \"disableRipple\" }, host: { listeners: { \"click\": \"_open($event)\" }, properties: { \"attr.tabindex\": \"null\", \"class.mat-datepicker-toggle-active\": \"datepicker && datepicker.opened\", \"class.mat-accent\": \"datepicker && datepicker.color === \\\"accent\\\"\", \"class.mat-warn\": \"datepicker && datepicker.color === \\\"warn\\\"\", \"attr.data-mat-calendar\": \"datepicker ? datepicker.id : null\" }, classAttribute: \"mat-datepicker-toggle\" }, queries: [{ propertyName: \"_customIcon\", first: true, predicate: MatDatepickerToggleIcon, descendants: true }], viewQueries: [{ propertyName: \"_button\", first: true, predicate: [\"button\"], descendants: true }], exportAs: [\"matDatepickerToggle\"], usesOnChanges: true, ngImport: i0, template: \"\\n\\n \\n \\n \\n\\n \\n\\n\", styles: [\".mat-datepicker-toggle{pointer-events:auto}.cdk-high-contrast-active .mat-datepicker-toggle-default-icon{color:CanvasText}\"], dependencies: [{ kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i3.MatIconButton, selector: \"button[mat-icon-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatDatepickerToggle, decorators: [{\n type: Component,\n args: [{ selector: 'mat-datepicker-toggle', host: {\n 'class': 'mat-datepicker-toggle',\n '[attr.tabindex]': 'null',\n '[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',\n '[class.mat-accent]': 'datepicker && datepicker.color === \"accent\"',\n '[class.mat-warn]': 'datepicker && datepicker.color === \"warn\"',\n // Used by the test harness to tie this toggle to its datepicker.\n '[attr.data-mat-calendar]': 'datepicker ? datepicker.id : null',\n // Bind the `click` on the host, rather than the inner `button`, so that we can call\n // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n // it so that the input doesn't get focused automatically by the form field (See #21836).\n '(click)': '_open($event)',\n }, exportAs: 'matDatepickerToggle', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n\\n \\n \\n \\n\\n \\n\\n\", styles: [\".mat-datepicker-toggle{pointer-events:auto}.cdk-high-contrast-active .mat-datepicker-toggle-default-icon{color:CanvasText}\"] }]\n }], ctorParameters: function () { return [{ type: MatDatepickerIntl }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }]; }, propDecorators: { datepicker: [{\n type: Input,\n args: ['for']\n }], tabIndex: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], disabled: [{\n type: Input\n }], disableRipple: [{\n type: Input\n }], _customIcon: [{\n type: ContentChild,\n args: [MatDatepickerToggleIcon]\n }], _button: [{\n type: ViewChild,\n args: ['button']\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// This file contains the `_computeAriaAccessibleName` function, which computes what the *expected*\n// ARIA accessible name would be for a given element. Implements a subset of ARIA specification\n// [Accessible Name and Description Computation 1.2](https://www.w3.org/TR/accname-1.2/).\n//\n// Specification accname-1.2 can be summarized by returning the result of the first method\n// available.\n//\n// 1. `aria-labelledby` attribute\n// ```\n// \n// \n// \n// ```\n// 2. `aria-label` attribute (e.g. ``)\n// 3. Label with `for`/`id`\n// ```\n// \n// \n// \n// ```\n// 4. `placeholder` attribute (e.g. ``)\n// 5. `title` attribute (e.g. ``)\n// 6. text content\n// ```\n// \n// \n// \n// ```\n/**\n * Computes the *expected* ARIA accessible name for argument element based on [accname-1.2\n * specification](https://www.w3.org/TR/accname-1.2/). Implements a subset of accname-1.2,\n * and should only be used for the Datepicker's specific use case.\n *\n * Intended use:\n * This is not a general use implementation. Only implements the parts of accname-1.2 that are\n * required for the Datepicker's specific use case. This function is not intended for any other\n * use.\n *\n * Limitations:\n * - Only covers the needs of `matStartDate` and `matEndDate`. Does not support other use cases.\n * - See NOTES's in implementation for specific details on what parts of the accname-1.2\n * specification are not implemented.\n *\n * @param element {HTMLInputElement} native <input/> element of `matStartDate` or\n * `matEndDate` component. Corresponds to the 'Root Element' from accname-1.2\n *\n * @return expected ARIA accessible name of argument <input/>\n */\nfunction _computeAriaAccessibleName(element) {\n return _computeAriaAccessibleNameInternal(element, true);\n}\n/**\n * Determine if argument node is an Element based on `nodeType` property. This function is safe to\n * use with server-side rendering.\n */\nfunction ssrSafeIsElement(node) {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Determine if argument node is an HTMLInputElement based on `nodeName` property. This funciton is\n * safe to use with server-side rendering.\n */\nfunction ssrSafeIsHTMLInputElement(node) {\n return node.nodeName === 'INPUT';\n}\n/**\n * Determine if argument node is an HTMLTextAreaElement based on `nodeName` property. This\n * funciton is safe to use with server-side rendering.\n */\nfunction ssrSafeIsHTMLTextAreaElement(node) {\n return node.nodeName === 'TEXTAREA';\n}\n/**\n * Calculate the expected ARIA accessible name for given DOM Node. Given DOM Node may be either the\n * \"Root node\" passed to `_computeAriaAccessibleName` or \"Current node\" as result of recursion.\n *\n * @return the accessible name of argument DOM Node\n *\n * @param currentNode node to determine accessible name of\n * @param isDirectlyReferenced true if `currentNode` is the root node to calculate ARIA accessible\n * name of. False if it is a result of recursion.\n */\nfunction _computeAriaAccessibleNameInternal(currentNode, isDirectlyReferenced) {\n // NOTE: this differs from accname-1.2 specification.\n // - Does not implement Step 1. of accname-1.2: '''If `currentNode`'s role prohibits naming,\n // return the empty string (\"\")'''.\n // - Does not implement Step 2.A. of accname-1.2: '''if current node is hidden and not directly\n // referenced by aria-labelledby... return the empty string.'''\n // acc-name-1.2 Step 2.B.: aria-labelledby\n if (ssrSafeIsElement(currentNode) && isDirectlyReferenced) {\n const labelledbyIds = currentNode.getAttribute?.('aria-labelledby')?.split(/\\s+/g) || [];\n const validIdRefs = labelledbyIds.reduce((validIds, id) => {\n const elem = document.getElementById(id);\n if (elem) {\n validIds.push(elem);\n }\n return validIds;\n }, []);\n if (validIdRefs.length) {\n return validIdRefs\n .map(idRef => {\n return _computeAriaAccessibleNameInternal(idRef, false);\n })\n .join(' ');\n }\n }\n // acc-name-1.2 Step 2.C.: aria-label\n if (ssrSafeIsElement(currentNode)) {\n const ariaLabel = currentNode.getAttribute('aria-label')?.trim();\n if (ariaLabel) {\n return ariaLabel;\n }\n }\n // acc-name-1.2 Step 2.D. attribute or element that defines a text alternative\n //\n // NOTE: this differs from accname-1.2 specification.\n // Only implements Step 2.D. for `