{"version":3,"file":"default-node_modules_angular_material_fesm2020_paginator_mjs-node_modules_angular_material_fe-0bf83c.b6969bcb20dd2ad8.js","mappings":"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","names":["i0","_r8","ctx_r7","ctx_r4","_r10","ctx_r9","_r12","ctx_r11","MatPaginatorIntl","constructor","this","changes","Subject","itemsPerPageLabel","nextPageLabel","previousPageLabel","firstPageLabel","lastPageLabel","getRangeLabel","page","pageSize","length","startIndex","Math","max","min","ɵfac","ɵprov","factory","MAT_PAGINATOR_INTL_PROVIDER","provide","deps","Optional","SkipSelf","useFactory","MAT_PAGINATOR_INTL_PROVIDER_FACTORY","parentIntl","MAT_PAGINATOR_DEFAULT_OPTIONS","InjectionToken","_MatPaginatorMixinBase","mixinDisabled","mixinInitialized","_MatPaginatorBase","_intl","_changeDetectorRef","defaults","super","_pageIndex","_length","_pageSizeOptions","_hidePageSize","_showFirstLastButtons","selectConfig","EventEmitter","_intlChanges","subscribe","markForCheck","pageSizeOptions","hidePageSize","showFirstLastButtons","_pageSize","pageIndex","value","coerceNumberProperty","_updateDisplayedPageSizeOptions","map","p","coerceBooleanProperty","ngOnInit","_initialized","_markInitialized","ngOnDestroy","unsubscribe","nextPage","hasNextPage","previousPageIndex","_emitPageEvent","previousPage","hasPreviousPage","firstPage","lastPage","getNumberOfPages","maxPageIndex","ceil","_changePageSize","floor","_nextButtonsDisabled","disabled","_previousButtonsDisabled","_displayedPageSizeOptions","slice","indexOf","push","sort","a","b","emit","ɵdir","inputs","MatPaginator","intl","changeDetectorRef","formFieldAppearance","_formFieldAppearance","ɵcmp","selectors","decls","ctx","i2","i3","i4","i5","i6","i7","styles","MatPaginatorModule","ɵmod","ɵinj","imports","CommonModule","MatButtonModule","MatSelectModule","MatTooltipModule","MatCommonModule","_r2","ctx_r1","ctx_r3","MAT_SORT_DEFAULT_OPTIONS","_MatSortBase","MatSort","_defaultOptions","sortables","Map","_stateChanges","start","_direction","sortChange","direction","disableClear","_disableClear","v","register","sortable","set","id","deregister","delete","active","getNextSortDirection","sortDirectionCycle","getSortDirectionCycle","sortOrder","reverse","nextDirectionIndex","ngOnChanges","next","complete","SORT_ANIMATION_TRANSITION","AnimationDurations","AnimationCurves","matSortAnimations","indicator","trigger","state","style","transform","transition","animate","leftPointer","rightPointer","arrowOpacity","opacity","arrowPosition","keyframes","allowChildren","query","animateChild","optional","MatSortHeaderIntl","MAT_SORT_HEADER_INTL_PROVIDER","MAT_SORT_HEADER_INTL_PROVIDER_FACTORY","_MatSortHeaderBase","MatSortHeader","_sort","_columnDef","_focusMonitor","_elementRef","_ariaDescriber","defaultOptions","_showIndicatorHint","_viewState","_arrowDirection","_disableViewStateAnimation","_sortActionDescription","_handleStateChanges","sortActionDescription","_updateSortActionDescription","name","_updateArrowDirection","_setAnimationTransitionState","toState","_isSorted","_sortButton","nativeElement","querySelector","ngAfterViewInit","monitor","origin","newState","_setIndicatorHintVisible","stopMonitoring","_rerenderSubscription","visible","_isDisabled","fromState","viewState","_toggleOnInteraction","_handleClick","_handleKeydown","event","keyCode","SPACE","ENTER","preventDefault","_getArrowDirectionState","_getArrowViewState","_getAriaSortAttribute","_renderArrow","newDescription","removeDescription","describe","merge","attrs","changeDetection","MatSortModule","mixinHasStickyInput","base","args","_sticky","_hasStickyChanged","sticky","prevValue","hasStickyChanged","resetStickyChanged","CDK_TABLE","CdkCellDef","template","CdkHeaderCellDef","CdkFooterCellDef","CdkColumnDefBase","_CdkColumnDefBase","CdkColumnDef","_table","_stickyEnd","_name","_setNameInput","stickyEnd","_updateColumnCssClassName","_columnCssClassName","cssClassFriendlyName","replace","dirIndex","_t","useExisting","BaseCdkCell","columnDef","elementRef","classList","add","CdkHeaderCell","CdkCell","nodeType","tableRole","getAttribute","setAttribute","_Schedule","tasks","endTasks","_COALESCED_STYLE_SCHEDULER","_CoalescedStyleScheduler","_ngZone","_currentSchedule","_destroyed","schedule","task","_createScheduleIfNeeded","scheduleEnd","_getScheduleObservable","pipe","takeUntil","isStable","from","Promise","resolve","undefined","onStable","take","BaseRowDef","_differs","_columnsDiffer","columns","currentValue","find","create","diff","getColumnsDiff","extractCellTemplate","column","CdkHeaderRowDef","headerCell","CdkFooterRowDef","footerCell","cell","features","CdkHeaderRowDefBase","_CdkHeaderRowDefBase","CdkFooterRowDefBase","_CdkFooterRowDefBase","CdkRowDef","CdkCellOutlet","_viewContainer","mostRecentCellOutlet","CdkHeaderRow","encapsulation","CdkRow","CdkNoDataRow","templateRef","_contentClassName","STICKY_DIRECTIONS","StickyStyler","_isNativeHtmlTable","_stickCellCss","_coalescedStyleScheduler","_isBrowser","_needsPositionStickyOnElement","_positionListener","_cachedCellWidths","_borderCellCss","top","bottom","left","right","clearStickyPositioning","rows","stickyDirections","elementsToClear","row","ELEMENT_NODE","i","children","element","_removeStickyStyle","updateStickyColumns","stickyStartStates","stickyEndStates","recalculateCellWidths","some","stickyColumnsUpdated","sizes","stickyEndColumnsUpdated","firstRow","numCells","cellWidths","_getCellWidths","startPositions","_getStickyStartColumnPositions","endPositions","_getStickyEndColumnPositions","lastStickyStart","lastIndexOf","firstStickyEnd","isRtl","end","_addStickyStyle","width","index","stickRows","rowsToStick","stickyStates","position","states","stickyOffsets","stickyCellHeights","elementsToStick","rowIndex","stickyOffset","Array","height","getBoundingClientRect","borderedRowIndex","offset","isBorderedRowIndex","stickyHeaderRowsUpdated","offsets","elements","stickyFooterRowsUpdated","updateStickyFooterContainer","tableElement","tfoot","dir","remove","zIndex","_getCalculatedZIndex","dirValue","isBorderElement","cssText","zIndexIncrements","firstRowCells","widths","positions","nextPosition","STICKY_POSITIONING_LISTENER","DataRowOutlet","viewContainer","HeaderRowOutlet","FooterRowOutlet","NoDataRowOutlet","CdkTable","role","_dir","_document","_platform","_viewRepeater","_viewportRuler","_stickyPositioningListener","_onDestroy","_columnDefsByName","_customColumnDefs","Set","_customRowDefs","_customHeaderRowDefs","_customFooterRowDefs","_headerRowDefChanged","_footerRowDefChanged","_stickyColumnStylesNeedReset","_forceRecalculateCellWidths","_cachedRenderRowsMap","stickyCssClass","needsPositionStickyOnElement","_isShowingNoDataRow","_multiTemplateDataRows","_fixedLayout","contentChanged","viewChange","BehaviorSubject","Number","MAX_VALUE","nodeName","trackBy","_trackByFn","fn","dataSource","_dataSource","_switchDataSource","multiTemplateDataRows","_rowOutlet","_forceRenderDataRows","updateStickyColumnStyles","fixedLayout","_setupStickyStyler","_applyNativeTableSections","_dataDiffer","_i","dataRow","dataIndex","data","change","ngAfterContentChecked","_cacheRowDefs","_cacheColumnDefs","rowDefsChanged","_renderUpdatedColumns","_forceRenderHeaderRows","_forceRenderFooterRows","_rowDefs","_renderChangeSubscription","_observeRenderChanges","_checkStickyStates","_headerRowOutlet","_footerRowOutlet","forEach","def","clear","_headerRowDefs","_footerRowDefs","_defaultRowDef","isDataSource","disconnect","renderRows","_renderRows","_getAllRenderRows","_updateNoDataRow","applyChanges","record","_adjustedPreviousIndex","currentIndex","_getEmbeddedViewArgs","item","operation","context","_renderCellTemplateForItem","rowDef","_updateRowIndexContext","forEachIdentityChange","get","$implicit","NgZone","addColumnDef","removeColumnDef","addRowDef","removeRowDef","addHeaderRowDef","headerRowDef","removeHeaderRowDef","addFooterRowDef","footerRowDef","removeFooterRowDef","setNoDataRow","noDataRow","_customNoDataRow","updateStickyHeaderRowStyles","headerRows","_getRenderedRows","thead","display","_stickyStyler","updateStickyFooterRowStyles","footerRows","dataRows","headerRow","_addStickyColumnStyles","footerRow","values","prevCachedRenderRows","_data","renderRowsForData","_getRenderRowsForData","has","WeakMap","j","renderRow","cache","_getRowDefs","cachedRenderRows","shift","mergeArrayAndSet","_getOwnDefs","_contentColumnDefs","_contentHeaderRowDefs","_contentFooterRowDefs","_contentRowDefs","defaultRowDefs","filter","when","columnsDiffReducer","acc","dataColumnsChanged","reduce","headerColumnsChanged","footerColumnsChanged","dataStream","connect","isObservable","obj","Observable","isFunction","lift","isArray","of","_renderRow","columnDefs","columnName","rowOutlet","renderedRows","viewRef","rootNodes","rowDefs","outlet","view","createEmbeddedView","cellTemplate","_getCellTemplates","renderIndex","count","first","last","even","odd","columnId","documentFragment","createDocumentFragment","sections","tag","outlets","_noDataRowOutlet","section","createElement","appendChild","stickyCheckReducer","d","isBrowser","items","_noDataRow","shouldShow","container","rootNode","i1","DOCUMENT","_VIEW_REPEATER_STRATEGY","useClass","_DisposeViewRepeaterStrategy","useValue","ngContentSelectors","_c0","array","concat","CdkTableModule","ScrollingModule","MatTable","arguments","t","table_c0","MatCellDef","MatHeaderCellDef","MatColumnDef","MatHeaderCell","MatCell","MatHeaderRowDef","MatRowDef","MatHeaderRow","MatRow","MatNoDataRow","MatTableModule","_MatTableDataSource","DataSource","initialData","_renderData","_filter","_internalPageChanges","_renderChangesSubscription","sortingDataAccessor","sortHeaderId","_isNumberValue","numberValue","sortData","valueA","valueB","valueAType","valueBType","comparatorResult","filterPredicate","dataStr","Object","keys","currentTerm","key","toLowerCase","transformedFilter","trim","_updateChangeSubscription","_filterData","paginator","_paginator","initialized","pageChange","filteredData","combineLatest","orderedData","_orderData","paginatedData","_pageData","_updatePaginator","filteredDataLength","then","lastPageIndex","newPageIndex","MatTableDataSource"],"sourceRoot":"webpack:///","sources":["./node_modules/@angular/material/fesm2020/paginator.mjs","./node_modules/@angular/material/fesm2020/sort.mjs","./node_modules/@angular/cdk/fesm2020/table.mjs","./node_modules/rxjs/dist/esm/internal/util/isObservable.js","./node_modules/@angular/material/fesm2020/table.mjs"],"sourcesContent":["import * as i2 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, Optional, SkipSelf, InjectionToken, EventEmitter, Directive, Input, Output, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, NgModule } from '@angular/core';\nimport * as i6 from '@angular/material/core';\nimport { mixinDisabled, mixinInitialized, MatCommonModule } from '@angular/material/core';\nimport * as i3 from '@angular/material/button';\nimport { MatButtonModule } from '@angular/material/button';\nimport * as i5 from '@angular/material/select';\nimport { MatSelectModule } from '@angular/material/select';\nimport * as i7 from '@angular/material/tooltip';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport * as i4 from '@angular/material/form-field';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * To modify the labels and text displayed, create a new instance of MatPaginatorIntl and\n * include it in a custom provider\n */\nclass MatPaginatorIntl {\n constructor() {\n /**\n * Stream to emit from when labels are changed. Use this to notify components when the labels have\n * changed after initialization.\n */\n this.changes = new Subject();\n /** A label for the page size selector. */\n this.itemsPerPageLabel = 'Items per page:';\n /** A label for the button that increments the current page. */\n this.nextPageLabel = 'Next page';\n /** A label for the button that decrements the current page. */\n this.previousPageLabel = 'Previous page';\n /** A label for the button that moves to the first page. */\n this.firstPageLabel = 'First page';\n /** A label for the button that moves to the last page. */\n this.lastPageLabel = 'Last page';\n /** A label for the range of items within the current page and the length of the whole list. */\n this.getRangeLabel = (page, pageSize, length) => {\n if (length == 0 || pageSize == 0) {\n return `0 of ${length}`;\n }\n length = Math.max(length, 0);\n const startIndex = page * pageSize;\n // If the start index exceeds the list length, do not try and fix the end index to the end.\n const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\n return `${startIndex + 1} – ${endIndex} of ${length}`;\n };\n }\n}\nMatPaginatorIntl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatPaginatorIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMatPaginatorIntl.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatPaginatorIntl, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatPaginatorIntl, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n/** @docs-private */\nfunction MAT_PAGINATOR_INTL_PROVIDER_FACTORY(parentIntl) {\n return parentIntl || new MatPaginatorIntl();\n}\n/** @docs-private */\nconst MAT_PAGINATOR_INTL_PROVIDER = {\n // If there is already an MatPaginatorIntl available, use that. Otherwise, provide a new one.\n provide: MatPaginatorIntl,\n deps: [[new Optional(), new SkipSelf(), MatPaginatorIntl]],\n useFactory: MAT_PAGINATOR_INTL_PROVIDER_FACTORY,\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** The default page size if there is no page size and there are no provided page size options. */\nconst DEFAULT_PAGE_SIZE = 50;\n/**\n * Change event object that is emitted when the user selects a\n * different page size or navigates to another page.\n */\nclass PageEvent {\n}\n/** Injection token that can be used to provide the default options for the paginator module. */\nconst MAT_PAGINATOR_DEFAULT_OPTIONS = new InjectionToken('MAT_PAGINATOR_DEFAULT_OPTIONS');\n// Boilerplate for applying mixins to _MatPaginatorBase.\n/** @docs-private */\nconst _MatPaginatorMixinBase = mixinDisabled(mixinInitialized(class {\n}));\n/**\n * Base class with all of the `MatPaginator` functionality.\n * @docs-private\n */\nclass _MatPaginatorBase extends _MatPaginatorMixinBase {\n constructor(_intl, _changeDetectorRef, defaults) {\n super();\n this._intl = _intl;\n this._changeDetectorRef = _changeDetectorRef;\n this._pageIndex = 0;\n this._length = 0;\n this._pageSizeOptions = [];\n this._hidePageSize = false;\n this._showFirstLastButtons = false;\n /** Used to configure the underlying `MatSelect` inside the paginator. */\n this.selectConfig = {};\n /** Event emitted when the paginator changes the page size or page index. */\n this.page = new EventEmitter();\n this._intlChanges = _intl.changes.subscribe(() => this._changeDetectorRef.markForCheck());\n if (defaults) {\n const { pageSize, pageSizeOptions, hidePageSize, showFirstLastButtons } = defaults;\n if (pageSize != null) {\n this._pageSize = pageSize;\n }\n if (pageSizeOptions != null) {\n this._pageSizeOptions = pageSizeOptions;\n }\n if (hidePageSize != null) {\n this._hidePageSize = hidePageSize;\n }\n if (showFirstLastButtons != null) {\n this._showFirstLastButtons = showFirstLastButtons;\n }\n }\n }\n /** The zero-based page index of the displayed list of items. Defaulted to 0. */\n get pageIndex() {\n return this._pageIndex;\n }\n set pageIndex(value) {\n this._pageIndex = Math.max(coerceNumberProperty(value), 0);\n this._changeDetectorRef.markForCheck();\n }\n /** The length of the total number of items that are being paginated. Defaulted to 0. */\n get length() {\n return this._length;\n }\n set length(value) {\n this._length = coerceNumberProperty(value);\n this._changeDetectorRef.markForCheck();\n }\n /** Number of items to display on a page. By default set to 50. */\n get pageSize() {\n return this._pageSize;\n }\n set pageSize(value) {\n this._pageSize = Math.max(coerceNumberProperty(value), 0);\n this._updateDisplayedPageSizeOptions();\n }\n /** The set of provided page size options to display to the user. */\n get pageSizeOptions() {\n return this._pageSizeOptions;\n }\n set pageSizeOptions(value) {\n this._pageSizeOptions = (value || []).map(p => coerceNumberProperty(p));\n this._updateDisplayedPageSizeOptions();\n }\n /** Whether to hide the page size selection UI from the user. */\n get hidePageSize() {\n return this._hidePageSize;\n }\n set hidePageSize(value) {\n this._hidePageSize = coerceBooleanProperty(value);\n }\n /** Whether to show the first/last buttons UI to the user. */\n get showFirstLastButtons() {\n return this._showFirstLastButtons;\n }\n set showFirstLastButtons(value) {\n this._showFirstLastButtons = coerceBooleanProperty(value);\n }\n ngOnInit() {\n this._initialized = true;\n this._updateDisplayedPageSizeOptions();\n this._markInitialized();\n }\n ngOnDestroy() {\n this._intlChanges.unsubscribe();\n }\n /** Advances to the next page if it exists. */\n nextPage() {\n if (!this.hasNextPage()) {\n return;\n }\n const previousPageIndex = this.pageIndex;\n this.pageIndex = this.pageIndex + 1;\n this._emitPageEvent(previousPageIndex);\n }\n /** Move back to the previous page if it exists. */\n previousPage() {\n if (!this.hasPreviousPage()) {\n return;\n }\n const previousPageIndex = this.pageIndex;\n this.pageIndex = this.pageIndex - 1;\n this._emitPageEvent(previousPageIndex);\n }\n /** Move to the first page if not already there. */\n firstPage() {\n // hasPreviousPage being false implies at the start\n if (!this.hasPreviousPage()) {\n return;\n }\n const previousPageIndex = this.pageIndex;\n this.pageIndex = 0;\n this._emitPageEvent(previousPageIndex);\n }\n /** Move to the last page if not already there. */\n lastPage() {\n // hasNextPage being false implies at the end\n if (!this.hasNextPage()) {\n return;\n }\n const previousPageIndex = this.pageIndex;\n this.pageIndex = this.getNumberOfPages() - 1;\n this._emitPageEvent(previousPageIndex);\n }\n /** Whether there is a previous page. */\n hasPreviousPage() {\n return this.pageIndex >= 1 && this.pageSize != 0;\n }\n /** Whether there is a next page. */\n hasNextPage() {\n const maxPageIndex = this.getNumberOfPages() - 1;\n return this.pageIndex < maxPageIndex && this.pageSize != 0;\n }\n /** Calculate the number of pages */\n getNumberOfPages() {\n if (!this.pageSize) {\n return 0;\n }\n return Math.ceil(this.length / this.pageSize);\n }\n /**\n * Changes the page size so that the first item displayed on the page will still be\n * displayed using the new page size.\n *\n * For example, if the page size is 10 and on the second page (items indexed 10-19) then\n * switching so that the page size is 5 will set the third page as the current page so\n * that the 10th item will still be displayed.\n */\n _changePageSize(pageSize) {\n // Current page needs to be updated to reflect the new page size. Navigate to the page\n // containing the previous page's first item.\n const startIndex = this.pageIndex * this.pageSize;\n const previousPageIndex = this.pageIndex;\n this.pageIndex = Math.floor(startIndex / pageSize) || 0;\n this.pageSize = pageSize;\n this._emitPageEvent(previousPageIndex);\n }\n /** Checks whether the buttons for going forwards should be disabled. */\n _nextButtonsDisabled() {\n return this.disabled || !this.hasNextPage();\n }\n /** Checks whether the buttons for going backwards should be disabled. */\n _previousButtonsDisabled() {\n return this.disabled || !this.hasPreviousPage();\n }\n /**\n * Updates the list of page size options to display to the user. Includes making sure that\n * the page size is an option and that the list is sorted.\n */\n _updateDisplayedPageSizeOptions() {\n if (!this._initialized) {\n return;\n }\n // If no page size is provided, use the first page size option or the default page size.\n if (!this.pageSize) {\n this._pageSize =\n this.pageSizeOptions.length != 0 ? this.pageSizeOptions[0] : DEFAULT_PAGE_SIZE;\n }\n this._displayedPageSizeOptions = this.pageSizeOptions.slice();\n if (this._displayedPageSizeOptions.indexOf(this.pageSize) === -1) {\n this._displayedPageSizeOptions.push(this.pageSize);\n }\n // Sort the numbers using a number-specific sort function.\n this._displayedPageSizeOptions.sort((a, b) => a - b);\n this._changeDetectorRef.markForCheck();\n }\n /** Emits an event notifying that a change of the paginator's properties has been triggered. */\n _emitPageEvent(previousPageIndex) {\n this.page.emit({\n previousPageIndex,\n pageIndex: this.pageIndex,\n pageSize: this.pageSize,\n length: this.length,\n });\n }\n}\n_MatPaginatorBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: _MatPaginatorBase, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Directive });\n_MatPaginatorBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: _MatPaginatorBase, inputs: { color: \"color\", pageIndex: \"pageIndex\", length: \"length\", pageSize: \"pageSize\", pageSizeOptions: \"pageSizeOptions\", hidePageSize: \"hidePageSize\", showFirstLastButtons: \"showFirstLastButtons\", selectConfig: \"selectConfig\" }, outputs: { page: \"page\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: _MatPaginatorBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: MatPaginatorIntl }, { type: i0.ChangeDetectorRef }, { type: undefined }]; }, propDecorators: { color: [{\n type: Input\n }], pageIndex: [{\n type: Input\n }], length: [{\n type: Input\n }], pageSize: [{\n type: Input\n }], pageSizeOptions: [{\n type: Input\n }], hidePageSize: [{\n type: Input\n }], showFirstLastButtons: [{\n type: Input\n }], selectConfig: [{\n type: Input\n }], page: [{\n type: Output\n }] } });\n/**\n * Component to provide navigation between paged information. Displays the size of the current\n * page, user-selectable options to change that size, what items are being shown, and\n * navigational button to go to the previous or next page.\n */\nclass MatPaginator extends _MatPaginatorBase {\n constructor(intl, changeDetectorRef, defaults) {\n super(intl, changeDetectorRef, defaults);\n if (defaults && defaults.formFieldAppearance != null) {\n this._formFieldAppearance = defaults.formFieldAppearance;\n }\n }\n}\nMatPaginator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatPaginator, deps: [{ token: MatPaginatorIntl }, { token: i0.ChangeDetectorRef }, { token: MAT_PAGINATOR_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatPaginator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatPaginator, selector: \"mat-paginator\", inputs: { disabled: \"disabled\" }, host: { attributes: { \"role\": \"group\" }, classAttribute: \"mat-paginator\" }, exportAs: [\"matPaginator\"], usesInheritance: true, ngImport: i0, template: \"
\\n
\\n
\\n
\\n {{_intl.itemsPerPageLabel}}\\n
\\n\\n 1\\\"\\n [appearance]=\\\"_formFieldAppearance!\\\"\\n [color]=\\\"color\\\"\\n class=\\\"mat-paginator-page-size-select\\\">\\n \\n \\n {{pageSizeOption}}\\n \\n \\n \\n\\n {{pageSize}}
\\n
\\n\\n
\\n
\\n {{_intl.getRangeLabel(pageIndex, pageSize, length)}}\\n
\\n\\n \\n \\n \\n \\n
\\n
\\n\\n\", styles: [\".mat-paginator{display:block}.mat-paginator-outer-container{display:flex}.mat-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap-reverse;width:100%}.mat-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-paginator-page-size{margin-right:0;margin-left:8px}.mat-paginator-page-size-label{margin:0 4px}.mat-paginator-page-size-select{margin:6px 4px 0 4px;width:56px}.mat-paginator-page-size-select.mat-form-field-appearance-outline{width:64px}.mat-paginator-page-size-select.mat-form-field-appearance-fill{width:64px}.mat-paginator-range-label{margin:0 32px 0 24px}.mat-paginator-range-actions{display:flex;align-items:center}.mat-paginator-icon{display:inline-block;width:28px;fill:currentColor}[dir=rtl] .mat-paginator-icon{transform:rotate(180deg)}.cdk-high-contrast-active .mat-paginator-icon{fill:CanvasText}\"], dependencies: [{ kind: \"directive\", type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i3.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"component\", type: i4.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"component\", type: i5.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i6.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"directive\", type: i7.MatTooltip, selector: \"[matTooltip]\", exportAs: [\"matTooltip\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatPaginator, decorators: [{\n type: Component,\n args: [{ selector: 'mat-paginator', exportAs: 'matPaginator', inputs: ['disabled'], host: {\n 'class': 'mat-paginator',\n 'role': 'group',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\n
\\n
\\n
\\n {{_intl.itemsPerPageLabel}}\\n
\\n\\n 1\\\"\\n [appearance]=\\\"_formFieldAppearance!\\\"\\n [color]=\\\"color\\\"\\n class=\\\"mat-paginator-page-size-select\\\">\\n \\n \\n {{pageSizeOption}}\\n \\n \\n \\n\\n {{pageSize}}
\\n
\\n\\n
\\n
\\n {{_intl.getRangeLabel(pageIndex, pageSize, length)}}\\n
\\n\\n \\n \\n \\n \\n
\\n
\\n\\n\", styles: [\".mat-paginator{display:block}.mat-paginator-outer-container{display:flex}.mat-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap-reverse;width:100%}.mat-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-paginator-page-size{margin-right:0;margin-left:8px}.mat-paginator-page-size-label{margin:0 4px}.mat-paginator-page-size-select{margin:6px 4px 0 4px;width:56px}.mat-paginator-page-size-select.mat-form-field-appearance-outline{width:64px}.mat-paginator-page-size-select.mat-form-field-appearance-fill{width:64px}.mat-paginator-range-label{margin:0 32px 0 24px}.mat-paginator-range-actions{display:flex;align-items:center}.mat-paginator-icon{display:inline-block;width:28px;fill:currentColor}[dir=rtl] .mat-paginator-icon{transform:rotate(180deg)}.cdk-high-contrast-active .mat-paginator-icon{fill:CanvasText}\"] }]\n }], ctorParameters: function () { return [{ type: MatPaginatorIntl }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_PAGINATOR_DEFAULT_OPTIONS]\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 MatPaginatorModule {\n}\nMatPaginatorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatPaginatorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatPaginatorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatPaginatorModule, declarations: [MatPaginator], imports: [CommonModule, MatButtonModule, MatSelectModule, MatTooltipModule, MatCommonModule], exports: [MatPaginator] });\nMatPaginatorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatPaginatorModule, providers: [MAT_PAGINATOR_INTL_PROVIDER], imports: [CommonModule, MatButtonModule, MatSelectModule, MatTooltipModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatPaginatorModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatButtonModule, MatSelectModule, MatTooltipModule, MatCommonModule],\n exports: [MatPaginator],\n declarations: [MatPaginator],\n providers: [MAT_PAGINATOR_INTL_PROVIDER],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PAGINATOR_DEFAULT_OPTIONS, MAT_PAGINATOR_INTL_PROVIDER, MAT_PAGINATOR_INTL_PROVIDER_FACTORY, MatPaginator, MatPaginatorIntl, MatPaginatorModule, PageEvent, _MatPaginatorBase };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, Directive, Optional, Inject, Input, Output, Injectable, SkipSelf, Component, ViewEncapsulation, ChangeDetectionStrategy, NgModule } from '@angular/core';\nimport * as i3 from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SPACE, ENTER } from '@angular/cdk/keycodes';\nimport { mixinInitialized, mixinDisabled, AnimationDurations, AnimationCurves, MatCommonModule } from '@angular/material/core';\nimport { Subject, merge } from 'rxjs';\nimport { trigger, state, style, transition, animate, keyframes, query, animateChild } from '@angular/animations';\nimport * as i4 from '@angular/common';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** @docs-private */\nfunction getSortDuplicateSortableIdError(id) {\n return Error(`Cannot have two MatSortables with the same id (${id}).`);\n}\n/** @docs-private */\nfunction getSortHeaderNotContainedWithinSortError() {\n return Error(`MatSortHeader must be placed within a parent element with the MatSort directive.`);\n}\n/** @docs-private */\nfunction getSortHeaderMissingIdError() {\n return Error(`MatSortHeader must be provided with a unique id.`);\n}\n/** @docs-private */\nfunction getSortInvalidDirectionError(direction) {\n return Error(`${direction} is not a valid sort direction ('asc' or 'desc').`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token to be used to override the default options for `mat-sort`. */\nconst MAT_SORT_DEFAULT_OPTIONS = new InjectionToken('MAT_SORT_DEFAULT_OPTIONS');\n// Boilerplate for applying mixins to MatSort.\n/** @docs-private */\nconst _MatSortBase = mixinInitialized(mixinDisabled(class {\n}));\n/** Container for MatSortables to manage the sort state and provide default sort parameters. */\nclass MatSort extends _MatSortBase {\n constructor(_defaultOptions) {\n super();\n this._defaultOptions = _defaultOptions;\n /** Collection of all registered sortables that this directive manages. */\n this.sortables = new Map();\n /** Used to notify any child components listening to state changes. */\n this._stateChanges = new Subject();\n /**\n * The direction to set when an MatSortable is initially sorted.\n * May be overridden by the MatSortable's sort start.\n */\n this.start = 'asc';\n this._direction = '';\n /** Event emitted when the user changes either the active sort or sort direction. */\n this.sortChange = new EventEmitter();\n }\n /** The sort direction of the currently active MatSortable. */\n get direction() {\n return this._direction;\n }\n set direction(direction) {\n if (direction &&\n direction !== 'asc' &&\n direction !== 'desc' &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getSortInvalidDirectionError(direction);\n }\n this._direction = direction;\n }\n /**\n * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\n * May be overridden by the MatSortable's disable clear input.\n */\n get disableClear() {\n return this._disableClear;\n }\n set disableClear(v) {\n this._disableClear = coerceBooleanProperty(v);\n }\n /**\n * Register function to be used by the contained MatSortables. Adds the MatSortable to the\n * collection of MatSortables.\n */\n register(sortable) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!sortable.id) {\n throw getSortHeaderMissingIdError();\n }\n if (this.sortables.has(sortable.id)) {\n throw getSortDuplicateSortableIdError(sortable.id);\n }\n }\n this.sortables.set(sortable.id, sortable);\n }\n /**\n * Unregister function to be used by the contained MatSortables. Removes the MatSortable from the\n * collection of contained MatSortables.\n */\n deregister(sortable) {\n this.sortables.delete(sortable.id);\n }\n /** Sets the active sort id and determines the new sort direction. */\n sort(sortable) {\n if (this.active != sortable.id) {\n this.active = sortable.id;\n this.direction = sortable.start ? sortable.start : this.start;\n }\n else {\n this.direction = this.getNextSortDirection(sortable);\n }\n this.sortChange.emit({ active: this.active, direction: this.direction });\n }\n /** Returns the next sort direction of the active sortable, checking for potential overrides. */\n getNextSortDirection(sortable) {\n if (!sortable) {\n return '';\n }\n // Get the sort direction cycle with the potential sortable overrides.\n const disableClear = sortable?.disableClear ?? this.disableClear ?? !!this._defaultOptions?.disableClear;\n let sortDirectionCycle = getSortDirectionCycle(sortable.start || this.start, disableClear);\n // Get and return the next direction in the cycle\n let nextDirectionIndex = sortDirectionCycle.indexOf(this.direction) + 1;\n if (nextDirectionIndex >= sortDirectionCycle.length) {\n nextDirectionIndex = 0;\n }\n return sortDirectionCycle[nextDirectionIndex];\n }\n ngOnInit() {\n this._markInitialized();\n }\n ngOnChanges() {\n this._stateChanges.next();\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\nMatSort.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSort, deps: [{ token: MAT_SORT_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatSort.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatSort, selector: \"[matSort]\", inputs: { disabled: [\"matSortDisabled\", \"disabled\"], active: [\"matSortActive\", \"active\"], start: [\"matSortStart\", \"start\"], direction: [\"matSortDirection\", \"direction\"], disableClear: [\"matSortDisableClear\", \"disableClear\"] }, outputs: { sortChange: \"matSortChange\" }, host: { classAttribute: \"mat-sort\" }, exportAs: [\"matSort\"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSort, decorators: [{\n type: Directive,\n args: [{\n selector: '[matSort]',\n exportAs: 'matSort',\n host: { 'class': 'mat-sort' },\n inputs: ['disabled: matSortDisabled'],\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_SORT_DEFAULT_OPTIONS]\n }] }]; }, propDecorators: { active: [{\n type: Input,\n args: ['matSortActive']\n }], start: [{\n type: Input,\n args: ['matSortStart']\n }], direction: [{\n type: Input,\n args: ['matSortDirection']\n }], disableClear: [{\n type: Input,\n args: ['matSortDisableClear']\n }], sortChange: [{\n type: Output,\n args: ['matSortChange']\n }] } });\n/** Returns the sort direction cycle to use given the provided parameters of order and clear. */\nfunction getSortDirectionCycle(start, disableClear) {\n let sortOrder = ['asc', 'desc'];\n if (start == 'desc') {\n sortOrder.reverse();\n }\n if (!disableClear) {\n sortOrder.push('');\n }\n return sortOrder;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst SORT_ANIMATION_TRANSITION = AnimationDurations.ENTERING + ' ' + AnimationCurves.STANDARD_CURVE;\n/**\n * Animations used by MatSort.\n * @docs-private\n */\nconst matSortAnimations = {\n /** Animation that moves the sort indicator. */\n indicator: trigger('indicator', [\n state('active-asc, asc', style({ transform: 'translateY(0px)' })),\n // 10px is the height of the sort indicator, minus the width of the pointers\n state('active-desc, desc', style({ transform: 'translateY(10px)' })),\n transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION)),\n ]),\n /** Animation that rotates the left pointer of the indicator based on the sorting direction. */\n leftPointer: trigger('leftPointer', [\n state('active-asc, asc', style({ transform: 'rotate(-45deg)' })),\n state('active-desc, desc', style({ transform: 'rotate(45deg)' })),\n transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION)),\n ]),\n /** Animation that rotates the right pointer of the indicator based on the sorting direction. */\n rightPointer: trigger('rightPointer', [\n state('active-asc, asc', style({ transform: 'rotate(45deg)' })),\n state('active-desc, desc', style({ transform: 'rotate(-45deg)' })),\n transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION)),\n ]),\n /** Animation that controls the arrow opacity. */\n arrowOpacity: trigger('arrowOpacity', [\n state('desc-to-active, asc-to-active, active', style({ opacity: 1 })),\n state('desc-to-hint, asc-to-hint, hint', style({ opacity: 0.54 })),\n state('hint-to-desc, active-to-desc, desc, hint-to-asc, active-to-asc, asc, void', style({ opacity: 0 })),\n // Transition between all states except for immediate transitions\n transition('* => asc, * => desc, * => active, * => hint, * => void', animate('0ms')),\n transition('* <=> *', animate(SORT_ANIMATION_TRANSITION)),\n ]),\n /**\n * Animation for the translation of the arrow as a whole. States are separated into two\n * groups: ones with animations and others that are immediate. Immediate states are asc, desc,\n * peek, and active. The other states define a specific animation (source-to-destination)\n * and are determined as a function of their prev user-perceived state and what the next state\n * should be.\n */\n arrowPosition: trigger('arrowPosition', [\n // Hidden Above => Hint Center\n transition('* => desc-to-hint, * => desc-to-active', animate(SORT_ANIMATION_TRANSITION, keyframes([style({ transform: 'translateY(-25%)' }), style({ transform: 'translateY(0)' })]))),\n // Hint Center => Hidden Below\n transition('* => hint-to-desc, * => active-to-desc', animate(SORT_ANIMATION_TRANSITION, keyframes([style({ transform: 'translateY(0)' }), style({ transform: 'translateY(25%)' })]))),\n // Hidden Below => Hint Center\n transition('* => asc-to-hint, * => asc-to-active', animate(SORT_ANIMATION_TRANSITION, keyframes([style({ transform: 'translateY(25%)' }), style({ transform: 'translateY(0)' })]))),\n // Hint Center => Hidden Above\n transition('* => hint-to-asc, * => active-to-asc', animate(SORT_ANIMATION_TRANSITION, keyframes([style({ transform: 'translateY(0)' }), style({ transform: 'translateY(-25%)' })]))),\n state('desc-to-hint, asc-to-hint, hint, desc-to-active, asc-to-active, active', style({ transform: 'translateY(0)' })),\n state('hint-to-desc, active-to-desc, desc', style({ transform: 'translateY(-25%)' })),\n state('hint-to-asc, active-to-asc, asc', style({ transform: 'translateY(25%)' })),\n ]),\n /** Necessary trigger that calls animate on children animations. */\n allowChildren: trigger('allowChildren', [\n transition('* <=> *', [query('@*', animateChild(), { optional: true })]),\n ]),\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and\n * include it in a custom provider.\n */\nclass MatSortHeaderIntl {\n constructor() {\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n this.changes = new Subject();\n }\n}\nMatSortHeaderIntl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSortHeaderIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMatSortHeaderIntl.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSortHeaderIntl, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSortHeaderIntl, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n/** @docs-private */\nfunction MAT_SORT_HEADER_INTL_PROVIDER_FACTORY(parentIntl) {\n return parentIntl || new MatSortHeaderIntl();\n}\n/** @docs-private */\nconst MAT_SORT_HEADER_INTL_PROVIDER = {\n // If there is already an MatSortHeaderIntl available, use that. Otherwise, provide a new one.\n provide: MatSortHeaderIntl,\n deps: [[new Optional(), new SkipSelf(), MatSortHeaderIntl]],\n useFactory: MAT_SORT_HEADER_INTL_PROVIDER_FACTORY,\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to the sort header.\n/** @docs-private */\nconst _MatSortHeaderBase = mixinDisabled(class {\n});\n/**\n * Applies sorting behavior (click to change sort) and styles to an element, including an\n * arrow to display the current sort direction.\n *\n * Must be provided with an id and contained within a parent MatSort directive.\n *\n * If used on header cells in a CdkTable, it will automatically default its id from its containing\n * column definition.\n */\nclass MatSortHeader extends _MatSortHeaderBase {\n constructor(\n /**\n * @deprecated `_intl` parameter isn't being used anymore and it'll be removed.\n * @breaking-change 13.0.0\n */\n _intl, _changeDetectorRef, \n // `MatSort` is not optionally injected, but just asserted manually w/ better error.\n // tslint:disable-next-line: lightweight-tokens\n _sort, _columnDef, _focusMonitor, _elementRef, \n /** @breaking-change 14.0.0 _ariaDescriber will be required. */\n _ariaDescriber, defaultOptions) {\n // Note that we use a string token for the `_columnDef`, because the value is provided both by\n // `material/table` and `cdk/table` and we can't have the CDK depending on Material,\n // and we want to avoid having the sort header depending on the CDK table because\n // of this single reference.\n super();\n this._intl = _intl;\n this._changeDetectorRef = _changeDetectorRef;\n this._sort = _sort;\n this._columnDef = _columnDef;\n this._focusMonitor = _focusMonitor;\n this._elementRef = _elementRef;\n this._ariaDescriber = _ariaDescriber;\n /**\n * Flag set to true when the indicator should be displayed while the sort is not active. Used to\n * provide an affordance that the header is sortable by showing on focus and hover.\n */\n this._showIndicatorHint = false;\n /**\n * The view transition state of the arrow (translation/ opacity) - indicates its `from` and `to`\n * position through the animation. If animations are currently disabled, the fromState is removed\n * so that there is no animation displayed.\n */\n this._viewState = {};\n /** The direction the arrow should be facing according to the current state. */\n this._arrowDirection = '';\n /**\n * Whether the view state animation should show the transition between the `from` and `to` states.\n */\n this._disableViewStateAnimation = false;\n /** Sets the position of the arrow that displays when sorted. */\n this.arrowPosition = 'after';\n // Default the action description to \"Sort\" because it's better than nothing.\n // Without a description, the button's label comes from the sort header text content,\n // which doesn't give any indication that it performs a sorting operation.\n this._sortActionDescription = 'Sort';\n if (!_sort && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getSortHeaderNotContainedWithinSortError();\n }\n if (defaultOptions?.arrowPosition) {\n this.arrowPosition = defaultOptions?.arrowPosition;\n }\n this._handleStateChanges();\n }\n /**\n * Description applied to MatSortHeader's button element with aria-describedby. This text should\n * describe the action that will occur when the user clicks the sort header.\n */\n get sortActionDescription() {\n return this._sortActionDescription;\n }\n set sortActionDescription(value) {\n this._updateSortActionDescription(value);\n }\n /** Overrides the disable clear value of the containing MatSort for this MatSortable. */\n get disableClear() {\n return this._disableClear;\n }\n set disableClear(v) {\n this._disableClear = coerceBooleanProperty(v);\n }\n ngOnInit() {\n if (!this.id && this._columnDef) {\n this.id = this._columnDef.name;\n }\n // Initialize the direction of the arrow and set the view state to be immediately that state.\n this._updateArrowDirection();\n this._setAnimationTransitionState({\n toState: this._isSorted() ? 'active' : this._arrowDirection,\n });\n this._sort.register(this);\n this._sortButton = this._elementRef.nativeElement.querySelector('.mat-sort-header-container');\n this._updateSortActionDescription(this._sortActionDescription);\n }\n ngAfterViewInit() {\n // We use the focus monitor because we also want to style\n // things differently based on the focus origin.\n this._focusMonitor.monitor(this._elementRef, true).subscribe(origin => {\n const newState = !!origin;\n if (newState !== this._showIndicatorHint) {\n this._setIndicatorHintVisible(newState);\n this._changeDetectorRef.markForCheck();\n }\n });\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._sort.deregister(this);\n this._rerenderSubscription.unsubscribe();\n }\n /**\n * Sets the \"hint\" state such that the arrow will be semi-transparently displayed as a hint to the\n * user showing what the active sort will become. If set to false, the arrow will fade away.\n */\n _setIndicatorHintVisible(visible) {\n // No-op if the sort header is disabled - should not make the hint visible.\n if (this._isDisabled() && visible) {\n return;\n }\n this._showIndicatorHint = visible;\n if (!this._isSorted()) {\n this._updateArrowDirection();\n if (this._showIndicatorHint) {\n this._setAnimationTransitionState({ fromState: this._arrowDirection, toState: 'hint' });\n }\n else {\n this._setAnimationTransitionState({ fromState: 'hint', toState: this._arrowDirection });\n }\n }\n }\n /**\n * Sets the animation transition view state for the arrow's position and opacity. If the\n * `disableViewStateAnimation` flag is set to true, the `fromState` will be ignored so that\n * no animation appears.\n */\n _setAnimationTransitionState(viewState) {\n this._viewState = viewState || {};\n // If the animation for arrow position state (opacity/translation) should be disabled,\n // remove the fromState so that it jumps right to the toState.\n if (this._disableViewStateAnimation) {\n this._viewState = { toState: viewState.toState };\n }\n }\n /** Triggers the sort on this sort header and removes the indicator hint. */\n _toggleOnInteraction() {\n this._sort.sort(this);\n // Do not show the animation if the header was already shown in the right position.\n if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n this._disableViewStateAnimation = true;\n }\n }\n _handleClick() {\n if (!this._isDisabled()) {\n this._sort.sort(this);\n }\n }\n _handleKeydown(event) {\n if (!this._isDisabled() && (event.keyCode === SPACE || event.keyCode === ENTER)) {\n event.preventDefault();\n this._toggleOnInteraction();\n }\n }\n /** Whether this MatSortHeader is currently sorted in either ascending or descending order. */\n _isSorted() {\n return (this._sort.active == this.id &&\n (this._sort.direction === 'asc' || this._sort.direction === 'desc'));\n }\n /** Returns the animation state for the arrow direction (indicator and pointers). */\n _getArrowDirectionState() {\n return `${this._isSorted() ? 'active-' : ''}${this._arrowDirection}`;\n }\n /** Returns the arrow position state (opacity, translation). */\n _getArrowViewState() {\n const fromState = this._viewState.fromState;\n return (fromState ? `${fromState}-to-` : '') + this._viewState.toState;\n }\n /**\n * Updates the direction the arrow should be pointing. If it is not sorted, the arrow should be\n * facing the start direction. Otherwise if it is sorted, the arrow should point in the currently\n * active sorted direction. The reason this is updated through a function is because the direction\n * should only be changed at specific times - when deactivated but the hint is displayed and when\n * the sort is active and the direction changes. Otherwise the arrow's direction should linger\n * in cases such as the sort becoming deactivated but we want to animate the arrow away while\n * preserving its direction, even though the next sort direction is actually different and should\n * only be changed once the arrow displays again (hint or activation).\n */\n _updateArrowDirection() {\n this._arrowDirection = this._isSorted() ? this._sort.direction : this.start || this._sort.start;\n }\n _isDisabled() {\n return this._sort.disabled || this.disabled;\n }\n /**\n * Gets the aria-sort attribute that should be applied to this sort header. If this header\n * is not sorted, returns null so that the attribute is removed from the host element. Aria spec\n * says that the aria-sort property should only be present on one header at a time, so removing\n * ensures this is true.\n */\n _getAriaSortAttribute() {\n if (!this._isSorted()) {\n return 'none';\n }\n return this._sort.direction == 'asc' ? 'ascending' : 'descending';\n }\n /** Whether the arrow inside the sort header should be rendered. */\n _renderArrow() {\n return !this._isDisabled() || this._isSorted();\n }\n _updateSortActionDescription(newDescription) {\n // We use AriaDescriber for the sort button instead of setting an `aria-label` because some\n // screen readers (notably VoiceOver) will read both the column header *and* the button's label\n // for every *cell* in the table, creating a lot of unnecessary noise.\n // If _sortButton is undefined, the component hasn't been initialized yet so there's\n // nothing to update in the DOM.\n if (this._sortButton) {\n // removeDescription will no-op if there is no existing message.\n // TODO(jelbourn): remove optional chaining when AriaDescriber is required.\n this._ariaDescriber?.removeDescription(this._sortButton, this._sortActionDescription);\n this._ariaDescriber?.describe(this._sortButton, newDescription);\n }\n this._sortActionDescription = newDescription;\n }\n /** Handles changes in the sorting state. */\n _handleStateChanges() {\n this._rerenderSubscription = merge(this._sort.sortChange, this._sort._stateChanges, this._intl.changes).subscribe(() => {\n if (this._isSorted()) {\n this._updateArrowDirection();\n // Do not show the animation if the header was already shown in the right position.\n if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n this._disableViewStateAnimation = true;\n }\n this._setAnimationTransitionState({ fromState: this._arrowDirection, toState: 'active' });\n this._showIndicatorHint = false;\n }\n // If this header was recently active and now no longer sorted, animate away the arrow.\n if (!this._isSorted() && this._viewState && this._viewState.toState === 'active') {\n this._disableViewStateAnimation = false;\n this._setAnimationTransitionState({ fromState: 'active', toState: this._arrowDirection });\n }\n this._changeDetectorRef.markForCheck();\n });\n }\n}\nMatSortHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSortHeader, deps: [{ token: MatSortHeaderIntl }, { token: i0.ChangeDetectorRef }, { token: MatSort, optional: true }, { token: 'MAT_SORT_HEADER_COLUMN_DEF', optional: true }, { token: i3.FocusMonitor }, { token: i0.ElementRef }, { token: i3.AriaDescriber, optional: true }, { token: MAT_SORT_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatSortHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatSortHeader, selector: \"[mat-sort-header]\", inputs: { disabled: \"disabled\", id: [\"mat-sort-header\", \"id\"], arrowPosition: \"arrowPosition\", start: \"start\", sortActionDescription: \"sortActionDescription\", disableClear: \"disableClear\" }, host: { listeners: { \"click\": \"_handleClick()\", \"keydown\": \"_handleKeydown($event)\", \"mouseenter\": \"_setIndicatorHintVisible(true)\", \"mouseleave\": \"_setIndicatorHintVisible(false)\" }, properties: { \"attr.aria-sort\": \"_getAriaSortAttribute()\", \"class.mat-sort-header-disabled\": \"_isDisabled()\" }, classAttribute: \"mat-sort-header\" }, exportAs: [\"matSortHeader\"], usesInheritance: true, ngImport: i0, template: \"\\n
\\n\\n \\n
\\n \\n
\\n\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\", styles: [\".mat-sort-header-container{display:flex;cursor:pointer;align-items:center;letter-spacing:normal;outline:0}[mat-sort-header].cdk-keyboard-focused .mat-sort-header-container,[mat-sort-header].cdk-program-focused .mat-sort-header-container{border-bottom:solid 1px currentColor}.mat-sort-header-disabled .mat-sort-header-container{cursor:default}.mat-sort-header-container::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1)}.mat-sort-header-content{text-align:center;display:flex;align-items:center}.mat-sort-header-position-before{flex-direction:row-reverse}.mat-sort-header-arrow{height:12px;width:12px;min-width:12px;position:relative;display:flex;opacity:0}.mat-sort-header-arrow,[dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow{margin:0 0 0 6px}.mat-sort-header-position-before .mat-sort-header-arrow,[dir=rtl] .mat-sort-header-arrow{margin:0 6px 0 0}.mat-sort-header-stem{background:currentColor;height:10px;width:2px;margin:auto;display:flex;align-items:center}.cdk-high-contrast-active .mat-sort-header-stem{width:0;border-left:solid 2px}.mat-sort-header-indicator{width:100%;height:2px;display:flex;align-items:center;position:absolute;top:0;left:0}.mat-sort-header-pointer-middle{margin:auto;height:2px;width:2px;background:currentColor;transform:rotate(45deg)}.cdk-high-contrast-active .mat-sort-header-pointer-middle{width:0;height:0;border-top:solid 2px;border-left:solid 2px}.mat-sort-header-pointer-left,.mat-sort-header-pointer-right{background:currentColor;width:6px;height:2px;position:absolute;top:0}.cdk-high-contrast-active .mat-sort-header-pointer-left,.cdk-high-contrast-active .mat-sort-header-pointer-right{width:0;height:0;border-left:solid 6px;border-top:solid 2px}.mat-sort-header-pointer-left{transform-origin:right;left:0}.mat-sort-header-pointer-right{transform-origin:left;right:0}\"], dependencies: [{ kind: \"directive\", type: i4.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], animations: [\n matSortAnimations.indicator,\n matSortAnimations.leftPointer,\n matSortAnimations.rightPointer,\n matSortAnimations.arrowOpacity,\n matSortAnimations.arrowPosition,\n matSortAnimations.allowChildren,\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSortHeader, decorators: [{\n type: Component,\n args: [{ selector: '[mat-sort-header]', exportAs: 'matSortHeader', host: {\n 'class': 'mat-sort-header',\n '(click)': '_handleClick()',\n '(keydown)': '_handleKeydown($event)',\n '(mouseenter)': '_setIndicatorHintVisible(true)',\n '(mouseleave)': '_setIndicatorHintVisible(false)',\n '[attr.aria-sort]': '_getAriaSortAttribute()',\n '[class.mat-sort-header-disabled]': '_isDisabled()',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['disabled'], animations: [\n matSortAnimations.indicator,\n matSortAnimations.leftPointer,\n matSortAnimations.rightPointer,\n matSortAnimations.arrowOpacity,\n matSortAnimations.arrowPosition,\n matSortAnimations.allowChildren,\n ], template: \"\\n
\\n\\n \\n
\\n \\n
\\n\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\", styles: [\".mat-sort-header-container{display:flex;cursor:pointer;align-items:center;letter-spacing:normal;outline:0}[mat-sort-header].cdk-keyboard-focused .mat-sort-header-container,[mat-sort-header].cdk-program-focused .mat-sort-header-container{border-bottom:solid 1px currentColor}.mat-sort-header-disabled .mat-sort-header-container{cursor:default}.mat-sort-header-container::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1)}.mat-sort-header-content{text-align:center;display:flex;align-items:center}.mat-sort-header-position-before{flex-direction:row-reverse}.mat-sort-header-arrow{height:12px;width:12px;min-width:12px;position:relative;display:flex;opacity:0}.mat-sort-header-arrow,[dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow{margin:0 0 0 6px}.mat-sort-header-position-before .mat-sort-header-arrow,[dir=rtl] .mat-sort-header-arrow{margin:0 6px 0 0}.mat-sort-header-stem{background:currentColor;height:10px;width:2px;margin:auto;display:flex;align-items:center}.cdk-high-contrast-active .mat-sort-header-stem{width:0;border-left:solid 2px}.mat-sort-header-indicator{width:100%;height:2px;display:flex;align-items:center;position:absolute;top:0;left:0}.mat-sort-header-pointer-middle{margin:auto;height:2px;width:2px;background:currentColor;transform:rotate(45deg)}.cdk-high-contrast-active .mat-sort-header-pointer-middle{width:0;height:0;border-top:solid 2px;border-left:solid 2px}.mat-sort-header-pointer-left,.mat-sort-header-pointer-right{background:currentColor;width:6px;height:2px;position:absolute;top:0}.cdk-high-contrast-active .mat-sort-header-pointer-left,.cdk-high-contrast-active .mat-sort-header-pointer-right{width:0;height:0;border-left:solid 6px;border-top:solid 2px}.mat-sort-header-pointer-left{transform-origin:right;left:0}.mat-sort-header-pointer-right{transform-origin:left;right:0}\"] }]\n }], ctorParameters: function () { return [{ type: MatSortHeaderIntl }, { type: i0.ChangeDetectorRef }, { type: MatSort, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: ['MAT_SORT_HEADER_COLUMN_DEF']\n }, {\n type: Optional\n }] }, { type: i3.FocusMonitor }, { type: i0.ElementRef }, { type: i3.AriaDescriber, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_SORT_DEFAULT_OPTIONS]\n }] }]; }, propDecorators: { id: [{\n type: Input,\n args: ['mat-sort-header']\n }], arrowPosition: [{\n type: Input\n }], start: [{\n type: Input\n }], sortActionDescription: [{\n type: Input\n }], disableClear: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSortModule {\n}\nMatSortModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSortModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatSortModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSortModule, declarations: [MatSort, MatSortHeader], imports: [CommonModule, MatCommonModule], exports: [MatSort, MatSortHeader] });\nMatSortModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSortModule, providers: [MAT_SORT_HEADER_INTL_PROVIDER], imports: [CommonModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatSortModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule],\n exports: [MatSort, MatSortHeader],\n declarations: [MatSort, MatSortHeader],\n providers: [MAT_SORT_HEADER_INTL_PROVIDER],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SORT_DEFAULT_OPTIONS, MAT_SORT_HEADER_INTL_PROVIDER, MAT_SORT_HEADER_INTL_PROVIDER_FACTORY, MatSort, MatSortHeader, MatSortHeaderIntl, MatSortModule, matSortAnimations };\n","import * as i1 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, isDataSource, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nexport { DataSource } from '@angular/cdk/collections';\nimport * as i2 from '@angular/cdk/platform';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Inject, Optional, Input, ContentChild, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, EmbeddedViewRef, EventEmitter, NgZone, Attribute, SkipSelf, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';\nimport { Subject, from, BehaviorSubject, isObservable, of } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Mixin to provide a directive with a function that checks if the sticky input has been\n * changed since the last time the function was called. Essentially adds a dirty-check to the\n * sticky value.\n * @docs-private\n */\nfunction mixinHasStickyInput(base) {\n return class extends base {\n constructor(...args) {\n super(...args);\n this._sticky = false;\n /** Whether the sticky input has changed since it was last checked. */\n this._hasStickyChanged = false;\n }\n /** Whether sticky positioning should be applied. */\n get sticky() {\n return this._sticky;\n }\n set sticky(v) {\n const prevValue = this._sticky;\n this._sticky = coerceBooleanProperty(v);\n this._hasStickyChanged = prevValue !== this._sticky;\n }\n /** Whether the sticky value has changed since this was last called. */\n hasStickyChanged() {\n const hasStickyChanged = this._hasStickyChanged;\n this._hasStickyChanged = false;\n return hasStickyChanged;\n }\n /** Resets the dirty check for cases where the sticky state has been used without checking. */\n resetStickyChanged() {\n this._hasStickyChanged = false;\n }\n };\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Used to provide a table to some of the sub-components without causing a circular dependency.\n * @docs-private\n */\nconst CDK_TABLE = new InjectionToken('CDK_TABLE');\n/** Injection token that can be used to specify the text column options. */\nconst TEXT_COLUMN_OPTIONS = new InjectionToken('text-column-options');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Cell definition for a CDK table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nclass CdkCellDef {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkCellDef, selector: \"[cdkCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkCellDef, decorators: [{\n type: Directive,\n args: [{ selector: '[cdkCellDef]' }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * Header cell definition for a CDK table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nclass CdkHeaderCellDef {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkHeaderCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkHeaderCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkHeaderCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkHeaderCellDef, selector: \"[cdkHeaderCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkHeaderCellDef, decorators: [{\n type: Directive,\n args: [{ selector: '[cdkHeaderCellDef]' }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * Footer cell definition for a CDK table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\nclass CdkFooterCellDef {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkFooterCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkFooterCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkFooterCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkFooterCellDef, selector: \"[cdkFooterCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkFooterCellDef, decorators: [{\n type: Directive,\n args: [{ selector: '[cdkFooterCellDef]' }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n// Boilerplate for applying mixins to CdkColumnDef.\n/** @docs-private */\nclass CdkColumnDefBase {\n}\nconst _CdkColumnDefBase = mixinHasStickyInput(CdkColumnDefBase);\n/**\n * Column definition for the CDK table.\n * Defines a set of cells available for a table column.\n */\nclass CdkColumnDef extends _CdkColumnDefBase {\n constructor(_table) {\n super();\n this._table = _table;\n this._stickyEnd = false;\n }\n /** Unique name for this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._setNameInput(name);\n }\n /**\n * Whether this column should be sticky positioned on the end of the row. Should make sure\n * that it mimics the `CanStick` mixin such that `_hasStickyChanged` is set to true if the value\n * has been changed.\n */\n get stickyEnd() {\n return this._stickyEnd;\n }\n set stickyEnd(v) {\n const prevValue = this._stickyEnd;\n this._stickyEnd = coerceBooleanProperty(v);\n this._hasStickyChanged = prevValue !== this._stickyEnd;\n }\n /**\n * Overridable method that sets the css classes that will be added to every cell in this\n * column.\n * In the future, columnCssClassName will change from type string[] to string and this\n * will set a single string value.\n * @docs-private\n */\n _updateColumnCssClassName() {\n this._columnCssClassName = [`cdk-column-${this.cssClassFriendlyName}`];\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setNameInput(value) {\n // If the directive is set without a name (updated programmatically), then this setter will\n // trigger with an empty string and should not overwrite the programmatically set value.\n if (value) {\n this._name = value;\n this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-');\n this._updateColumnCssClassName();\n }\n }\n}\nCdkColumnDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkColumnDef, deps: [{ token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkColumnDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkColumnDef, selector: \"[cdkColumnDef]\", inputs: { sticky: \"sticky\", name: [\"cdkColumnDef\", \"name\"], stickyEnd: \"stickyEnd\" }, providers: [{ provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef }], queries: [{ propertyName: \"cell\", first: true, predicate: CdkCellDef, descendants: true }, { propertyName: \"headerCell\", first: true, predicate: CdkHeaderCellDef, descendants: true }, { propertyName: \"footerCell\", first: true, predicate: CdkFooterCellDef, descendants: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkColumnDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkColumnDef]',\n inputs: ['sticky'],\n providers: [{ provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef }],\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; }, propDecorators: { name: [{\n type: Input,\n args: ['cdkColumnDef']\n }], stickyEnd: [{\n type: Input,\n args: ['stickyEnd']\n }], cell: [{\n type: ContentChild,\n args: [CdkCellDef]\n }], headerCell: [{\n type: ContentChild,\n args: [CdkHeaderCellDef]\n }], footerCell: [{\n type: ContentChild,\n args: [CdkFooterCellDef]\n }] } });\n/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */\nclass BaseCdkCell {\n constructor(columnDef, elementRef) {\n elementRef.nativeElement.classList.add(...columnDef._columnCssClassName);\n }\n}\n/** Header cell template container that adds the right classes and role. */\nclass CdkHeaderCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n }\n}\nCdkHeaderCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkHeaderCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkHeaderCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkHeaderCell, selector: \"cdk-header-cell, th[cdk-header-cell]\", host: { attributes: { \"role\": \"columnheader\" }, classAttribute: \"cdk-header-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkHeaderCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-header-cell, th[cdk-header-cell]',\n host: {\n 'class': 'cdk-header-cell',\n 'role': 'columnheader',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkColumnDef }, { type: i0.ElementRef }]; } });\n/** Footer cell template container that adds the right classes and role. */\nclass CdkFooterCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n if (columnDef._table?._elementRef.nativeElement.nodeType === 1) {\n const tableRole = columnDef._table._elementRef.nativeElement.getAttribute('role');\n const role = tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell';\n elementRef.nativeElement.setAttribute('role', role);\n }\n }\n}\nCdkFooterCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkFooterCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkFooterCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkFooterCell, selector: \"cdk-footer-cell, td[cdk-footer-cell]\", host: { classAttribute: \"cdk-footer-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkFooterCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-footer-cell, td[cdk-footer-cell]',\n host: {\n 'class': 'cdk-footer-cell',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkColumnDef }, { type: i0.ElementRef }]; } });\n/** Cell template container that adds the right classes and role. */\nclass CdkCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n if (columnDef._table?._elementRef.nativeElement.nodeType === 1) {\n const tableRole = columnDef._table._elementRef.nativeElement.getAttribute('role');\n const role = tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell';\n elementRef.nativeElement.setAttribute('role', role);\n }\n }\n}\nCdkCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkCell, selector: \"cdk-cell, td[cdk-cell]\", host: { classAttribute: \"cdk-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-cell, td[cdk-cell]',\n host: {\n 'class': 'cdk-cell',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkColumnDef }, { type: i0.ElementRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @docs-private\n */\nclass _Schedule {\n constructor() {\n this.tasks = [];\n this.endTasks = [];\n }\n}\n/** Injection token used to provide a coalesced style scheduler. */\nconst _COALESCED_STYLE_SCHEDULER = new InjectionToken('_COALESCED_STYLE_SCHEDULER');\n/**\n * Allows grouping up CSSDom mutations after the current execution context.\n * This can significantly improve performance when separate consecutive functions are\n * reading from the CSSDom and then mutating it.\n *\n * @docs-private\n */\nclass _CoalescedStyleScheduler {\n constructor(_ngZone) {\n this._ngZone = _ngZone;\n this._currentSchedule = null;\n this._destroyed = new Subject();\n }\n /**\n * Schedules the specified task to run at the end of the current VM turn.\n */\n schedule(task) {\n this._createScheduleIfNeeded();\n this._currentSchedule.tasks.push(task);\n }\n /**\n * Schedules the specified task to run after other scheduled tasks at the end of the current\n * VM turn.\n */\n scheduleEnd(task) {\n this._createScheduleIfNeeded();\n this._currentSchedule.endTasks.push(task);\n }\n /** Prevent any further tasks from running. */\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n _createScheduleIfNeeded() {\n if (this._currentSchedule) {\n return;\n }\n this._currentSchedule = new _Schedule();\n this._getScheduleObservable()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n while (this._currentSchedule.tasks.length || this._currentSchedule.endTasks.length) {\n const schedule = this._currentSchedule;\n // Capture new tasks scheduled by the current set of tasks.\n this._currentSchedule = new _Schedule();\n for (const task of schedule.tasks) {\n task();\n }\n for (const task of schedule.endTasks) {\n task();\n }\n }\n this._currentSchedule = null;\n });\n }\n _getScheduleObservable() {\n // Use onStable when in the context of an ongoing change detection cycle so that we\n // do not accidentally trigger additional cycles.\n return this._ngZone.isStable\n ? from(Promise.resolve(undefined))\n : this._ngZone.onStable.pipe(take(1));\n }\n}\n_CoalescedStyleScheduler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: _CoalescedStyleScheduler, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\n_CoalescedStyleScheduler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: _CoalescedStyleScheduler });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: _CoalescedStyleScheduler, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The row template that can be used by the mat-table. Should not be used outside of the\n * material library.\n */\nconst CDK_ROW_TEMPLATE = ``;\n/**\n * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs\n * for changes and notifying the table.\n */\nclass BaseRowDef {\n constructor(\n /** @docs-private */ template, _differs) {\n this.template = template;\n this._differs = _differs;\n }\n ngOnChanges(changes) {\n // Create a new columns differ if one does not yet exist. Initialize it based on initial value\n // of the columns property or an empty array if none is provided.\n if (!this._columnsDiffer) {\n const columns = (changes['columns'] && changes['columns'].currentValue) || [];\n this._columnsDiffer = this._differs.find(columns).create();\n this._columnsDiffer.diff(columns);\n }\n }\n /**\n * Returns the difference between the current columns and the columns from the last diff, or null\n * if there is no difference.\n */\n getColumnsDiff() {\n return this._columnsDiffer.diff(this.columns);\n }\n /** Gets this row def's relevant cell template from the provided column def. */\n extractCellTemplate(column) {\n if (this instanceof CdkHeaderRowDef) {\n return column.headerCell.template;\n }\n if (this instanceof CdkFooterRowDef) {\n return column.footerCell.template;\n }\n else {\n return column.cell.template;\n }\n }\n}\nBaseRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: BaseRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Directive });\nBaseRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: BaseRowDef, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: BaseRowDef, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }]; } });\n// Boilerplate for applying mixins to CdkHeaderRowDef.\n/** @docs-private */\nclass CdkHeaderRowDefBase extends BaseRowDef {\n}\nconst _CdkHeaderRowDefBase = mixinHasStickyInput(CdkHeaderRowDefBase);\n/**\n * Header row definition for the CDK table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nclass CdkHeaderRowDef extends _CdkHeaderRowDefBase {\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n }\n // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.\n // Explicitly define it so that the method is called as part of the Angular lifecycle.\n ngOnChanges(changes) {\n super.ngOnChanges(changes);\n }\n}\nCdkHeaderRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkHeaderRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkHeaderRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkHeaderRowDef, selector: \"[cdkHeaderRowDef]\", inputs: { columns: [\"cdkHeaderRowDef\", \"columns\"], sticky: [\"cdkHeaderRowDefSticky\", \"sticky\"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkHeaderRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkHeaderRowDef]',\n inputs: ['columns: cdkHeaderRowDef', 'sticky: cdkHeaderRowDefSticky'],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; } });\n// Boilerplate for applying mixins to CdkFooterRowDef.\n/** @docs-private */\nclass CdkFooterRowDefBase extends BaseRowDef {\n}\nconst _CdkFooterRowDefBase = mixinHasStickyInput(CdkFooterRowDefBase);\n/**\n * Footer row definition for the CDK table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nclass CdkFooterRowDef extends _CdkFooterRowDefBase {\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n }\n // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.\n // Explicitly define it so that the method is called as part of the Angular lifecycle.\n ngOnChanges(changes) {\n super.ngOnChanges(changes);\n }\n}\nCdkFooterRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkFooterRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkFooterRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkFooterRowDef, selector: \"[cdkFooterRowDef]\", inputs: { columns: [\"cdkFooterRowDef\", \"columns\"], sticky: [\"cdkFooterRowDefSticky\", \"sticky\"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkFooterRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkFooterRowDef]',\n inputs: ['columns: cdkFooterRowDef', 'sticky: cdkFooterRowDefSticky'],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; } });\n/**\n * Data row definition for the CDK table.\n * Captures the header row's template and other row properties such as the columns to display and\n * a when predicate that describes when this row should be used.\n */\nclass CdkRowDef extends BaseRowDef {\n // TODO(andrewseguin): Add an input for providing a switch function to determine\n // if this template should be used.\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n }\n}\nCdkRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkRowDef, selector: \"[cdkRowDef]\", inputs: { columns: [\"cdkRowDefColumns\", \"columns\"], when: [\"cdkRowDefWhen\", \"when\"] }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkRowDef]',\n inputs: ['columns: cdkRowDefColumns', 'when: cdkRowDefWhen'],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; } });\n/**\n * Outlet for rendering cells inside of a row or header row.\n * @docs-private\n */\nclass CdkCellOutlet {\n constructor(_viewContainer) {\n this._viewContainer = _viewContainer;\n CdkCellOutlet.mostRecentCellOutlet = this;\n }\n ngOnDestroy() {\n // If this was the last outlet being rendered in the view, remove the reference\n // from the static property after it has been destroyed to avoid leaking memory.\n if (CdkCellOutlet.mostRecentCellOutlet === this) {\n CdkCellOutlet.mostRecentCellOutlet = null;\n }\n }\n}\n/**\n * Static property containing the latest constructed instance of this class.\n * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using\n * createEmbeddedView. After one of these components are created, this property will provide\n * a handle to provide that component's cells and context. After init, the CdkCellOutlet will\n * construct the cells with the provided context.\n */\nCdkCellOutlet.mostRecentCellOutlet = null;\nCdkCellOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkCellOutlet, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkCellOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkCellOutlet, decorators: [{\n type: Directive,\n args: [{ selector: '[cdkCellOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nclass CdkHeaderRow {\n}\nCdkHeaderRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkHeaderRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkHeaderRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkHeaderRow, selector: \"cdk-header-row, tr[cdk-header-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"cdk-header-row\" }, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkHeaderRow, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-header-row, tr[cdk-header-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'cdk-header-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n }]\n }] });\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nclass CdkFooterRow {\n}\nCdkFooterRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkFooterRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkFooterRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkFooterRow, selector: \"cdk-footer-row, tr[cdk-footer-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"cdk-footer-row\" }, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkFooterRow, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-footer-row, tr[cdk-footer-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'cdk-footer-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n }]\n }] });\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nclass CdkRow {\n}\nCdkRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkRow, selector: \"cdk-row, tr[cdk-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"cdk-row\" }, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkRow, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-row, tr[cdk-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'cdk-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n }]\n }] });\n/** Row that can be used to display a message when no data is shown in the table. */\nclass CdkNoDataRow {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._contentClassName = 'cdk-no-data-row';\n }\n}\nCdkNoDataRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkNoDataRow, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkNoDataRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkNoDataRow, selector: \"ng-template[cdkNoDataRow]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkNoDataRow, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[cdkNoDataRow]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * List of all possible directions that can be used for sticky positioning.\n * @docs-private\n */\nconst STICKY_DIRECTIONS = ['top', 'bottom', 'left', 'right'];\n/**\n * Applies and removes sticky positioning styles to the `CdkTable` rows and columns cells.\n * @docs-private\n */\nclass StickyStyler {\n /**\n * @param _isNativeHtmlTable Whether the sticky logic should be based on a table\n * that uses the native `` element.\n * @param _stickCellCss The CSS class that will be applied to every row/cell that has\n * sticky positioning applied.\n * @param direction The directionality context of the table (ltr/rtl); affects column positioning\n * by reversing left/right positions.\n * @param _isBrowser Whether the table is currently being rendered on the server or the client.\n * @param _needsPositionStickyOnElement Whether we need to specify position: sticky on cells\n * using inline styles. If false, it is assumed that position: sticky is included in\n * the component stylesheet for _stickCellCss.\n * @param _positionListener A listener that is notified of changes to sticky rows/columns\n * and their dimensions.\n */\n constructor(_isNativeHtmlTable, _stickCellCss, direction, _coalescedStyleScheduler, _isBrowser = true, _needsPositionStickyOnElement = true, _positionListener) {\n this._isNativeHtmlTable = _isNativeHtmlTable;\n this._stickCellCss = _stickCellCss;\n this.direction = direction;\n this._coalescedStyleScheduler = _coalescedStyleScheduler;\n this._isBrowser = _isBrowser;\n this._needsPositionStickyOnElement = _needsPositionStickyOnElement;\n this._positionListener = _positionListener;\n this._cachedCellWidths = [];\n this._borderCellCss = {\n 'top': `${_stickCellCss}-border-elem-top`,\n 'bottom': `${_stickCellCss}-border-elem-bottom`,\n 'left': `${_stickCellCss}-border-elem-left`,\n 'right': `${_stickCellCss}-border-elem-right`,\n };\n }\n /**\n * Clears the sticky positioning styles from the row and its cells by resetting the `position`\n * style, setting the zIndex to 0, and unsetting each provided sticky direction.\n * @param rows The list of rows that should be cleared from sticking in the provided directions\n * @param stickyDirections The directions that should no longer be set as sticky on the rows.\n */\n clearStickyPositioning(rows, stickyDirections) {\n const elementsToClear = [];\n for (const row of rows) {\n // If the row isn't an element (e.g. if it's an `ng-container`),\n // it won't have inline styles or `children` so we skip it.\n if (row.nodeType !== row.ELEMENT_NODE) {\n continue;\n }\n elementsToClear.push(row);\n for (let i = 0; i < row.children.length; i++) {\n elementsToClear.push(row.children[i]);\n }\n }\n // Coalesce with sticky row/column updates (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n for (const element of elementsToClear) {\n this._removeStickyStyle(element, stickyDirections);\n }\n });\n }\n /**\n * Applies sticky left and right positions to the cells of each row according to the sticky\n * states of the rendered column definitions.\n * @param rows The rows that should have its set of cells stuck according to the sticky states.\n * @param stickyStartStates A list of boolean states where each state represents whether the cell\n * in this index position should be stuck to the start of the row.\n * @param stickyEndStates A list of boolean states where each state represents whether the cell\n * in this index position should be stuck to the end of the row.\n * @param recalculateCellWidths Whether the sticky styler should recalculate the width of each\n * column cell. If `false` cached widths will be used instead.\n */\n updateStickyColumns(rows, stickyStartStates, stickyEndStates, recalculateCellWidths = true) {\n if (!rows.length ||\n !this._isBrowser ||\n !(stickyStartStates.some(state => state) || stickyEndStates.some(state => state))) {\n if (this._positionListener) {\n this._positionListener.stickyColumnsUpdated({ sizes: [] });\n this._positionListener.stickyEndColumnsUpdated({ sizes: [] });\n }\n return;\n }\n const firstRow = rows[0];\n const numCells = firstRow.children.length;\n const cellWidths = this._getCellWidths(firstRow, recalculateCellWidths);\n const startPositions = this._getStickyStartColumnPositions(cellWidths, stickyStartStates);\n const endPositions = this._getStickyEndColumnPositions(cellWidths, stickyEndStates);\n const lastStickyStart = stickyStartStates.lastIndexOf(true);\n const firstStickyEnd = stickyEndStates.indexOf(true);\n // Coalesce with sticky row updates (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n const isRtl = this.direction === 'rtl';\n const start = isRtl ? 'right' : 'left';\n const end = isRtl ? 'left' : 'right';\n for (const row of rows) {\n for (let i = 0; i < numCells; i++) {\n const cell = row.children[i];\n if (stickyStartStates[i]) {\n this._addStickyStyle(cell, start, startPositions[i], i === lastStickyStart);\n }\n if (stickyEndStates[i]) {\n this._addStickyStyle(cell, end, endPositions[i], i === firstStickyEnd);\n }\n }\n }\n if (this._positionListener) {\n this._positionListener.stickyColumnsUpdated({\n sizes: lastStickyStart === -1\n ? []\n : cellWidths\n .slice(0, lastStickyStart + 1)\n .map((width, index) => (stickyStartStates[index] ? width : null)),\n });\n this._positionListener.stickyEndColumnsUpdated({\n sizes: firstStickyEnd === -1\n ? []\n : cellWidths\n .slice(firstStickyEnd)\n .map((width, index) => (stickyEndStates[index + firstStickyEnd] ? width : null))\n .reverse(),\n });\n }\n });\n }\n /**\n * Applies sticky positioning to the row's cells if using the native table layout, and to the\n * row itself otherwise.\n * @param rowsToStick The list of rows that should be stuck according to their corresponding\n * sticky state and to the provided top or bottom position.\n * @param stickyStates A list of boolean states where each state represents whether the row\n * should be stuck in the particular top or bottom position.\n * @param position The position direction in which the row should be stuck if that row should be\n * sticky.\n *\n */\n stickRows(rowsToStick, stickyStates, position) {\n // Since we can't measure the rows on the server, we can't stick the rows properly.\n if (!this._isBrowser) {\n return;\n }\n // If positioning the rows to the bottom, reverse their order when evaluating the sticky\n // position such that the last row stuck will be \"bottom: 0px\" and so on. Note that the\n // sticky states need to be reversed as well.\n const rows = position === 'bottom' ? rowsToStick.slice().reverse() : rowsToStick;\n const states = position === 'bottom' ? stickyStates.slice().reverse() : stickyStates;\n // Measure row heights all at once before adding sticky styles to reduce layout thrashing.\n const stickyOffsets = [];\n const stickyCellHeights = [];\n const elementsToStick = [];\n for (let rowIndex = 0, stickyOffset = 0; rowIndex < rows.length; rowIndex++) {\n if (!states[rowIndex]) {\n continue;\n }\n stickyOffsets[rowIndex] = stickyOffset;\n const row = rows[rowIndex];\n elementsToStick[rowIndex] = this._isNativeHtmlTable\n ? Array.from(row.children)\n : [row];\n const height = row.getBoundingClientRect().height;\n stickyOffset += height;\n stickyCellHeights[rowIndex] = height;\n }\n const borderedRowIndex = states.lastIndexOf(true);\n // Coalesce with other sticky row updates (top/bottom), sticky columns updates\n // (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n if (!states[rowIndex]) {\n continue;\n }\n const offset = stickyOffsets[rowIndex];\n const isBorderedRowIndex = rowIndex === borderedRowIndex;\n for (const element of elementsToStick[rowIndex]) {\n this._addStickyStyle(element, position, offset, isBorderedRowIndex);\n }\n }\n if (position === 'top') {\n this._positionListener?.stickyHeaderRowsUpdated({\n sizes: stickyCellHeights,\n offsets: stickyOffsets,\n elements: elementsToStick,\n });\n }\n else {\n this._positionListener?.stickyFooterRowsUpdated({\n sizes: stickyCellHeights,\n offsets: stickyOffsets,\n elements: elementsToStick,\n });\n }\n });\n }\n /**\n * When using the native table in Safari, sticky footer cells do not stick. The only way to stick\n * footer rows is to apply sticky styling to the tfoot container. This should only be done if\n * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from\n * the tfoot element.\n */\n updateStickyFooterContainer(tableElement, stickyStates) {\n if (!this._isNativeHtmlTable) {\n return;\n }\n const tfoot = tableElement.querySelector('tfoot');\n // Coalesce with other sticky updates (and potentially other changes like column resize).\n this._coalescedStyleScheduler.schedule(() => {\n if (stickyStates.some(state => !state)) {\n this._removeStickyStyle(tfoot, ['bottom']);\n }\n else {\n this._addStickyStyle(tfoot, 'bottom', 0, false);\n }\n });\n }\n /**\n * Removes the sticky style on the element by removing the sticky cell CSS class, re-evaluating\n * the zIndex, removing each of the provided sticky directions, and removing the\n * sticky position if there are no more directions.\n */\n _removeStickyStyle(element, stickyDirections) {\n for (const dir of stickyDirections) {\n element.style[dir] = '';\n element.classList.remove(this._borderCellCss[dir]);\n }\n // If the element no longer has any more sticky directions, remove sticky positioning and\n // the sticky CSS class.\n // Short-circuit checking element.style[dir] for stickyDirections as they\n // were already removed above.\n const hasDirection = STICKY_DIRECTIONS.some(dir => stickyDirections.indexOf(dir) === -1 && element.style[dir]);\n if (hasDirection) {\n element.style.zIndex = this._getCalculatedZIndex(element);\n }\n else {\n // When not hasDirection, _getCalculatedZIndex will always return ''.\n element.style.zIndex = '';\n if (this._needsPositionStickyOnElement) {\n element.style.position = '';\n }\n element.classList.remove(this._stickCellCss);\n }\n }\n /**\n * Adds the sticky styling to the element by adding the sticky style class, changing position\n * to be sticky (and -webkit-sticky), setting the appropriate zIndex, and adding a sticky\n * direction and value.\n */\n _addStickyStyle(element, dir, dirValue, isBorderElement) {\n element.classList.add(this._stickCellCss);\n if (isBorderElement) {\n element.classList.add(this._borderCellCss[dir]);\n }\n element.style[dir] = `${dirValue}px`;\n element.style.zIndex = this._getCalculatedZIndex(element);\n if (this._needsPositionStickyOnElement) {\n element.style.cssText += 'position: -webkit-sticky; position: sticky; ';\n }\n }\n /**\n * Calculate what the z-index should be for the element, depending on what directions (top,\n * bottom, left, right) have been set. It should be true that elements with a top direction\n * should have the highest index since these are elements like a table header. If any of those\n * elements are also sticky in another direction, then they should appear above other elements\n * that are only sticky top (e.g. a sticky column on a sticky header). Bottom-sticky elements\n * (e.g. footer rows) should then be next in the ordering such that they are below the header\n * but above any non-sticky elements. Finally, left/right sticky elements (e.g. sticky columns)\n * should minimally increment so that they are above non-sticky elements but below top and bottom\n * elements.\n */\n _getCalculatedZIndex(element) {\n const zIndexIncrements = {\n top: 100,\n bottom: 10,\n left: 1,\n right: 1,\n };\n let zIndex = 0;\n // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n for (const dir of STICKY_DIRECTIONS) {\n if (element.style[dir]) {\n zIndex += zIndexIncrements[dir];\n }\n }\n return zIndex ? `${zIndex}` : '';\n }\n /** Gets the widths for each cell in the provided row. */\n _getCellWidths(row, recalculateCellWidths = true) {\n if (!recalculateCellWidths && this._cachedCellWidths.length) {\n return this._cachedCellWidths;\n }\n const cellWidths = [];\n const firstRowCells = row.children;\n for (let i = 0; i < firstRowCells.length; i++) {\n let cell = firstRowCells[i];\n cellWidths.push(cell.getBoundingClientRect().width);\n }\n this._cachedCellWidths = cellWidths;\n return cellWidths;\n }\n /**\n * Determines the left and right positions of each sticky column cell, which will be the\n * accumulation of all sticky column cell widths to the left and right, respectively.\n * Non-sticky cells do not need to have a value set since their positions will not be applied.\n */\n _getStickyStartColumnPositions(widths, stickyStates) {\n const positions = [];\n let nextPosition = 0;\n for (let i = 0; i < widths.length; i++) {\n if (stickyStates[i]) {\n positions[i] = nextPosition;\n nextPosition += widths[i];\n }\n }\n return positions;\n }\n /**\n * Determines the left and right positions of each sticky column cell, which will be the\n * accumulation of all sticky column cell widths to the left and right, respectively.\n * Non-sticky cells do not need to have a value set since their positions will not be applied.\n */\n _getStickyEndColumnPositions(widths, stickyStates) {\n const positions = [];\n let nextPosition = 0;\n for (let i = widths.length; i > 0; i--) {\n if (stickyStates[i]) {\n positions[i] = nextPosition;\n nextPosition += widths[i];\n }\n }\n return positions;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Returns an error to be thrown when attempting to find an nonexistent column.\n * @param id Id whose lookup failed.\n * @docs-private\n */\nfunction getTableUnknownColumnError(id) {\n return Error(`Could not find column with id \"${id}\".`);\n}\n/**\n * Returns an error to be thrown when two column definitions have the same name.\n * @docs-private\n */\nfunction getTableDuplicateColumnNameError(name) {\n return Error(`Duplicate column definition name provided: \"${name}\".`);\n}\n/**\n * Returns an error to be thrown when there are multiple rows that are missing a when function.\n * @docs-private\n */\nfunction getTableMultipleDefaultRowDefsError() {\n return Error(`There can only be one default row without a when predicate function.`);\n}\n/**\n * Returns an error to be thrown when there are no matching row defs for a particular set of data.\n * @docs-private\n */\nfunction getTableMissingMatchingRowDefError(data) {\n return Error(`Could not find a matching row definition for the` +\n `provided row data: ${JSON.stringify(data)}`);\n}\n/**\n * Returns an error to be thrown when there is no row definitions present in the content.\n * @docs-private\n */\nfunction getTableMissingRowDefsError() {\n return Error('Missing definitions for header, footer, and row; ' +\n 'cannot determine which columns should be rendered.');\n}\n/**\n * Returns an error to be thrown when the data source does not match the compatible types.\n * @docs-private\n */\nfunction getTableUnknownDataSourceError() {\n return Error(`Provided data source did not match an array, Observable, or DataSource`);\n}\n/**\n * Returns an error to be thrown when the text column cannot find a parent table to inject.\n * @docs-private\n */\nfunction getTableTextColumnMissingParentTableError() {\n return Error(`Text column could not find a parent table for registration.`);\n}\n/**\n * Returns an error to be thrown when a table text column doesn't have a name.\n * @docs-private\n */\nfunction getTableTextColumnMissingNameError() {\n return Error(`Table text column must have a name.`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** The injection token used to specify the StickyPositioningListener. */\nconst STICKY_POSITIONING_LISTENER = new InjectionToken('CDK_SPL');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with\n * tables that animate rows.\n */\nclass CdkRecycleRows {\n}\nCdkRecycleRows.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkRecycleRows, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nCdkRecycleRows.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkRecycleRows, selector: \"cdk-table[recycleRows], table[cdk-table][recycleRows]\", providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkRecycleRows, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-table[recycleRows], table[cdk-table][recycleRows]',\n providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }],\n }]\n }] });\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert data rows.\n * @docs-private\n */\nclass DataRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nDataRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: DataRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nDataRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: DataRowOutlet, selector: \"[rowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: DataRowOutlet, decorators: [{\n type: Directive,\n args: [{ selector: '[rowOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the header.\n * @docs-private\n */\nclass HeaderRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nHeaderRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: HeaderRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nHeaderRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: HeaderRowOutlet, selector: \"[headerRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: HeaderRowOutlet, decorators: [{\n type: Directive,\n args: [{ selector: '[headerRowOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the footer.\n * @docs-private\n */\nclass FooterRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nFooterRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: FooterRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nFooterRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: FooterRowOutlet, selector: \"[footerRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: FooterRowOutlet, decorators: [{\n type: Directive,\n args: [{ selector: '[footerRowOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * Provides a handle for the table to grab the view\n * container's ng-container to insert the no data row.\n * @docs-private\n */\nclass NoDataRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nNoDataRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: NoDataRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nNoDataRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: NoDataRowOutlet, selector: \"[noDataRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: NoDataRowOutlet, decorators: [{\n type: Directive,\n args: [{ selector: '[noDataRowOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * The table template that can be used by the mat-table. Should not be used outside of the\n * material library.\n * @docs-private\n */\nconst CDK_TABLE_TEMPLATE = \n// Note that according to MDN, the `caption` element has to be projected as the **first**\n// element in the table. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption\n`\n \n \n \n \n \n \n`;\n/**\n * Class used to conveniently type the embedded view ref for rows with a context.\n * @docs-private\n */\nclass RowViewRef extends EmbeddedViewRef {\n}\n/**\n * A data table that can render a header row, data rows, and a footer row.\n * Uses the dataSource input to determine the data to be rendered. The data can be provided either\n * as a data array, an Observable stream that emits the data array to render, or a DataSource with a\n * connect function that will return an Observable stream that emits the data array to render.\n */\nclass CdkTable {\n constructor(_differs, _changeDetectorRef, _elementRef, role, _dir, _document, _platform, _viewRepeater, _coalescedStyleScheduler, _viewportRuler, \n /**\n * @deprecated `_stickyPositioningListener` parameter to become required.\n * @breaking-change 13.0.0\n */\n _stickyPositioningListener, \n /**\n * @deprecated `_ngZone` parameter to become required.\n * @breaking-change 14.0.0\n */\n _ngZone) {\n this._differs = _differs;\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._dir = _dir;\n this._platform = _platform;\n this._viewRepeater = _viewRepeater;\n this._coalescedStyleScheduler = _coalescedStyleScheduler;\n this._viewportRuler = _viewportRuler;\n this._stickyPositioningListener = _stickyPositioningListener;\n this._ngZone = _ngZone;\n /** Subject that emits when the component has been destroyed. */\n this._onDestroy = new Subject();\n /**\n * Map of all the user's defined columns (header, data, and footer cell template) identified by\n * name. Collection populated by the column definitions gathered by `ContentChildren` as well as\n * any custom column definitions added to `_customColumnDefs`.\n */\n this._columnDefsByName = new Map();\n /**\n * Column definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * column definitions as *its* content child.\n */\n this._customColumnDefs = new Set();\n /**\n * Data row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * built-in data rows as *its* content child.\n */\n this._customRowDefs = new Set();\n /**\n * Header row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * built-in header rows as *its* content child.\n */\n this._customHeaderRowDefs = new Set();\n /**\n * Footer row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has a\n * built-in footer row as *its* content child.\n */\n this._customFooterRowDefs = new Set();\n /**\n * Whether the header row definition has been changed. Triggers an update to the header row after\n * content is checked. Initialized as true so that the table renders the initial set of rows.\n */\n this._headerRowDefChanged = true;\n /**\n * Whether the footer row definition has been changed. Triggers an update to the footer row after\n * content is checked. Initialized as true so that the table renders the initial set of rows.\n */\n this._footerRowDefChanged = true;\n /**\n * Whether the sticky column styles need to be updated. Set to `true` when the visible columns\n * change.\n */\n this._stickyColumnStylesNeedReset = true;\n /**\n * Whether the sticky styler should recalculate cell widths when applying sticky styles. If\n * `false`, cached values will be used instead. This is only applicable to tables with\n * {@link fixedLayout} enabled. For other tables, cell widths will always be recalculated.\n */\n this._forceRecalculateCellWidths = true;\n /**\n * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing\n * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with\n * the cached `RenderRow` objects when possible, the row identity is preserved when the data\n * and row template matches, which allows the `IterableDiffer` to check rows by reference\n * and understand which rows are added/moved/removed.\n *\n * Implemented as a map of maps where the first key is the `data: T` object and the second is the\n * `CdkRowDef` object. With the two keys, the cache points to a `RenderRow` object that\n * contains an array of created pairs. The array is necessary to handle cases where the data\n * array contains multiple duplicate data objects and each instantiated `RenderRow` must be\n * stored.\n */\n this._cachedRenderRowsMap = new Map();\n /**\n * CSS class added to any row or cell that has sticky positioning applied. May be overridden by\n * table subclasses.\n */\n this.stickyCssClass = 'cdk-table-sticky';\n /**\n * Whether to manually add position: sticky to all sticky cell elements. Not needed if\n * the position is set in a selector associated with the value of stickyCssClass. May be\n * overridden by table subclasses\n */\n this.needsPositionStickyOnElement = true;\n /** Whether the no data row is currently showing anything. */\n this._isShowingNoDataRow = false;\n this._multiTemplateDataRows = false;\n this._fixedLayout = false;\n /**\n * Emits when the table completes rendering a set of data rows based on the latest data from the\n * data source, even if the set of rows is empty.\n */\n this.contentChanged = new EventEmitter();\n // TODO(andrewseguin): Remove max value as the end index\n // and instead calculate the view on init and scroll.\n /**\n * Stream containing the latest information on what rows are being displayed on screen.\n * Can be used by the data source to as a heuristic of what data should be provided.\n *\n * @docs-private\n */\n this.viewChange = new BehaviorSubject({\n start: 0,\n end: Number.MAX_VALUE,\n });\n if (!role) {\n this._elementRef.nativeElement.setAttribute('role', 'table');\n }\n this._document = _document;\n this._isNativeHtmlTable = this._elementRef.nativeElement.nodeName === 'TABLE';\n }\n /**\n * Tracking function that will be used to check the differences in data changes. Used similarly\n * to `ngFor` `trackBy` function. Optimize row operations by identifying a row based on its data\n * relative to the function to know if a row should be added/removed/moved.\n * Accepts a function that takes two parameters, `index` and `item`.\n */\n get trackBy() {\n return this._trackByFn;\n }\n set trackBy(fn) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {\n console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._trackByFn = fn;\n }\n /**\n * The table's source of data, which can be provided in three ways (in order of complexity):\n * - Simple data array (each object represents one table row)\n * - Stream that emits a data array each time the array changes\n * - `DataSource` object that implements the connect/disconnect interface.\n *\n * If a data array is provided, the table must be notified when the array's objects are\n * added, removed, or moved. This can be done by calling the `renderRows()` function which will\n * render the diff since the last table render. If the data array reference is changed, the table\n * will automatically trigger an update to the rows.\n *\n * When providing an Observable stream, the table will trigger an update automatically when the\n * stream emits a new array of data.\n *\n * Finally, when providing a `DataSource` object, the table will use the Observable stream\n * provided by the connect function and trigger updates when that stream emits new data array\n * values. During the table's ngOnDestroy or when the data source is removed from the table, the\n * table will call the DataSource's `disconnect` function (may be useful for cleaning up any\n * subscriptions registered during the connect process).\n */\n get dataSource() {\n return this._dataSource;\n }\n set dataSource(dataSource) {\n if (this._dataSource !== dataSource) {\n this._switchDataSource(dataSource);\n }\n }\n /**\n * Whether to allow multiple rows per data object by evaluating which rows evaluate their 'when'\n * predicate to true. If `multiTemplateDataRows` is false, which is the default value, then each\n * dataobject will render the first row that evaluates its when predicate to true, in the order\n * defined in the table, or otherwise the default row which does not have a when predicate.\n */\n get multiTemplateDataRows() {\n return this._multiTemplateDataRows;\n }\n set multiTemplateDataRows(v) {\n this._multiTemplateDataRows = coerceBooleanProperty(v);\n // In Ivy if this value is set via a static attribute (e.g.
),\n // this setter will be invoked before the row outlet has been defined hence the null check.\n if (this._rowOutlet && this._rowOutlet.viewContainer.length) {\n this._forceRenderDataRows();\n this.updateStickyColumnStyles();\n }\n }\n /**\n * Whether to use a fixed table layout. Enabling this option will enforce consistent column widths\n * and optimize rendering sticky styles for native tables. No-op for flex tables.\n */\n get fixedLayout() {\n return this._fixedLayout;\n }\n set fixedLayout(v) {\n this._fixedLayout = coerceBooleanProperty(v);\n // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated.\n this._forceRecalculateCellWidths = true;\n this._stickyColumnStylesNeedReset = true;\n }\n ngOnInit() {\n this._setupStickyStyler();\n if (this._isNativeHtmlTable) {\n this._applyNativeTableSections();\n }\n // Set up the trackBy function so that it uses the `RenderRow` as its identity by default. If\n // the user has provided a custom trackBy, return the result of that function as evaluated\n // with the values of the `RenderRow`'s data and index.\n this._dataDiffer = this._differs.find([]).create((_i, dataRow) => {\n return this.trackBy ? this.trackBy(dataRow.dataIndex, dataRow.data) : dataRow;\n });\n this._viewportRuler\n .change()\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => {\n this._forceRecalculateCellWidths = true;\n });\n }\n ngAfterContentChecked() {\n // Cache the row and column definitions gathered by ContentChildren and programmatic injection.\n this._cacheRowDefs();\n this._cacheColumnDefs();\n // Make sure that the user has at least added header, footer, or data row def.\n if (!this._headerRowDefs.length &&\n !this._footerRowDefs.length &&\n !this._rowDefs.length &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMissingRowDefsError();\n }\n // Render updates if the list of columns have been changed for the header, row, or footer defs.\n const columnsChanged = this._renderUpdatedColumns();\n const rowDefsChanged = columnsChanged || this._headerRowDefChanged || this._footerRowDefChanged;\n // Ensure sticky column styles are reset if set to `true` elsewhere.\n this._stickyColumnStylesNeedReset = this._stickyColumnStylesNeedReset || rowDefsChanged;\n this._forceRecalculateCellWidths = rowDefsChanged;\n // If the header row definition has been changed, trigger a render to the header row.\n if (this._headerRowDefChanged) {\n this._forceRenderHeaderRows();\n this._headerRowDefChanged = false;\n }\n // If the footer row definition has been changed, trigger a render to the footer row.\n if (this._footerRowDefChanged) {\n this._forceRenderFooterRows();\n this._footerRowDefChanged = false;\n }\n // If there is a data source and row definitions, connect to the data source unless a\n // connection has already been made.\n if (this.dataSource && this._rowDefs.length > 0 && !this._renderChangeSubscription) {\n this._observeRenderChanges();\n }\n else if (this._stickyColumnStylesNeedReset) {\n // In the above case, _observeRenderChanges will result in updateStickyColumnStyles being\n // called when it row data arrives. Otherwise, we need to call it proactively.\n this.updateStickyColumnStyles();\n }\n this._checkStickyStates();\n }\n ngOnDestroy() {\n [\n this._rowOutlet.viewContainer,\n this._headerRowOutlet.viewContainer,\n this._footerRowOutlet.viewContainer,\n this._cachedRenderRowsMap,\n this._customColumnDefs,\n this._customRowDefs,\n this._customHeaderRowDefs,\n this._customFooterRowDefs,\n this._columnDefsByName,\n ].forEach(def => {\n def.clear();\n });\n this._headerRowDefs = [];\n this._footerRowDefs = [];\n this._defaultRowDef = null;\n this._onDestroy.next();\n this._onDestroy.complete();\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect(this);\n }\n }\n /**\n * Renders rows based on the table's latest set of data, which was either provided directly as an\n * input or retrieved through an Observable stream (directly or from a DataSource).\n * Checks for differences in the data since the last diff to perform only the necessary\n * changes (add/remove/move rows).\n *\n * If the table's data source is a DataSource or Observable, this will be invoked automatically\n * each time the provided Observable stream emits a new data array. Otherwise if your data is\n * an array, this function will need to be called to render any changes.\n */\n renderRows() {\n this._renderRows = this._getAllRenderRows();\n const changes = this._dataDiffer.diff(this._renderRows);\n if (!changes) {\n this._updateNoDataRow();\n this.contentChanged.next();\n return;\n }\n const viewContainer = this._rowOutlet.viewContainer;\n this._viewRepeater.applyChanges(changes, viewContainer, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record.item, currentIndex), record => record.item.data, (change) => {\n if (change.operation === 1 /* _ViewRepeaterOperation.INSERTED */ && change.context) {\n this._renderCellTemplateForItem(change.record.item.rowDef, change.context);\n }\n });\n // Update the meta context of a row's context data (index, count, first, last, ...)\n this._updateRowIndexContext();\n // Update rows that did not get added/removed/moved but may have had their identity changed,\n // e.g. if trackBy matched data on some property but the actual data reference changed.\n changes.forEachIdentityChange((record) => {\n const rowView = viewContainer.get(record.currentIndex);\n rowView.context.$implicit = record.item.data;\n });\n this._updateNoDataRow();\n // Allow the new row data to render before measuring it.\n // @breaking-change 14.0.0 Remove undefined check once _ngZone is required.\n if (this._ngZone && NgZone.isInAngularZone()) {\n this._ngZone.onStable.pipe(take(1), takeUntil(this._onDestroy)).subscribe(() => {\n this.updateStickyColumnStyles();\n });\n }\n else {\n this.updateStickyColumnStyles();\n }\n this.contentChanged.next();\n }\n /** Adds a column definition that was not included as part of the content children. */\n addColumnDef(columnDef) {\n this._customColumnDefs.add(columnDef);\n }\n /** Removes a column definition that was not included as part of the content children. */\n removeColumnDef(columnDef) {\n this._customColumnDefs.delete(columnDef);\n }\n /** Adds a row definition that was not included as part of the content children. */\n addRowDef(rowDef) {\n this._customRowDefs.add(rowDef);\n }\n /** Removes a row definition that was not included as part of the content children. */\n removeRowDef(rowDef) {\n this._customRowDefs.delete(rowDef);\n }\n /** Adds a header row definition that was not included as part of the content children. */\n addHeaderRowDef(headerRowDef) {\n this._customHeaderRowDefs.add(headerRowDef);\n this._headerRowDefChanged = true;\n }\n /** Removes a header row definition that was not included as part of the content children. */\n removeHeaderRowDef(headerRowDef) {\n this._customHeaderRowDefs.delete(headerRowDef);\n this._headerRowDefChanged = true;\n }\n /** Adds a footer row definition that was not included as part of the content children. */\n addFooterRowDef(footerRowDef) {\n this._customFooterRowDefs.add(footerRowDef);\n this._footerRowDefChanged = true;\n }\n /** Removes a footer row definition that was not included as part of the content children. */\n removeFooterRowDef(footerRowDef) {\n this._customFooterRowDefs.delete(footerRowDef);\n this._footerRowDefChanged = true;\n }\n /** Sets a no data row definition that was not included as a part of the content children. */\n setNoDataRow(noDataRow) {\n this._customNoDataRow = noDataRow;\n }\n /**\n * Updates the header sticky styles. First resets all applied styles with respect to the cells\n * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is\n * automatically called when the header row changes its displayed set of columns, or if its\n * sticky input changes. May be called manually for cases where the cell content changes outside\n * of these events.\n */\n updateStickyHeaderRowStyles() {\n const headerRows = this._getRenderedRows(this._headerRowOutlet);\n const tableElement = this._elementRef.nativeElement;\n // Hide the thead element if there are no header rows. This is necessary to satisfy\n // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n // required child `row`.\n const thead = tableElement.querySelector('thead');\n if (thead) {\n thead.style.display = headerRows.length ? '' : 'none';\n }\n const stickyStates = this._headerRowDefs.map(def => def.sticky);\n this._stickyStyler.clearStickyPositioning(headerRows, ['top']);\n this._stickyStyler.stickRows(headerRows, stickyStates, 'top');\n // Reset the dirty state of the sticky input change since it has been used.\n this._headerRowDefs.forEach(def => def.resetStickyChanged());\n }\n /**\n * Updates the footer sticky styles. First resets all applied styles with respect to the cells\n * sticking to the bottom. Then, evaluating which cells need to be stuck to the bottom. This is\n * automatically called when the footer row changes its displayed set of columns, or if its\n * sticky input changes. May be called manually for cases where the cell content changes outside\n * of these events.\n */\n updateStickyFooterRowStyles() {\n const footerRows = this._getRenderedRows(this._footerRowOutlet);\n const tableElement = this._elementRef.nativeElement;\n // Hide the tfoot element if there are no footer rows. This is necessary to satisfy\n // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n // required child `row`.\n const tfoot = tableElement.querySelector('tfoot');\n if (tfoot) {\n tfoot.style.display = footerRows.length ? '' : 'none';\n }\n const stickyStates = this._footerRowDefs.map(def => def.sticky);\n this._stickyStyler.clearStickyPositioning(footerRows, ['bottom']);\n this._stickyStyler.stickRows(footerRows, stickyStates, 'bottom');\n this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement, stickyStates);\n // Reset the dirty state of the sticky input change since it has been used.\n this._footerRowDefs.forEach(def => def.resetStickyChanged());\n }\n /**\n * Updates the column sticky styles. First resets all applied styles with respect to the cells\n * sticking to the left and right. Then sticky styles are added for the left and right according\n * to the column definitions for each cell in each row. This is automatically called when\n * the data source provides a new set of data or when a column definition changes its sticky\n * input. May be called manually for cases where the cell content changes outside of these events.\n */\n updateStickyColumnStyles() {\n const headerRows = this._getRenderedRows(this._headerRowOutlet);\n const dataRows = this._getRenderedRows(this._rowOutlet);\n const footerRows = this._getRenderedRows(this._footerRowOutlet);\n // For tables not using a fixed layout, the column widths may change when new rows are rendered.\n // In a table using a fixed layout, row content won't affect column width, so sticky styles\n // don't need to be cleared unless either the sticky column config changes or one of the row\n // defs change.\n if ((this._isNativeHtmlTable && !this._fixedLayout) || this._stickyColumnStylesNeedReset) {\n // Clear the left and right positioning from all columns in the table across all rows since\n // sticky columns span across all table sections (header, data, footer)\n this._stickyStyler.clearStickyPositioning([...headerRows, ...dataRows, ...footerRows], ['left', 'right']);\n this._stickyColumnStylesNeedReset = false;\n }\n // Update the sticky styles for each header row depending on the def's sticky state\n headerRows.forEach((headerRow, i) => {\n this._addStickyColumnStyles([headerRow], this._headerRowDefs[i]);\n });\n // Update the sticky styles for each data row depending on its def's sticky state\n this._rowDefs.forEach(rowDef => {\n // Collect all the rows rendered with this row definition.\n const rows = [];\n for (let i = 0; i < dataRows.length; i++) {\n if (this._renderRows[i].rowDef === rowDef) {\n rows.push(dataRows[i]);\n }\n }\n this._addStickyColumnStyles(rows, rowDef);\n });\n // Update the sticky styles for each footer row depending on the def's sticky state\n footerRows.forEach((footerRow, i) => {\n this._addStickyColumnStyles([footerRow], this._footerRowDefs[i]);\n });\n // Reset the dirty state of the sticky input change since it has been used.\n Array.from(this._columnDefsByName.values()).forEach(def => def.resetStickyChanged());\n }\n /**\n * Get the list of RenderRow objects to render according to the current list of data and defined\n * row definitions. If the previous list already contained a particular pair, it should be reused\n * so that the differ equates their references.\n */\n _getAllRenderRows() {\n const renderRows = [];\n // Store the cache and create a new one. Any re-used RenderRow objects will be moved into the\n // new cache while unused ones can be picked up by garbage collection.\n const prevCachedRenderRows = this._cachedRenderRowsMap;\n this._cachedRenderRowsMap = new Map();\n // For each data object, get the list of rows that should be rendered, represented by the\n // respective `RenderRow` object which is the pair of `data` and `CdkRowDef`.\n for (let i = 0; i < this._data.length; i++) {\n let data = this._data[i];\n const renderRowsForData = this._getRenderRowsForData(data, i, prevCachedRenderRows.get(data));\n if (!this._cachedRenderRowsMap.has(data)) {\n this._cachedRenderRowsMap.set(data, new WeakMap());\n }\n for (let j = 0; j < renderRowsForData.length; j++) {\n let renderRow = renderRowsForData[j];\n const cache = this._cachedRenderRowsMap.get(renderRow.data);\n if (cache.has(renderRow.rowDef)) {\n cache.get(renderRow.rowDef).push(renderRow);\n }\n else {\n cache.set(renderRow.rowDef, [renderRow]);\n }\n renderRows.push(renderRow);\n }\n }\n return renderRows;\n }\n /**\n * Gets a list of `RenderRow` for the provided data object and any `CdkRowDef` objects that\n * should be rendered for this data. Reuses the cached RenderRow objects if they match the same\n * `(T, CdkRowDef)` pair.\n */\n _getRenderRowsForData(data, dataIndex, cache) {\n const rowDefs = this._getRowDefs(data, dataIndex);\n return rowDefs.map(rowDef => {\n const cachedRenderRows = cache && cache.has(rowDef) ? cache.get(rowDef) : [];\n if (cachedRenderRows.length) {\n const dataRow = cachedRenderRows.shift();\n dataRow.dataIndex = dataIndex;\n return dataRow;\n }\n else {\n return { data, rowDef, dataIndex };\n }\n });\n }\n /** Update the map containing the content's column definitions. */\n _cacheColumnDefs() {\n this._columnDefsByName.clear();\n const columnDefs = mergeArrayAndSet(this._getOwnDefs(this._contentColumnDefs), this._customColumnDefs);\n columnDefs.forEach(columnDef => {\n if (this._columnDefsByName.has(columnDef.name) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableDuplicateColumnNameError(columnDef.name);\n }\n this._columnDefsByName.set(columnDef.name, columnDef);\n });\n }\n /** Update the list of all available row definitions that can be used. */\n _cacheRowDefs() {\n this._headerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentHeaderRowDefs), this._customHeaderRowDefs);\n this._footerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentFooterRowDefs), this._customFooterRowDefs);\n this._rowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentRowDefs), this._customRowDefs);\n // After all row definitions are determined, find the row definition to be considered default.\n const defaultRowDefs = this._rowDefs.filter(def => !def.when);\n if (!this.multiTemplateDataRows &&\n defaultRowDefs.length > 1 &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMultipleDefaultRowDefsError();\n }\n this._defaultRowDef = defaultRowDefs[0];\n }\n /**\n * Check if the header, data, or footer rows have changed what columns they want to display or\n * whether the sticky states have changed for the header or footer. If there is a diff, then\n * re-render that section.\n */\n _renderUpdatedColumns() {\n const columnsDiffReducer = (acc, def) => acc || !!def.getColumnsDiff();\n // Force re-render data rows if the list of column definitions have changed.\n const dataColumnsChanged = this._rowDefs.reduce(columnsDiffReducer, false);\n if (dataColumnsChanged) {\n this._forceRenderDataRows();\n }\n // Force re-render header/footer rows if the list of column definitions have changed.\n const headerColumnsChanged = this._headerRowDefs.reduce(columnsDiffReducer, false);\n if (headerColumnsChanged) {\n this._forceRenderHeaderRows();\n }\n const footerColumnsChanged = this._footerRowDefs.reduce(columnsDiffReducer, false);\n if (footerColumnsChanged) {\n this._forceRenderFooterRows();\n }\n return dataColumnsChanged || headerColumnsChanged || footerColumnsChanged;\n }\n /**\n * Switch to the provided data source by resetting the data and unsubscribing from the current\n * render change subscription if one exists. If the data source is null, interpret this by\n * clearing the row outlet. Otherwise start listening for new data.\n */\n _switchDataSource(dataSource) {\n this._data = [];\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect(this);\n }\n // Stop listening for data from the previous data source.\n if (this._renderChangeSubscription) {\n this._renderChangeSubscription.unsubscribe();\n this._renderChangeSubscription = null;\n }\n if (!dataSource) {\n if (this._dataDiffer) {\n this._dataDiffer.diff([]);\n }\n this._rowOutlet.viewContainer.clear();\n }\n this._dataSource = dataSource;\n }\n /** Set up a subscription for the data provided by the data source. */\n _observeRenderChanges() {\n // If no data source has been set, there is nothing to observe for changes.\n if (!this.dataSource) {\n return;\n }\n let dataStream;\n if (isDataSource(this.dataSource)) {\n dataStream = this.dataSource.connect(this);\n }\n else if (isObservable(this.dataSource)) {\n dataStream = this.dataSource;\n }\n else if (Array.isArray(this.dataSource)) {\n dataStream = of(this.dataSource);\n }\n if (dataStream === undefined && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownDataSourceError();\n }\n this._renderChangeSubscription = dataStream\n .pipe(takeUntil(this._onDestroy))\n .subscribe(data => {\n this._data = data || [];\n this.renderRows();\n });\n }\n /**\n * Clears any existing content in the header row outlet and creates a new embedded view\n * in the outlet using the header row definition.\n */\n _forceRenderHeaderRows() {\n // Clear the header row outlet if any content exists.\n if (this._headerRowOutlet.viewContainer.length > 0) {\n this._headerRowOutlet.viewContainer.clear();\n }\n this._headerRowDefs.forEach((def, i) => this._renderRow(this._headerRowOutlet, def, i));\n this.updateStickyHeaderRowStyles();\n }\n /**\n * Clears any existing content in the footer row outlet and creates a new embedded view\n * in the outlet using the footer row definition.\n */\n _forceRenderFooterRows() {\n // Clear the footer row outlet if any content exists.\n if (this._footerRowOutlet.viewContainer.length > 0) {\n this._footerRowOutlet.viewContainer.clear();\n }\n this._footerRowDefs.forEach((def, i) => this._renderRow(this._footerRowOutlet, def, i));\n this.updateStickyFooterRowStyles();\n }\n /** Adds the sticky column styles for the rows according to the columns' stick states. */\n _addStickyColumnStyles(rows, rowDef) {\n const columnDefs = Array.from(rowDef.columns || []).map(columnName => {\n const columnDef = this._columnDefsByName.get(columnName);\n if (!columnDef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownColumnError(columnName);\n }\n return columnDef;\n });\n const stickyStartStates = columnDefs.map(columnDef => columnDef.sticky);\n const stickyEndStates = columnDefs.map(columnDef => columnDef.stickyEnd);\n this._stickyStyler.updateStickyColumns(rows, stickyStartStates, stickyEndStates, !this._fixedLayout || this._forceRecalculateCellWidths);\n }\n /** Gets the list of rows that have been rendered in the row outlet. */\n _getRenderedRows(rowOutlet) {\n const renderedRows = [];\n for (let i = 0; i < rowOutlet.viewContainer.length; i++) {\n const viewRef = rowOutlet.viewContainer.get(i);\n renderedRows.push(viewRef.rootNodes[0]);\n }\n return renderedRows;\n }\n /**\n * Get the matching row definitions that should be used for this row data. If there is only\n * one row definition, it is returned. Otherwise, find the row definitions that has a when\n * predicate that returns true with the data. If none return true, return the default row\n * definition.\n */\n _getRowDefs(data, dataIndex) {\n if (this._rowDefs.length == 1) {\n return [this._rowDefs[0]];\n }\n let rowDefs = [];\n if (this.multiTemplateDataRows) {\n rowDefs = this._rowDefs.filter(def => !def.when || def.when(dataIndex, data));\n }\n else {\n let rowDef = this._rowDefs.find(def => def.when && def.when(dataIndex, data)) || this._defaultRowDef;\n if (rowDef) {\n rowDefs.push(rowDef);\n }\n }\n if (!rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMissingMatchingRowDefError(data);\n }\n return rowDefs;\n }\n _getEmbeddedViewArgs(renderRow, index) {\n const rowDef = renderRow.rowDef;\n const context = { $implicit: renderRow.data };\n return {\n templateRef: rowDef.template,\n context,\n index,\n };\n }\n /**\n * Creates a new row template in the outlet and fills it with the set of cell templates.\n * Optionally takes a context to provide to the row and cells, as well as an optional index\n * of where to place the new row template in the outlet.\n */\n _renderRow(outlet, rowDef, index, context = {}) {\n // TODO(andrewseguin): enforce that one outlet was instantiated from createEmbeddedView\n const view = outlet.viewContainer.createEmbeddedView(rowDef.template, context, index);\n this._renderCellTemplateForItem(rowDef, context);\n return view;\n }\n _renderCellTemplateForItem(rowDef, context) {\n for (let cellTemplate of this._getCellTemplates(rowDef)) {\n if (CdkCellOutlet.mostRecentCellOutlet) {\n CdkCellOutlet.mostRecentCellOutlet._viewContainer.createEmbeddedView(cellTemplate, context);\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Updates the index-related context for each row to reflect any changes in the index of the rows,\n * e.g. first/last/even/odd.\n */\n _updateRowIndexContext() {\n const viewContainer = this._rowOutlet.viewContainer;\n for (let renderIndex = 0, count = viewContainer.length; renderIndex < count; renderIndex++) {\n const viewRef = viewContainer.get(renderIndex);\n const context = viewRef.context;\n context.count = count;\n context.first = renderIndex === 0;\n context.last = renderIndex === count - 1;\n context.even = renderIndex % 2 === 0;\n context.odd = !context.even;\n if (this.multiTemplateDataRows) {\n context.dataIndex = this._renderRows[renderIndex].dataIndex;\n context.renderIndex = renderIndex;\n }\n else {\n context.index = this._renderRows[renderIndex].dataIndex;\n }\n }\n }\n /** Gets the column definitions for the provided row def. */\n _getCellTemplates(rowDef) {\n if (!rowDef || !rowDef.columns) {\n return [];\n }\n return Array.from(rowDef.columns, columnId => {\n const column = this._columnDefsByName.get(columnId);\n if (!column && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownColumnError(columnId);\n }\n return rowDef.extractCellTemplate(column);\n });\n }\n /** Adds native table sections (e.g. tbody) and moves the row outlets into them. */\n _applyNativeTableSections() {\n const documentFragment = this._document.createDocumentFragment();\n const sections = [\n { tag: 'thead', outlets: [this._headerRowOutlet] },\n { tag: 'tbody', outlets: [this._rowOutlet, this._noDataRowOutlet] },\n { tag: 'tfoot', outlets: [this._footerRowOutlet] },\n ];\n for (const section of sections) {\n const element = this._document.createElement(section.tag);\n element.setAttribute('role', 'rowgroup');\n for (const outlet of section.outlets) {\n element.appendChild(outlet.elementRef.nativeElement);\n }\n documentFragment.appendChild(element);\n }\n // Use a DocumentFragment so we don't hit the DOM on each iteration.\n this._elementRef.nativeElement.appendChild(documentFragment);\n }\n /**\n * Forces a re-render of the data rows. Should be called in cases where there has been an input\n * change that affects the evaluation of which rows should be rendered, e.g. toggling\n * `multiTemplateDataRows` or adding/removing row definitions.\n */\n _forceRenderDataRows() {\n this._dataDiffer.diff([]);\n this._rowOutlet.viewContainer.clear();\n this.renderRows();\n }\n /**\n * Checks if there has been a change in sticky states since last check and applies the correct\n * sticky styles. Since checking resets the \"dirty\" state, this should only be performed once\n * during a change detection and after the inputs are settled (after content check).\n */\n _checkStickyStates() {\n const stickyCheckReducer = (acc, d) => {\n return acc || d.hasStickyChanged();\n };\n // Note that the check needs to occur for every definition since it notifies the definition\n // that it can reset its dirty state. Using another operator like `some` may short-circuit\n // remaining definitions and leave them in an unchecked state.\n if (this._headerRowDefs.reduce(stickyCheckReducer, false)) {\n this.updateStickyHeaderRowStyles();\n }\n if (this._footerRowDefs.reduce(stickyCheckReducer, false)) {\n this.updateStickyFooterRowStyles();\n }\n if (Array.from(this._columnDefsByName.values()).reduce(stickyCheckReducer, false)) {\n this._stickyColumnStylesNeedReset = true;\n this.updateStickyColumnStyles();\n }\n }\n /**\n * Creates the sticky styler that will be used for sticky rows and columns. Listens\n * for directionality changes and provides the latest direction to the styler. Re-applies column\n * stickiness when directionality changes.\n */\n _setupStickyStyler() {\n const direction = this._dir ? this._dir.value : 'ltr';\n this._stickyStyler = new StickyStyler(this._isNativeHtmlTable, this.stickyCssClass, direction, this._coalescedStyleScheduler, this._platform.isBrowser, this.needsPositionStickyOnElement, this._stickyPositioningListener);\n (this._dir ? this._dir.change : of())\n .pipe(takeUntil(this._onDestroy))\n .subscribe(value => {\n this._stickyStyler.direction = value;\n this.updateStickyColumnStyles();\n });\n }\n /** Filters definitions that belong to this table from a QueryList. */\n _getOwnDefs(items) {\n return items.filter(item => !item._table || item._table === this);\n }\n /** Creates or removes the no data row, depending on whether any data is being shown. */\n _updateNoDataRow() {\n const noDataRow = this._customNoDataRow || this._noDataRow;\n if (!noDataRow) {\n return;\n }\n const shouldShow = this._rowOutlet.viewContainer.length === 0;\n if (shouldShow === this._isShowingNoDataRow) {\n return;\n }\n const container = this._noDataRowOutlet.viewContainer;\n if (shouldShow) {\n const view = container.createEmbeddedView(noDataRow.templateRef);\n const rootNode = view.rootNodes[0];\n // Only add the attributes if we have a single root node since it's hard\n // to figure out which one to add it to when there are multiple.\n if (view.rootNodes.length === 1 && rootNode?.nodeType === this._document.ELEMENT_NODE) {\n rootNode.setAttribute('role', 'row');\n rootNode.classList.add(noDataRow._contentClassName);\n }\n }\n else {\n container.clear();\n }\n this._isShowingNoDataRow = shouldShow;\n }\n}\nCdkTable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkTable, deps: [{ token: i0.IterableDiffers }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: 'role', attribute: true }, { token: i1.Directionality, optional: true }, { token: DOCUMENT }, { token: i2.Platform }, { token: _VIEW_REPEATER_STRATEGY }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i3.ViewportRuler }, { token: STICKY_POSITIONING_LISTENER, optional: true, skipSelf: true }, { token: i0.NgZone, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nCdkTable.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkTable, selector: \"cdk-table, table[cdk-table]\", inputs: { trackBy: \"trackBy\", dataSource: \"dataSource\", multiTemplateDataRows: \"multiTemplateDataRows\", fixedLayout: \"fixedLayout\" }, outputs: { contentChanged: \"contentChanged\" }, host: { properties: { \"class.cdk-table-fixed-layout\": \"fixedLayout\" }, classAttribute: \"cdk-table\" }, providers: [\n { provide: CDK_TABLE, useExisting: CdkTable },\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n ], queries: [{ propertyName: \"_noDataRow\", first: true, predicate: CdkNoDataRow, descendants: true }, { propertyName: \"_contentColumnDefs\", predicate: CdkColumnDef, descendants: true }, { propertyName: \"_contentRowDefs\", predicate: CdkRowDef, descendants: true }, { propertyName: \"_contentHeaderRowDefs\", predicate: CdkHeaderRowDef, descendants: true }, { propertyName: \"_contentFooterRowDefs\", predicate: CdkFooterRowDef, descendants: true }], viewQueries: [{ propertyName: \"_rowOutlet\", first: true, predicate: DataRowOutlet, descendants: true, static: true }, { propertyName: \"_headerRowOutlet\", first: true, predicate: HeaderRowOutlet, descendants: true, static: true }, { propertyName: \"_footerRowOutlet\", first: true, predicate: FooterRowOutlet, descendants: true, static: true }, { propertyName: \"_noDataRowOutlet\", first: true, predicate: NoDataRowOutlet, descendants: true, static: true }], exportAs: [\"cdkTable\"], ngImport: i0, template: \"\\n \\n \\n \\n \\n \\n \\n\", isInline: true, styles: [\".cdk-table-fixed-layout{table-layout:fixed}\"], dependencies: [{ kind: \"directive\", type: DataRowOutlet, selector: \"[rowOutlet]\" }, { kind: \"directive\", type: HeaderRowOutlet, selector: \"[headerRowOutlet]\" }, { kind: \"directive\", type: FooterRowOutlet, selector: \"[footerRowOutlet]\" }, { kind: \"directive\", type: NoDataRowOutlet, selector: \"[noDataRowOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkTable, decorators: [{\n type: Component,\n args: [{ selector: 'cdk-table, table[cdk-table]', exportAs: 'cdkTable', template: CDK_TABLE_TEMPLATE, host: {\n 'class': 'cdk-table',\n '[class.cdk-table-fixed-layout]': 'fixedLayout',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, providers: [\n { provide: CDK_TABLE, useExisting: CdkTable },\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n ], styles: [\".cdk-table-fixed-layout{table-layout:fixed}\"] }]\n }], ctorParameters: function () { return [{ type: i0.IterableDiffers }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['role']\n }] }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i2.Platform }, { type: undefined, decorators: [{\n type: Inject,\n args: [_VIEW_REPEATER_STRATEGY]\n }] }, { type: _CoalescedStyleScheduler, decorators: [{\n type: Inject,\n args: [_COALESCED_STYLE_SCHEDULER]\n }] }, { type: i3.ViewportRuler }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }, {\n type: Inject,\n args: [STICKY_POSITIONING_LISTENER]\n }] }, { type: i0.NgZone, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { trackBy: [{\n type: Input\n }], dataSource: [{\n type: Input\n }], multiTemplateDataRows: [{\n type: Input\n }], fixedLayout: [{\n type: Input\n }], contentChanged: [{\n type: Output\n }], _rowOutlet: [{\n type: ViewChild,\n args: [DataRowOutlet, { static: true }]\n }], _headerRowOutlet: [{\n type: ViewChild,\n args: [HeaderRowOutlet, { static: true }]\n }], _footerRowOutlet: [{\n type: ViewChild,\n args: [FooterRowOutlet, { static: true }]\n }], _noDataRowOutlet: [{\n type: ViewChild,\n args: [NoDataRowOutlet, { static: true }]\n }], _contentColumnDefs: [{\n type: ContentChildren,\n args: [CdkColumnDef, { descendants: true }]\n }], _contentRowDefs: [{\n type: ContentChildren,\n args: [CdkRowDef, { descendants: true }]\n }], _contentHeaderRowDefs: [{\n type: ContentChildren,\n args: [CdkHeaderRowDef, {\n descendants: true,\n }]\n }], _contentFooterRowDefs: [{\n type: ContentChildren,\n args: [CdkFooterRowDef, {\n descendants: true,\n }]\n }], _noDataRow: [{\n type: ContentChild,\n args: [CdkNoDataRow]\n }] } });\n/** Utility function that gets a merged list of the entries in an array and values of a Set. */\nfunction mergeArrayAndSet(array, set) {\n return array.concat(Array.from(set));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Column that simply shows text content for the header and row cells. Assumes that the table\n * is using the native table implementation (`
`).\n *\n * By default, the name of this column will be the header text and data property accessor.\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\n * input.\n */\nclass CdkTextColumn {\n constructor(\n // `CdkTextColumn` is always requiring a table, but we just assert it manually\n // for better error reporting.\n // tslint:disable-next-line: lightweight-tokens\n _table, _options) {\n this._table = _table;\n this._options = _options;\n /** Alignment of the cell values. */\n this.justify = 'start';\n this._options = _options || {};\n }\n /** Column name that should be used to reference this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._name = name;\n // With Ivy, inputs can be initialized before static query results are\n // available. In that case, we defer the synchronization until \"ngOnInit\" fires.\n this._syncColumnDefName();\n }\n ngOnInit() {\n this._syncColumnDefName();\n if (this.headerText === undefined) {\n this.headerText = this._createDefaultHeaderText();\n }\n if (!this.dataAccessor) {\n this.dataAccessor =\n this._options.defaultDataAccessor || ((data, name) => data[name]);\n }\n if (this._table) {\n // Provide the cell and headerCell directly to the table with the static `ViewChild` query,\n // since the columnDef will not pick up its content by the time the table finishes checking\n // its content and initializing the rows.\n this.columnDef.cell = this.cell;\n this.columnDef.headerCell = this.headerCell;\n this._table.addColumnDef(this.columnDef);\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getTableTextColumnMissingParentTableError();\n }\n }\n ngOnDestroy() {\n if (this._table) {\n this._table.removeColumnDef(this.columnDef);\n }\n }\n /**\n * Creates a default header text. Use the options' header text transformation function if one\n * has been provided. Otherwise simply capitalize the column name.\n */\n _createDefaultHeaderText() {\n const name = this.name;\n if (!name && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableTextColumnMissingNameError();\n }\n if (this._options && this._options.defaultHeaderTextTransform) {\n return this._options.defaultHeaderTextTransform(name);\n }\n return name[0].toUpperCase() + name.slice(1);\n }\n /** Synchronizes the column definition name with the text column name. */\n _syncColumnDefName() {\n if (this.columnDef) {\n this.columnDef.name = this.name;\n }\n }\n}\nCdkTextColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkTextColumn, deps: [{ token: CdkTable, optional: true }, { token: TEXT_COLUMN_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nCdkTextColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: CdkTextColumn, selector: \"cdk-text-column\", inputs: { name: \"name\", headerText: \"headerText\", dataAccessor: \"dataAccessor\", justify: \"justify\" }, viewQueries: [{ propertyName: \"columnDef\", first: true, predicate: CdkColumnDef, descendants: true, static: true }, { propertyName: \"cell\", first: true, predicate: CdkCellDef, descendants: true, static: true }, { propertyName: \"headerCell\", first: true, predicate: CdkHeaderCellDef, descendants: true, static: true }], ngImport: i0, template: `\n \n \n \n \n `, isInline: true, dependencies: [{ kind: \"directive\", type: CdkCellDef, selector: \"[cdkCellDef]\" }, { kind: \"directive\", type: CdkHeaderCellDef, selector: \"[cdkHeaderCellDef]\" }, { kind: \"directive\", type: CdkColumnDef, selector: \"[cdkColumnDef]\", inputs: [\"sticky\", \"cdkColumnDef\", \"stickyEnd\"] }, { kind: \"directive\", type: CdkCell, selector: \"cdk-cell, td[cdk-cell]\" }, { kind: \"directive\", type: CdkHeaderCell, selector: \"cdk-header-cell, th[cdk-header-cell]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkTextColumn, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-text-column',\n template: `\n \n \n \n \n `,\n encapsulation: ViewEncapsulation.None,\n // Change detection is intentionally not set to OnPush. This component's template will be provided\n // to the table to be inserted into its view. This is problematic when change detection runs since\n // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n // mean's the template in the table's view will not have the updated value (and in fact will cause\n // an ExpressionChangedAfterItHasBeenCheckedError).\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n }]\n }], ctorParameters: function () { return [{ type: CdkTable, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TEXT_COLUMN_OPTIONS]\n }] }]; }, propDecorators: { name: [{\n type: Input\n }], headerText: [{\n type: Input\n }], dataAccessor: [{\n type: Input\n }], justify: [{\n type: Input\n }], columnDef: [{\n type: ViewChild,\n args: [CdkColumnDef, { static: true }]\n }], cell: [{\n type: ViewChild,\n args: [CdkCellDef, { static: true }]\n }], headerCell: [{\n type: ViewChild,\n args: [CdkHeaderCellDef, { static: true }]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst EXPORTED_DECLARATIONS = [\n CdkTable,\n CdkRowDef,\n CdkCellDef,\n CdkCellOutlet,\n CdkHeaderCellDef,\n CdkFooterCellDef,\n CdkColumnDef,\n CdkCell,\n CdkRow,\n CdkHeaderCell,\n CdkFooterCell,\n CdkHeaderRow,\n CdkHeaderRowDef,\n CdkFooterRow,\n CdkFooterRowDef,\n DataRowOutlet,\n HeaderRowOutlet,\n FooterRowOutlet,\n CdkTextColumn,\n CdkNoDataRow,\n CdkRecycleRows,\n NoDataRowOutlet,\n];\nclass CdkTableModule {\n}\nCdkTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCdkTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkTableModule, declarations: [CdkTable,\n CdkRowDef,\n CdkCellDef,\n CdkCellOutlet,\n CdkHeaderCellDef,\n CdkFooterCellDef,\n CdkColumnDef,\n CdkCell,\n CdkRow,\n CdkHeaderCell,\n CdkFooterCell,\n CdkHeaderRow,\n CdkHeaderRowDef,\n CdkFooterRow,\n CdkFooterRowDef,\n DataRowOutlet,\n HeaderRowOutlet,\n FooterRowOutlet,\n CdkTextColumn,\n CdkNoDataRow,\n CdkRecycleRows,\n NoDataRowOutlet], imports: [ScrollingModule], exports: [CdkTable,\n CdkRowDef,\n CdkCellDef,\n CdkCellOutlet,\n CdkHeaderCellDef,\n CdkFooterCellDef,\n CdkColumnDef,\n CdkCell,\n CdkRow,\n CdkHeaderCell,\n CdkFooterCell,\n CdkHeaderRow,\n CdkHeaderRowDef,\n CdkFooterRow,\n CdkFooterRowDef,\n DataRowOutlet,\n HeaderRowOutlet,\n FooterRowOutlet,\n CdkTextColumn,\n CdkNoDataRow,\n CdkRecycleRows,\n NoDataRowOutlet] });\nCdkTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkTableModule, imports: [ScrollingModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: CdkTableModule, decorators: [{\n type: NgModule,\n args: [{\n exports: EXPORTED_DECLARATIONS,\n declarations: EXPORTED_DECLARATIONS,\n imports: [ScrollingModule],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BaseCdkCell, BaseRowDef, CDK_ROW_TEMPLATE, CDK_TABLE, CDK_TABLE_TEMPLATE, CdkCell, CdkCellDef, CdkCellOutlet, CdkColumnDef, CdkFooterCell, CdkFooterCellDef, CdkFooterRow, CdkFooterRowDef, CdkHeaderCell, CdkHeaderCellDef, CdkHeaderRow, CdkHeaderRowDef, CdkNoDataRow, CdkRecycleRows, CdkRow, CdkRowDef, CdkTable, CdkTableModule, CdkTextColumn, DataRowOutlet, FooterRowOutlet, HeaderRowOutlet, NoDataRowOutlet, STICKY_DIRECTIONS, STICKY_POSITIONING_LISTENER, StickyStyler, TEXT_COLUMN_OPTIONS, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, _Schedule, mixinHasStickyInput };\n","import { Observable } from '../Observable';\nimport { isFunction } from './isFunction';\nexport function isObservable(obj) {\n return !!obj && (obj instanceof Observable || (isFunction(obj.lift) && isFunction(obj.subscribe)));\n}\n","import * as i0 from '@angular/core';\nimport { Directive, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/table';\nimport { CdkTable, CDK_TABLE, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, STICKY_POSITIONING_LISTENER, CDK_TABLE_TEMPLATE, CdkCellDef, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkHeaderCell, CdkFooterCell, CdkCell, CdkHeaderRowDef, CdkFooterRowDef, CdkRowDef, CdkHeaderRow, CDK_ROW_TEMPLATE, CdkFooterRow, CdkRow, CdkNoDataRow, CdkTextColumn, CdkTableModule, DataSource } from '@angular/cdk/table';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nimport { MatCommonModule } from '@angular/material/core';\nimport { _isNumberValue } from '@angular/cdk/coercion';\nimport { BehaviorSubject, Subject, merge, of, combineLatest } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with\n * tables that animate rows.\n */\nclass MatRecycleRows {\n}\nMatRecycleRows.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatRecycleRows, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatRecycleRows.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatRecycleRows, selector: \"mat-table[recycleRows], table[mat-table][recycleRows]\", providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatRecycleRows, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-table[recycleRows], table[mat-table][recycleRows]',\n providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }],\n }]\n }] });\n/**\n * Wrapper for the CdkTable with Material design styles.\n */\nclass MatTable extends CdkTable {\n constructor() {\n super(...arguments);\n /** Overrides the sticky CSS class set by the `CdkTable`. */\n this.stickyCssClass = 'mat-table-sticky';\n /** Overrides the need to add position: sticky on every sticky cell element in `CdkTable`. */\n this.needsPositionStickyOnElement = false;\n }\n}\nMatTable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatTable, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatTable.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatTable, selector: \"mat-table, table[mat-table]\", host: { properties: { \"class.mat-table-fixed-layout\": \"fixedLayout\" }, classAttribute: \"mat-table\" }, providers: [\n // TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code\n // is only included in the build if used.\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: CdkTable, useExisting: MatTable },\n { provide: CDK_TABLE, useExisting: MatTable },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n ], exportAs: [\"matTable\"], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n \\n \\n \\n \\n\", isInline: true, styles: [\"mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}table.mat-table{border-spacing:0}tr.mat-header-row{height:56px}tr.mat-row,tr.mat-footer-row{height:48px}th.mat-header-cell{text-align:left}[dir=rtl] th.mat-header-cell{text-align:right}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0;border-bottom-width:1px;border-bottom-style:solid}th.mat-header-cell:first-of-type,td.mat-cell:first-of-type,td.mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] th.mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}th.mat-header-cell:last-of-type,td.mat-cell:last-of-type,td.mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] th.mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}.mat-table-sticky{position:sticky !important}.mat-table-fixed-layout{table-layout:fixed}\"], dependencies: [{ kind: \"directive\", type: i1.DataRowOutlet, selector: \"[rowOutlet]\" }, { kind: \"directive\", type: i1.HeaderRowOutlet, selector: \"[headerRowOutlet]\" }, { kind: \"directive\", type: i1.FooterRowOutlet, selector: \"[footerRowOutlet]\" }, { kind: \"directive\", type: i1.NoDataRowOutlet, selector: \"[noDataRowOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatTable, decorators: [{\n type: Component,\n args: [{ selector: 'mat-table, table[mat-table]', exportAs: 'matTable', template: CDK_TABLE_TEMPLATE, host: {\n 'class': 'mat-table',\n '[class.mat-table-fixed-layout]': 'fixedLayout',\n }, providers: [\n // TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code\n // is only included in the build if used.\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: CdkTable, useExisting: MatTable },\n { provide: CDK_TABLE, useExisting: MatTable },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, styles: [\"mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}table.mat-table{border-spacing:0}tr.mat-header-row{height:56px}tr.mat-row,tr.mat-footer-row{height:48px}th.mat-header-cell{text-align:left}[dir=rtl] th.mat-header-cell{text-align:right}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0;border-bottom-width:1px;border-bottom-style:solid}th.mat-header-cell:first-of-type,td.mat-cell:first-of-type,td.mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] th.mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}th.mat-header-cell:last-of-type,td.mat-cell:last-of-type,td.mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] th.mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}.mat-table-sticky{position:sticky !important}.mat-table-fixed-layout{table-layout:fixed}\"] }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Cell definition for the mat-table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nclass MatCellDef extends CdkCellDef {\n}\nMatCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatCellDef, selector: \"[matCellDef]\", providers: [{ provide: CdkCellDef, useExisting: MatCellDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatCellDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matCellDef]',\n providers: [{ provide: CdkCellDef, useExisting: MatCellDef }],\n }]\n }] });\n/**\n * Header cell definition for the mat-table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nclass MatHeaderCellDef extends CdkHeaderCellDef {\n}\nMatHeaderCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatHeaderCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatHeaderCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatHeaderCellDef, selector: \"[matHeaderCellDef]\", providers: [{ provide: CdkHeaderCellDef, useExisting: MatHeaderCellDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatHeaderCellDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matHeaderCellDef]',\n providers: [{ provide: CdkHeaderCellDef, useExisting: MatHeaderCellDef }],\n }]\n }] });\n/**\n * Footer cell definition for the mat-table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\nclass MatFooterCellDef extends CdkFooterCellDef {\n}\nMatFooterCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatFooterCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatFooterCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatFooterCellDef, selector: \"[matFooterCellDef]\", providers: [{ provide: CdkFooterCellDef, useExisting: MatFooterCellDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatFooterCellDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matFooterCellDef]',\n providers: [{ provide: CdkFooterCellDef, useExisting: MatFooterCellDef }],\n }]\n }] });\n/**\n * Column definition for the mat-table.\n * Defines a set of cells available for a table column.\n */\nclass MatColumnDef extends CdkColumnDef {\n /** Unique name for this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._setNameInput(name);\n }\n /**\n * Add \"mat-column-\" prefix in addition to \"cdk-column-\" prefix.\n * In the future, this will only add \"mat-column-\" and columnCssClassName\n * will change from type string[] to string.\n * @docs-private\n */\n _updateColumnCssClassName() {\n super._updateColumnCssClassName();\n this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`);\n }\n}\nMatColumnDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatColumnDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatColumnDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatColumnDef, selector: \"[matColumnDef]\", inputs: { sticky: \"sticky\", name: [\"matColumnDef\", \"name\"] }, providers: [\n { provide: CdkColumnDef, useExisting: MatColumnDef },\n { provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: MatColumnDef },\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatColumnDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matColumnDef]',\n inputs: ['sticky'],\n providers: [\n { provide: CdkColumnDef, useExisting: MatColumnDef },\n { provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: MatColumnDef },\n ],\n }]\n }], propDecorators: { name: [{\n type: Input,\n args: ['matColumnDef']\n }] } });\n/** Header cell template container that adds the right classes and role. */\nclass MatHeaderCell extends CdkHeaderCell {\n}\nMatHeaderCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatHeaderCell, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatHeaderCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatHeaderCell, selector: \"mat-header-cell, th[mat-header-cell]\", host: { attributes: { \"role\": \"columnheader\" }, classAttribute: \"mat-header-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatHeaderCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-header-cell, th[mat-header-cell]',\n host: {\n 'class': 'mat-header-cell',\n 'role': 'columnheader',\n },\n }]\n }] });\n/** Footer cell template container that adds the right classes and role. */\nclass MatFooterCell extends CdkFooterCell {\n}\nMatFooterCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatFooterCell, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatFooterCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatFooterCell, selector: \"mat-footer-cell, td[mat-footer-cell]\", host: { attributes: { \"role\": \"gridcell\" }, classAttribute: \"mat-footer-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatFooterCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-footer-cell, td[mat-footer-cell]',\n host: {\n 'class': 'mat-footer-cell',\n 'role': 'gridcell',\n },\n }]\n }] });\n/** Cell template container that adds the right classes and role. */\nclass MatCell extends CdkCell {\n}\nMatCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatCell, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatCell, selector: \"mat-cell, td[mat-cell]\", host: { attributes: { \"role\": \"gridcell\" }, classAttribute: \"mat-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatCell, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-cell, td[mat-cell]',\n host: {\n 'class': 'mat-cell',\n 'role': 'gridcell',\n },\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Header row definition for the mat-table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nclass MatHeaderRowDef extends CdkHeaderRowDef {\n}\nMatHeaderRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatHeaderRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatHeaderRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatHeaderRowDef, selector: \"[matHeaderRowDef]\", inputs: { columns: [\"matHeaderRowDef\", \"columns\"], sticky: [\"matHeaderRowDefSticky\", \"sticky\"] }, providers: [{ provide: CdkHeaderRowDef, useExisting: MatHeaderRowDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatHeaderRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matHeaderRowDef]',\n providers: [{ provide: CdkHeaderRowDef, useExisting: MatHeaderRowDef }],\n inputs: ['columns: matHeaderRowDef', 'sticky: matHeaderRowDefSticky'],\n }]\n }] });\n/**\n * Footer row definition for the mat-table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nclass MatFooterRowDef extends CdkFooterRowDef {\n}\nMatFooterRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatFooterRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatFooterRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatFooterRowDef, selector: \"[matFooterRowDef]\", inputs: { columns: [\"matFooterRowDef\", \"columns\"], sticky: [\"matFooterRowDefSticky\", \"sticky\"] }, providers: [{ provide: CdkFooterRowDef, useExisting: MatFooterRowDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatFooterRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matFooterRowDef]',\n providers: [{ provide: CdkFooterRowDef, useExisting: MatFooterRowDef }],\n inputs: ['columns: matFooterRowDef', 'sticky: matFooterRowDefSticky'],\n }]\n }] });\n/**\n * Data row definition for the mat-table.\n * Captures the data row's template and other properties such as the columns to display and\n * a when predicate that describes when this row should be used.\n */\nclass MatRowDef extends CdkRowDef {\n}\nMatRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatRowDef, selector: \"[matRowDef]\", inputs: { columns: [\"matRowDefColumns\", \"columns\"], when: [\"matRowDefWhen\", \"when\"] }, providers: [{ provide: CdkRowDef, useExisting: MatRowDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatRowDef, decorators: [{\n type: Directive,\n args: [{\n selector: '[matRowDef]',\n providers: [{ provide: CdkRowDef, useExisting: MatRowDef }],\n inputs: ['columns: matRowDefColumns', 'when: matRowDefWhen'],\n }]\n }] });\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nclass MatHeaderRow extends CdkHeaderRow {\n}\nMatHeaderRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatHeaderRow, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatHeaderRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatHeaderRow, selector: \"mat-header-row, tr[mat-header-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"mat-header-row\" }, providers: [{ provide: CdkHeaderRow, useExisting: MatHeaderRow }], exportAs: [\"matHeaderRow\"], usesInheritance: true, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: i1.CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatHeaderRow, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-header-row, tr[mat-header-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-header-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matHeaderRow',\n providers: [{ provide: CdkHeaderRow, useExisting: MatHeaderRow }],\n }]\n }] });\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nclass MatFooterRow extends CdkFooterRow {\n}\nMatFooterRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatFooterRow, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatFooterRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatFooterRow, selector: \"mat-footer-row, tr[mat-footer-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"mat-footer-row\" }, providers: [{ provide: CdkFooterRow, useExisting: MatFooterRow }], exportAs: [\"matFooterRow\"], usesInheritance: true, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: i1.CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatFooterRow, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-footer-row, tr[mat-footer-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-footer-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matFooterRow',\n providers: [{ provide: CdkFooterRow, useExisting: MatFooterRow }],\n }]\n }] });\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nclass MatRow extends CdkRow {\n}\nMatRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatRow, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatRow, selector: \"mat-row, tr[mat-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"mat-row\" }, providers: [{ provide: CdkRow, useExisting: MatRow }], exportAs: [\"matRow\"], usesInheritance: true, ngImport: i0, template: \"\", isInline: true, dependencies: [{ kind: \"directive\", type: i1.CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatRow, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-row, tr[mat-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matRow',\n providers: [{ provide: CdkRow, useExisting: MatRow }],\n }]\n }] });\n/** Row that can be used to display a message when no data is shown in the table. */\nclass MatNoDataRow extends CdkNoDataRow {\n constructor() {\n super(...arguments);\n this._contentClassName = 'mat-no-data-row';\n }\n}\nMatNoDataRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatNoDataRow, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatNoDataRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatNoDataRow, selector: \"ng-template[matNoDataRow]\", providers: [{ provide: CdkNoDataRow, useExisting: MatNoDataRow }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatNoDataRow, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[matNoDataRow]',\n providers: [{ provide: CdkNoDataRow, useExisting: MatNoDataRow }],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Column that simply shows text content for the header and row cells. Assumes that the table\n * is using the native table implementation (`
\n {{headerText}}\n \n {{dataAccessor(data, name)}}\n \n {{headerText}}\n \n {{dataAccessor(data, name)}}\n
`).\n *\n * By default, the name of this column will be the header text and data property accessor.\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\n * input.\n */\nclass MatTextColumn extends CdkTextColumn {\n}\nMatTextColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatTextColumn, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatTextColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", type: MatTextColumn, selector: \"mat-text-column\", usesInheritance: true, ngImport: i0, template: `\n \n \n \n \n `, isInline: true, dependencies: [{ kind: \"directive\", type: MatHeaderCellDef, selector: \"[matHeaderCellDef]\" }, { kind: \"directive\", type: MatColumnDef, selector: \"[matColumnDef]\", inputs: [\"sticky\", \"matColumnDef\"] }, { kind: \"directive\", type: MatCellDef, selector: \"[matCellDef]\" }, { kind: \"directive\", type: MatHeaderCell, selector: \"mat-header-cell, th[mat-header-cell]\" }, { kind: \"directive\", type: MatCell, selector: \"mat-cell, td[mat-cell]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatTextColumn, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-text-column',\n template: `\n \n \n \n \n `,\n encapsulation: ViewEncapsulation.None,\n // Change detection is intentionally not set to OnPush. This component's template will be provided\n // to the table to be inserted into its view. This is problematic when change detection runs since\n // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n // mean's the template in the table's view will not have the updated value (and in fact will cause\n // an ExpressionChangedAfterItHasBeenCheckedError).\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst EXPORTED_DECLARATIONS = [\n // Table\n MatTable,\n MatRecycleRows,\n // Template defs\n MatHeaderCellDef,\n MatHeaderRowDef,\n MatColumnDef,\n MatCellDef,\n MatRowDef,\n MatFooterCellDef,\n MatFooterRowDef,\n // Cell directives\n MatHeaderCell,\n MatCell,\n MatFooterCell,\n // Row directives\n MatHeaderRow,\n MatRow,\n MatFooterRow,\n MatNoDataRow,\n MatTextColumn,\n];\nclass MatTableModule {\n}\nMatTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatTableModule, declarations: [\n // Table\n MatTable,\n MatRecycleRows,\n // Template defs\n MatHeaderCellDef,\n MatHeaderRowDef,\n MatColumnDef,\n MatCellDef,\n MatRowDef,\n MatFooterCellDef,\n MatFooterRowDef,\n // Cell directives\n MatHeaderCell,\n MatCell,\n MatFooterCell,\n // Row directives\n MatHeaderRow,\n MatRow,\n MatFooterRow,\n MatNoDataRow,\n MatTextColumn], imports: [CdkTableModule, MatCommonModule], exports: [MatCommonModule, \n // Table\n MatTable,\n MatRecycleRows,\n // Template defs\n MatHeaderCellDef,\n MatHeaderRowDef,\n MatColumnDef,\n MatCellDef,\n MatRowDef,\n MatFooterCellDef,\n MatFooterRowDef,\n // Cell directives\n MatHeaderCell,\n MatCell,\n MatFooterCell,\n // Row directives\n MatHeaderRow,\n MatRow,\n MatFooterRow,\n MatNoDataRow,\n MatTextColumn] });\nMatTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatTableModule, imports: [CdkTableModule, MatCommonModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0-rc.0\", ngImport: i0, type: MatTableModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CdkTableModule, MatCommonModule],\n exports: [MatCommonModule, EXPORTED_DECLARATIONS],\n declarations: EXPORTED_DECLARATIONS,\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Corresponds to `Number.MAX_SAFE_INTEGER`. Moved out into a variable here due to\n * flaky browser support and the value not being defined in Closure's typings.\n */\nconst MAX_SAFE_INTEGER = 9007199254740991;\n/** Shared base class with MDC-based implementation. */\nclass _MatTableDataSource extends DataSource {\n constructor(initialData = []) {\n super();\n /** Stream emitting render data to the table (depends on ordered data changes). */\n this._renderData = new BehaviorSubject([]);\n /** Stream that emits when a new filter string is set on the data source. */\n this._filter = new BehaviorSubject('');\n /** Used to react to internal changes of the paginator that are made by the data source itself. */\n this._internalPageChanges = new Subject();\n /**\n * Subscription to the changes that should trigger an update to the table's rendered rows, such\n * as filtering, sorting, pagination, or base data changes.\n */\n this._renderChangesSubscription = null;\n /**\n * Data accessor function that is used for accessing data properties for sorting through\n * the default sortData function.\n * This default function assumes that the sort header IDs (which defaults to the column name)\n * matches the data's properties (e.g. column Xyz represents data['Xyz']).\n * May be set to a custom function for different behavior.\n * @param data Data object that is being accessed.\n * @param sortHeaderId The name of the column that represents the data.\n */\n this.sortingDataAccessor = (data, sortHeaderId) => {\n const value = data[sortHeaderId];\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\n // leave them as strings. For more info: https://goo.gl/y5vbSg\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n return value;\n };\n /**\n * Gets a sorted copy of the data array based on the state of the MatSort. Called\n * after changes are made to the filtered data or when sort changes are emitted from MatSort.\n * By default, the function retrieves the active sort and its direction and compares data\n * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation\n * of data ordering.\n * @param data The array of data that should be sorted.\n * @param sort The connected MatSort that holds the current sort state.\n */\n this.sortData = (data, sort) => {\n const active = sort.active;\n const direction = sort.direction;\n if (!active || direction == '') {\n return data;\n }\n return data.sort((a, b) => {\n let valueA = this.sortingDataAccessor(a, active);\n let valueB = this.sortingDataAccessor(b, active);\n // If there are data in the column that can be converted to a number,\n // it must be ensured that the rest of the data\n // is of the same type so as not to order incorrectly.\n const valueAType = typeof valueA;\n const valueBType = typeof valueB;\n if (valueAType !== valueBType) {\n if (valueAType === 'number') {\n valueA += '';\n }\n if (valueBType === 'number') {\n valueB += '';\n }\n }\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n if (valueA > valueB) {\n comparatorResult = 1;\n }\n else if (valueA < valueB) {\n comparatorResult = -1;\n }\n }\n else if (valueA != null) {\n comparatorResult = 1;\n }\n else if (valueB != null) {\n comparatorResult = -1;\n }\n return comparatorResult * (direction == 'asc' ? 1 : -1);\n });\n };\n /**\n * Checks if a data object matches the data source's filter string. By default, each data object\n * is converted to a string of its properties and returns true if the filter has\n * at least one occurrence in that string. By default, the filter string has its whitespace\n * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\n * filter matching.\n * @param data Data object used to check against the filter.\n * @param filter Filter string that has been set on the data source.\n * @returns Whether the filter matches against the data\n */\n this.filterPredicate = (data, filter) => {\n // Transform the data into a lowercase string of all property values.\n const dataStr = Object.keys(data)\n .reduce((currentTerm, key) => {\n // Use an obscure Unicode character to delimit the words in the concatenated string.\n // This avoids matches where the values of two columns combined will match the user's query\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\n // that has a very low chance of being typed in by somebody in a text field. This one in\n // particular is \"White up-pointing triangle with dot\" from\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\n return currentTerm + data[key] + '◬';\n }, '')\n .toLowerCase();\n // Transform the filter by converting it to lowercase and removing whitespace.\n const transformedFilter = filter.trim().toLowerCase();\n return dataStr.indexOf(transformedFilter) != -1;\n };\n this._data = new BehaviorSubject(initialData);\n this._updateChangeSubscription();\n }\n /** Array of data that should be rendered by the table, where each object represents one row. */\n get data() {\n return this._data.value;\n }\n set data(data) {\n data = Array.isArray(data) ? data : [];\n this._data.next(data);\n // Normally the `filteredData` is updated by the re-render\n // subscription, but that won't happen if it's inactive.\n if (!this._renderChangesSubscription) {\n this._filterData(data);\n }\n }\n /**\n * Filter term that should be used to filter out objects from the data array. To override how\n * data objects match to this filter string, provide a custom function for filterPredicate.\n */\n get filter() {\n return this._filter.value;\n }\n set filter(filter) {\n this._filter.next(filter);\n // Normally the `filteredData` is updated by the re-render\n // subscription, but that won't happen if it's inactive.\n if (!this._renderChangesSubscription) {\n this._filterData(this.data);\n }\n }\n /**\n * Instance of the MatSort directive used by the table to control its sorting. Sort changes\n * emitted by the MatSort will trigger an update to the table's rendered data.\n */\n get sort() {\n return this._sort;\n }\n set sort(sort) {\n this._sort = sort;\n this._updateChangeSubscription();\n }\n /**\n * Instance of the MatPaginator component used by the table to control what page of the data is\n * displayed. Page changes emitted by the MatPaginator will trigger an update to the\n * table's rendered data.\n *\n * Note that the data source uses the paginator's properties to calculate which page of data\n * should be displayed. If the paginator receives its properties as template inputs,\n * e.g. `[pageLength]=100` or `[pageIndex]=1`, then be sure that the paginator's view has been\n * initialized before assigning it to this data source.\n */\n get paginator() {\n return this._paginator;\n }\n set paginator(paginator) {\n this._paginator = paginator;\n this._updateChangeSubscription();\n }\n /**\n * Subscribe to changes that should trigger an update to the table's rendered rows. When the\n * changes occur, process the current state of the filter, sort, and pagination along with\n * the provided base data and send it to the table for rendering.\n */\n _updateChangeSubscription() {\n // Sorting and/or pagination should be watched if MatSort and/or MatPaginator are provided.\n // The events should emit whenever the component emits a change or initializes, or if no\n // component is provided, a stream with just a null event should be provided.\n // The `sortChange` and `pageChange` acts as a signal to the combineLatests below so that the\n // pipeline can progress to the next step. Note that the value from these streams are not used,\n // they purely act as a signal to progress in the pipeline.\n const sortChange = this._sort\n ? merge(this._sort.sortChange, this._sort.initialized)\n : of(null);\n const pageChange = this._paginator\n ? merge(this._paginator.page, this._internalPageChanges, this._paginator.initialized)\n : of(null);\n const dataStream = this._data;\n // Watch for base data or filter changes to provide a filtered set of data.\n const filteredData = combineLatest([dataStream, this._filter]).pipe(map(([data]) => this._filterData(data)));\n // Watch for filtered data or sort changes to provide an ordered set of data.\n const orderedData = combineLatest([filteredData, sortChange]).pipe(map(([data]) => this._orderData(data)));\n // Watch for ordered data or page changes to provide a paged set of data.\n const paginatedData = combineLatest([orderedData, pageChange]).pipe(map(([data]) => this._pageData(data)));\n // Watched for paged data changes and send the result to the table to render.\n this._renderChangesSubscription?.unsubscribe();\n this._renderChangesSubscription = paginatedData.subscribe(data => this._renderData.next(data));\n }\n /**\n * Returns a filtered data array where each filter object contains the filter string within\n * the result of the filterTermAccessor function. If no filter is set, returns the data array\n * as provided.\n */\n _filterData(data) {\n // If there is a filter string, filter out data that does not contain it.\n // Each data object is converted to a string using the function defined by filterTermAccessor.\n // May be overridden for customization.\n this.filteredData =\n this.filter == null || this.filter === ''\n ? data\n : data.filter(obj => this.filterPredicate(obj, this.filter));\n if (this.paginator) {\n this._updatePaginator(this.filteredData.length);\n }\n return this.filteredData;\n }\n /**\n * Returns a sorted copy of the data if MatSort has a sort applied, otherwise just returns the\n * data array as provided. Uses the default data accessor for data lookup, unless a\n * sortDataAccessor function is defined.\n */\n _orderData(data) {\n // If there is no active sort or direction, return the data without trying to sort.\n if (!this.sort) {\n return data;\n }\n return this.sortData(data.slice(), this.sort);\n }\n /**\n * Returns a paged slice of the provided data array according to the provided MatPaginator's page\n * index and length. If there is no paginator provided, returns the data array as provided.\n */\n _pageData(data) {\n if (!this.paginator) {\n return data;\n }\n const startIndex = this.paginator.pageIndex * this.paginator.pageSize;\n return data.slice(startIndex, startIndex + this.paginator.pageSize);\n }\n /**\n * Updates the paginator to reflect the length of the filtered data, and makes sure that the page\n * index does not exceed the paginator's last page. Values are changed in a resolved promise to\n * guard against making property changes within a round of change detection.\n */\n _updatePaginator(filteredDataLength) {\n Promise.resolve().then(() => {\n const paginator = this.paginator;\n if (!paginator) {\n return;\n }\n paginator.length = filteredDataLength;\n // If the page index is set beyond the page, reduce it to the last page.\n if (paginator.pageIndex > 0) {\n const lastPageIndex = Math.ceil(paginator.length / paginator.pageSize) - 1 || 0;\n const newPageIndex = Math.min(paginator.pageIndex, lastPageIndex);\n if (newPageIndex !== paginator.pageIndex) {\n paginator.pageIndex = newPageIndex;\n // Since the paginator only emits after user-generated changes,\n // we need our own stream so we know to should re-render the data.\n this._internalPageChanges.next();\n }\n }\n });\n }\n /**\n * Used by the MatTable. Called when it connects to the data source.\n * @docs-private\n */\n connect() {\n if (!this._renderChangesSubscription) {\n this._updateChangeSubscription();\n }\n return this._renderData;\n }\n /**\n * Used by the MatTable. Called when it disconnects from the data source.\n * @docs-private\n */\n disconnect() {\n this._renderChangesSubscription?.unsubscribe();\n this._renderChangesSubscription = null;\n }\n}\n/**\n * Data source that accepts a client-side data array and includes native support of filtering,\n * sorting (using MatSort), and pagination (using MatPaginator).\n *\n * Allows for sort customization by overriding sortingDataAccessor, which defines how data\n * properties are accessed. Also allows for filter customization by overriding filterTermAccessor,\n * which defines how row data is converted to a string for filter matching.\n *\n * **Note:** This class is meant to be a simple data source to help you get started. As such\n * it isn't equipped to handle some more advanced cases like robust i18n support or server-side\n * interactions. If your app needs to support more advanced use cases, consider implementing your\n * own `DataSource`.\n */\nclass MatTableDataSource extends _MatTableDataSource {\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRecycleRows, MatRow, MatRowDef, MatTable, MatTableDataSource, MatTableModule, MatTextColumn, _MatTableDataSource };\n"],"x_google_ignoreList":[0,1,2,3,4]}
\n {{headerText}}\n \n {{dataAccessor(data, name)}}\n \n {{headerText}}\n \n {{dataAccessor(data, name)}}\n