{"version":3,"sources":["node_modules/@angular/cdk/fesm2022/table.mjs","node_modules/@angular/material/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 _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 {\n this.ɵfac = function CdkCellDef_Factory(t) {\n return new (t || CdkCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkCellDef,\n selectors: [[\"\", \"cdkCellDef\", \"\"]],\n standalone: true\n });\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 {\n this.ɵfac = function CdkHeaderCellDef_Factory(t) {\n return new (t || CdkHeaderCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkHeaderCellDef,\n selectors: [[\"\", \"cdkHeaderCellDef\", \"\"]],\n standalone: true\n });\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 {\n this.ɵfac = function CdkFooterCellDef_Factory(t) {\n return new (t || CdkFooterCellDef)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkFooterCellDef,\n selectors: [[\"\", \"cdkFooterCellDef\", \"\"]],\n standalone: true\n });\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 {\n this.ɵfac = function CdkColumnDef_Factory(t) {\n return new (t || CdkColumnDef)(i0.ɵɵdirectiveInject(CDK_TABLE, 8));\n };\n }\n static {\n 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 }\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 {\n this.ɵfac = function CdkHeaderCell_Factory(t) {\n return new (t || CdkHeaderCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n 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 }\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 {\n this.ɵfac = function CdkFooterCell_Factory(t) {\n return new (t || CdkFooterCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n 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 }\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 {\n this.ɵfac = function CdkCell_Factory(t) {\n return new (t || CdkCell)(i0.ɵɵdirectiveInject(CdkColumnDef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n 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 }\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 {\n this.ɵfac = function _CoalescedStyleScheduler_Factory(t) {\n return new (t || _CoalescedStyleScheduler)(i0.ɵɵinject(i0.NgZone));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: _CoalescedStyleScheduler,\n factory: _CoalescedStyleScheduler.ɵfac\n });\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 = ``;\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 {\n this.ɵfac = function BaseRowDef_Factory(t) {\n return new (t || BaseRowDef)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BaseRowDef,\n features: [i0.ɵɵNgOnChangesFeature]\n });\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 {\n 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 }\n static {\n 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 }\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 {\n 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 }\n static {\n 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 }\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 {\n 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 }\n static {\n 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 }\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 {\n this.mostRecentCellOutlet = null;\n }\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 {\n this.ɵfac = function CdkCellOutlet_Factory(t) {\n return new (t || CdkCellOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkCellOutlet,\n selectors: [[\"\", \"cdkCellOutlet\", \"\"]],\n standalone: true\n });\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 {\n this.ɵfac = function CdkHeaderRow_Factory(t) {\n return new (t || CdkHeaderRow)();\n };\n }\n static {\n 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 }\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 {\n this.ɵfac = function CdkFooterRow_Factory(t) {\n return new (t || CdkFooterRow)();\n };\n }\n static {\n 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 }\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 {\n this.ɵfac = function CdkRow_Factory(t) {\n return new (t || CdkRow)();\n };\n }\n static {\n 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 }\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 {\n this.ɵfac = function CdkNoDataRow_Factory(t) {\n return new (t || CdkNoDataRow)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkNoDataRow,\n selectors: [[\"ng-template\", \"cdkNoDataRow\", \"\"]],\n standalone: true\n });\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 `` 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 {\n this.ɵfac = function CdkRecycleRows_Factory(t) {\n return new (t || CdkRecycleRows)();\n };\n }\n static {\n 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 }\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 {\n this.ɵfac = function DataRowOutlet_Factory(t) {\n return new (t || DataRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DataRowOutlet,\n selectors: [[\"\", \"rowOutlet\", \"\"]],\n standalone: true\n });\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 {\n this.ɵfac = function HeaderRowOutlet_Factory(t) {\n return new (t || HeaderRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: HeaderRowOutlet,\n selectors: [[\"\", \"headerRowOutlet\", \"\"]],\n standalone: true\n });\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 {\n this.ɵfac = function FooterRowOutlet_Factory(t) {\n return new (t || FooterRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FooterRowOutlet,\n selectors: [[\"\", \"footerRowOutlet\", \"\"]],\n standalone: true\n });\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 {\n this.ɵfac = function NoDataRowOutlet_Factory(t) {\n return new (t || NoDataRowOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NoDataRowOutlet,\n selectors: [[\"\", \"noDataRowOutlet\", \"\"]],\n standalone: true\n });\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 \n \n\n \n @if (_isServer) {\n \n }\n\n @if (_isNativeHtmlTable) {\n \n \n \n \n \n \n \n \n \n \n } @else {\n \n \n \n \n }\n`;\n/**\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.
),\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` object. With the two keys, the cache points to a `RenderRow` object that\n * contains an array of created pairs. The array is necessary to handle cases where the data\n * array contains multiple duplicate data objects and each instantiated `RenderRow` must be\n * stored.\n */\n this._cachedRenderRowsMap = new Map();\n /**\n * CSS class added to any row or cell that has sticky positioning applied. May be overridden by\n * table subclasses.\n */\n this.stickyCssClass = 'cdk-table-sticky';\n /**\n * Whether to manually add position: sticky to all sticky cell elements. Not needed if\n * the position is set in a selector associated with the value of stickyCssClass. May be\n * overridden by table subclasses\n */\n this.needsPositionStickyOnElement = true;\n /** Whether the no data row is currently showing anything. */\n this._isShowingNoDataRow = false;\n /** 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` 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 {\n 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 }\n static {\n 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 }\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 (`
`).\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 {\n this.ɵfac = function CdkTextColumn_Factory(t) {\n return new (t || CdkTextColumn)(i0.ɵɵdirectiveInject(CdkTable, 8), i0.ɵɵdirectiveInject(TEXT_COLUMN_OPTIONS, 8));\n };\n }\n static {\n 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 }\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 {\n this.ɵfac = function CdkTableModule_Factory(t) {\n return new (t || CdkTableModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: CdkTableModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [ScrollingModule]\n });\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 };\n","import * as i0 from '@angular/core';\nimport { Directive, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, booleanAttribute, NgModule } from '@angular/core';\nimport { CdkTable, CDK_TABLE, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, STICKY_POSITIONING_LISTENER, HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet, CdkCellDef, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkHeaderCell, CdkFooterCell, CdkCell, CdkHeaderRowDef, CdkFooterRowDef, CdkRowDef, CdkHeaderRow, CdkCellOutlet, CdkFooterRow, CdkRow, CdkNoDataRow, CdkTextColumn, CdkTableModule } from '@angular/cdk/table';\nimport { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, _DisposeViewRepeaterStrategy, DataSource } from '@angular/cdk/collections';\nimport { MatCommonModule } from '@angular/material/core';\nimport { BehaviorSubject, Subject, merge, of, combineLatest } from 'rxjs';\nimport { _isNumberValue } from '@angular/cdk/coercion';\nimport { map } from 'rxjs/operators';\n\n/**\n * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with\n * tables that animate rows.\n */\nconst _c0 = [[[\"caption\"]], [[\"colgroup\"], [\"col\"]], \"*\"];\nconst _c1 = [\"caption\", \"colgroup, col\", \"*\"];\nfunction MatTable_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojection(0, 2);\n }\n}\nfunction MatTable_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\", 2);\n i0.ɵɵelementContainer(3, 3)(4, 4);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(5, \"tfoot\", 0);\n i0.ɵɵelementContainer(6, 5);\n i0.ɵɵelementEnd();\n }\n}\nfunction MatTable_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 1)(1, 3)(2, 4)(3, 5);\n }\n}\nfunction MatTextColumn_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 MatTextColumn_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}\nlet MatRecycleRows = /*#__PURE__*/(() => {\n class MatRecycleRows {\n static {\n this.ɵfac = function MatRecycleRows_Factory(t) {\n return new (t || MatRecycleRows)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatRecycleRows,\n selectors: [[\"mat-table\", \"recycleRows\", \"\"], [\"table\", \"mat-table\", \"\", \"recycleRows\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: _VIEW_REPEATER_STRATEGY,\n useClass: _RecycleViewRepeaterStrategy\n }])]\n });\n }\n }\n return MatRecycleRows;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatTable = /*#__PURE__*/(() => {\n class MatTable extends CdkTable {\n constructor() {\n super(...arguments);\n /** Overrides the sticky CSS class set by the `CdkTable`. */\n this.stickyCssClass = 'mat-mdc-table-sticky';\n /** Overrides the need to add position: sticky on every sticky cell element in `CdkTable`. */\n this.needsPositionStickyOnElement = false;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatTable_BaseFactory;\n return function MatTable_Factory(t) {\n return (ɵMatTable_BaseFactory || (ɵMatTable_BaseFactory = i0.ɵɵgetInheritedFactory(MatTable)))(t || MatTable);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatTable,\n selectors: [[\"mat-table\"], [\"table\", \"mat-table\", \"\"]],\n hostAttrs: [1, \"mat-mdc-table\", \"mdc-data-table__table\"],\n hostVars: 2,\n hostBindings: function MatTable_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mdc-table-fixed-layout\", ctx.fixedLayout);\n }\n },\n exportAs: [\"matTable\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkTable,\n useExisting: MatTable\n }, {\n provide: CDK_TABLE,\n useExisting: MatTable\n }, {\n provide: _COALESCED_STYLE_SCHEDULER,\n useClass: _CoalescedStyleScheduler\n },\n // TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code\n // is only included in the build if used.\n {\n provide: _VIEW_REPEATER_STRATEGY,\n useClass: _DisposeViewRepeaterStrategy\n },\n // Prevent nested tables from seeing this table's StickyPositioningListener.\n {\n provide: STICKY_POSITIONING_LISTENER,\n useValue: null\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c1,\n decls: 5,\n vars: 2,\n consts: [[\"role\", \"rowgroup\"], [\"headerRowOutlet\", \"\"], [\"role\", \"rowgroup\", 1, \"mdc-data-table__content\"], [\"rowOutlet\", \"\"], [\"noDataRowOutlet\", \"\"], [\"footerRowOutlet\", \"\"]],\n template: function MatTable_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c0);\n i0.ɵɵprojection(0);\n i0.ɵɵprojection(1, 1);\n i0.ɵɵtemplate(2, MatTable_Conditional_2_Template, 1, 0)(3, MatTable_Conditional_3_Template, 7, 0)(4, MatTable_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: [\".mat-mdc-table-sticky{position:sticky !important}.mdc-data-table{-webkit-overflow-scrolling:touch;display:inline-flex;flex-direction:column;box-sizing:border-box;position:relative}.mdc-data-table__table-container{-webkit-overflow-scrolling:touch;overflow-x:auto;width:100%}.mdc-data-table__table{min-width:100%;border:0;white-space:nowrap;border-spacing:0;table-layout:fixed}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:left;text-overflow:ellipsis}[dir=rtl] .mdc-data-table__cell,.mdc-data-table__cell[dir=rtl]{text-align:right}.mdc-data-table__cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__cell--numeric,.mdc-data-table__cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__header-cell{box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:left}[dir=rtl] .mdc-data-table__header-cell,.mdc-data-table__header-cell[dir=rtl]{text-align:right}.mdc-data-table__header-cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__header-cell--numeric,.mdc-data-table__header-cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__header-cell-wrapper{align-items:center;display:inline-flex;vertical-align:middle}.mdc-data-table__cell,.mdc-data-table__header-cell{padding:0 16px 0 16px}.mdc-data-table__header-cell--checkbox,.mdc-data-table__cell--checkbox{padding-left:4px;padding-right:0}[dir=rtl] .mdc-data-table__header-cell--checkbox,[dir=rtl] .mdc-data-table__cell--checkbox,.mdc-data-table__header-cell--checkbox[dir=rtl],.mdc-data-table__cell--checkbox[dir=rtl]{padding-left:0;padding-right:4px}mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}.mat-mdc-table{table-layout:auto;white-space:normal;background-color:var(--mat-table-background-color)}.mat-mdc-header-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-header-container-height, 56px);color:var(--mat-table-header-headline-color, rgba(0, 0, 0, 0.87));font-family:var(--mat-table-header-headline-font, Roboto, sans-serif);line-height:var(--mat-table-header-headline-line-height);font-size:var(--mat-table-header-headline-size, 14px);font-weight:var(--mat-table-header-headline-weight, 500)}.mat-mdc-row{height:var(--mat-table-row-item-container-height, 52px);color:var(--mat-table-row-item-label-text-color, rgba(0, 0, 0, 0.87))}.mat-mdc-row,.mdc-data-table__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-table-row-item-label-text-font, Roboto, sans-serif);line-height:var(--mat-table-row-item-label-text-line-height);font-size:var(--mat-table-row-item-label-text-size, 14px);font-weight:var(--mat-table-row-item-label-text-weight)}.mat-mdc-footer-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-footer-container-height, 52px);color:var(--mat-table-row-item-label-text-color, rgba(0, 0, 0, 0.87));font-family:var(--mat-table-footer-supporting-text-font, Roboto, sans-serif);line-height:var(--mat-table-footer-supporting-text-line-height);font-size:var(--mat-table-footer-supporting-text-size, 14px);font-weight:var(--mat-table-footer-supporting-text-weight);letter-spacing:var(--mat-table-footer-supporting-text-tracking)}.mat-mdc-header-cell{border-bottom-color:var(--mat-table-row-item-outline-color, rgba(0, 0, 0, 0.12));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-header-headline-tracking);font-weight:inherit;line-height:inherit}.mat-mdc-cell{border-bottom-color:var(--mat-table-row-item-outline-color, rgba(0, 0, 0, 0.12));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-row-item-label-text-tracking);line-height:inherit}.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:none}.mat-mdc-footer-cell{letter-spacing:var(--mat-table-row-item-label-text-tracking)}mat-row.mat-mdc-row,mat-header-row.mat-mdc-header-row,mat-footer-row.mat-mdc-footer-row{border-bottom:none}.mat-mdc-table tbody,.mat-mdc-table tfoot,.mat-mdc-table thead,.mat-mdc-cell,.mat-mdc-footer-cell,.mat-mdc-header-row,.mat-mdc-row,.mat-mdc-footer-row,.mat-mdc-table .mat-mdc-header-cell{background:inherit}.mat-mdc-table mat-header-row.mat-mdc-header-row,.mat-mdc-table mat-row.mat-mdc-row,.mat-mdc-table mat-footer-row.mat-mdc-footer-cell{height:unset}mat-header-cell.mat-mdc-header-cell,mat-cell.mat-mdc-cell,mat-footer-cell.mat-mdc-footer-cell{align-self:stretch}\"],\n encapsulation: 2\n });\n }\n }\n return MatTable;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Cell definition for the mat-table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nlet MatCellDef = /*#__PURE__*/(() => {\n class MatCellDef extends CdkCellDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatCellDef_BaseFactory;\n return function MatCellDef_Factory(t) {\n return (ɵMatCellDef_BaseFactory || (ɵMatCellDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatCellDef)))(t || MatCellDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCellDef,\n selectors: [[\"\", \"matCellDef\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkCellDef,\n useExisting: MatCellDef\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatCellDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Header cell definition for the mat-table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nlet MatHeaderCellDef = /*#__PURE__*/(() => {\n class MatHeaderCellDef extends CdkHeaderCellDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatHeaderCellDef_BaseFactory;\n return function MatHeaderCellDef_Factory(t) {\n return (ɵMatHeaderCellDef_BaseFactory || (ɵMatHeaderCellDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatHeaderCellDef)))(t || MatHeaderCellDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatHeaderCellDef,\n selectors: [[\"\", \"matHeaderCellDef\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkHeaderCellDef,\n useExisting: MatHeaderCellDef\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatHeaderCellDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Footer cell definition for the mat-table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\nlet MatFooterCellDef = /*#__PURE__*/(() => {\n class MatFooterCellDef extends CdkFooterCellDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatFooterCellDef_BaseFactory;\n return function MatFooterCellDef_Factory(t) {\n return (ɵMatFooterCellDef_BaseFactory || (ɵMatFooterCellDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatFooterCellDef)))(t || MatFooterCellDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFooterCellDef,\n selectors: [[\"\", \"matFooterCellDef\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkFooterCellDef,\n useExisting: MatFooterCellDef\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatFooterCellDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Column definition for the mat-table.\n * Defines a set of cells available for a table column.\n */\nlet MatColumnDef = /*#__PURE__*/(() => {\n class MatColumnDef extends CdkColumnDef {\n /** Unique name for this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._setNameInput(name);\n }\n /**\n * Add \"mat-column-\" prefix in addition to \"cdk-column-\" prefix.\n * In the future, this will only add \"mat-column-\" and columnCssClassName\n * will change from type string[] to string.\n * @docs-private\n */\n _updateColumnCssClassName() {\n super._updateColumnCssClassName();\n this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatColumnDef_BaseFactory;\n return function MatColumnDef_Factory(t) {\n return (ɵMatColumnDef_BaseFactory || (ɵMatColumnDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatColumnDef)))(t || MatColumnDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatColumnDef,\n selectors: [[\"\", \"matColumnDef\", \"\"]],\n inputs: {\n name: [i0.ɵɵInputFlags.None, \"matColumnDef\", \"name\"]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkColumnDef,\n useExisting: MatColumnDef\n }, {\n provide: 'MAT_SORT_HEADER_COLUMN_DEF',\n useExisting: MatColumnDef\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatColumnDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Header cell template container that adds the right classes and role. */\nlet MatHeaderCell = /*#__PURE__*/(() => {\n class MatHeaderCell extends CdkHeaderCell {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatHeaderCell_BaseFactory;\n return function MatHeaderCell_Factory(t) {\n return (ɵMatHeaderCell_BaseFactory || (ɵMatHeaderCell_BaseFactory = i0.ɵɵgetInheritedFactory(MatHeaderCell)))(t || MatHeaderCell);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatHeaderCell,\n selectors: [[\"mat-header-cell\"], [\"th\", \"mat-header-cell\", \"\"]],\n hostAttrs: [\"role\", \"columnheader\", 1, \"mat-mdc-header-cell\", \"mdc-data-table__header-cell\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatHeaderCell;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Footer cell template container that adds the right classes and role. */\nlet MatFooterCell = /*#__PURE__*/(() => {\n class MatFooterCell extends CdkFooterCell {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatFooterCell_BaseFactory;\n return function MatFooterCell_Factory(t) {\n return (ɵMatFooterCell_BaseFactory || (ɵMatFooterCell_BaseFactory = i0.ɵɵgetInheritedFactory(MatFooterCell)))(t || MatFooterCell);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFooterCell,\n selectors: [[\"mat-footer-cell\"], [\"td\", \"mat-footer-cell\", \"\"]],\n hostAttrs: [1, \"mat-mdc-footer-cell\", \"mdc-data-table__cell\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatFooterCell;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Cell template container that adds the right classes and role. */\nlet MatCell = /*#__PURE__*/(() => {\n class MatCell extends CdkCell {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatCell_BaseFactory;\n return function MatCell_Factory(t) {\n return (ɵMatCell_BaseFactory || (ɵMatCell_BaseFactory = i0.ɵɵgetInheritedFactory(MatCell)))(t || MatCell);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCell,\n selectors: [[\"mat-cell\"], [\"td\", \"mat-cell\", \"\"]],\n hostAttrs: [1, \"mat-mdc-cell\", \"mdc-data-table__cell\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatCell;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// We can't reuse `CDK_ROW_TEMPLATE` because it's incompatible with local compilation mode.\nconst ROW_TEMPLATE = ``;\n/**\n * Header row definition for the mat-table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nlet MatHeaderRowDef = /*#__PURE__*/(() => {\n class MatHeaderRowDef extends CdkHeaderRowDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatHeaderRowDef_BaseFactory;\n return function MatHeaderRowDef_Factory(t) {\n return (ɵMatHeaderRowDef_BaseFactory || (ɵMatHeaderRowDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatHeaderRowDef)))(t || MatHeaderRowDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatHeaderRowDef,\n selectors: [[\"\", \"matHeaderRowDef\", \"\"]],\n inputs: {\n columns: [i0.ɵɵInputFlags.None, \"matHeaderRowDef\", \"columns\"],\n sticky: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"matHeaderRowDefSticky\", \"sticky\", booleanAttribute]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkHeaderRowDef,\n useExisting: MatHeaderRowDef\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatHeaderRowDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Footer row definition for the mat-table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nlet MatFooterRowDef = /*#__PURE__*/(() => {\n class MatFooterRowDef extends CdkFooterRowDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatFooterRowDef_BaseFactory;\n return function MatFooterRowDef_Factory(t) {\n return (ɵMatFooterRowDef_BaseFactory || (ɵMatFooterRowDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatFooterRowDef)))(t || MatFooterRowDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFooterRowDef,\n selectors: [[\"\", \"matFooterRowDef\", \"\"]],\n inputs: {\n columns: [i0.ɵɵInputFlags.None, \"matFooterRowDef\", \"columns\"],\n sticky: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"matFooterRowDefSticky\", \"sticky\", booleanAttribute]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkFooterRowDef,\n useExisting: MatFooterRowDef\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatFooterRowDef;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Data row definition for the mat-table.\n * Captures the data row's template and other properties such as the columns to display and\n * a when predicate that describes when this row should be used.\n */\nlet MatRowDef = /*#__PURE__*/(() => {\n class MatRowDef extends CdkRowDef {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatRowDef_BaseFactory;\n return function MatRowDef_Factory(t) {\n return (ɵMatRowDef_BaseFactory || (ɵMatRowDef_BaseFactory = i0.ɵɵgetInheritedFactory(MatRowDef)))(t || MatRowDef);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatRowDef,\n selectors: [[\"\", \"matRowDef\", \"\"]],\n inputs: {\n columns: [i0.ɵɵInputFlags.None, \"matRowDefColumns\", \"columns\"],\n when: [i0.ɵɵInputFlags.None, \"matRowDefWhen\", \"when\"]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkRowDef,\n useExisting: MatRowDef\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatRowDef;\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 MatHeaderRow = /*#__PURE__*/(() => {\n class MatHeaderRow extends CdkHeaderRow {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatHeaderRow_BaseFactory;\n return function MatHeaderRow_Factory(t) {\n return (ɵMatHeaderRow_BaseFactory || (ɵMatHeaderRow_BaseFactory = i0.ɵɵgetInheritedFactory(MatHeaderRow)))(t || MatHeaderRow);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatHeaderRow,\n selectors: [[\"mat-header-row\"], [\"tr\", \"mat-header-row\", \"\"]],\n hostAttrs: [\"role\", \"row\", 1, \"mat-mdc-header-row\", \"mdc-data-table__header-row\"],\n exportAs: [\"matHeaderRow\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkHeaderRow,\n useExisting: MatHeaderRow\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkCellOutlet\", \"\"]],\n template: function MatHeaderRow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 0);\n }\n },\n dependencies: [CdkCellOutlet],\n encapsulation: 2\n });\n }\n }\n return MatHeaderRow;\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 MatFooterRow = /*#__PURE__*/(() => {\n class MatFooterRow extends CdkFooterRow {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatFooterRow_BaseFactory;\n return function MatFooterRow_Factory(t) {\n return (ɵMatFooterRow_BaseFactory || (ɵMatFooterRow_BaseFactory = i0.ɵɵgetInheritedFactory(MatFooterRow)))(t || MatFooterRow);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatFooterRow,\n selectors: [[\"mat-footer-row\"], [\"tr\", \"mat-footer-row\", \"\"]],\n hostAttrs: [\"role\", \"row\", 1, \"mat-mdc-footer-row\", \"mdc-data-table__row\"],\n exportAs: [\"matFooterRow\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkFooterRow,\n useExisting: MatFooterRow\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkCellOutlet\", \"\"]],\n template: function MatFooterRow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 0);\n }\n },\n dependencies: [CdkCellOutlet],\n encapsulation: 2\n });\n }\n }\n return MatFooterRow;\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 MatRow = /*#__PURE__*/(() => {\n class MatRow extends CdkRow {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatRow_BaseFactory;\n return function MatRow_Factory(t) {\n return (ɵMatRow_BaseFactory || (ɵMatRow_BaseFactory = i0.ɵɵgetInheritedFactory(MatRow)))(t || MatRow);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatRow,\n selectors: [[\"mat-row\"], [\"tr\", \"mat-row\", \"\"]],\n hostAttrs: [\"role\", \"row\", 1, \"mat-mdc-row\", \"mdc-data-table__row\"],\n exportAs: [\"matRow\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkRow,\n useExisting: MatRow\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkCellOutlet\", \"\"]],\n template: function MatRow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 0);\n }\n },\n dependencies: [CdkCellOutlet],\n encapsulation: 2\n });\n }\n }\n return MatRow;\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 MatNoDataRow = /*#__PURE__*/(() => {\n class MatNoDataRow extends CdkNoDataRow {\n constructor() {\n super(...arguments);\n this._contentClassName = 'mat-mdc-no-data-row';\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatNoDataRow_BaseFactory;\n return function MatNoDataRow_Factory(t) {\n return (ɵMatNoDataRow_BaseFactory || (ɵMatNoDataRow_BaseFactory = i0.ɵɵgetInheritedFactory(MatNoDataRow)))(t || MatNoDataRow);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatNoDataRow,\n selectors: [[\"ng-template\", \"matNoDataRow\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkNoDataRow,\n useExisting: MatNoDataRow\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatNoDataRow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 (`
`).\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 MatTextColumn = /*#__PURE__*/(() => {\n class MatTextColumn extends CdkTextColumn {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatTextColumn_BaseFactory;\n return function MatTextColumn_Factory(t) {\n return (ɵMatTextColumn_BaseFactory || (ɵMatTextColumn_BaseFactory = i0.ɵɵgetInheritedFactory(MatTextColumn)))(t || MatTextColumn);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatTextColumn,\n selectors: [[\"mat-text-column\"]],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 3,\n vars: 0,\n consts: [[\"matColumnDef\", \"\"], [\"mat-header-cell\", \"\", 3, \"text-align\", 4, \"matHeaderCellDef\"], [\"mat-cell\", \"\", 3, \"text-align\", 4, \"matCellDef\"], [\"mat-header-cell\", \"\"], [\"mat-cell\", \"\"]],\n template: function MatTextColumn_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0, 0);\n i0.ɵɵtemplate(1, MatTextColumn_th_1_Template, 2, 3, \"th\", 1)(2, MatTextColumn_td_2_Template, 2, 3, \"td\", 2);\n i0.ɵɵelementContainerEnd();\n }\n },\n dependencies: [MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCellDef, MatCell],\n encapsulation: 2\n });\n }\n }\n return MatTextColumn;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst EXPORTED_DECLARATIONS = [\n// Table\nMatTable, MatRecycleRows,\n// Template defs\nMatHeaderCellDef, MatHeaderRowDef, MatColumnDef, MatCellDef, MatRowDef, MatFooterCellDef, MatFooterRowDef,\n// Cell directives\nMatHeaderCell, MatCell, MatFooterCell,\n// Row directives\nMatHeaderRow, MatRow, MatFooterRow, MatNoDataRow, MatTextColumn];\nlet MatTableModule = /*#__PURE__*/(() => {\n class MatTableModule {\n static {\n this.ɵfac = function MatTableModule_Factory(t) {\n return new (t || MatTableModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatTableModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, CdkTableModule, MatCommonModule]\n });\n }\n }\n return MatTableModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Corresponds to `Number.MAX_SAFE_INTEGER`. Moved out into a variable here due to\n * flaky browser support and the value not being defined in Closure's typings.\n */\nconst MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * Data source that accepts a client-side data array and includes native support of filtering,\n * sorting (using MatSort), and pagination (using MatPaginator).\n *\n * Allows for sort customization by overriding sortingDataAccessor, which defines how data\n * properties are accessed. Also allows for filter customization by overriding filterPredicate,\n * which defines how row data is converted to a string for filter matching.\n *\n * **Note:** This class is meant to be a simple data source to help you get started. As such\n * it isn't equipped to handle some more advanced cases like robust i18n support or server-side\n * interactions. If your app needs to support more advanced use cases, consider implementing your\n * own `DataSource`.\n */\nclass MatTableDataSource extends DataSource {\n /** Array of data that should be rendered by the table, where each object represents one row. */\n get data() {\n return this._data.value;\n }\n set data(data) {\n data = Array.isArray(data) ? data : [];\n this._data.next(data);\n // Normally the `filteredData` is updated by the re-render\n // subscription, but that won't happen if it's inactive.\n if (!this._renderChangesSubscription) {\n this._filterData(data);\n }\n }\n /**\n * Filter term that should be used to filter out objects from the data array. To override how\n * data objects match to this filter string, provide a custom function for filterPredicate.\n */\n get filter() {\n return this._filter.value;\n }\n set filter(filter) {\n this._filter.next(filter);\n // Normally the `filteredData` is updated by the re-render\n // subscription, but that won't happen if it's inactive.\n if (!this._renderChangesSubscription) {\n this._filterData(this.data);\n }\n }\n /**\n * Instance of the MatSort directive used by the table to control its sorting. Sort changes\n * emitted by the MatSort will trigger an update to the table's rendered data.\n */\n get sort() {\n return this._sort;\n }\n set sort(sort) {\n this._sort = sort;\n this._updateChangeSubscription();\n }\n /**\n * Instance of the paginator component used by the table to control what page of the data is\n * displayed. Page changes emitted by the paginator will trigger an update to the\n * table's rendered data.\n *\n * Note that the data source uses the paginator's properties to calculate which page of data\n * should be displayed. If the paginator receives its properties as template inputs,\n * e.g. `[pageLength]=100` or `[pageIndex]=1`, then be sure that the paginator's view has been\n * initialized before assigning it to this data source.\n */\n get paginator() {\n return this._paginator;\n }\n set paginator(paginator) {\n this._paginator = paginator;\n this._updateChangeSubscription();\n }\n constructor(initialData = []) {\n super();\n /** Stream emitting render data to the table (depends on ordered data changes). */\n this._renderData = new BehaviorSubject([]);\n /** Stream that emits when a new filter string is set on the data source. */\n this._filter = new BehaviorSubject('');\n /** Used to react to internal changes of the paginator that are made by the data source itself. */\n this._internalPageChanges = new Subject();\n /**\n * Subscription to the changes that should trigger an update to the table's rendered rows, such\n * as filtering, sorting, pagination, or base data changes.\n */\n this._renderChangesSubscription = null;\n /**\n * Data accessor function that is used for accessing data properties for sorting through\n * the default sortData function.\n * This default function assumes that the sort header IDs (which defaults to the column name)\n * matches the data's properties (e.g. column Xyz represents data['Xyz']).\n * May be set to a custom function for different behavior.\n * @param data Data object that is being accessed.\n * @param sortHeaderId The name of the column that represents the data.\n */\n this.sortingDataAccessor = (data, sortHeaderId) => {\n const value = data[sortHeaderId];\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\n // leave them as strings. For more info: https://goo.gl/y5vbSg\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n return value;\n };\n /**\n * Gets a sorted copy of the data array based on the state of the MatSort. Called\n * after changes are made to the filtered data or when sort changes are emitted from MatSort.\n * By default, the function retrieves the active sort and its direction and compares data\n * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation\n * of data ordering.\n * @param data The array of data that should be sorted.\n * @param sort The connected MatSort that holds the current sort state.\n */\n this.sortData = (data, sort) => {\n const active = sort.active;\n const direction = sort.direction;\n if (!active || direction == '') {\n return data;\n }\n return data.sort((a, b) => {\n let valueA = this.sortingDataAccessor(a, active);\n let valueB = this.sortingDataAccessor(b, active);\n // If there are data in the column that can be converted to a number,\n // it must be ensured that the rest of the data\n // is of the same type so as not to order incorrectly.\n const valueAType = typeof valueA;\n const valueBType = typeof valueB;\n if (valueAType !== valueBType) {\n if (valueAType === 'number') {\n valueA += '';\n }\n if (valueBType === 'number') {\n valueB += '';\n }\n }\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n if (valueA > valueB) {\n comparatorResult = 1;\n } else if (valueA < valueB) {\n comparatorResult = -1;\n }\n } else if (valueA != null) {\n comparatorResult = 1;\n } else if (valueB != null) {\n comparatorResult = -1;\n }\n return comparatorResult * (direction == 'asc' ? 1 : -1);\n });\n };\n /**\n * Checks if a data object matches the data source's filter string. By default, each data object\n * is converted to a string of its properties and returns true if the filter has\n * at least one occurrence in that string. By default, the filter string has its whitespace\n * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\n * filter matching.\n * @param data Data object used to check against the filter.\n * @param filter Filter string that has been set on the data source.\n * @returns Whether the filter matches against the data\n */\n this.filterPredicate = (data, filter) => {\n // Transform the data into a lowercase string of all property values.\n const dataStr = Object.keys(data).reduce((currentTerm, key) => {\n // Use an obscure Unicode character to delimit the words in the concatenated string.\n // This avoids matches where the values of two columns combined will match the user's query\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\n // that has a very low chance of being typed in by somebody in a text field. This one in\n // particular is \"White up-pointing triangle with dot\" from\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\n return currentTerm + data[key] + '◬';\n }, '').toLowerCase();\n // Transform the filter by converting it to lowercase and removing whitespace.\n const transformedFilter = filter.trim().toLowerCase();\n return dataStr.indexOf(transformedFilter) != -1;\n };\n this._data = new BehaviorSubject(initialData);\n this._updateChangeSubscription();\n }\n /**\n * Subscribe to changes that should trigger an update to the table's rendered rows. When the\n * changes occur, process the current state of the filter, sort, and pagination along with\n * the provided base data and send it to the table for rendering.\n */\n _updateChangeSubscription() {\n // Sorting and/or pagination should be watched if sort and/or paginator are provided.\n // The events should emit whenever the component emits a change or initializes, or if no\n // component is provided, a stream with just a null event should be provided.\n // The `sortChange` and `pageChange` acts as a signal to the combineLatests below so that the\n // pipeline can progress to the next step. Note that the value from these streams are not used,\n // they purely act as a signal to progress in the pipeline.\n const sortChange = this._sort ? merge(this._sort.sortChange, this._sort.initialized) : of(null);\n const pageChange = this._paginator ? merge(this._paginator.page, this._internalPageChanges, this._paginator.initialized) : of(null);\n const dataStream = this._data;\n // Watch for base data or filter changes to provide a filtered set of data.\n const filteredData = combineLatest([dataStream, this._filter]).pipe(map(([data]) => this._filterData(data)));\n // Watch for filtered data or sort changes to provide an ordered set of data.\n const orderedData = combineLatest([filteredData, sortChange]).pipe(map(([data]) => this._orderData(data)));\n // Watch for ordered data or page changes to provide a paged set of data.\n const paginatedData = combineLatest([orderedData, pageChange]).pipe(map(([data]) => this._pageData(data)));\n // Watched for paged data changes and send the result to the table to render.\n this._renderChangesSubscription?.unsubscribe();\n this._renderChangesSubscription = paginatedData.subscribe(data => this._renderData.next(data));\n }\n /**\n * Returns a filtered data array where each filter object contains the filter string within\n * the result of the filterPredicate function. If no filter is set, returns the data array\n * as provided.\n */\n _filterData(data) {\n // If there is a filter string, filter out data that does not contain it.\n // Each data object is converted to a string using the function defined by filterPredicate.\n // May be overridden for customization.\n this.filteredData = this.filter == null || this.filter === '' ? data : data.filter(obj => this.filterPredicate(obj, this.filter));\n if (this.paginator) {\n this._updatePaginator(this.filteredData.length);\n }\n return this.filteredData;\n }\n /**\n * Returns a sorted copy of the data if MatSort has a sort applied, otherwise just returns the\n * data array as provided. Uses the default data accessor for data lookup, unless a\n * sortDataAccessor function is defined.\n */\n _orderData(data) {\n // If there is no active sort or direction, return the data without trying to sort.\n if (!this.sort) {\n return data;\n }\n return this.sortData(data.slice(), this.sort);\n }\n /**\n * Returns a paged slice of the provided data array according to the provided paginator's page\n * index and length. If there is no paginator provided, returns the data array as provided.\n */\n _pageData(data) {\n if (!this.paginator) {\n return data;\n }\n const startIndex = this.paginator.pageIndex * this.paginator.pageSize;\n return data.slice(startIndex, startIndex + this.paginator.pageSize);\n }\n /**\n * Updates the paginator to reflect the length of the filtered data, and makes sure that the page\n * index does not exceed the paginator's last page. Values are changed in a resolved promise to\n * guard against making property changes within a round of change detection.\n */\n _updatePaginator(filteredDataLength) {\n Promise.resolve().then(() => {\n const paginator = this.paginator;\n if (!paginator) {\n return;\n }\n paginator.length = filteredDataLength;\n // If the page index is set beyond the page, reduce it to the last page.\n if (paginator.pageIndex > 0) {\n const lastPageIndex = Math.ceil(paginator.length / paginator.pageSize) - 1 || 0;\n const newPageIndex = Math.min(paginator.pageIndex, lastPageIndex);\n if (newPageIndex !== paginator.pageIndex) {\n paginator.pageIndex = newPageIndex;\n // Since the paginator only emits after user-generated changes,\n // we need our own stream so we know to should re-render the data.\n this._internalPageChanges.next();\n }\n }\n });\n }\n /**\n * Used by the MatTable. Called when it connects to the data source.\n * @docs-private\n */\n connect() {\n if (!this._renderChangesSubscription) {\n this._updateChangeSubscription();\n }\n return this._renderData;\n }\n /**\n * Used by the MatTable. Called when it disconnects from the data source.\n * @docs-private\n */\n disconnect() {\n this._renderChangesSubscription?.unsubscribe();\n this._renderChangesSubscription = null;\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRecycleRows, MatRow, MatRowDef, MatTable, MatTableDataSource, MatTableModule, MatTextColumn };\n"],"mappings":"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","names":["_c0","_c1","CdkTable_Conditional_2_Template","rf","ctx","ɵɵprojection","CdkTable_Conditional_3_Template","ɵɵelementStart","ɵɵelementContainer","ɵɵelementEnd","CdkTable_Conditional_4_Template","CDK_TABLE","InjectionToken","CdkCellDef","_CdkCellDef","template","t","ɵɵdirectiveInject","TemplateRef","ɵɵdefineDirective","CdkHeaderCellDef","_CdkHeaderCellDef","CdkFooterCellDef","_CdkFooterCellDef","CdkColumnDef","_CdkColumnDef","name","value","_table","hasStickyChanged","CDK_TABLE","rf","ctx","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","InputFlags","booleanAttribute","ɵɵProvidersFeature","ɵɵInputTransformsFeature","BaseCdkCell","columnDef","elementRef","CdkHeaderCell","_CdkHeaderCell","ElementRef","ɵɵInheritDefinitionFeature","CdkFooterCell","_CdkFooterCell","role","CdkCell","_CdkCell","_Schedule","_COALESCED_STYLE_SCHEDULER","InjectionToken","_CoalescedStyleScheduler","__CoalescedStyleScheduler","_ngZone","Subject","task","takeUntil","schedule","from","take","ɵɵinject","NgZone","ɵɵdefineInjectable","BaseRowDef","_BaseRowDef","template","_differs","changes","columns","column","CdkHeaderRowDef","CdkFooterRowDef","t","ɵɵdirectiveInject","TemplateRef","IterableDiffers","ɵɵdefineDirective","ɵɵNgOnChangesFeature","_CdkHeaderRowDef","value","_table","hasStickyChanged","CDK_TABLE","InputFlags","booleanAttribute","ɵɵInputTransformsFeature","ɵɵInheritDefinitionFeature","_CdkFooterRowDef","CdkRowDef","_CdkRowDef","CdkCellOutlet","_CdkCellOutlet","_viewContainer","ViewContainerRef","CdkHeaderRow","_CdkHeaderRow","ɵɵdefineComponent","ɵɵStandaloneFeature","rf","ctx","ɵɵelementContainer","CdkFooterRow","_CdkFooterRow","CdkRow","_CdkRow","CdkNoDataRow","_CdkNoDataRow","templateRef","STICKY_DIRECTIONS","StickyStyler","_isNativeHtmlTable","_stickCellCss","direction","_coalescedStyleScheduler","_isBrowser","_needsPositionStickyOnElement","_positionListener","rows","stickyDirections","elementsToClear","row","i","element","stickyStartStates","stickyEndStates","recalculateCellWidths","state","firstRow","numCells","cellWidths","startPositions","endPositions","lastStickyStart","firstStickyEnd","isRtl","start","end","cell","width","index","rowsToStick","stickyStates","position","states","stickyOffsets","stickyCellHeights","elementsToStick","rowIndex","stickyOffset","height","borderedRowIndex","offset","isBorderedRowIndex","tableElement","tfoot","dir","dirValue","isBorderElement","zIndexIncrements","zIndex","firstRowCells","widths","positions","nextPosition","STICKY_POSITIONING_LISTENER","InjectionToken","DataRowOutlet","_DataRowOutlet","viewContainer","elementRef","table","inject","CDK_TABLE","t","ɵɵdirectiveInject","ViewContainerRef","ElementRef","ɵɵdefineDirective","HeaderRowOutlet","_HeaderRowOutlet","FooterRowOutlet","_FooterRowOutlet","NoDataRowOutlet","_NoDataRowOutlet","CdkTable","_CdkTable","role","cellRole","fn","dataSource","value","_differs","_changeDetectorRef","_elementRef","_dir","_document","_platform","_viewRepeater","_coalescedStyleScheduler","_viewportRuler","_stickyPositioningListener","_ngZone","Subject","EventEmitter","BehaviorSubject","_i","dataRow","takeUntil","def","isDataSource","changes","viewContainer","record","_adjustedPreviousIndex","currentIndex","change","_ViewRepeaterOperation","rowView","NgZone","take","columnDef","rowDef","headerRowDef","footerRowDef","noDataRow","headerRows","thead","closestTableSection","stickyStates","footerRows","tfoot","dataRows","headerRow","i","rows","footerRow","rowDefsChanged","renderRows","prevCachedRenderRows","data","renderRowsForData","j","renderRow","cache","dataIndex","cachedRenderRows","mergeArrayAndSet","defaultRowDefs","columnsDiffReducer","acc","dataColumnsChanged","headerColumnsChanged","footerColumnsChanged","dataStream","isObservable","of","columnDefs","columnName","stickyStartStates","stickyEndStates","rowOutlet","renderedRows","viewRef","rowDefs","index","context","outlet","view","cellTemplate","CdkCellOutlet","renderIndex","count","columnId","column","stickyCheckReducer","d","direction","StickyStyler","items","item","shouldShow","container","rootNode","t","ɵɵdirectiveInject","IterableDiffers","ChangeDetectorRef","ElementRef","ɵɵinjectAttribute","Directionality","DOCUMENT","Platform","_VIEW_REPEATER_STRATEGY","_COALESCED_STYLE_SCHEDULER","ViewportRuler","STICKY_POSITIONING_LISTENER","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","CdkNoDataRow","CdkColumnDef","CdkRowDef","CdkHeaderRowDef","CdkFooterRowDef","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵclassProp","InputFlags","booleanAttribute","ɵɵProvidersFeature","CDK_TABLE","_DisposeViewRepeaterStrategy","_CoalescedStyleScheduler","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","_c1","ɵɵprojectionDef","_c0","ɵɵprojection","ɵɵtemplate","CdkTable_Conditional_2_Template","CdkTable_Conditional_3_Template","CdkTable_Conditional_4_Template","ɵɵadvance","ɵɵconditional","HeaderRowOutlet","DataRowOutlet","NoDataRowOutlet","FooterRowOutlet","array","set","section","uppercaseSection","current","nodeName","CdkTableModule","_CdkTableModule","t","ɵɵdefineNgModule","ɵɵdefineInjector","ScrollingModule","_c0","_c1","MatTable_Conditional_2_Template","rf","ctx","ɵɵprojection","MatTable_Conditional_3_Template","ɵɵelementStart","ɵɵelementContainer","ɵɵelementEnd","MatTable_Conditional_4_Template","MatTable","_MatTable","CdkTable","ɵMatTable_BaseFactory","t","ɵɵgetInheritedFactory","ɵɵdefineComponent","rf","ctx","ɵɵclassProp","ɵɵProvidersFeature","CDK_TABLE","_COALESCED_STYLE_SCHEDULER","_CoalescedStyleScheduler","_VIEW_REPEATER_STRATEGY","_DisposeViewRepeaterStrategy","STICKY_POSITIONING_LISTENER","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","_c1","ɵɵprojectionDef","_c0","ɵɵprojection","ɵɵtemplate","MatTable_Conditional_2_Template","MatTable_Conditional_3_Template","MatTable_Conditional_4_Template","ɵɵadvance","ɵɵconditional","HeaderRowOutlet","DataRowOutlet","NoDataRowOutlet","FooterRowOutlet","MatCellDef","_MatCellDef","CdkCellDef","ɵMatCellDef_BaseFactory","ɵɵdefineDirective","MatHeaderCellDef","_MatHeaderCellDef","CdkHeaderCellDef","ɵMatHeaderCellDef_BaseFactory","MatFooterCellDef","_MatFooterCellDef","CdkFooterCellDef","ɵMatFooterCellDef_BaseFactory","MatColumnDef","_MatColumnDef","CdkColumnDef","name","ɵMatColumnDef_BaseFactory","InputFlags","MatHeaderCell","_MatHeaderCell","CdkHeaderCell","ɵMatHeaderCell_BaseFactory","MatFooterCell","_MatFooterCell","CdkFooterCell","ɵMatFooterCell_BaseFactory","MatCell","_MatCell","CdkCell","ɵMatCell_BaseFactory","MatHeaderRowDef","_MatHeaderRowDef","CdkHeaderRowDef","ɵMatHeaderRowDef_BaseFactory","t","ɵɵgetInheritedFactory","ɵɵdefineDirective","InputFlags","booleanAttribute","ɵɵProvidersFeature","ɵɵInputTransformsFeature","ɵɵInheritDefinitionFeature","MatFooterRowDef","_MatFooterRowDef","CdkFooterRowDef","ɵMatFooterRowDef_BaseFactory","MatRowDef","_MatRowDef","CdkRowDef","ɵMatRowDef_BaseFactory","MatHeaderRow","_MatHeaderRow","CdkHeaderRow","ɵMatHeaderRow_BaseFactory","ɵɵdefineComponent","ɵɵStandaloneFeature","rf","ctx","ɵɵelementContainer","CdkCellOutlet","MatFooterRow","_MatFooterRow","CdkFooterRow","ɵMatFooterRow_BaseFactory","MatRow","_MatRow","CdkRow","ɵMatRow_BaseFactory","MatNoDataRow","_MatNoDataRow","CdkNoDataRow","ɵMatNoDataRow_BaseFactory","MatTableModule","_MatTableModule","t","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","CdkTableModule","MAX_SAFE_INTEGER","MatTableDataSource","DataSource","data","filter","sort","paginator","initialData","BehaviorSubject","Subject","sortHeaderId","value","_isNumberValue","numberValue","active","direction","a","b","valueA","valueB","valueAType","valueBType","comparatorResult","dataStr","currentTerm","key","transformedFilter","sortChange","merge","of","pageChange","dataStream","filteredData","combineLatest","map","orderedData","paginatedData","obj","startIndex","filteredDataLength","lastPageIndex","newPageIndex"],"x_google_ignoreList":[0,1]}