{"version":3,"file":"eherve-angular-material-datatable-eherve-angular-material-datatable-DEVM6I6-.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/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 } 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) {\n    return this.sanitizer.bypassSecurityTrustHtml(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 = () => {};\n\n  onTouched = () => {};\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 }) => {\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);\n    }\n  };\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 [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.control.setValue(undefined);\n        } else if (value === null && !this.options.find(o => o.value === null)) {\n          if (this.control.value !== undefined) this.control.setValue(undefined);\n        } else if (this.control.value?.value !== value) this.control.setValue({ 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) {\n    if (!intersect) return;\n    this.nextPage$.next();\n  }\n\n  focus() {\n    if (this.column.loadOnFocus && !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() {\n    const search = this.input.nativeElement.value;\n    this.filter$.next(search);\n  }\n\n  displayWith = (value: any) => {\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() {\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","<!-- @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    <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\"\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 = () => {};\n\n  onTouched = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue = (value: any) => {\n    if (value?.value !== this.selectControl.value) this.selectControl.setValue(value?.value);\n  };\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 [column:${this.column.columnDef}]`);\n    this.control = ngControl.control as UntypedFormControl;\n    let previousValue = this.control.value;\n    this.subsink.add(\n      this.selectControl.valueChanges\n        .pipe(\n          filter(value => {\n            if (value === true && previousValue === false) {\n              this.selectControl.setValue(undefined);\n              return false;\n            }\n            return true;\n          }),\n          tap(value => (previousValue = value))\n        )\n        .subscribe((value: any) => {\n          if (value === undefined) this.control.setValue(undefined);\n          else this.control.setValue({ 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\">\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 = () => {};\n\n  onTouched = () => {};\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) => {\n    // if (value?.operator && this.operatorControl.value !== value.operator) this.operatorControl.setValue(value.operator);\n    // if (['<>', '≤≥'].includes(this.operatorControl.value!)) {\n    //   if (value?.value?.from !== this.rangeGroup.value.from && value?.value?.to !== this.rangeGroup.value.to) {\n    //     this.rangeGroup.setValue({ from: value.value.from, to: value.value.to });\n    //   }\n    // } else if (value?.value !== this.selectControl.value) this.selectControl.setValue(value?.value);\n  };\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    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 (!value) this.control.setValue(undefined);\n        else this.control.setValue(this.buildValue(this.operatorControl.value!, value));\n      })\n    );\n    this.subsink.add(\n      this.rangeGroup.valueChanges.pipe(debounceTime(500)).subscribe(value => {\n        if (this.rangeGroup.invalid) return;\n        if (!value) this.control.setValue(undefined);\n        else this.control.setValue(this.buildValue(this.operatorControl.value!, value));\n      })\n    );\n    this.subsink.add(\n      this.operatorControl.valueChanges.subscribe((value: any) => {\n        if (['<>', '≤≥'].includes(value!)) {\n          if (!this.rangeGroup.value || this.rangeGroup.invalid) return;\n          this.control.setValue(this.buildValue(value, this.rangeGroup.value));\n        } else {\n          if (!this.selectControl.value) return;\n          this.control.setValue(this.buildValue(value, this.selectControl.value));\n        }\n      })\n    );\n    this.changeDetectorRef.detectChanges();\n  }\n\n  ngOnDestroy(): void {\n    this.subsink.unsubscribe();\n  }\n\n  private buildValue(operator: OPERATOR, value: 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","<!-- @format -->\n\n@if (selectControl) {\n  @if (['<>', '≤≥'].includes(operatorControl.value!)) {\n    <mat-form-field class=\"ngx-datatable-date-filter\" appearance=\"fill\" [class.has-value]=\"selectControl.value\">\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!\" />\n        <input matEndDate formControlName=\"to\" [placeholder]=\"column.placeholder!\" />\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 *ngIf=\"selectControl.value\" mat-icon-button matSuffix size=\"small\" (click)=\"rangeGroup.reset()\">\n        <mat-icon>close</mat-icon>\n      </button>\n    </mat-form-field>\n  } @else {\n    <mat-form-field class=\"ngx-datatable-date-filter\" appearance=\"fill\" [class.has-value]=\"selectControl.value\">\n      <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n\n      <lib-operator-select matPrefix [formControl]=\"operatorControl\"></lib-operator-select>\n\n      <input matInput [matDatepicker]=\"datePicker\" [formControl]=\"selectControl\" [placeholder]=\"column.placeholder!\" />\n      <mat-datepicker-toggle matIconSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\n      <mat-datepicker #datePicker></mat-datepicker>\n\n      <button\n        *ngIf=\"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","/** @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 = () => {};\n\n  onTouched = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue = (value: any) => {\n    if (value?.unitOfTime) this.timeUnitControl.setValue(value.unitOfTime, { 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);\n    } else this.selectControl.setValue(null);\n  };\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\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 (!value) this.control.setValue(undefined);\n        else\n          this.control.setValue({\n            unitOfTimeValue: value,\n            value: TimeUnitSelectComponent.toMilliseconds(value, this.timeUnitControl.value!),\n            regex: false,\n            operator: this.operatorControl.value,\n            unitOfTime: this.timeUnitControl.value,\n          });\n      })\n    );\n    this.subsink.add(\n      this.operatorControl.valueChanges.subscribe((value: any) => {\n        if (!this.selectControl.value) return;\n        this.control.setValue({\n          unitOfTimeValue: this.selectControl.value,\n          value: TimeUnitSelectComponent.toMilliseconds(this.selectControl.value, 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.selectControl.value) return;\n        this.control.setValue({\n          unitOfTimeValue: TimeUnitSelectComponent.convert(\n            this.selectControl.value,\n            this.control.value.unitOfTime,\n            value\n          ),\n          value: TimeUnitSelectComponent.toMilliseconds(this.selectControl.value, this.control.value.unitOfTime),\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","<!-- @format -->\n\n@if (selectControl) {\n  <mat-form-field class=\"ngx-datatable-duration-filter\" appearance=\"fill\" [class.has-value]=\"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 type=\"number\" [formControl]=\"selectControl\" [placeholder]=\"column.placeholder!\" />\n\n    <lib-time-unit-select [locale]=\"column.locale\" matSuffix [formControl]=\"timeUnitControl\"></lib-time-unit-select>\n\n    <button\n      *ngIf=\"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 { 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 = () => {};\n\n  onTouched = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue = (value: any) => {\n    if (value?.value !== this.selectControl.value) this.selectControl.setValue(value?.value);\n  };\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 [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 (!value) this.control.setValue(undefined);\n        else this.control.setValue({ value, regex: false, operator: this.operatorControl.value });\n      })\n    );\n    this.subsink.add(\n      this.operatorControl.valueChanges.subscribe((value: any) => {\n        if (this.control.value === null || this.control.value === undefined) return;\n        this.control.setValue({ 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","<!-- @format -->\n\n@if (selectControl) {\n  <mat-form-field class=\"ngx-datatable-number-filter\" appearance=\"fill\" [class.has-value]=\"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\" />\n\n    <button\n      *ngIf=\"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 = () => {};\n\n  onTouched = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue = (controlValue: any) => {\n    if (controlValue?.value !== this.selectControl.value) {\n      const value = controlValue?.value;\n      if (value && !Array.isArray(value) && this.column.multiple) {\n        this.selectControl.setValue([value]);\n      } else this.selectControl.setValue(value);\n    }\n    this.changeDetectorRef.detectChanges();\n  };\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 [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) this.control.setValue(undefined);\n        else this.control.setValue({ 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[]) {\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","<!-- @format -->\n\n@if (selectControl) {\n  <mat-form-field appearance=\"fill\">\n    <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n    <mat-select [formControl]=\"selectControl\" [placeholder]=\"column.placeholder!\" [multiple]=\"column.multiple\">\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\"\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 = () => {};\n\n  onTouched = () => {};\n\n  private injector = inject(Injector);\n  private changeDetectorRef = inject(ChangeDetectorRef);\n\n  private subsink = new Subscription();\n\n  writeValue = (value: any) => {\n    if (this.column.regex) {\n      if (value?.value !== this.selectControl.value) this.selectControl.setValue(value?.value);\n    } else {\n      const val = this.escapeRegExp(this.selectControl.value);\n      if (val !== (value?.value ?? '')) this.selectControl.setValue(val);\n    }\n  };\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 [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) this.control.setValue(undefined);\n        else {\n          if (this.column.regex) this.control.setValue({ value, regex: true });\n          else this.control.setValue({ 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","<!-- @format -->\n\n@if (selectControl) {\n  <mat-form-field appearance=\"fill\" [class.has-value]=\"selectControl.value\">\n    <mat-label [innerHTML]=\"column.header | safeHtml\"></mat-label>\n    <input matInput [formControl]=\"selectControl\" />\n    <button\n      *ngIf=\"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, Inject, Injectable, LOCALE_ID, OnInit } 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};\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};\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  },\n};\n\ntype NumberOptions = {\n  separator: string;\n  decimal: string;\n};\n\nconst DEFAULT_NUMBER_OPTIONS = {\n  separator: ',',\n  decimal: '.',\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\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) {\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  }\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 {\n  NgxMatDatasourceRequestOptions,\n  NgxMatDatasourceResultFacet,\n  NgxMatDatasourceService,\n} from './types/datasource-service.type';\n\nexport class DatagridDataSource<Record> extends DataSource<Record> {\n  loading$ = new BehaviorSubject<boolean>(true);\n  recordsFiltered = 0;\n  recordsTotal?: number;\n  facets?: { [id: string]: NgxMatDatasourceResultFacet[] };\n  rowSize: number = 0; // row size in kb\n\n  get data(): Record[] {\n    return this.dataStream.value;\n  }\n\n  private options?: NgxMatDatasourceRequestOptions;\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() {}\n\n  async loadData(options: NgxMatDatasourceRequestOptions): Promise<void> {\n    this.options = options;\n    this.loading$.next(true);\n    try {\n      const result = await this.service(options);\n      if (options.draw !== result.draw) return;\n      this.recordsTotal = result.recordsTotal;\n      this.recordsFiltered = result.recordsFiltered;\n      this.facets = result.facets;\n      this.dataStream.next(result.data);\n      this.calculateRowSize(result.data);\n    } finally {\n      this.loading$.next(false);\n    }\n  }\n\n  refresh(): void {\n    if (this.options) this.loadData(this.options);\n  }\n\n  redraw(match?: (record: Record) => boolean) {\n    const data: Record[] = [];\n    this.dataStream.value.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.dataStream.next(data);\n  }\n\n  private calculateRowSize(data: Record[]) {\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 { 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 * as XLSX from 'xlsx';\nimport { FacetOptionsOptions } from '../public-api';\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 { 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  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 { NgxMatDatatableOptions } 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  disabledRows: Record[] = [];\n\n  dataSource!: DatagridDataSource<Record>;\n\n  expandedRow: any | null = null;\n\n  loaded = false;\n\n  searchFormGroup!: FormGroup;\n\n  datatableIntl = inject(NgxMatDatatableIntl);\n\n  private subscriptions = new rxjs.Subscription();\n  private changeDetectorRef = inject(ChangeDetectorRef);\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> & { _elementRef: { nativeElement: any } };\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    });\n  });\n  @HostBinding('style.--datatable-container-overflow-y') tableContainerOverflowY = 'inherit';\n  @HostBinding('style.--datatable-container-overflow-x') tableContainerOverflowX = 'inherit';\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    await this.applyConfig();\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) {\n    if (!intersect || this.loaded) return;\n    this.loaded = true;\n    if (this.matTable) this.observer.observe(this.matTable?._elementRef.nativeElement);\n    this.subscriptions.add(\n      this.paginator?.page.subscribe(() => {\n        this.updateConfig();\n        this.loadPage();\n      }),\n    );\n    this.loadPage();\n  }\n\n  sortColumn(column: DatatableColumn<Record>) {\n    if (column.sortable === false) return;\n    if (!column.order) column.order = { index: this.options.columns.filter(c => !!c.order).length, dir: 'asc' };\n    else if (column.order.dir === 'asc') column.order.dir = 'desc';\n    else {\n      delete column.order;\n      this.consolidateOrderIndex();\n    }\n    this.paginator!.pageIndex = 0;\n    this.loadPage();\n  }\n\n  redraw(match?: (record: Record) => boolean) {\n    this.dataSource.redraw(match);\n    this.changeDetectorRef.detectChanges();\n  }\n\n  refreshColumns() {\n    this.buildDisplayColumns();\n  }\n\n  exporting = false;\n  async export() {\n    this.exporting = true;\n    try {\n      const columns = this.buildRequestColumns();\n      const order = this.buildOrder(columns);\n      const max = Math.min(Math.floor(5 / this.dataSource.rowSize), this.dataSource.recordsFiltered);\n      const chunks = [];\n      for (let i = 0; i < Math.ceil(this.dataSource.recordsFiltered / max); ++i) {\n        chunks.push({ start: i, length: max });\n      }\n\n      const data = (\n        await Promise.all(\n          chunks.map(c =>\n            this.options.service({ draw: Date.now().toString(), columns, order, start: c.start, length: c.length }),\n          ),\n        )\n      ).reduce((pv, cv) => (pv.push(...cv.data), pv), [] as any[]);\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                this.buildExportSelectColumn(c as any, row, value);\n                break;\n              case 'duration':\n                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> & { __options?: DatatableSearchListOption[] },\n    row: any,\n    value: any,\n  ) {\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(column: DatatableDurationColumn<Record>, row: any, value: any) {\n    row[`${column.header} ms`] = value;\n    row[column.header] = duration(value, column);\n  }\n\n  async loadPage() {\n    if (!this.dataSource) return;\n    const columns = this.buildRequestColumns();\n    const order = this.buildOrder(columns);\n    await this.dataSource.loadData({\n      draw: Date.now().toString(),\n      columns,\n      start: this.paginator!.pageIndex,\n      length: this.paginator!.pageSize,\n      order,\n      facets: this.options.facets,\n    });\n    this._data = this.dataSource.data;\n    this.buildDisabledRows();\n  }\n\n  private buildDisabledRows() {\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() {\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[]>) {\n    moveItemInArray(this.updateColumns, event.previousIndex, event.currentIndex);\n  }\n\n  closeUpdateColumnDisplay() {\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) this.loadPage();\n  }\n\n  rowClick(row: Record) {\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  ) {\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(additionalColumns: NgxMatDatasourceRequestColumn[], data: string, search?: any) {\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() {\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  }\n\n  private buildSearchFormGroup() {\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.paginator!.pageIndex = 0;\n        this.loadPage();\n      }),\n    );\n  }\n\n  private consolidateOrderIndex() {\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() {\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() {\n    const pageSizeOptions = this.options.pageSizeOptions ?? [5, 10, 20, 50, 100];\n    const pageSizeOptionsIndex = pageSizeOptions.indexOf(this.paginator?.pageSize ?? 0);\n    const columns = this.options.columns.map(c => ({ columnDef: c.columnDef, sticky: c.sticky, hidden: c.hidden }));\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        <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 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      id=\"paginator\"\n      [length]=\"dataSource.recordsFiltered\"\n      [pageSizeOptions]=\"options.pageSizeOptions || [5, 10, 20, 50, 100]\"\n      [pageSize]=\"(options.pageSizeOptions ?? [5, 10, 20, 50, 100])[options.pageSizeOptionsIndex ?? 0]\"\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  <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    </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  @switch (action.kind) {\n    @case ('icon') {\n      <div class=\"action user-action\" [matTooltip]=\"action.tooltip\">\n        <button [style.--action-color]=\"action.color\" mat-icon-button (click)=\"action.onclick(this)\">\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 }\" />\n        }\n      </div>\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 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\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","/** @format */\n\nimport { NgxMatDatatableComponent } from '../datatable.component';\n\ntype BaseAction = {\n  position: 'start' | 'center' | 'end';\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/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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"}