{"version":3,"file":"mtxGrid.mjs","sources":["../../../projects/extensions/grid/column-resize/resize-strategy.ts","../../../projects/extensions/grid/column-resize/column-resize-directives/common.ts","../../../projects/extensions/grid/column-resize/column-resize-directives/column-resize.ts","../../../projects/extensions/grid/column-resize/column-resize-directives/column-resize-flex.ts","../../../projects/extensions/grid/column-resize/overlay-handle.ts","../../../projects/extensions/grid/column-resize/resizable-directives/common.ts","../../../projects/extensions/grid/column-resize/resizable-directives/resizable.ts","../../../projects/extensions/grid/column-resize/column-resize-module.ts","../../../projects/extensions/grid/grid-utils.ts","../../../projects/extensions/grid/grid-pipes.ts","../../../projects/extensions/grid/grid-menu.ts","../../../projects/extensions/grid/cell.ts","../../../projects/extensions/grid/cell.html","../../../projects/extensions/grid/column-menu.ts","../../../projects/extensions/grid/column-menu.html","../../../projects/extensions/grid/grid-expansion-toggle.ts","../../../projects/extensions/grid/grid-selectable-cell.ts","../../../projects/extensions/grid/grid.ts","../../../projects/extensions/grid/grid.html","../../../projects/extensions/grid/grid-module.ts","../../../projects/extensions/grid/mtxGrid.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { Injectable, Provider } from '@angular/core';\n\nimport {\n  CdkFlexTableResizeStrategy,\n  ResizeStrategy,\n  TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER,\n} from '@ng-matero/extensions/column-resize';\n\nexport { TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER };\n\n/**\n * Overrides CdkFlexTableResizeStrategy to match mat-column elements.\n */\n@Injectable()\nexport class MatFlexTableResizeStrategy extends CdkFlexTableResizeStrategy {\n  protected override getColumnCssClass(cssFriendlyColumnName: string): string {\n    return `mat-column-${cssFriendlyColumnName}`;\n  }\n}\n\nexport const FLEX_RESIZE_STRATEGY_PROVIDER: Provider = {\n  provide: ResizeStrategy,\n  useClass: MatFlexTableResizeStrategy,\n};\n","import { Provider } from '@angular/core';\n\nimport {\n  _COALESCED_STYLE_SCHEDULER,\n  _CoalescedStyleScheduler,\n  ColumnResize,\n  ColumnResizeNotifier,\n  ColumnResizeNotifierSource,\n  HeaderRowEventDispatcher,\n} from '@ng-matero/extensions/column-resize';\n\nimport {\n  TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER,\n  FLEX_RESIZE_STRATEGY_PROVIDER,\n} from '../resize-strategy';\n\nconst PROVIDERS: Provider[] = [\n  ColumnResizeNotifier,\n  HeaderRowEventDispatcher,\n  ColumnResizeNotifierSource,\n  { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n];\nexport const TABLE_PROVIDERS: Provider[] = [\n  ...PROVIDERS,\n  TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER,\n];\nexport const FLEX_PROVIDERS: Provider[] = [...PROVIDERS, FLEX_RESIZE_STRATEGY_PROVIDER];\n\nexport const TABLE_HOST_BINDINGS = {\n  class: 'mat-column-resize-table',\n};\nexport const FLEX_HOST_BINDINGS = {\n  class: 'mat-column-resize-flex',\n};\n\nexport abstract class AbstractMatColumnResize extends ColumnResize {\n  getTableHeight() {\n    const table = this.elementRef.nativeElement;\n    const tableParent = table.parentNode as HTMLElement;\n    const isTableContainer = tableParent.classList.contains('mat-table-container');\n    return isTableContainer ? tableParent.offsetHeight : table.offsetHeight;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { Directive, ElementRef, NgZone, inject } from '@angular/core';\nimport {\n  ColumnResize,\n  ColumnResizeNotifier,\n  ColumnResizeNotifierSource,\n  HeaderRowEventDispatcher,\n} from '@ng-matero/extensions/column-resize';\n\nimport { AbstractMatColumnResize, TABLE_HOST_BINDINGS, TABLE_PROVIDERS } from './common';\n\n/**\n * Explicitly enables column resizing for a table-based mat-table.\n * Individual columns must be annotated specifically.\n */\n@Directive({\n  selector: 'table[mat-table][columnResize]',\n  host: TABLE_HOST_BINDINGS,\n  providers: [...TABLE_PROVIDERS, { provide: ColumnResize, useExisting: MatColumnResize }],\n})\nexport class MatColumnResize extends AbstractMatColumnResize {\n  readonly columnResizeNotifier = inject(ColumnResizeNotifier);\n  readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);\n  protected readonly ngZone = inject(NgZone);\n  protected readonly notifier = inject(ColumnResizeNotifierSource);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { Directive, ElementRef, NgZone, inject } from '@angular/core';\nimport {\n  ColumnResize,\n  ColumnResizeNotifier,\n  ColumnResizeNotifierSource,\n  HeaderRowEventDispatcher,\n} from '@ng-matero/extensions/column-resize';\n\nimport { AbstractMatColumnResize, FLEX_HOST_BINDINGS, FLEX_PROVIDERS } from './common';\n\n/**\n * Explicitly enables column resizing for a flexbox-based mat-table.\n * Individual columns must be annotated specifically.\n */\n@Directive({\n  selector: 'mat-table[columnResize]',\n  host: FLEX_HOST_BINDINGS,\n  providers: [...FLEX_PROVIDERS, { provide: ColumnResize, useExisting: MatColumnResizeFlex }],\n})\nexport class MatColumnResizeFlex extends AbstractMatColumnResize {\n  readonly columnResizeNotifier = inject(ColumnResizeNotifier);\n  readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);\n  protected readonly ngZone = inject(NgZone);\n  protected readonly notifier = inject(ColumnResizeNotifierSource);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { CdkColumnDef } from '@angular/cdk/table';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  DOCUMENT,\n  ElementRef,\n  NgZone,\n  ViewChild,\n  ViewEncapsulation,\n  inject,\n} from '@angular/core';\nimport {\n  ColumnResize,\n  ColumnResizeNotifierSource,\n  HeaderRowEventDispatcher,\n  ResizeOverlayHandle,\n  ResizeRef,\n  _COALESCED_STYLE_SCHEDULER,\n  _CoalescedStyleScheduler,\n} from '@ng-matero/extensions/column-resize';\n\nimport { AbstractMatColumnResize } from './column-resize-directives/common';\n\n/**\n * Component shown over the edge of a resizable column that is responsible\n * for handling column resize mouse events and displaying a vertical line along the column edge.\n */\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'mat-column-resize-overlay-thumb' },\n  template: '<div #top class=\"mat-column-resize-overlay-thumb-top\"></div>',\n})\nexport class MatColumnResizeOverlayHandle extends ResizeOverlayHandle {\n  protected readonly columnDef = inject(CdkColumnDef);\n  protected readonly columnResize = inject(ColumnResize);\n  protected readonly directionality = inject(Directionality);\n  protected readonly elementRef = inject(ElementRef);\n  protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);\n  protected readonly ngZone = inject(NgZone);\n  protected readonly resizeNotifier = inject(ColumnResizeNotifierSource);\n  protected readonly resizeRef = inject(ResizeRef);\n  protected readonly styleScheduler = inject<_CoalescedStyleScheduler>(_COALESCED_STYLE_SCHEDULER);\n  protected readonly document = inject(DOCUMENT);\n\n  @ViewChild('top', { static: true }) topElement!: ElementRef<HTMLElement>;\n\n  protected override updateResizeActive(active: boolean): void {\n    super.updateResizeActive(active);\n\n    const originHeight = this.resizeRef.origin.nativeElement.offsetHeight;\n    this.topElement.nativeElement.style.height = `${originHeight}px`;\n    this.resizeRef.overlayRef.updateSize({\n      height: active\n        ? (this.columnResize as AbstractMatColumnResize).getTableHeight()\n        : originHeight,\n    });\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { Type } from '@angular/core';\nimport { Resizable } from '@ng-matero/extensions/column-resize';\nimport { MatColumnResizeOverlayHandle } from '../overlay-handle';\n\nexport abstract class AbstractMatResizable extends Resizable<MatColumnResizeOverlayHandle> {\n  override minWidthPxInternal = 32;\n\n  protected override getInlineHandleCssClassName(): string {\n    return 'mat-resizable-handle';\n  }\n\n  protected override getOverlayHandleComponentType(): Type<MatColumnResizeOverlayHandle> {\n    return MatColumnResizeOverlayHandle;\n  }\n}\n\nexport const RESIZABLE_HOST_BINDINGS = {\n  class: 'mat-resizable',\n};\n\nexport const RESIZABLE_INPUTS = [\n  'minWidthPx: matResizableMinWidthPx',\n  'maxWidthPx: matResizableMaxWidthPx',\n];\n","import { Directionality } from '@angular/cdk/bidi';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { CdkColumnDef } from '@angular/cdk/table';\nimport {\n  ChangeDetectorRef,\n  DOCUMENT,\n  Directive,\n  ElementRef,\n  Injector,\n  Input,\n  NgZone,\n  ViewContainerRef,\n  inject,\n} from '@angular/core';\nimport {\n  ColumnResize,\n  ColumnResizeNotifierSource,\n  HeaderRowEventDispatcher,\n  ResizeStrategy,\n  _COALESCED_STYLE_SCHEDULER,\n  _CoalescedStyleScheduler,\n} from '@ng-matero/extensions/column-resize';\n\nimport { AbstractMatResizable, RESIZABLE_HOST_BINDINGS, RESIZABLE_INPUTS } from './common';\n\n/**\n * Explicitly enables column resizing for a mat-header-cell.\n */\n@Directive({\n  selector: 'mat-header-cell[resizable], th[mat-header-cell][resizable]',\n  host: {\n    '[class]': 'resizableClass',\n  },\n  inputs: RESIZABLE_INPUTS,\n})\nexport class MatResizable extends AbstractMatResizable {\n  protected readonly columnDef = inject(CdkColumnDef);\n  protected readonly columnResize = inject(ColumnResize);\n  protected readonly directionality = inject(Directionality);\n  protected readonly elementRef = inject(ElementRef);\n  protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);\n  protected readonly injector = inject(Injector);\n  protected readonly ngZone = inject(NgZone);\n  protected readonly overlay = inject(Overlay);\n  protected readonly resizeNotifier = inject(ColumnResizeNotifierSource);\n  protected readonly resizeStrategy = inject(ResizeStrategy);\n  protected readonly styleScheduler = inject<_CoalescedStyleScheduler>(_COALESCED_STYLE_SCHEDULER);\n  protected readonly viewContainerRef = inject(ViewContainerRef);\n  protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n  protected readonly document = inject(DOCUMENT);\n\n  isResizable = true;\n\n  get resizableClass() {\n    return this.isResizable ? RESIZABLE_HOST_BINDINGS.class : '';\n  }\n\n  @Input()\n  get resizable() {\n    return this.isResizable;\n  }\n  set resizable(newValue: any) {\n    this.isResizable = newValue == null || newValue === '' || newValue;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { NgModule } from '@angular/core';\nimport { OverlayModule } from '@angular/cdk/overlay';\n\nimport { MatColumnResize } from './column-resize-directives/column-resize';\nimport { MatColumnResizeFlex } from './column-resize-directives/column-resize-flex';\nimport { MatColumnResizeOverlayHandle } from './overlay-handle';\nimport { MatResizable } from './resizable-directives/resizable';\n\nconst ENTRY_COMMON_COMPONENTS = [MatColumnResizeOverlayHandle];\n\n@NgModule({\n  imports: ENTRY_COMMON_COMPONENTS,\n  exports: ENTRY_COMMON_COMPONENTS,\n})\nexport class MatColumnResizeCommonModule {}\n\nconst IMPORTS = [OverlayModule, MatColumnResizeCommonModule];\n\n@NgModule({\n  imports: [...IMPORTS, MatColumnResize, MatColumnResizeFlex, MatResizable],\n  exports: [MatColumnResize, MatColumnResizeFlex, MatResizable],\n})\nexport class MatColumnResizeModule {}\n","import { Injectable } from '@angular/core';\nimport { MtxGridColumn } from './interfaces';\n\n@Injectable({ providedIn: 'root' })\nexport class MtxGridUtils {\n  constructor() {}\n\n  /**\n   * Get cell's value based on the data and column's field (e.g. `a.b.c`)\n   * @param rowData Row data\n   * @param colDef Column definition\n   * @returns\n   */\n  getCellValue(rowData: Record<string, any>, colDef: MtxGridColumn): string {\n    const keyArr = colDef.field ? colDef.field.split('.') : [];\n    let tmp: any = '';\n    keyArr.forEach((key: string, i: number) => {\n      if (i === 0) {\n        tmp = rowData[key];\n      } else {\n        tmp = tmp && tmp[key];\n      }\n    });\n    return tmp;\n  }\n\n  /**\n   * Get all data of a col\n   * @param data All data\n   * @param colDef Column definition\n   * @returns\n   */\n  getColData(data: any[], colDef: MtxGridColumn): any[] {\n    return data.map(rowData => this.getCellValue(rowData, colDef));\n  }\n\n  /**\n   * Whether the value is empty (`null`, `undefined`, `''`, `[]`)\n   * @param value\n   * @returns\n   */\n  isEmpty(value: any) {\n    return value == null || value.toString() === '';\n  }\n\n  /**\n   * Whether the value contain HTML\n   * @param value\n   * @returns\n   */\n  isContainHTML(value: string) {\n    return /<\\/?[a-z][\\s\\S]*>/i.test(value);\n  }\n}\n","import { KeyValueChangeRecord, Pipe, PipeTransform, inject } from '@angular/core';\nimport { isObservable } from 'rxjs';\nimport { MtxGridUtils } from './grid-utils';\nimport { MtxGridColumn, MtxGridColumnButton, MtxGridRowClassFormatter } from './interfaces';\n\n@Pipe({ name: 'colClass' })\nexport class MtxGridColClassPipe implements PipeTransform {\n  transform(\n    colDef: MtxGridColumn,\n    rowData?: Record<string, any>,\n    rowChangeRecord?: KeyValueChangeRecord<string, any>,\n    currentValue?: any\n  ) {\n    if (typeof colDef.class === 'string') {\n      return colDef.class;\n    } else if (typeof colDef.class === 'function') {\n      return colDef.class(rowData, colDef);\n    }\n    return '';\n  }\n}\n\n@Pipe({ name: 'rowClass' })\nexport class MtxGridRowClassPipe implements PipeTransform {\n  transform(\n    rowData: Record<string, any>,\n    index: number | undefined,\n    dataIndex: number,\n    rowClassFormatter?: MtxGridRowClassFormatter\n  ) {\n    const rowIndex = index === undefined ? dataIndex : index;\n    const classList: string[] = rowIndex % 2 === 1 ? ['mat-row-odd'] : [];\n    if (rowClassFormatter) {\n      for (const key of Object.keys(rowClassFormatter)) {\n        if (rowClassFormatter[key](rowData, rowIndex)) {\n          classList.push(key);\n        }\n      }\n    }\n    return classList.join(' ');\n  }\n}\n\n@Pipe({ name: 'cellActions' })\nexport class MtxGridCellActionsPipe implements PipeTransform {\n  transform(\n    btns?: MtxGridColumnButton[] | ((rowData: any) => MtxGridColumnButton[]),\n    rowData?: Record<string, any>,\n    rowChangeRecord?: KeyValueChangeRecord<string, any>,\n    currentValue?: any\n  ) {\n    if (typeof btns === 'function') {\n      return btns(rowData);\n    } else if (Array.isArray(btns)) {\n      return btns;\n    }\n    return [];\n  }\n}\n\n@Pipe({ name: 'cellActionTooltip' })\nexport class MtxGridCellActionTooltipPipe implements PipeTransform {\n  transform(btn: MtxGridColumnButton) {\n    if (typeof btn.tooltip === 'string' || isObservable(btn.tooltip)) {\n      return { message: btn.tooltip };\n    } else {\n      return btn.tooltip || { message: '' };\n    }\n  }\n}\n\n@Pipe({ name: 'cellActionBadge' })\nexport class MtxGridCellActionBadgePipe implements PipeTransform {\n  transform(btn: MtxGridColumnButton) {\n    if (typeof btn.badge === 'number' || typeof btn.badge === 'string' || isObservable(btn.badge)) {\n      return { content: btn.badge };\n    } else {\n      return btn.badge || { content: '' };\n    }\n  }\n}\n\n@Pipe({ name: 'cellActionDisable' })\nexport class MtxGridCellActionDisablePipe implements PipeTransform {\n  transform(\n    btn: MtxGridColumnButton,\n    rowData: Record<string, any>,\n    rowChangeRecord?: KeyValueChangeRecord<string, any>,\n    currentValue?: any\n  ) {\n    if (typeof btn.disabled === 'boolean') {\n      return btn.disabled;\n    } else if (typeof btn.disabled === 'function') {\n      return btn.disabled(rowData);\n    } else {\n      return false;\n    }\n  }\n}\n\n@Pipe({ name: 'cellSummary' })\nexport class MtxGridCellSummaryPipe implements PipeTransform {\n  private utils = inject(MtxGridUtils);\n\n  transform(data: any[], colDef: MtxGridColumn) {\n    if (typeof colDef.summary === 'string') {\n      return colDef.summary;\n    } else if (typeof colDef.summary === 'function') {\n      return (colDef.summary as (data: any[], colDef?: MtxGridColumn) => any)(\n        this.utils.getColData(data, colDef),\n        colDef\n      );\n    }\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MtxGridCellActionDisablePipe } from './grid-pipes';\nimport { MtxGridMenuItem } from './interfaces';\n\n@Component({\n  selector: 'mtx-grid-menu',\n  exportAs: 'mtxGridMenu',\n  template: `\n    <mat-menu class=\"mtx-grid-menu\">\n      @for (item of items; track $index) {\n        @if (!item.iif || item.iif(data)) {\n          @if (item.children && item.children.length > 0) {\n            <button\n              mat-menu-item\n              [matMenuTriggerFor]=\"gridMenu.menu\"\n              [disabled]=\"item | cellActionDisable: data\"\n              [class]=\"item.class\"\n              (click)=\"item.click?.(data)\"\n            >\n              <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: item }\" />\n              <span>{{ item.text }}</span>\n            </button>\n\n            <mtx-grid-menu #gridMenu [items]=\"item.children\" [data]=\"data\" />\n          } @else {\n            <button\n              mat-menu-item\n              [disabled]=\"item | cellActionDisable: data\"\n              [class]=\"item.class\"\n              (click)=\"item.click?.(data)\"\n            >\n              <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: item }\" />\n              <span>{{ item.text }}</span>\n            </button>\n          }\n        }\n      }\n    </mat-menu>\n\n    <ng-template #iconTpl let-item>\n      @if (item.icon) {\n        <mat-icon class=\"mtx-grid-icon\">{{ item.icon }}</mat-icon>\n      } @else if (item.fontIcon) {\n        <mat-icon class=\"mtx-grid-icon\" [fontIcon]=\"item.fontIcon\"></mat-icon>\n      } @else if (item.svgIcon) {\n        <mat-icon class=\"mtx-grid-icon\" [svgIcon]=\"item.svgIcon\"></mat-icon>\n      }\n    </ng-template>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    NgTemplateOutlet,\n    MatMenu,\n    MatMenuItem,\n    MatMenuTrigger,\n    MatIcon,\n    MtxGridMenu,\n    MtxGridCellActionDisablePipe,\n  ],\n})\nexport class MtxGridMenu {\n  @ViewChild(MatMenu, { static: true }) menu!: MatMenu;\n\n  @Input() items: MtxGridMenuItem[] = [];\n\n  @Input() data: Record<string, any> = {};\n}\n","import {\n  AsyncPipe,\n  CurrencyPipe,\n  DatePipe,\n  DecimalPipe,\n  NgTemplateOutlet,\n  PercentPipe,\n} from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DoCheck,\n  EventEmitter,\n  Input,\n  KeyValueChangeRecord,\n  KeyValueChanges,\n  KeyValueDiffer,\n  KeyValueDiffers,\n  OnInit,\n  Output,\n  ViewEncapsulation,\n  inject,\n} from '@angular/core';\nimport { MatBadge } from '@angular/material/badge';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatChip, MatChipListbox } from '@angular/material/chips';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { isObservable } from 'rxjs';\n\nimport { MtxToObservablePipe } from '@ng-matero/extensions/core';\nimport { MtxDialog } from '@ng-matero/extensions/dialog';\nimport { MtxGridMenu } from './grid-menu';\nimport {\n  MtxGridCellActionBadgePipe,\n  MtxGridCellActionDisablePipe,\n  MtxGridCellActionTooltipPipe,\n  MtxGridCellActionsPipe,\n  MtxGridCellSummaryPipe,\n} from './grid-pipes';\nimport { MtxGridUtils } from './grid-utils';\nimport { MtxGridColumn, MtxGridColumnButton } from './interfaces';\n\n@Component({\n  selector: 'mtx-grid-cell',\n  exportAs: 'mtxGridCell',\n  templateUrl: './cell.html',\n  styleUrl: './cell.scss',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AsyncPipe,\n    CurrencyPipe,\n    DatePipe,\n    DecimalPipe,\n    NgTemplateOutlet,\n    PercentPipe,\n    MatButton,\n    MatIconButton,\n    MatIcon,\n    MatChipListbox,\n    MatChip,\n    MatTooltip,\n    MatBadge,\n    MatMenuTrigger,\n    MtxToObservablePipe,\n    MtxGridCellActionsPipe,\n    MtxGridCellSummaryPipe,\n    MtxGridCellActionDisablePipe,\n    MtxGridCellActionTooltipPipe,\n    MtxGridCellActionBadgePipe,\n    MtxGridMenu,\n  ],\n})\nexport class MtxGridCell implements OnInit, DoCheck {\n  private _dialog = inject(MtxDialog);\n  private _utils = inject(MtxGridUtils);\n  private _differs = inject(KeyValueDiffers);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n\n  /** Row data */\n  @Input() rowData: Record<string, any> = {};\n\n  /** Column definition */\n  @Input() colDef!: MtxGridColumn;\n\n  /** Table data */\n  @Input() data: any[] = [];\n\n  /** Whether show summary */\n  @Input() summary = false;\n\n  /** Placeholder for the empty value (`null`, `''`, `[]`) */\n  @Input() placeholder: string = '--';\n\n  @Output() rowDataChange = new EventEmitter<KeyValueChangeRecord<string, any>>();\n\n  private rowDataDiffer?: KeyValueDiffer<string, any>;\n\n  rowChangeRecord?: KeyValueChangeRecord<string, any>;\n\n  get _value() {\n    return this._utils.getCellValue(this.rowData, this.colDef);\n  }\n\n  ngOnInit(): void {\n    this.rowDataDiffer = this._differs.find(this.rowData).create();\n  }\n\n  ngDoCheck(): void {\n    const changes = this.rowDataDiffer?.diff(this.rowData);\n    if (changes) {\n      this._applyChanges(changes);\n    }\n  }\n\n  private _applyChanges(changes: KeyValueChanges<string, any>) {\n    changes.forEachChangedItem(record => {\n      this.rowChangeRecord = record;\n      this.rowDataChange.emit(record);\n      this._changeDetectorRef.markForCheck();\n    });\n  }\n\n  _getText(value: any) {\n    return value === undefined ? '' : this._utils.isEmpty(value) ? this.placeholder : value;\n  }\n\n  _getTooltip(value: any) {\n    return this._utils.isEmpty(value) ? '' : value;\n  }\n\n  _getFormatterTooltip(value: any) {\n    return this._utils.isContainHTML(value) || this._utils.isEmpty(value) ? '' : value;\n  }\n\n  _onActionClick(event: MouseEvent, btn: MtxGridColumnButton, rowData: Record<string, any>) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (typeof btn.pop === 'string' || isObservable(btn.pop)) {\n      this._dialog.open({\n        title: btn.pop,\n        buttons: [\n          { color: 'primary', text: 'OK', onClick: () => btn.click?.(rowData) || {} },\n          { text: 'CLOSE' },\n        ],\n      });\n    } else if (typeof btn.pop === 'object') {\n      this._dialog.open({\n        title: btn.pop?.title,\n        description: btn.pop?.description,\n        buttons: [\n          {\n            color: btn.pop?.okColor || 'primary',\n            text: btn.pop?.okText || 'OK',\n            onClick: () => btn.click?.(rowData) || {},\n          },\n          {\n            color: btn.pop?.closeColor,\n            text: btn.pop?.closeText || 'CLOSE',\n          },\n        ],\n      });\n    } else {\n      btn.click?.(rowData);\n    }\n  }\n}\n","@if (summary) {\n  <span\n    [title]=\"_getFormatterTooltip((data | cellSummary: colDef))\"\n    [innerHTML]=\"_getText((data | cellSummary: colDef))\">\n  </span>\n} @else {\n  <!-- Custom formatting -->\n  @if (colDef.formatter) {\n    <span\n      [title]=\"_getFormatterTooltip(colDef.formatter(rowData, colDef))\"\n      [innerHTML]=\"_getText(colDef.formatter(rowData, colDef))\">\n    </span>\n  } @else {\n    <!-- Default formatting -->\n    @switch (colDef.type) {\n      <!-- Buttons -->\n      @case ('button') {\n        @for (btn of colDef.buttons | cellActions: rowData: rowChangeRecord: rowChangeRecord?.currentValue; track btn) {\n          @if (!btn.iif || btn.iif(rowData)) {\n            @if(btn.children && btn.children.length>0){\n              @if (btn.type === 'icon') {\n                <button\n                  matIconButton\n                  [color]=\"btn.color || 'primary'\"\n                  type=\"button\"\n                  class=\"mtx-grid-action-button\"\n                  [class]=\"btn.class\"\n                  [disabled]=\"btn | cellActionDisable: rowData : rowChangeRecord : rowChangeRecord?.currentValue\"\n                  [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n                  [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n                  [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n                  [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n                  [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n                  [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n                  [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n                  [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n                  [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n                  [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n                  [matBadgeColor]=\"(btn | cellActionBadge).color\"\n                  [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n                  [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n                  [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n                  [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n                  [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n                  [matMenuTriggerFor]=\"btn.children && btn.children.length>0 ? gridMenu.menu : null\"\n                  (click)=\"$event.stopPropagation()\"\n                >\n                  <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\"></mat-icon>\n                </button>\n\n                <mtx-grid-menu #gridMenu [items]=\"btn.children || []\" [data]=\"rowData\" />\n              } @else {\n                <button\n                  [matButton]=\"btn.type || 'text'\"\n                  [color]=\"btn.color || 'primary'\"\n                  type=\"button\"\n                  class=\"mtx-grid-action-button\"\n                  [class]=\"btn.class\"\n                  [disabled]=\"btn | cellActionDisable: rowData : rowChangeRecord : rowChangeRecord?.currentValue\"\n                  [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n                  [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n                  [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n                  [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n                  [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n                  [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n                  [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n                  [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n                  [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n                  [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n                  [matBadgeColor]=\"(btn | cellActionBadge).color\"\n                  [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n                  [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n                  [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n                  [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n                  [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n                  [matMenuTriggerFor]=\"btn.children && btn.children.length>0 ? gridMenu.menu : null\"\n                  (click)=\"$event.stopPropagation()\"\n                >\n                  <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\"></mat-icon>\n                  <span>{{ btn.text | toObservable | async }}</span>\n                </button>\n\n                <mtx-grid-menu #gridMenu [items]=\"btn.children || []\" [data]=\"rowData\" />\n              }\n            }@else {\n              @if (btn.type === 'icon') {\n                <button\n                  matIconButton\n                  [color]=\"btn.color || 'primary'\"\n                  type=\"button\"\n                  class=\"mtx-grid-action-button\"\n                  [class]=\"btn.class\"\n                  [disabled]=\"btn | cellActionDisable: rowData : rowChangeRecord : rowChangeRecord?.currentValue\"\n                  [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n                  [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n                  [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n                  [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n                  [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n                  [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n                  [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n                  [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n                  [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n                  [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n                  [matBadgeColor]=\"(btn | cellActionBadge).color\"\n                  [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n                  [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n                  [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n                  [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n                  [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n                  (click)=\"_onActionClick($event, btn, rowData)\"\n                >\n                  <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\"></mat-icon>\n                </button>\n              } @else {\n                <button\n                  [matButton]=\"btn.type || 'text'\"\n                  [color]=\"btn.color || 'primary'\"\n                  type=\"button\"\n                  class=\"mtx-grid-action-button\"\n                  [class]=\"btn.class\"\n                  [disabled]=\"btn | cellActionDisable: rowData : rowChangeRecord : rowChangeRecord?.currentValue\"\n                  [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n                  [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n                  [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n                  [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n                  [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n                  [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n                  [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n                  [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n                  [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n                  [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n                  [matBadgeColor]=\"(btn | cellActionBadge).color\"\n                  [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n                  [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n                  [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n                  [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n                  [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n                  (click)=\"_onActionClick($event, btn, rowData)\"\n                >\n                  <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\"></mat-icon>\n                  <span>{{ btn.text | toObservable | async }}</span>\n                </button>\n              }\n            }\n          }\n        }\n      }\n      <!-- Tag -->\n      @case ('tag') {\n        @if (colDef.tag && colDef.tag[_value]) {\n          <mat-chip-listbox>\n            <mat-chip color=\"primary\" [class]=\"'bg-' + colDef.tag[_value].color\">\n              {{colDef.tag[_value].text}}\n            </mat-chip>\n          </mat-chip-listbox>\n        } @else {\n          {{_value}}\n        }\n      }\n      <!-- Link -->\n      @case ('link') {\n        <a [href]=\"_value\" target=\"_blank\">{{_value}}</a>\n      }\n      <!-- Image -->\n      @case ('image') {\n        <img class=\"mtx-grid-img\" [src]=\"_value\" alt=\"\">\n      }\n      <!-- Boolean -->\n      @case ('boolean') {\n        <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\n      }\n      <!-- Number -->\n      @case ('number') {\n        <span [title]=\"_getTooltip(_value | number: colDef.typeParameter?.digitsInfo: colDef.typeParameter?.locale)\">\n          {{_getText(_value | number: colDef.typeParameter?.digitsInfo: colDef.typeParameter?.locale)}}\n        </span>\n      }\n      <!-- Currency -->\n      @case ('currency') {\n        <span [title]=\"_getTooltip(_value | currency: colDef.typeParameter?.currencyCode: colDef.typeParameter?.display: colDef.typeParameter?.digitsInfo: colDef.typeParameter?.locale)\">\n          {{_getText(_value | currency: colDef.typeParameter?.currencyCode: colDef.typeParameter?.display: colDef.typeParameter?.digitsInfo: colDef.typeParameter?.locale)}}\n        </span>\n      }\n      <!-- Percent -->\n      @case ('percent') {\n        <span [title]=\"_getTooltip(_value | percent: colDef.typeParameter?.digitsInfo: colDef.typeParameter?.locale)\">\n          {{_getText(_value | percent: colDef.typeParameter?.digitsInfo: colDef.typeParameter?.locale)}}\n        </span>\n      }\n      <!-- Date -->\n      @case ('date') {\n        <span [title]=\"_getTooltip(_value | date: colDef.typeParameter?.format: colDef.typeParameter?.timezone: colDef.typeParameter?.locale)\">\n          {{_getText(_value | date: colDef.typeParameter?.format: colDef.typeParameter?.timezone: colDef.typeParameter?.locale)}}\n        </span>\n      }\n      <!-- Default -->\n      @default {\n        <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\n      }\n    }\n  }\n}\n\n<ng-template #iconTpl let-btn>\n  @if (btn.icon) {\n    <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\n  } @else if(btn.fontIcon) {\n    <mat-icon class=\"mtx-grid-icon\" [fontIcon]=\"btn.fontIcon\"></mat-icon>\n  } @else if(btn.svgIcon) {\n    <mat-icon class=\"mtx-grid-icon\" [svgIcon]=\"btn.svgIcon\"></mat-icon>\n  }\n</ng-template>\n","import { CdkDrag, CdkDragDrop, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\n\nimport { MtxToObservablePipe } from '@ng-matero/extensions/core';\nimport {\n  MtxGridButtonType,\n  MtxGridColumn,\n  MtxGridColumnPinOption,\n  MtxGridColumnPinValue,\n} from './interfaces';\n\n@Component({\n  selector: 'mtx-grid-column-menu',\n  exportAs: 'mtxGridColumnMenu',\n  templateUrl: './column-menu.html',\n  styleUrl: './column-menu.scss',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AsyncPipe,\n    NgTemplateOutlet,\n    FormsModule,\n    MatButton,\n    MatIconButton,\n    MatIcon,\n    MatMenu,\n    MatMenuTrigger,\n    MatMenuItem,\n    MatCheckbox,\n    CdkDrag,\n    CdkDropList,\n    MtxToObservablePipe,\n  ],\n})\nexport class MtxGridColumnMenu {\n  @ViewChild(MatMenu, { static: true }) menuPanel!: MatMenu;\n  @ViewChild(MatMenuTrigger) menuTrigger!: MatMenuTrigger;\n\n  @Input() columns: MtxGridColumn[] = [];\n  @Input() selectable = true;\n  @Input() selectableChecked: 'show' | 'hide' = 'show';\n  @Input() sortable = true;\n  @Input() pinnable = true;\n\n  @Input()\n  get buttonText() {\n    const defaultText = `Columns ${this.selectableChecked === 'show' ? 'Shown' : 'Hidden'}`;\n    return this._buttonText ? this._buttonText : defaultText;\n  }\n  set buttonText(value: string) {\n    this._buttonText = value;\n  }\n  private _buttonText = '';\n\n  @Input() buttonType: MtxGridButtonType = 'outlined';\n  @Input() buttonColor: ThemePalette;\n  @Input() buttonClass = '';\n  @Input() buttonIcon = '';\n  @Input() buttonFontIcon = '';\n  @Input() buttonSvgIcon = '';\n\n  @Input() showHeader = false;\n  @Input() headerText = 'Columns Header';\n  @Input() headerTemplate!: TemplateRef<any>;\n  @Input() showFooter = false;\n  @Input() footerText = 'Columns Footer';\n  @Input() footerTemplate!: TemplateRef<any>;\n\n  @Output() columnChange = new EventEmitter<MtxGridColumn[]>();\n\n  @Input()\n  get pinOptions() {\n    return this._pinOptions;\n  }\n  set pinOptions(value: MtxGridColumnPinOption[]) {\n    if (value.length > 0) {\n      this._pinOptions = value;\n    }\n  }\n  private _pinOptions: MtxGridColumnPinOption[] = [\n    { label: 'Pin Left', value: 'left' },\n    { label: 'Pin Right', value: 'right' },\n    { label: 'No Pin', value: null },\n  ];\n\n  _handleDroped(e: CdkDragDrop<string[]>) {\n    moveItemInArray(this.columns, e.previousIndex, e.currentIndex);\n    this.columnChange.emit(this.columns);\n  }\n\n  _handleChecked(col: MtxGridColumn) {\n    if (this.selectableChecked === 'show') {\n      col.hide = !col.show;\n    } else {\n      col.show = !col.hide;\n    }\n    this.columnChange.emit(this.columns);\n  }\n\n  _handlePinSelect(col: MtxGridColumn, val: MtxGridColumnPinValue) {\n    if (col.pinned != val) {\n      col.pinned = val;\n      this.columnChange.emit(this.columns);\n    }\n  }\n}\n","@if (buttonType === 'icon') {\n  <button\n    [class]=\"buttonClass\"\n    matIconButton\n    type=\"button\"\n    [color]=\"buttonColor\"\n    [matMenuTriggerFor]=\"menu\"\n  >\n    <mat-icon *ngTemplateOutlet=\"iconTpl\"></mat-icon>\n  </button>\n} @else {\n  <button\n    [class]=\"buttonClass\"\n    [matButton]=\"buttonType\"\n    type=\"button\"\n    [color]=\"buttonColor\"\n    [matMenuTriggerFor]=\"menu\"\n  >\n    <mat-icon *ngTemplateOutlet=\"iconTpl\"></mat-icon>\n    {{ buttonText }}\n  </button>\n}\n\n<ng-template #iconTpl>\n  @if (buttonIcon) {\n    <mat-icon>{{buttonIcon}}</mat-icon>\n  } @else if(buttonFontIcon) {\n    <mat-icon [fontIcon]=\"buttonFontIcon\"></mat-icon>\n  } @else if(buttonSvgIcon) {\n    <mat-icon [svgIcon]=\"buttonSvgIcon\"></mat-icon>\n  }\n</ng-template>\n\n<mat-menu #menu=\"matMenu\" class=\"mtx-grid-column-menu\">\n  <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n  <div class=\"mtx-grid-column-menu-content\"\n    (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n    @if (showHeader) {\n      <div class=\"mtx-grid-column-menu-header\">\n        @if (headerTemplate) {\n          <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n        } @else {\n          {{headerText}}\n        }\n      </div>\n    }\n\n    <div class=\"mtx-grid-column-menu-body\">\n      @if (sortable) {\n        <div class=\"mtx-grid-column-menu-list\"\n          cdkDropList (cdkDropListDropped)=\"_handleDroped($event)\">\n          @for (col of columns; track col.field) {\n            <div class=\"mtx-grid-column-menu-item\"\n              cdkDrag [cdkDragDisabled]=\"selectableChecked === 'show'? !col.show : col.hide\">\n              <svg class=\"mtx-grid-icon mtx-grid-column-drag-handle-icon\" viewBox=\"0 0 24 24\"\n                width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n                <path d=\"M7,19V17H9V19H7M11,19V17H13V19H11M15,19V17H17V19H15M7,15V13H9V15H7M11,15V13H13V15H11M15,15V13H17V15H15M7,11V9H9V11H7M11,11V9H13V11H11M15,11V9H17V11H15M7,7V5H9V7H7M11,7V5H13V7H11M15,7V5H17V7H15Z\" />\n              </svg>\n              <ng-template [ngTemplateOutlet]=\"checkboxList\"\n                [ngTemplateOutletContext]=\"{ $implicit: col }\">\n              </ng-template>\n            </div>\n          }\n        </div>\n      }\n\n      @if (!sortable) {\n        <div class=\"mtx-grid-column-menu-list\">\n          @for (col of columns; track col.field) {\n            <div class=\"mtx-grid-column-menu-item\">\n              <ng-template [ngTemplateOutlet]=\"checkboxList\"\n                [ngTemplateOutletContext]=\"{ $implicit: col }\">\n              </ng-template>\n            </div>\n          }\n        </div>\n      }\n    </div>\n\n    @if (showFooter) {\n      <div class=\"mtx-grid-column-menu-footer\">\n        @if (footerTemplate) {\n          <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n        } @else {\n          {{footerText}}\n        }\n      </div>\n    }\n  </div>\n</mat-menu>\n\n<ng-template #checkboxList let-col>\n  @if (pinnable) {\n    <button class=\"mtx-grid-column-pin-button\" matIconButton type=\"button\"\n      [matMenuTriggerFor]=\"pinList\">\n      @if (col.pinned) {\n        <svg class=\"mtx-grid-icon mtx-grid-column-pin-icon\"\n          viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n          <path d=\"M16,12V4H17V2H7V4H8V12L6,14V16H11.2V22H12.8V16H18V14L16,12Z\" />\n        </svg>\n      }\n      @if (!col.pinned) {\n        <svg class=\"mtx-grid-icon mtx-grid-column-pin-off-icon\"\n          viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n          <path d=\"M2,5.27L3.28,4L20,20.72L18.73,22L12.8,16.07V22H11.2V16H6V14L8,12V11.27L2,5.27M16,12L18,14V16H17.82L8,6.18V4H7V2H17V4H16V12Z\" />\n        </svg>\n      }\n      </button>\n      <mat-menu #pinList=\"matMenu\" class=\"mtx-grid-column-pin-list\">\n        @for (item of pinOptions; track item) {\n          <button class=\"mtx-grid-column-pin-option\" type=\"button\"\n            mat-menu-item\n            (click)=\"_handlePinSelect(col, item.value)\">\n            <span class=\"mtx-grid-column-pin-option-placeholder\">\n              <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n              @if (col.pinned==item.value) {\n                <svg class=\"mtx-grid-icon mtx-grid-column-pin-check-icon\"\n                  viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n                  <path d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\" />\n                </svg>\n              }\n            </span>\n            <span class=\"mtx-grid-column-pin-option-text\">{{item.label | toObservable | async}}</span>\n          </button>\n        }\n      </mat-menu>\n  }\n\n  @if (selectable) {\n    <mat-checkbox class=\"mtx-grid-column-menu-item-label\"\n      [(ngModel)]=\"col[selectableChecked]\" [disabled]=\"col.disabled\"\n      (change)=\"_handleChecked(col)\">{{col.header | toObservable | async}}</mat-checkbox>\n  } @else {\n    <span class=\"mtx-grid-column-menu-item-label\">{{col.header | toObservable | async}}</span>\n  }\n</ng-template>\n","import { Directive, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\n\n@Directive({\n  selector: '[mtx-grid-expansion-toggle]',\n  host: {\n    '[class.expanded]': 'opened',\n    '(click)': 'onClick($event)',\n  },\n})\nexport class MtxGridExpansionToggle {\n  private _opened = false;\n  private _row: any;\n  private _tplRef!: TemplateRef<any>;\n\n  @Input()\n  get opened() {\n    return this._opened;\n  }\n  set opened(newValue: boolean) {\n    this._opened = newValue;\n    this.openedChange.emit(newValue);\n  }\n  @Output() openedChange = new EventEmitter<boolean>();\n\n  @Input()\n  set expandableRow(value: any) {\n    if (value !== this._row) {\n      this._row = value;\n    }\n  }\n\n  @Input('expansionRowTpl')\n  set template(value: TemplateRef<any>) {\n    if (value !== this._tplRef) {\n      this._tplRef = value;\n    }\n  }\n\n  @Output() toggleChange = new EventEmitter<MtxGridExpansionToggle>();\n\n  onClick(event: MouseEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    this.toggle();\n  }\n\n  toggle() {\n    this.opened = !this.opened;\n    this.toggleChange.emit(this);\n  }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\n\n@Directive({\n  selector: '[mtx-grid-selectable-cell]',\n  host: {\n    '[class.selected]': 'selected',\n    '(click)': 'onClick($event)',\n  },\n})\nexport class MtxGridSelectableCell {\n  ctrlKeyPressed = false;\n  shiftKeyPressed = false;\n\n  get selected() {\n    return this._selected;\n  }\n  private _selected = false;\n\n  @Input() cellSelectable = true;\n\n  @Output() cellSelectedChange = new EventEmitter<MtxGridSelectableCell>();\n\n  onClick(event: MouseEvent) {\n    this.ctrlKeyPressed = event.ctrlKey;\n    this.shiftKeyPressed = event.shiftKey;\n\n    if (this.cellSelectable) {\n      this.select();\n    }\n  }\n\n  select() {\n    this._selected = true;\n    this.cellSelectedChange.emit(this);\n  }\n\n  deselect() {\n    this._selected = false;\n    this.cellSelectedChange.emit(this);\n  }\n\n  toggle() {\n    this._selected = !this._selected;\n    this.cellSelectedChange.emit(this);\n  }\n}\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  InjectionToken,\n  Input,\n  KeyValueChangeRecord,\n  OnChanges,\n  OnDestroy,\n  Output,\n  QueryList,\n  SimpleChanges,\n  TemplateRef,\n  TrackByFunction,\n  ViewChild,\n  ViewEncapsulation,\n  booleanAttribute,\n  inject,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { ThemePalette, _animationsDisabled } from '@angular/material/core';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatSort, MatSortHeader, Sort, SortDirection } from '@angular/material/sort';\nimport {\n  MatCell,\n  MatCellDef,\n  MatColumnDef,\n  MatFooterCell,\n  MatFooterCellDef,\n  MatFooterRow,\n  MatFooterRowDef,\n  MatHeaderCell,\n  MatHeaderCellDef,\n  MatHeaderRow,\n  MatHeaderRowDef,\n  MatRow,\n  MatRowDef,\n  MatTable,\n  MatTableDataSource,\n} from '@angular/material/table';\n\nimport { ColumnResize } from '@ng-matero/extensions/column-resize';\nimport { MtxIsTemplateRefPipe, MtxToObservablePipe } from '@ng-matero/extensions/core';\nimport { MtxGridCell } from './cell';\nimport { MtxGridColumnMenu } from './column-menu';\nimport { MatColumnResize, MatResizable } from './column-resize';\nimport { MtxGridExpansionToggle } from './grid-expansion-toggle';\nimport { MtxGridColClassPipe, MtxGridRowClassPipe } from './grid-pipes';\nimport { MtxGridSelectableCell } from './grid-selectable-cell';\nimport { MtxGridUtils } from './grid-utils';\nimport {\n  MtxGridButtonType,\n  MtxGridCellTemplate,\n  MtxGridColumn,\n  MtxGridColumnPinOption,\n  MtxGridDefaultOptions,\n  MtxGridRowClassFormatter,\n  MtxGridRowSelectionFormatter,\n} from './interfaces';\n\n/** Injection token that can be used to specify default grid options. */\nexport const MTX_GRID_DEFAULT_OPTIONS = new InjectionToken<MtxGridDefaultOptions>(\n  'mtx-grid-default-options'\n);\n\n@Component({\n  selector: 'mtx-grid',\n  exportAs: 'mtxGrid',\n  templateUrl: './grid.html',\n  styleUrl: './grid.scss',\n  host: {\n    'class': 'mtx-grid',\n    '[class.mtx-grid-animations-enabled]': '!_animationsDisabled',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AsyncPipe,\n    NgTemplateOutlet,\n    MatProgressBar,\n    MatIconButton,\n    MatCheckbox,\n    MatTable,\n    MatColumnDef,\n    MatHeaderRowDef,\n    MatHeaderRow,\n    MatRowDef,\n    MatRow,\n    MatFooterRowDef,\n    MatFooterRow,\n    MatHeaderCellDef,\n    MatHeaderCell,\n    MatCellDef,\n    MatCell,\n    MatFooterCellDef,\n    MatFooterCell,\n    MatSort,\n    MatSortHeader,\n    MatPaginator,\n    MatResizable,\n    MatColumnResize,\n    MtxGridCell,\n    MtxGridColumnMenu,\n    MtxGridSelectableCell,\n    MtxGridExpansionToggle,\n    MtxIsTemplateRefPipe,\n    MtxGridColClassPipe,\n    MtxGridRowClassPipe,\n    MtxToObservablePipe,\n  ],\n})\nexport class MtxGrid implements OnChanges, AfterViewInit, OnDestroy {\n  protected _animationsDisabled = _animationsDisabled();\n  private _utils = inject(MtxGridUtils);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  private _defaultOptions = inject<MtxGridDefaultOptions>(MTX_GRID_DEFAULT_OPTIONS, {\n    optional: true,\n  });\n\n  @ViewChild(MatTable) table!: MatTable<any>;\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\n  @ViewChild(MatSort) sort!: MatSort;\n  @ContentChildren(MatRowDef) rowDefs!: QueryList<MatRowDef<any>>;\n  @ContentChildren(MatHeaderRowDef) headerRowDefs!: QueryList<MatHeaderRowDef>;\n  @ContentChildren(MatFooterRow) footerRowDefs!: QueryList<MatFooterRowDef>;\n  @ViewChild(ColumnResize) columnResize?: ColumnResize;\n  @ViewChild(MtxGridColumnMenu) columnMenu!: MtxGridColumnMenu;\n  @ViewChild('tableContainer') tableContainer!: ElementRef<HTMLDivElement>;\n\n  dataSource = new MatTableDataSource();\n\n  /** The grid's displayed columns. */\n  @Input() displayedColumns: string[] = [];\n  /** The grid's columns. */\n  @Input() columns: MtxGridColumn[] = [];\n  /** The grid's data. */\n  @Input() data: any[] = [];\n  /** The total number of the data. */\n  @Input() length = 0;\n  /** Whether the grid is loading. */\n  @Input({ transform: booleanAttribute }) loading = false;\n  /** Tracking function that will be used to check the differences in data changes. */\n  @Input() trackBy!: TrackByFunction<any>;\n  /** Whether the column is resizable. */\n  @Input({ transform: booleanAttribute })\n  columnResizable = this._defaultOptions?.columnResizable ?? false;\n  /** Placeholder for the empty value (`null`, `''`, `[]`). */\n  @Input() emptyValuePlaceholder = this._defaultOptions?.emptyValuePlaceholder ?? '--';\n\n  // ===== Page =====\n\n  /** Whether to paginate the data on front end. */\n  @Input({ transform: booleanAttribute })\n  pageOnFront = this._defaultOptions?.pageOnFront ?? true;\n  /** Whether to show the paginator. */\n  @Input({ transform: booleanAttribute })\n  showPaginator = this._defaultOptions?.showPaginator ?? true;\n  /** Whether the paginator is disabled. */\n  @Input({ transform: booleanAttribute })\n  pageDisabled = this._defaultOptions?.pageDisabled ?? false;\n  /** Whether to show the first/last buttons UI to the user. */\n  @Input({ transform: booleanAttribute })\n  showFirstLastButtons = this._defaultOptions?.showFirstLastButtons ?? true;\n  /** The zero-based page index of the displayed list of items. */\n  @Input() pageIndex = this._defaultOptions?.pageIndex ?? 0;\n  /** Number of items to display on a page. */\n  @Input() pageSize = this._defaultOptions?.pageSize ?? 10;\n  /** The set of provided page size options to display to the user. */\n  @Input() pageSizeOptions = this._defaultOptions?.pageSizeOptions ?? [10, 50, 100];\n  /** Whether to hide the page size selection UI from the user. */\n  @Input({ transform: booleanAttribute })\n  hidePageSize = this._defaultOptions?.hidePageSize ?? false;\n  /** Event emitted when the paginator changes the page size or page index. */\n  @Output() page = new EventEmitter<PageEvent>();\n  /** The template for the pagination. */\n  @Input() paginationTemplate!: TemplateRef<any>;\n\n  // ===== Sort =====\n\n  /** Whether to sort the data on front end. */\n  @Input({ transform: booleanAttribute })\n  sortOnFront = this._defaultOptions?.sortOnFront ?? true;\n  /** The id of the most recently sorted MatSortable. */\n  @Input() sortActive = this._defaultOptions?.sortActive ?? '';\n  /** The sort direction of the currently active MatSortable. */\n  @Input() sortDirection: SortDirection = this._defaultOptions?.sortDirection ?? '';\n  /**\n   * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\n   * May be overriden by the column's `disableClear` in `sortProp`.\n   */\n  @Input({ transform: booleanAttribute })\n  sortDisableClear = this._defaultOptions?.sortDisableClear ?? false;\n  /** Whether the sort is disabled. */\n  @Input({ transform: booleanAttribute })\n  sortDisabled = this._defaultOptions?.sortDisabled ?? false;\n  /**\n   * The direction to set when an MatSortable is initially sorted.\n   * May be overriden by the column's `start` in `sortProp`.\n   */\n  @Input() sortStart: 'asc' | 'desc' = this._defaultOptions?.sortStart ?? 'asc';\n  /** Event emitted when the user changes either the active sort or sort direction. */\n  @Output() sortChange = new EventEmitter<Sort>();\n\n  // ===== Row =====\n\n  /** Whether to use the row hover style. */\n  @Input({ transform: booleanAttribute })\n  rowHover = this._defaultOptions?.rowHover ?? false;\n  /** Whether to use the row striped style. */\n  @Input({ transform: booleanAttribute })\n  rowStriped = this._defaultOptions?.rowStriped ?? false;\n  /** Event emitted when the user clicks the row. */\n  @Output() rowClick = new EventEmitter<any>();\n  /** Event emitted when the user attempts to open a context menu. */\n  @Output() rowContextMenu = new EventEmitter<any>();\n\n  // ===== Expandable Row =====\n\n  expansionRowStates: any[] = [];\n\n  /** Whether the row is expandable. */\n  @Input({ transform: booleanAttribute }) expandable = false;\n  /** The template for the expandable row. */\n  @Input() expansionTemplate!: TemplateRef<any>;\n  /** Event emitted when the user toggles the expandable row. */\n  @Output() expansionChange = new EventEmitter<any>();\n\n  // ===== Row Selection =====\n\n  rowSelection: SelectionModel<any> = new SelectionModel<any>(true, []);\n\n  /** Whether to support multiple row/cell selection. */\n  @Input({ transform: booleanAttribute })\n  multiSelectable = this._defaultOptions?.multiSelectable ?? true;\n  /** Whether the user can select multiple rows with click. */\n  @Input({ transform: booleanAttribute })\n  multiSelectionWithClick = this._defaultOptions?.multiSelectionWithClick ?? false;\n  /** Whether the row is selectable. */\n  @Input({ transform: booleanAttribute })\n  rowSelectable = this._defaultOptions?.rowSelectable ?? false;\n  /** Whether to hide the row selection checkbox. */\n  @Input({ transform: booleanAttribute })\n  hideRowSelectionCheckbox = this._defaultOptions?.hideRowSelectionCheckbox ?? false;\n  /** Whether disable rows to be selected when clicked. */\n  @Input({ transform: booleanAttribute })\n  disableRowClickSelection = this._defaultOptions?.disableRowClickSelection ?? false;\n  /** The formatter to disable the row selection or hide the row's checkbox. */\n  @Input() rowSelectionFormatter: MtxGridRowSelectionFormatter = {};\n  /** The formatter to set the row's class. */\n  @Input() rowClassFormatter?: MtxGridRowClassFormatter;\n  /** The selected row items. */\n  @Input() rowSelected: any[] = [];\n  /** Event emitted when the row is selected. */\n  @Output() rowSelectedChange = new EventEmitter<any[]>();\n\n  // ===== Cell Selection =====\n\n  cellSelection: any[] = [];\n\n  /** Whether the cell is selectable. */\n  @Input({ transform: booleanAttribute })\n  cellSelectable = this._defaultOptions?.cellSelectable ?? true;\n  /** Event emitted when the cell is selected. */\n  @Output() cellSelectedChange = new EventEmitter<any[]>();\n\n  private _selectedCell?: MtxGridSelectableCell;\n\n  // ===== Toolbar =====\n\n  /** Whether to show the toolbar. */\n  @Input({ transform: booleanAttribute })\n  showToolbar = this._defaultOptions?.showToolbar ?? false;\n  /** The text of the toolbar's title. */\n  @Input() toolbarTitle = this._defaultOptions?.toolbarTitle ?? '';\n  /** The template for the toolbar. */\n  @Input() toolbarTemplate!: TemplateRef<any>;\n\n  // ===== Column Menu =====\n\n  /** Whether the column is hideable. */\n  @Input({ transform: booleanAttribute })\n  columnHideable = this._defaultOptions?.columnHideable ?? true;\n  /** Hide or show when the column's checkbox is checked. */\n  @Input() columnHideableChecked: 'show' | 'hide' =\n    this._defaultOptions?.columnHideableChecked ?? 'show';\n  /** Whether the column is sortable. */\n  @Input({ transform: booleanAttribute })\n  columnSortable = this._defaultOptions?.columnSortable ?? true;\n  /** Whether the column is pinnable. */\n  @Input({ transform: booleanAttribute })\n  columnPinnable = this._defaultOptions?.columnPinnable ?? true;\n  /** Event emitted when the column is hided or is sorted. */\n  @Output() columnChange = new EventEmitter<MtxGridColumn[]>();\n  /** The options for the column pin list. */\n  @Input() columnPinOptions: MtxGridColumnPinOption[] =\n    this._defaultOptions?.columnPinOptions ?? [];\n\n  /** Whether to show the column menu button. */\n  @Input({ transform: booleanAttribute })\n  showColumnMenuButton = this._defaultOptions?.showColumnMenuButton ?? true;\n  /** The text for the column menu button. */\n  @Input() columnMenuButtonText = this._defaultOptions?.columnMenuButtonText ?? '';\n  /** The type for the column menu button. */\n  @Input() columnMenuButtonType: MtxGridButtonType =\n    this._defaultOptions?.columnMenuButtonType ?? 'outlined';\n  /** The color for the column menu button. */\n  @Input() columnMenuButtonColor: ThemePalette = this._defaultOptions?.columnMenuButtonColor;\n  /** The class for the column menu button. */\n  @Input() columnMenuButtonClass = this._defaultOptions?.columnMenuButtonClass ?? '';\n  /** The icon for the column menu button. */\n  @Input() columnMenuButtonIcon = this._defaultOptions?.columnMenuButtonIcon ?? '';\n  /** The font icon for the column menu button. */\n  @Input() columnMenuButtonFontIcon = this._defaultOptions?.columnMenuButtonFontIcon ?? '';\n  /** The svg icon for the column menu button. */\n  @Input() columnMenuButtonSvgIcon = this._defaultOptions?.columnMenuButtonSvgIcon ?? '';\n\n  /** Whether to show the column-menu's header. */\n  @Input({ transform: booleanAttribute })\n  showColumnMenuHeader = this._defaultOptions?.showColumnMenuHeader ?? false;\n  /** The text for the column-menu's header. */\n  @Input() columnMenuHeaderText = this._defaultOptions?.columnMenuHeaderText ?? 'Columns Header';\n  /** The template for the column-menu's header. */\n  @Input() columnMenuHeaderTemplate!: TemplateRef<any>;\n  /** Whether to show the the column-menu's footer. */\n  @Input({ transform: booleanAttribute })\n  showColumnMenuFooter = this._defaultOptions?.showColumnMenuFooter ?? false;\n  /** The text for the column-menu's footer. */\n  @Input() columnMenuFooterText = this._defaultOptions?.columnMenuFooterText ?? 'Columns Footer';\n  /** The template for the column-menu's footer. */\n  @Input() columnMenuFooterTemplate!: TemplateRef<any>;\n\n  // ===== No Result =====\n\n  /** The displayed text for the empty data. */\n  @Input() noResultText = this._defaultOptions?.noResultText ?? 'No records found';\n  /** The template for the empty data. */\n  @Input() noResultTemplate!: TemplateRef<any>;\n\n  get _hasNoResult() {\n    return (!this.dataSource.data || this.dataSource.data.length === 0) && !this.loading;\n  }\n\n  // ===== Cell Templates =====\n\n  /** The header's cell template for the grid. */\n  @Input() headerTemplate!: TemplateRef<any> | MtxGridCellTemplate;\n  /** The header's cell template for the grid exclude sort. */\n  @Input() headerExtraTemplate!: TemplateRef<any> | MtxGridCellTemplate;\n  /** The cell template for the grid. */\n  @Input() cellTemplate!: TemplateRef<any> | MtxGridCellTemplate;\n\n  // ===== Row Templates =====\n\n  /** Whether to use custom row template. If true, you should define a matRowDef. */\n  @Input({ transform: booleanAttribute }) useContentRowTemplate = false;\n  // TODO: It can't use together with `useContentRowTemplate`\n  @Input({ transform: booleanAttribute }) useContentHeaderRowTemplate = false;\n  // TODO: It's not working\n  @Input({ transform: booleanAttribute }) useContentFooterRowTemplate = false;\n\n  // ===== Summary =====\n\n  /** Whether to show the summary. */\n  @Input({ transform: booleanAttribute }) showSummary = false;\n  /** The template for the summary. */\n  @Input() summaryTemplate!: TemplateRef<any> | MtxGridCellTemplate;\n\n  // TODO: Summary display conditions\n  get _whetherShowSummary() {\n    return this.showSummary;\n  }\n\n  // ===== Side Bar =====\n\n  /** Whether to show the sidebar. */\n  @Input({ transform: booleanAttribute }) showSidebar = false;\n  /** The template for the sidebar. */\n  @Input() sidebarTemplate!: TemplateRef<any>;\n\n  // ===== Status Bar =====\n\n  /** Whether to show the status bar. */\n  @Input({ transform: booleanAttribute }) showStatusbar = false;\n  /** The template for the status bar. */\n  @Input() statusbarTemplate!: TemplateRef<any>;\n\n  /** The changed record of row data. */\n  rowChangeRecord?: KeyValueChangeRecord<string, any>;\n\n  detectChanges() {\n    this._changeDetectorRef.detectChanges();\n  }\n\n  _getColData(data: any[], colDef: MtxGridColumn) {\n    return this._utils.getColData(data, colDef);\n  }\n\n  _isColumnHide(item: MtxGridColumn) {\n    return item.hide !== undefined ? item.hide : item.show !== undefined ? !item.show : false;\n  }\n\n  // Waiting for async data\n  ngOnChanges(changes: SimpleChanges) {\n    this._countPinnedPosition();\n\n    this.displayedColumns = this.columns\n      .filter(item => !this._isColumnHide(item))\n      .map(item => item.field);\n\n    if (this.showColumnMenuButton) {\n      this.columns.forEach(item => {\n        item.hide = this._isColumnHide(item);\n        item.show = !item.hide;\n      });\n    }\n\n    if (this.rowSelectable && !this.hideRowSelectionCheckbox) {\n      this.displayedColumns.unshift('MtxGridCheckboxColumnDef');\n    }\n\n    // We should copy each item of data for expansion data\n    if (this.expandable) {\n      this.expansionRowStates = []; // reset\n\n      this.data?.forEach(_ => {\n        this.expansionRowStates.push({ expanded: false });\n      });\n    }\n\n    if (this.rowSelectable) {\n      this.rowSelection = new SelectionModel<any>(this.multiSelectable, this.rowSelected);\n    }\n\n    this.dataSource = new MatTableDataSource(this.data);\n\n    this.dataSource.paginator = this.pageOnFront ? this.paginator : null;\n    this.dataSource.sort = this.sortOnFront ? this.sort : null;\n\n    // Only scroll top with data change\n    if (changes.data) {\n      this.scrollTop(0);\n    }\n  }\n\n  ngAfterViewInit() {\n    if (this.pageOnFront) {\n      this.dataSource.paginator = this.paginator;\n    }\n\n    if (this.sortOnFront) {\n      this.dataSource.sort = this.sort;\n    }\n\n    if (this.rowDefs?.length > 0 && this.useContentRowTemplate) {\n      this.rowDefs.forEach(rowDef => this.table.addRowDef(rowDef));\n    }\n    if (this.headerRowDefs?.length > 0 && this.useContentHeaderRowTemplate) {\n      this.headerRowDefs.forEach(headerRowDef => this.table.addHeaderRowDef(headerRowDef));\n    }\n    if (this.footerRowDefs?.length > 0 && this.useContentFooterRowTemplate) {\n      this.footerRowDefs.forEach(footerRowDef => this.table.addFooterRowDef(footerRowDef));\n    }\n  }\n\n  ngOnDestroy() {}\n\n  _countPinnedPosition() {\n    const count = (acc: number, cur: MtxGridColumn) => acc + parseFloat(cur.width || '80px');\n\n    const pinnedLeftCols = this.columns.filter(col => col.pinned && col.pinned === 'left');\n    pinnedLeftCols.forEach((item, idx) => {\n      item.left = pinnedLeftCols.slice(0, idx).reduce(count, 0) + 'px';\n    });\n\n    const pinnedRightCols = this.columns\n      .filter(col => col.pinned && col.pinned === 'right')\n      .reverse();\n    pinnedRightCols.forEach((item, idx) => {\n      item.right = pinnedRightCols.slice(0, idx).reduce(count, 0) + 'px';\n    });\n  }\n\n  _getIndex(index: number | undefined, dataIndex: number) {\n    return index === undefined ? dataIndex : index;\n  }\n\n  _onSortChange(sort: Sort) {\n    this.sortChange.emit(sort);\n  }\n\n  _onRowDataChange(record: KeyValueChangeRecord<string, any>) {\n    this.rowChangeRecord = record;\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Expansion change event */\n  _onExpansionChange(\n    expansionRef: MtxGridExpansionToggle,\n    rowData: Record<string, any>,\n    column: MtxGridColumn,\n    index: number\n  ) {\n    this.expansionChange.emit({ expanded: expansionRef.opened, data: rowData, index, column });\n  }\n\n  /** Cell select event */\n  _selectCell(\n    cellRef: MtxGridSelectableCell,\n    rowData: Record<string, any>,\n    colDef: MtxGridColumn\n  ): void {\n    // If not the same cell\n    if (this._selectedCell !== cellRef) {\n      const colValue = this._utils.getCellValue(rowData, colDef);\n      this.cellSelection = []; // reset\n      this.cellSelection.push({ cellData: colValue, rowData, colDef });\n\n      this.cellSelectedChange.emit(this.cellSelection);\n\n      if (this._selectedCell) {\n        this._selectedCell.deselect(); // the selectedCell will be undefined\n      }\n    }\n\n    this._selectedCell = cellRef.selected ? cellRef : undefined;\n  }\n\n  /** Row select event */\n  _selectRow(event: MouseEvent, rowData: Record<string, any>, index: number) {\n    if (\n      this.rowSelectable &&\n      !this.rowSelectionFormatter.disabled?.(rowData, index) &&\n      !this.rowSelectionFormatter.hideCheckbox?.(rowData, index) &&\n      !this.disableRowClickSelection\n    ) {\n      // metaKey -> command key\n      if (!this.multiSelectionWithClick && !event.ctrlKey && !event.metaKey) {\n        this.rowSelection.clear();\n      }\n\n      this._toggleNormalCheckbox(rowData);\n    }\n\n    this.rowClick.emit({ event, rowData, index });\n  }\n\n  /** Whether the number of selected elements matches the total number of rows. */\n  _isAllSelected() {\n    const numSelected = this.rowSelection.selected.length;\n    const numRows = this.dataSource.data.filter(\n      (row, index) => !this.rowSelectionFormatter.disabled?.(row, index)\n    ).length;\n    return numSelected === numRows;\n  }\n\n  /** Select all rows if they are not all selected; otherwise clear selection. */\n  _toggleMasterCheckbox() {\n    this._isAllSelected()\n      ? this.rowSelection.clear()\n      : this.dataSource.data.forEach((row, index) => {\n          if (!this.rowSelectionFormatter.disabled?.(row, index)) {\n            this.rowSelection.select(row);\n          }\n        });\n    this.rowSelectedChange.emit(this.rowSelection.selected);\n  }\n\n  /** Select normal row */\n  _toggleNormalCheckbox(row: Record<string, any>) {\n    this.rowSelection.toggle(row);\n    this.rowSelectedChange.emit(this.rowSelection.selected);\n  }\n\n  /** Column change event */\n  _onColumnChange(columns: MtxGridColumn[]) {\n    this.columnChange.emit(columns);\n\n    this.displayedColumns = Object.assign([], this.getDisplayedColumnFields(columns));\n\n    if (this.rowSelectable && !this.hideRowSelectionCheckbox) {\n      this.displayedColumns.unshift('MtxGridCheckboxColumnDef');\n    }\n  }\n\n  getDisplayedColumnFields(columns: MtxGridColumn[]): string[] {\n    const fields = columns\n      .filter(item => (this.columnHideableChecked === 'show' ? item.show : !item.hide))\n      .map(item => item.field);\n    return fields;\n  }\n\n  /** Customize expansion event */\n  toggleExpansion(index: number) {\n    if (!this.expandable) {\n      throw new Error('The `expandable` should be set true.');\n    }\n    this.expansionRowStates[index].expanded = !this.expansionRowStates[index].expanded;\n    return this.expansionRowStates[index].expanded;\n  }\n\n  /** Scroll to top when turn to the next page. */\n  _onPage(e: PageEvent) {\n    if (this.pageOnFront) {\n      this.scrollTop(0);\n    }\n    this.page.emit(e);\n  }\n\n  scrollTop(value?: number): number | void {\n    if (value == null) {\n      return this.tableContainer?.nativeElement.scrollTop;\n    }\n    if (this.tableContainer && !this.loading) {\n      this.tableContainer.nativeElement.scrollTop = value;\n    }\n  }\n\n  scrollLeft(value?: number): number | void {\n    if (value == null) {\n      return this.tableContainer?.nativeElement.scrollLeft;\n    }\n    if (this.tableContainer && !this.loading) {\n      this.tableContainer.nativeElement.scrollLeft = value;\n    }\n  }\n\n  _contextmenu(event: MouseEvent, rowData: Record<string, any>, index: number) {\n    this.rowContextMenu.emit({ event, rowData, index });\n  }\n}\n","<!-- Progress bar-->\n@if (loading) {\n  <div class=\"mtx-grid-progress\">\n    <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n  </div>\n}\n\n<!-- Toolbar -->\n@if (showToolbar) {\n  <div class=\"mtx-grid-toolbar\">\n    <div class=\"mtx-grid-toolbar-content\">\n      @if (toolbarTemplate) {\n        <ng-template [ngTemplateOutlet]=\"toolbarTemplate\"></ng-template>\n      } @else {\n        @if (toolbarTitle) {\n          <div class=\"mtx-grid-toolbar-title\">{{toolbarTitle}}</div>\n        }\n      }\n    </div>\n    <div class=\"mtx-grid-toolbar-actions\">\n      @if (showColumnMenuButton) {\n        <mtx-grid-column-menu\n          [columns]=\"columns\"\n          [buttonText]=\"columnMenuButtonText\"\n          [buttonType]=\"columnMenuButtonType\"\n          [buttonColor]=\"columnMenuButtonColor\"\n          [buttonClass]=\"columnMenuButtonClass\"\n          [buttonIcon]=\"columnMenuButtonIcon\"\n          [buttonFontIcon]=\"columnMenuButtonFontIcon\"\n          [buttonSvgIcon]=\"columnMenuButtonSvgIcon\"\n          [selectable]=\"columnHideable\"\n          [selectableChecked]=\"columnHideableChecked\"\n          [sortable]=\"columnSortable\"\n          [pinnable]=\"columnPinnable\"\n          [showHeader]=\"showColumnMenuHeader\"\n          [headerText]=\"columnMenuHeaderText\"\n          [headerTemplate]=\"columnMenuHeaderTemplate\"\n          [showFooter]=\"showColumnMenuFooter\"\n          [footerText]=\"columnMenuFooterText\"\n          [footerTemplate]=\"columnMenuFooterTemplate\"\n          [pinOptions]=\"columnPinOptions\"\n          (columnChange)=\"_onColumnChange($event)\">\n        </mtx-grid-column-menu>\n      }\n    </div>\n  </div>\n}\n\n<div class=\"mtx-grid-main mtx-grid-layout\">\n  <!-- Table content -->\n  <div class=\"mtx-grid-content mtx-grid-layout\">\n    <div #tableContainer class=\"mat-table-container\" [class.mat-table-with-data]=\"!_hasNoResult\">\n      @if (!columnResizable) {\n        <table mat-table\n          [class.mat-table-hover]=\"rowHover\"\n          [class.mat-table-striped]=\"rowStriped\"\n          [class.mat-table-expandable]=\"expandable\"\n          [dataSource]=\"dataSource\"\n          [multiTemplateDataRows]=\"expandable\"\n          matSort\n          [matSortActive]=\"sortActive\"\n          [matSortDirection]=\"sortDirection\"\n          [matSortDisableClear]=\"sortDisableClear\"\n          [matSortDisabled]=\"sortDisabled\"\n          [matSortStart]=\"sortStart\"\n          (matSortChange)=\"_onSortChange($event)\"\n          [trackBy]=\"trackBy\">\n          @if (rowSelectable && !hideRowSelectionCheckbox) {\n            <ng-container matColumnDef=\"MtxGridCheckboxColumnDef\">\n              <th mat-header-cell *matHeaderCellDef class=\"mtx-grid-checkbox-cell\">\n                @if (multiSelectable) {\n                  <mat-checkbox\n                    [checked]=\"rowSelection.hasValue() && _isAllSelected()\"\n                    [indeterminate]=\"rowSelection.hasValue() && !_isAllSelected()\"\n                    (change)=\"$event ? _toggleMasterCheckbox() : null\">\n                  </mat-checkbox>\n                }\n              </th>\n              <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n                class=\"mtx-grid-checkbox-cell\">\n                @if (!(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox(row, _getIndex(index, dataIndex)))) {\n                  <mat-checkbox\n                    [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled(row, _getIndex(index, dataIndex))\"\n                    [checked]=\"rowSelection.isSelected(row)\"\n                    (click)=\"$event.stopPropagation()\"\n                    (change)=\"$event ? _toggleNormalCheckbox(row) : null\">\n                  </mat-checkbox>\n                }\n              </td>\n              <td mat-footer-cell *matFooterCellDef class=\"mtx-grid-checkbox-cell\"></td>\n            </ng-container>\n          }\n          @for (col of columns; track col.field) {\n            <ng-container [matColumnDef]=\"col.field\"\n              [sticky]=\"col.pinned==='left'\" [stickyEnd]=\"col.pinned==='right'\">\n              <th mat-header-cell *matHeaderCellDef\n                [class]=\"col | colClass\"\n                [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n                [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n                [style.width]=\"col.width\"\n                [style.min-width]=\"col.width\"\n                [style.left]=\"col.left\"\n                [style.right]=\"col.right\">\n                <div class=\"mat-header-cell-inner\">\n                  @if (headerTemplate | isTemplateRef) {\n                    <ng-template [ngTemplateOutlet]=\"$any(headerTemplate)\"\n                      [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n                    </ng-template>\n                  } @else {\n                    @if ($any(headerTemplate)?.[col.field] | isTemplateRef) {\n                      <ng-template [ngTemplateOutlet]=\"$any(headerTemplate)[col.field]\"\n                        [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n                      </ng-template>\n                    } @else {\n                      <div [mat-sort-header]=\"col.sortProp?.id || col.field\"\n                        [disabled]=\"!col.sortable\"\n                        [disableClear]=\"col.sortProp?.disableClear ?? sortDisableClear\"\n                        [arrowPosition]=\"col.sortProp?.arrowPosition!\"\n                        [start]=\"col.sortProp?.start!\">\n                        @if (col.showExpand) {\n                          <span class=\"mtx-grid-expansion-placeholder\"></span>\n                        }\n                        <span>{{col.header | toObservable | async}}</span>\n                        @if (col.sortable) {\n                          <svg class=\"mtx-grid-icon mat-sort-header-icon\" viewBox=\"0 0 24 24\"\n                            width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n                            <path d=\"M3,13H15V11H3M3,6V8H21V6M3,18H9V16H3V18Z\" />\n                          </svg>\n                        }\n                      </div>\n                      <ng-template [ngTemplateOutlet]=\"headerExtraTplBase\"\n                        [ngTemplateOutletContext]=\"{ $implicit: headerExtraTemplate, colDef: col }\">\n                      </ng-template>\n                    }\n                  }\n                </div>\n              </th>\n              <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n                [class]=\"col | colClass: row: rowChangeRecord: rowChangeRecord?.currentValue\"\n                [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n                [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n                [style.width]=\"col.width\"\n                [style.min-width]=\"col.width\"\n                [style.left]=\"col.left\"\n                [style.right]=\"col.right\"\n                mtx-grid-selectable-cell [cellSelectable]=\"cellSelectable\"\n                (cellSelectedChange)=\"_selectCell($event, row, col)\">\n                @if (cellTemplate | isTemplateRef) {\n                  <ng-template [ngTemplateOutlet]=\"$any(cellTemplate)\"\n                    [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: _getIndex(index, dataIndex), colDef: col }\">\n                  </ng-template>\n                } @else {\n                  @if ($any(cellTemplate)?.[col.field] | isTemplateRef) {\n                    <ng-template [ngTemplateOutlet]=\"$any(cellTemplate)[col.field]\"\n                      [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: _getIndex(index, dataIndex), colDef: col }\">\n                    </ng-template>\n                  } @else {\n                    @if (col.cellTemplate) {\n                      <ng-template\n                        [ngTemplateOutlet]=\"col.cellTemplate!\"\n                        [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: _getIndex(index, dataIndex), colDef: col }\">\n                      </ng-template>\n                    } @else {\n                      @if (col.showExpand) {\n                        <button class=\"mtx-grid-row-expand-button\"\n                          matIconButton mtx-grid-expansion-toggle type=\"button\"\n                          [(opened)]=\"expansionRowStates[dataIndex].expanded\"\n                          (toggleChange)=\"_onExpansionChange($event, row, col, dataIndex);\">\n                          <svg class=\"mtx-grid-icon mtx-grid-row-expand-icon\" viewBox=\"0 0 24 24\"\n                            width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n                            <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n                          </svg>\n                        </button>\n                      }\n                      <mtx-grid-cell [rowData]=\"row\" [colDef]=\"col\" [placeholder]=\"emptyValuePlaceholder\"\n                        (rowDataChange)=\"_onRowDataChange($event)\"></mtx-grid-cell>\n                    }\n                  }\n                }\n              </td>\n              <td mat-footer-cell *matFooterCellDef\n                [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n                [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n                [style.width]=\"col.width\"\n                [style.min-width]=\"col.width\"\n                [style.left]=\"col.left\"\n                [style.right]=\"col.right\">\n                @if (col.showExpand) {\n                  <span class=\"mtx-grid-expansion-placeholder\"></span>\n                }\n                @if (summaryTemplate | isTemplateRef) {\n                  <ng-template [ngTemplateOutlet]=\"$any(summaryTemplate)\"\n                    [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col, data: data }\">\n                  </ng-template>\n                } @else {\n                  @if ($any(summaryTemplate)?.[col.field] | isTemplateRef) {\n                    <ng-template [ngTemplateOutlet]=\"$any(summaryTemplate)[col.field]\"\n                      [ngTemplateOutletContext]=\"{ $implicit: _getColData(data, col), colData: _getColData(data, col), colDef: col }\">\n                    </ng-template>\n                  } @else {\n                    <mtx-grid-cell [summary]=\"true\" [data]=\"data\" [colDef]=\"col\"\n                      [placeholder]=\"emptyValuePlaceholder\"></mtx-grid-cell>\n                  }\n                }\n              </td>\n            </ng-container>\n          }\n          @if (!useContentHeaderRowTemplate) {\n            <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n          }\n          @if (!useContentRowTemplate) {\n            <tr mat-row\n              *matRowDef=\"let row; let index = index; let dataIndex = dataIndex; columns: displayedColumns;\"\n              [class]=\"row | rowClass: index: dataIndex: rowClassFormatter\"\n              [class.selected]=\"rowSelection.isSelected(row)\"\n              (click)=\"_selectRow($event, row, _getIndex(index, dataIndex))\"\n              (contextmenu)=\"_contextmenu($event, row, _getIndex(index, dataIndex))\">\n            </tr>\n          }\n          @if (_whetherShowSummary) {\n            <tr mat-footer-row *matFooterRowDef=\"displayedColumns; sticky: true\"></tr>\n          }\n          @if (expandable) {\n            <!-- Expanded Content Column - The expandable row is made up of this one column that spans across all columns -->\n            <ng-container matColumnDef=\"MtxGridExpansionColumnDef\">\n              <td mat-cell *matCellDef=\"let row; let dataIndex = dataIndex\"\n                [attr.colspan]=\"displayedColumns.length\">\n                <div class=\"mtx-grid-expansion-detail-wrapper\">\n                  <div class=\"mtx-grid-expansion-detail\">\n                    <ng-template [ngTemplateOutlet]=\"expansionTemplate\"\n                      [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: dataIndex, expanded: expansionRowStates[dataIndex].expanded }\">\n                    </ng-template>\n                  </div>\n                </div>\n              </td>\n            </ng-container>\n            <tr mat-row\n              *matRowDef=\"let row; columns: ['MtxGridExpansionColumnDef']; let dataIndex = dataIndex\"\n              class=\"mtx-grid-expansion\"\n              [class]=\"expansionRowStates[dataIndex].expanded ? 'expanded' : 'collapsed'\">\n            </tr>\n          }\n        </table>\n      } @else {\n        <!-- TODO: Use flexbox-based mat-table -->\n        <table mat-table\n          columnResize\n          [class.mat-table-hover]=\"rowHover\"\n          [class.mat-table-striped]=\"rowStriped\"\n          [class.mat-table-expandable]=\"expandable\"\n          [dataSource]=\"dataSource\"\n          [multiTemplateDataRows]=\"expandable\"\n          matSort\n          [matSortActive]=\"sortActive\"\n          [matSortDirection]=\"sortDirection\"\n          [matSortDisableClear]=\"sortDisableClear\"\n          [matSortDisabled]=\"sortDisabled\"\n          [matSortStart]=\"sortStart\"\n          (matSortChange)=\"_onSortChange($event)\"\n          [trackBy]=\"trackBy\">\n          @if (rowSelectable && !hideRowSelectionCheckbox) {\n            <ng-container matColumnDef=\"MtxGridCheckboxColumnDef\">\n              <th mat-header-cell *matHeaderCellDef class=\"mtx-grid-checkbox-cell\">\n                @if (multiSelectable) {\n                  <mat-checkbox\n                    [checked]=\"rowSelection.hasValue() && _isAllSelected()\"\n                    [indeterminate]=\"rowSelection.hasValue() && !_isAllSelected()\"\n                    (change)=\"$event ? _toggleMasterCheckbox() : null\">\n                  </mat-checkbox>\n                }\n              </th>\n              <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n                class=\"mtx-grid-checkbox-cell\">\n                @if (!(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox(row, _getIndex(index, dataIndex)))) {\n                  <mat-checkbox\n                    [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled(row, _getIndex(index, dataIndex))\"\n                    [checked]=\"rowSelection.isSelected(row)\"\n                    (click)=\"$event.stopPropagation()\"\n                    (change)=\"$event ? _toggleNormalCheckbox(row) : null\">\n                  </mat-checkbox>\n                }\n              </td>\n              <td mat-footer-cell *matFooterCellDef class=\"mtx-grid-checkbox-cell\"></td>\n            </ng-container>\n          }\n          @for (col of columns; track col.field) {\n            <ng-container [matColumnDef]=\"col.field\"\n              [sticky]=\"col.pinned==='left'\" [stickyEnd]=\"col.pinned==='right'\">\n              <th mat-header-cell *matHeaderCellDef\n                [class]=\"col | colClass\"\n                [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n                [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n                [style.width]=\"col.width\"\n                [style.left]=\"col.left\"\n                [style.right]=\"col.right\"\n                [resizable]=\"col.resizable\"\n                [matResizableMinWidthPx]=\"col.minWidth\"\n                [matResizableMaxWidthPx]=\"col.maxWidth\">\n                <div class=\"mat-header-cell-inner\">\n                  @if (headerTemplate | isTemplateRef) {\n                    <ng-template [ngTemplateOutlet]=\"$any(headerTemplate)\"\n                      [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n                    </ng-template>\n                  } @else {\n                    @if ($any(headerTemplate)?.[col.field] | isTemplateRef) {\n                      <ng-template [ngTemplateOutlet]=\"$any(headerTemplate)[col.field]\"\n                        [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n                      </ng-template>\n                    } @else {\n                      <div [mat-sort-header]=\"col.sortProp?.id || col.field\"\n                        [disabled]=\"!col.sortable\"\n                        [disableClear]=\"col.sortProp?.disableClear ?? sortDisableClear\"\n                        [arrowPosition]=\"col.sortProp?.arrowPosition!\"\n                        [start]=\"col.sortProp?.start!\">\n                        @if (col.showExpand) {\n                          <span class=\"mtx-grid-expansion-placeholder\"></span>\n                        }\n                        <span>{{col.header | toObservable | async}}</span>\n                        @if (col.sortable) {\n                          <svg class=\"mtx-grid-icon mat-sort-header-icon\" viewBox=\"0 0 24 24\"\n                            width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n                            <path d=\"M3,13H15V11H3M3,6V8H21V6M3,18H9V16H3V18Z\" />\n                          </svg>\n                        }\n                      </div>\n                      <ng-template [ngTemplateOutlet]=\"headerExtraTplBase\"\n                        [ngTemplateOutletContext]=\"{ $implicit: headerExtraTemplate, colDef: col }\">\n                      </ng-template>\n                    }\n                  }\n                </div>\n              </th>\n              <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n                [class]=\"col | colClass: row: rowChangeRecord :rowChangeRecord?.currentValue\"\n                [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n                [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n                [style.width]=\"col.width\"\n                [style.left]=\"col.left\"\n                [style.right]=\"col.right\"\n                mtx-grid-selectable-cell [cellSelectable]=\"cellSelectable\"\n                (cellSelectedChange)=\"_selectCell($event, row, col)\">\n                @if (cellTemplate | isTemplateRef) {\n                  <ng-template [ngTemplateOutlet]=\"$any(cellTemplate)\"\n                    [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: _getIndex(index, dataIndex), colDef: col }\">\n                  </ng-template>\n                } @else {\n                  @if ($any(cellTemplate)?.[col.field] | isTemplateRef) {\n                    <ng-template [ngTemplateOutlet]=\"$any(cellTemplate)[col.field]\"\n                      [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: _getIndex(index, dataIndex), colDef: col }\">\n                    </ng-template>\n                  } @else {\n                    @if (col.cellTemplate) {\n                      <ng-template\n                        [ngTemplateOutlet]=\"col.cellTemplate!\"\n                        [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: _getIndex(index, dataIndex), colDef: col }\">\n                      </ng-template>\n                    } @else {\n                      @if (col.showExpand) {\n                        <button class=\"mtx-grid-row-expand-button\"\n                          matIconButton mtx-grid-expansion-toggle type=\"button\"\n                          [(opened)]=\"expansionRowStates[dataIndex].expanded\"\n                          (toggleChange)=\"_onExpansionChange($event, row, col, dataIndex);\">\n                          <svg class=\"mtx-grid-icon mtx-grid-row-expand-icon\" viewBox=\"0 0 24 24\"\n                            width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n                            <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n                          </svg>\n                        </button>\n                      }\n                      <mtx-grid-cell [rowData]=\"row\" [colDef]=\"col\" [placeholder]=\"emptyValuePlaceholder\"\n                        (rowDataChange)=\"_onRowDataChange($event)\"></mtx-grid-cell>\n                    }\n                  }\n                }\n              </td>\n              <td mat-footer-cell *matFooterCellDef\n                [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n                [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n                [style.width]=\"col.width\"\n                [style.left]=\"col.left\"\n                [style.right]=\"col.right\">\n                @if (col.showExpand) {\n                  <span class=\"mtx-grid-expansion-placeholder\"></span>\n                }\n                @if (summaryTemplate | isTemplateRef) {\n                  <ng-template [ngTemplateOutlet]=\"$any(summaryTemplate)\"\n                    [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col, data: data }\">\n                  </ng-template>\n                } @else {\n                  @if ($any(summaryTemplate)?.[col.field] | isTemplateRef) {\n                    <ng-template [ngTemplateOutlet]=\"$any(summaryTemplate)[col.field]\"\n                      [ngTemplateOutletContext]=\"{ $implicit: _getColData(data, col), colData: _getColData(data, col), colDef: col }\">\n                    </ng-template>\n                  } @else {\n                    <mtx-grid-cell [summary]=\"true\" [data]=\"data\" [colDef]=\"col\"\n                      [placeholder]=\"emptyValuePlaceholder\"></mtx-grid-cell>\n                  }\n                }\n              </td>\n            </ng-container>\n          }\n          @if (!useContentHeaderRowTemplate) {\n            <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n          }\n          @if (!useContentRowTemplate) {\n            <tr mat-row\n              *matRowDef=\"let row; let index = index; let dataIndex = dataIndex; columns: displayedColumns;\"\n              [class]=\"row | rowClass: index: dataIndex: rowClassFormatter\"\n              [class.selected]=\"rowSelection.isSelected(row)\"\n              (click)=\"_selectRow($event, row, _getIndex(index, dataIndex))\"\n              (contextmenu)=\"_contextmenu($event, row, _getIndex(index, dataIndex))\">\n            </tr>\n          }\n          @if (_whetherShowSummary) {\n            <tr mat-footer-row *matFooterRowDef=\"displayedColumns; sticky: true\"></tr>\n          }\n          @if (expandable) {\n            <!-- Expanded Content Column - The expandable row is made up of this one column that spans across all columns -->\n            <ng-container matColumnDef=\"MtxGridExpansionColumnDef\">\n              <td mat-cell *matCellDef=\"let row; let dataIndex = dataIndex\"\n                [attr.colspan]=\"displayedColumns.length\">\n                <div class=\"mtx-grid-expansion-detail-wrapper\">\n                  <div class=\"mtx-grid-expansion-detail\">\n                    <ng-template [ngTemplateOutlet]=\"expansionTemplate\"\n                      [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: dataIndex, expanded: expansionRowStates[dataIndex].expanded }\">\n                    </ng-template>\n                  </div>\n                </div>\n              </td>\n            </ng-container>\n            <tr mat-row\n              *matRowDef=\"let row; columns: ['MtxGridExpansionColumnDef']; let dataIndex = dataIndex\"\n              class=\"mtx-grid-expansion\"\n              [class]=\"expansionRowStates[dataIndex].expanded ? 'expanded' : 'collapsed'\">\n            </tr>\n          }\n        </table>\n      }\n    </div>\n\n    <!-- No result -->\n    @if (_hasNoResult) {\n      <div class=\"mtx-grid-no-result\">\n        @if (noResultTemplate) {\n          <ng-template [ngTemplateOutlet]=\"noResultTemplate\"></ng-template>\n        } @else {\n          {{noResultText}}\n        }\n      </div>\n    }\n  </div>\n\n  <!-- Tool sidebar -->\n  @if (showSidebar) {\n    <div class=\"mtx-grid-sidebar\">\n      @if (sidebarTemplate) {\n        <ng-template [ngTemplateOutlet]=\"sidebarTemplate\"></ng-template>\n      }\n    </div>\n  }\n</div>\n\n<div class=\"mtx-grid-footer\">\n  <!-- Status Bar -->\n  @if (showStatusbar) {\n    <div class=\"mtx-grid-statusbar\">\n      @if (statusbarTemplate) {\n        <ng-template [ngTemplateOutlet]=\"statusbarTemplate\"></ng-template>\n      }\n    </div>\n  }\n\n  <!-- Pagination -->\n  <div class=\"mtx-grid-pagination\">\n    @if (paginationTemplate) {\n      <ng-template [ngTemplateOutlet]=\"paginationTemplate\"></ng-template>\n    } @else {\n      <mat-paginator [class.mat-paginator-hidden]=\"!showPaginator\"\n        [showFirstLastButtons]=\"showFirstLastButtons\"\n        [length]=\"length\"\n        [pageIndex]=\"pageIndex\"\n        [pageSize]=\"pageSize\"\n        [pageSizeOptions]=\"pageSizeOptions\"\n        [hidePageSize]=\"hidePageSize\"\n        (page)=\"_onPage($event)\"\n        [disabled]=\"pageDisabled\">\n      </mat-paginator>\n    }\n  </div>\n</div>\n\n<!-- Header template for extra content -->\n<ng-template #headerExtraTplBase let-headerExtraTemplate let-col=\"colDef\">\n  @if (headerExtraTemplate | isTemplateRef) {\n    <ng-template [ngTemplateOutlet]=\"headerExtraTemplate\"\n      [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n    </ng-template>\n  } @else {\n    @if ($any(headerExtraTemplate)?.[col.field] | isTemplateRef) {\n      <ng-template [ngTemplateOutlet]=\"headerExtraTemplate[col.field]\"\n        [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n      </ng-template>\n    }\n  }\n</ng-template>\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatColumnResizeModule } from './column-resize/column-resize-module';\n\nimport { MtxPipesModule } from '@ng-matero/extensions/core';\nimport { MtxDialogModule } from '@ng-matero/extensions/dialog';\nimport { MtxGrid } from './grid';\nimport { MtxGridCell } from './cell';\nimport { MtxGridColumnMenu } from './column-menu';\nimport { MtxGridExpansionToggle } from './grid-expansion-toggle';\nimport { MtxGridMenu } from './grid-menu';\nimport {\n  MtxGridCellActionBadgePipe,\n  MtxGridCellActionDisablePipe,\n  MtxGridCellActionTooltipPipe,\n  MtxGridCellActionsPipe,\n  MtxGridCellSummaryPipe,\n  MtxGridColClassPipe,\n  MtxGridRowClassPipe,\n} from './grid-pipes';\nimport { MtxGridSelectableCell } from './grid-selectable-cell';\nimport { MtxGridUtils } from './grid-utils';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatTableModule,\n    MatSortModule,\n    MatPaginatorModule,\n    MatCheckboxModule,\n    MatButtonModule,\n    MatProgressBarModule,\n    MatChipsModule,\n    MatTooltipModule,\n    MatBadgeModule,\n    MatIconModule,\n    MatSelectModule,\n    MatFormFieldModule,\n    MatMenuModule,\n    DragDropModule,\n    MtxDialogModule,\n    MtxPipesModule,\n    MatColumnResizeModule,\n    MtxGrid,\n    MtxGridCell,\n    MtxGridColumnMenu,\n    MtxGridExpansionToggle,\n    MtxGridSelectableCell,\n    MtxGridMenu,\n    MtxGridRowClassPipe,\n    MtxGridColClassPipe,\n    MtxGridCellActionsPipe,\n    MtxGridCellActionTooltipPipe,\n    MtxGridCellActionBadgePipe,\n    MtxGridCellActionDisablePipe,\n    MtxGridCellSummaryPipe,\n  ],\n  exports: [\n    MatColumnResizeModule,\n    MtxGrid,\n    MtxGridCell,\n    MtxGridColumnMenu,\n    MtxGridExpansionToggle,\n    MtxGridSelectableCell,\n    MtxGridMenu,\n    MtxGridRowClassPipe,\n    MtxGridColClassPipe,\n    MtxGridCellActionsPipe,\n    MtxGridCellActionTooltipPipe,\n    MtxGridCellActionBadgePipe,\n    MtxGridCellActionDisablePipe,\n    MtxGridCellSummaryPipe,\n  ],\n  providers: [MtxGridUtils],\n})\nexport class MtxGridModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}