{"version":3,"file":"trixwell-ngx-data-gridx.mjs","sources":["../../../projects/ngx-data-gridx/src/lib/core/entity/grid-property.ts","../../../projects/ngx-data-gridx/src/lib/core/components/audio-player/audio-player.component.ts","../../../projects/ngx-data-gridx/src/lib/core/components/audio-player/audio-player.component.html","../../../projects/ngx-data-gridx/src/lib/directives/square-paginator.directive.ts","../../../projects/ngx-data-gridx/src/lib/ngx-data-gridx/ngx-data-gridx.component.ts","../../../projects/ngx-data-gridx/src/lib/ngx-data-gridx/ngx-data-gridx.component.html","../../../projects/ngx-data-gridx/src/lib/core/entity/sub-grid-settings.ts","../../../projects/ngx-data-gridx/src/public-api.ts","../../../projects/ngx-data-gridx/src/trixwell-ngx-data-gridx.ts"],"sourcesContent":["import {SubGridSettings} from './sub-grid-settings';\nimport {Observable, Subscription} from 'rxjs';\n\nexport class GridProperty{\n  name: string;\n  displayName: string;\n  type: GridPropertyType;\n  search?: boolean;\n  width?: string;\n  filter?: {\n    label: string;\n    type: \"multi-search\" | \"text\" | \"checkbox\" | \"select\" | \"multi-select\" | \"date\" | \"input\";\n    dateOptions?:{\n      range: boolean;\n    }\n    multiSearchOptions?:{\n      url:string;\n      id: string;\n      label:string;\n    }\n    callback?: (columnName: string, filterType: string, value: (string | number | string[])) => void\n  }[] | undefined;\n  filterValues?: { label: string; value: string; selected?:false }[][];\n  sort?: boolean;\n  classes?: string;\n  style_formatter?: (value: string | number | undefined | object, index: number) => string;\n  actions?: { icon: string; tooltip: string; customHtml?: (row: object | null | undefined) => string; action?: (row: object | null | undefined) => void | Subscription | Promise<void> | Observable<void> }[];\n  ident?: boolean = false;\n  subGridPropertyList: GridProperty[] | null = null;\n  subGridSettings: SubGridSettings | null  = null;\n  callback?: (row: object | null | undefined) => string | undefined;\n  columnSortIndex?: string;\n  constructor(params: GridPropertiesDTO) {\n    this.name = params.name;\n    this.displayName = params.displayName;\n    this.type = params.type;\n    this.search = params.search || false;\n    this.width = params.width || \"auto\";\n    this.filter = params.filter;\n    this.sort = params.sort || false;\n    this.classes = params.classes || \"\";\n    this.style_formatter = params.style_formatter;\n    this.filterValues = params.filterValues;\n    this.actions = params.actions || [];\n    this.ident = params.ident || false;\n    this.subGridPropertyList = params.subGridPropertyList || null;\n    this.subGridSettings = params.subGridSettings || null;\n    this.callback = params.callback || undefined;\n    this.columnSortIndex = params.columnSortIndex || '';\n\n    this.setDateOptionsByDefault(params);\n  }\n\n  setDateOptionsByDefault(params: GridPropertiesDTO){\n    this.filter = (params.filter || []).map(f => {\n      const rangeValue = f.dateOptions?.range ?? true;\n\n      return {\n        label: f.label,\n        type: f.type,\n        callback: f.callback,\n        multiSearchOptions: f.multiSearchOptions,\n        dateOptions: { range: rangeValue }\n      };\n    });\n  }\n}\n//grid property ident(settings)\nexport enum GridPropertyType {\n  Text = \"text\",\n  Number = \"number\",\n  Select = \"select\",\n  Checkbox = \"checkbox\",\n  Hidden = \"hidden\",\n  Select2 = \"select2\",\n  Actions = \"actions\",\n  Date    = 'date',\n  Audio   = 'audio'\n}\n\nexport interface GridPropertiesDTO{\n  name: string;\n  displayName: string;\n  type: GridPropertyType;\n  search?: boolean;\n  width?: string;\n  filter?: {\n    label: string;\n    type: \"multi-search\" | \"text\" | \"checkbox\" | \"select\" | \"multi-select\" | \"date\" | \"input\";\n    callback?: (columnName: string, filterType: string, value: string | number | string[]) => void;\n    dateOptions?:{\n      range: boolean;\n    },\n    multiSearchOptions?:{\n      url:string;\n      id: string;\n      label:string;\n    }\n  }[];\n  filterValues?: { label: string; value: string, selected?:false }[][];\n  sort?: boolean;\n  classes?: string;\n  callback?: (row: object | null | undefined) => string | undefined;\n  style_formatter?: (value: string | number | undefined | object, index:number) => string;\n  select?:false,\n  actions?: { icon: string; tooltip: string; customHtml?: (row: object | null | undefined) => string; action?: (row: object | null | undefined) => void | Subscription | Promise<void> | Observable<void> }[];\n  subGridPropertyList?: GridProperty[] | null;\n  ident?: boolean;\n  subGridSettings?: SubGridSettings | null;\n  columnSortIndex?: string;\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatButtonModule} from '@angular/material/button';\n\n@Component({\n  selector: 'app-audio-player',\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatIconModule,\n    MatMenuModule,\n    MatButtonModule\n  ],\n  templateUrl: './audio-player.component.html',\n  styleUrl: './audio-player.component.scss'\n})\nexport class AudioPlayerComponent {\n  @Input() src: string | null = null;\n\n  @ViewChild('audio') audioRef!: ElementRef<HTMLAudioElement>;\n\n  isPlaying = false;\n  isMuted = false;\n  volume = 1;\n  progress = 0;\n\n  private static currentPlayer: AudioPlayerComponent | null = null;\n\n  togglePlay(): void {\n    const audio = this.audioRef.nativeElement;\n    if (audio.paused) {\n      if (AudioPlayerComponent.currentPlayer && AudioPlayerComponent.currentPlayer !== this) {\n        AudioPlayerComponent.currentPlayer.pauseAudio();\n      }\n\n      audio.play();\n      this.isPlaying = true;\n      AudioPlayerComponent.currentPlayer = this;\n    } else {\n      audio.pause();\n      this.isPlaying = false;\n      if (AudioPlayerComponent.currentPlayer === this) {\n        AudioPlayerComponent.currentPlayer = null;\n      }\n    }\n  }\n\n  pauseAudio(): void {\n    const audio = this.audioRef.nativeElement;\n    if (!audio.paused) {\n      audio.pause();\n      this.isPlaying = false;\n    }\n  }\n\n  updateProgress(): void {\n    const audio = this.audioRef.nativeElement;\n    if (audio.duration) {\n      this.progress = (audio.currentTime / audio.duration) * 100;\n    }\n  }\n\n  seekAudio(event: MouseEvent): void {\n    const progressBar = event.currentTarget as HTMLElement;\n    const rect = progressBar.getBoundingClientRect();\n    const clickX = event.clientX - rect.left;\n    const width = rect.width;\n    const clickPercent = clickX / width;\n    const audio = this.audioRef.nativeElement;\n    if (audio.duration) {\n      audio.currentTime = clickPercent * audio.duration;\n    }\n  }\n\n  changeVolume(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    const vol = parseFloat(input.value);\n    this.volume = vol;\n    const audio = this.audioRef.nativeElement;\n    audio.volume = vol;\n    this.isMuted = vol === 0;\n  }\n\n  toggleMute(): void {\n    const audio = this.audioRef.nativeElement;\n    audio.muted = !audio.muted;\n    this.isMuted = audio.muted;\n  }\n\n  onAudioEnded(): void {\n    this.isPlaying = false;\n    this.progress = 0;\n    if (AudioPlayerComponent.currentPlayer === this) {\n      AudioPlayerComponent.currentPlayer = null;\n    }\n  }\n}\n","<div class=\"custom-audio\">\n  <audio #audio\n         [src]=\"src\"\n         style=\"display: none;\"\n         (timeupdate)=\"updateProgress()\"\n         (ended)=\"onAudioEnded()\">\n  </audio>\n\n  <button class=\"round-button\" (click)=\"togglePlay()\">\n    <svg *ngIf=\"!isPlaying\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n      <path d=\"M7.75 14.0385L14.0385 10L7.75 5.9615V14.0385ZM10.0017 19.5C8.68775 19.5 7.45267 19.2507 6.2965 18.752C5.14033 18.2533 4.13467 17.5766 3.2795 16.7218C2.42433 15.8669 1.74725 14.8617 1.24825 13.706C0.749417 12.5503 0.5 11.3156 0.5 10.0017C0.5 8.68775 0.749333 7.45267 1.248 6.2965C1.74667 5.14033 2.42342 4.13467 3.27825 3.2795C4.13308 2.42433 5.13833 1.74725 6.294 1.24825C7.44967 0.749417 8.68442 0.5 9.99825 0.5C11.3123 0.5 12.5473 0.749333 13.7035 1.248C14.8597 1.74667 15.8653 2.42342 16.7205 3.27825C17.5757 4.13308 18.2528 5.13833 18.7518 6.294C19.2506 7.44967 19.5 8.68442 19.5 9.99825C19.5 11.3123 19.2507 12.5473 18.752 13.7035C18.2533 14.8597 17.5766 15.8653 16.7218 16.7205C15.8669 17.5757 14.8617 18.2528 13.706 18.7518C12.5503 19.2506 11.3156 19.5 10.0017 19.5ZM10 18C12.2333 18 14.125 17.225 15.675 15.675C17.225 14.125 18 12.2333 18 10C18 7.76667 17.225 5.875 15.675 4.325C14.125 2.775 12.2333 2 10 2C7.76667 2 5.875 2.775 4.325 4.325C2.775 5.875 2 7.76667 2 10C2 12.2333 2.775 14.125 4.325 15.675C5.875 17.225 7.76667 18 10 18Z\" fill=\"#343A40\"/>\n    </svg>\n    <svg *ngIf=\"isPlaying\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M6.25 13.75H13.75V6.25H6.25V13.75ZM10.0017 19.5C8.68775 19.5 7.45267 19.2507 6.2965 18.752C5.14033 18.2533 4.13467 17.5766 3.2795 16.7218C2.42433 15.8669 1.74725 14.8617 1.24825 13.706C0.749417 12.5503 0.5 11.3156 0.5 10.0017C0.5 8.68775 0.749333 7.45267 1.248 6.2965C1.74667 5.14033 2.42342 4.13467 3.27825 3.2795C4.13308 2.42433 5.13833 1.74725 6.294 1.24825C7.44967 0.749417 8.68442 0.5 9.99825 0.5C11.3123 0.5 12.5473 0.749333 13.7035 1.248C14.8597 1.74667 15.8653 2.42342 16.7205 3.27825C17.5757 4.13308 18.2528 5.13833 18.7518 6.294C19.2506 7.44967 19.5 8.68442 19.5 9.99825C19.5 11.3123 19.2507 12.5473 18.752 13.7035C18.2533 14.8597 17.5766 15.8653 16.7218 16.7205C15.8669 17.5757 14.8617 18.2528 13.706 18.7518C12.5503 19.2506 11.3156 19.5 10.0017 19.5ZM10 18C12.2333 18 14.125 17.225 15.675 15.675C17.225 14.125 18 12.2333 18 10C18 7.76667 17.225 5.875 15.675 4.325C14.125 2.775 12.2333 2 10 2C7.76667 2 5.875 2.775 4.325 4.325C2.775 5.875 2 7.76667 2 10C2 12.2333 2.775 14.125 4.325 15.675C5.875 17.225 7.76667 18 10 18Z\" fill=\"#343A40\"/>\n    </svg>\n  </button>\n\n  <button class=\"progress-bar\" (click)=\"seekAudio($event)\">\n    <div class=\"progress\" [style.width.%]=\"progress\"></div>\n  </button>\n\n  <div class=\"volume-container\">\n    <button class=\"volume-button\" (click)=\"toggleMute()\">\n      <svg *ngIf=\"!isMuted\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n        <path d=\"M11.0386 17.1098V15.5598C12.4809 15.101 13.6427 14.2677 14.5241 13.0598C15.4056 11.8522 15.8463 10.4907 15.8463 8.97532C15.8463 7.45999 15.4056 6.09849 14.5241 4.89082C13.6427 3.68299 12.4809 2.84965 11.0386 2.39082V0.84082C12.9001 1.33949 14.4167 2.33882 15.5886 3.83882C16.7602 5.33882 17.3461 7.05099 17.3461 8.97532C17.3461 10.8997 16.7602 12.6118 15.5886 14.1118C14.4167 15.6118 12.9001 16.6112 11.0386 17.1098ZM0.654053 11.5003V6.50032H4.36555L8.6538 2.21207V15.7886L4.36555 11.5003H0.654053ZM11.0386 12.6541V5.29657C11.7129 5.66324 12.2341 6.17957 12.6021 6.84557C12.9699 7.51157 13.1538 8.22982 13.1538 9.00032C13.1538 9.76049 12.9682 10.4678 12.5971 11.1223C12.2259 11.7768 11.7064 12.2874 11.0386 12.6541ZM7.1538 5.85032L5.0038 8.00032H2.1538V10.0003H5.0038L7.1538 12.1503V5.85032Z\" fill=\"#343A40\"/>\n      </svg>\n      <mat-icon *ngIf=\"isMuted\">volume_off</mat-icon>\n    </button>\n    <input type=\"range\" min=\"0\" max=\"1\" step=\"0.1\"\n           [(ngModel)]=\"volume\"\n           (input)=\"changeVolume($event)\">\n  </div>\n\n  <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"Example icon-button with a menu\">\n    <svg width=\"4\" height=\"16\" viewBox=\"0 0 4 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M2 15.269C1.5875 15.269 1.23442 15.1221 0.94075 14.8282C0.646917 14.5346 0.5 14.1815 0.5 13.769C0.5 13.3565 0.646917 13.0033 0.94075 12.7095C1.23442 12.4158 1.5875 12.269 2 12.269C2.4125 12.269 2.76558 12.4158 3.05925 12.7095C3.35308 13.0033 3.5 13.3565 3.5 13.769C3.5 14.1815 3.35308 14.5346 3.05925 14.8282C2.76558 15.1221 2.4125 15.269 2 15.269ZM2 9.49972C1.5875 9.49972 1.23442 9.3528 0.94075 9.05897C0.646917 8.7653 0.5 8.41222 0.5 7.99972C0.5 7.58722 0.646917 7.23414 0.94075 6.94047C1.23442 6.64664 1.5875 6.49972 2 6.49972C2.4125 6.49972 2.76558 6.64664 3.05925 6.94047C3.35308 7.23414 3.5 7.58722 3.5 7.99972C3.5 8.41222 3.35308 8.7653 3.05925 9.05897C2.76558 9.3528 2.4125 9.49972 2 9.49972ZM2 3.73047C1.5875 3.73047 1.23442 3.58364 0.94075 3.28997C0.646917 2.99614 0.5 2.64297 0.5 2.23047C0.5 1.81797 0.646917 1.46489 0.94075 1.17122C1.23442 0.877386 1.5875 0.730469 2 0.730469C2.4125 0.730469 2.76558 0.877386 3.05925 1.17122C3.35308 1.46489 3.5 1.81797 3.5 2.23047C3.5 2.64297 3.35308 2.99614 3.05925 3.28997C2.76558 3.58364 2.4125 3.73047 2 3.73047Z\" fill=\"#343A40\"/>\n    </svg>\n  </button>\n  <mat-menu #menu=\"matMenu\">\n    <a mat-menu-item [href]=\"src\">\n      <mat-icon>download</mat-icon>\n      <span>Завантажити</span>\n    </a>\n  </mat-menu>\n</div>\n","import {\r\n  AfterViewInit,\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Host,\r\n  Input,\r\n  OnChanges,\r\n  Optional,\r\n  Output,\r\n  Renderer2,\r\n  Self,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { map, startWith } from 'rxjs';\r\n\r\n\r\n@Directive({\r\n  selector: '[appSquarePagination]',\r\n  standalone: true,\r\n})\r\nexport class SquarePaginatorDirective implements AfterViewInit, OnChanges {\r\n  @Output() pageIndexChangeEmitter: EventEmitter<number> =\r\n    new EventEmitter<number>();\r\n\r\n  @Input() showFirstButton = true;\r\n  @Input() showLastButton = true;\r\n\r\n  @Input() renderButtonsNumber = 2;\r\n  @Input() appCustomLength: number = 0;\r\n\r\n  @Input() hideDefaultArrows = false;\r\n\r\n  private dotsEndRef!: HTMLElement;\r\n  private dotsStartRef!: HTMLElement;\r\n  private squareContainerRef!: HTMLElement;\r\n\r\n  private buttonsRef: HTMLElement[] = [];\r\n\r\n  constructor(\r\n    @Host() @Self() @Optional() private readonly matPag: MatPaginator,\r\n    private elementRef: ElementRef,\r\n    private ren: Renderer2\r\n  ) {}\r\n\r\n  ngAfterViewInit(): void {\r\n    this.styleDefaultPagination();\r\n    this.createsquareDivRef();\r\n    this.renderButtons();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (!changes?.['appCustomLength']?.firstChange) {\r\n      this.removeButtons();\r\n      this.switchPage(0);\r\n      this.renderButtons();\r\n    }\r\n  }\r\n\r\n  private renderButtons(): void {\r\n    this.buildButtons();\r\n\r\n    this.matPag.page\r\n      .pipe(\r\n        map((e) => [e.previousPageIndex ?? 0, e.pageIndex]),\r\n        startWith([0, 0])\r\n      )\r\n      .subscribe(([prev, curr]) => {\r\n        this.changeActiveButtonStyles(prev, curr);\r\n      });\r\n  }\r\n\r\n  private changeActiveButtonStyles(previousIndex: number, newIndex: number) {\r\n    if(!this.buttonsRef.length){\r\n      return;\r\n    }\r\n\r\n    const previouslyActive = this.buttonsRef[previousIndex];\r\n    const currentActive = this.buttonsRef[newIndex];\r\n\r\n    this.ren.removeClass(previouslyActive, 'g-square__active');\r\n    this.ren.addClass(currentActive, 'g-square__active');\r\n    this.buttonsRef.forEach((button) =>\r\n      this.ren.setStyle(button, 'display', 'none')\r\n    );\r\n\r\n    const renderElements = this.renderButtonsNumber;\r\n    const endDots = newIndex < this.buttonsRef.length - renderElements - 1;\r\n    const startDots = newIndex - renderElements > 0;\r\n\r\n    const firstButton = this.buttonsRef[0];\r\n    const lastButton = this.buttonsRef[this.buttonsRef.length - 1];\r\n\r\n    if (this.showLastButton) {\r\n      this.ren.setStyle(this.dotsEndRef, 'display', endDots ? 'block' : 'none');\r\n      this.ren.setStyle(lastButton, 'display', endDots ? 'flex' : 'none');\r\n    }\r\n\r\n    if (this.showFirstButton) {\r\n      this.ren.setStyle(\r\n        this.dotsStartRef,\r\n        'display',\r\n        startDots ? 'block' : 'none'\r\n      );\r\n      this.ren.setStyle(firstButton, 'display', startDots ? 'flex' : 'none');\r\n    }\r\n\r\n    const startingIndex = startDots ? newIndex - renderElements : 0;\r\n\r\n    const endingIndex = endDots\r\n      ? newIndex + renderElements\r\n      : this.buttonsRef.length - 1;\r\n\r\n    for (let i = startingIndex; i <= endingIndex; i++) {\r\n      const button = this.buttonsRef[i];\r\n      this.ren.setStyle(button, 'display', 'flex');\r\n    }\r\n  }\r\n\r\n  private styleDefaultPagination() {\r\n    const nativeElement = this.elementRef.nativeElement;\r\n    const itemsPerPage = nativeElement.querySelector(\r\n      '.mat-mdc-paginator-page-size'\r\n    );\r\n    const howManyDisplayedEl = nativeElement.querySelector(\r\n      '.mat-mdc-paginator-range-label'\r\n    );\r\n    const previousButton = nativeElement.querySelector(\r\n      'button.mat-mdc-paginator-navigation-previous'\r\n    );\r\n    const nextButtonDefault = nativeElement.querySelector(\r\n      'button.mat-mdc-paginator-navigation-next'\r\n    );\r\n\r\n    this.ren.setStyle(itemsPerPage, 'display', 'none');\r\n\r\n    this.ren.setStyle(howManyDisplayedEl, 'position', 'absolute');\r\n    this.ren.setStyle(howManyDisplayedEl, 'left', '0');\r\n    this.ren.setStyle(howManyDisplayedEl, 'color', '#919191');\r\n    this.ren.setStyle(howManyDisplayedEl, 'font-size', '14px');\r\n\r\n    if (this.hideDefaultArrows) {\r\n      this.ren.setStyle(previousButton, 'display', 'none');\r\n      this.ren.setStyle(nextButtonDefault, 'display', 'none');\r\n    }\r\n  }\r\n\r\n  private createsquareDivRef(): void {\r\n    const actionContainer = this.elementRef.nativeElement.querySelector(\r\n      'div.mat-mdc-paginator-range-actions'\r\n    );\r\n    const nextButtonDefault = this.elementRef.nativeElement.querySelector(\r\n      'button.mat-mdc-paginator-navigation-next'\r\n    );\r\n\r\n    this.squareContainerRef = this.ren.createElement('div') as HTMLElement;\r\n    this.ren.addClass(this.squareContainerRef, 'g-square-container');\r\n\r\n    this.ren.insertBefore(\r\n      actionContainer,\r\n      this.squareContainerRef,\r\n      nextButtonDefault\r\n    );\r\n  }\r\n\r\n  private buildButtons(): void {\r\n    const neededButtons = Math.ceil(\r\n      this.appCustomLength / this.matPag.pageSize\r\n    );\r\n\r\n    if (neededButtons === 1) {\r\n      this.ren.setStyle(this.elementRef.nativeElement, 'display', 'none');\r\n      return;\r\n    }\r\n\r\n    this.buttonsRef = [this.createButton(0)];\r\n\r\n    this.dotsStartRef = this.createDotsElement();\r\n\r\n    for (let index = 1; index < neededButtons - 1; index++) {\r\n      this.buttonsRef = [...this.buttonsRef, this.createButton(index)];\r\n    }\r\n\r\n    this.dotsEndRef = this.createDotsElement();\r\n\r\n    this.buttonsRef = [\r\n      ...this.buttonsRef,\r\n      this.createButton(neededButtons - 1),\r\n    ];\r\n  }\r\n\r\n  private removeButtons(): void {\r\n    this.buttonsRef.forEach((button) => {\r\n      this.ren.removeChild(this.squareContainerRef, button);\r\n    });\r\n\r\n    if (this.dotsStartRef) {\r\n      this.ren.removeChild(this.squareContainerRef, this.dotsStartRef);\r\n    }\r\n\r\n    if (this.dotsEndRef) {\r\n      this.ren.removeChild(this.squareContainerRef, this.dotsEndRef);\r\n    }\r\n\r\n    this.buttonsRef.length = 0;\r\n  }\r\n\r\n\r\n  private createButton(i: number): HTMLElement {\r\n    const squareButton = this.ren.createElement('div');\r\n    const text = this.ren.createText(String(i + 1));\r\n\r\n    // add class & text\r\n    this.ren.addClass(squareButton, 'g-square');\r\n    this.ren.appendChild(squareButton, text);\r\n\r\n    // react on click\r\n    this.ren.listen(squareButton, 'click', () => {\r\n      this.switchPage(i);\r\n    });\r\n\r\n    // render on UI\r\n    this.ren.appendChild(this.squareContainerRef, squareButton);\r\n\r\n    // set style to hidden by default\r\n    this.ren.setStyle(squareButton, 'display', 'none');\r\n\r\n    return squareButton;\r\n  }\r\n\r\n\r\n  private createDotsElement(): HTMLElement {\r\n    const dotsEl = this.ren.createElement('span');\r\n    const dotsText = this.ren.createText('...');\r\n\r\n    this.ren.setStyle(dotsEl, 'font-size', '18px');\r\n    this.ren.setStyle(dotsEl, 'margin-right', '8px');\r\n    this.ren.setStyle(dotsEl, 'padding-top', '6px');\r\n    this.ren.setStyle(dotsEl, 'color', '#919191');\r\n\r\n    this.ren.appendChild(dotsEl, dotsText);\r\n\r\n    this.ren.appendChild(this.squareContainerRef, dotsEl);\r\n\r\n    this.ren.setStyle(dotsEl, 'display', 'none');\r\n\r\n    return dotsEl;\r\n  }\r\n\r\n\r\n  private switchPage(i: number): void {\r\n    const previousIndex = this.matPag.pageIndex;\r\n    this.matPag.pageIndex = i;\r\n\r\n    this.matPag.page.next({\r\n      previousPageIndex: previousIndex,\r\n      pageIndex: i,\r\n      pageSize: this.matPag.pageSize,\r\n      length: this.appCustomLength\r\n    });\r\n\r\n    this.pageIndexChangeEmitter.emit(i);\r\n  }\r\n}\r\n","import {\n  AfterViewInit, ChangeDetectorRef,\n  Component, ElementRef, HostListener,\n  Input, OnDestroy, OnInit,\n  ViewChild\n} from '@angular/core';\nimport {GridProperty, GridPropertyType} from '../core/entity/grid-property';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport {MatTableModule} from '@angular/material/table';\nimport { CommonModule } from '@angular/common';\nimport {MatPaginatorModule, MatPaginator} from '@angular/material/paginator';\nimport { MatTableDataSource } from '@angular/material/table';\nimport {MatSort, Sort, MatSortModule} from '@angular/material/sort';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {interval, isObservable, map, Observable, of, Subject, Subscription, takeUntil} from 'rxjs';\nimport { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';\nimport {MatOptionSelectionChange, provideNativeDateAdapter} from '@angular/material/core';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {animate, state, style, transition, trigger} from '@angular/animations';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {AudioPlayerComponent} from '../core/components/audio-player/audio-player.component';\nimport {SquarePaginatorDirective} from '../directives/square-paginator.directive';\n\n@Component({\n  selector: 'ngx-data-gridx',\n  imports: [\n    MatTableModule,\n    CommonModule,\n    MatPaginatorModule,\n    MatSortModule,\n    MatSelectModule,\n    MatCheckboxModule,\n    FormsModule,\n    MatTooltipModule,\n    MatIconModule,\n    MatButtonModule,\n    MatInputModule,\n    MatMenuModule,\n    MatFormFieldModule,\n    MatDatepickerModule,\n    ReactiveFormsModule,\n    MatProgressBarModule,\n    AudioPlayerComponent,\n    SquarePaginatorDirective\n  ],\n  providers: [provideNativeDateAdapter()],\n  animations: [\n    trigger('detailExpand', [\n      state('collapsed', style({ height: '0px', opacity: 0, visibility: 'hidden' })),\n      state('expanded', style({ height: '*', opacity: 1, visibility: 'visible' })),\n      transition('expanded <=> collapsed', [\n        animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')\n      ])\n    ])\n  ],\n  templateUrl: './ngx-data-gridx.component.html',\n  styleUrl: './ngx-data-gridx.component.scss',\n})\n\nexport class NgxDataGridx implements OnInit, AfterViewInit, OnDestroy {\n  @Input() url?: string;\n  @Input() exportCsvUrl?: string;\n  @Input() data: GridProperty[] = [];\n  @Input() limit = 10;\n  @Input() sort?: string;\n  @Input() grid_name?: string;\n  @Input() sidx?: string;\n  @Input() multiselect?: boolean = false;\n  @Input() showFilters = true;\n  @Input() subUrlParams?: { paramName: string; columnName: string }[] | null;\n  @Input() currentRow?: object | null | undefined;\n  @Input() showHistoryFilters?: boolean = true;\n  @Input() key?: string | null = null;\n  @Input() expandedElement: object | null | undefined;\n  @Input() theme: GridTheme  = GridTheme.BROAD;\n  @Input() noDataPlaceholder = 'Даних поки що немає, але не хвилюйтесь вони скоро з\\'являться.';\n  @Input() parentGridFilters: {\n    search: Record<string, string>,\n    filters: Record<string, Record<string, AppliedFiltersDTO>>\n  } = { search: {}, filters: {} };\n  @Input() autoRefreshIntervalSec: number | null = null;\n\n  @ViewChild('searchField') searchField!: ElementRef<HTMLInputElement>;\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\n  @ViewChild(MatSort) sortTable!: MatSort;\n  @ViewChild('audioPlayer') audioPlayerRef!: ElementRef<HTMLAudioElement>;\n\n  currentGridColumn: GridProperty | null = null;\n\n  private autoRefreshSub: Subscription | null = null;\n  private autoRefreshDestroy$ = new Subject<void>();\n\n  total: number = 0;\n  displayedColumns: string[] = [];\n\n  searchValues: Record<string, string> = {};\n  openFilterColumn: string | null = null;\n  searchSubject = new Subject<Record<string, string>>();\n\n  appliedFilters: Record<string, Record<string, AppliedFiltersDTO>> = {};\n\n  initialSelection:never[] = [];\n  allowMultiSelect = true;\n  selection: SelectionModel<object> = new SelectionModel<object>(this.allowMultiSelect, this.initialSelection as object[]);\n\n  searchTerm = '';\n  multiSearchControl = new FormControl<number[]>([]);\n  private searchTermSubject = new Subject<SearchQuery>();\n  private destroySearch$ = new Subject<void>();\n  constructor(private http: HttpClient, private cdr: ChangeDetectorRef) {}\n\n  rows: MatTableDataSource<object> = new MatTableDataSource<object>([]);\n  dateFilters: Record<string, FormGroup> = {};\n  filterInputValues: Record<string, string> = {};\n\n  loading = true;\n\n  private destroy$ = new Subject<void>();\n  private previousFiltersState = '';\n  searchData: SearchItem[] = [];\n  selectedItems: number[] = [];\n\n  ngOnInit(){\n    this.loadData();\n    this.setDisplayedColumns();\n    this.initSearch();\n    this.rows.sort = this.sortTable;\n    this.createDateFilter();\n    this.initCustomFilterSearch();\n    this.startAutoRefresh();\n  }\n\n  ngAfterViewInit() {\n    this.paginator.page.subscribe((event) => {\n      this.loadData(event.pageIndex + 1, event.pageSize);\n    });\n  }\n\n  private startAutoRefresh(): void {\n    if (this.autoRefreshIntervalSec && this.autoRefreshIntervalSec > 0) {\n      this.autoRefreshSub = interval(this.autoRefreshIntervalSec * 1000)\n        .pipe(takeUntil(this.autoRefreshDestroy$))\n        .subscribe(() => {\n          console.log('Refreshing data...');\n          this.loadData(this.paginator?.pageIndex + 1 || 1, this.limit);\n        });\n    }\n  }\n\n  showLoader(){\n    this.loading = true;\n  }\n\n  hideLoader(){\n    this.loading = false;\n  }\n\n  executeAction(action: Action, row: object | null | undefined) {\n    if(action.action) {\n      const result = action.action(row);\n\n      if (isObservable(result)) {\n        result.subscribe({\n          complete: () => this.loadData(),\n          error: (error) => console.error(error)\n        });\n      } else if (result instanceof Promise) {\n        result\n          .then(() => this.loadData())\n          .catch((error) => console.error(error));\n      } else if (result instanceof Subscription) {\n        result.add(() => {\n          this.loadData();\n        });\n      }\n    }\n  }\n\n  getCurrentTheme(){\n    return this.theme;\n  }\n\n  exportCsvAction() {\n    if (!this.exportCsvUrl || !this.url){\n      return;\n    }\n\n    const params = new URLSearchParams('');\n\n    this.mappingCustomParams(params);\n    this.mappingParentGridFiltersParams(params);\n    this.setFiltersValues(params, 1, 1);\n\n    this.http.get(`${this.exportCsvUrl}?${params}`, {\n      responseType: 'blob',\n    }).subscribe(res => {\n      const url = URL.createObjectURL(res);\n      window.open(url, '_blank');\n      URL.revokeObjectURL(url);\n    });\n  }\n\n  onSearchTermChange(multiSearch: { url: string; id: string; label: string; } | undefined): void {\n    if(!multiSearch) return;\n\n    if (multiSearch) {\n      this.searchTermSubject.next({ term: this.searchTerm, multiSearch: multiSearch });\n    }\n  }\n\n  private initCustomFilterSearch(): void {\n    this.searchTermSubject.pipe(\n      debounceTime(300),\n      distinctUntilChanged((prev, curr) =>\n        prev.term === curr.term && prev.multiSearch.url === curr.multiSearch.url\n      ),\n      switchMap(query => {\n        if (!query.term.trim()) {\n          return of<SearchItem[]>([]);\n        }\n        const urlWithQuery = `${query.multiSearch.url}?q=${encodeURIComponent(query.term)}`;\n        return this.http.get<{ response: [] }>(urlWithQuery).pipe(\n          map(res =>\n            res.response.map(item => ({\n              id: item[query.multiSearch.id] as number,\n              label: item[query.multiSearch.label] as string,\n              ...(item as Record<string, unknown>)\n            }))\n          )\n        );\n      }),\n      takeUntil(this.destroySearch$)\n    ).subscribe({\n      next: (res: SearchItem[]) => {\n        this.searchData = res;\n        this.cdr.markForCheck();\n      },\n      error: err => console.error(err)\n    });\n  }\n\n  toggleAllItems(event: MatOptionSelectionChange): void {\n    if (event.source.selected) {\n      this.multiSearchControl.setValue(this.searchData.map(item => item.id));\n    } else {\n      this.multiSearchControl.setValue([]);\n    }\n  }\n\n  getSelectedCustomSearchItems(): SearchItem[] {\n    const selected: number[] = this.multiSearchControl.value || [];\n    return this.searchData.filter(item => selected.includes(item.id));\n  }\n\n  onSelectOpened(opened: boolean): void {\n    if (opened) {\n      this.searchField.nativeElement.focus();\n    }\n  }\n\n  clearFilter(\n    columnName: string | undefined,\n    filterType: string | undefined,\n    optionValue:  string | number | string[]\n  ) {\n\n    if (filterType === 'input' && columnName && this.searchValues[columnName]) {\n      delete this.searchValues[columnName];\n      this.searchSubject.next({ ...this.searchValues });\n    }\n\n    if (!columnName || !filterType || !this.appliedFilters[columnName] || !this.appliedFilters[columnName][filterType]) {\n      return;\n    }\n\n    const filterObj : AppliedFiltersDTO = this.appliedFilters[columnName][filterType];\n    const column: GridProperty | undefined = this.data.find(col => col.name === columnName);\n\n    if (Array.isArray(filterObj.value) && Array.isArray(filterObj.label)) {\n      if (typeof optionValue === \"string\") {\n        const index = filterObj.value\n          .map(String)\n          .indexOf(String(optionValue));\n\n        if (index !== -1) {\n          filterObj.value.splice(index, 1);\n          filterObj.label.splice(index, 1);\n        }\n\n        if (filterObj.value.length === 0) {\n          delete this.appliedFilters[columnName][filterType];\n\n          if (Object.keys(this.appliedFilters[columnName]).length === 0) {\n            delete this.appliedFilters[columnName];\n          }\n        }\n      }\n    } else {\n      delete this.appliedFilters[columnName][filterType];\n\n      if (Object.keys(this.appliedFilters[columnName]).length === 0) {\n        delete this.appliedFilters[columnName];\n      }\n    }\n\n    if (filterType === 'date' && this.dateFilters[columnName]) {\n      this.dateFilters[columnName].patchValue({ start: null, end: null });\n      this.dateFilters[columnName].reset();\n    }\n\n    this.uncheckedCheckbox(column, filterType, optionValue);\n    this.loadData(1, this.limit);\n  }\n\n\n  private uncheckedCheckbox(column: GridProperty | undefined,\n                            filterType: string,\n                            value: string | string[] | number){\n    if (column && column.filterValues && filterType === \"checkbox\") {\n      column.filterValues.forEach(group => {\n        group.forEach(filterItem => {\n          if (filterItem.value === value) {\n            filterItem.selected = false;\n          }\n        });\n      });\n    }\n  }\n\n  initSearch() {\n    this.searchSubject.pipe(\n      debounceTime(300),\n      distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)),\n      switchMap(() => {\n        this.destroy$.next();\n        return this.http.get<any>(this.getRequestUrl(1, this.limit)).pipe(\n          takeUntil(this.destroy$)\n        );\n      })\n    ).subscribe({\n      next: (response) => {\n        if (response && Array.isArray(response.response.list)) {\n          this.rows.data = response.response.list;\n          this.total = response?.response?.total || 0;\n        } else if (response && Array.isArray(response.response)) {\n          this.rows.data = response.response;\n          this.total = response?.response.length || 0;\n        }\n      },\n      error: (error: HttpErrorResponse) => {\n        console.error(error.message);\n      }\n    });\n  }\n\n  createDateFilter() {\n    this.data.forEach((column) => {\n      if (column.filter && column.filter.some(f => f.type === 'date')) {\n        this.dateFilters[column.name] = new FormGroup({\n          start: new FormControl<Date | null>(null),\n          end: new FormControl<Date | null>(null),\n          date: new FormControl<Date | null>(null)\n        });\n        this.subscribeDateFilter(column);\n      }\n    });\n  }\n\n  subscribeDateFilter(column: GridProperty) {\n    this.dateFilters[column.name].valueChanges.subscribe(() => {\n      this.onDateRangeChange(column.name, this.dateFilters[column.name]);\n    });\n  }\n\n  clearAllFilters(){\n    this.appliedFilters = {};\n    this.searchValues = {};\n\n    this.data.forEach((column) => {\n      if (column.filterValues) {\n        column.filterValues.forEach((group) => {\n          group.forEach((filterItem) => filterItem.selected = false);\n        });\n      }\n    });\n\n    Object.keys(this.dateFilters).forEach((key) => {\n      this.dateFilters[key].patchValue({ start: null, end: null, date: null });\n      this.dateFilters[key].reset();\n    });\n\n    this.loadData();\n  }\n\n  private formatDate(date: Date): string {\n    const year = date.getFullYear();\n    const month = (date.getMonth() + 1).toString().padStart(2, '0');\n    const day = date.getDate().toString().padStart(2, '0');\n    return `${year}-${month}-${day}`;\n  }\n\n  checkColumnFilters(column: GridProperty): boolean {\n    if(column.search) return true;\n    return !!(column.filter && column.filter.length > 0);\n  }\n\n  getSelectedLabels(\n    options: { label: string; value: string }[] | undefined,\n    selected?: string | string[]\n  ): string[] {\n    if (!options) {\n      return [];\n    }\n\n    const selectedValues = Array.isArray(selected) ? selected : [selected];\n    return options\n      .filter(item => selectedValues.includes(item.value))\n      .map(item => item.label);\n  }\n\n\n  getSelectedLabelsSearch(selected: number[]): string[] {\n    return this.searchData\n      .filter(item => selected?.includes(item.id))\n      .map(item => item.label);\n  }\n\n  getAppliedFilters(): AppliedFiltersDTO[] {\n    const result: AppliedFiltersDTO[] = [];\n\n    Object.keys(this.appliedFilters).forEach((colName) => {\n      const filters = this.appliedFilters[colName];\n      Object.keys(filters).forEach((filterType) => {\n        const filterObj: AppliedFiltersDTO = filters[filterType];\n\n        if (Array.isArray(filterObj.label) && Array.isArray(filterObj.value)) {\n          filterObj.label.forEach((lbl: string, index: number) => {\n            const value = Array.isArray(filterObj.value) ? filterObj.value[index]?.toString() : filterObj.value.toString();\n            result.push({\n              column: colName,\n              filterType: filterType,\n              value: value,\n              label: lbl\n            });\n          });\n        } else {\n          result.push({\n            column: colName,\n            filterType: filterType,\n            value: filterObj.value?.toString(),\n            label: filterObj.label?.toString()\n          });\n        }\n      });\n    });\n\n    Object.keys(this.searchValues).forEach((colName) => {\n      const column = this.data.find(col => col.name === colName);\n      if (this.searchValues[colName]) {\n        result.push({\n          column: colName,\n          filterType: 'input',\n          value: this.searchValues[colName],\n          label: `Пошук по ${column?.displayName || colName}: \"${this.searchValues[colName]?.length > 50\n            ? this.searchValues[colName].slice(0, 50) + '...'\n            : this.searchValues[colName]}\"`\n        });\n      }\n    });\n\n    return result;\n  }\n\n  onSearch(columnName: string, event: Event) {\n    const value = (event.target as HTMLInputElement).value.trim();\n\n    if (value) {\n      this.searchValues[columnName] = value;\n    } else {\n      delete this.searchValues[columnName];\n    }\n\n    this.searchSubject.next({ ...this.searchValues });\n  }\n\n  toggleFilter(columnName: string, event: Event) {\n    event.stopPropagation()\n    this.openFilterColumn = this.openFilterColumn === columnName ? null : columnName;\n  }\n\n  setDisplayedColumns(){\n    this.displayedColumns = [...new Set(this.data.map(col => col.name))];\n    if(this.multiselect) this.displayedColumns.unshift('select');\n  }\n\n  getRequestUrl(page = 1, pageSize = this.limit): string {\n    if (!this.url) return '';\n\n    const [baseUrl, queryString] = this.url.split('?');\n    const params = new URLSearchParams(queryString || '');\n\n    this.mappingCustomParams(params);\n    this.mappingParentGridFiltersParams(params);\n    this.setFiltersValues(params, page, pageSize);\n\n    return `${baseUrl}?${params.toString()}`;\n  }\n\n  isSubGrid():boolean{\n    return !!this.currentRow;\n  }\n\n  private mappingCustomParams(params: URLSearchParams) {\n    if (!this.currentRow || !this.subUrlParams) {\n      return;\n    }\n\n    const rowData = this.currentRow as Record<string, unknown>;\n\n    this.subUrlParams.forEach(({ paramName, columnName }) => {\n      if (Object.prototype.hasOwnProperty.call(rowData, columnName)) {\n        const value = rowData[columnName];\n\n        if (value !== undefined && value !== null) {\n          params.set(paramName, String(value));\n        }\n      }\n    });\n  }\n\n\n  private mappingParentGridFiltersParams(params: URLSearchParams) {\n    if (!this.isSubGrid() || !this.parentGridFilters) return;\n\n    const { search, filters } = this.parentGridFilters;\n\n    Object.keys(search).forEach((searchColumn) => {\n      const searchValue = search[searchColumn];\n      if (searchValue) {\n        params.set(searchColumn, searchValue);\n      }\n    });\n\n    Object.keys(filters).forEach((columnName) => {\n      const columnFilters = filters[columnName];\n\n      Object.keys(columnFilters).forEach((filterType) => {\n        const filterObj = columnFilters[filterType];\n        let value = filterObj.value;\n\n        if (Array.isArray(value)) {\n          value = value.join(',');\n        }\n\n        params.set(columnName, value.toString());\n      });\n    });\n  }\n\n\n  private setFiltersValues(params:URLSearchParams, page = 1, pageSize = this.limit){\n    params.append('page', page.toString());\n    params.append('limit', pageSize.toString());\n\n    if (this.sidx) { params.append('sidx', this.sidx.toString()); }\n    if (this.sort) { params.append('sort', this.sort.toString()); }\n\n    Object.keys(this.searchValues).forEach(columnName => {\n      const value = this.searchValues[columnName];\n      if (value) {\n        params.append(columnName, value);\n      }\n    });\n\n    Object.keys(this.appliedFilters).forEach((columnName) => {\n      const filters = this.appliedFilters[columnName];\n\n      Object.keys(filters).forEach((filterType) => {\n        const filterObj = filters[filterType];\n        const value = filterObj.value;\n\n        if (this.checkFilterType(filterType, 'checkbox') || this.checkFilterType(filterType, 'multi-select') || this.checkFilterType(filterType, 'multi-search') ) {\n          const cleaned = Array.isArray(value)\n            ? value.filter(v => v !== null && v !== undefined && v !== '')\n            : value;\n\n          const selectedValues = Array.isArray(cleaned) ? cleaned.join(',') : cleaned;\n          this.setFilterValue(params, columnName, selectedValues);\n\n        } else if (this.checkFilterType(filterType, 'select') || this.checkFilterType(filterType, 'input')) {\n          this.setFilterValue(params, columnName, value);\n\n        } else if (this.checkFilterType(filterType, 'date') && this.checkDateFilterValues(columnName) ) {\n          const formattedStart = this.dateFilters[columnName].value.start ? this.formatDate(this.dateFilters[columnName].value.start) : null;\n          const formattedEnd   = this.dateFilters[columnName].value.end ? this.formatDate(this.dateFilters[columnName].value.end) : null;\n          const formattedDate  = this.dateFilters[columnName].value.date ? this.formatDate(this.dateFilters[columnName].value.date) : null;\n\n          const date = formattedStart && formattedEnd\n            ? `${formattedStart},${formattedEnd}`\n            : formattedDate;\n          this.setFilterValue(params, columnName, `${date}`);\n        }\n      });\n    });\n  }\n\n  private checkDateFilterValues(columnName: string){\n    return (this.dateFilters[columnName]?.value.start && this.dateFilters[columnName]?.value.end) || this.dateFilters[columnName]?.value?.date\n  }\n\n  private setFilterValue(params: URLSearchParams,\n                         columnName: string,\n                         selectedValues:  string | number | string[]){\n    return params.set(`${columnName}`, selectedValues.toString());\n  }\n\n  private checkFilterType(filterType: string, type: string){\n    return filterType === type;\n  }\n\n  loadData(page = 1, pageSize = this.limit) {\n    if (!this.url) return;\n\n    if (!this.destroy$.closed) {\n      this.destroy$.next();\n      this.destroy$.complete();\n    }\n\n    this.destroy$ = new Subject<void>();\n\n    this.http.get<any>(this.getRequestUrl(page, pageSize)).pipe(\n      takeUntil(this.destroy$)\n    ).subscribe({\n      next: (response) => {\n        const resp = response.response;\n\n        if (Array.isArray(resp)) {\n          this.rows.data = resp;\n          this.total = resp.length;\n        } else {\n          const { list, total, ...singleObject } = resp;\n\n          if (Array.isArray(list)) {\n            this.rows.data = list;\n            this.total = total ?? list.length;\n          } else {\n            this.rows.data = [singleObject];\n            this.total = 1;\n          }\n        }\n\n        this.hideLoader();\n        this.openFilterColumn = null;\n      },\n      complete: () => {\n        this.rollbackExpandedElement();\n      },\n      error: (error: HttpErrorResponse) => {\n        console.error(error.message);\n        this.hideLoader();\n        this.openFilterColumn = null;\n      }\n    });\n  }\n\n  rollbackExpandedElement(){\n    if(this.expandedElement) {\n      const openId = this.expandedElement[this.sidx as keyof typeof this.expandedElement];\n\n      if (openId !== undefined) {\n        const updatedRow = this.rows.data.find(\n          (row) => row[this.sidx as keyof typeof row] === openId\n        );\n\n        this.expandedElement = updatedRow || null;\n      }\n    }\n  }\n\n  private isFilterChanged(): boolean {\n    const currentFiltersState = JSON.stringify(this.appliedFilters);\n\n    if (this.previousFiltersState !== currentFiltersState) {\n      this.previousFiltersState = currentFiltersState;\n      return true;\n    }\n\n    return false;\n  }\n\n  onFilterChange(\n    columnName: string,\n    filterType: string,\n    label: string | string[],\n    value: string | number | string[],\n    callback?: (columnName: string, filterType: string, value: string | number | string[]) => void\n  ) {\n    if ((filterType === 'checkbox' || filterType === 'multi-select' || filterType === 'multi-search') && !Array.isArray(label)) {\n      label = [label];\n    }\n\n    if (!value || (Array.isArray(value) && value.length === 0)) {\n      if (this.appliedFilters[columnName]) {\n        delete this.appliedFilters[columnName][filterType];\n\n        if (Object.keys(this.appliedFilters[columnName]).length === 0) {\n          delete this.appliedFilters[columnName];\n        }\n      }\n    } else {\n      if (!this.appliedFilters[columnName]) {\n        this.appliedFilters[columnName] = {};\n      }\n\n      this.appliedFilters[columnName][filterType] = { value: value, label: label };\n    }\n\n    if (callback) {\n      callback(columnName, filterType, value);\n    }\n\n    this.loadData(1, this.limit);\n  }\n\n  onDateRangeChange(columnName: string, dateGroup: FormGroup) {\n    const start = dateGroup.value.start ? this.formatDate(dateGroup.value.start) : null;\n    const end = dateGroup.value.end ? this.formatDate(dateGroup.value.end) : null;\n    const date = dateGroup.value.date ? this.formatDate(dateGroup.value.date) : null;\n\n    if ((start && end) || date) {\n      if (!this.appliedFilters[columnName]) {\n        this.appliedFilters[columnName] = {};\n      }\n\n      const value = date ? date : `${start},${end}`;\n\n      this.appliedFilters[columnName]['date'] = {\n        label: `Дата ${value}`,\n        value: value\n      };\n\n      this.loadData(1, this.limit);\n    } else {\n      if (this.appliedFilters[columnName]) {\n        delete this.appliedFilters[columnName]['date'];\n      }\n    }\n  }\n\n\n  onInputFilterChange(columnName: string,\n                      filterType: string,\n                      label: string,\n                      value: string,\n                      callback?: (columnName: string, filterType: string, value: string) => void) {\n    if (!this.appliedFilters[columnName]) {\n      this.appliedFilters[columnName] = {};\n    }\n\n    if (value) {\n      this.appliedFilters[columnName][filterType] = { value: value, label: label };\n    } else {\n      delete this.appliedFilters[columnName][filterType];\n\n      if (Object.keys(this.appliedFilters[columnName]).length === 0) {\n        delete this.appliedFilters[columnName];\n      }\n    }\n\n    if(callback){\n      callback(columnName, filterType, value);\n    }\n  }\n\n  onCheckboxChange(\n    columnName: string,\n    filterType: string,\n    index: number,\n    callback?: (columnName: string, filterType: string, value: string | number | string[]) => void\n  ) {\n    const column = this.data.find(col => col.name === columnName);\n    if (!column || !column.filterValues || !column.filterValues[index]) return;\n\n    const selectedItems = column.filterValues[index].filter(item => item.selected);\n\n    const values = selectedItems.map(item => item.value);\n    const labels = selectedItems.map(item => item.label);\n\n    this.onFilterChange(columnName, filterType, labels, values, callback);\n  }\n\n  onSortChange(sortEvent: Sort) {\n    const column = this.data.find(col => col.name === sortEvent.active);\n    this.sidx = \"id\";\n    this.sort = \"asc\";\n\n    if (sortEvent.direction) {\n      this.sidx = column && column.columnSortIndex ? column.columnSortIndex : sortEvent.active;\n      this.sort = sortEvent.direction;\n    }\n\n    this.loadData(1, this.limit);\n  }\n\n  /** Whether the number of selected elements matches the total number of rows. */\n  isAllSelected() {\n    const numSelected = this.selection.selected.length;\n    const numRows = this.rows.data.length;\n    return numSelected == numRows;\n  }\n\n  /** Selects all rows if they are not all selected; otherwise clear selection. */\n  toggleAllRows() {\n    if (this.isAllSelected()) {\n      this.selection.clear();\n    } else {\n      this.rows.data.forEach(row => this.selection.select(row));\n    }\n  }\n\n  setCurrentGridColumn(name: string | undefined | null, row: object): void {\n    const column = this.data.find(col => col.name === name);\n    if (!column) {\n      console.log(`not found ${column}`);\n      return;\n    }\n\n    if (this.expandedElement === row && this.currentGridColumn?.name === column.name) {\n      this.expandedElement = null;\n      this.currentGridColumn = null;\n    } else {\n      this.expandedElement = row;\n      this.currentGridColumn = column;\n    }\n  }\n\n  trackByKey(index: number, item: GridProperty | null): string {\n    return item?.name || index.toString();\n  }\n\n  isColumnExpanded(column: GridProperty, row: object): boolean {\n    return this.currentGridColumn?.name === column.name && this.expandedElement === row;\n  }\n\n  checkIsCurrentColumnSubGrid(column = this.currentGridColumn): boolean {\n    return !!(column && column.ident && column.subGridPropertyList?.length);\n  }\n\n  getSelectedRecords(): object {\n    return this.selection.selected ?? [];\n  }\n\n\n  IsCustomCallbackExist(column: GridProperty): boolean {\n    return column && typeof column.callback === 'function';\n  }\n\n  getAllClasses(column: GridProperty, row: object): Record<string, boolean> {\n    const classes: Record<string, boolean> = {};\n\n    const rowIndex = this.rows?.data.findIndex(r => r === row) ?? 0;\n    if (column?.style_formatter) {\n      const styleClass = column.style_formatter(row, rowIndex);\n      if (styleClass) {\n        classes[styleClass] = true;\n      }\n    }\n\n    if (column?.classes) {\n      classes[column.classes] = true;\n    }\n\n    return classes;\n  }\n\n\n  trackByColumn(index: number, column: GridProperty): string {\n    return column.name || index.toString();\n  }\n\n  uniquePageSizeOptions(): number[] {\n    return Array.from(new Set([this.limit, 100, 500, 1000]));\n  }\n\n  isPath(path: string): boolean {\n    const pathRegex = /^(\\/|\\.\\/|\\.\\.|[a-zA-Z]:\\\\|~\\/|assets\\/|https?:\\/\\/)[^\\0]+$/;\n    return pathRegex.test(path);\n  }\n\n\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent) {\n    const target = event.target as HTMLElement;\n\n    if (target.closest('.filter-dropdown')) {\n      return;\n    }\n\n    if (\n      target.closest('.cdk-overlay-pane') instanceof HTMLElement &&\n      (\n        target.closest('.mat-datepicker-content') ||\n        target.closest('.mat-calendar')\n      )\n    ) {\n      return;\n    }\n\n    this.openFilterColumn = null;\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n\n    this.autoRefreshDestroy$.next();\n    this.autoRefreshDestroy$.complete();\n\n    if (this.autoRefreshSub) {\n      this.autoRefreshSub.unsubscribe();\n    }\n  }\n\n\n  protected readonly GridPropertyType = GridPropertyType;\n  protected readonly GridTheme = GridTheme;\n}\n\nexport interface AppliedFiltersDTO {\n  column?: string;\n  filterType?: string;\n  value:  string | number | string[];\n  label: string | number | string[];\n}\n\nexport interface Action {\n  action?: (row: object | null | undefined) => Promise<void> | Observable<void> | void | Subscription;\n}\n\nexport interface SearchItem {\n  id: number;\n  label: string;\n}\n\ninterface SearchQuery {\n  term: string;\n  multiSearch: {url:string; id: string; label: string; }\n}\n\nexport enum GridTheme{\n  BROAD = 'broad',\n  FLAT  = 'flat'\n}\n","<div class=\"grid__container\" [ngClass]=\"'grid-theme-' + theme\">\n  <div class=\"grid__header\" *ngIf=\"showHistoryFilters || grid_name\">\n    <div class=\"grid__filters\" [ngClass]=\"{'sub__grid_filter': isSubGrid()}\">\n      <div class=\"grid-title\">\n        <span class=\"grid__name\" *ngIf=\"grid_name\">{{ grid_name }}</span>\n      </div>\n\n      <div *ngIf=\"showHistoryFilters\" class=\"grid__options\" [ngClass]=\"{'sub__grid_options': isSubGrid()}\">\n        <div class=\"grid__filter_selected_options\">\n          <div class=\"grid__filter_option\" *ngFor=\"let filter of getAppliedFilters()\">\n            {{ filter.label }}\n            <mat-icon (click)=\"clearFilter(filter.column, filter.filterType, filter.value)\">close</mat-icon>\n          </div>\n        </div>\n\n        <button class=\"grid__filter_actions\" (click)=\"clearAllFilters()\" type=\"button\">\n          <span>Очистити фільтри</span>\n        </button>\n\n        <button *ngIf=\"exportCsvUrl\" class=\"grid__filter_actions\" (click)=\"exportCsvAction()\" type=\"button\">\n          <span>Експорт CSV</span>\n        </button>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"mat-elevation-z8\">\n    <div class=\"grid__container__wrapper\">\n      <table mat-table\n             multiTemplateDataRows\n             [dataSource]=\"rows\"\n             [class.loading]=\"loading\"\n             matSort (matSortChange)=\"onSortChange($event)\"\n             class=\"mat-elevation-z8 grid__table\">\n\n        <ng-container matColumnDef=\"select\" *ngIf=\"multiselect\">\n          <th class=\"grid__th grid__checkbox\"\n              mat-header-cell *matHeaderCellDef>\n            <mat-checkbox (change)=\"$event ? toggleAllRows() : null\"\n                          [checked]=\"selection.hasValue() && isAllSelected()\"\n                          [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n            </mat-checkbox>\n          </th>\n          <td class=\"grid__td\"\n              mat-cell *matCellDef=\"let row\">\n            <mat-checkbox (click)=\"$event.stopPropagation()\"\n                          (change)=\"$event ? selection.toggle(row) : null\"\n                          [checked]=\"selection.isSelected(row)\">\n            </mat-checkbox>\n          </td>\n        </ng-container>\n\n        <!-- primary cols -->\n        <ng-container *ngFor=\"let column of data; trackBy: trackByColumn\" [matColumnDef]=\"column.name\">\n          <th mat-header-cell *matHeaderCellDef\n              class=\"grid__th\"\n              mat-sort-header\n              [disabled]=\"!column.sort\"\n              [style.width]=\"column.width\"\n              [ngClass]=\"column.classes\">\n            {{ column.displayName }}\n\n            <div *ngIf=\"showFilters\" class=\"filter-container\">\n              <button *ngIf=\"checkColumnFilters(column)\"  mat-icon-button (click)=\"toggleFilter(column.name, $event); $event.stopPropagation();\">\n                <svg width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M6.88465 15.5C6.63331 15.5 6.42306 15.4153 6.2539 15.246C6.08456 15.0768 5.9999 14.8666 5.9999 14.6152V8.827L0.401897 1.7155C0.209564 1.459 0.181647 1.19233 0.318147 0.9155C0.454813 0.6385 0.685314 0.5 1.00965 0.5H13.9901C14.3145 0.5 14.545 0.6385 14.6816 0.9155C14.8181 1.19233 14.7902 1.459 14.5979 1.7155L8.9999 8.827V14.6152C8.9999 14.8666 8.91523 15.0768 8.7459 15.246C8.57673 15.4153 8.36648 15.5 8.11515 15.5H6.88465ZM7.4999 8.3L12.4499 2H2.5499L7.4999 8.3Z\" fill=\"#343A40\"/>\n                </svg>\n              </button>\n\n              <div *ngIf=\"openFilterColumn === column.name\"\n                   class=\"filter-dropdown\">\n                <mat-form-field *ngIf=\"column.search\" appearance=\"outline\">\n                  <mat-icon matPrefix (click)=\"$event.stopPropagation()\">search</mat-icon>\n                  <input\n                    matInput\n                    (click)=\"$event.stopPropagation()\"\n                    (keydown.space)=\"$event.stopPropagation()\"\n                    (input)=\"onSearch(column.name, $event)\"\n                    [(ngModel)]=\"searchValues[column.name]\">\n                </mat-form-field>\n\n                <ng-container *ngFor=\"let filter of column.filter; let i = index\">\n                  <!-- Checkbox -->\n                  <div class=\"filter-options\" *ngIf=\"filter.type === 'checkbox'\">\n                    <mat-checkbox *ngFor=\"let item of column.filterValues?.[i]\"\n                                  (click)=\"$event.stopPropagation()\"\n                                  (change)=\"onCheckboxChange(column.name, filter.type, i, filter.callback)\"\n                                  [(ngModel)]=\"item.selected\">\n                      {{ item.label }}\n                    </mat-checkbox>\n                  </div>\n\n                  <!-- Select -->\n                  <mat-form-field *ngIf=\"filter.type === 'select'\" appearance =\"outline\">\n                    <mat-label>{{ filter.label }}</mat-label>\n                    <mat-select (selectionChange)=\"onFilterChange(column.name, filter.type, filter.label, $event.value, filter.callback)\">\n                      <mat-option *ngFor=\"let item of column.filterValues?.[i]\" [value]=\"item.value\">\n                        {{ item.label }}\n                      </mat-option>\n                    </mat-select>\n                  </mat-form-field>\n\n                  <!-- Multi-Select -->\n                  <mat-form-field *ngIf=\"filter.type === 'multi-select'\" appearance =\"outline\">\n                    <mat-label>{{ filter.label }}</mat-label>\n                    <mat-select multiple\n                                (selectionChange)=\"onFilterChange(\n                                                column.name,\n                                                filter.type,\n                                                getSelectedLabels(column.filterValues?.[i], $event.value),\n                                                $event.value,\n                                                filter.callback\n                                             )\">\n                      <mat-option *ngFor=\"let item of column.filterValues?.[i]\" [value]=\"item.value\">\n                        {{ item.label }}\n                      </mat-option>\n                    </mat-select>\n                  </mat-form-field>\n\n                  <!-- Multi-search -->\n                  <mat-form-field (click)=\"$event.stopPropagation()\" appearance=\"outline\" *ngIf=\"filter.type === 'multi-search'\">\n                    <mat-select placeholder=\"Пошук...\"\n                                (openedChange)=\"onSelectOpened($event)\"\n                                [formControl]=\"multiSearchControl\"\n                                (selectionChange)=\"\n                                                    onFilterChange(\n                                                      column.name,\n                                                      filter.type,\n                                                      getSelectedLabelsSearch($event.value),\n                                                      $event.value,\n                                                      filter.callback\n                                                    )\"\n                                multiple>\n                      <mat-option class=\"no-checkbox\">\n                        <div>\n                          <input\n                            #searchField\n                            matInput\n                            placeholder=\"Пошук...\"\n                            [(ngModel)]=\"searchTerm\"\n                            (input)=\"onSearchTermChange(filter?.multiSearchOptions)\"\n                            (ngModelChange)=\"onSearchTermChange(filter?.multiSearchOptions)\"\n                            [ngModelOptions]=\"{standalone: true}\"\n                            (click)=\"$event.stopPropagation()\"\n                          >\n                        </div>\n                      </mat-option>\n\n                      <mat-option (onSelectionChange)=\"toggleAllItems($event)\" value=\"all\">\n                        Вибрати все\n                      </mat-option>\n\n                      <mat-option *ngFor=\"let data of searchData\" [value]=\"data.id\">\n                        {{ data.label }}\n                      </mat-option>\n                    </mat-select>\n                  </mat-form-field>\n\n\n                  <!-- Date Range -->\n                  <mat-form-field (click)=\"$event.stopPropagation()\" *ngIf=\"filter.type === 'date' && filter.dateOptions?.range\" appearance =\"outline\">\n                    <mat-label>Оберіть період</mat-label>\n                    <mat-date-range-input  [formGroup]=\"dateFilters[column.name]\" [rangePicker]=\"picker\">\n                      <input matStartDate formControlName=\"start\" placeholder=\"Start date\">\n                      <input matEndDate formControlName=\"end\" placeholder=\"End date\">\n                    </mat-date-range-input>\n                    <mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>\n                    <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n                    <mat-date-range-picker #picker></mat-date-range-picker>\n\n                    <mat-error *ngIf=\"dateFilters[column.name]?.get('start')?.hasError('matStartDateInvalid')\">\n                      Invalid start date\n                    </mat-error>\n                    <mat-error *ngIf=\"dateFilters[column.name]?.get('end')?.hasError('matEndDateInvalid')\">\n                      Invalid end date\n                    </mat-error>\n                  </mat-form-field>\n\n                  <!-- Date -->\n                  <mat-form-field [formGroup]=\"dateFilters[column.name]\" (click)=\"$event.stopPropagation()\"\n                                  *ngIf=\"filter.type === 'date' && !filter.dateOptions?.range\" appearance =\"outline\">\n                    <mat-label>Оберіть дату</mat-label>\n                    <input matInput formControlName=\"date\" [matDatepicker]=\"picker\">\n                    <mat-hint>MM/DD/YYYY</mat-hint>\n                    <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n                    <mat-datepicker #picker></mat-datepicker>\n                  </mat-form-field>\n\n                  <!-- Input -->\n                  <mat-form-field *ngIf=\"filter.type === 'input'\" appearance =\"outline\">\n                    <mat-label>{{ filter.label }}</mat-label>\n                    <input matInput [(ngModel)]=\"filterInputValues[column.name]\"\n                           (input)=\"onInputFilterChange(column.name,\n                                                                        filter.type,\n                                                                        filter.label,\n                                                                        filterInputValues[column.name],\n                                                                        filter.callback)\">\n                  </mat-form-field>\n                </ng-container>\n\n              </div>\n            </div>\n          </th>\n          <td class=\"grid__td\" [ngClass]=\"getAllClasses(column, row)\" mat-cell\n              *matCellDef=\"let row;\"\n              [style.width]=\"column.width\">\n            <ng-container [ngSwitch]=\"column.type\">\n              <div class=\"column-content\">\n                <div *ngSwitchCase=\"GridPropertyType.Actions\" class=\"actions\">\n                  <ng-container *ngFor=\"let action of column.actions\">\n\n                    <button mat-icon-button *ngIf=\"!action.customHtml && action\"\n                            (click)=\"executeAction(action, row)\"\n                            type=\"button\"\n                            matTooltip=\"{{ action.tooltip }}\">\n                      <mat-icon *ngIf=\"!isPath(action.icon)\" class=\"material-icons-outlined\">\n                        {{ action.icon }}\n                      </mat-icon>\n                      <img *ngIf=\"isPath(action.icon)\" [src]=\"action.icon\" [alt]=\"action.tooltip\">\n                    </button>\n\n                    <button class=\"btn-custom-html\"\n                            mat-icon-button *ngIf=\"action.customHtml\"\n                            matTooltip=\"{{ action.tooltip }}\">\n\n                                                <span [innerHTML]=\"action.customHtml(row)\">\n                                                </span>\n                    </button>\n\n                  </ng-container>\n                </div>\n                <span *ngSwitchCase=\"GridPropertyType.Hidden\"></span>\n                <span *ngSwitchDefault\n                      [innerHTML]=\"IsCustomCallbackExist(column)\n                                                       ? ( column.callback ? column.callback(row) : row[column.name] )\n                                                       : row[column.name]\">\n                                    </span>\n\n                <app-audio-player\n                  *ngSwitchCase=\"GridPropertyType.Audio\"\n                  [src]=\"row[column.name]\">\n                </app-audio-player>\n\n                <button mat-mini-fab\n                        class=\"sub-grid-accordion-btn\"\n                        *ngIf=\"checkIsCurrentColumnSubGrid(column)\"\n                        (click)=\"setCurrentGridColumn(column?.name, row)\">\n                  <mat-icon>{{ isColumnExpanded(column, row) ? 'arrow_drop_up' : 'arrow_drop_down' }}</mat-icon>\n                </button>\n              </div>\n            </ng-container>\n          </td>\n        </ng-container>\n\n        <!-- expand table -->\n        <ng-container matColumnDef=\"expandedDetail\">\n          <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length\">\n            <div class=\"sub-grid-container\"\n                 [@detailExpand]=\"expandedElement === element ? 'expanded' : 'collapsed'\">\n              <ng-container *ngIf=\"expandedElement === element\">\n                <ngx-data-gridx\n                  *ngFor=\"let o of [currentGridColumn]; trackBy: trackByKey\"\n                  [url]=\"currentGridColumn?.subGridSettings?.suburl\"\n                  [data]=\"currentGridColumn?.subGridPropertyList || []\"\n                  [theme]=\"getCurrentTheme()\"\n                  [subUrlParams]=\"currentGridColumn?.subGridSettings?.subUrlParams\"\n                  [currentRow]  = \"expandedElement\"\n                  [parentGridFilters] = \"{ filters: appliedFilters, search: searchValues}\"\n                  [expandedElement] = \"expandedElement\"\n                  [autoRefreshIntervalSec]=\"currentGridColumn?.subGridSettings?.autoRefreshIntervalSec || null\"\n                  [limit]=\"currentGridColumn?.subGridSettings?.subGridProps?.limit || 10\"\n                  [showFilters] = \"currentGridColumn?.subGridSettings?.subGridProps?.showFilters || false\"\n                  [multiselect] = \"currentGridColumn?.subGridSettings?.subGridProps?.multiselect\">\n                </ngx-data-gridx>\n              </ng-container>\n            </div>\n          </td>\n        </ng-container>\n\n        <!-- Second header row -->\n        <ng-container matColumnDef=\"header-row-group\" *ngIf=\"loading\">\n          <th mat-header-cell *matHeaderCellDef [attr.colspan]=\"displayedColumns.length\">\n            <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n          </th>\n        </ng-container>\n\n\n        <!-- primary row -->\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n        <tr class=\"grid__row__loader\" [ngClass]=\"{'grid__no-loading': !loading}\"\n            mat-header-row *matHeaderRowDef=\"loading ? ['header-row-group'] : []\"></tr>\n        <tr mat-row *matRowDef=\"let element; columns: displayedColumns;\"\n            class=\"example-element-row\"\n            [class.example-expanded-row]=\"expandedElement === element\">\n        </tr>\n\n        <!-- expand row -->\n        <tr mat-row *matRowDef=\"let element; columns: ['expandedDetail']\"\n            class=\"example-detail-row\"\n        >\n        </tr>\n\n        <tr class=\"mat-row\" *matNoDataRow>\n          <td class=\"mat-cell\" [attr.colspan]=\"displayedColumns.length\">\n                        <span *ngIf=\"!loading\">\n                            {{ noDataPlaceholder }}\n                        </span>\n          </td>\n        </tr>\n      </table>\n\n      <ng-container *ngIf=\"getCurrentTheme() === GridTheme.FLAT && !isSubGrid(); else broadPaginator\">\n        <mat-paginator\n          appSquarePagination\n          [appCustomLength]=\"total\"\n          [showFirstLastButtons]=\"true\"\n          [pageSizeOptions]=\"uniquePageSizeOptions()\"\n          [pageSize]=\"limit\"\n          [length]=\"total\"\n          class=\"grid__paginator\">\n        </mat-paginator>\n      </ng-container>\n\n      <ng-template #broadPaginator>\n        <mat-paginator\n          [pageSizeOptions]=\"uniquePageSizeOptions()\"\n          [pageSize]=\"limit\"\n          [length]=\"total\"\n          class=\"grid__paginator\">\n        </mat-paginator>\n      </ng-template>\n    </div>\n  </div>\n</div>\n","export class SubGridSettings{\n  suburl?:string;\n  subUrlParams?: { paramName: string; columnName: string }[] | null;\n  subGridProps?: subGridPropsDTO;\n  autoRefreshIntervalSec?: number | null;\n  constructor(params: SubGridPropertiesDTO) {\n    this.subUrlParams = params.subUrlParams || null;\n    this.subGridProps = params.subGridProps || {};\n    this.suburl = params.suburl || '';\n    this.autoRefreshIntervalSec = params.autoRefreshIntervalSec || null;\n  }\n}\n\n\nexport interface SubGridPropertiesDTO{\n  suburl?:string;\n  subUrlParams?: { paramName: string; columnName: string }[] | null;\n  subGridProps?: subGridPropsDTO\n  autoRefreshIntervalSec?: number | null;\n}\n\nexport interface subGridPropsDTO {\n  multiselect?: boolean;\n  limit?: number;\n  sidx?: string;\n  search?: boolean;\n  showFilters?: boolean\n}\n","/*\n * Public API Surface of ngx-data-gridx\n */\nexport * from './lib/ngx-data-gridx/ngx-data-gridx.component';\nexport * from './lib/core/entity/sub-grid-settings';\nexport * from './lib/core/entity/grid-property';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i5","i4","i10"],"mappings":"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"}