{"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/core/components/invoke-btn/invoke-btn.component.ts","../../../projects/ngx-data-gridx/src/lib/core/components/invoke-btn/invoke-btn.component.html","../../../projects/ngx-data-gridx/src/lib/core/components/grid-columns-modal-dialog/grid-columns-modal-dialog.component.ts","../../../projects/ngx-data-gridx/src/lib/core/components/grid-columns-modal-dialog/grid-columns-modal-dialog.component.html","../../../projects/ngx-data-gridx/src/lib/core/service/pdf-export.service.ts","../../../projects/ngx-data-gridx/src/lib/core/components/grid-footer-settings/grid-footer-settings.component.ts","../../../projects/ngx-data-gridx/src/lib/core/components/grid-footer-settings/grid-footer-settings.component.html","../../../projects/ngx-data-gridx/src/lib/core/components/grid-cell-host/grid-cell-host.ts","../../../projects/ngx-data-gridx/src/lib/core/components/grid-cell-host/grid-cell-host.html","../../../projects/ngx-data-gridx/src/lib/directives/resize-column.directive.ts","../../../projects/ngx-data-gridx/src/lib/core/components/grid-text-truncate/grid-text-truncate.component.ts","../../../projects/ngx-data-gridx/src/lib/core/components/grid-text-truncate/grid-text-truncate.component.html","../../../projects/ngx-data-gridx/src/lib/core/components/grid-router-link/grid-router-link.component.ts","../../../projects/ngx-data-gridx/src/lib/core/components/grid-router-link/grid-router-link.component.html","../../../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';\nimport {Type} from '@angular/core';\n\nexport class GridProperty{\n  name: string;\n  displayName: string;\n  type: GridPropertyType;\n  search?: boolean;\n  width?: string;\n  /** When true, the column shows a drag handle to resize width. Default false. */\n  columnResizable?: boolean;\n  visible?: boolean;\n  columnIndex?: number;\n  filter?: FilterDTO[] | 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?: {\n    icon: string;\n    visible?: (row: object | null | undefined) => boolean;\n    routerLink?: (row: object | null | undefined) => string;\n    tooltip: string; customHtml?: (row: object | null | undefined) => string;\n    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  component?: Type<any> | null;\n  textLimit?: number;\n  routerLink?: (row: object | null | undefined) => 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.columnResizable = params.columnResizable ?? false;\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    this.visible = params.visible || true;\n    this.columnIndex = params.columnIndex;\n    this.component = params.component || null;\n    this.textLimit = params.textLimit;\n    this.routerLink = params.routerLink || undefined;\n\n    this.setDateOptionsByDefault(params);\n    this.setRangeOptions(params);\n  }\n\n  setRangeOptions(params: GridPropertiesDTO) {\n    this.filter = (this.filter || []).map((f, i) => {\n      const raw = params.filter?.[i];\n      const rangeMax = raw?.rangeOptions?.max ?? 0;\n      const rangeMin = raw?.rangeOptions?.min ?? 0;\n\n      return {\n        ...f,\n        rangeOptions: { min: rangeMin, max: rangeMax }\n      };\n    });\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: {\n          selectSingleOption: f.multiSearchOptions?.selectSingleOption ?? false,\n          url: f.multiSearchOptions?.url ?? '',\n          id: f.multiSearchOptions?.id ?? '',\n          label: f.multiSearchOptions?.label ?? '',\n          searchTypes: f.multiSearchOptions?.searchTypes ?? []\n        },\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  columnResizable?: boolean;\n  visible?: boolean;\n  component?: Type<any>;\n  filter?: FilterDTO[] | undefined;\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; routerLink?: (row: object | null | undefined) => 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  columnIndex?: number;\n  textLimit?: number;\n  routerLink?: (row: object | null | undefined) => string;\n}\n\nexport interface FilterDTO {\n  label: string;\n  type: \"multi-search\" | \"text\" | \"checkbox\" | \"select\" | \"multi-select\" | \"date\" | \"input\" | \"range\";\n  dateOptions?: {\n    range: boolean;\n  };\n  rangeOptions?: {\n    min: number;\n    max: number;\n  };\n  multiSearchOptions?: MultiSearchOptions;\n  callback?: (columnName: string, filterType: string, value: string | number | string[]) => void;\n}\n\nexport interface MultiSearchOptions {\n  selectSingleOption?: boolean;\n  url: string;\n  id: string;\n  label: string;\n  searchTypes?: {\n    name: string;\n    label: string;\n    value: string;\n  }[];\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 pageSize = this.matPag.pageSize || 10;\r\n\r\n    const neededButtons = Math.ceil((this.appCustomLength ?? 0) / pageSize);\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.ren.removeStyle(this.elementRef.nativeElement, 'display');\r\n\r\n    this.buttonsRef = [this.createButton(0)];\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    this.buttonsRef = [...this.buttonsRef, this.createButton(neededButtons - 1)];\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 {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {NgClass, NgStyle} from '@angular/common';\r\nimport {MatMenu, MatMenuTrigger} from \"@angular/material/menu\";\r\nimport {Router, RouterLink} from \"@angular/router\";\r\nimport {MatProgressSpinner} from '@angular/material/progress-spinner';\r\nimport {MatIcon} from '@angular/material/icon';\r\n\r\n@Component({\r\n  selector: 'app-invoke-btn',\r\n  standalone: true,\r\n  imports: [\r\n    NgStyle,\r\n    NgClass,\r\n    MatMenuTrigger,\r\n    MatMenu,\r\n    RouterLink,\r\n    MatProgressSpinner,\r\n    MatIcon,\r\n  ],\r\n  templateUrl: './invoke-btn.component.html',\r\n  styleUrl: './invoke-btn.component.scss'\r\n})\r\nexport class InvokeBtnComponent {\r\n  @Input() additionalStyles?: Partial<CSSStyleDeclaration>;\r\n  @Output() modalRequested = new EventEmitter<string>();\r\n\r\n  @Input() isDisabled = false;\r\n  @Input() isHidden = false;\r\n\r\n  @Input() type: ButtonType['type'] = 'button';\r\n  @Input() iconName = '';\r\n\r\n  @Input() iconWidth = 12;\r\n  @Input() iconHeight = 12;\r\n\r\n  @Input() target = '';\r\n  @Input() link = '';\r\n  @Input() dropdownItems: DropdownItemsType[] = [];\r\n  @Input() outlined = false;\r\n\r\n  protected isLoading = false;\r\n\r\n  constructor(private router: Router) {\r\n  }\r\n\r\n  openLink(path?: string, target?: string, modalId?: string) {\r\n    if (modalId) {\r\n      this.modalRequested.emit(modalId);\r\n      return;\r\n    }\r\n\r\n    const pathUrl = path || this.link;\r\n\r\n    if (pathUrl) {\r\n      if (target === '_blank') {\r\n        window.open(pathUrl, '_blank');\r\n      } else if (target === '_self') {\r\n        this.router.navigateByUrl(pathUrl);\r\n      } else {\r\n        window.location.href = pathUrl;\r\n      }\r\n    }\r\n  }\r\n\r\n  showLoader(): void {\r\n    this.isLoading = true;\r\n  }\r\n\r\n  hideLoader(): void {\r\n    this.isLoading = false;\r\n  }\r\n}\r\n\r\nexport interface ButtonType {\r\n  type: 'button' | 'link' | 'dropdown';\r\n}\r\n\r\nexport interface DropdownItemsType {\r\n  label: string,\r\n  path?: string,\r\n  target?: string,\r\n  component?: string,\r\n  data?: DropdownDataType,\r\n  modalId?: string;\r\n}\r\n\r\nexport interface DropdownDataType {\r\n  url: string,\r\n  data: object,\r\n  grid_name: string\r\n}\r\n","<!--  target=_blank for old billing | target=_self for new ui  -->\r\n\r\n<button\r\n  class=\"btn button\"\r\n  [matMenuTriggerFor]=\"dropdownItems.length ? dropdownMenu : null\"\r\n  [ngStyle]=\"additionalStyles\"\r\n  [disabled]=\"isDisabled\"\r\n  [ngClass]=\"{ hidden: isHidden, loading: isLoading }\"\r\n  (click)=\"!dropdownItems.length && target !== '_self' ? openLink(link, target) : null\"\r\n>\r\n  <a\r\n    class=\"full-link\"\r\n    [routerLink]=\"!dropdownItems.length && target === '_self' ? link : null\">\r\n  </a>\r\n\r\n  @if(isLoading){\r\n    <div class=\"btn-spinner\">\r\n      <mat-progress-spinner\r\n        diameter=\"18\"\r\n        mode=\"indeterminate\"\r\n      ></mat-progress-spinner>\r\n    </div>\r\n  }\r\n\r\n  <span class=\"button-content\">\r\n        <ng-content></ng-content>\r\n        @if (iconName && !isLoading) {\r\n          <mat-icon [fontSet]=\"outlined ? 'material-symbols-outlined' : 'material-symbols-outlined'\">\r\n            {{ iconName }}\r\n          </mat-icon>\r\n        }\r\n      </span>\r\n</button>\r\n\r\n<mat-menu #dropdownMenu=\"matMenu\">\r\n  @for(item of dropdownItems; track $index){\r\n    <button class=\"btn btn__dropdown\" (click)=\"openLink(item.path, item.target, item.modalId)\">\r\n      {{ item.label }}\r\n    </button>\r\n  }\r\n</mat-menu>\r\n","import {Component, inject, OnInit, signal, WritableSignal} from '@angular/core';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {MatButton, MatIconButton} from '@angular/material/button';\r\nimport {MAT_DIALOG_DATA, MatDialogClose, MatDialogRef} from '@angular/material/dialog';\r\nimport {MatTooltip} from '@angular/material/tooltip';\r\nimport {GridProperty, GridPropertyType} from '../../entity/grid-property';\r\nimport {\r\n  CdkDrag,\r\n  CdkDragDrop,\r\n  CdkDragHandle,\r\n  CdkDropList,\r\n  moveItemInArray,\r\n  transferArrayItem\r\n} from '@angular/cdk/drag-drop';\r\nimport {animate, query, stagger, style, transition, trigger} from '@angular/animations';\r\n\r\n@Component({\r\n  selector: 'grid-columns-modal-dialog',\r\n  imports: [\r\n    MatIcon,\r\n    MatIconButton,\r\n    MatDialogClose,\r\n    MatTooltip,\r\n    CdkDropList,\r\n    CdkDrag,\r\n    CdkDragHandle,\r\n    MatButton\r\n  ],\r\n  animations: [\r\n    trigger('flyFromLeft', [\r\n      transition(':enter', [\r\n        style({ opacity: 0, transform: 'translateX(-24px) scale(.98)' }),\r\n        animate('180ms cubic-bezier(.2,.8,.2,1)', style({ opacity: 1, transform: 'none' }))\r\n      ])\r\n    ]),\r\n    trigger('flyFromRight', [\r\n      transition(':enter', [\r\n        style({ opacity: 0, transform: 'translateX(24px) scale(.98)' }),\r\n        animate('180ms cubic-bezier(.2,.8,.2,1)', style({ opacity: 1, transform: 'none' }))\r\n      ])\r\n    ]),\r\n    trigger('staggerList', [\r\n      transition('* => *', [\r\n        query(':enter', [\r\n          style({ opacity: 0, transform: 'translateY(-6px)' }),\r\n          stagger(40, animate('150ms cubic-bezier(.2,.8,.2,1)', style({ opacity: 1, transform: 'none' })))\r\n        ], { optional: true })\r\n      ])\r\n    ])\r\n  ],\r\n  templateUrl: './grid-columns-modal-dialog.component.html',\r\n  styleUrl: './grid-columns-modal-dialog.component.scss'\r\n})\r\nexport class GridColumnsModalDialogComponent implements OnInit{\r\n  private data = inject(MAT_DIALOG_DATA);\r\n\r\n  active: WritableSignal<GridProperty[]> = signal<GridProperty[]>([]);\r\n  inactive: WritableSignal<GridProperty[]> = signal<GridProperty[]>([]);\r\n  storageKey = signal<string>('');\r\n  massMove = signal(false);\r\n\r\n  canEnterInactive = (drag: CdkDrag<GridProperty>) => {\r\n    const item = drag.data as GridProperty;\r\n    return item.type !== GridPropertyType.Actions;\r\n  };\r\n\r\n\r\n  constructor(\r\n    public dialogRef: MatDialogRef<GridColumnsModalDialogComponent>\r\n  ) {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.storageKey.set(this.data.storageKey);\r\n    if ('active' in this.data && 'inactive' in this.data) {\r\n      this.active = this.data.active;\r\n      this.inactive = this.data.inactive;\r\n    } else if ('columns' in this.data) {\r\n      const all = this.data.columns() as GridProperty[];\r\n      this.active.set(all.filter(c => c.visible !== false));\r\n      this.inactive.set(all.filter(c => c.visible === false));\r\n    }\r\n\r\n    this.restoreData();\r\n  }\r\n\r\n  restoreData(){\r\n    try {\r\n      const item = localStorage.getItem(this.storageKey());\r\n      if(!item){\r\n        return;\r\n      }\r\n\r\n      const data = JSON.parse(item)?.columns as GridProperty[];\r\n\r\n      this.inactive.set(data.filter(c => c.visible === false));\r\n      this.active.set(data.filter(c => c.visible !== false));\r\n    } catch (e){\r\n      console.error(e);\r\n    }\r\n\r\n    return this;\r\n  }\r\n\r\n  onDropActive(event: CdkDragDrop<GridProperty[]>) {\r\n    this.handleDrop(event, this.active, this.inactive);\r\n  }\r\n\r\n  onDropInactive(event: CdkDragDrop<GridProperty[]>) {\r\n    const item = event.item.data as GridProperty;\r\n    if (item.type === GridPropertyType.Actions) {\r\n      return;\r\n    }\r\n\r\n    this.handleDrop(event, this.inactive, this.active);\r\n  }\r\n\r\n  private handleDrop(\r\n    event: CdkDragDrop<GridProperty[]>,\r\n    targetSignal: WritableSignal<GridProperty[]>,\r\n    otherSignal: WritableSignal<GridProperty[]>\r\n  ) {\r\n    const target = [...event.container.data];\r\n    const source = [...event.previousContainer.data];\r\n\r\n    if (event.previousContainer === event.container) {\r\n      moveItemInArray(target, event.previousIndex, event.currentIndex);\r\n      targetSignal.set(target);\r\n    } else {\r\n      transferArrayItem(source, target, event.previousIndex, event.currentIndex);\r\n      targetSignal.set(target);\r\n      otherSignal.set(source);\r\n    }\r\n\r\n    if (targetSignal === this.active || otherSignal === this.active) {\r\n      const all = this.active();\r\n      const normal = [\r\n        ...all.filter(c => c.type !== GridPropertyType.Actions),\r\n        ...all.filter(c => c.type === GridPropertyType.Actions)\r\n      ];\r\n      this.active.set(normal);\r\n    }\r\n  }\r\n\r\n  onSaveSettings(){\r\n    const key = this.storageKey();\r\n    if (!key) return;\r\n    const columns: GridProperty[] = [];\r\n\r\n    this.active().forEach((c: GridProperty, i: number) => {\r\n      c.visible = true;\r\n      c.columnIndex = i;\r\n      columns.push(c);\r\n    });\r\n\r\n    this.inactive().forEach((c: GridProperty) => {\r\n      c.visible = false;\r\n      columns.push(c);\r\n    });\r\n\r\n    this.dialogRef.close([...columns]);\r\n\r\n    const prevRaw = localStorage.getItem(key);\r\n    const prev    = prevRaw ? JSON.parse(prevRaw) : {};\r\n    const next    = { ...prev, columns };\r\n    localStorage.setItem(key, JSON.stringify(next));\r\n  }\r\n\r\n  setAllColumnsActive() {\r\n    this.massMove.set(true);\r\n    const active = [...this.active()];\r\n    const inactive = [...this.inactive()];\r\n\r\n    const seen = new Set(active.map(c => c.name));\r\n    const appended = inactive.filter(c => !seen.has(c.name));\r\n\r\n    this.active.set([...active, ...appended]);\r\n    this.inactive.set([]);\r\n    setTimeout(() => this.massMove.set(false), 240);\r\n\r\n    this.active.set([\r\n      ...this.active().filter(c => c.type !== GridPropertyType.Actions),\r\n      ...this.active().filter(c => c.type === GridPropertyType.Actions)\r\n    ]);\r\n\r\n    return this;\r\n  }\r\n\r\n  setAllColumnsInactive() {\r\n    this.massMove.set(true);\r\n    const active = [...this.active()];\r\n    const inactive = [...this.inactive()];\r\n\r\n    const cannotHide = active.filter(c => c.type === GridPropertyType.Actions);\r\n    const canHide    = active.filter(c => c.type !== GridPropertyType.Actions);\r\n\r\n    const seen = new Set(inactive.map(c => c.name));\r\n    const mergedInactive = [...inactive, ...canHide.filter(c => !seen.has(c.name))];\r\n\r\n    this.active.set(cannotHide);\r\n    this.inactive.set(mergedInactive);\r\n\r\n    setTimeout(() => this.massMove.set(false), 240);\r\n\r\n    this.active.set([\r\n      ...this.active().filter(c => c.type !== GridPropertyType.Actions),\r\n      ...this.active().filter(c => c.type === GridPropertyType.Actions)\r\n    ]);\r\n\r\n    return this;\r\n  }\r\n\r\n  protected readonly GridPropertyType = GridPropertyType;\r\n}\r\n\r\n","<section class=\"grid-columns-settings\">\r\n  <header class=\"grid-columns-settings__header\">\r\n    <div class=\"grid-columns-settings__title\"><h2>Налаштування колонок</h2>\r\n      <mat-icon\r\n        [matTooltip]=\"'Перетягуйте колонки, щоб змінити їх порядок або приховати. Колонки з правого списку відображаються в таблиці. Деякі колонки (наприклад, Дії) не можна приховати.'\"\r\n        matTooltipPosition=\"below\" fontSet=\"material-symbols-outlined\"> error\r\n      </mat-icon>\r\n    </div>\r\n    <button mat-icon-button class=\"grid-columns-settings__close\"\r\n            [mat-dialog-close]=\"true\"\r\n            type=\"button\"\r\n            aria-label=\"Close\">\r\n      <mat-icon>close</mat-icon>\r\n    </button>\r\n  </header>\r\n  <div class=\"grid-columns-settings__body\">\r\n    <div class=\"grid-columns-settings__body__wrapper\">\r\n\r\n      <div class=\"grid-columns-settings__body__wrapper__active\">\r\n        <p> Неактивні колонки </p>\r\n        <div class=\"columns\"\r\n             cdkDropList\r\n             #inactiveList=\"cdkDropList\"\r\n             [cdkDropListData]=\"inactive()\"\r\n             [cdkDropListEnterPredicate]=\"canEnterInactive\"\r\n             [cdkDropListConnectedTo]=\"[activeList]\"\r\n             [@.disabled]=\"!massMove()\"\r\n             [@staggerList]=\"inactive().length\"\r\n             (cdkDropListDropped)=\"onDropInactive($event)\">\r\n          @for (column of inactive(); track column) {\r\n            @if(column.type !== GridPropertyType.Actions){\r\n              <div class=\"column\" cdkDrag [cdkDragData]=\"column\" [@flyFromLeft]>\r\n                <mat-icon cdkDragHandle>reorder</mat-icon>\r\n                <span class=\"label\">{{ column.displayName }}</span>\r\n              </div>\r\n            }\r\n          }\r\n        </div>\r\n\r\n        <button type=\"button\" (click)=\"setAllColumnsActive()\">\r\n          Вибрати всі\r\n        </button>\r\n      </div>\r\n\r\n\r\n      <div class=\"grid-columns-settings__body__wrapper__not__active\">\r\n        <p>Активні колонки </p>\r\n        <div class=\"columns\"\r\n             cdkDropList\r\n             #activeList=\"cdkDropList\"\r\n             [cdkDropListData]=\"active()\"\r\n             [cdkDropListConnectedTo]=\"[inactiveList]\"\r\n             [@.disabled]=\"!massMove()\"\r\n             [@staggerList]=\"active().length\"\r\n             (cdkDropListDropped)=\"onDropActive($event)\">\r\n          @for (column of active(); track column) {\r\n            @if(column.type !== GridPropertyType.Actions){\r\n              <div class=\"column\" cdkDrag [cdkDragData]=\"column\" [@flyFromRight]>\r\n                <mat-icon cdkDragHandle>reorder</mat-icon>\r\n                <span class=\"label\">{{ column.displayName }}</span>\r\n              </div>\r\n            }\r\n          }\r\n        </div>\r\n\r\n        <button type=\"button\" (click)=\"setAllColumnsInactive()\">\r\n          Прибрати всі\r\n        </button>\r\n      </div>\r\n\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"grid-columns-settings__actions\">\r\n    <button type=\"button\" mat-flat-button (click)=\"onSaveSettings()\">\r\n      Зберегти зміни\r\n    </button>\r\n  </div>\r\n</section>\r\n","import {Injectable} from '@angular/core';\nimport {TDocumentDefinitions} from 'pdfmake/interfaces';\nimport * as pdfMake from 'pdfmake/build/pdfmake';\nimport * as pdfFonts from 'pdfmake/build/vfs_fonts';\nimport {GridProperty, GridPropertyType} from '../entity/grid-property';\n\n@Injectable({ providedIn: 'root' })\nexport class PdfExportService {\n  export(rows: any[], columns: GridProperty[], key: string): void {\n    const stored = this.getGridSettings(key);\n    const base = stored ?? columns;\n\n    const exportableCols = base\n      .filter(c => c.type !== GridPropertyType.Actions && c.visible && !c.component)\n      .map(c => {\n        const runtime = columns.find(x => x.name === c.name) ?? c;\n        return { ...c, callback: (runtime as any).callback } as GridProperty & { callback?: (row: object | null | undefined) => string | undefined };\n      });\n\n    if (!exportableCols.length) return;\n\n    const headers = exportableCols.map(c => c.displayName ?? c.name);\n\n    const body = [\n      headers.map(h => ({ text: h, bold: true, noWrap: false })),\n      ...rows.map(row =>\n        exportableCols.map(col => {\n          const raw = col.callback ? col.callback(row) : row?.[col.name];\n          const text = raw != null ? String(raw) : '';\n\n          return {\n            text: this.shouldBreakAll(text) ? this.breakAll(text, 28) : text,\n            noWrap: false,\n          };\n        })\n      ),\n    ];\n\n    const widths = Array(exportableCols.length).fill('auto');\n    this.createPdf({\n      pageMargins: [5, 20, 5, 20],\n      content: [\n        {\n          columns: [\n            { width: '*', text: '' },\n            {\n              width: 'auto',\n              table: {\n                headerRows: 1,\n                widths,\n                body,\n              },\n              layout: {\n                hLineWidth: () => 0.5,\n                vLineWidth: () => 0.5,\n                hLineColor: () => '#343A40',\n                vLineColor: () => '#343A40',\n                paddingLeft: () => 4,\n                paddingRight: () => 4,\n                paddingTop: () => 3,\n                paddingBottom: () => 3,\n              },\n              margin: [0, 0, 0, 0],\n            },\n            { width: '*', text: '' },\n          ],\n          columnGap: 0\n        },\n      ],\n      defaultStyle: { fontSize: 10 },\n    });\n  }\n\n  createPdf(data: TDocumentDefinitions){\n    pdfMake.createPdf(data, undefined, undefined, pdfFonts.vfs).open();\n  }\n\n  private getGridSettings(key: string): GridProperty[] | null {\n    try {\n      const raw = localStorage.getItem(key);\n      return raw ? JSON.parse(raw)?.columns : null;\n    } catch {\n      return null;\n    }\n  }\n\n  private breakAll(value: unknown, chunk = 28): string {\n    const s = value == null ? '' : String(value);\n    return s ? s.replace(new RegExp(`(.{${chunk}})`, 'g'), '$1\\u200B') : '';\n  }\n\n  private shouldBreakAll(value: unknown, threshold = 35): boolean {\n    const s = value == null ? '' : String(value);\n    if (s.length < threshold) return false;\n\n    const hasNaturalBreakpoints = /[\\s\\-_.:,;/\\\\(){}\\[\\]]/.test(s);\n    return !hasNaturalBreakpoints;\n  }\n}\n","import {Component, input, model, output} from '@angular/core';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {GridColumnsModalDialogComponent} from '../grid-columns-modal-dialog/grid-columns-modal-dialog.component';\r\nimport {MatDialog} from '@angular/material/dialog';\r\nimport {GridProperty} from '../../entity/grid-property';\r\nimport {GridTheme} from '../../../ngx-data-gridx/ngx-data-gridx.component';\r\nimport {PdfExportService} from '../../service/pdf-export.service';\r\n\r\n\r\n@Component({\r\n  selector: 'grid-footer-settings',\r\n  imports: [\r\n    MatIcon,\r\n  ],\r\n  templateUrl: './grid-footer-settings.component.html',\r\n  styleUrl: './grid-footer-settings.component.scss'\r\n})\r\nexport class GridFooterSettingsComponent {\r\n  columns = model<GridProperty[]>();\r\n  mappedColumns = input<GridProperty[]>();\r\n  rows = input<any[]>([]);\r\n  showPrint = input<boolean>(true);\r\n  showExportCsv = input<boolean>(false);\r\n  exportCsv = output<void>();\r\n  showColumnSettings = input<boolean>(true);\r\n  storageKey = input<string>('');\r\n  printData = input<(() => void) | null>(null);\r\n  theme = input<GridTheme>();\r\n\r\n  constructor(\r\n    protected dialog: MatDialog,\r\n    protected pdfExportService: PdfExportService\r\n  ) {}\r\n\r\n  showColumnSettingsModal(){\r\n    const ref = this.dialog.open(GridColumnsModalDialogComponent, {\r\n      width: '700px',\r\n      maxWidth: 'none',\r\n      data: { columns: this.columns, storageKey: this.storageKey() }\r\n    });\r\n\r\n    ref.afterClosed().subscribe((res: GridProperty[] | null) => {\r\n      if (!res) return;\r\n      if (!Array.isArray(res)) return;\r\n      this.columns.set(res);\r\n    });\r\n\r\n    return this;\r\n  }\r\n\r\n  print() {\r\n    const print = this.printData();\r\n    if (print) {\r\n      print();\r\n    } else {\r\n      this.pdfExportService.export(this.rows(), this.columns()!, this.storageKey())\r\n    }\r\n  }\r\n}\r\n","<div [class]=\"'settings-' + theme()\">\r\n  @if(showColumnSettings()){\r\n    <button type=\"button\" (click)=\"showColumnSettingsModal()\" class=\"grid__footer__settings_element\">\r\n      <mat-icon fontSet=\"material-symbols-outlined\">\r\n        settings\r\n      </mat-icon>\r\n      <span>\r\n        Налаштування колонок\r\n      </span>\r\n    </button>\r\n  }\r\n\r\n  @if(showPrint()){\r\n    <button type=\"button\"\r\n            (click)=\"print()\"\r\n            class=\"grid__footer__settings_element\" >\r\n      <mat-icon fontSet=\"material-symbols-outlined\">\r\n        print\r\n      </mat-icon>\r\n      <span>\r\n        Друк\r\n      </span>\r\n    </button>\r\n  }\r\n\r\n  @if(showExportCsv()){\r\n    <button type=\"button\"\r\n            (click)=\"exportCsv.emit()\"\r\n            class=\"grid__footer__settings_element\">\r\n      <mat-icon fontSet=\"material-symbols-outlined\">\r\n        arrow_downward\r\n      </mat-icon>\r\n      <span>\r\n        Експорт CSV\r\n      </span>\r\n    </button>\r\n  }\r\n</div>\r\n","import {\r\n  Component,\r\n  ComponentRef,\r\n  input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  SimpleChanges,\r\n  Type,\r\n  ViewContainerRef\r\n} from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'grid-cell-host',\r\n  imports: [],\r\n  templateUrl: './grid-cell-host.html',\r\n  styleUrl: './grid-cell-host.scss'\r\n})\r\nexport class GridCellHost implements OnChanges, OnDestroy{\r\n  component = input<Type<any> | undefined>();\r\n  row = input<any>();\r\n\r\n  private ref?: ComponentRef<any>;\r\n\r\n  constructor(private vcr: ViewContainerRef) {}\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    const component = this.component();\r\n    if (!component) {\r\n      this.clear(); return;\r\n    }\r\n\r\n    if (!this.ref || this.ref.componentType !== component) {\r\n      this.clear();\r\n      this.ref = this.vcr.createComponent(component);\r\n    }\r\n\r\n    this.ref.setInput?.('row', this.row());\r\n    this.ref.changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.clear();\r\n  }\r\n\r\n  private clear() {\r\n    this.vcr.clear();\r\n    this.ref?.destroy();\r\n    this.ref = undefined;\r\n  }\r\n}\r\n","","import {\r\n  Directive,\r\n  OnInit,\r\n  OnDestroy,\r\n  Renderer2,\r\n  ElementRef,\r\n  Inject, input,\r\n} from \"@angular/core\";\r\nimport { DOCUMENT } from \"@angular/common\";\r\n\r\n/**\r\n * Column resize handle. mat-sort-header listens to (click) on &lt;th&gt;; the synthetic click\r\n * after resize must be stopped in the capture phase on document. The listener must be added\r\n * synchronously when the user presses the handle (before mouseup), not in setTimeout(0).\r\n */\r\n@Directive({\r\n  selector: \"[resizeColumn]\",\r\n})\r\nexport class ResizeColumnDirective implements OnInit, OnDestroy {\r\n  /** Must match template binding name `[resizeColumn]`. */\r\n  resizeColumn = input<boolean>(false);\r\n\r\n  index = input<number>(0);\r\n\r\n  private startX = 0;\r\n\r\n  private startWidth = 0;\r\n\r\n  private readonly column: HTMLElement;\r\n\r\n  private resizerEl: HTMLElement | null = null;\r\n\r\n  private table!: HTMLElement;\r\n\r\n  private pressed = false;\r\n\r\n  private activePointerId: number | null = null;\r\n\r\n  private unlistenPointerDown?: () => void;\r\n\r\n  private unlistenResizerClick?: () => void;\r\n\r\n  private pendingClickSuppress: ((event: Event) => void) | null = null;\r\n\r\n  private suppressFallbackTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n  private unlistenMove?: () => void;\r\n\r\n  private unlistenUp?: () => void;\r\n\r\n  private unlistenCancel?: () => void;\r\n\r\n  constructor(\r\n    private renderer: Renderer2,\r\n    private el: ElementRef<HTMLElement>,\r\n    @Inject(DOCUMENT) private document: Document\r\n  ) {\r\n    this.column = this.el.nativeElement;\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (!this.resizeColumn()) {\r\n      return;\r\n    }\r\n\r\n    this.table = this.column.closest(\"table\") as HTMLElement;\r\n    if (!this.table) {\r\n      return;\r\n    }\r\n\r\n    const resizer = this.renderer.createElement(\"span\");\r\n    this.resizerEl = resizer;\r\n    this.renderer.addClass(resizer, \"resize-holder\");\r\n    this.renderer.setAttribute(resizer, \"role\", \"separator\");\r\n    this.renderer.setAttribute(resizer, \"aria-orientation\", \"vertical\");\r\n    this.renderer.setAttribute(resizer, \"aria-hidden\", \"true\");\r\n    this.renderer.setStyle(resizer, \"position\", \"absolute\");\r\n    this.renderer.setStyle(resizer, \"right\", \"0\");\r\n    this.renderer.setStyle(resizer, \"top\", \"0\");\r\n    this.renderer.setStyle(resizer, \"bottom\", \"0\");\r\n    this.renderer.setStyle(resizer, \"width\", \"12px\");\r\n    this.renderer.setStyle(resizer, \"cursor\", \"col-resize\");\r\n    this.renderer.setStyle(resizer, \"z-index\", \"50\");\r\n    this.renderer.setStyle(resizer, \"touch-action\", \"none\");\r\n    this.renderer.setStyle(resizer, \"box-sizing\", \"border-box\");\r\n    this.renderer.appendChild(this.column, resizer);\r\n\r\n    this.unlistenPointerDown = this.renderer.listen(\r\n      resizer,\r\n      \"pointerdown\",\r\n      this.onPointerDown\r\n    );\r\n\r\n    this.unlistenResizerClick = this.renderer.listen(\r\n      resizer,\r\n      \"click\",\r\n      this.onResizerClick\r\n    );\r\n  }\r\n\r\n  private readonly onResizerClick = (event: Event) => {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    event.stopImmediatePropagation();\r\n  };\r\n\r\n  private readonly onPointerDown = (event: PointerEvent) => {\r\n    if (event.button !== 0) {\r\n      return;\r\n    }\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    event.stopImmediatePropagation();\r\n\r\n    this.armNextClickSortSuppress();\r\n\r\n    this.activePointerId = event.pointerId;\r\n    try {\r\n      (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\r\n    } catch {\r\n      this.activePointerId = null;\r\n    }\r\n\r\n    this.pressed = true;\r\n    this.startX = event.pageX;\r\n    this.startWidth = this.column.offsetWidth;\r\n    this.renderer.addClass(this.table, \"resizing\");\r\n    this.renderer.addClass(this.table, \"grid__table--col-resize\");\r\n\r\n    this.clearDocumentListeners();\r\n    this.unlistenMove = this.renderer.listen(\r\n      this.document,\r\n      \"pointermove\",\r\n      this.onPointerMove as (e: Event) => boolean | void\r\n    );\r\n    this.unlistenUp = this.renderer.listen(\r\n      this.document,\r\n      \"pointerup\",\r\n      this.onPointerUp as (e: Event) => boolean | void\r\n    );\r\n    this.unlistenCancel = this.renderer.listen(\r\n      this.document,\r\n      \"pointercancel\",\r\n      this.onPointerCancel as (e: Event) => boolean | void\r\n    );\r\n  };\r\n\r\n  private readonly onPointerMove = (event: PointerEvent) => {\r\n    if (!this.pressed) {\r\n      return;\r\n    }\r\n    if (this.activePointerId != null && event.pointerId !== this.activePointerId) {\r\n      return;\r\n    }\r\n    this.applyWidth(event.pageX);\r\n  };\r\n\r\n  private applyWidth(pageX: number) {\r\n    const width = Math.max(40, this.startWidth + (pageX - this.startX));\r\n    const widthPx = `${width}px`;\r\n\r\n    const rows = this.table.querySelectorAll(\r\n      \"tbody tr.mat-mdc-row, tbody tr[mat-row]\"\r\n    );\r\n    rows.forEach((row) => {\r\n      const cells = row.querySelectorAll(\"td.mat-mdc-cell, td[mat-cell]\");\r\n      const cell = cells.item(this.index());\r\n      if (cell) {\r\n        this.renderer.setStyle(cell, \"width\", widthPx);\r\n        this.renderer.setStyle(cell, \"min-width\", widthPx);\r\n        this.renderer.setStyle(cell, \"max-width\", widthPx);\r\n        this.renderer.setStyle(cell, \"box-sizing\", \"border-box\");\r\n      }\r\n    });\r\n\r\n    this.renderer.setStyle(this.column, \"width\", widthPx);\r\n    this.renderer.setStyle(this.column, \"min-width\", widthPx);\r\n    this.renderer.setStyle(this.column, \"max-width\", widthPx);\r\n    this.renderer.setStyle(this.column, \"box-sizing\", \"border-box\");\r\n  }\r\n\r\n  private readonly onPointerUp = (event: PointerEvent) => {\r\n    if (this.activePointerId != null && event.pointerId !== this.activePointerId) {\r\n      return;\r\n    }\r\n    this.finishPointerSession(event.pointerId);\r\n  };\r\n\r\n  private readonly onPointerCancel = (event: PointerEvent) => {\r\n    if (this.activePointerId != null && event.pointerId !== this.activePointerId) {\r\n      return;\r\n    }\r\n    this.finishPointerSession(event.pointerId);\r\n  };\r\n\r\n  private finishPointerSession(pointerId: number) {\r\n    if (!this.pressed) {\r\n      return;\r\n    }\r\n    this.pressed = false;\r\n    this.renderer.removeClass(this.table, \"resizing\");\r\n\r\n    if (this.resizerEl && this.activePointerId != null) {\r\n      try {\r\n        if (this.resizerEl.hasPointerCapture(pointerId)) {\r\n          this.resizerEl.releasePointerCapture(pointerId);\r\n        }\r\n      } catch {\r\n        /* ignore */\r\n      }\r\n    }\r\n    this.activePointerId = null;\r\n\r\n    this.clearDocumentListeners();\r\n    this.scheduleSuppressFallbackClear();\r\n  }\r\n\r\n  /**\r\n   * Must run synchronously on pointerdown, before pointerup, so it is registered when the\r\n   * browser dispatches the follow-up click.\r\n   */\r\n  private getClickSuppressRoot(): EventTarget {\r\n    return this.document.defaultView ?? this.document;\r\n  }\r\n\r\n  private armNextClickSortSuppress(): void {\r\n    this.clearSuppressArm();\r\n\r\n    const handler = (e: Event) => {\r\n      this.clearSuppressArm();\r\n      const target = e.target as Node | null;\r\n      if (target && this.column.contains(target)) {\r\n        e.preventDefault();\r\n        e.stopImmediatePropagation();\r\n      }\r\n    };\r\n    this.pendingClickSuppress = handler;\r\n    this.getClickSuppressRoot().addEventListener(\"click\", handler, {\r\n      capture: true,\r\n      once: true,\r\n    });\r\n  }\r\n\r\n  private clearSuppressArm(): void {\r\n    if (this.suppressFallbackTimer != null) {\r\n      clearTimeout(this.suppressFallbackTimer);\r\n      this.suppressFallbackTimer = null;\r\n    }\r\n    if (this.pendingClickSuppress) {\r\n      this.getClickSuppressRoot().removeEventListener(\r\n        \"click\",\r\n        this.pendingClickSuppress,\r\n        true\r\n      );\r\n      this.pendingClickSuppress = null;\r\n    }\r\n  }\r\n\r\n  private scheduleSuppressFallbackClear(): void {\r\n    if (this.suppressFallbackTimer != null) {\r\n      clearTimeout(this.suppressFallbackTimer);\r\n    }\r\n    this.suppressFallbackTimer = setTimeout(() => {\r\n      this.clearSuppressArm();\r\n      this.suppressFallbackTimer = null;\r\n    }, 800);\r\n  }\r\n\r\n  private clearDocumentListeners() {\r\n    if (this.unlistenMove) {\r\n      this.unlistenMove();\r\n      this.unlistenMove = undefined;\r\n    }\r\n    if (this.unlistenUp) {\r\n      this.unlistenUp();\r\n      this.unlistenUp = undefined;\r\n    }\r\n    if (this.unlistenCancel) {\r\n      this.unlistenCancel();\r\n      this.unlistenCancel = undefined;\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.clearSuppressArm();\r\n    this.clearDocumentListeners();\r\n    if (this.unlistenResizerClick) {\r\n      this.unlistenResizerClick();\r\n      this.unlistenResizerClick = undefined;\r\n    }\r\n    if (this.unlistenPointerDown) {\r\n      this.unlistenPointerDown();\r\n      this.unlistenPointerDown = undefined;\r\n    }\r\n    if (this.pressed) {\r\n      this.pressed = false;\r\n      this.renderer.removeClass(this.table, \"resizing\");\r\n    }\r\n  }\r\n}\r\n","import {Component, input, signal, ViewEncapsulation} from '@angular/core';\nimport {MatIcon} from '@angular/material/icon';\n\n@Component({\n    selector: 'grid-text-truncate',\n    standalone: true,\n    imports: [MatIcon],\n    templateUrl: './grid-text-truncate.component.html',\n    styleUrl: './grid-text-truncate.component.scss',\n    encapsulation: ViewEncapsulation.None,\n})\nexport class GridTextTruncateComponent {\n    text = input.required<string>();\n    limit = input.required<number>();\n    linked = input(false);\n\n    expanded = signal(false);\n\n    toggle(event: MouseEvent): void {\n        if (this.linked() && this.expanded()) {\n            return;\n        }\n\n        event.preventDefault();\n        event.stopPropagation();\n        this.expanded.set(!this.expanded());\n    }\n}\n","<span class=\"grid-text-truncate\"\n      [class.grid-text-truncate--open]=\"expanded()\"\n      (click)=\"toggle($event)\">\n  {{ expanded() ? text() : text().substring(0, limit()) + '…' }}\n  <mat-icon class=\"grid-text-truncate__chevron\" fontSet=\"material-symbols-outlined\">\n    {{ expanded() ? 'expand_more' : 'chevron_right' }}\n  </mat-icon>\n</span>\n","import {Component, input, ViewEncapsulation} from '@angular/core';\nimport {RouterLink} from '@angular/router';\nimport {GridTextTruncateComponent} from '../grid-text-truncate/grid-text-truncate.component';\n\n@Component({\n  selector: 'grid-router-link',\n  standalone: true,\n  imports: [RouterLink, GridTextTruncateComponent],\n  templateUrl: './grid-router-link.component.html',\n  styleUrl: './grid-router-link.component.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class GridRouterLinkComponent {\n  link = input.required<string>();\n  text = input.required<string>();\n  textLimit = input<number | undefined>();\n}\n","<a class=\"grid-router-link\" [routerLink]=\"link()\">\n  @if (textLimit() && text().length > textLimit()!) {\n    <grid-text-truncate [text]=\"text()\" [limit]=\"textLimit()!\" [linked]=\"true\" />\n  } @else {\n    <span [innerHTML]=\"text()\"></span>\n  }\n</a>\n","import {\n  AfterViewInit, ChangeDetectorRef,\n  Component, ContentChild, effect, ElementRef, HostListener, input,\n  model, OnDestroy, OnInit, QueryList, signal, TemplateRef, Type,\n  ViewChild, ViewChildren, ViewContainerRef\n} from '@angular/core';\nimport {GridProperty, GridPropertyType, MultiSearchOptions} 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 {finalize, 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 {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';\nimport {InvokeBtnComponent} from '../core/components/invoke-btn/invoke-btn.component';\nimport {GridFooterSettingsComponent} from '../core/components/grid-footer-settings/grid-footer-settings.component';\nimport {GridCellHost} from '../core/components/grid-cell-host/grid-cell-host';\nimport {MatSlider, MatSliderRangeThumb} from '@angular/material/slider';\nimport {MatRadioButton, MatRadioGroup} from '@angular/material/radio';\nimport { RouterLink } from '@angular/router';\nimport {ResizeColumnDirective} from '../directives/resize-column.directive';\nimport {GridTextTruncateComponent} from '../core/components/grid-text-truncate/grid-text-truncate.component';\nimport {GridRouterLinkComponent} from '../core/components/grid-router-link/grid-router-link.component';\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    InvokeBtnComponent,\n    GridFooterSettingsComponent,\n    GridCellHost,\n    MatSliderRangeThumb,\n    MatSlider,\n    MatRadioGroup,\n    MatRadioButton,\n    RouterLink,\n    ResizeColumnDirective,\n    GridTextTruncateComponent,\n    GridRouterLinkComponent,\n  ],\n  providers: [provideNativeDateAdapter()],\n  templateUrl: './ngx-data-gridx.component.html',\n  styleUrl: './ngx-data-gridx.component.scss',\n})\n\nexport class NgxDataGridx implements OnInit, AfterViewInit, OnDestroy {\n  url = model<string | undefined>(\"\");\n  exportCsvUrl = model<string | undefined>();\n  data = model<GridProperty[]>([]);\n  limit = model<number>(10);\n  sort = model<string>('asc');\n  grid_name = model<string | undefined>();\n  sidx = model<string | undefined>();\n  multiselect = model<boolean>(false);\n  showFilters = model<boolean>(true);\n  subUrlParams = model<{ paramName: string; columnName: string }[] | null>();\n  currentRow = model<object | null | undefined>();\n  showHistoryFilters = model<boolean>(true);\n  key = model<string | null>(null);\n  expandedElement = model<object | null | undefined>();\n  theme = input<GridTheme>(GridTheme.BROAD);\n  noDataPlaceholder = input<string>(\n    'Даних поки що немає, але не хвилюйтесь вони скоро з\\'являться.'\n  );\n  parentGridFilters = input<{\n    search: Record<string, string>;\n    filters: Record<string, Record<string, AppliedFiltersDTO>>;\n  }>({search: {}, filters: {}});\n  autoRefreshIntervalSec = input<number | null>(null);\n  disablePagination = input<boolean>(false);\n  lazyLoad = input<boolean>(false);\n  detailComponent = input<Type<any> | undefined>();\n  openAllToggleDetails = input<boolean>(false);\n  showPrint = input<boolean>(true);\n  showColumnSettings = input<boolean>(true);\n  print = input<(() => void) | null>(null);\n  currentSearchType: string | null = null;\n\n  /** detail accordion (dblclick) */\n  detailExpandedElement: any | null = null;\n\n  @ContentChild(TemplateRef) detailTemplate?: TemplateRef<any>;\n  @ViewChildren('detailContainer', {read: ViewContainerRef})\n  detailContainers!: QueryList<ViewContainerRef>;\n\n  private static loadedUrls = new Set<string>();\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  private expandedDetailIds = new Set<string>();\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  protected mappingsColumns = new Map<string, GridProperty>();\n  protected baseColumns: GridProperty[] = [];\n  private rangeValues: Record<string, { min: number; max: number }> = {};\n\n  pendingMultiSearch: Record<string, {\n    ids: number[];\n    labels: string[];\n    callback?: (columnName: string, filterType: string, value: string | number | string[]) => void;\n    options: MultiSearchOptions | null;\n  }> = {};\n  private pendingCheckboxColumns = new Set<string>();\n\n  searchType = signal<{\n    column: string,\n    value: string,\n  } | null>(null);\n\n  constructor(private http: HttpClient,\n              private cdr: ChangeDetectorRef,\n              private elementRef: ElementRef\n  ) {\n    effect(() => {\n      const data = this.data();\n      const incoming = this.data();\n\n      if (!this.baseColumns.length && incoming?.length) {\n        this.baseColumns = incoming;\n      }\n\n      this.mappingsColumns = new Map(this.baseColumns.map(c => [c.name, c]));\n\n      let items: GridProperty[] | undefined = undefined;\n      try {\n        const raw = localStorage.getItem(this.storageKey);\n        if (raw) {\n          const parsed = JSON.parse(raw);\n          items = parsed?.columns as GridProperty[] | undefined;\n        }\n      } catch {\n      }\n\n      this.reorderColumnsData(items ?? data);\n    });\n  }\n\n  rows: MatTableDataSource<object> = new MatTableDataSource<object>([]);\n  dateFilters: Record<string, FormGroup> = {};\n  filterInputValues: Record<string, string> = {};\n  filterMultiSelectValues: 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.loadFilters();\n\n    if (!this.lazyLoad()) {\n      this.loadData();\n    }\n\n    this.setDisplayedColumns();\n    this.initSearch();\n    this.rows.sort = this.sortTable;\n    this.createDateFilter();\n    this.restoreFilters();\n    this.initCustomFilterSearch();\n    this.startAutoRefresh();\n  }\n\n  ngAfterViewInit() {\n    const url = this.url();\n    if (this.lazyLoad() && url && !NgxDataGridx.loadedUrls.has(url)) {\n      this.runLazyLoad();\n    }\n\n    if (this.disablePagination()) return;\n\n    if (this.paginator) {\n      this.limit.set(this.paginator.pageSize);\n    }\n\n    this.paginator?.page.subscribe((event) => {\n      this.limit.set(event.pageSize);\n      this.loadData(event.pageIndex + 1, event.pageSize);\n\n      if (this.openAllToggleDetails()) {\n        this.cdr.detectChanges();\n        this.setAllDetailsOpened();\n      }\n    });\n  }\n\n  private startAutoRefresh(): void {\n    const autoRefreshIntervalSec = this.autoRefreshIntervalSec();\n    if (autoRefreshIntervalSec && autoRefreshIntervalSec > 0) {\n      this.autoRefreshSub = interval(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  runLazyLoad() {\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach(entry => {\n        if (entry.isIntersecting) {\n          this.loadData();\n          NgxDataGridx.loadedUrls.add(this.url()!);\n          observer.disconnect();\n        }\n      });\n    }, {\n      rootMargin: '100px',\n      threshold: 0.1\n    });\n\n    observer.observe(this.elementRef.nativeElement);\n  }\n\n  showLoader() {\n    this.loading = true;\n  }\n\n  hideLoader() {\n    this.loading = false;\n  }\n\n  get storageKey(): string {\n    const name = this.grid_name();\n    if (name) return `grid-state-${name}`;\n\n    const cols = this.data();\n    if (!cols || cols.length === 0) return 'grid-state-auto';\n\n    const names = [...new Set(cols\n      .map(c => c?.name ?? '')\n      .filter(Boolean))]\n      .sort((a, b) => a.localeCompare(b, undefined, {sensitivity: 'base'}));\n\n    return names.length\n      ? `grid-state-auto-${names.join('-')}`\n      : 'grid-state-auto';\n  }\n\n\n  private loadFilters(): void {\n    if (!this.showHistoryFilters) return;\n    const raw = localStorage.getItem(this.storageKey);\n    if (!raw) return;\n\n    try {\n      const state: {\n        filters?: Record<string, Record<string, AppliedFiltersDTO>>,\n        search?: Record<string, string>\n      } = JSON.parse(raw);\n\n      this.appliedFilters = state.filters ?? {};\n      this.searchValues = state.search ?? {};\n\n    } catch {\n      this.appliedFilters = {};\n      this.searchValues = {};\n    }\n  }\n\n  restoreFilters() {\n    Object.entries(this.appliedFilters).forEach(([col, byType]) => {\n      const column = this.data().find(c => c.name === col);\n      if (!column?.filterValues) return;\n\n      Object.entries(byType).forEach(([type, dto]) => {\n\n        if (type === 'checkbox') {\n          const vals = Array.isArray(dto.value) ? dto.value : [dto.value];\n          column.filterValues!.forEach(group =>\n            group.forEach(item => {\n              // @ts-ignore\n              item.selected = vals.includes(item.value) ? true : undefined;\n            })\n          );\n        }\n\n        if (type === 'select') {\n          this.filterInputValues[col] = String(dto.value);\n        }\n\n        if (type === 'multi-select') {\n          const values = Array.isArray(dto.value)\n            ? dto.value.map(String)\n            : [String(dto.value)];\n\n          this.filterMultiSelectValues[col] = values;\n        }\n\n        if (type === 'date') {\n          const rawVal = String(dto.value);\n          if (rawVal.includes(',')) {\n            const [s, e] = rawVal.split(',');\n            this.dateFilters[col].patchValue({\n              start: new Date(s),\n              end: new Date(e),\n              date: null\n            });\n          } else {\n            this.dateFilters[col].patchValue({\n              start: null,\n              end: null,\n              date: new Date(rawVal)\n            });\n          }\n        }\n\n        if (type === 'range') {\n          const raw = String(dto.value);\n          if (raw.includes(',')) {\n            const [s, e] = raw.split(',');\n            const min = Number(s), max = Number(e);\n            if (Number.isFinite(min) && Number.isFinite(max)) {\n              this.rangeValues[col] = { min, max };\n            }\n          }\n        }\n      });\n    });\n  }\n\n  getRangeMin(col: string, opts?: {min:number; max:number}): number {\n    return this.rangeValues[col]?.min ?? Number(opts?.min ?? 0);\n  }\n  getRangeMax(col: string, opts?: {min:number; max:number}): number {\n    return this.rangeValues[col]?.max ?? Number(opts?.max ?? 100);\n  }\n\n  private saveFilters(): void {\n    if (!this.showHistoryFilters()) return;\n\n    try {\n      const raw = localStorage.getItem(this.storageKey);\n      const prev = raw ? JSON.parse(raw) : {};\n\n      const next = {\n        ...prev,\n        filters: this.appliedFilters,\n        search: this.searchValues,\n      };\n\n      localStorage.setItem(this.storageKey, JSON.stringify(next));\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  private setDetailInputs(inst: any, row: any) {\n    if (typeof inst.row === 'function' && typeof inst.row.set === 'function') {\n      inst.row.set(row);\n    } else {\n      inst.row = row;\n    }\n\n    if (typeof inst.rows === 'function' && typeof inst.rows.set === 'function') {\n      inst.rows.set(this.rows.data);\n    } else {\n      inst.rows = this.rows.data;\n    }\n  }\n\n  private mountDetail(row: any, container: ViewContainerRef, detailComponent: Type<any>) {\n    container.clear();\n    const cmpRef = container.createComponent(detailComponent);\n    this.setDetailInputs(cmpRef.instance, row);\n    cmpRef.changeDetectorRef.detectChanges();\n  }\n\n  private expandRow(row: any, container: ViewContainerRef, dc: Type<any>) {\n    this.mountDetail(row, container, dc);\n    this.expandedDetailIds.add(this.getRowId(row));\n  }\n\n  private collapseRow(rowId: string, container: ViewContainerRef) {\n    container.clear();\n    this.expandedDetailIds.delete(rowId);\n  }\n\n  toggleDetail(row: any) {\n    const rowId = this.getRowId(row);\n    const idx = this.rows.data.indexOf(row);\n    const container = this.detailContainers.toArray()[idx];\n    const dc = this.detailComponent();\n\n    if (!container || !dc) return;\n\n    if (this.expandedDetailIds.has(rowId)) {\n      this.collapseRow(rowId, container);\n    } else {\n      this.expandRow(row, container, dc);\n    }\n  }\n\n  setAllDetailsOpened(): void {\n    const dc = this.detailComponent();\n    if (!dc) return;\n\n    const currentIds = new Set(this.rows.data.map(r => this.getRowId(r)));\n    this.expandedDetailIds.forEach(id => {\n      if (!currentIds.has(id)) this.expandedDetailIds.delete(id);\n    });\n    this.cdr.detectChanges();\n\n    const containers = this.detailContainers.toArray();\n\n    this.rows.data.forEach((row, idx) => {\n      const rowId = this.getRowId(row);\n      const container = containers[idx];\n      if (!container) return;\n\n      if (this.expandedDetailIds.has(rowId) && container.length > 0) return;\n      this.expandRow(row, container, dc);\n    });\n  }\n\n  private getRowId(row: any): string {\n    const sidx = this.sidx();\n    if (sidx && row && Object.prototype.hasOwnProperty.call(row, sidx)) {\n      return String(row[sidx as keyof typeof row]);\n    }\n    return JSON.stringify(row);\n  }\n\n  isDetailExpanded(row: any): boolean {\n    return this.expandedDetailIds.has(this.getRowId(row));\n  }\n\n  executeAction(action: Action, row: object | null | undefined) {\n    if (action.action) {\n      const result = action.action(row);\n      const page = this.paginator?.pageIndex + 1 || 1;\n      const size = this.paginator?.pageSize || this.limit();\n\n      if (isObservable(result)) {\n        result.subscribe({\n          complete: () => this.loadData(page, size),\n          error: (error) => console.error(error)\n        });\n      } else if (result instanceof Promise) {\n        result\n          .then(() => this.loadData(page, size))\n          .catch((error) => console.error(error));\n      } else if (result instanceof Subscription) {\n        result.add(() => {\n          this.loadData(page, size);\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    const page = this.paginator?.pageIndex + 1 || 1;\n    const pageSize = this.paginator?.pageSize || this.limit();\n    this.setFiltersValues(params, page, pageSize);\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; searchTypes?: {\n      name: string;\n      label: string;\n      value: string;\n    }[]; } | undefined, columnName?: string, value?: string | null): void {\n    if (!multiSearch) return;\n\n    if (columnName && value) {\n      this.searchTerm = '';\n      this.searchData = [];\n\n      this.searchType.set({\n        column: columnName,\n        value: value ?? '',\n      });\n    }\n\n    this.searchTermSubject.next({term: this.searchTerm, multiSearch: multiSearch});\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        let urlWithQuery = `${query.multiSearch.url}?q=${encodeURIComponent(query.term)}`;\n\n        if (this.currentSearchType && query.multiSearch.searchTypes?.length) {\n          const selectedType = query.multiSearch.searchTypes.find(\n            t => t.value === this.currentSearchType\n          );\n\n          if (selectedType) {\n            urlWithQuery += `&${selectedType.name}=${encodeURIComponent(selectedType.value)}`;\n          }\n        }\n\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        const currentValue = this.multiSearchControl.value;\n\n        if (!Array.isArray(currentValue)) {\n          this.multiSearchControl.setValue(\n            currentValue != null ? [currentValue] : []\n          );\n        }\n\n        const selectedIds = this.multiSearchControl.value ?? [];\n        const selectedItems = this.searchData.filter(item =>\n          selectedIds.includes(item.id)\n        );\n\n        const isSingleSelect = this.currentGridColumn?.filter?.some(\n          f => f.type === 'multi-search' && f.multiSearchOptions?.selectSingleOption\n        );\n\n        const map = new Map<number, SearchItem>();\n        for (const item of [...selectedItems, ...res]) {\n          map.set(item.id, item);\n        }\n\n        this.searchData = Array.from(map.values());\n\n        if (isSingleSelect && Array.isArray(selectedIds) && selectedIds.length > 1) {\n          const lastSelected = selectedIds[selectedIds.length - 1];\n          this.multiSearchControl.setValue([lastSelected])\n        }\n\n        this.cdr.markForCheck();\n      },\n      error: err => console.error(err)\n    });\n  }\n\n  toggleAllItems(\n    event: MatOptionSelectionChange,\n    columnName: string,\n    filter: { callback?: (columnName: string, filterType: string, value: string | number | string[]) => void; multiSearchOptions?: MultiSearchOptions | null }\n  ): void {\n    if (event.source.selected) {\n      const allIds = this.searchData\n        .map(item => item.id)\n        .filter(id => id !== null && id !== undefined);\n\n      this.multiSearchControl.setValue(allIds, { emitEvent: false });\n\n      this.onMultiSearchSelectionChange(columnName, allIds, filter);\n    } else {\n      this.multiSearchControl.setValue([], { emitEvent: false });\n      delete this.pendingMultiSearch[columnName];\n    }\n  }\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.saveFilters();\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    if (filterType === 'multi-search') {\n      const current = Array.isArray(this.multiSearchControl.value)\n        ? this.multiSearchControl.value\n        : [];\n\n      const next = current.filter(v => String(v) !== String(optionValue));\n\n      this.multiSearchControl.setValue(next, { emitEvent: false });\n\n      this.searchData = this.searchData.filter(\n        item => String(item.id) !== String(optionValue)\n      );\n    }\n\n    if (filterType === 'select' && columnName) {\n      delete this.filterInputValues[columnName];\n    }\n\n    this.uncheckedCheckbox(column, filterType, optionValue);\n    this.saveFilters();\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.filterInputValues = {};\n\n    this.saveFilters();\n    this.loadData();\n  }\n\n  private formatDate(date: Date | string | null): string {\n    if (!date) return '';\n\n    const d = typeof date === 'string' ? new Date(date) : date;\n    const year = d.getFullYear();\n    const month = String(d.getMonth() + 1).padStart(2, '0');\n    const day = String(d.getDate()).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    if(!Array.isArray(selected)){\n      selected = [selected];\n    }\n\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.saveFilters();\n    this.searchSubject.next({...this.searchValues});\n  }\n\n  toggleFilter(columnName: string, event: Event) {\n    event.stopPropagation();\n\n    if (this.openFilterColumn !== columnName) {\n      this.resetMultiSearchState();\n    }\n\n    this.openFilterColumn = this.openFilterColumn === columnName ? null : columnName;\n\n    this.setInputFocus(event);\n  }\n\n  private resetMultiSearchState(): void {\n    this.searchTerm = '';\n    this.searchData = [];\n    this.multiSearchControl.setValue([], { emitEvent: false });\n    this.currentSearchType = null;\n  }\n\n  private setInputFocus(event: Event) {\n    setTimeout(() => {\n      const th = (event.target as HTMLElement).closest('th');\n      if (!th) return;\n      const input = th.querySelector<HTMLInputElement>('input');\n      if (input) {\n        input.focus();\n      }\n    });\n\n    return this;\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    const url = this.url();\n    if (!url) return '';\n\n    const [baseUrl, queryString] = 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    const subUrlParams = this.subUrlParams();\n    if (!this.currentRow() || !this.subUrlParams()) {\n      return;\n    }\n\n    const rowData = this.currentRow() as Record<string, unknown>;\n\n    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  private reorderColumnsData(input: GridProperty[] | undefined) {\n    const base = this.baseColumns.length ? this.baseColumns : (input ?? []);\n    const byName = new Map<string, GridProperty>();\n    (input ?? base).forEach(c => byName.set(c.name, c));\n    base.forEach(c => { if (!byName.has(c.name)) byName.set(c.name, c); });\n\n    const merged = Array.from(byName.values());\n\n    const withIdx = merged.map((c, i) => ({ c, i }));\n    withIdx.sort((a, b) => {\n      const ax = a.c.type === GridPropertyType.Actions ? Number.MAX_SAFE_INTEGER : (a.c.columnIndex ?? a.i);\n      const bx = b.c.type === GridPropertyType.Actions ? Number.MAX_SAFE_INTEGER : (b.c.columnIndex ?? b.i);\n      return ax - bx;\n    });\n\n    const sorted = withIdx.map(x => x.c);\n\n    const regular = sorted.filter(c => c.visible !== false && c.type !== GridPropertyType.Hidden && c.type !== GridPropertyType.Actions);\n    const actions = sorted.filter(c => c.visible !== false && c.type === GridPropertyType.Actions);\n\n    const names = [\n      ...regular.map(c => c.name),\n      ...actions.map(c => c.name),\n    ];\n\n    this.displayedColumns = this.multiselect() ? ['select', ...names] : names;\n  }\n\n\n  resolveColumn(name: string): GridProperty | null {\n    return this.mappingsColumns.get(name) ?? null;\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    const sidx = this.sidx();\n    const sort = this.sort();\n    params.append('page', page.toString());\n    params.append('limit', pageSize.toString());\n\n    if (sidx) {\n      params.append('sidx', sidx.toString());\n    }\n    if (sort) {\n      params.append('sort', sort.toString());\n    }\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        } else if (this.checkFilterType(filterType, 'range')) {\n          this.setFilterValue(params, columnName, String(value));\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    this.showLoader();\n\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      finalize(() => this.hideLoader())\n    ).subscribe({\n      next: (data) => {\n        const resp = data.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.selection.clear();\n        this.hideLoader();\n\n        if (this.openAllToggleDetails()) {\n          this.cdr.detectChanges();\n          this.setAllDetailsOpened();\n        }\n\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    const expandedElement = this.expandedElement();\n    if (expandedElement) {\n      const openId = expandedElement[this.sidx() as keyof typeof 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.set(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    multiSearchOptions: MultiSearchOptions | null = null\n  ) {\n    if (Array.isArray(value)) {\n      value = value.filter(v => v !== undefined);\n    }\n\n    if (\n      (filterType === 'multi-search' && multiSearchOptions?.selectSingleOption) ||\n      filterType === 'select'\n    ) {\n      this.openFilterColumn = null;\n    }\n\n    this.showLoader();\n    if ((filterType === 'checkbox' || filterType === 'multi-select' || filterType === 'multi-search') && !Array.isArray(label)) {\n      label = [label];\n    }\n\n    if (filterType === 'range') {\n      const raw = Array.isArray(value) ? value.join(',') : String(value);\n      const [s, e] = raw.split(',');\n\n      const minNum = Number(s);\n      const maxNum = Number(e);\n\n      if (!Number.isFinite(minNum) || !Number.isFinite(maxNum)) {\n        return;\n      }\n\n      const lo = Math.min(minNum, maxNum);\n      const hi = Math.max(minNum, maxNum);\n\n      this.rangeValues[columnName] = { min: lo, max: hi };\n\n      value = `${lo},${hi}`;\n      label = `від ${lo} до ${hi}`;\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    if (filterType !== 'multi-search') {\n      this.saveFilters();\n    }\n\n    this.loadData(1, this.limit());\n  }\n\n  onDateRangeChange(columnName: string, dateGroup: FormGroup) {\n    const raw = dateGroup.value;\n\n    const hasStart = !!raw.start;\n    const hasEnd   = !!raw.end;\n    const hasDate  = !!raw.date;\n\n    const isSingleDate = hasDate && !hasStart && !hasEnd;\n    const isRange      = (hasStart || hasEnd) && !hasDate;\n\n    let value: string | null = null;\n\n    if (isSingleDate) {\n      value = this.formatDate(raw.date);\n    } else if (isRange && hasStart && hasEnd) {\n      const start = this.formatDate(raw.start);\n      const end   = this.formatDate(raw.end);\n      value = `${start},${end}`;\n    }\n\n    if (value) {\n      if (!this.appliedFilters[columnName]) {\n        this.appliedFilters[columnName] = {};\n      }\n\n      this.appliedFilters[columnName]['date'] = {\n        label: `Дата ${value}`,\n        value: value\n      };\n\n      this.saveFilters();\n\n      if (this.openFilterColumn === columnName) {\n        this.openFilterColumn = null;\n      }\n\n      this.loadData(1, this.limit());\n    } else {\n      if (this.appliedFilters[columnName]) {\n        delete this.appliedFilters[columnName]['date'];\n\n        if (!Object.keys(this.appliedFilters[columnName]).length) {\n          delete this.appliedFilters[columnName];\n        }\n\n        this.saveFilters();\n        this.loadData(1, this.limit());\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    this.showLoader();\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  isCheckboxChecked(columnName: string, value: string | number): boolean {\n    const v = this.appliedFilters[columnName]?.['checkbox']?.value;\n    if (!Array.isArray(v)) return false;\n    return v.map(String).includes(String(value));\n  }\n\n  onCheckboxChange(\n    columnName: string,\n    filterType: 'checkbox',\n    label: string,\n    value: string,\n    checked: boolean,\n    callback?: (columnName: string, filterType: string, value: string | number | string[]) => void\n  ) {\n    const currentValues = this.appliedFilters[columnName]?.[filterType]?.value;\n    const currentLabels = this.appliedFilters[columnName]?.[filterType]?.label;\n\n    const values = Array.isArray(currentValues) ? [...currentValues] : [];\n    const labels = Array.isArray(currentLabels) ? [...currentLabels] : [];\n\n    const idx = values.map(String).indexOf(String(value));\n\n    if (checked && idx === -1) {\n      values.push(value);\n      labels.push(label);\n    } else if (!checked && idx !== -1) {\n      values.splice(idx, 1);\n      labels.splice(idx, 1);\n    }\n\n    if (!values.length) {\n      if (this.appliedFilters[columnName]) {\n        delete this.appliedFilters[columnName][filterType];\n        if (!Object.keys(this.appliedFilters[columnName]).length) {\n          delete this.appliedFilters[columnName];\n        }\n      }\n    } else {\n      if (!this.appliedFilters[columnName]) {\n        this.appliedFilters[columnName] = {};\n      }\n      this.appliedFilters[columnName][filterType] = {\n        value: values,\n        label: labels,\n      };\n    }\n\n    if (callback) {\n      callback(columnName, filterType, values);\n    }\n\n    this.pendingCheckboxColumns.add(columnName);\n  }\n\n  onSortChange(sortEvent: Sort) {\n    const column = this.data().find(col => col.name === sortEvent.active);\n    this.sidx.set(\"id\");\n    this.sort.set(\"asc\");\n\n    if (sortEvent.direction) {\n      this.sidx.set(column && column.columnSortIndex ? column.columnSortIndex : sortEvent.active);\n      this.sort.set(sortEvent.direction);\n    }\n\n    const pageSize = this.paginator?.pageSize || this.limit();\n    this.loadData(1, pageSize);\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.set(null);\n      this.currentGridColumn = null;\n    } else {\n      this.expandedElement.set(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  IsCustomCallbackExist(column: GridProperty): boolean {\n    const data = this.resolveColumn(column.name) ?? column;\n    return data && typeof data.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  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  @HostListener('document:click', ['$event'])\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent) {\n    const target = event.target as HTMLElement;\n\n    if (target.closest('.filter-container')) {\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    if (target.closest('.cdk-overlay-pane')) {\n      return;\n    }\n\n    if (!this.openFilterColumn) {\n      return;\n    }\n\n    const col = this.openFilterColumn;\n    const hasPendingMulti = !!this.pendingMultiSearch[col];\n    const hasPendingCheckbox = this.pendingCheckboxColumns.has(col);\n\n    if (hasPendingMulti || hasPendingCheckbox) {\n      this.confirmFilters(col);\n    } else {\n      this.openFilterColumn = null;\n    }\n  }\n\n\n\n  ngOnDestroy(): void {\n    const url = this.url();\n    if (url) {\n      NgxDataGridx.loadedUrls.delete(url);\n    }\n\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  confirmFilters(columnName: string): void {\n    const pendingMulti = this.pendingMultiSearch[columnName];\n    const hasPendingCheckbox = this.pendingCheckboxColumns.has(columnName);\n\n    if (!pendingMulti && !hasPendingCheckbox) {\n      this.openFilterColumn = null;\n      return;\n    }\n\n    if (pendingMulti) {\n      const value = pendingMulti.ids.map(String);\n\n      this.onFilterChange(\n        columnName,\n        'multi-search',\n        pendingMulti.labels,\n        value,\n        pendingMulti.callback,\n        pendingMulti.options\n      );\n\n      delete this.pendingMultiSearch[columnName];\n      this.saveFilters();\n    }\n\n    if (hasPendingCheckbox) {\n      this.pendingCheckboxColumns.delete(columnName);\n      this.showLoader();\n      this.saveFilters();\n      this.loadData(1, this.limit());\n    }\n\n    this.openFilterColumn = null;\n  }\n\n\n  onMultiSearchSelectionChange(\n    columnName: string,\n    selectedIds: number[],\n    filter: { callback?: (columnName: string, filterType: string, value: string | number | string[]) => void; multiSearchOptions?: MultiSearchOptions | null }\n  ): void {\n    const labels = this.getSelectedLabelsSearch(selectedIds);\n\n    this.pendingMultiSearch[columnName] = {\n      ids: selectedIds,\n      labels,\n      callback: filter.callback,\n      options: filter.multiSearchOptions ?? null\n    };\n  }\n\n  @HostListener('document:keydown.enter', ['$event'])\n  onDocumentEnter(event: KeyboardEvent): void {\n    if (!this.openFilterColumn) return;\n\n    const col = this.openFilterColumn;\n    const hasPendingMulti = !!this.pendingMultiSearch[col];\n    const hasPendingCheckbox = this.pendingCheckboxColumns.has(col);\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (hasPendingMulti || hasPendingCheckbox) {\n      this.confirmFilters(col);\n      return;\n    }\n\n    const column = this.data().find(c => c.name === col);\n    if (column?.search) {\n      this.applySearchAndClose(col);\n      return;\n    }\n\n    this.openFilterColumn = null;\n  }\n\n\n\n  applySearchAndClose(columnName: string): void {\n    const value = (this.searchValues[columnName] ?? '').trim();\n\n    if (value) {\n      this.searchValues[columnName] = value;\n    } else {\n      delete this.searchValues[columnName];\n    }\n\n    this.saveFilters();\n\n    this.loadData(1, this.limit());\n\n    this.openFilterColumn = null;\n  }\n\n\n\n  getCellText(column: GridProperty, row: any): string {\n    const raw = this.IsCustomCallbackExist(column)\n      ? (this.resolveColumn(column.name)?.callback?.(row) ?? row[column.name])\n      : row[column.name];\n    return raw != null ? String(raw) : '';\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: {\n    url: string;\n    id: string;\n    label: string;\n    searchTypes?: {\n      name: string;\n      label: string;\n      value: string;\n    }[];\n  };\n}\n\nexport enum GridTheme {\n  BROAD = 'broad',\n  FLAT = 'flat'\n}\n","<div class=\"grid__container\" [ngClass]=\"'grid-theme-' + theme()\">\n  @if(showHistoryFilters() || grid_name()){\n    <div class=\"grid__header no-print\">\n      <div class=\"grid__filters\" [ngClass]=\"{'sub__grid_filter': isSubGrid()}\">\n        <ng-content select=\".grid__filter_option\"></ng-content>\n\n        <div class=\"grid-title\">\n          @if(grid_name()){\n            <span class=\"grid__name\">{{ grid_name() }}</span>\n          }\n        </div>\n\n        <ng-content select=\".action-buttons\"></ng-content>\n        @if(showHistoryFilters()){\n          <div class=\"grid__options\" [ngClass]=\"{'sub__grid_options': isSubGrid()}\">\n            <div class=\"grid__filter_selected_options\">\n              @for(filter of getAppliedFilters(); track $index){\n                <div class=\"grid__filter_option\">\n                  {{ filter.label }}\n                  <mat-icon (click)=\"clearFilter(filter.column, filter.filterType, filter.value)\">close</mat-icon>\n                </div>\n              }\n            </div>\n\n            <button mat-icon-button (click)=\"clearAllFilters()\">\n              <mat-icon fontSet=\"material-symbols-outlined\">delete</mat-icon>\n            </button>\n\n            <button mat-icon-button (click)=\"loadData()\">\n              <mat-icon fontSet=\"material-symbols-outlined\">autorenew</mat-icon>\n            </button>\n          </div>\n        }\n      </div>\n    </div>\n  }\n\n  <div class=\"mat-elevation-z8\">\n    <div class=\"grid__container__data\">\n    <div class=\"grid__container__wrapper\">\n      <div class=\"grid__linear-loader\" [class.is-visible]=\"loading\">\n        <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n      </div>\n\n      <table mat-table\n             id=\"printArea\"\n             multiTemplateDataRows\n             [dataSource]=\"rows\"\n             [class.loading]=\"loading\"\n             matSort (matSortChange)=\"onSortChange($event)\"\n             class=\"mat-elevation-z8 grid__table\">\n\n        @if(multiselect()){\n          <ng-container matColumnDef=\"select\">\n            <th class=\"grid__th grid__checkbox no-print\"\n                mat-header-cell *matHeaderCellDef\n            >\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 no-print\"\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\n        <!-- primary cols -->\n        @for(column of data(); track $index){\n          <ng-container [matColumnDef]=\"column.name\">\n            <th mat-header-cell *matHeaderCellDef\n                class=\"grid__th\"\n                [resizeColumn]=\"column.columnResizable === true\"\n                [index]=\"multiselect() ? $index + 1 : $index\"\n                mat-sort-header\n                [disabled]=\"!column.sort\"\n                [style.width]=\"column.width\"\n                [ngClass]=\"column.classes\">\n              {{ column.displayName }}\n\n              @if(showFilters()){\n                <div class=\"filter-container no-print\">\n                  @if(checkColumnFilters(column)){\n                    <button type=\"button\" 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                @if(openFilterColumn === column.name){\n                  <div class=\"filter-dropdown\">\n\n                    @if(column.search){\n                      <mat-form-field appearance=\"fill\">\n                        <mat-icon matPrefix (click)=\"$event.stopPropagation()\">search</mat-icon>\n                        <input\n                          matInput\n                          [placeholder]=\"column.displayName + '...'\"\n                          (click)=\"$event.stopPropagation()\"\n                          (keydown.space)=\"$event.stopPropagation()\"\n                          (keydown.enter)=\"applySearchAndClose(column.name)\"\n                          (input)=\"onSearch(column.name, $event)\"\n                          [(ngModel)]=\"searchValues[column.name]\">\n                      </mat-form-field>\n                    }\n\n                    @for(filter of column.filter; track $index){\n                      <ng-container>\n                        <!-- Checkbox -->\n                        @if(filter.type === 'checkbox'){\n                          <div class=\"filter-options\">\n                            @for (item of column.filterValues?.[$index]; track item.value) {\n                              <mat-checkbox\n                                (click)=\"$event.stopPropagation()\"\n                                [checked]=\"isCheckboxChecked(column.name, item.value)\"\n                                (change)=\"onCheckboxChange(\n                                   column.name,\n                                   'checkbox',\n                                   item.label,\n                                   item.value,\n                                   $event.checked,\n                                   filter.callback\n                                 )\">\n                                {{ item.label }}\n                              </mat-checkbox>\n                            }\n                          </div>\n                        }\n\n                        <!-- Select -->\n                        @if(filter.type === 'select'){\n                          <mat-form-field appearance =\"fill\" (click)=\"$event.stopPropagation()\">\n                            <mat-select\n                              [placeholder]=\"filter.label\"\n                              [(ngModel)]=\"filterInputValues[column.name]\"\n                              (selectionChange)=\"onFilterChange(column.name, filter.type, getSelectedLabels(column.filterValues?.[$index], $event.value)[0] || filter.label, $event.value, filter.callback)\">\n                              @for(item of column.filterValues?.[$index]; track $index){\n                                <mat-option [value]=\"item.value\">\n                                  {{ item.label }}\n                                </mat-option>\n                              }\n                            </mat-select>\n                          </mat-form-field>\n                        }\n\n                        @if (filter.type === 'range') {\n                          <mat-slider [min]=\"filter.rangeOptions?.min\" [max]=\"filter.rangeOptions?.max\" discrete>\n                            <input matSliderStartThumb #start\n                                   [value]=\"getRangeMin(column.name, filter.rangeOptions)\"\n                                   (change)=\"onFilterChange(\n                                            column.name,\n                                            'range',\n                                            (column.displayName + ' від ' + start.valueAsNumber + ' до ' + end.valueAsNumber),\n                                            (start.valueAsNumber + ',' + end.valueAsNumber),\n                                            filter.callback\n                                         )\">\n                            <input matSliderEndThumb #end\n                                   [value]=\"getRangeMax(column.name, filter.rangeOptions)\"\n                                   (change)=\"onFilterChange(\n                                      column.name,\n                                      'range',\n                                      (column.displayName + ' від ' + start.valueAsNumber + ' до ' + end.valueAsNumber),\n                                      (start.valueAsNumber + ',' + end.valueAsNumber),\n                                      filter.callback\n                                   )\">\n                          </mat-slider>\n                        }\n\n                        <!-- Multi-Select -->\n                        @if(filter.type === 'multi-select'){\n                          <mat-form-field appearance =\"fill\" (click)=\"$event.stopPropagation()\">\n                            <mat-select multiple\n                                        [(ngModel)]=\"filterMultiSelectValues[column.name]\"\n                                        [placeholder]=\"filter.label\"\n                                        (selectionChange)=\"onFilterChange(\n                                                        column.name,\n                                                        filter.type,\n                                                        getSelectedLabels(column.filterValues?.[$index], $event.value),\n                                                        $event.value,\n                                                        filter.callback\n                                                     )\">\n                              @for(item of column.filterValues?.[$index]; track $index){\n                                <mat-option [value]=\"item.value\">\n                                  {{ item.label }}\n                                </mat-option>\n                              }\n                            </mat-select>\n                          </mat-form-field>\n                        }\n                        <!-- Multi-search -->\n                        @if(filter.type === 'multi-search'){\n                          @if(filter.multiSearchOptions?.searchTypes?.length){\n                            <div class=\"multi-search-type-selector\" (click)=\"$event.stopPropagation()\">\n                              <mat-radio-group\n                                [(ngModel)]=\"currentSearchType\"\n                                (change)=\"onSearchTermChange(\n                                  filter.multiSearchOptions,\n                                  column.name,\n                                  currentSearchType\n                                )\"\n                                [ngModelOptions]=\"{standalone: true}\"\n                              >\n                                @for(type of filter.multiSearchOptions?.searchTypes ?? []; track type.value){\n                                  <mat-radio-button\n                                    [value]=\"type.value\"\n                                    class=\"multi-search-type-radio\"\n                                  >\n                                    {{ type.label }}\n                                  </mat-radio-button>\n                                }\n                              </mat-radio-group>\n                            </div>\n                          }\n\n                          <mat-form-field (click)=\"$event.stopPropagation()\" appearance=\"fill\">\n                            <mat-select\n                              (click)=\"$event.stopPropagation()\"\n                              (openedChange)=\"onSelectOpened($event)\"\n                              [formControl]=\"multiSearchControl\"\n                              [placeholder]=\"filter.label\"\n                              [multiple]=\"!filter?.multiSearchOptions?.selectSingleOption\"\n                              (selectionChange)=\"\n                                filter?.multiSearchOptions?.selectSingleOption\n                                  ? onFilterChange(\n                                      column.name,\n                                      filter.type,\n                                      getSelectedLabelsSearch($event.value),\n                                      $event.value,\n                                      filter.callback,\n                                      filter.multiSearchOptions\n                                    )\n                                  : onMultiSearchSelectionChange(\n                                      column.name,\n                                      $event.value,\n                                      filter\n                                    )\n                              \">\n                              <mat-option class=\"no-checkbox\">\n                                <div>\n                                  <mat-icon class=\"search-icon\">search</mat-icon>\n                                  <input\n                                    #searchField\n                                    matInput\n                                    [(ngModel)]=\"searchTerm\"\n                                    [placeholder]=\"filter.label\"\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                              @if(!filter?.multiSearchOptions?.selectSingleOption){\n                                <mat-option\n                                  (keydown.enter)=\"$event.preventDefault()\"\n                                  (onSelectionChange)=\"toggleAllItems($event, column.name, filter)\">\n                                  Вибрати все\n                                </mat-option>\n                              }\n\n                              @for(data of searchData; track $index){\n                                <mat-option [value]=\"data.id\">\n                                  {{ data.label }}\n                                </mat-option>\n                              }\n                            </mat-select>\n                          </mat-form-field>\n                        }\n                        <!-- Date Range -->\n                        @if(filter.type==='date' && filter.dateOptions?.range){\n                          <div class=\"date-range\" [formGroup]=\"dateFilters[column.name]\">\n                          <mat-form-field appearance=\"fill\">\n                            <input\n                              matInput\n                              type=\"date\"\n                              formControlName=\"start\"\n                              #startInput\n                              (click)=\"$event.stopPropagation()\"\n                              (focus)=\"startInput.showPicker()\"\n                            />\n                            <mat-icon class=\"date-icons\" matSuffix (click)=\"startInput.showPicker(); $event.stopPropagation()\">\n                              calendar_today\n                            </mat-icon>\n                          </mat-form-field>\n\n                          <mat-form-field appearance=\"fill\">\n                            <input\n                              matInput\n                              type=\"date\"\n                              formControlName=\"end\"\n                              #endInput\n                              (click)=\"$event.stopPropagation()\"\n                              (focus)=\"endInput.showPicker()\"\n                            />\n                            <mat-icon class=\"date-icons\" matSuffix (click)=\"endInput.showPicker(); $event.stopPropagation()\">\n                              calendar_today\n                            </mat-icon>\n                          </mat-form-field>\n                        </div>\n                        }\n\n                        <!-- Date -->\n                        @if(filter.type === 'date' && !filter.dateOptions?.range){\n                          <mat-form-field appearance=\"fill\" [formGroup]=\"dateFilters[column.name]\" (click)=\"$event.stopPropagation()\">\n                          <input\n                            matInput\n                            type=\"date\"\n                            formControlName=\"date\"\n                            #dateInput\n                            (click)=\"$event.stopPropagation()\"\n                            (focus)=\"dateInput.showPicker()\"\n                          />\n\n                          <mat-icon\n                            matSuffix\n                            class=\"date-icons\"\n                            (click)=\"dateInput.showPicker(); $event.stopPropagation()\"\n                          >calendar_today</mat-icon>\n                        </mat-form-field>\n                        }\n\n                        <!-- Input -->\n                        @if(filter.type === 'input'){\n                          <mat-form-field appearance =\"fill\">\n                          <input matInput [(ngModel)]=\"filterInputValues[column.name]\"\n                                 [placeholder]=\"filter.label\"\n                                 (input)=\"onInputFilterChange(column.name,\n                                                              filter.type,\n                                                              filter.label,\n                                                              filterInputValues[column.name],\n                                                              filter.callback)\">\n                        </mat-form-field>\n                        }\n                      </ng-container>\n                    }\n\n                </div>\n                }\n              </div>\n              }\n            </th>\n            <td class=\"grid__td\" [ngClass]=\"getAllClasses(column, row)\" mat-cell\n                *matCellDef=\"let row;\"\n                [style.width]=\"column.width\"\n                >\n              <ng-container>\n                <div class=\"column-content\">\n                    @switch (column.type){\n                      @case(GridPropertyType.Actions){\n                        <div class=\"actions\">\n                          @for(action of resolveColumn(column.name)?.actions; track $index){\n                          <ng-container>\n                            @if((!action.customHtml && action && (!action.visible || action.visible(row)))){\n                              @if(!action.routerLink){\n                                <button\n                                  type=\"button\"\n                                  class=\"action-btn\"\n                                  mat-icon-button\n                                  (click)=\"executeAction(action, row)\"\n                                  matTooltip=\"{{ action.tooltip }}\">\n                                    @if(!isPath(action.icon)){\n                                      <mat-icon class=\"material-icons-outlined\">\n                                        {{ action.icon }}\n                                      </mat-icon>\n                                    }\n\n                                  @if(isPath(action.icon)){\n                                    <img [src]=\"action.icon\" [alt]=\"action.tooltip\" />\n                                  }\n                                </button>\n                              } @else{\n                                <a\n                                  class=\"action-btn\"\n                                  mat-icon-button\n                                  [routerLink]=\"action?.routerLink ? action?.routerLink(row) : null\"\n                                  matTooltip=\"{{ action.tooltip }}\">\n                                  @if(!isPath(action.icon)){\n                                    <mat-icon class=\"material-icons-outlined\">\n                                      {{ action.icon }}\n                                    </mat-icon>\n                                  }\n\n                                  @if(isPath(action.icon)){\n                                    <img [src]=\"action.icon\" [alt]=\"action.tooltip\" />\n                                  }\n                                </a>\n                              }\n                            }\n\n                            @if(action.customHtml && (!action.visible || action.visible(row))){\n                              <button\n                                class=\"btn-custom-html\"\n                                type=\"button\"\n                                mat-icon-button\n                                (click)=\"action.action ? executeAction(action, row) : null\"\n                                matTooltip=\"{{ action.tooltip }}\">\n                                <span class=\"custom-action\" [innerHTML]=\"action.customHtml(row)\"></span>\n                              </button>\n                            }\n                          </ng-container>\n                          }\n\n                        </div>\n                      }\n\n                      @case(GridPropertyType.Hidden){\n                        <span></span>\n                      }\n\n                      @case(GridPropertyType.Audio){\n                        <app-audio-player #audioPlayer\n                                          [src]=\"resolveColumn(column.name)?.callback ? resolveColumn(column.name)?.callback?.(row[column.name]) : row[column.name]\">\n                        </app-audio-player>\n                      }\n\n                      @default {\n                        @if(resolveColumn(column.name)?.component){\n                          <grid-cell-host [component]=\"resolveColumn(column.name)?.component!\" [row]=\"row\"></grid-cell-host>\n                        } @else if(resolveColumn(column.name)?.routerLink) {\n                          <grid-router-link\n                            [link]=\"resolveColumn(column.name)!.routerLink!(row)\"\n                            [text]=\"getCellText(column, row)\"\n                            [textLimit]=\"column.textLimit\" />\n                        } @else if(column.textLimit && getCellText(column, row).length > column.textLimit) {\n                          <grid-text-truncate [text]=\"getCellText(column, row)\" [limit]=\"column.textLimit\" />\n                        } @else {\n                          <span [innerHTML]=\"IsCustomCallbackExist(column)\n                                           ? ( resolveColumn(column.name)?.callback ? resolveColumn(column.name)?.callback?.(row) : row[column.name] )\n                                           : row[column.name]\">\n                          </span>\n                        }\n                      }\n                    }\n\n                  @if(checkIsCurrentColumnSubGrid(column)){\n                    <button mat-mini-fab\n                            type=\"button\"\n                            class=\"sub-grid-accordion-btn\"\n                            (click)=\"setCurrentGridColumn(column?.name, row)\">\n                      <mat-icon>{{ isColumnExpanded(column, row) ? 'arrow_drop_up' : 'arrow_drop_down' }}</mat-icon>\n                    </button>\n                  }\n                </div>\n              </ng-container>\n            </td>\n          </ng-container>\n        }\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                 [class.expanded]=\"expandedElement() === element\"\n                 [class.collapsed]=\"expandedElement() !== element\"\n                 [@detailExpand]=\"expandedElement() === element ? 'expanded' : 'collapsed'\">\n              @if(expandedElement() === element){\n                <ng-container>\n                  @for(o of [currentGridColumn]; track trackByKey($index, o)){\n                    <ngx-data-gridx\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                      [detailComponent]=\"currentGridColumn?.subGridSettings?.detailComponent\"\n                      [multiselect] = \"currentGridColumn?.subGridSettings?.subGridProps?.multiselect ?? false\">\n                    </ngx-data-gridx>\n                  }\n                </ng-container>\n              }\n            </div>\n          </td>\n        </ng-container>\n\n        <ng-container matColumnDef=\"detailRow\">\n          <td class=\"detail-row\" mat-cell *matCellDef=\"let row\" [attr.colspan]=\"displayedColumns.length\">\n            <div class=\"detail-accordion\"\n                 [class.expanded]=\"isDetailExpanded(row)\"\n                 [class.collapsed]=\"!isDetailExpanded(row)\"\n                 [@detailExpand]=\"isDetailExpanded(row) ? 'expanded' : 'collapsed'\">\n\n              @if(detailTemplate){\n              <ng-container>\n                <ng-container\n                  *ngTemplateOutlet=\"detailTemplate;\n                             context: { $implicit: row, rows: rows.data }\">\n                </ng-container>\n              </ng-container>\n              }\n\n              <ng-template #detailContainer></ng-template>\n            </div>\n          </td>\n        </ng-container>\n\n        <!-- primary row -->\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n\n        <tr mat-row *matRowDef=\"let element; columns: displayedColumns;\"\n            (dblclick)=\"toggleDetail(element)\"\n            class=\"example-element-row\"\n            [class.detail-expanded]=\"isDetailExpanded(element)\"\n            [class.accordion]=\"detailComponent()\"\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        </tr>\n\n        <tr mat-row\n            *matRowDef=\"let row; columns: ['detailRow']\"\n            class=\"detail-row\">\n        </tr>\n\n        <tr class=\"mat-row\" *matNoDataRow>\n          <td class=\"mat-cell\" [attr.colspan]=\"displayedColumns.length\">\n            @if(!loading){\n              <span>\n                  {{ noDataPlaceholder() }}\n              </span>\n            }\n          </td>\n        </tr>\n      </table>\n    </div>\n    <div class=\"grid__footer no-print\">\n      <div class=\"grid__footer__settings\">\n        <grid-footer-settings [(columns)]=\"data\"\n                              [printData]=\"print()\"\n                              [rows]=\"rows.data\"\n                              [showPrint]=\"showPrint()\"\n                              [showExportCsv]=\"!!exportCsvUrl()\"\n                              (exportCsv)=\"exportCsvAction()\"\n                              [theme]=\"getCurrentTheme()\"\n                              [showColumnSettings]=\"showColumnSettings()\"\n                              [storageKey]=\"storageKey\"></grid-footer-settings>\n      </div>\n\n      @if (!disablePagination()) {\n        @if (getCurrentTheme() === GridTheme.FLAT) {\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        } @else {\n          <mat-paginator\n            [showFirstLastButtons]=\"true\"\n            [pageSizeOptions]=\"uniquePageSizeOptions()\"\n            [pageSize]=\"limit()\"\n            [length]=\"total\"\n            class=\"grid__paginator\">\n          </mat-paginator>\n        }\n      }\n    </div>\n    </div>\n\n  </div>\n</div>\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","i2.PdfExportService","i10"],"mappings":"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"}