����JFIF��x�x����'
Server IP : 78.140.185.180 / Your IP : 3.141.107.132 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/builderbox/public_html/public/client/ |
Upload File : |
{"version":3,"sources":["node_modules/rxjs/_esm2015/internal/observable/interval.js","node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/drag-drop.js","src/common/uploads/formatted-file-size.pipe.ts","node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/accordion.js","node_modules/@angular/material/__ivy_ngcc__/fesm2015/expansion.js","src/common/admin/appearance/appearance-image-input/appearance-image-upload-validator.ts","src/common/shared/billing/full-plan-name/full-plan-name.component.ts","src/common/admin/settings/settings-state.service.ts","src/common/admin/settings/settings-resolve.service.ts","node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/text-field.js","node_modules/@angular/material/__ivy_ngcc__/fesm2015/input.js","src/common/core/ui/space-input/space-input.module.ts","src/common/text-editor/text-editor.module.ts","src/common/admin/settings/settings.module.ts","src/common/admin/settings/recaptcha/recaptcha-actions.token.ts","node_modules/@angular/material/__ivy_ngcc__/fesm2015/datepicker.js","src/common/core/ui/image-zoom/image-zoom.module.ts","src/common/admin/admin.component.ts","src/common/admin/common-admin-config.ts","src/common/admin/admin.component.html","src/app/admin/templates/crupdate-template-modal/crupdate-template-modal.component.html","src/app/admin/templates/crupdate-template-modal/crupdate-template-modal.component.ts","src/common/core/utils/remove-null-from-object.ts","src/common/datatable/delete-resource-message.ts","src/common/datatable/utils/sort-datatable-data.ts","src/common/datatable/datatable.service.ts","src/common/datatable/utils/filter-datatable-data.ts","src/common/core/ui/overlay-panel/positions/left-position.ts","src/common/datatable/datatable-filters-panel/datatable-filters-panel.component.html","src/common/datatable/datatable-filters-panel/datatable-filters-panel.component.ts","src/common/datatable/datatable-header/datatable-header-search-input/datatable-header-search-input.component.html","src/common/datatable/datatable-header/datatable-header-search-input/datatable-header-search-input.component.ts","src/common/datatable/datatable-header/datatable-header.component.html","src/common/datatable/datatable-header/datatable-header.component.ts","src/common/datatable/selection/table-header-checkbox.component.ts","src/common/datatable/table-sort-header/table-sort-header.component.ts","src/common/datatable/table-sort-header/table-sort-header.component.html","src/common/datatable/datatable-footer/datatable-footer.component.html","src/common/datatable/datatable-footer/datatable-footer.component.ts","src/common/datatable/selection/table-body-checkbox.component.ts","src/app/admin/templates/templates.component.html","src/app/admin/templates/templates.component.ts","src/common/datatable/columns/user-column/user-column.component.html","src/common/datatable/columns/user-column/user-column.component.ts","src/app/admin/projects/projects.component.html","src/app/admin/projects/projects.component.ts","src/common/admin/settings/settings-panel.component.ts","src/common/core/utils/scroll-invalid-input-into-view.ts","src/common/core/ui/chips/chip-input/chip-input.component.html","src/common/core/ui/chips/chip-input/chip-input.component.ts","src/app/admin/settings/builder/builder-settings.component.html","src/app/admin/settings/builder/builder-settings.component.ts","src/app/admin/app-admin-routes.ts","src/common/admin/settings/settings.component.html","src/common/admin/settings/settings.component.ts","src/common/admin/settings/general/general-settings.component.html","src/common/admin/settings/general/general-settings.component.ts","src/common/admin/settings/authentication/authentication-settings.component.html","src/common/admin/settings/authentication/authentication-settings.component.ts","src/common/admin/settings/cache/cache-settings.component.html","src/common/admin/settings/cache/cache-settings.component.ts","src/common/admin/settings/analytics/analytics-settings.component.html","src/common/admin/settings/analytics/analytics-settings.component.ts","src/common/admin/settings/localization/localization-settings.component.html","src/common/admin/settings/localization/localization-settings.component.ts","src/common/admin/settings/mail/mail-settings.component.html","src/common/admin/settings/mail/mail-settings.component.ts","src/common/admin/settings/logging/logging-settings.component.html","src/common/admin/settings/logging/logging-settings.component.ts","src/common/admin/settings/queue/queue-settings.component.html","src/common/admin/settings/queue/queue-settings.component.ts","src/common/admin/settings/billing/billing-settings.component.html","src/common/admin/settings/billing/billing-settings.component.ts","src/common/core/ui/space-input/space-input.component.html","src/common/admin/settings/uploading/storage-forms/backblaze-form/backblaze-form.component.ts","src/common/admin/settings/uploading/storage-forms/digitalocean-form/digitalocean-form.component.ts","src/common/admin/settings/uploading/storage-forms/s3-form/s3-form.component.ts","src/common/admin/settings/uploading/storage-forms/rackspace-form/rackspace-form.component.ts","src/common/admin/settings/uploading/storage-forms/dropbox-form/dropbox-form.component.ts","src/common/admin/settings/uploading/storage-forms/ftp-form/ftp-form.component.ts","src/common/core/ui/space-input/space-input.component.ts","src/common/admin/settings/uploading/storage-forms/ftp-form/ftp-form.component.html","src/common/admin/settings/uploading/storage-forms/dropbox-form/dropbox-form.component.html","src/common/admin/settings/uploading/storage-forms/rackspace-form/rackspace-form.component.html","src/common/admin/settings/uploading/storage-forms/s3-form/s3-form.component.html","src/common/admin/settings/uploading/storage-forms/digitalocean-form/digitalocean-form.component.html","src/common/admin/settings/uploading/storage-forms/backblaze-form/backblaze-form.component.html","src/common/admin/settings/uploading/uploading-settings.component.html","src/common/admin/settings/uploading/uploading-settings.component.ts","src/common/core/utils/flatten-array.ts","src/common/admin/settings/recaptcha/recaptcha-settings.component.html","src/common/admin/settings/recaptcha/recaptcha-settings.component.ts","node_modules/rxjs/_esm2015/internal/operators/throttle.js","node_modules/rxjs/_esm2015/internal/operators/throttleTime.js","src/common/uploads/upload-progress-bar/upload-progress-bar.component.ts","src/common/uploads/directives/upload-button.directive.ts","src/common/uploads/upload-progress-bar/upload-progress-bar.component.html","src/common/shared/form-controls/upload-image-control/upload-image-control.component.html","src/common/shared/form-controls/upload-image-control/upload-image-control.component.ts","src/common/admin/roles/role.service.ts","src/common/core/utils/SelectionModel.ts","src/common/admin/users/select-roles-modal/select-roles-modal.component.html","src/common/admin/users/select-roles-modal/select-roles-modal.component.ts","src/common/admin/users/role-manager/role-manager.component.html","src/common/admin/users/role-manager/role-manager.component.ts","src/common/admin/permissions/select-permissions-modal/select-permissions-modal.component.html","src/common/admin/permissions/select-permissions-modal/select-permissions-modal.component.ts","src/common/core/utils/group-by.ts","src/common/admin/permissions/permission-manager/permission-manager.component.html","src/common/admin/permissions/permission-manager/permission-manager.component.ts","src/common/admin/users/crupdate-user-modal/crupdate-user-modal.component.html","src/common/admin/users/crupdate-user-modal/crupdate-user-modal.component.ts","src/common/core/ui/between-date-input/between-input/between-input.component.ts","src/common/core/ui/between-date-input/between-input/between-input.component.html","src/common/admin/users/user-index-filters/user-index-filters.component.html","src/common/admin/users/user-index-filters/user-index-filters.component.ts","src/common/admin/users/user-index.component.html","src/common/admin/users/user-index.component.ts","src/common/core/types/models/Role.ts","src/common/admin/roles/crupdate-role-modal/crupdate-role-modal.component.html","src/common/admin/roles/crupdate-role-modal/crupdate-role-modal.component.ts","src/common/auth/find-user-modal/find-user-modal.component.html","src/common/auth/find-user-modal/find-user-modal.component.ts","src/common/admin/roles/role-index.component.html","src/common/admin/roles/role-index.component.ts","src/common/admin/localizations/crupdate-localization-modal/crupdate-localization-modal.component.html","src/common/admin/localizations/crupdate-localization-modal/crupdate-localization-modal.component.ts","src/common/admin/localizations/new-line-modal/new-line-modal.component.ts","src/common/admin/localizations/new-line-modal/new-line-modal.component.html","src/common/admin/localizations/localization-index.component.html","src/common/admin/localizations/localization-index.component.ts","src/common/admin/file-entry-index/file-entry-index-filters/file-entry-index-filters.component.ts","src/common/admin/file-entry-index/file-entry-index-filters/file-entry-index-filters.component.html","src/common/admin/file-entry-index/file-entry-index.component.html","src/common/admin/file-entry-index/file-entry-index.component.ts","src/common/core/ui/image-zoom/image-zoom.component.ts","src/common/core/ui/image-zoom/image-zoom-overlay/image-zoom-overlay.component.ts","src/common/core/ui/image-zoom/image-zoom-overlay/image-zoom-overlay.component.html","src/common/core/ui/image-zoom/image-zoom.component.html","src/common/admin/ads-page/ads-page.component.html","src/common/admin/ads-page/ads-page.component.ts","src/common/admin/billing/plans/crupdate-plan-modal/crupdate-plan-modal.component.html","src/common/admin/billing/plans/crupdate-plan-modal/crupdate-plan-modal.component.ts","src/common/admin/billing/plans/plan-index/plan-index-filters/plan-index-filters.component.ts","src/common/admin/billing/plans/plan-index/plan-index-filters/plan-index-filters.component.html","src/common/admin/billing/plans/plan-index/plan-index.component.html","src/common/admin/billing/plans/plan-index/plan-index.component.ts","src/common/admin/billing/subscriptions/crupdate-subscription-modal/crupdate-subscription-modal.component.html","src/common/admin/billing/subscriptions/crupdate-subscription-modal/crupdate-subscription-modal.component.ts","src/common/admin/billing/subscriptions/subscription-index/subscription-index-filters/subscription-index-filters.component.ts","src/common/admin/billing/subscriptions/subscription-index/subscription-index-filters/subscription-index-filters.component.html","src/common/admin/billing/subscriptions/subscription-index/subscription-index.component.html","src/common/admin/billing/subscriptions/subscription-index/subscription-index.component.ts","src/common/admin/settings/gdpr-settings/gdpr-settings.component.html","src/common/admin/settings/gdpr-settings/gdpr-settings.component.ts","src/common/core/services/tags.service.ts","src/common/admin/tag-index/crupdate-tag-modal/crupdate-tag-modal.component.html","src/common/admin/tag-index/crupdate-tag-modal/crupdate-tag-modal.component.ts","src/common/admin/tag-index/tag-index-filters/tag-index-filters.component.html","src/common/admin/tag-index/tag-index-filters/tag-index-filters.component.ts","src/common/admin/tag-index/tag-index.component.html","src/common/admin/tag-index/tag-index.component.ts","src/common/pages/custom-pages-index/custom-page-table/custom-page-table.component.html","src/common/pages/custom-pages-index/custom-page-table/custom-page-table.component.ts","src/common/pages/custom-pages-index/custom-pages-index.component.html","src/common/pages/custom-pages-index/custom-pages-index.component.ts","src/common/text-editor/editors/tinymce-text-editor.service.ts","src/common/text-editor/validation/text-editor-image-validator.ts","src/common/text-editor/text-editor.component.html","src/common/text-editor/text-editor.component.ts","src/common/shared/form-controls/slug-control/slug-control.component.html","src/common/shared/form-controls/slug-control/slug-control.component.ts","src/common/pages/custom-pages-index/crupdate-custom-page/crupdate-custom-page.component.html","src/common/pages/custom-pages-index/crupdate-custom-page/crupdate-custom-page.component.ts","src/common/admin/base-admin-routing.module.ts","src/common/auth/find-user-modal/find-user-modal.module.ts","src/common/uploads/uploads.module.ts","src/common/admin/users/role-manager/role-manager.module.ts","src/common/shared/form-controls/slug-control/slug-control.module.ts","src/common/core/ui/confirm-modal/confirm-modal.module.ts","src/common/shared/form-controls/upload-image-control/upload-image-control.module.ts","src/common/core/ui/between-date-input/between-date-input.module.ts","src/common/pages/custom-pages-index/custom-page-index.module.ts","src/app/admin/app-admin.module.ts","src/common/admin/base-admin.module.ts","src/common/shared/form-controls/slug-control/bind-slug-to.ts","src/common/core/ui/skeleton/skeleton.component.ts","src/common/shared/billing/guards/billing-enabled-guard.service.ts","node_modules/@angular/material/__ivy_ngcc__/fesm2015/radio.js","src/common/uploads/types/upload-uri.enum.ts","node_modules/@angular/material/__ivy_ngcc__/fesm2015/sidenav.js","src/common/shared/billing/plans.service.ts","src/common/shared/billing/full-plan-name/full-plan-name.module.ts","src/common/uploads/validation/default-upload-validator.ts","src/common/uploads/upload-queue/upload-queue.service.ts","src/common/uploads/upload-queue/upload-queue-item.ts","src/common/uploads/validation/validations/allowed-extensions-validation.ts","src/common/uploads/validation/validations/blocked-extensions-validation.ts","src/common/core/ui/skeleton/skeleton.module.ts"],"names":["dispatch","state","subscriber","counter","period","next","this","schedule","extendStyles","dest","source","key","hasOwnProperty","toggleNativeDragInteractions","element","enable","userSelect","style","touchAction","webkitUserDrag","webkitTapHighlightColor","msUserSelect","webkitUserSelect","MozUserSelect","parseCssTimeUnitsToMs","value","multiplier","toLowerCase","indexOf","parseFloat","parseCssPropertyValue","computedStyle","name","getPropertyValue","split","map","part","trim","getMutableClientRect","clientRect","getBoundingClientRect","top","right","bottom","left","width","height","isInsideClientRect","x","y","adjustClientRect","isPointerNearClientRect","rect","threshold","pointerX","pointerY","xThreshold","yThreshold","ParentPositionTracker","_document","_viewportRuler","positions","Map","leftDifference","clear","elements","set","scrollPosition","getViewportScrollPosition","forEach","scrollTop","scrollLeft","event","target","cachedPosition","get","newTop","newLeft","scrolledParentNode","documentElement","viewportScrollPosition","topDifference","position","node","contains","deepCloneNode","clone","cloneNode","descendantsWithId","querySelectorAll","nodeName","removeAttribute","i","length","transferCanvasData","transferInputData","transferData","selector","callback","descendantElements","cloneElements","context","getContext","drawImage","_a","passiveEventListenerOptions","passive","activeEventListenerOptions","_config","_ngZone","_dragDropRegistry","_passiveTransform","_activeTransform","_moveEvents","Subject","_pointerMoveSubscription","Subscription","EMPTY","_pointerUpSubscription","_scrollSubscription","_resizeSubscription","_boundaryElement","_nativeInteractionsEnabled","_handles","_disabledHandles","Set","_direction","dragStartDelay","_disabled","beforeStarted","started","released","ended","entered","exited","dropped","moved","asObservable","_pointerDown","targetHandle","find","handle","has","disabled","_initializeDragSequence","_rootElement","_pointerMove","preventDefault","pointerPosition","_getPointerPositionOnPage","_hasStartedDragging","_previewRect","_preview","constrainedPointerPosition","_getConstrainedPointerPosition","_hasMoved","_lastKnownPointerPosition","_updatePointerDirectionDelta","_dropContainer","_updateActiveDropContainer","activeTransform","_pickupPositionOnPage","_applyRootElementTransform","SVGElement","setAttribute","observers","run","distance","_getDragDistance","delta","_pointerDirectionDelta","Math","abs","dragStartThreshold","Date","now","_dragStartTime","_getDragStartDelay","_endDragSequence","isDragging","_startDragSequence","_pointerUp","withRootElement","_parentPositions","registerDragItem","_placeholder","getPlaceholderElement","getRootElement","handles","_toggleNativeDragInteractions","template","_previewTemplate","_placeholderTemplate","rootElement","_removeRootElementListeners","runOutsideAngular","addEventListener","_initialTransform","_ownerSVGElement","ownerSVGElement","boundaryElement","unsubscribe","change","subscribe","_containInsideBoundaryOnResize","removeNode","_anchor","_destroyPreview","_destroyPlaceholder","removeDragItem","_removeSubscriptions","complete","transform","add","direction","container","_previewRef","destroy","_placeholderRef","stopDragging","_rootElementTapHighlight","_stopScrolling","_animatePreviewToPlaceholder","then","_cleanupDragArtifacts","_cleanupCachedDimensions","isTouchEvent","_lastTouchEventTime","documentRef","dropContainer","parent","parentNode","preview","_createPreviewElement","placeholder","_createPlaceholderElement","anchor","createComment","insertBefore","display","body","appendChild","replaceChild","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","start","_initialContainer","_initialIndex","getItemIndex","cache","getScrollableParents","referenceElement","stopPropagation","isTouchSequence","isAuxiliaryMouseButton","button","isSyntheticEvent","draggable","type","pointerMove","pointerUp","scroll","scrollEvent","_updateOnScroll","_boundaryRect","previewTemplate","_pickupPositionInElement","matchSize","_getPointerPositionInElement","_pointerPositionAtLastDirectionChange","startDragging","currentIndex","isPointerOverContainer","_isOverContainer","item","previousIndex","previousContainer","drop","rawY","rawX","newContainer","_getSiblingContainerFromPosition","exit","enter","sortingDisabled","_startScrollingIfNecessary","_sortItem","getTransform","previewConfig","previewClass","rootRect","viewRef","viewContainer","createEmbeddedView","detectChanges","getRootNode","matchElementSize","pointerEvents","margin","zIndex","classList","Array","isArray","className","Promise","resolve","placeholderRect","duration","getComputedStyle","transitionedProperties","property","prop","propertyIndex","rawDurations","rawDelays","handler","propertyName","removeEventListener","clearTimeout","timeout","setTimeout","placeholderConfig","placeholderTemplate","elementRect","handleElement","referenceRect","point","targetTouches","_getViewportScrollPosition","pageX","pageY","touches","changedTouches","svgMatrix","getScreenCTM","svgPoint","createSVGPoint","matrixTransform","inverse","dropContainerLock","lockAxis","constrainPosition","pickupX","pickupY","boundaryRect","previewRect","minY","maxY","clamp","pointerPositionOnPage","positionSinceLastChange","changeX","changeY","pointerDirectionChangeThreshold","shouldEnable","currentPosition","pickupPosition","leftOverflow","rightOverflow","topOverflow","bottomOverflow","setFreeDragPosition","touch","mouse","scrollDifference","handleScroll","newValue","round","min","max","removeChild","rootNodes","nodeType","ELEMENT_NODE","wrapper","createElement","sourceRect","moveItemInArray","array","fromIndex","toIndex","from","clamp$1","to","autoScrollDisabled","enterPredicate","sorted","_isDragging","_itemPositions","_previousSwap","drag","overlaps","_siblings","_orientation","_activeSiblings","_viewportScrollSubscription","_verticalScrollDirection","_horizontalScrollDirection","_stopScrollTimers","_cachedShadowRoot","_startScrollInterval","scheduler","isNumeric","Observable","animationFrame","pipe","takeUntil","_scrollNode","incrementVerticalScroll","incrementHorizontalScroll","withScrollableParents","registerDropContainer","removeDropContainer","styles","_initialScrollSnap","msScrollSnapType","scrollSnapType","_cacheItems","sibling","_startReceiving","_listenToScrollEvents","index","newIndex","_draggables","_getItemIndexFromPointerPosition","activeDraggables","_activeDraggables","newPositionReference","splice","parentElement","_shouldEnterAsFirstChild","reference","unshift","push","_cacheItemPositions","_cacheParentPositions","_reset","items","previousItems","_withDropContainer","filter","every","connectedTo","slice","orientation","_scrollableElements","findIndex","reverse","currentItem","size","pointerDelta","_clientRect","siblings","isHorizontal","siblingAtNewPosition","newPosition","itemOffset","_getItemOffsetPx","siblingOffset","_getSiblingOffsetPx","oldOrder","isDraggedItem","offset","elementToOffset","scrollNode","verticalScrollDirection","horizontalScrollDirection","computedVertical","getVerticalScrollDirection","computedHorizontal","getHorizontalScrollDirection","scrollHeight","clientHeight","scrollWidth","clientWidth","getViewportSize","window","elementToMeasure","getVisibleElement","sort","a","b","_stopReceiving","immediateSibling","end","itemPositions","lastItemRect","firstItemRect","_","floor","_canReceive","elementFromPoint","_getShadowRoot","nativeElement","activeSiblings","_sortFromLastPointerPosition","isReceiving","shadowRoot","predicate","amount","scrollBy","DragDropRegistry","DragDrop","CdkDropList","CdkDragHandle","CdkDrag","CdkDragPreview","activeCapturingEventOptions","capture","_dropInstances","_dragInstances","_activeDragInstances","_globalListeners","_preventDefaultWhileDragging","startsWith","upEvent","e","options","config","_clearGlobalListeners","instance","ɵfac","t","ɵprov","factory","token","providedIn","DEFAULT_CONFIG","CDK_DROP_LIST_GROUP","CDK_DRAG_CONFIG","_uniqueIdCounter","CDK_DROP_LIST","dragDrop","_changeDetectorRef","_dir","_group","_scrollDispatcher","_destroyed","id","_unsortedItems","_dropListRef","createDropList","data","_assignDefaults","_setupInputSyncSubscription","_handleEvents","_dropLists","_items","_syncItemsWithRef","_dragRef","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","dispose","ref","startWith","withDirection","correspondingDropList","list","console","warn","_scrollableParentsResolved","scrollableParents","getAncestorScrollContainers","scrollable","getElementRef","withOrientation","markForCheck","emit","draggingDisabled","listAutoScrollDisabled","listOrientation","withItems","getSortedItems","ɵdir","selectors","hostAttrs","hostVars","hostBindings","rf","ctx","inputs","outputs","exportAs","features","provide","useValue","useExisting","CDK_DRAG_PARENT","CDK_DRAG_HANDLE","parentDrag","_stateChanges","_parentDrag","CDK_DRAG_PLACEHOLDER","CDK_DRAG_PREVIEW","templateRef","_matchSize","_viewContainerRef","_selfHandle","observer","subscription","movedEvent","createDrag","addItem","_syncInputs","reset","getFreeDragPosition","onStable","take","_updateRootElement","changes","tap","childHandleElements","rootElementSelector","withHandles","switchMap","merge","handleInstance","dragRef","disableHandle","enableHandle","freeDragPosition","rootSelectorChange","positionChange","firstChange","removeItem","getClosestMatchingAncestor","Error","boundary","dir","withBoundaryElement","_getBoundaryElement","withPlaceholderTemplate","withPreviewTemplate","contentQueries","dirIndex","_t","first","currentElement","matches","msMatchesSelector","DragDropModule","ɵmod","ɵinj","providers","imports","FormattedFileSizePipe","precision","bytes","isNaN","String","isFinite","CdkAccordionModule","CdkAccordionItem","CdkAccordion","nextId","CDK_ACCORDION","_openCloseAllActions","_multi","_openCloseAll","expanded","multi","nextId$1","accordion","_expansionDispatcher","_openCloseAllSubscription","closed","opened","destroyed","expandedChange","_expanded","_removeUniqueSelectionListener","listen","accordionId","_subscribeToOpenCloseAllActions","notify","_c0","MatExpansionPanel_ng_template_5_Template","_c1","_c2","MatExpansionPanelHeader_span_4_Template","ctx_r0","_getExpandedState","MatExpansionPanelContent","MatAccordion","MatExpansionPanelTitle","MatExpansionPanelHeader","MatExpansionPanelActionRow","MatExpansionPanel","MatExpansionModule","_c3","_c4","MAT_ACCORDION","matExpansionAnimations","indicatorRotate","bodyExpansion","visibility","_template","uniqueId","MAT_EXPANSION_PANEL_DEFAULT_OPTIONS","_uniqueSelectionDispatcher","_animationMode","defaultOptions","super","_hideToggle","afterExpand","afterCollapse","_inputChanges","_headerId","_bodyAnimationDone","distinctUntilChanged","fromState","toState","hideToggle","displayMode","_lazyContent","_portal","_body","focusedElement","activeElement","bodyElement","_togglePosition","togglePosition","ɵcmp","viewQuery","_hasSpacing","ngContentSelectors","decls","vars","consts","$event","directives","encapsulation","animation","changeDetection","panel","_element","_focusMonitor","_parentChangeSubscription","accordionHideToggleChange","_containsFocus","focusVia","expandedHeight","collapsedHeight","toggle","isExpanded","_isExpanded","keyCode","_toggle","_handleHeaderKeydown","origin","monitor","_handleHeaderFocus","stopMonitoring","_keydown","_getPanelId","_getHeaderHeight","_getTogglePosition","_showToggle","arguments","_ownHeaders","_headers","headers","header","notifyOnChanges","_keyManager","withWrap","manager","setFirstItemActive","setLastItemActive","onKeydown","updateActiveItem","show","ɵMatAccordion_BaseFactory","AppearanceImageUploadValidator","DEFAULT_MAX_SIZE_MB","validations","maxSize","i18n","types","FullPlanNameComponent","plan","SettingsState","SettingsResolve","http","router","route","toPromise","response","navigate","initial","server","client","diffSettingObjects","changed","settings","changedSettings","TextFieldModule","MatInputModule","SpaceInputModule","TextEditorModule","SettingsModule","MAT_INPUT_VALUE_ACCESSOR","RECAPTCHA_ACTIONS","description","MatCalendarBody_tr_0_Template","_cellPadding","numCols","label","MatCalendarBody_tr_1_td_1_Template","ctx_r4","_firstRowOffset","labelMinRequiredCells","MatCalendarBody_tr_1_td_2_Template","_r9","item_r6","$implicit","_cellClicked","colIndex_r7","rowIndex_r3","ctx_r5","_cellWidth","enabled","_isActiveCell","_isRangeStart","compareValue","_isRangeEnd","_isInRange","_isComparisonBridgeStart","_isComparisonBridgeEnd","_isComparisonStart","_isComparisonEnd","_isInComparisonRange","_isPreviewStart","_isPreviewEnd","_isInPreview","cssClasses","ariaLabel","_isSelected","todayValue","displayValue","MatCalendarBody_tr_1_Template","row_r2","ctx_r1","MatMonthView_th_3_Template","day_r1","narrow","MatCalendar_ng_template_0_Template","MatCalendar_mat_month_view_2_Template","_r5","activeDate","_dateSelected","selected","dateFilter","maxDate","minDate","dateClass","comparisonStart","comparisonEnd","MatCalendar_mat_year_view_3_Template","_r8","_monthSelectedInYearView","_goToDateInView","ctx_r2","MatCalendar_mat_multi_year_view_4_Template","_r12","_yearSelectedInMultiYearView","ctx_r3","MatDatepickerToggle__svg_svg_2_Template","createMissingDateImplError","provider","MatDatepickerIntl","MatCalendarBody","calendarLabel","openCalendarLabel","prevMonthLabel","nextMonthLabel","prevYearLabel","nextYearLabel","prevMultiYearLabel","nextMultiYearLabel","switchToMonthViewLabel","switchToMultiYearViewLabel","MatCalendarCell","rawValue","_elementRef","activeCell","isRange","cellAspectRatio","previewStart","previewEnd","selectedValueChange","previewChange","_enterHandler","_skipNextFocus","cell","_getCellFromElement","_leaveHandler","isTableCell","startValue","endValue","columnChanges","rows","rowIndex","colIndex","cellNumber","movePreview","querySelector","focus","isStart","isEnd","isInRange","previousCell","previousRow","nextCell","nextRow","row","getAttribute","col","parseInt","attrs","rangeEnabled","MatSingleDateSelectionModel","MatDateSelectionModel","MatMultiYearView","MatMonthView","DefaultMatCalendarRangeStrategy","DateRange","selection","_adapter","_selectionChanged","selectionChanged","date","isDateInstance","isValid","adapter","_isValidDateInstance","MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER","deps","useFactory","MAT_DATE_RANGE_SELECTION_STRATEGY","_dateAdapter","currentRange","compareDate","_dateFormats","_rangeStrategy","_rerenderSubscription","selectedChange","_userSelection","activeDateChange","_activeDate","today","localeChanges","_init","rangeStartDate","rangeEndDate","selectedYear","getYear","selectedMonth","getMonth","selectedDate","createDate","_selected","_getDateInCurrentMonth","oldActiveDate","isRtl","_isRtl","addCalendarDays","getDate","getNumDaysInMonth","altKey","addCalendarYears","addCalendarMonths","_previewEnd","_previewStart","_focusActiveCell","_setRanges","_todayDate","_getCellCompareValue","_monthLabel","getMonthNames","toLocaleUpperCase","firstOfMonth","_firstWeekOffset","getDayOfWeek","getFirstDayOfWeek","_initWeekdays","_createWeekCells","_matCalendarBody","previewRange","createPreview","firstDayOfWeek","narrowWeekdays","getDayOfWeekNames","weekdays","long","_weekdays","concat","daysInMonth","dateNames","getDateNames","_weeks","_shouldEnableDate","format","dateA11yLabel","cellClasses","_hasSameMonthAndYear","d1","d2","year","month","day","getTime","obj","selectedValue","_rangeStart","_rangeEnd","_isRange","_comparisonRangeStart","_comparisonRangeEnd","validDate","_getValidDateOrNull","deserialize","clampDate","_minDate","_maxDate","_previewChanged","_handleCalendarBodyKeydown","yearSelected","_todayYear","minYearOfPage","getActiveOffset","_years","_createCellForYear","yearsPerPage","_yearSelected","yearName","getYearName","_shouldEnableYear","_selectedYear","isSameMultiYearView","_setSelectedYear","_getActiveCell","dateAdapter","date1","date2","year1","year2","startingYear","getStartingYear","MatCalendar","MatCalendarHeader","MatYearView","MatDatepicker","MatDatepickerBase","MatDatepickerContent","MatDatepickerInputBase","MatDatepickerModule","MatDatepickerToggle","MatDatepickerToggleIcon","MatDatepickerInput","ImageZoomModule","AdminComponent","monthSelected","normalizedDate","_monthSelected","_setSelectedMonth","_todayMonth","_getMonthInCurrentYear","_yearLabel","monthNames","_months","_createCellForMonth","monthName","monthYearA11yLabel","_shouldEnableMonth","activeYear","_isYearAndMonthAfterMaxDate","_isYearAndMonthBeforeMinDate","maxYear","maxMonth","minYear","minMonth","_selectedMonth","_intl","calendar","changeDetectorRef","stateChanges","currentView","_isSameView","monthYearLabel","maxYearOfPage","minYearName","maxYearName","formatYearRange","currentPeriodClicked","previousClicked","nextClicked","periodButtonLabel","periodButtonText","previousEnabled","prevButtonLabel","nextEnabled","nextButtonLabel","_moveFocusOnNextTick","startView","_intlChanges","_calendarHeaderPortal","headerComponent","startAt","_currentView","focusActiveCell","view","_getCurrentViewComponent","monthView","yearView","multiYearView","sameDate","normalizedYear","normalizedMonth","_startAt","_clampedActiveDate","matDatepickerAnimations","transformPanel","opacity","fadeInCalendar","datepickerUid","MAT_DATEPICKER_SCROLL_STRATEGY","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER","overlay","scrollStrategies","reposition","_MatDatepickerContentMixinBase","elementRef","_model","_rangeSelectionStrategy","_subscriptions","_animationState","_animationDone","datepicker","_calendar","newSelection","selectionFinished","updateSelection","isComplete","close","touchUi","color","_selectYear","_selectMonth","_handleUserSelection","panelClass","_getMinDate","_getMaxDate","_getDateFilter","calendarHeaderComponent","_getSelected","_dialog","_overlay","scrollStrategy","_inputStateChanges","_touchUi","xPosition","yPosition","openedStream","closedStream","_opened","_focusedElementBeforeOpen","_scrollStrategy","_datepickerInput","_popupRef","_setConnectedPositions","getConfig","positionStrategy","updatePosition","_destroyPopup","input","_openAsDialog","_openAsPopup","_popupComponentRef","_startExitAnimation","_dialogRef","completeClose","open","viewContainerRef","hasBackdrop","disableClose","minWidth","minHeight","maxWidth","maxHeight","autoFocus","restoreFocus","afterClosed","_forwardContentValues","componentInstance","portal","_createPopup","attach","flexibleConnectedTo","getConnectedOverlayOrigin","withTransformOriginOn","withFlexibleDimensions","withViewportMargin","withLockedPosition","overlayConfig","backdropClass","create","overlayElement","backdropClick","detachments","keydownEvents","strategy","primaryX","secondaryX","primaryY","secondaryY","withPositions","originX","originY","overlayX","overlayY","getStartValue","_color","getThemePalette","ɵMatDatepicker_BaseFactory","MatDatepickerInputEvent","targetElement","dateChange","dateInput","_valueChange","_onTouched","_validatorOnChange","_cvaOnChange","_valueChangesSubscription","_localeSubscription","_parseValidator","_lastValueValid","_filterValidator","control","controlValue","_minValidator","_maxValidator","model","_pendingValue","_assignValue","_getValueFromModel","_isValidValue","_formatValue","_canEmitChangeEvent","_outsideValueChanged","_isInitialized","fn","c","_validator","isDisabled","readOnly","_openPopup","lastValueWasValid","parse","_assignValueToModel","oldDate","_parentDisabled","blur","MAT_DATEPICKER_VALUE_ACCESSOR","MAT_DATEPICKER_VALIDATORS","dateFormats","_formField","compose","_datepicker","modelValue","_min","_max","_dateFilter","_registerModel","_registerInput","_onInput","_onChange","_onBlur","_onKeydown","toIso8601","matDatepicker","defaultTabIndex","parsedTabIndex","Number","tabIndex","_watchStateChanges","datepickerStateChanged","of","inputStateChanged","datepickerToggled","_customIcon","_button","disableRipple","_open","useClass","COMMON_ADMIN_CONFIG","admin","tagTypes","pages","currentUser","breakpoints","leftColumnIsHidden","menu","generateMenu","isMobile$","events","icon","permission","getCustomSidebarItems","action","activeExact","condition","user","hasPermission","toggleLeftSidebar","CrupdateTemplateModalComponent","dialogRef","templates","toast","themesApi","fb","cd","allCategories","themes","loading$","BehaviorSubject","form","group","category","includeBootstrap","files","errors","getJson","setValue","getThemes","hydrateModel","payload","getPayload","update","finalize","errResponse","FormData","append","thumbnail","patchValue","all","confirm","setFile","removeNullFromObject","copy","Object","keys","DELETE_RESOURCE_MESSAGE","title","ok","sortingDataAccessor","sortHeaderId","numberValue","DatatableService","modal","localStorage","sort$","filters$","staticParams$","paginator","ignoreNextParamChange","originalData$","data$","selectedRows$","staticParams","uri","connectToPaginator","initialData","mainSub","combineLatest","debounceTime","params","assign","entries","paginate","applyLocalTransforms","paginatorSub","response$","pairwise","current","prev","infiniteScroll","pagination","current_page","query","dataStr","objectToStr","reduce","currentTerm","transformedFilter","orderBy","orderDir","valueA","valueB","valueAType","valueBType","comparatorResult","filters","cmp","beforeClosed","modifiedResource","resource","replacements","confirmed","tableData","LEFT_POSITION","offsetX","DatatableFiltersPanelComponent","overlayPanelRef","dialogContainer","DatatableHeaderSearchInputComponent","datatable","searchControl","snapshot","queryParams","hideIcon","valueChanges","addFilter","DatatableHeaderComponent","TableHeaderCheckboxComponent","TableSortHeaderComponent","overlayPanel","showSelectedActions","subscriptions","v","filterSub","filterPanelRef","changeSub","numberOfRowsSelected","s","offsetY","filterButton","mobilePosition","filterPanelTemplate","remove","changeRef","allRowsSelected","toggleAllRows","datable","focusMonitor","el","arrowVisible","arrowDirection","columnName","textContent","sortSub","onMouseLeave","getDirection","disableSort","changeSort","DatatableFooterComponent","TableBodyCheckboxComponent","hidePerPage","perPageControl","r","per_page","totalRecords","total","havePrevious","haveNext","last_page","emitEvent","perPage","changePerPage","previousPage","nextPage","isRowSelected","toggleRow","TemplatesComponent","templates$","init","confirmResourceDeletion","openCrupdateResourceModal","getBaseUrl","UserColumnComponent","showEmail","ProjectsComponent","SettingsPanelComponent","projects","projectUrl","projects$","BASE_URI","ids","project","showExtraConfig","customHomepage","valueLists","errors$","JSON","stringify","getModified","save","clearErrors","updateInitial","prefix","firstKey","document","getElementById","scrollIntoView","behavior","block","inline","ChipInputComponent","emailsInput","selectMode","formControl","items$","suggestedValues$","suggestFn","bindToSearchControl","parseEmailsOnPaste","propagateChange","propagate","matAutocomplete","isOpen","duplicate","findValueIndex","inputEl","catchError","values","filtered","emails","clipboardData","getData","match","getSelection","rangeCount","deleteFromDocument","email","addFromAutocomplete","BuilderSettingsComponent","categories","defaultPublishCredentials","saveSettings","APP_ADMIN_ROUTES","path","component","permissions","APP_SETTING_ROUTES","SettingsComponent","activePanel$","firstChild","routeConfig","setAll","GeneralSettingsComponent","menuItemCategories$","cssThemes","menuItemCategories","getComponents","page","replace","l","toUpperCase","post","createSitemap","AuthenticationSettingsComponent","CacheSettingsComponent","AnalyticsSettingsComponent","certificateFile","certificate","LocalizationSettingsComponent","selects","timezones","localizations","defaultDateFormats","initialDateFormat","includes","updateDateFormat","MailSettingsComponent","LoggingSettingsComponent","QueueSettingsComponent","BillingSettingsComponent","acceptedCards","BackblazeFormComponent","DigitaloceanFormComponent","S3FormComponent","RackspaceFormComponent","DropboxFormComponent","FtpFormComponent","SpaceInputComponent","inputContainer","spaceUnits","unit","convertToBytes","fromBytes","pretty","UploadingSettingsComponent","allowedExtensions","blockedExtensions","serverMaxUploadSize$","getServerMaxUploadSize","setJson","uploads_disk_driver","public_disk_driver","d","flattenArray","arrays","apply","RecaptchaSettingsComponent","recaptchaActions","actions","defaultThrottleConfig","leading","trailing","ThrottleTimeOperator","destination","_hasTrailingValue","_trailingValue","throttled","dispatchNext","Subscriber","arg","clearThrottle","UploadProgressBarComponent","UploadButtonDirective","uploadQueue","hidden","totalProgress","lift","progress","count$","pending","filesSelected","UploadImageControlComponent","RoleService","imageValidator","uploadsApi","fileDeleted","buttonText","compact","uploadInputConfig","multiple","image","src$","uploadConfig","defaultUploadConfig","fileEntry","url","paths","deleteForever","httpParams","diskPrefix","Image","validator","menuTrigger","toggleMenu","uploadImage","SelectionModel","initialValues","p","httpClient","getWithCache","roleId","put","userIds","selectionModel","SelectRolesModalComponent","rolesService","allRoles$","initialRoles","fetchAllRoles","getRoles","RoleManagerComponent","users","roleApi","roles$","readonly","roles","setRoles","role","SelectPermissionsModalComponent","allPermissions$","initialPermissions","fetchAllPermissions","getSelectedPermissions","valueListKey","mergeRestrictions","rv","isSelected","allPermissions","modelPermission","getValue","restrictions","restriction","modelRestriction","PermissionManagerComponent","hideRestrictions","permissions$","setPermissions","showSelectPermissionsModal","CrupdateUserModalComponent","BetweenInputComponent","auth","avatarValidator","password","avatar","first_name","last_name","email_verified_at","available_space","resendEmailConfirmation","message","Default","setDefaultDate","showLabels","datePattern","initiated","defaultFrom","getDefaultDate","defaultTo","minusDays","setDate","addZero","getFullYear","number","UserIndexFiltersComponent","subscribed","created_at","UserIndexComponent","userService","users$","join","Role","CrupdateRoleModalComponent","roleService","default","guests","resetState","createNew","FindUserModalComponent","searchFormControl","searchUsers","getAll","RoleIndexComponent","selectedRole$","refreshRoles","role_id","refreshRoleUsers","selectRole","addUsers","deleteRole","removeUsersFromSelectedRole","removeUsers","NewLineModalComponent","CrupdateLocalizationModalComponent","lists","languages$","language","languages","localization","updateLocalization","createNewLocalization","line","LocalizationIndexComponent","FileEntryIndexFiltersComponent","localizationsApi","loadingLines$","searchQuery","localizations$","lines$","trackByFn","setLocalizations","bindSearchQuery","active","setSelectedLocalization","selectedLocalization","lines","originalLines","loc","setDefault","getActive","setLocalization","newLocalization","deleteLocalization","filterPredicate","transformed","translation","linesToArray","addLine","public","owner","ImageZoomComponent","ImageZoomOverlayComponent","FileEntryIndexComponent","uploads","files$","entryIds","src","alt","zoomImage","AdsPageComponent","hydrate","slot","getFlat","allAds","ad","addControl","saveAds","PlanIndexFiltersComponent","CrupdatePlanModalComponent","plans","features$","currencies$","intervals","allPlans$","parent_id","free","recommended","show_permissions","currency","interval","interval_count","currencies","getRawValue","feature","content","curr","code","currency_symbol","symbol","newFeature","newFeatures","f","planToSkip","disable","PlanIndexComponent","plans$","sync","SubscriptionIndexFiltersComponent","CrupdateSubscriptionModalComponent","plansApi","plan_id","renews_at","ends_at","userAutocomplete","filteredUsers","bindToUserAutocomplete","fetchPlans","mysqlToDate","user_id","renewsAt","dateToMysql","endsAt","toJSON","UTC","datePicker","gateway","SubscriptionIndexComponent","subscriptions$","bodyBold","cancel","cancelOrDeleteSubscription","delete","newSubscription","GdprSettingsComponent","TagsService","customPages$","registerPolicies","policy","addRegisterPolicy","register_policies","getFirstCustomPageAction","removeAt","tagIds","CrupdateTagModalComponent","tags","isSystemTag","display_name","tag","forceType","system","TagIndexFiltersComponent","TagIndexComponent","tags$","showFilterPanel","CustomPageTableComponent","showOwnerColumn","showTypeColumn","slug","CustomPagesIndexComponent","TinymceTextEditor","TextEditorImageValidator","customPages","endpoint","pages$","with","maybeDeleteSelectedPages","zone","lazyLoader","makeBootstrapPromise","editorIsReady","tinymceInstance","setContent","undoManager","waitForEditor","hasUndo","hasRedo","queryCommandState","execCommand","getContent","contents","transact","setCursorLocation","nodeChanged","collapse","insertContents","bootstrapPromise","loadTinymce","initTinymce","loadAsset","textAreaEl","plugins","branding","browser_spellcheck","max_height","min_height","autoresize_on_init","paste_as_text","elementpath","statusbar","entity_encoding","menubar","convert_urls","forced_root_block","document_base_url","baseURI","element_format","body_class","content_style","content_css","default_link_target","link_assume_external_targets","target_list","link_title","image_dimensions","image_description","setup","editor","on","onChange","shortcuts","onCtrlEnter","init_instance_callback","bootstrapPromiseResolve","toolbar","extended_valid_elements","getAssetUrl","editorEl","offsetHeight","tinymce","TextEditorComponent","renderer","sourceAreaControl","activeEditor","showAdvancedControls","basic","onFileUpload","bootTextEditor","destroyEditor","command","BeColorPickerModule","components","valueChanged","contentAreaContainer","setStyle","sourceTextArea","getContents","source_view","fileList","inlineUploadPrefix","insertImage","setContents","href","text","setConfig","visualTextArea","SlugControlComponent","slug$","editing$","slugControl","baseUri","CrupdateCustomPageComponent","BaseAdminRoutingModule","FindUserModalModule","UploadsModule","RoleManagerModule","SlugControlModule","ConfirmModalModule","UploadImageControlModule","BetweenDateInputModule","CustomPageIndexModule","AppAdminModule","BaseAdminModule","hideSlug","updating$","hide_nav","getPage","dirty","backRoute","relativeTo","delay","textEditor","routes","canActivate","canActivateChild","children","redirectTo","pathMatch","loadChildren","m","AnalyticsModule","AppAppearanceModule","forChild","vebto","SkeletonComponent","theme","variant","dark","isDarkMode","BillingEnabledGuard","enterDuration","MAT_RADIO_DEFAULT_OPTIONS","nextUniqueId","MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","MatRadioGroup","MatRadioChange","MAT_RADIO_GROUP","_MatRadioGroupBase","_changeDetector","_value","_name","_labelPosition","_required","_controlValueAccessorChangeFn","onTouched","checked","_radios","radio","_markForCheck","_updateRadioButtonNames","_markRadiosForCheck","_updateSelectedRadioFromValue","_checkSelectedRadioButton","labelPosition","required","ɵMatRadioGroup_BaseFactory","MatRadioButton","_MatRadioButtonMixinBase","_MatRadioButtonBase","radioGroup","_radioDispatcher","_providerOverride","_uniqueId","_checked","_inputElement","focusOrigin","_touch","groupValueChanged","_emitChangeEvent","newCheckedState","_setDisabled","ariaLabelledby","ariaDescribedby","changeDetector","radioDispatcher","animationMode","providerOverride","_onInputChange","_onInputClick","_r0","inputId","_isRippleDisabled","MatRadioModule","UploadUri","MatDrawerContainer_div_0_Template","_r3","_onBackdropClicked","_isShowingBackdrop","MatDrawerContainer_mat_drawer_content_3_Template","MatSidenavContainer_div_0_Template","MatSidenavContainer_mat_sidenav_content_3_Template","_c5","matDrawerAnimations","transformDrawer","throwMatDuplicatedDrawerError","MAT_DRAWER_DEFAULT_AUTOSIZE","MAT_DRAWER_CONTAINER","MatDrawerContent","_container","scrollDispatcher","ngZone","_contentMarginChanges","MatDrawerContainer","_contentMargins","MatDrawer","_focusTrapFactory","_platform","_doc","_elementFocusedBeforeDrawerWasOpened","_enableAnimations","_position","_mode","_disableClose","_animationStarted","_animationEnd","openedChange","_openedStream","o","_closedStream","onPositionChanged","_modeChanged","_takeFocus","_isFocusWithinDrawer","_restoreFocus","_focusTrap","focusInitialElementWhenReady","hasMovedFocus","_openedVia","activeEl","_updateFocusTrapState","isBrowser","openedVia","_setOpen","offsetWidth","mode","_autoFocus","_animationStartListener","_animationDoneListener","openedStart","closedStart","viewportRuler","defaultAutosize","_drawers","_doCheckSubject","_validateDrawers","updateContentMargins","_autosize","_allDrawers","drawer","_watchDrawerToggle","_watchDrawerPosition","_watchDrawerMode","_isDrawerOpen","_start","_end","_left","_getWidth","_right","_isPushed","_setContainerClass","onMicrotaskEmpty","isAdd","_closeModalDrawersViaBackdrop","_canHaveBackdrop","_closeViaBackdropClick","_backdropOverride","_userContent","_content","autosize","MatSidenavContent","MatSidenavContainer","MatSidenav","_fixedInViewport","_fixedTopGap","_fixedBottomGap","ɵMatSidenav_BaseFactory","fixedInViewport","fixedTopGap","fixedBottomGap","ɵMatSidenavContainer_BaseFactory","MatSidenavModule","Plans","FullPlanNameModule","DefaultUploadValidator","UploadQueueService","file","queueId","canceled$","processing$","uploadedResponse$","ReplaySubject","progress$","percentage","error$","customData","uploadedFile","setProgress","eta","completed","errorMessage","extensions","some","extension","DEFAULT_MAX_FILE_SIZE_MB","showToast","getMaxFileSize","getAllowedExtensions","getBlockedExtensions","api","defaultValidator","uploads$","totalProgress$","uploadsAdded$","queueItem","upload","uploadQueueItems","transformUploads","updateCount","u","mergeMap","uploadQueueItem","handleUploadFailure","bubbleError","throwError","handleUploadEvent","willProcessFiles","COMPLETED","queueItemId","speed","totalBytes","completedBytes","updateTotalProgress","addError","activeUpload","result","validate","failed","PROGRESS","updateProgress","completeUpload","msg","showLearnMoreButton","DefaultUpload","isAdmin","errorUpload","onAction","inProgress","SkeletonModule"],"mappings":"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","sourceRoot":"webpack:///","sourcesContent":["import { Observable } from '../Observable';\nimport { async } from '../scheduler/async';\nimport { isNumeric } from '../util/isNumeric';\nexport function interval(period = 0, scheduler = async) {\n if (!isNumeric(period) || period < 0) {\n period = 0;\n }\n if (!scheduler || typeof scheduler.schedule !== 'function') {\n scheduler = async;\n }\n return new Observable(subscriber => {\n subscriber.add(scheduler.schedule(dispatch, period, { subscriber, counter: 0, period }));\n return subscriber;\n });\n}\nfunction dispatch(state) {\n const { subscriber, counter, period } = state;\n subscriber.next(counter);\n this.schedule({ subscriber, counter: counter + 1, period }, period);\n}\n//# sourceMappingURL=interval.js.map","import { ɵɵdefineInjectable, ɵɵinject, NgZone, Injectable, Inject, InjectionToken, Directive, Input, EventEmitter, isDevMode, ElementRef, ChangeDetectorRef, Optional, SkipSelf, Output, TemplateRef, ViewContainerRef, Self, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ViewportRuler, ScrollDispatcher, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { normalizePassiveListenerOptions, _getShadowRoot } from '@angular/cdk/platform';\nimport { coerceBooleanProperty, coerceElement, coerceArray, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Subject, Subscription, interval, animationFrameScheduler, Observable, merge } from 'rxjs';\nimport { takeUntil, startWith, map, take, tap, switchMap } from 'rxjs/operators';\nimport { Directionality } 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 * Shallow-extends a stylesheet object with another stylesheet object.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/scrolling';\nimport * as ɵngcc2 from '@angular/cdk/bidi';\nfunction extendStyles(dest, source) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = source[key];\n }\n }\n return dest;\n}\n/**\n * Toggles whether the native drag interactions should be enabled for an element.\n * @param element Element on which to toggle the drag interactions.\n * @param enable Whether the drag interactions should be enabled.\n * @docs-private\n */\nfunction toggleNativeDragInteractions(element, enable) {\n const userSelect = enable ? '' : 'none';\n extendStyles(element.style, {\n touchAction: enable ? '' : 'none',\n webkitUserDrag: enable ? '' : 'none',\n webkitTapHighlightColor: enable ? '' : 'transparent',\n userSelect: userSelect,\n msUserSelect: userSelect,\n webkitUserSelect: userSelect,\n MozUserSelect: userSelect\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/** Parses a CSS time value to milliseconds. */\nfunction parseCssTimeUnitsToMs(value) {\n // Some browsers will return it in seconds, whereas others will return milliseconds.\n const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;\n return parseFloat(value) * multiplier;\n}\n/** Gets the transform transition duration, including the delay, of an element in milliseconds. */\nfunction getTransformTransitionDurationInMs(element) {\n const computedStyle = getComputedStyle(element);\n const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');\n const property = transitionedProperties.find(prop => prop === 'transform' || prop === 'all');\n // If there's no transition for `all` or `transform`, we shouldn't do anything.\n if (!property) {\n return 0;\n }\n // Get the index of the property that we're interested in and match\n // it up to the same index in `transition-delay` and `transition-duration`.\n const propertyIndex = transitionedProperties.indexOf(property);\n const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');\n const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');\n return parseCssTimeUnitsToMs(rawDurations[propertyIndex]) +\n parseCssTimeUnitsToMs(rawDelays[propertyIndex]);\n}\n/** Parses out multiple values from a computed style into an array. */\nfunction parseCssPropertyValue(computedStyle, name) {\n const value = computedStyle.getPropertyValue(name);\n return value.split(',').map(part => part.trim());\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/** Gets a mutable version of an element's bounding `ClientRect`. */\nfunction getMutableClientRect(element) {\n const clientRect = element.getBoundingClientRect();\n // We need to clone the `clientRect` here, because all the values on it are readonly\n // and we need to be able to update them. Also we can't use a spread here, because\n // the values on a `ClientRect` aren't own properties. See:\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#Notes\n return {\n top: clientRect.top,\n right: clientRect.right,\n bottom: clientRect.bottom,\n left: clientRect.left,\n width: clientRect.width,\n height: clientRect.height\n };\n}\n/**\n * Checks whether some coordinates are within a `ClientRect`.\n * @param clientRect ClientRect that is being checked.\n * @param x Coordinates along the X axis.\n * @param y Coordinates along the Y axis.\n */\nfunction isInsideClientRect(clientRect, x, y) {\n const { top, bottom, left, right } = clientRect;\n return y >= top && y <= bottom && x >= left && x <= right;\n}\n/**\n * Updates the top/left positions of a `ClientRect`, as well as their bottom/right counterparts.\n * @param clientRect `ClientRect` that should be updated.\n * @param top Amount to add to the `top` position.\n * @param left Amount to add to the `left` position.\n */\nfunction adjustClientRect(clientRect, top, left) {\n clientRect.top += top;\n clientRect.bottom = clientRect.top + clientRect.height;\n clientRect.left += left;\n clientRect.right = clientRect.left + clientRect.width;\n}\n/**\n * Checks whether the pointer coordinates are close to a ClientRect.\n * @param rect ClientRect to check against.\n * @param threshold Threshold around the ClientRect.\n * @param pointerX Coordinates along the X axis.\n * @param pointerY Coordinates along the Y axis.\n */\nfunction isPointerNearClientRect(rect, threshold, pointerX, pointerY) {\n const { top, right, bottom, left, width, height } = rect;\n const xThreshold = width * threshold;\n const yThreshold = height * threshold;\n return pointerY > top - yThreshold && pointerY < bottom + yThreshold &&\n pointerX > left - xThreshold && pointerX < right + xThreshold;\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/** Keeps track of the scroll position and dimensions of the parents of an element. */\nclass ParentPositionTracker {\n constructor(_document, _viewportRuler) {\n this._document = _document;\n this._viewportRuler = _viewportRuler;\n /** Cached positions of the scrollable parent elements. */\n this.positions = new Map();\n }\n /** Clears the cached positions. */\n clear() {\n this.positions.clear();\n }\n /** Caches the positions. Should be called at the beginning of a drag sequence. */\n cache(elements) {\n this.clear();\n this.positions.set(this._document, {\n scrollPosition: this._viewportRuler.getViewportScrollPosition(),\n });\n elements.forEach(element => {\n this.positions.set(element, {\n scrollPosition: { top: element.scrollTop, left: element.scrollLeft },\n clientRect: getMutableClientRect(element)\n });\n });\n }\n /** Handles scrolling while a drag is taking place. */\n handleScroll(event) {\n const target = event.target;\n const cachedPosition = this.positions.get(target);\n if (!cachedPosition) {\n return null;\n }\n // Used when figuring out whether an element is inside the scroll parent. If the scrolled\n // parent is the `document`, we use the `documentElement`, because IE doesn't support\n // `contains` on the `document`.\n const scrolledParentNode = target === this._document ? target.documentElement : target;\n const scrollPosition = cachedPosition.scrollPosition;\n let newTop;\n let newLeft;\n if (target === this._document) {\n const viewportScrollPosition = this._viewportRuler.getViewportScrollPosition();\n newTop = viewportScrollPosition.top;\n newLeft = viewportScrollPosition.left;\n }\n else {\n newTop = target.scrollTop;\n newLeft = target.scrollLeft;\n }\n const topDifference = scrollPosition.top - newTop;\n const leftDifference = scrollPosition.left - newLeft;\n // Go through and update the cached positions of the scroll\n // parents that are inside the element that was scrolled.\n this.positions.forEach((position, node) => {\n if (position.clientRect && target !== node && scrolledParentNode.contains(node)) {\n adjustClientRect(position.clientRect, topDifference, leftDifference);\n }\n });\n scrollPosition.top = newTop;\n scrollPosition.left = newLeft;\n return { top: topDifference, left: leftDifference };\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/** Creates a deep clone of an element. */\nfunction deepCloneNode(node) {\n const clone = node.cloneNode(true);\n const descendantsWithId = clone.querySelectorAll('[id]');\n const nodeName = node.nodeName.toLowerCase();\n // Remove the `id` to avoid having multiple elements with the same id on the page.\n clone.removeAttribute('id');\n for (let i = 0; i < descendantsWithId.length; i++) {\n descendantsWithId[i].removeAttribute('id');\n }\n if (nodeName === 'canvas') {\n transferCanvasData(node, clone);\n }\n else if (nodeName === 'input' || nodeName === 'select' || nodeName === 'textarea') {\n transferInputData(node, clone);\n }\n transferData('canvas', node, clone, transferCanvasData);\n transferData('input, textarea, select', node, clone, transferInputData);\n return clone;\n}\n/** Matches elements between an element and its clone and allows for their data to be cloned. */\nfunction transferData(selector, node, clone, callback) {\n const descendantElements = node.querySelectorAll(selector);\n if (descendantElements.length) {\n const cloneElements = clone.querySelectorAll(selector);\n for (let i = 0; i < descendantElements.length; i++) {\n callback(descendantElements[i], cloneElements[i]);\n }\n }\n}\n/** Transfers the data of one input element to another. */\nfunction transferInputData(source, clone) {\n clone.value = source.value;\n}\n/** Transfers the data of one canvas element to another. */\nfunction transferCanvasData(source, clone) {\n const context = clone.getContext('2d');\n if (context) {\n // In some cases `drawImage` can throw (e.g. if the canvas size is 0x0).\n // We can't do much about it so just ignore the error.\n try {\n context.drawImage(source, 0, 0);\n }\n catch (_a) { }\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/** Options that can be used to bind a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });\n/** Options that can be used to bind an active event listener. */\nconst activeEventListenerOptions = normalizePassiveListenerOptions({ passive: false });\n/**\n * Time in milliseconds for which to ignore mouse events, after\n * receiving a touch event. Used to avoid doing double work for\n * touch devices where the browser fires fake mouse events, in\n * addition to touch events.\n */\nconst MOUSE_EVENT_IGNORE_TIME = 800;\n/**\n * Reference to a draggable item. Used to manipulate or dispose of the item.\n */\nclass DragRef {\n constructor(element, _config, _document, _ngZone, _viewportRuler, _dragDropRegistry) {\n this._config = _config;\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._dragDropRegistry = _dragDropRegistry;\n /**\n * CSS `transform` applied to the element when it isn't being dragged. We need a\n * passive transform in order for the dragged element to retain its new position\n * after the user has stopped dragging and because we need to know the relative\n * position in case they start dragging again. This corresponds to `element.style.transform`.\n */\n this._passiveTransform = { x: 0, y: 0 };\n /** CSS `transform` that is applied to the element while it's being dragged. */\n this._activeTransform = { x: 0, y: 0 };\n /** Emits when the item is being moved. */\n this._moveEvents = new Subject();\n /** Subscription to pointer movement events. */\n this._pointerMoveSubscription = Subscription.EMPTY;\n /** Subscription to the event that is dispatched when the user lifts their pointer. */\n this._pointerUpSubscription = Subscription.EMPTY;\n /** Subscription to the viewport being scrolled. */\n this._scrollSubscription = Subscription.EMPTY;\n /** Subscription to the viewport being resized. */\n this._resizeSubscription = Subscription.EMPTY;\n /** Cached reference to the boundary element. */\n this._boundaryElement = null;\n /** Whether the native dragging interactions have been enabled on the root element. */\n this._nativeInteractionsEnabled = true;\n /** Elements that can be used to drag the draggable item. */\n this._handles = [];\n /** Registered handles that are currently disabled. */\n this._disabledHandles = new Set();\n /** Layout direction of the item. */\n this._direction = 'ltr';\n /**\n * Amount of milliseconds to wait after the user has put their\n * pointer down before starting to drag the element.\n */\n this.dragStartDelay = 0;\n this._disabled = false;\n /** Emits as the drag sequence is being prepared. */\n this.beforeStarted = new Subject();\n /** Emits when the user starts dragging the item. */\n this.started = new Subject();\n /** Emits when the user has released a drag item, before any animations have started. */\n this.released = new Subject();\n /** Emits when the user stops dragging an item in the container. */\n this.ended = new Subject();\n /** Emits when the user has moved the item into a new container. */\n this.entered = new Subject();\n /** Emits when the user removes the item its container by dragging it into another container. */\n this.exited = new Subject();\n /** Emits when the user drops the item inside a container. */\n this.dropped = new Subject();\n /**\n * Emits as the user is dragging the item. Use with caution,\n * because this event will fire for every pixel that the user has dragged.\n */\n this.moved = this._moveEvents.asObservable();\n /** Handler for the `mousedown`/`touchstart` events. */\n this._pointerDown = (event) => {\n this.beforeStarted.next();\n // Delegate the event based on whether it started from a handle or the element itself.\n if (this._handles.length) {\n const targetHandle = this._handles.find(handle => {\n const target = event.target;\n return !!target && (target === handle || handle.contains(target));\n });\n if (targetHandle && !this._disabledHandles.has(targetHandle) && !this.disabled) {\n this._initializeDragSequence(targetHandle, event);\n }\n }\n else if (!this.disabled) {\n this._initializeDragSequence(this._rootElement, event);\n }\n };\n /** Handler that is invoked when the user moves their pointer after they've initiated a drag. */\n this._pointerMove = (event) => {\n // Prevent the default action as early as possible in order to block\n // native actions like dragging the selected text or images with the mouse.\n event.preventDefault();\n const pointerPosition = this._getPointerPositionOnPage(event);\n if (!this._hasStartedDragging) {\n const distanceX = Math.abs(pointerPosition.x - this._pickupPositionOnPage.x);\n const distanceY = Math.abs(pointerPosition.y - this._pickupPositionOnPage.y);\n const isOverThreshold = distanceX + distanceY >= this._config.dragStartThreshold;\n // Only start dragging after the user has moved more than the minimum distance in either\n // direction. Note that this is preferrable over doing something like `skip(minimumDistance)`\n // in the `pointerMove` subscription, because we're not guaranteed to have one move event\n // per pixel of movement (e.g. if the user moves their pointer quickly).\n if (isOverThreshold) {\n const isDelayElapsed = Date.now() >= this._dragStartTime + this._getDragStartDelay(event);\n if (!isDelayElapsed) {\n this._endDragSequence(event);\n return;\n }\n // Prevent other drag sequences from starting while something in the container is still\n // being dragged. This can happen while we're waiting for the drop animation to finish\n // and can cause errors, because some elements might still be moving around.\n if (!this._dropContainer || !this._dropContainer.isDragging()) {\n this._hasStartedDragging = true;\n this._ngZone.run(() => this._startDragSequence(event));\n }\n }\n return;\n }\n // We only need the preview dimensions if we have a boundary element.\n if (this._boundaryElement) {\n // Cache the preview element rect if we haven't cached it already or if\n // we cached it too early before the element dimensions were computed.\n if (!this._previewRect || (!this._previewRect.width && !this._previewRect.height)) {\n this._previewRect = (this._preview || this._rootElement).getBoundingClientRect();\n }\n }\n const constrainedPointerPosition = this._getConstrainedPointerPosition(pointerPosition);\n this._hasMoved = true;\n this._lastKnownPointerPosition = pointerPosition;\n this._updatePointerDirectionDelta(constrainedPointerPosition);\n if (this._dropContainer) {\n this._updateActiveDropContainer(constrainedPointerPosition, pointerPosition);\n }\n else {\n const activeTransform = this._activeTransform;\n activeTransform.x =\n constrainedPointerPosition.x - this._pickupPositionOnPage.x + this._passiveTransform.x;\n activeTransform.y =\n constrainedPointerPosition.y - this._pickupPositionOnPage.y + this._passiveTransform.y;\n this._applyRootElementTransform(activeTransform.x, activeTransform.y);\n // Apply transform as attribute if dragging and svg element to work for IE\n if (typeof SVGElement !== 'undefined' && this._rootElement instanceof SVGElement) {\n const appliedTransform = `translate(${activeTransform.x} ${activeTransform.y})`;\n this._rootElement.setAttribute('transform', appliedTransform);\n }\n }\n // Since this event gets fired for every pixel while dragging, we only\n // want to fire it if the consumer opted into it. Also we have to\n // re-enter the zone because we run all of the events on the outside.\n if (this._moveEvents.observers.length) {\n this._ngZone.run(() => {\n this._moveEvents.next({\n source: this,\n pointerPosition: constrainedPointerPosition,\n event,\n distance: this._getDragDistance(constrainedPointerPosition),\n delta: this._pointerDirectionDelta\n });\n });\n }\n };\n /** Handler that is invoked when the user lifts their pointer up, after initiating a drag. */\n this._pointerUp = (event) => {\n this._endDragSequence(event);\n };\n this.withRootElement(element);\n this._parentPositions = new ParentPositionTracker(_document, _viewportRuler);\n _dragDropRegistry.registerDragItem(this);\n }\n /** Whether starting to drag this element is disabled. */\n get disabled() {\n return this._disabled || !!(this._dropContainer && this._dropContainer.disabled);\n }\n set disabled(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._toggleNativeDragInteractions();\n }\n }\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n */\n getPlaceholderElement() {\n return this._placeholder;\n }\n /** Returns the root draggable element. */\n getRootElement() {\n return this._rootElement;\n }\n /**\n * Gets the currently-visible element that represents the drag item.\n * While dragging this is the placeholder, otherwise it's the root element.\n */\n getVisibleElement() {\n return this.isDragging() ? this.getPlaceholderElement() : this.getRootElement();\n }\n /** Registers the handles that can be used to drag the element. */\n withHandles(handles) {\n this._handles = handles.map(handle => coerceElement(handle));\n this._handles.forEach(handle => toggleNativeDragInteractions(handle, false));\n this._toggleNativeDragInteractions();\n return this;\n }\n /**\n * Registers the template that should be used for the drag preview.\n * @param template Template that from which to stamp out the preview.\n */\n withPreviewTemplate(template) {\n this._previewTemplate = template;\n return this;\n }\n /**\n * Registers the template that should be used for the drag placeholder.\n * @param template Template that from which to stamp out the placeholder.\n */\n withPlaceholderTemplate(template) {\n this._placeholderTemplate = template;\n return this;\n }\n /**\n * Sets an alternate drag root element. The root element is the element that will be moved as\n * the user is dragging. Passing an alternate root element is useful when trying to enable\n * dragging on an element that you might not have access to.\n */\n withRootElement(rootElement) {\n const element = coerceElement(rootElement);\n if (element !== this._rootElement) {\n if (this._rootElement) {\n this._removeRootElementListeners(this._rootElement);\n }\n this._ngZone.runOutsideAngular(() => {\n element.addEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n element.addEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n });\n this._initialTransform = undefined;\n this._rootElement = element;\n }\n if (typeof SVGElement !== 'undefined' && this._rootElement instanceof SVGElement) {\n this._ownerSVGElement = this._rootElement.ownerSVGElement;\n }\n return this;\n }\n /**\n * Element to which the draggable's position will be constrained.\n */\n withBoundaryElement(boundaryElement) {\n this._boundaryElement = boundaryElement ? coerceElement(boundaryElement) : null;\n this._resizeSubscription.unsubscribe();\n if (boundaryElement) {\n this._resizeSubscription = this._viewportRuler\n .change(10)\n .subscribe(() => this._containInsideBoundaryOnResize());\n }\n return this;\n }\n /** Removes the dragging functionality from the DOM element. */\n dispose() {\n this._removeRootElementListeners(this._rootElement);\n // Do this check before removing from the registry since it'll\n // stop being considered as dragged once it is removed.\n if (this.isDragging()) {\n // Since we move out the element to the end of the body while it's being\n // dragged, we have to make sure that it's removed if it gets destroyed.\n removeNode(this._rootElement);\n }\n removeNode(this._anchor);\n this._destroyPreview();\n this._destroyPlaceholder();\n this._dragDropRegistry.removeDragItem(this);\n this._removeSubscriptions();\n this.beforeStarted.complete();\n this.started.complete();\n this.released.complete();\n this.ended.complete();\n this.entered.complete();\n this.exited.complete();\n this.dropped.complete();\n this._moveEvents.complete();\n this._handles = [];\n this._disabledHandles.clear();\n this._dropContainer = undefined;\n this._resizeSubscription.unsubscribe();\n this._parentPositions.clear();\n this._boundaryElement = this._rootElement = this._ownerSVGElement = this._placeholderTemplate =\n this._previewTemplate = this._anchor = null;\n }\n /** Checks whether the element is currently being dragged. */\n isDragging() {\n return this._hasStartedDragging && this._dragDropRegistry.isDragging(this);\n }\n /** Resets a standalone drag item to its initial position. */\n reset() {\n this._rootElement.style.transform = this._initialTransform || '';\n this._activeTransform = { x: 0, y: 0 };\n this._passiveTransform = { x: 0, y: 0 };\n }\n /**\n * Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.\n * @param handle Handle element that should be disabled.\n */\n disableHandle(handle) {\n if (this._handles.indexOf(handle) > -1) {\n this._disabledHandles.add(handle);\n }\n }\n /**\n * Enables a handle, if it has been disabled.\n * @param handle Handle element to be enabled.\n */\n enableHandle(handle) {\n this._disabledHandles.delete(handle);\n }\n /** Sets the layout direction of the draggable item. */\n withDirection(direction) {\n this._direction = direction;\n return this;\n }\n /** Sets the container that the item is part of. */\n _withDropContainer(container) {\n this._dropContainer = container;\n }\n /**\n * Gets the current position in pixels the draggable outside of a drop container.\n */\n getFreeDragPosition() {\n const position = this.isDragging() ? this._activeTransform : this._passiveTransform;\n return { x: position.x, y: position.y };\n }\n /**\n * Sets the current position in pixels the draggable outside of a drop container.\n * @param value New position to be set.\n */\n setFreeDragPosition(value) {\n this._activeTransform = { x: 0, y: 0 };\n this._passiveTransform.x = value.x;\n this._passiveTransform.y = value.y;\n if (!this._dropContainer) {\n this._applyRootElementTransform(value.x, value.y);\n }\n return this;\n }\n /** Updates the item's sort order based on the last-known pointer position. */\n _sortFromLastPointerPosition() {\n const position = this._lastKnownPointerPosition;\n if (position && this._dropContainer) {\n this._updateActiveDropContainer(this._getConstrainedPointerPosition(position), position);\n }\n }\n /** Unsubscribes from the global subscriptions. */\n _removeSubscriptions() {\n this._pointerMoveSubscription.unsubscribe();\n this._pointerUpSubscription.unsubscribe();\n this._scrollSubscription.unsubscribe();\n }\n /** Destroys the preview element and its ViewRef. */\n _destroyPreview() {\n if (this._preview) {\n removeNode(this._preview);\n }\n if (this._previewRef) {\n this._previewRef.destroy();\n }\n this._preview = this._previewRef = null;\n }\n /** Destroys the placeholder element and its ViewRef. */\n _destroyPlaceholder() {\n if (this._placeholder) {\n removeNode(this._placeholder);\n }\n if (this._placeholderRef) {\n this._placeholderRef.destroy();\n }\n this._placeholder = this._placeholderRef = null;\n }\n /**\n * Clears subscriptions and stops the dragging sequence.\n * @param event Browser event object that ended the sequence.\n */\n _endDragSequence(event) {\n // Note that here we use `isDragging` from the service, rather than from `this`.\n // The difference is that the one from the service reflects whether a dragging sequence\n // has been initiated, whereas the one on `this` includes whether the user has passed\n // the minimum dragging threshold.\n if (!this._dragDropRegistry.isDragging(this)) {\n return;\n }\n this._removeSubscriptions();\n this._dragDropRegistry.stopDragging(this);\n this._toggleNativeDragInteractions();\n if (this._handles) {\n this._rootElement.style.webkitTapHighlightColor = this._rootElementTapHighlight;\n }\n if (!this._hasStartedDragging) {\n return;\n }\n this.released.next({ source: this });\n if (this._dropContainer) {\n // Stop scrolling immediately, instead of waiting for the animation to finish.\n this._dropContainer._stopScrolling();\n this._animatePreviewToPlaceholder().then(() => {\n this._cleanupDragArtifacts(event);\n this._cleanupCachedDimensions();\n this._dragDropRegistry.stopDragging(this);\n });\n }\n else {\n // Convert the active transform into a passive one. This means that next time\n // the user starts dragging the item, its position will be calculated relatively\n // to the new passive transform.\n this._passiveTransform.x = this._activeTransform.x;\n this._passiveTransform.y = this._activeTransform.y;\n this._ngZone.run(() => {\n this.ended.next({\n source: this,\n distance: this._getDragDistance(this._getPointerPositionOnPage(event))\n });\n });\n this._cleanupCachedDimensions();\n this._dragDropRegistry.stopDragging(this);\n }\n }\n /** Starts the dragging sequence. */\n _startDragSequence(event) {\n if (isTouchEvent(event)) {\n this._lastTouchEventTime = Date.now();\n }\n this._toggleNativeDragInteractions();\n const dropContainer = this._dropContainer;\n if (dropContainer) {\n const element = this._rootElement;\n const parent = element.parentNode;\n const preview = this._preview = this._createPreviewElement();\n const placeholder = this._placeholder = this._createPlaceholderElement();\n const anchor = this._anchor = this._anchor || this._document.createComment('');\n // Insert an anchor node so that we can restore the element's position in the DOM.\n parent.insertBefore(anchor, element);\n // We move the element out at the end of the body and we make it hidden, because keeping it in\n // place will throw off the consumer's `:last-child` selectors. We can't remove the element\n // from the DOM completely, because iOS will stop firing all subsequent events in the chain.\n element.style.display = 'none';\n this._document.body.appendChild(parent.replaceChild(placeholder, element));\n getPreviewInsertionPoint(this._document).appendChild(preview);\n this.started.next({ source: this }); // Emit before notifying the container.\n dropContainer.start();\n this._initialContainer = dropContainer;\n this._initialIndex = dropContainer.getItemIndex(this);\n }\n else {\n this.started.next({ source: this });\n this._initialContainer = this._initialIndex = undefined;\n }\n // Important to run after we've called `start` on the parent container\n // so that it has had time to resolve its scrollable parents.\n this._parentPositions.cache(dropContainer ? dropContainer.getScrollableParents() : []);\n }\n /**\n * Sets up the different variables and subscriptions\n * that will be necessary for the dragging sequence.\n * @param referenceElement Element that started the drag sequence.\n * @param event Browser event object that started the sequence.\n */\n _initializeDragSequence(referenceElement, event) {\n // Always stop propagation for the event that initializes\n // the dragging sequence, in order to prevent it from potentially\n // starting another sequence for a draggable parent somewhere up the DOM tree.\n event.stopPropagation();\n const isDragging = this.isDragging();\n const isTouchSequence = isTouchEvent(event);\n const isAuxiliaryMouseButton = !isTouchSequence && event.button !== 0;\n const rootElement = this._rootElement;\n const isSyntheticEvent = !isTouchSequence && this._lastTouchEventTime &&\n this._lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now();\n // If the event started from an element with the native HTML drag&drop, it'll interfere\n // with our own dragging (e.g. `img` tags do it by default). Prevent the default action\n // to stop it from happening. Note that preventing on `dragstart` also seems to work, but\n // it's flaky and it fails if the user drags it away quickly. Also note that we only want\n // to do this for `mousedown` since doing the same for `touchstart` will stop any `click`\n // events from firing on touch devices.\n if (event.target && event.target.draggable && event.type === 'mousedown') {\n event.preventDefault();\n }\n // Abort if the user is already dragging or is using a mouse button other than the primary one.\n if (isDragging || isAuxiliaryMouseButton || isSyntheticEvent) {\n return;\n }\n // If we've got handles, we need to disable the tap highlight on the entire root element,\n // otherwise iOS will still add it, even though all the drag interactions on the handle\n // are disabled.\n if (this._handles.length) {\n this._rootElementTapHighlight = rootElement.style.webkitTapHighlightColor || '';\n rootElement.style.webkitTapHighlightColor = 'transparent';\n }\n this._hasStartedDragging = this._hasMoved = false;\n // Avoid multiple subscriptions and memory leaks when multi touch\n // (isDragging check above isn't enough because of possible temporal and/or dimensional delays)\n this._removeSubscriptions();\n this._pointerMoveSubscription = this._dragDropRegistry.pointerMove.subscribe(this._pointerMove);\n this._pointerUpSubscription = this._dragDropRegistry.pointerUp.subscribe(this._pointerUp);\n this._scrollSubscription = this._dragDropRegistry.scroll.subscribe(scrollEvent => {\n this._updateOnScroll(scrollEvent);\n });\n if (this._boundaryElement) {\n this._boundaryRect = getMutableClientRect(this._boundaryElement);\n }\n // If we have a custom preview we can't know ahead of time how large it'll be so we position\n // it next to the cursor. The exception is when the consumer has opted into making the preview\n // the same size as the root element, in which case we do know the size.\n const previewTemplate = this._previewTemplate;\n this._pickupPositionInElement = previewTemplate && previewTemplate.template &&\n !previewTemplate.matchSize ? { x: 0, y: 0 } :\n this._getPointerPositionInElement(referenceElement, event);\n const pointerPosition = this._pickupPositionOnPage = this._lastKnownPointerPosition =\n this._getPointerPositionOnPage(event);\n this._pointerDirectionDelta = { x: 0, y: 0 };\n this._pointerPositionAtLastDirectionChange = { x: pointerPosition.x, y: pointerPosition.y };\n this._dragStartTime = Date.now();\n this._dragDropRegistry.startDragging(this, event);\n }\n /** Cleans up the DOM artifacts that were added to facilitate the element being dragged. */\n _cleanupDragArtifacts(event) {\n // Restore the element's visibility and insert it at its old position in the DOM.\n // It's important that we maintain the position, because moving the element around in the DOM\n // can throw off `NgFor` which does smart diffing and re-creates elements only when necessary,\n // while moving the existing elements in all other cases.\n this._rootElement.style.display = '';\n this._anchor.parentNode.replaceChild(this._rootElement, this._anchor);\n this._destroyPreview();\n this._destroyPlaceholder();\n this._boundaryRect = this._previewRect = undefined;\n // Re-enter the NgZone since we bound `document` events on the outside.\n this._ngZone.run(() => {\n const container = this._dropContainer;\n const currentIndex = container.getItemIndex(this);\n const pointerPosition = this._getPointerPositionOnPage(event);\n const distance = this._getDragDistance(this._getPointerPositionOnPage(event));\n const isPointerOverContainer = container._isOverContainer(pointerPosition.x, pointerPosition.y);\n this.ended.next({ source: this, distance });\n this.dropped.next({\n item: this,\n currentIndex,\n previousIndex: this._initialIndex,\n container: container,\n previousContainer: this._initialContainer,\n isPointerOverContainer,\n distance\n });\n container.drop(this, currentIndex, this._initialContainer, isPointerOverContainer, distance, this._initialIndex);\n this._dropContainer = this._initialContainer;\n });\n }\n /**\n * Updates the item's position in its drop container, or moves it\n * into a new one, depending on its current drag position.\n */\n _updateActiveDropContainer({ x, y }, { x: rawX, y: rawY }) {\n // Drop container that draggable has been moved into.\n let newContainer = this._initialContainer._getSiblingContainerFromPosition(this, x, y);\n // If we couldn't find a new container to move the item into, and the item has left its\n // initial container, check whether the it's over the initial container. This handles the\n // case where two containers are connected one way and the user tries to undo dragging an\n // item into a new container.\n if (!newContainer && this._dropContainer !== this._initialContainer &&\n this._initialContainer._isOverContainer(x, y)) {\n newContainer = this._initialContainer;\n }\n if (newContainer && newContainer !== this._dropContainer) {\n this._ngZone.run(() => {\n // Notify the old container that the item has left.\n this.exited.next({ item: this, container: this._dropContainer });\n this._dropContainer.exit(this);\n // Notify the new container that the item has entered.\n this._dropContainer = newContainer;\n this._dropContainer.enter(this, x, y, newContainer === this._initialContainer &&\n // If we're re-entering the initial container and sorting is disabled,\n // put item the into its starting index to begin with.\n newContainer.sortingDisabled ? this._initialIndex : undefined);\n this.entered.next({\n item: this,\n container: newContainer,\n currentIndex: newContainer.getItemIndex(this)\n });\n });\n }\n this._dropContainer._startScrollingIfNecessary(rawX, rawY);\n this._dropContainer._sortItem(this, x, y, this._pointerDirectionDelta);\n this._preview.style.transform =\n getTransform(x - this._pickupPositionInElement.x, y - this._pickupPositionInElement.y);\n }\n /**\n * Creates the element that will be rendered next to the user's pointer\n * and will be used as a preview of the element that is being dragged.\n */\n _createPreviewElement() {\n const previewConfig = this._previewTemplate;\n const previewClass = this.previewClass;\n const previewTemplate = previewConfig ? previewConfig.template : null;\n let preview;\n if (previewTemplate && previewConfig) {\n // Measure the element before we've inserted the preview\n // since the insertion could throw off the measurement.\n const rootRect = previewConfig.matchSize ? this._rootElement.getBoundingClientRect() : null;\n const viewRef = previewConfig.viewContainer.createEmbeddedView(previewTemplate, previewConfig.context);\n viewRef.detectChanges();\n preview = getRootNode(viewRef, this._document);\n this._previewRef = viewRef;\n if (previewConfig.matchSize) {\n matchElementSize(preview, rootRect);\n }\n else {\n preview.style.transform =\n getTransform(this._pickupPositionOnPage.x, this._pickupPositionOnPage.y);\n }\n }\n else {\n const element = this._rootElement;\n preview = deepCloneNode(element);\n matchElementSize(preview, element.getBoundingClientRect());\n }\n extendStyles(preview.style, {\n // It's important that we disable the pointer events on the preview, because\n // it can throw off the `document.elementFromPoint` calls in the `CdkDropList`.\n pointerEvents: 'none',\n // We have to reset the margin, because it can throw off positioning relative to the viewport.\n margin: '0',\n position: 'fixed',\n top: '0',\n left: '0',\n zIndex: `${this._config.zIndex || 1000}`\n });\n toggleNativeDragInteractions(preview, false);\n preview.classList.add('cdk-drag-preview');\n preview.setAttribute('dir', this._direction);\n if (previewClass) {\n if (Array.isArray(previewClass)) {\n previewClass.forEach(className => preview.classList.add(className));\n }\n else {\n preview.classList.add(previewClass);\n }\n }\n return preview;\n }\n /**\n * Animates the preview element from its current position to the location of the drop placeholder.\n * @returns Promise that resolves when the animation completes.\n */\n _animatePreviewToPlaceholder() {\n // If the user hasn't moved yet, the transitionend event won't fire.\n if (!this._hasMoved) {\n return Promise.resolve();\n }\n const placeholderRect = this._placeholder.getBoundingClientRect();\n // Apply the class that adds a transition to the preview.\n this._preview.classList.add('cdk-drag-animating');\n // Move the preview to the placeholder position.\n this._preview.style.transform = getTransform(placeholderRect.left, placeholderRect.top);\n // If the element doesn't have a `transition`, the `transitionend` event won't fire. Since\n // we need to trigger a style recalculation in order for the `cdk-drag-animating` class to\n // apply its style, we take advantage of the available info to figure out whether we need to\n // bind the event in the first place.\n const duration = getTransformTransitionDurationInMs(this._preview);\n if (duration === 0) {\n return Promise.resolve();\n }\n return this._ngZone.runOutsideAngular(() => {\n return new Promise(resolve => {\n const handler = ((event) => {\n if (!event || (event.target === this._preview && event.propertyName === 'transform')) {\n this._preview.removeEventListener('transitionend', handler);\n resolve();\n clearTimeout(timeout);\n }\n });\n // If a transition is short enough, the browser might not fire the `transitionend` event.\n // Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll\n // fire if the transition hasn't completed when it was supposed to.\n const timeout = setTimeout(handler, duration * 1.5);\n this._preview.addEventListener('transitionend', handler);\n });\n });\n }\n /** Creates an element that will be shown instead of the current element while dragging. */\n _createPlaceholderElement() {\n const placeholderConfig = this._placeholderTemplate;\n const placeholderTemplate = placeholderConfig ? placeholderConfig.template : null;\n let placeholder;\n if (placeholderTemplate) {\n this._placeholderRef = placeholderConfig.viewContainer.createEmbeddedView(placeholderTemplate, placeholderConfig.context);\n this._placeholderRef.detectChanges();\n placeholder = getRootNode(this._placeholderRef, this._document);\n }\n else {\n placeholder = deepCloneNode(this._rootElement);\n }\n placeholder.classList.add('cdk-drag-placeholder');\n return placeholder;\n }\n /**\n * Figures out the coordinates at which an element was picked up.\n * @param referenceElement Element that initiated the dragging.\n * @param event Event that initiated the dragging.\n */\n _getPointerPositionInElement(referenceElement, event) {\n const elementRect = this._rootElement.getBoundingClientRect();\n const handleElement = referenceElement === this._rootElement ? null : referenceElement;\n const referenceRect = handleElement ? handleElement.getBoundingClientRect() : elementRect;\n const point = isTouchEvent(event) ? event.targetTouches[0] : event;\n const scrollPosition = this._getViewportScrollPosition();\n const x = point.pageX - referenceRect.left - scrollPosition.left;\n const y = point.pageY - referenceRect.top - scrollPosition.top;\n return {\n x: referenceRect.left - elementRect.left + x,\n y: referenceRect.top - elementRect.top + y\n };\n }\n /** Determines the point of the page that was touched by the user. */\n _getPointerPositionOnPage(event) {\n const scrollPosition = this._getViewportScrollPosition();\n const point = isTouchEvent(event) ?\n // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n // Also note that on real devices we're guaranteed for either `touches` or `changedTouches`\n // to have a value, but Firefox in device emulation mode has a bug where both can be empty\n // for `touchstart` and `touchend` so we fall back to a dummy object in order to avoid\n // throwing an error. The value returned here will be incorrect, but since this only\n // breaks inside a developer tool and the value is only used for secondary information,\n // we can get away with it. See https://bugzilla.mozilla.org/show_bug.cgi?id=1615824.\n (event.touches[0] || event.changedTouches[0] || { pageX: 0, pageY: 0 }) : event;\n const x = point.pageX - scrollPosition.left;\n const y = point.pageY - scrollPosition.top;\n // if dragging SVG element, try to convert from the screen coordinate system to the SVG\n // coordinate system\n if (this._ownerSVGElement) {\n const svgMatrix = this._ownerSVGElement.getScreenCTM();\n if (svgMatrix) {\n const svgPoint = this._ownerSVGElement.createSVGPoint();\n svgPoint.x = x;\n svgPoint.y = y;\n return svgPoint.matrixTransform(svgMatrix.inverse());\n }\n }\n return { x, y };\n }\n /** Gets the pointer position on the page, accounting for any position constraints. */\n _getConstrainedPointerPosition(point) {\n const dropContainerLock = this._dropContainer ? this._dropContainer.lockAxis : null;\n let { x, y } = this.constrainPosition ? this.constrainPosition(point, this) : point;\n if (this.lockAxis === 'x' || dropContainerLock === 'x') {\n y = this._pickupPositionOnPage.y;\n }\n else if (this.lockAxis === 'y' || dropContainerLock === 'y') {\n x = this._pickupPositionOnPage.x;\n }\n if (this._boundaryRect) {\n const { x: pickupX, y: pickupY } = this._pickupPositionInElement;\n const boundaryRect = this._boundaryRect;\n const previewRect = this._previewRect;\n const minY = boundaryRect.top + pickupY;\n const maxY = boundaryRect.bottom - (previewRect.height - pickupY);\n const minX = boundaryRect.left + pickupX;\n const maxX = boundaryRect.right - (previewRect.width - pickupX);\n x = clamp(x, minX, maxX);\n y = clamp(y, minY, maxY);\n }\n return { x, y };\n }\n /** Updates the current drag delta, based on the user's current pointer position on the page. */\n _updatePointerDirectionDelta(pointerPositionOnPage) {\n const { x, y } = pointerPositionOnPage;\n const delta = this._pointerDirectionDelta;\n const positionSinceLastChange = this._pointerPositionAtLastDirectionChange;\n // Amount of pixels the user has dragged since the last time the direction changed.\n const changeX = Math.abs(x - positionSinceLastChange.x);\n const changeY = Math.abs(y - positionSinceLastChange.y);\n // Because we handle pointer events on a per-pixel basis, we don't want the delta\n // to change for every pixel, otherwise anything that depends on it can look erratic.\n // To make the delta more consistent, we track how much the user has moved since the last\n // delta change and we only update it after it has reached a certain threshold.\n if (changeX > this._config.pointerDirectionChangeThreshold) {\n delta.x = x > positionSinceLastChange.x ? 1 : -1;\n positionSinceLastChange.x = x;\n }\n if (changeY > this._config.pointerDirectionChangeThreshold) {\n delta.y = y > positionSinceLastChange.y ? 1 : -1;\n positionSinceLastChange.y = y;\n }\n return delta;\n }\n /** Toggles the native drag interactions, based on how many handles are registered. */\n _toggleNativeDragInteractions() {\n if (!this._rootElement || !this._handles) {\n return;\n }\n const shouldEnable = this._handles.length > 0 || !this.isDragging();\n if (shouldEnable !== this._nativeInteractionsEnabled) {\n this._nativeInteractionsEnabled = shouldEnable;\n toggleNativeDragInteractions(this._rootElement, shouldEnable);\n }\n }\n /** Removes the manually-added event listeners from the root element. */\n _removeRootElementListeners(element) {\n element.removeEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n element.removeEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n }\n /**\n * Applies a `transform` to the root element, taking into account any existing transforms on it.\n * @param x New transform value along the X axis.\n * @param y New transform value along the Y axis.\n */\n _applyRootElementTransform(x, y) {\n const transform = getTransform(x, y);\n // Cache the previous transform amount only after the first drag sequence, because\n // we don't want our own transforms to stack on top of each other.\n if (this._initialTransform == null) {\n this._initialTransform = this._rootElement.style.transform || '';\n }\n // Preserve the previous `transform` value, if there was one. Note that we apply our own\n // transform before the user's, because things like rotation can affect which direction\n // the element will be translated towards.\n this._rootElement.style.transform = this._initialTransform ?\n transform + ' ' + this._initialTransform : transform;\n }\n /**\n * Gets the distance that the user has dragged during the current drag sequence.\n * @param currentPosition Current position of the user's pointer.\n */\n _getDragDistance(currentPosition) {\n const pickupPosition = this._pickupPositionOnPage;\n if (pickupPosition) {\n return { x: currentPosition.x - pickupPosition.x, y: currentPosition.y - pickupPosition.y };\n }\n return { x: 0, y: 0 };\n }\n /** Cleans up any cached element dimensions that we don't need after dragging has stopped. */\n _cleanupCachedDimensions() {\n this._boundaryRect = this._previewRect = undefined;\n this._parentPositions.clear();\n }\n /**\n * Checks whether the element is still inside its boundary after the viewport has been resized.\n * If not, the position is adjusted so that the element fits again.\n */\n _containInsideBoundaryOnResize() {\n let { x, y } = this._passiveTransform;\n if ((x === 0 && y === 0) || this.isDragging() || !this._boundaryElement) {\n return;\n }\n const boundaryRect = this._boundaryElement.getBoundingClientRect();\n const elementRect = this._rootElement.getBoundingClientRect();\n // It's possible that the element got hidden away after dragging (e.g. by switching to a\n // different tab). Don't do anything in this case so we don't clear the user's position.\n if ((boundaryRect.width === 0 && boundaryRect.height === 0) ||\n (elementRect.width === 0 && elementRect.height === 0)) {\n return;\n }\n const leftOverflow = boundaryRect.left - elementRect.left;\n const rightOverflow = elementRect.right - boundaryRect.right;\n const topOverflow = boundaryRect.top - elementRect.top;\n const bottomOverflow = elementRect.bottom - boundaryRect.bottom;\n // If the element has become wider than the boundary, we can't\n // do much to make it fit so we just anchor it to the left.\n if (boundaryRect.width > elementRect.width) {\n if (leftOverflow > 0) {\n x += leftOverflow;\n }\n if (rightOverflow > 0) {\n x -= rightOverflow;\n }\n }\n else {\n x = 0;\n }\n // If the element has become taller than the boundary, we can't\n // do much to make it fit so we just anchor it to the top.\n if (boundaryRect.height > elementRect.height) {\n if (topOverflow > 0) {\n y += topOverflow;\n }\n if (bottomOverflow > 0) {\n y -= bottomOverflow;\n }\n }\n else {\n y = 0;\n }\n if (x !== this._passiveTransform.x || y !== this._passiveTransform.y) {\n this.setFreeDragPosition({ y, x });\n }\n }\n /** Gets the drag start delay, based on the event type. */\n _getDragStartDelay(event) {\n const value = this.dragStartDelay;\n if (typeof value === 'number') {\n return value;\n }\n else if (isTouchEvent(event)) {\n return value.touch;\n }\n return value ? value.mouse : 0;\n }\n /** Updates the internal state of the draggable element when scrolling has occurred. */\n _updateOnScroll(event) {\n const scrollDifference = this._parentPositions.handleScroll(event);\n if (scrollDifference) {\n const target = event.target;\n // ClientRect dimensions are based on the scroll position of the page and its parent node so\n // we have to update the cached boundary ClientRect if the user has scrolled. Check for\n // the `document` specifically since IE doesn't support `contains` on it.\n if (this._boundaryRect && (target === this._document ||\n (target !== this._boundaryElement && target.contains(this._boundaryElement)))) {\n adjustClientRect(this._boundaryRect, scrollDifference.top, scrollDifference.left);\n }\n this._pickupPositionOnPage.x += scrollDifference.left;\n this._pickupPositionOnPage.y += scrollDifference.top;\n // If we're in free drag mode, we have to update the active transform, because\n // it isn't relative to the viewport like the preview inside a drop list.\n if (!this._dropContainer) {\n this._activeTransform.x -= scrollDifference.left;\n this._activeTransform.y -= scrollDifference.top;\n this._applyRootElementTransform(this._activeTransform.x, this._activeTransform.y);\n }\n }\n }\n /** Gets the scroll position of the viewport. */\n _getViewportScrollPosition() {\n const cachedPosition = this._parentPositions.positions.get(this._document);\n return cachedPosition ? cachedPosition.scrollPosition :\n this._viewportRuler.getViewportScrollPosition();\n }\n}\n/**\n * Gets a 3d `transform` that can be applied to an element.\n * @param x Desired position of the element along the X axis.\n * @param y Desired position of the element along the Y axis.\n */\nfunction getTransform(x, y) {\n // Round the transforms since some browsers will\n // blur the elements for sub-pixel transforms.\n return `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;\n}\n/** Clamps a value between a minimum and a maximum. */\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * Helper to remove a node from the DOM and to do all the necessary null checks.\n * @param node Node to be removed.\n */\nfunction removeNode(node) {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\n/** Determines whether an event is a touch event. */\nfunction isTouchEvent(event) {\n // This function is called for every pixel that the user has dragged so we need it to be\n // as fast as possible. Since we only bind mouse events and touch events, we can assume\n // that if the event's name starts with `t`, it's a touch event.\n return event.type[0] === 't';\n}\n/** Gets the element into which the drag preview should be inserted. */\nfunction getPreviewInsertionPoint(documentRef) {\n // We can't use the body if the user is in fullscreen mode,\n // because the preview will render under the fullscreen element.\n // TODO(crisbeto): dedupe this with the `FullscreenOverlayContainer` eventually.\n return documentRef.fullscreenElement ||\n documentRef.webkitFullscreenElement ||\n documentRef.mozFullScreenElement ||\n documentRef.msFullscreenElement ||\n documentRef.body;\n}\n/**\n * Gets the root HTML element of an embedded view.\n * If the root is not an HTML element it gets wrapped in one.\n */\nfunction getRootNode(viewRef, _document) {\n const rootNodes = viewRef.rootNodes;\n if (rootNodes.length === 1 && rootNodes[0].nodeType === _document.ELEMENT_NODE) {\n return rootNodes[0];\n }\n const wrapper = _document.createElement('div');\n rootNodes.forEach(node => wrapper.appendChild(node));\n return wrapper;\n}\n/**\n * Matches the target element's size to the source's size.\n * @param target Element that needs to be resized.\n * @param sourceRect Dimensions of the source element.\n */\nfunction matchElementSize(target, sourceRect) {\n target.style.width = `${sourceRect.width}px`;\n target.style.height = `${sourceRect.height}px`;\n target.style.transform = getTransform(sourceRect.left, sourceRect.top);\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 * Moves an item one index in an array to another.\n * @param array Array in which to move the item.\n * @param fromIndex Starting index of the item.\n * @param toIndex Index to which the item should be moved.\n */\nfunction moveItemInArray(array, fromIndex, toIndex) {\n const from = clamp$1(fromIndex, array.length - 1);\n const to = clamp$1(toIndex, array.length - 1);\n if (from === to) {\n return;\n }\n const target = array[from];\n const delta = to < from ? -1 : 1;\n for (let i = from; i !== to; i += delta) {\n array[i] = array[i + delta];\n }\n array[to] = target;\n}\n/**\n * Moves an item from one array to another.\n * @param currentArray Array from which to transfer the item.\n * @param targetArray Array into which to put the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n */\nfunction transferArrayItem(currentArray, targetArray, currentIndex, targetIndex) {\n const from = clamp$1(currentIndex, currentArray.length - 1);\n const to = clamp$1(targetIndex, targetArray.length);\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray.splice(from, 1)[0]);\n }\n}\n/**\n * Copies an item from one array to another, leaving it in its\n * original position in current array.\n * @param currentArray Array from which to copy the item.\n * @param targetArray Array into which is copy the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n *\n */\nfunction copyArrayItem(currentArray, targetArray, currentIndex, targetIndex) {\n const to = clamp$1(targetIndex, targetArray.length);\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray[currentIndex]);\n }\n}\n/** Clamps a number between zero and a maximum. */\nfunction clamp$1(value, max) {\n return Math.max(0, Math.min(max, value));\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 * Proximity, as a ratio to width/height, at which a\n * dragged item will affect the drop container.\n */\nconst DROP_PROXIMITY_THRESHOLD = 0.05;\n/**\n * Proximity, as a ratio to width/height at which to start auto-scrolling the drop list or the\n * viewport. The value comes from trying it out manually until it feels right.\n */\nconst SCROLL_PROXIMITY_THRESHOLD = 0.05;\n/**\n * Number of pixels to scroll for each frame when auto-scrolling an element.\n * The value comes from trying it out manually until it feels right.\n */\nconst AUTO_SCROLL_STEP = 2;\n/**\n * Reference to a drop list. Used to manipulate or dispose of the container.\n */\nclass DropListRef {\n constructor(element, _dragDropRegistry, _document, _ngZone, _viewportRuler) {\n this._dragDropRegistry = _dragDropRegistry;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n /** Whether starting a dragging sequence from this container is disabled. */\n this.disabled = false;\n /** Whether sorting items within the list is disabled. */\n this.sortingDisabled = false;\n /**\n * Whether auto-scrolling the view when the user\n * moves their pointer close to the edges is disabled.\n */\n this.autoScrollDisabled = false;\n /**\n * Function that is used to determine whether an item\n * is allowed to be moved into a drop container.\n */\n this.enterPredicate = () => true;\n /** Emits right before dragging has started. */\n this.beforeStarted = new Subject();\n /**\n * Emits when the user has moved a new drag item into this container.\n */\n this.entered = new Subject();\n /**\n * Emits when the user removes an item from the container\n * by dragging it into another container.\n */\n this.exited = new Subject();\n /** Emits when the user drops an item inside the container. */\n this.dropped = new Subject();\n /** Emits as the user is swapping items while actively dragging. */\n this.sorted = new Subject();\n /** Whether an item in the list is being dragged. */\n this._isDragging = false;\n /** Cache of the dimensions of all the items inside the container. */\n this._itemPositions = [];\n /**\n * Keeps track of the item that was last swapped with the dragged item, as well as what direction\n * the pointer was moving in when the swap occured and whether the user's pointer continued to\n * overlap with the swapped item after the swapping occurred.\n */\n this._previousSwap = { drag: null, delta: 0, overlaps: false };\n /** Drop lists that are connected to the current one. */\n this._siblings = [];\n /** Direction in which the list is oriented. */\n this._orientation = 'vertical';\n /** Connected siblings that currently have a dragged item. */\n this._activeSiblings = new Set();\n /** Layout direction of the drop list. */\n this._direction = 'ltr';\n /** Subscription to the window being scrolled. */\n this._viewportScrollSubscription = Subscription.EMPTY;\n /** Vertical direction in which the list is currently scrolling. */\n this._verticalScrollDirection = 0 /* NONE */;\n /** Horizontal direction in which the list is currently scrolling. */\n this._horizontalScrollDirection = 0 /* NONE */;\n /** Used to signal to the current auto-scroll sequence when to stop. */\n this._stopScrollTimers = new Subject();\n /** Shadow root of the current element. Necessary for `elementFromPoint` to resolve correctly. */\n this._cachedShadowRoot = null;\n /** Starts the interval that'll auto-scroll the element. */\n this._startScrollInterval = () => {\n this._stopScrolling();\n interval(0, animationFrameScheduler)\n .pipe(takeUntil(this._stopScrollTimers))\n .subscribe(() => {\n const node = this._scrollNode;\n if (this._verticalScrollDirection === 1 /* UP */) {\n incrementVerticalScroll(node, -AUTO_SCROLL_STEP);\n }\n else if (this._verticalScrollDirection === 2 /* DOWN */) {\n incrementVerticalScroll(node, AUTO_SCROLL_STEP);\n }\n if (this._horizontalScrollDirection === 1 /* LEFT */) {\n incrementHorizontalScroll(node, -AUTO_SCROLL_STEP);\n }\n else if (this._horizontalScrollDirection === 2 /* RIGHT */) {\n incrementHorizontalScroll(node, AUTO_SCROLL_STEP);\n }\n });\n };\n this.element = coerceElement(element);\n this._document = _document;\n this.withScrollableParents([this.element]);\n _dragDropRegistry.registerDropContainer(this);\n this._parentPositions = new ParentPositionTracker(_document, _viewportRuler);\n }\n /** Removes the drop list functionality from the DOM element. */\n dispose() {\n this._stopScrolling();\n this._stopScrollTimers.complete();\n this._viewportScrollSubscription.unsubscribe();\n this.beforeStarted.complete();\n this.entered.complete();\n this.exited.complete();\n this.dropped.complete();\n this.sorted.complete();\n this._activeSiblings.clear();\n this._scrollNode = null;\n this._parentPositions.clear();\n this._dragDropRegistry.removeDropContainer(this);\n }\n /** Whether an item from this list is currently being dragged. */\n isDragging() {\n return this._isDragging;\n }\n /** Starts dragging an item. */\n start() {\n const styles = coerceElement(this.element).style;\n this.beforeStarted.next();\n this._isDragging = true;\n // We need to disable scroll snapping while the user is dragging, because it breaks automatic\n // scrolling. The browser seems to round the value based on the snapping points which means\n // that we can't increment/decrement the scroll position.\n this._initialScrollSnap = styles.msScrollSnapType || styles.scrollSnapType || '';\n styles.scrollSnapType = styles.msScrollSnapType = 'none';\n this._cacheItems();\n this._siblings.forEach(sibling => sibling._startReceiving(this));\n this._viewportScrollSubscription.unsubscribe();\n this._listenToScrollEvents();\n }\n /**\n * Emits an event to indicate that the user moved an item into the container.\n * @param item Item that was moved into the container.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param index Index at which the item entered. If omitted, the container will try to figure it\n * out automatically.\n */\n enter(item, pointerX, pointerY, index) {\n this.start();\n // If sorting is disabled, we want the item to return to its starting\n // position if the user is returning it to its initial container.\n let newIndex;\n if (index == null) {\n newIndex = this.sortingDisabled ? this._draggables.indexOf(item) : -1;\n if (newIndex === -1) {\n // We use the coordinates of where the item entered the drop\n // zone to figure out at which index it should be inserted.\n newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY);\n }\n }\n else {\n newIndex = index;\n }\n const activeDraggables = this._activeDraggables;\n const currentIndex = activeDraggables.indexOf(item);\n const placeholder = item.getPlaceholderElement();\n let newPositionReference = activeDraggables[newIndex];\n // If the item at the new position is the same as the item that is being dragged,\n // it means that we're trying to restore the item to its initial position. In this\n // case we should use the next item from the list as the reference.\n if (newPositionReference === item) {\n newPositionReference = activeDraggables[newIndex + 1];\n }\n // Since the item may be in the `activeDraggables` already (e.g. if the user dragged it\n // into another container and back again), we have to ensure that it isn't duplicated.\n if (currentIndex > -1) {\n activeDraggables.splice(currentIndex, 1);\n }\n // Don't use items that are being dragged as a reference, because\n // their element has been moved down to the bottom of the body.\n if (newPositionReference && !this._dragDropRegistry.isDragging(newPositionReference)) {\n const element = newPositionReference.getRootElement();\n element.parentElement.insertBefore(placeholder, element);\n activeDraggables.splice(newIndex, 0, item);\n }\n else if (this._shouldEnterAsFirstChild(pointerX, pointerY)) {\n const reference = activeDraggables[0].getRootElement();\n reference.parentNode.insertBefore(placeholder, reference);\n activeDraggables.unshift(item);\n }\n else {\n coerceElement(this.element).appendChild(placeholder);\n activeDraggables.push(item);\n }\n // The transform needs to be cleared so it doesn't throw off the measurements.\n placeholder.style.transform = '';\n // Note that the positions were already cached when we called `start` above,\n // but we need to refresh them since the amount of items has changed and also parent rects.\n this._cacheItemPositions();\n this._cacheParentPositions();\n this.entered.next({ item, container: this, currentIndex: this.getItemIndex(item) });\n }\n /**\n * Removes an item from the container after it was dragged into another container by the user.\n * @param item Item that was dragged out.\n */\n exit(item) {\n this._reset();\n this.exited.next({ item, container: this });\n }\n /**\n * Drops an item into this container.\n * @param item Item being dropped into the container.\n * @param currentIndex Index at which the item should be inserted.\n * @param previousContainer Container from which the item got dragged in.\n * @param isPointerOverContainer Whether the user's pointer was over the\n * container when the item was dropped.\n * @param distance Distance the user has dragged since the start of the dragging sequence.\n * @param previousIndex Index of the item when dragging started.\n *\n * @breaking-change 11.0.0 `previousIndex` parameter to become required.\n */\n drop(item, currentIndex, previousContainer, isPointerOverContainer, distance, previousIndex) {\n this._reset();\n // @breaking-change 11.0.0 Remove this fallback logic once `previousIndex` is a required param.\n if (previousIndex == null) {\n previousIndex = previousContainer.getItemIndex(item);\n }\n this.dropped.next({ item,\n currentIndex,\n previousIndex,\n container: this,\n previousContainer,\n isPointerOverContainer,\n distance\n });\n }\n /**\n * Sets the draggable items that are a part of this list.\n * @param items Items that are a part of this list.\n */\n withItems(items) {\n const previousItems = this._draggables;\n this._draggables = items;\n items.forEach(item => item._withDropContainer(this));\n if (this.isDragging()) {\n const draggedItems = previousItems.filter(item => item.isDragging());\n // If all of the items being dragged were removed\n // from the list, abort the current drag sequence.\n if (draggedItems.every(item => items.indexOf(item) === -1)) {\n this._reset();\n }\n else {\n this._cacheItems();\n }\n }\n return this;\n }\n /** Sets the layout direction of the drop list. */\n withDirection(direction) {\n this._direction = direction;\n return this;\n }\n /**\n * Sets the containers that are connected to this one. When two or more containers are\n * connected, the user will be allowed to transfer items between them.\n * @param connectedTo Other containers that the current containers should be connected to.\n */\n connectedTo(connectedTo) {\n this._siblings = connectedTo.slice();\n return this;\n }\n /**\n * Sets the orientation of the container.\n * @param orientation New orientation for the container.\n */\n withOrientation(orientation) {\n this._orientation = orientation;\n return this;\n }\n /**\n * Sets which parent elements are can be scrolled while the user is dragging.\n * @param elements Elements that can be scrolled.\n */\n withScrollableParents(elements) {\n const element = coerceElement(this.element);\n // We always allow the current element to be scrollable\n // so we need to ensure that it's in the array.\n this._scrollableElements =\n elements.indexOf(element) === -1 ? [element, ...elements] : elements.slice();\n return this;\n }\n /** Gets the scrollable parents that are registered with this drop container. */\n getScrollableParents() {\n return this._scrollableElements;\n }\n /**\n * Figures out the index of an item in the container.\n * @param item Item whose index should be determined.\n */\n getItemIndex(item) {\n if (!this._isDragging) {\n return this._draggables.indexOf(item);\n }\n // Items are sorted always by top/left in the cache, however they flow differently in RTL.\n // The rest of the logic still stands no matter what orientation we're in, however\n // we need to invert the array when determining the index.\n const items = this._orientation === 'horizontal' && this._direction === 'rtl' ?\n this._itemPositions.slice().reverse() : this._itemPositions;\n return findIndex(items, currentItem => currentItem.drag === item);\n }\n /**\n * Whether the list is able to receive the item that\n * is currently being dragged inside a connected drop list.\n */\n isReceiving() {\n return this._activeSiblings.size > 0;\n }\n /**\n * Sorts an item inside the container based on its position.\n * @param item Item to be sorted.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param pointerDelta Direction in which the pointer is moving along each axis.\n */\n _sortItem(item, pointerX, pointerY, pointerDelta) {\n // Don't sort the item if sorting is disabled or it's out of range.\n if (this.sortingDisabled ||\n !isPointerNearClientRect(this._clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)) {\n return;\n }\n const siblings = this._itemPositions;\n const newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY, pointerDelta);\n if (newIndex === -1 && siblings.length > 0) {\n return;\n }\n const isHorizontal = this._orientation === 'horizontal';\n const currentIndex = findIndex(siblings, currentItem => currentItem.drag === item);\n const siblingAtNewPosition = siblings[newIndex];\n const currentPosition = siblings[currentIndex].clientRect;\n const newPosition = siblingAtNewPosition.clientRect;\n const delta = currentIndex > newIndex ? 1 : -1;\n // How many pixels the item's placeholder should be offset.\n const itemOffset = this._getItemOffsetPx(currentPosition, newPosition, delta);\n // How many pixels all the other items should be offset.\n const siblingOffset = this._getSiblingOffsetPx(currentIndex, siblings, delta);\n // Save the previous order of the items before moving the item to its new index.\n // We use this to check whether an item has been moved as a result of the sorting.\n const oldOrder = siblings.slice();\n // Shuffle the array in place.\n moveItemInArray(siblings, currentIndex, newIndex);\n this.sorted.next({\n previousIndex: currentIndex,\n currentIndex: newIndex,\n container: this,\n item\n });\n siblings.forEach((sibling, index) => {\n // Don't do anything if the position hasn't changed.\n if (oldOrder[index] === sibling) {\n return;\n }\n const isDraggedItem = sibling.drag === item;\n const offset = isDraggedItem ? itemOffset : siblingOffset;\n const elementToOffset = isDraggedItem ? item.getPlaceholderElement() :\n sibling.drag.getRootElement();\n // Update the offset to reflect the new position.\n sibling.offset += offset;\n // Since we're moving the items with a `transform`, we need to adjust their cached\n // client rects to reflect their new position, as well as swap their positions in the cache.\n // Note that we shouldn't use `getBoundingClientRect` here to update the cache, because the\n // elements may be mid-animation which will give us a wrong result.\n if (isHorizontal) {\n // Round the transforms since some browsers will\n // blur the elements, for sub-pixel transforms.\n elementToOffset.style.transform = `translate3d(${Math.round(sibling.offset)}px, 0, 0)`;\n adjustClientRect(sibling.clientRect, 0, offset);\n }\n else {\n elementToOffset.style.transform = `translate3d(0, ${Math.round(sibling.offset)}px, 0)`;\n adjustClientRect(sibling.clientRect, offset, 0);\n }\n });\n // Note that it's important that we do this after the client rects have been adjusted.\n this._previousSwap.overlaps = isInsideClientRect(newPosition, pointerX, pointerY);\n this._previousSwap.drag = siblingAtNewPosition.drag;\n this._previousSwap.delta = isHorizontal ? pointerDelta.x : pointerDelta.y;\n }\n /**\n * Checks whether the user's pointer is close to the edges of either the\n * viewport or the drop list and starts the auto-scroll sequence.\n * @param pointerX User's pointer position along the x axis.\n * @param pointerY User's pointer position along the y axis.\n */\n _startScrollingIfNecessary(pointerX, pointerY) {\n if (this.autoScrollDisabled) {\n return;\n }\n let scrollNode;\n let verticalScrollDirection = 0 /* NONE */;\n let horizontalScrollDirection = 0 /* NONE */;\n // Check whether we should start scrolling any of the parent containers.\n this._parentPositions.positions.forEach((position, element) => {\n // We have special handling for the `document` below. Also this would be\n // nicer with a for...of loop, but it requires changing a compiler flag.\n if (element === this._document || !position.clientRect || scrollNode) {\n return;\n }\n if (isPointerNearClientRect(position.clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)) {\n [verticalScrollDirection, horizontalScrollDirection] = getElementScrollDirections(element, position.clientRect, pointerX, pointerY);\n if (verticalScrollDirection || horizontalScrollDirection) {\n scrollNode = element;\n }\n }\n });\n // Otherwise check if we can start scrolling the viewport.\n if (!verticalScrollDirection && !horizontalScrollDirection) {\n const { width, height } = this._viewportRuler.getViewportSize();\n const clientRect = { width, height, top: 0, right: width, bottom: height, left: 0 };\n verticalScrollDirection = getVerticalScrollDirection(clientRect, pointerY);\n horizontalScrollDirection = getHorizontalScrollDirection(clientRect, pointerX);\n scrollNode = window;\n }\n if (scrollNode && (verticalScrollDirection !== this._verticalScrollDirection ||\n horizontalScrollDirection !== this._horizontalScrollDirection ||\n scrollNode !== this._scrollNode)) {\n this._verticalScrollDirection = verticalScrollDirection;\n this._horizontalScrollDirection = horizontalScrollDirection;\n this._scrollNode = scrollNode;\n if ((verticalScrollDirection || horizontalScrollDirection) && scrollNode) {\n this._ngZone.runOutsideAngular(this._startScrollInterval);\n }\n else {\n this._stopScrolling();\n }\n }\n }\n /** Stops any currently-running auto-scroll sequences. */\n _stopScrolling() {\n this._stopScrollTimers.next();\n }\n /** Caches the positions of the configured scrollable parents. */\n _cacheParentPositions() {\n const element = coerceElement(this.element);\n this._parentPositions.cache(this._scrollableElements);\n // The list element is always in the `scrollableElements`\n // so we can take advantage of the cached `ClientRect`.\n this._clientRect = this._parentPositions.positions.get(element).clientRect;\n }\n /** Refreshes the position cache of the items and sibling containers. */\n _cacheItemPositions() {\n const isHorizontal = this._orientation === 'horizontal';\n this._itemPositions = this._activeDraggables.map(drag => {\n const elementToMeasure = drag.getVisibleElement();\n return { drag, offset: 0, clientRect: getMutableClientRect(elementToMeasure) };\n }).sort((a, b) => {\n return isHorizontal ? a.clientRect.left - b.clientRect.left :\n a.clientRect.top - b.clientRect.top;\n });\n }\n /** Resets the container to its initial state. */\n _reset() {\n this._isDragging = false;\n const styles = coerceElement(this.element).style;\n styles.scrollSnapType = styles.msScrollSnapType = this._initialScrollSnap;\n // TODO(crisbeto): may have to wait for the animations to finish.\n this._activeDraggables.forEach(item => {\n const rootElement = item.getRootElement();\n if (rootElement) {\n rootElement.style.transform = '';\n }\n });\n this._siblings.forEach(sibling => sibling._stopReceiving(this));\n this._activeDraggables = [];\n this._itemPositions = [];\n this._previousSwap.drag = null;\n this._previousSwap.delta = 0;\n this._previousSwap.overlaps = false;\n this._stopScrolling();\n this._viewportScrollSubscription.unsubscribe();\n this._parentPositions.clear();\n }\n /**\n * Gets the offset in pixels by which the items that aren't being dragged should be moved.\n * @param currentIndex Index of the item currently being dragged.\n * @param siblings All of the items in the list.\n * @param delta Direction in which the user is moving.\n */\n _getSiblingOffsetPx(currentIndex, siblings, delta) {\n const isHorizontal = this._orientation === 'horizontal';\n const currentPosition = siblings[currentIndex].clientRect;\n const immediateSibling = siblings[currentIndex + delta * -1];\n let siblingOffset = currentPosition[isHorizontal ? 'width' : 'height'] * delta;\n if (immediateSibling) {\n const start = isHorizontal ? 'left' : 'top';\n const end = isHorizontal ? 'right' : 'bottom';\n // Get the spacing between the start of the current item and the end of the one immediately\n // after it in the direction in which the user is dragging, or vice versa. We add it to the\n // offset in order to push the element to where it will be when it's inline and is influenced\n // by the `margin` of its siblings.\n if (delta === -1) {\n siblingOffset -= immediateSibling.clientRect[start] - currentPosition[end];\n }\n else {\n siblingOffset += currentPosition[start] - immediateSibling.clientRect[end];\n }\n }\n return siblingOffset;\n }\n /**\n * Gets the offset in pixels by which the item that is being dragged should be moved.\n * @param currentPosition Current position of the item.\n * @param newPosition Position of the item where the current item should be moved.\n * @param delta Direction in which the user is moving.\n */\n _getItemOffsetPx(currentPosition, newPosition, delta) {\n const isHorizontal = this._orientation === 'horizontal';\n let itemOffset = isHorizontal ? newPosition.left - currentPosition.left :\n newPosition.top - currentPosition.top;\n // Account for differences in the item width/height.\n if (delta === -1) {\n itemOffset += isHorizontal ? newPosition.width - currentPosition.width :\n newPosition.height - currentPosition.height;\n }\n return itemOffset;\n }\n /**\n * Checks if pointer is entering in the first position\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n */\n _shouldEnterAsFirstChild(pointerX, pointerY) {\n if (!this._activeDraggables.length) {\n return false;\n }\n const itemPositions = this._itemPositions;\n const isHorizontal = this._orientation === 'horizontal';\n // `itemPositions` are sorted by position while `activeDraggables` are sorted by child index\n // check if container is using some sort of \"reverse\" ordering (eg: flex-direction: row-reverse)\n const reversed = itemPositions[0].drag !== this._activeDraggables[0];\n if (reversed) {\n const lastItemRect = itemPositions[itemPositions.length - 1].clientRect;\n return isHorizontal ? pointerX >= lastItemRect.right : pointerY >= lastItemRect.bottom;\n }\n else {\n const firstItemRect = itemPositions[0].clientRect;\n return isHorizontal ? pointerX <= firstItemRect.left : pointerY <= firstItemRect.top;\n }\n }\n /**\n * Gets the index of an item in the drop container, based on the position of the user's pointer.\n * @param item Item that is being sorted.\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n * @param delta Direction in which the user is moving their pointer.\n */\n _getItemIndexFromPointerPosition(item, pointerX, pointerY, delta) {\n const isHorizontal = this._orientation === 'horizontal';\n return findIndex(this._itemPositions, ({ drag, clientRect }, _, array) => {\n if (drag === item) {\n // If there's only one item left in the container, it must be\n // the dragged item itself so we use it as a reference.\n return array.length < 2;\n }\n if (delta) {\n const direction = isHorizontal ? delta.x : delta.y;\n // If the user is still hovering over the same item as last time, their cursor hasn't left\n // the item after we made the swap, and they didn't change the direction in which they're\n // dragging, we don't consider it a direction swap.\n if (drag === this._previousSwap.drag && this._previousSwap.overlaps &&\n direction === this._previousSwap.delta) {\n return false;\n }\n }\n return isHorizontal ?\n // Round these down since most browsers report client rects with\n // sub-pixel precision, whereas the pointer coordinates are rounded to pixels.\n pointerX >= Math.floor(clientRect.left) && pointerX < Math.floor(clientRect.right) :\n pointerY >= Math.floor(clientRect.top) && pointerY < Math.floor(clientRect.bottom);\n });\n }\n /** Caches the current items in the list and their positions. */\n _cacheItems() {\n this._activeDraggables = this._draggables.slice();\n this._cacheItemPositions();\n this._cacheParentPositions();\n }\n /**\n * Checks whether the user's pointer is positioned over the container.\n * @param x Pointer position along the X axis.\n * @param y Pointer position along the Y axis.\n */\n _isOverContainer(x, y) {\n return isInsideClientRect(this._clientRect, x, y);\n }\n /**\n * Figures out whether an item should be moved into a sibling\n * drop container, based on its current position.\n * @param item Drag item that is being moved.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n _getSiblingContainerFromPosition(item, x, y) {\n return this._siblings.find(sibling => sibling._canReceive(item, x, y));\n }\n /**\n * Checks whether the drop list can receive the passed-in item.\n * @param item Item that is being dragged into the list.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n _canReceive(item, x, y) {\n if (!isInsideClientRect(this._clientRect, x, y) || !this.enterPredicate(item, this)) {\n return false;\n }\n const elementFromPoint = this._getShadowRoot().elementFromPoint(x, y);\n // If there's no element at the pointer position, then\n // the client rect is probably scrolled out of the view.\n if (!elementFromPoint) {\n return false;\n }\n const nativeElement = coerceElement(this.element);\n // The `ClientRect`, that we're using to find the container over which the user is\n // hovering, doesn't give us any information on whether the element has been scrolled\n // out of the view or whether it's overlapping with other containers. This means that\n // we could end up transferring the item into a container that's invisible or is positioned\n // below another one. We use the result from `elementFromPoint` to get the top-most element\n // at the pointer position and to find whether it's one of the intersecting drop containers.\n return elementFromPoint === nativeElement || nativeElement.contains(elementFromPoint);\n }\n /**\n * Called by one of the connected drop lists when a dragging sequence has started.\n * @param sibling Sibling in which dragging has started.\n */\n _startReceiving(sibling) {\n const activeSiblings = this._activeSiblings;\n if (!activeSiblings.has(sibling)) {\n activeSiblings.add(sibling);\n this._cacheParentPositions();\n this._listenToScrollEvents();\n }\n }\n /**\n * Called by a connected drop list when dragging has stopped.\n * @param sibling Sibling whose dragging has stopped.\n */\n _stopReceiving(sibling) {\n this._activeSiblings.delete(sibling);\n this._viewportScrollSubscription.unsubscribe();\n }\n /**\n * Starts listening to scroll events on the viewport.\n * Used for updating the internal state of the list.\n */\n _listenToScrollEvents() {\n this._viewportScrollSubscription = this._dragDropRegistry.scroll.subscribe(event => {\n if (this.isDragging()) {\n const scrollDifference = this._parentPositions.handleScroll(event);\n if (scrollDifference) {\n // Since we know the amount that the user has scrolled we can shift all of the\n // client rectangles ourselves. This is cheaper than re-measuring everything and\n // we can avoid inconsistent behavior where we might be measuring the element before\n // its position has changed.\n this._itemPositions.forEach(({ clientRect }) => {\n adjustClientRect(clientRect, scrollDifference.top, scrollDifference.left);\n });\n // We need two loops for this, because we want all of the cached\n // positions to be up-to-date before we re-sort the item.\n this._itemPositions.forEach(({ drag }) => {\n if (this._dragDropRegistry.isDragging(drag)) {\n // We need to re-sort the item manually, because the pointer move\n // events won't be dispatched while the user is scrolling.\n drag._sortFromLastPointerPosition();\n }\n });\n }\n }\n else if (this.isReceiving()) {\n this._cacheParentPositions();\n }\n });\n }\n /**\n * Lazily resolves and returns the shadow root of the element. We do this in a function, rather\n * than saving it in property directly on init, because we want to resolve it as late as possible\n * in order to ensure that the element has been moved into the shadow DOM. Doing it inside the\n * constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.\n */\n _getShadowRoot() {\n if (!this._cachedShadowRoot) {\n const shadowRoot = _getShadowRoot(coerceElement(this.element));\n this._cachedShadowRoot = shadowRoot || this._document;\n }\n return this._cachedShadowRoot;\n }\n}\n/**\n * Finds the index of an item that matches a predicate function. Used as an equivalent\n * of `Array.prototype.findIndex` which isn't part of the standard Google typings.\n * @param array Array in which to look for matches.\n * @param predicate Function used to determine whether an item is a match.\n */\nfunction findIndex(array, predicate) {\n for (let i = 0; i < array.length; i++) {\n if (predicate(array[i], i, array)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Increments the vertical scroll position of a node.\n * @param node Node whose scroll position should change.\n * @param amount Amount of pixels that the `node` should be scrolled.\n */\nfunction incrementVerticalScroll(node, amount) {\n if (node === window) {\n node.scrollBy(0, amount);\n }\n else {\n // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n node.scrollTop += amount;\n }\n}\n/**\n * Increments the horizontal scroll position of a node.\n * @param node Node whose scroll position should change.\n * @param amount Amount of pixels that the `node` should be scrolled.\n */\nfunction incrementHorizontalScroll(node, amount) {\n if (node === window) {\n node.scrollBy(amount, 0);\n }\n else {\n // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n node.scrollLeft += amount;\n }\n}\n/**\n * Gets whether the vertical auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getVerticalScrollDirection(clientRect, pointerY) {\n const { top, bottom, height } = clientRect;\n const yThreshold = height * SCROLL_PROXIMITY_THRESHOLD;\n if (pointerY >= top - yThreshold && pointerY <= top + yThreshold) {\n return 1 /* UP */;\n }\n else if (pointerY >= bottom - yThreshold && pointerY <= bottom + yThreshold) {\n return 2 /* DOWN */;\n }\n return 0 /* NONE */;\n}\n/**\n * Gets whether the horizontal auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerX Position of the user's pointer along the x axis.\n */\nfunction getHorizontalScrollDirection(clientRect, pointerX) {\n const { left, right, width } = clientRect;\n const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;\n if (pointerX >= left - xThreshold && pointerX <= left + xThreshold) {\n return 1 /* LEFT */;\n }\n else if (pointerX >= right - xThreshold && pointerX <= right + xThreshold) {\n return 2 /* RIGHT */;\n }\n return 0 /* NONE */;\n}\n/**\n * Gets the directions in which an element node should be scrolled,\n * assuming that the user's pointer is already within it scrollable region.\n * @param element Element for which we should calculate the scroll direction.\n * @param clientRect Bounding client rectangle of the element.\n * @param pointerX Position of the user's pointer along the x axis.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getElementScrollDirections(element, clientRect, pointerX, pointerY) {\n const computedVertical = getVerticalScrollDirection(clientRect, pointerY);\n const computedHorizontal = getHorizontalScrollDirection(clientRect, pointerX);\n let verticalScrollDirection = 0 /* NONE */;\n let horizontalScrollDirection = 0 /* NONE */;\n // Note that we here we do some extra checks for whether the element is actually scrollable in\n // a certain direction and we only assign the scroll direction if it is. We do this so that we\n // can allow other elements to be scrolled, if the current element can't be scrolled anymore.\n // This allows us to handle cases where the scroll regions of two scrollable elements overlap.\n if (computedVertical) {\n const scrollTop = element.scrollTop;\n if (computedVertical === 1 /* UP */) {\n if (scrollTop > 0) {\n verticalScrollDirection = 1 /* UP */;\n }\n }\n else if (element.scrollHeight - scrollTop > element.clientHeight) {\n verticalScrollDirection = 2 /* DOWN */;\n }\n }\n if (computedHorizontal) {\n const scrollLeft = element.scrollLeft;\n if (computedHorizontal === 1 /* LEFT */) {\n if (scrollLeft > 0) {\n horizontalScrollDirection = 1 /* LEFT */;\n }\n }\n else if (element.scrollWidth - scrollLeft > element.clientWidth) {\n horizontalScrollDirection = 2 /* RIGHT */;\n }\n }\n return [verticalScrollDirection, horizontalScrollDirection];\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/** Event options that can be used to bind an active, capturing event. */\nconst activeCapturingEventOptions = normalizePassiveListenerOptions({\n passive: false,\n capture: true\n});\n/**\n * Service that keeps track of all the drag item and drop container\n * instances, and manages global event listeners on the `document`.\n * @docs-private\n */\n// Note: this class is generic, rather than referencing CdkDrag and CdkDropList directly, in order\n// to avoid circular imports. If we were to reference them here, importing the registry into the\n// classes that are registering themselves will introduce a circular import.\nclass DragDropRegistry {\n constructor(_ngZone, _document) {\n this._ngZone = _ngZone;\n /** Registered drop container instances. */\n this._dropInstances = new Set();\n /** Registered drag item instances. */\n this._dragInstances = new Set();\n /** Drag item instances that are currently being dragged. */\n this._activeDragInstances = new Set();\n /** Keeps track of the event listeners that we've bound to the `document`. */\n this._globalListeners = new Map();\n /**\n * Emits the `touchmove` or `mousemove` events that are dispatched\n * while the user is dragging a drag item instance.\n */\n this.pointerMove = new Subject();\n /**\n * Emits the `touchend` or `mouseup` events that are dispatched\n * while the user is dragging a drag item instance.\n */\n this.pointerUp = new Subject();\n /** Emits when the viewport has been scrolled while the user is dragging an item. */\n this.scroll = new Subject();\n /**\n * Event listener that will prevent the default browser action while the user is dragging.\n * @param event Event whose default action should be prevented.\n */\n this._preventDefaultWhileDragging = (event) => {\n if (this._activeDragInstances.size) {\n event.preventDefault();\n }\n };\n this._document = _document;\n }\n /** Adds a drop container to the registry. */\n registerDropContainer(drop) {\n if (!this._dropInstances.has(drop)) {\n this._dropInstances.add(drop);\n }\n }\n /** Adds a drag item instance to the registry. */\n registerDragItem(drag) {\n this._dragInstances.add(drag);\n // The `touchmove` event gets bound once, ahead of time, because WebKit\n // won't preventDefault on a dynamically-added `touchmove` listener.\n // See https://bugs.webkit.org/show_bug.cgi?id=184250.\n if (this._dragInstances.size === 1) {\n this._ngZone.runOutsideAngular(() => {\n // The event handler has to be explicitly active,\n // because newer browsers make it passive by default.\n this._document.addEventListener('touchmove', this._preventDefaultWhileDragging, activeCapturingEventOptions);\n });\n }\n }\n /** Removes a drop container from the registry. */\n removeDropContainer(drop) {\n this._dropInstances.delete(drop);\n }\n /** Removes a drag item instance from the registry. */\n removeDragItem(drag) {\n this._dragInstances.delete(drag);\n this.stopDragging(drag);\n if (this._dragInstances.size === 0) {\n this._document.removeEventListener('touchmove', this._preventDefaultWhileDragging, activeCapturingEventOptions);\n }\n }\n /**\n * Starts the dragging sequence for a drag instance.\n * @param drag Drag instance which is being dragged.\n * @param event Event that initiated the dragging.\n */\n startDragging(drag, event) {\n // Do not process the same drag twice to avoid memory leaks and redundant listeners\n if (this._activeDragInstances.has(drag)) {\n return;\n }\n this._activeDragInstances.add(drag);\n if (this._activeDragInstances.size === 1) {\n const isTouchEvent = event.type.startsWith('touch');\n const moveEvent = isTouchEvent ? 'touchmove' : 'mousemove';\n const upEvent = isTouchEvent ? 'touchend' : 'mouseup';\n // We explicitly bind __active__ listeners here, because newer browsers will default to\n // passive ones for `mousemove` and `touchmove`. The events need to be active, because we\n // use `preventDefault` to prevent the page from scrolling while the user is dragging.\n this._globalListeners\n .set(moveEvent, {\n handler: (e) => this.pointerMove.next(e),\n options: activeCapturingEventOptions\n })\n .set(upEvent, {\n handler: (e) => this.pointerUp.next(e),\n options: true\n })\n .set('scroll', {\n handler: (e) => this.scroll.next(e),\n // Use capturing so that we pick up scroll changes in any scrollable nodes that aren't\n // the document. See https://github.com/angular/components/issues/17144.\n options: true\n })\n // Preventing the default action on `mousemove` isn't enough to disable text selection\n // on Safari so we need to prevent the selection event as well. Alternatively this can\n // be done by setting `user-select: none` on the `body`, however it has causes a style\n // recalculation which can be expensive on pages with a lot of elements.\n .set('selectstart', {\n handler: this._preventDefaultWhileDragging,\n options: activeCapturingEventOptions\n });\n this._ngZone.runOutsideAngular(() => {\n this._globalListeners.forEach((config, name) => {\n this._document.addEventListener(name, config.handler, config.options);\n });\n });\n }\n }\n /** Stops dragging a drag item instance. */\n stopDragging(drag) {\n this._activeDragInstances.delete(drag);\n if (this._activeDragInstances.size === 0) {\n this._clearGlobalListeners();\n }\n }\n /** Gets whether a drag item instance is currently being dragged. */\n isDragging(drag) {\n return this._activeDragInstances.has(drag);\n }\n ngOnDestroy() {\n this._dragInstances.forEach(instance => this.removeDragItem(instance));\n this._dropInstances.forEach(instance => this.removeDropContainer(instance));\n this._clearGlobalListeners();\n this.pointerMove.complete();\n this.pointerUp.complete();\n }\n /** Clears out the global event listeners from the `document`. */\n _clearGlobalListeners() {\n this._globalListeners.forEach((config, name) => {\n this._document.removeEventListener(name, config.handler, config.options);\n });\n this._globalListeners.clear();\n }\n}\nDragDropRegistry.ɵfac = function DragDropRegistry_Factory(t) { return new (t || DragDropRegistry)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(DOCUMENT)); };\nDragDropRegistry.ɵprov = ɵɵdefineInjectable({ factory: function DragDropRegistry_Factory() { return new DragDropRegistry(ɵɵinject(NgZone), ɵɵinject(DOCUMENT)); }, token: DragDropRegistry, providedIn: \"root\" });\nDragDropRegistry.ctorParameters = () => [\n { type: NgZone },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragDropRegistry, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, null); })();\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/** Default configuration to be used when creating a `DragRef`. */\nconst DEFAULT_CONFIG = {\n dragStartThreshold: 5,\n pointerDirectionChangeThreshold: 5\n};\n/**\n * Service that allows for drag-and-drop functionality to be attached to DOM elements.\n */\nclass DragDrop {\n constructor(_document, _ngZone, _viewportRuler, _dragDropRegistry) {\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._dragDropRegistry = _dragDropRegistry;\n }\n /**\n * Turns an element into a draggable item.\n * @param element Element to which to attach the dragging functionality.\n * @param config Object used to configure the dragging behavior.\n */\n createDrag(element, config = DEFAULT_CONFIG) {\n return new DragRef(element, config, this._document, this._ngZone, this._viewportRuler, this._dragDropRegistry);\n }\n /**\n * Turns an element into a drop list.\n * @param element Element to which to attach the drop list functionality.\n */\n createDropList(element) {\n return new DropListRef(element, this._dragDropRegistry, this._document, this._ngZone, this._viewportRuler);\n }\n}\nDragDrop.ɵfac = function DragDrop_Factory(t) { return new (t || DragDrop)(ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(ɵngcc1.ViewportRuler), ɵngcc0.ɵɵinject(DragDropRegistry)); };\nDragDrop.ɵprov = ɵɵdefineInjectable({ factory: function DragDrop_Factory() { return new DragDrop(ɵɵinject(DOCUMENT), ɵɵinject(NgZone), ɵɵinject(ViewportRuler), ɵɵinject(DragDropRegistry)); }, token: DragDrop, providedIn: \"root\" });\nDragDrop.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: NgZone },\n { type: ViewportRuler },\n { type: DragDropRegistry }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragDrop, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc0.NgZone }, { type: ɵngcc1.ViewportRuler }, { type: DragDropRegistry }]; }, null); })();\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 * Injection token that can be used to reference instances of `CdkDropListGroup`. It serves as\n * alternative token to the actual `CdkDropListGroup` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DROP_LIST_GROUP = new InjectionToken('CdkDropListGroup');\n/**\n * Declaratively connects sibling `cdkDropList` instances together. All of the `cdkDropList`\n * elements that are placed inside a `cdkDropListGroup` will be connected to each other\n * automatically. Can be used as an alternative to the `cdkDropListConnectedTo` input\n * from `cdkDropList`.\n */\nclass CdkDropListGroup {\n constructor() {\n /** Drop lists registered inside the group. */\n this._items = new Set();\n this._disabled = false;\n }\n /** Whether starting a dragging sequence from inside this group is disabled. */\n get disabled() { return this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n }\n ngOnDestroy() {\n this._items.clear();\n }\n}\nCdkDropListGroup.ɵfac = function CdkDropListGroup_Factory(t) { return new (t || CdkDropListGroup)(); };\nCdkDropListGroup.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDropListGroup, selectors: [[\"\", \"cdkDropListGroup\", \"\"]], inputs: { disabled: [\"cdkDropListGroupDisabled\", \"disabled\"] }, exportAs: [\"cdkDropListGroup\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DROP_LIST_GROUP, useExisting: CdkDropListGroup }])] });\nCdkDropListGroup.propDecorators = {\n disabled: [{ type: Input, args: ['cdkDropListGroupDisabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDropListGroup, [{\n type: Directive,\n args: [{\n selector: '[cdkDropListGroup]',\n exportAs: 'cdkDropListGroup',\n providers: [{ provide: CDK_DROP_LIST_GROUP, useExisting: CdkDropListGroup }]\n }]\n }], function () { return []; }, { disabled: [{\n type: Input,\n args: ['cdkDropListGroupDisabled']\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 configure the\n * behavior of the drag&drop-related components.\n */\nconst CDK_DRAG_CONFIG = new InjectionToken('CDK_DRAG_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/** Counter used to generate unique ids for drop zones. */\nlet _uniqueIdCounter = 0;\n/**\n * Injection token that can be used to reference instances of `CdkDropList`. It serves as\n * alternative token to the actual `CdkDropList` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DROP_LIST = new InjectionToken('CdkDropList');\nconst ɵ0 = undefined;\n/** Container that wraps a set of draggable items. */\nclass CdkDropList {\n constructor(\n /** Element that the drop list is attached to. */\n element, dragDrop, _changeDetectorRef, _dir, _group, \n /**\n * @deprecated _scrollDispatcher parameter to become required.\n * @breaking-change 11.0.0\n */\n _scrollDispatcher, config) {\n this.element = element;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._group = _group;\n this._scrollDispatcher = _scrollDispatcher;\n /** Emits when the list has been destroyed. */\n this._destroyed = new Subject();\n /**\n * Other draggable containers that this container is connected to and into which the\n * container's items can be transferred. Can either be references to other drop containers,\n * or their unique IDs.\n */\n this.connectedTo = [];\n /**\n * Unique ID for the drop zone. Can be used as a reference\n * in the `connectedTo` of another `CdkDropList`.\n */\n this.id = `cdk-drop-list-${_uniqueIdCounter++}`;\n /**\n * Function that is used to determine whether an item\n * is allowed to be moved into a drop container.\n */\n this.enterPredicate = () => true;\n /** Emits when the user drops an item inside the container. */\n this.dropped = new EventEmitter();\n /**\n * Emits when the user has moved a new drag item into this container.\n */\n this.entered = new EventEmitter();\n /**\n * Emits when the user removes an item from the container\n * by dragging it into another container.\n */\n this.exited = new EventEmitter();\n /** Emits as the user is swapping items while actively dragging. */\n this.sorted = new EventEmitter();\n /**\n * Keeps track of the items that are registered with this container. Historically we used to\n * do this with a `ContentChildren` query, however queries don't handle transplanted views very\n * well which means that we can't handle cases like dragging the headers of a `mat-table`\n * correctly. What we do instead is to have the items register themselves with the container\n * and then we sort them based on their position in the DOM.\n */\n this._unsortedItems = new Set();\n this._dropListRef = dragDrop.createDropList(element);\n this._dropListRef.data = this;\n if (config) {\n this._assignDefaults(config);\n }\n this._dropListRef.enterPredicate = (drag, drop) => {\n return this.enterPredicate(drag.data, drop.data);\n };\n this._setupInputSyncSubscription(this._dropListRef);\n this._handleEvents(this._dropListRef);\n CdkDropList._dropLists.push(this);\n if (_group) {\n _group._items.add(this);\n }\n }\n /** Whether starting a dragging sequence from this container is disabled. */\n get disabled() {\n return this._disabled || (!!this._group && this._group.disabled);\n }\n set disabled(value) {\n // Usually we sync the directive and ref state right before dragging starts, in order to have\n // a single point of failure and to avoid having to use setters for everything. `disabled` is\n // a special case, because it can prevent the `beforeStarted` event from firing, which can lock\n // the user in a disabled state, so we also need to sync it as it's being set.\n this._dropListRef.disabled = this._disabled = coerceBooleanProperty(value);\n }\n /** Registers an items with the drop list. */\n addItem(item) {\n this._unsortedItems.add(item);\n if (this._dropListRef.isDragging()) {\n this._syncItemsWithRef();\n }\n }\n /** Removes an item from the drop list. */\n removeItem(item) {\n this._unsortedItems.delete(item);\n if (this._dropListRef.isDragging()) {\n this._syncItemsWithRef();\n }\n }\n /** Gets the registered items in the list, sorted by their position in the DOM. */\n getSortedItems() {\n return Array.from(this._unsortedItems).sort((a, b) => {\n const documentPosition = a._dragRef.getVisibleElement().compareDocumentPosition(b._dragRef.getVisibleElement());\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 }\n ngOnDestroy() {\n const index = CdkDropList._dropLists.indexOf(this);\n if (index > -1) {\n CdkDropList._dropLists.splice(index, 1);\n }\n if (this._group) {\n this._group._items.delete(this);\n }\n this._unsortedItems.clear();\n this._dropListRef.dispose();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Syncs the inputs of the CdkDropList with the options of the underlying DropListRef. */\n _setupInputSyncSubscription(ref) {\n if (this._dir) {\n this._dir.change\n .pipe(startWith(this._dir.value), takeUntil(this._destroyed))\n .subscribe(value => ref.withDirection(value));\n }\n ref.beforeStarted.subscribe(() => {\n const siblings = coerceArray(this.connectedTo).map(drop => {\n if (typeof drop === 'string') {\n const correspondingDropList = CdkDropList._dropLists.find(list => list.id === drop);\n if (!correspondingDropList && isDevMode()) {\n console.warn(`CdkDropList could not find connected drop list with id \"${drop}\"`);\n }\n return correspondingDropList;\n }\n return drop;\n });\n if (this._group) {\n this._group._items.forEach(drop => {\n if (siblings.indexOf(drop) === -1) {\n siblings.push(drop);\n }\n });\n }\n // Note that we resolve the scrollable parents here so that we delay the resolution\n // as long as possible, ensuring that the element is in its final place in the DOM.\n // @breaking-change 11.0.0 Remove null check for _scrollDispatcher once it's required.\n if (!this._scrollableParentsResolved && this._scrollDispatcher) {\n const scrollableParents = this._scrollDispatcher\n .getAncestorScrollContainers(this.element)\n .map(scrollable => scrollable.getElementRef().nativeElement);\n this._dropListRef.withScrollableParents(scrollableParents);\n // Only do this once since it involves traversing the DOM and the parents\n // shouldn't be able to change without the drop list being destroyed.\n this._scrollableParentsResolved = true;\n }\n ref.disabled = this.disabled;\n ref.lockAxis = this.lockAxis;\n ref.sortingDisabled = coerceBooleanProperty(this.sortingDisabled);\n ref.autoScrollDisabled = coerceBooleanProperty(this.autoScrollDisabled);\n ref\n .connectedTo(siblings.filter(drop => drop && drop !== this).map(list => list._dropListRef))\n .withOrientation(this.orientation);\n });\n }\n /** Handles events from the underlying DropListRef. */\n _handleEvents(ref) {\n ref.beforeStarted.subscribe(() => {\n this._syncItemsWithRef();\n this._changeDetectorRef.markForCheck();\n });\n ref.entered.subscribe(event => {\n this.entered.emit({\n container: this,\n item: event.item.data,\n currentIndex: event.currentIndex\n });\n });\n ref.exited.subscribe(event => {\n this.exited.emit({\n container: this,\n item: event.item.data\n });\n this._changeDetectorRef.markForCheck();\n });\n ref.sorted.subscribe(event => {\n this.sorted.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n container: this,\n item: event.item.data\n });\n });\n ref.dropped.subscribe(event => {\n this.dropped.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n previousContainer: event.previousContainer.data,\n container: event.container.data,\n item: event.item.data,\n isPointerOverContainer: event.isPointerOverContainer,\n distance: event.distance\n });\n // Mark for check since all of these events run outside of change\n // detection and we're not guaranteed for something else to have triggered it.\n this._changeDetectorRef.markForCheck();\n });\n }\n /** Assigns the default input values based on a provided config object. */\n _assignDefaults(config) {\n const { lockAxis, draggingDisabled, sortingDisabled, listAutoScrollDisabled, listOrientation } = config;\n this.disabled = draggingDisabled == null ? false : draggingDisabled;\n this.sortingDisabled = sortingDisabled == null ? false : sortingDisabled;\n this.autoScrollDisabled = listAutoScrollDisabled == null ? false : listAutoScrollDisabled;\n this.orientation = listOrientation || 'vertical';\n if (lockAxis) {\n this.lockAxis = lockAxis;\n }\n }\n /** Syncs up the registered drag items with underlying drop list ref. */\n _syncItemsWithRef() {\n this._dropListRef.withItems(this.getSortedItems().map(item => item._dragRef));\n }\n}\nCdkDropList.ɵfac = function CdkDropList_Factory(t) { return new (t || CdkDropList)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DragDrop), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(CDK_DROP_LIST_GROUP, 12), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_CONFIG, 8)); };\nCdkDropList.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDropList, selectors: [[\"\", \"cdkDropList\", \"\"], [\"cdk-drop-list\"]], hostAttrs: [1, \"cdk-drop-list\"], hostVars: 7, hostBindings: function CdkDropList_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"id\", ctx.id);\n ɵngcc0.ɵɵclassProp(\"cdk-drop-list-disabled\", ctx.disabled)(\"cdk-drop-list-dragging\", ctx._dropListRef.isDragging())(\"cdk-drop-list-receiving\", ctx._dropListRef.isReceiving());\n } }, inputs: { connectedTo: [\"cdkDropListConnectedTo\", \"connectedTo\"], id: \"id\", enterPredicate: [\"cdkDropListEnterPredicate\", \"enterPredicate\"], disabled: [\"cdkDropListDisabled\", \"disabled\"], sortingDisabled: [\"cdkDropListSortingDisabled\", \"sortingDisabled\"], autoScrollDisabled: [\"cdkDropListAutoScrollDisabled\", \"autoScrollDisabled\"], orientation: [\"cdkDropListOrientation\", \"orientation\"], lockAxis: [\"cdkDropListLockAxis\", \"lockAxis\"], data: [\"cdkDropListData\", \"data\"] }, outputs: { dropped: \"cdkDropListDropped\", entered: \"cdkDropListEntered\", exited: \"cdkDropListExited\", sorted: \"cdkDropListSorted\" }, exportAs: [\"cdkDropList\"], features: [ɵngcc0.ɵɵProvidersFeature([\n // Prevent child drop lists from picking up the same group as their parent.\n { provide: CDK_DROP_LIST_GROUP, useValue: ɵ0 },\n { provide: CDK_DROP_LIST, useExisting: CdkDropList },\n ])] });\n/** Keeps track of the drop lists that are currently on the page. */\nCdkDropList._dropLists = [];\nCdkDropList.ctorParameters = () => [\n { type: ElementRef },\n { type: DragDrop },\n { type: ChangeDetectorRef },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: CdkDropListGroup, decorators: [{ type: Optional }, { type: Inject, args: [CDK_DROP_LIST_GROUP,] }, { type: SkipSelf }] },\n { type: ScrollDispatcher },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CDK_DRAG_CONFIG,] }] }\n];\nCdkDropList.propDecorators = {\n connectedTo: [{ type: Input, args: ['cdkDropListConnectedTo',] }],\n data: [{ type: Input, args: ['cdkDropListData',] }],\n orientation: [{ type: Input, args: ['cdkDropListOrientation',] }],\n id: [{ type: Input }],\n lockAxis: [{ type: Input, args: ['cdkDropListLockAxis',] }],\n disabled: [{ type: Input, args: ['cdkDropListDisabled',] }],\n sortingDisabled: [{ type: Input, args: ['cdkDropListSortingDisabled',] }],\n enterPredicate: [{ type: Input, args: ['cdkDropListEnterPredicate',] }],\n autoScrollDisabled: [{ type: Input, args: ['cdkDropListAutoScrollDisabled',] }],\n dropped: [{ type: Output, args: ['cdkDropListDropped',] }],\n entered: [{ type: Output, args: ['cdkDropListEntered',] }],\n exited: [{ type: Output, args: ['cdkDropListExited',] }],\n sorted: [{ type: Output, args: ['cdkDropListSorted',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDropList, [{\n type: Directive,\n args: [{\n selector: '[cdkDropList], cdk-drop-list',\n exportAs: 'cdkDropList',\n providers: [\n // Prevent child drop lists from picking up the same group as their parent.\n { provide: CDK_DROP_LIST_GROUP, useValue: ɵ0 },\n { provide: CDK_DROP_LIST, useExisting: CdkDropList },\n ],\n host: {\n 'class': 'cdk-drop-list',\n '[id]': 'id',\n '[class.cdk-drop-list-disabled]': 'disabled',\n '[class.cdk-drop-list-dragging]': '_dropListRef.isDragging()',\n '[class.cdk-drop-list-receiving]': '_dropListRef.isReceiving()'\n }\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: DragDrop }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc2.Directionality, decorators: [{\n type: Optional\n }] }, { type: CdkDropListGroup, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_DROP_LIST_GROUP]\n }, {\n type: SkipSelf\n }] }, { type: ɵngcc1.ScrollDispatcher }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_DRAG_CONFIG]\n }] }]; }, { connectedTo: [{\n type: Input,\n args: ['cdkDropListConnectedTo']\n }], id: [{\n type: Input\n }], enterPredicate: [{\n type: Input,\n args: ['cdkDropListEnterPredicate']\n }], dropped: [{\n type: Output,\n args: ['cdkDropListDropped']\n }], entered: [{\n type: Output,\n args: ['cdkDropListEntered']\n }], exited: [{\n type: Output,\n args: ['cdkDropListExited']\n }], sorted: [{\n type: Output,\n args: ['cdkDropListSorted']\n }], disabled: [{\n type: Input,\n args: ['cdkDropListDisabled']\n }], sortingDisabled: [{\n type: Input,\n args: ['cdkDropListSortingDisabled']\n }], autoScrollDisabled: [{\n type: Input,\n args: ['cdkDropListAutoScrollDisabled']\n }], orientation: [{\n type: Input,\n args: ['cdkDropListOrientation']\n }], lockAxis: [{\n type: Input,\n args: ['cdkDropListLockAxis']\n }], data: [{\n type: Input,\n args: ['cdkDropListData']\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 for a `CdkDrag` to provide itself as a parent to the\n * drag-specific child directive (`CdkDragHandle`, `CdkDragPreview` etc.). Used primarily\n * to avoid circular imports.\n * @docs-private\n */\nconst CDK_DRAG_PARENT = new InjectionToken('CDK_DRAG_PARENT');\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 `CdkDragHandle`. It serves as\n * alternative token to the actual `CdkDragHandle` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DRAG_HANDLE = new InjectionToken('CdkDragHandle');\n/** Handle that can be used to drag a CdkDrag instance. */\nclass CdkDragHandle {\n constructor(element, parentDrag) {\n this.element = element;\n /** Emits when the state of the handle has changed. */\n this._stateChanges = new Subject();\n this._disabled = false;\n this._parentDrag = parentDrag;\n toggleNativeDragInteractions(element.nativeElement, false);\n }\n /** Whether starting to drag through this handle is disabled. */\n get disabled() { return this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._stateChanges.next(this);\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\nCdkDragHandle.ɵfac = function CdkDragHandle_Factory(t) { return new (t || CdkDragHandle)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_PARENT, 12)); };\nCdkDragHandle.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDragHandle, selectors: [[\"\", \"cdkDragHandle\", \"\"]], hostAttrs: [1, \"cdk-drag-handle\"], inputs: { disabled: [\"cdkDragHandleDisabled\", \"disabled\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_HANDLE, useExisting: CdkDragHandle }])] });\nCdkDragHandle.ctorParameters = () => [\n { type: ElementRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_DRAG_PARENT,] }, { type: Optional }, { type: SkipSelf }] }\n];\nCdkDragHandle.propDecorators = {\n disabled: [{ type: Input, args: ['cdkDragHandleDisabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDragHandle, [{\n type: Directive,\n args: [{\n selector: '[cdkDragHandle]',\n host: {\n 'class': 'cdk-drag-handle'\n },\n providers: [{ provide: CDK_DRAG_HANDLE, useExisting: CdkDragHandle }]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_DRAG_PARENT]\n }, {\n type: Optional\n }, {\n type: SkipSelf\n }] }]; }, { disabled: [{\n type: Input,\n args: ['cdkDragHandleDisabled']\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 `CdkDragPlaceholder`. It serves as\n * alternative token to the actual `CdkDragPlaceholder` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DRAG_PLACEHOLDER = new InjectionToken('CdkDragPlaceholder');\n/**\n * Element that will be used as a template for the placeholder of a CdkDrag when\n * it is being dragged. The placeholder is displayed in place of the element being dragged.\n */\nclass CdkDragPlaceholder {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCdkDragPlaceholder.ɵfac = function CdkDragPlaceholder_Factory(t) { return new (t || CdkDragPlaceholder)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCdkDragPlaceholder.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDragPlaceholder, selectors: [[\"ng-template\", \"cdkDragPlaceholder\", \"\"]], inputs: { data: \"data\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_PLACEHOLDER, useExisting: CdkDragPlaceholder }])] });\nCdkDragPlaceholder.ctorParameters = () => [\n { type: TemplateRef }\n];\nCdkDragPlaceholder.propDecorators = {\n data: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDragPlaceholder, [{\n type: Directive,\n args: [{\n selector: 'ng-template[cdkDragPlaceholder]',\n providers: [{ provide: CDK_DRAG_PLACEHOLDER, useExisting: CdkDragPlaceholder }]\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, { data: [{\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 * Injection token that can be used to reference instances of `CdkDragPreview`. It serves as\n * alternative token to the actual `CdkDragPreview` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DRAG_PREVIEW = new InjectionToken('CdkDragPreview');\n/**\n * Element that will be used as a template for the preview\n * of a CdkDrag when it is being dragged.\n */\nclass CdkDragPreview {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._matchSize = false;\n }\n /** Whether the preview should preserve the same size as the item that is being dragged. */\n get matchSize() { return this._matchSize; }\n set matchSize(value) { this._matchSize = coerceBooleanProperty(value); }\n}\nCdkDragPreview.ɵfac = function CdkDragPreview_Factory(t) { return new (t || CdkDragPreview)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCdkDragPreview.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDragPreview, selectors: [[\"ng-template\", \"cdkDragPreview\", \"\"]], inputs: { matchSize: \"matchSize\", data: \"data\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_PREVIEW, useExisting: CdkDragPreview }])] });\nCdkDragPreview.ctorParameters = () => [\n { type: TemplateRef }\n];\nCdkDragPreview.propDecorators = {\n data: [{ type: Input }],\n matchSize: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDragPreview, [{\n type: Directive,\n args: [{\n selector: 'ng-template[cdkDragPreview]',\n providers: [{ provide: CDK_DRAG_PREVIEW, useExisting: CdkDragPreview }]\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, { matchSize: [{\n type: Input\n }], data: [{\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/** Element that can be moved inside a CdkDropList container. */\nclass CdkDrag {\n constructor(\n /** Element that the draggable is attached to. */\n element, \n /** Droppable container that the draggable is a part of. */\n dropContainer, _document, _ngZone, _viewContainerRef, config, _dir, dragDrop, _changeDetectorRef, _selfHandle) {\n this.element = element;\n this.dropContainer = dropContainer;\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewContainerRef = _viewContainerRef;\n this._dir = _dir;\n this._changeDetectorRef = _changeDetectorRef;\n this._selfHandle = _selfHandle;\n this._destroyed = new Subject();\n /** Emits when the user starts dragging the item. */\n this.started = new EventEmitter();\n /** Emits when the user has released a drag item, before any animations have started. */\n this.released = new EventEmitter();\n /** Emits when the user stops dragging an item in the container. */\n this.ended = new EventEmitter();\n /** Emits when the user has moved the item into a new container. */\n this.entered = new EventEmitter();\n /** Emits when the user removes the item its container by dragging it into another container. */\n this.exited = new EventEmitter();\n /** Emits when the user drops the item inside a container. */\n this.dropped = new EventEmitter();\n /**\n * Emits as the user is dragging the item. Use with caution,\n * because this event will fire for every pixel that the user has dragged.\n */\n this.moved = new Observable((observer) => {\n const subscription = this._dragRef.moved.pipe(map(movedEvent => ({\n source: this,\n pointerPosition: movedEvent.pointerPosition,\n event: movedEvent.event,\n delta: movedEvent.delta,\n distance: movedEvent.distance\n }))).subscribe(observer);\n return () => {\n subscription.unsubscribe();\n };\n });\n this._dragRef = dragDrop.createDrag(element, {\n dragStartThreshold: config && config.dragStartThreshold != null ?\n config.dragStartThreshold : 5,\n pointerDirectionChangeThreshold: config && config.pointerDirectionChangeThreshold != null ?\n config.pointerDirectionChangeThreshold : 5,\n zIndex: config === null || config === void 0 ? void 0 : config.zIndex\n });\n this._dragRef.data = this;\n if (config) {\n this._assignDefaults(config);\n }\n // Note that usually the container is assigned when the drop list is picks up the item, but in\n // some cases (mainly transplanted views with OnPush, see #18341) we may end up in a situation\n // where there are no items on the first change detection pass, but the items get picked up as\n // soon as the user triggers another pass by dragging. This is a problem, because the item would\n // have to switch from standalone mode to drag mode in the middle of the dragging sequence which\n // is too late since the two modes save different kinds of information. We work around it by\n // assigning the drop container both from here and the list.\n if (dropContainer) {\n this._dragRef._withDropContainer(dropContainer._dropListRef);\n dropContainer.addItem(this);\n }\n this._syncInputs(this._dragRef);\n this._handleEvents(this._dragRef);\n }\n /** Whether starting to drag this element is disabled. */\n get disabled() {\n return this._disabled || (this.dropContainer && this.dropContainer.disabled);\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._dragRef.disabled = this._disabled;\n }\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n */\n getPlaceholderElement() {\n return this._dragRef.getPlaceholderElement();\n }\n /** Returns the root draggable element. */\n getRootElement() {\n return this._dragRef.getRootElement();\n }\n /** Resets a standalone drag item to its initial position. */\n reset() {\n this._dragRef.reset();\n }\n /**\n * Gets the pixel coordinates of the draggable outside of a drop container.\n */\n getFreeDragPosition() {\n return this._dragRef.getFreeDragPosition();\n }\n ngAfterViewInit() {\n // We need to wait for the zone to stabilize, in order for the reference\n // element to be in the proper place in the DOM. This is mostly relevant\n // for draggable elements inside portals since they get stamped out in\n // their original DOM position and then they get transferred to the portal.\n this._ngZone.onStable.asObservable()\n .pipe(take(1), takeUntil(this._destroyed))\n .subscribe(() => {\n this._updateRootElement();\n // Listen for any newly-added handles.\n this._handles.changes.pipe(startWith(this._handles), \n // Sync the new handles with the DragRef.\n tap((handles) => {\n const childHandleElements = handles\n .filter(handle => handle._parentDrag === this)\n .map(handle => handle.element);\n // Usually handles are only allowed to be a descendant of the drag element, but if\n // the consumer defined a different drag root, we should allow the drag element\n // itself to be a handle too.\n if (this._selfHandle && this.rootElementSelector) {\n childHandleElements.push(this.element);\n }\n this._dragRef.withHandles(childHandleElements);\n }), \n // Listen if the state of any of the handles changes.\n switchMap((handles) => {\n return merge(...handles.map(item => {\n return item._stateChanges.pipe(startWith(item));\n }));\n }), takeUntil(this._destroyed)).subscribe(handleInstance => {\n // Enabled/disable the handle that changed in the DragRef.\n const dragRef = this._dragRef;\n const handle = handleInstance.element.nativeElement;\n handleInstance.disabled ? dragRef.disableHandle(handle) : dragRef.enableHandle(handle);\n });\n if (this.freeDragPosition) {\n this._dragRef.setFreeDragPosition(this.freeDragPosition);\n }\n });\n }\n ngOnChanges(changes) {\n const rootSelectorChange = changes['rootElementSelector'];\n const positionChange = changes['freeDragPosition'];\n // We don't have to react to the first change since it's being\n // handled in `ngAfterViewInit` where it needs to be deferred.\n if (rootSelectorChange && !rootSelectorChange.firstChange) {\n this._updateRootElement();\n }\n // Skip the first change since it's being handled in `ngAfterViewInit`.\n if (positionChange && !positionChange.firstChange && this.freeDragPosition) {\n this._dragRef.setFreeDragPosition(this.freeDragPosition);\n }\n }\n ngOnDestroy() {\n if (this.dropContainer) {\n this.dropContainer.removeItem(this);\n }\n this._destroyed.next();\n this._destroyed.complete();\n this._dragRef.dispose();\n }\n /** Syncs the root element with the `DragRef`. */\n _updateRootElement() {\n const element = this.element.nativeElement;\n const rootElement = this.rootElementSelector ?\n getClosestMatchingAncestor(element, this.rootElementSelector) : element;\n if (rootElement && rootElement.nodeType !== this._document.ELEMENT_NODE) {\n throw Error(`cdkDrag must be attached to an element node. ` +\n `Currently attached to \"${rootElement.nodeName}\".`);\n }\n this._dragRef.withRootElement(rootElement || element);\n }\n /** Gets the boundary element, based on the `boundaryElement` value. */\n _getBoundaryElement() {\n const boundary = this.boundaryElement;\n if (!boundary) {\n return null;\n }\n if (typeof boundary === 'string') {\n return getClosestMatchingAncestor(this.element.nativeElement, boundary);\n }\n const element = coerceElement(boundary);\n if (isDevMode() && !element.contains(this.element.nativeElement)) {\n throw Error('Draggable element is not inside of the node passed into cdkDragBoundary.');\n }\n return element;\n }\n /** Syncs the inputs of the CdkDrag with the options of the underlying DragRef. */\n _syncInputs(ref) {\n ref.beforeStarted.subscribe(() => {\n if (!ref.isDragging()) {\n const dir = this._dir;\n const dragStartDelay = this.dragStartDelay;\n const placeholder = this._placeholderTemplate ? {\n template: this._placeholderTemplate.templateRef,\n context: this._placeholderTemplate.data,\n viewContainer: this._viewContainerRef\n } : null;\n const preview = this._previewTemplate ? {\n template: this._previewTemplate.templateRef,\n context: this._previewTemplate.data,\n matchSize: this._previewTemplate.matchSize,\n viewContainer: this._viewContainerRef\n } : null;\n ref.disabled = this.disabled;\n ref.lockAxis = this.lockAxis;\n ref.dragStartDelay = (typeof dragStartDelay === 'object' && dragStartDelay) ?\n dragStartDelay : coerceNumberProperty(dragStartDelay);\n ref.constrainPosition = this.constrainPosition;\n ref.previewClass = this.previewClass;\n ref\n .withBoundaryElement(this._getBoundaryElement())\n .withPlaceholderTemplate(placeholder)\n .withPreviewTemplate(preview);\n if (dir) {\n ref.withDirection(dir.value);\n }\n }\n });\n }\n /** Handles the events from the underlying `DragRef`. */\n _handleEvents(ref) {\n ref.started.subscribe(() => {\n this.started.emit({ source: this });\n // Since all of these events run outside of change detection,\n // we need to ensure that everything is marked correctly.\n this._changeDetectorRef.markForCheck();\n });\n ref.released.subscribe(() => {\n this.released.emit({ source: this });\n });\n ref.ended.subscribe(event => {\n this.ended.emit({ source: this, distance: event.distance });\n // Since all of these events run outside of change detection,\n // we need to ensure that everything is marked correctly.\n this._changeDetectorRef.markForCheck();\n });\n ref.entered.subscribe(event => {\n this.entered.emit({\n container: event.container.data,\n item: this,\n currentIndex: event.currentIndex\n });\n });\n ref.exited.subscribe(event => {\n this.exited.emit({\n container: event.container.data,\n item: this\n });\n });\n ref.dropped.subscribe(event => {\n this.dropped.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n previousContainer: event.previousContainer.data,\n container: event.container.data,\n isPointerOverContainer: event.isPointerOverContainer,\n item: this,\n distance: event.distance\n });\n });\n }\n /** Assigns the default input values based on a provided config object. */\n _assignDefaults(config) {\n const { lockAxis, dragStartDelay, constrainPosition, previewClass, boundaryElement, draggingDisabled, rootElementSelector } = config;\n this.disabled = draggingDisabled == null ? false : draggingDisabled;\n this.dragStartDelay = dragStartDelay || 0;\n if (lockAxis) {\n this.lockAxis = lockAxis;\n }\n if (constrainPosition) {\n this.constrainPosition = constrainPosition;\n }\n if (previewClass) {\n this.previewClass = previewClass;\n }\n if (boundaryElement) {\n this.boundaryElement = boundaryElement;\n }\n if (rootElementSelector) {\n this.rootElementSelector = rootElementSelector;\n }\n }\n}\nCdkDrag.ɵfac = function CdkDrag_Factory(t) { return new (t || CdkDrag)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(CDK_DROP_LIST, 12), ɵngcc0.ɵɵdirectiveInject(DOCUMENT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_CONFIG, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(DragDrop), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_HANDLE, 10)); };\nCdkDrag.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDrag, selectors: [[\"\", \"cdkDrag\", \"\"]], contentQueries: function CdkDrag_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_PREVIEW, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_PLACEHOLDER, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_HANDLE, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._previewTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._placeholderTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._handles = _t);\n } }, hostAttrs: [1, \"cdk-drag\"], hostVars: 4, hostBindings: function CdkDrag_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"cdk-drag-disabled\", ctx.disabled)(\"cdk-drag-dragging\", ctx._dragRef.isDragging());\n } }, inputs: { disabled: [\"cdkDragDisabled\", \"disabled\"], dragStartDelay: [\"cdkDragStartDelay\", \"dragStartDelay\"], lockAxis: [\"cdkDragLockAxis\", \"lockAxis\"], constrainPosition: [\"cdkDragConstrainPosition\", \"constrainPosition\"], previewClass: [\"cdkDragPreviewClass\", \"previewClass\"], boundaryElement: [\"cdkDragBoundary\", \"boundaryElement\"], rootElementSelector: [\"cdkDragRootElement\", \"rootElementSelector\"], data: [\"cdkDragData\", \"data\"], freeDragPosition: [\"cdkDragFreeDragPosition\", \"freeDragPosition\"] }, outputs: { started: \"cdkDragStarted\", released: \"cdkDragReleased\", ended: \"cdkDragEnded\", entered: \"cdkDragEntered\", exited: \"cdkDragExited\", dropped: \"cdkDragDropped\", moved: \"cdkDragMoved\" }, exportAs: [\"cdkDrag\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_PARENT, useExisting: CdkDrag }]), ɵngcc0.ɵɵNgOnChangesFeature] });\nCdkDrag.ctorParameters = () => [\n { type: ElementRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_DROP_LIST,] }, { type: Optional }, { type: SkipSelf }] },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: NgZone },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CDK_DRAG_CONFIG,] }] },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: DragDrop },\n { type: ChangeDetectorRef },\n { type: CdkDragHandle, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [CDK_DRAG_HANDLE,] }] }\n];\nCdkDrag.propDecorators = {\n _handles: [{ type: ContentChildren, args: [CDK_DRAG_HANDLE, { descendants: true },] }],\n _previewTemplate: [{ type: ContentChild, args: [CDK_DRAG_PREVIEW,] }],\n _placeholderTemplate: [{ type: ContentChild, args: [CDK_DRAG_PLACEHOLDER,] }],\n data: [{ type: Input, args: ['cdkDragData',] }],\n lockAxis: [{ type: Input, args: ['cdkDragLockAxis',] }],\n rootElementSelector: [{ type: Input, args: ['cdkDragRootElement',] }],\n boundaryElement: [{ type: Input, args: ['cdkDragBoundary',] }],\n dragStartDelay: [{ type: Input, args: ['cdkDragStartDelay',] }],\n freeDragPosition: [{ type: Input, args: ['cdkDragFreeDragPosition',] }],\n disabled: [{ type: Input, args: ['cdkDragDisabled',] }],\n constrainPosition: [{ type: Input, args: ['cdkDragConstrainPosition',] }],\n previewClass: [{ type: Input, args: ['cdkDragPreviewClass',] }],\n started: [{ type: Output, args: ['cdkDragStarted',] }],\n released: [{ type: Output, args: ['cdkDragReleased',] }],\n ended: [{ type: Output, args: ['cdkDragEnded',] }],\n entered: [{ type: Output, args: ['cdkDragEntered',] }],\n exited: [{ type: Output, args: ['cdkDragExited',] }],\n dropped: [{ type: Output, args: ['cdkDragDropped',] }],\n moved: [{ type: Output, args: ['cdkDragMoved',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDrag, [{\n type: Directive,\n args: [{\n selector: '[cdkDrag]',\n exportAs: 'cdkDrag',\n host: {\n 'class': 'cdk-drag',\n '[class.cdk-drag-disabled]': 'disabled',\n '[class.cdk-drag-dragging]': '_dragRef.isDragging()'\n },\n providers: [{ provide: CDK_DRAG_PARENT, useExisting: CdkDrag }]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_DROP_LIST]\n }, {\n type: Optional\n }, {\n type: SkipSelf\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_DRAG_CONFIG]\n }] }, { type: ɵngcc2.Directionality, decorators: [{\n type: Optional\n }] }, { type: DragDrop }, { type: ɵngcc0.ChangeDetectorRef }, { type: CdkDragHandle, decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [CDK_DRAG_HANDLE]\n }] }]; }, { started: [{\n type: Output,\n args: ['cdkDragStarted']\n }], released: [{\n type: Output,\n args: ['cdkDragReleased']\n }], ended: [{\n type: Output,\n args: ['cdkDragEnded']\n }], entered: [{\n type: Output,\n args: ['cdkDragEntered']\n }], exited: [{\n type: Output,\n args: ['cdkDragExited']\n }], dropped: [{\n type: Output,\n args: ['cdkDragDropped']\n }], moved: [{\n type: Output,\n args: ['cdkDragMoved']\n }], disabled: [{\n type: Input,\n args: ['cdkDragDisabled']\n }], dragStartDelay: [{\n type: Input,\n args: ['cdkDragStartDelay']\n }], lockAxis: [{\n type: Input,\n args: ['cdkDragLockAxis']\n }], constrainPosition: [{\n type: Input,\n args: ['cdkDragConstrainPosition']\n }], previewClass: [{\n type: Input,\n args: ['cdkDragPreviewClass']\n }], boundaryElement: [{\n type: Input,\n args: ['cdkDragBoundary']\n }], rootElementSelector: [{\n type: Input,\n args: ['cdkDragRootElement']\n }], _handles: [{\n type: ContentChildren,\n args: [CDK_DRAG_HANDLE, { descendants: true }]\n }], _previewTemplate: [{\n type: ContentChild,\n args: [CDK_DRAG_PREVIEW]\n }], _placeholderTemplate: [{\n type: ContentChild,\n args: [CDK_DRAG_PLACEHOLDER]\n }], data: [{\n type: Input,\n args: ['cdkDragData']\n }], freeDragPosition: [{\n type: Input,\n args: ['cdkDragFreeDragPosition']\n }] }); })();\n/** Gets the closest ancestor of an element that matches a selector. */\nfunction getClosestMatchingAncestor(element, selector) {\n let currentElement = element.parentElement;\n while (currentElement) {\n // IE doesn't support `matches` so we have to fall back to `msMatchesSelector`.\n if (currentElement.matches ? currentElement.matches(selector) :\n currentElement.msMatchesSelector(selector)) {\n return currentElement;\n }\n currentElement = currentElement.parentElement;\n }\n return null;\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 DragDropModule {\n}\nDragDropModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DragDropModule });\nDragDropModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DragDropModule_Factory(t) { return new (t || DragDropModule)(); }, providers: [\n DragDrop,\n ], imports: [CdkScrollableModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DragDropModule, { declarations: function () { return [CdkDropList, CdkDropListGroup, CdkDrag, CdkDragHandle, CdkDragPreview, CdkDragPlaceholder]; }, exports: function () { return [CdkScrollableModule, CdkDropList, CdkDropListGroup, CdkDrag, CdkDragHandle, CdkDragPreview, CdkDragPlaceholder]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragDropModule, [{\n type: NgModule,\n args: [{\n declarations: [\n CdkDropList,\n CdkDropListGroup,\n CdkDrag,\n CdkDragHandle,\n CdkDragPreview,\n CdkDragPlaceholder,\n ],\n exports: [\n CdkScrollableModule,\n CdkDropList,\n CdkDropListGroup,\n CdkDrag,\n CdkDragHandle,\n CdkDragPreview,\n CdkDragPlaceholder,\n ],\n providers: [\n DragDrop,\n ]\n }]\n }], null, null); })();\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 { CDK_DRAG_CONFIG, CDK_DRAG_HANDLE, CDK_DRAG_PLACEHOLDER, CDK_DRAG_PREVIEW, CDK_DROP_LIST_GROUP, CdkDrag, CdkDragHandle, CdkDragPlaceholder, CdkDragPreview, CdkDropList, CdkDropListGroup, DragDrop, DragDropModule, DragDropRegistry, DragRef, DropListRef, copyArrayItem, moveItemInArray, transferArrayItem, CDK_DROP_LIST as ɵangular_material_src_cdk_drag_drop_drag_drop_b, CDK_DRAG_PARENT as ɵangular_material_src_cdk_drag_drop_drag_drop_c };\n\n//# sourceMappingURL=drag-drop.js.map","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { prettyBytes } from '../core/utils/pretty-bytes';\r\n\r\n@Pipe({\r\n name: 'formattedFileSize',\r\n pure: true,\r\n})\r\nexport class FormattedFileSizePipe implements PipeTransform {\r\n transform(bytes: number = 0, precision?: number|string): string {\r\n if (isNaN(parseFloat(String(bytes))) || ! isFinite(bytes)) return '-';\r\n return prettyBytes(bytes, precision);\r\n }\r\n}\r\n","import { InjectionToken, Directive, Input, EventEmitter, Optional, Inject, SkipSelf, ChangeDetectorRef, Output, NgModule } from '@angular/core';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject, Subscription } from 'rxjs';\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 accordion. */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/collections';\nlet nextId = 0;\n/**\n * Injection token that can be used to reference instances of `CdkAccordion`. It serves\n * as alternative token to the actual `CdkAccordion` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_ACCORDION = new InjectionToken('CdkAccordion');\n/**\n * Directive whose purpose is to manage the expanded state of CdkAccordionItem children.\n */\nclass CdkAccordion {\n constructor() {\n /** Emits when the state of the accordion changes */\n this._stateChanges = new Subject();\n /** Stream that emits true/false when openAll/closeAll is triggered. */\n this._openCloseAllActions = new Subject();\n /** A readonly id value to use for unique selection coordination. */\n this.id = `cdk-accordion-${nextId++}`;\n this._multi = false;\n }\n /** Whether the accordion should allow multiple expanded accordion items simultaneously. */\n get multi() { return this._multi; }\n set multi(multi) { this._multi = coerceBooleanProperty(multi); }\n /** Opens all enabled accordion items in an accordion where multi is enabled. */\n openAll() {\n this._openCloseAll(true);\n }\n /** Closes all enabled accordion items in an accordion where multi is enabled. */\n closeAll() {\n this._openCloseAll(false);\n }\n ngOnChanges(changes) {\n this._stateChanges.next(changes);\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n _openCloseAll(expanded) {\n if (this.multi) {\n this._openCloseAllActions.next(expanded);\n }\n }\n}\nCdkAccordion.ɵfac = function CdkAccordion_Factory(t) { return new (t || CdkAccordion)(); };\nCdkAccordion.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkAccordion, selectors: [[\"cdk-accordion\"], [\"\", \"cdkAccordion\", \"\"]], inputs: { multi: \"multi\" }, exportAs: [\"cdkAccordion\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_ACCORDION, useExisting: CdkAccordion }]), ɵngcc0.ɵɵNgOnChangesFeature] });\nCdkAccordion.propDecorators = {\n multi: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkAccordion, [{\n type: Directive,\n args: [{\n selector: 'cdk-accordion, [cdkAccordion]',\n exportAs: 'cdkAccordion',\n providers: [{ provide: CDK_ACCORDION, useExisting: CdkAccordion }]\n }]\n }], function () { return []; }, { multi: [{\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/** Used to generate unique ID for each accordion item. */\nlet nextId$1 = 0;\nconst ɵ0 = undefined;\n/**\n * An basic directive expected to be extended and decorated as a component. Sets up all\n * events and attributes needed to be managed by a CdkAccordion parent.\n */\nclass CdkAccordionItem {\n constructor(accordion, _changeDetectorRef, _expansionDispatcher) {\n this.accordion = accordion;\n this._changeDetectorRef = _changeDetectorRef;\n this._expansionDispatcher = _expansionDispatcher;\n /** Subscription to openAll/closeAll events. */\n this._openCloseAllSubscription = Subscription.EMPTY;\n /** Event emitted every time the AccordionItem is closed. */\n this.closed = new EventEmitter();\n /** Event emitted every time the AccordionItem is opened. */\n this.opened = new EventEmitter();\n /** Event emitted when the AccordionItem is destroyed. */\n this.destroyed = new EventEmitter();\n /**\n * Emits whenever the expanded state of the accordion changes.\n * Primarily used to facilitate two-way binding.\n * @docs-private\n */\n this.expandedChange = new EventEmitter();\n /** The unique AccordionItem id. */\n this.id = `cdk-accordion-child-${nextId$1++}`;\n this._expanded = false;\n this._disabled = false;\n /** Unregister function for _expansionDispatcher. */\n this._removeUniqueSelectionListener = () => { };\n this._removeUniqueSelectionListener =\n _expansionDispatcher.listen((id, accordionId) => {\n if (this.accordion && !this.accordion.multi &&\n this.accordion.id === accordionId && this.id !== id) {\n this.expanded = false;\n }\n });\n // When an accordion item is hosted in an accordion, subscribe to open/close events.\n if (this.accordion) {\n this._openCloseAllSubscription = this._subscribeToOpenCloseAllActions();\n }\n }\n /** Whether the AccordionItem is expanded. */\n get expanded() { return this._expanded; }\n set expanded(expanded) {\n expanded = coerceBooleanProperty(expanded);\n // Only emit events and update the internal value if the value changes.\n if (this._expanded !== expanded) {\n this._expanded = expanded;\n this.expandedChange.emit(expanded);\n if (expanded) {\n this.opened.emit();\n /**\n * In the unique selection dispatcher, the id parameter is the id of the CdkAccordionItem,\n * the name value is the id of the accordion.\n */\n const accordionId = this.accordion ? this.accordion.id : this.id;\n this._expansionDispatcher.notify(this.id, accordionId);\n }\n else {\n this.closed.emit();\n }\n // Ensures that the animation will run when the value is set outside of an `@Input`.\n // This includes cases like the open, close and toggle methods.\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Whether the AccordionItem is disabled. */\n get disabled() { return this._disabled; }\n set disabled(disabled) { this._disabled = coerceBooleanProperty(disabled); }\n /** Emits an event for the accordion item being destroyed. */\n ngOnDestroy() {\n this.opened.complete();\n this.closed.complete();\n this.destroyed.emit();\n this.destroyed.complete();\n this._removeUniqueSelectionListener();\n this._openCloseAllSubscription.unsubscribe();\n }\n /** Toggles the expanded state of the accordion item. */\n toggle() {\n if (!this.disabled) {\n this.expanded = !this.expanded;\n }\n }\n /** Sets the expanded state of the accordion item to false. */\n close() {\n if (!this.disabled) {\n this.expanded = false;\n }\n }\n /** Sets the expanded state of the accordion item to true. */\n open() {\n if (!this.disabled) {\n this.expanded = true;\n }\n }\n _subscribeToOpenCloseAllActions() {\n return this.accordion._openCloseAllActions.subscribe(expanded => {\n // Only change expanded state if item is enabled\n if (!this.disabled) {\n this.expanded = expanded;\n }\n });\n }\n}\nCdkAccordionItem.ɵfac = function CdkAccordionItem_Factory(t) { return new (t || CdkAccordionItem)(ɵngcc0.ɵɵdirectiveInject(CDK_ACCORDION, 12), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.UniqueSelectionDispatcher)); };\nCdkAccordionItem.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkAccordionItem, selectors: [[\"cdk-accordion-item\"], [\"\", \"cdkAccordionItem\", \"\"]], inputs: { expanded: \"expanded\", disabled: \"disabled\" }, outputs: { closed: \"closed\", opened: \"opened\", destroyed: \"destroyed\", expandedChange: \"expandedChange\" }, exportAs: [\"cdkAccordionItem\"], features: [ɵngcc0.ɵɵProvidersFeature([\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n { provide: CDK_ACCORDION, useValue: ɵ0 },\n ])] });\nCdkAccordionItem.ctorParameters = () => [\n { type: CdkAccordion, decorators: [{ type: Optional }, { type: Inject, args: [CDK_ACCORDION,] }, { type: SkipSelf }] },\n { type: ChangeDetectorRef },\n { type: UniqueSelectionDispatcher }\n];\nCdkAccordionItem.propDecorators = {\n closed: [{ type: Output }],\n opened: [{ type: Output }],\n destroyed: [{ type: Output }],\n expandedChange: [{ type: Output }],\n expanded: [{ type: Input }],\n disabled: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkAccordionItem, [{\n type: Directive,\n args: [{\n selector: 'cdk-accordion-item, [cdkAccordionItem]',\n exportAs: 'cdkAccordionItem',\n providers: [\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n { provide: CDK_ACCORDION, useValue: ɵ0 },\n ]\n }]\n }], function () { return [{ type: CdkAccordion, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_ACCORDION]\n }, {\n type: SkipSelf\n }] }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.UniqueSelectionDispatcher }]; }, { closed: [{\n type: Output\n }], opened: [{\n type: Output\n }], destroyed: [{\n type: Output\n }], expandedChange: [{\n type: Output\n }], expanded: [{\n type: Input\n }], disabled: [{\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 CdkAccordionModule {\n}\nCdkAccordionModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CdkAccordionModule });\nCdkAccordionModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CdkAccordionModule_Factory(t) { return new (t || CdkAccordionModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CdkAccordionModule, { declarations: [CdkAccordion, CdkAccordionItem], exports: [CdkAccordion, CdkAccordionItem] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkAccordionModule, [{\n type: NgModule,\n args: [{\n exports: [CdkAccordion, CdkAccordionItem],\n declarations: [CdkAccordion, CdkAccordionItem]\n }]\n }], null, null); })();\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 { CdkAccordion, CdkAccordionItem, CdkAccordionModule, CDK_ACCORDION as ɵangular_material_src_cdk_accordion_accordion_a };\n\n//# sourceMappingURL=accordion.js.map","import { CdkAccordionItem, CdkAccordion, CdkAccordionModule } from '@angular/cdk/accordion';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { InjectionToken, Directive, TemplateRef, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, SkipSelf, Inject, ChangeDetectorRef, ViewContainerRef, Input, Output, ContentChild, ViewChild, Host, ElementRef, QueryList, ContentChildren, NgModule } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { FocusMonitor, FocusKeyManager } from '@angular/cdk/a11y';\nimport { ENTER, hasModifierKey, SPACE, HOME, END } from '@angular/cdk/keycodes';\nimport { distinctUntilChanged, startWith, filter, take } from 'rxjs/operators';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subject, Subscription, EMPTY, merge } from 'rxjs';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\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 * Token used to provide a `MatAccordion` to `MatExpansionPanel`.\n * Used primarily to avoid circular imports between `MatAccordion` and `MatExpansionPanel`.\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/collections';\nimport * as ɵngcc2 from '@angular/cdk/portal';\nimport * as ɵngcc3 from '@angular/cdk/a11y';\nimport * as ɵngcc4 from '@angular/common';\n\nconst _c0 = [\"body\"];\nfunction MatExpansionPanel_ng_template_5_Template(rf, ctx) { }\nconst _c1 = [[[\"mat-expansion-panel-header\"]], \"*\", [[\"mat-action-row\"]]];\nconst _c2 = [\"mat-expansion-panel-header\", \"*\", \"mat-action-row\"];\nfunction MatExpansionPanelHeader_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 2);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"@indicatorRotate\", ctx_r0._getExpandedState());\n} }\nconst _c3 = [[[\"mat-panel-title\"]], [[\"mat-panel-description\"]], \"*\"];\nconst _c4 = [\"mat-panel-title\", \"mat-panel-description\", \"*\"];\nconst MAT_ACCORDION = new InjectionToken('MAT_ACCORDION');\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/** Time and timing curve for expansion panel animations. */\n// Note: Keep this in sync with the Sass variable for the panel header animation.\nconst EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';\n/**\n * Animations used by the Material expansion panel.\n *\n * A bug in angular animation's `state` when ViewContainers are moved using ViewContainerRef.move()\n * causes the animation state of moved components to become `void` upon exit, and not update again\n * upon reentry into the DOM. This can lead a to situation for the expansion panel where the state\n * of the panel is `expanded` or `collapsed` but the animation state is `void`.\n *\n * To correctly handle animating to the next state, we animate between `void` and `collapsed` which\n * are defined to have the same styles. Since angular animates from the current styles to the\n * destination state's style definition, in situations where we are moving from `void`'s styles to\n * `collapsed` this acts a noop since no style values change.\n *\n * In the case where angular's animation state is out of sync with the expansion panel's state, the\n * expansion panel being `expanded` and angular animations being `void`, the animation from the\n * `expanded`'s effective styles (though in a `void` animation state) to the collapsed state will\n * occur as expected.\n *\n * Angular Bug: https://github.com/angular/angular/issues/18847\n *\n * @docs-private\n */\nconst matExpansionAnimations = {\n /** Animation that rotates the indicator arrow. */\n indicatorRotate: trigger('indicatorRotate', [\n state('collapsed, void', style({ transform: 'rotate(0deg)' })),\n state('expanded', style({ transform: 'rotate(180deg)' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n /** Animation that expands and collapses the panel content. */\n bodyExpansion: trigger('bodyExpansion', [\n state('collapsed, void', style({ height: '0px', visibility: 'hidden' })),\n state('expanded', style({ height: '*', visibility: 'visible' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\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 * Expansion panel content that will be rendered lazily\n * after the panel is opened for the first time.\n */\nclass MatExpansionPanelContent {\n constructor(_template) {\n this._template = _template;\n }\n}\nMatExpansionPanelContent.ɵfac = function MatExpansionPanelContent_Factory(t) { return new (t || MatExpansionPanelContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nMatExpansionPanelContent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelContent, selectors: [[\"ng-template\", \"matExpansionPanelContent\", \"\"]] });\nMatExpansionPanelContent.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanelContent, [{\n type: Directive,\n args: [{\n selector: 'ng-template[matExpansionPanelContent]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\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/** Counter for generating unique element ids. */\nlet uniqueId = 0;\n/**\n * Injection token that can be used to configure the defalt\n * options for the expansion panel component.\n */\nconst MAT_EXPANSION_PANEL_DEFAULT_OPTIONS = new InjectionToken('MAT_EXPANSION_PANEL_DEFAULT_OPTIONS');\nconst ɵ0 = undefined;\n/**\n * `<mat-expansion-panel>`\n *\n * This component can be used as a single element to show expandable content, or as one of\n * multiple children of an element with the MatAccordion directive attached.\n */\nclass MatExpansionPanel extends CdkAccordionItem {\n constructor(accordion, _changeDetectorRef, _uniqueSelectionDispatcher, _viewContainerRef, _document, _animationMode, defaultOptions) {\n super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);\n this._viewContainerRef = _viewContainerRef;\n this._animationMode = _animationMode;\n this._hideToggle = false;\n /** An event emitted after the body's expansion animation happens. */\n this.afterExpand = new EventEmitter();\n /** An event emitted after the body's collapse animation happens. */\n this.afterCollapse = new EventEmitter();\n /** Stream that emits for changes in `@Input` properties. */\n this._inputChanges = new Subject();\n /** ID for the associated header element. Used for a11y labelling. */\n this._headerId = `mat-expansion-panel-header-${uniqueId++}`;\n /** Stream of body animation done events. */\n this._bodyAnimationDone = new Subject();\n this.accordion = accordion;\n this._document = _document;\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._bodyAnimationDone.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe(event => {\n if (event.fromState !== 'void') {\n if (event.toState === 'expanded') {\n this.afterExpand.emit();\n }\n else if (event.toState === 'collapsed') {\n this.afterCollapse.emit();\n }\n }\n });\n if (defaultOptions) {\n this.hideToggle = defaultOptions.hideToggle;\n }\n }\n /** Whether the toggle indicator should be hidden. */\n get hideToggle() {\n return this._hideToggle || (this.accordion && this.accordion.hideToggle);\n }\n set hideToggle(value) {\n this._hideToggle = coerceBooleanProperty(value);\n }\n /** The position of the expansion indicator. */\n get togglePosition() {\n return this._togglePosition || (this.accordion && this.accordion.togglePosition);\n }\n set togglePosition(value) {\n this._togglePosition = value;\n }\n /** Determines whether the expansion panel should have spacing between it and its siblings. */\n _hasSpacing() {\n if (this.accordion) {\n return this.expanded && this.accordion.displayMode === 'default';\n }\n return false;\n }\n /** Gets the expanded state string. */\n _getExpandedState() {\n return this.expanded ? 'expanded' : 'collapsed';\n }\n /** Toggles the expanded state of the expansion panel. */\n toggle() {\n this.expanded = !this.expanded;\n }\n /** Sets the expanded state of the expansion panel to false. */\n close() {\n this.expanded = false;\n }\n /** Sets the expanded state of the expansion panel to true. */\n open() {\n this.expanded = true;\n }\n ngAfterContentInit() {\n if (this._lazyContent) {\n // Render the content as soon as the panel becomes open.\n this.opened.pipe(startWith(null), filter(() => this.expanded && !this._portal), take(1)).subscribe(() => {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n });\n }\n }\n ngOnChanges(changes) {\n this._inputChanges.next(changes);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._bodyAnimationDone.complete();\n this._inputChanges.complete();\n }\n /** Checks whether the expansion panel's content contains the currently-focused element. */\n _containsFocus() {\n if (this._body) {\n const focusedElement = this._document.activeElement;\n const bodyElement = this._body.nativeElement;\n return focusedElement === bodyElement || bodyElement.contains(focusedElement);\n }\n return false;\n }\n}\nMatExpansionPanel.ɵfac = function MatExpansionPanel_Factory(t) { return new (t || MatExpansionPanel)(ɵngcc0.ɵɵdirectiveInject(MAT_ACCORDION, 12), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.UniqueSelectionDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(DOCUMENT), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, 8)); };\nMatExpansionPanel.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatExpansionPanel, selectors: [[\"mat-expansion-panel\"]], contentQueries: function MatExpansionPanel_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatExpansionPanelContent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._lazyContent = _t.first);\n } }, viewQuery: function MatExpansionPanel_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._body = _t.first);\n } }, hostAttrs: [1, \"mat-expansion-panel\"], hostVars: 6, hostBindings: function MatExpansionPanel_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-expanded\", ctx.expanded)(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\")(\"mat-expansion-panel-spacing\", ctx._hasSpacing());\n } }, inputs: { disabled: \"disabled\", expanded: \"expanded\", hideToggle: \"hideToggle\", togglePosition: \"togglePosition\" }, outputs: { opened: \"opened\", closed: \"closed\", expandedChange: \"expandedChange\", afterExpand: \"afterExpand\", afterCollapse: \"afterCollapse\" }, exportAs: [\"matExpansionPanel\"], features: [ɵngcc0.ɵɵProvidersFeature([\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n { provide: MAT_ACCORDION, useValue: ɵ0 },\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c2, decls: 7, vars: 4, consts: [[\"role\", \"region\", 1, \"mat-expansion-panel-content\", 3, \"id\"], [\"body\", \"\"], [1, \"mat-expansion-panel-body\"], [3, \"cdkPortalOutlet\"]], template: function MatExpansionPanel_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c1);\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 0, 1);\n ɵngcc0.ɵɵlistener(\"@bodyExpansion.done\", function MatExpansionPanel_Template_div_animation_bodyExpansion_done_1_listener($event) { return ctx._bodyAnimationDone.next($event); });\n ɵngcc0.ɵɵelementStart(3, \"div\", 2);\n ɵngcc0.ɵɵprojection(4, 1);\n ɵngcc0.ɵɵtemplate(5, MatExpansionPanel_ng_template_5_Template, 0, 0, \"ng-template\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(6, 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"@bodyExpansion\", ctx._getExpandedState())(\"id\", ctx.id);\n ɵngcc0.ɵɵattribute(\"aria-labelledby\", ctx._headerId);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"cdkPortalOutlet\", ctx._portal);\n } }, directives: [ɵngcc2.CdkPortalOutlet], styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;border-radius:4px;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:4px;border-top-left-radius:4px}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row button.mat-button-base,.mat-action-row button.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row button.mat-button-base,[dir=rtl] .mat-action-row button.mat-mdc-button-base{margin-left:0;margin-right:8px}\\n\"], encapsulation: 2, data: { animation: [matExpansionAnimations.bodyExpansion] }, changeDetection: 0 });\nMatExpansionPanel.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Optional }, { type: SkipSelf }, { type: Inject, args: [MAT_ACCORDION,] }] },\n { type: ChangeDetectorRef },\n { type: UniqueSelectionDispatcher },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS,] }, { type: Optional }] }\n];\nMatExpansionPanel.propDecorators = {\n hideToggle: [{ type: Input }],\n togglePosition: [{ type: Input }],\n afterExpand: [{ type: Output }],\n afterCollapse: [{ type: Output }],\n _lazyContent: [{ type: ContentChild, args: [MatExpansionPanelContent,] }],\n _body: [{ type: ViewChild, args: ['body',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanel, [{\n type: Component,\n args: [{\n selector: 'mat-expansion-panel',\n exportAs: 'matExpansionPanel',\n template: \"<ng-content select=\\\"mat-expansion-panel-header\\\"></ng-content>\\n<div class=\\\"mat-expansion-panel-content\\\"\\n role=\\\"region\\\"\\n [@bodyExpansion]=\\\"_getExpandedState()\\\"\\n (@bodyExpansion.done)=\\\"_bodyAnimationDone.next($event)\\\"\\n [attr.aria-labelledby]=\\\"_headerId\\\"\\n [id]=\\\"id\\\"\\n #body>\\n <div class=\\\"mat-expansion-panel-body\\\">\\n <ng-content></ng-content>\\n <ng-template [cdkPortalOutlet]=\\\"_portal\\\"></ng-template>\\n </div>\\n <ng-content select=\\\"mat-action-row\\\"></ng-content>\\n</div>\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['disabled', 'expanded'],\n outputs: ['opened', 'closed', 'expandedChange'],\n animations: [matExpansionAnimations.bodyExpansion],\n providers: [\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n { provide: MAT_ACCORDION, useValue: ɵ0 },\n ],\n host: {\n 'class': 'mat-expansion-panel',\n '[class.mat-expanded]': 'expanded',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[class.mat-expansion-panel-spacing]': '_hasSpacing()'\n },\n styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;border-radius:4px;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:4px;border-top-left-radius:4px}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row button.mat-button-base,.mat-action-row button.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row button.mat-button-base,[dir=rtl] .mat-action-row button.mat-mdc-button-base{margin-left:0;margin-right:8px}\\n\"]\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }, {\n type: Inject,\n args: [MAT_ACCORDION]\n }] }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.UniqueSelectionDispatcher }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]\n }, {\n type: Optional\n }] }]; }, { afterExpand: [{\n type: Output\n }], afterCollapse: [{\n type: Output\n }], hideToggle: [{\n type: Input\n }], togglePosition: [{\n type: Input\n }], _lazyContent: [{\n type: ContentChild,\n args: [MatExpansionPanelContent]\n }], _body: [{\n type: ViewChild,\n args: ['body']\n }] }); })();\nclass MatExpansionPanelActionRow {\n}\nMatExpansionPanelActionRow.ɵfac = function MatExpansionPanelActionRow_Factory(t) { return new (t || MatExpansionPanelActionRow)(); };\nMatExpansionPanelActionRow.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelActionRow, selectors: [[\"mat-action-row\"]], hostAttrs: [1, \"mat-action-row\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanelActionRow, [{\n type: Directive,\n args: [{\n selector: 'mat-action-row',\n host: {\n class: 'mat-action-row'\n }\n }]\n }], null, null); })();\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 * `<mat-expansion-panel-header>`\n *\n * This component corresponds to the header element of an `<mat-expansion-panel>`.\n */\nclass MatExpansionPanelHeader {\n constructor(panel, _element, _focusMonitor, _changeDetectorRef, defaultOptions, _animationMode) {\n this.panel = panel;\n this._element = _element;\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n this._parentChangeSubscription = Subscription.EMPTY;\n const accordionHideToggleChange = panel.accordion ?\n panel.accordion._stateChanges.pipe(filter(changes => !!(changes['hideToggle'] || changes['togglePosition']))) :\n EMPTY;\n // Since the toggle state depends on an @Input on the panel, we\n // need to subscribe and trigger change detection manually.\n this._parentChangeSubscription =\n merge(panel.opened, panel.closed, accordionHideToggleChange, panel._inputChanges.pipe(filter(changes => {\n return !!(changes['hideToggle'] ||\n changes['disabled'] ||\n changes['togglePosition']);\n })))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n // Avoids focus being lost if the panel contained the focused element and was closed.\n panel.closed\n .pipe(filter(() => panel._containsFocus()))\n .subscribe(() => _focusMonitor.focusVia(_element, 'program'));\n if (defaultOptions) {\n this.expandedHeight = defaultOptions.expandedHeight;\n this.collapsedHeight = defaultOptions.collapsedHeight;\n }\n }\n /**\n * Whether the associated panel is disabled. Implemented as a part of `FocusableOption`.\n * @docs-private\n */\n get disabled() {\n return this.panel.disabled;\n }\n /** Toggles the expanded state of the panel. */\n _toggle() {\n if (!this.disabled) {\n this.panel.toggle();\n }\n }\n /** Gets whether the panel is expanded. */\n _isExpanded() {\n return this.panel.expanded;\n }\n /** Gets the expanded state string of the panel. */\n _getExpandedState() {\n return this.panel._getExpandedState();\n }\n /** Gets the panel id. */\n _getPanelId() {\n return this.panel.id;\n }\n /** Gets the toggle position for the header. */\n _getTogglePosition() {\n return this.panel.togglePosition;\n }\n /** Gets whether the expand indicator should be shown. */\n _showToggle() {\n return !this.panel.hideToggle && !this.panel.disabled;\n }\n /**\n * Gets the current height of the header. Null if no custom height has been\n * specified, and if the default height from the stylesheet should be used.\n */\n _getHeaderHeight() {\n const isExpanded = this._isExpanded();\n if (isExpanded && this.expandedHeight) {\n return this.expandedHeight;\n }\n else if (!isExpanded && this.collapsedHeight) {\n return this.collapsedHeight;\n }\n return null;\n }\n /** Handle keydown event calling to toggle() if appropriate. */\n _keydown(event) {\n switch (event.keyCode) {\n // Toggle for space and enter keys.\n case SPACE:\n case ENTER:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this._toggle();\n }\n break;\n default:\n if (this.panel.accordion) {\n this.panel.accordion._handleHeaderKeydown(event);\n }\n return;\n }\n }\n /**\n * Focuses the panel header. Implemented as a part of `FocusableOption`.\n * @param origin Origin of the action that triggered the focus.\n * @docs-private\n */\n focus(origin = 'program', options) {\n this._focusMonitor.focusVia(this._element, origin, options);\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._element).subscribe(origin => {\n if (origin && this.panel.accordion) {\n this.panel.accordion._handleHeaderFocus(this);\n }\n });\n }\n ngOnDestroy() {\n this._parentChangeSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._element);\n }\n}\nMatExpansionPanelHeader.ɵfac = function MatExpansionPanelHeader_Factory(t) { return new (t || MatExpansionPanelHeader)(ɵngcc0.ɵɵdirectiveInject(MatExpansionPanel, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, 8), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatExpansionPanelHeader.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatExpansionPanelHeader, selectors: [[\"mat-expansion-panel-header\"]], hostAttrs: [\"role\", \"button\", 1, \"mat-expansion-panel-header\", \"mat-focus-indicator\"], hostVars: 15, hostBindings: function MatExpansionPanelHeader_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function MatExpansionPanelHeader_click_HostBindingHandler() { return ctx._toggle(); })(\"keydown\", function MatExpansionPanelHeader_keydown_HostBindingHandler($event) { return ctx._keydown($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.panel._headerId)(\"tabindex\", ctx.disabled ? 0 - 1 : 0)(\"aria-controls\", ctx._getPanelId())(\"aria-expanded\", ctx._isExpanded())(\"aria-disabled\", ctx.panel.disabled);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx._getHeaderHeight());\n ɵngcc0.ɵɵclassProp(\"mat-expanded\", ctx._isExpanded())(\"mat-expansion-toggle-indicator-after\", ctx._getTogglePosition() === \"after\")(\"mat-expansion-toggle-indicator-before\", ctx._getTogglePosition() === \"before\")(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\");\n } }, inputs: { expandedHeight: \"expandedHeight\", collapsedHeight: \"collapsedHeight\" }, ngContentSelectors: _c4, decls: 5, vars: 1, consts: [[1, \"mat-content\"], [\"class\", \"mat-expansion-indicator\", 4, \"ngIf\"], [1, \"mat-expansion-indicator\"]], template: function MatExpansionPanelHeader_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c3);\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵprojection(3, 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, MatExpansionPanelHeader_span_4_Template, 1, 1, \"span\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx._showToggle());\n } }, directives: [ɵngcc4.NgIf], styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;margin-right:16px}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}\\n\"], encapsulation: 2, data: { animation: [\n matExpansionAnimations.indicatorRotate,\n ] }, changeDetection: 0 });\nMatExpansionPanelHeader.ctorParameters = () => [\n { type: MatExpansionPanel, decorators: [{ type: Host }] },\n { type: ElementRef },\n { type: FocusMonitor },\n { type: ChangeDetectorRef },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS,] }, { type: Optional }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatExpansionPanelHeader.propDecorators = {\n expandedHeight: [{ type: Input }],\n collapsedHeight: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanelHeader, [{\n type: Component,\n args: [{\n selector: 'mat-expansion-panel-header',\n template: \"<span class=\\\"mat-content\\\">\\n <ng-content select=\\\"mat-panel-title\\\"></ng-content>\\n <ng-content select=\\\"mat-panel-description\\\"></ng-content>\\n <ng-content></ng-content>\\n</span>\\n<span [@indicatorRotate]=\\\"_getExpandedState()\\\" *ngIf=\\\"_showToggle()\\\"\\n class=\\\"mat-expansion-indicator\\\"></span>\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n matExpansionAnimations.indicatorRotate,\n ],\n host: {\n 'class': 'mat-expansion-panel-header mat-focus-indicator',\n 'role': 'button',\n '[attr.id]': 'panel._headerId',\n '[attr.tabindex]': 'disabled ? -1 : 0',\n '[attr.aria-controls]': '_getPanelId()',\n '[attr.aria-expanded]': '_isExpanded()',\n '[attr.aria-disabled]': 'panel.disabled',\n '[class.mat-expanded]': '_isExpanded()',\n '[class.mat-expansion-toggle-indicator-after]': `_getTogglePosition() === 'after'`,\n '[class.mat-expansion-toggle-indicator-before]': `_getTogglePosition() === 'before'`,\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[style.height]': '_getHeaderHeight()',\n '(click)': '_toggle()',\n '(keydown)': '_keydown($event)'\n },\n styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;margin-right:16px}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}\\n\"]\n }]\n }], function () { return [{ type: MatExpansionPanel, decorators: [{\n type: Host\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc3.FocusMonitor }, { type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]\n }, {\n type: Optional\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { expandedHeight: [{\n type: Input\n }], collapsedHeight: [{\n type: Input\n }] }); })();\n/**\n * `<mat-panel-description>`\n *\n * This directive is to be used inside of the MatExpansionPanelHeader component.\n */\nclass MatExpansionPanelDescription {\n}\nMatExpansionPanelDescription.ɵfac = function MatExpansionPanelDescription_Factory(t) { return new (t || MatExpansionPanelDescription)(); };\nMatExpansionPanelDescription.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelDescription, selectors: [[\"mat-panel-description\"]], hostAttrs: [1, \"mat-expansion-panel-header-description\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanelDescription, [{\n type: Directive,\n args: [{\n selector: 'mat-panel-description',\n host: {\n class: 'mat-expansion-panel-header-description'\n }\n }]\n }], null, null); })();\n/**\n * `<mat-panel-title>`\n *\n * This directive is to be used inside of the MatExpansionPanelHeader component.\n */\nclass MatExpansionPanelTitle {\n}\nMatExpansionPanelTitle.ɵfac = function MatExpansionPanelTitle_Factory(t) { return new (t || MatExpansionPanelTitle)(); };\nMatExpansionPanelTitle.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelTitle, selectors: [[\"mat-panel-title\"]], hostAttrs: [1, \"mat-expansion-panel-header-title\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanelTitle, [{\n type: Directive,\n args: [{\n selector: 'mat-panel-title',\n host: {\n class: 'mat-expansion-panel-header-title'\n }\n }]\n }], null, null); })();\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 * Directive for a Material Design Accordion.\n */\nclass MatAccordion extends CdkAccordion {\n constructor() {\n super(...arguments);\n /** Headers belonging to this accordion. */\n this._ownHeaders = new QueryList();\n this._hideToggle = false;\n /**\n * Display mode used for all expansion panels in the accordion. Currently two display\n * modes exist:\n * default - a gutter-like spacing is placed around any expanded panel, placing the expanded\n * panel at a different elevation from the rest of the accordion.\n * flat - no spacing is placed around expanded panels, showing all panels at the same\n * elevation.\n */\n this.displayMode = 'default';\n /** The position of the expansion indicator. */\n this.togglePosition = 'after';\n }\n /** Whether the expansion indicator should be hidden. */\n get hideToggle() { return this._hideToggle; }\n set hideToggle(show) { this._hideToggle = coerceBooleanProperty(show); }\n ngAfterContentInit() {\n this._headers.changes\n .pipe(startWith(this._headers))\n .subscribe((headers) => {\n this._ownHeaders.reset(headers.filter(header => header.panel.accordion === this));\n this._ownHeaders.notifyOnChanges();\n });\n this._keyManager = new FocusKeyManager(this._ownHeaders).withWrap();\n }\n /** Handles keyboard events coming in from the panel headers. */\n _handleHeaderKeydown(event) {\n const { keyCode } = event;\n const manager = this._keyManager;\n if (keyCode === HOME) {\n if (!hasModifierKey(event)) {\n manager.setFirstItemActive();\n event.preventDefault();\n }\n }\n else if (keyCode === END) {\n if (!hasModifierKey(event)) {\n manager.setLastItemActive();\n event.preventDefault();\n }\n }\n else {\n this._keyManager.onKeydown(event);\n }\n }\n _handleHeaderFocus(header) {\n this._keyManager.updateActiveItem(header);\n }\n}\nMatAccordion.ɵfac = function MatAccordion_Factory(t) { return ɵMatAccordion_BaseFactory(t || MatAccordion); };\nMatAccordion.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatAccordion, selectors: [[\"mat-accordion\"]], contentQueries: function MatAccordion_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatExpansionPanelHeader, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._headers = _t);\n } }, hostAttrs: [1, \"mat-accordion\"], hostVars: 2, hostBindings: function MatAccordion_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-accordion-multi\", ctx.multi);\n } }, inputs: { multi: \"multi\", displayMode: \"displayMode\", togglePosition: \"togglePosition\", hideToggle: \"hideToggle\" }, exportAs: [\"matAccordion\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_ACCORDION,\n useExisting: MatAccordion\n }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatAccordion.propDecorators = {\n _headers: [{ type: ContentChildren, args: [MatExpansionPanelHeader, { descendants: true },] }],\n hideToggle: [{ type: Input }],\n displayMode: [{ type: Input }],\n togglePosition: [{ type: Input }]\n};\nconst ɵMatAccordion_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatAccordion);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatAccordion, [{\n type: Directive,\n args: [{\n selector: 'mat-accordion',\n exportAs: 'matAccordion',\n inputs: ['multi'],\n providers: [{\n provide: MAT_ACCORDION,\n useExisting: MatAccordion\n }],\n host: {\n class: 'mat-accordion',\n // Class binding which is only used by the test harness as there is no other\n // way for the harness to detect if multiple panel support is enabled.\n '[class.mat-accordion-multi]': 'this.multi'\n }\n }]\n }], null, { displayMode: [{\n type: Input\n }], togglePosition: [{\n type: Input\n }], hideToggle: [{\n type: Input\n }], _headers: [{\n type: ContentChildren,\n args: [MatExpansionPanelHeader, { 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 */\nclass MatExpansionModule {\n}\nMatExpansionModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatExpansionModule });\nMatExpansionModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatExpansionModule_Factory(t) { return new (t || MatExpansionModule)(); }, imports: [[CommonModule, CdkAccordionModule, PortalModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatExpansionModule, { declarations: function () { return [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent]; }, imports: function () { return [CommonModule, CdkAccordionModule, PortalModule]; }, exports: function () { return [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, CdkAccordionModule, PortalModule],\n exports: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ],\n declarations: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ]\n }]\n }], null, null); })();\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 { EXPANSION_PANEL_ANIMATION_TIMING, MAT_ACCORDION, MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, MatAccordion, MatExpansionModule, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelContent, MatExpansionPanelDescription, MatExpansionPanelHeader, MatExpansionPanelTitle, matExpansionAnimations, ɵ0 };\n\n//# sourceMappingURL=expansion.js.map","import { Injectable } from '@angular/core';\r\nimport {UploadValidator} from '@common/uploads/validation/upload-validator';\r\nimport {FileSizeValidation} from '@common/uploads/validation/validations/file-size-validation';\r\nimport {convertToBytes} from '@common/core/utils/convertToBytes';\r\nimport {FileTypeValidation} from '@common/uploads/validation/validations/file-type-validation';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppearanceImageUploadValidator extends UploadValidator {\r\n protected readonly DEFAULT_MAX_SIZE_MB = 5;\r\n\r\n protected initValidations() {\r\n const validations = [\r\n new FileSizeValidation(\r\n {maxSize: convertToBytes(this.DEFAULT_MAX_SIZE_MB, 'MB')},\r\n this.i18n\r\n ),\r\n new FileTypeValidation({types: ['image']}, this.i18n),\r\n ];\r\n\r\n this.validations.push(...validations);\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\r\nimport {Plan} from '@common/core/types/models/Plan';\r\nimport {Translations} from '@common/core/translations/translations.service';\r\nimport {ucFirst} from '@common/core/utils/uc-first';\r\n\r\n@Component({\r\n selector: 'full-plan-name',\r\n template: '{{getFullPlanName()}}',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FullPlanNameComponent {\r\n @Input() plan: Plan;\r\n\r\n constructor(private i18n: Translations) {}\r\n\r\n public getFullPlanName(): string {\r\n if ( ! this.plan) return;\r\n let name = this.plan.parent ? this.plan.parent.name : this.plan.name;\r\n name = ucFirst(this.i18n.t(name));\r\n name += ' ' + this.i18n.t('Plan');\r\n if (this.plan.parent) name += ': ' + this.plan.name;\r\n return name;\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {SettingsPayload} from '../../core/config/settings-payload';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SettingsState {\r\n public initial: SettingsPayload = {server: {}, client: {}};\r\n public server: {[key: string]: string|number} = {};\r\n public client: {[key: string]: string|number} = {};\r\n\r\n public getModified() {\r\n return {\r\n server: this.diffSettingObjects('server'),\r\n client: this.diffSettingObjects('client'),\r\n } as SettingsPayload;\r\n }\r\n\r\n private diffSettingObjects(name: string): Object {\r\n const changed = {};\r\n\r\n for (const key in this[name]) {\r\n if (this[name][key] !== this.initial[name][key]) {\r\n changed[key] = this[name][key];\r\n }\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n public setAll(settings: SettingsPayload) {\r\n this.initial = settings;\r\n this.client = {...settings.client};\r\n this.server = {...settings.server};\r\n }\r\n\r\n public reset() {\r\n this.server = {...this.initial.server};\r\n this.client = {...this.initial.client};\r\n }\r\n\r\n public updateInitial(changedSettings: SettingsPayload) {\r\n this.initial = {\r\n client: {...this.initial.client, ...changedSettings.client},\r\n server: {...this.initial.server, ...changedSettings.server},\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router, Resolve, ActivatedRouteSnapshot } from '@angular/router';\r\nimport {AppHttpClient} from '../../core/http/app-http-client.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SettingsResolve implements Resolve<{client: Object, server: Object}> {\r\n constructor(private http: AppHttpClient, private router: Router) {}\r\n\r\n resolve(route: ActivatedRouteSnapshot): Promise<{client: Object, server: Object}> {\r\n return this.http.get('settings').toPromise().then(response => {\r\n return response;\r\n }, () => {\r\n this.router.navigate(['/admin']);\r\n return false;\r\n }) as any;\r\n }\r\n}\r\n","import { normalizePassiveListenerOptions, Platform, PlatformModule } from '@angular/cdk/platform';\nimport { ɵɵdefineInjectable, ɵɵinject, NgZone, Injectable, EventEmitter, Directive, ElementRef, Output, Optional, Inject, Input, HostListener, NgModule } from '@angular/core';\nimport { coerceElement, coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { EMPTY, Subject, fromEvent } from 'rxjs';\nimport { auditTime, takeUntil } from 'rxjs/operators';\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/** Options to pass to the animationstart listener. */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/platform';\nconst listenerOptions = normalizePassiveListenerOptions({ passive: true });\n/**\n * An injectable service that can be used to monitor the autofill state of an input.\n * Based on the following blog post:\n * https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\n */\nclass AutofillMonitor {\n constructor(_platform, _ngZone) {\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._monitoredElements = new Map();\n }\n monitor(elementOrRef) {\n if (!this._platform.isBrowser) {\n return EMPTY;\n }\n const element = coerceElement(elementOrRef);\n const info = this._monitoredElements.get(element);\n if (info) {\n return info.subject.asObservable();\n }\n const result = new Subject();\n const cssClass = 'cdk-text-field-autofilled';\n const listener = ((event) => {\n // Animation events fire on initial element render, we check for the presence of the autofill\n // CSS class to make sure this is a real change in state, not just the initial render before\n // we fire off events.\n if (event.animationName === 'cdk-text-field-autofill-start' &&\n !element.classList.contains(cssClass)) {\n element.classList.add(cssClass);\n this._ngZone.run(() => result.next({ target: event.target, isAutofilled: true }));\n }\n else if (event.animationName === 'cdk-text-field-autofill-end' &&\n element.classList.contains(cssClass)) {\n element.classList.remove(cssClass);\n this._ngZone.run(() => result.next({ target: event.target, isAutofilled: false }));\n }\n });\n this._ngZone.runOutsideAngular(() => {\n element.addEventListener('animationstart', listener, listenerOptions);\n element.classList.add('cdk-text-field-autofill-monitored');\n });\n this._monitoredElements.set(element, {\n subject: result,\n unlisten: () => {\n element.removeEventListener('animationstart', listener, listenerOptions);\n }\n });\n return result.asObservable();\n }\n stopMonitoring(elementOrRef) {\n const element = coerceElement(elementOrRef);\n const info = this._monitoredElements.get(element);\n if (info) {\n info.unlisten();\n info.subject.complete();\n element.classList.remove('cdk-text-field-autofill-monitored');\n element.classList.remove('cdk-text-field-autofilled');\n this._monitoredElements.delete(element);\n }\n }\n ngOnDestroy() {\n this._monitoredElements.forEach((_info, element) => this.stopMonitoring(element));\n }\n}\nAutofillMonitor.ɵfac = function AutofillMonitor_Factory(t) { return new (t || AutofillMonitor)(ɵngcc0.ɵɵinject(ɵngcc1.Platform), ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nAutofillMonitor.ɵprov = ɵɵdefineInjectable({ factory: function AutofillMonitor_Factory() { return new AutofillMonitor(ɵɵinject(Platform), ɵɵinject(NgZone)); }, token: AutofillMonitor, providedIn: \"root\" });\nAutofillMonitor.ctorParameters = () => [\n { type: Platform },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AutofillMonitor, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: ɵngcc1.Platform }, { type: ɵngcc0.NgZone }]; }, null); })();\n/** A directive that can be used to monitor the autofill state of an input. */\nclass CdkAutofill {\n constructor(_elementRef, _autofillMonitor) {\n this._elementRef = _elementRef;\n this._autofillMonitor = _autofillMonitor;\n /** Emits when the autofill state of the element changes. */\n this.cdkAutofill = new EventEmitter();\n }\n ngOnInit() {\n this._autofillMonitor\n .monitor(this._elementRef)\n .subscribe(event => this.cdkAutofill.emit(event));\n }\n ngOnDestroy() {\n this._autofillMonitor.stopMonitoring(this._elementRef);\n }\n}\nCdkAutofill.ɵfac = function CdkAutofill_Factory(t) { return new (t || CdkAutofill)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(AutofillMonitor)); };\nCdkAutofill.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkAutofill, selectors: [[\"\", \"cdkAutofill\", \"\"]], outputs: { cdkAutofill: \"cdkAutofill\" } });\nCdkAutofill.ctorParameters = () => [\n { type: ElementRef },\n { type: AutofillMonitor }\n];\nCdkAutofill.propDecorators = {\n cdkAutofill: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkAutofill, [{\n type: Directive,\n args: [{\n selector: '[cdkAutofill]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: AutofillMonitor }]; }, { cdkAutofill: [{\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 */\n/** Directive to automatically resize a textarea to fit its content. */\nclass CdkTextareaAutosize {\n constructor(_elementRef, _platform, _ngZone, \n /** @breaking-change 11.0.0 make document required */\n document) {\n this._elementRef = _elementRef;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._destroyed = new Subject();\n this._enabled = true;\n /**\n * Value of minRows as of last resize. If the minRows has decreased, the\n * height of the textarea needs to be recomputed to reflect the new minimum. The maxHeight\n * does not have the same problem because it does not affect the textarea's scrollHeight.\n */\n this._previousMinRows = -1;\n this._document = document;\n this._textareaElement = this._elementRef.nativeElement;\n this._measuringClass = _platform.FIREFOX ?\n 'cdk-textarea-autosize-measuring-firefox' :\n 'cdk-textarea-autosize-measuring';\n }\n /** Minimum amount of rows in the textarea. */\n get minRows() { return this._minRows; }\n set minRows(value) {\n this._minRows = coerceNumberProperty(value);\n this._setMinHeight();\n }\n /** Maximum amount of rows in the textarea. */\n get maxRows() { return this._maxRows; }\n set maxRows(value) {\n this._maxRows = coerceNumberProperty(value);\n this._setMaxHeight();\n }\n /** Whether autosizing is enabled or not */\n get enabled() { return this._enabled; }\n set enabled(value) {\n value = coerceBooleanProperty(value);\n // Only act if the actual value changed. This specifically helps to not run\n // resizeToFitContent too early (i.e. before ngAfterViewInit)\n if (this._enabled !== value) {\n (this._enabled = value) ? this.resizeToFitContent(true) : this.reset();\n }\n }\n /** Sets the minimum height of the textarea as determined by minRows. */\n _setMinHeight() {\n const minHeight = this.minRows && this._cachedLineHeight ?\n `${this.minRows * this._cachedLineHeight}px` : null;\n if (minHeight) {\n this._textareaElement.style.minHeight = minHeight;\n }\n }\n /** Sets the maximum height of the textarea as determined by maxRows. */\n _setMaxHeight() {\n const maxHeight = this.maxRows && this._cachedLineHeight ?\n `${this.maxRows * this._cachedLineHeight}px` : null;\n if (maxHeight) {\n this._textareaElement.style.maxHeight = maxHeight;\n }\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n // Remember the height which we started with in case autosizing is disabled\n this._initialHeight = this._textareaElement.style.height;\n this.resizeToFitContent();\n this._ngZone.runOutsideAngular(() => {\n const window = this._getWindow();\n fromEvent(window, 'resize')\n .pipe(auditTime(16), takeUntil(this._destroyed))\n .subscribe(() => this.resizeToFitContent(true));\n });\n }\n }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Cache the height of a single-row textarea if it has not already been cached.\n *\n * We need to know how large a single \"row\" of a textarea is in order to apply minRows and\n * maxRows. For the initial version, we will assume that the height of a single line in the\n * textarea does not ever change.\n */\n _cacheTextareaLineHeight() {\n if (this._cachedLineHeight) {\n return;\n }\n // Use a clone element because we have to override some styles.\n let textareaClone = this._textareaElement.cloneNode(false);\n textareaClone.rows = 1;\n // Use `position: absolute` so that this doesn't cause a browser layout and use\n // `visibility: hidden` so that nothing is rendered. Clear any other styles that\n // would affect the height.\n textareaClone.style.position = 'absolute';\n textareaClone.style.visibility = 'hidden';\n textareaClone.style.border = 'none';\n textareaClone.style.padding = '0';\n textareaClone.style.height = '';\n textareaClone.style.minHeight = '';\n textareaClone.style.maxHeight = '';\n // In Firefox it happens that textarea elements are always bigger than the specified amount\n // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar.\n // As a workaround that removes the extra space for the scrollbar, we can just set overflow\n // to hidden. This ensures that there is no invalid calculation of the line height.\n // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654\n textareaClone.style.overflow = 'hidden';\n this._textareaElement.parentNode.appendChild(textareaClone);\n this._cachedLineHeight = textareaClone.clientHeight;\n this._textareaElement.parentNode.removeChild(textareaClone);\n // Min and max heights have to be re-calculated if the cached line height changes\n this._setMinHeight();\n this._setMaxHeight();\n }\n ngDoCheck() {\n if (this._platform.isBrowser) {\n this.resizeToFitContent();\n }\n }\n /**\n * Resize the textarea to fit its content.\n * @param force Whether to force a height recalculation. By default the height will be\n * recalculated only if the value changed since the last call.\n */\n resizeToFitContent(force = false) {\n // If autosizing is disabled, just skip everything else\n if (!this._enabled) {\n return;\n }\n this._cacheTextareaLineHeight();\n // If we haven't determined the line-height yet, we know we're still hidden and there's no point\n // in checking the height of the textarea.\n if (!this._cachedLineHeight) {\n return;\n }\n const textarea = this._elementRef.nativeElement;\n const value = textarea.value;\n // Only resize if the value or minRows have changed since these calculations can be expensive.\n if (!force && this._minRows === this._previousMinRows && value === this._previousValue) {\n return;\n }\n const placeholderText = textarea.placeholder;\n // Reset the textarea height to auto in order to shrink back to its default size.\n // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations.\n // Long placeholders that are wider than the textarea width may lead to a bigger scrollHeight\n // value. To ensure that the scrollHeight is not bigger than the content, the placeholders\n // need to be removed temporarily.\n textarea.classList.add(this._measuringClass);\n textarea.placeholder = '';\n // The measuring class includes a 2px padding to workaround an issue with Chrome,\n // so we account for that extra space here by subtracting 4 (2px top + 2px bottom).\n const height = textarea.scrollHeight - 4;\n // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n textarea.style.height = `${height}px`;\n textarea.classList.remove(this._measuringClass);\n textarea.placeholder = placeholderText;\n this._ngZone.runOutsideAngular(() => {\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => this._scrollToCaretPosition(textarea));\n }\n else {\n setTimeout(() => this._scrollToCaretPosition(textarea));\n }\n });\n this._previousValue = value;\n this._previousMinRows = this._minRows;\n }\n /**\n * Resets the textarea to its original size\n */\n reset() {\n // Do not try to change the textarea, if the initialHeight has not been determined yet\n // This might potentially remove styles when reset() is called before ngAfterViewInit\n if (this._initialHeight !== undefined) {\n this._textareaElement.style.height = this._initialHeight;\n }\n }\n // In Ivy the `host` metadata will be merged, whereas in ViewEngine it is overridden. In order\n // to avoid double event listeners, we need to use `HostListener`. Once Ivy is the default, we\n // can move this back into `host`.\n // tslint:disable:no-host-decorator-in-concrete\n _noopInputHandler() {\n // no-op handler that ensures we're running change detection on input events.\n }\n /** Access injected document if available or fallback to global document reference */\n _getDocument() {\n return this._document || document;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n const doc = this._getDocument();\n return doc.defaultView || window;\n }\n /**\n * Scrolls a textarea to the caret position. On Firefox resizing the textarea will\n * prevent it from scrolling to the caret position. We need to re-set the selection\n * in order for it to scroll to the proper position.\n */\n _scrollToCaretPosition(textarea) {\n const { selectionStart, selectionEnd } = textarea;\n const document = this._getDocument();\n // IE will throw an \"Unspecified error\" if we try to set the selection range after the\n // element has been removed from the DOM. Assert that the directive hasn't been destroyed\n // between the time we requested the animation frame and when it was executed.\n // Also note that we have to assert that the textarea is focused before we set the\n // selection range. Setting the selection range on a non-focused textarea will cause\n // it to receive focus on IE and Edge.\n if (!this._destroyed.isStopped && document.activeElement === textarea) {\n textarea.setSelectionRange(selectionStart, selectionEnd);\n }\n }\n}\nCdkTextareaAutosize.ɵfac = function CdkTextareaAutosize_Factory(t) { return new (t || CdkTextareaAutosize)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Platform), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8)); };\nCdkTextareaAutosize.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkTextareaAutosize, selectors: [[\"textarea\", \"cdkTextareaAutosize\", \"\"]], hostAttrs: [\"rows\", \"1\", 1, \"cdk-textarea-autosize\"], hostBindings: function CdkTextareaAutosize_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"input\", function CdkTextareaAutosize_input_HostBindingHandler() { return ctx._noopInputHandler(); });\n } }, inputs: { minRows: [\"cdkAutosizeMinRows\", \"minRows\"], maxRows: [\"cdkAutosizeMaxRows\", \"maxRows\"], enabled: [\"cdkTextareaAutosize\", \"enabled\"] }, exportAs: [\"cdkTextareaAutosize\"] });\nCdkTextareaAutosize.ctorParameters = () => [\n { type: ElementRef },\n { type: Platform },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] }\n];\nCdkTextareaAutosize.propDecorators = {\n minRows: [{ type: Input, args: ['cdkAutosizeMinRows',] }],\n maxRows: [{ type: Input, args: ['cdkAutosizeMaxRows',] }],\n enabled: [{ type: Input, args: ['cdkTextareaAutosize',] }],\n _noopInputHandler: [{ type: HostListener, args: ['input',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkTextareaAutosize, [{\n type: Directive,\n args: [{\n selector: 'textarea[cdkTextareaAutosize]',\n exportAs: 'cdkTextareaAutosize',\n host: {\n 'class': 'cdk-textarea-autosize',\n // Textarea elements that have the directive applied should have a single row by default.\n // Browsers normally show two rows by default and therefore this limits the minRows binding.\n 'rows': '1'\n }\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.Platform }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, { minRows: [{\n type: Input,\n args: ['cdkAutosizeMinRows']\n }], maxRows: [{\n type: Input,\n args: ['cdkAutosizeMaxRows']\n }], enabled: [{\n type: Input,\n args: ['cdkTextareaAutosize']\n }], \n // In Ivy the `host` metadata will be merged, whereas in ViewEngine it is overridden. In order\n // to avoid double event listeners, we need to use `HostListener`. Once Ivy is the default, we\n // can move this back into `host`.\n // tslint:disable:no-host-decorator-in-concrete\n _noopInputHandler: [{\n type: HostListener,\n args: ['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 TextFieldModule {\n}\nTextFieldModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: TextFieldModule });\nTextFieldModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function TextFieldModule_Factory(t) { return new (t || TextFieldModule)(); }, imports: [[PlatformModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TextFieldModule, { declarations: function () { return [CdkAutofill, CdkTextareaAutosize]; }, imports: function () { return [PlatformModule]; }, exports: function () { return [CdkAutofill, CdkTextareaAutosize]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextFieldModule, [{\n type: NgModule,\n args: [{\n declarations: [CdkAutofill, CdkTextareaAutosize],\n imports: [PlatformModule],\n exports: [CdkAutofill, CdkTextareaAutosize]\n }]\n }], null, null); })();\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 { AutofillMonitor, CdkAutofill, CdkTextareaAutosize, TextFieldModule };\n\n//# sourceMappingURL=text-field.js.map","import { CdkTextareaAutosize, AutofillMonitor, TextFieldModule } from '@angular/cdk/text-field';\nimport { Directive, Input, InjectionToken, ElementRef, Optional, Self, Inject, NgZone, HostListener, NgModule } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { getSupportedInputTypes, Platform } from '@angular/cdk/platform';\nimport { NgControl, NgForm, FormGroupDirective } from '@angular/forms';\nimport { mixinErrorState, ErrorStateMatcher } from '@angular/material/core';\nimport { MatFormFieldControl, MatFormField, MatFormFieldModule } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\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 * Directive to automatically resize a textarea to fit its content.\n * @deprecated Use `cdkTextareaAutosize` from `@angular/cdk/text-field` instead.\n * @breaking-change 8.0.0\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/platform';\nimport * as ɵngcc2 from '@angular/forms';\nimport * as ɵngcc3 from '@angular/material/core';\nimport * as ɵngcc4 from '@angular/cdk/text-field';\nimport * as ɵngcc5 from '@angular/material/form-field';\nclass MatTextareaAutosize extends CdkTextareaAutosize {\n get matAutosizeMinRows() { return this.minRows; }\n set matAutosizeMinRows(value) { this.minRows = value; }\n get matAutosizeMaxRows() { return this.maxRows; }\n set matAutosizeMaxRows(value) { this.maxRows = value; }\n get matAutosize() { return this.enabled; }\n set matAutosize(value) { this.enabled = value; }\n get matTextareaAutosize() { return this.enabled; }\n set matTextareaAutosize(value) { this.enabled = value; }\n}\nMatTextareaAutosize.ɵfac = function MatTextareaAutosize_Factory(t) { return ɵMatTextareaAutosize_BaseFactory(t || MatTextareaAutosize); };\nMatTextareaAutosize.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatTextareaAutosize, selectors: [[\"textarea\", \"mat-autosize\", \"\"], [\"textarea\", \"matTextareaAutosize\", \"\"]], hostAttrs: [\"rows\", \"1\", 1, \"cdk-textarea-autosize\", \"mat-autosize\"], inputs: { cdkAutosizeMinRows: \"cdkAutosizeMinRows\", cdkAutosizeMaxRows: \"cdkAutosizeMaxRows\", matAutosizeMinRows: \"matAutosizeMinRows\", matAutosizeMaxRows: \"matAutosizeMaxRows\", matAutosize: [\"mat-autosize\", \"matAutosize\"], matTextareaAutosize: \"matTextareaAutosize\" }, exportAs: [\"matTextareaAutosize\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatTextareaAutosize.propDecorators = {\n matAutosizeMinRows: [{ type: Input }],\n matAutosizeMaxRows: [{ type: Input }],\n matAutosize: [{ type: Input, args: ['mat-autosize',] }],\n matTextareaAutosize: [{ type: Input }]\n};\nconst ɵMatTextareaAutosize_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatTextareaAutosize);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatTextareaAutosize, [{\n type: Directive,\n args: [{\n selector: 'textarea[mat-autosize], textarea[matTextareaAutosize]',\n exportAs: 'matTextareaAutosize',\n inputs: ['cdkAutosizeMinRows', 'cdkAutosizeMaxRows'],\n host: {\n 'class': 'cdk-textarea-autosize mat-autosize',\n // Textarea elements that have the directive applied should have a single row by default.\n // Browsers normally show two rows by default and therefore this limits the minRows binding.\n 'rows': '1'\n }\n }]\n }], null, { matAutosizeMinRows: [{\n type: Input\n }], matAutosizeMaxRows: [{\n type: Input\n }], matAutosize: [{\n type: Input,\n args: ['mat-autosize']\n }], matTextareaAutosize: [{\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/** @docs-private */\nfunction getMatInputUnsupportedTypeError(type) {\n return Error(`Input type \"${type}\" isn't supported by matInput.`);\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 * This token is used to inject the object whose value should be set into `MatInput`. If none is\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\n * value to them.\n */\nconst MAT_INPUT_VALUE_ACCESSOR = new InjectionToken('MAT_INPUT_VALUE_ACCESSOR');\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// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = [\n 'button',\n 'checkbox',\n 'file',\n 'hidden',\n 'image',\n 'radio',\n 'range',\n 'reset',\n 'submit'\n];\nlet nextUniqueId = 0;\n// Boilerplate for applying mixins to MatInput.\n/** @docs-private */\nclass MatInputBase {\n constructor(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, \n /** @docs-private */\n ngControl) {\n this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n this._parentForm = _parentForm;\n this._parentFormGroup = _parentFormGroup;\n this.ngControl = ngControl;\n }\n}\nconst _MatInputMixinBase = mixinErrorState(MatInputBase);\n/** Directive that allows a native input to work inside a `MatFormField`. */\nclass MatInput extends _MatInputMixinBase {\n constructor(_elementRef, _platform, \n /** @docs-private */\n ngControl, _parentForm, _parentFormGroup, _defaultErrorStateMatcher, inputValueAccessor, _autofillMonitor, ngZone, \n // @breaking-change 8.0.0 `_formField` parameter to be made required.\n _formField) {\n super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n this._elementRef = _elementRef;\n this._platform = _platform;\n this.ngControl = ngControl;\n this._autofillMonitor = _autofillMonitor;\n this._formField = _formField;\n this._uid = `mat-input-${nextUniqueId++}`;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.focused = false;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.stateChanges = new Subject();\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.controlType = 'mat-input';\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.autofilled = false;\n this._disabled = false;\n this._required = false;\n this._type = 'text';\n this._readonly = false;\n this._neverEmptyInputTypes = [\n 'date',\n 'datetime',\n 'datetime-local',\n 'month',\n 'time',\n 'week'\n ].filter(t => getSupportedInputTypes().has(t));\n const element = this._elementRef.nativeElement;\n const nodeName = element.nodeName.toLowerCase();\n // If no input value accessor was explicitly specified, use the element as the input value\n // accessor.\n this._inputValueAccessor = inputValueAccessor || element;\n this._previousNativeValue = this.value;\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n // exists on iOS, we only bother to install the listener on iOS.\n if (_platform.IOS) {\n ngZone.runOutsideAngular(() => {\n _elementRef.nativeElement.addEventListener('keyup', (event) => {\n let el = event.target;\n if (!el.value && !el.selectionStart && !el.selectionEnd) {\n // Note: Just setting `0, 0` doesn't fix the issue. Setting\n // `1, 1` fixes it for the first time that you type text and\n // then hold delete. Toggling to `1, 1` and then back to\n // `0, 0` seems to completely fix it.\n el.setSelectionRange(1, 1);\n el.setSelectionRange(0, 0);\n }\n });\n });\n }\n this._isServer = !this._platform.isBrowser;\n this._isNativeSelect = nodeName === 'select';\n this._isTextarea = nodeName === 'textarea';\n if (this._isNativeSelect) {\n this.controlType = element.multiple ? 'mat-native-select-multiple' :\n 'mat-native-select';\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get disabled() {\n if (this.ngControl && this.ngControl.disabled !== null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get id() { return this._id; }\n set id(value) { this._id = value || this._uid; }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get required() { return this._required; }\n set required(value) { this._required = coerceBooleanProperty(value); }\n /** Input type of the element. */\n get type() { return this._type; }\n set type(value) {\n this._type = value || 'text';\n this._validateType();\n // When using Angular inputs, developers are no longer able to set the properties on the native\n // input element. To ensure that bindings for `type` work, we need to sync the setter\n // with the native property. Textarea elements don't support the type property or attribute.\n if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n this._elementRef.nativeElement.type = this._type;\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get value() { return this._inputValueAccessor.value; }\n set value(value) {\n if (value !== this.value) {\n this._inputValueAccessor.value = value;\n this.stateChanges.next();\n }\n }\n /** Whether the element is readonly. */\n get readonly() { return this._readonly; }\n set readonly(value) { this._readonly = coerceBooleanProperty(value); }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n this.autofilled = event.isAutofilled;\n this.stateChanges.next();\n });\n }\n }\n ngOnChanges() {\n this.stateChanges.next();\n }\n ngOnDestroy() {\n this.stateChanges.complete();\n if (this._platform.isBrowser) {\n this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n }\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this._dirtyCheckNativeValue();\n // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n // present or not depends on a query which is prone to \"changed after checked\" errors.\n this._dirtyCheckPlaceholder();\n }\n /** Focuses the input. */\n focus(options) {\n this._elementRef.nativeElement.focus(options);\n }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n /** Callback for the cases where the focused state of the input changes. */\n // tslint:disable:no-host-decorator-in-concrete\n // tslint:enable:no-host-decorator-in-concrete\n _focusChanged(isFocused) {\n if (isFocused !== this.focused && (!this.readonly || !isFocused)) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _onInput() {\n // This is a noop function and is used to let Angular know whenever the value changes.\n // Angular will run a new change detection each time the `input` event has been dispatched.\n // It's necessary that Angular recognizes the value change, because when floatingLabel\n // is set to false and Angular forms aren't used, the placeholder won't recognize the\n // value changes and will not disappear.\n // Listening to the input event wouldn't be necessary when the input is using the\n // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n }\n /** Does some manual dirty checking on the native input `placeholder` attribute. */\n _dirtyCheckPlaceholder() {\n // If we're hiding the native placeholder, it should also be cleared from the DOM, otherwise\n // screen readers will read it out twice: once from the label and once from the attribute.\n // TODO: can be removed once we get rid of the `legacy` style for the form field, because it's\n // the only one that supports promoting the placeholder to a label.\n const formField = this._formField;\n const placeholder = (!formField || !formField._hideControlPlaceholder()) ? this.placeholder : null;\n if (placeholder !== this._previousPlaceholder) {\n const element = this._elementRef.nativeElement;\n this._previousPlaceholder = placeholder;\n placeholder ?\n element.setAttribute('placeholder', placeholder) : element.removeAttribute('placeholder');\n }\n }\n /** Does some manual dirty checking on the native input `value` property. */\n _dirtyCheckNativeValue() {\n const newValue = this._elementRef.nativeElement.value;\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n /** Make sure the input is a supported type. */\n _validateType() {\n if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1) {\n throw getMatInputUnsupportedTypeError(this._type);\n }\n }\n /** Checks whether the input type is one of the types that are never empty. */\n _isNeverEmpty() {\n return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n }\n /** Checks whether the input is invalid based on the native validation. */\n _isBadInput() {\n // The `validity` property won't be present on platform-server.\n let validity = this._elementRef.nativeElement.validity;\n return validity && validity.badInput;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty() {\n return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() &&\n !this.autofilled;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat() {\n if (this._isNativeSelect) {\n // For a single-selection `<select>`, the label should float when the selected option has\n // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n // overlapping the label with the options.\n const selectElement = this._elementRef.nativeElement;\n const firstOption = selectElement.options[0];\n // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n return this.focused || selectElement.multiple || !this.empty ||\n !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);\n }\n else {\n return this.focused || !this.empty;\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids) {\n this._ariaDescribedby = ids.join(' ');\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n if (!this.focused) {\n this.focus();\n }\n }\n}\nMatInput.ɵfac = function MatInput_Factory(t) { return new (t || MatInput)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Platform), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.NgControl, 10), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.NgForm, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.FormGroupDirective, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.ErrorStateMatcher), ɵngcc0.ɵɵdirectiveInject(MAT_INPUT_VALUE_ACCESSOR, 10), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.AutofillMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc5.MatFormField, 8)); };\nMatInput.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatInput, selectors: [[\"input\", \"matInput\", \"\"], [\"textarea\", \"matInput\", \"\"], [\"select\", \"matNativeControl\", \"\"], [\"input\", \"matNativeControl\", \"\"], [\"textarea\", \"matNativeControl\", \"\"]], hostAttrs: [1, \"mat-input-element\", \"mat-form-field-autofill-control\"], hostVars: 10, hostBindings: function MatInput_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function MatInput_focus_HostBindingHandler() { return ctx._focusChanged(true); })(\"blur\", function MatInput_blur_HostBindingHandler() { return ctx._focusChanged(false); })(\"input\", function MatInput_input_HostBindingHandler() { return ctx._onInput(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"disabled\", ctx.disabled)(\"required\", ctx.required);\n ɵngcc0.ɵɵattribute(\"id\", ctx.id)(\"data-placeholder\", ctx.placeholder)(\"readonly\", ctx.readonly && !ctx._isNativeSelect || null)(\"aria-describedby\", ctx._ariaDescribedby || null)(\"aria-invalid\", ctx.errorState)(\"aria-required\", ctx.required.toString());\n ɵngcc0.ɵɵclassProp(\"mat-input-server\", ctx._isServer);\n } }, inputs: { id: \"id\", disabled: \"disabled\", required: \"required\", type: \"type\", value: \"value\", readonly: \"readonly\", placeholder: \"placeholder\", errorStateMatcher: \"errorStateMatcher\" }, exportAs: [\"matInput\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: MatFormFieldControl, useExisting: MatInput }]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });\nMatInput.ctorParameters = () => [\n { type: ElementRef },\n { type: Platform },\n { type: NgControl, decorators: [{ type: Optional }, { type: Self }] },\n { type: NgForm, decorators: [{ type: Optional }] },\n { type: FormGroupDirective, decorators: [{ type: Optional }] },\n { type: ErrorStateMatcher },\n { type: undefined, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [MAT_INPUT_VALUE_ACCESSOR,] }] },\n { type: AutofillMonitor },\n { type: NgZone },\n { type: MatFormField, decorators: [{ type: Optional }] }\n];\nMatInput.propDecorators = {\n disabled: [{ type: Input }],\n id: [{ type: Input }],\n placeholder: [{ type: Input }],\n required: [{ type: Input }],\n type: [{ type: Input }],\n errorStateMatcher: [{ type: Input }],\n value: [{ type: Input }],\n readonly: [{ type: Input }],\n _focusChanged: [{ type: HostListener, args: ['focus', ['true'],] }, { type: HostListener, args: ['blur', ['false'],] }],\n _onInput: [{ type: HostListener, args: ['input',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatInput, [{\n type: Directive,\n args: [{\n selector: `input[matInput], textarea[matInput], select[matNativeControl],\n input[matNativeControl], textarea[matNativeControl]`,\n exportAs: 'matInput',\n host: {\n /**\n * @breaking-change 8.0.0 remove .mat-form-field-autofill-control in favor of AutofillMonitor.\n */\n 'class': 'mat-input-element mat-form-field-autofill-control',\n '[class.mat-input-server]': '_isServer',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[attr.id]': 'id',\n // At the time of writing, we have a lot of customer tests that look up the input based on its\n // placeholder. Since we sometimes omit the placeholder attribute from the DOM to prevent screen\n // readers from reading it twice, we have to keep it somewhere in the DOM for the lookup.\n '[attr.data-placeholder]': 'placeholder',\n '[disabled]': 'disabled',\n '[required]': 'required',\n '[attr.readonly]': 'readonly && !_isNativeSelect || null',\n '[attr.aria-describedby]': '_ariaDescribedby || null',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-required]': 'required.toString()'\n },\n providers: [{ provide: MatFormFieldControl, useExisting: MatInput }]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.Platform }, { type: ɵngcc2.NgControl, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: ɵngcc2.NgForm, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.FormGroupDirective, decorators: [{\n type: Optional\n }] }, { type: ɵngcc3.ErrorStateMatcher }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [MAT_INPUT_VALUE_ACCESSOR]\n }] }, { type: ɵngcc4.AutofillMonitor }, { type: ɵngcc0.NgZone }, { type: ɵngcc5.MatFormField, decorators: [{\n type: Optional\n }] }]; }, { id: [{\n type: Input\n }], disabled: [{\n type: Input\n }], required: [{\n type: Input\n }], type: [{\n type: Input\n }], value: [{\n type: Input\n }], readonly: [{\n type: Input\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n /** Callback for the cases where the focused state of the input changes. */\n // tslint:disable:no-host-decorator-in-concrete\n // tslint:enable:no-host-decorator-in-concrete\n _focusChanged: [{\n type: HostListener,\n args: ['focus', ['true']]\n }, {\n type: HostListener,\n args: ['blur', ['false']]\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _onInput: [{\n type: HostListener,\n args: ['input']\n }], placeholder: [{\n type: Input\n }], errorStateMatcher: [{\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 MatInputModule {\n}\nMatInputModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatInputModule });\nMatInputModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatInputModule_Factory(t) { return new (t || MatInputModule)(); }, providers: [ErrorStateMatcher], imports: [[\n TextFieldModule,\n MatFormFieldModule,\n ], TextFieldModule,\n // We re-export the `MatFormFieldModule` since `MatInput` will almost always\n // be used together with `MatFormField`.\n MatFormFieldModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatInputModule, { declarations: function () { return [MatInput, MatTextareaAutosize]; }, imports: function () { return [TextFieldModule,\n MatFormFieldModule]; }, exports: function () { return [TextFieldModule,\n // We re-export the `MatFormFieldModule` since `MatInput` will almost always\n // be used together with `MatFormField`.\n MatFormFieldModule, MatInput, MatTextareaAutosize]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatInputModule, [{\n type: NgModule,\n args: [{\n declarations: [MatInput, MatTextareaAutosize],\n imports: [\n TextFieldModule,\n MatFormFieldModule,\n ],\n exports: [\n TextFieldModule,\n // We re-export the `MatFormFieldModule` since `MatInput` will almost always\n // be used together with `MatFormField`.\n MatFormFieldModule,\n MatInput,\n MatTextareaAutosize,\n ],\n providers: [ErrorStateMatcher]\n }]\n }], null, null); })();\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_INPUT_VALUE_ACCESSOR, MatInput, MatInputModule, MatTextareaAutosize, getMatInputUnsupportedTypeError };\n\n//# sourceMappingURL=input.js.map","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SpaceInputComponent } from './space-input.component';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport {TranslationsModule} from '../../translations/translations.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n TranslationsModule,\r\n ],\r\n declarations: [\r\n SpaceInputComponent\r\n ],\r\n exports: [\r\n SpaceInputComponent,\r\n ]\r\n})\r\nexport class SpaceInputModule {\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatCheckboxModule} from '@angular/material/checkbox';\r\nimport {MatDialogModule} from '@angular/material/dialog';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {MatSnackBarModule} from '@angular/material/snack-bar';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {TextEditorComponent} from './text-editor.component';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {TranslationsModule} from '@common/core/translations/translations.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n TranslationsModule,\r\n\r\n // material\r\n MatButtonModule,\r\n MatSnackBarModule,\r\n MatCheckboxModule,\r\n MatTooltipModule,\r\n MatDialogModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n ],\r\n declarations: [\r\n TextEditorComponent,\r\n ],\r\n exports: [\r\n TextEditorComponent,\r\n ],\r\n})\r\nexport class TextEditorModule { }\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {SettingsComponent} from './settings.component';\r\nimport {AuthenticationSettingsComponent} from './authentication/authentication-settings.component';\r\nimport {CacheSettingsComponent} from './cache/cache-settings.component';\r\nimport {AnalyticsSettingsComponent} from './analytics/analytics-settings.component';\r\nimport {LocalizationSettingsComponent} from './localization/localization-settings.component';\r\nimport {MailSettingsComponent} from './mail/mail-settings.component';\r\nimport {LoggingSettingsComponent} from './logging/logging-settings.component';\r\nimport {QueueSettingsComponent} from './queue/queue-settings.component';\r\nimport {SettingsResolve} from './settings-resolve.service';\r\nimport {SettingsState} from './settings-state.service';\r\nimport {RouterModule} from '@angular/router';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {GeneralSettingsComponent} from './general/general-settings.component';\r\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatCheckboxModule} from '@angular/material/checkbox';\r\nimport {MatChipsModule} from '@angular/material/chips';\r\nimport {MatDialogModule} from '@angular/material/dialog';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\r\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\r\nimport {MatSnackBarModule} from '@angular/material/snack-bar';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {BillingSettingsComponent} from './billing/billing-settings.component';\r\nimport {SpaceInputModule} from '../../core/ui/space-input/space-input.module';\r\nimport {UploadingSettingsComponent} from './uploading/uploading-settings.component';\r\nimport {ChipsModule} from '../../core/ui/chips/chips.module';\r\nimport {FtpFormComponent} from './uploading/storage-forms/ftp-form/ftp-form.component';\r\nimport {DropboxFormComponent} from './uploading/storage-forms/dropbox-form/dropbox-form.component';\r\nimport {RackspaceFormComponent} from './uploading/storage-forms/rackspace-form/rackspace-form.component';\r\nimport {S3FormComponent} from './uploading/storage-forms/s3-form/s3-form.component';\r\nimport {DigitaloceanFormComponent} from './uploading/storage-forms/digitalocean-form/digitalocean-form.component';\r\nimport {RecaptchaSettingsComponent} from './recaptcha/recaptcha-settings.component';\r\nimport {BackblazeFormComponent} from './uploading/storage-forms/backblaze-form/backblaze-form.component';\r\nimport {MatTabsModule} from '@angular/material/tabs';\r\nimport {MatRadioModule} from '@angular/material/radio';\r\nimport {TranslationsModule} from '@common/core/translations/translations.module';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {FormatPipesModule} from '@common/core/ui/format-pipes/format-pipes.module';\r\nimport { GdprSettingsComponent } from './gdpr-settings/gdpr-settings.component';\r\nimport {RECAPTCHA_ACTIONS} from '@common/admin/settings/recaptcha/recaptcha-actions.token';\r\n\r\n@NgModule({\r\n imports: [\r\n RouterModule,\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n SpaceInputModule,\r\n ChipsModule,\r\n TranslationsModule,\r\n FormatPipesModule,\r\n\r\n // material\r\n MatButtonModule,\r\n MatIconModule,\r\n MatSnackBarModule,\r\n MatCheckboxModule,\r\n MatTooltipModule,\r\n MatDialogModule,\r\n MatMenuModule,\r\n MatSlideToggleModule,\r\n MatAutocompleteModule,\r\n MatInputModule,\r\n MatChipsModule,\r\n MatProgressBarModule,\r\n MatTabsModule,\r\n MatRadioModule,\r\n ],\r\n declarations: [\r\n SettingsComponent,\r\n AuthenticationSettingsComponent,\r\n CacheSettingsComponent,\r\n AnalyticsSettingsComponent,\r\n LocalizationSettingsComponent,\r\n MailSettingsComponent,\r\n LoggingSettingsComponent,\r\n QueueSettingsComponent,\r\n GeneralSettingsComponent,\r\n BillingSettingsComponent,\r\n RecaptchaSettingsComponent,\r\n\r\n // uploading\r\n UploadingSettingsComponent,\r\n FtpFormComponent,\r\n DropboxFormComponent,\r\n RackspaceFormComponent,\r\n S3FormComponent,\r\n DigitaloceanFormComponent,\r\n BackblazeFormComponent,\r\n GdprSettingsComponent,\r\n ],\r\n providers: [\r\n SettingsResolve,\r\n SettingsState,\r\n {provide: RECAPTCHA_ACTIONS, multi: true, useValue: [\r\n {name: 'Registration Recaptcha', key: 'recaptcha.enable_for_registration', description: 'Enable recaptcha integration for registration page.'},\r\n {name: 'Contact Recaptcha', key: 'recaptcha.enable_for_contact', description: 'Enable recaptcha integration for \"contact us\" page.'},\r\n ]}\r\n ],\r\n exports: [\r\n ChipsModule,\r\n ]\r\n})\r\nexport class SettingsModule {\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const RECAPTCHA_ACTIONS = new InjectionToken<any>('RECAPTCHA_ACTIONS');\r\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport { ComponentPortal, PortalModule } from '@angular/cdk/portal';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { ɵɵdefineInjectable, Injectable, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, NgZone, Input, Output, Directive, Optional, SkipSelf, InjectionToken, ChangeDetectorRef, Inject, ViewChild, forwardRef, ViewContainerRef, Attribute, ContentChild, InjectFlags, Injector, Self, NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { DateAdapter, MAT_DATE_FORMATS, mixinColor, ErrorStateMatcher, mixinErrorState } from '@angular/material/core';\nimport { Subject, Subscription, merge, of } from 'rxjs';\nimport { ESCAPE, SPACE, ENTER, PAGE_DOWN, PAGE_UP, END, HOME, DOWN_ARROW, UP_ARROW, RIGHT_ARROW, LEFT_ARROW, BACKSPACE } from '@angular/cdk/keycodes';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { take, startWith, filter } from 'rxjs/operators';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, Validators, NgControl, NgForm, FormGroupDirective, ControlContainer } from '@angular/forms';\nimport { MatFormField, MAT_FORM_FIELD, MatFormFieldControl } from '@angular/material/form-field';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** @docs-private */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common';\nimport * as ɵngcc2 from '@angular/material/core';\nimport * as ɵngcc3 from '@angular/cdk/bidi';\nimport * as ɵngcc4 from '@angular/material/button';\nimport * as ɵngcc5 from '@angular/cdk/a11y';\nimport * as ɵngcc6 from '@angular/cdk/portal';\nimport * as ɵngcc7 from '@angular/material/dialog';\nimport * as ɵngcc8 from '@angular/cdk/overlay';\nimport * as ɵngcc9 from '@angular/material/form-field';\nimport * as ɵngcc10 from '@angular/forms';\n\nconst _c0 = [\"mat-calendar-body\", \"\"];\nfunction MatCalendarBody_tr_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 2);\n ɵngcc0.ɵɵelementStart(1, \"td\", 3);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"padding-top\", ctx_r0._cellPadding)(\"padding-bottom\", ctx_r0._cellPadding);\n ɵngcc0.ɵɵattribute(\"colspan\", ctx_r0.numCols);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r0.label, \" \");\n} }\nfunction MatCalendarBody_tr_1_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 7);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"padding-top\", ctx_r4._cellPadding)(\"padding-bottom\", ctx_r4._cellPadding);\n ɵngcc0.ɵɵattribute(\"colspan\", ctx_r4._firstRowOffset);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r4._firstRowOffset >= ctx_r4.labelMinRequiredCells ? ctx_r4.label : \"\", \" \");\n} }\nfunction MatCalendarBody_tr_1_td_2_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"td\", 8);\n ɵngcc0.ɵɵlistener(\"click\", function MatCalendarBody_tr_1_td_2_Template_td_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r9); const item_r6 = ctx.$implicit; const ctx_r8 = ɵngcc0.ɵɵnextContext(2); return ctx_r8._cellClicked(item_r6, $event); });\n ɵngcc0.ɵɵelementStart(1, \"div\", 9);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(3, \"div\", 10);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const item_r6 = ctx.$implicit;\n const colIndex_r7 = ctx.index;\n const rowIndex_r3 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r5._cellWidth)(\"padding-top\", ctx_r5._cellPadding)(\"padding-bottom\", ctx_r5._cellPadding);\n ɵngcc0.ɵɵclassProp(\"mat-calendar-body-disabled\", !item_r6.enabled)(\"mat-calendar-body-active\", ctx_r5._isActiveCell(rowIndex_r3, colIndex_r7))(\"mat-calendar-body-range-start\", ctx_r5._isRangeStart(item_r6.compareValue))(\"mat-calendar-body-range-end\", ctx_r5._isRangeEnd(item_r6.compareValue))(\"mat-calendar-body-in-range\", ctx_r5._isInRange(item_r6.compareValue))(\"mat-calendar-body-comparison-bridge-start\", ctx_r5._isComparisonBridgeStart(item_r6.compareValue, rowIndex_r3, colIndex_r7))(\"mat-calendar-body-comparison-bridge-end\", ctx_r5._isComparisonBridgeEnd(item_r6.compareValue, rowIndex_r3, colIndex_r7))(\"mat-calendar-body-comparison-start\", ctx_r5._isComparisonStart(item_r6.compareValue))(\"mat-calendar-body-comparison-end\", ctx_r5._isComparisonEnd(item_r6.compareValue))(\"mat-calendar-body-in-comparison-range\", ctx_r5._isInComparisonRange(item_r6.compareValue))(\"mat-calendar-body-preview-start\", ctx_r5._isPreviewStart(item_r6.compareValue))(\"mat-calendar-body-preview-end\", ctx_r5._isPreviewEnd(item_r6.compareValue))(\"mat-calendar-body-in-preview\", ctx_r5._isInPreview(item_r6.compareValue));\n ɵngcc0.ɵɵproperty(\"ngClass\", item_r6.cssClasses)(\"tabindex\", ctx_r5._isActiveCell(rowIndex_r3, colIndex_r7) ? 0 : 0 - 1);\n ɵngcc0.ɵɵattribute(\"data-mat-row\", rowIndex_r3)(\"data-mat-col\", colIndex_r7)(\"aria-label\", item_r6.ariaLabel)(\"aria-disabled\", !item_r6.enabled || null)(\"aria-selected\", ctx_r5._isSelected(item_r6));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"mat-calendar-body-selected\", ctx_r5._isSelected(item_r6))(\"mat-calendar-body-today\", ctx_r5.todayValue === item_r6.compareValue);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", item_r6.displayValue, \" \");\n} }\nfunction MatCalendarBody_tr_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 4);\n ɵngcc0.ɵɵtemplate(1, MatCalendarBody_tr_1_td_1_Template, 2, 6, \"td\", 5);\n ɵngcc0.ɵɵtemplate(2, MatCalendarBody_tr_1_td_2_Template, 4, 44, \"td\", 6);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const row_r2 = ctx.$implicit;\n const rowIndex_r3 = ctx.index;\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", rowIndex_r3 === 0 && ctx_r1._firstRowOffset);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", row_r2);\n} }\nfunction MatMonthView_th_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\", 5);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const day_r1 = ctx.$implicit;\n ɵngcc0.ɵɵattribute(\"aria-label\", day_r1.long);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(day_r1.narrow);\n} }\nconst _c1 = [\"*\"];\nfunction MatCalendar_ng_template_0_Template(rf, ctx) { }\nfunction MatCalendar_mat_month_view_2_Template(rf, ctx) { if (rf & 1) {\n const _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"mat-month-view\", 5);\n ɵngcc0.ɵɵlistener(\"activeDateChange\", function MatCalendar_mat_month_view_2_Template_mat_month_view_activeDateChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r4 = ɵngcc0.ɵɵnextContext(); return ctx_r4.activeDate = $event; })(\"_userSelection\", function MatCalendar_mat_month_view_2_Template_mat_month_view__userSelection_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6._dateSelected($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"activeDate\", ctx_r1.activeDate)(\"selected\", ctx_r1.selected)(\"dateFilter\", ctx_r1.dateFilter)(\"maxDate\", ctx_r1.maxDate)(\"minDate\", ctx_r1.minDate)(\"dateClass\", ctx_r1.dateClass)(\"comparisonStart\", ctx_r1.comparisonStart)(\"comparisonEnd\", ctx_r1.comparisonEnd);\n} }\nfunction MatCalendar_mat_year_view_3_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"mat-year-view\", 6);\n ɵngcc0.ɵɵlistener(\"activeDateChange\", function MatCalendar_mat_year_view_3_Template_mat_year_view_activeDateChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.activeDate = $event; })(\"monthSelected\", function MatCalendar_mat_year_view_3_Template_mat_year_view_monthSelected_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9._monthSelectedInYearView($event); })(\"selectedChange\", function MatCalendar_mat_year_view_3_Template_mat_year_view_selectedChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r10 = ɵngcc0.ɵɵnextContext(); return ctx_r10._goToDateInView($event, \"month\"); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"activeDate\", ctx_r2.activeDate)(\"selected\", ctx_r2.selected)(\"dateFilter\", ctx_r2.dateFilter)(\"maxDate\", ctx_r2.maxDate)(\"minDate\", ctx_r2.minDate);\n} }\nfunction MatCalendar_mat_multi_year_view_4_Template(rf, ctx) { if (rf & 1) {\n const _r12 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"mat-multi-year-view\", 7);\n ɵngcc0.ɵɵlistener(\"activeDateChange\", function MatCalendar_mat_multi_year_view_4_Template_mat_multi_year_view_activeDateChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r11 = ɵngcc0.ɵɵnextContext(); return ctx_r11.activeDate = $event; })(\"yearSelected\", function MatCalendar_mat_multi_year_view_4_Template_mat_multi_year_view_yearSelected_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r13 = ɵngcc0.ɵɵnextContext(); return ctx_r13._yearSelectedInMultiYearView($event); })(\"selectedChange\", function MatCalendar_mat_multi_year_view_4_Template_mat_multi_year_view_selectedChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r14 = ɵngcc0.ɵɵnextContext(); return ctx_r14._goToDateInView($event, \"year\"); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"activeDate\", ctx_r3.activeDate)(\"selected\", ctx_r3.selected)(\"dateFilter\", ctx_r3.dateFilter)(\"maxDate\", ctx_r3.maxDate)(\"minDate\", ctx_r3.minDate);\n} }\nconst _c2 = [\"button\"];\nfunction MatDatepickerToggle__svg_svg_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(0, \"svg\", 3);\n ɵngcc0.ɵɵelement(1, \"path\", 4);\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c3 = [[[\"\", \"matDatepickerToggleIcon\", \"\"]]];\nconst _c4 = [\"[matDatepickerToggleIcon]\"];\nconst _c5 = [[[\"input\", \"matStartDate\", \"\"]], [[\"input\", \"matEndDate\", \"\"]]];\nconst _c6 = [\"input[matStartDate]\", \"input[matEndDate]\"];\nfunction createMissingDateImplError(provider) {\n return Error(`MatDatepicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: MatNativeDateModule, MatMomentDateModule, or provide a ` +\n `custom implementation.`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Datepicker data that requires internationalization. */\nclass MatDatepickerIntl {\n constructor() {\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n this.changes = new Subject();\n /** A label for the calendar popup (used by screen readers). */\n this.calendarLabel = 'Calendar';\n /** A label for the button used to open the calendar popup (used by screen readers). */\n this.openCalendarLabel = 'Open calendar';\n /** A label for the previous month button (used by screen readers). */\n this.prevMonthLabel = 'Previous month';\n /** A label for the next month button (used by screen readers). */\n this.nextMonthLabel = 'Next month';\n /** A label for the previous year button (used by screen readers). */\n this.prevYearLabel = 'Previous year';\n /** A label for the next year button (used by screen readers). */\n this.nextYearLabel = 'Next year';\n /** A label for the previous multi-year button (used by screen readers). */\n this.prevMultiYearLabel = 'Previous 20 years';\n /** A label for the next multi-year button (used by screen readers). */\n this.nextMultiYearLabel = 'Next 20 years';\n /** A label for the 'switch to month view' button (used by screen readers). */\n this.switchToMonthViewLabel = 'Choose date';\n /** A label for the 'switch to year view' button (used by screen readers). */\n this.switchToMultiYearViewLabel = 'Choose month and year';\n }\n /** Formats a range of years. */\n formatYearRange(start, end) {\n return `${start} \\u2013 ${end}`;\n }\n}\nMatDatepickerIntl.ɵfac = function MatDatepickerIntl_Factory(t) { return new (t || MatDatepickerIntl)(); };\nMatDatepickerIntl.ɵprov = ɵɵdefineInjectable({ factory: function MatDatepickerIntl_Factory() { return new MatDatepickerIntl(); }, token: MatDatepickerIntl, providedIn: \"root\" });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDatepickerIntl, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return []; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nclass MatCalendarCell {\n constructor(value, displayValue, ariaLabel, enabled, cssClasses = {}, compareValue = value, rawValue) {\n this.value = value;\n this.displayValue = displayValue;\n this.ariaLabel = ariaLabel;\n this.enabled = enabled;\n this.cssClasses = cssClasses;\n this.compareValue = compareValue;\n this.rawValue = rawValue;\n }\n}\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\nclass MatCalendarBody {\n constructor(_elementRef, _ngZone) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n /** The number of columns in the table. */\n this.numCols = 7;\n /** The cell number of the active cell in the table. */\n this.activeCell = 0;\n /** Whether a range is being selected. */\n this.isRange = false;\n /**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\n this.cellAspectRatio = 1;\n /** Start of the preview range. */\n this.previewStart = null;\n /** End of the preview range. */\n this.previewEnd = null;\n /** Emits when a new value is selected. */\n this.selectedValueChange = new EventEmitter();\n /** Emits when the preview has changed as a result of a user action. */\n this.previewChange = new EventEmitter();\n /**\n * Event handler for when the user enters an element\n * inside the calendar body (e.g. by hovering in or focus).\n */\n this._enterHandler = (event) => {\n if (this._skipNextFocus && event.type === 'focus') {\n this._skipNextFocus = false;\n return;\n }\n // We only need to hit the zone when we're selecting a range.\n if (event.target && this.isRange) {\n const cell = this._getCellFromElement(event.target);\n if (cell) {\n this._ngZone.run(() => this.previewChange.emit({ value: cell.enabled ? cell : null, event }));\n }\n }\n };\n /**\n * Event handler for when the user's pointer leaves an element\n * inside the calendar body (e.g. by hovering out or blurring).\n */\n this._leaveHandler = (event) => {\n // We only need to hit the zone when we're selecting a range.\n if (this.previewEnd !== null && this.isRange) {\n // Only reset the preview end value when leaving cells. This looks better, because\n // we have a gap between the cells and the rows and we don't want to remove the\n // range just for it to show up again when the user moves a few pixels to the side.\n if (event.target && isTableCell(event.target)) {\n this._ngZone.run(() => this.previewChange.emit({ value: null, event }));\n }\n }\n };\n _ngZone.runOutsideAngular(() => {\n const element = _elementRef.nativeElement;\n element.addEventListener('mouseenter', this._enterHandler, true);\n element.addEventListener('focus', this._enterHandler, true);\n element.addEventListener('mouseleave', this._leaveHandler, true);\n element.addEventListener('blur', this._leaveHandler, true);\n });\n }\n /** Called when a cell is clicked. */\n _cellClicked(cell, event) {\n if (cell.enabled) {\n this.selectedValueChange.emit({ value: cell.value, event });\n }\n }\n /** Returns whether a cell should be marked as selected. */\n _isSelected(cell) {\n return this.startValue === cell.compareValue || this.endValue === cell.compareValue;\n }\n ngOnChanges(changes) {\n const columnChanges = changes['numCols'];\n const { rows, numCols } = this;\n if (changes['rows'] || columnChanges) {\n this._firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n }\n if (changes['cellAspectRatio'] || columnChanges || !this._cellPadding) {\n this._cellPadding = `${50 * this.cellAspectRatio / numCols}%`;\n }\n if (columnChanges || !this._cellWidth) {\n this._cellWidth = `${100 / numCols}%`;\n }\n }\n ngOnDestroy() {\n const element = this._elementRef.nativeElement;\n element.removeEventListener('mouseenter', this._enterHandler, true);\n element.removeEventListener('focus', this._enterHandler, true);\n element.removeEventListener('mouseleave', this._leaveHandler, true);\n element.removeEventListener('blur', this._leaveHandler, true);\n }\n /** Returns whether a cell is active. */\n _isActiveCell(rowIndex, colIndex) {\n let cellNumber = rowIndex * this.numCols + colIndex;\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this._firstRowOffset;\n }\n return cellNumber == this.activeCell;\n }\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell(movePreview = true) {\n this._ngZone.runOutsideAngular(() => {\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n const activeCell = this._elementRef.nativeElement.querySelector('.mat-calendar-body-active');\n if (activeCell) {\n if (!movePreview) {\n this._skipNextFocus = true;\n }\n activeCell.focus();\n }\n });\n });\n }\n /** Gets whether a value is the start of the main range. */\n _isRangeStart(value) {\n return isStart(value, this.startValue, this.endValue);\n }\n /** Gets whether a value is the end of the main range. */\n _isRangeEnd(value) {\n return isEnd(value, this.startValue, this.endValue);\n }\n /** Gets whether a value is within the currently-selected range. */\n _isInRange(value) {\n return isInRange(value, this.startValue, this.endValue, this.isRange);\n }\n /** Gets whether a value is the start of the comparison range. */\n _isComparisonStart(value) {\n return isStart(value, this.comparisonStart, this.comparisonEnd);\n }\n /** Whether the cell is a start bridge cell between the main and comparison ranges. */\n _isComparisonBridgeStart(value, rowIndex, colIndex) {\n if (!this._isComparisonStart(value) || this._isRangeStart(value) || !this._isInRange(value)) {\n return false;\n }\n let previousCell = this.rows[rowIndex][colIndex - 1];\n if (!previousCell) {\n const previousRow = this.rows[rowIndex - 1];\n previousCell = previousRow && previousRow[previousRow.length - 1];\n }\n return previousCell && !this._isRangeEnd(previousCell.compareValue);\n }\n /** Whether the cell is an end bridge cell between the main and comparison ranges. */\n _isComparisonBridgeEnd(value, rowIndex, colIndex) {\n if (!this._isComparisonEnd(value) || this._isRangeEnd(value) || !this._isInRange(value)) {\n return false;\n }\n let nextCell = this.rows[rowIndex][colIndex + 1];\n if (!nextCell) {\n const nextRow = this.rows[rowIndex + 1];\n nextCell = nextRow && nextRow[0];\n }\n return nextCell && !this._isRangeStart(nextCell.compareValue);\n }\n /** Gets whether a value is the end of the comparison range. */\n _isComparisonEnd(value) {\n return isEnd(value, this.comparisonStart, this.comparisonEnd);\n }\n /** Gets whether a value is within the current comparison range. */\n _isInComparisonRange(value) {\n return isInRange(value, this.comparisonStart, this.comparisonEnd, this.isRange);\n }\n /** Gets whether a value is the start of the preview range. */\n _isPreviewStart(value) {\n return isStart(value, this.previewStart, this.previewEnd);\n }\n /** Gets whether a value is the end of the preview range. */\n _isPreviewEnd(value) {\n return isEnd(value, this.previewStart, this.previewEnd);\n }\n /** Gets whether a value is inside the preview range. */\n _isInPreview(value) {\n return isInRange(value, this.previewStart, this.previewEnd, this.isRange);\n }\n /** Finds the MatCalendarCell that corresponds to a DOM node. */\n _getCellFromElement(element) {\n let cell;\n if (isTableCell(element)) {\n cell = element;\n }\n else if (isTableCell(element.parentNode)) {\n cell = element.parentNode;\n }\n if (cell) {\n const row = cell.getAttribute('data-mat-row');\n const col = cell.getAttribute('data-mat-col');\n if (row && col) {\n return this.rows[parseInt(row)][parseInt(col)];\n }\n }\n return null;\n }\n}\nMatCalendarBody.ɵfac = function MatCalendarBody_Factory(t) { return new (t || MatCalendarBody)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nMatCalendarBody.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatCalendarBody, selectors: [[\"\", \"mat-calendar-body\", \"\"]], hostAttrs: [\"role\", \"grid\", \"aria-readonly\", \"true\", 1, \"mat-calendar-body\"], inputs: { numCols: \"numCols\", activeCell: \"activeCell\", isRange: \"isRange\", cellAspectRatio: \"cellAspectRatio\", previewStart: \"previewStart\", previewEnd: \"previewEnd\", label: \"label\", rows: \"rows\", todayValue: \"todayValue\", startValue: \"startValue\", endValue: \"endValue\", labelMinRequiredCells: \"labelMinRequiredCells\", comparisonStart: \"comparisonStart\", comparisonEnd: \"comparisonEnd\" }, outputs: { selectedValueChange: \"selectedValueChange\", previewChange: \"previewChange\" }, exportAs: [\"matCalendarBody\"], features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c0, decls: 2, vars: 2, consts: [[\"aria-hidden\", \"true\", 4, \"ngIf\"], [\"role\", \"row\", 4, \"ngFor\", \"ngForOf\"], [\"aria-hidden\", \"true\"], [1, \"mat-calendar-body-label\"], [\"role\", \"row\"], [\"aria-hidden\", \"true\", \"class\", \"mat-calendar-body-label\", 3, \"paddingTop\", \"paddingBottom\", 4, \"ngIf\"], [\"role\", \"gridcell\", \"class\", \"mat-calendar-body-cell\", 3, \"ngClass\", \"tabindex\", \"mat-calendar-body-disabled\", \"mat-calendar-body-active\", \"mat-calendar-body-range-start\", \"mat-calendar-body-range-end\", \"mat-calendar-body-in-range\", \"mat-calendar-body-comparison-bridge-start\", \"mat-calendar-body-comparison-bridge-end\", \"mat-calendar-body-comparison-start\", \"mat-calendar-body-comparison-end\", \"mat-calendar-body-in-comparison-range\", \"mat-calendar-body-preview-start\", \"mat-calendar-body-preview-end\", \"mat-calendar-body-in-preview\", \"width\", \"paddingTop\", \"paddingBottom\", \"click\", 4, \"ngFor\", \"ngForOf\"], [\"aria-hidden\", \"true\", 1, \"mat-calendar-body-label\"], [\"role\", \"gridcell\", 1, \"mat-calendar-body-cell\", 3, \"ngClass\", \"tabindex\", \"click\"], [1, \"mat-calendar-body-cell-content\", \"mat-focus-indicator\"], [1, \"mat-calendar-body-cell-preview\"]], template: function MatCalendarBody_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MatCalendarBody_tr_0_Template, 3, 6, \"tr\", 0);\n ɵngcc0.ɵɵtemplate(1, MatCalendarBody_tr_1_Template, 3, 2, \"tr\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx._firstRowOffset < ctx.labelMinRequiredCells);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.rows);\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgForOf, ɵngcc1.NgClass], styles: [\".mat-calendar-body{min-width:224px}.mat-calendar-body-label{height:0;line-height:0;text-align:left;padding-left:4.7142857143%;padding-right:4.7142857143%}.mat-calendar-body-cell{position:relative;height:0;line-height:0;text-align:center;outline:none;cursor:pointer}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\\\"\\\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}.cdk-high-contrast-active .mat-calendar-body-cell-content{border:none}.cdk-high-contrast-active .mat-datepicker-popup:not(:empty),.cdk-high-contrast-active .mat-calendar-body-selected{outline:solid 1px}.cdk-high-contrast-active .mat-calendar-body-today{outline:dotted 1px}.cdk-high-contrast-active .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-high-contrast-active .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){outline:dotted 2px}[dir=rtl] .mat-calendar-body-label{text-align:right}@media(hover: none){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:transparent}}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatCalendarBody.ctorParameters = () => [\n { type: ElementRef },\n { type: NgZone }\n];\nMatCalendarBody.propDecorators = {\n label: [{ type: Input }],\n rows: [{ type: Input }],\n todayValue: [{ type: Input }],\n startValue: [{ type: Input }],\n endValue: [{ type: Input }],\n labelMinRequiredCells: [{ type: Input }],\n numCols: [{ type: Input }],\n activeCell: [{ type: Input }],\n isRange: [{ type: Input }],\n cellAspectRatio: [{ type: Input }],\n comparisonStart: [{ type: Input }],\n comparisonEnd: [{ type: Input }],\n previewStart: [{ type: Input }],\n previewEnd: [{ type: Input }],\n selectedValueChange: [{ type: Output }],\n previewChange: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCalendarBody, [{\n type: Component,\n args: [{\n selector: '[mat-calendar-body]',\n template: \"<!--\\n If there's not enough space in the first row, create a separate label row. We mark this row as\\n aria-hidden because we don't want it to be read out as one of the weeks in the month.\\n-->\\n<tr *ngIf=\\\"_firstRowOffset < labelMinRequiredCells\\\" aria-hidden=\\\"true\\\">\\n <td class=\\\"mat-calendar-body-label\\\"\\n [attr.colspan]=\\\"numCols\\\"\\n [style.paddingTop]=\\\"_cellPadding\\\"\\n [style.paddingBottom]=\\\"_cellPadding\\\">\\n {{label}}\\n </td>\\n</tr>\\n\\n<!-- Create the first row separately so we can include a special spacer cell. -->\\n<tr *ngFor=\\\"let row of rows; let rowIndex = index\\\" role=\\\"row\\\">\\n <!--\\n We mark this cell as aria-hidden so it doesn't get read out as one of the days in the week.\\n The aspect ratio of the table cells is maintained by setting the top and bottom padding as a\\n percentage of the width (a variant of the trick described here:\\n https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\\n -->\\n <td *ngIf=\\\"rowIndex === 0 && _firstRowOffset\\\"\\n aria-hidden=\\\"true\\\"\\n class=\\\"mat-calendar-body-label\\\"\\n [attr.colspan]=\\\"_firstRowOffset\\\"\\n [style.paddingTop]=\\\"_cellPadding\\\"\\n [style.paddingBottom]=\\\"_cellPadding\\\">\\n {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\\n </td>\\n <td *ngFor=\\\"let item of row; let colIndex = index\\\"\\n role=\\\"gridcell\\\"\\n class=\\\"mat-calendar-body-cell\\\"\\n [ngClass]=\\\"item.cssClasses\\\"\\n [tabindex]=\\\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\\\"\\n [attr.data-mat-row]=\\\"rowIndex\\\"\\n [attr.data-mat-col]=\\\"colIndex\\\"\\n [class.mat-calendar-body-disabled]=\\\"!item.enabled\\\"\\n [class.mat-calendar-body-active]=\\\"_isActiveCell(rowIndex, colIndex)\\\"\\n [class.mat-calendar-body-range-start]=\\\"_isRangeStart(item.compareValue)\\\"\\n [class.mat-calendar-body-range-end]=\\\"_isRangeEnd(item.compareValue)\\\"\\n [class.mat-calendar-body-in-range]=\\\"_isInRange(item.compareValue)\\\"\\n [class.mat-calendar-body-comparison-bridge-start]=\\\"_isComparisonBridgeStart(item.compareValue, rowIndex, colIndex)\\\"\\n [class.mat-calendar-body-comparison-bridge-end]=\\\"_isComparisonBridgeEnd(item.compareValue, rowIndex, colIndex)\\\"\\n [class.mat-calendar-body-comparison-start]=\\\"_isComparisonStart(item.compareValue)\\\"\\n [class.mat-calendar-body-comparison-end]=\\\"_isComparisonEnd(item.compareValue)\\\"\\n [class.mat-calendar-body-in-comparison-range]=\\\"_isInComparisonRange(item.compareValue)\\\"\\n [class.mat-calendar-body-preview-start]=\\\"_isPreviewStart(item.compareValue)\\\"\\n [class.mat-calendar-body-preview-end]=\\\"_isPreviewEnd(item.compareValue)\\\"\\n [class.mat-calendar-body-in-preview]=\\\"_isInPreview(item.compareValue)\\\"\\n [attr.aria-label]=\\\"item.ariaLabel\\\"\\n [attr.aria-disabled]=\\\"!item.enabled || null\\\"\\n [attr.aria-selected]=\\\"_isSelected(item)\\\"\\n (click)=\\\"_cellClicked(item, $event)\\\"\\n [style.width]=\\\"_cellWidth\\\"\\n [style.paddingTop]=\\\"_cellPadding\\\"\\n [style.paddingBottom]=\\\"_cellPadding\\\">\\n <div class=\\\"mat-calendar-body-cell-content mat-focus-indicator\\\"\\n [class.mat-calendar-body-selected]=\\\"_isSelected(item)\\\"\\n [class.mat-calendar-body-today]=\\\"todayValue === item.compareValue\\\">\\n {{item.displayValue}}\\n </div>\\n <div class=\\\"mat-calendar-body-cell-preview\\\"></div>\\n </td>\\n</tr>\\n\",\n host: {\n 'class': 'mat-calendar-body',\n 'role': 'grid',\n 'aria-readonly': 'true'\n },\n exportAs: 'matCalendarBody',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mat-calendar-body{min-width:224px}.mat-calendar-body-label{height:0;line-height:0;text-align:left;padding-left:4.7142857143%;padding-right:4.7142857143%}.mat-calendar-body-cell{position:relative;height:0;line-height:0;text-align:center;outline:none;cursor:pointer}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\\\"\\\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}.cdk-high-contrast-active .mat-calendar-body-cell-content{border:none}.cdk-high-contrast-active .mat-datepicker-popup:not(:empty),.cdk-high-contrast-active .mat-calendar-body-selected{outline:solid 1px}.cdk-high-contrast-active .mat-calendar-body-today{outline:dotted 1px}.cdk-high-contrast-active .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-high-contrast-active .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){outline:dotted 2px}[dir=rtl] .mat-calendar-body-label{text-align:right}@media(hover: none){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:transparent}}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, { numCols: [{\n type: Input\n }], activeCell: [{\n type: Input\n }], isRange: [{\n type: Input\n }], cellAspectRatio: [{\n type: Input\n }], previewStart: [{\n type: Input\n }], previewEnd: [{\n type: Input\n }], selectedValueChange: [{\n type: Output\n }], previewChange: [{\n type: Output\n }], label: [{\n type: Input\n }], rows: [{\n type: Input\n }], todayValue: [{\n type: Input\n }], startValue: [{\n type: Input\n }], endValue: [{\n type: Input\n }], labelMinRequiredCells: [{\n type: Input\n }], comparisonStart: [{\n type: Input\n }], comparisonEnd: [{\n type: Input\n }] }); })();\n/** Checks whether a node is a table cell element. */\nfunction isTableCell(node) {\n return node.nodeName === 'TD';\n}\n/** Checks whether a value is the start of a range. */\nfunction isStart(value, start, end) {\n return end !== null && start !== end && value < end && value === start;\n}\n/** Checks whether a value is the end of a range. */\nfunction isEnd(value, start, end) {\n return start !== null && start !== end && value >= start && value === end;\n}\n/** Checks whether a value is inside of a range. */\nfunction isInRange(value, start, end, rangeEnabled) {\n return rangeEnabled && start !== null && end !== null && start !== end &&\n value >= start && value <= end;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** A class representing a range of dates. */\nclass DateRange {\n constructor(\n /** The start date of the range. */\n start, \n /** The end date of the range. */\n end) {\n this.start = start;\n this.end = end;\n }\n}\n/** A selection model containing a date selection. */\nclass MatDateSelectionModel {\n constructor(\n /** The current selection. */\n selection, _adapter) {\n this.selection = selection;\n this._adapter = _adapter;\n this._selectionChanged = new Subject();\n /** Emits when the selection has changed. */\n this.selectionChanged = this._selectionChanged.asObservable();\n this.selection = selection;\n }\n /**\n * Updates the current selection in the model.\n * @param value New selection that should be assigned.\n * @param source Object that triggered the selection change.\n */\n updateSelection(value, source) {\n this.selection = value;\n this._selectionChanged.next({ selection: value, source });\n }\n ngOnDestroy() {\n this._selectionChanged.complete();\n }\n _isValidDateInstance(date) {\n return this._adapter.isDateInstance(date) && this._adapter.isValid(date);\n }\n}\nMatDateSelectionModel.ɵfac = function MatDateSelectionModel_Factory(t) { return new (t || MatDateSelectionModel)(ɵngcc0.ɵɵdirectiveInject(undefined), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter)); };\nMatDateSelectionModel.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatDateSelectionModel });\nMatDateSelectionModel.ctorParameters = () => [\n { type: undefined },\n { type: DateAdapter }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDateSelectionModel, [{\n type: Directive\n }], function () { return [{ type: undefined }, { type: ɵngcc2.DateAdapter }]; }, null); })();\n/** A selection model that contains a single date. */\nclass MatSingleDateSelectionModel extends MatDateSelectionModel {\n constructor(adapter) {\n super(null, adapter);\n }\n /**\n * Adds a date to the current selection. In the case of a single date selection, the added date\n * simply overwrites the previous selection\n */\n add(date) {\n super.updateSelection(date, this);\n }\n /** Checks whether the current selection is valid. */\n isValid() {\n return this.selection != null && this._isValidDateInstance(this.selection);\n }\n /**\n * Checks whether the current selection is complete. In the case of a single date selection, this\n * is true if the current selection is not null.\n */\n isComplete() {\n return this.selection != null;\n }\n}\nMatSingleDateSelectionModel.ɵfac = function MatSingleDateSelectionModel_Factory(t) { return new (t || MatSingleDateSelectionModel)(ɵngcc0.ɵɵinject(ɵngcc2.DateAdapter)); };\nMatSingleDateSelectionModel.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MatSingleDateSelectionModel, factory: MatSingleDateSelectionModel.ɵfac });\nMatSingleDateSelectionModel.ctorParameters = () => [\n { type: DateAdapter }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSingleDateSelectionModel, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc2.DateAdapter }]; }, null); })();\n/** A selection model that contains a date range. */\nclass MatRangeDateSelectionModel extends MatDateSelectionModel {\n constructor(adapter) {\n super(new DateRange(null, null), adapter);\n }\n /**\n * Adds a date to the current selection. In the case of a date range selection, the added date\n * fills in the next `null` value in the range. If both the start and the end already have a date,\n * the selection is reset so that the given date is the new `start` and the `end` is null.\n */\n add(date) {\n let { start, end } = this.selection;\n if (start == null) {\n start = date;\n }\n else if (end == null) {\n end = date;\n }\n else {\n start = date;\n end = null;\n }\n super.updateSelection(new DateRange(start, end), this);\n }\n /** Checks whether the current selection is valid. */\n isValid() {\n const { start, end } = this.selection;\n // Empty ranges are valid.\n if (start == null && end == null) {\n return true;\n }\n // Complete ranges are only valid if both dates are valid and the start is before the end.\n if (start != null && end != null) {\n return this._isValidDateInstance(start) && this._isValidDateInstance(end) &&\n this._adapter.compareDate(start, end) <= 0;\n }\n // Partial ranges are valid if the start/end is valid.\n return (start == null || this._isValidDateInstance(start)) &&\n (end == null || this._isValidDateInstance(end));\n }\n /**\n * Checks whether the current selection is complete. In the case of a date range selection, this\n * is true if the current selection has a non-null `start` and `end`.\n */\n isComplete() {\n return this.selection.start != null && this.selection.end != null;\n }\n}\nMatRangeDateSelectionModel.ɵfac = function MatRangeDateSelectionModel_Factory(t) { return new (t || MatRangeDateSelectionModel)(ɵngcc0.ɵɵinject(ɵngcc2.DateAdapter)); };\nMatRangeDateSelectionModel.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MatRangeDateSelectionModel, factory: MatRangeDateSelectionModel.ɵfac });\nMatRangeDateSelectionModel.ctorParameters = () => [\n { type: DateAdapter }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatRangeDateSelectionModel, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc2.DateAdapter }]; }, null); })();\n/** @docs-private */\nfunction MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY(parent, adapter) {\n return parent || new MatSingleDateSelectionModel(adapter);\n}\n/** Used to provide a single selection model to a component. */\nconst MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER = {\n provide: MatDateSelectionModel,\n deps: [[new Optional(), new SkipSelf(), MatDateSelectionModel], DateAdapter],\n useFactory: MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY,\n};\n/** @docs-private */\nfunction MAT_RANGE_DATE_SELECTION_MODEL_FACTORY(parent, adapter) {\n return parent || new MatRangeDateSelectionModel(adapter);\n}\n/** Used to provide a range selection model to a component. */\nconst MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER = {\n provide: MatDateSelectionModel,\n deps: [[new Optional(), new SkipSelf(), MatDateSelectionModel], DateAdapter],\n useFactory: MAT_RANGE_DATE_SELECTION_MODEL_FACTORY,\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token used to customize the date range selection behavior. */\nconst MAT_DATE_RANGE_SELECTION_STRATEGY = new InjectionToken('MAT_DATE_RANGE_SELECTION_STRATEGY');\n/** Provides the default date range selection behavior. */\nclass DefaultMatCalendarRangeStrategy {\n constructor(_dateAdapter) {\n this._dateAdapter = _dateAdapter;\n }\n selectionFinished(date, currentRange) {\n let { start, end } = currentRange;\n if (start == null) {\n start = date;\n }\n else if (end == null && date && this._dateAdapter.compareDate(date, start) >= 0) {\n end = date;\n }\n else {\n start = date;\n end = null;\n }\n return new DateRange(start, end);\n }\n createPreview(activeDate, currentRange) {\n let start = null;\n let end = null;\n if (currentRange.start && !currentRange.end && activeDate) {\n start = currentRange.start;\n end = activeDate;\n }\n return new DateRange(start, end);\n }\n}\nDefaultMatCalendarRangeStrategy.ɵfac = function DefaultMatCalendarRangeStrategy_Factory(t) { return new (t || DefaultMatCalendarRangeStrategy)(ɵngcc0.ɵɵinject(ɵngcc2.DateAdapter)); };\nDefaultMatCalendarRangeStrategy.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DefaultMatCalendarRangeStrategy, factory: DefaultMatCalendarRangeStrategy.ɵfac });\nDefaultMatCalendarRangeStrategy.ctorParameters = () => [\n { type: DateAdapter }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultMatCalendarRangeStrategy, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc2.DateAdapter }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DAYS_PER_WEEK = 7;\n/**\n * An internal component used to display a single month in the datepicker.\n * @docs-private\n */\nclass MatMonthView {\n constructor(_changeDetectorRef, _dateFormats, _dateAdapter, _dir, _rangeStrategy) {\n this._changeDetectorRef = _changeDetectorRef;\n this._dateFormats = _dateFormats;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._rangeStrategy = _rangeStrategy;\n this._rerenderSubscription = Subscription.EMPTY;\n /** Emits when a new date is selected. */\n this.selectedChange = new EventEmitter();\n /** Emits when any date is selected. */\n this._userSelection = new EventEmitter();\n /** Emits when any date is activated. */\n this.activeDateChange = new EventEmitter();\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n this._activeDate = this._dateAdapter.today();\n }\n /**\n * The date to display in this month view (everything other than the month and year is ignored).\n */\n get activeDate() { return this._activeDate; }\n set activeDate(value) {\n const oldActiveDate = this._activeDate;\n const validDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (!this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\n this._init();\n }\n }\n /** The currently selected date. */\n get selected() { return this._selected; }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n }\n else {\n this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n this._setRanges(this._selected);\n }\n /** The minimum selectable date. */\n get minDate() { return this._minDate; }\n set minDate(value) {\n this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() { return this._maxDate; }\n set maxDate(value) {\n this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges\n .pipe(startWith(null))\n .subscribe(() => this._init());\n }\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n /** Handles when a new date is selected. */\n _dateSelected(event) {\n const date = event.value;\n const selectedYear = this._dateAdapter.getYear(this.activeDate);\n const selectedMonth = this._dateAdapter.getMonth(this.activeDate);\n const selectedDate = this._dateAdapter.createDate(selectedYear, selectedMonth, date);\n let rangeStartDate;\n let rangeEndDate;\n if (this._selected instanceof DateRange) {\n rangeStartDate = this._getDateInCurrentMonth(this._selected.start);\n rangeEndDate = this._getDateInCurrentMonth(this._selected.end);\n }\n else {\n rangeStartDate = rangeEndDate = this._getDateInCurrentMonth(this._selected);\n }\n if (rangeStartDate !== date || rangeEndDate !== date) {\n this.selectedChange.emit(selectedDate);\n }\n this._userSelection.emit({ value: selectedDate, event: event.event });\n }\n /** Handles keydown events on the calendar body when calendar is in month view. */\n _handleCalendarBodyKeydown(event) {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 1 - this._dateAdapter.getDate(this._activeDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, (this._dateAdapter.getNumDaysInMonth(this._activeDate) -\n this._dateAdapter.getDate(this._activeDate)));\n break;\n case PAGE_UP:\n this.activeDate = event.altKey ?\n this._dateAdapter.addCalendarYears(this._activeDate, -1) :\n this._dateAdapter.addCalendarMonths(this._activeDate, -1);\n break;\n case PAGE_DOWN:\n this.activeDate = event.altKey ?\n this._dateAdapter.addCalendarYears(this._activeDate, 1) :\n this._dateAdapter.addCalendarMonths(this._activeDate, 1);\n break;\n case ENTER:\n case SPACE:\n if (!this.dateFilter || this.dateFilter(this._activeDate)) {\n this._dateSelected({ value: this._dateAdapter.getDate(this._activeDate), event });\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n return;\n case ESCAPE:\n // Abort the current range selection if the user presses escape mid-selection.\n if (this._previewEnd != null) {\n this._previewStart = this._previewEnd = null;\n this.selectedChange.emit(null);\n this._userSelection.emit({ value: null, event });\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n /** Initializes this month view. */\n _init() {\n this._setRanges(this.selected);\n this._todayDate = this._getCellCompareValue(this._dateAdapter.today());\n this._monthLabel =\n this._dateAdapter.getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)]\n .toLocaleUpperCase();\n let firstOfMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), 1);\n this._firstWeekOffset =\n (DAYS_PER_WEEK + this._dateAdapter.getDayOfWeek(firstOfMonth) -\n this._dateAdapter.getFirstDayOfWeek()) % DAYS_PER_WEEK;\n this._initWeekdays();\n this._createWeekCells();\n this._changeDetectorRef.markForCheck();\n }\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell(movePreview) {\n this._matCalendarBody._focusActiveCell(movePreview);\n }\n /** Called when the user has activated a new cell and the preview needs to be updated. */\n _previewChanged({ event, value: cell }) {\n if (this._rangeStrategy) {\n // We can assume that this will be a range, because preview\n // events aren't fired for single date selections.\n const value = cell ? cell.rawValue : null;\n const previewRange = this._rangeStrategy.createPreview(value, this.selected, event);\n this._previewStart = this._getCellCompareValue(previewRange.start);\n this._previewEnd = this._getCellCompareValue(previewRange.end);\n // Note that here we need to use `detectChanges`, rather than `markForCheck`, because\n // the way `_focusActiveCell` is set up at the moment makes it fire at the wrong time\n // when navigating one month back using the keyboard which will cause this handler\n // to throw a \"changed after checked\" error when updating the preview state.\n this._changeDetectorRef.detectChanges();\n }\n }\n /** Initializes the weekdays. */\n _initWeekdays() {\n const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\n const narrowWeekdays = this._dateAdapter.getDayOfWeekNames('narrow');\n const longWeekdays = this._dateAdapter.getDayOfWeekNames('long');\n // Rotate the labels for days of the week based on the configured first day of the week.\n let weekdays = longWeekdays.map((long, i) => {\n return { long, narrow: narrowWeekdays[i] };\n });\n this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n }\n /** Creates MatCalendarCells for the dates in this month. */\n _createWeekCells() {\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\n const dateNames = this._dateAdapter.getDateNames();\n this._weeks = [[]];\n for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell == DAYS_PER_WEEK) {\n this._weeks.push([]);\n cell = 0;\n }\n const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), i + 1);\n const enabled = this._shouldEnableDate(date);\n const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);\n const cellClasses = this.dateClass ? this.dateClass(date) : undefined;\n this._weeks[this._weeks.length - 1].push(new MatCalendarCell(i + 1, dateNames[i], ariaLabel, enabled, cellClasses, this._getCellCompareValue(date), date));\n }\n }\n /** Date filter for the month */\n _shouldEnableDate(date) {\n return !!date &&\n (!this.minDate || this._dateAdapter.compareDate(date, this.minDate) >= 0) &&\n (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate) <= 0) &&\n (!this.dateFilter || this.dateFilter(date));\n }\n /**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n */\n _getDateInCurrentMonth(date) {\n return date && this._hasSameMonthAndYear(date, this.activeDate) ?\n this._dateAdapter.getDate(date) : null;\n }\n /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n _hasSameMonthAndYear(d1, d2) {\n return !!(d1 && d2 && this._dateAdapter.getMonth(d1) == this._dateAdapter.getMonth(d2) &&\n this._dateAdapter.getYear(d1) == this._dateAdapter.getYear(d2));\n }\n /** Gets the value that will be used to one cell to another. */\n _getCellCompareValue(date) {\n if (date) {\n // We use the time since the Unix epoch to compare dates in this view, rather than the\n // cell values, because we need to support ranges that span across multiple months/years.\n const year = this._dateAdapter.getYear(date);\n const month = this._dateAdapter.getMonth(date);\n const day = this._dateAdapter.getDate(date);\n return new Date(year, month, day).getTime();\n }\n return null;\n }\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n _getValidDateOrNull(obj) {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n /** Determines whether the user has the RTL layout direction. */\n _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n /** Sets the current range based on a model value. */\n _setRanges(selectedValue) {\n if (selectedValue instanceof DateRange) {\n this._rangeStart = this._getCellCompareValue(selectedValue.start);\n this._rangeEnd = this._getCellCompareValue(selectedValue.end);\n this._isRange = true;\n }\n else {\n this._rangeStart = this._rangeEnd = this._getCellCompareValue(selectedValue);\n this._isRange = false;\n }\n this._comparisonRangeStart = this._getCellCompareValue(this.comparisonStart);\n this._comparisonRangeEnd = this._getCellCompareValue(this.comparisonEnd);\n }\n}\nMatMonthView.ɵfac = function MatMonthView_Factory(t) { return new (t || MatMonthView)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_RANGE_SELECTION_STRATEGY, 8)); };\nMatMonthView.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatMonthView, selectors: [[\"mat-month-view\"]], viewQuery: function MatMonthView_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatCalendarBody, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._matCalendarBody = _t.first);\n } }, inputs: { activeDate: \"activeDate\", selected: \"selected\", minDate: \"minDate\", maxDate: \"maxDate\", dateFilter: \"dateFilter\", dateClass: \"dateClass\", comparisonStart: \"comparisonStart\", comparisonEnd: \"comparisonEnd\" }, outputs: { selectedChange: \"selectedChange\", _userSelection: \"_userSelection\", activeDateChange: \"activeDateChange\" }, exportAs: [\"matMonthView\"], decls: 7, vars: 13, consts: [[\"role\", \"presentation\", 1, \"mat-calendar-table\"], [1, \"mat-calendar-table-header\"], [\"scope\", \"col\", 4, \"ngFor\", \"ngForOf\"], [\"colspan\", \"7\", \"aria-hidden\", \"true\", 1, \"mat-calendar-table-header-divider\"], [\"mat-calendar-body\", \"\", 3, \"label\", \"rows\", \"todayValue\", \"startValue\", \"endValue\", \"comparisonStart\", \"comparisonEnd\", \"previewStart\", \"previewEnd\", \"isRange\", \"labelMinRequiredCells\", \"activeCell\", \"selectedValueChange\", \"previewChange\", \"keydown\"], [\"scope\", \"col\"]], template: function MatMonthView_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"table\", 0);\n ɵngcc0.ɵɵelementStart(1, \"thead\", 1);\n ɵngcc0.ɵɵelementStart(2, \"tr\");\n ɵngcc0.ɵɵtemplate(3, MatMonthView_th_3_Template, 2, 2, \"th\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"tr\");\n ɵngcc0.ɵɵelement(5, \"th\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"tbody\", 4);\n ɵngcc0.ɵɵlistener(\"selectedValueChange\", function MatMonthView_Template_tbody_selectedValueChange_6_listener($event) { return ctx._dateSelected($event); })(\"previewChange\", function MatMonthView_Template_tbody_previewChange_6_listener($event) { return ctx._previewChanged($event); })(\"keydown\", function MatMonthView_Template_tbody_keydown_6_listener($event) { return ctx._handleCalendarBodyKeydown($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx._weekdays);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"label\", ctx._monthLabel)(\"rows\", ctx._weeks)(\"todayValue\", ctx._todayDate)(\"startValue\", ctx._rangeStart)(\"endValue\", ctx._rangeEnd)(\"comparisonStart\", ctx._comparisonRangeStart)(\"comparisonEnd\", ctx._comparisonRangeEnd)(\"previewStart\", ctx._previewStart)(\"previewEnd\", ctx._previewEnd)(\"isRange\", ctx._isRange)(\"labelMinRequiredCells\", 3)(\"activeCell\", ctx._dateAdapter.getDate(ctx.activeDate) - 1);\n } }, directives: [ɵngcc1.NgForOf, MatCalendarBody], encapsulation: 2, changeDetection: 0 });\nMatMonthView.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_DATE_RANGE_SELECTION_STRATEGY,] }, { type: Optional }] }\n];\nMatMonthView.propDecorators = {\n activeDate: [{ type: Input }],\n selected: [{ type: Input }],\n minDate: [{ type: Input }],\n maxDate: [{ type: Input }],\n dateFilter: [{ type: Input }],\n dateClass: [{ type: Input }],\n comparisonStart: [{ type: Input }],\n comparisonEnd: [{ type: Input }],\n selectedChange: [{ type: Output }],\n _userSelection: [{ type: Output }],\n activeDateChange: [{ type: Output }],\n _matCalendarBody: [{ type: ViewChild, args: [MatCalendarBody,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatMonthView, [{\n type: Component,\n args: [{\n selector: 'mat-month-view',\n template: \"<table class=\\\"mat-calendar-table\\\" role=\\\"presentation\\\">\\n <thead class=\\\"mat-calendar-table-header\\\">\\n <tr>\\n <th scope=\\\"col\\\" *ngFor=\\\"let day of _weekdays\\\" [attr.aria-label]=\\\"day.long\\\">{{day.narrow}}</th>\\n </tr>\\n <tr><th class=\\\"mat-calendar-table-header-divider\\\" colspan=\\\"7\\\" aria-hidden=\\\"true\\\"></th></tr>\\n </thead>\\n <tbody mat-calendar-body\\n [label]=\\\"_monthLabel\\\"\\n [rows]=\\\"_weeks\\\"\\n [todayValue]=\\\"_todayDate!\\\"\\n [startValue]=\\\"_rangeStart!\\\"\\n [endValue]=\\\"_rangeEnd!\\\"\\n [comparisonStart]=\\\"_comparisonRangeStart\\\"\\n [comparisonEnd]=\\\"_comparisonRangeEnd\\\"\\n [previewStart]=\\\"_previewStart\\\"\\n [previewEnd]=\\\"_previewEnd\\\"\\n [isRange]=\\\"_isRange\\\"\\n [labelMinRequiredCells]=\\\"3\\\"\\n [activeCell]=\\\"_dateAdapter.getDate(activeDate) - 1\\\"\\n (selectedValueChange)=\\\"_dateSelected($event)\\\"\\n (previewChange)=\\\"_previewChanged($event)\\\"\\n (keydown)=\\\"_handleCalendarBodyKeydown($event)\\\">\\n </tbody>\\n</table>\\n\",\n exportAs: 'matMonthView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: ɵngcc3.Directionality, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DATE_RANGE_SELECTION_STRATEGY]\n }, {\n type: Optional\n }] }]; }, { selectedChange: [{\n type: Output\n }], _userSelection: [{\n type: Output\n }], activeDateChange: [{\n type: Output\n }], activeDate: [{\n type: Input\n }], selected: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], dateClass: [{\n type: Input\n }], comparisonStart: [{\n type: Input\n }], comparisonEnd: [{\n type: Input\n }], _matCalendarBody: [{\n type: ViewChild,\n args: [MatCalendarBody]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst yearsPerPage = 24;\nconst yearsPerRow = 4;\n/**\n * An internal component used to display a year selector in the datepicker.\n * @docs-private\n */\nclass MatMultiYearView {\n constructor(_changeDetectorRef, _dateAdapter, _dir) {\n this._changeDetectorRef = _changeDetectorRef;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._rerenderSubscription = Subscription.EMPTY;\n /** Emits when a new year is selected. */\n this.selectedChange = new EventEmitter();\n /** Emits the selected year. This doesn't imply a change on the selected date */\n this.yearSelected = new EventEmitter();\n /** Emits when any date is activated. */\n this.activeDateChange = new EventEmitter();\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n this._activeDate = this._dateAdapter.today();\n }\n /** The date to display in this multi-year view (everything other than the year is ignored). */\n get activeDate() { return this._activeDate; }\n set activeDate(value) {\n let oldActiveDate = this._activeDate;\n const validDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (!isSameMultiYearView(this._dateAdapter, oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {\n this._init();\n }\n }\n /** The currently selected date. */\n get selected() { return this._selected; }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n }\n else {\n this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n this._setSelectedYear(value);\n }\n /** The minimum selectable date. */\n get minDate() { return this._minDate; }\n set minDate(value) {\n this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() { return this._maxDate; }\n set maxDate(value) {\n this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges\n .pipe(startWith(null))\n .subscribe(() => this._init());\n }\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n /** Initializes this multi-year view. */\n _init() {\n this._todayYear = this._dateAdapter.getYear(this._dateAdapter.today());\n // We want a range years such that we maximize the number of\n // enabled dates visible at once. This prevents issues where the minimum year\n // is the last item of a page OR the maximum year is the first item of a page.\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view.\n const activeYear = this._dateAdapter.getYear(this._activeDate);\n const minYearOfPage = activeYear - getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n this._years = [];\n for (let i = 0, row = []; i < yearsPerPage; i++) {\n row.push(minYearOfPage + i);\n if (row.length == yearsPerRow) {\n this._years.push(row.map(year => this._createCellForYear(year)));\n row = [];\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /** Handles when a new year is selected. */\n _yearSelected(event) {\n const year = event.value;\n this.yearSelected.emit(this._dateAdapter.createDate(year, 0, 1));\n let month = this._dateAdapter.getMonth(this.activeDate);\n let daysInMonth = this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(year, month, 1));\n this.selectedChange.emit(this._dateAdapter.createDate(year, month, Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n }\n /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n _handleCalendarBodyKeydown(event) {\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -yearsPerRow);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerRow);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerPage - getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate) - 1);\n break;\n case PAGE_UP:\n this.activeDate =\n this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -yearsPerPage * 10 : -yearsPerPage);\n break;\n case PAGE_DOWN:\n this.activeDate =\n this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? yearsPerPage * 10 : yearsPerPage);\n break;\n case ENTER:\n case SPACE:\n this._yearSelected({ value: this._dateAdapter.getYear(this._activeDate), event });\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n _getActiveCell() {\n return getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n }\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n /** Creates an MatCalendarCell for the given year. */\n _createCellForYear(year) {\n let yearName = this._dateAdapter.getYearName(this._dateAdapter.createDate(year, 0, 1));\n return new MatCalendarCell(year, yearName, yearName, this._shouldEnableYear(year));\n }\n /** Whether the given year is enabled. */\n _shouldEnableYear(year) {\n // disable if the year is greater than maxDate lower than minDate\n if (year === undefined || year === null ||\n (this.maxDate && year > this._dateAdapter.getYear(this.maxDate)) ||\n (this.minDate && year < this._dateAdapter.getYear(this.minDate))) {\n return false;\n }\n // enable if it reaches here and there's no filter defined\n if (!this.dateFilter) {\n return true;\n }\n const firstOfYear = this._dateAdapter.createDate(year, 0, 1);\n // If any date in the year is enabled count the year as enabled.\n for (let date = firstOfYear; this._dateAdapter.getYear(date) == year; date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n return false;\n }\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n _getValidDateOrNull(obj) {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n /** Determines whether the user has the RTL layout direction. */\n _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n /** Sets the currently-highlighted year based on a model value. */\n _setSelectedYear(value) {\n this._selectedYear = null;\n if (value instanceof DateRange) {\n const displayValue = value.start || value.end;\n if (displayValue) {\n this._selectedYear = this._dateAdapter.getYear(displayValue);\n }\n }\n else if (value) {\n this._selectedYear = this._dateAdapter.getYear(value);\n }\n }\n}\nMatMultiYearView.ɵfac = function MatMultiYearView_Factory(t) { return new (t || MatMultiYearView)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Directionality, 8)); };\nMatMultiYearView.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatMultiYearView, selectors: [[\"mat-multi-year-view\"]], viewQuery: function MatMultiYearView_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatCalendarBody, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._matCalendarBody = _t.first);\n } }, inputs: { activeDate: \"activeDate\", selected: \"selected\", minDate: \"minDate\", maxDate: \"maxDate\", dateFilter: \"dateFilter\" }, outputs: { selectedChange: \"selectedChange\", yearSelected: \"yearSelected\", activeDateChange: \"activeDateChange\" }, exportAs: [\"matMultiYearView\"], decls: 5, vars: 7, consts: [[\"role\", \"presentation\", 1, \"mat-calendar-table\"], [1, \"mat-calendar-table-header\"], [\"colspan\", \"4\", 1, \"mat-calendar-table-header-divider\"], [\"mat-calendar-body\", \"\", 3, \"rows\", \"todayValue\", \"startValue\", \"endValue\", \"numCols\", \"cellAspectRatio\", \"activeCell\", \"selectedValueChange\", \"keydown\"]], template: function MatMultiYearView_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"table\", 0);\n ɵngcc0.ɵɵelementStart(1, \"thead\", 1);\n ɵngcc0.ɵɵelementStart(2, \"tr\");\n ɵngcc0.ɵɵelement(3, \"th\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"tbody\", 3);\n ɵngcc0.ɵɵlistener(\"selectedValueChange\", function MatMultiYearView_Template_tbody_selectedValueChange_4_listener($event) { return ctx._yearSelected($event); })(\"keydown\", function MatMultiYearView_Template_tbody_keydown_4_listener($event) { return ctx._handleCalendarBodyKeydown($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"rows\", ctx._years)(\"todayValue\", ctx._todayYear)(\"startValue\", ctx._selectedYear)(\"endValue\", ctx._selectedYear)(\"numCols\", 4)(\"cellAspectRatio\", 4 / 7)(\"activeCell\", ctx._getActiveCell());\n } }, directives: [MatCalendarBody], encapsulation: 2, changeDetection: 0 });\nMatMultiYearView.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: Directionality, decorators: [{ type: Optional }] }\n];\nMatMultiYearView.propDecorators = {\n activeDate: [{ type: Input }],\n selected: [{ type: Input }],\n minDate: [{ type: Input }],\n maxDate: [{ type: Input }],\n dateFilter: [{ type: Input }],\n selectedChange: [{ type: Output }],\n yearSelected: [{ type: Output }],\n activeDateChange: [{ type: Output }],\n _matCalendarBody: [{ type: ViewChild, args: [MatCalendarBody,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatMultiYearView, [{\n type: Component,\n args: [{\n selector: 'mat-multi-year-view',\n template: \"<table class=\\\"mat-calendar-table\\\" role=\\\"presentation\\\">\\n <thead class=\\\"mat-calendar-table-header\\\">\\n <tr><th class=\\\"mat-calendar-table-header-divider\\\" colspan=\\\"4\\\"></th></tr>\\n </thead>\\n <tbody mat-calendar-body\\n [rows]=\\\"_years\\\"\\n [todayValue]=\\\"_todayYear\\\"\\n [startValue]=\\\"_selectedYear!\\\"\\n [endValue]=\\\"_selectedYear!\\\"\\n [numCols]=\\\"4\\\"\\n [cellAspectRatio]=\\\"4 / 7\\\"\\n [activeCell]=\\\"_getActiveCell()\\\"\\n (selectedValueChange)=\\\"_yearSelected($event)\\\"\\n (keydown)=\\\"_handleCalendarBodyKeydown($event)\\\">\\n </tbody>\\n</table>\\n\",\n exportAs: 'matMultiYearView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: ɵngcc3.Directionality, decorators: [{\n type: Optional\n }] }]; }, { selectedChange: [{\n type: Output\n }], yearSelected: [{\n type: Output\n }], activeDateChange: [{\n type: Output\n }], activeDate: [{\n type: Input\n }], selected: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], _matCalendarBody: [{\n type: ViewChild,\n args: [MatCalendarBody]\n }] }); })();\nfunction isSameMultiYearView(dateAdapter, date1, date2, minDate, maxDate) {\n const year1 = dateAdapter.getYear(date1);\n const year2 = dateAdapter.getYear(date2);\n const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\n return Math.floor((year1 - startingYear) / yearsPerPage) ===\n Math.floor((year2 - startingYear) / yearsPerPage);\n}\n/**\n * When the multi-year view is first opened, the active year will be in view.\n * So we compute how many years are between the active year and the *slot* where our\n * \"startingYear\" will render when paged into view.\n */\nfunction getActiveOffset(dateAdapter, activeDate, minDate, maxDate) {\n const activeYear = dateAdapter.getYear(activeDate);\n return euclideanModulo((activeYear - getStartingYear(dateAdapter, minDate, maxDate)), yearsPerPage);\n}\n/**\n * We pick a \"starting\" year such that either the maximum year would be at the end\n * or the minimum year would be at the beginning of a page.\n */\nfunction getStartingYear(dateAdapter, minDate, maxDate) {\n let startingYear = 0;\n if (maxDate) {\n const maxYear = dateAdapter.getYear(maxDate);\n startingYear = maxYear - yearsPerPage + 1;\n }\n else if (minDate) {\n startingYear = dateAdapter.getYear(minDate);\n }\n return startingYear;\n}\n/** Gets remainder that is non-negative, even if first number is negative */\nfunction euclideanModulo(a, b) {\n return (a % b + b) % b;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * An internal component used to display a single year in the datepicker.\n * @docs-private\n */\nclass MatYearView {\n constructor(_changeDetectorRef, _dateFormats, _dateAdapter, _dir) {\n this._changeDetectorRef = _changeDetectorRef;\n this._dateFormats = _dateFormats;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._rerenderSubscription = Subscription.EMPTY;\n /** Emits when a new month is selected. */\n this.selectedChange = new EventEmitter();\n /** Emits the selected month. This doesn't imply a change on the selected date */\n this.monthSelected = new EventEmitter();\n /** Emits when any date is activated. */\n this.activeDateChange = new EventEmitter();\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n this._activeDate = this._dateAdapter.today();\n }\n /** The date to display in this year view (everything other than the year is ignored). */\n get activeDate() { return this._activeDate; }\n set activeDate(value) {\n let oldActiveDate = this._activeDate;\n const validDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (this._dateAdapter.getYear(oldActiveDate) !== this._dateAdapter.getYear(this._activeDate)) {\n this._init();\n }\n }\n /** The currently selected date. */\n get selected() { return this._selected; }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n }\n else {\n this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n this._setSelectedMonth(value);\n }\n /** The minimum selectable date. */\n get minDate() { return this._minDate; }\n set minDate(value) {\n this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() { return this._maxDate; }\n set maxDate(value) {\n this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges\n .pipe(startWith(null))\n .subscribe(() => this._init());\n }\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n /** Handles when a new month is selected. */\n _monthSelected(event) {\n const month = event.value;\n const normalizedDate = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n this.monthSelected.emit(normalizedDate);\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(normalizedDate);\n this.selectedChange.emit(this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n }\n /** Handles keydown events on the calendar body when calendar is in year view. */\n _handleCalendarBodyKeydown(event) {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -4);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 4);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -this._dateAdapter.getMonth(this._activeDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 11 - this._dateAdapter.getMonth(this._activeDate));\n break;\n case PAGE_UP:\n this.activeDate =\n this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\n break;\n case PAGE_DOWN:\n this.activeDate =\n this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n break;\n case ENTER:\n case SPACE:\n this._monthSelected({ value: this._dateAdapter.getMonth(this._activeDate), event });\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n /** Initializes this year view. */\n _init() {\n this._setSelectedMonth(this.selected);\n this._todayMonth = this._getMonthInCurrentYear(this._dateAdapter.today());\n this._yearLabel = this._dateAdapter.getYearName(this.activeDate);\n let monthNames = this._dateAdapter.getMonthNames('short');\n // First row of months only contains 5 elements so we can fit the year label on the same row.\n this._months = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]].map(row => row.map(month => this._createCellForMonth(month, monthNames[month])));\n this._changeDetectorRef.markForCheck();\n }\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n /**\n * Gets the month in this year that the given Date falls on.\n * Returns null if the given Date is in another year.\n */\n _getMonthInCurrentYear(date) {\n return date && this._dateAdapter.getYear(date) == this._dateAdapter.getYear(this.activeDate) ?\n this._dateAdapter.getMonth(date) : null;\n }\n /** Creates an MatCalendarCell for the given month. */\n _createCellForMonth(month, monthName) {\n let ariaLabel = this._dateAdapter.format(this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1), this._dateFormats.display.monthYearA11yLabel);\n return new MatCalendarCell(month, monthName.toLocaleUpperCase(), ariaLabel, this._shouldEnableMonth(month));\n }\n /** Whether the given month is enabled. */\n _shouldEnableMonth(month) {\n const activeYear = this._dateAdapter.getYear(this.activeDate);\n if (month === undefined || month === null ||\n this._isYearAndMonthAfterMaxDate(activeYear, month) ||\n this._isYearAndMonthBeforeMinDate(activeYear, month)) {\n return false;\n }\n if (!this.dateFilter) {\n return true;\n }\n const firstOfMonth = this._dateAdapter.createDate(activeYear, month, 1);\n // If any date in the month is enabled count the month as enabled.\n for (let date = firstOfMonth; this._dateAdapter.getMonth(date) == month; date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Tests whether the combination month/year is after this.maxDate, considering\n * just the month and year of this.maxDate\n */\n _isYearAndMonthAfterMaxDate(year, month) {\n if (this.maxDate) {\n const maxYear = this._dateAdapter.getYear(this.maxDate);\n const maxMonth = this._dateAdapter.getMonth(this.maxDate);\n return year > maxYear || (year === maxYear && month > maxMonth);\n }\n return false;\n }\n /**\n * Tests whether the combination month/year is before this.minDate, considering\n * just the month and year of this.minDate\n */\n _isYearAndMonthBeforeMinDate(year, month) {\n if (this.minDate) {\n const minYear = this._dateAdapter.getYear(this.minDate);\n const minMonth = this._dateAdapter.getMonth(this.minDate);\n return year < minYear || (year === minYear && month < minMonth);\n }\n return false;\n }\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n _getValidDateOrNull(obj) {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n /** Determines whether the user has the RTL layout direction. */\n _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n /** Sets the currently-selected month based on a model value. */\n _setSelectedMonth(value) {\n if (value instanceof DateRange) {\n this._selectedMonth = this._getMonthInCurrentYear(value.start) ||\n this._getMonthInCurrentYear(value.end);\n }\n else {\n this._selectedMonth = this._getMonthInCurrentYear(value);\n }\n }\n}\nMatYearView.ɵfac = function MatYearView_Factory(t) { return new (t || MatYearView)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Directionality, 8)); };\nMatYearView.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatYearView, selectors: [[\"mat-year-view\"]], viewQuery: function MatYearView_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatCalendarBody, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._matCalendarBody = _t.first);\n } }, inputs: { activeDate: \"activeDate\", selected: \"selected\", minDate: \"minDate\", maxDate: \"maxDate\", dateFilter: \"dateFilter\" }, outputs: { selectedChange: \"selectedChange\", monthSelected: \"monthSelected\", activeDateChange: \"activeDateChange\" }, exportAs: [\"matYearView\"], decls: 5, vars: 9, consts: [[\"role\", \"presentation\", 1, \"mat-calendar-table\"], [1, \"mat-calendar-table-header\"], [\"colspan\", \"4\", 1, \"mat-calendar-table-header-divider\"], [\"mat-calendar-body\", \"\", 3, \"label\", \"rows\", \"todayValue\", \"startValue\", \"endValue\", \"labelMinRequiredCells\", \"numCols\", \"cellAspectRatio\", \"activeCell\", \"selectedValueChange\", \"keydown\"]], template: function MatYearView_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"table\", 0);\n ɵngcc0.ɵɵelementStart(1, \"thead\", 1);\n ɵngcc0.ɵɵelementStart(2, \"tr\");\n ɵngcc0.ɵɵelement(3, \"th\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"tbody\", 3);\n ɵngcc0.ɵɵlistener(\"selectedValueChange\", function MatYearView_Template_tbody_selectedValueChange_4_listener($event) { return ctx._monthSelected($event); })(\"keydown\", function MatYearView_Template_tbody_keydown_4_listener($event) { return ctx._handleCalendarBodyKeydown($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"label\", ctx._yearLabel)(\"rows\", ctx._months)(\"todayValue\", ctx._todayMonth)(\"startValue\", ctx._selectedMonth)(\"endValue\", ctx._selectedMonth)(\"labelMinRequiredCells\", 2)(\"numCols\", 4)(\"cellAspectRatio\", 4 / 7)(\"activeCell\", ctx._dateAdapter.getMonth(ctx.activeDate));\n } }, directives: [MatCalendarBody], encapsulation: 2, changeDetection: 0 });\nMatYearView.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: Directionality, decorators: [{ type: Optional }] }\n];\nMatYearView.propDecorators = {\n activeDate: [{ type: Input }],\n selected: [{ type: Input }],\n minDate: [{ type: Input }],\n maxDate: [{ type: Input }],\n dateFilter: [{ type: Input }],\n selectedChange: [{ type: Output }],\n monthSelected: [{ type: Output }],\n activeDateChange: [{ type: Output }],\n _matCalendarBody: [{ type: ViewChild, args: [MatCalendarBody,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatYearView, [{\n type: Component,\n args: [{\n selector: 'mat-year-view',\n template: \"<table class=\\\"mat-calendar-table\\\" role=\\\"presentation\\\">\\n <thead class=\\\"mat-calendar-table-header\\\">\\n <tr><th class=\\\"mat-calendar-table-header-divider\\\" colspan=\\\"4\\\"></th></tr>\\n </thead>\\n <tbody mat-calendar-body\\n [label]=\\\"_yearLabel\\\"\\n [rows]=\\\"_months\\\"\\n [todayValue]=\\\"_todayMonth!\\\"\\n [startValue]=\\\"_selectedMonth!\\\"\\n [endValue]=\\\"_selectedMonth!\\\"\\n [labelMinRequiredCells]=\\\"2\\\"\\n [numCols]=\\\"4\\\"\\n [cellAspectRatio]=\\\"4 / 7\\\"\\n [activeCell]=\\\"_dateAdapter.getMonth(activeDate)\\\"\\n (selectedValueChange)=\\\"_monthSelected($event)\\\"\\n (keydown)=\\\"_handleCalendarBodyKeydown($event)\\\">\\n </tbody>\\n</table>\\n\",\n exportAs: 'matYearView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: ɵngcc3.Directionality, decorators: [{\n type: Optional\n }] }]; }, { selectedChange: [{\n type: Output\n }], monthSelected: [{\n type: Output\n }], activeDateChange: [{\n type: Output\n }], activeDate: [{\n type: Input\n }], selected: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], _matCalendarBody: [{\n type: ViewChild,\n args: [MatCalendarBody]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Default header for MatCalendar */\nclass MatCalendarHeader {\n constructor(_intl, calendar, _dateAdapter, _dateFormats, changeDetectorRef) {\n this._intl = _intl;\n this.calendar = calendar;\n this._dateAdapter = _dateAdapter;\n this._dateFormats = _dateFormats;\n this.calendar.stateChanges.subscribe(() => changeDetectorRef.markForCheck());\n }\n /** The label for the current calendar view. */\n get periodButtonText() {\n if (this.calendar.currentView == 'month') {\n return this._dateAdapter\n .format(this.calendar.activeDate, this._dateFormats.display.monthYearLabel)\n .toLocaleUpperCase();\n }\n if (this.calendar.currentView == 'year') {\n return this._dateAdapter.getYearName(this.calendar.activeDate);\n }\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view, and the last year is\n // just yearsPerPage - 1 away.\n const activeYear = this._dateAdapter.getYear(this.calendar.activeDate);\n const minYearOfPage = activeYear - getActiveOffset(this._dateAdapter, this.calendar.activeDate, this.calendar.minDate, this.calendar.maxDate);\n const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\n const minYearName = this._dateAdapter.getYearName(this._dateAdapter.createDate(minYearOfPage, 0, 1));\n const maxYearName = this._dateAdapter.getYearName(this._dateAdapter.createDate(maxYearOfPage, 0, 1));\n return this._intl.formatYearRange(minYearName, maxYearName);\n }\n get periodButtonLabel() {\n return this.calendar.currentView == 'month' ?\n this._intl.switchToMultiYearViewLabel : this._intl.switchToMonthViewLabel;\n }\n /** The label for the previous button. */\n get prevButtonLabel() {\n return {\n 'month': this._intl.prevMonthLabel,\n 'year': this._intl.prevYearLabel,\n 'multi-year': this._intl.prevMultiYearLabel\n }[this.calendar.currentView];\n }\n /** The label for the next button. */\n get nextButtonLabel() {\n return {\n 'month': this._intl.nextMonthLabel,\n 'year': this._intl.nextYearLabel,\n 'multi-year': this._intl.nextMultiYearLabel\n }[this.calendar.currentView];\n }\n /** Handles user clicks on the period label. */\n currentPeriodClicked() {\n this.calendar.currentView = this.calendar.currentView == 'month' ? 'multi-year' : 'month';\n }\n /** Handles user clicks on the previous button. */\n previousClicked() {\n this.calendar.activeDate = this.calendar.currentView == 'month' ?\n this._dateAdapter.addCalendarMonths(this.calendar.activeDate, -1) :\n this._dateAdapter.addCalendarYears(this.calendar.activeDate, this.calendar.currentView == 'year' ? -1 : -yearsPerPage);\n }\n /** Handles user clicks on the next button. */\n nextClicked() {\n this.calendar.activeDate = this.calendar.currentView == 'month' ?\n this._dateAdapter.addCalendarMonths(this.calendar.activeDate, 1) :\n this._dateAdapter.addCalendarYears(this.calendar.activeDate, this.calendar.currentView == 'year' ? 1 : yearsPerPage);\n }\n /** Whether the previous period button is enabled. */\n previousEnabled() {\n if (!this.calendar.minDate) {\n return true;\n }\n return !this.calendar.minDate ||\n !this._isSameView(this.calendar.activeDate, this.calendar.minDate);\n }\n /** Whether the next period button is enabled. */\n nextEnabled() {\n return !this.calendar.maxDate ||\n !this._isSameView(this.calendar.activeDate, this.calendar.maxDate);\n }\n /** Whether the two dates represent the same view in the current view mode (month or year). */\n _isSameView(date1, date2) {\n if (this.calendar.currentView == 'month') {\n return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2) &&\n this._dateAdapter.getMonth(date1) == this._dateAdapter.getMonth(date2);\n }\n if (this.calendar.currentView == 'year') {\n return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2);\n }\n // Otherwise we are in 'multi-year' view.\n return isSameMultiYearView(this._dateAdapter, date1, date2, this.calendar.minDate, this.calendar.maxDate);\n }\n}\nMatCalendarHeader.ɵfac = function MatCalendarHeader_Factory(t) { return new (t || MatCalendarHeader)(ɵngcc0.ɵɵdirectiveInject(MatDatepickerIntl), ɵngcc0.ɵɵdirectiveInject(forwardRef(() => MatCalendar)), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nMatCalendarHeader.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatCalendarHeader, selectors: [[\"mat-calendar-header\"]], exportAs: [\"matCalendarHeader\"], ngContentSelectors: _c1, decls: 9, vars: 8, consts: [[1, \"mat-calendar-header\"], [1, \"mat-calendar-controls\"], [\"mat-button\", \"\", \"type\", \"button\", \"cdkAriaLive\", \"polite\", 1, \"mat-calendar-period-button\", 3, \"click\"], [1, \"mat-calendar-arrow\"], [1, \"mat-calendar-spacer\"], [\"mat-icon-button\", \"\", \"type\", \"button\", 1, \"mat-calendar-previous-button\", 3, \"disabled\", \"click\"], [\"mat-icon-button\", \"\", \"type\", \"button\", 1, \"mat-calendar-next-button\", 3, \"disabled\", \"click\"]], template: function MatCalendarHeader_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1);\n ɵngcc0.ɵɵelementStart(2, \"button\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function MatCalendarHeader_Template_button_click_2_listener() { return ctx.currentPeriodClicked(); });\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelement(4, \"div\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(5, \"div\", 4);\n ɵngcc0.ɵɵprojection(6);\n ɵngcc0.ɵɵelementStart(7, \"button\", 5);\n ɵngcc0.ɵɵlistener(\"click\", function MatCalendarHeader_Template_button_click_7_listener() { return ctx.previousClicked(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(8, \"button\", 6);\n ɵngcc0.ɵɵlistener(\"click\", function MatCalendarHeader_Template_button_click_8_listener() { return ctx.nextClicked(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.periodButtonLabel);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.periodButtonText, \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"mat-calendar-invert\", ctx.calendar.currentView != \"month\");\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"disabled\", !ctx.previousEnabled());\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.prevButtonLabel);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", !ctx.nextEnabled());\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.nextButtonLabel);\n } }, directives: [ɵngcc4.MatButton, ɵngcc5.CdkAriaLive], encapsulation: 2, changeDetection: 0 });\nMatCalendarHeader.ctorParameters = () => [\n { type: MatDatepickerIntl },\n { type: MatCalendar, decorators: [{ type: Inject, args: [forwardRef(() => MatCalendar),] }] },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCalendarHeader, [{\n type: Component,\n args: [{\n selector: 'mat-calendar-header',\n template: \"<div class=\\\"mat-calendar-header\\\">\\n <div class=\\\"mat-calendar-controls\\\">\\n <button mat-button type=\\\"button\\\" class=\\\"mat-calendar-period-button\\\"\\n (click)=\\\"currentPeriodClicked()\\\" [attr.aria-label]=\\\"periodButtonLabel\\\"\\n cdkAriaLive=\\\"polite\\\">\\n {{periodButtonText}}\\n <div class=\\\"mat-calendar-arrow\\\"\\n [class.mat-calendar-invert]=\\\"calendar.currentView != 'month'\\\"></div>\\n </button>\\n\\n <div class=\\\"mat-calendar-spacer\\\"></div>\\n\\n <ng-content></ng-content>\\n\\n <button mat-icon-button type=\\\"button\\\" class=\\\"mat-calendar-previous-button\\\"\\n [disabled]=\\\"!previousEnabled()\\\" (click)=\\\"previousClicked()\\\"\\n [attr.aria-label]=\\\"prevButtonLabel\\\">\\n </button>\\n\\n <button mat-icon-button type=\\\"button\\\" class=\\\"mat-calendar-next-button\\\"\\n [disabled]=\\\"!nextEnabled()\\\" (click)=\\\"nextClicked()\\\"\\n [attr.aria-label]=\\\"nextButtonLabel\\\">\\n </button>\\n </div>\\n</div>\\n\",\n exportAs: 'matCalendarHeader',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: MatDatepickerIntl }, { type: MatCalendar, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatCalendar)]\n }] }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n/**\n * A calendar that is used as part of the datepicker.\n * @docs-private\n */\nclass MatCalendar {\n constructor(_intl, _dateAdapter, _dateFormats, _changeDetectorRef) {\n this._dateAdapter = _dateAdapter;\n this._dateFormats = _dateFormats;\n this._changeDetectorRef = _changeDetectorRef;\n /**\n * Used for scheduling that focus should be moved to the active cell on the next tick.\n * We need to schedule it, rather than do it immediately, because we have to wait\n * for Angular to re-evaluate the view children.\n */\n this._moveFocusOnNextTick = false;\n /** Whether the calendar should be started in month or year view. */\n this.startView = 'month';\n /**\n * Emits when the currently selected date changes.\n * @breaking-change 11.0.0 Emitted value to change to `D | null`.\n */\n this.selectedChange = new EventEmitter();\n /**\n * Emits the year chosen in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n this.yearSelected = new EventEmitter();\n /**\n * Emits the month chosen in year view.\n * This doesn't imply a change on the selected date.\n */\n this.monthSelected = new EventEmitter();\n /** Emits when any date is selected. */\n this._userSelection = new EventEmitter();\n /**\n * Emits whenever there is a state change that the header may need to respond to.\n */\n this.stateChanges = new Subject();\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n this._intlChanges = _intl.changes.subscribe(() => {\n _changeDetectorRef.markForCheck();\n this.stateChanges.next();\n });\n }\n /** A date representing the period (month or year) to start the calendar in. */\n get startAt() { return this._startAt; }\n set startAt(value) {\n this._startAt = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The currently selected date. */\n get selected() { return this._selected; }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n }\n else {\n this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n }\n /** The minimum selectable date. */\n get minDate() { return this._minDate; }\n set minDate(value) {\n this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() { return this._maxDate; }\n set maxDate(value) {\n this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /**\n * The current active date. This determines which time period is shown and which date is\n * highlighted when using keyboard navigation.\n */\n get activeDate() { return this._clampedActiveDate; }\n set activeDate(value) {\n this._clampedActiveDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\n this.stateChanges.next();\n this._changeDetectorRef.markForCheck();\n }\n /** Whether the calendar is in month view. */\n get currentView() { return this._currentView; }\n set currentView(value) {\n this._currentView = value;\n this._moveFocusOnNextTick = true;\n this._changeDetectorRef.markForCheck();\n }\n ngAfterContentInit() {\n this._calendarHeaderPortal = new ComponentPortal(this.headerComponent || MatCalendarHeader);\n this.activeDate = this.startAt || this._dateAdapter.today();\n // Assign to the private property since we don't want to move focus on init.\n this._currentView = this.startView;\n }\n ngAfterViewChecked() {\n if (this._moveFocusOnNextTick) {\n this._moveFocusOnNextTick = false;\n this.focusActiveCell();\n }\n }\n ngOnDestroy() {\n this._intlChanges.unsubscribe();\n this.stateChanges.complete();\n }\n ngOnChanges(changes) {\n const change = changes['minDate'] || changes['maxDate'] || changes['dateFilter'];\n if (change && !change.firstChange) {\n const view = this._getCurrentViewComponent();\n if (view) {\n // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n // passed down to the view via data bindings which won't be up-to-date when we call `_init`.\n this._changeDetectorRef.detectChanges();\n view._init();\n }\n }\n this.stateChanges.next();\n }\n focusActiveCell() {\n this._getCurrentViewComponent()._focusActiveCell(false);\n }\n /** Updates today's date after an update of the active date */\n updateTodaysDate() {\n const currentView = this.currentView;\n let view;\n if (currentView === 'month') {\n view = this.monthView;\n }\n else if (currentView === 'year') {\n view = this.yearView;\n }\n else {\n view = this.multiYearView;\n }\n view._init();\n }\n /** Handles date selection in the month view. */\n _dateSelected(event) {\n const date = event.value;\n if (this.selected instanceof DateRange ||\n (date && !this._dateAdapter.sameDate(date, this.selected))) {\n // @breaking-change 11.0.0 remove non-null assertion\n // once the `selectedChange` is allowed to be null.\n this.selectedChange.emit(date);\n }\n this._userSelection.emit(event);\n }\n /** Handles year selection in the multiyear view. */\n _yearSelectedInMultiYearView(normalizedYear) {\n this.yearSelected.emit(normalizedYear);\n }\n /** Handles month selection in the year view. */\n _monthSelectedInYearView(normalizedMonth) {\n this.monthSelected.emit(normalizedMonth);\n }\n /** Handles year/month selection in the multi-year/year views. */\n _goToDateInView(date, view) {\n this.activeDate = date;\n this.currentView = view;\n }\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n _getValidDateOrNull(obj) {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n /** Returns the component instance that corresponds to the current calendar view. */\n _getCurrentViewComponent() {\n return this.monthView || this.yearView || this.multiYearView;\n }\n}\nMatCalendar.ɵfac = function MatCalendar_Factory(t) { return new (t || MatCalendar)(ɵngcc0.ɵɵdirectiveInject(MatDatepickerIntl), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nMatCalendar.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatCalendar, selectors: [[\"mat-calendar\"]], viewQuery: function MatCalendar_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatMonthView, true);\n ɵngcc0.ɵɵviewQuery(MatYearView, true);\n ɵngcc0.ɵɵviewQuery(MatMultiYearView, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthView = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.yearView = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.multiYearView = _t.first);\n } }, hostAttrs: [1, \"mat-calendar\"], inputs: { startView: \"startView\", startAt: \"startAt\", selected: \"selected\", minDate: \"minDate\", maxDate: \"maxDate\", headerComponent: \"headerComponent\", dateFilter: \"dateFilter\", dateClass: \"dateClass\", comparisonStart: \"comparisonStart\", comparisonEnd: \"comparisonEnd\" }, outputs: { selectedChange: \"selectedChange\", yearSelected: \"yearSelected\", monthSelected: \"monthSelected\", _userSelection: \"_userSelection\" }, exportAs: [\"matCalendar\"], features: [ɵngcc0.ɵɵProvidersFeature([MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 5, vars: 5, consts: [[3, \"cdkPortalOutlet\"], [\"cdkMonitorSubtreeFocus\", \"\", \"tabindex\", \"-1\", 1, \"mat-calendar-content\", 3, \"ngSwitch\"], [3, \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"dateClass\", \"comparisonStart\", \"comparisonEnd\", \"activeDateChange\", \"_userSelection\", 4, \"ngSwitchCase\"], [3, \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"activeDateChange\", \"monthSelected\", \"selectedChange\", 4, \"ngSwitchCase\"], [3, \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"activeDateChange\", \"yearSelected\", \"selectedChange\", 4, \"ngSwitchCase\"], [3, \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"dateClass\", \"comparisonStart\", \"comparisonEnd\", \"activeDateChange\", \"_userSelection\"], [3, \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"activeDateChange\", \"monthSelected\", \"selectedChange\"], [3, \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"activeDateChange\", \"yearSelected\", \"selectedChange\"]], template: function MatCalendar_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MatCalendar_ng_template_0_Template, 0, 0, \"ng-template\", 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1);\n ɵngcc0.ɵɵtemplate(2, MatCalendar_mat_month_view_2_Template, 1, 8, \"mat-month-view\", 2);\n ɵngcc0.ɵɵtemplate(3, MatCalendar_mat_year_view_3_Template, 1, 5, \"mat-year-view\", 3);\n ɵngcc0.ɵɵtemplate(4, MatCalendar_mat_multi_year_view_4_Template, 1, 5, \"mat-multi-year-view\", 4);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"cdkPortalOutlet\", ctx._calendarHeaderPortal);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.currentView);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"month\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"year\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"multi-year\");\n } }, directives: [ɵngcc6.CdkPortalOutlet, ɵngcc5.CdkMonitorFocus, ɵngcc1.NgSwitch, ɵngcc1.NgSwitchCase, MatMonthView, MatYearView, MatMultiYearView], styles: [\".mat-calendar{display:block}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;margin:5% calc(33% / 7 - 16px)}.mat-calendar-controls .mat-icon-button:hover .mat-button-focus-overlay{opacity:.04}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0}.mat-calendar-arrow{display:inline-block;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top-width:5px;border-top-style:solid;margin:0 0 0 5px;vertical-align:middle}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\\\"\\\";position:absolute;top:0;left:-8px;right:-8px;height:1px}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatCalendar.ctorParameters = () => [\n { type: MatDatepickerIntl },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] },\n { type: ChangeDetectorRef }\n];\nMatCalendar.propDecorators = {\n headerComponent: [{ type: Input }],\n startAt: [{ type: Input }],\n startView: [{ type: Input }],\n selected: [{ type: Input }],\n minDate: [{ type: Input }],\n maxDate: [{ type: Input }],\n dateFilter: [{ type: Input }],\n dateClass: [{ type: Input }],\n comparisonStart: [{ type: Input }],\n comparisonEnd: [{ type: Input }],\n selectedChange: [{ type: Output }],\n yearSelected: [{ type: Output }],\n monthSelected: [{ type: Output }],\n _userSelection: [{ type: Output }],\n monthView: [{ type: ViewChild, args: [MatMonthView,] }],\n yearView: [{ type: ViewChild, args: [MatYearView,] }],\n multiYearView: [{ type: ViewChild, args: [MatMultiYearView,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCalendar, [{\n type: Component,\n args: [{\n selector: 'mat-calendar',\n template: \"<ng-template [cdkPortalOutlet]=\\\"_calendarHeaderPortal\\\"></ng-template>\\n\\n<div class=\\\"mat-calendar-content\\\" [ngSwitch]=\\\"currentView\\\" cdkMonitorSubtreeFocus tabindex=\\\"-1\\\">\\n <mat-month-view\\n *ngSwitchCase=\\\"'month'\\\"\\n [(activeDate)]=\\\"activeDate\\\"\\n [selected]=\\\"selected\\\"\\n [dateFilter]=\\\"dateFilter\\\"\\n [maxDate]=\\\"maxDate\\\"\\n [minDate]=\\\"minDate\\\"\\n [dateClass]=\\\"dateClass\\\"\\n [comparisonStart]=\\\"comparisonStart\\\"\\n [comparisonEnd]=\\\"comparisonEnd\\\"\\n (_userSelection)=\\\"_dateSelected($event)\\\">\\n </mat-month-view>\\n\\n <mat-year-view\\n *ngSwitchCase=\\\"'year'\\\"\\n [(activeDate)]=\\\"activeDate\\\"\\n [selected]=\\\"selected\\\"\\n [dateFilter]=\\\"dateFilter\\\"\\n [maxDate]=\\\"maxDate\\\"\\n [minDate]=\\\"minDate\\\"\\n (monthSelected)=\\\"_monthSelectedInYearView($event)\\\"\\n (selectedChange)=\\\"_goToDateInView($event, 'month')\\\">\\n </mat-year-view>\\n\\n <mat-multi-year-view\\n *ngSwitchCase=\\\"'multi-year'\\\"\\n [(activeDate)]=\\\"activeDate\\\"\\n [selected]=\\\"selected\\\"\\n [dateFilter]=\\\"dateFilter\\\"\\n [maxDate]=\\\"maxDate\\\"\\n [minDate]=\\\"minDate\\\"\\n (yearSelected)=\\\"_yearSelectedInMultiYearView($event)\\\"\\n (selectedChange)=\\\"_goToDateInView($event, 'year')\\\">\\n </mat-multi-year-view>\\n</div>\\n\",\n host: {\n 'class': 'mat-calendar'\n },\n exportAs: 'matCalendar',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER],\n styles: [\".mat-calendar{display:block}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;margin:5% calc(33% / 7 - 16px)}.mat-calendar-controls .mat-icon-button:hover .mat-button-focus-overlay{opacity:.04}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0}.mat-calendar-arrow{display:inline-block;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top-width:5px;border-top-style:solid;margin:0 0 0 5px;vertical-align:middle}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\\\"\\\";position:absolute;top:0;left:-8px;right:-8px;height:1px}\\n\"]\n }]\n }], function () { return [{ type: MatDatepickerIntl }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }, { type: ɵngcc0.ChangeDetectorRef }]; }, { startView: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], yearSelected: [{\n type: Output\n }], monthSelected: [{\n type: Output\n }], _userSelection: [{\n type: Output\n }], startAt: [{\n type: Input\n }], selected: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], headerComponent: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], dateClass: [{\n type: Input\n }], comparisonStart: [{\n type: Input\n }], comparisonEnd: [{\n type: Input\n }], monthView: [{\n type: ViewChild,\n args: [MatMonthView]\n }], yearView: [{\n type: ViewChild,\n args: [MatYearView]\n }], multiYearView: [{\n type: ViewChild,\n args: [MatMultiYearView]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material datepicker.\n * @docs-private\n */\nconst matDatepickerAnimations = {\n /** Transforms the height of the datepicker's calendar. */\n transformPanel: trigger('transformPanel', [\n state('void', style({\n opacity: 0,\n transform: 'scale(1, 0.8)'\n })),\n transition('void => enter', animate('120ms cubic-bezier(0, 0, 0.2, 1)', style({\n opacity: 1,\n transform: 'scale(1, 1)'\n }))),\n transition('* => void', animate('100ms linear', style({ opacity: 0 })))\n ]),\n /** Fades in the content of the calendar. */\n fadeInCalendar: trigger('fadeInCalendar', [\n state('void', style({ opacity: 0 })),\n state('enter', style({ opacity: 1 })),\n // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\n // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))\n ])\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate a unique ID for each datepicker instance. */\nlet datepickerUid = 0;\n/** Injection token that determines the scroll handling while the calendar is open. */\nconst MAT_DATEPICKER_SCROLL_STRATEGY = new InjectionToken('mat-datepicker-scroll-strategy');\n/** @docs-private */\nfunction MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_DATEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n// Boilerplate for applying mixins to MatDatepickerContent.\n/** @docs-private */\nclass MatDatepickerContentBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatDatepickerContentMixinBase = mixinColor(MatDatepickerContentBase);\n/**\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\n * MatCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the popup that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\nclass MatDatepickerContent extends _MatDatepickerContentMixinBase {\n constructor(elementRef, \n /**\n * @deprecated `_changeDetectorRef`, `_model` and `_rangeSelectionStrategy`\n * parameters to become required.\n * @breaking-change 11.0.0\n */\n _changeDetectorRef, _model, _dateAdapter, _rangeSelectionStrategy) {\n super(elementRef);\n this._changeDetectorRef = _changeDetectorRef;\n this._model = _model;\n this._dateAdapter = _dateAdapter;\n this._rangeSelectionStrategy = _rangeSelectionStrategy;\n this._subscriptions = new Subscription();\n /** Current state of the animation. */\n this._animationState = 'enter';\n /** Emits when an animation has finished. */\n this._animationDone = new Subject();\n }\n ngAfterViewInit() {\n // @breaking-change 11.0.0 Remove null check for `_changeDetectorRef.\n if (this._changeDetectorRef) {\n this._subscriptions.add(this.datepicker._stateChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n }));\n }\n this._calendar.focusActiveCell();\n }\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n this._animationDone.complete();\n }\n _handleUserSelection(event) {\n // @breaking-change 11.0.0 Remove null checks for _model,\n // _rangeSelectionStrategy and _dateAdapter.\n if (this._model && this._dateAdapter) {\n const selection = this._model.selection;\n const value = event.value;\n const isRange = selection instanceof DateRange;\n // If we're selecting a range and we have a selection strategy, always pass the value through\n // there. Otherwise don't assign null values to the model, unless we're selecting a range.\n // A null value when picking a range means that the user cancelled the selection (e.g. by\n // pressing escape), whereas when selecting a single value it means that the value didn't\n // change. This isn't very intuitive, but it's here for backwards-compatibility.\n if (isRange && this._rangeSelectionStrategy) {\n const newSelection = this._rangeSelectionStrategy.selectionFinished(value, selection, event.event);\n this._model.updateSelection(newSelection, this);\n }\n else if (value && (isRange ||\n !this._dateAdapter.sameDate(value, selection))) {\n this._model.add(value);\n }\n }\n if (!this._model || this._model.isComplete()) {\n this.datepicker.close();\n }\n }\n _startExitAnimation() {\n this._animationState = 'void';\n // @breaking-change 11.0.0 Remove null check for `_changeDetectorRef`.\n if (this._changeDetectorRef) {\n this._changeDetectorRef.markForCheck();\n }\n }\n _getSelected() {\n // @breaking-change 11.0.0 Remove null check for `_model`.\n return this._model ? this._model.selection : null;\n }\n}\nMatDatepickerContent.ɵfac = function MatDatepickerContent_Factory(t) { return new (t || MatDatepickerContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(MatDateSelectionModel), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_RANGE_SELECTION_STRATEGY, 8)); };\nMatDatepickerContent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDatepickerContent, selectors: [[\"mat-datepicker-content\"]], viewQuery: function MatDatepickerContent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatCalendar, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._calendar = _t.first);\n } }, hostAttrs: [1, \"mat-datepicker-content\"], hostVars: 3, hostBindings: function MatDatepickerContent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵsyntheticHostListener(\"@transformPanel.done\", function MatDatepickerContent_animation_transformPanel_done_HostBindingHandler() { return ctx._animationDone.next(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵsyntheticHostProperty(\"@transformPanel\", ctx._animationState);\n ɵngcc0.ɵɵclassProp(\"mat-datepicker-content-touch\", ctx.datepicker.touchUi);\n } }, inputs: { color: \"color\" }, exportAs: [\"matDatepickerContent\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 13, consts: [[\"cdkTrapFocus\", \"\", 3, \"id\", \"ngClass\", \"startAt\", \"startView\", \"minDate\", \"maxDate\", \"dateFilter\", \"headerComponent\", \"selected\", \"dateClass\", \"comparisonStart\", \"comparisonEnd\", \"yearSelected\", \"monthSelected\", \"_userSelection\"]], template: function MatDatepickerContent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"mat-calendar\", 0);\n ɵngcc0.ɵɵlistener(\"yearSelected\", function MatDatepickerContent_Template_mat_calendar_yearSelected_0_listener($event) { return ctx.datepicker._selectYear($event); })(\"monthSelected\", function MatDatepickerContent_Template_mat_calendar_monthSelected_0_listener($event) { return ctx.datepicker._selectMonth($event); })(\"_userSelection\", function MatDatepickerContent_Template_mat_calendar__userSelection_0_listener($event) { return ctx._handleUserSelection($event); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"id\", ctx.datepicker.id)(\"ngClass\", ctx.datepicker.panelClass)(\"startAt\", ctx.datepicker.startAt)(\"startView\", ctx.datepicker.startView)(\"minDate\", ctx.datepicker._getMinDate())(\"maxDate\", ctx.datepicker._getMaxDate())(\"dateFilter\", ctx.datepicker._getDateFilter())(\"headerComponent\", ctx.datepicker.calendarHeaderComponent)(\"selected\", ctx._getSelected())(\"dateClass\", ctx.datepicker.dateClass)(\"comparisonStart\", ctx.comparisonStart)(\"comparisonEnd\", ctx.comparisonEnd)(\"@fadeInCalendar\", \"enter\");\n } }, directives: [MatCalendar, ɵngcc5.CdkTrapFocus, ɵngcc1.NgClass], styles: [\".mat-datepicker-content{display:block;border-radius:4px}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content-touch{display:block;max-height:80vh;overflow:auto;margin:-24px}.mat-datepicker-content-touch .mat-calendar{min-width:250px;min-height:312px;max-width:750px;max-height:788px}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-calendar{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-calendar{width:80vw;height:100vw}}\\n\"], encapsulation: 2, data: { animation: [\n matDatepickerAnimations.transformPanel,\n matDatepickerAnimations.fadeInCalendar,\n ] }, changeDetection: 0 });\nMatDatepickerContent.ctorParameters = () => [\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: MatDateSelectionModel },\n { type: DateAdapter },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_RANGE_SELECTION_STRATEGY,] }] }\n];\nMatDatepickerContent.propDecorators = {\n _calendar: [{ type: ViewChild, args: [MatCalendar,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDatepickerContent, [{\n type: Component,\n args: [{\n selector: 'mat-datepicker-content',\n template: \"<mat-calendar cdkTrapFocus\\n [id]=\\\"datepicker.id\\\"\\n [ngClass]=\\\"datepicker.panelClass\\\"\\n [startAt]=\\\"datepicker.startAt\\\"\\n [startView]=\\\"datepicker.startView\\\"\\n [minDate]=\\\"datepicker._getMinDate()\\\"\\n [maxDate]=\\\"datepicker._getMaxDate()\\\"\\n [dateFilter]=\\\"datepicker._getDateFilter()\\\"\\n [headerComponent]=\\\"datepicker.calendarHeaderComponent\\\"\\n [selected]=\\\"_getSelected()\\\"\\n [dateClass]=\\\"datepicker.dateClass\\\"\\n [comparisonStart]=\\\"comparisonStart\\\"\\n [comparisonEnd]=\\\"comparisonEnd\\\"\\n [@fadeInCalendar]=\\\"'enter'\\\"\\n (yearSelected)=\\\"datepicker._selectYear($event)\\\"\\n (monthSelected)=\\\"datepicker._selectMonth($event)\\\"\\n (_userSelection)=\\\"_handleUserSelection($event)\\\">\\n</mat-calendar>\\n\",\n host: {\n 'class': 'mat-datepicker-content',\n '[@transformPanel]': '_animationState',\n '(@transformPanel.done)': '_animationDone.next()',\n '[class.mat-datepicker-content-touch]': 'datepicker.touchUi'\n },\n animations: [\n matDatepickerAnimations.transformPanel,\n matDatepickerAnimations.fadeInCalendar,\n ],\n exportAs: 'matDatepickerContent',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['color'],\n styles: [\".mat-datepicker-content{display:block;border-radius:4px}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content-touch{display:block;max-height:80vh;overflow:auto;margin:-24px}.mat-datepicker-content-touch .mat-calendar{min-width:250px;min-height:312px;max-width:750px;max-height:788px}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-calendar{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-calendar{width:80vw;height:100vw}}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: MatDateSelectionModel }, { type: ɵngcc2.DateAdapter }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_RANGE_SELECTION_STRATEGY]\n }] }]; }, { _calendar: [{\n type: ViewChild,\n args: [MatCalendar]\n }] }); })();\n/** Base class for a datepicker. */\nclass MatDatepickerBase {\n constructor(_dialog, _overlay, _ngZone, _viewContainerRef, scrollStrategy, _dateAdapter, _dir, _document, _model) {\n this._dialog = _dialog;\n this._overlay = _overlay;\n this._ngZone = _ngZone;\n this._viewContainerRef = _viewContainerRef;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._document = _document;\n this._model = _model;\n this._inputStateChanges = Subscription.EMPTY;\n /** The view that the calendar should start in. */\n this.startView = 'month';\n this._touchUi = false;\n /** Preferred position of the datepicker in the X axis. */\n this.xPosition = 'start';\n /** Preferred position of the datepicker in the Y axis. */\n this.yPosition = 'below';\n /**\n * Emits selected year in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n this.yearSelected = new EventEmitter();\n /**\n * Emits selected month in year view.\n * This doesn't imply a change on the selected date.\n */\n this.monthSelected = new EventEmitter();\n /** Emits when the datepicker has been opened. */\n this.openedStream = new EventEmitter();\n /** Emits when the datepicker has been closed. */\n this.closedStream = new EventEmitter();\n this._opened = false;\n /** The id for the datepicker calendar. */\n this.id = `mat-datepicker-${datepickerUid++}`;\n /** The element that was focused before the datepicker was opened. */\n this._focusedElementBeforeOpen = null;\n /** Emits when the datepicker's state changes. */\n this._stateChanges = new Subject();\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n this._scrollStrategy = scrollStrategy;\n }\n /** The date to open the calendar to initially. */\n get startAt() {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n return this._startAt || (this._datepickerInput ? this._datepickerInput.getStartValue() : null);\n }\n set startAt(value) {\n this._startAt = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** Color palette to use on the datepicker's calendar. */\n get color() {\n return this._color ||\n (this._datepickerInput ? this._datepickerInput.getThemePalette() : undefined);\n }\n set color(value) {\n this._color = value;\n }\n /**\n * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n * than a popup and elements have more padding to allow for bigger touch targets.\n */\n get touchUi() { return this._touchUi; }\n set touchUi(value) {\n this._touchUi = coerceBooleanProperty(value);\n }\n /** Whether the datepicker pop-up should be disabled. */\n get disabled() {\n return this._disabled === undefined && this._datepickerInput ?\n this._datepickerInput.disabled : !!this._disabled;\n }\n set disabled(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._stateChanges.next(undefined);\n }\n }\n /** Whether the calendar is open. */\n get opened() { return this._opened; }\n set opened(value) { value ? this.open() : this.close(); }\n /** The minimum selectable date. */\n _getMinDate() {\n return this._datepickerInput && this._datepickerInput.min;\n }\n /** The maximum selectable date. */\n _getMaxDate() {\n return this._datepickerInput && this._datepickerInput.max;\n }\n _getDateFilter() {\n return this._datepickerInput && this._datepickerInput.dateFilter;\n }\n ngOnChanges(changes) {\n const positionChange = changes['xPosition'] || changes['yPosition'];\n if (positionChange && !positionChange.firstChange && this._popupRef) {\n this._setConnectedPositions(this._popupRef.getConfig().positionStrategy);\n if (this.opened) {\n this._popupRef.updatePosition();\n }\n }\n this._stateChanges.next(undefined);\n }\n ngOnDestroy() {\n this._destroyPopup();\n this.close();\n this._inputStateChanges.unsubscribe();\n this._stateChanges.complete();\n }\n /** Selects the given date */\n select(date) {\n this._model.add(date);\n }\n /** Emits the selected year in multiyear view */\n _selectYear(normalizedYear) {\n this.yearSelected.emit(normalizedYear);\n }\n /** Emits selected month in year view */\n _selectMonth(normalizedMonth) {\n this.monthSelected.emit(normalizedMonth);\n }\n /**\n * Register an input with this datepicker.\n * @param input The datepicker input to register with this datepicker.\n * @returns Selection model that the input should hook itself up to.\n */\n _registerInput(input) {\n if (this._datepickerInput) {\n throw Error('A MatDatepicker can only be associated with a single input.');\n }\n this._inputStateChanges.unsubscribe();\n this._datepickerInput = input;\n this._inputStateChanges =\n input._stateChanges.subscribe(() => this._stateChanges.next(undefined));\n return this._model;\n }\n /** Open the calendar. */\n open() {\n if (this._opened || this.disabled) {\n return;\n }\n if (!this._datepickerInput) {\n throw Error('Attempted to open an MatDatepicker with no associated input.');\n }\n if (this._document) {\n this._focusedElementBeforeOpen = this._document.activeElement;\n }\n this.touchUi ? this._openAsDialog() : this._openAsPopup();\n this._opened = true;\n this.openedStream.emit();\n }\n /** Close the calendar. */\n close() {\n if (!this._opened) {\n return;\n }\n if (this._popupComponentRef && this._popupRef) {\n const instance = this._popupComponentRef.instance;\n instance._startExitAnimation();\n instance._animationDone.pipe(take(1)).subscribe(() => this._destroyPopup());\n }\n if (this._dialogRef) {\n this._dialogRef.close();\n this._dialogRef = null;\n }\n const completeClose = () => {\n // The `_opened` could've been reset already if\n // we got two events in quick succession.\n if (this._opened) {\n this._opened = false;\n this.closedStream.emit();\n this._focusedElementBeforeOpen = null;\n }\n };\n if (this._focusedElementBeforeOpen &&\n typeof this._focusedElementBeforeOpen.focus === 'function') {\n // Because IE moves focus asynchronously, we can't count on it being restored before we've\n // marked the datepicker as closed. If the event fires out of sequence and the element that\n // we're refocusing opens the datepicker on focus, the user could be stuck with not being\n // able to close the calendar at all. We work around it by making the logic, that marks\n // the datepicker as closed, async as well.\n this._focusedElementBeforeOpen.focus();\n setTimeout(completeClose);\n }\n else {\n completeClose();\n }\n }\n /** Open the calendar as a dialog. */\n _openAsDialog() {\n // Usually this would be handled by `open` which ensures that we can only have one overlay\n // open at a time, however since we reset the variables in async handlers some overlays\n // may slip through if the user opens and closes multiple times in quick succession (e.g.\n // by holding down the enter key).\n if (this._dialogRef) {\n this._dialogRef.close();\n }\n this._dialogRef = this._dialog.open(MatDatepickerContent, {\n direction: this._dir ? this._dir.value : 'ltr',\n viewContainerRef: this._viewContainerRef,\n panelClass: 'mat-datepicker-dialog',\n // These values are all the same as the defaults, but we set them explicitly so that the\n // datepicker dialog behaves consistently even if the user changed the defaults.\n hasBackdrop: true,\n disableClose: false,\n width: '',\n height: '',\n minWidth: '',\n minHeight: '',\n maxWidth: '80vw',\n maxHeight: '',\n position: {},\n autoFocus: true,\n // `MatDialog` has focus restoration built in, however we want to disable it since the\n // datepicker also has focus restoration for dropdown mode. We want to do this, in order\n // to ensure that the timing is consistent between dropdown and dialog modes since `MatDialog`\n // restores focus when the animation is finished, but the datepicker does it immediately.\n // Furthermore, this avoids any conflicts where the datepicker consumer might move focus\n // inside the `closed` event which is dispatched immediately.\n restoreFocus: false\n });\n this._dialogRef.afterClosed().subscribe(() => this.close());\n this._forwardContentValues(this._dialogRef.componentInstance);\n }\n /** Open the calendar as a popup. */\n _openAsPopup() {\n const portal = new ComponentPortal(MatDatepickerContent, this._viewContainerRef);\n this._destroyPopup();\n this._createPopup();\n this._popupComponentRef = this._popupRef.attach(portal);\n this._forwardContentValues(this._popupComponentRef.instance);\n // Update the position once the calendar has rendered.\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this._popupRef.updatePosition();\n });\n }\n /** Forwards relevant values from the datepicker to the datepicker content inside the overlay. */\n _forwardContentValues(instance) {\n instance.datepicker = this;\n instance.color = this.color;\n }\n /** Create the popup. */\n _createPopup() {\n const positionStrategy = this._overlay.position()\n .flexibleConnectedTo(this._datepickerInput.getConnectedOverlayOrigin())\n .withTransformOriginOn('.mat-datepicker-content')\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withLockedPosition();\n const overlayConfig = new OverlayConfig({\n positionStrategy: this._setConnectedPositions(positionStrategy),\n hasBackdrop: true,\n backdropClass: 'mat-overlay-transparent-backdrop',\n direction: this._dir,\n scrollStrategy: this._scrollStrategy(),\n panelClass: 'mat-datepicker-popup',\n });\n this._popupRef = this._overlay.create(overlayConfig);\n this._popupRef.overlayElement.setAttribute('role', 'dialog');\n merge(this._popupRef.backdropClick(), this._popupRef.detachments(), this._popupRef.keydownEvents().pipe(filter(event => {\n // Closing on alt + up is only valid when there's an input associated with the datepicker.\n return event.keyCode === ESCAPE ||\n (this._datepickerInput && event.altKey && event.keyCode === UP_ARROW);\n }))).subscribe(event => {\n if (event) {\n event.preventDefault();\n }\n this.close();\n });\n }\n /** Destroys the current popup overlay. */\n _destroyPopup() {\n if (this._popupRef) {\n this._popupRef.dispose();\n this._popupRef = this._popupComponentRef = null;\n }\n }\n /** Sets the positions of the datepicker in dropdown mode based on the current configuration. */\n _setConnectedPositions(strategy) {\n const primaryX = this.xPosition === 'end' ? 'end' : 'start';\n const secondaryX = primaryX === 'start' ? 'end' : 'start';\n const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\n const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\n return strategy.withPositions([\n {\n originX: primaryX,\n originY: secondaryY,\n overlayX: primaryX,\n overlayY: primaryY\n },\n {\n originX: primaryX,\n originY: primaryY,\n overlayX: primaryX,\n overlayY: secondaryY\n },\n {\n originX: secondaryX,\n originY: secondaryY,\n overlayX: secondaryX,\n overlayY: primaryY\n },\n {\n originX: secondaryX,\n originY: primaryY,\n overlayX: secondaryX,\n overlayY: secondaryY\n }\n ]);\n }\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n _getValidDateOrNull(obj) {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n}\nMatDatepickerBase.ɵfac = function MatDatepickerBase_Factory(t) { return new (t || MatDatepickerBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc7.MatDialog), ɵngcc0.ɵɵdirectiveInject(ɵngcc8.Overlay), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(MAT_DATEPICKER_SCROLL_STRATEGY), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(MatDateSelectionModel)); };\nMatDatepickerBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatDatepickerBase, inputs: { startView: \"startView\", xPosition: \"xPosition\", yPosition: \"yPosition\", startAt: \"startAt\", color: \"color\", touchUi: \"touchUi\", disabled: \"disabled\", opened: \"opened\", calendarHeaderComponent: \"calendarHeaderComponent\", panelClass: \"panelClass\", dateClass: \"dateClass\" }, outputs: { yearSelected: \"yearSelected\", monthSelected: \"monthSelected\", openedStream: \"opened\", closedStream: \"closed\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\nMatDatepickerBase.ctorParameters = () => [\n { type: MatDialog },\n { type: Overlay },\n { type: NgZone },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_DATEPICKER_SCROLL_STRATEGY,] }] },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: MatDateSelectionModel }\n];\nMatDatepickerBase.propDecorators = {\n calendarHeaderComponent: [{ type: Input }],\n startAt: [{ type: Input }],\n startView: [{ type: Input }],\n color: [{ type: Input }],\n touchUi: [{ type: Input }],\n disabled: [{ type: Input }],\n xPosition: [{ type: Input }],\n yPosition: [{ type: Input }],\n yearSelected: [{ type: Output }],\n monthSelected: [{ type: Output }],\n panelClass: [{ type: Input }],\n dateClass: [{ type: Input }],\n openedStream: [{ type: Output, args: ['opened',] }],\n closedStream: [{ type: Output, args: ['closed',] }],\n opened: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDatepickerBase, [{\n type: Directive\n }], function () { return [{ type: ɵngcc7.MatDialog }, { type: ɵngcc8.Overlay }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DATEPICKER_SCROLL_STRATEGY]\n }] }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: ɵngcc3.Directionality, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: MatDateSelectionModel }]; }, { startView: [{\n type: Input\n }], xPosition: [{\n type: Input\n }], yPosition: [{\n type: Input\n }], yearSelected: [{\n type: Output\n }], monthSelected: [{\n type: Output\n }], openedStream: [{\n type: Output,\n args: ['opened']\n }], closedStream: [{\n type: Output,\n args: ['closed']\n }], startAt: [{\n type: Input\n }], color: [{\n type: Input\n }], touchUi: [{\n type: Input\n }], disabled: [{\n type: Input\n }], opened: [{\n type: Input\n }], calendarHeaderComponent: [{\n type: Input\n }], panelClass: [{\n type: Input\n }], dateClass: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDatepicker\"). We can change this to a directive\n// if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the datepicker popup/dialog. */\nclass MatDatepicker extends MatDatepickerBase {\n}\nMatDatepicker.ɵfac = function MatDatepicker_Factory(t) { return ɵMatDatepicker_BaseFactory(t || MatDatepicker); };\nMatDatepicker.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDatepicker, selectors: [[\"mat-datepicker\"]], exportAs: [\"matDatepicker\"], features: [ɵngcc0.ɵɵProvidersFeature([MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function MatDatepicker_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nconst ɵMatDatepicker_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatDatepicker);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDatepicker, [{\n type: Component,\n args: [{\n selector: 'mat-datepicker',\n template: '',\n exportAs: 'matDatepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.\n */\nclass MatDatepickerInputEvent {\n constructor(\n /** Reference to the datepicker input component that emitted the event. */\n target, \n /** Reference to the native input element associated with the datepicker input. */\n targetElement) {\n this.target = target;\n this.targetElement = targetElement;\n this.value = this.target.value;\n }\n}\n/** Base class for datepicker inputs. */\nclass MatDatepickerInputBase {\n constructor(_elementRef, _dateAdapter, _dateFormats) {\n this._elementRef = _elementRef;\n this._dateAdapter = _dateAdapter;\n this._dateFormats = _dateFormats;\n /** Emits when a `change` event is fired on this `<input>`. */\n this.dateChange = new EventEmitter();\n /** Emits when an `input` event is fired on this `<input>`. */\n this.dateInput = new EventEmitter();\n /** Emits when the value changes (either due to user input or programmatic change). */\n this._valueChange = new EventEmitter();\n /** Emits when the internal state has changed */\n this._stateChanges = new Subject();\n this._onTouched = () => { };\n this._validatorOnChange = () => { };\n this._cvaOnChange = () => { };\n this._valueChangesSubscription = Subscription.EMPTY;\n this._localeSubscription = Subscription.EMPTY;\n /** The form control validator for whether the input parses. */\n this._parseValidator = () => {\n return this._lastValueValid ?\n null : { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };\n };\n /** The form control validator for the date filter. */\n this._filterValidator = (control) => {\n const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const dateFilter = this._getDateFilter();\n return !dateFilter || !controlValue || dateFilter(controlValue) ?\n null : { 'matDatepickerFilter': true };\n };\n /** The form control validator for the min date. */\n this._minValidator = (control) => {\n const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const min = this._getMinDate();\n return (!min || !controlValue ||\n this._dateAdapter.compareDate(min, controlValue) <= 0) ?\n null : { 'matDatepickerMin': { 'min': min, 'actual': controlValue } };\n };\n /** The form control validator for the max date. */\n this._maxValidator = (control) => {\n const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const max = this._getMaxDate();\n return (!max || !controlValue ||\n this._dateAdapter.compareDate(max, controlValue) >= 0) ?\n null : { 'matDatepickerMax': { 'max': max, 'actual': controlValue } };\n };\n /** Whether the last value set on the input was valid. */\n this._lastValueValid = false;\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n // Update the displayed date when the locale changes.\n this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n this.value = this.value;\n });\n }\n /** The value of the input. */\n get value() {\n return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;\n }\n set value(value) {\n value = this._dateAdapter.deserialize(value);\n this._lastValueValid = this._isValidValue(value);\n value = this._getValidDateOrNull(value);\n const oldDate = this.value;\n this._assignValue(value);\n this._formatValue(value);\n if (!this._dateAdapter.sameDate(oldDate, value)) {\n this._valueChange.emit(value);\n }\n }\n /** Whether the datepicker-input is disabled. */\n get disabled() { return !!this._disabled || this._parentDisabled(); }\n set disabled(value) {\n const newValue = coerceBooleanProperty(value);\n const element = this._elementRef.nativeElement;\n if (this._disabled !== newValue) {\n this._disabled = newValue;\n this._stateChanges.next(undefined);\n }\n // We need to null check the `blur` method, because it's undefined during SSR.\n // In Ivy static bindings are invoked earlier, before the element is attached to the DOM.\n // This can cause an error to be thrown in some browsers (IE/Edge) which assert that the\n // element has been inserted.\n if (newValue && this._isInitialized && element.blur) {\n // Normally, native input elements automatically blur if they turn disabled. This behavior\n // is problematic, because it would mean that it triggers another change detection cycle,\n // which then causes a changed after checked error if the input element was focused before.\n element.blur();\n }\n }\n /** Gets the base validator functions. */\n _getValidators() {\n return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];\n }\n /** Registers a date selection model with the input. */\n _registerModel(model) {\n this._model = model;\n this._valueChangesSubscription.unsubscribe();\n if (this._pendingValue) {\n this._assignValue(this._pendingValue);\n }\n this._valueChangesSubscription = this._model.selectionChanged.subscribe(event => {\n if (event.source !== this) {\n const value = this._getValueFromModel(event.selection);\n this._lastValueValid = this._isValidValue(value);\n this._cvaOnChange(value);\n this._onTouched();\n this._formatValue(value);\n // Note that we can't wrap the entire block with this logic, because for the range inputs\n // we want to revalidate whenever either one of the inputs changes and we don't have a\n // good way of distinguishing it at the moment.\n if (this._canEmitChangeEvent(event)) {\n this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n if (this._outsideValueChanged) {\n this._outsideValueChanged();\n }\n }\n });\n }\n ngAfterViewInit() {\n this._isInitialized = true;\n }\n ngOnChanges() {\n this._stateChanges.next(undefined);\n }\n ngOnDestroy() {\n this._valueChangesSubscription.unsubscribe();\n this._localeSubscription.unsubscribe();\n this._valueChange.complete();\n this._stateChanges.complete();\n }\n /** @docs-private */\n registerOnValidatorChange(fn) {\n this._validatorOnChange = fn;\n }\n /** @docs-private */\n validate(c) {\n return this._validator ? this._validator(c) : null;\n }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n this.value = value;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._cvaOnChange = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n _onKeydown(event) {\n const isAltDownArrow = event.altKey && event.keyCode === DOWN_ARROW;\n if (isAltDownArrow && !this._elementRef.nativeElement.readOnly) {\n this._openPopup();\n event.preventDefault();\n }\n }\n _onInput(value) {\n const lastValueWasValid = this._lastValueValid;\n let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);\n this._lastValueValid = this._isValidValue(date);\n date = this._getValidDateOrNull(date);\n if (!this._dateAdapter.sameDate(date, this.value)) {\n this._assignValue(date);\n this._cvaOnChange(date);\n this._valueChange.emit(date);\n this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n else {\n // Call the CVA change handler for invalid values\n // since this is what marks the control as dirty.\n if (value && !this.value) {\n this._cvaOnChange(date);\n }\n if (lastValueWasValid !== this._lastValueValid) {\n this._validatorOnChange();\n }\n }\n }\n _onChange() {\n this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n /** Handles blur events on the input. */\n _onBlur() {\n // Reformat the input only if we have a valid value.\n if (this.value) {\n this._formatValue(this.value);\n }\n this._onTouched();\n }\n /** Formats a value and sets it on the input element. */\n _formatValue(value) {\n this._elementRef.nativeElement.value =\n value ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';\n }\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n _getValidDateOrNull(obj) {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n /** Assigns a value to the model. */\n _assignValue(value) {\n // We may get some incoming values before the model was\n // assigned. Save the value so that we can assign it later.\n if (this._model) {\n this._assignValueToModel(value);\n this._pendingValue = null;\n }\n else {\n this._pendingValue = value;\n }\n }\n /** Whether a value is considered valid. */\n _isValidValue(value) {\n return !value || this._dateAdapter.isValid(value);\n }\n /**\n * Checks whether a parent control is disabled. This is in place so that it can be overridden\n * by inputs extending this one which can be placed inside of a group that can be disabled.\n */\n _parentDisabled() {\n return false;\n }\n}\nMatDatepickerInputBase.ɵfac = function MatDatepickerInputBase_Factory(t) { return new (t || MatDatepickerInputBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8)); };\nMatDatepickerInputBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatDatepickerInputBase, inputs: { value: \"value\", disabled: \"disabled\" }, outputs: { dateChange: \"dateChange\", dateInput: \"dateInput\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\nMatDatepickerInputBase.ctorParameters = () => [\n { type: ElementRef },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] }\n];\nMatDatepickerInputBase.propDecorators = {\n value: [{ type: Input }],\n disabled: [{ type: Input }],\n dateChange: [{ type: Output }],\n dateInput: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDatepickerInputBase, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }]; }, { dateChange: [{\n type: Output\n }], dateInput: [{\n type: Output\n }], value: [{\n type: Input\n }], disabled: [{\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/** @docs-private */\nconst MAT_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatDatepickerInput),\n multi: true\n};\n/** @docs-private */\nconst MAT_DATEPICKER_VALIDATORS = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MatDatepickerInput),\n multi: true\n};\n/** Directive used to connect an input to a MatDatepicker. */\nclass MatDatepickerInput extends MatDatepickerInputBase {\n constructor(elementRef, dateAdapter, dateFormats, _formField) {\n super(elementRef, dateAdapter, dateFormats);\n this._formField = _formField;\n this._validator = Validators.compose(super._getValidators());\n }\n /** The datepicker that this input is associated with. */\n set matDatepicker(datepicker) {\n if (datepicker) {\n this._datepicker = datepicker;\n this._registerModel(datepicker._registerInput(this));\n }\n }\n /** The minimum valid date. */\n get min() { return this._min; }\n set min(value) {\n this._min = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._validatorOnChange();\n }\n /** The maximum valid date. */\n get max() { return this._max; }\n set max(value) {\n this._max = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._validatorOnChange();\n }\n /** Function that can be used to filter out dates within the datepicker. */\n get dateFilter() { return this._dateFilter; }\n set dateFilter(value) {\n this._dateFilter = value;\n this._validatorOnChange();\n }\n /**\n * Gets the element that the datepicker popup should be connected to.\n * @return The element to connect the popup to.\n */\n getConnectedOverlayOrigin() {\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n }\n /** Returns the palette used by the input's form field, if any. */\n getThemePalette() {\n return this._formField ? this._formField.color : undefined;\n }\n /** Gets the value at which the calendar should start. */\n getStartValue() {\n return this.value;\n }\n /**\n * @deprecated\n * @breaking-change 8.0.0 Use `getConnectedOverlayOrigin` instead\n */\n getPopupConnectionElementRef() {\n return this.getConnectedOverlayOrigin();\n }\n /** Opens the associated datepicker. */\n _openPopup() {\n if (this._datepicker) {\n this._datepicker.open();\n }\n }\n _getValueFromModel(modelValue) {\n return modelValue;\n }\n _assignValueToModel(value) {\n if (this._model) {\n this._model.updateSelection(value, this);\n }\n }\n /** Gets the input's minimum date. */\n _getMinDate() {\n return this._min;\n }\n /** Gets the input's maximum date. */\n _getMaxDate() {\n return this._max;\n }\n /** Gets the input's date filtering function. */\n _getDateFilter() {\n return this._dateFilter;\n }\n _canEmitChangeEvent() {\n return true;\n }\n}\nMatDatepickerInput.ɵfac = function MatDatepickerInput_Factory(t) { return new (t || MatDatepickerInput)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8), ɵngcc0.ɵɵdirectiveInject(MAT_FORM_FIELD, 8)); };\nMatDatepickerInput.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatDatepickerInput, selectors: [[\"input\", \"matDatepicker\", \"\"]], hostVars: 5, hostBindings: function MatDatepickerInput_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"input\", function MatDatepickerInput_input_HostBindingHandler($event) { return ctx._onInput($event.target.value); })(\"change\", function MatDatepickerInput_change_HostBindingHandler() { return ctx._onChange(); })(\"blur\", function MatDatepickerInput_blur_HostBindingHandler() { return ctx._onBlur(); })(\"keydown\", function MatDatepickerInput_keydown_HostBindingHandler($event) { return ctx._onKeydown($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"disabled\", ctx.disabled);\n ɵngcc0.ɵɵattribute(\"aria-haspopup\", ctx._datepicker ? \"dialog\" : null)(\"aria-owns\", (ctx._datepicker == null ? null : ctx._datepicker.opened) && ctx._datepicker.id || null)(\"min\", ctx.min ? ctx._dateAdapter.toIso8601(ctx.min) : null)(\"max\", ctx.max ? ctx._dateAdapter.toIso8601(ctx.max) : null);\n } }, inputs: { matDatepicker: \"matDatepicker\", min: \"min\", max: \"max\", dateFilter: [\"matDatepickerFilter\", \"dateFilter\"] }, exportAs: [\"matDatepickerInput\"], features: [ɵngcc0.ɵɵProvidersFeature([\n MAT_DATEPICKER_VALUE_ACCESSOR,\n MAT_DATEPICKER_VALIDATORS,\n { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatDatepickerInput.ctorParameters = () => [\n { type: ElementRef },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] },\n { type: MatFormField, decorators: [{ type: Optional }, { type: Inject, args: [MAT_FORM_FIELD,] }] }\n];\nMatDatepickerInput.propDecorators = {\n matDatepicker: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n dateFilter: [{ type: Input, args: ['matDatepickerFilter',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDatepickerInput, [{\n type: Directive,\n args: [{\n selector: 'input[matDatepicker]',\n providers: [\n MAT_DATEPICKER_VALUE_ACCESSOR,\n MAT_DATEPICKER_VALIDATORS,\n { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },\n ],\n host: {\n '[attr.aria-haspopup]': '_datepicker ? \"dialog\" : null',\n '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',\n '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(blur)': '_onBlur()',\n '(keydown)': '_onKeydown($event)'\n },\n exportAs: 'matDatepickerInput'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }, { type: ɵngcc9.MatFormField, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD]\n }] }]; }, { matDatepicker: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], dateFilter: [{\n type: Input,\n args: ['matDatepickerFilter']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Can be used to override the icon of a `matDatepickerToggle`. */\nclass MatDatepickerToggleIcon {\n}\nMatDatepickerToggleIcon.ɵfac = function MatDatepickerToggleIcon_Factory(t) { return new (t || MatDatepickerToggleIcon)(); };\nMatDatepickerToggleIcon.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatDatepickerToggleIcon, selectors: [[\"\", \"matDatepickerToggleIcon\", \"\"]] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDatepickerToggleIcon, [{\n type: Directive,\n args: [{\n selector: '[matDatepickerToggleIcon]'\n }]\n }], null, null); })();\nclass MatDatepickerToggle {\n constructor(_intl, _changeDetectorRef, defaultTabIndex) {\n this._intl = _intl;\n this._changeDetectorRef = _changeDetectorRef;\n this._stateChanges = Subscription.EMPTY;\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\n }\n /** Whether the toggle button is disabled. */\n get disabled() {\n if (this._disabled === undefined && this.datepicker) {\n return this.datepicker.disabled;\n }\n return !!this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n }\n ngOnChanges(changes) {\n if (changes['datepicker']) {\n this._watchStateChanges();\n }\n }\n ngOnDestroy() {\n this._stateChanges.unsubscribe();\n }\n ngAfterContentInit() {\n this._watchStateChanges();\n }\n _open(event) {\n if (this.datepicker && !this.disabled) {\n this.datepicker.open();\n event.stopPropagation();\n }\n }\n _watchStateChanges() {\n const datepickerStateChanged = this.datepicker ? this.datepicker._stateChanges : of();\n const inputStateChanged = this.datepicker && this.datepicker._datepickerInput ?\n this.datepicker._datepickerInput._stateChanges : of();\n const datepickerToggled = this.datepicker ?\n merge(this.datepicker.openedStream, this.datepicker.closedStream) :\n of();\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(this._intl.changes, datepickerStateChanged, inputStateChanged, datepickerToggled).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n}\nMatDatepickerToggle.ɵfac = function MatDatepickerToggle_Factory(t) { return new (t || MatDatepickerToggle)(ɵngcc0.ɵɵdirectiveInject(MatDatepickerIntl), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵinjectAttribute('tabindex')); };\nMatDatepickerToggle.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDatepickerToggle, selectors: [[\"mat-datepicker-toggle\"]], contentQueries: function MatDatepickerToggle_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatDatepickerToggleIcon, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._customIcon = _t.first);\n } }, viewQuery: function MatDatepickerToggle_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c2, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._button = _t.first);\n } }, hostAttrs: [1, \"mat-datepicker-toggle\"], hostVars: 7, hostBindings: function MatDatepickerToggle_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function MatDatepickerToggle_focus_HostBindingHandler() { return ctx._button.focus(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.disabled ? null : 0 - 1);\n ɵngcc0.ɵɵclassProp(\"mat-datepicker-toggle-active\", ctx.datepicker && ctx.datepicker.opened)(\"mat-accent\", ctx.datepicker && ctx.datepicker.color === \"accent\")(\"mat-warn\", ctx.datepicker && ctx.datepicker.color === \"warn\");\n } }, inputs: { tabIndex: \"tabIndex\", disabled: \"disabled\", datepicker: [\"for\", \"datepicker\"], disableRipple: \"disableRipple\" }, exportAs: [\"matDatepickerToggle\"], features: [ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c4, decls: 4, vars: 6, consts: [[\"mat-icon-button\", \"\", \"type\", \"button\", 3, \"disabled\", \"disableRipple\", \"click\"], [\"button\", \"\"], [\"class\", \"mat-datepicker-toggle-default-icon\", \"viewBox\", \"0 0 24 24\", \"width\", \"24px\", \"height\", \"24px\", \"fill\", \"currentColor\", \"focusable\", \"false\", 4, \"ngIf\"], [\"viewBox\", \"0 0 24 24\", \"width\", \"24px\", \"height\", \"24px\", \"fill\", \"currentColor\", \"focusable\", \"false\", 1, \"mat-datepicker-toggle-default-icon\"], [\"d\", \"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"]], template: function MatDatepickerToggle_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c3);\n ɵngcc0.ɵɵelementStart(0, \"button\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function MatDatepickerToggle_Template_button_click_0_listener($event) { return ctx._open($event); });\n ɵngcc0.ɵɵtemplate(2, MatDatepickerToggle__svg_svg_2_Template, 2, 0, \"svg\", 2);\n ɵngcc0.ɵɵprojection(3);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled)(\"disableRipple\", ctx.disableRipple);\n ɵngcc0.ɵɵattribute(\"aria-haspopup\", ctx.datepicker ? \"dialog\" : null)(\"aria-label\", ctx._intl.openCalendarLabel)(\"tabindex\", ctx.disabled ? 0 - 1 : ctx.tabIndex);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx._customIcon);\n } }, directives: [ɵngcc4.MatButton, ɵngcc1.NgIf], styles: [\".mat-form-field-appearance-legacy .mat-form-field-prefix .mat-datepicker-toggle-default-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-datepicker-toggle-default-icon{width:1em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-datepicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-datepicker-toggle-default-icon{display:block;width:1.5em;height:1.5em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-datepicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-datepicker-toggle-default-icon{margin:auto}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatDatepickerToggle.ctorParameters = () => [\n { type: MatDatepickerIntl },\n { type: ChangeDetectorRef },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] }\n];\nMatDatepickerToggle.propDecorators = {\n datepicker: [{ type: Input, args: ['for',] }],\n tabIndex: [{ type: Input }],\n disabled: [{ type: Input }],\n disableRipple: [{ type: Input }],\n _customIcon: [{ type: ContentChild, args: [MatDatepickerToggleIcon,] }],\n _button: [{ type: ViewChild, args: ['button',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDatepickerToggle, [{\n type: Component,\n args: [{\n selector: 'mat-datepicker-toggle',\n template: \"<button\\n #button\\n mat-icon-button\\n type=\\\"button\\\"\\n [attr.aria-haspopup]=\\\"datepicker ? 'dialog' : null\\\"\\n [attr.aria-label]=\\\"_intl.openCalendarLabel\\\"\\n [attr.tabindex]=\\\"disabled ? -1 : tabIndex\\\"\\n [disabled]=\\\"disabled\\\"\\n [disableRipple]=\\\"disableRipple\\\"\\n (click)=\\\"_open($event)\\\">\\n\\n <svg\\n *ngIf=\\\"!_customIcon\\\"\\n class=\\\"mat-datepicker-toggle-default-icon\\\"\\n viewBox=\\\"0 0 24 24\\\"\\n width=\\\"24px\\\"\\n height=\\\"24px\\\"\\n fill=\\\"currentColor\\\"\\n focusable=\\\"false\\\">\\n <path d=\\\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\\\"/>\\n </svg>\\n\\n <ng-content select=\\\"[matDatepickerToggleIcon]\\\"></ng-content>\\n</button>\\n\",\n host: {\n 'class': 'mat-datepicker-toggle',\n // Always set the tabindex to -1 so that it doesn't overlap with any custom tabindex the\n // consumer may have provided, while still being able to receive focus.\n '[attr.tabindex]': 'disabled ? null : -1',\n '[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',\n '[class.mat-accent]': 'datepicker && datepicker.color === \"accent\"',\n '[class.mat-warn]': 'datepicker && datepicker.color === \"warn\"',\n '(focus)': '_button.focus()'\n },\n exportAs: 'matDatepickerToggle',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mat-form-field-appearance-legacy .mat-form-field-prefix .mat-datepicker-toggle-default-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-datepicker-toggle-default-icon{width:1em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-datepicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-datepicker-toggle-default-icon{display:block;width:1.5em;height:1.5em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-datepicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-datepicker-toggle-default-icon{margin:auto}\\n\"]\n }]\n }], function () { return [{ type: MatDatepickerIntl }, { type: ɵngcc0.ChangeDetectorRef }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }]; }, { tabIndex: [{\n type: Input\n }], disabled: [{\n type: Input\n }], datepicker: [{\n type: Input,\n args: ['for']\n }], disableRipple: [{\n type: Input\n }], _customIcon: [{\n type: ContentChild,\n args: [MatDatepickerToggleIcon]\n }], _button: [{\n type: ViewChild,\n args: ['button']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Used to provide the date range input wrapper component\n * to the parts without circular dependencies.\n */\nconst MAT_DATE_RANGE_INPUT_PARENT = new InjectionToken('MAT_DATE_RANGE_INPUT_PARENT');\n/**\n * Base class for the individual inputs that can be projected inside a `mat-date-range-input`.\n */\nclass MatDateRangeInputPartBase extends MatDatepickerInputBase {\n constructor(_rangeInput, elementRef, _defaultErrorStateMatcher, _injector, _parentForm, _parentFormGroup, dateAdapter, dateFormats) {\n super(elementRef, dateAdapter, dateFormats);\n this._rangeInput = _rangeInput;\n this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n this._injector = _injector;\n this._parentForm = _parentForm;\n this._parentFormGroup = _parentFormGroup;\n this._outsideValueChanged = () => {\n // Whenever the value changes outside the input we need to revalidate, because\n // the validation state of each of the inputs depends on the other one.\n this._validatorOnChange();\n };\n }\n ngOnInit() {\n // We need the date input to provide itself as a `ControlValueAccessor` and a `Validator`, while\n // injecting its `NgControl` so that the error state is handled correctly. This introduces a\n // circular dependency, because both `ControlValueAccessor` and `Validator` depend on the input\n // itself. Usually we can work around it for the CVA, but there's no API to do it for the\n // validator. We work around it here by injecting the `NgControl` in `ngOnInit`, after\n // everything has been resolved.\n const ngControl = this._injector.get(NgControl, null, InjectFlags.Self);\n if (ngControl) {\n this.ngControl = ngControl;\n }\n }\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n }\n /** Gets whether the input is empty. */\n isEmpty() {\n return this._elementRef.nativeElement.value.length === 0;\n }\n /** Gets the placeholder of the input. */\n _getPlaceholder() {\n return this._elementRef.nativeElement.placeholder;\n }\n /** Focuses the input. */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n /** Handles `input` events on the input element. */\n _onInput(value) {\n super._onInput(value);\n this._rangeInput._handleChildValueChange();\n }\n /** Opens the datepicker associated with the input. */\n _openPopup() {\n this._rangeInput._openDatepicker();\n }\n /** Gets the minimum date from the range input. */\n _getMinDate() {\n return this._rangeInput.min;\n }\n /** Gets the maximum date from the range input. */\n _getMaxDate() {\n return this._rangeInput.max;\n }\n /** Gets the date filter function from the range input. */\n _getDateFilter() {\n return this._rangeInput.dateFilter;\n }\n _parentDisabled() {\n return this._rangeInput._groupDisabled;\n }\n}\nMatDateRangeInputPartBase.ɵfac = function MatDateRangeInputPartBase_Factory(t) { return new (t || MatDateRangeInputPartBase)(ɵngcc0.ɵɵdirectiveInject(MAT_DATE_RANGE_INPUT_PARENT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.ErrorStateMatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc10.NgForm, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc10.FormGroupDirective, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8)); };\nMatDateRangeInputPartBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatDateRangeInputPartBase, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatDateRangeInputPartBase.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [MAT_DATE_RANGE_INPUT_PARENT,] }] },\n { type: ElementRef },\n { type: ErrorStateMatcher },\n { type: Injector },\n { type: NgForm, decorators: [{ type: Optional }] },\n { type: FormGroupDirective, decorators: [{ type: Optional }] },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDateRangeInputPartBase, [{\n type: Directive\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DATE_RANGE_INPUT_PARENT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc2.ErrorStateMatcher }, { type: ɵngcc0.Injector }, { type: ɵngcc10.NgForm, decorators: [{\n type: Optional\n }] }, { type: ɵngcc10.FormGroupDirective, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }]; }, null); })();\nconst _MatDateRangeInputBase = \n// Needs to be `as any`, because the base class is abstract.\nmixinErrorState(MatDateRangeInputPartBase);\n/** Input for entering the start date in a `mat-date-range-input`. */\nclass MatStartDate extends _MatDateRangeInputBase {\n constructor(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats) {\n // TODO(crisbeto): this constructor shouldn't be necessary, but ViewEngine doesn't seem to\n // handle DI correctly when it is inherited from `MatDateRangeInputPartBase`. We can drop this\n // constructor once ViewEngine is removed.\n super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats);\n /** Validator that checks that the start date isn't after the end date. */\n this._startValidator = (control) => {\n const start = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const end = this._model ? this._model.selection.end : null;\n return (!start || !end ||\n this._dateAdapter.compareDate(start, end) <= 0) ?\n null : { 'matStartDateInvalid': { 'end': end, 'actual': start } };\n };\n this._validator = Validators.compose([...super._getValidators(), this._startValidator]);\n this._canEmitChangeEvent = (event) => {\n return event.source !== this._rangeInput._endInput;\n };\n }\n _getValueFromModel(modelValue) {\n return modelValue.start;\n }\n _assignValueToModel(value) {\n if (this._model) {\n const range = new DateRange(value, this._model.selection.end);\n this._model.updateSelection(range, this);\n this._cvaOnChange(value);\n }\n }\n _formatValue(value) {\n super._formatValue(value);\n // Any time the input value is reformatted we need to tell the parent.\n this._rangeInput._handleChildValueChange();\n }\n /** Gets the value that should be used when mirroring the input's size. */\n getMirrorValue() {\n const element = this._elementRef.nativeElement;\n const value = element.value;\n return value.length > 0 ? value : element.placeholder;\n }\n}\nMatStartDate.ɵfac = function MatStartDate_Factory(t) { return new (t || MatStartDate)(ɵngcc0.ɵɵdirectiveInject(MAT_DATE_RANGE_INPUT_PARENT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.ErrorStateMatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc10.NgForm, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc10.FormGroupDirective, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8)); };\nMatStartDate.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatStartDate, selectors: [[\"input\", \"matStartDate\", \"\"]], hostAttrs: [\"type\", \"text\", 1, \"mat-date-range-input-inner\"], hostVars: 6, hostBindings: function MatStartDate_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"input\", function MatStartDate_input_HostBindingHandler($event) { return ctx._onInput($event.target.value); })(\"change\", function MatStartDate_change_HostBindingHandler() { return ctx._onChange(); })(\"keydown\", function MatStartDate_keydown_HostBindingHandler($event) { return ctx._onKeydown($event); })(\"blur\", function MatStartDate_blur_HostBindingHandler() { return ctx._onBlur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"disabled\", ctx.disabled);\n ɵngcc0.ɵɵattribute(\"id\", ctx._rangeInput.id)(\"aria-haspopup\", ctx._rangeInput.rangePicker ? \"dialog\" : null)(\"aria-owns\", (ctx._rangeInput.rangePicker == null ? null : ctx._rangeInput.rangePicker.opened) && ctx._rangeInput.rangePicker.id || null)(\"min\", ctx._getMinDate() ? ctx._dateAdapter.toIso8601(ctx._getMinDate()) : null)(\"max\", ctx._getMaxDate() ? ctx._dateAdapter.toIso8601(ctx._getMaxDate()) : null);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: NG_VALUE_ACCESSOR, useExisting: MatStartDate, multi: true },\n { provide: NG_VALIDATORS, useExisting: MatStartDate, multi: true }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatStartDate.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [MAT_DATE_RANGE_INPUT_PARENT,] }] },\n { type: ElementRef },\n { type: ErrorStateMatcher },\n { type: Injector },\n { type: NgForm, decorators: [{ type: Optional }] },\n { type: FormGroupDirective, decorators: [{ type: Optional }] },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatStartDate, [{\n type: Directive,\n args: [{\n selector: 'input[matStartDate]',\n host: {\n 'class': 'mat-date-range-input-inner',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(keydown)': '_onKeydown($event)',\n '[attr.id]': '_rangeInput.id',\n '[attr.aria-haspopup]': '_rangeInput.rangePicker ? \"dialog\" : null',\n '[attr.aria-owns]': '(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null',\n '[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',\n '[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',\n '(blur)': '_onBlur()',\n 'type': 'text'\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: MatStartDate, multi: true },\n { provide: NG_VALIDATORS, useExisting: MatStartDate, multi: true }\n ]\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DATE_RANGE_INPUT_PARENT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc2.ErrorStateMatcher }, { type: ɵngcc0.Injector }, { type: ɵngcc10.NgForm, decorators: [{\n type: Optional\n }] }, { type: ɵngcc10.FormGroupDirective, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }]; }, null); })();\n/** Input for entering the end date in a `mat-date-range-input`. */\nclass MatEndDate extends _MatDateRangeInputBase {\n constructor(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats) {\n // TODO(crisbeto): this constructor shouldn't be necessary, but ViewEngine doesn't seem to\n // handle DI correctly when it is inherited from `MatDateRangeInputPartBase`. We can drop this\n // constructor once ViewEngine is removed.\n super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats);\n /** Validator that checks that the end date isn't before the start date. */\n this._endValidator = (control) => {\n const end = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const start = this._model ? this._model.selection.start : null;\n return (!end || !start ||\n this._dateAdapter.compareDate(end, start) >= 0) ?\n null : { 'matEndDateInvalid': { 'start': start, 'actual': end } };\n };\n this._validator = Validators.compose([...super._getValidators(), this._endValidator]);\n this._canEmitChangeEvent = (event) => {\n return event.source !== this._rangeInput._startInput;\n };\n }\n _getValueFromModel(modelValue) {\n return modelValue.end;\n }\n _assignValueToModel(value) {\n if (this._model) {\n const range = new DateRange(this._model.selection.start, value);\n this._model.updateSelection(range, this);\n this._cvaOnChange(value);\n }\n }\n _onKeydown(event) {\n // If the user is pressing backspace on an empty end input, move focus back to the start.\n if (event.keyCode === BACKSPACE && !this._elementRef.nativeElement.value) {\n this._rangeInput._startInput.focus();\n }\n super._onKeydown(event);\n }\n}\nMatEndDate.ɵfac = function MatEndDate_Factory(t) { return new (t || MatEndDate)(ɵngcc0.ɵɵdirectiveInject(MAT_DATE_RANGE_INPUT_PARENT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.ErrorStateMatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc10.NgForm, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc10.FormGroupDirective, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8)); };\nMatEndDate.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatEndDate, selectors: [[\"input\", \"matEndDate\", \"\"]], hostAttrs: [\"type\", \"text\", 1, \"mat-date-range-input-inner\"], hostVars: 5, hostBindings: function MatEndDate_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"input\", function MatEndDate_input_HostBindingHandler($event) { return ctx._onInput($event.target.value); })(\"change\", function MatEndDate_change_HostBindingHandler() { return ctx._onChange(); })(\"keydown\", function MatEndDate_keydown_HostBindingHandler($event) { return ctx._onKeydown($event); })(\"blur\", function MatEndDate_blur_HostBindingHandler() { return ctx._onBlur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"disabled\", ctx.disabled);\n ɵngcc0.ɵɵattribute(\"aria-haspopup\", ctx._rangeInput.rangePicker ? \"dialog\" : null)(\"aria-owns\", (ctx._rangeInput.rangePicker == null ? null : ctx._rangeInput.rangePicker.opened) && ctx._rangeInput.rangePicker.id || null)(\"min\", ctx._getMinDate() ? ctx._dateAdapter.toIso8601(ctx._getMinDate()) : null)(\"max\", ctx._getMaxDate() ? ctx._dateAdapter.toIso8601(ctx._getMaxDate()) : null);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: NG_VALUE_ACCESSOR, useExisting: MatEndDate, multi: true },\n { provide: NG_VALIDATORS, useExisting: MatEndDate, multi: true }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatEndDate.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [MAT_DATE_RANGE_INPUT_PARENT,] }] },\n { type: ElementRef },\n { type: ErrorStateMatcher },\n { type: Injector },\n { type: NgForm, decorators: [{ type: Optional }] },\n { type: FormGroupDirective, decorators: [{ type: Optional }] },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatEndDate, [{\n type: Directive,\n args: [{\n selector: 'input[matEndDate]',\n host: {\n 'class': 'mat-date-range-input-inner',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(keydown)': '_onKeydown($event)',\n '[attr.aria-haspopup]': '_rangeInput.rangePicker ? \"dialog\" : null',\n '[attr.aria-owns]': '(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null',\n '[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',\n '[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',\n '(blur)': '_onBlur()',\n 'type': 'text'\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: MatEndDate, multi: true },\n { provide: NG_VALIDATORS, useExisting: MatEndDate, multi: true }\n ]\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DATE_RANGE_INPUT_PARENT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc2.ErrorStateMatcher }, { type: ɵngcc0.Injector }, { type: ɵngcc10.NgForm, decorators: [{\n type: Optional\n }] }, { type: ɵngcc10.FormGroupDirective, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_FORMATS]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDateRangePicker\"). We can change this to a\n// directive if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the date range picker popup/dialog. */\nclass MatDateRangePicker extends MatDatepickerBase {\n _forwardContentValues(instance) {\n super._forwardContentValues(instance);\n const input = this._datepickerInput;\n if (input) {\n instance.comparisonStart = input.comparisonStart;\n instance.comparisonEnd = input.comparisonEnd;\n }\n }\n}\nMatDateRangePicker.ɵfac = function MatDateRangePicker_Factory(t) { return ɵMatDateRangePicker_BaseFactory(t || MatDateRangePicker); };\nMatDateRangePicker.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDateRangePicker, selectors: [[\"mat-date-range-picker\"]], exportAs: [\"matDateRangePicker\"], features: [ɵngcc0.ɵɵProvidersFeature([MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function MatDateRangePicker_Template(rf, ctx) { }, encapsulation: 2, changeDetection: 0 });\nconst ɵMatDateRangePicker_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatDateRangePicker);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDateRangePicker, [{\n type: Component,\n args: [{\n selector: 'mat-date-range-picker',\n template: '',\n exportAs: 'matDateRangePicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet nextUniqueId = 0;\nclass MatDateRangeInput {\n constructor(_changeDetectorRef, _elementRef, control, _dateAdapter, _formField) {\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._dateAdapter = _dateAdapter;\n this._formField = _formField;\n /** Emits when the input's state has changed. */\n this.stateChanges = new Subject();\n /** Unique ID for the input. */\n this.id = `mat-date-range-input-${nextUniqueId++}`;\n /** Whether the control is focused. */\n this.focused = false;\n /** Name of the form control. */\n this.controlType = 'mat-date-range-input';\n this._groupDisabled = false;\n /** Value for the `aria-describedby` attribute of the inputs. */\n this._ariaDescribedBy = null;\n /** Separator text to be shown between the inputs. */\n this.separator = '–';\n /** Start of the comparison range that should be shown in the calendar. */\n this.comparisonStart = null;\n /** End of the comparison range that should be shown in the calendar. */\n this.comparisonEnd = null;\n /** Emits when the input's state changes. */\n this._stateChanges = new Subject();\n if (!_dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n // TODO(crisbeto): remove `as any` after #18206 lands.\n this.ngControl = control;\n }\n /** Current value of the range input. */\n get value() {\n return this._model ? this._model.selection : null;\n }\n /** Whether the control's label should float. */\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n /**\n * Implemented as a part of `MatFormFieldControl`.\n * Set the placeholder attribute on `matStartDate` and `matEndDate`.\n * @docs-private\n */\n get placeholder() {\n var _a, _b;\n const start = ((_a = this._startInput) === null || _a === void 0 ? void 0 : _a._getPlaceholder()) || '';\n const end = ((_b = this._endInput) === null || _b === void 0 ? void 0 : _b._getPlaceholder()) || '';\n return (start || end) ? `${start} ${this.separator} ${end}` : '';\n }\n /** The range picker that this input is associated with. */\n get rangePicker() { return this._rangePicker; }\n set rangePicker(rangePicker) {\n if (rangePicker) {\n this._model = rangePicker._registerInput(this);\n this._rangePicker = rangePicker;\n this._registerModel(this._model);\n }\n }\n /** Whether the input is required. */\n get required() { return !!this._required; }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n }\n /** Function that can be used to filter out dates within the date range picker. */\n get dateFilter() { return this._dateFilter; }\n set dateFilter(value) {\n this._dateFilter = value;\n this._revalidate();\n }\n /** The minimum valid date. */\n get min() { return this._min; }\n set min(value) {\n this._min = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._revalidate();\n }\n /** The maximum valid date. */\n get max() { return this._max; }\n set max(value) {\n this._max = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._revalidate();\n }\n /** Whether the input is disabled. */\n get disabled() {\n return (this._startInput && this._endInput) ?\n (this._startInput.disabled && this._endInput.disabled) :\n this._groupDisabled;\n }\n set disabled(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this._groupDisabled) {\n this._groupDisabled = newValue;\n this._stateChanges.next(undefined);\n }\n }\n /** Whether the input is in an error state. */\n get errorState() {\n if (this._startInput && this._endInput) {\n return this._startInput.errorState || this._endInput.errorState;\n }\n return false;\n }\n /** Whether the datepicker input is empty. */\n get empty() {\n const startEmpty = this._startInput ? this._startInput.isEmpty() : false;\n const endEmpty = this._endInput ? this._endInput.isEmpty() : false;\n return startEmpty && endEmpty;\n }\n /**\n * Implemented as a part of `MatFormFieldControl`.\n * @docs-private\n */\n setDescribedByIds(ids) {\n this._ariaDescribedBy = ids.length ? ids.join(' ') : null;\n }\n /**\n * Implemented as a part of `MatFormFieldControl`.\n * @docs-private\n */\n onContainerClick() {\n if (!this.focused && !this.disabled) {\n if (!this._model || !this._model.selection.start) {\n this._startInput.focus();\n }\n else {\n this._endInput.focus();\n }\n }\n }\n ngAfterContentInit() {\n if (!this._startInput) {\n throw Error('mat-date-range-input must contain a matStartDate input');\n }\n if (!this._endInput) {\n throw Error('mat-date-range-input must contain a matEndDate input');\n }\n if (this._model) {\n this._registerModel(this._model);\n }\n // We don't need to unsubscribe from this, because we\n // know that the input streams will be completed on destroy.\n merge(this._startInput.stateChanges, this._endInput.stateChanges).subscribe(() => {\n this._stateChanges.next(undefined);\n });\n }\n ngOnChanges() {\n this._stateChanges.next(undefined);\n }\n ngOnDestroy() {\n this.stateChanges.complete();\n this._stateChanges.unsubscribe();\n }\n /** Gets the date at which the calendar should start. */\n getStartValue() {\n return this.value ? this.value.start : null;\n }\n /** Gets the input's theme palette. */\n getThemePalette() {\n return this._formField ? this._formField.color : undefined;\n }\n /** Gets the element to which the calendar overlay should be attached. */\n getConnectedOverlayOrigin() {\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n }\n /** Gets the value that is used to mirror the state input. */\n _getInputMirrorValue() {\n return this._startInput ? this._startInput.getMirrorValue() : '';\n }\n /** Whether the input placeholders should be hidden. */\n _shouldHidePlaceholders() {\n return this._startInput ? !this._startInput.isEmpty() : false;\n }\n /** Handles the value in one of the child inputs changing. */\n _handleChildValueChange() {\n this.stateChanges.next(undefined);\n this._changeDetectorRef.markForCheck();\n }\n /** Opens the date range picker associated with the input. */\n _openDatepicker() {\n if (this._rangePicker) {\n this._rangePicker.open();\n }\n }\n /** Whether the separate text should be hidden. */\n _shouldHideSeparator() {\n return (!this._formField || this._formField._hideControlPlaceholder()) && this.empty;\n }\n /** Gets the value for the `aria-labelledby` attribute of the inputs. */\n _getAriaLabelledby() {\n const formField = this._formField;\n return formField && formField._hasFloatingLabel() ? formField._labelId : null;\n }\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n _getValidDateOrNull(obj) {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n /** Re-runs the validators on the start/end inputs. */\n _revalidate() {\n if (this._startInput) {\n this._startInput._validatorOnChange();\n }\n if (this._endInput) {\n this._endInput._validatorOnChange();\n }\n }\n /** Registers the current date selection model with the start/end inputs. */\n _registerModel(model) {\n if (this._startInput) {\n this._startInput._registerModel(model);\n }\n if (this._endInput) {\n this._endInput._registerModel(model);\n }\n }\n}\nMatDateRangeInput.ɵfac = function MatDateRangeInput_Factory(t) { return new (t || MatDateRangeInput)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc10.ControlContainer, 10), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateAdapter, 8), ɵngcc0.ɵɵdirectiveInject(MAT_FORM_FIELD, 8)); };\nMatDateRangeInput.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDateRangeInput, selectors: [[\"mat-date-range-input\"]], contentQueries: function MatDateRangeInput_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatStartDate, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatEndDate, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._startInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._endInput = _t.first);\n } }, hostAttrs: [\"role\", \"group\", 1, \"mat-date-range-input\"], hostVars: 5, hostBindings: function MatDateRangeInput_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", null)(\"aria-labelledby\", ctx._getAriaLabelledby())(\"aria-describedby\", ctx._ariaDescribedBy);\n ɵngcc0.ɵɵclassProp(\"mat-date-range-input-hide-placeholders\", ctx._shouldHidePlaceholders());\n } }, inputs: { separator: \"separator\", comparisonStart: \"comparisonStart\", comparisonEnd: \"comparisonEnd\", rangePicker: \"rangePicker\", required: \"required\", dateFilter: \"dateFilter\", min: \"min\", max: \"max\", disabled: \"disabled\" }, exportAs: [\"matDateRangeInput\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: MatFormFieldControl, useExisting: MatDateRangeInput },\n { provide: MAT_DATE_RANGE_INPUT_PARENT, useExisting: MatDateRangeInput },\n ]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c6, decls: 9, vars: 4, consts: [[\"cdkMonitorSubtreeFocus\", \"\", 1, \"mat-date-range-input-container\", 3, \"cdkFocusChange\"], [1, \"mat-date-range-input-start-wrapper\"], [\"aria-hidden\", \"true\", 1, \"mat-date-range-input-mirror\"], [1, \"mat-date-range-input-separator\"], [1, \"mat-date-range-input-end-wrapper\"]], template: function MatDateRangeInput_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c5);\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵlistener(\"cdkFocusChange\", function MatDateRangeInput_Template_div_cdkFocusChange_0_listener($event) { return ctx.focused = $event !== null; });\n ɵngcc0.ɵɵelementStart(1, \"div\", 1);\n ɵngcc0.ɵɵprojection(2);\n ɵngcc0.ɵɵelementStart(3, \"span\", 2);\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"span\", 3);\n ɵngcc0.ɵɵtext(6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"div\", 4);\n ɵngcc0.ɵɵprojection(8, 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate(ctx._getInputMirrorValue());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"mat-date-range-input-separator-hidden\", ctx._shouldHideSeparator());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.separator);\n } }, directives: [ɵngcc5.CdkMonitorFocus], styles: [\".mat-date-range-input{display:block;width:100%}.mat-date-range-input-container{display:flex;align-items:center}.mat-date-range-input-separator{transition:opacity 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);margin:0 4px}.mat-date-range-input-separator-hidden{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:0;transition:none}.mat-date-range-input-inner{font:inherit;background:transparent;color:currentColor;border:none;outline:none;padding:0;margin:0;vertical-align:bottom;text-align:inherit;-webkit-appearance:none;width:100%}.mat-date-range-input-inner::-ms-clear,.mat-date-range-input-inner::-ms-reveal{display:none}.mat-date-range-input-inner::placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-moz-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-webkit-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner:-ms-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-date-range-input-mirror{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;visibility:hidden;white-space:nowrap;display:inline-block;min-width:2px}.mat-date-range-input-start-wrapper{position:relative;overflow:hidden;max-width:calc(50% - 4px)}.mat-date-range-input-start-wrapper .mat-date-range-input-inner{position:absolute;top:0;left:0}.mat-date-range-input-end-wrapper{flex-grow:1;max-width:calc(50% - 4px)}.mat-form-field-type-mat-date-range-input .mat-form-field-infix{width:200px}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatDateRangeInput.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: ElementRef },\n { type: ControlContainer, decorators: [{ type: Optional }, { type: Self }] },\n { type: DateAdapter, decorators: [{ type: Optional }] },\n { type: MatFormField, decorators: [{ type: Optional }, { type: Inject, args: [MAT_FORM_FIELD,] }] }\n];\nMatDateRangeInput.propDecorators = {\n rangePicker: [{ type: Input }],\n required: [{ type: Input }],\n dateFilter: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n disabled: [{ type: Input }],\n separator: [{ type: Input }],\n comparisonStart: [{ type: Input }],\n comparisonEnd: [{ type: Input }],\n _startInput: [{ type: ContentChild, args: [MatStartDate,] }],\n _endInput: [{ type: ContentChild, args: [MatEndDate,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDateRangeInput, [{\n type: Component,\n args: [{\n selector: 'mat-date-range-input',\n template: \"<div\\n class=\\\"mat-date-range-input-container\\\"\\n cdkMonitorSubtreeFocus\\n (cdkFocusChange)=\\\"focused = $event !== null\\\">\\n <div class=\\\"mat-date-range-input-start-wrapper\\\">\\n <ng-content select=\\\"input[matStartDate]\\\"></ng-content>\\n <span\\n class=\\\"mat-date-range-input-mirror\\\"\\n aria-hidden=\\\"true\\\">{{_getInputMirrorValue()}}</span>\\n </div>\\n\\n <span\\n class=\\\"mat-date-range-input-separator\\\"\\n [class.mat-date-range-input-separator-hidden]=\\\"_shouldHideSeparator()\\\">{{separator}}</span>\\n\\n <div class=\\\"mat-date-range-input-end-wrapper\\\">\\n <ng-content select=\\\"input[matEndDate]\\\"></ng-content>\\n </div>\\n</div>\\n\\n\",\n exportAs: 'matDateRangeInput',\n host: {\n 'class': 'mat-date-range-input',\n '[class.mat-date-range-input-hide-placeholders]': '_shouldHidePlaceholders()',\n '[attr.id]': 'null',\n 'role': 'group',\n '[attr.aria-labelledby]': '_getAriaLabelledby()',\n '[attr.aria-describedby]': '_ariaDescribedBy'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: MatFormFieldControl, useExisting: MatDateRangeInput },\n { provide: MAT_DATE_RANGE_INPUT_PARENT, useExisting: MatDateRangeInput },\n ],\n styles: [\".mat-date-range-input{display:block;width:100%}.mat-date-range-input-container{display:flex;align-items:center}.mat-date-range-input-separator{transition:opacity 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);margin:0 4px}.mat-date-range-input-separator-hidden{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:0;transition:none}.mat-date-range-input-inner{font:inherit;background:transparent;color:currentColor;border:none;outline:none;padding:0;margin:0;vertical-align:bottom;text-align:inherit;-webkit-appearance:none;width:100%}.mat-date-range-input-inner::-ms-clear,.mat-date-range-input-inner::-ms-reveal{display:none}.mat-date-range-input-inner::placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-moz-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-webkit-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner:-ms-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-date-range-input-mirror{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;visibility:hidden;white-space:nowrap;display:inline-block;min-width:2px}.mat-date-range-input-start-wrapper{position:relative;overflow:hidden;max-width:calc(50% - 4px)}.mat-date-range-input-start-wrapper .mat-date-range-input-inner{position:absolute;top:0;left:0}.mat-date-range-input-end-wrapper{flex-grow:1;max-width:calc(50% - 4px)}.mat-form-field-type-mat-date-range-input .mat-form-field-infix{width:200px}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: ɵngcc10.ControlContainer, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: ɵngcc2.DateAdapter, decorators: [{\n type: Optional\n }] }, { type: ɵngcc9.MatFormField, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD]\n }] }]; }, { separator: [{\n type: Input\n }], comparisonStart: [{\n type: Input\n }], comparisonEnd: [{\n type: Input\n }], rangePicker: [{\n type: Input\n }], required: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], disabled: [{\n type: Input\n }], _startInput: [{\n type: ContentChild,\n args: [MatStartDate]\n }], _endInput: [{\n type: ContentChild,\n args: [MatEndDate]\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 MatDatepickerModule {\n}\nMatDatepickerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatDatepickerModule });\nMatDatepickerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatDatepickerModule_Factory(t) { return new (t || MatDatepickerModule)(); }, providers: [\n MatDatepickerIntl,\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n useClass: DefaultMatCalendarRangeStrategy\n }\n ], imports: [[\n CommonModule,\n MatButtonModule,\n MatDialogModule,\n OverlayModule,\n A11yModule,\n PortalModule,\n ], CdkScrollableModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatDatepickerModule, { declarations: function () { return [MatCalendar, MatCalendarBody, MatDatepicker, MatDatepickerContent, MatDatepickerInput, MatDatepickerToggle, MatDatepickerToggleIcon, MatMonthView, MatYearView, MatMultiYearView, MatCalendarHeader, MatDateRangeInput, MatStartDate, MatEndDate, MatDateRangePicker]; }, imports: function () { return [CommonModule,\n MatButtonModule,\n MatDialogModule,\n OverlayModule,\n A11yModule,\n PortalModule]; }, exports: function () { return [CdkScrollableModule, MatCalendar, MatCalendarBody, MatDatepicker, MatDatepickerContent, MatDatepickerInput, MatDatepickerToggle, MatDatepickerToggleIcon, MatMonthView, MatYearView, MatMultiYearView, MatCalendarHeader, MatDateRangeInput, MatStartDate, MatEndDate, MatDateRangePicker]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDatepickerModule, [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n MatButtonModule,\n MatDialogModule,\n OverlayModule,\n A11yModule,\n PortalModule,\n ],\n exports: [\n CdkScrollableModule,\n MatCalendar,\n MatCalendarBody,\n MatDatepicker,\n MatDatepickerContent,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatDatepickerToggleIcon,\n MatMonthView,\n MatYearView,\n MatMultiYearView,\n MatCalendarHeader,\n MatDateRangeInput,\n MatStartDate,\n MatEndDate,\n MatDateRangePicker,\n ],\n declarations: [\n MatCalendar,\n MatCalendarBody,\n MatDatepicker,\n MatDatepickerContent,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatDatepickerToggleIcon,\n MatMonthView,\n MatYearView,\n MatMultiYearView,\n MatCalendarHeader,\n MatDateRangeInput,\n MatStartDate,\n MatEndDate,\n MatDateRangePicker,\n ],\n providers: [\n MatDatepickerIntl,\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n useClass: DefaultMatCalendarRangeStrategy\n }\n ],\n entryComponents: [\n MatDatepickerContent,\n MatCalendarHeader,\n ]\n }]\n }], null, null); })();\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 { DateRange, DefaultMatCalendarRangeStrategy, MAT_DATEPICKER_SCROLL_STRATEGY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_DATEPICKER_VALIDATORS, MAT_DATEPICKER_VALUE_ACCESSOR, MAT_DATE_RANGE_SELECTION_STRATEGY, MAT_RANGE_DATE_SELECTION_MODEL_FACTORY, MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER, MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY, MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, MatCalendar, MatCalendarBody, MatCalendarCell, MatCalendarHeader, MatDateRangeInput, MatDateRangePicker, MatDateSelectionModel, MatDatepicker, MatDatepickerContent, MatDatepickerInput, MatDatepickerInputEvent, MatDatepickerIntl, MatDatepickerModule, MatDatepickerToggle, MatDatepickerToggleIcon, MatEndDate, MatMonthView, MatMultiYearView, MatRangeDateSelectionModel, MatSingleDateSelectionModel, MatStartDate, MatYearView, matDatepickerAnimations, yearsPerPage, yearsPerRow, MatDatepickerBase as ɵangular_material_src_material_datepicker_datepicker_a, MatDatepickerInputBase as ɵangular_material_src_material_datepicker_datepicker_b, MAT_DATE_RANGE_INPUT_PARENT as ɵangular_material_src_material_datepicker_datepicker_c };\n\n//# sourceMappingURL=datepicker.js.map","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ImageZoomComponent} from './image-zoom.component';\nimport {ImageZoomOverlayComponent} from './image-zoom-overlay/image-zoom-overlay.component';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\n\n@NgModule({\n declarations: [ImageZoomComponent, ImageZoomOverlayComponent],\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n ],\n exports: [\n ImageZoomComponent,\n ]\n})\nexport class ImageZoomModule {\n}\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {Settings} from '../core/config/settings.service';\r\nimport {CurrentUser} from '../auth/current-user';\r\nimport {BreakpointsService} from '../core/ui/breakpoints.service';\r\nimport {NavigationEnd, Router} from '@angular/router';\r\nimport {filter} from 'rxjs/operators';\r\nimport {MenuItem} from '@common/core/ui/custom-menu/menu-item';\r\n\r\n@Component({\r\n selector: 'admin',\r\n templateUrl: './admin.component.html',\r\n styleUrls: ['./admin.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AdminComponent implements OnInit {\r\n public leftColumnIsHidden = false;\r\n public menu = this.generateMenu();\r\n\r\n constructor(\r\n public settings: Settings,\r\n public currentUser: CurrentUser,\r\n public breakpoints: BreakpointsService,\r\n private router: Router,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.leftColumnIsHidden = this.breakpoints.isMobile$.value;\r\n this.menu = this.generateMenu();\r\n\r\n // close left column when navigating between admin pages on mobile\r\n this.router.events\r\n .pipe(filter(e => e instanceof NavigationEnd))\r\n .subscribe(() => {\r\n this.leftColumnIsHidden = this.breakpoints.isMobile$.value;\r\n });\r\n }\r\n\r\n public toggleLeftSidebar() {\r\n this.leftColumnIsHidden = !this.leftColumnIsHidden;\r\n }\r\n\r\n public getCustomSidebarItems() {\r\n return this.settings.get('vebto.admin.pages');\r\n }\r\n\r\n // TODO: refactor this later, so can be changed from menu manager\r\n private generateMenu() {\r\n const items = [\r\n {name: 'analytics', icon: 'pie-chart', permission: 'reports.view', route: 'analytics'},\r\n {name: 'appearance', icon: 'style', permission: 'resources.defaults.permissions.update', route: 'appearance'},\r\n {name: 'settings', icon: 'settings', permission: 'settings.view', route: 'settings'},\r\n\r\n {name: 'plans', icon: 'assignment', permission: 'plans.view', route: 'plans'},\r\n {name: 'subscriptions', icon: 'subscriptions', permission: 'subscriptions.view', route: 'subscriptions'},\r\n\r\n ...this.getCustomSidebarItems(),\r\n\r\n {name: 'users', icon: 'person', permission: 'users.view', route: 'users'},\r\n {name: 'roles', icon: 'people', permission: 'roles.view', route: 'roles'},\r\n {name: 'pages', icon: 'page', permission: 'pages.view', route: 'custom-pages'},\r\n {name: 'tags', icon: 'local-offer', permission: 'tags.view', route: 'tags'},\r\n {name: 'files', icon: 'file', permission: 'files.view', route: 'files'},\r\n {name: 'translations', icon: 'translate', permission: 'localizations.view', route: 'translations'},\r\n ];\r\n\r\n if (this.settings.get('vebto.admin.ads')) {\r\n items.push({name: 'ads', icon: 'ads', permission: 'settings.view', route: 'ads'});\r\n }\r\n \r\n return items.map(item => {\r\n item.type = 'route';\r\n item.label = item.name;\r\n item.action = 'admin/' + item.route;\r\n item.activeExact = false;\r\n item.condition = function(user: CurrentUser, settings: Settings) {\r\n let condition = true;\r\n if (item.name === 'plans' || item.name === 'subscriptions') {\r\n condition = settings.get('billing.enable');\r\n }\r\n return condition && user.hasPermission(item.permission);\r\n };\r\n return item;\r\n }) as MenuItem[];\r\n }\r\n}\r\n","import {AppConfig} from '@common/core/config/app-config';\r\n\r\nexport const COMMON_ADMIN_CONFIG: AppConfig = {\r\n admin: {\r\n tagTypes: [{name: 'custom'}],\r\n pages: [],\r\n }\r\n};\r\n","<material-navbar menuPosition=\"admin-navbar\" color=\"primary\" [showToggleButton]=\"true\" (toggleButtonClick)=\"toggleLeftSidebar()\"></material-navbar>\r\n\r\n<mat-sidenav-container class=\"admin-page-content\">\r\n <mat-sidenav [opened]=\"!leftColumnIsHidden\" [mode]=\"(breakpoints.isMobile$ | async) ? 'over' : 'side'\" [fixedInViewport]=\"true\" [fixedTopGap]=\"70\" class=\"left-column\">\r\n <div class=\"left-column-inner\">\r\n <custom-menu [position]=\"menu\" [vertical]=\"true\"></custom-menu>\r\n <div class=\"version\">\r\n {{'Version:' | trans}} {{settings.get('version')}}\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n\r\n <mat-sidenav-content class=\"content-inner\">\r\n <router-outlet></router-outlet>\r\n </mat-sidenav-content>\r\n</mat-sidenav-container>\r\n","<div class=\"modal-header\">\n <h2 class=\"modal-title\" mat-dialog-title *ngIf=\"data.template\" trans>Update Template Details</h2>\n <h2 class=\"modal-title\" mat-dialog-title *ngIf=\"!data.template\" trans>Create a New Template</h2>\n <button type=\"button\" (click)=\"close()\" class=\"close-button no-style icon-button\"><mat-icon svgIcon=\"close\"></mat-icon></button>\n</div>\n\n<form autocomplete=\"off\" (ngSubmit)=\"confirm()\" [formGroup]=\"form\" ngNativeValidate>\n <div class=\"many-inputs mat-dialog-content\" mat-dialog-content>\n <div class=\"input-container\">\n <label for=\"name\" trans>Name</label>\n <input type=\"text\" id=\"name\" name=\"name\" formControlName=\"name\" required>\n <div class=\"error\" *ngIf=\"errors.name\">{{errors.name}}</div>\n </div>\n\n <div class=\"input-container\">\n <label for=\"category\" trans>Category</label>\n <select id=\"category\" name=\"category\" formControlName=\"category\" required>\n <option [ngValue]=\"category\" *ngFor=\"let category of allCategories\">{{category}}</option>\n </select>\n <div class=\"error\" *ngIf=\"errors.category\">{{errors.category}}</div>\n </div>\n\n <div class=\"input-container\">\n <label for=\"template-file\" trans>Template Zip</label>\n <input type=\"file\" name=\"template-file\" id=\"template-file\" #templateInput (change)=\"setFile('template', templateInput.files)\" [required]=\"!data.template\" accept=\"application/zip\">\n <p trans>Zip of template files. Must contain index.html file which will be used as default page.</p>\n <p trans>(Optional) CSS and JS that should appear in builder code editors should be in \"css/code_editor_styles.css\" and \"js/code_editor_scripts.js\" files.</p>\n <div class=\"error\" *ngIf=\"errors.template\">{{errors.template}}</div>\n </div>\n\n <div class=\"input-container\">\n <label for=\"thumbnail\" trans>Thumbnail</label>\n <input type=\"file\" name=\"thumbnail\" id=\"thumbnail\" #thumbInput (change)=\"setFile('thumbnail', thumbInput.files)\" accept=\"image/*\">\n <div class=\"error\" *ngIf=\"errors.thumbnail\">{{errors.thumbnail}}</div>\n </div>\n\n <div class=\"setting-toggle-container\">\n <mat-slide-toggle formControlName=\"includeBootstrap\" trans>Include Bootstrap</mat-slide-toggle>\n <p trans>Deselect if template already include bootstrap, otherwise styles will be duplicated which might cause issues.</p>\n <div class=\"error\" *ngIf=\"errors.includeBootstrap\">{{errors.includeBootstrap}}</div>\n </div>\n </div>\n\n <div class=\"buttons right mat-dialog-actions\" mat-dialog-actions>\n <button (click)=\"close()\" type=\"button\" mat-button class=\"button cancel\" trans>Cancel</button>\n <button type=\"submit\" class=\"button primary\" mat-raised-button color=\"accent\" [disabled]=\"loading$ | async\">\n <span *ngIf=\"data.template\" trans>Update Template</span>\n <span *ngIf=\"!data.template\" trans>Create Template</span>\n </button>\n </div>\n</form>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit\n} from '@angular/core';\nimport {Toast} from '@common/core/ui/toast.service';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {CrupdateUserModalComponent} from '@common/admin/users/crupdate-user-modal/crupdate-user-modal.component';\nimport {Templates} from '../../../shared/templates/templates.service';\nimport {Theme} from '../../../shared/themes/Theme';\nimport {BuilderTemplate, BuilderTemplateConfig} from '../../../shared/builder-types';\nimport {Themes} from '../../../shared/themes/themes.service';\nimport {Settings} from '@common/core/config/settings.service';\nimport {BackendErrorResponse} from '../../../../common/core/types/backend-error-response';\nimport {FormBuilder} from '@angular/forms';\nimport {BehaviorSubject} from 'rxjs';\nimport {finalize} from 'rxjs/operators';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\ninterface TemplateErrors extends BuilderTemplateConfig{\n template?: string;\n thumbnail?: string;\n}\n\n@Component({\n selector: 'crupdate-template-modal',\n templateUrl: './crupdate-template-modal.component.html',\n styleUrls: ['./crupdate-template-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CrupdateTemplateModalComponent implements OnInit {\n public allCategories: string[] = [];\n public themes: Theme[] = [];\n public loading$ = new BehaviorSubject(false);\n\n public form = this.fb.group({\n name: [''],\n category: [''],\n includeBootstrap: [false],\n });\n\n /**\n * Template file input value.\n */\n public files: {thumbnail?: File, template?: File} = {};\n\n public errors: Partial<TemplateErrors> = {};\n\n constructor(\n private dialogRef: MatDialogRef<CrupdateUserModalComponent>,\n @Inject(MAT_DIALOG_DATA) public data: {template?: BuilderTemplate},\n public templates: Templates,\n private toast: Toast,\n private themesApi: Themes,\n private settings: Settings,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n ) {\n this.allCategories = this.settings.getJson('builder.template_categories', []);\n this.form.get('category').setValue(this.allCategories[0]);\n }\n\n ngOnInit() {\n this.getThemes();\n\n if (this.data.template) {\n this.hydrateModel(this.data.template);\n }\n }\n\n public confirm() {\n this.loading$.next(true);\n let request;\n const payload = this.getPayload();\n\n if (this.data.template) {\n request = this.templates.update(this.data.template.name, payload);\n } else {\n request = this.templates.create(payload);\n }\n\n request\n .pipe(finalize(() => this.loading$.next(false)))\n .subscribe(response => {\n this.close(response.template);\n const action = this.data.template ? 'updated' : 'created';\n this.toast.open('Template has been ' + action);\n }, (errResponse: BackendErrorResponse) => {\n this.errors = errResponse.errors;\n this.cd.markForCheck();\n });\n }\n\n private getPayload() {\n const data = new FormData();\n\n // append template and thumbnail files\n if (this.files.template) {\n data.append('template', this.files.template);\n }\n if (this.files.thumbnail) {\n data.append('thumbnail', this.files.thumbnail);\n }\n\n // append model values\n for (const name in this.form.value) {\n data.append(name, this.form.value[name]);\n }\n\n return data;\n }\n\n public close(data?: any) {\n this.dialogRef.close(data);\n }\n\n private hydrateModel(template: BuilderTemplate) {\n this.form.patchValue(template.config);\n }\n\n public setFile(type: 'template'|'thumbnail', files: FileList) {\n this.files[type] = files.item(0);\n this.errors = {};\n }\n\n private getThemes() {\n this.themesApi.all().subscribe(response => {\n this.themes = response.themes;\n });\n }\n}\n","export function removeNullFromObject<T>(obj: T): T {\r\n const copy = {...obj};\r\n Object.keys(copy).forEach(key => (copy[key] == null || copy[key] === '') && delete copy[key]);\r\n return copy;\r\n}\r\n","import {ConfirmModalData} from '../core/ui/confirm-modal/confirm-modal.component';\r\n\r\nexport const DELETE_RESOURCE_MESSAGE: ConfirmModalData = {\r\n title: `Delete :resource`,\r\n body: `Are you sure you want to delete selected :resource?`,\r\n ok: 'Delete'\r\n};\r\n","import * as Dot from \"dot-object\";\r\nimport {_isNumberValue} from '@angular/cdk/coercion';\r\nimport {Model} from '@common/core/types/models/model';\r\n\r\nconst MAX_SAFE_INTEGER = 9007199254740991;\r\n\r\nexport function sortDatatableData<T extends Model>(data: T[], orderBy: string, orderDir: string): T[] {\r\n return data.sort((a, b) => {\r\n let valueA = sortingDataAccessor(a, orderBy);\r\n let valueB = sortingDataAccessor(b, orderBy);\r\n\r\n // If there are data in the column that can be converted to a number,\r\n // it must be ensured that the rest of the data\r\n // is of the same type so as not to order incorrectly.\r\n const valueAType = typeof valueA;\r\n const valueBType = typeof valueB;\r\n\r\n if (valueAType !== valueBType) {\r\n if (valueAType === 'number') {\r\n valueA += '';\r\n }\r\n if (valueBType === 'number') {\r\n valueB += '';\r\n }\r\n }\r\n\r\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\r\n // one value exists while the other doesn't. In this case, existing value should come last.\r\n // This avoids inconsistent results when comparing values to undefined/null.\r\n // If neither value exists, return 0 (equal).\r\n let comparatorResult = 0;\r\n if (valueA != null && valueB != null) {\r\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\r\n if (valueA > valueB) {\r\n comparatorResult = 1;\r\n } else if (valueA < valueB) {\r\n comparatorResult = -1;\r\n }\r\n } else if (valueA != null) {\r\n comparatorResult = 1;\r\n } else if (valueB != null) {\r\n comparatorResult = -1;\r\n }\r\n\r\n return comparatorResult * (orderDir === 'asc' ? 1 : -1);\r\n });\r\n}\r\n\r\n/**\r\n * Data accessor function that is used for accessing data properties for sorting through\r\n * the default sortData function.\r\n * This default function assumes that the sort header IDs (which defaults to the column name)\r\n * matches the data's properties (e.g. column Xyz represents data['Xyz']).\r\n * May be set to a custom function for different behavior.\r\n */\r\nfunction sortingDataAccessor(data: object, sortHeaderId: string): string {\r\n const value = Dot.pick(sortHeaderId, data);\r\n\r\n if (_isNumberValue(value)) {\r\n const numberValue = Number(value);\r\n\r\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\r\n // leave them as strings. For more info: https://goo.gl/y5vbSg\r\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\r\n }\r\n\r\n // if (Array.isArray(value)) {\r\n // return value.reduce((prev, curr) => prev += objectToStr(curr));\r\n // }\r\n\r\n return value;\r\n}\r\n","import {Injectable} from '@angular/core';\nimport {BehaviorSubject, combineLatest, Subscription} from 'rxjs';\nimport {Paginator} from '../shared/paginator.service';\nimport {debounceTime, filter, map, pairwise, skip, tap} from 'rxjs/operators';\nimport {DatatableFilters, DatatableFilterValue} from './types/datatable-filters';\nimport {DatatableSort} from './types/datatable-sort';\nimport {PaginationParams} from '../core/types/pagination/pagination-params';\nimport {removeNullFromObject} from '../core/utils/remove-null-from-object';\nimport {ComponentType} from '@angular/cdk/portal';\nimport {MatDialogConfig} from '@angular/material/dialog';\nimport {Modal} from '../core/ui/dialogs/modal.service';\nimport {ConfirmModalComponent} from '../core/ui/confirm-modal/confirm-modal.component';\nimport {DELETE_RESOURCE_MESSAGE} from './delete-resource-message';\nimport {PaginationResponse} from '../core/types/pagination/pagination-response';\nimport {sortDatatableData} from '@common/datatable/utils/sort-datatable-data';\nimport {Model} from '@common/core/types/models/model';\nimport {filterDatatableData} from '@common/datatable/utils/filter-datatable-data';\nimport {Router} from '@angular/router';\nimport {AppHttpClient} from '@common/core/http/app-http-client.service';\nimport {LocalStorage} from '../core/services/local-storage.service';\n\nexport type DatatableStaticParams = Record<string, string|number|boolean|string[]>;\n\ninterface DatatableConfig<T> {\n uri?: string;\n staticParams?: DatatableStaticParams;\n initialData?: PaginationResponse<T>|T[];\n disableSort?: boolean;\n infiniteScroll?: boolean;\n}\n\n@Injectable()\nexport class DatatableService<T extends Model> {\n public sort$ = new BehaviorSubject<DatatableSort>({});\n public filters$ = new BehaviorSubject<DatatableFilters>({});\n public staticParams$ = new BehaviorSubject<DatatableStaticParams>({});\n public paginator = new Paginator<T>(this.router, this.http, this.localStorage);\n private paginatorSub: Subscription;\n private mainSub: Subscription;\n private ignoreNextParamChange = false;\n private originalData$ = new BehaviorSubject<T[]>([]);\n public data$ = new BehaviorSubject<T[]>([]);\n public selectedRows$ = new BehaviorSubject<number[]>([]);\n public config: DatatableConfig<T>;\n\n constructor(\n protected modal: Modal,\n protected router: Router,\n protected http: AppHttpClient,\n protected localStorage: LocalStorage,\n ) {}\n\n get data() {\n return this.data$.value;\n }\n\n set data(data: T[]) {\n const tableData = [...data];\n this.originalData$.next(tableData);\n this.data$.next(tableData);\n\n // Reset filters and sort without trigger data reload via pagination\n this.ignoreNextParamChange = true;\n this.reset();\n }\n\n public init(config: DatatableConfig<T> = {}) {\n this.config = config;\n this.staticParams$.next({...this.staticParams$.value, ...config.staticParams});\n if (config.uri) {\n this.connectToPaginator();\n } else if (config.initialData) {\n this.data = config.initialData as T[];\n }\n\n this.mainSub = combineLatest([this.sort$, this.filters$, this.staticParams$])\n .pipe(debounceTime(0), map(params => Object.assign({}, ...params))).subscribe((params: PaginationParams) => {\n if (this.ignoreNextParamChange) {\n return this.ignoreNextParamChange = false;\n }\n params = removeNullFromObject(params);\n Object.entries(params).forEach(([key, value]) => {\n if (typeof value === 'object' && value.id) {\n params[`${key}Id`] = value.id;\n delete params[key];\n }\n });\n if (this.config.uri) {\n this.paginator.paginate(params, this.config.uri, this.config.initialData as PaginationResponse<T>);\n } else if (Object.keys(params).length && this.data.length) {\n this.applyLocalTransforms(params);\n }\n });\n\n return this;\n }\n\n private connectToPaginator() {\n this.paginatorSub = this.paginator.response$.pipe(pairwise()).subscribe(([prev, current]) => {\n // append data instead of overriding with next page data (infinite scroll).\n // if page did not change, we can assume that it was filter or sort\n // change and we should use only new data, even on infinite scroll\n const data = this.config.infiniteScroll && prev?.pagination?.current_page !== current.pagination.current_page ?\n [...this.data$.value, ...current.pagination.data] :\n current.pagination.data;\n this.data$.next(data);\n });\n }\n\n private applyLocalTransforms(params: PaginationParams) {\n let data = [...this.originalData$.value];\n if (params.query) {\n data = filterDatatableData<T>(data, params.query);\n }\n if (params.orderBy && params.orderDir) {\n data = sortDatatableData<T>(data, params.orderBy, params.orderDir);\n }\n this.data$.next(data);\n }\n\n public addFilter(key: keyof DatatableFilters, value: DatatableFilterValue) {\n this.filters$.next({\n ...this.filters$.value,\n [key]: value,\n });\n }\n\n public removeFilter(key: keyof DatatableFilters) {\n const filters = {...this.filters$.value};\n delete filters[key];\n this.filters$.next(filters);\n }\n\n public reset(staticParams: DatatableStaticParams = null) {\n this.filters$.next({});\n this.sort$.next({});\n this.selectedRows$.next([]);\n if (staticParams) {\n this.staticParams$.next(staticParams);\n }\n }\n\n public openCrupdateResourceModal(cmp: ComponentType<any>, data?: object, config?: MatDialogConfig) {\n return this.modal.open(cmp, data, config).beforeClosed()\n .pipe(\n filter(modifiedResource => !!modifiedResource),\n tap(() => this.reset())\n );\n }\n\n public confirmResourceDeletion(resource: string) {\n const data = {...DELETE_RESOURCE_MESSAGE, replacements: {resource}};\n return this.modal.open(ConfirmModalComponent, data).afterClosed()\n .pipe(filter(confirmed => confirmed));\n }\n\n public getCurrentParams() {\n return {\n ...this.sort$.value,\n ...this.filters$.value,\n ...this.staticParams$.value,\n ...this.paginator.params,\n };\n }\n\n public destroy() {\n this.paginatorSub?.unsubscribe();\n this.mainSub?.unsubscribe();\n }\n}\n","import {Model} from '../../core/types/models/model';\r\n\r\nexport function filterDatatableData<T extends Model>(data: T[], filter: string): T[] {\r\n return data.filter(obj => filterPredicate(obj, filter));\r\n}\r\n/**\r\n * Checks if a data object matches the data source's filter string. By default, each data object\r\n * is converted to a string of its properties and returns true if the filter has\r\n * at least one occurrence in that string. By default, the filter string has its whitespace\r\n * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\r\n * filter matching.\r\n * @param data Data object used to check against the filter.\r\n * @param filter Filter string that has been set on the data source.\r\n * @returns Whether the filter matches against the data\r\n */\r\nfunction filterPredicate(data: object, filter: string): boolean {\r\n // Transform the data into a lowercase string of all property values.\r\n const dataStr = objectToStr(data);\r\n\r\n // Transform the filter by converting it to lowercase and removing whitespace.\r\n const transformedFilter = filter.trim().toLowerCase();\r\n\r\n return dataStr.indexOf(transformedFilter) !== -1;\r\n}\r\n\r\nexport function objectToStr(obj: object) {\r\n return Object.keys(obj).reduce((currentTerm: string, key: string) => {\r\n // Use an obscure Unicode character to delimit the words in the concatenated string.\r\n // This avoids matches where the values of two columns combined will match the user's query\r\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\r\n // that has a very low chance of being typed in by somebody in a text field. This one in\r\n // particular is \"White up-pointing triangle with dot\" from\r\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\r\n const term = (obj[key] && typeof obj[key] === 'object') ?\r\n objectToStr(obj[key]) :\r\n obj[key];\r\n return currentTerm + term + '◬';\r\n }, '').toLowerCase();\r\n}\r\n","import { ConnectedPosition } from '@angular/cdk/overlay';\r\n\r\nexport const LEFT_POSITION: ConnectedPosition[] = [\r\n {originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: 5},\r\n {originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 5},\r\n];\r\n","<header>\n <mat-icon svgIcon=\"filter-list\"></mat-icon>\n <span trans>Filters</span>\n</header>\n\n<form class=\"body\" (ngSubmit)=\"close()\">\n <ng-container *ngTemplateOutlet=\"data.filters\"></ng-container>\n</form>\n\n<footer>\n <button (click)=\"close()\" type=\"button\" mat-button color=\"accent\" trans>Close</button>\n</footer>\n","import {ChangeDetectionStrategy, Component, ElementRef, Inject, TemplateRef} from '@angular/core';\nimport {OVERLAY_PANEL_DATA} from '../../core/ui/overlay-panel/overlay-panel-data';\nimport {OverlayPanelRef} from '../../core/ui/overlay-panel/overlay-panel-ref';\nimport {matDialogAnimations} from '@angular/material/dialog';\n\n@Component({\n selector: 'datatable-filters-panel',\n templateUrl: './datatable-filters-panel.component.html',\n styleUrls: ['./datatable-filters-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[@dialogContainer]': `'enter'`\n },\n animations: [\n matDialogAnimations.dialogContainer,\n ]\n})\nexport class DatatableFiltersPanelComponent {\n\n constructor(\n @Inject(OVERLAY_PANEL_DATA) public data: {filters: TemplateRef<ElementRef>},\n private overlayPanelRef: OverlayPanelRef,\n ) {}\n\n public close() {\n this.overlayPanelRef.close();\n }\n}\n","<div class=\"input-container search-input-container\">\n <input type=\"text\" class=\"search-input\" [placeholder]=\"placeholder | trans\" [formControl]=\"searchControl\">\n <mat-icon svgIcon=\"search\" *ngIf=\"!hideIcon\"></mat-icon>\n</div>\n","import {ChangeDetectionStrategy, Component, Input, OnInit} from '@angular/core';\nimport {FormControl} from '@angular/forms';\nimport {debounceTime, distinctUntilChanged} from 'rxjs/operators';\nimport {DatatableService} from '../../datatable.service';\nimport {Model} from '@common/core/types/models/model';\nimport {ActivatedRoute} from '@angular/router';\n\n@Component({\n selector: 'datatable-header-search-input',\n templateUrl: './datatable-header-search-input.component.html',\n styleUrls: ['./datatable-header-search-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatatableHeaderSearchInputComponent implements OnInit {\n public searchControl = new FormControl(this.route.snapshot.queryParams.query);\n @Input() placeholder: string;\n @Input() hideIcon = false;\n\n constructor(\n public datatable: DatatableService<Model>,\n private route: ActivatedRoute,\n ) {}\n\n ngOnInit() {\n this.searchControl.valueChanges\n .pipe(debounceTime(400), distinctUntilChanged())\n .subscribe(query => {\n this.datatable.addFilter('query', query);\n });\n }\n}\n","<mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"datatable.paginator && datatable.paginator.loading$ | async\"></mat-progress-bar>\n<div class=\"left-column\">\n <div class=\"default-left-content\" *ngIf=\"!showSelectedActions || !numberOfRowsSelected\">\n <ng-content select=\"[leftContent]\"></ng-content>\n </div>\n <div class=\"selected-left-content capitalize\" *ngIf=\"showSelectedActions && numberOfRowsSelected\">\n {{numberOfRowsSelected}} {{ pluralResourceName }} {{ 'Selected' | trans }}\n </div>\n</div>\n<div class=\"right-column\">\n <div class=\"default-right-content\" *ngIf=\"!showSelectedActions || !numberOfRowsSelected\">\n <ng-container *ngIf=\"filterPanelTemplate\">\n <mat-chip-list aria-label=\"Active Filters\" class=\"filter-chip-list\">\n <mat-chip *ngFor=\"let filter of filters$ | async | keyvalue\" [removable]=\"true\" [selectable]=\"false\" (removed)=\"datatable.removeFilter(filter.key)\">\n {{filter.key}}: {{isModel(filter.value) ? (filter.value.name || filter.value.display_name) : filter.value}}\n <mat-icon matChipRemove svgIcon=\"cancel\"></mat-icon>\n </mat-chip>\n </mat-chip-list>\n <button (click)=\"openFiltersPanel()\" class=\"filter-button\" [class.active]=\"filterPanelRef\" #filterButton mat-icon-button>\n <mat-icon svgIcon=\"filter-list\"></mat-icon>\n </button>\n </ng-container>\n <datatable-header-search-input placeholder=\"Search {{ pluralResourceName }}\"></datatable-header-search-input>\n </div>\n <div class=\"selected-right-actions\" *ngIf=\"showSelectedActions && numberOfRowsSelected\">\n <ng-content select=\"[rightContent]\"></ng-content>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport {DatatableService} from '../datatable.service';\nimport {Model} from '../../core/types/models/model';\nimport {Subscription} from 'rxjs';\nimport {OverlayPanel} from '../../core/ui/overlay-panel/overlay-panel.service';\nimport {LEFT_POSITION} from '../../core/ui/overlay-panel/positions/left-position';\nimport {OverlayPanelRef} from '../../core/ui/overlay-panel/overlay-panel-ref';\nimport {DatatableFiltersPanelComponent} from '../datatable-filters-panel/datatable-filters-panel.component';\nimport {map} from 'rxjs/operators';\nimport {removeNullFromObject} from '../../core/utils/remove-null-from-object';\nimport {DatatableFilterValue} from '../types/datatable-filters';\n\n@Component({\n selector: 'datatable-header',\n templateUrl: './datatable-header.component.html',\n styleUrls: ['./datatable-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatatableHeaderComponent implements OnInit, OnDestroy {\n @HostBinding('class.rows-selected') public numberOfRowsSelected: number;\n @ContentChild('tableFilters') filterPanelTemplate: TemplateRef<ElementRef>;\n @ViewChild('filterButton', { read: ElementRef }) filterButton: ElementRef<HTMLButtonElement>;\n @Input() pluralResourceName: string;\n @Input() showSelectedActions = true;\n private subscriptions: Subscription[] = [];\n public filterPanelRef: OverlayPanelRef<any>;\n\n public filters$ = this.datatable.filters$\n .pipe(map(v => {\n const filters = removeNullFromObject(v);\n delete filters.query;\n return filters;\n }));\n\n constructor(\n public datatable: DatatableService<Model>,\n private cd: ChangeDetectorRef,\n private overlayPanel: OverlayPanel,\n ) {}\n\n ngOnInit() {\n // close filter panel when any filter is selected.\n const filterSub = this.datatable.filters$.subscribe(() => {\n this.filterPanelRef && this.filterPanelRef.close();\n });\n const changeSub = this.datatable.selectedRows$.subscribe(value => {\n this.numberOfRowsSelected = value.length;\n this.cd.markForCheck();\n });\n this.subscriptions = [filterSub, changeSub];\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n\n public openFiltersPanel() {\n if (this.filterPanelRef) {\n this.filterPanelRef.close();\n } else {\n const position = LEFT_POSITION.slice();\n position[0].offsetY = 40;\n position[1].offsetY = 40;\n this.filterPanelRef = this.overlayPanel.open(DatatableFiltersPanelComponent, {\n origin: this.filterButton,\n position,\n mobilePosition: 'center',\n data: {filters: this.filterPanelTemplate},\n maxWidth: '90%',\n });\n this.filterButton.nativeElement.classList.add('active');\n this.filterPanelRef.afterClosed().subscribe(() => {\n this.filterPanelRef = null;\n this.filterButton.nativeElement.classList.remove('active');\n });\n }\n }\n\n public isModel(value: DatatableFilterValue) {\n return typeof value === 'object' && value.id;\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit} from '@angular/core';\nimport {DatatableService} from '../datatable.service';\nimport {Subscription} from 'rxjs';\nimport {Model} from '../../core/types/models/model';\n\n@Component({\n selector: '[table-header-checkbox]',\n template: `\n <mat-checkbox\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"anyRowsSelected() && ! allRowsSelected()\">\n </mat-checkbox>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'class': 'table-checkbox'},\n})\nexport class TableHeaderCheckboxComponent implements OnInit, OnDestroy{\n private changeRef: Subscription;\n constructor(\n public datatable: DatatableService<Model>,\n private cd: ChangeDetectorRef,\n ) {}\n\n ngOnInit() {\n this.changeRef = this.datatable.selectedRows$.subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.changeRef.unsubscribe();\n }\n\n public anyRowsSelected(): boolean {\n return !!this.datatable.selectedRows$.value.length;\n }\n\n public allRowsSelected() {\n return this.datatable.selectedRows$.value.length &&\n this.datatable.selectedRows$.value.length === this.datatable.data$.value?.length;\n }\n\n public toggleAllRows() {\n if (this.allRowsSelected()) {\n this.datatable.selectedRows$.next([]);\n } else {\n this.datatable.selectedRows$.next(\n this.datatable.data$.value.map(v => v.id)\n );\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport {DatatableService} from '../datatable.service';\nimport {Subscription} from 'rxjs';\nimport {Model} from '../../core/types/models/model';\nimport {FocusMonitor} from '@angular/cdk/a11y';\nimport {filter} from 'rxjs/operators';\nimport {ENTER, SPACE} from '@angular/cdk/keycodes';\nimport {slugifyString} from '../../core/utils/slugify-string';\n\n@Component({\n selector: '[table-sort-header]',\n templateUrl: './table-sort-header.component.html',\n styleUrls: ['./table-sort-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'tabindex': '0',\n '(click)': 'handleClick()',\n '(keydown)': 'handleKeydown($event)',\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n }\n})\nexport class TableSortHeaderComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChild('columnName', {static: true}) columnName: ElementRef<HTMLElement>;\n @Input('table-sort-header') public orderBy: string;\n\n @HostBinding('class.active')\n public orderDir: 'desc'|'asc'|null = null;\n\n @HostBinding('class.sort-disabled') get sortDisabled() {\n return this.datable.config?.disableSort;\n }\n\n private sortSub: Subscription;\n public arrowVisible = false;\n public arrowDirection: 'down'|'up' = 'down';\n\n constructor(\n public datable: DatatableService<Model>,\n private cd: ChangeDetectorRef,\n private focusMonitor: FocusMonitor,\n private el: ElementRef<HTMLElement>,\n ) {}\n\n ngOnInit() {\n // get column name from <ng-content> if none is explicitly provided\n if ( ! this.orderBy) {\n this.orderBy = slugifyString(this.columnName.nativeElement.textContent, '_');\n }\n\n // hide arrow when sort column is changed to different column\n this.sortSub = this.datable.sort$\n .pipe(filter(sort => (sort.orderBy !== this.orderBy)))\n .subscribe(() => {\n this.orderDir = null;\n this.onMouseLeave();\n this.cd.markForCheck();\n });\n }\n\n ngAfterViewInit() {\n // add '.cdk-keyboard-focused' when tabbing to other sort headers\n this.focusMonitor.monitor(this.el).subscribe();\n }\n\n ngOnDestroy() {\n this.sortSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.el);\n }\n\n public changeSort() {\n this.datable.sort$.next({\n orderBy: this.orderBy,\n orderDir: this.getDirection(this.orderDir),\n });\n }\n\n private getDirection(current: string) {\n switch (current) {\n case 'asc':\n this.arrowVisible = false;\n return this.orderDir = null;\n case 'desc':\n this.arrowVisible = true;\n this.arrowDirection = 'up';\n return this.orderDir = 'asc';\n default:\n this.arrowVisible = true;\n this.arrowDirection = 'down';\n return this.orderDir = 'desc';\n }\n }\n\n public onMouseEnter() {\n if ( ! this.datable.config?.disableSort) {\n this.arrowVisible = true;\n }\n }\n\n public onMouseLeave() {\n this.arrowVisible = false;\n if ( ! this.orderDir) {\n this.arrowDirection = 'down';\n }\n }\n\n public handleClick() {\n if ( ! this.datable.config?.disableSort) {\n this.changeSort();\n }\n }\n\n public handleKeydown(e: KeyboardEvent) {\n if ( !this.datable.config?.disableSort && (e.keyCode === SPACE || e.keyCode === ENTER)) {\n e.preventDefault();\n this.changeSort();\n }\n }\n}\n","<span class=\"text\" #columnName>\n <ng-content></ng-content>\n</span>\n<span class=\"icon-wrapper\" [ngClass]=\"arrowDirection\">\n <mat-icon svgIcon=\"arrow-downward\" class=\"sort-icon\" [class.hint-visible]=\"arrowVisible\"></mat-icon>\n</span>\n","<div class=\"page-size\" *ngIf=\"!hidePerPage\">\n <div class=\"page-size-label\" trans>Items per page</div>\n <div class=\"input-container\">\n <select class=\"page-size-input\" [formControl]=\"perPageControl\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"15\">15</option>\n <option [ngValue]=\"20\">20</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n </div>\n</div>\n<div class=\"range-actions\">\n <div class=\"range-label\" *ngIf=\"from && to && totalRecords\">\n {{from}} - {{to}} {{'of' | trans}} {{totalRecords}}\n </div>\n <button type=\"button\" [disabled]=\"!havePrevious || (datable.paginator.loading$ | async)\" class=\"range-button\" (click)=\"previousPage()\" mat-icon-button>\n <mat-icon svgIcon=\"chevron-left\"></mat-icon>\n </button>\n <button type=\"button\" [disabled]=\"!haveNext || (datable.paginator.loading$ | async)\" class=\"range-button\" (click)=\"nextPage()\" mat-icon-button>\n <mat-icon svgIcon=\"chevron-right\"></mat-icon>\n </button>\n</div>\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {FormControl} from '@angular/forms';\nimport {DatatableService} from '../datatable.service';\nimport {Subscription} from 'rxjs';\nimport {filter, map} from 'rxjs/operators';\n\n@Component({\n selector: 'datatable-footer',\n templateUrl: './datatable-footer.component.html',\n styleUrls: ['./datatable-footer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatatableFooterComponent implements OnInit, OnDestroy {\n @Input() hidePerPage = false;\n public perPageControl = new FormControl(15);\n public from: number;\n public to: number;\n public totalRecords: number;\n public havePrevious: boolean;\n public haveNext: boolean;\n private changeRef: Subscription;\n\n constructor(\n public datable: DatatableService<any>,\n private cd: ChangeDetectorRef,\n ) {}\n\n ngOnInit() {\n this.changeRef = this.datable.paginator.response$\n .pipe(filter(r => !!r?.pagination), map(r => r.pagination))\n .subscribe(pagination => {\n this.to = pagination.per_page * pagination.current_page;\n this.from = (this.to - pagination.per_page) || 1;\n this.totalRecords = pagination.total;\n this.havePrevious = pagination.current_page > 1;\n this.haveNext = pagination.current_page < pagination.last_page;\n this.perPageControl.setValue(parseInt('' + pagination.per_page), {emitEvent: false});\n this.cd.markForCheck();\n });\n\n this.perPageControl.valueChanges\n .subscribe(perPage => {\n this.datable.paginator.changePerPage(perPage);\n });\n }\n\n ngOnDestroy() {\n this.changeRef.unsubscribe();\n this.datable.destroy();\n }\n\n public previousPage() {\n this.datable.paginator.previousPage();\n }\n\n public nextPage() {\n this.datable.paginator.nextPage();\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {DatatableService} from '../datatable.service';\nimport {Subscription} from 'rxjs';\nimport {Model} from '../../core/types/models/model';\n\n@Component({\n selector: '[table-body-checkbox]',\n template: `\n <mat-checkbox (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? toggleRow(rowId) : null\"\n [checked]=\"isRowSelected(rowId)\">\n </mat-checkbox>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'class': 'table-checkbox'}\n})\nexport class TableBodyCheckboxComponent implements OnInit, OnDestroy {\n @Input('table-body-checkbox') rowId: number;\n private changeRef: Subscription;\n\n constructor(\n public datatable: DatatableService<Model>,\n private cd: ChangeDetectorRef,\n ) {}\n\n ngOnInit() {\n this.changeRef = this.datatable.selectedRows$.subscribe(value => {\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.changeRef.unsubscribe();\n }\n\n public isRowSelected(id: number): boolean {\n return this.datatable.selectedRows$.value.indexOf(id) > -1;\n }\n\n public toggleRow(id: number) {\n if (this.isRowSelected(id)) {\n const array = this.datatable.selectedRows$.value.slice();\n const i = this.datatable.selectedRows$.value.indexOf(id);\n array.splice(i, 1);\n this.datatable.selectedRows$.next(array);\n } else {\n this.datatable.selectedRows$.next(\n [...this.datatable.selectedRows$.value, id]\n );\n }\n }\n}\n","<div class=\"datatable responsive-table\">\n <datatable-header pluralResourceName=\"templates\">\n <ng-container leftContent>\n <button mat-raised-button color=\"accent\" (click)=\"showCrupdateTemplateModal()\" *ngIf=\"currentUser.hasPermission('templates.create')\" headerActions trans>Add</button>\n </ng-container>\n <button mat-raised-button color=\"accent\" [matTooltip]=\"'Delete selected' | trans\" (click)=\"maybeDeleteSelectedTemplates()\" rightContent *ngIf=\"currentUser.hasPermission('templates.delete')\">Delete Selected</button>\n </datatable-header>\n <table class=\"material-table\">\n <thead>\n <tr>\n <th table-header-checkbox></th>\n <th table-sort-header=\"name\" trans>Template</th>\n <th table-sort-header trans>Category</th>\n <th trans>Last Updated</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let template of templates$ | async\">\n <td [table-body-checkbox]=\"template.name\"></td>\n <td>\n <div class=\"column-with-image\">\n <img [src]=\"getTemplateThumbnail(template)\">\n <span>{{template.config.name}}</span>\n </div>\n </td>\n <td data-label=\"Category\">{{template.config.category}}</td>\n <td data-label=\"Last Updated\">{{template.updated_at | formattedDate}}</td>\n <td class=\"edit-column\">\n <button mat-icon-button (click)=\"showCrupdateTemplateModal(template)\" *ngIf=\"currentUser.hasPermission('templates.update')\" [matTooltip]=\"'Edit template' | trans\">\n <mat-icon svgIcon=\"edit\"></mat-icon>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <no-results-message svgImage=\"insert-block.svg\" *ngIf=\"datatable.paginator.noResults$ | async\">\n <span primary-text>No templates have been created yet</span>\n </no-results-message>\n <datatable-footer></datatable-footer>\n</div>\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {CrupdateTemplateModalComponent} from './crupdate-template-modal/crupdate-template-modal.component';\nimport {BuilderTemplate} from '../../shared/builder-types';\nimport {Templates} from '../../shared/templates/templates.service';\nimport {Settings} from '@common/core/config/settings.service';\nimport {DatatableService} from '../../../common/datatable/datatable.service';\nimport {Observable} from 'rxjs';\n\n@Component({\n selector: 'templates',\n templateUrl: './templates.component.html',\n styleUrls: ['./templates.component.scss'],\n providers: [DatatableService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplatesComponent implements OnInit {\n public templates$ = this.datatable.data$ as Observable<BuilderTemplate[]>;\n constructor(\n private templates: Templates,\n public currentUser: CurrentUser,\n private settings: Settings,\n public datatable: DatatableService<BuilderTemplate>\n ) {}\n\n ngOnInit() {\n this.datatable.init({\n uri: 'templates',\n });\n }\n\n public maybeDeleteSelectedTemplates() {\n this.datatable.confirmResourceDeletion('templates')\n .subscribe(() => {\n this.templates.delete(this.datatable.selectedRows$.value as any).subscribe(() => {\n this.datatable.reset();\n });\n });\n }\n\n public showCrupdateTemplateModal(template?: BuilderTemplate) {\n this.datatable.openCrupdateResourceModal(CrupdateTemplateModalComponent, {template})\n .subscribe();\n }\n\n public getTemplateThumbnail(template: BuilderTemplate) {\n return this.settings.getBaseUrl(true) + template.thumbnail;\n }\n}\n","<ng-container *ngIf=\"user\">\n <img [src]=\"user.avatar\" alt=\"\">\n <div class=\"content\">\n <div>{{user.display_name}}</div>\n <div class=\"email secondary\">{{user.email}}</div>\n </div>\n</ng-container>\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {User} from '@common/core/types/models/User';\n\n@Component({\n selector: 'user-column',\n templateUrl: './user-column.component.html',\n styleUrls: ['./user-column.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'class': 'column-with-image'},\n})\nexport class UserColumnComponent {\n @Input() user: User;\n @Input() showEmail = false;\n}\n","<div class=\"datatable responsive-table\">\n <datatable-header pluralResourceName=\"projects\">\n <ng-container leftContent>\n <button mat-raised-button color=\"accent\" (click)=\"showCrupdateProjectModal()\" *ngIf=\"currentUser.hasPermission('projects.create')\" headerActions trans>Add</button>\n </ng-container>\n <button mat-raised-button color=\"accent\" [matTooltip]=\"'Delete selected' | trans\" (click)=\"maybeDeleteSelectedProjects()\" rightContent *ngIf=\"currentUser.hasPermission('projects.delete')\" trans>Delete Selected</button>\n </datatable-header>\n <table class=\"material-table\">\n <thead>\n <tr>\n <th table-header-checkbox></th>\n <th table-sort-header=\"name\" trans>Project</th>\n <th trans>Owner</th>\n <th table-sort-header trans>Published</th>\n <th table-sort-header trans>Template</th>\n <th table-sort-header=\"updated_at\" trans>Last Updated</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let project of projects$ | async\">\n <td [table-body-checkbox]=\"project.id\"></td>\n <td>\n <div class=\"column-with-image\">\n <img [src]=\"getProjectThumbnail(project)\" alt=\"\">\n <span> {{project.name}} </span>\n </div>\n </td>\n <td data-label=\"Owner\">\n <user-column [user]=\"project.users[0]\"></user-column>\n </td>\n <td data-label=\"Published\">{{project.published ? 'Yes' : 'No'}} </td>\n <td data-label=\"Template\">{{project.template}} </td>\n <td>{{project.updated_at | formattedDate}}</td>\n <td class=\"edit-column\">\n <a mat-icon-button target=\"_blank\" [routerLink]=\"['/builder', project.id]\" [matTooltip]=\"'Edit project' | trans\"><mat-icon svgIcon=\"edit\"></mat-icon></a>\n <button mat-icon-button (click)=\"showCrupdateProjectModal(project)\" *ngIf=\"currentUser.hasPermission('projects.update')\" [matTooltip]=\"'Update details' | trans\">\n <mat-icon svgIcon=\"settings\"></mat-icon>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <no-results-message svgImage=\"website-builder.svg\" *ngIf=\"datatable.paginator.noResults$ | async\">\n <span primary-text>No projects have been created yet</span>\n </no-results-message>\n <datatable-footer></datatable-footer>\n</div>\n","import {Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {Projects} from '../../shared/projects/projects.service';\nimport {Project} from '../../shared/projects/Project';\nimport {ProjectUrl} from '../../shared/projects/project-url.service';\nimport {CrupdateProjectModalComponent} from '../../shared/crupdate-project-modal/crupdate-project-modal.component';\nimport {DatatableService} from '../../../common/datatable/datatable.service';\nimport {Observable} from 'rxjs';\n\n@Component({\n selector: 'projects',\n templateUrl: './projects.component.html',\n styleUrls: ['./projects.component.scss'],\n providers: [DatatableService],\n encapsulation: ViewEncapsulation.None\n})\nexport class ProjectsComponent implements OnInit {\n public projects$ = this.datatable.data$ as Observable<Project[]>;\n constructor(\n public datatable: DatatableService<Project>,\n private projects: Projects,\n private modal: Modal,\n private projectUrl: ProjectUrl,\n public currentUser: CurrentUser,\n ) {}\n\n ngOnInit() {\n this.datatable.init({\n uri: Projects.BASE_URI,\n });\n }\n\n public maybeDeleteSelectedProjects() {\n this.datatable.confirmResourceDeletion('projects')\n .subscribe(() => {\n this.projects.delete({ids: this.datatable.selectedRows$.value}).subscribe(() => {\n this.datatable.reset();\n });\n });\n }\n\n public showCrupdateProjectModal(project?: Project) {\n this.datatable.openCrupdateResourceModal(CrupdateProjectModalComponent, {project, showExtraConfig: true})\n .subscribe();\n }\n\n public getProjectThumbnail(project: Project) {\n return this.projectUrl.getBaseUrl(project) + 'thumbnail.png';\n }\n}\n","import {ChangeDetectorRef, Directive, OnDestroy} from '@angular/core';\r\nimport {SettingsState} from './settings-state.service';\r\nimport {ActivatedRoute} from '@angular/router';\r\nimport {finalize} from 'rxjs/operators';\r\nimport {Settings} from '../../core/config/settings.service';\r\nimport {Toast} from '../../core/ui/toast.service';\r\nimport {Modal} from '../../core/ui/dialogs/modal.service';\r\nimport {CustomHomepage} from '../../pages/shared/custom-homepage.service';\r\nimport {AppHttpClient} from '../../core/http/app-http-client.service';\r\nimport {SettingsPayload} from '../../core/config/settings-payload';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {ValueLists} from '@common/core/services/value-lists.service';\r\nimport {scrollInvalidInputIntoView} from '@common/core/utils/scroll-invalid-input-into-view';\r\nimport {BackendErrorResponse} from '@common/core/types/backend-error-response';\r\n\r\n@Directive()\r\nexport abstract class SettingsPanelComponent implements OnDestroy {\r\n public loading$ = new BehaviorSubject<boolean>(false);\r\n public errors$ = new BehaviorSubject<{[key: string]: string}>({});\r\n\r\n constructor(\r\n public settings: Settings,\r\n protected toast: Toast,\r\n protected http: AppHttpClient,\r\n protected modal: Modal,\r\n protected route: ActivatedRoute,\r\n protected customHomepage: CustomHomepage,\r\n protected valueLists: ValueLists,\r\n protected cd: ChangeDetectorRef,\r\n public state: SettingsState,\r\n ) {}\r\n\r\n ngOnDestroy() {\r\n this.state.reset();\r\n }\r\n\r\n public setJson(name: string, value: string[]|number[]) {\r\n this.state.client[name] = JSON.stringify(value);\r\n }\r\n\r\n public getJson(name: string): any[] {\r\n const value = this.state.client[name];\r\n if ( ! value) return [];\r\n return JSON.parse(value as string);\r\n }\r\n\r\n public saveSettings(settings?: SettingsPayload) {\r\n this.loading$.next(true);\r\n const changedSettings = settings || this.state.getModified();\r\n this.settings.save(changedSettings)\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(() => {\r\n this.toast.open('Settings saved.');\r\n this.clearErrors();\r\n // update initial settings after saving, so\r\n // so new setting state is not lost when\r\n // navigating between setting panels\r\n this.state.updateInitial(changedSettings);\r\n }, (errResponse: BackendErrorResponse) => {\r\n this.errors$.next(errResponse.errors);\r\n scrollInvalidInputIntoView(this.errors$.value);\r\n });\r\n }\r\n\r\n public clearErrors() {\r\n this.errors$.next({});\r\n }\r\n}\r\n","export function scrollInvalidInputIntoView(errors: {[key: string]: any}, prefix = '') {\r\n let firstKey = Object.keys(errors)[0];\r\n if (firstKey) {\r\n if (prefix) {\r\n firstKey = `${prefix}-${firstKey}`;\r\n }\r\n const node = document.getElementById(firstKey);\r\n if (node) {\r\n node.scrollIntoView({behavior: 'smooth', block: 'center', inline: 'center'});\r\n }\r\n }\r\n}\r\n","<mat-chip-list #chipList [selectable]=\"false\">\r\n <mat-chip\r\n *ngFor=\"let item of items$ | async; index as i\"\r\n [selectable]=\"false\"\r\n [removable]=\"!selectMode\"\r\n (removed)=\"remove(i)\"\r\n >\r\n {{displayChipValue(item)}}\r\n <mat-icon matChipRemove svgIcon=\"cancel\"></mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"placeholder | trans\"\r\n *ngIf=\"!selectMode\"\r\n #inputEl\r\n [type]=\"type\"\r\n class=\"mat-chip-input mat-input-element\"\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n [matAutocomplete]=\"auto\"\r\n [matAutocompleteConnectedTo]=\"{elementRef: el}\"\r\n [formControl]=\"formControl\"\r\n (matChipInputTokenEnd)=\"addFromChipInput($event.value)\" />\r\n</mat-chip-list>\r\n\r\n<mat-autocomplete class=\"chip-input-autocomplete-panel\" #auto=\"matAutocomplete\" (optionSelected)=\"addFromAutocomplete($event.option.value)\" [autoActiveFirstOption]=\"true\">\r\n <mat-option *ngFor=\"let value of suggestedValues$ | async\" [value]=\"value\">{{displayChipValue(value)}}</mat-option>\r\n</mat-autocomplete>\r\n\r\n<ng-template #selectModeTemplate let-suggestions=\"suggestions\">\r\n <mat-option *ngFor=\"let value of suggestions\" [value]=\"value\">{{displayChipValue(value)}}</mat-option>\r\n</ng-template>\r\n","import {\r\n AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, HostBinding, Input, OnInit, TemplateRef, ViewChild, ViewEncapsulation\r\n} from '@angular/core';\r\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {BehaviorSubject, Observable, of} from 'rxjs';\r\nimport {MatAutocomplete} from '@angular/material/autocomplete';\r\nimport {catchError, debounceTime, distinctUntilChanged, switchMap} from 'rxjs/operators';\r\nimport {Model} from '../../../types/models/model';\r\n\r\ntype ChipValue = 'string' | Model;\r\n\r\n@Component({\r\n selector: 'chip-input',\r\n templateUrl: './chip-input.component.html',\r\n styleUrls: ['./chip-input.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: ChipInputComponent,\r\n multi: true,\r\n }]\r\n})\r\nexport class ChipInputComponent implements ControlValueAccessor, OnInit, AfterViewInit {\r\n @Input() placeholder: string;\r\n @Input() type = 'text';\r\n @Input() emailsInput = false;\r\n @Input() suggestFn: (query: string) => Observable<ChipValue[]>;\r\n @Input() @HostBinding('class.select-mode') selectMode = false;\r\n @ViewChild('auto') matAutocomplete: MatAutocomplete;\r\n @ViewChild('inputEl') inputEl: ElementRef<HTMLInputElement>;\r\n @ViewChild('selectModeTemplate') selectModeTemplate: TemplateRef<any>;\r\n\r\n public formControl = new FormControl();\r\n\r\n public propagateChange: (items: ChipValue[]) => void;\r\n public items$ = new BehaviorSubject<ChipValue[]>([]);\r\n public suggestedValues$ = new BehaviorSubject<ChipValue[]>([]);\r\n @Input() set suggestedValues(values: ChipValue[]) {\r\n this.suggestedValues$.next(values);\r\n }\r\n\r\n constructor(\r\n public el: ElementRef<HTMLElement>,\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.suggestFn) {\r\n this.bindToSearchControl();\r\n }\r\n if (this.selectMode) {\r\n // TODO: implement\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.emailsInput) {\r\n this.parseEmailsOnPaste();\r\n }\r\n }\r\n\r\n public remove(index: number) {\r\n const items = [...this.items$.value];\r\n items.splice(index, 1);\r\n this.items$.next(items);\r\n this.propagateChange(this.items$.value);\r\n }\r\n\r\n public addFromChipInput(value: ChipValue, propagate = true) {\r\n if (value && !this.matAutocomplete.isOpen && !this.selectMode) {\r\n this.add(value, propagate);\r\n }\r\n }\r\n\r\n public addFromAutocomplete(value: ChipValue, propagate = true) {\r\n this.add(value, propagate);\r\n }\r\n\r\n private add(value: ChipValue, propagate = true) {\r\n value = (typeof value === 'string' ? value.trim() : value) as ChipValue;\r\n const duplicate = this.findValueIndex(value) > -1;\r\n if (value && !duplicate) {\r\n this.items$.next([...this.items$.value, value]);\r\n if (propagate) {\r\n this.propagateChange(this.items$.value);\r\n }\r\n }\r\n if (this.inputEl) {\r\n this.inputEl.nativeElement.value = '';\r\n }\r\n this.formControl.setValue(null);\r\n this.suggestedValues$.next([]);\r\n }\r\n\r\n private findValueIndex(value: ChipValue) {\r\n if (typeof value === 'string') {\r\n return this.items$.value.indexOf(value);\r\n } else {\r\n return this.items$.value.findIndex(v => (v as Model).id === value.id);\r\n }\r\n }\r\n\r\n public writeValue(value: ChipValue[] = []) {\r\n if (value && value.length) {\r\n value.forEach(item => this.add(item, false));\r\n } else if (this.items$.value.length) {\r\n while (this.items$.value.length !== 0) {\r\n this.remove(0);\r\n }\r\n }\r\n }\r\n\r\n public registerOnChange(fn: (items: ChipValue[]) => void) {\r\n this.propagateChange = fn;\r\n }\r\n\r\n public registerOnTouched() {}\r\n\r\n private bindToSearchControl() {\r\n this.formControl.valueChanges.pipe(\r\n debounceTime(150),\r\n distinctUntilChanged(),\r\n switchMap(query => query ? this.suggestFn(query) : of([])),\r\n catchError(() => of([])),\r\n ).subscribe(values => {\r\n const filtered = values.filter(v => this.findValueIndex(v) === -1);\r\n this.suggestedValues$.next(filtered);\r\n });\r\n }\r\n\r\n public displayChipValue(value: ChipValue): string {\r\n return typeof value === 'object' ? value.name : value;\r\n }\r\n\r\n private parseEmailsOnPaste() {\r\n this.inputEl.nativeElement.addEventListener('paste', e => {\r\n const paste = (e.clipboardData || window['clipboardData']).getData('text');\r\n const emails = paste.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi);\r\n if (emails) {\r\n e.preventDefault();\r\n const selection = window.getSelection();\r\n if (selection.rangeCount) {\r\n selection.deleteFromDocument();\r\n emails.forEach(email => this.add(email));\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"header\">\n <div class=\"title\" trans>Site Builder</div>\n <div class=\"subtitle\" trans>Configure the site builder and user dashboard settings.</div>\n</div>\n\n<form class=\"body many-inputs\" (submit)=\"saveSettings()\" ngNativeValidate>\n\n <mat-tab-group color=\"accent\" animationDuration=\"0\">\n <mat-tab [label]=\"'General' | trans\">\n <div class=\"tab-content many-inputs\">\n <div class=\"setting-toggle-container\">\n <mat-slide-toggle name=\"builder.enable_subdomains\" id=\"builder.enable_subdomains\"\n [(ngModel)]=\"state.client['builder.enable_subdomains']\" trans>Subdomains\n </mat-slide-toggle>\n <p>\n <span trans>Should user projects be accessible via subdomain on your site.</span>&ngsp;\n <a class=\"hover-underline\" href=\"https://support.vebto.com/help-center/articles/5/9/156/custom-domains#sub-domain\" *ngIf=\"!settings.get('common.site.hide_docs_button')\" target=\"_blank\" trans>Learn More.</a>\n </p>\n </div>\n\n <div class=\"setting-toggle-container\">\n <mat-slide-toggle name=\"builder.enable_custom_domains\" id=\"builder.enable_custom_domains\"\n [(ngModel)]=\"state.client['builder.enable_custom_domains']\" trans>Custom Domains\n </mat-slide-toggle>\n <p>\n <span trans>Should users be able to attach their own custom domains to their projects.</span>&ngsp;\n <a class=\"hover-underline\" href=\"https://support.vebto.com/help-center/articles/5/9/156/custom-domains#custom-domains\" *ngIf=\"!settings.get('common.site.hide_docs_button')\" target=\"_blank\" trans>Learn More.</a>\n </p>\n </div>\n\n <div class=\"input-container\">\n <label for=\"builder.google_fonts_api_key\" trans>Google Fonts API Key</label>\n <input name=\"builder.google_fonts_api_key\" id=\"builder.google_fonts_api_key\" type=\"text\"\n [(ngModel)]=\"state.client['builder.google_fonts_api_key']\">\n </div>\n\n <div class=\"input-container\">\n <label for=\"template_categories\" trans>Template Categories</label>\n <chip-input\n id=\"template_categories\"\n name=\"template_categories\"\n [(ngModel)]=\"categories\"\n placeholder=\"+New Category...\"\n trans-placeholder\n ></chip-input>\n </div>\n </div>\n </mat-tab>\n\n <mat-tab [label]=\"'Publishing' | trans\">\n <div class=\"tab-content\">\n <div class=\"setting-toggle-container\">\n <mat-slide-toggle name=\"publish.allow_credential_change\" id=\"publish.allow_credential_change\"\n [(ngModel)]=\"state.client['publish.allow_credential_change']\" trans>FTP Publish Credentials\n </mat-slide-toggle>\n <p trans>Allow users to change FTP publish credentials.</p>\n </div>\n\n <div class=\"error-group many-inputs\">\n <h2 trans>Default FTP credentials for publish dialog</h2>\n <div class=\"input-container\">\n <label for=\"host\" trans>Host</label>\n <input type=\"text\" name=\"host\" id=\"host\" [(ngModel)]=\"defaultPublishCredentials.host\">\n </div>\n\n <div class=\"input-container\">\n <label for=\"username\" trans>Username</label>\n <input type=\"text\" name=\"username\" id=\"username\" [(ngModel)]=\"defaultPublishCredentials.username\">\n </div>\n\n <div class=\"input-container\">\n <label for=\"password\" trans>Password</label>\n <input type=\"password\" name=\"password\" id=\"password\"\n [(ngModel)]=\"defaultPublishCredentials.password\">\n </div>\n\n <div class=\"input-container\">\n <label for=\"directory\" trans>Directory</label>\n <input type=\"text\" name=\"directory\" id=\"directory\" [(ngModel)]=\"defaultPublishCredentials.directory\"\n placeholder=\"(Optional)\" trans-placeholder>\n </div>\n\n <div class=\"input-container\">\n <label for=\"port\" trans>Port</label>\n <input type=\"number\" name=\"port\" id=\"port\" [(ngModel)]=\"defaultPublishCredentials.port\">\n </div>\n\n <mat-slide-toggle color=\"accent\" class=\"custom-control\" name=\"ssl\" [(ngModel)]=\"defaultPublishCredentials.ssl\">SSL</mat-slide-toggle>\n </div>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" type=\"submit\"\n [disabled]=\"loading$ | async\" trans>Update\n </button>\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\n</form>\n\n<loading-indicator [isVisible]=\"loading$ | async\" class=\"overlay\"></loading-indicator>\n","import {Component, OnInit} from '@angular/core';\nimport {SettingsPanelComponent} from '@common/admin/settings/settings-panel.component';\nimport {FtpDetails} from '../../../shared/builder-types';\n\n@Component({\n selector: 'builder-settings',\n templateUrl: './builder-settings.component.html',\n styleUrls: ['./builder-settings.component.scss'],\n host: {'class': 'settings-panel'},\n})\nexport class BuilderSettingsComponent extends SettingsPanelComponent implements OnInit {\n public categories: string[] = [];\n public defaultPublishCredentials: FtpDetails = {};\n\n ngOnInit() {\n this.categories = this.settings.getJson('builder.template_categories', []);\n this.defaultPublishCredentials = this.settings.getJson('publish.default_credentials', {});\n }\n\n public saveSettings() {\n const settings = this.state.getModified();\n settings.client['builder.template_categories'] = JSON.stringify(this.categories);\n settings.client['publish.default_credentials'] = JSON.stringify(this.defaultPublishCredentials);\n super.saveSettings(settings);\n }\n}\n","import {Routes} from '@angular/router';\nimport {TemplatesComponent} from './templates/templates.component';\nimport {ProjectsComponent} from './projects/projects.component';\nimport {BuilderSettingsComponent} from './settings/builder/builder-settings.component';\n\nexport const APP_ADMIN_ROUTES: Routes = [\n {\n path: 'templates',\n component: TemplatesComponent,\n data: {permissions: ['templates.view']}\n },\n {\n path: 'projects',\n component: ProjectsComponent,\n data: {permissions: ['projects.view']}\n },\n];\n\nexport const APP_SETTING_ROUTES: Routes = [\n {\n path: 'builder',\n component: BuilderSettingsComponent,\n },\n];\n","<ng-template #navItems>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"general\" routerLinkActive=\"selected\"><div class=\"name\" trans>General</div></a>\r\n <a class=\"nav-item\" mat-menu-item *ngFor=\"let route of appRoutes()\" [routerLink]=\"route.path\" routerLinkActive=\"selected\"><div class=\"name\" trans>{{route.path.replace('-', ' ')}}</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"billing\" *ngIf=\"settings.get('billing.integrated')\" routerLinkActive=\"selected\"><div class=\"name\" trans>Billing</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"localization\" routerLinkActive=\"selected\"><div class=\"name\" trans>Localization</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"authentication\" routerLinkActive=\"selected\"><div class=\"name\" trans>Authentication</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"uploading\" routerLinkActive=\"selected\"><div class=\"name\" trans>Uploading</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"mail\" routerLinkActive=\"selected\"><div class=\"name\" trans>Mail</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"cache\" routerLinkActive=\"selected\"><div class=\"name\" trans>Cache</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"analytics\" routerLinkActive=\"selected\"><div class=\"name\" trans>Analytics</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"logging\" routerLinkActive=\"selected\"><div class=\"name\" trans>Logging</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"queue\" routerLinkActive=\"selected\"><div class=\"name\" trans>Queue</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"recaptcha\" routerLinkActive=\"selected\"><div class=\"name\" trans>Recaptcha</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"gdpr\" routerLinkActive=\"selected\"><div class=\"name\" trans>GDPR</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"/admin/appearance\" [queryParams]=\"{panel: 'menus'}\" routerLinkActive=\"selected\"><div class=\"name\" trans>Menus</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"/admin/appearance\" [queryParams]=\"{panel: 'seo-settings'}\" routerLinkActive=\"selected\"><div class=\"name\" trans>Seo</div></a>\r\n <a class=\"nav-item\" mat-menu-item routerLink=\"/admin/appearance\" [queryParams]=\"{panel: 'themes'}\" routerLinkActive=\"selected\"><div class=\"name\" trans>Themes</div></a>\r\n</ng-template>\r\n\r\n<ng-container *ngIf=\"breakpoints.isMobile$ | async; else desktopNav\">\r\n <button [matMenuTriggerFor]=\"navMenu\" class=\"no-style admin-pill-nav-mobile-selector\">\r\n <span class=\"name\" trans>{{activePanel$ | async}}</span>\r\n <mat-icon svgIcon=\"keyboard-arrow-down\"></mat-icon>\r\n </button>\r\n <mat-menu #navMenu=\"matMenu\" class=\"admin-pill-nav-menu\">\r\n <ng-container *ngTemplateOutlet=\"navItems\"></ng-container>\r\n </mat-menu>\r\n</ng-container>\r\n\r\n<ng-template #desktopNav>\r\n <aside class=\"admin-pill-nav rounded\">\r\n <ng-container *ngTemplateOutlet=\"navItems\"></ng-container>\r\n </aside>\r\n</ng-template>\r\n\r\n<div class=\"settings-panels-container\">\r\n <router-outlet></router-outlet>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {ActivatedRoute, NavigationEnd, Router, Routes} from '@angular/router';\r\nimport {SettingsState} from './settings-state.service';\r\nimport {Settings} from '../../core/config/settings.service';\r\nimport {APP_SETTING_ROUTES} from '../../../app/admin/app-admin-routes';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {BreakpointsService} from '@common/core/ui/breakpoints.service';\r\nimport {filter} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'settings',\r\n templateUrl: './settings.component.html',\r\n styleUrls: ['./settings.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SettingsComponent implements OnInit {\r\n public activePanel$ = new BehaviorSubject<string>(this.route.firstChild.routeConfig.path);\r\n constructor(\r\n public settings: Settings,\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private state: SettingsState,\r\n public breakpoints: BreakpointsService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.route.data.subscribe(data => {\r\n this.state.setAll(data['settings']);\r\n });\r\n\r\n this.router.events\r\n .pipe(filter(e => e instanceof NavigationEnd))\r\n .subscribe(() => {\r\n this.activePanel$.next(this.route.firstChild.routeConfig.path);\r\n });\r\n }\r\n\r\n public appRoutes(): Routes {\r\n return APP_SETTING_ROUTES;\r\n }\r\n}\r\n","<div class=\"header\">\r\n <div class=\"title\" trans>General</div>\r\n <div class=\"subtitle\" trans>Configure general site settings.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs\" (ngSubmit)=\"saveSettings()\" ngNativeValidate>\r\n <div class=\"input-container\" [class.has-error]=\"urlsDontMatch()\">\r\n <label for=\"app_url\" trans>Site Url</label>\r\n <input type=\"text\" id=\"app_url\" name=\"app_url\" [(ngModel)]=\"state.server['app_url']\" readonly=\"readonly\" required>\r\n <p class=\"error\" *ngIf=\"urlsDontMatch()\">\r\n <span trans [transValues]=\"{baseUrl: state.server['app_url'], currentUrl: state.server['newAppUrl']}\">Base site url is set as \":baseUrl\" in configuration, but current url is \":currentUrl\". It's recommended to set the primary url you want to use in configuration file and then redirect all other url versions to this primary version via cpanel or .htaccess file.</span>\r\n &ngsp;\r\n <a href=\"https://support.vebto.com/help-center/articles/35/primary-site-url\" target=\"_blank\" trans>More Information.</a>\r\n </p>\r\n </div>\r\n\r\n <div class=\"error-group many-inputs\">\r\n <div class=\"inline-inputs-container\">\r\n <div class=\"input-container\">\r\n <label for=\"homepage.type\" trans>Site Homepage</label>\r\n <select name=\"homepage.type\" id=\"homepage.type\" [(ngModel)]=\"state.client['homepage.type']\">\r\n <option value=\"default\">Default</option>\r\n <option value=\"component\">Application Page</option>\r\n <option [value]=\"category.name\" *ngFor=\"let category of menuItemCategories$ | async\">{{category.name}}</option>\r\n </select>\r\n <p trans>Type of the homepage.</p>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let category of menuItemCategories$ | async\">\r\n <div class=\"input-container\" *ngIf=\"state.client['homepage.type'] === category.name\">\r\n <label [for]=\"category.name\" class=\"visually-hidden\" trans>{{category.name}}</label>\r\n <select [id]=\"category.name\" [name]=\"category.name\" [(ngModel)]=\"state.client['homepage.value']\">\r\n <option *ngFor=\"let item of category.items\" [value]=\"item.model_id\">{{item.label}}</option>\r\n </select>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"input-container\" *ngIf=\"state.client['homepage.type'] === 'component'\">\r\n <label for=\"homepage.value\" class=\"visually-hidden\" trans>Application Page</label>\r\n <select name=\"homepage.value\" id=\"homepage.value\" [(ngModel)]=\"state.client['homepage.value']\">\r\n <option [ngValue]=\"page.name\" *ngFor=\"let page of getHomepageComponents()\" trans>{{getDisplayName(page)}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"themes.default_mode\" trans>Default Site Theme</label>\r\n <select id=\"themes.default_mode\" name=\"themes.default_mode\" [(ngModel)]=\"state.client['themes.default_mode']\">\r\n <option value=\"light\" trans>Light</option>\r\n <option value=\"dark\" trans>Dark</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"themes.user_change\" id=\"themes.user_change\" [(ngModel)]=\"state.client['themes.user_change']\" trans>Allow Theme Change</mat-slide-toggle>\r\n <p trans>Allow user to switch from dark to light mode and vice versa.</p>\r\n </div>\r\n\r\n <div class=\"settings-separator\"></div>\r\n\r\n <button type=\"button\" mat-flat-button color=\"accent\" [disabled]=\"loading$ | async\" (click)=\"createSitemap()\" trans>Generate Sitemap</button>\r\n <p class=\"sitemap-description\">\r\n <span trans>Once generated, sitemap index url will be</span>:\r\n <a target=\"_blank\" [href]=\"settings.getBaseUrl() + 'storage/sitemaps/sitemap-index.xml'\">{{settings.getBaseUrl()}}storage/sitemaps/sitemap-index.xml</a>\r\n </p>\r\n\r\n <div class=\"settings-separator\"></div>\r\n\r\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" type=\"submit\" [disabled]=\"loading$ | async\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {SettingsPanelComponent} from '../settings-panel.component';\r\nimport {CssTheme} from '@common/core/types/models/CssTheme';\r\nimport {MenuItemCategory} from '@common/admin/appearance/panels/menus-appearance-panel/menus/item-categories/menu-item-category';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {CustomHomepagePage} from '@common/pages/shared/custom-homepage.service';\r\nimport {finalize} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'homepage-settings',\r\n templateUrl: './general-settings.component.html',\r\n styleUrls: ['./general-settings.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class GeneralSettingsComponent extends SettingsPanelComponent implements OnInit {\r\n public menuItemCategories$ = new BehaviorSubject<MenuItemCategory[]>([]);\r\n public cssThemes: CssTheme[] = [];\r\n\r\n ngOnInit() {\r\n this.valueLists.get(['menuItemCategories', 'themes']).subscribe(response => {\r\n this.menuItemCategories$.next(response.menuItemCategories);\r\n this.cssThemes = response.themes;\r\n });\r\n }\r\n\r\n public getHomepageComponents() {\r\n return this.customHomepage.getComponents();\r\n }\r\n\r\n public getDisplayName(page: CustomHomepagePage) {\r\n return (page.routeConfig?.data && page.routeConfig.data.name) ||\r\n page.name.replace(/-/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase());\r\n }\r\n\r\n public urlsDontMatch() {\r\n return this.state.server['newAppUrl'] && this.state.server['newAppUrl'] !== this.state.server['app_url'];\r\n }\r\n\r\n public createSitemap() {\r\n this.loading$.next(true);\r\n return this.http.post('sitemap/generate')\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(() => {\r\n this.toast.open('Sitemap generated.');\r\n });\r\n }\r\n}\r\n","<div class=\"header\">\r\n <div class=\"title\" trans>Authentication</div>\r\n <div class=\"subtitle\" trans>Configure registration, social login and related 3rd party integrations.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs social-login-container\" (ngSubmit)=\"saveSettings()\" ngNativeValidate *ngIf=\"errors$ | async as errors\">\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"require_email_confirmation\" id=\"require_email_confirmation\" [disabled]=\"!state.client['require_email_confirmation'] && !state.server['mail_setup']\" [(ngModel)]=\"state.client['require_email_confirmation']\" trans>Require Email Confirmation</mat-slide-toggle>\r\n <p>\r\n <span trans>Require new users to validate their email address before being able to login.</span><br>\r\n <ng-container *ngIf=\"!state.server['mail_setup']\">\r\n <span trans>Outgoing mail method needs to be setup before enabling this setting.</span>\r\n &ngsp;<a routerLink=\"/admin/settings/mail\" trans>Fix now.</a>\r\n </ng-container>\r\n </p>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"registration.disable\" id=\"registration.disable\" [(ngModel)]=\"state.client['registration.disable']\" trans>Disable Registration</mat-slide-toggle>\r\n <p trans>All registration (including social login) will be disabled.</p>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"single_device_login\" id=\"single_device_login\" [(ngModel)]=\"state.client['single_device_login']\" trans>Single Device Login</mat-slide-toggle>\r\n <p trans>Only allow one device to be logged into user account at the same time.</p>\r\n </div>\r\n\r\n <ng-container *ngIf=\"settings.get('envato.enable')\">\r\n <div class=\"setting-toggle-container envato\">\r\n <mat-slide-toggle name=\"social.envato.enable\" id=\"social.envato.enable\" [(ngModel)]=\"state.client['social.envato.enable']\" trans>Envato Login</mat-slide-toggle>\r\n <p trans>Enable logging into the site via envato.</p>\r\n </div>\r\n\r\n <ng-container *ngIf=\"state.client['social.envato.enable']\">\r\n <div class=\"input-container\">\r\n <label for=\"social.envato.id\" trans>Envato ID</label>\r\n <input name=\"social.envato.id\" id=\"social.envato.id\" [(ngModel)]=\"state.server['envato_id']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"social.envato.secret\" trans>Envato Secret</label>\r\n <input name=\"social.envato.secret\" id=\"social.envato.secret\" [(ngModel)]=\"state.server['envato_secret']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"social.envato.personal_token\" trans>Envato Personal Token</label>\r\n <input name=\"social.envato.personal_token\" id=\"social.envato.personal_token\" [(ngModel)]=\"state.server['envato_personal_token']\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"error-group many-inputs no-bottom-border\" id=\"google_group\" [class.has-error]=\"errors.google_group\">\r\n <div class=\"setting-toggle-container google\">\r\n <mat-slide-toggle name=\"social.google.enable\" id=\"social.google.enable\" [(ngModel)]=\"state.client['social.google.enable']\" trans>Google Login</mat-slide-toggle>\r\n <p trans>Enable logging into the site via google.</p>\r\n </div>\r\n\r\n <ng-container *ngIf=\"state.client['social.google.enable']\">\r\n <div class=\"input-container\">\r\n <label for=\"social.google.id\" trans>Google Client ID</label>\r\n <input name=\"social.google.id\" id=\"social.google.id\" [(ngModel)]=\"state.server['google_id']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"social.google.secret\" trans>Google Client Secret</label>\r\n <input name=\"social.google.secret\" id=\"social.google.secret\" [(ngModel)]=\"state.server['google_secret']\">\r\n </div>\r\n </ng-container>\r\n\r\n <p class=\"error\" *ngIf=\"errors.google_group\" [innerHTML]=\"errors.google_group\"></p>\r\n </div>\r\n\r\n <div class=\"error-group many-inputs no-bottom-border\" [class.has-error]=\"errors.facebook_group\">\r\n <div class=\"setting-toggle-container facebook\">\r\n <mat-slide-toggle name=\"social.facebook.enable\" id=\"social.facebook.enable\" [(ngModel)]=\"state.client['social.facebook.enable']\" trans>Facebook Login</mat-slide-toggle>\r\n <p trans>Enable logging into the site via facebook.</p>\r\n </div>\r\n\r\n <ng-container *ngIf=\"state.client['social.facebook.enable']\">\r\n <div class=\"input-container\">\r\n <label for=\"social.facebook.id\" trans>Facebook App ID</label>\r\n <input name=\"social.facebook.id\" id=\"social.facebook.id\" [(ngModel)]=\"state.server['facebook_id']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"social.facebook.secret\" trans>Facebook App Secret</label>\r\n <input name=\"social.facebook.secret\" id=\"social.facebook.secret\" [(ngModel)]=\"state.server['facebook_secret']\">\r\n </div>\r\n </ng-container>\r\n\r\n <p class=\"error\" *ngIf=\"errors.facebook_group\" [innerHTML]=\"errors.facebook_group\"></p>\r\n </div>\r\n\r\n <div class=\"error-group many-inputs\" [class.has-error]=\"errors.twitter_group\">\r\n <div class=\"setting-toggle-container twitter\">\r\n <mat-slide-toggle name=\"social.twitter.enable\" id=\"social.twitter.enable\" [(ngModel)]=\"state.client['social.twitter.enable']\" trans>Twitter Login</mat-slide-toggle>\r\n <p trans>Enable logging into the site via twitter.</p>\r\n </div>\r\n\r\n <ng-container *ngIf=\"state.client['social.twitter.enable']\">\r\n <div class=\"input-container\">\r\n <label for=\"social.twitter.id\" trans>Twitter ID</label>\r\n <input name=\"social.twitter.id\" id=\"social.twitter.id\" [(ngModel)]=\"state.server['twitter_id']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"social.twitter.secret\" trans>Twitter Secret</label>\r\n <input name=\"social.twitter.secret\" id=\"social.twitter.secret\" [(ngModel)]=\"state.server['twitter_secret']\">\r\n </div>\r\n </ng-container>\r\n\r\n <p class=\"error\" *ngIf=\"errors.twitter_group\" [innerHTML]=\"errors.twitter_group\"></p>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" type=\"submit\" [disabled]=\"loading$ | async\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\r\nimport {SettingsPanelComponent} from '../settings-panel.component';\r\n\r\n@Component({\r\n selector: 'authentication-settings',\r\n templateUrl: './authentication-settings.component.html',\r\n styleUrls: ['./authentication-settings.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class AuthenticationSettingsComponent extends SettingsPanelComponent {}\r\n","<div class=\"header\">\r\n <div class=\"title\" trans>Cache</div>\r\n <div class=\"subtitle\" trans>Configure cache time, method and related 3rd party integrations.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs\" (submit)=\"saveSettings()\" ngNativeValidate *ngIf=\"errors$ | async as errors\">\r\n <div class=\"error-group many-inputs no-border-top\" id=\"cache_group\" [class.has-error]=\"errors.cache_group\">\r\n <div class=\"input-container\">\r\n <label for=\"cache.driver\" trans>Cache Method</label>\r\n <select name=\"cache.driver\" id=\"cache.driver\" [(ngModel)]=\"state.server['cache_driver']\" (ngModelChange)=\"clearErrors()\">\r\n <option value=\"file\">File (Default)</option>\r\n <option value=\"array\">None</option>\r\n <option value=\"apc\">APC</option>\r\n <option value=\"memcached\">Memcached</option>\r\n <option value=\"redis\">Redis</option>\r\n </select>\r\n <p trans>Which method should be used for storing and retrieving cached items.</p>\r\n </div>\r\n\r\n <!-- MEMCACHED -->\r\n <ng-container *ngIf=\"state.server['cache_driver'] === 'memcached'\">\r\n <div class=\"input-container\">\r\n <label for=\"cache.memcached_host\" trans>Memcached Host</label>\r\n <input name=\"cache.memcached_host\" id=\"cache.memcached_host\" [(ngModel)]=\"state.server['memcached_host']\" required>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"cache.memcached_port\" trans>Memcached Port</label>\r\n <input type=\"number\" name=\"cache.memcached_port\" id=\"cache.memcached_port\" [(ngModel)]=\"state.server['memcached_port']\" required>\r\n </div>\r\n </ng-container>\r\n\r\n <p class=\"error\" *ngIf=\"errors.cache_group\" [innerHTML]=\"errors.cache_group\"></p>\r\n </div>\r\n\r\n <button mat-stroked-button color=\"accent\" class=\"button flat\" (click)=\"clearCache()\" type=\"button\" trans>Clear Cache</button>\r\n\r\n <div class=\"widget widget-info widget-important\">\r\n <div class=\"title\" trans>Important!</div>\r\n <p trans>\"File\" is the best option for most cases and should not be changed, unless you are familiar with another cache method and have it set up on the server already.</p>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" [disabled]=\"loading$ | async\" type=\"submit\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {SettingsPanelComponent} from '../settings-panel.component';\r\nimport {finalize} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'cache-settings',\r\n templateUrl: './cache-settings.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class CacheSettingsComponent extends SettingsPanelComponent {\r\n public clearCache() {\r\n this.loading$.next(true);\r\n this.http.post('cache/flush')\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(() => {\r\n this.toast.open('Cache cleared.');\r\n });\r\n }\r\n}\r\n","<div class=\"header\">\r\n <div class=\"title\">Analytics</div>\r\n <div class=\"subtitle\" trans>Configure google analytics integration and credentials.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs\" (submit)=\"saveSettings()\" ngNativeValidate *ngIf=\"errors$ | async as errors\">\r\n <div class=\"error-group many-inputs no-spacing\" id=\"analytics_group\" [class.has-error]=\"errors.analytics_group\">\r\n <div class=\"input-container\" [class.has-error]=\"errors['certificate']\">\r\n <label for=\"certificate\" trans>Google Service Account Key File (.json)</label>\r\n <input type=\"file\" id=\"certificate\" name=\"certificate\" #fileInput (change)=\"setCertificateFile(fileInput.files)\" accept=\".json\">\r\n <p class=\"error\" *ngIf=\"errors['certificate']\">{{errors['certificate']}}</p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"analytics.view_id\" trans>Google Analytics View ID</label>\r\n <input type=\"number\" name=\"analytics.view_id\" id=\"analytics.view_id\" [(ngModel)]=\"state.server['analytics_view_id']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"analytics.tracking_code\" trans>Google Analytics Tracking Code</label>\r\n <input name=\"analytics.tracking_code\" id=\"analytics.tracking_code\" [(ngModel)]=\"state.client['analytics.tracking_code']\" min=\"1\" max=\"20\" placeholder=\"UA-******-2\">\r\n <p trans>Google analytics tracking code only, not the whole javascript code snippet.</p>\r\n </div>\r\n\r\n <p class=\"error\" *ngIf=\"errors.analytics_group\" [innerHTML]=\"errors.analytics_group\"></p>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" [disabled]=\"loading$ | async\" type=\"submit\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {SettingsPanelComponent} from '@common/admin/settings/settings-panel.component';\r\nimport {SettingsPayload} from '@common/core/config/settings-payload';\r\n\r\n@Component({\r\n selector: 'analytics-settings',\r\n templateUrl: './analytics-settings.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class AnalyticsSettingsComponent extends SettingsPanelComponent {\r\n public certificateFile: File;\r\n\r\n public saveSettings(settings?: SettingsPayload) {\r\n const payload = this.getPayload(settings || this.state.getModified());\r\n super.saveSettings(payload);\r\n }\r\n\r\n private getPayload(settings: SettingsPayload) {\r\n if (this.certificateFile) {\r\n settings.files = {certificate: this.certificateFile};\r\n }\r\n return settings;\r\n }\r\n\r\n public setCertificateFile(files: FileList) {\r\n this.certificateFile = files.item(0);\r\n }\r\n}\r\n","<div class=\"header\">\r\n <div class=\"title\" trans>Localization</div>\r\n <div class=\"subtitle\" trans>Manage localization settings for the site.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs\" (submit)=\"saveSettings()\">\r\n\r\n <div class=\"input-container\">\r\n <label for=\"app.timezone\" trans>Timezone</label>\r\n <select name=\"app.timezone\" id=\"app.timezone\" [(ngModel)]=\"state.server['app_timezone']\">\r\n <optgroup [label]=\"pair.key\" *ngFor=\"let pair of selects.timezones | keyvalue\">\r\n <option [value]=\"timezone.value\" *ngFor=\"let timezone of pair.value\">{{timezone.text}}</option>\r\n </optgroup>\r\n </select>\r\n <p trans>Choose either a city in the same timezone as you or a UTC timezone offset.</p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"app.locale\" trans>Site Language</label>\r\n <select name=\"app.locale\" id=\"app.locale\" [(ngModel)]=\"state.server['app_locale']\">\r\n <option [value]=\"localization.language\" *ngFor=\"let localization of selects.localizations\">{{localization.name}}</option>\r\n </select>\r\n <p trans>Which translation should be selected by default for new users.</p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"dates.format\" trans>Date Format</label>\r\n <select name=\"dates.format\" id=\"dates.format\" class=\"no-capitalize\" [(ngModel)]=\"initialDateFormat\" (ngModelChange)=\"updateDateFormat($event)\" required>\r\n <option [value]=\"format\" *ngFor=\"let format of defaultDateFormats\">{{getCurrentDate() | formattedDate:format}} ({{format}})</option>\r\n <option value=\"custom\" trans>Custom</option>\r\n </select>\r\n <p>\r\n {{'Default format for dates on the site.' | trans}}\r\n <br>\r\n {{'Preview:' | trans}} <strong>{{ getCurrentDate() | formattedDate:selectedDateFormat() }}</strong>\r\n </p>\r\n </div>\r\n\r\n <div class=\"input-container\" [class.hidden]=\"initialDateFormat !== 'custom'\">\r\n <label for=\"dates.custom-format\" trans>Custom Date Format</label>\r\n <input type=\"text\" id=\"dates.custom-format\" name=\"dates.custom-format\" [(ngModel)]=\"state.client['dates.format']\" required>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle [(ngModel)]=\"state.client['i18n.enable']\" name=\"translations\" trans>Translations</mat-slide-toggle>\r\n <p trans>Enable translations functionality for the site.</p>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" type=\"submit\" [disabled]=\"loading$ | async\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { SettingsPanelComponent } from '../settings-panel.component';\r\nimport { SelectOptionLists } from '@common/core/services/value-lists.service';\r\n\r\n@Component({\r\n selector: 'localization-settings',\r\n templateUrl: './localization-settings.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class LocalizationSettingsComponent extends SettingsPanelComponent implements OnInit {\r\n public selects: SelectOptionLists = {\r\n timezones: {},\r\n localizations: []\r\n };\r\n public defaultDateFormats = ['MMMM d, y', 'y-M-d', 'M/d/y', 'd/M/y'];\r\n public initialDateFormat: string;\r\n\r\n ngOnInit() {\r\n const initial = this.state.client['dates.format'] as string;\r\n this.initialDateFormat = this.defaultDateFormats.includes(initial) ? initial : 'custom';\r\n this.valueLists.get(['timezones', 'localizations']).subscribe(response => {\r\n this.selects = response;\r\n this.cd.markForCheck();\r\n });\r\n }\r\n\r\n public getCurrentDate() {\r\n return new Date();\r\n }\r\n\r\n public updateDateFormat(value: string) {\r\n if (value && value !== 'custom') {\r\n this.state.client['dates.format'] = value;\r\n }\r\n }\r\n\r\n public selectedDateFormat() {\r\n return this.state.client['dates.format'] as string;\r\n }\r\n}\r\n","<div class=\"header\">\r\n <div class=\"title\" trans>Mail</div>\r\n <div class=\"subtitle\" trans>Change incoming and outgoing email handlers, email credentials and more.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs\" (submit)=\"saveSettings()\" ngNativeValidate *ngIf=\"errors$ | async as errors\">\r\n <div class=\"input-container\">\r\n <label for=\"env.mail_from_address\" trans>From Address</label>\r\n <input type=\"email\" name=\"env.mail_from_address\" id=\"env.mail_from_address\" [(ngModel)]=\"state.server['mail_from_address']\" required>\r\n <p trans>All outgoing application emails will be sent from this email address.</p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"mail.contact_page_address\" trans>Contact Page Address</label>\r\n <input type=\"email\" name=\"mail.contact_page_address\" id=\"mail.contact_page_address\" [(ngModel)]=\"state.client['mail.contact_page_address']\" required>\r\n <p [transValues]=\"{url: settings.getBaseUrl() + 'contact'}\" trans>Where emails from :url page should be sent to.</p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"env.mail_from_name\" trans>From Name</label>\r\n <input name=\"env.mail_from_name\" id=\"env.mail_from_name\" [(ngModel)]=\"state.server['mail_from_name']\" required>\r\n <p trans>All outgoing application emails will be sent using this name.</p>\r\n </div>\r\n\r\n <div class=\"widget widget-info widget-important\">\r\n <div class=\"title\" trans>Important!</div>\r\n <p trans>Your selected mail method must be authorized to send emails using this address and name.</p>\r\n </div>\r\n\r\n <ng-container *ngIf=\"settings.get('vebto.admin.showIncomingMailMethod')\">\r\n <div class=\"input-container\">\r\n <label for=\"mail.handler\" trans>Incoming Mail Method</label>\r\n <select name=\"mail.handler\" id=\"mail.handler\" [(ngModel)]=\"state.client['mail.handler']\">\r\n <option value=\"mailgun\" trans>Mailgun</option>\r\n <option value=\"null\" trans>API (Send emails via http API)</option>\r\n <option value=\"mime\" trans>Pipe (Pipe emails directly)</option>\r\n </select>\r\n <p trans>Which method should be used to handle incoming application emails.</p>\r\n </div>\r\n\r\n <div class=\"input-container\" *ngIf=\"state.client['mail.handler'] === 'null'\">\r\n <label for=\"webhook_secret_key\">API Secret Key</label>\r\n <input type=\"text\" id=\"webhook_secret_key\" name=\"webhook_secret_key\" [(ngModel)]=\"state.client['mail.webhook_secret_key']\" required minlength=\"30\" maxlength=\"30\">\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"error-group many-inputs\" id=\"mail_group\" [class.has-error]=\"errors.mail_group\">\r\n <div class=\"input-container\">\r\n <label for=\"mail.driver\" trans>Outgoing Mail Method</label>\r\n <select name=\"mail.driver\" id=\"mail.driver\" [(ngModel)]=\"state.server['mail_driver']\" (ngModelChange)=\"clearErrors()\">\r\n <option value=\"mailgun\">Mailgun</option>\r\n <option value=\"smtp\">SMTP</option>\r\n <option value=\"sparkpost\">SparkPost</option>\r\n <option value=\"ses\">Ses (Amazon Simple Email Service)</option>\r\n <option value=\"sendmail\">SendMail</option>\r\n <option value=\"log\">Log (Email will be saved to error log)</option>\r\n </select>\r\n <p trans>Which method should be used for sending outgoing application emails.</p>\r\n </div>\r\n\r\n <!-- SMTP -->\r\n <ng-container *ngIf=\"state.server['mail_driver'] === 'smtp'\">\r\n <div class=\"input-container\">\r\n <label for=\"env.mail_host\" trans>SMTP Host</label>\r\n <input name=\"env.mail_host\" id=\"env.mail_host\" [(ngModel)]=\"state.server['mail_host']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"env.mail_username\" trans>SMTP Username</label>\r\n <input name=\"env.mail_username\" id=\"env.mail_username\" [(ngModel)]=\"state.server['mail_username']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"env.mail_password\" trans>SMTP Password</label>\r\n <input type=\"password\" name=\"env.mail_password\" id=\"env.mail_password\" [(ngModel)]=\"state.server['mail_password']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"env.mail_port\" trans>SMTP Port</label>\r\n <input name=\"env.mail_port\" id=\"env.mail_port\" [(ngModel)]=\"state.server['mail_port']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"env.mail_encryption\" trans>SMTP Encryption</label>\r\n <input name=\"env.mail_encryption\" id=\"env.mail_encryption\" [(ngModel)]=\"state.server['mail_encryption']\">\r\n </div>\r\n </ng-container>\r\n\r\n <!-- MAILGUN -->\r\n <ng-container *ngIf=\"state.server['mail_driver'] === 'mailgun'\">\r\n <div class=\"input-container\" [class.has-error]=\"errors.mailgun_domain\">\r\n <label for=\"mailgun_domain\" trans>Mailgun Domain</label>\r\n <input name=\"mailgun_domain\" id=\"mailgun_domain\" [(ngModel)]=\"state.server['mailgun_domain']\">\r\n <div class=\"error\" *ngIf=\"errors.mailgun_domain\">{{errors.mailgun_domain}}</div>\r\n <p trans>Usually the domain of your site (site.com)</p>\r\n </div>\r\n\r\n <div class=\"input-container\" [class.has-error]=\"errors.mailgun_secret\">\r\n <label for=\"mailgun_secret\" trans>Mailgun API Key</label>\r\n <input name=\"mailgun_secret\" id=\"mailgun_secret\" [(ngModel)]=\"state.server['mailgun_secret']\">\r\n <div class=\"error\" *ngIf=\"errors.mailgun_secret\">{{errors.mailgun_secret}}</div>\r\n <p trans>Should start with \"key-\"</p>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- SES -->\r\n <ng-container *ngIf=\"state.server['mail_driver'] === 'ses'\">\r\n <div class=\"input-container\">\r\n <label for=\"env.ses_key\" trans>SES Key</label>\r\n <input name=\"env.ses_key\" id=\"env.ses_key\" [(ngModel)]=\"state.server['ses_key']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"env.ses_secret\" trans>SES Secret</label>\r\n <input name=\"env.ses_secret\" id=\"env.ses_secret\" [(ngModel)]=\"state.server['ses_secret']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"env.ses_region\" trans>SES Region</label>\r\n <input name=\"env.ses_region\" id=\"env.ses_region\" [(ngModel)]=\"state.server['ses_region']\" placeholder=\"us-east-1\">\r\n </div>\r\n </ng-container>\r\n\r\n <!-- SPARKPOST-->\r\n <div class=\"input-container\" *ngIf=\"state.server['mail_driver'] === 'sparkpost'\">\r\n <label for=\"env.sparkpost_secret\" trans>Sparkpost Secret</label>\r\n <input name=\"env.sparkpost_secret\" id=\"env.sparkpost_secret\" [(ngModel)]=\"state.server['sparkpost_secret']\">\r\n </div>\r\n\r\n <p class=\"error group-error\" *ngIf=\"errors.mail_group\" [innerHTML]=\"errors.mail_group\"></p>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" type=\"submit\" [disabled]=\"loading$ | async\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {SettingsPanelComponent} from '../settings-panel.component';\r\n\r\n@Component({\r\n selector: 'mail-settings',\r\n templateUrl: './mail-settings.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class MailSettingsComponent extends SettingsPanelComponent {}\r\n","<div class=\"header\">\r\n <div class=\"title\" trans>Logging</div>\r\n <div class=\"subtitle\" trans>Configure site error and access logging and related 3rd party integrations.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs\" (submit)=\"saveSettings()\" ngNativeValidate *ngIf=\"errors$ | async as errors\">\r\n <div class=\"error-group many-inputs no-spacing\" id=\"logging-group\" [class.has-error]=\"errors.logging_group\">\r\n <div class=\"input-container\">\r\n <label for=\"logging.sentry_dsn\" trans>Sentry DSN</label>\r\n <input type=\"url\" name=\"logging.sentry_dsn\" id=\"logging.sentry_dsn\" [(ngModel)]=\"state.server['sentry_dsn']\" minlength=\"30\">\r\n </div>\r\n\r\n <p class=\"error\" *ngIf=\"errors.logging_group\" [innerHTML]=\"errors.logging_group\"></p>\r\n </div>\r\n\r\n <div class=\"widget widget-info\">\r\n <div class=\"title\" trans>Information</div>\r\n <p>\r\n <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a>\r\n <span> {{'integration provides real-time error tracking and helps identify and fix issues when site is in production.' | trans}}</span>\r\n </p>\r\n </div>\r\n\r\n <button type=\"submit\" mat-raised-button color=\"accent\" class=\"update-button\" [disabled]=\"loading$ | async\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {SettingsPanelComponent} from '../settings-panel.component';\r\n\r\n@Component({\r\n selector: 'logging-settings',\r\n templateUrl: './logging-settings.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class LoggingSettingsComponent extends SettingsPanelComponent {\r\n}\r\n","<div class=\"header\">\r\n <div class=\"title\" trans>Queue</div>\r\n <div class=\"subtitle\" trans>Select active queue method and enter related 3rd party API keys.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs\" (submit)=\"saveSettings()\" ngNativeValidate *ngIf=\"errors$ | async as errors\">\r\n <div class=\"widget widget-info\">\r\n <div class=\"title\" trans>Information</div>\r\n <p trans>Queues allow to defer time consuming tasks, such as sending an email, until a later time. Deferring these tasks can speed up web requests to the application.</p>\r\n </div>\r\n\r\n <div class=\"widget widget-info widget-important\">\r\n <div class=\"title\" trans>Important</div>\r\n <p trans>All methods except sync require additional setup, which should be performed before changing the queue method. Consult documentation for more information.</p>\r\n </div>\r\n\r\n <div class=\"error-group many-inputs no-spacing\" id=\"queue-group\" [class.has-error]=\"errors.queue_group\">\r\n <div class=\"input-container\">\r\n <label for=\"queue.driver\" trans>Queue Method</label>\r\n <select name=\"queue.driver\" id=\"queue.driver\" [(ngModel)]=\"state.server['queue_driver']\" (ngModelChange)=\"clearErrors()\">\r\n <option value=\"sync\" trans>Sync (Default)</option>\r\n <option value=\"beanstalkd\">Beanstalkd</option>\r\n <option value=\"database\">Database</option>\r\n <option value=\"sqs\" trans>SQS (Amazon simple queue service)</option>\r\n <option value=\"redis\">Redis</option>\r\n </select>\r\n </div>\r\n\r\n <!-- SQS -->\r\n <ng-container *ngIf=\"state.server['queue_driver'] === 'sqs'\">\r\n <div class=\"input-container\">\r\n <label for=\"sqs_queue_key\" trans>SQS Queue Key</label>\r\n <input name=\"sqs_queue_key\" id=\"sqs_queue_key\" [(ngModel)]=\"state.server['sqs_queue_key']\" required>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"sqs_queue_secret\" trans>SQS Queue Secret</label>\r\n <input name=\"sqs_queue_secret\" id=\"sqs_queue_secret\" [(ngModel)]=\"state.server['sqs_queue_secret']\" required>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"sqs_queue_prefix\" trans>SQS Queue Prefix</label>\r\n <input name=\"sqs_queue_prefix\" id=\"sqs_queue_prefix\" [(ngModel)]=\"state.server['sqs_queue_prefix']\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"sqs_queue_name\" trans>SQS Queue Name</label>\r\n <input name=\"sqs_queue_name\" id=\"sqs_queue_name\" [(ngModel)]=\"state.server['sqs_queue_name']\" required>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"sqs_queue_region\" trans>SQS Queue Region</label>\r\n <input name=\"sqs_queue_region\" id=\"sqs_queue_region\" [(ngModel)]=\"state.server['sqs_queue_region']\" required>\r\n </div>\r\n </ng-container>\r\n\r\n <p class=\"error\" *ngIf=\"errors.queue_group\" [innerHTML]=\"errors.queue_group\"></p>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" [disabled]=\"loading$ | async\" type=\"submit\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {SettingsPanelComponent} from '@common/admin/settings/settings-panel.component';\r\n\r\n@Component({\r\n selector: 'queue-settings',\r\n templateUrl: './queue-settings.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class QueueSettingsComponent extends SettingsPanelComponent {\r\n public saveSettings() {\r\n const settings = this.state.getModified();\r\n\r\n // need to save pusher key to both .env file and database\r\n // because it is used on server side and on client side\r\n if (settings.client['realtime.pusher_key']) {\r\n settings.server['pusher_key'] = settings.client['realtime.pusher_key'];\r\n }\r\n\r\n super.saveSettings(settings);\r\n }\r\n}\r\n","<div class=\"header\">\r\n <div class=\"title\" trans>Billing</div>\r\n <div class=\"subtitle\" trans>Configure billing and subscription settings.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs\" (submit)=\"saveSettings()\" ngNativeValidate *ngIf=\"errors$ | async as errors\">\r\n <mat-tab-group color=\"accent\" animationDuration=\"0\">\r\n <mat-tab [label]=\"'General' | trans\">\r\n <div class=\"many-inputs tab-content\">\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"billing.enable\" id=\"billing.enable\" [(ngModel)]=\"state.client['billing.enable']\" trans>Enable Billing</mat-slide-toggle>\r\n <p trans>Enable or disable all billing functionality across the site.</p>\r\n </div>\r\n\r\n <ng-container *ngIf=\"state.client['billing.enable']\">\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"billing.paypal.enable\" id=\"billing.paypal.enable\" [(ngModel)]=\"state.client['billing.paypal.enable']\" trans>Paypal Gateway</mat-slide-toggle>\r\n <p trans>Enable PayPal payment gateway.</p>\r\n </div>\r\n\r\n <div class=\"error-group many-inputs\" id=\"paypal_group\" *ngIf=\"state.client['billing.paypal.enable']\" [class.has-error]=\"errors.paypal_group\">\r\n <div class=\"input-container\">\r\n <label for=\"billing.paypal.id\" trans>Paypal Client ID</label>\r\n <input name=\"billing.paypal.id\" id=\"billing.paypal.id\" [(ngModel)]=\"state.server['paypal_client_id']\" required>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"billing.paypal.secret\" trans>Paypal Secret</label>\r\n <input name=\"billing.paypal.secret\" id=\"billing.paypal.secret\" [(ngModel)]=\"state.server['paypal_secret']\" required>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"billing.paypal.webhook_id\" trans>Paypal Webhook ID</label>\r\n <input name=\"billing.paypal.webhook_id\" id=\"billing.paypal.webhook_id\" [(ngModel)]=\"state.server['paypal_webhook_id']\" required>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"billing.paypal.test_mode\" id=\"billing.paypal.test_mode\" [(ngModel)]=\"state.client['billing.paypal_test_mode']\" trans>Paypal Test Mode</mat-slide-toggle>\r\n <p trans>Allows testing PayPal payments with sandbox accounts.</p>\r\n </div>\r\n\r\n <p class=\"error\" *ngIf=\"errors.paypal_group\" [innerHTML]=\"errors.paypal_group\"></p>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"billing.enable.stripe\" id=\"billing.enable.stripe\" [(ngModel)]=\"state.client['billing.stripe.enable']\" trans>Stripe Gateway</mat-slide-toggle>\r\n <p trans>Enable Stripe payment gateway.</p>\r\n </div>\r\n\r\n <div class=\"error-group many-inputs\" id=\"stripe_group\" *ngIf=\"state.client['billing.stripe.enable']\" [class.has-error]=\"errors.stripe_group\">\r\n <div class=\"input-container\">\r\n <label for=\"stripe_key\" trans>Stripe Client ID</label>\r\n <input name=\"billing.stripe.id\" id=\"stripe_key\" [(ngModel)]=\"state.server['stripe_key']\" required>\r\n </div>\r\n\r\n <div class=\"input-container\" [class.has-error]=\"errors.stripe_secret\">\r\n <label for=\"stripe_secret\" trans>Stripe Secret</label>\r\n <input name=\"billing.stripe.secret\" id=\"stripe_secret\" [(ngModel)]=\"state.server['stripe_secret']\" required>\r\n <div class=\"error\" *ngIf=\"errors.stripe_secret\">{{errors.stripe_secret}}</div>\r\n </div>\r\n\r\n <p class=\"error\" *ngIf=\"errors.stripe_group\" [innerHTML]=\"errors.stripe_group\"></p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"accepted-cards\" trans>Accepted Cards</label>\r\n <chip-input\r\n id=\"accepted-cards\"\r\n name=\"accepted-cards\"\r\n [(ngModel)]=\"acceptedCards\"\r\n placeholder=\"+New Card...\"\r\n trans-placeholder\r\n ></chip-input>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n\r\n <mat-tab [label]=\"'Invoices' | trans\">\r\n <div class=\"many-inputs tab-content\">\r\n <div class=\"input-container\">\r\n <label for=\"billing.invoice.address\" trans>Invoice Address</label>\r\n <textarea name=\"billing.invoice.address\" id=\"billing.invoice.address\" [(ngModel)]=\"state.client['billing.invoice.address']\" rows=\"5\"></textarea>\r\n <p trans>Address to show under \"from\" section of user invoice. Supports HTML. Optional.</p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"billing.invoice.notes\" trans>Invoice Note</label>\r\n <textarea name=\"billing.invoice.notes\" id=\"billing.invoice.notes\" [(ngModel)]=\"state.client['billing.invoice.notes']\" rows=\"5\"></textarea>\r\n <p trans>Default notes to show under \"notes\" section of user invoice. Optional.</p>\r\n </div>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" type=\"submit\" [disabled]=\"loading$ | async\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {SettingsPanelComponent} from '../settings-panel.component';\r\n\r\n@Component({\r\n selector: 'billing-settings',\r\n templateUrl: './billing-settings.component.html',\r\n styleUrls: ['./billing-settings.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class BillingSettingsComponent extends SettingsPanelComponent implements OnInit {\r\n public acceptedCards: string[] = [];\r\n\r\n ngOnInit() {\r\n this.acceptedCards = this.settings.getJson('billing.accepted_cards', []);\r\n }\r\n\r\n public saveSettings() {\r\n const settings = this.state.getModified();\r\n settings.client['billing.accepted_cards'] = JSON.stringify(this.acceptedCards);\r\n super.saveSettings(settings);\r\n }\r\n}\r\n","<label for=\"space-input-{{id}}\" *ngIf=\"label\" trans>{{label}}</label>\r\n<div class=\"wrapper\">\r\n <input type=\"number\" min=\"0\" id=\"space-input-{{id}}\" [formControl]=\"form.get('amount')\" placeholder=\"Optional...\" trans-placeholder>\r\n <select [formControl]=\"form.get('unit')\">\r\n <option [ngValue]=\"unit\" *ngFor=\"let unit of spaceUnits\" trans>{{unit}}</option>\r\n </select>\r\n</div>\r\n<ng-content select=\".description\"></ng-content>\r\n<ng-content select=\".error\"></ng-content>","import {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {SettingsState} from '../../../settings-state.service';\n\n@Component({\n selector: 'backblaze-form',\n templateUrl: './backblaze-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BackblazeFormComponent {\n constructor(public state: SettingsState) {}\n}\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {SettingsState} from '../../../settings-state.service';\r\n\r\n@Component({\r\n selector: 'digitalocean-form',\r\n templateUrl: './digitalocean-form.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DigitaloceanFormComponent {\r\n constructor(public state: SettingsState) {}\r\n}\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {SettingsState} from '../../../settings-state.service';\r\n\r\n@Component({\r\n selector: 's3-form',\r\n templateUrl: './s3-form.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class S3FormComponent {\r\n constructor(public state: SettingsState) {}\r\n}\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {SettingsState} from '../../../settings-state.service';\r\n\r\n@Component({\r\n selector: 'rackspace-form',\r\n templateUrl: './rackspace-form.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RackspaceFormComponent {\r\n constructor(public state: SettingsState) {}\r\n}\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {SettingsState} from '../../../settings-state.service';\r\n\r\n@Component({\r\n selector: 'dropbox-form',\r\n templateUrl: './dropbox-form.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DropboxFormComponent {\r\n constructor(public state: SettingsState) {}\r\n}\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {SettingsState} from '../../../settings-state.service';\r\n\r\n@Component({\r\n selector: 'ftp-form',\r\n templateUrl: './ftp-form.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FtpFormComponent {\r\n constructor(public state: SettingsState) {}\r\n}\r\n","import {ChangeDetectionStrategy, Component, HostBinding, Input, OnInit} from '@angular/core';\r\nimport {randomString} from '../../utils/random-string';\r\nimport {spaceUnits} from '../../utils/space-units';\r\nimport {ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {map} from 'rxjs/operators';\r\nimport {convertToBytes} from '../../utils/convertToBytes';\r\nimport {prettyBytes} from '../../utils/pretty-bytes';\r\n\r\n@Component({\r\n selector: 'space-input',\r\n templateUrl: './space-input.component.html',\r\n styleUrls: ['./space-input.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: SpaceInputComponent,\r\n multi: true,\r\n }]\r\n})\r\nexport class SpaceInputComponent implements ControlValueAccessor, OnInit {\r\n @HostBinding('class.input-container') inputContainer = true;\r\n @Input() label: string;\r\n @Input() name: string;\r\n\r\n public id = randomString();\r\n public spaceUnits = spaceUnits;\r\n public form = new FormGroup({\r\n unit: new FormControl('MB'),\r\n amount: new FormControl(null)\r\n });\r\n\r\n public propagateChange: Function;\r\n\r\n ngOnInit() {\r\n this.form.valueChanges\r\n .pipe(map(model => convertToBytes(model.amount, model.unit)))\r\n .subscribe(value => this.propagateChange(value));\r\n }\r\n\r\n public writeValue(value: number) {\r\n this.form.setValue(this.fromBytes(value), {emitEvent: false});\r\n }\r\n\r\n public registerOnChange(fn: Function) {\r\n this.propagateChange = fn;\r\n }\r\n\r\n public registerOnTouched() {}\r\n\r\n private fromBytes(bytes: number) {\r\n const pretty = prettyBytes(bytes);\r\n if ( ! pretty) return {amount: null, unit: 'MB'};\r\n return {amount: pretty.split(' ')[0], unit: pretty.split(' ')[1]};\r\n }\r\n}\r\n","<div class=\"input-container\">\r\n <label for=\"storage_ftp_host\" trans>FTP Hostname</label>\r\n <input type=\"text\" id=\"storage_ftp_host\" name=\"storage_ftp_host\" [(ngModel)]=\"state.server['storage_ftp_host']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_ftp_username\" trans>FTP Username</label>\r\n <input type=\"text\" id=\"storage_ftp_username\" name=\"storage_ftp_username\" [(ngModel)]=\"state.server['storage_ftp_username']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_ftp_password\" trans>FTP Password</label>\r\n <input type=\"password\" id=\"storage_ftp_password\" name=\"storage_ftp_password\" [(ngModel)]=\"state.server['storage_ftp_password']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_ftp_root\" trans>FTP Directory</label>\r\n <input type=\"text\" id=\"storage_ftp_root\" name=\"storage_ftp_root\" [(ngModel)]=\"state.server['storage_ftp_root']\" placeholder=\"/\">\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_ftp_port\" trans>FTP Port</label>\r\n <input type=\"number\" id=\"storage_ftp_port\" name=\"storage_ftp_port\" [(ngModel)]=\"state.server['storage_ftp_port']\" min=\"0\" placeholder=\"21\">\r\n</div>\r\n\r\n<div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"storage_ftp_passive\" id=\"storage_ftp_passive\" [(ngModel)]=\"state.server['storage_ftp_passive']\" trans>Passive</mat-slide-toggle>\r\n</div>\r\n\r\n<div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"storage_ftp_ssl\" id=\"storage_ftp_ssl\" [(ngModel)]=\"state.server['storage_ftp_ssl']\" trans>SSL</mat-slide-toggle>\r\n</div>\r\n","<div class=\"input-container\">\r\n <label for=\"storage_dropbox_access_token\" trans>Access Token</label>\r\n <input type=\"text\" id=\"storage_dropbox_access_token\" name=\"storage_dropbox_access_token\" [(ngModel)]=\"state.server['storage_dropbox_access_token']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_dropbox_root\" trans>Root Directory</label>\r\n <input type=\"text\" id=\"storage_dropbox_root\" name=\"storage_dropbox_root\" [(ngModel)]=\"state.server['storage_dropbox_root']\" placeholder=\"/\">\r\n</div>\r\n","<div class=\"input-container\">\r\n <label for=\"storage_rackspace_username\" trans>Rackspace Username</label>\r\n <input type=\"text\" id=\"storage_rackspace_username\" name=\"storage_rackspace_username\" [(ngModel)]=\"state.server['storage_rackspace_username']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_rackspace_key\" trans>Rackspace Key</label>\r\n <input type=\"text\" id=\"storage_rackspace_key\" name=\"storage_rackspace_key\" [(ngModel)]=\"state.server['storage_rackspace_key']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_rackspace_region\" trans>Rackspace Region</label>\r\n <input type=\"text\" id=\"storage_rackspace_region\" name=\"storage_rackspace_region\" [(ngModel)]=\"state.server['storage_rackspace_region']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_rackspace_container\" trans>Rackspace Container</label>\r\n <input type=\"text\" id=\"storage_rackspace_container\" name=\"storage_rackspace_container\" [(ngModel)]=\"state.server['storage_rackspace_container']\" required>\r\n</div>\r\n","<div class=\"input-container\">\r\n <label for=\"storage_s3_key\" trans>Amazon S3 Key</label>\r\n <input type=\"text\" id=\"storage_s3_key\" name=\"storage_s3_key\" [(ngModel)]=\"state.server['storage_s3_key']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_s3_secret\" trans>Amazon S3 Secret</label>\r\n <input type=\"text\" id=\"storage_s3_secret\" name=\"storage_s3_secret\" [(ngModel)]=\"state.server['storage_s3_secret']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_s3_region\" trans>Amazon S3 Region</label>\r\n <input type=\"text\" id=\"storage_s3_region\" pattern=\"[a-z1-9\\-]+\" placeholder=\"us-east-1\" name=\"storage_s3_region\" [(ngModel)]=\"state.server['storage_s3_region']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_s3_bucket\" trans>Amazon S3 Bucket</label>\r\n <input type=\"text\" id=\"storage_s3_bucket\" name=\"storage_s3_bucket\" [(ngModel)]=\"state.server['storage_s3_bucket']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_s3_endpoint\" trans>Amazon S3 Endpoint</label>\r\n <input type=\"url\" id=\"storage_s3_endpoint\" name=\"storage_s3_endpoint\" [placeholder]=\"'Optional' | trans\" [(ngModel)]=\"state.server['storage_s3_endpoint']\">\r\n <p trans>Only change endpoint if you are using another S3 compatible storage service.</p>\r\n</div>\r\n","<div class=\"input-container\">\r\n <label for=\"storage_digitalocean_key\" trans>DigitalOcean Key</label>\r\n <input type=\"text\" id=\"storage_digitalocean_key\" name=\"storage_digitalocean_key\" [(ngModel)]=\"state.server['storage_digitalocean_key']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_digitalocean_secret\" trans>DigitalOcean Secret</label>\r\n <input type=\"text\" id=\"storage_digitalocean_secret\" name=\"storage_digitalocean_secret\" [(ngModel)]=\"state.server['storage_digitalocean_secret']\" required>\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_digitalocean_region\" trans>DigitalOcean Region</label>\r\n <input type=\"text\" id=\"storage_digitalocean_region\" name=\"storage_digitalocean_region\" [(ngModel)]=\"state.server['storage_digitalocean_region']\" required pattern=\"[a-z0-9]+\" maxlength=\"5\">\r\n</div>\r\n\r\n<div class=\"input-container\">\r\n <label for=\"storage_digitalocean_bucket\" trans>DigitalOcean Bucket</label>\r\n <input type=\"text\" id=\"storage_digitalocean_bucket\" name=\"storage_digitalocean_bucket\" [(ngModel)]=\"state.server['storage_digitalocean_bucket']\" required>\r\n</div>\r\n","<div class=\"input-container\">\n <label for=\"storage_backblaze_key_id\" trans>Backblaze KeyID</label>\n <input type=\"text\" id=\"storage_backblaze_key_id\" name=\"storage_backblaze_key_id\" [(ngModel)]=\"state.server['storage_backblaze_key_id']\" required>\n</div>\n\n<div class=\"input-container\">\n <label for=\"storage_backblaze_application_key\" trans>Backblaze applicationKey</label>\n <input type=\"text\" id=\"storage_backblaze_application_key\" name=\"storage_backblaze_application_key\" [(ngModel)]=\"state.server['storage_backblaze_application_key']\" required>\n</div>\n\n<div class=\"input-container\">\n <label for=\"storage_backblaze_bucket\" trans>Backblaze Bucket Name</label>\n <input type=\"text\" id=\"storage_backblaze_bucket\" name=\"storage_backblaze_bucket\" [(ngModel)]=\"state.server['storage_backblaze_bucket']\" required>\n</div>\n\n<div class=\"input-container\">\n <label for=\"storage_backblaze_region\" trans>Backblaze Region</label>\n <input type=\"text\" id=\"storage_backblaze_region\" pattern=\"[a-z0-9\\-]+\" placeholder=\"us-west-002\" name=\"storage_backblaze_region\" [(ngModel)]=\"state.server['storage_backblaze_region']\" required>\n</div>\n","<div class=\"header\">\r\n <div class=\"title\" trans>User Uploads</div>\r\n <div class=\"subtitle\" trans>Configure size and type of files that users are able to upload. This will affect all uploads across the site.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs\" (ngSubmit)=\"saveSettings()\" ngNativeValidate *ngIf=\"errors$ | async as errors\">\r\n <div class=\"input-container\" *ngIf=\"state.server.uploads_disk_driver\">\r\n <label for=\"uploads_disk_driver\" trans>User Uploads Storage Method</label>\r\n <select name=\"uploads_disk_driver\" id=\"uploads_disk_driver\" [(ngModel)]=\"state.server.uploads_disk_driver\" (ngModelChange)=\"clearErrors()\">\r\n <option value=\"local\" trans>Local Disk (Default)</option>\r\n <option value=\"s3\">Amazon S3</option>\r\n <option value=\"ftp\">FTP</option>\r\n <option value=\"digitalocean\">DigitalOcean</option>\r\n <option value=\"backblaze\">Backblaze</option>\r\n <option value=\"dropbox\">Dropbox</option>\r\n <option value=\"rackspace\">Rackspace</option>\r\n </select>\r\n <p trans>{{settings.get('vebto.translations.uploads_disk_driver_description')}}</p>\r\n </div>\r\n\r\n <div class=\"input-container\" *ngIf=\"state.server.public_disk_driver\">\r\n <label for=\"public_disk_driver\" trans>Public Uploads Storage Method</label>\r\n <select name=\"public_disk_driver\" id=\"public_disk_driver\" [(ngModel)]=\"state.server.public_disk_driver\" (ngModelChange)=\"clearErrors()\">\r\n <option value=\"local\" trans>Local Disk (Default)</option>\r\n <option value=\"s3\">Amazon S3</option>\r\n <option value=\"digitalocean\">DigitalOcean</option>\r\n <option value=\"backblaze\">Backblaze</option>\r\n </select>\r\n <p trans>{{settings.get('vebto.translations.public_disk_driver_description')}}</p>\r\n </div>\r\n\r\n <div class=\"error-group storage-credentials-group\" id=\"storage_group\" [class.hidden]=\"allSelectedDriversAreLocal()\" [class.has-error]=\"errors.storage_group\">\r\n <ftp-form class=\"many-inputs credentials-form\" *ngIf=\"driverSelected('ftp')\"></ftp-form>\r\n <dropbox-form class=\"many-inputs credentials-form\" *ngIf=\"driverSelected('dropbox')\"></dropbox-form>\r\n <rackspace-form class=\"many-inputs credentials-form\" *ngIf=\"driverSelected('rackspace')\"></rackspace-form>\r\n <s3-form class=\"many-inputs credentials-form\" *ngIf=\"driverSelected('s3')\"></s3-form>\r\n <digitalocean-form class=\"many-inputs credentials-form\" *ngIf=\"driverSelected('digitalocean')\"></digitalocean-form>\r\n <backblaze-form class=\"many-inputs credentials-form\" *ngIf=\"driverSelected('backblaze')\"></backblaze-form>\r\n <p class=\"error\" *ngIf=\"errors.storage_group\" [innerHTML]=\"errors.storage_group\"></p>\r\n </div>\r\n\r\n <div class=\"error-group no-bottom-border\" id=\"static_delivery_group\">\r\n <div class=\"input-container\" *ngIf=\"driverSelected('local')\">\r\n <label for=\"static_file_delivery\" trans>File Delivery Optimization</label>\r\n <select name=\"static_file_delivery\" id=\"static_file_delivery\" [(ngModel)]=\"state.server['static_file_delivery']\">\r\n <option [ngValue]=\"null\" trans>None</option>\r\n <option value=\"xsendfile\">X-Sendfile (Apache)</option>\r\n <option value=\"xaccel\">X-Accel (Nginx)</option>\r\n </select>\r\n <p trans>Both X-Sendfile and X-Accel need to be enabled on the server first. When enabled it will reduce server memory and CPU usage when previewing or downloading files, especially for large files. </p>\r\n <p class=\"error\" *ngIf=\"errors.static_delivery_group\" [innerHTML]=\"errors.static_delivery_group\"></p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"error-group\">\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle name=\"uploads.chunk\" id=\"uploads.chunk\" [(ngModel)]=\"state.client['uploads.chunk']\" trans>Chunked Uploads</mat-slide-toggle>\r\n <p trans>When enabled larger files will be uploaded in smaller chunks to improve upload reliability and avoid server max upload size limits.</p>\r\n </div>\r\n\r\n <div class=\"input-container\" *ngIf=\"state.client['uploads.chunk']\">\r\n <label for=\"uploads.max_size\" trans>Chunk Size</label>\r\n <space-input name=\"uploads.chunk_size\" id=\"uploads.chunk_size\" [(ngModel)]=\"state.client['uploads.chunk_size']\"></space-input>\r\n <p trans>Size for each file chunk. Recommended size is 2MB-5MB. Must be lower then max upload file size on your server.</p>\r\n </div>\r\n\r\n <div class=\"widget widget-important\">\r\n <div class=\"title\" trans>Important</div>\r\n <p>{{ 'Maximum upload size on your server currently is set to' | trans }} <strong>{{serverMaxUploadSize$ | async}}</strong>.</p>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\" *ngIf=\"state.client['uploads.chunk']\">\r\n <mat-slide-toggle name=\"uploads.resume\" id=\"uploads.resume\" [(ngModel)]=\"state.client['uploads.resume']\" trans>Resumable Uploads</mat-slide-toggle>\r\n <p trans>Allow users to resume partial or failed uploads.</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"uploads.max_size\" trans>Maximum file size</label>\r\n <space-input name=\"uploads.max_size\" id=\"uploads.max_size\" [(ngModel)]=\"state.client['uploads.max_size']\"></space-input>\r\n <p trans>Maximum size for a single file user can upload.</p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"uploads.available_space\" trans>Available Space</label>\r\n <space-input name=\"uploads.available_space\" id=\"uploads.available_space\" [(ngModel)]=\"state.client['uploads.available_space']\"></space-input>\r\n <p trans>Disk space each user uploads are allowed to take up. This can be overridden per user.</p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"allowed_extensions\" trans>Allowed file types</label>\r\n <chip-input\r\n id=\"allowed_extensions\"\r\n name=\"allowed_extensions\"\r\n placeholder=\"Enter file type...\"\r\n [(ngModel)]=\"allowedExtensions\"\r\n ></chip-input>\r\n <p trans>List of allowed file types (jpg, mp3, pdf etc.). Leave empty to allow all file types.</p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"blocked_extensions\" trans>Blocked file types</label>\r\n <chip-input\r\n id=\"blocked_extensions\"\r\n name=\"blocked_extensions\"\r\n placeholder=\"Enter file type...\"\r\n [(ngModel)]=\"blockedExtensions\"\r\n ></chip-input>\r\n <p trans>Prevent uploading of these file types, even if they are allowed above.</p>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" class=\"update-button\" type=\"submit\" [disabled]=\"loading$ | async\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { SettingsPanelComponent } from '../settings-panel.component';\r\nimport { GenericBackendResponse } from '@common/core/types/backend-response';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'uploading-settings',\r\n templateUrl: './uploading-settings.component.html',\r\n styleUrls: ['./uploading-settings.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class UploadingSettingsComponent extends SettingsPanelComponent implements OnInit {\r\n public allowedExtensions: string[] = [];\r\n public blockedExtensions: string[] = [];\r\n public serverMaxUploadSize$ = new Subject<string>();\r\n\r\n ngOnInit() {\r\n this.allowedExtensions = this.settings.getJson('uploads.allowed_extensions', []);\r\n this.blockedExtensions = this.settings.getJson('uploads.blocked_extensions', []);\r\n this.getServerMaxUploadSize();\r\n }\r\n\r\n public saveSettings() {\r\n this.setJson('uploads.allowed_extensions', this.allowedExtensions);\r\n this.setJson('uploads.blocked_extensions', this.blockedExtensions);\r\n super.saveSettings();\r\n }\r\n\r\n public driverSelected(name: string): boolean {\r\n return [this.state.server.uploads_disk_driver, this.state.server.public_disk_driver]\r\n .includes(name);\r\n }\r\n\r\n public allSelectedDriversAreLocal() {\r\n return [this.state.server.uploads_disk_driver, this.state.server.public_disk_driver]\r\n .every(d => !d || d === 'local');\r\n }\r\n\r\n private getServerMaxUploadSize() {\r\n this.http.get<GenericBackendResponse<{maxSize: string}>>('uploads/server-max-file-size').subscribe(response => {\r\n this.serverMaxUploadSize$.next(response.maxSize);\r\n });\r\n }\r\n}\r\n","/**\r\n * Flatten specified array of arrays.\r\n */\r\nexport function flattenArray<T>(arrays: T[][]): T[] {\r\n return [].concat.apply([], arrays);\r\n}\r\n","<div class=\"header\">\r\n <div class=\"title\" trans>Recaptcha</div>\r\n <div class=\"subtitle\" trans>Configure google recaptcha integration and credentials.</div>\r\n</div>\r\n\r\n<form class=\"body many-inputs\" (submit)=\"saveSettings()\" ngNativeValidate *ngIf=\"errors$ | async as errors\">\r\n\r\n <div class=\"setting-toggle-container\" *ngFor=\"let action of actions\">\r\n <mat-slide-toggle [name]=\"action.key\" [id]=\"action.key\" [(ngModel)]=\"state.client[action.key]\">{{action.name | trans}}</mat-slide-toggle>\r\n <p>{{action.description | trans}}</p>\r\n </div>\r\n\r\n <div class=\"error-group many-inputs no-spacing\" id=\"recaptcha-group\" [class.has-error]=\"errors.recaptcha_group\">\r\n <div class=\"input-container\" [class.has-error]=\"errors['recaptcha.site_key']\">\r\n <label for=\"recaptcha.site_key\" trans>Recaptcha V3 Site Key</label>\r\n <input name=\"recaptcha.site_key\" id=\"recaptcha.site_key\" [(ngModel)]=\"state.client['recaptcha.site_key']\">\r\n <p class=\"error\" *ngIf=\"errors['recaptcha.site_key']\">{{errors['recaptcha.site_key']}}</p>\r\n </div>\r\n\r\n <div class=\"input-container\" [class.has-error]=\"errors['recaptcha.secret_key']\">\r\n <label for=\"recaptcha.secret_key\" trans>Recaptcha V3 Secret Key</label>\r\n <input name=\"recaptcha.secret_key\" id=\"recaptcha.secret_key\" [(ngModel)]=\"state.client['recaptcha.secret_key']\">\r\n <p class=\"error\" *ngIf=\"errors['recaptcha.secret_key']\">{{errors['recaptcha.secret_key']}}</p>\r\n </div>\r\n\r\n <p class=\"error\" *ngIf=\"errors.recaptcha_group\" [innerHTML]=\"errors.recaptcha_group\"></p>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" [disabled]=\"loading$ | async\" type=\"submit\" trans>Update</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject} from '@angular/core';\r\nimport {SettingsPanelComponent} from '../settings-panel.component';\r\nimport {Settings} from '@common/core/config/settings.service';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {AppHttpClient} from '@common/core/http/app-http-client.service';\r\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\r\nimport {ActivatedRoute} from '@angular/router';\r\nimport {CustomHomepage} from '@common/pages/shared/custom-homepage.service';\r\nimport {ValueLists} from '@common/core/services/value-lists.service';\r\nimport {SettingsState} from '@common/admin/settings/settings-state.service';\r\nimport {RECAPTCHA_ACTIONS} from '@common/admin/settings/recaptcha/recaptcha-actions.token';\r\nimport {RecaptchaAction} from '@common/admin/settings/recaptcha/recaptcha-action';\r\nimport {flattenArray} from '@common/core/utils/flatten-array';\r\n\r\n@Component({\r\n selector: 'recaptcha-settings',\r\n templateUrl: './recaptcha-settings.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {'class': 'settings-panel'},\r\n})\r\nexport class RecaptchaSettingsComponent extends SettingsPanelComponent {\r\n public readonly actions: RecaptchaAction[];\r\n constructor(\r\n public settings: Settings,\r\n protected toast: Toast,\r\n protected http: AppHttpClient,\r\n protected modal: Modal,\r\n protected route: ActivatedRoute,\r\n protected customHomepage: CustomHomepage,\r\n protected valueLists: ValueLists,\r\n protected cd: ChangeDetectorRef,\r\n public state: SettingsState,\r\n @Inject(RECAPTCHA_ACTIONS) private recaptchaActions: RecaptchaAction[][],\r\n ) {\r\n super(settings, toast, http, modal, route, customHomepage, valueLists, cd, state);\r\n this.actions = flattenArray(this.recaptchaActions).reverse();\r\n }\r\n}\r\n","import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';\nexport const defaultThrottleConfig = {\n leading: true,\n trailing: false\n};\nexport function throttle(durationSelector, config = defaultThrottleConfig) {\n return (source) => source.lift(new ThrottleOperator(durationSelector, !!config.leading, !!config.trailing));\n}\nclass ThrottleOperator {\n constructor(durationSelector, leading, trailing) {\n this.durationSelector = durationSelector;\n this.leading = leading;\n this.trailing = trailing;\n }\n call(subscriber, source) {\n return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));\n }\n}\nclass ThrottleSubscriber extends SimpleOuterSubscriber {\n constructor(destination, durationSelector, _leading, _trailing) {\n super(destination);\n this.destination = destination;\n this.durationSelector = durationSelector;\n this._leading = _leading;\n this._trailing = _trailing;\n this._hasValue = false;\n }\n _next(value) {\n this._hasValue = true;\n this._sendValue = value;\n if (!this._throttled) {\n if (this._leading) {\n this.send();\n }\n else {\n this.throttle(value);\n }\n }\n }\n send() {\n const { _hasValue, _sendValue } = this;\n if (_hasValue) {\n this.destination.next(_sendValue);\n this.throttle(_sendValue);\n }\n this._hasValue = false;\n this._sendValue = undefined;\n }\n throttle(value) {\n const duration = this.tryDurationSelector(value);\n if (!!duration) {\n this.add(this._throttled = innerSubscribe(duration, new SimpleInnerSubscriber(this)));\n }\n }\n tryDurationSelector(value) {\n try {\n return this.durationSelector(value);\n }\n catch (err) {\n this.destination.error(err);\n return null;\n }\n }\n throttlingDone() {\n const { _throttled, _trailing } = this;\n if (_throttled) {\n _throttled.unsubscribe();\n }\n this._throttled = undefined;\n if (_trailing) {\n this.send();\n }\n }\n notifyNext() {\n this.throttlingDone();\n }\n notifyComplete() {\n this.throttlingDone();\n }\n}\n//# sourceMappingURL=throttle.js.map","import { Subscriber } from '../Subscriber';\nimport { async } from '../scheduler/async';\nimport { defaultThrottleConfig } from './throttle';\nexport function throttleTime(duration, scheduler = async, config = defaultThrottleConfig) {\n return (source) => source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing));\n}\nclass ThrottleTimeOperator {\n constructor(duration, scheduler, leading, trailing) {\n this.duration = duration;\n this.scheduler = scheduler;\n this.leading = leading;\n this.trailing = trailing;\n }\n call(subscriber, source) {\n return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));\n }\n}\nclass ThrottleTimeSubscriber extends Subscriber {\n constructor(destination, duration, scheduler, leading, trailing) {\n super(destination);\n this.duration = duration;\n this.scheduler = scheduler;\n this.leading = leading;\n this.trailing = trailing;\n this._hasTrailingValue = false;\n this._trailingValue = null;\n }\n _next(value) {\n if (this.throttled) {\n if (this.trailing) {\n this._trailingValue = value;\n this._hasTrailingValue = true;\n }\n }\n else {\n this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));\n if (this.leading) {\n this.destination.next(value);\n }\n else if (this.trailing) {\n this._trailingValue = value;\n this._hasTrailingValue = true;\n }\n }\n }\n _complete() {\n if (this._hasTrailingValue) {\n this.destination.next(this._trailingValue);\n this.destination.complete();\n }\n else {\n this.destination.complete();\n }\n }\n clearThrottle() {\n const throttled = this.throttled;\n if (throttled) {\n if (this.trailing && this._hasTrailingValue) {\n this.destination.next(this._trailingValue);\n this._trailingValue = null;\n this._hasTrailingValue = false;\n }\n throttled.unsubscribe();\n this.remove(throttled);\n this.throttled = null;\n }\n }\n}\nfunction dispatchNext(arg) {\n const { subscriber } = arg;\n subscriber.clearThrottle();\n}\n//# sourceMappingURL=throttleTime.js.map","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, OnDestroy } from '@angular/core';\r\nimport { UploadQueueService } from '../upload-queue/upload-queue.service';\r\nimport { animationFrameScheduler, Subscription } from 'rxjs';\r\nimport { throttleTime } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'upload-progress-bar',\r\n templateUrl: './upload-progress-bar.component.html',\r\n styleUrls: ['./upload-progress-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UploadProgressBarComponent implements OnDestroy {\r\n @HostBinding('class.hidden') hidden = true;\r\n private subscription: Subscription;\r\n public progress: number;\r\n\r\n constructor(\r\n private el: ElementRef,\r\n public uploadQueue: UploadQueueService,\r\n private cd: ChangeDetectorRef,\r\n ) {\r\n this.subscription = this.uploadQueue.totalProgress()\r\n // material progress bar animation lasts 250ms\r\n .pipe(throttleTime(260, animationFrameScheduler, {leading: true, trailing: true}))\r\n .subscribe(progress => {\r\n this.progress = progress;\r\n this.hidden = progress === 100 || this.uploadQueue.count$.value.pending === 0;\r\n this.cd.markForCheck();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n\r\n","import { Directive, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { openUploadWindow } from '../utils/open-upload-window';\r\nimport { UploadInputConfig } from '../upload-input-config';\r\nimport {UploadedFile} from '@common/uploads/uploaded-file';\r\n\r\n@Directive({\r\n selector: '[uploadButton]'\r\n})\r\nexport class UploadButtonDirective implements OnInit {\r\n @Input('uploadButton') config: UploadInputConfig = {};\r\n @Output() filesSelected = new EventEmitter<UploadedFile[]>();\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n ngOnInit() {\r\n this.el.nativeElement.addEventListener('click', e => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n openUploadWindow(this.config).then(files => {\r\n if (files && files.length) {\r\n this.filesSelected.emit(files);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","<mat-progress-bar mode=\"determinate\" [value]=\"progress\" color=\"accent\"></mat-progress-bar>\r\n","<image-or-icon *ngIf=\"src$ | async as src; else defaultBg\" [src]=\"src\" class=\"inherit-size\"></image-or-icon>\r\n<ng-template #defaultBg>\r\n <image-or-icon *ngIf=\"defaultBackground\" [src]=\"defaultBackground\" class=\"inherit-size\"></image-or-icon>\r\n</ng-template>\r\n<div class=\"action-buttons\">\r\n <ng-container *ngIf=\"compact\">\r\n <span [matMenuTriggerFor]=\"menu\"></span>\r\n <button type=\"button\" mat-icon-button (click)=\"openUploadDialog()\" class=\"action-button\">\r\n <mat-icon svgIcon=\"edit\"></mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button type=\"button\" mat-menu-item [uploadButton]=\"uploadInputConfig\" (filesSelected)=\"uploadImage($event)\">{{buttonText}}</button>\r\n <button type=\"button\" mat-menu-item (click)=\"deleteUpload()\" trans>Remove</button>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!compact\">\r\n <button type=\"button\" class=\"action-button\" mat-stroked-button color=\"accent\" [uploadButton]=\"uploadInputConfig\" (filesSelected)=\"uploadImage($event)\" trans>{{buttonText}}</button>\r\n <button type=\"button\" class=\"action-button delete-button\" mat-icon-button *ngIf=\"src$ | async\" (click)=\"deleteUpload()\">\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </ng-container>\r\n</div>\r\n<upload-progress-bar></upload-progress-bar>\r\n","import {Component, EventEmitter, HostBinding, Input, Output, ViewChild} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BehaviorSubject} from 'rxjs';\nimport {UploadedFile} from '@common/uploads/uploaded-file';\nimport {UploadQueueService} from '@common/uploads/upload-queue/upload-queue.service';\nimport {UploadInputConfig, UploadInputTypes} from '@common/uploads/upload-input-config';\nimport {AppearanceImageUploadValidator} from '@common/admin/appearance/appearance-image-input/appearance-image-upload-validator';\nimport {UploadUri} from '@common/uploads/types/upload-uri.enum';\nimport {UploadApiConfig} from '@common/uploads/types/upload-api-config';\nimport {UploadsApiService} from '@common/uploads/uploads-api.service';\nimport {AppHttpClient} from '@common/core/http/app-http-client.service';\nimport {openUploadWindow} from '../../../uploads/utils/open-upload-window';\nimport {MatMenuTrigger} from '@angular/material/menu';\n\n@Component({\n selector: 'upload-image-control',\n templateUrl: './upload-image-control.component.html',\n styleUrls: ['./upload-image-control.component.scss'],\n providers: [UploadQueueService, {\n provide: NG_VALUE_ACCESSOR,\n useExisting: UploadImageControlComponent,\n multi: true,\n }]\n})\nexport class UploadImageControlComponent implements ControlValueAccessor {\n @Output() fileDeleted = new EventEmitter();\n @ViewChild(MatMenuTrigger) menuTrigger: MatMenuTrigger;\n @Input() defaultBackground: string;\n @Input() buttonText = 'Upload image';\n @Input() uploadConfig: UploadApiConfig;\n @Input() diskPrefix: string;\n @Input() @HostBinding('class.compact') compact = false;\n public uploadInputConfig: UploadInputConfig = {multiple: false, types: [UploadInputTypes.image]};\n public src$ = new BehaviorSubject<string>(null);\n private propagateChange: Function;\n\n constructor(\n private uploadQueue: UploadQueueService,\n private imageValidator: AppearanceImageUploadValidator,\n private uploadsApi: UploadsApiService,\n private http: AppHttpClient,\n ) {}\n\n public writeValue(value: string) {\n this.src$.next(value);\n }\n\n public registerOnChange(fn: Function) {\n this.propagateChange = fn;\n }\n\n public registerOnTouched() {}\n\n public uploadImage(files: UploadedFile[]) {\n this.uploadQueue.start(files, this.uploadConfig || this.defaultUploadConfig())\n .subscribe(response => {\n this.src$.next(response.fileEntry.url);\n this.propagateChange(response.fileEntry.url);\n });\n }\n\n public deleteUpload() {\n const params = {paths: [this.src$.value], deleteForever: true};\n const request = this.uploadConfig && this.uploadConfig.uri ?\n this.http.delete(this.uploadConfig.uri, params) :\n this.uploadsApi.delete(params);\n\n request.subscribe(() => {\n this.src$.next(null);\n this.propagateChange(null);\n this.fileDeleted.emit();\n });\n }\n\n private defaultUploadConfig(): UploadApiConfig {\n return {\n httpParams: {diskPrefix: this.diskPrefix || 'common_media'},\n uri: UploadUri.Image,\n validator: this.imageValidator,\n };\n }\n\n public openUploadDialog() {\n if (this.src$.value) {\n this.menuTrigger.toggleMenu();\n } else {\n openUploadWindow(this.uploadInputConfig).then(files => {\n this.uploadImage(files);\n });\n }\n }\n}\n","import {Injectable} from '@angular/core';\r\nimport {HttpCacheClient} from '../../core/http/http-cache-client';\r\nimport {Observable} from 'rxjs';\r\nimport {Role} from '../../core/types/models/Role';\r\nimport {PaginatedBackendResponse} from '../../core/types/pagination/paginated-backend-response';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RoleService {\r\n constructor(private httpClient: HttpCacheClient) {}\r\n\r\n public getRoles(): PaginatedBackendResponse<Role> {\r\n return this.httpClient.getWithCache('roles?perPage=15');\r\n }\r\n\r\n public createNew(data): Observable<Role> {\r\n return this.httpClient.post('roles', data);\r\n }\r\n\r\n public update(roleId, data): Observable<Role> {\r\n return this.httpClient.put('roles/' + roleId, data);\r\n }\r\n\r\n public delete(roleId: number): Observable<any> {\r\n return this.httpClient.delete('roles/' + roleId);\r\n }\r\n\r\n public addUsers(roleId: number, emails: string[]): Observable<Role> {\r\n return this.httpClient.post('roles/' + roleId + '/add-users', {emails});\r\n }\r\n\r\n public removeUsers(roleId: number, userIds: number[]): Observable<Role> {\r\n return this.httpClient.post('roles/' + roleId + '/remove-users', {ids: userIds});\r\n }\r\n}\r\n","export class SelectionModel<T> {\r\n private readonly selected = [];\r\n\r\n constructor(initialValues: T[], private readonly key: string|'id') {\r\n this.selected = [...initialValues];\r\n this.key = key || 'id';\r\n }\r\n\r\n public isSelected(item: T): boolean {\r\n return this.findIndex(item) > -1;\r\n }\r\n\r\n public toggle(item: T) {\r\n const i = this.findIndex(item);\r\n if (i > -1) {\r\n this.selected.splice(i, 1);\r\n } else {\r\n this.selected.push({...item});\r\n }\r\n }\r\n\r\n public updateValue(newValue: T) {\r\n const i = this.findIndex(newValue);\r\n this.selected[i] = {...newValue};\r\n }\r\n\r\n public getValue(key: number|string): T {\r\n return this.selected.find(item => item[this.key] === key);\r\n }\r\n\r\n public values(): T[] {\r\n return [...this.selected];\r\n }\r\n\r\n private findIndex(item: T): number {\r\n return this.selected.findIndex(p => p[this.key] === item[this.key]);\r\n }\r\n}\r\n","<div class=\"modal-header\">\r\n <h2 class=\"modal-title\" mat-dialog-title trans>Select Roles</h2>\r\n <button type=\"button\" (click)=\"close()\" class=\"close-button no-style\" tabindex=\"-1\"><mat-icon svgIcon=\"close\"></mat-icon></button>\r\n</div>\r\n\r\n<form (ngSubmit)=\"confirm()\" ngNativeValidate>\r\n <mat-dialog-content>\r\n <ul class=\"unstyled-list selection-list\">\r\n <li class=\"list-item\" *ngFor=\"let role of allRoles$ | async\">\r\n <div class=\"list-item-header\" (click)=\"selectionModel.toggle(role)\" matRipple>\r\n <div class=\"meta\">\r\n <div class=\"list-item-name\">{{role.name}}</div>\r\n </div>\r\n <mat-pseudo-checkbox [state]=\"selectionModel.isSelected(role) ? 'checked' : 'unchecked'\"></mat-pseudo-checkbox>\r\n </div>\r\n </li>\r\n </ul>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions class=\"buttons right mat-dialog-actions\">\r\n <button (click)=\"close()\" mat-button type=\"button\" trans>Cancel</button>\r\n <button type=\"submit\" mat-raised-button color=\"accent\" trans>Select</button>\r\n </mat-dialog-actions>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {Role} from '@common/core/types/models/Role';\r\nimport {RoleService} from '@common/admin/roles/role.service';\r\nimport {SelectionModel} from '@common/core/utils/SelectionModel';\r\nimport {BehaviorSubject} from 'rxjs';\r\n\r\nexport interface SelectRolesModalData {\r\n initialRoles?: Role[];\r\n}\r\n\r\n@Component({\r\n selector: 'select-roles-modal',\r\n templateUrl: './select-roles-modal.component.html',\r\n styleUrls: ['./select-roles-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SelectRolesModalComponent implements OnInit {\r\n public allRoles$ = new BehaviorSubject<Role[]>([]);\r\n public selectionModel = new SelectionModel(this.data.initialRoles || [], 'id');\r\n\r\n constructor(\r\n private rolesService: RoleService,\r\n private dialogRef: MatDialogRef<SelectRolesModalComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: SelectRolesModalData,\r\n ) {}\r\n\r\n public ngOnInit() {\r\n this.fetchAllRoles();\r\n }\r\n\r\n public confirm() {\r\n this.close(this.selectionModel.values());\r\n }\r\n\r\n public close(data?) {\r\n this.dialogRef.close(data);\r\n }\r\n\r\n private fetchAllRoles() {\r\n this.rolesService.getRoles()\r\n .subscribe(response => this.allRoles$.next(response.pagination.data));\r\n }\r\n}\r\n","<div class=\"panel-outter\" *ngIf=\"currentUser.hasPermission('roles.update')\">\n <div class=\"header\">\n <div class=\"title\" trans>Roles</div>\n <div class=\"add-button\" *ngIf=\"!readonly\">\n <button mat-flat-button color=\"accent\" class=\"select-roles-modal-button\" (click)=\"openSelectRolesModal()\" type=\"button\" trans>Manage</button>\n </div>\n </div>\n <div class=\"panel-body roles\">\n <div class=\"no-permissions\" *ngIf=\"!(roles$ | async)?.length\" trans>No roles yet.</div>\n\n <mat-chip-list [selectable]=\"false\">\n <mat-chip (removed)=\"detachRole(role)\" [removable]=\"true\" *ngFor=\"let role of roles$ | async\" [disabled]=\"readonly\">\n <span class=\"role-name\">{{role.name}}</span>\n <mat-icon svgIcon=\"cancel\" matChipRemove></mat-icon>\n </mat-chip>\n </mat-chip-list>\n </div>\n</div>","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {Role} from '@common/core/types/models/Role';\nimport {Users} from '@common/auth/users.service';\nimport {RoleService} from '@common/admin/roles/role.service';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {SelectRolesModalComponent} from '@common/admin/users/select-roles-modal/select-roles-modal.component';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'role-manager',\n templateUrl: './role-manager.component.html',\n styleUrls: ['./role-manager.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: RoleManagerComponent,\n multi: true,\n }]\n})\nexport class RoleManagerComponent implements ControlValueAccessor {\n public roles$ = new BehaviorSubject<Role[]>([]);\n @Input() readonly = false;\n private propagateChange: Function;\n\n constructor(\n public users: Users,\n private roleApi: RoleService,\n private modal: Modal,\n public currentUser: CurrentUser,\n ) {}\n\n public openSelectRolesModal() {\n this.modal.open(\n SelectRolesModalComponent,\n {initialRoles: this.roles$.value},\n ).afterClosed().subscribe((roles: Role[]) => {\n if ( ! roles) return;\n this.setRoles(roles);\n });\n }\n\n public setRoles(roles: Role[]) {\n this.roles$.next(roles);\n this.propagateChange(this.roles$.value);\n }\n\n public detachRole(role: Role) {\n const roles = this.roles$.value.filter(r => r.id !== role.id);\n this.setRoles(roles);\n }\n\n public writeValue(value: Role[]) {\n this.roles$.next(value);\n }\n\n public registerOnChange(fn: Function) {\n this.propagateChange = fn;\n }\n\n public registerOnTouched() {}\n}\n","<div class=\"modal-header\">\r\n <h2 class=\"modal-title mat-dialog-title\" mat-dialog-title trans>Select Permissions</h2>\r\n <button type=\"button\" tabindex=\"-1\" (click)=\"close()\" class=\"close-button no-style\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</div>\r\n\r\n<mat-dialog-content>\r\n <mat-accordion>\r\n <mat-expansion-panel class=\"mat-elevation-z2\" *ngFor=\"let pair of allPermissions$ | async | keyvalue\" [expanded]=\"false\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title trans>{{pair.key.replace('_', ' ')}}</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <ul class=\"unstyled-list selection-list\">\r\n <li class=\"list-item\" *ngFor=\"let permission of pair.value\">\r\n <div class=\"list-item-header\" (click)=\"selectionModel.toggle(permission)\" matRipple>\r\n <div class=\"meta\">\r\n <div class=\"list-item-name\" trans>{{permission.display_name || permission.name}}</div>\r\n <p *ngIf=\"permission.description\" class=\"list-item-description\" trans>{{permission.description}}</p>\r\n </div>\r\n <mat-pseudo-checkbox\r\n [state]=\"selectionModel.isSelected(permission) ? 'checked' : 'unchecked'\"></mat-pseudo-checkbox>\r\n </div>\r\n <div class=\"list-item-restrictions\"\r\n *ngIf=\"!data?.hideRestrictions && permission.restrictions?.length && selectionModel.isSelected(permission)\">\r\n <ng-container *ngFor=\"let restriction of permission.restrictions\">\r\n <div class=\"input-container\" [ngSwitch]=\"restriction.type\">\r\n <label [for]=\"permission.name + '-' + restriction.name\">{{viewName(restriction.name)}}</label>\r\n <input type=\"number\" min=\"0\" [id]=\"permission.name + '-' + restriction.name\" *ngSwitchCase=\"'number'\" [(ngModel)]=\"restriction.value\">\r\n <p class=\"description\" *ngIf=\"restriction.description\" trans>{{restriction.description}}</p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n <button (click)=\"close()\" mat-button type=\"button\" trans>Cancel</button>\r\n <button type=\"submit\" mat-raised-button color=\"accent\" (click)=\"confirm()\" trans>Select</button>\r\n</mat-dialog-actions>\r\n\r\n<loading-indicator [isVisible]=\"loading$ | async\" class=\"overlay overlay-partial\"></loading-indicator>\r\n","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {Permission} from '@common/core/types/models/permission';\r\nimport {ValueLists} from '@common/core/services/value-lists.service';\r\nimport {SelectionModel} from '@common/core/utils/SelectionModel';\r\nimport {groupBy} from '@common/core/utils/group-by';\r\nimport {flattenArray} from '@common/core/utils/flatten-array';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {finalize} from 'rxjs/operators';\r\n\r\nexport interface SelectPermissionsModalData {\r\n initialPermissions: Permission[];\r\n valueListKey: string;\r\n hideRestrictions: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'select-permissions-modal',\r\n templateUrl: './select-permissions-modal.component.html',\r\n styleUrls: ['./select-permissions-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SelectPermissionsModalComponent implements OnInit {\r\n public allPermissions$ = new BehaviorSubject<{[key: string]: Permission[]}>({});\r\n public loading$ = new BehaviorSubject(false);\r\n public selectionModel = new SelectionModel(this.data.initialPermissions || [], 'name');\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef<SelectPermissionsModalComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: SelectPermissionsModalData,\r\n private values: ValueLists,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.fetchAllPermissions();\r\n }\r\n\r\n public confirm() {\r\n this.close(this.getSelectedPermissions());\r\n }\r\n\r\n public close(permissions?: Permission[]) {\r\n this.dialogRef.close(permissions);\r\n }\r\n\r\n private fetchAllPermissions() {\r\n const valueListKey = this.data.valueListKey || 'permissions';\r\n this.loading$.next(true);\r\n this.values.get([valueListKey])\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(response => {\r\n this.allPermissions$.next(groupBy<Permission>(this.mergeRestrictions(response[valueListKey]), 'group'));\r\n });\r\n }\r\n\r\n private getSelectedPermissions(): Permission[] {\r\n const allPermissions = flattenArray(Object.values(this.allPermissions$.value));\r\n return allPermissions.filter(permission => {\r\n return this.selectionModel.isSelected(permission);\r\n });\r\n }\r\n\r\n private mergeRestrictions(allPermissions: Permission[]) {\r\n return allPermissions.map(permission => {\r\n // merge restriction definition from \"allPermissions\" and value set for that\r\n // restriction on pivot table so can bind ngModel to \"allRestrictions\" variable\r\n const modelPermission = this.selectionModel.getValue(permission.name);\r\n permission.restrictions = (permission.restrictions || []).map(restriction => {\r\n let modelRestriction = {};\r\n if (modelPermission && modelPermission.restrictions) {\r\n modelRestriction = modelPermission.restrictions.find(r => r.name === restriction.name) || {};\r\n }\r\n return {...restriction, ...modelRestriction};\r\n });\r\n return permission;\r\n });\r\n }\r\n\r\n public viewName(name: string) {\r\n return name.replace(/_/g, ' ');\r\n }\r\n}\r\n","export const groupBy = function<T>(array: object[], key: string): {[key: string]: T[]} {\r\n return array.reduce(function(rv, x) {\r\n (rv[x[key]] = rv[x[key]] || []).push(x);\r\n return rv;\r\n }, {}) as {[key: string]: T[]};\r\n};\r\n\r\n","<div class=\"header\">\r\n <span class=\"title\" trans>Permissions</span>\r\n <button mat-flat-button color=\"accent\" (click)=\"showSelectPermissionsModal()\" type=\"button\" trans>Manage</button>\r\n</div>\r\n<div class=\"manage-permissions\">\r\n <div class=\"no-permissions\" *ngIf=\"!(permissions$ | async)?.length\" trans>No permissions yet.</div>\r\n\r\n <mat-chip-list [selectable]=\"false\">\r\n <mat-chip (removed)=\"removePermission(permission.name)\" [removable]=\"true\" *ngFor=\"let permission of permissions$ | async\">\r\n <span>\r\n <span trans>{{permission.name}}</span>\r\n <ng-container *ngIf=\"getCountRestriction(permission) as restriction\">\r\n <span *ngIf=\"restriction.value\">({{restriction.value + ' ' + 'max' | trans}})</span>\r\n </ng-container>\r\n </span>\r\n <mat-icon svgIcon=\"cancel\" matChipRemove></mat-icon>\r\n </mat-chip>\r\n </mat-chip-list>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\r\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\r\nimport {\r\n SelectPermissionsModalComponent,\r\n SelectPermissionsModalData\r\n} from '@common/admin/permissions/select-permissions-modal/select-permissions-modal.component';\r\nimport {Permission, PermissionRestriction} from '@common/core/types/models/permission';\r\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {BehaviorSubject} from 'rxjs';\r\n\r\n@Component({\r\n selector: 'permission-manager',\r\n templateUrl: './permission-manager.component.html',\r\n styleUrls: ['./permission-manager.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PermissionManagerComponent,\r\n multi: true,\r\n }]\r\n})\r\nexport class PermissionManagerComponent implements ControlValueAccessor {\r\n @Input() valueListKey = 'permissions';\r\n @Input() hideRestrictions = false;\r\n public permissions$ = new BehaviorSubject<Permission[]>([]);\r\n private propagateChange: Function;\r\n\r\n constructor(private modal: Modal) {}\r\n\r\n public showSelectPermissionsModal() {\r\n this.modal.open(\r\n SelectPermissionsModalComponent,\r\n {\r\n initialPermissions: this.permissions$.value,\r\n valueListKey: this.valueListKey,\r\n hideRestrictions: this.hideRestrictions,\r\n } as SelectPermissionsModalData,\r\n ).afterClosed()\r\n .subscribe(permissions => {\r\n if ( ! permissions) return;\r\n this.setPermissions(permissions);\r\n });\r\n }\r\n\r\n public removePermission(name: string) {\r\n const permissions = this.permissions$.value.filter(p => p.name !== name);\r\n this.setPermissions(permissions);\r\n }\r\n\r\n public setPermissions(permissions: Permission[]) {\r\n this.permissions$.next(permissions);\r\n this.propagateChange(this.permissions$.value);\r\n }\r\n\r\n public getCountRestriction(permission: Permission): PermissionRestriction {\r\n return permission.restrictions.find(r => r.name === 'count');\r\n }\r\n\r\n public writeValue(value: Permission[]) {\r\n this.permissions$.next(value);\r\n }\r\n\r\n public registerOnChange(fn: Function) {\r\n this.propagateChange = fn;\r\n }\r\n\r\n public registerOnTouched() {}\r\n}\r\n","<div class=\"modal-header\">\r\n <h2 class=\"modal-title\" mat-dialog-title *ngIf=\"data.user\" trans>Update User Details</h2>\r\n <h2 class=\"modal-title\" mat-dialog-title *ngIf=\"!data.user\" trans>Create a New User</h2>\r\n <button type=\"button\" (click)=\"close()\" class=\"close-button no-style\" tabindex=\"-1\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</div>\r\n\r\n<form autocomplete=\"off\" (ngSubmit)=\"confirm()\" [formGroup]=\"form\" *ngIf=\"errors$ | async as errors\" ngNativeValidate>\r\n <mat-dialog-content class=\"many-inputs\">\r\n <div class=\"input-container\" *ngIf=\"!data.user\">\r\n <label for=\"email\" trans>Email</label>\r\n <input type=\"email\" id=\"email\" formControlName=\"email\" required>\r\n <div class=\"error\" *ngIf=\"errors?.email\">{{errors?.email}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\" *ngIf=\"!data.user\">\r\n <label for=\"password\" trans>Password</label>\r\n <input type=\"password\" id=\"password\" formControlName=\"password\" required>\r\n <div class=\"error\" *ngIf=\"errors?.password\">{{errors?.password}}</div>\r\n </div>\r\n\r\n <div class=\"avatar-container\">\r\n <div class=\"input-container avatar-input-container\">\r\n <upload-image-control [uploadConfig]=\"avatarUploadConfig()\" class=\"inherit-size\" formControlName=\"avatar\"></upload-image-control>\r\n <div class=\"error\" *ngIf=\"errors?.avatar\">{{errors?.avatar}}</div>\r\n </div>\r\n <div class=\"many-inputs\">\r\n <div class=\"input-container\">\r\n <label for=\"first_name\" trans>First Name</label>\r\n <input type=\"text\" id=\"first_name\" formControlName=\"first_name\">\r\n <div class=\"error\" *ngIf=\"errors?.first_name\">{{errors?.first_name}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"last_name\" trans>Last Name</label>\r\n <input type=\"text\" id=\"last_name\" formControlName=\"last_name\">\r\n <div class=\"error\" *ngIf=\"errors?.last_name\">{{errors?.last_name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-container\" [class.resend-button-visible]=\"shouldShowResendButton()\">\r\n <label for=\"confirmed\" trans>Email Confirmed</label>\r\n <div class=\"confirmed-select-wrapper\">\r\n <select id=\"confirmed\" formControlName=\"email_verified_at\">\r\n <option [ngValue]=\"true\" trans>Yes</option>\r\n <option [ngValue]=\"false\" trans>No</option>\r\n </select>\r\n <button mat-flat-button color=\"accent\" type=\"button\" class=\"resend-confirmation-button\" [disabled]=\"loading$ | async\" (click)=\"sendEmailConfirmation()\" trans>Resend</button>\r\n </div>\r\n <div class=\"error\" *ngIf=\"errors?.email_verified_at\">{{errors?.email_verified_at}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"crupdate-user-new-password\" trans>New Password</label>\r\n <div class=\"input-with-action\">\r\n <input type=\"text\" id=\"crupdate-user-new-password\" formControlName=\"password\">\r\n <button type=\"button\" mat-flat-button color=\"accent\" (click)=\"generateNewPassword()\" trans>Generate</button>\r\n </div>\r\n </div>\r\n\r\n <space-input label=\"Available Space\" formControlName=\"available_space\">\r\n <p class=\"description\" trans>Disk space available to user. If left empty, it will be inherited from value set in \"admin -> settings -> uploading\" page.</p>\r\n <div class=\"error\" *ngIf=\"errors?.available_space\">{{errors?.available_space}}</div>\r\n </space-input>\r\n\r\n <role-manager formControlName=\"roles\"></role-manager>\r\n <div class=\"error\" *ngIf=\"errors?.roles\">{{errors?.roles}}</div>\r\n\r\n <permission-manager formControlName=\"permissions\" *ngIf=\"currentUser.hasPermission('permissions.update')\"></permission-manager>\r\n <div class=\"error\" *ngIf=\"errors?.permissions\">{{errors?.permissions}}</div>\r\n </mat-dialog-content>\r\n\r\n <div class=\"buttons right mat-dialog-actions\" mat-dialog-actions>\r\n <button (click)=\"close()\" type=\"button\" mat-button class=\"button cancel\" trans>Cancel</button>\r\n <button type=\"submit\" class=\"button primary\" mat-raised-button color=\"accent\" [disabled]=\"loading$ | async\">\r\n <span *ngIf=\"data.user\" trans>Update User</span>\r\n <span *ngIf=\"!data.user\" trans>Create User</span>\r\n </button>\r\n </div>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {finalize} from 'rxjs/operators';\r\nimport {CurrentUser} from '@common/auth/current-user';\r\nimport {User} from '@common/core/types/models/User';\r\nimport {Users} from '@common/auth/users.service';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {FormBuilder} from '@angular/forms';\r\nimport {AuthService} from '@common/auth/auth.service';\r\nimport {Settings} from '@common/core/config/settings.service';\r\nimport {UploadApiConfig} from '@common/uploads/types/upload-api-config';\r\nimport {AvatarValidator} from '@common/account-settings/avatar-validator';\r\nimport {UploadUri} from '@common/uploads/types/upload-uri.enum';\r\nimport {randomString} from '@common/core/utils/random-string';\r\nimport {HttpErrors} from '@common/core/http/errors/http-errors.enum';\r\nimport {BackendErrorResponse} from '@common/core/types/backend-error-response';\r\n\r\nexport interface CrupdateUserModalData {\r\n user?: User;\r\n}\r\n\r\n@Component({\r\n selector: 'crupdate-user-modal',\r\n templateUrl: './crupdate-user-modal.component.html',\r\n styleUrls: ['./crupdate-user-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CrupdateUserModalComponent implements OnInit {\r\n public loading$ = new BehaviorSubject<boolean>(false);\r\n public form = this.fb.group({\r\n email: [''],\r\n password: [''],\r\n avatar: [''],\r\n first_name: [''],\r\n last_name: [''],\r\n email_verified_at: [false],\r\n available_space: [''],\r\n roles: [],\r\n permissions: [],\r\n });\r\n public errors$ = new BehaviorSubject<Partial<User>>({});\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef<CrupdateUserModalComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: CrupdateUserModalData,\r\n public users: Users,\r\n private toast: Toast,\r\n public currentUser: CurrentUser,\r\n private fb: FormBuilder,\r\n private auth: AuthService,\r\n private settings: Settings,\r\n private avatarValidator: AvatarValidator,\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.data.user) {\r\n // password input should always be empty\r\n this.form.patchValue({\r\n ...this.data.user,\r\n password: null,\r\n email_verified_at: !!this.data.user.email_verified_at\r\n });\r\n }\r\n }\r\n \r\n public confirm() {\r\n if (this.loading$.value) {\r\n return;\r\n }\r\n let request;\r\n const payload = this.getPayload();\r\n\r\n this.loading$.next(true);\r\n\r\n if (this.data.user) {\r\n request = this.users.update(this.data.user.id, payload);\r\n } else {\r\n request = this.users.create(payload);\r\n }\r\n\r\n request.pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(response => {\r\n this.close(response.user);\r\n const action = this.data.user ? 'updated' : 'created';\r\n this.toast.open('User ' + action);\r\n }, (errResponse: BackendErrorResponse) => this.errors$.next(errResponse.errors));\r\n }\r\n \r\n public close(data?: any) {\r\n this.dialogRef.close(data);\r\n }\r\n \r\n private getPayload() {\r\n const payload = {...this.form.value};\r\n payload.roles = (payload.roles || []).map(role => role.id);\r\n payload.permissions = (payload.permissions || []);\r\n if ( ! payload.password) {\r\n delete payload.password;\r\n }\r\n payload.email_verified_at = payload.email_verified_at ? new Date() : null;\r\n return payload;\r\n }\r\n\r\n public sendEmailConfirmation() {\r\n this.loading$.next(true);\r\n this.auth.resendEmailConfirmation(this.data.user.email)\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(() => {\r\n this.toast.open('Verification email re-sent.');\r\n }, (errResponse: BackendErrorResponse) => {\r\n this.toast.open(errResponse.message || HttpErrors.Default);\r\n });\r\n }\r\n\r\n public shouldShowResendButton(): boolean {\r\n return this.data.user &&\r\n this.data.user.id &&\r\n this.settings.get('require_email_confirmation') &&\r\n !this.form.get('email_verified_at').value;\r\n }\r\n\r\n public avatarUploadConfig(): UploadApiConfig {\r\n const uri = this.data.user ?\r\n `users/${this.data.user.id}/avatar` :\r\n UploadUri.Image;\r\n return {\r\n uri: uri,\r\n httpParams: {diskPrefix: 'avatars'},\r\n validator: this.avatarValidator,\r\n };\r\n }\r\n\r\n public generateNewPassword() {\r\n this.form.patchValue({password: randomString(15)});\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {ControlValueAccessor, FormBuilder, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {filter} from 'rxjs/operators';\n\n@Component({\n selector: 'between-input',\n templateUrl: './between-input.component.html',\n styleUrls: ['./between-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: BetweenInputComponent,\n multi: true,\n }]\n})\nexport class BetweenInputComponent implements ControlValueAccessor {\n @Input() setDefaultDate = false;\n @Input() showLabels = false;\n public datePattern = '([12]\\\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\\\d|3[01]))';\n private initiated = false;\n public defaultFrom: string;\n public defaultTo: string;\n private propagateChange: Function;\n public form = this.fb.group({\n from: [''],\n to: [''],\n });\n\n constructor(public fb: FormBuilder) {\n this.defaultFrom = this.getDefaultDate(7);\n this.defaultTo = this.getDefaultDate();\n }\n\n public writeValue(value: string|string[]) {\n if ( ! Array.isArray(value)) {\n value = (value || '').split(':');\n }\n let [from, to] = value;\n\n if ( ! this.initiated && this.setDefaultDate) {\n from = from || this.defaultFrom;\n to = to || this.defaultTo;\n }\n\n this.initiated = true;\n this.form.patchValue({from, to});\n }\n\n public registerOnChange(fn: Function) {\n this.propagateChange = fn;\n this.form.valueChanges\n // only emit if user has set values to both to and from inputs\n .pipe(filter(value => value.from && value.to))\n .subscribe(value => {\n const between = `${value.from}:${value.to}`;\n this.propagateChange(between);\n });\n }\n\n public registerOnTouched() {}\n\n private getDefaultDate(minusDays: number = 0) {\n const d = new Date();\n d.setDate(d.getDate() - minusDays);\n const month = this.addZero(d.getMonth() + 1),\n day = this.addZero(d.getDate());\n return `${d.getFullYear()}-${month}-${day}`;\n }\n\n private addZero(number: number): string {\n return number < 10 ? '0' + number : '' + number;\n }\n}\n","<fieldset [formGroup]=\"form\">\n <legend trans>\n <ng-content></ng-content>\n </legend>\n <div class=\"inline-inputs-container\">\n <div class=\"input-container\">\n <label for=\"from\" [class.hidden]=\"!showLabels\" trans>From</label>\n <input type=\"date\" id=\"from\" formControlName=\"from\" [placeholder]=\"defaultFrom\" [pattern]=\"datePattern\" required>\n </div>\n <div class=\"input-container\">\n <label for=\"to\" [class.hidden]=\"!showLabels\" trans>To</label>\n <input type=\"date\" id=\"to\" formControlName=\"to\" [placeholder]=\"defaultTo\" [pattern]=\"datePattern\" required>\n </div>\n </div>\n</fieldset>","<div [formGroup]=\"form\" class=\"many-inputs\">\n <div class=\"input-container\" *ngIf=\"settings.get('billing.enable')\">\n <label for=\"user-subscribed-filter\" trans>Subscribed</label>\n <select id=\"user-subscribed-filter\" formControlName=\"subscribed\">\n <option [ngValue]=\"null\" trans>All</option>\n <option [ngValue]=\"true\" trans>Subscribed</option>\n <option [ngValue]=\"false\" trans>Not subscribed</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <label for=\"user-status-filter\" trans>Status</label>\n <select id=\"user-status-filter\" formControlName=\"email_verified_at\">\n <option [ngValue]=\"null\" trans>All</option>\n <option [ngValue]=\"true\" trans>Email confirmed</option>\n <option [ngValue]=\"false\" trans>Email not confirmed</option>\n </select>\n </div>\n\n <between-input formControlName=\"created_at\" [setDefaultDate]=\"false\" [showLabels]=\"false\">Created Between</between-input>\n</div>\n","import {Component, OnInit, ChangeDetectionStrategy, Input} from '@angular/core';\nimport {FormBuilder} from '@angular/forms';\nimport {DatatableService} from '../../../datatable/datatable.service';\nimport {Model} from '../../../core/types/models/model';\nimport {Settings} from '../../../core/config/settings.service';\n\n@Component({\n selector: 'user-index-filters',\n templateUrl: './user-index-filters.component.html',\n styleUrls: ['./user-index-filters.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UserIndexFiltersComponent implements OnInit {\n public form = this.fb.group({\n subscribed: null,\n email_verified_at: null,\n created_at: null,\n });\n\n constructor(\n private fb: FormBuilder,\n private datable: DatatableService<Model>,\n public settings: Settings,\n ) {\n this.form.patchValue(this.datable.filters$.value);\n }\n\n ngOnInit() {\n this.form.valueChanges.subscribe(value => {\n this.datable.filters$.next(value);\n });\n }\n}\n","<div class=\"datatable responsive-table\">\r\n <datatable-header pluralResourceName=\"users\">\r\n <ng-container leftContent>\r\n <button mat-raised-button color=\"accent\" (click)=\"showCrupdateUserModal()\" *ngIf=\"currentUser.hasPermission('users.create')\" trans>Add</button>\r\n </ng-container>\r\n <button mat-raised-button color=\"accent\" [matTooltip]=\"'Delete selected' | trans\" (click)=\"maybeDeleteSelectedUsers()\" rightContent *ngIf=\"currentUser.hasPermission('users.delete')\" trans>Delete Selected</button>\r\n <ng-template #tableFilters>\r\n <user-index-filters></user-index-filters>\r\n </ng-template>\r\n </datatable-header>\r\n <table class=\"material-table\">\r\n <thead>\r\n <tr>\r\n <th table-header-checkbox></th>\r\n <th table-sort-header=\"email\" trans>User</th>\r\n <th *ngIf=\"settings.get('billing.enable')\" trans>Subscribed</th>\r\n <th trans>Roles</th>\r\n <th table-sort-header trans>First Name</th>\r\n <th table-sort-header trans>Last Name</th>\r\n <th table-sort-header trans>Created At</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let user of users$ | async\">\r\n <td [table-body-checkbox]=\"user.id\"></td>\r\n <td>\r\n <user-column [user]=\"user\"></user-column>\r\n </td>\r\n <td data-label=\"Subscribed\" *ngIf=\"settings.get('billing.enable')\">{{user.subscriptions?.length ? 'Yes' : 'No'}}</td>\r\n <td data-label=\"Roles\">{{makeRolesList(user.roles)}}</td>\r\n <td data-label=\"First Name\">{{user.first_name || '-'}}</td>\r\n <td data-label=\"Last Name\">{{user.last_name || '-'}}</td>\r\n <td>{{user.created_at | formattedDate}}</td>\r\n <td class=\"edit-column\">\r\n <button mat-icon-button (click)=\"showCrupdateUserModal(user)\" *ngIf=\"currentUser.hasPermission('users.update')\" [matTooltip]=\"'Edit user' | trans\">\r\n <mat-icon svgIcon=\"edit\"></mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <no-results-message svgImage=\"people.svg\" *ngIf=\"datatable.paginator.noResults$ | async\">\r\n <span primary-text trans>No users have been created yet</span>\r\n </no-results-message>\r\n <datatable-footer></datatable-footer>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\r\nimport {CrupdateUserModalComponent} from './crupdate-user-modal/crupdate-user-modal.component';\r\nimport {User} from '@common/core/types/models/User';\r\nimport {Users} from '@common/auth/users.service';\r\nimport {CurrentUser} from '@common/auth/current-user';\r\nimport {Settings} from '@common/core/config/settings.service';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {HttpErrors} from '@common/core/http/errors/http-errors.enum';\r\nimport {Role} from '@common/core/types/models/Role';\r\nimport {BackendErrorResponse} from '@common/core/types/backend-error-response';\r\nimport {DatatableService} from '../../datatable/datatable.service';\r\nimport {Observable} from 'rxjs';\r\n\r\n@Component({\r\n selector: 'user-index',\r\n templateUrl: './user-index.component.html',\r\n styleUrls: ['./user-index.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [DatatableService],\r\n})\r\nexport class UserIndexComponent implements OnInit, OnDestroy {\r\n public users$ = this.datatable.data$ as Observable<User[]>;\r\n\r\n constructor(\r\n private userService: Users,\r\n public currentUser: CurrentUser,\r\n public settings: Settings,\r\n private toast: Toast,\r\n public datatable: DatatableService<User>,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.datatable.init({\r\n uri: Users.BASE_URI,\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.datatable.destroy();\r\n }\r\n\r\n public makeRolesList(roles: Role[]): string {\r\n return roles.slice(0, 3).map(role => role.name).join(', ');\r\n }\r\n\r\n public maybeDeleteSelectedUsers() {\r\n this.datatable.confirmResourceDeletion('users')\r\n .subscribe(() => {\r\n this.userService.delete(this.datatable.selectedRows$.value).subscribe(() => {\r\n this.datatable.reset();\r\n this.toast.open('Deleted selected users');\r\n }, (errResponse: BackendErrorResponse) => {\r\n this.toast.open(errResponse.message || HttpErrors.Default);\r\n });\r\n });\r\n }\r\n\r\n public showCrupdateUserModal(user?: User) {\r\n this.datatable.openCrupdateResourceModal(\r\n CrupdateUserModalComponent,\r\n {user},\r\n ).subscribe();\r\n }\r\n}\r\n","import {Permission} from '@common/core/types/models/permission';\r\n\r\nexport class Role {\r\n id: number;\r\n name: string;\r\n type: string;\r\n description: string;\r\n permissions?: Permission[];\r\n default: boolean;\r\n guests: boolean;\r\n created_at?: string;\r\n updated_at?: string;\r\n\r\n constructor(params: object = {}) {\r\n for (const name in params) {\r\n this[name] = params[name];\r\n }\r\n }\r\n}\r\n","<div class=\"modal-header\">\r\n <h2 class=\"modal-title mat-dialog-title\" mat-dialog-title *ngIf=\"data.role\" trans>Update Role</h2>\r\n <h2 class=\"modal-title mat-dialog-title\" mat-dialog-title *ngIf=\"!data.role\" trans>Create a New Role</h2>\r\n <button type=\"button\" (click)=\"close()\" class=\"close-button no-style\" tabindex=\"-1\"><mat-icon svgIcon=\"close\"></mat-icon></button>\r\n</div>\r\n\r\n<form autocomplete=\"off\" (submit)=\"confirm()\" *ngIf=\"errors$ | async as errors\" [formGroup]=\"form\" ngNativeValidate>\r\n <div class=\"many-inputs mat-dialog-content\" mat-dialog-content>\r\n <div class=\"input-container\">\r\n <label for=\"name\" trans>Name</label>\r\n <input type=\"text\" formControlName=\"name\" id=\"name\" required>\r\n <div class=\"error\" *ngIf=\"errors.name\">{{errors.name}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"description\" trans>Description</label>\r\n <textarea type=\"text\" id=\"description\" formControlName=\"description\" maxlength=\"190\"></textarea>\r\n </div>\r\n\r\n <div class=\"input-container\" *ngIf=\"settings.get('workspaces.integrated')\">\r\n <label for=\"type\" trans>Type</label>\r\n <select id=\"type\" formControlName=\"type\">\r\n <option value=\"sitewide\" trans>Site Wide</option>\r\n <option value=\"workspace\" trans>Workspace</option>\r\n </select>\r\n </div>\r\n\r\n <permission-manager formControlName=\"permissions\" [valueListKey]=\"form.get('type').value === 'workspace' ? 'workspacePermissions' : 'permissions'\" [hideRestrictions]=\"data?.role?.guests\"></permission-manager>\r\n <div class=\"error\" *ngIf=\"errors?.permissions\">{{errors?.permissions}}</div>\r\n\r\n <div class=\"setting-container\">\r\n <mat-slide-toggle formControlName=\"default\" id=\"default\" trans>Default</mat-slide-toggle>\r\n <p trans>Assign this role to new users automatically.</p>\r\n <div class=\"error\" *ngIf=\"errors.default\">{{errors.default}}</div>\r\n </div>\r\n\r\n <div class=\"setting-container\" *ngIf=\"form.get('type').value === 'sitewide'\">\r\n <mat-slide-toggle id=\"guest\" formControlName=\"guests\" trans>Guests</mat-slide-toggle>\r\n <p trans>Assign this role to guests (not logged in users).</p>\r\n <div class=\"error\" *ngIf=\"errors.guests\">{{errors.guests}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"buttons right mat-dialog-actions\" mat-dialog-actions>\r\n <button (click)=\"close()\" type=\"button\" class=\"button cancel\" mat-button trans>Cancel</button>\r\n <button type=\"submit\" mat-raised-button color=\"accent\" [disabled]=\"loading$ | async\">\r\n <span *ngIf=\"data.role\" trans>Update</span>\r\n <span *ngIf=\"!data.role\" trans>Create</span>\r\n </button>\r\n </div>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {Role} from '@common/core/types/models/Role';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {RoleService} from '@common/admin/roles/role.service';\r\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\r\nimport {FormBuilder} from '@angular/forms';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {finalize} from 'rxjs/operators';\r\nimport {BackendErrorResponse} from '@common/core/types/backend-error-response';\r\nimport {Settings} from '../../../core/config/settings.service';\r\n\r\nexport interface CrupdateRoleModalData {\r\n role: Role;\r\n}\r\n\r\n@Component({\r\n selector: 'crupdate-role-modal',\r\n templateUrl: './crupdate-role-modal.component.html',\r\n styleUrls: ['./crupdate-role-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CrupdateRoleModalComponent implements OnInit {\r\n public form = this.fb.group({\r\n name: [''],\r\n description: [''],\r\n type: ['sitewide'],\r\n default: [false],\r\n guests: [false],\r\n permissions: [],\r\n });\r\n public loading$ = new BehaviorSubject<boolean>(false);\r\n public errors$ = new BehaviorSubject<Partial<Role>>({});\r\n\r\n constructor(\r\n private toast: Toast,\r\n private roleService: RoleService,\r\n private modal: Modal,\r\n private fb: FormBuilder,\r\n private dialogRef: MatDialogRef<CrupdateRoleModalComponent>,\r\n public settings: Settings,\r\n @Inject(MAT_DIALOG_DATA) public data: CrupdateRoleModalData,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.resetState();\r\n if (this.data.role) {\r\n this.form.patchValue(this.data.role);\r\n }\r\n }\r\n\r\n public close(data?: Role) {\r\n this.resetState();\r\n this.dialogRef.close(data);\r\n }\r\n\r\n public confirm() {\r\n this.loading$.next(true);\r\n let request;\r\n if (this.data.role) {\r\n request = this.roleService.update(this.data.role.id, this.form.value);\r\n } else {\r\n request = this.roleService.createNew(this.form.value);\r\n }\r\n\r\n request\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(response => {\r\n this.toast.open('Role ' + (this.data.role ? 'Updated' : 'Created'));\r\n this.close(response.data);\r\n }, (errResponse: BackendErrorResponse) => this.errors$.next(errResponse.errors));\r\n }\r\n\r\n private resetState() {\r\n this.form.reset();\r\n this.errors$.next({});\r\n }\r\n}\r\n","<div class=\"modal-header\">\n <h2 mat-dialog-title trans>Find User</h2>\n <button type=\"button\" (click)=\"close()\" class=\"no-style close-button\" tabindex=\"-1\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n <div class=\"input-container search-input-container\">\n <input type=\"text\" placeholder=\"Search for user by name or email...\" [formControl]=\"searchFormControl\">\n <loading-indicator [isVisible]=\"loading$ | async\" class=\"small\"></loading-indicator>\n </div>\n\n <div class=\"users\">\n <div class=\"user\" *ngFor=\"let user of users$ | async\" (click)=\"close(user)\">\n <img [src]=\"user.avatar\">\n <div class=\"meta overflow-hidden\">\n <div class=\"name overflow-hidden\">{{user.display_name}}</div>\n <div class=\"email overflow-hidden\">{{user.email}}</div>\n </div>\n </div>\n </div>\n</mat-dialog-content>","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {FormControl} from '@angular/forms';\nimport {catchError, debounceTime, distinctUntilChanged, switchMap} from 'rxjs/operators';\nimport {BehaviorSubject, Observable, of} from 'rxjs';\nimport {Users} from '../users.service';\nimport {User} from '../../core/types/models/User';\n\n@Component({\n selector: 'find-user-modal',\n templateUrl: './find-user-modal.component.html',\n styleUrls: ['./find-user-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FindUserModalComponent implements OnInit {\n public searchFormControl = new FormControl();\n public loading$ = new BehaviorSubject(false);\n public users$ = new BehaviorSubject<User[]>([]);\n\n constructor(\n private dialogRef: MatDialogRef<FindUserModalComponent>,\n @Inject(MAT_DIALOG_DATA) public data: FindUserModalComponent,\n private users: Users,\n ) {}\n\n ngOnInit() {\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(250),\n distinctUntilChanged(),\n switchMap(query => this.searchUsers(query)),\n catchError(() => of([])),\n ).subscribe(users => {\n this.users$.next(users);\n this.loading$.next(false);\n });\n }\n\n private searchUsers(query: string): Observable<User[]> {\n this.loading$.next(true);\n if ( ! query) {\n return of([]);\n }\n return this.users.getAll({query});\n }\n\n public close(user?: User) {\n this.dialogRef.close(user);\n }\n}\n","<section class=\"admin-pill-nav\">\r\n <div class=\"new-role\">\r\n <button mat-flat-button color=\"accent\" class=\"new-role-button\" (click)=\"showCrupdateRoleModal()\" *ngIf=\"currentUser.hasPermission('roles.create')\" trans>New Role</button>\r\n </div>\r\n\r\n <ng-container *ngIf=\"breakpoints.isMobile$ | async; else desktopNav\">\r\n <button [matMenuTriggerFor]=\"navMenu\" class=\"no-style admin-pill-nav-mobile-selector\">\r\n <span class=\"name\" trans>{{(selectedRole$ | async).name}}</span>\r\n <mat-icon svgIcon=\"keyboard-arrow-down\"></mat-icon>\r\n </button>\r\n <mat-menu #navMenu=\"matMenu\" class=\"admin-pill-nav-menu\">\r\n <button mat-menu-item *ngFor=\"let role of roles$ | async\" (click)=\"selectRole(role)\" [class.selected]=\"(selectedRole$ | async).id === role.id\">{{role.name}}</button>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <ng-template #desktopNav>\r\n <aside class=\"admin-pill-nav rounded\">\r\n <div class=\"nav-item\" *ngFor=\"let role of roles$ | async\" (click)=\"selectRole(role)\" [class.selected]=\"(selectedRole$ | async).id === role.id\">\r\n <div class=\"name\" trans>\r\n <div>{{role.name}}</div>\r\n <div class=\"role-type\">{{role.type}}</div>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"actionsMenu\" (click)=\"$event.stopPropagation()\">\r\n <mat-icon svgIcon=\"settings\"></mat-icon>\r\n </button>\r\n <mat-menu #actionsMenu>\r\n <div mat-menu-item (click)=\"showCrupdateRoleModal(role)\" *ngIf=\"currentUser.hasPermission('roles.update')\" trans>Edit</div>\r\n <div mat-menu-item (click)=\"maybeDeleteRole(role)\" *ngIf=\"currentUser.hasPermission('roles.delete')\" trans>Delete</div>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </aside>\r\n </ng-template>\r\n</section>\r\n\r\n<div class=\"datatable responsive-table\">\r\n <datatable-header pluralResourceName=\"roles\" [showSelectedActions]=\"false\">\r\n <ng-container leftContent *ngIf=\"currentUser.hasPermission('roles.update')\">\r\n <button class=\"assign-users-button\" mat-raised-button color=\"accent\" (click)=\"showAssignUsersModal()\" [disabled]=\"!canAssignUsers()\" trans>Assign Users</button>\r\n <button mat-raised-button color=\"accent\" (click)=\"maybeDetachUsers()\" [disabled]=\"!(datatable.selectedRows$ | async).length\" trans>Unassign Users</button>\r\n </ng-container>\r\n </datatable-header>\r\n <table class=\"material-table\">\r\n <thead>\r\n <tr>\r\n <th table-header-checkbox></th>\r\n <th table-sort-header=\"email\" trans>User</th>\r\n <th table-sort-header trans>First Name</th>\r\n <th table-sort-header trans>Last Name</th>\r\n <th table-sort-header=\"created_at\" trans>Assigned At</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let user of users$ | async\">\r\n <td [table-body-checkbox]=\"user.id\"></td>\r\n <td class=\"mobile-no-label\">\r\n <user-column [user]=\"user\"></user-column>\r\n </td>\r\n <td data-label=\"First Name\">{{user.first_name || '-'}}</td>\r\n <td data-label=\"Last Name\">{{user.last_name || '-'}}</td>\r\n <td data-label=\"Assigned At\">{{user.created_at | formattedDate}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ng-container *ngIf=\"selectedRole$ | async as selectedRole; else noRoleSelected\">\r\n <no-results-message svgImage=\"people.svg\" *ngIf=\"selectedRole.guests || selectedRole.type !== 'sitewide'; else regularRole\">\r\n <span primary-text trans>This role can't be assigned to users.</span>\r\n </no-results-message>\r\n <ng-template #regularRole>\r\n <no-results-message svgImage=\"people.svg\" *ngIf=\"(datatable.paginator.noResults$ | async) && !(datatable.paginator.loading$ | async)\">\r\n <span primary-text trans>No users are assigned this role yet.</span>\r\n </no-results-message>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #noRoleSelected>\r\n <no-results-message svgImage=\"people.svg\">\r\n <span primary-text trans>No role selected.</span>\r\n </no-results-message>\r\n </ng-template>\r\n\r\n <datatable-footer></datatable-footer>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {CurrentUser} from '../../auth/current-user';\r\nimport {User} from '../../core/types/models/User';\r\nimport {Role} from '../../core/types/models/Role';\r\nimport {RoleService} from './role.service';\r\nimport {Toast} from '../../core/ui/toast.service';\r\nimport {Modal} from '../../core/ui/dialogs/modal.service';\r\nimport {ConfirmModalComponent} from '../../core/ui/confirm-modal/confirm-modal.component';\r\nimport {CrupdateRoleModalComponent} from './crupdate-role-modal/crupdate-role-modal.component';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {FindUserModalComponent} from '@common/auth/find-user-modal/find-user-modal.component';\r\nimport {BreakpointsService} from '@common/core/ui/breakpoints.service';\r\nimport {Users} from '../../auth/users.service';\r\nimport {DatatableService} from '../../datatable/datatable.service';\r\n\r\n@Component({\r\n selector: 'role-index',\r\n templateUrl: './role-index.component.html',\r\n styleUrls: ['./role-index.component.scss'],\r\n providers: [DatatableService],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RoleIndexComponent implements OnInit {\r\n public roles$ = new BehaviorSubject<Role[]>([]);\r\n public users$ = this.datatable.data$ as Observable<User[]>;\r\n public selectedRole$ = new BehaviorSubject<Role>(new Role());\r\n\r\n constructor(\r\n private roleApi: RoleService,\r\n private toast: Toast,\r\n private modal: Modal,\r\n public currentUser: CurrentUser,\r\n public breakpoints: BreakpointsService,\r\n public datatable: DatatableService<User>,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.refreshRoles().then(() => {\r\n this.datatable.init({\r\n uri: Users.BASE_URI,\r\n staticParams: {\r\n role_id: this.selectedRole$.value?.id\r\n }\r\n });\r\n });\r\n }\r\n\r\n public selectRole(role: Role) {\r\n if (this.selectedRole$.value.id !== role.id) {\r\n this.selectedRole$.next(role);\r\n this.refreshRoleUsers(role);\r\n }\r\n }\r\n\r\n public refreshRoles() {\r\n return new Promise(resolve => {\r\n this.roleApi.getRoles().subscribe(response => {\r\n this.roles$.next(response.pagination.data);\r\n if (this.roles$.value.length) {\r\n // if no role is currently selected, select first\r\n if ( ! this.selectedRole$.value.id) {\r\n this.selectRole(this.roles$.value[0]);\r\n\r\n // if role is selected, try to re-select it with the one returned from server\r\n } else {\r\n const role = this.roles$.value.find(r => r.id === this.selectedRole$.value.id);\r\n if (role) {\r\n this.selectedRole$.next(role);\r\n }\r\n }\r\n }\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n public refreshRoleUsers(role: Role) {\r\n if (role.type === 'sitewide' && !role.guests) {\r\n this.datatable.reset({role_id: role.id});\r\n } else {\r\n this.datatable.reset({role_id: 999});\r\n }\r\n }\r\n\r\n public showAssignUsersModal() {\r\n this.modal.open(FindUserModalComponent)\r\n .afterClosed()\r\n .subscribe((user: User) => {\r\n if (user) {\r\n this.roleApi.addUsers(this.selectedRole$.value.id, [user.email]).subscribe(() => {\r\n this.toast.open('User assigned to role');\r\n this.refreshRoleUsers(this.selectedRole$.value);\r\n });\r\n }\r\n });\r\n }\r\n\r\n public showCrupdateRoleModal(role?: Role) {\r\n this.modal.show(CrupdateRoleModalComponent, {role}).afterClosed().subscribe(data => {\r\n if ( ! data) return;\r\n this.refreshRoles();\r\n });\r\n }\r\n\r\n public maybeDeleteRole(role: Role) {\r\n this.modal.open(ConfirmModalComponent, {\r\n title: 'Delete Role',\r\n body: 'Are you sure you want to delete this role?',\r\n ok: 'Delete'\r\n }).afterClosed().subscribe(confirmed => {\r\n if ( ! confirmed) return;\r\n this.deleteRole(role);\r\n });\r\n }\r\n\r\n public deleteRole(role: Role) {\r\n this.roleApi.delete(role.id).subscribe(() => {\r\n this.selectedRole$.next(new Role());\r\n this.refreshRoles().then(() => {\r\n this.refreshRoleUsers(this.selectedRole$.value);\r\n });\r\n });\r\n }\r\n\r\n public maybeDetachUsers() {\r\n this.modal.show(ConfirmModalComponent, {\r\n title: 'Remove users from role',\r\n body: 'Are you sure you want to remove selected users from this role?',\r\n ok: 'Remove'\r\n }).afterClosed().subscribe(confirmed => {\r\n if ( ! confirmed) return;\r\n this.removeUsersFromSelectedRole();\r\n });\r\n }\r\n\r\n public removeUsersFromSelectedRole() {\r\n this.roleApi.removeUsers(this.selectedRole$.value.id, this.datatable.selectedRows$.value).subscribe(() => {\r\n this.refreshRoleUsers(this.selectedRole$.value);\r\n this.datatable.selectedRows$.next([]);\r\n this.toast.open('Users removed from role.');\r\n });\r\n }\r\n\r\n public canAssignUsers() {\r\n return this.selectedRole$.value.id && !this.datatable.selectedRows$.value.length && !this.selectedRole$.value.guests;\r\n }\r\n}\r\n","<div class=\"modal-header\">\r\n <h2 mat-dialog-title>\r\n <span *ngIf=\"data.localization\" trans>Update Localization</span>\r\n <span *ngIf=\"!data.localization\" trans>Create Localization</span>\r\n </h2>\r\n <button type=\"button\" (click)=\"close()\" class=\"close-button no-style\" tabindex=\"-1\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</div>\r\n\r\n<form class=\"modal-content\" (ngSubmit)=\"confirm()\" [formGroup]=\"form\" *ngIf=\"errors$ | async as errors\" ngNativeValidate>\r\n <mat-dialog-content class=\"many-inputs\">\r\n <div class=\"input-container\">\r\n <label for=\"name\" trans>Name</label>\r\n <input type=\"text\" formControlName=\"name\" id=\"name\" pattern=\"[A-Za-z0-9_-]+\" required>\r\n <div class=\"error\" *ngIf=\"errors.name\">{{errors.name}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"language\" trans>Language</label>\r\n <select id=\"language\" formControlName=\"language\">\r\n <option [value]=\"lang.code\" *ngFor=\"let lang of languages$ | async\" trans>{{lang.name}}</option>\r\n </select>\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions>\r\n <button (click)=\"close()\" mat-button type=\"button\" trans>Cancel</button>\r\n <button type=\"submit\" mat-raised-button color=\"accent\" [disabled]=\"loading$ | async\" trans>\r\n <span *ngIf=\"data.localization\" trans>Update</span>\r\n <span *ngIf=\"!data.localization\" trans>Create</span>\r\n </button>\r\n </mat-dialog-actions>\r\n</form>\r\n","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {Localization} from '@common/core/types/models/Localization';\r\nimport {Localizations} from '@common/core/translations/localizations.service';\r\nimport {LocalizationWithLines} from '@common/core/types/localization-with-lines';\r\nimport {Role} from '@common/core/types/models/Role';\r\nimport {FormBuilder} from '@angular/forms';\r\nimport {finalize} from 'rxjs/operators';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {LanguageListItem, ValueLists} from '@common/core/services/value-lists.service';\r\nimport {BackendErrorResponse} from '@common/core/types/backend-error-response';\r\n\r\nexport interface CrupdateLocalizationModalData {\r\n localization?: LocalizationWithLines;\r\n}\r\n\r\n@Component({\r\n selector: 'crupdate-localization-modal',\r\n templateUrl: './crupdate-localization-modal.component.html',\r\n styleUrls: ['./crupdate-localization-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CrupdateLocalizationModalComponent implements OnInit {\r\n public loading$ = new BehaviorSubject<boolean>(false);\r\n public errors$ = new BehaviorSubject<Partial<Role>>({});\r\n public languages$ = new BehaviorSubject<LanguageListItem[]>([]);\r\n public form = this.fb.group({\r\n name: [''],\r\n language: [''],\r\n });\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private localizations: Localizations,\r\n private dialogRef: MatDialogRef<CrupdateLocalizationModalComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: CrupdateLocalizationModalData,\r\n private toast: Toast,\r\n private lists: ValueLists,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.lists.get(['languages']).subscribe(response => {\r\n this.languages$.next(response.languages);\r\n });\r\n if (this.data.localization) {\r\n this.form.patchValue(this.data.localization.model);\r\n }\r\n }\r\n\r\n public confirm() {\r\n this.loading$.next(true);\r\n const request = this.data.localization\r\n ? this.updateLocalization() :\r\n this.createNewLocalization();\r\n request\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(response => {\r\n this.close(response.localization);\r\n this.toast.open('Localization ' + (this.data.localization ? 'updated' : 'created'));\r\n }, (errResponse: BackendErrorResponse) => this.errors$.next(errResponse.errors));\r\n }\r\n\r\n public close(localization?: LocalizationWithLines) {\r\n this.dialogRef.close(localization);\r\n }\r\n\r\n public createNewLocalization(): Observable<{localization: LocalizationWithLines}> {\r\n return this.localizations.create(this.form.value);\r\n }\r\n\r\n public updateLocalization(): Observable<{localization: LocalizationWithLines}> {\r\n return this.localizations.update(this.data.localization.model.id, this.form.value);\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {MatDialogRef} from '@angular/material/dialog';\r\nimport {FormControl, FormGroup} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'new-line-modal',\r\n templateUrl: './new-line-modal.component.html',\r\n styleUrls: ['./new-line-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NewLineModalComponent {\r\n public form = new FormGroup({\r\n key: new FormControl(),\r\n value: new FormControl(),\r\n });\r\n\r\n constructor(private dialogRef: MatDialogRef<NewLineModalComponent>) {}\r\n\r\n public confirm() {\r\n this.close(this.form.value);\r\n }\r\n\r\n public close(line?: {key: string, value: string}) {\r\n this.dialogRef.close(line);\r\n }\r\n}\r\n","<div class=\"modal-header\">\r\n <h2 class=\"mat-dialog-title\" mat-dialog-title trans>Add New Translation Line</h2>\r\n <button type=\"button\" (click)=\"close()\" class=\"close-button no-style\" tabindex=\"-1\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</div>\r\n\r\n<form class=\"modal-content\" (ngSubmit)=\"confirm()\" [formGroup]=\"form\" ngNativeValidate>\r\n <mat-dialog-content class=\"many-inputs\">\r\n <div class=\"input-container\">\r\n <label for=\"translation-key\" trans>Translation Key</label>\r\n <input type=\"text\" formControlName=\"key\" name=\"translation-key\" id=\"translation-key\" required>\r\n <p trans>Word or sentence you want to translate.</p>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"translation-value\" trans>Translation Value</label>\r\n <input type=\"text\" formControlName=\"value\" name=\"translation-value\" id=\"translation-value\" required>\r\n <p trans>What word or sentence should be translated to.</p>\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions>\r\n <button (click)=\"close()\" mat-button type=\"button\" trans>Cancel</button>\r\n <button type=\"submit\" mat-raised-button color=\"accent\" trans>Add</button>\r\n </mat-dialog-actions>\r\n</form>\r\n","<aside class=\"admin-pill-nav\">\r\n <div class=\"new-localization\">\r\n <button mat-button (click)=\"showCrupdateLocalizationModal()\" *ngIf=\"currentUser.hasPermission('localizations.create')\">\r\n <mat-icon svgIcon=\"add\"></mat-icon>\r\n <span trans>New Localization</span>\r\n </button>\r\n </div>\r\n\r\n <ng-container *ngIf=\"breakpoints.isMobile$ | async; else desktopNav\">\r\n <button [matMenuTriggerFor]=\"navMenu\" class=\"no-style admin-pill-nav-mobile-selector\">\r\n <span class=\"name\" trans>{{selectedLocalization?.model.name}}</span>\r\n <mat-icon svgIcon=\"keyboard-arrow-down\"></mat-icon>\r\n </button>\r\n <mat-menu #navMenu=\"matMenu\" class=\"admin-pill-nav-menu\">\r\n <button mat-menu-item *ngFor=\"let localization of localizations$ | async\" (click)=\"setSelectedLocalization(localization)\" [class.selected]=\"selectedLocalization?.model.id == localization.model.id\">{{localization.model.name}}</button>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <ng-template #desktopNav>\r\n <div class=\"nav-item\" [@fadeIn] *ngFor=\"let localization of localizations$ | async; trackBy: trackByFn\" (click)=\"setSelectedLocalization(localization)\" [class.selected]=\"selectedLocalization?.model.id == localization.model.id\">\r\n <div class=\"name\">{{localization.model.name.replace('-', ' ')}}</div>\r\n\r\n <div class=\"actions\">\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"actionsMenu\" ><mat-icon svgIcon=\"settings\" class=\"size-22\"></mat-icon></button>\r\n <mat-menu #actionsMenu>\r\n <div mat-menu-item (click)=\"setDefaultLocalization(localization)\" *ngIf=\"currentUser.hasPermission('settings.update')\" trans>Set as Default</div>\r\n <div mat-menu-item (click)=\"showCrupdateLocalizationModal(localization)\" *ngIf=\"localization.name !== 'English' && currentUser.hasPermission('localizations.update')\" trans>Update</div>\r\n <div mat-menu-item (click)=\"confirmLocalizationDeletion(localization)\" *ngIf=\"localization.name !== 'English' && currentUser.hasPermission('localizations.delete')\" trans>Delete</div>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!selectedLocalization && loading$ | async\">\r\n <div class=\"nav-item skeleton-nav-item\" *ngFor=\"let i of [1, 2, 3, 4, 5]\">\r\n <skeleton variant=\"text\"></skeleton>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <div class=\"update-translations\">\r\n <button mat-raised-button color=\"accent\" (click)=\"updateLocalization()\" [disabled]=\"loading$ | async\" *ngIf=\"currentUser.hasPermission('localizations.update')\" trans>Update</button>\r\n </div>\r\n</aside>\r\n\r\n<div class=\"datatable responsive-table\">\r\n <div class=\"datatable-header localizations-datatable-header\">\r\n <button mat-raised-button class=\"new-translation-button\" color=\"accent\" (click)=\"addLine()\" trans>Add New Translation</button>\r\n <div class=\"input-container search-input-container\">\r\n <input type=\"text\" class=\"search\" placeholder=\"Search Translations\" trans-placeholder [formControl]=\"searchQuery\">\r\n <mat-icon svgIcon=\"search\"></mat-icon>\r\n </div>\r\n </div>\r\n <table class=\"material-table\">\r\n <thead>\r\n <tr>\r\n <th class=\"source-column\" trans>Source Text</th>\r\n <th trans>Translation</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n\r\n <ng-container *ngIf=\"loadingLines$ | async\">\r\n <tr *ngFor=\"let i of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\">\r\n <td><skeleton variant=\"text\" class=\"table-skeleton\"></skeleton></td>\r\n <td><skeleton variant=\"text\" class=\"table-skeleton\"></skeleton></td>\r\n </tr>\r\n </ng-container>\r\n\r\n <tr *ngFor=\"let line of lines$ | async\" [@fadeIn]>\r\n <td class=\"mobile-no-label source-column\">{{line.key}}</td>\r\n <td class=\"mobile-no-label\">\r\n <input type=\"text\" class=\"translation-input\" id=\"{{line.key}}\" [(ngModel)]=\"selectedLocalization.lines[line.key]\">\r\n </td>\r\n <td class=\"edit-column\">\r\n <button type=\"button\" mat-icon-button (click)=\"removeLine(line)\" [matTooltip]=\"'Remove' | trans\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {FormControl} from '@angular/forms';\r\nimport {CrupdateLocalizationModalComponent} from './crupdate-localization-modal/crupdate-localization-modal.component';\r\nimport {ActivatedRoute} from '@angular/router';\r\nimport {Settings} from '../../core/config/settings.service';\r\nimport {Modal} from '../../core/ui/dialogs/modal.service';\r\nimport {ConfirmModalComponent} from '../../core/ui/confirm-modal/confirm-modal.component';\r\nimport {Toast} from '../../core/ui/toast.service';\r\nimport {distinctUntilChanged, finalize} from 'rxjs/operators';\r\nimport {Translations} from '../../core/translations/translations.service';\r\nimport {Localizations} from '../../core/translations/localizations.service';\r\nimport {NewLineModalComponent} from './new-line-modal/new-line-modal.component';\r\nimport {CurrentUser} from '../../auth/current-user';\r\nimport {HttpErrors} from '../../core/http/errors/http-errors.enum';\r\nimport {LocalizationWithLines} from '@common/core/types/localization-with-lines';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {BreakpointsService} from '@common/core/ui/breakpoints.service';\r\nimport {animate, style, transition, trigger} from '@angular/animations';\r\n\r\ninterface TranslationLine {\r\n key: string;\r\n translation: string;\r\n}\r\n\r\n@Component({\r\n selector: 'localization-index',\r\n templateUrl: './localization-index.component.html',\r\n styleUrls: ['./localization-index.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [\r\n trigger('fadeIn', [\r\n transition(':enter', [\r\n style({opacity: 0}),\r\n animate('325ms ease-in', style({\r\n opacity: 1,\r\n }))\r\n ])\r\n ]),\r\n ]\r\n})\r\nexport class LocalizationIndexComponent implements OnInit {\r\n public loading$ = new BehaviorSubject<boolean>(false);\r\n public loadingLines$ = new BehaviorSubject<boolean>(false);\r\n public searchQuery = new FormControl();\r\n public selectedLocalization: LocalizationWithLines;\r\n public localizations$ = new BehaviorSubject<LocalizationWithLines[]>([]);\r\n public lines$ = new BehaviorSubject<TranslationLine[]>([]);\r\n\r\n constructor(\r\n private toast: Toast,\r\n private modal: Modal,\r\n private settings: Settings,\r\n private i18n: Translations,\r\n private route: ActivatedRoute,\r\n public currentUser: CurrentUser,\r\n private localizationsApi: Localizations,\r\n public breakpoints: BreakpointsService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.loading$.next(true);\r\n this.localizationsApi.all()\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(response => {\r\n this.setLocalizations(response.localizations);\r\n this.bindSearchQuery();\r\n });\r\n }\r\n\r\n private setLocalizations(localizations: LocalizationWithLines[]) {\r\n this.localizations$.next(localizations);\r\n const active = localizations.find(l => l.model.language === this.settings.get('i18n.default_localization')) || localizations[0];\r\n if (active) {\r\n this.setSelectedLocalization(active);\r\n }\r\n }\r\n\r\n public setSelectedLocalization(localization: LocalizationWithLines) {\r\n if (this.selectedLocalization?.model.id === localization.model.id) return;\r\n\r\n this.selectedLocalization = localization;\r\n this.searchQuery.setValue(null);\r\n\r\n // if lang lines are already fetched for this localization, bail\r\n if (localization.lines) {\r\n this.lines$.next(this.originalLines());\r\n } else {\r\n this.selectedLocalization.lines = {};\r\n this.loadingLines$.next(true);\r\n this.localizationsApi.get(this.selectedLocalization.model.name)\r\n .pipe(finalize(() => this.loadingLines$.next(false)))\r\n .subscribe(response => {\r\n this.selectedLocalization = response.localization;\r\n const localizations = [...this.localizations$.value];\r\n const i = localizations.findIndex(loc => loc.model.id === localization.model.id);\r\n localizations[i] = response.localization;\r\n this.localizations$.next(localizations);\r\n this.lines$.next(this.originalLines());\r\n });\r\n }\r\n }\r\n\r\n public addLine() {\r\n this.modal.open(NewLineModalComponent)\r\n .beforeClosed()\r\n .subscribe(line => {\r\n if ( ! line) return;\r\n this.selectedLocalization.lines[line.key] = line.value;\r\n this.lines$.next(this.originalLines());\r\n });\r\n }\r\n\r\n public setDefaultLocalization(localization: LocalizationWithLines) {\r\n if ( ! this.selectedLocalization.model.id) {\r\n this.setSelectedLocalization(localization);\r\n }\r\n this.localizationsApi.setDefault(localization.model).subscribe(() => {\r\n this.toast.open('Default Localization Changed');\r\n }, () => {\r\n this.toast.open(HttpErrors.Default);\r\n });\r\n }\r\n\r\n public updateLocalization() {\r\n this.loading$.next(true);\r\n this.localizationsApi.update(this.selectedLocalization.model.id, this.selectedLocalization)\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(() => {\r\n this.toast.open('Localizations updated');\r\n if (this.selectedLocalization.model.id === this.i18n.getActive().model.id) {\r\n this.i18n.setLocalization(this.selectedLocalization);\r\n }\r\n });\r\n }\r\n\r\n public showCrupdateLocalizationModal(localization?: LocalizationWithLines) {\r\n this.modal.show(CrupdateLocalizationModalComponent, {localization})\r\n .afterClosed()\r\n .subscribe((newLocalization: LocalizationWithLines) => {\r\n if ( ! newLocalization) return;\r\n let localizations = [...this.localizations$.value];\r\n if (localization) {\r\n localizations = localizations.map(l => {\r\n return l.model.id === newLocalization.model.id ? newLocalization : l;\r\n });\r\n } else {\r\n localizations.push(newLocalization);\r\n this.setSelectedLocalization(newLocalization);\r\n }\r\n this.localizations$.next(localizations);\r\n });\r\n }\r\n\r\n public confirmLocalizationDeletion(language: LocalizationWithLines) {\r\n if (this.localizations$.value.length < 2) {\r\n this.toast.open('There must be at least one localization.');\r\n return;\r\n }\r\n\r\n this.modal.open(ConfirmModalComponent, {\r\n title: 'Delete Localization',\r\n body: 'Are you sure you want to delete this localization?',\r\n ok: 'Delete'\r\n }).afterClosed().subscribe(confirmed => {\r\n if ( ! confirmed) return;\r\n this.deleteLocalization(language);\r\n });\r\n }\r\n\r\n private deleteLocalization(language: LocalizationWithLines) {\r\n this.localizationsApi.delete(language.model.id).subscribe(() => {\r\n this.toast.open('Localization deleted');\r\n const localizations = [...this.localizations$.value];\r\n localizations.splice(localizations.indexOf(language), 1);\r\n this.localizations$.next(localizations);\r\n\r\n if (this.selectedLocalization.model.id === language.model.id) {\r\n this.setSelectedLocalization(localizations[0]);\r\n }\r\n });\r\n }\r\n\r\n private bindSearchQuery() {\r\n this.searchQuery\r\n .valueChanges\r\n .pipe(distinctUntilChanged())\r\n .subscribe(query => {\r\n const lines = this.originalLines();\r\n this.lines$.next(query ? lines.filter(l => this.filterPredicate(l, query)) : lines);\r\n });\r\n }\r\n\r\n private filterPredicate(data: object, query: string) {\r\n const dataStr = Object.keys(data).reduce((currentTerm: string, key: string) => {\r\n // Use an obscure Unicode character to delimit the words in the concatenated string.\r\n // This avoids matches where the values of two columns combined will match the user's query\r\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\r\n // that has a very low chance of being typed in by somebody in a text field. This one in\r\n // particular is \"White up-pointing triangle with dot\" from\r\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\r\n return currentTerm + data[key] + '◬';\r\n }, '').toLowerCase();\r\n\r\n // Transform the filter by converting it to lowercase and removing whitespace.\r\n const transformedFilter = query.trim().toLowerCase();\r\n\r\n return dataStr.indexOf(transformedFilter) != -1;\r\n }\r\n\r\n private linesToArray(lines: {[key: string]: string}): TranslationLine[] {\r\n const transformed = [];\r\n for (const key in lines) {\r\n transformed.push({key, translation: lines[key]});\r\n }\r\n return transformed;\r\n }\r\n\r\n private originalLines() {\r\n return this.selectedLocalization.lines ?\r\n this.linesToArray(this.selectedLocalization.lines) :\r\n [];\r\n }\r\n\r\n public removeLine(line: TranslationLine) {\r\n delete this.selectedLocalization.lines[line.key];\r\n this.lines$.next(this.originalLines());\r\n }\r\n\r\n trackByFn = (i: number, localization: LocalizationWithLines) => localization.model.id;\r\n}\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\nimport {FormBuilder} from '@angular/forms';\nimport {DatatableService} from '../../../datatable/datatable.service';\nimport {Model} from '../../../core/types/models/model';\n\n@Component({\n selector: 'file-entry-index-filters',\n templateUrl: './file-entry-index-filters.component.html',\n styleUrls: ['./file-entry-index-filters.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FileEntryIndexFiltersComponent implements OnInit {\n public form = this.fb.group({\n type: null,\n public: null,\n password: null,\n created_at: null,\n owner: null,\n });\n\n constructor(\n private fb: FormBuilder,\n private datable: DatatableService<Model>,\n ) {\n this.form.patchValue(this.datable.filters$.value);\n }\n\n ngOnInit() {\n this.form.valueChanges.subscribe(value => {\n this.datable.filters$.next(value);\n });\n }\n}\n","<div [formGroup]=\"form\" class=\"many-inputs\">\n <div class=\"input-container\">\n <label for=\"file-type-filter\" trans>Type</label>\n <select id=\"file-type-filter\" formControlName=\"type\">\n <option [ngValue]=\"null\" trans>All</option>\n <option value=\"text\" trans>Text</option>\n <option value=\"audio\" trans>Audio</option>\n <option value=\"video\" trans>Video</option>\n <option value=\"image\" trans>Image</option>\n <option value=\"Folder\" trans>Folder</option>\n <option value=\"pdf\" trans>PDF</option>\n <option value=\"archive\" trans>Archive</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <label for=\"file-status-filter\" trans>Status</label>\n <select id=\"file-status-filter\" formControlName=\"public\">\n <option [ngValue]=\"null\" trans>All</option>\n <option [ngValue]=\"true\" trans>Public</option>\n <option [ngValue]=\"false\" trans>Private</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <label for=\"file-password-filter\" trans>Protection</label>\n <select id=\"file-password-filter\" formControlName=\"password\">\n <option [ngValue]=\"null\" trans>All</option>\n <option [ngValue]=\"true\" trans>Has Password</option>\n <option [ngValue]=\"false\" trans>Does Not Have Password</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <between-input formControlName=\"created_at\" [setDefaultDate]=\"false\" [showLabels]=\"false\">Uploaded Between</between-input>\n </div>\n\n <div class=\"input-container\">\n <select-user-input formControlName=\"owner\"></select-user-input>\n </div>\n</div>\n","<div class=\"datatable responsive-table\">\r\n <datatable-header pluralResourceName=\"files\">\r\n <ng-container leftContent>\r\n <div class=\"title\" headerActions trans>File Entries</div>\r\n </ng-container>\r\n <button mat-raised-button color=\"accent\" [matTooltip]=\"'Delete selected' | trans\" (click)=\"maybeDeleteSelectedEntries()\" rightContent *ngIf=\"currentUser.hasPermission('files.delete')\" trans>Delete Selected</button>\r\n <ng-template #tableFilters>\r\n <file-entry-index-filters></file-entry-index-filters>\r\n </ng-template>\r\n </datatable-header>\r\n <table class=\"material-table\">\r\n <thead>\r\n <tr>\r\n <th table-header-checkbox></th>\r\n <th table-sort-header trans>Name</th>\r\n <th table-sort-header trans>File Name</th>\r\n <th table-sort-header=\"user_id\" trans>Owner</th>\r\n <th table-sort-header trans>Type</th>\r\n <th table-sort-header trans>Public</th>\r\n <th table-sort-header trans>File Size</th>\r\n <th table-sort-header=\"created_at\" trans>Uploaded At</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let file of files$ | async\">\r\n <td [table-body-checkbox]=\"file.id\"></td>\r\n <td data-label=\"Name\">{{file.name}}</td>\r\n <td data-label=\"File Name\">{{file.file_name}}</td>\r\n <td>\r\n <user-column [user]=\"file.users[0]\"></user-column>\r\n </td>\r\n <td data-label=\"Type\">{{file.type}}</td>\r\n <td data-label=\"Public\">{{file.public ? 'Yes' : 'No'}}</td>\r\n <td data-label=\"File Size\"> {{file.file_size ? (file.file_size | formattedFileSize) : '-'}} </td>\r\n <td>{{file.created_at | formattedDate}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <no-results-message svgImage=\"file-searching.svg\" *ngIf=\"datatable.paginator.noResults$ | async\">\r\n <span primary-text trans>No files have been created yet</span>\r\n </no-results-message>\r\n <datatable-footer></datatable-footer>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {Settings} from '../../core/config/settings.service';\r\nimport {FileEntry} from '../../uploads/types/file-entry';\r\nimport {CurrentUser} from '../../auth/current-user';\r\nimport {UploadsApiService} from '../../uploads/uploads-api.service';\r\nimport {Observable} from 'rxjs';\r\nimport {DatatableService} from '../../datatable/datatable.service';\r\n\r\n@Component({\r\n selector: 'file-entry-index',\r\n templateUrl: './file-entry-index.component.html',\r\n styleUrls: ['./file-entry-index.component.scss'],\r\n providers: [DatatableService],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FileEntryIndexComponent implements OnInit {\r\n public files$ = this.datatable.data$ as Observable<FileEntry[]>;\r\n\r\n constructor(\r\n public currentUser: CurrentUser,\r\n public settings: Settings,\r\n private uploads: UploadsApiService,\r\n public datatable: DatatableService<FileEntry>,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.datatable.init({\r\n uri: UploadsApiService.BASE_URI,\r\n });\r\n }\r\n\r\n public maybeDeleteSelectedEntries() {\r\n this.datatable.confirmResourceDeletion('files').subscribe(() => {\r\n const entryIds = this.datatable.selectedRows$.value;\r\n this.uploads.delete({entryIds, deleteForever: true}).subscribe(() => {\r\n this.datatable.reset();\r\n });\r\n });\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {ImageZoomOverlayComponent} from '@common/core/ui/image-zoom/image-zoom-overlay/image-zoom-overlay.component';\n\n@Component({\n selector: 'image-zoom',\n templateUrl: './image-zoom.component.html',\n styleUrls: ['./image-zoom.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageZoomComponent {\n @Input() src: string;\n @Input() alt: string;\n\n constructor(private overlay: OverlayPanel) {}\n\n public zoomImage() {\n this.overlay.open(ImageZoomOverlayComponent, {\n position: 'center',\n origin: 'global',\n data: {src: this.src, alt: this.alt},\n panelClass: 'image-zoom-overlay-container'\n });\n }\n}\n","import {ChangeDetectionStrategy, Component, Inject, Optional, ViewEncapsulation} from '@angular/core';\nimport {OVERLAY_PANEL_DATA} from '@common/core/ui/overlay-panel/overlay-panel-data';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport { matDialogAnimations } from '@angular/material/dialog';\n\n@Component({\n selector: 'image-zoom-overlay',\n templateUrl: './image-zoom-overlay.component.html',\n styleUrls: ['./image-zoom-overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[@dialogContainer]': `'enter'`\n },\n animations: [\n matDialogAnimations.dialogContainer,\n ]\n})\nexport class ImageZoomOverlayComponent {\n constructor(\n @Inject(OVERLAY_PANEL_DATA) @Optional() public data: {src: string, alt?: string},\n private overlayPanelRef: OverlayPanelRef\n ) {}\n\n public close() {\n this.overlayPanelRef.close();\n }\n}\n","<img [src]=\"data.src\" [alt]=\"data.alt\">\r\n\r\n<button mat-mini-fab color=\"accent\" class=\"close-button\" (click)=\"close()\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n</button>","<img [src]=\"src\" [alt]=\"alt\" (click)=\"zoomImage()\">","<form class=\"panel\" (ngSubmit)=\"saveAds()\" [formGroup]=\"form\" ngNativeValidate>\r\n <div class=\"header\" trans>Predefined AD Slots</div>\r\n\r\n <div class=\"vert-row\" *ngFor=\"let ad of allAds()\">\r\n <div class=\"input-container\">\r\n <label [for]=\"ad.slot\" trans>{{ad.description}}</label>\r\n <textarea [name]=\"ad.slot\" [id]=\"ad.slot\" [formControlName]=\"ad.slot\"></textarea>\r\n </div>\r\n <image-zoom [src]=\"getPreviewUrl(ad)\"></image-zoom>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container margin-top margin-bottom\">\r\n <mat-slide-toggle name=\"ads.disable\" id=\"ads.disable\" formControlName=\"ads.disable\" trans>Disable Ads</mat-slide-toggle>\r\n <p trans>Disable all ad related functionality.</p>\r\n </div>\r\n\r\n <button type=\"submit\" mat-raised-button color=\"accent\" class=\"save-button\" [disabled]=\"loading$ | async\" trans>Save</button>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\r\n</form>","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {finalize} from 'rxjs/operators';\r\nimport {AdSlotConfig} from '@common/core/config/app-config';\r\nimport {FormBuilder} from '@angular/forms';\r\nimport {Settings} from '@common/core/config/settings.service';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {HttpErrors} from '@common/core/http/errors/http-errors.enum';\r\nimport {BehaviorSubject} from 'rxjs';\r\n\r\n@Component({\r\n selector: 'ads-page',\r\n templateUrl: './ads-page.component.html',\r\n styleUrls: ['./ads-page.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AdsPageComponent implements OnInit {\r\n public loading$ = new BehaviorSubject(false);\r\n public form = this.fb.group({\r\n 'ads.disable': [false],\r\n });\r\n\r\n constructor(\r\n public settings: Settings,\r\n private toast: Toast,\r\n private fb: FormBuilder,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.hydrate();\r\n }\r\n\r\n public saveAds() {\r\n this.loading$.next(true);\r\n this.settings.save({client: this.form.value})\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(() => {\r\n this.toast.open('Ads updated');\r\n }, () => {\r\n this.toast.open(HttpErrors.Default);\r\n });\r\n }\r\n\r\n public allAds() {\r\n return this.settings.get('vebto.admin.ads', []) as AdSlotConfig[];\r\n }\r\n\r\n public getPreviewUrl(config: AdSlotConfig): string {\r\n // ads.splash.top => splash-top\r\n const name = config.slot.replace(/\\./g, '-').replace('ads-', '');\r\n return `client/assets/images/verts/${name}.png`;\r\n }\r\n\r\n private hydrate() {\r\n const settings = this.settings.getFlat() || {};\r\n this.form.patchValue({'ads.disable': settings['ads.disable']});\r\n this.allAds().forEach(ad => {\r\n this.form.addControl(ad.slot, this.fb.control(settings[ad.slot]));\r\n });\r\n }\r\n}\r\n","<div class=\"modal-header\">\r\n <h2 class=\"modal-title\" mat-dialog-title *ngIf=\"data.plan\" trans>Update Plan Details</h2>\r\n <h2 class=\"modal-title\" mat-dialog-title *ngIf=\"!data.plan\" trans>Create a New Plan</h2>\r\n <button type=\"button\" (click)=\"close()\" class=\"close-button no-style\" tabindex=\"-1\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</div>\r\n\r\n<form autocomplete=\"off\" (ngSubmit)=\"confirm()\" ngNativeValidate *ngIf=\"errors$ | async as errors\" [formGroup]=\"form\">\r\n <div class=\"many-inputs mat-dialog-content\" mat-dialog-content>\r\n <div class=\"input-container\">\r\n <label for=\"plan-modal-name\" trans>Name</label>\r\n <input type=\"text\" id=\"plan-modal-name\" formControlName=\"name\" required>\r\n <div class=\"error\" *ngIf=\"errors.name\">{{errors.name}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"parent_id\" trans>Parent Plan</label>\r\n <select id=\"parent_id\" formControlName=\"parent_id\" required>\r\n <option [ngValue]=\"null\" trans>None</option>\r\n <option [ngValue]=\"plan.id\" *ngFor=\"let plan of getBasePlans(data.plan)\">{{plan.name}}</option>\r\n </select>\r\n <p trans>Used for creating yearly, weekly etc versions of base plan. Child plans will inherit their parent permissions/features.</p>\r\n <div class=\"error\" *ngIf=\"errors.parent_id\">{{errors.parent_id}}</div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!formValue().free\">\r\n <div class=\"input-container\">\r\n <label for=\"amount\" trans>Amount</label>\r\n <input type=\"number\" step=\"0.01\" id=\"amount\" formControlName=\"amount\" required [min]=\"getMinAmount()\" [max]=\"getMaxAmount()\">\r\n <ng-container *ngIf=\"!data.plan\">\r\n <p trans>How much subscribers of this plan should be charged. (Dollars, euros etc.)</p>\r\n <p trans>For example, Amount=100, Interval=Year and Interval Count=1, will charge user 100 dollars every year.</p>\r\n </ng-container>\r\n <p *ngIf=\"data.plan\" trans>Plan amount can't be changed once plan has already been created, however you can add a new child plan with a different price or delete this plan and create a new one.</p>\r\n <div class=\"error\" *ngIf=\"errors.amount\">{{errors.amount}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\" *ngIf=\"!formValue().parent_id\">\r\n <label for=\"currency\" trans>Currency</label>\r\n <select id=\"currency\" formControlName=\"currency\" required>\r\n <option [ngValue]=\"currency.code\" *ngFor=\"let currency of currencies$ | async\">{{currency.code}} - {{currency.name}}</option>\r\n </select>\r\n <div class=\"error\" *ngIf=\"errors.currency\">{{errors.currency}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"interval\" trans>Interval</label>\r\n <select id=\"interval\" class=\"interval-select\" formControlName=\"interval\" required>\r\n <option [ngValue]=\"interval\" *ngFor=\"let interval of intervals\">{{interval}}</option>\r\n </select>\r\n <p trans>The frequency with which a subscription should be billed.</p>\r\n <div class=\"error\" *ngIf=\"errors.interval\">{{errors.interval}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\" *ngIf=\"formValue().interval !== 'year'\">\r\n <label for=\"interval_count\" trans>Interval Count</label>\r\n <input type=\"number\" id=\"interval_count\" formControlName=\"interval_count\" required min=\"1\" max=\"12\">\r\n <p trans>The number of intervals (specified in the interval property above) between each subscription billing. For example, Interval=Month and Interval Count=3 bills every 3 months.</p>\r\n <div class=\"error\" *ngIf=\"errors.interval_count\">{{errors.interval_count}}</div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!formValue().parent_id\">\r\n <div class=\"input-container\">\r\n <label for=\"position\" trans>Position</label>\r\n <select type=\"text\" id=\"position\" formControlName=\"position\" required>\r\n <option [ngValue]=\"1\">1</option>\r\n <option [ngValue]=\"2\">2</option>\r\n <option [ngValue]=\"3\">3</option>\r\n <option [ngValue]=\"4\">4</option>\r\n <option [ngValue]=\"5\">5</option>\r\n <option [ngValue]=\"6\">6</option>\r\n <option [ngValue]=\"7\">7</option>\r\n <option [ngValue]=\"8\">8</option>\r\n </select>\r\n <p trans>Order of plans. Lower position will appear first.</p>\r\n <div class=\"error\" *ngIf=\"errors.position\">{{errors.position}}</div>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle id=\"recommended\" formControlName=\"recommended\" trans>Recommended</mat-slide-toggle>\r\n <p trans>Plan will be marked as \"Most Popular\" and emphasized to users.</p>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\" *ngIf=\"!data.plan || data.plan.free\">\r\n <mat-slide-toggle id=\"free\" formControlName=\"free\" trans>Free</mat-slide-toggle>\r\n <p trans>Basic free plan that will be assigned to new users that have not upgraded to other plans.</p>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle id=\"show_permissions\" formControlName=\"show_permissions\" trans>Show Permissions</mat-slide-toggle>\r\n <p trans>Whether plan permissions should be displayed as features to users.</p>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle id=\"plan-modal-hidden\" formControlName=\"hidden\" trans>Hidden</mat-slide-toggle>\r\n <p trans>Whether this plan should be hidden on upgrade and pricing pages.</p>\r\n </div>\r\n\r\n <permission-manager formControlName=\"permissions\"></permission-manager>\r\n <div class=\"error\" *ngIf=\"errors?.permissions\">{{errors?.permissions}}</div>\r\n\r\n <div class=\"plan-features\">\r\n <div class=\"section-title\" trans>Custom Features</div>\r\n\r\n <ul class=\"unstyled-list feature-list\" cdkDropList (cdkDropListDropped)=\"reorderPlanFeatures($event)\">\r\n <li class=\"feature-list-item\" *ngFor=\"let feature of features$ | async\" [attr.data-id]=\"feature.id\" cdkDrag>\r\n <button cdkDragHandle mat-icon-button class=\"drag-handle\"><mat-icon svgIcon=\"drag-handle\" matListIcon></mat-icon></button>\r\n <div class=\"text\">{{feature.content}}</div>\r\n <button class=\"delete-button\" mat-icon-button (click)=\"removeFeature(feature)\"><mat-icon svgIcon=\"delete\" matListIcon></mat-icon></button>\r\n </li>\r\n </ul>\r\n\r\n <p *ngIf=\"!(features$ | async).length\" trans>No custom features yet.</p>\r\n\r\n <form (ngSubmit)=\"addFeature()\" ngNativeValidate>\r\n <div class=\"input-container\">\r\n <div class=\"input-with-action\">\r\n <input type=\"text\" name=\"new-feature\" placeholder=\"+New Feature\" trans-placeholder [(ngModel)]=\"newFeature\" autocomplete=\"false\" required>\r\n <button type=\"submit\" mat-flat-button color=\"accent\" trans>Add</button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <div class=\"available-space\">\r\n <div class=\"section-title\" trans>Available Space</div>\r\n\r\n <space-input formControlName=\"available_space\">\r\n <p class=\"description\" trans>Hard drive space available to users subscribed to this plan.</p>\r\n <div class=\"error\" *ngIf=\"errors.available_space\">{{errors.available_space}}</div>\r\n </space-input>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"buttons right mat-dialog-actions\" mat-dialog-actions>\r\n <button (click)=\"close()\" type=\"button\" mat-button class=\"button cancel\" trans>Cancel</button>\r\n <button type=\"submit\" class=\"button primary\" mat-raised-button color=\"accent\" [disabled]=\"loading$ | async\">\r\n <span *ngIf=\"data.plan\" trans>Update Plan</span>\r\n <span *ngIf=\"!data.plan\" trans>Create Plan</span>\r\n </button>\r\n </div>\r\n</form>\r\n\r\n<loading-indicator class=\"overlay\" [isVisible]=\"loading$ | async\"></loading-indicator>\r\n","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop';\r\nimport {Plan} from '@common/core/types/models/Plan';\r\nimport {Plans} from '@common/shared/billing/plans.service';\r\nimport {Currency, ValueLists} from '@common/core/services/value-lists.service';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {randomString} from '@common/core/utils/random-string';\r\nimport {finalize} from 'rxjs/operators';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {FormBuilder} from '@angular/forms';\r\nimport {BackendErrorResponse} from '@common/core/types/backend-error-response';\r\n\r\nexport interface CrupdatePlanModalData {\r\n plan?: Plan;\r\n plans: Plan[];\r\n}\r\n\r\ninterface Errors extends Partial<Plan> {\r\n general?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'crupdate-plan-modal',\r\n templateUrl: './crupdate-plan-modal.component.html',\r\n styleUrls: ['./crupdate-plan-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CrupdatePlanModalComponent implements OnInit {\r\n public loading$ = new BehaviorSubject(false);\r\n public newFeature: string;\r\n public features$ = new BehaviorSubject<{content: string, id: string}[]>([]);\r\n public errors$ = new BehaviorSubject<Errors>({});\r\n public currencies$ = new BehaviorSubject<Currency[]>([]);\r\n public intervals = ['day', 'week', 'month', 'year'];\r\n private allPlans$ = new BehaviorSubject<Plan[]>([]);\r\n public form = this.fb.group({\r\n name: [''],\r\n parent_id: [],\r\n free: [false],\r\n hidden: [false],\r\n recommended: [false],\r\n show_permissions: [false],\r\n amount: [],\r\n currency: [],\r\n interval: [],\r\n interval_count: [],\r\n position: [],\r\n available_space: [],\r\n permissions: [[]],\r\n });\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef<CrupdatePlanModalComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: CrupdatePlanModalData,\r\n public plans: Plans,\r\n private toast: Toast,\r\n private valueLists: ValueLists,\r\n private fb: FormBuilder,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.resetState();\r\n this.allPlans$.next(this.data.plans || []);\r\n\r\n this.valueLists.get(['currencies']).subscribe(response => {\r\n this.currencies$.next(Object.values(response.currencies));\r\n });\r\n\r\n if (this.data.plan) {\r\n this.hydrateModel(this.data.plan);\r\n }\r\n }\r\n\r\n public confirm() {\r\n this.loading$.next(true);\r\n let request;\r\n\r\n if (this.data.plan) {\r\n request = this.plans.update(this.data.plan.id, this.getPayload());\r\n } else {\r\n request = this.plans.create(this.getPayload());\r\n }\r\n\r\n request\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(response => {\r\n this.close(response.plan);\r\n const action = this.data.plan ? 'updated' : 'created';\r\n this.toast.open('Plan has been ' + action);\r\n }, (errResponse: BackendErrorResponse) => {\r\n this.errors$.next(errResponse.errors);\r\n });\r\n }\r\n\r\n public getPayload() {\r\n const payload = {...this.form.getRawValue()};\r\n payload.features = this.features$.value.map(feature => feature.content);\r\n\r\n const currency = this.currencies$.value.find(curr => curr.code === payload.currency);\r\n payload.currency_symbol = currency.symbol;\r\n\r\n if (payload.interval === 'year') {\r\n payload.interval_count = 1;\r\n }\r\n\r\n return payload;\r\n }\r\n\r\n public close(data?: Plan) {\r\n this.resetState();\r\n this.dialogRef.close(data);\r\n }\r\n\r\n public addFeature() {\r\n const exists = this.features$.value.findIndex(curr => curr.content === this.newFeature) > -1;\r\n if (exists || ! this.newFeature) return;\r\n this.features$.next([...this.features$.value, {content: this.newFeature, id: randomString(5)}]);\r\n this.newFeature = null;\r\n }\r\n\r\n public removeFeature(feature: {content: string, id: string}) {\r\n const newFeatures = this.features$.value.filter(f => f.id !== feature.id);\r\n this.features$.next(newFeatures);\r\n }\r\n\r\n public getBasePlans(planToSkip?: Plan): Plan[] {\r\n return this.allPlans$.value.filter(p => !p.parent_id && !p.free && (!planToSkip || planToSkip.id !== p.id));\r\n }\r\n\r\n private hydrateModel(plan: Plan) {\r\n this.form.patchValue(plan);\r\n const newFeatures = plan.features.map(feature => {\r\n return {content: feature, id: randomString(5)};\r\n });\r\n this.form.get('amount').disable();\r\n this.features$.next(newFeatures);\r\n }\r\n\r\n private resetState() {\r\n this.form.reset({\r\n currency: 'USD',\r\n interval: 'month',\r\n interval_count: 1,\r\n position: 1,\r\n permissions: [],\r\n free: false,\r\n recommended: false,\r\n show_permissions: false,\r\n });\r\n this.features$.next([]);\r\n this.errors$.next({});\r\n }\r\n\r\n public reorderPlanFeatures(e: CdkDragDrop<void>) {\r\n const newFeatures = [...this.features$.value];\r\n moveItemInArray(newFeatures, e.previousIndex, e.currentIndex);\r\n this.features$.next(newFeatures);\r\n }\r\n\r\n public formValue() {\r\n return this.form.value as Partial<Plan>;\r\n }\r\n\r\n public getMinAmount(): number {\r\n // child plans can't be set as free,\r\n // so should have amount more then 0\r\n return this.form.get('parent_id').value ? 1 : 0;\r\n }\r\n\r\n public getMaxAmount(): number {\r\n if (this.form.get('parent_id').value) {\r\n // child plan amount per interval should be cheaper then parent\r\n const parent = this.allPlans$.value.find(p => p.id === this.form.get('parent_id').value);\r\n return ((parent.amount / parent.interval_count) * this.form.get('interval_count').value) - 0.01;\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\nimport {FormBuilder} from '@angular/forms';\nimport {DatatableService} from '../../../../../datatable/datatable.service';\nimport {Plan} from '../../../../../core/types/models/Plan';\n\n@Component({\n selector: 'plan-index-filters',\n templateUrl: './plan-index-filters.component.html',\n styleUrls: ['./plan-index-filters.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlanIndexFiltersComponent implements OnInit {\n public form = this.fb.group({\n currency: null,\n interval: null,\n parent_id: null,\n recommended: null,\n });\n\n constructor(\n private fb: FormBuilder,\n private datable: DatatableService<Plan>,\n ) {\n this.form.patchValue(this.datable.filters$.value);\n }\n\n ngOnInit() {\n this.form.valueChanges.subscribe(value => {\n this.datable.filters$.next(value);\n });\n }\n}\n","<div [formGroup]=\"form\" class=\"many-inputs\">\n <div class=\"input-container\">\n <label for=\"plan-currency-filter\" trans>Currency</label>\n <select id=\"plan-currency-filter\" formControlName=\"currency\">\n <option [ngValue]=\"null\" trans>Any</option>\n <option value=\"USD\" trans>USD</option>\n <option value=\"EUR\" trans>Eur</option>\n <option value=\"GBP\" trans>Pound Sterling</option>\n <option value=\"CAD\" trans>Canadian Dollar</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <label for=\"link-interval-filter\" trans>Interval</label>\n <select id=\"link-interval-filter\" formControlName=\"interval\">\n <option [ngValue]=\"null\" trans>Any</option>\n <option value=\"day\" trans>Day</option>\n <option value=\"week\" trans>Week</option>\n <option value=\"month\" trans>Month</option>\n <option value=\"year\" trans>Year</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <label for=\"plan-type-filter\" trans>Type</label>\n <select id=\"plan-type-filter\" formControlName=\"parent_id\">\n <option [ngValue]=\"null\" trans>Any</option>\n <option [ngValue]=\"true\" trans>Child</option>\n <option [ngValue]=\"false\" trans>Parent</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <label for=\"plan-recommended-filter\" trans>Recommended</label>\n <select id=\"plan-recommended-filter\" formControlName=\"recommended\">\n <option [ngValue]=\"null\" trans>Any</option>\n <option [ngValue]=\"true\" trans>Yes</option>\n <option [ngValue]=\"false\" trans>No</option>\n </select>\n </div>\n</div>\n","<div class=\"datatable responsive-table\">\r\n <datatable-header pluralResourceName=\"plans\">\r\n <ng-container leftContent>\r\n <button mat-raised-button color=\"accent\" [disabled]=\"loading$ | async\" (click)=\"showCrupdatePlanModal()\" *ngIf=\"currentUser.hasPermission('plans.create')\" trans>Add</button>\r\n <button mat-button [disabled]=\"loading$ | async\" (click)=\"syncPlans()\" *ngIf=\"currentUser.hasPermission('plans.create')\" [matTooltip]=\"'Sync if one of payment gateways was enabled after plan has already been created'\" trans>Sync</button>\r\n </ng-container>\r\n <button mat-raised-button color=\"accent\" (click)=\"maybeDeleteSelectedPlans()\" *ngIf=\"currentUser.hasPermission('plans.delete')\" rightContent trans>Delete Selected</button>\r\n <ng-template #tableFilters>\r\n <plan-index-filters></plan-index-filters>\r\n </ng-template>\r\n </datatable-header>\r\n <table class=\"material-table\">\r\n <thead>\r\n <tr>\r\n <th table-header-checkbox></th>\r\n <th table-sort-header trans>Name</th>\r\n <th table-sort-header=\"parent_id\" trans>Parent Plan</th>\r\n <th table-sort-header trans>Amount</th>\r\n <th table-sort-header trans>Currency</th>\r\n <th table-sort-header trans>Interval</th>\r\n <th table-sort-header trans>Recommended</th>\r\n <th table-sort-header trans>Position</th>\r\n <th table-sort-header=\"updated_at\" trans>Last Updated</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let plan of plans$ | async\">\r\n <td [table-body-checkbox]=\"plan.id\"></td>\r\n <td data-label=\"Name\">{{plan.name}}</td>\r\n <td data-label=\"Parent Plan\">{{plan.parent ? plan.parent.name : '-'}}</td>\r\n <td data-label=\"Amount\">{{plan.free ? 'Free' : (plan.amount | currency:plan.currency)}}</td>\r\n <td data-label=\"Currency\">{{plan.free ? 'Free' : plan.currency}}</td>\r\n <td data-label=\"Interval\">{{plan.free ? 'Free' : plan.interval}}</td>\r\n <td data-label=\"Recommended\">{{plan.parent_id ? '-' : (plan.recommended ? 'Yes' : 'No') }}</td>\r\n <td data-label=\"Position\">{{plan.parent_id ? '-' : plan.position}}</td>\r\n <td data-label=\"Last Updated\">{{plan.updated_at | formattedDate}}</td>\r\n <td class=\"edit-column\">\r\n <button mat-icon-button (click)=\"showCrupdatePlanModal(plan)\" *ngIf=\"currentUser.hasPermission('plans.update')\" [matTooltip]=\"'Edit plan' | trans\">\r\n <mat-icon svgIcon=\"edit\"></mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <no-results-message svgImage=\"online-payments.svg\" *ngIf=\"datatable.paginator.noResults$ | async\">\r\n <span primary-text trans>No plans have been created yet</span>\r\n </no-results-message>\r\n <datatable-footer></datatable-footer>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {CrupdatePlanModalComponent} from '../crupdate-plan-modal/crupdate-plan-modal.component';\r\nimport {finalize} from 'rxjs/operators';\r\nimport {Plans} from '@common/shared/billing/plans.service';\r\nimport {CurrentUser} from '@common/auth/current-user';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {Plan} from '@common/core/types/models/Plan';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {DatatableService} from '../../../../datatable/datatable.service';\r\n\r\n@Component({\r\n selector: 'plan-index',\r\n templateUrl: './plan-index.component.html',\r\n styleUrls: ['./plan-index.component.scss'],\r\n providers: [DatatableService],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlanIndexComponent implements OnInit {\r\n public loading$ = new BehaviorSubject<boolean>(false);\r\n public plans$ = this.datatable.data$ as Observable<Plan[]>;\r\n\r\n constructor(\r\n private plans: Plans,\r\n public currentUser: CurrentUser,\r\n private toast: Toast,\r\n public datatable: DatatableService<Plan>,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.datatable.init({\r\n uri: Plans.BASE_URI,\r\n });\r\n }\r\n\r\n public maybeDeleteSelectedPlans() {\r\n this.datatable.confirmResourceDeletion('plans')\r\n .subscribe(() => {\r\n this.loading$.next(true);\r\n this.plans.delete(this.datatable.selectedRows$.value).pipe(finalize(() => {\r\n this.loading$.next(false);\r\n this.datatable.reset();\r\n })).subscribe();\r\n });\r\n }\r\n\r\n public showCrupdatePlanModal(plan?: Plan) {\r\n this.datatable.openCrupdateResourceModal(\r\n CrupdatePlanModalComponent,\r\n {plan, plans: this.datatable.data$.value},\r\n ).subscribe();\r\n }\r\n\r\n public syncPlans() {\r\n this.loading$.next(true);\r\n this.plans.sync()\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(() => {\r\n this.toast.open('Synced plans across all enabled payment gateways');\r\n });\r\n }\r\n}\r\n","<div class=\"modal-header\">\r\n <h2 class=\"modal-title\" mat-dialog-title *ngIf=\"data.subscription\" trans>Update Subscription Details</h2>\r\n <h2 class=\"modal-title\" mat-dialog-title *ngIf=\"!data.subscription\" trans>Create a New Subscription</h2>\r\n <button type=\"button\" (click)=\"close()\" class=\"close-button no-style\" tabindex=\"-1\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</div>\r\n\r\n<form autocomplete=\"off\" (ngSubmit)=\"confirm()\" *ngIf=\"errors$ | async as errors\" ngNativeValidate>\r\n <div class=\"many-inputs mat-dialog-content\" mat-dialog-content>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"user\" trans>User</label>\r\n <input type=\"text\" id=\"user\" placeholder=\"Search for user...\" [formControl]=\"userAutocomplete\" [matAutocomplete]=\"auto\" required>\r\n <div class=\"error\" *ngIf=\"errors.user_id\">{{errors.user_id}}</div>\r\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let user of filteredUsers | async\" [value]=\"user\">{{ user.email }}</mat-option>\r\n </mat-autocomplete>\r\n </div>\r\n\r\n <ng-container [formGroup]=\"form\">\r\n <div class=\"input-container\">\r\n <label for=\"plan\" trans>Plan</label>\r\n <select id=\"plan\" formControlName=\"plan_id\" required>\r\n <option [ngValue]=\"plan.id\" *ngFor=\"let plan of plans\">\r\n <full-plan-name [plan]=\"plan\"></full-plan-name>\r\n ({{plan.amount | currency:plan.currency}})\r\n </option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"description\" trans>Description</label>\r\n <textarea id=\"description\" formControlName=\"description\"></textarea>\r\n <div class=\"error\" *ngIf=\"errors.description\">{{errors.description}}</div>\r\n </div>\r\n\r\n <div class=\"input-container date-picker-input-container\">\r\n <label for=\"renews_at\" trans>Renews At</label>\r\n <input id=\"renews_at\" formControlName=\"renews_at\" [matDatepicker]=\"renewsAtDatePicker\" (click)=\"toggleDatePicker(renewsAtDatePicker)\">\r\n <mat-datepicker-toggle [for]=\"renewsAtDatePicker\"></mat-datepicker-toggle>\r\n <p trans>This will only change local records. User will continue to be billed on their original cycle on the payment gateway.</p>\r\n <div class=\"error\" *ngIf=\"errors.renews_at\">{{errors.renews_at}}</div>\r\n <mat-datepicker #renewsAtDatePicker></mat-datepicker>\r\n </div>\r\n\r\n <div class=\"input-container date-picker-input-container\">\r\n <label for=\"ends_at\" trans>Ends At</label>\r\n <input id=\"ends_at\" formControlName=\"ends_at\" [matDatepicker]=\"endsAtDatePicker\" (click)=\"toggleDatePicker(endsAtDatePicker)\">\r\n <p trans>This will only change local records. User will continue to be billed on their original cycle on the payment gateway.</p>\r\n <div class=\"error\" *ngIf=\"errors.ends_at\">{{errors.ends_at}}</div>\r\n <mat-datepicker-toggle [for]=\"endsAtDatePicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #endsAtDatePicker></mat-datepicker>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"buttons right mat-dialog-actions\" mat-dialog-actions>\r\n <button (click)=\"close()\" type=\"button\" mat-button class=\"button cancel\" trans>Cancel</button>\r\n <button type=\"submit\" class=\"button primary\" mat-raised-button color=\"accent\" [disabled]=\"loading$ | async\">\r\n <span *ngIf=\"data.subscription\" trans>Update</span>\r\n <span *ngIf=\"!data.subscription\" trans>Create</span>\r\n </button>\r\n </div>\r\n</form>\r\n\r\n<loading-indicator class=\"overlay\" [isVisible]=\"loading$ | async\"></loading-indicator>\r\n","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\r\nimport {MatDatepicker} from '@angular/material/datepicker';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {FormBuilder, FormControl} from '@angular/forms';\r\nimport {debounceTime, distinctUntilChanged, finalize, switchMap} from 'rxjs/operators';\r\nimport {BehaviorSubject, Observable, of as observableOf, Subject} from 'rxjs';\r\nimport {User} from '@common/core/types/models/User';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {Users} from '@common/auth/users.service';\r\nimport {Subscription} from '@common/shared/billing/models/subscription';\r\nimport {Plans} from '@common/shared/billing/plans.service';\r\nimport {Subscriptions} from '@common/shared/billing/subscriptions.service';\r\nimport {Plan} from '@common/core/types/models/Plan';\r\nimport {BackendErrorResponse} from '@common/core/types/backend-error-response';\r\n\r\nexport interface CrupdateSubscriptionModalData {\r\n subscription?: Subscription;\r\n}\r\n\r\ninterface Errors extends Partial<Subscription> {\r\n general?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'crupdate-subscription-modal',\r\n templateUrl: './crupdate-subscription-modal.component.html',\r\n styleUrls: ['./crupdate-subscription-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CrupdateSubscriptionModalComponent implements OnInit {\r\n public loading$ = new BehaviorSubject<boolean>(false);\r\n\r\n public form = this.fb.group({\r\n plan_id: [''],\r\n description: [''],\r\n renews_at: [''],\r\n ends_at: [''],\r\n });\r\n \r\n public errors$ = new BehaviorSubject<Errors>({});\r\n\r\n public userAutocomplete: FormControl = new FormControl(null);\r\n public filteredUsers: Observable<User[]> = new Subject();\r\n public plans: Plan[] = [];\r\n \r\n constructor(\r\n private dialogRef: MatDialogRef<CrupdateSubscriptionModalComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: CrupdateSubscriptionModalData,\r\n public subscriptions: Subscriptions,\r\n private toast: Toast,\r\n private users: Users,\r\n private plansApi: Plans,\r\n private fb: FormBuilder,\r\n ) {\r\n this.resetState();\r\n }\r\n\r\n ngOnInit() {\r\n this.resetState();\r\n this.bindToUserAutocomplete();\r\n this.fetchPlans();\r\n\r\n // toggle renews_at/ends_at enabled/disabled state\r\n this.form.get('ends_at').valueChanges.pipe(distinctUntilChanged()).subscribe(value => {\r\n value ? this.form.get('renews_at').disable() : this.form.get('renews_at').enable();\r\n });\r\n this.form.get('renews_at').valueChanges.pipe(distinctUntilChanged()).subscribe(value => {\r\n value ? this.form.get('ends_at').disable() : this.form.get('ends_at').enable();\r\n });\r\n\r\n if (this.data.subscription) {\r\n this.hydrateModel(this.data.subscription);\r\n }\r\n }\r\n \r\n public confirm() {\r\n this.loading$.next(true);\r\n let request;\r\n\r\n if (this.data.subscription) {\r\n request = this.subscriptions.update(this.data.subscription.id, this.getPayload());\r\n } else {\r\n request = this.subscriptions.create(this.getPayload());\r\n }\r\n\r\n request\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(response => {\r\n this.close(response.subscription);\r\n const action = this.data.subscription ? 'updated' : 'created';\r\n this.toast.open('Subscription ' + action);\r\n }, (errResponse: BackendErrorResponse) => this.errors$.next(errResponse.errors));\r\n }\r\n \r\n public close(data?: any) {\r\n this.resetState();\r\n this.dialogRef.close(data);\r\n }\r\n\r\n public displayFn(user?: User): string {\r\n return user ? user.email : null;\r\n }\r\n \r\n private hydrateModel(subscription: Subscription) {\r\n const data = {...subscription};\r\n\r\n if (data.renews_at) {\r\n data.renews_at = this.mysqlToDate(data.renews_at);\r\n }\r\n\r\n if (data.ends_at) {\r\n data.ends_at = this.mysqlToDate(data.ends_at);\r\n }\r\n\r\n if (subscription.user_id) {\r\n this.userAutocomplete.setValue(subscription.user);\r\n }\r\n \r\n this.form.patchValue(data);\r\n }\r\n \r\n private getPayload() {\r\n // const payload = {\r\n // plan_id: this.model.plan_id,\r\n // description: this.model.description,\r\n // } as Partial<Subscription>;\r\n //\r\n // const renewsAt = this.dateToMysql(this.model.renews_at as any),\r\n // endsAt = this.dateToMysql(this.model.ends_at as any);\r\n //\r\n // if (renewsAt) payload.renews_at = renewsAt as any;\r\n // if (endsAt) payload.ends_at = endsAt as any;\r\n //\r\n // // if we are creating a new subscription, start user ID to payload\r\n // if (!this.updating && this.userAutocomplete.value) {\r\n // payload['user_id'] = this.userAutocomplete.value.id;\r\n // }\r\n //\r\n // return payload;\r\n\r\n const payload = this.form.value as Partial<Subscription>;\r\n\r\n const renewsAt = this.dateToMysql(payload.renews_at),\r\n endsAt = this.dateToMysql(payload.ends_at);\r\n\r\n if (renewsAt) payload.renews_at = renewsAt as string;\r\n if (endsAt) payload.ends_at = endsAt as string;\r\n\r\n // if we are creating a new subscription, add user ID to payload\r\n if (!this.data.subscription && this.userAutocomplete.value) {\r\n payload.user_id = this.userAutocomplete.value.id;\r\n }\r\n \r\n return payload;\r\n }\r\n\r\n /**\r\n * Format js date instance into mysql timestamp format.\r\n */\r\n private dateToMysql(date: string | Date) {\r\n if (!date || typeof date === 'string') return date;\r\n return date.toJSON().split('.')[0].replace('T', ' ');\r\n }\r\n\r\n private mysqlToDate(date: string): any {\r\n const t = date.split(/[- :]/) as any[];\r\n return new Date(Date.UTC(t[0], t[1] - 1, t[2], t[3], t[4], t[5]));\r\n }\r\n \r\n private resetState() {\r\n this.form.reset();\r\n this.errors$.next({});\r\n }\r\n\r\n public toggleDatePicker(datePicker: MatDatepicker<Date>) {\r\n if (datePicker.opened) {\r\n datePicker.close();\r\n } else {\r\n datePicker.open();\r\n }\r\n }\r\n \r\n private bindToUserAutocomplete() {\r\n this.filteredUsers = this.userAutocomplete.valueChanges.pipe(\r\n debounceTime(400),\r\n switchMap(query => {\r\n if (!query) return observableOf([]);\r\n return this.users.getAll({query});\r\n })\r\n );\r\n }\r\n \r\n private fetchPlans() {\r\n this.plansApi.all().subscribe(response => {\r\n this.plans = response.pagination.data;\r\n\r\n // select first plan, if none is selected yet\r\n if (!this.form.value.plan_id && this.plans.length) {\r\n this.form.patchValue({plan_id: this.plans[0].id});\r\n }\r\n });\r\n }\r\n}\r\n","import {Component, OnInit, ChangeDetectionStrategy} from '@angular/core';\r\nimport {FormBuilder} from '@angular/forms';\r\nimport {DatatableService} from '../../../../../datatable/datatable.service';\r\nimport {Plan} from '../../../../../core/types/models/Plan';\r\n\r\n@Component({\r\n selector: 'subscription-index-filters',\r\n templateUrl: './subscription-index-filters.component.html',\r\n styleUrls: ['./subscription-index-filters.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SubscriptionIndexFiltersComponent implements OnInit {\r\n public form = this.fb.group({\r\n ends_at: null,\r\n gateway: null,\r\n created_at: null,\r\n });\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private datable: DatatableService<Plan>,\r\n ) {\r\n this.form.patchValue(this.datable.filters$.value);\r\n }\r\n\r\n ngOnInit() {\r\n this.form.valueChanges.subscribe(value => {\r\n this.datable.filters$.next(value);\r\n });\r\n }\r\n\r\n}\r\n","<div [formGroup]=\"form\" class=\"many-inputs\">\n <div class=\"input-container\">\n <label for=\"subscription-status-filter\" trans>Status</label>\n <select id=\"subscription-status-filter\" formControlName=\"ends_at\">\n <option [ngValue]=\"null\" trans>Any</option>\n <option [ngValue]=\"false\" trans>Active</option>\n <option [ngValue]=\"true\" trans>Cancelled</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <label for=\"subscription-gateway-filter\" trans>Gateway</label>\n <select id=\"subscription-gateway-filter\" formControlName=\"gateway\">\n <option [ngValue]=\"null\" trans>Any</option>\n <option value=\"paypal\" trans>Paypal</option>\n <option value=\"stripe\" trans>Stripe</option>\n </select>\n </div>\n\n <between-input formControlName=\"created_at\" [setDefaultDate]=\"false\" [showLabels]=\"false\">Subscribed Between</between-input>\n</div>\n","<div class=\"datatable responsive-table\">\r\n <datatable-header pluralResourceName=\"subscriptions\">\r\n <ng-container leftContent>\r\n <button mat-raised-button color=\"accent\" headerActions [disabled]=\"loading$ | async\" (click)=\"openCrupdateSubscriptionModal()\" *ngIf=\"currentUser.hasPermission('subscriptions.create')\" trans>Add</button>\r\n </ng-container>\r\n <ng-template #tableFilters>\r\n <subscription-index-filters></subscription-index-filters>\r\n </ng-template>\r\n </datatable-header>\r\n <table class=\"material-table\">\r\n <thead>\r\n <tr>\r\n <th table-sort-header=\"user_id\" trans>Owner</th>\r\n <th table-sort-header trans>Gateway</th>\r\n <th table-sort-header=\"ends_at\" trans>Cancelled</th>\r\n <th trans>On Grace Period</th>\r\n <th table-sort-header trans>Renews At</th>\r\n <th table-sort-header trans>Ends At</th>\r\n <th table-sort-header=\"created_at\" trans>Created At</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let subscription of subscriptions$ | async\">\r\n <td>\r\n <user-column [user]=\"subscription.user\"></user-column>\r\n </td>\r\n <td data-label=\"Gateway\">{{subscription.gateway}}</td>\r\n <td data-label=\"Cancelled\">{{subscription.cancelled ? 'Yes' : 'No' }}</td>\r\n <td data-label=\"On Grace Period\">{{subscription.on_grace_period ? 'Yes' : 'No' }}</td>\r\n <td data-label=\"Renews At\">{{subscription.renews_at ? (subscription.renews_at | formattedDate) : '-'}}</td>\r\n <td data-label=\"Ends At\">{{subscription.ends_at ? (subscription.ends_at | formattedDate) : '-'}}</td>\r\n <td data-label=\"Created At\">{{subscription.created_at | formattedDate}}</td>\r\n <td class=\"edit-column\">\r\n <ng-container *ngIf=\"currentUser.hasPermission('subscriptions.delete')\">\r\n <button mat-icon-button (click)=\"openCrupdateSubscriptionModal(subscription)\" [matTooltip]=\"'Edit' | trans\"><mat-icon svgIcon=\"edit\"></mat-icon></button>\r\n <button mat-icon-button (click)=\"maybeCancelSubscription(subscription)\" [disabled]=\"subscription.cancelled\" [matTooltip]=\"'Cancel/Suspend' | trans\"><mat-icon svgIcon=\"pause\"></mat-icon></button>\r\n <button mat-icon-button (click)=\"maybeDeleteSubscription(subscription)\" [matTooltip]=\"'Delete' | trans\"><mat-icon svgIcon=\"delete\"></mat-icon></button>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <no-results-message svgImage=\"subscriptions.svg\" *ngIf=\"datatable.paginator.noResults$ | async\">\r\n <span primary-text trans>No subscriptions have been created yet</span>\r\n </no-results-message>\r\n <datatable-footer></datatable-footer>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {finalize} from 'rxjs/operators';\r\nimport {CrupdateSubscriptionModalComponent} from '../crupdate-subscription-modal/crupdate-subscription-modal.component';\r\nimport {Subscription} from '@common/shared/billing/models/subscription';\r\nimport {Subscriptions} from '@common/shared/billing/subscriptions.service';\r\nimport {CurrentUser} from '@common/auth/current-user';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {ConfirmModalComponent} from '@common/core/ui/confirm-modal/confirm-modal.component';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {DatatableService} from '../../../../datatable/datatable.service';\r\nimport {Modal} from '../../../../core/ui/dialogs/modal.service';\r\n\r\n@Component({\r\n selector: 'subscription-index',\r\n templateUrl: './subscription-index.component.html',\r\n styleUrls: ['./subscription-index.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [DatatableService],\r\n})\r\nexport class SubscriptionIndexComponent implements OnInit {\r\n public loading$ = new BehaviorSubject<boolean>(false);\r\n public subscriptions$ = this.datatable.data$ as Observable<Subscription[]>;\r\n\r\n constructor(\r\n private modal: Modal,\r\n private subscriptions: Subscriptions,\r\n public currentUser: CurrentUser,\r\n private toast: Toast,\r\n public datatable: DatatableService<Subscription>,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.datatable.init({\r\n uri: Subscriptions.BASE_URI,\r\n });\r\n }\r\n\r\n public maybeCancelSubscription(subscription: Subscription) {\r\n this.modal.open(ConfirmModalComponent, {\r\n title: 'Cancel Subscription',\r\n body: 'Are you sure you want to cancel this subscription?',\r\n bodyBold: 'This will cancel or suspend subscription based on its gateway and put user on grace period until their next scheduled renewal date and allow them to renew the subscription.',\r\n ok: 'Cancel',\r\n cancel: 'Go Back'\r\n }).afterClosed().subscribe(confirmed => {\r\n if ( ! confirmed) return;\r\n this.cancelOrDeleteSubscription(subscription, {delete: false});\r\n });\r\n }\r\n\r\n public maybeDeleteSubscription(subscription: Subscription) {\r\n this.modal.open(ConfirmModalComponent, {\r\n title: 'Delete Subscription',\r\n body: 'Are you sure you want to delete this subscription?',\r\n bodyBold: 'This will permanently delete user subscription and immediately cancel it on billing gateway.',\r\n ok: 'Delete',\r\n cancel: 'Go Back'\r\n }).afterClosed().subscribe(confirmed => {\r\n if ( ! confirmed) return;\r\n this.cancelOrDeleteSubscription(subscription, {delete: true});\r\n });\r\n }\r\n\r\n private cancelOrDeleteSubscription(subscription: Subscription, params: {delete?: boolean} = {}) {\r\n this.loading$.next(true);\r\n this.subscriptions.cancel(subscription.id, {delete: params.delete})\r\n .pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(() => {\r\n this.datatable.reset();\r\n this.toast.open('Subscription cancelled.');\r\n });\r\n }\r\n\r\n public openCrupdateSubscriptionModal(subscription?: Subscription) {\r\n this.modal.open(CrupdateSubscriptionModalComponent, {subscription})\r\n .afterClosed()\r\n .subscribe(newSubscription => {\r\n if ( ! newSubscription) return;\r\n this.datatable.reset();\r\n });\r\n }\r\n}\r\n","<div class=\"header\">\n <div class=\"title\" trans>GDPR</div>\n <div class=\"subtitle\" trans>Configure settings related to EU General Data Protection Regulation.</div>\n</div>\n\n<form class=\"body many-inputs\" (ngSubmit)=\"saveSettings()\" ngNativeValidate>\n <div class=\"setting-toggle-container\">\n <mat-slide-toggle name=\"cookie_notice.enable\" id=\"cookie_notice.enable\" [(ngModel)]=\"state.client['cookie_notice.enable']\" trans>Enable Cookie Notice</mat-slide-toggle>\n <p trans>Whether cookie notice should be shown automatically to users from EU until it is accepted.</p>\n </div>\n\n <div class=\"error-group many-inputs\" *ngIf=\"state.client['cookie_notice.enable']\">\n <div class=\"input-container\" *ngIf=\"customPages$ | async as customPages\">\n <label for=\"cookie_notice.learn_more\">Learn More Link</label>\n <select id=\"cookie_notice.learn_more\" name=\"cookie_notice.learn_more\" [(ngModel)]=\"state.client['cookie_notice.learn_more']\">\n <option [ngValue]=\"undefined\" trans>None (Hide learn more link)</option>\n <option *ngFor=\"let item of customPages.items\" [value]=\"item.action\">{{item.label}}</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <div class=\"input-container\">\n <label for=\"cookie-notice-position\" trans>Cookie Notice Position</label>\n <select id=\"cookie-notice-position\" name=\"cookie-notice-position\" [(ngModel)]=\"state.client['cookie_notice.position']\">\n <option value=\"top\" trans>Top</option>\n <option value=\"bottom\" trans>Bottom</option>\n </select>\n </div>\n </div>\n </div>\n\n <div class=\"error-group no-border-top no-bottom-border policies-group\">\n <h2>\n <span>Registration Page Policies</span>\n <button type=\"button\" mat-icon-button color=\"accent\" class=\"add-policy-button\" (click)=\"addRegisterPolicy()\">\n <mat-icon svgIcon=\"add\"></mat-icon>\n </button>\n </h2>\n <p trans>Here you can create policies that will be shown on registration page and user will be required to accept them by toggling a checkbox.</p>\n <ul class=\"unstyled-list\">\n <li *ngFor=\"let policy of registerPolicies.controls; index as i\" [formGroup]=\"policy\" class=\"many-inputs policy-list-item\">\n <div class=\"input-container\">\n <label for=\"policy-name-{{i}}\" class=\"policy-name-label\">\n <span trans>Name</span>\n <button mat-icon-button color=\"warn\" [disableRipple]=\"true\" (click)=\"removeRegisterPolicy(i)\">\n <mat-icon svgIcon=\"remove\"></mat-icon>\n </button>\n </label>\n <input type=\"text\" id=\"policy-name-{{i}}\" formControlName=\"label\" required>\n </div>\n <div class=\"input-container\">\n <label for=\"policy-action-{{i}}\" trans>Link</label>\n <div class=\"inline-inputs\">\n <select class=\"policy-type-select\" id=\"policy-type-{{i}}\" formControlName=\"type\" (change)=\"onPolicyTypeChange(policy)\">\n <option value=\"page\" trans>Page</option>\n <option value=\"link\" trans>Link</option>\n </select>\n <input type=\"url\" class=\"policy-action-input\" id=\"policy-action-{{i}}\" *ngIf=\"policy.value.type === 'link'\" formControlName=\"action\" placeholder=\"Optional...\" trans-placeholder>\n <select id=\"policy-action-{{i}}\" class=\"policy-action-input\" formControlName=\"action\" *ngIf=\"policy.value.type === 'page'\">\n <option *ngFor=\"let item of (customPages$ | async).items\" [value]=\"item.action\">{{item.label}}</option>\n </select>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <button mat-raised-button color=\"accent\" class=\"button primary update-button\" type=\"submit\" [disabled]=\"loading$ | async\" trans>Update</button>\n <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"loading$ | async\"></mat-progress-bar>\n</form>\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\nimport {SettingsPanelComponent} from '@common/admin/settings/settings-panel.component';\nimport {BehaviorSubject} from 'rxjs';\nimport {MenuItemCategory} from '@common/admin/appearance/panels/menus-appearance-panel/menus/item-categories/menu-item-category';\nimport {AbstractControl, FormArray, FormControl, FormGroup} from '@angular/forms';\nimport {MenuItem} from '@common/core/ui/custom-menu/menu-item';\n\n@Component({\n selector: 'gdpr-settings',\n templateUrl: './gdpr-settings.component.html',\n styleUrls: ['./gdpr-settings.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'class': 'settings-panel'},\n})\nexport class GdprSettingsComponent extends SettingsPanelComponent implements OnInit {\n public customPages$ = new BehaviorSubject<MenuItemCategory>({name: '', items: []});\n public registerPolicies = new FormArray([]);\n\n ngOnInit() {\n this.valueLists.get(['menuItemCategories']).subscribe(response => {\n this.customPages$.next(response.menuItemCategories.find(c => c.name === 'Custom Page'));\n });\n\n this.settings.getJson('register_policies', []).forEach(policy => {\n this.addRegisterPolicy(policy);\n });\n }\n\n public saveSettings() {\n const settings = this.state.getModified();\n settings.client.register_policies = JSON.stringify(this.registerPolicies.value);\n super.saveSettings(settings);\n }\n\n public addRegisterPolicy(policy: Partial<MenuItem> = {}) {\n this.registerPolicies.push(new FormGroup({\n label: new FormControl(policy.label || ''),\n action: new FormControl(policy.action || this.getFirstCustomPageAction()),\n type: new FormControl(policy.type || 'page'),\n }));\n }\n\n public removeRegisterPolicy(i: number) {\n this.registerPolicies.removeAt(i);\n }\n\n public onPolicyTypeChange(control: AbstractControl) {\n control.get('action').reset();\n if (control.get('type').value === 'page') {\n control.get('action').setValue(this.getFirstCustomPageAction());\n }\n }\n\n private getFirstCustomPageAction(): string {\n return this.customPages$.value.items[0] && this.customPages$.value.items[0].action;\n }\n}\n","import {Injectable} from '@angular/core';\r\nimport {AppHttpClient} from '../../core/http/app-http-client.service';\r\nimport {PaginatedBackendResponse} from '../../core/types/pagination/paginated-backend-response';\r\nimport {Tag} from '@common/core/types/models/Tag';\r\nimport {BackendResponse} from '@common/core/types/backend-response';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TagsService {\r\n static BASE_URI = 'tags';\r\n\r\n constructor(private http: AppHttpClient) {\r\n }\r\n\r\n public index(params?: object): PaginatedBackendResponse<Tag> {\r\n return this.http.get(TagsService.BASE_URI, params);\r\n }\r\n\r\n public create(params: Partial<Tag>): BackendResponse<{tag: Tag}> {\r\n return this.http.post(TagsService.BASE_URI, params);\r\n }\r\n\r\n public update(id: number, params: Partial<Tag>): BackendResponse<{tag: Tag}> {\r\n return this.http.put(`${TagsService.BASE_URI}/${id}`, params);\r\n }\r\n\r\n public delete(tagIds: number[]): BackendResponse<void> {\r\n return this.http.delete(`${TagsService.BASE_URI}/${tagIds}`);\r\n }\r\n\r\n}\r\n","<div class=\"modal-header\">\r\n <h2 mat-dialog-title>\r\n <span *ngIf=\"data.tag\" trans>Update Tag</span>\r\n <span *ngIf=\"!data.tag\" trans>Create a New Tag</span>\r\n </h2>\r\n <button type=\"button\" (click)=\"close()\" class=\"close-button\" mat-icon-button tabindex=\"-1\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</div>\r\n\r\n<form autocomplete=\"off\" ngNativeValidate [formGroup]=\"form\" (ngSubmit)=\"confirm()\">\r\n <mat-dialog-content class=\"many-inputs\">\r\n\r\n <div class=\"input-container\">\r\n <label for=\"crupdate-tag-modal-name\" trans>Name</label>\r\n <input type=\"text\" id=\"crupdate-tag-modal-name\" formControlName=\"name\" required>\r\n <p trans>Unique tag identifier.</p>\r\n <div class=\"error\" *ngIf=\"errors.name\">{{errors.name}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"display_name\" trans>Display Name</label>\r\n <input type=\"text\" formControlName=\"display_name\" id=\"display_name\">\r\n <p trans>User friendly tag name.</p>\r\n <div class=\"error\" *ngIf=\"errors.display_name\">{{errors.display_name}}</div>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"crupdate_tag_modal_type\" trans>Type</label>\r\n <select formControlName=\"type\" id=\"crupdate_tag_modal_type\" class=\"capitalize\" required>\r\n <option [value]=\"type.name\" *ngFor=\"let type of tagTypes\" trans>{{type.name}}</option>\r\n </select>\r\n <div class=\"error\" *ngIf=\"errors.type\">{{errors.type}}</div>\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions>\r\n <button (click)=\"close()\" type=\"button\" class=\"cancel-button\" mat-button trans>Cancel</button>\r\n <button type=\"submit\" class=\"submit-button\" mat-raised-button color=\"accent\">\r\n <span *ngIf=\"data.tag\" trans>Update</span>\r\n <span *ngIf=\"!data.tag\" trans>Create</span>\r\n </button>\r\n </mat-dialog-actions>\r\n</form>\r\n","import {Component, Inject} from '@angular/core';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {Tag} from '@common/core/types/models/Tag';\r\nimport {TagsService} from '@common/core/services/tags.service';\r\nimport {FormControl, FormGroup} from '@angular/forms';\r\nimport {Settings} from '@common/core/config/settings.service';\r\nimport {BackendErrorResponse} from '@common/core/types/backend-error-response';\r\n\r\ninterface CrupdateTagModalData {\r\n tag?: Tag;\r\n forceType?: string;\r\n}\r\n\r\ninterface CrupdateTagModalErrors {\r\n name?: string;\r\n display_name?: string;\r\n type?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'crupdate-tag-modal',\r\n templateUrl: './crupdate-tag-modal.component.html',\r\n styleUrls: ['./crupdate-tag-modal.component.scss'],\r\n})\r\nexport class CrupdateTagModalComponent {\r\n public errors: CrupdateTagModalErrors = {};\r\n public tagTypes: {name: string, system?: boolean}[];\r\n public isSystemTag = false;\r\n\r\n public form = new FormGroup({\r\n name: new FormControl(''),\r\n display_name: new FormControl(''),\r\n type: new FormControl(''),\r\n });\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef<CrupdateTagModalComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: CrupdateTagModalData,\r\n private toast: Toast,\r\n private tags: TagsService,\r\n private settings: Settings,\r\n ) {\r\n this.hydrate();\r\n }\r\n\r\n public close(tag?: Tag) {\r\n this.errors = {};\r\n this.dialogRef.close(tag);\r\n }\r\n\r\n private hydrate() {\r\n this.tagTypes = this.settings.get('vebto.admin.tagTypes', []);\r\n\r\n if (this.data.tag) {\r\n this.form.patchValue(this.data.tag);\r\n } else {\r\n this.form.get('type').patchValue(this.data.forceType || this.tagTypes[0]?.name || '');\r\n }\r\n\r\n const type = this.data.forceType || this.data.tag?.type;\r\n this.isSystemTag = this.tagTypes.find(t => t.name === type)?.system;\r\n if (this.isSystemTag || this.data.forceType) {\r\n this.form.get('type').disable();\r\n }\r\n if (this.isSystemTag) {\r\n this.form.get('name').disable();\r\n }\r\n }\r\n\r\n public confirm() {\r\n const request = this.data.tag ?\r\n this.tags.update(this.data.tag.id, this.form.getRawValue()) :\r\n this.tags.create(this.form.getRawValue());\r\n request.subscribe(response => {\r\n this.toast.open('Tag ' + (this.data.tag ? 'Updated' : 'Created'));\r\n this.close(response.tag);\r\n }, (errResponse: BackendErrorResponse) => this.errors = errResponse.errors);\r\n }\r\n}\r\n","<div [formGroup]=\"form\" class=\"many-inputs\">\n <div class=\"input-container\">\n <label for=\"tag-type-filter\" trans>Type</label>\n <select id=\"tag-type-filter\" formControlName=\"type\">\n <option [ngValue]=\"null\" trans>Any</option>\n <option [value]=\"type.name\" *ngFor=\"let type of types\" trans>{{type.name}}</option>\n </select>\n </div>\n</div>\n","import {Component, OnInit, ChangeDetectionStrategy} from '@angular/core';\nimport {Settings} from '../../../core/config/settings.service';\nimport {DatatableService} from '../../../datatable/datatable.service';\nimport {Tag} from '../../../core/types/models/Tag';\nimport {FormBuilder} from '@angular/forms';\n\n@Component({\n selector: 'tag-index-filters',\n templateUrl: './tag-index-filters.component.html',\n styleUrls: ['./tag-index-filters.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TagIndexFiltersComponent implements OnInit {\n public types: object[] = [];\n public form = this.fb.group({\n type: null,\n });\n\n constructor(\n private fb: FormBuilder,\n private datable: DatatableService<Tag>,\n private settings: Settings,\n ) {\n this.form.patchValue(this.datable.filters$.value);\n }\n\n ngOnInit() {\n this.types = this.settings.get('vebto.admin.tagTypes');\n this.form.valueChanges.subscribe(value => {\n this.datable.filters$.next(value);\n });\n }\n}\n","<div class=\"datatable responsive-table\">\r\n <datatable-header pluralResourceName=\"tags\">\r\n <ng-container leftContent>\r\n <button mat-raised-button color=\"accent\" (click)=\"showCrupdateTagModal()\" *ngIf=\"currentUser.hasPermission('tags.create')\" headerActions trans>Add</button>\r\n </ng-container>\r\n <button mat-raised-button color=\"accent\" (click)=\"maybeDeleteSelectedTags()\" rightContent *ngIf=\"currentUser.hasPermission('tags.delete')\" trans>Delete Selected</button>\r\n <ng-template #tableFilters *ngIf=\"showFilterPanel\">\r\n <tag-index-filters></tag-index-filters>\r\n </ng-template>\r\n </datatable-header>\r\n <table class=\"material-table\">\r\n <thead>\r\n <tr>\r\n <th table-header-checkbox></th>\r\n <th table-sort-header trans>Name</th>\r\n <th table-sort-header trans>Type</th>\r\n <th table-sort-header trans>Display Name</th>\r\n <th table-sort-header=\"updated_at\" trans>Last Updated</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let tag of tags$ | async\">\r\n <td [table-body-checkbox]=\"tag.id\"></td>\r\n <td data-label=\"Name\">{{tag.name}}</td>\r\n <td data-label=\"Type\">{{tag.type}}</td>\r\n <td data-label=\"Display Name\">{{tag.display_name}}</td>\r\n <td data-label=\"Last Updated\">{{tag.updated_at ? (tag.updated_at | formattedDate) : '-' }}</td>\r\n <td class=\"edit-column\">\r\n <button mat-icon-button (click)=\"showCrupdateTagModal(tag)\" *ngIf=\"currentUser.hasPermission('tags.update')\" [matTooltip]=\"'Edit tag' | trans\">\r\n <mat-icon svgIcon=\"edit\"></mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <no-results-message svgImage=\"folder.svg\" *ngIf=\"datatable.paginator.noResults$ | async\">\r\n <span primary-text trans>No tags have been created yet</span>\r\n </no-results-message>\r\n <datatable-footer></datatable-footer>\r\n</div>\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {CrupdateTagModalComponent} from './crupdate-tag-modal/crupdate-tag-modal.component';\r\nimport {Tag} from '@common/core/types/models/Tag';\r\nimport {TagsService} from '@common/core/services/tags.service';\r\nimport {CurrentUser} from '@common/auth/current-user';\r\nimport {DatatableService} from '../../datatable/datatable.service';\r\nimport {Observable} from 'rxjs';\r\nimport {Settings} from '../../core/config/settings.service';\r\n\r\n@Component({\r\n selector: 'tags',\r\n templateUrl: './tag-index.component.html',\r\n providers: [DatatableService],\r\n})\r\nexport class TagIndexComponent implements OnInit {\r\n public tags$ = this.datatable.data$ as Observable<Tag[]>;\r\n public showFilterPanel: boolean;\r\n\r\n constructor(\r\n private tags: TagsService,\r\n public currentUser: CurrentUser,\r\n public datatable: DatatableService<Tag>,\r\n public settings: Settings,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.showFilterPanel = this.settings.get('vebto.admin.tagTypes')?.length > 1;\r\n this.datatable.init({\r\n uri: TagsService.BASE_URI,\r\n });\r\n }\r\n\r\n public maybeDeleteSelectedTags() {\r\n this.datatable.confirmResourceDeletion('tags')\r\n .subscribe(() => {\r\n this.tags.delete(this.datatable.selectedRows$.value).subscribe(() => {\r\n this.datatable.reset();\r\n });\r\n });\r\n }\r\n\r\n public showCrupdateTagModal(tag?: Tag) {\r\n this.datatable.openCrupdateResourceModal(CrupdateTagModalComponent, {tag})\r\n .subscribe();\r\n }\r\n}\r\n","<table class=\"material-table\">\n <thead>\n <tr>\n <th table-header-checkbox></th>\n <th table-sort-header trans>Slug</th>\n <th *ngIf=\"showOwnerColumn\" table-sort-header trans>Owner</th>\n <th class=\"body-column\" trans>Body</th>\n <th class=\"type-column\" table-sort-header *ngIf=\"showTypeColumn\" trans>Type</th>\n <th trans>Last Updated</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let page of pages\">\n <td [table-body-checkbox]=\"page.id\"></td>\n <td data-label=\"Slug\"><a [href]=\"getPageUrl(page)\" target=\"_blank\">{{page.slug}}</a></td>\n <td data-label=\"Owner\" *ngIf=\"showOwnerColumn\">\n <user-column [user]=\"page.user\"></user-column>\n </td>\n <td data-label=\"Body\" class=\"body-column\">{{page.body}}</td>\n <td data-label=\"Type\" class=\"type-column\" *ngIf=\"showTypeColumn\">{{page.type ? viewName(page.type) : 'default'}}</td>\n <td data-label=\"Last Updated\">{{page.updated_at | formattedDate}}</td>\n <td class=\"edit-column\">\n <ng-container *ngTemplateOutlet=\"editButtonTemplate; context: {page: page}\"></ng-container>\n </td>\n </tr>\n </tbody>\n</table>\n","import {ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef} from '@angular/core';\nimport {CustomPage} from '../../../core/types/models/CustomPage';\nimport {Settings} from '../../../core/config/settings.service';\n\n@Component({\n selector: 'custom-page-table',\n templateUrl: './custom-page-table.component.html',\n styleUrls: ['./custom-page-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CustomPageTableComponent {\n @Input() pages: CustomPage[] = [];\n @Input() showOwnerColumn = false;\n @Input() showTypeColumn = false;\n @ContentChild('editButton') editButtonTemplate: TemplateRef<CustomPage>;\n\n constructor(private settings: Settings) {}\n\n public getPageUrl(page: CustomPage): string {\n return this.settings.getBaseUrl() + 'pages/' + page.id + '/' + page.slug;\n }\n\n public viewName(name: string) {\n return name.replace(/_/g, ' ');\n }\n}\n","<div class=\"datatable responsive-table\">\r\n <datatable-header pluralResourceName=\"custom pages\">\r\n <a routerLink=\"new\" mat-raised-button color=\"accent\" *ngIf=\"currentUser.hasPermission('custom_pages.create')\" leftContent trans>Add</a>\r\n <button mat-raised-button color=\"accent\" [matTooltip]=\"'Delete selected' | trans\" (click)=\"maybeDeleteSelectedPages()\" rightContent trans>Delete Selected</button>\r\n </datatable-header>\r\n <custom-page-table [showOwnerColumn]=\"showUserColumn()\" [showTypeColumn]=\"!endpoint\" [pages]=\"datatable.data$ | async\">\r\n <ng-template #editButton let-page=\"page\">\r\n <a [routerLink]=\"[page.id, 'edit']\" mat-icon-button *ngIf=\"currentUser.hasPermission('custom_pages.update')\" [matTooltip]=\"'Edit page' | trans\">\r\n <mat-icon svgIcon=\"edit\"></mat-icon>\r\n </a>\r\n </ng-template>\r\n </custom-page-table>\r\n <no-results-message svgImage=\"custom-page.svg\" *ngIf=\"datatable.paginator.noResults$ | async\">\r\n <span primary-text trans>No pages have been created yet</span>\r\n </no-results-message>\r\n <datatable-footer></datatable-footer>\r\n</div>\r\n\r\n\r\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\r\nimport {CustomPage} from '../../core/types/models/CustomPage';\r\nimport {Pages} from '../shared/pages.service';\r\nimport {CurrentUser} from '../../auth/current-user';\r\nimport {ActivatedRoute, Router} from '@angular/router';\r\nimport {Toast} from '../../core/ui/toast.service';\r\nimport {BackendErrorResponse} from '../../core/types/backend-error-response';\r\nimport {HttpErrors} from '../../core/http/errors/http-errors.enum';\r\nimport {DatatableService} from '../../datatable/datatable.service';\r\nimport {Settings} from '../../core/config/settings.service';\r\nimport {Observable} from 'rxjs';\r\n\r\n@Component({\r\n selector: 'custom-pages-index',\r\n templateUrl: './custom-pages-index.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [DatatableService],\r\n})\r\nexport class CustomPagesIndexComponent implements OnInit {\r\n public endpoint = this.route.snapshot.data.endpoint;\r\n public pages$ = this.datatable.data$ as Observable<CustomPage[]>;\r\n constructor(\r\n public settings: Settings,\r\n public datatable: DatatableService<CustomPage>,\r\n public currentUser: CurrentUser,\r\n protected customPages: Pages,\r\n protected toast: Toast,\r\n protected router: Router,\r\n protected route: ActivatedRoute,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.datatable.init({\r\n uri: this.endpoint || Pages.BASE_URI,\r\n staticParams: {with: ['user']}\r\n });\r\n }\r\n\r\n public maybeDeleteSelectedPages() {\r\n this.datatable.confirmResourceDeletion('tracking pixels')\r\n .subscribe(() => {\r\n this.customPages.delete(this.datatable.selectedRows$.value).subscribe(() => {\r\n this.datatable.reset();\r\n this.toast.open('Pages deleted');\r\n }, (errResponse: BackendErrorResponse) => {\r\n this.toast.open(errResponse.message || HttpErrors.Default);\r\n });\r\n });\r\n }\r\n\r\n public showUserColumn(): boolean {\r\n return this.router.url.indexOf('admin') > -1;\r\n }\r\n}\r\n","import {Injectable, NgZone} from '@angular/core';\r\nimport {Settings} from '../../core/config/settings.service';\r\nimport {LazyLoaderService} from '../../core/utils/lazy-loader.service';\r\nimport {BreakpointsService} from '../../core/ui/breakpoints.service';\r\nimport {Editor, EditorManager} from 'tinymce';\r\nimport {Translations} from '../../core/translations/translations.service';\r\n\r\nconst EDITOR_TOOLBAR_HEIGHT = 74;\r\n\r\ndeclare const tinymce: EditorManager;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TinymceTextEditor {\r\n private bootstrapPromise: Promise<Editor> | boolean;\r\n private bootstrapPromiseResolve: any;\r\n private config: { [key: string]: any };\r\n public tinymceInstance: Editor|any;\r\n\r\n constructor(\r\n private settings: Settings,\r\n private zone: NgZone,\r\n private lazyLoader: LazyLoaderService,\r\n private breakpoints: BreakpointsService,\r\n private i18n: Translations,\r\n ) {\r\n this.makeBootstrapPromise();\r\n }\r\n\r\n public reset() {\r\n if (!this.editorIsReady()) return;\r\n this.tinymceInstance.setContent('');\r\n this.tinymceInstance.undoManager.clear();\r\n }\r\n\r\n public focus() {\r\n this.waitForEditor().then(() => {\r\n this.tinymceInstance.focus(false);\r\n });\r\n }\r\n\r\n public hasUndo(): boolean {\r\n return this.editorIsReady() && this.tinymceInstance.undoManager.hasUndo();\r\n }\r\n\r\n public hasRedo(): boolean {\r\n return this.editorIsReady() && this.tinymceInstance.undoManager.hasRedo();\r\n }\r\n\r\n /**\r\n * Queries the current state for specified tinymce command.\r\n * For example if the current selection is \"bold\".\r\n */\r\n public queryCommandState(name: string): boolean | number {\r\n return this.editorIsReady() && this.tinymceInstance.queryCommandState(name);\r\n }\r\n\r\n public execCommand(name: string, value: string | number = null) {\r\n this.waitForEditor().then(() => {\r\n this.zone.run(() => {\r\n this.tinymceInstance.execCommand(name, false, value);\r\n });\r\n });\r\n }\r\n\r\n public getContents(params?: Object): string {\r\n if (!this.editorIsReady()) return '';\r\n return this.tinymceInstance.getContent(params);\r\n }\r\n\r\n public setContents(contents: string) {\r\n this.waitForEditor().then(() => {\r\n if (!this.tinymceInstance.undoManager) return;\r\n\r\n this.tinymceInstance.undoManager.transact(() => {\r\n this.tinymceInstance.setContent(contents);\r\n });\r\n\r\n this.tinymceInstance.selection.setCursorLocation();\r\n this.tinymceInstance.nodeChanged();\r\n this.tinymceInstance.execCommand('mceResize');\r\n });\r\n }\r\n\r\n /**\r\n * Insert specified contents at the end of tinymce.\r\n */\r\n public insertContents(contents) {\r\n this.waitForEditor().then(() => {\r\n this.tinymceInstance.execCommand('mceInsertContent', false, contents);\r\n setTimeout(() => this.tinymceInstance.selection.collapse());\r\n });\r\n }\r\n\r\n public insertImage(url: string) {\r\n this.waitForEditor().then(() => {\r\n this.insertContents('<img src=\"' + url + '\"/>');\r\n setTimeout(() => this.execCommand('mceAutoResize'), 500);\r\n });\r\n }\r\n\r\n public waitForEditor(): Promise<Editor> {\r\n // editor already bootstrapped\r\n if (this.tinymceInstance) {\r\n return new Promise(resolve => resolve(this.tinymceInstance));\r\n }\r\n // editor is still bootstrapping\r\n if (this.bootstrapPromise) {\r\n return this.bootstrapPromise as Promise<Editor>;\r\n }\r\n }\r\n\r\n public setConfig(config: object) {\r\n this.config = config;\r\n this.loadTinymce().then(() => {\r\n this.initTinymce();\r\n });\r\n }\r\n\r\n private editorIsReady(): boolean {\r\n return !this.bootstrapPromise && !!this.tinymceInstance && !!this.tinymceInstance.undoManager;\r\n }\r\n\r\n private loadTinymce(): Promise<any> {\r\n return this.lazyLoader.loadAsset('js/tinymce/tinymce.min.js', {type: 'js'});\r\n }\r\n\r\n private initTinymce() {\r\n const config: any = {\r\n target: this.config.textAreaEl.nativeElement,\r\n plugins: ['link', 'codesample', 'paste', 'autoresize'],\r\n branding: false,\r\n browser_spellcheck: true,\r\n max_height: this.config.maxHeight,\r\n min_height: this.config.minHeight,\r\n autoresize_on_init: false,\r\n paste_as_text: true,\r\n elementpath: false,\r\n statusbar: false,\r\n entity_encoding: 'raw',\r\n menubar: false,\r\n convert_urls: false,\r\n forced_root_block: false,\r\n document_base_url : document.baseURI,\r\n element_format: 'html',\r\n body_class: 'editor-body',\r\n content_style: `html {font-size: 62.5%;}\r\n.editor-body {font-size: 1.4rem;font-family: \"Roboto\", \"Helvetica Neue\", sans-serif;color: rgba(0, 0, 0, .87);}\r\nimg {max-width: 100%}\r\ncode[class*=language-], pre[class*=language-] {font-size: inherit;} .mce-preview-object {border: none;}`,\r\n content_css: ['https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic'],\r\n default_link_target: '_blank',\r\n link_assume_external_targets: true,\r\n target_list: false,\r\n link_title: false,\r\n image_dimensions: false,\r\n image_description: false,\r\n setup: editor => {\r\n this.tinymceInstance = editor;\r\n editor.on('change', () => this.config.onChange.emit(editor.getContent()));\r\n\r\n editor.on('click', () => {\r\n // need to run angular zone on editor (iframe) click\r\n // so custom editor buttons are highlighted properly\r\n this.zone.run(() => {\r\n });\r\n });\r\n\r\n editor.shortcuts.add('ctrl+13', 'desc', () => {\r\n this.zone.run(() => {\r\n this.config.onChange.emit(editor.getContent());\r\n this.config.onCtrlEnter.emit();\r\n });\r\n });\r\n },\r\n init_instance_callback: () => {\r\n this.bootstrapPromise = false;\r\n this.bootstrapPromiseResolve(this.tinymceInstance);\r\n }\r\n };\r\n\r\n // need to show toolbar on mobile, otherwise tinymce will error out\r\n if (!this.breakpoints.isMobile$.value) {\r\n config.toolbar = false;\r\n }\r\n\r\n if (this.config['showAdvancedControls']) {\r\n config.plugins = config.plugins.concat(['media', 'hr', 'visualblocks', 'visualchars', 'wordcount']);\r\n config.forced_root_block = 'p';\r\n config.statusbar = true;\r\n config.autoresize_on_init = true;\r\n config.extended_valid_elements = 'svg[*],use[*],iframe[src|frameborder|width|height|allow=*|allowfullscreen],script[src]';\r\n config.elementpath = true;\r\n config.content_css.push(this.settings.getAssetUrl() + 'css/advanced-editor-styles.css');\r\n config.target_list = [\r\n {title: this.i18n.t('Current window'), value: ''},\r\n {title: this.i18n.t('New Window'), value: '_blank'},\r\n ];\r\n }\r\n\r\n if (this.config['minHeight'] === 'auto') {\r\n const height = this.config.editorEl.nativeElement.parentElement.offsetHeight - EDITOR_TOOLBAR_HEIGHT - 4;\r\n config.min_height = height;\r\n config.max_height = height;\r\n }\r\n\r\n tinymce.init(config);\r\n }\r\n\r\n public destroyEditor() {\r\n // catch error that sometimes occurs on EDGE when\r\n // trying to destroy editor that is no longer in the DOM\r\n try {\r\n if (this.tinymceInstance) {\r\n this.tinymceInstance.remove();\r\n }\r\n\r\n this.tinymceInstance = null;\r\n this.makeBootstrapPromise();\r\n } catch (e) {\r\n //\r\n }\r\n }\r\n\r\n /**\r\n * Create a tinymce bootstrap promise.\r\n */\r\n private makeBootstrapPromise() {\r\n this.bootstrapPromise = new Promise(resolve => this.bootstrapPromiseResolve = resolve);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { UploadValidator } from '../../uploads/validation/upload-validator';\r\nimport { FileSizeValidation } from '../../uploads/validation/validations/file-size-validation';\r\nimport { convertToBytes } from '../../core/utils/convertToBytes';\r\nimport { FileTypeValidation } from '../../uploads/validation/validations/file-type-validation';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TextEditorImageValidator extends UploadValidator {\r\n protected readonly DEFAULT_MAX_SIZE_MB = 3;\r\n\r\n protected initValidations() {\r\n const validations = [\r\n new FileSizeValidation(\r\n {maxSize: convertToBytes(this.DEFAULT_MAX_SIZE_MB, 'MB')},\r\n this.i18n\r\n ),\r\n new FileTypeValidation({types: ['image']}, this.i18n),\r\n ];\r\n\r\n this.validations.push(...validations);\r\n }\r\n}\r\n","<div class=\"editor-header\">\r\n <div class=\"toolbar-row\">\r\n <div class=\"header-actions\" *ngIf=\"inlineUploadPrefix && currentUser.hasPermission('files.create') && onFileUpload.observers.length\">\r\n <button class=\"no-style editor-button\" type=\"button\" [matTooltip]=\"'Add Attachment' | trans\"\r\n (click)=\"openFileUploadDialog()\">\r\n <mat-icon svgIcon=\"attachment\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"header-actions\" *ngIf=\"!basic\">\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('codesample')\"\r\n [matTooltip]=\"'Insert Code Sample' | trans\">\r\n <mat-icon svgIcon=\"code\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"header-actions\">\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('undo')\"\r\n [class.disabled]=\"!hasUndo()\" [matTooltip]=\"'Undo' | trans\">\r\n <mat-icon svgIcon=\"undo\"></mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('redo')\"\r\n [class.disabled]=\"!hasRedo()\" [matTooltip]=\"'Redo' | trans\">\r\n <mat-icon svgIcon=\"redo\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"header-actions\">\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('bold')\"\r\n [class.active]=\"queryCommandState('bold')\" [matTooltip]=\"'Bold' | trans\">\r\n <mat-icon svgIcon=\"format-bold\"></mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('italic')\"\r\n [class.active]=\"queryCommandState('italic')\" [matTooltip]=\"'Italic' | trans\">\r\n <mat-icon svgIcon=\"format-italic\"></mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('underline')\"\r\n [class.active]=\"queryCommandState('underline')\" [matTooltip]=\"'Underline' | trans\">\r\n <mat-icon svgIcon=\"format-underlined\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"header-actions\">\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('insertunorderedlist')\"\r\n [class.active]=\"queryCommandState('unorderedlist')\" [matTooltip]=\"'Unordered List' | trans\">\r\n <mat-icon svgIcon=\"format-list-bulleted\"></mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('insertorderedlist')\"\r\n [class.active]=\"queryCommandState('orderedlist')\" [matTooltip]=\"'Ordered List' | trans\">\r\n <mat-icon svgIcon=\"format-list-numbered\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"header-actions\" *ngIf=\"!basic\">\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('mceLink')\"\r\n [class.active]=\"queryCommandState('link')\" [matTooltip]=\"'Insert Link' | trans\">\r\n <mat-icon svgIcon=\"link\"></mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"no-style editor-button image-modal-button\" (click)=\"openInsertImageModal()\"\r\n *ngIf=\"currentUser.hasPermission('files.create')\" [matTooltip]=\"'Insert Image' | trans\">\r\n <mat-icon svgIcon=\"image\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[customButtons]\"></ng-content>\r\n\r\n <div class=\"header-actions last\">\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('removeformat')\"\r\n [matTooltip]=\"'Remove Formatting' | trans\">\r\n <mat-icon svgIcon=\"format-clear\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[header]\"></ng-content>\r\n </div>\r\n <div class=\"toolbar-row\" *ngIf=\"showAdvancedControls\">\r\n <div class=\"header-actions\">\r\n <button type=\"button\" [matMenuTriggerFor]=\"insertMenu\"\r\n class=\"no-style editor-button text-button insert-button\">\r\n <span trans>Insert</span>\r\n <mat-icon svgIcon=\"arrow-drop-down\" class=\"caret\"></mat-icon>\r\n </button>\r\n <mat-menu #insertMenu>\r\n <div mat-menu-item (click)=\"execCommand('InsertHorizontalRule')\">\r\n <mat-icon svgIcon=\"remove\"></mat-icon>\r\n <span trans>Horizontal Line</span>\r\n </div>\r\n <div mat-menu-item (click)=\"execCommand('mceLink')\">\r\n <mat-icon svgIcon=\"link\"></mat-icon>\r\n <span trans>Link</span>\r\n </div>\r\n <div mat-menu-item (click)=\"execCommand('mceMedia')\">\r\n <mat-icon svgIcon=\"videocam\"></mat-icon>\r\n <span trans>Media</span>\r\n </div>\r\n <div mat-menu-item (click)=\"insertInfoContainer('important')\" trans>\r\n <mat-icon svgIcon=\"star\"></mat-icon>\r\n <span trans>Important</span>\r\n </div>\r\n <div mat-menu-item (click)=\"insertInfoContainer('warning')\" trans>\r\n <mat-icon svgIcon=\"warning\"></mat-icon>\r\n <span trans>Warning</span>\r\n </div>\r\n <div mat-menu-item (click)=\"insertInfoContainer('note')\" trans>\r\n <mat-icon svgIcon=\"note\"></mat-icon>\r\n <span trans>Note</span>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button type=\"button\" [matMenuTriggerFor]=\"formatMenu\" class=\"no-style editor-button text-button format-button\">\r\n <span trans>Format</span>\r\n <mat-icon svgIcon=\"arrow-drop-down\" class=\"caret\"></mat-icon>\r\n </button>\r\n <mat-menu #formatMenu class=\"format-menu menu-with-alt-text\">\r\n <div mat-menu-item (click)=\"execCommand('FormatBlock', 'h1')\">\r\n <div class=\"text\" trans>Heading 1</div>\r\n <div class=\"alt-text\">Ctrl+Alt+1</div>\r\n </div>\r\n <div mat-menu-item (click)=\"execCommand('FormatBlock', 'h2')\">\r\n <div class=\"text\" trans>Heading 2</div>\r\n <div class=\"alt-text\">Ctrl+Alt+2</div>\r\n </div>\r\n <div mat-menu-item (click)=\"execCommand('FormatBlock', 'h3')\">\r\n <div class=\"text\" trans>Heading 3</div>\r\n <div class=\"alt-text\">Ctrl+Alt+3</div>\r\n </div>\r\n <div mat-menu-item (click)=\"execCommand('strikethrough')\">\r\n <div class=\"text\" trans>Strikethrough</div>\r\n <div class=\"alt-text\">Alt+Shift+5</div>\r\n </div>\r\n <div mat-menu-item (click)=\"execCommand('superscript')\">\r\n <div class=\"text\" trans>Superscript</div>\r\n <div class=\"alt-text\">Ctrl+.</div>\r\n </div>\r\n <div mat-menu-item (click)=\"execCommand('subscript')\">\r\n <div class=\"text\" trans>Subscript</div>\r\n <div class=\"alt-text\">Ctrl+,</div>\r\n </div>\r\n <div mat-menu-item (click)=\"execCommand('mceBlockQuote')\">\r\n <div class=\"text\" trans>Blockquote</div>\r\n <div class=\"alt-text\">Ctrl+Alt+B</div>\r\n </div>\r\n <div mat-menu-item (click)=\"execCommand('FormatBlock', 'p')\">\r\n <div class=\"text\" trans>Paragraph</div>\r\n <div class=\"alt-text\">Ctrl+Alt+0</div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button type=\"button\" [matMenuTriggerFor]=\"colorMenu\" class=\"no-style editor-button text-button color-button\" #colorPickerOrigin>\r\n <span trans>Color</span>\r\n <mat-icon svgIcon=\"arrow-drop-down\" class=\"caret\"></mat-icon>\r\n </button>\r\n <mat-menu #colorMenu class=\"color-dropdown\">\r\n <div mat-menu-item class=\"text-color-item\" (click)=\"showColorPicker('ForeColor', colorPickerOrigin)\">\r\n <mat-icon svgIcon=\"format-color-text\"></mat-icon>\r\n <span trans>Text Color</span>\r\n </div>\r\n <div mat-menu-item class=\"bg-color-item\" (click)=\"showColorPicker('HiliteColor', colorPickerOrigin)\">\r\n <mat-icon svgIcon=\"format-color-fill\"></mat-icon>\r\n <span trans>Background Color</span>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('justifyLeft')\"\r\n [class.active]=\"queryCommandState('justifyLeft')\" [matTooltip]=\"'Align Left' | trans\">\r\n <mat-icon svgIcon=\"format-align-left\"></mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('justifyCenter')\"\r\n [class.active]=\"queryCommandState('justifyCenter')\" [matTooltip]=\"'Center' | trans\">\r\n <mat-icon svgIcon=\"format-align-center\"></mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('justifyRight')\"\r\n [class.active]=\"queryCommandState('justifyRight')\" [matTooltip]=\"'Align Right' | trans\">\r\n <mat-icon svgIcon=\"format-align-right\"></mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('Outdent')\" [matTooltip]=\"'Decrease Indent' | trans\">\r\n <mat-icon svgIcon=\"format-indent-decrease\"></mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"no-style editor-button\" (click)=\"execCommand('Indent')\" [matTooltip]=\"'Increase Indent' | trans\">\r\n <mat-icon svgIcon=\"format-indent-increase\"></mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"header-actions editor-toggle-buttons\">\r\n <button type=\"button\" class=\"no-style editor-button visual-mode-button\"\r\n [class.active]=\"activeEditor === 'visual'\" (click)=\"showVisualEditor()\" trans>Visual\r\n </button>\r\n <button type=\"button\" class=\"no-style editor-button source-mode-button\"\r\n [class.active]=\"activeEditor === 'source'\" (click)=\"showSourceEditor()\" trans>Source\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<textarea class=\"source-textarea\" #sourceArea rows=\"8\" [style.min-height]=\"minHeight\" style=\"display: none\" [formControl]=\"sourceAreaControl\" (blur)=\"setContents(sourceAreaControl.value)\"></textarea>\r\n<textarea class=\"visual-textarea\" #visualArea rows=\"8\" [style.min-height]=\"minHeight\"></textarea>\r\n\r\n<ng-content select=\"[footer]\"></ng-content>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n Renderer2,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {TinymceTextEditor} from './editors/tinymce-text-editor.service';\r\nimport {Settings} from '../core/config/settings.service';\r\nimport {OverlayPanel} from '../core/ui/overlay-panel/overlay-panel.service';\r\nimport {openUploadWindow} from '../uploads/utils/open-upload-window';\r\nimport {UploadQueueService} from '../uploads/upload-queue/upload-queue.service';\r\nimport {TextEditorImageValidator} from './validation/text-editor-image-validator';\r\nimport {UploadInputTypes} from '../uploads/upload-input-config';\r\nimport {CurrentUser} from '../auth/current-user';\r\nimport {BOTTOM_POSITION} from '../core/ui/overlay-panel/positions/bottom-position';\r\nimport {ucFirst} from '../core/utils/uc-first';\r\nimport {FormControl} from '@angular/forms';\r\nimport {debounceTime} from 'rxjs/operators';\r\nimport {UploadUri} from '@common/uploads/types/upload-uri.enum';\r\nimport {UploadApiConfig} from '@common/uploads/types/upload-api-config';\r\nimport {UploadedFile} from '@common/uploads/uploaded-file';\r\n\r\nexport interface LinkAttrs {\r\n text: string;\r\n href: string;\r\n target?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'text-editor',\r\n templateUrl: './text-editor.component.html',\r\n styleUrls: ['./text-editor.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n UploadQueueService,\r\n TinymceTextEditor,\r\n ]\r\n})\r\nexport class TextEditorComponent implements OnDestroy, AfterViewInit {\r\n @ViewChild('visualArea', { static: true }) visualTextArea: ElementRef;\r\n @ViewChild('sourceArea', { static: true }) sourceTextArea: ElementRef;\r\n\r\n public sourceAreaControl = new FormControl();\r\n public activeEditor = 'visual';\r\n\r\n @Input() showAdvancedControls = false;\r\n @Input() basic = false;\r\n @Input() minHeight: number|string = 183;\r\n @Input() maxHeight = 530;\r\n @Input() inlineUploadPrefix: string;\r\n\r\n @Output() onChange: EventEmitter<string> = new EventEmitter();\r\n @Output() onCtrlEnter = new EventEmitter();\r\n @Output() onFileUpload = new EventEmitter<UploadedFile[]>();\r\n\r\n constructor(\r\n public editor: TinymceTextEditor,\r\n public currentUser: CurrentUser,\r\n private uploadQueue: UploadQueueService,\r\n private settings: Settings,\r\n private renderer: Renderer2,\r\n public el: ElementRef,\r\n private overlayPanel: OverlayPanel,\r\n private imageValidator: TextEditorImageValidator,\r\n ) {}\r\n\r\n ngAfterViewInit() {\r\n this.bootTextEditor();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroyEditor();\r\n }\r\n\r\n public reset() {\r\n this.editor.reset();\r\n }\r\n\r\n public focus() {\r\n this.editor.focus();\r\n }\r\n\r\n public hasUndo(): boolean {\r\n return this.editor.hasUndo();\r\n }\r\n\r\n public hasRedo(): boolean {\r\n return this.editor.hasRedo();\r\n }\r\n\r\n /**\r\n * Queries the current state for specified text editor command.\r\n * For example if the current selection is \"bold\".\r\n */\r\n public queryCommandState(name: string): boolean|number {\r\n return this.editor.queryCommandState(name);\r\n }\r\n\r\n public execCommand(name: string, value: string|number = null) {\r\n this.editor.execCommand(name, value);\r\n }\r\n\r\n /**\r\n * Insert information container of specified type into the editor.\r\n */\r\n public insertInfoContainer(type: string) {\r\n // TODO: refactor into shortcodes maybe if need more of similar buttons in the future\r\n // TODO: translate once angular translation service is available\r\n this.insertContents(\r\n `<div class=\"widget widget-${type}\"><div class=\"title\">${ucFirst(type)}:</div><br></div><br>`\r\n );\r\n }\r\n\r\n public async showColorPicker(command: string, origin: HTMLElement) {\r\n const { BeColorPickerModule } = await import('@common/core/ui/color-picker/be-color-picker.module');\r\n this.overlayPanel.open(BeColorPickerModule.components.panel, {origin: new ElementRef(origin), position: BOTTOM_POSITION})\r\n .valueChanged().pipe(debounceTime(50)).subscribe(color => {\r\n this.execCommand(command, color);\r\n });\r\n }\r\n\r\n public showVisualEditor() {\r\n if ( ! this.editor.tinymceInstance.contentAreaContainer || this.activeEditor === 'visual') return;\r\n\r\n this.activeEditor = 'visual';\r\n\r\n this.renderer.setStyle(this.editor.tinymceInstance.contentAreaContainer, 'display', 'block');\r\n this.renderer.setStyle(this.sourceTextArea.nativeElement, 'display', 'none');\r\n\r\n this.editor.focus();\r\n }\r\n\r\n public showSourceEditor() {\r\n if ( ! this.editor.tinymceInstance.contentAreaContainer || this.activeEditor === 'source') return;\r\n\r\n this.activeEditor = 'source';\r\n\r\n this.renderer.setStyle(this.sourceTextArea.nativeElement, 'height', this.editor.tinymceInstance.contentAreaContainer.offsetHeight + 'px');\r\n this.renderer.setStyle(this.sourceTextArea.nativeElement, 'display', 'block');\r\n this.renderer.setStyle(this.editor.tinymceInstance.contentAreaContainer, 'display', 'none');\r\n\r\n this.sourceAreaControl.setValue(this.editor.getContents({source_view: true}));\r\n }\r\n\r\n public openFileUploadDialog() {\r\n openUploadWindow({multiple: true}).then(fileList => {\r\n this.onFileUpload.emit(fileList);\r\n });\r\n }\r\n\r\n public openInsertImageModal() {\r\n const params: UploadApiConfig = {\r\n uri: UploadUri.Image,\r\n validator: this.imageValidator,\r\n httpParams: {diskPrefix: this.inlineUploadPrefix}\r\n };\r\n openUploadWindow({types: [UploadInputTypes.image]}).then(files => {\r\n this.uploadQueue.start(files, params).subscribe(response => {\r\n this.insertImage(response.fileEntry.url);\r\n });\r\n });\r\n }\r\n\r\n public getContents(): string {\r\n return this.editor.getContents();\r\n }\r\n\r\n public setContents(contents: string) {\r\n this.editor.setContents(contents);\r\n }\r\n\r\n public insertContents(contents) {\r\n this.editor.insertContents(contents);\r\n }\r\n\r\n public insertImage(url: string) {\r\n this.editor.insertImage(url);\r\n }\r\n\r\n public insertLink(attrs: LinkAttrs) {\r\n const target = attrs.target || 'self';\r\n this.insertContents(`<a href=\"${attrs.href}\" target=\"${target}\">${attrs.text}</a>`);\r\n }\r\n\r\n public destroyEditor() {\r\n this.editor.destroyEditor();\r\n }\r\n\r\n private bootTextEditor() {\r\n this.editor.setConfig({\r\n textAreaEl: this.visualTextArea,\r\n editorEl: this.el,\r\n minHeight: this.minHeight,\r\n maxHeight: this.maxHeight,\r\n onChange: this.onChange,\r\n onCtrlEnter: this.onCtrlEnter,\r\n showAdvancedControls: this.showAdvancedControls,\r\n });\r\n }\r\n}\r\n","<mat-icon svgIcon=\"link\" class=\"link-icon\"></mat-icon>\r\n<ng-container *ngIf=\"editing$ | async; else editButton\">\r\n <div class=\"nowrap\">{{baseUri + getPrefix()}}</div>\r\n <div class=\"input-container\">\r\n <input type=\"text\" [formControl]=\"slugControl\">\r\n </div>\r\n <button type=\"button\" mat-flat-button color=\"gray\" class=\"action-button\" (click)=\"save()\" trans>Save</button>\r\n</ng-container>\r\n\r\n<ng-template #editButton>\r\n <ng-container *ngIf=\"baseUri + getPrefix() + (slug$ | async) as fullUrl\">\r\n <a class=\"nowrap\" [href]=\"fullUrl\" target=\"_blank\" [title]=\"fullUrl\">{{fullUrl}}</a>\r\n </ng-container>\r\n <button type=\"button\" mat-flat-button color=\"gray\" class=\"action-button\" (click)=\"startEditing()\" trans>Edit</button>\r\n</ng-template>\r\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BehaviorSubject} from 'rxjs';\nimport {Settings} from '@common/core/config/settings.service';\n\n@Component({\n selector: 'slug-control',\n templateUrl: './slug-control.component.html',\n styleUrls: ['./slug-control.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: SlugControlComponent,\n multi: true,\n }]\n})\nexport class SlugControlComponent implements ControlValueAccessor {\n private propagateChange: Function;\n public slug$ = new BehaviorSubject<string>('');\n public editing$ = new BehaviorSubject<boolean>(false);\n public slugControl = new FormControl();\n public baseUri: string;\n @Input() prefix: string;\n\n constructor(public settings: Settings) {\n this.baseUri = this.settings.getBaseUrl();\n }\n\n public writeValue(value: string) {\n this.slug$.next(value);\n this.slugControl.setValue(value);\n }\n\n public registerOnChange(fn: Function) {\n this.propagateChange = fn;\n }\n\n public registerOnTouched() {}\n\n public save() {\n this.slug$.next(this.slugControl.value);\n this.propagateChange(this.slug$.value);\n this.editing$.next(false);\n }\n\n public startEditing() {\n this.editing$.next(true);\n }\n\n public getPrefix() {\n return this.prefix ? this.prefix + '/' : '';\n }\n}\n","<ng-container *ngIf=\"errors$ | async as errors\" [formGroup]=\"form\">\r\n <div class=\"many-inputs input-header\">\r\n <div class=\"input-container\">\r\n <label for=\"page-title\" trans>Page Title</label>\r\n <input type=\"text\" id=\"page-title\" formControlName=\"title\">\r\n <div class=\"error\" *ngIf=\"errors.title\">{{errors.title}}</div>\r\n </div>\r\n\r\n <div class=\"input-container slug-input-container\" *ngIf=\"!hideSlug\">\r\n <slug-control [prefix]=\"slugPrefix()\" formControlName=\"slug\"></slug-control>\r\n <div class=\"error\" *ngIf=\"errors.slug\">{{errors.slug}}</div>\r\n </div>\r\n\r\n <div class=\"setting-toggle-container\">\r\n <mat-slide-toggle id=\"crupdate_custom_page.hideNav\" formControlName=\"hide_nav\" trans>Hide Navbar</mat-slide-toggle>\r\n <p trans>Whether default site navbar should be hidden for this page.</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <button mat-raised-button color=\"accent\" (click)=\"crupdatePage()\">\r\n <span *ngIf=\"page\" trans>Update</span>\r\n <span *ngIf=\"!page\" trans>Create</span>\r\n </button>\r\n <a mat-button [routerLink]=\"backRoute()\" trans>Cancel</a>\r\n </div>\r\n\r\n <div class=\"errors\">\r\n <div class=\"error\" *ngIf=\"errors.body\">{{errors.body}}</div>\r\n </div>\r\n\r\n <div class=\"editor-container\">\r\n <text-editor inlineUploadPrefix=\"page_media\" class=\"text-editor\" minHeight=\"auto\" (onChange)=\"setBody($event)\" [showAdvancedControls]=\"true\"></text-editor>\r\n </div>\r\n\r\n <loading-indicator [isVisible]=\"loading$ | async\" class=\"overlay\"></loading-indicator>\r\n</ng-container>\r\n","import {ChangeDetectionStrategy, Component, OnInit, ViewChild} from '@angular/core';\r\nimport {ActivatedRoute, Router} from '@angular/router';\r\nimport {delay, finalize} from 'rxjs/operators';\r\nimport {TextEditorComponent} from '../../../text-editor/text-editor.component';\r\nimport {CustomPage} from '../../../core/types/models/CustomPage';\r\nimport {Pages} from '../../shared/pages.service';\r\nimport {Toast} from '../../../core/ui/toast.service';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {FormBuilder} from '@angular/forms';\r\nimport {bindSlugTo} from '../../../shared/form-controls/slug-control/bind-slug-to';\r\nimport {BackendErrorResponse} from '../../../core/types/backend-error-response';\r\n\r\n@Component({\r\n selector: 'crupdate-page',\r\n templateUrl: './crupdate-custom-page.component.html',\r\n styleUrls: ['./crupdate-custom-page.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CrupdateCustomPageComponent implements OnInit {\r\n @ViewChild(TextEditorComponent) textEditor: TextEditorComponent;\r\n public hideSlug: boolean = this.route.snapshot.data.hideSlug;\r\n public endpoint: string = this.route.snapshot.data.endpoint;\r\n public loading$ = new BehaviorSubject<boolean>(false);\r\n public updating$ = new BehaviorSubject<boolean>(false);\r\n public page: CustomPage;\r\n public form = this.fb.group({\r\n title: [''],\r\n slug: [''],\r\n body: [''],\r\n type: [''],\r\n hide_nav: [false],\r\n });\r\n public errors$ = new BehaviorSubject<{\r\n body?: string,\r\n slug?: string,\r\n title?: string,\r\n }>({});\r\n\r\n constructor(\r\n private pages: Pages,\r\n private route: ActivatedRoute,\r\n private toast: Toast,\r\n private router: Router,\r\n private fb: FormBuilder,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.route.params.subscribe(params => {\r\n this.getPage(params.id);\r\n });\r\n\r\n if ( ! this.route.snapshot.data.hideSlug) {\r\n bindSlugTo(this.form.get('title'));\r\n }\r\n }\r\n\r\n public crupdatePage() {\r\n this.loading$.next(true);\r\n const request = this.updating$.value ?\r\n this.pages.update(this.page.id, this.getPayload(), this.endpoint) :\r\n this.pages.create(this.getPayload(), this.endpoint);\r\n\r\n request.pipe(finalize(() => this.loading$.next(false)))\r\n .subscribe(() => {\r\n this.router.navigate(this.backRoute(), {relativeTo: this.route});\r\n this.toast.open(this.updating$.value ? 'Page updated' : 'Page created');\r\n }, (errResponse: BackendErrorResponse) => this.errors$.next(errResponse.errors));\r\n }\r\n\r\n public getPage(id: number) {\r\n if ( ! id) return;\r\n this.loading$.next(true);\r\n this.pages.get(id).pipe(delay(0)).subscribe(response => {\r\n this.updating$.next(true);\r\n this.page = response.page;\r\n this.form.patchValue(response.page);\r\n this.textEditor.setContents(response.page.body || '');\r\n this.loading$.next(false);\r\n });\r\n }\r\n\r\n private getPayload(): CustomPage {\r\n return {...this.form.value};\r\n }\r\n\r\n public setBody(content: string) {\r\n this.form.patchValue({body: content});\r\n }\r\n\r\n public backRoute() {\r\n return this.page ? ['../../'] : ['../'];\r\n }\r\n\r\n public slugPrefix() {\r\n return 'pages/' + (this.page ? this.page.id : '*');\r\n }\r\n}\r\n","import {RouterModule, Routes} from '@angular/router';\r\nimport {AdminComponent} from '@common/admin/admin.component';\r\nimport {AuthGuard} from '@common/guards/auth-guard.service';\r\nimport {CheckPermissionsGuard} from '@common/guards/check-permissions-guard.service';\r\nimport {SettingsComponent} from '@common/admin/settings/settings.component';\r\nimport {SettingsResolve} from '@common/admin/settings/settings-resolve.service';\r\nimport {NgModule} from '@angular/core';\r\nimport {APP_ADMIN_ROUTES, APP_SETTING_ROUTES} from '../../app/admin/app-admin-routes';\r\nimport {GeneralSettingsComponent} from '@common/admin/settings/general/general-settings.component';\r\nimport {AuthenticationSettingsComponent} from '@common/admin/settings/authentication/authentication-settings.component';\r\nimport {CacheSettingsComponent} from '@common/admin/settings/cache/cache-settings.component';\r\nimport {AnalyticsSettingsComponent} from '@common/admin/settings/analytics/analytics-settings.component';\r\nimport {LocalizationSettingsComponent} from '@common/admin/settings/localization/localization-settings.component';\r\nimport {MailSettingsComponent} from '@common/admin/settings/mail/mail-settings.component';\r\nimport {LoggingSettingsComponent} from '@common/admin/settings/logging/logging-settings.component';\r\nimport {QueueSettingsComponent} from '@common/admin/settings/queue/queue-settings.component';\r\nimport {BillingSettingsComponent} from '@common/admin/settings/billing/billing-settings.component';\r\nimport {UploadingSettingsComponent} from '@common/admin/settings/uploading/uploading-settings.component';\r\nimport {RecaptchaSettingsComponent} from '@common/admin/settings/recaptcha/recaptcha-settings.component';\r\nimport {UserIndexComponent} from '@common/admin/users/user-index.component';\r\nimport {RoleIndexComponent} from '@common/admin/roles/role-index.component';\r\nimport {LocalizationIndexComponent} from '@common/admin/localizations/localization-index.component';\r\nimport {FileEntryIndexComponent} from '@common/admin/file-entry-index/file-entry-index.component';\r\nimport {AdsPageComponent} from '@common/admin/ads-page/ads-page.component';\r\nimport {PlanIndexComponent} from '@common/admin/billing/plans/plan-index/plan-index.component';\r\nimport {BillingEnabledGuard} from '@common/shared/billing/guards/billing-enabled-guard.service';\r\nimport {SubscriptionIndexComponent} from '@common/admin/billing/subscriptions/subscription-index/subscription-index.component';\r\nimport {GdprSettingsComponent} from '@common/admin/settings/gdpr-settings/gdpr-settings.component';\r\nimport {TagIndexComponent} from '@common/admin/tag-index/tag-index.component';\r\nimport {CustomPagesIndexComponent} from '../pages/custom-pages-index/custom-pages-index.component';\r\nimport {CrupdateCustomPageComponent} from '../pages/custom-pages-index/crupdate-custom-page/crupdate-custom-page.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: AdminComponent,\r\n canActivate: [AuthGuard, CheckPermissionsGuard],\r\n canActivateChild: [AuthGuard, CheckPermissionsGuard],\r\n data: {permissions: ['admin.access']},\r\n children: [\r\n // ANALYTICS\r\n {\r\n path: '',\r\n redirectTo: 'analytics',\r\n pathMatch: 'full',\r\n },\r\n {\r\n path: 'analytics',\r\n loadChildren: () => import('src/app/admin/analytics/analytics.module').then(m => m.AnalyticsModule),\r\n canActivate: [AuthGuard],\r\n canActivateChild: [AuthGuard],\r\n data: {permissions: ['reports.view']}\r\n },\r\n\r\n // BASE ADMIN ROUTES\r\n {\r\n path: 'users',\r\n component: UserIndexComponent,\r\n data: {permissions: ['users.view']}\r\n },\r\n {\r\n path: 'roles',\r\n component: RoleIndexComponent,\r\n data: {permissions: ['roles.view']}\r\n },\r\n {\r\n path: 'translations',\r\n component: LocalizationIndexComponent,\r\n data: {permissions: ['localizations.view']}\r\n },\r\n {\r\n path: 'tags',\r\n component: TagIndexComponent,\r\n data: {permissions: ['tags.view']}\r\n },\r\n {\r\n path: 'files',\r\n component: FileEntryIndexComponent,\r\n data: {permissions: ['files.view']}\r\n },\r\n {\r\n path: 'ads',\r\n component: AdsPageComponent,\r\n data: {permissions: ['ads.update']}\r\n },\r\n\r\n // CUSTOM PAGES\r\n {\r\n path: 'custom-pages',\r\n component: CustomPagesIndexComponent,\r\n data: {permissions: ['custom_pages.view'], name: 'Custom Pages'}\r\n },\r\n {\r\n path: 'custom-pages/new',\r\n component: CrupdateCustomPageComponent,\r\n data: {permissions: ['custom_pages.create'], name: 'Add New Page'}\r\n },\r\n {\r\n path: 'custom-pages/:id/edit',\r\n component: CrupdateCustomPageComponent,\r\n data: {permissions: ['custom_pages.update'], name: 'Edit Page'}\r\n },\r\n\r\n // BILLING\r\n {\r\n path: 'plans',\r\n component: PlanIndexComponent,\r\n canActivate: [BillingEnabledGuard],\r\n data: {permissions: ['plans.view']}\r\n },\r\n\r\n {\r\n path: 'subscriptions',\r\n component: SubscriptionIndexComponent,\r\n canActivate: [BillingEnabledGuard],\r\n data: {permissions: ['subscriptions.view']}\r\n },\r\n\r\n // BASE ADMIN ROUTES SPECIFIC TO APP\r\n ...APP_ADMIN_ROUTES,\r\n\r\n // SETTINGS\r\n {\r\n path: 'settings',\r\n component: SettingsComponent,\r\n resolve: {settings: SettingsResolve},\r\n data: {permissions: ['settings.view']},\r\n children: [\r\n // TODO: implement guard for unsaved changes after this is fixed:\r\n // TODO: https://github.com/angular/angular/issues/11836\r\n {path: '', redirectTo: 'general', pathMatch: 'full'},\r\n {path: 'general', component: GeneralSettingsComponent, pathMatch: 'full'},\r\n {path: 'authentication', component: AuthenticationSettingsComponent},\r\n {path: 'cache', component: CacheSettingsComponent},\r\n {path: 'analytics', component: AnalyticsSettingsComponent},\r\n {path: 'localization', component: LocalizationSettingsComponent},\r\n {path: 'mail', component: MailSettingsComponent},\r\n {path: 'logging', component: LoggingSettingsComponent},\r\n {path: 'queue', component: QueueSettingsComponent},\r\n {path: 'billing', component: BillingSettingsComponent},\r\n {path: 'uploading', component: UploadingSettingsComponent},\r\n {path: 'recaptcha', component: RecaptchaSettingsComponent},\r\n {path: 'gdpr', component: GdprSettingsComponent},\r\n\r\n // SETTING ROUTES SPECIFIC TO APP\r\n ...APP_SETTING_ROUTES,\r\n ],\r\n },\r\n\r\n ]\r\n },\r\n\r\n // APPEARANCE\r\n {\r\n path: 'appearance',\r\n loadChildren: () => import('src/app/admin/appearance/app-appearance.module').then(m => m.AppAppearanceModule),\r\n canActivate: [AuthGuard],\r\n canActivateChild: [AuthGuard],\r\n data: {permissions: ['appearance.update']}\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class BaseAdminRoutingModule {\r\n}\r\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FindUserModalComponent} from './find-user-modal.component';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\nimport {MatIconModule} from '@angular/material/icon';\nimport {LoadingIndicatorModule} from '@common/core/ui/loading-indicator/loading-indicator.module';\nimport {ReactiveFormsModule} from '@angular/forms';\n\n@NgModule({\n declarations: [\n FindUserModalComponent,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslationsModule,\n LoadingIndicatorModule,\n\n // material\n MatIconModule,\n MatDialogModule,\n ]\n})\nexport class FindUserModalModule {\n}\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\r\nimport {UploadButtonDirective} from './directives/upload-button.directive';\r\nimport {UploadDropzoneDirective} from './directives/upload-dropzone.directive';\r\nimport {UploadProgressBarComponent} from './upload-progress-bar/upload-progress-bar.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n\r\n // material\r\n MatButtonModule,\r\n MatProgressBarModule,\r\n MatIconModule,\r\n ],\r\n declarations: [\r\n UploadDropzoneDirective,\r\n UploadButtonDirective,\r\n UploadProgressBarComponent,\r\n ],\r\n exports: [\r\n UploadDropzoneDirective,\r\n UploadButtonDirective,\r\n UploadProgressBarComponent,\r\n ],\r\n})\r\nexport class UploadsModule {\r\n}\r\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {RoleManagerComponent} from './role-manager.component';\nimport {TranslationsModule} from '../../../core/translations/translations.module';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatChipsModule} from '@angular/material/chips';\n\n\n@NgModule({\n declarations: [\n RoleManagerComponent,\n ],\n imports: [\n CommonModule,\n TranslationsModule,\n\n // material\n MatButtonModule,\n MatIconModule,\n MatChipsModule,\n ],\n exports: [\n RoleManagerComponent,\n ]\n})\nexport class RoleManagerModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SlugControlComponent} from './slug-control.component';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\n\n\n@NgModule({\n declarations: [SlugControlComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n TranslationsModule,\n MatIconModule,\n ],\n exports: [\n SlugControlComponent,\n ]\n})\nexport class SlugControlModule {\n}\n","import {NgModule} from '@angular/core';\r\nimport {ConfirmModalComponent} from './confirm-modal.component';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatDialogModule} from '@angular/material/dialog';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {CommonModule} from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n\r\n // material\r\n MatDialogModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n ],\r\n declarations: [\r\n ConfirmModalComponent\r\n ],\r\n exports: [\r\n ConfirmModalComponent,\r\n MatIconModule,\r\n ],\r\n})\r\nexport class ConfirmModalModule {\r\n}\r\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {UploadImageControlComponent} from './upload-image-control.component';\nimport {UploadsModule} from '@common/uploads/uploads.module';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport {ImageOrIconModule} from '@common/core/ui/image-or-icon/image-or-icon.module';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\nimport {MatMenuModule} from '@angular/material/menu';\n\n@NgModule({\n declarations: [UploadImageControlComponent],\n imports: [\n CommonModule,\n UploadsModule,\n ImageOrIconModule,\n TranslationsModule,\n\n // material\n MatProgressBarModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n ],\n exports: [\n UploadImageControlComponent,\n ]\n})\nexport class UploadImageControlModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BetweenInputComponent} from './between-input/between-input.component';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\nimport {ReactiveFormsModule} from '@angular/forms';\n\n@NgModule({\n declarations: [BetweenInputComponent],\n imports: [\n CommonModule,\n TranslationsModule,\n ReactiveFormsModule,\n ],\n exports: [BetweenInputComponent]\n})\nexport class BetweenDateInputModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {CustomPagesIndexComponent} from './custom-pages-index.component';\nimport {CrupdateCustomPageComponent} from './crupdate-custom-page/crupdate-custom-page.component';\nimport {DatatableModule} from '../../datatable/datatable.module';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {TranslationsModule} from '../../core/translations/translations.module';\nimport {RouterModule} from '@angular/router';\nimport {FormatPipesModule} from '../../core/ui/format-pipes/format-pipes.module';\nimport {NoResultsMessageModule} from '../../core/ui/no-results-message/no-results-message.module';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {SlugControlModule} from '../../shared/form-controls/slug-control/slug-control.module';\nimport {TextEditorModule} from '../../text-editor/text-editor.module';\nimport {LoadingIndicatorModule} from '../../core/ui/loading-indicator/loading-indicator.module';\nimport {CustomPageTableComponent} from './custom-page-table/custom-page-table.component';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\n\n\n@NgModule({\n declarations: [\n CustomPagesIndexComponent,\n CrupdateCustomPageComponent,\n CustomPageTableComponent,\n ],\n imports: [\n CommonModule,\n RouterModule,\n DatatableModule,\n TranslationsModule,\n FormatPipesModule,\n NoResultsMessageModule,\n TextEditorModule,\n LoadingIndicatorModule,\n\n FormsModule,\n ReactiveFormsModule,\n SlugControlModule,\n\n // material\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n MatSlideToggleModule,\n ],\n exports: [\n CustomPagesIndexComponent,\n CrupdateCustomPageComponent,\n CustomPageTableComponent,\n ]\n})\nexport class CustomPageIndexModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ProjectsComponent} from './projects/projects.component';\nimport {BuilderSettingsComponent} from './settings/builder/builder-settings.component';\nimport {CrupdateTemplateModalComponent} from './templates/crupdate-template-modal/crupdate-template-modal.component';\nimport {TemplatesComponent} from './templates/templates.component';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {BaseAdminModule} from '@common/admin/base-admin.module';\nimport {MatTabsModule} from '@angular/material/tabs';\nimport {ConfirmModalModule} from '@common/core/ui/confirm-modal/confirm-modal.module';\nimport {NoResultsMessageModule} from '@common/core/ui/no-results-message/no-results-message.module';\nimport {LoadingIndicatorModule} from '@common/core/ui/loading-indicator/loading-indicator.module';\nimport {DatatableModule} from '../../common/datatable/datatable.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n BaseAdminModule,\n ConfirmModalModule,\n NoResultsMessageModule,\n LoadingIndicatorModule,\n DatatableModule,\n\n // material\n MatProgressBarModule,\n MatTabsModule,\n ],\n declarations: [\n TemplatesComponent,\n CrupdateTemplateModalComponent,\n ProjectsComponent,\n BuilderSettingsComponent,\n ]\n})\nexport class AppAdminModule {\n}\n","import {NgModule} from '@angular/core';\r\nimport {CrupdateRoleModalComponent} from './roles/crupdate-role-modal/crupdate-role-modal.component';\r\nimport {UserIndexComponent} from './users/user-index.component';\r\nimport {AdminComponent} from './admin.component';\r\nimport {CrupdateUserModalComponent} from './users/crupdate-user-modal/crupdate-user-modal.component';\r\nimport {RoleIndexComponent} from './roles/role-index.component';\r\nimport {SelectRolesModalComponent} from './users/select-roles-modal/select-roles-modal.component';\r\nimport {AdsPageComponent} from './ads-page/ads-page.component';\r\nimport {SettingsModule} from './settings/settings.module';\r\nimport {RouterModule} from '@angular/router';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {TextEditorModule} from '../text-editor/text-editor.module';\r\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatCheckboxModule} from '@angular/material/checkbox';\r\nimport {MatChipsModule} from '@angular/material/chips';\r\nimport {MatNativeDateModule, MatPseudoCheckboxModule, MatRippleModule} from '@angular/material/core';\r\nimport {MatDatepickerModule} from '@angular/material/datepicker';\r\nimport {MatDialogModule} from '@angular/material/dialog';\r\nimport {MatExpansionModule} from '@angular/material/expansion';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {MatSidenavModule} from '@angular/material/sidenav';\r\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\r\nimport {MatSnackBarModule} from '@angular/material/snack-bar';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {SelectPermissionsModalComponent} from './permissions/select-permissions-modal/select-permissions-modal.component';\r\nimport {PermissionManagerComponent} from './permissions/permission-manager/permission-manager.component';\r\nimport {CrupdatePlanModalComponent} from './billing/plans/crupdate-plan-modal/crupdate-plan-modal.component';\r\nimport {CrupdateSubscriptionModalComponent} from './billing/subscriptions/crupdate-subscription-modal/crupdate-subscription-modal.component';\r\nimport {SubscriptionIndexComponent} from './billing/subscriptions/subscription-index/subscription-index.component';\r\nimport {PlanIndexComponent} from './billing/plans/plan-index/plan-index.component';\r\nimport {SpaceInputModule} from '../core/ui/space-input/space-input.module';\r\nimport {COMMON_ADMIN_CONFIG} from './common-admin-config';\r\nimport {Settings} from '../core/config/settings.service';\r\nimport {FullPlanNameModule} from '../shared/billing/full-plan-name/full-plan-name.module';\r\nimport {FileEntryIndexComponent} from './file-entry-index/file-entry-index.component';\r\nimport {ImageZoomModule} from '@common/core/ui/image-zoom/image-zoom.module';\r\nimport {DragDropModule} from '@angular/cdk/drag-drop';\r\nimport {LocalizationIndexComponent} from '@common/admin/localizations/localization-index.component';\r\nimport {NewLineModalComponent} from '@common/admin/localizations/new-line-modal/new-line-modal.component';\r\nimport {CrupdateLocalizationModalComponent} from '@common/admin/localizations/crupdate-localization-modal/crupdate-localization-modal.component';\r\nimport {BaseAdminRoutingModule} from '@common/admin/base-admin-routing.module';\r\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\r\nimport {FindUserModalModule} from '@common/auth/find-user-modal/find-user-modal.module';\r\nimport {MaterialNavbarModule} from '@common/core/ui/material-navbar/material-navbar.module';\r\nimport {CustomMenuModule} from '@common/core/ui/custom-menu/custom-menu.module';\r\nimport {TranslationsModule} from '@common/core/translations/translations.module';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {FormatPipesModule} from '@common/core/ui/format-pipes/format-pipes.module';\r\nimport {NoResultsMessageModule} from '@common/core/ui/no-results-message/no-results-message.module';\r\nimport {LoadingIndicatorModule} from '@common/core/ui/loading-indicator/loading-indicator.module';\r\nimport {UploadImageControlModule} from '@common/shared/form-controls/upload-image-control/upload-image-control.module';\r\nimport {ConfirmModalModule} from '@common/core/ui/confirm-modal/confirm-modal.module';\r\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\r\nimport {TagIndexComponent} from '@common/admin/tag-index/tag-index.component';\r\nimport {CrupdateTagModalComponent} from '@common/admin/tag-index/crupdate-tag-modal/crupdate-tag-modal.component';\r\nimport {SlugControlModule} from '../shared/form-controls/slug-control/slug-control.module';\r\nimport {RoleManagerModule} from './users/role-manager/role-manager.module';\r\nimport {CustomPageIndexModule} from '../pages/custom-pages-index/custom-page-index.module';\r\nimport {PlanIndexFiltersComponent} from './billing/plans/plan-index/plan-index-filters/plan-index-filters.component';\r\nimport {SubscriptionIndexFiltersComponent} from './billing/subscriptions/subscription-index/subscription-index-filters/subscription-index-filters.component';\r\nimport {BetweenDateInputModule} from '../core/ui/between-date-input/between-date-input.module';\r\nimport {UserIndexFiltersComponent} from './users/user-index-filters/user-index-filters.component';\r\nimport {FileEntryIndexFiltersComponent} from './file-entry-index/file-entry-index-filters/file-entry-index-filters.component';\r\nimport {TagIndexFiltersComponent} from './tag-index/tag-index-filters/tag-index-filters.component';\r\nimport {SelectUserInputModule} from '../core/ui/select-user-input/select-user-input.module';\r\nimport {SkeletonModule} from '../core/ui/skeleton/skeleton.module';\r\nimport {DatatableModule} from '../datatable/datatable.module';\r\n\r\n@NgModule({\r\n imports: [\r\n RouterModule,\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n TextEditorModule,\r\n SettingsModule,\r\n MaterialNavbarModule,\r\n CustomMenuModule,\r\n FullPlanNameModule,\r\n SpaceInputModule,\r\n DatatableModule,\r\n FormatPipesModule,\r\n TranslationsModule,\r\n NoResultsMessageModule,\r\n LoadingIndicatorModule,\r\n UploadImageControlModule,\r\n ConfirmModalModule,\r\n SlugControlModule,\r\n RoleManagerModule,\r\n BaseAdminRoutingModule,\r\n CustomPageIndexModule,\r\n\r\n // material\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatDialogModule,\r\n MatMenuModule,\r\n MatSlideToggleModule,\r\n MatChipsModule,\r\n MatAutocompleteModule,\r\n MatSidenavModule,\r\n DragDropModule,\r\n MatProgressBarModule,\r\n\r\n // for permission/role modal only\r\n MatExpansionModule,\r\n MatPseudoCheckboxModule,\r\n\r\n // for subscription modal and list only\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n BetweenDateInputModule,\r\n SelectUserInputModule,\r\n\r\n // for ads page only\r\n ImageZoomModule,\r\n MatRippleModule,\r\n\r\n // for role index component\r\n FindUserModalModule,\r\n SkeletonModule,\r\n ],\r\n declarations: [\r\n AdminComponent,\r\n RoleIndexComponent,\r\n CrupdateRoleModalComponent,\r\n UserIndexComponent,\r\n CrupdateUserModalComponent,\r\n LocalizationIndexComponent,\r\n CrupdateLocalizationModalComponent,\r\n NewLineModalComponent,\r\n SelectRolesModalComponent,\r\n SelectPermissionsModalComponent,\r\n PermissionManagerComponent,\r\n AdsPageComponent,\r\n FileEntryIndexComponent,\r\n TagIndexComponent,\r\n CrupdateTagModalComponent,\r\n\r\n // billing\r\n PlanIndexComponent,\r\n PlanIndexFiltersComponent,\r\n SubscriptionIndexComponent,\r\n SubscriptionIndexFiltersComponent,\r\n CrupdatePlanModalComponent,\r\n CrupdateSubscriptionModalComponent,\r\n UserIndexFiltersComponent,\r\n FileEntryIndexFiltersComponent,\r\n TagIndexFiltersComponent,\r\n ],\r\n exports: [\r\n RouterModule,\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n TextEditorModule,\r\n SettingsModule,\r\n PermissionManagerComponent,\r\n SelectPermissionsModalComponent,\r\n TranslationsModule,\r\n FormatPipesModule,\r\n ConfirmModalModule,\r\n DatatableModule,\r\n\r\n // material\r\n MatButtonModule,\r\n MatIconModule,\r\n MatSnackBarModule,\r\n MatCheckboxModule,\r\n MatTooltipModule,\r\n MatDialogModule,\r\n MatMenuModule,\r\n MatSlideToggleModule,\r\n MatChipsModule,\r\n ],\r\n providers: [\r\n Modal,\r\n ]\r\n})\r\nexport class BaseAdminModule {\r\n constructor(private settings: Settings) {\r\n this.settings.merge({vebto: COMMON_ADMIN_CONFIG});\r\n }\r\n}\r\n","import {AbstractControl} from '@angular/forms';\r\nimport {distinctUntilChanged, filter} from 'rxjs/operators';\r\nimport {slugifyString} from '@common/core/utils/slugify-string';\r\n\r\nexport function bindSlugTo(control: AbstractControl) {\r\n control.valueChanges\r\n .pipe(filter(value => !!value), distinctUntilChanged())\r\n .subscribe(value => {\r\n if ( ! control.parent.get('slug').dirty) {\r\n control.parent.get('slug').setValue(slugifyString(value));\r\n }\r\n });\r\n}\r\n","import {ChangeDetectionStrategy, Component, HostBinding, Input} from '@angular/core';\nimport {ThemeService} from '../../theme.service';\n\n@Component({\n selector: 'skeleton',\n templateUrl: './skeleton.component.html',\n styleUrls: ['./skeleton.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'aria-busy': 'true',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n 'aria-valuetext': 'Loading...',\n 'role': 'progressbar',\n }\n})\nexport class SkeletonComponent {\n @Input() animation: 'pulsate' | 'wave' = 'wave';\n @Input() variant: 'avatar' | 'text' | 'rect' = 'text';\n @HostBinding('class.dark') dark = this.theme.isDarkMode();\n\n @HostBinding('class.pulsate') get pulsate() {\n return this.animation === 'pulsate';\n }\n\n @HostBinding('class.wave') get wave() {\n return this.animation === 'wave';\n }\n\n @HostBinding('class.avatar') get avatar() {\n return this.variant === 'avatar';\n }\n\n @HostBinding('class.text') get text() {\n return this.variant === 'text';\n }\n\n @HostBinding('class.rect') get rect() {\n return this.variant === 'rect';\n }\n\n constructor(private theme: ThemeService) {}\n}\n","import {Injectable} from '@angular/core';\r\nimport {CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild} from '@angular/router';\r\nimport {Settings} from '@common/core/config/settings.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class BillingEnabledGuard implements CanActivate, CanActivateChild {\r\n constructor(private settings: Settings, private router: Router) {}\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n return this.handle();\r\n }\r\n\r\n canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n return this.handle();\r\n }\r\n\r\n private handle() {\r\n if (this.settings.get('billing.integrated') && this.settings.get('billing.enable')) {\r\n return true;\r\n }\r\n\r\n this.router.navigate(['/']);\r\n return false;\r\n }\r\n}\r\n","import { InjectionToken, forwardRef, EventEmitter, Directive, ChangeDetectorRef, Output, Input, ContentChildren, ElementRef, ViewChild, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, NgModule } from '@angular/core';\nimport { mixinDisableRipple, mixinTabIndex, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\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 */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/a11y';\nimport * as ɵngcc2 from '@angular/cdk/collections';\nimport * as ɵngcc3 from '@angular/material/core';\n\nconst _c0 = [\"input\"];\nconst _c1 = function () { return { enterDuration: 150 }; };\nconst _c2 = [\"*\"];\nconst MAT_RADIO_DEFAULT_OPTIONS = new InjectionToken('mat-radio-default-options', {\n providedIn: 'root',\n factory: MAT_RADIO_DEFAULT_OPTIONS_FACTORY\n});\nfunction MAT_RADIO_DEFAULT_OPTIONS_FACTORY() {\n return {\n color: 'accent'\n };\n}\n// Increasing integer for generating unique ids for radio components.\nlet nextUniqueId = 0;\n/**\n * Provider Expression that allows mat-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n * @docs-private\n */\nconst MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatRadioGroup),\n multi: true\n};\n/** Change event object emitted by MatRadio and MatRadioGroup. */\nclass MatRadioChange {\n constructor(\n /** The MatRadioButton that emits the change event. */\n source, \n /** The value of the MatRadioButton. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n/**\n * Injection token that can be used to inject instances of `MatRadioGroup`. It serves as\n * alternative token to the actual `MatRadioGroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_RADIO_GROUP = new InjectionToken('MatRadioGroup');\n/**\n * Base class with all of the `MatRadioGroup` functionality.\n * @docs-private\n */\nclass _MatRadioGroupBase {\n constructor(_changeDetector) {\n this._changeDetector = _changeDetector;\n /** Selected value for the radio group. */\n this._value = null;\n /** The HTML name attribute applied to radio buttons in this group. */\n this._name = `mat-radio-group-${nextUniqueId++}`;\n /** The currently selected radio button. Should match value. */\n this._selected = null;\n /** Whether the `value` has been set to its initial value. */\n this._isInitialized = false;\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n this._labelPosition = 'after';\n /** Whether the radio group is disabled. */\n this._disabled = false;\n /** Whether the radio group is required. */\n this._required = false;\n /** The method to be called in order to update ngModel */\n this._controlValueAccessorChangeFn = () => { };\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n * @docs-private\n */\n this.onTouched = () => { };\n /**\n * Event emitted when the group value changes.\n * Change events are only emitted when the value changes due to user interaction with\n * a radio button (the same behavior as `<input type-\"radio\">`).\n */\n this.change = new EventEmitter();\n }\n /** Name of the radio button group. All radio buttons inside this group will use this name. */\n get name() { return this._name; }\n set name(value) {\n this._name = value;\n this._updateRadioButtonNames();\n }\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n get labelPosition() {\n return this._labelPosition;\n }\n set labelPosition(v) {\n this._labelPosition = v === 'before' ? 'before' : 'after';\n this._markRadiosForCheck();\n }\n /**\n * Value for the radio-group. Should equal the value of the selected radio button if there is\n * a corresponding radio button with a matching value. If there is not such a corresponding\n * radio button, this value persists to be applied in case a new radio button is added with a\n * matching value.\n */\n get value() { return this._value; }\n set value(newValue) {\n if (this._value !== newValue) {\n // Set this before proceeding to ensure no circular loop occurs with selection.\n this._value = newValue;\n this._updateSelectedRadioFromValue();\n this._checkSelectedRadioButton();\n }\n }\n _checkSelectedRadioButton() {\n if (this._selected && !this._selected.checked) {\n this._selected.checked = true;\n }\n }\n /**\n * The currently selected radio button. If set to a new radio button, the radio group value\n * will be updated to match the new selected button.\n */\n get selected() { return this._selected; }\n set selected(selected) {\n this._selected = selected;\n this.value = selected ? selected.value : null;\n this._checkSelectedRadioButton();\n }\n /** Whether the radio group is disabled */\n get disabled() { return this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._markRadiosForCheck();\n }\n /** Whether the radio group is required */\n get required() { return this._required; }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n this._markRadiosForCheck();\n }\n /**\n * Initialize properties once content children are available.\n * This allows us to propagate relevant attributes to associated buttons.\n */\n ngAfterContentInit() {\n // Mark this component as initialized in AfterContentInit because the initial value can\n // possibly be set by NgModel on MatRadioGroup, and it is possible that the OnInit of the\n // NgModel occurs *after* the OnInit of the MatRadioGroup.\n this._isInitialized = true;\n }\n /**\n * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n * radio buttons upon their blur.\n */\n _touch() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n _updateRadioButtonNames() {\n if (this._radios) {\n this._radios.forEach(radio => {\n radio.name = this.name;\n radio._markForCheck();\n });\n }\n }\n /** Updates the `selected` radio button from the internal _value state. */\n _updateSelectedRadioFromValue() {\n // If the value already matches the selected radio, do nothing.\n const isAlreadySelected = this._selected !== null && this._selected.value === this._value;\n if (this._radios && !isAlreadySelected) {\n this._selected = null;\n this._radios.forEach(radio => {\n radio.checked = this.value === radio.value;\n if (radio.checked) {\n this._selected = radio;\n }\n });\n }\n }\n /** Dispatch change event with current selection and group value. */\n _emitChangeEvent() {\n if (this._isInitialized) {\n this.change.emit(new MatRadioChange(this._selected, this._value));\n }\n }\n _markRadiosForCheck() {\n if (this._radios) {\n this._radios.forEach(radio => radio._markForCheck());\n }\n }\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value\n */\n writeValue(value) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\n }\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n * @param isDisabled Whether the control should be disabled.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetector.markForCheck();\n }\n}\n_MatRadioGroupBase.ɵfac = function _MatRadioGroupBase_Factory(t) { return new (t || _MatRadioGroupBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\n_MatRadioGroupBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: _MatRadioGroupBase, inputs: { name: \"name\", labelPosition: \"labelPosition\", value: \"value\", selected: \"selected\", disabled: \"disabled\", required: \"required\", color: \"color\" }, outputs: { change: \"change\" } });\n_MatRadioGroupBase.ctorParameters = () => [\n { type: ChangeDetectorRef }\n];\n_MatRadioGroupBase.propDecorators = {\n change: [{ type: Output }],\n color: [{ type: Input }],\n name: [{ type: Input }],\n labelPosition: [{ type: Input }],\n value: [{ type: Input }],\n selected: [{ type: Input }],\n disabled: [{ type: Input }],\n required: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(_MatRadioGroupBase, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }]; }, { change: [{\n type: Output\n }], name: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], value: [{\n type: Input\n }], selected: [{\n type: Input\n }], disabled: [{\n type: Input\n }], required: [{\n type: Input\n }], color: [{\n type: Input\n }] }); })();\n/**\n * A group of radio buttons. May contain one or more `<mat-radio-button>` elements.\n */\nclass MatRadioGroup extends _MatRadioGroupBase {\n}\nMatRadioGroup.ɵfac = function MatRadioGroup_Factory(t) { return ɵMatRadioGroup_BaseFactory(t || MatRadioGroup); };\nMatRadioGroup.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatRadioGroup, selectors: [[\"mat-radio-group\"]], contentQueries: function MatRadioGroup_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatRadioButton, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._radios = _t);\n } }, hostAttrs: [\"role\", \"radiogroup\", 1, \"mat-radio-group\"], exportAs: [\"matRadioGroup\"], features: [ɵngcc0.ɵɵProvidersFeature([\n MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n { provide: MAT_RADIO_GROUP, useExisting: MatRadioGroup },\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatRadioGroup.propDecorators = {\n _radios: [{ type: ContentChildren, args: [forwardRef(() => MatRadioButton), { descendants: true },] }]\n};\nconst ɵMatRadioGroup_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatRadioGroup);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatRadioGroup, [{\n type: Directive,\n args: [{\n selector: 'mat-radio-group',\n exportAs: 'matRadioGroup',\n providers: [\n MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n { provide: MAT_RADIO_GROUP, useExisting: MatRadioGroup },\n ],\n host: {\n 'role': 'radiogroup',\n 'class': 'mat-radio-group'\n }\n }]\n }], null, { _radios: [{\n type: ContentChildren,\n args: [forwardRef(() => MatRadioButton), { descendants: true }]\n }] }); })();\n// Boilerplate for applying mixins to MatRadioButton.\n/** @docs-private */\nclass MatRadioButtonBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\n// As per Material design specifications the selection control radio should use the accent color\n// palette by default. https://material.io/guidelines/components/selection-controls.html\nconst _MatRadioButtonMixinBase = mixinDisableRipple(mixinTabIndex(MatRadioButtonBase));\n/**\n * Base class with all of the `MatRadioButton` functionality.\n * @docs-private\n */\nclass _MatRadioButtonBase extends _MatRadioButtonMixinBase {\n constructor(radioGroup, elementRef, _changeDetector, _focusMonitor, _radioDispatcher, _animationMode, _providerOverride) {\n super(elementRef);\n this._changeDetector = _changeDetector;\n this._focusMonitor = _focusMonitor;\n this._radioDispatcher = _radioDispatcher;\n this._animationMode = _animationMode;\n this._providerOverride = _providerOverride;\n this._uniqueId = `mat-radio-${++nextUniqueId}`;\n /** The unique ID for the radio button. */\n this.id = this._uniqueId;\n /**\n * Event emitted when the checked state of this radio button changes.\n * Change events are only emitted when the value changes due to user interaction with\n * the radio button (the same behavior as `<input type-\"radio\">`).\n */\n this.change = new EventEmitter();\n /** Whether this radio is checked. */\n this._checked = false;\n /** Value assigned to this radio. */\n this._value = null;\n /** Unregister function for _radioDispatcher */\n this._removeUniqueSelectionListener = () => { };\n // Assertions. Ideally these should be stripped out by the compiler.\n // TODO(jelbourn): Assert that there's no name binding AND a parent radio group.\n this.radioGroup = radioGroup;\n this._removeUniqueSelectionListener =\n _radioDispatcher.listen((id, name) => {\n if (id !== this.id && name === this.name) {\n this.checked = false;\n }\n });\n }\n /** Whether this radio button is checked. */\n get checked() { return this._checked; }\n set checked(value) {\n const newCheckedState = coerceBooleanProperty(value);\n if (this._checked !== newCheckedState) {\n this._checked = newCheckedState;\n if (newCheckedState && this.radioGroup && this.radioGroup.value !== this.value) {\n this.radioGroup.selected = this;\n }\n else if (!newCheckedState && this.radioGroup && this.radioGroup.value === this.value) {\n // When unchecking the selected radio button, update the selected radio\n // property on the group.\n this.radioGroup.selected = null;\n }\n if (newCheckedState) {\n // Notify all radio buttons with the same name to un-check.\n this._radioDispatcher.notify(this.id, this.name);\n }\n this._changeDetector.markForCheck();\n }\n }\n /** The value of this radio button. */\n get value() { return this._value; }\n set value(value) {\n if (this._value !== value) {\n this._value = value;\n if (this.radioGroup !== null) {\n if (!this.checked) {\n // Update checked when the value changed to match the radio group's value\n this.checked = this.radioGroup.value === value;\n }\n if (this.checked) {\n this.radioGroup.selected = this;\n }\n }\n }\n }\n /** Whether the label should appear after or before the radio button. Defaults to 'after' */\n get labelPosition() {\n return this._labelPosition || (this.radioGroup && this.radioGroup.labelPosition) || 'after';\n }\n set labelPosition(value) {\n this._labelPosition = value;\n }\n /** Whether the radio button is disabled. */\n get disabled() {\n return this._disabled || (this.radioGroup !== null && this.radioGroup.disabled);\n }\n set disabled(value) {\n this._setDisabled(coerceBooleanProperty(value));\n }\n /** Whether the radio button is required. */\n get required() {\n return this._required || (this.radioGroup && this.radioGroup.required);\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n }\n /** Theme color of the radio button. */\n get color() {\n return this._color ||\n (this.radioGroup && this.radioGroup.color) ||\n this._providerOverride && this._providerOverride.color || 'accent';\n }\n set color(newValue) { this._color = newValue; }\n /** ID of the native input element inside `<mat-radio-button>` */\n get inputId() { return `${this.id || this._uniqueId}-input`; }\n /** Focuses the radio button. */\n focus(options) {\n this._focusMonitor.focusVia(this._inputElement, 'keyboard', options);\n }\n /**\n * Marks the radio button as needing checking for change detection.\n * This method is exposed because the parent radio group will directly\n * update bound properties of the radio button.\n */\n _markForCheck() {\n // When group value changes, the button will not be notified. Use `markForCheck` to explicit\n // update radio button's status\n this._changeDetector.markForCheck();\n }\n ngOnInit() {\n if (this.radioGroup) {\n // If the radio is inside a radio group, determine if it should be checked\n this.checked = this.radioGroup.value === this._value;\n // Copy name from parent radio group\n this.name = this.radioGroup.name;\n }\n }\n ngAfterViewInit() {\n this._focusMonitor\n .monitor(this._elementRef, true)\n .subscribe(focusOrigin => {\n if (!focusOrigin && this.radioGroup) {\n this.radioGroup._touch();\n }\n });\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._removeUniqueSelectionListener();\n }\n /** Dispatch change event with current value. */\n _emitChangeEvent() {\n this.change.emit(new MatRadioChange(this, this._value));\n }\n _isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n _onInputClick(event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `radio-button` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n /**\n * Triggered when the radio button received a click or the input recognized any change.\n * Clicking on a label element, will trigger a change event on the associated input.\n */\n _onInputChange(event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n this.checked = true;\n this._emitChangeEvent();\n if (this.radioGroup) {\n this.radioGroup._controlValueAccessorChangeFn(this.value);\n if (groupValueChanged) {\n this.radioGroup._emitChangeEvent();\n }\n }\n }\n /** Sets the disabled state and marks for check if a change occurred. */\n _setDisabled(value) {\n if (this._disabled !== value) {\n this._disabled = value;\n this._changeDetector.markForCheck();\n }\n }\n}\n_MatRadioButtonBase.ɵfac = function _MatRadioButtonBase_Factory(t) { return new (t || _MatRadioButtonBase)(ɵngcc0.ɵɵdirectiveInject(_MatRadioGroupBase), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.UniqueSelectionDispatcher), ɵngcc0.ɵɵdirectiveInject(String), ɵngcc0.ɵɵdirectiveInject(undefined)); };\n_MatRadioButtonBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: _MatRadioButtonBase, viewQuery: function _MatRadioButtonBase_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._inputElement = _t.first);\n } }, inputs: { id: \"id\", checked: \"checked\", value: \"value\", labelPosition: \"labelPosition\", disabled: \"disabled\", required: \"required\", color: \"color\", name: \"name\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], ariaDescribedby: [\"aria-describedby\", \"ariaDescribedby\"] }, outputs: { change: \"change\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n_MatRadioButtonBase.ctorParameters = () => [\n { type: _MatRadioGroupBase },\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: FocusMonitor },\n { type: UniqueSelectionDispatcher },\n { type: String },\n { type: undefined }\n];\n_MatRadioButtonBase.propDecorators = {\n id: [{ type: Input }],\n name: [{ type: Input }],\n ariaLabel: [{ type: Input, args: ['aria-label',] }],\n ariaLabelledby: [{ type: Input, args: ['aria-labelledby',] }],\n ariaDescribedby: [{ type: Input, args: ['aria-describedby',] }],\n checked: [{ type: Input }],\n value: [{ type: Input }],\n labelPosition: [{ type: Input }],\n disabled: [{ type: Input }],\n required: [{ type: Input }],\n color: [{ type: Input }],\n change: [{ type: Output }],\n _inputElement: [{ type: ViewChild, args: ['input',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(_MatRadioButtonBase, [{\n type: Directive\n }], function () { return [{ type: _MatRadioGroupBase }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.FocusMonitor }, { type: ɵngcc2.UniqueSelectionDispatcher }, { type: String }, { type: undefined }]; }, { id: [{\n type: Input\n }], change: [{\n type: Output\n }], checked: [{\n type: Input\n }], value: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], disabled: [{\n type: Input\n }], required: [{\n type: Input\n }], color: [{\n type: Input\n }], name: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], ariaDescribedby: [{\n type: Input,\n args: ['aria-describedby']\n }], _inputElement: [{\n type: ViewChild,\n args: ['input']\n }] }); })();\n/**\n * A Material design radio-button. Typically placed inside of `<mat-radio-group>` elements.\n */\nclass MatRadioButton extends _MatRadioButtonBase {\n constructor(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride) {\n super(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride);\n }\n}\nMatRadioButton.ɵfac = function MatRadioButton_Factory(t) { return new (t || MatRadioButton)(ɵngcc0.ɵɵdirectiveInject(MAT_RADIO_GROUP, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.UniqueSelectionDispatcher), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_RADIO_DEFAULT_OPTIONS, 8)); };\nMatRadioButton.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatRadioButton, selectors: [[\"mat-radio-button\"]], hostAttrs: [1, \"mat-radio-button\"], hostVars: 17, hostBindings: function MatRadioButton_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function MatRadioButton_focus_HostBindingHandler() { return ctx._inputElement.nativeElement.focus(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", 0 - 1)(\"id\", ctx.id)(\"aria-label\", null)(\"aria-labelledby\", null)(\"aria-describedby\", null);\n ɵngcc0.ɵɵclassProp(\"mat-radio-checked\", ctx.checked)(\"mat-radio-disabled\", ctx.disabled)(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\")(\"mat-primary\", ctx.color === \"primary\")(\"mat-accent\", ctx.color === \"accent\")(\"mat-warn\", ctx.color === \"warn\");\n } }, inputs: { disableRipple: \"disableRipple\", tabIndex: \"tabIndex\" }, exportAs: [\"matRadioButton\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c2, decls: 13, vars: 19, consts: [[1, \"mat-radio-label\"], [\"label\", \"\"], [1, \"mat-radio-container\"], [1, \"mat-radio-outer-circle\"], [1, \"mat-radio-inner-circle\"], [\"type\", \"radio\", 1, \"mat-radio-input\", \"cdk-visually-hidden\", 3, \"id\", \"checked\", \"disabled\", \"tabIndex\", \"required\", \"change\", \"click\"], [\"input\", \"\"], [\"mat-ripple\", \"\", 1, \"mat-radio-ripple\", \"mat-focus-indicator\", 3, \"matRippleTrigger\", \"matRippleDisabled\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\"], [1, \"mat-ripple-element\", \"mat-radio-persistent-ripple\"], [1, \"mat-radio-label-content\"], [2, \"display\", \"none\"]], template: function MatRadioButton_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"label\", 0, 1);\n ɵngcc0.ɵɵelementStart(2, \"div\", 2);\n ɵngcc0.ɵɵelement(3, \"div\", 3);\n ɵngcc0.ɵɵelement(4, \"div\", 4);\n ɵngcc0.ɵɵelementStart(5, \"input\", 5, 6);\n ɵngcc0.ɵɵlistener(\"change\", function MatRadioButton_Template_input_change_5_listener($event) { return ctx._onInputChange($event); })(\"click\", function MatRadioButton_Template_input_click_5_listener($event) { return ctx._onInputClick($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"div\", 7);\n ɵngcc0.ɵɵelement(8, \"div\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"div\", 9);\n ɵngcc0.ɵɵelementStart(10, \"span\", 10);\n ɵngcc0.ɵɵtext(11, \"\\u00A0\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(12);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵattribute(\"for\", ctx.inputId);\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵproperty(\"id\", ctx.inputId)(\"checked\", ctx.checked)(\"disabled\", ctx.disabled)(\"tabIndex\", ctx.tabIndex)(\"required\", ctx.required);\n ɵngcc0.ɵɵattribute(\"name\", ctx.name)(\"value\", ctx.value)(\"aria-label\", ctx.ariaLabel)(\"aria-labelledby\", ctx.ariaLabelledby)(\"aria-describedby\", ctx.ariaDescribedby);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"matRippleTrigger\", _r0)(\"matRippleDisabled\", ctx._isRippleDisabled())(\"matRippleCentered\", true)(\"matRippleRadius\", 20)(\"matRippleAnimation\", ɵngcc0.ɵɵpureFunction0(18, _c1));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"mat-radio-label-before\", ctx.labelPosition == \"before\");\n } }, directives: [ɵngcc3.MatRipple], styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;height:20px;left:0;position:absolute;top:0;transition:transform ease 280ms,background-color ease 280ms;width:20px;transform:scale(0.001)}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5)}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatRadioButton.ctorParameters = () => [\n { type: MatRadioGroup, decorators: [{ type: Optional }, { type: Inject, args: [MAT_RADIO_GROUP,] }] },\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: FocusMonitor },\n { type: UniqueSelectionDispatcher },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_RADIO_DEFAULT_OPTIONS,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatRadioButton, [{\n type: Component,\n args: [{\n selector: 'mat-radio-button',\n template: \"<!-- TODO(jelbourn): render the radio on either side of the content -->\\n<!-- TODO(mtlin): Evaluate trade-offs of using native radio vs. cost of additional bindings. -->\\n<label [attr.for]=\\\"inputId\\\" class=\\\"mat-radio-label\\\" #label>\\n <!-- The actual 'radio' part of the control. -->\\n <div class=\\\"mat-radio-container\\\">\\n <div class=\\\"mat-radio-outer-circle\\\"></div>\\n <div class=\\\"mat-radio-inner-circle\\\"></div>\\n <input #input class=\\\"mat-radio-input cdk-visually-hidden\\\" type=\\\"radio\\\"\\n [id]=\\\"inputId\\\"\\n [checked]=\\\"checked\\\"\\n [disabled]=\\\"disabled\\\"\\n [tabIndex]=\\\"tabIndex\\\"\\n [attr.name]=\\\"name\\\"\\n [attr.value]=\\\"value\\\"\\n [required]=\\\"required\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledby\\\"\\n [attr.aria-describedby]=\\\"ariaDescribedby\\\"\\n (change)=\\\"_onInputChange($event)\\\"\\n (click)=\\\"_onInputClick($event)\\\">\\n\\n <!-- The ripple comes after the input so that we can target it with a CSS\\n sibling selector when the input is focused. -->\\n <div mat-ripple class=\\\"mat-radio-ripple mat-focus-indicator\\\"\\n [matRippleTrigger]=\\\"label\\\"\\n [matRippleDisabled]=\\\"_isRippleDisabled()\\\"\\n [matRippleCentered]=\\\"true\\\"\\n [matRippleRadius]=\\\"20\\\"\\n [matRippleAnimation]=\\\"{enterDuration: 150}\\\">\\n\\n <div class=\\\"mat-ripple-element mat-radio-persistent-ripple\\\"></div>\\n </div>\\n </div>\\n\\n <!-- The label content for radio control. -->\\n <div class=\\\"mat-radio-label-content\\\" [class.mat-radio-label-before]=\\\"labelPosition == 'before'\\\">\\n <!-- Add an invisible span so JAWS can read the label -->\\n <span style=\\\"display:none\\\"> </span>\\n <ng-content></ng-content>\\n </div>\\n</label>\\n\",\n inputs: ['disableRipple', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matRadioButton',\n host: {\n 'class': 'mat-radio-button',\n '[class.mat-radio-checked]': 'checked',\n '[class.mat-radio-disabled]': 'disabled',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[class.mat-primary]': 'color === \"primary\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n // Needs to be -1 so the `focus` event still fires.\n '[attr.tabindex]': '-1',\n '[attr.id]': 'id',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[attr.aria-describedby]': 'null',\n // Note: under normal conditions focus shouldn't land on this element, however it may be\n // programmatically set, for example inside of a focus trap, in this case we want to forward\n // the focus to the native element.\n '(focus)': '_inputElement.nativeElement.focus()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;height:20px;left:0;position:absolute;top:0;transition:transform ease 280ms,background-color ease 280ms;width:20px;transform:scale(0.001)}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5)}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"]\n }]\n }], function () { return [{ type: MatRadioGroup, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RADIO_GROUP]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.FocusMonitor }, { type: ɵngcc2.UniqueSelectionDispatcher }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RADIO_DEFAULT_OPTIONS]\n }] }]; }, null); })();\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 MatRadioModule {\n}\nMatRadioModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatRadioModule });\nMatRadioModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatRadioModule_Factory(t) { return new (t || MatRadioModule)(); }, imports: [[MatRippleModule, MatCommonModule], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatRadioModule, { declarations: function () { return [MatRadioGroup, MatRadioButton]; }, imports: function () { return [MatRippleModule, MatCommonModule]; }, exports: function () { return [MatRadioGroup, MatRadioButton, MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatRadioModule, [{\n type: NgModule,\n args: [{\n imports: [MatRippleModule, MatCommonModule],\n exports: [MatRadioGroup, MatRadioButton, MatCommonModule],\n declarations: [MatRadioGroup, MatRadioButton]\n }]\n }], null, null); })();\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_RADIO_DEFAULT_OPTIONS, MAT_RADIO_DEFAULT_OPTIONS_FACTORY, MAT_RADIO_GROUP, MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR, MatRadioButton, MatRadioChange, MatRadioGroup, MatRadioModule, _MatRadioButtonBase, _MatRadioGroupBase };\n\n//# sourceMappingURL=radio.js.map","export enum UploadUri {\n Image = 'uploads/images',\n}\n","import { Platform, PlatformModule } from '@angular/cdk/platform';\nimport { CdkScrollable, ScrollDispatcher, ViewportRuler, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { InjectionToken, Component, ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, Inject, forwardRef, ElementRef, NgZone, EventEmitter, Optional, Input, HostBinding, Output, HostListener, QueryList, ContentChildren, ContentChild, ViewChild, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { FocusTrapFactory, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, map, 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 */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/scrolling';\nimport * as ɵngcc2 from '@angular/cdk/a11y';\nimport * as ɵngcc3 from '@angular/cdk/platform';\nimport * as ɵngcc4 from '@angular/cdk/bidi';\nimport * as ɵngcc5 from '@angular/common';\n\nconst _c0 = [\"*\"];\nfunction MatDrawerContainer_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function MatDrawerContainer_div_0_Template_div_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2._onBackdropClicked(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r0._isShowingBackdrop());\n} }\nfunction MatDrawerContainer_mat_drawer_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"mat-drawer-content\");\n ɵngcc0.ɵɵprojection(1, 2);\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c1 = [[[\"mat-drawer\"]], [[\"mat-drawer-content\"]], \"*\"];\nconst _c2 = [\"mat-drawer\", \"mat-drawer-content\", \"*\"];\nfunction MatSidenavContainer_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function MatSidenavContainer_div_0_Template_div_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2._onBackdropClicked(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r0._isShowingBackdrop());\n} }\nfunction MatSidenavContainer_mat_sidenav_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"mat-sidenav-content\", 3);\n ɵngcc0.ɵɵprojection(1, 2);\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c3 = [[[\"mat-sidenav\"]], [[\"mat-sidenav-content\"]], \"*\"];\nconst _c4 = [\"mat-sidenav\", \"mat-sidenav-content\", \"*\"];\nconst _c5 = \".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-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\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 = function MatDrawerContent_Factory(t) { return new (t || MatDrawerContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(forwardRef(() => MatDrawerContainer)), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nMatDrawerContent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDrawerContent, selectors: [[\"mat-drawer-content\"]], hostAttrs: [1, \"mat-drawer-content\"], hostVars: 4, hostBindings: function MatDrawerContent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function MatDrawerContent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2, changeDetection: 0 });\nMatDrawerContent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: MatDrawerContainer, decorators: [{ type: Inject, args: [forwardRef(() => MatDrawerContainer),] }] },\n { type: ElementRef },\n { type: ScrollDispatcher },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDrawerContent, [{\n type: Component,\n args: [{\n selector: 'mat-drawer-content',\n template: '<ng-content></ng-content>',\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 }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: MatDrawerContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatDrawerContainer)]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.ScrollDispatcher }, { type: ɵngcc0.NgZone }]; }, null); })();\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, _doc, \n /**\n * @deprecated `_container` parameter to be made required.\n * @breaking-change 10.0.0\n */\n _container) {\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._focusMonitor = _focusMonitor;\n this._platform = _platform;\n this._ngZone = _ngZone;\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 // @HostBinding is used in the class as it is expected to be extended. Since @Component decorator\n // metadata is not inherited by child classes, instead the host binding data is defined in a way\n // that can be inherited.\n // tslint:disable:no-host-decorator-in-concrete\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 been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\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();\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').pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }), takeUntil(this._destroyed)).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.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\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() { return this._position; }\n set position(value) {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value != this._position) {\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n get mode() { return this._mode; }\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() { return this._disableClose; }\n set disableClose(value) { this._disableClose = coerceBooleanProperty(value); }\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 */\n get autoFocus() {\n const value = this._autoFocus;\n // Note that usually we disable auto focusing in `side` mode, because we don't know how the\n // sidenav is being used, but in some cases it still makes sense to do it. If the consumer\n // explicitly enabled `autoFocus`, we take it as them always wanting to enable it.\n return value == null ? this.mode !== 'side' : value;\n }\n set autoFocus(value) { this._autoFocus = coerceBooleanProperty(value); }\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() { return this._opened; }\n set opened(value) { this.toggle(coerceBooleanProperty(value)); }\n /** Event emitted when the drawer has started opening. */\n get openedStart() {\n return this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0), map(() => { }));\n }\n /** Event emitted when the drawer has started closing. */\n get closedStart() {\n return this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState === 'void'), map(() => { }));\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.autoFocus || !this._focusTrap) {\n return;\n }\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n // If there were no focusable elements, focus the sidenav itself so the keyboard navigation\n // still works. We need to check that `focus` is a function due to Universal.\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n this._elementRef.nativeElement.focus();\n }\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() {\n if (!this.autoFocus) {\n return;\n }\n // Note that we don't check via `instanceof HTMLElement` so that we can cover SVGs as well.\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, this._openedVia);\n }\n else {\n this._elementRef.nativeElement.blur();\n }\n this._elementFocusedBeforeDrawerWasOpened = null;\n this._openedVia = null;\n }\n /** Whether focus is currently within the drawer. */\n _isFocusWithinDrawer() {\n var _a;\n const activeEl = (_a = this._doc) === null || _a === void 0 ? void 0 : _a.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\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._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 blurring of the active element.\n return this._setOpen(/* isOpen */ false, /* restoreFocus */ true);\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 return this._setOpen(isOpen, /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(), openedVia);\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 openedVia Focus origin that can be optionally set when opening a drawer. The\n * origin will be used later when focus is restored on drawer close.\n */\n _setOpen(isOpen, restoreFocus, openedVia = 'program') {\n this._opened = isOpen;\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n this._openedVia = openedVia;\n }\n else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus();\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 // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationStartListener(event) {\n this._animationStarted.next(event);\n }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationDoneListener(event) {\n this._animationEnd.next(event);\n }\n}\nMatDrawer.ɵfac = function MatDrawer_Factory(t) { return new (t || MatDrawer)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.FocusTrapFactory), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Platform), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DRAWER_CONTAINER, 8)); };\nMatDrawer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDrawer, selectors: [[\"mat-drawer\"]], hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\"], hostVars: 12, hostBindings: function MatDrawer_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵsyntheticHostListener(\"@transform.start\", function MatDrawer_animation_transform_start_HostBindingHandler($event) { return ctx._animationStartListener($event); })(\"@transform.done\", function MatDrawer_animation_transform_done_HostBindingHandler($event) { return ctx._animationDoneListener($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"align\", null);\n ɵngcc0.ɵɵsyntheticHostProperty(\"@transform\", ctx._animationState);\n ɵngcc0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened);\n } }, inputs: { position: \"position\", mode: \"mode\", disableClose: \"disableClose\", autoFocus: \"autoFocus\", opened: \"opened\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", _closedStream: \"closed\", onPositionChanged: \"positionChanged\", openedStart: \"openedStart\", closedStart: \"closedStart\" }, exportAs: [\"matDrawer\"], ngContentSelectors: _c0, decls: 2, vars: 0, consts: [[1, \"mat-drawer-inner-container\"]], template: function MatDrawer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, encapsulation: 2, data: { animation: [matDrawerAnimations.transformDrawer] }, changeDetection: 0 });\nMatDrawer.ctorParameters = () => [\n { type: ElementRef },\n { type: FocusTrapFactory },\n { type: FocusMonitor },\n { type: Platform },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: MatDrawerContainer, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DRAWER_CONTAINER,] }] }\n];\nMatDrawer.propDecorators = {\n position: [{ type: Input }],\n mode: [{ type: Input }],\n disableClose: [{ type: Input }],\n autoFocus: [{ type: Input }],\n opened: [{ type: Input }],\n _animationState: [{ type: HostBinding, args: ['@transform',] }],\n openedChange: [{ type: Output }],\n _openedStream: [{ type: Output, args: ['opened',] }],\n openedStart: [{ type: Output }],\n _closedStream: [{ type: Output, args: ['closed',] }],\n closedStart: [{ type: Output }],\n onPositionChanged: [{ type: Output, args: ['positionChanged',] }],\n _animationStartListener: [{ type: HostListener, args: ['@transform.start', ['$event'],] }],\n _animationDoneListener: [{ type: HostListener, args: ['@transform.done', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDrawer, [{\n type: Component,\n args: [{\n selector: 'mat-drawer',\n exportAs: 'matDrawer',\n template: \"<div class=\\\"mat-drawer-inner-container\\\">\\r\\n <ng-content></ng-content>\\r\\n</div>\\r\\n\",\n animations: [matDrawerAnimations.transformDrawer],\n 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 },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc2.FocusTrapFactory }, { type: ɵngcc2.FocusMonitor }, { type: ɵngcc3.Platform }, { type: ɵngcc0.NgZone }, { 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 }] }]; }, { _animationState: [{\n type: HostBinding,\n args: ['@transform']\n }], openedChange: [{\n type: Output\n }], _openedStream: [{\n type: Output,\n args: ['opened']\n }], _closedStream: [{\n type: Output,\n args: ['closed']\n }], onPositionChanged: [{\n type: Output,\n args: ['positionChanged']\n }], 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 }], openedStart: [{\n type: Output\n }], closedStart: [{\n type: Output\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationStartListener: [{\n type: HostListener,\n args: ['@transform.start', ['$event']]\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationDoneListener: [{\n type: HostListener,\n args: ['@transform.done', ['$event']]\n }] }); })();\n/**\n * `<mat-drawer-container>` component.\n *\n * This is the parent component to one or two `<mat-drawer>`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.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() { return this._start; }\n /** The drawer child with the `end` position. */\n get end() { return this._end; }\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() { return this._autosize; }\n set autosize(value) { this._autosize = coerceBooleanProperty(value); }\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 // @breaking-change 10.0.0 Remove `_container` check once container parameter is required.\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.pipe(debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed)).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.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.pipe(takeUntil(this._drawers.changes)).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.asObservable().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.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) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n }\n else {\n if (this._start != null) {\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 = function MatDrawerContainer_Factory(t) { return new (t || MatDrawerContainer)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ViewportRuler), ɵngcc0.ɵɵdirectiveInject(MAT_DRAWER_DEFAULT_AUTOSIZE), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatDrawerContainer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDrawerContainer, selectors: [[\"mat-drawer-container\"]], contentQueries: function MatDrawerContainer_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatDrawerContent, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatDrawer, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._content = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n } }, viewQuery: function MatDrawerContainer_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatDrawerContent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._userContent = _t.first);\n } }, hostAttrs: [1, \"mat-drawer-container\"], hostVars: 2, hostBindings: function MatDrawerContainer_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n } }, inputs: { autosize: \"autosize\", hasBackdrop: \"hasBackdrop\" }, outputs: { backdropClick: \"backdropClick\" }, exportAs: [\"matDrawerContainer\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }])], ngContentSelectors: _c2, decls: 4, vars: 2, consts: [[\"class\", \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\", \"click\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"mat-drawer-backdrop\", 3, \"click\"]], template: function MatDrawerContainer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c1);\n ɵngcc0.ɵɵtemplate(0, MatDrawerContainer_div_0_Template, 1, 2, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵtemplate(3, MatDrawerContainer_mat_drawer_content_3_Template, 2, 0, \"mat-drawer-content\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasBackdrop);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx._content);\n } }, directives: [ɵngcc5.NgIf, MatDrawerContent], styles: [_c5], encapsulation: 2, changeDetection: 0 });\nMatDrawerContainer.ctorParameters = () => [\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: ElementRef },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: ViewportRuler },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_DRAWER_DEFAULT_AUTOSIZE,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatDrawerContainer.propDecorators = {\n _allDrawers: [{ type: ContentChildren, 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: [{ type: ContentChild, args: [MatDrawerContent,] }],\n _userContent: [{ type: ViewChild, args: [MatDrawerContent,] }],\n autosize: [{ type: Input }],\n hasBackdrop: [{ type: Input }],\n backdropClick: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDrawerContainer, [{\n type: Component,\n args: [{\n selector: 'mat-drawer-container',\n exportAs: 'matDrawerContainer',\n template: \"<div class=\\\"mat-drawer-backdrop\\\" (click)=\\\"_onBackdropClicked()\\\" *ngIf=\\\"hasBackdrop\\\"\\n [class.mat-drawer-shown]=\\\"_isShowingBackdrop()\\\"></div>\\n\\n<ng-content select=\\\"mat-drawer\\\"></ng-content>\\n\\n<ng-content select=\\\"mat-drawer-content\\\">\\n</ng-content>\\n<mat-drawer-content *ngIf=\\\"!_content\\\">\\n <ng-content></ng-content>\\n</mat-drawer-content>\\n\",\n host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\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-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc4.Directionality, decorators: [{\n type: Optional\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.ViewportRuler }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DRAWER_DEFAULT_AUTOSIZE]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { backdropClick: [{\n type: Output\n }], autosize: [{\n type: Input\n }], hasBackdrop: [{\n type: Input\n }], _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 }] }); })();\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 = function MatSidenavContent_Factory(t) { return new (t || MatSidenavContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(forwardRef(() => MatSidenavContainer)), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nMatSidenavContent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSidenavContent, selectors: [[\"mat-sidenav-content\"]], hostAttrs: [1, \"mat-drawer-content\", \"mat-sidenav-content\"], hostVars: 4, hostBindings: function MatSidenavContent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function MatSidenavContent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2, changeDetection: 0 });\nMatSidenavContent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: MatSidenavContainer, decorators: [{ type: Inject, args: [forwardRef(() => MatSidenavContainer),] }] },\n { type: ElementRef },\n { type: ScrollDispatcher },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenavContent, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-content',\n template: '<ng-content></ng-content>',\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 }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: MatSidenavContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatSidenavContainer)]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.ScrollDispatcher }, { type: ɵngcc0.NgZone }]; }, null); })();\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() { return this._fixedInViewport; }\n set fixedInViewport(value) { this._fixedInViewport = coerceBooleanProperty(value); }\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() { return this._fixedTopGap; }\n set fixedTopGap(value) { this._fixedTopGap = coerceNumberProperty(value); }\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() { return this._fixedBottomGap; }\n set fixedBottomGap(value) { this._fixedBottomGap = coerceNumberProperty(value); }\n}\nMatSidenav.ɵfac = function MatSidenav_Factory(t) { return ɵMatSidenav_BaseFactory(t || MatSidenav); };\nMatSidenav.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSidenav, selectors: [[\"mat-sidenav\"]], hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\", \"mat-sidenav\"], hostVars: 17, hostBindings: function MatSidenav_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"align\", null);\n ɵngcc0.ɵɵstyleProp(\"top\", ctx.fixedInViewport ? ctx.fixedTopGap : null, \"px\")(\"bottom\", ctx.fixedInViewport ? ctx.fixedBottomGap : null, \"px\");\n ɵngcc0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened)(\"mat-sidenav-fixed\", ctx.fixedInViewport);\n } }, inputs: { fixedInViewport: \"fixedInViewport\", fixedTopGap: \"fixedTopGap\", fixedBottomGap: \"fixedBottomGap\" }, exportAs: [\"matSidenav\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 2, vars: 0, consts: [[1, \"mat-drawer-inner-container\"]], template: function MatSidenav_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, encapsulation: 2, data: { animation: [matDrawerAnimations.transformDrawer] }, changeDetection: 0 });\nMatSidenav.propDecorators = {\n fixedInViewport: [{ type: Input }],\n fixedTopGap: [{ type: Input }],\n fixedBottomGap: [{ type: Input }]\n};\nconst ɵMatSidenav_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatSidenav);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenav, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav',\n exportAs: 'matSidenav',\n template: \"<div class=\\\"mat-drawer-inner-container\\\">\\r\\n <ng-content></ng-content>\\r\\n</div>\\r\\n\",\n animations: [matDrawerAnimations.transformDrawer],\n 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 },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], null, { fixedInViewport: [{\n type: Input\n }], fixedTopGap: [{\n type: Input\n }], fixedBottomGap: [{\n type: Input\n }] }); })();\nclass MatSidenavContainer extends MatDrawerContainer {\n}\nMatSidenavContainer.ɵfac = function MatSidenavContainer_Factory(t) { return ɵMatSidenavContainer_BaseFactory(t || MatSidenavContainer); };\nMatSidenavContainer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSidenavContainer, selectors: [[\"mat-sidenav-container\"]], contentQueries: function MatSidenavContainer_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatSidenavContent, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatSidenav, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._content = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n } }, hostAttrs: [1, \"mat-drawer-container\", \"mat-sidenav-container\"], hostVars: 2, hostBindings: function MatSidenavContainer_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n } }, exportAs: [\"matSidenavContainer\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c4, decls: 4, vars: 2, consts: [[\"class\", \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\", \"click\", 4, \"ngIf\"], [\"cdkScrollable\", \"\", 4, \"ngIf\"], [1, \"mat-drawer-backdrop\", 3, \"click\"], [\"cdkScrollable\", \"\"]], template: function MatSidenavContainer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c3);\n ɵngcc0.ɵɵtemplate(0, MatSidenavContainer_div_0_Template, 1, 2, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵtemplate(3, MatSidenavContainer_mat_sidenav_content_3_Template, 2, 0, \"mat-sidenav-content\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasBackdrop);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx._content);\n } }, directives: [ɵngcc5.NgIf, MatSidenavContent, ɵngcc1.CdkScrollable], styles: [_c5], encapsulation: 2, changeDetection: 0 });\nMatSidenavContainer.propDecorators = {\n _allDrawers: [{ type: ContentChildren, 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: [{ type: ContentChild, args: [MatSidenavContent,] }]\n};\nconst ɵMatSidenavContainer_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatSidenavContainer);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenavContainer, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-container',\n exportAs: 'matSidenavContainer',\n template: \"<div class=\\\"mat-drawer-backdrop\\\" (click)=\\\"_onBackdropClicked()\\\" *ngIf=\\\"hasBackdrop\\\"\\n [class.mat-drawer-shown]=\\\"_isShowingBackdrop()\\\"></div>\\n\\n<ng-content select=\\\"mat-sidenav\\\"></ng-content>\\n\\n<ng-content select=\\\"mat-sidenav-content\\\">\\n</ng-content>\\n<mat-sidenav-content *ngIf=\\\"!_content\\\" cdkScrollable>\\n <ng-content></ng-content>\\n</mat-sidenav-content>\\n\",\n host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\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-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"]\n }]\n }], null, { _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.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatSidenavModule });\nMatSidenavModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatSidenavModule_Factory(t) { return new (t || MatSidenavModule)(); }, imports: [[\n CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule,\n ], CdkScrollableModule,\n MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatSidenavModule, { declarations: function () { return [MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent]; }, imports: function () { return [CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule]; }, exports: function () { return [CdkScrollableModule,\n MatCommonModule, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenavModule, [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule,\n ],\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 }], null, null); })();\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, MAT_DRAWER_CONTAINER as ɵangular_material_src_material_sidenav_sidenav_a };\n\n//# sourceMappingURL=sidenav.js.map","import { Injectable } from '@angular/core';\r\nimport { AppHttpClient } from '../../core/http/app-http-client.service';\r\nimport { PaginatedBackendResponse } from '../../core/types/pagination/paginated-backend-response';\r\nimport { BackendResponse } from '@common/core/types/backend-response';\r\nimport { Plan } from '@common/core/types/models/Plan';\r\nimport { PaginationParams } from '@common/core/types/pagination/pagination-params';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class Plans {\r\n static BASE_URI = 'billing-plan';\r\n constructor(private http: AppHttpClient) {}\r\n\r\n public all(params?: PaginationParams): PaginatedBackendResponse<Plan> {\r\n return this.http.get(Plans.BASE_URI, params);\r\n }\r\n\r\n public get(id: number): BackendResponse<{plan: Plan}> {\r\n return this.http.get(`${Plans.BASE_URI}/${id}`);\r\n }\r\n\r\n public create(params: object): BackendResponse<{plan: Plan}> {\r\n return this.http.post(Plans.BASE_URI, params);\r\n }\r\n\r\n public update(id: number, params: object): BackendResponse<{plan: Plan}> {\r\n return this.http.put(`${Plans.BASE_URI}/${id}`, params);\r\n }\r\n\r\n public delete(ids: number[]): BackendResponse<void> {\r\n return this.http.delete(`${Plans.BASE_URI}/${ids}`);\r\n }\r\n\r\n public sync(): BackendResponse<void> {\r\n return this.http.post(`${Plans.BASE_URI}/sync`);\r\n }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {FullPlanNameComponent} from './full-plan-name.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n FullPlanNameComponent,\r\n ],\r\n exports: [\r\n FullPlanNameComponent,\r\n ]\r\n})\r\nexport class FullPlanNameModule {}\r\n","import { Injectable } from '@angular/core';\r\nimport {UploadValidator} from './upload-validator';\r\nimport {FileSizeValidation} from './validations/file-size-validation';\r\nimport {AllowedExtensionsValidation} from './validations/allowed-extensions-validation';\r\nimport {BlockedExtensionsValidation} from './validations/blocked-extensions-validation';\r\nimport {convertToBytes} from '../../core/utils/convertToBytes';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DefaultUploadValidator extends UploadValidator {\r\n protected readonly DEFAULT_MAX_FILE_SIZE_MB = 8;\r\n public showToast = true;\r\n\r\n protected initValidations() {\r\n this.validations.push(\r\n new FileSizeValidation(\r\n {maxSize: this.getMaxFileSize()},\r\n this.i18n\r\n )\r\n );\r\n\r\n const allowedExtensions = this.getAllowedExtensions(),\r\n blockedExtensions = this.getBlockedExtensions();\r\n\r\n if (allowedExtensions && allowedExtensions.length) {\r\n this.validations.push(new AllowedExtensionsValidation(\r\n {extensions: allowedExtensions}, this.i18n\r\n ));\r\n }\r\n\r\n if (blockedExtensions && blockedExtensions.length) {\r\n this.validations.push(new BlockedExtensionsValidation(\r\n {extensions: blockedExtensions}, this.i18n\r\n ));\r\n }\r\n }\r\n\r\n protected getMaxFileSize(): number {\r\n return this.settings.get(\r\n 'uploads.max_size',\r\n convertToBytes(this.DEFAULT_MAX_FILE_SIZE_MB, 'MB')\r\n );\r\n }\r\n\r\n protected getAllowedExtensions() {\r\n return this.settings.getJson('uploads.allowed_extensions');\r\n }\r\n\r\n protected getBlockedExtensions() {\r\n return this.settings.getJson('uploads.blocked_extensions');\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {UploadQueueItem} from './upload-queue-item';\r\nimport {BehaviorSubject, EMPTY, from, ReplaySubject, Subject, throwError} from 'rxjs';\r\nimport {catchError, filter, map, mergeMap, takeUntil} from 'rxjs/operators';\r\nimport {UploadedFile} from '../uploaded-file';\r\nimport {UploadCompletedEvent, UploadEvent, UploadEventTypes, UploadProgressEvent} from '../utils/upload-progress-event';\r\nimport {UploadFileResponse, UploadsApiService} from '../uploads-api.service';\r\nimport {FileEntry} from '../types/file-entry';\r\nimport {UploadValidator} from '../validation/upload-validator';\r\nimport {BackendErrorResponse} from '../../core/types/backend-error-response';\r\nimport {DefaultUploadValidator} from '../validation/default-upload-validator';\r\nimport {BackendResponse} from '@common/core/types/backend-response';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {HttpErrors, UPLOAD_FAIL_LEARN_MORE_LINK} from '@common/core/http/errors/http-errors.enum';\r\nimport {UploadApiConfig} from '@common/uploads/types/upload-api-config';\r\nimport {CurrentUser} from '@common/auth/current-user';\r\nimport {Settings} from '@common/core/config/settings.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UploadQueueService {\r\n public uploads$ = new BehaviorSubject<UploadQueueItem[]>([]);\r\n public totalProgress$ = new ReplaySubject<number>(1);\r\n public uploadsAdded$ = new Subject<UploadQueueItem[]>();\r\n public count$ = new BehaviorSubject<{pending: number, completed: number}>({pending: 0, completed: 0});\r\n\r\n constructor(\r\n private api: UploadsApiService,\r\n private defaultValidator: DefaultUploadValidator,\r\n private toast: Toast,\r\n private currentUser: CurrentUser,\r\n private settings: Settings,\r\n ) {}\r\n\r\n public isEmpty(): boolean {\r\n return !this.uploads$.value.length;\r\n }\r\n\r\n public getAllCompleted(): FileEntry[] {\r\n return this.uploads$.value\r\n .filter(queueItem => queueItem.completed)\r\n .map(queueItem => queueItem.fileEntry);\r\n }\r\n\r\n public updateTotalProgress() {\r\n const progress = this.uploads$.value.map(upload => upload.progress$.value.percentage || 0);\r\n this.totalProgress$.next(progress.reduce((p, c) => p + c, 0) / progress.length);\r\n }\r\n\r\n public totalProgress() {\r\n return this.totalProgress$.asObservable();\r\n }\r\n\r\n public start(files: UploadedFile[]|{[key: string]: UploadedFile}, config: UploadApiConfig = {}): BackendResponse<UploadFileResponse> {\r\n const validator = config.validator || this.defaultValidator;\r\n let uploadQueueItems = [] as UploadQueueItem[];\r\n\r\n // push new uploads onto existing queue\r\n if (Array.isArray(files)) {\r\n uploadQueueItems = this.transformUploads(files, validator);\r\n this.uploads$.next(this.uploads$.value.concat(uploadQueueItems));\r\n this.uploadsAdded$.next(uploadQueueItems);\r\n\r\n // replace existing uploads in the queue with new upload by specified upload ID\r\n } else {\r\n const replacements = this.uploads$.value.map(queueItem => {\r\n if (files[queueItem.id]) {\r\n const transformed = this.transformUploads([files[queueItem.id]], validator, queueItem.id)[0];\r\n uploadQueueItems.push(transformed);\r\n return transformed;\r\n } else {\r\n return queueItem;\r\n }\r\n });\r\n this.uploads$.next(replacements);\r\n }\r\n\r\n this.updateCount();\r\n\r\n return from(uploadQueueItems.filter(u => !u.error$.value))\r\n .pipe(\r\n mergeMap(uploadQueueItem => {\r\n return this.api.upload(uploadQueueItem.uploadedFile, config).pipe(\r\n catchError((errResponse: BackendErrorResponse) => {\r\n this.handleUploadFailure(errResponse, uploadQueueItem, validator);\r\n // if one item in the queue fails, either continue uploading other items\r\n // or immediately stop uploading and bubble up error to subscribers\r\n return config.bubbleError ? throwError(errResponse) : EMPTY;\r\n }),\r\n takeUntil(uploadQueueItem.canceled$),\r\n map(response => {\r\n this.handleUploadEvent(response, uploadQueueItem, config.willProcessFiles);\r\n // assign queue item ID to upload completed response so\r\n // file entry can be matched to specific upload queue item\r\n if (response.name === UploadEventTypes.COMPLETED) {\r\n response.body.queueItemId = uploadQueueItem.id;\r\n }\r\n return response;\r\n }),\r\n );\r\n }, 1),\r\n filter(e => e.name === UploadEventTypes.COMPLETED),\r\n map((e: UploadCompletedEvent) => e.body)\r\n );\r\n }\r\n\r\n public updateProgress(id: string, e: UploadProgressEvent) {\r\n const queueItem = this.find(id);\r\n if ( ! queueItem) return;\r\n\r\n queueItem.setProgress({\r\n eta: e.eta,\r\n speed: e.speed,\r\n percentage: e.progress,\r\n totalBytes: e.totalBytes,\r\n completedBytes: e.completedBytes,\r\n });\r\n\r\n this.updateTotalProgress();\r\n }\r\n\r\n public completeUpload(id: string, response: UploadFileResponse) {\r\n const queueItem = this.find(id);\r\n if ( ! queueItem) return;\r\n\r\n queueItem.uploadedResponse$.next(response);\r\n queueItem.fileEntry = response.fileEntry;\r\n queueItem.complete();\r\n this.updateTotalProgress();\r\n }\r\n\r\n public errorUpload(id: string, message?: string) {\r\n this.find(id).addError(message);\r\n }\r\n\r\n public reset() {\r\n this.uploads$.value.forEach(u => u.cancel());\r\n this.uploads$.next([]);\r\n }\r\n\r\n public remove(id: string) {\r\n const i = this.uploads$.value.findIndex(u => u.id === id),\r\n upload = this.uploads$.value[i];\r\n upload.completed ? upload.finalize() : upload.cancel();\r\n this.uploads$.value.splice(i, 1);\r\n this.uploads$.next(this.uploads$.value);\r\n }\r\n\r\n public find(id: string): UploadQueueItem {\r\n return this.uploads$.value.find(u => u.id === id);\r\n }\r\n\r\n /**\r\n * Transform specified files into upload queue items.\r\n */\r\n protected transformUploads(files: UploadedFile[], validator: UploadValidator, queueId?: string) {\r\n return files.map(file => {\r\n const activeUpload = new UploadQueueItem(file, queueId);\r\n\r\n // validate upload\r\n if (validator) {\r\n const result = validator.validate(file);\r\n if (result.failed) activeUpload.addError(result.errorMessage);\r\n }\r\n\r\n return activeUpload;\r\n });\r\n }\r\n\r\n protected handleUploadEvent(event: UploadEvent, upload: UploadQueueItem, willProcessFiles = false) {\r\n if (event.name === UploadEventTypes.PROGRESS) {\r\n // upload is considered complete when progress equals 100\r\n // but file processing for large files might take some time\r\n // after file is fully uploaded so we should only set\r\n // progress as 100 on final completed response\r\n if (event.progress === 100) {\r\n // TODO: implement processing functionality for chunked upploading\r\n event = {...event, progress: 99};\r\n if (willProcessFiles) {\r\n upload.processing$.next(true);\r\n }\r\n }\r\n this.updateProgress(upload.id, event);\r\n } else if (event.name === UploadEventTypes.COMPLETED) {\r\n this.completeUpload(upload.id, event.body);\r\n this.updateCount();\r\n }\r\n }\r\n\r\n protected handleUploadFailure(response: BackendErrorResponse, upload: UploadQueueItem, validator: UploadValidator) {\r\n let msg = response?.errors?.file,\r\n showLearnMoreButton = null;\r\n if ( ! msg) {\r\n msg = HttpErrors.DefaultUpload;\r\n showLearnMoreButton = this.currentUser.isAdmin() && !this.settings.get('site.hide_docs_buttons');\r\n }\r\n\r\n this.errorUpload(upload.id, msg);\r\n this.updateCount();\r\n this.updateTotalProgress();\r\n\r\n if (validator.showToast) {\r\n this.toast.open(msg, {action: showLearnMoreButton ? 'Learn More' : null})\r\n .onAction()\r\n .subscribe(() => {\r\n window.open(UPLOAD_FAIL_LEARN_MORE_LINK);\r\n });\r\n }\r\n }\r\n\r\n private updateCount() {\r\n const pending = this.uploads$.value.filter(u => u.inProgress).length;\r\n this.count$.next({pending, completed: this.uploads$.value.length - pending});\r\n }\r\n}\r\n","import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';\r\nimport { randomString } from '../../core/utils/random-string';\r\nimport { UploadedFile } from '../uploaded-file';\r\nimport { FileEntry } from '../types/file-entry';\r\nimport { UploadFileResponse } from '@common/uploads/uploads-api.service';\r\n\r\nexport interface UploadQueueItemProgress {\r\n percentage?: number;\r\n speed?: string;\r\n eta?: string;\r\n totalBytes?: number;\r\n completedBytes?: number;\r\n}\r\n\r\nexport class UploadQueueItem {\r\n id: string;\r\n canceled$: Subject<boolean> = new Subject();\r\n processing$ = new BehaviorSubject<boolean>(false);\r\n\r\n // file info (static)\r\n uploadedFile: UploadedFile;\r\n\r\n // backend response once file is uploaded\r\n uploadedResponse$ = new ReplaySubject<UploadFileResponse>(1);\r\n\r\n // uploaded file entry (only available on completed uploads)\r\n fileEntry: FileEntry;\r\n\r\n // upload progress information (will change)\r\n progress$ = new BehaviorSubject<UploadQueueItemProgress>({percentage: 0});\r\n\r\n error$ = new BehaviorSubject<string>(null);\r\n\r\n // custom data that can be attached to queue item\r\n public customData: object = {};\r\n\r\n get completed(): boolean {\r\n return !this.processing$.value && this.progress$.value.percentage === 100;\r\n }\r\n\r\n get inProgress(): boolean {\r\n return !this.error$.value && !this.completed;\r\n }\r\n\r\n constructor(file: UploadedFile, queueId?: string) {\r\n this.uploadedFile = file;\r\n this.id = queueId || randomString();\r\n }\r\n\r\n public cancel() {\r\n // cancelling before finalizing might cause infinite loop\r\n this.canceled$.next(true);\r\n this.finalize();\r\n }\r\n\r\n public complete() {\r\n this.setProgress({percentage: 100, eta: null});\r\n this.finalize();\r\n }\r\n\r\n public finalize() {\r\n this.uploadedResponse$.complete();\r\n this.canceled$.complete();\r\n this.progress$.complete();\r\n }\r\n\r\n public finishProcessing() {\r\n this.processing$.next(false);\r\n this.processing$.complete();\r\n }\r\n\r\n public addError(message: string) {\r\n this.error$.next(message);\r\n }\r\n\r\n public setProgress(data: Partial<UploadQueueItemProgress>) {\r\n this.progress$.next({\r\n ...this.progress$.value,\r\n ...data,\r\n });\r\n }\r\n}\r\n","import { UploadedFile } from '../../uploaded-file';\r\nimport { UploadValidation } from './upload-validation';\r\nimport { Translations } from '../../../core/translations/translations.service';\r\n\r\nexport class AllowedExtensionsValidation extends UploadValidation {\r\n constructor(\r\n protected params: {extensions: string[]},\r\n protected i18n: Translations\r\n ) {\r\n super();\r\n\r\n this.errorMessage = this.i18n.t(\r\n 'Only these file types are allowed: :extensions',\r\n {extensions: this.params.extensions.join(', ')}\r\n );\r\n }\r\n\r\n public fails(file: UploadedFile) {\r\n return ! this.params.extensions.some(extension => {\r\n return extension.toLowerCase() === file.extension.toLowerCase();\r\n });\r\n }\r\n}\r\n","import { UploadedFile } from '../../uploaded-file';\r\nimport { UploadValidation } from './upload-validation';\r\nimport {Translations} from '@common/core/translations/translations.service';\r\n\r\nexport class BlockedExtensionsValidation extends UploadValidation {\r\n constructor(\r\n protected params: {extensions: string[]},\r\n protected i18n: Translations\r\n ) {\r\n super();\r\n\r\n this.errorMessage = this.i18n.t(\r\n 'These file types are not allowed: :extensions',\r\n {extensions: this.params.extensions.join(', ')}\r\n );\r\n }\r\n\r\n public fails(file: UploadedFile) {\r\n return this.params.extensions.some(extension => {\r\n return extension === file.extension;\r\n });\r\n }\r\n}\r\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SkeletonComponent} from './skeleton.component';\n\n@NgModule({\n declarations: [\n SkeletonComponent,\n ],\n imports: [\n CommonModule\n ],\n exports: [\n SkeletonComponent,\n ]\n})\nexport class SkeletonModule {\n}\n"]}