{"version":3,"file":"410.05eada1979230bc7.js","mappings":"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","names":["mixinHasStickyInput","base","sticky","this","_sticky","v","prevValue","coerceBooleanProperty","_hasStickyChanged","hasStickyChanged","resetStickyChanged","constructor","args","super","CDK_TABLE","InjectionToken","CdkCellDef","template","ɵfac","i0","ɵdir","selectors","CdkHeaderCellDef","CdkFooterCellDef","CdkColumnDefBase","_CdkColumnDefBase","CdkColumnDef","name","_name","_setNameInput","stickyEnd","_stickyEnd","_table","_updateColumnCssClassName","_columnCssClassName","cssClassFriendlyName","value","replace","dirIndex","_t","ctx","provide","useExisting","BaseCdkCell","columnDef","elementRef","nativeElement","classList","add","CdkHeaderCell","CdkCell","_elementRef","nodeType","tableRole","getAttribute","setAttribute","_Schedule","tasks","endTasks","_COALESCED_STYLE_SCHEDULER","_CoalescedStyleScheduler","_ngZone","_currentSchedule","_destroyed","Subject","schedule","task","_createScheduleIfNeeded","push","scheduleEnd","ngOnDestroy","next","complete","_getScheduleObservable","pipe","takeUntil","subscribe","length","isStable","from","Promise","resolve","undefined","onStable","take","ɵprov","factory","BaseRowDef","_differs","ngOnChanges","changes","_columnsDiffer","columns","currentValue","find","create","diff","getColumnsDiff","extractCellTemplate","column","CdkHeaderRowDef","headerCell","CdkFooterRowDef","footerCell","cell","features","CdkHeaderRowDefBase","_CdkHeaderRowDefBase","CdkFooterRowDefBase","_CdkFooterRowDefBase","CdkRowDef","CdkCellOutlet","_viewContainer","mostRecentCellOutlet","CdkHeaderRow","ɵcmp","encapsulation","CdkRow","CdkNoDataRow","templateRef","_contentClassName","STICKY_DIRECTIONS","StickyStyler","_isNativeHtmlTable","_stickCellCss","direction","_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","state","stickyColumnsUpdated","sizes","stickyEndColumnsUpdated","firstRow","numCells","cellWidths","_getCellWidths","startPositions","_getStickyStartColumnPositions","endPositions","_getStickyEndColumnPositions","lastStickyStart","lastIndexOf","firstStickyEnd","indexOf","isRtl","start","end","_addStickyStyle","slice","map","width","index","reverse","stickRows","rowsToStick","stickyStates","position","states","stickyOffsets","stickyCellHeights","elementsToStick","rowIndex","stickyOffset","Array","height","getBoundingClientRect","borderedRowIndex","offset","isBorderedRowIndex","stickyHeaderRowsUpdated","offsets","elements","stickyFooterRowsUpdated","updateStickyFooterContainer","tableElement","tfoot","querySelector","dir","style","remove","zIndex","_getCalculatedZIndex","dirValue","isBorderElement","cssText","zIndexIncrements","firstRowCells","widths","positions","nextPosition","STICKY_POSITIONING_LISTENER","DataRowOutlet","viewContainer","HeaderRowOutlet","FooterRowOutlet","NoDataRowOutlet","CdkTable","trackBy","_trackByFn","fn","dataSource","_dataSource","_switchDataSource","multiTemplateDataRows","_multiTemplateDataRows","_rowOutlet","_forceRenderDataRows","updateStickyColumnStyles","fixedLayout","_fixedLayout","_forceRecalculateCellWidths","_stickyColumnStylesNeedReset","_changeDetectorRef","role","_dir","_document","_platform","_viewRepeater","_viewportRuler","_stickyPositioningListener","_onDestroy","_columnDefsByName","Map","_customColumnDefs","Set","_customRowDefs","_customHeaderRowDefs","_customFooterRowDefs","_headerRowDefChanged","_footerRowDefChanged","_cachedRenderRowsMap","stickyCssClass","needsPositionStickyOnElement","_isShowingNoDataRow","contentChanged","EventEmitter","viewChange","BehaviorSubject","Number","MAX_VALUE","nodeName","ngOnInit","_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","delete","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","set","WeakMap","j","renderRow","cache","_getRowDefs","cachedRenderRows","shift","mergeArrayAndSet","_getOwnDefs","_contentColumnDefs","_contentHeaderRowDefs","_contentFooterRowDefs","_contentRowDefs","defaultRowDefs","filter","when","columnsDiffReducer","acc","dataColumnsChanged","reduce","headerColumnsChanged","footerColumnsChanged","unsubscribe","dataStream","connect","isObservable","obj","Observable","isFunction","lift","isArray","of","_renderRow","columnDefs","columnName","rowOutlet","renderedRows","viewRef","rootNodes","rowDefs","outlet","view","createEmbeddedView","cellTemplate","_getCellTemplates","markForCheck","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","i2","_VIEW_REPEATER_STRATEGY","i3","useClass","_DisposeViewRepeaterStrategy","useValue","ngContentSelectors","_c0","styles","array","concat","CdkTableModule","ɵmod","ɵinj","ScrollingModule","MatTable","arguments","t","table_c0","MatCellDef","MatHeaderCellDef","MatColumnDef","MatHeaderCell","MatCell","MatHeaderRowDef","MatRowDef","MatHeaderRow","decls","MatRow","MatTableModule","MatCommonModule","_MatTableDataSource","DataSource","_renderChangesSubscription","_filterData","_filter","sort","_sort","_updateChangeSubscription","paginator","_paginator","initialData","_renderData","_internalPageChanges","sortingDataAccessor","sortHeaderId","_isNumberValue","numberValue","sortData","active","a","b","valueA","valueB","valueAType","valueBType","comparatorResult","filterPredicate","dataStr","Object","keys","currentTerm","key","toLowerCase","transformedFilter","trim","sortChange","merge","initialized","pageChange","page","filteredData","combineLatest","orderedData","_orderData","paginatedData","_pageData","_updatePaginator","startIndex","pageIndex","pageSize","filteredDataLength","then","lastPageIndex","Math","ceil","newPageIndex","min","MatTableDataSource"],"sourceRoot":"webpack:///","sources":["./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 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 /** 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 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 };\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: \"15.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: \"15.2.0-rc.0\", type: CdkCellDef, selector: \"[cdkCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", type: CdkHeaderCellDef, selector: \"[cdkHeaderCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", type: CdkFooterCellDef, selector: \"[cdkFooterCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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 /** 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 constructor(_table) {\n super();\n this._table = _table;\n this._stickyEnd = false;\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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: _CoalescedStyleScheduler });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", type: BaseRowDef, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.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: \"15.2.0-rc.0\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: CdkHeaderRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkHeaderRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: CdkFooterRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkFooterRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: CdkRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.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: \"15.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: \"15.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: \"15.2.0-rc.0\", type: CdkNoDataRow, selector: \"ng-template[cdkNoDataRow]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: CdkRecycleRows, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nCdkRecycleRows.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.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: \"15.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: \"15.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: \"15.2.0-rc.0\", type: DataRowOutlet, selector: \"[rowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", type: HeaderRowOutlet, selector: \"[headerRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", type: FooterRowOutlet, selector: \"[footerRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", type: NoDataRowOutlet, selector: \"[noDataRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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 /**\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 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 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: \"15.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: \"15.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: \"15.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 /** 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 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 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: \"15.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: \"15.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: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: CdkTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCdkTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: CdkTableModule, imports: [ScrollingModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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 } from '@angular/cdk/table';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, _DisposeViewRepeaterStrategy, DataSource } from '@angular/cdk/collections';\nimport { MatCommonModule } from '@angular/material/core';\nimport { BehaviorSubject, Subject, merge, of, combineLatest } from 'rxjs';\nimport { _isNumberValue } from '@angular/cdk/coercion';\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: \"15.2.0-rc.0\", ngImport: i0, type: MatRecycleRows, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatRecycleRows.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.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: \"15.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 }] });\nclass MatTable extends CdkTable {\n constructor() {\n super(...arguments);\n /** Overrides the sticky CSS class set by the `CdkTable`. */\n this.stickyCssClass = 'mat-mdc-table-sticky';\n /** Overrides the need to add position: sticky on every sticky cell element in `CdkTable`. */\n this.needsPositionStickyOnElement = false;\n }\n ngOnInit() {\n super.ngOnInit();\n // After ngOnInit, the `CdkTable` has created and inserted the table sections (thead, tbody,\n // tfoot). MDC requires the `mdc-data-table__content` class to be added to the body. Note that\n // this only applies to native tables, because we don't wrap the content of flexbox-based ones.\n if (this._isNativeHtmlTable) {\n const tbody = this._elementRef.nativeElement.querySelector('tbody');\n tbody.classList.add('mdc-data-table__content');\n }\n }\n}\nMatTable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatTable, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatTable.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatTable, selector: \"mat-table, table[mat-table]\", host: { properties: { \"class.mdc-table-fixed-layout\": \"fixedLayout\" }, classAttribute: \"mat-mdc-table mdc-data-table__table\" }, providers: [\n { provide: CdkTable, useExisting: MatTable },\n { provide: CDK_TABLE, useExisting: MatTable },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\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 // 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: [\".mdc-data-table{border-radius:var(--mdc-shape-medium, 4px);border-width:1px;border-style:solid}.mdc-data-table .mdc-data-table__header-cell:first-child{border-top-left-radius:var(--mdc-shape-medium, 4px)}[dir=rtl] .mdc-data-table .mdc-data-table__header-cell:first-child,.mdc-data-table .mdc-data-table__header-cell:first-child[dir=rtl]{border-top-right-radius:var(--mdc-shape-medium, 4px);border-top-left-radius:0}.mdc-data-table .mdc-data-table__header-cell:last-child{border-top-right-radius:var(--mdc-shape-medium, 4px)}[dir=rtl] .mdc-data-table .mdc-data-table__header-cell:last-child,.mdc-data-table .mdc-data-table__header-cell:last-child[dir=rtl]{border-top-left-radius:var(--mdc-shape-medium, 4px);border-top-right-radius:0}.mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:first-child{border-bottom-left-radius:var(--mdc-shape-medium, 4px)}[dir=rtl] .mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:first-child,.mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:first-child[dir=rtl]{border-bottom-right-radius:var(--mdc-shape-medium, 4px);border-bottom-left-radius:0}.mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:last-child{border-bottom-right-radius:var(--mdc-shape-medium, 4px)}[dir=rtl] .mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:last-child,.mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:last-child[dir=rtl]{border-bottom-left-radius:var(--mdc-shape-medium, 4px);border-bottom-right-radius:0}.mdc-data-table__cell,.mdc-data-table__header-cell{border-bottom-width:1px;border-bottom-style:solid}.mdc-data-table__pagination{border-top-width:1px;border-top-style:solid}.mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:none}.mdc-data-table__row{height:52px}.mdc-data-table__pagination{min-height:52px}.mdc-data-table__header-row{height:56px}.mdc-data-table__cell,.mdc-data-table__header-cell{padding:0 16px 0 16px}.mdc-data-table__header-cell--checkbox,.mdc-data-table__cell--checkbox{padding-left:4px;padding-right:0}[dir=rtl] .mdc-data-table__header-cell--checkbox,[dir=rtl] .mdc-data-table__cell--checkbox,.mdc-data-table__header-cell--checkbox[dir=rtl],.mdc-data-table__cell--checkbox[dir=rtl]{padding-left:0;padding-right:4px}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:left;text-overflow:ellipsis}[dir=rtl] .mdc-data-table__cell,.mdc-data-table__cell[dir=rtl]{text-align:right}.mdc-data-table__cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__cell--numeric,.mdc-data-table__cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__cell--checkbox{width:1px}.mdc-data-table__header-cell{box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:left}[dir=rtl] .mdc-data-table__header-cell,.mdc-data-table__header-cell[dir=rtl]{text-align:right}.mdc-data-table__header-cell--checkbox{width:1px}.mdc-data-table__header-cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__header-cell--numeric,.mdc-data-table__header-cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__sort-icon-button{width:28px;height:28px;padding:2px;transform:rotate(0.0001deg);margin-left:4px;margin-right:0;opacity:0}.mdc-data-table__sort-icon-button .mdc-icon-button__focus-ring{max-height:28px;max-width:28px}.mdc-data-table__sort-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:28px;height:28px;margin-top:0px;margin-bottom:0px;margin-right:0px;margin-left:0px}.mdc-data-table__sort-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:28px;max-width:28px}.mdc-data-table__sort-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:28px;left:50%;width:28px;transform:translate(-50%, -50%)}[dir=rtl] .mdc-data-table__sort-icon-button,.mdc-data-table__sort-icon-button[dir=rtl]{margin-left:0;margin-right:4px}.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button{margin-left:0;margin-right:4px}[dir=rtl] .mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button[dir=rtl]{margin-left:4px;margin-right:0}.mdc-data-table__header-cell--sorted-descending .mdc-data-table__sort-icon-button{transform:rotate(-180deg)}.mdc-data-table__sort-icon-button:focus,.mdc-data-table__header-cell:hover .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button{opacity:1}.mdc-data-table__header-cell-wrapper{align-items:center;display:inline-flex;vertical-align:middle}.mdc-data-table__header-cell--with-sort{cursor:pointer}.mdc-data-table__sort-status-label{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.mdc-data-table--sticky-header .mdc-data-table__header-cell{position:sticky;top:0;z-index:1}.mdc-data-table{-webkit-overflow-scrolling:touch;display:inline-flex;flex-direction:column;box-sizing:border-box;position:relative}.mdc-data-table__table-container{-webkit-overflow-scrolling:touch;overflow-x:auto;width:100%}.mdc-data-table__table{min-width:100%;border:0;white-space:nowrap;border-spacing:0;table-layout:fixed}.mdc-data-table__header-cell{box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:left}[dir=rtl] .mdc-data-table__header-cell,.mdc-data-table__header-cell[dir=rtl]{text-align:right}.mdc-data-table__header-cell--checkbox{width:1px}.mdc-data-table__header-cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__header-cell--numeric,.mdc-data-table__header-cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__sort-icon-button{width:28px;height:28px;padding:2px;transform:rotate(0.0001deg);margin-left:4px;margin-right:0;opacity:0}.mdc-data-table__sort-icon-button .mdc-icon-button__focus-ring{max-height:28px;max-width:28px}.mdc-data-table__sort-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:28px;height:28px;margin-top:0px;margin-bottom:0px;margin-right:0px;margin-left:0px}.mdc-data-table__sort-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:28px;max-width:28px}.mdc-data-table__sort-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:28px;left:50%;width:28px;transform:translate(-50%, -50%)}[dir=rtl] .mdc-data-table__sort-icon-button,.mdc-data-table__sort-icon-button[dir=rtl]{margin-left:0;margin-right:4px}.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button{margin-left:0;margin-right:4px}[dir=rtl] .mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button[dir=rtl]{margin-left:4px;margin-right:0}.mdc-data-table__header-cell--sorted-descending .mdc-data-table__sort-icon-button{transform:rotate(-180deg)}.mdc-data-table__sort-icon-button:focus,.mdc-data-table__header-cell:hover .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button{opacity:1}.mdc-data-table__header-cell-wrapper{align-items:center;display:inline-flex;vertical-align:middle}.mdc-data-table__header-cell--with-sort{cursor:pointer}.mdc-data-table__sort-status-label{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:left;text-overflow:ellipsis}[dir=rtl] .mdc-data-table__cell,.mdc-data-table__cell[dir=rtl]{text-align:right}.mdc-data-table__cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__cell--numeric,.mdc-data-table__cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__cell--checkbox{width:1px}.mdc-data-table__pagination{box-sizing:border-box;display:flex;justify-content:flex-end}.mdc-data-table__pagination-trailing{margin-left:4px;margin-right:0;align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end}[dir=rtl] .mdc-data-table__pagination-trailing,.mdc-data-table__pagination-trailing[dir=rtl]{margin-left:0;margin-right:4px}.mdc-data-table__pagination-navigation{align-items:center;display:flex}.mdc-data-table__pagination-button{margin-left:0;margin-right:4px}[dir=rtl] .mdc-data-table__pagination-button .mdc-button__icon,.mdc-data-table__pagination-button .mdc-button__icon[dir=rtl]{transform:rotate(180deg)}[dir=rtl] .mdc-data-table__pagination-button,.mdc-data-table__pagination-button[dir=rtl]{margin-left:4px;margin-right:0}.mdc-data-table__pagination-total{margin-left:14px;margin-right:36px;white-space:nowrap}[dir=rtl] .mdc-data-table__pagination-total,.mdc-data-table__pagination-total[dir=rtl]{margin-left:36px;margin-right:14px}.mdc-data-table__pagination-rows-per-page{margin-left:0;margin-right:22px;align-items:center;display:inline-flex}[dir=rtl] .mdc-data-table__pagination-rows-per-page,.mdc-data-table__pagination-rows-per-page[dir=rtl]{margin-left:22px;margin-right:0}.mdc-data-table__pagination-rows-per-page-label{margin-left:0;margin-right:12px;white-space:nowrap}[dir=rtl] .mdc-data-table__pagination-rows-per-page-label,.mdc-data-table__pagination-rows-per-page-label[dir=rtl]{margin-left:12px;margin-right:0}.mdc-data-table__pagination-rows-per-page-select{min-width:var(--mdc-menu-min-width, 80px);margin:8px 0}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor{width:100%;min-width:80px}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor{height:36px}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-floating-label--float-above{transform:translateY(-27.25px) scale(1)}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-floating-label--float-above{font-size:.75rem}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-24.75px) scale(0.75)}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-data-table__pagination-rows-per-page-select .mdc-select__dropdown-icon{width:20px;height:20px}.mdc-data-table__pagination-rows-per-page-select.mdc-select--outlined .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 56px)}.mdc-data-table__pagination-rows-per-page-select .mdc-list-item.mdc-list-item--with-one-line{height:36px}.mdc-data-table__progress-indicator{display:none;position:absolute;width:100%}.mdc-data-table--in-progress .mdc-data-table__progress-indicator{display:block}.mdc-data-table__scrim{background-color:var(--mdc-theme-surface, #fff);height:100%;opacity:.32;position:absolute;top:0;width:100%}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}.mat-mdc-table-sticky{position:sticky !important}.mat-mdc-table{table-layout:auto;white-space:normal}mat-row.mat-mdc-row,mat-header-row.mat-mdc-header-row,mat-footer-row.mat-mdc-footer-row{border-bottom:none}.mat-mdc-table tbody,.mat-mdc-table tfoot,.mat-mdc-table thead,.mat-mdc-cell,.mat-mdc-footer-cell,.mat-mdc-header-row,.mat-mdc-row,.mat-mdc-footer-row,.mat-mdc-table .mat-mdc-header-cell{background:inherit}.mat-mdc-table .mat-mdc-row:hover,.mat-mdc-table .mat-mdc-footer-row:hover{background-color:inherit}.mat-mdc-table mat-header-row.mat-mdc-header-row,.mat-mdc-table mat-row.mat-mdc-row,.mat-mdc-table mat-footer-row.mat-mdc-footer-cell{height:unset}mat-header-cell.mat-mdc-header-cell,mat-cell.mat-mdc-cell,mat-footer-cell.mat-mdc-footer-cell{align-self:stretch}\"], 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: \"15.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-mdc-table mdc-data-table__table',\n '[class.mdc-table-fixed-layout]': 'fixedLayout',\n }, providers: [\n { provide: CdkTable, useExisting: MatTable },\n { provide: CDK_TABLE, useExisting: MatTable },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\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 // Prevent nested tables from seeing this table's StickyPositioningListener.\n { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, styles: [\".mdc-data-table{border-radius:var(--mdc-shape-medium, 4px);border-width:1px;border-style:solid}.mdc-data-table .mdc-data-table__header-cell:first-child{border-top-left-radius:var(--mdc-shape-medium, 4px)}[dir=rtl] .mdc-data-table .mdc-data-table__header-cell:first-child,.mdc-data-table .mdc-data-table__header-cell:first-child[dir=rtl]{border-top-right-radius:var(--mdc-shape-medium, 4px);border-top-left-radius:0}.mdc-data-table .mdc-data-table__header-cell:last-child{border-top-right-radius:var(--mdc-shape-medium, 4px)}[dir=rtl] .mdc-data-table .mdc-data-table__header-cell:last-child,.mdc-data-table .mdc-data-table__header-cell:last-child[dir=rtl]{border-top-left-radius:var(--mdc-shape-medium, 4px);border-top-right-radius:0}.mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:first-child{border-bottom-left-radius:var(--mdc-shape-medium, 4px)}[dir=rtl] .mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:first-child,.mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:first-child[dir=rtl]{border-bottom-right-radius:var(--mdc-shape-medium, 4px);border-bottom-left-radius:0}.mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:last-child{border-bottom-right-radius:var(--mdc-shape-medium, 4px)}[dir=rtl] .mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:last-child,.mdc-data-table.mdc-data-table--without-footer .mdc-data-table__row:last-child .mdc-data-table__cell:last-child[dir=rtl]{border-bottom-left-radius:var(--mdc-shape-medium, 4px);border-bottom-right-radius:0}.mdc-data-table__cell,.mdc-data-table__header-cell{border-bottom-width:1px;border-bottom-style:solid}.mdc-data-table__pagination{border-top-width:1px;border-top-style:solid}.mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:none}.mdc-data-table__row{height:52px}.mdc-data-table__pagination{min-height:52px}.mdc-data-table__header-row{height:56px}.mdc-data-table__cell,.mdc-data-table__header-cell{padding:0 16px 0 16px}.mdc-data-table__header-cell--checkbox,.mdc-data-table__cell--checkbox{padding-left:4px;padding-right:0}[dir=rtl] .mdc-data-table__header-cell--checkbox,[dir=rtl] .mdc-data-table__cell--checkbox,.mdc-data-table__header-cell--checkbox[dir=rtl],.mdc-data-table__cell--checkbox[dir=rtl]{padding-left:0;padding-right:4px}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:left;text-overflow:ellipsis}[dir=rtl] .mdc-data-table__cell,.mdc-data-table__cell[dir=rtl]{text-align:right}.mdc-data-table__cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__cell--numeric,.mdc-data-table__cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__cell--checkbox{width:1px}.mdc-data-table__header-cell{box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:left}[dir=rtl] .mdc-data-table__header-cell,.mdc-data-table__header-cell[dir=rtl]{text-align:right}.mdc-data-table__header-cell--checkbox{width:1px}.mdc-data-table__header-cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__header-cell--numeric,.mdc-data-table__header-cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__sort-icon-button{width:28px;height:28px;padding:2px;transform:rotate(0.0001deg);margin-left:4px;margin-right:0;opacity:0}.mdc-data-table__sort-icon-button .mdc-icon-button__focus-ring{max-height:28px;max-width:28px}.mdc-data-table__sort-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:28px;height:28px;margin-top:0px;margin-bottom:0px;margin-right:0px;margin-left:0px}.mdc-data-table__sort-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:28px;max-width:28px}.mdc-data-table__sort-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:28px;left:50%;width:28px;transform:translate(-50%, -50%)}[dir=rtl] .mdc-data-table__sort-icon-button,.mdc-data-table__sort-icon-button[dir=rtl]{margin-left:0;margin-right:4px}.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button{margin-left:0;margin-right:4px}[dir=rtl] .mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button[dir=rtl]{margin-left:4px;margin-right:0}.mdc-data-table__header-cell--sorted-descending .mdc-data-table__sort-icon-button{transform:rotate(-180deg)}.mdc-data-table__sort-icon-button:focus,.mdc-data-table__header-cell:hover .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button{opacity:1}.mdc-data-table__header-cell-wrapper{align-items:center;display:inline-flex;vertical-align:middle}.mdc-data-table__header-cell--with-sort{cursor:pointer}.mdc-data-table__sort-status-label{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.mdc-data-table--sticky-header .mdc-data-table__header-cell{position:sticky;top:0;z-index:1}.mdc-data-table{-webkit-overflow-scrolling:touch;display:inline-flex;flex-direction:column;box-sizing:border-box;position:relative}.mdc-data-table__table-container{-webkit-overflow-scrolling:touch;overflow-x:auto;width:100%}.mdc-data-table__table{min-width:100%;border:0;white-space:nowrap;border-spacing:0;table-layout:fixed}.mdc-data-table__header-cell{box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:left}[dir=rtl] .mdc-data-table__header-cell,.mdc-data-table__header-cell[dir=rtl]{text-align:right}.mdc-data-table__header-cell--checkbox{width:1px}.mdc-data-table__header-cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__header-cell--numeric,.mdc-data-table__header-cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__sort-icon-button{width:28px;height:28px;padding:2px;transform:rotate(0.0001deg);margin-left:4px;margin-right:0;opacity:0}.mdc-data-table__sort-icon-button .mdc-icon-button__focus-ring{max-height:28px;max-width:28px}.mdc-data-table__sort-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:28px;height:28px;margin-top:0px;margin-bottom:0px;margin-right:0px;margin-left:0px}.mdc-data-table__sort-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:28px;max-width:28px}.mdc-data-table__sort-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:28px;left:50%;width:28px;transform:translate(-50%, -50%)}[dir=rtl] .mdc-data-table__sort-icon-button,.mdc-data-table__sort-icon-button[dir=rtl]{margin-left:0;margin-right:4px}.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button{margin-left:0;margin-right:4px}[dir=rtl] .mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button[dir=rtl]{margin-left:4px;margin-right:0}.mdc-data-table__header-cell--sorted-descending .mdc-data-table__sort-icon-button{transform:rotate(-180deg)}.mdc-data-table__sort-icon-button:focus,.mdc-data-table__header-cell:hover .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button{opacity:1}.mdc-data-table__header-cell-wrapper{align-items:center;display:inline-flex;vertical-align:middle}.mdc-data-table__header-cell--with-sort{cursor:pointer}.mdc-data-table__sort-status-label{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:left;text-overflow:ellipsis}[dir=rtl] .mdc-data-table__cell,.mdc-data-table__cell[dir=rtl]{text-align:right}.mdc-data-table__cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__cell--numeric,.mdc-data-table__cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__cell--checkbox{width:1px}.mdc-data-table__pagination{box-sizing:border-box;display:flex;justify-content:flex-end}.mdc-data-table__pagination-trailing{margin-left:4px;margin-right:0;align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end}[dir=rtl] .mdc-data-table__pagination-trailing,.mdc-data-table__pagination-trailing[dir=rtl]{margin-left:0;margin-right:4px}.mdc-data-table__pagination-navigation{align-items:center;display:flex}.mdc-data-table__pagination-button{margin-left:0;margin-right:4px}[dir=rtl] .mdc-data-table__pagination-button .mdc-button__icon,.mdc-data-table__pagination-button .mdc-button__icon[dir=rtl]{transform:rotate(180deg)}[dir=rtl] .mdc-data-table__pagination-button,.mdc-data-table__pagination-button[dir=rtl]{margin-left:4px;margin-right:0}.mdc-data-table__pagination-total{margin-left:14px;margin-right:36px;white-space:nowrap}[dir=rtl] .mdc-data-table__pagination-total,.mdc-data-table__pagination-total[dir=rtl]{margin-left:36px;margin-right:14px}.mdc-data-table__pagination-rows-per-page{margin-left:0;margin-right:22px;align-items:center;display:inline-flex}[dir=rtl] .mdc-data-table__pagination-rows-per-page,.mdc-data-table__pagination-rows-per-page[dir=rtl]{margin-left:22px;margin-right:0}.mdc-data-table__pagination-rows-per-page-label{margin-left:0;margin-right:12px;white-space:nowrap}[dir=rtl] .mdc-data-table__pagination-rows-per-page-label,.mdc-data-table__pagination-rows-per-page-label[dir=rtl]{margin-left:12px;margin-right:0}.mdc-data-table__pagination-rows-per-page-select{min-width:var(--mdc-menu-min-width, 80px);margin:8px 0}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor{width:100%;min-width:80px}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor{height:36px}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-floating-label--float-above{transform:translateY(-27.25px) scale(1)}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-floating-label--float-above{font-size:.75rem}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-24.75px) scale(0.75)}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-data-table__pagination-rows-per-page-select .mdc-select__dropdown-icon{width:20px;height:20px}.mdc-data-table__pagination-rows-per-page-select.mdc-select--outlined .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 56px)}.mdc-data-table__pagination-rows-per-page-select .mdc-list-item.mdc-list-item--with-one-line{height:36px}.mdc-data-table__progress-indicator{display:none;position:absolute;width:100%}.mdc-data-table--in-progress .mdc-data-table__progress-indicator{display:block}.mdc-data-table__scrim{background-color:var(--mdc-theme-surface, #fff);height:100%;opacity:.32;position:absolute;top:0;width:100%}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}.mat-mdc-table-sticky{position:sticky !important}.mat-mdc-table{table-layout:auto;white-space:normal}mat-row.mat-mdc-row,mat-header-row.mat-mdc-header-row,mat-footer-row.mat-mdc-footer-row{border-bottom:none}.mat-mdc-table tbody,.mat-mdc-table tfoot,.mat-mdc-table thead,.mat-mdc-cell,.mat-mdc-footer-cell,.mat-mdc-header-row,.mat-mdc-row,.mat-mdc-footer-row,.mat-mdc-table .mat-mdc-header-cell{background:inherit}.mat-mdc-table .mat-mdc-row:hover,.mat-mdc-table .mat-mdc-footer-row:hover{background-color:inherit}.mat-mdc-table mat-header-row.mat-mdc-header-row,.mat-mdc-table mat-row.mat-mdc-row,.mat-mdc-table mat-footer-row.mat-mdc-footer-cell{height:unset}mat-header-cell.mat-mdc-header-cell,mat-cell.mat-mdc-cell,mat-footer-cell.mat-mdc-footer-cell{align-self:stretch}\"] }]\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: \"15.2.0-rc.0\", ngImport: i0, type: MatCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatCellDef, selector: \"[matCellDef]\", providers: [{ provide: CdkCellDef, useExisting: MatCellDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: MatHeaderCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatHeaderCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatHeaderCellDef, selector: \"[matHeaderCellDef]\", providers: [{ provide: CdkHeaderCellDef, useExisting: MatHeaderCellDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: MatFooterCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatFooterCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatFooterCellDef, selector: \"[matFooterCellDef]\", providers: [{ provide: CdkFooterCellDef, useExisting: MatFooterCellDef }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: MatColumnDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatColumnDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: MatHeaderCell, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatHeaderCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatHeaderCell, selector: \"mat-header-cell, th[mat-header-cell]\", host: { attributes: { \"role\": \"columnheader\" }, classAttribute: \"mat-mdc-header-cell mdc-data-table__header-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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-mdc-header-cell mdc-data-table__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: \"15.2.0-rc.0\", ngImport: i0, type: MatFooterCell, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatFooterCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatFooterCell, selector: \"mat-footer-cell, td[mat-footer-cell]\", host: { classAttribute: \"mat-mdc-footer-cell mdc-data-table__cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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-mdc-footer-cell mdc-data-table__cell',\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: \"15.2.0-rc.0\", ngImport: i0, type: MatCell, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatCell, selector: \"mat-cell, td[mat-cell]\", host: { classAttribute: \"mat-mdc-cell mdc-data-table__cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.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-mdc-cell mdc-data-table__cell',\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: \"15.2.0-rc.0\", ngImport: i0, type: MatHeaderRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatHeaderRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: MatFooterRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatFooterRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: MatRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.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: \"15.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/** Footer 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: \"15.2.0-rc.0\", ngImport: i0, type: MatHeaderRow, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatHeaderRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatHeaderRow, selector: \"mat-header-row, tr[mat-header-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"mat-mdc-header-row mdc-data-table__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: \"15.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-mdc-header-row mdc-data-table__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: \"15.2.0-rc.0\", ngImport: i0, type: MatFooterRow, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatFooterRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatFooterRow, selector: \"mat-footer-row, tr[mat-footer-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"mat-mdc-footer-row mdc-data-table__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: \"15.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-mdc-footer-row mdc-data-table__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: \"15.2.0-rc.0\", ngImport: i0, type: MatRow, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatRow, selector: \"mat-row, tr[mat-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"mat-mdc-row mdc-data-table__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: \"15.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-mdc-row mdc-data-table__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-mdc-no-data-row';\n }\n}\nMatNoDataRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatNoDataRow, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatNoDataRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: MatTextColumn, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatTextColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.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: \"15.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: \"15.2.0-rc.0\", ngImport: i0, type: MatTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.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: [MatCommonModule, CdkTableModule], 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: \"15.2.0-rc.0\", ngImport: i0, type: MatTableModule, imports: [MatCommonModule, CdkTableModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatTableModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, CdkTableModule],\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 /** 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 paginator component used by the table to control what page of the data is\n * displayed. Page changes emitted by the paginator 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 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 /**\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 sort and/or paginator 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 paginator'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]}
\n {{headerText}}\n \n {{dataAccessor(data, name)}}\n \n {{headerText}}\n \n {{dataAccessor(data, name)}}\n