{"version":3,"file":"eherve-angular-material-datatable-eherve-angular-material-datatable-Dck-CD4z.mjs","sources":["../../../projects/datatable/src/lib/pipes/safe-html.pipe.ts","../../../projects/datatable/src/lib/tools/strip-html.tool.ts","../../../projects/datatable/src/lib/components/header-autocomplete-filter/header-autocomplete-filter.component.ts","../../../projects/datatable/src/lib/components/header-autocomplete-filter/header-autocomplete-filter.component.html","../../../projects/datatable/src/lib/components/header-checkbox-filter/header-checkbox-filter.component.ts","../../../projects/datatable/src/lib/components/header-checkbox-filter/header-checkbox-filter.component.html","../../../projects/datatable/src/lib/components/operator-select/operator-select.component.ts","../../../projects/datatable/src/lib/components/operator-select/operator-select.component.html","../../../projects/datatable/src/lib/components/header-date-filter/header-date-filter.component.ts","../../../projects/datatable/src/lib/components/header-date-filter/header-date-filter.component.html","../../../projects/datatable/src/lib/components/time-unit-select/time-unit-select.component.ts","../../../projects/datatable/src/lib/components/time-unit-select/time-unit-select.component.html","../../../projects/datatable/src/lib/components/header-duration-filter/header-duration-filter.component.ts","../../../projects/datatable/src/lib/components/header-duration-filter/header-duration-filter.component.html","../../../projects/datatable/src/lib/components/header-number-filter/header-number-filter.component.ts","../../../projects/datatable/src/lib/components/header-number-filter/header-number-filter.component.html","../../../projects/datatable/src/lib/pipes/is-array.pipe.ts","../../../projects/datatable/src/lib/pipes/select-option.pipe.ts","../../../projects/datatable/src/lib/components/header-select-filter/header-select-filter.component.ts","../../../projects/datatable/src/lib/components/header-select-filter/header-select-filter.component.html","../../../projects/datatable/src/lib/components/header-text-filter/header-text-filter.component.ts","../../../projects/datatable/src/lib/components/header-text-filter/header-text-filter.component.html","../../../projects/datatable/src/lib/datatable.intl.ts","../../../projects/datatable/src/lib/pipes/merge.pipe.ts","../../../projects/datatable/src/lib/components/progress-spinner/progress-spinner.component.ts","../../../projects/datatable/src/lib/components/progress-spinner/progress-spinner.component.html","../../../projects/datatable/src/lib/datasource.ts","../../../projects/datatable/src/lib/datatable-default-options.ts","../../../projects/datatable/src/lib/directives/datatable-cell.directive.ts","../../../projects/datatable/src/lib/pipes/background-color.pipe.ts","../../../projects/datatable/src/lib/pipes/cell-color.pipe.ts","../../../projects/datatable/src/lib/pipes/cell-opacity.pipe.ts","../../../projects/datatable/src/lib/pipes/filter.pipe.ts","../../../projects/datatable/src/lib/pipes/find-cell-content.pipe.ts","../../../projects/datatable/src/lib/pipes/find.pipe.ts","../../../projects/datatable/src/lib/pipes/included-in.pipe.ts","../../../projects/datatable/src/lib/pipes/order-by.pipe.ts","../../../projects/datatable/src/lib/pipes/sort-facet-entries.pipe.ts","../../../projects/datatable/src/lib/pipes/sum.pipe.ts","../../../projects/datatable/src/lib/tools/duration.tool.ts","../../../projects/datatable/src/lib/tools/get.tool.ts","../../../projects/datatable/src/lib/datatable.component.ts","../../../projects/datatable/src/lib/datatable.component.html","../../../projects/datatable/src/lib/datatable.module.ts","../../../projects/datatable/src/lib/types/datasource-service.type.ts","../../../projects/datatable/src/lib/types/datatable-column.type.ts","../../../projects/datatable/src/lib/types/datatable-options.type.ts","../../../projects/datatable/src/lib/types/action.type.ts","../../../projects/datatable/src/lib/types/datatable-facet.type.ts","../../../projects/datatable/src/public-api.ts","../../../projects/datatable/src/eherve-angular-material-datatable.ts"],"sourcesContent":["/** @format */\n\nimport { Pipe, SecurityContext } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n  name: 'safeHtml',\n})\nexport class SafeHtmlPipe {\n  constructor(private sanitizer: DomSanitizer) {}\n\n  transform(html: string | null | undefined): string {\n    return this.sanitizer.sanitize(SecurityContext.HTML, html ?? '') ?? '';\n  }\n}\n","/** @format */\n\nexport function stripHtml(value: string | null | undefined): string {\n  if (!value) return '';\n  return value\n    .replace(/<[^>]+>/g, ' ') // remove tags\n    .replace(/\\s+/g, ' ') // collapse spaces\n    .trim();\n}\n","/** @format */\n\nimport { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  forwardRef,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n  ViewChild,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  ReactiveFormsModule,\n  UntypedFormControl,\n} from '@angular/forms';\nimport { MatAutocomplete, MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { IntersectionObserverModule } from 'ngx-intersection-observer';\nimport { BehaviorSubject, debounceTime, filter, map, startWith, Subject, Subscription, switchMap, tap } from 'rxjs';\nimport { SafeHtmlPipe } from '../../pipes/safe-html.pipe';\nimport { stripHtml } from '../../tools/strip-html.tool';\nimport { DatatableSearchAutocompleteColumn, DatatableSearchListOption } from '../../types/datatable-column.type';\n\n@Component({\n  selector: 'lib-header-autocomplete-filter',\n  imports: [\n    CommonModule,\n    FormsModule,\n    IntersectionObserverModule,\n    MatAutocompleteModule,\n    MatButtonModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatInputModule,\n    MatProgressBarModule,\n    ReactiveFormsModule,\n    SafeHtmlPipe,\n  ],\n  templateUrl: './header-autocomplete-filter.component.html',\n  styleUrl: './header-autocomplete-filter.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => HeaderAutocompleteFilterComponent),\n    },\n  ],\n})\nexport class HeaderAutocompleteFilterComponent<Record> implements AfterViewInit, OnDestroy, ControlValueAccessor {\n  @Input()\n  column!: DatatableSearchAutocompleteColumn<Record>;\n\n  options: DatatableSearchListOption[] = [];\n  groups: { name: string; options: DatatableSearchListOption[] }[] = [];\n  hasMore = false;\n  searching = false;\n  @ViewChild('input') input!: ElementRef<HTMLInputElement>;\n  @ViewChild(MatAutocomplete) auto!: MatAutocomplete;\n  control!: FormControl<any>;\n  selectControl = new FormControl();\n\n  onChange: (value: any) => void = () => {};\n\n  onTouched: () => void = () => {};\n\n  private filter$ = new BehaviorSubject<string | undefined>(undefined);\n  private nextPage$ = new Subject<void>();\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue(value: { value: any; name?: string }): void {\n    if (value?.value !== this.selectControl.value) {\n      if (value?.name) {\n        if (!this.options.find(o => o.value === value.value)) {\n          this.options.push({ value: value.value, name: value.name });\n        }\n      }\n      this.selectControl.setValue(value?.value, { emitEvent: false });\n    }\n    this.changeDetectorRef.markForCheck();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    if (isDisabled) this.selectControl.disable({ emitEvent: false });\n    else this.selectControl.enable({ emitEvent: false });\n  }\n\n  registerOnChange(onChange: (value: any) => void): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: () => void): void {\n    this.onTouched = onTouched;\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    const ngControl: NgControl | null = this.injector.get(NgControl, null);\n    if (!ngControl) throw new Error(`${this.constructor.name} missing control [column:${this.column.columnDef}]`);\n    this.control = ngControl.control as UntypedFormControl;\n    this.subsink.add(\n      this.selectControl.valueChanges.subscribe((value: any) => {\n        if (value === undefined) {\n          if (this.control.value !== undefined) this.onChange(undefined);\n        } else if (value === null && !this.options.find(o => o.value === null)) {\n          if (this.control.value !== undefined) this.onChange(undefined);\n        } else if (this.control.value?.value !== value) this.onChange({ value, regex: false });\n      }),\n    );\n    this.buildOptions();\n    this.changeDetectorRef.detectChanges();\n  }\n\n  ngOnDestroy(): void {\n    this.subsink.unsubscribe();\n  }\n\n  loadMore(intersect: boolean): void {\n    if (!intersect) return;\n    this.nextPage$.next();\n  }\n\n  focus(): void {\n    if (this.column.loadOnFocus && this.isEmptyValue(this.selectControl.value)) {\n      const search = this.input.nativeElement.value;\n      if (!search.length || this.filter$.value !== search) this.filter$.next(search);\n    }\n  }\n\n  filter(): void {\n    const search = this.input.nativeElement.value;\n    this.filter$.next(search);\n  }\n\n  displayWith = (value: any): string => {\n    let val;\n    if (!this.options) val = value;\n    else val = this.options.find(o => o.value === value)?.name ?? value;\n    return stripHtml(val);\n  };\n\n  private getGlobalSearchValue(): any {\n    if (!this.control.parent) return null;\n    let parent = this.control.parent;\n    while (parent.parent) parent = parent.parent;\n    return parent.value;\n  }\n\n  private buildOptions(): void {\n    this.options = this.column.searchValue !== undefined ? (this.column.searchValueOptions ?? []) : [];\n    this.subsink.add(\n      this.filter$\n        .pipe(\n          filter(value => typeof value === 'string'),\n          debounceTime(300),\n          switchMap((search: string) => {\n            this.auto.panel;\n            this.options = [];\n            this.groups = [];\n            let skip = 0;\n            return this.nextPage$.pipe(\n              startWith(skip),\n              tap(() => (this.searching = true)),\n              switchMap(async () =>\n                this.column.options(this.column.limit || 10, skip, search, this.getGlobalSearchValue()),\n              ),\n              map(data => {\n                data.forEach(d => {\n                  this.options.push(d);\n                  const name = d.group ?? '';\n                  const group = this.groups.find(g => g.name === name);\n                  if (!group) this.groups.push({ name, options: [d] });\n                  else group.options.push(d);\n                });\n                skip += this.column.limit || 10;\n                this.hasMore = data?.length === (this.column.limit || 10);\n                this.searching = false;\n              }),\n            );\n          }),\n        )\n        .subscribe(),\n    );\n  }\n\n  private isEmptyValue(value: any): boolean {\n    return value === null || value === undefined || value === '';\n  }\n}\n","<!-- @format -->\n\n@if (selectControl) {\n  <mat-form-field appearance=\"fill\">\n    <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n    <input\n      #input\n      type=\"text\"\n      [placeholder]=\"column.placeholder!\"\n      aria-label=\"Number\"\n      matInput\n      [formControl]=\"selectControl\"\n      [matAutocomplete]=\"auto\"\n      (input)=\"filter()\"\n      (focus)=\"focus()\"\n      (blur)=\"onTouched()\" />\n    <mat-autocomplete #auto=\"matAutocomplete\" requireSelection [displayWith]=\"displayWith\">\n      @if (column.hasGroup) {\n        @for (group of groups; track group) {\n          <mat-optgroup>\n            <mat-label [innerHTML]=\"group.name | safeHtml\"></mat-label>\n            @for (option of group.options; track option) {\n              <mat-option [value]=\"option.value\">\n                <ng-container *ngTemplateOutlet=\"autocompleteOption; context: { option }\"></ng-container>\n              </mat-option>\n            }\n          </mat-optgroup>\n        }\n      } @else {\n        @for (option of options; track option.value) {\n          <mat-option [value]=\"option.value\">\n            <ng-container *ngTemplateOutlet=\"autocompleteOption; context: { option }\"></ng-container>\n          </mat-option>\n        }\n      }\n\n      <mat-option id=\"searching-option\" disabled>\n        @if (searching) {\n          <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n        }\n      </mat-option>\n\n      @if (hasMore && !searching) {\n        <mat-option id=\"load-more-options\" disabled intersectionObserver (intersection)=\"loadMore($event.intersect)\">\n        </mat-option>\n      }\n    </mat-autocomplete>\n\n    <button\n      *ngIf=\"selectControl.value !== null && selectControl.value !== undefined && selectControl.value !== ''\"\n      mat-icon-button\n      matSuffix\n      size=\"small\"\n      (click)=\"selectControl.setValue(undefined)\">\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n}\n\n<ng-template #autocompleteOption let-option=\"option\">\n  <div class=\"option\">\n    @if (option.icon) {\n      @switch (option.iconSrc) {\n        @case ('svg') {\n          <mat-icon [svgIcon]=\"option.icon\" [style.color]=\"option.iconColor ?? option.color\" [style.margin-right.px]=\"8\"></mat-icon>\n        }\n        @default {\n          <mat-icon [style.color]=\"option.iconColor ?? option.color\" [style.margin-right.px]=\"8\">\n            {{ option.icon }}\n          </mat-icon>\n        }\n      }\n    }\n    <mat-label [style.color]=\"option.color\" [innerHTML]=\"option.name | safeHtml\"></mat-label>\n  </div>\n</ng-template>\n","/** @format */\n\nimport { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  ReactiveFormsModule,\n  UntypedFormControl,\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { filter, Subscription, tap } from 'rxjs';\nimport { SafeHtmlPipe } from '../../pipes/safe-html.pipe';\nimport { DatatableSearchCheckboxColumn } from '../../types/datatable-column.type';\n\n@Component({\n  selector: 'lib-header-checkbox-filter',\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatButtonModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatCheckboxModule,\n    ReactiveFormsModule,\n    SafeHtmlPipe,\n  ],\n  templateUrl: './header-checkbox-filter.component.html',\n  styleUrl: './header-checkbox-filter.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => HeaderCheckboxFilterComponent),\n    },\n  ],\n})\nexport class HeaderCheckboxFilterComponent<Record> implements AfterViewInit, OnDestroy, ControlValueAccessor {\n  @Input()\n  column!: DatatableSearchCheckboxColumn<Record>;\n\n  control!: FormControl<any>;\n  selectControl = new FormControl();\n\n  onChange: (value: any) => void = () => {};\n\n  onTouched: () => void = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n  private previousValue: boolean | undefined;\n  private subsink = new Subscription();\n\n  writeValue(value: any): void {\n    const nextValue = value?.value;\n    this.previousValue = nextValue;\n    if (nextValue !== this.selectControl.value) this.selectControl.setValue(nextValue, { emitEvent: false });\n    this.changeDetectorRef.markForCheck();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    if (isDisabled) this.selectControl.disable({ emitEvent: false });\n    else this.selectControl.enable({ emitEvent: false });\n  }\n\n  registerOnChange(onChange: (value: any) => void): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: () => void): void {\n    this.onTouched = onTouched;\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    const ngControl: NgControl | null = this.injector.get(NgControl, null);\n    if (!ngControl) throw new Error(`${this.constructor.name} missing control [column:${this.column.columnDef}]`);\n    this.control = ngControl.control as UntypedFormControl;\n    this.previousValue = this.control.value?.value;\n    this.subsink.add(\n      this.selectControl.valueChanges\n        .pipe(\n          filter(value => {\n            if (value === true && this.previousValue === false) {\n              this.selectControl.setValue(undefined, { emitEvent: false });\n              this.previousValue = undefined;\n              this.onChange(undefined);\n              return false;\n            }\n            return true;\n          }),\n          tap(value => (this.previousValue = value)),\n        )\n        .subscribe((value: any) => {\n          if (value === undefined) this.onChange(undefined);\n          else this.onChange({ value, regex: false });\n        }),\n    );\n    this.changeDetectorRef.detectChanges();\n  }\n\n  ngOnDestroy(): void {\n    this.subsink.unsubscribe();\n  }\n}\n","<!-- @format -->\n\n@if (selectControl) {\n  <mat-checkbox [formControl]=\"selectControl\" [indeterminate]=\"selectControl.value === undefined\" (blur)=\"onTouched()\">\n    <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n  </mat-checkbox>\n}\n","/** @format */\n\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, forwardRef, inject, Injector, Input } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, NgControl, UntypedFormControl } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport type OPERATOR = '=' | '>' | '≥' | '<' | '≤' | '<>' | '≤≥';\nconst OPERATORS: OPERATOR[] = ['=', '>', '≥', '<', '≤', '<>', '≤≥'];\n\n@Component({\n  selector: 'lib-operator-select',\n  imports: [CommonModule, OverlayModule, MatIconModule, MatButtonModule],\n  templateUrl: './operator-select.component.html',\n  styleUrl: './operator-select.component.scss',\n  animations: [\n    trigger('fade', [\n      transition(':enter', [\n        style({ opacity: 0 }), // initial\n        animate('0.2s', style({ opacity: 1 })), // final\n      ]),\n      transition(':leave', [\n        style({ opacity: 1 }), // initial\n        animate('0.2s', style({ opacity: 0 })), // final\n      ]),\n    ]),\n  ],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => OperatorSelectComponent),\n    },\n  ],\n})\nexport class OperatorSelectComponent implements AfterViewInit, ControlValueAccessor {\n  @Input('disableRange')\n  set setDisableRange(disableRange: any) {\n    this.disableRange = disableRange !== false;\n    if (this.disableRange) this.operators = OPERATORS.slice(0, 5);\n    else this.operators = OPERATORS;\n  }\n  disableRange = false;\n\n  operators = OPERATORS;\n  isOpen: boolean = false;\n\n  control?: FormControl<any>;\n\n  onChange = () => {};\n\n  onTouched = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  writeValue = () => {};\n\n  registerOnChange(onChange: any): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    const ngControl: NgControl | null = this.injector.get(NgControl, null);\n    if (!ngControl) throw new Error(`${this.constructor.name} missing control`);\n    this.control = ngControl.control as UntypedFormControl;\n    this.changeDetectorRef.detectChanges();\n  }\n}\n","<!-- @format -->\n\n@if (control) {\n  <button\n    mat-mini-fab\n    color=\"primary\"\n    class=\"ngx-mat-datatable-operator-button\"\n    cdkOverlayOrigin\n    #trigger=\"cdkOverlayOrigin\"\n    (click)=\"$event.stopPropagation(); isOpen = !isOpen\">\n    {{ control.value }}\n  </button>\n\n  <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"isOpen\">\n    <div class=\"ngx-mat-datatable-operator-column\" @fade>\n      @for (operator of operators; track operator) {\n        @if (operator !== control.value) {\n          <button\n            mat-mini-fab\n            color=\"primary\"\n            class=\"ngx-mat-datatable-operator-button\"\n            (click)=\"control.setValue(operator); isOpen = !isOpen\">\n            {{ operator }}\n          </button>\n        }\n      }\n    </div>\n  </ng-template>\n}\n","/** @format */\n\nimport { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n  OnInit,\n  signal,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  FormGroup,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  ReactiveFormsModule,\n  UntypedFormControl,\n  Validators,\n} from '@angular/forms';\nimport { provideMomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MatDatepickerIntl, MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport moment from 'moment';\nimport { debounceTime, Subscription } from 'rxjs';\nimport { SafeHtmlPipe } from '../../pipes/safe-html.pipe';\nimport { DatatableSearchDateColumn } from '../../types/datatable-column.type';\nimport { OPERATOR, OperatorSelectComponent } from '../operator-select/operator-select.component';\n\n@Component({\n  selector: 'lib-header-date-filter',\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatButtonModule,\n    MatDatepickerModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatInputModule,\n    ReactiveFormsModule,\n    OperatorSelectComponent,\n    SafeHtmlPipe,\n  ],\n  templateUrl: './header-date-filter.component.html',\n  styleUrl: './header-date-filter.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => HeaderDateFilterComponent),\n    },\n    provideMomentDateAdapter(),\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderDateFilterComponent<Record> implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n  @Input()\n  column!: DatatableSearchDateColumn<Record>;\n\n  control!: FormControl<any>;\n  selectControl = new FormControl<Date | undefined>(undefined);\n  rangeGroup = new FormGroup({\n    from: new FormControl<Date | undefined>(undefined, Validators.required),\n    to: new FormControl<Date | undefined>(undefined, Validators.required),\n  });\n  operatorControl = new FormControl<OPERATOR>('=');\n\n  onChange: (value: any) => void = () => {};\n\n  onTouched: () => void = () => {};\n\n  private readonly _adapter = inject<DateAdapter<unknown, unknown>>(DateAdapter);\n  private readonly _intl = inject(MatDatepickerIntl);\n  private readonly _locale = signal(inject<unknown>(MAT_DATE_LOCALE));\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue(value: any): void {\n    const operator = (value?.operator ?? '=') as OPERATOR;\n    this.operatorControl.setValue(operator, { emitEvent: false });\n    if (this.isRangeOperator(operator)) {\n      this.selectControl.setValue(undefined, { emitEvent: false });\n      this.rangeGroup.setValue(\n        {\n          from: value?.value?.from ?? undefined,\n          to: value?.value?.to ?? undefined,\n        },\n        { emitEvent: false },\n      );\n    } else {\n      this.rangeGroup.reset({ from: undefined, to: undefined }, { emitEvent: false });\n      this.selectControl.setValue(value?.value ?? undefined, { emitEvent: false });\n    }\n    this.changeDetectorRef.markForCheck();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    const controls = [this.selectControl, this.rangeGroup, this.operatorControl];\n    controls.forEach(control => {\n      if (isDisabled) control.disable({ emitEvent: false });\n      else control.enable({ emitEvent: false });\n    });\n  }\n\n  registerOnChange(onChange: (value: any) => void): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: () => void): void {\n    this.onTouched = onTouched;\n  }\n\n  ngOnInit(): void {\n    if (this.column.locale) {\n      this._locale.set(this.column.locale);\n      this._adapter.setLocale(this._locale());\n      this._intl.changes.next();\n    }\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    const ngControl: NgControl | null = this.injector.get(NgControl, null);\n    if (!ngControl) throw new Error(`${this.constructor.name} missing control [column:${this.column.columnDef}]`);\n    this.control = ngControl.control as UntypedFormControl;\n    this.subsink.add(\n      this.selectControl.valueChanges.pipe(debounceTime(500)).subscribe(value => {\n        if (this.control.invalid) return;\n        else if (this.isEmptyValue(value)) this.onChange(undefined);\n        else this.onChange(this.buildValue(this.operatorControl.value!, value));\n      }),\n    );\n    this.subsink.add(\n      this.rangeGroup.valueChanges.pipe(debounceTime(500)).subscribe(value => {\n        if (!this.hasRangeValue(value)) this.onChange(undefined);\n        else if (this.rangeGroup.invalid) return;\n        else this.onChange(this.buildValue(this.operatorControl.value!, value));\n      }),\n    );\n    this.subsink.add(\n      this.operatorControl.valueChanges.subscribe((value: any) => {\n        if (this.isRangeOperator(value)) {\n          if (!this.hasRangeValue(this.rangeGroup.value)) this.onChange(undefined);\n          else if (!this.rangeGroup.invalid) this.onChange(this.buildValue(value, this.rangeGroup.value));\n        } else {\n          if (this.isEmptyValue(this.selectControl.value)) this.onChange(undefined);\n          else this.onChange(this.buildValue(value, this.selectControl.value));\n        }\n        this.changeDetectorRef.markForCheck();\n      }),\n    );\n    this.changeDetectorRef.detectChanges();\n  }\n\n  ngOnDestroy(): void {\n    this.subsink.unsubscribe();\n  }\n\n  clearRange(): void {\n    this.rangeGroup.reset();\n    this.onChange(undefined);\n    this.onTouched();\n    this.changeDetectorRef.markForCheck();\n  }\n\n  private buildValue(operator: OPERATOR, value: any): any {\n    switch (operator) {\n      case '=':\n        return {\n          operator: '≤≥',\n          value: { from: moment(value).startOf('day'), to: moment(value).endOf('day') },\n        };\n      case '>':\n        return { operator, value: moment(value).endOf('day') };\n      case '≥':\n        return { operator, value: moment(value).startOf('day') };\n      case '<':\n        return { operator, value: moment(value).startOf('day') };\n      case '≤':\n        return { operator, value: moment(value).endOf('day') };\n      case '<>':\n        return { operator, value: { from: moment(value.from).endOf('day'), to: moment(value.to).startOf('day') } };\n      case '≤≥':\n        return { operator, value: { from: moment(value.from).startOf('day'), to: moment(value.to).endOf('day') } };\n    }\n  }\n\n  private hasRangeValue(value: Partial<{ from: any; to: any }> | null | undefined): boolean {\n    return !this.isEmptyValue(value?.from) || !this.isEmptyValue(value?.to);\n  }\n\n  private isEmptyValue(value: any): boolean {\n    return value === null || value === undefined || value === '';\n  }\n\n  private isRangeOperator(operator: OPERATOR | null | undefined): boolean {\n    return operator === '<>' || operator === '≤≥';\n  }\n}\n","<!-- @format -->\n\n@if (selectControl) {\n  @if (['<>', '≤≥'].includes(operatorControl.value!)) {\n    <mat-form-field\n      class=\"ngx-datatable-date-filter\"\n      appearance=\"fill\"\n      [class.has-value]=\"\n        (rangeGroup.value.from !== null && rangeGroup.value.from !== undefined) ||\n        (rangeGroup.value.to !== null && rangeGroup.value.to !== undefined)\n      \">\n      <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n\n      <lib-operator-select matPrefix [formControl]=\"operatorControl\"></lib-operator-select>\n\n      <mat-date-range-input [formGroup]=\"rangeGroup\" [rangePicker]=\"rangePicker\">\n        <input matStartDate formControlName=\"from\" [placeholder]=\"column.placeholder!\" (blur)=\"onTouched()\" />\n        <input matEndDate formControlName=\"to\" [placeholder]=\"column.placeholder!\" (blur)=\"onTouched()\" />\n      </mat-date-range-input>\n      <mat-datepicker-toggle matIconSuffix [for]=\"rangePicker\"></mat-datepicker-toggle>\n      <mat-date-range-picker #rangePicker></mat-date-range-picker>\n\n      <button\n        *ngIf=\"\n          (rangeGroup.value.from !== null && rangeGroup.value.from !== undefined) ||\n          (rangeGroup.value.to !== null && rangeGroup.value.to !== undefined)\n        \"\n        mat-icon-button\n        matSuffix\n        size=\"small\"\n        (click)=\"clearRange()\">\n        <mat-icon>close</mat-icon>\n      </button>\n    </mat-form-field>\n  } @else {\n    <mat-form-field\n      class=\"ngx-datatable-date-filter\"\n      appearance=\"fill\"\n      [class.has-value]=\"selectControl.value !== null && selectControl.value !== undefined\">\n      <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n\n      <lib-operator-select matPrefix [formControl]=\"operatorControl\"></lib-operator-select>\n\n      <input\n        matInput\n        [matDatepicker]=\"datePicker\"\n        [formControl]=\"selectControl\"\n        [placeholder]=\"column.placeholder!\"\n        (blur)=\"onTouched()\" />\n      <mat-datepicker-toggle matIconSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\n      <mat-datepicker #datePicker></mat-datepicker>\n\n      <button\n        *ngIf=\"selectControl.value !== null && selectControl.value !== undefined\"\n        mat-icon-button\n        matSuffix\n        size=\"small\"\n        (click)=\"selectControl.setValue(undefined)\">\n        <mat-icon>close</mat-icon>\n      </button>\n    </mat-form-field>\n  }\n}\n","/** @format */\n\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  HostBinding,\n  inject,\n  Injector,\n  Input,\n  OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, NgControl, UntypedFormControl } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport moment, { RelativeTimeKey } from 'moment';\n\nexport type TIME_UNIT = 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year';\nconst TIME_UNITS: TIME_UNIT[] = ['second', 'minute', 'hour', 'day', 'month', 'year'];\nconst MOMENT_RELATIVE_TIME_KEY: RelativeTimeKey[] = ['ss', 'mm', 'hh', 'dd', 'MM', 'yy'];\n\n@Component({\n  selector: 'lib-time-unit-select',\n  imports: [CommonModule, OverlayModule, MatIconModule, MatButtonModule],\n  templateUrl: './time-unit-select.component.html',\n  styleUrl: './time-unit-select.component.scss',\n  animations: [\n    trigger('fade', [\n      transition(':enter', [\n        style({ opacity: 0 }), // initial\n        animate('0.2s', style({ opacity: 1 })), // final\n      ]),\n      transition(':leave', [\n        style({ opacity: 1 }), // initial\n        animate('0.2s', style({ opacity: 0 })), // final\n      ]),\n    ]),\n  ],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => TimeUnitSelectComponent),\n    },\n  ],\n})\nexport class TimeUnitSelectComponent implements OnInit, AfterViewInit, ControlValueAccessor {\n  static toMilliseconds(value: number, unit: TIME_UNIT): number {\n    return moment.duration(value, unit).as('milliseconds') as number;\n  }\n  static convert(value: number, from: TIME_UNIT, to?: TIME_UNIT): number {\n    if (to === undefined) (to = from), (from = 'millisecond' as any);\n    return moment.duration(value, from).as(to) as number;\n  }\n\n  @Input('locale')\n  set setLocale(locale: string | undefined) {\n    this.locale = locale || moment.locale();\n    this.loadUnitNames();\n  }\n  locale?: string = moment.locale();\n\n  units = TIME_UNITS;\n  unitNames: { [key: string]: string } = {};\n\n  isOpen: boolean = false;\n\n  control?: FormControl<any>;\n\n  onChange = () => {};\n\n  onTouched = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  writeValue = () => {};\n\n  registerOnChange(onChange: any): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  ngOnInit(): void {\n    this.loadUnitNames();\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    const ngControl: NgControl | null = this.injector.get(NgControl, null);\n    if (!ngControl) throw new Error(`${this.constructor.name} missing control`);\n    this.control = ngControl.control as UntypedFormControl;\n    this.changeDetectorRef.detectChanges();\n  }\n\n  private loadUnitNames() {\n    this.unitNames = this.units.reduce(\n      (pv, cv, i) => (\n        (pv[cv] = moment\n          .localeData(this.locale)\n          .relativeTime('' as any, true, MOMENT_RELATIVE_TIME_KEY[i], false)\n          .trim()),\n        pv\n      ),\n      {} as any\n    );\n  }\n}\n","<!-- @format -->\n\n@if (control) {\n  <button\n    mat-flat-button\n    color=\"primary\"\n    class=\"ngx-mat-datatable-time-unit-button\"\n    cdkOverlayOrigin\n    #trigger=\"cdkOverlayOrigin\"\n    (click)=\"$event.stopPropagation(); isOpen = !isOpen\">\n    <span>\n      {{ unitNames[control.value] }}\n    </span>\n  </button>\n\n  <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"isOpen\">\n    <div class=\"ngx-mat-datatable-time-unit-column\" @fade>\n      @for (unit of units; track unit) {\n        @if (unit !== control.value) {\n          <button\n            mat-flat-button\n            color=\"primary\"\n            class=\"ngx-mat-datatable-time-unit-button\"\n            (click)=\"control.setValue(unit); isOpen = !isOpen\">\n            <span>\n              {{ unitNames[unit] }}\n            </span>\n          </button>\n        }\n      }\n    </div>\n  </ng-template>\n}\n","/** @format */\n\nimport { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  FormGroup,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  ReactiveFormsModule,\n  UntypedFormControl,\n  Validators,\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { debounceTime, Subscription } from 'rxjs';\nimport { SafeHtmlPipe } from '../../pipes/safe-html.pipe';\nimport { DatatableSearchDurationColumn } from '../../types/datatable-column.type';\nimport { OPERATOR, OperatorSelectComponent } from '../operator-select/operator-select.component';\nimport { TIME_UNIT, TimeUnitSelectComponent } from '../time-unit-select/time-unit-select.component';\n\n@Component({\n  selector: 'lib-header-duration-filter',\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatButtonModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatInputModule,\n    ReactiveFormsModule,\n    OperatorSelectComponent,\n    TimeUnitSelectComponent,\n    SafeHtmlPipe,\n  ],\n  templateUrl: './header-duration-filter.component.html',\n  styleUrl: './header-duration-filter.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => HeaderDurationFilterComponent),\n    },\n  ],\n})\nexport class HeaderDurationFilterComponent<Record> implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n  @Input()\n  column!: DatatableSearchDurationColumn<Record>;\n\n  control!: FormControl<any>;\n  selectControl = new FormControl<number | undefined>(undefined);\n  rangeGroup = new FormGroup({\n    start: new FormControl<number | undefined>(undefined, Validators.required),\n    end: new FormControl<number | undefined>(undefined, Validators.required),\n  });\n  operatorControl = new FormControl<OPERATOR>('=');\n  timeUnitControl = new FormControl<TIME_UNIT>('second');\n\n  onChange: (value: any) => void = () => {};\n\n  onTouched: () => void = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue(value: any): void {\n    if (value?.unitOfTime) this.timeUnitControl.setValue(value.unitOfTime, { emitEvent: false });\n    if (value?.operator) this.operatorControl.setValue(value.operator, { emitEvent: false });\n    if (value?.value !== null && value?.value !== undefined) {\n      let selectValue = TimeUnitSelectComponent.convert(value.value, this.timeUnitControl.value!);\n      if (this.selectControl.value !== selectValue) this.selectControl.setValue(selectValue, { emitEvent: false });\n    } else this.selectControl.setValue(null, { emitEvent: false });\n    this.changeDetectorRef.markForCheck();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    const controls = [this.selectControl, this.operatorControl, this.timeUnitControl];\n    controls.forEach(control => {\n      if (isDisabled) control.disable({ emitEvent: false });\n      else control.enable({ emitEvent: false });\n    });\n  }\n\n  registerOnChange(onChange: (value: any) => void): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: () => void): void {\n    this.onTouched = onTouched;\n  }\n\n  ngOnInit(): void {}\n\n  async ngAfterViewInit(): Promise<void> {\n    const ngControl: NgControl | null = this.injector.get(NgControl, null);\n    if (!ngControl) throw new Error(`${this.constructor.name} missing control [column:${this.column.columnDef}]`);\n    this.control = ngControl.control as UntypedFormControl;\n    this.subsink.add(\n      this.selectControl.valueChanges.pipe(debounceTime(500)).subscribe(value => {\n        if (this.control.invalid) return;\n        else if (this.isEmptyValue(value)) this.onChange(undefined);\n        else {\n          const unitOfTimeValue = value as number;\n          this.onChange({\n            unitOfTimeValue,\n            value: TimeUnitSelectComponent.toMilliseconds(unitOfTimeValue, this.timeUnitControl.value!),\n            regex: false,\n            operator: this.operatorControl.value,\n            unitOfTime: this.timeUnitControl.value,\n          });\n        }\n      }),\n    );\n    this.subsink.add(\n      this.operatorControl.valueChanges.subscribe((value: any) => {\n        if (this.isEmptyValue(this.selectControl.value)) return;\n        const unitOfTimeValue = this.selectControl.value as number;\n        this.onChange({\n          unitOfTimeValue,\n          value: TimeUnitSelectComponent.toMilliseconds(unitOfTimeValue, this.timeUnitControl.value!),\n          regex: false,\n          operator: value,\n          unitOfTime: this.timeUnitControl.value,\n        });\n      }),\n    );\n    this.subsink.add(\n      this.timeUnitControl.valueChanges.subscribe((value: any) => {\n        if (this.isEmptyValue(this.selectControl.value) || !this.control.value?.unitOfTime) return;\n        const unitOfTimeValue = TimeUnitSelectComponent.convert(\n          this.selectControl.value as number,\n          this.control.value.unitOfTime,\n          value,\n        );\n        this.selectControl.setValue(unitOfTimeValue, { emitEvent: false });\n        this.onChange({\n          unitOfTimeValue,\n          value: TimeUnitSelectComponent.toMilliseconds(unitOfTimeValue, value),\n          regex: false,\n          operator: this.operatorControl.value,\n          unitOfTime: value,\n        });\n      }),\n    );\n    this.changeDetectorRef.detectChanges();\n  }\n\n  ngOnDestroy(): void {\n    this.subsink.unsubscribe();\n  }\n\n  private isEmptyValue(value: any): boolean {\n    return value === null || value === undefined || value === '';\n  }\n}\n","<!-- @format -->\n\n@if (selectControl) {\n  <mat-form-field\n    class=\"ngx-datatable-duration-filter\"\n    appearance=\"fill\"\n    [class.has-value]=\"selectControl.value !== null && selectControl.value !== undefined\">\n    <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n\n    <lib-operator-select disableRange matPrefix [formControl]=\"operatorControl\"></lib-operator-select>\n\n    <input matInput type=\"number\" [formControl]=\"selectControl\" [placeholder]=\"column.placeholder!\" (blur)=\"onTouched()\" />\n\n    <lib-time-unit-select [locale]=\"column.locale\" matSuffix [formControl]=\"timeUnitControl\"></lib-time-unit-select>\n\n    <button\n      *ngIf=\"selectControl.value !== null && selectControl.value !== undefined\"\n      mat-icon-button\n      matSuffix\n      size=\"small\"\n      (click)=\"selectControl.setValue(undefined)\">\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n}\n","/** @format */\n\nimport { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  ReactiveFormsModule,\n  UntypedFormControl,\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { Subscription } from 'rxjs';\nimport { SafeHtmlPipe } from '../../pipes/safe-html.pipe';\nimport { DatatableSearchNumberColumn } from '../../types/datatable-column.type';\nimport { OperatorSelectComponent } from '../operator-select/operator-select.component';\n\n@Component({\n  selector: 'lib-header-number-filter',\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatButtonModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatInputModule,\n    MatMenuModule,\n    ReactiveFormsModule,\n    OperatorSelectComponent,\n    SafeHtmlPipe,\n  ],\n  templateUrl: './header-number-filter.component.html',\n  styleUrl: './header-number-filter.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => HeaderNumberFilterComponent),\n    },\n  ],\n})\nexport class HeaderNumberFilterComponent<Record> implements AfterViewInit, OnDestroy, ControlValueAccessor {\n  @Input()\n  column!: DatatableSearchNumberColumn<Record>;\n\n  control!: FormControl<any>;\n  selectControl = new FormControl();\n  operatorControl = new FormControl('=');\n\n  onChange: (value: any) => void = () => {};\n\n  onTouched: () => void = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue(value: any): void {\n    if (value?.operator && value.operator !== this.operatorControl.value) {\n      this.operatorControl.setValue(value.operator, { emitEvent: false });\n    }\n    if (value?.value !== this.selectControl.value) this.selectControl.setValue(value?.value, { emitEvent: false });\n    this.changeDetectorRef.markForCheck();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    if (isDisabled) {\n      this.selectControl.disable({ emitEvent: false });\n      this.operatorControl.disable({ emitEvent: false });\n    } else {\n      this.selectControl.enable({ emitEvent: false });\n      this.operatorControl.enable({ emitEvent: false });\n    }\n  }\n\n  registerOnChange(onChange: (value: any) => void): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: () => void): void {\n    this.onTouched = onTouched;\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    const ngControl: NgControl | null = this.injector.get(NgControl, null);\n    if (!ngControl) throw new Error(`${this.constructor.name} missing control [column:${this.column.columnDef}]`);\n    this.control = ngControl.control as UntypedFormControl;\n    this.subsink.add(\n      this.selectControl.valueChanges.subscribe((value: any) => {\n        if (this.control.invalid) return;\n        else if (this.isEmptyValue(value)) this.onChange(undefined);\n        else this.onChange({ value, regex: false, operator: this.operatorControl.value });\n      }),\n    );\n    this.subsink.add(\n      this.operatorControl.valueChanges.subscribe((value: any) => {\n        if (this.isEmptyValue(this.selectControl.value)) return;\n        this.onChange({ value: this.selectControl.value, regex: false, operator: value });\n      }),\n    );\n    this.changeDetectorRef.detectChanges();\n  }\n\n  ngOnDestroy(): void {\n    this.subsink.unsubscribe();\n  }\n\n  private isEmptyValue(value: any): boolean {\n    return value === null || value === undefined || value === '';\n  }\n}\n","<!-- @format -->\n\n@if (selectControl) {\n  <mat-form-field\n    class=\"ngx-datatable-number-filter\"\n    appearance=\"fill\"\n    [class.has-value]=\"selectControl.value !== null && selectControl.value !== undefined && selectControl.value !== ''\">\n    <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n\n    <lib-operator-select disableRange matPrefix [formControl]=\"operatorControl\"></lib-operator-select>\n\n    <input matInput [formControl]=\"selectControl\" type=\"number\" (blur)=\"onTouched()\" />\n\n    <button\n      *ngIf=\"selectControl.value !== null && selectControl.value !== undefined && selectControl.value !== ''\"\n      mat-icon-button\n      matSuffix\n      size=\"small\"\n      (click)=\"selectControl.setValue(undefined)\">\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'isArray' })\nexport class IsArrayPipe implements PipeTransform {\n  transform(obj: any): boolean {\n    return Array.isArray(obj);\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { DatatableSearchListOption } from '../types/datatable-column.type';\n\n@Pipe({ name: 'selectOption' })\nexport class SelectOptionPipe implements PipeTransform {\n  transform(\n    value: any,\n    options: DatatableSearchListOption[] | null\n  ): DatatableSearchListOption | null {\n    if (!options) return null;\n    return options.find((option) => option.value === value) || null;\n  }\n}\n","/** @format */\n\nimport { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  ReactiveFormsModule,\n  UntypedFormControl,\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { Subscription } from 'rxjs';\nimport { IsArrayPipe } from '../../pipes/is-array.pipe';\nimport { SafeHtmlPipe } from '../../pipes/safe-html.pipe';\nimport { SelectOptionPipe } from '../../pipes/select-option.pipe';\nimport { DatatableSearchListOption, DatatableSearchSelectColumn } from '../../types/datatable-column.type';\n\n@Component({\n  selector: 'lib-header-select-filter',\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatButtonModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatSelectModule,\n    ReactiveFormsModule,\n    SelectOptionPipe,\n    SafeHtmlPipe,\n    IsArrayPipe,\n  ],\n  templateUrl: './header-select-filter.component.html',\n  styleUrl: './header-select-filter.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => HeaderSelectFilterComponent),\n    },\n  ],\n})\nexport class HeaderSelectFilterComponent<Record> implements AfterViewInit, OnDestroy, ControlValueAccessor {\n  @Input()\n  column!: DatatableSearchSelectColumn<Record>;\n\n  options: DatatableSearchListOption[] = [];\n  groups: { name: string; options: DatatableSearchListOption[] }[] = [];\n\n  control!: FormControl<any>;\n  selectControl = new FormControl();\n\n  onChange: (value: any) => void = () => {};\n\n  onTouched: () => void = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue(controlValue: any): void {\n    if (controlValue?.value !== this.selectControl.value) {\n      const value = controlValue?.value;\n      if (!this.isEmptyValue(value) && !Array.isArray(value) && this.column.multiple) {\n        this.selectControl.setValue([value], { emitEvent: false });\n      } else this.selectControl.setValue(value, { emitEvent: false });\n    }\n    this.changeDetectorRef.markForCheck();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    if (isDisabled) this.selectControl.disable({ emitEvent: false });\n    else this.selectControl.enable({ emitEvent: false });\n  }\n\n  registerOnChange(onChange: (value: any) => void): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: () => void): void {\n    this.onTouched = onTouched;\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    const ngControl: NgControl | null = this.injector.get(NgControl, null);\n    if (!ngControl) throw new Error(`${this.constructor.name} missing control [column:${this.column.columnDef}]`);\n    this.control = ngControl.control as UntypedFormControl;\n    this.subsink.add(\n      this.selectControl.valueChanges.subscribe((value: any) => {\n        if (this.isEmptyValue(value)) this.onChange(undefined);\n        else this.onChange({ value, operator: this.column.multiple ? '$in' : undefined, regex: false });\n      }),\n    );\n    if (Array.isArray(this.column.options)) this.buildOptions(this.column.options);\n    else\n      this.subsink.add(\n        this.column.options.subscribe(data => {\n          this.options = [];\n          this.groups = [];\n          this.buildOptions(data);\n        }),\n      );\n    this.changeDetectorRef.detectChanges();\n  }\n\n  ngOnDestroy(): void {\n    this.subsink.unsubscribe();\n  }\n\n  private buildOptions(data: DatatableSearchListOption[]): void {\n    data.forEach(d => {\n      this.options.push(d);\n      const name = d.group ?? '';\n      const group = this.groups.find(g => g.name === name);\n      if (!group) this.groups.push({ name, options: [d] });\n      else group.options.push(d);\n    });\n  }\n\n  private isEmptyValue(value: any): boolean {\n    return value === null || value === undefined || value === '' || (Array.isArray(value) && !value.length);\n  }\n}\n","<!-- @format -->\n\n@if (selectControl) {\n  <mat-form-field appearance=\"fill\">\n    <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n    <mat-select\n      [formControl]=\"selectControl\"\n      [placeholder]=\"column.placeholder!\"\n      [multiple]=\"column.multiple\"\n      (closed)=\"onTouched()\">\n      <mat-select-trigger>\n        @if (column.multiple && selectControl.value | isArray) {\n          <div class=\"options\">\n            @for (v of selectControl.value; track v) {\n              @let option = v | selectOption: options;\n              @if (option) {\n                <ng-container *ngTemplateOutlet=\"selectOption; context: { option }\"></ng-container>\n              } @else {\n                <mat-label [innerHTML]=\"v | safeHtml\"></mat-label>\n              }\n            }\n          </div>\n        } @else {\n          @let option = selectControl.value | selectOption: options;\n          @if (option) {\n            <ng-container *ngTemplateOutlet=\"selectOption; context: { option }\"></ng-container>\n          } @else {\n            <mat-label [innerHTML]=\"selectControl.value | safeHtml\"></mat-label>\n          }\n        }\n      </mat-select-trigger>\n      @if (column.hasGroup) {\n        @for (group of groups; track group) {\n          <mat-optgroup>\n            <mat-label [innerHTML]=\"group.name | safeHtml\"></mat-label>\n            @for (option of group.options; track option) {\n              <mat-option [value]=\"option.value\">\n                <ng-container *ngTemplateOutlet=\"selectOption; context: { option }\"></ng-container>\n              </mat-option>\n            }\n          </mat-optgroup>\n        }\n      } @else {\n        @for (option of options; track option) {\n          <mat-option [value]=\"option.value\">\n            <ng-container *ngTemplateOutlet=\"selectOption; context: { option }\"></ng-container>\n          </mat-option>\n        }\n      }\n    </mat-select>\n\n    <button\n      *ngIf=\"selectControl.value !== null && selectControl.value !== undefined && selectControl.value !== ''\"\n      mat-icon-button\n      matSuffix\n      size=\"small\"\n      (click)=\"selectControl.setValue(undefined)\">\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n}\n\n<ng-template #selectOption let-option=\"option\">\n  <div class=\"option\">\n    @if (option.icon) {\n      @switch (option.iconSrc) {\n        @case ('svg') {\n          <mat-icon\n            [svgIcon]=\"option.icon\"\n            [style.color]=\"option.iconColor ?? option.color\"\n            [style.margin-right.px]=\"8\"></mat-icon>\n        }\n        @default {\n          <mat-icon [style.color]=\"option.iconColor ?? option.color\" [style.margin-right.px]=\"8\">\n            {{ option.icon }}\n          </mat-icon>\n        }\n      }\n    }\n    <mat-label [style.color]=\"option.color\" [innerHTML]=\"option.name | safeHtml\"></mat-label>\n  </div>\n</ng-template>\n","/** @format */\n\nimport { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  ReactiveFormsModule,\n  UntypedFormControl,\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { Subscription } from 'rxjs';\nimport { SafeHtmlPipe } from '../../pipes/safe-html.pipe';\nimport { DatatableSearchTextColumn } from '../../types/datatable-column.type';\n\n@Component({\n  selector: 'lib-header-text-filter',\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatButtonModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatInputModule,\n    ReactiveFormsModule,\n    SafeHtmlPipe,\n  ],\n  templateUrl: './header-text-filter.component.html',\n  styleUrl: './header-text-filter.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => HeaderTextFilterComponent),\n    },\n  ],\n})\nexport class HeaderTextFilterComponent<Record> implements AfterViewInit, OnDestroy, ControlValueAccessor {\n  @Input()\n  column!: DatatableSearchTextColumn<Record>;\n\n  control!: FormControl<any>;\n  selectControl = new FormControl();\n\n  onChange: (value: any) => void = () => {};\n\n  onTouched: () => void = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue(value: any): void {\n    const nextValue = value?.value ?? '';\n    if (nextValue !== this.selectControl.value) this.selectControl.setValue(nextValue, { emitEvent: false });\n    this.changeDetectorRef.markForCheck();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    if (isDisabled) this.selectControl.disable({ emitEvent: false });\n    else this.selectControl.enable({ emitEvent: false });\n  }\n\n  registerOnChange(onChange: (value: any) => void): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: () => void): void {\n    this.onTouched = onTouched;\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    const ngControl: NgControl | null = this.injector.get(NgControl, null);\n    if (!ngControl) throw new Error(`${this.constructor.name} missing control [column:${this.column.columnDef}]`);\n    this.control = ngControl.control as UntypedFormControl;\n    this.subsink.add(\n      this.selectControl.valueChanges.subscribe((value: any) => {\n        if (this.isEmptyValue(value)) this.onChange(undefined);\n        else {\n          if (this.column.regex) this.onChange({ value, regex: true });\n          else this.onChange({ value: this.escapeRegExp(value), regex: true });\n        }\n      }),\n    );\n    this.changeDetectorRef.detectChanges();\n  }\n\n  ngOnDestroy(): void {\n    this.subsink.unsubscribe();\n  }\n\n  private escapeRegExp(value: string): string {\n    if (!value) return '';\n    return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n  }\n\n  private isEmptyValue(value: any): boolean {\n    return value === null || value === undefined || value === '';\n  }\n}\n","<!-- @format -->\n\n@if (selectControl) {\n  <mat-form-field\n    appearance=\"fill\"\n    [class.has-value]=\"selectControl.value !== null && selectControl.value !== undefined && selectControl.value !== ''\">\n    <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n    <input matInput [formControl]=\"selectControl\" (blur)=\"onTouched()\" />\n    <button\n      *ngIf=\"selectControl.value !== null && selectControl.value !== undefined && selectControl.value !== ''\"\n      mat-icon-button\n      matSuffix\n      size=\"small\"\n      (click)=\"selectControl.setValue(undefined)\">\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n}\n","/** @format */\n\nimport { inject, Injectable, LOCALE_ID } from '@angular/core';\n\ntype Labels = {\n  noDateLabel: string;\n  itemsPerPageLabel: string;\n  nextPageLabel: string;\n  lastPageLabel: string;\n  previousPageLabel: string;\n  firstPageLabel: string;\n  onLabel: string;\n  incrementalLoadingLabel: string;\n  incrementalLoadMoreLabel: string;\n};\n\nconst DEFAULT_LABELS: Labels = {\n  noDateLabel: 'No data',\n  itemsPerPageLabel: `Items per page:`,\n  nextPageLabel: `Next page`,\n  lastPageLabel: `Last page`,\n  previousPageLabel: `Previous page`,\n  firstPageLabel: `First page`,\n  onLabel: `on`,\n  incrementalLoadingLabel: 'Loading...',\n  incrementalLoadMoreLabel: 'Load more',\n};\n\nconst LABELS: { [locale: string]: Labels } = {\n  fr: {\n    noDateLabel: 'Aucune donnée',\n    itemsPerPageLabel: `Éléments par page :`,\n    nextPageLabel: `Page suivante`,\n    lastPageLabel: `Dernière page`,\n    previousPageLabel: `Page précédente`,\n    firstPageLabel: `Première page`,\n    onLabel: `sur`,\n    incrementalLoadingLabel: 'Chargement...',\n    incrementalLoadMoreLabel: 'Charger plus',\n  },\n};\n\ntype NumberOptions = {\n  separator: string;\n  decimal: string;\n};\n\nconst DEFAULT_NUMBER_OPTIONS = {\n  separator: ',',\n  decimal: '.',\n  duration: 0.3,\n  useEasing: false,\n};\n\nconst NUMBER_OPTIONS: { [locale: string]: NumberOptions } = {\n  fr: {\n    separator: ' ',\n    decimal: ',',\n  },\n};\n\n@Injectable()\nexport class NgxMatDatatableIntl {\n  locale: string = inject(LOCALE_ID);\n  noDateLabel!: string;\n  itemsPerPageLabel!: string;\n  nextPageLabel!: string;\n  lastPageLabel!: string;\n  previousPageLabel!: string;\n  firstPageLabel!: string;\n  onLabel!: string;\n  incrementalLoadingLabel!: string;\n  incrementalLoadMoreLabel!: string;\n\n  numberOptions!: NumberOptions;\n\n  getRangeLabel = (page: number, pageSize: number, length: number): string => {\n    if (length === 0 || pageSize === 0) return `0 ${this.onLabel} ${length}`;\n    length = Math.max(length, 0);\n    const startIndex = page * pageSize;\n    const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\n    return `${startIndex + 1} - ${endIndex} ${this.onLabel} ${length}`;\n  };\n\n  constructor() {\n    this.setLabels(LABELS[this.locale] ?? DEFAULT_LABELS);\n    this.numberOptions = NUMBER_OPTIONS[this.locale] ?? DEFAULT_NUMBER_OPTIONS;\n  }\n\n  private setLabels(labels: Labels): void {\n    this.noDateLabel = labels.noDateLabel;\n    this.itemsPerPageLabel = labels.itemsPerPageLabel;\n    this.nextPageLabel = labels.nextPageLabel;\n    this.lastPageLabel = labels.lastPageLabel;\n    this.previousPageLabel = labels.previousPageLabel;\n    this.firstPageLabel = labels.firstPageLabel;\n    this.onLabel = labels.onLabel;\n    this.incrementalLoadingLabel = labels.incrementalLoadingLabel;\n    this.incrementalLoadMoreLabel = labels.incrementalLoadMoreLabel;\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'merge' })\nexport class MergePipe implements PipeTransform {\n  transform<TObject, TSource>(obj: TObject, src?: TSource): TObject & TSource {\n    return src ? { ...(obj as any), ...(src as any) } : { ...(obj as any) };\n  }\n}\n","/** @format */\n\nimport { CommonModule } from '@angular/common';\nimport { Component, HostBinding, inject, Input } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { CountUpModule } from 'ngx-countup';\nimport { IntersectionObserverModule } from 'ngx-intersection-observer';\nimport { NgxMatDatatableIntl } from '../../datatable.intl';\nimport { MergePipe } from '../../pipes/merge.pipe';\n\n@Component({\n  selector: 'lib-progress-spinner',\n  imports: [CommonModule, MatProgressSpinnerModule, IntersectionObserverModule, CountUpModule, MergePipe],\n  templateUrl: './progress-spinner.component.html',\n  styleUrl: './progress-spinner.component.scss',\n})\nexport class ProgressSpinnerComponent {\n  datatableIntl = inject(NgxMatDatatableIntl);\n\n  @Input()\n  diameter: number = 100;\n\n  @Input('value')\n  set setValue(value: number | string) {\n    if (typeof value === 'string') this._value = parseFloat(value);\n    else this._value = value;\n    if (this.animateInView) this.load(this.isInView);\n  }\n  private _value: number = 0;\n  value: number = 0;\n\n  @Input()\n  color?: string;\n\n  @Input('displayValue')\n  set setDisplayValue(displayValue: any) {\n    this.displayValue = displayValue !== false;\n  }\n  displayValue = true;\n\n  @HostBinding('style.--progress-spinner-color') get getColor() {\n    return this.color;\n  }\n\n  @Input()\n  fontSize: string = `${this.diameter / 5}px`;\n\n  @Input('animateInView')\n  set setAnimateInView(animateInView: any) {\n    this.animateInView = animateInView !== false;\n  }\n  animateInView = true;\n\n  @Input('delay')\n  set setDelay(delay: number | string) {\n    if (typeof delay === 'string') this.delay = parseInt(delay);\n    else this.delay = delay;\n  }\n  delay?: number;\n\n  private isInView: boolean = false;\n  protected load(intersect: boolean) {\n    this.isInView = intersect;\n    if (this.isInView) {\n      if (this.delay) setTimeout(() => (this.value = this._value), this.delay);\n      else this.value = this._value;\n    }\n  }\n}\n","<!-- @format -->\n\n<div id=\"container\" [style.font-size]=\"fontSize\" [style.width.px]=\"diameter\" [style.height.px]=\"diameter\">\n  <mat-progress-spinner id=\"background\" [diameter]=\"diameter\" mode=\"determinate\" [value]=\"100\"> </mat-progress-spinner>\n  <mat-progress-spinner\n    id=\"foreground\"\n    [diameter]=\"diameter\"\n    mode=\"determinate\"\n    [value]=\"value\"\n    intersectionObserver\n    (intersection)=\"load($event.intersect)\">\n  </mat-progress-spinner>\n  <div id=\"inner-block\">\n    <mat-label\n      [countUp]=\"value\"\n      [options]=\"datatableIntl.numberOptions | merge: { suffix: '%', duration: 0.6 }\"\n      [reanimateOnClick]=\"false\"></mat-label>\n    <ng-content></ng-content>\n  </div>\n</div>\n","/** @format */\n\nimport { DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { NgxMatDatasourceRequestOptions, NgxMatDatasourceResultFacet, NgxMatDatasourceService } from './types/datasource-service.type';\n\nexport class DatagridDataSource<Record> extends DataSource<Record> {\n  loading$ = new BehaviorSubject<boolean>(true);\n  data: Record[] = [];\n  recordsFiltered = 0;\n  recordsTotal?: number;\n  facets?: { [id: string]: NgxMatDatasourceResultFacet[] };\n  rowSize: number = 0; // row size in kb\n\n  private options?: NgxMatDatasourceRequestOptions;\n  private latestRequestId = 0;\n  private disconnected = false;\n  protected dataStream = new BehaviorSubject<Record[]>([]);\n\n  constructor(private service: NgxMatDatasourceService<Record>) {\n    super();\n  }\n\n  connect(): Observable<Record[]> {\n    return this.dataStream;\n  }\n\n  disconnect(): void {\n    this.disconnected = true;\n    this.latestRequestId++;\n    this.loading$.complete();\n    this.dataStream.complete();\n  }\n\n  async loadData(options: NgxMatDatasourceRequestOptions, append = false): Promise<void> {\n    if (this.disconnected) return;\n    const requestId = ++this.latestRequestId;\n    this.options = options;\n    if (!append) this.loading$.next(true);\n    try {\n      const result = await this.service(options);\n      if (this.disconnected || requestId !== this.latestRequestId || options.draw !== result.draw) return;\n      this.recordsTotal = result.recordsTotal;\n      this.recordsFiltered = result.recordsFiltered;\n      this.facets = result.facets;\n      this.setData(result.data, append);\n      this.calculateRowSize(this.data);\n    } finally {\n      if (!append && !this.disconnected && requestId === this.latestRequestId) this.loading$.next(false);\n    }\n  }\n\n  refresh(): void {\n    if (this.options) void this.loadData(this.options);\n  }\n\n  redraw(match?: (record: Record) => boolean): void {\n    const data: Record[] = [];\n    this.data.forEach((d) => {\n      if (match) {\n        if (match(d)) data.push({ ...d });\n        else data.push(d);\n      } else data.push({ ...d });\n    });\n    this.setData(data, false);\n  }\n\n  private setData(data: Record[], append: boolean): void {\n    this.data = append ? [...this.data, ...data] : data;\n    this.dataStream.next(this.data);\n  }\n\n  private calculateRowSize(data: Record[]): void {\n    let total = 0;\n    for (let row of data) {\n      const size = new TextEncoder().encode(JSON.stringify(row)).length;\n      const kiloBytes = size / 1024;\n      total += kiloBytes / 1024;\n    }\n    this.rowSize = total && data.length ? total / data.length : 0;\n  }\n}\n","/** @format */\n\nimport { InjectionToken, Provider } from '@angular/core';\nimport { NgxMatDatatableDefaultOptions } from './types/datatable-options.type';\n\nexport const NGX_MAT_DATATABLE_DEFAULT_OPTIONS = new InjectionToken<NgxMatDatatableDefaultOptions>('NGX_MAT_DATATABLE_DEFAULT_OPTIONS', {\n  providedIn: 'root',\n  factory: (): NgxMatDatatableDefaultOptions => ({\n    loadMode: 'pagination',\n    showRecordsCount: true,\n    pageSizeOptions: [20, 50, 100],\n    pageSizeOptionsIndex: 1,\n    incremental: {\n      trigger: 'inView',\n    },\n  }),\n});\n\nexport function provideNgxMatDatatableDefaultOptions<Record = any>(options: NgxMatDatatableDefaultOptions<Record>): Provider {\n  return {\n    provide: NGX_MAT_DATATABLE_DEFAULT_OPTIONS,\n    useValue: options,\n  };\n}\n","/** @format */\n\nimport { Directive, Input, TemplateRef } from '@angular/core';\n@Directive({\n  selector: '[ngxMatDatatableContent]',\n})\nexport class NgxMatDatatableContentDirective {\n  @Input('ngxMatDatatableContent')\n  id!: string;\n\n  constructor(public templateRef: TemplateRef<any>) {}\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { DatatableValueColumn } from '../types/datatable-column.type';\nimport { NgxMatDatatableOptions } from '../types/datatable-options.type';\n\n@Pipe({ name: 'backgroundColor' })\nexport class BackgroundColorPipe<Record> implements PipeTransform {\n  transform(row: Record, column: DatatableValueColumn<Record>, options: NgxMatDatatableOptions<Record>): string | void {\n    if (typeof column.backgroundColor === 'string') return column.backgroundColor;\n    if (typeof column.backgroundColor === 'function') return column.backgroundColor(row);\n    if (typeof options.rowBackgroundColor === 'string') return options.rowBackgroundColor;\n    if (typeof options.rowBackgroundColor === 'function') return options.rowBackgroundColor(column, row);\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { DatatableValueColumn } from '../types/datatable-column.type';\nimport { NgxMatDatatableOptions } from '../types/datatable-options.type';\n\n@Pipe({ name: 'cellColor' })\nexport class CellColorPipe<Record> implements PipeTransform {\n  transform(row: Record, column: DatatableValueColumn<Record>, options: NgxMatDatatableOptions<Record>): string | void {\n    if (typeof column.color === 'string') return column.color;\n    if (typeof column.color === 'function') return column.color(row);\n    if (typeof options.rowColor === 'string') return options.rowColor;\n    if (typeof options.rowColor === 'function') return options.rowColor(column, row);\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { DatatableValueColumn } from '../types/datatable-column.type';\nimport { NgxMatDatatableOptions } from '../types/datatable-options.type';\n\n@Pipe({ name: 'cellOpacity' })\nexport class CellOpacityPipe<Record> implements PipeTransform {\n  transform(row: Record, column: DatatableValueColumn<Record>, options: NgxMatDatatableOptions<Record>): number | void {\n    if (typeof options.rowOpacity === 'string') return options.rowOpacity;\n    if (typeof options.rowOpacity === 'function') return options.rowOpacity(column, row);\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'filter' })\nexport class FilterPipe implements PipeTransform {\n  transform(obj: any[] | undefined, filter: { [key: string]: any }): any[] {\n    return (obj ?? []).filter(o => {\n      for (let key of Object.keys(filter)) {\n        if (o[key] !== filter[key]) return false;\n      }\n      return true;\n    });\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform, QueryList } from '@angular/core';\nimport { NgxMatDatatableContentDirective } from '../directives/datatable-cell.directive';\n\n@Pipe({ name: 'findContent' })\nexport class FindContentPipe implements PipeTransform {\n  transform(\n    contentRefs: QueryList<NgxMatDatatableContentDirective> | undefined,\n    id: string\n  ): NgxMatDatatableContentDirective | undefined {\n    return contentRefs?.find(ref => ref.id === id);\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'find' })\nexport class FindPipe implements PipeTransform {\n  transform(obj: any[] | undefined, filter: { [key: string]: any }): any | undefined {\n    return (obj ?? ([] as any[])).find(o => {\n      for (let key of Object.keys(filter)) {\n        if (o[key] !== filter[key]) return false;\n      }\n      return true;\n    });\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'includedIn' })\nexport class IncludedInPipe implements PipeTransform {\n  transform(elmt: any, obj: any[]): boolean {\n    return (obj ?? ([] as any[])).includes(elmt);\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport * as lodash from 'lodash-es';\n\n@Pipe({\n  name: 'orderBy',\n})\nexport class OrderByPipe implements PipeTransform {\n  transform(data: any[], keys: string[] | string, dirs?: ('asc' | 'desc')[] | ('asc' | 'desc')): any[] {\n    return lodash.orderBy(data, typeof keys === 'string' ? [keys] : keys, typeof dirs === 'string' ? [dirs] : dirs);\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { NgxMatDatasourceResultFacet } from '../types/datasource-service.type';\nimport { FacetOptionsOptions } from '../types/datatable-facet.type';\n\n@Pipe({ name: 'sortFacetEntries' })\nexport class SortFacetEntriesPipe implements PipeTransform {\n  transform(entries: NgxMatDatasourceResultFacet[], options: FacetOptionsOptions[]): NgxMatDatasourceResultFacet[] {\n    if (!entries || !options) return entries;\n    return entries.sort((e1, e2) => {\n      const ie1 = options!.findIndex(o => o.value === e1._id);\n      if (ie1 === -1) return 1;\n      const ie2 = options!.findIndex(o => o.value === e2._id);\n      if (ie2 === -1) return -1;\n      return ie1 - ie2;\n    });\n  }\n}\n","/** @format */\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'sum' })\nexport class SumPipe implements PipeTransform {\n  transform(obj: any[] | undefined, by?: string): number {\n    if (!obj || !obj.length) return 0;\n    if (by) return obj.reduce((pv, cv) => (pv += cv[by]), 0);\n    return obj.reduce((pv, cv) => (pv += cv), 0);\n  }\n}\n","/** @format */\n\nimport humanizeDuration, { HumanizerOptions } from 'humanize-duration';\n\nexport function duration(data: number | string | Date, options: { locale?: string; largest?: number }): string | null {\n  const durationOption: HumanizerOptions = { maxDecimalPoints: 0, largest: 1, fallbacks: ['en'] };\n  if (options?.locale) durationOption.language = options.locale;\n  if (options?.largest) durationOption.largest = options.largest;\n\n  let value: number | undefined;\n  if (typeof data === 'number') value = data;\n  else if (typeof data === 'string') {\n    const date = new Date(data);\n    if (isNaN(date.valueOf())) return null;\n    value = Date.now() - date.valueOf();\n  } else if (typeof data?.valueOf === 'function') value = Date.now() - data.valueOf();\n  if (value === undefined || value === null) return null;\n\n  return humanizeDuration(value, durationOption);\n}\n","/** @format */\n\nexport function get(obj: any, path: string) {\n  const chunks = path.split('.');\n  let value = obj;\n  for (let i = 0; i < chunks.length; ++i) {\n    value = value[chunks[i]];\n    if (value === undefined || value === null) return null;\n  }\n  return value;\n}\n","/** @format */\n\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  inject,\n  Injectable,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewChild,\n} from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\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 { MatPaginator, MatPaginatorIntl, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CountUpModule } from 'ngx-countup';\nimport { IntersectionObserverModule } from 'ngx-intersection-observer';\nimport * as rxjs from 'rxjs';\nimport { CellCheckboxValueComponent } from './components/cell-checkbox-value/cell-checkbox-value.component';\nimport { CellDateValueComponent } from './components/cell-date-value/cell-date-value.component';\nimport { CellDurationValueComponent } from './components/cell-duration-value/cell-duration-value.component';\nimport { CellNumberValueComponent } from './components/cell-number-value/cell-number-value.component';\nimport { CellSelectValueComponent } from './components/cell-select-value/cell-select-value.component';\nimport { HeaderAutocompleteFilterComponent } from './components/header-autocomplete-filter/header-autocomplete-filter.component';\nimport { HeaderCheckboxFilterComponent } from './components/header-checkbox-filter/header-checkbox-filter.component';\nimport { HeaderDateFilterComponent } from './components/header-date-filter/header-date-filter.component';\nimport { HeaderDurationFilterComponent } from './components/header-duration-filter/header-duration-filter.component';\nimport { HeaderNumberFilterComponent } from './components/header-number-filter/header-number-filter.component';\nimport { HeaderSelectFilterComponent } from './components/header-select-filter/header-select-filter.component';\nimport { HeaderTextFilterComponent } from './components/header-text-filter/header-text-filter.component';\nimport { ProgressSpinnerComponent } from './components/progress-spinner/progress-spinner.component';\nimport { DatagridDataSource } from './datasource';\nimport { NGX_MAT_DATATABLE_DEFAULT_OPTIONS } from './datatable-default-options';\nimport { NgxMatDatatableIntl } from './datatable.intl';\nimport { NgxMatDatatableContentDirective } from './directives/datatable-cell.directive';\nimport { BackgroundColorPipe } from './pipes/background-color.pipe';\nimport { CellColorPipe } from './pipes/cell-color.pipe';\nimport { CellOpacityPipe } from './pipes/cell-opacity.pipe';\nimport { FilterPipe } from './pipes/filter.pipe';\nimport { FindContentPipe } from './pipes/find-cell-content.pipe';\nimport { FindPipe } from './pipes/find.pipe';\nimport { GetPipe } from './pipes/get.pipe';\nimport { IncludedInPipe } from './pipes/included-in.pipe';\nimport { OrderByPipe } from './pipes/order-by.pipe';\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\nimport { SortFacetEntriesPipe } from './pipes/sort-facet-entries.pipe';\nimport { ValueFunctionPipe } from './pipes/suffix-function.pipe';\nimport { SumPipe } from './pipes/sum.pipe';\nimport { TransformPipe } from './pipes/transform.pipe';\nimport { duration } from './tools/duration.tool';\nimport { get } from './tools/get.tool';\nimport { DatatableConfig } from './types/config.type';\nimport {\n  NgxMatDatasourceRequestColumn,\n  NgxMatDatasourceRequestOptions,\n  NgxMatDatasourceRequestOrder,\n  NgxMatDatasourceResultFacet,\n} from './types/datasource-service.type';\nimport {\n  DatatableColumn,\n  DatatableDurationColumn,\n  DatatableSearchListOption,\n  DatatableSelectColumn,\n} from './types/datatable-column.type';\nimport { FacetOptionsOptions } from './types/datatable-facet.type';\nimport {\n  NgxMatDatatableIncrementalOptions,\n  NgxMatDatatableIncrementalTrigger,\n  NgxMatDatatableLoadMode,\n  NgxMatDatatableOptions,\n} from './types/datatable-options.type';\n\n@Injectable()\nclass NgxMatDatatablePaginatorIntl extends MatPaginatorIntl {\n  private datatableIntl = inject(NgxMatDatatableIntl);\n\n  override itemsPerPageLabel = this.datatableIntl.itemsPerPageLabel;\n  override nextPageLabel = this.datatableIntl.nextPageLabel;\n  override lastPageLabel = this.datatableIntl.lastPageLabel;\n  override previousPageLabel = this.datatableIntl.previousPageLabel;\n  override firstPageLabel = this.datatableIntl.firstPageLabel;\n  onLabel = this.datatableIntl.onLabel;\n\n  override getRangeLabel = (page: number, pageSize: number, length: number): string => {\n    return this.datatableIntl.getRangeLabel(page, pageSize, length);\n  };\n}\n\ntype UpdateColumn<Record> = Pick<DatatableColumn<Record>, 'columnDef' | 'header' | 'sticky' | 'hidden'>;\n\n@Component({\n  imports: [\n    CellCheckboxValueComponent,\n    CellDateValueComponent,\n    CellDurationValueComponent,\n    CellNumberValueComponent,\n    CellSelectValueComponent,\n    CellColorPipe,\n    CommonModule,\n    TransformPipe,\n    DragDropModule,\n    FindContentPipe,\n    FormsModule,\n    GetPipe,\n    HeaderAutocompleteFilterComponent,\n    HeaderCheckboxFilterComponent,\n    HeaderDateFilterComponent,\n    HeaderDurationFilterComponent,\n    HeaderNumberFilterComponent,\n    HeaderSelectFilterComponent,\n    HeaderTextFilterComponent,\n    IntersectionObserverModule,\n    MatBadgeModule,\n    MatButtonModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatMenuModule,\n    MatPaginatorModule,\n    MatProgressSpinnerModule,\n    MatTableModule,\n    MatChipsModule,\n    ReactiveFormsModule,\n    SafeHtmlPipe,\n    MatTooltipModule,\n    BackgroundColorPipe,\n    FilterPipe,\n    SumPipe,\n    MatCardModule,\n    CountUpModule,\n    ProgressSpinnerComponent,\n    FindPipe,\n    OrderByPipe,\n    SortFacetEntriesPipe,\n    ValueFunctionPipe,\n    IncludedInPipe,\n    CellOpacityPipe,\n  ],\n  providers: [{ provide: MatPaginatorIntl, useClass: NgxMatDatatablePaginatorIntl }],\n  selector: 'ngx-mat-datatable',\n  templateUrl: 'datatable.component.html',\n  styleUrl: 'datatable.component.scss',\n  animations: [\n    trigger('fade', [\n      transition(':enter', [\n        style({ opacity: 0 }), // initial\n        animate('0.2s', style({ opacity: 1 })), // final\n      ]),\n      transition(':leave', [\n        style({ opacity: 1 }), // initial\n        animate('0.2s', style({ opacity: 0 })), // final\n      ]),\n    ]),\n    trigger('detailExpand', [\n      state('collapsed', style({ height: '0px', minHeight: '0' })),\n      state('expanded', style({ height: '*' })),\n      transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n    ]),\n  ],\n})\nexport class NgxMatDatatableComponent<Record = any> implements OnInit, OnDestroy {\n  @Input('options')\n  options!: NgxMatDatatableOptions<Record>;\n\n  @Input()\n  config?: DatatableConfig;\n\n  @Output()\n  rowClicked = new EventEmitter<Record>();\n\n  @Output()\n  configUpdated = new EventEmitter<DatatableConfig>();\n\n  @Output()\n  searchUpdated = new EventEmitter<any>();\n\n  @Output()\n  ready = new EventEmitter<NgxMatDatatableComponent>();\n\n  @ViewChild(MatPaginator) paginator: MatPaginator | undefined;\n\n  @ContentChildren(NgxMatDatatableContentDirective)\n  contentRefs?: QueryList<NgxMatDatatableContentDirective>;\n\n  displayedColumns: string[] = [];\n  visibleColumnsColspan = 1;\n  disabledRows: Record[] = [];\n\n  dataSource!: DatagridDataSource<Record>;\n\n  expandedRow: any | null = null;\n\n  loaded = false;\n\n  datatableIntl = inject(NgxMatDatatableIntl);\n\n  loadMode: NgxMatDatatableLoadMode = 'pagination';\n  incrementalTrigger: NgxMatDatatableIncrementalTrigger = 'inView';\n  incrementalPageSize = 30;\n  incrementalPageIndex = 0;\n  displayedRecordsCount = 0;\n  totalRecordsCount = 0;\n  hasMoreRecords = false;\n  loadingNextRecords = false;\n  showRecordsCount = true;\n  incrementalLoadingLabel = this.datatableIntl.incrementalLoadingLabel;\n  incrementalLoadMoreLabel = this.datatableIntl.incrementalLoadMoreLabel;\n  incrementalRowColumns = ['_incrementalLoad'];\n  showIncrementalRow = false;\n  showIncrementalInViewTrigger = false;\n  showIncrementalButtonTrigger = false;\n  paginationPageSizeOptions: number[] = [];\n  paginationPageSize = 30;\n\n  searchFormGroup!: FormGroup;\n\n  private subscriptions = new rxjs.Subscription();\n  private changeDetectorRef = inject(ChangeDetectorRef);\n  private defaultOptions = inject(NGX_MAT_DATATABLE_DEFAULT_OPTIONS);\n  private incrementalLoadToken = 0;\n\n  get data(): Record[] | undefined {\n    return this._data;\n  }\n  private _data?: Record[];\n\n  @ViewChild('container') container?: ElementRef<HTMLDivElement>;\n  @ViewChild('head') head?: ElementRef;\n  @ViewChild(MatTable) matTable?: MatTable<any> & {\n    _elementRef: { nativeElement: any };\n  };\n\n  observer = new ResizeObserver(entries => {\n    entries.forEach(entry => {\n      const containerHeight = this.container?.nativeElement.clientHeight ?? 0;\n      const containerWidth = this.container?.nativeElement.clientWidth ?? 0;\n      const headerHeight = this.head?.nativeElement.clientHeight ?? 0;\n      const headerWidth = this.head?.nativeElement.clientWidth ?? 0;\n      const contentHeight = entry.contentRect.height;\n      const contentWidth = entry.contentRect.width;\n\n      this.tableContainerOverflowY = containerHeight - headerHeight - contentHeight < 0 ? 'auto' : 'inherit';\n      this.tableContainerOverflowX = containerWidth - headerWidth - contentWidth < 0 ? 'auto' : 'inherit';\n      this.tableContainerWidth = containerWidth;\n\n      this.changeDetectorRef.markForCheck();\n    });\n  });\n\n  @HostBinding('style.--datatable-container-overflow-y')\n  tableContainerOverflowY = 'inherit';\n\n  @HostBinding('style.--datatable-container-overflow-x')\n  tableContainerOverflowX = 'inherit';\n\n  @HostBinding('style.--datatable-container-width.px')\n  tableContainerWidth = 0;\n\n  async ngOnInit(): Promise<void> {\n    if (!this.options?.service) throw new Error(`missing mongoose datatable component service`);\n    if (!this.options?.columns) throw new Error(`missing mongoose datatable component columns`);\n    this.options = this.resolveOptions(this.options);\n    await this.applyConfig();\n    this.prepareLoadModeOptions();\n    this.buildDisplayColumns();\n    this.buildSearchFormGroup();\n    this.dataSource = new DatagridDataSource<Record>(this.options.service);\n    this.ready.emit(this);\n    this.changeDetectorRef.detectChanges();\n  }\n\n  ngOnDestroy(): void {\n    if (this.matTable) this.observer.unobserve(this.matTable._elementRef.nativeElement);\n    this.subscriptions.unsubscribe();\n  }\n\n  load(intersect: boolean): void {\n    if (!intersect || this.loaded) return;\n    this.loaded = true;\n    if (this.matTable) this.observer.observe(this.matTable?._elementRef.nativeElement);\n    if (this.loadMode === 'pagination') {\n      this.subscriptions.add(\n        this.paginator?.page.subscribe(() => {\n          this.updateConfig();\n          void this.loadPage();\n        }),\n      );\n    }\n    void this.loadPage();\n  }\n\n  sortColumn(column: DatatableColumn<Record>): void {\n    if (column.sortable === false) return;\n    if (!column.order)\n      column.order = {\n        index: this.options.columns.filter(c => !!c.order).length,\n        dir: 'asc',\n      };\n    else if (column.order.dir === 'asc') column.order.dir = 'desc';\n    else {\n      delete column.order;\n      this.consolidateOrderIndex();\n    }\n    this.loadFirstPage();\n  }\n\n  redraw(match?: (record: Record) => boolean): void {\n    this.dataSource.redraw(match);\n    this.changeDetectorRef.detectChanges();\n  }\n\n  refreshColumns(): void {\n    this.buildDisplayColumns();\n  }\n\n  exporting = false;\n  async export(): Promise<void> {\n    this.exporting = true;\n    try {\n      const XLSX = await import('xlsx');\n      const columns = this.buildRequestColumns();\n      const order = this.buildOrder(columns);\n      const chunkLength = this.getExportChunkLength(this.dataSource.recordsFiltered);\n      const chunks = this.buildExportChunks(this.dataSource.recordsFiltered, chunkLength);\n\n      const data: any[] = [];\n      for (let chunk of chunks) {\n        const result = await this.options.service({\n          draw: Date.now().toString(),\n          columns,\n          order,\n          start: chunk.start,\n          length: chunk.length,\n        });\n        data.push(...result.data);\n      }\n      const rows: any[] = [];\n      for (let d of data) {\n        const row: any = {};\n        for (let c of this.options.columns) {\n          if (c.hidden || c.disabled) continue;\n          let value = get(d, c.property);\n          if (c.export) c.export(row, value, d);\n          else {\n            if ((c as any).transform) value = (c as any).transform(value, d);\n            switch (c.type) {\n              case 'select':\n                await this.buildExportSelectColumn(c as any, row, value);\n                break;\n              case 'duration':\n                await this.buildExportDurationColumn(c as any, row, value);\n                break;\n              default:\n                row[c.header] = value;\n            }\n          }\n        }\n        rows.push(row);\n      }\n\n      const workbook = XLSX.utils.book_new();\n      const worksheet = XLSX.utils.json_to_sheet(rows);\n      XLSX.utils.book_append_sheet(workbook, worksheet, 'export');\n      const filename = typeof this.options.actions?.export === 'string' ? this.options.actions.export : 'export';\n      await XLSX.writeFile(workbook, `${filename}-${Date.now()}.xlsx`);\n    } finally {\n      this.exporting = false;\n    }\n  }\n\n  private async buildExportSelectColumn(\n    column: DatatableSelectColumn<Record> & {\n      __options?: DatatableSearchListOption[];\n    },\n    row: any,\n    value: any,\n  ): Promise<void> {\n    if (Array.isArray(column.options)) {\n      row[column.header] = column.options.find(option => option.value === value)?.name ?? value;\n    } else if (column.__options) {\n      row[column.header] = column.__options.find(option => option.value === value)?.name ?? value;\n    } else {\n      const options = await rxjs.lastValueFrom(column.options);\n      row[column.header] = options.find(option => option.value === value)?.name ?? value;\n    }\n  }\n\n  private async buildExportDurationColumn(\n    column: DatatableDurationColumn<Record>,\n    row: any,\n    value: any,\n  ): Promise<void> {\n    row[`${column.header} ms`] = value;\n    row[column.header] = duration(value, column);\n  }\n\n  private getExportChunkLength(recordsFiltered: number): number {\n    if (recordsFiltered <= 0) return 0;\n    if (!Number.isFinite(this.dataSource.rowSize) || this.dataSource.rowSize <= 0) return recordsFiltered;\n    return Math.max(1, Math.min(Math.floor(5 / this.dataSource.rowSize), recordsFiltered));\n  }\n\n  private buildExportChunks(recordsFiltered: number, chunkLength: number): { start: number; length: number }[] {\n    if (recordsFiltered <= 0 || chunkLength <= 0) return [];\n    const chunks: { start: number; length: number }[] = [];\n    for (let i = 0; i < Math.ceil(recordsFiltered / chunkLength); ++i) {\n      chunks.push({ start: i, length: chunkLength });\n    }\n    return chunks;\n  }\n\n  async loadPage(): Promise<void> {\n    if (!this.dataSource) return;\n    if (this.loadMode === 'incremental') {\n      await this.loadInitialPage();\n      return;\n    }\n    await this.loadPaginationPage();\n  }\n\n  async loadNextIncrementalPage(): Promise<void> {\n    if (this.loadMode !== 'incremental') return;\n    if (!this.dataSource || this.dataSource.loading$.value || this.loadingNextRecords || !this.hasMoreRecords) return;\n\n    this.loadingNextRecords = true;\n    this.updateIncrementalRowState();\n    const loadToken = this.incrementalLoadToken;\n    try {\n      const columns = this.buildRequestColumns();\n      const order = this.buildOrder(columns);\n      const nextPageIndex = this.incrementalPageIndex + 1;\n      await this.dataSource.loadData(\n        this.buildRequestOptions(columns, order, nextPageIndex, this.incrementalPageSize),\n        true,\n      );\n      if (loadToken !== this.incrementalLoadToken) return;\n      this.incrementalPageIndex = nextPageIndex;\n      this.updateLoadedDataState();\n    } finally {\n      if (loadToken === this.incrementalLoadToken) {\n        this.loadingNextRecords = false;\n        this.updateIncrementalRowState();\n        this.changeDetectorRef.detectChanges();\n      }\n    }\n  }\n\n  onIncrementalIntersection(intersect: boolean): void {\n    if (!intersect) return;\n    void this.loadNextIncrementalPage();\n  }\n\n  private async loadPaginationPage(): Promise<void> {\n    const columns = this.buildRequestColumns();\n    const order = this.buildOrder(columns);\n    await this.dataSource.loadData(\n      this.buildRequestOptions(columns, order, this.paginator!.pageIndex, this.paginator!.pageSize),\n    );\n    this.updateLoadedDataState();\n  }\n\n  private async loadInitialPage(): Promise<void> {\n    this.resetIncrementalLoading();\n    const columns = this.buildRequestColumns();\n    const order = this.buildOrder(columns);\n    await this.dataSource.loadData(this.buildRequestOptions(columns, order, 0, this.incrementalPageSize));\n    this.updateLoadedDataState();\n  }\n\n  private buildRequestOptions(\n    columns: NgxMatDatasourceRequestColumn[],\n    order: NgxMatDatasourceRequestOrder[],\n    start: number,\n    length: number,\n  ): NgxMatDatasourceRequestOptions {\n    return {\n      draw: Date.now().toString(),\n      columns,\n      start,\n      length,\n      order,\n      facets: this.options.facets,\n    };\n  }\n\n  private loadFirstPage(): void {\n    if (this.loadMode === 'pagination' && this.paginator) this.paginator.pageIndex = 0;\n    void this.loadPage();\n  }\n\n  private updateLoadedDataState(): void {\n    this._data = this.dataSource.data;\n    this.buildDisabledRows();\n    this.updateRecordsCountState();\n    this.updateHasMoreRecordsState();\n  }\n\n  private buildDisabledRows(): void {\n    this.disabledRows = [];\n    if (this.options.rowDisabled) {\n      this.dataSource.data?.forEach(d => {\n        if (typeof this.options.rowDisabled === 'string') {\n          if (get(d, this.options.rowDisabled) === true) this.disabledRows.push(d);\n        } else if (typeof this.options.rowDisabled === 'function') {\n          if (this.options.rowDisabled(d)) this.disabledRows.push(d);\n        }\n      });\n    }\n  }\n\n  private buildOrder(columns: NgxMatDatasourceRequestColumn[]): NgxMatDatasourceRequestOrder[] {\n    const order: NgxMatDatasourceRequestOrder[] = [];\n    this.options.columns\n      .filter(c => !!c.order)\n      .sort((c1, c2) => c1.order!.index - c2.order!.index)\n      .forEach(c => {\n        const index = columns.findIndex(column => column.data === (c.sortProperty || c.property));\n        if (index !== -1) order.push({ column: index, dir: c.order!.dir });\n      });\n    return order;\n  }\n\n  updateColumns: UpdateColumn<Record>[] = [];\n  openUpdateColumnDisplay(): void {\n    this.updateColumns = this.options.columns.map(column => ({\n      columnDef: column.columnDef,\n      header: column.header,\n      sticky: column.sticky,\n      hidden: column.hidden,\n    }));\n  }\n\n  reorderColumns(event: CdkDragDrop<any[]>): void {\n    moveItemInArray(this.updateColumns, event.previousIndex, event.currentIndex);\n  }\n\n  closeUpdateColumnDisplay(): void {\n    let reload = false;\n    this.updateColumns.forEach((updated, index) => {\n      const columnIndex = this.options.columns.findIndex(c => c.columnDef === updated.columnDef);\n      if (columnIndex == -1) return;\n      if (columnIndex !== index) moveItemInArray(this.options.columns, columnIndex, index);\n      const column = this.options.columns[index];\n      if (updated.sticky !== column.sticky) column.sticky = updated.sticky;\n      if (updated.hidden !== column.hidden) {\n        column.hidden = updated.hidden;\n        reload = reload || !updated.hidden;\n      }\n    });\n    this.buildDisplayColumns();\n    this.updateConfig();\n    if (reload) void this.loadPage();\n  }\n\n  rowClick(row: Record): void {\n    if (this.disabledRows.includes(row)) return;\n    if (typeof this.options.actions?.rowClick === 'boolean') {\n      this.rowClicked.emit(row);\n    } else if (typeof this.options.actions?.rowClick === 'function') {\n      this.options.actions.rowClick(row);\n      this.rowClicked.emit(row);\n    }\n  }\n\n  facetClick(\n    column: DatatableColumn<Record> | undefined,\n    result: NgxMatDatasourceResultFacet,\n    option: FacetOptionsOptions,\n  ): void {\n    if (!column) return;\n    const control = this.searchFormGroup?.controls[column.columnDef];\n    if (!control) return;\n    if (option && option.value !== control.value?.value) control.setValue({ value: option.value, name: option.name });\n    else if (result._id !== control.value?.value) control.setValue({ value: result._id });\n  }\n\n  private buildRequestColumns(): NgxMatDatasourceRequestColumn[] {\n    const columns: NgxMatDatasourceRequestColumn[] = [];\n    const additionalColumns: NgxMatDatasourceRequestColumn[] = [];\n    if (this.options.additionalProperties) {\n      this.options.additionalProperties.forEach(property => this.addAdditionalColumn(additionalColumns, property));\n    }\n    this.options.columns.forEach(c => {\n      if (c.hidden) return;\n      const column: NgxMatDatasourceRequestColumn = {\n        data: c.property,\n        projection: c.projection,\n        name: c.columnDef,\n        searchable: c.searchable,\n      };\n      if (c.sortProperty && c.order) this.addAdditionalColumn(additionalColumns, c.sortProperty);\n      if (c.searchable) {\n        const control = this.searchFormGroup.controls[c.columnDef];\n        if (control.value) {\n          if (c.searchProperty) this.addAdditionalColumn(additionalColumns, c.searchProperty, control.value);\n          else column.search = control.value;\n        }\n      }\n      if (c.additionalProperties) {\n        c.additionalProperties.forEach(property => this.addAdditionalColumn(additionalColumns, property));\n      }\n      columns.push(column);\n    });\n    for (let additionalColumn of additionalColumns) {\n      const c = columns.find(c => c.data === additionalColumn.data);\n      if (!c) columns.push(additionalColumn);\n      else if (additionalColumn.search && !c.search) c.search = additionalColumn.search;\n    }\n    return columns;\n  }\n\n  private addAdditionalColumn(\n    additionalColumns: NgxMatDatasourceRequestColumn[],\n    data: string,\n    search?: any,\n  ): NgxMatDatasourceRequestColumn {\n    let column = additionalColumns.find(c => c.data === data);\n    if (!column) additionalColumns.push((column = { data }));\n    if (search) {\n      column.search = search;\n      column.searchable = true;\n    }\n    return column;\n  }\n\n  private buildDisplayColumns(): void {\n    const displayedColumns: string[] = [];\n    this.options.columns.forEach(column => {\n      if (column.hidden || column.disabled) return;\n      displayedColumns.push(column.columnDef);\n      if (column.type && ['number', 'date', 'duration'].includes(column.type)) {\n        if (!(column as any).locale) (column as any).locale = this.datatableIntl.locale;\n      }\n    });\n    this.displayedColumns = displayedColumns;\n    this.visibleColumnsColspan = Math.max(displayedColumns.length, 1);\n  }\n\n  private prepareLoadModeOptions(): void {\n    this.loadMode = this.options.loadMode ?? 'pagination';\n    this.incrementalTrigger = this.options.incremental?.trigger ?? 'inView';\n    this.preparePaginationOptions();\n    this.incrementalPageSize = this.getDefaultIncrementalPageSize();\n    this.showRecordsCount = this.options.showRecordsCount ?? true;\n    this.incrementalLoadingLabel = this.datatableIntl.incrementalLoadingLabel;\n    this.incrementalLoadMoreLabel = this.datatableIntl.incrementalLoadMoreLabel;\n    this.updateRecordsCountState();\n    this.updateHasMoreRecordsState();\n  }\n\n  private preparePaginationOptions(): void {\n    this.paginationPageSizeOptions = this.options.pageSizeOptions || [20, 50, 100];\n    this.paginationPageSize =\n      this.options.pageSize || this.paginationPageSizeOptions[this.options.pageSizeOptionsIndex ?? 1] || 30;\n  }\n\n  private getDefaultIncrementalPageSize(): number {\n    return this.options.incremental?.pageSize || this.options.pageSize || this.paginationPageSize || 30;\n  }\n\n  private resolveOptions(options: NgxMatDatatableOptions<Record>): NgxMatDatatableOptions<Record> {\n    const actions = this.resolveActions(options);\n    const incremental = this.resolveIncrementalOptions(options);\n    return {\n      ...this.defaultOptions,\n      ...options,\n      service: options.service,\n      columns: options.columns,\n      ...(actions ? { actions } : {}),\n      ...(incremental ? { incremental } : {}),\n    };\n  }\n\n  private resolveActions(options: NgxMatDatatableOptions<Record>): NgxMatDatatableOptions<Record>['actions'] {\n    if (!this.defaultOptions.actions && !options.actions) return undefined;\n    const columns = this.resolveActionColumns(options);\n    return {\n      ...this.defaultOptions.actions,\n      ...options.actions,\n      ...(columns ? { columns } : {}),\n    };\n  }\n\n  private resolveActionColumns(\n    options: NgxMatDatatableOptions<Record>,\n  ): NonNullable<NgxMatDatatableOptions<Record>['actions']>['columns'] {\n    if (!this.defaultOptions.actions?.columns && !options.actions?.columns) return undefined;\n    return {\n      ...this.defaultOptions.actions?.columns,\n      ...options.actions?.columns,\n    };\n  }\n\n  private resolveIncrementalOptions(\n    options: NgxMatDatatableOptions<Record>,\n  ): NgxMatDatatableIncrementalOptions | undefined {\n    if (!this.defaultOptions.incremental && !options.incremental) return undefined;\n    return {\n      ...this.defaultOptions.incremental,\n      ...options.incremental,\n    };\n  }\n\n  private resetIncrementalLoading(): void {\n    this.incrementalLoadToken++;\n    this.incrementalPageIndex = 0;\n    this.loadingNextRecords = false;\n    this.updateIncrementalRowState();\n  }\n\n  private updateRecordsCountState(): void {\n    this.displayedRecordsCount = this.dataSource?.data.length ?? 0;\n    this.totalRecordsCount = this.dataSource?.recordsFiltered ?? 0;\n  }\n\n  private updateHasMoreRecordsState(): void {\n    this.hasMoreRecords = this.loadMode === 'incremental' && this.displayedRecordsCount < this.totalRecordsCount;\n    this.updateIncrementalRowState();\n  }\n\n  private updateIncrementalRowState(): void {\n    this.showIncrementalRow = this.loadMode === 'incremental' && (this.hasMoreRecords || this.loadingNextRecords);\n    this.showIncrementalInViewTrigger = this.showIncrementalRow && this.incrementalTrigger === 'inView';\n    this.showIncrementalButtonTrigger = this.showIncrementalRow && this.incrementalTrigger === 'button';\n\n    this.changeDetectorRef.markForCheck();\n    queueMicrotask(() => this.matTable?.renderRows());\n  }\n\n  private buildSearchFormGroup(): void {\n    this.searchFormGroup = new FormGroup(\n      this.options.columns.reduce(\n        (controls, column) => {\n          if (column.searchable) {\n            const control = new FormControl({\n              value: column.searchValue !== undefined ? { value: column.searchValue } : undefined,\n              disabled: false,\n            });\n            controls[column.columnDef] = control;\n            if (typeof column.searchUpdated === 'function') {\n              this.subscriptions.add(\n                control.valueChanges.pipe(rxjs.debounceTime(500)).subscribe(value => column.searchUpdated!(value)),\n              );\n            }\n          }\n          return controls;\n        },\n        {} as { [columnDef: string]: FormControl },\n      ),\n    );\n    this.subscriptions.add(\n      this.searchFormGroup.valueChanges.pipe(rxjs.debounceTime(500)).subscribe(value => {\n        this.searchUpdated.next(value);\n        this.loadFirstPage();\n      }),\n    );\n  }\n\n  private consolidateOrderIndex(): void {\n    let index = 0;\n    this.options.columns\n      .filter(c => !!c.order)\n      .sort((c1, c2) => c1.order!.index - c2.order!.index)\n      .forEach(c => (c.order!.index = index++));\n  }\n\n  private async applyConfig(): Promise<void> {\n    if (this.options?.configService?.get) {\n      const config = await this.options.configService.get();\n      this.config = config ?? this.config;\n    }\n    if (this.options?.columns && this.config?.columns) {\n      this.config.columns.forEach((updated, index) => {\n        const columnIndex = this.options.columns.findIndex(c => c.columnDef === updated.columnDef);\n        if (columnIndex == -1) return;\n        if (columnIndex !== index) moveItemInArray(this.options.columns, columnIndex, index);\n        const column = this.options.columns[index];\n        if (column && updated.sticky !== column.sticky) column.sticky = updated.sticky;\n        if (column && updated.hidden !== column.hidden) column.hidden = updated.hidden;\n      });\n      this.buildDisplayColumns();\n    }\n    if (this.options && typeof this.config?.pageSizeOptionsIndex === 'number') {\n      this.options.pageSizeOptionsIndex = this.config.pageSizeOptionsIndex;\n    }\n  }\n\n  private updateConfig(): void {\n    const pageSizeOptions = this.paginationPageSizeOptions;\n    const fallbackPageSize = this.paginationPageSize;\n    const pageSizeOptionsIndex = pageSizeOptions.indexOf(this.paginator?.pageSize ?? fallbackPageSize);\n    const columns = this.options.columns.map(c => ({\n      columnDef: c.columnDef,\n      sticky: c.sticky,\n      hidden: c.hidden,\n    }));\n    this.config = { columns, pageSizeOptionsIndex };\n    this.configUpdated.next(this.config);\n    if (this.options?.configService?.set) this.options.configService.set(this.config);\n  }\n}\n","<!-- @format -->\n\n@if (dataSource) {\n  <div #container id=\"container\">\n    <ng-container *ngTemplateOutlet=\"headTmpl\"></ng-container>\n\n    <div id=\"table-container\" intersectionObserver (intersection)=\"load($event.intersect)\">\n      <table id=\"table\" #table mat-table [fixedLayout]=\"false\" [dataSource]=\"dataSource\" multiTemplateDataRows>\n        @for (column of options.columns; track column) {\n          <ng-container [matColumnDef]=\"column.columnDef\" [sticky]=\"column.sticky\">\n            <th\n              mat-header-cell\n              *matHeaderCellDef\n              [class.searchable]=\"column.searchable\"\n              [style.min-width.px]=\"column.minWidth || options.columnMinWith\">\n              <ng-container *ngTemplateOutlet=\"headerTmpl; context: { column }\"></ng-container>\n            </th>\n            <td\n              mat-cell\n              *matCellDef=\"let row\"\n              [style.min-width.px]=\"column.minWidth || options.columnMinWith\"\n              [style.color]=\"row | cellColor: column : options\"\n              [style.opacity]=\"row | cellOpacity: column : options\"\n              [style.background-color]=\"row | backgroundColor: column : options\">\n              <ng-container *ngTemplateOutlet=\"cellTmpl; context: { column, row }\"></ng-container>\n            </td>\n          </ng-container>\n        }\n\n        <ng-container *ngIf=\"options.expandedDetailContentId\" matColumnDef=\"expandedDetail\">\n          <td mat-cell *matCellDef=\"let row\" [attr.colspan]=\"options.columns.length\">\n            @let content = contentRefs | findContent: options.expandedDetailContentId;\n            <div *ngIf=\"content\" class=\"element-detail\" [@detailExpand]=\"row == expandedRow ? 'expanded' : 'collapsed'\">\n              <ng-container *ngTemplateOutlet=\"content.templateRef; context: { row }\"> </ng-container>\n            </div>\n          </td>\n        </ng-container>\n\n        <ng-container matColumnDef=\"_incrementalLoad\">\n          <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"visibleColumnsColspan\">\n            <div class=\"incremental-load-row\">\n              @if (showIncrementalInViewTrigger) {\n                <div\n                  class=\"incremental-sentinel\"\n                  intersectionObserver\n                  (intersection)=\"onIncrementalIntersection($event.intersect)\">\n                  @if (loadingNextRecords) {\n                    <mat-spinner [diameter]=\"20\"></mat-spinner>\n                    <span>{{ incrementalLoadingLabel }}</span>\n                  }\n                </div>\n              }\n\n              @if (showIncrementalButtonTrigger) {\n                <button mat-button color=\"primary\" [disabled]=\"loadingNextRecords\" (click)=\"loadNextIncrementalPage()\">\n                  @if (loadingNextRecords) {\n                    <mat-spinner [diameter]=\"20\"></mat-spinner>\n                    <span>{{ incrementalLoadingLabel }}</span>\n                  } @else {\n                    <span>{{ incrementalLoadMoreLabel }}</span>\n                  }\n                </button>\n              }\n            </div>\n          </td>\n        </ng-container>\n\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n\n        <tr\n          mat-row\n          *matRowDef=\"let row; columns: displayedColumns\"\n          [class.has-click]=\"options.actions?.rowClick\"\n          [class.is-disabled]=\"row | includedIn: disabledRows\"\n          (click)=\"rowClick(row)\"></tr>\n\n        <ng-container *ngIf=\"options.expandedDetailContentId\">\n          <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"detail-row\"></tr>\n        </ng-container>\n\n        <tr\n          mat-footer-row\n          *matFooterRowDef=\"incrementalRowColumns\"\n          class=\"incremental-row\"\n          [class.is-hidden]=\"!showIncrementalRow\"></tr>\n\n        <tr class=\"mat-row\" *matNoDataRow>\n          <td [attr.colspan]=\"displayedColumns.length\">\n            <div id=\"no-data\">\n              <span id=\"no-data-label\"> {{ datatableIntl.noDateLabel }}</span>\n            </div>\n          </td>\n        </tr>\n      </table>\n    </div>\n\n    <mat-paginator\n      *ngIf=\"loadMode === 'pagination'\"\n      id=\"paginator\"\n      [length]=\"dataSource.recordsFiltered\"\n      [pageSizeOptions]=\"paginationPageSizeOptions\"\n      [pageSize]=\"paginationPageSize\"\n      [showFirstLastButtons]=\"true\">\n    </mat-paginator>\n  </div>\n}\n\n<div id=\"loading\" *ngIf=\"!dataSource || (dataSource.loading$ | async)\" @fade>\n  <ng-content select=\"[loader-spinner]\">\n    <mat-spinner loader-spinner></mat-spinner>\n  </ng-content>\n</div>\n\n<ng-template #headTmpl>\n  @let hasColumnDisplay =\n    options.actions?.columns?.hideAndShow || options.actions?.columns?.sticky || options.actions?.columns?.reorder;\n  @let hasHead =\n    !!options.title ||\n    !!options.facets?.length ||\n    !!options.actions?.user?.length ||\n    hasColumnDisplay ||\n    options.actions?.export ||\n    options.actions?.refresh ||\n    showRecordsCount;\n  <div *ngIf=\"hasHead\" id=\"head\" #head>\n    <div id=\"head-start\">\n      <span *ngIf=\"options.title\" id=\"title\" [innerHTML]=\"options.title\"></span>\n\n      @for (facetOptions of options.facets | filter: { position: 'start' }; track facetOptions) {\n        <ng-container *ngTemplateOutlet=\"facetsTmpl; context: { facetOptions }\"></ng-container>\n      }\n      @for (action of options.actions?.user | filter: { position: 'start' }; track action) {\n        <ng-container *ngTemplateOutlet=\"actionTmpl; context: { action }\"></ng-container>\n      }\n    </div>\n\n    <div id=\"head-center\">\n      @for (facetOptions of options.facets | filter: { position: 'center' }; track facetOptions) {\n        <ng-container *ngTemplateOutlet=\"facetsTmpl; context: { facetOptions }\"></ng-container>\n      }\n      @for (action of options.actions?.user | filter: { position: 'center' }; track action) {\n        <ng-container *ngTemplateOutlet=\"actionTmpl; context: { action }\"></ng-container>\n      }\n    </div>\n\n    <div id=\"head-end\">\n      @for (facetOptions of options.facets | filter: { position: 'end' }; track facetOptions) {\n        <ng-container *ngTemplateOutlet=\"facetsTmpl; context: { facetOptions }\"></ng-container>\n      }\n      @for (action of options.actions?.user | filter: { position: 'end' }; track action) {\n        <ng-container *ngTemplateOutlet=\"actionTmpl; context: { action }\"></ng-container>\n      }\n\n      @if (hasColumnDisplay) {\n        <div class=\"action\">\n          <button\n            mat-icon-button\n            color=\"primary\"\n            class=\"icon-only action\"\n            [matTooltip]=\"options.actions?.columns?.tooltip || 'Afficher / masquer des colonnes'\"\n            [matMenuTriggerFor]=\"columnsMenu\"\n            (menuOpened)=\"openUpdateColumnDisplay()\"\n            (menuClosed)=\"closeUpdateColumnDisplay()\">\n            <mat-icon>view_column</mat-icon>\n          </button>\n        </div>\n      }\n\n      @if (options.actions?.export) {\n        <div class=\"action\">\n          <button mat-icon-button color=\"primary\" [disabled]=\"exporting\" (click)=\"export()\">\n            <mat-icon>download</mat-icon>\n          </button>\n          <div class=\"action-loader\" *ngIf=\"exporting\" @fade>\n            <mat-spinner [diameter]=\"32\"></mat-spinner>\n          </div>\n        </div>\n      }\n\n      @if (options.actions?.refresh) {\n        <div class=\"action\">\n          <button mat-icon-button color=\"primary\" [disabled]=\"dataSource.loading$ | async\" (click)=\"loadPage()\">\n            <mat-icon>sync</mat-icon>\n          </button>\n          <div class=\"action-loader\" *ngIf=\"dataSource.loading$ | async\" @fade>\n            <mat-spinner [diameter]=\"32\"></mat-spinner>\n          </div>\n        </div>\n      }\n\n      @if (showRecordsCount) {\n        <div id=\"records-count\">\n          <span\n            [countUp]=\"displayedRecordsCount\"\n            [options]=\"datatableIntl.numberOptions\"\n            [reanimateOnClick]=\"false\"></span>\n          / {{ totalRecordsCount }}\n        </div>\n      }\n    </div>\n  </div>\n</ng-template>\n\n<mat-menu #columnsMenu=\"matMenu\" class=\"datatable-columns-menu\">\n  <div\n    id=\"column-options\"\n    cdkDropList\n    has-handle\n    [cdkDropListDisabled]=\"!options.actions?.columns?.reorder\"\n    (cdkDropListDropped)=\"reorderColumns($event)\">\n    @for (column of updateColumns; track column) {\n      @if (['_select', '_rownumber'].includes(column.header)) {\n        <div mat-list-item cdkDrag></div>\n      } @else {\n        <div class=\"column-options-item\" mat-list-item cdkDrag (click)=\"$event.stopPropagation()\">\n          <button\n            *ngIf=\"options.actions?.columns?.hideAndShow\"\n            mat-icon-button\n            size=\"small\"\n            color=\"primary\"\n            [class]=\"column.hidden ? 'toggle-off' : 'toggle-on'\"\n            (click)=\"column.hidden = !column.hidden\"\n            [style.margin-right.px]=\"8\">\n            <mat-icon>\n              @if (!column.hidden) {\n                visibility\n              } @else {\n                visibility_off\n              }\n            </mat-icon>\n          </button>\n          <button\n            *ngIf=\"options.actions?.columns?.sticky\"\n            mat-icon-button\n            size=\"small\"\n            color=\"primary\"\n            [class]=\"column.sticky ? 'toggle-on' : 'toggle-off'\"\n            (click)=\"column.sticky = !column.sticky\"\n            [style.margin-right.px]=\"8\">\n            <mat-icon>push_pin </mat-icon>\n          </button>\n          <span [style.margin-right.px]=\"8\" [innerHTML]=\"column.header\"></span>\n          <mat-icon\n            *ngIf=\"options.actions?.columns?.reorder\"\n            size=\"small\"\n            class=\"handle\"\n            cdkDragHandle\n            [style.margin]=\"'0 8px 0 auto'\">\n            open_with\n          </mat-icon>\n        </div>\n      }\n    }\n  </div>\n</mat-menu>\n\n<ng-template #headerTmpl let-column=\"column\">\n  <div class=\"header-container\" [matTooltip]=\"column.tooltip\">\n    <div class=\"header\" [formGroup]=\"searchFormGroup\">\n      @if (column.searchable) {\n        @switch (column.type) {\n          @case ('text') {\n            <lib-header-text-filter [column]=\"column\" [formControlName]=\"column.columnDef\"></lib-header-text-filter>\n          }\n          @case ('number') {\n            <lib-header-number-filter [column]=\"column\" [formControlName]=\"column.columnDef\"></lib-header-number-filter>\n          }\n          @case ('select') {\n            <lib-header-select-filter [column]=\"column\" [formControlName]=\"column.columnDef\"></lib-header-select-filter>\n          }\n          @case ('autocomplete') {\n            <lib-header-autocomplete-filter\n              [column]=\"column\"\n              [formControlName]=\"column.columnDef\"></lib-header-autocomplete-filter>\n          }\n          @case ('checkbox') {\n            <lib-header-checkbox-filter\n              [column]=\"column\"\n              [formControlName]=\"column.columnDef\"></lib-header-checkbox-filter>\n          }\n          @case ('date') {\n            <lib-header-date-filter [column]=\"column\" [formControlName]=\"column.columnDef\"></lib-header-date-filter>\n          }\n          @case ('duration') {\n            <lib-header-duration-filter\n              [column]=\"column\"\n              [formControlName]=\"column.columnDef\"></lib-header-duration-filter>\n          }\n          @default {\n            <span>{{ column.header }}</span>\n          }\n        }\n      } @else {\n        <span>{{ column.header }}</span>\n      }\n      <ng-container *ngTemplateOutlet=\"headerActionsTmpl; context: { column }\"></ng-container>\n    </div>\n  </div>\n</ng-template>\n\n<ng-template #headerActionsTmpl let-column=\"column\">\n  <div class=\"header-actions\">\n    <ng-container *ngIf=\"column.sortable\">\n      <button\n        class=\"sort-btn\"\n        mat-icon-button\n        size=\"small\"\n        (click)=\"sortColumn(column)\"\n        [matBadgeHidden]=\"!column.order\"\n        [matBadge]=\"column.order?.index + 1\">\n        @switch (column.order?.dir) {\n          @case ('asc') {\n            <mat-icon size=\"small\">arrow_upward</mat-icon>\n          }\n          @case ('desc') {\n            <mat-icon size=\"small\">arrow_downward</mat-icon>\n          }\n          @default {\n            <mat-icon size=\"small\">sort</mat-icon>\n          }\n        }\n      </button>\n    </ng-container>\n  </div>\n</ng-template>\n\n<ng-template #cellTmpl let-column=\"column\" let-row=\"row\">\n  @defer (on viewport) {\n    <div\n      class=\"cell\"\n      [@.disabled]=\"!!options.disableRowAnimation\"\n      @fade\n      [style.place-content]=\"column.align\"\n      [style.max-height.px]=\"options.rowMaxHeight\">\n      @let value = row | get: column.property;\n      @if (column.cellComponent) {\n        <ng-container *ngComponentOutlet=\"column.cellComponent; inputs: { column, row, value }\" />\n      } @else if (column.cellContentId) {\n        @let cell = contentRefs | findContent: column.cellContentId;\n        @if (cell) {\n          <ng-container *ngTemplateOutlet=\"cell.templateRef; context: { column, row, value }\" />\n        }\n      } @else {\n        @if (column.prefixContentId) {\n          @let cell = contentRefs | findContent: column.prefixContentId;\n          @if (cell) {\n            <ng-container *ngTemplateOutlet=\"cell.templateRef; context: { column, row, value }\" />\n          }\n        } @else if (column.prefixComponent) {\n          <ng-container *ngComponentOutlet=\"column.prefixComponent; inputs: { column, row, value }\" />\n        } @else if (column.prefixFunction) {\n          <span [outerHTML]=\"value | valueFunction: column.prefixFunction : row : column | safeHtml\"></span>\n        } @else if (column.prefix) {\n          <span [outerHTML]=\"column.prefix | safeHtml\"></span>\n        }\n\n        @switch (column.type) {\n          @case ('number') {\n            <lib-cell-number-value [column]=\"column\" [row]=\"row\"></lib-cell-number-value>\n          }\n          @case ('select') {\n            <lib-cell-select-value [column]=\"column\" [row]=\"row\"></lib-cell-select-value>\n          }\n          @case ('checkbox') {\n            <lib-cell-checkbox-value [column]=\"column\" [row]=\"row\"></lib-cell-checkbox-value>\n          }\n          @case ('date') {\n            <lib-cell-date-value [column]=\"column\" [row]=\"row\"></lib-cell-date-value>\n          }\n          @case ('duration') {\n            <lib-cell-duration-value [column]=\"column\" [row]=\"row\"></lib-cell-duration-value>\n          }\n          @default {\n            <span [outerHTML]=\"(value | transform: row : column) ?? '' | safeHtml\"></span>\n          }\n        }\n\n        @if (column.suffixContentId) {\n          @let cell = contentRefs | findContent: column.suffixContentId;\n          @if (cell) {\n            <ng-container *ngTemplateOutlet=\"cell.templateRef; context: { column, row, value }\" />\n          }\n        } @else if (column.suffixComponent) {\n          <ng-container *ngComponentOutlet=\"column.suffixComponent; inputs: { column, row, value }\" />\n        } @else if (column.suffixFunction) {\n          <span [outerHTML]=\"value | valueFunction: column.suffixFunction : row : column | safeHtml\"></span>\n        } @else if (column.suffix) {\n          <span [outerHTML]=\"column.suffix | safeHtml\"></span>\n        }\n      }\n    </div>\n  } @placeholder {\n    <div class=\"cell\"></div>\n  }\n</ng-template>\n\n<ng-template #actionTmpl let-action=\"action\">\n  @if (!action.isHidden) {\n    @switch (action.kind) {\n      @case ('icon') {\n        <div class=\"action user-action\" [matTooltip]=\"action.tooltip\">\n          <button\n            [style.--action-color]=\"action.color\"\n            mat-icon-button\n            (click)=\"action.onclick(this)\"\n            [disabled]=\"!!action.isDisabled\">\n            <mat-icon>{{ action.icon }}</mat-icon>\n          </button>\n        </div>\n      }\n      @case ('template') {\n        <div class=\"action user-action\">\n          @let content = contentRefs | findContent: action.contentId;\n          @if (content) {\n            <ng-container *ngTemplateOutlet=\"content.templateRef; context: { datatable: this, action }\" />\n          }\n        </div>\n      }\n    }\n  }\n</ng-template>\n\n<ng-template #facetsTmpl let-facetOptions=\"facetOptions\">\n  @let column = options.columns | find: { columnDef: facetOptions.columnDef };\n  @let data = (dataSource.facets ?? {})[facetOptions.id] | sortFacetEntries: facetOptions.options;\n  @if (data) {\n    @if (facetOptions.contentId) {\n      @let cell = contentRefs | findContent: facetOptions.contentId;\n      @if (cell) {\n        <ng-container *ngTemplateOutlet=\"cell.templateRef; context: { column, facetOptions, data }\" />\n      }\n    } @else {\n      @switch (facetOptions.display) {\n        @case ('chips') {\n          <ng-container *ngTemplateOutlet=\"facetsChipsTmpl; context: { column, data, facetOptions }\"></ng-container>\n        }\n        @default {\n          <ng-container\n            *ngTemplateOutlet=\"facetsProgressSpinnersTmpl; context: { column, data, facetOptions }\"></ng-container>\n        }\n      }\n    }\n  }\n</ng-template>\n\n<ng-template #facetsChipsTmpl let-column=\"column\" let-data=\"data\" let-facetOptions=\"facetOptions\">\n  @let size = facetOptions.size;\n  @let fontSize = facetOptions.fontSize ?? '1em';\n  <!-- @let total = (data | sum: 'value') || 1; -->\n  <mat-chip-set class=\"chips-facet\">\n    @for (d of data | orderBy: '_id'; track d) {\n      @let option = facetOptions?.option ? facetOptions.option(d) : (facetOptions.options | find: { value: d._id });\n      @let name = option?.name ?? d._id;\n      @let color = option?.color ?? 'var(--mat-sys-primary)';\n      @let labelColor = option?.labelColor;\n      <!-- @let percent = (d.value / total) * 100; -->\n      <mat-chip\n        class=\"chip-facet\"\n        [class.has-action]=\"column?.searchable !== false\"\n        (click)=\"facetClick(column, d, option)\"\n        [style.--facet-color]=\"color\"\n        [style.--facet-label-color]=\"labelColor ?? 'var(--mat-sys-on-primary)'\"\n        [style.--facet-value-color]=\"labelColor ?? color\"\n        [style.width.px]=\"size\">\n        <div class=\"chip-facet-content\" [style.font-size.px]=\"fontSize\">\n          <div class=\"chip-facet-key\">{{ name }}</div>\n          <div class=\"chip-facet-value\">{{ d.value | number: '0.0-2' }}</div>\n        </div>\n      </mat-chip>\n    }\n  </mat-chip-set>\n</ng-template>\n\n<ng-template #facetsProgressSpinnersTmpl let-column=\"column\" let-data=\"data\" let-facetOptions=\"facetOptions\">\n  @let size = facetOptions.size ?? 80;\n  @let fontSize = facetOptions.fontSize ?? '1em';\n  @let total = (data | sum: 'value') || 1;\n  <mat-card class=\"facet\">\n    @if (facetOptions.name) {\n      <mat-card-header>\n        <mat-card-title>{{ facetOptions.name }}</mat-card-title>\n      </mat-card-header>\n    }\n    <mat-card-content>\n      @for (d of data; track d) {\n        @let option = facetOptions?.option ? facetOptions.option(d) : (facetOptions.options | find: { value: d._id });\n        @let name = option?.name ?? d._id;\n        @let color = option?.color ?? 'var(--mat-sys-primary)';\n        @let percent = (d.value / total) * 100;\n        <div\n          class=\"facet-indicator\"\n          [class.has-action]=\"column?.searchable !== false\"\n          (click)=\"facetClick(column, d, option)\">\n          <lib-progress-spinner [diameter]=\"size\" [color]=\"color\" [fontSize]=\"fontSize\" [value]=\"percent\">\n            <mat-label>{{ name }}</mat-label>\n          </lib-progress-spinner>\n          <mat-label\n            class=\"facet-indicator-label\"\n            [style.font-size]=\"fontSize\"\n            [countUp]=\"d.value\"\n            [options]=\"datatableIntl.numberOptions\"\n            [reanimateOnClick]=\"false\">\n            {{ d.value | number: '0.0-2' }}\n          </mat-label>\n        </div>\n      }\n    </mat-card-content>\n  </mat-card>\n</ng-template>\n","/** @format */\n\nimport { NgModule } from '@angular/core';\nimport { NgxMatDatatableComponent } from './datatable.component';\nimport { NgxMatDatatableIntl } from './datatable.intl';\nimport { NgxMatDatatableContentDirective } from './directives/datatable-cell.directive';\n\n@NgModule({\n  imports: [NgxMatDatatableComponent, NgxMatDatatableContentDirective],\n  exports: [NgxMatDatatableComponent, NgxMatDatatableContentDirective],\n  providers: [NgxMatDatatableIntl],\n})\nexport class NgxMatDatatableModule {}\n","/** @format */\n\nexport type NgxMatDatasourceRequestSearchOperator =\n  | '>'\n  | '>='\n  | '≥'\n  | '<'\n  | '≤'\n  | '<>'\n  | '≤≥'\n  | '><'\n  | '≥≤'\n  | '$in'\n  | '$nin';\n\nexport type NgxMatDatasourceRequestSearch = {\n  value: any;\n  regex?: boolean;\n  operator?: NgxMatDatasourceRequestSearchOperator;\n};\n\nexport type NgxMatDatasourceRequestColumn = {\n  data: string;\n\n  projection?: string;\n\n  name?: string;\n\n  searchable?: boolean;\n\n  orderable?: boolean;\n\n  search?: NgxMatDatasourceRequestSearch;\n};\n\nexport type NgxMatDatasourceRequestOrderDir = 'asc' | 'desc';\n\nexport type NgxMatDatasourceRequestOrder = {\n  column: number;\n  dir: NgxMatDatasourceRequestOrderDir;\n};\n\nexport type NgxMatDatasourceRequestFacetOperator = 'count' | ['sum', string] | ['avg', string];\nexport type NgxMatDatasourceRequestFacet = {\n  id: string;\n  kind: 'indicator';\n  property: string;\n  operator: NgxMatDatasourceRequestFacetOperator;\n  info?: any;\n};\n\nexport type NgxMatDatasourceRequestOptions = {\n  draw: string;\n\n  columns: NgxMatDatasourceRequestColumn[];\n\n  order?: NgxMatDatasourceRequestOrder[];\n\n  start?: number;\n\n  length?: number;\n\n  search?: NgxMatDatasourceRequestSearch;\n\n  facets?: NgxMatDatasourceRequestFacet[];\n};\n\nexport type NgxMatDatasourceResultFacet = { _id: any; value: number; info?: any };\n\nexport type NgxMatDatasourceResult<T> = {\n  draw: string;\n\n  recordsTotal: number;\n\n  recordsFiltered: number;\n\n  data: T[];\n\n  facets?: { [id: string]: NgxMatDatasourceResultFacet[] };\n};\n\nexport type NgxMatDatasourceService<Record> = (\n  options: NgxMatDatasourceRequestOptions,\n) => Promise<NgxMatDatasourceResult<Record>>;\n","/** @format */\n\nimport { ComponentType } from '@angular/cdk/portal';\nimport { Observable } from 'rxjs';\nimport { PipeFunction } from '../pipes/suffix-function.pipe';\nimport { NgxMatDatasourceRequestOrderDir } from './datasource-service.type';\n\ntype Color<Record> = string | ((row: Record) => string | undefined);\n\ntype BaseColumn = {\n  type?: string;\n  columnDef: string;\n  header: string;\n  property: string;\n  projection?: any;\n\n  additionalProperties?: string[];\n\n  minWidth?: number;\n\n  sticky?: boolean;\n  hidden?: boolean;\n\n  disabled?: boolean;\n\n  searchable?: boolean;\n  searchProperty?: string;\n  searchValue?: any;\n\n  sortable?: boolean;\n  sortProperty?: string;\n  order?: {\n    index: number;\n    dir: NgxMatDatasourceRequestOrderDir;\n  };\n\n  tooltip?: string;\n  align?: 'start' | 'center' | 'end';\n\n  export?: (exportRow: any, value: any, row: any) => void;\n  searchUpdated?: (value: any) => void;\n};\n\nexport type DatatableComponentColumn = BaseColumn & {\n  cellComponent: ComponentType<any>;\n};\n\nexport type DatatableContentColumn = BaseColumn & {\n  cellContentId: string;\n};\n\nexport type DatatablePrefixColumn<Record> =\n  | { prefix?: string }\n  | { prefixContentId?: string }\n  | { prefixFunction?: PipeFunction<Record> }\n  | { prefixComponent?: ComponentType<any> };\n\nexport type DatatableSuffixColumn<Record> =\n  | { suffix?: string }\n  | { suffixContentId?: string }\n  | { suffixFunction?: PipeFunction<Record> }\n  | { suffixComponent?: ComponentType<any> };\n\nexport type DatatableValueColumn<Record> = BaseColumn & {\n  color?: Color<Record>;\n  backgroundColor?: Color<Record>;\n  transform?: (value: any, row: Record) => any;\n} & DatatablePrefixColumn<Record> &\n  DatatableSuffixColumn<Record>;\n\ntype Column<Record> = DatatableComponentColumn | DatatableContentColumn | DatatableValueColumn<Record>;\n\ntype SearchableColumn = {\n  searchable: true;\n  searchProperty?: string;\n};\n\nexport type DatatableSearchListOption = {\n  value: any;\n  name: string;\n  group?: string;\n  color?: string;\n  iconSrc?: 'mat-icon' | 'svg' | string;\n  icon?: string;\n  iconColor?: string;\n};\n\n// TEXT\nexport type DatatableTextColumn<Record> = Column<Record> & {\n  type: 'text';\n};\nexport type DatatableSearchTextColumn<Record> = DatatableTextColumn<Record> &\n  SearchableColumn & {\n    regex?: boolean;\n  };\n\n// NUMBER\nexport type DatatableNumberColumn<Record> = Column<Record> & {\n  type: 'number';\n  format?: string;\n  locale?: string;\n};\nexport type DatatableSearchNumberColumn<Record> = DatatableNumberColumn<Record> & SearchableColumn & {};\n\n// SELECT\nexport type DatatableSelectColumn<Record> = Column<Record> & {\n  type: 'select';\n  isArrayValue?: boolean;\n  iconOnly?: boolean;\n  options: Observable<DatatableSearchListOption[]> | DatatableSearchListOption[];\n};\nexport type DatatableSearchSelectColumn<Record> = DatatableSelectColumn<Record> &\n  SearchableColumn & {\n    multiple?: boolean;\n    placeholder?: string;\n    hasGroup?: boolean;\n  };\n\n// AUTOCOMPLETE\nexport type DatatableAutocompleteColumn<Record> = Column<Record> & {\n  type: 'autocomplete';\n};\nexport type DatatableSearchAutocompleteColumn<Record> = DatatableAutocompleteColumn<Record> &\n  SearchableColumn & {\n    placeholder?: string;\n    limit?: number;\n    loadOnFocus?: boolean;\n    hasGroup?: boolean;\n    options: (limit: number, skip: number, search: string, filter: any) => Promise<DatatableSearchListOption[]>;\n    searchValueOptions?: DatatableSearchListOption[];\n  };\n\n// CHECKBOX\nexport type DatatableCheckboxColumn<Record> = Column<Record> & {\n  type: 'checkbox';\n};\nexport type DatatableSearchCheckboxColumn<Record> = DatatableCheckboxColumn<Record> & SearchableColumn;\n\n// DATE\nexport type DatatableDateColumn<Record> = Column<Record> & {\n  type: 'date';\n  format?: string;\n  timezone?: string;\n  locale?: string;\n  withDuration?: boolean;\n  durationRefreshTime?: number;\n};\nexport type DatatableSearchDateColumn<Record> = DatatableDateColumn<Record> &\n  SearchableColumn & {\n    placeholder?: string;\n  };\n\n// DURATION\nexport type DatatableDurationColumn<Record> = Column<Record> & {\n  type: 'duration';\n  locale?: string;\n  largest?: number;\n};\nexport type DatatableSearchDurationColumn<Record> = DatatableDurationColumn<Record> &\n  SearchableColumn & {\n    placeholder?: string;\n  };\n\n// DEFAULT\nexport type DatatableDefaultColumn<Record> = Column<Record> & {\n  searchable?: false;\n};\n\nexport type DatatableColumn<Record> =\n  | DatatableDefaultColumn<Record>\n  | DatatableTextColumn<Record>\n  | DatatableSearchTextColumn<Record>\n  | DatatableNumberColumn<Record>\n  | DatatableSearchNumberColumn<Record>\n  | DatatableSelectColumn<Record>\n  | DatatableSearchSelectColumn<Record>\n  | DatatableAutocompleteColumn<Record>\n  | DatatableSearchAutocompleteColumn<Record>\n  | DatatableCheckboxColumn<Record>\n  | DatatableSearchCheckboxColumn<Record>\n  | DatatableDateColumn<Record>\n  | DatatableSearchDateColumn<Record>\n  | DatatableDurationColumn<Record>\n  | DatatableSearchDurationColumn<Record>;\n","/** @format */\n\nimport { Action } from './action.type';\nimport { DatatableConfig } from './config.type';\nimport { NgxMatDatasourceService } from './datasource-service.type';\nimport { DatatableColumn, DatatableValueColumn } from './datatable-column.type';\nimport { FacetOptions } from './datatable-facet.type';\n\ntype Opacity<Record> = number | ((column: DatatableValueColumn<Record>, row: Record) => number | undefined);\ntype Color<Record> = string | ((column: DatatableValueColumn<Record>, row: Record) => string | undefined);\n\nexport type NgxMatDatatableLoadMode = 'pagination' | 'incremental';\n\nexport type NgxMatDatatableIncrementalTrigger = 'inView' | 'button';\n\nexport interface NgxMatDatatableIncrementalOptions {\n  trigger?: NgxMatDatatableIncrementalTrigger;\n  pageSize?: number;\n}\n\nexport type NgxMatDatatableOptions<Record> = {\n  title?: string;\n\n  service: NgxMatDatasourceService<Record>;\n\n  configService?: {\n    get?: () => Promise<DatatableConfig | undefined>;\n    set?: (config: DatatableConfig) => Promise<void>;\n  };\n\n  columns: DatatableColumn<Record>[];\n  columnMinWith?: number;\n  rowMaxHeight?: number;\n\n  pageSizeOptions?: number[];\n  pageSizeOptionsIndex?: number;\n  pageSize?: number;\n\n  loadMode?: NgxMatDatatableLoadMode;\n  incremental?: NgxMatDatatableIncrementalOptions;\n  showRecordsCount?: boolean;\n\n  additionalProperties?: string[];\n\n  actions?: {\n    columns?: {\n      tooltip?: string;\n      hideAndShow?: boolean;\n      sticky?: boolean;\n      reorder?: boolean;\n    };\n    refresh?: boolean;\n    rowClick?: boolean | ((row: Record) => void);\n    export?: string | boolean;\n    user?: Action<Record>[];\n  };\n\n  facets?: FacetOptions[];\n\n  rowOpacity?: Opacity<Record>;\n  rowColor?: Color<Record>;\n  rowBackgroundColor?: Color<Record>;\n  rowDisabled?: string | ((row: Record) => boolean);\n\n  disableRowAnimation?: boolean;\n\n  expandedDetailContentId?: string;\n};\n\nexport interface NgxMatDatatableDefaultOptions<Record = any> {\n  loadMode?: NgxMatDatatableLoadMode;\n  incremental?: NgxMatDatatableIncrementalOptions;\n  showRecordsCount?: boolean;\n\n  pageSizeOptions?: number[];\n  pageSizeOptionsIndex?: number;\n  pageSize?: number;\n\n  columnMinWith?: number;\n  rowMaxHeight?: number;\n  disableRowAnimation?: boolean;\n\n  actions?: {\n    columns?: {\n      tooltip?: string;\n      hideAndShow?: boolean;\n      sticky?: boolean;\n      reorder?: boolean;\n    };\n    refresh?: boolean;\n    rowClick?: boolean | ((row: Record) => void);\n    export?: string | boolean;\n    user?: Action<Record>[];\n  };\n}\n","/** @format */\n\nimport { NgxMatDatatableComponent } from '../datatable.component';\n\ntype BaseAction = {\n  position: 'start' | 'center' | 'end';\n  isHidden?: boolean;\n  isDisabled?: boolean;\n};\n\nexport type IconAction<Record> = BaseAction & {\n  kind: 'icon';\n  icon: string;\n  onclick: (datagrid: NgxMatDatatableComponent<Record>) => void;\n  tooltip?: string;\n  color?: string;\n};\n\nexport type TemplateAction = BaseAction & {\n  kind: 'template';\n  contentId: string;\n};\n\nexport type Action<Record> = IconAction<Record> | TemplateAction;\n","/** @format */\n\nimport { NgxMatDatasourceResultFacet } from './datasource-service.type';\n\nexport type FacetOptionsOperator = 'count' | ['sum', string] | ['avg', string];\n\ntype BaseFacetOptions = {\n  id: string;\n  name?: string;\n  position: 'start' | 'center' | 'end';\n};\n\nexport type FacetOptionsOptions = {\n  value: any;\n  name?: string;\n  color?: string;\n  labelColor?: string;\n};\n\ntype IndicatorFacetOptions = BaseFacetOptions & {\n  kind: 'indicator';\n  property: string;\n  operator: FacetOptionsOperator;\n  info?: any;\n  columnDef?: string;\n};\n\nexport type ContentIdFacetOptions = IndicatorFacetOptions & {\n  contentId?: string;\n};\nexport type ProgressSpinnerFacetOptions = IndicatorFacetOptions & {\n  display: 'progress-spinner';\n  options?: FacetOptionsOptions[];\n  size?: number;\n  fontSize?: string;\n  option?: (res: NgxMatDatasourceResultFacet) => FacetOptionsOptions | undefined;\n};\n\nexport type ChipFacetOptions = IndicatorFacetOptions & {\n  display: 'chips';\n  options?: FacetOptionsOptions[];\n  size?: number;\n  fontSize?: string;\n  option?: (res: NgxMatDatasourceResultFacet) => FacetOptionsOptions | undefined;\n};\n\nexport type FacetOptions = ContentIdFacetOptions | ProgressSpinnerFacetOptions | ChipFacetOptions;\n","/**\n * Public API Surface of mongoose-datatable\n *\n * @format\n */\n\nexport * from './lib/datatable.module';\n\nexport * from './lib/datatable.component';\nexport * from './lib/datatable-default-options';\nexport * from './lib/directives/datatable-cell.directive';\n\nexport * from './lib/types/datasource-service.type';\nexport * from './lib/types/datatable-column.type';\nexport * from './lib/types/datatable-options.type';\nexport * from './lib/types/action.type';\nexport * from './lib/types/datatable-facet.type';\n\nexport * from './lib/datatable.intl';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i6","i7","i8","i2","i3","i1","i4","i5","i10","i11","i16"],"mappings":"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"}