{"version":3,"file":"table.mjs","sources":["../../../../../../src/cdk/table/can-stick.ts","../../../../../../src/cdk/table/tokens.ts","../../../../../../src/cdk/table/cell.ts","../../../../../../src/cdk/table/coalesced-style-scheduler.ts","../../../../../../src/cdk/table/row.ts","../../../../../../src/cdk/table/sticky-styler.ts","../../../../../../src/cdk/table/table-errors.ts","../../../../../../src/cdk/table/sticky-position-listener.ts","../../../../../../src/cdk/table/table.ts","../../../../../../src/cdk/table/text-column.ts","../../../../../../src/cdk/table/table-module.ts","../../../../../../src/cdk/table/table_public_index.ts"],"sourcesContent":["/**\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\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\n\n/** @docs-private */\nexport type Constructor = new (...args: any[]) => T;\n\n/**\n * Interface for a mixin to provide a directive with a function that checks if the sticky input has\n * been changed since the last time the function was called. Essentially adds a dirty-check to the\n * sticky value.\n * @docs-private\n */\nexport interface CanStick {\n /** Whether sticky positioning should be applied. */\n sticky: boolean;\n\n /** Whether the sticky input has changed since it was last checked. */\n _hasStickyChanged: boolean;\n\n /** Whether the sticky value has changed since this was last called. */\n hasStickyChanged(): boolean;\n\n /** Resets the dirty check for cases where the sticky state has been used without checking. */\n resetStickyChanged(): void;\n}\n\n/** @docs-private */\nexport type CanStickCtor = Constructor;\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 */\nexport function mixinHasStickyInput>(base: T): CanStickCtor & T {\n return class extends base {\n /** Whether sticky positioning should be applied. */\n get sticky(): boolean {\n return this._sticky;\n }\n set sticky(v: BooleanInput) {\n const prevValue = this._sticky;\n this._sticky = coerceBooleanProperty(v);\n this._hasStickyChanged = prevValue !== this._sticky;\n }\n _sticky: boolean = false;\n\n /** Whether the sticky input has changed since it was last checked. */\n _hasStickyChanged: boolean = false;\n\n /** Whether the sticky value has changed since this was last called. */\n hasStickyChanged(): boolean {\n const hasStickyChanged = this._hasStickyChanged;\n this._hasStickyChanged = false;\n return hasStickyChanged;\n }\n\n /** Resets the dirty check for cases where the sticky state has been used without checking. */\n resetStickyChanged() {\n this._hasStickyChanged = false;\n }\n\n constructor(...args: any[]) {\n super(...args);\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\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Used to provide a table to some of the sub-components without causing a circular dependency.\n * @docs-private\n */\nexport const CDK_TABLE = new InjectionToken('CDK_TABLE');\n\n/** Configurable options for `CdkTextColumn`. */\nexport interface TextColumnOptions {\n /**\n * Default function that provides the header text based on the column name if a header\n * text is not provided.\n */\n defaultHeaderTextTransform?: (name: string) => string;\n\n /** Default data accessor to use if one is not provided. */\n defaultDataAccessor?: (data: T, name: string) => string;\n}\n\n/** Injection token that can be used to specify the text column options. */\nexport const TEXT_COLUMN_OPTIONS = new InjectionToken>(\n '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\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n ContentChild,\n Directive,\n ElementRef,\n Inject,\n Input,\n Optional,\n TemplateRef,\n} from '@angular/core';\nimport {CanStick, CanStickCtor, mixinHasStickyInput} from './can-stick';\nimport {CDK_TABLE} from './tokens';\n\n/** Base interface for a cell definition. Captures a column's cell template definition. */\nexport interface CellDef {\n template: TemplateRef;\n}\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 */\n@Directive({selector: '[cdkCellDef]'})\nexport class CdkCellDef implements CellDef {\n constructor(/** @docs-private */ public template: TemplateRef) {}\n}\n\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 */\n@Directive({selector: '[cdkHeaderCellDef]'})\nexport class CdkHeaderCellDef implements CellDef {\n constructor(/** @docs-private */ public template: TemplateRef) {}\n}\n\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 */\n@Directive({selector: '[cdkFooterCellDef]'})\nexport class CdkFooterCellDef implements CellDef {\n constructor(/** @docs-private */ public template: TemplateRef) {}\n}\n\n// Boilerplate for applying mixins to CdkColumnDef.\n/** @docs-private */\nclass CdkColumnDefBase {}\nconst _CdkColumnDefBase: CanStickCtor & typeof CdkColumnDefBase =\n mixinHasStickyInput(CdkColumnDefBase);\n\n/**\n * Column definition for the CDK table.\n * Defines a set of cells available for a table column.\n */\n@Directive({\n selector: '[cdkColumnDef]',\n inputs: ['sticky'],\n providers: [{provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef}],\n})\nexport class CdkColumnDef extends _CdkColumnDefBase implements CanStick {\n /** Unique name for this column. */\n @Input('cdkColumnDef')\n get name(): string {\n return this._name;\n }\n set name(name: string) {\n this._setNameInput(name);\n }\n protected _name: string;\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 @Input('stickyEnd')\n get stickyEnd(): boolean {\n return this._stickyEnd;\n }\n set stickyEnd(v: BooleanInput) {\n const prevValue = this._stickyEnd;\n this._stickyEnd = coerceBooleanProperty(v);\n this._hasStickyChanged = prevValue !== this._stickyEnd;\n }\n _stickyEnd: boolean = false;\n\n /** @docs-private */\n @ContentChild(CdkCellDef) cell: CdkCellDef;\n\n /** @docs-private */\n @ContentChild(CdkHeaderCellDef) headerCell: CdkHeaderCellDef;\n\n /** @docs-private */\n @ContentChild(CdkFooterCellDef) footerCell: CdkFooterCellDef;\n\n /**\n * Transformed version of the column name that can be used as part of a CSS classname. Excludes\n * all non-alphanumeric characters and the special characters '-' and '_'. Any characters that\n * do not match are replaced by the '-' character.\n */\n cssClassFriendlyName: string;\n\n /**\n * Class name for cells in this column.\n * @docs-private\n */\n _columnCssClassName: string[];\n\n constructor(@Inject(CDK_TABLE) @Optional() public _table?: any) {\n super();\n }\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 protected _updateColumnCssClassName() {\n this._columnCssClassName = [`cdk-column-${this.cssClassFriendlyName}`];\n }\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 protected _setNameInput(value: string) {\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}\n\n/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */\nexport class BaseCdkCell {\n constructor(columnDef: CdkColumnDef, elementRef: ElementRef) {\n elementRef.nativeElement.classList.add(...columnDef._columnCssClassName);\n }\n}\n\n/** Header cell template container that adds the right classes and role. */\n@Directive({\n selector: 'cdk-header-cell, th[cdk-header-cell]',\n host: {\n 'class': 'cdk-header-cell',\n 'role': 'columnheader',\n },\n})\nexport class CdkHeaderCell extends BaseCdkCell {\n constructor(columnDef: CdkColumnDef, elementRef: ElementRef) {\n super(columnDef, elementRef);\n }\n}\n\n/** Footer cell template container that adds the right classes and role. */\n@Directive({\n selector: 'cdk-footer-cell, td[cdk-footer-cell]',\n host: {\n 'class': 'cdk-footer-cell',\n },\n})\nexport class CdkFooterCell extends BaseCdkCell {\n constructor(columnDef: CdkColumnDef, elementRef: 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}\n\n/** Cell template container that adds the right classes and role. */\n@Directive({\n selector: 'cdk-cell, td[cdk-cell]',\n host: {\n 'class': 'cdk-cell',\n },\n})\nexport class CdkCell extends BaseCdkCell {\n constructor(columnDef: CdkColumnDef, elementRef: 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}\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\nimport {Injectable, NgZone, OnDestroy, InjectionToken} from '@angular/core';\nimport {from, Subject} from 'rxjs';\nimport {take, takeUntil} from 'rxjs/operators';\n\n/**\n * @docs-private\n */\nexport class _Schedule {\n tasks: (() => unknown)[] = [];\n endTasks: (() => unknown)[] = [];\n}\n\n/** Injection token used to provide a coalesced style scheduler. */\nexport const _COALESCED_STYLE_SCHEDULER = new InjectionToken<_CoalescedStyleScheduler>(\n '_COALESCED_STYLE_SCHEDULER',\n);\n\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 */\n@Injectable()\nexport class _CoalescedStyleScheduler implements OnDestroy {\n private _currentSchedule: _Schedule | null = null;\n private readonly _destroyed = new Subject();\n\n constructor(private readonly _ngZone: NgZone) {}\n\n /**\n * Schedules the specified task to run at the end of the current VM turn.\n */\n schedule(task: () => unknown): void {\n this._createScheduleIfNeeded();\n\n this._currentSchedule!.tasks.push(task);\n }\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: () => unknown): void {\n this._createScheduleIfNeeded();\n\n this._currentSchedule!.endTasks.push(task);\n }\n\n /** Prevent any further tasks from running. */\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n private _createScheduleIfNeeded() {\n if (this._currentSchedule) {\n return;\n }\n\n this._currentSchedule = new _Schedule();\n\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\n // Capture new tasks scheduled by the current set of tasks.\n this._currentSchedule = new _Schedule();\n\n for (const task of schedule.tasks) {\n task();\n }\n\n for (const task of schedule.endTasks) {\n task();\n }\n }\n\n this._currentSchedule = null;\n });\n }\n\n private _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","/**\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\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n IterableChanges,\n IterableDiffer,\n IterableDiffers,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n ViewEncapsulation,\n Inject,\n Optional,\n} from '@angular/core';\nimport {CanStick, CanStickCtor, mixinHasStickyInput} from './can-stick';\nimport {CdkCellDef, CdkColumnDef} from './cell';\nimport {CDK_TABLE} from './tokens';\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 */\nexport const CDK_ROW_TEMPLATE = ``;\n\n/**\n * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs\n * for changes and notifying the table.\n */\n@Directive()\nexport abstract class BaseRowDef implements OnChanges {\n /** The columns to be displayed on this row. */\n columns: Iterable;\n\n /** Differ used to check if any changes were made to the columns. */\n protected _columnsDiffer: IterableDiffer;\n\n constructor(\n /** @docs-private */ public template: TemplateRef,\n protected _differs: IterableDiffers,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\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 /**\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(): IterableChanges | null {\n return this._columnsDiffer.diff(this.columns);\n }\n\n /** Gets this row def's relevant cell template from the provided column def. */\n extractCellTemplate(column: CdkColumnDef): TemplateRef {\n if (this instanceof CdkHeaderRowDef) {\n return column.headerCell.template;\n }\n if (this instanceof CdkFooterRowDef) {\n return column.footerCell.template;\n } else {\n return column.cell.template;\n }\n }\n}\n\n// Boilerplate for applying mixins to CdkHeaderRowDef.\n/** @docs-private */\nclass CdkHeaderRowDefBase extends BaseRowDef {}\nconst _CdkHeaderRowDefBase: CanStickCtor & typeof CdkHeaderRowDefBase =\n mixinHasStickyInput(CdkHeaderRowDefBase);\n\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 */\n@Directive({\n selector: '[cdkHeaderRowDef]',\n inputs: ['columns: cdkHeaderRowDef', 'sticky: cdkHeaderRowDefSticky'],\n})\nexport class CdkHeaderRowDef extends _CdkHeaderRowDefBase implements CanStick, OnChanges {\n constructor(\n template: TemplateRef,\n _differs: IterableDiffers,\n @Inject(CDK_TABLE) @Optional() public _table?: any,\n ) {\n super(template, _differs);\n }\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 override ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n }\n}\n\n// Boilerplate for applying mixins to CdkFooterRowDef.\n/** @docs-private */\nclass CdkFooterRowDefBase extends BaseRowDef {}\nconst _CdkFooterRowDefBase: CanStickCtor & typeof CdkFooterRowDefBase =\n mixinHasStickyInput(CdkFooterRowDefBase);\n\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 */\n@Directive({\n selector: '[cdkFooterRowDef]',\n inputs: ['columns: cdkFooterRowDef', 'sticky: cdkFooterRowDefSticky'],\n})\nexport class CdkFooterRowDef extends _CdkFooterRowDefBase implements CanStick, OnChanges {\n constructor(\n template: TemplateRef,\n _differs: IterableDiffers,\n @Inject(CDK_TABLE) @Optional() public _table?: any,\n ) {\n super(template, _differs);\n }\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 override ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n }\n}\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 */\n@Directive({\n selector: '[cdkRowDef]',\n inputs: ['columns: cdkRowDefColumns', 'when: cdkRowDefWhen'],\n})\nexport class CdkRowDef extends BaseRowDef {\n /**\n * Function that should return true if this row template should be used for the provided index\n * and row data. If left undefined, this row will be considered the default row template to use\n * when no other when functions return true for the data.\n * For every row, there must be at least one when function that passes or an undefined to default.\n */\n when: (index: number, rowData: T) => boolean;\n\n // TODO(andrewseguin): Add an input for providing a switch function to determine\n // if this template should be used.\n constructor(\n template: TemplateRef,\n _differs: IterableDiffers,\n @Inject(CDK_TABLE) @Optional() public _table?: any,\n ) {\n super(template, _differs);\n }\n}\n\n/** Context provided to the row cells when `multiTemplateDataRows` is false */\nexport interface CdkCellOutletRowContext {\n /** Data for the row that this cell is located within. */\n $implicit?: T;\n\n /** Index of the data object in the provided data array. */\n index?: number;\n\n /** Length of the number of total rows. */\n count?: number;\n\n /** True if this cell is contained in the first row. */\n first?: boolean;\n\n /** True if this cell is contained in the last row. */\n last?: boolean;\n\n /** True if this cell is contained in a row with an even-numbered index. */\n even?: boolean;\n\n /** True if this cell is contained in a row with an odd-numbered index. */\n odd?: boolean;\n}\n\n/**\n * Context provided to the row cells when `multiTemplateDataRows` is true. This context is the same\n * as CdkCellOutletRowContext except that the single `index` value is replaced by `dataIndex` and\n * `renderIndex`.\n */\nexport interface CdkCellOutletMultiRowContext {\n /** Data for the row that this cell is located within. */\n $implicit?: T;\n\n /** Index of the data object in the provided data array. */\n dataIndex?: number;\n\n /** Index location of the rendered row that this cell is located within. */\n renderIndex?: number;\n\n /** Length of the number of total rows. */\n count?: number;\n\n /** True if this cell is contained in the first row. */\n first?: boolean;\n\n /** True if this cell is contained in the last row. */\n last?: boolean;\n\n /** True if this cell is contained in a row with an even-numbered index. */\n even?: boolean;\n\n /** True if this cell is contained in a row with an odd-numbered index. */\n odd?: boolean;\n}\n\n/**\n * Outlet for rendering cells inside of a row or header row.\n * @docs-private\n */\n@Directive({selector: '[cdkCellOutlet]'})\nexport class CdkCellOutlet implements OnDestroy {\n /** The ordered list of cells to render within this outlet's view container */\n cells: CdkCellDef[];\n\n /** The data context to be provided to each cell */\n context: any;\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 */\n static mostRecentCellOutlet: CdkCellOutlet | null = null;\n\n constructor(public _viewContainer: ViewContainerRef) {\n CdkCellOutlet.mostRecentCellOutlet = this;\n }\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/** Header template container that contains the cell outlet. Adds the right class and role. */\n@Component({\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})\nexport class CdkHeaderRow {}\n\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\n@Component({\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})\nexport class CdkFooterRow {}\n\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\n@Component({\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})\nexport class CdkRow {}\n\n/** Row that can be used to display a message when no data is shown in the table. */\n@Directive({\n selector: 'ng-template[cdkNoDataRow]',\n})\nexport class CdkNoDataRow {\n _contentClassName = 'cdk-no-data-row';\n constructor(public templateRef: 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/**\n * Directions that can be used when setting sticky positioning.\n * @docs-private\n */\nimport {Direction} from '@angular/cdk/bidi';\nimport {_CoalescedStyleScheduler} from './coalesced-style-scheduler';\nimport {StickyPositioningListener} from './sticky-position-listener';\n\nexport type StickyDirection = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * List of all possible directions that can be used for sticky positioning.\n * @docs-private\n */\nexport const STICKY_DIRECTIONS: StickyDirection[] = ['top', 'bottom', 'left', 'right'];\n\n/**\n * Applies and removes sticky positioning styles to the `CdkTable` rows and columns cells.\n * @docs-private\n */\nexport class StickyStyler {\n private _cachedCellWidths: number[] = [];\n private readonly _borderCellCss: Readonly<{[d in StickyDirection]: string}>;\n\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(\n private _isNativeHtmlTable: boolean,\n private _stickCellCss: string,\n public direction: Direction,\n private _coalescedStyleScheduler: _CoalescedStyleScheduler,\n private _isBrowser = true,\n private readonly _needsPositionStickyOnElement = true,\n private readonly _positionListener?: StickyPositioningListener,\n ) {\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 /**\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: HTMLElement[], stickyDirections: StickyDirection[]) {\n const elementsToClear: HTMLElement[] = [];\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\n elementsToClear.push(row);\n for (let i = 0; i < row.children.length; i++) {\n elementsToClear.push(row.children[i] as HTMLElement);\n }\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 /**\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(\n rows: HTMLElement[],\n stickyStartStates: boolean[],\n stickyEndStates: boolean[],\n recalculateCellWidths = true,\n ) {\n if (\n !rows.length ||\n !this._isBrowser ||\n !(stickyStartStates.some(state => state) || stickyEndStates.some(state => state))\n ) {\n if (this._positionListener) {\n this._positionListener.stickyColumnsUpdated({sizes: []});\n this._positionListener.stickyEndColumnsUpdated({sizes: []});\n }\n\n return;\n }\n\n const firstRow = rows[0];\n const numCells = firstRow.children.length;\n const cellWidths: number[] = this._getCellWidths(firstRow, recalculateCellWidths);\n\n const startPositions = this._getStickyStartColumnPositions(cellWidths, stickyStartStates);\n const endPositions = this._getStickyEndColumnPositions(cellWidths, stickyEndStates);\n\n const lastStickyStart = stickyStartStates.lastIndexOf(true);\n const firstStickyEnd = stickyEndStates.indexOf(true);\n\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\n for (const row of rows) {\n for (let i = 0; i < numCells; i++) {\n const cell = row.children[i] as HTMLElement;\n if (stickyStartStates[i]) {\n this._addStickyStyle(cell, start, startPositions[i], i === lastStickyStart);\n }\n\n if (stickyEndStates[i]) {\n this._addStickyStyle(cell, end, endPositions[i], i === firstStickyEnd);\n }\n }\n }\n\n if (this._positionListener) {\n this._positionListener.stickyColumnsUpdated({\n sizes:\n 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:\n 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 /**\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: HTMLElement[], stickyStates: boolean[], position: 'top' | 'bottom') {\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\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\n // Measure row heights all at once before adding sticky styles to reduce layout thrashing.\n const stickyOffsets: number[] = [];\n const stickyCellHeights: (number | undefined)[] = [];\n const elementsToStick: HTMLElement[][] = [];\n for (let rowIndex = 0, stickyOffset = 0; rowIndex < rows.length; rowIndex++) {\n if (!states[rowIndex]) {\n continue;\n }\n\n stickyOffsets[rowIndex] = stickyOffset;\n const row = rows[rowIndex];\n elementsToStick[rowIndex] = this._isNativeHtmlTable\n ? (Array.from(row.children) as HTMLElement[])\n : [row];\n\n const height = row.getBoundingClientRect().height;\n stickyOffset += height;\n stickyCellHeights[rowIndex] = height;\n }\n\n const borderedRowIndex = states.lastIndexOf(true);\n\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\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\n if (position === 'top') {\n this._positionListener?.stickyHeaderRowsUpdated({\n sizes: stickyCellHeights,\n offsets: stickyOffsets,\n elements: elementsToStick,\n });\n } else {\n this._positionListener?.stickyFooterRowsUpdated({\n sizes: stickyCellHeights,\n offsets: stickyOffsets,\n elements: elementsToStick,\n });\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: Element, stickyStates: boolean[]) {\n if (!this._isNativeHtmlTable) {\n return;\n }\n\n const tfoot = tableElement.querySelector('tfoot')!;\n\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 } else {\n this._addStickyStyle(tfoot, 'bottom', 0, false);\n }\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: HTMLElement, stickyDirections: StickyDirection[]) {\n for (const dir of stickyDirections) {\n element.style[dir] = '';\n element.classList.remove(this._borderCellCss[dir]);\n }\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(\n dir => stickyDirections.indexOf(dir) === -1 && element.style[dir],\n );\n if (hasDirection) {\n element.style.zIndex = this._getCalculatedZIndex(element);\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 /**\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(\n element: HTMLElement,\n dir: StickyDirection,\n dirValue: number,\n isBorderElement: boolean,\n ) {\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 /**\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: HTMLElement): string {\n const zIndexIncrements = {\n top: 100,\n bottom: 10,\n left: 1,\n right: 1,\n };\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 as Iterable & StickyDirection[]) {\n if (element.style[dir]) {\n zIndex += zIndexIncrements[dir];\n }\n }\n\n return zIndex ? `${zIndex}` : '';\n }\n\n /** Gets the widths for each cell in the provided row. */\n _getCellWidths(row: HTMLElement, recalculateCellWidths = true): number[] {\n if (!recalculateCellWidths && this._cachedCellWidths.length) {\n return this._cachedCellWidths;\n }\n\n const cellWidths: number[] = [];\n const firstRowCells = row.children;\n for (let i = 0; i < firstRowCells.length; i++) {\n let cell: HTMLElement = firstRowCells[i] as HTMLElement;\n cellWidths.push(cell.getBoundingClientRect().width);\n }\n\n this._cachedCellWidths = cellWidths;\n return cellWidths;\n }\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: number[], stickyStates: boolean[]): number[] {\n const positions: number[] = [];\n let nextPosition = 0;\n\n for (let i = 0; i < widths.length; i++) {\n if (stickyStates[i]) {\n positions[i] = nextPosition;\n nextPosition += widths[i];\n }\n }\n\n return positions;\n }\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: number[], stickyStates: boolean[]): number[] {\n const positions: number[] = [];\n let nextPosition = 0;\n\n for (let i = widths.length; i > 0; i--) {\n if (stickyStates[i]) {\n positions[i] = nextPosition;\n nextPosition += widths[i];\n }\n }\n\n return positions;\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 * Returns an error to be thrown when attempting to find an nonexistent column.\n * @param id Id whose lookup failed.\n * @docs-private\n */\nexport function getTableUnknownColumnError(id: string) {\n return Error(`Could not find column with id \"${id}\".`);\n}\n\n/**\n * Returns an error to be thrown when two column definitions have the same name.\n * @docs-private\n */\nexport function getTableDuplicateColumnNameError(name: string) {\n return Error(`Duplicate column definition name provided: \"${name}\".`);\n}\n\n/**\n * Returns an error to be thrown when there are multiple rows that are missing a when function.\n * @docs-private\n */\nexport function getTableMultipleDefaultRowDefsError() {\n return Error(`There can only be one default row without a when predicate function.`);\n}\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 */\nexport function getTableMissingMatchingRowDefError(data: any) {\n return Error(\n `Could not find a matching row definition for the` +\n `provided row data: ${JSON.stringify(data)}`,\n );\n}\n\n/**\n * Returns an error to be thrown when there is no row definitions present in the content.\n * @docs-private\n */\nexport function getTableMissingRowDefsError() {\n return Error(\n 'Missing definitions for header, footer, and row; ' +\n 'cannot determine which columns should be rendered.',\n );\n}\n\n/**\n * Returns an error to be thrown when the data source does not match the compatible types.\n * @docs-private\n */\nexport function getTableUnknownDataSourceError() {\n return Error(`Provided data source did not match an array, Observable, or DataSource`);\n}\n\n/**\n * Returns an error to be thrown when the text column cannot find a parent table to inject.\n * @docs-private\n */\nexport function getTableTextColumnMissingParentTableError() {\n return Error(`Text column could not find a parent table for registration.`);\n}\n\n/**\n * Returns an error to be thrown when a table text column doesn't have a name.\n * @docs-private\n */\nexport function getTableTextColumnMissingNameError() {\n return Error(`Table text column must have a name.`);\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\nimport {InjectionToken} from '@angular/core';\n\n/** The injection token used to specify the StickyPositioningListener. */\nexport const STICKY_POSITIONING_LISTENER = new InjectionToken('CDK_SPL');\n\nexport type StickySize = number | null | undefined;\nexport type StickyOffset = number | null | undefined;\n\nexport interface StickyUpdate {\n elements?: readonly (HTMLElement[] | undefined)[];\n offsets?: StickyOffset[];\n sizes: StickySize[];\n}\n\n/**\n * If provided, CdkTable will call the methods below when it updates the size/\n * position/etc of its sticky rows and columns.\n */\nexport interface StickyPositioningListener {\n /** Called when CdkTable updates its sticky start columns. */\n stickyColumnsUpdated(update: StickyUpdate): void;\n\n /** Called when CdkTable updates its sticky end columns. */\n stickyEndColumnsUpdated(update: StickyUpdate): void;\n\n /** Called when CdkTable updates its sticky header rows. */\n stickyHeaderRowsUpdated(update: StickyUpdate): void;\n\n /** Called when CdkTable updates its sticky footer rows. */\n stickyFooterRowsUpdated(update: StickyUpdate): void;\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\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n CollectionViewer,\n DataSource,\n _DisposeViewRepeaterStrategy,\n _RecycleViewRepeaterStrategy,\n isDataSource,\n _VIEW_REPEATER_STRATEGY,\n _ViewRepeater,\n _ViewRepeaterItemChange,\n _ViewRepeaterItemInsertArgs,\n _ViewRepeaterOperation,\n} from '@angular/cdk/collections';\nimport {Platform} from '@angular/cdk/platform';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {\n AfterContentChecked,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n Inject,\n Input,\n IterableChangeRecord,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n SkipSelf,\n TemplateRef,\n TrackByFunction,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n BehaviorSubject,\n isObservable,\n Observable,\n of as observableOf,\n Subject,\n Subscription,\n} from 'rxjs';\nimport {take, takeUntil} from 'rxjs/operators';\nimport {CdkColumnDef} from './cell';\nimport {_CoalescedStyleScheduler, _COALESCED_STYLE_SCHEDULER} from './coalesced-style-scheduler';\nimport {\n BaseRowDef,\n CdkCellOutlet,\n CdkCellOutletMultiRowContext,\n CdkCellOutletRowContext,\n CdkFooterRowDef,\n CdkHeaderRowDef,\n CdkNoDataRow,\n CdkRowDef,\n} from './row';\nimport {StickyStyler} from './sticky-styler';\nimport {\n getTableDuplicateColumnNameError,\n getTableMissingMatchingRowDefError,\n getTableMissingRowDefsError,\n getTableMultipleDefaultRowDefsError,\n getTableUnknownColumnError,\n getTableUnknownDataSourceError,\n} from './table-errors';\nimport {STICKY_POSITIONING_LISTENER, StickyPositioningListener} from './sticky-position-listener';\nimport {CDK_TABLE} from './tokens';\n\n/**\n * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with\n * tables that animate rows.\n */\n@Directive({\n selector: 'cdk-table[recycleRows], table[cdk-table][recycleRows]',\n providers: [{provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy}],\n})\nexport class CdkRecycleRows {}\n\n/** Interface used to provide an outlet for rows to be inserted into. */\nexport interface RowOutlet {\n viewContainer: ViewContainerRef;\n}\n\n/** Possible types that can be set as the data source for a `CdkTable`. */\nexport type CdkTableDataSourceInput = readonly T[] | DataSource | Observable;\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 */\n@Directive({selector: '[rowOutlet]'})\nexport class DataRowOutlet implements RowOutlet {\n constructor(\n public viewContainer: ViewContainerRef,\n public elementRef: ElementRef,\n ) {}\n}\n\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the header.\n * @docs-private\n */\n@Directive({selector: '[headerRowOutlet]'})\nexport class HeaderRowOutlet implements RowOutlet {\n constructor(\n public viewContainer: ViewContainerRef,\n public elementRef: ElementRef,\n ) {}\n}\n\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the footer.\n * @docs-private\n */\n@Directive({selector: '[footerRowOutlet]'})\nexport class FooterRowOutlet implements RowOutlet {\n constructor(\n public viewContainer: ViewContainerRef,\n public elementRef: ElementRef,\n ) {}\n}\n\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 */\n@Directive({selector: '[noDataRowOutlet]'})\nexport class NoDataRowOutlet implements RowOutlet {\n constructor(\n public viewContainer: ViewContainerRef,\n public elementRef: ElementRef,\n ) {}\n}\n\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 */\nexport const 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/**\n * Interface used to conveniently type the possible context interfaces for the render row.\n * @docs-private\n */\nexport interface RowContext\n extends CdkCellOutletMultiRowContext,\n CdkCellOutletRowContext {}\n\n/**\n * Class used to conveniently type the embedded view ref for rows with a context.\n * @docs-private\n */\nabstract class RowViewRef extends EmbeddedViewRef> {}\n\n/**\n * Set of properties that represents the identity of a single rendered row.\n *\n * When the table needs to determine the list of rows to render, it will do so by iterating through\n * each data object and evaluating its list of row templates to display (when multiTemplateDataRows\n * is false, there is only one template per data object). For each pair of data object and row\n * template, a `RenderRow` is added to the list of rows to render. If the data object and row\n * template pair has already been rendered, the previously used `RenderRow` is added; else a new\n * `RenderRow` is * created. Once the list is complete and all data objects have been iterated\n * through, a diff is performed to determine the changes that need to be made to the rendered rows.\n *\n * @docs-private\n */\nexport interface RenderRow {\n data: T;\n dataIndex: number;\n rowDef: CdkRowDef;\n}\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 */\n@Component({\n selector: 'cdk-table, table[cdk-table]',\n exportAs: 'cdkTable',\n template: CDK_TABLE_TEMPLATE,\n styleUrls: ['table.css'],\n host: {\n 'class': 'cdk-table',\n '[class.cdk-table-fixed-layout]': 'fixedLayout',\n 'ngSkipHydration': '',\n },\n encapsulation: ViewEncapsulation.None,\n // The \"OnPush\" status for the `MatTable` component is effectively a noop, so we are removing it.\n // The view for `MatTable` consists entirely of templates declared in other views. As they are\n // declared elsewhere, they are checked when their declaration points are checked.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n 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 ],\n})\nexport class CdkTable implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {\n private _document: Document;\n\n /** Latest data provided by the data source. */\n protected _data: readonly T[];\n\n /** Subject that emits when the component has been destroyed. */\n private readonly _onDestroy = new Subject();\n\n /** List of the rendered rows as identified by their `RenderRow` object. */\n private _renderRows: RenderRow[];\n\n /** Subscription that listens for the data provided by the data source. */\n private _renderChangeSubscription: Subscription | null;\n\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 private _columnDefsByName = new Map();\n\n /**\n * Set of all row definitions that can be used by this table. Populated by the rows gathered by\n * using `ContentChildren` as well as any custom row definitions added to `_customRowDefs`.\n */\n private _rowDefs: CdkRowDef[];\n\n /**\n * Set of all header row definitions that can be used by this table. Populated by the rows\n * gathered by using `ContentChildren` as well as any custom row definitions added to\n * `_customHeaderRowDefs`.\n */\n private _headerRowDefs: CdkHeaderRowDef[];\n\n /**\n * Set of all row definitions that can be used by this table. Populated by the rows gathered by\n * using `ContentChildren` as well as any custom row definitions added to\n * `_customFooterRowDefs`.\n */\n private _footerRowDefs: CdkFooterRowDef[];\n\n /** Differ used to find the changes in the data provided by the data source. */\n private _dataDiffer: IterableDiffer>;\n\n /** Stores the row definition that does not have a when predicate. */\n private _defaultRowDef: CdkRowDef | null;\n\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 private _customColumnDefs = new Set();\n\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 private _customRowDefs = new Set>();\n\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 private _customHeaderRowDefs = new Set();\n\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 private _customFooterRowDefs = new Set();\n\n /** No data row that was defined outside of the direct content children of the table. */\n private _customNoDataRow: CdkNoDataRow | null;\n\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 private _headerRowDefChanged = true;\n\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 private _footerRowDefChanged = true;\n\n /**\n * Whether the sticky column styles need to be updated. Set to `true` when the visible columns\n * change.\n */\n private _stickyColumnStylesNeedReset = true;\n\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 private _forceRecalculateCellWidths = true;\n\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 private _cachedRenderRowsMap = new Map, RenderRow[]>>();\n\n /** Whether the table is applied to a native `
`. */\n protected _isNativeHtmlTable: boolean;\n\n /**\n * Utility class that is responsible for applying the appropriate sticky positioning styles to\n * the table's rows and cells.\n */\n private _stickyStyler: StickyStyler;\n\n /**\n * CSS class added to any row or cell that has sticky positioning applied. May be overridden by\n * table subclasses.\n */\n protected stickyCssClass: string = 'cdk-table-sticky';\n\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 protected needsPositionStickyOnElement = true;\n\n /** Whether the no data row is currently showing anything. */\n private _isShowingNoDataRow = false;\n\n /**\n * Tracking function that will be used to check the differences in data changes. Used similarly\n * to `ngFor` `trackBy` function. Optimize row operations by identifying a row based on its data\n * relative to the function to know if a row should be added/removed/moved.\n * Accepts a function that takes two parameters, `index` and `item`.\n */\n @Input()\n get trackBy(): TrackByFunction {\n return this._trackByFn;\n }\n set trackBy(fn: TrackByFunction) {\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 private _trackByFn: TrackByFunction;\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 @Input()\n get dataSource(): CdkTableDataSourceInput {\n return this._dataSource;\n }\n set dataSource(dataSource: CdkTableDataSourceInput) {\n if (this._dataSource !== dataSource) {\n this._switchDataSource(dataSource);\n }\n }\n private _dataSource: CdkTableDataSourceInput;\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 @Input()\n get multiTemplateDataRows(): boolean {\n return this._multiTemplateDataRows;\n }\n set multiTemplateDataRows(v: BooleanInput) {\n this._multiTemplateDataRows = coerceBooleanProperty(v);\n\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 _multiTemplateDataRows: boolean = false;\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 @Input()\n get fixedLayout(): boolean {\n return this._fixedLayout;\n }\n set fixedLayout(v: BooleanInput) {\n this._fixedLayout = coerceBooleanProperty(v);\n\n // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated.\n this._forceRecalculateCellWidths = true;\n this._stickyColumnStylesNeedReset = true;\n }\n private _fixedLayout: boolean = false;\n\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 @Output()\n readonly contentChanged = new EventEmitter();\n\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 readonly viewChange = new BehaviorSubject<{start: number; end: number}>({\n start: 0,\n end: Number.MAX_VALUE,\n });\n\n // Outlets in the table's template where the header, data rows, and footer will be inserted.\n @ViewChild(DataRowOutlet, {static: true}) _rowOutlet: DataRowOutlet;\n @ViewChild(HeaderRowOutlet, {static: true}) _headerRowOutlet: HeaderRowOutlet;\n @ViewChild(FooterRowOutlet, {static: true}) _footerRowOutlet: FooterRowOutlet;\n @ViewChild(NoDataRowOutlet, {static: true}) _noDataRowOutlet: NoDataRowOutlet;\n\n /**\n * The column definitions provided by the user that contain what the header, data, and footer\n * cells should render for each column.\n */\n @ContentChildren(CdkColumnDef, {descendants: true}) _contentColumnDefs: QueryList;\n\n /** Set of data row definitions that were provided to the table as content children. */\n @ContentChildren(CdkRowDef, {descendants: true}) _contentRowDefs: QueryList>;\n\n /** Set of header row definitions that were provided to the table as content children. */\n @ContentChildren(CdkHeaderRowDef, {\n descendants: true,\n })\n _contentHeaderRowDefs: QueryList;\n\n /** Set of footer row definitions that were provided to the table as content children. */\n @ContentChildren(CdkFooterRowDef, {\n descendants: true,\n })\n _contentFooterRowDefs: QueryList;\n\n /** Row definition that will only be rendered if there's no data in the table. */\n @ContentChild(CdkNoDataRow) _noDataRow: CdkNoDataRow;\n\n constructor(\n protected readonly _differs: IterableDiffers,\n protected readonly _changeDetectorRef: ChangeDetectorRef,\n protected readonly _elementRef: ElementRef,\n @Attribute('role') role: string,\n @Optional() protected readonly _dir: Directionality,\n @Inject(DOCUMENT) _document: any,\n private _platform: Platform,\n @Inject(_VIEW_REPEATER_STRATEGY)\n protected readonly _viewRepeater: _ViewRepeater, RowContext>,\n @Inject(_COALESCED_STYLE_SCHEDULER)\n protected readonly _coalescedStyleScheduler: _CoalescedStyleScheduler,\n private readonly _viewportRuler: ViewportRuler,\n /**\n * @deprecated `_stickyPositioningListener` parameter to become required.\n * @breaking-change 13.0.0\n */\n @Optional()\n @SkipSelf()\n @Inject(STICKY_POSITIONING_LISTENER)\n protected readonly _stickyPositioningListener: StickyPositioningListener,\n /**\n * @deprecated `_ngZone` parameter to become required.\n * @breaking-change 14.0.0\n */\n @Optional()\n protected readonly _ngZone?: NgZone,\n ) {\n if (!role) {\n this._elementRef.nativeElement.setAttribute('role', 'table');\n }\n\n this._document = _document;\n this._isNativeHtmlTable = this._elementRef.nativeElement.nodeName === 'TABLE';\n }\n\n ngOnInit() {\n this._setupStickyStyler();\n\n if (this._isNativeHtmlTable) {\n this._applyNativeTableSections();\n }\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: number, dataRow: RenderRow) => {\n return this.trackBy ? this.trackBy(dataRow.dataIndex, dataRow.data) : dataRow;\n });\n\n this._viewportRuler\n .change()\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => {\n this._forceRecalculateCellWidths = true;\n });\n }\n\n ngAfterContentChecked() {\n // Cache the row and column definitions gathered by ContentChildren and programmatic injection.\n this._cacheRowDefs();\n this._cacheColumnDefs();\n\n // Make sure that the user has at least added header, footer, or data row def.\n if (\n !this._headerRowDefs.length &&\n !this._footerRowDefs.length &&\n !this._rowDefs.length &&\n (typeof ngDevMode === 'undefined' || ngDevMode)\n ) {\n throw getTableMissingRowDefsError();\n }\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\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\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\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 } 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\n this._checkStickyStates();\n }\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\n this._headerRowDefs = [];\n this._footerRowDefs = [];\n this._defaultRowDef = null;\n this._onDestroy.next();\n this._onDestroy.complete();\n\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect(this);\n }\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\n this._viewRepeater.applyChanges(\n changes,\n viewContainer,\n (\n record: IterableChangeRecord>,\n _adjustedPreviousIndex: number | null,\n currentIndex: number | null,\n ) => this._getEmbeddedViewArgs(record.item, currentIndex!),\n record => record.item.data,\n (change: _ViewRepeaterItemChange, RowContext>) => {\n if (change.operation === _ViewRepeaterOperation.INSERTED && change.context) {\n this._renderCellTemplateForItem(change.record.item.rowDef, change.context);\n }\n },\n );\n\n // Update the meta context of a row's context data (index, count, first, last, ...)\n this._updateRowIndexContext();\n\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: IterableChangeRecord>) => {\n const rowView = >viewContainer.get(record.currentIndex!);\n rowView.context.$implicit = record.item.data;\n });\n\n this._updateNoDataRow();\n\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 } else {\n this.updateStickyColumnStyles();\n }\n\n this.contentChanged.next();\n }\n\n /** Adds a column definition that was not included as part of the content children. */\n addColumnDef(columnDef: CdkColumnDef) {\n this._customColumnDefs.add(columnDef);\n }\n\n /** Removes a column definition that was not included as part of the content children. */\n removeColumnDef(columnDef: CdkColumnDef) {\n this._customColumnDefs.delete(columnDef);\n }\n\n /** Adds a row definition that was not included as part of the content children. */\n addRowDef(rowDef: CdkRowDef) {\n this._customRowDefs.add(rowDef);\n }\n\n /** Removes a row definition that was not included as part of the content children. */\n removeRowDef(rowDef: CdkRowDef) {\n this._customRowDefs.delete(rowDef);\n }\n\n /** Adds a header row definition that was not included as part of the content children. */\n addHeaderRowDef(headerRowDef: CdkHeaderRowDef) {\n this._customHeaderRowDefs.add(headerRowDef);\n this._headerRowDefChanged = true;\n }\n\n /** Removes a header row definition that was not included as part of the content children. */\n removeHeaderRowDef(headerRowDef: CdkHeaderRowDef) {\n this._customHeaderRowDefs.delete(headerRowDef);\n this._headerRowDefChanged = true;\n }\n\n /** Adds a footer row definition that was not included as part of the content children. */\n addFooterRowDef(footerRowDef: CdkFooterRowDef) {\n this._customFooterRowDefs.add(footerRowDef);\n this._footerRowDefChanged = true;\n }\n\n /** Removes a footer row definition that was not included as part of the content children. */\n removeFooterRowDef(footerRowDef: CdkFooterRowDef) {\n this._customFooterRowDefs.delete(footerRowDef);\n this._footerRowDefChanged = true;\n }\n\n /** Sets a no data row definition that was not included as a part of the content children. */\n setNoDataRow(noDataRow: CdkNoDataRow | null) {\n this._customNoDataRow = noDataRow;\n }\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(): void {\n const headerRows = this._getRenderedRows(this._headerRowOutlet);\n const tableElement = this._elementRef.nativeElement as HTMLElement;\n\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\n const stickyStates = this._headerRowDefs.map(def => def.sticky);\n this._stickyStyler.clearStickyPositioning(headerRows, ['top']);\n this._stickyStyler.stickRows(headerRows, stickyStates, 'top');\n\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 /**\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(): void {\n const footerRows = this._getRenderedRows(this._footerRowOutlet);\n const tableElement = this._elementRef.nativeElement as HTMLElement;\n\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\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\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 /**\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\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(\n [...headerRows, ...dataRows, ...footerRows],\n ['left', 'right'],\n );\n this._stickyColumnStylesNeedReset = false;\n }\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\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: HTMLElement[] = [];\n for (let i = 0; i < dataRows.length; i++) {\n if (this._renderRows[i].rowDef === rowDef) {\n rows.push(dataRows[i]);\n }\n }\n\n this._addStickyColumnStyles(rows, rowDef);\n });\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\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 /**\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 private _getAllRenderRows(): RenderRow[] {\n const renderRows: RenderRow[] = [];\n\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\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\n if (!this._cachedRenderRowsMap.has(data)) {\n this._cachedRenderRowsMap.set(data, new WeakMap());\n }\n\n for (let j = 0; j < renderRowsForData.length; j++) {\n let renderRow = renderRowsForData[j];\n\n const cache = this._cachedRenderRowsMap.get(renderRow.data)!;\n if (cache.has(renderRow.rowDef)) {\n cache.get(renderRow.rowDef)!.push(renderRow);\n } else {\n cache.set(renderRow.rowDef, [renderRow]);\n }\n renderRows.push(renderRow);\n }\n }\n\n return renderRows;\n }\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 private _getRenderRowsForData(\n data: T,\n dataIndex: number,\n cache?: WeakMap, RenderRow[]>,\n ): RenderRow[] {\n const rowDefs = this._getRowDefs(data, dataIndex);\n\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 } else {\n return {data, rowDef, dataIndex};\n }\n });\n }\n\n /** Update the map containing the content's column definitions. */\n private _cacheColumnDefs() {\n this._columnDefsByName.clear();\n\n const columnDefs = mergeArrayAndSet(\n this._getOwnDefs(this._contentColumnDefs),\n this._customColumnDefs,\n );\n columnDefs.forEach(columnDef => {\n if (\n this._columnDefsByName.has(columnDef.name) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)\n ) {\n throw getTableDuplicateColumnNameError(columnDef.name);\n }\n this._columnDefsByName.set(columnDef.name, columnDef);\n });\n }\n\n /** Update the list of all available row definitions that can be used. */\n private _cacheRowDefs() {\n this._headerRowDefs = mergeArrayAndSet(\n this._getOwnDefs(this._contentHeaderRowDefs),\n this._customHeaderRowDefs,\n );\n this._footerRowDefs = mergeArrayAndSet(\n this._getOwnDefs(this._contentFooterRowDefs),\n this._customFooterRowDefs,\n );\n this._rowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentRowDefs), this._customRowDefs);\n\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 (\n !this.multiTemplateDataRows &&\n defaultRowDefs.length > 1 &&\n (typeof ngDevMode === 'undefined' || ngDevMode)\n ) {\n throw getTableMultipleDefaultRowDefsError();\n }\n this._defaultRowDef = defaultRowDefs[0];\n }\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 private _renderUpdatedColumns(): boolean {\n const columnsDiffReducer = (acc: boolean, def: BaseRowDef) => acc || !!def.getColumnsDiff();\n\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\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\n const footerColumnsChanged = this._footerRowDefs.reduce(columnsDiffReducer, false);\n if (footerColumnsChanged) {\n this._forceRenderFooterRows();\n }\n\n return dataColumnsChanged || headerColumnsChanged || footerColumnsChanged;\n }\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 private _switchDataSource(dataSource: CdkTableDataSourceInput) {\n this._data = [];\n\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect(this);\n }\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\n if (!dataSource) {\n if (this._dataDiffer) {\n this._dataDiffer.diff([]);\n }\n this._rowOutlet.viewContainer.clear();\n }\n\n this._dataSource = dataSource;\n }\n\n /** Set up a subscription for the data provided by the data source. */\n private _observeRenderChanges() {\n // If no data source has been set, there is nothing to observe for changes.\n if (!this.dataSource) {\n return;\n }\n\n let dataStream: Observable | undefined;\n\n if (isDataSource(this.dataSource)) {\n dataStream = this.dataSource.connect(this);\n } else if (isObservable(this.dataSource)) {\n dataStream = this.dataSource;\n } else if (Array.isArray(this.dataSource)) {\n dataStream = observableOf(this.dataSource);\n }\n\n if (dataStream === undefined && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownDataSourceError();\n }\n\n this._renderChangeSubscription = dataStream!\n .pipe(takeUntil(this._onDestroy))\n .subscribe(data => {\n this._data = data || [];\n this.renderRows();\n });\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 private _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\n this._headerRowDefs.forEach((def, i) => this._renderRow(this._headerRowOutlet, def, i));\n this.updateStickyHeaderRowStyles();\n }\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 private _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\n this._footerRowDefs.forEach((def, i) => this._renderRow(this._footerRowOutlet, def, i));\n this.updateStickyFooterRowStyles();\n }\n\n /** Adds the sticky column styles for the rows according to the columns' stick states. */\n private _addStickyColumnStyles(rows: HTMLElement[], rowDef: BaseRowDef) {\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(\n rows,\n stickyStartStates,\n stickyEndStates,\n !this._fixedLayout || this._forceRecalculateCellWidths,\n );\n }\n\n /** Gets the list of rows that have been rendered in the row outlet. */\n _getRenderedRows(rowOutlet: RowOutlet): HTMLElement[] {\n const renderedRows: HTMLElement[] = [];\n\n for (let i = 0; i < rowOutlet.viewContainer.length; i++) {\n const viewRef = rowOutlet.viewContainer.get(i)! as EmbeddedViewRef;\n renderedRows.push(viewRef.rootNodes[0]);\n }\n\n return renderedRows;\n }\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: T, dataIndex: number): CdkRowDef[] {\n if (this._rowDefs.length == 1) {\n return [this._rowDefs[0]];\n }\n\n let rowDefs: CdkRowDef[] = [];\n if (this.multiTemplateDataRows) {\n rowDefs = this._rowDefs.filter(def => !def.when || def.when(dataIndex, data));\n } else {\n let rowDef =\n this._rowDefs.find(def => def.when && def.when(dataIndex, data)) || this._defaultRowDef;\n if (rowDef) {\n rowDefs.push(rowDef);\n }\n }\n\n if (!rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMissingMatchingRowDefError(data);\n }\n\n return rowDefs;\n }\n\n private _getEmbeddedViewArgs(\n renderRow: RenderRow,\n index: number,\n ): _ViewRepeaterItemInsertArgs> {\n const rowDef = renderRow.rowDef;\n const context: RowContext = {$implicit: renderRow.data};\n return {\n templateRef: rowDef.template,\n context,\n index,\n };\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 private _renderRow(\n outlet: RowOutlet,\n rowDef: BaseRowDef,\n index: number,\n context: RowContext = {},\n ): EmbeddedViewRef> {\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\n private _renderCellTemplateForItem(rowDef: BaseRowDef, context: RowContext) {\n for (let cellTemplate of this._getCellTemplates(rowDef)) {\n if (CdkCellOutlet.mostRecentCellOutlet) {\n CdkCellOutlet.mostRecentCellOutlet._viewContainer.createEmbeddedView(cellTemplate, context);\n }\n }\n\n this._changeDetectorRef.markForCheck();\n }\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 private _updateRowIndexContext() {\n const viewContainer = this._rowOutlet.viewContainer;\n for (let renderIndex = 0, count = viewContainer.length; renderIndex < count; renderIndex++) {\n const viewRef = viewContainer.get(renderIndex) as RowViewRef;\n const context = viewRef.context as RowContext;\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\n if (this.multiTemplateDataRows) {\n context.dataIndex = this._renderRows[renderIndex].dataIndex;\n context.renderIndex = renderIndex;\n } else {\n context.index = this._renderRows[renderIndex].dataIndex;\n }\n }\n }\n\n /** Gets the column definitions for the provided row def. */\n private _getCellTemplates(rowDef: BaseRowDef): TemplateRef[] {\n if (!rowDef || !rowDef.columns) {\n return [];\n }\n return Array.from(rowDef.columns, columnId => {\n const column = this._columnDefsByName.get(columnId);\n\n if (!column && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownColumnError(columnId);\n }\n\n return rowDef.extractCellTemplate(column!);\n });\n }\n\n /** Adds native table sections (e.g. tbody) and moves the row outlets into them. */\n private _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\n for (const section of sections) {\n const element = this._document.createElement(section.tag);\n element.setAttribute('role', 'rowgroup');\n\n for (const outlet of section.outlets) {\n element.appendChild(outlet.elementRef.nativeElement);\n }\n\n documentFragment.appendChild(element);\n }\n\n // Use a DocumentFragment so we don't hit the DOM on each iteration.\n this._elementRef.nativeElement.appendChild(documentFragment);\n }\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 private _forceRenderDataRows() {\n this._dataDiffer.diff([]);\n this._rowOutlet.viewContainer.clear();\n this.renderRows();\n }\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 private _checkStickyStates() {\n const stickyCheckReducer = (\n acc: boolean,\n d: CdkHeaderRowDef | CdkFooterRowDef | CdkColumnDef,\n ) => {\n return acc || d.hasStickyChanged();\n };\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\n if (this._headerRowDefs.reduce(stickyCheckReducer, false)) {\n this.updateStickyHeaderRowStyles();\n }\n\n if (this._footerRowDefs.reduce(stickyCheckReducer, false)) {\n this.updateStickyFooterRowStyles();\n }\n\n if (Array.from(this._columnDefsByName.values()).reduce(stickyCheckReducer, false)) {\n this._stickyColumnStylesNeedReset = true;\n this.updateStickyColumnStyles();\n }\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 private _setupStickyStyler() {\n const direction: Direction = this._dir ? this._dir.value : 'ltr';\n this._stickyStyler = new StickyStyler(\n this._isNativeHtmlTable,\n this.stickyCssClass,\n direction,\n this._coalescedStyleScheduler,\n this._platform.isBrowser,\n this.needsPositionStickyOnElement,\n this._stickyPositioningListener,\n );\n (this._dir ? this._dir.change : observableOf())\n .pipe(takeUntil(this._onDestroy))\n .subscribe(value => {\n this._stickyStyler.direction = value;\n this.updateStickyColumnStyles();\n });\n }\n\n /** Filters definitions that belong to this table from a QueryList. */\n private _getOwnDefs(items: QueryList): I[] {\n return items.filter(item => !item._table || item._table === this);\n }\n\n /** Creates or removes the no data row, depending on whether any data is being shown. */\n private _updateNoDataRow() {\n const noDataRow = this._customNoDataRow || this._noDataRow;\n\n if (!noDataRow) {\n return;\n }\n\n const shouldShow = this._rowOutlet.viewContainer.length === 0;\n\n if (shouldShow === this._isShowingNoDataRow) {\n return;\n }\n\n const container = this._noDataRowOutlet.viewContainer;\n\n if (shouldShow) {\n const view = container.createEmbeddedView(noDataRow.templateRef);\n const rootNode: HTMLElement | undefined = view.rootNodes[0];\n\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 } else {\n container.clear();\n }\n\n this._isShowingNoDataRow = shouldShow;\n\n this._changeDetectorRef.markForCheck();\n }\n}\n\n/** Utility function that gets a merged list of the entries in an array and values of a Set. */\nfunction mergeArrayAndSet(array: T[], set: Set): T[] {\n return array.concat(Array.from(set));\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\nimport {\n ChangeDetectionStrategy,\n Component,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CdkCellDef, CdkColumnDef, CdkHeaderCellDef} from './cell';\nimport {CdkTable} from './table';\nimport {\n getTableTextColumnMissingParentTableError,\n getTableTextColumnMissingNameError,\n} from './table-errors';\nimport {TEXT_COLUMN_OPTIONS, TextColumnOptions} from './tokens';\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 */\n@Component({\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})\nexport class CdkTextColumn implements OnDestroy, OnInit {\n /** Column name that should be used to reference this column. */\n @Input()\n get name(): string {\n return this._name;\n }\n set name(name: string) {\n this._name = name;\n\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 _name: string;\n\n /**\n * Text label that should be used for the column header. If this property is not\n * set, the header text will default to the column name with its first letter capitalized.\n */\n @Input() headerText: string;\n\n /**\n * Accessor function to retrieve the data rendered for each cell. If this\n * property is not set, the data cells will render the value found in the data's property matching\n * the column's name. For example, if the column is named `id`, then the rendered value will be\n * value defined by the data's `id` property.\n */\n @Input() dataAccessor: (data: T, name: string) => string;\n\n /** Alignment of the cell values. */\n @Input() justify: 'start' | 'end' | 'center' = 'start';\n\n /** @docs-private */\n @ViewChild(CdkColumnDef, {static: true}) columnDef: CdkColumnDef;\n\n /**\n * The column cell is provided to the column during `ngOnInit` with a static query.\n * Normally, this will be retrieved by the column using `ContentChild`, but that assumes the\n * column definition was provided in the same view as the table, which is not the case with this\n * component.\n * @docs-private\n */\n @ViewChild(CdkCellDef, {static: true}) cell: CdkCellDef;\n\n /**\n * The column headerCell is provided to the column during `ngOnInit` with a static query.\n * Normally, this will be retrieved by the column using `ContentChild`, but that assumes the\n * column definition was provided in the same view as the table, which is not the case with this\n * component.\n * @docs-private\n */\n @ViewChild(CdkHeaderCellDef, {static: true}) headerCell: CdkHeaderCellDef;\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 @Optional() private _table: CdkTable,\n @Optional() @Inject(TEXT_COLUMN_OPTIONS) private _options: TextColumnOptions,\n ) {\n this._options = _options || {};\n }\n\n ngOnInit() {\n this._syncColumnDefName();\n\n if (this.headerText === undefined) {\n this.headerText = this._createDefaultHeaderText();\n }\n\n if (!this.dataAccessor) {\n this.dataAccessor =\n this._options.defaultDataAccessor || ((data: T, name: string) => (data as any)[name]);\n }\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 } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getTableTextColumnMissingParentTableError();\n }\n }\n\n ngOnDestroy() {\n if (this._table) {\n this._table.removeColumnDef(this.columnDef);\n }\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\n if (!name && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableTextColumnMissingNameError();\n }\n\n if (this._options && this._options.defaultHeaderTextTransform) {\n return this._options.defaultHeaderTextTransform(name);\n }\n\n return name[0].toUpperCase() + name.slice(1);\n }\n\n /** Synchronizes the column definition name with the text column name. */\n private _syncColumnDefName() {\n if (this.columnDef) {\n this.columnDef.name = this.name;\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\nimport {NgModule} from '@angular/core';\nimport {\n HeaderRowOutlet,\n DataRowOutlet,\n CdkTable,\n CdkRecycleRows,\n FooterRowOutlet,\n NoDataRowOutlet,\n} from './table';\nimport {\n CdkCellOutlet,\n CdkFooterRow,\n CdkFooterRowDef,\n CdkHeaderRow,\n CdkHeaderRowDef,\n CdkRow,\n CdkRowDef,\n CdkNoDataRow,\n} from './row';\nimport {\n CdkColumnDef,\n CdkHeaderCellDef,\n CdkHeaderCell,\n CdkCell,\n CdkCellDef,\n CdkFooterCellDef,\n CdkFooterCell,\n} from './cell';\nimport {CdkTextColumn} from './text-column';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\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];\n\n@NgModule({\n exports: EXPORTED_DECLARATIONS,\n declarations: EXPORTED_DECLARATIONS,\n imports: [ScrollingModule],\n})\nexport class CdkTableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableOf","i2.CdkCellDef","i2.CdkHeaderCellDef","i2.CdkColumnDef","i2.CdkCell","i2.CdkHeaderCell"],"mappings":"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"}
\n {{headerText}}\n \n {{dataAccessor(data, name)}}\n