{"version":3,"file":"table.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/table/tokens.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/table/cell.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/table/row.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/table/sticky-styler.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/table/table-errors.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/table/sticky-position-listener.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/table/table.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/table/text-column.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/table/table-module.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.dev/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.dev/license\n */\n\nimport {\n ContentChild,\n Directive,\n ElementRef,\n Input,\n TemplateRef,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {CanStick} 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({\n selector: '[cdkCellDef]',\n})\nexport class CdkCellDef implements CellDef {\n /** @docs-private */\n template = inject>(TemplateRef);\n\n constructor(...args: unknown[]);\n constructor() {}\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({\n selector: '[cdkHeaderCellDef]',\n})\nexport class CdkHeaderCellDef implements CellDef {\n /** @docs-private */\n template = inject>(TemplateRef);\n\n constructor(...args: unknown[]);\n constructor() {}\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({\n selector: '[cdkFooterCellDef]',\n})\nexport class CdkFooterCellDef implements CellDef {\n /** @docs-private */\n template = inject>(TemplateRef);\n\n constructor(...args: unknown[]);\n constructor() {}\n}\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 providers: [{provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef}],\n})\nexport class CdkColumnDef implements CanStick {\n _table? = inject(CDK_TABLE, {optional: true});\n\n private _hasStickyChanged = false;\n\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 /** Whether the cell is sticky. */\n @Input({transform: booleanAttribute})\n get sticky(): boolean {\n return this._sticky;\n }\n set sticky(value: boolean) {\n if (value !== this._sticky) {\n this._sticky = value;\n this._hasStickyChanged = true;\n }\n }\n private _sticky = false;\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({transform: booleanAttribute})\n get stickyEnd(): boolean {\n return this._stickyEnd;\n }\n set stickyEnd(value: boolean) {\n if (value !== this._stickyEnd) {\n this._stickyEnd = value;\n this._hasStickyChanged = true;\n }\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(...args: unknown[]);\n constructor() {}\n\n /** Whether the sticky state has changed. */\n hasStickyChanged(): boolean {\n const hasStickyChanged = this._hasStickyChanged;\n this.resetStickyChanged();\n return hasStickyChanged;\n }\n\n /** Resets the sticky changed state. */\n resetStickyChanged(): void {\n this._hasStickyChanged = false;\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(...args: unknown[]);\n\n constructor() {\n super(inject(CdkColumnDef), inject(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(...args: unknown[]);\n\n constructor() {\n const columnDef = inject(CdkColumnDef);\n const elementRef = inject(ElementRef);\n\n super(columnDef, elementRef);\n\n const role = columnDef._table?._getCellRole();\n if (role) {\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(...args: unknown[]);\n\n constructor() {\n const columnDef = inject(CdkColumnDef);\n const elementRef = inject(ElementRef);\n\n super(columnDef, elementRef);\n\n const role = columnDef._table?._getCellRole();\n if (role) {\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.dev/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 Input,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {CanStick} 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 template = inject>(TemplateRef);\n protected _differs = inject(IterableDiffers);\n\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(...args: unknown[]);\n constructor() {}\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/**\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: [{name: 'columns', alias: 'cdkHeaderRowDef'}],\n})\nexport class CdkHeaderRowDef extends BaseRowDef implements CanStick, OnChanges {\n _table? = inject(CDK_TABLE, {optional: true});\n\n private _hasStickyChanged = false;\n\n /** Whether the row is sticky. */\n @Input({alias: 'cdkHeaderRowDefSticky', transform: booleanAttribute})\n get sticky(): boolean {\n return this._sticky;\n }\n set sticky(value: boolean) {\n if (value !== this._sticky) {\n this._sticky = value;\n this._hasStickyChanged = true;\n }\n }\n private _sticky = false;\n\n constructor(...args: unknown[]);\n\n constructor() {\n super(inject>(TemplateRef), inject(IterableDiffers));\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 /** Whether the sticky state has changed. */\n hasStickyChanged(): boolean {\n const hasStickyChanged = this._hasStickyChanged;\n this.resetStickyChanged();\n return hasStickyChanged;\n }\n\n /** Resets the sticky changed state. */\n resetStickyChanged(): void {\n this._hasStickyChanged = false;\n }\n}\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: [{name: 'columns', alias: 'cdkFooterRowDef'}],\n})\nexport class CdkFooterRowDef extends BaseRowDef implements CanStick, OnChanges {\n _table? = inject(CDK_TABLE, {optional: true});\n\n private _hasStickyChanged = false;\n\n /** Whether the row is sticky. */\n @Input({alias: 'cdkFooterRowDefSticky', transform: booleanAttribute})\n get sticky(): boolean {\n return this._sticky;\n }\n set sticky(value: boolean) {\n if (value !== this._sticky) {\n this._sticky = value;\n this._hasStickyChanged = true;\n }\n }\n private _sticky = false;\n\n constructor(...args: unknown[]);\n\n constructor() {\n super(inject>(TemplateRef), inject(IterableDiffers));\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 /** Whether the sticky state has changed. */\n hasStickyChanged(): boolean {\n const hasStickyChanged = this._hasStickyChanged;\n this.resetStickyChanged();\n return hasStickyChanged;\n }\n\n /** Resets the sticky changed state. */\n resetStickyChanged(): void {\n this._hasStickyChanged = false;\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: [\n {name: 'columns', alias: 'cdkRowDefColumns'},\n {name: 'when', alias: 'cdkRowDefWhen'},\n ],\n})\nexport class CdkRowDef extends BaseRowDef {\n _table? = inject(CDK_TABLE, {optional: true});\n\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 constructor(...args: unknown[]);\n\n constructor() {\n // TODO(andrewseguin): Add an input for providing a switch function to determine\n // if this template should be used.\n super(inject>(TemplateRef), inject(IterableDiffers));\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({\n selector: '[cdkCellOutlet]',\n})\nexport class CdkCellOutlet implements OnDestroy {\n _viewContainer = inject(ViewContainerRef);\n\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(...args: unknown[]);\n\n constructor() {\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 imports: [CdkCellOutlet],\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 imports: [CdkCellOutlet],\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 imports: [CdkCellOutlet],\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 templateRef = inject>(TemplateRef);\n\n _contentClassNames = ['cdk-no-data-row', 'cdk-row'];\n _cellClassNames = ['cdk-cell', 'cdk-no-data-cell'];\n _cellSelector = 'td, cdk-cell, [cdk-cell], .cdk-cell';\n\n constructor(...args: unknown[]);\n constructor() {}\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.dev/license\n */\n\n/**\n * Directions that can be used when setting sticky positioning.\n * @docs-private\n */\nimport {afterNextRender, Injector} from '@angular/core';\nimport {Direction} from '../bidi';\nimport {StickyPositioningListener} from './sticky-position-listener';\n\nexport type StickyDirection = 'top' | 'bottom' | 'left' | 'right';\n\ninterface UpdateStickyColumnsParams {\n rows: HTMLElement[];\n stickyStartStates: boolean[];\n stickyEndStates: boolean[];\n}\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 _elemSizeCache = new WeakMap();\n private _resizeObserver = globalThis?.ResizeObserver\n ? new globalThis.ResizeObserver(entries => this._updateCachedSizes(entries))\n : null;\n private _updatedStickyColumnsParamsToReplay: UpdateStickyColumnsParams[] = [];\n private _stickyColumnsReplayTimeout: ReturnType | null = null;\n private _cachedCellWidths: number[] = [];\n private readonly _borderCellCss: Readonly<{[d in StickyDirection]: string}>;\n private _destroyed = false;\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 * @param _tableInjector The table's Injector.\n */\n constructor(\n private _isNativeHtmlTable: boolean,\n private _stickCellCss: string,\n private _isBrowser = true,\n private readonly _needsPositionStickyOnElement = true,\n public direction: Direction,\n private readonly _positionListener: StickyPositioningListener | null,\n private readonly _tableInjector: Injector,\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 if (stickyDirections.includes('left') || stickyDirections.includes('right')) {\n this._removeFromStickyColumnReplayQueue(rows);\n }\n\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, ...(Array.from(row.children) as HTMLElement[]));\n }\n\n // Coalesce with sticky row/column updates (and potentially other changes like column resize).\n afterNextRender(\n {\n write: () => {\n for (const element of elementsToClear) {\n this._removeStickyStyle(element, stickyDirections);\n }\n },\n },\n {\n injector: this._tableInjector,\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 * @param replay Whether to enqueue this call for replay after a ResizeObserver update.\n */\n updateStickyColumns(\n rows: HTMLElement[],\n stickyStartStates: boolean[],\n stickyEndStates: boolean[],\n recalculateCellWidths = true,\n replay = true,\n ) {\n // Don't cache any state if none of the columns are sticky.\n if (\n !rows.length ||\n !this._isBrowser ||\n !(stickyStartStates.some(state => state) || stickyEndStates.some(state => state))\n ) {\n this._positionListener?.stickyColumnsUpdated({sizes: []});\n this._positionListener?.stickyEndColumnsUpdated({sizes: []});\n return;\n }\n\n // Coalesce with sticky row updates (and potentially other changes like column resize).\n const firstRow = rows[0];\n const numCells = firstRow.children.length;\n\n const isRtl = this.direction === 'rtl';\n const start = isRtl ? 'right' : 'left';\n const end = isRtl ? 'left' : 'right';\n\n const lastStickyStart = stickyStartStates.lastIndexOf(true);\n const firstStickyEnd = stickyEndStates.indexOf(true);\n\n let cellWidths: number[];\n let startPositions: number[];\n let endPositions: number[];\n\n if (replay) {\n this._updateStickyColumnReplayQueue({\n rows: [...rows],\n stickyStartStates: [...stickyStartStates],\n stickyEndStates: [...stickyEndStates],\n });\n }\n\n afterNextRender(\n {\n earlyRead: () => {\n cellWidths = this._getCellWidths(firstRow, recalculateCellWidths);\n\n startPositions = this._getStickyStartColumnPositions(cellWidths, stickyStartStates);\n endPositions = this._getStickyEndColumnPositions(cellWidths, stickyEndStates);\n },\n write: () => {\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 && cellWidths.some(w => !!w)) {\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) =>\n stickyEndStates[index + firstStickyEnd] ? width : null,\n )\n .reverse(),\n });\n }\n },\n },\n {\n injector: this._tableInjector,\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\n // Coalesce with other sticky row updates (top/bottom), sticky columns updates\n // (and potentially other changes like column resize).\n afterNextRender(\n {\n earlyRead: () => {\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 = this._retrieveElementSize(row).height;\n stickyOffset += height;\n stickyCellHeights[rowIndex] = height;\n }\n },\n write: () => {\n const borderedRowIndex = states.lastIndexOf(true);\n\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 injector: this._tableInjector,\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 // Coalesce with other sticky updates (and potentially other changes like column resize).\n afterNextRender(\n {\n write: () => {\n const tfoot = tableElement.querySelector('tfoot')!;\n\n if (tfoot) {\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 injector: this._tableInjector,\n },\n );\n }\n\n /** Triggered by the table's OnDestroy hook. */\n destroy() {\n if (this._stickyColumnsReplayTimeout) {\n clearTimeout(this._stickyColumnsReplayTimeout);\n }\n\n this._resizeObserver?.disconnect();\n this._destroyed = true;\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 if (!element.classList.contains(this._stickCellCss)) {\n return;\n }\n\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 const cell = firstRowCells[i] as HTMLElement;\n cellWidths.push(this._retrieveElementSize(cell).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 * Retreives the most recently observed size of the specified element from the cache, or\n * meaures it directly if not yet cached.\n */\n private _retrieveElementSize(element: HTMLElement): {width: number; height: number} {\n const cachedSize = this._elemSizeCache.get(element);\n if (cachedSize) {\n return cachedSize;\n }\n\n const clientRect = element.getBoundingClientRect();\n const size = {width: clientRect.width, height: clientRect.height};\n\n if (!this._resizeObserver) {\n return size;\n }\n\n this._elemSizeCache.set(element, size);\n this._resizeObserver.observe(element, {box: 'border-box'});\n return size;\n }\n\n /**\n * Conditionally enqueue the requested sticky update and clear previously queued updates\n * for the same rows.\n */\n private _updateStickyColumnReplayQueue(params: UpdateStickyColumnsParams) {\n this._removeFromStickyColumnReplayQueue(params.rows);\n\n // No need to replay if a flush is pending.\n if (!this._stickyColumnsReplayTimeout) {\n this._updatedStickyColumnsParamsToReplay.push(params);\n }\n }\n\n /** Remove updates for the specified rows from the queue. */\n private _removeFromStickyColumnReplayQueue(rows: HTMLElement[]) {\n const rowsSet = new Set(rows);\n for (const update of this._updatedStickyColumnsParamsToReplay) {\n update.rows = update.rows.filter(row => !rowsSet.has(row));\n }\n this._updatedStickyColumnsParamsToReplay = this._updatedStickyColumnsParamsToReplay.filter(\n update => !!update.rows.length,\n );\n }\n\n /** Update _elemSizeCache with the observed sizes. */\n private _updateCachedSizes(entries: ResizeObserverEntry[]) {\n let needsColumnUpdate = false;\n for (const entry of entries) {\n const newEntry = entry.borderBoxSize?.length\n ? {\n width: entry.borderBoxSize[0].inlineSize,\n height: entry.borderBoxSize[0].blockSize,\n }\n : {\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n };\n\n if (\n newEntry.width !== this._elemSizeCache.get(entry.target as HTMLElement)?.width &&\n isCell(entry.target)\n ) {\n needsColumnUpdate = true;\n }\n\n this._elemSizeCache.set(entry.target as HTMLElement, newEntry);\n }\n\n if (needsColumnUpdate && this._updatedStickyColumnsParamsToReplay.length) {\n if (this._stickyColumnsReplayTimeout) {\n clearTimeout(this._stickyColumnsReplayTimeout);\n }\n\n this._stickyColumnsReplayTimeout = setTimeout(() => {\n if (this._destroyed) {\n return;\n }\n\n for (const update of this._updatedStickyColumnsParamsToReplay) {\n this.updateStickyColumns(\n update.rows,\n update.stickyStartStates,\n update.stickyEndStates,\n true,\n false,\n );\n }\n this._updatedStickyColumnsParamsToReplay = [];\n this._stickyColumnsReplayTimeout = null;\n }, 0);\n }\n }\n}\n\nfunction isCell(element: Element) {\n return ['cdk-cell', 'cdk-header-cell', 'cdk-footer-cell'].some(klass =>\n element.classList.contains(klass),\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.dev/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(\n `There can only be one default row without a when predicate function. ` +\n 'Or set `multiTemplateDataRows`.',\n );\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.dev/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(\n 'STICKY_POSITIONING_LISTENER',\n);\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.dev/license\n */\n\nimport {Direction, Directionality} from '../bidi';\nimport {\n CollectionViewer,\n DataSource,\n _DisposeViewRepeaterStrategy,\n _RecycleViewRepeaterStrategy,\n isDataSource,\n _ViewRepeater,\n _ViewRepeaterItemChange,\n _ViewRepeaterItemInsertArgs,\n _ViewRepeaterOperation,\n ListRange,\n} from '../collections';\nimport {Platform} from '../platform';\nimport {\n CDK_VIRTUAL_SCROLL_VIEWPORT,\n type CdkVirtualScrollViewport,\n ViewportRuler,\n} from '../scrolling';\n\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n Input,\n IterableChangeRecord,\n IterableDiffer,\n IterableDiffers,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n TemplateRef,\n TrackByFunction,\n ViewContainerRef,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n Injector,\n HostAttributeToken,\n DOCUMENT,\n} from '@angular/core';\nimport {\n animationFrameScheduler,\n asapScheduler,\n BehaviorSubject,\n combineLatest,\n isObservable,\n Observable,\n of as observableOf,\n Subject,\n Subscription,\n} from 'rxjs';\nimport {auditTime, takeUntil} from 'rxjs/operators';\nimport {CdkColumnDef} from './cell';\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 {\n STICKY_POSITIONING_LISTENER,\n StickyPositioningListener,\n StickyUpdate,\n} 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 * @deprecated This directive is a no-op and will be removed.\n * @breaking-change 23.0.0\n */\n@Directive({selector: 'cdk-table[recycleRows], table[cdk-table][recycleRows]'})\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({\n selector: '[rowOutlet]',\n})\nexport class DataRowOutlet implements RowOutlet {\n viewContainer = inject(ViewContainerRef);\n elementRef = inject(ElementRef);\n\n constructor(...args: unknown[]);\n\n constructor() {\n const table = inject>(CDK_TABLE);\n table._rowOutlet = this;\n table._outletAssigned();\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({\n selector: '[headerRowOutlet]',\n})\nexport class HeaderRowOutlet implements RowOutlet {\n viewContainer = inject(ViewContainerRef);\n elementRef = inject(ElementRef);\n\n constructor(...args: unknown[]);\n\n constructor() {\n const table = inject>(CDK_TABLE);\n table._headerRowOutlet = this;\n table._outletAssigned();\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({\n selector: '[footerRowOutlet]',\n})\nexport class FooterRowOutlet implements RowOutlet {\n viewContainer = inject(ViewContainerRef);\n elementRef = inject(ElementRef);\n\n constructor(...args: unknown[]);\n\n constructor() {\n const table = inject>(CDK_TABLE);\n table._footerRowOutlet = this;\n table._outletAssigned();\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({\n selector: '[noDataRowOutlet]',\n})\nexport class NoDataRowOutlet implements RowOutlet {\n viewContainer = inject(ViewContainerRef);\n elementRef = inject(ElementRef);\n\n constructor(...args: unknown[]);\n\n constructor() {\n const table = inject>(CDK_TABLE);\n table._noDataRowOutlet = this;\n table._outletAssigned();\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, 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: `\n \n \n\n \n @if (_isServer) {\n \n }\n\n @if (_isNativeHtmlTable) {\n \n \n \n \n \n \n \n \n \n \n } @else {\n \n \n \n \n }\n `,\n styleUrl: 'table.css',\n host: {\n 'class': 'cdk-table',\n '[class.cdk-table-fixed-layout]': 'fixedLayout',\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 // Prevent nested tables from seeing this table's StickyPositioningListener.\n {provide: STICKY_POSITIONING_LISTENER, useValue: null},\n ],\n imports: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet],\n})\nexport class CdkTable\n implements\n AfterContentInit,\n AfterContentChecked,\n CollectionViewer,\n OnDestroy,\n OnInit,\n StickyPositioningListener\n{\n protected readonly _differs = inject(IterableDiffers);\n protected readonly _changeDetectorRef = inject(ChangeDetectorRef);\n protected readonly _elementRef = inject(ElementRef);\n protected readonly _dir = inject(Directionality, {optional: true});\n private _platform = inject(Platform);\n protected _viewRepeater!: _ViewRepeater, RowContext>;\n private readonly _viewportRuler = inject(ViewportRuler);\n private _injector = inject(Injector);\n private _virtualScrollViewport = inject(CDK_VIRTUAL_SCROLL_VIEWPORT, {\n optional: true,\n // Virtual scrolling can only be enabled by a viewport in\n // the same host, don't try to resolve in parent components.\n host: true,\n });\n private _positionListener =\n inject(STICKY_POSITIONING_LISTENER, {optional: true}) ||\n inject(STICKY_POSITIONING_LISTENER, {optional: true, skipSelf: true});\n\n private _document = inject(DOCUMENT);\n\n /** Latest data provided by the data source. */\n protected _data: readonly T[] | undefined;\n\n /** Latest range of data rendered. */\n protected _renderedRange?: ListRange;\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 = 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 = 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 = 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 * `_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 component is being rendered on the server. */\n protected _isServer: boolean;\n\n /** Whether the no data row is currently showing anything. */\n private _isShowingNoDataRow = false;\n\n /** Whether the table has rendered out all the outlets for the first time. */\n private _hasAllOutlets = false;\n\n /** Whether the table is done initializing. */\n private _hasInitialized = false;\n\n /** Emits when the header rows sticky state changes. */\n private readonly _headerRowStickyUpdates = new Subject();\n\n /** Emits when the footer rows sticky state changes. */\n private readonly _footerRowStickyUpdates = new Subject();\n\n /**\n * Whether to explicitly disable virtual scrolling even if there is a virtual scroll viewport\n * parent. This can't be changed externally, whereas internally it is turned into an input that\n * we use to opt out existing apps that were implementing virtual scroll before we added support\n * for it.\n */\n private readonly _disableVirtualScrolling = false;\n\n /** Aria role to apply to the table's cells based on the table's own role. */\n _getCellRole(): string | null {\n // Perform this lazily in case the table's role was updated by a directive after construction.\n if (this._cellRoleInternal === undefined) {\n // Note that we set `role=\"cell\"` even on native `td` elements,\n // because some browsers seem to require it. See #29784.\n const tableRole = this._elementRef.nativeElement.getAttribute('role');\n return tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell';\n }\n\n return this._cellRoleInternal;\n }\n private _cellRoleInternal: string | null | undefined = undefined;\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 this._changeDetectorRef.markForCheck();\n }\n }\n private _dataSource!: CdkTableDataSourceInput;\n /** Emits when the data source changes. */\n readonly _dataSourceChanges = new Subject>();\n /** Observable that emits the data source's complete data set. */\n readonly _dataStream = new Subject();\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({transform: booleanAttribute})\n get multiTemplateDataRows(): boolean {\n return this._multiTemplateDataRows;\n }\n set multiTemplateDataRows(value: boolean) {\n this._multiTemplateDataRows = value;\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({transform: booleanAttribute})\n get fixedLayout(): boolean {\n // Require a fixed layout when virtual scrolling is enabled, otherwise\n // the element the header can jump around as the user is scrolling.\n return this._virtualScrollEnabled() ? true : this._fixedLayout;\n }\n set fixedLayout(value: boolean) {\n this._fixedLayout = value;\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 * Whether rows should be recycled which reduces latency, but is not compatible with tables\n * that animate rows. Note that this input cannot change after the table is initialized.\n */\n @Input({transform: booleanAttribute}) recycleRows = 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 /**\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: BehaviorSubject = new BehaviorSubject({\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 _rowOutlet!: DataRowOutlet;\n _headerRowOutlet!: HeaderRowOutlet;\n _footerRowOutlet!: FooterRowOutlet;\n _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(...args: unknown[]);\n\n constructor() {\n const role = inject(new HostAttributeToken('role'), {optional: true});\n\n if (!role) {\n this._elementRef.nativeElement.setAttribute('role', 'table');\n }\n\n this._isServer = !this._platform.isBrowser;\n this._isNativeHtmlTable = this._elementRef.nativeElement.nodeName === 'TABLE';\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\n ngOnInit() {\n this._setupStickyStyler();\n\n this._viewportRuler\n .change()\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => {\n this._forceRecalculateCellWidths = true;\n });\n }\n\n ngAfterContentInit() {\n this._viewRepeater =\n this.recycleRows || this._virtualScrollEnabled()\n ? new _RecycleViewRepeaterStrategy()\n : new _DisposeViewRepeaterStrategy();\n\n if (this._virtualScrollEnabled()) {\n this._setupVirtualScrolling(this._virtualScrollViewport!);\n }\n\n this._hasInitialized = true;\n }\n\n ngAfterContentChecked() {\n // Only start re-rendering in `ngAfterContentChecked` after the first render.\n if (this._canRender()) {\n this._render();\n }\n }\n\n ngOnDestroy() {\n this._stickyStyler?.destroy();\n\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: ViewContainerRef | Set | Map | undefined) => {\n def?.clear();\n });\n\n this._headerRowDefs = [];\n this._footerRowDefs = [];\n this._defaultRowDef = null;\n this._headerRowStickyUpdates.complete();\n this._footerRowStickyUpdates.complete();\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 this.contentChanged.next();\n this.updateStickyColumnStyles();\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\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 if (this._isNativeHtmlTable) {\n const thead = closestTableSection(this._headerRowOutlet, 'thead');\n if (thead) {\n thead.style.display = headerRows.length ? '' : 'none';\n }\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\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 if (this._isNativeHtmlTable) {\n const tfoot = closestTableSection(this._footerRowOutlet, 'tfoot');\n if (tfoot) {\n tfoot.style.display = footerRows.length ? '' : 'none';\n }\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 * Implemented as a part of `StickyPositioningListener`.\n * @docs-private\n */\n stickyColumnsUpdated(update: StickyUpdate): void {\n this._positionListener?.stickyColumnsUpdated(update);\n }\n\n /**\n * Implemented as a part of `StickyPositioningListener`.\n * @docs-private\n */\n stickyEndColumnsUpdated(update: StickyUpdate): void {\n this._positionListener?.stickyEndColumnsUpdated(update);\n }\n\n /**\n * Implemented as a part of `StickyPositioningListener`.\n * @docs-private\n */\n stickyHeaderRowsUpdated(update: StickyUpdate): void {\n this._headerRowStickyUpdates.next(update);\n this._positionListener?.stickyHeaderRowsUpdated(update);\n }\n\n /**\n * Implemented as a part of `StickyPositioningListener`.\n * @docs-private\n */\n stickyFooterRowsUpdated(update: StickyUpdate): void {\n this._footerRowStickyUpdates.next(update);\n this._positionListener?.stickyFooterRowsUpdated(update);\n }\n\n /** Invoked whenever an outlet is created and has been assigned to the table. */\n _outletAssigned(): void {\n // Trigger the first render once all outlets have been assigned. We do it this way, as\n // opposed to waiting for the next `ngAfterContentChecked`, because we don't know when\n // the next change detection will happen.\n // Also we can't use queries to resolve the outlets, because they're wrapped in a\n // conditional, so we have to rely on them being assigned via DI.\n if (\n !this._hasAllOutlets &&\n this._rowOutlet &&\n this._headerRowOutlet &&\n this._footerRowOutlet &&\n this._noDataRowOutlet\n ) {\n this._hasAllOutlets = true;\n\n // In some setups this may fire before `ngAfterContentInit`\n // so we need a check here. See #28538.\n if (this._canRender()) {\n this._render();\n }\n }\n }\n\n /** Whether the table has all the information to start rendering. */\n private _canRender(): boolean {\n return this._hasAllOutlets && this._hasInitialized;\n }\n\n /** Renders the table if its state has changed. */\n private _render(): void {\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 /**\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 // Note: the `_data` is typed as an array, but some internal apps end up passing diffrent types.\n if (!Array.isArray(this._data) || !this._renderedRange) {\n return [];\n }\n\n const renderRows: RenderRow[] = [];\n const end = Math.min(this._data.length, this._renderedRange.end);\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 = this._renderedRange.start; i < end; i++) {\n const 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) => {\n // The differ should be run for every column, even if `acc` is already\n // true (see #29922)\n const diff = !!def.getColumnsDiff();\n return acc || diff;\n };\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 if (this._rowOutlet) {\n this._rowOutlet.viewContainer.clear();\n }\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 = combineLatest([dataStream!, this.viewChange])\n .pipe(takeUntil(this._onDestroy))\n .subscribe(([data, range]) => {\n this._data = data || [];\n this._renderedRange = range;\n this._dataStream.next(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 /**\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 const injector = this._injector;\n\n this._stickyStyler = new StickyStyler(\n this._isNativeHtmlTable,\n this.stickyCssClass,\n this._platform.isBrowser,\n this.needsPositionStickyOnElement,\n direction,\n this,\n injector,\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 private _setupVirtualScrolling(viewport: CdkVirtualScrollViewport) {\n const virtualScrollScheduler =\n typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n\n // Render nothing since the virtual scroll viewport will take over.\n this.viewChange.next({start: 0, end: 0});\n\n // Forward the rendered range computed by the virtual scroll viewport to the table.\n viewport.renderedRangeStream\n // We need the scheduler here, because the virtual scrolling module uses an identical\n // one for scroll listeners. Without it the two go out of sync and the list starts\n // jumping back to the beginning whenever it needs to re-render.\n .pipe(auditTime(0, virtualScrollScheduler), takeUntil(this._onDestroy))\n .subscribe(this.viewChange);\n\n viewport.attach({\n dataStream: this._dataStream,\n measureRangeSize: (range, orientation) => this._measureRangeSize(range, orientation),\n });\n\n // The `StyickyStyler` sticks elements by applying a `top` or `bottom` position offset to\n // them. However, the virtual scroll viewport applies a `translateY` offset to a container\n // div that encapsulates the table. The translation causes the rows to also be offset by the\n // distance from the top of the scroll viewport in addition to their `top` offset. This logic\n // negates the translation to move the rows to their correct positions.\n combineLatest([viewport.renderedContentOffset, this._headerRowStickyUpdates])\n .pipe(takeUntil(this._onDestroy))\n .subscribe(([offsetFromTop, update]) => {\n if (!update.sizes || !update.offsets || !update.elements) {\n return;\n }\n\n for (let i = 0; i < update.elements.length; i++) {\n const cells = update.elements[i];\n\n if (cells) {\n const current = update.offsets[i]!;\n const offset =\n offsetFromTop !== 0 ? Math.max(offsetFromTop - current, current) : -current;\n\n for (const cell of cells) {\n cell.style.top = `${-offset}px`;\n }\n }\n }\n });\n\n combineLatest([viewport.renderedContentOffset, this._footerRowStickyUpdates])\n .pipe(takeUntil(this._onDestroy))\n .subscribe(([offsetFromTop, update]) => {\n if (!update.sizes || !update.offsets || !update.elements) {\n return;\n }\n\n for (let i = 0; i < update.elements.length; i++) {\n const cells = update.elements[i];\n\n if (cells) {\n for (const cell of cells) {\n cell.style.bottom = `${offsetFromTop + update.offsets[i]!}px`;\n }\n }\n }\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._contentClassNames);\n\n const cells = rootNode.querySelectorAll(noDataRow._cellSelector);\n\n for (let i = 0; i < cells.length; i++) {\n cells[i].classList.add(...noDataRow._cellClassNames);\n }\n }\n } else {\n container.clear();\n }\n\n this._isShowingNoDataRow = shouldShow;\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Measures the size of the rendered range in the table.\n * This is used for virtual scrolling when auto-sizing is enabled.\n */\n private _measureRangeSize(range: ListRange, orientation: 'horizontal' | 'vertical'): number {\n if (range.start >= range.end || orientation !== 'vertical') {\n return 0;\n }\n\n const renderedRange = this.viewChange.value;\n const viewContainerRef = this._rowOutlet.viewContainer;\n\n if (\n (range.start < renderedRange.start || range.end > renderedRange.end) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)\n ) {\n throw Error(`Error: attempted to measure an item that isn't rendered.`);\n }\n\n const renderedStartIndex = range.start - renderedRange.start;\n const rangeLen = range.end - range.start;\n let firstNode: HTMLElement | undefined;\n let lastNode: HTMLElement | undefined;\n\n for (let i = 0; i < rangeLen; i++) {\n const view = viewContainerRef.get(i + renderedStartIndex) as EmbeddedViewRef | null;\n if (view && view.rootNodes.length) {\n firstNode = lastNode = view.rootNodes[0];\n break;\n }\n }\n\n for (let i = rangeLen - 1; i > -1; i--) {\n const view = viewContainerRef.get(i + renderedStartIndex) as EmbeddedViewRef | null;\n if (view && view.rootNodes.length) {\n lastNode = view.rootNodes[view.rootNodes.length - 1];\n break;\n }\n }\n\n const startRect = firstNode?.getBoundingClientRect?.();\n const endRect = lastNode?.getBoundingClientRect?.();\n return startRect && endRect ? endRect.bottom - startRect.top : 0;\n }\n\n private _virtualScrollEnabled(): boolean {\n return !this._disableVirtualScrolling && this._virtualScrollViewport != null;\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/**\n * Finds the closest table section to an outlet. We can't use `HTMLElement.closest` for this,\n * because the node representing the outlet is a comment.\n */\nfunction closestTableSection(outlet: RowOutlet, section: string): HTMLElement | null {\n const uppercaseSection = section.toUpperCase();\n let current: Node | null = outlet.viewContainer.element.nativeElement;\n\n while (current) {\n // 1 is an element node.\n const nodeName = current.nodeType === 1 ? (current as HTMLElement).nodeName : null;\n if (nodeName === uppercaseSection) {\n return current as HTMLElement;\n } else if (nodeName === 'TABLE') {\n // Stop traversing past the `table` node.\n break;\n }\n current = current.parentNode;\n }\n\n return null;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {CdkCellDef, CdkColumnDef, CdkHeaderCellDef, CdkHeaderCell, CdkCell} 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 imports: [CdkColumnDef, CdkHeaderCellDef, CdkHeaderCell, CdkCellDef, CdkCell],\n})\nexport class CdkTextColumn implements OnDestroy, OnInit {\n private _table = inject>(CdkTable, {optional: true});\n private _options = inject>(TEXT_COLUMN_OPTIONS, {optional: true})!;\n\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(...args: unknown[]);\n\n constructor() {\n this._options = this._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.dev/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 '../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 imports: [ScrollingModule, ...EXPORTED_DECLARATIONS],\n})\nexport class CdkTableModule {}\n"],"names":["CDK_TABLE","InjectionToken","TEXT_COLUMN_OPTIONS","CdkCellDef","template","inject","TemplateRef","constructor","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","ngImport","decorators","args","CdkHeaderCellDef","CdkFooterCellDef","CdkColumnDef","_table","optional","_hasStickyChanged","name","_name","_setNameInput","sticky","_sticky","value","stickyEnd","_stickyEnd","cell","headerCell","footerCell","cssClassFriendlyName","_columnCssClassName","hasStickyChanged","resetStickyChanged","_updateColumnCssClassName","replace","inputs","booleanAttribute","provide","useExisting","descendants","propertyName","first","predicate","providers","Input","transform","ContentChild","BaseCdkCell","columnDef","elementRef","nativeElement","classList","add","CdkHeaderCell","ElementRef","host","attributes","classAttribute","usesInheritance","CdkFooterCell","role","_getCellRole","setAttribute","CdkCell","CDK_ROW_TEMPLATE","BaseRowDef","_differs","IterableDiffers","columns","_columnsDiffer","ngOnChanges","changes","currentValue","find","create","diff","getColumnsDiff","extractCellTemplate","column","CdkHeaderRowDef","CdkFooterRowDef","usesOnChanges","ɵdir","ɵɵngDeclareDirective","minVersion","version","type","alias","CdkRowDef","when","CdkCellOutlet","_viewContainer","ViewContainerRef","cells","context","mostRecentCellOutlet","ngOnDestroy","CdkHeaderRow","Component","ɵcmp","ɵɵngDeclareComponent","changeDetection","ChangeDetectionStrategy","Default","encapsulation","ViewEncapsulation","None","imports","CdkFooterRow","CdkRow","CdkNoDataRow","templateRef","_contentClassNames","_cellClassNames","_cellSelector","STICKY_DIRECTIONS","StickyStyler","_isNativeHtmlTable","_stickCellCss","_isBrowser","_needsPositionStickyOnElement","direction","_positionListener","_tableInjector","_elemSizeCache","WeakMap","_resizeObserver","globalThis","ResizeObserver","entries","_updateCachedSizes","_updatedStickyColumnsParamsToReplay","_stickyColumnsReplayTimeout","_cachedCellWidths","_borderCellCss","_destroyed","clearStickyPositioning","rows","stickyDirections","includes","_removeFromStickyColumnReplayQueue","elementsToClear","row","nodeType","ELEMENT_NODE","push","Array","from","children","afterNextRender","write","element","_removeStickyStyle","injector","updateStickyColumns","stickyStartStates","stickyEndStates","recalculateCellWidths","replay","length","some","state","stickyColumnsUpdated","sizes","stickyEndColumnsUpdated","firstRow","numCells","isRtl","start","end","lastStickyStart","lastIndexOf","firstStickyEnd","indexOf","cellWidths","startPositions","endPositions","_updateStickyColumnReplayQueue","earlyRead","_getCellWidths","_getStickyStartColumnPositions","_getStickyEndColumnPositions","i","_addStickyStyle","w","slice","map","width","index","reverse","stickRows","rowsToStick","stickyStates","position","states","stickyOffsets","stickyCellHeights","elementsToStick","rowIndex","stickyOffset","height","_retrieveElementSize","borderedRowIndex","offset","isBorderedRowIndex","stickyHeaderRowsUpdated","offsets","elements","stickyFooterRowsUpdated","updateStickyFooterContainer","tableElement","tfoot","querySelector","destroy","clearTimeout","disconnect","contains","dir","style","remove","hasDirection","zIndex","_getCalculatedZIndex","dirValue","isBorderElement","cssText","zIndexIncrements","top","bottom","left","right","firstRowCells","widths","positions","nextPosition","cachedSize","get","clientRect","getBoundingClientRect","size","set","observe","box","params","rowsSet","Set","update","filter","has","needsColumnUpdate","entry","newEntry","borderBoxSize","inlineSize","blockSize","contentRect","isCell","setTimeout","klass","getTableUnknownColumnError","id","Error","getTableDuplicateColumnNameError","getTableMultipleDefaultRowDefsError","getTableMissingMatchingRowDefError","data","JSON","stringify","getTableMissingRowDefsError","getTableUnknownDataSourceError","getTableTextColumnMissingParentTableError","getTableTextColumnMissingNameError","STICKY_POSITIONING_LISTENER","CdkRecycleRows","DataRowOutlet","viewContainer","table","_rowOutlet","_outletAssigned","HeaderRowOutlet","_headerRowOutlet","FooterRowOutlet","_footerRowOutlet","NoDataRowOutlet","_noDataRowOutlet","CdkTable","_changeDetectorRef","ChangeDetectorRef","_elementRef","_dir","Directionality","_platform","Platform","_viewRepeater","_viewportRuler","ViewportRuler","_injector","Injector","_virtualScrollViewport","CDK_VIRTUAL_SCROLL_VIEWPORT","skipSelf","_document","DOCUMENT","_data","_renderedRange","_onDestroy","Subject","_renderRows","_renderChangeSubscription","_columnDefsByName","Map","_rowDefs","_headerRowDefs","_footerRowDefs","_dataDiffer","_defaultRowDef","_customColumnDefs","_customRowDefs","_customHeaderRowDefs","_customFooterRowDefs","_customNoDataRow","_headerRowDefChanged","_footerRowDefChanged","_stickyColumnStylesNeedReset","_forceRecalculateCellWidths","_cachedRenderRowsMap","_stickyStyler","stickyCssClass","needsPositionStickyOnElement","_isServer","_isShowingNoDataRow","_hasAllOutlets","_hasInitialized","_headerRowStickyUpdates","_footerRowStickyUpdates","_disableVirtualScrolling","_cellRoleInternal","undefined","tableRole","getAttribute","trackBy","_trackByFn","fn","ngDevMode","console","warn","dataSource","_dataSource","_switchDataSource","markForCheck","_dataSourceChanges","_dataStream","multiTemplateDataRows","_multiTemplateDataRows","_forceRenderDataRows","updateStickyColumnStyles","fixedLayout","_virtualScrollEnabled","_fixedLayout","recycleRows","contentChanged","EventEmitter","viewChange","BehaviorSubject","Number","MAX_VALUE","_contentColumnDefs","_contentRowDefs","_contentHeaderRowDefs","_contentFooterRowDefs","_noDataRow","HostAttributeToken","isBrowser","nodeName","_i","dataRow","dataIndex","ngOnInit","_setupStickyStyler","change","pipe","takeUntil","subscribe","ngAfterContentInit","_RecycleViewRepeaterStrategy","_DisposeViewRepeaterStrategy","_setupVirtualScrolling","ngAfterContentChecked","_canRender","_render","forEach","def","clear","complete","next","isDataSource","renderRows","_getAllRenderRows","_updateNoDataRow","applyChanges","record","_adjustedPreviousIndex","currentIndex","_getEmbeddedViewArgs","item","operation","_ViewRepeaterOperation","INSERTED","_renderCellTemplateForItem","rowDef","_updateRowIndexContext","forEachIdentityChange","rowView","$implicit","addColumnDef","removeColumnDef","delete","addRowDef","removeRowDef","addHeaderRowDef","headerRowDef","removeHeaderRowDef","addFooterRowDef","footerRowDef","removeFooterRowDef","setNoDataRow","noDataRow","updateStickyHeaderRowStyles","headerRows","_getRenderedRows","thead","closestTableSection","display","updateStickyFooterRowStyles","footerRows","dataRows","headerRow","_addStickyColumnStyles","footerRow","values","_cacheRowDefs","_cacheColumnDefs","columnsChanged","_renderUpdatedColumns","rowDefsChanged","_forceRenderHeaderRows","_forceRenderFooterRows","_observeRenderChanges","_checkStickyStates","isArray","Math","min","prevCachedRenderRows","renderRowsForData","_getRenderRowsForData","j","renderRow","cache","rowDefs","_getRowDefs","cachedRenderRows","shift","columnDefs","mergeArrayAndSet","_getOwnDefs","defaultRowDefs","columnsDiffReducer","acc","dataColumnsChanged","reduce","headerColumnsChanged","footerColumnsChanged","unsubscribe","dataStream","connect","isObservable","observableOf","combineLatest","range","_renderRow","columnName","rowOutlet","renderedRows","viewRef","rootNodes","outlet","view","createEmbeddedView","cellTemplate","_getCellTemplates","renderIndex","count","last","even","odd","columnId","stickyCheckReducer","d","viewport","virtualScrollScheduler","requestAnimationFrame","animationFrameScheduler","asapScheduler","renderedRangeStream","auditTime","attach","measureRangeSize","orientation","_measureRangeSize","renderedContentOffset","offsetFromTop","current","max","items","shouldShow","container","rootNode","querySelectorAll","renderedRange","viewContainerRef","renderedStartIndex","rangeLen","firstNode","lastNode","startRect","endRect","outputs","properties","useValue","queries","exportAs","isInline","styles","dependencies","kind","Output","ContentChildren","array","concat","section","uppercaseSection","toUpperCase","parentNode","CdkTextColumn","_options","_syncColumnDefName","headerText","dataAccessor","justify","_createDefaultHeaderText","defaultDataAccessor","defaultHeaderTextTransform","static","ViewChild","EXPORTED_DECLARATIONS","CdkTableModule","NgModule","ScrollingModule","ɵinj","ɵɵngDeclareInjector","exports"],"mappings":"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"}
\n {{headerText}}\n \n {{dataAccessor(data, name)}}\n