{"version":3,"file":"spiderly.mjs","sources":["../../../projects/spiderly/src/lib/errors/api-error-codes.ts","../../../projects/spiderly/src/lib/controls/base-control.ts","../../../projects/spiderly/src/lib/controls/base-dropdown-control.ts","../../../projects/spiderly/src/lib/controls/base-autocomplete-control.ts","../../../projects/spiderly/src/lib/components/required/required.component.ts","../../../projects/spiderly/src/lib/components/required/required.component.html","../../../projects/spiderly/src/lib/components/spiderly-form-control/spiderly-form-control.ts","../../../projects/spiderly/src/lib/services/validator-abstract.service.ts","../../../projects/spiderly/src/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.html","../../../projects/spiderly/src/lib/controls/spiderly-calendar/spiderly-calendar.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-calendar/spiderly-calendar.component.html","../../../projects/spiderly/src/lib/controls/spiderly-checkbox/spiderly-checkbox.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-checkbox/spiderly-checkbox.component.html","../../../projects/spiderly/src/lib/controls/spiderly-colorpicker/spiderly-colorpicker.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-colorpicker/spiderly-colorpicker.component.html","../../../projects/spiderly/src/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.html","../../../projects/spiderly/src/lib/controls/spiderly-password/spiderly-password.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-password/spiderly-password.component.html","../../../projects/spiderly/src/lib/controls/spiderly-textbox/spiderly-textbox.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-textbox/spiderly-textbox.component.html","../../../projects/spiderly/src/lib/controls/spiderly-multiselect/spiderly-multiselect.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-multiselect/spiderly-multiselect.component.html","../../../projects/spiderly/src/lib/controls/spiderly-textarea/spiderly-textarea.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-textarea/spiderly-textarea.component.html","../../../projects/spiderly/src/lib/controls/spiderly-number/spiderly-number.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-number/spiderly-number.component.html","../../../projects/spiderly/src/lib/controls/spiderly-dropdown/spiderly-dropdown.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-dropdown/spiderly-dropdown.component.html","../../../projects/spiderly/src/lib/controls/spiderly-editor/spiderly-editor.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-editor/spiderly-editor.component.html","../../../projects/spiderly/src/lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base.ts","../../../projects/spiderly/src/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.ts","../../../projects/spiderly/src/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.html","../../../projects/spiderly/src/lib/entities/base-entity.ts","../../../projects/spiderly/src/lib/services/helper-functions.ts","../../../projects/spiderly/src/lib/services/spiderly-message.service.ts","../../../projects/spiderly/src/lib/controls/spiderly-file/spiderly-file.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-file/spiderly-file.component.html","../../../projects/spiderly/src/lib/components/spiderly-buttons/return-button/return-button.component.ts","../../../projects/spiderly/src/lib/components/spiderly-buttons/return-button/return-button.component.html","../../../projects/spiderly/src/lib/controls/spiderly-controls.module.ts","../../../projects/spiderly/src/lib/entities/security-entities.ts","../../../projects/spiderly/src/lib/errors/spiderly-error.ts","../../../projects/spiderly/src/lib/services/base-form.service.ts","../../../projects/spiderly/src/lib/components/base-form/base-form.component.ts","../../../projects/spiderly/src/lib/components/spiderly-buttons/google-button/google-button.component.ts","../../../projects/spiderly/src/lib/components/spiderly-buttons/google-button/google-button.component.html","../../../projects/spiderly/src/lib/services/config.service.base.ts","../../../projects/spiderly/src/lib/entities/init-company-auth-dialog-details.ts","../../../projects/spiderly/src/lib/services/api.service.security.ts","../../../projects/spiderly/src/lib/services/auth.service.base.ts","../../../projects/spiderly/src/lib/components/auth/partials/auth.component.ts","../../../projects/spiderly/src/lib/components/auth/partials/auth.component.html","../../../projects/spiderly/src/lib/components/spiderly-panels/panel-body/panel-body.component.ts","../../../projects/spiderly/src/lib/components/spiderly-panels/panel-body/panel-body.component.html","../../../projects/spiderly/src/lib/components/spiderly-panels/panel-footer/panel-footer.component.ts","../../../projects/spiderly/src/lib/components/spiderly-panels/panel-footer/panel-footer.component.html","../../../projects/spiderly/src/lib/components/spiderly-panels/panel-header/panel-header.component.ts","../../../projects/spiderly/src/lib/components/spiderly-panels/panel-header/panel-header.component.html","../../../projects/spiderly/src/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.ts","../../../projects/spiderly/src/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.html","../../../projects/spiderly/src/lib/components/spiderly-panels/spiderly-panels.module.ts","../../../projects/spiderly/src/lib/components/auth/partials/verification-wrapper.component.ts","../../../projects/spiderly/src/lib/components/auth/partials/verification-wrapper.component.html","../../../projects/spiderly/src/lib/components/auth/partials/login-verification.component.ts","../../../projects/spiderly/src/lib/components/auth/partials/login-verification.component.html","../../../projects/spiderly/src/lib/components/auth/login/login.component.ts","../../../projects/spiderly/src/lib/components/auth/login/login.component.html","../../../projects/spiderly/src/lib/components/card-skeleton/card-skeleton.component.ts","../../../projects/spiderly/src/lib/components/card-skeleton/card-skeleton.component.html","../../../projects/spiderly/src/lib/components/footer/footer.component.ts","../../../projects/spiderly/src/lib/components/footer/footer.component.html","../../../projects/spiderly/src/lib/components/index-card/index-card.component.ts","../../../projects/spiderly/src/lib/components/index-card/index-card.component.html","../../../projects/spiderly/src/lib/components/info-card/info-card.component.ts","../../../projects/spiderly/src/lib/components/info-card/info-card.component.html","../../../projects/spiderly/src/lib/entities/init-top-bar-data.ts","../../../projects/spiderly/src/lib/services/app-layout.service.base.ts","../../../projects/spiderly/src/lib/components/layout/sidebar/sidebar-menu.service.ts","../../../projects/spiderly/src/lib/components/layout/sidebar/menuitem.component.ts","../../../projects/spiderly/src/lib/components/layout/sidebar/menuitem.component.html","../../../projects/spiderly/src/lib/components/layout/sidebar/sidebar-menu.component.ts","../../../projects/spiderly/src/lib/components/layout/sidebar/sidebar-menu.component.html","../../../projects/spiderly/src/lib/components/layout/sidebar/sidebar.component.ts","../../../projects/spiderly/src/lib/components/layout/sidebar/sidebar.component.html","../../../projects/spiderly/src/lib/components/layout/profile-avatar/profile-avatar.component.ts","../../../projects/spiderly/src/lib/components/layout/profile-avatar/profile-avatar.component.html","../../../projects/spiderly/src/lib/components/layout/sidemenu-topbar/sidemenu-topbar.component.ts","../../../projects/spiderly/src/lib/components/layout/sidemenu-topbar/sidemenu-topbar.component.html","../../../projects/spiderly/src/lib/components/layout/topbar/topbar.component.ts","../../../projects/spiderly/src/lib/components/layout/topbar/topbar.component.html","../../../projects/spiderly/src/lib/components/layout/layout.component.ts","../../../projects/spiderly/src/lib/components/layout/layout.component.html","../../../projects/spiderly/src/lib/components/not-found/not-found.component.ts","../../../projects/spiderly/src/lib/components/not-found/not-found.component.html","../../../projects/spiderly/src/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.ts","../../../projects/spiderly/src/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.html","../../../projects/spiderly/src/lib/enums/match-mode-enum-codes.ts","../../../projects/spiderly/src/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.ts","../../../projects/spiderly/src/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.html","../../../projects/spiderly/src/lib/components/spiderly-data-table/spiderly-data-table.component.ts","../../../projects/spiderly/src/lib/components/spiderly-data-table/spiderly-data-table.component.html","../../../projects/spiderly/src/lib/components/spiderly-data-view/spiderly-data-view.component.ts","../../../projects/spiderly/src/lib/components/spiderly-data-view/spiderly-data-view.component.html","../../../projects/spiderly/src/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.ts","../../../projects/spiderly/src/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.html","../../../projects/spiderly/src/lib/entities/codebook.ts","../../../projects/spiderly/src/lib/entities/filter-sort-meta.ts","../../../projects/spiderly/src/lib/entities/filter.ts","../../../projects/spiderly/src/lib/entities/filter-rule.ts","../../../projects/spiderly/src/lib/entities/is-authorized-for-save-event.ts","../../../projects/spiderly/src/lib/entities/last-menu-icon-index-clicked.ts","../../../projects/spiderly/src/lib/entities/lazy-load-selected-ids-result.ts","../../../projects/spiderly/src/lib/entities/menuchangeevent.ts","../../../projects/spiderly/src/lib/entities/namebook.ts","../../../projects/spiderly/src/lib/entities/paginated-result.ts","../../../projects/spiderly/src/lib/entities/primeng-option.ts","../../../projects/spiderly/src/lib/entities/simple-save-result.ts","../../../projects/spiderly/src/lib/enums/security-enums.ts","../../../projects/spiderly/src/lib/enums/verification-type-codes.ts","../../../projects/spiderly/src/lib/guards/auth.guard.ts","../../../projects/spiderly/src/lib/guards/not-auth.guard.ts","../../../projects/spiderly/src/lib/handlers/spiderly-error-handler.ts","../../../projects/spiderly/src/lib/interceptors/http-loading.interceptor.ts","../../../projects/spiderly/src/lib/interceptors/json-parser.interceptor.ts","../../../projects/spiderly/src/lib/interceptors/jwt.interceptor.ts","../../../projects/spiderly/src/lib/interceptors/unauthorized.interceptor.ts","../../../projects/spiderly/src/lib/services/app-initializer.ts","../../../projects/spiderly/src/lib/services/spiderly-transloco-loader.ts","../../../projects/spiderly/src/lib/directives/template-type.directive.ts","../../../projects/spiderly/src/public-api.ts","../../../projects/spiderly/src/spiderly.ts"],"sourcesContent":["/**\n * Machine-readable error codes returned in `ApiErrorDTO.errorCode`.\n * Mirror of Spiderly.Shared.DTO.ApiErrorCodes — keep in sync.\n */\nexport const ApiErrorCodes = {\n  InvalidToken: 'invalid_token',\n  ValidationFailed: 'validation_failed',\n  UniqueViolation: 'unique_violation',\n  ForeignKeyViolation: 'foreign_key_violation',\n  ConcurrencyConflict: 'concurrency_conflict',\n} as const;\n\nexport type ApiErrorCode = (typeof ApiErrorCodes)[keyof typeof ApiErrorCodes];\n","import { Component, Input } from '@angular/core';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { SpiderlyFormControl } from '../components/spiderly-form-control/spiderly-form-control';\n\n@Component({\n  selector: 'base-control',\n  template: '',\n  styles: [],\n  standalone: false,\n})\nexport class BaseControl {\n  @Input() control: SpiderlyFormControl<any>; // If you name it formControl: https://stackoverflow.com/a/54755671/21209982\n  @Input() disabled: boolean = false;\n  @Input() showLabel: boolean = true;\n  @Input() showRequired: boolean = true;\n  @Input() label: string = null; // NgModel/Want custom translation\n  @Input() controlValid: boolean = true; // NgModel\n  @Input() placeholder: string = '';\n  @Input() showTooltip: boolean = false;\n  @Input() tooltipText: string = null;\n  @Input() tooltipIcon: string = 'pi pi-info-circle';\n  constructor(protected translocoService: TranslocoService) {}\n\n  ngOnInit() {\n    if (this.control != null && this.disabled == true) this.control.disable();\n  }\n\n  ngAfterViewInit() {}\n\n  getTranslatedLabel(): string {\n    return this.label ?? this.control.labelForDisplay;\n  }\n\n  getValidationErrrorMessages() {\n    if (this.control?.errors && this.control?.dirty) {\n      // It should always be one error message for single form control,\n      // also i don't need to reassign it to null because it will be shown only when control.valid == false\n      return this.control.errors['_'];\n    }\n\n    return null;\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { BaseControl } from './base-control';\nimport { PrimengOption } from '../entities/primeng-option';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { Namebook } from '../entities/namebook';\n\n@Component({\n  selector: 'base-dropdown-control',\n  template: '',\n  styles: [],\n  standalone: false,\n})\nexport class BaseDropdownControl extends BaseControl {\n  @Input() options: Namebook[];\n  @Input() showAddon: boolean = false;\n  @Input() addonIcon: string = 'pi pi-ellipsis-h';\n  @Input() override placeholder: string =\n    this.translocoService.translate('SelectFromTheList');\n  @Output() onButtonClick: EventEmitter<null> = new EventEmitter();\n\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  dropdownMarkAsDirty() {\n    this.control.markAsDirty();\n  }\n\n  addonClick() {\n    this.onButtonClick.next(null);\n  }\n}\n","import { Component, EventEmitter, Output } from '@angular/core';\nimport { AutoCompleteCompleteEvent } from 'primeng/autocomplete';\nimport { BaseDropdownControl } from './base-dropdown-control';\n\n@Component({\n  selector: 'base-autocomplete-control',\n  template: '',\n  styles: [],\n  standalone: false,\n})\nexport class BaseAutocompleteControl extends BaseDropdownControl {\n  @Output() onTextInput: EventEmitter<AutoCompleteCompleteEvent> =\n    new EventEmitter();\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'required',\n  templateUrl: './required.component.html',\n  styles: [],\n  standalone: true,\n})\nexport class RequiredComponent {\n  constructor() {}\n}\n","<span style=\"color: red; margin-left: 4px\">*</span>\n","import {\n  FormArray,\n  FormControl,\n  FormControlOptions,\n  FormGroup,\n  ValidatorFn,\n} from '@angular/forms';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { MenuItem } from 'primeng/api';\nimport { Observable } from 'rxjs';\nimport { SchemaAwareConstructor } from '../../entities/base-entity';\nimport { Namebook } from '../../entities/namebook';\nimport { BaseFormService } from '../../services/base-form.service';\nimport { BaseEntity } from './../../entities/base-entity';\n\nexport interface SpiderlyValidatorFn extends ValidatorFn {\n  hasNotEmptyRule?: boolean;\n}\n\n// It's made like generic type because of <number>, <string> etc. not to put class like User.\nexport class SpiderlyFormControl<T = any> extends FormControl<T> {\n  /**\n   * Control name stored in label because it was easier than really accessing the FormControl's name\n   */\n  public label: string;\n  /**\n   * Translated label\n   */\n  public labelForDisplay: string;\n  public required: boolean;\n  public parentClassName: string;\n  public type: string; // number, Date, string, Namebook[], number[]...\n  private _spiderlyValidator: SpiderlyValidatorFn | null;\n\n  constructor(\n    value: any,\n    opts: FormControlOptions = null,\n    required: boolean = false,\n  ) {\n    opts = opts ?? { updateOn: 'blur' };\n    super(value, opts);\n    this.required = required;\n  }\n\n  override getRawValue(): T {\n    // Doing this because .value gets only not disabled values\n    return super.getRawValue() as T;\n  }\n\n  public override get validator(): SpiderlyValidatorFn | null {\n    return this._spiderlyValidator;\n  }\n\n  public override set validator(validator: SpiderlyValidatorFn | null) {\n    this._spiderlyValidator = validator;\n    this.setValidators(validator);\n  }\n}\n\ntype SpiderlyControlsOfType<TValue> = {\n  [P in keyof TValue]: TValue[P] extends (infer U)[]\n    ? U extends Namebook | string | number | Date | boolean\n      ? SpiderlyFormControl<TValue[P]>\n      : SpiderlyFormArray<U>\n    : TValue[P] extends Date\n      ? SpiderlyFormControl<TValue[P]>\n      : TValue[P] extends object\n        ? SpiderlyFormGroup<TValue[P]>\n        : SpiderlyFormControl<TValue[P]>;\n};\n\nexport class SpiderlyFormGroup<TValue = any> extends FormGroup {\n  declare controls: SpiderlyControlsOfType<TValue>;\n\n  constructor(controls: SpiderlyControlsOfType<TValue>) {\n    super(controls);\n  }\n\n  override getRawValue(): TValue {\n    // Doing this because .value gets only not disabled values\n    return super.getRawValue() as TValue;\n  }\n\n  public targetClass: SchemaAwareConstructor<TValue>;\n  public trackingId: string = crypto.randomUUID();\n  public name?: string; // Using for nested form groups\n  public saveObservableMethod?: (saveBody: any) => Observable<any>;\n  // TODO: Delete controlNamesFromHtml and add UIDoNotGenerate flag into ng entity generator, we shouldn't even add those into parentFormGroup\n  public controlNamesFromHtml?: string[] = [];\n\n  public getControl = <TKey extends Extract<keyof TValue, string>>(\n    formControlName: TKey,\n  ): SpiderlyControlsOfType<TValue>[TKey] => {\n    if (\n      this.controlNamesFromHtml.findIndex((x) => x === formControlName) === -1\n    )\n      this.controlNamesFromHtml.push(formControlName);\n\n    let formControl = this.controls[formControlName];\n    if (formControl == null) {\n      console.error(\n        `Spiderly: The property ${formControlName} in the form group ${this.targetClass.typeName} doesn't exist`,\n      );\n      return null;\n    }\n\n    return formControl;\n  };\n}\n\nexport class SpiderlyFormArray<\n  TValue extends BaseEntity = any,\n> extends FormArray {\n  constructor(\n    controls: SpiderlyControlsOfType<TValue>[],\n    private translocoService: TranslocoService,\n    private baseFormService: BaseFormService,\n  ) {\n    super(controls);\n  }\n\n  public label: string;\n  public labelForDisplay: string;\n  override value: TValue[]; // There is no getRawValue in FormArray\n  public required: boolean;\n  public formGroupInitialValues: Partial<TValue> = {};\n  public targetClass: SchemaAwareConstructor<TValue>;\n  public lastMenuIconIndexClicked: number;\n\n  public getCrudMenuForOrderedData = () => {\n    let crudMenuForOrderedData: MenuItem[] = [\n      {\n        label: this.translocoService.translate('Remove'),\n        icon: 'pi pi-minus',\n        command: () => {\n          this.baseFormService.removeFormControlFromTheFormArray(\n            this,\n            this.lastMenuIconIndexClicked,\n          );\n        },\n      },\n      {\n        label: this.translocoService.translate('AddAbove'),\n        icon: 'pi pi-arrow-up',\n        command: () => {\n          this.baseFormService.addNewFormGroupToFormArray(\n            this,\n            this.targetClass,\n            this.formGroupInitialValues,\n            this.lastMenuIconIndexClicked,\n          );\n        },\n      },\n      {\n        label: this.translocoService.translate('AddBelow'),\n        icon: 'pi pi-arrow-down',\n        command: () => {\n          this.baseFormService.addNewFormGroupToFormArray(\n            this,\n            this.targetClass,\n            this.formGroupInitialValues,\n            this.lastMenuIconIndexClicked + 1,\n          );\n        },\n      },\n    ];\n\n    return crudMenuForOrderedData;\n  };\n\n  public addNewFormGroup = (index: number) => {\n    this.baseFormService.addNewFormGroupToFormArray(\n      this,\n      this.targetClass,\n      this.formGroupInitialValues,\n      index,\n    );\n  };\n\n  public getFormGroups = () => {\n    return this.controls as SpiderlyFormGroup<TValue>[];\n  };\n\n  disableAllFormControls() {\n    this.controls.forEach((segmentationItemFormGroup: SpiderlyFormGroup) => {\n      Object.keys(segmentationItemFormGroup.controls).forEach((key) => {\n        segmentationItemFormGroup.controls[key].disable();\n      });\n    });\n  }\n\n  enableAllFormControls() {\n    this.controls.forEach((segmentationItemFormGroup: SpiderlyFormGroup) => {\n      Object.keys(segmentationItemFormGroup.controls).forEach((key) => {\n        segmentationItemFormGroup.controls[key].enable();\n      });\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { TranslocoService } from '@jsverse/transloco';\nimport {\n  SpiderlyFormArray,\n  SpiderlyFormControl,\n  SpiderlyValidatorFn,\n} from '../components/spiderly-form-control/spiderly-form-control';\nimport { ImageDimensionsValidationResult } from '../entities/image-dimensions-validation-result';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport abstract class ValidatorAbstractService {\n  constructor(protected translocoService: TranslocoService) {}\n\n  abstract setValidator(\n    formControl: SpiderlyFormControl,\n    className: string,\n  ): SpiderlyValidatorFn;\n\n  abstract setFormArrayValidator(\n    formArray: SpiderlyFormArray,\n    className: string,\n  ): void;\n\n  validateImageDimensions(\n    file: File,\n    imageWidth: number,\n    imageHeight: number,\n  ): Promise<ImageDimensionsValidationResult> {\n    return new Promise((resolve) => {\n      const img = new Image();\n      const objectUrl = URL.createObjectURL(file);\n\n      img.onload = () => {\n        URL.revokeObjectURL(objectUrl);\n        const width = img.width;\n        const height = img.height;\n        const errors: string[] = [];\n\n        if (imageWidth > 0 && width !== imageWidth) {\n          errors.push(\n            this.translocoService.translate('ImageWidthMustBeExact', {\n              0: imageWidth,\n              1: width,\n            }),\n          );\n        }\n\n        if (imageHeight > 0 && height !== imageHeight) {\n          errors.push(\n            this.translocoService.translate('ImageHeightMustBeExact', {\n              0: imageHeight,\n              1: height,\n            }),\n          );\n        }\n\n        resolve({ isValid: errors.length === 0, errors });\n      };\n\n      img.onerror = () => {\n        URL.revokeObjectURL(objectUrl);\n        resolve({ isValid: true, errors: [] });\n      };\n\n      img.src = objectUrl;\n    });\n  }\n\n  notEmpty = (control: SpiderlyFormControl): void => {\n    const validator: SpiderlyValidatorFn = (): ValidationErrors | null => {\n      const value = control.value;\n\n      const notEmptyRule =\n        typeof value !== 'undefined' && value !== null && value !== '';\n\n      const arrayValid = notEmptyRule;\n\n      return arrayValid\n        ? null\n        : { _: this.translocoService.translate('NotEmpty') };\n    };\n    validator.hasNotEmptyRule = true;\n    control.required = true;\n    control.validator = validator;\n    control.updateValueAndValidity();\n  };\n\n  /** Validates that a SpiderlyFormArray (collection of form controls/groups) is not empty. */\n  isFormArrayEmpty = (control: SpiderlyFormArray): void => {\n    const validator: SpiderlyValidatorFn = (): ValidationErrors | null => {\n      const value = control;\n\n      const notEmptyRule =\n        typeof value !== 'undefined' && value !== null && value.length !== 0;\n\n      const arrayValid = notEmptyRule;\n\n      return arrayValid\n        ? null\n        : {\n            _: this.translocoService.translate('ListCanNotBeEmpty', {\n              value: control.labelForDisplay,\n            }),\n          };\n    };\n    validator.hasNotEmptyRule = true;\n    control.required = true;\n    control.setValidators(validator);\n    control.updateValueAndValidity();\n  };\n\n  /** Validates that a SpiderlyFormControl holding an array value (e.g., multi-select dropdown) is not empty. */\n  isArrayEmpty = (control: SpiderlyFormControl): SpiderlyValidatorFn => {\n    const validator: SpiderlyValidatorFn = (): ValidationErrors | null => {\n      const value = control.value;\n\n      const notEmptyRule =\n        typeof value !== 'undefined' && value !== null && value.length !== 0;\n\n      const arrayValid = notEmptyRule;\n\n      return arrayValid\n        ? null\n        : { _: this.translocoService.translate('NotEmpty') };\n    };\n    validator.hasNotEmptyRule = true;\n    control.required = true;\n    return validator;\n  };\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport {\n  AutoCompleteCompleteEvent,\n  AutoCompleteModule,\n  AutoCompleteSelectEvent,\n} from 'primeng/autocomplete';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { ValidatorAbstractService } from '../../services/validator-abstract.service';\nimport { BaseAutocompleteControl } from '../base-autocomplete-control';\nimport { SpiderlyFormControl } from '../../components/spiderly-form-control/spiderly-form-control';\nimport { Namebook } from '../../entities/namebook';\n\n@Component({\n  selector: 'spiderly-autocomplete',\n  templateUrl: './spiderly-autocomplete.component.html',\n  imports: [\n    ReactiveFormsModule,\n    FormsModule,\n    AutoCompleteModule,\n    InputGroupAddonModule,\n    InputGroupModule,\n    CommonModule,\n    RequiredComponent,\n    TranslocoDirective,\n  ],\n})\nexport class SpiderlyAutocompleteComponent\n  extends BaseAutocompleteControl\n  implements OnInit\n{\n  @Input() appendTo: any = 'body';\n  @Input() showClear: boolean = true;\n  @Input() emptyMessage: string;\n  @Input() displayName: string; // Added because when we initialize the object options are null\n  helperFormControl = new SpiderlyFormControl<Namebook>(null, {\n    updateOn: 'change',\n  });\n\n  constructor(\n    protected override translocoService: TranslocoService,\n    private validatorService: ValidatorAbstractService,\n  ) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n\n    this.helperFormControl.label = this.control.label;\n    this.validatorService.setValidator(\n      this.helperFormControl,\n      this.control.parentClassName,\n    );\n\n    if (this.control.value != null)\n      this.helperFormControl.setValue({\n        displayName: this.displayName,\n        id: this.control.value,\n      });\n\n    if (this.emptyMessage == null) {\n      this.emptyMessage = this.translocoService.translate('EmptyMessage');\n    }\n  }\n\n  search(event: AutoCompleteCompleteEvent) {\n    this.onTextInput.next(event);\n  }\n\n  select(event: AutoCompleteSelectEvent) {\n    const selectedOption: Namebook = event.value;\n    this.control.setValue(selectedOption.id);\n    this.helperFormControl.setValue({\n      displayName: selectedOption.displayName,\n      id: selectedOption.id,\n    });\n  }\n\n  clear() {\n    this.control.setValue(null);\n    this.helperFormControl.setValue(null);\n  }\n\n  autocompleteMarkAsDirty() {\n    this.dropdownMarkAsDirty();\n    this.helperFormControl.markAsDirty();\n  }\n}\n","<ng-container *transloco=\"let t\">\n  <div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n    <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\n      <!-- By passing an empty string we remove the label entirely -->\n      <label>{{ getTranslatedLabel() }}</label>\n      <required *ngIf=\"control?.required && showRequired\"></required>\n    </div>\n\n    <!-- Don't support p-inputgroup -->\n    <p-autocomplete\n      *ngIf=\"control\"\n      [id]=\"label\"\n      [formControl]=\"helperFormControl\"\n      [placeholder]=\"placeholder\"\n      [suggestions]=\"options\"\n      (completeMethod)=\"search($event)\"\n      [forceSelection]=\"true\"\n      [dropdown]=\"false\"\n      [showClear]=\"showClear\"\n      (onHide)=\"autocompleteMarkAsDirty()\"\n      (onSelect)=\"select($event)\"\n      (onClear)=\"clear()\"\n      [completeOnFocus]=\"true\"\n      [fluid]=\"true\"\n      [style]=\"{ width: '100%' }\"\n      [appendTo]=\"appendTo\"\n      [emptyMessage]=\"emptyMessage\"\n      [lazy]=\"true\"\n      optionLabel=\"displayName\"\n    ></p-autocomplete>\n    <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n      {{ getValidationErrrorMessages() }}\n    </small>\n  </div>\n</ng-container>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { BaseControl } from '../base-control';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n  selector: 'spiderly-calendar',\n  templateUrl: './spiderly-calendar.component.html',\n  styles: [],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    DatePickerModule,\n    TooltipModule,\n    RequiredComponent,\n  ],\n})\nexport class SpiderlyCalendarComponent extends BaseControl implements OnInit {\n  @Input() showTime: boolean = false;\n\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n  }\n\n  setDate(event: Date) {}\n}\n","<div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n  <div\n    *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\"\n    style=\"display: flex; align-items: center\"\n  >\n    <div>\n      <label>{{ getTranslatedLabel() }}</label>\n      <required *ngIf=\"control?.required && showRequired\"></required>\n    </div>\n    <!-- tabindex=\"-1\": Makes the element focusable, but removes it from the tab order. -->\n    <i\n      *ngIf=\"showTooltip\"\n      class=\"{{ tooltipIcon }}\"\n      style=\"margin-left: 8px; cursor: pointer\"\n      [pTooltip]=\"tooltipText\"\n      tabindex=\"-1\"\n      tooltipEvent=\"focus\"\n    ></i>\n  </div>\n  <p-datepicker\n    *ngIf=\"control\"\n    [formControl]=\"control\"\n    (onBlur)=\"control.markAsDirty()\"\n    dateFormat=\"dd.mm.yy.\"\n    iconDisplay=\"input\"\n    [showIcon]=\"true\"\n    [showTime]=\"showTime\"\n    (onSelect)=\"setDate($event)\"\n    appendTo=\"body\"\n    [fluid]=\"true\"\n  />\n  <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n    {{ getValidationErrrorMessages() }}\n  </small>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BaseControl } from '../base-control';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { CheckboxChangeEvent, CheckboxModule } from 'primeng/checkbox';\n\n@Component({\n  selector: 'spiderly-checkbox',\n  templateUrl: './spiderly-checkbox.component.html',\n  styleUrl: './spiderly-checkbox.component.scss',\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    CheckboxModule,\n    RequiredComponent,\n  ],\n})\nexport class SpiderlyCheckboxComponent extends BaseControl implements OnInit {\n  @Input() fakeLabel = true;\n  @Input() initializeToFalse = false;\n  @Input() inlineLabel = false;\n  @Output() onChange = new EventEmitter<CheckboxChangeEvent>();\n\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    if (this.initializeToFalse == true) this.control.setValue(false);\n\n    super.ngOnInit();\n  }\n\n  change = (event: CheckboxChangeEvent) => {\n    this.onChange.next(event);\n  };\n}\n","<div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n  <div\n    *ngIf=\"\n      inlineLabel === false &&\n      getTranslatedLabel() != '' &&\n      getTranslatedLabel() != null\n    \"\n  >\n    <label>{{ getTranslatedLabel() }}</label>\n    <required *ngIf=\"control?.required && showRequired\"></required>\n  </div>\n  <div style=\"margin-top: 0.5rem; position: relative\">\n    <!-- The margin-top is intentional: it vertically aligns the checkbox with other input controls that have greater height. -->\n    <p-checkbox\n      *ngIf=\"control\"\n      [formControl]=\"control\"\n      [value]=\"inlineLabel ? label : null\"\n      [id]=\"label\"\n      [binary]=\"true\"\n      (onChange)=\"change($event)\"\n    />\n  </div>\n  <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n    {{ getValidationErrrorMessages() }}\n  </small>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { BaseControl } from '../base-control';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { ColorPickerModule } from 'primeng/colorpicker';\nimport { InputTextModule } from 'primeng/inputtext';\n\n@Component({\n  selector: 'spiderly-colorpicker',\n  templateUrl: './spiderly-colorpicker.component.html',\n  styles: [],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    ColorPickerModule,\n    InputTextModule,\n    RequiredComponent,\n  ],\n})\nexport class SpiderlyColorPickerComponent\n  extends BaseControl\n  implements OnInit\n{\n  @Input() showInputTextField: boolean = true;\n\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    this.control.valueChanges.subscribe((value) => {\n      this.control.setValue(value, { emitEvent: false }); // Preventing infinite loop\n    });\n\n    if (this.control.value == null)\n      this.placeholder = this.translocoService.translate(\n        'ColorPickerPlaceholder',\n      );\n\n    super.ngOnInit();\n  }\n}\n","<!-- Can't put (onBlur) in this control -->\n\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n  <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\n    <label>{{ getTranslatedLabel() }}</label>\n    <required *ngIf=\"control?.required && showRequired\"></required>\n  </div>\n  <div style=\"display: flex; gap: 10px\">\n    <input\n      *ngIf=\"control && showInputTextField\"\n      pInputText\n      [placeholder]=\"placeholder\"\n      [formControl]=\"control\"\n      [id]=\"control.label\"\n      (blur)=\"control.markAsDirty()\"\n      [fluid]=\"true\"\n    />\n    <p-colorpicker\n      *ngIf=\"control\"\n      [formControl]=\"control\"\n      [id]=\"control.label\"\n      (blur)=\"control.markAsDirty()\"\n      appendTo=\"body\"\n    ></p-colorpicker>\n  </div>\n  <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n    {{ getValidationErrrorMessages() }}\n  </small>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport {\n  AutoCompleteCompleteEvent,\n  AutoCompleteModule,\n} from 'primeng/autocomplete';\nimport { BaseAutocompleteControl } from '../base-autocomplete-control';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\n\n@Component({\n  selector: 'spiderly-multiautocomplete',\n  templateUrl: './spiderly-multiautocomplete.component.html',\n  imports: [\n    ReactiveFormsModule,\n    FormsModule,\n    AutoCompleteModule,\n    CommonModule,\n    RequiredComponent,\n    TranslocoDirective,\n  ],\n})\nexport class SpiderlyMultiAutocompleteComponent\n  extends BaseAutocompleteControl\n  implements OnInit\n{\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n  }\n\n  search(event: AutoCompleteCompleteEvent) {\n    this.onTextInput.next(event);\n  }\n}\n","<ng-container *transloco=\"let t\">\n  <div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n    <div>\n      <label>{{ getTranslatedLabel() }}</label>\n      <required *ngIf=\"control?.required && showRequired\"></required>\n    </div>\n\n    <!-- Don't support p-inputgroup -->\n    <!-- Showing label fix: https://github.com/primefaces/primeng/issues/17332#issuecomment-2922861294 -->\n    <p-autocomplete\n      *ngIf=\"control\"\n      [id]=\"label\"\n      [formControl]=\"control\"\n      [placeholder]=\"placeholder\"\n      [suggestions]=\"options\"\n      (completeMethod)=\"search($event)\"\n      [forceSelection]=\"true\"\n      [multiple]=\"true\"\n      [dropdown]=\"false\"\n      [showClear]=\"true\"\n      (onHide)=\"dropdownMarkAsDirty()\"\n      [completeOnFocus]=\"true\"\n      dropdownIcon=\"pi pi-plus\"\n      [fluid]=\"true\"\n      [style]=\"{ width: '100%' }\"\n      appendTo=\"body\"\n      optionLabel=\"displayName\"\n      dataKey=\"id\"\n    >\n    </p-autocomplete>\n    <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n      {{ getValidationErrrorMessages() }}\n    </small>\n  </div>\n</ng-container>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { BaseControl } from '../base-control';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { PasswordModule } from 'primeng/password';\n\n@Component({\n  selector: 'spiderly-password',\n  templateUrl: './spiderly-password.component.html',\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    PasswordModule,\n    RequiredComponent,\n  ],\n})\nexport class SpiderlyPasswordComponent extends BaseControl implements OnInit {\n  @Input() showPasswordStrength: boolean = false;\n\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n  }\n}\n","<div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n  <div>\n    <label>{{ getTranslatedLabel() }}</label>\n    <required *ngIf=\"control?.required && showRequired\"></required>\n  </div>\n  <p-password\n    *ngIf=\"control\"\n    [formControl]=\"control\"\n    [id]=\"control?.label\"\n    [toggleMask]=\"true\"\n    [feedback]=\"showPasswordStrength\"\n    (onBlur)=\"control?.markAsDirty()\"\n    [style]=\"{ width: '100%' }\"\n    [inputStyle]=\"{ width: '100%' }\"\n  />\n  <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n    {{ getValidationErrrorMessages() }}\n  </small>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BaseControl } from '../base-control';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { InputTextModule } from 'primeng/inputtext';\n\n@Component({\n  selector: 'spiderly-textbox',\n  templateUrl: './spiderly-textbox.component.html',\n  styleUrl: '../base-controls.scss',\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    InputTextModule,\n    RequiredComponent,\n  ],\n})\nexport class SpiderlyTextboxComponent extends BaseControl implements OnInit {\n  @Input() showButton: boolean = false;\n  @Input() buttonIcon: string;\n  @Output() onButtonClick = new EventEmitter();\n\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n  }\n\n  buttonClick() {\n    this.onButtonClick.next(null);\n  }\n}\n","<!-- Can't put (onBlur) in this control -->\n\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n  <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\n    <label>{{ getTranslatedLabel() }}</label>\n    <required *ngIf=\"control?.required && showRequired\"></required>\n  </div>\n  <div class=\"spiderly-inputgroup\">\n    <input\n      *ngIf=\"control\"\n      pInputText\n      [formControl]=\"control\"\n      [id]=\"control.label\"\n      (blur)=\"control.markAsDirty()\"\n      [placeholder]=\"placeholder\"\n      [fluid]=\"true\"\n    />\n    <span\n      *ngIf=\"showButton\"\n      (click)=\"buttonClick()\"\n      class=\"spiderly-inputgroup-addon\"\n    >\n      <i class=\"{{ buttonIcon }}\"></i>\n    </span>\n  </div>\n  <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n    {{ getValidationErrrorMessages() }}\n  </small>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { BaseDropdownControl } from '../base-dropdown-control';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { MultiSelectModule } from 'primeng/multiselect';\n\n@Component({\n  selector: 'spiderly-multiselect',\n  templateUrl: './spiderly-multiselect.component.html',\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    MultiSelectModule,\n    RequiredComponent,\n  ],\n})\nexport class SpiderlyMultiSelectComponent\n  extends BaseDropdownControl\n  implements OnInit\n{\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n  }\n}\n","<div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n  <div>\n    <label>{{ getTranslatedLabel() }}</label>\n    <required *ngIf=\"control?.required && showRequired\"></required>\n  </div>\n  <p-multiSelect\n    *ngIf=\"control\"\n    [id]=\"label\"\n    [formControl]=\"control\"\n    [options]=\"options\"\n    optionLabel=\"displayName\"\n    optionValue=\"id\"\n    display=\"chip\"\n    [maxSelectedLabels]=\"20\"\n    [placeholder]=\"placeholder\"\n    [fluid]=\"true\"\n    appendTo=\"body\"\n  />\n  <!-- [virtualScroll]=\"true\" FT: I think that this is not doing anything, check -->\n  <!-- (onFilter)=\"search($event)\" FT: While they don't implement lazy load like here: https://github.com/yelhouti/primeng/blob/8.0.0-rc2/src/app/components/multiselect/multiselect.ts\n    we need to use this and dropdown control only on the client -->\n  <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n    {{ getValidationErrrorMessages() }}\n  </small>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { BaseControl } from '../base-control';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { TextareaModule } from 'primeng/textarea';\n\n@Component({\n  selector: 'spiderly-textarea',\n  templateUrl: './spiderly-textarea.component.html',\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    TextareaModule,\n    RequiredComponent,\n  ],\n})\nexport class SpiderlyTextareaComponent extends BaseControl implements OnInit {\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n  }\n}\n","<!-- Can't put (onBlur) in this control -->\n\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n  <div>\n    <label>{{ getTranslatedLabel() }}</label>\n    <required *ngIf=\"control?.required && showRequired\"></required>\n  </div>\n  <textarea\n    *ngIf=\"control\"\n    pTextarea\n    [formControl]=\"control\"\n    [id]=\"control.label\"\n    (blur)=\"control.markAsDirty()\"\n    [autoResize]=\"true\"\n    [class]=\"control.disabled ? 'disabled' : ''\"\n  ></textarea>\n  <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n    {{ getValidationErrrorMessages() }}\n  </small>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { BaseControl } from '../base-control';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { InputNumberModule } from 'primeng/inputnumber';\n\n@Component({\n  selector: 'spiderly-number',\n  templateUrl: './spiderly-number.component.html',\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    InputNumberModule,\n    RequiredComponent,\n  ],\n})\nexport class SpiderlyNumberComponent extends BaseControl implements OnInit {\n  @Input() prefix: string;\n  @Input() showButtons: boolean = true;\n  @Input() decimal: boolean;\n  @Input() maxFractionDigits: number = 0;\n\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n  }\n}\n","<div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n  <div *ngIf=\"showLabel\">\n    <label>{{ getTranslatedLabel() }}</label>\n    <required *ngIf=\"control?.required && showRequired\"></required>\n  </div>\n  <p-inputNumber\n    *ngIf=\"control\"\n    [formControl]=\"control\"\n    [id]=\"control.label\"\n    (onBlur)=\"control.markAsDirty()\"\n    [prefix]=\"prefix\"\n    [style]=\"{ width: '100%' }\"\n    [inputStyle]=\"{ width: '100%' }\"\n    [showButtons]=\"showButtons\"\n    buttonLayout=\"horizontal\"\n    [maxFractionDigits]=\"maxFractionDigits\"\n  />\n  <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n    {{ getValidationErrrorMessages() }}\n  </small>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { BaseDropdownControl } from '../base-dropdown-control';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { DropdownChangeEvent } from 'primeng/dropdown';\nimport { SelectModule } from 'primeng/select';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n  selector: 'spiderly-dropdown',\n  templateUrl: './spiderly-dropdown.component.html',\n  styles: [],\n  imports: [\n    ReactiveFormsModule,\n    FormsModule,\n    SelectModule,\n    TooltipModule,\n    CommonModule,\n    RequiredComponent,\n  ],\n})\nexport class SpiderlyDropdownComponent\n  extends BaseDropdownControl\n  implements OnInit\n{\n  @Input() isBooleanPicker: boolean = false;\n  @Output() onChange = new EventEmitter<DropdownChangeEvent>();\n\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    if (this.isBooleanPicker) {\n      this.options = [\n        { displayName: this.translocoService.translate('True'), id: true },\n        { displayName: this.translocoService.translate('False'), id: false },\n        { displayName: this.translocoService.translate('Empty'), id: null },\n      ];\n    }\n\n    super.ngOnInit();\n  }\n\n  change(event: DropdownChangeEvent) {\n    this.onChange.next(event);\n  }\n}\n","<div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n  <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\n    <label>{{ getTranslatedLabel() }}</label>\n    <required *ngIf=\"control?.required && showRequired\"></required>\n    <!-- tabindex=\"-1\": Makes the element focusable, but removes it from the tab order. -->\n    <i\n      *ngIf=\"showTooltip\"\n      class=\"{{ tooltipIcon }}\"\n      style=\"margin-left: 5px; cursor: pointer\"\n      [pTooltip]=\"tooltipText\"\n      tabindex=\"-1\"\n      tooltipEvent=\"focus\"\n    ></i>\n  </div>\n\n  <!-- Don't support p-inputgroup -->\n  <p-select\n    *ngIf=\"control\"\n    [id]=\"label\"\n    [formControl]=\"control\"\n    [placeholder]=\"placeholder\"\n    [options]=\"options\"\n    optionLabel=\"displayName\"\n    optionValue=\"id\"\n    [showClear]=\"true\"\n    (onHide)=\"dropdownMarkAsDirty()\"\n    (onChange)=\"change($event)\"\n    [fluid]=\"true\"\n    appendTo=\"body\"\n  />\n  <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n    {{ getValidationErrrorMessages() }}\n  </small>\n</div>\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { BaseControl } from '../base-control';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { Editor, EditorModule, EditorInitEvent } from 'primeng/editor';\nimport { Observable } from 'rxjs';\n\n@Component({\n  selector: 'spiderly-editor',\n  templateUrl: './spiderly-editor.component.html',\n  styles: [],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    EditorModule,\n    RequiredComponent,\n  ],\n})\nexport class SpiderlyEditorComponent extends BaseControl implements OnInit {\n  @ViewChild(Editor) editor: Editor;\n\n  @Input() uploadImageMethod: (formData: FormData) => Observable<string>;\n  @Input() objectId: number = 0;\n\n  constructor(protected override translocoService: TranslocoService) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n  }\n\n  onEditorInit(event: EditorInitEvent) {\n    const quill = event.editor;\n\n    if (this.uploadImageMethod) {\n      const toolbar = quill.getModule('toolbar');\n      toolbar.addHandler('image', () => this.imageHandler(quill));\n    }\n  }\n\n  private imageHandler(quill: any) {\n    const input = document.createElement('input');\n    input.setAttribute('type', 'file');\n    input.setAttribute('accept', 'image/*');\n    input.click();\n\n    input.onchange = async () => {\n      const file = input.files[0];\n      if (file) {\n        const formData = new FormData();\n        formData.append('file', file, `${this.objectId}-${file.name}`);\n\n        this.uploadImageMethod(formData).subscribe((imageUrl: string) => {\n          const range = quill.getSelection(true);\n          quill.insertEmbed(range.index, 'image', imageUrl);\n          quill.setSelection(range.index + 1);\n        });\n      }\n    };\n  }\n\n  onClick() {\n    let editableArea: HTMLElement =\n      this.editor.el.nativeElement.querySelector('.ql-editor');\n\n    editableArea.onblur = () => {\n      this.control.markAsDirty();\n    };\n  }\n}\n","<!-- Can't put (onBlur) in this control -->\n\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem; padding: 0 1px\">\n  <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\n    <label>{{ getTranslatedLabel() }}</label>\n    <required *ngIf=\"control?.required && showRequired\"></required>\n  </div>\n\n  <!-- Disable doesn't work on this control -->\n  <p-editor\n    *ngIf=\"control\"\n    [formControl]=\"control\"\n    [readonly]=\"control.disabled\"\n    [class]=\"control.invalid && control.dirty ? 'control-error-border' : ''\"\n    [id]=\"control.label\"\n    [placeholder]=\"placeholder\"\n    (click)=\"onClick()\"\n    (onInit)=\"onEditorInit($event)\"\n    [style]=\"{ height: '320px' }\"\n  ></p-editor>\n  <small *ngIf=\"control?.errors && control?.dirty\" class=\"spiderly-error-message\">\n    {{ getValidationErrrorMessages() }}\n  </small>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { Subject, Subscription, throttleTime } from 'rxjs';\nimport { Router } from '@angular/router';\n\n@Component({\n  selector: 'spiderly-button-base',\n  template: ``,\n  styles: [],\n  imports: [CommonModule, ButtonModule, SplitButtonModule],\n})\nexport class SpiderlyButtonBaseComponent {\n  @Input() icon: string;\n  @Input() label: string;\n  @Input() outlined: boolean = false;\n  @Input() rounded: boolean = false;\n  @Input() styleClass: string;\n  @Input() routerLink: string;\n  @Input() style: { [klass: string]: any };\n  @Input() class: string;\n  @Input() severity:\n    | 'success'\n    | 'info'\n    | 'warn'\n    | 'danger'\n    | 'help'\n    | 'primary'\n    | 'secondary'\n    | 'contrast'\n    | null\n    | undefined;\n  @Input() size: 'small' | 'large' | undefined;\n  @Input() disabled: boolean = false;\n\n  @Output() onClick = new EventEmitter<Event>();\n  private clickSubject = new Subject<Event>(); // Internal subject to handle click events.\n  private subscription: Subscription;\n\n  constructor(private router: Router) {}\n\n  ngOnInit() {\n    this.subscription = this.clickSubject\n      .pipe(throttleTime(500))\n      .subscribe((event: Event) => this.onClick.emit(event));\n  }\n\n  handleClick = (event: Event) => {\n    event.preventDefault();\n    event.stopPropagation();\n    if (this.routerLink !== undefined) {\n      this.router.navigate([this.routerLink]);\n    } else {\n      this.clickSubject.next(event);\n    }\n  };\n\n  ngOnDestroy() {\n    this.subscription.unsubscribe();\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { SpiderlyButtonBaseComponent } from '../spiderly-button-base/spiderly-button-base';\n\n@Component({\n  selector: 'spiderly-button',\n  templateUrl: './spiderly-button.component.html',\n  styles: [],\n  imports: [CommonModule, ButtonModule, SplitButtonModule],\n})\nexport class SpiderlyButtonComponent extends SpiderlyButtonBaseComponent {\n  // constructor() {\n  //   super();\n\n  // }\n  @Input() type: 'button' | 'submit' | 'reset' = 'button';\n}\n","<p-button\n  (onClick)=\"handleClick($event)\"\n  [label]=\"label\"\n  [icon]=\"icon\"\n  [outlined]=\"outlined\"\n  [styleClass]=\"styleClass\"\n  [severity]=\"severity\"\n  [rounded]=\"rounded\"\n  [style]=\"style\"\n  [class]=\"class\"\n  [disabled]=\"disabled\"\n  [size]=\"size\"\n  [type]=\"type\"\n>\n  <ng-content></ng-content>\n</p-button>\n","interface PropertySchema {\n  type: string; // Use a string or an enum to represent the type (e.g., 'string', 'number', 'Date')\n  nestedConstructor?: SchemaAwareConstructor<any>;\n  isSaveBodyMainDTO?: boolean;\n  // Add other metadata you might need (e.g., isRequired, minLength, etc.)\n}\n\nexport interface ClassSchema {\n  [propertyName: string]: PropertySchema;\n}\n\n// A type that represents a class constructor with a static 'schema' property\nexport type SchemaAwareConstructor<T> = {\n  new (...args: any[]): T;\n  readonly schema: ClassSchema; // The static property holding the schema\n  readonly typeName: string; // 'typeName' can't be named 'name' because of the conflict with the Function.name\n};\n\nexport class BaseEntity {}\n","import { HttpResponse } from '@angular/common/http';\nimport * as FileSaver from 'file-saver';\nimport mime from 'mime';\nimport 'reflect-metadata';\nimport { map, Observable } from 'rxjs';\nimport {\n  Action,\n  Column,\n} from '../components/spiderly-data-table/spiderly-data-table.component';\nimport { SpiderlyTab } from '../components/spiderly-panels/panel-header/panel-header.component';\nimport { Codebook } from '../entities/codebook';\nimport { Filter } from '../entities/filter';\nimport { Namebook } from '../entities/namebook';\nimport { PrimengOption } from '../entities/primeng-option';\n\n// Helper function for PrecisionScale validation (to be added in the TypeScript output):\nexport function validatePrecisionScale(\n  value: any,\n  precision: number,\n  scale: number,\n  ignoreTrailingZeros: boolean,\n): boolean {\n  if (typeof value !== 'number') return false;\n  const [integerPart, decimalPart] = value.toString().split('.');\n  if (integerPart.length > precision - scale) return false;\n  if (decimalPart && decimalPart.length > scale) return false;\n  if (\n    !ignoreTrailingZeros &&\n    decimalPart &&\n    decimalPart.replace(/0+$/, '').length > scale\n  )\n    return false;\n  return true;\n}\n\nexport function getMimeTypeForFileName(fileName: string): string {\n  return mime.getType(fileName) ?? 'application/octet-stream';\n}\n\nexport function adjustColor(color: string, percent: number): string {\n  if (!/^#([0-9A-F]{3}){1,2}$/i.test(color)) {\n    console.error('Invalid hex color format');\n  }\n\n  let r: number, g: number, b: number;\n  if (color.length === 7) {\n    r = parseInt(color.slice(1, 3), 16);\n    g = parseInt(color.slice(3, 5), 16);\n    b = parseInt(color.slice(5, 7), 16);\n  } else {\n    r = parseInt(color[1] + color[1], 16);\n    g = parseInt(color[2] + color[2], 16);\n    b = parseInt(color[3] + color[3], 16);\n  }\n\n  const adjust = (value: number, percent: number): number => {\n    const amount = (percent / 100) * 255;\n    const newValue = Math.min(Math.max(value + amount, 0), 255);\n    return Math.round(newValue);\n  };\n\n  r = adjust(r, percent);\n  g = adjust(g, percent);\n  b = adjust(b, percent);\n\n  const toHex = (value: number): string => {\n    const hex = value.toString(16).padStart(2, '0');\n    return hex;\n  };\n\n  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\nexport function getHtmlImgDisplayString64(base64String: string) {\n  if (base64String == null) return null;\n\n  const [header, base64Content] = base64String.split(';base64,');\n  const fileName = header.split('=')[1];\n  const mimeType = getMimeTypeForFileName(fileName);\n  return `data:${mimeType};base64, ${base64Content}`;\n}\n\nexport function nameof<TObject>(obj: TObject, key: keyof TObject): string;\nexport function nameof<TObject>(key: keyof TObject): string;\nexport function nameof(key1: any, key2?: any): any {\n  return key2 ?? key1;\n}\nexport function nameOf<TObject extends { name: S }, S extends string>(\n  funcOrClass: TObject,\n): S {\n  return funcOrClass.name;\n}\n\nexport function getParentUrl(currentUrl: string) {\n  const urlSegments = currentUrl.split('/');\n  urlSegments.pop();\n  const parentUrl = urlSegments.join('/');\n  return parentUrl;\n}\n\n// export function getMonth(number: number): string {\n//   const months: string[] = [\n//     \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n//     \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n//   ];\n\n//   if (number < 1 || number > 12) {\n//     throw new Error(\"Invalid month number. It should be between 1 and 12.\");\n//   }\n\n//   return months[number - 1];\n// }\n\nexport function getMonth(numberOfTheMonth: number): string {\n  const meseci: string[] = [\n    'Januar',\n    'Februar',\n    'Mart',\n    'April',\n    'Maj',\n    'Jun',\n    'Jul',\n    'Avgust',\n    'Septembar',\n    'Oktobar',\n    'Novembar',\n    'Decembar',\n  ];\n\n  if (numberOfTheMonth < 1 || numberOfTheMonth > 12) {\n    console.error('Nevažeći broj meseca. Broj treba biti između 1 i 12.');\n  }\n\n  return meseci[numberOfTheMonth - 1];\n}\n\nexport function singleOrDefault<T>(\n  array: T[],\n  predicate: (item: T) => boolean,\n): T | undefined {\n  const filtered = array.filter(predicate);\n  if (filtered.length > 1) {\n    throw new Error('Sequence contains more than one matching element.');\n  }\n  return filtered[0];\n}\n\nexport function pushAction(cols: Column[], action: Action) {\n  const actionsColumn = singleOrDefault(cols, (x) => x.actions != null);\n  if (actionsColumn) {\n    actionsColumn.actions = [...actionsColumn.actions, action];\n  }\n}\n\nexport function deleteAction(cols: Column[], actionField: string): void {\n  const actionsColumn = singleOrDefault(cols, (x) => x.actions != null);\n\n  if (actionsColumn && actionsColumn.actions) {\n    const index = actionsColumn.actions.findIndex(\n      (a) => a.field === actionField,\n    );\n    if (index !== -1) {\n      actionsColumn.actions.splice(index, 1);\n    }\n  }\n}\n\nexport function getFileNameFromContentDisposition(\n  resp: HttpResponse<Blob>,\n  defaultName: string,\n): string {\n  let fileName;\n  if (resp && resp.headers && resp.headers.get('Content-Disposition')) {\n    let val = resp.headers.get('Content-Disposition');\n    let start = val.indexOf('filename=');\n    if (start != -1) {\n      let end = val.indexOf(';', start);\n      fileName =\n        end != -1 ? val.substring(start + 9, end) : val.substring(start + 9);\n      fileName = fileName.split('\"').join('');\n    }\n  }\n  return fileName ?? defaultName;\n}\n\nexport function toCommaSeparatedString<T>(input: T[]): string {\n  const stringList = input.map((item) => item?.toString() ?? '');\n\n  if (stringList.length > 1) {\n    return `${stringList.slice(0, -1).join(', ')} and ${stringList[stringList.length - 1]}`;\n  } else {\n    return stringList[0] ?? '';\n  }\n}\n\nexport function isFileImageType(mimeType: string): boolean {\n  if (mimeType.startsWith('image/')) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function isExcelFileType(mimeType: string): boolean {\n  if (\n    mimeType ===\n      'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\n    mimeType === 'application/vnd.ms-excel'\n  ) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function exportListToExcel(\n  exportListToExcelObservableMethod: (filter: Filter) => Observable<any>,\n  filter: Filter,\n) {\n  exportListToExcelObservableMethod(filter).subscribe((res) => {\n    let fileName = getFileNameFromContentDisposition(res, 'ExcelExport.xlsx');\n    FileSaver.saveAs(res.body, decodeURIComponent(fileName));\n  });\n}\n\nexport function getPrimengDropdownNamebookOptions(\n  getDropdownListObservable: (\n    parentEntityId?: number,\n  ) => Observable<Namebook[]>,\n  parentEntityId?: number,\n): Observable<PrimengOption[]> {\n  return getDropdownListObservable(parentEntityId ?? 0).pipe(\n    map((res) => {\n      return res.map((x) => ({ label: x.displayName, code: x.id }));\n    }),\n  );\n}\n\nexport function getPrimengDropdownCodebookOptions(\n  getDropdownListObservable: () => Observable<Codebook[]>,\n): Observable<PrimengOption[]> {\n  return getDropdownListObservable().pipe(\n    map((res) => {\n      return res.map((x) => ({ label: x.displayName, code: x.code }));\n    }),\n  );\n}\n\nexport function getPrimengAutocompleteNamebookOptions(\n  getAutocompleteListObservable: (\n    limit: number,\n    query: string,\n    parentEntityId?: number,\n  ) => Observable<Namebook[]>,\n  limit: number,\n  query: string,\n  parentEntityId?: number,\n): Observable<PrimengOption[]> {\n  return getAutocompleteListObservable(limit, query, parentEntityId ?? 0).pipe(\n    map((res) => {\n      return res.map((x) => ({ label: x.displayName, code: x.id }));\n    }),\n  );\n}\n\nexport function getPrimengAutocompleteCodebookOptions(\n  getAutocompleteListObservable: (\n    limit: number,\n    query: string,\n  ) => Observable<Codebook[]>,\n  limit: number,\n  query: string,\n): Observable<PrimengOption[]> {\n  return getAutocompleteListObservable(limit, query).pipe(\n    map((res) => {\n      return res.map((x) => ({ label: x.displayName, code: x.code }));\n    }),\n  );\n}\n\nexport const isNullOrEmpty = (input: string) => {\n  if (input == null || input === '') {\n    return true;\n  }\n\n  return false;\n};\n\nexport const selectedTab = (tabs: SpiderlyTab[]): number => {\n  const tab = singleOrDefault(tabs, (x) => x.isSelected);\n\n  if (tab) {\n    return tab.id;\n  } else {\n    return null;\n  }\n};\n\nexport function firstCharToUpper(input: string): string {\n  return input.charAt(0).toUpperCase() + input.slice(1);\n}\n\nexport function splitPascalCase(input: string) {\n  const regex = /($[a-z])|[A-Z][^A-Z]+/g;\n  return input.match(regex).join(' ');\n}\n\nexport function capitalizeFirstChar(str: string): string {\n  if (!str) return str;\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function kebabToTitleCase(input: string): string {\n  return input\n    .split('-')\n    .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n    .join(' ');\n}\n\n/**\n * Custom styling of the google button - https://medium.com/simform-engineering/implement-custom-google-sign-in-using-angular-16-9c93aeff6252\n */\nexport function createFakeGoogleWrapper() {\n  const googleLoginWrapper = document.createElement('div');\n  googleLoginWrapper.style.display = 'none';\n  googleLoginWrapper.classList.add('custom-google-button');\n\n  document.body.appendChild(googleLoginWrapper);\n\n  window.google.accounts.id.renderButton(googleLoginWrapper, {\n    type: 'icon',\n    width: '200',\n  });\n\n  const googleLoginWrapperButton = googleLoginWrapper.querySelector(\n    'div[role=button]',\n  ) as HTMLElement;\n\n  return {\n    click: () => {\n      googleLoginWrapperButton?.click();\n    },\n  };\n}\n\nexport const PROPS_KEY = Symbol('props');\n\nexport function ReflectProp(target: any, propertyKey: string) {\n  const props = Reflect.getMetadata(PROPS_KEY, target) || [];\n  Reflect.defineMetadata(PROPS_KEY, [...props, propertyKey], target);\n}\n\nexport const primitiveArrayTypes = [\n  'Namebook[]',\n  'number[]',\n  'Date[]',\n  'string[]',\n];\n\nexport function getImageDimensions(\n  file: File,\n): Promise<{ width: number; height: number }> {\n  return new Promise((resolve) => {\n    const img = new Image();\n    img.onload = () => {\n      resolve({ width: img.width, height: img.height });\n      URL.revokeObjectURL(img.src);\n    };\n    img.src = URL.createObjectURL(file);\n  });\n}\n","import { TranslocoService } from '@jsverse/transloco';\nimport { Injectable, NgZone } from '@angular/core';\nimport { MessageService } from 'primeng/api';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SpiderlyMessageService {\n  // TODO FT: nece da prikaze poruku ako je neki angular error koji se dogodi tek nakon api poziva\n  constructor(\n    private messageService: MessageService,\n    private translocoService: TranslocoService,\n    private ngZone: NgZone,\n  ) {}\n\n  successMessage(\n    detail: string,\n    title: string = this.translocoService.translate('SuccessfulAction'),\n  ) {\n    this.messageService.add({\n      severity: 'success',\n      summary: title,\n      detail: detail,\n      life: 10000,\n    });\n  }\n\n  warningMessage(detail: string, title?: string, sticky?: boolean) {\n    this.messageService.add({\n      severity: 'warn',\n      summary: title ?? this.translocoService.translate('Warning'),\n      detail: detail,\n      life: 10000,\n      sticky: sticky,\n    });\n  }\n\n  errorMessage(\n    detail: string,\n    title: string = this.translocoService.translate('Error'),\n  ) {\n    this.messageService.add({\n      severity: 'error',\n      summary: title,\n      detail: detail,\n      life: 10000,\n    });\n  }\n\n  infoMessage(detail: string, title?: string, sticky?: boolean) {\n    this.messageService.add({\n      severity: 'info',\n      summary: title ?? this.translocoService.translate('Info'),\n      detail: detail,\n      life: 10000,\n      sticky: sticky,\n    });\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { FileSelectEvent, FileUploadModule } from 'primeng/fileupload';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { SpiderlyButtonComponent } from '../../components/spiderly-buttons/spiderly-button/spiderly-button.component';\nimport { BaseEntity } from '../../entities/base-entity';\nimport {\n  getImageDimensions,\n  getMimeTypeForFileName,\n  isExcelFileType,\n  isFileImageType,\n} from '../../services/helper-functions';\nimport { SpiderlyMessageService } from '../../services/spiderly-message.service';\nimport { ValidatorAbstractService } from '../../services/validator-abstract.service';\nimport { BaseControl } from '../base-control';\n\n@Component({\n  selector: 'spiderly-file',\n  templateUrl: './spiderly-file.component.html',\n  styles: [],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    FileUploadModule,\n    RequiredComponent,\n    SpiderlyButtonComponent,\n    TranslocoDirective,\n  ],\n})\nexport class SpiderlyFileComponent extends BaseControl implements OnInit {\n  @Output() onFileSelected = new EventEmitter<SpiderlyFileSelectEvent>();\n  @Output() onFileRemoved = new EventEmitter<null>();\n  @Input() objectId: number;\n  @Input() fileData: string;\n  @Input() acceptedFileTypes: Array<\n    | 'image/*'\n    | 'image/png'\n    | 'image/jpeg'\n    | 'image/webp'\n    | 'image/gif'\n    | 'image/avif'\n    | 'image/svg+xml'\n    | '.png'\n    | '.jpg'\n    | '.jpeg'\n    | '.webp'\n    | '.gif'\n    | '.avif'\n    | '.svg'\n    | 'application/pdf'\n    | '.pdf'\n    | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n    | 'application/vnd.ms-excel'\n    | '.xlsx'\n    | '.xls'\n    | 'video/*'\n    | 'video/mp4'\n    | '.mp4'\n    | 'audio/*'\n    | 'audio/mpeg'\n    | '.mp3'\n    | 'application/zip'\n    | '.zip'\n    | 'text/csv'\n    | '.csv'\n  > = ['image/*'];\n  @Input() required: boolean; // It's okay for this control, because for the custom uploads where we are not initializing the control from the backend, there is no need for formControl.\n  @Input() multiple: boolean = false;\n  @Input() isUrlFileData: boolean = true;\n  @Input() imageWidth: number = 0;\n  @Input() imageHeight: number = 0;\n  @Input() maxFileSize: number = 20_000_000;\n\n  acceptedFileTypesCommaSeparated: string;\n  existingFileUrl: string | null = null;\n  existingFileIsImage: boolean = false;\n  existingFileName: string = '';\n  @Input() files: File[] = [];\n\n  constructor(\n    protected override translocoService: TranslocoService,\n    private messageService: SpiderlyMessageService,\n    private validatorService: ValidatorAbstractService,\n  ) {\n    super(translocoService);\n  }\n\n  override ngOnInit() {\n    if (this.control?.value != null && this.fileData != null) {\n      if (this.isUrlFileData) {\n        this.setExistingFileUrl(this.fileData);\n      } else {\n        const file = this.getFileFromBase64(this.fileData);\n        this.files.push(file);\n      }\n    }\n\n    if (!this.objectId) {\n      this.objectId = 0;\n    }\n\n    this.acceptedFileTypesCommaSeparated = this.acceptedFileTypes.join(',');\n\n    super.ngOnInit();\n  }\n\n  filesSelected(event: FileSelectEvent) {\n    const file = event.files[0];\n    this.existingFileUrl = null;\n\n    if (\n      this.isFileImageType(file.type) &&\n      this.hasImageDimensionConstraints()\n    ) {\n      this.files = [];\n      this.validatorService\n        .validateImageDimensions(file, this.imageWidth, this.imageHeight)\n        .then((result) => {\n          if (result.isValid) {\n            this.files = [file];\n            this.emitFileSelected(file);\n          } else {\n            this.messageService.errorMessage(result.errors.join('\\n'));\n          }\n        });\n    } else {\n      this.emitFileSelected(file);\n    }\n  }\n\n  private async emitFileSelected(file: File): Promise<void> {\n    const formData = new FormData();\n    formData.append('file', file, `${this.objectId}-${file.name}`);\n\n    let width: number | undefined;\n    let height: number | undefined;\n\n    if (this.isFileImageType(file.type)) {\n      const dimensions = await getImageDimensions(file);\n      width = dimensions.width;\n      height = dimensions.height;\n    }\n\n    this.onFileSelected.next(\n      new SpiderlyFileSelectEvent({ file, formData, width, height }),\n    );\n  }\n\n  private hasImageDimensionConstraints(): boolean {\n    return this.imageWidth > 0 || this.imageHeight > 0;\n  }\n\n  choose(event, chooseCallback) {\n    chooseCallback();\n  }\n\n  fileRemoved(removeFileCallback, index: number) {\n    removeFileCallback(index);\n    this.clearFile();\n  }\n\n  removeExistingFile() {\n    this.existingFileUrl = null;\n    this.clearFile();\n  }\n\n  private clearFile() {\n    this.control?.setValue(null);\n    this.onFileRemoved.next(null);\n  }\n\n  private setExistingFileUrl(url: string) {\n    this.existingFileUrl = url;\n    this.existingFileName = url.split('/').pop()?.split('?')[0] ?? '';\n    const mimeType = getMimeTypeForFileName(this.existingFileName);\n    this.existingFileIsImage = isFileImageType(mimeType);\n  }\n\n  getFileFromBase64(base64String: string) {\n    const [header, base64Content] = base64String.split(';base64,');\n    const fileName = header.split('=')[1];\n    const mimeType = getMimeTypeForFileName(fileName);\n\n    const byteCharacters = atob(base64Content);\n    const byteNumbers = new Uint8Array(byteCharacters.length);\n\n    for (let i = 0; i < byteCharacters.length; i++) {\n      byteNumbers[i] = byteCharacters.charCodeAt(i);\n    }\n\n    const blob = new Blob([byteNumbers], { type: mimeType });\n    const file = new File([blob], fileName, { type: mimeType });\n\n    return file;\n  }\n\n  isFileImageType(mimeType: string): boolean {\n    return isFileImageType(mimeType);\n  }\n\n  isExcelFileType(mimeType: string): boolean {\n    return isExcelFileType(mimeType);\n  }\n}\n\nexport class SpiderlyFileSelectEvent extends BaseEntity {\n  file?: File;\n  formData?: FormData;\n  width?: number;\n  height?: number;\n\n  constructor({\n    file,\n    formData,\n    width,\n    height,\n  }: {\n    file?: File;\n    formData?: FormData;\n    width?: number;\n    height?: number;\n  } = {}) {\n    super();\n\n    this.file = file;\n    this.formData = formData;\n    this.width = width;\n    this.height = height;\n  }\n\n  static readonly typeName = 'SpiderlyFileSelectEvent' as const;\n}\n","<ng-container *transloco=\"let t\">\n  <div style=\"display: flex; flex-direction: column; gap: 0.5rem; padding: 1px\">\n    <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\n      <label>{{ getTranslatedLabel() }}</label>\n      <!-- It's okay for this control, because for the custom uploads where we are not initializing the control from the backend, there is no need for formControl. -->\n      <required *ngIf=\"control?.required || required\"></required>\n    </div>\n\n    <p-fileUpload\n      [files]=\"files\"\n      [disabled]=\"disabled\"\n      [name]=\"control?.label ?? label\"\n      [multiple]=\"multiple\"\n      [accept]=\"acceptedFileTypesCommaSeparated\"\n      [maxFileSize]=\"maxFileSize\"\n      (onSelect)=\"filesSelected($event)\"\n      [class]=\"control?.invalid && control?.dirty ? 'control-error-border' : ''\"\n    >\n      <ng-template\n        pTemplate=\"header\"\n        let-files\n        let-chooseCallback=\"chooseCallback\"\n        let-clearCallback=\"clearCallback\"\n        let-uploadCallback=\"uploadCallback\"\n      >\n        <div\n          class=\"flex flex-wrap justify-between items-center flex-1 gap-2\"\n        >\n          <div class=\"flex gap-2\">\n            <spiderly-button\n              [disabled]=\"disabled\"\n              (onClick)=\"choose($event, chooseCallback)\"\n              icon=\"pi pi-upload\"\n              [rounded]=\"true\"\n              [outlined]=\"true\"\n            />\n          </div>\n        </div>\n      </ng-template>\n      <ng-template\n        pTemplate=\"content\"\n        let-files\n        let-removeFileCallback=\"removeFileCallback\"\n      >\n        <div *ngIf=\"existingFileUrl\">\n          <div class=\"flex justify-center p-0 gap-8\">\n            <div\n              class=\"card m-0 px-4 py-4 flex flex-col items-center gap-4\"\n              style=\"justify-content: center; overflow: hidden\"\n            >\n              <div *ngIf=\"existingFileIsImage\" class=\"image-container\">\n                <img [src]=\"existingFileUrl\" />\n              </div>\n              <div *ngIf=\"!existingFileIsImage\">\n                <i class=\"pi pi-file\" style=\"margin-right: 4px\"></i>\n                <span>{{ existingFileName }}</span>\n              </div>\n              <spiderly-button\n                [disabled]=\"disabled\"\n                icon=\"pi pi-times\"\n                (onClick)=\"removeExistingFile()\"\n                [outlined]=\"true\"\n                [rounded]=\"true\"\n                severity=\"danger\"\n              />\n            </div>\n          </div>\n        </div>\n        <div *ngIf=\"!existingFileUrl && files.length > 0\">\n          <div class=\"flex justify-center p-0 gap-8\">\n            <div\n              *ngFor=\"let file of files; let index = index\"\n              class=\"card m-0 px-4 py-4 flex flex-col items-center gap-4\"\n              style=\"justify-content: center; overflow: hidden\"\n            >\n              <div *ngIf=\"isFileImageType(file.type)\" class=\"image-container\">\n                <img role=\"presentation\" [src]=\"file.objectURL\" />\n              </div>\n              <div *ngIf=\"isExcelFileType(file.type)\" class=\"excel-container\">\n                <div class=\"excel-details\">\n                  <i\n                    class=\"pi pi-file-excel\"\n                    style=\"color: green; margin-right: 4px\"\n                  ></i>\n                  <span class=\"file-name\">{{ file.name }}</span>\n                </div>\n              </div>\n              <spiderly-button\n                [disabled]=\"disabled\"\n                icon=\"pi pi-times\"\n                (onClick)=\"fileRemoved(removeFileCallback, index)\"\n                [outlined]=\"true\"\n                [rounded]=\"true\"\n                severity=\"danger\"\n              />\n            </div>\n          </div>\n        </div>\n      </ng-template>\n      <ng-template pTemplate=\"file\"> </ng-template>\n      <ng-template pTemplate=\"empty\">\n        <div *ngIf=\"!existingFileUrl\" class=\"flex items-center justify-center flex-col\">\n          <i\n            class=\"pi pi-cloud-upload border-2 rounded-full p-8 text-8xl text-gray-400 border-gray-400 mt-4\"\n          ></i>\n          <p class=\"mt-6 mb-0\">{{ t(\"DragAndDropFilesHereToUpload\") }}</p>\n        </div>\n      </ng-template>\n    </p-fileUpload>\n  </div>\n</ng-container>\n","import { Component, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { getParentUrl } from '../../../services/helper-functions';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { ButtonModule } from 'primeng/button';\nimport { SpiderlyButtonComponent } from '../spiderly-button/spiderly-button.component';\n\n@Component({\n  selector: 'return-button',\n  templateUrl: './return-button.component.html',\n  styles: [],\n  imports: [\n    CommonModule,\n    ButtonModule,\n    SpiderlyButtonComponent,\n    TranslocoDirective,\n  ],\n})\nexport class SpiderlyReturnButtonComponent {\n  @Input() navigateUrl: string;\n\n  constructor(private router: Router) {}\n\n  onReturn() {\n    if (this.navigateUrl == undefined) {\n      const currentUrl = this.router.url;\n      const parentUrl: string = getParentUrl(currentUrl);\n      this.router.navigateByUrl(parentUrl);\n    } else {\n      this.router.navigate([this.navigateUrl]);\n    }\n  }\n}\n","<ng-container *transloco=\"let t\">\n  <spiderly-button\n    (onClick)=\"onReturn()\"\n    [label]=\"t('Return')\"\n    icon=\"pi pi-undo\"\n    [outlined]=\"true\"\n  ></spiderly-button>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { SpiderlyMultiAutocompleteComponent } from './spiderly-multiautocomplete/spiderly-multiautocomplete.component';\nimport { SpiderlyPasswordComponent } from './spiderly-password/spiderly-password.component';\nimport { SpiderlyTextboxComponent } from './spiderly-textbox/spiderly-textbox.component';\nimport { SpiderlyCheckboxComponent } from './spiderly-checkbox/spiderly-checkbox.component';\nimport { SpiderlyMultiSelectComponent } from './spiderly-multiselect/spiderly-multiselect.component';\nimport { SpiderlyTextareaComponent } from './spiderly-textarea/spiderly-textarea.component';\nimport { SpiderlyNumberComponent } from './spiderly-number/spiderly-number.component';\nimport { SpiderlyDropdownComponent } from './spiderly-dropdown/spiderly-dropdown.component';\nimport { SpiderlyEditorComponent } from './spiderly-editor/spiderly-editor.component';\nimport { SpiderlyColorPickerComponent } from './spiderly-colorpicker/spiderly-colorpicker.component';\nimport { SpiderlyFileComponent } from './spiderly-file/spiderly-file.component';\nimport { SpiderlyCalendarComponent } from './spiderly-calendar/spiderly-calendar.component';\nimport { SpiderlyAutocompleteComponent } from './spiderly-autocomplete/spiderly-autocomplete.component';\nimport { SpiderlyButtonComponent } from '../components/spiderly-buttons/spiderly-button/spiderly-button.component';\nimport { SpiderlyReturnButtonComponent } from '../components/spiderly-buttons/return-button/return-button.component';\n\n@NgModule({\n  imports: [\n    SpiderlyTextboxComponent,\n    SpiderlyTextareaComponent,\n    SpiderlyCheckboxComponent,\n    SpiderlyCalendarComponent,\n    SpiderlyReturnButtonComponent,\n    SpiderlyButtonComponent,\n    SpiderlyPasswordComponent,\n    SpiderlyAutocompleteComponent,\n    SpiderlyMultiAutocompleteComponent,\n    SpiderlyMultiSelectComponent,\n    SpiderlyNumberComponent,\n    SpiderlyDropdownComponent,\n    SpiderlyEditorComponent,\n    SpiderlyColorPickerComponent,\n    SpiderlyFileComponent,\n  ],\n  exports: [\n    SpiderlyTextboxComponent,\n    SpiderlyTextareaComponent,\n    SpiderlyCheckboxComponent,\n    SpiderlyCalendarComponent,\n    SpiderlyReturnButtonComponent,\n    SpiderlyButtonComponent,\n    SpiderlyPasswordComponent,\n    SpiderlyAutocompleteComponent,\n    SpiderlyMultiAutocompleteComponent,\n    SpiderlyMultiSelectComponent,\n    SpiderlyNumberComponent,\n    SpiderlyDropdownComponent,\n    SpiderlyEditorComponent,\n    SpiderlyColorPickerComponent,\n    SpiderlyFileComponent,\n  ],\n  declarations: [],\n  providers: [],\n})\nexport class SpiderlyControlsModule {}\n","import { BaseEntity } from './base-entity';\n\nexport class UserBase extends BaseEntity {\n  static readonly typeName = 'UserBase' as const;\n\n  id?: number;\n  email?: string;\n\n  constructor({\n    id,\n    email,\n  }: {\n    id?: number;\n    email?: string;\n  } = {}) {\n    super();\n\n    this.id = id;\n    this.email = email;\n  }\n\n  static readonly schema = {\n    id: {\n      type: 'number',\n    },\n    email: {\n      type: 'string',\n    },\n  } as const;\n}\n\nexport class AuthResult extends BaseEntity {\n  static readonly typeName = 'AuthResult' as const;\n\n  userId?: number;\n  email?: string;\n  accessToken?: string;\n  refreshToken?: string;\n\n  constructor({\n    userId,\n    email,\n    accessToken,\n    refreshToken,\n  }: {\n    userId?: number;\n    email?: string;\n    accessToken?: string;\n    refreshToken?: string;\n  } = {}) {\n    super();\n\n    this.userId = userId;\n    this.email = email;\n    this.accessToken = accessToken;\n    this.refreshToken = refreshToken;\n  }\n\n  static readonly schema = {\n    userId: {\n      type: 'number',\n    },\n    email: {\n      type: 'string',\n    },\n    accessToken: {\n      type: 'string',\n    },\n    refreshToken: {\n      type: 'string',\n    },\n  } as const;\n}\n\nexport class VerificationTokenRequest extends BaseEntity {\n  static readonly typeName = 'VerificationTokenRequest' as const;\n\n  verificationCode?: string;\n  browserId?: string;\n  email?: string;\n\n  constructor({\n    verificationCode,\n    browserId,\n    email,\n  }: {\n    verificationCode?: string;\n    browserId?: string;\n    email?: string;\n  } = {}) {\n    super();\n\n    this.verificationCode = verificationCode;\n    this.browserId = browserId;\n    this.email = email;\n  }\n\n  static readonly schema = {\n    verificationCode: {\n      type: 'string',\n    },\n    browserId: {\n      type: 'string',\n    },\n    email: {\n      type: 'string',\n    },\n  } as const;\n}\n\nexport class ExternalProvider extends BaseEntity {\n  static readonly typeName = 'ExternalProvider' as const;\n\n  idToken?: string;\n  browserId?: string;\n\n  constructor({\n    idToken,\n    browserId,\n  }: {\n    idToken?: string;\n    browserId?: string;\n  } = {}) {\n    super();\n\n    this.idToken = idToken;\n    this.browserId = browserId;\n  }\n\n  static readonly schema = {\n    idToken: {\n      type: 'string',\n    },\n    browserId: {\n      type: 'string',\n    },\n  } as const;\n}\n\nexport class UserRole extends BaseEntity {\n  static readonly typeName = 'UserRole' as const;\n\n  roleId?: number;\n  userId?: number;\n\n  constructor({\n    roleId,\n    userId,\n  }: {\n    roleId?: number;\n    userId?: number;\n  } = {}) {\n    super();\n\n    this.roleId = roleId;\n    this.userId = userId;\n  }\n\n  static readonly schema = {\n    roleId: {\n      type: 'number',\n    },\n    userId: {\n      type: 'number',\n    },\n  } as const;\n}\n\nexport class LoginVerificationToken extends BaseEntity {\n  static readonly typeName = 'LoginVerificationToken' as const;\n\n  email?: string;\n  userId?: number;\n  browserId?: string;\n  expiresAt?: Date;\n\n  constructor({\n    email,\n    userId,\n    browserId,\n    expiresAt,\n  }: {\n    email?: string;\n    userId?: number;\n    browserId?: string;\n    expiresAt?: Date;\n  } = {}) {\n    super();\n\n    this.email = email;\n    this.userId = userId;\n    this.browserId = browserId;\n    this.expiresAt = expiresAt;\n  }\n\n  static readonly schema = {\n    email: {\n      type: 'string',\n    },\n    userId: {\n      type: 'number',\n    },\n    browserId: {\n      type: 'string',\n    },\n    expiresAt: {\n      type: 'Date',\n    },\n  } as const;\n}\n\nexport class Login extends BaseEntity {\n  static readonly typeName = 'Login' as const;\n\n  email?: string;\n  browserId?: string;\n\n  constructor({\n    email,\n    browserId,\n  }: {\n    email?: string;\n    browserId?: string;\n  } = {}) {\n    super();\n\n    this.email = email;\n    this.browserId = browserId;\n  }\n\n  static readonly schema = {\n    email: {\n      type: 'string',\n    },\n    browserId: {\n      type: 'string',\n    },\n  } as const;\n}\n\nexport class RefreshTokenRequest extends BaseEntity {\n  static readonly typeName = 'RefreshTokenRequest' as const;\n\n  refreshToken?: string;\n  browserId?: string;\n\n  constructor({\n    refreshToken,\n    browserId,\n  }: {\n    refreshToken?: string;\n    browserId?: string;\n  } = {}) {\n    super();\n\n    this.refreshToken = refreshToken;\n    this.browserId = browserId;\n  }\n\n  static readonly schema = {\n    refreshToken: {\n      type: 'string',\n    },\n    browserId: {\n      type: 'string',\n    },\n  } as const;\n}\n\nexport class AuthResultWithCookies extends BaseEntity {\n  static readonly typeName = 'AuthResultWithCookies' as const;\n\n  userId?: number;\n  email?: string;\n  accessTokenExpiresAt?: Date;\n\n  constructor({\n    userId,\n    email,\n    accessTokenExpiresAt,\n  }: {\n    userId?: number;\n    email?: string;\n    accessTokenExpiresAt?: Date;\n  } = {}) {\n    super();\n\n    this.userId = userId;\n    this.email = email;\n    this.accessTokenExpiresAt = accessTokenExpiresAt;\n  }\n\n  static readonly schema = {\n    userId: {\n      type: 'number',\n    },\n    email: {\n      type: 'string',\n    },\n    accessTokenExpiresAt: {\n      type: 'Date',\n    },\n  } as const;\n}\n\nexport class SendLoginVerificationEmailResult extends BaseEntity {\n  static readonly typeName = 'SendLoginVerificationEmailResult' as const;\n\n  message?: string;\n\n  constructor({\n    message,\n  }: {\n    message?: string;\n  } = {}) {\n    super();\n\n    this.message = message;\n  }\n\n  static readonly schema = {\n    message: {\n      type: 'string',\n    },\n  } as const;\n}\n","// When we call it, inside the console, it will show SpiderlyError: ...\nexport class SpiderlyError extends Error {\n  constructor(message: string) {\n    super(message);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslocoService } from '@jsverse/transloco';\nimport {\n  SpiderlyFormArray,\n  SpiderlyFormControl,\n  SpiderlyFormGroup,\n} from '../components/spiderly-form-control/spiderly-form-control';\nimport { BaseEntity, SchemaAwareConstructor } from '../entities/base-entity';\nimport { SpiderlyError } from '../errors/spiderly-error';\nimport { capitalizeFirstChar, firstCharToUpper } from './helper-functions';\nimport { SpiderlyMessageService } from './spiderly-message.service';\nimport { ValidatorAbstractService } from './validator-abstract.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class BaseFormService {\n  constructor(\n    private validatorService: ValidatorAbstractService,\n    private messageService: SpiderlyMessageService,\n    private translocoService: TranslocoService,\n  ) {}\n\n  initFormGroup = <T extends BaseEntity>(\n    formGroup: SpiderlyFormGroup<T>,\n    targetClass: SchemaAwareConstructor<T>,\n    initialValues?: T,\n    updateOnChangeControls?: (keyof T)[],\n  ) => {\n    if (!formGroup)\n      throw new SpiderlyError('You need to instantiate the form group.');\n\n    if (!targetClass) throw new SpiderlyError('You need to pass targetClass.');\n\n    if (!initialValues) initialValues = {} as T;\n\n    Object.keys(targetClass.schema).forEach((formControlName) => {\n      const propSchema = targetClass.schema[formControlName];\n      let propInitialValue = initialValues[formControlName];\n\n      const existingControl = formGroup.get(formControlName);\n\n      if (\n        propSchema.type.endsWith('[]') &&\n        propSchema.nestedConstructor &&\n        propSchema.type !== 'Namebook[]'\n      ) {\n        if (existingControl instanceof SpiderlyFormArray) {\n          this.initFormArray(\n            existingControl,\n            propSchema.nestedConstructor,\n            propInitialValue,\n          );\n          this.validatorService.setFormArrayValidator(\n            existingControl,\n            targetClass.typeName,\n          );\n        } else {\n          const control = new SpiderlyFormArray<T>(\n            [],\n            this.translocoService,\n            this,\n          );\n          this.initFormArray(\n            control,\n            propSchema.nestedConstructor,\n            propInitialValue,\n          );\n\n          control.label = formControlName;\n          control.labelForDisplay = this.getTranslatedLabel(formControlName);\n          this.validatorService.setFormArrayValidator(\n            control,\n            targetClass.typeName,\n          );\n\n          formGroup.setControl(formControlName, control);\n        }\n      } else if (\n        propSchema.nestedConstructor &&\n        propSchema.type !== 'Namebook[]'\n      ) {\n        if (existingControl instanceof SpiderlyFormGroup) {\n          this.initFormGroup(\n            existingControl,\n            propSchema.nestedConstructor,\n            propInitialValue,\n          );\n        } else {\n          const control = new SpiderlyFormGroup({});\n          this.initFormGroup(\n            control,\n            propSchema.nestedConstructor,\n            propInitialValue,\n          );\n          formGroup.setControl(formControlName, control);\n        }\n      } else {\n        // HACK: Because on the backend id type is not nullable on generated DTOs, we need to do this, it's ugly hack and we should make it better.\n        if (formControlName === 'id' && !propInitialValue) {\n          propInitialValue = 0;\n        }\n\n        if (propSchema.type.endsWith('[]') && propInitialValue == null) {\n          propInitialValue = [];\n        }\n\n        if (existingControl instanceof SpiderlyFormControl) {\n          existingControl.setValue(propInitialValue);\n        } else {\n          let control: SpiderlyFormControl;\n\n          if (\n            updateOnChangeControls?.includes(formControlName as keyof T) ||\n            (formControlName.endsWith('Id') && formControlName.length > 2) ||\n            propSchema.type === 'Date' ||\n            propSchema.type === 'Namebook[]'\n          ) {\n            control = new SpiderlyFormControl(propInitialValue, {\n              updateOn: 'change',\n            });\n          } else {\n            control = new SpiderlyFormControl(propInitialValue, {\n              updateOn: 'blur',\n            });\n          }\n\n          control.label = formControlName;\n          control.labelForDisplay = this.getTranslatedLabel(formControlName);\n          control.parentClassName = targetClass.typeName;\n\n          this.validatorService.setValidator(control, targetClass.typeName);\n\n          formGroup.setControl(formControlName, control);\n        }\n      }\n    });\n\n    formGroup.targetClass = targetClass;\n\n    return formGroup;\n  };\n\n  getTranslatedLabel(formControlName: string): string {\n    if (formControlName.endsWith('Id') && formControlName.length > 2) {\n      formControlName = formControlName.substring(\n        0,\n        formControlName.length - 2,\n      );\n    } else if (formControlName.endsWith('DisplayName')) {\n      formControlName = formControlName.replace('DisplayName', '');\n    }\n\n    return this.translocoService.translate(firstCharToUpper(formControlName));\n  }\n\n  addNewFormGroupToFormArray<T extends BaseEntity>(\n    formArray: SpiderlyFormArray<T>,\n    targetClass: SchemaAwareConstructor<T>,\n    initialValues: T,\n    index: number,\n  ): SpiderlyFormGroup {\n    let helperFormGroup = new SpiderlyFormGroup({});\n    this.initFormGroup(helperFormGroup, targetClass, initialValues);\n\n    if (index == null) {\n      formArray.push(helperFormGroup);\n    } else {\n      formArray.insert(index, helperFormGroup);\n    }\n\n    return helperFormGroup;\n  }\n\n  removeFormControlFromTheFormArray(\n    formArray: SpiderlyFormArray,\n    index: number,\n  ) {\n    if (index == null) throw new SpiderlyError('Can not pass null index.');\n\n    formArray.removeAt(index);\n  }\n\n  initFormArray<T extends BaseEntity>(\n    formArray: SpiderlyFormArray<T>,\n    targetClass: SchemaAwareConstructor<T>,\n    initialValues: T[] = [],\n  ) {\n    if (!formArray)\n      throw new SpiderlyError(\n        'You must pass a FormArray instance to be initialized or updated.',\n      );\n\n    if (!targetClass)\n      throw new SpiderlyError('You did not initialize targetClass');\n\n    formArray.formGroupInitialValues = {}; // When we need we can pass formGroupInitialValues to this method instead of assigning it to empty object\n    formArray.targetClass = targetClass;\n\n    initialValues.forEach((model, index) => {\n      const existingControl = formArray.at(index);\n\n      if (existingControl instanceof SpiderlyFormGroup) {\n        this.initFormGroup(existingControl, targetClass, model);\n      } else {\n        let helperFormGroup: SpiderlyFormGroup = new SpiderlyFormGroup({});\n        this.initFormGroup(helperFormGroup, targetClass, model);\n        formArray.push(helperFormGroup);\n      }\n    });\n\n    return formArray;\n  }\n\n  //#region Helpers\n\n  showInvalidFieldsMessage = () => {\n    this.messageService.warningMessage(\n      this.translocoService.translate('YouHaveSomeInvalidFieldsDescription'),\n      this.translocoService.translate('YouHaveSomeInvalidFieldsTitle'),\n    );\n  };\n\n  generateNewNegativeId<T extends BaseEntity>(formArray: SpiderlyFormArray<T>) {\n    return -formArray.getRawValue().filter((x) => x.id < 0).length - 1;\n  }\n\n  getSaveBodyMainDTOKey = (saveBodyClass: SchemaAwareConstructor<any>) => {\n    const schema = saveBodyClass.schema;\n    return Object.keys(schema).find(\n      (k) => schema[k].isSaveBodyMainDTO === true,\n    );\n  };\n\n  mapMainUIFormToSaveBody = <\n    TMainUIForm extends BaseEntity,\n    TSaveBody extends BaseEntity,\n  >(\n    mainUIFormClass: SchemaAwareConstructor<TMainUIForm>,\n    mainUIFormValues: TMainUIForm,\n  ): TSaveBody => {\n    let saveBody = {} as TSaveBody;\n\n    Object.keys(mainUIFormClass.schema).forEach((propName) => {\n      const property = mainUIFormClass.schema[propName];\n      const value = mainUIFormValues[propName];\n\n      // Handle ordered one-to-many (e.g., \"orderedItemsMainUIFormDTO\" -> \"orderedItemsSaveBodyDTO\")\n      if (\n        propName.startsWith('ordered') &&\n        propName.endsWith('MainUIFormDTO')\n      ) {\n        const newKey = propName.replace('MainUIFormDTO', 'SaveBodyDTO');\n        // Recursively map nested DTOs\n        const relatedEntity = property.nestedConstructor;\n        saveBody[newKey] =\n          value?.map((item) =>\n            this.mapMainUIFormToSaveBody(relatedEntity, item),\n          ) ?? [];\n      }\n      // Handle multi-select (e.g., \"itemsIds\" -> \"selectedItemsIds\")\n      else if (propName.endsWith('Ids')) {\n        saveBody[`selected${capitalizeFirstChar(propName)}`] = value ?? [];\n      }\n      // Handle multi-autocomplete (e.g., \"itemsNamebookDTOList\" -> \"selectedItemsIds\")\n      else if (propName.endsWith('NamebookDTOList')) {\n        saveBody[`selected${capitalizeFirstChar(propName)}`] = value ?? [];\n      }\n      // Handle the main DTO object (e.g., \"entityDTO\")\n      else {\n        saveBody[propName] = value;\n      }\n    });\n\n    return saveBody;\n  };\n\n  isControlValid(\n    control: SpiderlyFormControl | SpiderlyFormGroup | SpiderlyFormArray,\n    controlNamesFromHtml?: string[],\n  ): boolean {\n    let invalid = false;\n\n    if (control instanceof SpiderlyFormControl) {\n      if (\n        control.invalid &&\n        (controlNamesFromHtml == null ||\n          controlNamesFromHtml?.includes(control.label))\n      ) {\n        control.markAsDirty();\n        invalid = true;\n      }\n    } else if (control instanceof SpiderlyFormGroup) {\n      Object.keys(control.controls).forEach((key) => {\n        const nestedControl = control.controls[key];\n        if (!this.isControlValid(nestedControl, control.controlNamesFromHtml)) {\n          invalid = true;\n        }\n      });\n    } else if (control instanceof SpiderlyFormArray) {\n      if (control.errors) {\n        control.markAsDirty();\n        this.messageService.warningMessage(control.errors['_']);\n        invalid = true;\n      }\n\n      control.controls.forEach(\n        (\n          nestedControl:\n            | SpiderlyFormControl\n            | SpiderlyFormGroup\n            | SpiderlyFormArray,\n        ) => {\n          if (!this.isControlValid(nestedControl)) {\n            invalid = true;\n          }\n        },\n      );\n    }\n\n    if (invalid) {\n      return false;\n    }\n\n    return true;\n  }\n\n  //#endregion\n}\n","import { HttpClient } from '@angular/common/http';\nimport {\n  ChangeDetectorRef,\n  Component,\n  KeyValueDiffer,\n  KeyValueDiffers,\n  OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { BaseEntity, SchemaAwareConstructor } from '../../entities/base-entity';\nimport { SpiderlyError } from '../../errors/spiderly-error';\nimport { getParentUrl } from '../../services/helper-functions';\nimport { SpiderlyMessageService } from '../../services/spiderly-message.service';\nimport {\n  SpiderlyFormArray,\n  SpiderlyFormControl,\n  SpiderlyFormGroup,\n} from '../spiderly-form-control/spiderly-form-control';\nimport { BaseFormService } from './../../services/base-form.service';\n\n@Component({\n  selector: 'base-form',\n  template: '',\n  styles: [],\n  standalone: false,\n})\nexport class BaseFormComponent<\n  TMainUIForm extends BaseEntity = any,\n  TSaveBody extends BaseEntity = any,\n> implements OnInit {\n  /**\n   * The root form group that holds all form controls, typed to `TSaveBody`.\n   * Assign `saveObservableMethod` on it to define the HTTP call used for saving.\n   * The form controls are built automatically from the `TSaveBody` schema when you call\n   * `baseFormService.initFormGroup(this.parentFormGroup, saveBodyClass, saveBody)`.\n   *\n   * @example\n   * ```ts\n   * this.parentFormGroup.saveObservableMethod = this.apiService.saveProduct;\n   *\n   * this.baseFormService.initFormGroup(\n   *   this.parentFormGroup,\n   *   ProductSaveBody,\n   *   saveBody,\n   * );\n   * ```\n   */\n  parentFormGroup = new SpiderlyFormGroup<TSaveBody>({} as any);\n\n  /**\n   * The class reference for the main UI form entity (`TMainUIForm`).\n   * This represents the shape of the data **returned by the API** after a save.\n   * Used internally by `mapMainUIFormToSaveBody` to transform the API response back into `TSaveBody`\n   * for form re-initialization.\n   *\n   * @example\n   * ```ts\n   * this.mainUIFormClass = ProductMainUIForm;\n   * ```\n   */\n  mainUIFormClass: SchemaAwareConstructor<TMainUIForm>;\n\n  /**\n   * The class reference for the save body entity (`TSaveBody`).\n   * This represents the shape of the data **sent to the API** when saving.\n   * Used internally to build form controls from the schema via `initFormGroup`,\n   * and to locate the main DTO property (marked with `isSaveBodyMainDTO: true`) for extracting the saved entity's ID.\n   *\n   * @example\n   * ```ts\n   * this.saveBodyClass = ProductSaveBody;\n   * ```\n   */\n  saveBodyClass: SchemaAwareConstructor<TSaveBody>;\n\n  /**\n   * The toast message displayed after a successful save.\n   * Override this to customize the success notification text for a specific entity.\n   * If you want to change the message for all entities, update the `SuccessfulSaveToastDescription` key\n   * in your translation JSON file instead.\n   *\n   * @example\n   * ```ts\n   * this.successfulSaveToastDescription = 'Product saved successfully!';\n   * ```\n   */\n  successfulSaveToastDescription: string = this.translocoService.translate(\n    'SuccessfulSaveToastDescription',\n  );\n\n  private modelDiffer: KeyValueDiffer<string, any>;\n\n  constructor(\n    protected differs: KeyValueDiffers,\n    protected http: HttpClient,\n    protected messageService: SpiderlyMessageService,\n    protected changeDetectorRef: ChangeDetectorRef,\n    protected router: Router,\n    protected route: ActivatedRoute,\n    protected translocoService: TranslocoService,\n    protected baseFormService: BaseFormService,\n  ) {}\n\n  ngOnInit() {}\n\n  //#region Model\n\n  /**\n   * Executes the save flow for the form. The execution order is:\n   * 1. Builds the save body from the form's raw value.\n   * 2. Calls {@link onBeforeSave} — use this to modify the save body before validation.\n   * 3. Validates the form. If invalid, shows an error message and stops.\n   * 4. Sends the save HTTP request via `saveObservableMethod`.\n   * 5. Calls {@link onAfterSaveRequest} — fires immediately after the request is sent, before the response arrives.\n   * 6. On successful response: shows a success toast, reroutes, and calls {@link onAfterSave}. The form is re-initialized only when `rerouteToParentSlugAfterSave` is `false`.\n   *\n   * @param rerouteToParentSlugAfterSave - When `true` (default), navigates to the parent URL after save. When `false`, re-initializes the form and navigates to the saved object's URL.\n   *\n   * @example\n   * ```html\n   * <button (click)=\"onSave()\">Save</button>\n   * ```\n   *\n   * @example\n   * ```html\n   * <!-- Save and stay on the saved object's page -->\n   * <button (click)=\"onSave(false)\">Save and stay</button>\n   * ```\n   */\n  // onSave method is here only because of the hooks, we should move everything except them to the BaseFromService\n  onSave = (rerouteToParentSlugAfterSave: boolean = true) => {\n    if (!this.saveBodyClass)\n      throw new SpiderlyError('You did not initialize saveBodyClass');\n\n    if (!this.mainUIFormClass)\n      throw new SpiderlyError('You did not initialize mainUIFormClass');\n\n    let saveBody = this.parentFormGroup.getRawValue();\n\n    this.onBeforeSave(saveBody);\n\n    const isValid = this.baseFormService.isControlValid(this.parentFormGroup);\n\n    if (isValid) {\n      this.parentFormGroup\n        .saveObservableMethod(saveBody)\n        .subscribe((res: TMainUIForm) => {\n          this.messageService.successMessage(\n            this.successfulSaveToastDescription,\n          );\n\n          if (rerouteToParentSlugAfterSave) {\n            this.rerouteToSavedObject(undefined);\n          } else {\n            saveBody = this.baseFormService.mapMainUIFormToSaveBody(\n              this.mainUIFormClass,\n              res,\n            );\n\n            this.baseFormService.initFormGroup(\n              this.parentFormGroup,\n              this.saveBodyClass,\n              saveBody,\n            );\n\n            const saveBodyMainDTOKey =\n              this.baseFormService.getSaveBodyMainDTOKey(this.saveBodyClass);\n            const savedObjectId = saveBody[saveBodyMainDTOKey]?.id;\n            this.rerouteToSavedObject(savedObjectId); // You always need to have id, because of id == 0 and version change\n          }\n\n          this.onAfterSave();\n        });\n\n      this.onAfterSaveRequest();\n    } else {\n      this.baseFormService.showInvalidFieldsMessage();\n    }\n  };\n\n  /**\n   * Handles navigation after a successful save.\n   * Override this to customize the post-save navigation behavior.\n   * By default, navigates to the parent URL when `rerouteId` is not provided, or to the saved object's URL otherwise.\n   *\n   * @param rerouteId - The ID of the saved object, used to build the target URL. When not provided, navigates to the parent URL.\n   *\n   * @example\n   * ```ts\n   * // Override to navigate to a custom route after save\n   * override rerouteToSavedObject(rerouteId: number | string): void {\n   *   this.router.navigateByUrl(`/products/${rerouteId}/details`);\n   * }\n   * ```\n   */\n  rerouteToSavedObject(rerouteId: number | string): void {\n    if (rerouteId == null) {\n      const currentUrl = this.router.url;\n      const parentUrl: string = getParentUrl(currentUrl);\n      this.router.navigateByUrl(parentUrl);\n      return;\n    }\n\n    const segments = this.router.url.split('/');\n    segments[segments.length - 1] = rerouteId.toString();\n\n    const newUrl = segments.join('/');\n    this.router.navigateByUrl(newUrl);\n  }\n\n  /**\n   * Hook that runs **before** form validation and the save request.\n   * Use this to modify the save body or perform any pre-save logic (e.g., transforming data, setting computed fields).\n   *\n   * @param saveBody - The current save body built from the form's raw value. Mutate it directly to change what gets sent to the server.\n   *\n   * @example\n   * ```ts\n   * onBeforeSave = (saveBody?: ProductSaveBody) => {\n   *   saveBody.productDTO.fullName = saveBody.productDTO.firstName + ' ' + saveBody.productDTO.lastName;\n   * };\n   * ```\n   */\n  onBeforeSave = (saveBody?: TSaveBody) => {};\n\n  /**\n   * Hook that runs **after** a successful save response is received.\n   * Use this for post-save side effects (e.g., refreshing related data, showing additional notifications).\n   *\n   * @example\n   * ```ts\n   * onAfterSave = () => {\n   *   this.loadRelatedProducts();\n   * };\n   * ```\n   */\n  onAfterSave = () => {};\n\n  /**\n   * Hook that runs immediately **after** the save HTTP request is sent, but **before** the response arrives.\n   * Use this for side effects that should happen as soon as the request is dispatched (e.g., disabling UI elements, starting a loading indicator).\n   *\n   * @example\n   * ```ts\n   * onAfterSaveRequest = () => {\n   *   this.isSaving = true;\n   * };\n   * ```\n   */\n  onAfterSaveRequest = () => {};\n\n  //#endregion\n\n  //#region Model List\n\n  getFormArrayControlByIndex<T>(\n    formControlName: keyof T & string,\n    formArray: SpiderlyFormArray<T>,\n    index: number,\n    filter?: (formGroups: SpiderlyFormGroup<T>[]) => SpiderlyFormGroup<T>[],\n  ): SpiderlyFormControl {\n    // if(formArray.controlNamesFromHtml.findIndex(x => x === formControlName) === -1)\n    //   formArray.controlNamesFromHtml.push(formControlName);\n\n    let filteredFormGroups: SpiderlyFormGroup<T>[];\n\n    if (filter) {\n      filteredFormGroups = filter(formArray.controls as SpiderlyFormGroup<T>[]);\n    } else {\n      return (formArray.controls[index] as SpiderlyFormGroup<T>).controls[\n        formControlName\n      ] as SpiderlyFormControl;\n    }\n\n    return filteredFormGroups[index]?.controls[\n      formControlName\n    ] as SpiderlyFormControl; // FT: Don't change this. It's always possible that change detection occurs before something.\n  }\n\n  getFormArrayControls<T>(\n    formControlName: keyof T & string,\n    formArray: SpiderlyFormArray<T>,\n    filter?: (formGroups: SpiderlyFormGroup<T>[]) => SpiderlyFormGroup<T>[],\n  ): SpiderlyFormControl[] {\n    // if(formArray.controlNamesFromHtml.findIndex(x => x === formControlName) === -1)\n    //   formArray.controlNamesFromHtml.push(formControlName);\n\n    let filteredFormGroups: SpiderlyFormGroup<T>[];\n\n    if (filter) {\n      filteredFormGroups = filter(formArray.controls as SpiderlyFormGroup<T>[]);\n    } else {\n      return (formArray.controls as SpiderlyFormGroup<T>[]).map(\n        (x) => x.controls[formControlName] as SpiderlyFormControl,\n      );\n    }\n\n    return filteredFormGroups.map(\n      (x) => x.controls[formControlName] as SpiderlyFormControl,\n    );\n  }\n\n  removeFormControlsFromTheFormArray(\n    formArray: SpiderlyFormArray,\n    indexes: number[],\n  ) {\n    // Sort indexes in descending order to avoid index shifts when removing controls\n    const sortedIndexes = indexes.sort((a, b) => b - a);\n\n    sortedIndexes.forEach((index) => {\n      if (index >= 0 && index < formArray.length) {\n        formArray.removeAt(index);\n      }\n    });\n  }\n\n  //#endregion\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { SpiderlyButtonComponent } from '../spiderly-button/spiderly-button.component';\nimport { createFakeGoogleWrapper } from '../../../services/helper-functions';\n\n@Component({\n  selector: 'google-button',\n  templateUrl: './google-button.component.html',\n  styles: [],\n  imports: [ButtonModule, SpiderlyButtonComponent],\n})\nexport class GoogleButtonComponent {\n  @Input() label: string;\n  @Output() loginWithGoogle: EventEmitter<any> = new EventEmitter<any>();\n\n  handleGoogleLogin() {\n    this.loginWithGoogle.emit(createFakeGoogleWrapper());\n  }\n}\n\ndeclare global {\n  interface Window {\n    google: any;\n  }\n}\n","<ng-container>\n  <spiderly-button\n    (onClick)=\"handleGoogleLogin()\"\n    [label]=\"label\"\n    [outlined]=\"true\"\n    [style]=\"{ width: '100%' }\"\n  >\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"0.98em\"\n      height=\"1em\"\n      viewBox=\"0 0 256 262\"\n    >\n      <path\n        fill=\"#4285f4\"\n        d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"\n      />\n      <path\n        fill=\"#34a853\"\n        d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"\n      />\n      <path\n        fill=\"#fbbc05\"\n        d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"\n      />\n      <path\n        fill=\"#eb4335\"\n        d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"\n      />\n    </svg>\n  </spiderly-button>\n</ng-container>\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ConfigServiceBase {\n  production = false;\n  apiUrl: string;\n  frontendUrl = 'http://localhost:4200';\n  GoogleClientId: string;\n  showGoogleAuth = false;\n  companyName = 'Company Name';\n  primaryColor = '#111b2c';\n\n  /* URLs */\n  loginSlug = 'login';\n\n  /* Local storage */\n  accessTokenKey = 'access_token';\n  refreshTokenKey = 'refresh_token';\n  browserIdKey = 'browser_id';\n\n  httpOptions = {};\n  httpSkipSpinnerOptions = {\n    headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n    params: new HttpParams().set('X-Skip-Spinner', 'true'),\n  };\n\n  logoPath = 'assets/images/logo/logo.svg';\n\n  /* Pagination */\n  defaultPageSize = 10;\n\n  constructor() {}\n}\n","import { BaseEntity } from './base-entity';\n\nexport class InitCompanyAuthDialogDetails extends BaseEntity {\n  image?: string;\n  companyName?: string;\n\n  constructor({\n    image,\n    companyName,\n  }: {\n    image?: string;\n    companyName?: string;\n  } = {}) {\n    super();\n\n    this.image = image;\n    this.companyName = companyName;\n  }\n\n  static readonly typeName = 'InitCompanyAuthDialogDetails' as const;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n  AuthResult,\n  AuthResultWithCookies,\n  ExternalProvider,\n  Login,\n  RefreshTokenRequest,\n  SendLoginVerificationEmailResult,\n  UserBase,\n  VerificationTokenRequest,\n} from '../entities/security-entities';\nimport { ConfigServiceBase } from './config.service.base';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ApiSecurityService {\n  constructor(\n    protected http: HttpClient,\n    protected config: ConfigServiceBase,\n  ) {}\n\n  //#region Authentication\n\n  login = (request: VerificationTokenRequest): Observable<AuthResult> => {\n    return this.http.post<AuthResult>(\n      `${this.config.apiUrl}/Security/Login`,\n      request,\n      this.config.httpOptions,\n    );\n  };\n\n  loginExternal = (\n    externalProviderDTO: ExternalProvider,\n  ): Observable<AuthResult> => {\n    return this.http.post<AuthResult>(\n      `${this.config.apiUrl}/Security/LoginExternal`,\n      externalProviderDTO,\n      this.config.httpOptions,\n    );\n  };\n\n  sendLoginVerificationEmail = (\n    loginDTO: Login,\n  ): Observable<SendLoginVerificationEmailResult> => {\n    return this.http.post<SendLoginVerificationEmailResult>(\n      `${this.config.apiUrl}/Security/SendLoginVerificationEmail`,\n      loginDTO,\n      this.config.httpOptions,\n    );\n  };\n\n  loginWithCookies = (\n    request: VerificationTokenRequest,\n  ): Observable<AuthResultWithCookies> => {\n    return this.http.post<AuthResultWithCookies>(\n      `${this.config.apiUrl}/Security/LoginWithCookies`,\n      request,\n      this.config.httpOptions,\n    );\n  };\n\n  loginExternalWithCookies = (\n    externalProviderDTO: ExternalProvider,\n  ): Observable<AuthResultWithCookies> => {\n    return this.http.post<AuthResultWithCookies>(\n      `${this.config.apiUrl}/Security/LoginExternalWithCookies`,\n      externalProviderDTO,\n      this.config.httpOptions,\n    );\n  };\n\n  logout = (browserId: string): Observable<any> => {\n    return this.http.get<any>(\n      `${this.config.apiUrl}/Security/Logout?browserId=${browserId}`,\n    );\n  };\n\n  logoutWithCookies = (browserId: string): Observable<any> => {\n    return this.http.get<any>(\n      `${this.config.apiUrl}/Security/LogoutWithCookies?browserId=${browserId}`,\n    );\n  };\n\n  refreshTokenWithHeaders = (request: RefreshTokenRequest): Observable<AuthResult> => {\n    return this.http.post<AuthResult>(\n      `${this.config.apiUrl}/Security/RefreshTokenWithHeaders`,\n      request,\n      this.config.httpOptions,\n    );\n  };\n\n  refreshTokenWithCookies = (browserId: string): Observable<AuthResultWithCookies> => {\n    return this.http.get<AuthResultWithCookies>(\n      `${this.config.apiUrl}/Security/RefreshTokenWithCookies?browserId=${browserId}`,\n    );\n  };\n\n  //#endregion\n\n  //#region User\n\n  getCurrentUserBase = (): Observable<UserBase> => {\n    return this.http.get<UserBase>(\n      `${this.config.apiUrl}/Security/GetCurrentUserBase`,\n      this.config.httpSkipSpinnerOptions,\n    );\n  };\n\n  getCurrentUserPermissionCodes = (): Observable<string[]> => {\n    return this.http.get<string[]>(\n      `${this.config.apiUrl}/Security/GetCurrentUserPermissionCodes`,\n      this.config.httpSkipSpinnerOptions,\n    );\n  };\n\n  //#endregion\n}\n","import { Inject, Injectable, OnDestroy, PLATFORM_ID } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, Observable, of, Subject, Subscription } from 'rxjs';\nimport { map, tap, delay, finalize } from 'rxjs/operators';\nimport { SocialUser, SocialAuthService } from '@abacritt/angularx-social-login';\nimport {\n  ExternalProvider,\n  Login,\n  VerificationTokenRequest,\n  AuthResult,\n  RefreshTokenRequest,\n  UserBase,\n} from '../entities/security-entities';\nimport { ConfigServiceBase } from './config.service.base';\nimport { ApiSecurityService } from './api.service.security';\nimport { InitCompanyAuthDialogDetails } from '../entities/init-company-auth-dialog-details';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AuthServiceBase implements OnDestroy {\n  private readonly apiUrl: string = this.config.apiUrl;\n  private timer?: Subscription;\n\n  protected _currentUserPermissionCodes = new BehaviorSubject<string[] | null>(\n    undefined,\n  );\n  currentUserPermissionCodes$ = this._currentUserPermissionCodes.asObservable();\n\n  protected _user = new BehaviorSubject<UserBase | null>(undefined);\n  user$ = this._user.asObservable();\n\n  // Google auth\n  private authChangeSub = new Subject<boolean>();\n  private extAuthChangeSub = new Subject<SocialUser>();\n  public authChanged = this.authChangeSub.asObservable();\n  public extAuthChanged = this.extAuthChangeSub.asObservable();\n\n  constructor(\n    protected router: Router,\n    protected http: HttpClient,\n    protected externalAuthService: SocialAuthService,\n    protected apiService: ApiSecurityService,\n    protected config: ConfigServiceBase,\n    @Inject(PLATFORM_ID) protected platformId: Object,\n  ) {\n    if (isPlatformBrowser(platformId)) {\n      window.addEventListener('storage', this.storageEventListener);\n    }\n\n    // Google auth\n    this.externalAuthService.authState.subscribe((user) => {\n      const externalAuth: ExternalProvider = {\n        // provider: user.provider,\n        idToken: user.idToken,\n      };\n      this.loginExternal(externalAuth).subscribe((authResult) => {\n        this.onAfterLoginExternal();\n      });\n      this.extAuthChangeSub.next(user);\n    });\n  }\n\n  private storageEventListener = (event: StorageEvent) => {\n    if (event.storageArea === localStorage) {\n      if (event.key === 'logout-event') {\n        this.stopTokenTimer();\n        this._user.next(null);\n\n        this._currentUserPermissionCodes.next(null);\n      }\n      if (event.key === 'login-event') {\n        this.stopTokenTimer();\n\n        this.apiService.getCurrentUserBase().subscribe((user: UserBase) => {\n          this._user.next({\n            id: user.id,\n            email: user.email,\n          });\n\n          this.setCurrentUserPermissionCodes().subscribe();\n        });\n      }\n    }\n  };\n\n  sendLoginVerificationEmail(body: Login): Observable<any> {\n    const browserId = this.getBrowserId();\n    body.browserId = browserId;\n    return this.apiService.sendLoginVerificationEmail(body);\n  }\n\n  login(body: VerificationTokenRequest): Observable<Promise<AuthResult>> {\n    const browserId = this.getBrowserId();\n    body.browserId = browserId;\n    const loginResultObservable = this.http.post<AuthResult>(\n      `${this.apiUrl}/Security/Login`,\n      body,\n    );\n    return this.handleLoginResult(loginResultObservable);\n  }\n\n  loginExternal(body: ExternalProvider): Observable<Promise<AuthResult>> {\n    const browserId = this.getBrowserId();\n    body.browserId = browserId;\n    const loginResultObservable = this.http.post<AuthResult>(\n      `${this.apiUrl}/Security/LoginExternal`,\n      body,\n    );\n    return this.handleLoginResult(loginResultObservable);\n  }\n\n  onAfterLoginExternal = () => {\n    this.navigateToDashboard();\n  };\n\n  handleLoginResult(loginResultObservable: Observable<AuthResult>) {\n    return loginResultObservable.pipe(\n      map(async (loginResult: AuthResult) => {\n        this.setLocalStorage(loginResult);\n        this._user.next({\n          id: loginResult.userId,\n          email: loginResult.email,\n        });\n        this.startTokenTimer();\n        this.setCurrentUserPermissionCodes().subscribe();\n        return loginResult;\n      }),\n    );\n  }\n\n  logout() {\n    const browserId = this.getBrowserId();\n    this.http\n      .get(`${this.apiUrl}/Security/Logout?browserId=${browserId}`)\n      .pipe(\n        finalize(() => {\n          this.clearLocalStorage();\n          this._user.next(null);\n          this.onAfterLogout();\n          this.stopTokenTimer();\n        }),\n      )\n      .subscribe();\n  }\n\n  onAfterLogout = () => {\n    this._currentUserPermissionCodes.next(null);\n    this.router.navigate([this.config.loginSlug]);\n  };\n\n  refreshToken(): Observable<AuthResult> {\n    const refreshToken = localStorage.getItem(this.config.refreshTokenKey);\n\n    if (!refreshToken) {\n      this.clearLocalStorage();\n      return of(null);\n    }\n\n    const browserId = this.getBrowserId();\n    const body = new RefreshTokenRequest();\n    body.browserId = browserId;\n    body.refreshToken = refreshToken;\n\n    return this.http\n      .post<AuthResult>(\n        `${this.apiUrl}/Security/RefreshTokenWithHeaders`,\n        body,\n        this.config.httpSkipSpinnerOptions,\n      )\n      .pipe(\n        map((loginResult) => {\n          this._user.next({\n            id: loginResult.userId,\n            email: loginResult.email,\n          });\n\n          this.setLocalStorage(loginResult);\n          this.startTokenTimer();\n          this.onAfterRefreshToken();\n\n          return loginResult;\n        }),\n      );\n  }\n\n  onAfterRefreshToken = () => {\n    this.setCurrentUserPermissionCodes().subscribe(); // FT: Needs to be after setting local storage\n  };\n\n  setLocalStorage(loginResult: AuthResult) {\n    localStorage.setItem(this.config.accessTokenKey, loginResult.accessToken);\n    localStorage.setItem(this.config.refreshTokenKey, loginResult.refreshToken);\n    localStorage.setItem('login-event', 'login' + Math.random());\n  }\n\n  clearLocalStorage() {\n    localStorage.removeItem(this.config.accessTokenKey);\n    localStorage.removeItem(this.config.refreshTokenKey);\n    localStorage.setItem('logout-event', 'logout' + Math.random());\n  }\n\n  getBrowserId(): string {\n    let browserId = localStorage.getItem(this.config.browserIdKey); // FT: We don't need to remove this from the local storage ever, only if the user manuely deletes it, we will handle it\n    if (!browserId) {\n      browserId = crypto.randomUUID();\n      localStorage.setItem(this.config.browserIdKey, browserId);\n    }\n    return browserId;\n  }\n\n  isAccessTokenExpired(): boolean {\n    const expired = this.getTokenRemainingTime() < 5000;\n\n    return expired;\n  }\n\n  getTokenRemainingTime(): number {\n    const accessToken = this.getAccessToken();\n\n    if (!accessToken) {\n      return 0;\n    }\n\n    const jwtToken = JSON.parse(atob(accessToken.split('.')[1]));\n    const expires = new Date(jwtToken.exp * 1000);\n\n    return expires.getTime() - Date.now();\n  }\n\n  getAccessToken(): string {\n    if (isPlatformBrowser(this.platformId)) {\n      return localStorage.getItem(this.config.accessTokenKey);\n    }\n\n    return null;\n  }\n\n  private startTokenTimer() {\n    const timeout = this.getTokenRemainingTime();\n    this.timer = of(true)\n      .pipe(\n        delay(timeout),\n        tap({\n          next: () => this.refreshToken().subscribe(),\n        }),\n      )\n      .subscribe();\n  }\n\n  private stopTokenTimer() {\n    this.timer?.unsubscribe();\n  }\n\n  navigateToDashboard() {\n    this.router.navigate(['/']);\n  }\n\n  initCompanyAuthDialogDetails =\n    (): Observable<InitCompanyAuthDialogDetails> => {\n      return of(\n        new InitCompanyAuthDialogDetails({\n          image: this.config.logoPath,\n          companyName: this.config.companyName,\n        }),\n      );\n    };\n\n  setCurrentUserPermissionCodes(): Observable<string[]> {\n    return this.apiService.getCurrentUserPermissionCodes().pipe(\n      map((permissionCodes) => {\n        this._currentUserPermissionCodes.next(permissionCodes);\n        return permissionCodes;\n      }),\n    );\n  }\n\n  ngOnDestroy(): void {\n    if (isPlatformBrowser(this.platformId)) {\n      window.removeEventListener('storage', this.storageEventListener);\n    }\n\n    this.onAfterNgOnDestroy();\n  }\n\n  onAfterNgOnDestroy = () => {};\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output } from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\nimport { GoogleButtonComponent } from '../../spiderly-buttons/google-button/google-button.component';\n\n@Component({\n  selector: 'auth',\n  templateUrl: './auth.component.html',\n  styles: [],\n  imports: [CommonModule, GoogleButtonComponent, TranslocoDirective],\n})\nexport class AuthComponent {\n  private initCompanyAuthDialogDetailsSubscription: Subscription | null = null;\n\n  @Output() onCompanyNameChange: EventEmitter<string> = new EventEmitter();\n\n  companyName: string;\n  image: string;\n\n  constructor(\n    public config: ConfigServiceBase,\n    private authService: AuthServiceBase,\n  ) {}\n\n  ngOnInit() {\n    this.initCompanyDetails();\n  }\n\n  initCompanyDetails() {\n    this.initCompanyAuthDialogDetailsSubscription = this.authService\n      .initCompanyAuthDialogDetails()\n      .subscribe((initCompanyAuthDialogDetails) => {\n        if (initCompanyAuthDialogDetails != null) {\n          this.image = initCompanyAuthDialogDetails.image;\n          this.companyName = initCompanyAuthDialogDetails.companyName;\n          this.onCompanyNameChange.next(this.companyName);\n        }\n      });\n  }\n\n  onGoogleSignIn(googleWrapper: any) {\n    googleWrapper.click();\n  }\n\n  ngOnDestroy(): void {\n    if (this.initCompanyAuthDialogDetailsSubscription) {\n      this.initCompanyAuthDialogDetailsSubscription.unsubscribe();\n    }\n  }\n}\n","<ng-container *transloco=\"let t\">\n  <div class=\"flex min-h-screen overflow-hidden p-5\">\n    <div class=\"flex flex-col w-full\">\n      <div\n        class=\"w-full sm:w-120\"\n        style=\"\n          margin: auto;\n          border-radius: 50px;\n          padding: 0.3rem;\n          background: linear-gradient(\n            180deg,\n            var(--p-primary-color) 10%,\n            rgba(33, 150, 243, 0) 30%\n          );\n        \"\n      >\n        <div\n          class=\"surface-card py-12 px-8 sm:px-12\"\n          style=\"border-radius: 45px\"\n        >\n          <div class=\"flex justify-center\" style=\"margin-bottom: 38px\">\n            <img\n              *ngIf=\"image != null\"\n              [src]=\"image\"\n              alt=\"{{ companyName }} Logo\"\n              title=\"{{ companyName }} Logo\"\n              class=\"max-h-15\"\n            />\n            <i\n              *ngIf=\"image == null\"\n              class=\"pi pi-spin pi-spinner primary-color\"\n              style=\"font-size: 2rem\"\n            ></i>\n          </div>\n\n          <ng-content></ng-content>\n\n          <div *ngIf=\"config.showGoogleAuth\">\n            <div\n              style=\"\n                display: flex;\n                align-items: center;\n                gap: 7px;\n                justify-content: center;\n                margin-bottom: 16px;\n              \"\n            >\n              <div class=\"separator\"></div>\n              <div>{{ t(\"or\") }}</div>\n              <div class=\"separator\"></div>\n            </div>\n            <div>\n              <!-- https://code-maze.com/how-to-sign-in-with-google-angular-aspnet-webapi/ -->\n              <google-button\n                (loginWithGoogle)=\"onGoogleSignIn($event)\"\n                [label]=\"t('ContinueWithGoogle')\"\n              ></google-button>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</ng-container>\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'panel-body',\n  templateUrl: './panel-body.component.html',\n  styleUrl: './panel-body.component.scss',\n  standalone: false,\n})\nexport class PanelBodyComponent implements OnInit {\n  @Input() normalBottomPadding: boolean = false; // FT: By default we set to false, when the grid is inside the body.\n\n  constructor() {}\n\n  ngOnInit(): void {}\n}\n","<!-- this is selector, not the class -->\n<div\n  class=\"panel-body\"\n  [ngClass]=\"{\n    'non-grid-panel-bottom-padding': normalBottomPadding,\n  }\"\n  style=\"overflow: auto\"\n>\n  <!-- 'card': true, -->\n  <ng-content></ng-content>\n</div>\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'panel-footer',\n  templateUrl: './panel-footer.component.html',\n  styleUrl: './panel-footer.component.scss',\n  standalone: false,\n})\nexport class PanelFooterComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit(): void {}\n}\n","<div class=\"spiderly-panel-footer\">\n  <div class=\"buttons-wrapper\">\n    <ng-content></ng-content>\n  </div>\n  <span class=\"p-text-secondary\">\n    <ng-content select=\"[footerRight]\"></ng-content>\n  </span>\n</div>\n","import { TranslocoService } from '@jsverse/transloco';\nimport { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n  selector: 'panel-header',\n  templateUrl: './panel-header.component.html',\n  styles: [\n    `\n      .p-panel-icons-end {\n        font-size: 50px;\n      }\n    `,\n  ],\n  standalone: false,\n})\nexport class PanelHeaderComponent implements OnInit {\n  @Input() title: string;\n  @Input() showBigTitle: boolean;\n  @Input() showIcon: boolean = true;\n  @Input() icon: string;\n  @Input() index: number;\n  @Input() tabs: SpiderlyTab[];\n\n  constructor(private translocoService: TranslocoService) {}\n\n  ngOnInit(): void {\n    if (this.title == null)\n      this.title = this.translocoService.translate('Details');\n\n    if (this.showIcon === true && this.icon == null)\n      this.icon = 'pi pi-file-edit';\n  }\n\n  setTabIsSelected(tab: SpiderlyTab) {\n    this.tabs.forEach((t) => {\n      t.isSelected = false;\n    });\n\n    tab.isSelected = true;\n  }\n}\n\nexport class SpiderlyTab {\n  label?: string;\n  id?: number;\n  icon?: string;\n  isSelected?: boolean;\n\n  constructor({\n    label,\n    id,\n    icon,\n    isSelected,\n  }: {\n    label?: string;\n    id?: number;\n    icon?: string;\n    isSelected?: boolean;\n  } = {}) {\n    this.label = label;\n    this.id = id;\n    this.icon = icon;\n    this.isSelected = isSelected;\n  }\n}\n","<div style=\"display: flex; align-items: center; gap: 24px; flex-wrap: wrap\">\n  @if (tabs == null) {\n    <div style=\"display: flex; align-items: center; gap: 8px\">\n      <span *ngIf=\"index != null\" class=\"number-circle\">{{ index + 1 }}</span>\n      <i\n        class=\"{{ icon }} primary-color\"\n        [style]=\"showBigTitle ? 'font-size: 21px' : 'font-size: 16px;'\"\n      ></i>\n      <div [style]=\"showBigTitle ? 'font-size: 17.5px; font-weight: 500;' : ''\">\n        {{ title }}\n      </div>\n    </div>\n  } @else {\n    @for (tab of tabs; track $index) {\n      <div\n        (click)=\"setTabIsSelected(tab)\"\n        [style]=\"{\n          display: 'flex',\n          alignItems: 'center',\n          gap: '8px',\n          cursor: 'pointer',\n          fontWeight: tab.isSelected ? '700' : 'normal',\n        }\"\n      >\n        <span *ngIf=\"index != null\" class=\"number-circle\">{{ index + 1 }}</span>\n        <i\n          class=\"{{ tab.icon }} primary-color\"\n          [style]=\"showBigTitle ? 'font-size: 21px' : 'font-size: 16px;'\"\n        ></i>\n        <div\n          [style]=\"showBigTitle ? 'font-size: 17.5px; font-weight: 500;' : ''\"\n        >\n          {{ tab.label }}\n        </div>\n      </div>\n    }\n  }\n</div>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { MenuItem } from 'primeng/api';\nimport { Menu } from 'primeng/menu';\n\n@Component({\n  selector: 'spiderly-panel',\n  templateUrl: './spiderly-panel.component.html',\n  styleUrl: './spiderly-panel.component.scss',\n  standalone: false,\n})\nexport class SpiderlyPanelComponent implements OnInit {\n  @Input() isFirstMultiplePanel: boolean = false;\n  @Input() isMiddleMultiplePanel: boolean = false;\n  @Input() isLastMultiplePanel: boolean = false;\n  @Input() toggleable: boolean = false;\n  @Input() toggler: 'header' | 'icon' | null = 'icon';\n  @Input() collapsed: boolean = false;\n  @Input() crudMenu: MenuItem[];\n  @Input() showCrudMenu: boolean = true;\n  @Input() showRemoveIcon: boolean = false;\n  @Input() index: number;\n  @Input() showPanelHeader: boolean = true;\n\n  @Output() onMenuIconClick: EventEmitter<number> = new EventEmitter();\n  @Output() onRemoveIconClick: EventEmitter<null> = new EventEmitter();\n\n  @ViewChild('menu') menu: Menu;\n\n  constructor() {}\n\n  ngOnInit(): void {}\n\n  menuItemClick(index: number, event) {\n    this.menu.toggle(event);\n    this.onMenuIconClick.next(index);\n  }\n\n  removeItemClick() {\n    this.onRemoveIconClick.next(null);\n  }\n}\n","<p-panel\n  [showHeader]=\"showPanelHeader\"\n  [ngClass]=\"{\n    'multiple-panel-first-without-header':\n      isFirstMultiplePanel && !showPanelHeader,\n    'multiple-panel-first': isFirstMultiplePanel,\n    'multiple-panel-middle-without-header':\n      isMiddleMultiplePanel && !showPanelHeader,\n    'multiple-panel-middle': isMiddleMultiplePanel,\n    'multiple-panel-last-without-header':\n      isLastMultiplePanel && !showPanelHeader,\n    'multiple-panel-last': isLastMultiplePanel,\n    'panel-border': !isFirstMultiplePanel,\n    'spiderly-panel': true,\n    'panel-header-cursor-pointer': toggler === 'header' && toggleable,\n  }\"\n  [toggleable]=\"toggleable\"\n  [toggler]=\"toggler\"\n  [collapsed]=\"toggleable && collapsed\"\n  expandIcon=\"pi pi-chevron-up\"\n  collapseIcon=\"pi pi-chevron-down\"\n>\n  <ng-template pTemplate=\"header\">\n    <div>\n      <ng-content select=\"panel-header\"></ng-content>\n      <ng-content select=\"[panelHeader]\"></ng-content>\n    </div>\n  </ng-template>\n\n  <ng-template pTemplate=\"icons\">\n    <div *ngIf=\"showCrudMenu && crudMenu\" class=\"mr-2\">\n      <i\n        class=\"pi pi-ellipsis-h icon-hover\"\n        (click)=\"menuItemClick(index, $event)\"\n      ></i>\n      <!-- https://github.com/primefaces/primeng/issues/13934 -->\n      <p-menu\n        #menu\n        [model]=\"crudMenu\"\n        [popup]=\"true\"\n        appendTo=\"body\"\n        [tabindex]=\"undefined\"\n      ></p-menu>\n    </div>\n    <div *ngIf=\"showRemoveIcon\" class=\"mr-2\">\n      <i\n        class=\"pi pi-minus icon-hover error-color-light\"\n        (click)=\"removeItemClick()\"\n      ></i>\n    </div>\n  </ng-template>\n\n  <div class=\"panel-body-wrapper\">\n    <ng-content select=\"panel-body\"></ng-content>\n  </div>\n\n  <ng-content select=\"panel-footer\"></ng-content>\n</p-panel>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PanelBodyComponent } from './panel-body/panel-body.component';\nimport { PanelFooterComponent } from './panel-footer/panel-footer.component';\nimport { PanelHeaderComponent } from './panel-header/panel-header.component';\nimport { SpiderlyPanelComponent } from './spiderly-panel/spiderly-panel.component';\nimport { MenuModule } from 'primeng/menu';\nimport { PanelModule } from 'primeng/panel';\n\n@NgModule({\n  imports: [CommonModule, MenuModule, PanelModule],\n  exports: [\n    PanelHeaderComponent,\n    PanelBodyComponent,\n    PanelFooterComponent,\n    SpiderlyPanelComponent,\n  ],\n  declarations: [\n    PanelHeaderComponent,\n    PanelBodyComponent,\n    PanelFooterComponent,\n    SpiderlyPanelComponent,\n  ],\n  providers: [],\n})\nexport class SpiderlyPanelsModule {}\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  KeyValueDiffers,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { ButtonModule } from 'primeng/button';\nimport { InputOtp } from 'primeng/inputotp';\nimport { SpiderlyControlsModule } from '../../../controls/spiderly-controls.module';\nimport { VerificationTokenRequest } from '../../../entities/security-entities';\nimport { BaseFormService } from '../../../services/base-form.service';\nimport { SpiderlyMessageService } from '../../../services/spiderly-message.service';\nimport { BaseFormComponent } from '../../base-form/base-form.component';\nimport { SpiderlyFormGroup } from '../../spiderly-form-control/spiderly-form-control';\nimport { SpiderlyPanelsModule } from '../../spiderly-panels/spiderly-panels.module';\n\n@Component({\n  selector: 'verification-wrapper',\n  templateUrl: './verification-wrapper.component.html',\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    SpiderlyControlsModule,\n    SpiderlyPanelsModule,\n    ButtonModule,\n    InputOtp,\n    TranslocoDirective,\n  ],\n})\nexport class VerificationWrapperComponent\n  extends BaseFormComponent\n  implements OnInit\n{\n  verificationTokenRequestFormGroup =\n    new SpiderlyFormGroup<VerificationTokenRequest>({});\n\n  @Input() email: string;\n  @Output() onResendVerificationToken: EventEmitter<any> = new EventEmitter();\n  @Output() onCodeSubmit: EventEmitter<string> = new EventEmitter();\n\n  constructor(\n    protected override differs: KeyValueDiffers,\n    protected override http: HttpClient,\n    protected override messageService: SpiderlyMessageService,\n    protected override changeDetectorRef: ChangeDetectorRef,\n    protected override router: Router,\n    protected override route: ActivatedRoute,\n    protected override translocoService: TranslocoService,\n    protected override baseFormService: BaseFormService,\n  ) {\n    super(\n      differs,\n      http,\n      messageService,\n      changeDetectorRef,\n      router,\n      route,\n      translocoService,\n      baseFormService,\n    );\n  }\n\n  override ngOnInit() {\n    this.initVerificationTokenRequestFormGroup(\n      new VerificationTokenRequest({ email: this.email }),\n    );\n  }\n\n  initVerificationTokenRequestFormGroup(model: VerificationTokenRequest) {\n    this.baseFormService.initFormGroup(\n      this.verificationTokenRequestFormGroup,\n      VerificationTokenRequest,\n      model,\n      ['verificationCode'],\n    );\n  }\n\n  codeSubmit() {\n    let isValid: boolean = this.baseFormService.isControlValid(\n      this.verificationTokenRequestFormGroup,\n    );\n\n    if (isValid) {\n      this.onCodeSubmit.next(\n        this.verificationTokenRequestFormGroup.controls.verificationCode.getRawValue(),\n      );\n    }\n  }\n\n  resendVerificationToken() {\n    this.onResendVerificationToken.next(null);\n  }\n}\n","<ng-container *transloco=\"let t\">\n  <div\n    class=\"min-h-screen\"\n    style=\"display: flex; justify-content: center; align-items: center\"\n  >\n    <div class=\"dialog\" style=\"padding: 0px\">\n      @if (verificationTokenRequestFormGroup != null) {\n        <spiderly-panel>\n          <panel-header\n            [title]=\"t('AccountVerificationHeader')\"\n            [showBigTitle]=\"true\"\n            icon=\"pi pi-envelope\"\n          ></panel-header>\n\n          <panel-body>\n            <form class=\"spiderly-grid\">\n              <div class=\"col-8\">\n                <div style=\"font-size: 17.5px\">\n                  {{ t(\"AccountVerificationTitle\") }}\n                </div>\n              </div>\n              <div class=\"col-8\">\n                {{ t(\"AccountVerificationDescription\", { email: email }) }}\n              </div>\n              <div class=\"col-8\">\n                <p-inputOtp\n                  [formControl]=\"verificationTokenRequestFormGroup.getControl('verificationCode')\"\n                  [length]=\"6\"\n                  [integerOnly]=\"true\"\n                  [autofocus]=\"true\"\n                ></p-inputOtp>\n              </div>\n              <div class=\"col-8\">\n                <spiderly-button\n                  (onClick)=\"codeSubmit()\"\n                  [label]=\"t('Submit')\"\n                  icon=\"pi pi-verified\"\n                  type=\"submit\"\n                ></spiderly-button>\n              </div>\n            </form>\n          </panel-body>\n\n          <panel-footer>\n            <a\n              pButton\n              class=\"p-button-link\"\n              [label]=\"t('GoToGmail')\"\n              icon=\"pi pi-external-link\"\n              href=\"https://mail.google.com/mail/u/\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            ></a>\n            <a\n              pButton\n              class=\"p-button-link\"\n              [label]=\"t('GoToYahoo')\"\n              icon=\"pi pi-external-link\"\n              href=\"https://mail.yahoo.com/d/folders/1/\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            ></a>\n          </panel-footer>\n          <panel-footer>\n            <div>\n              {{ t(\"ResendVerificationCodeFirstPart\") }}\n              <a class=\"link\" (click)=\"resendVerificationToken()\">{{\n                t(\"ResendVerificationCodeLinkSecondPart\")\n              }}</a>\n            </div>\n          </panel-footer>\n        </spiderly-panel>\n      } @else {\n        <!-- TODO FT: Add skeleton -->\n      }\n    </div>\n  </div>\n</ng-container>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { VerificationWrapperComponent } from './verification-wrapper.component';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { SpiderlyMessageService } from '../../../services/spiderly-message.service';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\n\n@Component({\n  selector: 'login-verification',\n  templateUrl: './login-verification.component.html',\n  imports: [VerificationWrapperComponent],\n})\nexport class LoginVerificationComponent implements OnInit {\n  @Input() email: string;\n  @Input() userId: number;\n\n  constructor(\n    private authService: AuthServiceBase,\n    private messageService: SpiderlyMessageService,\n    private translocoService: TranslocoService,\n  ) {}\n\n  ngOnInit() {}\n\n  resendVerificationToken() {\n    this.authService\n      .sendLoginVerificationEmail({ email: this.email })\n      .subscribe(() => {\n        this.messageService.successMessage(\n          this.translocoService.translate('SuccessfullySentVerificationCode'),\n        );\n      });\n  }\n\n  onCodeSubmit(event: string) {\n    this.authService\n      .login({ email: this.email, verificationCode: event })\n      .subscribe(() => {\n        this.messageService.successMessage(\n          this.translocoService.translate(\n            'YouHaveSuccessfullyVerifiedYourAccount',\n          ),\n        );\n        this.authService.navigateToDashboard();\n      });\n  }\n}\n","<verification-wrapper\n  [email]=\"email\"\n  (onResendVerificationToken)=\"resendVerificationToken()\"\n  (onCodeSubmit)=\"onCodeSubmit($event)\"\n></verification-wrapper>\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  ChangeDetectorRef,\n  Component,\n  KeyValueDiffers,\n  OnInit,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { SpiderlyControlsModule } from '../../../controls/spiderly-controls.module';\nimport { Login } from '../../../entities/security-entities';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { BaseFormService } from '../../../services/base-form.service';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\nimport { SpiderlyMessageService } from '../../../services/spiderly-message.service';\nimport { BaseFormComponent } from '../../base-form/base-form.component';\nimport { SpiderlyFormGroup } from '../../spiderly-form-control/spiderly-form-control';\nimport { AuthComponent } from '../partials/auth.component';\nimport { LoginVerificationComponent } from '../partials/login-verification.component';\n\n@Component({\n  selector: 'app-login',\n  templateUrl: './login.component.html',\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    AuthComponent,\n    SpiderlyControlsModule,\n    LoginVerificationComponent,\n    TranslocoDirective,\n  ],\n})\nexport class LoginComponent extends BaseFormComponent implements OnInit {\n  loginFormGroup = new SpiderlyFormGroup<Login>({});\n\n  companyName: string;\n  showEmailSentDialog: boolean = false;\n\n  constructor(\n    protected override differs: KeyValueDiffers,\n    protected override http: HttpClient,\n    protected override messageService: SpiderlyMessageService,\n    protected override changeDetectorRef: ChangeDetectorRef,\n    protected override router: Router,\n    protected override route: ActivatedRoute,\n    protected override translocoService: TranslocoService,\n    protected override baseFormService: BaseFormService,\n    private authService: AuthServiceBase,\n    private config: ConfigServiceBase,\n  ) {\n    super(\n      differs,\n      http,\n      messageService,\n      changeDetectorRef,\n      router,\n      route,\n      translocoService,\n      baseFormService,\n    );\n  }\n\n  override ngOnInit() {\n    this.initLoginFormGroup(new Login({}));\n  }\n\n  initLoginFormGroup(model: Login) {\n    this.baseFormService.initFormGroup(this.loginFormGroup, Login, model, [\n      'email',\n    ]);\n  }\n\n  companyNameChange(companyName: string) {\n    this.companyName = companyName;\n  }\n\n  sendLoginVerificationEmail() {\n    let isFormGroupValid: boolean = this.baseFormService.isControlValid(\n      this.loginFormGroup,\n    );\n\n    if (isFormGroupValid == false) {\n      this.baseFormService.showInvalidFieldsMessage();\n      return;\n    }\n\n    this.authService\n      .sendLoginVerificationEmail(this.loginFormGroup.getRawValue())\n      .subscribe((result) => {\n        if (result.message) {\n          this.messageService.successMessage(result.message);\n        }\n        this.showEmailSentDialog = true;\n      });\n  }\n}\n","<ng-container *transloco=\"let t\">\n  @if (loginFormGroup != null) {\n    @if (showEmailSentDialog == false) {\n      <auth (onCompanyNameChange)=\"companyNameChange($event)\">\n        <!-- We are not loading anything from the server here so we don't need defer block -->\n        <form [formGroup]=\"loginFormGroup\" style=\"margin-bottom: 16px\">\n          <div>\n            <spiderly-textbox\n              [control]=\"loginFormGroup.getControl('email')\"\n            ></spiderly-textbox>\n          </div>\n\n          <div class=\"mt-4 mb-6\">\n            <div class=\"text-center\" style=\"font-size: smaller\">\n              {{ t(\"AgreementsOnRegister\") }}\n              <b\n                routerLink=\"/user-agreement\"\n                class=\"primary-color cursor-pointer\"\n                >{{ t(\"UserAgreement\") }}</b\n              >\n              {{ t(\"and\") }}\n              <b\n                routerLink=\"/privacy-policy\"\n                class=\"primary-color cursor-pointer\"\n                >{{ t(\"PrivacyPolicy\") }}</b\n              >.\n            </div>\n          </div>\n\n          <div style=\"display: flex; flex-direction: column; gap: 16px\">\n            <spiderly-button\n              [label]=\"t('Login')\"\n              (onClick)=\"sendLoginVerificationEmail()\"\n              [outlined]=\"true\"\n              [style]=\"{ width: '100%' }\"\n              type=\"submit\"\n            ></spiderly-button>\n          </div>\n        </form>\n      </auth>\n    } @else {\n      <login-verification\n        [email]=\"loginFormGroup.controls.email.getRawValue()\"\n      ></login-verification>\n    }\n  } @else {\n    <!-- TODO: Add skeleton -->\n  }\n</ng-container>\n","import { Component, Input } from '@angular/core';\nimport { SkeletonModule } from 'primeng/skeleton';\n\n@Component({\n  selector: 'card-skeleton',\n  templateUrl: './card-skeleton.component.html',\n  styles: [],\n  imports: [SkeletonModule],\n})\nexport class CardSkeletonComponent {\n  @Input() height: number = 400;\n  titleHeight: number = 23;\n  dataHeight: number;\n  padding: number = 21;\n  titleMarginBottom: number = 14;\n  titleMarginTop: number = 4;\n\n  ngOnInit() {\n    this.dataHeight =\n      this.height -\n      (this.titleHeight +\n        this.padding * 2 +\n        this.titleMarginBottom +\n        this.titleMarginTop);\n  }\n}\n","<div\n  class=\"rounded border surface-border p-6 surface-card\"\n  [style]=\"'height: ' + height + 'px;'\"\n>\n  <div\n    [style]=\"\n      'margin-bottom:' +\n      titleMarginBottom +\n      'px; margin-top:' +\n      titleMarginTop +\n      'px;'\n    \"\n  >\n    <p-skeleton width=\"160px\" [height]=\"titleHeight + 'px'\"></p-skeleton>\n  </div>\n  <div [style]=\"'height: ' + dataHeight + 'px;'\">\n    <p-skeleton width=\"100%\" height=\"100%\" />\n  </div>\n</div>\n","import { Component } from '@angular/core';\nimport { ConfigServiceBase } from '../../services/config.service.base';\n\n@Component({\n  selector: 'footer',\n  templateUrl: './footer.component.html',\n  standalone: true,\n})\nexport class FooterComponent {\n  companyName: string = this.config.companyName;\n\n  constructor(private config: ConfigServiceBase) {}\n}\n","<div class=\"layout-footer\">\n  <span class=\"font-medium ml-2\">{{ companyName }}</span>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { MenuItem } from 'primeng/api';\nimport { SpiderlyPanelsModule } from '../spiderly-panels/spiderly-panels.module';\n\n@Component({\n  selector: 'index-card',\n  templateUrl: './index-card.component.html',\n  imports: [CommonModule, SpiderlyPanelsModule],\n})\nexport class IndexCardComponent {\n  @Input() last: boolean;\n  @Input() index: number;\n  @Input() header: string = '';\n  @Input() description: string;\n  @Input() showRemoveIcon: boolean;\n  @Input() showCrudMenu: boolean = true;\n\n  @Input() crudMenu: MenuItem[];\n\n  @Output() onMenuIconClick = new EventEmitter<number>();\n  @Output() onRemoveIconClick = new EventEmitter<null>();\n\n  constructor(protected formBuilder: FormBuilder) {}\n\n  ngOnInit() {}\n\n  menuIconClick(index: number) {\n    this.onMenuIconClick.next(index);\n  }\n\n  removeIconClick() {\n    this.onRemoveIconClick.next(null);\n  }\n}\n","<div\n  [ngClass]=\"{\n    'last-child-zero-margin': last,\n    'card-margin-bottom': true,\n  }\"\n>\n  <spiderly-panel\n    [crudMenu]=\"crudMenu\"\n    [showCrudMenu]=\"showCrudMenu\"\n    (onMenuIconClick)=\"menuIconClick($event)\"\n    [showRemoveIcon]=\"showRemoveIcon\"\n    (onRemoveIconClick)=\"removeIconClick()\"\n    [index]=\"index\"\n  >\n    <panel-header\n      [title]=\"header\"\n      [index]=\"index\"\n      [showIcon]=\"false\"\n    ></panel-header>\n\n    <panel-body>\n      <ng-content>\n        <!-- Custom things below description -->\n      </ng-content>\n    </panel-body>\n  </spiderly-panel>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { SpiderlyPanelsModule } from '../spiderly-panels/spiderly-panels.module';\n\n@Component({\n  selector: 'info-card',\n  templateUrl: './info-card.component.html',\n  styleUrl: './info-card.component.scss',\n  imports: [CommonModule, SpiderlyPanelsModule],\n})\nexport class InfoCardComponent {\n  @Input() header = '';\n  @Input() showSmallIcon = true;\n  @Input() icon = 'pi pi-info-circle';\n  @Input() textColor = '';\n\n  constructor(protected formBuilder: FormBuilder) {}\n\n  ngOnInit() {}\n}\n","<div class=\"card responsive-card-padding info-card\">\n  <div class=\"info-card__content\">\n    <div>\n      <div class=\"info-card__header\">\n        <i *ngIf=\"showSmallIcon\" class=\"{{ icon }} info-card__icon\"></i>\n        {{ header }}\n      </div>\n      <div class=\"info-card__body\">\n        <ng-content></ng-content>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"info-card__background-icon\">\n    <i class=\"{{ icon }}\"></i>\n  </div>\n</div>\n","import { BaseEntity } from './base-entity';\nimport { UserBase } from './security-entities';\n\nexport class InitTopBarData extends BaseEntity {\n  companyName?: string;\n  userProfilePath?: string;\n  showProfileIcon?: boolean;\n  currentUser?: UserBase;\n\n  constructor({\n    companyName,\n    userProfilePath,\n    showProfileIcon,\n    currentUser,\n  }: {\n    companyName?: string;\n    userProfilePath?: string;\n    showProfileIcon?: boolean;\n    currentUser?: UserBase;\n  } = {}) {\n    super();\n\n    this.companyName = companyName;\n    this.userProfilePath = userProfilePath;\n    this.showProfileIcon = showProfileIcon;\n    this.currentUser = currentUser;\n  }\n\n  static readonly typeName = 'InitTopBarData' as const;\n}\n","import { AuthServiceBase } from './auth.service.base';\nimport { ApiSecurityService } from './api.service.security';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport {\n  map,\n  Observable,\n  of,\n  Subject,\n  Subscription,\n} from 'rxjs';\nimport { InitTopBarData } from '../entities/init-top-bar-data';\nimport { ConfigServiceBase } from './config.service.base';\nimport { AutoCompleteCompleteEvent } from 'primeng/autocomplete';\nimport { Namebook } from '../entities/namebook';\n\nexport interface AppConfig {\n  inputStyle: string;\n  colorScheme: string;\n  theme: string;\n  ripple: boolean;\n  menuMode: string;\n  scale: number;\n  color: string;\n}\n\ninterface LayoutState {\n  staticMenuDesktopInactive: boolean;\n  overlayMenuActive: boolean;\n  profileSidebarVisible: boolean;\n  profileDropdownSidebarVisible: boolean;\n  configSidebarVisible: boolean;\n  staticMenuMobileActive: boolean;\n  menuHoverActive: boolean;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class LayoutServiceBase implements OnDestroy {\n  userSubscription: Subscription;\n\n  layoutConfig: AppConfig = {\n    ripple: false,\n    inputStyle: 'outlined',\n    menuMode: 'static',\n    colorScheme: 'light',\n    theme: 'lara-light-indigo',\n    scale: 14,\n    color: `var(--p-primary-color)`,\n  };\n\n  state: LayoutState = {\n    staticMenuDesktopInactive: false,\n    overlayMenuActive: false,\n    profileSidebarVisible: false,\n    profileDropdownSidebarVisible: false,\n    configSidebarVisible: false,\n    staticMenuMobileActive: false,\n    menuHoverActive: false,\n  };\n\n  private configUpdate = new Subject<AppConfig>();\n\n  private overlayOpen = new Subject<any>();\n\n  configUpdate$ = this.configUpdate.asObservable();\n\n  overlayOpen$ = this.overlayOpen.asObservable();\n\n  constructor(\n    protected apiService: ApiSecurityService,\n    protected config: ConfigServiceBase,\n    protected authService: AuthServiceBase,\n  ) {}\n\n  onMenuToggle() {\n    if (this.isOverlay()) {\n      this.state.overlayMenuActive = !this.state.overlayMenuActive;\n      if (this.state.overlayMenuActive) {\n        this.overlayOpen.next(null);\n      }\n    }\n\n    if (this.isDesktop()) {\n      this.state.staticMenuDesktopInactive =\n        !this.state.staticMenuDesktopInactive;\n    } else {\n      this.state.staticMenuMobileActive = !this.state.staticMenuMobileActive;\n\n      if (this.state.staticMenuMobileActive) {\n        this.overlayOpen.next(null);\n      }\n    }\n  }\n\n  showProfileSidebar() {\n    this.state.profileSidebarVisible = !this.state.profileSidebarVisible;\n    if (this.state.profileSidebarVisible) {\n      this.overlayOpen.next(null);\n    }\n  }\n\n  showProfileDropdownSidebar() {\n    this.state.profileDropdownSidebarVisible =\n      !this.state.profileDropdownSidebarVisible;\n    if (this.state.profileDropdownSidebarVisible) {\n      this.overlayOpen.next(null);\n    }\n  }\n\n  showConfigSidebar() {\n    this.state.configSidebarVisible = true;\n  }\n\n  isOverlay() {\n    return this.layoutConfig.menuMode === 'overlay';\n  }\n\n  isDesktop() {\n    return window.innerWidth > 991;\n  }\n\n  isMobile() {\n    return !this.isDesktop();\n  }\n\n  onConfigUpdate() {\n    this.configUpdate.next(this.layoutConfig);\n  }\n\n  //#region Top Bar\n\n  initTopBarData = (): Observable<InitTopBarData> => {\n    return this.authService.user$.pipe(\n      map((currentUser) => {\n        return new InitTopBarData({\n          companyName: this.config.companyName,\n          userProfilePath: `/administration/users/${currentUser?.id}`,\n          showProfileIcon: true,\n          currentUser: currentUser,\n        });\n      }),\n    );\n  };\n\n  //#endregion\n\n  //#region Side Bar\n\n  searchPartners = (\n    event: AutoCompleteCompleteEvent,\n  ): Observable<Namebook[]> => {\n    return of();\n  };\n\n  partnersAutocompleteButtonClick = (selectedPartner: Namebook) => {};\n\n  //#endregion\n\n  ngOnDestroy(): void {\n    if (this.userSubscription) {\n      this.userSubscription.unsubscribe();\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { MenuChangeEvent } from '../../../entities/menuchangeevent';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SidebarMenuService {\n  private menuSource = new Subject<MenuChangeEvent>();\n  private resetSource = new Subject();\n\n  menuSource$ = this.menuSource.asObservable();\n  resetSource$ = this.resetSource.asObservable();\n\n  onMenuStateChange(event: MenuChangeEvent) {\n    this.menuSource.next(event);\n  }\n\n  reset() {\n    this.resetSource.next(true);\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  HostBinding,\n  Input,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport {\n  animate,\n  state,\n  style,\n  transition,\n  trigger,\n} from '@angular/animations';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { SidebarMenuService } from './sidebar-menu.service';\nimport { SpiderlyMenuItem } from './sidebar-menu.component';\nimport { AutoCompleteCompleteEvent } from 'primeng/autocomplete';\nimport { SpiderlyFormControl } from '../../spiderly-form-control/spiderly-form-control';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { ApiSecurityService } from '../../../services/api.service.security';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\nimport { CommonModule } from '@angular/common';\nimport { SpiderlyControlsModule } from '../../../controls/spiderly-controls.module';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Namebook } from '../../../entities/namebook';\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: '[menuitem]',\n  templateUrl: './menuitem.component.html',\n  animations: [\n    trigger('children', [\n      state(\n        'collapsed',\n        style({\n          height: '0',\n        }),\n      ),\n      state(\n        'expanded',\n        style({\n          height: '*',\n        }),\n      ),\n      transition(\n        'collapsed <=> expanded',\n        animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'),\n      ),\n    ]),\n  ],\n  imports: [\n    CommonModule,\n    RouterModule,\n    TranslocoDirective,\n    SpiderlyControlsModule,\n  ],\n})\nexport class MenuitemComponent implements OnInit, OnDestroy {\n  @Input() item: SpiderlyMenuItem;\n\n  @Input() index!: number;\n\n  @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\n\n  @Input() parentKey!: string;\n\n  active = false;\n\n  private menuSourceSubscription: Subscription;\n\n  private menuResetSubscription: Subscription;\n\n  private permissionSubscription: Subscription | null = null;\n\n  key: string = '';\n\n  selectedPartner = new SpiderlyFormControl<Namebook>(null, {\n    updateOn: 'change',\n  });\n\n  partnerOptions: Namebook[];\n\n  constructor(\n    public layoutService: LayoutServiceBase,\n    private cd: ChangeDetectorRef,\n    public router: Router,\n    private menuService: SidebarMenuService,\n    private authService: AuthServiceBase,\n    private apiService: ApiSecurityService,\n    private config: ConfigServiceBase,\n  ) {\n    this.menuSourceSubscription = this.menuService.menuSource$.subscribe(\n      (value) => {\n        Promise.resolve(null).then(() => {\n          if (value.routeEvent) {\n            this.active =\n              value.key === this.key || value.key.startsWith(this.key + '-')\n                ? true\n                : false;\n          } else {\n            if (\n              value.key !== this.key &&\n              !value.key.startsWith(this.key + '-')\n            ) {\n              this.active = false;\n            }\n          }\n        });\n      },\n    );\n\n    this.menuResetSubscription = this.menuService.resetSource$.subscribe(() => {\n      this.active = false;\n    });\n\n    this.router.events\n      .pipe(filter((event) => event instanceof NavigationEnd))\n      .subscribe((params) => {\n        if (this.item.routerLink) {\n          this.updateActiveStateFromRoute();\n        }\n      });\n  }\n\n  ngOnInit() {\n    this.item.visible = this.item.visible ?? true;\n\n    this.key = this.parentKey\n      ? this.parentKey + '-' + this.index\n      : String(this.index);\n\n    if (this.item.routerLink) {\n      this.updateActiveStateFromRoute();\n    }\n\n    this.permissionSubscription =\n      this.authService.currentUserPermissionCodes$.subscribe(\n        (currentUserPermissionCodes: string[]) => {\n          if (this.item && typeof this.item.hasPermission === 'function') {\n            this.item.visible = this.item.hasPermission(\n              currentUserPermissionCodes,\n            );\n          }\n        },\n      );\n  }\n\n  updateActiveStateFromRoute() {\n    let activeRoute = this.router.isActive(this.item.routerLink[0], {\n      paths: 'exact',\n      queryParams: 'ignored',\n      matrixParams: 'ignored',\n      fragment: 'ignored',\n    });\n\n    if (activeRoute) {\n      this.menuService.onMenuStateChange({ key: this.key, routeEvent: true });\n    }\n  }\n\n  itemClick(event: Event) {\n    // avoid processing disabled items\n    if (this.item.disabled || event === null) {\n      event.preventDefault();\n      return;\n    }\n\n    // execute command\n    if (this.item.command) {\n      this.item.command({ originalEvent: event, item: this.item });\n    }\n\n    // toggle active state\n    if (this.item.items) {\n      this.active = !this.active;\n    }\n\n    this.menuService.onMenuStateChange({ key: this.key });\n  }\n\n  get submenuAnimation() {\n    return this.root ? 'expanded' : this.active ? 'expanded' : 'collapsed';\n  }\n\n  @HostBinding('class.active-menuitem')\n  get activeClass() {\n    return this.active && !this.root;\n  }\n\n  //#region HACK: Partner\n\n  searchPartners(event: AutoCompleteCompleteEvent) {\n    this.layoutService.searchPartners(event).subscribe((po) => {\n      this.partnerOptions = po;\n    });\n  }\n\n  partnersAutocompleteButtonClick = async () => {\n    this.layoutService.partnersAutocompleteButtonClick(\n      this.selectedPartner.value,\n    );\n  };\n\n  //#endregion\n\n  ngOnDestroy() {\n    if (this.menuSourceSubscription) {\n      this.menuSourceSubscription.unsubscribe();\n    }\n\n    if (this.menuResetSubscription) {\n      this.menuResetSubscription.unsubscribe();\n    }\n\n    if (this.permissionSubscription) {\n      this.permissionSubscription.unsubscribe();\n    }\n  }\n}\n","<ng-container *transloco=\"let t\">\n  <div *ngIf=\"root && item.visible === true\" class=\"layout-menuitem-root-text\">\n    {{ item.label }}\n  </div>\n  <a\n    *ngIf=\"(!item.routerLink || item.items) && item.visible === true\"\n    [attr.href]=\"item.url\"\n    (click)=\"itemClick($event)\"\n    [ngClass]=\"item.styleClass\"\n    [attr.target]=\"item.target\"\n    tabindex=\"0\"\n    pRipple\n  >\n    <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\n    <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n    <i\n      class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"\n      *ngIf=\"item.items\"\n    ></i>\n  </a>\n  <a\n    *ngIf=\"item.routerLink && !item.items && item.visible === true\"\n    (click)=\"itemClick($event)\"\n    [ngClass]=\"item.styleClass\"\n    [routerLink]=\"item.routerLink\"\n    routerLinkActive=\"active-route\"\n    [routerLinkActiveOptions]=\"\n      item.routerLinkActiveOptions || {\n        paths: 'exact',\n        queryParams: 'ignored',\n        matrixParams: 'ignored',\n        fragment: 'ignored',\n      }\n    \"\n    [fragment]=\"item.fragment\"\n    [queryParamsHandling]=\"item.queryParamsHandling\"\n    [preserveFragment]=\"item.preserveFragment\"\n    [skipLocationChange]=\"item.skipLocationChange\"\n    [replaceUrl]=\"item.replaceUrl\"\n    [state]=\"item.state\"\n    [queryParams]=\"item.queryParams\"\n    [attr.target]=\"item.target\"\n    tabindex=\"0\"\n    pRipple\n  >\n    <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\n    <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n    <i\n      class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"\n      *ngIf=\"item.items\"\n    ></i>\n  </a>\n\n  <ul\n    *ngIf=\"item.items && item.visible === true\"\n    [@children]=\"submenuAnimation\"\n  >\n    <ng-template ngFor let-child let-i=\"index\" [ngForOf]=\"item.items\">\n      <li\n        menuitem\n        [item]=\"child\"\n        [index]=\"i\"\n        [parentKey]=\"key\"\n        [class]=\"child.badgeStyleClass\"\n      ></li>\n    </ng-template>\n  </ul>\n\n  <!-- Delete this in the future iterations, make link to partner in /partners page -->\n  <spiderly-autocomplete\n    *ngIf=\"item.showPartnerDialog\"\n    [control]=\"selectedPartner\"\n    [options]=\"partnerOptions\"\n    (onTextInput)=\"searchPartners($event)\"\n    label=\"\"\n    [placeholder]=\"t('SelectThePartner')\"\n    [showAddon]=\"true\"\n    (onButtonClick)=\"partnersAutocompleteButtonClick()\"\n    addonIcon=\"pi pi-check\"\n    [emptyMessage]=\"t('LeftCornerPartnersEmptyMessage')\"\n    class=\"mobile-stay-open\"\n  ></spiderly-autocomplete>\n</ng-container>\n","import { TranslocoService } from '@jsverse/transloco';\nimport { Input, OnInit } from '@angular/core';\nimport { Component } from '@angular/core';\nimport { MenuItem } from 'primeng/api';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\nimport { MenuitemComponent } from './menuitem.component';\nimport { CommonModule } from '@angular/common';\n\nexport interface SpiderlyMenuItem extends MenuItem {\n  hasPermission?: (permissionCodes: string[]) => boolean;\n  showPartnerDialog?: boolean;\n}\n\n@Component({\n  selector: 'sidebar-menu', // FT: Don't change selector to 'menu', because other style will apply to it\n  templateUrl: './sidebar-menu.component.html',\n  imports: [CommonModule, MenuitemComponent],\n})\nexport class SidebarMenuComponent implements OnInit {\n  @Input() menu: SpiderlyMenuItem[];\n\n  constructor(\n    public layoutService: LayoutServiceBase,\n    private authService: AuthServiceBase,\n    private translocoService: TranslocoService,\n    private config: ConfigServiceBase,\n  ) {}\n\n  ngOnInit() {}\n\n  ngOnDestroy(): void {}\n}\n","<ul class=\"layout-menu\">\n  <ng-container *ngFor=\"let item of menu; let i = index\">\n    <li\n      menuitem\n      *ngIf=\"!item.separator\"\n      [item]=\"item\"\n      [index]=\"i\"\n      [root]=\"true\"\n    ></li>\n    <li\n      *ngIf=\"item.separator\"\n      class=\"gray-separator\"\n      style=\"margin-top: 11px\"\n    ></li>\n  </ng-container>\n</ul>\n","import { Component, ElementRef, Input } from '@angular/core';\nimport {\n  SidebarMenuComponent,\n  SpiderlyMenuItem,\n} from './sidebar-menu.component';\n\n@Component({\n  selector: 'sidebar',\n  templateUrl: './sidebar.component.html',\n  imports: [SidebarMenuComponent],\n})\nexport class AppSidebarComponent {\n  @Input() menu: SpiderlyMenuItem[];\n\n  constructor(public el: ElementRef) {}\n\n  ngOnInit() {}\n}\n","<sidebar-menu [menu]=\"menu\"></sidebar-menu>\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { AvatarModule } from 'primeng/avatar';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { UserBase } from '../../../entities/security-entities';\nimport { filter, Subscription } from 'rxjs';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { SpiderlyButtonComponent } from '../../spiderly-buttons/spiderly-button/spiderly-button.component';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\n\n@Component({\n  selector: 'spiderly-profile-avatar',\n  templateUrl: './profile-avatar.component.html',\n  styleUrl: './profile-avatar.component.scss',\n  imports: [\n    CommonModule,\n    RouterModule,\n    AvatarModule,\n    SpiderlyButtonComponent,\n    TranslocoDirective,\n  ],\n})\nexport class ProfileAvatarComponent {\n  @Input() isSideMenuLayout = true;\n  @Input() routeOnLargeProfileAvatarClick = true;\n  @Input() showLoginButton = true;\n  @Input() routeToLoginPage = true;\n  @Input() loginButtonOutlined = false;\n  @Input() loginButtonSeverity:\n    | 'success'\n    | 'info'\n    | 'warn'\n    | 'danger'\n    | 'help'\n    | 'primary'\n    | 'secondary'\n    | 'contrast'\n    | null\n    | undefined = 'primary';\n  @Input() loginButtonSize: 'small' | 'large' | undefined;\n  @Output() onLoginButtonClick = new EventEmitter();\n  @Input() menuItems: ProfileAvatarModalMenuItem[] = [];\n\n  private initTopBarSubscription: Subscription | null = null;\n\n  currentUser: UserBase;\n  userProfilePath: string;\n  avatarLabel: string;\n  showProfileIcon = false;\n\n  @ViewChild('topbarmenu') menu!: ElementRef;\n\n  @ViewChild('topbarprofiledropdownmenubutton')\n  topbarProfileDropdownMenuButton!: ElementRef;\n\n  constructor(\n    public layoutService: LayoutServiceBase,\n    private authService: AuthServiceBase,\n    protected router: Router,\n    private translocoService: TranslocoService,\n    public config: ConfigServiceBase,\n  ) {}\n\n  async ngOnInit() {\n    if (this.menuItems.length === 0) {\n      this.menuItems = [\n        {\n          label: this.translocoService.translate('YourProfile'),\n          icon: 'pi-user',\n          showSeparator: true,\n          onClick: () => {\n            this.routeToUserPage();\n          },\n        },\n        {\n          label: this.translocoService.translate('Logout'),\n          icon: 'pi-sign-out',\n          showSeparator: true,\n          onClick: () => {\n            this.authService.logout();\n          },\n        },\n      ];\n    }\n\n    this.router.events\n      .pipe(filter((event) => event instanceof NavigationEnd))\n      .subscribe((event: NavigationEnd) => {\n        this.layoutService.state.profileDropdownSidebarVisible = false;\n      });\n\n    this.onAfterNgOnInit();\n  }\n\n  onAfterNgOnInit = () => {\n    this.initTopBarSubscription = this.layoutService\n      .initTopBarData()\n      .subscribe((initTopBarData) => {\n        this.userProfilePath = initTopBarData.userProfilePath;\n        this.showProfileIcon = initTopBarData.showProfileIcon;\n        this.currentUser = initTopBarData.currentUser;\n        this.avatarLabel = initTopBarData.currentUser?.email\n          .charAt(0)\n          .toLocaleUpperCase();\n      });\n  };\n\n  onDocumentClick(event: any) {\n    if (!this.menu.nativeElement.contains(event.target)) {\n      if (this.layoutService.state.profileDropdownSidebarVisible == true) {\n        this.layoutService.state.profileDropdownSidebarVisible = false;\n      }\n    }\n  }\n\n  routeToUserPage() {\n    if (this.routeOnLargeProfileAvatarClick) {\n      this.router.navigateByUrl(this.userProfilePath);\n    }\n  }\n\n  loginButtonClick() {\n    if (this.routeToLoginPage) {\n      this.router.navigateByUrl(this.config.loginSlug);\n    }\n\n    this.onLoginButtonClick.next(null);\n  }\n\n  ngOnDestroy(): void {\n    if (this.initTopBarSubscription) {\n      this.initTopBarSubscription.unsubscribe();\n    }\n  }\n}\n\nexport interface ProfileAvatarModalMenuItem {\n  label?: string;\n  icon?: string;\n  showSeparator?: boolean;\n  onClick?: () => void;\n}\n","<ng-container *transloco=\"let t\">\n  <div *ngIf=\"this.currentUser != null\" #topbarmenu>\n    <div\n      #topbarprofiledropdownmenubutton\n      (click)=\"layoutService.showProfileDropdownSidebar()\"\n    >\n      <p-avatar\n        *ngIf=\"showProfileIcon\"\n        [label]=\"avatarLabel\"\n        [style]=\"{\n          'background-color': 'var(--p-primary-color)',\n          color: '#fff',\n          cursor: 'pointer',\n          width: '34px',\n          height: '34px',\n          'font-size': '21px',\n        }\"\n      />\n    </div>\n    <div #topbarprofiledropdownmenu (document:click)=\"onDocumentClick($event)\">\n      <div\n        *ngIf=\"layoutService.state.profileDropdownSidebarVisible\"\n        style=\"\n          width: 280px;\n          position: absolute;\n          padding: 15px;\n          background: var(--p-content-background);\n        \"\n        class=\"card\"\n        [ngClass]=\"{\n          'side-menu-profile-dialog': isSideMenuLayout,\n          'top-menu-profile-dialog': !isSideMenuLayout,\n        }\"\n      >\n        <div\n          style=\"\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            text-align: center;\n            gap: 10px;\n          \"\n        >\n          <p-avatar\n            [label]=\"avatarLabel\"\n            size=\"xlarge\"\n            [style]=\"{\n              'background-color': 'var(--p-primary-color)',\n              color: '#fff',\n              margin: 'auto',\n              cursor: routeOnLargeProfileAvatarClick ? 'pointer' : '',\n            }\"\n            (click)=\"routeToUserPage()\"\n          />\n          <div style=\"font-size: 15px\">{{ currentUser?.email }}</div>\n        </div>\n        <div style=\"margin-top: 15px\">\n          <div\n            *ngFor=\"let item of menuItems\"\n            [style]=\"item.showSeparator ? 'margin-top: 5px;' : ''\"\n          >\n            <div *ngIf=\"item.showSeparator\" class=\"gray-separator\"></div>\n            <div\n              (click)=\"item.onClick()\"\n              class=\"hover-card\"\n              style=\"\n                display: flex;\n                align-items: center;\n                gap: 8px;\n                margin-top: 5px;\n              \"\n            >\n              <i\n                class=\"pi pi-fw {{ item.icon }}\"\n                style=\"font-size: 16px; position: relative\"\n              ></i>\n              <div style=\"font-size: 15px\">{{ item.label }}</div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div *ngIf=\"this.currentUser == null && this.showLoginButton\">\n    <spiderly-button\n      [label]=\"t('Login')\"\n      (onClick)=\"loginButtonClick()\"\n      icon=\"pi pi-sign-in\"\n      [outlined]=\"loginButtonOutlined\"\n      [severity]=\"loginButtonSeverity\"\n      [size]=\"loginButtonSize\"\n    ></spiderly-button>\n  </div>\n</ng-container>\n","import { ConfigServiceBase } from '../../../services/config.service.base';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { Component, ElementRef, ViewChild } from '@angular/core';\nimport { filter } from 'rxjs';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { CommonModule } from '@angular/common';\nimport { AvatarModule } from 'primeng/avatar';\nimport { BadgeModule } from 'primeng/badge';\nimport { ProfileAvatarComponent } from '../profile-avatar/profile-avatar.component';\n\n@Component({\n  selector: 'spiderly-sidemenu-topbar',\n  templateUrl: './sidemenu-topbar.component.html',\n  imports: [\n    CommonModule,\n    RouterModule,\n    AvatarModule,\n    BadgeModule,\n    ProfileAvatarComponent,\n  ],\n})\nexport class SideMenuTopBarComponent {\n  companyName = this.config.companyName;\n  @ViewChild('menubutton') menuButton!: ElementRef;\n\n  constructor(\n    public layoutService: LayoutServiceBase,\n    protected router: Router,\n    private config: ConfigServiceBase,\n    private translocoService: TranslocoService,\n  ) {}\n\n  async ngOnInit() {\n    this.router.events\n      .pipe(filter((event) => event instanceof NavigationEnd))\n      .subscribe((event: NavigationEnd) => {\n        this.layoutService.state.profileDropdownSidebarVisible = false;\n      });\n  }\n}\n","<div class=\"layout-topbar\">\n  <a class=\"layout-topbar-logo\" routerLink=\"/\">\n    <span>{{ companyName?.toLocaleUpperCase() }}</span>\n  </a>\n\n  <button\n    #menubutton\n    class=\"p-link layout-menu-button layout-topbar-button\"\n    (click)=\"layoutService.onMenuToggle()\"\n  >\n    <i class=\"pi pi-bars\"></i>\n  </button>\n\n  <div class=\"profile-button\">\n    <spiderly-profile-avatar></spiderly-profile-avatar>\n  </div>\n</div>\n","import { ConfigServiceBase } from '../../../services/config.service.base';\nimport { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ProfileAvatarComponent } from '../profile-avatar/profile-avatar.component';\nimport { MenubarModule } from 'primeng/menubar';\nimport { SpiderlyMenuItem } from '../sidebar/sidebar-menu.component';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'spiderly-topbar',\n  templateUrl: './topbar.component.html',\n  styleUrl: './topbar.component.scss',\n  imports: [\n    CommonModule,\n    RouterModule,\n    MenubarModule,\n    AvatarModule,\n    ProfileAvatarComponent,\n  ],\n})\nexport class TopBarComponent {\n  @Input() menu: SpiderlyMenuItem[] = [];\n  companyName = this.config.companyName;\n  logoPath = this.config.logoPath;\n  /**\n   * Determines whether to show background color on hover\n   * for root menu items. Defaults to `false`.\n   */\n  @Input() showHoverBgOnRootItems: boolean = false;\n\n  private permissionSubscription: Subscription | null = null;\n\n  constructor(\n    private authService: AuthServiceBase,\n    private config: ConfigServiceBase,\n  ) {}\n\n  ngOnInit() {\n    this.permissionSubscription =\n      this.authService.currentUserPermissionCodes$.subscribe(\n        (currentUserPermissionCodes: string[]) => {\n          this.hideMenuItemsBasedOnPermissions(\n            this.menu,\n            currentUserPermissionCodes,\n          );\n        },\n      );\n  }\n\n  hideMenuItemsBasedOnPermissions = (\n    menu: SpiderlyMenuItem[],\n    currentUserPermissionCodes: string[],\n  ) => {\n    menu.forEach((menuItem) => {\n      if (menuItem.items) {\n        this.hideMenuItemsBasedOnPermissions(\n          menuItem.items,\n          currentUserPermissionCodes,\n        );\n      }\n      if (typeof menuItem.hasPermission === 'function') {\n        menuItem.visible =\n          menuItem.hasPermission(currentUserPermissionCodes) ?? false;\n      }\n    });\n  };\n\n  ngOnDestroy() {\n    if (this.permissionSubscription) {\n      this.permissionSubscription.unsubscribe();\n    }\n  }\n}\n","<div class=\"topbar-wrapper\">\n  <nav\n    class=\"topbar {{\n      showHoverBgOnRootItems ? '' : 'show-hover-bg-on-root-items'\n    }}\"\n  >\n    <p-menubar [model]=\"menu\" [style]=\"{ border: '0' }\">\n      <ng-template #start>\n        <img\n          style=\"margin-left: 11px; cursor: pointer\"\n          width=\"45\"\n          height=\"45\"\n          routerLink=\"/\"\n          [src]=\"logoPath\"\n          alt=\"Logo\"\n        />\n      </ng-template>\n      <ng-template #end>\n        <div\n          style=\"\n            margin-right: 11px;\n            display: flex;\n            gap: 10px;\n            align-items: center;\n            position: relative;\n          \"\n        >\n          <div>\n            <ng-content select=\"[ACTIONS]\"></ng-content>\n          </div>\n          <spiderly-profile-avatar\n            [isSideMenuLayout]=\"false\"\n          ></spiderly-profile-avatar>\n        </div>\n      </ng-template>\n    </p-menubar>\n  </nav>\n</div>\n","import {\n  Component,\n  ElementRef,\n  Input,\n  OnDestroy,\n  Renderer2,\n  ViewChild,\n} from '@angular/core';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { AppSidebarComponent } from './sidebar/sidebar.component';\nimport { SideMenuTopBarComponent } from './sidemenu-topbar/sidemenu-topbar.component';\nimport { LayoutServiceBase } from '../../services/app-layout.service.base';\nimport { SpiderlyMenuItem } from './sidebar/sidebar-menu.component';\nimport { CommonModule } from '@angular/common';\nimport { FooterComponent } from '../footer/footer.component';\nimport { TopBarComponent } from './topbar/topbar.component';\n\n@Component({\n  selector: 'spiderly-layout',\n  templateUrl: './layout.component.html',\n  imports: [\n    CommonModule,\n    RouterModule,\n    AppSidebarComponent,\n    FooterComponent,\n    SideMenuTopBarComponent,\n    TopBarComponent,\n  ],\n})\nexport class SpiderlyLayoutComponent implements OnDestroy {\n  @Input() menu: SpiderlyMenuItem[] = [];\n  sideMenu: SpiderlyMenuItem[] = [];\n  topMenu: SpiderlyMenuItem[] = [];\n  @Input() isSideMenuLayout: boolean = true;\n  /**\n   * Determines whether to show background color on hover\n   * for root top menu items. Defaults to `false`.\n   */\n  @Input() showHoverBgOnRootTopMenuItems: boolean = false;\n\n  /**\n   * default max-width for the main content area.\n   */\n\n  @Input() maxWidth: string = '1100px';\n\n  overlayMenuOpenSubscription: Subscription;\n\n  menuOutsideClickListener: any;\n\n  profileMenuOutsideClickListener: any;\n\n  @ViewChild(AppSidebarComponent) appSidebar!: AppSidebarComponent;\n\n  @ViewChild(SideMenuTopBarComponent) sidemenuTopbar!: SideMenuTopBarComponent;\n\n  @ViewChild('topbarmenu') topbarmenu!: ElementRef;\n\n  constructor(\n    protected layoutService: LayoutServiceBase,\n    protected renderer: Renderer2,\n    protected router: Router,\n  ) {\n    this.overlayMenuOpenSubscription =\n      this.layoutService.overlayOpen$.subscribe(() => {\n        if (!this.menuOutsideClickListener) {\n          this.menuOutsideClickListener = this.renderer.listen(\n            'document',\n            'click',\n            (event) => {\n              const isOutsideClicked = !(\n                this.appSidebar?.el.nativeElement.isSameNode(event.target) ||\n                this.appSidebar?.el.nativeElement.contains(event.target) ||\n                this.sidemenuTopbar?.menuButton?.nativeElement.isSameNode(\n                  event.target,\n                ) ||\n                this.sidemenuTopbar?.menuButton?.nativeElement.contains(\n                  event.target,\n                ) ||\n                event.target.closest('.p-autocomplete-items') ||\n                event.target.closest('.p-autocomplete-clear-icon')\n              );\n\n              if (isOutsideClicked) {\n                this.hideMenu();\n              }\n            },\n          );\n        }\n\n        if (!this.profileMenuOutsideClickListener) {\n          this.profileMenuOutsideClickListener = this.renderer.listen(\n            'document',\n            'click',\n            (event) => {\n              const isOutsideClicked = !(\n                this.topbarmenu?.nativeElement.isSameNode(event.target) ||\n                this.topbarmenu?.nativeElement.contains(event.target)\n              );\n\n              if (isOutsideClicked) {\n                this.hideProfileMenu();\n              }\n            },\n          );\n        }\n\n        if (this.layoutService.state.staticMenuMobileActive) {\n          this.blockBodyScroll();\n        }\n      });\n\n    this.router.events\n      .pipe(filter((event) => event instanceof NavigationEnd))\n      .subscribe(() => {\n        this.hideMenu();\n        this.hideProfileMenu();\n      });\n  }\n\n  ngOnInit() {\n    if (this.isSideMenuLayout) {\n      this.sideMenu = [...this.menu];\n    } else {\n      this.topMenu = [...this.menu[0].items];\n    }\n  }\n\n  hideMenu() {\n    this.layoutService.state.overlayMenuActive = false;\n    this.layoutService.state.staticMenuMobileActive = false;\n    this.layoutService.state.menuHoverActive = false;\n    if (this.menuOutsideClickListener) {\n      this.menuOutsideClickListener();\n      this.menuOutsideClickListener = null;\n    }\n    this.unblockBodyScroll();\n  }\n\n  hideProfileMenu() {\n    this.layoutService.state.profileSidebarVisible = false;\n    if (this.profileMenuOutsideClickListener) {\n      this.profileMenuOutsideClickListener();\n      this.profileMenuOutsideClickListener = null;\n    }\n  }\n\n  blockBodyScroll(): void {\n    if (document.body.classList) {\n      document.body.classList.add('blocked-scroll');\n    } else {\n      document.body.className += ' blocked-scroll';\n    }\n  }\n\n  unblockBodyScroll(): void {\n    if (document.body.classList) {\n      document.body.classList.remove('blocked-scroll');\n    } else {\n      document.body.className = document.body.className.replace(\n        new RegExp(\n          '(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)',\n          'gi',\n        ),\n        ' ',\n      );\n    }\n  }\n\n  get containerClass() {\n    return {\n      'layout-theme-light':\n        this.layoutService.layoutConfig.colorScheme === 'light',\n      'layout-theme-dark':\n        this.layoutService.layoutConfig.colorScheme === 'dark',\n      'layout-overlay': this.layoutService.layoutConfig.menuMode === 'overlay',\n      'layout-static': this.layoutService.layoutConfig.menuMode === 'static',\n      'layout-static-inactive':\n        this.layoutService.state.staticMenuDesktopInactive &&\n        this.layoutService.layoutConfig.menuMode === 'static',\n      'layout-overlay-active': this.layoutService.state.overlayMenuActive,\n      'layout-mobile-active': this.layoutService.state.staticMenuMobileActive,\n      'p-input-filled': this.layoutService.layoutConfig.inputStyle === 'filled',\n      'p-ripple-disabled': !this.layoutService.layoutConfig.ripple,\n    };\n  }\n\n  ngOnDestroy() {\n    if (this.overlayMenuOpenSubscription) {\n      this.overlayMenuOpenSubscription.unsubscribe();\n    }\n\n    if (this.menuOutsideClickListener) {\n      this.menuOutsideClickListener();\n    }\n\n    this.onAfterNgDestroy();\n  }\n\n  onAfterNgDestroy = () => {};\n}\n","<div *ngIf=\"isSideMenuLayout\" class=\"layout-wrapper\" [ngClass]=\"containerClass\">\n  <spiderly-sidemenu-topbar></spiderly-sidemenu-topbar>\n  <div class=\"layout-sidebar\">\n    <sidebar [menu]=\"sideMenu\"></sidebar>\n  </div>\n  <div class=\"layout-main-container\">\n    <div class=\"layout-main\">\n      <router-outlet></router-outlet>\n    </div>\n    <footer></footer>\n  </div>\n  <div class=\"layout-mask\"></div>\n</div>\n\n<div *ngIf=\"isSideMenuLayout === false\">\n  <spiderly-topbar\n    [menu]=\"topMenu\"\n    [showHoverBgOnRootItems]=\"showHoverBgOnRootTopMenuItems\"\n  >\n    <ng-content ACTIONS select=\"[ACTIONS]\"></ng-content>\n  </spiderly-topbar>\n  <main [style.max-width]=\"maxWidth\" style=\"margin: auto; padding: 18px\">\n    <router-outlet></router-outlet>\n  </main>\n</div>\n","import { Component } from '@angular/core';\nimport { ConfigServiceBase } from '../../services/config.service.base';\nimport { RouterModule } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n  selector: 'not-found',\n  templateUrl: './not-found.component.html',\n  imports: [RouterModule, ButtonModule],\n})\nexport class NotFoundComponent {\n  companyName = this.config.companyName;\n  logoPath: string = this.config.logoPath;\n\n  constructor(private config: ConfigServiceBase) {}\n}\n","<div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px\">\n  <div class=\"flex flex-col w-full\">\n    <div\n      class=\"w-full sm:w-[30rem]\"\n      style=\"\n        margin: auto;\n        border-radius: 50px;\n        padding: 0.3rem;\n        background: linear-gradient(\n          180deg,\n          var(--p-primary-color) 10%,\n          rgba(33, 150, 243, 0) 30%\n        );\n      \"\n    >\n      <div class=\"surface-card py-12 px-8 sm:px-12\" style=\"border-radius: 45px\">\n        <div class=\"text-center\">\n          <img\n            [src]=\"logoPath\"\n            alt=\"{{ companyName }} Logo\"\n            title=\"{{ companyName }} Logo\"\n            height=\"60\"\n            class=\"mb-6\"\n          />\n        </div>\n        <h1 class=\"mb-6\">\n          <div class=\"font-bold text-5xl lg:text-6xl spiderly-gradient-title\">\n            404\n          </div>\n          <div class=\"font-bold text-5xl lg:text-6xl\">Page Not Found</div>\n        </h1>\n        <div class=\"text-gray-600 text-lg mb-8\">\n          The page you're looking for doesn't exist or has been moved. Let's get\n          you back on track.\n        </div>\n        <div>\n          <p-button [routerLink]=\"['/']\" label=\"Go to Homepage\"></p-button>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\n\nimport { MenuItem } from 'primeng/api';\nimport { SpiderlyButtonBaseComponent } from '../spiderly-button-base/spiderly-button-base';\n\n@Component({\n  selector: 'spiderly-split-button',\n  templateUrl: './spiderly-split-button.component.html',\n  styles: [],\n  imports: [CommonModule, ButtonModule, SplitButtonModule],\n})\nexport class SpiderlySplitButtonComponent extends SpiderlyButtonBaseComponent {\n  @Input() dropdownItems: MenuItem[];\n}\n","<p-splitButton\n  (onClick)=\"handleClick($event)\"\n  [label]=\"label\"\n  [icon]=\"icon\"\n  [outlined]=\"outlined\"\n  [styleClass]=\"styleClass\"\n  [severity]=\"severity\"\n  [rounded]=\"rounded\"\n  [style]=\"style\"\n  [class]=\"class\"\n  [disabled]=\"disabled\"\n  [model]=\"dropdownItems\"\n>\n  <ng-content></ng-content>\n</p-splitButton>\n","export enum MatchModeCodes {\n  StartsWith = \"startsWith\",\n  Contains = \"contains\",\n  Equals = \"equals\",\n  LessThan = \"lessThan\",\n  GreaterThan = \"greaterThan\",\n  In = \"in\",\n}\n","import { ConfirmationService } from 'primeng/api';\nimport { Component } from '@angular/core';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { SpiderlyButtonComponent } from '../spiderly-buttons/spiderly-button/spiderly-button.component';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\n\n@Component({\n  selector: 'spiderly-delete-confirmation',\n  templateUrl: './spiderly-delete-confirmation.component.html',\n  styles: [],\n  imports: [SpiderlyButtonComponent, TranslocoDirective, ConfirmDialogModule],\n  providers: [ConfirmationService],\n})\nexport class SpiderlyDeleteConfirmationComponent {\n  constructor(\n    public ref: DynamicDialogRef,\n    public config: DynamicDialogConfig,\n  ) {}\n\n  accept() {\n    const observable = this.config.data.deleteListFromTableObservableMethod\n      ? this.config.data.deleteListFromTableObservableMethod(\n          this.config.data.ids,\n        )\n      : this.config.data.deleteItemFromTableObservableMethod(\n          this.config.data.id,\n        );\n\n    observable.subscribe({\n      next: () => {\n        this.ref.close(true); // deleted succesfully\n      },\n      error: () => {\n        this.ref.close(false); // not deleted succesfully\n      },\n    });\n  }\n\n  reject() {\n    this.ref.close(false);\n  }\n}\n","<ng-container *transloco=\"let t\">\n  <p-confirmDialog #cd></p-confirmDialog>\n  <div\n    class=\"border-b surface-border text-lg\"\n    style=\"\n      display: flex;\n      align-items: center;\n      padding-bottom: 10px;\n      width: 100%;\n      gap: 10px;\n    \"\n  >\n    <i class=\"pi pi-exclamation-circle text-4xl\"></i>\n    <p>{{ t(\"PleaseConfirmToProceed\") }}</p>\n  </div>\n\n  <div\n    style=\"display: flex; gap: 12px; justify-content: right; margin-top: 28px\"\n  >\n    <spiderly-button\n      (onClick)=\"reject()\"\n      icon=\"pi pi-times\"\n      [label]=\"t('Cancel')\"\n      severity=\"secondary\"\n    ></spiderly-button>\n    <spiderly-button\n      (onClick)=\"accept()\"\n      icon=\"pi pi-check\"\n      [label]=\"t('Confirm')\"\n      styleClass=\"p-button-danger\"\n    ></spiderly-button>\n  </div>\n</ng-container>\n","import { CommonModule, formatDate, formatNumber } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  LOCALE_ID,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { SelectItem } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport {\n  Table,\n  TableFilterEvent,\n  TableLazyLoadEvent,\n  TableModule,\n} from 'primeng/table';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { firstValueFrom, Observable } from 'rxjs';\nimport { SpiderlyControlsModule } from '../../controls/spiderly-controls.module';\nimport { Filter } from '../../entities/filter';\nimport { LazyLoadSelectedIdsResult } from '../../entities/lazy-load-selected-ids-result';\nimport { PaginatedResult } from '../../entities/paginated-result';\nimport { PrimengOption } from '../../entities/primeng-option';\nimport { MatchModeCodes } from '../../enums/match-mode-enum-codes';\nimport { ConfigServiceBase } from '../../services/config.service.base';\nimport {\n  exportListToExcel,\n  getHtmlImgDisplayString64,\n} from '../../services/helper-functions';\nimport { SpiderlyMessageService } from '../../services/spiderly-message.service';\nimport { SpiderlyDeleteConfirmationComponent } from '../spiderly-delete-dialog/spiderly-delete-confirmation.component';\nimport { SpiderlyFormControl } from '../spiderly-form-control/spiderly-form-control';\n\n@Component({\n  selector: 'spiderly-data-table',\n  templateUrl: './spiderly-data-table.component.html',\n  styleUrl: 'spiderly-data-table.component.scss',\n  imports: [\n    FormsModule,\n    CommonModule,\n    TranslocoDirective,\n    SpiderlyControlsModule,\n    TableModule,\n    ButtonModule,\n    MultiSelectModule,\n    DatePickerModule,\n    CheckboxModule,\n    TooltipModule,\n  ],\n})\nexport class SpiderlyDataTableComponent implements OnInit, AfterViewInit {\n  @ViewChild('dt') table: Table;\n  @Input() tableTitle: string;\n  @Input() tableIcon: string = 'pi pi-list';\n  @Input() items: any[]; // Pass only when hasLazyLoad === false\n  @Input() rows: number;\n  @Input() cols: Column[];\n  @Input() showPaginator: boolean = true; // Pass only when hasLazyLoad === false\n  @Input() showCardWrapper: boolean = false;\n  @Input() readonly: boolean = false;\n  @Input() idField = 'id';\n  totalRecords: number;\n  @Output() onTotalRecordsChange: EventEmitter<number> = new EventEmitter();\n\n  @Input() getPaginatedListObservableMethod: (\n    tableFilter: Filter,\n  ) => Observable<PaginatedResult>;\n  @Input() exportListToExcelObservableMethod: (\n    tableFilter: Filter,\n  ) => Observable<any>;\n  @Input() deleteItemFromTableObservableMethod: (\n    rowId: number,\n  ) => Observable<any>;\n  @Input() deleteListFromTableObservableMethod: (\n    ids: number[],\n  ) => Observable<any>;\n\n  lastLazyLoadEvent: TableLazyLoadEvent;\n  loading: boolean = true;\n\n  @Input() newlySelectedItems: number[] = [];\n  fakeSelectedItems: number[] = []; // Only for showing checkboxes, we will not send this to the backend\n  currentPageSelectedItemsFromDb: number[] = []; // Made so we can add only newly selected items to the newlySelectedItems\n  @Input() unselectedItems: number[] = [];\n  @Input() selectionMode: 'single' | 'multiple' | undefined | null;\n  @Output() onLazyLoad: EventEmitter<Filter> = new EventEmitter();\n  rowsSelectedNumber: number = 0;\n  isAllSelected: boolean = null;\n  fakeIsAllSelected: boolean = false; // Only for showing checkboxes, we will not send this to the backend\n  isFirstTimeLazyLoad: boolean = true;\n  @Output() onIsAllSelectedChange: EventEmitter<AllClickEvent> =\n    new EventEmitter();\n  @Input() selectedLazyLoadObservableMethod: (\n    tableFilter: Filter,\n  ) => Observable<LazyLoadSelectedIdsResult>;\n  @Input() additionalFilterIdLong: number;\n\n  matchModeDateOptions: SelectItem[] = [];\n  matchModeNumberOptions: SelectItem[] = [];\n  @Input() showAddButton: boolean = true;\n  @Input() showExportToExcelButton: boolean = true;\n  @Input() showReloadTableButton: boolean = false;\n\n  deleteRef: DynamicDialogRef;\n\n  // Client side table\n  // @Input() formArrayItems: any[]; // Pass this only if you have some additional logic for showing data\n  @Input() getFormArrayItems: (additionalIndexes?: any) => any[];\n  @Input() hasLazyLoad: boolean = true;\n  selectedItemIds: number[] = []; // Pass only when hasLazyLoad === false, it's enough if the M2M association hasn't additional fields\n  @Input() getAlreadySelectedItemIds: (additionalIndexes?: any) => number[]; // Pass only when hasLazyLoad === false, it's enough if the M2M association hasn't additional fields\n  selectedItems: any[] = []; // Pass only when hasLazyLoad === false\n  @Input() getAlreadySelectedItems: (additionalIndexes?: any) => any[]; // Pass only when hasLazyLoad === false, it's enough if the M2M association hasn't additional fields\n  @Input() getFormControl: (\n    formControlName: string,\n    index: number,\n    additionalIndexes?: any,\n  ) => SpiderlyFormControl;\n  @Input() additionalIndexes: any;\n  @Output() onRowSelect: EventEmitter<RowClickEvent> = new EventEmitter();\n  @Output() onRowUnselect: EventEmitter<RowClickEvent> = new EventEmitter();\n  /**\n   * if true, clicking a row will navigate to the details page.\n   * Set to false to disable row navigation.\n   * Default is false.\n   */\n  @Input() navigateOnRowClick: boolean = false;\n\n  /**\n   * Path to navigate to when clicking a row.\n   * If not provided, it will use the current route with the row ID.\n   * Example: 'details' will navigate to '/details/{rowId}'.\n   */\n  @Input() rowNavigationPath: string;\n\n  constructor(\n    private router: Router,\n    private dialogService: DialogService,\n    private route: ActivatedRoute,\n    private messageService: SpiderlyMessageService,\n    private translocoService: TranslocoService,\n    private configService: ConfigServiceBase,\n    @Inject(LOCALE_ID) private locale: string,\n  ) {}\n\n  ngAfterViewInit(): void {\n    this.setupRemovableSort();\n  }\n\n  // PrimeNG v19 removed the removableSort property. This overrides the table's\n  // sort() method to add tri-state cycling: ascending → descending → unsorted.\n  private setupRemovableSort(): void {\n    const originalSort = this.table.sort.bind(this.table);\n\n    this.table.sort = (event: { originalEvent: Event; field: string }) => {\n      const sortMeta = this.table.getSortMeta(event.field);\n\n      if (sortMeta && sortMeta.order === -1) {\n        const mouseEvent = event.originalEvent as MouseEvent;\n        const isMultiSortClick = mouseEvent.metaKey || mouseEvent.ctrlKey;\n\n        if (isMultiSortClick) {\n          this.table._multiSortMeta = this.table._multiSortMeta.filter(\n            (m) => m.field !== event.field,\n          );\n        } else {\n          this.table._multiSortMeta = [];\n          if (this.table.resetPageOnSort) {\n            this.table._first = 0;\n            this.table.firstChange.emit(0);\n          }\n        }\n\n        this.table.sortMultiple();\n\n        if (this.table.isStateful()) {\n          this.table.saveState();\n        }\n\n        this.table.anchorRowIndex = null;\n        return;\n      }\n\n      originalSort(event);\n    };\n  }\n\n  ngOnInit(): void {\n    if (this.rows == null) this.rows = this.configService.defaultPageSize;\n\n    if (this.deleteListFromTableObservableMethod && !this.selectionMode) {\n      this.selectionMode = 'multiple';\n    }\n\n    this.matchModeDateOptions = [\n      {\n        label: this.translocoService.translate('OnDate'),\n        value: MatchModeCodes.Equals,\n      },\n      {\n        label: this.translocoService.translate('DatesBefore'),\n        value: MatchModeCodes.LessThan,\n      },\n      {\n        label: this.translocoService.translate('DatesAfter'),\n        value: MatchModeCodes.GreaterThan,\n      },\n    ];\n\n    this.matchModeNumberOptions = [\n      {\n        label: this.translocoService.translate('Equals'),\n        value: MatchModeCodes.Equals,\n      },\n      {\n        label: this.translocoService.translate('LessThan'),\n        value: MatchModeCodes.LessThan,\n      },\n      {\n        label: this.translocoService.translate('MoreThan'),\n        value: MatchModeCodes.GreaterThan,\n      },\n    ];\n\n    if (this.hasLazyLoad === false) {\n      this.clientLoad();\n    }\n  }\n\n  lazyLoad(event: TableLazyLoadEvent) {\n    this.lastLazyLoadEvent = event;\n\n    let tableFilter: Filter = event as unknown as Filter;\n    tableFilter.additionalFilterIdLong = this.additionalFilterIdLong;\n\n    this.onLazyLoad.next(tableFilter);\n\n    this.getPaginatedListObservableMethod(tableFilter).subscribe({\n      next: async (res) => {\n        this.items = res.data;\n        this.totalRecords = res.totalRecords;\n        this.onTotalRecordsChange.next(res.totalRecords);\n\n        if (this.selectedLazyLoadObservableMethod != null) {\n          let selectedRowsMethodResult: LazyLoadSelectedIdsResult =\n            await firstValueFrom(\n              this.selectedLazyLoadObservableMethod(tableFilter),\n            );\n\n          this.currentPageSelectedItemsFromDb = [\n            ...selectedRowsMethodResult.selectedIds,\n          ];\n\n          if (this.isFirstTimeLazyLoad == true) {\n            this.rowsSelectedNumber =\n              selectedRowsMethodResult.totalRecordsSelected;\n            this.setFakeIsAllSelected();\n            this.isFirstTimeLazyLoad = false;\n          }\n\n          if (this.isAllSelected == true) {\n            let idsToInsert = [...this.items.map((x) => x[this.idField])];\n            idsToInsert = idsToInsert.filter(\n              (x) => this.unselectedItems.includes(x) == false,\n            );\n            this.fakeSelectedItems = [...idsToInsert]; // Only for showing checkboxes, we will not send this to the backend\n          } else if (this.isAllSelected == false) {\n            this.fakeSelectedItems = [...this.newlySelectedItems]; // Only for showing checkboxes, we will not send this to the backend\n          } else if (this.isAllSelected == null) {\n            let idsToInsert = [\n              ...selectedRowsMethodResult.selectedIds,\n              ...this.newlySelectedItems,\n            ];\n            idsToInsert = idsToInsert.filter(\n              (x) => this.unselectedItems.includes(x) == false,\n            );\n            this.fakeSelectedItems = [...idsToInsert];\n          }\n        }\n\n        if (this.selectedLazyLoadObservableMethod == null && this.deleteListFromTableObservableMethod) {\n          this.fakeSelectedItems = this.items\n            .map((x) => x[this.idField])\n            .filter((id) => this.newlySelectedItems.includes(id));\n        }\n\n        this.loading = false;\n      },\n      error: () => {\n        this.loading = false;\n      },\n    });\n  }\n\n  clientLoad() {\n    this.loading = false;\n\n    this.loadFormArrayItems();\n    this.totalRecords = this.items.length;\n    this.onTotalRecordsChange.next(this.items.length);\n\n    if (this.getAlreadySelectedItemIds) {\n      this.selectedItemIds = this.getAlreadySelectedItemIds(\n        this.additionalIndexes,\n      );\n    }\n    if (this.getAlreadySelectedItems) {\n      this.selectedItems = this.getAlreadySelectedItems(this.additionalIndexes);\n    }\n    this.rowsSelectedNumber = this.selectedItemIds.length;\n    this.setFakeIsAllSelected();\n  }\n\n  private clientFilterCount = 0;\n\n  filter(event: TableFilterEvent) {\n    if (this.hasLazyLoad && this.selectionMode === 'multiple')\n      this.selectAll(false); // We need to do it like this because: totalRecords: 1 -> selectedRecords from earlyer selection 2 -> unselect current -> all checkbox is set to true\n\n    if (this.hasLazyLoad === false && this.selectionMode === 'multiple') {\n      if (this.clientFilterCount === 0) {\n        this.loadFormArrayItems();\n        this.clientFilterCount++;\n      } else {\n        this.clientFilterCount--;\n      }\n    }\n  }\n\n  private loadFormArrayItems() {\n    this.items = this.getFormArrayItems(this.additionalIndexes);\n    this.items.forEach((item, index) => {\n      item.index = index;\n    });\n  }\n\n  getColHeaderWidth(filterType: string) {\n    switch (filterType) {\n      case 'text':\n        return 'min-width: 12rem;';\n      case 'date':\n        return 'min-width: 10rem;';\n      case 'multiselect':\n        return 'min-width: 12rem;';\n      case 'boolean':\n        return 'min-width: 8rem;';\n      case 'numeric':\n        return 'min-width: 12rem;';\n      default:\n        return 'width: 0rem;'; // fitting content of the row like this\n    }\n  }\n\n  getColMatchModeOptions(filterType: string) {\n    switch (filterType) {\n      case 'text':\n        return null;\n      case 'date':\n        return this.matchModeDateOptions;\n      case 'multiselect':\n        return null;\n      case 'boolean':\n        return null;\n      case 'numeric':\n        return this.matchModeNumberOptions;\n      default:\n        return null;\n    }\n  }\n\n  getColMatchMode(filterType: string): any {\n    switch (filterType) {\n      case 'text':\n        return MatchModeCodes.Contains;\n      case 'date':\n        return MatchModeCodes.Equals;\n      case 'multiselect':\n        return MatchModeCodes.In;\n      case 'boolean':\n        return MatchModeCodes.Equals;\n      case 'numeric':\n        return MatchModeCodes.Equals;\n      default:\n        return null;\n    }\n  }\n\n  isDropOrMulti(filterType: string) {\n    if (filterType == 'dropdown' || filterType == 'multiselect') {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /*\n   * Navigate to details page based on rowId and rowNavigationPath.\n   * If rowNavigationPath is provided, it will navigate to that path with the rowId.\n   * If not, it will navigate to the current route with the rowId.\n   */\n  navigateToDetails(rowId: number): void {\n    if (rowId == null) return;\n\n    if (this.rowNavigationPath) {\n      const cleanPath = this.rowNavigationPath.replace(/^\\/|\\/$/g, ''); // Remove leading and trailing slashes\n\n      this.router.navigateByUrl(`/${cleanPath}/${rowId}`);\n    } else {\n      this.router.navigate([rowId], { relativeTo: this.route });\n    }\n  }\n\n  /*\n   * Handle row click event.\n   */\n  onRowClick(row: any): void {\n    if (!this.navigateOnRowClick || !row?.id) return;\n    this.navigateToDetails(row.id);\n  }\n\n  deleteObject(rowId: number) {\n    this.openDeleteConfirmation(\n      {\n        deleteItemFromTableObservableMethod:\n          this.deleteItemFromTableObservableMethod,\n        id: rowId,\n      },\n      'SuccessfullyDeletedMessage',\n    );\n  }\n\n  deleteSelectedObjects() {\n    const selectedIds = [...this.newlySelectedItems];\n\n    if (selectedIds.length === 0) return;\n\n    this.openDeleteConfirmation(\n      {\n        deleteListFromTableObservableMethod:\n          this.deleteListFromTableObservableMethod,\n        ids: selectedIds,\n      },\n      'SuccessfullyDeletedListMessage',\n      () => this.resetSelection(),\n    );\n  }\n\n  private openDeleteConfirmation(\n    data: Record<string, unknown>,\n    successMessageKey: string,\n    onSuccess?: () => void,\n  ) {\n    this.deleteRef = this.dialogService.open(\n      SpiderlyDeleteConfirmationComponent,\n      {\n        header: this.translocoService.translate('AreYouSure'),\n        width: '400px',\n        data,\n      },\n    );\n\n    this.deleteRef.onClose.subscribe((deletedSuccessfully: boolean) => {\n      if (deletedSuccessfully === true) {\n        this.messageService.successMessage(\n          this.translocoService.translate(successMessageKey),\n        );\n        onSuccess?.();\n        this.reload();\n      }\n    });\n  }\n\n  get showSelectAllCheckbox(): boolean {\n    return (\n      this.selectionMode === 'multiple' &&\n      this.selectedLazyLoadObservableMethod != null\n    );\n  }\n\n  private resetSelection() {\n    this.newlySelectedItems.length = 0;\n    this.unselectedItems.length = 0;\n    this.fakeSelectedItems = [];\n    this.rowsSelectedNumber = 0;\n    this.isAllSelected = null;\n    this.fakeIsAllSelected = false;\n  }\n\n  reload() {\n    this.loading = true;\n    this.items = null;\n    this.lazyLoad(this.lastLazyLoadEvent);\n  }\n\n  showActions(): boolean {\n    return this.cols.some((x) => x.actions?.length > 0);\n  }\n\n  getStyleForBodyColumn(col: Column<any>) {\n    switch (col.filterType) {\n      case 'numeric':\n        return 'text-align: right;';\n      default:\n        return null;\n    }\n  }\n\n  getClassForAction(action: Action): string {\n    switch (action.field) {\n      case 'Details':\n        return 'pi pi-pencil';\n      case 'Delete':\n        return 'pi pi-trash';\n      default:\n        return `${action.icon} ${action.styleClass}`;\n    }\n  }\n\n  getStyleForAction(action: Action): string {\n    switch (action.field) {\n      case 'Delete':\n        return 'cursor: pointer; color: var(--p-button-danger-background);';\n      default:\n        return `cursor: pointer; ${action.style}`;\n    }\n  }\n\n  getMethodForAction(action: Action, rowData: any) {\n    switch (action.field) {\n      case 'Details':\n        return this.navigateToDetails(rowData[this.idField]);\n      case 'Delete':\n        return this.deleteObject(rowData[this.idField]);\n      default:\n        return action.onClick(rowData[this.idField]);\n    }\n  }\n\n  getRowData(rowData: any, col: Column): string {\n    switch (col.filterType) {\n      case 'text':\n        return rowData[col.field];\n      case 'date':\n        if (rowData[col.field] == null) return null;\n\n        if (col.showTime)\n          return formatDate(rowData[col.field], 'short', this.locale);\n        else return formatDate(rowData[col.field], 'shortDate', this.locale);\n      case 'multiselect':\n        return rowData[col.field];\n      case 'boolean':\n        return rowData[col.field] == true\n          ? this.translocoService.translate('Yes')\n          : this.translocoService.translate('No');\n      case 'numeric':\n        if (rowData[col.field] == null) return null;\n        return formatNumber(\n          rowData[col.field],\n          this.locale,\n          col.decimalPlaces != null\n            ? `1.${col.decimalPlaces}-${col.decimalPlaces}`\n            : '1.0-2',\n        );\n      case 'blob':\n        return getHtmlImgDisplayString64(rowData[col.field]);\n      default:\n        return null;\n    }\n  }\n\n  colTrackByFn(index, item) {\n    return item.field;\n  }\n\n  actionTrackByFn(index, item: Action) {\n    return `${index}${item.field}`;\n  }\n\n  exportListToExcel() {\n    let filter: Filter = this.lastLazyLoadEvent as unknown as Filter;\n    filter.additionalFilterIdLong = this.additionalFilterIdLong;\n\n    exportListToExcel(this.exportListToExcelObservableMethod, filter);\n  }\n\n  clear(table: Table) {\n    table.clear();\n  }\n\n  //#region Selection\n\n  setFakeIsAllSelected() {\n    if (this.rowsSelectedNumber == this.totalRecords)\n      this.fakeIsAllSelected = true;\n    else this.fakeIsAllSelected = false;\n  }\n\n  selectAll(checked: boolean) {\n    this.unselectedItems.length = 0;\n    this.newlySelectedItems.length = 0;\n\n    if (checked == true) {\n      this.isAllSelected = true;\n      this.fakeIsAllSelected = true;\n      this.onIsAllSelectedChange.next(\n        new AllClickEvent({\n          checked: true,\n          additionalIndexes: this.additionalIndexes,\n        }),\n      );\n      this.rowsSelectedNumber = this.totalRecords;\n      this.fakeSelectedItems = [...this.items.map((x) => x[this.idField])];\n      this.selectedItemIds = [...this.items.map((x) => x[this.idField])];\n    } else {\n      this.isAllSelected = false;\n      this.fakeIsAllSelected = false;\n      this.onIsAllSelectedChange.next(\n        new AllClickEvent({\n          checked: false,\n          additionalIndexes: this.additionalIndexes,\n        }),\n      );\n      this.rowsSelectedNumber = 0;\n      this.fakeSelectedItems = [];\n      this.selectedItemIds = [];\n    }\n  }\n\n  selectRow(id: number, index: number) {\n    if (this.isRowSelected(id)) {\n      this.rowUnselect(id);\n      this.onRowUnselect.next(\n        new RowClickEvent({\n          index: index,\n          id: id,\n          additionalIndexes: this.additionalIndexes,\n        }),\n      );\n    } else {\n      this.rowSelect(id);\n      this.onRowSelect.next(\n        new RowClickEvent({\n          index: index,\n          id: id,\n          additionalIndexes: this.additionalIndexes,\n        }),\n      );\n    }\n  }\n\n  isRowSelected(id: number) {\n    if (this.hasLazyLoad) {\n      return this.fakeSelectedItems.find((x) => x === id) != undefined;\n    } else {\n      return this.selectedItemIds.find((x) => x === id) != undefined;\n    }\n  }\n\n  rowSelect(id: number) {\n    if (\n      this.isAllSelected == false ||\n      this.currentPageSelectedItemsFromDb.includes(id) == false\n    ) {\n      this.newlySelectedItems.push(id);\n    }\n\n    if (this.hasLazyLoad) {\n      this.fakeSelectedItems.push(id);\n    } else {\n      this.selectedItemIds.push(id);\n    }\n\n    this.rowsSelectedNumber++;\n\n    const index = this.unselectedItems.indexOf(id);\n    if (index !== -1) {\n      this.unselectedItems.splice(index, 1); // Splice is mutating the array\n    }\n\n    this.setFakeIsAllSelected();\n  }\n\n  rowUnselect(id: number) {\n    if (\n      this.isAllSelected == true ||\n      this.currentPageSelectedItemsFromDb.includes(id) == true\n    ) {\n      this.unselectedItems.push(id);\n    }\n\n    this.rowsSelectedNumber--;\n\n    const index = this.newlySelectedItems.indexOf(id);\n    const fakeIndex = this.fakeSelectedItems.indexOf(id);\n    const nonLazyLoadIndex = this.selectedItemIds.indexOf(id);\n\n    if (index !== -1) {\n      this.newlySelectedItems.splice(index, 1); // Splice is mutating the array\n    }\n    if (fakeIndex !== -1) {\n      this.fakeSelectedItems.splice(fakeIndex, 1); // Splice is mutating the array\n    }\n    if (nonLazyLoadIndex !== -1) {\n      this.selectedItemIds.splice(nonLazyLoadIndex, 1); // Splice is mutating the array\n    }\n\n    this.setFakeIsAllSelected();\n  }\n  //#endregion\n\n  //#region Client side table\n\n  // Can do it with Id also, because we are never adding the new record in the table at the same page.\n  getFormArrayControlByIndex(\n    formControlName: string,\n    index: number,\n  ): SpiderlyFormControl {\n    if (this.getFormControl) {\n      return this.getFormControl(\n        formControlName,\n        index,\n        this.additionalIndexes,\n      );\n    } else {\n      return null;\n    }\n  }\n\n  //#endregion\n}\n\nexport class Action {\n  name?: string;\n  field?: string;\n  icon?: string;\n  style?: string;\n  styleClass?: string;\n  onClick?: (id: number) => void;\n\n  constructor({\n    name,\n    field,\n    icon,\n    style,\n    styleClass,\n    onClick,\n  }: {\n    name?: string;\n    field?: string;\n    icon?: string;\n    style?: string;\n    styleClass?: string;\n    onClick?: () => void;\n  } = {}) {\n    this.name = name;\n    this.field = field;\n    this.icon = icon;\n    this.style = style;\n    this.styleClass = styleClass;\n    this.onClick = onClick;\n  }\n}\n\nexport class Column<T = any> {\n  name?: string;\n  field?: string & keyof T;\n  filterField?: string & keyof T; // Made specificaly for multiautocomplete, maybe for something more in the future\n  filterType?: 'text' | 'date' | 'multiselect' | 'boolean' | 'numeric' | 'blob';\n  filterPlaceholder?: string;\n  showMatchModes?: boolean;\n  showAddButton?: boolean;\n  dropdownOrMultiselectValues?: PrimengOption[];\n  actions?: Action[];\n  editable?: boolean;\n  showTime?: boolean;\n  decimalPlaces?: number;\n  sortable?: boolean;\n\n  constructor({\n    name,\n    field,\n    filterField,\n    filterType,\n    filterPlaceholder,\n    showMatchModes,\n    showAddButton,\n    dropdownOrMultiselectValues,\n    actions,\n    editable,\n    showTime,\n    decimalPlaces,\n    sortable,\n  }: {\n    name?: string;\n    field?: string & keyof T;\n    filterField?: string & keyof T; // Made specificaly for multiautocomplete, maybe for something more in the future;\n    filterType?: 'text' | 'date' | 'multiselect' | 'boolean' | 'numeric' | 'blob';\n    filterPlaceholder?: string;\n    showMatchModes?: boolean;\n    showAddButton?: boolean;\n    dropdownOrMultiselectValues?: PrimengOption[];\n    actions?: Action[];\n    editable?: boolean;\n    showTime?: boolean;\n    decimalPlaces?: number;\n    sortable?: boolean;\n  } = {}) {\n    this.name = name;\n    this.field = field;\n    this.filterField = filterField;\n    this.filterType = filterType;\n    this.filterPlaceholder = filterPlaceholder;\n    this.showMatchModes = showMatchModes;\n    this.showAddButton = showAddButton;\n    this.dropdownOrMultiselectValues = dropdownOrMultiselectValues;\n    this.actions = actions;\n    this.editable = editable;\n    this.showTime = showTime;\n    this.decimalPlaces = decimalPlaces;\n    this.sortable = sortable;\n  }\n}\n\nexport class RowClickEvent {\n  index?: number;\n  id?: number;\n  additionalIndexes?: any;\n\n  constructor({\n    index,\n    id,\n    additionalIndexes,\n  }: {\n    index?: number;\n    id?: number;\n    additionalIndexes?: any;\n  } = {}) {\n    this.index = index;\n    this.id = id;\n    this.additionalIndexes = additionalIndexes;\n  }\n}\n\nexport class AllClickEvent {\n  checked?: boolean;\n  additionalIndexes?: any;\n\n  constructor({\n    checked,\n    additionalIndexes,\n  }: {\n    checked?: boolean;\n    additionalIndexes?: any;\n  } = {}) {\n    this.checked = checked;\n    this.additionalIndexes = additionalIndexes;\n  }\n}\n","<ng-container *transloco=\"let t\">\n  <div\n    [class]=\"\n      showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\n    \"\n  >\n    <p-table\n      #dt\n      [value]=\"items\"\n      [rows]=\"rows\"\n      [rowHover]=\"true\"\n      [paginator]=\"showPaginator\"\n      responsiveLayout=\"scroll\"\n      [lazy]=\"hasLazyLoad\"\n      (onLazyLoad)=\"lazyLoad($event)\"\n      [totalRecords]=\"totalRecords\"\n      class=\"spiderly-table\"\n      [loading]=\"items === undefined || loading === true\"\n      [selectionMode]=\"selectionMode\"\n      dataKey=\"id\"\n      (onFilter)=\"filter($event)\"\n      sortMode=\"multiple\"\n    >\n      <ng-template pTemplate=\"caption\">\n        <div class=\"table-header overflow-auto\">\n          <div style=\"display: flex; align-items: center; gap: 8px\">\n            <i class=\"{{ tableIcon }}\" style=\"font-size: 20px\"></i>\n            <div style=\"margin: 0px; font-size: 17.5px\">{{ tableTitle }}</div>\n          </div>\n          <div style=\"display: flex; gap: 8px\">\n            <button\n              pButton\n              [label]=\"t('ClearFilters')\"\n              class=\"p-button-outlined\"\n              style=\"flex: none\"\n              icon=\"pi pi-filter-slash\"\n              (click)=\"clear(dt)\"\n            ></button>\n            <button\n              pButton\n              *ngIf=\"showExportToExcelButton\"\n              [label]=\"t('ExportToExcel')\"\n              class=\"p-button-outlined\"\n              style=\"flex: none\"\n              icon=\"pi pi-download\"\n              (click)=\"exportListToExcel()\"\n            ></button>\n            <button\n              pButton\n              *ngIf=\"showReloadTableButton\"\n              [label]=\"t('Reload')\"\n              class=\"p-button-outlined\"\n              style=\"flex: none\"\n              icon=\"pi pi-refresh\"\n              (click)=\"reload()\"\n            ></button>\n            <button\n              pButton\n              *ngIf=\"deleteListFromTableObservableMethod && rowsSelectedNumber > 0\"\n              [label]=\"t('DeleteSelected') + ' (' + rowsSelectedNumber + ')'\"\n              class=\"p-button-danger\"\n              style=\"flex: none\"\n              icon=\"pi pi-trash\"\n              (click)=\"deleteSelectedObjects()\"\n            ></button>\n          </div>\n        </div>\n      </ng-template>\n      <ng-template pTemplate=\"header\">\n        <tr>\n          <th style=\"width: 0rem\" *ngIf=\"selectionMode == 'multiple'\">\n            <div style=\"display: flex; gap: 8px\">\n              <p-checkbox\n                *ngIf=\"showSelectAllCheckbox\"\n                [disabled]=\"readonly\"\n                (onChange)=\"selectAll($event.checked)\"\n                [(ngModel)]=\"fakeIsAllSelected\"\n                [binary]=\"true\"\n              ></p-checkbox>\n              ({{ rowsSelectedNumber }})\n            </div>\n          </th>\n          <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\n            <th\n              [pSortableColumn]=\"col.field\"\n              [pSortableColumnDisabled]=\"col.sortable === false || !col.field\"\n              [style]=\"getColHeaderWidth(col.filterType)\"\n            >\n              <div\n                style=\"\n                  display: flex;\n                  justify-content: space-between;\n                  align-items: center;\n                \"\n              >\n                <span style=\"display: flex; align-items: center; gap: 4px\">\n                  {{ col.name }}\n                  <p-sortIcon\n                    *ngIf=\"col.sortable !== false && col.field\"\n                    [field]=\"col.field!\"\n                  ></p-sortIcon>\n                </span>\n                <p-columnFilter\n                  *ngIf=\"col.filterType != null && col.filterType !== 'blob'\"\n                  [type]=\"col.filterType\"\n                  [field]=\"col.filterField ?? col.field\"\n                  display=\"menu\"\n                  [placeholder]=\"col.filterPlaceholder\"\n                  [showOperator]=\"false\"\n                  [showMatchModes]=\"col.showMatchModes\"\n                  [showAddButton]=\"col.showAddButton\"\n                  [matchModeOptions]=\"getColMatchModeOptions(col.filterType)\"\n                  [matchMode]=\"getColMatchMode(col.filterType)\"\n                >\n                  <ng-template\n                    *ngIf=\"isDropOrMulti(col.filterType)\"\n                    pTemplate=\"filter\"\n                    let-value\n                    let-filter=\"filterCallback\"\n                  >\n                    <p-multiSelect\n                      [ngModel]=\"value\"\n                      [options]=\"col.dropdownOrMultiselectValues\"\n                      [placeholder]=\"t('All')\"\n                      (onChange)=\"filter($event.value)\"\n                      optionLabel=\"label\"\n                      optionValue=\"code\"\n                      [style]=\"{ width: '240px' }\"\n                    >\n                      <ng-template let-item pTemplate=\"item\">\n                        <div class=\"p-multiselect-representative-option\">\n                          <span class=\"ml-2\">{{ item.label }}</span>\n                        </div>\n                      </ng-template>\n                    </p-multiSelect>\n                  </ng-template>\n                  <ng-template\n                    *ngIf=\"col.filterType == 'date'\"\n                    pTemplate=\"filter\"\n                    let-value\n                    let-filter=\"filterCallback\"\n                  >\n                    <p-datepicker\n                      [ngModel]=\"value\"\n                      [showTime]=\"col.showTime\"\n                      (onSelect)=\"filter($event)\"\n                    ></p-datepicker>\n                  </ng-template>\n                </p-columnFilter>\n              </div>\n            </th>\n          </ng-container>\n        </tr>\n      </ng-template>\n      <ng-template\n        pTemplate=\"body\"\n        let-rowData\n        let-index=\"rowIndex\"\n        let-editing=\"editing\"\n      >\n        <tr\n          [class.clickable]=\"navigateOnRowClick\"\n          (click)=\"onRowClick(rowData)\"\n        >\n          <td *ngIf=\"selectionMode == 'multiple'\">\n            <p-checkbox\n              [disabled]=\"readonly\"\n              (onChange)=\"selectRow(rowData[idField], rowData.index)\"\n              [ngModel]=\"isRowSelected(rowData[idField])\"\n              [binary]=\"true\"\n            ></p-checkbox>\n          </td>\n          <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\n            <td [style]=\"getStyleForBodyColumn(col)\" *ngIf=\"!col.editable\">\n              <div\n                style=\"\n                  display: flex;\n                  align-items: center;\n                  justify-content: center;\n                  gap: 18px;\n                \"\n              >\n                <ng-container\n                  *ngFor=\"let action of col.actions; trackBy: actionTrackByFn\"\n                >\n                  <span\n                    [pTooltip]=\"action.name\"\n                    [class]=\"getClassForAction(action)\"\n                    [style]=\"getStyleForAction(action)\"\n                    (click)=\"getMethodForAction(action, rowData)\"\n                  ></span>\n                </ng-container>\n              </div>\n              <ng-container *ngIf=\"col.filterType === 'blob'\">\n                <img width=\"45\" [src]=\"getRowData(rowData, col)\" alt=\"\" />\n              </ng-container>\n              <ng-container *ngIf=\"col.filterType !== 'blob'\">\n                {{ getRowData(rowData, col) }}\n              </ng-container>\n            </td>\n            <td *ngIf=\"col.editable\">\n              <spiderly-number\n                [control]=\"getFormArrayControlByIndex(col.field, rowData.index)\"\n                [showLabel]=\"false\"\n              ></spiderly-number>\n            </td>\n          </ng-container>\n        </tr>\n      </ng-template>\n      <ng-template pTemplate=\"emptymessage\">\n        <tr>\n          <td\n            [attr.colspan]=\"\n              cols?.length + (selectionMode === 'multiple' ? 1 : 0)\n            \"\n          >\n            {{ t(\"NoRecordsFound\") }}\n          </td>\n        </tr>\n      </ng-template>\n      <ng-template pTemplate=\"loadingbody\">\n        <tr>\n          <td\n            [attr.colspan]=\"\n              cols?.length + (selectionMode === 'multiple' ? 1 : 0)\n            \"\n          >\n            {{ t(\"Loading\") }}...\n          </td>\n        </tr>\n      </ng-template>\n      <ng-template pTemplate=\"paginatorleft\">\n        {{ t(\"TotalRecords\") }}: {{ totalRecords }}\n      </ng-template>\n      <ng-template pTemplate=\"paginatorright\">\n        <div style=\"display: flex; justify-content: end; gap: 10px\">\n          <spiderly-button\n            *ngIf=\"showAddButton\"\n            [label]=\"t('AddNew')\"\n            icon=\"pi pi-plus\"\n            (onClick)=\"navigateToDetails(0)\"\n          ></spiderly-button>\n        </div>\n      </ng-template>\n    </p-table>\n  </div>\n</ng-container>\n","import {\n  Component,\n  ContentChild,\n  EventEmitter,\n  Inject,\n  Input,\n  LOCALE_ID,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport {\n  Table,\n  TableFilterEvent,\n  TableLazyLoadEvent,\n  TableModule,\n} from 'primeng/table';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { SpiderlyControlsModule } from '../../controls/spiderly-controls.module';\nimport { PaginatedResult } from '../../entities/paginated-result';\nimport { Filter } from '../../entities/filter';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ButtonModule } from 'primeng/button';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { MatchModeCodes } from '../../enums/match-mode-enum-codes';\nimport { Action } from '../spiderly-data-table/spiderly-data-table.component';\nimport { SelectItem } from 'primeng/api';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { SelectModule } from 'primeng/select';\nimport { BaseEntity } from '../../entities/base-entity';\nimport { PrimengOption } from '../../entities/primeng-option';\n\n@Component({\n  selector: 'spiderly-data-view',\n  templateUrl: './spiderly-data-view.component.html',\n  styleUrl: 'spiderly-data-view.component.scss',\n  imports: [\n    FormsModule,\n    CommonModule,\n    TranslocoDirective,\n    SpiderlyControlsModule,\n    TableModule,\n    ButtonModule,\n    MultiSelectModule,\n    CheckboxModule,\n    TooltipModule,\n    DatePickerModule,\n    InputTextModule,\n    InputNumberModule,\n    SelectModule,\n  ],\n})\nexport class SpiderlyDataViewComponent<T> implements OnInit {\n  @ViewChild('dt') table: Table;\n  /**\n   * List of items in the table.\n   * Should be provided only when `hasLazyLoad === false`.\n   */\n  @Input() items: T[];\n  @Input() rows: number = 10;\n  @Input() filters: DataViewFilter<T>[] = [];\n  totalRecords: number;\n  @Output() onLazyLoad: EventEmitter<Filter> = new EventEmitter();\n\n  @Input() showCardWrapper: boolean = true;\n  /**\n   * Whether to display additional data on the right side of the paginator.\n   * Defaults to `false`.\n   */\n  @Input() showPaginatorRightData: boolean = false;\n  @Input() showTotalRecordsNumber: boolean = false;\n  @Input() applyFiltersIcon: string = 'pi pi-filter';\n  @Input() clearFiltersIcon: string = 'pi pi-filter-slash';\n\n  @Input() getPaginatedListObservableMethod: (\n    filter: Filter,\n  ) => Observable<PaginatedResult>;\n\n  lastLazyLoadEvent: TableLazyLoadEvent;\n  loading: boolean = true;\n\n  matchModeDateOptions: SelectItem[] = [];\n  matchModeNumberOptions: SelectItem[] = [];\n\n  @ContentChild('cardBody', { read: TemplateRef }) cardBody!: TemplateRef<any>;\n\n  constructor(\n    private translocoService: TranslocoService,\n    @Inject(LOCALE_ID) private locale: string,\n  ) {}\n\n  ngOnInit(): void {\n    this.matchModeDateOptions = [\n      {\n        label: this.translocoService.translate('OnDate'),\n        value: MatchModeCodes.Equals,\n      },\n      {\n        label: this.translocoService.translate('DatesBefore'),\n        value: MatchModeCodes.LessThan,\n      },\n      {\n        label: this.translocoService.translate('DatesAfter'),\n        value: MatchModeCodes.GreaterThan,\n      },\n    ];\n\n    this.matchModeNumberOptions = [\n      {\n        label: this.translocoService.translate('Equals'),\n        value: MatchModeCodes.Equals,\n      },\n      {\n        label: this.translocoService.translate('LessThan'),\n        value: MatchModeCodes.LessThan,\n      },\n      {\n        label: this.translocoService.translate('MoreThan'),\n        value: MatchModeCodes.GreaterThan,\n      },\n    ];\n  }\n\n  lazyLoad(event: TableLazyLoadEvent) {\n    this.lastLazyLoadEvent = event;\n\n    const transformedFilter: {\n      [K in keyof T]?: { value: any; matchMode: MatchModeCodes }[];\n    } = {};\n\n    for (const key in event.filters) {\n      const filterMeta = event.filters[key];\n\n      if (Array.isArray(filterMeta)) {\n        transformedFilter[key] = filterMeta;\n      } else {\n        transformedFilter[key] = [\n          {\n            value: filterMeta.value,\n            matchMode: filterMeta.matchMode,\n          },\n        ];\n      }\n    }\n\n    let tableFilter = event as unknown as Filter<T>;\n\n    tableFilter.filters = transformedFilter;\n\n    this.onLazyLoad.next(tableFilter);\n\n    this.getPaginatedListObservableMethod(tableFilter).subscribe({\n      next: async (res) => {\n        this.items = res.data;\n        this.totalRecords = res.totalRecords;\n\n        this.loading = false;\n      },\n      error: () => {\n        this.loading = false;\n      },\n    });\n  }\n\n  filter(event: TableFilterEvent) {}\n\n  getDefaultMatchMode(filterType: string): any {\n    switch (filterType) {\n      case 'text':\n        return MatchModeCodes.Contains;\n      case 'date':\n        return MatchModeCodes.Equals;\n      case 'multiselect':\n        return MatchModeCodes.In;\n      case 'boolean':\n        return MatchModeCodes.Equals;\n      case 'numeric':\n        return MatchModeCodes.Equals;\n      default:\n        return null;\n    }\n  }\n\n  getMatchModeOptions(filterType: string) {\n    switch (filterType) {\n      case 'text':\n        return [];\n      case 'date':\n        return this.matchModeDateOptions;\n      case 'multiselect':\n        return [];\n      case 'boolean':\n        return [];\n      case 'numeric':\n        return this.matchModeNumberOptions;\n      default:\n        return [];\n    }\n  }\n\n  reload() {\n    this.loading = true;\n    this.items = null;\n    this.lazyLoad(this.lastLazyLoadEvent);\n  }\n\n  colTrackByFn(index, item) {\n    return item.field;\n  }\n\n  actionTrackByFn(index, item: Action) {\n    return `${index}${item.field}`;\n  }\n\n  applyFilters = () => {\n    this.table._filter();\n  };\n\n  clearFilters() {\n    this.table.clear();\n  }\n}\n\nexport interface DataViewCardBody<T> {\n  $implicit: T;\n  item: T;\n  index: number;\n}\n\nexport interface DataViewFilter<T extends BaseEntity> {\n  label?: string;\n  field?: string & keyof T;\n  filterField?: string & keyof T; // Made specificaly for multiautocomplete, maybe for something more in the future\n  type?: 'text' | 'date' | 'multiselect' | 'boolean' | 'numeric' | 'blob';\n  placeholder?: string;\n  showMatchModes?: boolean;\n  dropdownOrMultiselectValues?: PrimengOption[];\n}\n","<ng-container *transloco=\"let t\">\n  <div\n    [class]=\"\n      showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\n    \"\n  >\n    <p-table\n      #dt\n      [value]=\"items\"\n      [rows]=\"rows\"\n      [rowHover]=\"false\"\n      responsiveLayout=\"scroll\"\n      [lazy]=\"true\"\n      (onLazyLoad)=\"lazyLoad($event)\"\n      [totalRecords]=\"totalRecords\"\n      class=\"spiderly-table\"\n      [loading]=\"items === undefined || loading === true\"\n      dataKey=\"id\"\n      (onFilter)=\"filter($event)\"\n      [filterDelay]=\"500\"\n      [paginator]=\"true\"\n    >\n      <ng-template #caption>\n        <div *ngIf=\"filters.length !== 0\">\n          <div class=\"data-view-grid\">\n            @for (filter of filters; track $index) {\n              <div>\n                <div\n                  style=\"\n                    display: flex;\n                    flex-direction: column;\n                    gap: 0.5rem;\n                    position: relative;\n                  \"\n                >\n                  <div>\n                    <label>\n                      {{ filter.label }}\n                    </label>\n                  </div>\n\n                  <p-columnFilter\n                    *ngIf=\"filter.type != null\"\n                    [type]=\"filter.type\"\n                    [field]=\"filter.filterField ?? filter.field\"\n                    display=\"row\"\n                    [placeholder]=\"filter.placeholder\"\n                    [showOperator]=\"false\"\n                    [showMenu]=\"filter.showMatchModes\"\n                    [showMatchModes]=\"true\"\n                    [showClearButton]=\"false\"\n                    [matchMode]=\"getDefaultMatchMode(filter.type)\"\n                    [matchModeOptions]=\"getMatchModeOptions(filter.type)\"\n                  >\n                    <ng-container *ngIf=\"filter.type == 'multiselect'\">\n                      <ng-template\n                        pTemplate=\"filter\"\n                        let-value\n                        let-filter=\"filterCallback\"\n                      >\n                        <p-multiSelect\n                          [ngModel]=\"value\"\n                          [options]=\"filter.dropdownOrMultiselectValues\"\n                          [placeholder]=\"t('All')\"\n                          (onChange)=\"filter($event.value)\"\n                          optionLabel=\"label\"\n                          optionValue=\"code\"\n                          [style]=\"{ width: '100%' }\"\n                        >\n                          <ng-template let-item pTemplate=\"item\">\n                            <div class=\"p-multiselect-representative-option\">\n                              <span class=\"ml-2\">{{ item.label }}</span>\n                            </div>\n                          </ng-template>\n                        </p-multiSelect>\n                      </ng-template>\n                    </ng-container>\n                  </p-columnFilter>\n                </div>\n              </div>\n            }\n          </div>\n          <div style=\"display: flex; gap: 12px\">\n            <spiderly-button\n              [label]=\"t('ApplyFilters')\"\n              (onClick)=\"applyFilters()\"\n              [icon]=\"applyFiltersIcon\"\n            ></spiderly-button>\n            <spiderly-button\n              [label]=\"t('ClearFilters')\"\n              (onClick)=\"clearFilters()\"\n              [icon]=\"clearFiltersIcon\"\n            ></spiderly-button>\n          </div>\n        </div>\n      </ng-template>\n      <ng-template #body let-rowData let-index=\"rowIndex\">\n        <tr style=\"padding: 0; margin-bottom: 0\">\n          <td style=\"display: block; border: 0; padding: 0\">\n            <ng-container\n              *ngTemplateOutlet=\"\n                cardBody;\n                context: { $implicit: rowData, item: rowData, index: index }\n              \"\n            >\n            </ng-container>\n          </td>\n        </tr>\n      </ng-template>\n      <ng-template pTemplate=\"emptymessage\">\n        {{ t(\"NoRecordsFound\") }}\n      </ng-template>\n      <ng-template *ngIf=\"showTotalRecordsNumber\" pTemplate=\"paginatorleft\">\n        {{ t(\"TotalRecords\") }}: {{ totalRecords }}\n      </ng-template>\n      <ng-template *ngIf=\"showPaginatorRightData\" pTemplate=\"paginatorright\">\n        <ng-content select=\"[PAGINATORRIGHT]\"></ng-content>\n      </ng-template>\n    </p-table>\n  </div>\n</ng-container>\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'spiderly-card',\n  templateUrl: './spiderly-card.component.html',\n  styles: [],\n})\nexport class SpiderlyCardComponent implements OnInit {\n  @Input() icon: string = 'pi pi-file-edit';\n  @Input() title: string;\n\n  constructor() {}\n\n  ngOnInit(): void {}\n}\n","<div class=\"card responsive-card-padding\">\n  <div\n    style=\"display: flex; align-items: center; margin-bottom: 14px; gap: 8px\"\n  >\n    <i style=\"font-size: 21px\" class=\"{{ icon }} primary-color\"></i>\n    <div style=\"margin: 0; font-size: 17.5px\">{{ title }}</div>\n  </div>\n  <ng-content></ng-content>\n</div>\n","import { BaseEntity } from './base-entity';\n\n// FT HACK: Fake class, because of api imports\nexport class Codebook extends BaseEntity {\n  code?: string;\n  displayName?: string;\n\n  constructor({\n    code,\n    displayName,\n  }: {\n    code?: string;\n    displayName?: string;\n  } = {}) {\n    super();\n\n    this.code = code;\n    this.displayName = displayName;\n  }\n\n  static readonly typeName = 'Codebook' as const;\n}\n","export class FilterSortMeta {\n  field: string;\n  order: number;\n\n  constructor({\n    field,\n    order,\n  }: {\n    field?: string;\n    order?: number;\n  } = {}) {\n    this.field = field as string;\n    this.order = order as number;\n  }\n\n  static schema = {\n    field: {\n      type: 'string',\n    },\n    order: {\n      type: 'number',\n    },\n  } as const;\n\n  static readonly typeName = 'FilterSortMeta' as const;\n}\n","import { BaseEntity } from './base-entity';\nimport { FilterRule } from './filter-rule';\nimport { FilterSortMeta } from './filter-sort-meta';\n\nexport class Filter<T extends BaseEntity = any> extends BaseEntity {\n  filters?: { [K in keyof T]?: FilterRule[] };\n  first?: number;\n  rows?: number;\n  multiSortMeta?: FilterSortMeta[];\n  additionalFilterIdInt?: number;\n  additionalFilterIdLong?: number;\n\n  constructor({\n    filters,\n    first,\n    rows,\n    multiSortMeta,\n    additionalFilterIdInt,\n    additionalFilterIdLong,\n  }: {\n    filters?: { [K in keyof T]?: FilterRule[] };\n    first?: number;\n    rows?: number;\n    multiSortMeta?: FilterSortMeta[];\n    additionalFilterIdInt?: number;\n    additionalFilterIdLong?: number;\n  } = {}) {\n    super();\n\n    this.filters = filters;\n    this.first = first;\n    this.rows = rows;\n    this.multiSortMeta = multiSortMeta;\n    this.additionalFilterIdInt = additionalFilterIdInt;\n    this.additionalFilterIdLong = additionalFilterIdLong;\n  }\n\n  static schema = {\n    filters: {\n      type: 'Object',\n      // Note: 'filters' is a dynamic map (Dictionary), so we usually treat it as a generic Object\n      // unless strict typing is required for the inner FilterRule[] values by the serializer.\n    },\n    first: {\n      type: 'number',\n    },\n    rows: {\n      type: 'number',\n    },\n    multiSortMeta: {\n      type: 'FilterSortMeta[]',\n      get nestedConstructor() {\n        return FilterSortMeta;\n      },\n    },\n    additionalFilterIdInt: {\n      type: 'number',\n    },\n    additionalFilterIdLong: {\n      type: 'number',\n    },\n  } as const;\n\n  static readonly typeName = 'Filter' as const;\n}\n","import { MatchModeCodes } from '../enums/match-mode-enum-codes';\n\n/**\n * Represents a filter rule used for querying or filtering data collections.\n *\n * The `FilterRule` class is a generic structure that defines a single filtering condition,\n * including the match mode (comparison operator), the value to compare, and an optional logical operator.\n *\n * The allowed match modes are determined by the type parameter `T`:\n * - For `string`: supports `Contains`, `StartsWith`, and `Equals`.\n * - For `boolean`: supports `Equals`.\n * - For `Date`: supports `Equals`, `GreaterThan`, and `LessThan`.\n * - For `number`: supports `Equals`, `GreaterThan`, `LessThan`, and `In`.\n * - For other types: allows any value from `MatchModeCodes`.\n *\n * @template T The type of the value to filter by.\n */\nexport class FilterRule<T = any> {\n  matchMode: AllowedMatchModes<T>;\n  value: T;\n  operator?: string;\n}\n\ntype AllowedMatchModes<T> = T extends string\n  ? MatchModeCodes.Contains | MatchModeCodes.StartsWith | MatchModeCodes.Equals\n  : T extends boolean\n    ? MatchModeCodes.Equals\n    : T extends Date\n      ?\n          | MatchModeCodes.Equals\n          | MatchModeCodes.GreaterThan\n          | MatchModeCodes.LessThan\n      : T extends number\n        ?\n            | MatchModeCodes.Equals\n            | MatchModeCodes.GreaterThan\n            | MatchModeCodes.LessThan\n            | MatchModeCodes.In\n        : MatchModeCodes;\n","import { BaseEntity } from './base-entity';\n\nexport class IsAuthorizedForSaveEvent extends BaseEntity {\n  isAuthorizedForSave?: boolean;\n\n  constructor({\n    isAuthorizedForSave,\n  }: {\n    isAuthorizedForSave?: boolean;\n  } = {}) {\n    super();\n\n    this.isAuthorizedForSave = isAuthorizedForSave;\n  }\n\n  static readonly typeName = 'IsAuthorizedForSaveEvent' as const;\n}\n","import { BaseEntity } from './base-entity';\n\nexport class LastMenuIconIndexClicked extends BaseEntity {\n  index?: number;\n\n  constructor({\n    index,\n  }: {\n    index?: number;\n  } = {}) {\n    super();\n\n    this.index = index;\n  }\n\n  static readonly typeName = 'LastMenuIconIndexClicked' as const;\n}\n","import { BaseEntity } from '../entities/base-entity';\n\nexport class LazyLoadSelectedIdsResult extends BaseEntity {\n  selectedIds?: number[] = []; // FT: Only for showing checkboxes, we will not send this to the backend\n  totalRecordsSelected?: number = 0;\n\n  constructor({\n    selectedIds,\n    totalRecordsSelected,\n  }: {\n    selectedIds?: number[];\n    totalRecordsSelected?: number;\n  } = {}) {\n    super();\n\n    this.selectedIds = selectedIds;\n    this.totalRecordsSelected = totalRecordsSelected;\n  }\n\n  static readonly typeName = 'LazyLoadSelectedIdsResult' as const;\n}\n","export class MenuChangeEvent {\n  key: string;\n  routeEvent?: boolean;\n}\n","import { BaseEntity } from '../entities/base-entity';\n\nexport class Namebook extends BaseEntity {\n  id?: any;\n  displayName?: string;\n\n  constructor({\n    id,\n    displayName,\n  }: {\n    id?: any;\n    displayName?: string;\n  } = {}) {\n    super();\n\n    this.id = id;\n    this.displayName = displayName;\n  }\n\n  static schema = {\n    id: {\n      type: 'any',\n    },\n    displayName: {\n      type: 'string',\n    },\n  } as const;\n\n  static readonly typeName = 'Namebook' as const;\n}\n","export class PaginatedResult<T = any> {\n  data?: T[];\n  totalRecords: number;\n}\n","import { BaseEntity } from '../entities/base-entity';\n\nexport class PrimengOption extends BaseEntity {\n  label?: string;\n  code?: any; // Can't be value: https://github.com/primefaces/primeng/issues/17332#issuecomment-2922861294\n\n  constructor({\n    label,\n    code,\n  }: {\n    label?: string;\n    code?: any;\n  } = {}) {\n    super();\n\n    this.label = label;\n    this.code = code;\n  }\n\n  static readonly typeName = 'PrimengOption' as const;\n}\n","import { BaseEntity } from '../entities/base-entity';\n\n// FT HACK: Fake class, because of api imports\nexport class SimpleSaveResult extends BaseEntity {\n  id?: string;\n\n  constructor({\n    id,\n  }: {\n    id?: string;\n  } = {}) {\n    super();\n\n    this.id = id;\n  }\n\n  static typeName = 'SimpleSaveResult' as const;\n}\n","export enum SecurityPermissionCodes {\n  ReadUser = 'ReadUser',\n  UpdateUser = 'UpdateUser',\n  InsertUser = 'InsertUser',\n  DeleteUser = 'DeleteUser',\n  ReadRole = 'ReadRole',\n  UpdateRole = 'UpdateRole',\n  InsertRole = 'InsertRole',\n  DeleteRole = 'DeleteRole',\n  ReadPermission = 'ReadPermission',\n  UpdatePermission = 'UpdatePermission',\n  InsertPermission = 'InsertPermission',\n  DeletePermission = 'DeletePermission',\n}\n","export enum VerificationTypeCodes {\n  Login = 0,\n  Registration = 1,\n}\n","import { Injectable } from '@angular/core';\nimport { CanActivate, Router } from '@angular/router';\nimport { Observable, map } from 'rxjs';\nimport { AuthServiceBase } from '../services/auth.service.base';\nimport { ConfigServiceBase } from '../services/config.service.base';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AuthGuard implements CanActivate {\n  constructor(\n    private authService: AuthServiceBase,\n    private router: Router,\n    private config: ConfigServiceBase,\n  ) {}\n\n  canActivate(): Observable<boolean> {\n    return this.checkAuth();\n  }\n\n  private checkAuth(): Observable<boolean> {\n    return this.authService.user$.pipe(\n      map((user) => {\n        if (user) {\n          return true;\n        } else {\n          // const returnUrl = this.router.getCurrentNavigation()?.extractedUrl.toString() || '/';\n          // this.router.navigate(['login'], {\n          //    queryParams: { returnUrl },\n          // });\n          this.router.navigate([this.config.loginSlug]);\n          return false;\n        }\n      }),\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CanActivate } from '@angular/router';\nimport { Observable, map } from 'rxjs';\nimport { AuthServiceBase } from '../services/auth.service.base';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NotAuthGuard implements CanActivate {\n  constructor(private authService: AuthServiceBase) {}\n\n  canActivate(): Observable<boolean> {\n    return this.checkAuth();\n  }\n\n  private checkAuth(): Observable<boolean> {\n    return this.authService.user$.pipe(\n      map((user) => {\n        if (user) {\n          this.authService.navigateToDashboard();\n          return false;\n        } else {\n          return true;\n        }\n      }),\n    );\n  }\n}\n","import { TranslocoService } from '@jsverse/transloco';\nimport { ErrorHandler, Injectable } from '@angular/core';\nimport { SpiderlyMessageService } from '../services/spiderly-message.service';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ConfigServiceBase } from '../services/config.service.base';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SpiderlyErrorHandler implements ErrorHandler {\n  constructor(\n    private messageService: SpiderlyMessageService,\n    private translocoService: TranslocoService,\n    private config: ConfigServiceBase,\n  ) {}\n\n  handleError(error: any): void {\n    if (this.config.production == false) {\n      console.error(error);\n    }\n\n    if (error instanceof HttpErrorResponse == false) {\n      this.messageService.errorMessage(\n        this.translocoService.translate('UnexpectedErrorDetails'),\n        this.translocoService.translate('UnexpectedErrorTitle'),\n      );\n    }\n  }\n}\n","import { HttpEvent, HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { Observable, finalize } from 'rxjs';\n\nexport const httpLoadingInterceptor: HttpInterceptorFn = (req, next) => {\n  const spinner = inject(NgxSpinnerService);\n\n  const shouldSkipSpinner = req.params.has('X-Skip-Spinner'); // Using this for multiautocomplete, autocomplete, dropdown, table etc...\n\n  if (!shouldSkipSpinner) spinner.show();\n\n  return next(req).pipe(\n    finalize(() => {\n      if (!shouldSkipSpinner) {\n        spinner.hide();\n      }\n    }),\n  ) as Observable<HttpEvent<any>>;\n};\n","import {\n  HttpEvent,\n  HttpResponse,\n  HttpInterceptorFn,\n  HttpRequest,\n  HttpParams,\n} from '@angular/common/http';\nimport { tap } from 'rxjs';\n\nexport const jsonHttpInterceptor: HttpInterceptorFn = (req, next) => {\n  const cleanedBody = getCleanRequestBody(req.body);\n  const clonedRequest: HttpRequest<any> = req.clone({\n    body: cleanedBody,\n  });\n\n  return next(clonedRequest).pipe(\n    tap((event: HttpEvent<any>) => {\n      if (event instanceof HttpResponse) {\n        convertToDate(event.body);\n      }\n    }),\n  );\n};\n\nconst getCleanRequestBody = (obj: unknown): unknown => {\n  if (\n    obj === null ||\n    obj === undefined ||\n    obj instanceof FormData ||\n    obj instanceof Blob ||\n    obj instanceof File ||\n    obj instanceof ArrayBuffer\n  ) {\n    return obj;\n  }\n\n  if (Array.isArray(obj)) {\n    return obj.map((item) => getCleanRequestBody(item));\n  }\n\n  if (obj instanceof Date) {\n    return obj.toISOString();\n  }\n\n  if (typeof obj === 'object') {\n    const newObj: Record<string, unknown> = {};\n    for (const key of Object.keys(obj)) {\n      newObj[key] = getCleanRequestBody((obj as any)[key]);\n    }\n    return newObj;\n  }\n\n  return obj;\n};\n\n/**\n * @see https://stackoverflow.com/a/54733846/1306679\n */\nconst convertToDate = (\n  object: unknown,\n  parent?: Record<string, unknown> | unknown[],\n  key?: number | string,\n) => {\n  if (object === null) return;\n\n  const dateRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\n\n  if (typeof object === 'string') {\n    if (dateRegex.test(object)) {\n      const date = new Date(object);\n      parent[key] = date;\n    }\n  } else if (Array.isArray(object)) {\n    for (let i = 0; i < object.length; i++) convertToDate(object[i], object, i);\n  } else {\n    for (const key of Object.keys(object as Record<string, unknown>)) {\n      convertToDate(\n        (object as Record<string, unknown>)[key],\n        object as Record<string, unknown>,\n        key,\n      );\n    }\n  }\n};\n","import { inject, PLATFORM_ID } from '@angular/core';\nimport { HttpInterceptorFn } from '@angular/common/http';\nimport { ConfigServiceBase } from '../services/config.service.base';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport const jwtInterceptor: HttpInterceptorFn = (req, next) => {\n  const config = inject(ConfigServiceBase);\n  const platformId = inject(PLATFORM_ID);\n\n  let accessToken = null;\n  if (isPlatformBrowser(platformId)) {\n    accessToken = localStorage.getItem(config.accessTokenKey);\n  }\n\n  const isApiUrl = req.url.startsWith(config.apiUrl);\n\n  if (accessToken && isApiUrl) {\n    req = req.clone({\n      setHeaders: { Authorization: `Bearer ${accessToken}` },\n    });\n  }\n\n  return next(req);\n};\n","import {\n  HttpErrorResponse,\n  HttpInterceptorFn,\n  HttpRequest,\n} from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ApiErrorCodes } from '../errors/api-error-codes';\nimport { AuthServiceBase } from '../services/auth.service.base';\nimport { ConfigServiceBase } from '../services/config.service.base';\nimport { SpiderlyMessageService } from '../services/spiderly-message.service';\n\nexport const unauthorizedInterceptor: HttpInterceptorFn = (req, next) => {\n  const messageService = inject(SpiderlyMessageService);\n  const translocoService = inject(TranslocoService);\n  const config = inject(ConfigServiceBase);\n  const authService = inject(AuthServiceBase);\n\n  const handleAuthError = (\n    err: HttpErrorResponse,\n    request: HttpRequest<any>,\n  ): Observable<any> => {\n    if (!config.production) {\n      console.error(err);\n    }\n\n    let errorResponse = err.error;\n\n    if (request.responseType != 'json') errorResponse = JSON.parse(err.error);\n\n    if (err.status == 0) {\n      setTimeout(() => {\n        // Had problem when the server is shut down, and try to refresh token, warning message didn't appear\n        messageService.warningMessage(\n          translocoService.translate('ServerLostConnectionDetails'),\n          translocoService.translate('ServerLostConnectionTitle'),\n        );\n      }, 100);\n      return of(err.message);\n    } else if (err.status == 400) {\n      messageService.warningMessage(\n        errorResponse.message ??\n          translocoService.translate('BadRequestDetails'),\n        translocoService.translate('Warning'),\n      );\n\n      return of(err.message);\n    } else if (err.status == 401) {\n      if (errorResponse?.errorCode === ApiErrorCodes.InvalidToken) {\n        authService.clearLocalStorage();\n        return of(err.message);\n      }\n\n      messageService.warningMessage(\n        errorResponse?.message ?? translocoService.translate('LoginRequired'),\n        translocoService.translate('Warning'),\n      );\n\n      return of(err.message);\n    } else if (err.status == 403) {\n      messageService.warningMessage(\n        translocoService.translate('PermissionErrorDetails'),\n        translocoService.translate('PermissionErrorTitle'),\n      );\n      return of(err.message);\n    } else if (err.status == 404) {\n      messageService.warningMessage(\n        translocoService.translate('NotFoundDetails'),\n        translocoService.translate('NotFoundTitle'),\n      );\n      return of(err.message);\n    } else {\n      messageService.errorMessage(\n        translocoService.translate('UnexpectedErrorDetails'),\n        translocoService.translate('UnexpectedErrorTitle'),\n      );\n\n      return of(err.message);\n    }\n  };\n\n  return next(req).pipe(\n    catchError((err) => {\n      return handleAuthError(err, req);\n    }),\n  );\n};\n","import { Observable, of } from 'rxjs';\nimport { AuthServiceBase } from './auth.service.base';\nimport { AuthResult } from '../entities/security-entities';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport function authInitializer(\n  authService: AuthServiceBase,\n  platformId,\n): () => Observable<AuthResult> {\n  if (isPlatformBrowser(platformId)) {\n    return () => {\n      return authService.refreshToken();\n    };\n  }\n  return () => {\n    return of();\n  };\n}\n","import { ConfigServiceBase } from './config.service.base';\nimport { Injectable } from '@angular/core';\nimport { TranslocoLoader } from '@jsverse/transloco';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SpiderlyTranslocoLoader implements TranslocoLoader {\n  constructor(\n    private http: HttpClient,\n    private config: ConfigServiceBase,\n  ) {}\n\n  getTranslation(lang: string) {\n    return this.http.get(`${this.config.frontendUrl}/assets/i18n/${lang}.json`);\n  }\n}\n","import { Directive, Input } from '@angular/core';\n\n@Directive({\n  selector: '[templateType]',\n})\nexport class SpiderlyTemplateTypeDirective<T> {\n  @Input() templateType?: T;\n\n  static ngTemplateContextGuard<T>(\n    dir: SpiderlyTemplateTypeDirective<T>,\n    ctx: unknown,\n  ): ctx is T {\n    return true;\n  }\n}\n","/*\n * Public API Surface of spiderly\n */\n\nexport * from './lib/errors/api-error-codes';\nexport * from './lib/controls/base-autocomplete-control';\nexport * from './lib/controls/base-control';\nexport * from './lib/controls/base-dropdown-control';\nexport * from './lib/controls/spiderly-autocomplete/spiderly-autocomplete.component';\nexport * from './lib/controls/spiderly-calendar/spiderly-calendar.component';\nexport * from './lib/controls/spiderly-checkbox/spiderly-checkbox.component';\nexport * from './lib/controls/spiderly-colorpicker/spiderly-colorpicker.component';\nexport * from './lib/controls/spiderly-controls.module';\nexport * from './lib/controls/spiderly-dropdown/spiderly-dropdown.component';\nexport * from './lib/controls/spiderly-editor/spiderly-editor.component';\nexport * from './lib/controls/spiderly-file/spiderly-file.component';\nexport * from './lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component';\nexport * from './lib/controls/spiderly-multiselect/spiderly-multiselect.component';\nexport * from './lib/controls/spiderly-number/spiderly-number.component';\nexport * from './lib/controls/spiderly-password/spiderly-password.component';\nexport * from './lib/controls/spiderly-textarea/spiderly-textarea.component';\nexport * from './lib/controls/spiderly-textbox/spiderly-textbox.component';\n\nexport * from './lib/components/auth/login/login.component';\nexport * from './lib/components/auth/partials/login-verification.component';\nexport * from './lib/components/auth/partials/verification-wrapper.component';\nexport * from './lib/components/base-form/base-form.component';\nexport * from './lib/components/card-skeleton/card-skeleton.component';\nexport * from './lib/components/footer/footer.component';\nexport * from './lib/components/index-card/index-card.component';\nexport * from './lib/components/info-card/info-card.component';\nexport * from './lib/components/layout/layout.component';\nexport * from './lib/components/layout/profile-avatar/profile-avatar.component';\nexport * from './lib/components/layout/sidebar/menuitem.component';\nexport * from './lib/components/layout/sidebar/sidebar-menu.component';\nexport * from './lib/components/layout/sidebar/sidebar.component';\nexport * from './lib/components/layout/sidemenu-topbar/sidemenu-topbar.component';\nexport * from './lib/components/layout/topbar/topbar.component';\nexport * from './lib/components/not-found/not-found.component';\nexport * from './lib/components/required/required.component';\nexport * from './lib/components/spiderly-buttons/google-button/google-button.component';\nexport * from './lib/components/spiderly-buttons/return-button/return-button.component';\nexport * from './lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base';\nexport * from './lib/components/spiderly-buttons/spiderly-button/spiderly-button.component';\nexport * from './lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component';\nexport * from './lib/components/spiderly-data-table/spiderly-data-table.component';\nexport * from './lib/components/spiderly-data-view/spiderly-data-view.component';\nexport * from './lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component';\nexport * from './lib/components/spiderly-form-control/spiderly-form-control';\nexport * from './lib/components/spiderly-panels/panel-body/panel-body.component';\nexport * from './lib/components/spiderly-panels/panel-footer/panel-footer.component';\nexport * from './lib/components/spiderly-panels/panel-header/panel-header.component';\nexport * from './lib/components/spiderly-panels/spiderly-card/spiderly-card.component';\nexport * from './lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component';\nexport * from './lib/components/spiderly-panels/spiderly-panels.module';\n\nexport * from './lib/entities/base-entity';\nexport * from './lib/entities/codebook';\nexport * from './lib/entities/filter';\nexport * from './lib/entities/filter-rule';\nexport * from './lib/entities/filter-sort-meta';\nexport * from './lib/entities/image-dimensions-validation-result';\nexport * from './lib/entities/init-company-auth-dialog-details';\nexport * from './lib/entities/init-top-bar-data';\nexport * from './lib/entities/is-authorized-for-save-event';\nexport * from './lib/entities/last-menu-icon-index-clicked';\nexport * from './lib/entities/lazy-load-selected-ids-result';\nexport * from './lib/entities/menuchangeevent';\nexport * from './lib/entities/namebook';\nexport * from './lib/entities/paginated-result';\nexport * from './lib/entities/primeng-option';\nexport * from './lib/entities/security-entities';\nexport * from './lib/entities/simple-save-result';\nexport * from './lib/entities/spiderly-button';\n\nexport * from './lib/enums/match-mode-enum-codes';\nexport * from './lib/enums/security-enums';\nexport * from './lib/enums/verification-type-codes';\n\nexport * from './lib/guards/auth.guard';\nexport * from './lib/guards/not-auth.guard';\n\nexport * from './lib/handlers/spiderly-error-handler';\n\nexport * from './lib/interceptors/http-loading.interceptor';\nexport * from './lib/interceptors/json-parser.interceptor';\nexport * from './lib/interceptors/jwt.interceptor';\nexport * from './lib/interceptors/unauthorized.interceptor';\n\nexport * from './lib/services/api.service.security';\nexport * from './lib/services/app-initializer';\nexport * from './lib/services/app-layout.service.base';\nexport * from './lib/services/auth.service.base';\nexport * from './lib/services/base-form.service';\nexport * from './lib/services/config.service.base';\nexport * from './lib/services/helper-functions';\nexport * from './lib/services/spiderly-message.service';\nexport * from './lib/services/spiderly-transloco-loader';\nexport * from './lib/services/validator-abstract.service';\n\nexport * from './lib/directives/template-type.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.ValidatorAbstractService","i5","i4","i2","i3","i1","i2.SpiderlyMessageService","i3.ValidatorAbstractService","i6","i1.ValidatorAbstractService","i5.BaseFormService","i2.ConfigServiceBase","map","i1.ConfigServiceBase","i2.AuthServiceBase","i8.PanelHeaderComponent","i9.PanelBodyComponent","i10.PanelFooterComponent","i11.SpiderlyPanelComponent","i1.AuthServiceBase","i6.AuthServiceBase","i7.ConfigServiceBase","i8","i9.SpiderlyTextboxComponent","i10.SpiderlyButtonComponent","i3.PanelHeaderComponent","i4.PanelBodyComponent","i5.SpiderlyPanelComponent","i1.ApiSecurityService","i3.AuthServiceBase","i1.LayoutServiceBase","i3.SidebarMenuService","i4.AuthServiceBase","i5.ApiSecurityService","i6.ConfigServiceBase","i7","i8.SpiderlyAutocompleteComponent","i4.ConfigServiceBase","filter","i5.ConfigServiceBase","i3.ConfigServiceBase","i11","i14","i15","i16","i4.SpiderlyButtonComponent","i1.SpiderlyMessageService","finalize","tap"],"mappings":"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"}