spiderly 19.10.1 → 19.11.0
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.
- package/agent/docs/angular-customization/index.md +2 -0
- package/agent/docs/entity-design/index.md +18 -2
- package/agent/docs/entity-design/references/attributes.generated.md +0 -1
- package/agent/docs/mapper-customization/index.md +49 -27
- package/fesm2022/spiderly.mjs +26 -13
- package/fesm2022/spiderly.mjs.map +1 -1
- package/lib/components/spiderly-data-table/spiderly-data-table.component.d.ts +0 -2
- package/lib/services/app-layout.service.base.d.ts +6 -0
- package/lib/services/web-storage.d.ts +4 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spiderly.mjs","sources":["../../../projects/spiderly/src/lib/errors/api-error-codes.ts","../../../projects/spiderly/src/lib/controls/base-control.ts","../../../projects/spiderly/src/lib/controls/base-dropdown-control.ts","../../../projects/spiderly/src/lib/controls/base-autocomplete-control.ts","../../../projects/spiderly/src/lib/components/required/required.component.ts","../../../projects/spiderly/src/lib/components/required/required.component.html","../../../projects/spiderly/src/lib/components/spiderly-form-control/spiderly-form-control.ts","../../../projects/spiderly/src/lib/services/validator-abstract.service.ts","../../../projects/spiderly/src/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.html","../../../projects/spiderly/src/lib/services/helper-functions.ts","../../../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/controls/spiderly-markdown/spiderly-markdown.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-markdown/spiderly-markdown.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/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/init-company-auth-dialog-details.ts","../../../projects/spiderly/src/lib/services/config.service.base.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/auth-card/auth-card.component.ts","../../../projects/spiderly/src/lib/components/auth/auth-card/auth-card.component.html","../../../projects/spiderly/src/lib/components/auth/external-provider-icons.ts","../../../projects/spiderly/src/lib/components/auth/external-login/external-login.component.ts","../../../projects/spiderly/src/lib/components/auth/external-login/external-login.component.html","../../../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-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/directives/spiderly-data-table-actions.directive.ts","../../../projects/spiderly/src/lib/enums/match-mode-enum-codes.ts","../../../projects/spiderly/src/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.ts","../../../projects/spiderly/src/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.html","../../../projects/spiderly/src/lib/components/spiderly-data-table/spiderly-data-table.component.ts","../../../projects/spiderly/src/lib/components/spiderly-data-table/spiderly-data-table.component.html","../../../projects/spiderly/src/lib/components/spiderly-data-view/spiderly-data-view.component.ts","../../../projects/spiderly/src/lib/components/spiderly-data-view/spiderly-data-view.component.html","../../../projects/spiderly/src/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.ts","../../../projects/spiderly/src/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.html","../../../projects/spiderly/src/lib/entities/codebook.ts","../../../projects/spiderly/src/lib/entities/filter-sort-meta.ts","../../../projects/spiderly/src/lib/entities/filter.ts","../../../projects/spiderly/src/lib/entities/filter-rule.ts","../../../projects/spiderly/src/lib/entities/is-authorized-for-save-event.ts","../../../projects/spiderly/src/lib/entities/last-menu-icon-index-clicked.ts","../../../projects/spiderly/src/lib/entities/lazy-load-selected-ids-result.ts","../../../projects/spiderly/src/lib/entities/menuchangeevent.ts","../../../projects/spiderly/src/lib/entities/namebook.ts","../../../projects/spiderly/src/lib/entities/paginated-result.ts","../../../projects/spiderly/src/lib/entities/primeng-option.ts","../../../projects/spiderly/src/lib/entities/simple-save-result.ts","../../../projects/spiderly/src/lib/enums/security-enums.ts","../../../projects/spiderly/src/lib/enums/verification-type-codes.ts","../../../projects/spiderly/src/lib/guards/auth.guard.ts","../../../projects/spiderly/src/lib/guards/not-auth.guard.ts","../../../projects/spiderly/src/lib/handlers/spiderly-error-handler.ts","../../../projects/spiderly/src/lib/interceptors/http-loading.interceptor.ts","../../../projects/spiderly/src/lib/interceptors/json-parser.interceptor.ts","../../../projects/spiderly/src/lib/interceptors/jwt.interceptor.ts","../../../projects/spiderly/src/lib/interceptors/unauthorized.interceptor.ts","../../../projects/spiderly/src/lib/services/app-initializer.ts","../../../projects/spiderly/src/lib/services/spiderly-transloco-loader.ts","../../../projects/spiderly/src/lib/directives/template-type.directive.ts","../../../projects/spiderly/src/public-api.ts","../../../projects/spiderly/src/spiderly.ts"],"sourcesContent":["/**\n * Machine-readable error codes returned in `ApiErrorDTO.errorCode`.\n * Mirror of Spiderly.Shared.DTO.ApiErrorCodes — keep in sync.\n */\nexport const ApiErrorCodes = {\n InvalidToken: 'invalid_token',\n ValidationFailed: 'validation_failed',\n UniqueViolation: 'unique_violation',\n ForeignKeyViolation: 'foreign_key_violation',\n ConcurrencyConflict: 'concurrency_conflict',\n EmailNotVerified: 'email_not_verified',\n ExternalProviderNotConfigured: 'external_provider_not_configured',\n ExternalEmailMissing: 'external_email_missing',\n} as const;\n\nexport type ApiErrorCode = (typeof ApiErrorCodes)[keyof typeof ApiErrorCodes];\n","import { Component, Input } from '@angular/core';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { SpiderlyFormControl } from '../components/spiderly-form-control/spiderly-form-control';\n\n@Component({\n selector: 'base-control',\n template: '',\n styles: [],\n standalone: false,\n})\nexport class BaseControl {\n @Input() control: SpiderlyFormControl<any>; // If you name it formControl: https://stackoverflow.com/a/54755671/21209982\n @Input() disabled: boolean = false;\n /** Whether the field's label is rendered. Defaults to `true`. */\n @Input() showLabel: boolean = true;\n /** Whether the required (*) indicator is shown next to the label. Defaults to `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 /** Whether the info tooltip icon is shown next to the label. Defaults to `false`. */\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 /** Whether an addon button is shown next to the dropdown. Defaults to `false`. */\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 /** Whether a clear button is shown. Defaults to `true`. */\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 { HttpResponse } from '@angular/common/http';\nimport * as FileSaver from 'file-saver';\nimport mime from 'mime';\nimport 'reflect-metadata';\nimport { map, Observable } from 'rxjs';\nimport {\n Action,\n Column,\n} from '../components/spiderly-data-table/spiderly-data-table.component';\nimport { SpiderlyTab } from '../components/spiderly-panels/panel-header/panel-header.component';\nimport { Codebook } from '../entities/codebook';\nimport { Filter } from '../entities/filter';\nimport { Namebook } from '../entities/namebook';\nimport { PrimengOption } from '../entities/primeng-option';\n\n// Helper function for PrecisionScale validation (to be added in the TypeScript output):\nexport function validatePrecisionScale(\n value: any,\n precision: number,\n scale: number,\n ignoreTrailingZeros: boolean,\n): boolean {\n if (typeof value !== 'number') return false;\n const [integerPart, decimalPart] = value.toString().split('.');\n if (integerPart.length > precision - scale) return false;\n if (decimalPart && decimalPart.length > scale) return false;\n if (\n !ignoreTrailingZeros &&\n decimalPart &&\n decimalPart.replace(/0+$/, '').length > scale\n )\n return false;\n return true;\n}\n\nexport function getMimeTypeForFileName(fileName: string): string {\n return mime.getType(fileName) ?? 'application/octet-stream';\n}\n\nexport function adjustColor(color: string, percent: number): string {\n if (!/^#([0-9A-F]{3}){1,2}$/i.test(color)) {\n console.error('Invalid hex color format');\n }\n\n let r: number, g: number, b: number;\n if (color.length === 7) {\n r = parseInt(color.slice(1, 3), 16);\n g = parseInt(color.slice(3, 5), 16);\n b = parseInt(color.slice(5, 7), 16);\n } else {\n r = parseInt(color[1] + color[1], 16);\n g = parseInt(color[2] + color[2], 16);\n b = parseInt(color[3] + color[3], 16);\n }\n\n const adjust = (value: number, percent: number): number => {\n const amount = (percent / 100) * 255;\n const newValue = Math.min(Math.max(value + amount, 0), 255);\n return Math.round(newValue);\n };\n\n r = adjust(r, percent);\n g = adjust(g, percent);\n b = adjust(b, percent);\n\n const toHex = (value: number): string => {\n const hex = value.toString(16).padStart(2, '0');\n return hex;\n };\n\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\n// new Date('yyyy-MM-dd') is parsed as UTC midnight per the JS spec, which shifts to the previous day\n// in negative-UTC locales. Construct via numeric components to anchor at local midnight instead.\nexport function parseDateOnlyLocal(s: string): Date | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(s);\n if (!m) return null;\n return new Date(+m[1], +m[2] - 1, +m[3]);\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 saveResponseAsFile(\n res: HttpResponse<Blob>,\n fallbackName: string,\n): void {\n if (res?.body == null) {\n return;\n }\n let fileName = getFileNameFromContentDisposition(res, fallbackName);\n FileSaver.saveAs(res.body, decodeURIComponent(fileName));\n}\n\nexport function exportListToExcel(\n exportListToExcelObservableMethod: (filter: Filter) => Observable<any>,\n filter: Filter,\n) {\n exportListToExcelObservableMethod(filter).subscribe((res) => {\n saveResponseAsFile(res, 'ExcelExport.xlsx');\n });\n}\n\nexport function getPrimengNamebookOptions(\n namebookList: Namebook[],\n): PrimengOption[] {\n return namebookList.map((x) => ({ label: x.displayName, code: x.id }));\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) => getPrimengNamebookOptions(res)),\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\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 { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { BaseControl } from '../base-control';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule, FormControl } 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';\nimport { Subscription } from 'rxjs';\nimport { parseDateOnlyLocal } from '../../services/helper-functions';\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, OnDestroy {\n /** Whether the time picker is shown in addition to the date. Defaults to `false`. */\n @Input() showTime: boolean = false;\n @Input() dateOnly: boolean = false;\n @Input() timeOnly: boolean = false;\n\n internalControl = new FormControl<Date | null>(null);\n\n private syncing = false;\n private subscriptions: Subscription[] = [];\n\n constructor(protected override translocoService: TranslocoService) {\n super(translocoService);\n }\n\n override ngOnInit() {\n super.ngOnInit();\n\n if (!this.usesStringProxy() || !this.control) return;\n\n this.applyFromOuter(this.control.value);\n if (this.control.disabled) this.internalControl.disable({ emitEvent: false });\n\n this.subscriptions.push(\n this.control.valueChanges.subscribe((v) => {\n if (!this.syncing) this.applyFromOuter(v);\n })\n );\n this.subscriptions.push(\n this.control.statusChanges.subscribe((status) => {\n if (status === 'DISABLED' && this.internalControl.enabled)\n this.internalControl.disable({ emitEvent: false });\n else if (status !== 'DISABLED' && this.internalControl.disabled)\n this.internalControl.enable({ emitEvent: false });\n })\n );\n this.subscriptions.push(\n this.internalControl.valueChanges.subscribe((d) => {\n if (!this.syncing) this.applyToOuter(d);\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n setDate(event: Date) {}\n\n usesStringProxy(): boolean {\n return this.dateOnly || this.timeOnly;\n }\n\n private applyFromOuter(v: unknown): void {\n this.syncing = true;\n try {\n if (v == null) {\n this.internalControl.setValue(null);\n } else if (this.dateOnly && typeof v === 'string') {\n this.internalControl.setValue(parseDateOnlyLocal(v));\n } else if (this.timeOnly && typeof v === 'string') {\n this.internalControl.setValue(this.parseTimeOnly(v));\n } else if (v instanceof Date) {\n this.internalControl.setValue(v);\n } else {\n this.internalControl.setValue(null);\n }\n } finally {\n this.syncing = false;\n }\n }\n\n private applyToOuter(d: Date | null): void {\n this.syncing = true;\n try {\n if (d == null) {\n this.control.setValue(null);\n } else if (this.dateOnly) {\n this.control.setValue(this.formatDateOnly(d));\n } else if (this.timeOnly) {\n this.control.setValue(this.formatTimeOnly(d));\n } else {\n this.control.setValue(d);\n }\n } finally {\n this.syncing = false;\n }\n }\n\n private parseTimeOnly(s: string): Date | null {\n const m = /^(\\d{2}):(\\d{2})(?::(\\d{2}))?/.exec(s);\n if (!m) return null;\n const d = new Date();\n d.setHours(+m[1], +m[2], +(m[3] ?? 0), 0);\n return d;\n }\n\n private formatDateOnly(d: Date): string {\n return `${d.getFullYear()}-${this.pad(d.getMonth() + 1)}-${this.pad(d.getDate())}`;\n }\n\n private formatTimeOnly(d: Date): string {\n return `${this.pad(d.getHours())}:${this.pad(d.getMinutes())}:${this.pad(d.getSeconds())}`;\n }\n\n private pad(n: number): string {\n return String(n).padStart(2, '0');\n }\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]=\"usesStringProxy() ? internalControl : control\"\n (onBlur)=\"control.markAsDirty()\"\n [dateFormat]=\"timeOnly ? '' : 'dd.mm.yy.'\"\n iconDisplay=\"input\"\n [showIcon]=\"true\"\n [showTime]=\"!usesStringProxy() && showTime\"\n [timeOnly]=\"timeOnly\"\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 /** Whether a hex text input is shown alongside the color swatch. Defaults to `true`. */\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 /** Whether a password-strength meter is shown below the field. Defaults to `false`. */\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 /** Whether an icon button is appended to the input. Defaults to `false`. */\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 /** Whether increment/decrement spinner buttons are shown. Defaults to `true`. */\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';\nimport { EditorImageUploadResult } from '../../entities/editor-image-upload-result';\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<EditorImageUploadResult>;\n @Input() objectId: number = 0;\n /** Mirrors the entity property's [AcceptedFileTypes] so the picker matches what the server validates. */\n @Input() acceptedFileTypes: string[];\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', this.acceptedFileTypes?.join(',') ?? '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((result: EditorImageUploadResult) => {\n const range = quill.getSelection(true);\n quill.insertEmbed(range.index, 'image', result.url);\n // Quill 2's built-in Image blot recognizes width/height as native attributes,\n // so formatText writes them directly onto the rendered <img>. Storefront uses\n // these to size the image up-front and prevent CLS. (0, 0) means the server\n // couldn't determine an intrinsic size (e.g. an SVG without width/viewBox) —\n // omit the attributes entirely rather than render an invisible 0×0 image.\n if (result.width && result.height) {\n quill.formatText(range.index, 1, { width: result.width, height: result.height });\n }\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, ElementRef, 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 { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { TextareaModule } from 'primeng/textarea';\nimport { TabsModule } from 'primeng/tabs';\nimport { MarkdownComponent } from 'ngx-markdown';\nimport { Observable } from 'rxjs';\nimport { EditorImageUploadResult } from '../../entities/editor-image-upload-result';\n\n/**\n * Markdown form control: a plain textarea (Write) with a rendered live preview (Preview),\n * arranged as tabs. The stored value is raw Markdown text.\n *\n * The preview is rendered with ngx-markdown (marked) and is intentionally APPROXIMATE — a\n * consuming storefront may render the same Markdown with a different engine/flavor.\n *\n * The <textarea> DOM is the source of truth for the text (the form control mirrors it, like\n * spiderly-editor mirrors Quill). We never splice control.value, because SpiderlyFormControl\n * defaults to updateOn:'blur' and would be stale relative to the focused textarea.\n *\n * When {@link uploadImageMethod} is provided (wired by the generator for properties with an\n * S3 public-storage attribute), pasting an image uploads it and, on success, inserts a\n * standard `` link at the caret via execCommand (which preserves the native undo\n * stack). Upload progress is shown out-of-band, not as a token in the text.\n */\n@Component({\n selector: 'spiderly-markdown',\n templateUrl: './spiderly-markdown.component.html',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n TextareaModule,\n TabsModule,\n MarkdownComponent,\n RequiredComponent,\n TranslocoDirective,\n ],\n})\nexport class SpiderlyMarkdownComponent extends BaseControl implements OnInit {\n @ViewChild('textarea') textareaRef: ElementRef<HTMLTextAreaElement>;\n\n @Input() uploadImageMethod: (formData: FormData) => Observable<EditorImageUploadResult>;\n @Input() objectId: number = 0;\n\n pendingImageUploads: number = 0;\n imageUploadFailed: boolean = false;\n\n constructor(protected override translocoService: TranslocoService) {\n super(translocoService);\n }\n\n override ngOnInit() {\n super.ngOnInit();\n }\n\n onPaste(event: ClipboardEvent) {\n // Only intercept when image upload is wired; otherwise let the default paste happen.\n if (!this.uploadImageMethod || this.control?.disabled) return;\n\n const imageFile = this.getPastedImage(event);\n if (!imageFile) return;\n\n event.preventDefault();\n\n const formData = new FormData();\n formData.append('file', imageFile, `${this.objectId}-${imageFile.name || 'pasted-image.png'}`);\n\n this.imageUploadFailed = false;\n this.pendingImageUploads++;\n\n this.uploadImageMethod(formData).subscribe({\n next: (result: EditorImageUploadResult) => {\n this.pendingImageUploads--;\n this.insertImageMarkdown(result.url);\n },\n error: () => {\n this.pendingImageUploads--;\n this.imageUploadFailed = true;\n },\n });\n }\n\n private getPastedImage(event: ClipboardEvent): File | null {\n const items = event.clipboardData?.items;\n if (!items) return null;\n\n for (let i = 0; i < items.length; i++) {\n if (items[i].type.startsWith('image/')) {\n return items[i].getAsFile();\n }\n }\n\n return null;\n }\n\n private insertImageMarkdown(url: string) {\n const snippet = ``;\n const textarea = this.textareaRef?.nativeElement;\n\n // Preferred path: the textarea is focused, so insert at the caret while preserving the\n // native undo stack. The resulting 'input' event syncs the control on blur, exactly like\n // the user typing — no manual setValue, no stale-model read.\n if (textarea && document.activeElement === textarea && document.execCommand('insertText', false, snippet)) {\n return;\n }\n\n // Fallback (textarea blurred/absent, or execCommand unsupported): read the LIVE textarea\n // value — never control.value, which is stale while focused. When blurred, the control is\n // already current, so appending can't drop uncommitted text.\n if (textarea) {\n const sep = textarea.value.length ? '\\n' : '';\n textarea.value = `${textarea.value}${sep}${snippet}`;\n this.control.setValue(textarea.value);\n } else {\n const current = this.control.value ?? '';\n this.control.setValue(current.length ? `${current}\\n${snippet}` : snippet);\n }\n this.control.markAsDirty();\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 </div>\n\n <ng-container *transloco=\"let t\">\n <p-tabs *ngIf=\"control\" value=\"write\">\n <p-tablist>\n <p-tab value=\"write\">{{ t('Write') }}</p-tab>\n <p-tab value=\"preview\">{{ t('Preview') }}</p-tab>\n </p-tablist>\n <p-tabpanels>\n <p-tabpanel value=\"write\">\n <textarea\n #textarea\n pTextarea\n [formControl]=\"control\"\n [id]=\"control.label\"\n (blur)=\"control.markAsDirty()\"\n (paste)=\"onPaste($event)\"\n [autoResize]=\"true\"\n [class]=\"control.disabled ? 'disabled' : ''\"\n [style]=\"{ width: '100%', minHeight: '320px' }\"\n ></textarea>\n <small *ngIf=\"pendingImageUploads > 0\">{{ t('UploadingImage') }}</small>\n <small *ngIf=\"imageUploadFailed\" class=\"spiderly-error-message\">{{ t('ImageUploadFailed') }}</small>\n </p-tabpanel>\n <p-tabpanel value=\"preview\">\n <div class=\"spiderly-markdown-preview\" style=\"min-height: 320px\">\n <markdown [data]=\"control.value\"></markdown>\n </div>\n </p-tabpanel>\n </p-tabpanels>\n </p-tabs>\n </ng-container>\n\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 /** Optional image icon (URL) rendered before the label — for brand logos (e.g. Google) that aren't PrimeNG font icons. */\n @Input() iconUrl: 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]=\"iconUrl ? undefined : 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-container *ngIf=\"iconUrl\">\n <img [src]=\"iconUrl\" [alt]=\"label\" style=\"height: 16px; width: 16px; margin-right: 8px\" />\n <span>{{ label }}</span>\n </ng-container>\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 { TranslocoService } from '@jsverse/transloco';\nimport { Injectable, NgZone } from '@angular/core';\nimport { MessageService } from 'primeng/api';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SpiderlyMessageService {\n // TODO FT: nece da prikaze poruku ako je neki angular error koji se dogodi tek nakon api poziva\n constructor(\n private messageService: MessageService,\n private translocoService: TranslocoService,\n private ngZone: NgZone,\n ) {}\n\n successMessage(\n detail: string,\n title: string = this.translocoService.translate('SuccessfulAction'),\n ) {\n this.messageService.add({\n severity: 'success',\n summary: title,\n detail: detail,\n life: 10000,\n });\n }\n\n warningMessage(detail: string, title?: string, sticky?: boolean) {\n this.messageService.add({\n severity: 'warn',\n summary: title ?? this.translocoService.translate('Warning'),\n detail: detail,\n life: 10000,\n sticky: sticky,\n });\n }\n\n errorMessage(\n detail: string,\n title: string = this.translocoService.translate('Error'),\n ) {\n this.messageService.add({\n severity: 'error',\n summary: title,\n detail: detail,\n life: 10000,\n });\n }\n\n infoMessage(detail: string, title?: string, sticky?: boolean) {\n this.messageService.add({\n severity: 'info',\n summary: title ?? this.translocoService.translate('Info'),\n detail: detail,\n life: 10000,\n sticky: sticky,\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { FileSelectEvent, FileUploadModule } from 'primeng/fileupload';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { SpiderlyButtonComponent } from '../../components/spiderly-buttons/spiderly-button/spiderly-button.component';\nimport { BaseEntity } from '../../entities/base-entity';\nimport {\n getImageDimensions,\n getMimeTypeForFileName,\n isExcelFileType,\n isFileImageType,\n} from '../../services/helper-functions';\nimport { SpiderlyMessageService } from '../../services/spiderly-message.service';\nimport { ValidatorAbstractService } from '../../services/validator-abstract.service';\nimport { BaseControl } from '../base-control';\n\n@Component({\n selector: 'spiderly-file',\n templateUrl: './spiderly-file.component.html',\n styles: [],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n FileUploadModule,\n RequiredComponent,\n SpiderlyButtonComponent,\n TranslocoDirective,\n ],\n})\nexport class SpiderlyFileComponent extends BaseControl implements OnInit {\n @Output() onFileSelected = new EventEmitter<SpiderlyFileSelectEvent>();\n @Output() onFileRemoved = new EventEmitter<null>();\n @Input() objectId: number;\n @Input() fileData: string;\n @Input() acceptedFileTypes: Array<\n | 'image/*'\n | 'image/png'\n | 'image/jpeg'\n | 'image/webp'\n | 'image/gif'\n | 'image/avif'\n | 'image/svg+xml'\n | '.png'\n | '.jpg'\n | '.jpeg'\n | '.webp'\n | '.gif'\n | '.avif'\n | '.svg'\n | 'application/pdf'\n | '.pdf'\n | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n | 'application/vnd.ms-excel'\n | '.xlsx'\n | '.xls'\n | 'video/*'\n | 'video/mp4'\n | '.mp4'\n | 'audio/*'\n | 'audio/mpeg'\n | '.mp3'\n | 'application/zip'\n | '.zip'\n | 'text/csv'\n | '.csv'\n > = ['image/*'];\n @Input() required: boolean; // It's okay for this control, because for the custom uploads where we are not initializing the control from the backend, there is no need for formControl.\n @Input() multiple: boolean = false;\n @Input() isUrlFileData: boolean = true;\n @Input() imageWidth: number = 0;\n @Input() imageHeight: number = 0;\n @Input() maxFileSize: number = 20_000_000;\n\n acceptedFileTypesCommaSeparated: string;\n existingFileUrl: string | null = null;\n existingFileIsImage: boolean = false;\n existingFileName: string = '';\n @Input() files: File[] = [];\n\n constructor(\n protected override translocoService: TranslocoService,\n private messageService: SpiderlyMessageService,\n private validatorService: ValidatorAbstractService,\n ) {\n super(translocoService);\n }\n\n override ngOnInit() {\n if (this.control?.value != null && this.fileData != null) {\n if (this.isUrlFileData) {\n this.setExistingFileUrl(this.fileData);\n } else {\n const file = this.getFileFromBase64(this.fileData);\n this.files.push(file);\n }\n }\n\n if (!this.objectId) {\n this.objectId = 0;\n }\n\n this.acceptedFileTypesCommaSeparated = this.acceptedFileTypes.join(',');\n\n super.ngOnInit();\n }\n\n filesSelected(event: FileSelectEvent) {\n const file = event.files[0];\n this.existingFileUrl = null;\n\n if (\n this.isFileImageType(file.type) &&\n this.hasImageDimensionConstraints()\n ) {\n this.files = [];\n this.validatorService\n .validateImageDimensions(file, this.imageWidth, this.imageHeight)\n .then((result) => {\n if (result.isValid) {\n this.files = [file];\n this.emitFileSelected(file);\n } else {\n this.messageService.errorMessage(result.errors.join('\\n'));\n }\n });\n } else {\n this.emitFileSelected(file);\n }\n }\n\n private async emitFileSelected(file: File): Promise<void> {\n const formData = new FormData();\n formData.append('file', file, `${this.objectId}-${file.name}`);\n\n let width: number | undefined;\n let height: number | undefined;\n\n if (this.isFileImageType(file.type)) {\n const dimensions = await getImageDimensions(file);\n width = dimensions.width;\n height = dimensions.height;\n }\n\n this.onFileSelected.next(\n new SpiderlyFileSelectEvent({ file, formData, width, height }),\n );\n }\n\n private hasImageDimensionConstraints(): boolean {\n return this.imageWidth > 0 || this.imageHeight > 0;\n }\n\n choose(event, chooseCallback) {\n chooseCallback();\n }\n\n fileRemoved(removeFileCallback, index: number) {\n removeFileCallback(index);\n this.clearFile();\n }\n\n removeExistingFile() {\n this.existingFileUrl = null;\n this.clearFile();\n }\n\n private clearFile() {\n this.control?.setValue(null);\n this.onFileRemoved.next(null);\n }\n\n private setExistingFileUrl(url: string) {\n this.existingFileUrl = url;\n this.existingFileName = url.split('/').pop()?.split('?')[0] ?? '';\n const mimeType = getMimeTypeForFileName(this.existingFileName);\n this.existingFileIsImage = isFileImageType(mimeType);\n }\n\n getFileFromBase64(base64String: string) {\n const [header, base64Content] = base64String.split(';base64,');\n const fileName = header.split('=')[1];\n const mimeType = getMimeTypeForFileName(fileName);\n\n const byteCharacters = atob(base64Content);\n const byteNumbers = new Uint8Array(byteCharacters.length);\n\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n\n const blob = new Blob([byteNumbers], { type: mimeType });\n const file = new File([blob], fileName, { type: mimeType });\n\n return file;\n }\n\n isFileImageType(mimeType: string): boolean {\n return isFileImageType(mimeType);\n }\n\n isExcelFileType(mimeType: string): boolean {\n return isExcelFileType(mimeType);\n }\n}\n\nexport class SpiderlyFileSelectEvent extends BaseEntity {\n file?: File;\n formData?: FormData;\n width?: number;\n height?: number;\n\n constructor({\n file,\n formData,\n width,\n height,\n }: {\n file?: File;\n formData?: FormData;\n width?: number;\n height?: number;\n } = {}) {\n super();\n\n this.file = file;\n this.formData = formData;\n this.width = width;\n this.height = height;\n }\n\n static readonly typeName = 'SpiderlyFileSelectEvent' as const;\n}\n","<ng-container *transloco=\"let t\">\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem; padding: 1px\">\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\n <label>{{ getTranslatedLabel() }}</label>\n <!-- It's okay for this control, because for the custom uploads where we are not initializing the control from the backend, there is no need for formControl. -->\n <required *ngIf=\"control?.required || required\"></required>\n </div>\n\n <p-fileUpload\n [files]=\"files\"\n [disabled]=\"disabled\"\n [name]=\"control?.label ?? label\"\n [multiple]=\"multiple\"\n [accept]=\"acceptedFileTypesCommaSeparated\"\n [maxFileSize]=\"maxFileSize\"\n (onSelect)=\"filesSelected($event)\"\n [class]=\"control?.invalid && control?.dirty ? 'control-error-border' : ''\"\n >\n <ng-template\n pTemplate=\"header\"\n let-files\n let-chooseCallback=\"chooseCallback\"\n let-clearCallback=\"clearCallback\"\n let-uploadCallback=\"uploadCallback\"\n >\n <div\n class=\"flex flex-wrap justify-between items-center flex-1 gap-2\"\n >\n <div class=\"flex gap-2\">\n <spiderly-button\n [disabled]=\"disabled\"\n (onClick)=\"choose($event, chooseCallback)\"\n icon=\"pi pi-upload\"\n [rounded]=\"true\"\n [outlined]=\"true\"\n />\n </div>\n </div>\n </ng-template>\n <ng-template\n pTemplate=\"content\"\n let-files\n let-removeFileCallback=\"removeFileCallback\"\n >\n <div *ngIf=\"existingFileUrl\">\n <div class=\"flex justify-center p-0 gap-8\">\n <div\n class=\"card m-0 px-4 py-4 flex flex-col items-center gap-4\"\n style=\"justify-content: center; overflow: hidden\"\n >\n <div *ngIf=\"existingFileIsImage\" class=\"image-container\">\n <img [src]=\"existingFileUrl\" />\n </div>\n <div *ngIf=\"!existingFileIsImage\">\n <i class=\"pi pi-file\" style=\"margin-right: 4px\"></i>\n <span>{{ existingFileName }}</span>\n </div>\n <spiderly-button\n [disabled]=\"disabled\"\n icon=\"pi pi-times\"\n (onClick)=\"removeExistingFile()\"\n [outlined]=\"true\"\n [rounded]=\"true\"\n severity=\"danger\"\n />\n </div>\n </div>\n </div>\n <div *ngIf=\"!existingFileUrl && files.length > 0\">\n <div class=\"flex justify-center p-0 gap-8\">\n <div\n *ngFor=\"let file of files; let index = index\"\n class=\"card m-0 px-4 py-4 flex flex-col items-center gap-4\"\n style=\"justify-content: center; overflow: hidden\"\n >\n <div *ngIf=\"isFileImageType(file.type)\" class=\"image-container\">\n <img role=\"presentation\" [src]=\"file.objectURL\" />\n </div>\n <div *ngIf=\"isExcelFileType(file.type)\" class=\"excel-container\">\n <div class=\"excel-details\">\n <i\n class=\"pi pi-file-excel\"\n style=\"color: green; margin-right: 4px\"\n ></i>\n <span class=\"file-name\">{{ file.name }}</span>\n </div>\n </div>\n <spiderly-button\n [disabled]=\"disabled\"\n icon=\"pi pi-times\"\n (onClick)=\"fileRemoved(removeFileCallback, index)\"\n [outlined]=\"true\"\n [rounded]=\"true\"\n severity=\"danger\"\n />\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"file\"> </ng-template>\n <ng-template pTemplate=\"empty\">\n <div *ngIf=\"!existingFileUrl\" class=\"flex items-center justify-center flex-col\">\n <i\n class=\"pi pi-cloud-upload border-2 rounded-full p-8 text-8xl text-gray-400 border-gray-400 mt-4\"\n ></i>\n <p class=\"mt-6 mb-0\">{{ t(\"DragAndDropFilesHereToUpload\") }}</p>\n </div>\n </ng-template>\n </p-fileUpload>\n </div>\n</ng-container>\n","import { Component, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { getParentUrl } from '../../../services/helper-functions';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { ButtonModule } from 'primeng/button';\nimport { SpiderlyButtonComponent } from '../spiderly-button/spiderly-button.component';\n\n@Component({\n selector: 'return-button',\n templateUrl: './return-button.component.html',\n styles: [],\n imports: [\n CommonModule,\n ButtonModule,\n SpiderlyButtonComponent,\n TranslocoDirective,\n ],\n})\nexport class SpiderlyReturnButtonComponent {\n @Input() navigateUrl: string;\n\n constructor(private router: Router) {}\n\n onReturn() {\n if (this.navigateUrl == undefined) {\n const currentUrl = this.router.url;\n const parentUrl: string = getParentUrl(currentUrl);\n this.router.navigateByUrl(parentUrl);\n } else {\n this.router.navigate([this.navigateUrl]);\n }\n }\n}\n","<ng-container *transloco=\"let t\">\n <spiderly-button\n (onClick)=\"onReturn()\"\n [label]=\"t('Return')\"\n icon=\"pi pi-undo\"\n [outlined]=\"true\"\n ></spiderly-button>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { SpiderlyMultiAutocompleteComponent } from './spiderly-multiautocomplete/spiderly-multiautocomplete.component';\nimport { SpiderlyPasswordComponent } from './spiderly-password/spiderly-password.component';\nimport { SpiderlyTextboxComponent } from './spiderly-textbox/spiderly-textbox.component';\nimport { SpiderlyCheckboxComponent } from './spiderly-checkbox/spiderly-checkbox.component';\nimport { SpiderlyMultiSelectComponent } from './spiderly-multiselect/spiderly-multiselect.component';\nimport { SpiderlyTextareaComponent } from './spiderly-textarea/spiderly-textarea.component';\nimport { SpiderlyNumberComponent } from './spiderly-number/spiderly-number.component';\nimport { SpiderlyDropdownComponent } from './spiderly-dropdown/spiderly-dropdown.component';\nimport { SpiderlyEditorComponent } from './spiderly-editor/spiderly-editor.component';\nimport { SpiderlyMarkdownComponent } from './spiderly-markdown/spiderly-markdown.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 SpiderlyMarkdownComponent,\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 SpiderlyMarkdownComponent,\n SpiderlyColorPickerComponent,\n SpiderlyFileComponent,\n ],\n declarations: [],\n providers: [],\n})\nexport class SpiderlyControlsModule {}\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 { 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 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 { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n AuthResult,\n AuthResultWithCookies,\n ExternalProviderPublic,\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 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 getExternalProviders = (): Observable<ExternalProviderPublic[]> => {\n return this.http.get<ExternalProviderPublic[]>(\n `${this.config.apiUrl}/Security/GetExternalProviders`,\n this.config.httpSkipSpinnerOptions,\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 // POST, not GET: refresh rotates the single-use token (a state mutation), and a cacheable GET let\n // browsers replay a stale logged-in response on back/forward navigation (phantom dashboard after logout).\n return this.http.post<AuthResultWithCookies>(\n `${this.config.apiUrl}/Security/RefreshTokenWithCookies?browserId=${browserId}`,\n null,\n );\n };\n\n //#endregion\n\n //#region User\n\n getCurrentUserBase = (): Observable<UserBase> => {\n return this.http.get<UserBase>(\n `${this.config.apiUrl}/Security/GetCurrentUserBase`,\n this.config.httpSkipSpinnerOptions,\n );\n };\n\n getCurrentUserPermissionCodes = (): Observable<string[]> => {\n return this.http.get<string[]>(\n `${this.config.apiUrl}/Security/GetCurrentUserPermissionCodes`,\n this.config.httpSkipSpinnerOptions,\n );\n };\n\n //#endregion\n}\n","import { Inject, Injectable, OnDestroy, PLATFORM_ID } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, Observable, of, Subscription } from 'rxjs';\nimport { catchError, delay, filter, finalize, map, tap } from 'rxjs/operators';\nimport {\n AuthResultWithCookies,\n Login,\n VerificationTokenRequest,\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/**\n * Cookie-based session auth. The access/refresh JWTs live in HttpOnly cookies set by the backend\n * (so JS never holds them — XSS can't exfiltrate them); requests are authenticated via\n * `withCredentials` (see jwtInterceptor). The readable result only carries userId/email/expiry.\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 private accessTokenExpiresAt?: Date;\n\n // External-login error code captured from the bootstrap URL (?externalAuthError=expired|failed) set by the\n // backend's OAuth callback on failure. Captured before routing can strip it, surfaced once by the login page.\n externalAuthErrorCode: string | null = null;\n\n protected _currentUserPermissionCodes = new BehaviorSubject<string[] | null>(\n undefined,\n );\n // The subject seeds with `undefined` (not yet loaded) and emits `null` on logout. Consumers only ever care\n // about a real code list, so filter both out here — subscribers get a clean `string[]`, and `firstValueFrom`\n // waits for the first loaded value instead of grabbing the `undefined` seed in a load race.\n currentUserPermissionCodes$: Observable<string[]> =\n this._currentUserPermissionCodes\n .asObservable()\n .pipe(filter((codes): codes is string[] => codes != null));\n\n protected _user = new BehaviorSubject<UserBase | null>(undefined);\n user$ = this._user.asObservable();\n\n constructor(\n protected router: Router,\n protected http: HttpClient,\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\n // Cross-tab sync. We store only marker values here (never tokens — those are HttpOnly cookies).\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 this._currentUserPermissionCodes.next(null);\n }\n if (event.key === 'login-event') {\n this.refreshToken().subscribe();\n }\n }\n };\n\n sendLoginVerificationEmail(body: Login): Observable<any> {\n body.browserId = this.getBrowserId();\n return this.apiService.sendLoginVerificationEmail(body);\n }\n\n login(body: VerificationTokenRequest): Observable<AuthResultWithCookies> {\n body.browserId = this.getBrowserId();\n return this.apiService.loginWithCookies(body).pipe(\n map((result: AuthResultWithCookies) => {\n this.handleAuthResult(result);\n return result;\n }),\n );\n }\n\n // Establishes the in-memory session from a cookie auth result (login or refresh). No tokens are stored\n // in JS — only the user identity + the access-token expiry the backend reports (to schedule refresh).\n handleAuthResult(result: AuthResultWithCookies) {\n this._user.next({\n id: result.userId,\n email: result.email,\n });\n this.accessTokenExpiresAt = result.accessTokenExpiresAt\n ? new Date(result.accessTokenExpiresAt)\n : undefined;\n localStorage.setItem('login-event', 'login' + Math.random());\n this.startTokenTimer();\n this.setCurrentUserPermissionCodes().subscribe();\n }\n\n logout() {\n const browserId = this.getBrowserId();\n this.apiService\n .logoutWithCookies(browserId)\n .pipe(\n finalize(() => {\n this._user.next(null);\n localStorage.setItem('logout-event', 'logout' + Math.random());\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 // Clears in-memory session state without calling the backend — used when a request comes back 401\n // (the backend has already cleared the auth cookies in that case).\n clearSession() {\n this.stopTokenTimer();\n this._user.next(null);\n this._currentUserPermissionCodes.next(null);\n localStorage.setItem('logout-event', 'logout' + Math.random());\n }\n\n // Called on app init and by the proactive timer. The refresh token is an HttpOnly cookie; a 401 (\"no valid\n // session\" — not logged in / expired) propagates from the interceptor and is handled by catchError below,\n // resolving the session to anonymous (null). map runs only for a real result, so _user is never partial.\n refreshToken(): Observable<AuthResultWithCookies | null> {\n const browserId = this.getBrowserId();\n return this.apiService.refreshTokenWithCookies(browserId).pipe(\n map((result: AuthResultWithCookies) => {\n if (result) {\n // A re-established session makes any pending external-login error moot — drop it so it can't\n // surface as a stale toast on a later /login visit (e.g. after a subsequent logout).\n this.externalAuthErrorCode = null;\n this._user.next({ id: result.userId, email: result.email });\n this.accessTokenExpiresAt = result.accessTokenExpiresAt\n ? new Date(result.accessTokenExpiresAt)\n : undefined;\n this.startTokenTimer();\n this.onAfterRefreshToken();\n }\n return result;\n }),\n catchError(() => {\n this._user.next(null);\n return of(null);\n }),\n );\n }\n\n onAfterRefreshToken = () => {\n this.setCurrentUserPermissionCodes().subscribe(); // after the session is re-established\n };\n\n // Reads ?externalAuthError= from the bootstrap URL (set by the backend OAuth callback on failure) and\n // strips it so a manual refresh won't re-trigger the message. Called from the app initializer, before the\n // router runs — otherwise an unauthenticated landing on \"/\" redirects to /login and drops the param.\n captureExternalAuthError() {\n if (isPlatformBrowser(this.platformId) === false) {\n return;\n }\n const params = new URLSearchParams(window.location.search);\n const code = params.get('externalAuthError');\n if (!code) {\n return;\n }\n this.externalAuthErrorCode = code;\n params.delete('externalAuthError');\n const query = params.toString();\n history.replaceState(\n history.state,\n '',\n window.location.pathname + (query ? `?${query}` : '') + window.location.hash,\n );\n }\n\n getBrowserId(): string {\n let browserId = localStorage.getItem(this.config.browserIdKey); // not a token — a stable per-browser id\n if (!browserId) {\n browserId = crypto.randomUUID();\n localStorage.setItem(this.config.browserIdKey, browserId);\n }\n return browserId;\n }\n\n private getTokenRemainingTime(): number {\n if (!this.accessTokenExpiresAt) {\n return 0;\n }\n return this.accessTokenExpiresAt.getTime() - Date.now();\n }\n\n private startTokenTimer() {\n const timeout = this.getTokenRemainingTime();\n if (timeout <= 0) {\n return;\n }\n this.stopTokenTimer();\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, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\n\n@Component({\n selector: 'spiderly-auth-card',\n templateUrl: './auth-card.component.html',\n imports: [CommonModule],\n})\nexport class AuthCardComponent implements OnInit, OnDestroy {\n private companyDetailsSubscription: Subscription | null = null;\n\n companyName: string;\n image: string;\n\n constructor(private authService: AuthServiceBase) {}\n\n ngOnInit() {\n this.companyDetailsSubscription = this.authService\n .initCompanyAuthDialogDetails()\n .subscribe((details) => {\n if (details != null) {\n this.image = details.image;\n this.companyName = details.companyName;\n }\n });\n }\n\n ngOnDestroy(): void {\n this.companyDetailsSubscription?.unsubscribe();\n }\n}\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 class=\"surface-card py-12 px-8 sm:px-12\" style=\"border-radius: 45px\">\n <div class=\"flex justify-center\" style=\"margin-bottom: 38px\">\n <ng-content select=\"[auth-logo]\">\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 </ng-content>\n </div>\n\n <ng-content></ng-content>\n\n <ng-content select=\"[auth-footer]\"></ng-content>\n </div>\n </div>\n </div>\n</div>\n","const GOOGLE_G_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" width=\"18\" height=\"18\"><path fill=\"#EA4335\" d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"/><path fill=\"#4285F4\" d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"/><path fill=\"#FBBC05\" d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.55 10.78l7.98-6.19z\"/><path fill=\"#34A853\" d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"/></svg>`;\n\n/**\n * Built-in default icons for external auth providers, keyed by provider code.\n * Values are inline data URIs — no network request, CSP entry, or asset wiring,\n * and they render offline. Consumers override per code via the `providerIcons`\n * input on ExternalLoginComponent / SpiderlyLoginComponent.\n */\nexport const DEFAULT_EXTERNAL_PROVIDER_ICONS: Record<string, string> = {\n google: `data:image/svg+xml,${encodeURIComponent(GOOGLE_G_SVG)}`,\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { ApiSecurityService } from '../../../services/api.service.security';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\nimport { ExternalProviderPublic } from '../../../entities/security-entities';\nimport { SpiderlyButtonComponent } from '../../spiderly-buttons/spiderly-button/spiderly-button.component';\nimport { DEFAULT_EXTERNAL_PROVIDER_ICONS } from '../external-provider-icons';\n\n@Component({\n selector: 'spiderly-external-login',\n templateUrl: './external-login.component.html',\n imports: [CommonModule, TranslocoDirective, SpiderlyButtonComponent],\n})\nexport class ExternalLoginComponent implements OnInit {\n /** Per-code icon overrides; unset codes fall back to DEFAULT_EXTERNAL_PROVIDER_ICONS. */\n @Input() providerIcons: Record<string, string> = {};\n\n // Config-driven: populated from Security/GetExternalProviders (backend is the single source of truth for which providers are enabled).\n externalProviders: ExternalProviderPublic[] = [];\n\n constructor(\n private config: ConfigServiceBase,\n private authService: AuthServiceBase,\n private apiService: ApiSecurityService,\n ) {}\n\n ngOnInit() {\n this.apiService.getExternalProviders().subscribe({\n next: (providers) => {\n this.externalProviders = providers ?? [];\n },\n // The global unauthorized interceptor already surfaces the HTTP error to the user; here we just\n // leave the provider buttons hidden instead of letting the error reach the global error handler.\n error: () => {\n this.externalProviders = [];\n },\n });\n }\n\n iconFor(code: string): string | undefined {\n return this.providerIcons[code] ?? DEFAULT_EXTERNAL_PROVIDER_ICONS[code];\n }\n\n loginWithExternalProvider(code: string) {\n // Server-side flow (B2): hand off to the backend challenge endpoint. The backend runs the OAuth\n // dance, sets the session cookies, and redirects back to returnUrl.\n const returnUrl = this.config.frontendUrl;\n const browserId = this.authService.getBrowserId();\n window.location.href =\n `${this.config.apiUrl}/Security/ExternalLoginChallenge` +\n `?provider=${encodeURIComponent(code)}` +\n `&returnUrl=${encodeURIComponent(returnUrl)}` +\n `&browserId=${encodeURIComponent(browserId)}`;\n }\n}\n","<ng-container *transloco=\"let t\">\n <div *ngIf=\"externalProviders.length > 0\">\n <div\n style=\"display: flex; align-items: center; gap: 7px; justify-content: center; margin-bottom: 16px;\"\n >\n <div class=\"separator\"></div>\n <div>{{ t(\"or\") }}</div>\n <div class=\"separator\"></div>\n </div>\n <div style=\"display: flex; flex-direction: column; gap: 10px\">\n <spiderly-button\n *ngFor=\"let provider of externalProviders\"\n (onClick)=\"loginWithExternalProvider(provider.code)\"\n [label]=\"provider.label || (provider.code | titlecase)\"\n [iconUrl]=\"iconFor(provider.code)\"\n [outlined]=\"true\"\n styleClass=\"w-full\"\n ></spiderly-button>\n </div>\n </div>\n</ng-container>\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 provider?: string;\n idToken?: string;\n browserId?: string;\n\n constructor({\n provider,\n idToken,\n browserId,\n }: {\n provider?: string;\n idToken?: string;\n browserId?: string;\n } = {}) {\n super();\n\n this.provider = provider;\n this.idToken = idToken;\n this.browserId = browserId;\n }\n\n static readonly schema = {\n provider: {\n type: 'string',\n },\n idToken: {\n type: 'string',\n },\n browserId: {\n type: 'string',\n },\n } as const;\n}\n\nexport class ExternalProviderPublic extends BaseEntity {\n static readonly typeName = 'ExternalProviderPublic' as const;\n\n code?: string;\n authority?: string;\n clientId?: string;\n label?: string;\n\n constructor({\n code,\n authority,\n clientId,\n label,\n }: {\n code?: string;\n authority?: string;\n clientId?: string;\n label?: string;\n } = {}) {\n super();\n\n this.code = code;\n this.authority = authority;\n this.clientId = clientId;\n this.label = label;\n }\n\n static readonly schema = {\n code: {\n type: 'string',\n },\n authority: {\n type: 'string',\n },\n clientId: {\n type: 'string',\n },\n label: {\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, 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 /** Whether the title is rendered in the large style. */\n @Input() showBigTitle: boolean;\n /** Whether the header icon is shown. Defaults to `true`. */\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 /** Whether the CRUD context-menu icon is shown. Defaults to `true`. */\n @Input() showCrudMenu: boolean = true;\n /** Whether a remove/delete icon is shown. Defaults to `false`. */\n @Input() showRemoveIcon: boolean = false;\n @Input() index: number;\n /** Whether the panel header is rendered. Defaults to `true`. */\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 <!--\n PrimeNG's InputOtp calls event.preventDefault() on the Enter keydown\n (Enter is a non-digit while integerOnly is on, and once all tokens are\n filled it blocks every key but Delete), which kills the browser's\n implicit submit via the type=\"submit\" button. Wire Enter straight to\n codeSubmit() so \"paste the code + Enter\" still submits. preventDefault\n doesn't stop propagation, so this bubbled keydown listener still fires.\n -->\n <p-inputOtp\n [formControl]=\"verificationTokenRequestFormGroup.getControl('verificationCode')\"\n [length]=\"6\"\n [integerOnly]=\"true\"\n [autofocus]=\"true\"\n (keydown.enter)=\"codeSubmit()\"\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 Input,\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 { SpiderlyMessageService } from '../../../services/spiderly-message.service';\nimport { BaseFormComponent } from '../../base-form/base-form.component';\nimport { SpiderlyFormGroup } from '../../spiderly-form-control/spiderly-form-control';\nimport { AuthCardComponent } from '../auth-card/auth-card.component';\nimport { ExternalLoginComponent } from '../external-login/external-login.component';\nimport { LoginVerificationComponent } from '../partials/login-verification.component';\n\n@Component({\n selector: 'spiderly-login',\n templateUrl: './login.component.html',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n AuthCardComponent,\n ExternalLoginComponent,\n SpiderlyControlsModule,\n LoginVerificationComponent,\n TranslocoDirective,\n ],\n})\nexport class SpiderlyLoginComponent extends BaseFormComponent implements OnInit {\n loginFormGroup = new SpiderlyFormGroup<Login>({});\n showEmailSentDialog: boolean = false;\n\n /** Per-code provider icon overrides, forwarded to <spiderly-external-login>. */\n @Input() providerIcons: Record<string, string> = {};\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 ) {\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 this.showExternalAuthErrorIfPresent();\n }\n\n // Surface a friendly message when the server-side external login bounced back with an error (captured from\n // the URL at bootstrap by AuthServiceBase). \"expired\" = the user lingered on the provider's account picker.\n private showExternalAuthErrorIfPresent() {\n const code = this.authService.externalAuthErrorCode;\n if (!code) {\n return;\n }\n this.authService.externalAuthErrorCode = null; // show once\n const messageKey =\n code === 'expired' ? 'ExternalLoginExpiredDetails' : 'ExternalLoginFailedDetails';\n this.messageService.warningMessage(this.translocoService.translate(messageKey));\n }\n\n initLoginFormGroup(model: Login) {\n this.baseFormService.initFormGroup(this.loginFormGroup, Login, model, [\n 'email',\n ]);\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 <spiderly-auth-card>\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\n <spiderly-external-login\n [providerIcons]=\"providerIcons\"\n ></spiderly-external-login>\n </spiderly-auth-card>\n } @else {\n <login-verification\n [email]=\"loginFormGroup.controls.email.getRawValue()\"\n ></login-verification>\n }\n\n <!--\n General projection slot for consumer-supplied login extras (a bot-challenge widget, a notice,\n an extra field, …). Rendered in BOTH the email-entry and code-verification states — outside the\n showEmailSentDialog toggle — so projected content survives the email → resend flow (e.g. a\n single-use challenge widget that must stay mounted to issue a fresh token on resend).\n Project with the `loginExtra` attribute: <spiderly-login><my-widget loginExtra/></spiderly-login>.\n -->\n <ng-content select=\"[loginExtra]\"></ng-content>\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 /** Whether a remove/delete icon is shown. */\n @Input() showRemoveIcon: boolean;\n /** Whether the CRUD context-menu icon is shown. Defaults to `true`. */\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 /** Whether the small icon variant is shown. Defaults to `true`. */\n @Input() showSmallIcon = true;\n @Input() icon = 'pi pi-info-circle';\n @Input() textColor = '';\n\n constructor(protected formBuilder: FormBuilder) {}\n\n ngOnInit() {}\n}\n","<div class=\"card responsive-card-padding info-card\">\n <div class=\"info-card__content\">\n <div>\n <div class=\"info-card__header\">\n <i *ngIf=\"showSmallIcon\" class=\"{{ icon }} info-card__icon\"></i>\n {{ header }}\n </div>\n <div class=\"info-card__body\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"info-card__background-icon\">\n <i class=\"{{ icon }}\"></i>\n </div>\n</div>\n","import { BaseEntity } from './base-entity';\nimport { UserBase } from './security-entities';\n\nexport class InitTopBarData extends BaseEntity {\n companyName?: string;\n userProfilePath?: string;\n showProfileIcon?: boolean;\n currentUser?: UserBase;\n\n constructor({\n companyName,\n userProfilePath,\n showProfileIcon,\n currentUser,\n }: {\n companyName?: string;\n userProfilePath?: string;\n showProfileIcon?: boolean;\n currentUser?: UserBase;\n } = {}) {\n super();\n\n this.companyName = companyName;\n this.userProfilePath = userProfilePath;\n this.showProfileIcon = showProfileIcon;\n this.currentUser = currentUser;\n }\n\n static readonly typeName = 'InitTopBarData' as const;\n}\n","import { AuthServiceBase } from './auth.service.base';\nimport { ApiSecurityService } from './api.service.security';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport {\n map,\n Observable,\n of,\n Subject,\n Subscription,\n} from 'rxjs';\nimport { InitTopBarData } from '../entities/init-top-bar-data';\nimport { ConfigServiceBase } from './config.service.base';\nimport { AutoCompleteCompleteEvent } from 'primeng/autocomplete';\nimport { Namebook } from '../entities/namebook';\n\nexport interface AppConfig {\n inputStyle: string;\n colorScheme: string;\n ripple: boolean;\n menuMode: string;\n}\n\ninterface LayoutState {\n staticMenuDesktopInactive: boolean;\n overlayMenuActive: boolean;\n profileSidebarVisible: boolean;\n profileDropdownSidebarVisible: boolean;\n staticMenuMobileActive: boolean;\n menuHoverActive: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LayoutServiceBase implements OnDestroy {\n userSubscription: Subscription;\n\n layoutConfig: AppConfig = {\n ripple: false,\n inputStyle: 'outlined',\n menuMode: 'static',\n colorScheme: 'light',\n };\n\n state: LayoutState = {\n staticMenuDesktopInactive: false,\n overlayMenuActive: false,\n profileSidebarVisible: false,\n profileDropdownSidebarVisible: false,\n staticMenuMobileActive: false,\n menuHoverActive: false,\n };\n\n private overlayOpen = new Subject<any>();\n\n overlayOpen$ = this.overlayOpen.asObservable();\n\n constructor(\n protected apiService: ApiSecurityService,\n protected config: ConfigServiceBase,\n protected authService: AuthServiceBase,\n ) {}\n\n onMenuToggle() {\n if (this.isOverlay()) {\n this.state.overlayMenuActive = !this.state.overlayMenuActive;\n if (this.state.overlayMenuActive) {\n this.overlayOpen.next(null);\n }\n }\n\n if (this.isDesktop()) {\n this.state.staticMenuDesktopInactive =\n !this.state.staticMenuDesktopInactive;\n } else {\n this.state.staticMenuMobileActive = !this.state.staticMenuMobileActive;\n\n if (this.state.staticMenuMobileActive) {\n this.overlayOpen.next(null);\n }\n }\n }\n\n showProfileSidebar() {\n this.state.profileSidebarVisible = !this.state.profileSidebarVisible;\n if (this.state.profileSidebarVisible) {\n this.overlayOpen.next(null);\n }\n }\n\n showProfileDropdownSidebar() {\n this.state.profileDropdownSidebarVisible =\n !this.state.profileDropdownSidebarVisible;\n if (this.state.profileDropdownSidebarVisible) {\n this.overlayOpen.next(null);\n }\n }\n\n 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 //#region Top Bar\n\n initTopBarData = (): Observable<InitTopBarData> => {\n return this.authService.user$.pipe(\n map((currentUser) => {\n return new InitTopBarData({\n companyName: this.config.companyName,\n userProfilePath: `/administration/users/${currentUser?.id}`,\n showProfileIcon: true,\n currentUser: currentUser,\n });\n }),\n );\n };\n\n //#endregion\n\n //#region Side Bar\n\n searchPartners = (\n event: AutoCompleteCompleteEvent,\n ): Observable<Namebook[]> => {\n return of();\n };\n\n partnersAutocompleteButtonClick = (selectedPartner: Namebook) => {};\n\n //#endregion\n\n ngOnDestroy(): void {\n if (this.userSubscription) {\n this.userSubscription.unsubscribe();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { MenuChangeEvent } from '../../../entities/menuchangeevent';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SidebarMenuService {\n private menuSource = new Subject<MenuChangeEvent>();\n private resetSource = new Subject();\n\n menuSource$ = this.menuSource.asObservable();\n resetSource$ = this.resetSource.asObservable();\n\n onMenuStateChange(event: MenuChangeEvent) {\n this.menuSource.next(event);\n }\n\n reset() {\n this.resetSource.next(true);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { SidebarMenuService } from './sidebar-menu.service';\nimport { SpiderlyMenuItem } from './sidebar-menu.component';\nimport { AutoCompleteCompleteEvent } from 'primeng/autocomplete';\nimport { SpiderlyFormControl } from '../../spiderly-form-control/spiderly-form-control';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { ApiSecurityService } from '../../../services/api.service.security';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\nimport { CommonModule } from '@angular/common';\nimport { SpiderlyControlsModule } from '../../../controls/spiderly-controls.module';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Namebook } from '../../../entities/namebook';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[menuitem]',\n templateUrl: './menuitem.component.html',\n animations: [\n trigger('children', [\n state(\n 'collapsed',\n style({\n height: '0',\n }),\n ),\n state(\n 'expanded',\n style({\n height: '*',\n }),\n ),\n transition(\n 'collapsed <=> expanded',\n animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'),\n ),\n ]),\n ],\n imports: [\n CommonModule,\n RouterModule,\n TranslocoDirective,\n SpiderlyControlsModule,\n ],\n})\nexport class MenuitemComponent implements OnInit, OnDestroy {\n @Input() item: SpiderlyMenuItem;\n\n @Input() index!: number;\n\n @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\n\n @Input() parentKey!: string;\n\n active = false;\n\n private menuSourceSubscription: Subscription;\n\n private menuResetSubscription: Subscription;\n\n private permissionSubscription: Subscription | null = null;\n\n key: string = '';\n\n selectedPartner = new SpiderlyFormControl<Namebook>(null, {\n updateOn: 'change',\n });\n\n partnerOptions: Namebook[];\n\n constructor(\n public layoutService: LayoutServiceBase,\n private cd: ChangeDetectorRef,\n public router: Router,\n private menuService: SidebarMenuService,\n private authService: AuthServiceBase,\n private apiService: ApiSecurityService,\n private config: ConfigServiceBase,\n ) {\n this.menuSourceSubscription = this.menuService.menuSource$.subscribe(\n (value) => {\n Promise.resolve(null).then(() => {\n if (value.routeEvent) {\n this.active =\n value.key === this.key || value.key.startsWith(this.key + '-')\n ? true\n : false;\n } else {\n if (\n value.key !== this.key &&\n !value.key.startsWith(this.key + '-')\n ) {\n this.active = false;\n }\n }\n });\n },\n );\n\n this.menuResetSubscription = this.menuService.resetSource$.subscribe(() => {\n this.active = false;\n });\n\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((params) => {\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n });\n }\n\n ngOnInit() {\n this.item.visible = this.item.visible ?? true;\n\n this.key = this.parentKey\n ? this.parentKey + '-' + this.index\n : String(this.index);\n\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n\n this.permissionSubscription =\n this.authService.currentUserPermissionCodes$.subscribe(\n (currentUserPermissionCodes: string[]) => {\n if (this.item && typeof this.item.hasPermission === 'function') {\n this.item.visible = this.item.hasPermission(\n currentUserPermissionCodes,\n );\n }\n },\n );\n }\n\n updateActiveStateFromRoute() {\n let activeRoute = this.router.isActive(this.item.routerLink[0], {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored',\n });\n\n if (activeRoute) {\n this.menuService.onMenuStateChange({ key: this.key, routeEvent: true });\n }\n }\n\n itemClick(event: Event) {\n // avoid processing disabled items\n if (this.item.disabled || event === null) {\n event.preventDefault();\n return;\n }\n\n // execute command\n if (this.item.command) {\n this.item.command({ originalEvent: event, item: this.item });\n }\n\n // toggle active state\n if (this.item.items) {\n this.active = !this.active;\n }\n\n this.menuService.onMenuStateChange({ key: this.key });\n }\n\n get submenuAnimation() {\n return this.root ? 'expanded' : this.active ? 'expanded' : 'collapsed';\n }\n\n @HostBinding('class.active-menuitem')\n get activeClass() {\n return this.active && !this.root;\n }\n\n //#region HACK: Partner\n\n searchPartners(event: AutoCompleteCompleteEvent) {\n this.layoutService.searchPartners(event).subscribe((po) => {\n this.partnerOptions = po;\n });\n }\n\n partnersAutocompleteButtonClick = async () => {\n this.layoutService.partnersAutocompleteButtonClick(\n this.selectedPartner.value,\n );\n };\n\n //#endregion\n\n ngOnDestroy() {\n if (this.menuSourceSubscription) {\n this.menuSourceSubscription.unsubscribe();\n }\n\n if (this.menuResetSubscription) {\n this.menuResetSubscription.unsubscribe();\n }\n\n if (this.permissionSubscription) {\n this.permissionSubscription.unsubscribe();\n }\n }\n}\n","<ng-container *transloco=\"let t\">\n <div *ngIf=\"root && item.visible === true\" class=\"layout-menuitem-root-text\">\n {{ item.label }}\n </div>\n <a\n *ngIf=\"(!item.routerLink || item.items) && item.visible === true\"\n [attr.href]=\"item.url\"\n (click)=\"itemClick($event)\"\n [ngClass]=\"item.styleClass\"\n [attr.target]=\"item.target\"\n tabindex=\"0\"\n pRipple\n >\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n <i\n class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"\n *ngIf=\"item.items\"\n ></i>\n </a>\n <a\n *ngIf=\"item.routerLink && !item.items && item.visible === true\"\n (click)=\"itemClick($event)\"\n [ngClass]=\"item.styleClass\"\n [routerLink]=\"item.routerLink\"\n routerLinkActive=\"active-route\"\n [routerLinkActiveOptions]=\"\n item.routerLinkActiveOptions || {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored',\n }\n \"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [queryParams]=\"item.queryParams\"\n [attr.target]=\"item.target\"\n tabindex=\"0\"\n pRipple\n >\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n <i\n class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"\n *ngIf=\"item.items\"\n ></i>\n </a>\n\n <ul\n *ngIf=\"item.items && item.visible === true\"\n [@children]=\"submenuAnimation\"\n >\n <ng-template ngFor let-child let-i=\"index\" [ngForOf]=\"item.items\">\n <li\n menuitem\n [item]=\"child\"\n [index]=\"i\"\n [parentKey]=\"key\"\n [class]=\"child.badgeStyleClass\"\n ></li>\n </ng-template>\n </ul>\n\n <!-- Delete this in the future iterations, make link to partner in /partners page -->\n <spiderly-autocomplete\n *ngIf=\"item.showPartnerDialog\"\n [control]=\"selectedPartner\"\n [options]=\"partnerOptions\"\n (onTextInput)=\"searchPartners($event)\"\n label=\"\"\n [placeholder]=\"t('SelectThePartner')\"\n [showAddon]=\"true\"\n (onButtonClick)=\"partnersAutocompleteButtonClick()\"\n addonIcon=\"pi pi-check\"\n [emptyMessage]=\"t('LeftCornerPartnersEmptyMessage')\"\n class=\"mobile-stay-open\"\n ></spiderly-autocomplete>\n</ng-container>\n","import { TranslocoService } from '@jsverse/transloco';\nimport { Input, OnInit } from '@angular/core';\nimport { Component } from '@angular/core';\nimport { MenuItem } from 'primeng/api';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\nimport { MenuitemComponent } from './menuitem.component';\nimport { CommonModule } from '@angular/common';\n\nexport interface SpiderlyMenuItem extends MenuItem {\n hasPermission?: (permissionCodes: string[]) => boolean;\n showPartnerDialog?: boolean;\n}\n\n@Component({\n selector: 'sidebar-menu', // FT: Don't change selector to 'menu', because other style will apply to it\n templateUrl: './sidebar-menu.component.html',\n imports: [CommonModule, MenuitemComponent],\n})\nexport class SidebarMenuComponent implements OnInit {\n @Input() menu: SpiderlyMenuItem[];\n\n constructor(\n public layoutService: LayoutServiceBase,\n private authService: AuthServiceBase,\n private translocoService: TranslocoService,\n private config: ConfigServiceBase,\n ) {}\n\n ngOnInit() {}\n\n ngOnDestroy(): void {}\n}\n","<ul class=\"layout-menu\">\n <ng-container *ngFor=\"let item of menu; let i = index\">\n <li\n menuitem\n *ngIf=\"!item.separator\"\n [item]=\"item\"\n [index]=\"i\"\n [root]=\"true\"\n ></li>\n <li\n *ngIf=\"item.separator\"\n class=\"gray-separator\"\n style=\"margin-top: 11px\"\n ></li>\n </ng-container>\n</ul>\n","import { Component, ElementRef, Input } from '@angular/core';\nimport {\n SidebarMenuComponent,\n SpiderlyMenuItem,\n} from './sidebar-menu.component';\n\n@Component({\n selector: 'sidebar',\n templateUrl: './sidebar.component.html',\n imports: [SidebarMenuComponent],\n})\nexport class AppSidebarComponent {\n @Input() menu: SpiderlyMenuItem[];\n\n constructor(public el: ElementRef) {}\n\n ngOnInit() {}\n}\n","<sidebar-menu [menu]=\"menu\"></sidebar-menu>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { AvatarModule } from 'primeng/avatar';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { UserBase } from '../../../entities/security-entities';\nimport { filter, Subscription } from 'rxjs';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { SpiderlyButtonComponent } from '../../spiderly-buttons/spiderly-button/spiderly-button.component';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\n\n@Component({\n selector: 'spiderly-profile-avatar',\n templateUrl: './profile-avatar.component.html',\n styleUrl: './profile-avatar.component.scss',\n imports: [\n CommonModule,\n RouterModule,\n AvatarModule,\n SpiderlyButtonComponent,\n TranslocoDirective,\n ],\n})\nexport class ProfileAvatarComponent {\n @Input() isSideMenuLayout = true;\n @Input() routeOnLargeProfileAvatarClick = true;\n /** Whether the login button is shown when no user is signed in. Defaults to `true`. */\n @Input() showLoginButton = true;\n @Input() routeToLoginPage = true;\n @Input() loginButtonOutlined = false;\n @Input() loginButtonSeverity:\n | 'success'\n | 'info'\n | 'warn'\n | 'danger'\n | 'help'\n | 'primary'\n | 'secondary'\n | 'contrast'\n | null\n | undefined = 'primary';\n @Input() loginButtonSize: 'small' | 'large' | undefined;\n @Output() onLoginButtonClick = new EventEmitter();\n @Input() menuItems: ProfileAvatarModalMenuItem[] = [];\n\n private initTopBarSubscription: Subscription | null = null;\n\n currentUser: UserBase;\n userProfilePath: string;\n avatarLabel: string;\n showProfileIcon = false;\n\n @ViewChild('topbarmenu') menu!: ElementRef;\n\n @ViewChild('topbarprofiledropdownmenubutton')\n topbarProfileDropdownMenuButton!: ElementRef;\n\n constructor(\n public layoutService: LayoutServiceBase,\n private authService: AuthServiceBase,\n protected router: Router,\n private translocoService: TranslocoService,\n public config: ConfigServiceBase,\n ) {}\n\n async ngOnInit() {\n if (this.menuItems.length === 0) {\n this.menuItems = [\n {\n label: this.translocoService.translate('YourProfile'),\n icon: 'pi-user',\n showSeparator: true,\n onClick: () => {\n this.routeToUserPage();\n },\n },\n {\n label: this.translocoService.translate('Logout'),\n icon: 'pi-sign-out',\n showSeparator: true,\n onClick: () => {\n this.authService.logout();\n },\n },\n ];\n }\n\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n this.layoutService.state.profileDropdownSidebarVisible = false;\n });\n\n this.onAfterNgOnInit();\n }\n\n onAfterNgOnInit = () => {\n this.initTopBarSubscription = this.layoutService\n .initTopBarData()\n .subscribe((initTopBarData) => {\n this.userProfilePath = initTopBarData.userProfilePath;\n this.showProfileIcon = initTopBarData.showProfileIcon;\n this.currentUser = initTopBarData.currentUser;\n this.avatarLabel = initTopBarData.currentUser?.email\n .charAt(0)\n .toLocaleUpperCase();\n });\n };\n\n onDocumentClick(event: any) {\n if (!this.menu.nativeElement.contains(event.target)) {\n if (this.layoutService.state.profileDropdownSidebarVisible == true) {\n this.layoutService.state.profileDropdownSidebarVisible = false;\n }\n }\n }\n\n routeToUserPage() {\n if (this.routeOnLargeProfileAvatarClick) {\n this.router.navigateByUrl(this.userProfilePath);\n }\n }\n\n loginButtonClick() {\n if (this.routeToLoginPage) {\n this.router.navigateByUrl(this.config.loginSlug);\n }\n\n this.onLoginButtonClick.next(null);\n }\n\n ngOnDestroy(): void {\n if (this.initTopBarSubscription) {\n this.initTopBarSubscription.unsubscribe();\n }\n }\n}\n\nexport interface ProfileAvatarModalMenuItem {\n label?: string;\n icon?: string;\n showSeparator?: boolean;\n onClick?: () => void;\n}\n","<ng-container *transloco=\"let t\">\n <div *ngIf=\"this.currentUser != null\" #topbarmenu>\n <div\n #topbarprofiledropdownmenubutton\n (click)=\"layoutService.showProfileDropdownSidebar()\"\n >\n <p-avatar\n *ngIf=\"showProfileIcon\"\n [label]=\"avatarLabel\"\n [style]=\"{\n 'background-color': 'var(--p-primary-color)',\n color: '#fff',\n cursor: 'pointer',\n width: '34px',\n height: '34px',\n 'font-size': '21px',\n }\"\n />\n </div>\n <div #topbarprofiledropdownmenu (document:click)=\"onDocumentClick($event)\">\n <div\n *ngIf=\"layoutService.state.profileDropdownSidebarVisible\"\n style=\"\n width: 280px;\n position: absolute;\n padding: 15px;\n background: var(--p-content-background);\n \"\n class=\"card\"\n [ngClass]=\"{\n 'side-menu-profile-dialog': isSideMenuLayout,\n 'top-menu-profile-dialog': !isSideMenuLayout,\n }\"\n >\n <div\n style=\"\n display: flex;\n flex-direction: column;\n justify-content: center;\n text-align: center;\n gap: 10px;\n \"\n >\n <p-avatar\n [label]=\"avatarLabel\"\n size=\"xlarge\"\n [style]=\"{\n 'background-color': 'var(--p-primary-color)',\n color: '#fff',\n margin: 'auto',\n cursor: routeOnLargeProfileAvatarClick ? 'pointer' : '',\n }\"\n (click)=\"routeToUserPage()\"\n />\n <div style=\"font-size: 15px\">{{ currentUser?.email }}</div>\n </div>\n <div style=\"margin-top: 15px\">\n <div\n *ngFor=\"let item of menuItems\"\n [style]=\"item.showSeparator ? 'margin-top: 5px;' : ''\"\n >\n <div *ngIf=\"item.showSeparator\" class=\"gray-separator\"></div>\n <div\n (click)=\"item.onClick()\"\n class=\"hover-card\"\n style=\"\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 5px;\n \"\n >\n <i\n class=\"pi pi-fw {{ item.icon }}\"\n style=\"font-size: 16px; position: relative\"\n ></i>\n <div style=\"font-size: 15px\">{{ item.label }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"this.currentUser == null && this.showLoginButton\">\n <spiderly-button\n [label]=\"t('Login')\"\n (onClick)=\"loginButtonClick()\"\n icon=\"pi pi-sign-in\"\n [outlined]=\"loginButtonOutlined\"\n [severity]=\"loginButtonSeverity\"\n [size]=\"loginButtonSize\"\n ></spiderly-button>\n </div>\n</ng-container>\n","import { ConfigServiceBase } from '../../../services/config.service.base';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { Component, ElementRef, ViewChild } from '@angular/core';\nimport { filter } from 'rxjs';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { CommonModule } from '@angular/common';\nimport { AvatarModule } from 'primeng/avatar';\nimport { BadgeModule } from 'primeng/badge';\nimport { ProfileAvatarComponent } from '../profile-avatar/profile-avatar.component';\n\n@Component({\n selector: 'spiderly-sidemenu-topbar',\n templateUrl: './sidemenu-topbar.component.html',\n imports: [\n CommonModule,\n RouterModule,\n AvatarModule,\n BadgeModule,\n ProfileAvatarComponent,\n ],\n})\nexport class SideMenuTopBarComponent {\n companyName = this.config.companyName;\n @ViewChild('menubutton') menuButton!: ElementRef;\n\n constructor(\n public layoutService: LayoutServiceBase,\n protected router: Router,\n private config: ConfigServiceBase,\n private translocoService: TranslocoService,\n ) {}\n\n async ngOnInit() {\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n this.layoutService.state.profileDropdownSidebarVisible = false;\n });\n }\n}\n","<div class=\"layout-topbar\">\n <a class=\"layout-topbar-logo\" routerLink=\"/\">\n <span>{{ companyName?.toLocaleUpperCase() }}</span>\n </a>\n\n <button\n #menubutton\n class=\"p-link layout-menu-button layout-topbar-button\"\n (click)=\"layoutService.onMenuToggle()\"\n >\n <i class=\"pi pi-bars\"></i>\n </button>\n\n <div class=\"profile-button\">\n <spiderly-profile-avatar></spiderly-profile-avatar>\n </div>\n</div>\n","import { ConfigServiceBase } from '../../../services/config.service.base';\nimport { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ProfileAvatarComponent } from '../profile-avatar/profile-avatar.component';\nimport { MenubarModule } from 'primeng/menubar';\nimport { SpiderlyMenuItem } from '../sidebar/sidebar-menu.component';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'spiderly-topbar',\n templateUrl: './topbar.component.html',\n styleUrl: './topbar.component.scss',\n imports: [\n CommonModule,\n RouterModule,\n MenubarModule,\n AvatarModule,\n ProfileAvatarComponent,\n ],\n})\nexport class TopBarComponent {\n @Input() menu: SpiderlyMenuItem[] = [];\n companyName = this.config.companyName;\n logoPath = this.config.logoPath;\n /**\n * Determines whether to show background color on hover\n * for root menu items. Defaults to `false`.\n */\n @Input() showHoverBgOnRootItems: boolean = false;\n\n private permissionSubscription: Subscription | null = null;\n\n constructor(\n private authService: AuthServiceBase,\n private config: ConfigServiceBase,\n ) {}\n\n ngOnInit() {\n this.permissionSubscription =\n this.authService.currentUserPermissionCodes$.subscribe(\n (currentUserPermissionCodes: string[]) => {\n this.hideMenuItemsBasedOnPermissions(\n this.menu,\n currentUserPermissionCodes,\n );\n },\n );\n }\n\n hideMenuItemsBasedOnPermissions = (\n menu: SpiderlyMenuItem[],\n currentUserPermissionCodes: string[],\n ) => {\n menu.forEach((menuItem) => {\n if (menuItem.items) {\n this.hideMenuItemsBasedOnPermissions(\n menuItem.items,\n currentUserPermissionCodes,\n );\n }\n if (typeof menuItem.hasPermission === 'function') {\n menuItem.visible =\n menuItem.hasPermission(currentUserPermissionCodes) ?? false;\n }\n });\n };\n\n ngOnDestroy() {\n if (this.permissionSubscription) {\n this.permissionSubscription.unsubscribe();\n }\n }\n}\n","<div class=\"topbar-wrapper\">\n <nav\n class=\"topbar {{\n showHoverBgOnRootItems ? '' : 'show-hover-bg-on-root-items'\n }}\"\n >\n <p-menubar [model]=\"menu\" [style]=\"{ border: '0' }\">\n <ng-template #start>\n <img\n style=\"margin-left: 11px; cursor: pointer\"\n width=\"45\"\n height=\"45\"\n routerLink=\"/\"\n [src]=\"logoPath\"\n alt=\"Logo\"\n />\n </ng-template>\n <ng-template #end>\n <div\n style=\"\n margin-right: 11px;\n display: flex;\n gap: 10px;\n align-items: center;\n position: relative;\n \"\n >\n <div>\n <ng-content select=\"[ACTIONS]\"></ng-content>\n </div>\n <spiderly-profile-avatar\n [isSideMenuLayout]=\"false\"\n ></spiderly-profile-avatar>\n </div>\n </ng-template>\n </p-menubar>\n </nav>\n</div>\n","import {\n Component,\n ElementRef,\n Input,\n OnDestroy,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { AppSidebarComponent } from './sidebar/sidebar.component';\nimport { SideMenuTopBarComponent } from './sidemenu-topbar/sidemenu-topbar.component';\nimport { LayoutServiceBase } from '../../services/app-layout.service.base';\nimport { SpiderlyMenuItem } from './sidebar/sidebar-menu.component';\nimport { CommonModule } from '@angular/common';\nimport { FooterComponent } from '../footer/footer.component';\nimport { TopBarComponent } from './topbar/topbar.component';\n\n@Component({\n selector: 'spiderly-layout',\n templateUrl: './layout.component.html',\n imports: [\n CommonModule,\n RouterModule,\n AppSidebarComponent,\n FooterComponent,\n SideMenuTopBarComponent,\n TopBarComponent,\n ],\n})\nexport class SpiderlyLayoutComponent implements OnDestroy {\n @Input() menu: SpiderlyMenuItem[] = [];\n sideMenu: SpiderlyMenuItem[] = [];\n topMenu: SpiderlyMenuItem[] = [];\n @Input() isSideMenuLayout: boolean = true;\n /**\n * Determines whether to show background color on hover\n * for root top menu items. Defaults to `false`.\n */\n @Input() showHoverBgOnRootTopMenuItems: boolean = false;\n\n /**\n * default max-width for the main content area.\n */\n\n @Input() maxWidth: string = '1100px';\n\n overlayMenuOpenSubscription: Subscription;\n\n menuOutsideClickListener: any;\n\n profileMenuOutsideClickListener: any;\n\n @ViewChild(AppSidebarComponent) appSidebar!: AppSidebarComponent;\n\n @ViewChild(SideMenuTopBarComponent) sidemenuTopbar!: SideMenuTopBarComponent;\n\n @ViewChild('topbarmenu') topbarmenu!: ElementRef;\n\n constructor(\n protected layoutService: LayoutServiceBase,\n protected renderer: Renderer2,\n protected router: Router,\n ) {\n this.overlayMenuOpenSubscription =\n this.layoutService.overlayOpen$.subscribe(() => {\n if (!this.menuOutsideClickListener) {\n this.menuOutsideClickListener = this.renderer.listen(\n 'document',\n 'click',\n (event) => {\n const isOutsideClicked = !(\n this.appSidebar?.el.nativeElement.isSameNode(event.target) ||\n this.appSidebar?.el.nativeElement.contains(event.target) ||\n this.sidemenuTopbar?.menuButton?.nativeElement.isSameNode(\n event.target,\n ) ||\n this.sidemenuTopbar?.menuButton?.nativeElement.contains(\n event.target,\n ) ||\n event.target.closest('.p-autocomplete-items') ||\n event.target.closest('.p-autocomplete-clear-icon')\n );\n\n if (isOutsideClicked) {\n this.hideMenu();\n }\n },\n );\n }\n\n if (!this.profileMenuOutsideClickListener) {\n this.profileMenuOutsideClickListener = this.renderer.listen(\n 'document',\n 'click',\n (event) => {\n const isOutsideClicked = !(\n this.topbarmenu?.nativeElement.isSameNode(event.target) ||\n this.topbarmenu?.nativeElement.contains(event.target)\n );\n\n if (isOutsideClicked) {\n this.hideProfileMenu();\n }\n },\n );\n }\n\n if (this.layoutService.state.staticMenuMobileActive) {\n this.blockBodyScroll();\n }\n });\n\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n this.hideMenu();\n this.hideProfileMenu();\n });\n }\n\n ngOnInit() {\n if (this.isSideMenuLayout) {\n this.sideMenu = [...this.menu];\n } else {\n this.topMenu = [...this.menu[0].items];\n }\n }\n\n hideMenu() {\n this.layoutService.state.overlayMenuActive = false;\n this.layoutService.state.staticMenuMobileActive = false;\n this.layoutService.state.menuHoverActive = false;\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n this.menuOutsideClickListener = null;\n }\n this.unblockBodyScroll();\n }\n\n hideProfileMenu() {\n this.layoutService.state.profileSidebarVisible = false;\n if (this.profileMenuOutsideClickListener) {\n this.profileMenuOutsideClickListener();\n this.profileMenuOutsideClickListener = null;\n }\n }\n\n blockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.add('blocked-scroll');\n } else {\n document.body.className += ' blocked-scroll';\n }\n }\n\n unblockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.remove('blocked-scroll');\n } else {\n document.body.className = document.body.className.replace(\n new RegExp(\n '(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)',\n 'gi',\n ),\n ' ',\n );\n }\n }\n\n get containerClass() {\n return {\n 'layout-theme-light':\n this.layoutService.layoutConfig.colorScheme === 'light',\n 'layout-theme-dark':\n this.layoutService.layoutConfig.colorScheme === 'dark',\n 'layout-overlay': this.layoutService.layoutConfig.menuMode === 'overlay',\n 'layout-static': this.layoutService.layoutConfig.menuMode === 'static',\n 'layout-static-inactive':\n this.layoutService.state.staticMenuDesktopInactive &&\n this.layoutService.layoutConfig.menuMode === 'static',\n 'layout-overlay-active': this.layoutService.state.overlayMenuActive,\n 'layout-mobile-active': this.layoutService.state.staticMenuMobileActive,\n 'p-input-filled': this.layoutService.layoutConfig.inputStyle === 'filled',\n 'p-ripple-disabled': !this.layoutService.layoutConfig.ripple,\n };\n }\n\n ngOnDestroy() {\n if (this.overlayMenuOpenSubscription) {\n this.overlayMenuOpenSubscription.unsubscribe();\n }\n\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n }\n\n this.onAfterNgDestroy();\n }\n\n onAfterNgDestroy = () => {};\n}\n","<div *ngIf=\"isSideMenuLayout\" class=\"layout-wrapper\" [ngClass]=\"containerClass\">\n <spiderly-sidemenu-topbar></spiderly-sidemenu-topbar>\n <div class=\"layout-sidebar\">\n <sidebar [menu]=\"sideMenu\"></sidebar>\n </div>\n <div class=\"layout-main-container\">\n <div class=\"layout-main\">\n <router-outlet></router-outlet>\n </div>\n <footer></footer>\n </div>\n <div class=\"layout-mask\"></div>\n</div>\n\n<div *ngIf=\"isSideMenuLayout === false\">\n <spiderly-topbar\n [menu]=\"topMenu\"\n [showHoverBgOnRootItems]=\"showHoverBgOnRootTopMenuItems\"\n >\n <ng-content ACTIONS select=\"[ACTIONS]\"></ng-content>\n </spiderly-topbar>\n <main [style.max-width]=\"maxWidth\" style=\"margin: auto; padding: 18px\">\n <router-outlet></router-outlet>\n </main>\n</div>\n","import { Component } from '@angular/core';\nimport { ConfigServiceBase } from '../../services/config.service.base';\nimport { RouterModule } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'not-found',\n templateUrl: './not-found.component.html',\n imports: [RouterModule, ButtonModule],\n})\nexport class NotFoundComponent {\n companyName = this.config.companyName;\n logoPath: string = this.config.logoPath;\n\n constructor(private config: ConfigServiceBase) {}\n}\n","<div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px\">\n <div class=\"flex flex-col w-full\">\n <div\n class=\"w-full sm:w-[30rem]\"\n style=\"\n margin: auto;\n border-radius: 50px;\n padding: 0.3rem;\n background: linear-gradient(\n 180deg,\n var(--p-primary-color) 10%,\n rgba(33, 150, 243, 0) 30%\n );\n \"\n >\n <div class=\"surface-card py-12 px-8 sm:px-12\" style=\"border-radius: 45px\">\n <div class=\"text-center\">\n <img\n [src]=\"logoPath\"\n alt=\"{{ companyName }} Logo\"\n title=\"{{ companyName }} Logo\"\n height=\"60\"\n class=\"mb-6\"\n />\n </div>\n <h1 class=\"mb-6\">\n <div class=\"font-bold text-5xl lg:text-6xl spiderly-gradient-title\">\n 404\n </div>\n <div class=\"font-bold text-5xl lg:text-6xl\">Page Not Found</div>\n </h1>\n <div class=\"text-gray-600 text-lg mb-8\">\n The page you're looking for doesn't exist or has been moved. Let's get\n you back on track.\n </div>\n <div>\n <p-button [routerLink]=\"['/']\" label=\"Go to Homepage\"></p-button>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\n\nimport { MenuItem } from 'primeng/api';\nimport { SpiderlyButtonBaseComponent } from '../spiderly-button-base/spiderly-button-base';\n\n@Component({\n selector: 'spiderly-split-button',\n templateUrl: './spiderly-split-button.component.html',\n styles: [],\n imports: [CommonModule, ButtonModule, SplitButtonModule],\n})\nexport class SpiderlySplitButtonComponent extends SpiderlyButtonBaseComponent {\n @Input() dropdownItems: MenuItem[];\n}\n","<p-splitButton\n (onClick)=\"handleClick($event)\"\n [label]=\"label\"\n [icon]=\"icon\"\n [outlined]=\"outlined\"\n [styleClass]=\"styleClass\"\n [severity]=\"severity\"\n [rounded]=\"rounded\"\n [style]=\"style\"\n [class]=\"class\"\n [disabled]=\"disabled\"\n [model]=\"dropdownItems\"\n>\n <ng-content></ng-content>\n</p-splitButton>\n","import { Directive } from '@angular/core';\n\n/**\n * Marks an `<ng-template>` projected into `spiderly-data-table` as custom toolbar\n * content. The template is rendered in the table's caption action area, ahead of the\n * built-in Clear Filters / Export to Excel / Reload / Delete Selected buttons, so its\n * position stays stable regardless of selection state.\n *\n * The projected template binds to the consumer component (so `(click)` handlers call\n * the consumer's methods), and inherits the action row's spacing and responsive\n * stacking. No table state is passed as context — read it via the table's outputs\n * (`onLazyLoad`, `onTotalRecordsChange`, `onRowSelect`) when needed.\n *\n * @example\n * ```html\n * <spiderly-data-table [cols]=\"cols\" [getPaginatedListObservableMethod]=\"...\">\n * <ng-template spiderlyDataTableActions>\n * <button pButton class=\"p-button-outlined\" style=\"flex: none\"\n * icon=\"pi pi-check\" [label]=\"t('ApproveAll')\" (click)=\"approveAll()\"></button>\n * </ng-template>\n * </spiderly-data-table>\n * ```\n */\n@Directive({\n selector: '[spiderlyDataTableActions]',\n})\nexport class SpiderlyDataTableActionsDirective {}\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';\nimport { Observable } from 'rxjs';\n\nexport type DeleteConfirmationData =\n | {\n message: string;\n deleteItemFromTableObservableMethod: (id: number) => Observable<any>;\n id: number;\n }\n | {\n message: string;\n deleteListFromTableObservableMethod: (ids: number[]) => Observable<any>;\n ids: number[];\n };\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<DeleteConfirmationData>,\n ) {}\n\n accept() {\n const data = this.config.data;\n const observable =\n 'deleteListFromTableObservableMethod' in data\n ? data.deleteListFromTableObservableMethod(data.ids)\n : data.deleteItemFromTableObservableMethod(data.id);\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>{{ config.data.message }}</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 ContentChild,\n EventEmitter,\n Inject,\n Input,\n LOCALE_ID,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\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, SortMeta } 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 { PopoverModule } from 'primeng/popover';\nimport {\n Table,\n TableFilterEvent,\n TableLazyLoadEvent,\n TableModule,\n} from 'primeng/table';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { firstValueFrom, Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SpiderlyControlsModule } from '../../controls/spiderly-controls.module';\nimport { SpiderlyDataTableActionsDirective } from '../../directives/spiderly-data-table-actions.directive';\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 parseDateOnlyLocal,\n} from '../../services/helper-functions';\nimport { SpiderlyMessageService } from '../../services/spiderly-message.service';\nimport {\n DeleteConfirmationData,\n SpiderlyDeleteConfirmationComponent,\n} 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 PopoverModule,\n DatePickerModule,\n CheckboxModule,\n TooltipModule,\n ],\n})\nexport class SpiderlyDataTableComponent\n implements OnInit, AfterViewInit, OnDestroy\n{\n private readonly destroy$ = new Subject<void>();\n\n @ViewChild('dt') table: Table;\n\n /**\n * Custom toolbar content projected via `<ng-template spiderlyDataTableActions>`.\n * Rendered in the caption action area ahead of the built-in buttons.\n */\n @ContentChild(SpiderlyDataTableActionsDirective, { read: TemplateRef })\n actionsTemplate: TemplateRef<any>;\n\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 /** Whether the paginator is shown. Pass only when `hasLazyLoad === false`. Defaults to `true`. */\n @Input() showPaginator: boolean = true;\n /** Whether the table is wrapped in a card container. Defaults to `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 /** Whether the \"Add\" button is shown. Defaults to `true`. */\n @Input() showAddButton: boolean = true;\n /** Whether the \"Export to Excel\" button is shown. Defaults to `true`. */\n @Input() showExportToExcelButton: boolean = true;\n /** Whether the reload-table button is shown. Defaults to `false`. */\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\n /**\n * Unique key for persisting table state (filters, sort, pagination) to storage.\n * Auto-generated from the current route when not provided.\n */\n @Input() stateKey?: string;\n\n /** 'session' persists across refresh only; 'local' persists indefinitely. */\n @Input() stateStorage: 'session' | 'local' = 'session';\n\n /**\n * Column field the table sorts by while the user has no sort of their own — applied on\n * first load (persisted state, when present, wins) and re-applied whenever an action\n * would leave the table unsorted (tri-state header click, Clear filters). Shows as a\n * regular header sort arrow. Omit to keep the backend's implicit Id DESC ordering.\n */\n @Input() defaultSortField?: string;\n\n /** Direction for `defaultSortField`: 1 ascending (default), -1 descending. */\n @Input() defaultSortOrder: 1 | -1 = 1;\n\n initialMultiSortMeta: SortMeta[] | null = null;\n\n /** Columns currently rendered — `cols` minus the hidden ones. Actions columns always render. */\n visibleCols: Column[] = [];\n\n /** Cached count of visible data columns, so template bindings don't re-derive it per CD cycle. */\n private visibleDataColsCount = 0;\n\n /** Data columns offered in the column chooser (actions columns are excluded). */\n chooserCols: Column[] = [];\n\n resolvedStateKey: string | null = null;\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 // (or back to the declared default sort when one is set).\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 // Un-sorting substitutes the declared default (when there is one) right here,\n // so sortMultiple() broadcasts and emits the final meta in one shot.\n if (isMultiSortClick) {\n const remaining = this.table._multiSortMeta.filter(\n (m) => m.field !== event.field,\n );\n this.table._multiSortMeta = remaining.length\n ? remaining\n : (this.defaultMultiSortMeta() ?? remaining);\n } else {\n this.table._multiSortMeta = this.defaultMultiSortMeta() ?? [];\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) {\n const baseKey = this.stateKey ?? `spiderly-table:${this.router.url}`;\n this.resolvedStateKey =\n this.additionalFilterIdLong != null\n ? `${baseKey}:${this.additionalFilterIdLong}`\n : baseKey;\n } else {\n this.clientLoad();\n }\n\n this.restoreColumnVisibility();\n this.reconcileVisibilityWithPersistedConstraints();\n this.chooserCols = this.cols.filter(SpiderlyDataTableComponent.isDataColumn);\n this.refreshVisibleCols();\n\n // Bound to p-table's [multiSortMeta] so the FIRST request already carries the right\n // sort. Persisted user sort wins over the declared default; we read it ourselves\n // because PrimeNG's restoreState() runs on the first [value] change — after the\n // initial lazy emit has already left.\n this.initialMultiSortMeta =\n this.persistedMultiSortMeta() ?? this.defaultMultiSortMeta();\n }\n\n //#region Column visibility\n\n /**\n * User visibility choices (field → visible), holding only fields the user explicitly\n * toggled away from their declared default — so a page changing a column's declared\n * default later flows through to every user who never touched that column.\n */\n private columnVisibilityOverrides: Record<string, boolean> = {};\n\n /**\n * Columns revealed by the load-time reconciliation. Kept apart from\n * `columnVisibilityOverrides` so persisting a later unrelated toggle can't promote a\n * transient safety reveal into a durable choice.\n */\n private revealedByConstraint = new Set<string>();\n\n /** A data column shows values for a `field`; anything else (the actions column) always renders. */\n private static isDataColumn(col: Column): boolean {\n return !!col.field;\n }\n\n /**\n * Storage slot for the visibility overrides. Deliberately ALWAYS localStorage, even when\n * `stateStorage` is 'session': the column layout is a durable preference, while filters\n * are a transient working set — different natural lifetimes.\n */\n private get columnsStateKey(): string | null {\n return this.resolvedStateKey ? `${this.resolvedStateKey}:columns` : null;\n }\n\n /** Actions columns always render; data columns follow reveal/override, then declared default. */\n isColumnVisible(col: Column): boolean {\n if (!SpiderlyDataTableComponent.isDataColumn(col)) return true;\n if (col.lockVisible) return true; // pinned — wins over any (possibly stale) override\n if (this.revealedByConstraint.has(col.field)) return true;\n return this.columnVisibilityOverrides[col.field] ?? col.visible !== false;\n }\n\n private refreshVisibleCols(): void {\n this.visibleCols = this.cols.filter((col) => this.isColumnVisible(col));\n this.visibleDataColsCount = this.visibleCols.filter(\n SpiderlyDataTableComponent.isDataColumn,\n ).length;\n }\n\n /**\n * Locked columns can't be toggled; the last visible data column can't be hidden — the\n * table must never collapse to just an actions column. Revealing is always allowed.\n */\n canToggleColumn(col: Column): boolean {\n if (col.lockVisible) return false;\n if (!this.isColumnVisible(col)) return true;\n return this.visibleDataColsCount > 1;\n }\n\n toggleColumn(col: Column, visible: boolean): void {\n this.revealedByConstraint.delete(col.field); // an explicit choice supersedes a safety reveal\n\n if (visible === (col.visible !== false)) {\n delete this.columnVisibilityOverrides[col.field]; // back at the declared default\n } else {\n this.columnVisibilityOverrides[col.field] = visible;\n }\n\n this.persistColumnVisibility();\n this.refreshVisibleCols();\n\n if (!visible) this.clearHiddenColumnConstraints([col]);\n }\n\n /** Restores every column to its declared default and forgets the stored override. */\n resetColumnVisibility(): void {\n const wasVisible = this.visibleCols.filter(\n SpiderlyDataTableComponent.isDataColumn,\n );\n\n this.revealedByConstraint.clear();\n this.columnVisibilityOverrides = {};\n this.persistColumnVisibility();\n this.refreshVisibleCols();\n\n // Columns the reset just hid follow the same rule as a manual hide.\n this.clearHiddenColumnConstraints(\n wasVisible.filter((col) => !this.isColumnVisible(col)),\n );\n }\n\n /**\n * A hidden column contributes nothing to filtering or sorting: the header is the only\n * filter surface, so a kept constraint would restrict the data invisibly. Reloads (once)\n * only when a constraint was actually cleared — plain hides don't need a server round-trip.\n */\n private clearHiddenColumnConstraints(cols: Column[]): void {\n if (!this.table) return;\n\n let cleared = false;\n for (const col of cols) {\n const filterKey = col.filterField ?? col.field;\n if (\n SpiderlyDataTableComponent.isActiveFilterMeta(\n this.table.filters?.[filterKey],\n )\n ) {\n delete this.table.filters[filterKey];\n cleared = true;\n }\n\n if (this.table._multiSortMeta?.some((m) => m.field === col.field)) {\n this.table._multiSortMeta = this.table._multiSortMeta.filter(\n (m) => m.field !== col.field,\n );\n this.table.tableService.onSort(this.table._multiSortMeta);\n cleared = true;\n }\n }\n\n if (cleared) this.table._filter(); // re-emits the lazy load and saves the cleaned state\n }\n\n /** Whether filter metadata (single or array) carries a real constraint, not just an empty slot. */\n private static isActiveFilterMeta(meta: unknown): boolean {\n return (Array.isArray(meta) ? meta : [meta]).some(\n (m: any) =>\n m?.value != null &&\n m.value !== '' &&\n (!Array.isArray(m.value) || m.value.length > 0),\n );\n }\n\n private persistColumnVisibility(): void {\n if (!this.columnsStateKey) return;\n\n if (Object.keys(this.columnVisibilityOverrides).length === 0) {\n localStorage.removeItem(this.columnsStateKey);\n } else {\n localStorage.setItem(\n this.columnsStateKey,\n JSON.stringify(this.columnVisibilityOverrides),\n );\n }\n }\n\n private restoreColumnVisibility(): void {\n if (!this.columnsStateKey) return;\n\n this.columnVisibilityOverrides =\n SpiderlyDataTableComponent.readStoredJson(\n localStorage,\n this.columnsStateKey,\n ) ?? {};\n }\n\n /** Parses a JSON entry from web storage; missing or corrupted entries read as null. */\n private static readStoredJson(storage: Storage, key: string): any {\n try {\n return JSON.parse(storage.getItem(key) ?? 'null');\n } catch {\n return null;\n }\n }\n\n /**\n * PrimeNG's persisted table state (filters/sort/pagination), read directly from storage\n * because we need it before PrimeNG's restoreState() runs on the first [value] change.\n */\n private persistedTableState(): any {\n if (!this.resolvedStateKey) return null;\n\n return SpiderlyDataTableComponent.readStoredJson(\n this.stateStorage === 'local' ? localStorage : sessionStorage,\n this.resolvedStateKey,\n );\n }\n\n /**\n * Guards the \"hidden contributes nothing\" invariant against state this component didn't\n * write (older blobs, hand-edited storage): a hidden column the persisted table state\n * still filters or sorts by is revealed rather than constraining the data invisibly.\n * In-memory only — once the constraint is gone, the user's stored choice reapplies.\n */\n private reconcileVisibilityWithPersistedConstraints(): void {\n const state = this.persistedTableState();\n if (!state) return;\n\n const constrained = new Set<string>();\n for (const [field, meta] of Object.entries(state.filters ?? {})) {\n if (SpiderlyDataTableComponent.isActiveFilterMeta(meta))\n constrained.add(field);\n }\n for (const sortMeta of state.multiSortMeta ?? []) {\n if (sortMeta?.field) constrained.add(sortMeta.field);\n }\n\n for (const col of this.cols) {\n if (!SpiderlyDataTableComponent.isDataColumn(col)) continue;\n if (this.isColumnVisible(col)) continue;\n if (constrained.has(col.field) || constrained.has(col.filterField)) {\n this.revealedByConstraint.add(col.field);\n }\n }\n }\n\n //#endregion\n\n /**\n * The declared default as PrimeNG sort meta, or null when none is declared — or when its\n * column is hidden (\"hidden contributes nothing\"): the table then falls back to the\n * backend's implicit Id DESC, exactly as if no default were declared.\n */\n private defaultMultiSortMeta(): SortMeta[] | null {\n if (!this.defaultSortField) return null;\n\n const defaultSortCol = this.cols?.find(\n (col) => col.field === this.defaultSortField,\n );\n if (defaultSortCol && !this.isColumnVisible(defaultSortCol)) return null;\n\n return [{ field: this.defaultSortField, order: this.defaultSortOrder }];\n }\n\n private persistedMultiSortMeta(): SortMeta[] | null {\n const state = this.persistedTableState();\n return state?.multiSortMeta?.length ? state.multiSortMeta : null;\n }\n\n // Safety net: any lazy load still leaving unsorted (Clear filters — PrimeNG's clear()\n // nulls the sort and emits in one call — or stale persisted state) falls back to the\n // declared default. Patching the event before it becomes the backend Filter avoids a\n // second fetch; clear() broadcasts sort state to the header icons before emitting,\n // hence the explicit re-broadcast. The tri-state un-sort path never gets here — it\n // substitutes the default at its source in setupRemovableSort().\n private applyDefaultSortIfUnsorted(event: TableLazyLoadEvent): void {\n if (event.multiSortMeta?.length) return;\n\n const defaultSort = this.defaultMultiSortMeta();\n if (defaultSort == null) return;\n\n event.multiSortMeta = defaultSort;\n\n if (this.table) {\n this.table._multiSortMeta = defaultSort;\n this.table.tableService.onSort(defaultSort);\n }\n }\n\n lazyLoad(event: TableLazyLoadEvent) {\n this.applyDefaultSortIfUnsorted(event);\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 /*\n * Handle a cell click. Only columns that opt in (have an `onCellClick` callback) react; for them\n * we stop propagation so the click does not also trigger row navigation, then invoke the consumer\n * callback with a fully-populated CellClickEvent. Inert cells fall through to onRowClick unchanged.\n */\n onCellClick(col: Column, rowData: any, event: MouseEvent): void {\n if (!col.onCellClick) return;\n event.stopPropagation();\n col.onCellClick({\n ...this.buildClickEvent(rowData, event),\n field: col.field,\n value: rowData[col.field],\n displayValue: this.getRowData(rowData, col),\n });\n }\n\n /*\n * Build the base click payload shared by custom action clicks and cell clicks. The clicked element\n * is captured here, not read later from `originalEvent.currentTarget` (which nulls after dispatch).\n */\n private buildClickEvent(rowData: any, event: MouseEvent): ActionClickEvent {\n return {\n id: rowData[this.idField],\n row: rowData,\n element: event.currentTarget as HTMLElement,\n originalEvent: event,\n };\n }\n\n deleteObject(rowId: number) {\n this.openDeleteConfirmation(\n {\n deleteItemFromTableObservableMethod:\n this.deleteItemFromTableObservableMethod,\n id: rowId,\n message: this.translocoService.translate('PleaseConfirmToProceed'),\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 message: this.translocoService.translate('DeleteBulkConfirmation', {\n count: selectedIds.length,\n }),\n },\n 'SuccessfullyDeletedListMessage',\n () => this.resetSelection(),\n );\n }\n\n private openDeleteConfirmation(\n data: DeleteConfirmationData,\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\n .pipe(takeUntil(this.destroy$))\n .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 ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\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, event: MouseEvent) {\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(this.buildClickEvent(rowData, event));\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\n const raw = rowData[col.field];\n const local = typeof raw === 'string' ? parseDateOnlyLocal(raw) : null;\n return formatDate(local ?? raw, '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 table.clearState();\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 /**\n * Fired when a custom action is clicked. Receives an {@link ActionClickEvent} with the\n * row id, the full row object, the clicked DOM element (use it to anchor an overlay/popover),\n * and the original `MouseEvent`.\n *\n * Only fires for custom actions — the built-in `field` values `'Details'` and `'Delete'`\n * are handled internally and never invoke `onClick`.\n */\n onClick?: (event: ActionClickEvent) => 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?: (event: ActionClickEvent) => 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 * Whether the column is initially rendered. Defaults to `true`. Declare `visible: false` for\n * columns that should be available in the column chooser but hidden until the user reveals them.\n */\n visible?: boolean;\n /**\n * Pins the column: it always renders and shows in the chooser as checked and disabled.\n * Use for the row's identifying column (e.g. a product's title) so the table can never\n * lose its anchor.\n */\n lockVisible?: boolean;\n /**\n * Fired when this column's cell is clicked. Receives a {@link CellClickEvent} with the row id,\n * the column field, the full row, the raw and formatted cell value, the clicked `<td>` element\n * (use it to anchor an overlay/popover), and the original `MouseEvent`.\n *\n * Setting this makes the cell visibly clickable (cursor + hover) and the click no longer bubbles\n * up to row navigation. The mirror of {@link Action.onClick}, but for plain value cells.\n * Not applied to editable cells — those belong to their inline input.\n */\n onCellClick?: (event: CellClickEvent) => void;\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 visible,\n lockVisible,\n onCellClick,\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 visible?: boolean;\n lockVisible?: boolean;\n onCellClick?: (event: CellClickEvent) => void;\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 this.visible = visible;\n this.lockVisible = lockVisible;\n this.onCellClick = onCellClick;\n }\n}\n\n/**\n * Payload passed to {@link Action.onClick} when a custom row action is clicked.\n * Every field is populated by the data table, so consumers can rely on them being present.\n */\nexport interface ActionClickEvent {\n /** The clicked row's id (`row[idField]`). */\n id: number;\n /** The full row object the action belongs to. */\n row: any;\n /**\n * The clicked action element — pass it as the anchor when opening an overlay/popover.\n * Captured at click time on purpose: `originalEvent.currentTarget` is reset to null once\n * dispatch ends, so it would already be null inside an async handler.\n */\n element: HTMLElement;\n /** The original DOM click event. */\n originalEvent: MouseEvent;\n}\n\n/**\n * Payload passed to {@link Column.onCellClick} when a cell is clicked. A superset of\n * {@link ActionClickEvent} (same `id` / `row` / `element` / `originalEvent`) plus the cell's\n * column and value. Every field is populated by the data table.\n */\nexport interface CellClickEvent extends ActionClickEvent {\n /** The clicked column's `field`. */\n field: string;\n /** The cell's raw value (`row[field]`). */\n value: any;\n /** The formatted value shown in the cell (what the table renders via `getRowData`). */\n displayValue: string;\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 [multiSortMeta]=\"initialMultiSortMeta\"\n [stateKey]=\"resolvedStateKey\"\n [stateStorage]=\"stateStorage\"\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 <ng-container\n *ngIf=\"actionsTemplate\"\n [ngTemplateOutlet]=\"actionsTemplate\"\n ></ng-container>\n <button\n pButton\n *ngIf=\"hasLazyLoad\"\n data-testid=\"column-chooser-button\"\n [label]=\"t('Columns')\"\n class=\"p-button-outlined\"\n style=\"flex: none\"\n icon=\"pi pi-sliders-h\"\n (click)=\"columnChooser.toggle($event)\"\n ></button>\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 visibleCols; 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 visibleCols; trackBy: colTrackByFn\">\n <td\n [style]=\"getStyleForBodyColumn(col)\"\n [class.clickable]=\"col.onCellClick\"\n (click)=\"onCellClick(col, rowData, $event)\"\n *ngIf=\"!col.editable\"\n >\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, $event)\"\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 visibleCols.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 visibleCols.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 <p-popover #columnChooser>\n <div class=\"column-chooser\">\n <label\n *ngFor=\"let col of chooserCols; trackBy: colTrackByFn\"\n data-testid=\"column-chooser-option\"\n class=\"column-chooser-option\"\n >\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isColumnVisible(col)\"\n [disabled]=\"!canToggleColumn(col)\"\n (onChange)=\"toggleColumn(col, $event.checked)\"\n ></p-checkbox>\n <span>{{ col.name }}</span>\n </label>\n <button\n type=\"button\"\n data-testid=\"column-chooser-reset\"\n class=\"column-chooser-reset\"\n (click)=\"resetColumnVisibility()\"\n >\n {{ t('ResetToDefault') }}\n </button>\n </div>\n </p-popover>\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 /** Whether the data view is wrapped in a card container. Defaults to `true`. */\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 /** Whether the total records count is shown. Defaults to `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, filter, map, take } 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 filter((user) => user !== undefined), // wait until the session is resolved (undefined = still loading)\n take(1),\n map((user) => {\n if (user) {\n return true;\n }\n this.router.navigate([this.config.loginSlug]);\n return false;\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanActivate } from '@angular/router';\nimport { Observable, filter, map, take } 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 filter((user) => user !== undefined), // wait until the session is resolved (undefined = still loading)\n take(1),\n map((user) => {\n if (user) {\n this.authService.navigateToDashboard();\n return false;\n }\n return true;\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 } from '@angular/core';\nimport { HttpInterceptorFn } from '@angular/common/http';\nimport { ConfigServiceBase } from '../services/config.service.base';\n\n// Cookie-based auth: the session JWTs are HttpOnly cookies, so we just send credentials on API calls.\n// The browser attaches/refreshes the cookies; JS never holds the tokens (XSS-safe).\n//\n// CSRF: state-changing requests (POST/PUT/DELETE/PATCH) authenticated via cookie must include the\n// X-CSRF header, otherwise Spiderly.Shared/Attributes/AuthGuardAttribute.cs returns 403 Forbidden\n// (the server-side check was added in commit 92f238d but the matching client-side header was never\n// emitted, so every cookie-authed write was failing in the admin). The check is presence-only —\n// any non-empty value works — and the protection comes from the fact that a cross-origin form\n// submission cannot set custom request headers without a CORS preflight.\nconst SAFE_HTTP_METHODS = new Set(['GET', 'HEAD', 'OPTIONS']);\n\nexport const jwtInterceptor: HttpInterceptorFn = (req, next) => {\n const config = inject(ConfigServiceBase);\n\n const isApiUrl = req.url.startsWith(config.apiUrl);\n if (isApiUrl) {\n const isStateChanging = !SAFE_HTTP_METHODS.has(req.method.toUpperCase());\n req = req.clone({\n withCredentials: true,\n ...(isStateChanging && { setHeaders: { 'X-CSRF': '1' } }),\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 { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ApiErrorCodes } from '../errors/api-error-codes';\nimport { AuthServiceBase } from '../services/auth.service.base';\nimport { ConfigServiceBase } from '../services/config.service.base';\nimport { SpiderlyMessageService } from '../services/spiderly-message.service';\n\n/**\n * Owns cross-cutting HTTP-error UX: shows the right message and, on an expired session, clears auth — then\n * RETHROWS. Errors stay errors: callers run only their success path, and an unhandled HttpErrorResponse that\n * reaches the global ErrorHandler is intentionally ignored there (HTTP-error UX lives here). This interceptor\n * must never convert an error into a value — doing so makes callers treat failures as data.\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 reactToError = (err: HttpErrorResponse, request: HttpRequest<any>): void => {\n if (!config.production) {\n console.error(err);\n }\n\n // TODO: type this as an ApiError interface (TS mirror of ApiErrorDTO, next to errors/api-error-codes.ts)\n // so message/errorCode/traceId reads of the cross-language contract are compile-checked, not conventional.\n let errorResponse = err.error;\n if (request.responseType !== 'json' && typeof err.error === 'string') {\n try {\n errorResponse = JSON.parse(err.error);\n } catch {\n errorResponse = null;\n }\n }\n\n // ApiErrorDTO.traceId is present only on reportable errors, so this is a no-op everywhere else —\n // the server decides which responses carry a support reference, never this status-code chain.\n const withReference = (detail: string): string =>\n errorResponse?.traceId\n ? `${detail} ${translocoService.translate('ErrorReference', { traceId: errorResponse.traceId })}`\n : detail;\n\n if (err.status === 0) {\n // Server unreachable; defer so the message isn't lost during a shutdown/refresh race.\n setTimeout(() => {\n messageService.warningMessage(\n withReference(translocoService.translate('ServerLostConnectionDetails')),\n translocoService.translate('ServerLostConnectionTitle'),\n );\n }, 100);\n } else if (err.status === 400) {\n messageService.warningMessage(\n withReference(errorResponse?.message ?? translocoService.translate('BadRequestDetails')),\n translocoService.translate('Warning'),\n );\n } else if (err.status === 401) {\n if (errorResponse?.errorCode === ApiErrorCodes.InvalidToken) {\n authService.clearSession(); // expired/invalid session — drop it; guards send the user to login\n } else {\n messageService.warningMessage(\n withReference(errorResponse?.message ?? translocoService.translate('LoginRequired')),\n translocoService.translate('Warning'),\n );\n }\n } else if (err.status === 403) {\n messageService.warningMessage(\n withReference(translocoService.translate('PermissionErrorDetails')),\n translocoService.translate('PermissionErrorTitle'),\n );\n } else if (err.status === 404) {\n messageService.warningMessage(\n withReference(translocoService.translate('NotFoundDetails')),\n translocoService.translate('NotFoundTitle'),\n );\n } else {\n messageService.errorMessage(\n withReference(translocoService.translate('UnexpectedErrorDetails')),\n translocoService.translate('UnexpectedErrorTitle'),\n );\n }\n };\n\n return next(req).pipe(\n catchError((err: HttpErrorResponse) => {\n reactToError(err, req);\n return throwError(() => err);\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 authService.captureExternalAuthError(); // before the router can strip ?externalAuthError on the /login redirect\n return authService.refreshToken();\n };\n }\n return () => {\n return of();\n };\n}\n","import { ConfigServiceBase } from './config.service.base';\nimport { Injectable } from '@angular/core';\nimport { TranslocoLoader } from '@jsverse/transloco';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SpiderlyTranslocoLoader implements TranslocoLoader {\n constructor(\n private http: HttpClient,\n private config: ConfigServiceBase,\n ) {}\n\n getTranslation(lang: string) {\n return this.http.get(`${this.config.frontendUrl}/assets/i18n/${lang}.json`);\n }\n}\n","import { Directive, Input } from '@angular/core';\n\n@Directive({\n selector: '[templateType]',\n})\nexport class SpiderlyTemplateTypeDirective<T> {\n @Input() templateType?: T;\n\n static ngTemplateContextGuard<T>(\n dir: SpiderlyTemplateTypeDirective<T>,\n ctx: unknown,\n ): ctx is T {\n return true;\n }\n}\n","/*\n * Public API Surface of spiderly\n */\n\nexport * from './lib/errors/api-error-codes';\nexport * from './lib/controls/base-autocomplete-control';\nexport * from './lib/controls/base-control';\nexport * from './lib/controls/base-dropdown-control';\nexport * from './lib/controls/spiderly-autocomplete/spiderly-autocomplete.component';\nexport * from './lib/controls/spiderly-calendar/spiderly-calendar.component';\nexport * from './lib/controls/spiderly-checkbox/spiderly-checkbox.component';\nexport * from './lib/controls/spiderly-colorpicker/spiderly-colorpicker.component';\nexport * from './lib/controls/spiderly-controls.module';\nexport * from './lib/controls/spiderly-dropdown/spiderly-dropdown.component';\nexport * from './lib/controls/spiderly-editor/spiderly-editor.component';\nexport * from './lib/controls/spiderly-markdown/spiderly-markdown.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/auth-card/auth-card.component';\nexport * from './lib/components/auth/external-provider-icons';\nexport * from './lib/components/auth/external-login/external-login.component';\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/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/editor-image-upload-result';\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/spiderly-data-table-actions.directive';\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","i2.ConfigServiceBase","map","i1.AuthServiceBase","i1.ConfigServiceBase","i2.AuthServiceBase","i3.ApiSecurityService","i1.ValidatorAbstractService","i5.BaseFormService","i8.PanelHeaderComponent","i9.PanelBodyComponent","i10.PanelFooterComponent","i11.SpiderlyPanelComponent","i6.AuthServiceBase","i7","i8.SpiderlyTextboxComponent","i9.SpiderlyButtonComponent","i3.PanelHeaderComponent","i4.PanelBodyComponent","i5.SpiderlyPanelComponent","i1.ApiSecurityService","i3.AuthServiceBase","i1.LayoutServiceBase","i3.SidebarMenuService","i4.AuthServiceBase","i5.ApiSecurityService","i6.ConfigServiceBase","i8.SpiderlyAutocompleteComponent","i4.ConfigServiceBase","filter","i5.ConfigServiceBase","i3.ConfigServiceBase","i8.SpiderlyButtonComponent","i9.SpiderlyNumberComponent","i11","i13","i15","i16","i17","i4.SpiderlyButtonComponent","i1.SpiderlyMessageService","finalize","tap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spiderly.mjs","sources":["../../../projects/spiderly/src/lib/errors/api-error-codes.ts","../../../projects/spiderly/src/lib/controls/base-control.ts","../../../projects/spiderly/src/lib/controls/base-dropdown-control.ts","../../../projects/spiderly/src/lib/controls/base-autocomplete-control.ts","../../../projects/spiderly/src/lib/components/required/required.component.ts","../../../projects/spiderly/src/lib/components/required/required.component.html","../../../projects/spiderly/src/lib/components/spiderly-form-control/spiderly-form-control.ts","../../../projects/spiderly/src/lib/services/validator-abstract.service.ts","../../../projects/spiderly/src/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.html","../../../projects/spiderly/src/lib/services/helper-functions.ts","../../../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/controls/spiderly-markdown/spiderly-markdown.component.ts","../../../projects/spiderly/src/lib/controls/spiderly-markdown/spiderly-markdown.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/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/init-company-auth-dialog-details.ts","../../../projects/spiderly/src/lib/services/config.service.base.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/auth-card/auth-card.component.ts","../../../projects/spiderly/src/lib/components/auth/auth-card/auth-card.component.html","../../../projects/spiderly/src/lib/components/auth/external-provider-icons.ts","../../../projects/spiderly/src/lib/components/auth/external-login/external-login.component.ts","../../../projects/spiderly/src/lib/components/auth/external-login/external-login.component.html","../../../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-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/web-storage.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/directives/spiderly-data-table-actions.directive.ts","../../../projects/spiderly/src/lib/enums/match-mode-enum-codes.ts","../../../projects/spiderly/src/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.ts","../../../projects/spiderly/src/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.html","../../../projects/spiderly/src/lib/components/spiderly-data-table/spiderly-data-table.component.ts","../../../projects/spiderly/src/lib/components/spiderly-data-table/spiderly-data-table.component.html","../../../projects/spiderly/src/lib/components/spiderly-data-view/spiderly-data-view.component.ts","../../../projects/spiderly/src/lib/components/spiderly-data-view/spiderly-data-view.component.html","../../../projects/spiderly/src/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.ts","../../../projects/spiderly/src/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.html","../../../projects/spiderly/src/lib/entities/codebook.ts","../../../projects/spiderly/src/lib/entities/filter-sort-meta.ts","../../../projects/spiderly/src/lib/entities/filter.ts","../../../projects/spiderly/src/lib/entities/filter-rule.ts","../../../projects/spiderly/src/lib/entities/is-authorized-for-save-event.ts","../../../projects/spiderly/src/lib/entities/last-menu-icon-index-clicked.ts","../../../projects/spiderly/src/lib/entities/lazy-load-selected-ids-result.ts","../../../projects/spiderly/src/lib/entities/menuchangeevent.ts","../../../projects/spiderly/src/lib/entities/namebook.ts","../../../projects/spiderly/src/lib/entities/paginated-result.ts","../../../projects/spiderly/src/lib/entities/primeng-option.ts","../../../projects/spiderly/src/lib/entities/simple-save-result.ts","../../../projects/spiderly/src/lib/enums/security-enums.ts","../../../projects/spiderly/src/lib/enums/verification-type-codes.ts","../../../projects/spiderly/src/lib/guards/auth.guard.ts","../../../projects/spiderly/src/lib/guards/not-auth.guard.ts","../../../projects/spiderly/src/lib/handlers/spiderly-error-handler.ts","../../../projects/spiderly/src/lib/interceptors/http-loading.interceptor.ts","../../../projects/spiderly/src/lib/interceptors/json-parser.interceptor.ts","../../../projects/spiderly/src/lib/interceptors/jwt.interceptor.ts","../../../projects/spiderly/src/lib/interceptors/unauthorized.interceptor.ts","../../../projects/spiderly/src/lib/services/app-initializer.ts","../../../projects/spiderly/src/lib/services/spiderly-transloco-loader.ts","../../../projects/spiderly/src/lib/directives/template-type.directive.ts","../../../projects/spiderly/src/public-api.ts","../../../projects/spiderly/src/spiderly.ts"],"sourcesContent":["/**\n * Machine-readable error codes returned in `ApiErrorDTO.errorCode`.\n * Mirror of Spiderly.Shared.DTO.ApiErrorCodes — keep in sync.\n */\nexport const ApiErrorCodes = {\n InvalidToken: 'invalid_token',\n ValidationFailed: 'validation_failed',\n UniqueViolation: 'unique_violation',\n ForeignKeyViolation: 'foreign_key_violation',\n ConcurrencyConflict: 'concurrency_conflict',\n EmailNotVerified: 'email_not_verified',\n ExternalProviderNotConfigured: 'external_provider_not_configured',\n ExternalEmailMissing: 'external_email_missing',\n} as const;\n\nexport type ApiErrorCode = (typeof ApiErrorCodes)[keyof typeof ApiErrorCodes];\n","import { Component, Input } from '@angular/core';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { SpiderlyFormControl } from '../components/spiderly-form-control/spiderly-form-control';\n\n@Component({\n selector: 'base-control',\n template: '',\n styles: [],\n standalone: false,\n})\nexport class BaseControl {\n @Input() control: SpiderlyFormControl<any>; // If you name it formControl: https://stackoverflow.com/a/54755671/21209982\n @Input() disabled: boolean = false;\n /** Whether the field's label is rendered. Defaults to `true`. */\n @Input() showLabel: boolean = true;\n /** Whether the required (*) indicator is shown next to the label. Defaults to `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 /** Whether the info tooltip icon is shown next to the label. Defaults to `false`. */\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 /** Whether an addon button is shown next to the dropdown. Defaults to `false`. */\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 /** Whether a clear button is shown. Defaults to `true`. */\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 { HttpResponse } from '@angular/common/http';\nimport * as FileSaver from 'file-saver';\nimport mime from 'mime';\nimport 'reflect-metadata';\nimport { map, Observable } from 'rxjs';\nimport {\n Action,\n Column,\n} from '../components/spiderly-data-table/spiderly-data-table.component';\nimport { SpiderlyTab } from '../components/spiderly-panels/panel-header/panel-header.component';\nimport { Codebook } from '../entities/codebook';\nimport { Filter } from '../entities/filter';\nimport { Namebook } from '../entities/namebook';\nimport { PrimengOption } from '../entities/primeng-option';\n\n// Helper function for PrecisionScale validation (to be added in the TypeScript output):\nexport function validatePrecisionScale(\n value: any,\n precision: number,\n scale: number,\n ignoreTrailingZeros: boolean,\n): boolean {\n if (typeof value !== 'number') return false;\n const [integerPart, decimalPart] = value.toString().split('.');\n if (integerPart.length > precision - scale) return false;\n if (decimalPart && decimalPart.length > scale) return false;\n if (\n !ignoreTrailingZeros &&\n decimalPart &&\n decimalPart.replace(/0+$/, '').length > scale\n )\n return false;\n return true;\n}\n\nexport function getMimeTypeForFileName(fileName: string): string {\n return mime.getType(fileName) ?? 'application/octet-stream';\n}\n\nexport function adjustColor(color: string, percent: number): string {\n if (!/^#([0-9A-F]{3}){1,2}$/i.test(color)) {\n console.error('Invalid hex color format');\n }\n\n let r: number, g: number, b: number;\n if (color.length === 7) {\n r = parseInt(color.slice(1, 3), 16);\n g = parseInt(color.slice(3, 5), 16);\n b = parseInt(color.slice(5, 7), 16);\n } else {\n r = parseInt(color[1] + color[1], 16);\n g = parseInt(color[2] + color[2], 16);\n b = parseInt(color[3] + color[3], 16);\n }\n\n const adjust = (value: number, percent: number): number => {\n const amount = (percent / 100) * 255;\n const newValue = Math.min(Math.max(value + amount, 0), 255);\n return Math.round(newValue);\n };\n\n r = adjust(r, percent);\n g = adjust(g, percent);\n b = adjust(b, percent);\n\n const toHex = (value: number): string => {\n const hex = value.toString(16).padStart(2, '0');\n return hex;\n };\n\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\n// new Date('yyyy-MM-dd') is parsed as UTC midnight per the JS spec, which shifts to the previous day\n// in negative-UTC locales. Construct via numeric components to anchor at local midnight instead.\nexport function parseDateOnlyLocal(s: string): Date | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(s);\n if (!m) return null;\n return new Date(+m[1], +m[2] - 1, +m[3]);\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 saveResponseAsFile(\n res: HttpResponse<Blob>,\n fallbackName: string,\n): void {\n if (res?.body == null) {\n return;\n }\n let fileName = getFileNameFromContentDisposition(res, fallbackName);\n FileSaver.saveAs(res.body, decodeURIComponent(fileName));\n}\n\nexport function exportListToExcel(\n exportListToExcelObservableMethod: (filter: Filter) => Observable<any>,\n filter: Filter,\n) {\n exportListToExcelObservableMethod(filter).subscribe((res) => {\n saveResponseAsFile(res, 'ExcelExport.xlsx');\n });\n}\n\nexport function getPrimengNamebookOptions(\n namebookList: Namebook[],\n): PrimengOption[] {\n return namebookList.map((x) => ({ label: x.displayName, code: x.id }));\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) => getPrimengNamebookOptions(res)),\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\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 { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { BaseControl } from '../base-control';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule, FormControl } 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';\nimport { Subscription } from 'rxjs';\nimport { parseDateOnlyLocal } from '../../services/helper-functions';\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, OnDestroy {\n /** Whether the time picker is shown in addition to the date. Defaults to `false`. */\n @Input() showTime: boolean = false;\n @Input() dateOnly: boolean = false;\n @Input() timeOnly: boolean = false;\n\n internalControl = new FormControl<Date | null>(null);\n\n private syncing = false;\n private subscriptions: Subscription[] = [];\n\n constructor(protected override translocoService: TranslocoService) {\n super(translocoService);\n }\n\n override ngOnInit() {\n super.ngOnInit();\n\n if (!this.usesStringProxy() || !this.control) return;\n\n this.applyFromOuter(this.control.value);\n if (this.control.disabled) this.internalControl.disable({ emitEvent: false });\n\n this.subscriptions.push(\n this.control.valueChanges.subscribe((v) => {\n if (!this.syncing) this.applyFromOuter(v);\n })\n );\n this.subscriptions.push(\n this.control.statusChanges.subscribe((status) => {\n if (status === 'DISABLED' && this.internalControl.enabled)\n this.internalControl.disable({ emitEvent: false });\n else if (status !== 'DISABLED' && this.internalControl.disabled)\n this.internalControl.enable({ emitEvent: false });\n })\n );\n this.subscriptions.push(\n this.internalControl.valueChanges.subscribe((d) => {\n if (!this.syncing) this.applyToOuter(d);\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n setDate(event: Date) {}\n\n usesStringProxy(): boolean {\n return this.dateOnly || this.timeOnly;\n }\n\n private applyFromOuter(v: unknown): void {\n this.syncing = true;\n try {\n if (v == null) {\n this.internalControl.setValue(null);\n } else if (this.dateOnly && typeof v === 'string') {\n this.internalControl.setValue(parseDateOnlyLocal(v));\n } else if (this.timeOnly && typeof v === 'string') {\n this.internalControl.setValue(this.parseTimeOnly(v));\n } else if (v instanceof Date) {\n this.internalControl.setValue(v);\n } else {\n this.internalControl.setValue(null);\n }\n } finally {\n this.syncing = false;\n }\n }\n\n private applyToOuter(d: Date | null): void {\n this.syncing = true;\n try {\n if (d == null) {\n this.control.setValue(null);\n } else if (this.dateOnly) {\n this.control.setValue(this.formatDateOnly(d));\n } else if (this.timeOnly) {\n this.control.setValue(this.formatTimeOnly(d));\n } else {\n this.control.setValue(d);\n }\n } finally {\n this.syncing = false;\n }\n }\n\n private parseTimeOnly(s: string): Date | null {\n const m = /^(\\d{2}):(\\d{2})(?::(\\d{2}))?/.exec(s);\n if (!m) return null;\n const d = new Date();\n d.setHours(+m[1], +m[2], +(m[3] ?? 0), 0);\n return d;\n }\n\n private formatDateOnly(d: Date): string {\n return `${d.getFullYear()}-${this.pad(d.getMonth() + 1)}-${this.pad(d.getDate())}`;\n }\n\n private formatTimeOnly(d: Date): string {\n return `${this.pad(d.getHours())}:${this.pad(d.getMinutes())}:${this.pad(d.getSeconds())}`;\n }\n\n private pad(n: number): string {\n return String(n).padStart(2, '0');\n }\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]=\"usesStringProxy() ? internalControl : control\"\n (onBlur)=\"control.markAsDirty()\"\n [dateFormat]=\"timeOnly ? '' : 'dd.mm.yy.'\"\n iconDisplay=\"input\"\n [showIcon]=\"true\"\n [showTime]=\"!usesStringProxy() && showTime\"\n [timeOnly]=\"timeOnly\"\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 /** Whether a hex text input is shown alongside the color swatch. Defaults to `true`. */\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 /** Whether a password-strength meter is shown below the field. Defaults to `false`. */\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 /** Whether an icon button is appended to the input. Defaults to `false`. */\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 /** Whether increment/decrement spinner buttons are shown. Defaults to `true`. */\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';\nimport { EditorImageUploadResult } from '../../entities/editor-image-upload-result';\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<EditorImageUploadResult>;\n @Input() objectId: number = 0;\n /** Mirrors the entity property's [AcceptedFileTypes] so the picker matches what the server validates. */\n @Input() acceptedFileTypes: string[];\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', this.acceptedFileTypes?.join(',') ?? '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((result: EditorImageUploadResult) => {\n const range = quill.getSelection(true);\n quill.insertEmbed(range.index, 'image', result.url);\n // Quill 2's built-in Image blot recognizes width/height as native attributes,\n // so formatText writes them directly onto the rendered <img>. Storefront uses\n // these to size the image up-front and prevent CLS. (0, 0) means the server\n // couldn't determine an intrinsic size (e.g. an SVG without width/viewBox) —\n // omit the attributes entirely rather than render an invisible 0×0 image.\n if (result.width && result.height) {\n quill.formatText(range.index, 1, { width: result.width, height: result.height });\n }\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, ElementRef, 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 { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { TextareaModule } from 'primeng/textarea';\nimport { TabsModule } from 'primeng/tabs';\nimport { MarkdownComponent } from 'ngx-markdown';\nimport { Observable } from 'rxjs';\nimport { EditorImageUploadResult } from '../../entities/editor-image-upload-result';\n\n/**\n * Markdown form control: a plain textarea (Write) with a rendered live preview (Preview),\n * arranged as tabs. The stored value is raw Markdown text.\n *\n * The preview is rendered with ngx-markdown (marked) and is intentionally APPROXIMATE — a\n * consuming storefront may render the same Markdown with a different engine/flavor.\n *\n * The <textarea> DOM is the source of truth for the text (the form control mirrors it, like\n * spiderly-editor mirrors Quill). We never splice control.value, because SpiderlyFormControl\n * defaults to updateOn:'blur' and would be stale relative to the focused textarea.\n *\n * When {@link uploadImageMethod} is provided (wired by the generator for properties with an\n * S3 public-storage attribute), pasting an image uploads it and, on success, inserts a\n * standard `` link at the caret via execCommand (which preserves the native undo\n * stack). Upload progress is shown out-of-band, not as a token in the text.\n */\n@Component({\n selector: 'spiderly-markdown',\n templateUrl: './spiderly-markdown.component.html',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n TextareaModule,\n TabsModule,\n MarkdownComponent,\n RequiredComponent,\n TranslocoDirective,\n ],\n})\nexport class SpiderlyMarkdownComponent extends BaseControl implements OnInit {\n @ViewChild('textarea') textareaRef: ElementRef<HTMLTextAreaElement>;\n\n @Input() uploadImageMethod: (formData: FormData) => Observable<EditorImageUploadResult>;\n @Input() objectId: number = 0;\n\n pendingImageUploads: number = 0;\n imageUploadFailed: boolean = false;\n\n constructor(protected override translocoService: TranslocoService) {\n super(translocoService);\n }\n\n override ngOnInit() {\n super.ngOnInit();\n }\n\n onPaste(event: ClipboardEvent) {\n // Only intercept when image upload is wired; otherwise let the default paste happen.\n if (!this.uploadImageMethod || this.control?.disabled) return;\n\n const imageFile = this.getPastedImage(event);\n if (!imageFile) return;\n\n event.preventDefault();\n\n const formData = new FormData();\n formData.append('file', imageFile, `${this.objectId}-${imageFile.name || 'pasted-image.png'}`);\n\n this.imageUploadFailed = false;\n this.pendingImageUploads++;\n\n this.uploadImageMethod(formData).subscribe({\n next: (result: EditorImageUploadResult) => {\n this.pendingImageUploads--;\n this.insertImageMarkdown(result.url);\n },\n error: () => {\n this.pendingImageUploads--;\n this.imageUploadFailed = true;\n },\n });\n }\n\n private getPastedImage(event: ClipboardEvent): File | null {\n const items = event.clipboardData?.items;\n if (!items) return null;\n\n for (let i = 0; i < items.length; i++) {\n if (items[i].type.startsWith('image/')) {\n return items[i].getAsFile();\n }\n }\n\n return null;\n }\n\n private insertImageMarkdown(url: string) {\n const snippet = ``;\n const textarea = this.textareaRef?.nativeElement;\n\n // Preferred path: the textarea is focused, so insert at the caret while preserving the\n // native undo stack. The resulting 'input' event syncs the control on blur, exactly like\n // the user typing — no manual setValue, no stale-model read.\n if (textarea && document.activeElement === textarea && document.execCommand('insertText', false, snippet)) {\n return;\n }\n\n // Fallback (textarea blurred/absent, or execCommand unsupported): read the LIVE textarea\n // value — never control.value, which is stale while focused. When blurred, the control is\n // already current, so appending can't drop uncommitted text.\n if (textarea) {\n const sep = textarea.value.length ? '\\n' : '';\n textarea.value = `${textarea.value}${sep}${snippet}`;\n this.control.setValue(textarea.value);\n } else {\n const current = this.control.value ?? '';\n this.control.setValue(current.length ? `${current}\\n${snippet}` : snippet);\n }\n this.control.markAsDirty();\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 </div>\n\n <ng-container *transloco=\"let t\">\n <p-tabs *ngIf=\"control\" value=\"write\">\n <p-tablist>\n <p-tab value=\"write\">{{ t('Write') }}</p-tab>\n <p-tab value=\"preview\">{{ t('Preview') }}</p-tab>\n </p-tablist>\n <p-tabpanels>\n <p-tabpanel value=\"write\">\n <textarea\n #textarea\n pTextarea\n [formControl]=\"control\"\n [id]=\"control.label\"\n (blur)=\"control.markAsDirty()\"\n (paste)=\"onPaste($event)\"\n [autoResize]=\"true\"\n [class]=\"control.disabled ? 'disabled' : ''\"\n [style]=\"{ width: '100%', minHeight: '320px' }\"\n ></textarea>\n <small *ngIf=\"pendingImageUploads > 0\">{{ t('UploadingImage') }}</small>\n <small *ngIf=\"imageUploadFailed\" class=\"spiderly-error-message\">{{ t('ImageUploadFailed') }}</small>\n </p-tabpanel>\n <p-tabpanel value=\"preview\">\n <div class=\"spiderly-markdown-preview\" style=\"min-height: 320px\">\n <markdown [data]=\"control.value\"></markdown>\n </div>\n </p-tabpanel>\n </p-tabpanels>\n </p-tabs>\n </ng-container>\n\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 /** Optional image icon (URL) rendered before the label — for brand logos (e.g. Google) that aren't PrimeNG font icons. */\n @Input() iconUrl: 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]=\"iconUrl ? undefined : 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-container *ngIf=\"iconUrl\">\n <img [src]=\"iconUrl\" [alt]=\"label\" style=\"height: 16px; width: 16px; margin-right: 8px\" />\n <span>{{ label }}</span>\n </ng-container>\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 { TranslocoService } from '@jsverse/transloco';\nimport { Injectable, NgZone } from '@angular/core';\nimport { MessageService } from 'primeng/api';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SpiderlyMessageService {\n // TODO FT: nece da prikaze poruku ako je neki angular error koji se dogodi tek nakon api poziva\n constructor(\n private messageService: MessageService,\n private translocoService: TranslocoService,\n private ngZone: NgZone,\n ) {}\n\n successMessage(\n detail: string,\n title: string = this.translocoService.translate('SuccessfulAction'),\n ) {\n this.messageService.add({\n severity: 'success',\n summary: title,\n detail: detail,\n life: 10000,\n });\n }\n\n warningMessage(detail: string, title?: string, sticky?: boolean) {\n this.messageService.add({\n severity: 'warn',\n summary: title ?? this.translocoService.translate('Warning'),\n detail: detail,\n life: 10000,\n sticky: sticky,\n });\n }\n\n errorMessage(\n detail: string,\n title: string = this.translocoService.translate('Error'),\n ) {\n this.messageService.add({\n severity: 'error',\n summary: title,\n detail: detail,\n life: 10000,\n });\n }\n\n infoMessage(detail: string, title?: string, sticky?: boolean) {\n this.messageService.add({\n severity: 'info',\n summary: title ?? this.translocoService.translate('Info'),\n detail: detail,\n life: 10000,\n sticky: sticky,\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { FileSelectEvent, FileUploadModule } from 'primeng/fileupload';\nimport { RequiredComponent } from '../../components/required/required.component';\nimport { SpiderlyButtonComponent } from '../../components/spiderly-buttons/spiderly-button/spiderly-button.component';\nimport { BaseEntity } from '../../entities/base-entity';\nimport {\n getImageDimensions,\n getMimeTypeForFileName,\n isExcelFileType,\n isFileImageType,\n} from '../../services/helper-functions';\nimport { SpiderlyMessageService } from '../../services/spiderly-message.service';\nimport { ValidatorAbstractService } from '../../services/validator-abstract.service';\nimport { BaseControl } from '../base-control';\n\n@Component({\n selector: 'spiderly-file',\n templateUrl: './spiderly-file.component.html',\n styles: [],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n FileUploadModule,\n RequiredComponent,\n SpiderlyButtonComponent,\n TranslocoDirective,\n ],\n})\nexport class SpiderlyFileComponent extends BaseControl implements OnInit {\n @Output() onFileSelected = new EventEmitter<SpiderlyFileSelectEvent>();\n @Output() onFileRemoved = new EventEmitter<null>();\n @Input() objectId: number;\n @Input() fileData: string;\n @Input() acceptedFileTypes: Array<\n | 'image/*'\n | 'image/png'\n | 'image/jpeg'\n | 'image/webp'\n | 'image/gif'\n | 'image/avif'\n | 'image/svg+xml'\n | '.png'\n | '.jpg'\n | '.jpeg'\n | '.webp'\n | '.gif'\n | '.avif'\n | '.svg'\n | 'application/pdf'\n | '.pdf'\n | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n | 'application/vnd.ms-excel'\n | '.xlsx'\n | '.xls'\n | 'video/*'\n | 'video/mp4'\n | '.mp4'\n | 'audio/*'\n | 'audio/mpeg'\n | '.mp3'\n | 'application/zip'\n | '.zip'\n | 'text/csv'\n | '.csv'\n > = ['image/*'];\n @Input() required: boolean; // It's okay for this control, because for the custom uploads where we are not initializing the control from the backend, there is no need for formControl.\n @Input() multiple: boolean = false;\n @Input() isUrlFileData: boolean = true;\n @Input() imageWidth: number = 0;\n @Input() imageHeight: number = 0;\n @Input() maxFileSize: number = 20_000_000;\n\n acceptedFileTypesCommaSeparated: string;\n existingFileUrl: string | null = null;\n existingFileIsImage: boolean = false;\n existingFileName: string = '';\n @Input() files: File[] = [];\n\n constructor(\n protected override translocoService: TranslocoService,\n private messageService: SpiderlyMessageService,\n private validatorService: ValidatorAbstractService,\n ) {\n super(translocoService);\n }\n\n override ngOnInit() {\n if (this.control?.value != null && this.fileData != null) {\n if (this.isUrlFileData) {\n this.setExistingFileUrl(this.fileData);\n } else {\n const file = this.getFileFromBase64(this.fileData);\n this.files.push(file);\n }\n }\n\n if (!this.objectId) {\n this.objectId = 0;\n }\n\n this.acceptedFileTypesCommaSeparated = this.acceptedFileTypes.join(',');\n\n super.ngOnInit();\n }\n\n filesSelected(event: FileSelectEvent) {\n const file = event.files[0];\n this.existingFileUrl = null;\n\n if (\n this.isFileImageType(file.type) &&\n this.hasImageDimensionConstraints()\n ) {\n this.files = [];\n this.validatorService\n .validateImageDimensions(file, this.imageWidth, this.imageHeight)\n .then((result) => {\n if (result.isValid) {\n this.files = [file];\n this.emitFileSelected(file);\n } else {\n this.messageService.errorMessage(result.errors.join('\\n'));\n }\n });\n } else {\n this.emitFileSelected(file);\n }\n }\n\n private async emitFileSelected(file: File): Promise<void> {\n const formData = new FormData();\n formData.append('file', file, `${this.objectId}-${file.name}`);\n\n let width: number | undefined;\n let height: number | undefined;\n\n if (this.isFileImageType(file.type)) {\n const dimensions = await getImageDimensions(file);\n width = dimensions.width;\n height = dimensions.height;\n }\n\n this.onFileSelected.next(\n new SpiderlyFileSelectEvent({ file, formData, width, height }),\n );\n }\n\n private hasImageDimensionConstraints(): boolean {\n return this.imageWidth > 0 || this.imageHeight > 0;\n }\n\n choose(event, chooseCallback) {\n chooseCallback();\n }\n\n fileRemoved(removeFileCallback, index: number) {\n removeFileCallback(index);\n this.clearFile();\n }\n\n removeExistingFile() {\n this.existingFileUrl = null;\n this.clearFile();\n }\n\n private clearFile() {\n this.control?.setValue(null);\n this.onFileRemoved.next(null);\n }\n\n private setExistingFileUrl(url: string) {\n this.existingFileUrl = url;\n this.existingFileName = url.split('/').pop()?.split('?')[0] ?? '';\n const mimeType = getMimeTypeForFileName(this.existingFileName);\n this.existingFileIsImage = isFileImageType(mimeType);\n }\n\n getFileFromBase64(base64String: string) {\n const [header, base64Content] = base64String.split(';base64,');\n const fileName = header.split('=')[1];\n const mimeType = getMimeTypeForFileName(fileName);\n\n const byteCharacters = atob(base64Content);\n const byteNumbers = new Uint8Array(byteCharacters.length);\n\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n\n const blob = new Blob([byteNumbers], { type: mimeType });\n const file = new File([blob], fileName, { type: mimeType });\n\n return file;\n }\n\n isFileImageType(mimeType: string): boolean {\n return isFileImageType(mimeType);\n }\n\n isExcelFileType(mimeType: string): boolean {\n return isExcelFileType(mimeType);\n }\n}\n\nexport class SpiderlyFileSelectEvent extends BaseEntity {\n file?: File;\n formData?: FormData;\n width?: number;\n height?: number;\n\n constructor({\n file,\n formData,\n width,\n height,\n }: {\n file?: File;\n formData?: FormData;\n width?: number;\n height?: number;\n } = {}) {\n super();\n\n this.file = file;\n this.formData = formData;\n this.width = width;\n this.height = height;\n }\n\n static readonly typeName = 'SpiderlyFileSelectEvent' as const;\n}\n","<ng-container *transloco=\"let t\">\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem; padding: 1px\">\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\n <label>{{ getTranslatedLabel() }}</label>\n <!-- It's okay for this control, because for the custom uploads where we are not initializing the control from the backend, there is no need for formControl. -->\n <required *ngIf=\"control?.required || required\"></required>\n </div>\n\n <p-fileUpload\n [files]=\"files\"\n [disabled]=\"disabled\"\n [name]=\"control?.label ?? label\"\n [multiple]=\"multiple\"\n [accept]=\"acceptedFileTypesCommaSeparated\"\n [maxFileSize]=\"maxFileSize\"\n (onSelect)=\"filesSelected($event)\"\n [class]=\"control?.invalid && control?.dirty ? 'control-error-border' : ''\"\n >\n <ng-template\n pTemplate=\"header\"\n let-files\n let-chooseCallback=\"chooseCallback\"\n let-clearCallback=\"clearCallback\"\n let-uploadCallback=\"uploadCallback\"\n >\n <div\n class=\"flex flex-wrap justify-between items-center flex-1 gap-2\"\n >\n <div class=\"flex gap-2\">\n <spiderly-button\n [disabled]=\"disabled\"\n (onClick)=\"choose($event, chooseCallback)\"\n icon=\"pi pi-upload\"\n [rounded]=\"true\"\n [outlined]=\"true\"\n />\n </div>\n </div>\n </ng-template>\n <ng-template\n pTemplate=\"content\"\n let-files\n let-removeFileCallback=\"removeFileCallback\"\n >\n <div *ngIf=\"existingFileUrl\">\n <div class=\"flex justify-center p-0 gap-8\">\n <div\n class=\"card m-0 px-4 py-4 flex flex-col items-center gap-4\"\n style=\"justify-content: center; overflow: hidden\"\n >\n <div *ngIf=\"existingFileIsImage\" class=\"image-container\">\n <img [src]=\"existingFileUrl\" />\n </div>\n <div *ngIf=\"!existingFileIsImage\">\n <i class=\"pi pi-file\" style=\"margin-right: 4px\"></i>\n <span>{{ existingFileName }}</span>\n </div>\n <spiderly-button\n [disabled]=\"disabled\"\n icon=\"pi pi-times\"\n (onClick)=\"removeExistingFile()\"\n [outlined]=\"true\"\n [rounded]=\"true\"\n severity=\"danger\"\n />\n </div>\n </div>\n </div>\n <div *ngIf=\"!existingFileUrl && files.length > 0\">\n <div class=\"flex justify-center p-0 gap-8\">\n <div\n *ngFor=\"let file of files; let index = index\"\n class=\"card m-0 px-4 py-4 flex flex-col items-center gap-4\"\n style=\"justify-content: center; overflow: hidden\"\n >\n <div *ngIf=\"isFileImageType(file.type)\" class=\"image-container\">\n <img role=\"presentation\" [src]=\"file.objectURL\" />\n </div>\n <div *ngIf=\"isExcelFileType(file.type)\" class=\"excel-container\">\n <div class=\"excel-details\">\n <i\n class=\"pi pi-file-excel\"\n style=\"color: green; margin-right: 4px\"\n ></i>\n <span class=\"file-name\">{{ file.name }}</span>\n </div>\n </div>\n <spiderly-button\n [disabled]=\"disabled\"\n icon=\"pi pi-times\"\n (onClick)=\"fileRemoved(removeFileCallback, index)\"\n [outlined]=\"true\"\n [rounded]=\"true\"\n severity=\"danger\"\n />\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"file\"> </ng-template>\n <ng-template pTemplate=\"empty\">\n <div *ngIf=\"!existingFileUrl\" class=\"flex items-center justify-center flex-col\">\n <i\n class=\"pi pi-cloud-upload border-2 rounded-full p-8 text-8xl text-gray-400 border-gray-400 mt-4\"\n ></i>\n <p class=\"mt-6 mb-0\">{{ t(\"DragAndDropFilesHereToUpload\") }}</p>\n </div>\n </ng-template>\n </p-fileUpload>\n </div>\n</ng-container>\n","import { Component, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { getParentUrl } from '../../../services/helper-functions';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { ButtonModule } from 'primeng/button';\nimport { SpiderlyButtonComponent } from '../spiderly-button/spiderly-button.component';\n\n@Component({\n selector: 'return-button',\n templateUrl: './return-button.component.html',\n styles: [],\n imports: [\n CommonModule,\n ButtonModule,\n SpiderlyButtonComponent,\n TranslocoDirective,\n ],\n})\nexport class SpiderlyReturnButtonComponent {\n @Input() navigateUrl: string;\n\n constructor(private router: Router) {}\n\n onReturn() {\n if (this.navigateUrl == undefined) {\n const currentUrl = this.router.url;\n const parentUrl: string = getParentUrl(currentUrl);\n this.router.navigateByUrl(parentUrl);\n } else {\n this.router.navigate([this.navigateUrl]);\n }\n }\n}\n","<ng-container *transloco=\"let t\">\n <spiderly-button\n (onClick)=\"onReturn()\"\n [label]=\"t('Return')\"\n icon=\"pi pi-undo\"\n [outlined]=\"true\"\n ></spiderly-button>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { SpiderlyMultiAutocompleteComponent } from './spiderly-multiautocomplete/spiderly-multiautocomplete.component';\nimport { SpiderlyPasswordComponent } from './spiderly-password/spiderly-password.component';\nimport { SpiderlyTextboxComponent } from './spiderly-textbox/spiderly-textbox.component';\nimport { SpiderlyCheckboxComponent } from './spiderly-checkbox/spiderly-checkbox.component';\nimport { SpiderlyMultiSelectComponent } from './spiderly-multiselect/spiderly-multiselect.component';\nimport { SpiderlyTextareaComponent } from './spiderly-textarea/spiderly-textarea.component';\nimport { SpiderlyNumberComponent } from './spiderly-number/spiderly-number.component';\nimport { SpiderlyDropdownComponent } from './spiderly-dropdown/spiderly-dropdown.component';\nimport { SpiderlyEditorComponent } from './spiderly-editor/spiderly-editor.component';\nimport { SpiderlyMarkdownComponent } from './spiderly-markdown/spiderly-markdown.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 SpiderlyMarkdownComponent,\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 SpiderlyMarkdownComponent,\n SpiderlyColorPickerComponent,\n SpiderlyFileComponent,\n ],\n declarations: [],\n providers: [],\n})\nexport class SpiderlyControlsModule {}\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 { 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 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 { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n AuthResult,\n AuthResultWithCookies,\n ExternalProviderPublic,\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 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 getExternalProviders = (): Observable<ExternalProviderPublic[]> => {\n return this.http.get<ExternalProviderPublic[]>(\n `${this.config.apiUrl}/Security/GetExternalProviders`,\n this.config.httpSkipSpinnerOptions,\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 // POST, not GET: refresh rotates the single-use token (a state mutation), and a cacheable GET let\n // browsers replay a stale logged-in response on back/forward navigation (phantom dashboard after logout).\n return this.http.post<AuthResultWithCookies>(\n `${this.config.apiUrl}/Security/RefreshTokenWithCookies?browserId=${browserId}`,\n null,\n );\n };\n\n //#endregion\n\n //#region User\n\n getCurrentUserBase = (): Observable<UserBase> => {\n return this.http.get<UserBase>(\n `${this.config.apiUrl}/Security/GetCurrentUserBase`,\n this.config.httpSkipSpinnerOptions,\n );\n };\n\n getCurrentUserPermissionCodes = (): Observable<string[]> => {\n return this.http.get<string[]>(\n `${this.config.apiUrl}/Security/GetCurrentUserPermissionCodes`,\n this.config.httpSkipSpinnerOptions,\n );\n };\n\n //#endregion\n}\n","import { Inject, Injectable, OnDestroy, PLATFORM_ID } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, Observable, of, Subscription } from 'rxjs';\nimport { catchError, delay, filter, finalize, map, tap } from 'rxjs/operators';\nimport {\n AuthResultWithCookies,\n Login,\n VerificationTokenRequest,\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/**\n * Cookie-based session auth. The access/refresh JWTs live in HttpOnly cookies set by the backend\n * (so JS never holds them — XSS can't exfiltrate them); requests are authenticated via\n * `withCredentials` (see jwtInterceptor). The readable result only carries userId/email/expiry.\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 private accessTokenExpiresAt?: Date;\n\n // External-login error code captured from the bootstrap URL (?externalAuthError=expired|failed) set by the\n // backend's OAuth callback on failure. Captured before routing can strip it, surfaced once by the login page.\n externalAuthErrorCode: string | null = null;\n\n protected _currentUserPermissionCodes = new BehaviorSubject<string[] | null>(\n undefined,\n );\n // The subject seeds with `undefined` (not yet loaded) and emits `null` on logout. Consumers only ever care\n // about a real code list, so filter both out here — subscribers get a clean `string[]`, and `firstValueFrom`\n // waits for the first loaded value instead of grabbing the `undefined` seed in a load race.\n currentUserPermissionCodes$: Observable<string[]> =\n this._currentUserPermissionCodes\n .asObservable()\n .pipe(filter((codes): codes is string[] => codes != null));\n\n protected _user = new BehaviorSubject<UserBase | null>(undefined);\n user$ = this._user.asObservable();\n\n constructor(\n protected router: Router,\n protected http: HttpClient,\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\n // Cross-tab sync. We store only marker values here (never tokens — those are HttpOnly cookies).\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 this._currentUserPermissionCodes.next(null);\n }\n if (event.key === 'login-event') {\n this.refreshToken().subscribe();\n }\n }\n };\n\n sendLoginVerificationEmail(body: Login): Observable<any> {\n body.browserId = this.getBrowserId();\n return this.apiService.sendLoginVerificationEmail(body);\n }\n\n login(body: VerificationTokenRequest): Observable<AuthResultWithCookies> {\n body.browserId = this.getBrowserId();\n return this.apiService.loginWithCookies(body).pipe(\n map((result: AuthResultWithCookies) => {\n this.handleAuthResult(result);\n return result;\n }),\n );\n }\n\n // Establishes the in-memory session from a cookie auth result (login or refresh). No tokens are stored\n // in JS — only the user identity + the access-token expiry the backend reports (to schedule refresh).\n handleAuthResult(result: AuthResultWithCookies) {\n this._user.next({\n id: result.userId,\n email: result.email,\n });\n this.accessTokenExpiresAt = result.accessTokenExpiresAt\n ? new Date(result.accessTokenExpiresAt)\n : undefined;\n localStorage.setItem('login-event', 'login' + Math.random());\n this.startTokenTimer();\n this.setCurrentUserPermissionCodes().subscribe();\n }\n\n logout() {\n const browserId = this.getBrowserId();\n this.apiService\n .logoutWithCookies(browserId)\n .pipe(\n finalize(() => {\n this._user.next(null);\n localStorage.setItem('logout-event', 'logout' + Math.random());\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 // Clears in-memory session state without calling the backend — used when a request comes back 401\n // (the backend has already cleared the auth cookies in that case).\n clearSession() {\n this.stopTokenTimer();\n this._user.next(null);\n this._currentUserPermissionCodes.next(null);\n localStorage.setItem('logout-event', 'logout' + Math.random());\n }\n\n // Called on app init and by the proactive timer. The refresh token is an HttpOnly cookie; a 401 (\"no valid\n // session\" — not logged in / expired) propagates from the interceptor and is handled by catchError below,\n // resolving the session to anonymous (null). map runs only for a real result, so _user is never partial.\n refreshToken(): Observable<AuthResultWithCookies | null> {\n const browserId = this.getBrowserId();\n return this.apiService.refreshTokenWithCookies(browserId).pipe(\n map((result: AuthResultWithCookies) => {\n if (result) {\n // A re-established session makes any pending external-login error moot — drop it so it can't\n // surface as a stale toast on a later /login visit (e.g. after a subsequent logout).\n this.externalAuthErrorCode = null;\n this._user.next({ id: result.userId, email: result.email });\n this.accessTokenExpiresAt = result.accessTokenExpiresAt\n ? new Date(result.accessTokenExpiresAt)\n : undefined;\n this.startTokenTimer();\n this.onAfterRefreshToken();\n }\n return result;\n }),\n catchError(() => {\n this._user.next(null);\n return of(null);\n }),\n );\n }\n\n onAfterRefreshToken = () => {\n this.setCurrentUserPermissionCodes().subscribe(); // after the session is re-established\n };\n\n // Reads ?externalAuthError= from the bootstrap URL (set by the backend OAuth callback on failure) and\n // strips it so a manual refresh won't re-trigger the message. Called from the app initializer, before the\n // router runs — otherwise an unauthenticated landing on \"/\" redirects to /login and drops the param.\n captureExternalAuthError() {\n if (isPlatformBrowser(this.platformId) === false) {\n return;\n }\n const params = new URLSearchParams(window.location.search);\n const code = params.get('externalAuthError');\n if (!code) {\n return;\n }\n this.externalAuthErrorCode = code;\n params.delete('externalAuthError');\n const query = params.toString();\n history.replaceState(\n history.state,\n '',\n window.location.pathname + (query ? `?${query}` : '') + window.location.hash,\n );\n }\n\n getBrowserId(): string {\n let browserId = localStorage.getItem(this.config.browserIdKey); // not a token — a stable per-browser id\n if (!browserId) {\n browserId = crypto.randomUUID();\n localStorage.setItem(this.config.browserIdKey, browserId);\n }\n return browserId;\n }\n\n private getTokenRemainingTime(): number {\n if (!this.accessTokenExpiresAt) {\n return 0;\n }\n return this.accessTokenExpiresAt.getTime() - Date.now();\n }\n\n private startTokenTimer() {\n const timeout = this.getTokenRemainingTime();\n if (timeout <= 0) {\n return;\n }\n this.stopTokenTimer();\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, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\n\n@Component({\n selector: 'spiderly-auth-card',\n templateUrl: './auth-card.component.html',\n imports: [CommonModule],\n})\nexport class AuthCardComponent implements OnInit, OnDestroy {\n private companyDetailsSubscription: Subscription | null = null;\n\n companyName: string;\n image: string;\n\n constructor(private authService: AuthServiceBase) {}\n\n ngOnInit() {\n this.companyDetailsSubscription = this.authService\n .initCompanyAuthDialogDetails()\n .subscribe((details) => {\n if (details != null) {\n this.image = details.image;\n this.companyName = details.companyName;\n }\n });\n }\n\n ngOnDestroy(): void {\n this.companyDetailsSubscription?.unsubscribe();\n }\n}\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 class=\"surface-card py-12 px-8 sm:px-12\" style=\"border-radius: 45px\">\n <div class=\"flex justify-center\" style=\"margin-bottom: 38px\">\n <ng-content select=\"[auth-logo]\">\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 </ng-content>\n </div>\n\n <ng-content></ng-content>\n\n <ng-content select=\"[auth-footer]\"></ng-content>\n </div>\n </div>\n </div>\n</div>\n","const GOOGLE_G_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" width=\"18\" height=\"18\"><path fill=\"#EA4335\" d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"/><path fill=\"#4285F4\" d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"/><path fill=\"#FBBC05\" d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.55 10.78l7.98-6.19z\"/><path fill=\"#34A853\" d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"/></svg>`;\n\n/**\n * Built-in default icons for external auth providers, keyed by provider code.\n * Values are inline data URIs — no network request, CSP entry, or asset wiring,\n * and they render offline. Consumers override per code via the `providerIcons`\n * input on ExternalLoginComponent / SpiderlyLoginComponent.\n */\nexport const DEFAULT_EXTERNAL_PROVIDER_ICONS: Record<string, string> = {\n google: `data:image/svg+xml,${encodeURIComponent(GOOGLE_G_SVG)}`,\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { ApiSecurityService } from '../../../services/api.service.security';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\nimport { ExternalProviderPublic } from '../../../entities/security-entities';\nimport { SpiderlyButtonComponent } from '../../spiderly-buttons/spiderly-button/spiderly-button.component';\nimport { DEFAULT_EXTERNAL_PROVIDER_ICONS } from '../external-provider-icons';\n\n@Component({\n selector: 'spiderly-external-login',\n templateUrl: './external-login.component.html',\n imports: [CommonModule, TranslocoDirective, SpiderlyButtonComponent],\n})\nexport class ExternalLoginComponent implements OnInit {\n /** Per-code icon overrides; unset codes fall back to DEFAULT_EXTERNAL_PROVIDER_ICONS. */\n @Input() providerIcons: Record<string, string> = {};\n\n // Config-driven: populated from Security/GetExternalProviders (backend is the single source of truth for which providers are enabled).\n externalProviders: ExternalProviderPublic[] = [];\n\n constructor(\n private config: ConfigServiceBase,\n private authService: AuthServiceBase,\n private apiService: ApiSecurityService,\n ) {}\n\n ngOnInit() {\n this.apiService.getExternalProviders().subscribe({\n next: (providers) => {\n this.externalProviders = providers ?? [];\n },\n // The global unauthorized interceptor already surfaces the HTTP error to the user; here we just\n // leave the provider buttons hidden instead of letting the error reach the global error handler.\n error: () => {\n this.externalProviders = [];\n },\n });\n }\n\n iconFor(code: string): string | undefined {\n return this.providerIcons[code] ?? DEFAULT_EXTERNAL_PROVIDER_ICONS[code];\n }\n\n loginWithExternalProvider(code: string) {\n // Server-side flow (B2): hand off to the backend challenge endpoint. The backend runs the OAuth\n // dance, sets the session cookies, and redirects back to returnUrl.\n const returnUrl = this.config.frontendUrl;\n const browserId = this.authService.getBrowserId();\n window.location.href =\n `${this.config.apiUrl}/Security/ExternalLoginChallenge` +\n `?provider=${encodeURIComponent(code)}` +\n `&returnUrl=${encodeURIComponent(returnUrl)}` +\n `&browserId=${encodeURIComponent(browserId)}`;\n }\n}\n","<ng-container *transloco=\"let t\">\n <div *ngIf=\"externalProviders.length > 0\">\n <div\n style=\"display: flex; align-items: center; gap: 7px; justify-content: center; margin-bottom: 16px;\"\n >\n <div class=\"separator\"></div>\n <div>{{ t(\"or\") }}</div>\n <div class=\"separator\"></div>\n </div>\n <div style=\"display: flex; flex-direction: column; gap: 10px\">\n <spiderly-button\n *ngFor=\"let provider of externalProviders\"\n (onClick)=\"loginWithExternalProvider(provider.code)\"\n [label]=\"provider.label || (provider.code | titlecase)\"\n [iconUrl]=\"iconFor(provider.code)\"\n [outlined]=\"true\"\n styleClass=\"w-full\"\n ></spiderly-button>\n </div>\n </div>\n</ng-container>\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 provider?: string;\n idToken?: string;\n browserId?: string;\n\n constructor({\n provider,\n idToken,\n browserId,\n }: {\n provider?: string;\n idToken?: string;\n browserId?: string;\n } = {}) {\n super();\n\n this.provider = provider;\n this.idToken = idToken;\n this.browserId = browserId;\n }\n\n static readonly schema = {\n provider: {\n type: 'string',\n },\n idToken: {\n type: 'string',\n },\n browserId: {\n type: 'string',\n },\n } as const;\n}\n\nexport class ExternalProviderPublic extends BaseEntity {\n static readonly typeName = 'ExternalProviderPublic' as const;\n\n code?: string;\n authority?: string;\n clientId?: string;\n label?: string;\n\n constructor({\n code,\n authority,\n clientId,\n label,\n }: {\n code?: string;\n authority?: string;\n clientId?: string;\n label?: string;\n } = {}) {\n super();\n\n this.code = code;\n this.authority = authority;\n this.clientId = clientId;\n this.label = label;\n }\n\n static readonly schema = {\n code: {\n type: 'string',\n },\n authority: {\n type: 'string',\n },\n clientId: {\n type: 'string',\n },\n label: {\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, 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 /** Whether the title is rendered in the large style. */\n @Input() showBigTitle: boolean;\n /** Whether the header icon is shown. Defaults to `true`. */\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 /** Whether the CRUD context-menu icon is shown. Defaults to `true`. */\n @Input() showCrudMenu: boolean = true;\n /** Whether a remove/delete icon is shown. Defaults to `false`. */\n @Input() showRemoveIcon: boolean = false;\n @Input() index: number;\n /** Whether the panel header is rendered. Defaults to `true`. */\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 <!--\n PrimeNG's InputOtp calls event.preventDefault() on the Enter keydown\n (Enter is a non-digit while integerOnly is on, and once all tokens are\n filled it blocks every key but Delete), which kills the browser's\n implicit submit via the type=\"submit\" button. Wire Enter straight to\n codeSubmit() so \"paste the code + Enter\" still submits. preventDefault\n doesn't stop propagation, so this bubbled keydown listener still fires.\n -->\n <p-inputOtp\n [formControl]=\"verificationTokenRequestFormGroup.getControl('verificationCode')\"\n [length]=\"6\"\n [integerOnly]=\"true\"\n [autofocus]=\"true\"\n (keydown.enter)=\"codeSubmit()\"\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 Input,\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 { SpiderlyMessageService } from '../../../services/spiderly-message.service';\nimport { BaseFormComponent } from '../../base-form/base-form.component';\nimport { SpiderlyFormGroup } from '../../spiderly-form-control/spiderly-form-control';\nimport { AuthCardComponent } from '../auth-card/auth-card.component';\nimport { ExternalLoginComponent } from '../external-login/external-login.component';\nimport { LoginVerificationComponent } from '../partials/login-verification.component';\n\n@Component({\n selector: 'spiderly-login',\n templateUrl: './login.component.html',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n AuthCardComponent,\n ExternalLoginComponent,\n SpiderlyControlsModule,\n LoginVerificationComponent,\n TranslocoDirective,\n ],\n})\nexport class SpiderlyLoginComponent extends BaseFormComponent implements OnInit {\n loginFormGroup = new SpiderlyFormGroup<Login>({});\n showEmailSentDialog: boolean = false;\n\n /** Per-code provider icon overrides, forwarded to <spiderly-external-login>. */\n @Input() providerIcons: Record<string, string> = {};\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 ) {\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 this.showExternalAuthErrorIfPresent();\n }\n\n // Surface a friendly message when the server-side external login bounced back with an error (captured from\n // the URL at bootstrap by AuthServiceBase). \"expired\" = the user lingered on the provider's account picker.\n private showExternalAuthErrorIfPresent() {\n const code = this.authService.externalAuthErrorCode;\n if (!code) {\n return;\n }\n this.authService.externalAuthErrorCode = null; // show once\n const messageKey =\n code === 'expired' ? 'ExternalLoginExpiredDetails' : 'ExternalLoginFailedDetails';\n this.messageService.warningMessage(this.translocoService.translate(messageKey));\n }\n\n initLoginFormGroup(model: Login) {\n this.baseFormService.initFormGroup(this.loginFormGroup, Login, model, [\n 'email',\n ]);\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 <spiderly-auth-card>\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\n <spiderly-external-login\n [providerIcons]=\"providerIcons\"\n ></spiderly-external-login>\n </spiderly-auth-card>\n } @else {\n <login-verification\n [email]=\"loginFormGroup.controls.email.getRawValue()\"\n ></login-verification>\n }\n\n <!--\n General projection slot for consumer-supplied login extras (a bot-challenge widget, a notice,\n an extra field, …). Rendered in BOTH the email-entry and code-verification states — outside the\n showEmailSentDialog toggle — so projected content survives the email → resend flow (e.g. a\n single-use challenge widget that must stay mounted to issue a fresh token on resend).\n Project with the `loginExtra` attribute: <spiderly-login><my-widget loginExtra/></spiderly-login>.\n -->\n <ng-content select=\"[loginExtra]\"></ng-content>\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 /** Whether a remove/delete icon is shown. */\n @Input() showRemoveIcon: boolean;\n /** Whether the CRUD context-menu icon is shown. Defaults to `true`. */\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 /** Whether the small icon variant is shown. Defaults to `true`. */\n @Input() showSmallIcon = true;\n @Input() icon = 'pi pi-info-circle';\n @Input() textColor = '';\n\n constructor(protected formBuilder: FormBuilder) {}\n\n ngOnInit() {}\n}\n","<div class=\"card responsive-card-padding info-card\">\n <div class=\"info-card__content\">\n <div>\n <div class=\"info-card__header\">\n <i *ngIf=\"showSmallIcon\" class=\"{{ icon }} info-card__icon\"></i>\n {{ header }}\n </div>\n <div class=\"info-card__body\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"info-card__background-icon\">\n <i class=\"{{ icon }}\"></i>\n </div>\n</div>\n","import { BaseEntity } from './base-entity';\nimport { UserBase } from './security-entities';\n\nexport class InitTopBarData extends BaseEntity {\n companyName?: string;\n userProfilePath?: string;\n showProfileIcon?: boolean;\n currentUser?: UserBase;\n\n constructor({\n companyName,\n userProfilePath,\n showProfileIcon,\n currentUser,\n }: {\n companyName?: string;\n userProfilePath?: string;\n showProfileIcon?: boolean;\n currentUser?: UserBase;\n } = {}) {\n super();\n\n this.companyName = companyName;\n this.userProfilePath = userProfilePath;\n this.showProfileIcon = showProfileIcon;\n this.currentUser = currentUser;\n }\n\n static readonly typeName = 'InitTopBarData' as const;\n}\n","/** Parses a JSON entry from web storage; missing or corrupted entries read as null. */\nexport function readStoredJson(storage: Storage, key: string): any {\n try {\n return JSON.parse(storage.getItem(key) ?? 'null');\n } catch {\n return null;\n }\n}\n\n/** Writes a value to web storage as JSON; the counterpart of readStoredJson. */\nexport function writeStoredJson(storage: Storage, key: string, value: any): void {\n storage.setItem(key, JSON.stringify(value));\n}\n","import { AuthServiceBase } from './auth.service.base';\nimport { ApiSecurityService } from './api.service.security';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport {\n map,\n Observable,\n of,\n Subject,\n Subscription,\n} from 'rxjs';\nimport { InitTopBarData } from '../entities/init-top-bar-data';\nimport { ConfigServiceBase } from './config.service.base';\nimport { readStoredJson, writeStoredJson } from './web-storage';\nimport { AutoCompleteCompleteEvent } from 'primeng/autocomplete';\nimport { Namebook } from '../entities/namebook';\n\nexport interface AppConfig {\n inputStyle: string;\n colorScheme: string;\n ripple: boolean;\n menuMode: string;\n}\n\ninterface LayoutState {\n staticMenuDesktopInactive: boolean;\n overlayMenuActive: boolean;\n profileSidebarVisible: boolean;\n profileDropdownSidebarVisible: boolean;\n staticMenuMobileActive: boolean;\n menuHoverActive: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LayoutServiceBase implements OnDestroy {\n /**\n * Only the desktop collapse persists across reloads (a durable preference,\n * like the data table's column layout); the rest of LayoutState is\n * deliberately transient.\n */\n private static readonly menuDesktopInactiveKey =\n 'spiderly-layout:menu-desktop-inactive';\n\n userSubscription: Subscription;\n\n layoutConfig: AppConfig = {\n ripple: false,\n inputStyle: 'outlined',\n menuMode: 'static',\n colorScheme: 'light',\n };\n\n state: LayoutState = {\n staticMenuDesktopInactive:\n readStoredJson(localStorage, LayoutServiceBase.menuDesktopInactiveKey) ===\n true,\n overlayMenuActive: false,\n profileSidebarVisible: false,\n profileDropdownSidebarVisible: false,\n staticMenuMobileActive: false,\n menuHoverActive: false,\n };\n\n private overlayOpen = new Subject<any>();\n\n overlayOpen$ = this.overlayOpen.asObservable();\n\n constructor(\n protected apiService: ApiSecurityService,\n protected config: ConfigServiceBase,\n protected authService: AuthServiceBase,\n ) {}\n\n onMenuToggle() {\n if (this.isOverlay()) {\n this.state.overlayMenuActive = !this.state.overlayMenuActive;\n if (this.state.overlayMenuActive) {\n this.overlayOpen.next(null);\n }\n }\n\n if (this.isDesktop()) {\n this.state.staticMenuDesktopInactive =\n !this.state.staticMenuDesktopInactive;\n writeStoredJson(\n localStorage,\n LayoutServiceBase.menuDesktopInactiveKey,\n this.state.staticMenuDesktopInactive,\n );\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 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 //#region Top Bar\n\n initTopBarData = (): Observable<InitTopBarData> => {\n return this.authService.user$.pipe(\n map((currentUser) => {\n return new InitTopBarData({\n companyName: this.config.companyName,\n userProfilePath: `/administration/users/${currentUser?.id}`,\n showProfileIcon: true,\n currentUser: currentUser,\n });\n }),\n );\n };\n\n //#endregion\n\n //#region Side Bar\n\n searchPartners = (\n event: AutoCompleteCompleteEvent,\n ): Observable<Namebook[]> => {\n return of();\n };\n\n partnersAutocompleteButtonClick = (selectedPartner: Namebook) => {};\n\n //#endregion\n\n ngOnDestroy(): void {\n if (this.userSubscription) {\n this.userSubscription.unsubscribe();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { MenuChangeEvent } from '../../../entities/menuchangeevent';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SidebarMenuService {\n private menuSource = new Subject<MenuChangeEvent>();\n private resetSource = new Subject();\n\n menuSource$ = this.menuSource.asObservable();\n resetSource$ = this.resetSource.asObservable();\n\n onMenuStateChange(event: MenuChangeEvent) {\n this.menuSource.next(event);\n }\n\n reset() {\n this.resetSource.next(true);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { SidebarMenuService } from './sidebar-menu.service';\nimport { SpiderlyMenuItem } from './sidebar-menu.component';\nimport { AutoCompleteCompleteEvent } from 'primeng/autocomplete';\nimport { SpiderlyFormControl } from '../../spiderly-form-control/spiderly-form-control';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { ApiSecurityService } from '../../../services/api.service.security';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\nimport { CommonModule } from '@angular/common';\nimport { SpiderlyControlsModule } from '../../../controls/spiderly-controls.module';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Namebook } from '../../../entities/namebook';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[menuitem]',\n templateUrl: './menuitem.component.html',\n animations: [\n trigger('children', [\n state(\n 'collapsed',\n style({\n height: '0',\n }),\n ),\n state(\n 'expanded',\n style({\n height: '*',\n }),\n ),\n transition(\n 'collapsed <=> expanded',\n animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'),\n ),\n ]),\n ],\n imports: [\n CommonModule,\n RouterModule,\n TranslocoDirective,\n SpiderlyControlsModule,\n ],\n})\nexport class MenuitemComponent implements OnInit, OnDestroy {\n @Input() item: SpiderlyMenuItem;\n\n @Input() index!: number;\n\n @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\n\n @Input() parentKey!: string;\n\n active = false;\n\n private menuSourceSubscription: Subscription;\n\n private menuResetSubscription: Subscription;\n\n private permissionSubscription: Subscription | null = null;\n\n key: string = '';\n\n selectedPartner = new SpiderlyFormControl<Namebook>(null, {\n updateOn: 'change',\n });\n\n partnerOptions: Namebook[];\n\n constructor(\n public layoutService: LayoutServiceBase,\n private cd: ChangeDetectorRef,\n public router: Router,\n private menuService: SidebarMenuService,\n private authService: AuthServiceBase,\n private apiService: ApiSecurityService,\n private config: ConfigServiceBase,\n ) {\n this.menuSourceSubscription = this.menuService.menuSource$.subscribe(\n (value) => {\n Promise.resolve(null).then(() => {\n if (value.routeEvent) {\n this.active =\n value.key === this.key || value.key.startsWith(this.key + '-')\n ? true\n : false;\n } else {\n if (\n value.key !== this.key &&\n !value.key.startsWith(this.key + '-')\n ) {\n this.active = false;\n }\n }\n });\n },\n );\n\n this.menuResetSubscription = this.menuService.resetSource$.subscribe(() => {\n this.active = false;\n });\n\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((params) => {\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n });\n }\n\n ngOnInit() {\n this.item.visible = this.item.visible ?? true;\n\n this.key = this.parentKey\n ? this.parentKey + '-' + this.index\n : String(this.index);\n\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n\n this.permissionSubscription =\n this.authService.currentUserPermissionCodes$.subscribe(\n (currentUserPermissionCodes: string[]) => {\n if (this.item && typeof this.item.hasPermission === 'function') {\n this.item.visible = this.item.hasPermission(\n currentUserPermissionCodes,\n );\n }\n },\n );\n }\n\n updateActiveStateFromRoute() {\n let activeRoute = this.router.isActive(this.item.routerLink[0], {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored',\n });\n\n if (activeRoute) {\n this.menuService.onMenuStateChange({ key: this.key, routeEvent: true });\n }\n }\n\n itemClick(event: Event) {\n // avoid processing disabled items\n if (this.item.disabled || event === null) {\n event.preventDefault();\n return;\n }\n\n // execute command\n if (this.item.command) {\n this.item.command({ originalEvent: event, item: this.item });\n }\n\n // toggle active state\n if (this.item.items) {\n this.active = !this.active;\n }\n\n this.menuService.onMenuStateChange({ key: this.key });\n }\n\n get submenuAnimation() {\n return this.root ? 'expanded' : this.active ? 'expanded' : 'collapsed';\n }\n\n @HostBinding('class.active-menuitem')\n get activeClass() {\n return this.active && !this.root;\n }\n\n //#region HACK: Partner\n\n searchPartners(event: AutoCompleteCompleteEvent) {\n this.layoutService.searchPartners(event).subscribe((po) => {\n this.partnerOptions = po;\n });\n }\n\n partnersAutocompleteButtonClick = async () => {\n this.layoutService.partnersAutocompleteButtonClick(\n this.selectedPartner.value,\n );\n };\n\n //#endregion\n\n ngOnDestroy() {\n if (this.menuSourceSubscription) {\n this.menuSourceSubscription.unsubscribe();\n }\n\n if (this.menuResetSubscription) {\n this.menuResetSubscription.unsubscribe();\n }\n\n if (this.permissionSubscription) {\n this.permissionSubscription.unsubscribe();\n }\n }\n}\n","<ng-container *transloco=\"let t\">\n <div *ngIf=\"root && item.visible === true\" class=\"layout-menuitem-root-text\">\n {{ item.label }}\n </div>\n <a\n *ngIf=\"(!item.routerLink || item.items) && item.visible === true\"\n [attr.href]=\"item.url\"\n (click)=\"itemClick($event)\"\n [ngClass]=\"item.styleClass\"\n [attr.target]=\"item.target\"\n tabindex=\"0\"\n pRipple\n >\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n <i\n class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"\n *ngIf=\"item.items\"\n ></i>\n </a>\n <a\n *ngIf=\"item.routerLink && !item.items && item.visible === true\"\n (click)=\"itemClick($event)\"\n [ngClass]=\"item.styleClass\"\n [routerLink]=\"item.routerLink\"\n routerLinkActive=\"active-route\"\n [routerLinkActiveOptions]=\"\n item.routerLinkActiveOptions || {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored',\n }\n \"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [queryParams]=\"item.queryParams\"\n [attr.target]=\"item.target\"\n tabindex=\"0\"\n pRipple\n >\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n <i\n class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"\n *ngIf=\"item.items\"\n ></i>\n </a>\n\n <ul\n *ngIf=\"item.items && item.visible === true\"\n [@children]=\"submenuAnimation\"\n >\n <ng-template ngFor let-child let-i=\"index\" [ngForOf]=\"item.items\">\n <li\n menuitem\n [item]=\"child\"\n [index]=\"i\"\n [parentKey]=\"key\"\n [class]=\"child.badgeStyleClass\"\n ></li>\n </ng-template>\n </ul>\n\n <!-- Delete this in the future iterations, make link to partner in /partners page -->\n <spiderly-autocomplete\n *ngIf=\"item.showPartnerDialog\"\n [control]=\"selectedPartner\"\n [options]=\"partnerOptions\"\n (onTextInput)=\"searchPartners($event)\"\n label=\"\"\n [placeholder]=\"t('SelectThePartner')\"\n [showAddon]=\"true\"\n (onButtonClick)=\"partnersAutocompleteButtonClick()\"\n addonIcon=\"pi pi-check\"\n [emptyMessage]=\"t('LeftCornerPartnersEmptyMessage')\"\n class=\"mobile-stay-open\"\n ></spiderly-autocomplete>\n</ng-container>\n","import { TranslocoService } from '@jsverse/transloco';\nimport { Input, OnInit } from '@angular/core';\nimport { Component } from '@angular/core';\nimport { MenuItem } from 'primeng/api';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\nimport { MenuitemComponent } from './menuitem.component';\nimport { CommonModule } from '@angular/common';\n\nexport interface SpiderlyMenuItem extends MenuItem {\n hasPermission?: (permissionCodes: string[]) => boolean;\n showPartnerDialog?: boolean;\n}\n\n@Component({\n selector: 'sidebar-menu', // FT: Don't change selector to 'menu', because other style will apply to it\n templateUrl: './sidebar-menu.component.html',\n imports: [CommonModule, MenuitemComponent],\n})\nexport class SidebarMenuComponent implements OnInit {\n @Input() menu: SpiderlyMenuItem[];\n\n constructor(\n public layoutService: LayoutServiceBase,\n private authService: AuthServiceBase,\n private translocoService: TranslocoService,\n private config: ConfigServiceBase,\n ) {}\n\n ngOnInit() {}\n\n ngOnDestroy(): void {}\n}\n","<ul class=\"layout-menu\">\n <ng-container *ngFor=\"let item of menu; let i = index\">\n <li\n menuitem\n *ngIf=\"!item.separator\"\n [item]=\"item\"\n [index]=\"i\"\n [root]=\"true\"\n ></li>\n <li\n *ngIf=\"item.separator\"\n class=\"gray-separator\"\n style=\"margin-top: 11px\"\n ></li>\n </ng-container>\n</ul>\n","import { Component, ElementRef, Input } from '@angular/core';\nimport {\n SidebarMenuComponent,\n SpiderlyMenuItem,\n} from './sidebar-menu.component';\n\n@Component({\n selector: 'sidebar',\n templateUrl: './sidebar.component.html',\n imports: [SidebarMenuComponent],\n})\nexport class AppSidebarComponent {\n @Input() menu: SpiderlyMenuItem[];\n\n constructor(public el: ElementRef) {}\n\n ngOnInit() {}\n}\n","<sidebar-menu [menu]=\"menu\"></sidebar-menu>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { AvatarModule } from 'primeng/avatar';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { UserBase } from '../../../entities/security-entities';\nimport { filter, Subscription } from 'rxjs';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { SpiderlyButtonComponent } from '../../spiderly-buttons/spiderly-button/spiderly-button.component';\nimport { ConfigServiceBase } from '../../../services/config.service.base';\n\n@Component({\n selector: 'spiderly-profile-avatar',\n templateUrl: './profile-avatar.component.html',\n styleUrl: './profile-avatar.component.scss',\n imports: [\n CommonModule,\n RouterModule,\n AvatarModule,\n SpiderlyButtonComponent,\n TranslocoDirective,\n ],\n})\nexport class ProfileAvatarComponent {\n @Input() isSideMenuLayout = true;\n @Input() routeOnLargeProfileAvatarClick = true;\n /** Whether the login button is shown when no user is signed in. Defaults to `true`. */\n @Input() showLoginButton = true;\n @Input() routeToLoginPage = true;\n @Input() loginButtonOutlined = false;\n @Input() loginButtonSeverity:\n | 'success'\n | 'info'\n | 'warn'\n | 'danger'\n | 'help'\n | 'primary'\n | 'secondary'\n | 'contrast'\n | null\n | undefined = 'primary';\n @Input() loginButtonSize: 'small' | 'large' | undefined;\n @Output() onLoginButtonClick = new EventEmitter();\n @Input() menuItems: ProfileAvatarModalMenuItem[] = [];\n\n private initTopBarSubscription: Subscription | null = null;\n\n currentUser: UserBase;\n userProfilePath: string;\n avatarLabel: string;\n showProfileIcon = false;\n\n @ViewChild('topbarmenu') menu!: ElementRef;\n\n @ViewChild('topbarprofiledropdownmenubutton')\n topbarProfileDropdownMenuButton!: ElementRef;\n\n constructor(\n public layoutService: LayoutServiceBase,\n private authService: AuthServiceBase,\n protected router: Router,\n private translocoService: TranslocoService,\n public config: ConfigServiceBase,\n ) {}\n\n async ngOnInit() {\n if (this.menuItems.length === 0) {\n this.menuItems = [\n {\n label: this.translocoService.translate('YourProfile'),\n icon: 'pi-user',\n showSeparator: true,\n onClick: () => {\n this.routeToUserPage();\n },\n },\n {\n label: this.translocoService.translate('Logout'),\n icon: 'pi-sign-out',\n showSeparator: true,\n onClick: () => {\n this.authService.logout();\n },\n },\n ];\n }\n\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n this.layoutService.state.profileDropdownSidebarVisible = false;\n });\n\n this.onAfterNgOnInit();\n }\n\n onAfterNgOnInit = () => {\n this.initTopBarSubscription = this.layoutService\n .initTopBarData()\n .subscribe((initTopBarData) => {\n this.userProfilePath = initTopBarData.userProfilePath;\n this.showProfileIcon = initTopBarData.showProfileIcon;\n this.currentUser = initTopBarData.currentUser;\n this.avatarLabel = initTopBarData.currentUser?.email\n .charAt(0)\n .toLocaleUpperCase();\n });\n };\n\n onDocumentClick(event: any) {\n if (!this.menu.nativeElement.contains(event.target)) {\n if (this.layoutService.state.profileDropdownSidebarVisible == true) {\n this.layoutService.state.profileDropdownSidebarVisible = false;\n }\n }\n }\n\n routeToUserPage() {\n if (this.routeOnLargeProfileAvatarClick) {\n this.router.navigateByUrl(this.userProfilePath);\n }\n }\n\n loginButtonClick() {\n if (this.routeToLoginPage) {\n this.router.navigateByUrl(this.config.loginSlug);\n }\n\n this.onLoginButtonClick.next(null);\n }\n\n ngOnDestroy(): void {\n if (this.initTopBarSubscription) {\n this.initTopBarSubscription.unsubscribe();\n }\n }\n}\n\nexport interface ProfileAvatarModalMenuItem {\n label?: string;\n icon?: string;\n showSeparator?: boolean;\n onClick?: () => void;\n}\n","<ng-container *transloco=\"let t\">\n <div *ngIf=\"this.currentUser != null\" #topbarmenu>\n <div\n #topbarprofiledropdownmenubutton\n (click)=\"layoutService.showProfileDropdownSidebar()\"\n >\n <p-avatar\n *ngIf=\"showProfileIcon\"\n [label]=\"avatarLabel\"\n [style]=\"{\n 'background-color': 'var(--p-primary-color)',\n color: '#fff',\n cursor: 'pointer',\n width: '34px',\n height: '34px',\n 'font-size': '21px',\n }\"\n />\n </div>\n <div #topbarprofiledropdownmenu (document:click)=\"onDocumentClick($event)\">\n <div\n *ngIf=\"layoutService.state.profileDropdownSidebarVisible\"\n style=\"\n width: 280px;\n position: absolute;\n padding: 15px;\n background: var(--p-content-background);\n \"\n class=\"card\"\n [ngClass]=\"{\n 'side-menu-profile-dialog': isSideMenuLayout,\n 'top-menu-profile-dialog': !isSideMenuLayout,\n }\"\n >\n <div\n style=\"\n display: flex;\n flex-direction: column;\n justify-content: center;\n text-align: center;\n gap: 10px;\n \"\n >\n <p-avatar\n [label]=\"avatarLabel\"\n size=\"xlarge\"\n [style]=\"{\n 'background-color': 'var(--p-primary-color)',\n color: '#fff',\n margin: 'auto',\n cursor: routeOnLargeProfileAvatarClick ? 'pointer' : '',\n }\"\n (click)=\"routeToUserPage()\"\n />\n <div style=\"font-size: 15px\">{{ currentUser?.email }}</div>\n </div>\n <div style=\"margin-top: 15px\">\n <div\n *ngFor=\"let item of menuItems\"\n [style]=\"item.showSeparator ? 'margin-top: 5px;' : ''\"\n >\n <div *ngIf=\"item.showSeparator\" class=\"gray-separator\"></div>\n <div\n (click)=\"item.onClick()\"\n class=\"hover-card\"\n style=\"\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 5px;\n \"\n >\n <i\n class=\"pi pi-fw {{ item.icon }}\"\n style=\"font-size: 16px; position: relative\"\n ></i>\n <div style=\"font-size: 15px\">{{ item.label }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"this.currentUser == null && this.showLoginButton\">\n <spiderly-button\n [label]=\"t('Login')\"\n (onClick)=\"loginButtonClick()\"\n icon=\"pi pi-sign-in\"\n [outlined]=\"loginButtonOutlined\"\n [severity]=\"loginButtonSeverity\"\n [size]=\"loginButtonSize\"\n ></spiderly-button>\n </div>\n</ng-container>\n","import { ConfigServiceBase } from '../../../services/config.service.base';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { Component, ElementRef, ViewChild } from '@angular/core';\nimport { filter } from 'rxjs';\nimport { LayoutServiceBase } from '../../../services/app-layout.service.base';\nimport { CommonModule } from '@angular/common';\nimport { AvatarModule } from 'primeng/avatar';\nimport { BadgeModule } from 'primeng/badge';\nimport { ProfileAvatarComponent } from '../profile-avatar/profile-avatar.component';\n\n@Component({\n selector: 'spiderly-sidemenu-topbar',\n templateUrl: './sidemenu-topbar.component.html',\n imports: [\n CommonModule,\n RouterModule,\n AvatarModule,\n BadgeModule,\n ProfileAvatarComponent,\n ],\n})\nexport class SideMenuTopBarComponent {\n companyName = this.config.companyName;\n @ViewChild('menubutton') menuButton!: ElementRef;\n\n constructor(\n public layoutService: LayoutServiceBase,\n protected router: Router,\n private config: ConfigServiceBase,\n private translocoService: TranslocoService,\n ) {}\n\n async ngOnInit() {\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n this.layoutService.state.profileDropdownSidebarVisible = false;\n });\n }\n}\n","<div class=\"layout-topbar\">\n <a class=\"layout-topbar-logo\" routerLink=\"/\">\n <span>{{ companyName?.toLocaleUpperCase() }}</span>\n </a>\n\n <button\n #menubutton\n class=\"p-link layout-menu-button layout-topbar-button\"\n (click)=\"layoutService.onMenuToggle()\"\n >\n <i class=\"pi pi-bars\"></i>\n </button>\n\n <div class=\"profile-button\">\n <spiderly-profile-avatar></spiderly-profile-avatar>\n </div>\n</div>\n","import { ConfigServiceBase } from '../../../services/config.service.base';\nimport { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ProfileAvatarComponent } from '../profile-avatar/profile-avatar.component';\nimport { MenubarModule } from 'primeng/menubar';\nimport { SpiderlyMenuItem } from '../sidebar/sidebar-menu.component';\nimport { AuthServiceBase } from '../../../services/auth.service.base';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'spiderly-topbar',\n templateUrl: './topbar.component.html',\n styleUrl: './topbar.component.scss',\n imports: [\n CommonModule,\n RouterModule,\n MenubarModule,\n AvatarModule,\n ProfileAvatarComponent,\n ],\n})\nexport class TopBarComponent {\n @Input() menu: SpiderlyMenuItem[] = [];\n companyName = this.config.companyName;\n logoPath = this.config.logoPath;\n /**\n * Determines whether to show background color on hover\n * for root menu items. Defaults to `false`.\n */\n @Input() showHoverBgOnRootItems: boolean = false;\n\n private permissionSubscription: Subscription | null = null;\n\n constructor(\n private authService: AuthServiceBase,\n private config: ConfigServiceBase,\n ) {}\n\n ngOnInit() {\n this.permissionSubscription =\n this.authService.currentUserPermissionCodes$.subscribe(\n (currentUserPermissionCodes: string[]) => {\n this.hideMenuItemsBasedOnPermissions(\n this.menu,\n currentUserPermissionCodes,\n );\n },\n );\n }\n\n hideMenuItemsBasedOnPermissions = (\n menu: SpiderlyMenuItem[],\n currentUserPermissionCodes: string[],\n ) => {\n menu.forEach((menuItem) => {\n if (menuItem.items) {\n this.hideMenuItemsBasedOnPermissions(\n menuItem.items,\n currentUserPermissionCodes,\n );\n }\n if (typeof menuItem.hasPermission === 'function') {\n menuItem.visible =\n menuItem.hasPermission(currentUserPermissionCodes) ?? false;\n }\n });\n };\n\n ngOnDestroy() {\n if (this.permissionSubscription) {\n this.permissionSubscription.unsubscribe();\n }\n }\n}\n","<div class=\"topbar-wrapper\">\n <nav\n class=\"topbar {{\n showHoverBgOnRootItems ? '' : 'show-hover-bg-on-root-items'\n }}\"\n >\n <p-menubar [model]=\"menu\" [style]=\"{ border: '0' }\">\n <ng-template #start>\n <img\n style=\"margin-left: 11px; cursor: pointer\"\n width=\"45\"\n height=\"45\"\n routerLink=\"/\"\n [src]=\"logoPath\"\n alt=\"Logo\"\n />\n </ng-template>\n <ng-template #end>\n <div\n style=\"\n margin-right: 11px;\n display: flex;\n gap: 10px;\n align-items: center;\n position: relative;\n \"\n >\n <div>\n <ng-content select=\"[ACTIONS]\"></ng-content>\n </div>\n <spiderly-profile-avatar\n [isSideMenuLayout]=\"false\"\n ></spiderly-profile-avatar>\n </div>\n </ng-template>\n </p-menubar>\n </nav>\n</div>\n","import {\n Component,\n ElementRef,\n Input,\n OnDestroy,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { AppSidebarComponent } from './sidebar/sidebar.component';\nimport { SideMenuTopBarComponent } from './sidemenu-topbar/sidemenu-topbar.component';\nimport { LayoutServiceBase } from '../../services/app-layout.service.base';\nimport { SpiderlyMenuItem } from './sidebar/sidebar-menu.component';\nimport { CommonModule } from '@angular/common';\nimport { FooterComponent } from '../footer/footer.component';\nimport { TopBarComponent } from './topbar/topbar.component';\n\n@Component({\n selector: 'spiderly-layout',\n templateUrl: './layout.component.html',\n imports: [\n CommonModule,\n RouterModule,\n AppSidebarComponent,\n FooterComponent,\n SideMenuTopBarComponent,\n TopBarComponent,\n ],\n})\nexport class SpiderlyLayoutComponent implements OnDestroy {\n @Input() menu: SpiderlyMenuItem[] = [];\n sideMenu: SpiderlyMenuItem[] = [];\n topMenu: SpiderlyMenuItem[] = [];\n @Input() isSideMenuLayout: boolean = true;\n /**\n * Determines whether to show background color on hover\n * for root top menu items. Defaults to `false`.\n */\n @Input() showHoverBgOnRootTopMenuItems: boolean = false;\n\n /**\n * default max-width for the main content area.\n */\n\n @Input() maxWidth: string = '1100px';\n\n overlayMenuOpenSubscription: Subscription;\n\n menuOutsideClickListener: any;\n\n profileMenuOutsideClickListener: any;\n\n @ViewChild(AppSidebarComponent) appSidebar!: AppSidebarComponent;\n\n @ViewChild(SideMenuTopBarComponent) sidemenuTopbar!: SideMenuTopBarComponent;\n\n @ViewChild('topbarmenu') topbarmenu!: ElementRef;\n\n constructor(\n protected layoutService: LayoutServiceBase,\n protected renderer: Renderer2,\n protected router: Router,\n ) {\n this.overlayMenuOpenSubscription =\n this.layoutService.overlayOpen$.subscribe(() => {\n if (!this.menuOutsideClickListener) {\n this.menuOutsideClickListener = this.renderer.listen(\n 'document',\n 'click',\n (event) => {\n const isOutsideClicked = !(\n this.appSidebar?.el.nativeElement.isSameNode(event.target) ||\n this.appSidebar?.el.nativeElement.contains(event.target) ||\n this.sidemenuTopbar?.menuButton?.nativeElement.isSameNode(\n event.target,\n ) ||\n this.sidemenuTopbar?.menuButton?.nativeElement.contains(\n event.target,\n ) ||\n event.target.closest('.p-autocomplete-items') ||\n event.target.closest('.p-autocomplete-clear-icon')\n );\n\n if (isOutsideClicked) {\n this.hideMenu();\n }\n },\n );\n }\n\n if (!this.profileMenuOutsideClickListener) {\n this.profileMenuOutsideClickListener = this.renderer.listen(\n 'document',\n 'click',\n (event) => {\n const isOutsideClicked = !(\n this.topbarmenu?.nativeElement.isSameNode(event.target) ||\n this.topbarmenu?.nativeElement.contains(event.target)\n );\n\n if (isOutsideClicked) {\n this.hideProfileMenu();\n }\n },\n );\n }\n\n if (this.layoutService.state.staticMenuMobileActive) {\n this.blockBodyScroll();\n }\n });\n\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n this.hideMenu();\n this.hideProfileMenu();\n });\n }\n\n ngOnInit() {\n if (this.isSideMenuLayout) {\n this.sideMenu = [...this.menu];\n } else {\n this.topMenu = [...this.menu[0].items];\n }\n }\n\n hideMenu() {\n this.layoutService.state.overlayMenuActive = false;\n this.layoutService.state.staticMenuMobileActive = false;\n this.layoutService.state.menuHoverActive = false;\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n this.menuOutsideClickListener = null;\n }\n this.unblockBodyScroll();\n }\n\n hideProfileMenu() {\n this.layoutService.state.profileSidebarVisible = false;\n if (this.profileMenuOutsideClickListener) {\n this.profileMenuOutsideClickListener();\n this.profileMenuOutsideClickListener = null;\n }\n }\n\n blockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.add('blocked-scroll');\n } else {\n document.body.className += ' blocked-scroll';\n }\n }\n\n unblockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.remove('blocked-scroll');\n } else {\n document.body.className = document.body.className.replace(\n new RegExp(\n '(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)',\n 'gi',\n ),\n ' ',\n );\n }\n }\n\n get containerClass() {\n return {\n 'layout-theme-light':\n this.layoutService.layoutConfig.colorScheme === 'light',\n 'layout-theme-dark':\n this.layoutService.layoutConfig.colorScheme === 'dark',\n 'layout-overlay': this.layoutService.layoutConfig.menuMode === 'overlay',\n 'layout-static': this.layoutService.layoutConfig.menuMode === 'static',\n 'layout-static-inactive':\n this.layoutService.state.staticMenuDesktopInactive &&\n this.layoutService.layoutConfig.menuMode === 'static',\n 'layout-overlay-active': this.layoutService.state.overlayMenuActive,\n 'layout-mobile-active': this.layoutService.state.staticMenuMobileActive,\n 'p-input-filled': this.layoutService.layoutConfig.inputStyle === 'filled',\n 'p-ripple-disabled': !this.layoutService.layoutConfig.ripple,\n };\n }\n\n ngOnDestroy() {\n if (this.overlayMenuOpenSubscription) {\n this.overlayMenuOpenSubscription.unsubscribe();\n }\n\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n }\n\n this.onAfterNgDestroy();\n }\n\n onAfterNgDestroy = () => {};\n}\n","<div *ngIf=\"isSideMenuLayout\" class=\"layout-wrapper\" [ngClass]=\"containerClass\">\n <spiderly-sidemenu-topbar></spiderly-sidemenu-topbar>\n <div class=\"layout-sidebar\">\n <sidebar [menu]=\"sideMenu\"></sidebar>\n </div>\n <div class=\"layout-main-container\">\n <div class=\"layout-main\">\n <router-outlet></router-outlet>\n </div>\n <footer></footer>\n </div>\n <div class=\"layout-mask\"></div>\n</div>\n\n<div *ngIf=\"isSideMenuLayout === false\">\n <spiderly-topbar\n [menu]=\"topMenu\"\n [showHoverBgOnRootItems]=\"showHoverBgOnRootTopMenuItems\"\n >\n <ng-content ACTIONS select=\"[ACTIONS]\"></ng-content>\n </spiderly-topbar>\n <main [style.max-width]=\"maxWidth\" style=\"margin: auto; padding: 18px\">\n <router-outlet></router-outlet>\n </main>\n</div>\n","import { Component } from '@angular/core';\nimport { ConfigServiceBase } from '../../services/config.service.base';\nimport { RouterModule } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'not-found',\n templateUrl: './not-found.component.html',\n imports: [RouterModule, ButtonModule],\n})\nexport class NotFoundComponent {\n companyName = this.config.companyName;\n logoPath: string = this.config.logoPath;\n\n constructor(private config: ConfigServiceBase) {}\n}\n","<div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px\">\n <div class=\"flex flex-col w-full\">\n <div\n class=\"w-full sm:w-[30rem]\"\n style=\"\n margin: auto;\n border-radius: 50px;\n padding: 0.3rem;\n background: linear-gradient(\n 180deg,\n var(--p-primary-color) 10%,\n rgba(33, 150, 243, 0) 30%\n );\n \"\n >\n <div class=\"surface-card py-12 px-8 sm:px-12\" style=\"border-radius: 45px\">\n <div class=\"text-center\">\n <img\n [src]=\"logoPath\"\n alt=\"{{ companyName }} Logo\"\n title=\"{{ companyName }} Logo\"\n height=\"60\"\n class=\"mb-6\"\n />\n </div>\n <h1 class=\"mb-6\">\n <div class=\"font-bold text-5xl lg:text-6xl spiderly-gradient-title\">\n 404\n </div>\n <div class=\"font-bold text-5xl lg:text-6xl\">Page Not Found</div>\n </h1>\n <div class=\"text-gray-600 text-lg mb-8\">\n The page you're looking for doesn't exist or has been moved. Let's get\n you back on track.\n </div>\n <div>\n <p-button [routerLink]=\"['/']\" label=\"Go to Homepage\"></p-button>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\n\nimport { MenuItem } from 'primeng/api';\nimport { SpiderlyButtonBaseComponent } from '../spiderly-button-base/spiderly-button-base';\n\n@Component({\n selector: 'spiderly-split-button',\n templateUrl: './spiderly-split-button.component.html',\n styles: [],\n imports: [CommonModule, ButtonModule, SplitButtonModule],\n})\nexport class SpiderlySplitButtonComponent extends SpiderlyButtonBaseComponent {\n @Input() dropdownItems: MenuItem[];\n}\n","<p-splitButton\n (onClick)=\"handleClick($event)\"\n [label]=\"label\"\n [icon]=\"icon\"\n [outlined]=\"outlined\"\n [styleClass]=\"styleClass\"\n [severity]=\"severity\"\n [rounded]=\"rounded\"\n [style]=\"style\"\n [class]=\"class\"\n [disabled]=\"disabled\"\n [model]=\"dropdownItems\"\n>\n <ng-content></ng-content>\n</p-splitButton>\n","import { Directive } from '@angular/core';\n\n/**\n * Marks an `<ng-template>` projected into `spiderly-data-table` as custom toolbar\n * content. The template is rendered in the table's caption action area, ahead of the\n * built-in Clear Filters / Export to Excel / Reload / Delete Selected buttons, so its\n * position stays stable regardless of selection state.\n *\n * The projected template binds to the consumer component (so `(click)` handlers call\n * the consumer's methods), and inherits the action row's spacing and responsive\n * stacking. No table state is passed as context — read it via the table's outputs\n * (`onLazyLoad`, `onTotalRecordsChange`, `onRowSelect`) when needed.\n *\n * @example\n * ```html\n * <spiderly-data-table [cols]=\"cols\" [getPaginatedListObservableMethod]=\"...\">\n * <ng-template spiderlyDataTableActions>\n * <button pButton class=\"p-button-outlined\" style=\"flex: none\"\n * icon=\"pi pi-check\" [label]=\"t('ApproveAll')\" (click)=\"approveAll()\"></button>\n * </ng-template>\n * </spiderly-data-table>\n * ```\n */\n@Directive({\n selector: '[spiderlyDataTableActions]',\n})\nexport class SpiderlyDataTableActionsDirective {}\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';\nimport { Observable } from 'rxjs';\n\nexport type DeleteConfirmationData =\n | {\n message: string;\n deleteItemFromTableObservableMethod: (id: number) => Observable<any>;\n id: number;\n }\n | {\n message: string;\n deleteListFromTableObservableMethod: (ids: number[]) => Observable<any>;\n ids: number[];\n };\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<DeleteConfirmationData>,\n ) {}\n\n accept() {\n const data = this.config.data;\n const observable =\n 'deleteListFromTableObservableMethod' in data\n ? data.deleteListFromTableObservableMethod(data.ids)\n : data.deleteItemFromTableObservableMethod(data.id);\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>{{ config.data.message }}</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 ContentChild,\n EventEmitter,\n Inject,\n Input,\n LOCALE_ID,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\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, SortMeta } 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 { PopoverModule } from 'primeng/popover';\nimport {\n Table,\n TableFilterEvent,\n TableLazyLoadEvent,\n TableModule,\n} from 'primeng/table';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { firstValueFrom, Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SpiderlyControlsModule } from '../../controls/spiderly-controls.module';\nimport { SpiderlyDataTableActionsDirective } from '../../directives/spiderly-data-table-actions.directive';\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 parseDateOnlyLocal,\n} from '../../services/helper-functions';\nimport { SpiderlyMessageService } from '../../services/spiderly-message.service';\nimport { readStoredJson, writeStoredJson } from '../../services/web-storage';\nimport {\n DeleteConfirmationData,\n SpiderlyDeleteConfirmationComponent,\n} 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 PopoverModule,\n DatePickerModule,\n CheckboxModule,\n TooltipModule,\n ],\n})\nexport class SpiderlyDataTableComponent\n implements OnInit, AfterViewInit, OnDestroy\n{\n private readonly destroy$ = new Subject<void>();\n\n @ViewChild('dt') table: Table;\n\n /**\n * Custom toolbar content projected via `<ng-template spiderlyDataTableActions>`.\n * Rendered in the caption action area ahead of the built-in buttons.\n */\n @ContentChild(SpiderlyDataTableActionsDirective, { read: TemplateRef })\n actionsTemplate: TemplateRef<any>;\n\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 /** Whether the paginator is shown. Pass only when `hasLazyLoad === false`. Defaults to `true`. */\n @Input() showPaginator: boolean = true;\n /** Whether the table is wrapped in a card container. Defaults to `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 /** Whether the \"Add\" button is shown. Defaults to `true`. */\n @Input() showAddButton: boolean = true;\n /** Whether the \"Export to Excel\" button is shown. Defaults to `true`. */\n @Input() showExportToExcelButton: boolean = true;\n /** Whether the reload-table button is shown. Defaults to `false`. */\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\n /**\n * Unique key for persisting table state (filters, sort, pagination) to storage.\n * Auto-generated from the current route when not provided.\n */\n @Input() stateKey?: string;\n\n /** 'session' persists across refresh only; 'local' persists indefinitely. */\n @Input() stateStorage: 'session' | 'local' = 'session';\n\n /**\n * Column field the table sorts by while the user has no sort of their own — applied on\n * first load (persisted state, when present, wins) and re-applied whenever an action\n * would leave the table unsorted (tri-state header click, Clear filters). Shows as a\n * regular header sort arrow. Omit to keep the backend's implicit Id DESC ordering.\n */\n @Input() defaultSortField?: string;\n\n /** Direction for `defaultSortField`: 1 ascending (default), -1 descending. */\n @Input() defaultSortOrder: 1 | -1 = 1;\n\n initialMultiSortMeta: SortMeta[] | null = null;\n\n /** Columns currently rendered — `cols` minus the hidden ones. Actions columns always render. */\n visibleCols: Column[] = [];\n\n /** Cached count of visible data columns, so template bindings don't re-derive it per CD cycle. */\n private visibleDataColsCount = 0;\n\n /** Data columns offered in the column chooser (actions columns are excluded). */\n chooserCols: Column[] = [];\n\n resolvedStateKey: string | null = null;\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 // (or back to the declared default sort when one is set).\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 // Un-sorting substitutes the declared default (when there is one) right here,\n // so sortMultiple() broadcasts and emits the final meta in one shot.\n if (isMultiSortClick) {\n const remaining = this.table._multiSortMeta.filter(\n (m) => m.field !== event.field,\n );\n this.table._multiSortMeta = remaining.length\n ? remaining\n : (this.defaultMultiSortMeta() ?? remaining);\n } else {\n this.table._multiSortMeta = this.defaultMultiSortMeta() ?? [];\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) {\n const baseKey = this.stateKey ?? `spiderly-table:${this.router.url}`;\n this.resolvedStateKey =\n this.additionalFilterIdLong != null\n ? `${baseKey}:${this.additionalFilterIdLong}`\n : baseKey;\n } else {\n this.clientLoad();\n }\n\n this.restoreColumnVisibility();\n this.reconcileVisibilityWithPersistedConstraints();\n this.chooserCols = this.cols.filter(SpiderlyDataTableComponent.isDataColumn);\n this.refreshVisibleCols();\n\n // Bound to p-table's [multiSortMeta] so the FIRST request already carries the right\n // sort. Persisted user sort wins over the declared default; we read it ourselves\n // because PrimeNG's restoreState() runs on the first [value] change — after the\n // initial lazy emit has already left.\n this.initialMultiSortMeta =\n this.persistedMultiSortMeta() ?? this.defaultMultiSortMeta();\n }\n\n //#region Column visibility\n\n /**\n * User visibility choices (field → visible), holding only fields the user explicitly\n * toggled away from their declared default — so a page changing a column's declared\n * default later flows through to every user who never touched that column.\n */\n private columnVisibilityOverrides: Record<string, boolean> = {};\n\n /**\n * Columns revealed by the load-time reconciliation. Kept apart from\n * `columnVisibilityOverrides` so persisting a later unrelated toggle can't promote a\n * transient safety reveal into a durable choice.\n */\n private revealedByConstraint = new Set<string>();\n\n /** A data column shows values for a `field`; anything else (the actions column) always renders. */\n private static isDataColumn(col: Column): boolean {\n return !!col.field;\n }\n\n /**\n * Storage slot for the visibility overrides. Deliberately ALWAYS localStorage, even when\n * `stateStorage` is 'session': the column layout is a durable preference, while filters\n * are a transient working set — different natural lifetimes.\n */\n private get columnsStateKey(): string | null {\n return this.resolvedStateKey ? `${this.resolvedStateKey}:columns` : null;\n }\n\n /** Actions columns always render; data columns follow reveal/override, then declared default. */\n isColumnVisible(col: Column): boolean {\n if (!SpiderlyDataTableComponent.isDataColumn(col)) return true;\n if (col.lockVisible) return true; // pinned — wins over any (possibly stale) override\n if (this.revealedByConstraint.has(col.field)) return true;\n return this.columnVisibilityOverrides[col.field] ?? col.visible !== false;\n }\n\n private refreshVisibleCols(): void {\n this.visibleCols = this.cols.filter((col) => this.isColumnVisible(col));\n this.visibleDataColsCount = this.visibleCols.filter(\n SpiderlyDataTableComponent.isDataColumn,\n ).length;\n }\n\n /**\n * Locked columns can't be toggled; the last visible data column can't be hidden — the\n * table must never collapse to just an actions column. Revealing is always allowed.\n */\n canToggleColumn(col: Column): boolean {\n if (col.lockVisible) return false;\n if (!this.isColumnVisible(col)) return true;\n return this.visibleDataColsCount > 1;\n }\n\n toggleColumn(col: Column, visible: boolean): void {\n this.revealedByConstraint.delete(col.field); // an explicit choice supersedes a safety reveal\n\n if (visible === (col.visible !== false)) {\n delete this.columnVisibilityOverrides[col.field]; // back at the declared default\n } else {\n this.columnVisibilityOverrides[col.field] = visible;\n }\n\n this.persistColumnVisibility();\n this.refreshVisibleCols();\n\n if (!visible) this.clearHiddenColumnConstraints([col]);\n }\n\n /** Restores every column to its declared default and forgets the stored override. */\n resetColumnVisibility(): void {\n const wasVisible = this.visibleCols.filter(\n SpiderlyDataTableComponent.isDataColumn,\n );\n\n this.revealedByConstraint.clear();\n this.columnVisibilityOverrides = {};\n this.persistColumnVisibility();\n this.refreshVisibleCols();\n\n // Columns the reset just hid follow the same rule as a manual hide.\n this.clearHiddenColumnConstraints(\n wasVisible.filter((col) => !this.isColumnVisible(col)),\n );\n }\n\n /**\n * A hidden column contributes nothing to filtering or sorting: the header is the only\n * filter surface, so a kept constraint would restrict the data invisibly. Reloads (once)\n * only when a constraint was actually cleared — plain hides don't need a server round-trip.\n */\n private clearHiddenColumnConstraints(cols: Column[]): void {\n if (!this.table) return;\n\n let cleared = false;\n for (const col of cols) {\n const filterKey = col.filterField ?? col.field;\n if (\n SpiderlyDataTableComponent.isActiveFilterMeta(\n this.table.filters?.[filterKey],\n )\n ) {\n delete this.table.filters[filterKey];\n cleared = true;\n }\n\n if (this.table._multiSortMeta?.some((m) => m.field === col.field)) {\n this.table._multiSortMeta = this.table._multiSortMeta.filter(\n (m) => m.field !== col.field,\n );\n this.table.tableService.onSort(this.table._multiSortMeta);\n cleared = true;\n }\n }\n\n if (cleared) this.table._filter(); // re-emits the lazy load and saves the cleaned state\n }\n\n /** Whether filter metadata (single or array) carries a real constraint, not just an empty slot. */\n private static isActiveFilterMeta(meta: unknown): boolean {\n return (Array.isArray(meta) ? meta : [meta]).some(\n (m: any) =>\n m?.value != null &&\n m.value !== '' &&\n (!Array.isArray(m.value) || m.value.length > 0),\n );\n }\n\n private persistColumnVisibility(): void {\n if (!this.columnsStateKey) return;\n\n if (Object.keys(this.columnVisibilityOverrides).length === 0) {\n localStorage.removeItem(this.columnsStateKey);\n } else {\n writeStoredJson(\n localStorage,\n this.columnsStateKey,\n this.columnVisibilityOverrides,\n );\n }\n }\n\n private restoreColumnVisibility(): void {\n if (!this.columnsStateKey) return;\n\n this.columnVisibilityOverrides =\n readStoredJson(localStorage, this.columnsStateKey) ?? {};\n }\n\n /**\n * PrimeNG's persisted table state (filters/sort/pagination), read directly from storage\n * because we need it before PrimeNG's restoreState() runs on the first [value] change.\n */\n private persistedTableState(): any {\n if (!this.resolvedStateKey) return null;\n\n return readStoredJson(\n this.stateStorage === 'local' ? localStorage : sessionStorage,\n this.resolvedStateKey,\n );\n }\n\n /**\n * Guards the \"hidden contributes nothing\" invariant against state this component didn't\n * write (older blobs, hand-edited storage): a hidden column the persisted table state\n * still filters or sorts by is revealed rather than constraining the data invisibly.\n * In-memory only — once the constraint is gone, the user's stored choice reapplies.\n */\n private reconcileVisibilityWithPersistedConstraints(): void {\n const state = this.persistedTableState();\n if (!state) return;\n\n const constrained = new Set<string>();\n for (const [field, meta] of Object.entries(state.filters ?? {})) {\n if (SpiderlyDataTableComponent.isActiveFilterMeta(meta))\n constrained.add(field);\n }\n for (const sortMeta of state.multiSortMeta ?? []) {\n if (sortMeta?.field) constrained.add(sortMeta.field);\n }\n\n for (const col of this.cols) {\n if (!SpiderlyDataTableComponent.isDataColumn(col)) continue;\n if (this.isColumnVisible(col)) continue;\n if (constrained.has(col.field) || constrained.has(col.filterField)) {\n this.revealedByConstraint.add(col.field);\n }\n }\n }\n\n //#endregion\n\n /**\n * The declared default as PrimeNG sort meta, or null when none is declared — or when its\n * column is hidden (\"hidden contributes nothing\"): the table then falls back to the\n * backend's implicit Id DESC, exactly as if no default were declared.\n */\n private defaultMultiSortMeta(): SortMeta[] | null {\n if (!this.defaultSortField) return null;\n\n const defaultSortCol = this.cols?.find(\n (col) => col.field === this.defaultSortField,\n );\n if (defaultSortCol && !this.isColumnVisible(defaultSortCol)) return null;\n\n return [{ field: this.defaultSortField, order: this.defaultSortOrder }];\n }\n\n private persistedMultiSortMeta(): SortMeta[] | null {\n const state = this.persistedTableState();\n return state?.multiSortMeta?.length ? state.multiSortMeta : null;\n }\n\n // Safety net: any lazy load still leaving unsorted (Clear filters — PrimeNG's clear()\n // nulls the sort and emits in one call — or stale persisted state) falls back to the\n // declared default. Patching the event before it becomes the backend Filter avoids a\n // second fetch; clear() broadcasts sort state to the header icons before emitting,\n // hence the explicit re-broadcast. The tri-state un-sort path never gets here — it\n // substitutes the default at its source in setupRemovableSort().\n private applyDefaultSortIfUnsorted(event: TableLazyLoadEvent): void {\n if (event.multiSortMeta?.length) return;\n\n const defaultSort = this.defaultMultiSortMeta();\n if (defaultSort == null) return;\n\n event.multiSortMeta = defaultSort;\n\n if (this.table) {\n this.table._multiSortMeta = defaultSort;\n this.table.tableService.onSort(defaultSort);\n }\n }\n\n lazyLoad(event: TableLazyLoadEvent) {\n this.applyDefaultSortIfUnsorted(event);\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 /*\n * Handle a cell click. Only columns that opt in (have an `onCellClick` callback) react; for them\n * we stop propagation so the click does not also trigger row navigation, then invoke the consumer\n * callback with a fully-populated CellClickEvent. Inert cells fall through to onRowClick unchanged.\n */\n onCellClick(col: Column, rowData: any, event: MouseEvent): void {\n if (!col.onCellClick) return;\n event.stopPropagation();\n col.onCellClick({\n ...this.buildClickEvent(rowData, event),\n field: col.field,\n value: rowData[col.field],\n displayValue: this.getRowData(rowData, col),\n });\n }\n\n /*\n * Build the base click payload shared by custom action clicks and cell clicks. The clicked element\n * is captured here, not read later from `originalEvent.currentTarget` (which nulls after dispatch).\n */\n private buildClickEvent(rowData: any, event: MouseEvent): ActionClickEvent {\n return {\n id: rowData[this.idField],\n row: rowData,\n element: event.currentTarget as HTMLElement,\n originalEvent: event,\n };\n }\n\n deleteObject(rowId: number) {\n this.openDeleteConfirmation(\n {\n deleteItemFromTableObservableMethod:\n this.deleteItemFromTableObservableMethod,\n id: rowId,\n message: this.translocoService.translate('PleaseConfirmToProceed'),\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 message: this.translocoService.translate('DeleteBulkConfirmation', {\n count: selectedIds.length,\n }),\n },\n 'SuccessfullyDeletedListMessage',\n () => this.resetSelection(),\n );\n }\n\n private openDeleteConfirmation(\n data: DeleteConfirmationData,\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\n .pipe(takeUntil(this.destroy$))\n .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 ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\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, event: MouseEvent) {\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(this.buildClickEvent(rowData, event));\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\n const raw = rowData[col.field];\n const local = typeof raw === 'string' ? parseDateOnlyLocal(raw) : null;\n return formatDate(local ?? raw, '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 table.clearState();\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 /**\n * Fired when a custom action is clicked. Receives an {@link ActionClickEvent} with the\n * row id, the full row object, the clicked DOM element (use it to anchor an overlay/popover),\n * and the original `MouseEvent`.\n *\n * Only fires for custom actions — the built-in `field` values `'Details'` and `'Delete'`\n * are handled internally and never invoke `onClick`.\n */\n onClick?: (event: ActionClickEvent) => 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?: (event: ActionClickEvent) => 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 * Whether the column is initially rendered. Defaults to `true`. Declare `visible: false` for\n * columns that should be available in the column chooser but hidden until the user reveals them.\n */\n visible?: boolean;\n /**\n * Pins the column: it always renders and shows in the chooser as checked and disabled.\n * Use for the row's identifying column (e.g. a product's title) so the table can never\n * lose its anchor.\n */\n lockVisible?: boolean;\n /**\n * Fired when this column's cell is clicked. Receives a {@link CellClickEvent} with the row id,\n * the column field, the full row, the raw and formatted cell value, the clicked `<td>` element\n * (use it to anchor an overlay/popover), and the original `MouseEvent`.\n *\n * Setting this makes the cell visibly clickable (cursor + hover) and the click no longer bubbles\n * up to row navigation. The mirror of {@link Action.onClick}, but for plain value cells.\n * Not applied to editable cells — those belong to their inline input.\n */\n onCellClick?: (event: CellClickEvent) => void;\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 visible,\n lockVisible,\n onCellClick,\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 visible?: boolean;\n lockVisible?: boolean;\n onCellClick?: (event: CellClickEvent) => void;\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 this.visible = visible;\n this.lockVisible = lockVisible;\n this.onCellClick = onCellClick;\n }\n}\n\n/**\n * Payload passed to {@link Action.onClick} when a custom row action is clicked.\n * Every field is populated by the data table, so consumers can rely on them being present.\n */\nexport interface ActionClickEvent {\n /** The clicked row's id (`row[idField]`). */\n id: number;\n /** The full row object the action belongs to. */\n row: any;\n /**\n * The clicked action element — pass it as the anchor when opening an overlay/popover.\n * Captured at click time on purpose: `originalEvent.currentTarget` is reset to null once\n * dispatch ends, so it would already be null inside an async handler.\n */\n element: HTMLElement;\n /** The original DOM click event. */\n originalEvent: MouseEvent;\n}\n\n/**\n * Payload passed to {@link Column.onCellClick} when a cell is clicked. A superset of\n * {@link ActionClickEvent} (same `id` / `row` / `element` / `originalEvent`) plus the cell's\n * column and value. Every field is populated by the data table.\n */\nexport interface CellClickEvent extends ActionClickEvent {\n /** The clicked column's `field`. */\n field: string;\n /** The cell's raw value (`row[field]`). */\n value: any;\n /** The formatted value shown in the cell (what the table renders via `getRowData`). */\n displayValue: string;\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 [multiSortMeta]=\"initialMultiSortMeta\"\n [stateKey]=\"resolvedStateKey\"\n [stateStorage]=\"stateStorage\"\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 <ng-container\n *ngIf=\"actionsTemplate\"\n [ngTemplateOutlet]=\"actionsTemplate\"\n ></ng-container>\n <button\n pButton\n *ngIf=\"hasLazyLoad\"\n data-testid=\"column-chooser-button\"\n [label]=\"t('Columns')\"\n class=\"p-button-outlined\"\n style=\"flex: none\"\n icon=\"pi pi-sliders-h\"\n (click)=\"columnChooser.toggle($event)\"\n ></button>\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 visibleCols; 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 visibleCols; trackBy: colTrackByFn\">\n <td\n [style]=\"getStyleForBodyColumn(col)\"\n [class.clickable]=\"col.onCellClick\"\n (click)=\"onCellClick(col, rowData, $event)\"\n *ngIf=\"!col.editable\"\n >\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, $event)\"\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 visibleCols.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 visibleCols.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 <p-popover #columnChooser>\n <div class=\"column-chooser\">\n <label\n *ngFor=\"let col of chooserCols; trackBy: colTrackByFn\"\n data-testid=\"column-chooser-option\"\n class=\"column-chooser-option\"\n >\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isColumnVisible(col)\"\n [disabled]=\"!canToggleColumn(col)\"\n (onChange)=\"toggleColumn(col, $event.checked)\"\n ></p-checkbox>\n <span>{{ col.name }}</span>\n </label>\n <button\n type=\"button\"\n data-testid=\"column-chooser-reset\"\n class=\"column-chooser-reset\"\n (click)=\"resetColumnVisibility()\"\n >\n {{ t('ResetToDefault') }}\n </button>\n </div>\n </p-popover>\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 /** Whether the data view is wrapped in a card container. Defaults to `true`. */\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 /** Whether the total records count is shown. Defaults to `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, filter, map, take } 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 filter((user) => user !== undefined), // wait until the session is resolved (undefined = still loading)\n take(1),\n map((user) => {\n if (user) {\n return true;\n }\n this.router.navigate([this.config.loginSlug]);\n return false;\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanActivate } from '@angular/router';\nimport { Observable, filter, map, take } 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 filter((user) => user !== undefined), // wait until the session is resolved (undefined = still loading)\n take(1),\n map((user) => {\n if (user) {\n this.authService.navigateToDashboard();\n return false;\n }\n return true;\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 } from '@angular/core';\nimport { HttpInterceptorFn } from '@angular/common/http';\nimport { ConfigServiceBase } from '../services/config.service.base';\n\n// Cookie-based auth: the session JWTs are HttpOnly cookies, so we just send credentials on API calls.\n// The browser attaches/refreshes the cookies; JS never holds the tokens (XSS-safe).\n//\n// CSRF: state-changing requests (POST/PUT/DELETE/PATCH) authenticated via cookie must include the\n// X-CSRF header, otherwise Spiderly.Shared/Attributes/AuthGuardAttribute.cs returns 403 Forbidden\n// (the server-side check was added in commit 92f238d but the matching client-side header was never\n// emitted, so every cookie-authed write was failing in the admin). The check is presence-only —\n// any non-empty value works — and the protection comes from the fact that a cross-origin form\n// submission cannot set custom request headers without a CORS preflight.\nconst SAFE_HTTP_METHODS = new Set(['GET', 'HEAD', 'OPTIONS']);\n\nexport const jwtInterceptor: HttpInterceptorFn = (req, next) => {\n const config = inject(ConfigServiceBase);\n\n const isApiUrl = req.url.startsWith(config.apiUrl);\n if (isApiUrl) {\n const isStateChanging = !SAFE_HTTP_METHODS.has(req.method.toUpperCase());\n req = req.clone({\n withCredentials: true,\n ...(isStateChanging && { setHeaders: { 'X-CSRF': '1' } }),\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 { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ApiErrorCodes } from '../errors/api-error-codes';\nimport { AuthServiceBase } from '../services/auth.service.base';\nimport { ConfigServiceBase } from '../services/config.service.base';\nimport { SpiderlyMessageService } from '../services/spiderly-message.service';\n\n/**\n * Owns cross-cutting HTTP-error UX: shows the right message and, on an expired session, clears auth — then\n * RETHROWS. Errors stay errors: callers run only their success path, and an unhandled HttpErrorResponse that\n * reaches the global ErrorHandler is intentionally ignored there (HTTP-error UX lives here). This interceptor\n * must never convert an error into a value — doing so makes callers treat failures as data.\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 reactToError = (err: HttpErrorResponse, request: HttpRequest<any>): void => {\n if (!config.production) {\n console.error(err);\n }\n\n // TODO: type this as an ApiError interface (TS mirror of ApiErrorDTO, next to errors/api-error-codes.ts)\n // so message/errorCode/traceId reads of the cross-language contract are compile-checked, not conventional.\n let errorResponse = err.error;\n if (request.responseType !== 'json' && typeof err.error === 'string') {\n try {\n errorResponse = JSON.parse(err.error);\n } catch {\n errorResponse = null;\n }\n }\n\n // ApiErrorDTO.traceId is present only on reportable errors, so this is a no-op everywhere else —\n // the server decides which responses carry a support reference, never this status-code chain.\n const withReference = (detail: string): string =>\n errorResponse?.traceId\n ? `${detail} ${translocoService.translate('ErrorReference', { traceId: errorResponse.traceId })}`\n : detail;\n\n if (err.status === 0) {\n // Server unreachable; defer so the message isn't lost during a shutdown/refresh race.\n setTimeout(() => {\n messageService.warningMessage(\n withReference(translocoService.translate('ServerLostConnectionDetails')),\n translocoService.translate('ServerLostConnectionTitle'),\n );\n }, 100);\n } else if (err.status === 400) {\n messageService.warningMessage(\n withReference(errorResponse?.message ?? translocoService.translate('BadRequestDetails')),\n translocoService.translate('Warning'),\n );\n } else if (err.status === 401) {\n if (errorResponse?.errorCode === ApiErrorCodes.InvalidToken) {\n authService.clearSession(); // expired/invalid session — drop it; guards send the user to login\n } else {\n messageService.warningMessage(\n withReference(errorResponse?.message ?? translocoService.translate('LoginRequired')),\n translocoService.translate('Warning'),\n );\n }\n } else if (err.status === 403) {\n messageService.warningMessage(\n withReference(translocoService.translate('PermissionErrorDetails')),\n translocoService.translate('PermissionErrorTitle'),\n );\n } else if (err.status === 404) {\n messageService.warningMessage(\n withReference(translocoService.translate('NotFoundDetails')),\n translocoService.translate('NotFoundTitle'),\n );\n } else {\n messageService.errorMessage(\n withReference(translocoService.translate('UnexpectedErrorDetails')),\n translocoService.translate('UnexpectedErrorTitle'),\n );\n }\n };\n\n return next(req).pipe(\n catchError((err: HttpErrorResponse) => {\n reactToError(err, req);\n return throwError(() => err);\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 authService.captureExternalAuthError(); // before the router can strip ?externalAuthError on the /login redirect\n return authService.refreshToken();\n };\n }\n return () => {\n return of();\n };\n}\n","import { ConfigServiceBase } from './config.service.base';\nimport { Injectable } from '@angular/core';\nimport { TranslocoLoader } from '@jsverse/transloco';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SpiderlyTranslocoLoader implements TranslocoLoader {\n constructor(\n private http: HttpClient,\n private config: ConfigServiceBase,\n ) {}\n\n getTranslation(lang: string) {\n return this.http.get(`${this.config.frontendUrl}/assets/i18n/${lang}.json`);\n }\n}\n","import { Directive, Input } from '@angular/core';\n\n@Directive({\n selector: '[templateType]',\n})\nexport class SpiderlyTemplateTypeDirective<T> {\n @Input() templateType?: T;\n\n static ngTemplateContextGuard<T>(\n dir: SpiderlyTemplateTypeDirective<T>,\n ctx: unknown,\n ): ctx is T {\n return true;\n }\n}\n","/*\n * Public API Surface of spiderly\n */\n\nexport * from './lib/errors/api-error-codes';\nexport * from './lib/controls/base-autocomplete-control';\nexport * from './lib/controls/base-control';\nexport * from './lib/controls/base-dropdown-control';\nexport * from './lib/controls/spiderly-autocomplete/spiderly-autocomplete.component';\nexport * from './lib/controls/spiderly-calendar/spiderly-calendar.component';\nexport * from './lib/controls/spiderly-checkbox/spiderly-checkbox.component';\nexport * from './lib/controls/spiderly-colorpicker/spiderly-colorpicker.component';\nexport * from './lib/controls/spiderly-controls.module';\nexport * from './lib/controls/spiderly-dropdown/spiderly-dropdown.component';\nexport * from './lib/controls/spiderly-editor/spiderly-editor.component';\nexport * from './lib/controls/spiderly-markdown/spiderly-markdown.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/auth-card/auth-card.component';\nexport * from './lib/components/auth/external-provider-icons';\nexport * from './lib/components/auth/external-login/external-login.component';\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/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/editor-image-upload-result';\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/spiderly-data-table-actions.directive';\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","i2.ConfigServiceBase","map","i1.AuthServiceBase","i1.ConfigServiceBase","i2.AuthServiceBase","i3.ApiSecurityService","i1.ValidatorAbstractService","i5.BaseFormService","i8.PanelHeaderComponent","i9.PanelBodyComponent","i10.PanelFooterComponent","i11.SpiderlyPanelComponent","i6.AuthServiceBase","i7","i8.SpiderlyTextboxComponent","i9.SpiderlyButtonComponent","i3.PanelHeaderComponent","i4.PanelBodyComponent","i5.SpiderlyPanelComponent","i1.ApiSecurityService","i3.AuthServiceBase","i1.LayoutServiceBase","i3.SidebarMenuService","i4.AuthServiceBase","i5.ApiSecurityService","i6.ConfigServiceBase","i8.SpiderlyAutocompleteComponent","i4.ConfigServiceBase","filter","i5.ConfigServiceBase","i3.ConfigServiceBase","i8.SpiderlyButtonComponent","i9.SpiderlyNumberComponent","i11","i13","i15","i16","i17","i4.SpiderlyButtonComponent","i1.SpiderlyMessageService","finalize","tap"],"mappings":"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"}
|