{"version":3,"file":"fas-services.mjs","sources":["../../../projects/fas-services/src/lib/fas-services-upload/fas-services-upload.component.ts","../../../projects/fas-services/src/lib/fas-services-upload/fas-services-upload.component.html","../../../projects/fas-services/src/lib/fas-services-date-picker/date-picker.model.ts","../../../projects/fas-services/src/lib/fas-services-date-picker/fas-services-date-picker.component.ts","../../../projects/fas-services/src/lib/fas-services-date-picker/fas-services-date-picker.component.html","../../../projects/fas-services/src/lib/fas-service-table/fas-service-table.component.ts","../../../projects/fas-services/src/lib/fas-service-table/fas-service-table.component.html","../../../projects/fas-services/src/lib/fas-service-dynamic-table/fas-service-dynamic-table.component.ts","../../../projects/fas-services/src/lib/fas-service-dynamic-table/fas-service-dynamic-table.component.html","../../../projects/fas-services/src/lib/fas-services-notification/api/api-url.token.ts","../../../projects/fas-services/src/lib/fas-services-notification/api/my-notification-read-status-changed.service.ts","../../../projects/fas-services/src/lib/fas-services-notification/api/my-notification-has-been-clicked.service.ts","../../../projects/fas-services/src/lib/fas-services-notification/api/delete-all-my-notifications.service.ts","../../../projects/fas-services/src/lib/fas-services-notification/api/notification-counter.service.ts","../../../projects/fas-services/src/lib/fas-services-notification/api/my-notifications.service.ts","../../../projects/fas-services/src/lib/fas-services-notification/api/my-notification.service.ts","../../../projects/fas-services/src/lib/fas-services-notification/fas-services-notification.component.ts","../../../projects/fas-services/src/lib/fas-services-notification/fas-services-notification.component.html","../../../projects/fas-services/src/lib/shared/minimalized-windows.service.ts","../../../projects/fas-services/src/lib/fas-services-app-rating/api/app-rating.service.ts","../../../projects/fas-services/src/lib/fas-services-app-rating/models/app-rating.model.ts","../../../projects/fas-services/src/lib/fas-services-app-rating/models/app-rating-texts.model.ts","../../../projects/fas-services/src/lib/fas-services-app-rating/fas-services-app-rating.component.ts","../../../projects/fas-services/src/lib/fas-services-app-rating/fas-services-app-rating.component.html","../../../projects/fas-services/src/lib/fas-services-trim-on-blur/fas-services-trim-on-blur.directive.ts","../../../projects/fas-services/src/lib/fas-services-issue-reporter/api/issue-reporter.service.ts","../../../projects/fas-services/src/lib/fas-services-issue-reporter/models/issue-reporter-texts.model.ts","../../../projects/fas-services/src/lib/fas-services-issue-reporter/fas-services-issue-reporter.component.ts","../../../projects/fas-services/src/lib/fas-services-issue-reporter/fas-services-issue-reporter.component.html","../../../projects/fas-services/src/lib/fas-services-debug-viewer/fas-services-debug-viewer.component.ts","../../../projects/fas-services/src/lib/fas-services-debug-viewer/fas-services-debug-viewer.component.html","../../../projects/fas-services/src/lib/fas-services-faq/api/faq.service.ts","../../../projects/fas-services/src/lib/fas-services-faq/fas-services-faq.component.ts","../../../projects/fas-services/src/lib/fas-services-faq/fas-services-faq.component.html","../../../projects/fas-services/src/lib/fas-services-contact-form/api/contact-form.service.ts","../../../projects/fas-services/src/lib/fas-services-contact-form/models/contact-form.model.ts","../../../projects/fas-services/src/lib/fas-services-contact-form/fas-services-contact-form.component.ts","../../../projects/fas-services/src/lib/fas-services-contact-form/fas-services-contact-form.component.html","../../../projects/fas-services/src/lib/shared/fas-lib-config.token.ts","../../../projects/fas-services/src/lib/shared/feedback-modals-status.service.ts","../../../projects/fas-services/src/public-api.ts","../../../projects/fas-services/src/fas-services.ts"],"sourcesContent":["import { BrowserModule } from '@angular/platform-browser';\nimport { Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n  HttpClient,\n  HttpClientModule,\n  HttpEventType,\n  HttpHeaders,\n} from '@angular/common/http';\nimport { ButtonModule } from 'primeng/button';\n\ninterface FilePreview {\n  file: File;\n  previewUrl: string | null;\n  isImage: boolean;\n  isVideo: boolean;\n}\n\n@Component({\n  selector: 'fas-services-upload',\n  templateUrl: './fas-services-upload.component.html',\n  styleUrl: './fas-services-upload.component.scss',\n  standalone: true,\n  imports: [CommonModule, HttpClientModule, ButtonModule],\n})\nexport class FasServicesUploadComponent {\n  @Input() allowedExtensions!: string[];\n  @Input() environment!: string;\n  @Input() endpoint!: string;\n  @Input() isDashedBorder: boolean = false;\n  @Input() mainMessage: string = 'Wybierz plik .png z dysku lub przeciągnij tu.';\n  @Input() subMessage!: string;\n  @Input() choosedMessage!: string;\n  @Input() selectBtnLabel: string = 'Wybierz';\n  @Input() deleteBtnLabel: string = 'Usuń';\n  @Input() deleteAllBtnLabel: string = 'Usuń wszystkie';\n  @Input() changeBtnLabel: string = 'Zmień plik';\n  @Input() addMoreBtnLabel:string= 'Dodaj kolejny plik'\n  @Input() mainIcon: string = 'pi-image';\n  @Input() buttonIcon: string = 'pi-folder-open';\n  @Input() multiple: boolean = false;\n  @Input() maxFileSizeMb?: number;\n\n  @Output() fileSelected = new EventEmitter<File | File[]>();\n  @Output() uploadTriggered = new EventEmitter<void>();\n\n  public successMessage: string | null = null;\n  public errorMessage: string | null = null;\n  public selectedFiles: File[] = [];\n  public filePreviews: FilePreview[] = [];\n  public uploadProgress: number = 0;\n\n  private _http = inject(HttpClient);\n\n  onFileSelected(event: Event) {\n    const input = event.target as HTMLInputElement;\n    if (input.files && input.files.length > 0) {\n      if (this.multiple) {\n        for (let i = 0; i < input.files.length; i++) {\n          const file = input.files[i];\n          if (!this.isFileAllowed(file)) {\n            this.errorMessage = 'Niepoprawne rozszerzenie pliku!';\n            continue;\n          }\n          if (!this.isFileSizeAllowed(file)) {\n            this.errorMessage = 'Plik jest za duży!';\n            continue;\n          }\n          this.selectedFiles.push(file);\n          this.generateFilePreview(file);\n        }\n        input.value = '';\n        this.errorMessage = null;\n        this.fileSelected.emit(this.selectedFiles);\n      } else {\n        const file = input.files[0];\n        if (!this.isFileAllowed(file)) {\n          this.errorMessage = 'Niepoprawne rozszerzenie pliku!';\n          return;\n        }\n        if (!this.isFileSizeAllowed(file)) {\n          this.errorMessage = 'Plik jest za duży!';\n          return;\n        }\n        this.selectedFiles = [file];\n        this.generateFilePreview(file);\n        this.errorMessage = null;\n        this.fileSelected.emit(file);\n      }\n    }\n  }\n\n  onDragOver(event: DragEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    (event.currentTarget as HTMLElement).classList.add('dragover');\n  }\n\n  onDragLeave(event: DragEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    (event.currentTarget as HTMLElement).classList.remove('dragover');\n  }\n\n  onDrop(event: DragEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    (event.currentTarget as HTMLElement).classList.remove('dragover');\n  \n    if (event.dataTransfer && event.dataTransfer.files.length > 0) {\n      if (this.multiple) {\n        for (let i = 0; i < event.dataTransfer.files.length; i++) {\n          const file = event.dataTransfer.files[i];\n          if (!this.isFileAllowed(file)) {\n            this.errorMessage = 'Niepoprawne rozszerzenie pliku!';\n            continue;\n          }\n          if (!this.isFileSizeAllowed(file)) {\n            this.errorMessage = 'Plik jest za duży!';\n            continue;\n          }\n          this.selectedFiles.push(file);\n          this.generateFilePreview(file);\n        }\n        event.dataTransfer.clearData();\n        this.errorMessage = null;\n        this.fileSelected.emit(this.selectedFiles);\n      } else {\n        const file = event.dataTransfer.files[0];\n        if (!this.isFileAllowed(file)) {\n          this.errorMessage = 'Niepoprawne rozszerzenie pliku!';\n          event.dataTransfer.clearData();\n          return;\n        }\n        if (!this.isFileSizeAllowed(file)) {\n          this.errorMessage = 'Plik jest za duży!';\n          event.dataTransfer.clearData();\n          return;\n        }\n        this.selectedFiles = [file];\n        this.generateFilePreview(file);\n        this.errorMessage = null;\n        this.fileSelected.emit(file);\n        event.dataTransfer.clearData();\n      }\n    }\n  }\n\n  isFileAllowed(file: File): boolean {\n    if (!this.allowedExtensions || this.allowedExtensions.length === 0) {\n      return true;\n    }\n    const extension = '.' + (file.name.split('.').pop()?.toLowerCase() || '');\n    return this.allowedExtensions.includes(extension);\n  }\n\n  isFileSizeAllowed(file: File): boolean {\n    if (this.maxFileSizeMb == null) {\n      return true;\n    }\n    const maxSizeBytes = this.maxFileSizeMb * 1024 * 1024;\n    return file.size <= maxSizeBytes;\n  }\n\n  generateFilePreview(file: File) {\n    const mimeType = file.type;\n    const preview: FilePreview = { file, previewUrl: null, isImage: false, isVideo: false };\n    if (!this.multiple) {\n      this.filePreviews = [];\n    }\n    this.filePreviews.push(preview);\n\n    if (mimeType.match(/image\\/*/) || mimeType.match(/video\\/*/)) {\n      const reader = new FileReader();\n      reader.onload = () => {\n        preview.previewUrl = reader.result as string;\n        preview.isImage = !!mimeType.match(/image\\/*/);\n        preview.isVideo = !!mimeType.match(/video\\/*/);\n      };\n      reader.readAsDataURL(file);\n    }\n  }\n\n  onUpload() {\n    if (this.selectedFiles.length > 0 && this.environment && this.endpoint) {\n      const uploadData = new FormData();\n      if (this.multiple) {\n        this.selectedFiles.forEach(file => {\n          uploadData.append('files', file, file.name);\n        });\n      } else {\n        uploadData.append('file', this.selectedFiles[0], this.selectedFiles[0].name);\n      }\n      this.uploadTriggered.emit();\n      this._http.post(this.environment + this.endpoint, uploadData, {\n        reportProgress: true,\n        observe: 'events',\n      }).subscribe({\n        next: (event) => {\n          if (event.type === HttpEventType.UploadProgress) {\n            this.uploadProgress = Math.round(100 * (event.loaded / event.total!));\n          } else if (event.type === HttpEventType.Response) {\n            this.successMessage = this.multiple ? 'Pliki przesłano pomyślnie' : 'Plik przesłano pomyślnie';\n            setTimeout(() => {\n              this.successMessage = null;\n              this.uploadProgress = 0;\n            }, 3500);\n          }\n        },\n        error: (error) => {\n          this.errorMessage = 'Wystąpił błąd: ' + error.statusText;\n          this.uploadProgress = 0;\n          console.error(error);\n        },\n      });\n    }\n  }\n\n  removeFile(file: File) {\n    if (this.multiple) {\n      this.selectedFiles = this.selectedFiles.filter(f => f !== file);\n      this.filePreviews = this.filePreviews.filter(preview => preview.file !== file);\n      this.fileSelected.emit(this.selectedFiles);\n    } else {\n      this.selectedFiles = [];\n      this.filePreviews = [];\n      this.fileSelected.emit(undefined);\n    }\n  }\n\n  clearFiles(fileInput: HTMLInputElement) {\n    this.selectedFiles = [];\n    this.filePreviews = [];\n    fileInput.value = '';\n    this.fileSelected.emit(this.multiple ? this.selectedFiles : undefined);\n  }\n}\n","<div class=\"upload-container\">\n  <div\n    class=\"file-drop-area\"\n    [ngStyle]=\"{ 'border-style': isDashedBorder ? 'dashed' : 'solid' }\"\n  >\n    <div\n      class=\"cursor-pointer\"\n      (click)=\"fileInput.click()\"\n      (dragover)=\"onDragOver($event)\"\n      (dragleave)=\"onDragLeave($event)\"\n      (drop)=\"onDrop($event)\"\n    >\n      <div\n        *ngIf=\"selectedFiles.length === 0\"\n        class=\"flex justify-content-between align-items-center flex-column p-3\"\n      >\n        <i class=\"pi p-5\" [ngClass]=\"mainIcon\"></i>\n        <div>\n          <span class=\"text-sm text-secondary\">{{ mainMessage }}</span\n          ><br />\n          <span class=\"text-xs text-secondary\">{{ subMessage }}</span>\n        </div>\n      </div>\n\n      <div\n        *ngIf=\"multiple && selectedFiles.length > 0\"\n        class=\"selected-files-list\"\n      >\n        <div *ngFor=\"let preview of filePreviews\" class=\"selected-file-item\">\n          <div *ngIf=\"preview.previewUrl\">\n            <img\n              class=\"media-preview\"\n              *ngIf=\"preview.isImage\"\n              [src]=\"preview.previewUrl\"\n              alt=\"Podgląd obrazu\"\n            />\n            <video\n              class=\"media-preview\"\n              *ngIf=\"preview.isVideo\"\n              [src]=\"preview.previewUrl\"\n              controls\n            ></video>\n          </div>\n          <div class=\"flex justify-content-center align-items-center\">\n            <div class=\"text-xs text-secondary mt-3\">\n              {{ choosedMessage }} {{ preview.file.name }}\n            </div>\n            <p-button\n              label=\"Usuń\"\n              (onClick)=\"removeFile(preview.file); $event.stopPropagation()\"\n            ></p-button>\n          </div>\n        </div>\n      </div>\n\n      <div\n        *ngIf=\"!multiple && selectedFiles.length > 0\"\n        class=\"flex justify-content-between align-items-center flex-column\"\n      >\n        <div *ngIf=\"filePreviews[0]?.previewUrl\">\n          <img\n            class=\"media-preview\"\n            *ngIf=\"filePreviews[0]?.isImage\"\n            [src]=\"filePreviews[0]?.previewUrl\"\n            alt=\"Podgląd obrazu\"\n          />\n          <video\n            class=\"media-preview\"\n            *ngIf=\"filePreviews[0]?.isVideo\"\n            [src]=\"filePreviews[0]?.previewUrl\"\n            controls\n          ></video>\n        </div>\n        <div class=\"text-xs text-secondary mt-3\">\n          {{ choosedMessage }} {{ selectedFiles[0]?.name }}\n        </div>\n      </div>\n\n      <input\n        type=\"file\"\n        #fileInput\n        (change)=\"onFileSelected($event)\"\n        class=\"visually-hidden-file-input\"\n        hidden\n        [attr.accept]=\"allowedExtensions ? allowedExtensions.join(',') : ''\"\n        [multiple]=\"multiple\"\n      />\n    </div>\n\n    <div class=\"buttons-container mt-3\">\n      <p-button\n        *ngIf=\"selectedFiles.length === 0\"\n        (click)=\"fileInput.click()\"\n        [label]=\"selectBtnLabel\"\n        iconPos=\"right\"\n        [icon]=\"'pi ' + buttonIcon\"\n        size=\"small\"\n      >\n      </p-button>\n      @if(multiple){\n      <p-button\n        *ngIf=\"selectedFiles.length > 0\"\n        (click)=\"fileInput.click()\"\n        [label]=\"addMoreBtnLabel\"\n        size=\"small\"\n      >\n      </p-button>\n      }@else {\n      <p-button\n        *ngIf=\"selectedFiles.length > 0\"\n        (click)=\"fileInput.click()\"\n        [label]=\"changeBtnLabel\"\n        size=\"small\"\n      >\n      </p-button>\n      }\n      <p-button\n        *ngIf=\"selectedFiles.length > 0 && environment && endpoint\"\n        (click)=\"onUpload()\"\n        label=\"Prześlij\"\n        size=\"small\"\n      >\n      </p-button>\n      @if(multiple){\n      <p-button\n        *ngIf=\"selectedFiles.length > 0\"\n        (click)=\"clearFiles(fileInput); $event.stopPropagation()\"\n        [outlined]=\"true\"\n        [label]=\"deleteAllBtnLabel\"\n        size=\"small\"\n      >\n      </p-button>\n      }@else {\n      <p-button\n        *ngIf=\"selectedFiles.length > 0\"\n        (click)=\"clearFiles(fileInput); $event.stopPropagation()\"\n        [outlined]=\"true\"\n        [label]=\"deleteBtnLabel\"\n        size=\"small\"\n      >\n      </p-button>\n      }\n    </div>\n\n    <em *ngIf=\"errorMessage\" class=\"error-message\">{{ errorMessage }}</em>\n    <em *ngIf=\"successMessage\" class=\"success-message\">{{ successMessage }}</em>\n  </div>\n</div>\n<div *ngIf=\"maxFileSizeMb\" class=\"file-size-info\">\n  <i class=\"pi pi-info-circle\"></i>\n  <span>Maksymalny rozmiar pliku to {{ maxFileSizeMb }}MB </span>  \n</div>","import * as dayjs from 'dayjs';\n\nexport enum dateRange {\n    DAY = \"day\",\n    WEEK = \"week\",\n    MONTH = \"month\",\n}   \n\nexport interface datePeriodsListItem {\n    label: string,\n    period: dateRange,\n    value: dayjs.Dayjs[]\n}","import {\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  Output,\n  inject,\n} from '@angular/core';\nimport { datePeriodsListItem, dateRange } from './date-picker.model';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport dayOfYear from 'dayjs/plugin/dayOfYear';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\nimport { CommonModule } from '@angular/common';\nimport { ListboxModule } from 'primeng/listbox';\nimport { CalendarModule } from 'primeng/calendar';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\n@Component({\n  selector: 'fas-services-date-picker',\n  standalone: true,\n  imports: [CommonModule, FormsModule, ListboxModule, CalendarModule, BrowserAnimationsModule],\n  templateUrl: './fas-services-date-picker.component.html',\n  styleUrl: './fas-services-date-picker.component.scss',\n})\nexport class FasServicesDatePickerComponent {\n  @Input() initialDateRange: string = dateRange.DAY; // 'day', 'week', 'month'\n\n  @Output() pickedDateEvent = new EventEmitter();\n  calendarValueToBeSent: Date[] = [];\n\n  // @HostListener('document:click', ['$event'])\n  // hideDatePickerOnClickOutside(event: any) {\n  //   if (!this.eRef.nativeElement.contains(event.target)) {\n  //     this.isPickerVisible = false;\n  //   }\n  // }\n\n\n  today = dayjs();\n  yesterday = dayjs().subtract(1, dateRange.DAY);\n  thisWeekStartDay = this.today.startOf(dateRange.WEEK).add(1, dateRange.DAY);\n  thisWeekEndDay = this.today.endOf(dateRange.WEEK).add(1, dateRange.DAY);\n  lastWeekStartDay = this.today\n    .startOf(dateRange.WEEK)\n    .subtract(1, dateRange.WEEK)\n    .add(1, dateRange.DAY);\n  lastWeekEndDay = this.today\n    .endOf(dateRange.WEEK)\n    .subtract(1, dateRange.WEEK)\n    .add(1, dateRange.DAY);\n  thisMonthStartDay = this.today.startOf(dateRange.MONTH);\n  thisMonthEndDay = this.today.endOf(dateRange.MONTH);\n  lastMonthStartDay = this.today\n    .startOf(dateRange.MONTH)\n    .subtract(1, dateRange.MONTH);\n  lastMonthEndDay = this.today\n    .subtract(1, dateRange.MONTH)\n    .endOf(dateRange.MONTH);\n\n  inputDateFormat = 'DD/MM/YYYY';\n  dateShowingInInput!: string | undefined;\n  calendarValue!: Date[] | null;\n  isPickerVisible = false;\n  numberOfDaysChangingByButtons!: number;\n  selectedPeriodOnTheList!: datePeriodsListItem | null;\n\n  datesOnList: datePeriodsListItem[] = [\n    {\n      label: \"Dzisiaj\",\n      period: dateRange.DAY,\n      value: [this.today, this.today],\n    },\n    {\n      label: \"Wczoraj\",\n      period: dateRange.DAY,\n      value: [this.yesterday, this.yesterday],\n    },\n    {\n      label: \"Ten tydzień\",\n      period: dateRange.WEEK,\n      value: [this.thisWeekStartDay, this.thisWeekEndDay],\n    },\n    {\n      label: \"Poprzedni tydzień\",\n      period: dateRange.WEEK,\n      value: [this.lastWeekStartDay, this.lastWeekEndDay],\n    },\n    {\n      label: \"Ten miesiąc\",\n      period: dateRange.MONTH,\n      value: [this.thisMonthStartDay, this.thisMonthEndDay],\n    },\n    {\n      label: \"Poprzedni miesiąc\",\n      period: dateRange.MONTH,\n      value: [this.lastMonthStartDay, this.lastMonthEndDay],\n    },\n  ];\n\n  constructor(private eRef: ElementRef) {\n    dayjs.extend(customParseFormat);\n    dayjs.extend(dayOfYear);\n    dayjs.extend(weekOfYear);\n  }\n\n  ngOnInit(): void {\n    this.setInitialDateRange();\n  }\n\n  setInitialDateRange() {\n    let startDate: Date | string | null = sessionStorage.getItem(\n      'dateStartFromYourWorkingTime'\n    );\n    let endDate: Date | string | null = sessionStorage.getItem(\n      'dateEndFromYourWorkingTime'\n    );\n    if (\n      startDate &&\n      startDate !== 'Invalid Date' &&\n      endDate &&\n      endDate !== 'Invalid Date' &&\n      window.location.href.includes('personal-working-time')\n    ) {\n      this.setInitialDateToSavedOne(\n        dayjs(startDate).toDate(),\n        dayjs(endDate).toDate()\n      );\n      return;\n    }\n    switch (this.initialDateRange) {\n      case dateRange.DAY:\n        this.setInitialDateToToday();\n        break;\n      case dateRange.WEEK:\n        this.setInitialDateToCurrentWeek();\n        break;\n      case dateRange.MONTH:\n        this.setInitialDateToCurrentMonth();\n        break;\n      default:\n        this.setInitialDateToToday();\n    }\n  }\n\n  setInitialDateToSavedOne(dateStart: Date, dateEnd: Date) {\n    this.calendarValue = [\n      dateStart ? dateStart : this.today.toDate(),\n      dateEnd ? dateEnd : this.today.toDate(),\n    ];\n    this.onCalendarDatePeriodChange();\n  }\n\n  setInitialDateToToday(): void {\n    this.selectedPeriodOnTheList = this.datesOnList[0];\n    this.calendarValue = [this.today.toDate(), this.today.toDate()];\n    this.onCalendarDatePeriodChange();\n  }\n\n  setInitialDateToCurrentWeek() {\n    this.selectedPeriodOnTheList = this.datesOnList[2];\n    this.calendarValue = [\n      this.thisWeekStartDay.toDate(),\n      this.thisWeekEndDay.toDate(),\n    ];\n    this.onCalendarDatePeriodChange();\n  }\n\n  setInitialDateToCurrentMonth() {\n    this.selectedPeriodOnTheList = this.datesOnList[4];\n    this.calendarValue = [\n      this.thisMonthStartDay.toDate(),\n      this.thisMonthEndDay.toDate(),\n    ];\n    this.onCalendarDatePeriodChange();\n  }\n\n  onDateListClick() {\n    setTimeout(() => {\n      this.calendarValue = [\n        dayjs(this.selectedPeriodOnTheList?.value[0]).toDate(),\n        dayjs(this.selectedPeriodOnTheList?.value[1]).toDate(),\n      ];\n      this.onCalendarDatePeriodChange();\n      // this.isPickerVisible = false;\n    }, 0);\n  }\n\n  isPickedDateMatchesListDateRange(pickedDate: Date[]) {\n    // check if year is the same\n    if (this.today.year() !== dayjs(pickedDate[1]).year()) {\n      this.selectedPeriodOnTheList = null;\n      return '';\n    }\n\n    const todayDayOfYear = this.today.dayOfYear();\n    const yesterdayDayOfYear = this.yesterday.dayOfYear();\n    const pickedDateStartDayOfYear = dayjs(pickedDate[0]).dayOfYear();\n    const pickedDateEndDayOfYear = dayjs(pickedDate[1]).dayOfYear();\n\n    const thisWeekStartDayOfYear = this.thisWeekStartDay.dayOfYear();\n    const thisWeekEndDayOfYear = this.thisWeekEndDay.dayOfYear();\n    const lastWeekStartDayOfYear = this.lastWeekStartDay.dayOfYear();\n    const lastWeekEndDayOfYear = this.lastWeekEndDay.dayOfYear();\n    const thisMonthStartDayOfYear = this.thisMonthStartDay.dayOfYear();\n    const thisMonthEndDayOfYear = this.thisMonthEndDay.dayOfYear();\n    const lastMonthStartDayOfYear = this.lastMonthStartDay.dayOfYear();\n    const lastMonthEndDayOfYear = this.lastMonthEndDay.dayOfYear();\n\n    if (\n      todayDayOfYear === pickedDateStartDayOfYear &&\n      todayDayOfYear === pickedDateEndDayOfYear\n    ) {\n      this.selectedPeriodOnTheList = this.datesOnList[0];\n      return \"Dzisiaj\";\n    } else if (\n      yesterdayDayOfYear === pickedDateStartDayOfYear &&\n      yesterdayDayOfYear === pickedDateEndDayOfYear\n    ) {\n      this.selectedPeriodOnTheList = this.datesOnList[1];\n      return \"Wczoraj\";\n    } else if (\n      thisWeekStartDayOfYear === pickedDateStartDayOfYear &&\n      thisWeekEndDayOfYear === pickedDateEndDayOfYear\n    ) {\n      this.selectedPeriodOnTheList = this.datesOnList[2];\n      return \"Ten tydzień\";\n    } else if (\n      lastWeekStartDayOfYear === pickedDateStartDayOfYear &&\n      lastWeekEndDayOfYear === pickedDateEndDayOfYear\n    ) {\n      this.selectedPeriodOnTheList = this.datesOnList[3];\n      return \"Poprzedni tydzień\";\n    } else if (\n      thisMonthStartDayOfYear === pickedDateStartDayOfYear &&\n      thisMonthEndDayOfYear === pickedDateEndDayOfYear\n    ) {\n      this.selectedPeriodOnTheList = this.datesOnList[4];\n      return \"Ten miesiąc\";\n    } else if (\n      lastMonthStartDayOfYear === pickedDateStartDayOfYear &&\n      lastMonthEndDayOfYear === pickedDateEndDayOfYear\n    ) {\n      this.selectedPeriodOnTheList = this.datesOnList[5];\n      return \"Poprzedni miesiąc\";\n    } else {\n      this.selectedPeriodOnTheList = null;\n      return '';\n    }\n  }\n\n  showPickedDateInInput(matchedDateRangeName: string) {\n    // if selected date range matches one of those in the list, show it as words\n    if (matchedDateRangeName) {\n      this.dateShowingInInput = matchedDateRangeName;\n    } else {\n      if (\n        dayjs(this.calendarValueToBeSent![0]).dayOfYear() ===\n        dayjs(this.calendarValueToBeSent![1]).dayOfYear()\n      ) {\n        // show only one date\n        this.dateShowingInInput = `${dayjs(\n          this.calendarValueToBeSent![0]\n        ).format(this.inputDateFormat)}`;\n      } else {\n        // show both dates with '-' between them\n        this.dateShowingInInput = `${dayjs(\n          this.calendarValueToBeSent![0]\n        ).format(this.inputDateFormat)} - ${dayjs(\n          this.calendarValueToBeSent![1]\n        ).format(this.inputDateFormat)}`;\n      }\n    }\n  }\n\n  onCalendarDatePeriodChange() {\n    this.calendarValueToBeSent[0] = new Date(this.calendarValue![0]);\n\n    if (this.calendarValue![1]) {\n      this.calendarValueToBeSent[1] = new Date(this.calendarValue![1]);\n    } else {\n      this.calendarValueToBeSent[1] = new Date(this.calendarValueToBeSent![0]);\n    }\n\n    const matchedDateRangeName = this.isPickedDateMatchesListDateRange(\n      this.calendarValueToBeSent\n    );\n    this.showPickedDateInInput(matchedDateRangeName);\n\n    // the difference between two selected dates, increased by 1\n    this.numberOfDaysChangingByButtons =\n      dayjs(this.calendarValueToBeSent[1]).diff(\n        dayjs(this.calendarValueToBeSent[0]),\n        dateRange.DAY\n      ) + 1;\n\n    this.emitCurrentSelectedDate(this.calendarValueToBeSent);\n  }\n\n  changeDatePeriodByButton(direction: 'add' | 'subtract') {\n    if (!this.calendarValue![1]) {\n      this.calendarValue![1] = new Date(this.calendarValue![0]);\n    }\n    const currentStartDate = dayjs(this.calendarValue![0]);\n    const currentEndDate = dayjs(this.calendarValue![1]);\n\n    const isCurrentStartDayEqualMonthStartDay: boolean =\n      currentStartDate.startOf(dateRange.MONTH).dayOfYear() ===\n      dayjs(this.calendarValue![0]).dayOfYear();\n    const isCurrentEndDayEqualMonthEndDay: boolean =\n      currentEndDate.endOf(dateRange.MONTH).dayOfYear() ===\n      dayjs(this.calendarValue![1]).dayOfYear();\n\n    let newStartDate;\n    let newEndDate;\n\n    // if the selected date range is equal to a month, set newEndDate as the last day of that month\n    // thanks to this, the new date range is always equal to the whole month, no matter how many days it has\n    if (\n      isCurrentStartDayEqualMonthStartDay &&\n      isCurrentEndDayEqualMonthEndDay\n    ) {\n      newStartDate = currentStartDate[direction](1, dateRange.MONTH);\n      newEndDate = newStartDate.endOf(dateRange.MONTH);\n    } else {\n      newStartDate = currentStartDate[direction](\n        this.numberOfDaysChangingByButtons,\n        dateRange.DAY\n      );\n      newEndDate = currentEndDate[direction](\n        this.numberOfDaysChangingByButtons,\n        dateRange.DAY\n      );\n    }\n    this.calendarValue = [newStartDate.toDate(), newEndDate.toDate()];\n    this.onCalendarDatePeriodChange();\n  }\n\n  emitCurrentSelectedDate(calendarValue: Date[]) {\n    this.pickedDateEvent.emit(calendarValue);\n  }\n\n  toggleDatePicker() {\n    this.isPickerVisible = !this.isPickerVisible;\n  }\n}\n","<div class=\"container\"> \n  <div class=\"inputgroup\" class=\"p-inputgroup\">\n      <input type=\"text\" pInputText [(ngModel)]=\"dateShowingInInput\" (click)=\"toggleDatePicker()\" class=\"input\" readonly/>\n      <button (click)=\"changeDatePeriodByButton('subtract')\" type=\"button\" pButton pRipple icon=\"pi pi-angle-left\" class=\"p-button-text p-button-plain\"></button>    \n      <button (click)=\"changeDatePeriodByButton('add')\" type=\"button\" pButton pRipple icon=\"pi pi-angle-right\" class=\"p-button-text p-button-plain\"></button>    \n  </div>\n  <div class=\"datepicker__wrapper\" [ngClass]=\"{'datepicker__wrapper--show': isPickerVisible}\">\n      <div class=\"datepicker__content\">\n          <div class=\"list\">\n              <p-listbox scrollHeight=\"auto\" [options]=\"datesOnList\" (onClick)=\"onDateListClick()\" [(ngModel)]=\"selectedPeriodOnTheList\" optionLabel=\"label\"></p-listbox>\n          </div>\n          <div class=\"calendar\">\n              <p-calendar class=\"calendar__mobile\" [(ngModel)]=\"calendarValue\" [numberOfMonths]=\"1\" [firstDayOfWeek]=1 (onSelect)=\"onCalendarDatePeriodChange()\" [inline]=\"true\" selectionMode=\"range\"></p-calendar>\n              <p-calendar class=\"calendar__desktop\" [(ngModel)]=\"calendarValue\" [numberOfMonths]=\"2\" [firstDayOfWeek]=1 (onSelect)=\"onCalendarDatePeriodChange()\" [inline]=\"true\" selectionMode=\"range\"></p-calendar>\n          </div>\n      </div>\n  </div>\n</div>\n","import {\n  AfterContentInit,\n  Component,\n  ContentChildren,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  TemplateRef,\n} from '@angular/core';\nimport { IFooterButtonOptions } from './custom-table.model';\nimport {\n  IFasTableActionButton,\n  IFasTableDropdownFilter,\n  IFasTableFilters,\n  IFasTableToggleButton,\n} from './custom-table.model';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { CommonModule } from '@angular/common';\nimport { TableModule } from 'primeng/table';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { CalendarModule } from 'primeng/calendar';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { Subject, Subscription, interval } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { OverlayPanelModule } from 'primeng/overlaypanel';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\n\n@Component({\n  selector: 'fas-services-table',\n  standalone: true,\n  imports: [\n    TableModule,\n    CommonModule,\n    TooltipModule,\n    ButtonModule,\n    CheckboxModule,\n    CalendarModule,\n    InputTextModule,\n    ReactiveFormsModule,\n    FormsModule,\n    MultiSelectModule,\n    OverlayPanelModule,\n    InputGroupModule,\n    InputGroupAddonModule,\n  ],\n  templateUrl: './fas-service-table.component.html',\n  styleUrl: './fas-service-table.component.css',\n})\nexport class FasServiceTableComponent\n  implements AfterContentInit, OnInit, OnDestroy {\n  @ContentChildren(TemplateRef) templates!: QueryList<TemplateRef<any>>;\n  customTemplates = new Map<string, TemplateRef<any>>();\n\n  @Input() showBorder: boolean = false;\n  @Input() value: any[] = [];\n  @Input() columns: any[] = [];\n  @Input() rows: number = 10;\n  @Input() scrollHeight: string = '50vh';\n  @Input() rowsPerPageOptions: number[] = [10, 25, 50, 100];\n  @Input() paginator: boolean = true;\n  @Input() globalFilterFields: string[] = [];\n  @Input() dataKey: string = '';\n  @Input() showCurrentPageReport: boolean = true;\n  @Input() loading: boolean = false;\n  @Input() styleClass: string = '';\n  @Input() showCheckbox: boolean = false;\n  @Input() selection?: any;\n  @Input() selectionMode?: 'single' | 'multiple' | null | undefined;\n  @Input() unselectOnClick?: boolean = true;\n  @Input() lazy: boolean = false;\n  @Input() first: number = 0;\n  @Input() customFunction!: (rowData: any, rowIndex: number) => void;\n  @Input() showEmptyColumn: boolean = false;\n  @Input() footerButtonOptions!:\n    | IFooterButtonOptions\n    | IFooterButtonOptions[]\n    | null;\n  @Input() rowClickFunction!: (rowData: any, rowIndex: number) => void;\n  @Input() isOutlineHeadlight: boolean = false;\n  @Input() isInsideHeadlight: boolean = false;\n  @Input() checkboxSelectHeadlight: boolean = false;\n  @Input() customSelectHeadlight: boolean = false;\n  @Input() showFooterPageReport: boolean = true;\n  @Input() isTransparentHeader: boolean = false;\n  @Input() customResultsName!: string;\n  @Input() totalRecords!: number;\n  @Input() alwaysShowPaginator: boolean = true;\n  @Input() paginatorDropdownUp: boolean = false;\n\n  // ── Filter bar inputs ────────────────────────────────────────────\n  /** Show text search input above the table */\n  @Input() showSearch: boolean = false;\n  /** Placeholder for the search input */\n  @Input() searchPlaceholder: string = 'Szukaj...';\n  /** Show date-range calendar picker above the table */\n  @Input() showDateRange: boolean = false;\n  /** Label shown before the date-range inputs */\n  @Input() dateRangeLabel: string = 'Data od';\n  /** Maximum selectable date in the calendar, defaults to today */\n  @Input() maxDate: Date = new Date();\n  /** Toggle buttons rendered in the filter bar */\n  @Input() toggleButtons: IFasTableToggleButton[] = [];\n  /** Action buttons rendered in the filter bar */\n  @Input() actionButtons: IFasTableActionButton[] = [];\n  /** Show manual refresh button in the filter bar */\n  @Input() showRefreshButton: boolean = false;\n  /** Tooltip and mobile menu label for the manual refresh button */\n  @Input() refreshButtonTooltip: string = 'Refresh';\n  /**\n   * Enable auto-refresh: shows a countdown and emits autoRefresh every N seconds.\n   * Set to null/0 to disable.\n   */\n  @Input() autoRefreshSeconds: number | null = null;\n  private _showClearFilter: boolean = true;\n  /** Show clear filter icon button when there are active filters */\n  @Input()\n  set showClearFilter(value: boolean | string) {\n    this._showClearFilter = this._coerceBoolean(value);\n  }\n  get showClearFilter(): boolean {\n    return this._showClearFilter;\n  }\n  /** @deprecated Use showClearFilter instead. */\n  @Input()\n  set showClearFilterButton(value: boolean | string) {\n    this._showClearFilter = this._coerceBoolean(value);\n  }\n  get showClearFilterButton(): boolean {\n    return this._showClearFilter;\n  }\n  /** Tooltip and mobile menu label for the clear filter button */\n  @Input() clearFilterTooltip: string = 'Clear filter';\n  /** Debounce delay in ms for the search input (default 500) */\n  @Input() searchDebounceMs: number = 500;\n  /** Multiselect dropdown filters rendered in the filter bar */\n  @Input() dropdownFilters: IFasTableDropdownFilter[] = [];\n\n  // ── Filter bar outputs ───────────────────────────────────────────\n  /** Emits current filter state whenever any filter value changes */\n  @Output() filtersChange = new EventEmitter<IFasTableFilters>();\n  /** Emits when the manual refresh button is clicked */\n  @Output() refreshClick = new EventEmitter<void>();\n  /** Emits on every auto-refresh tick */\n  @Output() autoRefresh = new EventEmitter<void>();\n  /** Emits the id of the action button that was clicked */\n  @Output() actionClick = new EventEmitter<string>();\n\n  // ── Filter bar state ─────────────────────────────────────────────\n  public filterSearchValue: string = '';\n  public filterDateFrom: Date | null = null;\n  public filterTimeFrom: Date | null = null;\n  public filterDateTo: Date | null = null;\n  public filterTimeTo: Date | null = null;\n  public filterToggleValues: Record<string, boolean> = {};\n  public filterDropdownValues: Record<string, any[]> = {};\n  public filterHasActive: boolean = false;\n  public filterRefreshCountdown: number = 0;\n\n  private _searchSubject = new Subject<string>();\n  private _filterSubscription = new Subscription();\n  private _destroy$ = new Subject<void>();\n\n  // ── Table outputs ────────────────────────────────────────────────\n  @Output() pageChange: EventEmitter<{ first: number; rows: number }> =\n    new EventEmitter();\n  @Output() selectionChange: EventEmitter<any[]> = new EventEmitter<any[]>();\n  @Output() lazyLoad: EventEmitter<any> = new EventEmitter<any>();\n\n  selectedRowIndexes: number[] = [];\n\n  // ── Responsive ───────────────────────────────────────────────────\n  isMobile: boolean = typeof window !== 'undefined' && window.innerWidth < 768;\n\n  @HostListener('window:resize')\n  onResize(): void {\n    this.isMobile = window.innerWidth < 768;\n  }\n\n  // ── Computed helpers ─────────────────────────────────────────────\n  get filterLeftActionButtons(): IFasTableActionButton[] {\n    return this.actionButtons.filter((b) => b.position === 'left');\n  }\n\n  get filterRightActionButtons(): IFasTableActionButton[] {\n    return this.actionButtons.filter(\n      (b) => !b.position || b.position === 'right'\n    );\n  }\n\n  get showFilterBar(): boolean {\n    return (\n      this.showSearch ||\n      this.showDateRange ||\n      this.toggleButtons.length > 0 ||\n      this.dropdownFilters.length > 0 ||\n      this.actionButtons.length > 0 ||\n      this.showRefreshButton ||\n      (this.autoRefreshSeconds != null && this.autoRefreshSeconds > 0)\n    );\n  }\n\n  get hasMobileHiddenActions(): boolean {\n    return (\n      this.toggleButtons.length > 0 ||\n      this.actionButtons.length > 0 ||\n      this.showRefreshButton ||\n      (this.autoRefreshSeconds != null && this.autoRefreshSeconds > 0) ||\n      (this.showClearFilter && this.filterHasActive)\n    );\n  }\n\n  // ── Lifecycle ────────────────────────────────────────────────────\n  ngOnInit(): void {\n    for (const btn of this.toggleButtons) {\n      this.filterToggleValues[btn.id] = btn.initialValue ?? false;\n    }\n    for (const dd of this.dropdownFilters) {\n      this.filterDropdownValues[dd.id] = [];\n    }\n\n    this._searchSubject\n      .pipe(debounceTime(this.searchDebounceMs), takeUntil(this._destroy$))\n      .subscribe(() => this._emitFilters());\n\n    if (this.autoRefreshSeconds && this.autoRefreshSeconds > 0) {\n      this.filterRefreshCountdown = this.autoRefreshSeconds;\n      this._filterSubscription.add(\n        interval(1000).subscribe(() => {\n          if (this.filterRefreshCountdown > 0) {\n            this.filterRefreshCountdown--;\n          }\n          if (this.filterRefreshCountdown === 0) {\n            this.filterRefreshCountdown = this.autoRefreshSeconds!;\n            this.autoRefresh.emit();\n          }\n        })\n      );\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n    this._filterSubscription.unsubscribe();\n  }\n\n  // ── Filter bar handlers ──────────────────────────────────────────\n  onFilterSearchChange(): void {\n    this._updateFilterHasActive();\n    this._searchSubject.next(this.filterSearchValue);\n  }\n\n  onFilterDateRangeChange(): void {\n    this._emitFilters();\n  }\n\n  onFilterTimeFromChange(): void {\n    if (this.filterDateFrom) {\n      this._emitFilters();\n    }\n  }\n\n  onFilterTimeToChange(): void {\n    if (this.filterDateTo) {\n      this._emitFilters();\n    }\n  }\n\n  onFilterToggleClick(id: string): void {\n    this.filterToggleValues[id] = !this.filterToggleValues[id];\n    this._emitFilters();\n  }\n\n  onFilterRefreshClick(): void {\n    if (this.autoRefreshSeconds && this.autoRefreshSeconds > 0) {\n      this.filterRefreshCountdown = this.autoRefreshSeconds;\n    }\n    this.refreshClick.emit();\n  }\n\n  onFilterActionClick(id: string): void {\n    this.actionClick.emit(id);\n  }\n\n  getMobileToggleLabel(btn: IFasTableToggleButton): string {\n    return (\n      (this.filterToggleValues[btn.id] ? btn.onLabel : btn.offLabel) ||\n      btn.tooltip ||\n      btn.id\n    );\n  }\n\n  getMobileActionLabel(btn: IFasTableActionButton): string {\n    return btn.label || btn.tooltip || this._formatActionId(btn.id);\n  }\n\n  getMobileActionIcon(btn: IFasTableActionButton): string {\n    return btn.icon || this._getDefaultActionIcon(btn.id);\n  }\n\n  getMobileClearFilterLabel(): string {\n    return this.clearFilterTooltip || 'Clear filter';\n  }\n\n  getMobileRefreshLabel(): string {\n    return this.refreshButtonTooltip || 'Refresh';\n  }\n\n  clearFilters(): void {\n    this.filterSearchValue = '';\n    this.filterDateFrom = null;\n    this.filterTimeFrom = null;\n    this.filterDateTo = null;\n    this.filterTimeTo = null;\n    for (const btn of this.toggleButtons) {\n      this.filterToggleValues[btn.id] = btn.initialValue ?? false;\n    }\n    for (const dd of this.dropdownFilters) {\n      this.filterDropdownValues[dd.id] = [];\n    }\n    this._emitFilters();\n  }\n\n  onFilterDropdownChange(): void {\n    this._emitFilters();\n  }\n\n  /** Programmatically set search value (e.g. from a global search effect) */\n  setFilterSearchValue(value: string): void {\n    this.filterSearchValue = value;\n    this._emitFilters();\n  }\n\n  /** Programmatically set a toggle value */\n  setFilterToggleValue(id: string, value: boolean): void {\n    this.filterToggleValues[id] = value;\n    this._emitFilters();\n  }\n\n  /** Reset the auto-refresh countdown without triggering a reload */\n  resetAutoRefreshCountdown(): void {\n    if (this.autoRefreshSeconds && this.autoRefreshSeconds > 0) {\n      this.filterRefreshCountdown = this.autoRefreshSeconds;\n    }\n  }\n\n  private _mergeDateTime(date: Date | null, time: Date | null): Date | null {\n    if (!date) return null;\n    const result = new Date(date);\n    if (time) {\n      result.setHours(time.getHours(), time.getMinutes(), 0, 0);\n    } else {\n      result.setHours(0, 0, 0, 0);\n    }\n    return result;\n  }\n\n  private _emitFilters(): void {\n    const filters: IFasTableFilters = {\n      searchString: this.filterSearchValue,\n      dateRangeStart: this._mergeDateTime(this.filterDateFrom, this.filterTimeFrom),\n      dateRangeEnd: this._mergeDateTime(this.filterDateTo, this.filterTimeTo),\n      toggleValues: { ...this.filterToggleValues },\n      dropdownValues: { ...this.filterDropdownValues },\n    };\n    this._updateFilterHasActive();\n    this.filtersChange.emit(filters);\n  }\n\n  private _updateFilterHasActive(): void {\n    this.filterHasActive =\n      !!this.filterSearchValue ||\n      !!this.filterDateFrom ||\n      !!this.filterDateTo ||\n      this.toggleButtons.some((btn) => {\n        const initialValue = btn.initialValue ?? false;\n        return this.filterToggleValues[btn.id] !== initialValue;\n      }) ||\n      Object.values(this.filterDropdownValues).some((arr) => arr.length > 0);\n  }\n\n  private _coerceBoolean(value: boolean | string): boolean {\n    return value != null && `${value}` !== 'false';\n  }\n\n  private _formatActionId(id: string): string {\n    return id\n      .replace(/([a-z])([A-Z])/g, '$1 $2')\n      .replace(/[-_]+/g, ' ')\n      .replace(/^./, (char) => char.toUpperCase());\n  }\n\n  private _getDefaultActionIcon(id: string): string {\n    const normalizedId = id.toLowerCase();\n    if (normalizedId.includes('refresh')) {\n      return 'pi pi-refresh';\n    }\n    if (normalizedId.includes('add')) {\n      return 'pi pi-plus';\n    }\n    if (normalizedId.includes('import') || normalizedId.includes('upload')) {\n      return 'pi pi-upload';\n    }\n    if (normalizedId.includes('export') || normalizedId.includes('download')) {\n      return 'pi pi-download';\n    }\n    return 'pi pi-circle';\n  }\n\n  ngAfterContentInit() {\n    this.templates.forEach((templateRef: TemplateRef<any>) => {\n      const element = (templateRef as any)._declarationTContainer\n        ?.localNames?.[0];\n      if (element) {\n        this.customTemplates.set(element, templateRef);\n      }\n    });\n  }\n\n  customActions(\n    callback: any,\n    rowData: any,\n    rowIndex: number,\n    isSelectAction: boolean,\n    event?: MouseEvent\n  ): void {\n    if (callback && typeof callback === 'function') {\n      callback(rowData, rowIndex, event);\n    }\n\n    if (isSelectAction) {\n      this.toggleSelectedRow(rowIndex);\n    }\n  }\n\n  onRowClick(rowData: any, rowIndex: number): void {\n    if (this.rowClickFunction) {\n      this.rowClickFunction(rowData, rowIndex);\n    }\n  }\n\n  onPageChange(event: any): void {\n    this.first = event.first;\n    this.rows = event.rows;\n\n    this.pageChange.emit({ first: this.first, rows: this.rows });\n  }\n\n  toggleSelectedRow(rowIndex: number): void {\n    if (this.customSelectHeadlight) {\n      const index = this.selectedRowIndexes.indexOf(rowIndex);\n      if (index === -1) {\n        this.selectedRowIndexes.push(rowIndex);\n      } else {\n        this.selectedRowIndexes.splice(index, 1);\n      }\n    }\n  }\n\n  selectRow(rowIndex: number): void {\n    if (\n      this.customSelectHeadlight &&\n      !this.selectedRowIndexes.includes(rowIndex)\n    ) {\n      this.selectedRowIndexes.push(rowIndex);\n    }\n  }\n\n  deselectRow(rowIndex: number): void {\n    if (this.customSelectHeadlight) {\n      const index = this.selectedRowIndexes.indexOf(rowIndex);\n      if (index !== -1) {\n        this.selectedRowIndexes.splice(index, 1);\n      }\n    }\n  }\n\n  deselectAllRows(): void {\n    if (this.customSelectHeadlight) {\n      this.selectedRowIndexes = [];\n    }\n  }\n\n  onSelectionChange(newSelection: any): void {\n    this.selection = newSelection;\n    this.selectionChange.emit(this.selection);\n  }\n\n  hasActions(): boolean {\n    return this.columns.some((col) => col.actions && col.actions.length > 0);\n  }\n\n  selectFirstPage(): void {\n    this.first = 0;\n  }\n\n  onLazyLoad(event: any): void {\n    if (this.lazy) {\n      const page = event.first / event.rows + 1;\n      const pageSize = event.rows;\n      this.lazyLoad.emit({ page, pageSize });\n    }\n  }\n\n  isArray(obj: any): boolean {\n    return Array.isArray(obj);\n  }\n\n  isSingleButtonOption(obj: any): boolean {\n    return obj && !Array.isArray(obj);\n  }\n\n  getSingleFooterButtonOption(): IFooterButtonOptions {\n    return this.footerButtonOptions as IFooterButtonOptions;\n  }\n\n  getFooterButtonOptionsArray(): IFooterButtonOptions[] {\n    return this.footerButtonOptions as IFooterButtonOptions[];\n  }\n}\n","<div *ngIf=\"showFilterBar\" class=\"fas-table-filter-bar\">\n\n  <!-- Left: search, clear, date range, toggles, left action buttons -->\n  <div class=\"fas-table-filter-bar__left\">\n      <span class=\"fas-table-filter-bar__search\" *ngIf=\"showSearch\">\n        <i class=\"pi pi-search\"></i>\n        <input\n          pInputText\n          type=\"text\"\n          [(ngModel)]=\"filterSearchValue\"\n          [placeholder]=\"searchPlaceholder\"\n          (ngModelChange)=\"onFilterSearchChange()\"\n          class=\"fas-table-filter-bar__search-input\"\n        />\n      </span>\n\n    <p-button\n      *ngIf=\"hasMobileHiddenActions\"\n      class=\"fas-table-filter-bar__mobile-more\"\n      icon=\"pi pi-ellipsis-v\"\n      [outlined]=\"true\"\n      (onClick)=\"mobileFilterActions.toggle($event)\"\n    ></p-button>\n\n    <!-- Date range picker -->\n    <div *ngIf=\"showDateRange\" class=\"fas-date-range\">\n      <span class=\"fas-date-range__label\">{{ dateRangeLabel }}</span>\n\n      <!-- From: date + time -->\n      <div class=\"fas-date-range__group\">\n        <p-calendar\n          [(ngModel)]=\"filterDateFrom\"\n          dateFormat=\"dd.mm.yy\"\n          [showIcon]=\"true\"\n          [iconDisplay]=\"'input'\"\n          [showOnFocus]=\"true\"\n          [placeholder]=\"'00.00.0000'\"\n          [maxDate]=\"maxDate\"\n          [appendTo]=\"'body'\"\n          (onSelect)=\"onFilterDateRangeChange()\"\n          (onClear)=\"onFilterDateRangeChange()\"\n          (ngModelChange)=\"onFilterDateRangeChange()\"\n          styleClass=\"fas-date-range__cal\"\n        ></p-calendar>\n        <p-calendar\n          [(ngModel)]=\"filterTimeFrom\"\n          [timeOnly]=\"true\"\n          [showIcon]=\"true\"\n          [iconDisplay]=\"'input'\"\n          [placeholder]=\"'00:00'\"\n          [appendTo]=\"'body'\"\n          (onSelect)=\"onFilterTimeFromChange()\"\n          (ngModelChange)=\"onFilterTimeFromChange()\"\n          styleClass=\"fas-date-range__time\"\n        >\n          <ng-template pTemplate=\"inputicon\" let-clickCallBack=\"clickCallBack\">\n            <i class=\"pi pi-clock pointer-events-none\" (click)=\"clickCallBack($event)\"></i>\n          </ng-template>\n        </p-calendar>\n      </div>\n\n      <span class=\"fas-date-range__sep\">-</span>\n\n      <!-- To: date + time -->\n      <div class=\"fas-date-range__group\">\n        <p-calendar\n          [(ngModel)]=\"filterDateTo\"\n          dateFormat=\"dd.mm.yy\"\n          [showIcon]=\"true\"\n          [iconDisplay]=\"'input'\"\n          [showOnFocus]=\"true\"\n          [placeholder]=\"'00.00.0000'\"\n          [maxDate]=\"maxDate\"\n          [appendTo]=\"'body'\"\n          (onSelect)=\"onFilterDateRangeChange()\"\n          (onClear)=\"onFilterDateRangeChange()\"\n          (ngModelChange)=\"onFilterDateRangeChange()\"\n          styleClass=\"fas-date-range__cal\"\n        ></p-calendar>\n        <p-calendar\n          [(ngModel)]=\"filterTimeTo\"\n          [timeOnly]=\"true\"\n          [showIcon]=\"true\"\n          [iconDisplay]=\"'input'\"\n          [placeholder]=\"'00:00'\"\n          [appendTo]=\"'body'\"\n          (onSelect)=\"onFilterTimeToChange()\"\n          (ngModelChange)=\"onFilterTimeToChange()\"\n          styleClass=\"fas-date-range__time\"\n        >\n          <ng-template pTemplate=\"inputicon\" let-clickCallBack=\"clickCallBack\">\n            <i class=\"pi pi-clock pointer-events-none\" (click)=\"clickCallBack($event)\"></i>\n          </ng-template>\n        </p-calendar>\n      </div>\n    </div>\n\n    <ng-container *ngFor=\"let btn of toggleButtons\">\n      <p-button\n        class=\"fas-table-filter-bar__extra-action\"\n        [label]=\"filterToggleValues[btn.id] ? (btn.onLabel ?? '') : (btn.offLabel ?? '')\"\n        [icon]=\"btn.icon ?? ''\"\n        [outlined]=\"!filterToggleValues[btn.id]\"\n        [severity]=\"filterToggleValues[btn.id] ? btn.severity : undefined\"\n        [pTooltip]=\"btn.tooltip ?? ''\"\n        tooltipPosition=\"bottom\"\n        [tooltipDisabled]=\"isMobile\"\n        (onClick)=\"onFilterToggleClick(btn.id)\"\n      ></p-button>\n    </ng-container>\n\n    <ng-container *ngFor=\"let dd of dropdownFilters\">\n      <p-multiSelect\n        class=\"fas-table-filter-bar__dropdown-control\"\n        [options]=\"dd.options\"\n        [(ngModel)]=\"filterDropdownValues[dd.id]\"\n        optionLabel=\"label\"\n        optionValue=\"value\"\n        [placeholder]=\"dd.placeholder\"\n        [filter]=\"true\"\n        filterPlaceholder=\"Szukaj...\"\n        [showClear]=\"false\"\n        [appendTo]=\"'body'\"\n        styleClass=\"fas-table-filter-bar__dropdown\"\n        [style]=\"{ maxWidth: dd.maxWidth ?? '220px', minWidth: '150px', height: '40px' }\"\n        (onChange)=\"onFilterDropdownChange()\"\n      ></p-multiSelect>\n    </ng-container>\n\n    <ng-container *ngFor=\"let btn of filterLeftActionButtons\">\n      <p-button\n        class=\"fas-table-filter-bar__extra-action\"\n        [label]=\"btn.label ?? ''\"\n        [icon]=\"btn.icon ?? ''\"\n        [outlined]=\"btn.outlined ?? false\"\n        [severity]=\"btn.severity\"\n        [disabled]=\"btn.disabled ?? false\"\n        [pTooltip]=\"btn.tooltip ?? ''\"\n        tooltipPosition=\"bottom\"\n        [tooltipDisabled]=\"isMobile\"\n        (onClick)=\"onFilterActionClick(btn.id)\"\n      ></p-button>\n    </ng-container>\n\n    <p-button\n      class=\"fas-table-filter-bar__clear-action\"\n      *ngIf=\"showClearFilter && filterHasActive\"\n      icon=\"pi pi-filter-slash\"\n      [outlined]=\"true\"\n      [pTooltip]=\"clearFilterTooltip\"\n      tooltipPosition=\"bottom\"\n      [tooltipDisabled]=\"isMobile\"\n      (onClick)=\"clearFilters()\"\n    ></p-button>\n\n  </div>\n\n  <!-- Right: right action buttons, countdown, refresh -->\n  <div class=\"fas-table-filter-bar__right\">\n\n    <ng-container *ngFor=\"let btn of filterRightActionButtons\">\n      <p-button\n        class=\"fas-table-filter-bar__extra-action\"\n        [label]=\"btn.label ?? ''\"\n        [icon]=\"btn.icon ?? ''\"\n        [outlined]=\"btn.outlined ?? false\"\n        [severity]=\"btn.severity\"\n        [disabled]=\"btn.disabled ?? false\"\n        [pTooltip]=\"btn.tooltip ?? ''\"\n        tooltipPosition=\"bottom\"\n        [tooltipDisabled]=\"isMobile\"\n        (onClick)=\"onFilterActionClick(btn.id)\"\n      ></p-button>\n    </ng-container>\n\n    <span\n      *ngIf=\"autoRefreshSeconds && autoRefreshSeconds > 0\"\n      class=\"fas-table-filter-bar__countdown\"\n    >\n      <strong>{{ filterRefreshCountdown }}s</strong>\n    </span>\n\n    <p-button\n      *ngIf=\"showRefreshButton || (autoRefreshSeconds && autoRefreshSeconds > 0)\"\n      icon=\"pi pi-refresh\"\n      [outlined]=\"true\"\n      [pTooltip]=\"refreshButtonTooltip\"\n      tooltipPosition=\"bottom\"\n      [tooltipDisabled]=\"isMobile\"\n      (onClick)=\"onFilterRefreshClick()\"\n    ></p-button>\n\n  </div>\n\n  <p-overlayPanel #mobileFilterActions styleClass=\"fas-table-filter-bar__mobile-overlay\">\n    <div class=\"fas-table-filter-bar__mobile-actions\">\n      <ng-container *ngFor=\"let btn of toggleButtons\">\n        <button\n          type=\"button\"\n          class=\"fas-table-filter-bar__mobile-action\"\n          (click)=\"onFilterToggleClick(btn.id); mobileFilterActions.hide()\"\n        >\n          <i [ngClass]=\"btn.icon || 'pi pi-check-circle'\"></i>\n          <span>{{ getMobileToggleLabel(btn) }}</span>\n        </button>\n      </ng-container>\n\n      <ng-container *ngFor=\"let btn of filterLeftActionButtons\">\n        <button\n          type=\"button\"\n          class=\"fas-table-filter-bar__mobile-action\"\n          [disabled]=\"btn.disabled ?? false\"\n          (click)=\"onFilterActionClick(btn.id); mobileFilterActions.hide()\"\n        >\n          <i [ngClass]=\"getMobileActionIcon(btn)\"></i>\n          <span>{{ getMobileActionLabel(btn) }}</span>\n        </button>\n      </ng-container>\n\n      <ng-container *ngFor=\"let btn of filterRightActionButtons\">\n        <button\n          type=\"button\"\n          class=\"fas-table-filter-bar__mobile-action\"\n          [disabled]=\"btn.disabled ?? false\"\n          (click)=\"onFilterActionClick(btn.id); mobileFilterActions.hide()\"\n        >\n          <i [ngClass]=\"getMobileActionIcon(btn)\"></i>\n          <span>{{ getMobileActionLabel(btn) }}</span>\n        </button>\n      </ng-container>\n\n      <span\n        *ngIf=\"autoRefreshSeconds && autoRefreshSeconds > 0\"\n        class=\"fas-table-filter-bar__countdown\"\n      >\n        <strong>{{ filterRefreshCountdown }}s</strong>\n      </span>\n\n      <button\n        *ngIf=\"showClearFilter && filterHasActive\"\n        type=\"button\"\n        class=\"fas-table-filter-bar__mobile-action\"\n        (click)=\"clearFilters(); mobileFilterActions.hide()\"\n      >\n        <i class=\"pi pi-filter-slash\"></i>\n        <span>{{ getMobileClearFilterLabel() }}</span>\n      </button>\n\n      <button\n        *ngIf=\"showRefreshButton || (autoRefreshSeconds && autoRefreshSeconds > 0)\"\n        type=\"button\"\n        class=\"fas-table-filter-bar__mobile-action\"\n        (click)=\"onFilterRefreshClick(); mobileFilterActions.hide()\"\n      >\n        <i class=\"pi pi-refresh\"></i>\n        <span>{{ getMobileRefreshLabel() }}</span>\n      </button>\n    </div>\n  </p-overlayPanel>\n\n</div>\n\n<p-table\n  [value]=\"value\"\n  [rows]=\"rows\"\n  [rowsPerPageOptions]=\"rowsPerPageOptions\"\n  [paginator]=\"paginator\"\n  [globalFilterFields]=\"globalFilterFields\"\n  [(selection)]=\"selection\"\n  [selectionMode]=\"selectionMode\"\n  [metaKeySelection]=\"!unselectOnClick\"\n  [first]=\"first\"\n  [dataKey]=\"dataKey\"\n  (selectionChange)=\"onSelectionChange($event)\"\n  currentPageReportTemplate=\"{totalRecords} Wyników\"\n  [showCurrentPageReport]=\"showCurrentPageReport\"\n  [loading]=\"loading\"\n  [styleClass]=\"styleClass\"\n  [scrollable]=\"true\"\n  [scrollHeight]=\"scrollHeight\"\n  [totalRecords]=\"totalRecords\"\n  [lazy]=\"lazy\"\n  (onLazyLoad)=\"onLazyLoad($event)\"\n  (onPage)=\"onPageChange($event)\"\n  [paginatorDropdownScrollHeight]=\"'230px'\"\n  [alwaysShowPaginator]=\"alwaysShowPaginator\"\n  [ngClass]=\"{ 'paginator-dropdown-up': paginatorDropdownUp }\"\n>\n  <ng-template pTemplate=\"header\">\n    <tr [ngClass]=\"{ transparent: isTransparentHeader }\">\n      <th\n        *ngIf=\"showCheckbox\"\n        class=\"ng-table-header\"\n        style=\"width: 4rem; text-align: center\"\n      >\n        <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n      </th>\n      <th\n        *ngFor=\"let col of columns\"\n        [pSortableColumn]=\"col.sortable ? col.field : null\"\n      >\n        <i\n          *ngIf=\"col.headerIcon\"\n          [class]=\"col.headerIcon\"\n          style=\"margin-right: 12px\"\n        ></i>\n        <span>{{ col.header }}</span>\n        <p-sortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-sortIcon>\n      </th>\n      <th *ngIf=\"showEmptyColumn\" class=\"empty-column\"></th>\n    </tr>\n  </ng-template>\n\n  <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\">\n    <tr\n      [pSelectableRow]=\"checkboxSelectHeadlight ? rowData : null\"\n      [pSelectableRowIndex]=\"checkboxSelectHeadlight ? rowIndex : null\"\n      [pSelectableRowDisabled]=\"!checkboxSelectHeadlight\"\n      class=\"headlight\"\n      [ngClass]=\"{\n        'outline-headlight': isOutlineHeadlight,\n        'inside-headlight': isInsideHeadlight,\n        'select-headlight': selectedRowIndexes.includes(rowIndex)\n      }\"\n      (click)=\"onRowClick(rowData, rowIndex)\"\n    >\n      <td *ngIf=\"showCheckbox\" style=\"text-align: center\">\n        <p-tableCheckbox\n          [value]=\"rowData\"\n          (click)=\"$event.stopPropagation()\"\n        ></p-tableCheckbox>\n      </td>\n\n      <td *ngFor=\"let col of columns\" [ngClass]=\"col.columnClass\">\n        <ng-container\n          *ngIf=\"\n            col.customTemplate && customTemplates?.get(col.customTemplate);\n            else fallbackTemplate\n          \"\n        >\n          <ng-container\n            *ngTemplateOutlet=\"\n              customTemplates.get(col.customTemplate) ?? null;\n              context: { $implicit: rowData, rowIndex: rowIndex }\n            \"\n          ></ng-container>\n        </ng-container>\n\n        <ng-template #fallbackTemplate>\n          <ng-container *ngIf=\"col.valueFunction; else defaultContent\">\n            <div\n              [ngClass]=\"col.contentClass\"\n              [style.background-color]=\"\n                col.styleBackgroundFunction\n                  ? col.styleBackgroundFunction(rowData, rowIndex)\n                  : ''\n              \"\n              [style.color]=\"\n                col.styleColorFunction\n                  ? col.styleColorFunction(rowData, rowIndex)\n                  : ''\n              \"\n            >\n              <span\n                *ngIf=\"col.showDot && col.dotPosition === 'left'\"\n                class=\"dot dot-left\"\n                [style.background-color]=\"col.dotColorFunction(rowData)\"\n              ></span>\n\n              {{ col.prefix }}\n              <ng-container *ngIf=\"col.dateField; else defaultDateValue\">\n                {{\n                  col.valueFunction(rowData, rowIndex)\n                    | date : \"dd.MM.yyyy HH:mm\"\n                }}\n              </ng-container>\n              <ng-template #defaultDateValue>\n                {{ col.valueFunction(rowData, rowIndex) }}\n              </ng-template>\n\n              <span\n                *ngIf=\"col.showDot && col.dotPosition === 'right'\"\n                class=\"dot dot-right\"\n                [style.background-color]=\"col.dotColorFunction(rowData)\"\n              ></span>\n            </div>\n          </ng-container>\n\n          <ng-template #defaultContent>\n            <div\n              [ngClass]=\"col.contentClass\"\n              [style.background-color]=\"\n                col.styleBackgroundFunction\n                  ? col.styleBackgroundFunction(rowData, rowIndex)\n                  : ''\n              \"\n              [style.color]=\"\n                col.styleColorFunction\n                  ? col.styleColorFunction(rowData, rowIndex)\n                  : ''\n              \"\n            >\n              <span\n                *ngIf=\"col.showDot && col.dotPosition === 'left'\"\n                class=\"dot dot-left\"\n                [style.background-color]=\"col.dotColorFunction(rowData)\"\n              ></span>\n\n              {{ col.prefix }}\n              <ng-container *ngIf=\"col.dateField; else checkBooleanField\">\n                {{ rowData[col.field] | date : \"dd.MM.yyyy HH:mm\" }}\n              </ng-container>\n              <ng-template #checkBooleanField>\n                <ng-container *ngIf=\"col.booleanField; else defaultRowValue\">\n                  <p-checkbox\n                    [(ngModel)]=\"rowData[col.field]\"\n                    binary=\"true\"\n                    [readonly]=\"true\"\n                  ></p-checkbox>\n                </ng-container>\n              </ng-template>\n              <ng-template #defaultRowValue>\n                {{ rowData[col.field] }}\n              </ng-template>\n\n              <span\n                *ngIf=\"col.showDot && col.dotPosition === 'right'\"\n                class=\"dot dot-right\"\n                [style.background-color]=\"col.dotColorFunction(rowData)\"\n              ></span>\n            </div>\n          </ng-template>\n        </ng-template>\n\n        <ng-container *ngIf=\"col.actions\">\n          <button\n            *ngFor=\"let action of col.actions\"\n            [id]=\"action.id\"\n            (click)=\"\n              customActions(\n                action.callback,\n                rowData,\n                rowIndex,\n                action.isSelectAction,\n                $event\n              )\n            \"\n            [ngClass]=\"action.buttonClass\"\n            [pTooltip]=\"action.tooltip\"\n            tooltipPosition=\"bottom\"\n            [tooltipDisabled]=\"isMobile\"\n          >\n            <i *ngIf=\"action.icoPrefix\" [ngClass]=\"action.icoPrefix\"></i\n            >{{ action.label\n            }}<i *ngIf=\"action.icoSuffix\" [ngClass]=\"action.icoSuffix\"></i>\n          </button>\n        </ng-container>\n      </td>\n\n      <td *ngIf=\"showEmptyColumn\" class=\"empty-column\"></td>\n    </tr>\n  </ng-template>\n\n  <ng-template\n    pTemplate=\"summary\"\n    *ngIf=\"footerButtonOptions || showFooterPageReport\"\n  >\n    <div class=\"flex align-items-center\">\n      <!-- Obsługa pojedynczego przycisku -->\n      <div\n        *ngIf=\"isSingleButtonOption(footerButtonOptions)\"\n        class=\"vertical-separator pr-6 mr-4\"\n      >\n        <p-button\n          [disabled]=\"selection.length === 0\"\n          [label]=\"\n            getSingleFooterButtonOption().buttonLabel +\n            (selection.length > 0 ? ' (' + selection.length + ')' : '')\n          \"\n          [icon]=\"getSingleFooterButtonOption().buttonIcon\"\n          (onClick)=\"\n            getSingleFooterButtonOption().buttonFunction(); selection.length = 0\n          \"\n          [loading]=\"getSingleFooterButtonOption().buttonLoading ?? false\"\n        />\n      </div>\n\n      <!-- Obsługa wielu przycisków -->\n      <div\n        *ngIf=\"isArray(footerButtonOptions)\"\n        class=\"vertical-separator pr-6 mr-4 flex gap-2\"\n      >\n        <ng-container\n          *ngFor=\"let buttonOption of getFooterButtonOptionsArray()\"\n        >\n          <p-button\n            [disabled]=\"selection.length === 0\"\n            [label]=\"\n              buttonOption.buttonLabel +\n              (selection.length > 0 ? ' (' + selection.length + ')' : '')\n            \"\n            [icon]=\"buttonOption.buttonIcon\"\n            (onClick)=\"buttonOption.buttonFunction()\"\n            [loading]=\"buttonOption.buttonLoading ?? false\"\n            [outlined]=\"buttonOption.outlined ?? false\"\n          />\n        </ng-container>\n      </div>\n\n      <div class=\"flex gap-2\" *ngIf=\"value\">\n        <div>{{ totalRecords }}</div>\n        <div class=\"font-light\">\n          {{ customResultsName ?? \"Wyników\" }}\n        </div>\n      </div>\n    </div>\n  </ng-template>\n</p-table>\n","import {\n  debounceTime,\n  distinctUntilChanged,\n  Observable,\n  Subject,\n  Subscription,\n} from 'rxjs';\nimport {\n  Component,\n  ContentChildren,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { FASDynamicTableColumnConfig } from './fas-service-dynamic-table.model';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { Table, TableModule } from 'primeng/table';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n  selector: 'fas-service-dynamic-table',\n  standalone: true,\n  imports: [\n    TableModule,\n    CommonModule,\n    CheckboxModule,\n    FormsModule,\n    TooltipModule,\n    InputTextModule,\n  ],\n  templateUrl: './fas-service-dynamic-table.component.html',\n  styleUrls: ['./fas-service-dynamic-table.component.css'],\n})\nexport class FasServiceDynamicTableComponent<T> implements OnInit, OnDestroy {\n  @ViewChild('dynamicTable', { static: true }) table!: Table;\n  @ContentChildren(TemplateRef) templates!: QueryList<TemplateRef<any>>;\n\n  @Input({ required: true }) dataMode!: 'client' | 'server'; // Switch between client/server\n  @Input({ required: true }) columns: FASDynamicTableColumnConfig<T>[] = [];\n  @Input() columnTemplates: { [key: string]: TemplateRef<any> } = {};\n  @Input() dataService?: (params: {\n    page: number;\n    pageSize: number;\n    sortField?: keyof T;\n    sortOrder?: number;\n    search?: string;\n  }) => Observable<{ data: T[]; total: number }>;\n  @Input() fullDataService?: () => Observable<T[]>;\n  @Input() initialPageSize: number = 10;\n  @Input() showGlobalSearch: boolean = false;\n  @Input() resetTrigger?: Observable<void>;\n  @Input() refreshCurrentPage?: Observable<void>;\n  @Input() selectionMode: 'single' | 'multiple' | null | undefined;\n  @Input() rowSelectFunction!: (rowData: T) => void;\n  @Input() rowUnSelectFunction!: (rowData: T) => void;\n  @Input() dateFormat: string = 'dd.MM.yyyy HH:mm';\n  @Input() isTransparentHeader: boolean = false;\n  @Input() showCheckbox: boolean = false; //TODO - to be check if working correctly\n  @Input() tableRowClassName?: string;\n  @Input() rowHover: boolean = true;\n  @Input() paginator: boolean = true;\n  @Input() styleClass: string = 'p-datatable-lg' //Style class of the component.\n  @Output() dataLoaded = new EventEmitter<T[]>();\n\n  public selectedItems: T[] = [];\n  public tableData: T[] = [];\n  public totalRecords: number = 0;\n  public loading: boolean = false;\n  public hoveredRowIndex: number | null = null;\n\n  private searchQuery: string = '';\n  private searchSubject = new Subject<string>();\n  private subscriptions = new Subscription();\n\n  ngOnInit(): void {\n    if (this.resetTrigger) {\n      const resetSub = this.resetTrigger.subscribe(() => {\n        this.resetTable();\n      });\n      this.subscriptions.add(resetSub);\n    }\n\n    if (this.dataMode === 'server' && this.dataService) {\n      const searchSub = this.searchSubject\n        .pipe(debounceTime(300), distinctUntilChanged())\n        .subscribe(() => {\n          this.loadData({ first: 0, rows: this.initialPageSize });\n        });\n      this.subscriptions.add(searchSub);\n    }\n\n    if (this.refreshCurrentPage) {\n      const refreshSub = this.refreshCurrentPage.subscribe(() => {\n        if (this.dataMode === 'server') {\n          const { first, rows, sortField, sortOrder } = this.table || { first: 0, rows: this.initialPageSize, sortField: null, sortOrder: null };\n          this.loadData( { first, rows, sortField, sortOrder } )\n        }\n\n        if (this.dataMode === 'client') {\n          this.fetchFullDataset();\n        }\n      });\n      this.subscriptions.add(refreshSub);\n\n    }\n\n    if (this.dataMode === 'client' && this.fullDataService) {\n      this.fetchFullDataset();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  private fetchFullDataset(): void {\n    if (this.dataMode === 'client' && !this.fullDataService) {\n      throw new Error(\n        \"Input 'fullDataService' is required when 'dataMode' is 'client'.\"\n      );\n    }\n    this.loading = true;\n    this.fullDataService!().subscribe({\n      next: (data) => {\n        this.tableData = data;\n        this.dataLoaded.emit(this.tableData);\n        this.loading = false;\n      },\n      error: (err) => {\n        console.error('Error fetching full dataset:', err);\n        this.loading = false;\n      },\n    });\n  }\n\n  //TODO - any to be updated\n  loadData(event: any): void {\n    if (!this.dataService) {\n      throw new Error(\n        \"Input 'dataService' is required when 'dataMode' is 'server'.\"\n      );\n    }\n\n    this.loading = true;\n    const page = event.first! / event.rows! + 1;\n    const pageSize = event.rows!;\n    const sortField = event.sortField as keyof T;\n    const sortOrder = event.sortOrder;\n\n    this.dataService({\n      page,\n      pageSize,\n      sortField,\n      sortOrder,\n      search: this.searchQuery,\n    }).subscribe({\n      next: (result) => {\n        this.tableData = result.data;\n        this.totalRecords = result.total;\n        this.loading = false;\n        this.dataLoaded.emit(this.tableData);\n      },\n      error: (err) => {\n        console.error('Error loading data:', err);\n        this.loading = false;\n      },\n    });\n  }\n\n  onSearch(event: Event): void {\n    const target = event.target as HTMLInputElement;\n    this.searchQuery = target.value;\n    this.searchSubject.next(target.value);\n  }\n\n  customActions(callback: any, rowData: T, rowIndex: number): void {\n    if (callback && typeof callback === 'function') {\n      callback(rowData, rowIndex);\n    }\n  }\n\n  private resetTable(): void {\n    if (this.table) {\n      this.table.reset();\n    }\n  }\n\n  onRowSelect(event: any) {\n    if (this.rowSelectFunction) {\n      this.rowSelectFunction(event.data);\n    }\n  }\n\n  onRowUnselect(event: any) {\n    if (this.rowUnSelectFunction) {\n      this.rowUnSelectFunction(event.data);\n    }\n  }\n}\n","<p-table\n  #dynamicTable\n  [value]=\"tableData\"\n  [paginator]=\"paginator\"\n  [rows]=\"initialPageSize\"\n  [totalRecords]=\"totalRecords\"\n  [loading]=\"loading\"\n  [lazy]=\"dataMode === 'server' ? true : false\"\n  [sortMode]=\"'single'\"\n  [resizableColumns]=\"true\"\n  (onLazyLoad)=\"dataMode === 'server' ? loadData($event): null\"\n  [(selection)]=\"selectedItems\"\n  [selectionMode]=\"selectionMode\" \n  (onRowSelect)=\"onRowSelect($event)\" \n  (onRowUnselect)=\"onRowUnselect($event)\" \n  [styleClass]=\"styleClass\"\n  [rowHover]=\"true\"\n>\n  <ng-template pTemplate=\"caption\" *ngIf=\"showGlobalSearch\">\n    <div class=\"flex justify-content-end\">\n      <div class=\"p-input-icon-container w-20rem\">\n        <i class=\"pi pi-search\"></i>\n        <input\n          type=\"text\"\n          pInputText\n          placeholder=\"Wyszukaj\"\n          (input)=\"onSearch($event)\"\n        />\n      </div>\n    </div>\n  </ng-template>\n\n  <ng-template pTemplate=\"header\">\n    <tr [ngClass]=\"{ transparent: isTransparentHeader }\">\n      <!-- <th\n        *ngIf=\"showCheckbox\"\n        class=\"ng-table-header\"\n        style=\"width: 4rem; text-align: center\"\n      >\n        <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n      </th> -->\n      <th\n        *ngFor=\"let col of columns\"\n        [pSortableColumn]=\"col.sortable ? col.field : ''\"\n        [class]=\"col.columnClass\" [style]=\"col.columnStyle\"\n      >\n        {{ col.columnHeader }}\n        <p-sortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-sortIcon>\n      </th>\n    </tr>\n  </ng-template>\n\n  <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\">\n    <tr\n      (mouseenter)=\"hoveredRowIndex = rowIndex\" \n      (mouseleave)=\"hoveredRowIndex = null\"\n      [pSelectableRow]=\"rowData\"\n    >\n      <!-- <td *ngIf=\"showCheckbox\" style=\"text-align: center\">\n        <p-tableCheckbox [value]=\"rowData\"></p-tableCheckbox>\n      </td> -->\n      <td *ngFor=\"let col of columns\" >\n        <ng-container *ngIf=\"col.columnTemplateKey; else defaultContent\">\n          <ng-container *ngTemplateOutlet=\"columnTemplates[col.columnTemplateKey]; context: { $implicit: rowData }\"></ng-container>\n        </ng-container>\n        <ng-template #defaultContent>\n          <ng-container>\n            <div class=\"flex\" >\n              <ng-container *ngIf=\"col.dateField; else defaultDateValue\">\n                {{  (col.valueFunction ? col.valueFunction(rowData) : rowData[col.field]) | date : dateFormat }}\n              </ng-container>\n              <ng-template #defaultDateValue>\n                <div [class]=\"col.columnClass\" [style]=\"col.columnStyle\">\n                  <div>\n                    {{ (col.valueFunction ? col.valueFunction(rowData) : rowData[col.field] ) }} \n                  </div>\n                  <ng-container *ngIf=\"col.actions\">\n                    <button\n                    [style]=\"{'opacity' : hoveredRowIndex === rowIndex ? '1' : '0'}\"\n                    *ngFor=\"let action of col.actions\"\n                    (click)=\"\n                      customActions(\n                        action.callback,\n                        rowData,\n                        rowIndex\n                      )\n                    \"\n                    [ngClass]=\"action.buttonClass\"\n                    [pTooltip]=\"action.tooltip\"\n                    tooltipPosition=\"bottom\"\n                  >\n                    <i *ngIf=\"action.icoPrefix\" [ngClass]=\"action.icoPrefix\"></i\n                    >{{ action.label\n                    }}<i *ngIf=\"action.icoSuffix\" [ngClass]=\"action.icoSuffix\"></i>\n                  </button> \n                  </ng-container>\n                </div>\n              </ng-template>\n            </div>\n          </ng-container>\n        </ng-template>\n      </td>\n    </tr>\n  </ng-template>\n</p-table>\n","import { InjectionToken } from '@angular/core';\n\nexport const API_URL = new InjectionToken<string>('API_URL');\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { API_URL } from './api-url.token';\nimport { IMyNotificationReadStatusIm } from '../models/my-notification-read-status-im.model';\nimport { IMyNotificationVm } from '../models/my-notification-vm.model';\n\n@Injectable({ providedIn: 'root' })\nexport class MyNotificationReadStatusChangedService {\n  private readonly baseUrl: string;\n  constructor(private http: HttpClient, @Inject(API_URL) private apiUrl: string) {\n    this.baseUrl = `${this.apiUrl}/MyNotificationReadStatusChanged`;\n  }\n  post(notificationIm: IMyNotificationReadStatusIm): Observable<IMyNotificationVm> {\n    const headers = this.createHeaders();\n    return this.http.post<IMyNotificationVm>(this.baseUrl, notificationIm, { headers });\n  }\n  private createHeaders(): HttpHeaders {\n    let headers = new HttpHeaders();\n    const token = localStorage.getItem('authToken');\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    return headers;\n  }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { API_URL } from './api-url.token';\nimport { IMyNotificationClickedUm } from '../models/my-notification-clicked-um.model';\nimport { IMyNotificationVm } from '../models/my-notification-vm.model';\n\n@Injectable({ providedIn: 'root' })\nexport class MyNotificationHasBeenClickedService {\n  private readonly baseUrl: string;\n  constructor(private http: HttpClient, @Inject(API_URL) private apiUrl: string) {\n    this.baseUrl = `${this.apiUrl}/MyNotificationHasBeenClicked`;\n  }\n  put(notificationUm: IMyNotificationClickedUm): Observable<IMyNotificationVm> {\n    const headers = this.createHeaders();\n    return this.http.put<IMyNotificationVm>(this.baseUrl, notificationUm, { headers });\n  }\n  private createHeaders(): HttpHeaders {\n    let headers = new HttpHeaders();\n    const token = localStorage.getItem('authToken');\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    return headers;\n  }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { API_URL } from './api-url.token';\n@Injectable({ providedIn: 'root' })\nexport class DeleteAllMyNotificationsService {\n  private readonly baseUrl: string;\n  constructor(private http: HttpClient, @Inject(API_URL) private apiUrl: string) {\n    this.baseUrl = `${this.apiUrl}/DeleteAllMyNotifications`;\n  }\n  delete(discriminator?: string, scopeKind?: string, scopeId?: string | null): Observable<any> {\n    const headers = this.createHeaders();\n    let params = new HttpParams();\n    if (discriminator) params = params.set('discriminator', discriminator);\n    if (scopeKind) params = params.set('scopeKind', scopeKind);\n    if (scopeId) params = params.set('scopeId', scopeId);\n    return this.http.delete<any>(this.baseUrl, { headers, params });\n  }\n  private createHeaders(): HttpHeaders {\n    let headers = new HttpHeaders();\n    const token = localStorage.getItem('authToken');\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    return headers;\n  }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { INotificationsCounterVm } from '../models/notifications-counter-vm.model';\nimport { API_URL } from './api-url.token';\n@Injectable({ providedIn: 'root' })\nexport class NotificationCounterService {\n  private readonly baseUrl: string;\n  constructor(private http: HttpClient, @Inject(API_URL) private apiUrl: string) {\n    this.baseUrl = `${this.apiUrl}/NotificationCounter`;\n  }\n  get(discriminator?: string, scopeKind?: string, scopeId?: string | null): Observable<INotificationsCounterVm> {\n    const headers = this.createHeaders();\n    let params = new HttpParams();\n    if (discriminator) params = params.set('discriminator', discriminator);\n    if (scopeKind) params = params.set('scopeKind', scopeKind);\n    if (scopeId) params = params.set('scopeId', scopeId);\n    return this.http.get<INotificationsCounterVm>(this.baseUrl, { headers, params });\n  }\n  private createHeaders(): HttpHeaders {\n    let headers = new HttpHeaders();\n    const token = localStorage.getItem('authToken');\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    return headers;\n  }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { API_URL } from './api-url.token';\nimport { SortOrder } from '../models/sort-order.model';\nimport { IPaginatedResultMyNotificationVm } from '../models/paginated-result-my-notification-vm.model';\n\n@Injectable({ providedIn: 'root' })\nexport class MyNotificationsService {\n  private readonly baseUrl: string;\n  constructor(private http: HttpClient, @Inject(API_URL) private apiUrl: string) {\n    this.baseUrl = `${this.apiUrl}/MyNotifications`;\n  }\n  get(onlyUnread: boolean, sortColumn: string, page?: number, pageSize?: number,\n      sortOrder?: SortOrder, discriminator?: string, scopeKind?: string,\n      scopeId?: string | null): Observable<IPaginatedResultMyNotificationVm> {\n    const headers = this.createHeaders();\n    let params = new HttpParams();\n    if (onlyUnread !== undefined && onlyUnread !== null) {\n      params = params.set('onlyUnread', onlyUnread.toString());\n    }\n    if (page !== undefined && page !== null) {\n      params = params.set('page', page.toString());\n    }\n    if (pageSize !== undefined && pageSize !== null) {\n      params = params.set('pageSize', pageSize.toString());\n    }\n    if (sortColumn !== undefined && sortColumn !== null) {\n      params = params.set('sortColumn', sortColumn.toString());\n    }\n    if (sortOrder !== undefined && sortOrder !== null) {\n      params = params.set('sortOrder', JSON.stringify(sortOrder));\n    }\n    if (discriminator) {\n      params = params.set('discriminator', discriminator);\n    }\n    if (scopeKind) {\n      params = params.set('scopeKind', scopeKind);\n    }\n    if (scopeId) {\n      params = params.set('scopeId', scopeId);\n    }\n    return this.http.get<IPaginatedResultMyNotificationVm>(this.baseUrl, { headers, params });\n  }\n  private createHeaders(): HttpHeaders {\n    let headers = new HttpHeaders();\n    const token = localStorage.getItem('authToken');\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    return headers;\n  }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { API_URL } from './api-url.token';\nimport { IMyNotificationDeleteDm } from '../models/my-notification-delete-dm.model';\n\n@Injectable({ providedIn: 'root' })\nexport class MyNotificationService {\n  private readonly baseUrl: string;\n  constructor(private http: HttpClient, @Inject(API_URL) private apiUrl: string) {\n    this.baseUrl = `${this.apiUrl}/MyNotification`;\n  }\n  delete(notificationDeleteDm: IMyNotificationDeleteDm): Observable<any> {\n    const headers = this.createHeaders();\n    let params = new HttpParams();\n    return this.http.delete<any>(this.baseUrl, { headers, params, body: notificationDeleteDm });\n  }\n  private createHeaders(): HttpHeaders {\n    let headers = new HttpHeaders();\n    const token = localStorage.getItem('authToken');\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    return headers;\n  }\n}\n","import { MyNotificationReadStatusChangedService } from './api/my-notification-read-status-changed.service';\nimport { IPaginatedResultMyNotificationVm } from './models/paginated-result-my-notification-vm.model';\nimport { MyNotificationHasBeenClickedService } from './api/my-notification-has-been-clicked.service';\nimport { IMyNotificationReadStatusIm } from './models/my-notification-read-status-im.model';\nimport { DeleteAllMyNotificationsService } from './api/delete-all-my-notifications.service';\nimport { IMyNotificationClickedUm } from './models/my-notification-clicked-um.model';\nimport { IMyNotificationDeleteDm } from './models/my-notification-delete-dm.model';\nimport { INotificationsCounterVm } from './models/notifications-counter-vm.model';\nimport { NotificationCounterService } from './api/notification-counter.service';\nimport { ChangeDetectorRef, Component, inject, Input, OnChanges, OnInit, SimpleChanges, ViewChild} from '@angular/core';\nimport { MyNotificationsService } from './api/my-notifications.service';\nimport { OverlayPanel, OverlayPanelModule } from 'primeng/overlaypanel';\nimport { MyNotificationService } from './api/my-notification.service';\nimport { IMyNotificationVm } from './models/my-notification-vm.model';\nimport { InputSwitchModule } from 'primeng/inputswitch';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { BadgeModule } from 'primeng/badge';\n\n@Component({\n  selector: 'fas-services-notification',\n  standalone: true,\n  imports: [\n    OverlayPanelModule,\n    InputSwitchModule,\n    PaginatorModule,\n    CommonModule,\n    ButtonModule,\n    BadgeModule,\n    FormsModule,\n  ],\n  templateUrl: './fas-services-notification.component.html',\n  styleUrl: './fas-services-notification.component.scss',\n})\nexport class FasServicesNotificationComponent implements OnInit, OnChanges {\n\n  @Input() discriminator?: string;\n  @Input() scopeKind?: string;\n  @Input() scopeId?: string | null;\n\n  @ViewChild('notificationOverlayPanel') notificationOverlayPanel!: OverlayPanel;\n\n  private myNotificationReadStatusChangedService = inject(\n    MyNotificationReadStatusChangedService\n  );\n  private myNotificationHasBeenClickedService = inject(\n    MyNotificationHasBeenClickedService\n  );\n  private deleteAllMyNotificationsService = inject(DeleteAllMyNotificationsService);\n  private notificationCounterService = inject(NotificationCounterService);\n  private myNotificationsService = inject(MyNotificationsService);\n  private myNotificationService = inject(MyNotificationService);\n  private cdr = inject(ChangeDetectorRef);\n  \n  public notificationsPaginated!: IPaginatedResultMyNotificationVm;\n  public notifications: IMyNotificationVm[] = [];\n  public onlyUnread: boolean = false;\n  public totalRecords: number = 0;\n  public unreadCounter:number=0;\n  public totalPages: number = 1;\n  public first: number = 0;\n  public rows: number = 3;\n  private initialized = false;\n\n  ngOnInit() {\n    this.initialized = true;\n    this.refresh();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!this.initialized ||\n        (!changes['discriminator'] && !changes['scopeKind'] && !changes['scopeId'])) return;\n\n    this.first = 0;\n    this.refresh();\n  }\n\n  private refresh() {\n    this.fetchNotifications();\n    this.getCounters();\n  }\n  \n  getCounters(){\n    this.notificationCounterService.get(this.discriminator, this.scopeKind, this.scopeId).subscribe({next:(res:INotificationsCounterVm)=>{\n      this.unreadCounter = res.unreadMessagesCount\n      this.totalRecords = res.totalMessagesCount\n      this.totalPages = Math.ceil(this.totalRecords / this.rows);\n      this.cdr.detectChanges()\n    }})\n  }\n\n  fetchNotifications() {\n    const currentPage = Math.floor(this.first / this.rows) + 1;\n    this.myNotificationsService\n      .get(this.onlyUnread, 'received', currentPage, this.rows, undefined,\n        this.discriminator, this.scopeKind, this.scopeId)\n      .subscribe({\n        next: (res: IPaginatedResultMyNotificationVm) => {\n          if (res.data) {\n            this.notifications = res.data;\n            // this.setAsReaded();\n          }\n        },\n        error: (err) => {\n          console.error(err);\n        },\n      });\n  }\n\n  onLinkClick(notification: IMyNotificationVm) {\n    window.open(notification.link, '_blank');\n\n    const dataToPut: IMyNotificationClickedUm = {\n      guid: notification.guid,\n    };\n    this.myNotificationHasBeenClickedService.put(dataToPut).subscribe({\n      next: (res) => {\n      },\n      error: (err) => {\n        console.error(err);\n      },\n    });\n  }\n\n  \n  removeAllNotifications() {\n    this.deleteAllMyNotificationsService.delete(this.discriminator, this.scopeKind, this.scopeId).subscribe({\n      next: (res) => {\n        this.notifications =[]\n        this.getCounters();\n        this.notificationOverlayPanel.hide();\n    \n      }, error: (err) => {\n        console.error(err)\n    }})\n  }\n\n  removeNotification(notification: IMyNotificationVm) {\n    const dataToDel: IMyNotificationDeleteDm = {\n      guid: notification.guid,\n    };\n    this.myNotificationService.delete(dataToDel).subscribe({\n      next: (res) => {\n        this.notifications = this.notifications.filter(\n          (not: IMyNotificationVm) => not.guid !== notification.guid\n        );\n        this.getCounters();\n      },\n      error: (err) => {\n        console.error(err);\n      },\n    });\n  }\n\n\n  toggleReaded(notification: IMyNotificationVm){\n    if(notification.hasBeenRead){\n      return(this.setAsUnread(notification))\n    }\n    else{\n     return this.setAsReaded(notification)\n    }\n  }\n\n  setAsReaded(notification: IMyNotificationVm) {\n    const dataToPost: IMyNotificationReadStatusIm = {\n      guid: notification.guid,\n      isReadStatus: true,\n    };\n    this.myNotificationReadStatusChangedService.post(dataToPost).subscribe({\n      next: (res) => {\n        const foundNotification = this.notifications.find(\n          (not) => not.guid === notification.guid\n        );\n        if (foundNotification) {\n          foundNotification.hasBeenRead = true;\n        }\n        this.getCounters();\n      },\n      error: (err) => {\n        console.error(err);\n      },\n    });\n  }\n\n  setAsUnread(notification: IMyNotificationVm) {\n    const dataToPost: IMyNotificationReadStatusIm = {\n      guid: notification.guid,\n      isReadStatus: false,\n    };\n\n    this.myNotificationReadStatusChangedService.post(dataToPost).subscribe({\n      next: (res) => {\n        const foundNotification = this.notifications.find(\n          (not) => not.guid === notification.guid\n        );\n        if (foundNotification) {\n          foundNotification.hasBeenRead = false;\n        }\n        this.getCounters();\n      },\n      error: (err) => {\n        console.error(err);\n      },\n    });\n  }\n\n  isBadgeDisabled() {\n    if (this.unreadCounter > 0) {\n      return false\n    }else{\n      return true\n    }\n  }\n\n  handleChangeUnread() {\n    this.first = 0;\n    this.fetchNotifications();\n  }\n\n  onPageChange(event: any) {\n    this.first = event.first;\n    this.fetchNotifications();\n  }\n}\n","@if (unreadCounter > 0) {\n<i\n  (click)=\"totalRecords>0 ? notificationOverlayPanel.toggle($event): ''\"\n  class=\"badge-container pi pi-bell\"\n  [value]=\"unreadCounter > 9 ? '9+' : unreadCounter\"\n  pBadge\n></i>\n} @else {\n<i\n  (click)=\"totalRecords>0 ? notificationOverlayPanel.toggle($event): ''\"\n  class=\"badge-container pi pi-bell\"\n></i>\n}\n\n<p-overlayPanel styleClass=\"notificationOverlayPanel\" #notificationOverlayPanel>\n  <div class=\"overlay-container flex flex-column\">\n    <div class=\"flex mb-3 align-items-center justify-content-between\">\n      <div class=\"font-medium text-xl\">Notyfikacje</div>\n      <p-button *ngIf=\"notifications.length>1\" [link]=\"true\" label=\"Usuń wszystkie\" (onClick)=\"removeAllNotifications();notificationOverlayPanel.toggle($event)\"></p-button>\n    </div>\n\n    <div\n      class=\"switch-container flex align-items-center justify-content-end gap-3\"\n    >\n      <div class=\"switch-label\">Tylko nieprzeczytane</div>\n      <p-inputSwitch (onChange)=\"handleChangeUnread()\" [(ngModel)]=\"onlyUnread\"/>\n    </div>\n\n    <div class=\"scroll\">\n      <ng-container *ngFor=\"let notification of notifications\">\n        <div class=\"notification-container\" (click)=\"toggleReaded(notification)\">\n          <div class=\"flex w-full align-items-between justify-content-between\">\n            <div class=\"notification-received\">{{ notification.received | date : \"HH:mm:ss dd.MM.yyyy\" }}</div>\n            <i class=\"pi pi-ellipsis-v cursor-pointer\" (click)=\"notificationMenuOverlayPanel.toggle($event);$event.stopPropagation()\"></i>\n          </div>\n          <div *ngIf=\"notification.title\" class=\"notification-title\" [ngClass]=\"{'readed':notification.hasBeenRead}\">{{ notification.title }}</div>\n          <div *ngIf=\"notification.message\" class=\"notification-message\" [ngClass]=\"{'readed':notification.hasBeenRead}\">{{ notification.message }}</div>\n          <p-button *ngIf=\"notification.link\" [link]=\"true\" [label]=\"notification.link\" (onClick)=\"onLinkClick(notification);setAsReaded(notification)\"></p-button>\n        </div>\n  \n        <p-overlayPanel styleClass=\"notificationMenuOverlayPanel\" #notificationMenuOverlayPanel>\n          <div class=\"flex flex-column\">\n            <div class=\"menu-item\" (click)=\"toggleReaded(notification); notificationMenuOverlayPanel.toggle($event)\">{{notification.hasBeenRead ? 'Oznacz jako nieprzeczytana':'Oznacz jako przeczytana'}}</div>\n            <div class=\"menu-item\">\n              <i class=\"pi pi-trash\"></i>\n              <div (click)=\"removeNotification(notification); notificationMenuOverlayPanel.toggle($event); totalRecords===1 ? notificationOverlayPanel.toggle($event):'' \">Usuń to powiadomienie</div>\n            </div>\n          </div>\n        </p-overlayPanel>\n      </ng-container>\n    </div>\n    \n    <p-paginator *ngIf=\"totalRecords>3\" (onPageChange)=\"onPageChange($event)\" [first]=\"first\" [rows]=\"rows\" [totalRecords]=\"totalRecords\" />\n  </div>\n</p-overlayPanel>\n\n\n","import { signal, Signal } from '@angular/core';\n\ninterface MinimizedWindow {\n  id: string;\n  offset: number;\n}\n\nexport const minimizedWindowsSignal = signal<MinimizedWindow[]>([]);\n\nexport function addMinimizedWindow(id: string): void {\n  const currentWindows = minimizedWindowsSignal();\n  const nextOffset = currentWindows.length * 210;\n  minimizedWindowsSignal.set([...currentWindows, { id, offset: nextOffset }]);\n}\n\nexport function removeMinimizedWindow(id: string): void {\n  console.log('Removing minimized window with id:', id);\n  const currentWindows = minimizedWindowsSignal();\n  const updatedWindows = currentWindows.filter((window) => window.id !== id);\n\n  const recalculatedWindows = updatedWindows.map((window, index) => ({\n    ...window,\n    offset: index * 210,\n  }));\n\n  minimizedWindowsSignal.set(recalculatedWindows);\n}\n\nexport function getWindowOffset(id: string): number {\n  const window = minimizedWindowsSignal().find((window) => window.id === id);\n  return window ? window.offset : 0;\n}","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { API_URL } from '../../fas-services-notification/api/api-url.token';\nimport { AppRatingStatus, IAppRatingInputVm } from '../models/app-rating.model';\n\n@Injectable({ providedIn: 'root' })\nexport class AppRatingService {\n  private readonly baseUrl: string;\n\n  constructor(private http: HttpClient, @Inject(API_URL) private apiUrl: string) {\n    this.baseUrl = `${this.apiUrl}/AppRating`;\n  }\n\n  submit(vm: IAppRatingInputVm): Observable<void> {\n    return this.http.post<void>(this.baseUrl, vm, { headers: this.createHeaders() });\n  }\n\n  /**\n   * Reports the prompt lifecycle status so it is auto-opened at most once per user.\n   * Idempotent on the backend (one row per user, updated in place).\n   */\n  setStatus(status: AppRatingStatus): Observable<void> {\n    return this.http.post<void>(`${this.apiUrl}/RatingPrompt/Status`, { status }, { headers: this.createHeaders() });\n  }\n\n  private createHeaders(): HttpHeaders {\n    let headers = new HttpHeaders();\n    const token = localStorage.getItem('authToken');\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    return headers;\n  }\n}\n","export interface IAppRatingInputVm {\n  rating: number;\n  feedback?: string;\n  attachmentUrl?: string;\n}\n\n/**\n * Lifecycle status of the app-rating prompt, reported to the backend so it is auto-opened\n * at most once per user. String values must match the backend AppRatingStatusType enum.\n */\nexport enum AppRatingStatus {\n  Opened = 'Opened',\n  Closed = 'Closed',\n  Send = 'Send',\n}\n","export interface AppRatingTexts {\n  title: string;\n  subtitle: string;\n  ratingHeader: string;\n  feedbackHeader: string;\n  feedbackPlaceholder: string;\n  uploadHeader: string;\n  uploadMainMessage: string;\n  uploadBtnLabel: string;\n  cancelBtn: string;\n  sendBtn: string;\n  successMessage: string;\n  errorMessage: string;\n  minimizeTooltip: string;\n  closeTooltip: string;\n  maximizeTooltip: string;\n  minimizedTitle: string;\n}\n\nexport const DEFAULT_APP_RATING_TEXTS: AppRatingTexts = {\n  title: 'Twoje zdanie jest dla nas bardzo ważne!',\n  subtitle: 'Pomóż nam stworzyć produkt, który odpowie na potrzeby użytkowników.',\n  ratingHeader: 'Oceń aplikację',\n  feedbackHeader: 'Powiedz nam co można byłoby zrobić lepiej',\n  feedbackPlaceholder: 'Opisz co moglibyśmy zmienić, czego brakuje',\n  uploadHeader: 'Dodaj plik',\n  uploadMainMessage: 'Przeciągij plik tutaj lub',\n  uploadBtnLabel: 'Prześlij plik',\n  cancelBtn: 'Anuluj',\n  sendBtn: 'Wyślij',\n  successMessage: 'Dziękujemy za Twoją opinię!',\n  errorMessage: 'Wystąpił błąd. Spróbuj ponownie.',\n  minimizeTooltip: 'Minimalizuj',\n  closeTooltip: 'Zamknij',\n  maximizeTooltip: 'Maksymalizuj',\n  minimizedTitle: 'Ocena aplikacji',\n};\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnDestroy,\n  OnInit,\n  OnChanges,\n  SimpleChanges,\n  inject,\n  effect,\n  Inject,\n} from '@angular/core';\nimport { InputTextareaModule } from 'primeng/inputtextarea';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { RatingModule } from 'primeng/rating';\nimport { FasServicesUploadComponent } from '../../public-api';\nimport { CommonModule } from '@angular/common';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  removeMinimizedWindow,\n  addMinimizedWindow,\n  getWindowOffset,\n} from '../shared/minimalized-windows.service';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AppRatingService } from './api/app-rating.service';\nimport { AppRatingStatus } from './models/app-rating.model';\nimport { AppRatingTexts, DEFAULT_APP_RATING_TEXTS } from './models/app-rating-texts.model';\nimport { API_URL } from '../fas-services-notification/api/api-url.token';\n\n@Component({\n  selector: 'fas-services-app-rating',\n  standalone: true,\n  imports: [\n    DialogModule,\n    ButtonModule,\n    RatingModule,\n    TooltipModule,\n    InputTextareaModule,\n    FasServicesUploadComponent,\n    CommonModule,\n    FormsModule,\n  ],\n  templateUrl: './fas-services-app-rating.component.html',\n  styleUrl: './fas-services-app-rating.component.scss',\n})\nexport class FasServicesAppRatingComponent implements OnInit, OnChanges, OnDestroy {\n  @Input() showAppRating: boolean = false;\n  @Input() maximizeTrigger?: EventEmitter<void>;\n  @Input() t: AppRatingTexts = { ...DEFAULT_APP_RATING_TEXTS };\n  @Input() showMinimizedChip: boolean = true;\n  @Output() showAppRatingChange = new EventEmitter<boolean>();\n  @Output() isMinimizedChange = new EventEmitter<boolean>();\n\n  private _service = inject(AppRatingService);\n  private _http = inject(HttpClient);\n  private destroy$ = new Subject<void>();\n\n  public isMinimalized: boolean = false;\n  public offset: number = 0;\n  public rating: number = 0;\n  public feedback: string = '';\n  public attachmentUrl: string | undefined;\n  public isSending: boolean = false;\n  public isUploading: boolean = false;\n  public sendSuccess: boolean = false;\n  public sendError: boolean = false;\n\n  constructor(@Inject(API_URL) private _apiUrl: string) {\n    effect(() => {\n      this.offset = getWindowOffset('app-rating');\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['showAppRating'] && changes['showAppRating'].previousValue === true && !changes['showAppRating'].currentValue) {\n      if (this.isMinimalized) {\n        this.isMinimalized = false;\n        removeMinimizedWindow('app-rating');\n        this.isMinimizedChange.emit(false);\n      }\n      this.resetForm();\n    }\n  }\n\n  ngOnInit() {\n    this.maximizeTrigger?.pipe(takeUntil(this.destroy$)).subscribe(() => {\n      if (this.isMinimalized) {\n        this.isMinimalized = false;\n        removeMinimizedWindow('app-rating');\n        this.isMinimizedChange.emit(false);\n      }\n      this.showAppRating = true;\n    });\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n    removeMinimizedWindow('app-rating');\n  }\n\n  handleFilesSelected(files: File[] | File | undefined) {\n    const file = files instanceof File ? files : Array.isArray(files) ? files[0] : undefined;\n    if (!file) {\n      this.attachmentUrl = undefined;\n      return;\n    }\n    const formData = new FormData();\n    formData.append('file', file, file.name);\n    formData.append('publicVisible', 'true');\n    this.isUploading = true;\n    this._http.post<{ fileUrl: string }>(`${this._apiUrl}/UploadMedia`, formData)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe({\n        next: (result) => { this.attachmentUrl = result.fileUrl?.startsWith('http') ? result.fileUrl : `${this._apiUrl}${result.fileUrl}`; this.isUploading = false; },\n        error: () => { this.attachmentUrl = undefined; this.isUploading = false; },\n      });\n  }\n\n  submit() {\n    if (!this.rating) return;\n\n    this.isSending = true;\n    this.sendError = false;\n\n    this._service\n      .submit({ rating: this.rating, feedback: this.feedback || undefined, attachmentUrl: this.attachmentUrl })\n      .pipe(takeUntil(this.destroy$))\n      .subscribe({\n        next: () => {\n          this.isSending = false;\n          this.sendSuccess = true;\n          this._service.setStatus(AppRatingStatus.Send).pipe(takeUntil(this.destroy$)).subscribe({ error: () => {} });\n          setTimeout(() => this.closeDialog(), 1500);\n        },\n        error: () => {\n          this.isSending = false;\n          this.sendError = true;\n        },\n      });\n  }\n\n  closeDialog() {\n    // Report \"Closed\" only when dismissing without a submitted rating, so the terminal\n    // status set by submit() (\"Send\") is not overwritten by the auto-close that follows it.\n    if (!this.sendSuccess) {\n      this._service.setStatus(AppRatingStatus.Closed).pipe(takeUntil(this.destroy$)).subscribe({ error: () => {} });\n    }\n    this.showAppRating = false;\n    this.isMinimalized = false;\n    removeMinimizedWindow('app-rating');\n    this.resetForm();\n    this.showAppRatingChange.emit(false);\n    this.isMinimizedChange.emit(false);\n  }\n\n  toggleMinimalized() {\n    this.isMinimalized = !this.isMinimalized;\n\n    if (this.isMinimalized) {\n      addMinimizedWindow('app-rating');\n      this.offset = getWindowOffset('app-rating');\n    } else {\n      removeMinimizedWindow('app-rating');\n    }\n    this.isMinimizedChange.emit(this.isMinimalized);\n  }\n\n  getVisibleStatus() {\n    return this.showAppRating && !this.isMinimalized;\n  }\n\n  resetForm() {\n    this.rating = 0;\n    this.feedback = '';\n    this.attachmentUrl = undefined;\n    this.sendSuccess = false;\n    this.sendError = false;\n    this.isSending = false;\n    this.isUploading = false;\n  }\n}\n","<p-dialog\n  [showHeader]=\"false\"\n  [modal]=\"true\"\n  [dismissableMask]=\"true\"\n  [draggable]=\"false\"\n  [visible]=\"getVisibleStatus()\"\n  [style]=\"{ width: '640px', height: '90vh' }\"\n>\n  <div class=\"control-wrapper\">\n    <i\n      [pTooltip]=\"t.minimizeTooltip\"\n      tooltipPosition=\"bottom\"\n      class=\"pi pi-window-minimize\"\n      (click)=\"toggleMinimalized()\"\n    ></i>\n    <i\n      [pTooltip]=\"t.closeTooltip\"\n      tooltipPosition=\"bottom\"\n      class=\"pi pi-times\"\n      (click)=\"closeDialog()\"\n    ></i>\n  </div>\n  <div class=\"rating-container\">\n    <div class=\"rating-container__title\">{{ t.title }}</div>\n    <div class=\"rating-container__header\">{{ t.subtitle }}</div>\n\n    <ng-container *ngIf=\"!sendSuccess; else successMsg\">\n      <div class=\"rating-container__rating-wrapper\">\n        <div class=\"rating-container__rating-wrapper__header\">{{ t.ratingHeader }}</div>\n        <p-rating\n          [(ngModel)]=\"rating\"\n          [cancel]=\"false\"\n          [readonly]=\"false\"\n          [stars]=\"5\"\n          [style]=\"{ fontSize: '2rem' }\"\n        ></p-rating>\n      </div>\n      <div class=\"rating-container__strong-header\">{{ t.feedbackHeader }}</div>\n      <textarea\n        [(ngModel)]=\"feedback\"\n        [placeholder]=\"t.feedbackPlaceholder\"\n        rows=\"5\"\n        cols=\"30\"\n        style=\"resize: none; width: 100%;\"\n        pInputTextarea\n      ></textarea>\n      <div class=\"rating-container__strong-header\">{{ t.uploadHeader }}</div>\n      <div class=\"rating-container__upload-wrapper\">\n        <fas-services-upload\n          [allowedExtensions]=\"['.png', '.jpg', '.jpeg']\"\n          [isDashedBorder]=\"true\"\n          [mainMessage]=\"t.uploadMainMessage\"\n          [selectBtnLabel]=\"t.uploadBtnLabel\"\n          [mainIcon]=\"'pi-upload'\"\n          (fileSelected)=\"handleFilesSelected($event)\"\n          [multiple]=\"false\"\n          [maxFileSizeMb]=\"2\"\n        ></fas-services-upload>\n      </div>\n      <div *ngIf=\"sendError\" class=\"rating-container__error\">{{ t.errorMessage }}</div>\n      <div class=\"rating-container__buttons\">\n        <p-button [text]=\"true\" [label]=\"t.cancelBtn\" (click)=\"closeDialog()\"></p-button>\n        <p-button\n          icon=\"pi pi-send\"\n          [label]=\"t.sendBtn\"\n          [loading]=\"isSending || isUploading\"\n          [disabled]=\"!rating || isSending || isUploading\"\n          (click)=\"submit()\"\n        ></p-button>\n      </div>\n    </ng-container>\n\n    <ng-template #successMsg>\n      <div class=\"rating-container__success\">\n        <i class=\"pi pi-check-circle\"></i>\n        <p>{{ t.successMessage }}</p>\n      </div>\n    </ng-template>\n  </div>\n</p-dialog>\n\n<div *ngIf=\"isMinimalized && showMinimizedChip\" class=\"minimalized-container\" [ngStyle]=\"{'--offset': offset + 'px'}\">\n  <div class=\"minimalized-container__header\">{{ t.minimizedTitle }}</div>\n  <div class=\"minimalized-container__buttons\">\n    <i\n      [pTooltip]=\"t.maximizeTooltip\"\n      tooltipPosition=\"top\"\n      class=\"pi pi-window-maximize\"\n      (click)=\"toggleMinimalized()\"\n    ></i>\n    <i\n      [pTooltip]=\"t.closeTooltip\"\n      tooltipPosition=\"top\"\n      class=\"pi pi-times\"\n      (click)=\"closeDialog()\"\n    ></i>\n  </div>\n</div>\n","import { Directive, ElementRef, HostListener, Optional } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n  selector: '[fasServicesTrimOnBlur]',\n  standalone: true,\n})\nexport class FasServicesTrimOnBlurDirective {\n  public constructor(\n    private el: ElementRef,\n    @Optional() private ngControl: NgControl\n  ) {}\n\n  @HostListener('blur') public onBlur(): void {\n    const value = this.el.nativeElement.value.trim();\n\n    // if the input has NgControl (e.g. formControlName=\"name\" or [(ngModel)]=\"name\")\n    if (this.ngControl && this.ngControl.control) {\n      this.ngControl.control.setValue(value, { emitEvent: true });\n    } else {\n      // just simple input without formControls\n      this.el.nativeElement.value = value;\n    }\n  }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { API_URL } from '../../fas-services-notification/api/api-url.token';\nimport { IIssueReportInputVm } from '../models/issue-reporter.model';\n\n@Injectable({ providedIn: 'root' })\nexport class IssueReporterService {\n  private readonly baseUrl: string;\n\n  constructor(private http: HttpClient, @Inject(API_URL) private apiUrl: string) {\n    this.baseUrl = `${this.apiUrl}/IssueReport`;\n  }\n\n  submit(vm: IIssueReportInputVm): Observable<void> {\n    return this.http.post<void>(this.baseUrl, vm, { headers: this.createHeaders() });\n  }\n\n  private createHeaders(): HttpHeaders {\n    let headers = new HttpHeaders();\n    const token = localStorage.getItem('authToken');\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    return headers;\n  }\n}\n","export interface IssueReporterTexts {\n  title: string;\n  subtitle: string;\n  descriptionHeader: string;\n  descriptionPlaceholder: string;\n  uploadHeader: string;\n  uploadMainMessage: string;\n  uploadBtnLabel: string;\n  cancelBtn: string;\n  sendBtn: string;\n  successMessage: string;\n  errorMessage: string;\n  minimizeTooltip: string;\n  closeTooltip: string;\n  maximizeTooltip: string;\n  minimizedTitle: string;\n}\n\nexport const DEFAULT_ISSUE_REPORTER_TEXTS: IssueReporterTexts = {\n  title: 'Napisz jaki problem napotkałeś.',\n  subtitle: 'Pomóż nam stworzyć produkt, który odpowie na potrzeby użytkowników.',\n  descriptionHeader: 'Opis problemu',\n  descriptionPlaceholder: 'Opisz co nie działa poprawnie',\n  uploadHeader: 'Dodaj plik pokazujący problem',\n  uploadMainMessage: 'Przeciągij plik tutaj lub',\n  uploadBtnLabel: 'Prześlij plik',\n  cancelBtn: 'Anuluj',\n  sendBtn: 'Wyślij',\n  successMessage: 'Zgłoszenie zostało wysłane. Dziękujemy!',\n  errorMessage: 'Wystąpił błąd. Spróbuj ponownie.',\n  minimizeTooltip: 'Minimalizuj',\n  closeTooltip: 'Zamknij',\n  maximizeTooltip: 'Maksymalizuj',\n  minimizedTitle: 'Zgłoś problem',\n};\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnDestroy,\n  OnInit,\n  OnChanges,\n  SimpleChanges,\n  inject,\n  effect,\n  Inject,\n} from '@angular/core';\nimport { InputTextareaModule } from 'primeng/inputtextarea';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { RatingModule } from 'primeng/rating';\nimport { FasServicesUploadComponent } from '../../public-api';\nimport { CommonModule } from '@angular/common';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  addMinimizedWindow,\n  getWindowOffset,\n  removeMinimizedWindow,\n} from '../shared/minimalized-windows.service';\nimport { Subject, takeUntil } from 'rxjs';\nimport { IssueReporterService } from './api/issue-reporter.service';\nimport { IssueReporterTexts, DEFAULT_ISSUE_REPORTER_TEXTS } from './models/issue-reporter-texts.model';\nimport { API_URL } from '../fas-services-notification/api/api-url.token';\n\n@Component({\n  selector: 'fas-services-issue-reporter',\n  standalone: true,\n  imports: [\n    DialogModule,\n    ButtonModule,\n    RatingModule,\n    TooltipModule,\n    InputTextareaModule,\n    FasServicesUploadComponent,\n    CommonModule,\n    FormsModule,\n  ],\n  templateUrl: './fas-services-issue-reporter.component.html',\n  styleUrl: './fas-services-issue-reporter.component.scss',\n})\nexport class FasServicesIssueReporterComponent implements OnInit, OnChanges, OnDestroy {\n  @Input() showIssueReporter: boolean = false;\n  @Input() maximizeTrigger?: EventEmitter<void>;\n  @Input() t: IssueReporterTexts = { ...DEFAULT_ISSUE_REPORTER_TEXTS };\n  @Input() showMinimizedChip: boolean = true;\n  @Output() showIssueReporterChange = new EventEmitter<boolean>();\n  @Output() isMinimizedChange = new EventEmitter<boolean>();\n\n  private _service = inject(IssueReporterService);\n  private _http = inject(HttpClient);\n  private destroy$ = new Subject<void>();\n\n  public isMinimalized: boolean = false;\n  public offset: number = 0;\n  public description: string = '';\n  public attachmentUrl: string | undefined;\n  public isSending: boolean = false;\n  public isUploading: boolean = false;\n  public sendSuccess: boolean = false;\n  public sendError: boolean = false;\n\n  constructor(@Inject(API_URL) private _apiUrl: string) {\n    effect(() => {\n      this.offset = getWindowOffset('issue-reporter');\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['showIssueReporter'] && changes['showIssueReporter'].previousValue === true && !changes['showIssueReporter'].currentValue) {\n      if (this.isMinimalized) {\n        this.isMinimalized = false;\n        removeMinimizedWindow('issue-reporter');\n        this.isMinimizedChange.emit(false);\n      }\n      this.resetForm();\n    }\n  }\n\n  ngOnInit() {\n    this.maximizeTrigger?.pipe(takeUntil(this.destroy$)).subscribe(() => {\n      if (this.isMinimalized) {\n        this.isMinimalized = false;\n        removeMinimizedWindow('issue-reporter');\n        this.isMinimizedChange.emit(false);\n      }\n      this.showIssueReporter = true;\n    });\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n    removeMinimizedWindow('issue-reporter');\n  }\n\n  handleFilesSelected(files: File[] | File | undefined) {\n    const file = files instanceof File ? files : Array.isArray(files) ? files[0] : undefined;\n    if (!file) {\n      this.attachmentUrl = undefined;\n      return;\n    }\n    const formData = new FormData();\n    formData.append('file', file, file.name);\n    formData.append('publicVisible', 'true');\n    this.isUploading = true;\n    this._http.post<{ fileUrl: string }>(`${this._apiUrl}/UploadMedia`, formData)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe({\n        next: (result) => { this.attachmentUrl = result.fileUrl?.startsWith('http') ? result.fileUrl : `${this._apiUrl}${result.fileUrl}`; this.isUploading = false; },\n        error: () => { this.attachmentUrl = undefined; this.isUploading = false; },\n      });\n  }\n\n  submit() {\n    if (!this.description.trim()) return;\n\n    this.isSending = true;\n    this.sendError = false;\n\n    this._service.submit({ description: this.description, attachmentUrl: this.attachmentUrl })\n      .pipe(takeUntil(this.destroy$))\n      .subscribe({\n        next: () => {\n          this.isSending = false;\n          this.sendSuccess = true;\n          setTimeout(() => this.closeDialog(), 1500);\n        },\n        error: () => {\n          this.isSending = false;\n          this.sendError = true;\n        },\n      });\n  }\n\n  closeDialog() {\n    this.showIssueReporter = false;\n    this.isMinimalized = false;\n    removeMinimizedWindow('issue-reporter');\n    this.resetForm();\n    this.showIssueReporterChange.emit(false);\n    this.isMinimizedChange.emit(false);\n  }\n\n  toggleMinimalized() {\n    this.isMinimalized = !this.isMinimalized;\n\n    if (this.isMinimalized) {\n      addMinimizedWindow('issue-reporter');\n      this.offset = getWindowOffset('issue-reporter');\n    } else {\n      removeMinimizedWindow('issue-reporter');\n    }\n    this.isMinimizedChange.emit(this.isMinimalized);\n  }\n\n  getVisibleStatus() {\n    return this.showIssueReporter && !this.isMinimalized;\n  }\n\n  resetForm() {\n    this.description = '';\n    this.attachmentUrl = undefined;\n    this.sendSuccess = false;\n    this.sendError = false;\n    this.isSending = false;\n    this.isUploading = false;\n  }\n}\n","<p-dialog\n  [showHeader]=\"false\"\n  [modal]=\"true\"\n  [dismissableMask]=\"true\"\n  [draggable]=\"false\"\n  [visible]=\"getVisibleStatus()\"\n  [style]=\"{ width: '640px', height: '90vh' }\"\n>\n  <div class=\"control-wrapper\">\n    <i\n      [pTooltip]=\"t.minimizeTooltip\"\n      tooltipPosition=\"bottom\"\n      class=\"pi pi-window-minimize\"\n      (click)=\"toggleMinimalized()\"\n    ></i>\n    <i\n      [pTooltip]=\"t.closeTooltip\"\n      tooltipPosition=\"bottom\"\n      class=\"pi pi-times\"\n      (click)=\"closeDialog()\"\n    ></i>\n  </div>\n  <div class=\"issue-container\">\n    <div class=\"issue-container__title\">{{ t.title }}</div>\n    <div class=\"issue-container__header\">{{ t.subtitle }}</div>\n\n    <ng-container *ngIf=\"!sendSuccess; else successMsg\">\n      <div class=\"issue-container__strong-header\">{{ t.descriptionHeader }}</div>\n      <textarea\n        [(ngModel)]=\"description\"\n        [placeholder]=\"t.descriptionPlaceholder\"\n        rows=\"5\"\n        cols=\"30\"\n        style=\"resize: none; width: 100%;\"\n        pInputTextarea\n      ></textarea>\n      <div class=\"issue-container__strong-header\">{{ t.uploadHeader }}</div>\n      <div class=\"issue-container__upload-wrapper\">\n        <fas-services-upload\n          [allowedExtensions]=\"['.png', '.jpg', '.jpeg']\"\n          [isDashedBorder]=\"true\"\n          [mainMessage]=\"t.uploadMainMessage\"\n          [selectBtnLabel]=\"t.uploadBtnLabel\"\n          [mainIcon]=\"'pi-upload'\"\n          (fileSelected)=\"handleFilesSelected($event)\"\n          [multiple]=\"false\"\n          [maxFileSizeMb]=\"2\"\n        ></fas-services-upload>\n      </div>\n      <div *ngIf=\"sendError\" class=\"issue-container__error\">{{ t.errorMessage }}</div>\n      <div class=\"issue-container__buttons\">\n        <p-button [text]=\"true\" [label]=\"t.cancelBtn\" (click)=\"closeDialog()\"></p-button>\n        <p-button\n          icon=\"pi pi-send\"\n          [label]=\"t.sendBtn\"\n          [loading]=\"isSending || isUploading\"\n          [disabled]=\"!description.trim() || isSending || isUploading\"\n          (click)=\"submit()\"\n        ></p-button>\n      </div>\n    </ng-container>\n\n    <ng-template #successMsg>\n      <div class=\"issue-container__success\">\n        <i class=\"pi pi-check-circle\"></i>\n        <p>{{ t.successMessage }}</p>\n      </div>\n    </ng-template>\n  </div>\n</p-dialog>\n\n<div *ngIf=\"isMinimalized && showMinimizedChip\" class=\"minimalized-container\" [ngStyle]=\"{'--offset': offset + 'px'}\">\n  <div class=\"minimalized-container__header\">{{ t.minimizedTitle }}</div>\n  <div class=\"minimalized-container__buttons\">\n    <i\n      [pTooltip]=\"t.maximizeTooltip\"\n      tooltipPosition=\"top\"\n      class=\"pi pi-window-maximize\"\n      (click)=\"toggleMinimalized()\"\n    ></i>\n    <i\n      [pTooltip]=\"t.closeTooltip\"\n      tooltipPosition=\"top\"\n      class=\"pi pi-times\"\n      (click)=\"closeDialog()\"\n    ></i>\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { AfterViewChecked, Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\n\nexport interface LogContentPart {\n  type: 'text' | 'link';\n  value: string;\n  href?: string;\n  isImage?: boolean;\n}\n\nexport interface ParsedLogEntry {\n  type: 'text' | 'loop' | 'barrier' | 'plate' | 'allow' | 'deny';\n  timestamp: string;\n  content: string;\n  contentParts: LogContentPart[];\n  loopNumber?: number;\n  direction?: 'up' | 'down';\n  plateNumber?: string;\n  platePrefix?: string;\n  sourcePrefix?: string;\n  images?: string[];\n}\n\n@Component({\n  selector: 'fas-services-debug-viewer',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './fas-services-debug-viewer.component.html',\n  styleUrl: './fas-services-debug-viewer.component.css'\n})\nexport class FasServicesDebugViewerComponent implements OnChanges, AfterViewChecked {\n  @Input() debugInfo: string[] = [];\n  @Input() title: string = '';\n  @Input() stopScroll: boolean = false;\n  @Input() scrollHeight: string = 'calc(100vh - 266px)';\n  @Input() showSource: boolean = true;\n\n  @ViewChild('debugWindow') debugWindow!: ElementRef<HTMLElement>;\n\n  private shouldScroll = false;\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['debugInfo'] && this.debugInfo.length > 0 && !this.stopScroll) {\n      this.shouldScroll = true;\n    }\n  }\n\n  ngAfterViewChecked(): void {\n    if (this.shouldScroll && this.debugWindow) {\n      const el = this.debugWindow.nativeElement;\n      el.scrollTop = el.scrollHeight;\n      this.shouldScroll = false;\n    }\n  }\n\n  copyToClipboard(text: string): void {\n    navigator.clipboard.writeText(text).then(\n      () => {\n        console.log('Skopiowano do schowka:', text);\n      },\n      (err) => {\n        console.error('Błąd kopiowania do schowka:', err);\n      }\n    );\n  }\n\n  openLink(url: string, event?: MouseEvent): void {\n    event?.preventDefault();\n    window.open(url, '_blank', 'noopener,noreferrer');\n  }\n\n  parseLogEntry(log: string): ParsedLogEntry {\n    const timestampRegex =\n      /^(\\d{1,2}\\.\\d{1,2}\\.\\d{4}, \\d{2}:\\d{2}:\\d{2}):\\s*(.+)$/;\n    const timestampMatch = log.match(timestampRegex);\n\n    const rawMessage = timestampMatch ? timestampMatch[2] : log;\n    const { message, images } = this.extractImages(rawMessage);\n\n    const entry = this.parseMessage(\n      timestampMatch ? timestampMatch[1] : '',\n      message\n    );\n    entry.images = images;\n    return entry;\n  }\n\n  /**\n   * Pulls image URLs out of the message so they can be rendered\n   * as thumbnails on their own row instead of inline links.\n   * Handles the \"(image='https://...')\" convention and bare image URLs.\n   */\n  private extractImages(rawMessage: string): {\n    message: string;\n    images: string[];\n  } {\n    const images: string[] = [];\n\n    let message = rawMessage.replace(\n      /\\s*\\(image=['\"]([^'\"]+)['\"]\\)\\.?/gi,\n      (_match, url: string) => {\n        images.push(url);\n        return '';\n      }\n    );\n\n    message = message.replace(/https?:\\/\\/[^\\s]+/g, (url) => {\n      const trimmed = url.replace(/['\")\\].,;:!?]+$/, '');\n      if (this.isImageUrl(trimmed)) {\n        images.push(trimmed);\n        return url.slice(trimmed.length);\n      }\n      return url;\n    });\n\n    return { message: message.trim(), images };\n  }\n\n  private parseMessage(timestamp: string, message: string): ParsedLogEntry {\n    if (!timestamp) {\n      return {\n        type: 'text',\n        timestamp: '',\n        content: message,\n        contentParts: this.parseContentParts(message),\n      };\n    }\n\n    // Check for [ALLOW] messages\n    if (message.includes('[ALLOW]')) {\n      const rawContent = message.replace('[ALLOW]', '').trim();\n      const sourcePrefixMatch = rawContent.match(/^(\\[[A-Z]+\\])\\s*/);\n      const sourcePrefix = sourcePrefixMatch ? sourcePrefixMatch[1] : undefined;\n      const content = sourcePrefix\n        ? rawContent.slice(sourcePrefixMatch![0].length).trim()\n        : rawContent;\n      return {\n        type: 'allow',\n        timestamp: timestamp,\n        sourcePrefix: sourcePrefix,\n        content: content,\n        contentParts: this.parseContentParts(content),\n      };\n    }\n\n    // Check for [DENY] messages\n    if (message.includes('[DENY]')) {\n      const rawContent = message.replace('[DENY]', '').trim();\n      const sourcePrefixMatch = rawContent.match(/^(\\[[A-Z]+\\])\\s*/);\n      const sourcePrefix = sourcePrefixMatch ? sourcePrefixMatch[1] : undefined;\n      const content = sourcePrefix\n        ? rawContent.slice(sourcePrefixMatch![0].length).trim()\n        : rawContent;\n      return {\n        type: 'deny',\n        timestamp: timestamp,\n        sourcePrefix: sourcePrefix,\n        content: content,\n        contentParts: this.parseContentParts(content),\n      };\n    }\n\n    // Check for simple \"Pętla X\" with optional arrow (↑ or ↓)\n    const simpleLoopRegex = /^Pętla\\s*(\\d)\\s*([↑↓])?$/;\n    const simpleLoopMatch = message.match(simpleLoopRegex);\n\n    if (simpleLoopMatch) {\n      const loopNumber = parseInt(simpleLoopMatch[1]);\n      const arrow = simpleLoopMatch[2];\n      return {\n        type: 'loop',\n        timestamp: timestamp,\n        content: `Pętla ${loopNumber}`,\n        contentParts: this.parseContentParts(`Pętla ${loopNumber}`),\n        loopNumber: loopNumber,\n        direction: arrow === '↑' ? 'up' : arrow === '↓' ? 'down' : undefined,\n      };\n    }\n\n    // Check for CurrentInductionLoop status changes\n    const loopRegex = /CurrentInductionLoop(\\d)Status changed to: (High|Low)/;\n    const loopMatch = message.match(loopRegex);\n\n    if (loopMatch) {\n      const loopNumber = parseInt(loopMatch[1]);\n      const status = loopMatch[2];\n      return {\n        type: 'loop',\n        timestamp: timestamp,\n        content: `Pętla ${loopNumber}`,\n        contentParts: this.parseContentParts(`Pętla ${loopNumber}`),\n        loopNumber: loopNumber,\n        direction: status === 'High' ? 'up' : 'down',\n      };\n    }\n\n    // Check for Opening barrier (case insensitive)\n    const barrierRegex = /opening barrier/i;\n    if (barrierRegex.test(message)) {\n      return {\n        type: 'barrier',\n        timestamp: timestamp,\n        content: message,\n        contentParts: this.parseContentParts(message),\n        direction: 'up',\n      };\n    }\n\n    // Check for Closing barrier (case insensitive)\n    const closingBarrierRegex = /closing barrier/i;\n    if (closingBarrierRegex.test(message)) {\n      return {\n        type: 'barrier',\n        timestamp: timestamp,\n        content: message,\n        contentParts: this.parseContentParts(message),\n        direction: 'down',\n      };\n    }\n\n    // Check for car plate recognition (multiple patterns)\n    const platePatterns = [\n      {\n        regex: /^(.*)CarPlateRecognizeInProgress, parameters: (.+)$/,\n        prefixPattern: 'CarPlateRecognizeInProgress, parameters: ',\n      },\n      { regex: /^(.*)plate number : (.+)$/, prefixPattern: 'plate number : ' },\n      {\n        regex: /^(.*)on exit\\. Plate: (.+)$/,\n        prefixPattern: 'on exit. Plate: ',\n      },\n      {\n        regex: /^(.*)for plate: (.+)$/,\n        prefixPattern: 'for plate: ',\n      },\n    ];\n\n    for (const pattern of platePatterns) {\n      const plateMatch = message.match(pattern.regex);\n      if (plateMatch) {\n        const beforePattern = plateMatch[1];\n        const plateNumber = plateMatch[2].trim().replace(/['\"]/g, '');\n        const fullPrefix = beforePattern + pattern.prefixPattern;\n\n        return {\n          type: 'plate',\n          timestamp: timestamp,\n          content: message,\n          contentParts: this.parseContentParts(message),\n          platePrefix: fullPrefix,\n          plateNumber: plateNumber,\n        };\n      }\n    }\n\n    // Default: return as plain text with timestamp\n    return {\n      type: 'text',\n      timestamp: timestamp,\n      content: message,\n      contentParts: this.parseContentParts(message),\n    };\n  }\n\n  private parseContentParts(content: string): LogContentPart[] {\n    const urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n    const matches = Array.from(content.matchAll(urlRegex));\n\n    if (!matches.length) {\n      return [{ type: 'text', value: content }];\n    }\n\n    const parts: LogContentPart[] = [];\n    let currentIndex = 0;\n\n    for (const match of matches) {\n      let url = match[0];\n      const index = match.index ?? 0;\n\n      // Trim trailing punctuation that is not part of the URL, e.g. \"(image='https://...jpg').\"\n      const trailingPunctuation = url.match(/['\")\\].,;:!?]+$/);\n      if (trailingPunctuation) {\n        url = url.slice(0, -trailingPunctuation[0].length);\n      }\n\n      if (index > currentIndex) {\n        parts.push({\n          type: 'text',\n          value: content.slice(currentIndex, index),\n        });\n      }\n\n      parts.push({\n        type: 'link',\n        value: url,\n        href: url,\n        isImage: this.isImageUrl(url),\n      });\n\n      currentIndex = index + url.length;\n    }\n\n    if (currentIndex < content.length) {\n      parts.push({\n        type: 'text',\n        value: content.slice(currentIndex),\n      });\n    }\n\n    return parts;\n  }\n\n  private isImageUrl(url: string): boolean {\n    try {\n      const parsedUrl = new URL(url);\n      const imageName = parsedUrl.searchParams.get('imageName') ?? '';\n      const candidate = imageName || url;\n      return /\\.(jpg|jpeg|png|gif|webp|bmp|svg)(?:$|[?#&])/i.test(candidate);\n    } catch {\n      return /\\.(jpg|jpeg|png|gif|webp|bmp|svg)(?:$|[?#&])/i.test(url);\n    }\n  }\n}\n","<div class=\"debug-viewer-wrapper\">\n  <div *ngIf=\"title\" class=\"debug-viewer-title\">{{ title }}</div>\n<div class=\"logWindow\" #debugWindow [style.height]=\"scrollHeight\">\n  <ng-template #contentPartsTemplate let-parts>\n    <ng-container *ngFor=\"let part of parts\">\n      <ng-container *ngIf=\"part.type === 'text'; else linkPart\">\n        {{ part.value }}\n      </ng-container>\n      <ng-template #linkPart>\n        <a\n          class=\"debug-link\"\n          [href]=\"part.href\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          (click)=\"openLink(part.href || '', $event)\"\n        >\n          {{ part.value }}\n        </a>\n      </ng-template>\n    </ng-container>\n  </ng-template>\n\n  <p *ngFor=\"let log of debugInfo\" class=\"log-entry\">\n    <ng-container *ngIf=\"parseLogEntry(log) as parsedLog\">\n      <!-- Timestamp (always shown if present) -->\n      <span *ngIf=\"parsedLog.timestamp\" class=\"log-timestamp\">\n        {{ parsedLog.timestamp }}:\n      </span>\n\n      <!-- Loop status log -->\n      <span *ngIf=\"parsedLog.type === 'loop'\" class=\"loop-status\">\n        <!-- Active Loop Icons -->\n        <img\n          *ngIf=\"parsedLog.direction === 'up' && parsedLog.loopNumber === 1\"\n          src=\"assets/debug-icons/active-loop-1-icon.svg\"\n          alt=\"Active loop 1\"\n          class=\"loop-icon\"\n        />\n        <img\n          *ngIf=\"parsedLog.direction === 'up' && parsedLog.loopNumber === 2\"\n          src=\"assets/debug-icons/active-loop-2-icon.svg\"\n          alt=\"Active loop 2\"\n          class=\"loop-icon\"\n        />\n        <img\n          *ngIf=\"parsedLog.direction === 'up' && parsedLog.loopNumber === 3\"\n          src=\"assets/debug-icons/active-loop-3-icon.svg\"\n          alt=\"Active loop 3\"\n          class=\"loop-icon\"\n        />\n        <!-- Inactive Loop Icons -->\n        <img\n          *ngIf=\"parsedLog.direction === 'down' && parsedLog.loopNumber === 1\"\n          src=\"assets/debug-icons/inactive-loop-1-icon.svg\"\n          alt=\"Inactive loop 1\"\n          class=\"loop-icon\"\n        />\n        <img\n          *ngIf=\"parsedLog.direction === 'down' && parsedLog.loopNumber === 2\"\n          src=\"assets/debug-icons/inactive-loop-2-icon.svg\"\n          alt=\"Inactive loop 2\"\n          class=\"loop-icon\"\n        />\n        <img\n          *ngIf=\"parsedLog.direction === 'down' && parsedLog.loopNumber === 3\"\n          src=\"assets/debug-icons/inactive-loop-3-icon.svg\"\n          alt=\"Inactive loop 3\"\n          class=\"loop-icon\"\n        />\n        <span\n          class=\"loop-label\"\n          [ngClass]=\"{\n            'loop-1-color': parsedLog.loopNumber === 1,\n            'loop-2-color': parsedLog.loopNumber === 2,\n            'loop-3-color': parsedLog.loopNumber === 3\n          }\"\n        >\n          {{ parsedLog.content }}\n        </span>\n        <i\n          *ngIf=\"parsedLog.direction === 'up'\"\n          class=\"pi pi-arrow-up\"\n          [ngClass]=\"{\n            'loop-1-color': parsedLog.loopNumber === 1,\n            'loop-2-color': parsedLog.loopNumber === 2,\n            'loop-3-color': parsedLog.loopNumber === 3\n          }\"\n        ></i>\n        <i\n          *ngIf=\"parsedLog.direction === 'down'\"\n          class=\"pi pi-arrow-down\"\n          [ngClass]=\"{\n            'loop-1-color': parsedLog.loopNumber === 1,\n            'loop-2-color': parsedLog.loopNumber === 2,\n            'loop-3-color': parsedLog.loopNumber === 3\n          }\"\n        ></i>\n      </span>\n\n      <!-- Barrier log -->\n      <span *ngIf=\"parsedLog.type === 'barrier'\" class=\"barrier-status\">\n        <img\n          *ngIf=\"parsedLog.direction === 'up'\"\n          src=\"assets/debug-icons/up-barrier-icon.svg\"\n          alt=\"Barrier up\"\n          class=\"barrier-icon\"\n        />\n        <img\n          *ngIf=\"parsedLog.direction === 'down'\"\n          src=\"assets/debug-icons/down-barrier-icon.svg\"\n          alt=\"Barrier down\"\n          class=\"barrier-icon\"\n        />\n        <ng-container\n          *ngTemplateOutlet=\"contentPartsTemplate; context: { $implicit: parsedLog.contentParts }\"\n        ></ng-container>\n      </span>\n\n      <!-- Plate recognition log -->\n      <span *ngIf=\"parsedLog.type === 'plate'\" class=\"plate-recognition\">\n        <span class=\"plate-text\">{{ parsedLog.platePrefix }}</span>\n        <span\n          class=\"plate-number\"\n          (click)=\"copyToClipboard(parsedLog?.plateNumber ?? '')\"\n          >{{ parsedLog.plateNumber }}</span\n        >\n      </span>\n\n      <!-- Allow log -->\n      <span *ngIf=\"parsedLog.type === 'allow'\" class=\"allow-status\">\n        <img\n          src=\"assets/debug-icons/allow-icon.svg\"\n          alt=\"Allow\"\n          class=\"allow-icon\"\n        />\n        <span class=\"allow-badge\">\n          <span *ngIf=\"showSource && parsedLog.sourcePrefix\" class=\"allow-text\">{{ parsedLog.sourcePrefix }}</span>\n          <span class=\"allow-text\">[ALLOW]</span>\n        </span>\n        <ng-container\n          *ngTemplateOutlet=\"contentPartsTemplate; context: { $implicit: parsedLog.contentParts }\"\n        ></ng-container>\n      </span>\n\n      <!-- Deny log -->\n      <span *ngIf=\"parsedLog.type === 'deny'\" class=\"deny-status\">\n        <img\n          src=\"assets/debug-icons/deny-icon.svg\"\n          alt=\"Deny\"\n          class=\"deny-icon\"\n        />\n        <span class=\"deny-badge\">\n          <span *ngIf=\"showSource && parsedLog.sourcePrefix\" class=\"deny-text\">{{ parsedLog.sourcePrefix }}</span>\n          <span class=\"deny-text\">[DENY]</span>\n        </span>\n        <ng-container\n          *ngTemplateOutlet=\"contentPartsTemplate; context: { $implicit: parsedLog.contentParts }\"\n        ></ng-container>\n      </span>\n\n      <!-- Regular text log -->\n      <span *ngIf=\"parsedLog.type === 'text'\">\n        <ng-container\n          *ngTemplateOutlet=\"contentPartsTemplate; context: { $implicit: parsedLog.contentParts }\"\n        ></ng-container>\n      </span>\n\n      <!-- Images attached to this entry (own row) -->\n      <span *ngIf=\"parsedLog.images?.length\" class=\"log-images\">\n        <a\n          *ngFor=\"let img of parsedLog.images\"\n          class=\"log-image-link\"\n          [href]=\"img\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          (click)=\"openLink(img, $event)\"\n        >\n          <img [src]=\"img\" alt=\"Zdjęcie z kamery\" class=\"log-image\" />\n        </a>\n      </span>\n    </ng-container>\n  </p>\n</div>\n</div>\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, shareReplay } from 'rxjs/operators';\nimport { API_URL } from '../../fas-services-notification/api/api-url.token';\nimport { IFaqCategoryWithItemsVm } from '../models/faq-category-vm.model';\n\n@Injectable({ providedIn: 'root' })\nexport class FaqService {\n  private readonly baseUrl: string;\n  /** Cached FAQ responses keyed by language so we fetch each language at most once. */\n  private readonly cache = new Map<string, Observable<IFaqCategoryWithItemsVm[]>>();\n\n  constructor(private http: HttpClient, @Inject(API_URL) private apiUrl: string) {\n    this.baseUrl = `${this.apiUrl}/Faq`;\n  }\n\n  get(acceptLanguage: string = 'pl'): Observable<IFaqCategoryWithItemsVm[]> {\n    const key = acceptLanguage || 'pl';\n    let cached = this.cache.get(key);\n    if (!cached) {\n      cached = this.request(key).pipe(\n        // On failure, drop the entry so the next call retries instead of replaying the error.\n        catchError((err) => {\n          this.cache.delete(key);\n          return throwError(() => err);\n        }),\n        shareReplay({ bufferSize: 1, refCount: false }),\n      );\n      this.cache.set(key, cached);\n    }\n    return cached;\n  }\n\n  /** Pre-fetch and cache FAQ for a language ahead of opening the modal. */\n  preload(acceptLanguage: string = 'pl'): void {\n    this.get(acceptLanguage).subscribe({ error: () => {} });\n  }\n\n  /** Drop cached data so the next get() re-fetches from the server. */\n  clearCache(acceptLanguage?: string): void {\n    if (acceptLanguage) {\n      this.cache.delete(acceptLanguage);\n    } else {\n      this.cache.clear();\n    }\n  }\n\n  private request(acceptLanguage: string): Observable<IFaqCategoryWithItemsVm[]> {\n    const headers = this.createHeaders();\n    let params = new HttpParams();\n    if (acceptLanguage) {\n      params = params.set('acceptLanguage', acceptLanguage);\n    }\n    return this.http.get<IFaqCategoryWithItemsVm[]>(this.baseUrl, { headers, params });\n  }\n\n  private createHeaders(): HttpHeaders {\n    let headers = new HttpHeaders();\n    const token = localStorage.getItem('authToken');\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    return headers;\n  }\n}\n","import { ChangeDetectorRef, Component, inject, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AccordionModule } from 'primeng/accordion';\nimport { FaqService } from './api/faq.service';\nimport { IFaqCategoryWithItemsVm } from './models/faq-category-vm.model';\n\n@Component({\n  selector: 'fas-services-faq',\n  standalone: true,\n  imports: [CommonModule, AccordionModule],\n  templateUrl: './fas-services-faq.component.html',\n  styleUrl: './fas-services-faq.component.scss',\n})\nexport class FasServicesFaqComponent implements OnInit, OnChanges {\n  /** UI language passed to the backend for translated content. */\n  @Input() language: string = 'pl';\n  /** Main heading shown above the FAQ. */\n  @Input() title: string = 'Centrum Pomocy i przewodnik po aplikacji';\n  /** Optional intro paragraph under the heading. */\n  @Input() subtitle?: string =\n    'Zebraliśmy tutaj odpowiedzi na najczęściej zadawane pytania, aby pomóc Ci w sprawnym korzystaniu z platformy.';\n  /** Optional contact link rendered under the subtitle. */\n  @Input() contactUrl?: string;\n  @Input() contactLabel: string = 'skontaktuj się z nami';\n\n  private faqService = inject(FaqService);\n  private cdr = inject(ChangeDetectorRef);\n\n  public categories: IFaqCategoryWithItemsVm[] = [];\n  public loading: boolean = false;\n\n  ngOnInit(): void {\n    this.fetchFaq();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['language'] && !changes['language'].firstChange) {\n      this.fetchFaq();\n    }\n  }\n\n  fetchFaq(): void {\n    this.loading = true;\n    this.faqService.get(this.language).subscribe({\n      next: (res: IFaqCategoryWithItemsVm[]) => {\n        this.categories = res ?? [];\n        this.loading = false;\n        this.cdr.detectChanges();\n      },\n      error: (err) => {\n        console.error(err);\n        this.loading = false;\n        this.cdr.detectChanges();\n      },\n    });\n  }\n}\n","<div class=\"faq\">\n  <p-accordion *ngIf=\"categories.length\" [multiple]=\"true\" styleClass=\"faq__categories\">\n    <p-accordionTab *ngFor=\"let category of categories\">\n      <ng-template pTemplate=\"header\">\n        <span class=\"faq__category-header\">\n          <i *ngIf=\"category.icon\" [class]=\"category.icon\"></i>\n          <span class=\"faq__category-title\">{{ category.title }}</span>\n        </span>\n      </ng-template>\n\n      <p-accordion [multiple]=\"true\" styleClass=\"faq__items\">\n        <p-accordionTab *ngFor=\"let item of category.items\" [header]=\"item.question\">\n          <div class=\"faq__answer\" [innerHTML]=\"item.answer\"></div>\n        </p-accordionTab>\n      </p-accordion>\n    </p-accordionTab>\n  </p-accordion>\n\n  <p class=\"faq__empty\" *ngIf=\"!loading && !categories.length\">\n    Brak dostępnych pytań i odpowiedzi.\n  </p>\n</div>\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { API_URL } from '../../fas-services-notification/api/api-url.token';\nimport { IContactFormVm } from '../models/contact-form.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ContactFormService {\n  private readonly baseUrl: string;\n\n  constructor(private http: HttpClient, @Inject(API_URL) private apiUrl: string) {\n    this.baseUrl = `${this.apiUrl}/ContactForm`;\n  }\n\n  post(vm: IContactFormVm): Observable<void> {\n    return this.http.post<void>(this.baseUrl, vm, { headers: this.createHeaders() });\n  }\n\n  private createHeaders(): HttpHeaders {\n    let headers = new HttpHeaders();\n    const token = localStorage.getItem('authToken');\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    return headers;\n  }\n}\n","/** Payload sent to the backend `/ContactForm` endpoint. */\nexport interface IContactFormVm {\n  email?: string;\n  phone?: string;\n  message: string;\n}\n\n/**\n * All user-facing strings of the contact form. The library is i18n-agnostic:\n * consuming apps keep their own translations and pass a (partial) object here.\n * Missing keys fall back to {@link DEFAULT_CONTACT_FORM_TEXTS} (Polish).\n */\nexport interface ContactFormTexts {\n  description: string;\n  descriptionLink: string;\n  descriptionFormEnd: string;\n  responsePromise: string;\n  formEmail: string;\n  formPhone: string;\n  formMessage: string;\n  sendButton: string;\n  orDivider: string;\n  hoursLabel: string;\n  emailLabel: string;\n  formSendSuccess: string;\n  formSendError: string;\n}\n\n/** Polish fallback labels used when an app does not provide a given key. */\nexport const DEFAULT_CONTACT_FORM_TEXTS: ContactFormTexts = {\n  description:\n    'Jeśli napotkałeś problem i nie znalazłeś odpowiedzi w sekcji pomocy (',\n  descriptionLink: 'zobacz najczęściej zadawane pytania',\n  descriptionFormEnd: '), napisz do nas.',\n  responsePromise: 'Na każdą wiadomość odpowiadamy najszybciej jak to możliwe.',\n  formEmail: 'Twój adres e-mail',\n  formPhone: 'Twój numer telefonu',\n  formMessage: 'Twoja wiadomość',\n  sendButton: 'Wyślij',\n  orDivider: 'lub',\n  hoursLabel: 'Poniedziałek – Piątek',\n  emailLabel: 'E-mail',\n  formSendSuccess: 'Wiadomość wysłana pomyślnie!',\n  formSendError: 'Wystąpił błąd. Spróbuj ponownie.',\n};\n","import { Component, inject, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputTextareaModule } from 'primeng/inputtextarea';\nimport { finalize } from 'rxjs';\nimport { ContactFormService } from './api/contact-form.service';\nimport {\n  ContactFormTexts,\n  DEFAULT_CONTACT_FORM_TEXTS,\n} from './models/contact-form.model';\n\n@Component({\n  selector: 'fas-services-contact-form',\n  standalone: true,\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    ButtonModule,\n    InputTextModule,\n    InputTextareaModule,\n  ],\n  templateUrl: './fas-services-contact-form.component.html',\n  styleUrl: './fas-services-contact-form.component.scss',\n})\nexport class FasServicesContactFormComponent implements OnInit {\n  /** WhatsApp link. When empty the WhatsApp button is not rendered. */\n  @Input() whatsappUrl?: string;\n  /** Telegram link. When empty the Telegram button is not rendered. */\n  @Input() telegramUrl?: string;\n  /** Support e-mail shown in the info section (also used as mailto). */\n  @Input() supportEmail?: string;\n  /** Availability days, e.g. \"Poniedziałek – Piątek\". */\n  @Input() availabilityDays?: string;\n  /** Availability hours, e.g. \"8:00 – 16:00\". */\n  @Input() availabilityHours?: string;\n\n  private _fb = inject(FormBuilder);\n  private _contactFormService = inject(ContactFormService);\n\n  public form!: FormGroup;\n  public loading = false;\n  public submitted = false;\n  public success = false;\n  public error = false;\n\n  /** Merged labels (defaults + app overrides). */\n  public t: ContactFormTexts = { ...DEFAULT_CONTACT_FORM_TEXTS };\n\n  ngOnInit(): void {\n    this.form = this._fb.group({\n      email: ['', [Validators.required, Validators.email]],\n      phone: [''],\n      message: ['', Validators.required],\n    });\n  }\n\n\n  get isSendDisabled(): boolean {\n    return this.form?.invalid ?? true;\n  }\n\n  submit(): void {\n    if (this.isSendDisabled) return;\n    this.submitted = true;\n    this.loading = true;\n    this.success = false;\n    this.error = false;\n\n    this._contactFormService\n      .post(this.form.value)\n      .pipe(finalize(() => (this.loading = false)))\n      .subscribe({\n        next: () => {\n          this.success = true;\n          this.form.reset();\n          this.submitted = false;\n        },\n        error: () => {\n          this.error = true;\n        },\n      });\n  }\n}\n","<div class=\"contact-form\">\n\n  <form *ngIf=\"form\" [formGroup]=\"form\" class=\"contact-form__form\">\n    <div class=\"contact-form__field\">\n      <label class=\"contact-form__label\">\n        {{ t.formEmail }} <span class=\"contact-form__required\">*</span>\n      </label>\n      <input pInputText formControlName=\"email\" type=\"email\" class=\"contact-form__input\" />\n    </div>\n\n    <div class=\"contact-form__field\">\n      <label class=\"contact-form__label\">{{ t.formPhone }}</label>\n      <input pInputText formControlName=\"phone\" type=\"tel\" class=\"contact-form__input\" />\n    </div>\n\n    <div class=\"contact-form__field\">\n      <label class=\"contact-form__label\">\n        {{ t.formMessage }} <span class=\"contact-form__required\">*</span>\n      </label>\n      <textarea\n        pInputTextarea\n        formControlName=\"message\"\n        rows=\"3\"\n        class=\"contact-form__textarea\"\n      >\n      </textarea>\n    </div>\n\n    <div class=\"contact-form__send-row\">\n      <p-button\n        [label]=\"t.sendButton\"\n        [loading]=\"loading\"\n        [disabled]=\"isSendDisabled\"\n        (onClick)=\"submit()\"\n        styleClass=\"contact-form__send-btn\"\n      >\n      </p-button>\n    </div>\n\n    <p *ngIf=\"success\" class=\"contact-form__success\">{{ t.formSendSuccess }}</p>\n    <p *ngIf=\"error\" class=\"contact-form__error\">{{ t.formSendError }}</p>\n  </form>\n\n  <div class=\"contact-form__divider\">\n    <span class=\"contact-form__divider-line\"></span>\n    <span class=\"contact-form__divider-text\">{{ t.orDivider }}</span>\n    <span class=\"contact-form__divider-line\"></span>\n  </div>\n\n  <div class=\"contact-form__info\">\n    <div *ngIf=\"availabilityDays || availabilityHours\" class=\"contact-form__info-row\">\n      <span class=\"contact-form__info-icon contact-form__info-icon--circle\">\n        <i class=\"pi pi-clock\"></i>\n      </span>\n      <div class=\"contact-form__info-text\">\n        <span class=\"contact-form__info-label\">{{ availabilityDays || t.hoursLabel }}</span>\n        <span class=\"contact-form__info-value\">{{ availabilityHours }}</span>\n      </div>\n    </div>\n\n    <div *ngIf=\"supportEmail\" class=\"contact-form__info-row\">\n      <span class=\"contact-form__info-icon contact-form__info-icon--circle\">\n        <i class=\"pi pi-envelope\"></i>\n      </span>\n      <div class=\"contact-form__info-text\">\n        <span class=\"contact-form__info-label\">{{ t.emailLabel }}</span>\n        <a class=\"contact-form__info-value\" [href]=\"'mailto:' + supportEmail\">{{ supportEmail }}</a>\n      </div>\n    </div>\n  </div>\n\n  <div *ngIf=\"whatsappUrl || telegramUrl\" class=\"contact-form__messengers\">\n    <a\n      *ngIf=\"whatsappUrl\"\n      [href]=\"whatsappUrl\"\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n      class=\"contact-form__messenger-btn contact-form__messenger-btn--whatsapp\"\n      aria-label=\"WhatsApp\"\n    >\n      <img\n        src=\"assets/fas-services-contact-form/whatsappLogo.png\"\n        alt=\"\"\n        width=\"48\"\n        height=\"48\"\n        aria-hidden=\"true\"\n      />\n    </a>\n    <a\n      *ngIf=\"telegramUrl\"\n      [href]=\"telegramUrl\"\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n      class=\"contact-form__messenger-btn contact-form__messenger-btn--telegram\"\n      aria-label=\"Telegram\"\n    >\n      <img\n        src=\"assets/fas-services-contact-form/telegramLogo.png\"\n        alt=\"\"\n        width=\"48\"\n        height=\"48\"\n        aria-hidden=\"true\"\n      />\n    </a>\n  </div>\n</div>\n","import { API_URL } from \"../fas-services-notification/api/api-url.token\";\n\n\n\n/**\n * Factory function to provide a api configuration for FAS API_URL.\n */\nexport function provideFASNotificationLibApiConfig(apiUrl: string): {\n  provide: typeof API_URL;\n  useValue:  string;\n} {\n  return {\n    provide: API_URL,\n    useValue: apiUrl,\n  };\n}\n\n/**\n * Factory function to provide the API configuration for the FAS FAQ component.\n * Uses the same shared API_URL token as the rest of the library.\n */\nexport function provideFASFaqLibApiConfig(apiUrl: string): {\n  provide: typeof API_URL;\n  useValue: string;\n} {\n  return {\n    provide: API_URL,\n    useValue: apiUrl,\n  };\n}\n\n/**\n * Factory function to provide the API configuration for the FAS contact form.\n * Uses the same shared API_URL token as the rest of the library.\n */\nexport function provideFASContactFormLibApiConfig(apiUrl: string): {\n  provide: typeof API_URL;\n  useValue: string;\n} {\n  return {\n    provide: API_URL,\n    useValue: apiUrl,\n  };\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class FeedbackModalsStatusService {\n  private _showAppRating$ = new BehaviorSubject<boolean>(false);\n  private _showIssueReporter$ = new BehaviorSubject<boolean>(false);\n\n  readonly showAppRating$ = this._showAppRating$.asObservable();\n  readonly showIssueReporter$ = this._showIssueReporter$.asObservable();\n\n  setAppRatingVisible(visible: boolean): void {\n    this._showAppRating$.next(visible);\n  }\n\n  setIssueReporterVisible(visible: boolean): void {\n    this._showIssueReporter$.next(visible);\n  }\n}\n","/*\n * Public API Surface of fas-services\n */\n\n// Main library module\n\n// Components\nexport { FasServicesUploadComponent } from './lib/fas-services-upload/fas-services-upload.component';\nexport { FasServicesDatePickerComponent } from './lib/fas-services-date-picker/fas-services-date-picker.component';\nexport { FasServiceTableComponent } from './lib/fas-service-table/fas-service-table.component';\nexport * from './lib/fas-service-table/custom-table.model';\nexport { FasServiceDynamicTableComponent } from './lib/fas-service-dynamic-table/fas-service-dynamic-table.component';\nexport { FasServicesNotificationComponent } from './lib/fas-services-notification/fas-services-notification.component';\nexport { FasServicesAppRatingComponent } from './lib/fas-services-app-rating/fas-services-app-rating.component';\nexport { FasServicesTrimOnBlurDirective } from './lib/fas-services-trim-on-blur/fas-services-trim-on-blur.directive';\nexport { FasServicesIssueReporterComponent } from './lib/fas-services-issue-reporter/fas-services-issue-reporter.component';\nexport { FasServicesDebugViewerComponent } from './lib/fas-services-debug-viewer/fas-services-debug-viewer.component';\nexport { FasServicesFaqComponent } from './lib/fas-services-faq/fas-services-faq.component';\nexport { FaqService } from './lib/fas-services-faq/api/faq.service';\nexport * from './lib/fas-services-faq/models/faq-category-vm.model';\nexport * from './lib/fas-services-faq/models/faq-item-vm.model';\nexport { FasServicesContactFormComponent } from './lib/fas-services-contact-form/fas-services-contact-form.component';\nexport * from './lib/fas-services-contact-form/models/contact-form.model';\nexport * from './lib/fas-service-dynamic-table/fas-service-dynamic-table.model';\nexport * from './lib/shared/fas-lib-config.token';\nexport { FeedbackModalsStatusService } from './lib/shared/feedback-modals-status.service';\nexport * from './lib/fas-services-app-rating/models/app-rating-texts.model';\nexport * from './lib/fas-services-app-rating/models/app-rating.model';\nexport * from './lib/fas-services-issue-reporter/models/issue-reporter-texts.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i5","i1","i3","i4","i7","i9","debounceTime","i6","takeUntil"],"mappings":"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"}