{"ast":null,"code":"import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, isDataSource, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nexport { DataSource } from '@angular/cdk/collections';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Inject, Optional, Input, ContentChild, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, EmbeddedViewRef, EventEmitter, Attribute, SkipSelf, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';\nimport { Subject, from, BehaviorSubject, isObservable, of } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\nimport * as i1 from '@angular/cdk/bidi';\nimport * as i2 from '@angular/cdk/platform';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Mixin to provide a directive with a function that checks if the sticky input has been\n * changed since the last time the function was called. Essentially adds a dirty-check to the\n * sticky value.\n * @docs-private\n */\n\nconst _c0 = [[[\"caption\"]], [[\"colgroup\"], [\"col\"]]];\nconst _c1 = [\"caption\", \"colgroup, col\"];\n\nfunction CdkTextColumn_th_1_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"th\", 3);\n    i0.ɵɵtext(1);\n    i0.ɵɵelementEnd();\n  }\n\n  if (rf & 2) {\n    const ctx_r0 = i0.ɵɵnextContext();\n    i0.ɵɵstyleProp(\"text-align\", ctx_r0.justify);\n    i0.ɵɵadvance(1);\n    i0.ɵɵtextInterpolate1(\" \", ctx_r0.headerText, \" \");\n  }\n}\n\nfunction CdkTextColumn_td_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"td\", 4);\n    i0.ɵɵtext(1);\n    i0.ɵɵelementEnd();\n  }\n\n  if (rf & 2) {\n    const data_r2 = ctx.$implicit;\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵstyleProp(\"text-align\", ctx_r1.justify);\n    i0.ɵɵadvance(1);\n    i0.ɵɵtextInterpolate1(\" \", ctx_r1.dataAccessor(data_r2, ctx_r1.name), \" \");\n  }\n}\n\nfunction mixinHasStickyInput(base) {\n  return class extends base {\n    constructor(...args) {\n      super(...args);\n      this._sticky = false;\n      /** Whether the sticky input has changed since it was last checked. */\n\n      this._hasStickyChanged = false;\n    }\n    /** Whether sticky positioning should be applied. */\n\n\n    get sticky() {\n      return this._sticky;\n    }\n\n    set sticky(v) {\n      const prevValue = this._sticky;\n      this._sticky = coerceBooleanProperty(v);\n      this._hasStickyChanged = prevValue !== this._sticky;\n    }\n    /** Whether the sticky value has changed since this was last called. */\n\n\n    hasStickyChanged() {\n      const hasStickyChanged = this._hasStickyChanged;\n      this._hasStickyChanged = false;\n      return hasStickyChanged;\n    }\n    /** Resets the dirty check for cases where the sticky state has been used without checking. */\n\n\n    resetStickyChanged() {\n      this._hasStickyChanged = false;\n    }\n\n  };\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Used to provide a table to some of the sub-components without causing a circular dependency.\n * @docs-private\n */\n\n\nconst CDK_TABLE = new InjectionToken('CDK_TABLE');\n/** Injection token that can be used to specify the text column options. */\n\nconst TEXT_COLUMN_OPTIONS = new InjectionToken('text-column-options');\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * 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\nclass CdkCellDef {\n  constructor(\n  /** @docs-private */\n  template) {\n    this.template = template;\n  }\n\n}\n\nCdkCellDef.ɵfac = function CdkCellDef_Factory(t) {\n  return new (t || CdkCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n};\n\nCdkCellDef.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkCellDef,\n  selectors: [[\"\", \"cdkCellDef\", \"\"]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkCellDef, [{\n    type: Directive,\n    args: [{\n      selector: '[cdkCellDef]'\n    }]\n  }], function () {\n    return [{\n      type: i0.TemplateRef\n    }];\n  }, null);\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\n\nclass CdkHeaderCellDef {\n  constructor(\n  /** @docs-private */\n  template) {\n    this.template = template;\n  }\n\n}\n\nCdkHeaderCellDef.ɵfac = function CdkHeaderCellDef_Factory(t) {\n  return new (t || CdkHeaderCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n};\n\nCdkHeaderCellDef.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkHeaderCellDef,\n  selectors: [[\"\", \"cdkHeaderCellDef\", \"\"]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkHeaderCellDef, [{\n    type: Directive,\n    args: [{\n      selector: '[cdkHeaderCellDef]'\n    }]\n  }], function () {\n    return [{\n      type: i0.TemplateRef\n    }];\n  }, null);\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\n\nclass CdkFooterCellDef {\n  constructor(\n  /** @docs-private */\n  template) {\n    this.template = template;\n  }\n\n}\n\nCdkFooterCellDef.ɵfac = function CdkFooterCellDef_Factory(t) {\n  return new (t || CdkFooterCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n};\n\nCdkFooterCellDef.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkFooterCellDef,\n  selectors: [[\"\", \"cdkFooterCellDef\", \"\"]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkFooterCellDef, [{\n    type: Directive,\n    args: [{\n      selector: '[cdkFooterCellDef]'\n    }]\n  }], function () {\n    return [{\n      type: i0.TemplateRef\n    }];\n  }, null);\n})(); // Boilerplate for applying mixins to CdkColumnDef.\n\n/** @docs-private */\n\n\nclass CdkColumnDefBase {}\n\nconst _CdkColumnDefBase = mixinHasStickyInput(CdkColumnDefBase);\n/**\n * Column definition for the CDK table.\n * Defines a set of cells available for a table column.\n */\n\n\nclass CdkColumnDef extends _CdkColumnDefBase {\n  constructor(_table) {\n    super();\n    this._table = _table;\n    this._stickyEnd = false;\n  }\n  /** Unique name for this column. */\n\n\n  get name() {\n    return this._name;\n  }\n\n  set name(name) {\n    this._setNameInput(name);\n  }\n  /**\n   * Whether this column should be sticky positioned on the end of the row. Should make sure\n   * that it mimics the `CanStick` mixin such that `_hasStickyChanged` is set to true if the value\n   * has been changed.\n   */\n\n\n  get stickyEnd() {\n    return this._stickyEnd;\n  }\n\n  set stickyEnd(v) {\n    const prevValue = this._stickyEnd;\n    this._stickyEnd = coerceBooleanProperty(v);\n    this._hasStickyChanged = prevValue !== this._stickyEnd;\n  }\n  /**\n   * Overridable method that sets the css classes that will be added to every cell in this\n   * column.\n   * In the future, columnCssClassName will change from type string[] to string and this\n   * will set a single string value.\n   * @docs-private\n   */\n\n\n  _updateColumnCssClassName() {\n    this._columnCssClassName = [`cdk-column-${this.cssClassFriendlyName}`];\n  }\n  /**\n   * This has been extracted to a util because of TS 4 and VE.\n   * View Engine doesn't support property rename inheritance.\n   * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n   * @docs-private\n   */\n\n\n  _setNameInput(value) {\n    // If the directive is set without a name (updated programmatically), then this setter will\n    // trigger with an empty string and should not overwrite the programmatically set value.\n    if (value) {\n      this._name = value;\n      this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-');\n\n      this._updateColumnCssClassName();\n    }\n  }\n\n}\n\nCdkColumnDef.ɵfac = function CdkColumnDef_Factory(t) {\n  return new (t || CdkColumnDef)(i0.ɵɵdirectiveInject(CDK_TABLE, 8));\n};\n\nCdkColumnDef.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkColumnDef,\n  selectors: [[\"\", \"cdkColumnDef\", \"\"]],\n  contentQueries: function CdkColumnDef_ContentQueries(rf, ctx, dirIndex) {\n    if (rf & 1) {\n      i0.ɵɵcontentQuery(dirIndex, CdkCellDef, 5);\n      i0.ɵɵcontentQuery(dirIndex, CdkHeaderCellDef, 5);\n      i0.ɵɵcontentQuery(dirIndex, CdkFooterCellDef, 5);\n    }\n\n    if (rf & 2) {\n      let _t;\n\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.cell = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerCell = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.footerCell = _t.first);\n    }\n  },\n  inputs: {\n    sticky: \"sticky\",\n    name: [\"cdkColumnDef\", \"name\"],\n    stickyEnd: \"stickyEnd\"\n  },\n  features: [i0.ɵɵProvidersFeature([{\n    provide: 'MAT_SORT_HEADER_COLUMN_DEF',\n    useExisting: CdkColumnDef\n  }]), i0.ɵɵInheritDefinitionFeature]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkColumnDef, [{\n    type: Directive,\n    args: [{\n      selector: '[cdkColumnDef]',\n      inputs: ['sticky'],\n      providers: [{\n        provide: 'MAT_SORT_HEADER_COLUMN_DEF',\n        useExisting: CdkColumnDef\n      }]\n    }]\n  }], function () {\n    return [{\n      type: undefined,\n      decorators: [{\n        type: Inject,\n        args: [CDK_TABLE]\n      }, {\n        type: Optional\n      }]\n    }];\n  }, {\n    name: [{\n      type: Input,\n      args: ['cdkColumnDef']\n    }],\n    stickyEnd: [{\n      type: Input,\n      args: ['stickyEnd']\n    }],\n    cell: [{\n      type: ContentChild,\n      args: [CdkCellDef]\n    }],\n    headerCell: [{\n      type: ContentChild,\n      args: [CdkHeaderCellDef]\n    }],\n    footerCell: [{\n      type: ContentChild,\n      args: [CdkFooterCellDef]\n    }]\n  });\n})();\n/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */\n\n\nclass BaseCdkCell {\n  constructor(columnDef, elementRef) {\n    // If IE 11 is dropped before we switch to setting a single class name, change to multi param\n    // with destructuring.\n    const classList = elementRef.nativeElement.classList;\n\n    for (const className of columnDef._columnCssClassName) {\n      classList.add(className);\n    }\n  }\n\n}\n/** Header cell template container that adds the right classes and role. */\n\n\nclass CdkHeaderCell extends BaseCdkCell {\n  constructor(columnDef, elementRef) {\n    super(columnDef, elementRef);\n  }\n\n}\n\nCdkHeaderCell.ɵfac = function CdkHeaderCell_Factory(t) {\n  return new (t || CdkHeaderCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n};\n\nCdkHeaderCell.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkHeaderCell,\n  selectors: [[\"cdk-header-cell\"], [\"th\", \"cdk-header-cell\", \"\"]],\n  hostAttrs: [\"role\", \"columnheader\", 1, \"cdk-header-cell\"],\n  features: [i0.ɵɵInheritDefinitionFeature]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkHeaderCell, [{\n    type: Directive,\n    args: [{\n      selector: 'cdk-header-cell, th[cdk-header-cell]',\n      host: {\n        'class': 'cdk-header-cell',\n        'role': 'columnheader'\n      }\n    }]\n  }], function () {\n    return [{\n      type: CdkColumnDef\n    }, {\n      type: i0.ElementRef\n    }];\n  }, null);\n})();\n/** Footer cell template container that adds the right classes and role. */\n\n\nclass CdkFooterCell extends BaseCdkCell {\n  constructor(columnDef, elementRef) {\n    var _a;\n\n    super(columnDef, elementRef);\n\n    if (((_a = columnDef._table) === null || _a === void 0 ? void 0 : _a._elementRef.nativeElement.nodeType) === 1) {\n      const tableRole = columnDef._table._elementRef.nativeElement.getAttribute('role');\n\n      const role = tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell';\n      elementRef.nativeElement.setAttribute('role', role);\n    }\n  }\n\n}\n\nCdkFooterCell.ɵfac = function CdkFooterCell_Factory(t) {\n  return new (t || CdkFooterCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n};\n\nCdkFooterCell.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkFooterCell,\n  selectors: [[\"cdk-footer-cell\"], [\"td\", \"cdk-footer-cell\", \"\"]],\n  hostAttrs: [1, \"cdk-footer-cell\"],\n  features: [i0.ɵɵInheritDefinitionFeature]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkFooterCell, [{\n    type: Directive,\n    args: [{\n      selector: 'cdk-footer-cell, td[cdk-footer-cell]',\n      host: {\n        'class': 'cdk-footer-cell'\n      }\n    }]\n  }], function () {\n    return [{\n      type: CdkColumnDef\n    }, {\n      type: i0.ElementRef\n    }];\n  }, null);\n})();\n/** Cell template container that adds the right classes and role. */\n\n\nclass CdkCell extends BaseCdkCell {\n  constructor(columnDef, elementRef) {\n    var _a;\n\n    super(columnDef, elementRef);\n\n    if (((_a = columnDef._table) === null || _a === void 0 ? void 0 : _a._elementRef.nativeElement.nodeType) === 1) {\n      const tableRole = columnDef._table._elementRef.nativeElement.getAttribute('role');\n\n      const role = tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell';\n      elementRef.nativeElement.setAttribute('role', role);\n    }\n  }\n\n}\n\nCdkCell.ɵfac = function CdkCell_Factory(t) {\n  return new (t || CdkCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n};\n\nCdkCell.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkCell,\n  selectors: [[\"cdk-cell\"], [\"td\", \"cdk-cell\", \"\"]],\n  hostAttrs: [1, \"cdk-cell\"],\n  features: [i0.ɵɵInheritDefinitionFeature]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkCell, [{\n    type: Directive,\n    args: [{\n      selector: 'cdk-cell, td[cdk-cell]',\n      host: {\n        'class': 'cdk-cell'\n      }\n    }]\n  }], function () {\n    return [{\n      type: CdkColumnDef\n    }, {\n      type: i0.ElementRef\n    }];\n  }, null);\n})();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @docs-private\n */\n\n\nclass _Schedule {\n  constructor() {\n    this.tasks = [];\n    this.endTasks = [];\n  }\n\n}\n/** Injection token used to provide a coalesced style scheduler. */\n\n\nconst _COALESCED_STYLE_SCHEDULER = new InjectionToken('_COALESCED_STYLE_SCHEDULER');\n/**\n * Allows grouping up CSSDom mutations after the current execution context.\n * This can significantly improve performance when separate consecutive functions are\n * reading from the CSSDom and then mutating it.\n *\n * @docs-private\n */\n\n\nclass _CoalescedStyleScheduler {\n  constructor(_ngZone) {\n    this._ngZone = _ngZone;\n    this._currentSchedule = null;\n    this._destroyed = new Subject();\n  }\n  /**\n   * Schedules the specified task to run at the end of the current VM turn.\n   */\n\n\n  schedule(task) {\n    this._createScheduleIfNeeded();\n\n    this._currentSchedule.tasks.push(task);\n  }\n  /**\n   * Schedules the specified task to run after other scheduled tasks at the end of the current\n   * VM turn.\n   */\n\n\n  scheduleEnd(task) {\n    this._createScheduleIfNeeded();\n\n    this._currentSchedule.endTasks.push(task);\n  }\n  /** Prevent any further tasks from running. */\n\n\n  ngOnDestroy() {\n    this._destroyed.next();\n\n    this._destroyed.complete();\n  }\n\n  _createScheduleIfNeeded() {\n    if (this._currentSchedule) {\n      return;\n    }\n\n    this._currentSchedule = new _Schedule();\n\n    this._getScheduleObservable().pipe(takeUntil(this._destroyed)).subscribe(() => {\n      while (this._currentSchedule.tasks.length || this._currentSchedule.endTasks.length) {\n        const schedule = this._currentSchedule; // Capture new tasks scheduled by the current set of tasks.\n\n        this._currentSchedule = new _Schedule();\n\n        for (const task of schedule.tasks) {\n          task();\n        }\n\n        for (const task of schedule.endTasks) {\n          task();\n        }\n      }\n\n      this._currentSchedule = null;\n    });\n  }\n\n  _getScheduleObservable() {\n    // Use onStable when in the context of an ongoing change detection cycle so that we\n    // do not accidentally trigger additional cycles.\n    return this._ngZone.isStable ? from(Promise.resolve(undefined)) : this._ngZone.onStable.pipe(take(1));\n  }\n\n}\n\n_CoalescedStyleScheduler.ɵfac = function _CoalescedStyleScheduler_Factory(t) {\n  return new (t || _CoalescedStyleScheduler)(i0.ɵɵinject(i0.NgZone));\n};\n\n_CoalescedStyleScheduler.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n  token: _CoalescedStyleScheduler,\n  factory: _CoalescedStyleScheduler.ɵfac\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(_CoalescedStyleScheduler, [{\n    type: Injectable\n  }], function () {\n    return [{\n      type: i0.NgZone\n    }];\n  }, null);\n})();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * The row template that can be used by the mat-table. Should not be used outside of the\n * material library.\n */\n\n\nconst CDK_ROW_TEMPLATE = `<ng-container cdkCellOutlet></ng-container>`;\n/**\n * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs\n * for changes and notifying the table.\n */\n\nclass BaseRowDef {\n  constructor(\n  /** @docs-private */\n  template, _differs) {\n    this.template = template;\n    this._differs = _differs;\n  }\n\n  ngOnChanges(changes) {\n    // Create a new columns differ if one does not yet exist. Initialize it based on initial value\n    // of the columns property or an empty array if none is provided.\n    if (!this._columnsDiffer) {\n      const columns = changes['columns'] && changes['columns'].currentValue || [];\n      this._columnsDiffer = this._differs.find(columns).create();\n\n      this._columnsDiffer.diff(columns);\n    }\n  }\n  /**\n   * Returns the difference between the current columns and the columns from the last diff, or null\n   * if there is no difference.\n   */\n\n\n  getColumnsDiff() {\n    return this._columnsDiffer.diff(this.columns);\n  }\n  /** Gets this row def's relevant cell template from the provided column def. */\n\n\n  extractCellTemplate(column) {\n    if (this instanceof CdkHeaderRowDef) {\n      return column.headerCell.template;\n    }\n\n    if (this instanceof CdkFooterRowDef) {\n      return column.footerCell.template;\n    } else {\n      return column.cell.template;\n    }\n  }\n\n}\n\nBaseRowDef.ɵfac = function BaseRowDef_Factory(t) {\n  return new (t || BaseRowDef)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers));\n};\n\nBaseRowDef.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: BaseRowDef,\n  features: [i0.ɵɵNgOnChangesFeature]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BaseRowDef, [{\n    type: Directive\n  }], function () {\n    return [{\n      type: i0.TemplateRef\n    }, {\n      type: i0.IterableDiffers\n    }];\n  }, null);\n})(); // Boilerplate for applying mixins to CdkHeaderRowDef.\n\n/** @docs-private */\n\n\nclass CdkHeaderRowDefBase extends BaseRowDef {}\n\nconst _CdkHeaderRowDefBase = mixinHasStickyInput(CdkHeaderRowDefBase);\n/**\n * Header row definition for the CDK table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\n\n\nclass CdkHeaderRowDef extends _CdkHeaderRowDefBase {\n  constructor(template, _differs, _table) {\n    super(template, _differs);\n    this._table = _table;\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\n\n  ngOnChanges(changes) {\n    super.ngOnChanges(changes);\n  }\n\n}\n\nCdkHeaderRowDef.ɵfac = function CdkHeaderRowDef_Factory(t) {\n  return new (t || CdkHeaderRowDef)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(CDK_TABLE, 8));\n};\n\nCdkHeaderRowDef.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkHeaderRowDef,\n  selectors: [[\"\", \"cdkHeaderRowDef\", \"\"]],\n  inputs: {\n    columns: [\"cdkHeaderRowDef\", \"columns\"],\n    sticky: [\"cdkHeaderRowDefSticky\", \"sticky\"]\n  },\n  features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkHeaderRowDef, [{\n    type: Directive,\n    args: [{\n      selector: '[cdkHeaderRowDef]',\n      inputs: ['columns: cdkHeaderRowDef', 'sticky: cdkHeaderRowDefSticky']\n    }]\n  }], function () {\n    return [{\n      type: i0.TemplateRef\n    }, {\n      type: i0.IterableDiffers\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Inject,\n        args: [CDK_TABLE]\n      }, {\n        type: Optional\n      }]\n    }];\n  }, null);\n})(); // Boilerplate for applying mixins to CdkFooterRowDef.\n\n/** @docs-private */\n\n\nclass CdkFooterRowDefBase extends BaseRowDef {}\n\nconst _CdkFooterRowDefBase = mixinHasStickyInput(CdkFooterRowDefBase);\n/**\n * Footer row definition for the CDK table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\n\n\nclass CdkFooterRowDef extends _CdkFooterRowDefBase {\n  constructor(template, _differs, _table) {\n    super(template, _differs);\n    this._table = _table;\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\n\n  ngOnChanges(changes) {\n    super.ngOnChanges(changes);\n  }\n\n}\n\nCdkFooterRowDef.ɵfac = function CdkFooterRowDef_Factory(t) {\n  return new (t || CdkFooterRowDef)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(CDK_TABLE, 8));\n};\n\nCdkFooterRowDef.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkFooterRowDef,\n  selectors: [[\"\", \"cdkFooterRowDef\", \"\"]],\n  inputs: {\n    columns: [\"cdkFooterRowDef\", \"columns\"],\n    sticky: [\"cdkFooterRowDefSticky\", \"sticky\"]\n  },\n  features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkFooterRowDef, [{\n    type: Directive,\n    args: [{\n      selector: '[cdkFooterRowDef]',\n      inputs: ['columns: cdkFooterRowDef', 'sticky: cdkFooterRowDefSticky']\n    }]\n  }], function () {\n    return [{\n      type: i0.TemplateRef\n    }, {\n      type: i0.IterableDiffers\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Inject,\n        args: [CDK_TABLE]\n      }, {\n        type: Optional\n      }]\n    }];\n  }, null);\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\n\nclass CdkRowDef extends BaseRowDef {\n  // TODO(andrewseguin): Add an input for providing a switch function to determine\n  //   if this template should be used.\n  constructor(template, _differs, _table) {\n    super(template, _differs);\n    this._table = _table;\n  }\n\n}\n\nCdkRowDef.ɵfac = function CdkRowDef_Factory(t) {\n  return new (t || CdkRowDef)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(CDK_TABLE, 8));\n};\n\nCdkRowDef.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkRowDef,\n  selectors: [[\"\", \"cdkRowDef\", \"\"]],\n  inputs: {\n    columns: [\"cdkRowDefColumns\", \"columns\"],\n    when: [\"cdkRowDefWhen\", \"when\"]\n  },\n  features: [i0.ɵɵInheritDefinitionFeature]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkRowDef, [{\n    type: Directive,\n    args: [{\n      selector: '[cdkRowDef]',\n      inputs: ['columns: cdkRowDefColumns', 'when: cdkRowDefWhen']\n    }]\n  }], function () {\n    return [{\n      type: i0.TemplateRef\n    }, {\n      type: i0.IterableDiffers\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Inject,\n        args: [CDK_TABLE]\n      }, {\n        type: Optional\n      }]\n    }];\n  }, null);\n})();\n/**\n * Outlet for rendering cells inside of a row or header row.\n * @docs-private\n */\n\n\nclass CdkCellOutlet {\n  constructor(_viewContainer) {\n    this._viewContainer = _viewContainer;\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/**\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\n\nCdkCellOutlet.mostRecentCellOutlet = null;\n\nCdkCellOutlet.ɵfac = function CdkCellOutlet_Factory(t) {\n  return new (t || CdkCellOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n};\n\nCdkCellOutlet.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkCellOutlet,\n  selectors: [[\"\", \"cdkCellOutlet\", \"\"]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkCellOutlet, [{\n    type: Directive,\n    args: [{\n      selector: '[cdkCellOutlet]'\n    }]\n  }], function () {\n    return [{\n      type: i0.ViewContainerRef\n    }];\n  }, null);\n})();\n/** Header template container that contains the cell outlet. Adds the right class and role. */\n\n\nclass CdkHeaderRow {}\n\nCdkHeaderRow.ɵfac = function CdkHeaderRow_Factory(t) {\n  return new (t || CdkHeaderRow)();\n};\n\nCdkHeaderRow.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n  type: CdkHeaderRow,\n  selectors: [[\"cdk-header-row\"], [\"tr\", \"cdk-header-row\", \"\"]],\n  hostAttrs: [\"role\", \"row\", 1, \"cdk-header-row\"],\n  decls: 1,\n  vars: 0,\n  consts: [[\"cdkCellOutlet\", \"\"]],\n  template: function CdkHeaderRow_Template(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵelementContainer(0, 0);\n    }\n  },\n  directives: [CdkCellOutlet],\n  encapsulation: 2\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkHeaderRow, [{\n    type: Component,\n    args: [{\n      selector: 'cdk-header-row, tr[cdk-header-row]',\n      template: CDK_ROW_TEMPLATE,\n      host: {\n        'class': 'cdk-header-row',\n        'role': 'row'\n      },\n      // See note on CdkTable for explanation on why this uses the default change detection strategy.\n      // tslint:disable-next-line:validate-decorators\n      changeDetection: ChangeDetectionStrategy.Default,\n      encapsulation: ViewEncapsulation.None\n    }]\n  }], null, null);\n})();\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\n\n\nclass CdkFooterRow {}\n\nCdkFooterRow.ɵfac = function CdkFooterRow_Factory(t) {\n  return new (t || CdkFooterRow)();\n};\n\nCdkFooterRow.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n  type: CdkFooterRow,\n  selectors: [[\"cdk-footer-row\"], [\"tr\", \"cdk-footer-row\", \"\"]],\n  hostAttrs: [\"role\", \"row\", 1, \"cdk-footer-row\"],\n  decls: 1,\n  vars: 0,\n  consts: [[\"cdkCellOutlet\", \"\"]],\n  template: function CdkFooterRow_Template(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵelementContainer(0, 0);\n    }\n  },\n  directives: [CdkCellOutlet],\n  encapsulation: 2\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkFooterRow, [{\n    type: Component,\n    args: [{\n      selector: 'cdk-footer-row, tr[cdk-footer-row]',\n      template: CDK_ROW_TEMPLATE,\n      host: {\n        'class': 'cdk-footer-row',\n        'role': 'row'\n      },\n      // See note on CdkTable for explanation on why this uses the default change detection strategy.\n      // tslint:disable-next-line:validate-decorators\n      changeDetection: ChangeDetectionStrategy.Default,\n      encapsulation: ViewEncapsulation.None\n    }]\n  }], null, null);\n})();\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\n\n\nclass CdkRow {}\n\nCdkRow.ɵfac = function CdkRow_Factory(t) {\n  return new (t || CdkRow)();\n};\n\nCdkRow.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n  type: CdkRow,\n  selectors: [[\"cdk-row\"], [\"tr\", \"cdk-row\", \"\"]],\n  hostAttrs: [\"role\", \"row\", 1, \"cdk-row\"],\n  decls: 1,\n  vars: 0,\n  consts: [[\"cdkCellOutlet\", \"\"]],\n  template: function CdkRow_Template(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵelementContainer(0, 0);\n    }\n  },\n  directives: [CdkCellOutlet],\n  encapsulation: 2\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkRow, [{\n    type: Component,\n    args: [{\n      selector: 'cdk-row, tr[cdk-row]',\n      template: CDK_ROW_TEMPLATE,\n      host: {\n        'class': 'cdk-row',\n        'role': 'row'\n      },\n      // See note on CdkTable for explanation on why this uses the default change detection strategy.\n      // tslint:disable-next-line:validate-decorators\n      changeDetection: ChangeDetectionStrategy.Default,\n      encapsulation: ViewEncapsulation.None\n    }]\n  }], null, null);\n})();\n/** Row that can be used to display a message when no data is shown in the table. */\n\n\nclass CdkNoDataRow {\n  constructor(templateRef) {\n    this.templateRef = templateRef;\n    this._contentClassName = 'cdk-no-data-row';\n  }\n\n}\n\nCdkNoDataRow.ɵfac = function CdkNoDataRow_Factory(t) {\n  return new (t || CdkNoDataRow)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n};\n\nCdkNoDataRow.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkNoDataRow,\n  selectors: [[\"ng-template\", \"cdkNoDataRow\", \"\"]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkNoDataRow, [{\n    type: Directive,\n    args: [{\n      selector: 'ng-template[cdkNoDataRow]'\n    }]\n  }], function () {\n    return [{\n      type: i0.TemplateRef\n    }];\n  }, null);\n})();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * List of all possible directions that can be used for sticky positioning.\n * @docs-private\n */\n\n\nconst STICKY_DIRECTIONS = ['top', 'bottom', 'left', 'right'];\n/**\n * Applies and removes sticky positioning styles to the `CdkTable` rows and columns cells.\n * @docs-private\n */\n\nclass StickyStyler {\n  /**\n   * @param _isNativeHtmlTable Whether the sticky logic should be based on a table\n   *     that uses the native `<table>` element.\n   * @param _stickCellCss The CSS class that will be applied to every row/cell that has\n   *     sticky positioning applied.\n   * @param direction The directionality context of the table (ltr/rtl); affects column positioning\n   *     by reversing left/right positions.\n   * @param _isBrowser Whether the table is currently being rendered on the server or the client.\n   * @param _needsPositionStickyOnElement Whether we need to specify position: sticky on cells\n   *     using inline styles. If false, it is assumed that position: sticky is included in\n   *     the component stylesheet for _stickCellCss.\n   * @param _positionListener A listener that is notified of changes to sticky rows/columns\n   *     and their dimensions.\n   */\n  constructor(_isNativeHtmlTable, _stickCellCss, direction, _coalescedStyleScheduler, _isBrowser = true, _needsPositionStickyOnElement = true, _positionListener) {\n    this._isNativeHtmlTable = _isNativeHtmlTable;\n    this._stickCellCss = _stickCellCss;\n    this.direction = direction;\n    this._coalescedStyleScheduler = _coalescedStyleScheduler;\n    this._isBrowser = _isBrowser;\n    this._needsPositionStickyOnElement = _needsPositionStickyOnElement;\n    this._positionListener = _positionListener;\n    this._cachedCellWidths = [];\n    this._borderCellCss = {\n      'top': `${_stickCellCss}-border-elem-top`,\n      'bottom': `${_stickCellCss}-border-elem-bottom`,\n      'left': `${_stickCellCss}-border-elem-left`,\n      'right': `${_stickCellCss}-border-elem-right`\n    };\n  }\n  /**\n   * Clears the sticky positioning styles from the row and its cells by resetting the `position`\n   * style, setting the zIndex to 0, and unsetting each provided sticky direction.\n   * @param rows The list of rows that should be cleared from sticking in the provided directions\n   * @param stickyDirections The directions that should no longer be set as sticky on the rows.\n   */\n\n\n  clearStickyPositioning(rows, stickyDirections) {\n    const elementsToClear = [];\n\n    for (const row of rows) {\n      // If the row isn't an element (e.g. if it's an `ng-container`),\n      // it won't have inline styles or `children` so we skip it.\n      if (row.nodeType !== row.ELEMENT_NODE) {\n        continue;\n      }\n\n      elementsToClear.push(row);\n\n      for (let i = 0; i < row.children.length; i++) {\n        elementsToClear.push(row.children[i]);\n      }\n    } // Coalesce with sticky row/column updates (and potentially other changes like column resize).\n\n\n    this._coalescedStyleScheduler.schedule(() => {\n      for (const element of elementsToClear) {\n        this._removeStickyStyle(element, stickyDirections);\n      }\n    });\n  }\n  /**\n   * Applies sticky left and right positions to the cells of each row according to the sticky\n   * states of the rendered column definitions.\n   * @param rows The rows that should have its set of cells stuck according to the sticky states.\n   * @param stickyStartStates A list of boolean states where each state represents whether the cell\n   *     in this index position should be stuck to the start of the row.\n   * @param stickyEndStates A list of boolean states where each state represents whether the cell\n   *     in this index position should be stuck to the end of the row.\n   * @param recalculateCellWidths Whether the sticky styler should recalculate the width of each\n   *     column cell. If `false` cached widths will be used instead.\n   */\n\n\n  updateStickyColumns(rows, stickyStartStates, stickyEndStates, recalculateCellWidths = true) {\n    if (!rows.length || !this._isBrowser || !(stickyStartStates.some(state => state) || stickyEndStates.some(state => state))) {\n      if (this._positionListener) {\n        this._positionListener.stickyColumnsUpdated({\n          sizes: []\n        });\n\n        this._positionListener.stickyEndColumnsUpdated({\n          sizes: []\n        });\n      }\n\n      return;\n    }\n\n    const firstRow = rows[0];\n    const numCells = firstRow.children.length;\n\n    const cellWidths = this._getCellWidths(firstRow, recalculateCellWidths);\n\n    const startPositions = this._getStickyStartColumnPositions(cellWidths, stickyStartStates);\n\n    const endPositions = this._getStickyEndColumnPositions(cellWidths, stickyEndStates);\n\n    const lastStickyStart = stickyStartStates.lastIndexOf(true);\n    const firstStickyEnd = stickyEndStates.indexOf(true); // Coalesce with sticky row updates (and potentially other changes like column resize).\n\n    this._coalescedStyleScheduler.schedule(() => {\n      const isRtl = this.direction === 'rtl';\n      const start = isRtl ? 'right' : 'left';\n      const end = isRtl ? 'left' : 'right';\n\n      for (const row of rows) {\n        for (let i = 0; i < numCells; i++) {\n          const cell = row.children[i];\n\n          if (stickyStartStates[i]) {\n            this._addStickyStyle(cell, start, startPositions[i], i === lastStickyStart);\n          }\n\n          if (stickyEndStates[i]) {\n            this._addStickyStyle(cell, end, endPositions[i], i === firstStickyEnd);\n          }\n        }\n      }\n\n      if (this._positionListener) {\n        this._positionListener.stickyColumnsUpdated({\n          sizes: lastStickyStart === -1 ? [] : cellWidths.slice(0, lastStickyStart + 1).map((width, index) => stickyStartStates[index] ? width : null)\n        });\n\n        this._positionListener.stickyEndColumnsUpdated({\n          sizes: firstStickyEnd === -1 ? [] : cellWidths.slice(firstStickyEnd).map((width, index) => stickyEndStates[index + firstStickyEnd] ? width : null).reverse()\n        });\n      }\n    });\n  }\n  /**\n   * Applies sticky positioning to the row's cells if using the native table layout, and to the\n   * row itself otherwise.\n   * @param rowsToStick The list of rows that should be stuck according to their corresponding\n   *     sticky state and to the provided top or bottom position.\n   * @param stickyStates A list of boolean states where each state represents whether the row\n   *     should be stuck in the particular top or bottom position.\n   * @param position The position direction in which the row should be stuck if that row should be\n   *     sticky.\n   *\n   */\n\n\n  stickRows(rowsToStick, stickyStates, position) {\n    // Since we can't measure the rows on the server, we can't stick the rows properly.\n    if (!this._isBrowser) {\n      return;\n    } // 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\n\n    const rows = position === 'bottom' ? rowsToStick.slice().reverse() : rowsToStick;\n    const states = position === 'bottom' ? stickyStates.slice().reverse() : stickyStates; // Measure row heights all at once before adding sticky styles to reduce layout thrashing.\n\n    const stickyOffsets = [];\n    const stickyCellHeights = [];\n    const elementsToStick = [];\n\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 ? Array.from(row.children) : [row];\n      const height = row.getBoundingClientRect().height;\n      stickyOffset += height;\n      stickyCellHeights[rowIndex] = height;\n    }\n\n    const borderedRowIndex = states.lastIndexOf(true); // Coalesce with other sticky row updates (top/bottom), sticky columns updates\n    // (and potentially other changes like column resize).\n\n    this._coalescedStyleScheduler.schedule(() => {\n      var _a, _b;\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\n        for (const element of elementsToStick[rowIndex]) {\n          this._addStickyStyle(element, position, offset, isBorderedRowIndex);\n        }\n      }\n\n      if (position === 'top') {\n        (_a = this._positionListener) === null || _a === void 0 ? void 0 : _a.stickyHeaderRowsUpdated({\n          sizes: stickyCellHeights,\n          offsets: stickyOffsets,\n          elements: elementsToStick\n        });\n      } else {\n        (_b = this._positionListener) === null || _b === void 0 ? void 0 : _b.stickyFooterRowsUpdated({\n          sizes: stickyCellHeights,\n          offsets: stickyOffsets,\n          elements: elementsToStick\n        });\n      }\n    });\n  }\n  /**\n   * When using the native table in Safari, sticky footer cells do not stick. The only way to stick\n   * footer rows is to apply sticky styling to the tfoot container. This should only be done if\n   * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from\n   * the tfoot element.\n   */\n\n\n  updateStickyFooterContainer(tableElement, stickyStates) {\n    if (!this._isNativeHtmlTable) {\n      return;\n    }\n\n    const tfoot = tableElement.querySelector('tfoot'); // Coalesce with other sticky updates (and potentially other changes like column resize).\n\n    this._coalescedStyleScheduler.schedule(() => {\n      if (stickyStates.some(state => !state)) {\n        this._removeStickyStyle(tfoot, ['bottom']);\n      } else {\n        this._addStickyStyle(tfoot, 'bottom', 0, false);\n      }\n    });\n  }\n  /**\n   * 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\n\n  _removeStickyStyle(element, stickyDirections) {\n    for (const dir of stickyDirections) {\n      element.style[dir] = '';\n      element.classList.remove(this._borderCellCss[dir]);\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\n\n    const hasDirection = STICKY_DIRECTIONS.some(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\n      if (this._needsPositionStickyOnElement) {\n        element.style.position = '';\n      }\n\n      element.classList.remove(this._stickCellCss);\n    }\n  }\n  /**\n   * Adds the sticky styling to the element by adding the sticky style class, changing position\n   * to be sticky (and -webkit-sticky), setting the appropriate zIndex, and adding a sticky\n   * direction and value.\n   */\n\n\n  _addStickyStyle(element, dir, dirValue, isBorderElement) {\n    element.classList.add(this._stickCellCss);\n\n    if (isBorderElement) {\n      element.classList.add(this._borderCellCss[dir]);\n    }\n\n    element.style[dir] = `${dirValue}px`;\n    element.style.zIndex = this._getCalculatedZIndex(element);\n\n    if (this._needsPositionStickyOnElement) {\n      element.style.cssText += 'position: -webkit-sticky; position: sticky; ';\n    }\n  }\n  /**\n   * Calculate what the z-index should be for the element, depending on what directions (top,\n   * bottom, left, right) have been set. It should be true that elements with a top direction\n   * should have the highest index since these are elements like a table header. If any of those\n   * elements are also sticky in another direction, then they should appear above other elements\n   * that are only sticky top (e.g. a sticky column on a sticky header). Bottom-sticky elements\n   * (e.g. footer rows) should then be next in the ordering such that they are below the header\n   * but above any non-sticky elements. Finally, left/right sticky elements (e.g. sticky columns)\n   * should minimally increment so that they are above non-sticky elements but below top and bottom\n   * elements.\n   */\n\n\n  _getCalculatedZIndex(element) {\n    const zIndexIncrements = {\n      top: 100,\n      bottom: 10,\n      left: 1,\n      right: 1\n    };\n    let zIndex = 0; // 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\n    for (const dir of STICKY_DIRECTIONS) {\n      if (element.style[dir]) {\n        zIndex += zIndexIncrements[dir];\n      }\n    }\n\n    return zIndex ? `${zIndex}` : '';\n  }\n  /** Gets the widths for each cell in the provided row. */\n\n\n  _getCellWidths(row, recalculateCellWidths = true) {\n    if (!recalculateCellWidths && this._cachedCellWidths.length) {\n      return this._cachedCellWidths;\n    }\n\n    const cellWidths = [];\n    const firstRowCells = row.children;\n\n    for (let i = 0; i < firstRowCells.length; i++) {\n      let cell = firstRowCells[i];\n      cellWidths.push(cell.getBoundingClientRect().width);\n    }\n\n    this._cachedCellWidths = cellWidths;\n    return cellWidths;\n  }\n  /**\n   * Determines the left and right positions of each sticky column cell, which will be the\n   * accumulation of all sticky column cell widths to the left and right, respectively.\n   * Non-sticky cells do not need to have a value set since their positions will not be applied.\n   */\n\n\n  _getStickyStartColumnPositions(widths, stickyStates) {\n    const positions = [];\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   * 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\n\n  _getStickyEndColumnPositions(widths, stickyStates) {\n    const positions = [];\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/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Returns an error to be thrown when attempting to find an unexisting column.\n * @param id Id whose lookup failed.\n * @docs-private\n */\n\n\nfunction getTableUnknownColumnError(id) {\n  return Error(`Could not find column with id \"${id}\".`);\n}\n/**\n * Returns an error to be thrown when two column definitions have the same name.\n * @docs-private\n */\n\n\nfunction getTableDuplicateColumnNameError(name) {\n  return Error(`Duplicate column definition name provided: \"${name}\".`);\n}\n/**\n * Returns an error to be thrown when there are multiple rows that are missing a when function.\n * @docs-private\n */\n\n\nfunction getTableMultipleDefaultRowDefsError() {\n  return Error(`There can only be one default row without a when predicate function.`);\n}\n/**\n * Returns an error to be thrown when there are no matching row defs for a particular set of data.\n * @docs-private\n */\n\n\nfunction getTableMissingMatchingRowDefError(data) {\n  return Error(`Could not find a matching row definition for the` + `provided row data: ${JSON.stringify(data)}`);\n}\n/**\n * Returns an error to be thrown when there is no row definitions present in the content.\n * @docs-private\n */\n\n\nfunction getTableMissingRowDefsError() {\n  return Error('Missing definitions for header, footer, and row; ' + 'cannot determine which columns should be rendered.');\n}\n/**\n * Returns an error to be thrown when the data source does not match the compatible types.\n * @docs-private\n */\n\n\nfunction getTableUnknownDataSourceError() {\n  return Error(`Provided data source did not match an array, Observable, or DataSource`);\n}\n/**\n * Returns an error to be thrown when the text column cannot find a parent table to inject.\n * @docs-private\n */\n\n\nfunction getTableTextColumnMissingParentTableError() {\n  return Error(`Text column could not find a parent table for registration.`);\n}\n/**\n * Returns an error to be thrown when a table text column doesn't have a name.\n * @docs-private\n */\n\n\nfunction getTableTextColumnMissingNameError() {\n  return Error(`Table text column must have a name.`);\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** The injection token used to specify the StickyPositioningListener. */\n\n\nconst STICKY_POSITIONING_LISTENER = new InjectionToken('CDK_SPL');\n/**\n * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with\n * tables that animate rows.\n */\n\nclass CdkRecycleRows {}\n\nCdkRecycleRows.ɵfac = function CdkRecycleRows_Factory(t) {\n  return new (t || CdkRecycleRows)();\n};\n\nCdkRecycleRows.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: CdkRecycleRows,\n  selectors: [[\"cdk-table\", \"recycleRows\", \"\"], [\"table\", \"cdk-table\", \"\", \"recycleRows\", \"\"]],\n  features: [i0.ɵɵProvidersFeature([{\n    provide: _VIEW_REPEATER_STRATEGY,\n    useClass: _RecycleViewRepeaterStrategy\n  }])]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkRecycleRows, [{\n    type: Directive,\n    args: [{\n      selector: 'cdk-table[recycleRows], table[cdk-table][recycleRows]',\n      providers: [{\n        provide: _VIEW_REPEATER_STRATEGY,\n        useClass: _RecycleViewRepeaterStrategy\n      }]\n    }]\n  }], null, null);\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\n\nclass DataRowOutlet {\n  constructor(viewContainer, elementRef) {\n    this.viewContainer = viewContainer;\n    this.elementRef = elementRef;\n  }\n\n}\n\nDataRowOutlet.ɵfac = function DataRowOutlet_Factory(t) {\n  return new (t || DataRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n};\n\nDataRowOutlet.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: DataRowOutlet,\n  selectors: [[\"\", \"rowOutlet\", \"\"]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DataRowOutlet, [{\n    type: Directive,\n    args: [{\n      selector: '[rowOutlet]'\n    }]\n  }], function () {\n    return [{\n      type: i0.ViewContainerRef\n    }, {\n      type: i0.ElementRef\n    }];\n  }, null);\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\n\nclass HeaderRowOutlet {\n  constructor(viewContainer, elementRef) {\n    this.viewContainer = viewContainer;\n    this.elementRef = elementRef;\n  }\n\n}\n\nHeaderRowOutlet.ɵfac = function HeaderRowOutlet_Factory(t) {\n  return new (t || HeaderRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n};\n\nHeaderRowOutlet.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: HeaderRowOutlet,\n  selectors: [[\"\", \"headerRowOutlet\", \"\"]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HeaderRowOutlet, [{\n    type: Directive,\n    args: [{\n      selector: '[headerRowOutlet]'\n    }]\n  }], function () {\n    return [{\n      type: i0.ViewContainerRef\n    }, {\n      type: i0.ElementRef\n    }];\n  }, null);\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\n\nclass FooterRowOutlet {\n  constructor(viewContainer, elementRef) {\n    this.viewContainer = viewContainer;\n    this.elementRef = elementRef;\n  }\n\n}\n\nFooterRowOutlet.ɵfac = function FooterRowOutlet_Factory(t) {\n  return new (t || FooterRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n};\n\nFooterRowOutlet.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: FooterRowOutlet,\n  selectors: [[\"\", \"footerRowOutlet\", \"\"]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(FooterRowOutlet, [{\n    type: Directive,\n    args: [{\n      selector: '[footerRowOutlet]'\n    }]\n  }], function () {\n    return [{\n      type: i0.ViewContainerRef\n    }, {\n      type: i0.ElementRef\n    }];\n  }, null);\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\n\nclass NoDataRowOutlet {\n  constructor(viewContainer, elementRef) {\n    this.viewContainer = viewContainer;\n    this.elementRef = elementRef;\n  }\n\n}\n\nNoDataRowOutlet.ɵfac = function NoDataRowOutlet_Factory(t) {\n  return new (t || NoDataRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n};\n\nNoDataRowOutlet.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: NoDataRowOutlet,\n  selectors: [[\"\", \"noDataRowOutlet\", \"\"]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NoDataRowOutlet, [{\n    type: Directive,\n    args: [{\n      selector: '[noDataRowOutlet]'\n    }]\n  }], function () {\n    return [{\n      type: i0.ViewContainerRef\n    }, {\n      type: i0.ElementRef\n    }];\n  }, null);\n})();\n/**\n * The table template that can be used by the mat-table. Should not be used outside of the\n * material library.\n * @docs-private\n */\n\n\nconst CDK_TABLE_TEMPLATE = // Note that according to MDN, the `caption` element has to be projected as the **first**\n// element in the table. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption\n`\n  <ng-content select=\"caption\"></ng-content>\n  <ng-content select=\"colgroup, col\"></ng-content>\n  <ng-container headerRowOutlet></ng-container>\n  <ng-container rowOutlet></ng-container>\n  <ng-container noDataRowOutlet></ng-container>\n  <ng-container footerRowOutlet></ng-container>\n`;\n/**\n * Class used to conveniently type the embedded view ref for rows with a context.\n * @docs-private\n */\n\nclass RowViewRef extends EmbeddedViewRef {}\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\n\nclass CdkTable {\n  constructor(_differs, _changeDetectorRef, _elementRef, role, _dir, _document, _platform, _viewRepeater, _coalescedStyleScheduler, _viewportRuler,\n  /**\n   * @deprecated `_stickyPositioningListener` parameter to become required.\n   * @breaking-change 13.0.0\n   */\n  _stickyPositioningListener) {\n    this._differs = _differs;\n    this._changeDetectorRef = _changeDetectorRef;\n    this._elementRef = _elementRef;\n    this._dir = _dir;\n    this._platform = _platform;\n    this._viewRepeater = _viewRepeater;\n    this._coalescedStyleScheduler = _coalescedStyleScheduler;\n    this._viewportRuler = _viewportRuler;\n    this._stickyPositioningListener = _stickyPositioningListener;\n    /** Subject that emits when the component has been destroyed. */\n\n    this._onDestroy = new Subject();\n    /**\n     * Map of all the user's defined columns (header, data, and footer cell template) identified by\n     * name. Collection populated by the column definitions gathered by `ContentChildren` as well as\n     * any custom column definitions added to `_customColumnDefs`.\n     */\n\n    this._columnDefsByName = new Map();\n    /**\n     * Column definitions that were defined outside of the direct content children of the table.\n     * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n     * column definitions as *its* content child.\n     */\n\n    this._customColumnDefs = new Set();\n    /**\n     * Data row definitions that were defined outside of the direct content children of the table.\n     * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n     * built-in data rows as *its* content child.\n     */\n\n    this._customRowDefs = new Set();\n    /**\n     * Header row definitions that were defined outside of the direct content children of the table.\n     * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n     * built-in header rows as *its* content child.\n     */\n\n    this._customHeaderRowDefs = new Set();\n    /**\n     * Footer row definitions that were defined outside of the direct content children of the table.\n     * These will be defined when, e.g., creating a wrapper around the cdkTable that has a\n     * built-in footer row as *its* content child.\n     */\n\n    this._customFooterRowDefs = new Set();\n    /**\n     * Whether the header row definition has been changed. Triggers an update to the header row after\n     * content is checked. Initialized as true so that the table renders the initial set of rows.\n     */\n\n    this._headerRowDefChanged = true;\n    /**\n     * Whether the footer row definition has been changed. Triggers an update to the footer row after\n     * content is checked. Initialized as true so that the table renders the initial set of rows.\n     */\n\n    this._footerRowDefChanged = true;\n    /**\n     * Whether the sticky column styles need to be updated. Set to `true` when the visible columns\n     * change.\n     */\n\n    this._stickyColumnStylesNeedReset = true;\n    /**\n     * Whether the sticky styler should recalculate cell widths when applying sticky styles. If\n     * `false`, cached values will be used instead. This is only applicable to tables with\n     * {@link fixedLayout} enabled. For other tables, cell widths will always be recalculated.\n     */\n\n    this._forceRecalculateCellWidths = true;\n    /**\n     * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing\n     * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with\n     * the cached `RenderRow` objects when possible, the row identity is preserved when the data\n     * and row template matches, which allows the `IterableDiffer` to check rows by reference\n     * and understand which rows are added/moved/removed.\n     *\n     * Implemented as a map of maps where the first key is the `data: T` object and the second is the\n     * `CdkRowDef<T>` object. With the two keys, the cache points to a `RenderRow<T>` 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\n    this._cachedRenderRowsMap = new Map();\n    /**\n     * CSS class added to any row or cell that has sticky positioning applied. May be overriden by\n     * table subclasses.\n     */\n\n    this.stickyCssClass = 'cdk-table-sticky';\n    /**\n     * Whether to manually add positon: 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\n    this.needsPositionStickyOnElement = true;\n    /** Whether the no data row is currently showing anything. */\n\n    this._isShowingNoDataRow = false;\n    this._multiTemplateDataRows = false;\n    this._fixedLayout = false;\n    /**\n     * Emits when the table completes rendering a set of data rows based on the latest data from the\n     * data source, even if the set of rows is empty.\n     */\n\n    this.contentChanged = new EventEmitter(); // TODO(andrewseguin): Remove max value as the end index\n    //   and instead calculate the view on init and scroll.\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\n    this.viewChange = new BehaviorSubject({\n      start: 0,\n      end: Number.MAX_VALUE\n    });\n\n    if (!role) {\n      this._elementRef.nativeElement.setAttribute('role', 'table');\n    }\n\n    this._document = _document;\n    this._isNativeHtmlTable = this._elementRef.nativeElement.nodeName === 'TABLE';\n  }\n  /**\n   * 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\n\n  get trackBy() {\n    return this._trackByFn;\n  }\n\n  set trackBy(fn) {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {\n      console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}.`);\n    }\n\n    this._trackByFn = fn;\n  }\n  /**\n   * The table's source of data, which can be provided in three ways (in order of complexity):\n   *   - Simple data array (each object represents one table row)\n   *   - Stream that emits a data array each time the array changes\n   *   - `DataSource` object that implements the connect/disconnect interface.\n   *\n   * If a data array is provided, the table must be notified when the array's objects are\n   * added, removed, or moved. This can be done by calling the `renderRows()` function which will\n   * render the diff since the last table render. If the data array reference is changed, the table\n   * will automatically trigger an update to the rows.\n   *\n   * When providing an Observable stream, the table will trigger an update automatically when the\n   * stream emits a new array of data.\n   *\n   * Finally, when providing a `DataSource` object, the table will use the Observable stream\n   * provided by the connect function and trigger updates when that stream emits new data array\n   * values. During the table's ngOnDestroy or when the data source is removed from the table, the\n   * table will call the DataSource's `disconnect` function (may be useful for cleaning up any\n   * subscriptions registered during the connect process).\n   */\n\n\n  get dataSource() {\n    return this._dataSource;\n  }\n\n  set dataSource(dataSource) {\n    if (this._dataSource !== dataSource) {\n      this._switchDataSource(dataSource);\n    }\n  }\n  /**\n   * Whether to allow multiple rows per data object by evaluating which rows evaluate their 'when'\n   * predicate to true. If `multiTemplateDataRows` is false, which is the default value, then each\n   * dataobject will render the first row that evaluates its when predicate to true, in the order\n   * defined in the table, or otherwise the default row which does not have a when predicate.\n   */\n\n\n  get multiTemplateDataRows() {\n    return this._multiTemplateDataRows;\n  }\n\n  set multiTemplateDataRows(v) {\n    this._multiTemplateDataRows = coerceBooleanProperty(v); // In Ivy if this value is set via a static attribute (e.g. <table multiTemplateDataRows>),\n    // this setter will be invoked before the row outlet has been defined hence the null check.\n\n    if (this._rowOutlet && this._rowOutlet.viewContainer.length) {\n      this._forceRenderDataRows();\n\n      this.updateStickyColumnStyles();\n    }\n  }\n  /**\n   * Whether to use a fixed table layout. Enabling this option will enforce consistent column widths\n   * and optimize rendering sticky styles for native tables. No-op for flex tables.\n   */\n\n\n  get fixedLayout() {\n    return this._fixedLayout;\n  }\n\n  set fixedLayout(v) {\n    this._fixedLayout = coerceBooleanProperty(v); // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated.\n\n    this._forceRecalculateCellWidths = true;\n    this._stickyColumnStylesNeedReset = true;\n  }\n\n  ngOnInit() {\n    this._setupStickyStyler();\n\n    if (this._isNativeHtmlTable) {\n      this._applyNativeTableSections();\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\n\n    this._dataDiffer = this._differs.find([]).create((_i, dataRow) => {\n      return this.trackBy ? this.trackBy(dataRow.dataIndex, dataRow.data) : dataRow;\n    });\n\n    this._viewportRuler.change().pipe(takeUntil(this._onDestroy)).subscribe(() => {\n      this._forceRecalculateCellWidths = true;\n    });\n  }\n\n  ngAfterContentChecked() {\n    // Cache the row and column definitions gathered by ContentChildren and programmatic injection.\n    this._cacheRowDefs();\n\n    this._cacheColumnDefs(); // Make sure that the user has at least added header, footer, or data row def.\n\n\n    if (!this._headerRowDefs.length && !this._footerRowDefs.length && !this._rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getTableMissingRowDefsError();\n    } // Render updates if the list of columns have been changed for the header, row, or footer defs.\n\n\n    const columnsChanged = this._renderUpdatedColumns();\n\n    const rowDefsChanged = columnsChanged || this._headerRowDefChanged || this._footerRowDefChanged; // Ensure sticky column styles are reset if set to `true` elsewhere.\n\n    this._stickyColumnStylesNeedReset = this._stickyColumnStylesNeedReset || rowDefsChanged;\n    this._forceRecalculateCellWidths = rowDefsChanged; // If the header row definition has been changed, trigger a render to the header row.\n\n    if (this._headerRowDefChanged) {\n      this._forceRenderHeaderRows();\n\n      this._headerRowDefChanged = false;\n    } // If the footer row definition has been changed, trigger a render to the footer row.\n\n\n    if (this._footerRowDefChanged) {\n      this._forceRenderFooterRows();\n\n      this._footerRowDefChanged = false;\n    } // If there is a data source and row definitions, connect to the data source unless a\n    // connection has already been made.\n\n\n    if (this.dataSource && this._rowDefs.length > 0 && !this._renderChangeSubscription) {\n      this._observeRenderChanges();\n    } else if (this._stickyColumnStylesNeedReset) {\n      // In the above case, _observeRenderChanges will result in updateStickyColumnStyles being\n      // called when it row data arrives. Otherwise, we need to call it proactively.\n      this.updateStickyColumnStyles();\n    }\n\n    this._checkStickyStates();\n  }\n\n  ngOnDestroy() {\n    this._rowOutlet.viewContainer.clear();\n\n    this._noDataRowOutlet.viewContainer.clear();\n\n    this._headerRowOutlet.viewContainer.clear();\n\n    this._footerRowOutlet.viewContainer.clear();\n\n    this._cachedRenderRowsMap.clear();\n\n    this._onDestroy.next();\n\n    this._onDestroy.complete();\n\n    if (isDataSource(this.dataSource)) {\n      this.dataSource.disconnect(this);\n    }\n  }\n  /**\n   * Renders rows based on the table's latest set of data, which was either provided directly as an\n   * input or retrieved through an Observable stream (directly or from a DataSource).\n   * Checks for differences in the data since the last diff to perform only the necessary\n   * changes (add/remove/move rows).\n   *\n   * If the table's data source is a DataSource or Observable, this will be invoked automatically\n   * each time the provided Observable stream emits a new data array. Otherwise if your data is\n   * an array, this function will need to be called to render any changes.\n   */\n\n\n  renderRows() {\n    this._renderRows = this._getAllRenderRows();\n\n    const changes = this._dataDiffer.diff(this._renderRows);\n\n    if (!changes) {\n      this._updateNoDataRow();\n\n      this.contentChanged.next();\n      return;\n    }\n\n    const viewContainer = this._rowOutlet.viewContainer;\n\n    this._viewRepeater.applyChanges(changes, viewContainer, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record.item, currentIndex), record => record.item.data, change => {\n      if (change.operation === 1\n      /* INSERTED */\n      && change.context) {\n        this._renderCellTemplateForItem(change.record.item.rowDef, change.context);\n      }\n    }); // Update the meta context of a row's context data (index, count, first, last, ...)\n\n\n    this._updateRowIndexContext(); // 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\n\n    changes.forEachIdentityChange(record => {\n      const rowView = viewContainer.get(record.currentIndex);\n      rowView.context.$implicit = record.item.data;\n    });\n\n    this._updateNoDataRow();\n\n    this.updateStickyColumnStyles();\n    this.contentChanged.next();\n  }\n  /** Adds a column definition that was not included as part of the content children. */\n\n\n  addColumnDef(columnDef) {\n    this._customColumnDefs.add(columnDef);\n  }\n  /** Removes a column definition that was not included as part of the content children. */\n\n\n  removeColumnDef(columnDef) {\n    this._customColumnDefs.delete(columnDef);\n  }\n  /** Adds a row definition that was not included as part of the content children. */\n\n\n  addRowDef(rowDef) {\n    this._customRowDefs.add(rowDef);\n  }\n  /** Removes a row definition that was not included as part of the content children. */\n\n\n  removeRowDef(rowDef) {\n    this._customRowDefs.delete(rowDef);\n  }\n  /** Adds a header row definition that was not included as part of the content children. */\n\n\n  addHeaderRowDef(headerRowDef) {\n    this._customHeaderRowDefs.add(headerRowDef);\n\n    this._headerRowDefChanged = true;\n  }\n  /** Removes a header row definition that was not included as part of the content children. */\n\n\n  removeHeaderRowDef(headerRowDef) {\n    this._customHeaderRowDefs.delete(headerRowDef);\n\n    this._headerRowDefChanged = true;\n  }\n  /** Adds a footer row definition that was not included as part of the content children. */\n\n\n  addFooterRowDef(footerRowDef) {\n    this._customFooterRowDefs.add(footerRowDef);\n\n    this._footerRowDefChanged = true;\n  }\n  /** Removes a footer row definition that was not included as part of the content children. */\n\n\n  removeFooterRowDef(footerRowDef) {\n    this._customFooterRowDefs.delete(footerRowDef);\n\n    this._footerRowDefChanged = true;\n  }\n  /** Sets a no data row definition that was not included as a part of the content children. */\n\n\n  setNoDataRow(noDataRow) {\n    this._customNoDataRow = noDataRow;\n  }\n  /**\n   * Updates the header sticky styles. First resets all applied styles with respect to the cells\n   * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is\n   * automatically called when the header row changes its displayed set of columns, or if its\n   * sticky input changes. May be called manually for cases where the cell content changes outside\n   * of these events.\n   */\n\n\n  updateStickyHeaderRowStyles() {\n    const headerRows = this._getRenderedRows(this._headerRowOutlet);\n\n    const tableElement = this._elementRef.nativeElement; // 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\n    const thead = tableElement.querySelector('thead');\n\n    if (thead) {\n      thead.style.display = headerRows.length ? '' : 'none';\n    }\n\n    const stickyStates = this._headerRowDefs.map(def => def.sticky);\n\n    this._stickyStyler.clearStickyPositioning(headerRows, ['top']);\n\n    this._stickyStyler.stickRows(headerRows, stickyStates, 'top'); // Reset the dirty state of the sticky input change since it has been used.\n\n\n    this._headerRowDefs.forEach(def => def.resetStickyChanged());\n  }\n  /**\n   * Updates the footer sticky styles. First resets all applied styles with respect to the cells\n   * sticking to the bottom. Then, evaluating which cells need to be stuck to the bottom. This is\n   * automatically called when the footer row changes its displayed set of columns, or if its\n   * sticky input changes. May be called manually for cases where the cell content changes outside\n   * of these events.\n   */\n\n\n  updateStickyFooterRowStyles() {\n    const footerRows = this._getRenderedRows(this._footerRowOutlet);\n\n    const tableElement = this._elementRef.nativeElement; // 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\n    const tfoot = tableElement.querySelector('tfoot');\n\n    if (tfoot) {\n      tfoot.style.display = footerRows.length ? '' : 'none';\n    }\n\n    const stickyStates = this._footerRowDefs.map(def => def.sticky);\n\n    this._stickyStyler.clearStickyPositioning(footerRows, ['bottom']);\n\n    this._stickyStyler.stickRows(footerRows, stickyStates, 'bottom');\n\n    this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement, stickyStates); // Reset the dirty state of the sticky input change since it has been used.\n\n\n    this._footerRowDefs.forEach(def => def.resetStickyChanged());\n  }\n  /**\n   * Updates the column sticky styles. First resets all applied styles with respect to the cells\n   * sticking to the left and right. Then sticky styles are added for the left and right according\n   * to the column definitions for each cell in each row. This is automatically called when\n   * the data source provides a new set of data or when a column definition changes its sticky\n   * input. May be called manually for cases where the cell content changes outside of these events.\n   */\n\n\n  updateStickyColumnStyles() {\n    const headerRows = this._getRenderedRows(this._headerRowOutlet);\n\n    const dataRows = this._getRenderedRows(this._rowOutlet);\n\n    const footerRows = this._getRenderedRows(this._footerRowOutlet); // 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\n\n    if (this._isNativeHtmlTable && !this._fixedLayout || this._stickyColumnStylesNeedReset) {\n      // Clear the left and right positioning from all columns in the table across all rows since\n      // sticky columns span across all table sections (header, data, footer)\n      this._stickyStyler.clearStickyPositioning([...headerRows, ...dataRows, ...footerRows], ['left', 'right']);\n\n      this._stickyColumnStylesNeedReset = false;\n    } // Update the sticky styles for each header row depending on the def's sticky state\n\n\n    headerRows.forEach((headerRow, i) => {\n      this._addStickyColumnStyles([headerRow], this._headerRowDefs[i]);\n    }); // Update the sticky styles for each data row depending on its def's sticky state\n\n    this._rowDefs.forEach(rowDef => {\n      // Collect all the rows rendered with this row definition.\n      const rows = [];\n\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    }); // Update the sticky styles for each footer row depending on the def's sticky state\n\n\n    footerRows.forEach((footerRow, i) => {\n      this._addStickyColumnStyles([footerRow], this._footerRowDefs[i]);\n    }); // Reset the dirty state of the sticky input change since it has been used.\n\n    Array.from(this._columnDefsByName.values()).forEach(def => def.resetStickyChanged());\n  }\n  /**\n   * Get the list of RenderRow objects to render according to the current list of data and defined\n   * row definitions. If the previous list already contained a particular pair, it should be reused\n   * so that the differ equates their references.\n   */\n\n\n  _getAllRenderRows() {\n    const renderRows = []; // 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\n    const prevCachedRenderRows = this._cachedRenderRowsMap;\n    this._cachedRenderRowsMap = new Map(); // 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\n    for (let i = 0; i < this._data.length; i++) {\n      let data = this._data[i];\n\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\n        if (cache.has(renderRow.rowDef)) {\n          cache.get(renderRow.rowDef).push(renderRow);\n        } else {\n          cache.set(renderRow.rowDef, [renderRow]);\n        }\n\n        renderRows.push(renderRow);\n      }\n    }\n\n    return renderRows;\n  }\n  /**\n   * Gets a list of `RenderRow<T>` 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\n\n  _getRenderRowsForData(data, dataIndex, cache) {\n    const rowDefs = this._getRowDefs(data, dataIndex);\n\n    return rowDefs.map(rowDef => {\n      const cachedRenderRows = cache && cache.has(rowDef) ? cache.get(rowDef) : [];\n\n      if (cachedRenderRows.length) {\n        const dataRow = cachedRenderRows.shift();\n        dataRow.dataIndex = dataIndex;\n        return dataRow;\n      } else {\n        return {\n          data,\n          rowDef,\n          dataIndex\n        };\n      }\n    });\n  }\n  /** Update the map containing the content's column definitions. */\n\n\n  _cacheColumnDefs() {\n    this._columnDefsByName.clear();\n\n    const columnDefs = mergeArrayAndSet(this._getOwnDefs(this._contentColumnDefs), this._customColumnDefs);\n    columnDefs.forEach(columnDef => {\n      if (this._columnDefsByName.has(columnDef.name) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw getTableDuplicateColumnNameError(columnDef.name);\n      }\n\n      this._columnDefsByName.set(columnDef.name, columnDef);\n    });\n  }\n  /** Update the list of all available row definitions that can be used. */\n\n\n  _cacheRowDefs() {\n    this._headerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentHeaderRowDefs), this._customHeaderRowDefs);\n    this._footerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentFooterRowDefs), this._customFooterRowDefs);\n    this._rowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentRowDefs), this._customRowDefs); // After all row definitions are determined, find the row definition to be considered default.\n\n    const defaultRowDefs = this._rowDefs.filter(def => !def.when);\n\n    if (!this.multiTemplateDataRows && defaultRowDefs.length > 1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getTableMultipleDefaultRowDefsError();\n    }\n\n    this._defaultRowDef = defaultRowDefs[0];\n  }\n  /**\n   * Check if the header, data, or footer rows have changed what columns they want to display or\n   * whether the sticky states have changed for the header or footer. If there is a diff, then\n   * re-render that section.\n   */\n\n\n  _renderUpdatedColumns() {\n    const columnsDiffReducer = (acc, def) => acc || !!def.getColumnsDiff(); // Force re-render data rows if the list of column definitions have changed.\n\n\n    const dataColumnsChanged = this._rowDefs.reduce(columnsDiffReducer, false);\n\n    if (dataColumnsChanged) {\n      this._forceRenderDataRows();\n    } // Force re-render header/footer rows if the list of column definitions have changed.\n\n\n    const headerColumnsChanged = this._headerRowDefs.reduce(columnsDiffReducer, false);\n\n    if (headerColumnsChanged) {\n      this._forceRenderHeaderRows();\n    }\n\n    const footerColumnsChanged = this._footerRowDefs.reduce(columnsDiffReducer, false);\n\n    if (footerColumnsChanged) {\n      this._forceRenderFooterRows();\n    }\n\n    return dataColumnsChanged || headerColumnsChanged || footerColumnsChanged;\n  }\n  /**\n   * Switch to the provided data source by resetting the data and unsubscribing from the current\n   * render change subscription if one exists. If the data source is null, interpret this by\n   * clearing the row outlet. Otherwise start listening for new data.\n   */\n\n\n  _switchDataSource(dataSource) {\n    this._data = [];\n\n    if (isDataSource(this.dataSource)) {\n      this.dataSource.disconnect(this);\n    } // Stop listening for data from the previous data source.\n\n\n    if (this._renderChangeSubscription) {\n      this._renderChangeSubscription.unsubscribe();\n\n      this._renderChangeSubscription = null;\n    }\n\n    if (!dataSource) {\n      if (this._dataDiffer) {\n        this._dataDiffer.diff([]);\n      }\n\n      this._rowOutlet.viewContainer.clear();\n    }\n\n    this._dataSource = dataSource;\n  }\n  /** Set up a subscription for the data provided by the data source. */\n\n\n  _observeRenderChanges() {\n    // If no data source has been set, there is nothing to observe for changes.\n    if (!this.dataSource) {\n      return;\n    }\n\n    let dataStream;\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 = of(this.dataSource);\n    }\n\n    if (dataStream === undefined && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getTableUnknownDataSourceError();\n    }\n\n    this._renderChangeSubscription = dataStream.pipe(takeUntil(this._onDestroy)).subscribe(data => {\n      this._data = data || [];\n      this.renderRows();\n    });\n  }\n  /**\n   * Clears any existing content in the header row outlet and creates a new embedded view\n   * in the outlet using the header row definition.\n   */\n\n\n  _forceRenderHeaderRows() {\n    // Clear the header row outlet if any content exists.\n    if (this._headerRowOutlet.viewContainer.length > 0) {\n      this._headerRowOutlet.viewContainer.clear();\n    }\n\n    this._headerRowDefs.forEach((def, i) => this._renderRow(this._headerRowOutlet, def, i));\n\n    this.updateStickyHeaderRowStyles();\n  }\n  /**\n   * Clears any existing content in the footer row outlet and creates a new embedded view\n   * in the outlet using the footer row definition.\n   */\n\n\n  _forceRenderFooterRows() {\n    // Clear the footer row outlet if any content exists.\n    if (this._footerRowOutlet.viewContainer.length > 0) {\n      this._footerRowOutlet.viewContainer.clear();\n    }\n\n    this._footerRowDefs.forEach((def, i) => this._renderRow(this._footerRowOutlet, def, i));\n\n    this.updateStickyFooterRowStyles();\n  }\n  /** Adds the sticky column styles for the rows according to the columns' stick states. */\n\n\n  _addStickyColumnStyles(rows, rowDef) {\n    const columnDefs = Array.from(rowDef.columns || []).map(columnName => {\n      const columnDef = this._columnDefsByName.get(columnName);\n\n      if (!columnDef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw getTableUnknownColumnError(columnName);\n      }\n\n      return columnDef;\n    });\n    const stickyStartStates = columnDefs.map(columnDef => columnDef.sticky);\n    const stickyEndStates = columnDefs.map(columnDef => columnDef.stickyEnd);\n\n    this._stickyStyler.updateStickyColumns(rows, stickyStartStates, stickyEndStates, !this._fixedLayout || this._forceRecalculateCellWidths);\n  }\n  /** Gets the list of rows that have been rendered in the row outlet. */\n\n\n  _getRenderedRows(rowOutlet) {\n    const renderedRows = [];\n\n    for (let i = 0; i < rowOutlet.viewContainer.length; i++) {\n      const viewRef = rowOutlet.viewContainer.get(i);\n      renderedRows.push(viewRef.rootNodes[0]);\n    }\n\n    return renderedRows;\n  }\n  /**\n   * Get the matching row definitions that should be used for this row data. If there is only\n   * one row definition, it is returned. Otherwise, find the row definitions that has a when\n   * predicate that returns true with the data. If none return true, return the default row\n   * definition.\n   */\n\n\n  _getRowDefs(data, dataIndex) {\n    if (this._rowDefs.length == 1) {\n      return [this._rowDefs[0]];\n    }\n\n    let rowDefs = [];\n\n    if (this.multiTemplateDataRows) {\n      rowDefs = this._rowDefs.filter(def => !def.when || def.when(dataIndex, data));\n    } else {\n      let rowDef = this._rowDefs.find(def => def.when && def.when(dataIndex, data)) || this._defaultRowDef;\n\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  _getEmbeddedViewArgs(renderRow, index) {\n    const rowDef = renderRow.rowDef;\n    const context = {\n      $implicit: renderRow.data\n    };\n    return {\n      templateRef: rowDef.template,\n      context,\n      index\n    };\n  }\n  /**\n   * Creates a new row template in the outlet and fills it with the set of cell templates.\n   * Optionally takes a context to provide to the row and cells, as well as an optional index\n   * of where to place the new row template in the outlet.\n   */\n\n\n  _renderRow(outlet, rowDef, index, context = {}) {\n    // TODO(andrewseguin): enforce that one outlet was instantiated from createEmbeddedView\n    const view = outlet.viewContainer.createEmbeddedView(rowDef.template, context, index);\n\n    this._renderCellTemplateForItem(rowDef, context);\n\n    return view;\n  }\n\n  _renderCellTemplateForItem(rowDef, context) {\n    for (let cellTemplate of this._getCellTemplates(rowDef)) {\n      if (CdkCellOutlet.mostRecentCellOutlet) {\n        CdkCellOutlet.mostRecentCellOutlet._viewContainer.createEmbeddedView(cellTemplate, context);\n      }\n    }\n\n    this._changeDetectorRef.markForCheck();\n  }\n  /**\n   * Updates the index-related context for each row to reflect any changes in the index of the rows,\n   * e.g. first/last/even/odd.\n   */\n\n\n  _updateRowIndexContext() {\n    const viewContainer = this._rowOutlet.viewContainer;\n\n    for (let renderIndex = 0, count = viewContainer.length; renderIndex < count; renderIndex++) {\n      const viewRef = viewContainer.get(renderIndex);\n      const context = viewRef.context;\n      context.count = count;\n      context.first = renderIndex === 0;\n      context.last = renderIndex === count - 1;\n      context.even = renderIndex % 2 === 0;\n      context.odd = !context.even;\n\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  /** Gets the column definitions for the provided row def. */\n\n\n  _getCellTemplates(rowDef) {\n    if (!rowDef || !rowDef.columns) {\n      return [];\n    }\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  /** Adds native table sections (e.g. tbody) and moves the row outlets into them. */\n\n\n  _applyNativeTableSections() {\n    const documentFragment = this._document.createDocumentFragment();\n\n    const sections = [{\n      tag: 'thead',\n      outlets: [this._headerRowOutlet]\n    }, {\n      tag: 'tbody',\n      outlets: [this._rowOutlet, this._noDataRowOutlet]\n    }, {\n      tag: 'tfoot',\n      outlets: [this._footerRowOutlet]\n    }];\n\n    for (const section of sections) {\n      const element = this._document.createElement(section.tag);\n\n      element.setAttribute('role', 'rowgroup');\n\n      for (const outlet of section.outlets) {\n        element.appendChild(outlet.elementRef.nativeElement);\n      }\n\n      documentFragment.appendChild(element);\n    } // Use a DocumentFragment so we don't hit the DOM on each iteration.\n\n\n    this._elementRef.nativeElement.appendChild(documentFragment);\n  }\n  /**\n   * Forces a re-render of the data rows. Should be called in cases where there has been an input\n   * change that affects the evaluation of which rows should be rendered, e.g. toggling\n   * `multiTemplateDataRows` or adding/removing row definitions.\n   */\n\n\n  _forceRenderDataRows() {\n    this._dataDiffer.diff([]);\n\n    this._rowOutlet.viewContainer.clear();\n\n    this.renderRows();\n  }\n  /**\n   * Checks if there has been a change in sticky states since last check and applies the correct\n   * sticky styles. Since checking resets the \"dirty\" state, this should only be performed once\n   * during a change detection and after the inputs are settled (after content check).\n   */\n\n\n  _checkStickyStates() {\n    const stickyCheckReducer = (acc, d) => {\n      return acc || d.hasStickyChanged();\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\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   * 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\n\n  _setupStickyStyler() {\n    const direction = this._dir ? this._dir.value : 'ltr';\n    this._stickyStyler = new StickyStyler(this._isNativeHtmlTable, this.stickyCssClass, direction, this._coalescedStyleScheduler, this._platform.isBrowser, this.needsPositionStickyOnElement, this._stickyPositioningListener);\n    (this._dir ? this._dir.change : of()).pipe(takeUntil(this._onDestroy)).subscribe(value => {\n      this._stickyStyler.direction = value;\n      this.updateStickyColumnStyles();\n    });\n  }\n  /** Filters definitions that belong to this table from a QueryList. */\n\n\n  _getOwnDefs(items) {\n    return items.filter(item => !item._table || item._table === this);\n  }\n  /** Creates or removes the no data row, depending on whether any data is being shown. */\n\n\n  _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 = view.rootNodes[0]; // 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\n      if (view.rootNodes.length === 1 && (rootNode === null || rootNode === void 0 ? void 0 : rootNode.nodeType) === this._document.ELEMENT_NODE) {\n        rootNode.setAttribute('role', 'row');\n        rootNode.classList.add(noDataRow._contentClassName);\n      }\n    } else {\n      container.clear();\n    }\n\n    this._isShowingNoDataRow = shouldShow;\n  }\n\n}\n\nCdkTable.ɵfac = function CdkTable_Factory(t) {\n  return new (t || CdkTable)(i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵinjectAttribute('role'), i0.ɵɵdirectiveInject(i1.Directionality, 8), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i2.Platform), i0.ɵɵdirectiveInject(_VIEW_REPEATER_STRATEGY), i0.ɵɵdirectiveInject(_COALESCED_STYLE_SCHEDULER), i0.ɵɵdirectiveInject(i3.ViewportRuler), i0.ɵɵdirectiveInject(STICKY_POSITIONING_LISTENER, 12));\n};\n\nCdkTable.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n  type: CdkTable,\n  selectors: [[\"cdk-table\"], [\"table\", \"cdk-table\", \"\"]],\n  contentQueries: function CdkTable_ContentQueries(rf, ctx, dirIndex) {\n    if (rf & 1) {\n      i0.ɵɵcontentQuery(dirIndex, CdkNoDataRow, 5);\n      i0.ɵɵcontentQuery(dirIndex, CdkColumnDef, 5);\n      i0.ɵɵcontentQuery(dirIndex, CdkRowDef, 5);\n      i0.ɵɵcontentQuery(dirIndex, CdkHeaderRowDef, 5);\n      i0.ɵɵcontentQuery(dirIndex, CdkFooterRowDef, 5);\n    }\n\n    if (rf & 2) {\n      let _t;\n\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._noDataRow = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentColumnDefs = _t);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentRowDefs = _t);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentHeaderRowDefs = _t);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentFooterRowDefs = _t);\n    }\n  },\n  viewQuery: function CdkTable_Query(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵviewQuery(DataRowOutlet, 7);\n      i0.ɵɵviewQuery(HeaderRowOutlet, 7);\n      i0.ɵɵviewQuery(FooterRowOutlet, 7);\n      i0.ɵɵviewQuery(NoDataRowOutlet, 7);\n    }\n\n    if (rf & 2) {\n      let _t;\n\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._rowOutlet = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._headerRowOutlet = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._footerRowOutlet = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._noDataRowOutlet = _t.first);\n    }\n  },\n  hostAttrs: [1, \"cdk-table\"],\n  hostVars: 2,\n  hostBindings: function CdkTable_HostBindings(rf, ctx) {\n    if (rf & 2) {\n      i0.ɵɵclassProp(\"cdk-table-fixed-layout\", ctx.fixedLayout);\n    }\n  },\n  inputs: {\n    trackBy: \"trackBy\",\n    dataSource: \"dataSource\",\n    multiTemplateDataRows: \"multiTemplateDataRows\",\n    fixedLayout: \"fixedLayout\"\n  },\n  outputs: {\n    contentChanged: \"contentChanged\"\n  },\n  exportAs: [\"cdkTable\"],\n  features: [i0.ɵɵProvidersFeature([{\n    provide: CDK_TABLE,\n    useExisting: CdkTable\n  }, {\n    provide: _VIEW_REPEATER_STRATEGY,\n    useClass: _DisposeViewRepeaterStrategy\n  }, {\n    provide: _COALESCED_STYLE_SCHEDULER,\n    useClass: _CoalescedStyleScheduler\n  }, // Prevent nested tables from seeing this table's StickyPositioningListener.\n  {\n    provide: STICKY_POSITIONING_LISTENER,\n    useValue: null\n  }])],\n  ngContentSelectors: _c1,\n  decls: 6,\n  vars: 0,\n  consts: [[\"headerRowOutlet\", \"\"], [\"rowOutlet\", \"\"], [\"noDataRowOutlet\", \"\"], [\"footerRowOutlet\", \"\"]],\n  template: function CdkTable_Template(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵprojectionDef(_c0);\n      i0.ɵɵprojection(0);\n      i0.ɵɵprojection(1, 1);\n      i0.ɵɵelementContainer(2, 0);\n      i0.ɵɵelementContainer(3, 1);\n      i0.ɵɵelementContainer(4, 2);\n      i0.ɵɵelementContainer(5, 3);\n    }\n  },\n  directives: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet],\n  styles: [\".cdk-table-fixed-layout{table-layout:fixed}\\n\"],\n  encapsulation: 2\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkTable, [{\n    type: Component,\n    args: [{\n      selector: 'cdk-table, table[cdk-table]',\n      exportAs: 'cdkTable',\n      template: CDK_TABLE_TEMPLATE,\n      host: {\n        'class': 'cdk-table',\n        '[class.cdk-table-fixed-layout]': 'fixedLayout'\n      },\n      encapsulation: ViewEncapsulation.None,\n      changeDetection: ChangeDetectionStrategy.Default,\n      providers: [{\n        provide: CDK_TABLE,\n        useExisting: CdkTable\n      }, {\n        provide: _VIEW_REPEATER_STRATEGY,\n        useClass: _DisposeViewRepeaterStrategy\n      }, {\n        provide: _COALESCED_STYLE_SCHEDULER,\n        useClass: _CoalescedStyleScheduler\n      }, // Prevent nested tables from seeing this table's StickyPositioningListener.\n      {\n        provide: STICKY_POSITIONING_LISTENER,\n        useValue: null\n      }],\n      styles: [\".cdk-table-fixed-layout{table-layout:fixed}\\n\"]\n    }]\n  }], function () {\n    return [{\n      type: i0.IterableDiffers\n    }, {\n      type: i0.ChangeDetectorRef\n    }, {\n      type: i0.ElementRef\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Attribute,\n        args: ['role']\n      }]\n    }, {\n      type: i1.Directionality,\n      decorators: [{\n        type: Optional\n      }]\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Inject,\n        args: [DOCUMENT]\n      }]\n    }, {\n      type: i2.Platform\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Inject,\n        args: [_VIEW_REPEATER_STRATEGY]\n      }]\n    }, {\n      type: _CoalescedStyleScheduler,\n      decorators: [{\n        type: Inject,\n        args: [_COALESCED_STYLE_SCHEDULER]\n      }]\n    }, {\n      type: i3.ViewportRuler\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Optional\n      }, {\n        type: SkipSelf\n      }, {\n        type: Inject,\n        args: [STICKY_POSITIONING_LISTENER]\n      }]\n    }];\n  }, {\n    trackBy: [{\n      type: Input\n    }],\n    dataSource: [{\n      type: Input\n    }],\n    multiTemplateDataRows: [{\n      type: Input\n    }],\n    fixedLayout: [{\n      type: Input\n    }],\n    contentChanged: [{\n      type: Output\n    }],\n    _rowOutlet: [{\n      type: ViewChild,\n      args: [DataRowOutlet, {\n        static: true\n      }]\n    }],\n    _headerRowOutlet: [{\n      type: ViewChild,\n      args: [HeaderRowOutlet, {\n        static: true\n      }]\n    }],\n    _footerRowOutlet: [{\n      type: ViewChild,\n      args: [FooterRowOutlet, {\n        static: true\n      }]\n    }],\n    _noDataRowOutlet: [{\n      type: ViewChild,\n      args: [NoDataRowOutlet, {\n        static: true\n      }]\n    }],\n    _contentColumnDefs: [{\n      type: ContentChildren,\n      args: [CdkColumnDef, {\n        descendants: true\n      }]\n    }],\n    _contentRowDefs: [{\n      type: ContentChildren,\n      args: [CdkRowDef, {\n        descendants: true\n      }]\n    }],\n    _contentHeaderRowDefs: [{\n      type: ContentChildren,\n      args: [CdkHeaderRowDef, {\n        descendants: true\n      }]\n    }],\n    _contentFooterRowDefs: [{\n      type: ContentChildren,\n      args: [CdkFooterRowDef, {\n        descendants: true\n      }]\n    }],\n    _noDataRow: [{\n      type: ContentChild,\n      args: [CdkNoDataRow]\n    }]\n  });\n})();\n/** Utility function that gets a merged list of the entries in an array and values of a Set. */\n\n\nfunction mergeArrayAndSet(array, set) {\n  return array.concat(Array.from(set));\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\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 (`<table>`).\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\n\nclass CdkTextColumn {\n  constructor( // `CdkTextColumn` is always requiring a table, but we just assert it manually\n  // for better error reporting.\n  // tslint:disable-next-line: lightweight-tokens\n  _table, _options) {\n    this._table = _table;\n    this._options = _options;\n    /** Alignment of the cell values. */\n\n    this.justify = 'start';\n    this._options = _options || {};\n  }\n  /** Column name that should be used to reference this column. */\n\n\n  get name() {\n    return this._name;\n  }\n\n  set name(name) {\n    this._name = name; // With Ivy, inputs can be initialized before static query results are\n    // available. In that case, we defer the synchronization until \"ngOnInit\" fires.\n\n    this._syncColumnDefName();\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 = this._options.defaultDataAccessor || ((data, name) => data[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\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   * 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\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  /** Synchronizes the column definition name with the text column name. */\n\n\n  _syncColumnDefName() {\n    if (this.columnDef) {\n      this.columnDef.name = this.name;\n    }\n  }\n\n}\n\nCdkTextColumn.ɵfac = function CdkTextColumn_Factory(t) {\n  return new (t || CdkTextColumn)(i0.ɵɵdirectiveInject(CdkTable, 8), i0.ɵɵdirectiveInject(TEXT_COLUMN_OPTIONS, 8));\n};\n\nCdkTextColumn.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n  type: CdkTextColumn,\n  selectors: [[\"cdk-text-column\"]],\n  viewQuery: function CdkTextColumn_Query(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵviewQuery(CdkColumnDef, 7);\n      i0.ɵɵviewQuery(CdkCellDef, 7);\n      i0.ɵɵviewQuery(CdkHeaderCellDef, 7);\n    }\n\n    if (rf & 2) {\n      let _t;\n\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.columnDef = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.cell = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerCell = _t.first);\n    }\n  },\n  inputs: {\n    name: \"name\",\n    headerText: \"headerText\",\n    dataAccessor: \"dataAccessor\",\n    justify: \"justify\"\n  },\n  decls: 3,\n  vars: 0,\n  consts: [[\"cdkColumnDef\", \"\"], [\"cdk-header-cell\", \"\", 3, \"text-align\", 4, \"cdkHeaderCellDef\"], [\"cdk-cell\", \"\", 3, \"text-align\", 4, \"cdkCellDef\"], [\"cdk-header-cell\", \"\"], [\"cdk-cell\", \"\"]],\n  template: function CdkTextColumn_Template(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵelementContainerStart(0, 0);\n      i0.ɵɵtemplate(1, CdkTextColumn_th_1_Template, 2, 3, \"th\", 1);\n      i0.ɵɵtemplate(2, CdkTextColumn_td_2_Template, 2, 3, \"td\", 2);\n      i0.ɵɵelementContainerEnd();\n    }\n  },\n  directives: [CdkColumnDef, CdkHeaderCellDef, CdkCellDef, CdkHeaderCell, CdkCell],\n  encapsulation: 2\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkTextColumn, [{\n    type: Component,\n    args: [{\n      selector: 'cdk-text-column',\n      template: `\n    <ng-container cdkColumnDef>\n      <th cdk-header-cell *cdkHeaderCellDef [style.text-align]=\"justify\">\n        {{headerText}}\n      </th>\n      <td cdk-cell *cdkCellDef=\"let data\" [style.text-align]=\"justify\">\n        {{dataAccessor(data, name)}}\n      </td>\n    </ng-container>\n  `,\n      encapsulation: ViewEncapsulation.None,\n      // Change detection is intentionally not set to OnPush. This component's template will be provided\n      // to the table to be inserted into its view. This is problematic when change detection runs since\n      // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n      // mean's the template in the table's view will not have the updated value (and in fact will cause\n      // an ExpressionChangedAfterItHasBeenCheckedError).\n      // tslint:disable-next-line:validate-decorators\n      changeDetection: ChangeDetectionStrategy.Default\n    }]\n  }], function () {\n    return [{\n      type: CdkTable,\n      decorators: [{\n        type: Optional\n      }]\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Optional\n      }, {\n        type: Inject,\n        args: [TEXT_COLUMN_OPTIONS]\n      }]\n    }];\n  }, {\n    name: [{\n      type: Input\n    }],\n    headerText: [{\n      type: Input\n    }],\n    dataAccessor: [{\n      type: Input\n    }],\n    justify: [{\n      type: Input\n    }],\n    columnDef: [{\n      type: ViewChild,\n      args: [CdkColumnDef, {\n        static: true\n      }]\n    }],\n    cell: [{\n      type: ViewChild,\n      args: [CdkCellDef, {\n        static: true\n      }]\n    }],\n    headerCell: [{\n      type: ViewChild,\n      args: [CdkHeaderCellDef, {\n        static: true\n      }]\n    }]\n  });\n})();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nconst EXPORTED_DECLARATIONS = [CdkTable, CdkRowDef, CdkCellDef, CdkCellOutlet, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkCell, CdkRow, CdkHeaderCell, CdkFooterCell, CdkHeaderRow, CdkHeaderRowDef, CdkFooterRow, CdkFooterRowDef, DataRowOutlet, HeaderRowOutlet, FooterRowOutlet, CdkTextColumn, CdkNoDataRow, CdkRecycleRows, NoDataRowOutlet];\n\nclass CdkTableModule {}\n\nCdkTableModule.ɵfac = function CdkTableModule_Factory(t) {\n  return new (t || CdkTableModule)();\n};\n\nCdkTableModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n  type: CdkTableModule\n});\nCdkTableModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n  imports: [[ScrollingModule]]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkTableModule, [{\n    type: NgModule,\n    args: [{\n      exports: EXPORTED_DECLARATIONS,\n      declarations: EXPORTED_DECLARATIONS,\n      imports: [ScrollingModule]\n    }]\n  }], null, null);\n})();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\n\nexport { BaseCdkCell, BaseRowDef, CDK_ROW_TEMPLATE, CDK_TABLE, CDK_TABLE_TEMPLATE, CdkCell, CdkCellDef, CdkCellOutlet, CdkColumnDef, CdkFooterCell, CdkFooterCellDef, CdkFooterRow, CdkFooterRowDef, CdkHeaderCell, CdkHeaderCellDef, CdkHeaderRow, CdkHeaderRowDef, CdkNoDataRow, CdkRecycleRows, CdkRow, CdkRowDef, CdkTable, CdkTableModule, CdkTextColumn, DataRowOutlet, FooterRowOutlet, HeaderRowOutlet, NoDataRowOutlet, STICKY_DIRECTIONS, STICKY_POSITIONING_LISTENER, StickyStyler, TEXT_COLUMN_OPTIONS, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, _Schedule, mixinHasStickyInput };","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/@angular/cdk/fesm2015/table.mjs"],"names":["coerceBooleanProperty","_VIEW_REPEATER_STRATEGY","_RecycleViewRepeaterStrategy","isDataSource","_DisposeViewRepeaterStrategy","DataSource","DOCUMENT","i0","InjectionToken","Directive","Inject","Optional","Input","ContentChild","Injectable","Component","ChangeDetectionStrategy","ViewEncapsulation","EmbeddedViewRef","EventEmitter","Attribute","SkipSelf","Output","ViewChild","ContentChildren","NgModule","Subject","from","BehaviorSubject","isObservable","of","takeUntil","take","i1","i2","i3","ScrollingModule","mixinHasStickyInput","base","constructor","args","_sticky","_hasStickyChanged","sticky","v","prevValue","hasStickyChanged","resetStickyChanged","CDK_TABLE","TEXT_COLUMN_OPTIONS","CdkCellDef","template","ɵfac","TemplateRef","ɵdir","type","selector","CdkHeaderCellDef","CdkFooterCellDef","CdkColumnDefBase","_CdkColumnDefBase","CdkColumnDef","_table","_stickyEnd","name","_name","_setNameInput","stickyEnd","_updateColumnCssClassName","_columnCssClassName","cssClassFriendlyName","value","replace","provide","useExisting","inputs","providers","undefined","decorators","cell","headerCell","footerCell","BaseCdkCell","columnDef","elementRef","classList","nativeElement","className","add","CdkHeaderCell","ElementRef","host","CdkFooterCell","_a","_elementRef","nodeType","tableRole","getAttribute","role","setAttribute","CdkCell","_Schedule","tasks","endTasks","_COALESCED_STYLE_SCHEDULER","_CoalescedStyleScheduler","_ngZone","_currentSchedule","_destroyed","schedule","task","_createScheduleIfNeeded","push","scheduleEnd","ngOnDestroy","next","complete","_getScheduleObservable","pipe","subscribe","length","isStable","Promise","resolve","onStable","NgZone","ɵprov","CDK_ROW_TEMPLATE","BaseRowDef","_differs","ngOnChanges","changes","_columnsDiffer","columns","currentValue","find","create","diff","getColumnsDiff","extractCellTemplate","column","CdkHeaderRowDef","CdkFooterRowDef","IterableDiffers","CdkHeaderRowDefBase","_CdkHeaderRowDefBase","CdkFooterRowDefBase","_CdkFooterRowDefBase","CdkRowDef","CdkCellOutlet","_viewContainer","mostRecentCellOutlet","ViewContainerRef","CdkHeaderRow","ɵcmp","changeDetection","Default","encapsulation","None","CdkFooterRow","CdkRow","CdkNoDataRow","templateRef","_contentClassName","STICKY_DIRECTIONS","StickyStyler","_isNativeHtmlTable","_stickCellCss","direction","_coalescedStyleScheduler","_isBrowser","_needsPositionStickyOnElement","_positionListener","_cachedCellWidths","_borderCellCss","clearStickyPositioning","rows","stickyDirections","elementsToClear","row","ELEMENT_NODE","i","children","element","_removeStickyStyle","updateStickyColumns","stickyStartStates","stickyEndStates","recalculateCellWidths","some","state","stickyColumnsUpdated","sizes","stickyEndColumnsUpdated","firstRow","numCells","cellWidths","_getCellWidths","startPositions","_getStickyStartColumnPositions","endPositions","_getStickyEndColumnPositions","lastStickyStart","lastIndexOf","firstStickyEnd","indexOf","isRtl","start","end","_addStickyStyle","slice","map","width","index","reverse","stickRows","rowsToStick","stickyStates","position","states","stickyOffsets","stickyCellHeights","elementsToStick","rowIndex","stickyOffset","Array","height","getBoundingClientRect","borderedRowIndex","_b","offset","isBorderedRowIndex","stickyHeaderRowsUpdated","offsets","elements","stickyFooterRowsUpdated","updateStickyFooterContainer","tableElement","tfoot","querySelector","dir","style","remove","hasDirection","zIndex","_getCalculatedZIndex","dirValue","isBorderElement","cssText","zIndexIncrements","top","bottom","left","right","firstRowCells","widths","positions","nextPosition","getTableUnknownColumnError","id","Error","getTableDuplicateColumnNameError","getTableMultipleDefaultRowDefsError","getTableMissingMatchingRowDefError","data","JSON","stringify","getTableMissingRowDefsError","getTableUnknownDataSourceError","getTableTextColumnMissingParentTableError","getTableTextColumnMissingNameError","STICKY_POSITIONING_LISTENER","CdkRecycleRows","useClass","DataRowOutlet","viewContainer","HeaderRowOutlet","FooterRowOutlet","NoDataRowOutlet","CDK_TABLE_TEMPLATE","RowViewRef","CdkTable","_changeDetectorRef","_dir","_document","_platform","_viewRepeater","_viewportRuler","_stickyPositioningListener","_onDestroy","_columnDefsByName","Map","_customColumnDefs","Set","_customRowDefs","_customHeaderRowDefs","_customFooterRowDefs","_headerRowDefChanged","_footerRowDefChanged","_stickyColumnStylesNeedReset","_forceRecalculateCellWidths","_cachedRenderRowsMap","stickyCssClass","needsPositionStickyOnElement","_isShowingNoDataRow","_multiTemplateDataRows","_fixedLayout","contentChanged","viewChange","Number","MAX_VALUE","nodeName","trackBy","_trackByFn","fn","ngDevMode","console","warn","dataSource","_dataSource","_switchDataSource","multiTemplateDataRows","_rowOutlet","_forceRenderDataRows","updateStickyColumnStyles","fixedLayout","ngOnInit","_setupStickyStyler","_applyNativeTableSections","_dataDiffer","_i","dataRow","dataIndex","change","ngAfterContentChecked","_cacheRowDefs","_cacheColumnDefs","_headerRowDefs","_footerRowDefs","_rowDefs","columnsChanged","_renderUpdatedColumns","rowDefsChanged","_forceRenderHeaderRows","_forceRenderFooterRows","_renderChangeSubscription","_observeRenderChanges","_checkStickyStates","clear","_noDataRowOutlet","_headerRowOutlet","_footerRowOutlet","disconnect","renderRows","_renderRows","_getAllRenderRows","_updateNoDataRow","applyChanges","record","_adjustedPreviousIndex","currentIndex","_getEmbeddedViewArgs","item","operation","context","_renderCellTemplateForItem","rowDef","_updateRowIndexContext","forEachIdentityChange","rowView","get","$implicit","addColumnDef","removeColumnDef","delete","addRowDef","removeRowDef","addHeaderRowDef","headerRowDef","removeHeaderRowDef","addFooterRowDef","footerRowDef","removeFooterRowDef","setNoDataRow","noDataRow","_customNoDataRow","updateStickyHeaderRowStyles","headerRows","_getRenderedRows","thead","display","def","_stickyStyler","forEach","updateStickyFooterRowStyles","footerRows","dataRows","headerRow","_addStickyColumnStyles","footerRow","values","prevCachedRenderRows","_data","renderRowsForData","_getRenderRowsForData","has","set","WeakMap","j","renderRow","cache","rowDefs","_getRowDefs","cachedRenderRows","shift","columnDefs","mergeArrayAndSet","_getOwnDefs","_contentColumnDefs","_contentHeaderRowDefs","_contentFooterRowDefs","_contentRowDefs","defaultRowDefs","filter","when","_defaultRowDef","columnsDiffReducer","acc","dataColumnsChanged","reduce","headerColumnsChanged","footerColumnsChanged","unsubscribe","dataStream","connect","isArray","_renderRow","columnName","rowOutlet","renderedRows","viewRef","rootNodes","outlet","view","createEmbeddedView","cellTemplate","_getCellTemplates","markForCheck","renderIndex","count","first","last","even","odd","columnId","documentFragment","createDocumentFragment","sections","tag","outlets","section","createElement","appendChild","stickyCheckReducer","d","isBrowser","items","_noDataRow","shouldShow","container","rootNode","ChangeDetectorRef","Directionality","Platform","ViewportRuler","useValue","exportAs","styles","static","descendants","array","concat","CdkTextColumn","_options","justify","_syncColumnDefName","headerText","_createDefaultHeaderText","dataAccessor","defaultDataAccessor","defaultHeaderTextTransform","toUpperCase","EXPORTED_DECLARATIONS","CdkTableModule","ɵmod","ɵinj","exports","declarations","imports"],"mappings":"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","sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, isDataSource, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nexport { DataSource } from '@angular/cdk/collections';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Inject, Optional, Input, ContentChild, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, EmbeddedViewRef, EventEmitter, Attribute, SkipSelf, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';\nimport { Subject, from, BehaviorSubject, isObservable, of } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\nimport * as i1 from '@angular/cdk/bidi';\nimport * as i2 from '@angular/cdk/platform';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Mixin to provide a directive with a function that checks if the sticky input has been\n * changed since the last time the function was called. Essentially adds a dirty-check to the\n * sticky value.\n * @docs-private\n */\nfunction mixinHasStickyInput(base) {\n    return class extends base {\n        constructor(...args) {\n            super(...args);\n            this._sticky = false;\n            /** Whether the sticky input has changed since it was last checked. */\n            this._hasStickyChanged = false;\n        }\n        /** Whether sticky positioning should be applied. */\n        get sticky() {\n            return this._sticky;\n        }\n        set sticky(v) {\n            const prevValue = this._sticky;\n            this._sticky = coerceBooleanProperty(v);\n            this._hasStickyChanged = prevValue !== this._sticky;\n        }\n        /** Whether the sticky value has changed since this was last called. */\n        hasStickyChanged() {\n            const hasStickyChanged = this._hasStickyChanged;\n            this._hasStickyChanged = false;\n            return hasStickyChanged;\n        }\n        /** Resets the dirty check for cases where the sticky state has been used without checking. */\n        resetStickyChanged() {\n            this._hasStickyChanged = false;\n        }\n    };\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Used to provide a table to some of the sub-components without causing a circular dependency.\n * @docs-private\n */\nconst CDK_TABLE = new InjectionToken('CDK_TABLE');\n/** Injection token that can be used to specify the text column options. */\nconst TEXT_COLUMN_OPTIONS = new InjectionToken('text-column-options');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Cell definition for a CDK table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nclass CdkCellDef {\n    constructor(/** @docs-private */ template) {\n        this.template = template;\n    }\n}\nCdkCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkCellDef, selector: \"[cdkCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkCellDef, decorators: [{\n            type: Directive,\n            args: [{ selector: '[cdkCellDef]' }]\n        }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * Header cell definition for a CDK table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nclass CdkHeaderCellDef {\n    constructor(/** @docs-private */ template) {\n        this.template = template;\n    }\n}\nCdkHeaderCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkHeaderCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkHeaderCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkHeaderCellDef, selector: \"[cdkHeaderCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkHeaderCellDef, decorators: [{\n            type: Directive,\n            args: [{ selector: '[cdkHeaderCellDef]' }]\n        }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * Footer cell definition for a CDK table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\nclass CdkFooterCellDef {\n    constructor(/** @docs-private */ template) {\n        this.template = template;\n    }\n}\nCdkFooterCellDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkFooterCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkFooterCellDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkFooterCellDef, selector: \"[cdkFooterCellDef]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkFooterCellDef, decorators: [{\n            type: Directive,\n            args: [{ selector: '[cdkFooterCellDef]' }]\n        }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n// Boilerplate for applying mixins to CdkColumnDef.\n/** @docs-private */\nclass CdkColumnDefBase {\n}\nconst _CdkColumnDefBase = mixinHasStickyInput(CdkColumnDefBase);\n/**\n * Column definition for the CDK table.\n * Defines a set of cells available for a table column.\n */\nclass CdkColumnDef extends _CdkColumnDefBase {\n    constructor(_table) {\n        super();\n        this._table = _table;\n        this._stickyEnd = false;\n    }\n    /** Unique name for this column. */\n    get name() {\n        return this._name;\n    }\n    set name(name) {\n        this._setNameInput(name);\n    }\n    /**\n     * Whether this column should be sticky positioned on the end of the row. Should make sure\n     * that it mimics the `CanStick` mixin such that `_hasStickyChanged` is set to true if the value\n     * has been changed.\n     */\n    get stickyEnd() {\n        return this._stickyEnd;\n    }\n    set stickyEnd(v) {\n        const prevValue = this._stickyEnd;\n        this._stickyEnd = coerceBooleanProperty(v);\n        this._hasStickyChanged = prevValue !== this._stickyEnd;\n    }\n    /**\n     * Overridable method that sets the css classes that will be added to every cell in this\n     * column.\n     * In the future, columnCssClassName will change from type string[] to string and this\n     * will set a single string value.\n     * @docs-private\n     */\n    _updateColumnCssClassName() {\n        this._columnCssClassName = [`cdk-column-${this.cssClassFriendlyName}`];\n    }\n    /**\n     * This has been extracted to a util because of TS 4 and VE.\n     * View Engine doesn't support property rename inheritance.\n     * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n     * @docs-private\n     */\n    _setNameInput(value) {\n        // If the directive is set without a name (updated programmatically), then this setter will\n        // trigger with an empty string and should not overwrite the programmatically set value.\n        if (value) {\n            this._name = value;\n            this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-');\n            this._updateColumnCssClassName();\n        }\n    }\n}\nCdkColumnDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkColumnDef, deps: [{ token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkColumnDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkColumnDef, selector: \"[cdkColumnDef]\", inputs: { sticky: \"sticky\", name: [\"cdkColumnDef\", \"name\"], stickyEnd: \"stickyEnd\" }, providers: [{ provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef }], queries: [{ propertyName: \"cell\", first: true, predicate: CdkCellDef, descendants: true }, { propertyName: \"headerCell\", first: true, predicate: CdkHeaderCellDef, descendants: true }, { propertyName: \"footerCell\", first: true, predicate: CdkFooterCellDef, descendants: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkColumnDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkColumnDef]',\n                    inputs: ['sticky'],\n                    providers: [{ provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef }],\n                }]\n        }], ctorParameters: function () {\n        return [{ type: undefined, decorators: [{\n                        type: Inject,\n                        args: [CDK_TABLE]\n                    }, {\n                        type: Optional\n                    }] }];\n    }, propDecorators: { name: [{\n                type: Input,\n                args: ['cdkColumnDef']\n            }], stickyEnd: [{\n                type: Input,\n                args: ['stickyEnd']\n            }], cell: [{\n                type: ContentChild,\n                args: [CdkCellDef]\n            }], headerCell: [{\n                type: ContentChild,\n                args: [CdkHeaderCellDef]\n            }], footerCell: [{\n                type: ContentChild,\n                args: [CdkFooterCellDef]\n            }] } });\n/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */\nclass BaseCdkCell {\n    constructor(columnDef, elementRef) {\n        // If IE 11 is dropped before we switch to setting a single class name, change to multi param\n        // with destructuring.\n        const classList = elementRef.nativeElement.classList;\n        for (const className of columnDef._columnCssClassName) {\n            classList.add(className);\n        }\n    }\n}\n/** Header cell template container that adds the right classes and role. */\nclass CdkHeaderCell extends BaseCdkCell {\n    constructor(columnDef, elementRef) {\n        super(columnDef, elementRef);\n    }\n}\nCdkHeaderCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkHeaderCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkHeaderCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkHeaderCell, selector: \"cdk-header-cell, th[cdk-header-cell]\", host: { attributes: { \"role\": \"columnheader\" }, classAttribute: \"cdk-header-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkHeaderCell, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'cdk-header-cell, th[cdk-header-cell]',\n                    host: {\n                        'class': 'cdk-header-cell',\n                        'role': 'columnheader',\n                    },\n                }]\n        }], ctorParameters: function () { return [{ type: CdkColumnDef }, { type: i0.ElementRef }]; } });\n/** Footer cell template container that adds the right classes and role. */\nclass CdkFooterCell extends BaseCdkCell {\n    constructor(columnDef, elementRef) {\n        var _a;\n        super(columnDef, elementRef);\n        if (((_a = columnDef._table) === null || _a === void 0 ? void 0 : _a._elementRef.nativeElement.nodeType) === 1) {\n            const tableRole = columnDef._table._elementRef.nativeElement.getAttribute('role');\n            const role = tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell';\n            elementRef.nativeElement.setAttribute('role', role);\n        }\n    }\n}\nCdkFooterCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkFooterCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkFooterCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkFooterCell, selector: \"cdk-footer-cell, td[cdk-footer-cell]\", host: { classAttribute: \"cdk-footer-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkFooterCell, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'cdk-footer-cell, td[cdk-footer-cell]',\n                    host: {\n                        'class': 'cdk-footer-cell',\n                    },\n                }]\n        }], ctorParameters: function () { return [{ type: CdkColumnDef }, { type: i0.ElementRef }]; } });\n/** Cell template container that adds the right classes and role. */\nclass CdkCell extends BaseCdkCell {\n    constructor(columnDef, elementRef) {\n        var _a;\n        super(columnDef, elementRef);\n        if (((_a = columnDef._table) === null || _a === void 0 ? void 0 : _a._elementRef.nativeElement.nodeType) === 1) {\n            const tableRole = columnDef._table._elementRef.nativeElement.getAttribute('role');\n            const role = tableRole === 'grid' || tableRole === 'treegrid' ? 'gridcell' : 'cell';\n            elementRef.nativeElement.setAttribute('role', role);\n        }\n    }\n}\nCdkCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkCell.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkCell, selector: \"cdk-cell, td[cdk-cell]\", host: { classAttribute: \"cdk-cell\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkCell, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'cdk-cell, td[cdk-cell]',\n                    host: {\n                        'class': 'cdk-cell',\n                    },\n                }]\n        }], ctorParameters: function () { return [{ type: CdkColumnDef }, { type: i0.ElementRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @docs-private\n */\nclass _Schedule {\n    constructor() {\n        this.tasks = [];\n        this.endTasks = [];\n    }\n}\n/** Injection token used to provide a coalesced style scheduler. */\nconst _COALESCED_STYLE_SCHEDULER = new InjectionToken('_COALESCED_STYLE_SCHEDULER');\n/**\n * Allows grouping up CSSDom mutations after the current execution context.\n * This can significantly improve performance when separate consecutive functions are\n * reading from the CSSDom and then mutating it.\n *\n * @docs-private\n */\nclass _CoalescedStyleScheduler {\n    constructor(_ngZone) {\n        this._ngZone = _ngZone;\n        this._currentSchedule = null;\n        this._destroyed = new Subject();\n    }\n    /**\n     * Schedules the specified task to run at the end of the current VM turn.\n     */\n    schedule(task) {\n        this._createScheduleIfNeeded();\n        this._currentSchedule.tasks.push(task);\n    }\n    /**\n     * Schedules the specified task to run after other scheduled tasks at the end of the current\n     * VM turn.\n     */\n    scheduleEnd(task) {\n        this._createScheduleIfNeeded();\n        this._currentSchedule.endTasks.push(task);\n    }\n    /** Prevent any further tasks from running. */\n    ngOnDestroy() {\n        this._destroyed.next();\n        this._destroyed.complete();\n    }\n    _createScheduleIfNeeded() {\n        if (this._currentSchedule) {\n            return;\n        }\n        this._currentSchedule = new _Schedule();\n        this._getScheduleObservable()\n            .pipe(takeUntil(this._destroyed))\n            .subscribe(() => {\n            while (this._currentSchedule.tasks.length || this._currentSchedule.endTasks.length) {\n                const schedule = this._currentSchedule;\n                // Capture new tasks scheduled by the current set of tasks.\n                this._currentSchedule = new _Schedule();\n                for (const task of schedule.tasks) {\n                    task();\n                }\n                for (const task of schedule.endTasks) {\n                    task();\n                }\n            }\n            this._currentSchedule = null;\n        });\n    }\n    _getScheduleObservable() {\n        // Use onStable when in the context of an ongoing change detection cycle so that we\n        // do not accidentally trigger additional cycles.\n        return this._ngZone.isStable\n            ? from(Promise.resolve(undefined))\n            : this._ngZone.onStable.pipe(take(1));\n    }\n}\n_CoalescedStyleScheduler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: _CoalescedStyleScheduler, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\n_CoalescedStyleScheduler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: _CoalescedStyleScheduler });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: _CoalescedStyleScheduler, decorators: [{\n            type: Injectable\n        }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The row template that can be used by the mat-table. Should not be used outside of the\n * material library.\n */\nconst CDK_ROW_TEMPLATE = `<ng-container cdkCellOutlet></ng-container>`;\n/**\n * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs\n * for changes and notifying the table.\n */\nclass BaseRowDef {\n    constructor(\n    /** @docs-private */ template, _differs) {\n        this.template = template;\n        this._differs = _differs;\n    }\n    ngOnChanges(changes) {\n        // Create a new columns differ if one does not yet exist. Initialize it based on initial value\n        // of the columns property or an empty array if none is provided.\n        if (!this._columnsDiffer) {\n            const columns = (changes['columns'] && changes['columns'].currentValue) || [];\n            this._columnsDiffer = this._differs.find(columns).create();\n            this._columnsDiffer.diff(columns);\n        }\n    }\n    /**\n     * Returns the difference between the current columns and the columns from the last diff, or null\n     * if there is no difference.\n     */\n    getColumnsDiff() {\n        return this._columnsDiffer.diff(this.columns);\n    }\n    /** Gets this row def's relevant cell template from the provided column def. */\n    extractCellTemplate(column) {\n        if (this instanceof CdkHeaderRowDef) {\n            return column.headerCell.template;\n        }\n        if (this instanceof CdkFooterRowDef) {\n            return column.footerCell.template;\n        }\n        else {\n            return column.cell.template;\n        }\n    }\n}\nBaseRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: BaseRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Directive });\nBaseRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: BaseRowDef, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: BaseRowDef, decorators: [{\n            type: Directive\n        }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }]; } });\n// Boilerplate for applying mixins to CdkHeaderRowDef.\n/** @docs-private */\nclass CdkHeaderRowDefBase extends BaseRowDef {\n}\nconst _CdkHeaderRowDefBase = mixinHasStickyInput(CdkHeaderRowDefBase);\n/**\n * Header row definition for the CDK table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nclass CdkHeaderRowDef extends _CdkHeaderRowDefBase {\n    constructor(template, _differs, _table) {\n        super(template, _differs);\n        this._table = _table;\n    }\n    // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.\n    // Explicitly define it so that the method is called as part of the Angular lifecycle.\n    ngOnChanges(changes) {\n        super.ngOnChanges(changes);\n    }\n}\nCdkHeaderRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkHeaderRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkHeaderRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkHeaderRowDef, selector: \"[cdkHeaderRowDef]\", inputs: { columns: [\"cdkHeaderRowDef\", \"columns\"], sticky: [\"cdkHeaderRowDefSticky\", \"sticky\"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkHeaderRowDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkHeaderRowDef]',\n                    inputs: ['columns: cdkHeaderRowDef', 'sticky: cdkHeaderRowDefSticky'],\n                }]\n        }], ctorParameters: function () {\n        return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n                        type: Inject,\n                        args: [CDK_TABLE]\n                    }, {\n                        type: Optional\n                    }] }];\n    } });\n// Boilerplate for applying mixins to CdkFooterRowDef.\n/** @docs-private */\nclass CdkFooterRowDefBase extends BaseRowDef {\n}\nconst _CdkFooterRowDefBase = mixinHasStickyInput(CdkFooterRowDefBase);\n/**\n * Footer row definition for the CDK table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nclass CdkFooterRowDef extends _CdkFooterRowDefBase {\n    constructor(template, _differs, _table) {\n        super(template, _differs);\n        this._table = _table;\n    }\n    // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.\n    // Explicitly define it so that the method is called as part of the Angular lifecycle.\n    ngOnChanges(changes) {\n        super.ngOnChanges(changes);\n    }\n}\nCdkFooterRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkFooterRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkFooterRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkFooterRowDef, selector: \"[cdkFooterRowDef]\", inputs: { columns: [\"cdkFooterRowDef\", \"columns\"], sticky: [\"cdkFooterRowDefSticky\", \"sticky\"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkFooterRowDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkFooterRowDef]',\n                    inputs: ['columns: cdkFooterRowDef', 'sticky: cdkFooterRowDefSticky'],\n                }]\n        }], ctorParameters: function () {\n        return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n                        type: Inject,\n                        args: [CDK_TABLE]\n                    }, {\n                        type: Optional\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 */\nclass CdkRowDef extends BaseRowDef {\n    // TODO(andrewseguin): Add an input for providing a switch function to determine\n    //   if this template should be used.\n    constructor(template, _differs, _table) {\n        super(template, _differs);\n        this._table = _table;\n    }\n}\nCdkRowDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nCdkRowDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkRowDef, selector: \"[cdkRowDef]\", inputs: { columns: [\"cdkRowDefColumns\", \"columns\"], when: [\"cdkRowDefWhen\", \"when\"] }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkRowDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkRowDef]',\n                    inputs: ['columns: cdkRowDefColumns', 'when: cdkRowDefWhen'],\n                }]\n        }], ctorParameters: function () {\n        return [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n                        type: Inject,\n                        args: [CDK_TABLE]\n                    }, {\n                        type: Optional\n                    }] }];\n    } });\n/**\n * Outlet for rendering cells inside of a row or header row.\n * @docs-private\n */\nclass CdkCellOutlet {\n    constructor(_viewContainer) {\n        this._viewContainer = _viewContainer;\n        CdkCellOutlet.mostRecentCellOutlet = this;\n    }\n    ngOnDestroy() {\n        // If this was the last outlet being rendered in the view, remove the reference\n        // from the static property after it has been destroyed to avoid leaking memory.\n        if (CdkCellOutlet.mostRecentCellOutlet === this) {\n            CdkCellOutlet.mostRecentCellOutlet = null;\n        }\n    }\n}\n/**\n * Static property containing the latest constructed instance of this class.\n * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using\n * createEmbeddedView. After one of these components are created, this property will provide\n * a handle to provide that component's cells and context. After init, the CdkCellOutlet will\n * construct the cells with the provided context.\n */\nCdkCellOutlet.mostRecentCellOutlet = null;\nCdkCellOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkCellOutlet, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkCellOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkCellOutlet, decorators: [{\n            type: Directive,\n            args: [{ selector: '[cdkCellOutlet]' }]\n        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nclass CdkHeaderRow {\n}\nCdkHeaderRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkHeaderRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkHeaderRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkHeaderRow, selector: \"cdk-header-row, tr[cdk-header-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"cdk-header-row\" }, ngImport: i0, template: \"<ng-container cdkCellOutlet></ng-container>\", isInline: true, directives: [{ type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkHeaderRow, decorators: [{\n            type: Component,\n            args: [{\n                    selector: 'cdk-header-row, tr[cdk-header-row]',\n                    template: CDK_ROW_TEMPLATE,\n                    host: {\n                        'class': 'cdk-header-row',\n                        'role': 'row',\n                    },\n                    // See note on CdkTable for explanation on why this uses the default change detection strategy.\n                    // tslint:disable-next-line:validate-decorators\n                    changeDetection: ChangeDetectionStrategy.Default,\n                    encapsulation: ViewEncapsulation.None,\n                }]\n        }] });\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nclass CdkFooterRow {\n}\nCdkFooterRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkFooterRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkFooterRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkFooterRow, selector: \"cdk-footer-row, tr[cdk-footer-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"cdk-footer-row\" }, ngImport: i0, template: \"<ng-container cdkCellOutlet></ng-container>\", isInline: true, directives: [{ type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkFooterRow, decorators: [{\n            type: Component,\n            args: [{\n                    selector: 'cdk-footer-row, tr[cdk-footer-row]',\n                    template: CDK_ROW_TEMPLATE,\n                    host: {\n                        'class': 'cdk-footer-row',\n                        'role': 'row',\n                    },\n                    // See note on CdkTable for explanation on why this uses the default change detection strategy.\n                    // tslint:disable-next-line:validate-decorators\n                    changeDetection: ChangeDetectionStrategy.Default,\n                    encapsulation: ViewEncapsulation.None,\n                }]\n        }] });\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nclass CdkRow {\n}\nCdkRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkRow, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCdkRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkRow, selector: \"cdk-row, tr[cdk-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"cdk-row\" }, ngImport: i0, template: \"<ng-container cdkCellOutlet></ng-container>\", isInline: true, directives: [{ type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkRow, decorators: [{\n            type: Component,\n            args: [{\n                    selector: 'cdk-row, tr[cdk-row]',\n                    template: CDK_ROW_TEMPLATE,\n                    host: {\n                        'class': 'cdk-row',\n                        'role': 'row',\n                    },\n                    // See note on CdkTable for explanation on why this uses the default change detection strategy.\n                    // tslint:disable-next-line:validate-decorators\n                    changeDetection: ChangeDetectionStrategy.Default,\n                    encapsulation: ViewEncapsulation.None,\n                }]\n        }] });\n/** Row that can be used to display a message when no data is shown in the table. */\nclass CdkNoDataRow {\n    constructor(templateRef) {\n        this.templateRef = templateRef;\n        this._contentClassName = 'cdk-no-data-row';\n    }\n}\nCdkNoDataRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkNoDataRow, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkNoDataRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkNoDataRow, selector: \"ng-template[cdkNoDataRow]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkNoDataRow, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'ng-template[cdkNoDataRow]',\n                }]\n        }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * List of all possible directions that can be used for sticky positioning.\n * @docs-private\n */\nconst STICKY_DIRECTIONS = ['top', 'bottom', 'left', 'right'];\n/**\n * Applies and removes sticky positioning styles to the `CdkTable` rows and columns cells.\n * @docs-private\n */\nclass StickyStyler {\n    /**\n     * @param _isNativeHtmlTable Whether the sticky logic should be based on a table\n     *     that uses the native `<table>` element.\n     * @param _stickCellCss The CSS class that will be applied to every row/cell that has\n     *     sticky positioning applied.\n     * @param direction The directionality context of the table (ltr/rtl); affects column positioning\n     *     by reversing left/right positions.\n     * @param _isBrowser Whether the table is currently being rendered on the server or the client.\n     * @param _needsPositionStickyOnElement Whether we need to specify position: sticky on cells\n     *     using inline styles. If false, it is assumed that position: sticky is included in\n     *     the component stylesheet for _stickCellCss.\n     * @param _positionListener A listener that is notified of changes to sticky rows/columns\n     *     and their dimensions.\n     */\n    constructor(_isNativeHtmlTable, _stickCellCss, direction, _coalescedStyleScheduler, _isBrowser = true, _needsPositionStickyOnElement = true, _positionListener) {\n        this._isNativeHtmlTable = _isNativeHtmlTable;\n        this._stickCellCss = _stickCellCss;\n        this.direction = direction;\n        this._coalescedStyleScheduler = _coalescedStyleScheduler;\n        this._isBrowser = _isBrowser;\n        this._needsPositionStickyOnElement = _needsPositionStickyOnElement;\n        this._positionListener = _positionListener;\n        this._cachedCellWidths = [];\n        this._borderCellCss = {\n            'top': `${_stickCellCss}-border-elem-top`,\n            'bottom': `${_stickCellCss}-border-elem-bottom`,\n            'left': `${_stickCellCss}-border-elem-left`,\n            'right': `${_stickCellCss}-border-elem-right`,\n        };\n    }\n    /**\n     * Clears the sticky positioning styles from the row and its cells by resetting the `position`\n     * style, setting the zIndex to 0, and unsetting each provided sticky direction.\n     * @param rows The list of rows that should be cleared from sticking in the provided directions\n     * @param stickyDirections The directions that should no longer be set as sticky on the rows.\n     */\n    clearStickyPositioning(rows, stickyDirections) {\n        const elementsToClear = [];\n        for (const row of rows) {\n            // If the row isn't an element (e.g. if it's an `ng-container`),\n            // it won't have inline styles or `children` so we skip it.\n            if (row.nodeType !== row.ELEMENT_NODE) {\n                continue;\n            }\n            elementsToClear.push(row);\n            for (let i = 0; i < row.children.length; i++) {\n                elementsToClear.push(row.children[i]);\n            }\n        }\n        // Coalesce with sticky row/column updates (and potentially other changes like column resize).\n        this._coalescedStyleScheduler.schedule(() => {\n            for (const element of elementsToClear) {\n                this._removeStickyStyle(element, stickyDirections);\n            }\n        });\n    }\n    /**\n     * Applies sticky left and right positions to the cells of each row according to the sticky\n     * states of the rendered column definitions.\n     * @param rows The rows that should have its set of cells stuck according to the sticky states.\n     * @param stickyStartStates A list of boolean states where each state represents whether the cell\n     *     in this index position should be stuck to the start of the row.\n     * @param stickyEndStates A list of boolean states where each state represents whether the cell\n     *     in this index position should be stuck to the end of the row.\n     * @param recalculateCellWidths Whether the sticky styler should recalculate the width of each\n     *     column cell. If `false` cached widths will be used instead.\n     */\n    updateStickyColumns(rows, stickyStartStates, stickyEndStates, recalculateCellWidths = true) {\n        if (!rows.length ||\n            !this._isBrowser ||\n            !(stickyStartStates.some(state => state) || stickyEndStates.some(state => state))) {\n            if (this._positionListener) {\n                this._positionListener.stickyColumnsUpdated({ sizes: [] });\n                this._positionListener.stickyEndColumnsUpdated({ sizes: [] });\n            }\n            return;\n        }\n        const firstRow = rows[0];\n        const numCells = firstRow.children.length;\n        const cellWidths = this._getCellWidths(firstRow, recalculateCellWidths);\n        const startPositions = this._getStickyStartColumnPositions(cellWidths, stickyStartStates);\n        const endPositions = this._getStickyEndColumnPositions(cellWidths, stickyEndStates);\n        const lastStickyStart = stickyStartStates.lastIndexOf(true);\n        const firstStickyEnd = stickyEndStates.indexOf(true);\n        // Coalesce with sticky row updates (and potentially other changes like column resize).\n        this._coalescedStyleScheduler.schedule(() => {\n            const isRtl = this.direction === 'rtl';\n            const start = isRtl ? 'right' : 'left';\n            const end = isRtl ? 'left' : 'right';\n            for (const row of rows) {\n                for (let i = 0; i < numCells; i++) {\n                    const cell = row.children[i];\n                    if (stickyStartStates[i]) {\n                        this._addStickyStyle(cell, start, startPositions[i], i === lastStickyStart);\n                    }\n                    if (stickyEndStates[i]) {\n                        this._addStickyStyle(cell, end, endPositions[i], i === firstStickyEnd);\n                    }\n                }\n            }\n            if (this._positionListener) {\n                this._positionListener.stickyColumnsUpdated({\n                    sizes: lastStickyStart === -1\n                        ? []\n                        : cellWidths\n                            .slice(0, lastStickyStart + 1)\n                            .map((width, index) => (stickyStartStates[index] ? width : null)),\n                });\n                this._positionListener.stickyEndColumnsUpdated({\n                    sizes: firstStickyEnd === -1\n                        ? []\n                        : cellWidths\n                            .slice(firstStickyEnd)\n                            .map((width, index) => (stickyEndStates[index + firstStickyEnd] ? width : null))\n                            .reverse(),\n                });\n            }\n        });\n    }\n    /**\n     * Applies sticky positioning to the row's cells if using the native table layout, and to the\n     * row itself otherwise.\n     * @param rowsToStick The list of rows that should be stuck according to their corresponding\n     *     sticky state and to the provided top or bottom position.\n     * @param stickyStates A list of boolean states where each state represents whether the row\n     *     should be stuck in the particular top or bottom position.\n     * @param position The position direction in which the row should be stuck if that row should be\n     *     sticky.\n     *\n     */\n    stickRows(rowsToStick, stickyStates, position) {\n        // Since we can't measure the rows on the server, we can't stick the rows properly.\n        if (!this._isBrowser) {\n            return;\n        }\n        // If positioning the rows to the bottom, reverse their order when evaluating the sticky\n        // position such that the last row stuck will be \"bottom: 0px\" and so on. Note that the\n        // sticky states need to be reversed as well.\n        const rows = position === 'bottom' ? rowsToStick.slice().reverse() : rowsToStick;\n        const states = position === 'bottom' ? stickyStates.slice().reverse() : stickyStates;\n        // Measure row heights all at once before adding sticky styles to reduce layout thrashing.\n        const stickyOffsets = [];\n        const stickyCellHeights = [];\n        const elementsToStick = [];\n        for (let rowIndex = 0, stickyOffset = 0; rowIndex < rows.length; rowIndex++) {\n            if (!states[rowIndex]) {\n                continue;\n            }\n            stickyOffsets[rowIndex] = stickyOffset;\n            const row = rows[rowIndex];\n            elementsToStick[rowIndex] = this._isNativeHtmlTable\n                ? Array.from(row.children)\n                : [row];\n            const height = row.getBoundingClientRect().height;\n            stickyOffset += height;\n            stickyCellHeights[rowIndex] = height;\n        }\n        const borderedRowIndex = states.lastIndexOf(true);\n        // Coalesce with other sticky row updates (top/bottom), sticky columns updates\n        // (and potentially other changes like column resize).\n        this._coalescedStyleScheduler.schedule(() => {\n            var _a, _b;\n            for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n                if (!states[rowIndex]) {\n                    continue;\n                }\n                const offset = stickyOffsets[rowIndex];\n                const isBorderedRowIndex = rowIndex === borderedRowIndex;\n                for (const element of elementsToStick[rowIndex]) {\n                    this._addStickyStyle(element, position, offset, isBorderedRowIndex);\n                }\n            }\n            if (position === 'top') {\n                (_a = this._positionListener) === null || _a === void 0 ? void 0 : _a.stickyHeaderRowsUpdated({\n                    sizes: stickyCellHeights,\n                    offsets: stickyOffsets,\n                    elements: elementsToStick,\n                });\n            }\n            else {\n                (_b = this._positionListener) === null || _b === void 0 ? void 0 : _b.stickyFooterRowsUpdated({\n                    sizes: stickyCellHeights,\n                    offsets: stickyOffsets,\n                    elements: elementsToStick,\n                });\n            }\n        });\n    }\n    /**\n     * When using the native table in Safari, sticky footer cells do not stick. The only way to stick\n     * footer rows is to apply sticky styling to the tfoot container. This should only be done if\n     * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from\n     * the tfoot element.\n     */\n    updateStickyFooterContainer(tableElement, stickyStates) {\n        if (!this._isNativeHtmlTable) {\n            return;\n        }\n        const tfoot = tableElement.querySelector('tfoot');\n        // Coalesce with other sticky updates (and potentially other changes like column resize).\n        this._coalescedStyleScheduler.schedule(() => {\n            if (stickyStates.some(state => !state)) {\n                this._removeStickyStyle(tfoot, ['bottom']);\n            }\n            else {\n                this._addStickyStyle(tfoot, 'bottom', 0, false);\n            }\n        });\n    }\n    /**\n     * Removes the sticky style on the element by removing the sticky cell CSS class, re-evaluating\n     * the zIndex, removing each of the provided sticky directions, and removing the\n     * sticky position if there are no more directions.\n     */\n    _removeStickyStyle(element, stickyDirections) {\n        for (const dir of stickyDirections) {\n            element.style[dir] = '';\n            element.classList.remove(this._borderCellCss[dir]);\n        }\n        // If the element no longer has any more sticky directions, remove sticky positioning and\n        // the sticky CSS class.\n        // Short-circuit checking element.style[dir] for stickyDirections as they\n        // were already removed above.\n        const hasDirection = STICKY_DIRECTIONS.some(dir => stickyDirections.indexOf(dir) === -1 && element.style[dir]);\n        if (hasDirection) {\n            element.style.zIndex = this._getCalculatedZIndex(element);\n        }\n        else {\n            // When not hasDirection, _getCalculatedZIndex will always return ''.\n            element.style.zIndex = '';\n            if (this._needsPositionStickyOnElement) {\n                element.style.position = '';\n            }\n            element.classList.remove(this._stickCellCss);\n        }\n    }\n    /**\n     * Adds the sticky styling to the element by adding the sticky style class, changing position\n     * to be sticky (and -webkit-sticky), setting the appropriate zIndex, and adding a sticky\n     * direction and value.\n     */\n    _addStickyStyle(element, dir, dirValue, isBorderElement) {\n        element.classList.add(this._stickCellCss);\n        if (isBorderElement) {\n            element.classList.add(this._borderCellCss[dir]);\n        }\n        element.style[dir] = `${dirValue}px`;\n        element.style.zIndex = this._getCalculatedZIndex(element);\n        if (this._needsPositionStickyOnElement) {\n            element.style.cssText += 'position: -webkit-sticky; position: sticky; ';\n        }\n    }\n    /**\n     * Calculate what the z-index should be for the element, depending on what directions (top,\n     * bottom, left, right) have been set. It should be true that elements with a top direction\n     * should have the highest index since these are elements like a table header. If any of those\n     * elements are also sticky in another direction, then they should appear above other elements\n     * that are only sticky top (e.g. a sticky column on a sticky header). Bottom-sticky elements\n     * (e.g. footer rows) should then be next in the ordering such that they are below the header\n     * but above any non-sticky elements. Finally, left/right sticky elements (e.g. sticky columns)\n     * should minimally increment so that they are above non-sticky elements but below top and bottom\n     * elements.\n     */\n    _getCalculatedZIndex(element) {\n        const zIndexIncrements = {\n            top: 100,\n            bottom: 10,\n            left: 1,\n            right: 1,\n        };\n        let zIndex = 0;\n        // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n        // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n        // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n        for (const dir of STICKY_DIRECTIONS) {\n            if (element.style[dir]) {\n                zIndex += zIndexIncrements[dir];\n            }\n        }\n        return zIndex ? `${zIndex}` : '';\n    }\n    /** Gets the widths for each cell in the provided row. */\n    _getCellWidths(row, recalculateCellWidths = true) {\n        if (!recalculateCellWidths && this._cachedCellWidths.length) {\n            return this._cachedCellWidths;\n        }\n        const cellWidths = [];\n        const firstRowCells = row.children;\n        for (let i = 0; i < firstRowCells.length; i++) {\n            let cell = firstRowCells[i];\n            cellWidths.push(cell.getBoundingClientRect().width);\n        }\n        this._cachedCellWidths = cellWidths;\n        return cellWidths;\n    }\n    /**\n     * Determines the left and right positions of each sticky column cell, which will be the\n     * accumulation of all sticky column cell widths to the left and right, respectively.\n     * Non-sticky cells do not need to have a value set since their positions will not be applied.\n     */\n    _getStickyStartColumnPositions(widths, stickyStates) {\n        const positions = [];\n        let nextPosition = 0;\n        for (let i = 0; i < widths.length; i++) {\n            if (stickyStates[i]) {\n                positions[i] = nextPosition;\n                nextPosition += widths[i];\n            }\n        }\n        return positions;\n    }\n    /**\n     * Determines the left and right positions of each sticky column cell, which will be the\n     * accumulation of all sticky column cell widths to the left and right, respectively.\n     * Non-sticky cells do not need to have a value set since their positions will not be applied.\n     */\n    _getStickyEndColumnPositions(widths, stickyStates) {\n        const positions = [];\n        let nextPosition = 0;\n        for (let i = widths.length; i > 0; i--) {\n            if (stickyStates[i]) {\n                positions[i] = nextPosition;\n                nextPosition += widths[i];\n            }\n        }\n        return positions;\n    }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Returns an error to be thrown when attempting to find an unexisting column.\n * @param id Id whose lookup failed.\n * @docs-private\n */\nfunction getTableUnknownColumnError(id) {\n    return Error(`Could not find column with id \"${id}\".`);\n}\n/**\n * Returns an error to be thrown when two column definitions have the same name.\n * @docs-private\n */\nfunction getTableDuplicateColumnNameError(name) {\n    return Error(`Duplicate column definition name provided: \"${name}\".`);\n}\n/**\n * Returns an error to be thrown when there are multiple rows that are missing a when function.\n * @docs-private\n */\nfunction getTableMultipleDefaultRowDefsError() {\n    return Error(`There can only be one default row without a when predicate function.`);\n}\n/**\n * Returns an error to be thrown when there are no matching row defs for a particular set of data.\n * @docs-private\n */\nfunction getTableMissingMatchingRowDefError(data) {\n    return Error(`Could not find a matching row definition for the` +\n        `provided row data: ${JSON.stringify(data)}`);\n}\n/**\n * Returns an error to be thrown when there is no row definitions present in the content.\n * @docs-private\n */\nfunction getTableMissingRowDefsError() {\n    return Error('Missing definitions for header, footer, and row; ' +\n        'cannot determine which columns should be rendered.');\n}\n/**\n * Returns an error to be thrown when the data source does not match the compatible types.\n * @docs-private\n */\nfunction getTableUnknownDataSourceError() {\n    return Error(`Provided data source did not match an array, Observable, or DataSource`);\n}\n/**\n * Returns an error to be thrown when the text column cannot find a parent table to inject.\n * @docs-private\n */\nfunction getTableTextColumnMissingParentTableError() {\n    return Error(`Text column could not find a parent table for registration.`);\n}\n/**\n * Returns an error to be thrown when a table text column doesn't have a name.\n * @docs-private\n */\nfunction getTableTextColumnMissingNameError() {\n    return Error(`Table text column must have a name.`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** The injection token used to specify the StickyPositioningListener. */\nconst STICKY_POSITIONING_LISTENER = new InjectionToken('CDK_SPL');\n\n/**\n * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with\n * tables that animate rows.\n */\nclass CdkRecycleRows {\n}\nCdkRecycleRows.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkRecycleRows, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nCdkRecycleRows.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkRecycleRows, selector: \"cdk-table[recycleRows], table[cdk-table][recycleRows]\", providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkRecycleRows, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'cdk-table[recycleRows], table[cdk-table][recycleRows]',\n                    providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }],\n                }]\n        }] });\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert data rows.\n * @docs-private\n */\nclass DataRowOutlet {\n    constructor(viewContainer, elementRef) {\n        this.viewContainer = viewContainer;\n        this.elementRef = elementRef;\n    }\n}\nDataRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: DataRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nDataRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: DataRowOutlet, selector: \"[rowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: DataRowOutlet, decorators: [{\n            type: Directive,\n            args: [{ selector: '[rowOutlet]' }]\n        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the header.\n * @docs-private\n */\nclass HeaderRowOutlet {\n    constructor(viewContainer, elementRef) {\n        this.viewContainer = viewContainer;\n        this.elementRef = elementRef;\n    }\n}\nHeaderRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: HeaderRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nHeaderRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: HeaderRowOutlet, selector: \"[headerRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: HeaderRowOutlet, decorators: [{\n            type: Directive,\n            args: [{ selector: '[headerRowOutlet]' }]\n        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the footer.\n * @docs-private\n */\nclass FooterRowOutlet {\n    constructor(viewContainer, elementRef) {\n        this.viewContainer = viewContainer;\n        this.elementRef = elementRef;\n    }\n}\nFooterRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: FooterRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nFooterRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: FooterRowOutlet, selector: \"[footerRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: FooterRowOutlet, decorators: [{\n            type: Directive,\n            args: [{ selector: '[footerRowOutlet]' }]\n        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * Provides a handle for the table to grab the view\n * container's ng-container to insert the no data row.\n * @docs-private\n */\nclass NoDataRowOutlet {\n    constructor(viewContainer, elementRef) {\n        this.viewContainer = viewContainer;\n        this.elementRef = elementRef;\n    }\n}\nNoDataRowOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: NoDataRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nNoDataRowOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.0\", type: NoDataRowOutlet, selector: \"[noDataRowOutlet]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: NoDataRowOutlet, decorators: [{\n            type: Directive,\n            args: [{ selector: '[noDataRowOutlet]' }]\n        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });\n/**\n * The table template that can be used by the mat-table. Should not be used outside of the\n * material library.\n * @docs-private\n */\nconst CDK_TABLE_TEMPLATE = \n// Note that according to MDN, the `caption` element has to be projected as the **first**\n// element in the table. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption\n`\n  <ng-content select=\"caption\"></ng-content>\n  <ng-content select=\"colgroup, col\"></ng-content>\n  <ng-container headerRowOutlet></ng-container>\n  <ng-container rowOutlet></ng-container>\n  <ng-container noDataRowOutlet></ng-container>\n  <ng-container footerRowOutlet></ng-container>\n`;\n/**\n * Class used to conveniently type the embedded view ref for rows with a context.\n * @docs-private\n */\nclass RowViewRef extends EmbeddedViewRef {\n}\n/**\n * A data table that can render a header row, data rows, and a footer row.\n * Uses the dataSource input to determine the data to be rendered. The data can be provided either\n * as a data array, an Observable stream that emits the data array to render, or a DataSource with a\n * connect function that will return an Observable stream that emits the data array to render.\n */\nclass CdkTable {\n    constructor(_differs, _changeDetectorRef, _elementRef, role, _dir, _document, _platform, _viewRepeater, _coalescedStyleScheduler, _viewportRuler, \n    /**\n     * @deprecated `_stickyPositioningListener` parameter to become required.\n     * @breaking-change 13.0.0\n     */\n    _stickyPositioningListener) {\n        this._differs = _differs;\n        this._changeDetectorRef = _changeDetectorRef;\n        this._elementRef = _elementRef;\n        this._dir = _dir;\n        this._platform = _platform;\n        this._viewRepeater = _viewRepeater;\n        this._coalescedStyleScheduler = _coalescedStyleScheduler;\n        this._viewportRuler = _viewportRuler;\n        this._stickyPositioningListener = _stickyPositioningListener;\n        /** Subject that emits when the component has been destroyed. */\n        this._onDestroy = new Subject();\n        /**\n         * Map of all the user's defined columns (header, data, and footer cell template) identified by\n         * name. Collection populated by the column definitions gathered by `ContentChildren` as well as\n         * any custom column definitions added to `_customColumnDefs`.\n         */\n        this._columnDefsByName = new Map();\n        /**\n         * Column definitions that were defined outside of the direct content children of the table.\n         * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n         * column definitions as *its* content child.\n         */\n        this._customColumnDefs = new Set();\n        /**\n         * Data row definitions that were defined outside of the direct content children of the table.\n         * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n         * built-in data rows as *its* content child.\n         */\n        this._customRowDefs = new Set();\n        /**\n         * Header row definitions that were defined outside of the direct content children of the table.\n         * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n         * built-in header rows as *its* content child.\n         */\n        this._customHeaderRowDefs = new Set();\n        /**\n         * Footer row definitions that were defined outside of the direct content children of the table.\n         * These will be defined when, e.g., creating a wrapper around the cdkTable that has a\n         * built-in footer row as *its* content child.\n         */\n        this._customFooterRowDefs = new Set();\n        /**\n         * Whether the header row definition has been changed. Triggers an update to the header row after\n         * content is checked. Initialized as true so that the table renders the initial set of rows.\n         */\n        this._headerRowDefChanged = true;\n        /**\n         * Whether the footer row definition has been changed. Triggers an update to the footer row after\n         * content is checked. Initialized as true so that the table renders the initial set of rows.\n         */\n        this._footerRowDefChanged = true;\n        /**\n         * Whether the sticky column styles need to be updated. Set to `true` when the visible columns\n         * change.\n         */\n        this._stickyColumnStylesNeedReset = true;\n        /**\n         * Whether the sticky styler should recalculate cell widths when applying sticky styles. If\n         * `false`, cached values will be used instead. This is only applicable to tables with\n         * {@link fixedLayout} enabled. For other tables, cell widths will always be recalculated.\n         */\n        this._forceRecalculateCellWidths = true;\n        /**\n         * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing\n         * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with\n         * the cached `RenderRow` objects when possible, the row identity is preserved when the data\n         * and row template matches, which allows the `IterableDiffer` to check rows by reference\n         * and understand which rows are added/moved/removed.\n         *\n         * Implemented as a map of maps where the first key is the `data: T` object and the second is the\n         * `CdkRowDef<T>` object. With the two keys, the cache points to a `RenderRow<T>` object that\n         * contains an array of created pairs. The array is necessary to handle cases where the data\n         * array contains multiple duplicate data objects and each instantiated `RenderRow` must be\n         * stored.\n         */\n        this._cachedRenderRowsMap = new Map();\n        /**\n         * CSS class added to any row or cell that has sticky positioning applied. May be overriden by\n         * table subclasses.\n         */\n        this.stickyCssClass = 'cdk-table-sticky';\n        /**\n         * Whether to manually add positon: sticky to all sticky cell elements. Not needed if\n         * the position is set in a selector associated with the value of stickyCssClass. May be\n         * overridden by table subclasses\n         */\n        this.needsPositionStickyOnElement = true;\n        /** Whether the no data row is currently showing anything. */\n        this._isShowingNoDataRow = false;\n        this._multiTemplateDataRows = false;\n        this._fixedLayout = false;\n        /**\n         * Emits when the table completes rendering a set of data rows based on the latest data from the\n         * data source, even if the set of rows is empty.\n         */\n        this.contentChanged = new EventEmitter();\n        // TODO(andrewseguin): Remove max value as the end index\n        //   and instead calculate the view on init and scroll.\n        /**\n         * Stream containing the latest information on what rows are being displayed on screen.\n         * Can be used by the data source to as a heuristic of what data should be provided.\n         *\n         * @docs-private\n         */\n        this.viewChange = new BehaviorSubject({\n            start: 0,\n            end: Number.MAX_VALUE,\n        });\n        if (!role) {\n            this._elementRef.nativeElement.setAttribute('role', 'table');\n        }\n        this._document = _document;\n        this._isNativeHtmlTable = this._elementRef.nativeElement.nodeName === 'TABLE';\n    }\n    /**\n     * Tracking function that will be used to check the differences in data changes. Used similarly\n     * to `ngFor` `trackBy` function. Optimize row operations by identifying a row based on its data\n     * relative to the function to know if a row should be added/removed/moved.\n     * Accepts a function that takes two parameters, `index` and `item`.\n     */\n    get trackBy() {\n        return this._trackByFn;\n    }\n    set trackBy(fn) {\n        if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {\n            console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}.`);\n        }\n        this._trackByFn = fn;\n    }\n    /**\n     * The table's source of data, which can be provided in three ways (in order of complexity):\n     *   - Simple data array (each object represents one table row)\n     *   - Stream that emits a data array each time the array changes\n     *   - `DataSource` object that implements the connect/disconnect interface.\n     *\n     * If a data array is provided, the table must be notified when the array's objects are\n     * added, removed, or moved. This can be done by calling the `renderRows()` function which will\n     * render the diff since the last table render. If the data array reference is changed, the table\n     * will automatically trigger an update to the rows.\n     *\n     * When providing an Observable stream, the table will trigger an update automatically when the\n     * stream emits a new array of data.\n     *\n     * Finally, when providing a `DataSource` object, the table will use the Observable stream\n     * provided by the connect function and trigger updates when that stream emits new data array\n     * values. During the table's ngOnDestroy or when the data source is removed from the table, the\n     * table will call the DataSource's `disconnect` function (may be useful for cleaning up any\n     * subscriptions registered during the connect process).\n     */\n    get dataSource() {\n        return this._dataSource;\n    }\n    set dataSource(dataSource) {\n        if (this._dataSource !== dataSource) {\n            this._switchDataSource(dataSource);\n        }\n    }\n    /**\n     * Whether to allow multiple rows per data object by evaluating which rows evaluate their 'when'\n     * predicate to true. If `multiTemplateDataRows` is false, which is the default value, then each\n     * dataobject will render the first row that evaluates its when predicate to true, in the order\n     * defined in the table, or otherwise the default row which does not have a when predicate.\n     */\n    get multiTemplateDataRows() {\n        return this._multiTemplateDataRows;\n    }\n    set multiTemplateDataRows(v) {\n        this._multiTemplateDataRows = coerceBooleanProperty(v);\n        // In Ivy if this value is set via a static attribute (e.g. <table multiTemplateDataRows>),\n        // this setter will be invoked before the row outlet has been defined hence the null check.\n        if (this._rowOutlet && this._rowOutlet.viewContainer.length) {\n            this._forceRenderDataRows();\n            this.updateStickyColumnStyles();\n        }\n    }\n    /**\n     * Whether to use a fixed table layout. Enabling this option will enforce consistent column widths\n     * and optimize rendering sticky styles for native tables. No-op for flex tables.\n     */\n    get fixedLayout() {\n        return this._fixedLayout;\n    }\n    set fixedLayout(v) {\n        this._fixedLayout = coerceBooleanProperty(v);\n        // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated.\n        this._forceRecalculateCellWidths = true;\n        this._stickyColumnStylesNeedReset = true;\n    }\n    ngOnInit() {\n        this._setupStickyStyler();\n        if (this._isNativeHtmlTable) {\n            this._applyNativeTableSections();\n        }\n        // Set up the trackBy function so that it uses the `RenderRow` as its identity by default. If\n        // the user has provided a custom trackBy, return the result of that function as evaluated\n        // with the values of the `RenderRow`'s data and index.\n        this._dataDiffer = this._differs.find([]).create((_i, dataRow) => {\n            return this.trackBy ? this.trackBy(dataRow.dataIndex, dataRow.data) : dataRow;\n        });\n        this._viewportRuler\n            .change()\n            .pipe(takeUntil(this._onDestroy))\n            .subscribe(() => {\n            this._forceRecalculateCellWidths = true;\n        });\n    }\n    ngAfterContentChecked() {\n        // Cache the row and column definitions gathered by ContentChildren and programmatic injection.\n        this._cacheRowDefs();\n        this._cacheColumnDefs();\n        // Make sure that the user has at least added header, footer, or data row def.\n        if (!this._headerRowDefs.length &&\n            !this._footerRowDefs.length &&\n            !this._rowDefs.length &&\n            (typeof ngDevMode === 'undefined' || ngDevMode)) {\n            throw getTableMissingRowDefsError();\n        }\n        // Render updates if the list of columns have been changed for the header, row, or footer defs.\n        const columnsChanged = this._renderUpdatedColumns();\n        const rowDefsChanged = columnsChanged || this._headerRowDefChanged || this._footerRowDefChanged;\n        // Ensure sticky column styles are reset if set to `true` elsewhere.\n        this._stickyColumnStylesNeedReset = this._stickyColumnStylesNeedReset || rowDefsChanged;\n        this._forceRecalculateCellWidths = rowDefsChanged;\n        // If the header row definition has been changed, trigger a render to the header row.\n        if (this._headerRowDefChanged) {\n            this._forceRenderHeaderRows();\n            this._headerRowDefChanged = false;\n        }\n        // If the footer row definition has been changed, trigger a render to the footer row.\n        if (this._footerRowDefChanged) {\n            this._forceRenderFooterRows();\n            this._footerRowDefChanged = false;\n        }\n        // If there is a data source and row definitions, connect to the data source unless a\n        // connection has already been made.\n        if (this.dataSource && this._rowDefs.length > 0 && !this._renderChangeSubscription) {\n            this._observeRenderChanges();\n        }\n        else if (this._stickyColumnStylesNeedReset) {\n            // In the above case, _observeRenderChanges will result in updateStickyColumnStyles being\n            // called when it row data arrives. Otherwise, we need to call it proactively.\n            this.updateStickyColumnStyles();\n        }\n        this._checkStickyStates();\n    }\n    ngOnDestroy() {\n        this._rowOutlet.viewContainer.clear();\n        this._noDataRowOutlet.viewContainer.clear();\n        this._headerRowOutlet.viewContainer.clear();\n        this._footerRowOutlet.viewContainer.clear();\n        this._cachedRenderRowsMap.clear();\n        this._onDestroy.next();\n        this._onDestroy.complete();\n        if (isDataSource(this.dataSource)) {\n            this.dataSource.disconnect(this);\n        }\n    }\n    /**\n     * Renders rows based on the table's latest set of data, which was either provided directly as an\n     * input or retrieved through an Observable stream (directly or from a DataSource).\n     * Checks for differences in the data since the last diff to perform only the necessary\n     * changes (add/remove/move rows).\n     *\n     * If the table's data source is a DataSource or Observable, this will be invoked automatically\n     * each time the provided Observable stream emits a new data array. Otherwise if your data is\n     * an array, this function will need to be called to render any changes.\n     */\n    renderRows() {\n        this._renderRows = this._getAllRenderRows();\n        const changes = this._dataDiffer.diff(this._renderRows);\n        if (!changes) {\n            this._updateNoDataRow();\n            this.contentChanged.next();\n            return;\n        }\n        const viewContainer = this._rowOutlet.viewContainer;\n        this._viewRepeater.applyChanges(changes, viewContainer, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record.item, currentIndex), record => record.item.data, (change) => {\n            if (change.operation === 1 /* INSERTED */ && change.context) {\n                this._renderCellTemplateForItem(change.record.item.rowDef, change.context);\n            }\n        });\n        // Update the meta context of a row's context data (index, count, first, last, ...)\n        this._updateRowIndexContext();\n        // Update rows that did not get added/removed/moved but may have had their identity changed,\n        // e.g. if trackBy matched data on some property but the actual data reference changed.\n        changes.forEachIdentityChange((record) => {\n            const rowView = viewContainer.get(record.currentIndex);\n            rowView.context.$implicit = record.item.data;\n        });\n        this._updateNoDataRow();\n        this.updateStickyColumnStyles();\n        this.contentChanged.next();\n    }\n    /** Adds a column definition that was not included as part of the content children. */\n    addColumnDef(columnDef) {\n        this._customColumnDefs.add(columnDef);\n    }\n    /** Removes a column definition that was not included as part of the content children. */\n    removeColumnDef(columnDef) {\n        this._customColumnDefs.delete(columnDef);\n    }\n    /** Adds a row definition that was not included as part of the content children. */\n    addRowDef(rowDef) {\n        this._customRowDefs.add(rowDef);\n    }\n    /** Removes a row definition that was not included as part of the content children. */\n    removeRowDef(rowDef) {\n        this._customRowDefs.delete(rowDef);\n    }\n    /** Adds a header row definition that was not included as part of the content children. */\n    addHeaderRowDef(headerRowDef) {\n        this._customHeaderRowDefs.add(headerRowDef);\n        this._headerRowDefChanged = true;\n    }\n    /** Removes a header row definition that was not included as part of the content children. */\n    removeHeaderRowDef(headerRowDef) {\n        this._customHeaderRowDefs.delete(headerRowDef);\n        this._headerRowDefChanged = true;\n    }\n    /** Adds a footer row definition that was not included as part of the content children. */\n    addFooterRowDef(footerRowDef) {\n        this._customFooterRowDefs.add(footerRowDef);\n        this._footerRowDefChanged = true;\n    }\n    /** Removes a footer row definition that was not included as part of the content children. */\n    removeFooterRowDef(footerRowDef) {\n        this._customFooterRowDefs.delete(footerRowDef);\n        this._footerRowDefChanged = true;\n    }\n    /** Sets a no data row definition that was not included as a part of the content children. */\n    setNoDataRow(noDataRow) {\n        this._customNoDataRow = noDataRow;\n    }\n    /**\n     * Updates the header sticky styles. First resets all applied styles with respect to the cells\n     * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is\n     * automatically called when the header row changes its displayed set of columns, or if its\n     * sticky input changes. May be called manually for cases where the cell content changes outside\n     * of these events.\n     */\n    updateStickyHeaderRowStyles() {\n        const headerRows = this._getRenderedRows(this._headerRowOutlet);\n        const tableElement = this._elementRef.nativeElement;\n        // Hide the thead element if there are no header rows. This is necessary to satisfy\n        // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n        // required child `row`.\n        const thead = tableElement.querySelector('thead');\n        if (thead) {\n            thead.style.display = headerRows.length ? '' : 'none';\n        }\n        const stickyStates = this._headerRowDefs.map(def => def.sticky);\n        this._stickyStyler.clearStickyPositioning(headerRows, ['top']);\n        this._stickyStyler.stickRows(headerRows, stickyStates, 'top');\n        // Reset the dirty state of the sticky input change since it has been used.\n        this._headerRowDefs.forEach(def => def.resetStickyChanged());\n    }\n    /**\n     * Updates the footer sticky styles. First resets all applied styles with respect to the cells\n     * sticking to the bottom. Then, evaluating which cells need to be stuck to the bottom. This is\n     * automatically called when the footer row changes its displayed set of columns, or if its\n     * sticky input changes. May be called manually for cases where the cell content changes outside\n     * of these events.\n     */\n    updateStickyFooterRowStyles() {\n        const footerRows = this._getRenderedRows(this._footerRowOutlet);\n        const tableElement = this._elementRef.nativeElement;\n        // Hide the tfoot element if there are no footer rows. This is necessary to satisfy\n        // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n        // required child `row`.\n        const tfoot = tableElement.querySelector('tfoot');\n        if (tfoot) {\n            tfoot.style.display = footerRows.length ? '' : 'none';\n        }\n        const stickyStates = this._footerRowDefs.map(def => def.sticky);\n        this._stickyStyler.clearStickyPositioning(footerRows, ['bottom']);\n        this._stickyStyler.stickRows(footerRows, stickyStates, 'bottom');\n        this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement, stickyStates);\n        // Reset the dirty state of the sticky input change since it has been used.\n        this._footerRowDefs.forEach(def => def.resetStickyChanged());\n    }\n    /**\n     * Updates the column sticky styles. First resets all applied styles with respect to the cells\n     * sticking to the left and right. Then sticky styles are added for the left and right according\n     * to the column definitions for each cell in each row. This is automatically called when\n     * the data source provides a new set of data or when a column definition changes its sticky\n     * input. May be called manually for cases where the cell content changes outside of these events.\n     */\n    updateStickyColumnStyles() {\n        const headerRows = this._getRenderedRows(this._headerRowOutlet);\n        const dataRows = this._getRenderedRows(this._rowOutlet);\n        const footerRows = this._getRenderedRows(this._footerRowOutlet);\n        // For tables not using a fixed layout, the column widths may change when new rows are rendered.\n        // In a table using a fixed layout, row content won't affect column width, so sticky styles\n        // don't need to be cleared unless either the sticky column config changes or one of the row\n        // defs change.\n        if ((this._isNativeHtmlTable && !this._fixedLayout) || this._stickyColumnStylesNeedReset) {\n            // Clear the left and right positioning from all columns in the table across all rows since\n            // sticky columns span across all table sections (header, data, footer)\n            this._stickyStyler.clearStickyPositioning([...headerRows, ...dataRows, ...footerRows], ['left', 'right']);\n            this._stickyColumnStylesNeedReset = false;\n        }\n        // Update the sticky styles for each header row depending on the def's sticky state\n        headerRows.forEach((headerRow, i) => {\n            this._addStickyColumnStyles([headerRow], this._headerRowDefs[i]);\n        });\n        // Update the sticky styles for each data row depending on its def's sticky state\n        this._rowDefs.forEach(rowDef => {\n            // Collect all the rows rendered with this row definition.\n            const rows = [];\n            for (let i = 0; i < dataRows.length; i++) {\n                if (this._renderRows[i].rowDef === rowDef) {\n                    rows.push(dataRows[i]);\n                }\n            }\n            this._addStickyColumnStyles(rows, rowDef);\n        });\n        // Update the sticky styles for each footer row depending on the def's sticky state\n        footerRows.forEach((footerRow, i) => {\n            this._addStickyColumnStyles([footerRow], this._footerRowDefs[i]);\n        });\n        // Reset the dirty state of the sticky input change since it has been used.\n        Array.from(this._columnDefsByName.values()).forEach(def => def.resetStickyChanged());\n    }\n    /**\n     * Get the list of RenderRow objects to render according to the current list of data and defined\n     * row definitions. If the previous list already contained a particular pair, it should be reused\n     * so that the differ equates their references.\n     */\n    _getAllRenderRows() {\n        const renderRows = [];\n        // Store the cache and create a new one. Any re-used RenderRow objects will be moved into the\n        // new cache while unused ones can be picked up by garbage collection.\n        const prevCachedRenderRows = this._cachedRenderRowsMap;\n        this._cachedRenderRowsMap = new Map();\n        // For each data object, get the list of rows that should be rendered, represented by the\n        // respective `RenderRow` object which is the pair of `data` and `CdkRowDef`.\n        for (let i = 0; i < this._data.length; i++) {\n            let data = this._data[i];\n            const renderRowsForData = this._getRenderRowsForData(data, i, prevCachedRenderRows.get(data));\n            if (!this._cachedRenderRowsMap.has(data)) {\n                this._cachedRenderRowsMap.set(data, new WeakMap());\n            }\n            for (let j = 0; j < renderRowsForData.length; j++) {\n                let renderRow = renderRowsForData[j];\n                const cache = this._cachedRenderRowsMap.get(renderRow.data);\n                if (cache.has(renderRow.rowDef)) {\n                    cache.get(renderRow.rowDef).push(renderRow);\n                }\n                else {\n                    cache.set(renderRow.rowDef, [renderRow]);\n                }\n                renderRows.push(renderRow);\n            }\n        }\n        return renderRows;\n    }\n    /**\n     * Gets a list of `RenderRow<T>` for the provided data object and any `CdkRowDef` objects that\n     * should be rendered for this data. Reuses the cached RenderRow objects if they match the same\n     * `(T, CdkRowDef)` pair.\n     */\n    _getRenderRowsForData(data, dataIndex, cache) {\n        const rowDefs = this._getRowDefs(data, dataIndex);\n        return rowDefs.map(rowDef => {\n            const cachedRenderRows = cache && cache.has(rowDef) ? cache.get(rowDef) : [];\n            if (cachedRenderRows.length) {\n                const dataRow = cachedRenderRows.shift();\n                dataRow.dataIndex = dataIndex;\n                return dataRow;\n            }\n            else {\n                return { data, rowDef, dataIndex };\n            }\n        });\n    }\n    /** Update the map containing the content's column definitions. */\n    _cacheColumnDefs() {\n        this._columnDefsByName.clear();\n        const columnDefs = mergeArrayAndSet(this._getOwnDefs(this._contentColumnDefs), this._customColumnDefs);\n        columnDefs.forEach(columnDef => {\n            if (this._columnDefsByName.has(columnDef.name) &&\n                (typeof ngDevMode === 'undefined' || ngDevMode)) {\n                throw getTableDuplicateColumnNameError(columnDef.name);\n            }\n            this._columnDefsByName.set(columnDef.name, columnDef);\n        });\n    }\n    /** Update the list of all available row definitions that can be used. */\n    _cacheRowDefs() {\n        this._headerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentHeaderRowDefs), this._customHeaderRowDefs);\n        this._footerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentFooterRowDefs), this._customFooterRowDefs);\n        this._rowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentRowDefs), this._customRowDefs);\n        // After all row definitions are determined, find the row definition to be considered default.\n        const defaultRowDefs = this._rowDefs.filter(def => !def.when);\n        if (!this.multiTemplateDataRows &&\n            defaultRowDefs.length > 1 &&\n            (typeof ngDevMode === 'undefined' || ngDevMode)) {\n            throw getTableMultipleDefaultRowDefsError();\n        }\n        this._defaultRowDef = defaultRowDefs[0];\n    }\n    /**\n     * Check if the header, data, or footer rows have changed what columns they want to display or\n     * whether the sticky states have changed for the header or footer. If there is a diff, then\n     * re-render that section.\n     */\n    _renderUpdatedColumns() {\n        const columnsDiffReducer = (acc, def) => acc || !!def.getColumnsDiff();\n        // Force re-render data rows if the list of column definitions have changed.\n        const dataColumnsChanged = this._rowDefs.reduce(columnsDiffReducer, false);\n        if (dataColumnsChanged) {\n            this._forceRenderDataRows();\n        }\n        // Force re-render header/footer rows if the list of column definitions have changed.\n        const headerColumnsChanged = this._headerRowDefs.reduce(columnsDiffReducer, false);\n        if (headerColumnsChanged) {\n            this._forceRenderHeaderRows();\n        }\n        const footerColumnsChanged = this._footerRowDefs.reduce(columnsDiffReducer, false);\n        if (footerColumnsChanged) {\n            this._forceRenderFooterRows();\n        }\n        return dataColumnsChanged || headerColumnsChanged || footerColumnsChanged;\n    }\n    /**\n     * Switch to the provided data source by resetting the data and unsubscribing from the current\n     * render change subscription if one exists. If the data source is null, interpret this by\n     * clearing the row outlet. Otherwise start listening for new data.\n     */\n    _switchDataSource(dataSource) {\n        this._data = [];\n        if (isDataSource(this.dataSource)) {\n            this.dataSource.disconnect(this);\n        }\n        // Stop listening for data from the previous data source.\n        if (this._renderChangeSubscription) {\n            this._renderChangeSubscription.unsubscribe();\n            this._renderChangeSubscription = null;\n        }\n        if (!dataSource) {\n            if (this._dataDiffer) {\n                this._dataDiffer.diff([]);\n            }\n            this._rowOutlet.viewContainer.clear();\n        }\n        this._dataSource = dataSource;\n    }\n    /** Set up a subscription for the data provided by the data source. */\n    _observeRenderChanges() {\n        // If no data source has been set, there is nothing to observe for changes.\n        if (!this.dataSource) {\n            return;\n        }\n        let dataStream;\n        if (isDataSource(this.dataSource)) {\n            dataStream = this.dataSource.connect(this);\n        }\n        else if (isObservable(this.dataSource)) {\n            dataStream = this.dataSource;\n        }\n        else if (Array.isArray(this.dataSource)) {\n            dataStream = of(this.dataSource);\n        }\n        if (dataStream === undefined && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n            throw getTableUnknownDataSourceError();\n        }\n        this._renderChangeSubscription = dataStream\n            .pipe(takeUntil(this._onDestroy))\n            .subscribe(data => {\n            this._data = data || [];\n            this.renderRows();\n        });\n    }\n    /**\n     * Clears any existing content in the header row outlet and creates a new embedded view\n     * in the outlet using the header row definition.\n     */\n    _forceRenderHeaderRows() {\n        // Clear the header row outlet if any content exists.\n        if (this._headerRowOutlet.viewContainer.length > 0) {\n            this._headerRowOutlet.viewContainer.clear();\n        }\n        this._headerRowDefs.forEach((def, i) => this._renderRow(this._headerRowOutlet, def, i));\n        this.updateStickyHeaderRowStyles();\n    }\n    /**\n     * Clears any existing content in the footer row outlet and creates a new embedded view\n     * in the outlet using the footer row definition.\n     */\n    _forceRenderFooterRows() {\n        // Clear the footer row outlet if any content exists.\n        if (this._footerRowOutlet.viewContainer.length > 0) {\n            this._footerRowOutlet.viewContainer.clear();\n        }\n        this._footerRowDefs.forEach((def, i) => this._renderRow(this._footerRowOutlet, def, i));\n        this.updateStickyFooterRowStyles();\n    }\n    /** Adds the sticky column styles for the rows according to the columns' stick states. */\n    _addStickyColumnStyles(rows, rowDef) {\n        const columnDefs = Array.from(rowDef.columns || []).map(columnName => {\n            const columnDef = this._columnDefsByName.get(columnName);\n            if (!columnDef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n                throw getTableUnknownColumnError(columnName);\n            }\n            return columnDef;\n        });\n        const stickyStartStates = columnDefs.map(columnDef => columnDef.sticky);\n        const stickyEndStates = columnDefs.map(columnDef => columnDef.stickyEnd);\n        this._stickyStyler.updateStickyColumns(rows, stickyStartStates, stickyEndStates, !this._fixedLayout || this._forceRecalculateCellWidths);\n    }\n    /** Gets the list of rows that have been rendered in the row outlet. */\n    _getRenderedRows(rowOutlet) {\n        const renderedRows = [];\n        for (let i = 0; i < rowOutlet.viewContainer.length; i++) {\n            const viewRef = rowOutlet.viewContainer.get(i);\n            renderedRows.push(viewRef.rootNodes[0]);\n        }\n        return renderedRows;\n    }\n    /**\n     * Get the matching row definitions that should be used for this row data. If there is only\n     * one row definition, it is returned. Otherwise, find the row definitions that has a when\n     * predicate that returns true with the data. If none return true, return the default row\n     * definition.\n     */\n    _getRowDefs(data, dataIndex) {\n        if (this._rowDefs.length == 1) {\n            return [this._rowDefs[0]];\n        }\n        let rowDefs = [];\n        if (this.multiTemplateDataRows) {\n            rowDefs = this._rowDefs.filter(def => !def.when || def.when(dataIndex, data));\n        }\n        else {\n            let rowDef = this._rowDefs.find(def => def.when && def.when(dataIndex, data)) || this._defaultRowDef;\n            if (rowDef) {\n                rowDefs.push(rowDef);\n            }\n        }\n        if (!rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n            throw getTableMissingMatchingRowDefError(data);\n        }\n        return rowDefs;\n    }\n    _getEmbeddedViewArgs(renderRow, index) {\n        const rowDef = renderRow.rowDef;\n        const context = { $implicit: renderRow.data };\n        return {\n            templateRef: rowDef.template,\n            context,\n            index,\n        };\n    }\n    /**\n     * Creates a new row template in the outlet and fills it with the set of cell templates.\n     * Optionally takes a context to provide to the row and cells, as well as an optional index\n     * of where to place the new row template in the outlet.\n     */\n    _renderRow(outlet, rowDef, index, context = {}) {\n        // TODO(andrewseguin): enforce that one outlet was instantiated from createEmbeddedView\n        const view = outlet.viewContainer.createEmbeddedView(rowDef.template, context, index);\n        this._renderCellTemplateForItem(rowDef, context);\n        return view;\n    }\n    _renderCellTemplateForItem(rowDef, context) {\n        for (let cellTemplate of this._getCellTemplates(rowDef)) {\n            if (CdkCellOutlet.mostRecentCellOutlet) {\n                CdkCellOutlet.mostRecentCellOutlet._viewContainer.createEmbeddedView(cellTemplate, context);\n            }\n        }\n        this._changeDetectorRef.markForCheck();\n    }\n    /**\n     * Updates the index-related context for each row to reflect any changes in the index of the rows,\n     * e.g. first/last/even/odd.\n     */\n    _updateRowIndexContext() {\n        const viewContainer = this._rowOutlet.viewContainer;\n        for (let renderIndex = 0, count = viewContainer.length; renderIndex < count; renderIndex++) {\n            const viewRef = viewContainer.get(renderIndex);\n            const context = viewRef.context;\n            context.count = count;\n            context.first = renderIndex === 0;\n            context.last = renderIndex === count - 1;\n            context.even = renderIndex % 2 === 0;\n            context.odd = !context.even;\n            if (this.multiTemplateDataRows) {\n                context.dataIndex = this._renderRows[renderIndex].dataIndex;\n                context.renderIndex = renderIndex;\n            }\n            else {\n                context.index = this._renderRows[renderIndex].dataIndex;\n            }\n        }\n    }\n    /** Gets the column definitions for the provided row def. */\n    _getCellTemplates(rowDef) {\n        if (!rowDef || !rowDef.columns) {\n            return [];\n        }\n        return Array.from(rowDef.columns, columnId => {\n            const column = this._columnDefsByName.get(columnId);\n            if (!column && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n                throw getTableUnknownColumnError(columnId);\n            }\n            return rowDef.extractCellTemplate(column);\n        });\n    }\n    /** Adds native table sections (e.g. tbody) and moves the row outlets into them. */\n    _applyNativeTableSections() {\n        const documentFragment = this._document.createDocumentFragment();\n        const sections = [\n            { tag: 'thead', outlets: [this._headerRowOutlet] },\n            { tag: 'tbody', outlets: [this._rowOutlet, this._noDataRowOutlet] },\n            { tag: 'tfoot', outlets: [this._footerRowOutlet] },\n        ];\n        for (const section of sections) {\n            const element = this._document.createElement(section.tag);\n            element.setAttribute('role', 'rowgroup');\n            for (const outlet of section.outlets) {\n                element.appendChild(outlet.elementRef.nativeElement);\n            }\n            documentFragment.appendChild(element);\n        }\n        // Use a DocumentFragment so we don't hit the DOM on each iteration.\n        this._elementRef.nativeElement.appendChild(documentFragment);\n    }\n    /**\n     * Forces a re-render of the data rows. Should be called in cases where there has been an input\n     * change that affects the evaluation of which rows should be rendered, e.g. toggling\n     * `multiTemplateDataRows` or adding/removing row definitions.\n     */\n    _forceRenderDataRows() {\n        this._dataDiffer.diff([]);\n        this._rowOutlet.viewContainer.clear();\n        this.renderRows();\n    }\n    /**\n     * Checks if there has been a change in sticky states since last check and applies the correct\n     * sticky styles. Since checking resets the \"dirty\" state, this should only be performed once\n     * during a change detection and after the inputs are settled (after content check).\n     */\n    _checkStickyStates() {\n        const stickyCheckReducer = (acc, d) => {\n            return acc || d.hasStickyChanged();\n        };\n        // Note that the check needs to occur for every definition since it notifies the definition\n        // that it can reset its dirty state. Using another operator like `some` may short-circuit\n        // remaining definitions and leave them in an unchecked state.\n        if (this._headerRowDefs.reduce(stickyCheckReducer, false)) {\n            this.updateStickyHeaderRowStyles();\n        }\n        if (this._footerRowDefs.reduce(stickyCheckReducer, false)) {\n            this.updateStickyFooterRowStyles();\n        }\n        if (Array.from(this._columnDefsByName.values()).reduce(stickyCheckReducer, false)) {\n            this._stickyColumnStylesNeedReset = true;\n            this.updateStickyColumnStyles();\n        }\n    }\n    /**\n     * Creates the sticky styler that will be used for sticky rows and columns. Listens\n     * for directionality changes and provides the latest direction to the styler. Re-applies column\n     * stickiness when directionality changes.\n     */\n    _setupStickyStyler() {\n        const direction = this._dir ? this._dir.value : 'ltr';\n        this._stickyStyler = new StickyStyler(this._isNativeHtmlTable, this.stickyCssClass, direction, this._coalescedStyleScheduler, this._platform.isBrowser, this.needsPositionStickyOnElement, this._stickyPositioningListener);\n        (this._dir ? this._dir.change : of())\n            .pipe(takeUntil(this._onDestroy))\n            .subscribe(value => {\n            this._stickyStyler.direction = value;\n            this.updateStickyColumnStyles();\n        });\n    }\n    /** Filters definitions that belong to this table from a QueryList. */\n    _getOwnDefs(items) {\n        return items.filter(item => !item._table || item._table === this);\n    }\n    /** Creates or removes the no data row, depending on whether any data is being shown. */\n    _updateNoDataRow() {\n        const noDataRow = this._customNoDataRow || this._noDataRow;\n        if (!noDataRow) {\n            return;\n        }\n        const shouldShow = this._rowOutlet.viewContainer.length === 0;\n        if (shouldShow === this._isShowingNoDataRow) {\n            return;\n        }\n        const container = this._noDataRowOutlet.viewContainer;\n        if (shouldShow) {\n            const view = container.createEmbeddedView(noDataRow.templateRef);\n            const rootNode = view.rootNodes[0];\n            // Only add the attributes if we have a single root node since it's hard\n            // to figure out which one to add it to when there are multiple.\n            if (view.rootNodes.length === 1 && (rootNode === null || rootNode === void 0 ? void 0 : rootNode.nodeType) === this._document.ELEMENT_NODE) {\n                rootNode.setAttribute('role', 'row');\n                rootNode.classList.add(noDataRow._contentClassName);\n            }\n        }\n        else {\n            container.clear();\n        }\n        this._isShowingNoDataRow = shouldShow;\n    }\n}\nCdkTable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkTable, deps: [{ token: i0.IterableDiffers }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: 'role', attribute: true }, { token: i1.Directionality, optional: true }, { token: DOCUMENT }, { token: i2.Platform }, { token: _VIEW_REPEATER_STRATEGY }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i3.ViewportRuler }, { token: STICKY_POSITIONING_LISTENER, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });\nCdkTable.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkTable, selector: \"cdk-table, table[cdk-table]\", inputs: { trackBy: \"trackBy\", dataSource: \"dataSource\", multiTemplateDataRows: \"multiTemplateDataRows\", fixedLayout: \"fixedLayout\" }, outputs: { contentChanged: \"contentChanged\" }, host: { properties: { \"class.cdk-table-fixed-layout\": \"fixedLayout\" }, classAttribute: \"cdk-table\" }, providers: [\n        { provide: CDK_TABLE, useExisting: CdkTable },\n        { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n        { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n        // Prevent nested tables from seeing this table's StickyPositioningListener.\n        { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n    ], queries: [{ propertyName: \"_noDataRow\", first: true, predicate: CdkNoDataRow, descendants: true }, { propertyName: \"_contentColumnDefs\", predicate: CdkColumnDef, descendants: true }, { propertyName: \"_contentRowDefs\", predicate: CdkRowDef, descendants: true }, { propertyName: \"_contentHeaderRowDefs\", predicate: CdkHeaderRowDef, descendants: true }, { propertyName: \"_contentFooterRowDefs\", predicate: CdkFooterRowDef, descendants: true }], viewQueries: [{ propertyName: \"_rowOutlet\", first: true, predicate: DataRowOutlet, descendants: true, static: true }, { propertyName: \"_headerRowOutlet\", first: true, predicate: HeaderRowOutlet, descendants: true, static: true }, { propertyName: \"_footerRowOutlet\", first: true, predicate: FooterRowOutlet, descendants: true, static: true }, { propertyName: \"_noDataRowOutlet\", first: true, predicate: NoDataRowOutlet, descendants: true, static: true }], exportAs: [\"cdkTable\"], ngImport: i0, template: \"\\n  <ng-content select=\\\"caption\\\"></ng-content>\\n  <ng-content select=\\\"colgroup, col\\\"></ng-content>\\n  <ng-container headerRowOutlet></ng-container>\\n  <ng-container rowOutlet></ng-container>\\n  <ng-container noDataRowOutlet></ng-container>\\n  <ng-container footerRowOutlet></ng-container>\\n\", isInline: true, styles: [\".cdk-table-fixed-layout{table-layout:fixed}\\n\"], directives: [{ type: HeaderRowOutlet, selector: \"[headerRowOutlet]\" }, { type: DataRowOutlet, selector: \"[rowOutlet]\" }, { type: NoDataRowOutlet, selector: \"[noDataRowOutlet]\" }, { type: FooterRowOutlet, selector: \"[footerRowOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkTable, decorators: [{\n            type: Component,\n            args: [{ selector: 'cdk-table, table[cdk-table]', exportAs: 'cdkTable', template: CDK_TABLE_TEMPLATE, host: {\n                        'class': 'cdk-table',\n                        '[class.cdk-table-fixed-layout]': 'fixedLayout',\n                    }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, providers: [\n                        { provide: CDK_TABLE, useExisting: CdkTable },\n                        { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n                        { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n                        // Prevent nested tables from seeing this table's StickyPositioningListener.\n                        { provide: STICKY_POSITIONING_LISTENER, useValue: null },\n                    ], styles: [\".cdk-table-fixed-layout{table-layout:fixed}\\n\"] }]\n        }], ctorParameters: function () {\n        return [{ type: i0.IterableDiffers }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n                        type: Attribute,\n                        args: ['role']\n                    }] }, { type: i1.Directionality, decorators: [{\n                        type: Optional\n                    }] }, { type: undefined, decorators: [{\n                        type: Inject,\n                        args: [DOCUMENT]\n                    }] }, { type: i2.Platform }, { type: undefined, decorators: [{\n                        type: Inject,\n                        args: [_VIEW_REPEATER_STRATEGY]\n                    }] }, { type: _CoalescedStyleScheduler, decorators: [{\n                        type: Inject,\n                        args: [_COALESCED_STYLE_SCHEDULER]\n                    }] }, { type: i3.ViewportRuler }, { type: undefined, decorators: [{\n                        type: Optional\n                    }, {\n                        type: SkipSelf\n                    }, {\n                        type: Inject,\n                        args: [STICKY_POSITIONING_LISTENER]\n                    }] }];\n    }, propDecorators: { trackBy: [{\n                type: Input\n            }], dataSource: [{\n                type: Input\n            }], multiTemplateDataRows: [{\n                type: Input\n            }], fixedLayout: [{\n                type: Input\n            }], contentChanged: [{\n                type: Output\n            }], _rowOutlet: [{\n                type: ViewChild,\n                args: [DataRowOutlet, { static: true }]\n            }], _headerRowOutlet: [{\n                type: ViewChild,\n                args: [HeaderRowOutlet, { static: true }]\n            }], _footerRowOutlet: [{\n                type: ViewChild,\n                args: [FooterRowOutlet, { static: true }]\n            }], _noDataRowOutlet: [{\n                type: ViewChild,\n                args: [NoDataRowOutlet, { static: true }]\n            }], _contentColumnDefs: [{\n                type: ContentChildren,\n                args: [CdkColumnDef, { descendants: true }]\n            }], _contentRowDefs: [{\n                type: ContentChildren,\n                args: [CdkRowDef, { descendants: true }]\n            }], _contentHeaderRowDefs: [{\n                type: ContentChildren,\n                args: [CdkHeaderRowDef, {\n                        descendants: true,\n                    }]\n            }], _contentFooterRowDefs: [{\n                type: ContentChildren,\n                args: [CdkFooterRowDef, {\n                        descendants: true,\n                    }]\n            }], _noDataRow: [{\n                type: ContentChild,\n                args: [CdkNoDataRow]\n            }] } });\n/** Utility function that gets a merged list of the entries in an array and values of a Set. */\nfunction mergeArrayAndSet(array, set) {\n    return array.concat(Array.from(set));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Column that simply shows text content for the header and row cells. Assumes that the table\n * is using the native table implementation (`<table>`).\n *\n * By default, the name of this column will be the header text and data property accessor.\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\n * input.\n */\nclass CdkTextColumn {\n    constructor(\n    // `CdkTextColumn` is always requiring a table, but we just assert it manually\n    // for better error reporting.\n    // tslint:disable-next-line: lightweight-tokens\n    _table, _options) {\n        this._table = _table;\n        this._options = _options;\n        /** Alignment of the cell values. */\n        this.justify = 'start';\n        this._options = _options || {};\n    }\n    /** Column name that should be used to reference this column. */\n    get name() {\n        return this._name;\n    }\n    set name(name) {\n        this._name = name;\n        // With Ivy, inputs can be initialized before static query results are\n        // available. In that case, we defer the synchronization until \"ngOnInit\" fires.\n        this._syncColumnDefName();\n    }\n    ngOnInit() {\n        this._syncColumnDefName();\n        if (this.headerText === undefined) {\n            this.headerText = this._createDefaultHeaderText();\n        }\n        if (!this.dataAccessor) {\n            this.dataAccessor =\n                this._options.defaultDataAccessor || ((data, name) => data[name]);\n        }\n        if (this._table) {\n            // Provide the cell and headerCell directly to the table with the static `ViewChild` query,\n            // since the columnDef will not pick up its content by the time the table finishes checking\n            // its content and initializing the rows.\n            this.columnDef.cell = this.cell;\n            this.columnDef.headerCell = this.headerCell;\n            this._table.addColumnDef(this.columnDef);\n        }\n        else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n            throw getTableTextColumnMissingParentTableError();\n        }\n    }\n    ngOnDestroy() {\n        if (this._table) {\n            this._table.removeColumnDef(this.columnDef);\n        }\n    }\n    /**\n     * Creates a default header text. Use the options' header text transformation function if one\n     * has been provided. Otherwise simply capitalize the column name.\n     */\n    _createDefaultHeaderText() {\n        const name = this.name;\n        if (!name && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n            throw getTableTextColumnMissingNameError();\n        }\n        if (this._options && this._options.defaultHeaderTextTransform) {\n            return this._options.defaultHeaderTextTransform(name);\n        }\n        return name[0].toUpperCase() + name.slice(1);\n    }\n    /** Synchronizes the column definition name with the text column name. */\n    _syncColumnDefName() {\n        if (this.columnDef) {\n            this.columnDef.name = this.name;\n        }\n    }\n}\nCdkTextColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkTextColumn, deps: [{ token: CdkTable, optional: true }, { token: TEXT_COLUMN_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nCdkTextColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.0\", type: CdkTextColumn, selector: \"cdk-text-column\", inputs: { name: \"name\", headerText: \"headerText\", dataAccessor: \"dataAccessor\", justify: \"justify\" }, viewQueries: [{ propertyName: \"columnDef\", first: true, predicate: CdkColumnDef, descendants: true, static: true }, { propertyName: \"cell\", first: true, predicate: CdkCellDef, descendants: true, static: true }, { propertyName: \"headerCell\", first: true, predicate: CdkHeaderCellDef, descendants: true, static: true }], ngImport: i0, template: `\n    <ng-container cdkColumnDef>\n      <th cdk-header-cell *cdkHeaderCellDef [style.text-align]=\"justify\">\n        {{headerText}}\n      </th>\n      <td cdk-cell *cdkCellDef=\"let data\" [style.text-align]=\"justify\">\n        {{dataAccessor(data, name)}}\n      </td>\n    </ng-container>\n  `, isInline: true, directives: [{ type: CdkColumnDef, selector: \"[cdkColumnDef]\", inputs: [\"sticky\", \"cdkColumnDef\", \"stickyEnd\"] }, { type: CdkHeaderCellDef, selector: \"[cdkHeaderCellDef]\" }, { type: CdkHeaderCell, selector: \"cdk-header-cell, th[cdk-header-cell]\" }, { type: CdkCellDef, selector: \"[cdkCellDef]\" }, { type: CdkCell, selector: \"cdk-cell, td[cdk-cell]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkTextColumn, decorators: [{\n            type: Component,\n            args: [{\n                    selector: 'cdk-text-column',\n                    template: `\n    <ng-container cdkColumnDef>\n      <th cdk-header-cell *cdkHeaderCellDef [style.text-align]=\"justify\">\n        {{headerText}}\n      </th>\n      <td cdk-cell *cdkCellDef=\"let data\" [style.text-align]=\"justify\">\n        {{dataAccessor(data, name)}}\n      </td>\n    </ng-container>\n  `,\n                    encapsulation: ViewEncapsulation.None,\n                    // Change detection is intentionally not set to OnPush. This component's template will be provided\n                    // to the table to be inserted into its view. This is problematic when change detection runs since\n                    // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n                    // mean's the template in the table's view will not have the updated value (and in fact will cause\n                    // an ExpressionChangedAfterItHasBeenCheckedError).\n                    // tslint:disable-next-line:validate-decorators\n                    changeDetection: ChangeDetectionStrategy.Default,\n                }]\n        }], ctorParameters: function () {\n        return [{ type: CdkTable, decorators: [{\n                        type: Optional\n                    }] }, { type: undefined, decorators: [{\n                        type: Optional\n                    }, {\n                        type: Inject,\n                        args: [TEXT_COLUMN_OPTIONS]\n                    }] }];\n    }, propDecorators: { name: [{\n                type: Input\n            }], headerText: [{\n                type: Input\n            }], dataAccessor: [{\n                type: Input\n            }], justify: [{\n                type: Input\n            }], columnDef: [{\n                type: ViewChild,\n                args: [CdkColumnDef, { static: true }]\n            }], cell: [{\n                type: ViewChild,\n                args: [CdkCellDef, { static: true }]\n            }], headerCell: [{\n                type: ViewChild,\n                args: [CdkHeaderCellDef, { static: true }]\n            }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst EXPORTED_DECLARATIONS = [\n    CdkTable,\n    CdkRowDef,\n    CdkCellDef,\n    CdkCellOutlet,\n    CdkHeaderCellDef,\n    CdkFooterCellDef,\n    CdkColumnDef,\n    CdkCell,\n    CdkRow,\n    CdkHeaderCell,\n    CdkFooterCell,\n    CdkHeaderRow,\n    CdkHeaderRowDef,\n    CdkFooterRow,\n    CdkFooterRowDef,\n    DataRowOutlet,\n    HeaderRowOutlet,\n    FooterRowOutlet,\n    CdkTextColumn,\n    CdkNoDataRow,\n    CdkRecycleRows,\n    NoDataRowOutlet,\n];\nclass CdkTableModule {\n}\nCdkTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCdkTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkTableModule, declarations: [CdkTable,\n        CdkRowDef,\n        CdkCellDef,\n        CdkCellOutlet,\n        CdkHeaderCellDef,\n        CdkFooterCellDef,\n        CdkColumnDef,\n        CdkCell,\n        CdkRow,\n        CdkHeaderCell,\n        CdkFooterCell,\n        CdkHeaderRow,\n        CdkHeaderRowDef,\n        CdkFooterRow,\n        CdkFooterRowDef,\n        DataRowOutlet,\n        HeaderRowOutlet,\n        FooterRowOutlet,\n        CdkTextColumn,\n        CdkNoDataRow,\n        CdkRecycleRows,\n        NoDataRowOutlet], imports: [ScrollingModule], exports: [CdkTable,\n        CdkRowDef,\n        CdkCellDef,\n        CdkCellOutlet,\n        CdkHeaderCellDef,\n        CdkFooterCellDef,\n        CdkColumnDef,\n        CdkCell,\n        CdkRow,\n        CdkHeaderCell,\n        CdkFooterCell,\n        CdkHeaderRow,\n        CdkHeaderRowDef,\n        CdkFooterRow,\n        CdkFooterRowDef,\n        DataRowOutlet,\n        HeaderRowOutlet,\n        FooterRowOutlet,\n        CdkTextColumn,\n        CdkNoDataRow,\n        CdkRecycleRows,\n        NoDataRowOutlet] });\nCdkTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkTableModule, imports: [[ScrollingModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: CdkTableModule, decorators: [{\n            type: NgModule,\n            args: [{\n                    exports: EXPORTED_DECLARATIONS,\n                    declarations: EXPORTED_DECLARATIONS,\n                    imports: [ScrollingModule],\n                }]\n        }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BaseCdkCell, BaseRowDef, CDK_ROW_TEMPLATE, CDK_TABLE, CDK_TABLE_TEMPLATE, CdkCell, CdkCellDef, CdkCellOutlet, CdkColumnDef, CdkFooterCell, CdkFooterCellDef, CdkFooterRow, CdkFooterRowDef, CdkHeaderCell, CdkHeaderCellDef, CdkHeaderRow, CdkHeaderRowDef, CdkNoDataRow, CdkRecycleRows, CdkRow, CdkRowDef, CdkTable, CdkTableModule, CdkTextColumn, DataRowOutlet, FooterRowOutlet, HeaderRowOutlet, NoDataRowOutlet, STICKY_DIRECTIONS, STICKY_POSITIONING_LISTENER, StickyStyler, TEXT_COLUMN_OPTIONS, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, _Schedule, mixinHasStickyInput };\n"]},"metadata":{},"sourceType":"module"}