spiderly 19.7.1 → 19.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"spiderly.mjs","sources":["../../../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":["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 '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 const mimeTypes: { [key: string]: string } = {\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.png': 'image/png',\n '.webp': 'image/webp',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.pdf': 'application/pdf',\n '.txt': 'text/plain',\n '.html': 'text/html',\n '.css': 'text/css',\n '.js': 'application/javascript',\n '.json': 'application/json',\n '.csv': 'text/csv',\n '.xml': 'application/xml',\n '.zip': 'application/zip',\n '.mp4': 'video/mp4',\n '.mp3': 'audio/mpeg',\n '.wav': 'audio/wav',\n '.avi': 'video/x-msvideo',\n '.doc': 'application/msword',\n '.docx':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.xls': 'application/vnd.ms-excel',\n '.xlsx':\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n // Add more as needed\n };\n\n const extension = fileName.substring(fileName.lastIndexOf('.')).toLowerCase();\n return mimeTypes[extension] || 'application/octet-stream'; // 'application/octet-stream' is a generic binary type\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() isCloudinaryFileData: boolean = true;\n @Input() imageWidth: number = 0;\n @Input() imageHeight: number = 0;\n @Input() maxFileSize: number = 20_000_000;\n\n acceptedFileTypesCommaSeparated: 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.isCloudinaryFileData) {\n this.pushFileFromCloudinaryUrl(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\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.control?.setValue(null);\n this.onFileRemoved.next(null);\n }\n\n // Put inside global functions if you need it\n async pushFileFromCloudinaryUrl(cloudinaryUrl: string) {\n const response = await fetch(cloudinaryUrl);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch file from Cloudinary: ${response.statusText}`,\n );\n }\n\n const blob = await response.blob();\n\n const urlParts = cloudinaryUrl.split('/');\n const lastPart = urlParts[urlParts.length - 1];\n const fileName = lastPart.split('?')[0];\n\n const file = new File([blob], fileName, { type: blob.type });\n\n this.files = [...this.files, file]; // this.files.push(file); doesn't work\n\n return file;\n }\n\n // Put inside global functions if you need it\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=\"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 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 * 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 //#region Notification\n\n getUnreadNotificationsCountForCurrentUser = (): Observable<number> => {\n return this.http.get<number>(\n `${this.config.apiUrl}/Notification/GetUnreadNotificationsCountForCurrentUser`,\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 unreadNotificationsCount?: number;\n showProfileIcon?: boolean;\n currentUser?: UserBase;\n\n constructor({\n companyName,\n userProfilePath,\n unreadNotificationsCount,\n showProfileIcon,\n currentUser,\n }: {\n companyName?: string;\n userProfilePath?: string;\n unreadNotificationsCount?: number;\n showProfileIcon?: boolean;\n currentUser?: UserBase;\n } = {}) {\n super();\n\n this.companyName = companyName;\n this.userProfilePath = userProfilePath;\n this.unreadNotificationsCount = unreadNotificationsCount;\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 BehaviorSubject,\n combineLatest,\n delay,\n lastValueFrom,\n map,\n Observable,\n of,\n Subject,\n Subscription,\n withLatestFrom,\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 protected _unreadNotificationsNumber = new BehaviorSubject<number | null>(\n null,\n );\n unreadNotificationsCount$ = this._unreadNotificationsNumber.asObservable();\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 initUnreadNotificationsCountForCurrentUser = () => {\n this.initUnreadNotificationsCountForCurrentUserObservable()\n .pipe(\n delay(1), // HACK: Adding delay so both additionalObservable and user emits single null value when logout\n withLatestFrom(this.authService.user$), // Triggers when unread notifications change\n )\n .subscribe(([additionalObservable, user]) => {\n if (user != null && additionalObservable !== undefined) {\n this.setUnreadNotificationsCountForCurrentUser().subscribe();\n }\n });\n };\n\n initUnreadNotificationsCountForCurrentUserObservable =\n (): Observable<any> => {\n return this.authService.user$;\n };\n\n setUnreadNotificationsCountForCurrentUser = (): Observable<any> => {\n return this.apiService.getUnreadNotificationsCountForCurrentUser().pipe(\n map((unreadNotificationsCount) => {\n this._unreadNotificationsNumber.next(unreadNotificationsCount);\n }),\n );\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 combineLatest([\n this.authService.user$,\n this.unreadNotificationsCount$,\n ]).pipe(\n map(([currentUser, unreadNotificationsCount]) => {\n return new InitTopBarData({\n companyName: this.config.companyName,\n userProfilePath: `/administration/users/${currentUser?.id}`,\n unreadNotificationsCount: unreadNotificationsCount,\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 { BadgeModule } from 'primeng/badge';\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 BadgeModule,\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 unreadNotificationsCount: number;\n avatarLabel: string;\n showProfileIcon = false;\n\n notificationMenuItem: ProfileAvatarModalMenuItem = {\n label: this.translocoService.translate('Notifications'),\n icon: 'pi-bell',\n showNotificationBadge: true,\n onClick: () => {\n this.router.navigateByUrl(`/notifications`);\n },\n };\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 this.notificationMenuItem,\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.unreadNotificationsCount = initTopBarData.unreadNotificationsCount;\n this.notificationMenuItem.showNotificationBadge =\n initTopBarData.unreadNotificationsCount > 0;\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 showNotificationBadge?: boolean;\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 pBadge\n [badgeStyleClass]=\"'p-badge-danger'\"\n [badgeDisabled]=\"\n unreadNotificationsCount == 0 || unreadNotificationsCount == null\n \"\n [value]=\"unreadNotificationsCount\"\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 >\n <span\n *ngIf=\"\n item.showNotificationBadge && unreadNotificationsCount != 0\n \"\n class=\"badge\"\n ></span>\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 { 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 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 if (err.status == 419) {\n // Access token expired\n authService.clearLocalStorage();\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/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","delay","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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"}
1
+ {"version":3,"file":"spiderly.mjs","sources":["../../../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":["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 '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 const mimeTypes: { [key: string]: string } = {\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.png': 'image/png',\n '.webp': 'image/webp',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.pdf': 'application/pdf',\n '.txt': 'text/plain',\n '.html': 'text/html',\n '.css': 'text/css',\n '.js': 'application/javascript',\n '.json': 'application/json',\n '.csv': 'text/csv',\n '.xml': 'application/xml',\n '.zip': 'application/zip',\n '.mp4': 'video/mp4',\n '.mp3': 'audio/mpeg',\n '.wav': 'audio/wav',\n '.avi': 'video/x-msvideo',\n '.doc': 'application/msword',\n '.docx':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.xls': 'application/vnd.ms-excel',\n '.xlsx':\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n // Add more as needed\n };\n\n const extension = fileName.substring(fileName.lastIndexOf('.')).toLowerCase();\n return mimeTypes[extension] || 'application/octet-stream'; // 'application/octet-stream' is a generic binary type\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() isCloudinaryFileData: boolean = true;\n @Input() imageWidth: number = 0;\n @Input() imageHeight: number = 0;\n @Input() maxFileSize: number = 20_000_000;\n\n acceptedFileTypesCommaSeparated: 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.isCloudinaryFileData) {\n this.pushFileFromCloudinaryUrl(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\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.control?.setValue(null);\n this.onFileRemoved.next(null);\n }\n\n // Put inside global functions if you need it\n async pushFileFromCloudinaryUrl(cloudinaryUrl: string) {\n const response = await fetch(cloudinaryUrl);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch file from Cloudinary: ${response.statusText}`,\n );\n }\n\n const blob = await response.blob();\n\n const urlParts = cloudinaryUrl.split('/');\n const lastPart = urlParts[urlParts.length - 1];\n const fileName = lastPart.split('?')[0];\n\n const file = new File([blob], fileName, { type: blob.type });\n\n this.files = [...this.files, file]; // this.files.push(file); doesn't work\n\n return file;\n }\n\n // Put inside global functions if you need it\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=\"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 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 //#region Notification\n\n getUnreadNotificationsCountForCurrentUser = (): Observable<number> => {\n return this.http.get<number>(\n `${this.config.apiUrl}/Notification/GetUnreadNotificationsCountForCurrentUser`,\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 unreadNotificationsCount?: number;\n showProfileIcon?: boolean;\n currentUser?: UserBase;\n\n constructor({\n companyName,\n userProfilePath,\n unreadNotificationsCount,\n showProfileIcon,\n currentUser,\n }: {\n companyName?: string;\n userProfilePath?: string;\n unreadNotificationsCount?: number;\n showProfileIcon?: boolean;\n currentUser?: UserBase;\n } = {}) {\n super();\n\n this.companyName = companyName;\n this.userProfilePath = userProfilePath;\n this.unreadNotificationsCount = unreadNotificationsCount;\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 BehaviorSubject,\n combineLatest,\n delay,\n lastValueFrom,\n map,\n Observable,\n of,\n Subject,\n Subscription,\n withLatestFrom,\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 protected _unreadNotificationsNumber = new BehaviorSubject<number | null>(\n null,\n );\n unreadNotificationsCount$ = this._unreadNotificationsNumber.asObservable();\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 initUnreadNotificationsCountForCurrentUser = () => {\n this.initUnreadNotificationsCountForCurrentUserObservable()\n .pipe(\n delay(1), // HACK: Adding delay so both additionalObservable and user emits single null value when logout\n withLatestFrom(this.authService.user$), // Triggers when unread notifications change\n )\n .subscribe(([additionalObservable, user]) => {\n if (user != null && additionalObservable !== undefined) {\n this.setUnreadNotificationsCountForCurrentUser().subscribe();\n }\n });\n };\n\n initUnreadNotificationsCountForCurrentUserObservable =\n (): Observable<any> => {\n return this.authService.user$;\n };\n\n setUnreadNotificationsCountForCurrentUser = (): Observable<any> => {\n return this.apiService.getUnreadNotificationsCountForCurrentUser().pipe(\n map((unreadNotificationsCount) => {\n this._unreadNotificationsNumber.next(unreadNotificationsCount);\n }),\n );\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 combineLatest([\n this.authService.user$,\n this.unreadNotificationsCount$,\n ]).pipe(\n map(([currentUser, unreadNotificationsCount]) => {\n return new InitTopBarData({\n companyName: this.config.companyName,\n userProfilePath: `/administration/users/${currentUser?.id}`,\n unreadNotificationsCount: unreadNotificationsCount,\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 { BadgeModule } from 'primeng/badge';\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 BadgeModule,\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 unreadNotificationsCount: number;\n avatarLabel: string;\n showProfileIcon = false;\n\n notificationMenuItem: ProfileAvatarModalMenuItem = {\n label: this.translocoService.translate('Notifications'),\n icon: 'pi-bell',\n showNotificationBadge: true,\n onClick: () => {\n this.router.navigateByUrl(`/notifications`);\n },\n };\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 this.notificationMenuItem,\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.unreadNotificationsCount = initTopBarData.unreadNotificationsCount;\n this.notificationMenuItem.showNotificationBadge =\n initTopBarData.unreadNotificationsCount > 0;\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 showNotificationBadge?: boolean;\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 pBadge\n [badgeStyleClass]=\"'p-badge-danger'\"\n [badgeDisabled]=\"\n unreadNotificationsCount == 0 || unreadNotificationsCount == null\n \"\n [value]=\"unreadNotificationsCount\"\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 >\n <span\n *ngIf=\"\n item.showNotificationBadge && unreadNotificationsCount != 0\n \"\n class=\"badge\"\n ></span>\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 { 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 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 if (err.status == 419) {\n // Access token expired\n authService.clearLocalStorage();\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/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","delay","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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"}