{"ast":null,"code":"import * as i1 from '@angular/cdk/bidi';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, isDataSource, _ViewRepeaterOperation, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nexport { DataSource } from '@angular/cdk/collections';\nimport * as i2 from '@angular/cdk/platform';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, booleanAttribute, Inject, Optional, Input, ContentChild, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, inject, EmbeddedViewRef, EventEmitter, NgZone, Attribute, SkipSelf, Output, ContentChildren, ViewChild, NgModule } from '@angular/core';\nimport { Subject, from, BehaviorSubject, isObservable, of } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n/**\n * Used to provide a table to some of the sub-components without causing a circular dependency.\n * @docs-private\n */\nconst _c0 = [[[\"caption\"]], [[\"colgroup\"], [\"col\"]], \"*\"];\nconst _c1 = [\"caption\", \"colgroup, col\", \"*\"];\nfunction CdkTable_Conditional_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵprojection(0, 2);\n  }\n}\nfunction CdkTable_Conditional_3_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"thead\", 0);\n    i0.ɵɵelementContainer(1, 1);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(2, \"tbody\", 0);\n    i0.ɵɵelementContainer(3, 2)(4, 3);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(5, \"tfoot\", 0);\n    i0.ɵɵelementContainer(6, 4);\n    i0.ɵɵelementEnd();\n  }\n}\nfunction CdkTable_Conditional_4_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementContainer(0, 1)(1, 2)(2, 3)(3, 4);\n  }\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  if (rf & 2) {\n    const ctx_r0 = i0.ɵɵnextContext();\n    i0.ɵɵstyleProp(\"text-align\", ctx_r0.justify);\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate1(\" \", ctx_r0.headerText, \" \");\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  if (rf & 2) {\n    const data_r2 = ctx.$implicit;\n    const ctx_r0 = i0.ɵɵnextContext();\n    i0.ɵɵstyleProp(\"text-align\", ctx_r0.justify);\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate1(\" \", ctx_r0.dataAccessor(data_r2, ctx_r0.name), \" \");\n  }\n}\nconst CDK_TABLE = /*#__PURE__*/new InjectionToken('CDK_TABLE');\n/** Injection token that can be used to specify the text column options. */\nconst TEXT_COLUMN_OPTIONS = /*#__PURE__*/new InjectionToken('text-column-options');\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 */\nlet CdkCellDef = /*#__PURE__*/(() => {\n  class CdkCellDef {\n    constructor( /** @docs-private */template) {\n      this.template = template;\n    }\n    static #_ = this.ɵfac = function CdkCellDef_Factory(t) {\n      return new (t || CdkCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkCellDef,\n      selectors: [[\"\", \"cdkCellDef\", \"\"]],\n      standalone: true\n    });\n  }\n  return CdkCellDef;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 */\nlet CdkHeaderCellDef = /*#__PURE__*/(() => {\n  class CdkHeaderCellDef {\n    constructor( /** @docs-private */template) {\n      this.template = template;\n    }\n    static #_ = this.ɵfac = function CdkHeaderCellDef_Factory(t) {\n      return new (t || CdkHeaderCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkHeaderCellDef,\n      selectors: [[\"\", \"cdkHeaderCellDef\", \"\"]],\n      standalone: true\n    });\n  }\n  return CdkHeaderCellDef;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 */\nlet CdkFooterCellDef = /*#__PURE__*/(() => {\n  class CdkFooterCellDef {\n    constructor( /** @docs-private */template) {\n      this.template = template;\n    }\n    static #_ = this.ɵfac = function CdkFooterCellDef_Factory(t) {\n      return new (t || CdkFooterCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkFooterCellDef,\n      selectors: [[\"\", \"cdkFooterCellDef\", \"\"]],\n      standalone: true\n    });\n  }\n  return CdkFooterCellDef;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Column definition for the CDK table.\n * Defines a set of cells available for a table column.\n */\nlet CdkColumnDef = /*#__PURE__*/(() => {\n  class CdkColumnDef {\n    /** Unique name for this column. */\n    get name() {\n      return this._name;\n    }\n    set name(name) {\n      this._setNameInput(name);\n    }\n    /** Whether the cell is sticky. */\n    get sticky() {\n      return this._sticky;\n    }\n    set sticky(value) {\n      if (value !== this._sticky) {\n        this._sticky = value;\n        this._hasStickyChanged = true;\n      }\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(value) {\n      if (value !== this._stickyEnd) {\n        this._stickyEnd = value;\n        this._hasStickyChanged = true;\n      }\n    }\n    constructor(_table) {\n      this._table = _table;\n      this._hasStickyChanged = false;\n      this._sticky = false;\n      this._stickyEnd = false;\n    }\n    /** Whether the sticky state has changed. */\n    hasStickyChanged() {\n      const hasStickyChanged = this._hasStickyChanged;\n      this.resetStickyChanged();\n      return hasStickyChanged;\n    }\n    /** Resets the sticky changed state. */\n    resetStickyChanged() {\n      this._hasStickyChanged = false;\n    }\n    /**\n     * Overridable method that sets the css classes that will be added to every cell in this\n     * column.\n     * In the future, columnCssClassName will change from type string[] to string and this\n     * will set a single string value.\n     * @docs-private\n     */\n    _updateColumnCssClassName() {\n      this._columnCssClassName = [`cdk-column-${this.cssClassFriendlyName}`];\n    }\n    /**\n     * This has been extracted to a util because of TS 4 and VE.\n     * View Engine doesn't support property rename inheritance.\n     * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n     * @docs-private\n     */\n    _setNameInput(value) {\n      // If the directive is set without a name (updated programmatically), then this setter will\n      // trigger with an empty string and should not overwrite the programmatically set value.\n      if (value) {\n        this._name = value;\n        this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-');\n        this._updateColumnCssClassName();\n      }\n    }\n    static #_ = this.ɵfac = function CdkColumnDef_Factory(t) {\n      return new (t || CdkColumnDef)(i0.ɵɵdirectiveInject(CDK_TABLE, 8));\n    };\n    static #_2 = this.ɵ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        if (rf & 2) {\n          let _t;\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        name: [i0.ɵɵInputFlags.None, \"cdkColumnDef\", \"name\"],\n        sticky: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"sticky\", \"sticky\", booleanAttribute],\n        stickyEnd: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"stickyEnd\", \"stickyEnd\", booleanAttribute]\n      },\n      standalone: true,\n      features: [i0.ɵɵProvidersFeature([{\n        provide: 'MAT_SORT_HEADER_COLUMN_DEF',\n        useExisting: CdkColumnDef\n      }]), i0.ɵɵInputTransformsFeature]\n    });\n  }\n  return CdkColumnDef;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */\nclass BaseCdkCell {\n  constructor(columnDef, elementRef) {\n    elementRef.nativeElement.classList.add(...columnDef._columnCssClassName);\n  }\n}\n/** Header cell template container that adds the right classes and role. */\nlet CdkHeaderCell = /*#__PURE__*/(() => {\n  class CdkHeaderCell extends BaseCdkCell {\n    constructor(columnDef, elementRef) {\n      super(columnDef, elementRef);\n    }\n    static #_ = this.ɵfac = function CdkHeaderCell_Factory(t) {\n      return new (t || CdkHeaderCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n    };\n    static #_2 = this.ɵ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      standalone: true,\n      features: [i0.ɵɵInheritDefinitionFeature]\n    });\n  }\n  return CdkHeaderCell;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Footer cell template container that adds the right classes and role. */\nlet CdkFooterCell = /*#__PURE__*/(() => {\n  class CdkFooterCell extends BaseCdkCell {\n    constructor(columnDef, elementRef) {\n      super(columnDef, elementRef);\n      const role = columnDef._table?._getCellRole();\n      if (role) {\n        elementRef.nativeElement.setAttribute('role', role);\n      }\n    }\n    static #_ = this.ɵfac = function CdkFooterCell_Factory(t) {\n      return new (t || CdkFooterCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkFooterCell,\n      selectors: [[\"cdk-footer-cell\"], [\"td\", \"cdk-footer-cell\", \"\"]],\n      hostAttrs: [1, \"cdk-footer-cell\"],\n      standalone: true,\n      features: [i0.ɵɵInheritDefinitionFeature]\n    });\n  }\n  return CdkFooterCell;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Cell template container that adds the right classes and role. */\nlet CdkCell = /*#__PURE__*/(() => {\n  class CdkCell extends BaseCdkCell {\n    constructor(columnDef, elementRef) {\n      super(columnDef, elementRef);\n      const role = columnDef._table?._getCellRole();\n      if (role) {\n        elementRef.nativeElement.setAttribute('role', role);\n      }\n    }\n    static #_ = this.ɵfac = function CdkCell_Factory(t) {\n      return new (t || CdkCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkCell,\n      selectors: [[\"cdk-cell\"], [\"td\", \"cdk-cell\", \"\"]],\n      hostAttrs: [1, \"cdk-cell\"],\n      standalone: true,\n      features: [i0.ɵɵInheritDefinitionFeature]\n    });\n  }\n  return CdkCell;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\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 = /*#__PURE__*/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 */\nlet _CoalescedStyleScheduler = /*#__PURE__*/(() => {\n  class _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().pipe(takeUntil(this._destroyed)).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 ? from(Promise.resolve(undefined)) : this._ngZone.onStable.pipe(take(1));\n    }\n    static #_ = this.ɵfac = function _CoalescedStyleScheduler_Factory(t) {\n      return new (t || _CoalescedStyleScheduler)(i0.ɵɵinject(i0.NgZone));\n    };\n    static #_2 = this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n      token: _CoalescedStyleScheduler,\n      factory: _CoalescedStyleScheduler.ɵfac\n    });\n  }\n  return _CoalescedStyleScheduler;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 */\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 */\nlet BaseRowDef = /*#__PURE__*/(() => {\n  class BaseRowDef {\n    constructor( /** @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      } else {\n        return column.cell.template;\n      }\n    }\n    static #_ = this.ɵfac = function BaseRowDef_Factory(t) {\n      return new (t || BaseRowDef)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: BaseRowDef,\n      features: [i0.ɵɵNgOnChangesFeature]\n    });\n  }\n  return BaseRowDef;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Header row definition for the CDK table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nlet CdkHeaderRowDef = /*#__PURE__*/(() => {\n  class CdkHeaderRowDef extends BaseRowDef {\n    /** Whether the row is sticky. */\n    get sticky() {\n      return this._sticky;\n    }\n    set sticky(value) {\n      if (value !== this._sticky) {\n        this._sticky = value;\n        this._hasStickyChanged = true;\n      }\n    }\n    constructor(template, _differs, _table) {\n      super(template, _differs);\n      this._table = _table;\n      this._hasStickyChanged = false;\n      this._sticky = false;\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    /** Whether the sticky state has changed. */\n    hasStickyChanged() {\n      const hasStickyChanged = this._hasStickyChanged;\n      this.resetStickyChanged();\n      return hasStickyChanged;\n    }\n    /** Resets the sticky changed state. */\n    resetStickyChanged() {\n      this._hasStickyChanged = false;\n    }\n    static #_ = this.ɵ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    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkHeaderRowDef,\n      selectors: [[\"\", \"cdkHeaderRowDef\", \"\"]],\n      inputs: {\n        columns: [i0.ɵɵInputFlags.None, \"cdkHeaderRowDef\", \"columns\"],\n        sticky: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"cdkHeaderRowDefSticky\", \"sticky\", booleanAttribute]\n      },\n      standalone: true,\n      features: [i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n    });\n  }\n  return CdkHeaderRowDef;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Footer row definition for the CDK table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nlet CdkFooterRowDef = /*#__PURE__*/(() => {\n  class CdkFooterRowDef extends BaseRowDef {\n    /** Whether the row is sticky. */\n    get sticky() {\n      return this._sticky;\n    }\n    set sticky(value) {\n      if (value !== this._sticky) {\n        this._sticky = value;\n        this._hasStickyChanged = true;\n      }\n    }\n    constructor(template, _differs, _table) {\n      super(template, _differs);\n      this._table = _table;\n      this._hasStickyChanged = false;\n      this._sticky = false;\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    /** Whether the sticky state has changed. */\n    hasStickyChanged() {\n      const hasStickyChanged = this._hasStickyChanged;\n      this.resetStickyChanged();\n      return hasStickyChanged;\n    }\n    /** Resets the sticky changed state. */\n    resetStickyChanged() {\n      this._hasStickyChanged = false;\n    }\n    static #_ = this.ɵ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    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkFooterRowDef,\n      selectors: [[\"\", \"cdkFooterRowDef\", \"\"]],\n      inputs: {\n        columns: [i0.ɵɵInputFlags.None, \"cdkFooterRowDef\", \"columns\"],\n        sticky: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"cdkFooterRowDefSticky\", \"sticky\", booleanAttribute]\n      },\n      standalone: true,\n      features: [i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n    });\n  }\n  return CdkFooterRowDef;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 */\nlet CdkRowDef = /*#__PURE__*/(() => {\n  class 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    static #_ = this.ɵ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    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkRowDef,\n      selectors: [[\"\", \"cdkRowDef\", \"\"]],\n      inputs: {\n        columns: [i0.ɵɵInputFlags.None, \"cdkRowDefColumns\", \"columns\"],\n        when: [i0.ɵɵInputFlags.None, \"cdkRowDefWhen\", \"when\"]\n      },\n      standalone: true,\n      features: [i0.ɵɵInheritDefinitionFeature]\n    });\n  }\n  return CdkRowDef;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Outlet for rendering cells inside of a row or header row.\n * @docs-private\n */\nlet CdkCellOutlet = /*#__PURE__*/(() => {\n  class CdkCellOutlet {\n    /**\n     * Static property containing the latest constructed instance of this class.\n     * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using\n     * createEmbeddedView. After one of these components are created, this property will provide\n     * a handle to provide that component's cells and context. After init, the CdkCellOutlet will\n     * construct the cells with the provided context.\n     */\n    static #_ = this.mostRecentCellOutlet = null;\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    static #_2 = this.ɵfac = function CdkCellOutlet_Factory(t) {\n      return new (t || CdkCellOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n    };\n    static #_3 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkCellOutlet,\n      selectors: [[\"\", \"cdkCellOutlet\", \"\"]],\n      standalone: true\n    });\n  }\n  return CdkCellOutlet;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nlet CdkHeaderRow = /*#__PURE__*/(() => {\n  class CdkHeaderRow {\n    static #_ = this.ɵfac = function CdkHeaderRow_Factory(t) {\n      return new (t || CdkHeaderRow)();\n    };\n    static #_2 = this.ɵ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      standalone: true,\n      features: [i0.ɵɵStandaloneFeature],\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      dependencies: [CdkCellOutlet],\n      encapsulation: 2\n    });\n  }\n  return CdkHeaderRow;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nlet CdkFooterRow = /*#__PURE__*/(() => {\n  class CdkFooterRow {\n    static #_ = this.ɵfac = function CdkFooterRow_Factory(t) {\n      return new (t || CdkFooterRow)();\n    };\n    static #_2 = this.ɵ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      standalone: true,\n      features: [i0.ɵɵStandaloneFeature],\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      dependencies: [CdkCellOutlet],\n      encapsulation: 2\n    });\n  }\n  return CdkFooterRow;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nlet CdkRow = /*#__PURE__*/(() => {\n  class CdkRow {\n    static #_ = this.ɵfac = function CdkRow_Factory(t) {\n      return new (t || CdkRow)();\n    };\n    static #_2 = this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: CdkRow,\n      selectors: [[\"cdk-row\"], [\"tr\", \"cdk-row\", \"\"]],\n      hostAttrs: [\"role\", \"row\", 1, \"cdk-row\"],\n      standalone: true,\n      features: [i0.ɵɵStandaloneFeature],\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      dependencies: [CdkCellOutlet],\n      encapsulation: 2\n    });\n  }\n  return CdkRow;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Row that can be used to display a message when no data is shown in the table. */\nlet CdkNoDataRow = /*#__PURE__*/(() => {\n  class CdkNoDataRow {\n    constructor(templateRef) {\n      this.templateRef = templateRef;\n      this._contentClassName = 'cdk-no-data-row';\n    }\n    static #_ = this.ɵfac = function CdkNoDataRow_Factory(t) {\n      return new (t || CdkNoDataRow)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkNoDataRow,\n      selectors: [[\"ng-template\", \"cdkNoDataRow\", \"\"]],\n      standalone: true\n    });\n  }\n  return CdkNoDataRow;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\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 || !this._isBrowser || !(stickyStartStates.some(state => state) || stickyEndStates.some(state => state))) {\n      if (this._positionListener) {\n        this._positionListener.stickyColumnsUpdated({\n          sizes: []\n        });\n        this._positionListener.stickyEndColumnsUpdated({\n          sizes: []\n        });\n      }\n      return;\n    }\n    // Coalesce with sticky row updates (and potentially other changes like column resize).\n    this._coalescedStyleScheduler.schedule(() => {\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      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 ? [] : cellWidths.slice(0, lastStickyStart + 1).map((width, index) => stickyStartStates[index] ? width : null)\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  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    // Coalesce with other sticky row updates (top/bottom), sticky columns updates\n    // (and potentially other changes like column resize).\n    this._coalescedStyleScheduler.schedule(() => {\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 ? Array.from(row.children) : [row];\n        const height = row.getBoundingClientRect().height;\n        stickyOffset += height;\n        stickyCellHeights[rowIndex] = height;\n      }\n      const borderedRowIndex = states.lastIndexOf(true);\n      for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n        if (!states[rowIndex]) {\n          continue;\n        }\n        const offset = stickyOffsets[rowIndex];\n        const isBorderedRowIndex = rowIndex === borderedRowIndex;\n        for (const element of elementsToStick[rowIndex]) {\n          this._addStickyStyle(element, position, offset, isBorderedRowIndex);\n        }\n      }\n      if (position === 'top') {\n        this._positionListener?.stickyHeaderRowsUpdated({\n          sizes: stickyCellHeights,\n          offsets: stickyOffsets,\n          elements: elementsToStick\n        });\n      } else {\n        this._positionListener?.stickyFooterRowsUpdated({\n          sizes: stickyCellHeights,\n          offsets: stickyOffsets,\n          elements: elementsToStick\n        });\n      }\n    });\n  }\n  /**\n   * When using the native table in Safari, sticky footer cells do not stick. The only way to stick\n   * footer rows is to apply sticky styling to the tfoot container. This should only be done if\n   * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from\n   * the tfoot element.\n   */\n  updateStickyFooterContainer(tableElement, stickyStates) {\n    if (!this._isNativeHtmlTable) {\n      return;\n    }\n    // Coalesce with other sticky updates (and potentially other changes like column resize).\n    this._coalescedStyleScheduler.schedule(() => {\n      const tfoot = tableElement.querySelector('tfoot');\n      if (tfoot) {\n        if (stickyStates.some(state => !state)) {\n          this._removeStickyStyle(tfoot, ['bottom']);\n        } else {\n          this._addStickyStyle(tfoot, 'bottom', 0, false);\n        }\n      }\n    });\n  }\n  /**\n   * 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    } 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 * Returns an error to be thrown when attempting to find an nonexistent column.\n * @param id Id whose lookup failed.\n * @docs-private\n */\nfunction getTableUnknownColumnError(id) {\n  return Error(`Could not find column with id \"${id}\".`);\n}\n/**\n * Returns an error to be thrown when two column definitions have the same name.\n * @docs-private\n */\nfunction getTableDuplicateColumnNameError(name) {\n  return Error(`Duplicate column definition name provided: \"${name}\".`);\n}\n/**\n * Returns an error to be thrown when there are multiple rows that are missing a when function.\n * @docs-private\n */\nfunction getTableMultipleDefaultRowDefsError() {\n  return Error(`There can only be one default row without a when predicate function.`);\n}\n/**\n * Returns an error to be thrown when there are no matching row defs for a particular set of data.\n * @docs-private\n */\nfunction getTableMissingMatchingRowDefError(data) {\n  return Error(`Could not find a matching row definition for the` + `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; ' + '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/** The injection token used to specify the StickyPositioningListener. */\nconst STICKY_POSITIONING_LISTENER = /*#__PURE__*/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 */\nlet CdkRecycleRows = /*#__PURE__*/(() => {\n  class CdkRecycleRows {\n    static #_ = this.ɵfac = function CdkRecycleRows_Factory(t) {\n      return new (t || CdkRecycleRows)();\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkRecycleRows,\n      selectors: [[\"cdk-table\", \"recycleRows\", \"\"], [\"table\", \"cdk-table\", \"\", \"recycleRows\", \"\"]],\n      standalone: true,\n      features: [i0.ɵɵProvidersFeature([{\n        provide: _VIEW_REPEATER_STRATEGY,\n        useClass: _RecycleViewRepeaterStrategy\n      }])]\n    });\n  }\n  return CdkRecycleRows;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 */\nlet DataRowOutlet = /*#__PURE__*/(() => {\n  class DataRowOutlet {\n    constructor(viewContainer, elementRef) {\n      this.viewContainer = viewContainer;\n      this.elementRef = elementRef;\n      const table = inject(CDK_TABLE);\n      table._rowOutlet = this;\n      table._outletAssigned();\n    }\n    static #_ = this.ɵfac = function DataRowOutlet_Factory(t) {\n      return new (t || DataRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: DataRowOutlet,\n      selectors: [[\"\", \"rowOutlet\", \"\"]],\n      standalone: true\n    });\n  }\n  return DataRowOutlet;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 */\nlet HeaderRowOutlet = /*#__PURE__*/(() => {\n  class HeaderRowOutlet {\n    constructor(viewContainer, elementRef) {\n      this.viewContainer = viewContainer;\n      this.elementRef = elementRef;\n      const table = inject(CDK_TABLE);\n      table._headerRowOutlet = this;\n      table._outletAssigned();\n    }\n    static #_ = this.ɵfac = function HeaderRowOutlet_Factory(t) {\n      return new (t || HeaderRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: HeaderRowOutlet,\n      selectors: [[\"\", \"headerRowOutlet\", \"\"]],\n      standalone: true\n    });\n  }\n  return HeaderRowOutlet;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 */\nlet FooterRowOutlet = /*#__PURE__*/(() => {\n  class FooterRowOutlet {\n    constructor(viewContainer, elementRef) {\n      this.viewContainer = viewContainer;\n      this.elementRef = elementRef;\n      const table = inject(CDK_TABLE);\n      table._footerRowOutlet = this;\n      table._outletAssigned();\n    }\n    static #_ = this.ɵfac = function FooterRowOutlet_Factory(t) {\n      return new (t || FooterRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: FooterRowOutlet,\n      selectors: [[\"\", \"footerRowOutlet\", \"\"]],\n      standalone: true\n    });\n  }\n  return FooterRowOutlet;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 */\nlet NoDataRowOutlet = /*#__PURE__*/(() => {\n  class NoDataRowOutlet {\n    constructor(viewContainer, elementRef) {\n      this.viewContainer = viewContainer;\n      this.elementRef = elementRef;\n      const table = inject(CDK_TABLE);\n      table._noDataRowOutlet = this;\n      table._outletAssigned();\n    }\n    static #_ = this.ɵfac = function NoDataRowOutlet_Factory(t) {\n      return new (t || NoDataRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n    };\n    static #_2 = this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: NoDataRowOutlet,\n      selectors: [[\"\", \"noDataRowOutlet\", \"\"]],\n      standalone: true\n    });\n  }\n  return NoDataRowOutlet;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 */\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\"/>\n  <ng-content select=\"colgroup, col\"/>\n\n  <!--\n    Unprojected content throws a hydration error so we need this to capture it.\n    It gets removed on the client so it doesn't affect the layout.\n  -->\n  @if (_isServer) {\n    <ng-content/>\n  }\n\n  @if (_isNativeHtmlTable) {\n    <thead role=\"rowgroup\">\n      <ng-container headerRowOutlet/>\n    </thead>\n    <tbody role=\"rowgroup\">\n      <ng-container rowOutlet/>\n      <ng-container noDataRowOutlet/>\n    </tbody>\n    <tfoot role=\"rowgroup\">\n      <ng-container footerRowOutlet/>\n    </tfoot>\n  } @else {\n    <ng-container headerRowOutlet/>\n    <ng-container rowOutlet/>\n    <ng-container noDataRowOutlet/>\n    <ng-container footerRowOutlet/>\n  }\n`;\n/**\n * Class used to conveniently type the embedded view ref for rows with a context.\n * @docs-private\n */\nclass RowViewRef extends EmbeddedViewRef {}\n/**\n * 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 */\nlet CdkTable = /*#__PURE__*/(() => {\n  class CdkTable {\n    /** Aria role to apply to the table's cells based on the table's own role. */\n    _getCellRole() {\n      if (this._cellRoleInternal === undefined) {\n        // Perform this lazily in case the table's role was updated by a directive after construction.\n        const role = this._elementRef.nativeElement.getAttribute('role');\n        const cellRole = role === 'grid' || role === 'treegrid' ? 'gridcell' : 'cell';\n        this._cellRoleInternal = this._isNativeHtmlTable && cellRole === 'cell' ? null : cellRole;\n      }\n      return this._cellRoleInternal;\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(value) {\n      this._multiTemplateDataRows = value;\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(value) {\n      this._fixedLayout = value;\n      // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated.\n      this._forceRecalculateCellWidths = true;\n      this._stickyColumnStylesNeedReset = true;\n    }\n    constructor(_differs, _changeDetectorRef, _elementRef, role, _dir, _document, _platform, _viewRepeater, _coalescedStyleScheduler, _viewportRuler,\n    /**\n     * @deprecated `_stickyPositioningListener` parameter to become required.\n     * @breaking-change 13.0.0\n     */\n    _stickyPositioningListener,\n    /**\n     * @deprecated `_ngZone` parameter to become required.\n     * @breaking-change 14.0.0\n     */\n    _ngZone) {\n      this._differs = _differs;\n      this._changeDetectorRef = _changeDetectorRef;\n      this._elementRef = _elementRef;\n      this._dir = _dir;\n      this._platform = _platform;\n      this._viewRepeater = _viewRepeater;\n      this._coalescedStyleScheduler = _coalescedStyleScheduler;\n      this._viewportRuler = _viewportRuler;\n      this._stickyPositioningListener = _stickyPositioningListener;\n      this._ngZone = _ngZone;\n      /** Subject that emits when the component has been destroyed. */\n      this._onDestroy = new Subject();\n      /**\n       * Map of all the user's defined columns (header, data, and footer cell template) identified by\n       * name. Collection populated by the column definitions gathered by `ContentChildren` as well as\n       * any custom column definitions added to `_customColumnDefs`.\n       */\n      this._columnDefsByName = new Map();\n      /**\n       * Column definitions that were defined outside of the direct content children of the table.\n       * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n       * column definitions as *its* content child.\n       */\n      this._customColumnDefs = new Set();\n      /**\n       * Data row definitions that were defined outside of the direct content children of the table.\n       * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n       * built-in data rows as *its* content child.\n       */\n      this._customRowDefs = new Set();\n      /**\n       * Header row definitions that were defined outside of the direct content children of the table.\n       * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n       * built-in header rows as *its* content child.\n       */\n      this._customHeaderRowDefs = new Set();\n      /**\n       * Footer row definitions that were defined outside of the direct content children of the table.\n       * These will be defined when, e.g., creating a wrapper around the cdkTable that has a\n       * built-in footer row as *its* content child.\n       */\n      this._customFooterRowDefs = new Set();\n      /**\n       * Whether the header row definition has been changed. Triggers an update to the header row after\n       * content is checked. Initialized as true so that the table renders the initial set of rows.\n       */\n      this._headerRowDefChanged = true;\n      /**\n       * Whether the footer row definition has been changed. Triggers an update to the footer row after\n       * content is checked. Initialized as true so that the table renders the initial set of rows.\n       */\n      this._footerRowDefChanged = true;\n      /**\n       * Whether the sticky column styles need to be updated. Set to `true` when the visible columns\n       * change.\n       */\n      this._stickyColumnStylesNeedReset = true;\n      /**\n       * Whether the sticky styler should recalculate cell widths when applying sticky styles. If\n       * `false`, cached values will be used instead. This is only applicable to tables with\n       * {@link fixedLayout} enabled. For other tables, cell widths will always be recalculated.\n       */\n      this._forceRecalculateCellWidths = true;\n      /**\n       * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing\n       * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with\n       * the cached `RenderRow` objects when possible, the row identity is preserved when the data\n       * and row template matches, which allows the `IterableDiffer` to check rows by reference\n       * and understand which rows are added/moved/removed.\n       *\n       * Implemented as a map of maps where the first key is the `data: T` object and the second is the\n       * `CdkRowDef<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 overridden by\n       * table subclasses.\n       */\n      this.stickyCssClass = 'cdk-table-sticky';\n      /**\n       * Whether to manually add position: sticky to all sticky cell elements. Not needed if\n       * the position is set in a selector associated with the value of stickyCssClass. May be\n       * overridden by table subclasses\n       */\n      this.needsPositionStickyOnElement = true;\n      /** Whether the no data row is currently showing anything. */\n      this._isShowingNoDataRow = false;\n      /** Whether the table has rendered out all the outlets for the first time. */\n      this._hasAllOutlets = false;\n      /** Whether the table is done initializing. */\n      this._hasInitialized = false;\n      this._cellRoleInternal = undefined;\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        _elementRef.nativeElement.setAttribute('role', 'table');\n      }\n      this._document = _document;\n      this._isServer = !_platform.isBrowser;\n      this._isNativeHtmlTable = _elementRef.nativeElement.nodeName === 'TABLE';\n    }\n    ngOnInit() {\n      this._setupStickyStyler();\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.change().pipe(takeUntil(this._onDestroy)).subscribe(() => {\n        this._forceRecalculateCellWidths = true;\n      });\n    }\n    ngAfterContentInit() {\n      this._hasInitialized = true;\n    }\n    ngAfterContentChecked() {\n      // Only start re-rendering in `ngAfterContentChecked` after the first render.\n      if (this._canRender()) {\n        this._render();\n      }\n    }\n    ngOnDestroy() {\n      [this._rowOutlet?.viewContainer, this._headerRowOutlet?.viewContainer, this._footerRowOutlet?.viewContainer, this._cachedRenderRowsMap, this._customColumnDefs, this._customRowDefs, this._customHeaderRowDefs, this._customFooterRowDefs, this._columnDefsByName].forEach(def => {\n        def?.clear();\n      });\n      this._headerRowDefs = [];\n      this._footerRowDefs = [];\n      this._defaultRowDef = null;\n      this._onDestroy.next();\n      this._onDestroy.complete();\n      if (isDataSource(this.dataSource)) {\n        this.dataSource.disconnect(this);\n      }\n    }\n    /**\n     * Renders rows based on the table's latest set of data, which was either provided directly as an\n     * input or retrieved through an Observable stream (directly or from a DataSource).\n     * Checks for differences in the data since the last diff to perform only the necessary\n     * changes (add/remove/move rows).\n     *\n     * If the table's data source is a DataSource or Observable, this will be invoked automatically\n     * each time the provided Observable stream emits a new data array. Otherwise if your data is\n     * an array, this function will need to be called to render any changes.\n     */\n    renderRows() {\n      this._renderRows = this._getAllRenderRows();\n      const changes = this._dataDiffer.diff(this._renderRows);\n      if (!changes) {\n        this._updateNoDataRow();\n        this.contentChanged.next();\n        return;\n      }\n      const viewContainer = this._rowOutlet.viewContainer;\n      this._viewRepeater.applyChanges(changes, viewContainer, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record.item, currentIndex), record => record.item.data, change => {\n        if (change.operation === _ViewRepeaterOperation.INSERTED && change.context) {\n          this._renderCellTemplateForItem(change.record.item.rowDef, change.context);\n        }\n      });\n      // Update the meta context of a row's context data (index, count, first, last, ...)\n      this._updateRowIndexContext();\n      // Update rows that did not get added/removed/moved but may have had their identity changed,\n      // e.g. if trackBy matched data on some property but the actual data reference changed.\n      changes.forEachIdentityChange(record => {\n        const rowView = viewContainer.get(record.currentIndex);\n        rowView.context.$implicit = record.item.data;\n      });\n      this._updateNoDataRow();\n      // Allow the new row data to render before measuring it.\n      // @breaking-change 14.0.0 Remove undefined check once _ngZone is required.\n      if (this._ngZone && NgZone.isInAngularZone()) {\n        this._ngZone.onStable.pipe(take(1), takeUntil(this._onDestroy)).subscribe(() => {\n          this.updateStickyColumnStyles();\n        });\n      } else {\n        this.updateStickyColumnStyles();\n      }\n      this.contentChanged.next();\n    }\n    /** Adds a column definition that was not included as part of the content children. */\n    addColumnDef(columnDef) {\n      this._customColumnDefs.add(columnDef);\n    }\n    /** Removes a column definition that was not included as part of the content children. */\n    removeColumnDef(columnDef) {\n      this._customColumnDefs.delete(columnDef);\n    }\n    /** Adds a row definition that was not included as part of the content children. */\n    addRowDef(rowDef) {\n      this._customRowDefs.add(rowDef);\n    }\n    /** Removes a row definition that was not included as part of the content children. */\n    removeRowDef(rowDef) {\n      this._customRowDefs.delete(rowDef);\n    }\n    /** Adds a header row definition that was not included as part of the content children. */\n    addHeaderRowDef(headerRowDef) {\n      this._customHeaderRowDefs.add(headerRowDef);\n      this._headerRowDefChanged = true;\n    }\n    /** Removes a header row definition that was not included as part of the content children. */\n    removeHeaderRowDef(headerRowDef) {\n      this._customHeaderRowDefs.delete(headerRowDef);\n      this._headerRowDefChanged = true;\n    }\n    /** Adds a footer row definition that was not included as part of the content children. */\n    addFooterRowDef(footerRowDef) {\n      this._customFooterRowDefs.add(footerRowDef);\n      this._footerRowDefChanged = true;\n    }\n    /** Removes a footer row definition that was not included as part of the content children. */\n    removeFooterRowDef(footerRowDef) {\n      this._customFooterRowDefs.delete(footerRowDef);\n      this._footerRowDefChanged = true;\n    }\n    /** Sets a no data row definition that was not included as a part of the content children. */\n    setNoDataRow(noDataRow) {\n      this._customNoDataRow = noDataRow;\n    }\n    /**\n     * Updates the header sticky styles. First resets all applied styles with respect to the cells\n     * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is\n     * automatically called when the header row changes its displayed set of columns, or if its\n     * sticky input changes. May be called manually for cases where the cell content changes outside\n     * of these events.\n     */\n    updateStickyHeaderRowStyles() {\n      const headerRows = this._getRenderedRows(this._headerRowOutlet);\n      // Hide the thead element if there are no header rows. This is necessary to satisfy\n      // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n      // required child `row`.\n      if (this._isNativeHtmlTable) {\n        const thead = closestTableSection(this._headerRowOutlet, 'thead');\n        if (thead) {\n          thead.style.display = headerRows.length ? '' : 'none';\n        }\n      }\n      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      // Hide the tfoot element if there are no footer rows. This is necessary to satisfy\n      // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n      // required child `row`.\n      if (this._isNativeHtmlTable) {\n        const tfoot = closestTableSection(this._footerRowOutlet, 'tfoot');\n        if (tfoot) {\n          tfoot.style.display = footerRows.length ? '' : 'none';\n        }\n      }\n      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    /** Invoked whenever an outlet is created and has been assigned to the table. */\n    _outletAssigned() {\n      // Trigger the first render once all outlets have been assigned. We do it this way, as\n      // opposed to waiting for the next `ngAfterContentChecked`, because we don't know when\n      // the next change detection will happen.\n      // Also we can't use queries to resolve the outlets, because they're wrapped in a\n      // conditional, so we have to rely on them being assigned via DI.\n      if (!this._hasAllOutlets && this._rowOutlet && this._headerRowOutlet && this._footerRowOutlet && this._noDataRowOutlet) {\n        this._hasAllOutlets = true;\n        // In some setups this may fire before `ngAfterContentInit`\n        // so we need a check here. See #28538.\n        if (this._canRender()) {\n          this._render();\n        }\n      }\n    }\n    /** Whether the table has all the information to start rendering. */\n    _canRender() {\n      return this._hasAllOutlets && this._hasInitialized;\n    }\n    /** Renders the table if its state has changed. */\n    _render() {\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 && !this._footerRowDefs.length && !this._rowDefs.length && (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      } 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    /**\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          } 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        } else {\n          return {\n            data,\n            rowDef,\n            dataIndex\n          };\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) && (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 && defaultRowDefs.length > 1 && (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        if (this._rowOutlet) {\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    _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      } else if (isObservable(this.dataSource)) {\n        dataStream = this.dataSource;\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.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    _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      } 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 = {\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    _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        } 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    /**\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()).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    _getOwnDefs(items) {\n      return items.filter(item => !item._table || item._table === this);\n    }\n    /** Creates or removes the no data row, depending on whether any data is being shown. */\n    _updateNoDataRow() {\n      const noDataRow = this._customNoDataRow || this._noDataRow;\n      if (!noDataRow) {\n        return;\n      }\n      const shouldShow = this._rowOutlet.viewContainer.length === 0;\n      if (shouldShow === this._isShowingNoDataRow) {\n        return;\n      }\n      const container = this._noDataRowOutlet.viewContainer;\n      if (shouldShow) {\n        const view = container.createEmbeddedView(noDataRow.templateRef);\n        const rootNode = view.rootNodes[0];\n        // Only add the attributes if we have a single root node since it's hard\n        // to figure out which one to add it to when there are multiple.\n        if (view.rootNodes.length === 1 && rootNode?.nodeType === this._document.ELEMENT_NODE) {\n          rootNode.setAttribute('role', 'row');\n          rootNode.classList.add(noDataRow._contentClassName);\n        }\n      } else {\n        container.clear();\n      }\n      this._isShowingNoDataRow = shouldShow;\n      this._changeDetectorRef.markForCheck();\n    }\n    static #_ = this.ɵ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), i0.ɵɵdirectiveInject(i0.NgZone, 8));\n    };\n    static #_2 = this.ɵ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        if (rf & 2) {\n          let _t;\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      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: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"multiTemplateDataRows\", \"multiTemplateDataRows\", booleanAttribute],\n        fixedLayout: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"fixedLayout\", \"fixedLayout\", booleanAttribute]\n      },\n      outputs: {\n        contentChanged: \"contentChanged\"\n      },\n      exportAs: [\"cdkTable\"],\n      standalone: true,\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      },\n      // Prevent nested tables from seeing this table's StickyPositioningListener.\n      {\n        provide: STICKY_POSITIONING_LISTENER,\n        useValue: null\n      }]), i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n      ngContentSelectors: _c1,\n      decls: 5,\n      vars: 2,\n      consts: [[\"role\", \"rowgroup\"], [\"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.ɵɵtemplate(2, CdkTable_Conditional_2_Template, 1, 0)(3, CdkTable_Conditional_3_Template, 7, 0)(4, CdkTable_Conditional_4_Template, 4, 0);\n        }\n        if (rf & 2) {\n          i0.ɵɵadvance(2);\n          i0.ɵɵconditional(2, ctx._isServer ? 2 : -1);\n          i0.ɵɵadvance();\n          i0.ɵɵconditional(3, ctx._isNativeHtmlTable ? 3 : 4);\n        }\n      },\n      dependencies: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet],\n      styles: [\".cdk-table-fixed-layout{table-layout:fixed}\"],\n      encapsulation: 2\n    });\n  }\n  return CdkTable;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 * Finds the closest table section to an outlet. We can't use `HTMLElement.closest` for this,\n * because the node representing the outlet is a comment.\n */\nfunction closestTableSection(outlet, section) {\n  const uppercaseSection = section.toUpperCase();\n  let current = outlet.viewContainer.element.nativeElement;\n  while (current) {\n    // 1 is an element node.\n    const nodeName = current.nodeType === 1 ? current.nodeName : null;\n    if (nodeName === uppercaseSection) {\n      return current;\n    } else if (nodeName === 'TABLE') {\n      // Stop traversing past the `table` node.\n      break;\n    }\n    current = current.parentNode;\n  }\n  return null;\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 */\nlet CdkTextColumn = /*#__PURE__*/(() => {\n  class CdkTextColumn {\n    /** Column name that should be used to reference this column. */\n    get name() {\n      return this._name;\n    }\n    set name(name) {\n      this._name = name;\n      // With Ivy, inputs can be initialized before static query results are\n      // available. In that case, we defer the synchronization until \"ngOnInit\" fires.\n      this._syncColumnDefName();\n    }\n    constructor(\n    // `CdkTextColumn` is always requiring a table, but we just assert it manually\n    // for better error reporting.\n    // tslint:disable-next-line: lightweight-tokens\n    _table, _options) {\n      this._table = _table;\n      this._options = _options;\n      /** Alignment of the cell values. */\n      this.justify = 'start';\n      this._options = _options || {};\n    }\n    ngOnInit() {\n      this._syncColumnDefName();\n      if (this.headerText === undefined) {\n        this.headerText = this._createDefaultHeaderText();\n      }\n      if (!this.dataAccessor) {\n        this.dataAccessor = 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      } 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    static #_ = this.ɵfac = function CdkTextColumn_Factory(t) {\n      return new (t || CdkTextColumn)(i0.ɵɵdirectiveInject(CdkTable, 8), i0.ɵɵdirectiveInject(TEXT_COLUMN_OPTIONS, 8));\n    };\n    static #_2 = this.ɵ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        if (rf & 2) {\n          let _t;\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      standalone: true,\n      features: [i0.ɵɵStandaloneFeature],\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)(2, CdkTextColumn_td_2_Template, 2, 3, \"td\", 2);\n          i0.ɵɵelementContainerEnd();\n        }\n      },\n      dependencies: [CdkColumnDef, CdkHeaderCellDef, CdkHeaderCell, CdkCellDef, CdkCell],\n      encapsulation: 2\n    });\n  }\n  return CdkTextColumn;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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];\nlet CdkTableModule = /*#__PURE__*/(() => {\n  class CdkTableModule {\n    static #_ = this.ɵfac = function CdkTableModule_Factory(t) {\n      return new (t || CdkTableModule)();\n    };\n    static #_2 = this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: CdkTableModule\n    });\n    static #_3 = this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n      imports: [ScrollingModule]\n    });\n  }\n  return CdkTableModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 * @deprecated Implement the `CanStick` interface instead.\n * @breaking-change 19.0.0\n */\nfunction mixinHasStickyInput(base) {\n  return class extends base {\n    /** Whether sticky positioning should be applied. */\n    get sticky() {\n      return this._sticky;\n    }\n    set sticky(v) {\n      const prevValue = this._sticky;\n      this._sticky = coerceBooleanProperty(v);\n      this._hasStickyChanged = prevValue !== this._sticky;\n    }\n    /** Whether the sticky value has changed since this was last called. */\n    hasStickyChanged() {\n      const hasStickyChanged = this._hasStickyChanged;\n      this._hasStickyChanged = false;\n      return hasStickyChanged;\n    }\n    /** Resets the dirty check for cases where the sticky state has been used without checking. */\n    resetStickyChanged() {\n      this._hasStickyChanged = false;\n    }\n    constructor(...args) {\n      super(...args);\n      this._sticky = false;\n      /** Whether the sticky input has changed since it was last checked. */\n      this._hasStickyChanged = false;\n    }\n  };\n}\n\n/**\n * 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 };","map":{"version":3,"names":["i1","_VIEW_REPEATER_STRATEGY","_RecycleViewRepeaterStrategy","isDataSource","_ViewRepeaterOperation","_DisposeViewRepeaterStrategy","DataSource","i2","i3","ScrollingModule","DOCUMENT","i0","InjectionToken","Directive","booleanAttribute","Inject","Optional","Input","ContentChild","Injectable","Component","ChangeDetectionStrategy","ViewEncapsulation","inject","EmbeddedViewRef","EventEmitter","NgZone","Attribute","SkipSelf","Output","ContentChildren","ViewChild","NgModule","Subject","from","BehaviorSubject","isObservable","of","takeUntil","take","coerceBooleanProperty","_c0","_c1","CdkTable_Conditional_2_Template","rf","ctx","ɵɵprojection","CdkTable_Conditional_3_Template","ɵɵelementStart","ɵɵelementContainer","ɵɵelementEnd","CdkTable_Conditional_4_Template","CdkTextColumn_th_1_Template","ɵɵtext","ctx_r0","ɵɵnextContext","ɵɵstyleProp","justify","ɵɵadvance","ɵɵtextInterpolate1","headerText","CdkTextColumn_td_2_Template","data_r2","$implicit","dataAccessor","name","CDK_TABLE","TEXT_COLUMN_OPTIONS","CdkCellDef","constructor","template","_","ɵfac","CdkCellDef_Factory","t","ɵɵdirectiveInject","TemplateRef","_2","ɵdir","ɵɵdefineDirective","type","selectors","standalone","ngDevMode","CdkHeaderCellDef","CdkHeaderCellDef_Factory","CdkFooterCellDef","CdkFooterCellDef_Factory","CdkColumnDef","_name","_setNameInput","sticky","_sticky","value","_hasStickyChanged","stickyEnd","_stickyEnd","_table","hasStickyChanged","resetStickyChanged","_updateColumnCssClassName","_columnCssClassName","cssClassFriendlyName","replace","CdkColumnDef_Factory","contentQueries","CdkColumnDef_ContentQueries","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","cell","first","headerCell","footerCell","inputs","ɵɵInputFlags","None","HasDecoratorInputTransform","features","ɵɵProvidersFeature","provide","useExisting","ɵɵInputTransformsFeature","BaseCdkCell","columnDef","elementRef","nativeElement","classList","add","CdkHeaderCell","CdkHeaderCell_Factory","ElementRef","hostAttrs","ɵɵInheritDefinitionFeature","CdkFooterCell","role","_getCellRole","setAttribute","CdkFooterCell_Factory","CdkCell","CdkCell_Factory","_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","undefined","onStable","_CoalescedStyleScheduler_Factory","ɵɵinject","ɵprov","ɵɵdefineInjectable","token","factory","CDK_ROW_TEMPLATE","BaseRowDef","_differs","ngOnChanges","changes","_columnsDiffer","columns","currentValue","find","create","diff","getColumnsDiff","extractCellTemplate","column","CdkHeaderRowDef","CdkFooterRowDef","BaseRowDef_Factory","IterableDiffers","ɵɵNgOnChangesFeature","CdkHeaderRowDef_Factory","CdkFooterRowDef_Factory","CdkRowDef","CdkRowDef_Factory","when","CdkCellOutlet","mostRecentCellOutlet","_viewContainer","CdkCellOutlet_Factory","ViewContainerRef","_3","CdkHeaderRow","CdkHeaderRow_Factory","ɵcmp","ɵɵdefineComponent","ɵɵStandaloneFeature","decls","vars","consts","CdkHeaderRow_Template","dependencies","encapsulation","CdkFooterRow","CdkFooterRow_Factory","CdkFooterRow_Template","CdkRow","CdkRow_Factory","CdkRow_Template","CdkNoDataRow","templateRef","_contentClassName","CdkNoDataRow_Factory","STICKY_DIRECTIONS","StickyStyler","_isNativeHtmlTable","_stickCellCss","direction","_coalescedStyleScheduler","_isBrowser","_needsPositionStickyOnElement","_positionListener","_cachedCellWidths","_borderCellCss","clearStickyPositioning","rows","stickyDirections","elementsToClear","row","nodeType","ELEMENT_NODE","i","children","element","_removeStickyStyle","updateStickyColumns","stickyStartStates","stickyEndStates","recalculateCellWidths","some","state","stickyColumnsUpdated","sizes","stickyEndColumnsUpdated","firstRow","numCells","cellWidths","_getCellWidths","startPositions","_getStickyStartColumnPositions","endPositions","_getStickyEndColumnPositions","lastStickyStart","lastIndexOf","firstStickyEnd","indexOf","isRtl","start","end","_addStickyStyle","slice","map","width","index","reverse","stickRows","rowsToStick","stickyStates","position","states","stickyOffsets","stickyCellHeights","elementsToStick","rowIndex","stickyOffset","Array","height","getBoundingClientRect","borderedRowIndex","offset","isBorderedRowIndex","stickyHeaderRowsUpdated","offsets","elements","stickyFooterRowsUpdated","updateStickyFooterContainer","tableElement","tfoot","querySelector","dir","style","remove","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","CdkRecycleRows_Factory","useClass","DataRowOutlet","viewContainer","table","_rowOutlet","_outletAssigned","DataRowOutlet_Factory","HeaderRowOutlet","_headerRowOutlet","HeaderRowOutlet_Factory","FooterRowOutlet","_footerRowOutlet","FooterRowOutlet_Factory","NoDataRowOutlet","_noDataRowOutlet","NoDataRowOutlet_Factory","CDK_TABLE_TEMPLATE","RowViewRef","CdkTable","_cellRoleInternal","_elementRef","getAttribute","cellRole","trackBy","_trackByFn","fn","console","warn","dataSource","_dataSource","_switchDataSource","multiTemplateDataRows","_multiTemplateDataRows","_forceRenderDataRows","updateStickyColumnStyles","fixedLayout","_fixedLayout","_forceRecalculateCellWidths","_stickyColumnStylesNeedReset","_changeDetectorRef","_dir","_document","_platform","_viewRepeater","_viewportRuler","_stickyPositioningListener","_onDestroy","_columnDefsByName","Map","_customColumnDefs","Set","_customRowDefs","_customHeaderRowDefs","_customFooterRowDefs","_headerRowDefChanged","_footerRowDefChanged","_cachedRenderRowsMap","stickyCssClass","needsPositionStickyOnElement","_isShowingNoDataRow","_hasAllOutlets","_hasInitialized","contentChanged","viewChange","Number","MAX_VALUE","_isServer","isBrowser","nodeName","ngOnInit","_setupStickyStyler","_dataDiffer","_i","dataRow","dataIndex","change","ngAfterContentInit","ngAfterContentChecked","_canRender","_render","forEach","def","clear","_headerRowDefs","_footerRowDefs","_defaultRowDef","disconnect","renderRows","_renderRows","_getAllRenderRows","_updateNoDataRow","applyChanges","record","_adjustedPreviousIndex","currentIndex","_getEmbeddedViewArgs","item","operation","INSERTED","context","_renderCellTemplateForItem","rowDef","_updateRowIndexContext","forEachIdentityChange","rowView","get","isInAngularZone","addColumnDef","removeColumnDef","delete","addRowDef","removeRowDef","addHeaderRowDef","headerRowDef","removeHeaderRowDef","addFooterRowDef","footerRowDef","removeFooterRowDef","setNoDataRow","noDataRow","_customNoDataRow","updateStickyHeaderRowStyles","headerRows","_getRenderedRows","thead","closestTableSection","display","_stickyStyler","updateStickyFooterRowStyles","footerRows","dataRows","headerRow","_addStickyColumnStyles","_rowDefs","footerRow","values","_cacheRowDefs","_cacheColumnDefs","columnsChanged","_renderUpdatedColumns","rowDefsChanged","_forceRenderHeaderRows","_forceRenderFooterRows","_renderChangeSubscription","_observeRenderChanges","_checkStickyStates","prevCachedRenderRows","_data","renderRowsForData","_getRenderRowsForData","has","set","WeakMap","j","renderRow","cache","rowDefs","_getRowDefs","cachedRenderRows","shift","columnDefs","mergeArrayAndSet","_getOwnDefs","_contentColumnDefs","_contentHeaderRowDefs","_contentFooterRowDefs","_contentRowDefs","defaultRowDefs","filter","columnsDiffReducer","acc","dataColumnsChanged","reduce","headerColumnsChanged","footerColumnsChanged","unsubscribe","dataStream","connect","isArray","_renderRow","columnName","rowOutlet","renderedRows","viewRef","rootNodes","outlet","view","createEmbeddedView","cellTemplate","_getCellTemplates","markForCheck","renderIndex","count","last","even","odd","columnId","stickyCheckReducer","d","items","_noDataRow","shouldShow","container","rootNode","CdkTable_Factory","ChangeDetectorRef","ɵɵinjectAttribute","Directionality","Platform","ViewportRuler","CdkTable_ContentQueries","hostVars","hostBindings","CdkTable_HostBindings","ɵɵclassProp","outputs","exportAs","useValue","ngContentSelectors","CdkTable_Template","ɵɵprojectionDef","ɵɵtemplate","ɵɵconditional","styles","array","concat","section","uppercaseSection","toUpperCase","current","parentNode","CdkTextColumn","_syncColumnDefName","_options","_createDefaultHeaderText","defaultDataAccessor","defaultHeaderTextTransform","CdkTextColumn_Factory","viewQuery","CdkTextColumn_Query","ɵɵviewQuery","CdkTextColumn_Template","ɵɵelementContainerStart","ɵɵelementContainerEnd","EXPORTED_DECLARATIONS","CdkTableModule","CdkTableModule_Factory","ɵmod","ɵɵdefineNgModule","ɵinj","ɵɵdefineInjector","imports","mixinHasStickyInput","base","v","prevValue","args"],"sources":["/root/rfcontavagas_hom/12.-Servidor-local-Docker/Front-Parking-Angular/node_modules/@angular/cdk/fesm2022/table.mjs"],"sourcesContent":["import * as i1 from '@angular/cdk/bidi';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, isDataSource, _ViewRepeaterOperation, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nexport { DataSource } from '@angular/cdk/collections';\nimport * as i2 from '@angular/cdk/platform';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, booleanAttribute, Inject, Optional, Input, ContentChild, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, inject, EmbeddedViewRef, EventEmitter, NgZone, Attribute, SkipSelf, Output, ContentChildren, ViewChild, NgModule } from '@angular/core';\nimport { Subject, from, BehaviorSubject, isObservable, of } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\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 * 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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkCellDef, isStandalone: true, selector: \"[cdkCellDef]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkCellDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkCellDef]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ 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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkHeaderCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkHeaderCellDef, isStandalone: true, selector: \"[cdkHeaderCellDef]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkHeaderCellDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkHeaderCellDef]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ 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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkFooterCellDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkFooterCellDef, isStandalone: true, selector: \"[cdkFooterCellDef]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkFooterCellDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkFooterCellDef]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ type: i0.TemplateRef }] });\n/**\n * Column definition for the CDK table.\n * Defines a set of cells available for a table column.\n */\nclass CdkColumnDef {\n    /** Unique name for this column. */\n    get name() {\n        return this._name;\n    }\n    set name(name) {\n        this._setNameInput(name);\n    }\n    /** Whether the cell is sticky. */\n    get sticky() {\n        return this._sticky;\n    }\n    set sticky(value) {\n        if (value !== this._sticky) {\n            this._sticky = value;\n            this._hasStickyChanged = true;\n        }\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(value) {\n        if (value !== this._stickyEnd) {\n            this._stickyEnd = value;\n            this._hasStickyChanged = true;\n        }\n    }\n    constructor(_table) {\n        this._table = _table;\n        this._hasStickyChanged = false;\n        this._sticky = false;\n        this._stickyEnd = false;\n    }\n    /** Whether the sticky state has changed. */\n    hasStickyChanged() {\n        const hasStickyChanged = this._hasStickyChanged;\n        this.resetStickyChanged();\n        return hasStickyChanged;\n    }\n    /** Resets the sticky changed state. */\n    resetStickyChanged() {\n        this._hasStickyChanged = false;\n    }\n    /**\n     * Overridable method that sets the css classes that will be added to every cell in this\n     * column.\n     * In the future, columnCssClassName will change from type string[] to string and this\n     * will set a single string value.\n     * @docs-private\n     */\n    _updateColumnCssClassName() {\n        this._columnCssClassName = [`cdk-column-${this.cssClassFriendlyName}`];\n    }\n    /**\n     * This has been extracted to a util because of TS 4 and VE.\n     * View Engine doesn't support property rename inheritance.\n     * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n     * @docs-private\n     */\n    _setNameInput(value) {\n        // If the directive is set without a name (updated programmatically), then this setter will\n        // trigger with an empty string and should not overwrite the programmatically set value.\n        if (value) {\n            this._name = value;\n            this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-');\n            this._updateColumnCssClassName();\n        }\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkColumnDef, deps: [{ token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"17.2.0\", type: CdkColumnDef, isStandalone: true, selector: \"[cdkColumnDef]\", inputs: { name: [\"cdkColumnDef\", \"name\"], sticky: [\"sticky\", \"sticky\", booleanAttribute], stickyEnd: [\"stickyEnd\", \"stickyEnd\", booleanAttribute] }, 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 }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkColumnDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkColumnDef]',\n                    providers: [{ provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef }],\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ type: undefined, decorators: [{\n                    type: Inject,\n                    args: [CDK_TABLE]\n                }, {\n                    type: Optional\n                }] }], propDecorators: { name: [{\n                type: Input,\n                args: ['cdkColumnDef']\n            }], sticky: [{\n                type: Input,\n                args: [{ transform: booleanAttribute }]\n            }], stickyEnd: [{\n                type: Input,\n                args: [{ transform: booleanAttribute }]\n            }], cell: [{\n                type: ContentChild,\n                args: [CdkCellDef]\n            }], headerCell: [{\n                type: ContentChild,\n                args: [CdkHeaderCellDef]\n            }], footerCell: [{\n                type: ContentChild,\n                args: [CdkFooterCellDef]\n            }] } });\n/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */\nclass BaseCdkCell {\n    constructor(columnDef, elementRef) {\n        elementRef.nativeElement.classList.add(...columnDef._columnCssClassName);\n    }\n}\n/** Header cell template container that adds the right classes and role. */\nclass CdkHeaderCell extends BaseCdkCell {\n    constructor(columnDef, elementRef) {\n        super(columnDef, elementRef);\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkHeaderCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkHeaderCell, isStandalone: true, selector: \"cdk-header-cell, th[cdk-header-cell]\", host: { attributes: { \"role\": \"columnheader\" }, classAttribute: \"cdk-header-cell\" }, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.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                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ type: CdkColumnDef }, { type: i0.ElementRef }] });\n/** Footer cell template container that adds the right classes and role. */\nclass CdkFooterCell extends BaseCdkCell {\n    constructor(columnDef, elementRef) {\n        super(columnDef, elementRef);\n        const role = columnDef._table?._getCellRole();\n        if (role) {\n            elementRef.nativeElement.setAttribute('role', role);\n        }\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkFooterCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkFooterCell, isStandalone: true, selector: \"cdk-footer-cell, td[cdk-footer-cell]\", host: { classAttribute: \"cdk-footer-cell\" }, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.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                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ type: CdkColumnDef }, { type: i0.ElementRef }] });\n/** Cell template container that adds the right classes and role. */\nclass CdkCell extends BaseCdkCell {\n    constructor(columnDef, elementRef) {\n        super(columnDef, elementRef);\n        const role = columnDef._table?._getCellRole();\n        if (role) {\n            elementRef.nativeElement.setAttribute('role', role);\n        }\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkCell, deps: [{ token: CdkColumnDef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkCell, isStandalone: true, selector: \"cdk-cell, td[cdk-cell]\", host: { classAttribute: \"cdk-cell\" }, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.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                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ type: CdkColumnDef }, { type: i0.ElementRef }] });\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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: _CoalescedStyleScheduler, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }\n    static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: _CoalescedStyleScheduler }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: _CoalescedStyleScheduler, decorators: [{\n            type: Injectable\n        }], ctorParameters: () => [{ type: i0.NgZone }] });\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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: BaseRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: BaseRowDef, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: BaseRowDef, decorators: [{\n            type: Directive\n        }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }] });\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 BaseRowDef {\n    /** Whether the row is sticky. */\n    get sticky() {\n        return this._sticky;\n    }\n    set sticky(value) {\n        if (value !== this._sticky) {\n            this._sticky = value;\n            this._hasStickyChanged = true;\n        }\n    }\n    constructor(template, _differs, _table) {\n        super(template, _differs);\n        this._table = _table;\n        this._hasStickyChanged = false;\n        this._sticky = false;\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    /** Whether the sticky state has changed. */\n    hasStickyChanged() {\n        const hasStickyChanged = this._hasStickyChanged;\n        this.resetStickyChanged();\n        return hasStickyChanged;\n    }\n    /** Resets the sticky changed state. */\n    resetStickyChanged() {\n        this._hasStickyChanged = false;\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkHeaderRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"17.2.0\", type: CdkHeaderRowDef, isStandalone: true, selector: \"[cdkHeaderRowDef]\", inputs: { columns: [\"cdkHeaderRowDef\", \"columns\"], sticky: [\"cdkHeaderRowDefSticky\", \"sticky\", booleanAttribute] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkHeaderRowDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkHeaderRowDef]',\n                    inputs: [{ name: 'columns', alias: 'cdkHeaderRowDef' }],\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n                    type: Inject,\n                    args: [CDK_TABLE]\n                }, {\n                    type: Optional\n                }] }], propDecorators: { sticky: [{\n                type: Input,\n                args: [{ alias: 'cdkHeaderRowDefSticky', transform: booleanAttribute }]\n            }] } });\n/**\n * Footer row definition for the CDK table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nclass CdkFooterRowDef extends BaseRowDef {\n    /** Whether the row is sticky. */\n    get sticky() {\n        return this._sticky;\n    }\n    set sticky(value) {\n        if (value !== this._sticky) {\n            this._sticky = value;\n            this._hasStickyChanged = true;\n        }\n    }\n    constructor(template, _differs, _table) {\n        super(template, _differs);\n        this._table = _table;\n        this._hasStickyChanged = false;\n        this._sticky = false;\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    /** Whether the sticky state has changed. */\n    hasStickyChanged() {\n        const hasStickyChanged = this._hasStickyChanged;\n        this.resetStickyChanged();\n        return hasStickyChanged;\n    }\n    /** Resets the sticky changed state. */\n    resetStickyChanged() {\n        this._hasStickyChanged = false;\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkFooterRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"17.2.0\", type: CdkFooterRowDef, isStandalone: true, selector: \"[cdkFooterRowDef]\", inputs: { columns: [\"cdkFooterRowDef\", \"columns\"], sticky: [\"cdkFooterRowDefSticky\", \"sticky\", booleanAttribute] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkFooterRowDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkFooterRowDef]',\n                    inputs: [{ name: 'columns', alias: 'cdkFooterRowDef' }],\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n                    type: Inject,\n                    args: [CDK_TABLE]\n                }, {\n                    type: Optional\n                }] }], propDecorators: { sticky: [{\n                type: Input,\n                args: [{ alias: 'cdkFooterRowDefSticky', transform: booleanAttribute }]\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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkRowDef, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: CDK_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkRowDef, isStandalone: true, selector: \"[cdkRowDef]\", inputs: { columns: [\"cdkRowDefColumns\", \"columns\"], when: [\"cdkRowDefWhen\", \"when\"] }, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkRowDef, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkRowDef]',\n                    inputs: [\n                        { name: 'columns', alias: 'cdkRowDefColumns' },\n                        { name: 'when', alias: 'cdkRowDefWhen' },\n                    ],\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n                    type: Inject,\n                    args: [CDK_TABLE]\n                }, {\n                    type: Optional\n                }] }] });\n/**\n * Outlet for rendering cells inside of a row or header row.\n * @docs-private\n */\nclass CdkCellOutlet {\n    /**\n     * Static property containing the latest constructed instance of this class.\n     * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using\n     * createEmbeddedView. After one of these components are created, this property will provide\n     * a handle to provide that component's cells and context. After init, the CdkCellOutlet will\n     * construct the cells with the provided context.\n     */\n    static { this.mostRecentCellOutlet = null; }\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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkCellOutlet, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkCellOutlet, isStandalone: true, selector: \"[cdkCellOutlet]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkCellOutlet, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[cdkCellOutlet]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ type: i0.ViewContainerRef }] });\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nclass CdkHeaderRow {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkHeaderRow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkHeaderRow, isStandalone: true, 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, dependencies: [{ kind: \"directive\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.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                    standalone: true,\n                    imports: [CdkCellOutlet],\n                }]\n        }] });\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nclass CdkFooterRow {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkFooterRow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkFooterRow, isStandalone: true, 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, dependencies: [{ kind: \"directive\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.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                    standalone: true,\n                    imports: [CdkCellOutlet],\n                }]\n        }] });\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nclass CdkRow {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkRow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkRow, isStandalone: true, selector: \"cdk-row, tr[cdk-row]\", host: { attributes: { \"role\": \"row\" }, classAttribute: \"cdk-row\" }, ngImport: i0, template: \"<ng-container cdkCellOutlet></ng-container>\", isInline: true, dependencies: [{ kind: \"directive\", type: CdkCellOutlet, selector: \"[cdkCellOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.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                    standalone: true,\n                    imports: [CdkCellOutlet],\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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkNoDataRow, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkNoDataRow, isStandalone: true, selector: \"ng-template[cdkNoDataRow]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkNoDataRow, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'ng-template[cdkNoDataRow]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ type: i0.TemplateRef }] });\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        // Coalesce with sticky row updates (and potentially other changes like column resize).\n        this._coalescedStyleScheduler.schedule(() => {\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            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        // Coalesce with other sticky row updates (top/bottom), sticky columns updates\n        // (and potentially other changes like column resize).\n        this._coalescedStyleScheduler.schedule(() => {\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            for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n                if (!states[rowIndex]) {\n                    continue;\n                }\n                const offset = stickyOffsets[rowIndex];\n                const isBorderedRowIndex = rowIndex === borderedRowIndex;\n                for (const element of elementsToStick[rowIndex]) {\n                    this._addStickyStyle(element, position, offset, isBorderedRowIndex);\n                }\n            }\n            if (position === 'top') {\n                this._positionListener?.stickyHeaderRowsUpdated({\n                    sizes: stickyCellHeights,\n                    offsets: stickyOffsets,\n                    elements: elementsToStick,\n                });\n            }\n            else {\n                this._positionListener?.stickyFooterRowsUpdated({\n                    sizes: stickyCellHeights,\n                    offsets: stickyOffsets,\n                    elements: elementsToStick,\n                });\n            }\n        });\n    }\n    /**\n     * When using the native table in Safari, sticky footer cells do not stick. The only way to stick\n     * footer rows is to apply sticky styling to the tfoot container. This should only be done if\n     * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from\n     * the tfoot element.\n     */\n    updateStickyFooterContainer(tableElement, stickyStates) {\n        if (!this._isNativeHtmlTable) {\n            return;\n        }\n        // Coalesce with other sticky updates (and potentially other changes like column resize).\n        this._coalescedStyleScheduler.schedule(() => {\n            const tfoot = tableElement.querySelector('tfoot');\n            if (tfoot) {\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    /**\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 * Returns an error to be thrown when attempting to find an nonexistent column.\n * @param id Id whose lookup failed.\n * @docs-private\n */\nfunction getTableUnknownColumnError(id) {\n    return Error(`Could not find column with id \"${id}\".`);\n}\n/**\n * Returns an error to be thrown when two column definitions have the same name.\n * @docs-private\n */\nfunction getTableDuplicateColumnNameError(name) {\n    return Error(`Duplicate column definition name provided: \"${name}\".`);\n}\n/**\n * Returns an error to be thrown when there are multiple rows that are missing a when function.\n * @docs-private\n */\nfunction getTableMultipleDefaultRowDefsError() {\n    return Error(`There can only be one default row without a when predicate function.`);\n}\n/**\n * Returns an error to be thrown when there are no matching row defs for a particular set of data.\n * @docs-private\n */\nfunction getTableMissingMatchingRowDefError(data) {\n    return Error(`Could not find a matching row definition for the` +\n        `provided row data: ${JSON.stringify(data)}`);\n}\n/**\n * Returns an error to be thrown when there is no row definitions present in the content.\n * @docs-private\n */\nfunction getTableMissingRowDefsError() {\n    return Error('Missing definitions for header, footer, and row; ' +\n        'cannot determine which columns should be rendered.');\n}\n/**\n * Returns an error to be thrown when the data source does not match the compatible types.\n * @docs-private\n */\nfunction getTableUnknownDataSourceError() {\n    return Error(`Provided data source did not match an array, Observable, or DataSource`);\n}\n/**\n * Returns an error to be thrown when the text column cannot find a parent table to inject.\n * @docs-private\n */\nfunction getTableTextColumnMissingParentTableError() {\n    return Error(`Text column could not find a parent table for registration.`);\n}\n/**\n * Returns an error to be thrown when a table text column doesn't have a name.\n * @docs-private\n */\nfunction getTableTextColumnMissingNameError() {\n    return Error(`Table text column must have a name.`);\n}\n\n/** 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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkRecycleRows, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkRecycleRows, isStandalone: true, selector: \"cdk-table[recycleRows], table[cdk-table][recycleRows]\", providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.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                    standalone: true,\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        const table = inject(CDK_TABLE);\n        table._rowOutlet = this;\n        table._outletAssigned();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: DataRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: DataRowOutlet, isStandalone: true, selector: \"[rowOutlet]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: DataRowOutlet, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[rowOutlet]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ 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        const table = inject(CDK_TABLE);\n        table._headerRowOutlet = this;\n        table._outletAssigned();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: HeaderRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: HeaderRowOutlet, isStandalone: true, selector: \"[headerRowOutlet]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: HeaderRowOutlet, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[headerRowOutlet]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ 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        const table = inject(CDK_TABLE);\n        table._footerRowOutlet = this;\n        table._outletAssigned();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: FooterRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: FooterRowOutlet, isStandalone: true, selector: \"[footerRowOutlet]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: FooterRowOutlet, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[footerRowOutlet]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ 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        const table = inject(CDK_TABLE);\n        table._noDataRowOutlet = this;\n        table._outletAssigned();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: NoDataRowOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: NoDataRowOutlet, isStandalone: true, selector: \"[noDataRowOutlet]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: NoDataRowOutlet, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[noDataRowOutlet]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [{ 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\"/>\n  <ng-content select=\"colgroup, col\"/>\n\n  <!--\n    Unprojected content throws a hydration error so we need this to capture it.\n    It gets removed on the client so it doesn't affect the layout.\n  -->\n  @if (_isServer) {\n    <ng-content/>\n  }\n\n  @if (_isNativeHtmlTable) {\n    <thead role=\"rowgroup\">\n      <ng-container headerRowOutlet/>\n    </thead>\n    <tbody role=\"rowgroup\">\n      <ng-container rowOutlet/>\n      <ng-container noDataRowOutlet/>\n    </tbody>\n    <tfoot role=\"rowgroup\">\n      <ng-container footerRowOutlet/>\n    </tfoot>\n  } @else {\n    <ng-container headerRowOutlet/>\n    <ng-container rowOutlet/>\n    <ng-container noDataRowOutlet/>\n    <ng-container footerRowOutlet/>\n  }\n`;\n/**\n * Class used to conveniently type the embedded view ref for rows with a context.\n * @docs-private\n */\nclass RowViewRef extends EmbeddedViewRef {\n}\n/**\n * A data table that can render a header row, data rows, and a footer row.\n * Uses the dataSource input to determine the data to be rendered. The data can be provided either\n * as a data array, an Observable stream that emits the data array to render, or a DataSource with a\n * connect function that will return an Observable stream that emits the data array to render.\n */\nclass CdkTable {\n    /** Aria role to apply to the table's cells based on the table's own role. */\n    _getCellRole() {\n        if (this._cellRoleInternal === undefined) {\n            // Perform this lazily in case the table's role was updated by a directive after construction.\n            const role = this._elementRef.nativeElement.getAttribute('role');\n            const cellRole = role === 'grid' || role === 'treegrid' ? 'gridcell' : 'cell';\n            this._cellRoleInternal = this._isNativeHtmlTable && cellRole === 'cell' ? null : cellRole;\n        }\n        return this._cellRoleInternal;\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(value) {\n        this._multiTemplateDataRows = value;\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(value) {\n        this._fixedLayout = value;\n        // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated.\n        this._forceRecalculateCellWidths = true;\n        this._stickyColumnStylesNeedReset = true;\n    }\n    constructor(_differs, _changeDetectorRef, _elementRef, role, _dir, _document, _platform, _viewRepeater, _coalescedStyleScheduler, _viewportRuler, \n    /**\n     * @deprecated `_stickyPositioningListener` parameter to become required.\n     * @breaking-change 13.0.0\n     */\n    _stickyPositioningListener, \n    /**\n     * @deprecated `_ngZone` parameter to become required.\n     * @breaking-change 14.0.0\n     */\n    _ngZone) {\n        this._differs = _differs;\n        this._changeDetectorRef = _changeDetectorRef;\n        this._elementRef = _elementRef;\n        this._dir = _dir;\n        this._platform = _platform;\n        this._viewRepeater = _viewRepeater;\n        this._coalescedStyleScheduler = _coalescedStyleScheduler;\n        this._viewportRuler = _viewportRuler;\n        this._stickyPositioningListener = _stickyPositioningListener;\n        this._ngZone = _ngZone;\n        /** Subject that emits when the component has been destroyed. */\n        this._onDestroy = new Subject();\n        /**\n         * Map of all the user's defined columns (header, data, and footer cell template) identified by\n         * name. Collection populated by the column definitions gathered by `ContentChildren` as well as\n         * any custom column definitions added to `_customColumnDefs`.\n         */\n        this._columnDefsByName = new Map();\n        /**\n         * Column definitions that were defined outside of the direct content children of the table.\n         * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n         * column definitions as *its* content child.\n         */\n        this._customColumnDefs = new Set();\n        /**\n         * Data row definitions that were defined outside of the direct content children of the table.\n         * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n         * built-in data rows as *its* content child.\n         */\n        this._customRowDefs = new Set();\n        /**\n         * Header row definitions that were defined outside of the direct content children of the table.\n         * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n         * built-in header rows as *its* content child.\n         */\n        this._customHeaderRowDefs = new Set();\n        /**\n         * Footer row definitions that were defined outside of the direct content children of the table.\n         * These will be defined when, e.g., creating a wrapper around the cdkTable that has a\n         * built-in footer row as *its* content child.\n         */\n        this._customFooterRowDefs = new Set();\n        /**\n         * Whether the header row definition has been changed. Triggers an update to the header row after\n         * content is checked. Initialized as true so that the table renders the initial set of rows.\n         */\n        this._headerRowDefChanged = true;\n        /**\n         * Whether the footer row definition has been changed. Triggers an update to the footer row after\n         * content is checked. Initialized as true so that the table renders the initial set of rows.\n         */\n        this._footerRowDefChanged = true;\n        /**\n         * Whether the sticky column styles need to be updated. Set to `true` when the visible columns\n         * change.\n         */\n        this._stickyColumnStylesNeedReset = true;\n        /**\n         * Whether the sticky styler should recalculate cell widths when applying sticky styles. If\n         * `false`, cached values will be used instead. This is only applicable to tables with\n         * {@link fixedLayout} enabled. For other tables, cell widths will always be recalculated.\n         */\n        this._forceRecalculateCellWidths = true;\n        /**\n         * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing\n         * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with\n         * the cached `RenderRow` objects when possible, the row identity is preserved when the data\n         * and row template matches, which allows the `IterableDiffer` to check rows by reference\n         * and understand which rows are added/moved/removed.\n         *\n         * Implemented as a map of maps where the first key is the `data: T` object and the second is the\n         * `CdkRowDef<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 overridden by\n         * table subclasses.\n         */\n        this.stickyCssClass = 'cdk-table-sticky';\n        /**\n         * Whether to manually add position: sticky to all sticky cell elements. Not needed if\n         * the position is set in a selector associated with the value of stickyCssClass. May be\n         * overridden by table subclasses\n         */\n        this.needsPositionStickyOnElement = true;\n        /** Whether the no data row is currently showing anything. */\n        this._isShowingNoDataRow = false;\n        /** Whether the table has rendered out all the outlets for the first time. */\n        this._hasAllOutlets = false;\n        /** Whether the table is done initializing. */\n        this._hasInitialized = false;\n        this._cellRoleInternal = undefined;\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            _elementRef.nativeElement.setAttribute('role', 'table');\n        }\n        this._document = _document;\n        this._isServer = !_platform.isBrowser;\n        this._isNativeHtmlTable = _elementRef.nativeElement.nodeName === 'TABLE';\n    }\n    ngOnInit() {\n        this._setupStickyStyler();\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    ngAfterContentInit() {\n        this._hasInitialized = true;\n    }\n    ngAfterContentChecked() {\n        // Only start re-rendering in `ngAfterContentChecked` after the first render.\n        if (this._canRender()) {\n            this._render();\n        }\n    }\n    ngOnDestroy() {\n        [\n            this._rowOutlet?.viewContainer,\n            this._headerRowOutlet?.viewContainer,\n            this._footerRowOutlet?.viewContainer,\n            this._cachedRenderRowsMap,\n            this._customColumnDefs,\n            this._customRowDefs,\n            this._customHeaderRowDefs,\n            this._customFooterRowDefs,\n            this._columnDefsByName,\n        ].forEach((def) => {\n            def?.clear();\n        });\n        this._headerRowDefs = [];\n        this._footerRowDefs = [];\n        this._defaultRowDef = null;\n        this._onDestroy.next();\n        this._onDestroy.complete();\n        if (isDataSource(this.dataSource)) {\n            this.dataSource.disconnect(this);\n        }\n    }\n    /**\n     * Renders rows based on the table's latest set of data, which was either provided directly as an\n     * input or retrieved through an Observable stream (directly or from a DataSource).\n     * Checks for differences in the data since the last diff to perform only the necessary\n     * changes (add/remove/move rows).\n     *\n     * If the table's data source is a DataSource or Observable, this will be invoked automatically\n     * each time the provided Observable stream emits a new data array. Otherwise if your data is\n     * an array, this function will need to be called to render any changes.\n     */\n    renderRows() {\n        this._renderRows = this._getAllRenderRows();\n        const changes = this._dataDiffer.diff(this._renderRows);\n        if (!changes) {\n            this._updateNoDataRow();\n            this.contentChanged.next();\n            return;\n        }\n        const viewContainer = this._rowOutlet.viewContainer;\n        this._viewRepeater.applyChanges(changes, viewContainer, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record.item, currentIndex), record => record.item.data, (change) => {\n            if (change.operation === _ViewRepeaterOperation.INSERTED && change.context) {\n                this._renderCellTemplateForItem(change.record.item.rowDef, change.context);\n            }\n        });\n        // Update the meta context of a row's context data (index, count, first, last, ...)\n        this._updateRowIndexContext();\n        // Update rows that did not get added/removed/moved but may have had their identity changed,\n        // e.g. if trackBy matched data on some property but the actual data reference changed.\n        changes.forEachIdentityChange((record) => {\n            const rowView = viewContainer.get(record.currentIndex);\n            rowView.context.$implicit = record.item.data;\n        });\n        this._updateNoDataRow();\n        // Allow the new row data to render before measuring it.\n        // @breaking-change 14.0.0 Remove undefined check once _ngZone is required.\n        if (this._ngZone && NgZone.isInAngularZone()) {\n            this._ngZone.onStable.pipe(take(1), takeUntil(this._onDestroy)).subscribe(() => {\n                this.updateStickyColumnStyles();\n            });\n        }\n        else {\n            this.updateStickyColumnStyles();\n        }\n        this.contentChanged.next();\n    }\n    /** Adds a column definition that was not included as part of the content children. */\n    addColumnDef(columnDef) {\n        this._customColumnDefs.add(columnDef);\n    }\n    /** Removes a column definition that was not included as part of the content children. */\n    removeColumnDef(columnDef) {\n        this._customColumnDefs.delete(columnDef);\n    }\n    /** Adds a row definition that was not included as part of the content children. */\n    addRowDef(rowDef) {\n        this._customRowDefs.add(rowDef);\n    }\n    /** Removes a row definition that was not included as part of the content children. */\n    removeRowDef(rowDef) {\n        this._customRowDefs.delete(rowDef);\n    }\n    /** Adds a header row definition that was not included as part of the content children. */\n    addHeaderRowDef(headerRowDef) {\n        this._customHeaderRowDefs.add(headerRowDef);\n        this._headerRowDefChanged = true;\n    }\n    /** Removes a header row definition that was not included as part of the content children. */\n    removeHeaderRowDef(headerRowDef) {\n        this._customHeaderRowDefs.delete(headerRowDef);\n        this._headerRowDefChanged = true;\n    }\n    /** Adds a footer row definition that was not included as part of the content children. */\n    addFooterRowDef(footerRowDef) {\n        this._customFooterRowDefs.add(footerRowDef);\n        this._footerRowDefChanged = true;\n    }\n    /** Removes a footer row definition that was not included as part of the content children. */\n    removeFooterRowDef(footerRowDef) {\n        this._customFooterRowDefs.delete(footerRowDef);\n        this._footerRowDefChanged = true;\n    }\n    /** Sets a no data row definition that was not included as a part of the content children. */\n    setNoDataRow(noDataRow) {\n        this._customNoDataRow = noDataRow;\n    }\n    /**\n     * Updates the header sticky styles. First resets all applied styles with respect to the cells\n     * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is\n     * automatically called when the header row changes its displayed set of columns, or if its\n     * sticky input changes. May be called manually for cases where the cell content changes outside\n     * of these events.\n     */\n    updateStickyHeaderRowStyles() {\n        const headerRows = this._getRenderedRows(this._headerRowOutlet);\n        // Hide the thead element if there are no header rows. This is necessary to satisfy\n        // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n        // required child `row`.\n        if (this._isNativeHtmlTable) {\n            const thead = closestTableSection(this._headerRowOutlet, 'thead');\n            if (thead) {\n                thead.style.display = headerRows.length ? '' : 'none';\n            }\n        }\n        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        // Hide the tfoot element if there are no footer rows. This is necessary to satisfy\n        // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n        // required child `row`.\n        if (this._isNativeHtmlTable) {\n            const tfoot = closestTableSection(this._footerRowOutlet, 'tfoot');\n            if (tfoot) {\n                tfoot.style.display = footerRows.length ? '' : 'none';\n            }\n        }\n        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    /** Invoked whenever an outlet is created and has been assigned to the table. */\n    _outletAssigned() {\n        // Trigger the first render once all outlets have been assigned. We do it this way, as\n        // opposed to waiting for the next `ngAfterContentChecked`, because we don't know when\n        // the next change detection will happen.\n        // Also we can't use queries to resolve the outlets, because they're wrapped in a\n        // conditional, so we have to rely on them being assigned via DI.\n        if (!this._hasAllOutlets &&\n            this._rowOutlet &&\n            this._headerRowOutlet &&\n            this._footerRowOutlet &&\n            this._noDataRowOutlet) {\n            this._hasAllOutlets = true;\n            // In some setups this may fire before `ngAfterContentInit`\n            // so we need a check here. See #28538.\n            if (this._canRender()) {\n                this._render();\n            }\n        }\n    }\n    /** Whether the table has all the information to start rendering. */\n    _canRender() {\n        return this._hasAllOutlets && this._hasInitialized;\n    }\n    /** Renders the table if its state has changed. */\n    _render() {\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    /**\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            if (this._rowOutlet) {\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    _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    /**\n     * Forces a re-render of the data rows. Should be called in cases where there has been an input\n     * change that affects the evaluation of which rows should be rendered, e.g. toggling\n     * `multiTemplateDataRows` or adding/removing row definitions.\n     */\n    _forceRenderDataRows() {\n        this._dataDiffer.diff([]);\n        this._rowOutlet.viewContainer.clear();\n        this.renderRows();\n    }\n    /**\n     * Checks if there has been a change in sticky states since last check and applies the correct\n     * sticky styles. Since checking resets the \"dirty\" state, this should only be performed once\n     * during a change detection and after the inputs are settled (after content check).\n     */\n    _checkStickyStates() {\n        const stickyCheckReducer = (acc, d) => {\n            return acc || d.hasStickyChanged();\n        };\n        // Note that the check needs to occur for every definition since it notifies the definition\n        // that it can reset its dirty state. Using another operator like `some` may short-circuit\n        // remaining definitions and leave them in an unchecked state.\n        if (this._headerRowDefs.reduce(stickyCheckReducer, false)) {\n            this.updateStickyHeaderRowStyles();\n        }\n        if (this._footerRowDefs.reduce(stickyCheckReducer, false)) {\n            this.updateStickyFooterRowStyles();\n        }\n        if (Array.from(this._columnDefsByName.values()).reduce(stickyCheckReducer, false)) {\n            this._stickyColumnStylesNeedReset = true;\n            this.updateStickyColumnStyles();\n        }\n    }\n    /**\n     * Creates the sticky styler that will be used for sticky rows and columns. Listens\n     * for directionality changes and provides the latest direction to the styler. Re-applies column\n     * stickiness when directionality changes.\n     */\n    _setupStickyStyler() {\n        const direction = this._dir ? this._dir.value : 'ltr';\n        this._stickyStyler = new StickyStyler(this._isNativeHtmlTable, this.stickyCssClass, direction, this._coalescedStyleScheduler, this._platform.isBrowser, this.needsPositionStickyOnElement, this._stickyPositioningListener);\n        (this._dir ? this._dir.change : of())\n            .pipe(takeUntil(this._onDestroy))\n            .subscribe(value => {\n            this._stickyStyler.direction = value;\n            this.updateStickyColumnStyles();\n        });\n    }\n    /** Filters definitions that belong to this table from a QueryList. */\n    _getOwnDefs(items) {\n        return items.filter(item => !item._table || item._table === this);\n    }\n    /** Creates or removes the no data row, depending on whether any data is being shown. */\n    _updateNoDataRow() {\n        const noDataRow = this._customNoDataRow || this._noDataRow;\n        if (!noDataRow) {\n            return;\n        }\n        const shouldShow = this._rowOutlet.viewContainer.length === 0;\n        if (shouldShow === this._isShowingNoDataRow) {\n            return;\n        }\n        const container = this._noDataRowOutlet.viewContainer;\n        if (shouldShow) {\n            const view = container.createEmbeddedView(noDataRow.templateRef);\n            const rootNode = view.rootNodes[0];\n            // Only add the attributes if we have a single root node since it's hard\n            // to figure out which one to add it to when there are multiple.\n            if (view.rootNodes.length === 1 && rootNode?.nodeType === this._document.ELEMENT_NODE) {\n                rootNode.setAttribute('role', 'row');\n                rootNode.classList.add(noDataRow._contentClassName);\n            }\n        }\n        else {\n            container.clear();\n        }\n        this._isShowingNoDataRow = shouldShow;\n        this._changeDetectorRef.markForCheck();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkTable, deps: [{ token: i0.IterableDiffers }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: 'role', attribute: true }, { token: i1.Directionality, optional: true }, { token: DOCUMENT }, { token: i2.Platform }, { token: _VIEW_REPEATER_STRATEGY }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i3.ViewportRuler }, { token: STICKY_POSITIONING_LISTENER, optional: true, skipSelf: true }, { token: i0.NgZone, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.2.0\", type: CdkTable, isStandalone: true, selector: \"cdk-table, table[cdk-table]\", inputs: { trackBy: \"trackBy\", dataSource: \"dataSource\", multiTemplateDataRows: [\"multiTemplateDataRows\", \"multiTemplateDataRows\", booleanAttribute], fixedLayout: [\"fixedLayout\", \"fixedLayout\", booleanAttribute] }, 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 }], exportAs: [\"cdkTable\"], ngImport: i0, template: \"\\n  <ng-content select=\\\"caption\\\"/>\\n  <ng-content select=\\\"colgroup, col\\\"/>\\n\\n  <!--\\n    Unprojected content throws a hydration error so we need this to capture it.\\n    It gets removed on the client so it doesn't affect the layout.\\n  -->\\n  @if (_isServer) {\\n    <ng-content/>\\n  }\\n\\n  @if (_isNativeHtmlTable) {\\n    <thead role=\\\"rowgroup\\\">\\n      <ng-container headerRowOutlet/>\\n    </thead>\\n    <tbody role=\\\"rowgroup\\\">\\n      <ng-container rowOutlet/>\\n      <ng-container noDataRowOutlet/>\\n    </tbody>\\n    <tfoot role=\\\"rowgroup\\\">\\n      <ng-container footerRowOutlet/>\\n    </tfoot>\\n  } @else {\\n    <ng-container headerRowOutlet/>\\n    <ng-container rowOutlet/>\\n    <ng-container noDataRowOutlet/>\\n    <ng-container footerRowOutlet/>\\n  }\\n\", isInline: true, styles: [\".cdk-table-fixed-layout{table-layout:fixed}\"], dependencies: [{ kind: \"directive\", type: HeaderRowOutlet, selector: \"[headerRowOutlet]\" }, { kind: \"directive\", type: DataRowOutlet, selector: \"[rowOutlet]\" }, { kind: \"directive\", type: NoDataRowOutlet, selector: \"[noDataRowOutlet]\" }, { kind: \"directive\", type: FooterRowOutlet, selector: \"[footerRowOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.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                    ], standalone: true, imports: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet], styles: [\".cdk-table-fixed-layout{table-layout:fixed}\"] }]\n        }], ctorParameters: () => [{ type: i0.IterableDiffers }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n                    type: Attribute,\n                    args: ['role']\n                }] }, { type: i1.Directionality, decorators: [{\n                    type: Optional\n                }] }, { type: undefined, decorators: [{\n                    type: Inject,\n                    args: [DOCUMENT]\n                }] }, { type: i2.Platform }, { type: undefined, decorators: [{\n                    type: Inject,\n                    args: [_VIEW_REPEATER_STRATEGY]\n                }] }, { type: _CoalescedStyleScheduler, decorators: [{\n                    type: Inject,\n                    args: [_COALESCED_STYLE_SCHEDULER]\n                }] }, { type: i3.ViewportRuler }, { type: undefined, decorators: [{\n                    type: Optional\n                }, {\n                    type: SkipSelf\n                }, {\n                    type: Inject,\n                    args: [STICKY_POSITIONING_LISTENER]\n                }] }, { type: i0.NgZone, decorators: [{\n                    type: Optional\n                }] }], propDecorators: { trackBy: [{\n                type: Input\n            }], dataSource: [{\n                type: Input\n            }], multiTemplateDataRows: [{\n                type: Input,\n                args: [{ transform: booleanAttribute }]\n            }], fixedLayout: [{\n                type: Input,\n                args: [{ transform: booleanAttribute }]\n            }], contentChanged: [{\n                type: Output\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 * Finds the closest table section to an outlet. We can't use `HTMLElement.closest` for this,\n * because the node representing the outlet is a comment.\n */\nfunction closestTableSection(outlet, section) {\n    const uppercaseSection = section.toUpperCase();\n    let current = outlet.viewContainer.element.nativeElement;\n    while (current) {\n        // 1 is an element node.\n        const nodeName = current.nodeType === 1 ? current.nodeName : null;\n        if (nodeName === uppercaseSection) {\n            return current;\n        }\n        else if (nodeName === 'TABLE') {\n            // Stop traversing past the `table` node.\n            break;\n        }\n        current = current.parentNode;\n    }\n    return null;\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 */\nclass CdkTextColumn {\n    /** Column name that should be used to reference this column. */\n    get name() {\n        return this._name;\n    }\n    set name(name) {\n        this._name = name;\n        // With Ivy, inputs can be initialized before static query results are\n        // available. In that case, we defer the synchronization until \"ngOnInit\" fires.\n        this._syncColumnDefName();\n    }\n    constructor(\n    // `CdkTextColumn` is always requiring a table, but we just assert it manually\n    // for better error reporting.\n    // tslint:disable-next-line: lightweight-tokens\n    _table, _options) {\n        this._table = _table;\n        this._options = _options;\n        /** Alignment of the cell values. */\n        this.justify = 'start';\n        this._options = _options || {};\n    }\n    ngOnInit() {\n        this._syncColumnDefName();\n        if (this.headerText === undefined) {\n            this.headerText = this._createDefaultHeaderText();\n        }\n        if (!this.dataAccessor) {\n            this.dataAccessor =\n                this._options.defaultDataAccessor || ((data, name) => data[name]);\n        }\n        if (this._table) {\n            // Provide the cell and headerCell directly to the table with the static `ViewChild` query,\n            // since the columnDef will not pick up its content by the time the table finishes checking\n            // its content and initializing the rows.\n            this.columnDef.cell = this.cell;\n            this.columnDef.headerCell = this.headerCell;\n            this._table.addColumnDef(this.columnDef);\n        }\n        else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n            throw getTableTextColumnMissingParentTableError();\n        }\n    }\n    ngOnDestroy() {\n        if (this._table) {\n            this._table.removeColumnDef(this.columnDef);\n        }\n    }\n    /**\n     * Creates a default header text. Use the options' header text transformation function if one\n     * has been provided. Otherwise simply capitalize the column name.\n     */\n    _createDefaultHeaderText() {\n        const name = this.name;\n        if (!name && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n            throw getTableTextColumnMissingNameError();\n        }\n        if (this._options && this._options.defaultHeaderTextTransform) {\n            return this._options.defaultHeaderTextTransform(name);\n        }\n        return name[0].toUpperCase() + name.slice(1);\n    }\n    /** Synchronizes the column definition name with the text column name. */\n    _syncColumnDefName() {\n        if (this.columnDef) {\n            this.columnDef.name = this.name;\n        }\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkTextColumn, deps: [{ token: CdkTable, optional: true }, { token: TEXT_COLUMN_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.2.0\", type: CdkTextColumn, isStandalone: true, 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, dependencies: [{ kind: \"directive\", type: CdkColumnDef, selector: \"[cdkColumnDef]\", inputs: [\"cdkColumnDef\", \"sticky\", \"stickyEnd\"] }, { kind: \"directive\", type: CdkHeaderCellDef, selector: \"[cdkHeaderCellDef]\" }, { kind: \"directive\", type: CdkHeaderCell, selector: \"cdk-header-cell, th[cdk-header-cell]\" }, { kind: \"directive\", type: CdkCellDef, selector: \"[cdkCellDef]\" }, { kind: \"directive\", type: CdkCell, selector: \"cdk-cell, td[cdk-cell]\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.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                    standalone: true,\n                    imports: [CdkColumnDef, CdkHeaderCellDef, CdkHeaderCell, CdkCellDef, CdkCell],\n                }]\n        }], ctorParameters: () => [{ type: CdkTable, decorators: [{\n                    type: Optional\n                }] }, { type: undefined, decorators: [{\n                    type: Optional\n                }, {\n                    type: Inject,\n                    args: [TEXT_COLUMN_OPTIONS]\n                }] }], propDecorators: { name: [{\n                type: Input\n            }], headerText: [{\n                type: Input\n            }], dataAccessor: [{\n                type: Input\n            }], justify: [{\n                type: Input\n            }], columnDef: [{\n                type: ViewChild,\n                args: [CdkColumnDef, { static: true }]\n            }], cell: [{\n                type: ViewChild,\n                args: [CdkCellDef, { static: true }]\n            }], headerCell: [{\n                type: ViewChild,\n                args: [CdkHeaderCellDef, { static: true }]\n            }] } });\n\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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n    static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkTableModule, imports: [ScrollingModule, 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], 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] }); }\n    static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkTableModule, imports: [ScrollingModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkTableModule, decorators: [{\n            type: NgModule,\n            args: [{\n                    exports: EXPORTED_DECLARATIONS,\n                    imports: [ScrollingModule, ...EXPORTED_DECLARATIONS],\n                }]\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 * @deprecated Implement the `CanStick` interface instead.\n * @breaking-change 19.0.0\n */\nfunction mixinHasStickyInput(base) {\n    return class extends base {\n        /** Whether sticky positioning should be applied. */\n        get sticky() {\n            return this._sticky;\n        }\n        set sticky(v) {\n            const prevValue = this._sticky;\n            this._sticky = coerceBooleanProperty(v);\n            this._hasStickyChanged = prevValue !== this._sticky;\n        }\n        /** Whether the sticky value has changed since this was last called. */\n        hasStickyChanged() {\n            const hasStickyChanged = this._hasStickyChanged;\n            this._hasStickyChanged = false;\n            return hasStickyChanged;\n        }\n        /** Resets the dirty check for cases where the sticky state has been used without checking. */\n        resetStickyChanged() {\n            this._hasStickyChanged = false;\n        }\n        constructor(...args) {\n            super(...args);\n            this._sticky = false;\n            /** Whether the sticky input has changed since it was last checked. */\n            this._hasStickyChanged = false;\n        }\n    };\n}\n\n/**\n * 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"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}