{"version":3,"file":"src_app_modules_main-application_application-menu_application-menu_module_ts.54af8a6cb7f4bd26.js","mappings":"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AiB81B,6BACjB/zB,aAAc,CAAC8zB,+BACfz3B,KAAMu3B,eAER,CAEE31B,gBAAiB81B,qBACjB5wB,WAAW,GAEb,CACEzL,MAAO,YACP+G,QAASk1B,0BACT11B,gBAAiB81B,qBACjB13B,KAAMu3B,eAER,CACE31B,gBAAiB81B,qBACjB5wB,WAAW,GAEb,CACEzL,MAAO,UACP+G,QAASk1B,wBACT11B,gBAAiB81B,qBACjB13B,KAAMu3B,eAER,CACEl8B,MAAO,YACP+G,QAASk1B,0BACT11B,gBAAiB81B,qBACjB13B,KAAMu3B,eAER,CACEl8B,MAAO,YACP+G,QAASk1B,sBACT11B,gBAAiB81B,6BACjB13B,KAAMu3B,gBAGV5zB,aAAc,CAAC8zB,UAAmBA,kBAGvBQ,EAA+B,CAC1C58B,MAAO,WACP+G,QAASk1B,aACTt3B,KAAMu3B,kBACN31B,gBAAiB,CAAC81B,gBAClB/zB,aAAc,CAAC8zB,UAAmBA,iBAClC9xB,uBAAuB,EACvBxD,YAAa,IAGF+1B,GAA8B,CACzC78B,MAAO,UACP+G,QAASk1B,YACTt3B,KAAMu3B,YACN5xB,uBAAuB,EACvBxD,YAAa,CACX,CACE9G,MAAO,UACP+G,QAASk1B,2BACT11B,gBAAiB,IAEnB,CACEvG,MAAO,gBACP+G,QAASk1B,gBACT11B,gBAAiB,GACjB+B,aAAc,CAAC8zB,kBAGnB9zB,aAAc,CAAC8zB,UAAmBA,gBAAyBA,YAAqBA,iBAMrEU,GAA8B,CACzC98B,MAAO,UACP+G,QAASk1B,YACTt3B,KAAMu3B,eACN9xB,iBAAiB,EACjBE,uBAAuB,EACvBxD,YAAa,CACX,CACE9G,MAAO,YACP+G,QAASk1B,sBACT11B,gBAAiB,CACf81B,kCACAA,oCAEF13B,KAAMu3B,eAER,CACEl8B,MAAO,MACP+G,QAASk1B,gBACT11B,gBAAiB,CACf81B,kCACAA,oCAEF13B,KAAMu3B,eAER,CACEl8B,MAAO,UACP+G,QAASk1B,oBACT11B,gBAAiB,CAAC81B,oBAClBlyB,aAAc2xB,EACdn3B,KAAMu3B,gBA8BV5zB,aAAc,CAAC8zB,YAkBJW,IAVFd,YACQI,iBACXH,WAQsC,CAC5Cl8B,MAAO,WACP+G,QAASk1B,aACTt3B,KAAMu3B,aACN5xB,uBAAuB,EACvBxD,YAAa,CAOX,CACE9G,MAAO,aACP+G,QAASk1B,uBACT11B,gBAAiB81B,8BACjB13B,KAAMu3B,gBAER,CACEl8B,MAAO,cACP+G,QAASk1B,wBACT11B,gBAAiB,CAAC81B,8BAClB13B,KAAMu3B,UAQR,CACEl8B,MAAO,eACP+G,QAASk1B,2BACTt3B,KAAMu3B,kBAER,CACEl8B,MAAO,YACP+G,QAASk1B,uBACT11B,gBAAiB81B,yBACjB13B,KAAMu3B,gBAER,CACEl8B,MAAO,QACP+G,QAASk1B,mBACT11B,gBAAiB,CAAC81B,sBAClB13B,KAAMu3B,UAER,CACEl8B,MAAO,UACP+G,QAASk1B,qBACTt3B,KAAMu3B,aAER,CACEl8B,MAAO,SACP+G,QAASk1B,oBACT11B,gBAAiB81B,eACjB13B,KAAMu3B,eAER,CACEl8B,MAAO,QACP+G,QAASk1B,oCACT11B,gBAAiB81B,0CACjB13B,KAAMu3B,mBAER,CACEl8B,MAAO,QACP+G,QAASk1B,mBACT11B,gBAAiB81B,qBACjB13B,KAAMu3B,gBAER,CACEl8B,MAAO,UACP+G,QAASk1B,oBACT11B,gBAAiB81B,mBACjB13B,KAAMu3B,eAER,CACEl8B,MAAO,UACP+G,QAASk1B,qBACT11B,gBAAiB81B,sBACjB/zB,aAAc,CAAC8zB,oBACfz3B,KAAMu3B,aAER,CACEl8B,MAAO,WACP+G,QAASk1B,sBACT3zB,aAAc,CAAC8zB,+BACf71B,gBAAiB81B,0BACjB13B,KAAMu3B,mCCvXZ,IAAYc,+BAAW,KAKrBA,iBACAA,mCACAA,2CACAA,2BACAA,qBAKAA,qBACAA,qCACAA,yCACAA,qCACAA,yCACAA,oBAGAA,wBAtBqB,oBCAvB,IAAY5qB,+BAAoB,KAC9BA,yBACAA,yCACAA,iBACAA,iCACAA,iCACAA,+BACAA,uBACAA,iCACAA,0CAT8B,sCCAzB,MAAM6qB,EAA2B,CAAC5uB,EAAe6u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","names":["i0","_r3","ctx_r2","matDrawerAnimations","transformDrawer","trigger","state","style","transform","visibility","transition","animate","MAT_DRAWER_DEFAULT_AUTOSIZE","InjectionToken","providedIn","factory","MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY","MAT_DRAWER_CONTAINER","MatDrawerContent","CdkScrollable","constructor","_changeDetectorRef","_container","elementRef","scrollDispatcher","ngZone","super","this","ngAfterContentInit","_contentMarginChanges","subscribe","markForCheck","ɵfac","forwardRef","MatDrawerContainer","i1","ɵcmp","selectors","provide","useExisting","ngContentSelectors","MatDrawer","_elementRef","_focusTrapFactory","_focusMonitor","_platform","_ngZone","_interactivityChecker","_doc","_elementFocusedBeforeDrawerWasOpened","_enableAnimations","_position","_mode","_disableClose","_opened","_animationStarted","Subject","_animationEnd","_animationState","openedChange","EventEmitter","_openedStream","pipe","filter","o","map","openedStart","e","fromState","toState","indexOf","mapTo","undefined","_closedStream","closedStart","_destroyed","onPositionChanged","_modeChanged","opened","activeElement","_takeFocus","_isFocusWithinDrawer","_restoreFocus","_openedVia","runOutsideAngular","fromEvent","nativeElement","event","keyCode","ESCAPE","disableClose","hasModifierKey","takeUntil","run","close","stopPropagation","preventDefault","distinctUntilChanged","x","y","emit","position","value","_isAttached","_updatePositionInParent","mode","_updateFocusTrapState","next","coerceBooleanProperty","autoFocus","_autoFocus","toggle","_forceFocus","element","options","isFocusable","tabIndex","callback","removeEventListener","removeAttribute","addEventListener","focus","_focusByCssSelector","selector","elementToFocus","querySelector","_focusTrap","focusInitialElementWhenReady","then","hasMovedFocus","focusOrigin","focusVia","blur","activeEl","contains","ngAfterViewInit","create","ngAfterContentChecked","isBrowser","ngOnDestroy","destroy","_anchor","remove","complete","open","openedVia","_closeViaBackdropClick","_setOpen","isOpen","result","restoreFocus","Promise","resolve","take","_getWidth","offsetWidth","enabled","newPosition","parent","parentNode","createComment","insertBefore","appendChild","i2","i3","DOCUMENT","_c1","_t","ctx","encapsulation","changeDetection","_dir","_element","viewportRuler","defaultAutosize","_animationMode","_drawers","QueryList","backdropClick","_doCheckSubject","_contentMargins","left","right","change","_validateDrawers","updateContentMargins","_autosize","start","_start","end","_end","autosize","hasBackdrop","_backdropOverride","scrollable","_userContent","_content","_allDrawers","changes","startWith","drawer","reset","item","notifyOnChanges","forEach","_watchDrawerToggle","_watchDrawerPosition","_watchDrawerMode","length","_isDrawerOpen","debounceTime","_left","width","_right","ngDoCheck","_isPushed","classList","add","_setContainerClass","onMicrotaskEmpty","merge","isAdd","className","_onBackdropClicked","_closeModalDrawersViaBackdrop","_canHaveBackdrop","_isShowingBackdrop","i4","ANIMATION_MODULE_TYPE","dirIndex","_c2","i5","styles","MatSidenavContent","changeDetectorRef","container","MatSidenavContainer","MatSidenav","arguments","_fixedInViewport","_fixedTopGap","_fixedBottomGap","fixedInViewport","fixedTopGap","coerceNumberProperty","fixedBottomGap","t","_c4","MatSidenavModule","ɵmod","ɵinj","CommonModule","MatCommonModule","CdkScrollableModule","CdkStepHeader","ɵdir","CdkStepLabel","template","nextId","STEP_STATE","STEPPER_GLOBAL_OPTIONS","CdkStep","_stepper","stepperOptions","interacted","interactedStream","_editable","_optional","_completedOverride","_customError","_stepperOptions","_displayDefaultIndicatorType","displayDefaultIndicatorType","editable","optional","completed","_getDefaultCompleted","stepControl","valid","hasError","_getDefaultError","invalid","select","selected","ngOnChanges","_stateChanged","_markAsInteracted","_showError","showError","CdkStepper","TemplateRef","steps","_sortedHeaders","_linear","_selectedIndex","selectionChange","_orientation","_groupId","linear","selectedIndex","index","newIndex","_steps","_isValidIndex","_anyControlsInvalidOrPending","toArray","_updateSelectedItemIndex","step","orientation","_keyManager","withVerticalOrientation","_stepHeader","headers","sort","a","b","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","FocusKeyManager","withWrap","withHomeAndEnd","of","_layoutDirection","direction","withHorizontalOrientation","updateActiveItem","Math","max","min","previous","_getStepLabelId","i","_getStepContentId","_getAnimationDirection","_getIndicatorType","isCurrentStep","_isCurrentStep","_getDefaultIndicatorLogic","_getGuidelineLogic","_getFocusIndex","activeItemIndex","stepsArray","previouslySelectedIndex","selectedStep","previouslySelectedStep","_containsFocus","setActiveItem","_onKeydown","hasModifier","manager","SPACE","ENTER","onKeydown","slice","some","control","pending","stepperElement","focusedElement","_getFocusedElementPierceShadowDom","CdkStepperNext","type","CdkStepperPrevious","CdkStepperModule","BidiModule","ctx_r6","ctx_r7","ctx_r8","ctx_r9","ctx_r3","ctx_r4","ctx_r5","_r13","ctx_r12","_r19","ctx_r18","_r23","step_r20","ctx_r24","MatStepLabel","MatStepperIntl","optionalLabel","completedLabel","editableLabel","ɵprov","MAT_STEPPER_INTL_PROVIDER","deps","Optional","SkipSelf","useFactory","MAT_STEPPER_INTL_PROVIDER_FACTORY","parentIntl","_MatStepHeaderBase","mixinColor","MatStepHeader","_intl","_intlSubscription","monitor","unsubscribe","stopMonitoring","origin","_stringLabel","label","_templateLabel","_getHostElement","_getIconContext","active","_getDefaultTextForState","decls","matStepperAnimations","horizontalStepTransition","params","animationDuration","verticalStepTransition","height","MatStepperIcon","templateRef","MatStepContent","_template","MatStep","stepper","_errorStateMatcher","_viewContainerRef","_isSelected","Subscription","switchMap","isSelected","_lazyContent","_portal","TemplatePortal","isErrorState","form","originalErrorState","customErrorState","MatStepper","ErrorStateMatcher","i2$1","dir","animationDone","labelPosition","headerPosition","_iconOverrides","_animationDone","_animationDuration","nodeName","toLowerCase","test","_icons","name","_stepIsNavigable","_getAnimationDuration","i3$1","hostVars","MatStepperNext","MatStepperPrevious","MatStepperModule","imports","PortalModule","MatButtonModule","MatIconModule","MatRippleModule","_MatToolbarBase","MatToolbarRow","MatToolbar","document","_document","_checkToolbarMixedModes","_toolbarRows","toolbar_c0","MatToolbarModule","IdleTimeModule","common","NotificationRingItemModule","icon_component","pipes_module","pill_list_module","fesm2020_button","icon","progress_spinner","NotificationRingModule","menu","fesm2020_checkbox","fesm2020_forms","SidePanelService","BehaviorSubject","isSidePanelExpanded","isSidePanelExpanded$","isSidePanelExpandedSubject","asObservable","toggleSidePanel","PackageTypeListConst","package_type","SidePanelSectionItemComponent","ComponentAbstract","cdr","router","dialog","modalsService","appVersionService","helpRouterService","store","snackbarService","packageService","selectUserPermissionLevel","untilDestroyed","permissionLevel","ngOnInit","isActive","window","location","pathname","startsWith","sectionItem","urlPath","activeSection","find","currentVersion","getBuiltInVersionInfo","version_number","version$","appVersion","tap","needUpgrade","events","NavigationEnd","url","detectChanges","menuSectionItem","permissionLevelWarning","permissionLevels","firstValueFrom","_this","permissionLevels$","checkPermissionLevel","warning","checkPackagesAvailable","packageLevel","hasPackage","packageNames","p","includes","info","join","toString","modalDialogComponent","NewTurnoverModalComponent","openNewTurnoverModal","queryParams","getGlobalPreservedParams","newTab","serializeUrl","createUrlTree","href","navigate","menuActions","menuActionsEvent","toggleSection","isExpanded","__decorate","UntilDestroy","fesm2020_core","SidePanelSectionComponent","component_abstract","app_routes_const","icon_enum","emailDomains","passQueryParams","contentCss","hideWithoutSubsection","checkActiveSection","ngneat_until_destroy","user_selectors","tenantData","currentSectionBSubject","currentSection","section","autoExpandInspectSection","management_route_enum","subRoute","route_path_enum","checkPackagesTrialDaysLeft","every","s","trialState","path","lodash","homePaths","separator","$event","side_panel_section_component_decorate","SidePanelComponent","dashboards_abstract","permission_level_enum","builtInVersionInfo","currentVersionTimestamp","version_timestamp","URL","searchParams","append","date_utils_function","userData","dispatch","user_actions","combineLatest","dashboards_selectors","dashboardMode","permissionList","id","menuConfig","getMenuConfig","menuAction","action","mainPageActionEvent","checkRolesSection","availableDashboardPermissionsCount","homeDashboardPermissions","permission","checkHomeSection","checksMainSection","side_panel_config_const","sections","checkPackages","push","newSection","enableSorting","isHasRightToSection","checksSubsection","localeCompare","checkPermissions","check_permission_level_function","check_user_email_domain","email","side_panel_component_decorate","EntityType","EntityTypeListConst","NotificationRingItemComponent","enumerationValuePipe","getNotificationIcon","title","getNotificationTitle","content","getNotificationContent","footer","getNotificationFooter","selectEvent","delete","deleteInProgress","deleteEvent","notification","category","notification_category","relatedObjectTypeId","additionalData","workflowStepEnumType","workflow_step_list_const","ticketName","workflow_step_enum","entityList","unitName","unitNames","propertyName","userType","user_type","companyName","NotificationRingComponent","UntypedFormControl","getLastMessages","deleteInProgress$","selectDeleteNotificationInProgress","selectUserData","selectLastNotificationList","lastNotificationList","allNotificationList","filterList","unreadOnly","valueChanges","selectNotification","webNotification","wasRead","markAsRead","baseNotificationBody","notificationIds","notificationId","openSource","markAllAsRead","deleteNotification","displayedNotificationList","setUnreadCount","unreadCount","getLastNotificationList","addTicketModal","ticketId","relatedObjectId","propertyId","NotificationCategory","RouteData","AppRoutes","turnoverIds","UserType","RoutePath","bidId","notification_ring_component_decorate","BreadcrumbItemComponent","reloadRoute","navigateByUrl","skipLocationChange","TopPanelComponent","activatedRoute","routeBreadcrumbList","getBreadcrumbList","root","dashboard_actions","breadcrumbList","mergeBreadcrumbList","route","firstChild","mergeMap","data","newDashboardViewType","route_data","dashboard_view_type","dashboardViewType","getDashboardViewTypes","additionalBreadcrumbList","isAuthenticated","withLatestFrom","portfolio_actions","home","main_page_actions","breadcrumbs","routeConfig","lastRoutePart","split","pop","snapshot","replace","enumeration_selectors","dashboardViewTypes","enumerationValue","dashboardViewTypeEnum","top_panel_component_decorate","ApplicationMenuComponent","authService","sidePanelService","screenWiperService","applicationMenuService","screenClasses$","wipeDuration","globalWiperVisible$","environment","navigationInProgress","watchForSidePanel","currentVersionTimeStamp","isLoading$","selectLoadEnumerationsLoading","dashboardViewType$","selectDashboardViewType","lockFullScreen","fullScreen","pseudoFullScreen","pseudoFullScreenOn","fullScreenOn","pseudoFullScreenLocked","NavigationStart","NavigationCancel","mainPageActions","MainPageActions","logout","returnUrl","onScroll","scrollEvent$","application_menu_component_decorate","routes","component","canActivate","resident_guard","children","redirectTo","pathMatch","auth_guard","home_redirect_guard","loadChildren","__webpack_require__","m","HomeDashboardModule","package_level_guard","DashboardRolesModule","TurnoversModule","InspectionsModule","ServiceModule","CalendarModule","BoardsModule","loadComponent","TokenExchangeComponent","DashboardReportsModule","permission_level_guard","TicketsModule","canDeactivate","view_close_guard","ManagementModule","unit_details_component","ApplicationMenuRoutingModule","ApplicationMenuModule","yesEmpty_pipe","valueIfPositive_pipe","valueIfNonZero_pipe","notifications_module","modals_module","autocomplete","badge","card","datepicker","divider","expansion","form_field","grid_list","input","list","core","paginator","fesm2020_radio","fesm2020_select","snack_bar","tabs","table","tooltip_directive","chips","directives_module","new_turnover_modal_module","animation_module","avatar_module","search_input_module","radio_button_dropdown_module","skeleton_loader_component","property_selector_all_component","ApplicationMenuService","rxjs__WEBPACK_IMPORTED_MODULE_0__","portfoliosToDisplayIds","excludedProperties","PropertySelectorAllComponent","PuSubscribable","portfolioService","inject","ActivatedRoute","Store","ChangeDetectorRef","Router","shareReplay","initDashboardViewType","initShowPropertySelector","initShowPropertySingleSelector","DashboardViewType","FormControl","initAllPortfolioSelector","PermissionLevelType","hasPermissionToPropertyCollection$","permissionLevelType","PropertyCollections_View","PropertyCollections_Edit","userPortfolios$","initPortfolios","userCollections$","initUserCollections","userPortfolioProperties$","initPortfolioProperties","userCollectionProperties$","initCollectionProperties","collectionProperties$","showSwitch$","showPropertySingleSelector$","hasPermission","collections","showSingle","hasPermissionToPropertyCollection","loadPropertyCollections","applyQueryParams","onCollectionControlChange","initPortfolioSelection","initPropertySelectorSwitchStatusListener","onPortfolioControlChange","onPropertyControlChange","onSinglePropertyControlChange","initPortfolioSelectorWidth","initPropertySelectorWidth","initGroupingItems","initGroupingValue","initGroupingValueChanges","initRouterParamUpdateListener","switchMessage$","switchMessage","switchPortfolioMessage","reportName","prevPortfolioId","newPortfolioId","selectSelectedPortfolioId","selectSelectedCollectionIds","selectUserCollections","selectIsAllCollectionsSelected","selectPropertySelectorSwitchStatus","allPortfolioSelectorEnabled$","selectSelectedPropertyIds","routeData$","prev","curr","JSON","stringify","selectedPortfolioId","selectedCollectionIds","allCollections","isAllCollectionsSelected","switchStatus","allPortfolioSelectorEnabled","userPortfolios","storeSelectedProperties","lastRouteUrl","singleView","isUpdatingRouterParams","PropertySelectorSwitchStatus","setPropertySelectorSwitchStatus","propertySelectorSwitchStatus","allCollectionIds","collection","availablePropertiesToSelect","portfolioPropertiesIds","collectionPropertiesIds","switchChanged","lastSwitchStatus","routeChanged","lastRouteData","availablePropertiesChanged","lastAvailableProperties","difference","allPortfoliosValue","setSelectedPortfolioId","portfolioId","portfolioControl","setValue","setSelectedCollectionIds","collectionIds","allCollectionsSelected","collectionControl","setSelectedPropertyIds","propertyIds","allPropertiesSelected","singlePropertyModeView","prevPortfolioControlValue","propertyPortfolioControl","propertyCollectionControl","allPortfolioPropertiesSelected","allCollectionPropertiesSelected","updateRouterParam","portfolioId$","updatePortfolioSelection","getPortfolioLabelById","prevPortfolioName","newPortfolioName","selectPortfolios","portfolios","Number","queryParamsApplied","doNotStore","setDoNotStore","collectionIdsParam","urlCollectionIds","parse","Array","isArray","queryPortfolioId","urlPortfolioId","parseInt","propertyIdsParam","urlPropertyIds","portfolioLabel","portfolioOptions","el","allPortfoliosOption","portfolioMaxNameLength$","collectionsSelected","isUpdatingControl","emitEvent","propertyControlSingle","allPropertyValue","portfoliosToDisplay$","boardData","storagePortfolioId","allPortfolioSelectorIsEnabled","allPortfolioIdsSet","Set","portfolioIdToSet","selectorPropertiesAllInitialization","isDefAndNotNull","has","first","collections$","storageCollectionIds$","storageCollectionIds","userCollections","toUpperCase","selectorCollectionsAllInitialization","skipEqual$","selectProperties","properties","storagePropertyIds","resetProperties","portfolioProperties","_","buildingNumber","hasBuildingNumber","sortBy","isEqual","allPropertiesOption","splice","selectPropertyCollections","propertyCollections","propertyIdsFromCollections","flatMap","propertiesList","collectionProperties","property","currentParams","currentFragment","fragment","updatedParams","relativeTo","queryParamsHandling","replaceUrl","selectTenantData","propertySelectorTypes","portfolioSelectorsWidthCss","calculateSelectorWidth","propertyMaxNameLength$","propertySelectorsWidthCss","maxNameLength","maxWidth","ceil","groupingByItems","selectJoinedProperties","joined","grouping","setJoinedProperties","onSwitchToggled","ReactiveFormsModule","updateFormForBoardType","settings","getBoardFormValues","board_enums","progressType","datasource","outputAction","outputBehaviour","boardCellColor","controls","ScrollDirective","pu_subscribe","destroy$","r","initScroll","scroll$","scrollPosition","scrollTop","clientHeight","totalScrollHeight","scrollHeight","scrollBottomThreshold","checkScrollBottom","scrollThreshold","remainingScroll","scrollToBottom","scrolledToBottom","destroy_service","BoardsCreateComponent","dialogRef","formBuilder","boardService","propertiesService","boardActionSubject","ButtonType","columns","col","initFormGroups","initBoardGroupConfig","boardGroupForm","get","ProgressTypeList","BoardSourceTypeList","BoardTypeList","BoardOutputTypeList","BoardOutputBehaviourList","DoNotAllowToCreateTicketsRule","BooleanListConst","EIcon","isEditMode","patchValue","selectedPortfolioIds","last","updatePropertyList","boardType","boardTypeList","flat","BoardType","isSettingsOpened","setValidators","Validators","updateValueAndValidity","clearValidators","getAllUserProperties","allProperties","selectedProperties","propertyList","currentExcludedIds","excludedPropertyIds","availablePropertyIds","newExcludedIds","toggleAdvancedSettings","submit","inDisallowedType","shorError","isControlInvalid","markAllAsTouched","extendedConfigParsed","board","Board","Object","assign","RestBoardModel","group","showArchivedTurnovers","dontCreateTickets","groups","createFormGroupFromGroups","array","createGroupFormGroup","colorBg","colorText","cols","intersection","colOptions","c","addNewGroup","removeGroup","removeAt","error","BoardOutputBehaviour","disallowSourceTypeOutputTypeMap","MAT_DIALOG_DATA","DashboardsAbstract","_app_components_abstract_component_abstract__WEBPACK_IMPORTED_MODULE_0__","WorkflowStep","_shared_enums_workflow_step_enum__WEBPACK_IMPORTED_MODULE_4__","_shared_enums_dashboard_view_type__WEBPACK_IMPORTED_MODULE_3__","DashboardMode","_shared_enums_dashboard_mode__WEBPACK_IMPORTED_MODULE_2__","TicketAttachmentType","_shared_enums_attachment_type__WEBPACK_IMPORTED_MODULE_1__","_angular_core__WEBPACK_IMPORTED_MODULE_5__","features","DashboardUserHeaderComponent","PriorityType","showBack","previousRoute","selectDashboardFilterState","assignee","setDashboardFilter","selectActiveUsers","users","myTasksLoading$","selectMyTasksLoading","myTasksTurnovers$","selectMyTasksTurnoversCount","myTasksTickets$","selectMyTasksTicketsCount","staleTurnovers$","selectStaleTurnoversCount","lateTurnovers$","selectLateTurnoversCount","goBack","_ngrx_store__WEBPACK_IMPORTED_MODULE_1__","_dashboards_store_reducers_dashboard_filter_reducer__WEBPACK_IMPORTED_MODULE_0__","UnitDetailsComponentForm","FINISH","UnitDetailsAbstract","getPropertyAddress","physicalAddress","street1","street2","city","zip","getPropertyManager","propertyManager","firstName","lastName","inputs","UnitDetailsPicturesSectionComponentForm","PHOTO","UnitDetailsPicturesSectionComponent","unit_details_abstract","attachment_type","file_extensions_const","initForm","unitId","portfolio_selectors","unitAttachments","prepareUnitAttachments","fileUploaded","unitAttachmentType","upload","setAttachment","showUnitPictures","openGalleryModal","attachmentType","attachmentsBSubject","unitPhotosBSubject","readOnly","showUnitFloorPlans","unitFloorPlanBSubject","attachmentToEntity","externalUrl","applianceId","fileUploadId","originalFileName","description","FLOOR_PLAN","unitPhotos","unitFloorPlan","targetAttachmentType","displayedUnitPhotos","displayedUnitFloorPlan","UnitDetailsPropertySectionComponent","descriptionGroup","DESCRIPTION","finish","unit","propertyAddress","addresses","propertyManagerEmail","finishEnumeration","finishList","get_enumeration_radio_list_function","unit_details_property_section_component_decorate","UnitDetailsDescriptionSectionComponent","rent","RENT","marketRent","MARKETRENT","advertisedRent","ADVERTISEDRENT","oldRent","OLDRENT","renewalStrategyLoading$","selectRenewalStrategyForUnitLoading","selectRenewalStrategyForUnit","restUnitTypeRentTargetModel","selectUnit","unit_details_description_section_component_decorate","UnitDetailsInspectionsComponent","inspectionService","modalService","rest_inspections_model_interface","inspectionsSource","template_actions","template_selectors","templates","templateList","initDataSource","getBeUnitId","inspections","inspection_model","inspectionTemplateId","inspection","isTurboMode","displayedColumns","typeColumnIndex","sortingDataAccessor","tableSortPredicate","bind","deleteInspection","inspectionModel","success","snackbar_message_enum","download","inspectionId","share","unit_details_inspections_component_decorate","UnitDetailsComponent","unitNonPmsService","unitService","turnoverService","MoveOutTypeListConst","selectPreviousRoute","prevRoute","sourceView","paramMap","turnoverId","bulkBidId","selectUnitLoading","isUnitDoNotAutoCreateTurnsLoading$","selectUnitDoNotAutoCreateTurnsLoading","nameControl","update","loadUnit","getRenewalStrategyForUnit","selectLoadEnumerations","enumerationConfig","applianceTypeList","getEnumerationRadioListFunction","applianceTypes","colorTypeList","applianceColors","selectTurnoverDeleteStatus","turnoverDeleteStatus","UpdateStatus","doNotAutoCreateTurns","isUnitDown","isUnitDownReason","isUnitOnHold","isUnitOnHoldReason","updateBreadcrumb","initTurnover","clearUnit","getTurnover","turnover","moveOutType","unitStatus","evt","changeDoNotAutoCreateTurns","updateUnitDoNotAutoCreateTurns","openConfirmationModal","confirmColor","confirmLabel","afterClosed","DialogResult","deleteTurnover","onUnitDownTextareaFocus","initialUnitDownReason","onUnitDownTextareaKeydown","key","target","onUnitDownTextareaBlur","trim","onUnitDownCheckboxChange","checked","onUnitHoldCheckboxChange","goToHome","DigitsValidator","formValue","res","HttpErrorResponse","setCustomBreadcrumbs","deleteUnit","catchError","status","finalize","unit_details_component_decorate","routeState","_ngrx_store__WEBPACK_IMPORTED_MODULE_2__","_core_selector__WEBPACK_IMPORTED_MODULE_1__","coreState","_main_application_store_reducers_route_reducer__WEBPACK_IMPORTED_MODULE_0__","_shared_enums_move_out_type_enum__WEBPACK_IMPORTED_MODULE_0__","PROPUP_EMAIL_DOMAINS","MANAGEMENT_EMAIL_DOMAINS","concat","homeSection","_shared_constants_app_routes_const__WEBPACK_IMPORTED_MODULE_1__","_shared_enums_icon_enum__WEBPACK_IMPORTED_MODULE_2__","rolesSection","_shared_enums_package_type__WEBPACK_IMPORTED_MODULE_3__","_shared_enums_permission_level_enum__WEBPACK_IMPORTED_MODULE_4__","forExternalOnly","turnoversSection","_ui_components_modals_new_turnover_modal_new_turnover_modal_component__WEBPACK_IMPORTED_MODULE_5__","boardsSection","_main_application_boards_boards_create_boards_create_component__WEBPACK_IMPORTED_MODULE_0__","inspectionsSection","calendarSection","serviceSection","reportsSection","managementSection","MoveOutType","isUserEmailDomainAllowed","allowedDomains","domain","HomeRedirectGuard","userService","tenantService","rxjs__WEBPACK_IMPORTED_MODULE_8__","getCashedUserData","getCachedTenant","rxjs_operators__WEBPACK_IMPORTED_MODULE_9__","rxjs_operators__WEBPACK_IMPORTED_MODULE_10__","navigationExtras","_shared_enums_package_type__WEBPACK_IMPORTED_MODULE_1__","_shared_enums_user_type__WEBPACK_IMPORTED_MODULE_3__","_shared_functions_check_permission_level_function__WEBPACK_IMPORTED_MODULE_4__","_shared_enums_permission_level_enum__WEBPACK_IMPORTED_MODULE_2__","_shared_constants_app_routes_const__WEBPACK_IMPORTED_MODULE_0__","_angular_core__WEBPACK_IMPORTED_MODULE_11__","PackageLevelGuardFactory","packageLevelToCheck","AnyPackageLevelGuardFactory","packagesToCheck","_angular_core__WEBPACK_IMPORTED_MODULE_2__","_angular_router__WEBPACK_IMPORTED_MODULE_3__","_app_services_package_service__WEBPACK_IMPORTED_MODULE_0__","rxjs_operators__WEBPACK_IMPORTED_MODULE_4__","parseUrl","SimpleScrollService","scrollToTopSubject","validationTriggerSubject","triggerScrollToTop","triggerValidation","processAllControls","_angular_forms__WEBPACK_IMPORTED_MODULE_0__","values","markControl","markAsDirty","markAsTouched","positiveOnly","regex","RegExp","digitsPositive","digits","AVATAR_COLOR_THEMES_LIST","AvatarComponent","avatarService","userInfo","avatarTheme","getUserConfig","userId","SYSTEM_USER_ID","setFullName","fullName","AvatarModule","_ui_components_components_avatar_services_avatar_service__WEBPACK_IMPORTED_MODULE_2__","_angular_common__WEBPACK_IMPORTED_MODULE_5__","_shared_pipes_pipes_module__WEBPACK_IMPORTED_MODULE_1__","_ui_components_components_icon_icon_component__WEBPACK_IMPORTED_MODULE_3__","_shared_directives_tooltip_directive__WEBPACK_IMPORTED_MODULE_0__","AvatarService","setThemeConfigList","avatarThemeItem","configList","themeNumber","isNaN","themeAmount","getAvatarTheme","updateAvatarTheme","themePrefix","localStorage","setItem","local_storage_data_enum","getItem","getRandomValue","minValue","maxValue","floor","random","_angular_core__WEBPACK_IMPORTED_MODULE_4__","DashboardContainerComponent","_dashboards_components_abstract_dashboards_abstract__WEBPACK_IMPORTED_MODULE_0__","scrollService","isLoading","loading","isEmptyDashboard","emptyDashboard","scrollToTop$","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_5__","scrollToTop","onBodyScroll","bodyContent","scrollTo","top","behavior","EmptyDashboardComponent","userData$","_main_application_store_selectors_user_selectors__WEBPACK_IMPORTED_MODULE_1__","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_3__","rxjs_operators__WEBPACK_IMPORTED_MODULE_5__","EmptyDataComponent","_shared_enums_icon_enum__WEBPACK_IMPORTED_MODULE_1__","_angular_core__WEBPACK_IMPORTED_MODULE_3__","_angular_core__WEBPACK_IMPORTED_MODULE_8__","PictureComponent","fileMimeType","_angular_forms__WEBPACK_IMPORTED_MODULE_9__","_shared_interfaces_file_mime_types__WEBPACK_IMPORTED_MODULE_1__","comment","picture","selectPicture","selectPictureEvent","deleteItem","deletePictureEvent","toggleEditMode","editMode","showCommentActionButtons","currentComment","save","attachment","updatePictureEvent","cancel","SearchInputModule","_angular_common__WEBPACK_IMPORTED_MODULE_2__","_ui_components_components_icon_icon_component__WEBPACK_IMPORTED_MODULE_0__","_angular_forms__WEBPACK_IMPORTED_MODULE_3__","_r7","_r10","_r12","ctx_r11","ctx_r13","ctx_r14","_r17","ctx_r16","ctx_r20","ctx_r21","_r2","ctx_r1","ChromeFieldsComponent","onChange","view","fontSize","color","borderRadius","border","boxShadow","display","marginTop","hsl","toggleViews","round","handleChange","hex","isValidHex","TinyColor","disableAlpha","toHex","toHex8","source","g","rgb","h","l","ChromeComponent","ColorWrap","circle","pointer","backgroundColor","afterValidChange","alpha","activeBackground","handleValueChange","NG_VALUE_ACCESSOR","multi","ColorChromeModule","AlphaModule","CheckboardModule","EditableInputModule","HueModule","SaturationModule","ClickOutsideDirective","onDocumentClick","appClickOutside","CustomColorPickerComponent","CustomControlAbstract","ngControl","formDirective","initIsOpen","labelCss","_labelCss","labelOutsideDefaultCss","valueCss","_valueCss","_labelElement","initControlBase","onChanged","handleOpenState","isMouseMove","isForce","_forceIsOpen$","_isOpened$","_isOpenedTrigger$","writeValue","debounceSafeDefault","isOpened","timer","MatMenuModule","RadioButtonModule","IconComponent","InputModule","NgSelectModule","PipesModule","InputErrorModule","MatProgressSpinnerModule","StopPropagationDirective","TooltipDirectiveModule","bound01","n","isOnePointZero","parseFloat","isPercent","isPercentage","String","abs","clamp01","val","boundAlpha","convertToPercentage","pad2","rgbToHsl","d","hue2rgb","q","rgbToHsv","v","rgbToHex","allow3Char","charAt","convertDecimalToHex","convertHexToDecimal","parseIntFromHex","names","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","goldenrod","gold","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavenderblush","lavender","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","inputToRGB","ok","format","stringInputToObject","named","match","matchers","exec","rgba","hsla","hsv","hsva","hex8","hex6","hex4","hex3","isValidCSSUnit","rgbToRgb","substr","hsvToRgb","f","mod","hslToRgb","prototype","hasOwnProperty","call","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","Boolean","opts","_a","numberInputToObject","originalInput","roundA","gradientType","isValid","isDark","getBrightness","isLight","toRgb","getLuminance","RsRGB","GsRGB","BsRGB","pow","getAlpha","setAlpha","isMonochrome","toHsl","toHsv","toHsvString","toHslString","toHexString","allow4Char","rgbaToHex","toHex8String","toHexShortString","allowShortChar","toRgbString","toPercentageRgb","fmt","toPercentageRgbString","rnd","toName","_i","entries","_b","formatSet","formattedString","hasAlpha","toNumber","clone","lighten","amount","brighten","darken","tint","mix","shade","desaturate","saturate","greyscale","spin","hue","rgb1","rgb2","analogous","results","slices","part","ret","complement","monochromatic","modification","splitcomplement","onBackground","background","fg","bg","triad","polyad","tetrad","increment","equals","mixinHasStickyInput","base","args","_sticky","_hasStickyChanged","sticky","prevValue","hasStickyChanged","resetStickyChanged","CDK_TABLE","TEXT_COLUMN_OPTIONS","CdkCellDef","CdkHeaderCellDef","CdkFooterCellDef","_CdkColumnDefBase","CdkColumnDefBase","CdkColumnDef","_table","_stickyEnd","_name","_setNameInput","stickyEnd","_updateColumnCssClassName","_columnCssClassName","cssClassFriendlyName","BaseCdkCell","columnDef","CdkHeaderCell","CdkFooterCell","nodeType","tableRole","getAttribute","role","setAttribute","CdkCell","_Schedule","tasks","endTasks","_COALESCED_STYLE_SCHEDULER","_CoalescedStyleScheduler","_currentSchedule","schedule","task","_createScheduleIfNeeded","scheduleEnd","_getScheduleObservable","isStable","from","onStable","CDK_ROW_TEMPLATE","BaseRowDef","_differs","_columnsDiffer","currentValue","diff","getColumnsDiff","extractCellTemplate","column","CdkHeaderRowDef","headerCell","CdkFooterRowDef","footerCell","cell","_CdkHeaderRowDefBase","CdkHeaderRowDefBase","_CdkFooterRowDefBase","CdkFooterRowDefBase","CdkRowDef","CdkCellOutlet","_viewContainer","mostRecentCellOutlet","CdkHeaderRow","CdkFooterRow","CdkRow","CdkNoDataRow","_contentClassName","STICKY_DIRECTIONS","StickyStyler","_isNativeHtmlTable","_stickCellCss","_coalescedStyleScheduler","_isBrowser","_needsPositionStickyOnElement","_positionListener","_cachedCellWidths","_borderCellCss","bottom","clearStickyPositioning","rows","stickyDirections","elementsToClear","row","ELEMENT_NODE","_removeStickyStyle","updateStickyColumns","stickyStartStates","stickyEndStates","recalculateCellWidths","stickyColumnsUpdated","sizes","stickyEndColumnsUpdated","firstRow","numCells","cellWidths","_getCellWidths","startPositions","_getStickyStartColumnPositions","endPositions","_getStickyEndColumnPositions","lastStickyStart","lastIndexOf","firstStickyEnd","isRtl","_addStickyStyle","reverse","stickRows","rowsToStick","stickyStates","states","stickyOffsets","stickyCellHeights","elementsToStick","rowIndex","stickyOffset","getBoundingClientRect","borderedRowIndex","offset","isBorderedRowIndex","_this$_positionListen2","stickyHeaderRowsUpdated","offsets","elements","stickyFooterRowsUpdated","updateStickyFooterContainer","tableElement","tfoot","zIndex","_getCalculatedZIndex","dirValue","isBorderElement","cssText","zIndexIncrements","firstRowCells","widths","positions","nextPosition","STICKY_POSITIONING_LISTENER","CdkRecycleRows","_VIEW_REPEATER_STRATEGY","useClass","_RecycleViewRepeaterStrategy","DataRowOutlet","viewContainer","HeaderRowOutlet","FooterRowOutlet","NoDataRowOutlet","CDK_TABLE_TEMPLATE","CdkTable","_viewRepeater","_viewportRuler","_stickyPositioningListener","_onDestroy","_columnDefsByName","Map","_customColumnDefs","_customRowDefs","_customHeaderRowDefs","_customFooterRowDefs","_headerRowDefChanged","_footerRowDefChanged","_stickyColumnStylesNeedReset","_forceRecalculateCellWidths","_cachedRenderRowsMap","stickyCssClass","needsPositionStickyOnElement","_isShowingNoDataRow","_multiTemplateDataRows","_fixedLayout","contentChanged","viewChange","MAX_VALUE","trackBy","_trackByFn","fn","dataSource","_dataSource","_switchDataSource","multiTemplateDataRows","_rowOutlet","_forceRenderDataRows","updateStickyColumnStyles","fixedLayout","_setupStickyStyler","_applyNativeTableSections","_dataDiffer","dataRow","dataIndex","_cacheRowDefs","_cacheColumnDefs","_headerRowDefs","_footerRowDefs","_rowDefs","rowDefsChanged","_renderUpdatedColumns","_forceRenderHeaderRows","_forceRenderFooterRows","_renderChangeSubscription","_observeRenderChanges","_checkStickyStates","_headerRowOutlet","_footerRowOutlet","def","clear","_defaultRowDef","isDataSource","disconnect","renderRows","_renderRows","_getAllRenderRows","_updateNoDataRow","applyChanges","record","_adjustedPreviousIndex","currentIndex","_getEmbeddedViewArgs","operation","context","_renderCellTemplateForItem","rowDef","_updateRowIndexContext","forEachIdentityChange","$implicit","NgZone","addColumnDef","removeColumnDef","addRowDef","removeRowDef","addHeaderRowDef","headerRowDef","removeHeaderRowDef","addFooterRowDef","footerRowDef","removeFooterRowDef","setNoDataRow","noDataRow","_customNoDataRow","updateStickyHeaderRowStyles","headerRows","_getRenderedRows","thead","_stickyStyler","updateStickyFooterRowStyles","footerRows","dataRows","headerRow","_addStickyColumnStyles","footerRow","prevCachedRenderRows","_data","renderRowsForData","_getRenderRowsForData","set","WeakMap","j","renderRow","cache","_getRowDefs","cachedRenderRows","shift","mergeArrayAndSet","_getOwnDefs","_contentColumnDefs","_contentHeaderRowDefs","_contentFooterRowDefs","_contentRowDefs","defaultRowDefs","when","columnsDiffReducer","acc","dataColumnsChanged","reduce","headerColumnsChanged","footerColumnsChanged","dataStream","connect","isObservable","_renderRow","columnDefs","columnName","rowOutlet","renderedRows","viewRef","rootNodes","rowDefs","outlet","createEmbeddedView","cellTemplate","_getCellTemplates","renderIndex","count","even","odd","columnId","documentFragment","createDocumentFragment","tag","outlets","_noDataRowOutlet","createElement","stickyCheckReducer","items","_noDataRow","shouldShow","rootNode","_DisposeViewRepeaterStrategy","useValue","_c0","CdkTextColumn","_options","justify","_syncColumnDefName","headerText","_createDefaultHeaderText","dataAccessor","defaultDataAccessor","defaultHeaderTextTransform","CdkTableModule","ScrollingModule","_uniqueAutocompleteIdCounter","MatAutocompleteSelectedEvent","option","_MatAutocompleteMixinBase","mixinDisableRipple","MAT_AUTOCOMPLETE_DEFAULT_OPTIONS","MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY","autoActiveFirstOption","autoSelectActiveOption","_MatAutocompleteBase","defaults","platform","_activeOptionChanges","showPanel","_isOpen","displayWith","optionSelected","closed","optionActivated","_classList","inertGroups","SAFARI","_autoActiveFirstOption","_autoSelectActiveOption","coerceStringArray","_setVisibilityClasses","ActiveDescendantKeyManager","_setVisibility","_setScrollTop","panel","_getScrollTop","_emitSelectEvent","_getPanelAriaLabelledby","labelId","ariaLabel","labelExpression","ariaLabelledby","_visibleClass","_hiddenClass","viewQuery","MatAutocomplete","MAT_OPTGROUP","MatOption","MAT_OPTION_PARENT_COMPONENT","_MatAutocompleteOriginBase","MatAutocompleteOrigin","MAT_AUTOCOMPLETE_SCROLL_STRATEGY","MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER","Overlay","MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY","overlay","scrollStrategies","reposition","MAT_AUTOCOMPLETE_VALUE_ACCESSOR","MatAutocompleteTrigger","_MatAutocompleteTriggerBase","_overlay","_zone","scrollStrategy","_formField","_defaults","_componentDestroyed","_autocompleteDisabled","_manuallyFloatingLabel","_viewportSubscription","_canOpenOnNextFocus","_closeKeyEventStream","_windowBlurHandler","panelOpen","_onChange","_onTouched","autocompleteAttribute","_overlayAttached","optionSelections","defer","onSelectionChange","_scrollStrategy","autocompleteDisabled","_getWindow","_positionStrategy","_setStrategyPositions","_overlayRef","updatePosition","_destroyPanel","openPanel","_attachOverlay","_floatLabel","closePanel","_resetLabel","_pendingAutoselectedOption","hasAttached","detach","_closingActionsSubscription","panelClosingActions","tabOut","_getOutsideClickStream","detachments","MatOptionSelectionChange","activeOption","activeItem","clickTarget","_getEventTarget","formField","customOrigin","connectedTo","overlayElement","_assignOptionValue","registerOnChange","registerOnTouched","setDisabledState","isDisabled","disabled","_handleKeydown","_selectViaInteraction","_resetActiveItem","prevActiveItem","isArrowKey","UP_ARROW","DOWN_ARROW","TAB","_canOpen","_scrollToOption","_valueBeforeAutoSelection","_handleInput","_previousValue","_handleFocus","_handleClick","shouldAnimate","floatLabel","_animateAndLockLabel","_subscribeToClosingActions","firstStable","optionChanges","reapplyLastPosition","delay","wasOpen","_setValueAndClose","dispose","toDisplay","_updateNativeInputValue","_control","toSelect","_clearPreviousSelectedOption","skip","deselect","overlayRef","setOrigin","_getConnectedElement","updateSize","_getPanelWidth","_this$_formField","getLabelId","_getOverlayConfig","_handleOverlayEvents","attach","OverlayConfig","positionStrategy","_getOverlayPosition","panelClass","_this$_defaults","overlayPanelClass","strategy","flexibleConnectedTo","withFlexibleDimensions","withPush","belowPositions","originX","originY","overlayX","overlayY","_aboveClass","abovePositions","withPositions","getConnectedOverlayOrigin","panelWidth","_getHostWidth","setFirstItemActive","defaultView","labelCount","_countGroupLabelsBeforeOption","optionGroups","newScrollPosition","_getOptionScrollPosition","offsetTop","offsetHeight","keydownEvents","outsidePointerEvents","i1$1","MAT_FORM_FIELD","MatAutocompleteModule","OverlayModule","MatOptionModule","MatCardContent","MatCardTitle","MatCardSubtitle","MatCardActions","align","MatCardFooter","MatCardImage","MatCardSmImage","MatCardMdImage","MatCardLgImage","MatCardXlImage","MatCardAvatar","MatCard","MatCardHeader","MatCardTitleGroup","MatCardModule","TileCoordinator","columnIndex","rowCount","rowspan","lastRowMax","tracker","numColumns","tiles","fill","tile","_trackTile","gapStartIndex","_findMatchingGap","colspan","_markTilePosition","TilePosition","tileCols","gapEndIndex","_nextRow","_findGapEndIndex","MAT_GRID_LIST","MatGridTile","_gridList","_rowspan","_colspan","_setStyle","MatGridTileText","setLines","_lines","MatLine","MatGridAvatarCssMatStyler","MatGridTileHeaderCssMatStyler","MatGridTileFooterCssMatStyler","cssCalcAllowedValue","TileStyler","_rows","init","gutterSize","_gutterSize","normalizeUnits","_cols","_direction","getBaseTileSize","sizePercent","gutterFraction","getTilePosition","baseSize","calc","getTileSize","span","setStyle","colIndex","percentWidthPerTile","gutterWidthFractionPerTile","setColStyles","setRowStyles","percentWidth","gutterWidth","baseTileWidth","side","getGutterSpan","getTileSpan","tileHeight","getComputedHeight","FixedTileStyler","fixedRowHeight","_setListStyle","_tiles","RatioTileStyler","_parseRatio","percentHeightPerTile","rowHeightRatio","baseTileHeight","ratioParts","FitTileStyler","gutterHeightPerTile","exp","MatGridList","_gutter","rowHeight","_rowHeight","newValue","_setTileStyler","_checkCols","_checkRowHeight","_layoutTiles","_tileStyler","_tileCoordinator","pos","MatGridListModule","MatLineModule","MAT_SORT_DEFAULT_OPTIONS","_MatSortBase","mixinInitialized","mixinDisabled","MatSort","_defaultOptions","sortables","_stateChanges","sortChange","disableClear","_disableClear","register","sortable","deregister","getNextSortDirection","_this$_defaultOptions","sortDirectionCycle","getSortDirectionCycle","sortOrder","nextDirectionIndex","_markInitialized","SORT_ANIMATION_TRANSITION","AnimationDurations","AnimationCurves","matSortAnimations","indicator","leftPointer","rightPointer","arrowOpacity","opacity","arrowPosition","keyframes","allowChildren","query","animateChild","MatSortHeaderIntl","MAT_SORT_HEADER_INTL_PROVIDER","MAT_SORT_HEADER_INTL_PROVIDER_FACTORY","_MatSortHeaderBase","MatSortHeader","_sort","_columnDef","_ariaDescriber","defaultOptions","_showIndicatorHint","_viewState","_arrowDirection","_disableViewStateAnimation","_sortActionDescription","_handleStateChanges","sortActionDescription","_updateSortActionDescription","_updateArrowDirection","_setAnimationTransitionState","_isSorted","_sortButton","newState","_setIndicatorHintVisible","_rerenderSubscription","visible","_isDisabled","viewState","_toggleOnInteraction","_getArrowDirectionState","_getArrowViewState","_getAriaSortAttribute","_renderArrow","newDescription","removeDescription","describe","attrs","MatSortModule","MatRecycleRows","MatTable","MatCellDef","MatHeaderCellDef","MatFooterCellDef","MatColumnDef","MatHeaderCell","MatFooterCell","MatCell","MatHeaderRowDef","MatFooterRowDef","MatRowDef","MatHeaderRow","MatFooterRow","MatRow","MatNoDataRow","MatTextColumn","MatTableModule","_MatTableDataSource","DataSource","initialData","_renderData","_filter","_internalPageChanges","_renderChangesSubscription","sortHeaderId","_isNumberValue","numberValue","sortData","valueA","valueB","valueAType","valueBType","comparatorResult","filterPredicate","dataStr","keys","currentTerm","transformedFilter","_updateChangeSubscription","_filterData","_paginator","initialized","pageChange","page","filteredData","orderedData","_orderData","paginatedData","_pageData","obj","_updatePaginator","startIndex","pageIndex","pageSize","filteredDataLength","lastPageIndex","newPageIndex","MatTableDataSource","tab_r4","_r0","_r18","ctx_r17","ctx_r19","_MAT_INK_BAR_POSITIONER","_MAT_INK_BAR_POSITIONER_FACTORY","offsetLeft","MatInkBar","_inkBarPositioner","alignToElement","show","inkBar","hide","MAT_TAB_CONTENT","MatTabContent","MAT_TAB_LABEL","MAT_TAB","MatTabLabel","CdkPortal","viewContainerRef","_closestTab","_MatTabBase","MAT_TAB_GROUP","MatTab","_closestTabGroup","textLabel","_contentPortal","templateLabel","_setTemplateLabelInput","_explicitContent","_implicitContent","matTabsAnimations","translateTab","minHeight","MatTabBodyPortal","CdkPortalOutlet","componentFactoryResolver","_host","_centeringSub","_leavingSub","_beforeCentering","_isCenterPosition","isCentering","_afterLeavingCenter","preserveContent","MatTabBody","_MatTabBodyBase","_dirChangeSubscription","_translateTabComplete","_onCentering","_onCentered","_computePositionAnimationState","_positionIndex","_computePositionFromOrigin","_onTranslateTabStarted","_getLayoutDirection","MAT_TABS_CONFIG","_MatTabLabelWrapperBase","MatTabLabelWrapper","getOffsetLeft","getOffsetWidth","passiveEventListenerOptions","normalizePassiveListenerOptions","passive","MatPaginatedTabHeader","_scrollDistance","_selectedIndexChanged","_showPaginationControls","_disableScrollAfter","_disableScrollBefore","_stopScrolling","_disablePagination","selectFocusedIndex","indexFocused","_stopInterval","disablePagination","_previousPaginator","_handlePaginatorPress","_nextPaginator","dirChange","resize","realign","updatePagination","_alignInkBarToSelectedTab","_items","_itemsResized","_getMaxScrollDistance","newFocusIndex","_setTabFocus","ResizeObserver","EMPTY","tabItems","Observable","observer","resizeObserver","observe","contentRect","_tabLabelCount","_scrollToLabel","_checkScrollingControls","_scrollDistanceChanged","_updateTabScrollPosition","focusIndex","_itemSelected","_onContentChanges","textContent","_currentTextContent","_checkPaginationEnabled","tab","containerEl","_tabListContainer","scrollLeft","scrollWidth","scrollDistance","translateX","_tabList","TRIDENT","EDGE","_scrollTo","_scrollHeader","scrollAmount","_handlePaginatorClick","labelIndex","selectedLabel","viewLength","labelBeforePos","labelAfterPos","_tabListInner","beforeVisiblePos","afterVisiblePos","isEnabled","selectedItem","selectedLabelWrapper","_inkBar","mouseEvent","button","maxScrollDistance","distance","_MatTabHeaderBase","animationMode","_disableRipple","disableRipple","MatTabHeader","_c3","_c5","_c6","_c7","MatTabChangeEvent","_MatTabGroupMixinBase","_MatTabGroupBase","defaultConfig","_tabs","_indexToSelect","_lastFocusedTabIndex","_tabBodyWrapperHeight","_tabsSubscription","_tabLabelSubscription","_dynamicHeight","_preserveContent","selectedIndexChange","focusChange","selectedTabChange","dynamicHeight","contentTabIndex","_contentTabIndex","_backgroundColor","indexToSelect","_clampTabIndex","isFirstRun","_createChangeEvent","wrapper","_tabBodyWrapper","_subscribeToAllTabChanges","_subscribeToTabLabels","selectedTab","_allTabs","realignInkBar","_tabHeader","focusTab","header","_focusChanged","_getTabLabelId","_getTabContentId","_setTabBodyWrapperHeight","tabHeight","_removeTabBodyWrapperHeight","tabHeader","_getTabIndex","_tabFocusChanged","MatTabGroup","_c8","_c9","i1$2","i7","nextUniqueId","_MatTabNavBase","updateActiveLink","tabPanel","_activeTabId","_getRole","MatTabNav","MatTabLink","_MatTabLinkMixinBase","mixinTabIndex","_MatTabLinkBase","_tabNavBar","globalRippleOptions","_isActive","rippleConfig","animation","enterDuration","exitDuration","rippleDisabled","click","_getAriaControls","_this$_tabNavBar$tabP","_getAriaSelected","_getAriaCurrent","MAT_RIPPLE_GLOBAL_OPTIONS","tabNavBar","focusMonitor","_tabLinkRipple","RippleRenderer","setupTriggerEvents","_removeTriggerEvents","MatTabNavPanel","MatTabsModule","ObserversModule","A11yModule","checkboardCache","getCheckerboard","c1","c2","size","checkboard","render","canvas","getContext","fillStyle","fillRect","translate","toDataURL","CheckboardComponent","gridStyles","CoordinatesDirective","coordinatesChange","mousechange","mouseListening","mousemove","isTouch","mouseup","mousedown","sub","containerWidth","clientWidth","containerHeight","pageXOffset","pageYOffset","clientX","clientY","CoordinatesModule","AlphaComponent","pointerLeft","pointerTop","gradient","simpleCheckForValidColor","passed","keysToCheck","letter","oldHue","ColorMode","HEX","HSL","HSV","RGB","colorChange","onChangeComplete","onSwatchHover","_onChangeCompleteSubscription","_onSwatchHoverSubscription","msg","isDevMode","Error","console","warn","setState","currentColor","handleSwatchHover","ColorWrapModule","EditableInputComponent","placeholder","uniqueId","wrapStyle","wrap","inputStyle","labelStyle","dragLabel","cursor","handleFocus","handleFocusOut","blurValue","handleKeydown","stringValue","num","arrowOffset","handleKeyup","ev","handleDrag","handleMousedown","movementX","dragMax","HueComponent","hidePointer","RaisedComponent","zDepth","radius","RaisedModule","SaturationComponent","saturation","bright","SwatchComponent","focusStyle","onClick","onHover","divStyles","focusStyles","inFocus","currentStyles","handleHover","handleClick","SwatchModule","ShadeComponent","ShadeModule"],"sourceRoot":"webpack:///","sources":["./node_modules/@angular/material/fesm2020/sidenav.mjs","./node_modules/@angular/cdk/fesm2020/stepper.mjs","./node_modules/@angular/material/fesm2020/stepper.mjs","./node_modules/@angular/material/fesm2020/toolbar.mjs","./src/app/modules/ui-components/components/idle-time/idle-time.module.ts","./src/app/modules/ui-components/components/notification-ring/components/notification-ring-item/notification-ring-item.module.ts","./src/app/modules/ui-components/components/notification-ring/notification-ring.module.ts","./src/app/services/side-panel.service.ts","./src/app/modules/shared/constants/package-type-list.const.ts","./src/app/modules/main-application/application-menu/side-panel-section-item/side-panel-section-item.component.html","./src/app/modules/main-application/application-menu/side-panel-section-item/side-panel-section-item.component.ts","./src/app/modules/main-application/application-menu/side-panel-section/side-panel-section.component.html","./src/app/modules/main-application/application-menu/side-panel-section/side-panel-section.component.ts","./src/app/modules/main-application/application-menu/side-panel/side-panel.component.html","./src/app/modules/main-application/application-menu/side-panel/side-panel.component.ts","./src/app/modules/shared/enums/entity-type.ts","./src/app/modules/shared/constants/entity-type-list.const.ts","./src/app/modules/ui-components/components/notification-ring/components/notification-ring-item/notification-ring-item.component.html","./src/app/modules/ui-components/components/notification-ring/components/notification-ring-item/notification-ring-item.component.ts","./src/app/modules/ui-components/components/notification-ring/notification-ring.component.html","./src/app/modules/ui-components/components/notification-ring/notification-ring.component.ts","./src/app/modules/main-application/application-menu/breadcrumb-item/breadcrumb-item.component.ts","./src/app/modules/main-application/application-menu/breadcrumb-item/breadcrumb-item.component.html","./src/app/modules/main-application/application-menu/top-panel/top-panel.component.html","./src/app/modules/main-application/application-menu/top-panel/top-panel.component.ts","./src/app/modules/main-application/application-menu/application-menu.component.html","./src/app/modules/main-application/application-menu/application-menu.component.ts","./src/app/modules/main-application/application-menu/application-menu.routing.module.ts","./src/app/modules/main-application/application-menu/application-menu.module.ts","./src/app/modules/main-application/application-menu/application-menu.service.ts","./src/app/modules/main-application/application-menu/property-selector/property-selector-all.component.html","./src/app/modules/main-application/application-menu/property-selector/property-selector-all.component.ts","./src/app/modules/main-application/boards/boards-create/boards-create.ts","./src/app/modules/shared/directives/scroll.directive.ts","./src/app/modules/main-application/boards/boards-create/boards-create.component.html","./src/app/modules/main-application/boards/boards-create/boards-create.component.ts","./src/app/modules/main-application/dashboard-roles/components/abstract/dashboards.abstract.ts","./src/app/modules/main-application/dashboard-roles/components/dashboard-user-header/dashboard-user-header.component.html","./src/app/modules/main-application/dashboard-roles/components/dashboard-user-header/dashboard-user-header.component.ts","./src/app/modules/main-application/dashboard-roles/store/selectors/dashboard-filter.selectors.ts","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/config/enums/unit-details-component-form.ts","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/abstract/unit-details.abstract.ts","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/components/unit-details-pictures-section/unit-details-pictures-section.component.ts","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/components/unit-details-pictures-section/unit-details-pictures-section.component.html","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/components/unit-details-property-section/unit-details-property-section.component.html","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/components/unit-details-property-section/unit-details-property-section.component.ts","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/components/unit-details-description-section/unit-details-description-section.component.html","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/components/unit-details-description-section/unit-details-description-section.component.ts","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/components/unit-details-inspections/unit-details-inspections.component.html","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/components/unit-details-inspections/unit-details-inspections.component.ts","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/unit-details.component.html","./src/app/modules/main-application/management/pages/portfolio/components/unit-details/unit-details.component.ts","./src/app/modules/main-application/store/selectors/route-state.selector.ts","./src/app/modules/shared/constants/boolean-list.const.ts","./src/app/modules/shared/constants/move-out-type-list.const.ts","./src/app/modules/shared/constants/side-panel-config.const.ts","./src/app/modules/shared/enums/move-out-type.enum.ts","./src/app/modules/shared/enums/notification-category.ts","./src/app/modules/shared/functions/check-user-email-domain.ts","./src/app/modules/shared/guards/home-redirect.guard.ts","./src/app/modules/shared/guards/package-level.guard.ts","./src/app/modules/shared/services/simple-scroll.service.ts","./src/app/modules/shared/utils/forms/is-control-invalid.ts","./src/app/modules/shared/validators/digits.validator.ts","./src/app/modules/ui-components/components/avatar/avatar.component.html","./src/app/modules/ui-components/components/avatar/avatar.component.ts","./src/app/modules/ui-components/components/avatar/avatar.module.ts","./src/app/modules/ui-components/components/avatar/services/avatar.service.ts","./src/app/modules/shared/functions/get-random-value.function.ts","./src/app/modules/ui-components/components/dashboard-container/dashboard-container.component.html","./src/app/modules/ui-components/components/dashboard-container/dashboard-container.component.ts","./src/app/modules/ui-components/components/empty-dashboard/empty-dashboard.component.html","./src/app/modules/ui-components/components/empty-dashboard/empty-dashboard.component.ts","./src/app/modules/ui-components/components/empty-data/empty-data.component.ts","./src/app/modules/ui-components/components/empty-data/empty-data.component.html","./src/app/modules/ui-components/components/picture/picture.component.html","./src/app/modules/ui-components/components/picture/picture.component.ts","./src/app/modules/ui-components/components/search-input/search-input.module.ts","./node_modules/ngx-color/fesm2020/ngx-color-chrome.mjs","./src/app/modules/shared/directives/click-outside.directive.ts","./src/app/modules/ui-components/controls/custom-color-picker/custom-color-picker.component.html","./src/app/modules/ui-components/controls/custom-color-picker/custom-color-picker.component.ts","./node_modules/@ctrl/tinycolor/dist/module/util.js","./node_modules/@ctrl/tinycolor/dist/module/conversion.js","./node_modules/@ctrl/tinycolor/dist/module/css-color-names.js","./node_modules/@ctrl/tinycolor/dist/module/format-input.js","./node_modules/@ctrl/tinycolor/dist/module/index.js","./node_modules/@angular/cdk/fesm2020/table.mjs","./node_modules/@angular/material/fesm2020/autocomplete.mjs","./node_modules/@angular/material/fesm2020/card.mjs","./node_modules/@angular/material/fesm2020/grid-list.mjs","./node_modules/@angular/material/fesm2020/sort.mjs","./node_modules/@angular/material/fesm2020/table.mjs","./node_modules/@angular/material/fesm2020/tabs.mjs","./node_modules/ngx-color/fesm2020/ngx-color.mjs"],"sourcesContent":["import * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i5 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, EventEmitter, Optional, Input, Output, ViewChild, QueryList, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport * as i2 from '@angular/cdk/a11y';\nimport * as i4 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport * as i3 from '@angular/cdk/platform';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, map, mapTo, takeUntil, distinctUntilChanged, take, startWith, debounceTime } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\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 drawers.\n * @docs-private\n */\nconst matDrawerAnimations = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: trigger('transform', [\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', style({\n 'transform': 'none',\n 'visibility': 'visible',\n })),\n state('void', style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')),\n ]),\n};\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nfunction throwMatDuplicatedDrawerError(position) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n/** Configures whether drawers should use auto sizing by default. */\nconst MAT_DRAWER_DEFAULT_AUTOSIZE = new InjectionToken('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n});\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nconst MAT_DRAWER_CONTAINER = new InjectionToken('MAT_DRAWER_CONTAINER');\n/** @docs-private */\nfunction MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY() {\n return false;\n}\nclass MatDrawerContent extends CdkScrollable {\n constructor(_changeDetectorRef, _container, elementRef, scrollDispatcher, ngZone) {\n super(elementRef, scrollDispatcher, ngZone);\n this._changeDetectorRef = _changeDetectorRef;\n this._container = _container;\n }\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\nMatDrawerContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawerContent, deps: [{ token: i0.ChangeDetectorRef }, { token: forwardRef(() => MatDrawerContainer) }, { token: i0.ElementRef }, { token: i1.ScrollDispatcher }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nMatDrawerContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatDrawerContent, selector: \"mat-drawer-content\", host: { properties: { \"style.margin-left.px\": \"_container._contentMargins.left\", \"style.margin-right.px\": \"_container._contentMargins.right\" }, classAttribute: \"mat-drawer-content\" }, providers: [\n {\n provide: CdkScrollable,\n useExisting: MatDrawerContent,\n },\n ], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawerContent, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-drawer-content',\n template: '',\n host: {\n 'class': 'mat-drawer-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: CdkScrollable,\n useExisting: MatDrawerContent,\n },\n ],\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: MatDrawerContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatDrawerContainer)]\n }] }, { type: i0.ElementRef }, { type: i1.ScrollDispatcher }, { type: i0.NgZone }]; } });\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\nclass MatDrawer {\n constructor(_elementRef, _focusTrapFactory, _focusMonitor, _platform, _ngZone, _interactivityChecker, _doc, _container) {\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._focusMonitor = _focusMonitor;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._interactivityChecker = _interactivityChecker;\n this._doc = _doc;\n this._container = _container;\n this._elementFocusedBeforeDrawerWasOpened = null;\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n this._enableAnimations = false;\n this._position = 'start';\n this._mode = 'over';\n this._disableClose = false;\n this._opened = false;\n /** Emits whenever the drawer has started animating. */\n this._animationStarted = new Subject();\n /** Emits whenever the drawer is done animating. */\n this._animationEnd = new Subject();\n /** Current state of the sidenav animation. */\n this._animationState = 'void';\n /** Event emitted when the drawer open state is changed. */\n this.openedChange = \n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter(/* isAsync */ true);\n /** Event emitted when the drawer has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));\n /** Event emitted when the drawer has started opening. */\n this.openedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0), mapTo(undefined));\n /** Event emitted when the drawer has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\n /** Event emitted when the drawer has started closing. */\n this.closedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState === 'void'), mapTo(undefined));\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n this.onPositionChanged = new EventEmitter();\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n this._modeChanged = new Subject();\n this.openedChange.subscribe((opened) => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement;\n }\n this._takeFocus();\n }\n else if (this._isFocusWithinDrawer()) {\n this._restoreFocus(this._openedVia || 'program');\n }\n });\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'keydown')\n .pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }), takeUntil(this._destroyed))\n .subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd\n .pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n }))\n .subscribe((event) => {\n const { fromState, toState } = event;\n if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n (toState === 'void' && fromState.indexOf('open') === 0)) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n /** The side that the drawer is attached to. */\n get position() {\n return this._position;\n }\n set position(value) {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value !== this._position) {\n // Static inputs in Ivy are set before the element is in the DOM.\n if (this._isAttached) {\n this._updatePositionInParent(value);\n }\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n get mode() {\n return this._mode;\n }\n set mode(value) {\n this._mode = value;\n this._updateFocusTrapState();\n this._modeChanged.next();\n }\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n get disableClose() {\n return this._disableClose;\n }\n set disableClose(value) {\n this._disableClose = coerceBooleanProperty(value);\n }\n /**\n * Whether the drawer should focus the first focusable element automatically when opened.\n * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n * enabled, focus will be moved into the sidenav in `side` mode as well.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or AutoFocusTarget\n * instead.\n */\n get autoFocus() {\n const value = this._autoFocus;\n // Note that usually we don't allow autoFocus to be set to `first-tabbable` in `side` mode,\n // because we don't know how the sidenav is being used, but in some cases it still makes\n // sense to do it. The consumer can explicitly set `autoFocus`.\n if (value == null) {\n if (this.mode === 'side') {\n return 'dialog';\n }\n else {\n return 'first-tabbable';\n }\n }\n return value;\n }\n set autoFocus(value) {\n if (value === 'true' || value === 'false' || value == null) {\n value = coerceBooleanProperty(value);\n }\n this._autoFocus = value;\n }\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n get opened() {\n return this._opened;\n }\n set opened(value) {\n this.toggle(coerceBooleanProperty(value));\n }\n /**\n * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n * attribute to forcefully focus it. The attribute is removed after focus is moved.\n * @param element The element to focus.\n */\n _forceFocus(element, options) {\n if (!this._interactivityChecker.isFocusable(element)) {\n element.tabIndex = -1;\n // The tabindex attribute should be removed to avoid navigating to that element again\n this._ngZone.runOutsideAngular(() => {\n const callback = () => {\n element.removeEventListener('blur', callback);\n element.removeEventListener('mousedown', callback);\n element.removeAttribute('tabindex');\n };\n element.addEventListener('blur', callback);\n element.addEventListener('mousedown', callback);\n });\n }\n element.focus(options);\n }\n /**\n * Focuses the first element that matches the given selector within the focus trap.\n * @param selector The CSS selector for the element to set focus to.\n */\n _focusByCssSelector(selector, options) {\n let elementToFocus = this._elementRef.nativeElement.querySelector(selector);\n if (elementToFocus) {\n this._forceFocus(elementToFocus, options);\n }\n }\n /**\n * Moves focus into the drawer. Note that this works even if\n * the focus trap is disabled in `side` mode.\n */\n _takeFocus() {\n if (!this._focusTrap) {\n return;\n }\n const element = this._elementRef.nativeElement;\n // When autoFocus is not on the sidenav, if the element cannot be focused or does\n // not exist, focus the sidenav itself so the keyboard navigation still works.\n // We need to check that `focus` is a function due to Universal.\n switch (this.autoFocus) {\n case false:\n case 'dialog':\n return;\n case true:\n case 'first-tabbable':\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n element.focus();\n }\n });\n break;\n case 'first-heading':\n this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n break;\n default:\n this._focusByCssSelector(this.autoFocus);\n break;\n }\n }\n /**\n * Restores focus to the element that was originally focused when the drawer opened.\n * If no element was focused at that time, the focus will be restored to the drawer.\n */\n _restoreFocus(focusOrigin) {\n if (this.autoFocus === 'dialog') {\n return;\n }\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, focusOrigin);\n }\n else {\n this._elementRef.nativeElement.blur();\n }\n this._elementFocusedBeforeDrawerWasOpened = null;\n }\n /** Whether focus is currently within the drawer. */\n _isFocusWithinDrawer() {\n const activeEl = this._doc.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n ngAfterViewInit() {\n this._isAttached = true;\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\n // Only update the DOM position when the sidenav is positioned at\n // the end since we project the sidenav before the content by default.\n if (this._position === 'end') {\n this._updatePositionInParent('end');\n }\n }\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n ngOnDestroy() {\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n this._anchor?.remove();\n this._anchor = null;\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia) {\n return this.toggle(true, openedVia);\n }\n /** Close the drawer. */\n close() {\n return this.toggle(false);\n }\n /** Closes the drawer with context that the backdrop was clicked. */\n _closeViaBackdropClick() {\n // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n // don't need to check whether focus is currently in the drawer, as clicking on the\n // backdrop causes blurs the active element.\n return this._setOpen(/* isOpen */ false, /* restoreFocus */ true, 'mouse');\n }\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen = !this.opened, openedVia) {\n // If the focus is currently inside the drawer content and we are closing the drawer,\n // restore the focus to the initially focused element (when the drawer opened).\n if (isOpen && openedVia) {\n this._openedVia = openedVia;\n }\n const result = this._setOpen(isOpen, \n /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(), this._openedVia || 'program');\n if (!isOpen) {\n this._openedVia = null;\n }\n return result;\n }\n /**\n * Toggles the opened state of the drawer.\n * @param isOpen Whether the drawer should open or close.\n * @param restoreFocus Whether focus should be restored on close.\n * @param focusOrigin Origin to use when restoring focus.\n */\n _setOpen(isOpen, restoreFocus, focusOrigin) {\n this._opened = isOpen;\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n }\n else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus(focusOrigin);\n }\n }\n this._updateFocusTrapState();\n return new Promise(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n _getWidth() {\n return this._elementRef.nativeElement ? this._elementRef.nativeElement.offsetWidth || 0 : 0;\n }\n /** Updates the enabled state of the focus trap. */\n _updateFocusTrapState() {\n if (this._focusTrap) {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n this._focusTrap.enabled = this.opened && this.mode !== 'side';\n }\n }\n /**\n * Updates the position of the drawer in the DOM. We need to move the element around ourselves\n * when it's in the `end` position so that it comes after the content and the visual order\n * matches the tab order. We also need to be able to move it back to `start` if the sidenav\n * started off as `end` and was changed to `start`.\n */\n _updatePositionInParent(newPosition) {\n const element = this._elementRef.nativeElement;\n const parent = element.parentNode;\n if (newPosition === 'end') {\n if (!this._anchor) {\n this._anchor = this._doc.createComment('mat-drawer-anchor');\n parent.insertBefore(this._anchor, element);\n }\n parent.appendChild(element);\n }\n else if (this._anchor) {\n this._anchor.parentNode.insertBefore(element, this._anchor);\n }\n }\n}\nMatDrawer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawer, deps: [{ token: i0.ElementRef }, { token: i2.FocusTrapFactory }, { token: i2.FocusMonitor }, { token: i3.Platform }, { token: i0.NgZone }, { token: i2.InteractivityChecker }, { token: DOCUMENT, optional: true }, { token: MAT_DRAWER_CONTAINER, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatDrawer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatDrawer, selector: \"mat-drawer\", inputs: { position: \"position\", mode: \"mode\", disableClose: \"disableClose\", autoFocus: \"autoFocus\", opened: \"opened\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", openedStart: \"openedStart\", _closedStream: \"closed\", closedStart: \"closedStart\", onPositionChanged: \"positionChanged\" }, host: { attributes: { \"tabIndex\": \"-1\" }, listeners: { \"@transform.start\": \"_animationStarted.next($event)\", \"@transform.done\": \"_animationEnd.next($event)\" }, properties: { \"attr.align\": \"null\", \"class.mat-drawer-end\": \"position === \\\"end\\\"\", \"class.mat-drawer-over\": \"mode === \\\"over\\\"\", \"class.mat-drawer-push\": \"mode === \\\"push\\\"\", \"class.mat-drawer-side\": \"mode === \\\"side\\\"\", \"class.mat-drawer-opened\": \"opened\", \"@transform\": \"_animationState\" }, classAttribute: \"mat-drawer\" }, viewQueries: [{ propertyName: \"_content\", first: true, predicate: [\"content\"], descendants: true }], exportAs: [\"matDrawer\"], ngImport: i0, template: \"
\\r\\n \\r\\n
\\r\\n\", dependencies: [{ kind: \"directive\", type: i1.CdkScrollable, selector: \"[cdk-scrollable], [cdkScrollable]\" }], animations: [matDrawerAnimations.transformDrawer], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawer, decorators: [{\n type: Component,\n args: [{ selector: 'mat-drawer', exportAs: 'matDrawer', animations: [matDrawerAnimations.transformDrawer], host: {\n 'class': 'mat-drawer',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n 'tabIndex': '-1',\n '[@transform]': '_animationState',\n '(@transform.start)': '_animationStarted.next($event)',\n '(@transform.done)': '_animationEnd.next($event)',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\r\\n \\r\\n
\\r\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i2.FocusTrapFactory }, { type: i2.FocusMonitor }, { type: i3.Platform }, { type: i0.NgZone }, { type: i2.InteractivityChecker }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: MatDrawerContainer, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DRAWER_CONTAINER]\n }] }]; }, propDecorators: { position: [{\n type: Input\n }], mode: [{\n type: Input\n }], disableClose: [{\n type: Input\n }], autoFocus: [{\n type: Input\n }], opened: [{\n type: Input\n }], openedChange: [{\n type: Output\n }], _openedStream: [{\n type: Output,\n args: ['opened']\n }], openedStart: [{\n type: Output\n }], _closedStream: [{\n type: Output,\n args: ['closed']\n }], closedStart: [{\n type: Output\n }], onPositionChanged: [{\n type: Output,\n args: ['positionChanged']\n }], _content: [{\n type: ViewChild,\n args: ['content']\n }] } });\n/**\n * `` component.\n *\n * This is the parent component to one or two ``s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\nclass MatDrawerContainer {\n constructor(_dir, _element, _ngZone, _changeDetectorRef, viewportRuler, defaultAutosize = false, _animationMode) {\n this._dir = _dir;\n this._element = _element;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** Drawers that belong to this container. */\n this._drawers = new QueryList();\n /** Event emitted when the drawer backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n this._doCheckSubject = new Subject();\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n this._contentMargins = { left: null, right: null };\n this._contentMarginChanges = new Subject();\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler\n .change()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n this._autosize = defaultAutosize;\n }\n /** The drawer child with the `start` position. */\n get start() {\n return this._start;\n }\n /** The drawer child with the `end` position. */\n get end() {\n return this._end;\n }\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n get autosize() {\n return this._autosize;\n }\n set autosize(value) {\n this._autosize = coerceBooleanProperty(value);\n }\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n get hasBackdrop() {\n if (this._backdropOverride == null) {\n return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n }\n return this._backdropOverride;\n }\n set hasBackdrop(value) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable() {\n return this._userContent || this._content;\n }\n ngAfterContentInit() {\n this._allDrawers.changes\n .pipe(startWith(this._allDrawers), takeUntil(this._destroyed))\n .subscribe((drawer) => {\n this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n this._drawers.notifyOnChanges();\n });\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n this._drawers.forEach((drawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n if (!this._drawers.length ||\n this._isDrawerOpen(this._start) ||\n this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n this._changeDetectorRef.markForCheck();\n });\n // Avoid hitting the NgZone through the debounce timeout.\n this._ngZone.runOutsideAngular(() => {\n this._doCheckSubject\n .pipe(debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n });\n }\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._drawers.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Calls `open` of both start and end drawers */\n open() {\n this._drawers.forEach(drawer => drawer.open());\n }\n /** Calls `close` of both start and end drawers */\n close() {\n this._drawers.forEach(drawer => drawer.close());\n }\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._getWidth();\n }\n else if (this._left.mode == 'push') {\n const width = this._left._getWidth();\n left += width;\n right -= width;\n }\n }\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._getWidth();\n }\n else if (this._right.mode == 'push') {\n const width = this._right._getWidth();\n right += width;\n left -= width;\n }\n }\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null;\n right = right || null;\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = { left, right };\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n _watchDrawerToggle(drawer) {\n drawer._animationStarted\n .pipe(filter((event) => event.fromState !== event.toState), takeUntil(this._drawers.changes))\n .subscribe((event) => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n if (drawer.mode !== 'side') {\n drawer.openedChange\n .pipe(takeUntil(this._drawers.changes))\n .subscribe(() => this._setContainerClass(drawer.opened));\n }\n }\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n _watchDrawerPosition(drawer) {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n /** Subscribes to changes in drawer mode so we can run change detection. */\n _watchDrawerMode(drawer) {\n if (drawer) {\n drawer._modeChanged\n .pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n .subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n _setContainerClass(isAdd) {\n const classList = this._element.nativeElement.classList;\n const className = 'mat-drawer-container-has-open';\n if (isAdd) {\n classList.add(className);\n }\n else {\n classList.remove(className);\n }\n }\n /** Validate the state of the drawer children components. */\n _validateDrawers() {\n this._start = this._end = null;\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n }\n else {\n if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n this._right = this._left = null;\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n }\n else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n /** Whether the container is being pushed to the side by one of the drawers. */\n _isPushed() {\n return ((this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n (this._isDrawerOpen(this._end) && this._end.mode != 'over'));\n }\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawersViaBackdrop();\n }\n _closeModalDrawersViaBackdrop() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n .forEach(drawer => drawer._closeViaBackdropClick());\n }\n _isShowingBackdrop() {\n return ((this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end)));\n }\n _canHaveBackdrop(drawer) {\n return drawer.mode !== 'side' || !!this._backdropOverride;\n }\n _isDrawerOpen(drawer) {\n return drawer != null && drawer.opened;\n }\n}\nMatDrawerContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawerContainer, deps: [{ token: i4.Directionality, optional: true }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: MAT_DRAWER_DEFAULT_AUTOSIZE }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatDrawerContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatDrawerContainer, selector: \"mat-drawer-container\", inputs: { autosize: \"autosize\", hasBackdrop: \"hasBackdrop\" }, outputs: { backdropClick: \"backdropClick\" }, host: { properties: { \"class.mat-drawer-container-explicit-backdrop\": \"_backdropOverride\" }, classAttribute: \"mat-drawer-container\" }, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer,\n },\n ], queries: [{ propertyName: \"_content\", first: true, predicate: MatDrawerContent, descendants: true }, { propertyName: \"_allDrawers\", predicate: MatDrawer, descendants: true }], viewQueries: [{ propertyName: \"_userContent\", first: true, predicate: MatDrawerContent, descendants: true }], exportAs: [\"matDrawerContainer\"], ngImport: i0, template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\"], dependencies: [{ kind: \"directive\", type: i5.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: MatDrawerContent, selector: \"mat-drawer-content\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawerContainer, decorators: [{\n type: Component,\n args: [{ selector: 'mat-drawer-container', exportAs: 'matDrawerContainer', host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer,\n },\n ], template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\"] }]\n }], ctorParameters: function () { return [{ type: i4.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DRAWER_DEFAULT_AUTOSIZE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { _allDrawers: [{\n type: ContentChildren,\n args: [MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatDrawerContent]\n }], _userContent: [{\n type: ViewChild,\n args: [MatDrawerContent]\n }], autosize: [{\n type: Input\n }], hasBackdrop: [{\n type: Input\n }], backdropClick: [{\n type: Output\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 */\nclass MatSidenavContent extends MatDrawerContent {\n constructor(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n}\nMatSidenavContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavContent, deps: [{ token: i0.ChangeDetectorRef }, { token: forwardRef(() => MatSidenavContainer) }, { token: i0.ElementRef }, { token: i1.ScrollDispatcher }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nMatSidenavContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatSidenavContent, selector: \"mat-sidenav-content\", host: { properties: { \"style.margin-left.px\": \"_container._contentMargins.left\", \"style.margin-right.px\": \"_container._contentMargins.right\" }, classAttribute: \"mat-drawer-content mat-sidenav-content\" }, providers: [\n {\n provide: CdkScrollable,\n useExisting: MatSidenavContent,\n },\n ], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavContent, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-content',\n template: '',\n host: {\n 'class': 'mat-drawer-content mat-sidenav-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: CdkScrollable,\n useExisting: MatSidenavContent,\n },\n ],\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: MatSidenavContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatSidenavContainer)]\n }] }, { type: i0.ElementRef }, { type: i1.ScrollDispatcher }, { type: i0.NgZone }]; } });\nclass MatSidenav extends MatDrawer {\n constructor() {\n super(...arguments);\n this._fixedInViewport = false;\n this._fixedTopGap = 0;\n this._fixedBottomGap = 0;\n }\n /** Whether the sidenav is fixed in the viewport. */\n get fixedInViewport() {\n return this._fixedInViewport;\n }\n set fixedInViewport(value) {\n this._fixedInViewport = coerceBooleanProperty(value);\n }\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n get fixedTopGap() {\n return this._fixedTopGap;\n }\n set fixedTopGap(value) {\n this._fixedTopGap = coerceNumberProperty(value);\n }\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n get fixedBottomGap() {\n return this._fixedBottomGap;\n }\n set fixedBottomGap(value) {\n this._fixedBottomGap = coerceNumberProperty(value);\n }\n}\nMatSidenav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenav, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatSidenav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatSidenav, selector: \"mat-sidenav\", inputs: { fixedInViewport: \"fixedInViewport\", fixedTopGap: \"fixedTopGap\", fixedBottomGap: \"fixedBottomGap\" }, host: { attributes: { \"tabIndex\": \"-1\" }, properties: { \"attr.align\": \"null\", \"class.mat-drawer-end\": \"position === \\\"end\\\"\", \"class.mat-drawer-over\": \"mode === \\\"over\\\"\", \"class.mat-drawer-push\": \"mode === \\\"push\\\"\", \"class.mat-drawer-side\": \"mode === \\\"side\\\"\", \"class.mat-drawer-opened\": \"opened\", \"class.mat-sidenav-fixed\": \"fixedInViewport\", \"style.top.px\": \"fixedInViewport ? fixedTopGap : null\", \"style.bottom.px\": \"fixedInViewport ? fixedBottomGap : null\" }, classAttribute: \"mat-drawer mat-sidenav\" }, exportAs: [\"matSidenav\"], usesInheritance: true, ngImport: i0, template: \"
\\r\\n \\r\\n
\\r\\n\", dependencies: [{ kind: \"directive\", type: i1.CdkScrollable, selector: \"[cdk-scrollable], [cdkScrollable]\" }], animations: [matDrawerAnimations.transformDrawer], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenav, decorators: [{\n type: Component,\n args: [{ selector: 'mat-sidenav', exportAs: 'matSidenav', animations: [matDrawerAnimations.transformDrawer], host: {\n 'class': 'mat-drawer mat-sidenav',\n 'tabIndex': '-1',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n '[class.mat-sidenav-fixed]': 'fixedInViewport',\n '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\r\\n \\r\\n
\\r\\n\" }]\n }], propDecorators: { fixedInViewport: [{\n type: Input\n }], fixedTopGap: [{\n type: Input\n }], fixedBottomGap: [{\n type: Input\n }] } });\nclass MatSidenavContainer extends MatDrawerContainer {\n}\nMatSidenavContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavContainer, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatSidenavContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatSidenavContainer, selector: \"mat-sidenav-container\", host: { properties: { \"class.mat-drawer-container-explicit-backdrop\": \"_backdropOverride\" }, classAttribute: \"mat-drawer-container mat-sidenav-container\" }, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer,\n },\n ], queries: [{ propertyName: \"_content\", first: true, predicate: MatSidenavContent, descendants: true }, { propertyName: \"_allDrawers\", predicate: MatSidenav, descendants: true }], exportAs: [\"matSidenavContainer\"], usesInheritance: true, ngImport: i0, template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\"], dependencies: [{ kind: \"directive\", type: i5.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: MatSidenavContent, selector: \"mat-sidenav-content\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavContainer, decorators: [{\n type: Component,\n args: [{ selector: 'mat-sidenav-container', exportAs: 'matSidenavContainer', host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer,\n },\n ], template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\"] }]\n }], propDecorators: { _allDrawers: [{\n type: ContentChildren,\n args: [MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatSidenavContent]\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 */\nclass MatSidenavModule {\n}\nMatSidenavModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatSidenavModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavModule, declarations: [MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent], imports: [CommonModule, MatCommonModule, CdkScrollableModule], exports: [CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent] });\nMatSidenavModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavModule, imports: [CommonModule, MatCommonModule, CdkScrollableModule, CdkScrollableModule,\n MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule, CdkScrollableModule],\n exports: [\n CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n declarations: [\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\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/**\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DRAWER_DEFAULT_AUTOSIZE, MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent, MatSidenavModule, matDrawerAnimations, throwMatDuplicatedDrawerError };\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport * as i1 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey, SPACE, ENTER } from '@angular/cdk/keycodes';\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, EventEmitter, forwardRef, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, Optional, ContentChild, ViewChild, Input, Output, QueryList, ContentChildren, NgModule } from '@angular/core';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { Subject, of } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\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 */\nclass CdkStepHeader {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n /** Focuses the step header. */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n}\nCdkStepHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepHeader, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepHeader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStepHeader, selector: \"[cdkStepHeader]\", host: { attributes: { \"role\": \"tab\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepHeader, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepHeader]',\n host: {\n 'role': 'tab',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\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 */\nclass CdkStepLabel {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkStepLabel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepLabel, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepLabel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStepLabel, selector: \"[cdkStepLabel]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepLabel, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepLabel]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\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 unique ID for each stepper component. */\nlet nextId = 0;\n/** Change event emitted on selection changes. */\nclass StepperSelectionEvent {\n}\n/** Enum to represent the different states of the steps. */\nconst STEP_STATE = {\n NUMBER: 'number',\n EDIT: 'edit',\n DONE: 'done',\n ERROR: 'error',\n};\n/** InjectionToken that can be used to specify the global stepper options. */\nconst STEPPER_GLOBAL_OPTIONS = new InjectionToken('STEPPER_GLOBAL_OPTIONS');\nclass CdkStep {\n constructor(_stepper, stepperOptions) {\n this._stepper = _stepper;\n /** Whether user has attempted to move away from the step. */\n this.interacted = false;\n /** Emits when the user has attempted to move away from the step. */\n this.interactedStream = new EventEmitter();\n this._editable = true;\n this._optional = false;\n this._completedOverride = null;\n this._customError = null;\n this._stepperOptions = stepperOptions ? stepperOptions : {};\n this._displayDefaultIndicatorType = this._stepperOptions.displayDefaultIndicatorType !== false;\n }\n /** Whether the user can return to this step once it has been marked as completed. */\n get editable() {\n return this._editable;\n }\n set editable(value) {\n this._editable = coerceBooleanProperty(value);\n }\n /** Whether the completion of step is optional. */\n get optional() {\n return this._optional;\n }\n set optional(value) {\n this._optional = coerceBooleanProperty(value);\n }\n /** Whether step is marked as completed. */\n get completed() {\n return this._completedOverride == null ? this._getDefaultCompleted() : this._completedOverride;\n }\n set completed(value) {\n this._completedOverride = coerceBooleanProperty(value);\n }\n _getDefaultCompleted() {\n return this.stepControl ? this.stepControl.valid && this.interacted : this.interacted;\n }\n /** Whether step has an error. */\n get hasError() {\n return this._customError == null ? this._getDefaultError() : this._customError;\n }\n set hasError(value) {\n this._customError = coerceBooleanProperty(value);\n }\n _getDefaultError() {\n return this.stepControl && this.stepControl.invalid && this.interacted;\n }\n /** Selects this step component. */\n select() {\n this._stepper.selected = this;\n }\n /** Resets the step to its initial state. Note that this includes resetting form data. */\n reset() {\n this.interacted = false;\n if (this._completedOverride != null) {\n this._completedOverride = false;\n }\n if (this._customError != null) {\n this._customError = false;\n }\n if (this.stepControl) {\n this.stepControl.reset();\n }\n }\n ngOnChanges() {\n // Since basically all inputs of the MatStep get proxied through the view down to the\n // underlying MatStepHeader, we have to make sure that change detection runs correctly.\n this._stepper._stateChanged();\n }\n _markAsInteracted() {\n if (!this.interacted) {\n this.interacted = true;\n this.interactedStream.emit(this);\n }\n }\n /** Determines whether the error state can be shown. */\n _showError() {\n // We want to show the error state either if the user opted into/out of it using the\n // global options, or if they've explicitly set it through the `hasError` input.\n return this._stepperOptions.showError ?? this._customError != null;\n }\n}\nCdkStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStep, deps: [{ token: forwardRef(() => CdkStepper) }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nCdkStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStep, selector: \"cdk-step\", inputs: { stepControl: \"stepControl\", label: \"label\", errorMessage: \"errorMessage\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], state: \"state\", editable: \"editable\", optional: \"optional\", completed: \"completed\", hasError: \"hasError\" }, outputs: { interactedStream: \"interacted\" }, queries: [{ propertyName: \"stepLabel\", first: true, predicate: CdkStepLabel, descendants: true }], viewQueries: [{ propertyName: \"content\", first: true, predicate: TemplateRef, descendants: true, static: true }], exportAs: [\"cdkStep\"], usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStep, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-step',\n exportAs: 'cdkStep',\n template: '',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }], ctorParameters: function () { return [{ type: CdkStepper, decorators: [{\n type: Inject,\n args: [forwardRef(() => CdkStepper)]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [STEPPER_GLOBAL_OPTIONS]\n }] }]; }, propDecorators: { stepLabel: [{\n type: ContentChild,\n args: [CdkStepLabel]\n }], content: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }], stepControl: [{\n type: Input\n }], interactedStream: [{\n type: Output,\n args: ['interacted']\n }], label: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], state: [{\n type: Input\n }], editable: [{\n type: Input\n }], optional: [{\n type: Input\n }], completed: [{\n type: Input\n }], hasError: [{\n type: Input\n }] } });\nclass CdkStepper {\n constructor(_dir, _changeDetectorRef, _elementRef) {\n this._dir = _dir;\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Steps that belong to the current stepper, excluding ones from nested steppers. */\n this.steps = new QueryList();\n /** List of step headers sorted based on their DOM order. */\n this._sortedHeaders = new QueryList();\n this._linear = false;\n this._selectedIndex = 0;\n /** Event emitted when the selected step has changed. */\n this.selectionChange = new EventEmitter();\n this._orientation = 'horizontal';\n this._groupId = nextId++;\n }\n /** Whether the validity of previous steps should be checked or not. */\n get linear() {\n return this._linear;\n }\n set linear(value) {\n this._linear = coerceBooleanProperty(value);\n }\n /** The index of the selected step. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(index) {\n const newIndex = coerceNumberProperty(index);\n if (this.steps && this._steps) {\n // Ensure that the index can't be out of bounds.\n if (!this._isValidIndex(newIndex) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('cdkStepper: Cannot assign out-of-bounds value to `selectedIndex`.');\n }\n this.selected?._markAsInteracted();\n if (this._selectedIndex !== newIndex &&\n !this._anyControlsInvalidOrPending(newIndex) &&\n (newIndex >= this._selectedIndex || this.steps.toArray()[newIndex].editable)) {\n this._updateSelectedItemIndex(newIndex);\n }\n }\n else {\n this._selectedIndex = newIndex;\n }\n }\n /** The step that is selected. */\n get selected() {\n return this.steps ? this.steps.toArray()[this.selectedIndex] : undefined;\n }\n set selected(step) {\n this.selectedIndex = step && this.steps ? this.steps.toArray().indexOf(step) : -1;\n }\n /** Orientation of the stepper. */\n get orientation() {\n return this._orientation;\n }\n set orientation(value) {\n // This is a protected method so that `MatStepper` can hook into it.\n this._orientation = value;\n if (this._keyManager) {\n this._keyManager.withVerticalOrientation(value === 'vertical');\n }\n }\n ngAfterContentInit() {\n this._steps.changes\n .pipe(startWith(this._steps), takeUntil(this._destroyed))\n .subscribe((steps) => {\n this.steps.reset(steps.filter(step => step._stepper === this));\n this.steps.notifyOnChanges();\n });\n }\n ngAfterViewInit() {\n // If the step headers are defined outside of the `ngFor` that renders the steps, like in the\n // Material stepper, they won't appear in the `QueryList` in the same order as they're\n // rendered in the DOM which will lead to incorrect keyboard navigation. We need to sort\n // them manually to ensure that they're correct. Alternatively, we can change the Material\n // template to inline the headers in the `ngFor`, but that'll result in a lot of\n // code duplication. See #23539.\n this._stepHeader.changes\n .pipe(startWith(this._stepHeader), takeUntil(this._destroyed))\n .subscribe((headers) => {\n this._sortedHeaders.reset(headers.toArray().sort((a, b) => {\n const documentPosition = a._elementRef.nativeElement.compareDocumentPosition(b._elementRef.nativeElement);\n // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // tslint:disable-next-line:no-bitwise\n return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n }));\n this._sortedHeaders.notifyOnChanges();\n });\n // Note that while the step headers are content children by default, any components that\n // extend this one might have them as view children. We initialize the keyboard handling in\n // AfterViewInit so we're guaranteed for both view and content children to be defined.\n this._keyManager = new FocusKeyManager(this._sortedHeaders)\n .withWrap()\n .withHomeAndEnd()\n .withVerticalOrientation(this._orientation === 'vertical');\n (this._dir ? this._dir.change : of())\n .pipe(startWith(this._layoutDirection()), takeUntil(this._destroyed))\n .subscribe(direction => this._keyManager.withHorizontalOrientation(direction));\n this._keyManager.updateActiveItem(this._selectedIndex);\n // No need to `takeUntil` here, because we're the ones destroying `steps`.\n this.steps.changes.subscribe(() => {\n if (!this.selected) {\n this._selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n });\n // The logic which asserts that the selected index is within bounds doesn't run before the\n // steps are initialized, because we don't how many steps there are yet so we may have an\n // invalid index on init. If that's the case, auto-correct to the default so we don't throw.\n if (!this._isValidIndex(this._selectedIndex)) {\n this._selectedIndex = 0;\n }\n }\n ngOnDestroy() {\n this.steps.destroy();\n this._sortedHeaders.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Selects and focuses the next step in list. */\n next() {\n this.selectedIndex = Math.min(this._selectedIndex + 1, this.steps.length - 1);\n }\n /** Selects and focuses the previous step in list. */\n previous() {\n this.selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n /** Resets the stepper to its initial state. Note that this includes clearing form data. */\n reset() {\n this._updateSelectedItemIndex(0);\n this.steps.forEach(step => step.reset());\n this._stateChanged();\n }\n /** Returns a unique id for each step label element. */\n _getStepLabelId(i) {\n return `cdk-step-label-${this._groupId}-${i}`;\n }\n /** Returns unique id for each step content element. */\n _getStepContentId(i) {\n return `cdk-step-content-${this._groupId}-${i}`;\n }\n /** Marks the component to be change detected. */\n _stateChanged() {\n this._changeDetectorRef.markForCheck();\n }\n /** Returns position state of the step with the given index. */\n _getAnimationDirection(index) {\n const position = index - this._selectedIndex;\n if (position < 0) {\n return this._layoutDirection() === 'rtl' ? 'next' : 'previous';\n }\n else if (position > 0) {\n return this._layoutDirection() === 'rtl' ? 'previous' : 'next';\n }\n return 'current';\n }\n /** Returns the type of icon to be displayed. */\n _getIndicatorType(index, state = STEP_STATE.NUMBER) {\n const step = this.steps.toArray()[index];\n const isCurrentStep = this._isCurrentStep(index);\n return step._displayDefaultIndicatorType\n ? this._getDefaultIndicatorLogic(step, isCurrentStep)\n : this._getGuidelineLogic(step, isCurrentStep, state);\n }\n _getDefaultIndicatorLogic(step, isCurrentStep) {\n if (step._showError() && step.hasError && !isCurrentStep) {\n return STEP_STATE.ERROR;\n }\n else if (!step.completed || isCurrentStep) {\n return STEP_STATE.NUMBER;\n }\n else {\n return step.editable ? STEP_STATE.EDIT : STEP_STATE.DONE;\n }\n }\n _getGuidelineLogic(step, isCurrentStep, state = STEP_STATE.NUMBER) {\n if (step._showError() && step.hasError && !isCurrentStep) {\n return STEP_STATE.ERROR;\n }\n else if (step.completed && !isCurrentStep) {\n return STEP_STATE.DONE;\n }\n else if (step.completed && isCurrentStep) {\n return state;\n }\n else if (step.editable && isCurrentStep) {\n return STEP_STATE.EDIT;\n }\n else {\n return state;\n }\n }\n _isCurrentStep(index) {\n return this._selectedIndex === index;\n }\n /** Returns the index of the currently-focused step header. */\n _getFocusIndex() {\n return this._keyManager ? this._keyManager.activeItemIndex : this._selectedIndex;\n }\n _updateSelectedItemIndex(newIndex) {\n const stepsArray = this.steps.toArray();\n this.selectionChange.emit({\n selectedIndex: newIndex,\n previouslySelectedIndex: this._selectedIndex,\n selectedStep: stepsArray[newIndex],\n previouslySelectedStep: stepsArray[this._selectedIndex],\n });\n // If focus is inside the stepper, move it to the next header, otherwise it may become\n // lost when the active step content is hidden. We can't be more granular with the check\n // (e.g. checking whether focus is inside the active step), because we don't have a\n // reference to the elements that are rendering out the content.\n this._containsFocus()\n ? this._keyManager.setActiveItem(newIndex)\n : this._keyManager.updateActiveItem(newIndex);\n this._selectedIndex = newIndex;\n this._stateChanged();\n }\n _onKeydown(event) {\n const hasModifier = hasModifierKey(event);\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n if (manager.activeItemIndex != null &&\n !hasModifier &&\n (keyCode === SPACE || keyCode === ENTER)) {\n this.selectedIndex = manager.activeItemIndex;\n event.preventDefault();\n }\n else {\n manager.onKeydown(event);\n }\n }\n _anyControlsInvalidOrPending(index) {\n if (this._linear && index >= 0) {\n return this.steps\n .toArray()\n .slice(0, index)\n .some(step => {\n const control = step.stepControl;\n const isIncomplete = control\n ? control.invalid || control.pending || !step.interacted\n : !step.completed;\n return isIncomplete && !step.optional && !step._completedOverride;\n });\n }\n return false;\n }\n _layoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Checks whether the stepper contains the focused element. */\n _containsFocus() {\n const stepperElement = this._elementRef.nativeElement;\n const focusedElement = _getFocusedElementPierceShadowDom();\n return stepperElement === focusedElement || stepperElement.contains(focusedElement);\n }\n /** Checks whether the passed-in index is a valid step index. */\n _isValidIndex(index) {\n return index > -1 && (!this.steps || index < this.steps.length);\n }\n}\nCdkStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepper, deps: [{ token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStepper, selector: \"[cdkStepper]\", inputs: { linear: \"linear\", selectedIndex: \"selectedIndex\", selected: \"selected\", orientation: \"orientation\" }, outputs: { selectionChange: \"selectionChange\" }, queries: [{ propertyName: \"_steps\", predicate: CdkStep, descendants: true }, { propertyName: \"_stepHeader\", predicate: CdkStepHeader, descendants: true }], exportAs: [\"cdkStepper\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepper, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepper]',\n exportAs: 'cdkStepper',\n }]\n }], ctorParameters: function () { return [{ type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { _steps: [{\n type: ContentChildren,\n args: [CdkStep, { descendants: true }]\n }], _stepHeader: [{\n type: ContentChildren,\n args: [CdkStepHeader, { descendants: true }]\n }], linear: [{\n type: Input\n }], selectedIndex: [{\n type: Input\n }], selected: [{\n type: Input\n }], selectionChange: [{\n type: Output\n }], orientation: [{\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/** Button that moves to the next step in a stepper workflow. */\nclass CdkStepperNext {\n constructor(_stepper) {\n this._stepper = _stepper;\n /** Type of the next button. Defaults to \"submit\" if not specified. */\n this.type = 'submit';\n }\n}\nCdkStepperNext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperNext, deps: [{ token: CdkStepper }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepperNext.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStepperNext, selector: \"button[cdkStepperNext]\", inputs: { type: \"type\" }, host: { listeners: { \"click\": \"_stepper.next()\" }, properties: { \"type\": \"type\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperNext, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[cdkStepperNext]',\n host: {\n '[type]': 'type',\n '(click)': '_stepper.next()',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkStepper }]; }, propDecorators: { type: [{\n type: Input\n }] } });\n/** Button that moves to the previous step in a stepper workflow. */\nclass CdkStepperPrevious {\n constructor(_stepper) {\n this._stepper = _stepper;\n /** Type of the previous button. Defaults to \"button\" if not specified. */\n this.type = 'button';\n }\n}\nCdkStepperPrevious.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperPrevious, deps: [{ token: CdkStepper }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepperPrevious.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStepperPrevious, selector: \"button[cdkStepperPrevious]\", inputs: { type: \"type\" }, host: { listeners: { \"click\": \"_stepper.previous()\" }, properties: { \"type\": \"type\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperPrevious, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[cdkStepperPrevious]',\n host: {\n '[type]': 'type',\n '(click)': '_stepper.previous()',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkStepper }]; }, propDecorators: { type: [{\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 */\nclass CdkStepperModule {\n}\nCdkStepperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCdkStepperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperModule, declarations: [CdkStep,\n CdkStepper,\n CdkStepHeader,\n CdkStepLabel,\n CdkStepperNext,\n CdkStepperPrevious], imports: [BidiModule], exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious] });\nCdkStepperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperModule, imports: [BidiModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [BidiModule],\n exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious],\n declarations: [\n CdkStep,\n CdkStepper,\n CdkStepHeader,\n CdkStepLabel,\n CdkStepperNext,\n CdkStepperPrevious,\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/**\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkStep, CdkStepHeader, CdkStepLabel, CdkStepper, CdkStepperModule, CdkStepperNext, CdkStepperPrevious, STEPPER_GLOBAL_OPTIONS, STEP_STATE, StepperSelectionEvent };\n","import * as i2$1 from '@angular/cdk/portal';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { CdkStepLabel, CdkStepHeader, CdkStep, STEPPER_GLOBAL_OPTIONS, CdkStepper, CdkStepperNext, CdkStepperPrevious, CdkStepperModule } from '@angular/cdk/stepper';\nimport * as i3 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Directive, Injectable, Optional, SkipSelf, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, forwardRef, Inject, ContentChild, QueryList, EventEmitter, ViewChildren, ContentChildren, Output, NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport * as i1 from '@angular/material/core';\nimport { mixinColor, ErrorStateMatcher, MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport * as i4 from '@angular/material/icon';\nimport { MatIconModule } from '@angular/material/icon';\nimport * as i2 from '@angular/cdk/a11y';\nimport { Subject, Subscription } from 'rxjs';\nimport * as i3$1 from '@angular/cdk/bidi';\nimport { switchMap, map, startWith, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\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 */\nclass MatStepLabel extends CdkStepLabel {\n}\nMatStepLabel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepLabel, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatStepLabel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepLabel, selector: \"[matStepLabel]\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepLabel, decorators: [{\n type: Directive,\n args: [{\n selector: '[matStepLabel]',\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/** Stepper data that is required for internationalization. */\nclass MatStepperIntl {\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 /** Label that is rendered below optional steps. */\n this.optionalLabel = 'Optional';\n /** Label that is used to indicate step as completed to screen readers. */\n this.completedLabel = 'Completed';\n /** Label that is used to indicate step as editable to screen readers. */\n this.editableLabel = 'Editable';\n }\n}\nMatStepperIntl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMatStepperIntl.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperIntl, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperIntl, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n/** @docs-private */\nfunction MAT_STEPPER_INTL_PROVIDER_FACTORY(parentIntl) {\n return parentIntl || new MatStepperIntl();\n}\n/** @docs-private */\nconst MAT_STEPPER_INTL_PROVIDER = {\n provide: MatStepperIntl,\n deps: [[new Optional(), new SkipSelf(), MatStepperIntl]],\n useFactory: MAT_STEPPER_INTL_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 */\n// Boilerplate for applying mixins to MatStepHeader.\n/** @docs-private */\nconst _MatStepHeaderBase = mixinColor(class MatStepHeaderBase extends CdkStepHeader {\n constructor(elementRef) {\n super(elementRef);\n }\n}, 'primary');\nclass MatStepHeader extends _MatStepHeaderBase {\n constructor(_intl, _focusMonitor, _elementRef, changeDetectorRef) {\n super(_elementRef);\n this._intl = _intl;\n this._focusMonitor = _focusMonitor;\n this._intlSubscription = _intl.changes.subscribe(() => changeDetectorRef.markForCheck());\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true);\n }\n ngOnDestroy() {\n this._intlSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n /** Focuses the step header. */\n focus(origin, options) {\n if (origin) {\n this._focusMonitor.focusVia(this._elementRef, origin, options);\n }\n else {\n this._elementRef.nativeElement.focus(options);\n }\n }\n /** Returns string label of given step if it is a text label. */\n _stringLabel() {\n return this.label instanceof MatStepLabel ? null : this.label;\n }\n /** Returns MatStepLabel if the label of given step is a template label. */\n _templateLabel() {\n return this.label instanceof MatStepLabel ? this.label : null;\n }\n /** Returns the host HTML element. */\n _getHostElement() {\n return this._elementRef.nativeElement;\n }\n /** Template context variables that are exposed to the `matStepperIcon` instances. */\n _getIconContext() {\n return {\n index: this.index,\n active: this.active,\n optional: this.optional,\n };\n }\n _getDefaultTextForState(state) {\n if (state == 'number') {\n return `${this.index + 1}`;\n }\n if (state == 'edit') {\n return 'create';\n }\n if (state == 'error') {\n return 'warning';\n }\n return state;\n }\n}\nMatStepHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepHeader, deps: [{ token: MatStepperIntl }, { token: i2.FocusMonitor }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nMatStepHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepHeader, selector: \"mat-step-header\", inputs: { color: \"color\", state: \"state\", label: \"label\", errorMessage: \"errorMessage\", iconOverrides: \"iconOverrides\", index: \"index\", selected: \"selected\", active: \"active\", optional: \"optional\", disableRipple: \"disableRipple\" }, host: { attributes: { \"role\": \"tab\" }, classAttribute: \"mat-step-header\" }, usesInheritance: true, ngImport: i0, template: \"
\\n\\n
\\n
\\n \\n \\n {{_getDefaultTextForState(state)}}\\n {{_intl.completedLabel}}\\n {{_intl.editableLabel}}\\n {{_getDefaultTextForState(state)}}\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n \\n
{{label}}
\\n\\n
{{_intl.optionalLabel}}
\\n
{{errorMessage}}
\\n
\\n\\n\", styles: [\".mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-step-header:focus .mat-focus-indicator::before{content:\\\"\\\"}.cdk-high-contrast-active .mat-step-header{outline:solid 1px}.cdk-high-contrast-active .mat-step-header[aria-selected=true] .mat-step-label{text-decoration:underline}.mat-step-optional,.mat-step-sub-label-error{font-size:12px}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative}.mat-step-icon-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);display:flex}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\"], dependencies: [{ kind: \"directive\", type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i3.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i3.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i3.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i3.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"component\", type: i4.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"directive\", type: i1.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-step-header', inputs: ['color'], host: {\n 'class': 'mat-step-header',\n 'role': 'tab',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"
\\n\\n
\\n
\\n \\n \\n {{_getDefaultTextForState(state)}}\\n {{_intl.completedLabel}}\\n {{_intl.editableLabel}}\\n {{_getDefaultTextForState(state)}}\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n \\n
{{label}}
\\n\\n
{{_intl.optionalLabel}}
\\n
{{errorMessage}}
\\n
\\n\\n\", styles: [\".mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-step-header:focus .mat-focus-indicator::before{content:\\\"\\\"}.cdk-high-contrast-active .mat-step-header{outline:solid 1px}.cdk-high-contrast-active .mat-step-header[aria-selected=true] .mat-step-label{text-decoration:underline}.mat-step-optional,.mat-step-sub-label-error{font-size:12px}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative}.mat-step-icon-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);display:flex}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\"] }]\n }], ctorParameters: function () { return [{ type: MatStepperIntl }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { state: [{\n type: Input\n }], label: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], iconOverrides: [{\n type: Input\n }], index: [{\n type: Input\n }], selected: [{\n type: Input\n }], active: [{\n type: Input\n }], optional: [{\n type: Input\n }], disableRipple: [{\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 */\nconst DEFAULT_HORIZONTAL_ANIMATION_DURATION = '500ms';\nconst DEFAULT_VERTICAL_ANIMATION_DURATION = '225ms';\n/**\n * Animations used by the Material steppers.\n * @docs-private\n */\nconst matStepperAnimations = {\n /** Animation that transitions the step along the X axis in a horizontal stepper. */\n horizontalStepTransition: trigger('horizontalStepTransition', [\n state('previous', style({ transform: 'translate3d(-100%, 0, 0)', visibility: 'hidden' })),\n // Transition to `inherit`, rather than `visible`,\n // because visibility on a child element the one from the parent,\n // making this element focusable inside of a `hidden` element.\n state('current', style({ transform: 'none', visibility: 'inherit' })),\n state('next', style({ transform: 'translate3d(100%, 0, 0)', visibility: 'hidden' })),\n transition('* => *', animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)'), {\n params: { 'animationDuration': DEFAULT_HORIZONTAL_ANIMATION_DURATION },\n }),\n ]),\n /** Animation that transitions the step along the Y axis in a vertical stepper. */\n verticalStepTransition: trigger('verticalStepTransition', [\n state('previous', style({ height: '0px', visibility: 'hidden' })),\n state('next', style({ height: '0px', visibility: 'hidden' })),\n // Transition to `inherit`, rather than `visible`,\n // because visibility on a child element the one from the parent,\n // making this element focusable inside of a `hidden` element.\n state('current', style({ height: '*', visibility: 'inherit' })),\n transition('* <=> current', animate('{{animationDuration}} cubic-bezier(0.4, 0.0, 0.2, 1)'), {\n params: { 'animationDuration': DEFAULT_VERTICAL_ANIMATION_DURATION },\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 * Template to be used to override the icons inside the step header.\n */\nclass MatStepperIcon {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nMatStepperIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperIcon, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatStepperIcon.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepperIcon, selector: \"ng-template[matStepperIcon]\", inputs: { name: [\"matStepperIcon\", \"name\"] }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperIcon, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[matStepperIcon]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; }, propDecorators: { name: [{\n type: Input,\n args: ['matStepperIcon']\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 * Content for a `mat-step` that will be rendered lazily.\n */\nclass MatStepContent {\n constructor(_template) {\n this._template = _template;\n }\n}\nMatStepContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepContent, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatStepContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepContent, selector: \"ng-template[matStepContent]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepContent, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[matStepContent]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\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 */\nclass MatStep extends CdkStep {\n constructor(stepper, _errorStateMatcher, _viewContainerRef, stepperOptions) {\n super(stepper, stepperOptions);\n this._errorStateMatcher = _errorStateMatcher;\n this._viewContainerRef = _viewContainerRef;\n this._isSelected = Subscription.EMPTY;\n }\n ngAfterContentInit() {\n this._isSelected = this._stepper.steps.changes\n .pipe(switchMap(() => {\n return this._stepper.selectionChange.pipe(map(event => event.selectedStep === this), startWith(this._stepper.selected === this));\n }))\n .subscribe(isSelected => {\n if (isSelected && this._lazyContent && !this._portal) {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n }\n });\n }\n ngOnDestroy() {\n this._isSelected.unsubscribe();\n }\n /** Custom error state matcher that additionally checks for validity of interacted form. */\n isErrorState(control, form) {\n const originalErrorState = this._errorStateMatcher.isErrorState(control, form);\n // Custom error state checks for the validity of form that is not submitted or touched\n // since user can trigger a form change by calling for another step without directly\n // interacting with the current form.\n const customErrorState = !!(control && control.invalid && this.interacted);\n return originalErrorState || customErrorState;\n }\n}\nMatStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStep, deps: [{ token: forwardRef(() => MatStepper) }, { token: i1.ErrorStateMatcher, skipSelf: true }, { token: i0.ViewContainerRef }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStep, selector: \"mat-step\", inputs: { color: \"color\" }, providers: [\n { provide: ErrorStateMatcher, useExisting: MatStep },\n { provide: CdkStep, useExisting: MatStep },\n ], queries: [{ propertyName: \"stepLabel\", first: true, predicate: MatStepLabel, descendants: true }, { propertyName: \"_lazyContent\", first: true, predicate: MatStepContent, descendants: true }], exportAs: [\"matStep\"], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i2$1.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStep, decorators: [{\n type: Component,\n args: [{ selector: 'mat-step', providers: [\n { provide: ErrorStateMatcher, useExisting: MatStep },\n { provide: CdkStep, useExisting: MatStep },\n ], encapsulation: ViewEncapsulation.None, exportAs: 'matStep', changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n \\n \\n\\n\" }]\n }], ctorParameters: function () { return [{ type: MatStepper, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatStepper)]\n }] }, { type: i1.ErrorStateMatcher, decorators: [{\n type: SkipSelf\n }] }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [STEPPER_GLOBAL_OPTIONS]\n }] }]; }, propDecorators: { stepLabel: [{\n type: ContentChild,\n args: [MatStepLabel]\n }], color: [{\n type: Input\n }], _lazyContent: [{\n type: ContentChild,\n args: [MatStepContent, { static: false }]\n }] } });\nclass MatStepper extends CdkStepper {\n constructor(dir, changeDetectorRef, elementRef) {\n super(dir, changeDetectorRef, elementRef);\n /** Steps that belong to the current stepper, excluding ones from nested steppers. */\n this.steps = new QueryList();\n /** Event emitted when the current step is done transitioning in. */\n this.animationDone = new EventEmitter();\n /**\n * Whether the label should display in bottom or end position.\n * Only applies in the `horizontal` orientation.\n */\n this.labelPosition = 'end';\n /**\n * Position of the stepper's header.\n * Only applies in the `horizontal` orientation.\n */\n this.headerPosition = 'top';\n /** Consumer-specified template-refs to be used to override the header icons. */\n this._iconOverrides = {};\n /** Stream of animation `done` events when the body expands/collapses. */\n this._animationDone = new Subject();\n this._animationDuration = '';\n const nodeName = elementRef.nativeElement.nodeName.toLowerCase();\n this.orientation = nodeName === 'mat-vertical-stepper' ? 'vertical' : 'horizontal';\n }\n /** Duration for the animation. Will be normalized to milliseconds if no units are set. */\n get animationDuration() {\n return this._animationDuration;\n }\n set animationDuration(value) {\n this._animationDuration = /^\\d+$/.test(value) ? value + 'ms' : value;\n }\n ngAfterContentInit() {\n super.ngAfterContentInit();\n this._icons.forEach(({ name, templateRef }) => (this._iconOverrides[name] = templateRef));\n // Mark the component for change detection whenever the content children query changes\n this.steps.changes.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._stateChanged();\n });\n this._animationDone\n .pipe(\n // This needs a `distinctUntilChanged` in order to avoid emitting the same event twice due\n // to a bug in animations where the `.done` callback gets invoked twice on some browsers.\n // See https://github.com/angular/angular/issues/24084\n distinctUntilChanged((x, y) => x.fromState === y.fromState && x.toState === y.toState), takeUntil(this._destroyed))\n .subscribe(event => {\n if (event.toState === 'current') {\n this.animationDone.emit();\n }\n });\n }\n _stepIsNavigable(index, step) {\n return step.completed || this.selectedIndex === index || !this.linear;\n }\n _getAnimationDuration() {\n if (this.animationDuration) {\n return this.animationDuration;\n }\n return this.orientation === 'horizontal'\n ? DEFAULT_HORIZONTAL_ANIMATION_DURATION\n : DEFAULT_VERTICAL_ANIMATION_DURATION;\n }\n}\nMatStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepper, deps: [{ token: i3$1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nMatStepper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepper, selector: \"mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]\", inputs: { selectedIndex: \"selectedIndex\", disableRipple: \"disableRipple\", color: \"color\", labelPosition: \"labelPosition\", headerPosition: \"headerPosition\", animationDuration: \"animationDuration\" }, outputs: { animationDone: \"animationDone\" }, host: { attributes: { \"role\": \"tablist\" }, properties: { \"class.mat-stepper-horizontal\": \"orientation === \\\"horizontal\\\"\", \"class.mat-stepper-vertical\": \"orientation === \\\"vertical\\\"\", \"class.mat-stepper-label-position-end\": \"orientation === \\\"horizontal\\\" && labelPosition == \\\"end\\\"\", \"class.mat-stepper-label-position-bottom\": \"orientation === \\\"horizontal\\\" && labelPosition == \\\"bottom\\\"\", \"class.mat-stepper-header-position-bottom\": \"headerPosition === \\\"bottom\\\"\", \"attr.aria-orientation\": \"orientation\" } }, providers: [{ provide: CdkStepper, useExisting: MatStepper }], queries: [{ propertyName: \"_steps\", predicate: MatStep, descendants: true }, { propertyName: \"_icons\", predicate: MatStepperIcon, descendants: true }], viewQueries: [{ propertyName: \"_stepHeader\", predicate: MatStepHeader, descendants: true }], exportAs: [\"matStepper\", \"matVerticalStepper\", \"matHorizontalStepper\"], usesInheritance: true, ngImport: i0, template: \"\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n\\n
\\n
\\n \\n
\\n
\\n
\\n\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n\\n\\n\\n \\n\\n\", styles: [\".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-header-position-bottom .mat-horizontal-stepper-header-container{order:1}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\\\"\\\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-wrapper{display:flex;flex-direction:column}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-inactive{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.cdk-high-contrast-active .mat-horizontal-content-container{outline:solid 1px}.mat-stepper-header-position-bottom .mat-horizontal-content-container{padding:24px 24px 0 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}.cdk-high-contrast-active .mat-vertical-content-container{outline:solid 1px}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\\\"\\\";position:absolute;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\"], dependencies: [{ kind: \"directive\", type: i3.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i3.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i3.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i3.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"component\", type: MatStepHeader, selector: \"mat-step-header\", inputs: [\"color\", \"state\", \"label\", \"errorMessage\", \"iconOverrides\", \"index\", \"selected\", \"active\", \"optional\", \"disableRipple\"] }], animations: [\n matStepperAnimations.horizontalStepTransition,\n matStepperAnimations.verticalStepTransition,\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepper, decorators: [{\n type: Component,\n args: [{ selector: 'mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]', exportAs: 'matStepper, matVerticalStepper, matHorizontalStepper', inputs: ['selectedIndex'], host: {\n '[class.mat-stepper-horizontal]': 'orientation === \"horizontal\"',\n '[class.mat-stepper-vertical]': 'orientation === \"vertical\"',\n '[class.mat-stepper-label-position-end]': 'orientation === \"horizontal\" && labelPosition == \"end\"',\n '[class.mat-stepper-label-position-bottom]': 'orientation === \"horizontal\" && labelPosition == \"bottom\"',\n '[class.mat-stepper-header-position-bottom]': 'headerPosition === \"bottom\"',\n '[attr.aria-orientation]': 'orientation',\n 'role': 'tablist',\n }, animations: [\n matStepperAnimations.horizontalStepTransition,\n matStepperAnimations.verticalStepTransition,\n ], providers: [{ provide: CdkStepper, useExisting: MatStepper }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n\\n
\\n
\\n \\n
\\n
\\n
\\n\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n\\n\\n\\n \\n\\n\", styles: [\".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-header-position-bottom .mat-horizontal-stepper-header-container{order:1}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\\\"\\\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-wrapper{display:flex;flex-direction:column}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-inactive{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.cdk-high-contrast-active .mat-horizontal-content-container{outline:solid 1px}.mat-stepper-header-position-bottom .mat-horizontal-content-container{padding:24px 24px 0 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}.cdk-high-contrast-active .mat-vertical-content-container{outline:solid 1px}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\\\"\\\";position:absolute;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\"] }]\n }], ctorParameters: function () { return [{ type: i3$1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { _stepHeader: [{\n type: ViewChildren,\n args: [MatStepHeader]\n }], _steps: [{\n type: ContentChildren,\n args: [MatStep, { descendants: true }]\n }], _icons: [{\n type: ContentChildren,\n args: [MatStepperIcon, { descendants: true }]\n }], animationDone: [{\n type: Output\n }], disableRipple: [{\n type: Input\n }], color: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], headerPosition: [{\n type: Input\n }], animationDuration: [{\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/** Button that moves to the next step in a stepper workflow. */\nclass MatStepperNext extends CdkStepperNext {\n}\nMatStepperNext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperNext, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatStepperNext.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepperNext, selector: \"button[matStepperNext]\", inputs: { type: \"type\" }, host: { properties: { \"type\": \"type\" }, classAttribute: \"mat-stepper-next\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperNext, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[matStepperNext]',\n host: {\n 'class': 'mat-stepper-next',\n '[type]': 'type',\n },\n inputs: ['type'],\n }]\n }] });\n/** Button that moves to the previous step in a stepper workflow. */\nclass MatStepperPrevious extends CdkStepperPrevious {\n}\nMatStepperPrevious.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperPrevious, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatStepperPrevious.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepperPrevious, selector: \"button[matStepperPrevious]\", inputs: { type: \"type\" }, host: { properties: { \"type\": \"type\" }, classAttribute: \"mat-stepper-previous\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperPrevious, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[matStepperPrevious]',\n host: {\n 'class': 'mat-stepper-previous',\n '[type]': 'type',\n },\n inputs: ['type'],\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 */\nclass MatStepperModule {\n}\nMatStepperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatStepperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperModule, declarations: [MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent], imports: [MatCommonModule,\n CommonModule,\n PortalModule,\n MatButtonModule,\n CdkStepperModule,\n MatIconModule,\n MatRippleModule], exports: [MatCommonModule,\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent] });\nMatStepperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperModule, providers: [MAT_STEPPER_INTL_PROVIDER, ErrorStateMatcher], imports: [MatCommonModule,\n CommonModule,\n PortalModule,\n MatButtonModule,\n CdkStepperModule,\n MatIconModule,\n MatRippleModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n MatCommonModule,\n CommonModule,\n PortalModule,\n MatButtonModule,\n CdkStepperModule,\n MatIconModule,\n MatRippleModule,\n ],\n exports: [\n MatCommonModule,\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent,\n ],\n declarations: [\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent,\n ],\n providers: [MAT_STEPPER_INTL_PROVIDER, ErrorStateMatcher],\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/**\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_STEPPER_INTL_PROVIDER, MAT_STEPPER_INTL_PROVIDER_FACTORY, MatStep, MatStepContent, MatStepHeader, MatStepLabel, MatStepper, MatStepperIcon, MatStepperIntl, MatStepperModule, MatStepperNext, MatStepperPrevious, matStepperAnimations };\n","import * as i0 from '@angular/core';\nimport { Directive, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, ContentChildren, NgModule } from '@angular/core';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport * as i1 from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\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// Boilerplate for applying mixins to MatToolbar.\n/** @docs-private */\nconst _MatToolbarBase = mixinColor(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n});\nclass MatToolbarRow {\n}\nMatToolbarRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarRow, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatToolbarRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatToolbarRow, selector: \"mat-toolbar-row\", host: { classAttribute: \"mat-toolbar-row\" }, exportAs: [\"matToolbarRow\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarRow, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-toolbar-row',\n exportAs: 'matToolbarRow',\n host: { 'class': 'mat-toolbar-row' },\n }]\n }] });\nclass MatToolbar extends _MatToolbarBase {\n constructor(elementRef, _platform, document) {\n super(elementRef);\n this._platform = _platform;\n // TODO: make the document a required param when doing breaking changes.\n this._document = document;\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._checkToolbarMixedModes();\n this._toolbarRows.changes.subscribe(() => this._checkToolbarMixedModes());\n }\n }\n /**\n * Throws an exception when developers are attempting to combine the different toolbar row modes.\n */\n _checkToolbarMixedModes() {\n if (this._toolbarRows.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n // Check if there are any other DOM nodes that can display content but aren't inside of\n // a element.\n const isCombinedUsage = Array.from(this._elementRef.nativeElement.childNodes)\n .filter(node => !(node.classList && node.classList.contains('mat-toolbar-row')))\n .filter(node => node.nodeType !== (this._document ? this._document.COMMENT_NODE : 8))\n .some(node => !!(node.textContent && node.textContent.trim()));\n if (isCombinedUsage) {\n throwToolbarMixedModesError();\n }\n }\n }\n}\nMatToolbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbar, deps: [{ token: i0.ElementRef }, { token: i1.Platform }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });\nMatToolbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatToolbar, selector: \"mat-toolbar\", inputs: { color: \"color\" }, host: { properties: { \"class.mat-toolbar-multiple-rows\": \"_toolbarRows.length > 0\", \"class.mat-toolbar-single-row\": \"_toolbarRows.length === 0\" }, classAttribute: \"mat-toolbar\" }, queries: [{ propertyName: \"_toolbarRows\", predicate: MatToolbarRow, descendants: true }], exportAs: [\"matToolbar\"], usesInheritance: true, ngImport: i0, template: \"\\n\\n\", styles: [\".cdk-high-contrast-active .mat-toolbar{outline:solid 1px}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbar, decorators: [{\n type: Component,\n args: [{ selector: 'mat-toolbar', exportAs: 'matToolbar', inputs: ['color'], host: {\n 'class': 'mat-toolbar',\n '[class.mat-toolbar-multiple-rows]': '_toolbarRows.length > 0',\n '[class.mat-toolbar-single-row]': '_toolbarRows.length === 0',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"\\n\\n\", styles: [\".cdk-high-contrast-active .mat-toolbar{outline:solid 1px}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Platform }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, propDecorators: { _toolbarRows: [{\n type: ContentChildren,\n args: [MatToolbarRow, { descendants: true }]\n }] } });\n/**\n * Throws an exception when attempting to combine the different toolbar row modes.\n * @docs-private\n */\nfunction throwToolbarMixedModesError() {\n throw Error('MatToolbar: Attempting to combine different toolbar modes. ' +\n 'Either specify multiple `` elements explicitly or just place content ' +\n 'inside of a `` for a single row.');\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 */\nclass MatToolbarModule {\n}\nMatToolbarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatToolbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarModule, declarations: [MatToolbar, MatToolbarRow], imports: [MatCommonModule], exports: [MatToolbar, MatToolbarRow, MatCommonModule] });\nMatToolbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarModule, imports: [MatCommonModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [MatToolbar, MatToolbarRow, MatCommonModule],\n declarations: [MatToolbar, MatToolbarRow],\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/**\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatToolbar, MatToolbarModule, MatToolbarRow, throwToolbarMixedModesError };\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { IdleTimeComponent } from './idle-time.component';\n\n@NgModule({\n declarations: [IdleTimeComponent],\n exports: [IdleTimeComponent],\n imports: [CommonModule],\n})\nexport class IdleTimeModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { StopPropagationDirective } from '@shared/directives/stop-propagation.directive';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { PillListModule } from '@ui-components/components/pill-list/pill-list.module';\n\nimport { NotificationRingItemComponent } from './notification-ring-item.component';\n\n@NgModule({\n declarations: [NotificationRingItemComponent],\n imports: [\n CommonModule,\n IconComponent,\n PipesModule,\n PillListModule,\n MatButtonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n StopPropagationDirective,\n ],\n exports: [NotificationRingItemComponent],\n})\nexport class NotificationRingItemModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { NotificationRingItemModule } from '@ui-components/components/notification-ring/components/notification-ring-item/notification-ring-item.module';\n\nimport { NotificationRingComponent } from './notification-ring.component';\n\n@NgModule({\n declarations: [NotificationRingComponent],\n imports: [\n CommonModule,\n IconComponent,\n MatMenuModule,\n MatCheckboxModule,\n ReactiveFormsModule,\n NotificationRingItemModule,\n PipesModule,\n MatButtonModule,\n ],\n exports: [NotificationRingComponent],\n})\nexport class NotificationRingModule {}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nexport class SidePanelService {\n isSidePanelExpanded$: Observable;\n private isSidePanelExpanded = true;\n private isSidePanelExpandedSubject = new BehaviorSubject(this.isSidePanelExpanded);\n\n constructor() {\n this.isSidePanelExpanded$ = this.isSidePanelExpandedSubject.asObservable();\n }\n\n toggleSidePanel() {\n this.isSidePanelExpanded = !this.isSidePanelExpanded;\n this.isSidePanelExpandedSubject.next(this.isSidePanelExpanded);\n }\n}\n","import { PackageType } from '@shared/enums/package-type';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const PackageTypeListConst: IRadioButtonOption[] = [\n {\n value: PackageType.Turns,\n label: 'Turns',\n },\n {\n value: PackageType.Inspections,\n label: 'Inspections',\n },\n\n {\n value: PackageType.Service,\n label: 'Service',\n },\n\n {\n value: PackageType.InspectionsPro,\n label: 'Inspections Pro',\n },\n\n {\n value: PackageType.Residents,\n label: 'Residents',\n },\n {\n value: PackageType.CannedAnswers,\n label: 'Canned Answers',\n },\n {\n value: PackageType.SpareParts,\n label: 'Parts Catalog',\n },\n];\n","
\n \n
\n\n\n \n
\n {{ sectionItem.label }}\n
\n \n \n \n \n
\n \n
\n {{ item.label }}\n
\n \n
\n
\n\n\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { firstValueFrom } from 'rxjs';\nimport { distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { AppVersionService } from '@app/services/app-version.service';\nimport { PackageService } from '@app/services/package.service';\nimport { selectUserPermissionLevel } from '@main-application/store/selectors/user.selectors';\nimport { PackageTypeListConst } from '@shared/constants/package-type-list.const';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { MenuSectionItem } from '@shared/interfaces/menu-config.interface';\nimport { HelpRouterService } from '@shared/services/help-router.service';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { ModalsService } from '@ui-components/modals/modals.service';\nimport { NewTurnoverModalComponent } from '@ui-components/modals/new-turnover-modal/new-turnover-modal.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-side-panel-section-item',\n templateUrl: './side-panel-section-item.component.html',\n styleUrls: ['./side-panel-section-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidePanelSectionItemComponent extends ComponentAbstract implements OnInit {\n @Input() sectionItem: MenuSectionItem;\n @Output() menuActionsEvent: EventEmitter = new EventEmitter();\n\n currentVersion = '';\n needUpgrade = false;\n activeSection = null;\n\n permissionLevels$ = this.store.select(selectUserPermissionLevel).pipe(\n untilDestroyed(this),\n filter((permissionLevel: PermissionLevelType[]) => !!permissionLevel?.length)\n );\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private router: Router,\n private dialog: MatDialog,\n private modalsService: ModalsService,\n private appVersionService: AppVersionService,\n private helpRouterService: HelpRouterService,\n private store: Store,\n private snackbarService: SnackbarService,\n private packageService: PackageService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.isActive = window.location.pathname.startsWith(this.sectionItem.urlPath);\n this.activeSection = this.sectionItem.sectionItem.find(item => window.location.pathname.startsWith(item.urlPath));\n this.currentVersion = this.appVersionService.getBuiltInVersionInfo().version_number;\n this.appVersionService.version$\n .pipe(\n distinctUntilChanged(),\n filter(appVersion => !!appVersion && !!appVersion.version_number.length),\n tap(appVersion => {\n if (this.currentVersion && this.currentVersion !== appVersion.version_number) {\n this.needUpgrade = true;\n }\n }),\n untilDestroyed(this)\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd),\n distinctUntilChanged(),\n tap((event: NavigationEnd) => {\n this.isActive = event.url.startsWith(this.sectionItem.urlPath);\n this.activeSection = this.sectionItem.sectionItem.find(item => event.url.startsWith(item.urlPath));\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n async open(menuSectionItem: MenuSectionItem) {\n if (menuSectionItem.permissionLevelWarning) {\n const permissionLevels = await firstValueFrom(this.permissionLevels$);\n if (!checkPermissionLevel(permissionLevels, menuSectionItem.permissionLevelWarning)) {\n this.snackbarService.warning(`Permission: ${menuSectionItem.permissionLevelWarning.toLowerCase()} required`);\n return;\n }\n }\n\n this.packageService\n .checkPackagesAvailable(menuSectionItem.packageLevel)\n .subscribe(hasPackage => {\n if (!hasPackage) {\n const packageNames = PackageTypeListConst.filter(p => menuSectionItem.packageLevel.includes(p.value)).map(\n p => p.label\n );\n return this.snackbarService.info(\n `Contact us for a free 90-day trial of ${\n packageNames?.length > 0\n ? packageNames.join(', ')\n : `${menuSectionItem?.label?.toString()} service` || 'service'\n }!`\n );\n }\n\n if (menuSectionItem.modalDialogComponent) {\n switch (menuSectionItem.modalDialogComponent) {\n case NewTurnoverModalComponent:\n this.modalsService.openNewTurnoverModal([], false);\n break;\n default:\n this.dialog.open(menuSectionItem.modalDialogComponent);\n }\n\n return;\n }\n\n if (menuSectionItem.urlPath) {\n const queryParams = this.helpRouterService.getGlobalPreservedParams();\n\n if (menuSectionItem.newTab) {\n const url = this.router.serializeUrl(this.router.createUrlTree([menuSectionItem.urlPath], { queryParams }));\n\n window.open(url, '_blank');\n return;\n }\n\n if (this.needUpgrade) {\n const url = this.router.createUrlTree([menuSectionItem.urlPath], { queryParams });\n window.location.href = url.toString();\n } else {\n this.router.navigate([menuSectionItem.urlPath], { queryParams }).then();\n }\n }\n\n if (menuSectionItem.menuActions) {\n this.menuActionsEvent.emit(menuSectionItem.menuActions);\n }\n })\n .untilDestroyed(this);\n }\n\n toggleSection() {\n this.isExpanded = !this.isExpanded;\n this.cdr.detectChanges();\n }\n}\n","
\n
\n \n \n \n
\n \n \n \n
\n\n\n \n \n\n\n\n \n \n\n\n\n \n\n\n\n
{{ section?.label }}
\n
\n\n\n \n \n \n\n\n\n
\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { some } from 'lodash';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { PackageService } from '@app/services/package.service';\nimport { selectTenantData } from '@main-application/store/selectors/user.selectors';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { ManagementRoute } from '@shared/enums/management-route.enum';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { MenuSection } from '@shared/interfaces/menu-config.interface';\nimport { HelpRouterService } from '@shared/services/help-router.service';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-side-panel-section',\n templateUrl: './side-panel-section.component.html',\n styleUrls: ['./side-panel-section.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidePanelSectionComponent extends ComponentAbstract implements OnInit {\n @Input() section: MenuSection = {\n label: 'Home',\n urlPath: AppRoutes.HOME,\n icon: EIcon.HOME,\n sectionItem: [],\n permissionLevel: undefined,\n packageLevel: undefined,\n emailDomains: undefined,\n passQueryParams: false,\n contentCss: '',\n hideWithoutSubsection: false,\n };\n @Input() currentSectionBSubject: BehaviorSubject;\n @Output() menuActionsEvent: EventEmitter = new EventEmitter();\n\n homePaths = [\n AppRoutes.ROLES_ADMIN_HOME,\n AppRoutes.ROLES_ASSET_HOME,\n AppRoutes.ROLES_CONSTRUCTION_HOME,\n AppRoutes.ROLES_PROPERTY_HOME,\n AppRoutes.ROLES_VENDOR_HOME,\n ];\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private router: Router,\n private helpRouterService: HelpRouterService,\n private packageService: PackageService,\n private store: Store<{}>,\n private snackbarService: SnackbarService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.checkActiveSection(window.location.pathname);\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd),\n distinctUntilChanged(),\n tap((event: NavigationEnd) => {\n this.checkActiveSection(event.url);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectTenantData)\n .pipe(\n untilDestroyed(this),\n tap(tenantData => (this.tenantData = tenantData))\n )\n .subscribe()\n .untilDestroyed(this);\n\n if (this.currentSectionBSubject) {\n this.currentSectionBSubject\n .pipe(\n untilDestroyed(this),\n tap(currentSection => {\n this.isExpanded = currentSection === this.section?.label;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n this.autoExpandInspectSection();\n\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd),\n tap(() => this.autoExpandInspectSection())\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.cdr.detectChanges();\n }\n\n private autoExpandInspectSection(): void {\n const inspectionSubRoutes = [\n ManagementRoute.USER,\n ManagementRoute.RESIDENT,\n ManagementRoute.REPEATING,\n ManagementRoute.DYNAMIC,\n ManagementRoute.TEMPLATES,\n ];\n\n const isInspectionUserRoute = inspectionSubRoutes.some(subRoute =>\n this.router.url.includes(`${RoutePath.INSPECTIONS}/${subRoute}`)\n );\n\n if (isInspectionUserRoute && this.section?.label === 'Inspect') {\n this.currentSectionBSubject.next(this.section.label);\n }\n }\n\n open() {\n this.packageService\n .checkPackagesTrialDaysLeft(this.section.packageLevel)\n .subscribe(result => {\n if (result.length && result.every(s => s.trialState < 0)) {\n this.snackbarService.warning('Trial expired');\n } else {\n const queryParams = this.helpRouterService.getGlobalPreservedParams();\n if (this.section?.urlPath) {\n this.router.navigate([this.section.urlPath], { queryParams }).then();\n }\n }\n })\n .untilDestroyed(this);\n }\n\n toggleSection(): void {\n let currentSection = null;\n if (!this.isExpanded) currentSection = this.section?.label;\n if (this.currentSectionBSubject) {\n this.currentSectionBSubject.next(currentSection);\n }\n }\n\n private checkActiveSection(path: string): void {\n if (this.section?.urlPath === RoutePath.HOME) {\n this.isActive = some(this.homePaths, item => path.startsWith(`/${item}`));\n } else if (this.section) {\n this.isActive =\n path.startsWith(`${this.section.urlPath}`) ||\n some(\n this.section.sectionItem,\n sectionItem => !sectionItem.separator && path.startsWith(`${sectionItem.urlPath}`)\n );\n }\n this.cdr.detectChanges();\n }\n\n menuActions($event: MainPageActions): void {\n this.menuActionsEvent.emit($event);\n }\n}\n","\n \n\n
\n \n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\nimport { AppVersionService } from '@app/services/app-version.service';\nimport { PackageService } from '@app/services/package.service';\nimport { DashboardsAbstract } from '@dashboards/components/abstract/dashboards.abstract';\nimport { selectSelectedDashboardMode } from '@dashboards/store/selectors/dashboards.selectors';\nimport { loadTenantData } from '@main-application/store/actions/user.actions';\nimport {\n selectTenantData,\n selectUserData,\n selectUserPermissionLevel,\n} from '@main-application/store/selectors/user.selectors';\nimport {\n boardsSection,\n calendarSection,\n homeSection,\n inspectionsSection,\n managementSection,\n reportsSection,\n rolesSection,\n serviceSection,\n turnoversSection,\n} from '@shared/constants/side-panel-config.const';\nimport { DashboardMode } from '@shared/enums/dashboard-mode';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { isUserEmailDomainAllowed } from '@shared/functions/check-user-email-domain';\nimport { oneDayInMilliseconds } from '@shared/functions/date-utils.function';\nimport { MenuSection, MenuSectionItem } from '@shared/interfaces/menu-config.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-side-panel',\n templateUrl: './side-panel.component.html',\n styleUrls: ['./side-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidePanelComponent extends DashboardsAbstract implements OnInit {\n menuConfig: MenuSection[] = [];\n currentVersionTimestamp = 0;\n readonly homeDashboardPermissions = [\n PermissionLevelType.Administrator_Dashboard_Read,\n PermissionLevelType.AssetManager_PropertyDashboard_Read,\n PermissionLevelType.ConstructionManager_Dashboard_Read,\n PermissionLevelType.PropertyManager_Dashboard_Read,\n PermissionLevelType.Turnovers_Kanban_Read, // TODO - temporary permission for Vendor\n ];\n\n currentSectionBSubject: BehaviorSubject = new BehaviorSubject(null);\n\n @Input() isSidePanelExpanded = true;\n @Output() mainPageActionEvent: EventEmitter = new EventEmitter();\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private store: Store<{}>,\n private appVersionService: AppVersionService,\n private snackbarService: SnackbarService,\n private packageService: PackageService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.appVersionService.version$\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(appVersion => {\n const builtInVersionInfo = this.appVersionService.getBuiltInVersionInfo();\n if (\n this.currentVersionTimestamp &&\n (this.currentVersionTimestamp !== appVersion.version_timestamp ||\n builtInVersionInfo.version_timestamp !== appVersion.version_timestamp)\n ) {\n const url = new URL(window.location.href);\n url.searchParams.append('version', appVersion.version_number);\n this.snackbarService.warning(\n `🎉 New PropUp version. Plz reload your browser.`,\n oneDayInMilliseconds,\n false\n );\n }\n this.currentVersionTimestamp = appVersion.version_timestamp;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store.dispatch(loadTenantData());\n\n combineLatest([\n this.store.select(selectSelectedDashboardMode).pipe(filter((dashboardMode: DashboardMode) => !!dashboardMode)),\n this.store\n .select(selectUserPermissionLevel)\n .pipe(filter((permissionList: PermissionLevelType[]) => !!permissionList)),\n this.store.select(selectUserData).pipe(filter((userData: UserData) => !!userData?.id)),\n this.store.select(selectTenantData).pipe(filter(tenantData => !!tenantData)),\n ])\n .pipe(\n untilDestroyed(this),\n tap(([dashboardMode, permissionList, userData, tenantData]) => {\n this.dashboardMode = dashboardMode;\n this.permissionList = permissionList;\n this.userData = userData;\n this.tenantData = tenantData;\n this.menuConfig = this.getMenuConfig();\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.cdr.detectChanges();\n }\n\n menuAction(action: MainPageActions) {\n this.mainPageActionEvent.emit(action);\n }\n\n private getMenuConfig(): MenuSection[] {\n const menuConfig: MenuSection[] = [];\n if (!this.dashboardMode) {\n return menuConfig;\n }\n\n if (this.permissionList.includes(PermissionLevelType.AllPermissions)) {\n this.checkRolesSection(menuConfig);\n } else {\n const availableDashboardPermissionsCount = this.homeDashboardPermissions.filter(permission =>\n this.permissionList.includes(permission)\n ).length;\n\n if (availableDashboardPermissionsCount === 1) {\n this.checkHomeSection(menuConfig);\n } else if (availableDashboardPermissionsCount > 1) {\n this.checkRolesSection(menuConfig);\n }\n }\n this.checksMainSection(menuConfig, turnoversSection);\n this.checksMainSection(menuConfig, boardsSection);\n this.checksMainSection(menuConfig, calendarSection);\n this.checksMainSection(menuConfig, inspectionsSection);\n this.checksMainSection(menuConfig, serviceSection);\n this.checksMainSection(menuConfig, reportsSection);\n this.checksMainSection(menuConfig, managementSection, true);\n\n return menuConfig;\n }\n\n private checkHomeSection(sections: MenuSection[]) {\n const section: MenuSection = { ...homeSection };\n if (this.packageService.checkPackages(this.tenantData, section.packageLevel)) {\n sections.push(section);\n }\n }\n\n private checkRolesSection(sections: MenuSection[]) {\n this.checksMainSection(sections, rolesSection);\n }\n\n private checksMainSection(sections: MenuSection[], newSection: MenuSection, enableSorting?: boolean): void {\n const section: MenuSection = { ...newSection };\n const hasRights =\n this.isHasRightToSection(section, 'any') &&\n this.packageService.checkPackages(this.tenantData, section.packageLevel);\n if (!hasRights) {\n return;\n }\n section.sectionItem = this.checksSubsection(section.sectionItem);\n\n if (enableSorting) section.sectionItem = section.sectionItem.sort((a, b) => a.label.localeCompare(b.label));\n\n sections.push(section);\n }\n\n private checksSubsection(sectionItem: MenuSectionItem[]): MenuSectionItem[] {\n if (!sectionItem?.length) {\n return [];\n }\n return sectionItem\n .map((item: MenuSectionItem) => ({ ...item, sectionItem: this.checksSubsection(item.sectionItem) }))\n .filter((item: MenuSectionItem) => this.isHasRightToSection(item, 'all'));\n }\n\n private isHasRightToSection(item: MenuSectionItem, checkPermissions: 'all' | 'any') {\n return (\n checkPermissionLevel(this.permissionList, item.permissionLevel, checkPermissions) &&\n isUserEmailDomainAllowed(this.userData.email, item.emailDomains) &&\n (!item.hideWithoutSubsection || item.sectionItem.length)\n );\n }\n}\n","export enum EntityType {\n Turnover = 1,\n Bid,\n Ticket,\n WorkflowStep,\n Company,\n}\n","import { EntityType } from '@shared/enums/entity-type';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const EntityTypeListConst: IRadioButtonOption[] = [\n {\n value: EntityType.Bid,\n label: 'Bid',\n },\n {\n value: EntityType.Ticket,\n label: 'Ticket',\n },\n {\n value: EntityType.Turnover,\n label: 'Turnover',\n },\n {\n value: EntityType.WorkflowStep,\n label: 'WorkflowStep',\n },\n {\n value: EntityType.Company,\n label: 'Vendor',\n },\n];\n","\n
\n
\n \n
\n
\n
\n {{ title }}\n
\n
\n {{ content }}\n
\n
\n {{ footer }}\n
\n
\n
\n \n \n
{{ notification.timestamp | timeFromDate }}
\n
\n
\n\n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EntityTypeListConst } from '@shared/constants/entity-type-list.const';\nimport { WorkflowStepListConst } from '@shared/constants/workflow-step-list.const';\nimport { EntityType } from '@shared/enums/entity-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { NotificationCategory } from '@shared/enums/notification-category';\nimport { UserType } from '@shared/enums/user-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { WebNotification } from '@shared/interfaces/notification.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { EnumerationValuePipe } from '@shared/pipes/enumeration-value.pipe';\n\n@Component({\n selector: 'app-notification-ring-item',\n templateUrl: './notification-ring-item.component.html',\n styleUrls: ['./notification-ring-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NotificationRingItemComponent extends ComponentAbstract implements OnInit {\n entityList: IRadioButtonOption[] = EntityTypeListConst;\n\n title = '';\n content = '';\n footer = '';\n\n icon: EIcon;\n deleteInProgress = false;\n\n @Input() isOdd = false;\n @Input() notification: WebNotification;\n @Input() deleteDisabled: boolean;\n @Output() selectEvent: EventEmitter = new EventEmitter();\n @Output() deleteEvent: EventEmitter = new EventEmitter();\n\n constructor(protected cdr: ChangeDetectorRef, private enumerationValuePipe: EnumerationValuePipe) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.icon = this.getNotificationIcon();\n this.title = this.getNotificationTitle();\n this.content = this.getNotificationContent();\n this.footer = this.getNotificationFooter();\n }\n\n select() {\n this.selectEvent.emit();\n }\n\n delete() {\n this.deleteInProgress = true;\n this.cdr.detectChanges();\n this.deleteEvent.emit();\n }\n\n private getNotificationIcon(): EIcon {\n switch (this.notification.category) {\n case NotificationCategory.TurnoverComment:\n return EIcon.COMMENT2;\n case NotificationCategory.Bid:\n return EIcon.DOLLAR;\n case NotificationCategory.BidAccepted:\n return EIcon.DOLLAR;\n case NotificationCategory.BidRejected:\n return EIcon.DOLLAR;\n case NotificationCategory.BidComment:\n return EIcon.COMMENT2;\n case NotificationCategory.Ticket:\n return EIcon.TICKET;\n case NotificationCategory.BidSentBack:\n return EIcon.DOLLAR;\n case NotificationCategory.Turnover:\n return EIcon.TIME_SCHEDULE;\n case NotificationCategory.TurnStepSchedule:\n return EIcon.TIME_SCHEDULE;\n }\n }\n\n private getNotificationTitle(): string {\n if (this.notification.category === NotificationCategory.TurnStepSchedule) {\n return this.notification.title;\n }\n switch (this.notification.relatedObjectTypeId) {\n case EntityType.WorkflowStep: {\n return `${\n this.enumerationValuePipe.transform(\n this.notification.additionalData?.workflowStepEnumType,\n WorkflowStepListConst\n ) || ''\n }`;\n }\n case EntityType.Ticket: {\n return this.notification.additionalData?.ticketName || 'Ticket';\n }\n case EntityType.Bid: {\n return `${this.enumerationValuePipe.transform(WorkflowStepEnumType.Bid, WorkflowStepListConst) || ''}`;\n }\n default: {\n return `${this.enumerationValuePipe.transform(this.notification.relatedObjectTypeId, this.entityList) || ''}`;\n }\n }\n }\n\n private getNotificationFooter() {\n const unitName = this.notification.additionalData?.unitName\n ? `- ${this.notification.additionalData?.unitName}`\n : '';\n const unitNames = this.notification.additionalData?.unitNames\n ? `- ${this.notification.additionalData?.unitNames.join(', ')}`\n : '';\n return `${this.notification.additionalData?.propertyName || ''} ${unitName || unitNames}`;\n }\n\n private getNotificationContent() {\n switch (this.notification.category) {\n case NotificationCategory.Turnover: {\n return 'A turnover has been assigned to you';\n }\n case NotificationCategory.TurnoverComment: {\n return 'New comment';\n }\n case NotificationCategory.Bid: {\n return 'A new bid is available';\n }\n case NotificationCategory.BidAccepted: {\n return 'Bid accepted';\n }\n case NotificationCategory.BidRejected: {\n return 'Bid rejected';\n }\n case NotificationCategory.BidComment: {\n return this.notification.additionalData?.userType === UserType.Contractor\n ? `A new comment from ${this.notification.additionalData?.companyName} was added.`\n : 'A new comment was added';\n }\n case NotificationCategory.Ticket: {\n return 'A ticket has been assigned to you.';\n }\n case NotificationCategory.BidSentBack: {\n return 'A new offer is available.';\n }\n default: {\n return this.notification?.content || '';\n }\n }\n }\n}\n","\n \n\n \n 9 ? trimCounter : defaultCounter\">\n \n\n\n\n
{{ unreadCount }}
\n
\n\n\n
9+
\n
\n\n\n \n
\n
Notifications
\n \n \n show unread only\n \n
\n\n
\n \n \n \n
\n \n \n
No new notifications.
\n
\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Params, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport {\n deleteNotification,\n getLastNotificationList,\n markAllAsRead,\n markAsRead,\n} from '@main-application/notifications/store/actions/notifications.actions';\nimport {\n selectDeleteNotificationInProgress,\n selectLastNotificationList,\n} from '@main-application/notifications/store/selectors/notifications.selectors';\nimport { selectUserData } from '@main-application/store/selectors/user.selectors';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { EntityType } from '@shared/enums/entity-type';\nimport { NotificationCategory } from '@shared/enums/notification-category';\nimport { RouteData } from '@shared/enums/route-data';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { UserType } from '@shared/enums/user-type';\nimport { WebNotification } from '@shared/interfaces/notification.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-notification-ring',\n templateUrl: './notification-ring.component.html',\n styleUrls: ['./notification-ring.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NotificationRingComponent extends ComponentAbstract implements OnInit {\n allNotificationList: WebNotification[] = [];\n displayedNotificationList: WebNotification[] = [];\n userData: UserData;\n deleteInProgress$: Observable;\n unreadOnly = new UntypedFormControl(false);\n\n unreadCount = 0;\n\n @Input() userId: number;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private store: Store<{}>,\n private router: Router,\n private modalsService: ModalsService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.getLastMessages();\n\n this.deleteInProgress$ = this.store.select(selectDeleteNotificationInProgress);\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectLastNotificationList)\n .pipe(\n untilDestroyed(this),\n filter((lastNotificationList: WebNotification[]) => !!lastNotificationList),\n tap((lastNotificationList: WebNotification[]) => {\n this.allNotificationList = lastNotificationList;\n this.filterList();\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.unreadOnly.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(() => {\n this.filterList();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n selectNotification(webNotification: WebNotification) {\n if (!webNotification.wasRead) {\n this.store.dispatch(\n markAsRead({\n baseNotificationBody: {\n notificationIds: [webNotification.notificationId],\n },\n })\n );\n }\n\n this.openSource(webNotification);\n }\n\n markAllAsRead() {\n this.store.dispatch(markAllAsRead());\n }\n\n deleteNotification(webNotification: WebNotification) {\n this.store.dispatch(\n deleteNotification({\n baseNotificationBody: {\n notificationIds: [webNotification.notificationId],\n },\n })\n );\n }\n\n private filterList() {\n if (this.unreadOnly.value) {\n this.displayedNotificationList = this.allNotificationList.filter(item => !item.wasRead);\n } else {\n this.displayedNotificationList = [...this.allNotificationList];\n }\n this.setUnreadCount();\n this.cdr.detectChanges();\n }\n\n private setUnreadCount() {\n this.unreadCount = (this.allNotificationList || []).filter(item => !item.wasRead).length;\n }\n\n private getLastMessages() {\n this.store.dispatch(getLastNotificationList());\n }\n\n private openSource(webNotification: WebNotification) {\n switch (webNotification.relatedObjectTypeId) {\n case EntityType.Ticket:\n this.modalsService.addTicketModal({\n ticketId: webNotification.relatedObjectId,\n unitName: webNotification.additionalData?.unitName,\n propertyName: webNotification.additionalData?.propertyName,\n propertyId: webNotification.additionalData?.propertyId,\n });\n break;\n\n case EntityType.Turnover:\n case EntityType.WorkflowStep:\n if (webNotification.additionalData?.workflowStepEnumType) {\n const params =\n webNotification.category === NotificationCategory.TurnoverComment\n ? {\n queryParams: { [RouteData.COMMENT_ID]: webNotification.relatedObjectId },\n }\n : {};\n\n this.router.navigate([AppRoutes.TURNOVERS, webNotification.additionalData.turnoverIds?.[0]], params);\n }\n break;\n\n case EntityType.Bid:\n let queryParams: Params =\n this.userData.userType === UserType.Employee\n ? { [RouteData.SOURCE_VIEW]: RoutePath.BID }\n : { [RouteData.SOURCE_VIEW]: RoutePath.VENDOR_DASHBOARD };\n if (webNotification.category === NotificationCategory.BidComment) {\n queryParams = { ...queryParams, [RouteData.COMMENT_ID]: webNotification.relatedObjectId };\n }\n\n const bidId =\n webNotification.category === NotificationCategory.BidComment\n ? webNotification.additionalData.bidId\n : webNotification.relatedObjectId;\n\n const path: any[] =\n this.userData.userType === UserType.Employee\n ? [\n RoutePath.TURNOVERS,\n RoutePath.BID,\n webNotification.additionalData?.turnoverIds?.[0],\n RoutePath.BID_DETAIL,\n bidId,\n ]\n : [RoutePath.ROLES, RoutePath.VENDOR_DASHBOARD, RoutePath.BID_DETAIL, bidId];\n\n if (bidId) {\n this.router.navigate(path, {\n queryParams,\n });\n }\n break;\n }\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { BreadcrumbItem } from '@shared/interfaces/breadcrumb-item';\nimport { HelpRouterService } from '@shared/services/help-router.service';\n\n@Component({\n selector: 'app-breadcrumb-item',\n templateUrl: './breadcrumb-item.component.html',\n styleUrls: ['./breadcrumb-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BreadcrumbItemComponent extends ComponentAbstract {\n constructor(protected cdr: ChangeDetectorRef, private router: Router, private helpRouterService: HelpRouterService) {\n super(cdr);\n }\n\n @Input() item: BreadcrumbItem;\n\n open() {\n const queryParams = this.helpRouterService.getGlobalPreservedParams();\n if (this.item?.url) {\n this.reloadRoute().then(() => this.router.navigate([this.item.url], { queryParams }));\n }\n }\n\n private reloadRoute(): Promise {\n return this.router.navigateByUrl('/', { skipLocationChange: true });\n }\n}\n","\n \n
{{ item?.label }}
\n\n","
\n
\n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n \n
\n
\n
\n
\n\n\n\n \n\n\n\n \n\n\n\n
\n \n \n
\n
\n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { isNil } from 'lodash';\nimport { Observable, withLatestFrom } from 'rxjs';\nimport { filter, map, mergeMap, startWith, switchMap, tap } from 'rxjs/operators';\n\nimport { DashboardsAbstract } from '@dashboards/components/abstract/dashboards.abstract';\nimport { selectedDashboardViewType, setCustomBreadcrumbs } from '@dashboards/store/actions/dashboard.actions';\nimport { selectCustomBreadcrumbs } from '@dashboards/store/selectors/dashboards.selectors';\nimport { loadAllUserProperties } from '@main-application/store/actions/user.actions';\nimport { selectDashboardViewType } from '@main-application/store/selectors/enumeration.selectors';\nimport { selectIsAuthenticated, selectUserData } from '@main-application/store/selectors/user.selectors';\nimport { loadAllUserCollections, loadAllUserPortfolios } from '@portfolio/store/portfolio.actions';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { RouteData } from '@shared/enums/route-data';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { BreadcrumbItem } from '@shared/interfaces/breadcrumb-item';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { UserData } from '@shared/interfaces/user-data';\n\n@UntilDestroy()\n@Component({\n selector: 'app-top-panel',\n templateUrl: './top-panel.component.html',\n styleUrls: ['./top-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TopPanelComponent extends DashboardsAbstract implements OnInit {\n breadcrumbList: BreadcrumbItem[] = [];\n routeBreadcrumbList: BreadcrumbItem[] = [];\n additionalBreadcrumbList: BreadcrumbItem[] = [];\n userData: UserData;\n portfolioId: number;\n\n @Input() isSidePanelExpanded: boolean;\n @Output() mainPageActionEvent: EventEmitter = new EventEmitter();\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private store: Store<{}>\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd),\n startWith(null),\n tap(() => {\n this.routeBreadcrumbList = this.getBreadcrumbList(this.activatedRoute.root);\n this.store.dispatch(setCustomBreadcrumbs({ breadcrumbList: [] }));\n this.mergeBreadcrumbList();\n }),\n map(() => this.activatedRoute),\n map(route => {\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n }),\n mergeMap(route => {\n return route.data;\n }),\n tap(data => {\n const newDashboardViewType = (\n isNil(data?.[RouteData.DASHBOARD_VIEW_TYPE])\n ? DashboardViewType.NONE\n : data?.[RouteData.DASHBOARD_VIEW_TYPE]\n ) as DashboardViewType;\n\n if (this.dashboardViewType !== newDashboardViewType) {\n this.dashboardViewType = newDashboardViewType;\n this.cdr.detectChanges();\n }\n }),\n switchMap(() => this.getDashboardViewTypes())\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectCustomBreadcrumbs)\n .pipe(\n untilDestroyed(this),\n tap((breadcrumbList: BreadcrumbItem[]) => {\n this.additionalBreadcrumbList = breadcrumbList;\n this.mergeBreadcrumbList();\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectIsAuthenticated)\n .pipe(\n untilDestroyed(this),\n tap((isAuthenticated: boolean) => {\n this.isAuthenticated = isAuthenticated;\n this.cdr.detectChanges();\n }),\n filter(isAuthenticated => isAuthenticated),\n withLatestFrom(this.store.select(selectUserData)),\n tap(([, userData]) => {\n this.store.dispatch(loadAllUserPortfolios());\n this.store.dispatch(loadAllUserProperties());\n if (\n checkPermissionLevel(\n userData.permissionLevel,\n [PermissionLevelType.PropertyCollections_View, PermissionLevelType.PropertyCollections_Edit],\n 'any'\n )\n ) {\n this.store.dispatch(loadAllUserCollections());\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n menuAction(action: MainPageActions) {\n this.mainPageActionEvent.emit(action);\n }\n\n home() {\n this.menuAction(MainPageActions.HOME_PAGE);\n }\n\n private getBreadcrumbList(\n activatedRoute: ActivatedRoute,\n url = '',\n breadcrumbs: BreadcrumbItem[] = []\n ): BreadcrumbItem[] {\n if (!activatedRoute) {\n return [];\n }\n\n const icon = (activatedRoute.routeConfig?.data?.[RouteData.BREADCRUMB_ICON] as EIcon) || null;\n const label = activatedRoute.routeConfig?.data?.[RouteData.BREADCRUMB] || null;\n let path = activatedRoute.routeConfig?.path || null;\n if (path) {\n const lastRoutePart = path.split('/').pop();\n const isDynamicRoute = lastRoutePart.startsWith(':');\n if (isDynamicRoute && !!activatedRoute.snapshot) {\n path = path.replace(lastRoutePart, activatedRoute.snapshot.params[lastRoutePart.split(':')[1]]);\n }\n url = `${url}/${path}`;\n }\n\n if (label) {\n breadcrumbs.push({ label, url, icon });\n }\n\n if (activatedRoute.firstChild) {\n this.getBreadcrumbList(activatedRoute.firstChild, url, breadcrumbs);\n }\n return breadcrumbs;\n }\n\n private getDashboardViewTypes(): Observable {\n return this.store.select(selectDashboardViewType).pipe(\n untilDestroyed(this),\n filter(dashboardViewType => !!dashboardViewType),\n map(dashboardViewTypes => {\n const item = dashboardViewTypes.find(e => e.enumerationValue == this.dashboardViewType);\n if (item) return item;\n if (\n this.dashboardViewType === DashboardViewType.PROPERTY_WITH_GROUPING_VIEW ||\n this.dashboardViewType === DashboardViewType.PROPERTY_WITHOUT_ALL\n ) {\n return dashboardViewTypes.find(e => e.enumerationValue == DashboardViewType.PORTFOLIO_WIDE_VIEW);\n }\n return item;\n }),\n tap((dashboardViewTypeEnum: EnumerationItem) => {\n this.store.dispatch(selectedDashboardViewType({ dashboardViewType: dashboardViewTypeEnum }));\n this.cdr.detectChanges();\n })\n );\n }\n\n private mergeBreadcrumbList() {\n this.breadcrumbList = [...this.routeBreadcrumbList, ...this.additionalBreadcrumbList];\n this.cdr.detectChanges();\n }\n}\n","
\n
\n
\n
\n \n
\n \n
\n \n
\n \n \n
\n
\n \n
\n
\n \n
\n \n
\n \n \n \n
\n
\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, NavigationCancel, NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { debounceTime, filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { AppVersionService } from '@app/services/app-version.service';\nimport { ScreenWiperService } from '@app/services/screen-wiper.service';\nimport { SidePanelService } from '@app/services/side-panel.service';\nimport { ApplicationMenuService } from '@main-application/application-menu/application-menu.service';\nimport {\n selectDashboardViewType,\n selectLoadEnumerationsLoading,\n} from '@main-application/store/selectors/enumeration.selectors';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { AuthService } from '@shared/services/auth.service';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { environment } from '../../../../environments/environment';\n\n@UntilDestroy()\n@Component({\n selector: 'app-application-menu',\n templateUrl: './application-menu.component.html',\n styleUrls: ['./application-menu.component.scss'],\n providers: [SidePanelService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ApplicationMenuComponent extends ComponentAbstract implements OnInit {\n screenWipeStatus$ = this.screenWiperService.screenClasses$;\n wipeDuration = this.screenWiperService.wipeDuration;\n wiperVisible$ = this.screenWiperService.globalWiperVisible$;\n environment = environment;\n isAuthenticated = false;\n currentVersion = '';\n currentVersionTimeStamp = 0;\n showBuildTime = environment.showBuildTime;\n displayNavigation = true; //Can be used for full screen mode in future\n isSidePanelExpanded$: Observable;\n navigationInProgress = new BehaviorSubject(false);\n navigationInProgress$ = this.navigationInProgress.asObservable().pipe(debounceTime(700));\n pseudoFullScreen = false;\n pseudoFullScreenOn = false;\n pseudoFullScreenLocked = false;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private router: Router,\n private authService: AuthService,\n private store: Store<{}>,\n private sidePanelService: SidePanelService,\n private snackbarService: SnackbarService,\n private appVersionService: AppVersionService,\n private screenWiperService: ScreenWiperService,\n private applicationMenuService: ApplicationMenuService,\n private activatedRoute: ActivatedRoute\n ) {\n super(cdr);\n }\n\n ngOnInit() {\n this.snackbarService\n .watchForSidePanel(this.sidePanelService)\n .pipe(untilDestroyed(this))\n .subscribe()\n .untilDestroyed(this);\n this.isSidePanelExpanded$ = this.sidePanelService.isSidePanelExpanded$;\n const { version_timestamp, version_number } = this.appVersionService.getBuiltInVersionInfo();\n this.currentVersionTimeStamp = version_timestamp;\n this.currentVersion = version_number;\n this.isLoading$ = this.store.select(selectLoadEnumerationsLoading);\n this.dashboardViewType$ = this.store.select(selectDashboardViewType);\n\n this.activatedRoute.queryParams\n .pipe(\n untilDestroyed(this),\n tap(params => {\n if (this.router.url.includes(RoutePath.BOARDS) || this.router.url.includes(RoutePath.CALENDAR)) {\n if (params.lockFullScreen || params.fullScreen) {\n this.pseudoFullScreen = params.fullScreen === 'true';\n this.pseudoFullScreenOn = params.fullScreenOn !== 'false';\n this.pseudoFullScreenLocked = params.lockFullScreen === 'true';\n }\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationStart),\n tap(event => {\n this.navigationInProgress.next(true);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd || event instanceof NavigationCancel),\n tap(() => {\n this.navigationInProgress.next(false);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n toggleSidePanel() {\n this.sidePanelService.toggleSidePanel();\n }\n\n mainPageActions(action: MainPageActions) {\n switch (action) {\n case MainPageActions.ACCOUNT:\n {\n // todo - redirect to account settings\n }\n break;\n case MainPageActions.PASSWORD:\n {\n // todo - redirect to password settings\n }\n break;\n case MainPageActions.NOTIFICATIONS:\n {\n // todo - redirect to notifications settings\n }\n break;\n case MainPageActions.LOGOUT:\n {\n this.authService.logout();\n this.isAuthenticated = false;\n }\n break;\n case MainPageActions.LOGIN:\n {\n this.router\n .navigate([AppRoutes.LOGIN], {\n queryParams: {\n returnUrl: window.location.href,\n },\n })\n .then();\n }\n break;\n case MainPageActions.HOME_PAGE:\n {\n this.router.navigate([AppRoutes.HOME]).then();\n }\n break;\n }\n }\n\n onScroll($event: Event) {\n this.applicationMenuService.scrollEvent$.next($event);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { UnitDetailsComponent } from '@portfolio/components/unit-details/unit-details.component';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { ManagementRoute } from '@shared/enums/management-route.enum';\nimport { PackageType } from '@shared/enums/package-type';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { RouteData } from '@shared/enums/route-data';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { AuthGuard } from '@shared/guards/auth.guard';\nimport { HomeRedirectGuard } from '@shared/guards/home-redirect.guard';\nimport { PackageLevelGuardFactory } from '@shared/guards/package-level.guard';\nimport { PermissionLevelGuardFactory } from '@shared/guards/permission-level.guard';\nimport { ResidentGuard } from '@shared/guards/resident.guard';\nimport { ViewCloseGuard } from '@shared/guards/view-close.guard';\n\nimport { ApplicationMenuComponent } from './application-menu.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: ApplicationMenuComponent,\n canActivate: [ResidentGuard],\n children: [\n {\n path: '',\n redirectTo: AppRoutes.HOME,\n pathMatch: 'full',\n },\n {\n path: RoutePath.HOME,\n canActivate: [AuthGuard, HomeRedirectGuard],\n loadChildren: () =>\n import('@main-application/home-dashboard/home-dashboard.module').then(m => m.HomeDashboardModule),\n },\n {\n path: RoutePath.ROLES,\n canActivate: [AuthGuard, PackageLevelGuardFactory([PackageType.Turns])],\n data: { [RouteData.BREADCRUMB]: 'Home', [RouteData.BREADCRUMB_ICON]: EIcon.HOME },\n loadChildren: () =>\n import('@main-application/dashboard-roles/dashboard-roles.module').then(m => m.DashboardRolesModule),\n },\n {\n path: RoutePath.TURNOVERS,\n canActivate: [AuthGuard, PackageLevelGuardFactory([PackageType.Turns])],\n loadChildren: () => import('@main-application/turnovers/turnovers.module').then(m => m.TurnoversModule),\n },\n {\n path: RoutePath.INSPECTIONS,\n canActivate: [AuthGuard, PackageLevelGuardFactory([PackageType.Turns, PackageType.Inspections])],\n loadChildren: () => import('@main-application/inspections/inspections.module').then(m => m.InspectionsModule),\n },\n {\n path: RoutePath.SERVICE,\n canActivate: [\n AuthGuard,\n PackageLevelGuardFactory([PackageType.Turns, PackageType.Inspections, PackageType.Service]),\n ],\n loadChildren: () => import('@main-application/service/service.module').then(m => m.ServiceModule),\n },\n {\n path: RoutePath.CALENDAR,\n canActivate: [AuthGuard, PackageLevelGuardFactory([PackageType.Turns, PackageType.Inspections])],\n loadChildren: () => import('@main-application/calendar/calendar.module').then(m => m.CalendarModule),\n },\n {\n path: RoutePath.BOARDS,\n canActivate: [AuthGuard, PackageLevelGuardFactory([PackageType.Turns])],\n data: { [RouteData.BREADCRUMB]: 'Boards' },\n loadChildren: () => import('@main-application/boards/boards.module').then(m => m.BoardsModule),\n },\n {\n path: `${RoutePath.BUILDIUM}/tokenExchange`,\n canActivate: [AuthGuard],\n loadComponent: () =>\n import('@main-application/buildium/token-exchange/token-exchange.component').then(\n m => m.TokenExchangeComponent\n ),\n },\n {\n path: RoutePath.REPORTS,\n canActivate: [AuthGuard, PackageLevelGuardFactory([PackageType.Turns])],\n data: {\n [RouteData.BREADCRUMB]: 'Reports',\n [RouteData.BREADCRUMB_ICON]: EIcon.CHART_LINE,\n },\n loadChildren: () =>\n import('@main-application/dashboard-reports/dashboard-reports.module').then(m => m.DashboardReportsModule),\n },\n {\n path: RoutePath.TICKETS,\n canActivate: [AuthGuard, PermissionLevelGuardFactory(PermissionLevelType.Tickets_Read)],\n loadChildren: () => import('@main-application/tickets/tickets.module').then(m => m.TicketsModule),\n },\n {\n path: ManagementRoute.SETTINGS,\n canActivate: [AuthGuard],\n canDeactivate: [ViewCloseGuard],\n data: {\n [RouteData.BREADCRUMB]: 'Settings',\n [RouteData.BREADCRUMB_ICON]: EIcon.SHIELD_USER,\n },\n loadChildren: () => import('@main-application/management/management.module').then(m => m.ManagementModule),\n },\n {\n path: `${RoutePath.UNIT_DETAILS}/:unitId`,\n component: UnitDetailsComponent,\n canActivate: [AuthGuard],\n canDeactivate: [ViewCloseGuard],\n data: {\n [RouteData.BREADCRUMB]: 'Unit details',\n [RouteData.DASHBOARD_VIEW_TYPE]: DashboardViewType.NONE,\n },\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class ApplicationMenuRoutingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\n\nimport { IdleTimeModule } from '@app/modules/ui-components/components/idle-time/idle-time.module';\nimport { NewTurnoverModalModule } from '@app/modules/ui-components/modals/new-turnover-modal/new-turnover-modal.module';\nimport { PropertySelectorAllComponent } from '@main-application/application-menu/property-selector/property-selector-all.component';\nimport { NotificationsModule } from '@main-application/notifications/notifications.module';\nimport { DirectivesModule } from '@shared/directives/directives.module';\nimport { StopPropagationDirective } from '@shared/directives/stop-propagation.directive';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { ValueIfNonZeroPipe } from '@shared/pipes/valueIfNonZero.pipe';\nimport { ValueIfPositivePipe } from '@shared/pipes/valueIfPositive.pipe';\nimport { YesEmptyPipe } from '@shared/pipes/yesEmpty.pipe';\nimport { AnimationModule } from '@ui-components/components/animation/animation.module';\nimport { AvatarModule } from '@ui-components/components/avatar/avatar.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { NotificationRingModule } from '@ui-components/components/notification-ring/notification-ring.module';\nimport { SearchInputModule } from '@ui-components/components/search-input/search-input.module';\nimport { SkeletonLoaderComponent } from '@ui-components/components/skeleton-loader/skeleton-loader.component';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\nimport { ModalsModule } from '@ui-components/modals/modals.module';\n\nimport { ApplicationMenuComponent } from './application-menu.component';\nimport { ApplicationMenuRoutingModule } from './application-menu.routing.module';\nimport { BreadcrumbItemComponent } from './breadcrumb-item/breadcrumb-item.component';\nimport { SidePanelComponent } from './side-panel/side-panel.component';\nimport { SidePanelSectionComponent } from './side-panel-section/side-panel-section.component';\nimport { SidePanelSectionItemComponent } from './side-panel-section-item/side-panel-section-item.component';\nimport { TopPanelComponent } from './top-panel/top-panel.component';\n\n@NgModule({\n declarations: [\n ApplicationMenuComponent,\n SidePanelComponent,\n SidePanelSectionComponent,\n SidePanelSectionItemComponent,\n TopPanelComponent,\n BreadcrumbItemComponent,\n ],\n imports: [\n CommonModule,\n NotificationsModule,\n ModalsModule,\n FormsModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatBadgeModule,\n MatButtonModule,\n MatCardModule,\n MatCheckboxModule,\n MatDatepickerModule,\n MatDialogModule,\n MatDividerModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatGridListModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatMenuModule,\n MatNativeDateModule,\n MatPaginatorModule,\n MatRadioModule,\n MatSelectModule,\n MatSidenavModule,\n MatSnackBarModule,\n MatSortModule,\n MatStepperModule,\n MatTabsModule,\n MatTableModule,\n MatToolbarModule,\n TooltipDirectiveModule,\n MatChipsModule,\n MatProgressSpinnerModule,\n ApplicationMenuRoutingModule,\n PipesModule,\n IdleTimeModule,\n DirectivesModule,\n NewTurnoverModalModule,\n ModalsModule,\n AnimationModule,\n IconComponent,\n AvatarModule, //ToDo: make it stand alone component & move out from master-module\n SearchInputModule, //ToDo: make it stand alone component & move out from master-module\n RadioButtonDropdownModule, //ToDo: (maybe?) make it stand alone component & move out from master-module\n NotificationRingModule,\n StopPropagationDirective,\n SkeletonLoaderComponent,\n PropertySelectorAllComponent,\n ],\n providers: [YesEmptyPipe, ValueIfPositivePipe, ValueIfNonZeroPipe],\n})\nexport class ApplicationMenuModule {}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplicationMenuService {\n public portfoliosToDisplay$ = new BehaviorSubject<{ portfoliosToDisplayIds: number[]; excludedProperties: number[] }>(\n {\n portfoliosToDisplayIds: null,\n excludedProperties: null,\n }\n );\n scrollEvent$ = new BehaviorSubject(null);\n}\n","
\n \n 7\"\n [autoSortList]=\"false\"\n [allowClear]=\"false\"\n [attrAppendTo]=\"attrAppendTo\">\n 7\"\n [autoSortList]=\"false\"\n [allowClear]=\"false\"\n [attrAppendTo]=\"attrAppendTo\">\n 7\"\n [autoSortList]=\"false\"\n [attrAppendTo]=\"attrAppendTo\">\n 7\"\n [autoSortList]=\"false\"\n [attrAppendTo]=\"attrAppendTo\">\n \n 7\"\n [autoSortList]=\"false\"\n [attrAppendTo]=\"attrAppendTo\">\n 7\"\n [multiSelect]=\"false\"\n [allowSearch]=\"false\"\n [autoSortList]=\"false\"\n [attrAppendTo]=\"attrAppendTo\">\n
\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, inject } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Params, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { difference, first, isEqual, sortBy } from 'lodash';\nimport { BehaviorSubject, Observable, combineLatest, shareReplay, take, withLatestFrom } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, map, mergeMap, startWith, tap } from 'rxjs/operators';\n\nimport { PortfolioService } from '@app/services/portfolio.service';\nimport { isDefAndNotNull } from '@app/utils/def';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport {\n setDoNotStore,\n setJoinedProperties,\n setPropertySelectorSwitchStatus,\n setSelectedCollectionIds,\n setSelectedPortfolioId,\n setSelectedPropertyIds,\n} from '@dashboards/store/actions/property-selector.actions';\nimport { PropertySelectorSwitchStatus } from '@dashboards/store/reducers/property-selector.reducer';\nimport {\n selectIsAllCollectionsSelected,\n selectJoinedProperties,\n selectPropertySelectorSwitchStatus,\n selectSelectedCollectionIds,\n selectSelectedPortfolioId,\n selectSelectedPropertyIds,\n} from '@dashboards/store/selectors/property-selector.selectors';\nimport { ApplicationMenuService } from '@main-application/application-menu/application-menu.service';\nimport {\n allPortfoliosOption,\n allPortfoliosValue,\n allPropertiesOption,\n allPropertyValue,\n propertySelectorTypes,\n} from '@main-application/application-menu/property-selector/constants';\nimport { selectTenantData, selectUserPermissionLevel } from '@main-application/store/selectors/user.selectors';\nimport { loadPropertyCollections } from '@portfolio/store/portfolio.actions';\nimport {\n selectPortfolios,\n selectProperties,\n selectPropertyCollections,\n selectUserCollections,\n} from '@portfolio/store/portfolio.selectors';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { RouteData } from '@shared/enums/route-data';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { skipEqual$ } from '@shared/utils/rxjs/skip-equal.rxjs.util';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'app-property-selector-all',\n templateUrl: './property-selector-all.component.html',\n styleUrls: ['./property-selector-all.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, RadioButtonDropdownModule, ReactiveFormsModule],\n})\nexport class PropertySelectorAllComponent extends PuSubscribable implements OnInit {\n @Input() propertyGroupingHidden = false;\n @Input() containerCss = '';\n @Input() labelCss = 'text-color gray7';\n @Input() valueCss = 'text-color gray3 dropdown-value';\n @Input() optionCss = 'text-color gray3 dropdown-value';\n @Input() attrAppendTo = 'body';\n\n activatedRoute = inject(ActivatedRoute);\n store = inject(Store);\n cdr = inject(ChangeDetectorRef);\n router = inject(Router);\n applicationMenuService = inject(ApplicationMenuService);\n private isUpdatingControl = false;\n private isUpdatingRouterParams = false;\n\n routeData$ = this.router.events.pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd),\n startWith(null),\n map(() => this.activatedRoute),\n map(route => {\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n }),\n mergeMap(route => route.data),\n untilDestroyed(this),\n shareReplay()\n );\n\n groupingByItems: IRadioButtonOption[] = [];\n portfolioSelectorsWidthCss = '';\n propertySelectorsWidthCss = 'width-200';\n portfolioMaxNameLength$ = new BehaviorSubject(0);\n propertyMaxNameLength$ = new BehaviorSubject(0);\n dashboardViewType$ = this.initDashboardViewType();\n showPropertySelector$ = this.initShowPropertySelector();\n showPropertySingleSelector$ = this.initShowPropertySingleSelector();\n showGroupingSelector$ = this.dashboardViewType$.pipe(\n untilDestroyed(this),\n map(e => DashboardViewType.PROPERTY_WITH_GROUPING_VIEW == e)\n );\n grouping = new FormControl(2 as unknown as boolean);\n allPortfolioSelectorEnabled$ = this.initAllPortfolioSelector();\n\n portfolioControl = new FormControl(null);\n collectionControl = new FormControl(null);\n propertyPortfolioControl = new FormControl(null);\n propertyCollectionControl = new FormControl(null);\n propertyControlSingle = new FormControl(null);\n userPortfolios$: Observable[]>;\n userCollections$: Observable[]>;\n userPortfolioProperties$: Observable[]>;\n userCollectionProperties$: Observable[]>;\n urlPortfolioId: number = null;\n urlCollectionIds: number[] = null;\n allCollectionIds: number[] = [];\n urlPropertyIds: number[] = null;\n portfolioPropertiesIds: number[] = [];\n collectionPropertiesIds: number[] = [];\n boardData: { portfoliosToDisplayIds: number[]; portfolioId?: number; excludedProperties?: number[] };\n selectorPropertiesAllInitialization = true;\n selectorCollectionsAllInitialization = true;\n portfolioOptions: IRadioButtonOption[] = [];\n collectionsSelected = false;\n permissionLevelType = PermissionLevelType;\n hasPermissionToPropertyCollection$: Observable;\n hasPermissionToPropertyCollection = false;\n showSwitch$: Observable;\n private queryParamsApplied = false;\n private lastSwitchStatus: PropertySelectorSwitchStatus;\n private singlePropertyModeView: boolean;\n private prevPortfolioControlValue: number;\n collectionProperties$: Observable[]>;\n lastAvailableProperties: number[];\n lastRouteData: any;\n\n constructor(private portfolioService: PortfolioService, private snackbarService: SnackbarService) {\n super();\n }\n\n ngOnInit(): void {\n this.hasPermissionToPropertyCollection$ = this.store.select(selectUserPermissionLevel).pipe(\n filter(permissionLevel => !!permissionLevel?.length),\n take(1),\n map(permissionLevels => {\n return checkPermissionLevel(\n permissionLevels,\n [this.permissionLevelType.PropertyCollections_View, this.permissionLevelType.PropertyCollections_Edit],\n 'any'\n );\n })\n );\n\n this.userPortfolios$ = this.initPortfolios();\n this.userCollections$ = this.initUserCollections();\n this.userPortfolioProperties$ = this.initPortfolioProperties();\n this.userCollectionProperties$ = this.initCollectionProperties();\n this.collectionProperties$ = this.initCollectionProperties();\n\n this.showSwitch$ = combineLatest([\n this.hasPermissionToPropertyCollection$,\n this.userCollections$,\n this.showPropertySingleSelector$,\n ]).pipe(map(([hasPermission, collections, showSingle]) => hasPermission && !!collections?.length && !showSingle));\n\n this.hasPermissionToPropertyCollection$\n .pipe(\n take(1),\n tap(hasPermission => {\n this.hasPermissionToPropertyCollection = hasPermission;\n\n if (this.hasPermissionToPropertyCollection) this.store.dispatch(loadPropertyCollections());\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n //Params are saved to store. no other \"saved params\"\n //Apply query params to store, we dont just get it.\n this.applyQueryParams();\n\n this.onCollectionControlChange();\n\n //Subscrbie to portfolio service\n this.initPortfolioSelection();\n\n this.initPropertySelectorSwitchStatusListener();\n\n //Init != load, lets be more specific\n this.onPortfolioControlChange();\n\n this.onPropertyControlChange();\n this.onSinglePropertyControlChange();\n\n this.initPortfolioSelectorWidth();\n this.initPropertySelectorWidth();\n this.initGroupingItems();\n this.initGroupingValue();\n this.initGroupingValueChanges();\n\n this.initRouterParamUpdateListener();\n\n this.portfolioService.switchMessage$\n .pipe(untilDestroyed(this))\n .subscribe(switchMessage => {\n if (switchMessage) {\n this.switchPortfolioMessage(\n switchMessage.reportName,\n switchMessage.prevPortfolioId,\n switchMessage.newPortfolioId\n );\n }\n })\n .untilDestroyed(this);\n }\n\n // Sounds like store changes (like outside of component)\n // and control changes which causes store updates should be split into 2 different methods\n private initRouterParamUpdateListener(): void {\n combineLatest([\n this.store.select(selectSelectedPortfolioId),\n this.store.select(selectSelectedCollectionIds),\n this.store.select(selectUserCollections),\n this.store.select(selectIsAllCollectionsSelected),\n //this.store.select(selectPropertySingleMode),\n //we do handle values changes outside, ok so we need this 2 to update URL?\n //this.propertyPortfolioControl.valueChanges.pipe(startWith(this.propertyPortfolioControl.value)),\n //this.propertyCollectionControl.valueChanges.pipe(startWith(this.propertyCollectionControl.value)),\n this.store.select(selectPropertySelectorSwitchStatus),\n this.allPortfolioSelectorEnabled$,\n this.userPortfolios$,\n this.store.select(selectSelectedPropertyIds),\n\n this.routeData$,\n this.showPropertySingleSelector$,\n this.collectionProperties$,\n this.userPortfolioProperties$,\n ])\n .pipe(\n debounceTime(300),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)),\n untilDestroyed(this),\n tap(\n ([\n selectedPortfolioId,\n selectedCollectionIds,\n allCollections,\n isAllCollectionsSelected,\n //storeSingleMode,\n //propertyPortfolioIds,\n //propertyCollectionIds,\n switchStatus,\n allPortfolioSelectorEnabled,\n userPortfolios,\n storeSelectedProperties,\n lastRouteUrl,\n singleView,\n ]) => {\n if (this.isUpdatingRouterParams) {\n //debugger;\n\n return;\n }\n\n if (\n switchStatus != PropertySelectorSwitchStatus.COLLECTION &&\n switchStatus != PropertySelectorSwitchStatus.PORTFOLIO\n ) {\n this.store.dispatch(\n setPropertySelectorSwitchStatus({\n propertySelectorSwitchStatus: PropertySelectorSwitchStatus.PORTFOLIO,\n })\n );\n\n return;\n }\n\n this.isUpdatingRouterParams = true;\n\n try {\n //Restore ALL selected when page changed, or Clear all will not work\n this.allCollectionIds = allCollections?.map(collection => collection.id) ?? [];\n\n const availablePropertiesToSelect =\n switchStatus == PropertySelectorSwitchStatus.COLLECTION && !singleView\n ? this.collectionPropertiesIds\n : this.portfolioPropertiesIds;\n\n const switchChanged = this.lastSwitchStatus != switchStatus;\n\n const routeChanged =\n !this.lastRouteData || JSON.stringify(lastRouteUrl) !== JSON.stringify(this.lastRouteData);\n const availablePropertiesChanged =\n routeChanged ||\n !this.lastAvailableProperties ||\n availablePropertiesToSelect.length != this.lastAvailableProperties.length ||\n difference(availablePropertiesToSelect, this.lastAvailableProperties).length > 0;\n\n if (\n (!this.hasPermissionToPropertyCollection || !allCollections || allCollections.length == 0) &&\n switchStatus == PropertySelectorSwitchStatus.COLLECTION\n ) {\n switchStatus = PropertySelectorSwitchStatus.PORTFOLIO;\n this.store.dispatch(\n setPropertySelectorSwitchStatus({\n propertySelectorSwitchStatus: PropertySelectorSwitchStatus.PORTFOLIO,\n })\n );\n }\n //debugger;\n\n //FIX: if user has saved ALL portfolio but has no such option - update it\n if (\n switchStatus === PropertySelectorSwitchStatus.PORTFOLIO &&\n selectedPortfolioId === allPortfoliosValue &&\n !allPortfolioSelectorEnabled\n ) {\n //We handle store updates and update controls.\n this.store.dispatch(setSelectedPortfolioId({ portfolioId: userPortfolios[0].value }));\n\n this.portfolioControl.setValue(userPortfolios[0].value);\n selectedPortfolioId = userPortfolios[0].value;\n }\n\n //Fix: if we switched from portfolio to collections and has no selected collections - select all\n if (\n switchStatus === PropertySelectorSwitchStatus.COLLECTION &&\n (!selectedCollectionIds || selectedCollectionIds.length == 0) &&\n (routeChanged || switchChanged)\n ) {\n selectedCollectionIds = this.allCollectionIds;\n\n this.store.dispatch(\n setSelectedCollectionIds({\n collectionIds: selectedCollectionIds,\n allCollectionsSelected: true,\n })\n );\n\n this.collectionControl.setValue(selectedCollectionIds);\n }\n\n //Fix: if all selected items are not available - reset\n if (\n availablePropertiesChanged &&\n !singleView &&\n (!storeSelectedProperties ||\n storeSelectedProperties.length == 0 ||\n storeSelectedProperties.filter(x => availablePropertiesToSelect.includes(x)).length == 0 ||\n storeSelectedProperties.filter(x => !availablePropertiesToSelect.includes(x)).length > 0 ||\n storeSelectedProperties.length > availablePropertiesToSelect.length)\n ) {\n this.store.dispatch(\n setSelectedPropertyIds({\n propertyIds: availablePropertiesToSelect,\n allPropertiesSelected: true,\n })\n );\n storeSelectedProperties = availablePropertiesToSelect;\n }\n\n this.singlePropertyModeView = singleView;\n this.lastSwitchStatus = switchStatus;\n\n if (switchStatus === PropertySelectorSwitchStatus.PORTFOLIO) {\n this.prevPortfolioControlValue = this.portfolioControl.value;\n this.portfolioControl.setValue(selectedPortfolioId);\n this.propertyPortfolioControl.setValue(storeSelectedProperties);\n } else {\n this.propertyCollectionControl.setValue(storeSelectedProperties);\n }\n\n let allPortfolioPropertiesSelected = false;\n let allCollectionPropertiesSelected = false;\n\n if (switchStatus === PropertySelectorSwitchStatus.PORTFOLIO) {\n allPortfolioPropertiesSelected =\n difference(this.portfolioPropertiesIds, storeSelectedProperties).length === 0;\n }\n if (switchStatus === PropertySelectorSwitchStatus.COLLECTION) {\n allCollectionPropertiesSelected =\n difference(this.collectionPropertiesIds, storeSelectedProperties).length === 0;\n }\n\n //TODO fix, if all selected but not all in store?\n if (\n switchStatus === PropertySelectorSwitchStatus.COLLECTION &&\n !singleView &&\n allCollectionPropertiesSelected &&\n !isAllCollectionsSelected &&\n availablePropertiesChanged\n ) {\n this.store.dispatch(\n setSelectedPropertyIds({\n propertyIds: this.collectionPropertiesIds,\n allPropertiesSelected: false,\n })\n );\n }\n\n this.updateRouterParam({\n [RouteData.PORTFOLIO_ID]:\n switchStatus === PropertySelectorSwitchStatus.COLLECTION\n ? null\n : selectedPortfolioId === allPortfoliosValue\n ? null\n : selectedPortfolioId,\n [RouteData.COLLECTION_IDS]:\n switchStatus === PropertySelectorSwitchStatus.PORTFOLIO\n ? null\n : selectedCollectionIds?.length > 0 && !isAllCollectionsSelected\n ? JSON.stringify(selectedCollectionIds)\n : null,\n [RouteData.PROPERTY_IDS]:\n allPortfolioPropertiesSelected || allCollectionPropertiesSelected\n ? null\n : switchStatus === PropertySelectorSwitchStatus.PORTFOLIO && storeSelectedProperties?.length\n ? JSON.stringify(storeSelectedProperties)\n : storeSelectedProperties?.length\n ? JSON.stringify(storeSelectedProperties)\n : null,\n });\n\n this.lastAvailableProperties = availablePropertiesToSelect;\n this.lastRouteData = lastRouteUrl;\n\n this.cdr.detectChanges();\n } catch (e) {\n throw e;\n //debugger;\n //console.log(e);\n } finally {\n //debugger;\n this.isUpdatingRouterParams = false;\n }\n }\n )\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private initPortfolioSelection(): void {\n this.portfolioService.portfolioId$\n .pipe(\n untilDestroyed(this),\n tap(portfolioId => {\n if (portfolioId !== null) {\n this.updatePortfolioSelection(portfolioId);\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private updatePortfolioSelection(portfolioId: number): void {\n if (this.lastSwitchStatus == PropertySelectorSwitchStatus.PORTFOLIO || this.singlePropertyModeView) {\n this.store.dispatch(setSelectedPortfolioId({ portfolioId }));\n this.portfolioControl.setValue(portfolioId);\n }\n }\n\n private switchPortfolioMessage(name: string, prevPortfolioId: number, newPortfolioId: number) {\n combineLatest([this.getPortfolioLabelById(prevPortfolioId), this.getPortfolioLabelById(newPortfolioId)])\n .pipe(take(1))\n .subscribe(([prevPortfolioName, newPortfolioName]) => {\n this.snackbarService.warning(\n `${name} is not compatible with ${prevPortfolioName}, switched to ${newPortfolioName}`\n );\n })\n .untilDestroyed(this);\n }\n\n private getPortfolioLabelById(portfolioId: number): Observable {\n return this.store\n .select(selectPortfolios)\n .pipe(map(portfolios => portfolios?.find(p => p.id === Number(portfolioId))?.name));\n }\n\n //get and apply, not just get.\n private applyQueryParams(): void {\n //why once? check\n if (this.queryParamsApplied) return;\n this.queryParamsApplied = true;\n\n this.activatedRoute.queryParams\n .pipe(\n take(1),\n tap(queryParams => {\n const doNotStore = queryParams?.[RouteData.DO_NOT_STORE_PARAMS] === 'true';\n this.store.dispatch(setDoNotStore({ doNotStore }));\n\n const collectionIdsParam = queryParams?.[RouteData.COLLECTION_IDS];\n try {\n this.urlCollectionIds = JSON.parse(collectionIdsParam);\n if (!Array.isArray(this.urlCollectionIds) || this.urlCollectionIds.length == 0) {\n this.urlCollectionIds = null;\n }\n } catch (e) {\n this.urlCollectionIds = null;\n }\n\n if (this.urlCollectionIds) {\n this.store.dispatch(\n //we dont know if its all or not. we will process list of selected later and if all selected set as ALL\n setSelectedCollectionIds({\n collectionIds: this.urlCollectionIds,\n allCollectionsSelected: false,\n })\n );\n //dont set control value, it will update when get store event\n //this.collectionControl.setValue(this.urlCollectionIds);\n //Add Switch to state selection, so we can return -1 (all portfolios if all collection selected)\n //this.store.dispatch(setSelectedPortfolioId({ portfolioId: allPortfoliosValue, }));\n //this.portfolioControl.setValue(allPortfoliosValue);\n }\n\n const queryPortfolioId = queryParams?.[RouteData.PORTFOLIO_ID];\n\n if (queryPortfolioId) {\n this.urlPortfolioId = parseInt(queryPortfolioId, 10);\n } else if (this.urlCollectionIds?.length > 0) {\n this.urlPortfolioId = null;\n }\n\n if (this.urlPortfolioId) {\n //I think we need to set switch here or inside store. if portfolio passed, set it and switch\n this.store.dispatch(setSelectedPortfolioId({ portfolioId: this.urlPortfolioId }));\n //Do we have to set or it will be later when catch store dispatch?\n //this.portfolioControl.setValue(this.urlPortfolioId);\n }\n\n //I return all portfolios on store level if collections selected\n /*if (this.prevSwitchStatus === PropertySelectorSwitchStatus.COLLECTION) {\n this.portfolioControl.setValue(allPortfoliosValue);\n this.store.dispatch(setSelectedPortfolioId({ portfolioId: allPortfoliosValue, }));\n }*/\n\n const propertyIdsParam = queryParams?.[RouteData.PROPERTY_IDS];\n if (propertyIdsParam) {\n try {\n this.urlPropertyIds = JSON.parse(propertyIdsParam);\n if (this.urlPropertyIds) {\n if (this.urlPortfolioId) {\n //debugger;\n this.store.dispatch(\n setSelectedPropertyIds({\n propertyIds: this.urlPropertyIds,\n allPropertiesSelected: false,\n })\n );\n /*this.urlCollectionIds?.length > 0\n ? this.propertyCollectionControl.setValue(this.urlPropertyIds)\n : this.propertyPortfolioControl.setValue(this.urlPropertyIds);*/\n }\n }\n if (!Array.isArray(this.urlPropertyIds) || this.urlPropertyIds.length == 0) {\n this.urlPropertyIds = null;\n //debugger;\n this.store.dispatch(\n setSelectedPropertyIds({\n propertyIds: null,\n allPropertiesSelected: true,\n })\n );\n }\n } catch (e) {\n this.urlPropertyIds = null;\n this.store.dispatch(\n setSelectedPropertyIds({\n propertyIds: null,\n allPropertiesSelected: true,\n })\n );\n }\n }\n\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private onPortfolioControlChange(): void {\n this.portfolioControl.valueChanges\n .pipe(distinctUntilChanged(), untilDestroyed(this))\n .subscribe(portfolioId => {\n this.updatePortfolioSelection(portfolioId);\n portfolioId = this.portfolioControl.value;\n\n const portfolioLabel =\n this.portfolioOptions.find(el => el.value === portfolioId)?.label || allPortfoliosOption.label;\n this.portfolioMaxNameLength$.next(portfolioLabel.length);\n })\n .untilDestroyed(this);\n }\n\n private initPropertySelectorSwitchStatusListener(): void {\n this.store\n .select(selectPropertySelectorSwitchStatus)\n .pipe(untilDestroyed(this))\n .subscribe(propertySelectorSwitchStatus => {\n this.collectionsSelected = propertySelectorSwitchStatus === PropertySelectorSwitchStatus.COLLECTION;\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n }\n\n private onCollectionControlChange(): void {\n //combine latest\n combineLatest([this.collectionControl.valueChanges, this.hasPermissionToPropertyCollection$])\n .pipe(\n untilDestroyed(this),\n tap(([collectionIds]) => {\n if (this.isUpdatingControl || !this.collectionsSelected) return;\n this.isUpdatingControl = true;\n\n this.store.dispatch(\n setSelectedCollectionIds({\n collectionIds,\n allCollectionsSelected: collectionIds?.length === this.allCollectionIds?.length ? true : false,\n })\n );\n this.collectionControl.setValue(collectionIds, { emitEvent: false });\n\n this.isUpdatingControl = false;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private onSinglePropertyControlChange() {\n this.propertyControlSingle.valueChanges\n .pipe(\n tap(propertyId => {\n if (propertyId === allPropertyValue) {\n this.store.dispatch(\n setSelectedPropertyIds({\n propertyIds: null, // in single mode ALL properties = NONE selected //this.portfolioPropertiesIds,\n allPropertiesSelected: true,\n })\n );\n } else {\n this.store.dispatch(\n setSelectedPropertyIds({\n propertyIds: [propertyId],\n allPropertiesSelected: false,\n })\n );\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private onPropertyControlChange(): void {\n this.propertyPortfolioControl.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)),\n tap(propertyIds => {\n if (this.isUpdatingControl) return;\n\n const allPropertiesSelected = difference(this.portfolioPropertiesIds, propertyIds).length === 0;\n\n this.isUpdatingControl = true;\n\n this.store.dispatch(\n setSelectedPropertyIds({\n propertyIds,\n allPropertiesSelected,\n })\n );\n this.isUpdatingControl = false;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.propertyCollectionControl.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)),\n tap(propertyIds => {\n if (this.isUpdatingControl) return;\n\n this.isUpdatingControl = true;\n\n const allPropertiesSelected = difference(this.collectionPropertiesIds, propertyIds).length === 0;\n\n this.store.dispatch(\n setSelectedPropertyIds({\n propertyIds,\n allPropertiesSelected,\n })\n );\n this.isUpdatingControl = false;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private initPortfolios(): Observable[]> {\n return combineLatest([\n this.store.select(selectPortfolios),\n this.applicationMenuService.portfoliosToDisplay$,\n this.store.select(selectSelectedPortfolioId).pipe(take(1)),\n this.routeData$,\n ]).pipe(\n map(data => ({ portfolios: data[0], boardData: data[1], storagePortfolioId: data[2] })),\n filter(data => !!data.portfolios?.length),\n withLatestFrom(this.allPortfolioSelectorEnabled$),\n map(([data, allPortfolioSelectorIsEnabled]) => {\n const allPortfolioIdsSet = new Set(data.portfolios.map(el => el.id));\n this.boardData = data.boardData;\n this.portfolioOptions = [];\n if (allPortfolioSelectorIsEnabled) {\n this.portfolioOptions.push(allPortfoliosOption);\n }\n\n this.portfolioOptions.push(\n ...data.portfolios\n .filter(\n el =>\n !data?.boardData?.portfoliosToDisplayIds?.length ||\n data?.boardData?.portfoliosToDisplayIds.includes(el.id)\n )\n .map>(el => {\n return {\n value: el.id,\n label: el.name,\n };\n })\n );\n\n const portfolioId =\n this.urlPortfolioId && this.portfolioOptions.some(e => e.value === this.urlPortfolioId)\n ? this.urlPortfolioId\n : allPortfoliosValue;\n\n let portfolioIdToSet = portfolioId;\n if (\n this.selectorPropertiesAllInitialization &&\n isDefAndNotNull(data.storagePortfolioId) &&\n portfolioId === allPortfoliosValue\n ) {\n portfolioIdToSet = data.storagePortfolioId;\n if (!allPortfolioIdsSet.has(portfolioIdToSet)) {\n portfolioIdToSet = allPortfoliosValue;\n }\n }\n if (portfolioIdToSet === allPortfoliosOption.value && !allPortfolioSelectorIsEnabled) {\n portfolioIdToSet = first(this.portfolioOptions || [])?.value;\n }\n if (!this.portfolioControl.value && this.portfolioControl.value !== portfolioIdToSet) {\n this.portfolioControl.setValue(portfolioIdToSet);\n }\n return this.portfolioOptions;\n }),\n untilDestroyed(this),\n shareReplay()\n );\n }\n\n private initUserCollections(): Observable[]> {\n const collections$ = this.store.select(selectUserCollections);\n const storageCollectionIds$ = this.store\n .select(selectSelectedCollectionIds)\n .pipe(distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)));\n\n return combineLatest([collections$, storageCollectionIds$, this.hasPermissionToPropertyCollection$]).pipe(\n debounceTime(300),\n map(([collections, storageCollectionIds]) => {\n if (!this.hasPermissionToPropertyCollection || !collections) {\n return [];\n }\n\n const userCollections =\n collections\n .map>(collection => ({\n value: collection.id,\n label: collection.name,\n sort: collection.name.toUpperCase(),\n }))\n .sort((a, b) => a.label.localeCompare(b.label)) ?? [];\n\n this.allCollectionIds = userCollections.map(el => el.value);\n\n const collectionIds = storageCollectionIds?.length ? storageCollectionIds : [];\n\n this.isUpdatingControl = true;\n this.collectionControl.setValue(collectionIds, { emitEvent: false });\n this.isUpdatingControl = false;\n\n this.selectorCollectionsAllInitialization = false;\n return userCollections;\n }),\n untilDestroyed(this),\n shareReplay()\n );\n }\n\n private initPortfolioProperties(): Observable[]> {\n let prevPortfolioId: number;\n\n return combineLatest([\n this.store.select(selectSelectedPortfolioId).pipe(skipEqual$()),\n this.store.select(selectProperties),\n this.store.select(selectSelectedPropertyIds).pipe(take(1)),\n this.applicationMenuService.portfoliosToDisplay$, //not sure if have to\n this.showPropertySingleSelector$,\n this.store.select(selectPropertySelectorSwitchStatus),\n //We have to listen portfolio control changes if we are in single view mode\n this.portfolioControl.valueChanges,\n //this.routeData$,\n ]).pipe(\n debounceTime(300),\n filter(([portfolioId, properties]) => !!properties?.length),\n map(([portfolioId, properties, storagePropertyIds, boardData, singleView, switchStatus]) => {\n if (!portfolioId) {\n this.store.dispatch(setSelectedPortfolioId({ portfolioId: allPortfoliosValue }));\n\n return;\n }\n\n //We dont show switch in single mode so we cant get value from store, it will be always -1\n if (switchStatus == PropertySelectorSwitchStatus.COLLECTION && singleView) {\n portfolioId = this.portfolioControl.value;\n }\n\n let resetProperties = isDefAndNotNull(prevPortfolioId) && prevPortfolioId !== portfolioId;\n\n prevPortfolioId = portfolioId;\n let portfolioProperties = properties\n .filter(\n x =>\n portfolioId === allPortfoliosValue ||\n (x.portfolioId === portfolioId && !boardData?.excludedProperties?.includes(x.id))\n )\n .map>((item, _) => {\n return {\n value: item.id,\n label: item.name,\n sort: item.buildingNumber ? item.buildingNumber : item.name.toUpperCase(),\n hasBuildingNumber: !!item.buildingNumber,\n };\n });\n portfolioProperties = sortBy(portfolioProperties, [item => !item.hasBuildingNumber, item => item.sort]);\n this.portfolioPropertiesIds = portfolioProperties.map(el => el.value);\n\n let propertyIds: number[];\n if (this.urlPropertyIds) {\n propertyIds = this.urlPropertyIds.filter(el => this.portfolioPropertiesIds.includes(el));\n }\n\n if (!this.selectorPropertiesAllInitialization && !propertyIds && !singleView) {\n propertyIds = this.portfolioPropertiesIds;\n }\n\n if (\n this.selectorPropertiesAllInitialization &&\n !propertyIds &&\n isDefAndNotNull(storagePropertyIds) &&\n !singleView\n ) {\n if (storagePropertyIds.length == 0) {\n resetProperties = true;\n } else {\n propertyIds = storagePropertyIds.filter(el => this.portfolioPropertiesIds.includes(el));\n }\n } else if (!this.urlPropertyIds && !singleView) {\n resetProperties = true;\n }\n\n if (resetProperties) {\n propertyIds = this.portfolioPropertiesIds;\n }\n\n if (singleView) {\n if (portfolioId !== this.prevPortfolioControlValue) {\n //How can we detect portfolio change?\n const allPropertiesSelected =\n isEqual(this.portfolioPropertiesIds, propertyIds) || !propertyIds || !propertyIds.length;\n this.propertyControlSingle.setValue(allPropertiesSelected ? allPropertiesOption.value : first(propertyIds));\n }\n\n portfolioProperties.splice(0, 0, allPropertiesOption);\n }\n\n this.selectorPropertiesAllInitialization = false;\n return portfolioProperties;\n }),\n untilDestroyed(this),\n shareReplay()\n );\n }\n\n private initCollectionProperties(): Observable[]> {\n return combineLatest([\n this.store.select(selectSelectedCollectionIds).pipe(skipEqual$()),\n this.store.select(selectProperties),\n this.store.select(selectPropertyCollections),\n this.dashboardViewType$,\n this.hasPermissionToPropertyCollection$,\n this.applicationMenuService.portfoliosToDisplay$,\n ]).pipe(\n debounceTime(300),\n filter(([collectionIds, properties, propertyCollections]) => !!properties?.length),\n map(([collectionIds, properties, propertyCollections, dashboardViewType, , boardData]) => {\n if (!this.hasPermissionToPropertyCollection) {\n return [];\n }\n\n const selectedCollections = propertyCollections.filter(\n collection => !collectionIds || collectionIds.length == 0 || collectionIds.includes(collection.id)\n );\n const propertyIdsFromCollections = selectedCollections.flatMap(collection => collection.propertiesList);\n\n let collectionProperties = properties\n .filter(property => propertyIdsFromCollections.includes(property.id))\n .map>(item => ({\n value: item.id,\n label: item.name,\n sort: item.buildingNumber ? item.buildingNumber : item.name.toUpperCase(),\n hasBuildingNumber: !!item.buildingNumber,\n }));\n\n if (boardData) {\n const portfolioProperties = properties\n .filter(\n x =>\n (!boardData.portfoliosToDisplayIds ||\n boardData.portfoliosToDisplayIds.length == 0 ||\n !boardData.portfoliosToDisplayIds ||\n boardData.portfoliosToDisplayIds.includes(x.portfolioId)) &&\n (!boardData.excludedProperties ||\n boardData.excludedProperties.length == 0 ||\n !boardData.excludedProperties.includes(x.id))\n )\n .map(x => x.id);\n\n collectionProperties = collectionProperties.filter(x => portfolioProperties.includes(x.value));\n }\n\n collectionProperties = sortBy(collectionProperties, [item => !item.hasBuildingNumber, item => item.sort]);\n this.collectionPropertiesIds = collectionProperties.map(el => el.value);\n\n return collectionProperties;\n }),\n untilDestroyed(this),\n shareReplay()\n );\n }\n\n private updateRouterParam(params: Params): void {\n const currentParams = this.activatedRoute.snapshot.queryParams;\n const currentFragment = this.activatedRoute.snapshot.fragment;\n\n const updatedParams = { ...currentParams, ...params };\n\n if (JSON.stringify(currentParams) !== JSON.stringify(updatedParams)) {\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams: updatedParams,\n queryParamsHandling: 'merge',\n replaceUrl: true,\n fragment: currentFragment,\n });\n }\n }\n\n private initAllPortfolioSelector(): Observable {\n return this.routeData$.pipe(\n untilDestroyed(this),\n withLatestFrom(this.store.select(selectTenantData)),\n map(([data, tenantData]) => {\n return tenantData.allPortfolioSelectorIsEnabled || data?.[RouteData.ALL_PORTFOLIOS] === true;\n }),\n distinctUntilChanged(),\n shareReplay()\n );\n }\n\n private initDashboardViewType(): Observable {\n return this.routeData$.pipe(\n untilDestroyed(this),\n map(data => (data?.[RouteData.DASHBOARD_VIEW_TYPE] ?? DashboardViewType.NONE) as DashboardViewType),\n distinctUntilChanged(),\n shareReplay()\n );\n }\n\n private initShowPropertySelector(): Observable {\n return this.dashboardViewType$.pipe(\n untilDestroyed(this),\n map(e => propertySelectorTypes.includes(e))\n );\n }\n\n private initShowPropertySingleSelector(): Observable {\n return this.dashboardViewType$.pipe(\n untilDestroyed(this),\n map(e => e === DashboardViewType.PROPERTY_VIEW_SINGLE)\n );\n }\n\n initPortfolioSelectorWidth(): void {\n this.portfolioMaxNameLength$\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe(value => {\n this.portfolioSelectorsWidthCss = `width-${this.calculateSelectorWidth(value)}`;\n })\n .untilDestroyed(this);\n }\n\n initPropertySelectorWidth(): void {\n this.propertyMaxNameLength$\n .pipe(distinctUntilChanged(), untilDestroyed(this))\n .subscribe(value => {\n this.propertySelectorsWidthCss = `width-${this.calculateSelectorWidth(value)}`;\n })\n .untilDestroyed(this);\n }\n\n private calculateSelectorWidth(maxNameLength: number): number {\n const maxWidth = maxNameLength * 6.31 + 90;\n return Math.max(200, Math.ceil(maxWidth / 10) * 10);\n }\n\n initGroupingItems(): void {\n this.groupingByItems = [\n { label: 'None', value: true },\n { label: 'By property', value: false },\n ];\n }\n\n initGroupingValue(): void {\n this.store\n .select(selectJoinedProperties)\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe(joined => this.grouping.setValue(joined))\n .untilDestroyed(this);\n }\n\n initGroupingValueChanges(): void {\n this.grouping.valueChanges\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe(state => this.store.dispatch(setJoinedProperties({ state })))\n .untilDestroyed(this);\n }\n\n onSwitchToggled(collectionsSelected: boolean): void {\n this.isUpdatingControl = true;\n //That will be updated through a store subscription isnt?\n //this.collectionsSelected = collectionsSelected;\n\n const propertySelectorSwitchStatus = collectionsSelected\n ? PropertySelectorSwitchStatus.COLLECTION\n : PropertySelectorSwitchStatus.PORTFOLIO;\n\n this.store.dispatch(setPropertySelectorSwitchStatus({ propertySelectorSwitchStatus }));\n\n this.isUpdatingControl = false;\n }\n}\n","import { FormGroup } from '@angular/forms';\n\nimport {\n BoardOutputBehaviour,\n BoardOutputType,\n BoardProgressType,\n BoardSourceType,\n BoardType,\n} from '../interfaces/board.enums';\n\nexport function updateFormForBoardType(value: BoardType, form: FormGroup): void {\n const settings = getBoardFormValues()[value];\n if (settings) {\n form.controls.progressType.setValue(settings.progressType);\n form.controls.datasource.setValue(settings.datasource);\n form.controls.outputAction.setValue(settings.outputAction);\n form.controls.outputBehaviour.setValue(settings.outputBehaviour);\n form.controls.boardCellColor.setValue(settings.boardCellColor);\n }\n}\n\nexport function getBoardFormValues(): any {\n return {\n [BoardType.MakeReady]: {\n progressType: BoardProgressType.UpdateMakeReadyProgressBar,\n datasource: BoardSourceType.MakeReadyUnits,\n outputAction: BoardOutputType.SendToApproval,\n outputBehaviour: BoardOutputBehaviour.Automatically,\n boardCellColor: '#ffffff',\n },\n [BoardType.Reno]: {\n progressType: BoardProgressType.UpdateRENOProgressBar,\n datasource: BoardSourceType.RenoUnits,\n outputAction: BoardOutputType.SendToApproval,\n outputBehaviour: BoardOutputBehaviour.Automatically,\n boardCellColor: '#f5fbfb',\n },\n [BoardType.Marketing]: {\n progressType: BoardProgressType.None,\n datasource: BoardSourceType.UnleasedUnits,\n outputAction: BoardOutputType.None,\n outputBehaviour: null,\n boardCellColor: '#fafffa',\n },\n [BoardType.LeaseUp]: {\n progressType: BoardProgressType.UpdateLeaseUpProgressBar,\n datasource: BoardSourceType.LeaseUpUnits,\n outputAction: BoardOutputType.None,\n outputBehaviour: BoardOutputBehaviour.Manually,\n boardCellColor: '#EFFBEF',\n },\n [BoardType.Prelease]: {\n progressType: BoardProgressType.None,\n datasource: BoardSourceType.PreleaseUnits,\n outputAction: BoardOutputType.None,\n outputBehaviour: BoardOutputBehaviour.Manually,\n boardCellColor: '#FCF9FC',\n },\n [BoardType.Eviction]: {\n progressType: BoardProgressType.UpdateNoticeProgressBar,\n datasource: BoardSourceType.UnitsInNoticeUnderEviction,\n outputAction: BoardOutputType.SendToMoveOut,\n outputBehaviour: BoardOutputBehaviour.Automatically,\n boardCellColor: '#FFF7F7',\n },\n [BoardType.MoveIn]: {\n progressType: BoardProgressType.UpdateMoveInProgressBar,\n datasource: BoardSourceType.UnitsInMoveIn,\n outputAction: BoardOutputType.SendToArchive,\n outputBehaviour: BoardOutputBehaviour.Automatically,\n boardCellColor: '#ffffff',\n },\n [BoardType.MoveOut]: {\n progressType: BoardProgressType.UpdateMoveOutProgressBar,\n datasource: BoardSourceType.MoveOutUnits,\n outputAction: BoardOutputType.SendToMakeReady,\n outputBehaviour: BoardOutputBehaviour.Automatically,\n boardCellColor: '#ffffff',\n },\n [BoardType.Approval]: {\n progressType: BoardProgressType.UpdateApprovalProgressBar,\n datasource: BoardSourceType.NonPmsUnits,\n outputAction: BoardOutputType.SendToArchive,\n outputBehaviour: BoardOutputBehaviour.Automatically,\n boardCellColor: '#ffffff',\n },\n [BoardType.NonPms]: {\n progressType: BoardProgressType.None,\n datasource: BoardSourceType.NonPmsUnits,\n outputAction: BoardOutputType.SendToArchive,\n outputBehaviour: BoardOutputBehaviour.Automatically,\n boardCellColor: '#fdfdf2',\n },\n [BoardType.Custom]: {\n progressType: BoardProgressType.None,\n datasource: BoardSourceType.Manual,\n outputAction: BoardOutputType.None,\n outputBehaviour: BoardOutputBehaviour.Automatically,\n boardCellColor: '#ffffff',\n },\n };\n}\n","import { Directive, ElementRef, EventEmitter, Input, OnInit, Output, Renderer2 } from '@angular/core';\nimport { Observable, debounceTime, fromEvent, startWith, takeUntil, tap } from 'rxjs';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\nimport { DestroyService } from '../services/destroy.service';\n\n@Directive({ selector: '[appScroll]', standalone: true, providers: [DestroyService] })\nexport class ScrollDirective extends PuSubscribable implements OnInit {\n @Input() scrollBottomThreshold = 40;\n @Input() addScrollableClass = '';\n @Input() isActive = true;\n @Output() scrolledToBottom: EventEmitter = new EventEmitter();\n @Output() scrollToBottom: EventEmitter = new EventEmitter();\n\n scroll$ = this.initScroll();\n\n constructor(private elementRef: ElementRef, private destroy$: DestroyService, private r: Renderer2) {\n super();\n }\n\n ngOnInit() {\n this.scroll$.subscribe().untilDestroyed(this);\n }\n\n private onScroll(): void {\n const element = this.elementRef?.nativeElement as HTMLElement;\n const scrollPosition = element?.scrollTop + element?.clientHeight;\n const totalScrollHeight = element?.scrollHeight;\n\n if (this.scrollBottomThreshold && this.isActive && scrollPosition && totalScrollHeight)\n this.checkScrollBottom(this.scrollBottomThreshold, scrollPosition, totalScrollHeight);\n }\n\n private initScroll(): Observable {\n return fromEvent(this.elementRef.nativeElement, 'scroll').pipe(\n debounceTime(200),\n startWith(null),\n tap(() => this.onScroll()),\n takeUntil(this.destroy$)\n );\n }\n\n private checkScrollBottom(scrollThreshold: number, scrollPosition: number, totalScrollHeight: number): void {\n const remainingScroll = totalScrollHeight - scrollPosition;\n this.scrollToBottom.emit(remainingScroll);\n\n if (scrollPosition >= totalScrollHeight - scrollThreshold) this.scrolledToBottom.emit();\n }\n}\n","

{{ isEditMode ? 'Edit' : 'Add' }} board

\n
\n 30\">\n \n
\n \n \n
\n\n
\n \n
\n\n
\n
\n
\n \n\n \n\n
\n \n\n \n
\n\n
\n \n\n \n
\n\n \n\n \n
\n\n \n\n \n
Column groups
\n\n
\n
\n \n\n \n\n \n\n \n\n \n
\n
\n\n
\n \n New group\n
\n \n
\n
\n \n
\n \n
\n \n \n
\n
\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { intersection, last, remove } from 'lodash';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter, map, take, tap } from 'rxjs/operators';\n\nimport { PropertiesService } from '@app/services/properties.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport {\n Board,\n BoardColumn,\n BoardConfiguration,\n BoardOutputBehaviourList,\n BoardOutputTypeList,\n BoardSourceTypeList,\n BoardTypeList,\n DoNotAllowToCreateTicketsRule,\n ProgressTypeList,\n RestBoardModel,\n disallowSourceTypeOutputTypeMap,\n} from '@main-application/boards/interfaces/board';\nimport { selectPortfolios } from '@portfolio/store/portfolio.selectors';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { BooleanListConst } from '@shared/constants/boolean-list.const';\nimport { ButtonType } from '@shared/enums/button-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestPortfolioModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { EnumerationValuePipe } from '@shared/pipes/enumeration-value.pipe';\nimport { isControlInvalid } from '@shared/utils/forms/is-control-invalid';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { updateFormForBoardType } from './boards-create';\nimport { allPortfoliosOption } from '../../application-menu/property-selector/constants';\nimport { BoardOutputBehaviour, BoardType } from '../interfaces/board.enums';\nimport { IBoardGroup } from '../interfaces/borad-groups.interface';\nimport { BoardService } from '../services/board.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-boards-create',\n templateUrl: './boards-create.component.html',\n styleUrls: ['./boards-create.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BoardsCreateComponent extends PuSubscribable implements OnInit {\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private dialogRef: MatDialogRef,\n private formBuilder: FormBuilder,\n private boardService: BoardService,\n private propertiesService: PropertiesService,\n private store: Store<{}>,\n private cdr: ChangeDetectorRef,\n private snackbarService: SnackbarService,\n private enumerationValuePipe: EnumerationValuePipe,\n @Inject(MAT_DIALOG_DATA) public data?: BoardConfiguration & { columns: BoardColumn[] }\n ) {\n super();\n }\n\n private boardActionSubject = new BehaviorSubject(false);\n inProgress$ = this.boardActionSubject.asObservable();\n ButtonType = ButtonType;\n colOptions: IRadioButtonOption[] =\n this.data?.columns.map(col => ({\n value: col.id,\n label: col.name,\n })) || [];\n form = this.initFormGroups();\n boardGroupForm = this.initBoardGroupConfig();\n groupsArray: FormArray = this.boardGroupForm.get('groups') as FormArray;\n progressTypeList = ProgressTypeList;\n boardSourceTypeList = BoardSourceTypeList;\n boardTypeList = BoardTypeList;\n boardOutputTypeList = BoardOutputTypeList;\n boardOutputBehaviorList = BoardOutputBehaviourList;\n doNotAllowToCreateTicketBehaviorList = DoNotAllowToCreateTicketsRule;\n booleanListConst = BooleanListConst;\n userPortfolios: IRadioButtonOption[] = [];\n propertyList: IRadioButtonOption[] = [];\n isEditMode: boolean;\n isSettingsOpened = false;\n scrollToBottom$ = new BehaviorSubject(null);\n private allProperties: IRadioButtonOption[] = [];\n\n ngOnInit(): void {\n this.isEditMode = !!this.data;\n this.form.patchValue(this.data);\n if (!this.data?.selectedPortfolioIds?.length) {\n this.form.controls.selectedPortfolioIds.setValue([-1]);\n }\n this.store\n .select(selectPortfolios)\n .pipe(\n filter(portfolios => !!portfolios?.length),\n tap((portfolios: RestPortfolioModel[]) => {\n this.userPortfolios = [allPortfoliosOption];\n this.userPortfolios.push(\n ...portfolios.map>(item => {\n return {\n value: item.id,\n label: item.name,\n };\n })\n );\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.form.controls.selectedPortfolioIds.valueChanges\n .pipe(\n distinctUntilChanged(),\n tap((value: number[]) => {\n if (value?.length > 1 && last(value) > 0) {\n remove(value, x => x < 0);\n this.form.controls.selectedPortfolioIds.setValue(value);\n }\n if (value?.length > 1 && last(value) < 0) {\n this.form.controls.selectedPortfolioIds.setValue([-1]);\n }\n if (!value?.length) {\n this.form.controls.selectedPortfolioIds.setValue([-1]);\n }\n this.updatePropertyList();\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.form.controls.boardType.valueChanges\n .pipe(\n distinctUntilChanged(),\n tap(value => {\n if (\n !this.form.value.name ||\n this.boardTypeList\n .flat()\n .map(e => e.label)\n .includes(this.form.value.name)\n ) {\n const selected = this.boardTypeList.flat().find(x => x.value === value);\n if (selected) {\n this.form.controls.name.setValue(selected.label);\n\n updateFormForBoardType(value, this.form);\n if (BoardType.Custom) {\n this.isSettingsOpened = true;\n }\n }\n }\n\n switch (value) {\n case BoardType.MakeReady:\n case BoardType.Reno:\n this.form.controls.outputAction.setValidators(Validators.required);\n this.form.controls.outputAction.updateValueAndValidity();\n break;\n case BoardType.Marketing:\n this.form.controls.outputAction.clearValidators();\n this.form.controls.outputAction.updateValueAndValidity();\n break;\n case BoardType.Custom:\n this.form.controls.outputAction.clearValidators();\n this.form.controls.outputAction.updateValueAndValidity();\n break;\n }\n\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n if (!this.isEditMode) {\n this.form.controls.boardType.setValue(BoardType.MakeReady);\n }\n\n this.propertiesService\n .getAllUserProperties()\n .pipe(\n filter(properties => !!properties?.length),\n tap(properties => {\n this.allProperties = properties.map(item => ({\n value: item.id,\n label: item.name,\n }));\n this.updatePropertyList();\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private updatePropertyList(): void {\n const selectedPortfolioIds = this.form.controls.selectedPortfolioIds.value;\n\n if (!selectedPortfolioIds?.length || selectedPortfolioIds.includes(-1)) {\n this.propertyList = [...this.allProperties];\n return;\n }\n\n combineLatest([this.store.select(selectPortfolios), this.propertiesService.getAllUserProperties()])\n .pipe(\n take(1),\n map(([portfolios, properties]) => {\n const selectedProperties = properties.filter(property => selectedPortfolioIds.includes(property.portfolioId));\n\n this.propertyList = selectedProperties.map(item => ({\n value: item.id,\n label: item.name,\n }));\n\n const currentExcludedIds = this.form.controls.excludedPropertyIds.value || [];\n const availablePropertyIds = this.propertyList.map(p => p.value);\n const newExcludedIds = currentExcludedIds.filter(id => availablePropertyIds.includes(id));\n\n if (currentExcludedIds.length !== newExcludedIds.length) {\n this.form.controls.excludedPropertyIds.setValue(newExcludedIds);\n }\n\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n toggleAdvancedSettings() {\n this.isSettingsOpened = !this.isSettingsOpened;\n }\n\n submit() {\n if (this.inDisallowedType()) {\n this.shorError();\n return;\n }\n if (isControlInvalid(this.form)) return this.form.markAllAsTouched();\n\n this.boardActionSubject.next(true);\n if (this.isEditMode) {\n this.dialogRef.close({ ...this.data, ...this.form.value, extendedConfigParsed: this.boardGroupForm.value });\n return;\n }\n const board = new Board(Object.assign({}, this.data, this.form.value));\n this.boardService\n .add(new RestBoardModel(board))\n .subscribe(id => {\n this.router.navigate([AppRoutes.BOARDS, id], { relativeTo: this.activatedRoute, queryParamsHandling: 'merge' });\n this.dialogRef.close();\n })\n .untilDestroyed(this);\n }\n\n close() {\n this.dialogRef.close();\n }\n\n private initFormGroups(): FormGroup {\n return this.formBuilder.group({\n selectedPortfolioIds: [this.data?.selectedPortfolioIds],\n excludedPropertyIds: [this.data?.excludedPropertyIds || []],\n boardType: [this.data?.boardType, [Validators.required]],\n name: [this.data?.name, [Validators.required]],\n progressType: [this.data?.progressType, [Validators.required]],\n datasource: [this.data?.datasource, [Validators.required]],\n outputAction: [this.data?.outputAction, []],\n outputBehaviour: [this.data?.outputBehaviour, []],\n showArchivedTurnovers: [this.data?.showArchivedTurnovers || false],\n boardCellColor: [this.data?.boardCellColor ?? '#ffffff'],\n dontCreateTickets: [this.data?.dontCreateTickets ?? false],\n });\n }\n\n private initBoardGroupConfig(): FormGroup {\n return this.formBuilder.group({\n groups: this.createFormGroupFromGroups(this.data?.extendedConfigParsed?.groups || []),\n });\n }\n\n private createFormGroupFromGroups(groups: IBoardGroup[]): FormArray {\n return this.formBuilder.array(groups.map(group => this.createGroupFormGroup(group)));\n }\n\n private createGroupFormGroup(group: IBoardGroup): FormGroup {\n return this.formBuilder.group({\n name: [group.name || 'New group'],\n colorBg: [group.colorBg || '#eeeeee'],\n colorText: [group.colorText || '#212121'],\n cols: [\n intersection(\n group.cols,\n this.colOptions.map(c => c.value)\n ) || [],\n ],\n });\n }\n\n addNewGroup(): void {\n const groupsArray = this.boardGroupForm.get('groups') as FormArray;\n const colorBg = '#eeeeee';\n const colorText = '#212121';\n groupsArray.push(this.createGroupFormGroup({ name: '', colorBg, colorText, cols: [] }));\n }\n\n removeGroup(index: number): void {\n const groupsArray = this.boardGroupForm.get('groups') as FormArray;\n groupsArray.removeAt(index);\n }\n\n private shorError(): void {\n this.snackbarService.error(\n `Turns cannot auto-progress to the same step they started in. Either set \"Remove rows\" to \"manual\" or choose an ending destination that is not \"${this.enumerationValuePipe.transform(\n this.form.value.outputAction,\n BoardOutputTypeList\n )}\"`\n );\n }\n\n private inDisallowedType(): boolean {\n return (\n this.form.value.outputBehaviour === BoardOutputBehaviour.Automatically &&\n this.form.value.datasource != null &&\n this.form.value.outputAction != null &&\n disallowSourceTypeOutputTypeMap[this.form.value.datasource] === this.form.value.outputAction\n );\n }\n\n readonly EIcon = EIcon;\n}\n","import { ChangeDetectorRef, Directive } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { TicketAttachmentType } from '@shared/enums/attachment-type';\nimport { DashboardMode } from '@shared/enums/dashboard-mode';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { EnumerationConfig } from '@shared/interfaces/enumeration-config';\n\n@Directive()\nexport abstract class DashboardsAbstract extends ComponentAbstract {\n emptyDashboard = true;\n selectSelectedPropertyIds$: Observable;\n selectSelectedPortfolioId$: Observable;\n enumerations$: Observable;\n dashboardMode: DashboardMode;\n permissionList: PermissionLevelType[];\n\n protected constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n get WorkflowStep(): typeof WorkflowStepEnumType {\n return WorkflowStepEnumType;\n }\n\n get DashboardViewType(): typeof DashboardViewType {\n return DashboardViewType;\n }\n\n get DashboardMode(): typeof DashboardMode {\n return DashboardMode;\n }\n\n get TicketAttachmentType(): typeof TicketAttachmentType {\n return TicketAttachmentType;\n }\n}\n","
\n \n \n \n Back\n \n \n
\n \n
\n
\n\n\n \n\n\n\n
\n
\n

Hello, {{ userData?.firstName || '' }}! 👋

\n \n \n \n {{ userData.id === assignee.value ? 'You have ' : '' }} {{ data.myTasksTurnovers }}\n {{ data.myTasksTurnovers === 1 ? 'turn' : 'turns' }} and {{ data.myTasksTickets }}\n {{ data.myTasksTickets === 1 ? 'ticket' : 'tickets' }}.\n \n {{ data.staleTurnovers }} stale\n \n \n \n {{ data.lateTurnovers }} late\n \n \n
\n \n
\n
\n \n
\n \n
\n\n\n

{{ headerValue || '' }}!

\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, TemplateRef } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\nimport { DashboardsAbstract } from '@dashboards/components/abstract/dashboards.abstract';\nimport { setDashboardFilter } from '@dashboards/store/actions/dashboard-filter.actions';\nimport { selectDashboardFilterState } from '@dashboards/store/selectors/dashboard-filter.selectors';\nimport {\n selectLateTurnoversCount,\n selectMyTasksLoading,\n selectMyTasksTicketsCount,\n selectMyTasksTurnoversCount,\n selectStaleTurnoversCount,\n} from '@dashboards/store/selectors/dashboards.selectors';\nimport { selectActiveUsers } from '@main-application/administration/store/selectors/administration.selectors';\nimport { selectUserData } from '@main-application/store/selectors/user.selectors';\nimport { PriorityType } from '@shared/enums/priority-type';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n@UntilDestroy()\n@Component({\n selector: 'app-dashboard-user-header',\n templateUrl: './dashboard-user-header.component.html',\n styleUrls: ['./dashboard-user-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DashboardUserHeaderComponent extends DashboardsAbstract implements OnInit {\n myTasksTurnovers$: Observable;\n staleTurnovers$: Observable;\n lateTurnovers$: Observable;\n myTasksTickets$: Observable;\n myTasksLoading$: Observable;\n assignee: UntypedFormControl = new UntypedFormControl();\n users: RestUserModel[];\n protected readonly PriorityType = PriorityType;\n\n @Input() previousRoute?: string;\n @Input() headerValue = '';\n @Input() customHeaderTemplate: TemplateRef;\n @Input() containerCss = '';\n @Input() showAssigneeControl = false;\n\n get showBack() {\n return this.previousRoute;\n }\n\n constructor(protected cdr: ChangeDetectorRef, private store: Store<{}>, private router: Router) {\n super(cdr);\n }\n\n ngOnInit(): void {\n combineLatest([this.store.select(selectUserData), this.store.select(selectDashboardFilterState)])\n .pipe(\n untilDestroyed(this),\n filter(([userData]) => !!userData),\n tap(([userData, filter]) => {\n this.userData = userData;\n if (filter?.assignee !== undefined) {\n this.assignee.setValue(filter.assignee ?? -1);\n } else {\n this.store.dispatch(setDashboardFilter({ assignee: this.userData.id }));\n }\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectActiveUsers)\n .pipe(\n untilDestroyed(this),\n filter((users: RestUserModel[]) => !!users?.length),\n tap((users: RestUserModel[]) => {\n this.users = users;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.assignee.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(assignee => {\n this.store.dispatch(setDashboardFilter({ assignee: assignee > 0 ? assignee : null }));\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.myTasksLoading$ = this.store.select(selectMyTasksLoading);\n this.myTasksTurnovers$ = this.store.select(selectMyTasksTurnoversCount);\n this.myTasksTickets$ = this.store.select(selectMyTasksTicketsCount);\n this.staleTurnovers$ = this.store.select(selectStaleTurnoversCount);\n this.lateTurnovers$ = this.store.select(selectLateTurnoversCount);\n }\n\n goBack() {\n this.router.navigateByUrl(this.previousRoute);\n }\n}\n","import { createFeatureSelector } from '@ngrx/store';\n\nimport * as fromDashboardFilter from '@dashboards/store/reducers/dashboard-filter.reducer';\n\nexport const selectDashboardFilterState = createFeatureSelector(\n fromDashboardFilter.dashboardFilterFeatureKey\n);\n","export enum UnitDetailsComponentForm {\n FINISH = 'finish',\n DESCRIPTION = 'description',\n RENT = 'rent',\n OLDRENT = 'oldRent',\n MARKETRENT = 'marketRent',\n ADVERTISEDRENT = 'advertisedRent',\n}\n","import { ChangeDetectorRef, Directive, Input } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { MatTableDataSource } from '@angular/material/table';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { UnitDetailsComponentForm } from '@portfolio/components/unit-details/config/enums/unit-details-component-form';\nimport { RestAddressModel } from '@shared/interfaces/address.interface';\nimport { RestApplianceModel } from '@shared/interfaces/appliance.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n@Directive()\nexport abstract class UnitDetailsAbstract extends ComponentAbstract {\n readonly displayedColumns = [\n 'applianceType',\n 'id',\n 'brand',\n 'modelNumber',\n 'serialNumberReplaced',\n 'serialNumber',\n 'applianceColor',\n ];\n dataSource: MatTableDataSource;\n\n propertyAddress = '';\n propertyManager = '';\n\n form: UntypedFormGroup;\n portfolioId: number;\n propertyId: number;\n turnoverId: number;\n applianceId: number;\n bulkBidId: number;\n unit: RestUnitModel;\n applianceInUnit: RestApplianceModel[] = [];\n applianceTypeList: IRadioButtonOption[] = [];\n colorTypeList: IRadioButtonOption[] = [];\n\n @Input() unitId: number;\n @Input() readOnly = true;\n\n protected constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n get UnitDetailsComponentForm(): typeof UnitDetailsComponentForm {\n return UnitDetailsComponentForm;\n }\n\n getPropertyAddress(physicalAddress: RestAddressModel): string {\n if (physicalAddress) {\n return `${physicalAddress?.street1 || ''} ${physicalAddress?.street2 || ''}, ${physicalAddress?.city || ''} ${\n physicalAddress?.zip || ''\n }`;\n }\n return '';\n }\n\n getPropertyManager(propertyManager: RestUserModel) {\n if (!propertyManager?.firstName && !propertyManager?.lastName) {\n return 'N/A';\n }\n return `${propertyManager?.firstName || ''} ${propertyManager?.lastName || ''}`;\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { UnitDetailsAbstract } from '@portfolio/components/unit-details/abstract/unit-details.abstract';\nimport { getUnitAttachments, setUnitAttachment } from '@portfolio/store/portfolio.actions';\nimport { selectUnitAttachments } from '@portfolio/store/portfolio.selectors';\nimport { imageVideoFileExtensions } from '@shared/constants/file-extensions.const';\nimport { UnitAttachmentType } from '@shared/enums/attachment-type';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { UpdateTypedAttachmentToEntityModel } from '@shared/interfaces/turnover.interface';\nimport { Upload } from '@shared/interfaces/upload';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nexport enum UnitDetailsPicturesSectionComponentForm {\n PHOTO = 'photo',\n FLOOR_PLAN = 'floorPlan',\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-unit-details-pictures-section',\n templateUrl: './unit-details-pictures-section.component.html',\n styleUrls: ['./unit-details-pictures-section.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UnitDetailsPicturesSectionComponent extends UnitDetailsAbstract implements OnInit {\n fileUploadInProgress = false;\n form: UntypedFormGroup;\n unitPhotos: RestGenericTypedAttachment[] = [];\n unitFloorPlan: RestGenericTypedAttachment[] = [];\n unitPhotosBSubject: BehaviorSubject = new BehaviorSubject(\n []\n );\n unitFloorPlanBSubject: BehaviorSubject = new BehaviorSubject<\n RestGenericTypedAttachment[]\n >([]);\n displayedUnitPhotos: RestGenericTypedAttachment[] = [];\n displayedUnitFloorPlan: RestGenericTypedAttachment[] = [];\n UnitAttachmentType = UnitAttachmentType;\n protected readonly acceptedFormats = imageVideoFileExtensions;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private store: Store<{}>,\n private formBuilder: UntypedFormBuilder,\n private modalsService: ModalsService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.initForm();\n\n this.store.dispatch(getUnitAttachments({ unitId: this.unitId }));\n\n this.store\n .select(selectUnitAttachments)\n .pipe(\n untilDestroyed(this),\n filter((unitAttachments: RestGenericTypedAttachment[]) => !!unitAttachments),\n tap((unitAttachments: RestGenericTypedAttachment[]) => {\n this.prepareUnitAttachments(unitAttachments);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n fileUploaded(item: AttachmentItem, unitAttachmentType: UnitAttachmentType) {\n if (item?.upload) {\n this.setAttachment(item.upload, unitAttachmentType);\n }\n }\n\n showUnitPictures() {\n this.modalsService.openGalleryModal({\n attachmentType: UnitAttachmentType.Photo,\n attachmentsBSubject: this.unitPhotosBSubject,\n readOnly: this.readOnly,\n unitId: this.unitId,\n });\n }\n\n showUnitFloorPlans() {\n this.modalsService.openGalleryModal({\n attachmentType: UnitAttachmentType.FloorPlan,\n attachmentsBSubject: this.unitFloorPlanBSubject,\n readOnly: this.readOnly,\n unitId: this.unitId,\n });\n }\n\n private setAttachment(upload: Upload, attachmentType: UnitAttachmentType) {\n const attachmentToEntity: UpdateTypedAttachmentToEntityModel = {\n externalUrl: '',\n unitId: this.unitId,\n propertyId: 0,\n portfolioId: 0,\n turnoverIds: [],\n applianceId: 0,\n bidId: 0,\n ticketId: 0,\n attachmentType,\n fileUploadId: upload?.id,\n title: upload?.originalFileName,\n description: '',\n };\n this.store.dispatch(setUnitAttachment({ attachmentToEntity }));\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n [UnitDetailsPicturesSectionComponentForm.PHOTO]: [null, [Validators.required]],\n [UnitDetailsPicturesSectionComponentForm.FLOOR_PLAN]: [null, [Validators.required]],\n });\n }\n\n private prepareUnitAttachments(unitAttachments: RestGenericTypedAttachment[]) {\n this.unitPhotos = [];\n this.unitFloorPlan = [];\n\n unitAttachments?.forEach(item => {\n switch (item.targetAttachmentType as UnitAttachmentType) {\n case UnitAttachmentType.Photo:\n {\n this.unitPhotos.push(item);\n }\n break;\n case UnitAttachmentType.FloorPlan:\n {\n this.unitFloorPlan.push(item);\n }\n break;\n }\n });\n\n this.unitPhotosBSubject.next(this.unitPhotos);\n this.unitFloorPlanBSubject.next(this.unitFloorPlan);\n\n this.displayedUnitPhotos = this.unitPhotos.slice(0, 2);\n this.displayedUnitFloorPlan = this.unitFloorPlan.slice(0, 2);\n }\n}\n","
\n
\n
Photos ({{ unitPhotos?.length || 0 }})
\n
\n \n
\n
\n
displayedUnitPhotos?.length\">\n
\n \n
\n
\n \n
\n
\n
\n
Floor plan ({{ unitFloorPlan?.length || 0 }})
\n
\n \n
\n
\n
displayedUnitFloorPlan?.length\">\n
\n \n
\n
\n \n
\n
\n
\n\n\n
\n \n Add photos\n \n
\n
\n\n\n
\n \n Add floor plan\n \n
\n
\n\n\n \n\n\n\n \n\n","
\n
\n
\n
\n
\n
Property manager:
\n
\n {{ propertyManager }}\n {{ propertyManager }}\n
\n
\n
\n
Unit type:
\n
{{ unit?.unitType || '' }}
\n
\n
\n
Finish:
\n \n \n \n \n
{{ unit?.finish | enumerationValue: finishList }}
\n
\n
\n
\n
\n
\n
Lease expires:
\n
{{ unit?.dateLeaseExpires | date: 'MM/dd/yy' }}
\n
\n
\n
Bd/Br:
\n
{{ unit?.numberOfBedrooms || '-' }} / {{ unit?.numberOfBathrooms || '-' }}
\n
\n
\n
Sf:
\n
{{ unit?.squareFootage || '' }}
\n
\n
\n
\n
\n
\n
Description
\n \n \n \n \n
{{ unit?.description || '' }}
\n
\n
\n
\n
Address:
\n
{{ propertyAddress || '' }}
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { selectUnit } from '@dashboards/store/selectors/dashboards.selectors';\nimport { selectFinishTypesEnumeration } from '@main-application/store/selectors/enumeration.selectors';\nimport { UnitDetailsAbstract } from '@portfolio/components/unit-details/abstract/unit-details.abstract';\nimport { getEnumerationRadioListFunction } from '@shared/functions/get-enumeration-radio-list.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\n\n@UntilDestroy()\n@Component({\n selector: 'app-unit-details-property-section',\n templateUrl: './unit-details-property-section.component.html',\n styleUrls: ['./unit-details-property-section.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UnitDetailsPropertySectionComponent extends UnitDetailsAbstract implements OnInit {\n propertyManagerEmail = '';\n finishList: IRadioButtonOption[] = [];\n\n @Input() descriptionGroup: UntypedFormGroup;\n\n get description(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.DESCRIPTION) as UntypedFormControl;\n }\n\n get finish(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.FINISH) as UntypedFormControl;\n }\n\n constructor(protected cdr: ChangeDetectorRef, private store: Store<{}>) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.store\n .select(selectUnit)\n .pipe(\n untilDestroyed(this),\n filter((unit: RestUnitModel) => !!unit),\n tap((unit: RestUnitModel) => {\n this.unit = unit;\n this.propertyAddress = this.getPropertyAddress(this.unit.property?.addresses?.physicalAddress);\n this.propertyManager = this.getPropertyManager(this.unit?.property?.propertyManager);\n this.propertyManagerEmail = this.unit?.property?.propertyManager?.email;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectFinishTypesEnumeration)\n .pipe(\n untilDestroyed(this),\n tap(finishEnumeration => {\n this.finishList = getEnumerationRadioListFunction(finishEnumeration, '', false);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n}\n","
\n
\n
\n \n
\n \n \n \n \n
\n
\n \n
\n
Market Rent:
\n
\n
{{ unit?.marketRent | currency: 'USD':'symbol':'1.0-0' }}
\n \n
\n
Adv. Rent:
\n
\n
{{ unit?.advertisedRent | currency: 'USD':'symbol':'1.0-0' }}
\n \n
\n
Old Rent:
\n
\n
{{ unit?.oldRent | currency: 'USD':'symbol':'1.0-0' }}
\n \n
\n
Rent:
\n
\n
{{ unit?.rent | currency: 'USD':'symbol':'1.0-0' }}
\n \n
\n
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport {\n selectRenewalStrategyForUnit,\n selectRenewalStrategyForUnitLoading,\n selectUnit,\n} from '@dashboards/store/selectors/dashboards.selectors';\nimport { UnitDetailsAbstract } from '@portfolio/components/unit-details/abstract/unit-details.abstract';\nimport { RestUnitRenewalTargetModel } from '@shared/interfaces/renevals.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\n\n@UntilDestroy()\n@Component({\n selector: 'app-unit-details-description-section',\n templateUrl: './unit-details-description-section.component.html',\n styleUrls: ['./unit-details-description-section.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UnitDetailsDescriptionSectionComponent extends UnitDetailsAbstract implements OnInit {\n restUnitTypeRentTargetModel: RestUnitRenewalTargetModel;\n renewalStrategyLoading$: Observable;\n\n @Input() descriptionGroup: UntypedFormGroup;\n\n constructor(protected cdr: ChangeDetectorRef, private store: Store<{}>) {\n super(cdr);\n }\n\n get rent(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.RENT) as UntypedFormControl;\n }\n\n get marketRent(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.MARKETRENT) as UntypedFormControl;\n }\n\n get advertisedRent(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.ADVERTISEDRENT) as UntypedFormControl;\n }\n\n get oldRent(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.OLDRENT) as UntypedFormControl;\n }\n\n ngOnInit(): void {\n this.renewalStrategyLoading$ = this.store.select(selectRenewalStrategyForUnitLoading);\n\n this.store\n .select(selectRenewalStrategyForUnit)\n .pipe(\n untilDestroyed(this),\n filter((restUnitTypeRentTargetModel: RestUnitRenewalTargetModel) => !!restUnitTypeRentTargetModel),\n tap((restUnitTypeRentTargetModel: RestUnitRenewalTargetModel) => {\n this.restUnitTypeRentTargetModel = restUnitTypeRentTargetModel;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectUnit)\n .pipe(\n untilDestroyed(this),\n filter((unit: RestUnitModel) => !!unit),\n tap((unit: RestUnitModel) => {\n this.unit = unit;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n}\n","
0; else noInspections\">\n
\n \n \n Turbo\n \n \n \n \n \n Name\n \n {{ inspection.inspectionTemplate?.name ?? inspection.inspectionType }}\n \n \n \n Type\n \n {{ inspection.isResident ? 'Resident' : 'Standard' }}\n \n \n \n Status\n \n \n {{ inspection.status }}\n \n \n \n \n Items\n \n {{ inspection.completedOrSkippedAreasCount }}\n \n \n \n Due\n \n {{ inspection.entityDetails.dueDate | date: 'MM/dd/yy' }}\n \n \n \n Completed\n \n {{ inspection.entityDetails.completedAt | date: 'MM/dd/yy' }}\n \n \n \n Assignee\n {{ inspection.entityDetails.assigneeUser?.displayName }}\n \n \n Actions\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n\n No inspections. Go have a look! 🔎\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSort, SortDirection } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { combineLatest, tap } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { selectUnit } from '@dashboards/store/selectors/dashboards.selectors';\nimport { InspectionModel } from '@main-application/inspections/models/inspection.model';\nimport { InspectionStatus } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { InspectionService } from '@main-application/inspections/services/inspection.service';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { loadAllUserTemplates } from '@template/store/template.actions';\nimport { selectTemplates } from '@template/store/template.selectors';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-unit-details-inspections',\n templateUrl: './unit-details-inspections.component.html',\n styleUrls: [\n '../../../../../../../inspections/components/inspections-base.component.scss',\n './unit-details-inspections.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UnitDetailsInspectionsComponent extends ComponentAbstract implements OnInit {\n sortDirection: SortDirection = 'desc';\n sortActive = 'completedAt';\n inspectionsSource: MatTableDataSource;\n unit: RestUnitModel;\n templateList: RestTemplateModel[];\n InspectionStatus = InspectionStatus;\n\n @Input()\n displayedColumns = [\n 'inspectionName',\n 'inspectionType',\n 'status',\n 'rooms',\n 'dueDate',\n 'completedAt',\n 'assignee',\n 'actions',\n ];\n\n @ViewChild(MatSort, { static: false }) set content(sort: MatSort) {\n if (sort) {\n if (this.inspectionsSource) {\n this.inspectionsSource.sort = sort;\n this.cdr.detectChanges();\n }\n }\n }\n\n constructor(\n cdr: ChangeDetectorRef,\n public router: Router,\n private snackbarService: SnackbarService,\n private inspectionService: InspectionService,\n private modalService: ModalsService,\n private store: Store<{}>,\n private dialog: MatDialog\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.store.dispatch(loadAllUserTemplates());\n\n combineLatest([this.store.select(selectUnit), this.store.select(selectTemplates)])\n .pipe(\n untilDestroyed(this),\n filter(([unit, templates]) => !!unit && !!templates),\n tap(([unit, templateList]) => {\n this.unit = unit;\n this.templateList = templateList;\n this.initDataSource();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private initDataSource() {\n this.inspectionService\n .getBeUnitId(this.unit.id)\n .subscribe(inspections => {\n this.inspectionsSource = new MatTableDataSource(\n inspections.map(\n e =>\n new InspectionModel(\n e,\n this.templateList.find(t => t.id == e.inspectionTemplateId)\n )\n )\n );\n\n const hasTurboMode = inspections.some(inspection => inspection.isTurboMode);\n if (hasTurboMode && !this.displayedColumns.includes('turboMode')) {\n const typeColumnIndex = this.displayedColumns.indexOf('inspectionType');\n if (typeColumnIndex !== -1) {\n this.displayedColumns.splice(typeColumnIndex + 1, 0, 'turboMode');\n }\n }\n\n this.inspectionsSource.sortingDataAccessor = this.inspectionService.tableSortPredicate.bind(this);\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n }\n\n deleteInspection(inspectionModel: InspectionModel) {\n this.inspectionService\n .deleteInspection(inspectionModel)\n .subscribe(() => {\n this.snackbarService.success(SnackbarErrorMessage.InspectionDeleted);\n this.initDataSource();\n })\n .untilDestroyed(this);\n }\n\n open(inspection: InspectionModel) {\n this.inspectionService.open(inspection);\n }\n\n download(inspectionId: number) {\n this.inspectionService.download(inspectionId);\n }\n\n share(inspection: InspectionModel) {\n this.inspectionService.share(inspection);\n }\n}\n","
\n \n
\n \n
\n
\n
\n
\n
\n
unit details
\n
\n \n \n Unit is down\n \n \n
\n \n \n Unit is on hold\n \n \n
\n
\n \n Do not auto create turns for this unit\n \n
\n
\n
\n
\n \n
\n
\n
\n
Inspections
\n \n
\n
\n \n
\n
\n
Property information
\n
\n \n
\n
\n
\n
Rents
\n
\n \n
\n
\n \n \n \n\n\n\n
\n
\n \n \n \n
\n \n Back\n
\n
\n

{{ unit?.propertyName || '' }} - {{ unit?.name || '' }}

\n\n {{ moveOutType | enumerationValue: moveOutTypeListConst:true }}\n
\n \n \n
\n Delete unit\n \n
\n \n
\n
\n
\n\n\n \n\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { catchError, debounceTime, distinctUntilChanged, filter, finalize, switchMap, take, tap } from 'rxjs/operators';\n\nimport { TurnoversService } from '@app/services/turnovers.service';\nimport { UnitNonPmsService } from '@app/services/unit-non-pms.service';\nimport { UnitsService } from '@app/services/units.service';\nimport {\n clearUnit,\n getRenewalStrategyForUnit,\n loadUnit,\n setCustomBreadcrumbs,\n updateUnitDoNotAutoCreateTurns,\n} from '@dashboards/store/actions/dashboard.actions';\nimport {\n selectUnit,\n selectUnitDoNotAutoCreateTurnsLoading,\n selectUnitLoading,\n} from '@dashboards/store/selectors/dashboards.selectors';\nimport { selectLoadEnumerations } from '@main-application/store/selectors/enumeration.selectors';\nimport { selectPreviousRoute } from '@main-application/store/selectors/route-state.selector';\nimport { selectUserData, selectUserPermissionLevel } from '@main-application/store/selectors/user.selectors';\nimport { deleteTurnover } from '@main-application/turnovers/store/actions/turnovers.actions';\nimport { selectTurnoverDeleteStatus } from '@main-application/turnovers/store/selectors/turnovers.selectors';\nimport { UnitDetailsAbstract } from '@portfolio/components/unit-details/abstract/unit-details.abstract';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { MoveOutTypeListConst } from '@shared/constants/move-out-type-list.const';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { RouteData } from '@shared/enums/route-data';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { getEnumerationRadioListFunction } from '@shared/functions/get-enumeration-radio-list.function';\nimport { BreadcrumbItem } from '@shared/interfaces/breadcrumb-item';\nimport { EnumerationConfig } from '@shared/interfaces/enumeration-config';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { skipEqual$ } from '@shared/utils/rxjs/skip-equal.rxjs.util';\nimport { DigitsValidator } from '@shared/validators/digits.validator';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-unit-details',\n templateUrl: './unit-details.component.html',\n styleUrls: ['./unit-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UnitDetailsComponent extends UnitDetailsAbstract implements OnInit, OnDestroy {\n private sourceView: RoutePath;\n previousRoute?: string;\n doNotAutoCreateTurns: boolean;\n isUnitDoNotAutoCreateTurnsLoading$: Observable;\n nameControl = this.formBuilder.control('', [Validators.required]);\n deleteInProgress$ = new BehaviorSubject(false);\n protected readonly moveOutTypeListConst = MoveOutTypeListConst;\n moveOutType = null;\n\n isUnitDown = false;\n isUnitDownReason: string | null = null;\n initialUnitDownReason: string | null = null;\n\n isUnitOnHold = false;\n isUnitOnHoldReason: string | null = null;\n\n form: FormGroup;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private formBuilder: FormBuilder,\n private store: Store<{}>,\n private unitNonPmsService: UnitNonPmsService,\n private unitService: UnitsService,\n private modalsService: ModalsService,\n private snackbarService: SnackbarService,\n private turnoverService: TurnoversService\n ) {\n super(cdr);\n\n this.store\n .select(selectPreviousRoute)\n .pipe(untilDestroyed(this))\n .subscribe(prevRoute => (this.previousRoute = prevRoute))\n .untilDestroyed(this);\n }\n\n ngOnInit(): void {\n this.sourceView = this.activatedRoute?.snapshot?.queryParams[RouteData.SOURCE_VIEW] as RoutePath;\n this.unitId = parseInt(this.activatedRoute.snapshot.paramMap.get('unitId'), 10);\n this.portfolioId = parseInt(this.activatedRoute.snapshot.paramMap.get('portfolioId'), 10);\n this.propertyId = parseInt(this.activatedRoute.snapshot.paramMap.get('propertyId'), 10);\n this.turnoverId = parseInt(this.activatedRoute.snapshot.paramMap.get('turnoverId'), 10);\n this.applianceId = parseInt(this.activatedRoute.snapshot.paramMap.get('applianceId'), 10);\n this.bulkBidId = this.activatedRoute?.snapshot?.queryParams[RouteData.BULK_SECTION_ID] as number;\n this.isLoading$ = this.store.select(selectUnitLoading).pipe(debounceTime(500));\n this.isUnitDoNotAutoCreateTurnsLoading$ = this.store.select(selectUnitDoNotAutoCreateTurnsLoading);\n\n this.nameControl.valueChanges\n .pipe(\n distinctUntilChanged(),\n debounceTime(500),\n untilDestroyed(this),\n filter(name => !!name)\n )\n .subscribe(name => {\n this.unitNonPmsService\n .update({\n id: this.unit.id,\n propertyId: this.unit.propertyId,\n name: name,\n })\n .subscribe(() => {\n this.snackbarService.success(`Unit name changed to \"${name}\"`);\n this.unit.name = name;\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n })\n .untilDestroyed(this);\n\n this.store.dispatch(loadUnit({ unitId: this.unitId }));\n this.store.dispatch(getRenewalStrategyForUnit({ unitId: this.unitId }));\n this.store\n .select(selectUserPermissionLevel)\n .pipe(\n untilDestroyed(this),\n filter((permissionList: PermissionLevelType[]) => !!permissionList),\n tap((permissionList: PermissionLevelType[]) => {\n this.readOnly = !checkPermissionLevel(permissionList, PermissionLevelType.PropertyManager_UnitList_Edit);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectLoadEnumerations)\n .pipe(\n untilDestroyed(this),\n filter(value => !!value),\n tap((enumerationConfig: EnumerationConfig) => {\n this.applianceTypeList = getEnumerationRadioListFunction(enumerationConfig.applianceTypes, '');\n this.colorTypeList = getEnumerationRadioListFunction(enumerationConfig.applianceColors, '');\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectTurnoverDeleteStatus)\n .pipe(\n untilDestroyed(this),\n filter((turnoverDeleteStatus: UpdateStatus) => turnoverDeleteStatus === UpdateStatus.DELETED)\n )\n .subscribe(turnoverDeleteStatus => {\n if (turnoverDeleteStatus === UpdateStatus.DELETED) {\n this.snackbarService.success(`Turn ${this.nameControl.value} has been deleted`);\n this.store.dispatch(loadUnit({ unitId: this.unitId }));\n }\n })\n .untilDestroyed(this);\n\n this.store\n .select(selectUnit)\n .pipe(\n untilDestroyed(this),\n filter((unit: RestUnitModel) => !!unit),\n tap((unit: RestUnitModel) => {\n this.unit = { ...unit };\n this.cdr.markForCheck();\n this.nameControl.setValue(unit.name, { emitEvent: false });\n this.doNotAutoCreateTurns = this.unit.doNotAutoCreateTurns;\n this.isUnitDown = this.unit.isUnitDown;\n this.isUnitDownReason = this.unit.isUnitDownReason;\n\n this.isUnitOnHold = this.unit.isUnitOnHold;\n this.isUnitOnHoldReason = this.unit.isUnitOnHoldReason;\n this.updateBreadcrumb();\n this.initForm();\n this.initTurnover();\n this.propertyAddress = this.getPropertyAddress(this.unit.property?.addresses?.physicalAddress);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.store.dispatch(clearUnit());\n }\n\n initTurnover() {\n if (this.unit.turnoverId) {\n this.turnoverService\n .getTurnover(this.unit.turnoverId)\n .subscribe(turnover => {\n this.moveOutType = turnover.unitStatus;\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n }\n }\n\n goBack(evt: Event) {\n evt?.preventDefault();\n this.router.navigateByUrl(this.previousRoute).then();\n }\n\n changeDoNotAutoCreateTurns(value: boolean) {\n this.doNotAutoCreateTurns = value;\n if (this.unit.doNotAutoCreateTurns !== this.doNotAutoCreateTurns) {\n this.store.dispatch(\n updateUnitDoNotAutoCreateTurns({\n unitId: this.unit.id,\n doNotAutoCreateTurns: this.doNotAutoCreateTurns,\n })\n );\n }\n\n if (this.unit?.turnoverId && value) {\n this.modalsService\n .openConfirmationModal({\n title: `${this.nameControl.value} is an active turn 😱`,\n content: 'Are you 💯 you want to delete it?',\n confirmColor: 'warn',\n confirmLabel: 'Delete',\n })\n .afterClosed()\n .pipe(\n take(1),\n tap(result => {\n if (result === DialogResult.Success) {\n this.store.dispatch(deleteTurnover({ turnoverId: this.unit.turnoverId, unitName: this.unit?.name }));\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n this.cdr.detectChanges();\n }\n\n onUnitDownTextareaFocus(): void {\n this.initialUnitDownReason = this.isUnitDownReason;\n }\n\n onUnitDownTextareaKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n (event.target as HTMLTextAreaElement).blur();\n }\n }\n\n onUnitDownTextareaBlur(): void {\n if (this.isUnitDownReason) {\n this.isUnitDownReason = this.isUnitDownReason?.replace(/\\s\\s+/g, ' ')?.trim();\n }\n }\n\n onUnitDownCheckboxChange(event: MatCheckboxChange): void {\n const value = event.checked;\n this.isUnitDown = value;\n this.isUnitDownReason = this.isUnitDownReason?.replace(/\\s\\s+/g, ' ')?.trim();\n\n if (value) {\n this.isUnitOnHold = false;\n this.form.get('isUnitOnHold').setValue(false);\n }\n this.cdr.detectChanges();\n }\n\n onUnitHoldCheckboxChange(event: MatCheckboxChange): void {\n const value = event.checked;\n this.isUnitOnHold = value;\n\n if (value) {\n this.isUnitDown = false;\n this.form.get('isUnitDown').setValue(false);\n }\n\n this.cdr.detectChanges();\n }\n\n goToHome() {\n this.router.navigate([AppRoutes.HOME]).then();\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n name: [this.nameControl?.value || '', [Validators.required]],\n isUnitDown: [this.isUnitDown],\n isUnitDownReason: [this.isUnitDownReason],\n isUnitOnHold: [this.isUnitOnHold],\n isUnitOnHoldReason: [this.isUnitOnHoldReason],\n [this.UnitDetailsComponentForm.RENT]: [this.unit?.rent, [DigitsValidator(true), Validators.maxLength(16)]],\n [this.UnitDetailsComponentForm.OLDRENT]: [this.unit?.oldRent, [DigitsValidator(true), Validators.maxLength(16)]],\n [this.UnitDetailsComponentForm.MARKETRENT]: [\n this.unit?.marketRent,\n [DigitsValidator(true), Validators.maxLength(15)],\n ],\n [this.UnitDetailsComponentForm.ADVERTISEDRENT]: [\n this.unit?.advertisedRent,\n [DigitsValidator(true), Validators.maxLength(15)],\n ],\n [this.UnitDetailsComponentForm.FINISH]: [this.unit?.finish],\n [this.UnitDetailsComponentForm.DESCRIPTION]: [this.unit?.description || null, [Validators.maxLength(1024)]],\n });\n\n this.form.valueChanges\n .pipe(\n debounceTime(500),\n skipEqual$(),\n filter(() => !this.form.invalid)\n )\n .subscribe(value => {\n const formValue = this.form.value;\n\n const unit: RestUnitModel = {\n ...this.unit,\n ...formValue,\n name: this.nameControl.value,\n };\n\n this.unitService\n .update(unit)\n .pipe(take(1))\n .subscribe(res => {\n if (res instanceof HttpErrorResponse) {\n return this.store.dispatch(loadUnit({ unitId: this.unitId }));\n }\n })\n .untilDestroyed(this);\n })\n .untilDestroyed(this);\n }\n\n private updateBreadcrumb() {\n let breadcrumbList: BreadcrumbItem[] = [];\n\n if (this.unit?.property) {\n breadcrumbList = [\n ...breadcrumbList,\n {\n icon: EIcon.BUILDING,\n label: this.unit?.property.name,\n },\n ];\n }\n\n breadcrumbList = [\n ...breadcrumbList,\n {\n icon: EIcon.BUILDING,\n label: this.unit?.name,\n },\n ];\n\n this.store.dispatch(setCustomBreadcrumbs({ breadcrumbList }));\n }\n\n deleteUnit() {\n this.modalsService\n .openConfirmationModal({\n title: 'Delete unit?',\n content:\n \"This will permanently delete all of this unit's data including its turn history. Flex if you are sure. 💪\",\n confirmColor: 'warn',\n confirmLabel: 'Delete',\n })\n .afterClosed()\n .pipe(\n take(1),\n filter(result => result === DialogResult.Success),\n tap(() => this.deleteInProgress$.next(true)),\n switchMap(() => this.unitNonPmsService.delete(this.unitId)),\n catchError(error => {\n if (error.status === 403) {\n this.snackbarService.error(\"You don't have permission\");\n }\n throw error;\n }),\n finalize(() => this.deleteInProgress$.next(false))\n )\n .subscribe(() => {\n this.snackbarService.success(`${this.unit.name} deleted`);\n this.goBack(null);\n })\n .untilDestroyed(this);\n }\n}\n\n// NOTE: commented temporary, do not delete\n// backToParent(): void {\n// if (this.sourceView) {\n// switch (this.sourceView) {\n// case RoutePath.JOBS_AVAILABLE_AND_BIDS_SENT:\n// {\n// if (this.userData.companyId) {\n// this.router.navigate(['.'], { relativeTo: this.activatedRoute.parent }).then();\n// } else {\n// this.goToHome();\n// }\n// }\n// break;\n\n// case RoutePath.MOVE_OUT_CONFIRMATION:\n// case RoutePath.BID:\n// case RoutePath.RENO:\n// case RoutePath.APPROVAL:\n// case RoutePath.MARKETING:\n// case RoutePath.LEASE_UP:\n// case RoutePath.MOVE_IN:\n// case RoutePath.ARCHIVE:\n// case RoutePath.HISTORY:\n// {\n// if (this.turnoverId) {\n// this.router\n// .navigate([this.sourceView, this.turnoverId], {\n// relativeTo: this.activatedRoute.parent,\n// })\n// .then();\n// } else {\n// this.goToHome();\n// }\n// }\n// break;\n// case RoutePath.APPLIANCE_DETAIL:\n// {\n// if (this.turnoverId && this.applianceId) {\n// this.router\n// .navigate([RoutePath.BID, this.turnoverId, this.sourceView, this.applianceId], {\n// relativeTo: this.activatedRoute.parent,\n// })\n// .then();\n// } else {\n// this.goToHome();\n// }\n// }\n// break;\n\n// case RoutePath.DELINQUENCY:\n// {\n// this.router.navigate([AppRoutes.REPORTS_DELINQUENCIES]).then();\n// }\n// break;\n\n// case RoutePath.UNIT_LIST:\n// {\n// this.router.navigate([`AppRoutes.REPORTS_RENT_ROLL]).then();\n// }\n// break;\n\n// case RoutePath.RENEWALS:\n// {\n// this.router.navigate([`AppRoutes.REPORTS_RENEWALS]).then();\n// }\n// break;\n// case RoutePath.RENEWALS_LIST:\n// {\n// this.router.navigate([AppRoutes.REPORTS_RENEWALS]).then();\n// }\n// break;\n\n// case RoutePath.DELINQUENCY_LIST:\n// {\n// this.router.navigate([AppRoutes.DELINQUENCIES]).then();\n// }\n// break;\n\n// case RoutePath.ACTIVE_TURNOVERS:\n// {\n// this.router.navigate([AppRoutes.TURNOVERS_ACTIVE]).then();\n// }\n// break;\n\n// case RoutePath.ARCHIVED:\n// {\n// this.router.navigate([AppRoutes.TURNOVERS_ARCHIVED]).then();\n// }\n// break;\n\n// case RoutePath.PROPERTY_DASHBOARD:\n// {\n// this.router.navigate([AppRoutes.PROPERTY_MANAGER_HOME_DASHBOARD]).then();\n// }\n// break;\n\n// case RoutePath.TICKETS:\n// {\n// this.router.navigate([AppRoutes.TICKETS]).then();\n// }\n// break;\n\n// case RoutePath.DASHBOARD_TICKETS:\n// {\n// this.router.navigate([AppRoutes.DASHBOARD_TICKETS]).then();\n// }\n// break;\n\n// case RoutePath.MOVE_OUT_PROPERTY:\n// {\n// this.router.navigate([AppRoutes.MOVE_OUT_PROPERTY_MANAGER]).then();\n// }\n// break;\n\n// case RoutePath.MOVE_OUT_PORTFOLIO:\n// {\n// this.router.navigate([AppRoutes.MOVE_OUT_ASSET_MANAGER]).then();\n// }\n// break;\n\n// case RoutePath.BULK_BIDS:\n// {\n// this.router.navigate([AppRoutes.TURNOVERS_BULK_BIDS]).then();\n// }\n// break;\n// case RoutePath.BULK_BIDS_EDIT:\n// {\n// this.router.navigate([`${AppRoutes.TURNOVERS_BULK_BIDS}/${RoutePath.EDIT}/${this.bulkBidId}`]).then();\n// }\n// break;\n// default: {\n// this.goToHome();\n// }\n// }\n// } else {\n// if (this.portfolioId && this.propertyId) {\n// this.router.navigate([AppRoutes.SETTINGS_PORTFOLIO, this.portfolioId, this.propertyId]).then();\n// } else {\n// this.goToHome();\n// }\n// }\n// }\n","import { createSelector } from '@ngrx/store';\n\nimport { routeStateFeatureKey } from '@main-application/store/reducers/route.reducer';\n\nimport { selectCoreModule } from './core.selector';\n\nconst routeState = createSelector(selectCoreModule, coreState => coreState[routeStateFeatureKey]);\n\nexport const selectPreviousRoute = createSelector(routeState, state => state.previousRoute);\n","import { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const BooleanListConst: IRadioButtonOption[] = [\n {\n value: true,\n label: 'Yes',\n },\n {\n value: false,\n label: 'No',\n },\n];\n","import { MoveOutType } from '@shared/enums/move-out-type.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const MoveOutTypeListConst: IRadioButtonOption[] = [\n /**\n * new enum values\n */\n {\n value: MoveOutType.Evict,\n label: 'evict',\n },\n {\n value: MoveOutType.Notice_Rented,\n label: 'notice-rented',\n },\n\n {\n value: MoveOutType.Notice_Unrented,\n label: 'notice-unrented',\n },\n\n {\n value: MoveOutType.Vacant_Rented,\n label: 'vacant-rented',\n },\n\n {\n value: MoveOutType.Vacant_Unrented,\n label: 'vacant-unrented',\n },\n];\n","import { BoardsCreateComponent } from '@main-application/boards/boards-create/boards-create.component';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { PackageType } from '@shared/enums/package-type';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { MenuSection } from '@shared/interfaces/menu-config.interface';\nimport { NewTurnoverModalComponent } from '@ui-components/modals/new-turnover-modal/new-turnover-modal.component';\n\nexport const PROPUP_EMAIL_DOMAINS = ['gopropup.com'];\nexport const MANAGEMENT_EMAIL_DOMAINS = PROPUP_EMAIL_DOMAINS.concat(['onmicrosoft.com']);\n\n/**\n * HOME SECTION\n * */\nexport const homeSection: MenuSection = {\n label: 'Home',\n urlPath: AppRoutes.HOME,\n icon: EIcon.HOME,\n hideWithoutSubsection: false,\n sectionItem: [],\n};\n\n/**\n * ROLES SECTION\n * */\nexport const rolesSection: MenuSection = {\n label: 'Home',\n urlPath: AppRoutes.ROLES,\n icon: EIcon.HOME,\n hideWithoutSubsection: true,\n packageLevel: [PackageType.Turns],\n sectionItem: [\n {\n label: 'Admin',\n urlPath: AppRoutes.ROLES_ADMIN_HOME,\n icon: EIcon.DASHBOARD,\n permissionLevel: PermissionLevelType.Administrator_Dashboard_Read,\n },\n {\n label: 'Asset',\n urlPath: AppRoutes.ROLES_ASSET_HOME,\n icon: EIcon.DASHBOARD2,\n permissionLevel: PermissionLevelType.AssetManager_PropertyDashboard_Read,\n },\n {\n label: 'Property',\n urlPath: AppRoutes.ROLES_PROPERTY_HOME,\n icon: EIcon.DASHBOARD4,\n permissionLevel: PermissionLevelType.PropertyManager_Dashboard_Read,\n },\n {\n label: 'Resident',\n urlPath: AppRoutes.RESIDENT_SERVICE,\n newTab: true,\n icon: EIcon.DASHBOARD5,\n emailDomains: PROPUP_EMAIL_DOMAINS,\n permissionLevel: [PermissionLevelType.Resident_Dashboard],\n },\n {\n label: 'Vendor',\n urlPath: AppRoutes.ROLES_VENDOR_HOME,\n permissionLevel: PermissionLevelType.Turnovers_Kanban_Read,\n forExternalOnly: true,\n icon: EIcon.TOOLS,\n },\n ],\n};\n\n/**\n * TURNOVERS SECTION\n * */\nexport const turnoversSection: MenuSection = {\n label: 'Turns',\n urlPath: AppRoutes.TURNOVERS,\n icon: EIcon.TIME_SCHEDULE,\n passQueryParams: true,\n permissionLevel: [\n PermissionLevelType.AllPermissions,\n PermissionLevelType.PropertyManager_ActiveTurnovers_Edit,\n PermissionLevelType.PropertyManager_ActiveTurnovers_Read,\n PermissionLevelType.Turnovers_Archived_Read,\n ],\n packageLevel: [PackageType.Turns],\n hideWithoutSubsection: false,\n sectionItem: [\n {\n label: 'Add turn',\n permissionLevelWarning: PermissionLevelType.PropertyManager_ActiveTurnovers_Edit,\n modalDialogComponent: NewTurnoverModalComponent,\n },\n ],\n};\n\nexport const boardsSection: MenuSection = {\n label: 'Boards',\n urlPath: AppRoutes.BOARDS,\n icon: EIcon.BOARD,\n passQueryParams: true,\n permissionLevel: [\n PermissionLevelType.AllPermissions,\n PermissionLevelType.Board_Use,\n PermissionLevelType.Board_Edit,\n PermissionLevelType.Board_View,\n ],\n packageLevel: [PackageType.Turns],\n hideWithoutSubsection: false,\n sectionItem: [\n {\n label: 'Add board',\n permissionLevelWarning: PermissionLevelType.Board_Edit,\n modalDialogComponent: BoardsCreateComponent,\n },\n ],\n};\n\n/**\n * INSPECTIONS SECTION\n * */\nexport const inspectionsSection: MenuSection = {\n label: 'Inspect',\n urlPath: AppRoutes.INSPECTIONS_USER,\n icon: EIcon.SEARCH,\n passQueryParams: true,\n hideWithoutSubsection: false,\n sectionItem: [\n {\n label: 'Standard',\n urlPath: AppRoutes.INSPECTIONS_USER,\n permissionLevel: PermissionLevelType.Inspections_List,\n icon: EIcon.SETTINGS2,\n },\n {\n label: 'Resident',\n urlPath: AppRoutes.INSPECTIONS_RESIDENT,\n permissionLevel: PermissionLevelType.ResidentInspections_List,\n packageLevel: [PackageType.ResidentInspectionEnabled],\n icon: EIcon.SETTINGS2,\n },\n {\n // do not display separators in case if there is no in review inspection\n permissionLevel: PermissionLevelType.Inspections_List,\n separator: true,\n },\n {\n label: 'In Review',\n urlPath: AppRoutes.INSPECTIONS_IN_REVIEW,\n permissionLevel: PermissionLevelType.Inspections_List,\n icon: EIcon.SETTINGS2,\n },\n {\n permissionLevel: PermissionLevelType.Inspections_List,\n separator: true,\n },\n {\n label: 'Dynamic',\n urlPath: AppRoutes.INSPECTIONS_DYNAMIC,\n permissionLevel: PermissionLevelType.Inspections_List,\n icon: EIcon.SETTINGS2,\n },\n {\n label: 'Repeating',\n urlPath: AppRoutes.INSPECTIONS_REPEATING,\n permissionLevel: PermissionLevelType.Inspections_List,\n icon: EIcon.SETTINGS2,\n },\n {\n label: 'Templates',\n urlPath: AppRoutes.SETTINGS_TEMPLATE,\n permissionLevel: PermissionLevelType.InspectionTemplates_List,\n icon: EIcon.SETTINGS2,\n },\n ],\n packageLevel: [PackageType.Turns, PackageType.Inspections],\n};\n\nexport const calendarSection: MenuSection = {\n label: 'Calendar',\n urlPath: AppRoutes.CALENDAR,\n icon: EIcon.ICON_CALENDAR,\n permissionLevel: [PermissionLevelType.Board_View],\n packageLevel: [PackageType.Turns, PackageType.Inspections],\n hideWithoutSubsection: false,\n sectionItem: [],\n};\n\nexport const serviceSection: MenuSection = {\n label: 'Service',\n urlPath: AppRoutes.SERVICE,\n icon: EIcon.Service,\n hideWithoutSubsection: false,\n sectionItem: [\n {\n label: 'Answers',\n urlPath: AppRoutes.SERVICE_CANNED_ANSWERS,\n permissionLevel: [],\n },\n {\n label: 'Parts Catalog',\n urlPath: AppRoutes.SPARE_PARTS,\n permissionLevel: [],\n packageLevel: [PackageType.SpareParts],\n },\n ],\n packageLevel: [PackageType.Turns, PackageType.Inspections, PackageType.Service, PackageType.SpareParts],\n};\n\n/**\n * REPORTS SECTION\n * */\nexport const reportsSection: MenuSection = {\n label: 'Reports',\n urlPath: AppRoutes.REPORTS,\n icon: EIcon.CHART_LINE,\n passQueryParams: true,\n hideWithoutSubsection: true,\n sectionItem: [\n {\n label: 'Rent Roll',\n urlPath: AppRoutes.REPORTS_RENT_ROLL,\n permissionLevel: [\n PermissionLevelType.PropertyManager_UnitList_Read,\n PermissionLevelType.PropertyManager_Dashboard_Read,\n ],\n icon: EIcon.DASHBOARD,\n },\n {\n label: 'ROC',\n urlPath: AppRoutes.REPORTS_ROC,\n permissionLevel: [\n PermissionLevelType.PropertyManager_UnitList_Read,\n PermissionLevelType.PropertyManager_Dashboard_Read,\n ],\n icon: EIcon.DASHBOARD,\n },\n {\n label: 'Billing',\n urlPath: AppRoutes.REPORTS_BILLING,\n permissionLevel: [PermissionLevelType.AllPermissions],\n emailDomains: MANAGEMENT_EMAIL_DOMAINS,\n icon: EIcon.DASHBOARD,\n },\n // {\n // label: 'Unit Mix',\n // urlPath: AppRoutes.REPORTS_UNIT_MIX,\n // permissionLevel: [\n // PermissionLevelType.PropertyManager_UnitMix_Read,\n // PermissionLevelType.PropertyManager_Dashboard_Read,\n // ],\n // icon: EIcon.DASHBOARD2,\n // },\n // {\n // label: 'Delinquencies',\n // urlPath: AppRoutes.REPORTS_DELINQUENCIES,\n // permissionLevel: [\n // PermissionLevelType.PropertyManager_Delinquencies_Read,\n // PermissionLevelType.PropertyManager_Dashboard_Read,\n // ],\n // icon: EIcon.THUNDER_CIRCLE,\n // },\n // {\n // label: 'Renewals',\n // urlPath: AppRoutes.REPORTS_RENEWALS,\n // permissionLevel: [\n // PermissionLevelType.PropertyManager_Renewals_Read,\n // PermissionLevelType.PropertyManager_Dashboard_Read,\n // ],\n // icon: EIcon.REPEAT,\n // },\n ],\n packageLevel: [PackageType.Turns],\n};\n\n/**\n * TICKET SECTION\n * */\nexport const ticketsSection: MenuSection = {\n label: 'Tickets',\n urlPath: AppRoutes.TICKETS,\n permissionLevel: PermissionLevelType.Tickets_Read,\n icon: EIcon.TICKET,\n hideWithoutSubsection: false,\n sectionItem: [],\n};\n\n/**\n * MANAGEMENT SECTION\n * */\nexport const managementSection: MenuSection = {\n label: 'Settings',\n urlPath: AppRoutes.SETTINGS,\n icon: EIcon.SETTINGS,\n hideWithoutSubsection: true,\n sectionItem: [\n // {\n // label: 'KPIs',\n // urlPath: AppRoutes.SETTINGS_KPI,\n // permissionLevel: PermissionLevelType.Management_KPI_Read,\n // icon: EIcon.DASHBOARD,\n // },\n {\n label: 'Portfolios',\n urlPath: AppRoutes.SETTINGS_PORTFOLIO,\n permissionLevel: PermissionLevelType.Management_Portfolio_Read,\n icon: EIcon.PORTFOLIOS,\n },\n {\n label: 'Collections',\n urlPath: AppRoutes.SETTINGS_COLLECTION,\n permissionLevel: [PermissionLevelType.PropertyCollections_Edit],\n icon: EIcon.STAR,\n },\n // {\n // label: 'Renewals',\n // urlPath: AppRoutes.SETTINGS_RENEWAL_STRATEGY,\n // permissionLevel: PermissionLevelType.Management_UnitTargetRents_Read,\n // icon: EIcon.DOLLAR,\n // },\n {\n label: 'Notification',\n urlPath: AppRoutes.SETTINGS_NOTIFICATIONS,\n icon: EIcon.NOTIFICATION,\n },\n {\n label: 'Residents',\n urlPath: AppRoutes.SETTINGS_RESIDENTS,\n permissionLevel: PermissionLevelType.Management_Residents,\n icon: EIcon.USER_GROUP,\n },\n {\n label: 'Roles',\n urlPath: AppRoutes.SETTINGS_ROLES,\n permissionLevel: [PermissionLevelType.Management_Roles],\n icon: EIcon.USER,\n },\n {\n label: 'Service',\n urlPath: AppRoutes.SETTINGS_SERVICE,\n icon: EIcon.Service,\n },\n {\n label: 'System',\n urlPath: AppRoutes.SETTINGS_SYSTEM,\n permissionLevel: PermissionLevelType.Chat_Hooks,\n icon: EIcon.SETTINGS2,\n },\n {\n label: 'Turns',\n urlPath: AppRoutes.SETTINGS_TURNOVER_CONFIGURATION,\n permissionLevel: PermissionLevelType.Management_TurnoverConfiguration_Read,\n icon: EIcon.TIME_SCHEDULE,\n },\n {\n label: 'Users',\n urlPath: AppRoutes.SETTINGS_USERS,\n permissionLevel: PermissionLevelType.Management_Users,\n icon: EIcon.USER_GROUP,\n },\n {\n label: 'Vendors',\n urlPath: AppRoutes.SETTINGS_VENDOR,\n permissionLevel: PermissionLevelType.Companies_Read,\n icon: EIcon.HALF_STAR,\n },\n {\n label: 'Inspect',\n urlPath: AppRoutes.SETTINGS_INSPECT,\n permissionLevel: PermissionLevelType.ManagementInspect,\n packageLevel: [PackageType.InspectionsPro],\n icon: EIcon.Inspect,\n },\n {\n label: 'Branding',\n urlPath: AppRoutes.SETTINGS_BRANDING,\n packageLevel: [PackageType.ResidentInspectionEnabled],\n permissionLevel: PermissionLevelType.BrandingSettings_View,\n icon: EIcon.Inspect,\n },\n ],\n};\n","export enum MoveOutType {\n /**\n * legacy values for backwards compatibility\n * to be removed in the future\n */\n None,\n PmNonRenewal,\n TenantNonRenewal,\n Eviction,\n Other,\n\n /**\n * new enum values\n */\n Evict,\n Notice_Rented,\n Notice_Unrented,\n Vacant_Rented,\n Vacant_Unrented,\n Down,\n\n //FE only type\n NonPms = 100,\n}\n","export enum NotificationCategory {\n Turnover,\n TurnoverComment,\n Bid,\n BidAccepted,\n BidRejected,\n BidComment,\n Ticket,\n BidSentBack,\n TurnStepSchedule = 9,\n}\n","export const isUserEmailDomainAllowed = (email: string, allowedDomains: string[]): boolean =>\n !allowedDomains?.length || allowedDomains.some(domain => email?.includes(domain));\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, UrlTree } from '@angular/router';\nimport { Observable, combineLatest } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { PackageService } from '@app/services/package.service';\nimport { TenantService } from '@app/services/tenant.service';\nimport { UserService } from '@app/services/user.service';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { PackageType } from '@shared/enums/package-type';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { UserType } from '@shared/enums/user-type';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HomeRedirectGuard implements CanActivate {\n constructor(\n private userService: UserService,\n private packageService: PackageService,\n private tenantService: TenantService,\n private router: Router\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable {\n return combineLatest([this.userService.getCashedUserData(), this.tenantService.getCachedTenant()]).pipe(\n filter(([userData, tenantData]) => !!userData && !!tenantData),\n map(([userData, tenantData]) => {\n const navigationExtras = { queryParams: route.queryParams, fragment: route.fragment };\n if (!this.packageService.checkPackages(tenantData, [PackageType.Turns])) {\n if (this.packageService.checkPackages(tenantData, [PackageType.Inspections])) {\n return this.router.createUrlTree([AppRoutes.INSPECTIONS], navigationExtras);\n }\n if (this.packageService.checkPackages(tenantData, [PackageType.Service])) {\n return this.router.createUrlTree([AppRoutes.SERVICE], navigationExtras);\n }\n } else {\n const permissionLevel: PermissionLevelType[] = userData.permissionLevel;\n if (userData.userType === UserType.Employee) {\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.AllPermissions)) {\n return this.router.createUrlTree([AppRoutes.ROLES_ADMIN_HOME], navigationExtras);\n }\n\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.Inspections_AsHomePage)) {\n return this.router.createUrlTree([AppRoutes.INSPECTIONS], navigationExtras);\n }\n\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.AssetManager_PropertyDashboard_Read)) {\n return this.router.createUrlTree([AppRoutes.ROLES_ASSET_HOME], navigationExtras);\n }\n\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.ConstructionManager_Dashboard_Read)) {\n return this.router.createUrlTree([AppRoutes.ROLES_CONSTRUCTION_HOME], navigationExtras);\n }\n\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.PropertyManager_Dashboard_Read)) {\n return this.router.createUrlTree([AppRoutes.ROLES_PROPERTY_HOME], navigationExtras);\n }\n }\n if (userData.userType === UserType.Contractor) {\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.Turnovers_Kanban_Read)) {\n return this.router.createUrlTree([AppRoutes.ROLES_VENDOR_HOME], navigationExtras);\n }\n }\n }\n return true;\n })\n );\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { map } from 'rxjs/operators';\n\nimport { PackageService } from '@app/services/package.service';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { PackageType } from '@shared/enums/package-type';\n\nexport const PackageLevelGuardFactory = (packageLevelToCheck: PackageType[]): CanActivateFn => {\n return AnyPackageLevelGuardFactory(packageLevelToCheck);\n};\n\n/**\n * Allows to activate if tenant has any package\n */\nexport const AnyPackageLevelGuardFactory = (packagesToCheck: PackageType[]): CanActivateFn => {\n return () => {\n const router = inject(Router);\n const packageService = inject(PackageService);\n return packageService.checkPackagesAvailable(packagesToCheck).pipe(\n map((result: boolean) => {\n if (result) {\n return true;\n }\n const noPermissionUrlTree = router.parseUrl(AppRoutes.NO_PACKAGE);\n return noPermissionUrlTree;\n })\n );\n };\n};\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SimpleScrollService {\r\n private scrollToTopSubject = new Subject();\r\n scrollToTop$ = this.scrollToTopSubject.asObservable();\r\n\r\n private validationTriggerSubject = new Subject();\r\n validationTrigger$ = this.validationTriggerSubject.asObservable();\r\n\r\n triggerScrollToTop() {\r\n this.scrollToTopSubject.next();\r\n }\r\n\r\n triggerValidation(status: boolean) {\r\n this.validationTriggerSubject.next(status);\r\n }\r\n}\r\n","import { AbstractControl, FormArray, FormGroup } from '@angular/forms';\n\nexport function isControlInvalid(control: AbstractControl): boolean {\n if (control.invalid) {\n processAllControls(control);\n return true;\n }\n return false;\n}\n\nfunction processAllControls(control: AbstractControl) {\n if (control instanceof FormGroup || control instanceof FormArray) {\n Object.values(control.controls).forEach(processAllControls);\n } else if (!control.valid) {\n markControl(control);\n }\n}\n\nfunction markControl(control: AbstractControl) {\n control.updateValueAndValidity();\n control.markAsDirty();\n control.markAsTouched();\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport const DigitsValidator = (positiveOnly = false): ValidatorFn => {\n const regex = positiveOnly\n ? RegExp(/(^0(([,.]?)\\d)\\d*$)|(^[1-9]+\\d*(([,.]?)\\d)\\d*$)|(^\\d+$)/)\n : new RegExp(/^[-]?(0(([,.]?)\\d)\\d*$)|(^[-]?[1-9]+\\d*(([,.]?)\\d)\\d*$)|(^[-]?\\d+$)/);\n\n return (control: AbstractControl): { [key: string]: boolean } => {\n if (control?.value && !regex.test(control.value)) {\n return positiveOnly\n ? {\n digitsPositive: true,\n }\n : {\n digits: true,\n };\n }\n return null;\n };\n};\n","\n \n \n \n \n \n\n\n\n
{{ firstName | formatToAvatar: lastName:isUpperCase }}
\n
\n\n\n \n\n\n\n
{{ fullName }}
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { AvatarService } from '@ui-components/components/avatar/services/avatar.service';\n\nexport const AVATAR_COLOR_THEMES_LIST = [\n 'theme-1',\n 'theme-2',\n 'theme-3',\n 'theme-4',\n 'theme-5',\n 'theme-6',\n 'theme-7',\n 'theme-8',\n 'theme-9',\n 'theme-10',\n 'theme-11',\n 'theme-12',\n 'theme-13',\n 'theme-14',\n 'theme-15',\n 'theme-16',\n];\n\n@Component({\n selector: 'app-avatar',\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AvatarComponent extends ComponentAbstract {\n readonly SYSTEM_USER_ID = 1;\n\n userId = 0;\n fullName = '';\n firstName = '';\n lastName = '';\n avatarTheme = 'default';\n\n @Input() set userInfo(userInfo: RestUserModel | UserData) {\n this.avatarTheme = this.avatarService.getUserConfig(userInfo?.id);\n this.userId = userInfo?.id;\n if (userInfo?.id === this.SYSTEM_USER_ID) {\n this.avatarTheme = 'system';\n this.firstName = 'System';\n this.lastName = '';\n } else {\n this.firstName = userInfo?.firstName || '?';\n this.lastName = userInfo?.lastName || '?';\n }\n this.setFullName();\n }\n\n @Input() containerCss = '';\n @Input() icon: EIcon;\n @Input() iconSize = 24;\n @Input() showFullName = false;\n @Input() showIcon = true;\n @Input() disableTooltip = false;\n @Input() isUpperCase = true;\n\n constructor(protected cdr: ChangeDetectorRef, private avatarService: AvatarService) {\n super(cdr);\n }\n\n private setFullName() {\n this.fullName = `${this.firstName || ''} ${this.lastName || ''}`;\n this.cdr.detectChanges();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AvatarComponent } from '@app/modules/ui-components/components/avatar/avatar.component';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { AvatarService } from '@ui-components/components/avatar/services/avatar.service';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\n\n@NgModule({\n declarations: [AvatarComponent],\n imports: [CommonModule, PipesModule, IconComponent, TooltipDirectiveModule],\n providers: [AvatarService],\n exports: [AvatarComponent],\n})\nexport class AvatarModule {}\n","import { Injectable } from '@angular/core';\nimport { first } from 'lodash';\n\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\nimport { getRandomValue } from '@shared/functions/get-random-value.function';\nimport { AvatarThemeItem } from '@ui-components/components/avatar/config/iterfaces/avatar-theme-item';\n\n@Injectable()\nexport class AvatarService {\n configList: AvatarThemeItem[] = [];\n private readonly themePrefix = 'theme-';\n private readonly themeAmount = 16;\n\n constructor() {\n this.setThemeConfigList();\n }\n\n getUserConfig(userId: number): string {\n if (!userId) {\n return 'default';\n }\n\n let avatarThemeItem = first(this.configList.filter(item => item.userId === userId));\n const themeNumber = +avatarThemeItem?.themeNumber;\n\n if (!avatarThemeItem || isNaN(themeNumber) || themeNumber > this.themeAmount || themeNumber < 0) {\n avatarThemeItem = {\n userId,\n themeNumber: this.getAvatarTheme(),\n };\n\n this.updateAvatarTheme(avatarThemeItem);\n }\n\n return `${this.themePrefix}${avatarThemeItem.themeNumber}`;\n }\n\n private updateAvatarTheme(avatarThemeItem: AvatarThemeItem) {\n this.configList = this.configList.filter(c => c.userId != avatarThemeItem.userId);\n this.configList.push(avatarThemeItem);\n localStorage.setItem(LocalStorageDataEnum.AVATAR_USER_CONFIG_LIST, JSON.stringify(this.configList));\n }\n\n private setThemeConfigList() {\n this.configList =\n (JSON.parse(localStorage.getItem(LocalStorageDataEnum.AVATAR_USER_CONFIG_LIST)) as AvatarThemeItem[]) || [];\n }\n\n private getAvatarTheme(): number {\n return getRandomValue(1, this.themeAmount);\n }\n}\n","export function getRandomValue(minValue: number, maxValue: number) {\n minValue = Math.ceil(minValue);\n maxValue = Math.floor(maxValue);\n return Math.floor(Math.random() * (maxValue - minValue + 1)) + minValue;\n}\n","
\n \n
\n\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n\n
\n \n
\n
\n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\nimport { DashboardsAbstract } from '@dashboards/components/abstract/dashboards.abstract';\nimport { SimpleScrollService } from '@shared/services/simple-scroll.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-dashboard-container',\n templateUrl: './dashboard-container.component.html',\n styleUrls: ['./dashboard-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DashboardContainerComponent extends DashboardsAbstract implements OnInit {\n loading = true;\n emptyDashboard = false;\n\n @Input() containerCss = '';\n @Input() isLoaded = false;\n @Input() bodyCss = '';\n @Input() stickyFooter = false;\n @Input() customEmptyDashboardTemplate: TemplateRef;\n\n @Input() set isLoading(isLoading: boolean) {\n this.loading = isLoading === undefined ? true : isLoading;\n this.cdr.detectChanges();\n }\n\n @Input() set isEmptyDashboard(isEmptyDashboard: boolean) {\n this.emptyDashboard = isEmptyDashboard === undefined ? false : isEmptyDashboard;\n this.cdr.detectChanges();\n }\n\n @Output() onScroll = new EventEmitter<{ position: number }>();\n\n @ViewChild('bodyContent', { static: false }) bodyContent: ElementRef;\n\n constructor(protected cdr: ChangeDetectorRef, private scrollService: SimpleScrollService) {\n super(cdr);\n }\n\n ngOnInit() {\n this.scrollService.scrollToTop$\n .pipe(untilDestroyed(this))\n .subscribe(() => this.scrollToTop())\n .untilDestroyed(this);\n }\n\n onBodyScroll($event) {\n this.onScroll.emit({ position: $event.target.scrollTop });\n }\n\n scrollToTop() {\n if (this.bodyContent) {\n this.bodyContent.nativeElement.scrollTo({ top: 138, behavior: 'smooth' });\n }\n }\n}\n","
\n
\n

Hello {{ userData?.firstName || '' }} {{ userData?.lastName || '' }}!

\n Here you will see your tasks\n
\n
\n \"\"\n
{{ emptyDashboardMessage }}
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { selectUserData } from '@main-application/store/selectors/user.selectors';\nimport { UserData } from '@shared/interfaces/user-data';\n\n@UntilDestroy()\n@Component({\n selector: 'app-empty-dashboard',\n templateUrl: './empty-dashboard.component.html',\n styleUrls: ['./empty-dashboard.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyDashboardComponent extends ComponentAbstract implements OnInit {\n @Input() showPersonalData = true;\n\n @Input() emptyDashboardMessage = 'No data to display.';\n\n userData: UserData;\n userData$: Observable;\n\n constructor(protected cdr: ChangeDetectorRef, private store: Store<{}>) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.userData$ = this.store.select(selectUserData);\n this.userData$\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EIcon } from '@shared/enums/icon.enum';\n\n@Component({\n selector: 'app-empty-data',\n templateUrl: './empty-data.component.html',\n styleUrls: ['./empty-data.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyDataComponent extends ComponentAbstract {\n @Input() header = 'No data to display';\n @Input() info = 'The selected turnover does not exist, or there was an error retrieving it';\n @Input() icon: EIcon = EIcon.ERROR;\n\n constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n}\n","\n \n

{{ header }}

\n
{{ info }}
\n\n","\n \n \n
\n
\n play_circle_outline\n
\n
\n
\n\n \n \n \n \n \n\n \n \n \n \n \n\n\n\n \n\n\n\n \n {{ comment.value | textMask: 50 }}\n \n \n \n \n\n\n\n \n \n \n\n\n\n \n
\n \n \n \n \n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { UntypedFormControl, Validators } from '@angular/forms';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { FileMimeType } from '@shared/interfaces/file-mime-types';\nimport { FileMimeTypePipe } from '@shared/pipes/file-mime-type.pipe';\n\n@Component({\n selector: 'app-picture',\n templateUrl: './picture.component.html',\n styleUrls: ['./picture.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PictureComponent extends ComponentAbstract implements OnInit {\n currentComment = '';\n comment: UntypedFormControl = new UntypedFormControl(null, [Validators.maxLength(256)]);\n editMode = false;\n\n @Input() picture: RestGenericTypedAttachment;\n @Input() file: File;\n @Input() active: boolean;\n @Input() showDeleteButton = false;\n @Input() lockDeleteButton = false;\n @Input() showCommentSection = false;\n @Input() lockCommentActionButtons = false;\n @Input() showCommentActionButtons = false;\n\n @Output() selectPictureEvent: EventEmitter = new EventEmitter();\n @Output() deletePictureEvent: EventEmitter = new EventEmitter();\n @Output() updatePictureEvent: EventEmitter =\n new EventEmitter();\n\n protected readonly FileMimeType = FileMimeType;\n\n constructor(protected cdr: ChangeDetectorRef, private fileMimeType: FileMimeTypePipe) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.comment.setValue(this.picture?.description || null);\n }\n\n selectPicture() {\n this.selectPictureEvent.emit();\n }\n\n deleteItem() {\n this.deletePictureEvent.emit();\n }\n\n toggleEditMode(editMode: boolean) {\n if (this.showCommentActionButtons) {\n this.editMode = editMode;\n if (this.editMode) {\n this.currentComment = this.comment.value;\n }\n\n this.cdr.detectChanges();\n }\n }\n\n save() {\n const attachment: RestGenericTypedAttachment = {\n ...this.picture,\n description: this.comment.value,\n };\n\n this.updatePictureEvent.emit(attachment);\n this.toggleEditMode(false);\n }\n\n cancel() {\n this.comment.setValue(this.currentComment);\n this.currentComment = '';\n this.toggleEditMode(false);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { SearchInputComponent } from '@app/modules/ui-components/components/search-input/search-input.component';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\n\n@NgModule({\n declarations: [SearchInputComponent],\n imports: [CommonModule, IconComponent, ReactiveFormsModule],\n exports: [SearchInputComponent],\n})\nexport class SearchInputModule {}\n","import * as i0 from '@angular/core';\nimport { EventEmitter, Component, ChangeDetectionStrategy, Input, Output, forwardRef, NgModule } from '@angular/core';\nimport * as i2 from 'ngx-color';\nimport { isValidHex, ColorWrap, AlphaModule, CheckboardModule, EditableInputModule, HueModule, SaturationModule } from 'ngx-color';\nimport { TinyColor } from '@ctrl/tinycolor';\nimport * as i1 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nclass ChromeFieldsComponent {\n constructor() {\n this.onChange = new EventEmitter();\n this.view = '';\n this.input = {\n fontSize: '11px',\n color: '#333',\n width: '100%',\n borderRadius: '2px',\n border: 'none',\n boxShadow: 'inset 0 0 0 1px #dadada',\n height: '21px',\n 'text-align': 'center',\n };\n this.label = {\n 'text-transform': 'uppercase',\n fontSize: '11px',\n 'line-height': '11px',\n color: '#969696',\n 'text-align': 'center',\n display: 'block',\n marginTop: '12px',\n };\n }\n ngOnInit() {\n if (this.hsl.a === 1 && this.view !== 'hex') {\n this.view = 'hex';\n }\n else if (this.view !== 'rgb' && this.view !== 'hsl') {\n this.view = 'rgb';\n }\n }\n toggleViews() {\n if (this.view === 'hex') {\n this.view = 'rgb';\n }\n else if (this.view === 'rgb') {\n this.view = 'hsl';\n }\n else if (this.view === 'hsl') {\n if (this.hsl.a === 1) {\n this.view = 'hex';\n }\n else {\n this.view = 'rgb';\n }\n }\n }\n round(value) {\n return Math.round(value);\n }\n handleChange({ data, $event }) {\n if (data.hex) {\n if (isValidHex(data.hex)) {\n const color = new TinyColor(data.hex);\n this.onChange.emit({\n data: {\n hex: this.disableAlpha ? color.toHex() : color.toHex8(),\n source: 'hex',\n },\n $event,\n });\n }\n }\n else if (data.r || data.g || data.b) {\n this.onChange.emit({\n data: {\n r: data.r || this.rgb.r,\n g: data.g || this.rgb.g,\n b: data.b || this.rgb.b,\n source: 'rgb',\n },\n $event,\n });\n }\n else if (data.a) {\n if (data.a < 0) {\n data.a = 0;\n }\n else if (data.a > 1) {\n data.a = 1;\n }\n if (this.disableAlpha) {\n data.a = 1;\n }\n this.onChange.emit({\n data: {\n h: this.hsl.h,\n s: this.hsl.s,\n l: this.hsl.l,\n a: Math.round(data.a * 100) / 100,\n source: 'rgb',\n },\n $event,\n });\n }\n else if (data.h || data.s || data.l) {\n const s = data.s && data.s.replace('%', '');\n const l = data.l && data.l.replace('%', '');\n this.onChange.emit({\n data: {\n h: data.h || this.hsl.h,\n s: Number(s || this.hsl.s),\n l: Number(l || this.hsl.l),\n source: 'hsl',\n },\n $event,\n });\n }\n }\n}\nChromeFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ChromeFieldsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nChromeFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: ChromeFieldsComponent, selector: \"color-chrome-fields\", inputs: { disableAlpha: \"disableAlpha\", hsl: \"hsl\", rgb: \"rgb\", hex: \"hex\" }, outputs: { onChange: \"onChange\" }, ngImport: i0, template: `\n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n
\n
\n \n \n \n \n
\n
\n
\n `, isInline: true, styles: [\".chrome-wrap{padding-top:16px;display:flex}.chrome-fields{flex:1;display:flex;margin-left:-6px}.chrome-field{padding-left:6px;width:100%}.chrome-toggle{width:32px;text-align:right;position:relative}.chrome-icon{margin-right:-4px;margin-top:12px;cursor:pointer;position:relative}.chrome-toggle-svg{width:24px;height:24px;border:1px transparent solid;border-radius:5px}.chrome-toggle-svg:hover{background:#eee}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i2.EditableInputComponent, selector: \"color-editable-input\", inputs: [\"style\", \"label\", \"value\", \"arrowOffset\", \"dragLabel\", \"dragMax\", \"placeholder\"], outputs: [\"onChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ChromeFieldsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-chrome-fields', template: `\n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n
\n
\n \n \n \n \n
\n
\n
\n `, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, styles: [\".chrome-wrap{padding-top:16px;display:flex}.chrome-fields{flex:1;display:flex;margin-left:-6px}.chrome-field{padding-left:6px;width:100%}.chrome-toggle{width:32px;text-align:right;position:relative}.chrome-icon{margin-right:-4px;margin-top:12px;cursor:pointer;position:relative}.chrome-toggle-svg{width:24px;height:24px;border:1px transparent solid;border-radius:5px}.chrome-toggle-svg:hover{background:#eee}\\n\"] }]\n }], propDecorators: { disableAlpha: [{\n type: Input\n }], hsl: [{\n type: Input\n }], rgb: [{\n type: Input\n }], hex: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\n\nclass ChromeComponent extends ColorWrap {\n constructor() {\n super();\n /** Remove alpha slider and options from picker */\n this.disableAlpha = false;\n this.circle = {\n width: '12px',\n height: '12px',\n borderRadius: '6px',\n boxShadow: 'rgb(255, 255, 255) 0px 0px 0px 1px inset',\n transform: 'translate(-6px, -8px)',\n };\n this.pointer = {\n width: '12px',\n height: '12px',\n borderRadius: '6px',\n transform: 'translate(-6px, -2px)',\n backgroundColor: 'rgb(248, 248, 248)',\n boxShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.37)',\n };\n }\n afterValidChange() {\n const alpha = this.disableAlpha ? 1 : this.rgb.a;\n this.activeBackground = `rgba(${this.rgb.r}, ${this.rgb.g}, ${this.rgb.b}, ${alpha})`;\n }\n handleValueChange({ data, $event }) {\n this.handleChange(data, $event);\n }\n}\nChromeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ChromeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nChromeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: ChromeComponent, selector: \"color-chrome\", inputs: { disableAlpha: \"disableAlpha\" }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ChromeComponent),\n multi: true,\n },\n {\n provide: ColorWrap,\n useExisting: forwardRef(() => ChromeComponent),\n },\n ], usesInheritance: true, ngImport: i0, template: `\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n `, isInline: true, styles: [\".chrome-picker{background:#fff;border-radius:2px;box-shadow:0 0 2px #0000004d,0 4px 8px #0000004d;box-sizing:initial;width:225px;font-family:Menlo}.chrome-controls{display:flex}.chrome-color{width:42px}.chrome-body{padding:14px 14px 12px}.chrome-active{position:absolute;top:0;bottom:0;left:0;right:0;border-radius:20px;box-shadow:inset 0 0 0 1px #0000001a;z-index:2}.chrome-swatch{width:28px;height:28px;border-radius:15px;position:relative;overflow:hidden}.saturation{width:100%;padding-bottom:55%;position:relative;border-radius:2px 2px 0 0;overflow:hidden}.chrome-toggles{flex:1}.chrome-hue{height:10px;position:relative;margin-bottom:8px}.chrome-alpha{height:10px;position:relative}\\n\"], dependencies: [{ kind: \"directive\", type: i0.forwardRef(function () { return i1.NgIf; }), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i0.forwardRef(function () { return i2.AlphaComponent; }), selector: \"color-alpha\", inputs: [\"hsl\", \"rgb\", \"pointer\", \"shadow\", \"radius\", \"direction\"], outputs: [\"onChange\"] }, { kind: \"component\", type: i0.forwardRef(function () { return i2.CheckboardComponent; }), selector: \"color-checkboard\", inputs: [\"white\", \"size\", \"grey\", \"boxShadow\", \"borderRadius\"] }, { kind: \"component\", type: i0.forwardRef(function () { return i2.HueComponent; }), selector: \"color-hue\", inputs: [\"hsl\", \"pointer\", \"radius\", \"shadow\", \"hidePointer\", \"direction\"], outputs: [\"onChange\"] }, { kind: \"component\", type: i0.forwardRef(function () { return i2.SaturationComponent; }), selector: \"color-saturation\", inputs: [\"hsl\", \"hsv\", \"radius\", \"pointer\", \"circle\"], outputs: [\"onChange\"] }, { kind: \"component\", type: i0.forwardRef(function () { return ChromeFieldsComponent; }), selector: \"color-chrome-fields\", inputs: [\"disableAlpha\", \"hsl\", \"rgb\", \"hex\"], outputs: [\"onChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ChromeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-chrome', template: `\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n `, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ChromeComponent),\n multi: true,\n },\n {\n provide: ColorWrap,\n useExisting: forwardRef(() => ChromeComponent),\n },\n ], styles: [\".chrome-picker{background:#fff;border-radius:2px;box-shadow:0 0 2px #0000004d,0 4px 8px #0000004d;box-sizing:initial;width:225px;font-family:Menlo}.chrome-controls{display:flex}.chrome-color{width:42px}.chrome-body{padding:14px 14px 12px}.chrome-active{position:absolute;top:0;bottom:0;left:0;right:0;border-radius:20px;box-shadow:inset 0 0 0 1px #0000001a;z-index:2}.chrome-swatch{width:28px;height:28px;border-radius:15px;position:relative;overflow:hidden}.saturation{width:100%;padding-bottom:55%;position:relative;border-radius:2px 2px 0 0;overflow:hidden}.chrome-toggles{flex:1}.chrome-hue{height:10px;position:relative;margin-bottom:8px}.chrome-alpha{height:10px;position:relative}\\n\"] }]\n }], ctorParameters: function () { return []; }, propDecorators: { disableAlpha: [{\n type: Input\n }] } });\nclass ColorChromeModule {\n}\nColorChromeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorChromeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nColorChromeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorChromeModule, declarations: [ChromeComponent, ChromeFieldsComponent], imports: [CommonModule,\n AlphaModule,\n CheckboardModule,\n EditableInputModule,\n HueModule,\n SaturationModule], exports: [ChromeComponent, ChromeFieldsComponent] });\nColorChromeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorChromeModule, imports: [CommonModule,\n AlphaModule,\n CheckboardModule,\n EditableInputModule,\n HueModule,\n SaturationModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorChromeModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [ChromeComponent, ChromeFieldsComponent],\n exports: [ChromeComponent, ChromeFieldsComponent],\n imports: [\n CommonModule,\n AlphaModule,\n CheckboardModule,\n EditableInputModule,\n HueModule,\n SaturationModule,\n ],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ChromeComponent, ChromeFieldsComponent, ColorChromeModule };\n","import { Directive, ElementRef, EventEmitter, HostListener, Output } from '@angular/core';\n\n@Directive({ selector: '[appClickOutside]', standalone: true })\nexport class ClickOutsideDirective {\n @Output() appClickOutside: EventEmitter = new EventEmitter();\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: PointerEvent) {\n const nativeElement: any = this.elementRef.nativeElement;\n const clickedInside: boolean = nativeElement.contains(event.target);\n if (!clickedInside) this.appClickOutside.emit();\n }\n\n constructor(private elementRef: ElementRef) {}\n}\n// (appClickOutside)=\"fun()\"\n","\n \n \n
\n {{ control.value }}\n
\n
\n \n
\n \n\n \n\n\n\n
\n \n \n
\n
\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n Optional,\n Self,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { ColorChromeModule } from 'ngx-color/chrome';\nimport { BehaviorSubject, Observable, merge, of, shareReplay, switchMap, timer } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, tap } from 'rxjs/operators';\n\nimport { debounceSafeDefault } from '@shared/constants/debounce-time-safe-default.constant';\nimport { ClickOutsideDirective } from '@shared/directives/click-outside.directive';\nimport { StopPropagationDirective } from '@shared/directives/stop-propagation.directive';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\n\nimport { InputModule } from '../input/input.module';\nimport { RadioButtonModule } from '../radio-button/radio-button.module';\n\nconst defaultCloseDelay = 1000;\n\n@UntilDestroy()\n@Component({\n selector: 'app-custom-color-picker',\n templateUrl: './custom-color-picker.component.html',\n styleUrls: ['./custom-color-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n MatMenuModule,\n RadioButtonModule,\n ReactiveFormsModule,\n IconComponent,\n MatButtonModule,\n InputModule,\n NgSelectModule,\n PipesModule,\n InputErrorModule,\n MatProgressSpinnerModule,\n ColorChromeModule,\n StopPropagationDirective,\n ClickOutsideDirective,\n TooltipDirectiveModule,\n ],\n})\nexport class CustomColorPickerComponent extends CustomControlAbstract implements OnInit, ControlValueAccessor {\n labelOutsideDefaultCss = 'nowrap body-small-bold';\n\n private _isOpened$ = new BehaviorSubject(false); // TODO change to signals after Angular 16+\n private _isOpenedTrigger$ = new BehaviorSubject(false); // TODO change to signals after Angular 16+\n private _forceIsOpen$ = new BehaviorSubject(false); // TODO change to signals after Angular 16+\n isOpened$ = this.initIsOpen();\n\n @Input() selectCss = 'body-small text-color dark';\n\n @Input() set labelCss(value: string) {\n this._labelCss = value;\n }\n\n get labelCss(): string {\n if (this._labelCss) return this._labelCss;\n\n return this.labelOutsideDefaultCss;\n }\n\n private _valueCss: string;\n @Input() set valueCss(value) {\n this._valueCss = value;\n }\n\n get valueCss() {\n if (this._valueCss) {\n return this._valueCss;\n }\n return 'ellipsis text-color dark body-small';\n }\n\n @Input() containerCss = 'display-flex align-items-center';\n @Input() label = '';\n @Input() icon: EIcon;\n @Input() iconTooltip = '';\n @Input() attrPlaceholder = '';\n @Input() attrDisable = false;\n @Input() markAsInvalid = false;\n @Input() errorSection = true;\n @Input() isTextMode = false;\n\n _labelCss = '';\n _labelElement: ElementRef;\n\n @ViewChild('labelElement', { static: false }) set content(value: ElementRef) {\n if (!value) return;\n\n this._labelElement = value;\n this.cdr.detectChanges();\n }\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n this.initControlBase();\n\n this.control.valueChanges\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n tap(value => this.onChanged(value)),\n untilDestroyed(this)\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n handleOpenState(isOpen: boolean, isMouseMove = false, isForce = false): void {\n if (isForce) {\n this._forceIsOpen$.next(isOpen);\n this._isOpened$.next(isOpen);\n }\n\n if (!this._isOpened$.value && isMouseMove) {\n return;\n }\n\n if (isMouseMove) {\n this._isOpenedTrigger$.next(isOpen);\n return;\n }\n\n this._isOpened$.next(isOpen);\n }\n\n writeValue(value: any): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n }\n\n private initIsOpen(): Observable {\n return merge(\n merge(this._isOpened$, this._isOpenedTrigger$).pipe(\n distinctUntilChanged(),\n debounceTime(debounceSafeDefault),\n switchMap(isOpened => {\n return isOpened\n ? of(isOpened)\n : timer(defaultCloseDelay).pipe(\n tap(() => this._isOpened$.next(false)),\n map(() => isOpened)\n );\n }),\n distinctUntilChanged()\n ),\n this._forceIsOpen$\n ).pipe(distinctUntilChanged(), shareReplay(1));\n }\n}\n","/**\n * Take input from [0, n] and return it as [0, 1]\n * @hidden\n */\nexport function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = '100%';\n }\n var isPercent = isPercentage(n);\n n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n)));\n // Automatically convert percentage into number\n if (isPercent) {\n n = parseInt(String(n * max), 10) / 100;\n }\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n // Convert into [0, 1] range if it isn't already\n if (max === 360) {\n // If n is a hue given in degrees,\n // wrap around out-of-range values into [0, 360] range\n // then convert into [0, 1].\n n = (n < 0 ? (n % max) + max : n % max) / parseFloat(String(max));\n }\n else {\n // If n not a hue given in degrees\n // Convert into [0, 1] range if it isn't already.\n n = (n % max) / parseFloat(String(max));\n }\n return n;\n}\n/**\n * Force a number between 0 and 1\n * @hidden\n */\nexport function clamp01(val) {\n return Math.min(1, Math.max(0, val));\n}\n/**\n * Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n * \n * @hidden\n */\nexport function isOnePointZero(n) {\n return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;\n}\n/**\n * Check to see if string passed in is a percentage\n * @hidden\n */\nexport function isPercentage(n) {\n return typeof n === 'string' && n.indexOf('%') !== -1;\n}\n/**\n * Return a valid alpha value [0,1] with all invalid values being set to 1\n * @hidden\n */\nexport function boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n}\n/**\n * Replace a decimal with it's percentage value\n * @hidden\n */\nexport function convertToPercentage(n) {\n if (n <= 1) {\n return \"\".concat(Number(n) * 100, \"%\");\n }\n return n;\n}\n/**\n * Force a hex value to have 2 characters\n * @hidden\n */\nexport function pad2(c) {\n return c.length === 1 ? '0' + c : String(c);\n}\n","import { bound01, pad2 } from './util';\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n/**\n * Handle bounds / percentage checking to conform to CSS color spec\n * \n * *Assumes:* r, g, b in [0, 255] or [0, 1]\n * *Returns:* { r, g, b } in [0, 255]\n */\nexport function rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255,\n };\n}\n/**\n * Converts an RGB color value to HSL.\n * *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n * *Returns:* { h, s, l } in [0,1]\n */\nexport function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = 0;\n var s = 0;\n var l = (max + min) / 2;\n if (max === min) {\n s = 0;\n h = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, l: l };\n}\nfunction hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * (6 * t);\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n/**\n * Converts an HSL color value to RGB.\n *\n * *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n * *Returns:* { r, g, b } in the set [0, 255]\n */\nexport function hslToRgb(h, s, l) {\n var r;\n var g;\n var b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n if (s === 0) {\n // achromatic\n g = l;\n b = l;\n r = l;\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color value to HSV\n *\n * *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n * *Returns:* { h, s, v } in [0,1]\n */\nexport function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = 0;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0; // achromatic\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n/**\n * Converts an HSV color value to RGB.\n *\n * *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n * *Returns:* { r, g, b } in the set [0, 255]\n */\nexport function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - f * s);\n var t = v * (1 - (1 - f) * s);\n var mod = i % 6;\n var r = [v, q, p, p, t, v][mod];\n var g = [t, v, v, q, p, p][mod];\n var b = [p, p, t, v, v, q][mod];\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color to hex\n *\n * Assumes r, g, and b are contained in the set [0, 255]\n * Returns a 3 or 6 character hex\n */\nexport function rgbToHex(r, g, b, allow3Char) {\n var hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n // Return a 3 character hex if possible\n if (allow3Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color plus alpha transparency to hex\n *\n * Assumes r, g, b are contained in the set [0, 255] and\n * a in [0, 1]. Returns a 4 or 8 character rgba hex\n */\n// eslint-disable-next-line max-params\nexport function rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n pad2(convertDecimalToHex(a)),\n ];\n // Return a 4 character hex if possible\n if (allow4Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1)) &&\n hex[3].startsWith(hex[3].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color to an ARGB Hex8 string\n * Rarely used, but required for \"toFilter()\"\n */\nexport function rgbaToArgbHex(r, g, b, a) {\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n return hex.join('');\n}\n/** Converts a decimal to a hex value */\nexport function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n/** Converts a hex value to a decimal */\nexport function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\n/** Parse a base-16 hex value into a base-10 integer */\nexport function parseIntFromHex(val) {\n return parseInt(val, 16);\n}\nexport function numberInputToObject(color) {\n return {\n r: color >> 16,\n g: (color & 0xff00) >> 8,\n b: color & 0xff,\n };\n}\n","// https://github.com/bahamas10/css-color-names/blob/master/css-color-names.json\n/**\n * @hidden\n */\nexport var names = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n goldenrod: '#daa520',\n gold: '#ffd700',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavenderblush: '#fff0f5',\n lavender: '#e6e6fa',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n","/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\nimport { convertHexToDecimal, hslToRgb, hsvToRgb, parseIntFromHex, rgbToRgb } from './conversion';\nimport { names } from './css-color-names';\nimport { boundAlpha, convertToPercentage } from './util';\n/**\n * Given a string or object, convert that input to RGB\n *\n * Possible string inputs:\n * ```\n * \"red\"\n * \"#f00\" or \"f00\"\n * \"#ff0000\" or \"ff0000\"\n * \"#ff000000\" or \"ff000000\"\n * \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n * \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n * \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n * \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n * \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n * \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n * \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n * ```\n */\nexport function inputToRGB(color) {\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color === 'string') {\n color = stringInputToObject(color);\n }\n if (typeof color === 'object') {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === '%' ? 'prgb' : 'rgb';\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = 'hsv';\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = 'hsl';\n }\n if (Object.prototype.hasOwnProperty.call(color, 'a')) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a,\n };\n}\n// \nvar CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// \nvar CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\nvar CSS_UNIT = \"(?:\".concat(CSS_NUMBER, \")|(?:\").concat(CSS_INTEGER, \")\");\n// Actual matching.\n// Parentheses and commas are optional, but not required.\n// Whitespace can take the place of commas or opening paren\nvar PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\".concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")\\\\s*\\\\)?\");\nvar PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\".concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")\\\\s*\\\\)?\");\nvar matchers = {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp('rgb' + PERMISSIVE_MATCH3),\n rgba: new RegExp('rgba' + PERMISSIVE_MATCH4),\n hsl: new RegExp('hsl' + PERMISSIVE_MATCH3),\n hsla: new RegExp('hsla' + PERMISSIVE_MATCH4),\n hsv: new RegExp('hsv' + PERMISSIVE_MATCH3),\n hsva: new RegExp('hsva' + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n};\n/**\n * Permissive string parsing. Take in a number of formats, and output an object\n * based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n */\nexport function stringInputToObject(color) {\n color = color.trim().toLowerCase();\n if (color.length === 0) {\n return false;\n }\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color === 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: 'name' };\n }\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match = matchers.rgb.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n match = matchers.rgba.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n match = matchers.hsl.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n match = matchers.hsla.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n match = matchers.hsv.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n match = matchers.hsva.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n match = matchers.hex8.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? 'name' : 'hex8',\n };\n }\n match = matchers.hex6.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? 'name' : 'hex',\n };\n }\n match = matchers.hex4.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1] + match[1]),\n g: parseIntFromHex(match[2] + match[2]),\n b: parseIntFromHex(match[3] + match[3]),\n a: convertHexToDecimal(match[4] + match[4]),\n format: named ? 'name' : 'hex8',\n };\n }\n match = matchers.hex3.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1] + match[1]),\n g: parseIntFromHex(match[2] + match[2]),\n b: parseIntFromHex(match[3] + match[3]),\n format: named ? 'name' : 'hex',\n };\n }\n return false;\n}\n/**\n * Check to see if it looks like a CSS unit\n * (see `matchers` above for definition).\n */\nexport function isValidCSSUnit(color) {\n return Boolean(matchers.CSS_UNIT.exec(String(color)));\n}\n","import { numberInputToObject, rgbaToHex, rgbToHex, rgbToHsl, rgbToHsv } from './conversion';\nimport { names } from './css-color-names';\nimport { inputToRGB } from './format-input';\nimport { bound01, boundAlpha, clamp01 } from './util';\nvar TinyColor = /** @class */ (function () {\n function TinyColor(color, opts) {\n if (color === void 0) { color = ''; }\n if (opts === void 0) { opts = {}; }\n var _a;\n // If input is already a tinycolor, return itself\n if (color instanceof TinyColor) {\n // eslint-disable-next-line no-constructor-return\n return color;\n }\n if (typeof color === 'number') {\n color = numberInputToObject(color);\n }\n this.originalInput = color;\n var rgb = inputToRGB(color);\n this.originalInput = color;\n this.r = rgb.r;\n this.g = rgb.g;\n this.b = rgb.b;\n this.a = rgb.a;\n this.roundA = Math.round(100 * this.a) / 100;\n this.format = (_a = opts.format) !== null && _a !== void 0 ? _a : rgb.format;\n this.gradientType = opts.gradientType;\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this.r < 1) {\n this.r = Math.round(this.r);\n }\n if (this.g < 1) {\n this.g = Math.round(this.g);\n }\n if (this.b < 1) {\n this.b = Math.round(this.b);\n }\n this.isValid = rgb.ok;\n }\n TinyColor.prototype.isDark = function () {\n return this.getBrightness() < 128;\n };\n TinyColor.prototype.isLight = function () {\n return !this.isDark();\n };\n /**\n * Returns the perceived brightness of the color, from 0-255.\n */\n TinyColor.prototype.getBrightness = function () {\n // http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n };\n /**\n * Returns the perceived luminance of a color, from 0-1.\n */\n TinyColor.prototype.getLuminance = function () {\n // http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var R;\n var G;\n var B;\n var RsRGB = rgb.r / 255;\n var GsRGB = rgb.g / 255;\n var BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n };\n /**\n * Returns the alpha value of a color, from 0-1.\n */\n TinyColor.prototype.getAlpha = function () {\n return this.a;\n };\n /**\n * Sets the alpha value on the current color.\n *\n * @param alpha - The new alpha value. The accepted range is 0-1.\n */\n TinyColor.prototype.setAlpha = function (alpha) {\n this.a = boundAlpha(alpha);\n this.roundA = Math.round(100 * this.a) / 100;\n return this;\n };\n /**\n * Returns whether the color is monochrome.\n */\n TinyColor.prototype.isMonochrome = function () {\n var s = this.toHsl().s;\n return s === 0;\n };\n /**\n * Returns the object as a HSVA object.\n */\n TinyColor.prototype.toHsv = function () {\n var hsv = rgbToHsv(this.r, this.g, this.b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this.a };\n };\n /**\n * Returns the hsva values interpolated into a string with the following format:\n * \"hsva(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toHsvString = function () {\n var hsv = rgbToHsv(this.r, this.g, this.b);\n var h = Math.round(hsv.h * 360);\n var s = Math.round(hsv.s * 100);\n var v = Math.round(hsv.v * 100);\n return this.a === 1 ? \"hsv(\".concat(h, \", \").concat(s, \"%, \").concat(v, \"%)\") : \"hsva(\".concat(h, \", \").concat(s, \"%, \").concat(v, \"%, \").concat(this.roundA, \")\");\n };\n /**\n * Returns the object as a HSLA object.\n */\n TinyColor.prototype.toHsl = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a };\n };\n /**\n * Returns the hsla values interpolated into a string with the following format:\n * \"hsla(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toHslString = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n var h = Math.round(hsl.h * 360);\n var s = Math.round(hsl.s * 100);\n var l = Math.round(hsl.l * 100);\n return this.a === 1 ? \"hsl(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%)\") : \"hsla(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%, \").concat(this.roundA, \")\");\n };\n /**\n * Returns the hex value of the color.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n TinyColor.prototype.toHex = function (allow3Char) {\n if (allow3Char === void 0) { allow3Char = false; }\n return rgbToHex(this.r, this.g, this.b, allow3Char);\n };\n /**\n * Returns the hex value of the color -with a # prefixed.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n TinyColor.prototype.toHexString = function (allow3Char) {\n if (allow3Char === void 0) { allow3Char = false; }\n return '#' + this.toHex(allow3Char);\n };\n /**\n * Returns the hex 8 value of the color.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n TinyColor.prototype.toHex8 = function (allow4Char) {\n if (allow4Char === void 0) { allow4Char = false; }\n return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char);\n };\n /**\n * Returns the hex 8 value of the color -with a # prefixed.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n TinyColor.prototype.toHex8String = function (allow4Char) {\n if (allow4Char === void 0) { allow4Char = false; }\n return '#' + this.toHex8(allow4Char);\n };\n /**\n * Returns the shorter hex value of the color depends on its alpha -with a # prefixed.\n * @param allowShortChar will shorten hex value to 3 or 4 char if possible\n */\n TinyColor.prototype.toHexShortString = function (allowShortChar) {\n if (allowShortChar === void 0) { allowShortChar = false; }\n return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar);\n };\n /**\n * Returns the object as a RGBA object.\n */\n TinyColor.prototype.toRgb = function () {\n return {\n r: Math.round(this.r),\n g: Math.round(this.g),\n b: Math.round(this.b),\n a: this.a,\n };\n };\n /**\n * Returns the RGBA values interpolated into a string with the following format:\n * \"RGBA(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toRgbString = function () {\n var r = Math.round(this.r);\n var g = Math.round(this.g);\n var b = Math.round(this.b);\n return this.a === 1 ? \"rgb(\".concat(r, \", \").concat(g, \", \").concat(b, \")\") : \"rgba(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(this.roundA, \")\");\n };\n /**\n * Returns the object as a RGBA object.\n */\n TinyColor.prototype.toPercentageRgb = function () {\n var fmt = function (x) { return \"\".concat(Math.round(bound01(x, 255) * 100), \"%\"); };\n return {\n r: fmt(this.r),\n g: fmt(this.g),\n b: fmt(this.b),\n a: this.a,\n };\n };\n /**\n * Returns the RGBA relative values interpolated into a string\n */\n TinyColor.prototype.toPercentageRgbString = function () {\n var rnd = function (x) { return Math.round(bound01(x, 255) * 100); };\n return this.a === 1\n ? \"rgb(\".concat(rnd(this.r), \"%, \").concat(rnd(this.g), \"%, \").concat(rnd(this.b), \"%)\")\n : \"rgba(\".concat(rnd(this.r), \"%, \").concat(rnd(this.g), \"%, \").concat(rnd(this.b), \"%, \").concat(this.roundA, \")\");\n };\n /**\n * The 'real' name of the color -if there is one.\n */\n TinyColor.prototype.toName = function () {\n if (this.a === 0) {\n return 'transparent';\n }\n if (this.a < 1) {\n return false;\n }\n var hex = '#' + rgbToHex(this.r, this.g, this.b, false);\n for (var _i = 0, _a = Object.entries(names); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n if (hex === value) {\n return key;\n }\n }\n return false;\n };\n TinyColor.prototype.toString = function (format) {\n var formatSet = Boolean(format);\n format = format !== null && format !== void 0 ? format : this.format;\n var formattedString = false;\n var hasAlpha = this.a < 1 && this.a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format.startsWith('hex') || format === 'name');\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === 'name' && this.a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === 'rgb') {\n formattedString = this.toRgbString();\n }\n if (format === 'prgb') {\n formattedString = this.toPercentageRgbString();\n }\n if (format === 'hex' || format === 'hex6') {\n formattedString = this.toHexString();\n }\n if (format === 'hex3') {\n formattedString = this.toHexString(true);\n }\n if (format === 'hex4') {\n formattedString = this.toHex8String(true);\n }\n if (format === 'hex8') {\n formattedString = this.toHex8String();\n }\n if (format === 'name') {\n formattedString = this.toName();\n }\n if (format === 'hsl') {\n formattedString = this.toHslString();\n }\n if (format === 'hsv') {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n };\n TinyColor.prototype.toNumber = function () {\n return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b);\n };\n TinyColor.prototype.clone = function () {\n return new TinyColor(this.toString());\n };\n /**\n * Lighten the color a given amount. Providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.lighten = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n };\n /**\n * Brighten the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.brighten = function (amount) {\n if (amount === void 0) { amount = 10; }\n var rgb = this.toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return new TinyColor(rgb);\n };\n /**\n * Darken the color a given amount, from 0 to 100.\n * Providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.darken = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n };\n /**\n * Mix the color with pure white, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.tint = function (amount) {\n if (amount === void 0) { amount = 10; }\n return this.mix('white', amount);\n };\n /**\n * Mix the color with pure black, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.shade = function (amount) {\n if (amount === void 0) { amount = 10; }\n return this.mix('black', amount);\n };\n /**\n * Desaturate the color a given amount, from 0 to 100.\n * Providing 100 will is the same as calling greyscale\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.desaturate = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n };\n /**\n * Saturate the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.saturate = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n };\n /**\n * Completely desaturates a color into greyscale.\n * Same as calling `desaturate(100)`\n */\n TinyColor.prototype.greyscale = function () {\n return this.desaturate(100);\n };\n /**\n * Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n * Values outside of this range will be wrapped into this range.\n */\n TinyColor.prototype.spin = function (amount) {\n var hsl = this.toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return new TinyColor(hsl);\n };\n /**\n * Mix the current color a given amount with another color, from 0 to 100.\n * 0 means no mixing (return current color).\n */\n TinyColor.prototype.mix = function (color, amount) {\n if (amount === void 0) { amount = 50; }\n var rgb1 = this.toRgb();\n var rgb2 = new TinyColor(color).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a,\n };\n return new TinyColor(rgba);\n };\n TinyColor.prototype.analogous = function (results, slices) {\n if (results === void 0) { results = 6; }\n if (slices === void 0) { slices = 30; }\n var hsl = this.toHsl();\n var part = 360 / slices;\n var ret = [this];\n for (hsl.h = (hsl.h - ((part * results) >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(new TinyColor(hsl));\n }\n return ret;\n };\n /**\n * taken from https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js\n */\n TinyColor.prototype.complement = function () {\n var hsl = this.toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return new TinyColor(hsl);\n };\n TinyColor.prototype.monochromatic = function (results) {\n if (results === void 0) { results = 6; }\n var hsv = this.toHsv();\n var h = hsv.h;\n var s = hsv.s;\n var v = hsv.v;\n var res = [];\n var modification = 1 / results;\n while (results--) {\n res.push(new TinyColor({ h: h, s: s, v: v }));\n v = (v + modification) % 1;\n }\n return res;\n };\n TinyColor.prototype.splitcomplement = function () {\n var hsl = this.toHsl();\n var h = hsl.h;\n return [\n this,\n new TinyColor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),\n new TinyColor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }),\n ];\n };\n /**\n * Compute how the color would appear on a background\n */\n TinyColor.prototype.onBackground = function (background) {\n var fg = this.toRgb();\n var bg = new TinyColor(background).toRgb();\n var alpha = fg.a + bg.a * (1 - fg.a);\n return new TinyColor({\n r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha,\n g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha,\n b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha,\n a: alpha,\n });\n };\n /**\n * Alias for `polyad(3)`\n */\n TinyColor.prototype.triad = function () {\n return this.polyad(3);\n };\n /**\n * Alias for `polyad(4)`\n */\n TinyColor.prototype.tetrad = function () {\n return this.polyad(4);\n };\n /**\n * Get polyad colors, like (for 1, 2, 3, 4, 5, 6, 7, 8, etc...)\n * monad, dyad, triad, tetrad, pentad, hexad, heptad, octad, etc...\n */\n TinyColor.prototype.polyad = function (n) {\n var hsl = this.toHsl();\n var h = hsl.h;\n var result = [this];\n var increment = 360 / n;\n for (var i = 1; i < n; i++) {\n result.push(new TinyColor({ h: (h + i * increment) % 360, s: hsl.s, l: hsl.l }));\n }\n return result;\n };\n /**\n * compare color vs current color\n */\n TinyColor.prototype.equals = function (color) {\n return this.toRgbString() === new TinyColor(color).toRgbString();\n };\n return TinyColor;\n}());\nexport { TinyColor };\n// kept for backwards compatability with v1\nexport function tinycolor(color, opts) {\n if (color === void 0) { color = ''; }\n if (opts === void 0) { opts = {}; }\n return new TinyColor(color, opts);\n}\n","import * as i1 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, isDataSource, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nexport { DataSource } from '@angular/cdk/collections';\nimport * as i2 from '@angular/cdk/platform';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Inject, Optional, Input, ContentChild, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, EmbeddedViewRef, EventEmitter, NgZone, Attribute, SkipSelf, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';\nimport { Subject, from, BehaviorSubject, isObservable, of } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\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 * Mixin to provide a directive with a function that checks if the sticky input has been\n * changed since the last time the function was called. Essentially adds a dirty-check to the\n * sticky value.\n * @docs-private\n */\nfunction mixinHasStickyInput(base) {\n return class extends base {\n constructor(...args) {\n super(...args);\n this._sticky = false;\n /** Whether the sticky input has changed since it was last checked. */\n this._hasStickyChanged = false;\n }\n /** Whether sticky positioning should be applied. */\n get sticky() {\n return this._sticky;\n }\n set sticky(v) {\n const prevValue = this._sticky;\n this._sticky = coerceBooleanProperty(v);\n this._hasStickyChanged = prevValue !== this._sticky;\n }\n /** Whether the sticky value has changed since this was last called. */\n hasStickyChanged() {\n const hasStickyChanged = this._hasStickyChanged;\n this._hasStickyChanged = false;\n return hasStickyChanged;\n }\n /** Resets the dirty check for cases where the sticky state has been used without checking. */\n resetStickyChanged() {\n this._hasStickyChanged = false;\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 * Used to provide a table to some of the sub-components without causing a circular dependency.\n * @docs-private\n */\nconst CDK_TABLE = new InjectionToken('CDK_TABLE');\n/** Injection token that can be used to specify the text column options. */\nconst TEXT_COLUMN_OPTIONS = new InjectionToken('text-column-options');\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 * Cell definition for a CDK table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nclass CdkCellDef {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkCellDef, selector: \"[cdkCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkCellDef, decorators: [{\n type: Directive,\n args: [{ selector: '[cdkCellDef]' }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * Header cell definition for a CDK table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nclass CdkHeaderCellDef {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkHeaderCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkHeaderCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkHeaderCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkHeaderCellDef, selector: \"[cdkHeaderCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkHeaderCellDef, decorators: [{\n type: Directive,\n args: [{ selector: '[cdkHeaderCellDef]' }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * Footer cell definition for a CDK table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\nclass CdkFooterCellDef {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkFooterCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkFooterCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkFooterCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkFooterCellDef, selector: \"[cdkFooterCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkFooterCellDef, decorators: [{\n type: Directive,\n args: [{ selector: '[cdkFooterCellDef]' }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n// Boilerplate for applying mixins to CdkColumnDef.\n/** @docs-private */\nclass CdkColumnDefBase {\n}\nconst _CdkColumnDefBase = mixinHasStickyInput(CdkColumnDefBase);\n/**\n * Column definition for the CDK table.\n * Defines a set of cells available for a table column.\n */\nclass CdkColumnDef extends _CdkColumnDefBase {\n constructor(_table) {\n super();\n this._table = _table;\n this._stickyEnd = false;\n }\n /** Unique name for this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._setNameInput(name);\n }\n /**\n * Whether this column should be sticky positioned on the end of the row. Should make sure\n * that it mimics the `CanStick` mixin such that `_hasStickyChanged` is set to true if the value\n * has been changed.\n */\n get stickyEnd() {\n return this._stickyEnd;\n }\n set stickyEnd(v) {\n const prevValue = this._stickyEnd;\n this._stickyEnd = coerceBooleanProperty(v);\n this._hasStickyChanged = prevValue !== this._stickyEnd;\n }\n /**\n * Overridable method that sets the css classes that will be added to every cell in this\n * column.\n * In the future, columnCssClassName will change from type string[] to string and this\n * will set a single string value.\n * @docs-private\n */\n _updateColumnCssClassName() {\n this._columnCssClassName = [`cdk-column-${this.cssClassFriendlyName}`];\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setNameInput(value) {\n // If the directive is set without a name (updated programmatically), then this setter will\n // trigger with an empty string and should not overwrite the programmatically set value.\n if (value) {\n this._name = value;\n this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-');\n this._updateColumnCssClassName();\n }\n }\n}\nCdkColumnDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkColumnDef, deps: [{ token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkColumnDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkColumnDef, selector: \"[cdkColumnDef]\", inputs: { sticky: \"sticky\", name: [\"cdkColumnDef\", \"name\"], stickyEnd: \"stickyEnd\" }, providers: [{ provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef }], queries: [{ propertyName: \"cell\", first: true, predicate: CdkCellDef, descendants: true }, { propertyName: \"headerCell\", first: true, predicate: CdkHeaderCellDef, descendants: true }, { propertyName: \"footerCell\", first: true, predicate: CdkFooterCellDef, descendants: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkColumnDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkColumnDef]',\n inputs: ['sticky'],\n providers: [{ provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef }],\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; }, propDecorators: { name: [{\n type: Input,\n args: ['cdkColumnDef']\n }], stickyEnd: [{\n type: Input,\n args: ['stickyEnd']\n }], cell: [{\n type: ContentChild,\n args: [CdkCellDef]\n }], headerCell: [{\n type: ContentChild,\n args: [CdkHeaderCellDef]\n }], footerCell: [{\n type: ContentChild,\n args: [CdkFooterCellDef]\n }] } });\n/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */\nclass BaseCdkCell {\n constructor(columnDef, elementRef) {\n elementRef.nativeElement.classList.add(...columnDef._columnCssClassName);\n }\n}\n/** Header cell template container that adds the right classes and role. */\nclass CdkHeaderCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n }\n}\nCdkHeaderCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkHeaderCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkHeaderCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkHeaderCell, selector: \"cdk-header-cell, th[cdk-header-cell]\", host: { attributes: { \"role\": \"columnheader\" }, classAttribute: \"cdk-header-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkHeaderCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-header-cell, th[cdk-header-cell]',\n host: {\n 'class': 'cdk-header-cell',\n 'role': 'columnheader',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkColumnDef }, { type: i0.ElementRef }]; } });\n/** Footer cell template container that adds the right classes and role. */\nclass CdkFooterCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n if (columnDef._table?._elementRef.nativeElement.nodeType === 1) {\n const tableRole = columnDef._table._elementRef.nativeElement.getAttribute('role');\n const role = tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell';\n elementRef.nativeElement.setAttribute('role', role);\n }\n }\n}\nCdkFooterCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkFooterCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkFooterCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkFooterCell, selector: \"cdk-footer-cell, td[cdk-footer-cell]\", host: { classAttribute: \"cdk-footer-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkFooterCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-footer-cell, td[cdk-footer-cell]',\n host: {\n 'class': 'cdk-footer-cell',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkColumnDef }, { type: i0.ElementRef }]; } });\n/** Cell template container that adds the right classes and role. */\nclass CdkCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n if (columnDef._table?._elementRef.nativeElement.nodeType === 1) {\n const tableRole = columnDef._table._elementRef.nativeElement.getAttribute('role');\n const role = tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell';\n elementRef.nativeElement.setAttribute('role', role);\n }\n }\n}\nCdkCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkCell, selector: \"cdk-cell, td[cdk-cell]\", host: { classAttribute: \"cdk-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-cell, td[cdk-cell]',\n host: {\n 'class': 'cdk-cell',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkColumnDef }, { type: i0.ElementRef }]; } });\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 * @docs-private\n */\nclass _Schedule {\n constructor() {\n this.tasks = [];\n this.endTasks = [];\n }\n}\n/** Injection token used to provide a coalesced style scheduler. */\nconst _COALESCED_STYLE_SCHEDULER = new InjectionToken('_COALESCED_STYLE_SCHEDULER');\n/**\n * Allows grouping up CSSDom mutations after the current execution context.\n * This can significantly improve performance when separate consecutive functions are\n * reading from the CSSDom and then mutating it.\n *\n * @docs-private\n */\nclass _CoalescedStyleScheduler {\n constructor(_ngZone) {\n this._ngZone = _ngZone;\n this._currentSchedule = null;\n this._destroyed = new Subject();\n }\n /**\n * Schedules the specified task to run at the end of the current VM turn.\n */\n schedule(task) {\n this._createScheduleIfNeeded();\n this._currentSchedule.tasks.push(task);\n }\n /**\n * Schedules the specified task to run after other scheduled tasks at the end of the current\n * VM turn.\n */\n scheduleEnd(task) {\n this._createScheduleIfNeeded();\n this._currentSchedule.endTasks.push(task);\n }\n /** Prevent any further tasks from running. */\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n _createScheduleIfNeeded() {\n if (this._currentSchedule) {\n return;\n }\n this._currentSchedule = new _Schedule();\n this._getScheduleObservable()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n while (this._currentSchedule.tasks.length || this._currentSchedule.endTasks.length) {\n const schedule = this._currentSchedule;\n // Capture new tasks scheduled by the current set of tasks.\n this._currentSchedule = new _Schedule();\n for (const task of schedule.tasks) {\n task();\n }\n for (const task of schedule.endTasks) {\n task();\n }\n }\n this._currentSchedule = null;\n });\n }\n _getScheduleObservable() {\n // Use onStable when in the context of an ongoing change detection cycle so that we\n // do not accidentally trigger additional cycles.\n return this._ngZone.isStable\n ? from(Promise.resolve(undefined))\n : this._ngZone.onStable.pipe(take(1));\n }\n}\n_CoalescedStyleScheduler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _CoalescedStyleScheduler, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\n_CoalescedStyleScheduler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _CoalescedStyleScheduler });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _CoalescedStyleScheduler, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\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 * The row template that can be used by the mat-table. Should not be used outside of the\n * material library.\n */\nconst CDK_ROW_TEMPLATE = ``;\n/**\n * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs\n * for changes and notifying the table.\n */\nclass BaseRowDef {\n constructor(\n /** @docs-private */ template, _differs) {\n this.template = template;\n this._differs = _differs;\n }\n ngOnChanges(changes) {\n // Create a new columns differ if one does not yet exist. Initialize it based on initial value\n // of the columns property or an empty array if none is provided.\n if (!this._columnsDiffer) {\n const columns = (changes['columns'] && changes['columns'].currentValue) || [];\n this._columnsDiffer = this._differs.find(columns).create();\n this._columnsDiffer.diff(columns);\n }\n }\n /**\n * Returns the difference between the current columns and the columns from the last diff, or null\n * if there is no difference.\n */\n getColumnsDiff() {\n return this._columnsDiffer.diff(this.columns);\n }\n /** Gets this row def's relevant cell template from the provided column def. */\n extractCellTemplate(column) {\n if (this instanceof CdkHeaderRowDef) {\n return column.headerCell.template;\n }\n if (this instanceof CdkFooterRowDef) {\n return column.footerCell.template;\n }\n else {\n return column.cell.template;\n }\n }\n}\nBaseRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: BaseRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Directive });\nBaseRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: BaseRowDef, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: BaseRowDef, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }]; } });\n// Boilerplate for applying mixins to CdkHeaderRowDef.\n/** @docs-private */\nclass CdkHeaderRowDefBase extends BaseRowDef {\n}\nconst _CdkHeaderRowDefBase = mixinHasStickyInput(CdkHeaderRowDefBase);\n/**\n * Header row definition for the CDK table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nclass CdkHeaderRowDef extends _CdkHeaderRowDefBase {\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n }\n // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.\n // Explicitly define it so that the method is called as part of the Angular lifecycle.\n ngOnChanges(changes) {\n super.ngOnChanges(changes);\n }\n}\nCdkHeaderRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkHeaderRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkHeaderRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkHeaderRowDef, selector: \"[cdkHeaderRowDef]\", inputs: { columns: [\"cdkHeaderRowDef\", \"columns\"], sticky: [\"cdkHeaderRowDefSticky\", \"sticky\"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkHeaderRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkHeaderRowDef]',\n inputs: ['columns: cdkHeaderRowDef', 'sticky: cdkHeaderRowDefSticky'],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; } });\n// Boilerplate for applying mixins to CdkFooterRowDef.\n/** @docs-private */\nclass CdkFooterRowDefBase extends BaseRowDef {\n}\nconst _CdkFooterRowDefBase = mixinHasStickyInput(CdkFooterRowDefBase);\n/**\n * Footer row definition for the CDK table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nclass CdkFooterRowDef extends _CdkFooterRowDefBase {\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n }\n // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.\n // Explicitly define it so that the method is called as part of the Angular lifecycle.\n ngOnChanges(changes) {\n super.ngOnChanges(changes);\n }\n}\nCdkFooterRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkFooterRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkFooterRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkFooterRowDef, selector: \"[cdkFooterRowDef]\", inputs: { columns: [\"cdkFooterRowDef\", \"columns\"], sticky: [\"cdkFooterRowDefSticky\", \"sticky\"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkFooterRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkFooterRowDef]',\n inputs: ['columns: cdkFooterRowDef', 'sticky: cdkFooterRowDefSticky'],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; } });\n/**\n * Data row definition for the CDK table.\n * Captures the header row's template and other row properties such as the columns to display and\n * a when predicate that describes when this row should be used.\n */\nclass CdkRowDef extends BaseRowDef {\n // TODO(andrewseguin): Add an input for providing a switch function to determine\n // if this template should be used.\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n }\n}\nCdkRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkRowDef, selector: \"[cdkRowDef]\", inputs: { columns: [\"cdkRowDefColumns\", \"columns\"], when: [\"cdkRowDefWhen\", \"when\"] }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkRowDef]',\n inputs: ['columns: cdkRowDefColumns', 'when: cdkRowDefWhen'],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; } });\n/**\n * Outlet for rendering cells inside of a row or header row.\n * @docs-private\n */\nclass CdkCellOutlet {\n constructor(_viewContainer) {\n this._viewContainer = _viewContainer;\n CdkCellOutlet.mostRecentCellOutlet = this;\n }\n ngOnDestroy() {\n // If this was the last outlet being rendered in the view, remove the reference\n // from the static property after it has been destroyed to avoid leaking memory.\n if (CdkCellOutlet.mostRecentCellOutlet === this) {\n CdkCellOutlet.mostRecentCellOutlet = null;\n }\n }\n}\n/**\n * Static property containing the latest constructed instance of this class.\n * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using\n * createEmbeddedView. After one of these components are created, this property will provide\n * a handle to provide that component's cells and context. After init, the CdkCellOutlet will\n * construct the cells with the provided context.\n */\nCdkCellOutlet.mostRecentCellOutlet = null;\nCdkCellOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkCellOutlet, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkCellOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkCellOutlet, decorators: [{\n type: Directive,\n args: [{ selector: '[cdkCellOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nclass CdkHeaderRow {\n}\nCdkHeaderRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkHeaderRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkHeaderRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkHeaderRow, selector: \"cdk-header-row, tr[cdk-header-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"cdk-header-row\" }, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkHeaderRow, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-header-row, tr[cdk-header-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'cdk-header-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n }]\n }] });\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nclass CdkFooterRow {\n}\nCdkFooterRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkFooterRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkFooterRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkFooterRow, selector: \"cdk-footer-row, tr[cdk-footer-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"cdk-footer-row\" }, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkFooterRow, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-footer-row, tr[cdk-footer-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'cdk-footer-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n }]\n }] });\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nclass CdkRow {\n}\nCdkRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkRow, selector: \"cdk-row, tr[cdk-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"cdk-row\" }, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkRow, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-row, tr[cdk-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'cdk-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n }]\n }] });\n/** Row that can be used to display a message when no data is shown in the table. */\nclass CdkNoDataRow {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._contentClassName = 'cdk-no-data-row';\n }\n}\nCdkNoDataRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkNoDataRow, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkNoDataRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkNoDataRow, selector: \"ng-template[cdkNoDataRow]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkNoDataRow, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[cdkNoDataRow]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\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 * List of all possible directions that can be used for sticky positioning.\n * @docs-private\n */\nconst STICKY_DIRECTIONS = ['top', 'bottom', 'left', 'right'];\n/**\n * Applies and removes sticky positioning styles to the `CdkTable` rows and columns cells.\n * @docs-private\n */\nclass StickyStyler {\n /**\n * @param _isNativeHtmlTable Whether the sticky logic should be based on a table\n * that uses the native `` element.\n * @param _stickCellCss The CSS class that will be applied to every row/cell that has\n * sticky positioning applied.\n * @param direction The directionality context of the table (ltr/rtl); affects column positioning\n * by reversing left/right positions.\n * @param _isBrowser Whether the table is currently being rendered on the server or the client.\n * @param _needsPositionStickyOnElement Whether we need to specify position: sticky on cells\n * using inline styles. If false, it is assumed that position: sticky is included in\n * the component stylesheet for _stickCellCss.\n * @param _positionListener A listener that is notified of changes to sticky rows/columns\n * and their dimensions.\n */\n constructor(_isNativeHtmlTable, _stickCellCss, direction, _coalescedStyleScheduler, _isBrowser = true, _needsPositionStickyOnElement = true, _positionListener) {\n this._isNativeHtmlTable = _isNativeHtmlTable;\n this._stickCellCss = _stickCellCss;\n this.direction = direction;\n this._coalescedStyleScheduler = _coalescedStyleScheduler;\n this._isBrowser = _isBrowser;\n this._needsPositionStickyOnElement = _needsPositionStickyOnElement;\n this._positionListener = _positionListener;\n this._cachedCellWidths = [];\n this._borderCellCss = {\n 'top': `${_stickCellCss}-border-elem-top`,\n 'bottom': `${_stickCellCss}-border-elem-bottom`,\n 'left': `${_stickCellCss}-border-elem-left`,\n 'right': `${_stickCellCss}-border-elem-right`,\n };\n }\n /**\n * Clears the sticky positioning styles from the row and its cells by resetting the `position`\n * style, setting the zIndex to 0, and unsetting each provided sticky direction.\n * @param rows The list of rows that should be cleared from sticking in the provided directions\n * @param stickyDirections The directions that should no longer be set as sticky on the rows.\n */\n clearStickyPositioning(rows, stickyDirections) {\n const elementsToClear = [];\n for (const row of rows) {\n // If the row isn't an element (e.g. if it's an `ng-container`),\n // it won't have inline styles or `children` so we skip it.\n if (row.nodeType !== row.ELEMENT_NODE) {\n continue;\n }\n elementsToClear.push(row);\n for (let i = 0; i < row.children.length; i++) {\n elementsToClear.push(row.children[i]);\n }\n }\n // Coalesce with sticky row/column updates (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n for (const element of elementsToClear) {\n this._removeStickyStyle(element, stickyDirections);\n }\n });\n }\n /**\n * Applies sticky left and right positions to the cells of each row according to the sticky\n * states of the rendered column definitions.\n * @param rows The rows that should have its set of cells stuck according to the sticky states.\n * @param stickyStartStates A list of boolean states where each state represents whether the cell\n * in this index position should be stuck to the start of the row.\n * @param stickyEndStates A list of boolean states where each state represents whether the cell\n * in this index position should be stuck to the end of the row.\n * @param recalculateCellWidths Whether the sticky styler should recalculate the width of each\n * column cell. If `false` cached widths will be used instead.\n */\n updateStickyColumns(rows, stickyStartStates, stickyEndStates, recalculateCellWidths = true) {\n if (!rows.length ||\n !this._isBrowser ||\n !(stickyStartStates.some(state => state) || stickyEndStates.some(state => state))) {\n if (this._positionListener) {\n this._positionListener.stickyColumnsUpdated({ sizes: [] });\n this._positionListener.stickyEndColumnsUpdated({ sizes: [] });\n }\n return;\n }\n const firstRow = rows[0];\n const numCells = firstRow.children.length;\n const cellWidths = this._getCellWidths(firstRow, recalculateCellWidths);\n const startPositions = this._getStickyStartColumnPositions(cellWidths, stickyStartStates);\n const endPositions = this._getStickyEndColumnPositions(cellWidths, stickyEndStates);\n const lastStickyStart = stickyStartStates.lastIndexOf(true);\n const firstStickyEnd = stickyEndStates.indexOf(true);\n // Coalesce with sticky row updates (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n const isRtl = this.direction === 'rtl';\n const start = isRtl ? 'right' : 'left';\n const end = isRtl ? 'left' : 'right';\n for (const row of rows) {\n for (let i = 0; i < numCells; i++) {\n const cell = row.children[i];\n if (stickyStartStates[i]) {\n this._addStickyStyle(cell, start, startPositions[i], i === lastStickyStart);\n }\n if (stickyEndStates[i]) {\n this._addStickyStyle(cell, end, endPositions[i], i === firstStickyEnd);\n }\n }\n }\n if (this._positionListener) {\n this._positionListener.stickyColumnsUpdated({\n sizes: lastStickyStart === -1\n ? []\n : cellWidths\n .slice(0, lastStickyStart + 1)\n .map((width, index) => (stickyStartStates[index] ? width : null)),\n });\n this._positionListener.stickyEndColumnsUpdated({\n sizes: firstStickyEnd === -1\n ? []\n : cellWidths\n .slice(firstStickyEnd)\n .map((width, index) => (stickyEndStates[index + firstStickyEnd] ? width : null))\n .reverse(),\n });\n }\n });\n }\n /**\n * Applies sticky positioning to the row's cells if using the native table layout, and to the\n * row itself otherwise.\n * @param rowsToStick The list of rows that should be stuck according to their corresponding\n * sticky state and to the provided top or bottom position.\n * @param stickyStates A list of boolean states where each state represents whether the row\n * should be stuck in the particular top or bottom position.\n * @param position The position direction in which the row should be stuck if that row should be\n * sticky.\n *\n */\n stickRows(rowsToStick, stickyStates, position) {\n // Since we can't measure the rows on the server, we can't stick the rows properly.\n if (!this._isBrowser) {\n return;\n }\n // If positioning the rows to the bottom, reverse their order when evaluating the sticky\n // position such that the last row stuck will be \"bottom: 0px\" and so on. Note that the\n // sticky states need to be reversed as well.\n const rows = position === 'bottom' ? rowsToStick.slice().reverse() : rowsToStick;\n const states = position === 'bottom' ? stickyStates.slice().reverse() : stickyStates;\n // Measure row heights all at once before adding sticky styles to reduce layout thrashing.\n const stickyOffsets = [];\n const stickyCellHeights = [];\n const elementsToStick = [];\n for (let rowIndex = 0, stickyOffset = 0; rowIndex < rows.length; rowIndex++) {\n if (!states[rowIndex]) {\n continue;\n }\n stickyOffsets[rowIndex] = stickyOffset;\n const row = rows[rowIndex];\n elementsToStick[rowIndex] = this._isNativeHtmlTable\n ? Array.from(row.children)\n : [row];\n const height = row.getBoundingClientRect().height;\n stickyOffset += height;\n stickyCellHeights[rowIndex] = height;\n }\n const borderedRowIndex = states.lastIndexOf(true);\n // Coalesce with other sticky row updates (top/bottom), sticky columns updates\n // (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n if (!states[rowIndex]) {\n continue;\n }\n const offset = stickyOffsets[rowIndex];\n const isBorderedRowIndex = rowIndex === borderedRowIndex;\n for (const element of elementsToStick[rowIndex]) {\n this._addStickyStyle(element, position, offset, isBorderedRowIndex);\n }\n }\n if (position === 'top') {\n this._positionListener?.stickyHeaderRowsUpdated({\n sizes: stickyCellHeights,\n offsets: stickyOffsets,\n elements: elementsToStick,\n });\n }\n else {\n this._positionListener?.stickyFooterRowsUpdated({\n sizes: stickyCellHeights,\n offsets: stickyOffsets,\n elements: elementsToStick,\n });\n }\n });\n }\n /**\n * When using the native table in Safari, sticky footer cells do not stick. The only way to stick\n * footer rows is to apply sticky styling to the tfoot container. This should only be done if\n * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from\n * the tfoot element.\n */\n updateStickyFooterContainer(tableElement, stickyStates) {\n if (!this._isNativeHtmlTable) {\n return;\n }\n const tfoot = tableElement.querySelector('tfoot');\n // Coalesce with other sticky updates (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n if (stickyStates.some(state => !state)) {\n this._removeStickyStyle(tfoot, ['bottom']);\n }\n else {\n this._addStickyStyle(tfoot, 'bottom', 0, false);\n }\n });\n }\n /**\n * Removes the sticky style on the element by removing the sticky cell CSS class, re-evaluating\n * the zIndex, removing each of the provided sticky directions, and removing the\n * sticky position if there are no more directions.\n */\n _removeStickyStyle(element, stickyDirections) {\n for (const dir of stickyDirections) {\n element.style[dir] = '';\n element.classList.remove(this._borderCellCss[dir]);\n }\n // If the element no longer has any more sticky directions, remove sticky positioning and\n // the sticky CSS class.\n // Short-circuit checking element.style[dir] for stickyDirections as they\n // were already removed above.\n const hasDirection = STICKY_DIRECTIONS.some(dir => stickyDirections.indexOf(dir) === -1 && element.style[dir]);\n if (hasDirection) {\n element.style.zIndex = this._getCalculatedZIndex(element);\n }\n else {\n // When not hasDirection, _getCalculatedZIndex will always return ''.\n element.style.zIndex = '';\n if (this._needsPositionStickyOnElement) {\n element.style.position = '';\n }\n element.classList.remove(this._stickCellCss);\n }\n }\n /**\n * Adds the sticky styling to the element by adding the sticky style class, changing position\n * to be sticky (and -webkit-sticky), setting the appropriate zIndex, and adding a sticky\n * direction and value.\n */\n _addStickyStyle(element, dir, dirValue, isBorderElement) {\n element.classList.add(this._stickCellCss);\n if (isBorderElement) {\n element.classList.add(this._borderCellCss[dir]);\n }\n element.style[dir] = `${dirValue}px`;\n element.style.zIndex = this._getCalculatedZIndex(element);\n if (this._needsPositionStickyOnElement) {\n element.style.cssText += 'position: -webkit-sticky; position: sticky; ';\n }\n }\n /**\n * Calculate what the z-index should be for the element, depending on what directions (top,\n * bottom, left, right) have been set. It should be true that elements with a top direction\n * should have the highest index since these are elements like a table header. If any of those\n * elements are also sticky in another direction, then they should appear above other elements\n * that are only sticky top (e.g. a sticky column on a sticky header). Bottom-sticky elements\n * (e.g. footer rows) should then be next in the ordering such that they are below the header\n * but above any non-sticky elements. Finally, left/right sticky elements (e.g. sticky columns)\n * should minimally increment so that they are above non-sticky elements but below top and bottom\n * elements.\n */\n _getCalculatedZIndex(element) {\n const zIndexIncrements = {\n top: 100,\n bottom: 10,\n left: 1,\n right: 1,\n };\n let zIndex = 0;\n // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n for (const dir of STICKY_DIRECTIONS) {\n if (element.style[dir]) {\n zIndex += zIndexIncrements[dir];\n }\n }\n return zIndex ? `${zIndex}` : '';\n }\n /** Gets the widths for each cell in the provided row. */\n _getCellWidths(row, recalculateCellWidths = true) {\n if (!recalculateCellWidths && this._cachedCellWidths.length) {\n return this._cachedCellWidths;\n }\n const cellWidths = [];\n const firstRowCells = row.children;\n for (let i = 0; i < firstRowCells.length; i++) {\n let cell = firstRowCells[i];\n cellWidths.push(cell.getBoundingClientRect().width);\n }\n this._cachedCellWidths = cellWidths;\n return cellWidths;\n }\n /**\n * Determines the left and right positions of each sticky column cell, which will be the\n * accumulation of all sticky column cell widths to the left and right, respectively.\n * Non-sticky cells do not need to have a value set since their positions will not be applied.\n */\n _getStickyStartColumnPositions(widths, stickyStates) {\n const positions = [];\n let nextPosition = 0;\n for (let i = 0; i < widths.length; i++) {\n if (stickyStates[i]) {\n positions[i] = nextPosition;\n nextPosition += widths[i];\n }\n }\n return positions;\n }\n /**\n * Determines the left and right positions of each sticky column cell, which will be the\n * accumulation of all sticky column cell widths to the left and right, respectively.\n * Non-sticky cells do not need to have a value set since their positions will not be applied.\n */\n _getStickyEndColumnPositions(widths, stickyStates) {\n const positions = [];\n let nextPosition = 0;\n for (let i = widths.length; i > 0; i--) {\n if (stickyStates[i]) {\n positions[i] = nextPosition;\n nextPosition += widths[i];\n }\n }\n return positions;\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 * Returns an error to be thrown when attempting to find an nonexistent column.\n * @param id Id whose lookup failed.\n * @docs-private\n */\nfunction getTableUnknownColumnError(id) {\n return Error(`Could not find column with id \"${id}\".`);\n}\n/**\n * Returns an error to be thrown when two column definitions have the same name.\n * @docs-private\n */\nfunction getTableDuplicateColumnNameError(name) {\n return Error(`Duplicate column definition name provided: \"${name}\".`);\n}\n/**\n * Returns an error to be thrown when there are multiple rows that are missing a when function.\n * @docs-private\n */\nfunction getTableMultipleDefaultRowDefsError() {\n return Error(`There can only be one default row without a when predicate function.`);\n}\n/**\n * Returns an error to be thrown when there are no matching row defs for a particular set of data.\n * @docs-private\n */\nfunction getTableMissingMatchingRowDefError(data) {\n return Error(`Could not find a matching row definition for the` +\n `provided row data: ${JSON.stringify(data)}`);\n}\n/**\n * Returns an error to be thrown when there is no row definitions present in the content.\n * @docs-private\n */\nfunction getTableMissingRowDefsError() {\n return Error('Missing definitions for header, footer, and row; ' +\n 'cannot determine which columns should be rendered.');\n}\n/**\n * Returns an error to be thrown when the data source does not match the compatible types.\n * @docs-private\n */\nfunction getTableUnknownDataSourceError() {\n return Error(`Provided data source did not match an array, Observable, or DataSource`);\n}\n/**\n * Returns an error to be thrown when the text column cannot find a parent table to inject.\n * @docs-private\n */\nfunction getTableTextColumnMissingParentTableError() {\n return Error(`Text column could not find a parent table for registration.`);\n}\n/**\n * Returns an error to be thrown when a table text column doesn't have a name.\n * @docs-private\n */\nfunction getTableTextColumnMissingNameError() {\n return Error(`Table text column must have a name.`);\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/** The injection token used to specify the StickyPositioningListener. */\nconst STICKY_POSITIONING_LISTENER = new InjectionToken('CDK_SPL');\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 * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with\n * tables that animate rows.\n */\nclass CdkRecycleRows {\n}\nCdkRecycleRows.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkRecycleRows, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nCdkRecycleRows.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkRecycleRows, selector: \"cdk-table[recycleRows], table[cdk-table][recycleRows]\", providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkRecycleRows, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-table[recycleRows], table[cdk-table][recycleRows]',\n providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }],\n }]\n }] });\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert data rows.\n * @docs-private\n */\nclass DataRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nDataRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: DataRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nDataRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: DataRowOutlet, selector: \"[rowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: DataRowOutlet, decorators: [{\n type: Directive,\n args: [{ selector: '[rowOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the header.\n * @docs-private\n */\nclass HeaderRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nHeaderRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: HeaderRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nHeaderRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: HeaderRowOutlet, selector: \"[headerRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: HeaderRowOutlet, decorators: [{\n type: Directive,\n args: [{ selector: '[headerRowOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the footer.\n * @docs-private\n */\nclass FooterRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nFooterRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: FooterRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nFooterRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: FooterRowOutlet, selector: \"[footerRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: FooterRowOutlet, decorators: [{\n type: Directive,\n args: [{ selector: '[footerRowOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * Provides a handle for the table to grab the view\n * container's ng-container to insert the no data row.\n * @docs-private\n */\nclass NoDataRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nNoDataRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: NoDataRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nNoDataRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: NoDataRowOutlet, selector: \"[noDataRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: NoDataRowOutlet, decorators: [{\n type: Directive,\n args: [{ selector: '[noDataRowOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * The table template that can be used by the mat-table. Should not be used outside of the\n * material library.\n * @docs-private\n */\nconst CDK_TABLE_TEMPLATE = \n// Note that according to MDN, the `caption` element has to be projected as the **first**\n// element in the table. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption\n`\n \n \n \n \n \n \n`;\n/**\n * Class used to conveniently type the embedded view ref for rows with a context.\n * @docs-private\n */\nclass RowViewRef extends EmbeddedViewRef {\n}\n/**\n * A data table that can render a header row, data rows, and a footer row.\n * Uses the dataSource input to determine the data to be rendered. The data can be provided either\n * as a data array, an Observable stream that emits the data array to render, or a DataSource with a\n * connect function that will return an Observable stream that emits the data array to render.\n */\nclass CdkTable {\n constructor(_differs, _changeDetectorRef, _elementRef, role, _dir, _document, _platform, _viewRepeater, _coalescedStyleScheduler, _viewportRuler, \n /**\n * @deprecated `_stickyPositioningListener` parameter to become required.\n * @breaking-change 13.0.0\n */\n _stickyPositioningListener, \n /**\n * @deprecated `_ngZone` parameter to become required.\n * @breaking-change 14.0.0\n */\n _ngZone) {\n this._differs = _differs;\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._dir = _dir;\n this._platform = _platform;\n this._viewRepeater = _viewRepeater;\n this._coalescedStyleScheduler = _coalescedStyleScheduler;\n this._viewportRuler = _viewportRuler;\n this._stickyPositioningListener = _stickyPositioningListener;\n this._ngZone = _ngZone;\n /** Subject that emits when the component has been destroyed. */\n this._onDestroy = new Subject();\n /**\n * Map of all the user's defined columns (header, data, and footer cell template) identified by\n * name. Collection populated by the column definitions gathered by `ContentChildren` as well as\n * any custom column definitions added to `_customColumnDefs`.\n */\n this._columnDefsByName = new Map();\n /**\n * Column definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * column definitions as *its* content child.\n */\n this._customColumnDefs = new Set();\n /**\n * Data row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * built-in data rows as *its* content child.\n */\n this._customRowDefs = new Set();\n /**\n * Header row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * built-in header rows as *its* content child.\n */\n this._customHeaderRowDefs = new Set();\n /**\n * Footer row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has a\n * built-in footer row as *its* content child.\n */\n this._customFooterRowDefs = new Set();\n /**\n * Whether the header row definition has been changed. Triggers an update to the header row after\n * content is checked. Initialized as true so that the table renders the initial set of rows.\n */\n this._headerRowDefChanged = true;\n /**\n * Whether the footer row definition has been changed. Triggers an update to the footer row after\n * content is checked. Initialized as true so that the table renders the initial set of rows.\n */\n this._footerRowDefChanged = true;\n /**\n * Whether the sticky column styles need to be updated. Set to `true` when the visible columns\n * change.\n */\n this._stickyColumnStylesNeedReset = true;\n /**\n * Whether the sticky styler should recalculate cell widths when applying sticky styles. If\n * `false`, cached values will be used instead. This is only applicable to tables with\n * {@link fixedLayout} enabled. For other tables, cell widths will always be recalculated.\n */\n this._forceRecalculateCellWidths = true;\n /**\n * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing\n * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with\n * the cached `RenderRow` objects when possible, the row identity is preserved when the data\n * and row template matches, which allows the `IterableDiffer` to check rows by reference\n * and understand which rows are added/moved/removed.\n *\n * Implemented as a map of maps where the first key is the `data: T` object and the second is the\n * `CdkRowDef` object. With the two keys, the cache points to a `RenderRow` object that\n * contains an array of created pairs. The array is necessary to handle cases where the data\n * array contains multiple duplicate data objects and each instantiated `RenderRow` must be\n * stored.\n */\n this._cachedRenderRowsMap = new Map();\n /**\n * CSS class added to any row or cell that has sticky positioning applied. May be overridden by\n * table subclasses.\n */\n this.stickyCssClass = 'cdk-table-sticky';\n /**\n * Whether to manually add position: sticky to all sticky cell elements. Not needed if\n * the position is set in a selector associated with the value of stickyCssClass. May be\n * overridden by table subclasses\n */\n this.needsPositionStickyOnElement = true;\n /** Whether the no data row is currently showing anything. */\n this._isShowingNoDataRow = false;\n this._multiTemplateDataRows = false;\n this._fixedLayout = false;\n /**\n * Emits when the table completes rendering a set of data rows based on the latest data from the\n * data source, even if the set of rows is empty.\n */\n this.contentChanged = new EventEmitter();\n // TODO(andrewseguin): Remove max value as the end index\n // and instead calculate the view on init and scroll.\n /**\n * Stream containing the latest information on what rows are being displayed on screen.\n * Can be used by the data source to as a heuristic of what data should be provided.\n *\n * @docs-private\n */\n this.viewChange = new BehaviorSubject({\n start: 0,\n end: Number.MAX_VALUE,\n });\n if (!role) {\n this._elementRef.nativeElement.setAttribute('role', 'table');\n }\n this._document = _document;\n this._isNativeHtmlTable = this._elementRef.nativeElement.nodeName === 'TABLE';\n }\n /**\n * Tracking function that will be used to check the differences in data changes. Used similarly\n * to `ngFor` `trackBy` function. Optimize row operations by identifying a row based on its data\n * relative to the function to know if a row should be added/removed/moved.\n * Accepts a function that takes two parameters, `index` and `item`.\n */\n get trackBy() {\n return this._trackByFn;\n }\n set trackBy(fn) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {\n console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._trackByFn = fn;\n }\n /**\n * The table's source of data, which can be provided in three ways (in order of complexity):\n * - Simple data array (each object represents one table row)\n * - Stream that emits a data array each time the array changes\n * - `DataSource` object that implements the connect/disconnect interface.\n *\n * If a data array is provided, the table must be notified when the array's objects are\n * added, removed, or moved. This can be done by calling the `renderRows()` function which will\n * render the diff since the last table render. If the data array reference is changed, the table\n * will automatically trigger an update to the rows.\n *\n * When providing an Observable stream, the table will trigger an update automatically when the\n * stream emits a new array of data.\n *\n * Finally, when providing a `DataSource` object, the table will use the Observable stream\n * provided by the connect function and trigger updates when that stream emits new data array\n * values. During the table's ngOnDestroy or when the data source is removed from the table, the\n * table will call the DataSource's `disconnect` function (may be useful for cleaning up any\n * subscriptions registered during the connect process).\n */\n get dataSource() {\n return this._dataSource;\n }\n set dataSource(dataSource) {\n if (this._dataSource !== dataSource) {\n this._switchDataSource(dataSource);\n }\n }\n /**\n * Whether to allow multiple rows per data object by evaluating which rows evaluate their 'when'\n * predicate to true. If `multiTemplateDataRows` is false, which is the default value, then each\n * dataobject will render the first row that evaluates its when predicate to true, in the order\n * defined in the table, or otherwise the default row which does not have a when predicate.\n */\n get multiTemplateDataRows() {\n return this._multiTemplateDataRows;\n }\n set multiTemplateDataRows(v) {\n this._multiTemplateDataRows = coerceBooleanProperty(v);\n // In Ivy if this value is set via a static attribute (e.g.
),\n // this setter will be invoked before the row outlet has been defined hence the null check.\n if (this._rowOutlet && this._rowOutlet.viewContainer.length) {\n this._forceRenderDataRows();\n this.updateStickyColumnStyles();\n }\n }\n /**\n * Whether to use a fixed table layout. Enabling this option will enforce consistent column widths\n * and optimize rendering sticky styles for native tables. No-op for flex tables.\n */\n get fixedLayout() {\n return this._fixedLayout;\n }\n set fixedLayout(v) {\n this._fixedLayout = coerceBooleanProperty(v);\n // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated.\n this._forceRecalculateCellWidths = true;\n this._stickyColumnStylesNeedReset = true;\n }\n ngOnInit() {\n this._setupStickyStyler();\n if (this._isNativeHtmlTable) {\n this._applyNativeTableSections();\n }\n // Set up the trackBy function so that it uses the `RenderRow` as its identity by default. If\n // the user has provided a custom trackBy, return the result of that function as evaluated\n // with the values of the `RenderRow`'s data and index.\n this._dataDiffer = this._differs.find([]).create((_i, dataRow) => {\n return this.trackBy ? this.trackBy(dataRow.dataIndex, dataRow.data) : dataRow;\n });\n this._viewportRuler\n .change()\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => {\n this._forceRecalculateCellWidths = true;\n });\n }\n ngAfterContentChecked() {\n // Cache the row and column definitions gathered by ContentChildren and programmatic injection.\n this._cacheRowDefs();\n this._cacheColumnDefs();\n // Make sure that the user has at least added header, footer, or data row def.\n if (!this._headerRowDefs.length &&\n !this._footerRowDefs.length &&\n !this._rowDefs.length &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMissingRowDefsError();\n }\n // Render updates if the list of columns have been changed for the header, row, or footer defs.\n const columnsChanged = this._renderUpdatedColumns();\n const rowDefsChanged = columnsChanged || this._headerRowDefChanged || this._footerRowDefChanged;\n // Ensure sticky column styles are reset if set to `true` elsewhere.\n this._stickyColumnStylesNeedReset = this._stickyColumnStylesNeedReset || rowDefsChanged;\n this._forceRecalculateCellWidths = rowDefsChanged;\n // If the header row definition has been changed, trigger a render to the header row.\n if (this._headerRowDefChanged) {\n this._forceRenderHeaderRows();\n this._headerRowDefChanged = false;\n }\n // If the footer row definition has been changed, trigger a render to the footer row.\n if (this._footerRowDefChanged) {\n this._forceRenderFooterRows();\n this._footerRowDefChanged = false;\n }\n // If there is a data source and row definitions, connect to the data source unless a\n // connection has already been made.\n if (this.dataSource && this._rowDefs.length > 0 && !this._renderChangeSubscription) {\n this._observeRenderChanges();\n }\n else if (this._stickyColumnStylesNeedReset) {\n // In the above case, _observeRenderChanges will result in updateStickyColumnStyles being\n // called when it row data arrives. Otherwise, we need to call it proactively.\n this.updateStickyColumnStyles();\n }\n this._checkStickyStates();\n }\n ngOnDestroy() {\n [\n this._rowOutlet.viewContainer,\n this._headerRowOutlet.viewContainer,\n this._footerRowOutlet.viewContainer,\n this._cachedRenderRowsMap,\n this._customColumnDefs,\n this._customRowDefs,\n this._customHeaderRowDefs,\n this._customFooterRowDefs,\n this._columnDefsByName,\n ].forEach(def => {\n def.clear();\n });\n this._headerRowDefs = [];\n this._footerRowDefs = [];\n this._defaultRowDef = null;\n this._onDestroy.next();\n this._onDestroy.complete();\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect(this);\n }\n }\n /**\n * Renders rows based on the table's latest set of data, which was either provided directly as an\n * input or retrieved through an Observable stream (directly or from a DataSource).\n * Checks for differences in the data since the last diff to perform only the necessary\n * changes (add/remove/move rows).\n *\n * If the table's data source is a DataSource or Observable, this will be invoked automatically\n * each time the provided Observable stream emits a new data array. Otherwise if your data is\n * an array, this function will need to be called to render any changes.\n */\n renderRows() {\n this._renderRows = this._getAllRenderRows();\n const changes = this._dataDiffer.diff(this._renderRows);\n if (!changes) {\n this._updateNoDataRow();\n this.contentChanged.next();\n return;\n }\n const viewContainer = this._rowOutlet.viewContainer;\n this._viewRepeater.applyChanges(changes, viewContainer, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record.item, currentIndex), record => record.item.data, (change) => {\n if (change.operation === 1 /* _ViewRepeaterOperation.INSERTED */ && change.context) {\n this._renderCellTemplateForItem(change.record.item.rowDef, change.context);\n }\n });\n // Update the meta context of a row's context data (index, count, first, last, ...)\n this._updateRowIndexContext();\n // Update rows that did not get added/removed/moved but may have had their identity changed,\n // e.g. if trackBy matched data on some property but the actual data reference changed.\n changes.forEachIdentityChange((record) => {\n const rowView = viewContainer.get(record.currentIndex);\n rowView.context.$implicit = record.item.data;\n });\n this._updateNoDataRow();\n // Allow the new row data to render before measuring it.\n // @breaking-change 14.0.0 Remove undefined check once _ngZone is required.\n if (this._ngZone && NgZone.isInAngularZone()) {\n this._ngZone.onStable.pipe(take(1), takeUntil(this._onDestroy)).subscribe(() => {\n this.updateStickyColumnStyles();\n });\n }\n else {\n this.updateStickyColumnStyles();\n }\n this.contentChanged.next();\n }\n /** Adds a column definition that was not included as part of the content children. */\n addColumnDef(columnDef) {\n this._customColumnDefs.add(columnDef);\n }\n /** Removes a column definition that was not included as part of the content children. */\n removeColumnDef(columnDef) {\n this._customColumnDefs.delete(columnDef);\n }\n /** Adds a row definition that was not included as part of the content children. */\n addRowDef(rowDef) {\n this._customRowDefs.add(rowDef);\n }\n /** Removes a row definition that was not included as part of the content children. */\n removeRowDef(rowDef) {\n this._customRowDefs.delete(rowDef);\n }\n /** Adds a header row definition that was not included as part of the content children. */\n addHeaderRowDef(headerRowDef) {\n this._customHeaderRowDefs.add(headerRowDef);\n this._headerRowDefChanged = true;\n }\n /** Removes a header row definition that was not included as part of the content children. */\n removeHeaderRowDef(headerRowDef) {\n this._customHeaderRowDefs.delete(headerRowDef);\n this._headerRowDefChanged = true;\n }\n /** Adds a footer row definition that was not included as part of the content children. */\n addFooterRowDef(footerRowDef) {\n this._customFooterRowDefs.add(footerRowDef);\n this._footerRowDefChanged = true;\n }\n /** Removes a footer row definition that was not included as part of the content children. */\n removeFooterRowDef(footerRowDef) {\n this._customFooterRowDefs.delete(footerRowDef);\n this._footerRowDefChanged = true;\n }\n /** Sets a no data row definition that was not included as a part of the content children. */\n setNoDataRow(noDataRow) {\n this._customNoDataRow = noDataRow;\n }\n /**\n * Updates the header sticky styles. First resets all applied styles with respect to the cells\n * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is\n * automatically called when the header row changes its displayed set of columns, or if its\n * sticky input changes. May be called manually for cases where the cell content changes outside\n * of these events.\n */\n updateStickyHeaderRowStyles() {\n const headerRows = this._getRenderedRows(this._headerRowOutlet);\n const tableElement = this._elementRef.nativeElement;\n // Hide the thead element if there are no header rows. This is necessary to satisfy\n // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n // required child `row`.\n const thead = tableElement.querySelector('thead');\n if (thead) {\n thead.style.display = headerRows.length ? '' : 'none';\n }\n const stickyStates = this._headerRowDefs.map(def => def.sticky);\n this._stickyStyler.clearStickyPositioning(headerRows, ['top']);\n this._stickyStyler.stickRows(headerRows, stickyStates, 'top');\n // Reset the dirty state of the sticky input change since it has been used.\n this._headerRowDefs.forEach(def => def.resetStickyChanged());\n }\n /**\n * Updates the footer sticky styles. First resets all applied styles with respect to the cells\n * sticking to the bottom. Then, evaluating which cells need to be stuck to the bottom. This is\n * automatically called when the footer row changes its displayed set of columns, or if its\n * sticky input changes. May be called manually for cases where the cell content changes outside\n * of these events.\n */\n updateStickyFooterRowStyles() {\n const footerRows = this._getRenderedRows(this._footerRowOutlet);\n const tableElement = this._elementRef.nativeElement;\n // Hide the tfoot element if there are no footer rows. This is necessary to satisfy\n // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n // required child `row`.\n const tfoot = tableElement.querySelector('tfoot');\n if (tfoot) {\n tfoot.style.display = footerRows.length ? '' : 'none';\n }\n const stickyStates = this._footerRowDefs.map(def => def.sticky);\n this._stickyStyler.clearStickyPositioning(footerRows, ['bottom']);\n this._stickyStyler.stickRows(footerRows, stickyStates, 'bottom');\n this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement, stickyStates);\n // Reset the dirty state of the sticky input change since it has been used.\n this._footerRowDefs.forEach(def => def.resetStickyChanged());\n }\n /**\n * Updates the column sticky styles. First resets all applied styles with respect to the cells\n * sticking to the left and right. Then sticky styles are added for the left and right according\n * to the column definitions for each cell in each row. This is automatically called when\n * the data source provides a new set of data or when a column definition changes its sticky\n * input. May be called manually for cases where the cell content changes outside of these events.\n */\n updateStickyColumnStyles() {\n const headerRows = this._getRenderedRows(this._headerRowOutlet);\n const dataRows = this._getRenderedRows(this._rowOutlet);\n const footerRows = this._getRenderedRows(this._footerRowOutlet);\n // For tables not using a fixed layout, the column widths may change when new rows are rendered.\n // In a table using a fixed layout, row content won't affect column width, so sticky styles\n // don't need to be cleared unless either the sticky column config changes or one of the row\n // defs change.\n if ((this._isNativeHtmlTable && !this._fixedLayout) || this._stickyColumnStylesNeedReset) {\n // Clear the left and right positioning from all columns in the table across all rows since\n // sticky columns span across all table sections (header, data, footer)\n this._stickyStyler.clearStickyPositioning([...headerRows, ...dataRows, ...footerRows], ['left', 'right']);\n this._stickyColumnStylesNeedReset = false;\n }\n // Update the sticky styles for each header row depending on the def's sticky state\n headerRows.forEach((headerRow, i) => {\n this._addStickyColumnStyles([headerRow], this._headerRowDefs[i]);\n });\n // Update the sticky styles for each data row depending on its def's sticky state\n this._rowDefs.forEach(rowDef => {\n // Collect all the rows rendered with this row definition.\n const rows = [];\n for (let i = 0; i < dataRows.length; i++) {\n if (this._renderRows[i].rowDef === rowDef) {\n rows.push(dataRows[i]);\n }\n }\n this._addStickyColumnStyles(rows, rowDef);\n });\n // Update the sticky styles for each footer row depending on the def's sticky state\n footerRows.forEach((footerRow, i) => {\n this._addStickyColumnStyles([footerRow], this._footerRowDefs[i]);\n });\n // Reset the dirty state of the sticky input change since it has been used.\n Array.from(this._columnDefsByName.values()).forEach(def => def.resetStickyChanged());\n }\n /**\n * Get the list of RenderRow objects to render according to the current list of data and defined\n * row definitions. If the previous list already contained a particular pair, it should be reused\n * so that the differ equates their references.\n */\n _getAllRenderRows() {\n const renderRows = [];\n // Store the cache and create a new one. Any re-used RenderRow objects will be moved into the\n // new cache while unused ones can be picked up by garbage collection.\n const prevCachedRenderRows = this._cachedRenderRowsMap;\n this._cachedRenderRowsMap = new Map();\n // For each data object, get the list of rows that should be rendered, represented by the\n // respective `RenderRow` object which is the pair of `data` and `CdkRowDef`.\n for (let i = 0; i < this._data.length; i++) {\n let data = this._data[i];\n const renderRowsForData = this._getRenderRowsForData(data, i, prevCachedRenderRows.get(data));\n if (!this._cachedRenderRowsMap.has(data)) {\n this._cachedRenderRowsMap.set(data, new WeakMap());\n }\n for (let j = 0; j < renderRowsForData.length; j++) {\n let renderRow = renderRowsForData[j];\n const cache = this._cachedRenderRowsMap.get(renderRow.data);\n if (cache.has(renderRow.rowDef)) {\n cache.get(renderRow.rowDef).push(renderRow);\n }\n else {\n cache.set(renderRow.rowDef, [renderRow]);\n }\n renderRows.push(renderRow);\n }\n }\n return renderRows;\n }\n /**\n * Gets a list of `RenderRow` for the provided data object and any `CdkRowDef` objects that\n * should be rendered for this data. Reuses the cached RenderRow objects if they match the same\n * `(T, CdkRowDef)` pair.\n */\n _getRenderRowsForData(data, dataIndex, cache) {\n const rowDefs = this._getRowDefs(data, dataIndex);\n return rowDefs.map(rowDef => {\n const cachedRenderRows = cache && cache.has(rowDef) ? cache.get(rowDef) : [];\n if (cachedRenderRows.length) {\n const dataRow = cachedRenderRows.shift();\n dataRow.dataIndex = dataIndex;\n return dataRow;\n }\n else {\n return { data, rowDef, dataIndex };\n }\n });\n }\n /** Update the map containing the content's column definitions. */\n _cacheColumnDefs() {\n this._columnDefsByName.clear();\n const columnDefs = mergeArrayAndSet(this._getOwnDefs(this._contentColumnDefs), this._customColumnDefs);\n columnDefs.forEach(columnDef => {\n if (this._columnDefsByName.has(columnDef.name) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableDuplicateColumnNameError(columnDef.name);\n }\n this._columnDefsByName.set(columnDef.name, columnDef);\n });\n }\n /** Update the list of all available row definitions that can be used. */\n _cacheRowDefs() {\n this._headerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentHeaderRowDefs), this._customHeaderRowDefs);\n this._footerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentFooterRowDefs), this._customFooterRowDefs);\n this._rowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentRowDefs), this._customRowDefs);\n // After all row definitions are determined, find the row definition to be considered default.\n const defaultRowDefs = this._rowDefs.filter(def => !def.when);\n if (!this.multiTemplateDataRows &&\n defaultRowDefs.length > 1 &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMultipleDefaultRowDefsError();\n }\n this._defaultRowDef = defaultRowDefs[0];\n }\n /**\n * Check if the header, data, or footer rows have changed what columns they want to display or\n * whether the sticky states have changed for the header or footer. If there is a diff, then\n * re-render that section.\n */\n _renderUpdatedColumns() {\n const columnsDiffReducer = (acc, def) => acc || !!def.getColumnsDiff();\n // Force re-render data rows if the list of column definitions have changed.\n const dataColumnsChanged = this._rowDefs.reduce(columnsDiffReducer, false);\n if (dataColumnsChanged) {\n this._forceRenderDataRows();\n }\n // Force re-render header/footer rows if the list of column definitions have changed.\n const headerColumnsChanged = this._headerRowDefs.reduce(columnsDiffReducer, false);\n if (headerColumnsChanged) {\n this._forceRenderHeaderRows();\n }\n const footerColumnsChanged = this._footerRowDefs.reduce(columnsDiffReducer, false);\n if (footerColumnsChanged) {\n this._forceRenderFooterRows();\n }\n return dataColumnsChanged || headerColumnsChanged || footerColumnsChanged;\n }\n /**\n * Switch to the provided data source by resetting the data and unsubscribing from the current\n * render change subscription if one exists. If the data source is null, interpret this by\n * clearing the row outlet. Otherwise start listening for new data.\n */\n _switchDataSource(dataSource) {\n this._data = [];\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect(this);\n }\n // Stop listening for data from the previous data source.\n if (this._renderChangeSubscription) {\n this._renderChangeSubscription.unsubscribe();\n this._renderChangeSubscription = null;\n }\n if (!dataSource) {\n if (this._dataDiffer) {\n this._dataDiffer.diff([]);\n }\n this._rowOutlet.viewContainer.clear();\n }\n this._dataSource = dataSource;\n }\n /** Set up a subscription for the data provided by the data source. */\n _observeRenderChanges() {\n // If no data source has been set, there is nothing to observe for changes.\n if (!this.dataSource) {\n return;\n }\n let dataStream;\n if (isDataSource(this.dataSource)) {\n dataStream = this.dataSource.connect(this);\n }\n else if (isObservable(this.dataSource)) {\n dataStream = this.dataSource;\n }\n else if (Array.isArray(this.dataSource)) {\n dataStream = of(this.dataSource);\n }\n if (dataStream === undefined && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownDataSourceError();\n }\n this._renderChangeSubscription = dataStream\n .pipe(takeUntil(this._onDestroy))\n .subscribe(data => {\n this._data = data || [];\n this.renderRows();\n });\n }\n /**\n * Clears any existing content in the header row outlet and creates a new embedded view\n * in the outlet using the header row definition.\n */\n _forceRenderHeaderRows() {\n // Clear the header row outlet if any content exists.\n if (this._headerRowOutlet.viewContainer.length > 0) {\n this._headerRowOutlet.viewContainer.clear();\n }\n this._headerRowDefs.forEach((def, i) => this._renderRow(this._headerRowOutlet, def, i));\n this.updateStickyHeaderRowStyles();\n }\n /**\n * Clears any existing content in the footer row outlet and creates a new embedded view\n * in the outlet using the footer row definition.\n */\n _forceRenderFooterRows() {\n // Clear the footer row outlet if any content exists.\n if (this._footerRowOutlet.viewContainer.length > 0) {\n this._footerRowOutlet.viewContainer.clear();\n }\n this._footerRowDefs.forEach((def, i) => this._renderRow(this._footerRowOutlet, def, i));\n this.updateStickyFooterRowStyles();\n }\n /** Adds the sticky column styles for the rows according to the columns' stick states. */\n _addStickyColumnStyles(rows, rowDef) {\n const columnDefs = Array.from(rowDef.columns || []).map(columnName => {\n const columnDef = this._columnDefsByName.get(columnName);\n if (!columnDef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownColumnError(columnName);\n }\n return columnDef;\n });\n const stickyStartStates = columnDefs.map(columnDef => columnDef.sticky);\n const stickyEndStates = columnDefs.map(columnDef => columnDef.stickyEnd);\n this._stickyStyler.updateStickyColumns(rows, stickyStartStates, stickyEndStates, !this._fixedLayout || this._forceRecalculateCellWidths);\n }\n /** Gets the list of rows that have been rendered in the row outlet. */\n _getRenderedRows(rowOutlet) {\n const renderedRows = [];\n for (let i = 0; i < rowOutlet.viewContainer.length; i++) {\n const viewRef = rowOutlet.viewContainer.get(i);\n renderedRows.push(viewRef.rootNodes[0]);\n }\n return renderedRows;\n }\n /**\n * Get the matching row definitions that should be used for this row data. If there is only\n * one row definition, it is returned. Otherwise, find the row definitions that has a when\n * predicate that returns true with the data. If none return true, return the default row\n * definition.\n */\n _getRowDefs(data, dataIndex) {\n if (this._rowDefs.length == 1) {\n return [this._rowDefs[0]];\n }\n let rowDefs = [];\n if (this.multiTemplateDataRows) {\n rowDefs = this._rowDefs.filter(def => !def.when || def.when(dataIndex, data));\n }\n else {\n let rowDef = this._rowDefs.find(def => def.when && def.when(dataIndex, data)) || this._defaultRowDef;\n if (rowDef) {\n rowDefs.push(rowDef);\n }\n }\n if (!rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMissingMatchingRowDefError(data);\n }\n return rowDefs;\n }\n _getEmbeddedViewArgs(renderRow, index) {\n const rowDef = renderRow.rowDef;\n const context = { $implicit: renderRow.data };\n return {\n templateRef: rowDef.template,\n context,\n index,\n };\n }\n /**\n * Creates a new row template in the outlet and fills it with the set of cell templates.\n * Optionally takes a context to provide to the row and cells, as well as an optional index\n * of where to place the new row template in the outlet.\n */\n _renderRow(outlet, rowDef, index, context = {}) {\n // TODO(andrewseguin): enforce that one outlet was instantiated from createEmbeddedView\n const view = outlet.viewContainer.createEmbeddedView(rowDef.template, context, index);\n this._renderCellTemplateForItem(rowDef, context);\n return view;\n }\n _renderCellTemplateForItem(rowDef, context) {\n for (let cellTemplate of this._getCellTemplates(rowDef)) {\n if (CdkCellOutlet.mostRecentCellOutlet) {\n CdkCellOutlet.mostRecentCellOutlet._viewContainer.createEmbeddedView(cellTemplate, context);\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Updates the index-related context for each row to reflect any changes in the index of the rows,\n * e.g. first/last/even/odd.\n */\n _updateRowIndexContext() {\n const viewContainer = this._rowOutlet.viewContainer;\n for (let renderIndex = 0, count = viewContainer.length; renderIndex < count; renderIndex++) {\n const viewRef = viewContainer.get(renderIndex);\n const context = viewRef.context;\n context.count = count;\n context.first = renderIndex === 0;\n context.last = renderIndex === count - 1;\n context.even = renderIndex % 2 === 0;\n context.odd = !context.even;\n if (this.multiTemplateDataRows) {\n context.dataIndex = this._renderRows[renderIndex].dataIndex;\n context.renderIndex = renderIndex;\n }\n else {\n context.index = this._renderRows[renderIndex].dataIndex;\n }\n }\n }\n /** Gets the column definitions for the provided row def. */\n _getCellTemplates(rowDef) {\n if (!rowDef || !rowDef.columns) {\n return [];\n }\n return Array.from(rowDef.columns, columnId => {\n const column = this._columnDefsByName.get(columnId);\n if (!column && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownColumnError(columnId);\n }\n return rowDef.extractCellTemplate(column);\n });\n }\n /** Adds native table sections (e.g. tbody) and moves the row outlets into them. */\n _applyNativeTableSections() {\n const documentFragment = this._document.createDocumentFragment();\n const sections = [\n { tag: 'thead', outlets: [this._headerRowOutlet] },\n { tag: 'tbody', outlets: [this._rowOutlet, this._noDataRowOutlet] },\n { tag: 'tfoot', outlets: [this._footerRowOutlet] },\n ];\n for (const section of sections) {\n const element = this._document.createElement(section.tag);\n element.setAttribute('role', 'rowgroup');\n for (const outlet of section.outlets) {\n element.appendChild(outlet.elementRef.nativeElement);\n }\n documentFragment.appendChild(element);\n }\n // Use a DocumentFragment so we don't hit the DOM on each iteration.\n this._elementRef.nativeElement.appendChild(documentFragment);\n }\n /**\n * Forces a re-render of the data rows. Should be called in cases where there has been an input\n * change that affects the evaluation of which rows should be rendered, e.g. toggling\n * `multiTemplateDataRows` or adding/removing row definitions.\n */\n _forceRenderDataRows() {\n this._dataDiffer.diff([]);\n this._rowOutlet.viewContainer.clear();\n this.renderRows();\n }\n /**\n * Checks if there has been a change in sticky states since last check and applies the correct\n * sticky styles. Since checking resets the \"dirty\" state, this should only be performed once\n * during a change detection and after the inputs are settled (after content check).\n */\n _checkStickyStates() {\n const stickyCheckReducer = (acc, d) => {\n return acc || d.hasStickyChanged();\n };\n // Note that the check needs to occur for every definition since it notifies the definition\n // that it can reset its dirty state. Using another operator like `some` may short-circuit\n // remaining definitions and leave them in an unchecked state.\n if (this._headerRowDefs.reduce(stickyCheckReducer, false)) {\n this.updateStickyHeaderRowStyles();\n }\n if (this._footerRowDefs.reduce(stickyCheckReducer, false)) {\n this.updateStickyFooterRowStyles();\n }\n if (Array.from(this._columnDefsByName.values()).reduce(stickyCheckReducer, false)) {\n this._stickyColumnStylesNeedReset = true;\n this.updateStickyColumnStyles();\n }\n }\n /**\n * Creates the sticky styler that will be used for sticky rows and columns. Listens\n * for directionality changes and provides the latest direction to the styler. Re-applies column\n * stickiness when directionality changes.\n */\n _setupStickyStyler() {\n const direction = this._dir ? this._dir.value : 'ltr';\n this._stickyStyler = new StickyStyler(this._isNativeHtmlTable, this.stickyCssClass, direction, this._coalescedStyleScheduler, this._platform.isBrowser, this.needsPositionStickyOnElement, this._stickyPositioningListener);\n (this._dir ? this._dir.change : of())\n .pipe(takeUntil(this._onDestroy))\n .subscribe(value => {\n this._stickyStyler.direction = value;\n this.updateStickyColumnStyles();\n });\n }\n /** Filters definitions that belong to this table from a QueryList. */\n _getOwnDefs(items) {\n return items.filter(item => !item._table || item._table === this);\n }\n /** Creates or removes the no data row, depending on whether any data is being shown. */\n _updateNoDataRow() {\n const noDataRow = this._customNoDataRow || this._noDataRow;\n if (!noDataRow) {\n return;\n }\n const shouldShow = this._rowOutlet.viewContainer.length === 0;\n if (shouldShow === this._isShowingNoDataRow) {\n return;\n }\n const container = this._noDataRowOutlet.viewContainer;\n if (shouldShow) {\n const view = container.createEmbeddedView(noDataRow.templateRef);\n const rootNode = view.rootNodes[0];\n // Only add the attributes if we have a single root node since it's hard\n // to figure out which one to add it to when there are multiple.\n if (view.rootNodes.length === 1 && rootNode?.nodeType === this._document.ELEMENT_NODE) {\n rootNode.setAttribute('role', 'row');\n rootNode.classList.add(noDataRow._contentClassName);\n }\n }\n else {\n container.clear();\n }\n this._isShowingNoDataRow = shouldShow;\n }\n}\nCdkTable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkTable, deps: [{ token: i0.IterableDiffers }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: 'role', attribute: true }, { token: i1.Directionality, optional: true }, { token: DOCUMENT }, { token: i2.Platform }, { token: _VIEW_REPEATER_STRATEGY }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i3.ViewportRuler }, { token: STICKY_POSITIONING_LISTENER, optional: true, skipSelf: true }, { token: i0.NgZone, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nCdkTable.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkTable, selector: \"cdk-table, table[cdk-table]\", inputs: { trackBy: \"trackBy\", dataSource: \"dataSource\", multiTemplateDataRows: \"multiTemplateDataRows\", fixedLayout: \"fixedLayout\" }, outputs: { contentChanged: \"contentChanged\" }, host: { properties: { \"class.cdk-table-fixed-layout\": \"fixedLayout\" }, classAttribute: \"cdk-table\" }, providers: [\n { provide: CDK_TABLE, useExisting: CdkTable },\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n ], queries: [{ propertyName: \"_noDataRow\", first: true, predicate: CdkNoDataRow, descendants: true }, { propertyName: \"_contentColumnDefs\", predicate: CdkColumnDef, descendants: true }, { propertyName: \"_contentRowDefs\", predicate: CdkRowDef, descendants: true }, { propertyName: \"_contentHeaderRowDefs\", predicate: CdkHeaderRowDef, descendants: true }, { propertyName: \"_contentFooterRowDefs\", predicate: CdkFooterRowDef, descendants: true }], viewQueries: [{ propertyName: \"_rowOutlet\", first: true, predicate: DataRowOutlet, descendants: true, static: true }, { propertyName: \"_headerRowOutlet\", first: true, predicate: HeaderRowOutlet, descendants: true, static: true }, { propertyName: \"_footerRowOutlet\", first: true, predicate: FooterRowOutlet, descendants: true, static: true }, { propertyName: \"_noDataRowOutlet\", first: true, predicate: NoDataRowOutlet, descendants: true, static: true }], exportAs: [\"cdkTable\"], ngImport: i0, template: \"\\n \\n \\n \\n \\n \\n \\n\", isInline: true, styles: [\".cdk-table-fixed-layout{table-layout:fixed}\"], dependencies: [{ kind: \"directive\", type: DataRowOutlet, selector: \"[rowOutlet]\" }, { kind: \"directive\", type: HeaderRowOutlet, selector: \"[headerRowOutlet]\" }, { kind: \"directive\", type: FooterRowOutlet, selector: \"[footerRowOutlet]\" }, { kind: \"directive\", type: NoDataRowOutlet, selector: \"[noDataRowOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkTable, decorators: [{\n type: Component,\n args: [{ selector: 'cdk-table, table[cdk-table]', exportAs: 'cdkTable', template: CDK_TABLE_TEMPLATE, host: {\n 'class': 'cdk-table',\n '[class.cdk-table-fixed-layout]': 'fixedLayout',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, providers: [\n { provide: CDK_TABLE, useExisting: CdkTable },\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n ], styles: [\".cdk-table-fixed-layout{table-layout:fixed}\"] }]\n }], ctorParameters: function () { return [{ type: i0.IterableDiffers }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['role']\n }] }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i2.Platform }, { type: undefined, decorators: [{\n type: Inject,\n args: [_VIEW_REPEATER_STRATEGY]\n }] }, { type: _CoalescedStyleScheduler, decorators: [{\n type: Inject,\n args: [_COALESCED_STYLE_SCHEDULER]\n }] }, { type: i3.ViewportRuler }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }, {\n type: Inject,\n args: [STICKY_POSITIONING_LISTENER]\n }] }, { type: i0.NgZone, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { trackBy: [{\n type: Input\n }], dataSource: [{\n type: Input\n }], multiTemplateDataRows: [{\n type: Input\n }], fixedLayout: [{\n type: Input\n }], contentChanged: [{\n type: Output\n }], _rowOutlet: [{\n type: ViewChild,\n args: [DataRowOutlet, { static: true }]\n }], _headerRowOutlet: [{\n type: ViewChild,\n args: [HeaderRowOutlet, { static: true }]\n }], _footerRowOutlet: [{\n type: ViewChild,\n args: [FooterRowOutlet, { static: true }]\n }], _noDataRowOutlet: [{\n type: ViewChild,\n args: [NoDataRowOutlet, { static: true }]\n }], _contentColumnDefs: [{\n type: ContentChildren,\n args: [CdkColumnDef, { descendants: true }]\n }], _contentRowDefs: [{\n type: ContentChildren,\n args: [CdkRowDef, { descendants: true }]\n }], _contentHeaderRowDefs: [{\n type: ContentChildren,\n args: [CdkHeaderRowDef, {\n descendants: true,\n }]\n }], _contentFooterRowDefs: [{\n type: ContentChildren,\n args: [CdkFooterRowDef, {\n descendants: true,\n }]\n }], _noDataRow: [{\n type: ContentChild,\n args: [CdkNoDataRow]\n }] } });\n/** Utility function that gets a merged list of the entries in an array and values of a Set. */\nfunction mergeArrayAndSet(array, set) {\n return array.concat(Array.from(set));\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 * Column that simply shows text content for the header and row cells. Assumes that the table\n * is using the native table implementation (`
`).\n *\n * By default, the name of this column will be the header text and data property accessor.\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\n * input.\n */\nclass CdkTextColumn {\n constructor(\n // `CdkTextColumn` is always requiring a table, but we just assert it manually\n // for better error reporting.\n // tslint:disable-next-line: lightweight-tokens\n _table, _options) {\n this._table = _table;\n this._options = _options;\n /** Alignment of the cell values. */\n this.justify = 'start';\n this._options = _options || {};\n }\n /** Column name that should be used to reference this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._name = name;\n // With Ivy, inputs can be initialized before static query results are\n // available. In that case, we defer the synchronization until \"ngOnInit\" fires.\n this._syncColumnDefName();\n }\n ngOnInit() {\n this._syncColumnDefName();\n if (this.headerText === undefined) {\n this.headerText = this._createDefaultHeaderText();\n }\n if (!this.dataAccessor) {\n this.dataAccessor =\n this._options.defaultDataAccessor || ((data, name) => data[name]);\n }\n if (this._table) {\n // Provide the cell and headerCell directly to the table with the static `ViewChild` query,\n // since the columnDef will not pick up its content by the time the table finishes checking\n // its content and initializing the rows.\n this.columnDef.cell = this.cell;\n this.columnDef.headerCell = this.headerCell;\n this._table.addColumnDef(this.columnDef);\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getTableTextColumnMissingParentTableError();\n }\n }\n ngOnDestroy() {\n if (this._table) {\n this._table.removeColumnDef(this.columnDef);\n }\n }\n /**\n * Creates a default header text. Use the options' header text transformation function if one\n * has been provided. Otherwise simply capitalize the column name.\n */\n _createDefaultHeaderText() {\n const name = this.name;\n if (!name && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableTextColumnMissingNameError();\n }\n if (this._options && this._options.defaultHeaderTextTransform) {\n return this._options.defaultHeaderTextTransform(name);\n }\n return name[0].toUpperCase() + name.slice(1);\n }\n /** Synchronizes the column definition name with the text column name. */\n _syncColumnDefName() {\n if (this.columnDef) {\n this.columnDef.name = this.name;\n }\n }\n}\nCdkTextColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkTextColumn, deps: [{ token: CdkTable, optional: true }, { token: TEXT_COLUMN_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nCdkTextColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkTextColumn, selector: \"cdk-text-column\", inputs: { name: \"name\", headerText: \"headerText\", dataAccessor: \"dataAccessor\", justify: \"justify\" }, viewQueries: [{ propertyName: \"columnDef\", first: true, predicate: CdkColumnDef, descendants: true, static: true }, { propertyName: \"cell\", first: true, predicate: CdkCellDef, descendants: true, static: true }, { propertyName: \"headerCell\", first: true, predicate: CdkHeaderCellDef, descendants: true, static: true }], ngImport: i0, template: `\n \n \n \n \n `, isInline: true, dependencies: [{ kind: \"directive\", type: CdkCellDef, selector: \"[cdkCellDef]\" }, { kind: \"directive\", type: CdkHeaderCellDef, selector: \"[cdkHeaderCellDef]\" }, { kind: \"directive\", type: CdkColumnDef, selector: \"[cdkColumnDef]\", inputs: [\"sticky\", \"cdkColumnDef\", \"stickyEnd\"] }, { kind: \"directive\", type: CdkCell, selector: \"cdk-cell, td[cdk-cell]\" }, { kind: \"directive\", type: CdkHeaderCell, selector: \"cdk-header-cell, th[cdk-header-cell]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkTextColumn, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-text-column',\n template: `\n \n \n \n \n `,\n encapsulation: ViewEncapsulation.None,\n // Change detection is intentionally not set to OnPush. This component's template will be provided\n // to the table to be inserted into its view. This is problematic when change detection runs since\n // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n // mean's the template in the table's view will not have the updated value (and in fact will cause\n // an ExpressionChangedAfterItHasBeenCheckedError).\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n }]\n }], ctorParameters: function () { return [{ type: CdkTable, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TEXT_COLUMN_OPTIONS]\n }] }]; }, propDecorators: { name: [{\n type: Input\n }], headerText: [{\n type: Input\n }], dataAccessor: [{\n type: Input\n }], justify: [{\n type: Input\n }], columnDef: [{\n type: ViewChild,\n args: [CdkColumnDef, { static: true }]\n }], cell: [{\n type: ViewChild,\n args: [CdkCellDef, { static: true }]\n }], headerCell: [{\n type: ViewChild,\n args: [CdkHeaderCellDef, { static: true }]\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 EXPORTED_DECLARATIONS = [\n CdkTable,\n CdkRowDef,\n CdkCellDef,\n CdkCellOutlet,\n CdkHeaderCellDef,\n CdkFooterCellDef,\n CdkColumnDef,\n CdkCell,\n CdkRow,\n CdkHeaderCell,\n CdkFooterCell,\n CdkHeaderRow,\n CdkHeaderRowDef,\n CdkFooterRow,\n CdkFooterRowDef,\n DataRowOutlet,\n HeaderRowOutlet,\n FooterRowOutlet,\n CdkTextColumn,\n CdkNoDataRow,\n CdkRecycleRows,\n NoDataRowOutlet,\n];\nclass CdkTableModule {\n}\nCdkTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCdkTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkTableModule, declarations: [CdkTable,\n CdkRowDef,\n CdkCellDef,\n CdkCellOutlet,\n CdkHeaderCellDef,\n CdkFooterCellDef,\n CdkColumnDef,\n CdkCell,\n CdkRow,\n CdkHeaderCell,\n CdkFooterCell,\n CdkHeaderRow,\n CdkHeaderRowDef,\n CdkFooterRow,\n CdkFooterRowDef,\n DataRowOutlet,\n HeaderRowOutlet,\n FooterRowOutlet,\n CdkTextColumn,\n CdkNoDataRow,\n CdkRecycleRows,\n NoDataRowOutlet], imports: [ScrollingModule], exports: [CdkTable,\n CdkRowDef,\n CdkCellDef,\n CdkCellOutlet,\n CdkHeaderCellDef,\n CdkFooterCellDef,\n CdkColumnDef,\n CdkCell,\n CdkRow,\n CdkHeaderCell,\n CdkFooterCell,\n CdkHeaderRow,\n CdkHeaderRowDef,\n CdkFooterRow,\n CdkFooterRowDef,\n DataRowOutlet,\n HeaderRowOutlet,\n FooterRowOutlet,\n CdkTextColumn,\n CdkNoDataRow,\n CdkRecycleRows,\n NoDataRowOutlet] });\nCdkTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkTableModule, imports: [ScrollingModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkTableModule, decorators: [{\n type: NgModule,\n args: [{\n exports: EXPORTED_DECLARATIONS,\n declarations: EXPORTED_DECLARATIONS,\n imports: [ScrollingModule],\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/**\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BaseCdkCell, BaseRowDef, CDK_ROW_TEMPLATE, CDK_TABLE, CDK_TABLE_TEMPLATE, CdkCell, CdkCellDef, CdkCellOutlet, CdkColumnDef, CdkFooterCell, CdkFooterCellDef, CdkFooterRow, CdkFooterRowDef, CdkHeaderCell, CdkHeaderCellDef, CdkHeaderRow, CdkHeaderRowDef, CdkNoDataRow, CdkRecycleRows, CdkRow, CdkRowDef, CdkTable, CdkTableModule, CdkTextColumn, DataRowOutlet, FooterRowOutlet, HeaderRowOutlet, NoDataRowOutlet, STICKY_DIRECTIONS, STICKY_POSITIONING_LISTENER, StickyStyler, TEXT_COLUMN_OPTIONS, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, _Schedule, mixinHasStickyInput };\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty, coerceStringArray } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/platform';\nimport { _getEventTarget } from '@angular/cdk/platform';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, TemplateRef, Directive, Inject, ViewChild, Input, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, forwardRef, Optional, Host, NgModule } from '@angular/core';\nimport { mixinDisableRipple, MAT_OPTION_PARENT_COMPONENT, MAT_OPTGROUP, MatOption, MatOptionSelectionChange, _countGroupLabelsBeforeOption, _getOptionScrollPosition, MatOptionModule, MatCommonModule } from '@angular/material/core';\nimport { Subscription, Subject, defer, merge, of, fromEvent } from 'rxjs';\nimport * as i2 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i2$1 from '@angular/cdk/bidi';\nimport { hasModifierKey, ESCAPE, ENTER, UP_ARROW, DOWN_ARROW, TAB } from '@angular/cdk/keycodes';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as i4 from '@angular/material/form-field';\nimport { MAT_FORM_FIELD } from '@angular/material/form-field';\nimport { startWith, switchMap, take, filter, map, tap, delay } from 'rxjs/operators';\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 * Autocomplete IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueAutocompleteIdCounter = 0;\n/** Event object that is emitted when an autocomplete option is selected. */\nclass MatAutocompleteSelectedEvent {\n constructor(\n /** Reference to the autocomplete panel that emitted the event. */\n source, \n /** Option that was selected. */\n option) {\n this.source = source;\n this.option = option;\n }\n}\n// Boilerplate for applying mixins to MatAutocomplete.\n/** @docs-private */\nconst _MatAutocompleteMixinBase = mixinDisableRipple(class {\n});\n/** Injection token to be used to override the default options for `mat-autocomplete`. */\nconst MAT_AUTOCOMPLETE_DEFAULT_OPTIONS = new InjectionToken('mat-autocomplete-default-options', {\n providedIn: 'root',\n factory: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY,\n});\n/** @docs-private */\nfunction MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY() {\n return { autoActiveFirstOption: false, autoSelectActiveOption: false };\n}\n/** Base class with all of the `MatAutocomplete` functionality. */\nclass _MatAutocompleteBase extends _MatAutocompleteMixinBase {\n constructor(_changeDetectorRef, _elementRef, defaults, platform) {\n super();\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._activeOptionChanges = Subscription.EMPTY;\n /** Whether the autocomplete panel should be visible, depending on option length. */\n this.showPanel = false;\n this._isOpen = false;\n /** Function that maps an option's control value to its display value in the trigger. */\n this.displayWith = null;\n /** Event that is emitted whenever an option from the list is selected. */\n this.optionSelected = new EventEmitter();\n /** Event that is emitted when the autocomplete panel is opened. */\n this.opened = new EventEmitter();\n /** Event that is emitted when the autocomplete panel is closed. */\n this.closed = new EventEmitter();\n /** Emits whenever an option is activated. */\n this.optionActivated = new EventEmitter();\n this._classList = {};\n /** Unique ID to be used by autocomplete trigger's \"aria-owns\" property. */\n this.id = `mat-autocomplete-${_uniqueAutocompleteIdCounter++}`;\n // TODO(crisbeto): the problem that the `inertGroups` option resolves is only present on\n // Safari using VoiceOver. We should occasionally check back to see whether the bug\n // wasn't resolved in VoiceOver, and if it has, we can remove this and the `inertGroups`\n // option altogether.\n this.inertGroups = platform?.SAFARI || false;\n this._autoActiveFirstOption = !!defaults.autoActiveFirstOption;\n this._autoSelectActiveOption = !!defaults.autoSelectActiveOption;\n }\n /** Whether the autocomplete panel is open. */\n get isOpen() {\n return this._isOpen && this.showPanel;\n }\n /**\n * Whether the first option should be highlighted when the autocomplete panel is opened.\n * Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.\n */\n get autoActiveFirstOption() {\n return this._autoActiveFirstOption;\n }\n set autoActiveFirstOption(value) {\n this._autoActiveFirstOption = coerceBooleanProperty(value);\n }\n /** Whether the active option should be selected as the user is navigating. */\n get autoSelectActiveOption() {\n return this._autoSelectActiveOption;\n }\n set autoSelectActiveOption(value) {\n this._autoSelectActiveOption = coerceBooleanProperty(value);\n }\n /**\n * Takes classes set on the host mat-autocomplete element and applies them to the panel\n * inside the overlay container to allow for easy styling.\n */\n set classList(value) {\n if (value && value.length) {\n this._classList = coerceStringArray(value).reduce((classList, className) => {\n classList[className] = true;\n return classList;\n }, {});\n }\n else {\n this._classList = {};\n }\n this._setVisibilityClasses(this._classList);\n this._elementRef.nativeElement.className = '';\n }\n ngAfterContentInit() {\n this._keyManager = new ActiveDescendantKeyManager(this.options).withWrap();\n this._activeOptionChanges = this._keyManager.change.subscribe(index => {\n if (this.isOpen) {\n this.optionActivated.emit({ source: this, option: this.options.toArray()[index] || null });\n }\n });\n // Set the initial visibility state.\n this._setVisibility();\n }\n ngOnDestroy() {\n this._activeOptionChanges.unsubscribe();\n }\n /**\n * Sets the panel scrollTop. This allows us to manually scroll to display options\n * above or below the fold, as they are not actually being focused when active.\n */\n _setScrollTop(scrollTop) {\n if (this.panel) {\n this.panel.nativeElement.scrollTop = scrollTop;\n }\n }\n /** Returns the panel's scrollTop. */\n _getScrollTop() {\n return this.panel ? this.panel.nativeElement.scrollTop : 0;\n }\n /** Panel should hide itself when the option list is empty. */\n _setVisibility() {\n this.showPanel = !!this.options.length;\n this._setVisibilityClasses(this._classList);\n this._changeDetectorRef.markForCheck();\n }\n /** Emits the `select` event. */\n _emitSelectEvent(option) {\n const event = new MatAutocompleteSelectedEvent(this, option);\n this.optionSelected.emit(event);\n }\n /** Gets the aria-labelledby for the autocomplete panel. */\n _getPanelAriaLabelledby(labelId) {\n if (this.ariaLabel) {\n return null;\n }\n const labelExpression = labelId ? labelId + ' ' : '';\n return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n }\n /** Sets the autocomplete visibility classes on a classlist based on the panel is visible. */\n _setVisibilityClasses(classList) {\n classList[this._visibleClass] = this.showPanel;\n classList[this._hiddenClass] = !this.showPanel;\n }\n}\n_MatAutocompleteBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteBase, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS }, { token: i1.Platform }], target: i0.ɵɵFactoryTarget.Directive });\n_MatAutocompleteBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatAutocompleteBase, inputs: { ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], displayWith: \"displayWith\", autoActiveFirstOption: \"autoActiveFirstOption\", autoSelectActiveOption: \"autoSelectActiveOption\", panelWidth: \"panelWidth\", classList: [\"class\", \"classList\"] }, outputs: { optionSelected: \"optionSelected\", opened: \"opened\", closed: \"closed\", optionActivated: \"optionActivated\" }, viewQueries: [{ propertyName: \"template\", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: \"panel\", first: true, predicate: [\"panel\"], descendants: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS]\n }] }, { type: i1.Platform }]; }, propDecorators: { template: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }], panel: [{\n type: ViewChild,\n args: ['panel']\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], displayWith: [{\n type: Input\n }], autoActiveFirstOption: [{\n type: Input\n }], autoSelectActiveOption: [{\n type: Input\n }], panelWidth: [{\n type: Input\n }], optionSelected: [{\n type: Output\n }], opened: [{\n type: Output\n }], closed: [{\n type: Output\n }], optionActivated: [{\n type: Output\n }], classList: [{\n type: Input,\n args: ['class']\n }] } });\nclass MatAutocomplete extends _MatAutocompleteBase {\n constructor() {\n super(...arguments);\n this._visibleClass = 'mat-autocomplete-visible';\n this._hiddenClass = 'mat-autocomplete-hidden';\n }\n}\nMatAutocomplete.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocomplete, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatAutocomplete.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatAutocomplete, selector: \"mat-autocomplete\", inputs: { disableRipple: \"disableRipple\" }, host: { classAttribute: \"mat-autocomplete\" }, providers: [{ provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete }], queries: [{ propertyName: \"optionGroups\", predicate: MAT_OPTGROUP, descendants: true }, { propertyName: \"options\", predicate: MatOption, descendants: true }], exportAs: [\"matAutocomplete\"], usesInheritance: true, ngImport: i0, template: \"\\n
\\n \\n
\\n
\\n\", styles: [\".mat-autocomplete-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}.mat-autocomplete-panel-above .mat-autocomplete-panel{border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.mat-autocomplete-panel .mat-divider-horizontal{margin-top:-1px}.cdk-high-contrast-active .mat-autocomplete-panel{outline:solid 1px}mat-autocomplete{display:none}\"], dependencies: [{ kind: \"directive\", type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocomplete, decorators: [{\n type: Component,\n args: [{ selector: 'mat-autocomplete', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'matAutocomplete', inputs: ['disableRipple'], host: {\n 'class': 'mat-autocomplete',\n }, providers: [{ provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete }], template: \"\\n
\\n \\n
\\n
\\n\", styles: [\".mat-autocomplete-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}.mat-autocomplete-panel-above .mat-autocomplete-panel{border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.mat-autocomplete-panel .mat-divider-horizontal{margin-top:-1px}.cdk-high-contrast-active .mat-autocomplete-panel{outline:solid 1px}mat-autocomplete{display:none}\"] }]\n }], propDecorators: { optionGroups: [{\n type: ContentChildren,\n args: [MAT_OPTGROUP, { descendants: true }]\n }], options: [{\n type: ContentChildren,\n args: [MatOption, { descendants: true }]\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/** Base class containing all of the functionality for `MatAutocompleteOrigin`. */\nclass _MatAutocompleteOriginBase {\n constructor(\n /** Reference to the element on which the directive is applied. */\n elementRef) {\n this.elementRef = elementRef;\n }\n}\n_MatAutocompleteOriginBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteOriginBase, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\n_MatAutocompleteOriginBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatAutocompleteOriginBase, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteOriginBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n/**\n * Directive applied to an element to make it usable\n * as a connection point for an autocomplete panel.\n */\nclass MatAutocompleteOrigin extends _MatAutocompleteOriginBase {\n}\nMatAutocompleteOrigin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteOrigin, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatAutocompleteOrigin.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatAutocompleteOrigin, selector: \"[matAutocompleteOrigin]\", exportAs: [\"matAutocompleteOrigin\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteOrigin, decorators: [{\n type: Directive,\n args: [{\n selector: '[matAutocompleteOrigin]',\n exportAs: 'matAutocompleteOrigin',\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/** Injection token that determines the scroll handling while the autocomplete panel is open. */\nconst MAT_AUTOCOMPLETE_SCROLL_STRATEGY = new InjectionToken('mat-autocomplete-scroll-strategy');\n/** @docs-private */\nfunction MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY,\n};\n/**\n * Provider that allows the autocomplete to register as a ControlValueAccessor.\n * @docs-private\n */\nconst MAT_AUTOCOMPLETE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatAutocompleteTrigger),\n multi: true,\n};\n/**\n * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.\n * @docs-private\n */\nfunction getMatAutocompleteMissingPanelError() {\n return Error('Attempting to open an undefined instance of `mat-autocomplete`. ' +\n 'Make sure that the id passed to the `matAutocomplete` is correct and that ' +\n \"you're attempting to open it after the ngAfterContentInit hook.\");\n}\n/** Base class with all of the `MatAutocompleteTrigger` functionality. */\nclass _MatAutocompleteTriggerBase {\n constructor(_element, _overlay, _viewContainerRef, _zone, _changeDetectorRef, scrollStrategy, _dir, _formField, _document, _viewportRuler, _defaults) {\n this._element = _element;\n this._overlay = _overlay;\n this._viewContainerRef = _viewContainerRef;\n this._zone = _zone;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._formField = _formField;\n this._document = _document;\n this._viewportRuler = _viewportRuler;\n this._defaults = _defaults;\n this._componentDestroyed = false;\n this._autocompleteDisabled = false;\n /** Whether or not the label state is being overridden. */\n this._manuallyFloatingLabel = false;\n /** Subscription to viewport size changes. */\n this._viewportSubscription = Subscription.EMPTY;\n /**\n * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,\n * closed autocomplete from being reopened if the user switches to another browser tab and then\n * comes back.\n */\n this._canOpenOnNextFocus = true;\n /** Stream of keyboard events that can close the panel. */\n this._closeKeyEventStream = new Subject();\n /**\n * Event handler for when the window is blurred. Needs to be an\n * arrow function in order to preserve the context.\n */\n this._windowBlurHandler = () => {\n // If the user blurred the window while the autocomplete is focused, it means that it'll be\n // refocused when they come back. In this case we want to skip the first focus event, if the\n // pane was closed, in order to avoid reopening it unintentionally.\n this._canOpenOnNextFocus =\n this._document.activeElement !== this._element.nativeElement || this.panelOpen;\n };\n /** `View -> model callback called when value changes` */\n this._onChange = () => { };\n /** `View -> model callback called when autocomplete has been touched` */\n this._onTouched = () => { };\n /**\n * Position of the autocomplete panel relative to the trigger element. A position of `auto`\n * will render the panel underneath the trigger if there is enough space for it to fit in\n * the viewport, otherwise the panel will be shown above it. If the position is set to\n * `above` or `below`, the panel will always be shown above or below the trigger. no matter\n * whether it fits completely in the viewport.\n */\n this.position = 'auto';\n /**\n * `autocomplete` attribute to be set on the input element.\n * @docs-private\n */\n this.autocompleteAttribute = 'off';\n this._overlayAttached = false;\n /** Stream of changes to the selection state of the autocomplete options. */\n this.optionSelections = defer(() => {\n const options = this.autocomplete ? this.autocomplete.options : null;\n if (options) {\n return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))));\n }\n // If there are any subscribers before `ngAfterViewInit`, the `autocomplete` will be undefined.\n // Return a stream that we'll replace with the real one once everything is in place.\n return this._zone.onStable.pipe(take(1), switchMap(() => this.optionSelections));\n });\n this._scrollStrategy = scrollStrategy;\n }\n /**\n * Whether the autocomplete is disabled. When disabled, the element will\n * act as a regular input and the user won't be able to open the panel.\n */\n get autocompleteDisabled() {\n return this._autocompleteDisabled;\n }\n set autocompleteDisabled(value) {\n this._autocompleteDisabled = coerceBooleanProperty(value);\n }\n ngAfterViewInit() {\n const window = this._getWindow();\n if (typeof window !== 'undefined') {\n this._zone.runOutsideAngular(() => window.addEventListener('blur', this._windowBlurHandler));\n }\n }\n ngOnChanges(changes) {\n if (changes['position'] && this._positionStrategy) {\n this._setStrategyPositions(this._positionStrategy);\n if (this.panelOpen) {\n this._overlayRef.updatePosition();\n }\n }\n }\n ngOnDestroy() {\n const window = this._getWindow();\n if (typeof window !== 'undefined') {\n window.removeEventListener('blur', this._windowBlurHandler);\n }\n this._viewportSubscription.unsubscribe();\n this._componentDestroyed = true;\n this._destroyPanel();\n this._closeKeyEventStream.complete();\n }\n /** Whether or not the autocomplete panel is open. */\n get panelOpen() {\n return this._overlayAttached && this.autocomplete.showPanel;\n }\n /** Opens the autocomplete suggestion panel. */\n openPanel() {\n this._attachOverlay();\n this._floatLabel();\n }\n /** Closes the autocomplete suggestion panel. */\n closePanel() {\n this._resetLabel();\n if (!this._overlayAttached) {\n return;\n }\n if (this.panelOpen) {\n // Only emit if the panel was visible.\n // The `NgZone.onStable` always emits outside of the Angular zone,\n // so all the subscriptions from `_subscribeToClosingActions()` are also outside of the Angular zone.\n // We should manually run in Angular zone to update UI after panel closing.\n this._zone.run(() => {\n this.autocomplete.closed.emit();\n });\n }\n this.autocomplete._isOpen = this._overlayAttached = false;\n this._pendingAutoselectedOption = null;\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n this._closingActionsSubscription.unsubscribe();\n }\n // Note that in some cases this can end up being called after the component is destroyed.\n // Add a check to ensure that we don't try to run change detection on a destroyed view.\n if (!this._componentDestroyed) {\n // We need to trigger change detection manually, because\n // `fromEvent` doesn't seem to do it at the proper time.\n // This ensures that the label is reset when the\n // user clicks outside.\n this._changeDetectorRef.detectChanges();\n }\n }\n /**\n * Updates the position of the autocomplete suggestion panel to ensure that it fits all options\n * within the viewport.\n */\n updatePosition() {\n if (this._overlayAttached) {\n this._overlayRef.updatePosition();\n }\n }\n /**\n * A stream of actions that should close the autocomplete panel, including\n * when an option is selected, on blur, and when TAB is pressed.\n */\n get panelClosingActions() {\n return merge(this.optionSelections, this.autocomplete._keyManager.tabOut.pipe(filter(() => this._overlayAttached)), this._closeKeyEventStream, this._getOutsideClickStream(), this._overlayRef\n ? this._overlayRef.detachments().pipe(filter(() => this._overlayAttached))\n : of()).pipe(\n // Normalize the output so we return a consistent type.\n map(event => (event instanceof MatOptionSelectionChange ? event : null)));\n }\n /** The currently active option, coerced to MatOption type. */\n get activeOption() {\n if (this.autocomplete && this.autocomplete._keyManager) {\n return this.autocomplete._keyManager.activeItem;\n }\n return null;\n }\n /** Stream of clicks outside of the autocomplete panel. */\n _getOutsideClickStream() {\n return merge(fromEvent(this._document, 'click'), fromEvent(this._document, 'auxclick'), fromEvent(this._document, 'touchend')).pipe(filter(event => {\n // If we're in the Shadow DOM, the event target will be the shadow root, so we have to\n // fall back to check the first element in the path of the click event.\n const clickTarget = _getEventTarget(event);\n const formField = this._formField ? this._formField._elementRef.nativeElement : null;\n const customOrigin = this.connectedTo ? this.connectedTo.elementRef.nativeElement : null;\n return (this._overlayAttached &&\n clickTarget !== this._element.nativeElement &&\n // Normally focus moves inside `mousedown` so this condition will almost always be\n // true. Its main purpose is to handle the case where the input is focused from an\n // outside click which propagates up to the `body` listener within the same sequence\n // and causes the panel to close immediately (see #3106).\n this._document.activeElement !== this._element.nativeElement &&\n (!formField || !formField.contains(clickTarget)) &&\n (!customOrigin || !customOrigin.contains(clickTarget)) &&\n !!this._overlayRef &&\n !this._overlayRef.overlayElement.contains(clickTarget));\n }));\n }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n Promise.resolve(null).then(() => this._assignOptionValue(value));\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._onChange = 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._element.nativeElement.disabled = isDisabled;\n }\n _handleKeydown(event) {\n const keyCode = event.keyCode;\n const hasModifier = hasModifierKey(event);\n // Prevent the default action on all escape key presses. This is here primarily to bring IE\n // in line with other browsers. By default, pressing escape on IE will cause it to revert\n // the input value to the one that it had on focus, however it won't dispatch any events\n // which means that the model value will be out of sync with the view.\n if (keyCode === ESCAPE && !hasModifier) {\n event.preventDefault();\n }\n if (this.activeOption && keyCode === ENTER && this.panelOpen && !hasModifier) {\n this.activeOption._selectViaInteraction();\n this._resetActiveItem();\n event.preventDefault();\n }\n else if (this.autocomplete) {\n const prevActiveItem = this.autocomplete._keyManager.activeItem;\n const isArrowKey = keyCode === UP_ARROW || keyCode === DOWN_ARROW;\n if (keyCode === TAB || (isArrowKey && !hasModifier && this.panelOpen)) {\n this.autocomplete._keyManager.onKeydown(event);\n }\n else if (isArrowKey && this._canOpen()) {\n this.openPanel();\n }\n if (isArrowKey || this.autocomplete._keyManager.activeItem !== prevActiveItem) {\n this._scrollToOption(this.autocomplete._keyManager.activeItemIndex || 0);\n if (this.autocomplete.autoSelectActiveOption && this.activeOption) {\n if (!this._pendingAutoselectedOption) {\n this._valueBeforeAutoSelection = this._element.nativeElement.value;\n }\n this._pendingAutoselectedOption = this.activeOption;\n this._assignOptionValue(this.activeOption.value);\n }\n }\n }\n }\n _handleInput(event) {\n let target = event.target;\n let value = target.value;\n // Based on `NumberValueAccessor` from forms.\n if (target.type === 'number') {\n value = value == '' ? null : parseFloat(value);\n }\n // If the input has a placeholder, IE will fire the `input` event on page load,\n // focus and blur, in addition to when the user actually changed the value. To\n // filter out all of the extra events, we save the value on focus and between\n // `input` events, and we check whether it changed.\n // See: https://connect.microsoft.com/IE/feedback/details/885747/\n if (this._previousValue !== value) {\n this._previousValue = value;\n this._pendingAutoselectedOption = null;\n this._onChange(value);\n if (this._canOpen() && this._document.activeElement === event.target) {\n this.openPanel();\n }\n }\n }\n _handleFocus() {\n if (!this._canOpenOnNextFocus) {\n this._canOpenOnNextFocus = true;\n }\n else if (this._canOpen()) {\n this._previousValue = this._element.nativeElement.value;\n this._attachOverlay();\n this._floatLabel(true);\n }\n }\n _handleClick() {\n if (this._canOpen() && !this.panelOpen) {\n this.openPanel();\n }\n }\n /**\n * In \"auto\" mode, the label will animate down as soon as focus is lost.\n * This causes the value to jump when selecting an option with the mouse.\n * This method manually floats the label until the panel can be closed.\n * @param shouldAnimate Whether the label should be animated when it is floated.\n */\n _floatLabel(shouldAnimate = false) {\n if (this._formField && this._formField.floatLabel === 'auto') {\n if (shouldAnimate) {\n this._formField._animateAndLockLabel();\n }\n else {\n this._formField.floatLabel = 'always';\n }\n this._manuallyFloatingLabel = true;\n }\n }\n /** If the label has been manually elevated, return it to its normal state. */\n _resetLabel() {\n if (this._manuallyFloatingLabel) {\n this._formField.floatLabel = 'auto';\n this._manuallyFloatingLabel = false;\n }\n }\n /**\n * This method listens to a stream of panel closing actions and resets the\n * stream every time the option list changes.\n */\n _subscribeToClosingActions() {\n const firstStable = this._zone.onStable.pipe(take(1));\n const optionChanges = this.autocomplete.options.changes.pipe(tap(() => this._positionStrategy.reapplyLastPosition()), \n // Defer emitting to the stream until the next tick, because changing\n // bindings in here will cause \"changed after checked\" errors.\n delay(0));\n // When the zone is stable initially, and when the option list changes...\n return (merge(firstStable, optionChanges)\n .pipe(\n // create a new stream of panelClosingActions, replacing any previous streams\n // that were created, and flatten it so our stream only emits closing events...\n switchMap(() => {\n // The `NgZone.onStable` always emits outside of the Angular zone, thus we have to re-enter\n // the Angular zone. This will lead to change detection being called outside of the Angular\n // zone and the `autocomplete.opened` will also emit outside of the Angular.\n this._zone.run(() => {\n const wasOpen = this.panelOpen;\n this._resetActiveItem();\n this.autocomplete._setVisibility();\n this._changeDetectorRef.detectChanges();\n if (this.panelOpen) {\n this._overlayRef.updatePosition();\n }\n if (wasOpen !== this.panelOpen) {\n // If the `panelOpen` state changed, we need to make sure to emit the `opened` or\n // `closed` event, because we may not have emitted it. This can happen\n // - if the users opens the panel and there are no options, but the\n // options come in slightly later or as a result of the value changing,\n // - if the panel is closed after the user entered a string that did not match any\n // of the available options,\n // - if a valid string is entered after an invalid one.\n if (this.panelOpen) {\n this.autocomplete.opened.emit();\n }\n else {\n this.autocomplete.closed.emit();\n }\n }\n });\n return this.panelClosingActions;\n }), \n // when the first closing event occurs...\n take(1))\n // set the value, close the panel, and complete.\n .subscribe(event => this._setValueAndClose(event)));\n }\n /** Destroys the autocomplete suggestion panel. */\n _destroyPanel() {\n if (this._overlayRef) {\n this.closePanel();\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n _assignOptionValue(value) {\n const toDisplay = this.autocomplete && this.autocomplete.displayWith\n ? this.autocomplete.displayWith(value)\n : value;\n // Simply falling back to an empty string if the display value is falsy does not work properly.\n // The display value can also be the number zero and shouldn't fall back to an empty string.\n this._updateNativeInputValue(toDisplay != null ? toDisplay : '');\n }\n _updateNativeInputValue(value) {\n // If it's used within a `MatFormField`, we should set it through the property so it can go\n // through change detection.\n if (this._formField) {\n this._formField._control.value = value;\n }\n else {\n this._element.nativeElement.value = value;\n }\n this._previousValue = value;\n }\n /**\n * This method closes the panel, and if a value is specified, also sets the associated\n * control to that value. It will also mark the control as dirty if this interaction\n * stemmed from the user.\n */\n _setValueAndClose(event) {\n const toSelect = event ? event.source : this._pendingAutoselectedOption;\n if (toSelect) {\n this._clearPreviousSelectedOption(toSelect);\n this._assignOptionValue(toSelect.value);\n this._onChange(toSelect.value);\n this.autocomplete._emitSelectEvent(toSelect);\n this._element.nativeElement.focus();\n }\n this.closePanel();\n }\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n _clearPreviousSelectedOption(skip) {\n this.autocomplete.options.forEach(option => {\n if (option !== skip && option.selected) {\n option.deselect();\n }\n });\n }\n _attachOverlay() {\n if (!this.autocomplete && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatAutocompleteMissingPanelError();\n }\n let overlayRef = this._overlayRef;\n if (!overlayRef) {\n this._portal = new TemplatePortal(this.autocomplete.template, this._viewContainerRef, {\n id: this._formField?.getLabelId(),\n });\n overlayRef = this._overlay.create(this._getOverlayConfig());\n this._overlayRef = overlayRef;\n this._handleOverlayEvents(overlayRef);\n this._viewportSubscription = this._viewportRuler.change().subscribe(() => {\n if (this.panelOpen && overlayRef) {\n overlayRef.updateSize({ width: this._getPanelWidth() });\n }\n });\n }\n else {\n // Update the trigger, panel width and direction, in case anything has changed.\n this._positionStrategy.setOrigin(this._getConnectedElement());\n overlayRef.updateSize({ width: this._getPanelWidth() });\n }\n if (overlayRef && !overlayRef.hasAttached()) {\n overlayRef.attach(this._portal);\n this._closingActionsSubscription = this._subscribeToClosingActions();\n }\n const wasOpen = this.panelOpen;\n this.autocomplete._setVisibility();\n this.autocomplete._isOpen = this._overlayAttached = true;\n // We need to do an extra `panelOpen` check in here, because the\n // autocomplete won't be shown if there are no options.\n if (this.panelOpen && wasOpen !== this.panelOpen) {\n this.autocomplete.opened.emit();\n }\n }\n _getOverlayConfig() {\n return new OverlayConfig({\n positionStrategy: this._getOverlayPosition(),\n scrollStrategy: this._scrollStrategy(),\n width: this._getPanelWidth(),\n direction: this._dir,\n panelClass: this._defaults?.overlayPanelClass,\n });\n }\n _getOverlayPosition() {\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this._getConnectedElement())\n .withFlexibleDimensions(false)\n .withPush(false);\n this._setStrategyPositions(strategy);\n this._positionStrategy = strategy;\n return strategy;\n }\n /** Sets the positions on a position strategy based on the directive's input state. */\n _setStrategyPositions(positionStrategy) {\n // Note that we provide horizontal fallback positions, even though by default the dropdown\n // width matches the input, because consumers can override the width. See #18854.\n const belowPositions = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\n ];\n // The overlay edge connected to the trigger should have squared corners, while\n // the opposite end has rounded corners. We apply a CSS class to swap the\n // border-radius based on the overlay position.\n const panelClass = this._aboveClass;\n const abovePositions = [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', panelClass },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', panelClass },\n ];\n let positions;\n if (this.position === 'above') {\n positions = abovePositions;\n }\n else if (this.position === 'below') {\n positions = belowPositions;\n }\n else {\n positions = [...belowPositions, ...abovePositions];\n }\n positionStrategy.withPositions(positions);\n }\n _getConnectedElement() {\n if (this.connectedTo) {\n return this.connectedTo.elementRef;\n }\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._element;\n }\n _getPanelWidth() {\n return this.autocomplete.panelWidth || this._getHostWidth();\n }\n /** Returns the width of the input element, so the panel width can match it. */\n _getHostWidth() {\n return this._getConnectedElement().nativeElement.getBoundingClientRect().width;\n }\n /**\n * Resets the active item to -1 so arrow events will activate the\n * correct options, or to 0 if the consumer opted into it.\n */\n _resetActiveItem() {\n const autocomplete = this.autocomplete;\n if (autocomplete.autoActiveFirstOption) {\n // Note that we go through `setFirstItemActive`, rather than `setActiveItem(0)`, because\n // the former will find the next enabled option, if the first one is disabled.\n autocomplete._keyManager.setFirstItemActive();\n }\n else {\n autocomplete._keyManager.setActiveItem(-1);\n }\n }\n /** Determines whether the panel can be opened. */\n _canOpen() {\n const element = this._element.nativeElement;\n return !element.readOnly && !element.disabled && !this._autocompleteDisabled;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n return this._document?.defaultView || window;\n }\n /** Scrolls to a particular option in the list. */\n _scrollToOption(index) {\n // Given that we are not actually focusing active options, we must manually adjust scroll\n // to reveal options below the fold. First, we find the offset of the option from the top\n // of the panel. If that offset is below the fold, the new scrollTop will be the offset -\n // the panel height + the option height, so the active option will be just visible at the\n // bottom of the panel. If that offset is above the top of the visible panel, the new scrollTop\n // will become the offset. If that offset is visible within the panel already, the scrollTop is\n // not adjusted.\n const autocomplete = this.autocomplete;\n const labelCount = _countGroupLabelsBeforeOption(index, autocomplete.options, autocomplete.optionGroups);\n if (index === 0 && labelCount === 1) {\n // If we've got one group label before the option and we're at the top option,\n // scroll the list to the top. This is better UX than scrolling the list to the\n // top of the option, because it allows the user to read the top group's label.\n autocomplete._setScrollTop(0);\n }\n else if (autocomplete.panel) {\n const option = autocomplete.options.toArray()[index];\n if (option) {\n const element = option._getHostElement();\n const newScrollPosition = _getOptionScrollPosition(element.offsetTop, element.offsetHeight, autocomplete._getScrollTop(), autocomplete.panel.nativeElement.offsetHeight);\n autocomplete._setScrollTop(newScrollPosition);\n }\n }\n }\n /** Handles keyboard events coming from the overlay panel. */\n _handleOverlayEvents(overlayRef) {\n // Use the `keydownEvents` in order to take advantage of\n // the overlay event targeting provided by the CDK overlay.\n overlayRef.keydownEvents().subscribe(event => {\n // Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.\n // See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction\n if ((event.keyCode === ESCAPE && !hasModifierKey(event)) ||\n (event.keyCode === UP_ARROW && hasModifierKey(event, 'altKey'))) {\n // If the user had typed something in before we autoselected an option, and they decided\n // to cancel the selection, restore the input value to the one they had typed in.\n if (this._pendingAutoselectedOption) {\n this._updateNativeInputValue(this._valueBeforeAutoSelection ?? '');\n this._pendingAutoselectedOption = null;\n }\n this._closeKeyEventStream.next();\n this._resetActiveItem();\n // We need to stop propagation, otherwise the event will eventually\n // reach the input itself and cause the overlay to be reopened.\n event.stopPropagation();\n event.preventDefault();\n }\n });\n // Subscribe to the pointer events stream so that it doesn't get picked up by other overlays.\n // TODO(crisbeto): we should switch `_getOutsideClickStream` eventually to use this stream,\n // but the behvior isn't exactly the same and it ends up breaking some internal tests.\n overlayRef.outsidePointerEvents().subscribe();\n }\n}\n_MatAutocompleteTriggerBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteTriggerBase, deps: [{ token: i0.ElementRef }, { token: i1$1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: MAT_AUTOCOMPLETE_SCROLL_STRATEGY }, { token: i2$1.Directionality, optional: true }, { token: MAT_FORM_FIELD, host: true, optional: true }, { token: DOCUMENT, optional: true }, { token: i3.ViewportRuler }, { token: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatAutocompleteTriggerBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatAutocompleteTriggerBase, inputs: { autocomplete: [\"matAutocomplete\", \"autocomplete\"], position: [\"matAutocompletePosition\", \"position\"], connectedTo: [\"matAutocompleteConnectedTo\", \"connectedTo\"], autocompleteAttribute: [\"autocomplete\", \"autocompleteAttribute\"], autocompleteDisabled: [\"matAutocompleteDisabled\", \"autocompleteDisabled\"] }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteTriggerBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY]\n }] }, { type: i2$1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i4.MatFormField, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD]\n }, {\n type: Host\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i3.ViewportRuler }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS]\n }] }]; }, propDecorators: { autocomplete: [{\n type: Input,\n args: ['matAutocomplete']\n }], position: [{\n type: Input,\n args: ['matAutocompletePosition']\n }], connectedTo: [{\n type: Input,\n args: ['matAutocompleteConnectedTo']\n }], autocompleteAttribute: [{\n type: Input,\n args: ['autocomplete']\n }], autocompleteDisabled: [{\n type: Input,\n args: ['matAutocompleteDisabled']\n }] } });\nclass MatAutocompleteTrigger extends _MatAutocompleteTriggerBase {\n constructor() {\n super(...arguments);\n this._aboveClass = 'mat-autocomplete-panel-above';\n }\n}\nMatAutocompleteTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteTrigger, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatAutocompleteTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatAutocompleteTrigger, selector: \"input[matAutocomplete], textarea[matAutocomplete]\", host: { listeners: { \"focusin\": \"_handleFocus()\", \"blur\": \"_onTouched()\", \"input\": \"_handleInput($event)\", \"keydown\": \"_handleKeydown($event)\", \"click\": \"_handleClick()\" }, properties: { \"attr.autocomplete\": \"autocompleteAttribute\", \"attr.role\": \"autocompleteDisabled ? null : \\\"combobox\\\"\", \"attr.aria-autocomplete\": \"autocompleteDisabled ? null : \\\"list\\\"\", \"attr.aria-activedescendant\": \"(panelOpen && activeOption) ? activeOption.id : null\", \"attr.aria-expanded\": \"autocompleteDisabled ? null : panelOpen.toString()\", \"attr.aria-owns\": \"(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id\", \"attr.aria-haspopup\": \"autocompleteDisabled ? null : \\\"listbox\\\"\" }, classAttribute: \"mat-autocomplete-trigger\" }, providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR], exportAs: [\"matAutocompleteTrigger\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteTrigger, decorators: [{\n type: Directive,\n args: [{\n selector: `input[matAutocomplete], textarea[matAutocomplete]`,\n host: {\n 'class': 'mat-autocomplete-trigger',\n '[attr.autocomplete]': 'autocompleteAttribute',\n '[attr.role]': 'autocompleteDisabled ? null : \"combobox\"',\n '[attr.aria-autocomplete]': 'autocompleteDisabled ? null : \"list\"',\n '[attr.aria-activedescendant]': '(panelOpen && activeOption) ? activeOption.id : null',\n '[attr.aria-expanded]': 'autocompleteDisabled ? null : panelOpen.toString()',\n '[attr.aria-owns]': '(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id',\n '[attr.aria-haspopup]': 'autocompleteDisabled ? null : \"listbox\"',\n // Note: we use `focusin`, as opposed to `focus`, in order to open the panel\n // a little earlier. This avoids issues where IE delays the focusing of the input.\n '(focusin)': '_handleFocus()',\n '(blur)': '_onTouched()',\n '(input)': '_handleInput($event)',\n '(keydown)': '_handleKeydown($event)',\n '(click)': '_handleClick()',\n },\n exportAs: 'matAutocompleteTrigger',\n providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR],\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 */\nclass MatAutocompleteModule {\n}\nMatAutocompleteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatAutocompleteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteModule, declarations: [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin], imports: [OverlayModule, MatOptionModule, MatCommonModule, CommonModule], exports: [MatAutocomplete,\n MatAutocompleteTrigger,\n MatAutocompleteOrigin,\n CdkScrollableModule,\n MatOptionModule,\n MatCommonModule] });\nMatAutocompleteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteModule, providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [OverlayModule, MatOptionModule, MatCommonModule, CommonModule, CdkScrollableModule,\n MatOptionModule,\n MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [OverlayModule, MatOptionModule, MatCommonModule, CommonModule],\n exports: [\n MatAutocomplete,\n MatAutocompleteTrigger,\n MatAutocompleteOrigin,\n CdkScrollableModule,\n MatOptionModule,\n MatCommonModule,\n ],\n declarations: [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin],\n providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER],\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/**\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_AUTOCOMPLETE_VALUE_ACCESSOR, MatAutocomplete, MatAutocompleteModule, MatAutocompleteOrigin, MatAutocompleteSelectedEvent, MatAutocompleteTrigger, _MatAutocompleteBase, _MatAutocompleteOriginBase, _MatAutocompleteTriggerBase, getMatAutocompleteMissingPanelError };\n","import * as i0 from '@angular/core';\nimport { Directive, Input, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, NgModule } from '@angular/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { MatCommonModule } from '@angular/material/core';\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 * Content of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardContent {\n}\nMatCardContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardContent, selector: \"mat-card-content, [mat-card-content], [matCardContent]\", host: { classAttribute: \"mat-card-content\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardContent, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-card-content, [mat-card-content], [matCardContent]',\n host: { 'class': 'mat-card-content' },\n }]\n }] });\n/**\n * Title of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardTitle {\n}\nMatCardTitle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardTitle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardTitle, selector: \"mat-card-title, [mat-card-title], [matCardTitle]\", host: { classAttribute: \"mat-card-title\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardTitle, decorators: [{\n type: Directive,\n args: [{\n selector: `mat-card-title, [mat-card-title], [matCardTitle]`,\n host: {\n 'class': 'mat-card-title',\n },\n }]\n }] });\n/**\n * Sub-title of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardSubtitle {\n}\nMatCardSubtitle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardSubtitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardSubtitle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardSubtitle, selector: \"mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]\", host: { classAttribute: \"mat-card-subtitle\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardSubtitle, decorators: [{\n type: Directive,\n args: [{\n selector: `mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]`,\n host: {\n 'class': 'mat-card-subtitle',\n },\n }]\n }] });\n/**\n * Action section of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardActions {\n constructor() {\n /** Position of the actions inside the card. */\n this.align = 'start';\n }\n}\nMatCardActions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardActions, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardActions.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardActions, selector: \"mat-card-actions\", inputs: { align: \"align\" }, host: { properties: { \"class.mat-card-actions-align-end\": \"align === \\\"end\\\"\" }, classAttribute: \"mat-card-actions\" }, exportAs: [\"matCardActions\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardActions, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-card-actions',\n exportAs: 'matCardActions',\n host: {\n 'class': 'mat-card-actions',\n '[class.mat-card-actions-align-end]': 'align === \"end\"',\n },\n }]\n }], propDecorators: { align: [{\n type: Input\n }] } });\n/**\n * Footer of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardFooter {\n}\nMatCardFooter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardFooter.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardFooter, selector: \"mat-card-footer\", host: { classAttribute: \"mat-card-footer\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardFooter, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-card-footer',\n host: { 'class': 'mat-card-footer' },\n }]\n }] });\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardImage {\n}\nMatCardImage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardImage.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardImage, selector: \"[mat-card-image], [matCardImage]\", host: { classAttribute: \"mat-card-image\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardImage, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-image], [matCardImage]',\n host: { 'class': 'mat-card-image' },\n }]\n }] });\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardSmImage {\n}\nMatCardSmImage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardSmImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardSmImage.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardSmImage, selector: \"[mat-card-sm-image], [matCardImageSmall]\", host: { classAttribute: \"mat-card-sm-image\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardSmImage, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-sm-image], [matCardImageSmall]',\n host: { 'class': 'mat-card-sm-image' },\n }]\n }] });\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardMdImage {\n}\nMatCardMdImage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardMdImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardMdImage.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardMdImage, selector: \"[mat-card-md-image], [matCardImageMedium]\", host: { classAttribute: \"mat-card-md-image\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardMdImage, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-md-image], [matCardImageMedium]',\n host: { 'class': 'mat-card-md-image' },\n }]\n }] });\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardLgImage {\n}\nMatCardLgImage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardLgImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardLgImage.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardLgImage, selector: \"[mat-card-lg-image], [matCardImageLarge]\", host: { classAttribute: \"mat-card-lg-image\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardLgImage, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-lg-image], [matCardImageLarge]',\n host: { 'class': 'mat-card-lg-image' },\n }]\n }] });\n/**\n * Large image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardXlImage {\n}\nMatCardXlImage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardXlImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardXlImage.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardXlImage, selector: \"[mat-card-xl-image], [matCardImageXLarge]\", host: { classAttribute: \"mat-card-xl-image\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardXlImage, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-xl-image], [matCardImageXLarge]',\n host: { 'class': 'mat-card-xl-image' },\n }]\n }] });\n/**\n * Avatar image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardAvatar {\n}\nMatCardAvatar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardAvatar, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardAvatar.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardAvatar, selector: \"[mat-card-avatar], [matCardAvatar]\", host: { classAttribute: \"mat-card-avatar\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardAvatar, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-avatar], [matCardAvatar]',\n host: { 'class': 'mat-card-avatar' },\n }]\n }] });\n/**\n * A basic content container component that adds the styles of a Material design card.\n *\n * While this component can be used alone, it also provides a number\n * of preset styles for common card sections, including:\n * - mat-card-title\n * - mat-card-subtitle\n * - mat-card-content\n * - mat-card-actions\n * - mat-card-footer\n */\nclass MatCard {\n // @breaking-change 9.0.0 `_animationMode` parameter to be made required.\n constructor(_animationMode) {\n this._animationMode = _animationMode;\n }\n}\nMatCard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCard, deps: [{ token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatCard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCard, selector: \"mat-card\", host: { properties: { \"class._mat-animation-noopable\": \"_animationMode === \\\"NoopAnimations\\\"\" }, classAttribute: \"mat-card mat-focus-indicator\" }, exportAs: [\"matCard\"], ngImport: i0, template: \"\\n\\n\", styles: [\".mat-card{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:block;position:relative;padding:16px;border-radius:4px}.mat-card._mat-animation-noopable{transition:none !important;animation:none !important}.mat-card>.mat-divider-horizontal{position:absolute;left:0;width:100%}[dir=rtl] .mat-card>.mat-divider-horizontal{left:auto;right:0}.mat-card>.mat-divider-horizontal.mat-divider-inset{position:static;margin:0}[dir=rtl] .mat-card>.mat-divider-horizontal.mat-divider-inset{margin-right:0}.cdk-high-contrast-active .mat-card{outline:solid 1px}.mat-card-actions,.mat-card-subtitle,.mat-card-content{display:block;margin-bottom:16px}.mat-card-title{display:block;margin-bottom:8px}.mat-card-actions{margin-left:-8px;margin-right:-8px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 32px);margin:0 -16px 16px -16px;display:block;overflow:hidden}.mat-card-image img{width:100%}.mat-card-footer{display:block;margin:0 -16px -16px -16px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button,.mat-card-actions .mat-stroked-button{margin:0 8px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header .mat-card-title{margin-bottom:12px}.mat-card-header-text{margin:0 16px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;object-fit:cover}.mat-card-title-group{display:flex;justify-content:space-between}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-title-group>.mat-card-xl-image{margin:-8px 0 8px}@media(max-width: 599px){.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}}.mat-card>:first-child,.mat-card-content>:first-child{margin-top:0}.mat-card>:last-child:not(.mat-card-footer),.mat-card-content>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-16px;border-top-left-radius:inherit;border-top-right-radius:inherit}.mat-card>.mat-card-actions:last-child{margin-bottom:-8px;padding-bottom:0}.mat-card-actions:not(.mat-card-actions-align-end) .mat-button:first-child,.mat-card-actions:not(.mat-card-actions-align-end) .mat-raised-button:first-child,.mat-card-actions:not(.mat-card-actions-align-end) .mat-stroked-button:first-child{margin-left:0;margin-right:0}.mat-card-actions-align-end .mat-button:last-child,.mat-card-actions-align-end .mat-raised-button:last-child,.mat-card-actions-align-end .mat-stroked-button:last-child{margin-left:0;margin-right:0}.mat-card-title:not(:first-child),.mat-card-subtitle:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCard, decorators: [{\n type: Component,\n args: [{ selector: 'mat-card', exportAs: 'matCard', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n 'class': 'mat-card mat-focus-indicator',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n }, template: \"\\n\\n\", styles: [\".mat-card{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:block;position:relative;padding:16px;border-radius:4px}.mat-card._mat-animation-noopable{transition:none !important;animation:none !important}.mat-card>.mat-divider-horizontal{position:absolute;left:0;width:100%}[dir=rtl] .mat-card>.mat-divider-horizontal{left:auto;right:0}.mat-card>.mat-divider-horizontal.mat-divider-inset{position:static;margin:0}[dir=rtl] .mat-card>.mat-divider-horizontal.mat-divider-inset{margin-right:0}.cdk-high-contrast-active .mat-card{outline:solid 1px}.mat-card-actions,.mat-card-subtitle,.mat-card-content{display:block;margin-bottom:16px}.mat-card-title{display:block;margin-bottom:8px}.mat-card-actions{margin-left:-8px;margin-right:-8px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 32px);margin:0 -16px 16px -16px;display:block;overflow:hidden}.mat-card-image img{width:100%}.mat-card-footer{display:block;margin:0 -16px -16px -16px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button,.mat-card-actions .mat-stroked-button{margin:0 8px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header .mat-card-title{margin-bottom:12px}.mat-card-header-text{margin:0 16px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;object-fit:cover}.mat-card-title-group{display:flex;justify-content:space-between}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-title-group>.mat-card-xl-image{margin:-8px 0 8px}@media(max-width: 599px){.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}}.mat-card>:first-child,.mat-card-content>:first-child{margin-top:0}.mat-card>:last-child:not(.mat-card-footer),.mat-card-content>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-16px;border-top-left-radius:inherit;border-top-right-radius:inherit}.mat-card>.mat-card-actions:last-child{margin-bottom:-8px;padding-bottom:0}.mat-card-actions:not(.mat-card-actions-align-end) .mat-button:first-child,.mat-card-actions:not(.mat-card-actions-align-end) .mat-raised-button:first-child,.mat-card-actions:not(.mat-card-actions-align-end) .mat-stroked-button:first-child{margin-left:0;margin-right:0}.mat-card-actions-align-end .mat-button:last-child,.mat-card-actions-align-end .mat-raised-button:last-child,.mat-card-actions-align-end .mat-stroked-button:last-child{margin-left:0;margin-right:0}.mat-card-title:not(:first-child),.mat-card-subtitle:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}\"] }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; } });\n/**\n * Component intended to be used within the `` component. It adds styles for a\n * preset header section (i.e. a title, subtitle, and avatar layout).\n * @docs-private\n */\nclass MatCardHeader {\n}\nMatCardHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });\nMatCardHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardHeader, selector: \"mat-card-header\", host: { classAttribute: \"mat-card-header\" }, ngImport: i0, template: \"\\n
\\n \\n
\\n\\n\", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-card-header', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { 'class': 'mat-card-header' }, template: \"\\n
\\n \\n
\\n\\n\" }]\n }] });\n/**\n * Component intended to be used within the `` component. It adds styles for a preset\n * layout that groups an image with a title section.\n * @docs-private\n */\nclass MatCardTitleGroup {\n}\nMatCardTitleGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardTitleGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });\nMatCardTitleGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardTitleGroup, selector: \"mat-card-title-group\", host: { classAttribute: \"mat-card-title-group\" }, ngImport: i0, template: \"
\\n \\n
\\n\\n\\n\", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardTitleGroup, decorators: [{\n type: Component,\n args: [{ selector: 'mat-card-title-group', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { 'class': 'mat-card-title-group' }, template: \"
\\n \\n
\\n\\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 */\nclass MatCardModule {\n}\nMatCardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatCardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardModule, declarations: [MatCard,\n MatCardHeader,\n MatCardTitleGroup,\n MatCardContent,\n MatCardTitle,\n MatCardSubtitle,\n MatCardActions,\n MatCardFooter,\n MatCardSmImage,\n MatCardMdImage,\n MatCardLgImage,\n MatCardImage,\n MatCardXlImage,\n MatCardAvatar], imports: [MatCommonModule], exports: [MatCard,\n MatCardHeader,\n MatCardTitleGroup,\n MatCardContent,\n MatCardTitle,\n MatCardSubtitle,\n MatCardActions,\n MatCardFooter,\n MatCardSmImage,\n MatCardMdImage,\n MatCardLgImage,\n MatCardImage,\n MatCardXlImage,\n MatCardAvatar,\n MatCommonModule] });\nMatCardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardModule, imports: [MatCommonModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [\n MatCard,\n MatCardHeader,\n MatCardTitleGroup,\n MatCardContent,\n MatCardTitle,\n MatCardSubtitle,\n MatCardActions,\n MatCardFooter,\n MatCardSmImage,\n MatCardMdImage,\n MatCardLgImage,\n MatCardImage,\n MatCardXlImage,\n MatCardAvatar,\n MatCommonModule,\n ],\n declarations: [\n MatCard,\n MatCardHeader,\n MatCardTitleGroup,\n MatCardContent,\n MatCardTitle,\n MatCardSubtitle,\n MatCardActions,\n MatCardFooter,\n MatCardSmImage,\n MatCardMdImage,\n MatCardLgImage,\n MatCardImage,\n MatCardXlImage,\n MatCardAvatar,\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/**\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardModule, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Input, ContentChildren, Directive, NgModule } from '@angular/core';\nimport { setLines, MatLine, MatLineModule, MatCommonModule } from '@angular/material/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/bidi';\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 * Class for determining, from a list of tiles, the (row, col) position of each of those tiles\n * in the grid. This is necessary (rather than just rendering the tiles in normal document flow)\n * because the tiles can have a rowspan.\n *\n * The positioning algorithm greedily places each tile as soon as it encounters a gap in the grid\n * large enough to accommodate it so that the tiles still render in the same order in which they\n * are given.\n *\n * The basis of the algorithm is the use of an array to track the already placed tiles. Each\n * element of the array corresponds to a column, and the value indicates how many cells in that\n * column are already occupied; zero indicates an empty cell. Moving \"down\" to the next row\n * decrements each value in the tracking array (indicating that the column is one cell closer to\n * being free).\n *\n * @docs-private\n */\nclass TileCoordinator {\n constructor() {\n /** Index at which the search for the next gap will start. */\n this.columnIndex = 0;\n /** The current row index. */\n this.rowIndex = 0;\n }\n /** Gets the total number of rows occupied by tiles */\n get rowCount() {\n return this.rowIndex + 1;\n }\n /**\n * Gets the total span of rows occupied by tiles.\n * Ex: A list with 1 row that contains a tile with rowspan 2 will have a total rowspan of 2.\n */\n get rowspan() {\n const lastRowMax = Math.max(...this.tracker);\n // if any of the tiles has a rowspan that pushes it beyond the total row count,\n // add the difference to the rowcount\n return lastRowMax > 1 ? this.rowCount + lastRowMax - 1 : this.rowCount;\n }\n /**\n * Updates the tile positions.\n * @param numColumns Amount of columns in the grid.\n * @param tiles Tiles to be positioned.\n */\n update(numColumns, tiles) {\n this.columnIndex = 0;\n this.rowIndex = 0;\n this.tracker = new Array(numColumns);\n this.tracker.fill(0, 0, this.tracker.length);\n this.positions = tiles.map(tile => this._trackTile(tile));\n }\n /** Calculates the row and col position of a tile. */\n _trackTile(tile) {\n // Find a gap large enough for this tile.\n const gapStartIndex = this._findMatchingGap(tile.colspan);\n // Place tile in the resulting gap.\n this._markTilePosition(gapStartIndex, tile);\n // The next time we look for a gap, the search will start at columnIndex, which should be\n // immediately after the tile that has just been placed.\n this.columnIndex = gapStartIndex + tile.colspan;\n return new TilePosition(this.rowIndex, gapStartIndex);\n }\n /** Finds the next available space large enough to fit the tile. */\n _findMatchingGap(tileCols) {\n if (tileCols > this.tracker.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`mat-grid-list: tile with colspan ${tileCols} is wider than ` +\n `grid with cols=\"${this.tracker.length}\".`);\n }\n // Start index is inclusive, end index is exclusive.\n let gapStartIndex = -1;\n let gapEndIndex = -1;\n // Look for a gap large enough to fit the given tile. Empty spaces are marked with a zero.\n do {\n // If we've reached the end of the row, go to the next row.\n if (this.columnIndex + tileCols > this.tracker.length) {\n this._nextRow();\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n continue;\n }\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n // If there are no more empty spaces in this row at all, move on to the next row.\n if (gapStartIndex == -1) {\n this._nextRow();\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n continue;\n }\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n // If a gap large enough isn't found, we want to start looking immediately after the current\n // gap on the next iteration.\n this.columnIndex = gapStartIndex + 1;\n // Continue iterating until we find a gap wide enough for this tile. Since gapEndIndex is\n // exclusive, gapEndIndex is 0 means we didn't find a gap and should continue.\n } while (gapEndIndex - gapStartIndex < tileCols || gapEndIndex == 0);\n // If we still didn't manage to find a gap, ensure that the index is\n // at least zero so the tile doesn't get pulled out of the grid.\n return Math.max(gapStartIndex, 0);\n }\n /** Move \"down\" to the next row. */\n _nextRow() {\n this.columnIndex = 0;\n this.rowIndex++;\n // Decrement all spaces by one to reflect moving down one row.\n for (let i = 0; i < this.tracker.length; i++) {\n this.tracker[i] = Math.max(0, this.tracker[i] - 1);\n }\n }\n /**\n * Finds the end index (exclusive) of a gap given the index from which to start looking.\n * The gap ends when a non-zero value is found.\n */\n _findGapEndIndex(gapStartIndex) {\n for (let i = gapStartIndex + 1; i < this.tracker.length; i++) {\n if (this.tracker[i] != 0) {\n return i;\n }\n }\n // The gap ends with the end of the row.\n return this.tracker.length;\n }\n /** Update the tile tracker to account for the given tile in the given space. */\n _markTilePosition(start, tile) {\n for (let i = 0; i < tile.colspan; i++) {\n this.tracker[start + i] = tile.rowspan;\n }\n }\n}\n/**\n * Simple data structure for tile position (row, col).\n * @docs-private\n */\nclass TilePosition {\n constructor(row, col) {\n this.row = row;\n this.col = col;\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 * Injection token used to provide a grid list to a tile and to avoid circular imports.\n * @docs-private\n */\nconst MAT_GRID_LIST = new InjectionToken('MAT_GRID_LIST');\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 */\nclass MatGridTile {\n constructor(_element, _gridList) {\n this._element = _element;\n this._gridList = _gridList;\n this._rowspan = 1;\n this._colspan = 1;\n }\n /** Amount of rows that the grid tile takes up. */\n get rowspan() {\n return this._rowspan;\n }\n set rowspan(value) {\n this._rowspan = Math.round(coerceNumberProperty(value));\n }\n /** Amount of columns that the grid tile takes up. */\n get colspan() {\n return this._colspan;\n }\n set colspan(value) {\n this._colspan = Math.round(coerceNumberProperty(value));\n }\n /**\n * Sets the style of the grid-tile element. Needs to be set manually to avoid\n * \"Changed after checked\" errors that would occur with HostBinding.\n */\n _setStyle(property, value) {\n this._element.nativeElement.style[property] = value;\n }\n}\nMatGridTile.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTile, deps: [{ token: i0.ElementRef }, { token: MAT_GRID_LIST, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatGridTile.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridTile, selector: \"mat-grid-tile\", inputs: { rowspan: \"rowspan\", colspan: \"colspan\" }, host: { properties: { \"attr.rowspan\": \"rowspan\", \"attr.colspan\": \"colspan\" }, classAttribute: \"mat-grid-tile\" }, exportAs: [\"matGridTile\"], ngImport: i0, template: \"
\\n \\n
\\n\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTile, decorators: [{\n type: Component,\n args: [{ selector: 'mat-grid-tile', exportAs: 'matGridTile', host: {\n 'class': 'mat-grid-tile',\n // Ensures that the \"rowspan\" and \"colspan\" input value is reflected in\n // the DOM. This is needed for the grid-tile harness.\n '[attr.rowspan]': 'rowspan',\n '[attr.colspan]': 'colspan',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"
\\n \\n
\\n\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_GRID_LIST]\n }] }]; }, propDecorators: { rowspan: [{\n type: Input\n }], colspan: [{\n type: Input\n }] } });\nclass MatGridTileText {\n constructor(_element) {\n this._element = _element;\n }\n ngAfterContentInit() {\n setLines(this._lines, this._element);\n }\n}\nMatGridTileText.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileText, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nMatGridTileText.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridTileText, selector: \"mat-grid-tile-header, mat-grid-tile-footer\", queries: [{ propertyName: \"_lines\", predicate: MatLine, descendants: true }], ngImport: i0, template: \"\\n
\\n\\n\", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileText, decorators: [{\n type: Component,\n args: [{ selector: 'mat-grid-tile-header, mat-grid-tile-footer', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"\\n
\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { _lines: [{\n type: ContentChildren,\n args: [MatLine, { descendants: true }]\n }] } });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatGridAvatarCssMatStyler {\n}\nMatGridAvatarCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridAvatarCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatGridAvatarCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridAvatarCssMatStyler, selector: \"[mat-grid-avatar], [matGridAvatar]\", host: { classAttribute: \"mat-grid-avatar\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridAvatarCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-grid-avatar], [matGridAvatar]',\n host: { 'class': 'mat-grid-avatar' },\n }]\n }] });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatGridTileHeaderCssMatStyler {\n}\nMatGridTileHeaderCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileHeaderCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatGridTileHeaderCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridTileHeaderCssMatStyler, selector: \"mat-grid-tile-header\", host: { classAttribute: \"mat-grid-tile-header\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileHeaderCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-grid-tile-header',\n host: { 'class': 'mat-grid-tile-header' },\n }]\n }] });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatGridTileFooterCssMatStyler {\n}\nMatGridTileFooterCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileFooterCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatGridTileFooterCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridTileFooterCssMatStyler, selector: \"mat-grid-tile-footer\", host: { classAttribute: \"mat-grid-tile-footer\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileFooterCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-grid-tile-footer',\n host: { 'class': 'mat-grid-tile-footer' },\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 * RegExp that can be used to check whether a value will\n * be allowed inside a CSS `calc()` expression.\n */\nconst cssCalcAllowedValue = /^-?\\d+((\\.\\d+)?[A-Za-z%$]?)+$/;\n/**\n * Sets the style properties for an individual tile, given the position calculated by the\n * Tile Coordinator.\n * @docs-private\n */\nclass TileStyler {\n constructor() {\n this._rows = 0;\n this._rowspan = 0;\n }\n /**\n * Adds grid-list layout info once it is available. Cannot be processed in the constructor\n * because these properties haven't been calculated by that point.\n *\n * @param gutterSize Size of the grid's gutter.\n * @param tracker Instance of the TileCoordinator.\n * @param cols Amount of columns in the grid.\n * @param direction Layout direction of the grid.\n */\n init(gutterSize, tracker, cols, direction) {\n this._gutterSize = normalizeUnits(gutterSize);\n this._rows = tracker.rowCount;\n this._rowspan = tracker.rowspan;\n this._cols = cols;\n this._direction = direction;\n }\n /**\n * Computes the amount of space a single 1x1 tile would take up (width or height).\n * Used as a basis for other calculations.\n * @param sizePercent Percent of the total grid-list space that one 1x1 tile would take up.\n * @param gutterFraction Fraction of the gutter size taken up by one 1x1 tile.\n * @return The size of a 1x1 tile as an expression that can be evaluated via CSS calc().\n */\n getBaseTileSize(sizePercent, gutterFraction) {\n // Take the base size percent (as would be if evenly dividing the size between cells),\n // and then subtracting the size of one gutter. However, since there are no gutters on the\n // edges, each tile only uses a fraction (gutterShare = numGutters / numCells) of the gutter\n // size. (Imagine having one gutter per tile, and then breaking up the extra gutter on the\n // edge evenly among the cells).\n return `(${sizePercent}% - (${this._gutterSize} * ${gutterFraction}))`;\n }\n /**\n * Gets The horizontal or vertical position of a tile, e.g., the 'top' or 'left' property value.\n * @param offset Number of tiles that have already been rendered in the row/column.\n * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n * @return Position of the tile as a CSS calc() expression.\n */\n getTilePosition(baseSize, offset) {\n // The position comes the size of a 1x1 tile plus gutter for each previous tile in the\n // row/column (offset).\n return offset === 0 ? '0' : calc(`(${baseSize} + ${this._gutterSize}) * ${offset}`);\n }\n /**\n * Gets the actual size of a tile, e.g., width or height, taking rowspan or colspan into account.\n * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n * @param span The tile's rowspan or colspan.\n * @return Size of the tile as a CSS calc() expression.\n */\n getTileSize(baseSize, span) {\n return `(${baseSize} * ${span}) + (${span - 1} * ${this._gutterSize})`;\n }\n /**\n * Sets the style properties to be applied to a tile for the given row and column index.\n * @param tile Tile to which to apply the styling.\n * @param rowIndex Index of the tile's row.\n * @param colIndex Index of the tile's column.\n */\n setStyle(tile, rowIndex, colIndex) {\n // Percent of the available horizontal space that one column takes up.\n let percentWidthPerTile = 100 / this._cols;\n // Fraction of the vertical gutter size that each column takes up.\n // For example, if there are 5 columns, each column uses 4/5 = 0.8 times the gutter width.\n let gutterWidthFractionPerTile = (this._cols - 1) / this._cols;\n this.setColStyles(tile, colIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n this.setRowStyles(tile, rowIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n }\n /** Sets the horizontal placement of the tile in the list. */\n setColStyles(tile, colIndex, percentWidth, gutterWidth) {\n // Base horizontal size of a column.\n let baseTileWidth = this.getBaseTileSize(percentWidth, gutterWidth);\n // The width and horizontal position of each tile is always calculated the same way, but the\n // height and vertical position depends on the rowMode.\n let side = this._direction === 'rtl' ? 'right' : 'left';\n tile._setStyle(side, this.getTilePosition(baseTileWidth, colIndex));\n tile._setStyle('width', calc(this.getTileSize(baseTileWidth, tile.colspan)));\n }\n /**\n * Calculates the total size taken up by gutters across one axis of a list.\n */\n getGutterSpan() {\n return `${this._gutterSize} * (${this._rowspan} - 1)`;\n }\n /**\n * Calculates the total size taken up by tiles across one axis of a list.\n * @param tileHeight Height of the tile.\n */\n getTileSpan(tileHeight) {\n return `${this._rowspan} * ${this.getTileSize(tileHeight, 1)}`;\n }\n /**\n * Calculates the computed height and returns the correct style property to set.\n * This method can be implemented by each type of TileStyler.\n * @docs-private\n */\n getComputedHeight() {\n return null;\n }\n}\n/**\n * This type of styler is instantiated when the user passes in a fixed row height.\n * Example ``\n * @docs-private\n */\nclass FixedTileStyler extends TileStyler {\n constructor(fixedRowHeight) {\n super();\n this.fixedRowHeight = fixedRowHeight;\n }\n init(gutterSize, tracker, cols, direction) {\n super.init(gutterSize, tracker, cols, direction);\n this.fixedRowHeight = normalizeUnits(this.fixedRowHeight);\n if (!cssCalcAllowedValue.test(this.fixedRowHeight) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Invalid value \"${this.fixedRowHeight}\" set as rowHeight.`);\n }\n }\n setRowStyles(tile, rowIndex) {\n tile._setStyle('top', this.getTilePosition(this.fixedRowHeight, rowIndex));\n tile._setStyle('height', calc(this.getTileSize(this.fixedRowHeight, tile.rowspan)));\n }\n getComputedHeight() {\n return ['height', calc(`${this.getTileSpan(this.fixedRowHeight)} + ${this.getGutterSpan()}`)];\n }\n reset(list) {\n list._setListStyle(['height', null]);\n if (list._tiles) {\n list._tiles.forEach(tile => {\n tile._setStyle('top', null);\n tile._setStyle('height', null);\n });\n }\n }\n}\n/**\n * This type of styler is instantiated when the user passes in a width:height ratio\n * for the row height. Example ``\n * @docs-private\n */\nclass RatioTileStyler extends TileStyler {\n constructor(value) {\n super();\n this._parseRatio(value);\n }\n setRowStyles(tile, rowIndex, percentWidth, gutterWidth) {\n let percentHeightPerTile = percentWidth / this.rowHeightRatio;\n this.baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterWidth);\n // Use padding-top and margin-top to maintain the given aspect ratio, as\n // a percentage-based value for these properties is applied versus the *width* of the\n // containing block. See http://www.w3.org/TR/CSS2/box.html#margin-properties\n tile._setStyle('marginTop', this.getTilePosition(this.baseTileHeight, rowIndex));\n tile._setStyle('paddingTop', calc(this.getTileSize(this.baseTileHeight, tile.rowspan)));\n }\n getComputedHeight() {\n return [\n 'paddingBottom',\n calc(`${this.getTileSpan(this.baseTileHeight)} + ${this.getGutterSpan()}`),\n ];\n }\n reset(list) {\n list._setListStyle(['paddingBottom', null]);\n list._tiles.forEach(tile => {\n tile._setStyle('marginTop', null);\n tile._setStyle('paddingTop', null);\n });\n }\n _parseRatio(value) {\n const ratioParts = value.split(':');\n if (ratioParts.length !== 2 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`mat-grid-list: invalid ratio given for row-height: \"${value}\"`);\n }\n this.rowHeightRatio = parseFloat(ratioParts[0]) / parseFloat(ratioParts[1]);\n }\n}\n/**\n * This type of styler is instantiated when the user selects a \"fit\" row height mode.\n * In other words, the row height will reflect the total height of the container divided\n * by the number of rows. Example ``\n *\n * @docs-private\n */\nclass FitTileStyler extends TileStyler {\n setRowStyles(tile, rowIndex) {\n // Percent of the available vertical space that one row takes up.\n let percentHeightPerTile = 100 / this._rowspan;\n // Fraction of the horizontal gutter size that each column takes up.\n let gutterHeightPerTile = (this._rows - 1) / this._rows;\n // Base vertical size of a column.\n let baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterHeightPerTile);\n tile._setStyle('top', this.getTilePosition(baseTileHeight, rowIndex));\n tile._setStyle('height', calc(this.getTileSize(baseTileHeight, tile.rowspan)));\n }\n reset(list) {\n if (list._tiles) {\n list._tiles.forEach(tile => {\n tile._setStyle('top', null);\n tile._setStyle('height', null);\n });\n }\n }\n}\n/** Wraps a CSS string in a calc function */\nfunction calc(exp) {\n return `calc(${exp})`;\n}\n/** Appends pixels to a CSS string if no units are given. */\nfunction normalizeUnits(value) {\n return value.match(/([A-Za-z%]+)$/) ? value : `${value}px`;\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(kara): Conditional (responsive) column count / row size.\n// TODO(kara): Re-layout on window resize / media change (debounced).\n// TODO(kara): gridTileHeader and gridTileFooter.\nconst MAT_FIT_MODE = 'fit';\nclass MatGridList {\n constructor(_element, _dir) {\n this._element = _element;\n this._dir = _dir;\n /** The amount of space between tiles. This will be something like '5px' or '2em'. */\n this._gutter = '1px';\n }\n /** Amount of columns in the grid list. */\n get cols() {\n return this._cols;\n }\n set cols(value) {\n this._cols = Math.max(1, Math.round(coerceNumberProperty(value)));\n }\n /** Size of the grid list's gutter in pixels. */\n get gutterSize() {\n return this._gutter;\n }\n set gutterSize(value) {\n this._gutter = `${value == null ? '' : value}`;\n }\n /** Set internal representation of row height from the user-provided value. */\n get rowHeight() {\n return this._rowHeight;\n }\n set rowHeight(value) {\n const newValue = `${value == null ? '' : value}`;\n if (newValue !== this._rowHeight) {\n this._rowHeight = newValue;\n this._setTileStyler(this._rowHeight);\n }\n }\n ngOnInit() {\n this._checkCols();\n this._checkRowHeight();\n }\n /**\n * The layout calculation is fairly cheap if nothing changes, so there's little cost\n * to run it frequently.\n */\n ngAfterContentChecked() {\n this._layoutTiles();\n }\n /** Throw a friendly error if cols property is missing */\n _checkCols() {\n if (!this.cols && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`mat-grid-list: must pass in number of columns. ` + `Example: `);\n }\n }\n /** Default to equal width:height if rowHeight property is missing */\n _checkRowHeight() {\n if (!this._rowHeight) {\n this._setTileStyler('1:1');\n }\n }\n /** Creates correct Tile Styler subtype based on rowHeight passed in by user */\n _setTileStyler(rowHeight) {\n if (this._tileStyler) {\n this._tileStyler.reset(this);\n }\n if (rowHeight === MAT_FIT_MODE) {\n this._tileStyler = new FitTileStyler();\n }\n else if (rowHeight && rowHeight.indexOf(':') > -1) {\n this._tileStyler = new RatioTileStyler(rowHeight);\n }\n else {\n this._tileStyler = new FixedTileStyler(rowHeight);\n }\n }\n /** Computes and applies the size and position for all children grid tiles. */\n _layoutTiles() {\n if (!this._tileCoordinator) {\n this._tileCoordinator = new TileCoordinator();\n }\n const tracker = this._tileCoordinator;\n const tiles = this._tiles.filter(tile => !tile._gridList || tile._gridList === this);\n const direction = this._dir ? this._dir.value : 'ltr';\n this._tileCoordinator.update(this.cols, tiles);\n this._tileStyler.init(this.gutterSize, tracker, this.cols, direction);\n tiles.forEach((tile, index) => {\n const pos = tracker.positions[index];\n this._tileStyler.setStyle(tile, pos.row, pos.col);\n });\n this._setListStyle(this._tileStyler.getComputedHeight());\n }\n /** Sets style on the main grid-list element, given the style name and value. */\n _setListStyle(style) {\n if (style) {\n this._element.nativeElement.style[style[0]] = style[1];\n }\n }\n}\nMatGridList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridList, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatGridList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridList, selector: \"mat-grid-list\", inputs: { cols: \"cols\", gutterSize: \"gutterSize\", rowHeight: \"rowHeight\" }, host: { properties: { \"attr.cols\": \"cols\" }, classAttribute: \"mat-grid-list\" }, providers: [\n {\n provide: MAT_GRID_LIST,\n useExisting: MatGridList,\n },\n ], queries: [{ propertyName: \"_tiles\", predicate: MatGridTile, descendants: true }], exportAs: [\"matGridList\"], ngImport: i0, template: \"
\\n \\n
\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridList, decorators: [{\n type: Component,\n args: [{ selector: 'mat-grid-list', exportAs: 'matGridList', host: {\n 'class': 'mat-grid-list',\n // Ensures that the \"cols\" input value is reflected in the DOM. This is\n // needed for the grid-list harness.\n '[attr.cols]': 'cols',\n }, providers: [\n {\n provide: MAT_GRID_LIST,\n useExisting: MatGridList,\n },\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\n \\n
\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { _tiles: [{\n type: ContentChildren,\n args: [MatGridTile, { descendants: true }]\n }], cols: [{\n type: Input\n }], gutterSize: [{\n type: Input\n }], rowHeight: [{\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 */\nclass MatGridListModule {\n}\nMatGridListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatGridListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridListModule, declarations: [MatGridList,\n MatGridTile,\n MatGridTileText,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler], imports: [MatLineModule, MatCommonModule], exports: [MatGridList,\n MatGridTile,\n MatGridTileText,\n MatLineModule,\n MatCommonModule,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler] });\nMatGridListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridListModule, imports: [MatLineModule, MatCommonModule, MatLineModule,\n MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridListModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatLineModule, MatCommonModule],\n exports: [\n MatGridList,\n MatGridTile,\n MatGridTileText,\n MatLineModule,\n MatCommonModule,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler,\n ],\n declarations: [\n MatGridList,\n MatGridTile,\n MatGridTileText,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler,\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// Privately exported for the grid-list harness.\nconst ɵTileCoordinator = TileCoordinator;\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatGridAvatarCssMatStyler, MatGridList, MatGridListModule, MatGridTile, MatGridTileFooterCssMatStyler, MatGridTileHeaderCssMatStyler, MatGridTileText, ɵTileCoordinator };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, Directive, Optional, Inject, Input, Output, Injectable, SkipSelf, Component, ViewEncapsulation, ChangeDetectionStrategy, NgModule } from '@angular/core';\nimport * as i3 from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SPACE, ENTER } from '@angular/cdk/keycodes';\nimport { mixinInitialized, mixinDisabled, AnimationDurations, AnimationCurves, MatCommonModule } from '@angular/material/core';\nimport { Subject, merge } from 'rxjs';\nimport { trigger, state, style, transition, animate, keyframes, query, animateChild } from '@angular/animations';\nimport * as i4 from '@angular/common';\nimport { CommonModule } from '@angular/common';\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 getSortDuplicateSortableIdError(id) {\n return Error(`Cannot have two MatSortables with the same id (${id}).`);\n}\n/** @docs-private */\nfunction getSortHeaderNotContainedWithinSortError() {\n return Error(`MatSortHeader must be placed within a parent element with the MatSort directive.`);\n}\n/** @docs-private */\nfunction getSortHeaderMissingIdError() {\n return Error(`MatSortHeader must be provided with a unique id.`);\n}\n/** @docs-private */\nfunction getSortInvalidDirectionError(direction) {\n return Error(`${direction} is not a valid sort direction ('asc' or 'desc').`);\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 to be used to override the default options for `mat-sort`. */\nconst MAT_SORT_DEFAULT_OPTIONS = new InjectionToken('MAT_SORT_DEFAULT_OPTIONS');\n// Boilerplate for applying mixins to MatSort.\n/** @docs-private */\nconst _MatSortBase = mixinInitialized(mixinDisabled(class {\n}));\n/** Container for MatSortables to manage the sort state and provide default sort parameters. */\nclass MatSort extends _MatSortBase {\n constructor(_defaultOptions) {\n super();\n this._defaultOptions = _defaultOptions;\n /** Collection of all registered sortables that this directive manages. */\n this.sortables = new Map();\n /** Used to notify any child components listening to state changes. */\n this._stateChanges = new Subject();\n /**\n * The direction to set when an MatSortable is initially sorted.\n * May be overridden by the MatSortable's sort start.\n */\n this.start = 'asc';\n this._direction = '';\n /** Event emitted when the user changes either the active sort or sort direction. */\n this.sortChange = new EventEmitter();\n }\n /** The sort direction of the currently active MatSortable. */\n get direction() {\n return this._direction;\n }\n set direction(direction) {\n if (direction &&\n direction !== 'asc' &&\n direction !== 'desc' &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getSortInvalidDirectionError(direction);\n }\n this._direction = direction;\n }\n /**\n * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\n * May be overridden by the MatSortable's disable clear input.\n */\n get disableClear() {\n return this._disableClear;\n }\n set disableClear(v) {\n this._disableClear = coerceBooleanProperty(v);\n }\n /**\n * Register function to be used by the contained MatSortables. Adds the MatSortable to the\n * collection of MatSortables.\n */\n register(sortable) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!sortable.id) {\n throw getSortHeaderMissingIdError();\n }\n if (this.sortables.has(sortable.id)) {\n throw getSortDuplicateSortableIdError(sortable.id);\n }\n }\n this.sortables.set(sortable.id, sortable);\n }\n /**\n * Unregister function to be used by the contained MatSortables. Removes the MatSortable from the\n * collection of contained MatSortables.\n */\n deregister(sortable) {\n this.sortables.delete(sortable.id);\n }\n /** Sets the active sort id and determines the new sort direction. */\n sort(sortable) {\n if (this.active != sortable.id) {\n this.active = sortable.id;\n this.direction = sortable.start ? sortable.start : this.start;\n }\n else {\n this.direction = this.getNextSortDirection(sortable);\n }\n this.sortChange.emit({ active: this.active, direction: this.direction });\n }\n /** Returns the next sort direction of the active sortable, checking for potential overrides. */\n getNextSortDirection(sortable) {\n if (!sortable) {\n return '';\n }\n // Get the sort direction cycle with the potential sortable overrides.\n const disableClear = sortable?.disableClear ?? this.disableClear ?? !!this._defaultOptions?.disableClear;\n let sortDirectionCycle = getSortDirectionCycle(sortable.start || this.start, disableClear);\n // Get and return the next direction in the cycle\n let nextDirectionIndex = sortDirectionCycle.indexOf(this.direction) + 1;\n if (nextDirectionIndex >= sortDirectionCycle.length) {\n nextDirectionIndex = 0;\n }\n return sortDirectionCycle[nextDirectionIndex];\n }\n ngOnInit() {\n this._markInitialized();\n }\n ngOnChanges() {\n this._stateChanges.next();\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\nMatSort.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSort, deps: [{ token: MAT_SORT_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatSort.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatSort, selector: \"[matSort]\", inputs: { disabled: [\"matSortDisabled\", \"disabled\"], active: [\"matSortActive\", \"active\"], start: [\"matSortStart\", \"start\"], direction: [\"matSortDirection\", \"direction\"], disableClear: [\"matSortDisableClear\", \"disableClear\"] }, outputs: { sortChange: \"matSortChange\" }, host: { classAttribute: \"mat-sort\" }, exportAs: [\"matSort\"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSort, decorators: [{\n type: Directive,\n args: [{\n selector: '[matSort]',\n exportAs: 'matSort',\n host: { 'class': 'mat-sort' },\n inputs: ['disabled: matSortDisabled'],\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_SORT_DEFAULT_OPTIONS]\n }] }]; }, propDecorators: { active: [{\n type: Input,\n args: ['matSortActive']\n }], start: [{\n type: Input,\n args: ['matSortStart']\n }], direction: [{\n type: Input,\n args: ['matSortDirection']\n }], disableClear: [{\n type: Input,\n args: ['matSortDisableClear']\n }], sortChange: [{\n type: Output,\n args: ['matSortChange']\n }] } });\n/** Returns the sort direction cycle to use given the provided parameters of order and clear. */\nfunction getSortDirectionCycle(start, disableClear) {\n let sortOrder = ['asc', 'desc'];\n if (start == 'desc') {\n sortOrder.reverse();\n }\n if (!disableClear) {\n sortOrder.push('');\n }\n return sortOrder;\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 SORT_ANIMATION_TRANSITION = AnimationDurations.ENTERING + ' ' + AnimationCurves.STANDARD_CURVE;\n/**\n * Animations used by MatSort.\n * @docs-private\n */\nconst matSortAnimations = {\n /** Animation that moves the sort indicator. */\n indicator: trigger('indicator', [\n state('active-asc, asc', style({ transform: 'translateY(0px)' })),\n // 10px is the height of the sort indicator, minus the width of the pointers\n state('active-desc, desc', style({ transform: 'translateY(10px)' })),\n transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION)),\n ]),\n /** Animation that rotates the left pointer of the indicator based on the sorting direction. */\n leftPointer: trigger('leftPointer', [\n state('active-asc, asc', style({ transform: 'rotate(-45deg)' })),\n state('active-desc, desc', style({ transform: 'rotate(45deg)' })),\n transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION)),\n ]),\n /** Animation that rotates the right pointer of the indicator based on the sorting direction. */\n rightPointer: trigger('rightPointer', [\n state('active-asc, asc', style({ transform: 'rotate(45deg)' })),\n state('active-desc, desc', style({ transform: 'rotate(-45deg)' })),\n transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION)),\n ]),\n /** Animation that controls the arrow opacity. */\n arrowOpacity: trigger('arrowOpacity', [\n state('desc-to-active, asc-to-active, active', style({ opacity: 1 })),\n state('desc-to-hint, asc-to-hint, hint', style({ opacity: 0.54 })),\n state('hint-to-desc, active-to-desc, desc, hint-to-asc, active-to-asc, asc, void', style({ opacity: 0 })),\n // Transition between all states except for immediate transitions\n transition('* => asc, * => desc, * => active, * => hint, * => void', animate('0ms')),\n transition('* <=> *', animate(SORT_ANIMATION_TRANSITION)),\n ]),\n /**\n * Animation for the translation of the arrow as a whole. States are separated into two\n * groups: ones with animations and others that are immediate. Immediate states are asc, desc,\n * peek, and active. The other states define a specific animation (source-to-destination)\n * and are determined as a function of their prev user-perceived state and what the next state\n * should be.\n */\n arrowPosition: trigger('arrowPosition', [\n // Hidden Above => Hint Center\n transition('* => desc-to-hint, * => desc-to-active', animate(SORT_ANIMATION_TRANSITION, keyframes([style({ transform: 'translateY(-25%)' }), style({ transform: 'translateY(0)' })]))),\n // Hint Center => Hidden Below\n transition('* => hint-to-desc, * => active-to-desc', animate(SORT_ANIMATION_TRANSITION, keyframes([style({ transform: 'translateY(0)' }), style({ transform: 'translateY(25%)' })]))),\n // Hidden Below => Hint Center\n transition('* => asc-to-hint, * => asc-to-active', animate(SORT_ANIMATION_TRANSITION, keyframes([style({ transform: 'translateY(25%)' }), style({ transform: 'translateY(0)' })]))),\n // Hint Center => Hidden Above\n transition('* => hint-to-asc, * => active-to-asc', animate(SORT_ANIMATION_TRANSITION, keyframes([style({ transform: 'translateY(0)' }), style({ transform: 'translateY(-25%)' })]))),\n state('desc-to-hint, asc-to-hint, hint, desc-to-active, asc-to-active, active', style({ transform: 'translateY(0)' })),\n state('hint-to-desc, active-to-desc, desc', style({ transform: 'translateY(-25%)' })),\n state('hint-to-asc, active-to-asc, asc', style({ transform: 'translateY(25%)' })),\n ]),\n /** Necessary trigger that calls animate on children animations. */\n allowChildren: trigger('allowChildren', [\n transition('* <=> *', [query('@*', animateChild(), { optional: true })]),\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 * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and\n * include it in a custom provider.\n */\nclass MatSortHeaderIntl {\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 }\n}\nMatSortHeaderIntl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSortHeaderIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMatSortHeaderIntl.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSortHeaderIntl, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSortHeaderIntl, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n/** @docs-private */\nfunction MAT_SORT_HEADER_INTL_PROVIDER_FACTORY(parentIntl) {\n return parentIntl || new MatSortHeaderIntl();\n}\n/** @docs-private */\nconst MAT_SORT_HEADER_INTL_PROVIDER = {\n // If there is already an MatSortHeaderIntl available, use that. Otherwise, provide a new one.\n provide: MatSortHeaderIntl,\n deps: [[new Optional(), new SkipSelf(), MatSortHeaderIntl]],\n useFactory: MAT_SORT_HEADER_INTL_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 */\n// Boilerplate for applying mixins to the sort header.\n/** @docs-private */\nconst _MatSortHeaderBase = mixinDisabled(class {\n});\n/**\n * Applies sorting behavior (click to change sort) and styles to an element, including an\n * arrow to display the current sort direction.\n *\n * Must be provided with an id and contained within a parent MatSort directive.\n *\n * If used on header cells in a CdkTable, it will automatically default its id from its containing\n * column definition.\n */\nclass MatSortHeader extends _MatSortHeaderBase {\n constructor(\n /**\n * @deprecated `_intl` parameter isn't being used anymore and it'll be removed.\n * @breaking-change 13.0.0\n */\n _intl, _changeDetectorRef, \n // `MatSort` is not optionally injected, but just asserted manually w/ better error.\n // tslint:disable-next-line: lightweight-tokens\n _sort, _columnDef, _focusMonitor, _elementRef, \n /** @breaking-change 14.0.0 _ariaDescriber will be required. */\n _ariaDescriber, defaultOptions) {\n // Note that we use a string token for the `_columnDef`, because the value is provided both by\n // `material/table` and `cdk/table` and we can't have the CDK depending on Material,\n // and we want to avoid having the sort header depending on the CDK table because\n // of this single reference.\n super();\n this._intl = _intl;\n this._changeDetectorRef = _changeDetectorRef;\n this._sort = _sort;\n this._columnDef = _columnDef;\n this._focusMonitor = _focusMonitor;\n this._elementRef = _elementRef;\n this._ariaDescriber = _ariaDescriber;\n /**\n * Flag set to true when the indicator should be displayed while the sort is not active. Used to\n * provide an affordance that the header is sortable by showing on focus and hover.\n */\n this._showIndicatorHint = false;\n /**\n * The view transition state of the arrow (translation/ opacity) - indicates its `from` and `to`\n * position through the animation. If animations are currently disabled, the fromState is removed\n * so that there is no animation displayed.\n */\n this._viewState = {};\n /** The direction the arrow should be facing according to the current state. */\n this._arrowDirection = '';\n /**\n * Whether the view state animation should show the transition between the `from` and `to` states.\n */\n this._disableViewStateAnimation = false;\n /** Sets the position of the arrow that displays when sorted. */\n this.arrowPosition = 'after';\n // Default the action description to \"Sort\" because it's better than nothing.\n // Without a description, the button's label comes from the sort header text content,\n // which doesn't give any indication that it performs a sorting operation.\n this._sortActionDescription = 'Sort';\n if (!_sort && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getSortHeaderNotContainedWithinSortError();\n }\n if (defaultOptions?.arrowPosition) {\n this.arrowPosition = defaultOptions?.arrowPosition;\n }\n this._handleStateChanges();\n }\n /**\n * Description applied to MatSortHeader's button element with aria-describedby. This text should\n * describe the action that will occur when the user clicks the sort header.\n */\n get sortActionDescription() {\n return this._sortActionDescription;\n }\n set sortActionDescription(value) {\n this._updateSortActionDescription(value);\n }\n /** Overrides the disable clear value of the containing MatSort for this MatSortable. */\n get disableClear() {\n return this._disableClear;\n }\n set disableClear(v) {\n this._disableClear = coerceBooleanProperty(v);\n }\n ngOnInit() {\n if (!this.id && this._columnDef) {\n this.id = this._columnDef.name;\n }\n // Initialize the direction of the arrow and set the view state to be immediately that state.\n this._updateArrowDirection();\n this._setAnimationTransitionState({\n toState: this._isSorted() ? 'active' : this._arrowDirection,\n });\n this._sort.register(this);\n this._sortButton = this._elementRef.nativeElement.querySelector('.mat-sort-header-container');\n this._updateSortActionDescription(this._sortActionDescription);\n }\n ngAfterViewInit() {\n // We use the focus monitor because we also want to style\n // things differently based on the focus origin.\n this._focusMonitor.monitor(this._elementRef, true).subscribe(origin => {\n const newState = !!origin;\n if (newState !== this._showIndicatorHint) {\n this._setIndicatorHintVisible(newState);\n this._changeDetectorRef.markForCheck();\n }\n });\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._sort.deregister(this);\n this._rerenderSubscription.unsubscribe();\n }\n /**\n * Sets the \"hint\" state such that the arrow will be semi-transparently displayed as a hint to the\n * user showing what the active sort will become. If set to false, the arrow will fade away.\n */\n _setIndicatorHintVisible(visible) {\n // No-op if the sort header is disabled - should not make the hint visible.\n if (this._isDisabled() && visible) {\n return;\n }\n this._showIndicatorHint = visible;\n if (!this._isSorted()) {\n this._updateArrowDirection();\n if (this._showIndicatorHint) {\n this._setAnimationTransitionState({ fromState: this._arrowDirection, toState: 'hint' });\n }\n else {\n this._setAnimationTransitionState({ fromState: 'hint', toState: this._arrowDirection });\n }\n }\n }\n /**\n * Sets the animation transition view state for the arrow's position and opacity. If the\n * `disableViewStateAnimation` flag is set to true, the `fromState` will be ignored so that\n * no animation appears.\n */\n _setAnimationTransitionState(viewState) {\n this._viewState = viewState || {};\n // If the animation for arrow position state (opacity/translation) should be disabled,\n // remove the fromState so that it jumps right to the toState.\n if (this._disableViewStateAnimation) {\n this._viewState = { toState: viewState.toState };\n }\n }\n /** Triggers the sort on this sort header and removes the indicator hint. */\n _toggleOnInteraction() {\n this._sort.sort(this);\n // Do not show the animation if the header was already shown in the right position.\n if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n this._disableViewStateAnimation = true;\n }\n }\n _handleClick() {\n if (!this._isDisabled()) {\n this._sort.sort(this);\n }\n }\n _handleKeydown(event) {\n if (!this._isDisabled() && (event.keyCode === SPACE || event.keyCode === ENTER)) {\n event.preventDefault();\n this._toggleOnInteraction();\n }\n }\n /** Whether this MatSortHeader is currently sorted in either ascending or descending order. */\n _isSorted() {\n return (this._sort.active == this.id &&\n (this._sort.direction === 'asc' || this._sort.direction === 'desc'));\n }\n /** Returns the animation state for the arrow direction (indicator and pointers). */\n _getArrowDirectionState() {\n return `${this._isSorted() ? 'active-' : ''}${this._arrowDirection}`;\n }\n /** Returns the arrow position state (opacity, translation). */\n _getArrowViewState() {\n const fromState = this._viewState.fromState;\n return (fromState ? `${fromState}-to-` : '') + this._viewState.toState;\n }\n /**\n * Updates the direction the arrow should be pointing. If it is not sorted, the arrow should be\n * facing the start direction. Otherwise if it is sorted, the arrow should point in the currently\n * active sorted direction. The reason this is updated through a function is because the direction\n * should only be changed at specific times - when deactivated but the hint is displayed and when\n * the sort is active and the direction changes. Otherwise the arrow's direction should linger\n * in cases such as the sort becoming deactivated but we want to animate the arrow away while\n * preserving its direction, even though the next sort direction is actually different and should\n * only be changed once the arrow displays again (hint or activation).\n */\n _updateArrowDirection() {\n this._arrowDirection = this._isSorted() ? this._sort.direction : this.start || this._sort.start;\n }\n _isDisabled() {\n return this._sort.disabled || this.disabled;\n }\n /**\n * Gets the aria-sort attribute that should be applied to this sort header. If this header\n * is not sorted, returns null so that the attribute is removed from the host element. Aria spec\n * says that the aria-sort property should only be present on one header at a time, so removing\n * ensures this is true.\n */\n _getAriaSortAttribute() {\n if (!this._isSorted()) {\n return 'none';\n }\n return this._sort.direction == 'asc' ? 'ascending' : 'descending';\n }\n /** Whether the arrow inside the sort header should be rendered. */\n _renderArrow() {\n return !this._isDisabled() || this._isSorted();\n }\n _updateSortActionDescription(newDescription) {\n // We use AriaDescriber for the sort button instead of setting an `aria-label` because some\n // screen readers (notably VoiceOver) will read both the column header *and* the button's label\n // for every *cell* in the table, creating a lot of unnecessary noise.\n // If _sortButton is undefined, the component hasn't been initialized yet so there's\n // nothing to update in the DOM.\n if (this._sortButton) {\n // removeDescription will no-op if there is no existing message.\n // TODO(jelbourn): remove optional chaining when AriaDescriber is required.\n this._ariaDescriber?.removeDescription(this._sortButton, this._sortActionDescription);\n this._ariaDescriber?.describe(this._sortButton, newDescription);\n }\n this._sortActionDescription = newDescription;\n }\n /** Handles changes in the sorting state. */\n _handleStateChanges() {\n this._rerenderSubscription = merge(this._sort.sortChange, this._sort._stateChanges, this._intl.changes).subscribe(() => {\n if (this._isSorted()) {\n this._updateArrowDirection();\n // Do not show the animation if the header was already shown in the right position.\n if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n this._disableViewStateAnimation = true;\n }\n this._setAnimationTransitionState({ fromState: this._arrowDirection, toState: 'active' });\n this._showIndicatorHint = false;\n }\n // If this header was recently active and now no longer sorted, animate away the arrow.\n if (!this._isSorted() && this._viewState && this._viewState.toState === 'active') {\n this._disableViewStateAnimation = false;\n this._setAnimationTransitionState({ fromState: 'active', toState: this._arrowDirection });\n }\n this._changeDetectorRef.markForCheck();\n });\n }\n}\nMatSortHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSortHeader, deps: [{ token: MatSortHeaderIntl }, { token: i0.ChangeDetectorRef }, { token: MatSort, optional: true }, { token: 'MAT_SORT_HEADER_COLUMN_DEF', optional: true }, { token: i3.FocusMonitor }, { token: i0.ElementRef }, { token: i3.AriaDescriber, optional: true }, { token: MAT_SORT_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatSortHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatSortHeader, selector: \"[mat-sort-header]\", inputs: { disabled: \"disabled\", id: [\"mat-sort-header\", \"id\"], arrowPosition: \"arrowPosition\", start: \"start\", sortActionDescription: \"sortActionDescription\", disableClear: \"disableClear\" }, host: { listeners: { \"click\": \"_handleClick()\", \"keydown\": \"_handleKeydown($event)\", \"mouseenter\": \"_setIndicatorHintVisible(true)\", \"mouseleave\": \"_setIndicatorHintVisible(false)\" }, properties: { \"attr.aria-sort\": \"_getAriaSortAttribute()\", \"class.mat-sort-header-disabled\": \"_isDisabled()\" }, classAttribute: \"mat-sort-header\" }, exportAs: [\"matSortHeader\"], usesInheritance: true, ngImport: i0, template: \"\\n
\\n\\n \\n
\\n \\n
\\n\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\", styles: [\".mat-sort-header-container{display:flex;cursor:pointer;align-items:center;letter-spacing:normal;outline:0}[mat-sort-header].cdk-keyboard-focused .mat-sort-header-container,[mat-sort-header].cdk-program-focused .mat-sort-header-container{border-bottom:solid 1px currentColor}.mat-sort-header-disabled .mat-sort-header-container{cursor:default}.mat-sort-header-container::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1)}.mat-sort-header-content{text-align:center;display:flex;align-items:center}.mat-sort-header-position-before{flex-direction:row-reverse}.mat-sort-header-arrow{height:12px;width:12px;min-width:12px;position:relative;display:flex;opacity:0}.mat-sort-header-arrow,[dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow{margin:0 0 0 6px}.mat-sort-header-position-before .mat-sort-header-arrow,[dir=rtl] .mat-sort-header-arrow{margin:0 6px 0 0}.mat-sort-header-stem{background:currentColor;height:10px;width:2px;margin:auto;display:flex;align-items:center}.cdk-high-contrast-active .mat-sort-header-stem{width:0;border-left:solid 2px}.mat-sort-header-indicator{width:100%;height:2px;display:flex;align-items:center;position:absolute;top:0;left:0}.mat-sort-header-pointer-middle{margin:auto;height:2px;width:2px;background:currentColor;transform:rotate(45deg)}.cdk-high-contrast-active .mat-sort-header-pointer-middle{width:0;height:0;border-top:solid 2px;border-left:solid 2px}.mat-sort-header-pointer-left,.mat-sort-header-pointer-right{background:currentColor;width:6px;height:2px;position:absolute;top:0}.cdk-high-contrast-active .mat-sort-header-pointer-left,.cdk-high-contrast-active .mat-sort-header-pointer-right{width:0;height:0;border-left:solid 6px;border-top:solid 2px}.mat-sort-header-pointer-left{transform-origin:right;left:0}.mat-sort-header-pointer-right{transform-origin:left;right:0}\"], dependencies: [{ kind: \"directive\", type: i4.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], animations: [\n matSortAnimations.indicator,\n matSortAnimations.leftPointer,\n matSortAnimations.rightPointer,\n matSortAnimations.arrowOpacity,\n matSortAnimations.arrowPosition,\n matSortAnimations.allowChildren,\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSortHeader, decorators: [{\n type: Component,\n args: [{ selector: '[mat-sort-header]', exportAs: 'matSortHeader', host: {\n 'class': 'mat-sort-header',\n '(click)': '_handleClick()',\n '(keydown)': '_handleKeydown($event)',\n '(mouseenter)': '_setIndicatorHintVisible(true)',\n '(mouseleave)': '_setIndicatorHintVisible(false)',\n '[attr.aria-sort]': '_getAriaSortAttribute()',\n '[class.mat-sort-header-disabled]': '_isDisabled()',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['disabled'], animations: [\n matSortAnimations.indicator,\n matSortAnimations.leftPointer,\n matSortAnimations.rightPointer,\n matSortAnimations.arrowOpacity,\n matSortAnimations.arrowPosition,\n matSortAnimations.allowChildren,\n ], template: \"\\n
\\n\\n \\n
\\n \\n
\\n\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\", styles: [\".mat-sort-header-container{display:flex;cursor:pointer;align-items:center;letter-spacing:normal;outline:0}[mat-sort-header].cdk-keyboard-focused .mat-sort-header-container,[mat-sort-header].cdk-program-focused .mat-sort-header-container{border-bottom:solid 1px currentColor}.mat-sort-header-disabled .mat-sort-header-container{cursor:default}.mat-sort-header-container::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1)}.mat-sort-header-content{text-align:center;display:flex;align-items:center}.mat-sort-header-position-before{flex-direction:row-reverse}.mat-sort-header-arrow{height:12px;width:12px;min-width:12px;position:relative;display:flex;opacity:0}.mat-sort-header-arrow,[dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow{margin:0 0 0 6px}.mat-sort-header-position-before .mat-sort-header-arrow,[dir=rtl] .mat-sort-header-arrow{margin:0 6px 0 0}.mat-sort-header-stem{background:currentColor;height:10px;width:2px;margin:auto;display:flex;align-items:center}.cdk-high-contrast-active .mat-sort-header-stem{width:0;border-left:solid 2px}.mat-sort-header-indicator{width:100%;height:2px;display:flex;align-items:center;position:absolute;top:0;left:0}.mat-sort-header-pointer-middle{margin:auto;height:2px;width:2px;background:currentColor;transform:rotate(45deg)}.cdk-high-contrast-active .mat-sort-header-pointer-middle{width:0;height:0;border-top:solid 2px;border-left:solid 2px}.mat-sort-header-pointer-left,.mat-sort-header-pointer-right{background:currentColor;width:6px;height:2px;position:absolute;top:0}.cdk-high-contrast-active .mat-sort-header-pointer-left,.cdk-high-contrast-active .mat-sort-header-pointer-right{width:0;height:0;border-left:solid 6px;border-top:solid 2px}.mat-sort-header-pointer-left{transform-origin:right;left:0}.mat-sort-header-pointer-right{transform-origin:left;right:0}\"] }]\n }], ctorParameters: function () { return [{ type: MatSortHeaderIntl }, { type: i0.ChangeDetectorRef }, { type: MatSort, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: ['MAT_SORT_HEADER_COLUMN_DEF']\n }, {\n type: Optional\n }] }, { type: i3.FocusMonitor }, { type: i0.ElementRef }, { type: i3.AriaDescriber, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_SORT_DEFAULT_OPTIONS]\n }] }]; }, propDecorators: { id: [{\n type: Input,\n args: ['mat-sort-header']\n }], arrowPosition: [{\n type: Input\n }], start: [{\n type: Input\n }], sortActionDescription: [{\n type: Input\n }], disableClear: [{\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 */\nclass MatSortModule {\n}\nMatSortModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSortModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatSortModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSortModule, declarations: [MatSort, MatSortHeader], imports: [CommonModule, MatCommonModule], exports: [MatSort, MatSortHeader] });\nMatSortModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSortModule, providers: [MAT_SORT_HEADER_INTL_PROVIDER], imports: [CommonModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSortModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule],\n exports: [MatSort, MatSortHeader],\n declarations: [MatSort, MatSortHeader],\n providers: [MAT_SORT_HEADER_INTL_PROVIDER],\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/**\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/**\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SORT_DEFAULT_OPTIONS, MAT_SORT_HEADER_INTL_PROVIDER, MAT_SORT_HEADER_INTL_PROVIDER_FACTORY, MatSort, MatSortHeader, MatSortHeaderIntl, MatSortModule, matSortAnimations };\n","import * as i0 from '@angular/core';\nimport { Directive, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/table';\nimport { CdkTable, CDK_TABLE, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, STICKY_POSITIONING_LISTENER, CDK_TABLE_TEMPLATE, CdkCellDef, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkHeaderCell, CdkFooterCell, CdkCell, CdkHeaderRowDef, CdkFooterRowDef, CdkRowDef, CdkHeaderRow, CDK_ROW_TEMPLATE, CdkFooterRow, CdkRow, CdkNoDataRow, CdkTextColumn, CdkTableModule, DataSource } from '@angular/cdk/table';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nimport { MatCommonModule } from '@angular/material/core';\nimport { _isNumberValue } from '@angular/cdk/coercion';\nimport { BehaviorSubject, Subject, merge, of, combineLatest } from 'rxjs';\nimport { map } from 'rxjs/operators';\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 * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with\n * tables that animate rows.\n */\nclass MatRecycleRows {\n}\nMatRecycleRows.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatRecycleRows, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatRecycleRows.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatRecycleRows, selector: \"mat-table[recycleRows], table[mat-table][recycleRows]\", providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatRecycleRows, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-table[recycleRows], table[mat-table][recycleRows]',\n providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }],\n }]\n }] });\n/**\n * Wrapper for the CdkTable with Material design styles.\n */\nclass MatTable extends CdkTable {\n constructor() {\n super(...arguments);\n /** Overrides the sticky CSS class set by the `CdkTable`. */\n this.stickyCssClass = 'mat-table-sticky';\n /** Overrides the need to add position: sticky on every sticky cell element in `CdkTable`. */\n this.needsPositionStickyOnElement = false;\n }\n}\nMatTable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTable, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatTable.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTable, selector: \"mat-table, table[mat-table]\", host: { properties: { \"class.mat-table-fixed-layout\": \"fixedLayout\" }, classAttribute: \"mat-table\" }, providers: [\n // TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code\n // is only included in the build if used.\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: CdkTable, useExisting: MatTable },\n { provide: CDK_TABLE, useExisting: MatTable },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n ], exportAs: [\"matTable\"], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n \\n \\n \\n \\n\", isInline: true, styles: [\"mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}table.mat-table{border-spacing:0}tr.mat-header-row{height:56px}tr.mat-row,tr.mat-footer-row{height:48px}th.mat-header-cell{text-align:left}[dir=rtl] th.mat-header-cell{text-align:right}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0;border-bottom-width:1px;border-bottom-style:solid}th.mat-header-cell:first-of-type,td.mat-cell:first-of-type,td.mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] th.mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}th.mat-header-cell:last-of-type,td.mat-cell:last-of-type,td.mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] th.mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}.mat-table-sticky{position:sticky !important}.mat-table-fixed-layout{table-layout:fixed}\"], dependencies: [{ kind: \"directive\", type: i1.DataRowOutlet, selector: \"[rowOutlet]\" }, { kind: \"directive\", type: i1.HeaderRowOutlet, selector: \"[headerRowOutlet]\" }, { kind: \"directive\", type: i1.FooterRowOutlet, selector: \"[footerRowOutlet]\" }, { kind: \"directive\", type: i1.NoDataRowOutlet, selector: \"[noDataRowOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTable, decorators: [{\n type: Component,\n args: [{ selector: 'mat-table, table[mat-table]', exportAs: 'matTable', template: CDK_TABLE_TEMPLATE, host: {\n 'class': 'mat-table',\n '[class.mat-table-fixed-layout]': 'fixedLayout',\n }, providers: [\n // TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code\n // is only included in the build if used.\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: CdkTable, useExisting: MatTable },\n { provide: CDK_TABLE, useExisting: MatTable },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, styles: [\"mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}table.mat-table{border-spacing:0}tr.mat-header-row{height:56px}tr.mat-row,tr.mat-footer-row{height:48px}th.mat-header-cell{text-align:left}[dir=rtl] th.mat-header-cell{text-align:right}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0;border-bottom-width:1px;border-bottom-style:solid}th.mat-header-cell:first-of-type,td.mat-cell:first-of-type,td.mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] th.mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}th.mat-header-cell:last-of-type,td.mat-cell:last-of-type,td.mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] th.mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}.mat-table-sticky{position:sticky !important}.mat-table-fixed-layout{table-layout:fixed}\"] }]\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 * Cell definition for the mat-table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nclass MatCellDef extends CdkCellDef {\n}\nMatCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCellDef, selector: \"[matCellDef]\", providers: [{ provide: CdkCellDef, useExisting: MatCellDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCellDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matCellDef]',\n providers: [{ provide: CdkCellDef, useExisting: MatCellDef }],\n }]\n }] });\n/**\n * Header cell definition for the mat-table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nclass MatHeaderCellDef extends CdkHeaderCellDef {\n}\nMatHeaderCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatHeaderCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatHeaderCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatHeaderCellDef, selector: \"[matHeaderCellDef]\", providers: [{ provide: CdkHeaderCellDef, useExisting: MatHeaderCellDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatHeaderCellDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matHeaderCellDef]',\n providers: [{ provide: CdkHeaderCellDef, useExisting: MatHeaderCellDef }],\n }]\n }] });\n/**\n * Footer cell definition for the mat-table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\nclass MatFooterCellDef extends CdkFooterCellDef {\n}\nMatFooterCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatFooterCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatFooterCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatFooterCellDef, selector: \"[matFooterCellDef]\", providers: [{ provide: CdkFooterCellDef, useExisting: MatFooterCellDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatFooterCellDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matFooterCellDef]',\n providers: [{ provide: CdkFooterCellDef, useExisting: MatFooterCellDef }],\n }]\n }] });\n/**\n * Column definition for the mat-table.\n * Defines a set of cells available for a table column.\n */\nclass MatColumnDef extends CdkColumnDef {\n /** Unique name for this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._setNameInput(name);\n }\n /**\n * Add \"mat-column-\" prefix in addition to \"cdk-column-\" prefix.\n * In the future, this will only add \"mat-column-\" and columnCssClassName\n * will change from type string[] to string.\n * @docs-private\n */\n _updateColumnCssClassName() {\n super._updateColumnCssClassName();\n this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`);\n }\n}\nMatColumnDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatColumnDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatColumnDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatColumnDef, selector: \"[matColumnDef]\", inputs: { sticky: \"sticky\", name: [\"matColumnDef\", \"name\"] }, providers: [\n { provide: CdkColumnDef, useExisting: MatColumnDef },\n { provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: MatColumnDef },\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatColumnDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matColumnDef]',\n inputs: ['sticky'],\n providers: [\n { provide: CdkColumnDef, useExisting: MatColumnDef },\n { provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: MatColumnDef },\n ],\n }]\n }], propDecorators: { name: [{\n type: Input,\n args: ['matColumnDef']\n }] } });\n/** Header cell template container that adds the right classes and role. */\nclass MatHeaderCell extends CdkHeaderCell {\n}\nMatHeaderCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatHeaderCell, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatHeaderCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatHeaderCell, selector: \"mat-header-cell, th[mat-header-cell]\", host: { attributes: { \"role\": \"columnheader\" }, classAttribute: \"mat-header-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatHeaderCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-header-cell, th[mat-header-cell]',\n host: {\n 'class': 'mat-header-cell',\n 'role': 'columnheader',\n },\n }]\n }] });\n/** Footer cell template container that adds the right classes and role. */\nclass MatFooterCell extends CdkFooterCell {\n}\nMatFooterCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatFooterCell, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatFooterCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatFooterCell, selector: \"mat-footer-cell, td[mat-footer-cell]\", host: { attributes: { \"role\": \"gridcell\" }, classAttribute: \"mat-footer-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatFooterCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-footer-cell, td[mat-footer-cell]',\n host: {\n 'class': 'mat-footer-cell',\n 'role': 'gridcell',\n },\n }]\n }] });\n/** Cell template container that adds the right classes and role. */\nclass MatCell extends CdkCell {\n}\nMatCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCell, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCell, selector: \"mat-cell, td[mat-cell]\", host: { attributes: { \"role\": \"gridcell\" }, classAttribute: \"mat-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-cell, td[mat-cell]',\n host: {\n 'class': 'mat-cell',\n 'role': 'gridcell',\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 * Header row definition for the mat-table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nclass MatHeaderRowDef extends CdkHeaderRowDef {\n}\nMatHeaderRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatHeaderRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatHeaderRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatHeaderRowDef, selector: \"[matHeaderRowDef]\", inputs: { columns: [\"matHeaderRowDef\", \"columns\"], sticky: [\"matHeaderRowDefSticky\", \"sticky\"] }, providers: [{ provide: CdkHeaderRowDef, useExisting: MatHeaderRowDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatHeaderRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matHeaderRowDef]',\n providers: [{ provide: CdkHeaderRowDef, useExisting: MatHeaderRowDef }],\n inputs: ['columns: matHeaderRowDef', 'sticky: matHeaderRowDefSticky'],\n }]\n }] });\n/**\n * Footer row definition for the mat-table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nclass MatFooterRowDef extends CdkFooterRowDef {\n}\nMatFooterRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatFooterRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatFooterRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatFooterRowDef, selector: \"[matFooterRowDef]\", inputs: { columns: [\"matFooterRowDef\", \"columns\"], sticky: [\"matFooterRowDefSticky\", \"sticky\"] }, providers: [{ provide: CdkFooterRowDef, useExisting: MatFooterRowDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatFooterRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matFooterRowDef]',\n providers: [{ provide: CdkFooterRowDef, useExisting: MatFooterRowDef }],\n inputs: ['columns: matFooterRowDef', 'sticky: matFooterRowDefSticky'],\n }]\n }] });\n/**\n * Data row definition for the mat-table.\n * Captures the data row's template and other properties such as the columns to display and\n * a when predicate that describes when this row should be used.\n */\nclass MatRowDef extends CdkRowDef {\n}\nMatRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatRowDef, selector: \"[matRowDef]\", inputs: { columns: [\"matRowDefColumns\", \"columns\"], when: [\"matRowDefWhen\", \"when\"] }, providers: [{ provide: CdkRowDef, useExisting: MatRowDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matRowDef]',\n providers: [{ provide: CdkRowDef, useExisting: MatRowDef }],\n inputs: ['columns: matRowDefColumns', 'when: matRowDefWhen'],\n }]\n }] });\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nclass MatHeaderRow extends CdkHeaderRow {\n}\nMatHeaderRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatHeaderRow, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatHeaderRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatHeaderRow, selector: \"mat-header-row, tr[mat-header-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"mat-header-row\" }, providers: [{ provide: CdkHeaderRow, useExisting: MatHeaderRow }], exportAs: [\"matHeaderRow\"], usesInheritance: true, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: i1.CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatHeaderRow, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-header-row, tr[mat-header-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-header-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matHeaderRow',\n providers: [{ provide: CdkHeaderRow, useExisting: MatHeaderRow }],\n }]\n }] });\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nclass MatFooterRow extends CdkFooterRow {\n}\nMatFooterRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatFooterRow, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatFooterRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatFooterRow, selector: \"mat-footer-row, tr[mat-footer-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"mat-footer-row\" }, providers: [{ provide: CdkFooterRow, useExisting: MatFooterRow }], exportAs: [\"matFooterRow\"], usesInheritance: true, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: i1.CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatFooterRow, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-footer-row, tr[mat-footer-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-footer-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matFooterRow',\n providers: [{ provide: CdkFooterRow, useExisting: MatFooterRow }],\n }]\n }] });\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nclass MatRow extends CdkRow {\n}\nMatRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatRow, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatRow, selector: \"mat-row, tr[mat-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"mat-row\" }, providers: [{ provide: CdkRow, useExisting: MatRow }], exportAs: [\"matRow\"], usesInheritance: true, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: i1.CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatRow, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-row, tr[mat-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matRow',\n providers: [{ provide: CdkRow, useExisting: MatRow }],\n }]\n }] });\n/** Row that can be used to display a message when no data is shown in the table. */\nclass MatNoDataRow extends CdkNoDataRow {\n constructor() {\n super(...arguments);\n this._contentClassName = 'mat-no-data-row';\n }\n}\nMatNoDataRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatNoDataRow, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatNoDataRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatNoDataRow, selector: \"ng-template[matNoDataRow]\", providers: [{ provide: CdkNoDataRow, useExisting: MatNoDataRow }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatNoDataRow, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[matNoDataRow]',\n providers: [{ provide: CdkNoDataRow, useExisting: MatNoDataRow }],\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 * Column that simply shows text content for the header and row cells. Assumes that the table\n * is using the native table implementation (`
\n {{headerText}}\n \n {{dataAccessor(data, name)}}\n \n {{headerText}}\n \n {{dataAccessor(data, name)}}\n
`).\n *\n * By default, the name of this column will be the header text and data property accessor.\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\n * input.\n */\nclass MatTextColumn extends CdkTextColumn {\n}\nMatTextColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTextColumn, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatTextColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTextColumn, selector: \"mat-text-column\", usesInheritance: true, ngImport: i0, template: `\n \n \n \n \n `, isInline: true, dependencies: [{ kind: \"directive\", type: MatHeaderCellDef, selector: \"[matHeaderCellDef]\" }, { kind: \"directive\", type: MatColumnDef, selector: \"[matColumnDef]\", inputs: [\"sticky\", \"matColumnDef\"] }, { kind: \"directive\", type: MatCellDef, selector: \"[matCellDef]\" }, { kind: \"directive\", type: MatHeaderCell, selector: \"mat-header-cell, th[mat-header-cell]\" }, { kind: \"directive\", type: MatCell, selector: \"mat-cell, td[mat-cell]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTextColumn, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-text-column',\n template: `\n \n \n \n \n `,\n encapsulation: ViewEncapsulation.None,\n // Change detection is intentionally not set to OnPush. This component's template will be provided\n // to the table to be inserted into its view. This is problematic when change detection runs since\n // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n // mean's the template in the table's view will not have the updated value (and in fact will cause\n // an ExpressionChangedAfterItHasBeenCheckedError).\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\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 */\nconst EXPORTED_DECLARATIONS = [\n // Table\n MatTable,\n MatRecycleRows,\n // Template defs\n MatHeaderCellDef,\n MatHeaderRowDef,\n MatColumnDef,\n MatCellDef,\n MatRowDef,\n MatFooterCellDef,\n MatFooterRowDef,\n // Cell directives\n MatHeaderCell,\n MatCell,\n MatFooterCell,\n // Row directives\n MatHeaderRow,\n MatRow,\n MatFooterRow,\n MatNoDataRow,\n MatTextColumn,\n];\nclass MatTableModule {\n}\nMatTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTableModule, declarations: [\n // Table\n MatTable,\n MatRecycleRows,\n // Template defs\n MatHeaderCellDef,\n MatHeaderRowDef,\n MatColumnDef,\n MatCellDef,\n MatRowDef,\n MatFooterCellDef,\n MatFooterRowDef,\n // Cell directives\n MatHeaderCell,\n MatCell,\n MatFooterCell,\n // Row directives\n MatHeaderRow,\n MatRow,\n MatFooterRow,\n MatNoDataRow,\n MatTextColumn], imports: [CdkTableModule, MatCommonModule], exports: [MatCommonModule, \n // Table\n MatTable,\n MatRecycleRows,\n // Template defs\n MatHeaderCellDef,\n MatHeaderRowDef,\n MatColumnDef,\n MatCellDef,\n MatRowDef,\n MatFooterCellDef,\n MatFooterRowDef,\n // Cell directives\n MatHeaderCell,\n MatCell,\n MatFooterCell,\n // Row directives\n MatHeaderRow,\n MatRow,\n MatFooterRow,\n MatNoDataRow,\n MatTextColumn] });\nMatTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTableModule, imports: [CdkTableModule, MatCommonModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTableModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CdkTableModule, MatCommonModule],\n exports: [MatCommonModule, EXPORTED_DECLARATIONS],\n declarations: EXPORTED_DECLARATIONS,\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 * Corresponds to `Number.MAX_SAFE_INTEGER`. Moved out into a variable here due to\n * flaky browser support and the value not being defined in Closure's typings.\n */\nconst MAX_SAFE_INTEGER = 9007199254740991;\n/** Shared base class with MDC-based implementation. */\nclass _MatTableDataSource extends DataSource {\n constructor(initialData = []) {\n super();\n /** Stream emitting render data to the table (depends on ordered data changes). */\n this._renderData = new BehaviorSubject([]);\n /** Stream that emits when a new filter string is set on the data source. */\n this._filter = new BehaviorSubject('');\n /** Used to react to internal changes of the paginator that are made by the data source itself. */\n this._internalPageChanges = new Subject();\n /**\n * Subscription to the changes that should trigger an update to the table's rendered rows, such\n * as filtering, sorting, pagination, or base data changes.\n */\n this._renderChangesSubscription = null;\n /**\n * Data accessor function that is used for accessing data properties for sorting through\n * the default sortData function.\n * This default function assumes that the sort header IDs (which defaults to the column name)\n * matches the data's properties (e.g. column Xyz represents data['Xyz']).\n * May be set to a custom function for different behavior.\n * @param data Data object that is being accessed.\n * @param sortHeaderId The name of the column that represents the data.\n */\n this.sortingDataAccessor = (data, sortHeaderId) => {\n const value = data[sortHeaderId];\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\n // leave them as strings. For more info: https://goo.gl/y5vbSg\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n return value;\n };\n /**\n * Gets a sorted copy of the data array based on the state of the MatSort. Called\n * after changes are made to the filtered data or when sort changes are emitted from MatSort.\n * By default, the function retrieves the active sort and its direction and compares data\n * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation\n * of data ordering.\n * @param data The array of data that should be sorted.\n * @param sort The connected MatSort that holds the current sort state.\n */\n this.sortData = (data, sort) => {\n const active = sort.active;\n const direction = sort.direction;\n if (!active || direction == '') {\n return data;\n }\n return data.sort((a, b) => {\n let valueA = this.sortingDataAccessor(a, active);\n let valueB = this.sortingDataAccessor(b, active);\n // If there are data in the column that can be converted to a number,\n // it must be ensured that the rest of the data\n // is of the same type so as not to order incorrectly.\n const valueAType = typeof valueA;\n const valueBType = typeof valueB;\n if (valueAType !== valueBType) {\n if (valueAType === 'number') {\n valueA += '';\n }\n if (valueBType === 'number') {\n valueB += '';\n }\n }\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n if (valueA > valueB) {\n comparatorResult = 1;\n }\n else if (valueA < valueB) {\n comparatorResult = -1;\n }\n }\n else if (valueA != null) {\n comparatorResult = 1;\n }\n else if (valueB != null) {\n comparatorResult = -1;\n }\n return comparatorResult * (direction == 'asc' ? 1 : -1);\n });\n };\n /**\n * Checks if a data object matches the data source's filter string. By default, each data object\n * is converted to a string of its properties and returns true if the filter has\n * at least one occurrence in that string. By default, the filter string has its whitespace\n * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\n * filter matching.\n * @param data Data object used to check against the filter.\n * @param filter Filter string that has been set on the data source.\n * @returns Whether the filter matches against the data\n */\n this.filterPredicate = (data, filter) => {\n // Transform the data into a lowercase string of all property values.\n const dataStr = Object.keys(data)\n .reduce((currentTerm, key) => {\n // Use an obscure Unicode character to delimit the words in the concatenated string.\n // This avoids matches where the values of two columns combined will match the user's query\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\n // that has a very low chance of being typed in by somebody in a text field. This one in\n // particular is \"White up-pointing triangle with dot\" from\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\n return currentTerm + data[key] + '◬';\n }, '')\n .toLowerCase();\n // Transform the filter by converting it to lowercase and removing whitespace.\n const transformedFilter = filter.trim().toLowerCase();\n return dataStr.indexOf(transformedFilter) != -1;\n };\n this._data = new BehaviorSubject(initialData);\n this._updateChangeSubscription();\n }\n /** Array of data that should be rendered by the table, where each object represents one row. */\n get data() {\n return this._data.value;\n }\n set data(data) {\n data = Array.isArray(data) ? data : [];\n this._data.next(data);\n // Normally the `filteredData` is updated by the re-render\n // subscription, but that won't happen if it's inactive.\n if (!this._renderChangesSubscription) {\n this._filterData(data);\n }\n }\n /**\n * Filter term that should be used to filter out objects from the data array. To override how\n * data objects match to this filter string, provide a custom function for filterPredicate.\n */\n get filter() {\n return this._filter.value;\n }\n set filter(filter) {\n this._filter.next(filter);\n // Normally the `filteredData` is updated by the re-render\n // subscription, but that won't happen if it's inactive.\n if (!this._renderChangesSubscription) {\n this._filterData(this.data);\n }\n }\n /**\n * Instance of the MatSort directive used by the table to control its sorting. Sort changes\n * emitted by the MatSort will trigger an update to the table's rendered data.\n */\n get sort() {\n return this._sort;\n }\n set sort(sort) {\n this._sort = sort;\n this._updateChangeSubscription();\n }\n /**\n * Instance of the MatPaginator component used by the table to control what page of the data is\n * displayed. Page changes emitted by the MatPaginator will trigger an update to the\n * table's rendered data.\n *\n * Note that the data source uses the paginator's properties to calculate which page of data\n * should be displayed. If the paginator receives its properties as template inputs,\n * e.g. `[pageLength]=100` or `[pageIndex]=1`, then be sure that the paginator's view has been\n * initialized before assigning it to this data source.\n */\n get paginator() {\n return this._paginator;\n }\n set paginator(paginator) {\n this._paginator = paginator;\n this._updateChangeSubscription();\n }\n /**\n * Subscribe to changes that should trigger an update to the table's rendered rows. When the\n * changes occur, process the current state of the filter, sort, and pagination along with\n * the provided base data and send it to the table for rendering.\n */\n _updateChangeSubscription() {\n // Sorting and/or pagination should be watched if MatSort and/or MatPaginator are provided.\n // The events should emit whenever the component emits a change or initializes, or if no\n // component is provided, a stream with just a null event should be provided.\n // The `sortChange` and `pageChange` acts as a signal to the combineLatests below so that the\n // pipeline can progress to the next step. Note that the value from these streams are not used,\n // they purely act as a signal to progress in the pipeline.\n const sortChange = this._sort\n ? merge(this._sort.sortChange, this._sort.initialized)\n : of(null);\n const pageChange = this._paginator\n ? merge(this._paginator.page, this._internalPageChanges, this._paginator.initialized)\n : of(null);\n const dataStream = this._data;\n // Watch for base data or filter changes to provide a filtered set of data.\n const filteredData = combineLatest([dataStream, this._filter]).pipe(map(([data]) => this._filterData(data)));\n // Watch for filtered data or sort changes to provide an ordered set of data.\n const orderedData = combineLatest([filteredData, sortChange]).pipe(map(([data]) => this._orderData(data)));\n // Watch for ordered data or page changes to provide a paged set of data.\n const paginatedData = combineLatest([orderedData, pageChange]).pipe(map(([data]) => this._pageData(data)));\n // Watched for paged data changes and send the result to the table to render.\n this._renderChangesSubscription?.unsubscribe();\n this._renderChangesSubscription = paginatedData.subscribe(data => this._renderData.next(data));\n }\n /**\n * Returns a filtered data array where each filter object contains the filter string within\n * the result of the filterTermAccessor function. If no filter is set, returns the data array\n * as provided.\n */\n _filterData(data) {\n // If there is a filter string, filter out data that does not contain it.\n // Each data object is converted to a string using the function defined by filterTermAccessor.\n // May be overridden for customization.\n this.filteredData =\n this.filter == null || this.filter === ''\n ? data\n : data.filter(obj => this.filterPredicate(obj, this.filter));\n if (this.paginator) {\n this._updatePaginator(this.filteredData.length);\n }\n return this.filteredData;\n }\n /**\n * Returns a sorted copy of the data if MatSort has a sort applied, otherwise just returns the\n * data array as provided. Uses the default data accessor for data lookup, unless a\n * sortDataAccessor function is defined.\n */\n _orderData(data) {\n // If there is no active sort or direction, return the data without trying to sort.\n if (!this.sort) {\n return data;\n }\n return this.sortData(data.slice(), this.sort);\n }\n /**\n * Returns a paged slice of the provided data array according to the provided MatPaginator's page\n * index and length. If there is no paginator provided, returns the data array as provided.\n */\n _pageData(data) {\n if (!this.paginator) {\n return data;\n }\n const startIndex = this.paginator.pageIndex * this.paginator.pageSize;\n return data.slice(startIndex, startIndex + this.paginator.pageSize);\n }\n /**\n * Updates the paginator to reflect the length of the filtered data, and makes sure that the page\n * index does not exceed the paginator's last page. Values are changed in a resolved promise to\n * guard against making property changes within a round of change detection.\n */\n _updatePaginator(filteredDataLength) {\n Promise.resolve().then(() => {\n const paginator = this.paginator;\n if (!paginator) {\n return;\n }\n paginator.length = filteredDataLength;\n // If the page index is set beyond the page, reduce it to the last page.\n if (paginator.pageIndex > 0) {\n const lastPageIndex = Math.ceil(paginator.length / paginator.pageSize) - 1 || 0;\n const newPageIndex = Math.min(paginator.pageIndex, lastPageIndex);\n if (newPageIndex !== paginator.pageIndex) {\n paginator.pageIndex = newPageIndex;\n // Since the paginator only emits after user-generated changes,\n // we need our own stream so we know to should re-render the data.\n this._internalPageChanges.next();\n }\n }\n });\n }\n /**\n * Used by the MatTable. Called when it connects to the data source.\n * @docs-private\n */\n connect() {\n if (!this._renderChangesSubscription) {\n this._updateChangeSubscription();\n }\n return this._renderData;\n }\n /**\n * Used by the MatTable. Called when it disconnects from the data source.\n * @docs-private\n */\n disconnect() {\n this._renderChangesSubscription?.unsubscribe();\n this._renderChangesSubscription = null;\n }\n}\n/**\n * Data source that accepts a client-side data array and includes native support of filtering,\n * sorting (using MatSort), and pagination (using MatPaginator).\n *\n * Allows for sort customization by overriding sortingDataAccessor, which defines how data\n * properties are accessed. Also allows for filter customization by overriding filterTermAccessor,\n * which defines how row data is converted to a string for filter matching.\n *\n * **Note:** This class is meant to be a simple data source to help you get started. As such\n * it isn't equipped to handle some more advanced cases like robust i18n support or server-side\n * interactions. If your app needs to support more advanced use cases, consider implementing your\n * own `DataSource`.\n */\nclass MatTableDataSource extends _MatTableDataSource {\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/**\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRecycleRows, MatRow, MatRowDef, MatTable, MatTableDataSource, MatTableModule, MatTextColumn, _MatTableDataSource };\n","import * as i7 from '@angular/cdk/a11y';\nimport { FocusKeyManager, A11yModule } from '@angular/cdk/a11y';\nimport * as i5 from '@angular/cdk/observers';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport * as i2 from '@angular/cdk/portal';\nimport { CdkPortal, TemplatePortal, CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport * as i1$2 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Inject, Optional, TemplateRef, Component, ChangeDetectionStrategy, ViewEncapsulation, ContentChild, ViewChild, Input, forwardRef, EventEmitter, Output, ContentChildren, QueryList, Attribute, NgModule } from '@angular/core';\nimport * as i4 from '@angular/material/core';\nimport { mixinDisabled, mixinColor, mixinDisableRipple, mixinTabIndex, MAT_RIPPLE_GLOBAL_OPTIONS, RippleRenderer, MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { take, startWith, distinctUntilChanged, takeUntil, switchMap, skip, filter } from 'rxjs/operators';\nimport { Subject, Subscription, fromEvent, of, merge, EMPTY, Observable, timer } from 'rxjs';\nimport * as i1 from '@angular/cdk/bidi';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport * as i1$1 from '@angular/cdk/scrolling';\nimport * as i3 from '@angular/cdk/platform';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { hasModifierKey, SPACE, ENTER } from '@angular/cdk/keycodes';\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 for the MatInkBar's Positioner. */\nconst _MAT_INK_BAR_POSITIONER = new InjectionToken('MatInkBarPositioner', {\n providedIn: 'root',\n factory: _MAT_INK_BAR_POSITIONER_FACTORY,\n});\n/**\n * The default positioner function for the MatInkBar.\n * @docs-private\n */\nfunction _MAT_INK_BAR_POSITIONER_FACTORY() {\n const method = (element) => ({\n left: element ? (element.offsetLeft || 0) + 'px' : '0',\n width: element ? (element.offsetWidth || 0) + 'px' : '0',\n });\n return method;\n}\n/**\n * The ink-bar is used to display and animate the line underneath the current active tab label.\n * @docs-private\n */\nclass MatInkBar {\n constructor(_elementRef, _ngZone, _inkBarPositioner, _animationMode) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._inkBarPositioner = _inkBarPositioner;\n this._animationMode = _animationMode;\n }\n /**\n * Calculates the styles from the provided element in order to align the ink-bar to that element.\n * Shows the ink bar if previously set as hidden.\n * @param element\n */\n alignToElement(element) {\n this.show();\n // `onStable` might not run for a while if the zone has already stabilized.\n // Wrap the call in `NgZone.run` to ensure that it runs relatively soon.\n this._ngZone.run(() => {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n const positions = this._inkBarPositioner(element);\n const inkBar = this._elementRef.nativeElement;\n inkBar.style.left = positions.left;\n inkBar.style.width = positions.width;\n });\n });\n }\n /** Shows the ink bar. */\n show() {\n this._elementRef.nativeElement.style.visibility = 'visible';\n }\n /** Hides the ink bar. */\n hide() {\n this._elementRef.nativeElement.style.visibility = 'hidden';\n }\n}\nMatInkBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatInkBar, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: _MAT_INK_BAR_POSITIONER }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatInkBar.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatInkBar, selector: \"mat-ink-bar\", host: { properties: { \"class._mat-animation-noopable\": \"_animationMode === 'NoopAnimations'\" }, classAttribute: \"mat-ink-bar\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatInkBar, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-ink-bar',\n host: {\n 'class': 'mat-ink-bar',\n '[class._mat-animation-noopable]': `_animationMode === 'NoopAnimations'`,\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [_MAT_INK_BAR_POSITIONER]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\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 * Injection token that can be used to reference instances of `MatTabContent`. It serves as\n * alternative token to the actual `MatTabContent` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_TAB_CONTENT = new InjectionToken('MatTabContent');\n/** Decorates the `ng-template` tags and reads out the template from it. */\nclass MatTabContent {\n constructor(/** Content for the tab. */ template) {\n this.template = template;\n }\n}\nMatTabContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabContent, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabContent, selector: \"[matTabContent]\", providers: [{ provide: MAT_TAB_CONTENT, useExisting: MatTabContent }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabContent, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTabContent]',\n providers: [{ provide: MAT_TAB_CONTENT, useExisting: MatTabContent }],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\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 * Injection token that can be used to reference instances of `MatTabLabel`. It serves as\n * alternative token to the actual `MatTabLabel` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_TAB_LABEL = new InjectionToken('MatTabLabel');\n/**\n * Used to provide a tab label to a tab without causing a circular dependency.\n * @docs-private\n */\nconst MAT_TAB = new InjectionToken('MAT_TAB');\n/** Used to flag tab labels for use with the portal directive */\nclass MatTabLabel extends CdkPortal {\n constructor(templateRef, viewContainerRef, _closestTab) {\n super(templateRef, viewContainerRef);\n this._closestTab = _closestTab;\n }\n}\nMatTabLabel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLabel, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: MAT_TAB, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabLabel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabLabel, selector: \"[mat-tab-label], [matTabLabel]\", providers: [{ provide: MAT_TAB_LABEL, useExisting: MatTabLabel }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLabel, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-tab-label], [matTabLabel]',\n providers: [{ provide: MAT_TAB_LABEL, useExisting: MatTabLabel }],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TAB]\n }, {\n type: Optional\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// Boilerplate for applying mixins to MatTab.\n/** @docs-private */\nconst _MatTabBase = mixinDisabled(class {\n});\n/**\n * Used to provide a tab group to a tab without causing a circular dependency.\n * @docs-private\n */\nconst MAT_TAB_GROUP = new InjectionToken('MAT_TAB_GROUP');\nclass MatTab extends _MatTabBase {\n constructor(_viewContainerRef, _closestTabGroup) {\n super();\n this._viewContainerRef = _viewContainerRef;\n this._closestTabGroup = _closestTabGroup;\n /** Plain text label for the tab, used when there is no template label. */\n this.textLabel = '';\n /** Portal that will be the hosted content of the tab */\n this._contentPortal = null;\n /** Emits whenever the internal state of the tab changes. */\n this._stateChanges = new Subject();\n /**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n */\n this.position = null;\n /**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n */\n this.origin = null;\n /**\n * Whether the tab is currently active.\n */\n this.isActive = false;\n }\n /** Content for the tab label given by ``. */\n get templateLabel() {\n return this._templateLabel;\n }\n set templateLabel(value) {\n this._setTemplateLabelInput(value);\n }\n /** @docs-private */\n get content() {\n return this._contentPortal;\n }\n ngOnChanges(changes) {\n if (changes.hasOwnProperty('textLabel') || changes.hasOwnProperty('disabled')) {\n this._stateChanges.next();\n }\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n ngOnInit() {\n this._contentPortal = new TemplatePortal(this._explicitContent || this._implicitContent, this._viewContainerRef);\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setTemplateLabelInput(value) {\n // Only update the label if the query managed to find one. This works around an issue where a\n // user may have manually set `templateLabel` during creation mode, which would then get\n // clobbered by `undefined` when the query resolves. Also note that we check that the closest\n // tab matches the current one so that we don't pick up labels from nested tabs.\n if (value && value._closestTab === this) {\n this._templateLabel = value;\n }\n }\n}\nMatTab.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTab, deps: [{ token: i0.ViewContainerRef }, { token: MAT_TAB_GROUP, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTab.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTab, selector: \"mat-tab\", inputs: { disabled: \"disabled\", textLabel: [\"label\", \"textLabel\"], ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], labelClass: \"labelClass\", bodyClass: \"bodyClass\" }, providers: [{ provide: MAT_TAB, useExisting: MatTab }], queries: [{ propertyName: \"templateLabel\", first: true, predicate: MAT_TAB_LABEL, descendants: true }, { propertyName: \"_explicitContent\", first: true, predicate: MAT_TAB_CONTENT, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: \"_implicitContent\", first: true, predicate: TemplateRef, descendants: true, static: true }], exportAs: [\"matTab\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"\\n\\n\", changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTab, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab', inputs: ['disabled'], changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, exportAs: 'matTab', providers: [{ provide: MAT_TAB, useExisting: MatTab }], template: \"\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TAB_GROUP]\n }, {\n type: Optional\n }] }]; }, propDecorators: { templateLabel: [{\n type: ContentChild,\n args: [MAT_TAB_LABEL]\n }], _explicitContent: [{\n type: ContentChild,\n args: [MAT_TAB_CONTENT, { read: TemplateRef, static: true }]\n }], _implicitContent: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }], textLabel: [{\n type: Input,\n args: ['label']\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], labelClass: [{\n type: Input\n }], bodyClass: [{\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/**\n * Animations used by the Material tabs.\n * @docs-private\n */\nconst matTabsAnimations = {\n /** Animation translates a tab along the X axis. */\n translateTab: trigger('translateTab', [\n // Transitions to `none` instead of 0, because some browsers might blur the content.\n state('center, void, left-origin-center, right-origin-center', style({ transform: 'none' })),\n // If the tab is either on the left or right, we additionally add a `min-height` of 1px\n // in order to ensure that the element has a height before its state changes. This is\n // necessary because Chrome does seem to skip the transition in RTL mode if the element does\n // not have a static height and is not rendered. See related issue: #9465\n state('left', style({\n transform: 'translate3d(-100%, 0, 0)',\n minHeight: '1px',\n // Normally this is redundant since we detach the content from the DOM, but if the user\n // opted into keeping the content in the DOM, we have to hide it so it isn't focusable.\n visibility: 'hidden',\n })),\n state('right', style({\n transform: 'translate3d(100%, 0, 0)',\n minHeight: '1px',\n visibility: 'hidden',\n })),\n transition('* => left, * => right, left => center, right => center', animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')),\n transition('void => left-origin-center', [\n style({ transform: 'translate3d(-100%, 0, 0)', visibility: 'hidden' }),\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)'),\n ]),\n transition('void => right-origin-center', [\n style({ transform: 'translate3d(100%, 0, 0)', visibility: 'hidden' }),\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)'),\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 * The portal host directive for the contents of the tab.\n * @docs-private\n */\nclass MatTabBodyPortal extends CdkPortalOutlet {\n constructor(componentFactoryResolver, viewContainerRef, _host, _document) {\n super(componentFactoryResolver, viewContainerRef, _document);\n this._host = _host;\n /** Subscription to events for when the tab body begins centering. */\n this._centeringSub = Subscription.EMPTY;\n /** Subscription to events for when the tab body finishes leaving from center position. */\n this._leavingSub = Subscription.EMPTY;\n }\n /** Set initial visibility or set up subscription for changing visibility. */\n ngOnInit() {\n super.ngOnInit();\n this._centeringSub = this._host._beforeCentering\n .pipe(startWith(this._host._isCenterPosition(this._host._position)))\n .subscribe((isCentering) => {\n if (isCentering && !this.hasAttached()) {\n this.attach(this._host._content);\n }\n });\n this._leavingSub = this._host._afterLeavingCenter.subscribe(() => {\n if (!this._host.preserveContent) {\n this.detach();\n }\n });\n }\n /** Clean up centering subscription. */\n ngOnDestroy() {\n super.ngOnDestroy();\n this._centeringSub.unsubscribe();\n this._leavingSub.unsubscribe();\n }\n}\nMatTabBodyPortal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabBodyPortal, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ViewContainerRef }, { token: forwardRef(() => MatTabBody) }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabBodyPortal.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabBodyPortal, selector: \"[matTabBodyHost]\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabBodyPortal, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTabBodyHost]',\n }]\n }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ViewContainerRef }, { type: MatTabBody, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatTabBody)]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; } });\n/**\n * Base class with all of the `MatTabBody` functionality.\n * @docs-private\n */\nclass _MatTabBodyBase {\n constructor(_elementRef, _dir, changeDetectorRef) {\n this._elementRef = _elementRef;\n this._dir = _dir;\n /** Subscription to the directionality change observable. */\n this._dirChangeSubscription = Subscription.EMPTY;\n /** Emits when an animation on the tab is complete. */\n this._translateTabComplete = new Subject();\n /** Event emitted when the tab begins to animate towards the center as the active tab. */\n this._onCentering = new EventEmitter();\n /** Event emitted before the centering of the tab begins. */\n this._beforeCentering = new EventEmitter();\n /** Event emitted before the centering of the tab begins. */\n this._afterLeavingCenter = new EventEmitter();\n /** Event emitted when the tab completes its animation towards the center. */\n this._onCentered = new EventEmitter(true);\n // Note that the default value will always be overwritten by `MatTabBody`, but we need one\n // anyway to prevent the animations module from throwing an error if the body is used on its own.\n /** Duration for the tab's animation. */\n this.animationDuration = '500ms';\n /** Whether the tab's content should be kept in the DOM while it's off-screen. */\n this.preserveContent = false;\n if (_dir) {\n this._dirChangeSubscription = _dir.change.subscribe((dir) => {\n this._computePositionAnimationState(dir);\n changeDetectorRef.markForCheck();\n });\n }\n // Ensure that we get unique animation events, because the `.done` callback can get\n // invoked twice in some browsers. See https://github.com/angular/angular/issues/24084.\n this._translateTabComplete\n .pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n }))\n .subscribe(event => {\n // If the transition to the center is complete, emit an event.\n if (this._isCenterPosition(event.toState) && this._isCenterPosition(this._position)) {\n this._onCentered.emit();\n }\n if (this._isCenterPosition(event.fromState) && !this._isCenterPosition(this._position)) {\n this._afterLeavingCenter.emit();\n }\n });\n }\n /** The shifted index position of the tab body, where zero represents the active center tab. */\n set position(position) {\n this._positionIndex = position;\n this._computePositionAnimationState();\n }\n /**\n * After initialized, check if the content is centered and has an origin. If so, set the\n * special position states that transition the tab from the left or right before centering.\n */\n ngOnInit() {\n if (this._position == 'center' && this.origin != null) {\n this._position = this._computePositionFromOrigin(this.origin);\n }\n }\n ngOnDestroy() {\n this._dirChangeSubscription.unsubscribe();\n this._translateTabComplete.complete();\n }\n _onTranslateTabStarted(event) {\n const isCentering = this._isCenterPosition(event.toState);\n this._beforeCentering.emit(isCentering);\n if (isCentering) {\n this._onCentering.emit(this._elementRef.nativeElement.clientHeight);\n }\n }\n /** The text direction of the containing app. */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Whether the provided position state is considered center, regardless of origin. */\n _isCenterPosition(position) {\n return (position == 'center' || position == 'left-origin-center' || position == 'right-origin-center');\n }\n /** Computes the position state that will be used for the tab-body animation trigger. */\n _computePositionAnimationState(dir = this._getLayoutDirection()) {\n if (this._positionIndex < 0) {\n this._position = dir == 'ltr' ? 'left' : 'right';\n }\n else if (this._positionIndex > 0) {\n this._position = dir == 'ltr' ? 'right' : 'left';\n }\n else {\n this._position = 'center';\n }\n }\n /**\n * Computes the position state based on the specified origin position. This is used if the\n * tab is becoming visible immediately after creation.\n */\n _computePositionFromOrigin(origin) {\n const dir = this._getLayoutDirection();\n if ((dir == 'ltr' && origin <= 0) || (dir == 'rtl' && origin > 0)) {\n return 'left-origin-center';\n }\n return 'right-origin-center';\n }\n}\n_MatTabBodyBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabBodyBase, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabBodyBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatTabBodyBase, inputs: { _content: [\"content\", \"_content\"], origin: \"origin\", animationDuration: \"animationDuration\", preserveContent: \"preserveContent\", position: \"position\" }, outputs: { _onCentering: \"_onCentering\", _beforeCentering: \"_beforeCentering\", _afterLeavingCenter: \"_afterLeavingCenter\", _onCentered: \"_onCentered\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabBodyBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { _onCentering: [{\n type: Output\n }], _beforeCentering: [{\n type: Output\n }], _afterLeavingCenter: [{\n type: Output\n }], _onCentered: [{\n type: Output\n }], _content: [{\n type: Input,\n args: ['content']\n }], origin: [{\n type: Input\n }], animationDuration: [{\n type: Input\n }], preserveContent: [{\n type: Input\n }], position: [{\n type: Input\n }] } });\n/**\n * Wrapper for the contents of a tab.\n * @docs-private\n */\nclass MatTabBody extends _MatTabBodyBase {\n constructor(elementRef, dir, changeDetectorRef) {\n super(elementRef, dir, changeDetectorRef);\n }\n}\nMatTabBody.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabBody, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nMatTabBody.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabBody, selector: \"mat-tab-body\", host: { classAttribute: \"mat-tab-body\" }, viewQueries: [{ propertyName: \"_portalHost\", first: true, predicate: CdkPortalOutlet, descendants: true }], usesInheritance: true, ngImport: i0, template: \"
\\n \\n
\\n\", styles: [\".mat-tab-body-content{height:100%;overflow:auto}.mat-tab-group-dynamic-height .mat-tab-body-content{overflow:hidden}.mat-tab-body-content[style*=\\\"visibility: hidden\\\"]{display:none}\"], dependencies: [{ kind: \"directive\", type: MatTabBodyPortal, selector: \"[matTabBodyHost]\" }], animations: [matTabsAnimations.translateTab], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabBody, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab-body', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, animations: [matTabsAnimations.translateTab], host: {\n 'class': 'mat-tab-body',\n }, template: \"
\\n \\n
\\n\", styles: [\".mat-tab-body-content{height:100%;overflow:auto}.mat-tab-group-dynamic-height .mat-tab-body-content{overflow:hidden}.mat-tab-body-content[style*=\\\"visibility: hidden\\\"]{display:none}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { _portalHost: [{\n type: ViewChild,\n args: [CdkPortalOutlet]\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 that can be used to provide the default options the tabs module. */\nconst MAT_TABS_CONFIG = new InjectionToken('MAT_TABS_CONFIG');\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// Boilerplate for applying mixins to MatTabLabelWrapper.\n/** @docs-private */\nconst _MatTabLabelWrapperBase = mixinDisabled(class {\n});\n/**\n * Used in the `mat-tab-group` view to display tab labels.\n * @docs-private\n */\nclass MatTabLabelWrapper extends _MatTabLabelWrapperBase {\n constructor(elementRef) {\n super();\n this.elementRef = elementRef;\n }\n /** Sets focus on the wrapper element */\n focus() {\n this.elementRef.nativeElement.focus();\n }\n getOffsetLeft() {\n return this.elementRef.nativeElement.offsetLeft;\n }\n getOffsetWidth() {\n return this.elementRef.nativeElement.offsetWidth;\n }\n}\nMatTabLabelWrapper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLabelWrapper, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabLabelWrapper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabLabelWrapper, selector: \"[matTabLabelWrapper]\", inputs: { disabled: \"disabled\" }, host: { properties: { \"class.mat-tab-disabled\": \"disabled\", \"attr.aria-disabled\": \"!!disabled\" } }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLabelWrapper, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTabLabelWrapper]',\n inputs: ['disabled'],\n host: {\n '[class.mat-tab-disabled]': 'disabled',\n '[attr.aria-disabled]': '!!disabled',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\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/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n});\n/**\n * The distance in pixels that will be overshot when scrolling a tab label into view. This helps\n * provide a small affordance to the label next to it.\n */\nconst EXAGGERATED_OVERSCROLL = 60;\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst HEADER_SCROLL_DELAY = 650;\n/**\n * Interval in milliseconds at which to scroll the header\n * while the user is holding their pointer.\n */\nconst HEADER_SCROLL_INTERVAL = 100;\n/**\n * Base class for a tab header that supported pagination.\n * @docs-private\n */\nclass MatPaginatedTabHeader {\n constructor(_elementRef, _changeDetectorRef, _viewportRuler, _dir, _ngZone, _platform, _animationMode) {\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._viewportRuler = _viewportRuler;\n this._dir = _dir;\n this._ngZone = _ngZone;\n this._platform = _platform;\n this._animationMode = _animationMode;\n /** The distance in pixels that the tab labels should be translated to the left. */\n this._scrollDistance = 0;\n /** Whether the header should scroll to the selected index after the view has been checked. */\n this._selectedIndexChanged = false;\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Whether the controls for pagination should be displayed */\n this._showPaginationControls = false;\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n this._disableScrollAfter = true;\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n this._disableScrollBefore = true;\n /** Stream that will stop the automated scrolling. */\n this._stopScrolling = new Subject();\n this._disablePagination = false;\n this._selectedIndex = 0;\n /** Event emitted when the option is selected. */\n this.selectFocusedIndex = new EventEmitter();\n /** Event emitted when a label is focused. */\n this.indexFocused = new EventEmitter();\n // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n _ngZone.runOutsideAngular(() => {\n fromEvent(_elementRef.nativeElement, 'mouseleave')\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._stopInterval();\n });\n });\n }\n /**\n * Whether pagination should be disabled. This can be used to avoid unnecessary\n * layout recalculations if it's known that pagination won't be required.\n */\n get disablePagination() {\n return this._disablePagination;\n }\n set disablePagination(value) {\n this._disablePagination = coerceBooleanProperty(value);\n }\n /** The index of the active tab. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(value) {\n value = coerceNumberProperty(value);\n if (this._selectedIndex != value) {\n this._selectedIndexChanged = true;\n this._selectedIndex = value;\n if (this._keyManager) {\n this._keyManager.updateActiveItem(value);\n }\n }\n }\n ngAfterViewInit() {\n // We need to handle these events manually, because we want to bind passive event listeners.\n fromEvent(this._previousPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('before');\n });\n fromEvent(this._nextPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('after');\n });\n }\n ngAfterContentInit() {\n const dirChange = this._dir ? this._dir.change : of('ltr');\n const resize = this._viewportRuler.change(150);\n const realign = () => {\n this.updatePagination();\n this._alignInkBarToSelectedTab();\n };\n this._keyManager = new FocusKeyManager(this._items)\n .withHorizontalOrientation(this._getLayoutDirection())\n .withHomeAndEnd()\n .withWrap();\n this._keyManager.updateActiveItem(this._selectedIndex);\n // Defer the first call in order to allow for slower browsers to lay out the elements.\n // This helps in cases where the user lands directly on a page with paginated tabs.\n // Note that we use `onStable` instead of `requestAnimationFrame`, because the latter\n // can hold up tests that are in a background tab.\n this._ngZone.onStable.pipe(take(1)).subscribe(realign);\n // On dir change or window resize, realign the ink bar and update the orientation of\n // the key manager if the direction has changed.\n merge(dirChange, resize, this._items.changes, this._itemsResized())\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n // We need to defer this to give the browser some time to recalculate\n // the element dimensions. The call has to be wrapped in `NgZone.run`,\n // because the viewport change handler runs outside of Angular.\n this._ngZone.run(() => {\n Promise.resolve().then(() => {\n // Clamp the scroll distance, because it can change with the number of tabs.\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), this._scrollDistance));\n realign();\n });\n });\n this._keyManager.withHorizontalOrientation(this._getLayoutDirection());\n });\n // If there is a change in the focus key manager we need to emit the `indexFocused`\n // event in order to provide a public event that notifies about focus changes. Also we realign\n // the tabs container by scrolling the new focused tab into the visible section.\n this._keyManager.change.pipe(takeUntil(this._destroyed)).subscribe(newFocusIndex => {\n this.indexFocused.emit(newFocusIndex);\n this._setTabFocus(newFocusIndex);\n });\n }\n /** Sends any changes that could affect the layout of the items. */\n _itemsResized() {\n if (typeof ResizeObserver !== 'function') {\n return EMPTY;\n }\n return this._items.changes.pipe(startWith(this._items), switchMap((tabItems) => new Observable((observer) => this._ngZone.runOutsideAngular(() => {\n const resizeObserver = new ResizeObserver(entries => observer.next(entries));\n tabItems.forEach(item => resizeObserver.observe(item.elementRef.nativeElement));\n return () => {\n resizeObserver.disconnect();\n };\n }))), \n // Skip the first emit since the resize observer emits when an item\n // is observed for new items when the tab is already inserted\n skip(1), \n // Skip emissions where all the elements are invisible since we don't want\n // the header to try and re-render with invalid measurements. See #25574.\n filter(entries => entries.some(e => e.contentRect.width > 0 && e.contentRect.height > 0)));\n }\n ngAfterContentChecked() {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount != this._items.length) {\n this.updatePagination();\n this._tabLabelCount = this._items.length;\n this._changeDetectorRef.markForCheck();\n }\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex);\n this._checkScrollingControls();\n this._alignInkBarToSelectedTab();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this._stopScrolling.complete();\n }\n /** Handles keyboard events on the header. */\n _handleKeydown(event) {\n // We don't handle any key bindings with a modifier key.\n if (hasModifierKey(event)) {\n return;\n }\n switch (event.keyCode) {\n case ENTER:\n case SPACE:\n if (this.focusIndex !== this.selectedIndex) {\n this.selectFocusedIndex.emit(this.focusIndex);\n this._itemSelected(event);\n }\n break;\n default:\n this._keyManager.onKeydown(event);\n }\n }\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n */\n _onContentChanges() {\n const textContent = this._elementRef.nativeElement.textContent;\n // We need to diff the text content of the header, because the MutationObserver callback\n // will fire even if the text content didn't change which is inefficient and is prone\n // to infinite loops if a poorly constructed expression is passed in (see #14249).\n if (textContent !== this._currentTextContent) {\n this._currentTextContent = textContent || '';\n // The content observer runs outside the `NgZone` by default, which\n // means that we need to bring the callback back in ourselves.\n this._ngZone.run(() => {\n this.updatePagination();\n this._alignInkBarToSelectedTab();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /**\n * Updates the view whether pagination should be enabled or not.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex() {\n return this._keyManager ? this._keyManager.activeItemIndex : 0;\n }\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value) {\n if (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) {\n return;\n }\n this._keyManager.setActiveItem(value);\n }\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n */\n _isValidIndex(index) {\n if (!this._items) {\n return true;\n }\n const tab = this._items ? this._items.toArray()[index] : null;\n return !!tab && !tab.disabled;\n }\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n */\n _setTabFocus(tabIndex) {\n if (this._showPaginationControls) {\n this._scrollToLabel(tabIndex);\n }\n if (this._items && this._items.length) {\n this._items.toArray()[tabIndex].focus();\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const containerEl = this._tabListContainer.nativeElement;\n const dir = this._getLayoutDirection();\n if (dir == 'ltr') {\n containerEl.scrollLeft = 0;\n }\n else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n /** The layout direction of the containing app. */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n _updateTabScrollPosition() {\n if (this.disablePagination) {\n return;\n }\n const scrollDistance = this.scrollDistance;\n const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n // Don't use `translate3d` here because we don't want to create a new layer. A new layer\n // seems to cause flickering and overflow in Internet Explorer. For example, the ink bar\n // and ripples will exceed the boundaries of the visible tab bar.\n // See: https://github.com/angular/components/issues/10276\n // We round the `transform` here, because transforms with sub-pixel precision cause some\n // browsers to blur the content of the element.\n this._tabList.nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n // Setting the `transform` on IE will change the scroll offset of the parent, causing the\n // position to be thrown off in some cases. We have to reset it ourselves to ensure that\n // it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing\n // with the scroll position throws off Chrome 71+ in RTL mode (see #14689).\n if (this._platform.TRIDENT || this._platform.EDGE) {\n this._tabListContainer.nativeElement.scrollLeft = 0;\n }\n }\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance() {\n return this._scrollDistance;\n }\n set scrollDistance(value) {\n this._scrollTo(value);\n }\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollHeader(direction) {\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n // Move the scroll distance one-third the length of the tab list's viewport.\n const scrollAmount = ((direction == 'before' ? -1 : 1) * viewLength) / 3;\n return this._scrollTo(this._scrollDistance + scrollAmount);\n }\n /** Handles click events on the pagination arrows. */\n _handlePaginatorClick(direction) {\n this._stopInterval();\n this._scrollHeader(direction);\n }\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollToLabel(labelIndex) {\n if (this.disablePagination) {\n return;\n }\n const selectedLabel = this._items ? this._items.toArray()[labelIndex] : null;\n if (!selectedLabel) {\n return;\n }\n // The view length is the visible width of the tab labels.\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n const { offsetLeft, offsetWidth } = selectedLabel.elementRef.nativeElement;\n let labelBeforePos, labelAfterPos;\n if (this._getLayoutDirection() == 'ltr') {\n labelBeforePos = offsetLeft;\n labelAfterPos = labelBeforePos + offsetWidth;\n }\n else {\n labelAfterPos = this._tabListInner.nativeElement.offsetWidth - offsetLeft;\n labelBeforePos = labelAfterPos - offsetWidth;\n }\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;\n }\n else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;\n }\n }\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkPaginationEnabled() {\n if (this.disablePagination) {\n this._showPaginationControls = false;\n }\n else {\n const isEnabled = this._tabListInner.nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n if (isEnabled !== this._showPaginationControls) {\n this._changeDetectorRef.markForCheck();\n }\n this._showPaginationControls = isEnabled;\n }\n }\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkScrollingControls() {\n if (this.disablePagination) {\n this._disableScrollAfter = this._disableScrollBefore = true;\n }\n else {\n // Check if the pagination arrows should be activated.\n this._disableScrollBefore = this.scrollDistance == 0;\n this._disableScrollAfter = this.scrollDistance == this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _getMaxScrollDistance() {\n const lengthOfTabList = this._tabListInner.nativeElement.scrollWidth;\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n return lengthOfTabList - viewLength || 0;\n }\n /** Tells the ink-bar to align itself to the current label wrapper */\n _alignInkBarToSelectedTab() {\n const selectedItem = this._items && this._items.length ? this._items.toArray()[this.selectedIndex] : null;\n const selectedLabelWrapper = selectedItem ? selectedItem.elementRef.nativeElement : null;\n if (selectedLabelWrapper) {\n this._inkBar.alignToElement(selectedLabelWrapper);\n }\n else {\n this._inkBar.hide();\n }\n }\n /** Stops the currently-running paginator interval. */\n _stopInterval() {\n this._stopScrolling.next();\n }\n /**\n * Handles the user pressing down on one of the paginators.\n * Starts scrolling the header after a certain amount of time.\n * @param direction In which direction the paginator should be scrolled.\n */\n _handlePaginatorPress(direction, mouseEvent) {\n // Don't start auto scrolling for right mouse button clicks. Note that we shouldn't have to\n // null check the `button`, but we do it so we don't break tests that use fake events.\n if (mouseEvent && mouseEvent.button != null && mouseEvent.button !== 0) {\n return;\n }\n // Avoid overlapping timers.\n this._stopInterval();\n // Start a timer after the delay and keep firing based on the interval.\n timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\n // Keep the timer going until something tells it to stop or the component is destroyed.\n .pipe(takeUntil(merge(this._stopScrolling, this._destroyed)))\n .subscribe(() => {\n const { maxScrollDistance, distance } = this._scrollHeader(direction);\n // Stop the timer if we've reached the start or the end.\n if (distance === 0 || distance >= maxScrollDistance) {\n this._stopInterval();\n }\n });\n }\n /**\n * Scrolls the header to a given position.\n * @param position Position to which to scroll.\n * @returns Information on the current scroll distance and the maximum.\n */\n _scrollTo(position) {\n if (this.disablePagination) {\n return { maxScrollDistance: 0, distance: 0 };\n }\n const maxScrollDistance = this._getMaxScrollDistance();\n this._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n return { maxScrollDistance, distance: this._scrollDistance };\n }\n}\nMatPaginatedTabHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatPaginatedTabHeader, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatPaginatedTabHeader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatPaginatedTabHeader, inputs: { disablePagination: \"disablePagination\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatPaginatedTabHeader, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { disablePagination: [{\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/**\n * Base class with all of the `MatTabHeader` functionality.\n * @docs-private\n */\nclass _MatTabHeaderBase extends MatPaginatedTabHeader {\n constructor(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n this._disableRipple = false;\n }\n /** Whether the ripple effect is disabled or not. */\n get disableRipple() {\n return this._disableRipple;\n }\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n _itemSelected(event) {\n event.preventDefault();\n }\n}\n_MatTabHeaderBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabHeaderBase, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabHeaderBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatTabHeaderBase, inputs: { disableRipple: \"disableRipple\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabHeaderBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { disableRipple: [{\n type: Input\n }] } });\n/**\n * The header of the tab group which displays a list of all the tabs in the tab group. Includes\n * an ink bar that follows the currently selected tab. When the tabs list's width exceeds the\n * width of the header container, then arrows will be displayed to allow the user to scroll\n * left and right across the header.\n * @docs-private\n */\nclass MatTabHeader extends _MatTabHeaderBase {\n constructor(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n }\n}\nMatTabHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabHeader, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTabHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabHeader, selector: \"mat-tab-header\", inputs: { selectedIndex: \"selectedIndex\" }, outputs: { selectFocusedIndex: \"selectFocusedIndex\", indexFocused: \"indexFocused\" }, host: { properties: { \"class.mat-tab-header-pagination-controls-enabled\": \"_showPaginationControls\", \"class.mat-tab-header-rtl\": \"_getLayoutDirection() == 'rtl'\" }, classAttribute: \"mat-tab-header\" }, queries: [{ propertyName: \"_items\", predicate: MatTabLabelWrapper }], viewQueries: [{ propertyName: \"_inkBar\", first: true, predicate: MatInkBar, descendants: true, static: true }, { propertyName: \"_tabListContainer\", first: true, predicate: [\"tabListContainer\"], descendants: true, static: true }, { propertyName: \"_tabList\", first: true, predicate: [\"tabList\"], descendants: true, static: true }, { propertyName: \"_tabListInner\", first: true, predicate: [\"tabListInner\"], descendants: true, static: true }, { propertyName: \"_nextPaginator\", first: true, predicate: [\"nextPaginator\"], descendants: true }, { propertyName: \"_previousPaginator\", first: true, predicate: [\"previousPaginator\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n\\n
\\n \\n
\\n \\n
\\n \\n
\\n\\n\\n\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-labels{display:flex}[mat-align-tabs=center]>.mat-tab-header .mat-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-tab-header .mat-tab-labels{justify-content:flex-end}.mat-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-list._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}.mat-tab-label::before{margin:5px}@media(max-width: 599px){.mat-tab-label{min-width:72px}}\"], dependencies: [{ kind: \"directive\", type: i4.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { kind: \"directive\", type: i5.CdkObserveContent, selector: \"[cdkObserveContent]\", inputs: [\"cdkObserveContentDisabled\", \"debounce\"], outputs: [\"cdkObserveContent\"], exportAs: [\"cdkObserveContent\"] }, { kind: \"directive\", type: MatInkBar, selector: \"mat-ink-bar\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab-header', inputs: ['selectedIndex'], outputs: ['selectFocusedIndex', 'indexFocused'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, host: {\n 'class': 'mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n }, template: \"\\n\\n
\\n \\n
\\n \\n
\\n \\n
\\n\\n\\n\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-labels{display:flex}[mat-align-tabs=center]>.mat-tab-header .mat-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-tab-header .mat-tab-labels{justify-content:flex-end}.mat-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-list._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}.mat-tab-label::before{margin:5px}@media(max-width: 599px){.mat-tab-label{min-width:72px}}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { _items: [{\n type: ContentChildren,\n args: [MatTabLabelWrapper, { descendants: false }]\n }], _inkBar: [{\n type: ViewChild,\n args: [MatInkBar, { static: true }]\n }], _tabListContainer: [{\n type: ViewChild,\n args: ['tabListContainer', { static: true }]\n }], _tabList: [{\n type: ViewChild,\n args: ['tabList', { static: true }]\n }], _tabListInner: [{\n type: ViewChild,\n args: ['tabListInner', { static: true }]\n }], _nextPaginator: [{\n type: ViewChild,\n args: ['nextPaginator']\n }], _previousPaginator: [{\n type: ViewChild,\n args: ['previousPaginator']\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 unique ID's for each tab component */\nlet nextId = 0;\n/** A simple change event emitted on focus or selection changes. */\nclass MatTabChangeEvent {\n}\n// Boilerplate for applying mixins to MatTabGroup.\n/** @docs-private */\nconst _MatTabGroupMixinBase = mixinColor(mixinDisableRipple(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}), 'primary');\n/**\n * Base class with all of the `MatTabGroupBase` functionality.\n * @docs-private\n */\nclass _MatTabGroupBase extends _MatTabGroupMixinBase {\n constructor(elementRef, _changeDetectorRef, defaultConfig, _animationMode) {\n super(elementRef);\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** All of the tabs that belong to the group. */\n this._tabs = new QueryList();\n /** The tab index that should be selected after the content has been checked. */\n this._indexToSelect = 0;\n /** Index of the tab that was focused last. */\n this._lastFocusedTabIndex = null;\n /** Snapshot of the height of the tab body wrapper before another tab is activated. */\n this._tabBodyWrapperHeight = 0;\n /** Subscription to tabs being added/removed. */\n this._tabsSubscription = Subscription.EMPTY;\n /** Subscription to changes in the tab labels. */\n this._tabLabelSubscription = Subscription.EMPTY;\n this._dynamicHeight = false;\n this._selectedIndex = null;\n /** Position of the tab header. */\n this.headerPosition = 'above';\n this._disablePagination = false;\n this._preserveContent = false;\n /** Output to enable support for two-way binding on `[(selectedIndex)]` */\n this.selectedIndexChange = new EventEmitter();\n /** Event emitted when focus has changed within a tab group. */\n this.focusChange = new EventEmitter();\n /** Event emitted when the body animation has completed */\n this.animationDone = new EventEmitter();\n /** Event emitted when the tab selection has changed. */\n this.selectedTabChange = new EventEmitter(true);\n this._groupId = nextId++;\n this.animationDuration =\n defaultConfig && defaultConfig.animationDuration ? defaultConfig.animationDuration : '500ms';\n this.disablePagination =\n defaultConfig && defaultConfig.disablePagination != null\n ? defaultConfig.disablePagination\n : false;\n this.dynamicHeight =\n defaultConfig && defaultConfig.dynamicHeight != null ? defaultConfig.dynamicHeight : false;\n this.contentTabIndex = defaultConfig?.contentTabIndex ?? null;\n this.preserveContent = !!defaultConfig?.preserveContent;\n }\n /** Whether the tab group should grow to the size of the active tab. */\n get dynamicHeight() {\n return this._dynamicHeight;\n }\n set dynamicHeight(value) {\n this._dynamicHeight = coerceBooleanProperty(value);\n }\n /** The index of the active tab. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(value) {\n this._indexToSelect = coerceNumberProperty(value, null);\n }\n /** Duration for the tab animation. Will be normalized to milliseconds if no units are set. */\n get animationDuration() {\n return this._animationDuration;\n }\n set animationDuration(value) {\n this._animationDuration = /^\\d+$/.test(value + '') ? value + 'ms' : value;\n }\n /**\n * `tabindex` to be set on the inner element that wraps the tab content. Can be used for improved\n * accessibility when the tab does not have focusable elements or if it has scrollable content.\n * The `tabindex` will be removed automatically for inactive tabs.\n * Read more at https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-2/tabs.html\n */\n get contentTabIndex() {\n return this._contentTabIndex;\n }\n set contentTabIndex(value) {\n this._contentTabIndex = coerceNumberProperty(value, null);\n }\n /**\n * Whether pagination should be disabled. This can be used to avoid unnecessary\n * layout recalculations if it's known that pagination won't be required.\n */\n get disablePagination() {\n return this._disablePagination;\n }\n set disablePagination(value) {\n this._disablePagination = coerceBooleanProperty(value);\n }\n /**\n * By default tabs remove their content from the DOM while it's off-screen.\n * Setting this to `true` will keep it in the DOM which will prevent elements\n * like iframes and videos from reloading next time it comes back into the view.\n */\n get preserveContent() {\n return this._preserveContent;\n }\n set preserveContent(value) {\n this._preserveContent = coerceBooleanProperty(value);\n }\n /** Background color of the tab group. */\n get backgroundColor() {\n return this._backgroundColor;\n }\n set backgroundColor(value) {\n const nativeElement = this._elementRef.nativeElement;\n nativeElement.classList.remove(`mat-background-${this.backgroundColor}`);\n if (value) {\n nativeElement.classList.add(`mat-background-${value}`);\n }\n this._backgroundColor = value;\n }\n /**\n * After the content is checked, this component knows what tabs have been defined\n * and what the selected index should be. This is where we can know exactly what position\n * each tab should be in according to the new selected index, and additionally we know how\n * a new selected tab should transition in (from the left or right).\n */\n ngAfterContentChecked() {\n // Don't clamp the `indexToSelect` immediately in the setter because it can happen that\n // the amount of tabs changes before the actual change detection runs.\n const indexToSelect = (this._indexToSelect = this._clampTabIndex(this._indexToSelect));\n // If there is a change in selected index, emit a change event. Should not trigger if\n // the selected index has not yet been initialized.\n if (this._selectedIndex != indexToSelect) {\n const isFirstRun = this._selectedIndex == null;\n if (!isFirstRun) {\n this.selectedTabChange.emit(this._createChangeEvent(indexToSelect));\n // Preserve the height so page doesn't scroll up during tab change.\n // Fixes https://stackblitz.com/edit/mat-tabs-scroll-page-top-on-tab-change\n const wrapper = this._tabBodyWrapper.nativeElement;\n wrapper.style.minHeight = wrapper.clientHeight + 'px';\n }\n // Changing these values after change detection has run\n // since the checked content may contain references to them.\n Promise.resolve().then(() => {\n this._tabs.forEach((tab, index) => (tab.isActive = index === indexToSelect));\n if (!isFirstRun) {\n this.selectedIndexChange.emit(indexToSelect);\n // Clear the min-height, this was needed during tab change to avoid\n // unnecessary scrolling.\n this._tabBodyWrapper.nativeElement.style.minHeight = '';\n }\n });\n }\n // Setup the position for each tab and optionally setup an origin on the next selected tab.\n this._tabs.forEach((tab, index) => {\n tab.position = index - indexToSelect;\n // If there is already a selected tab, then set up an origin for the next selected tab\n // if it doesn't have one already.\n if (this._selectedIndex != null && tab.position == 0 && !tab.origin) {\n tab.origin = indexToSelect - this._selectedIndex;\n }\n });\n if (this._selectedIndex !== indexToSelect) {\n this._selectedIndex = indexToSelect;\n this._lastFocusedTabIndex = null;\n this._changeDetectorRef.markForCheck();\n }\n }\n ngAfterContentInit() {\n this._subscribeToAllTabChanges();\n this._subscribeToTabLabels();\n // Subscribe to changes in the amount of tabs, in order to be\n // able to re-render the content as new tabs are added or removed.\n this._tabsSubscription = this._tabs.changes.subscribe(() => {\n const indexToSelect = this._clampTabIndex(this._indexToSelect);\n // Maintain the previously-selected tab if a new tab is added or removed and there is no\n // explicit change that selects a different tab.\n if (indexToSelect === this._selectedIndex) {\n const tabs = this._tabs.toArray();\n let selectedTab;\n for (let i = 0; i < tabs.length; i++) {\n if (tabs[i].isActive) {\n // Assign both to the `_indexToSelect` and `_selectedIndex` so we don't fire a changed\n // event, otherwise the consumer may end up in an infinite loop in some edge cases like\n // adding a tab within the `selectedIndexChange` event.\n this._indexToSelect = this._selectedIndex = i;\n this._lastFocusedTabIndex = null;\n selectedTab = tabs[i];\n break;\n }\n }\n // If we haven't found an active tab and a tab exists at the selected index, it means\n // that the active tab was swapped out. Since this won't be picked up by the rendering\n // loop in `ngAfterContentChecked`, we need to sync it up manually.\n if (!selectedTab && tabs[indexToSelect]) {\n Promise.resolve().then(() => {\n tabs[indexToSelect].isActive = true;\n this.selectedTabChange.emit(this._createChangeEvent(indexToSelect));\n });\n }\n }\n this._changeDetectorRef.markForCheck();\n });\n }\n /** Listens to changes in all of the tabs. */\n _subscribeToAllTabChanges() {\n // Since we use a query with `descendants: true` to pick up the tabs, we may end up catching\n // some that are inside of nested tab groups. We filter them out manually by checking that\n // the closest group to the tab is the current one.\n this._allTabs.changes.pipe(startWith(this._allTabs)).subscribe((tabs) => {\n this._tabs.reset(tabs.filter(tab => {\n return tab._closestTabGroup === this || !tab._closestTabGroup;\n }));\n this._tabs.notifyOnChanges();\n });\n }\n ngOnDestroy() {\n this._tabs.destroy();\n this._tabsSubscription.unsubscribe();\n this._tabLabelSubscription.unsubscribe();\n }\n /** Re-aligns the ink bar to the selected tab element. */\n realignInkBar() {\n if (this._tabHeader) {\n this._tabHeader._alignInkBarToSelectedTab();\n }\n }\n /**\n * Recalculates the tab group's pagination dimensions.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n if (this._tabHeader) {\n this._tabHeader.updatePagination();\n }\n }\n /**\n * Sets focus to a particular tab.\n * @param index Index of the tab to be focused.\n */\n focusTab(index) {\n const header = this._tabHeader;\n if (header) {\n header.focusIndex = index;\n }\n }\n _focusChanged(index) {\n this._lastFocusedTabIndex = index;\n this.focusChange.emit(this._createChangeEvent(index));\n }\n _createChangeEvent(index) {\n const event = new MatTabChangeEvent();\n event.index = index;\n if (this._tabs && this._tabs.length) {\n event.tab = this._tabs.toArray()[index];\n }\n return event;\n }\n /**\n * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is\n * on the MatTab component, whereas the data binding is inside the MatTabGroup. In order for the\n * binding to be updated, we need to subscribe to changes in it and trigger change detection\n * manually.\n */\n _subscribeToTabLabels() {\n if (this._tabLabelSubscription) {\n this._tabLabelSubscription.unsubscribe();\n }\n this._tabLabelSubscription = merge(...this._tabs.map(tab => tab._stateChanges)).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n /** Clamps the given index to the bounds of 0 and the tabs length. */\n _clampTabIndex(index) {\n // Note the `|| 0`, which ensures that values like NaN can't get through\n // and which would otherwise throw the component into an infinite loop\n // (since Math.max(NaN, 0) === NaN).\n return Math.min(this._tabs.length - 1, Math.max(index || 0, 0));\n }\n /** Returns a unique id for each tab label element */\n _getTabLabelId(i) {\n return `mat-tab-label-${this._groupId}-${i}`;\n }\n /** Returns a unique id for each tab content element */\n _getTabContentId(i) {\n return `mat-tab-content-${this._groupId}-${i}`;\n }\n /**\n * Sets the height of the body wrapper to the height of the activating tab if dynamic\n * height property is true.\n */\n _setTabBodyWrapperHeight(tabHeight) {\n if (!this._dynamicHeight || !this._tabBodyWrapperHeight) {\n return;\n }\n const wrapper = this._tabBodyWrapper.nativeElement;\n wrapper.style.height = this._tabBodyWrapperHeight + 'px';\n // This conditional forces the browser to paint the height so that\n // the animation to the new height can have an origin.\n if (this._tabBodyWrapper.nativeElement.offsetHeight) {\n wrapper.style.height = tabHeight + 'px';\n }\n }\n /** Removes the height of the tab body wrapper. */\n _removeTabBodyWrapperHeight() {\n const wrapper = this._tabBodyWrapper.nativeElement;\n this._tabBodyWrapperHeight = wrapper.clientHeight;\n wrapper.style.height = '';\n this.animationDone.emit();\n }\n /** Handle click events, setting new selected index if appropriate. */\n _handleClick(tab, tabHeader, index) {\n if (!tab.disabled) {\n this.selectedIndex = tabHeader.focusIndex = index;\n }\n }\n /** Retrieves the tabindex for the tab. */\n _getTabIndex(tab, index) {\n if (tab.disabled) {\n return null;\n }\n const targetIndex = this._lastFocusedTabIndex ?? this.selectedIndex;\n return index === targetIndex ? 0 : -1;\n }\n /** Callback for when the focused state of a tab has changed. */\n _tabFocusChanged(focusOrigin, index) {\n // Mouse/touch focus happens during the `mousedown`/`touchstart` phase which\n // can cause the tab to be moved out from under the pointer, interrupting the\n // click sequence (see #21898). We don't need to scroll the tab into view for\n // such cases anyway, because it will be done when the tab becomes selected.\n if (focusOrigin && focusOrigin !== 'mouse' && focusOrigin !== 'touch') {\n this._tabHeader.focusIndex = index;\n }\n }\n}\n_MatTabGroupBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabGroupBase, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: MAT_TABS_CONFIG, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabGroupBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatTabGroupBase, inputs: { dynamicHeight: \"dynamicHeight\", selectedIndex: \"selectedIndex\", headerPosition: \"headerPosition\", animationDuration: \"animationDuration\", contentTabIndex: \"contentTabIndex\", disablePagination: \"disablePagination\", preserveContent: \"preserveContent\", backgroundColor: \"backgroundColor\" }, outputs: { selectedIndexChange: \"selectedIndexChange\", focusChange: \"focusChange\", animationDone: \"animationDone\", selectedTabChange: \"selectedTabChange\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabGroupBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TABS_CONFIG]\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { dynamicHeight: [{\n type: Input\n }], selectedIndex: [{\n type: Input\n }], headerPosition: [{\n type: Input\n }], animationDuration: [{\n type: Input\n }], contentTabIndex: [{\n type: Input\n }], disablePagination: [{\n type: Input\n }], preserveContent: [{\n type: Input\n }], backgroundColor: [{\n type: Input\n }], selectedIndexChange: [{\n type: Output\n }], focusChange: [{\n type: Output\n }], animationDone: [{\n type: Output\n }], selectedTabChange: [{\n type: Output\n }] } });\n/**\n * Material design tab-group component. Supports basic tab pairs (label + content) and includes\n * animated ink-bar, keyboard navigation, and screen reader.\n * See: https://material.io/design/components/tabs.html\n */\nclass MatTabGroup extends _MatTabGroupBase {\n constructor(elementRef, changeDetectorRef, defaultConfig, animationMode) {\n super(elementRef, changeDetectorRef, defaultConfig, animationMode);\n }\n}\nMatTabGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabGroup, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: MAT_TABS_CONFIG, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTabGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabGroup, selector: \"mat-tab-group\", inputs: { color: \"color\", disableRipple: \"disableRipple\" }, host: { properties: { \"class.mat-tab-group-dynamic-height\": \"dynamicHeight\", \"class.mat-tab-group-inverted-header\": \"headerPosition === \\\"below\\\"\" }, classAttribute: \"mat-tab-group\" }, providers: [\n {\n provide: MAT_TAB_GROUP,\n useExisting: MatTabGroup,\n },\n ], queries: [{ propertyName: \"_allTabs\", predicate: MatTab, descendants: true }], viewQueries: [{ propertyName: \"_tabBodyWrapper\", first: true, predicate: [\"tabBodyWrapper\"], descendants: true }, { propertyName: \"_tabHeader\", first: true, predicate: [\"tabHeader\"], descendants: true }], exportAs: [\"matTabGroup\"], usesInheritance: true, ngImport: i0, template: \"\\n
\\n\\n\\n
\\n \\n \\n \\n \\n\\n \\n {{tab.textLabel}}\\n
\\n
\\n
\\n\\n\\n \\n \\n\\n\", styles: [\".mat-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-tab-group.mat-tab-group-inverted-header{flex-direction:column-reverse}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}@media(max-width: 599px){.mat-tab-label{padding:0 12px}}@media(max-width: 959px){.mat-tab-label{padding:0 12px}}.mat-tab-group[mat-stretch-tabs]>.mat-tab-header .mat-tab-label{flex-basis:0;flex-grow:1}.mat-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-tab-body.mat-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-tab-group.mat-tab-group-dynamic-height .mat-tab-body.mat-tab-body-active{overflow-y:hidden}\"], dependencies: [{ kind: \"directive\", type: i1$2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }, { kind: \"directive\", type: i4.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { kind: \"directive\", type: i7.CdkMonitorFocus, selector: \"[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]\", outputs: [\"cdkFocusChange\"], exportAs: [\"cdkMonitorFocus\"] }, { kind: \"directive\", type: MatTabLabelWrapper, selector: \"[matTabLabelWrapper]\", inputs: [\"disabled\"] }, { kind: \"component\", type: MatTabBody, selector: \"mat-tab-body\" }, { kind: \"component\", type: MatTabHeader, selector: \"mat-tab-header\", inputs: [\"selectedIndex\"], outputs: [\"selectFocusedIndex\", \"indexFocused\"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabGroup, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab-group', exportAs: 'matTabGroup', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, inputs: ['color', 'disableRipple'], providers: [\n {\n provide: MAT_TAB_GROUP,\n useExisting: MatTabGroup,\n },\n ], host: {\n 'class': 'mat-tab-group',\n '[class.mat-tab-group-dynamic-height]': 'dynamicHeight',\n '[class.mat-tab-group-inverted-header]': 'headerPosition === \"below\"',\n }, template: \"\\n
\\n\\n\\n
\\n \\n \\n \\n \\n\\n \\n {{tab.textLabel}}\\n
\\n
\\n
\\n\\n\\n \\n \\n\\n\", styles: [\".mat-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-tab-group.mat-tab-group-inverted-header{flex-direction:column-reverse}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}@media(max-width: 599px){.mat-tab-label{padding:0 12px}}@media(max-width: 959px){.mat-tab-label{padding:0 12px}}.mat-tab-group[mat-stretch-tabs]>.mat-tab-header .mat-tab-label{flex-basis:0;flex-grow:1}.mat-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-tab-body.mat-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-tab-group.mat-tab-group-dynamic-height .mat-tab-body.mat-tab-body-active{overflow-y:hidden}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TABS_CONFIG]\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { _allTabs: [{\n type: ContentChildren,\n args: [MatTab, { descendants: true }]\n }], _tabBodyWrapper: [{\n type: ViewChild,\n args: ['tabBodyWrapper']\n }], _tabHeader: [{\n type: ViewChild,\n args: ['tabHeader']\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// Increasing integer for generating unique ids for tab nav components.\nlet nextUniqueId = 0;\n/**\n * Base class with all of the `MatTabNav` functionality.\n * @docs-private\n */\nclass _MatTabNavBase extends MatPaginatedTabHeader {\n constructor(elementRef, dir, ngZone, changeDetectorRef, viewportRuler, platform, animationMode) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n this._disableRipple = false;\n /** Theme color of the nav bar. */\n this.color = 'primary';\n }\n /** Background color of the tab nav. */\n get backgroundColor() {\n return this._backgroundColor;\n }\n set backgroundColor(value) {\n const classList = this._elementRef.nativeElement.classList;\n classList.remove(`mat-background-${this.backgroundColor}`);\n if (value) {\n classList.add(`mat-background-${value}`);\n }\n this._backgroundColor = value;\n }\n /** Whether the ripple effect is disabled or not. */\n get disableRipple() {\n return this._disableRipple;\n }\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n _itemSelected() {\n // noop\n }\n ngAfterContentInit() {\n // We need this to run before the `changes` subscription in parent to ensure that the\n // selectedIndex is up-to-date by the time the super class starts looking for it.\n this._items.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n this.updateActiveLink();\n });\n super.ngAfterContentInit();\n }\n /** Notifies the component that the active link has been changed. */\n updateActiveLink() {\n if (!this._items) {\n return;\n }\n const items = this._items.toArray();\n for (let i = 0; i < items.length; i++) {\n if (items[i].active) {\n this.selectedIndex = i;\n this._changeDetectorRef.markForCheck();\n if (this.tabPanel) {\n this.tabPanel._activeTabId = items[i].id;\n }\n return;\n }\n }\n // The ink bar should hide itself if no items are active.\n this.selectedIndex = -1;\n this._inkBar.hide();\n }\n _getRole() {\n return this.tabPanel ? 'tablist' : this._elementRef.nativeElement.getAttribute('role');\n }\n}\n_MatTabNavBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabNavBase, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabNavBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatTabNavBase, inputs: { backgroundColor: \"backgroundColor\", disableRipple: \"disableRipple\", color: \"color\", tabPanel: \"tabPanel\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabNavBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { backgroundColor: [{\n type: Input\n }], disableRipple: [{\n type: Input\n }], color: [{\n type: Input\n }], tabPanel: [{\n type: Input\n }] } });\n/**\n * Navigation component matching the styles of the tab group header.\n * Provides anchored navigation with animated ink bar.\n */\nclass MatTabNav extends _MatTabNavBase {\n constructor(elementRef, dir, ngZone, changeDetectorRef, viewportRuler, platform, animationMode) {\n super(elementRef, dir, ngZone, changeDetectorRef, viewportRuler, platform, animationMode);\n }\n}\nMatTabNav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabNav, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTabNav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabNav, selector: \"[mat-tab-nav-bar]\", inputs: { color: \"color\" }, host: { properties: { \"attr.role\": \"_getRole()\", \"class.mat-tab-header-pagination-controls-enabled\": \"_showPaginationControls\", \"class.mat-tab-header-rtl\": \"_getLayoutDirection() == 'rtl'\", \"class.mat-primary\": \"color !== \\\"warn\\\" && color !== \\\"accent\\\"\", \"class.mat-accent\": \"color === \\\"accent\\\"\", \"class.mat-warn\": \"color === \\\"warn\\\"\" }, classAttribute: \"mat-tab-nav-bar mat-tab-header\" }, queries: [{ propertyName: \"_items\", predicate: i0.forwardRef(function () { return MatTabLink; }), descendants: true }], viewQueries: [{ propertyName: \"_inkBar\", first: true, predicate: MatInkBar, descendants: true, static: true }, { propertyName: \"_tabListContainer\", first: true, predicate: [\"tabListContainer\"], descendants: true, static: true }, { propertyName: \"_tabList\", first: true, predicate: [\"tabList\"], descendants: true, static: true }, { propertyName: \"_tabListInner\", first: true, predicate: [\"tabListInner\"], descendants: true, static: true }, { propertyName: \"_nextPaginator\", first: true, predicate: [\"nextPaginator\"], descendants: true }, { propertyName: \"_previousPaginator\", first: true, predicate: [\"previousPaginator\"], descendants: true }], exportAs: [\"matTabNavBar\", \"matTabNav\"], usesInheritance: true, ngImport: i0, template: \"\\n\\n\\n\\n\\n\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-links{display:flex}[mat-align-tabs=center]>.mat-tab-link-container .mat-tab-links{justify-content:center}[mat-align-tabs=end]>.mat-tab-link-container .mat-tab-links{justify-content:flex-end}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-link-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-link{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;vertical-align:top;text-decoration:none;position:relative;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-tab-link:focus{outline:none}.mat-tab-link:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-link.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-link.mat-tab-disabled{opacity:.5}.mat-tab-link .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-link{opacity:1}[mat-stretch-tabs] .mat-tab-link{flex-basis:0;flex-grow:1}.mat-tab-link.mat-tab-disabled{pointer-events:none}.mat-tab-link::before{margin:5px}@media(max-width: 599px){.mat-tab-link{min-width:72px}}\"], dependencies: [{ kind: \"directive\", type: i4.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { kind: \"directive\", type: i5.CdkObserveContent, selector: \"[cdkObserveContent]\", inputs: [\"cdkObserveContentDisabled\", \"debounce\"], outputs: [\"cdkObserveContent\"], exportAs: [\"cdkObserveContent\"] }, { kind: \"directive\", type: MatInkBar, selector: \"mat-ink-bar\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabNav, decorators: [{\n type: Component,\n args: [{ selector: '[mat-tab-nav-bar]', exportAs: 'matTabNavBar, matTabNav', inputs: ['color'], host: {\n '[attr.role]': '_getRole()',\n 'class': 'mat-tab-nav-bar mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n '[class.mat-primary]': 'color !== \"warn\" && color !== \"accent\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, template: \"\\n\\n\\n\\n\\n\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-links{display:flex}[mat-align-tabs=center]>.mat-tab-link-container .mat-tab-links{justify-content:center}[mat-align-tabs=end]>.mat-tab-link-container .mat-tab-links{justify-content:flex-end}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-link-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-link{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;vertical-align:top;text-decoration:none;position:relative;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-tab-link:focus{outline:none}.mat-tab-link:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-link.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-link.mat-tab-disabled{opacity:.5}.mat-tab-link .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-link{opacity:1}[mat-stretch-tabs] .mat-tab-link{flex-basis:0;flex-grow:1}.mat-tab-link.mat-tab-disabled{pointer-events:none}.mat-tab-link::before{margin:5px}@media(max-width: 599px){.mat-tab-link{min-width:72px}}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { _items: [{\n type: ContentChildren,\n args: [forwardRef(() => MatTabLink), { descendants: true }]\n }], _inkBar: [{\n type: ViewChild,\n args: [MatInkBar, { static: true }]\n }], _tabListContainer: [{\n type: ViewChild,\n args: ['tabListContainer', { static: true }]\n }], _tabList: [{\n type: ViewChild,\n args: ['tabList', { static: true }]\n }], _tabListInner: [{\n type: ViewChild,\n args: ['tabListInner', { static: true }]\n }], _nextPaginator: [{\n type: ViewChild,\n args: ['nextPaginator']\n }], _previousPaginator: [{\n type: ViewChild,\n args: ['previousPaginator']\n }] } });\n// Boilerplate for applying mixins to MatTabLink.\nconst _MatTabLinkMixinBase = mixinTabIndex(mixinDisableRipple(mixinDisabled(class {\n})));\n/** Base class with all of the `MatTabLink` functionality. */\nclass _MatTabLinkBase extends _MatTabLinkMixinBase {\n constructor(_tabNavBar, \n /** @docs-private */ elementRef, globalRippleOptions, tabIndex, _focusMonitor, animationMode) {\n super();\n this._tabNavBar = _tabNavBar;\n this.elementRef = elementRef;\n this._focusMonitor = _focusMonitor;\n /** Whether the tab link is active or not. */\n this._isActive = false;\n /** Unique id for the tab. */\n this.id = `mat-tab-link-${nextUniqueId++}`;\n this.rippleConfig = globalRippleOptions || {};\n this.tabIndex = parseInt(tabIndex) || 0;\n if (animationMode === 'NoopAnimations') {\n this.rippleConfig.animation = { enterDuration: 0, exitDuration: 0 };\n }\n }\n /** Whether the link is active. */\n get active() {\n return this._isActive;\n }\n set active(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this._isActive) {\n this._isActive = newValue;\n this._tabNavBar.updateActiveLink();\n }\n }\n /**\n * Whether ripples are disabled on interaction.\n * @docs-private\n */\n get rippleDisabled() {\n return (this.disabled ||\n this.disableRipple ||\n this._tabNavBar.disableRipple ||\n !!this.rippleConfig.disabled);\n }\n /** Focuses the tab link. */\n focus() {\n this.elementRef.nativeElement.focus();\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this.elementRef);\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this.elementRef);\n }\n _handleFocus() {\n // Since we allow navigation through tabbing in the nav bar, we\n // have to update the focused index whenever the link receives focus.\n this._tabNavBar.focusIndex = this._tabNavBar._items.toArray().indexOf(this);\n }\n _handleKeydown(event) {\n if (this._tabNavBar.tabPanel && event.keyCode === SPACE) {\n this.elementRef.nativeElement.click();\n }\n }\n _getAriaControls() {\n return this._tabNavBar.tabPanel\n ? this._tabNavBar.tabPanel?.id\n : this.elementRef.nativeElement.getAttribute('aria-controls');\n }\n _getAriaSelected() {\n if (this._tabNavBar.tabPanel) {\n return this.active ? 'true' : 'false';\n }\n else {\n return this.elementRef.nativeElement.getAttribute('aria-selected');\n }\n }\n _getAriaCurrent() {\n return this.active && !this._tabNavBar.tabPanel ? 'page' : null;\n }\n _getRole() {\n return this._tabNavBar.tabPanel ? 'tab' : this.elementRef.nativeElement.getAttribute('role');\n }\n _getTabIndex() {\n if (this._tabNavBar.tabPanel) {\n return this._isActive && !this.disabled ? 0 : -1;\n }\n else {\n return this.tabIndex;\n }\n }\n}\n_MatTabLinkBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabLinkBase, deps: [{ token: _MatTabNavBase }, { token: i0.ElementRef }, { token: MAT_RIPPLE_GLOBAL_OPTIONS, optional: true }, { token: 'tabindex', attribute: true }, { token: i7.FocusMonitor }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabLinkBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatTabLinkBase, inputs: { active: \"active\", id: \"id\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabLinkBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: _MatTabNavBase }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RIPPLE_GLOBAL_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: i7.FocusMonitor }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { active: [{\n type: Input\n }], id: [{\n type: Input\n }] } });\n/**\n * Link inside of a `mat-tab-nav-bar`.\n */\nclass MatTabLink extends _MatTabLinkBase {\n constructor(tabNavBar, elementRef, ngZone, platform, globalRippleOptions, tabIndex, focusMonitor, animationMode) {\n super(tabNavBar, elementRef, globalRippleOptions, tabIndex, focusMonitor, animationMode);\n this._tabLinkRipple = new RippleRenderer(this, ngZone, elementRef, platform);\n this._tabLinkRipple.setupTriggerEvents(elementRef.nativeElement);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._tabLinkRipple._removeTriggerEvents();\n }\n}\nMatTabLink.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLink, deps: [{ token: MatTabNav }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i3.Platform }, { token: MAT_RIPPLE_GLOBAL_OPTIONS, optional: true }, { token: 'tabindex', attribute: true }, { token: i7.FocusMonitor }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabLink.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabLink, selector: \"[mat-tab-link], [matTabLink]\", inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", tabIndex: \"tabIndex\" }, host: { listeners: { \"focus\": \"_handleFocus()\", \"keydown\": \"_handleKeydown($event)\" }, properties: { \"attr.aria-controls\": \"_getAriaControls()\", \"attr.aria-current\": \"_getAriaCurrent()\", \"attr.aria-disabled\": \"disabled\", \"attr.aria-selected\": \"_getAriaSelected()\", \"attr.id\": \"id\", \"attr.tabIndex\": \"_getTabIndex()\", \"attr.role\": \"_getRole()\", \"class.mat-tab-disabled\": \"disabled\", \"class.mat-tab-label-active\": \"active\" }, classAttribute: \"mat-tab-link mat-focus-indicator\" }, exportAs: [\"matTabLink\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLink, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-tab-link], [matTabLink]',\n exportAs: 'matTabLink',\n inputs: ['disabled', 'disableRipple', 'tabIndex'],\n host: {\n 'class': 'mat-tab-link mat-focus-indicator',\n '[attr.aria-controls]': '_getAriaControls()',\n '[attr.aria-current]': '_getAriaCurrent()',\n '[attr.aria-disabled]': 'disabled',\n '[attr.aria-selected]': '_getAriaSelected()',\n '[attr.id]': 'id',\n '[attr.tabIndex]': '_getTabIndex()',\n '[attr.role]': '_getRole()',\n '[class.mat-tab-disabled]': 'disabled',\n '[class.mat-tab-label-active]': 'active',\n '(focus)': '_handleFocus()',\n '(keydown)': '_handleKeydown($event)',\n },\n }]\n }], ctorParameters: function () { return [{ type: MatTabNav }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RIPPLE_GLOBAL_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: i7.FocusMonitor }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; } });\n/**\n * Tab panel component associated with MatTabNav.\n */\nclass MatTabNavPanel {\n constructor() {\n /** Unique id for the tab panel. */\n this.id = `mat-tab-nav-panel-${nextUniqueId++}`;\n }\n}\nMatTabNavPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabNavPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });\nMatTabNavPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabNavPanel, selector: \"mat-tab-nav-panel\", inputs: { id: \"id\" }, host: { attributes: { \"role\": \"tabpanel\" }, properties: { \"attr.aria-labelledby\": \"_activeTabId\", \"attr.id\": \"id\" }, classAttribute: \"mat-tab-nav-panel\" }, exportAs: [\"matTabNavPanel\"], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabNavPanel, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-tab-nav-panel',\n exportAs: 'matTabNavPanel',\n template: '',\n host: {\n '[attr.aria-labelledby]': '_activeTabId',\n '[attr.id]': 'id',\n 'class': 'mat-tab-nav-panel',\n 'role': 'tabpanel',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }], propDecorators: { id: [{\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 */\nclass MatTabsModule {\n}\nMatTabsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatTabsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabsModule, declarations: [MatTabGroup,\n MatTabLabel,\n MatTab,\n MatInkBar,\n MatTabLabelWrapper,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabBody,\n MatTabBodyPortal,\n MatTabHeader,\n MatTabContent], imports: [CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n A11yModule], exports: [MatCommonModule,\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabContent] });\nMatTabsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabsModule, imports: [CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n A11yModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabsModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n A11yModule,\n ],\n // Don't export all components because some are only to be used internally.\n exports: [\n MatCommonModule,\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabContent,\n ],\n declarations: [\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatInkBar,\n MatTabLabelWrapper,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabBody,\n MatTabBodyPortal,\n MatTabHeader,\n MatTabContent,\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/**\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/**\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/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_TAB, MAT_TABS_CONFIG, MAT_TAB_GROUP, MatInkBar, MatTab, MatTabBody, MatTabBodyPortal, MatTabChangeEvent, MatTabContent, MatTabGroup, MatTabHeader, MatTabLabel, MatTabLabelWrapper, MatTabLink, MatTabNav, MatTabNavPanel, MatTabsModule, _MAT_INK_BAR_POSITIONER, _MatTabBodyBase, _MatTabGroupBase, _MatTabHeaderBase, _MatTabLinkBase, _MatTabNavBase, matTabsAnimations };\n","import * as i1 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Component, ChangeDetectionStrategy, Input, NgModule, Directive, Output, HostListener, EventEmitter, isDevMode, forwardRef } from '@angular/core';\nimport { Subject, Subscription, fromEvent } from 'rxjs';\nimport { distinctUntilChanged, debounceTime, tap } from 'rxjs/operators';\nimport { TinyColor } from '@ctrl/tinycolor';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nconst checkboardCache = {};\nfunction render(c1, c2, size) {\n if (typeof document === 'undefined') {\n return null;\n }\n const canvas = document.createElement('canvas');\n canvas.width = size * 2;\n canvas.height = size * 2;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n } // If no context can be found, return early.\n ctx.fillStyle = c1;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = c2;\n ctx.fillRect(0, 0, size, size);\n ctx.translate(size, size);\n ctx.fillRect(0, 0, size, size);\n return canvas.toDataURL();\n}\nfunction getCheckerboard(c1, c2, size) {\n const key = `${c1}-${c2}-${size}`;\n if (checkboardCache[key]) {\n return checkboardCache[key];\n }\n const checkboard = render(c1, c2, size);\n if (!checkboard) {\n return null;\n }\n checkboardCache[key] = checkboard;\n return checkboard;\n}\n\nclass CheckboardComponent {\n constructor() {\n this.white = 'transparent';\n this.size = 8;\n this.grey = 'rgba(0,0,0,.08)';\n }\n ngOnInit() {\n const background = getCheckerboard(this.white, this.grey, this.size);\n this.gridStyles = {\n borderRadius: this.borderRadius,\n boxShadow: this.boxShadow,\n background: `url(${background}) center left`,\n };\n }\n}\nCheckboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCheckboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: CheckboardComponent, selector: \"color-checkboard\", inputs: { white: \"white\", size: \"size\", grey: \"grey\", boxShadow: \"boxShadow\", borderRadius: \"borderRadius\" }, ngImport: i0, template: `
`, isInline: true, styles: [\".grid{top:0px;right:0px;bottom:0px;left:0px;position:absolute}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-checkboard', template: `
`, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".grid{top:0px;right:0px;bottom:0px;left:0px;position:absolute}\\n\"] }]\n }], propDecorators: { white: [{\n type: Input\n }], size: [{\n type: Input\n }], grey: [{\n type: Input\n }], boxShadow: [{\n type: Input\n }], borderRadius: [{\n type: Input\n }] } });\nclass CheckboardModule {\n}\nCheckboardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCheckboardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardModule, declarations: [CheckboardComponent], imports: [CommonModule], exports: [CheckboardComponent] });\nCheckboardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [CheckboardComponent],\n exports: [CheckboardComponent],\n imports: [CommonModule],\n }]\n }] });\n\nclass CoordinatesDirective {\n constructor(el) {\n this.el = el;\n this.coordinatesChange = new Subject();\n this.mousechange = new Subject();\n this.mouseListening = false;\n }\n mousemove($event, x, y, isTouch = false) {\n if (this.mouseListening) {\n $event.preventDefault();\n this.mousechange.next({ $event, x, y, isTouch });\n }\n }\n mouseup() {\n this.mouseListening = false;\n }\n mousedown($event, x, y, isTouch = false) {\n $event.preventDefault();\n this.mouseListening = true;\n this.mousechange.next({ $event, x, y, isTouch });\n }\n ngOnInit() {\n this.sub = this.mousechange\n .pipe(\n // limit times it is updated for the same area\n distinctUntilChanged((p, q) => p.x === q.x && p.y === q.y))\n .subscribe(n => this.handleChange(n.x, n.y, n.$event, n.isTouch));\n }\n ngOnDestroy() {\n this.sub?.unsubscribe();\n }\n handleChange(x, y, $event, isTouch) {\n const containerWidth = this.el.nativeElement.clientWidth;\n const containerHeight = this.el.nativeElement.clientHeight;\n const left = x -\n (this.el.nativeElement.getBoundingClientRect().left + window.pageXOffset);\n let top = y - this.el.nativeElement.getBoundingClientRect().top;\n if (!isTouch) {\n top = top - window.pageYOffset;\n }\n this.coordinatesChange.next({\n x,\n y,\n top,\n left,\n containerWidth,\n containerHeight,\n $event,\n });\n }\n}\nCoordinatesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCoordinatesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.2\", type: CoordinatesDirective, selector: \"[ngx-color-coordinates]\", outputs: { coordinatesChange: \"coordinatesChange\" }, host: { listeners: { \"window:mousemove\": \"mousemove($event,$event.pageX,$event.pageY)\", \"window:touchmove\": \"mousemove($event,$event.touches[0].clientX,$event.touches[0].clientY,true)\", \"window:mouseup\": \"mouseup()\", \"window:touchend\": \"mouseup()\", \"mousedown\": \"mousedown($event,$event.pageX,$event.pageY)\", \"touchstart\": \"mousedown($event,$event.touches[0].clientX,$event.touches[0].clientY,true)\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[ngx-color-coordinates]' }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { coordinatesChange: [{\n type: Output\n }], mousemove: [{\n type: HostListener,\n args: ['window:mousemove', ['$event', '$event.pageX', '$event.pageY']]\n }, {\n type: HostListener,\n args: ['window:touchmove', [\n '$event',\n '$event.touches[0].clientX',\n '$event.touches[0].clientY',\n 'true',\n ]]\n }], mouseup: [{\n type: HostListener,\n args: ['window:mouseup']\n }, {\n type: HostListener,\n args: ['window:touchend']\n }], mousedown: [{\n type: HostListener,\n args: ['mousedown', ['$event', '$event.pageX', '$event.pageY']]\n }, {\n type: HostListener,\n args: ['touchstart', [\n '$event',\n '$event.touches[0].clientX',\n '$event.touches[0].clientY',\n 'true',\n ]]\n }] } });\nclass CoordinatesModule {\n}\nCoordinatesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCoordinatesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesModule, declarations: [CoordinatesDirective], exports: [CoordinatesDirective] });\nCoordinatesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [CoordinatesDirective],\n exports: [CoordinatesDirective],\n }]\n }] });\n\nclass AlphaComponent {\n constructor() {\n this.direction = 'horizontal';\n this.onChange = new EventEmitter();\n }\n ngOnChanges() {\n if (this.direction === 'vertical') {\n this.pointerLeft = 0;\n this.pointerTop = this.rgb.a * 100;\n this.gradient = {\n background: `linear-gradient(to bottom, rgba(${this.rgb.r},${this.rgb.g},${this.rgb.b}, 0) 0%,\n rgba(${this.rgb.r},${this.rgb.g},${this.rgb.b}, 1) 100%)`,\n };\n }\n else {\n this.gradient = {\n background: `linear-gradient(to right, rgba(${this.rgb.r},${this.rgb.g},${this.rgb.b}, 0) 0%,\n rgba(${this.rgb.r},${this.rgb.g},${this.rgb.b}, 1) 100%)`,\n };\n this.pointerLeft = this.rgb.a * 100;\n }\n }\n handleChange({ top, left, containerHeight, containerWidth, $event }) {\n let data;\n if (this.direction === 'vertical') {\n let a;\n if (top < 0) {\n a = 0;\n }\n else if (top > containerHeight) {\n a = 1;\n }\n else {\n a = Math.round(top * 100 / containerHeight) / 100;\n }\n if (this.hsl.a !== a) {\n data = {\n h: this.hsl.h,\n s: this.hsl.s,\n l: this.hsl.l,\n a,\n source: 'rgb',\n };\n }\n }\n else {\n let a;\n if (left < 0) {\n a = 0;\n }\n else if (left > containerWidth) {\n a = 1;\n }\n else {\n a = Math.round(left * 100 / containerWidth) / 100;\n }\n if (this.hsl.a !== a) {\n data = {\n h: this.hsl.h,\n s: this.hsl.s,\n l: this.hsl.l,\n a,\n source: 'rgb',\n };\n }\n }\n if (!data) {\n return;\n }\n this.onChange.emit({ data, $event });\n }\n}\nAlphaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nAlphaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: AlphaComponent, selector: \"color-alpha\", inputs: { hsl: \"hsl\", rgb: \"rgb\", pointer: \"pointer\", shadow: \"shadow\", radius: \"radius\", direction: \"direction\" }, outputs: { onChange: \"onChange\" }, usesOnChanges: true, ngImport: i0, template: `\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n `, isInline: true, styles: [\".alpha{position:absolute;top:0;bottom:0;left:0;right:0}.alpha-checkboard{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.alpha-gradient{position:absolute;top:0;bottom:0;left:0;right:0}.alpha-container{position:relative;height:100%;margin:0 3px}.alpha-pointer{position:absolute}.alpha-slider{width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;margin-top:1px;transform:translate(-2px)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: CheckboardComponent, selector: \"color-checkboard\", inputs: [\"white\", \"size\", \"grey\", \"boxShadow\", \"borderRadius\"] }, { kind: \"directive\", type: CoordinatesDirective, selector: \"[ngx-color-coordinates]\", outputs: [\"coordinatesChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-alpha', template: `\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n `, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, styles: [\".alpha{position:absolute;top:0;bottom:0;left:0;right:0}.alpha-checkboard{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.alpha-gradient{position:absolute;top:0;bottom:0;left:0;right:0}.alpha-container{position:relative;height:100%;margin:0 3px}.alpha-pointer{position:absolute}.alpha-slider{width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;margin-top:1px;transform:translate(-2px)}\\n\"] }]\n }], propDecorators: { hsl: [{\n type: Input\n }], rgb: [{\n type: Input\n }], pointer: [{\n type: Input\n }], shadow: [{\n type: Input\n }], radius: [{\n type: Input\n }], direction: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\nclass AlphaModule {\n}\nAlphaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nAlphaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaModule, declarations: [AlphaComponent], imports: [CommonModule, CheckboardModule, CoordinatesModule], exports: [AlphaComponent] });\nAlphaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaModule, imports: [CommonModule, CheckboardModule, CoordinatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [AlphaComponent],\n exports: [AlphaComponent],\n imports: [CommonModule, CheckboardModule, CoordinatesModule],\n }]\n }] });\n\nfunction simpleCheckForValidColor(data) {\n const keysToCheck = ['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'];\n let checked = 0;\n let passed = 0;\n keysToCheck.forEach(letter => {\n if (!data[letter]) {\n return;\n }\n checked += 1;\n if (!isNaN(data[letter])) {\n passed += 1;\n }\n if (letter === 's' || letter === 'l') {\n const percentPatt = /^\\d+%$/;\n if (percentPatt.test(data[letter])) {\n passed += 1;\n }\n }\n });\n return checked === passed ? data : false;\n}\nfunction toState(data, oldHue, disableAlpha) {\n const color = data.hex ? new TinyColor(data.hex) : new TinyColor(data);\n if (disableAlpha) {\n color.setAlpha(1);\n }\n const hsl = color.toHsl();\n const hsv = color.toHsv();\n const rgb = color.toRgb();\n const hex = color.toHex();\n if (hsl.s === 0) {\n hsl.h = oldHue || 0;\n hsv.h = oldHue || 0;\n }\n const transparent = hex === '000000' && rgb.a === 0;\n return {\n hsl,\n hex: transparent ? 'transparent' : color.toHexString(),\n rgb,\n hsv,\n oldHue: data.h || oldHue || hsl.h,\n source: data.source,\n };\n}\nfunction isValidHex(hex) {\n return new TinyColor(hex).isValid;\n}\nfunction getContrastingColor(data) {\n if (!data) {\n return '#fff';\n }\n const col = toState(data);\n if (col.hex === 'transparent') {\n return 'rgba(0,0,0,0.4)';\n }\n const yiq = (col.rgb.r * 299 + col.rgb.g * 587 + col.rgb.b * 114) / 1000;\n return yiq >= 128 ? '#000' : '#fff';\n}\n\nvar ColorMode;\n(function (ColorMode) {\n ColorMode[\"HEX\"] = \"hex\";\n ColorMode[\"HSL\"] = \"hsl\";\n ColorMode[\"HSV\"] = \"hsv\";\n ColorMode[\"RGB\"] = \"rgb\";\n})(ColorMode || (ColorMode = {}));\nclass ColorWrap {\n constructor() {\n /**\n * Descriptors the return color format if the component is used with two-way binding\n */\n this.mode = ColorMode.HEX;\n this.color = {\n h: 250,\n s: 0.5,\n l: 0.2,\n a: 1,\n };\n this.colorChange = new EventEmitter();\n this.onChange = new EventEmitter();\n this.onChangeComplete = new EventEmitter();\n this.onSwatchHover = new EventEmitter();\n this._onChangeCompleteSubscription = new Subscription();\n this._onSwatchHoverSubscription = new Subscription();\n }\n ngOnInit() {\n this.changes = this.onChange\n .pipe(debounceTime(100), tap(event => {\n this.onChangeComplete.emit(event);\n switch (this.mode) {\n case ColorMode.HEX:\n this.colorChange.emit(event.color.hex);\n break;\n case ColorMode.HSL:\n this.colorChange.emit(event.color.hsl);\n break;\n case ColorMode.HSV:\n this.colorChange.emit(event.color.hsv);\n break;\n case ColorMode.RGB:\n this.colorChange.emit(event.color.rgb);\n break;\n default:\n const msg = `The mode '${this.mode}' is not supported`;\n if (isDevMode()) {\n throw new Error(msg);\n }\n else {\n console.warn(msg);\n }\n break;\n }\n }))\n .subscribe();\n this.setState(toState(this.color, 0));\n this.currentColor = this.hex;\n }\n ngOnChanges() {\n this.setState(toState(this.color, this.oldHue));\n }\n ngOnDestroy() {\n this.changes?.unsubscribe();\n this._onChangeCompleteSubscription?.unsubscribe();\n this._onSwatchHoverSubscription?.unsubscribe();\n }\n setState(data) {\n this.oldHue = data.oldHue;\n this.hsl = data.hsl;\n this.hsv = data.hsv;\n this.rgb = data.rgb;\n this.hex = data.hex;\n this.source = data.source;\n this.afterValidChange();\n }\n handleChange(data, $event) {\n const isValidColor = simpleCheckForValidColor(data);\n if (isValidColor) {\n const color = toState(data, data.h || this.oldHue, this.disableAlpha);\n this.setState(color);\n this.onChange.emit({ color, $event });\n this.afterValidChange();\n }\n }\n /** hook for components after a complete change */\n afterValidChange() { }\n handleSwatchHover(data, $event) {\n const isValidColor = simpleCheckForValidColor(data);\n if (isValidColor) {\n const color = toState(data, data.h || this.oldHue);\n this.setState(color);\n this.onSwatchHover.emit({ color, $event });\n }\n }\n registerOnChange(fn) {\n this._onChangeCompleteSubscription.add(this.onChangeComplete.pipe(tap(event => fn(event.color.hex))).subscribe());\n }\n registerOnTouched(fn) {\n this._onSwatchHoverSubscription.add(this.onSwatchHover.pipe(tap(() => fn())).subscribe());\n }\n setDisabledState(isDisabled) { }\n writeValue(hex) {\n this.color = hex;\n }\n}\nColorWrap.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrap, deps: [], target: i0.ɵɵFactoryTarget.Component });\nColorWrap.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: ColorWrap, selector: \"color-wrap\", inputs: { className: \"className\", mode: \"mode\", color: \"color\" }, outputs: { colorChange: \"colorChange\", onChange: \"onChange\", onChangeComplete: \"onChangeComplete\", onSwatchHover: \"onSwatchHover\" }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorWrap),\n multi: true,\n }\n ], usesOnChanges: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrap, decorators: [{\n type: Component,\n args: [{\n // create seletor base for test override property\n selector: 'color-wrap',\n template: ``,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorWrap),\n multi: true,\n }\n ]\n }]\n }], propDecorators: { className: [{\n type: Input\n }], mode: [{\n type: Input\n }], color: [{\n type: Input\n }], colorChange: [{\n type: Output\n }], onChange: [{\n type: Output\n }], onChangeComplete: [{\n type: Output\n }], onSwatchHover: [{\n type: Output\n }] } });\nclass ColorWrapModule {\n}\nColorWrapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nColorWrapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrapModule, declarations: [ColorWrap], imports: [CommonModule], exports: [ColorWrap] });\nColorWrapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrapModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrapModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [ColorWrap],\n exports: [ColorWrap],\n imports: [CommonModule],\n }]\n }] });\n\nlet nextUniqueId = 0;\nclass EditableInputComponent {\n constructor() {\n this.placeholder = '';\n this.onChange = new EventEmitter();\n this.focus = false;\n this.uniqueId = `editableInput-${++nextUniqueId}`;\n }\n ngOnInit() {\n this.wrapStyle = this.style && this.style.wrap ? this.style.wrap : {};\n this.inputStyle = this.style && this.style.input ? this.style.input : {};\n this.labelStyle = this.style && this.style.label ? this.style.label : {};\n if (this.dragLabel) {\n this.labelStyle.cursor = 'ew-resize';\n }\n }\n handleFocus($event) {\n this.focus = true;\n }\n handleFocusOut($event) {\n this.focus = false;\n this.currentValue = this.blurValue;\n }\n handleKeydown($event) {\n // In case `e.target.value` is a percentage remove the `%` character\n // and update accordingly with a percentage\n // https://github.com/casesandberg/react-color/issues/383\n const stringValue = String($event.target.value);\n const isPercentage = stringValue.indexOf('%') > -1;\n const num = Number(stringValue.replace(/%/g, ''));\n if (isNaN(num)) {\n return;\n }\n const amount = this.arrowOffset || 1;\n // Up\n if ($event.keyCode === 38) {\n if (this.label) {\n this.onChange.emit({\n data: { [this.label]: num + amount },\n $event,\n });\n }\n else {\n this.onChange.emit({ data: num + amount, $event });\n }\n if (isPercentage) {\n this.currentValue = `${num + amount}%`;\n }\n else {\n this.currentValue = num + amount;\n }\n }\n // Down\n if ($event.keyCode === 40) {\n if (this.label) {\n this.onChange.emit({\n data: { [this.label]: num - amount },\n $event,\n });\n }\n else {\n this.onChange.emit({ data: num - amount, $event });\n }\n if (isPercentage) {\n this.currentValue = `${num - amount}%`;\n }\n else {\n this.currentValue = num - amount;\n }\n }\n }\n handleKeyup($event) {\n if ($event.keyCode === 40 || $event.keyCode === 38) {\n return;\n }\n if (`${this.currentValue}` === $event.target.value) {\n return;\n }\n if (this.label) {\n this.onChange.emit({\n data: { [this.label]: $event.target.value },\n $event,\n });\n }\n else {\n this.onChange.emit({ data: $event.target.value, $event });\n }\n }\n ngOnChanges() {\n if (!this.focus) {\n this.currentValue = String(this.value).toUpperCase();\n this.blurValue = String(this.value).toUpperCase();\n }\n else {\n this.blurValue = String(this.value).toUpperCase();\n }\n }\n ngOnDestroy() {\n this.unsubscribe();\n }\n subscribe() {\n this.mousemove = fromEvent(document, 'mousemove').subscribe((ev) => this.handleDrag(ev));\n this.mouseup = fromEvent(document, 'mouseup').subscribe(() => this.unsubscribe());\n }\n unsubscribe() {\n this.mousemove?.unsubscribe();\n this.mouseup?.unsubscribe();\n }\n handleMousedown($event) {\n if (this.dragLabel) {\n $event.preventDefault();\n this.handleDrag($event);\n this.subscribe();\n }\n }\n handleDrag($event) {\n if (this.dragLabel) {\n const newValue = Math.round(this.value + $event.movementX);\n if (newValue >= 0 && newValue <= this.dragMax) {\n this.onChange.emit({ data: { [this.label]: newValue }, $event });\n }\n }\n }\n}\nEditableInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nEditableInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: EditableInputComponent, selector: \"color-editable-input\", inputs: { style: \"style\", label: \"label\", value: \"value\", arrowOffset: \"arrowOffset\", dragLabel: \"dragLabel\", dragMax: \"dragMax\", placeholder: \"placeholder\" }, outputs: { onChange: \"onChange\" }, usesOnChanges: true, ngImport: i0, template: `\n
\n \n \n {{ label }}\n \n
\n `, isInline: true, styles: [\":host{display:flex}.wrap{position:relative}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-editable-input', template: `\n
\n \n \n {{ label }}\n \n
\n `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\":host{display:flex}.wrap{position:relative}\\n\"] }]\n }], propDecorators: { style: [{\n type: Input\n }], label: [{\n type: Input\n }], value: [{\n type: Input\n }], arrowOffset: [{\n type: Input\n }], dragLabel: [{\n type: Input\n }], dragMax: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\nclass EditableInputModule {\n}\nEditableInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nEditableInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputModule, declarations: [EditableInputComponent], imports: [CommonModule], exports: [EditableInputComponent] });\nEditableInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [EditableInputComponent],\n exports: [EditableInputComponent],\n imports: [CommonModule],\n }]\n }] });\n\nclass HueComponent {\n constructor() {\n this.hidePointer = false;\n this.direction = 'horizontal';\n this.onChange = new EventEmitter();\n this.left = '0px';\n this.top = '';\n }\n ngOnChanges() {\n if (this.direction === 'horizontal') {\n this.left = `${this.hsl.h * 100 / 360}%`;\n }\n else {\n this.top = `${-(this.hsl.h * 100 / 360) + 100}%`;\n }\n }\n handleChange({ top, left, containerHeight, containerWidth, $event }) {\n let data;\n if (this.direction === 'vertical') {\n let h;\n if (top < 0) {\n h = 359;\n }\n else if (top > containerHeight) {\n h = 0;\n }\n else {\n const percent = -(top * 100 / containerHeight) + 100;\n h = 360 * percent / 100;\n }\n if (this.hsl.h !== h) {\n data = {\n h,\n s: this.hsl.s,\n l: this.hsl.l,\n a: this.hsl.a,\n source: 'rgb',\n };\n }\n }\n else {\n let h;\n if (left < 0) {\n h = 0;\n }\n else if (left > containerWidth) {\n h = 359;\n }\n else {\n const percent = left * 100 / containerWidth;\n h = 360 * percent / 100;\n }\n if (this.hsl.h !== h) {\n data = {\n h,\n s: this.hsl.s,\n l: this.hsl.l,\n a: this.hsl.a,\n source: 'rgb',\n };\n }\n }\n if (!data) {\n return;\n }\n this.onChange.emit({ data, $event });\n }\n}\nHueComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: HueComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nHueComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: HueComponent, selector: \"color-hue\", inputs: { hsl: \"hsl\", pointer: \"pointer\", radius: \"radius\", shadow: \"shadow\", hidePointer: \"hidePointer\", direction: \"direction\" }, outputs: { onChange: \"onChange\" }, usesOnChanges: true, ngImport: i0, template: `\n
\n
\n
\n
\n
\n
\n
\n `, isInline: true, styles: [\".color-hue{position:absolute;top:0;bottom:0;left:0;right:0}.color-hue-container{margin:0 2px;position:relative;height:100%}.color-hue-pointer{position:absolute}.color-hue-slider{margin-top:1px;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;transform:translate(-2px)}.color-hue-horizontal{background:linear-gradient(to right,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}.color-hue-vertical{background:linear-gradient(to top,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: CoordinatesDirective, selector: \"[ngx-color-coordinates]\", outputs: [\"coordinatesChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: HueComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-hue', template: `\n
\n
\n
\n
\n
\n
\n
\n `, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".color-hue{position:absolute;top:0;bottom:0;left:0;right:0}.color-hue-container{margin:0 2px;position:relative;height:100%}.color-hue-pointer{position:absolute}.color-hue-slider{margin-top:1px;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;transform:translate(-2px)}.color-hue-horizontal{background:linear-gradient(to right,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}.color-hue-vertical{background:linear-gradient(to top,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}\\n\"] }]\n }], propDecorators: { hsl: [{\n type: Input\n }], pointer: [{\n type: Input\n }], radius: [{\n type: Input\n }], shadow: [{\n type: Input\n }], hidePointer: [{\n type: Input\n }], direction: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\nclass HueModule {\n}\nHueModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: HueModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nHueModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: HueModule, declarations: [HueComponent], imports: [CommonModule, CoordinatesModule], exports: [HueComponent] });\nHueModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: HueModule, imports: [CommonModule, CoordinatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: HueModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [HueComponent],\n exports: [HueComponent],\n imports: [CommonModule, CoordinatesModule],\n }]\n }] });\n\nclass RaisedComponent {\n constructor() {\n this.zDepth = 1;\n this.radius = 1;\n this.background = '#fff';\n }\n}\nRaisedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nRaisedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: RaisedComponent, selector: \"color-raised\", inputs: { zDepth: \"zDepth\", radius: \"radius\", background: \"background\" }, ngImport: i0, template: `\n
\n
\n
\n \n
\n
\n `, isInline: true, styles: [\".raised-wrap{position:relative;display:inline-block}.raised-bg{position:absolute;top:0px;right:0px;bottom:0px;left:0px}.raised-content{position:relative}.zDepth-0{box-shadow:none}.zDepth-1{box-shadow:0 2px 10px #0000001f,0 2px 5px #00000029}.zDepth-2{box-shadow:0 6px 20px #00000030,0 8px 17px #0003}.zDepth-3{box-shadow:0 17px 50px #00000030,0 12px 15px #0000003d}.zDepth-4{box-shadow:0 25px 55px #00000036,0 16px 28px #00000038}.zDepth-5{box-shadow:0 40px 77px #00000038,0 27px 24px #0003}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-raised', template: `\n
\n
\n
\n \n
\n
\n `, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".raised-wrap{position:relative;display:inline-block}.raised-bg{position:absolute;top:0px;right:0px;bottom:0px;left:0px}.raised-content{position:relative}.zDepth-0{box-shadow:none}.zDepth-1{box-shadow:0 2px 10px #0000001f,0 2px 5px #00000029}.zDepth-2{box-shadow:0 6px 20px #00000030,0 8px 17px #0003}.zDepth-3{box-shadow:0 17px 50px #00000030,0 12px 15px #0000003d}.zDepth-4{box-shadow:0 25px 55px #00000036,0 16px 28px #00000038}.zDepth-5{box-shadow:0 40px 77px #00000038,0 27px 24px #0003}\\n\"] }]\n }], propDecorators: { zDepth: [{\n type: Input\n }], radius: [{\n type: Input\n }], background: [{\n type: Input\n }] } });\nclass RaisedModule {\n}\nRaisedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nRaisedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedModule, declarations: [RaisedComponent], imports: [CommonModule], exports: [RaisedComponent] });\nRaisedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [RaisedComponent],\n exports: [RaisedComponent],\n imports: [CommonModule],\n }]\n }] });\n\nclass SaturationComponent {\n constructor() {\n this.onChange = new EventEmitter();\n }\n ngOnChanges() {\n this.background = `hsl(${this.hsl.h}, 100%, 50%)`;\n this.pointerTop = -(this.hsv.v * 100) + 1 + 100 + '%';\n this.pointerLeft = this.hsv.s * 100 + '%';\n }\n handleChange({ top, left, containerHeight, containerWidth, $event }) {\n if (left < 0) {\n left = 0;\n }\n else if (left > containerWidth) {\n left = containerWidth;\n }\n else if (top < 0) {\n top = 0;\n }\n else if (top > containerHeight) {\n top = containerHeight;\n }\n const saturation = left / containerWidth;\n let bright = -(top / containerHeight) + 1;\n bright = bright > 0 ? bright : 0;\n bright = bright > 1 ? 1 : bright;\n const data = {\n h: this.hsl.h,\n s: saturation,\n v: bright,\n a: this.hsl.a,\n source: 'hsva',\n };\n this.onChange.emit({ data, $event });\n }\n}\nSaturationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nSaturationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: SaturationComponent, selector: \"color-saturation\", inputs: { hsl: \"hsl\", hsv: \"hsv\", radius: \"radius\", pointer: \"pointer\", circle: \"circle\" }, outputs: { onChange: \"onChange\" }, usesOnChanges: true, ngImport: i0, template: `\n
\n
\n
\n
\n
\n
\n
\n
\n `, isInline: true, styles: [\".saturation-white{background:linear-gradient(to right,#fff,rgba(255,255,255,0));position:absolute;top:0;bottom:0;left:0;right:0}.saturation-black{background:linear-gradient(to top,#000,rgba(0,0,0,0));position:absolute;top:0;bottom:0;left:0;right:0}.color-saturation{position:absolute;top:0;bottom:0;left:0;right:0}.saturation-pointer{position:absolute;cursor:default}.saturation-circle{width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;border-radius:50%;cursor:hand;transform:translate(-2px,-4px)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: CoordinatesDirective, selector: \"[ngx-color-coordinates]\", outputs: [\"coordinatesChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-saturation', template: `\n
\n
\n
\n
\n
\n
\n
\n
\n `, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".saturation-white{background:linear-gradient(to right,#fff,rgba(255,255,255,0));position:absolute;top:0;bottom:0;left:0;right:0}.saturation-black{background:linear-gradient(to top,#000,rgba(0,0,0,0));position:absolute;top:0;bottom:0;left:0;right:0}.color-saturation{position:absolute;top:0;bottom:0;left:0;right:0}.saturation-pointer{position:absolute;cursor:default}.saturation-circle{width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;border-radius:50%;cursor:hand;transform:translate(-2px,-4px)}\\n\"] }]\n }], propDecorators: { hsl: [{\n type: Input\n }], hsv: [{\n type: Input\n }], radius: [{\n type: Input\n }], pointer: [{\n type: Input\n }], circle: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\nclass SaturationModule {\n}\nSaturationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSaturationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationModule, declarations: [SaturationComponent], imports: [CommonModule, CoordinatesModule], exports: [SaturationComponent] });\nSaturationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationModule, imports: [CommonModule, CoordinatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [SaturationComponent],\n exports: [SaturationComponent],\n imports: [CommonModule, CoordinatesModule],\n }]\n }] });\n\nclass SwatchComponent {\n constructor() {\n this.style = {};\n this.focusStyle = {};\n this.onClick = new EventEmitter();\n this.onHover = new EventEmitter();\n this.divStyles = {};\n this.focusStyles = {};\n this.inFocus = false;\n }\n ngOnInit() {\n this.divStyles = {\n background: this.color,\n ...this.style,\n };\n }\n currentStyles() {\n this.focusStyles = {\n ...this.divStyles,\n ...this.focusStyle,\n };\n return this.focus || this.inFocus ? this.focusStyles : this.divStyles;\n }\n handleFocusOut() {\n this.inFocus = false;\n }\n handleFocus() {\n this.inFocus = true;\n }\n handleHover(hex, $event) {\n this.onHover.emit({ hex, $event });\n }\n handleClick(hex, $event) {\n this.onClick.emit({ hex, $event });\n }\n}\nSwatchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nSwatchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: SwatchComponent, selector: \"color-swatch\", inputs: { color: \"color\", style: \"style\", focusStyle: \"focusStyle\", focus: \"focus\" }, outputs: { onClick: \"onClick\", onHover: \"onHover\" }, ngImport: i0, template: `\n \n \n \n \n `, isInline: true, styles: [\".swatch{outline:none;height:100%;width:100%;cursor:pointer;position:relative}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: CheckboardComponent, selector: \"color-checkboard\", inputs: [\"white\", \"size\", \"grey\", \"boxShadow\", \"borderRadius\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-swatch', template: `\n \n \n \n \n `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".swatch{outline:none;height:100%;width:100%;cursor:pointer;position:relative}\\n\"] }]\n }], propDecorators: { color: [{\n type: Input\n }], style: [{\n type: Input\n }], focusStyle: [{\n type: Input\n }], focus: [{\n type: Input\n }], onClick: [{\n type: Output\n }], onHover: [{\n type: Output\n }] } });\nclass SwatchModule {\n}\nSwatchModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSwatchModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchModule, declarations: [SwatchComponent], imports: [CommonModule, CheckboardModule], exports: [SwatchComponent] });\nSwatchModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchModule, imports: [CommonModule, CheckboardModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [SwatchComponent],\n exports: [SwatchComponent],\n imports: [CommonModule, CheckboardModule],\n }]\n }] });\n\nclass ShadeComponent {\n constructor() {\n this.onChange = new EventEmitter();\n }\n ngOnChanges() {\n this.gradient = {\n background: `linear-gradient(to right,\n hsl(${this.hsl.h}, 90%, 55%),\n #000)`,\n };\n const hsv = new TinyColor(this.hsl).toHsv();\n this.pointerLeft = 100 - (hsv.v * 100);\n }\n handleChange({ left, containerWidth, $event }) {\n let data;\n let v;\n if (left < 0) {\n v = 0;\n }\n else if (left > containerWidth) {\n v = 1;\n }\n else {\n v = Math.round((left * 100) / containerWidth) / 100;\n }\n const hsv = new TinyColor(this.hsl).toHsv();\n if (hsv.v !== v) {\n data = {\n h: this.hsl.h,\n s: 100,\n v: 1 - v,\n l: this.hsl.l,\n a: this.hsl.a,\n source: 'rgb',\n };\n }\n if (!data) {\n return;\n }\n this.onChange.emit({ data, $event });\n }\n}\nShadeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nShadeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: ShadeComponent, selector: \"color-shade\", inputs: { hsl: \"hsl\", rgb: \"rgb\", pointer: \"pointer\", shadow: \"shadow\", radius: \"radius\" }, outputs: { onChange: \"onChange\" }, usesOnChanges: true, ngImport: i0, template: `\n
\n
\n \n \n
\n \n \n \n `, isInline: true, styles: [\".shade,.shade-gradient{position:absolute;top:0;bottom:0;left:0;right:0}.shade-container{position:relative;height:100%;margin:0 3px}.shade-pointer{position:absolute}.shade-slider{width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;margin-top:1px;transform:translate(-2px)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: CoordinatesDirective, selector: \"[ngx-color-coordinates]\", outputs: [\"coordinatesChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-shade', template: `\n
\n
\n \n \n
\n \n \n \n `, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, styles: [\".shade,.shade-gradient{position:absolute;top:0;bottom:0;left:0;right:0}.shade-container{position:relative;height:100%;margin:0 3px}.shade-pointer{position:absolute}.shade-slider{width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;margin-top:1px;transform:translate(-2px)}\\n\"] }]\n }], propDecorators: { hsl: [{\n type: Input\n }], rgb: [{\n type: Input\n }], pointer: [{\n type: Input\n }], shadow: [{\n type: Input\n }], radius: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\nclass ShadeModule {\n}\nShadeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nShadeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeModule, declarations: [ShadeComponent], imports: [CommonModule, CoordinatesModule], exports: [ShadeComponent] });\nShadeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeModule, imports: [CommonModule, CoordinatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [ShadeComponent],\n exports: [ShadeComponent],\n imports: [CommonModule, CoordinatesModule],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AlphaComponent, AlphaModule, CheckboardComponent, CheckboardModule, ColorMode, ColorWrap, ColorWrapModule, CoordinatesDirective, CoordinatesModule, EditableInputComponent, EditableInputModule, HueComponent, HueModule, RaisedComponent, RaisedModule, SaturationComponent, SaturationModule, ShadeComponent, ShadeModule, SwatchComponent, SwatchModule, getCheckerboard, getContrastingColor, isValidHex, render, simpleCheckForValidColor, toState };\n"],"x_google_ignoreList":[0,1,2,3,78,82,83,84,85,86,87,88,89,90,91,92,93,94]}
\n {{headerText}}\n \n {{dataAccessor(data, name)}}\n \n {{headerText}}\n \n {{dataAccessor(data, name)}}\n