{"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; visible?: (row: object | null | undefined) => boolean; 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; visible?: (row: object | null | undefined) => boolean; 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\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 {\r\n  AfterViewInit, ChangeDetectorRef,\r\n  Component, ContentChild, ElementRef, HostListener,\r\n  Input, OnDestroy, OnInit, QueryList, TemplateRef, Type,\r\n  ViewChild, ViewChildren, ViewContainerRef\r\n} from '@angular/core';\r\nimport {GridProperty, GridPropertyType} from '../core/entity/grid-property';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport {MatTableModule} from '@angular/material/table';\r\nimport { CommonModule } from '@angular/common';\r\nimport {MatPaginatorModule, MatPaginator} from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport {MatSort, Sort, MatSortModule} from '@angular/material/sort';\r\nimport {MatSelectModule} from '@angular/material/select';\r\nimport {MatCheckboxModule} from '@angular/material/checkbox';\r\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {interval, isObservable, map, Observable, of, Subject, Subscription, takeUntil} from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';\r\nimport {MatOptionSelectionChange, provideNativeDateAdapter} from '@angular/material/core';\r\nimport {MatDatepickerModule} from '@angular/material/datepicker';\r\nimport {MatFormFieldModule} from '@angular/material/form-field';\r\nimport {animate, state, style, transition, trigger} from '@angular/animations';\r\nimport {SelectionModel} from '@angular/cdk/collections';\r\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\r\nimport {AudioPlayerComponent} from '../core/components/audio-player/audio-player.component';\r\nimport {SquarePaginatorDirective} from '../directives/square-paginator.directive';\r\n\r\n@Component({\r\n  selector: 'ngx-data-gridx',\r\n  imports: [\r\n    MatTableModule,\r\n    CommonModule,\r\n    MatPaginatorModule,\r\n    MatSortModule,\r\n    MatSelectModule,\r\n    MatCheckboxModule,\r\n    FormsModule,\r\n    MatTooltipModule,\r\n    MatIconModule,\r\n    MatButtonModule,\r\n    MatInputModule,\r\n    MatMenuModule,\r\n    MatFormFieldModule,\r\n    MatDatepickerModule,\r\n    ReactiveFormsModule,\r\n    MatProgressBarModule,\r\n    AudioPlayerComponent,\r\n    SquarePaginatorDirective,\r\n  ],\r\n  providers: [provideNativeDateAdapter()],\r\n  animations: [\r\n    trigger('detailExpand', [\r\n      state('collapsed', style({ height: '0px', opacity: 0, visibility: 'hidden' })),\r\n      state('expanded', style({ height: '*', opacity: 1, visibility: 'visible' })),\r\n      transition('expanded <=> collapsed', [\r\n        animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')\r\n      ])\r\n    ])\r\n  ],\r\n  templateUrl: './ngx-data-gridx.component.html',\r\n  styleUrl: './ngx-data-gridx.component.scss',\r\n})\r\n\r\nexport class NgxDataGridx implements OnInit, AfterViewInit, OnDestroy {\r\n  @Input() url?: string;\r\n  @Input() exportCsvUrl?: string;\r\n  @Input() data: GridProperty[] = [];\r\n  @Input() limit = 10;\r\n  @Input() sort?: string;\r\n  @Input() grid_name?: string;\r\n  @Input() sidx?: string;\r\n  @Input() multiselect?: boolean = false;\r\n  @Input() showFilters = true;\r\n  @Input() subUrlParams?: { paramName: string; columnName: string }[] | null;\r\n  @Input() currentRow?: object | null | undefined;\r\n  @Input() showHistoryFilters?: boolean = true;\r\n  @Input() key?: string | null = null;\r\n  @Input() expandedElement: object | null | undefined;\r\n  @Input() theme: GridTheme  = GridTheme.BROAD;\r\n  @Input() noDataPlaceholder = 'Даних поки що немає, але не хвилюйтесь вони скоро з\\'являться.';\r\n  @Input() parentGridFilters: {\r\n    search: Record<string, string>,\r\n    filters: Record<string, Record<string, AppliedFiltersDTO>>\r\n  } = { search: {}, filters: {} };\r\n  @Input() autoRefreshIntervalSec: number | null = null;\r\n  @Input() disablePagination: boolean = false;\r\n  @Input() lazyLoad: boolean = false;\r\n  @Input() detailComponent?: Type<any>;\r\n  @Input() openAllToggleDetails = false;\r\n\r\n  /** detail accordion (dblclick) */\r\n  detailExpandedElement: any | null = null;\r\n\r\n  @ContentChild(TemplateRef) detailTemplate?: TemplateRef<any>;\r\n  @ViewChildren('detailContainer', { read: ViewContainerRef })\r\n  detailContainers!: QueryList<ViewContainerRef>;\r\n\r\n  private static loadedUrls = new Set<string>();\r\n\r\n  @ViewChild('searchField') searchField!: ElementRef<HTMLInputElement>;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @ViewChild(MatSort) sortTable!: MatSort;\r\n  @ViewChild('audioPlayer') audioPlayerRef!: ElementRef<HTMLAudioElement>;\r\n\r\n  currentGridColumn: GridProperty | null = null;\r\n\r\n  private autoRefreshSub: Subscription | null = null;\r\n  private autoRefreshDestroy$ = new Subject<void>();\r\n  private expandedDetailIds = new Set<string>();\r\n\r\n  total: number = 0;\r\n  displayedColumns: string[] = [];\r\n\r\n  searchValues: Record<string, string> = {};\r\n  openFilterColumn: string | null = null;\r\n  searchSubject = new Subject<Record<string, string>>();\r\n\r\n  appliedFilters: Record<string, Record<string, AppliedFiltersDTO>> = {};\r\n\r\n  initialSelection:never[] = [];\r\n  allowMultiSelect = true;\r\n  selection: SelectionModel<object> = new SelectionModel<object>(this.allowMultiSelect, this.initialSelection as object[]);\r\n\r\n  searchTerm = '';\r\n  multiSearchControl = new FormControl<number[]>([]);\r\n  private searchTermSubject = new Subject<SearchQuery>();\r\n  private destroySearch$ = new Subject<void>();\r\n  constructor(private http: HttpClient,\r\n              private cdr: ChangeDetectorRef,\r\n              private elementRef: ElementRef\r\n  ) {}\r\n\r\n  rows: MatTableDataSource<object> = new MatTableDataSource<object>([]);\r\n  dateFilters: Record<string, FormGroup> = {};\r\n  filterInputValues: Record<string, string> = {};\r\n  filterMultiSelectValues: Record<string, string[]> = {};\r\n\r\n  loading = true;\r\n\r\n  private destroy$ = new Subject<void>();\r\n  private previousFiltersState = '';\r\n  searchData: SearchItem[] = [];\r\n  selectedItems: number[] = [];\r\n\r\n  ngOnInit(){\r\n    this.loadFilters();\r\n\r\n    if(!this.lazyLoad) {\r\n      this.loadData();\r\n    }\r\n\r\n    this.setDisplayedColumns();\r\n    this.initSearch();\r\n    this.rows.sort = this.sortTable;\r\n    this.createDateFilter();\r\n    this.restoreFilters();\r\n    this.initCustomFilterSearch();\r\n    this.startAutoRefresh();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    if (this.lazyLoad && this.url && !NgxDataGridx.loadedUrls.has(this.url)) {\r\n      this.runLazyLoad();\r\n    }\r\n\r\n    if (this.disablePagination) return;\r\n\r\n    this.paginator.page.subscribe((event) => {\r\n      this.loadData(event.pageIndex + 1, event.pageSize);\r\n\r\n      if (this.openAllToggleDetails) {\r\n        this.cdr.detectChanges();\r\n        this.rows.data.forEach(r => this.toggleDetail(r));\r\n      }\r\n    });\r\n  }\r\n\r\n  private startAutoRefresh(): void {\r\n    if (this.autoRefreshIntervalSec && this.autoRefreshIntervalSec > 0) {\r\n      this.autoRefreshSub = interval(this.autoRefreshIntervalSec * 1000)\r\n        .pipe(takeUntil(this.autoRefreshDestroy$))\r\n        .subscribe(() => {\r\n          console.log('Refreshing data...');\r\n          this.loadData(this.paginator?.pageIndex + 1 || 1, this.limit);\r\n        });\r\n    }\r\n  }\r\n\r\n  runLazyLoad(){\r\n    const observer = new IntersectionObserver((entries) => {\r\n      entries.forEach(entry => {\r\n        if (entry.isIntersecting) {\r\n          this.loadData();\r\n          NgxDataGridx.loadedUrls.add(this.url!);\r\n          observer.disconnect();\r\n        }\r\n      });\r\n    }, {\r\n      rootMargin: '100px',\r\n      threshold: 0.1\r\n    });\r\n\r\n    observer.observe(this.elementRef.nativeElement);\r\n  }\r\n\r\n  showLoader(){\r\n    this.loading = true;\r\n  }\r\n\r\n  hideLoader(){\r\n    this.loading = false;\r\n  }\r\n\r\n  private get storageKey(): string {\r\n    if (this.grid_name) {\r\n      return `grid-state-${this.grid_name}`;\r\n    }\r\n\r\n    return `grid-state-auto-${this.data.map(c => c.name).join('-')}`;\r\n  }\r\n\r\n  private loadFilters(): void {\r\n    if (!this.showHistoryFilters) return;\r\n    const raw = localStorage.getItem(this.storageKey);\r\n    if (!raw) return;\r\n\r\n    try {\r\n      const state: {\r\n        filters?: Record<string, Record<string,AppliedFiltersDTO>>,\r\n        search?: Record<string,string>\r\n      } = JSON.parse(raw);\r\n\r\n      this.appliedFilters = state.filters  ?? {};\r\n      this.searchValues   = state.search   ?? {};\r\n\r\n    } catch {\r\n      this.appliedFilters = {};\r\n      this.searchValues   = {};\r\n    }\r\n  }\r\n\r\n  restoreFilters(){\r\n    Object.entries(this.appliedFilters).forEach(([col, byType]) => {\r\n      const column = this.data.find(c => c.name === col);\r\n      if (!column?.filterValues) return;\r\n\r\n      Object.entries(byType).forEach(([type, dto]) => {\r\n\r\n        if (type === 'checkbox') {\r\n          const vals = Array.isArray(dto.value) ? dto.value : [dto.value];\r\n          column.filterValues!.forEach(group =>\r\n            group.forEach(item => {\r\n              // @ts-ignore\r\n              item.selected = vals.includes(item.value) ? true : undefined;\r\n            })\r\n          );\r\n        }\r\n\r\n        if (type === 'select') {\r\n          this.filterInputValues[col] = String(dto.value);\r\n        }\r\n\r\n        if (type === 'multi-select') {\r\n          const values = Array.isArray(dto.value)\r\n            ? dto.value.map(String)\r\n            : [String(dto.value)];\r\n\r\n          this.filterMultiSelectValues[col] = values;\r\n        }\r\n\r\n        if (type === 'date') {\r\n          const rawVal = String(dto.value);\r\n          if (rawVal.includes(',')) {\r\n            const [s, e] = rawVal.split(',');\r\n            this.dateFilters[col].patchValue({\r\n              start: new Date(s),\r\n              end:   new Date(e),\r\n              date:  null\r\n            });\r\n          } else {\r\n            this.dateFilters[col].patchValue({\r\n              start: null,\r\n              end:   null,\r\n              date:  new Date(rawVal)\r\n            });\r\n          }\r\n        }\r\n\r\n      });\r\n    });\r\n  }\r\n\r\n  private saveFilters(): void {\r\n    if (!this.showHistoryFilters) return;\r\n    const state = {\r\n      filters: this.appliedFilters,\r\n      search:  this.searchValues\r\n    };\r\n    try {\r\n      localStorage.setItem(this.storageKey, JSON.stringify(state));\r\n    } catch {}\r\n  }\r\n\r\n  toggleDetail(row: any) {\r\n    const rowId = this.getRowId(row);\r\n    const idx = this.rows.data.indexOf(row);\r\n    const container = this.detailContainers.toArray()[idx];\r\n\r\n    if (!container || !this.detailComponent) return;\r\n\r\n    if (this.expandedDetailIds.has(rowId)) {\r\n      this.expandedDetailIds.delete(rowId);\r\n      container.clear();\r\n      return;\r\n    }\r\n\r\n    this.expandedDetailIds.add(rowId);\r\n    container.clear();\r\n    const cmpRef = container.createComponent(this.detailComponent);\r\n    const inst: any = cmpRef.instance;\r\n\r\n    if (typeof inst.row === 'function' && typeof inst.row.set === 'function') {\r\n      inst.row.set(row);\r\n    } else {\r\n      inst.row = row;\r\n    }\r\n\r\n    if (typeof inst.rows === 'function' && typeof inst.rows.set === 'function') {\r\n      inst.rows.set(this.rows.data);\r\n    } else {\r\n      inst.rows = this.rows.data;\r\n    }\r\n\r\n    cmpRef.changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  private getRowId(row: any): string {\r\n    if (this.sidx && row && Object.prototype.hasOwnProperty.call(row, this.sidx)) {\r\n      return String(row[this.sidx as keyof typeof row]);\r\n    }\r\n    return JSON.stringify(row);\r\n  }\r\n\r\n  isDetailExpanded(row: any): boolean {\r\n    return this.expandedDetailIds.has(this.getRowId(row));\r\n  }\r\n\r\n  executeAction(action: Action, row: object | null | undefined) {\r\n    if(action.action) {\r\n      const result = action.action(row);\r\n      const page  = this.paginator?.pageIndex + 1 || 1;\r\n      const size  = this.paginator?.pageSize    || this.limit;\r\n\r\n      if (isObservable(result)) {\r\n        result.subscribe({\r\n          complete: () => this.loadData(page, size),\r\n          error: (error) => console.error(error)\r\n        });\r\n      } else if (result instanceof Promise) {\r\n        result\r\n          .then(() => this.loadData(page, size))\r\n          .catch((error) => console.error(error));\r\n      } else if (result instanceof Subscription) {\r\n        result.add(() => {\r\n          this.loadData(page, size);\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  getCurrentTheme(){\r\n    return this.theme;\r\n  }\r\n\r\n  exportCsvAction() {\r\n    if (!this.exportCsvUrl || !this.url){\r\n      return;\r\n    }\r\n\r\n    const params = new URLSearchParams('');\r\n\r\n    this.mappingCustomParams(params);\r\n    this.mappingParentGridFiltersParams(params);\r\n    this.setFiltersValues(params, 1, 1);\r\n\r\n    this.http.get(`${this.exportCsvUrl}?${params}`, {\r\n      responseType: 'blob',\r\n    }).subscribe(res => {\r\n      const url = URL.createObjectURL(res);\r\n      window.open(url, '_blank');\r\n      URL.revokeObjectURL(url);\r\n    });\r\n  }\r\n\r\n  onSearchTermChange(multiSearch: { url: string; id: string; label: string; } | undefined): void {\r\n    if(!multiSearch) return;\r\n\r\n    if (multiSearch) {\r\n      this.searchTermSubject.next({ term: this.searchTerm, multiSearch: multiSearch });\r\n    }\r\n  }\r\n\r\n  private initCustomFilterSearch(): void {\r\n    this.searchTermSubject.pipe(\r\n      debounceTime(300),\r\n      distinctUntilChanged((prev, curr) =>\r\n        prev.term === curr.term && prev.multiSearch.url === curr.multiSearch.url\r\n      ),\r\n      switchMap(query => {\r\n        if (!query.term.trim()) {\r\n          return of<SearchItem[]>([]);\r\n        }\r\n        const urlWithQuery = `${query.multiSearch.url}?q=${encodeURIComponent(query.term)}`;\r\n        return this.http.get<{ response: [] }>(urlWithQuery).pipe(\r\n          map(res =>\r\n            res.response.map(item => ({\r\n              id: item[query.multiSearch.id] as number,\r\n              label: item[query.multiSearch.label] as string,\r\n              ...(item as Record<string, unknown>)\r\n            }))\r\n          )\r\n        );\r\n      }),\r\n      takeUntil(this.destroySearch$)\r\n    ).subscribe({\r\n      next: (res: SearchItem[]) => {\r\n        this.searchData = res;\r\n        this.cdr.markForCheck();\r\n      },\r\n      error: err => console.error(err)\r\n    });\r\n  }\r\n\r\n  toggleAllItems(event: MatOptionSelectionChange): void {\r\n    if (event.source.selected) {\r\n      this.multiSearchControl.setValue(this.searchData.map(item => item.id));\r\n    } else {\r\n      this.multiSearchControl.setValue([]);\r\n    }\r\n  }\r\n\r\n  getSelectedCustomSearchItems(): SearchItem[] {\r\n    const selected: number[] = this.multiSearchControl.value || [];\r\n    return this.searchData.filter(item => selected.includes(item.id));\r\n  }\r\n\r\n  onSelectOpened(opened: boolean): void {\r\n    if (opened) {\r\n      this.searchField.nativeElement.focus();\r\n    }\r\n  }\r\n\r\n  clearFilter(\r\n    columnName: string | undefined,\r\n    filterType: string | undefined,\r\n    optionValue:  string | number | string[]\r\n  ) {\r\n\r\n    if (filterType === 'input' && columnName && this.searchValues[columnName]) {\r\n      delete this.searchValues[columnName];\r\n      this.saveFilters();\r\n      this.searchSubject.next({ ...this.searchValues });\r\n    }\r\n\r\n    if (!columnName || !filterType || !this.appliedFilters[columnName] || !this.appliedFilters[columnName][filterType]) {\r\n      return;\r\n    }\r\n\r\n    const filterObj : AppliedFiltersDTO = this.appliedFilters[columnName][filterType];\r\n    const column: GridProperty | undefined = this.data.find(col => col.name === columnName);\r\n\r\n    if (Array.isArray(filterObj.value) && Array.isArray(filterObj.label)) {\r\n      if (typeof optionValue === \"string\") {\r\n        const index = filterObj.value\r\n          .map(String)\r\n          .indexOf(String(optionValue));\r\n\r\n        if (index !== -1) {\r\n          filterObj.value.splice(index, 1);\r\n          filterObj.label.splice(index, 1);\r\n        }\r\n\r\n        if (filterObj.value.length === 0) {\r\n          delete this.appliedFilters[columnName][filterType];\r\n\r\n          if (Object.keys(this.appliedFilters[columnName]).length === 0) {\r\n            delete this.appliedFilters[columnName];\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      delete this.appliedFilters[columnName][filterType];\r\n\r\n      if (Object.keys(this.appliedFilters[columnName]).length === 0) {\r\n        delete this.appliedFilters[columnName];\r\n      }\r\n    }\r\n\r\n    if (filterType === 'date' && this.dateFilters[columnName]) {\r\n      this.dateFilters[columnName].patchValue({ start: null, end: null });\r\n      this.dateFilters[columnName].reset();\r\n    }\r\n\r\n\r\n    this.uncheckedCheckbox(column, filterType, optionValue);\r\n    this.saveFilters();\r\n    this.loadData(1, this.limit);\r\n  }\r\n\r\n\r\n  private uncheckedCheckbox(column: GridProperty | undefined,\r\n                            filterType: string,\r\n                            value: string | string[] | number){\r\n    if (column && column.filterValues && filterType === \"checkbox\") {\r\n      column.filterValues.forEach(group => {\r\n        group.forEach(filterItem => {\r\n          if (filterItem.value === value) {\r\n            filterItem.selected = false;\r\n          }\r\n        });\r\n      });\r\n    }\r\n  }\r\n\r\n  initSearch() {\r\n    this.searchSubject.pipe(\r\n      debounceTime(300),\r\n      distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)),\r\n      switchMap(() => {\r\n        this.destroy$.next();\r\n        return this.http.get<any>(this.getRequestUrl(1, this.limit)).pipe(\r\n          takeUntil(this.destroy$)\r\n        );\r\n      })\r\n    ).subscribe({\r\n      next: (response) => {\r\n        if (response && Array.isArray(response.response.list)) {\r\n          this.rows.data = response.response.list;\r\n          this.total = response?.response?.total || 0;\r\n        } else if (response && Array.isArray(response.response)) {\r\n          this.rows.data = response.response;\r\n          this.total = response?.response.length || 0;\r\n        }\r\n      },\r\n      error: (error: HttpErrorResponse) => {\r\n        console.error(error.message);\r\n      }\r\n    });\r\n  }\r\n\r\n  createDateFilter() {\r\n    this.data.forEach((column) => {\r\n      if (column.filter && column.filter.some(f => f.type === 'date')) {\r\n        this.dateFilters[column.name] = new FormGroup({\r\n          start: new FormControl<Date | null>(null),\r\n          end: new FormControl<Date | null>(null),\r\n          date: new FormControl<Date | null>(null)\r\n        });\r\n        this.subscribeDateFilter(column);\r\n      }\r\n    });\r\n  }\r\n\r\n  subscribeDateFilter(column: GridProperty) {\r\n    this.dateFilters[column.name].valueChanges.subscribe(() => {\r\n      this.onDateRangeChange(column.name, this.dateFilters[column.name]);\r\n    });\r\n  }\r\n\r\n  clearAllFilters(){\r\n    this.appliedFilters = {};\r\n    this.searchValues = {};\r\n\r\n    this.data.forEach((column) => {\r\n      if (column.filterValues) {\r\n        column.filterValues.forEach((group) => {\r\n          group.forEach((filterItem) => filterItem.selected = false);\r\n        });\r\n      }\r\n    });\r\n\r\n    Object.keys(this.dateFilters).forEach((key) => {\r\n      this.dateFilters[key].patchValue({ start: null, end: null, date: null });\r\n      this.dateFilters[key].reset();\r\n    });\r\n\r\n    this.saveFilters();\r\n    this.loadData();\r\n  }\r\n\r\n  private formatDate(date: Date | string | null): string {\r\n    if (!date) return '';\r\n\r\n    const d = typeof date === 'string' ? new Date(date) : date;\r\n    const year  = d.getFullYear();\r\n    const month = String(d.getMonth() + 1).padStart(2, '0');\r\n    const day   = String(d.getDate()).padStart(2, '0');\r\n    return `${year}-${month}-${day}`;\r\n  }\r\n\r\n  checkColumnFilters(column: GridProperty): boolean {\r\n    if(column.search) return true;\r\n    return !!(column.filter && column.filter.length > 0);\r\n  }\r\n\r\n  getSelectedLabels(\r\n    options: { label: string; value: string }[] | undefined,\r\n    selected?: string | string[]\r\n  ): string[] {\r\n    if (!options) {\r\n      return [];\r\n    }\r\n\r\n    const selectedValues = Array.isArray(selected) ? selected : [selected];\r\n    return options\r\n      .filter(item => selectedValues.includes(item.value))\r\n      .map(item => item.label);\r\n  }\r\n\r\n\r\n  getSelectedLabelsSearch(selected: number[]): string[] {\r\n    return this.searchData\r\n      .filter(item => selected?.includes(item.id))\r\n      .map(item => item.label);\r\n  }\r\n\r\n  getAppliedFilters(): AppliedFiltersDTO[] {\r\n    const result: AppliedFiltersDTO[] = [];\r\n\r\n    Object.keys(this.appliedFilters).forEach((colName) => {\r\n      const filters = this.appliedFilters[colName];\r\n      Object.keys(filters).forEach((filterType) => {\r\n        const filterObj: AppliedFiltersDTO = filters[filterType];\r\n\r\n        if (Array.isArray(filterObj.label) && Array.isArray(filterObj.value)) {\r\n          filterObj.label.forEach((lbl: string, index: number) => {\r\n            const value = Array.isArray(filterObj.value) ? filterObj.value[index]?.toString() : filterObj.value.toString();\r\n            result.push({\r\n              column: colName,\r\n              filterType: filterType,\r\n              value: value,\r\n              label: lbl\r\n            });\r\n          });\r\n        } else {\r\n          result.push({\r\n            column: colName,\r\n            filterType: filterType,\r\n            value: filterObj.value?.toString(),\r\n            label: filterObj.label?.toString()\r\n          });\r\n        }\r\n      });\r\n    });\r\n\r\n    Object.keys(this.searchValues).forEach((colName) => {\r\n      const column = this.data.find(col => col.name === colName);\r\n      if (this.searchValues[colName]) {\r\n        result.push({\r\n          column: colName,\r\n          filterType: 'input',\r\n          value: this.searchValues[colName],\r\n          label: `Пошук по ${column?.displayName || colName}: \"${this.searchValues[colName]?.length > 50\r\n            ? this.searchValues[colName].slice(0, 50) + '...'\r\n            : this.searchValues[colName]}\"`\r\n        });\r\n      }\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  onSearch(columnName: string, event: Event) {\r\n    const value = (event.target as HTMLInputElement).value.trim();\r\n\r\n    if (value) {\r\n      this.searchValues[columnName] = value;\r\n    } else {\r\n      delete this.searchValues[columnName];\r\n    }\r\n\r\n    this.saveFilters();\r\n    this.searchSubject.next({ ...this.searchValues });\r\n  }\r\n\r\n  toggleFilter(columnName: string, event: Event) {\r\n    event.stopPropagation()\r\n    this.openFilterColumn = this.openFilterColumn === columnName ? null : columnName;\r\n\r\n    this.setInputFocus(event);\r\n  }\r\n\r\n\r\n  private setInputFocus(event: Event){\r\n    setTimeout(() => {\r\n      const th = (event.target as HTMLElement).closest('th');\r\n      if (!th) return;\r\n      const input = th.querySelector<HTMLInputElement>('input');\r\n      if (input) {\r\n        input.focus();\r\n      }\r\n    });\r\n\r\n    return this;\r\n  }\r\n\r\n  setDisplayedColumns(){\r\n    this.displayedColumns = [...new Set(this.data.map(col => col.name))];\r\n    if(this.multiselect) this.displayedColumns.unshift('select');\r\n  }\r\n\r\n  getRequestUrl(page = 1, pageSize = this.limit): string {\r\n    if (!this.url) return '';\r\n\r\n    const [baseUrl, queryString] = this.url.split('?');\r\n    const params = new URLSearchParams(queryString || '');\r\n\r\n    this.mappingCustomParams(params);\r\n    this.mappingParentGridFiltersParams(params);\r\n    this.setFiltersValues(params, page, pageSize);\r\n\r\n    return `${baseUrl}?${params.toString()}`;\r\n  }\r\n\r\n  isSubGrid():boolean{\r\n    return !!this.currentRow;\r\n  }\r\n\r\n  private mappingCustomParams(params: URLSearchParams) {\r\n    if (!this.currentRow || !this.subUrlParams) {\r\n      return;\r\n    }\r\n\r\n    const rowData = this.currentRow as Record<string, unknown>;\r\n\r\n    this.subUrlParams.forEach(({ paramName, columnName }) => {\r\n      if (Object.prototype.hasOwnProperty.call(rowData, columnName)) {\r\n        const value = rowData[columnName];\r\n\r\n        if (value !== undefined && value !== null) {\r\n          params.set(paramName, String(value));\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n  private mappingParentGridFiltersParams(params: URLSearchParams) {\r\n    if (!this.isSubGrid() || !this.parentGridFilters) return;\r\n\r\n    const { search, filters } = this.parentGridFilters;\r\n\r\n    Object.keys(search).forEach((searchColumn) => {\r\n      const searchValue = search[searchColumn];\r\n      if (searchValue) {\r\n        params.set(searchColumn, searchValue);\r\n      }\r\n    });\r\n\r\n    Object.keys(filters).forEach((columnName) => {\r\n      const columnFilters = filters[columnName];\r\n\r\n      Object.keys(columnFilters).forEach((filterType) => {\r\n        const filterObj = columnFilters[filterType];\r\n        let value = filterObj.value;\r\n\r\n        if (Array.isArray(value)) {\r\n          value = value.join(',');\r\n        }\r\n\r\n        params.set(columnName, value.toString());\r\n      });\r\n    });\r\n  }\r\n\r\n\r\n  private setFiltersValues(params:URLSearchParams, page = 1, pageSize = this.limit){\r\n    params.append('page', page.toString());\r\n    params.append('limit', pageSize.toString());\r\n\r\n    if (this.sidx) { params.append('sidx', this.sidx.toString()); }\r\n    if (this.sort) { params.append('sort', this.sort.toString()); }\r\n\r\n    Object.keys(this.searchValues).forEach(columnName => {\r\n      const value = this.searchValues[columnName];\r\n      if (value) {\r\n        params.append(columnName, value);\r\n      }\r\n    });\r\n\r\n    Object.keys(this.appliedFilters).forEach((columnName) => {\r\n      const filters = this.appliedFilters[columnName];\r\n\r\n      Object.keys(filters).forEach((filterType) => {\r\n        const filterObj = filters[filterType];\r\n        const value = filterObj.value;\r\n\r\n        if (this.checkFilterType(filterType, 'checkbox') || this.checkFilterType(filterType, 'multi-select') || this.checkFilterType(filterType, 'multi-search') ) {\r\n          const cleaned = Array.isArray(value)\r\n            ? value.filter(v => v !== null && v !== undefined && v !== '')\r\n            : value;\r\n\r\n          const selectedValues = Array.isArray(cleaned) ? cleaned.join(',') : cleaned;\r\n          this.setFilterValue(params, columnName, selectedValues);\r\n\r\n        } else if (this.checkFilterType(filterType, 'select') || this.checkFilterType(filterType, 'input')) {\r\n          this.setFilterValue(params, columnName, value);\r\n\r\n        } else if (this.checkFilterType(filterType, 'date') && this.checkDateFilterValues(columnName) ) {\r\n          const formattedStart = this.dateFilters[columnName].value.start ? this.formatDate(this.dateFilters[columnName].value.start) : null;\r\n          const formattedEnd   = this.dateFilters[columnName].value.end ? this.formatDate(this.dateFilters[columnName].value.end) : null;\r\n          const formattedDate  = this.dateFilters[columnName].value.date ? this.formatDate(this.dateFilters[columnName].value.date) : null;\r\n\r\n          const date = formattedStart && formattedEnd\r\n            ? `${formattedStart},${formattedEnd}`\r\n            : formattedDate;\r\n          this.setFilterValue(params, columnName, `${date}`);\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  private checkDateFilterValues(columnName: string){\r\n    return (this.dateFilters[columnName]?.value.start && this.dateFilters[columnName]?.value.end) || this.dateFilters[columnName]?.value?.date\r\n  }\r\n\r\n  private setFilterValue(params: URLSearchParams,\r\n                         columnName: string,\r\n                         selectedValues:  string | number | string[]){\r\n    return params.set(`${columnName}`, selectedValues.toString());\r\n  }\r\n\r\n  private checkFilterType(filterType: string, type: string){\r\n    return filterType === type;\r\n  }\r\n\r\n  loadData(page = 1, pageSize = this.limit) {\r\n    this.showLoader();\r\n\r\n    if (!this.url) return;\r\n\r\n    if (!this.destroy$.closed) {\r\n      this.destroy$.next();\r\n      this.destroy$.complete();\r\n    }\r\n\r\n    this.destroy$ = new Subject<void>();\r\n\r\n    this.http.get<any>(this.getRequestUrl(page, pageSize)).pipe(\r\n      takeUntil(this.destroy$)\r\n    ).subscribe({\r\n      next: (response) => {\r\n        const resp = response.response;\r\n\r\n        if (Array.isArray(resp)) {\r\n          this.rows.data = resp;\r\n          this.total = resp.length;\r\n        } else {\r\n          const { list, total, ...singleObject } = resp;\r\n\r\n          if (Array.isArray(list)) {\r\n            this.rows.data = list;\r\n            this.total = total ?? list.length;\r\n          } else {\r\n            this.rows.data = [singleObject];\r\n            this.total = 1;\r\n          }\r\n        }\r\n\r\n        this.selection.clear();\r\n        this.hideLoader();\r\n\r\n        if (this.openAllToggleDetails) {\r\n          this.cdr.detectChanges();\r\n          this.rows.data.forEach(r => this.toggleDetail(r));\r\n        }\r\n\r\n        // this.openFilterColumn = null;\r\n      },\r\n      complete: () => {\r\n        this.rollbackExpandedElement();\r\n      },\r\n      error: (error: HttpErrorResponse) => {\r\n        console.error(error.message);\r\n        this.hideLoader();\r\n        // this.openFilterColumn = null;\r\n      }\r\n    });\r\n  }\r\n\r\n  rollbackExpandedElement(){\r\n    if(this.expandedElement) {\r\n      const openId = this.expandedElement[this.sidx as keyof typeof this.expandedElement];\r\n\r\n      if (openId !== undefined) {\r\n        const updatedRow = this.rows.data.find(\r\n          (row) => row[this.sidx as keyof typeof row] === openId\r\n        );\r\n\r\n        this.expandedElement = updatedRow || null;\r\n      }\r\n    }\r\n  }\r\n\r\n  private isFilterChanged(): boolean {\r\n    const currentFiltersState = JSON.stringify(this.appliedFilters);\r\n\r\n    if (this.previousFiltersState !== currentFiltersState) {\r\n      this.previousFiltersState = currentFiltersState;\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  onFilterChange(\r\n    columnName: string,\r\n    filterType: string,\r\n    label: string | string[],\r\n    value: string | number | string[],\r\n    callback?: (columnName: string, filterType: string, value: string | number | string[]) => void\r\n  ) {\r\n    this.showLoader();\r\n    if ((filterType === 'checkbox' || filterType === 'multi-select' || filterType === 'multi-search') && !Array.isArray(label)) {\r\n      label = [label];\r\n    }\r\n\r\n    if (!value || (Array.isArray(value) && value.length === 0)) {\r\n      if (this.appliedFilters[columnName]) {\r\n        delete this.appliedFilters[columnName][filterType];\r\n\r\n        if (Object.keys(this.appliedFilters[columnName]).length === 0) {\r\n          delete this.appliedFilters[columnName];\r\n        }\r\n      }\r\n    } else {\r\n      if (!this.appliedFilters[columnName]) {\r\n        this.appliedFilters[columnName] = {};\r\n      }\r\n\r\n      this.appliedFilters[columnName][filterType] = { value: value, label: label };\r\n    }\r\n\r\n    if (callback) {\r\n      callback(columnName, filterType, value);\r\n    }\r\n\r\n    if(filterType !== 'multi-search') {\r\n      this.saveFilters();\r\n    }\r\n\r\n    this.loadData(1, this.limit);\r\n  }\r\n\r\n  onDateRangeChange(columnName: string, dateGroup: FormGroup) {\r\n    const start = dateGroup.value.start ? this.formatDate(dateGroup.value.start) : null;\r\n    const end = dateGroup.value.end ? this.formatDate(dateGroup.value.end) : null;\r\n    const date = dateGroup.value.date ? this.formatDate(dateGroup.value.date) : null;\r\n\r\n    if ((start && end) || date) {\r\n      if (!this.appliedFilters[columnName]) {\r\n        this.appliedFilters[columnName] = {};\r\n      }\r\n\r\n      const value = date ? date : `${start},${end}`;\r\n\r\n      this.appliedFilters[columnName]['date'] = {\r\n        label: `Дата ${value}`,\r\n        value: value\r\n      };\r\n\r\n      this.saveFilters();\r\n      this.loadData(1, this.limit);\r\n    } else {\r\n      if (this.appliedFilters[columnName]) {\r\n        delete this.appliedFilters[columnName]['date'];\r\n        this.saveFilters();\r\n      }\r\n    }\r\n  }\r\n\r\n  onInputFilterChange(columnName: string,\r\n                      filterType: string,\r\n                      label: string,\r\n                      value: string,\r\n                      callback?: (columnName: string, filterType: string, value: string) => void) {\r\n    this.showLoader();\r\n    if (!this.appliedFilters[columnName]) {\r\n      this.appliedFilters[columnName] = {};\r\n    }\r\n\r\n    if (value) {\r\n      this.appliedFilters[columnName][filterType] = { value: value, label: label };\r\n    } else {\r\n      delete this.appliedFilters[columnName][filterType];\r\n\r\n      if (Object.keys(this.appliedFilters[columnName]).length === 0) {\r\n        delete this.appliedFilters[columnName];\r\n      }\r\n    }\r\n\r\n    if(callback){\r\n      callback(columnName, filterType, value);\r\n    }\r\n  }\r\n\r\n  onCheckboxChange(\r\n    columnName: string,\r\n    filterType: string,\r\n    index: number,\r\n    callback?: (columnName: string, filterType: string, value: string | number | string[]) => void\r\n  ) {\r\n    this.showLoader();\r\n    const column = this.data.find(col => col.name === columnName);\r\n    if (!column || !column.filterValues || !column.filterValues[index]) return;\r\n\r\n    const selectedItems = column.filterValues[index].filter(item => item.selected);\r\n\r\n    const values = selectedItems.map(item => item.value);\r\n    const labels = selectedItems.map(item => item.label);\r\n\r\n    this.onFilterChange(columnName, filterType, labels, values, callback);\r\n  }\r\n\r\n  onSortChange(sortEvent: Sort) {\r\n    const column = this.data.find(col => col.name === sortEvent.active);\r\n    this.sidx = \"id\";\r\n    this.sort = \"asc\";\r\n\r\n    if (sortEvent.direction) {\r\n      this.sidx = column && column.columnSortIndex ? column.columnSortIndex : sortEvent.active;\r\n      this.sort = sortEvent.direction;\r\n    }\r\n\r\n    const pageSize = this.paginator?.pageSize || this.limit;\r\n    this.loadData(1, pageSize);\r\n  }\r\n\r\n  /** Whether the number of selected elements matches the total number of rows. */\r\n  isAllSelected() {\r\n    const numSelected = this.selection.selected.length;\r\n    const numRows = this.rows.data.length;\r\n    return numSelected == numRows;\r\n  }\r\n\r\n  /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n  toggleAllRows() {\r\n    if (this.isAllSelected()) {\r\n      this.selection.clear();\r\n    } else {\r\n      this.rows.data.forEach(row => this.selection.select(row));\r\n    }\r\n  }\r\n\r\n  setCurrentGridColumn(name: string | undefined | null, row: object): void {\r\n    const column = this.data.find(col => col.name === name);\r\n    if (!column) {\r\n      console.log(`not found ${column}`);\r\n      return;\r\n    }\r\n\r\n    if (this.expandedElement === row && this.currentGridColumn?.name === column.name) {\r\n      this.expandedElement = null;\r\n      this.currentGridColumn = null;\r\n    } else {\r\n      this.expandedElement = row;\r\n      this.currentGridColumn = column;\r\n    }\r\n  }\r\n\r\n  trackByKey(index: number, item: GridProperty | null): string {\r\n    return item?.name || index.toString();\r\n  }\r\n\r\n  isColumnExpanded(column: GridProperty, row: object): boolean {\r\n    return this.currentGridColumn?.name === column.name && this.expandedElement === row;\r\n  }\r\n\r\n  checkIsCurrentColumnSubGrid(column = this.currentGridColumn): boolean {\r\n    return !!(column && column.ident && column.subGridPropertyList?.length);\r\n  }\r\n\r\n  getSelectedRecords(): object {\r\n    return this.selection.selected ?? [];\r\n  }\r\n\r\n  IsCustomCallbackExist(column: GridProperty): boolean {\r\n    return column && typeof column.callback === 'function';\r\n  }\r\n\r\n  getAllClasses(column: GridProperty, row: object): Record<string, boolean> {\r\n    const classes: Record<string, boolean> = {};\r\n\r\n    const rowIndex = this.rows?.data.findIndex(r => r === row) ?? 0;\r\n    if (column?.style_formatter) {\r\n      const styleClass = column.style_formatter(row, rowIndex);\r\n      if (styleClass) {\r\n        classes[styleClass] = true;\r\n      }\r\n    }\r\n\r\n    if (column?.classes) {\r\n      classes[column.classes] = true;\r\n    }\r\n\r\n    return classes;\r\n  }\r\n\r\n  trackByColumn(index: number, column: GridProperty): string {\r\n    return column.name || index.toString();\r\n  }\r\n\r\n  uniquePageSizeOptions(): number[] {\r\n    return Array.from(new Set([this.limit, 100, 500, 1000]));\r\n  }\r\n\r\n  isPath(path: string): boolean {\r\n    const pathRegex = /^(\\/|\\.\\/|\\.\\.|[a-zA-Z]:\\\\|~\\/|assets\\/|https?:\\/\\/)[^\\0]+$/;\r\n    return pathRegex.test(path);\r\n  }\r\n\r\n  @HostListener('document:click', ['$event'])\r\n  onDocumentClick(event: MouseEvent) {\r\n    const target = event.target as HTMLElement;\r\n\r\n    if (target.closest('.filter-container')) {\r\n      return;\r\n    }\r\n\r\n    if (\r\n      target.closest('.cdk-overlay-pane') instanceof HTMLElement &&\r\n      (\r\n        target.closest('.mat-datepicker-content') ||\r\n        target.closest('.mat-calendar')\r\n      )\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    if (target.closest('.cdk-overlay-pane')) {\r\n      return;\r\n    }\r\n\r\n    this.openFilterColumn = null;\r\n  }\r\n\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.url) {\r\n      NgxDataGridx.loadedUrls.delete(this.url);\r\n    }\r\n\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n\r\n    this.autoRefreshDestroy$.next();\r\n    this.autoRefreshDestroy$.complete();\r\n\r\n    if (this.autoRefreshSub) {\r\n      this.autoRefreshSub.unsubscribe();\r\n    }\r\n  }\r\n\r\n\r\n  protected readonly GridPropertyType = GridPropertyType;\r\n  protected readonly GridTheme = GridTheme;\r\n}\r\n\r\nexport interface AppliedFiltersDTO {\r\n  column?: string;\r\n  filterType?: string;\r\n  value:  string | number | string[];\r\n  label: string | number | string[];\r\n}\r\n\r\nexport interface Action {\r\n  action?: (row: object | null | undefined) => Promise<void> | Observable<void> | void | Subscription;\r\n}\r\n\r\nexport interface SearchItem {\r\n  id: number;\r\n  label: string;\r\n}\r\n\r\ninterface SearchQuery {\r\n  term: string;\r\n  multiSearch: {url:string; id: string; label: string; }\r\n}\r\n\r\nexport enum GridTheme{\r\n  BROAD = 'broad',\r\n  FLAT  = 'flat'\r\n}\r\n","<div class=\"grid__container\" [ngClass]=\"'grid-theme-' + theme\">\r\n  <div class=\"grid__header\" *ngIf=\"showHistoryFilters || grid_name\">\r\n    <div class=\"grid__filters\" [ngClass]=\"{'sub__grid_filter': isSubGrid()}\">\r\n      <div class=\"grid-title\">\r\n        <span class=\"grid__name\" *ngIf=\"grid_name\">{{ grid_name }}</span>\r\n      </div>\r\n\r\n      <ng-content select=\".action-buttons\"></ng-content>\r\n\r\n      <div *ngIf=\"showHistoryFilters\" class=\"grid__options\" [ngClass]=\"{'sub__grid_options': isSubGrid()}\">\r\n        <div class=\"grid__filter_selected_options\">\r\n          <div class=\"grid__filter_option\" *ngFor=\"let filter of getAppliedFilters()\">\r\n            {{ filter.label }}\r\n            <mat-icon (click)=\"clearFilter(filter.column, filter.filterType, filter.value)\">close</mat-icon>\r\n          </div>\r\n        </div>\r\n\r\n        <button class=\"grid__filter_actions\" (click)=\"clearAllFilters()\" type=\"button\">\r\n          <mat-icon matTooltip=\"Очистити фільтри\">filter_list_off</mat-icon>\r\n        </button>\r\n\r\n        <button *ngIf=\"exportCsvUrl\" class=\"grid__filter_actions\" (click)=\"exportCsvAction()\" type=\"button\">\r\n          <mat-icon matTooltip=\"Експорт CSV\">description</mat-icon>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"mat-elevation-z8\">\r\n    <div class=\"grid__container__wrapper\">\r\n      <table mat-table\r\n             multiTemplateDataRows\r\n             [dataSource]=\"rows\"\r\n             [class.loading]=\"loading\"\r\n             matSort (matSortChange)=\"onSortChange($event)\"\r\n             class=\"mat-elevation-z8 grid__table\">\r\n\r\n        <ng-container matColumnDef=\"select\" *ngIf=\"multiselect\">\r\n          <th class=\"grid__th grid__checkbox\"\r\n              mat-header-cell *matHeaderCellDef>\r\n            <mat-checkbox (change)=\"$event ? toggleAllRows() : null\"\r\n                          [checked]=\"selection.hasValue() && isAllSelected()\"\r\n                          [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n            </mat-checkbox>\r\n          </th>\r\n          <td class=\"grid__td\"\r\n              mat-cell *matCellDef=\"let row\">\r\n            <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n                          (change)=\"$event ? selection.toggle(row) : null\"\r\n                          [checked]=\"selection.isSelected(row)\">\r\n            </mat-checkbox>\r\n          </td>\r\n        </ng-container>\r\n\r\n        <!-- primary cols -->\r\n        <ng-container *ngFor=\"let column of data; trackBy: trackByColumn\" [matColumnDef]=\"column.name\">\r\n          <th mat-header-cell *matHeaderCellDef\r\n              class=\"grid__th\"\r\n              mat-sort-header\r\n              [disabled]=\"!column.sort\"\r\n              [style.width]=\"column.width\"\r\n              [ngClass]=\"column.classes\">\r\n            {{ column.displayName }}\r\n\r\n            <div *ngIf=\"showFilters\" class=\"filter-container\">\r\n              <button *ngIf=\"checkColumnFilters(column)\" type=\"button\"  mat-icon-button (click)=\"toggleFilter(column.name, $event); $event.stopPropagation();\">\r\n                <svg width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\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\"/>\r\n                </svg>\r\n              </button>\r\n\r\n              <div *ngIf=\"openFilterColumn === column.name\"\r\n                   class=\"filter-dropdown\">\r\n                <mat-form-field *ngIf=\"column.search\" appearance=\"outline\">\r\n                  <mat-icon matPrefix (click)=\"$event.stopPropagation()\">search</mat-icon>\r\n                  <input\r\n                    matInput\r\n                    (click)=\"$event.stopPropagation()\"\r\n                    (keydown.space)=\"$event.stopPropagation()\"\r\n                    (input)=\"onSearch(column.name, $event)\"\r\n                    [(ngModel)]=\"searchValues[column.name]\">\r\n                </mat-form-field>\r\n\r\n                <ng-container *ngFor=\"let filter of column.filter; let i = index\">\r\n                  <!-- Checkbox -->\r\n                  <div class=\"filter-options\" *ngIf=\"filter.type === 'checkbox'\">\r\n                    <mat-checkbox *ngFor=\"let item of column.filterValues?.[i]\"\r\n                                  (click)=\"$event.stopPropagation()\"\r\n                                  (change)=\"onCheckboxChange(column.name, filter.type, i, filter.callback)\"\r\n                                  [(ngModel)]=\"item.selected\">\r\n                      {{ item.label }}\r\n                    </mat-checkbox>\r\n                  </div>\r\n\r\n                  <!-- Select -->\r\n                  <mat-form-field *ngIf=\"filter.type === 'select'\" appearance =\"outline\">\r\n                    <mat-label>{{ filter.label }}</mat-label>\r\n                    <mat-select\r\n                      [(ngModel)]=\"filterInputValues[column.name]\"\r\n                      (selectionChange)=\"onFilterChange(column.name, filter.type, filter.label, $event.value, filter.callback)\">\r\n                      <mat-option *ngFor=\"let item of column.filterValues?.[i]\" [value]=\"item.value\">\r\n                        {{ item.label }}\r\n                      </mat-option>\r\n                    </mat-select>\r\n                  </mat-form-field>\r\n\r\n                  <!-- Multi-Select -->\r\n                  <mat-form-field *ngIf=\"filter.type === 'multi-select'\" appearance =\"outline\">\r\n                    <mat-label>{{ filter.label }}</mat-label>\r\n                    <mat-select multiple\r\n                                [(ngModel)]=\"filterMultiSelectValues[column.name]\"\r\n                                (selectionChange)=\"onFilterChange(\r\n                                                column.name,\r\n                                                filter.type,\r\n                                                getSelectedLabels(column.filterValues?.[i], $event.value),\r\n                                                $event.value,\r\n                                                filter.callback\r\n                                             )\">\r\n                      <mat-option *ngFor=\"let item of column.filterValues?.[i]\" [value]=\"item.value\">\r\n                        {{ item.label }}\r\n                      </mat-option>\r\n                    </mat-select>\r\n                  </mat-form-field>\r\n\r\n                  <!-- Multi-search -->\r\n                  <mat-form-field (click)=\"$event.stopPropagation()\" appearance=\"outline\" *ngIf=\"filter.type === 'multi-search'\">\r\n                    <mat-select placeholder=\"Пошук...\"\r\n                                (openedChange)=\"onSelectOpened($event)\"\r\n                                [formControl]=\"multiSearchControl\"\r\n                                (selectionChange)=\"\r\n                                                    onFilterChange(\r\n                                                      column.name,\r\n                                                      filter.type,\r\n                                                      getSelectedLabelsSearch($event.value),\r\n                                                      $event.value,\r\n                                                      filter.callback\r\n                                                    )\"\r\n                                multiple>\r\n                      <mat-option class=\"no-checkbox\" >\r\n                        <div>\r\n                          <input\r\n                            #searchField\r\n                            matInput\r\n                            placeholder=\"Пошук...\"\r\n                            [(ngModel)]=\"searchTerm\"\r\n                            (input)=\"onSearchTermChange(filter?.multiSearchOptions)\"\r\n                            (ngModelChange)=\"onSearchTermChange(filter?.multiSearchOptions)\"\r\n                            [ngModelOptions]=\"{standalone: true}\"\r\n                            (click)=\"$event.stopPropagation()\"\r\n                          >\r\n                        </div>\r\n                      </mat-option>\r\n\r\n                      <mat-option (onSelectionChange)=\"toggleAllItems($event)\" value=\"all\">\r\n                        Вибрати все\r\n                      </mat-option>\r\n\r\n                      <mat-option *ngFor=\"let data of searchData\" [value]=\"data.id\">\r\n                        {{ data.label }}\r\n                      </mat-option>\r\n                    </mat-select>\r\n                  </mat-form-field>\r\n\r\n                  <!-- Date Range -->\r\n                  <div class=\"date-range\" *ngIf=\"filter.type==='date' && filter.dateOptions?.range\" [formGroup]=\"dateFilters[column.name]\">\r\n                    <mat-form-field appearance=\"outline\">\r\n                      <mat-label>From</mat-label>\r\n                      <input\r\n                        matInput\r\n                        type=\"date\"\r\n                        formControlName=\"start\"\r\n                        #startInput\r\n                        (click)=\"$event.stopPropagation()\"\r\n                        (focus)=\"startInput.showPicker?.()\"\r\n                      />\r\n                      <mat-icon class=\"date-icons\" matSuffix (click)=\"startInput.showPicker(); $event.stopPropagation()\">\r\n                        calendar_today\r\n                      </mat-icon>\r\n                    </mat-form-field>\r\n\r\n                    <mat-form-field appearance=\"outline\">\r\n                      <mat-label>To</mat-label>\r\n                      <input\r\n                        matInput\r\n                        type=\"date\"\r\n                        formControlName=\"end\"\r\n                        #endInput\r\n                        (click)=\"$event.stopPropagation()\"\r\n                        (focus)=\"endInput.showPicker()\"\r\n                      />\r\n                      <mat-icon class=\"date-icons\" matSuffix (click)=\"endInput.showPicker(); $event.stopPropagation()\">\r\n                        calendar_today\r\n                      </mat-icon>\r\n                    </mat-form-field>\r\n                  </div>\r\n\r\n\r\n                  <!-- Date -->\r\n                  <mat-form-field appearance=\"outline\" [formGroup]=\"dateFilters[column.name]\" (click)=\"$event.stopPropagation()\"\r\n                                  *ngIf=\"filter.type === 'date' && !filter.dateOptions?.range\">\r\n                    <input\r\n                      matInput\r\n                      type=\"date\"\r\n                      formControlName=\"date\"\r\n                      #dateInput\r\n                      (click)=\"$event.stopPropagation()\"\r\n                      (focus)=\"dateInput.showPicker()\"\r\n                    />\r\n\r\n                    <mat-icon\r\n                      matSuffix\r\n                      class=\"date-icons\"\r\n                      (click)=\"dateInput.showPicker(); $event.stopPropagation()\"\r\n                    >calendar_today</mat-icon>\r\n                  </mat-form-field>\r\n\r\n                  <!-- Input -->\r\n                  <mat-form-field *ngIf=\"filter.type === 'input'\" appearance =\"outline\">\r\n                    <mat-label>{{ filter.label }}</mat-label>\r\n                    <input matInput [(ngModel)]=\"filterInputValues[column.name]\"\r\n                           (input)=\"onInputFilterChange(column.name,\r\n                                                                        filter.type,\r\n                                                                        filter.label,\r\n                                                                        filterInputValues[column.name],\r\n                                                                        filter.callback)\">\r\n                  </mat-form-field>\r\n                </ng-container>\r\n\r\n              </div>\r\n            </div>\r\n          </th>\r\n          <td class=\"grid__td\" [ngClass]=\"getAllClasses(column, row)\" mat-cell\r\n              *matCellDef=\"let row;\"\r\n              [style.width]=\"column.width\">\r\n            <ng-container [ngSwitch]=\"column.type\">\r\n              <div class=\"column-content\">\r\n                <div *ngSwitchCase=\"GridPropertyType.Actions\" class=\"actions\">\r\n                  <ng-container *ngFor=\"let action of column.actions\">\r\n                    <button\r\n                      type=\"button\"\r\n                      mat-icon-button\r\n                      *ngIf=\"(!action.customHtml && action && (!action.visible || action.visible(row)))\"\r\n                      (click)=\"executeAction(action, row)\"\r\n                      matTooltip=\"{{ action.tooltip }}\">\r\n                      <mat-icon *ngIf=\"!isPath(action.icon)\" class=\"material-icons-outlined\">\r\n                        {{ action.icon }}\r\n                      </mat-icon>\r\n                      <img *ngIf=\"isPath(action.icon)\" [src]=\"action.icon\" [alt]=\"action.tooltip\" />\r\n                    </button>\r\n\r\n                    <button\r\n                      class=\"btn-custom-html\"\r\n                      type=\"button\"\r\n                      mat-icon-button\r\n                      *ngIf=\"action.customHtml && (!action.visible || action.visible(row))\"\r\n                      matTooltip=\"{{ action.tooltip }}\">\r\n                      <span [innerHTML]=\"action.customHtml(row)\"></span>\r\n                    </button>\r\n                  </ng-container>\r\n\r\n                </div>\r\n                <span *ngSwitchCase=\"GridPropertyType.Hidden\"></span>\r\n                <span *ngSwitchDefault\r\n                      [innerHTML]=\"IsCustomCallbackExist(column)\r\n                                                       ? ( column.callback ? column.callback(row) : row[column.name] )\r\n                                                       : row[column.name]\">\r\n                                    </span>\r\n\r\n                <app-audio-player\r\n                  *ngSwitchCase=\"GridPropertyType.Audio\"\r\n                  [src]=\"row[column.name]\">\r\n                </app-audio-player>\r\n\r\n                <button mat-mini-fab\r\n                        type=\"button\"\r\n                        class=\"sub-grid-accordion-btn\"\r\n                        *ngIf=\"checkIsCurrentColumnSubGrid(column)\"\r\n                        (click)=\"setCurrentGridColumn(column?.name, row)\">\r\n                  <mat-icon>{{ isColumnExpanded(column, row) ? 'arrow_drop_up' : 'arrow_drop_down' }}</mat-icon>\r\n                </button>\r\n              </div>\r\n            </ng-container>\r\n          </td>\r\n        </ng-container>\r\n\r\n        <!-- expand table -->\r\n        <ng-container matColumnDef=\"expandedDetail\">\r\n          <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length\">\r\n            <div class=\"sub-grid-container\"\r\n                 [@detailExpand]=\"expandedElement === element ? 'expanded' : 'collapsed'\">\r\n              <ng-container *ngIf=\"expandedElement === element\">\r\n                <ngx-data-gridx\r\n                  *ngFor=\"let o of [currentGridColumn]; trackBy: trackByKey\"\r\n                  [url]=\"currentGridColumn?.subGridSettings?.suburl\"\r\n                  [data]=\"currentGridColumn?.subGridPropertyList || []\"\r\n                  [theme]=\"getCurrentTheme()\"\r\n                  [subUrlParams]=\"currentGridColumn?.subGridSettings?.subUrlParams\"\r\n                  [currentRow]  = \"expandedElement\"\r\n                  [parentGridFilters] = \"{ filters: appliedFilters, search: searchValues}\"\r\n                  [expandedElement] = \"expandedElement\"\r\n                  [autoRefreshIntervalSec]=\"currentGridColumn?.subGridSettings?.autoRefreshIntervalSec || null\"\r\n                  [limit]=\"currentGridColumn?.subGridSettings?.subGridProps?.limit || 10\"\r\n                  [showFilters] = \"currentGridColumn?.subGridSettings?.subGridProps?.showFilters || false\"\r\n                  [detailComponent]=\"currentGridColumn?.subGridSettings?.detailComponent\"\r\n                  [multiselect] = \"currentGridColumn?.subGridSettings?.subGridProps?.multiselect\">\r\n                </ngx-data-gridx>\r\n              </ng-container>\r\n            </div>\r\n          </td>\r\n        </ng-container>\r\n\r\n        <ng-container matColumnDef=\"detailRow\">\r\n          <td class=\"detail-row\" mat-cell *matCellDef=\"let row\" [attr.colspan]=\"displayedColumns.length\">\r\n            <div class=\"detail-accordion\"\r\n                 [@detailExpand]=\"isDetailExpanded(row) ? 'expanded' : 'collapsed'\">\r\n\r\n              <ng-container *ngIf=\"detailTemplate\">\r\n                <ng-container\r\n                  *ngTemplateOutlet=\"detailTemplate;\r\n                             context: { $implicit: row, rows: rows.data }\">\r\n                </ng-container>\r\n              </ng-container>\r\n\r\n              <ng-template #detailContainer></ng-template>\r\n\r\n            </div>\r\n          </td>\r\n        </ng-container>\r\n\r\n\r\n        <!-- Second header row -->\r\n        <ng-container matColumnDef=\"header-row-group\" *ngIf=\"loading\">\r\n          <th mat-header-cell *matHeaderCellDef [attr.colspan]=\"displayedColumns.length\">\r\n            <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n          </th>\r\n        </ng-container>\r\n\r\n\r\n        <!-- primary row -->\r\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n\r\n        <tr class=\"grid__row__loader\" [ngClass]=\"{'grid__no-loading': !loading}\"\r\n            mat-header-row *matHeaderRowDef=\"loading ? ['header-row-group'] : []\"></tr>\r\n\r\n        <tr mat-row *matRowDef=\"let element; columns: displayedColumns;\"\r\n            (dblclick)=\"toggleDetail(element)\"\r\n            class=\"example-element-row\"\r\n            [class.accordion]=\"detailComponent\"\r\n            [class.example-expanded-row]=\"expandedElement === element\">\r\n        </tr>\r\n\r\n        <!-- expand row -->\r\n        <tr mat-row *matRowDef=\"let element; columns: ['expandedDetail']\"\r\n            class=\"example-detail-row\"\r\n        >\r\n        </tr>\r\n\r\n        <tr mat-row\r\n            *matRowDef=\"let row; columns: ['detailRow']\"\r\n            class=\"detail-row\">\r\n        </tr>\r\n\r\n        <tr class=\"mat-row\" *matNoDataRow>\r\n          <td class=\"mat-cell\" [attr.colspan]=\"displayedColumns.length\">\r\n                        <span *ngIf=\"!loading\">\r\n                            {{ noDataPlaceholder }}\r\n                        </span>\r\n          </td>\r\n        </tr>\r\n      </table>\r\n\r\n      <ng-container *ngIf=\"!disablePagination\">\r\n        <ng-container *ngIf=\"getCurrentTheme() === GridTheme.FLAT && !isSubGrid(); else broadPaginator\">\r\n          <mat-paginator\r\n            appSquarePagination\r\n            [appCustomLength]=\"total\"\r\n            [showFirstLastButtons]=\"true\"\r\n            [pageSizeOptions]=\"uniquePageSizeOptions()\"\r\n            [pageSize]=\"limit\"\r\n            [length]=\"total\"\r\n            class=\"grid__paginator\">\r\n          </mat-paginator>\r\n        </ng-container>\r\n      </ng-container>\r\n\r\n      <ng-template #broadPaginator>\r\n        <mat-paginator\r\n          *ngIf=\"!disablePagination\"\r\n        [pageSizeOptions]=\"uniquePageSizeOptions()\"\r\n        [pageSize]=\"limit\"\r\n        [length]=\"total\"\r\n        class=\"grid__paginator\">\r\n        </mat-paginator>\r\n      </ng-template>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import {Type} from '@angular/core';\r\n\r\nexport class SubGridSettings{\r\n  suburl?:string;\r\n  subUrlParams?: { paramName: string; columnName: string }[] | null;\r\n  subGridProps?: subGridPropsDTO;\r\n  autoRefreshIntervalSec?: number | null;\r\n  detailComponent?: Type<any>;\r\n  constructor(params: SubGridPropertiesDTO) {\r\n    this.subUrlParams = params.subUrlParams || null;\r\n    this.subGridProps = params.subGridProps || {};\r\n    this.suburl = params.suburl || '';\r\n    this.detailComponent         = params.detailComponent;\r\n    this.autoRefreshIntervalSec = params.autoRefreshIntervalSec || null;\r\n  }\r\n}\r\n\r\n\r\nexport interface SubGridPropertiesDTO{\r\n  suburl?:string;\r\n  subUrlParams?: { paramName: string; columnName: string }[] | null;\r\n  subGridProps?: subGridPropsDTO\r\n  autoRefreshIntervalSec?: number | null;\r\n  detailComponent?: Type<any>;\r\n}\r\n\r\nexport interface subGridPropsDTO {\r\n  multiselect?: boolean;\r\n  limit?: number;\r\n  sidx?: string;\r\n  search?: boolean;\r\n  showFilters?: boolean\r\n}\r\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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"}