spiderly 19.3.1 → 19.4.0-preview.1

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.
Files changed (52) hide show
  1. package/README.md +17 -17
  2. package/fesm2022/spiderly.mjs +765 -1066
  3. package/fesm2022/spiderly.mjs.map +1 -1
  4. package/lib/components/auth/login/login.component.d.ts +3 -3
  5. package/lib/components/auth/partials/auth.component.d.ts +3 -4
  6. package/lib/components/auth/partials/login-verification.component.d.ts +2 -2
  7. package/lib/components/footer/footer.component.d.ts +2 -2
  8. package/lib/components/layout/layout.component.d.ts +3 -3
  9. package/lib/components/layout/profile-avatar/profile-avatar.component.d.ts +6 -6
  10. package/lib/components/layout/sidebar/menuitem.component.d.ts +5 -5
  11. package/lib/components/layout/sidebar/sidebar-menu.component.d.ts +5 -5
  12. package/lib/components/layout/sidemenu-topbar/sidemenu-topbar.component.d.ts +4 -4
  13. package/lib/components/layout/topbar/topbar.component.d.ts +3 -3
  14. package/lib/components/not-found/not-found.component.d.ts +2 -2
  15. package/lib/entities/security-entities.d.ts +6 -184
  16. package/lib/guards/auth.guard.d.ts +3 -3
  17. package/lib/guards/not-auth.guard.d.ts +2 -2
  18. package/lib/handlers/spiderly-error-handler.d.ts +2 -2
  19. package/lib/services/api.service.security.d.ts +5 -18
  20. package/lib/services/app-initializer.d.ts +2 -2
  21. package/lib/services/{app-layout-base.service.d.ts → app-layout.service.base.d.ts} +8 -8
  22. package/lib/services/{auth-base.service.d.ts → auth.service.base.d.ts} +6 -6
  23. package/lib/services/{config-base.service.d.ts → config.service.base.d.ts} +3 -4
  24. package/lib/services/spiderly-transloco-loader.d.ts +2 -2
  25. package/package.json +1 -1
  26. package/public-api.d.ts +3 -4
  27. package/styles/components/info-card/info-card.component.scss +60 -60
  28. package/styles/components/layout/profile-avatar/profile-avatar.component.scss +8 -8
  29. package/styles/components/layout/topbar/topbar.component.scss +38 -38
  30. package/styles/components/spiderly-data-table/spiderly-data-table.component.scss +48 -48
  31. package/styles/components/spiderly-data-view/spiderly-data-view.component.scss +55 -55
  32. package/styles/components/spiderly-panels/panel-body/panel-body.component.scss +8 -8
  33. package/styles/components/spiderly-panels/panel-footer/panel-footer.component.scss +16 -16
  34. package/styles/components/spiderly-panels/spiderly-panel/spiderly-panel.component.scss +87 -87
  35. package/styles/controls/base-controls.scss +16 -16
  36. package/styles/controls/spiderly-checkbox/spiderly-checkbox.component.scss +22 -22
  37. package/styles/styles/layout/_content.scss +14 -14
  38. package/styles/styles/layout/_footer.scss +11 -11
  39. package/styles/styles/layout/_main.scss +34 -34
  40. package/styles/styles/layout/_menu.scss +137 -137
  41. package/styles/styles/layout/_mixins.scss +13 -13
  42. package/styles/styles/layout/_preloading.scss +47 -47
  43. package/styles/styles/layout/_responsive.scss +102 -102
  44. package/styles/styles/layout/_spiderly-controls.scss +14 -14
  45. package/styles/styles/layout/_topbar.scss +235 -235
  46. package/styles/styles/layout/_typography.scss +63 -63
  47. package/styles/styles/layout/_utils.scss +19 -19
  48. package/styles/styles/layout/_variables.scss +908 -908
  49. package/styles/styles/layout/layout.scss +11 -11
  50. package/styles/styles/shared.scss +483 -483
  51. package/styles/styles/styles.scss +2 -2
  52. package/lib/components/base-details/role-base-details.component.d.ts +0 -43
@@ -30,7 +30,7 @@ import * as i1$1 from 'primeng/button';
30
30
  import { ButtonModule } from 'primeng/button';
31
31
  import * as i1$5 from 'primeng/splitbutton';
32
32
  import { SplitButtonModule } from 'primeng/splitbutton';
33
- import { Subject, throttleTime, map, BehaviorSubject, of, firstValueFrom, forkJoin, delay as delay$1, withLatestFrom, combineLatest, filter as filter$1, finalize as finalize$1, tap as tap$1, throwError } from 'rxjs';
33
+ import { Subject, throttleTime, map, BehaviorSubject, of, firstValueFrom, delay as delay$1, withLatestFrom, combineLatest, filter as filter$1, finalize as finalize$1, tap as tap$1 } from 'rxjs';
34
34
  import * as i3$2 from '@angular/router';
35
35
  import { RouterModule, NavigationEnd } from '@angular/router';
36
36
  import * as FileSaver from 'file-saver';
@@ -45,14 +45,14 @@ import * as i4$7 from 'primeng/password';
45
45
  import { PasswordModule } from 'primeng/password';
46
46
  import * as i4$8 from 'primeng/textarea';
47
47
  import { TextareaModule } from 'primeng/textarea';
48
- import * as i1$3 from 'primeng/skeleton';
48
+ import * as i1$3 from '@angular/common/http';
49
+ import { HttpParams, HttpHeaders, HttpErrorResponse, HttpResponse } from '@angular/common/http';
50
+ import * as i1$4 from 'primeng/skeleton';
49
51
  import { SkeletonModule } from 'primeng/skeleton';
50
52
  import * as i2$1 from 'primeng/menu';
51
53
  import { MenuModule } from 'primeng/menu';
52
54
  import * as i4$9 from 'primeng/panel';
53
55
  import { PanelModule } from 'primeng/panel';
54
- import * as i1$4 from '@angular/common/http';
55
- import { HttpParams, HttpHeaders, HttpErrorResponse, HttpResponse } from '@angular/common/http';
56
56
  import { map as map$1, finalize, delay, tap, filter, catchError } from 'rxjs/operators';
57
57
  import * as i3$4 from '@abacritt/angularx-social-login';
58
58
  import * as i9 from 'primeng/table';
@@ -352,7 +352,7 @@ class SpiderlyAutocompleteComponent extends BaseAutocompleteControl {
352
352
  this.helperFormControl.markAsDirty();
353
353
  }
354
354
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyAutocompleteComponent, deps: [{ token: i1.TranslocoService }, { token: ValidatorAbstractService }], target: i0.ɵɵFactoryTarget.Component }); }
355
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyAutocompleteComponent, isStandalone: true, selector: "spiderly-autocomplete", inputs: { appendTo: "appendTo", showClear: "showClear", emptyMessage: "emptyMessage", displayName: "displayName" }, usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\"> <!-- By passing an empty string we remove the label entirely -->\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n \r\n <!-- Don't support p-inputgroup -->\r\n <p-autocomplete\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [id]=\"label\"\r\n [formControl]=\"helperFormControl\"\r\n [placeholder]=\"placeholder\"\r\n [suggestions]=\"options\"\r\n (completeMethod)=\"search($event)\"\r\n [forceSelection]=\"true\"\r\n [dropdown]=\"false\"\r\n [showClear]=\"showClear\"\r\n (onHide)=\"autocompleteMarkAsDirty()\"\r\n (onSelect)=\"select($event)\"\r\n (onClear)=\"clear()\"\r\n [completeOnFocus]=\"true\"\r\n [fluid]=\"true\"\r\n [style]=\"{'width':'100%'}\"\r\n [appendTo]=\"appendTo\"\r\n [emptyMessage]=\"emptyMessage\"\r\n [lazy]=\"true\"\r\n optionLabel=\"displayName\"\r\n ></p-autocomplete>\r\n </div>\r\n</ng-container>", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i4.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "variant", "fluid"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "ngmodule", type: InputGroupModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: RequiredComponent, selector: "required" }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
355
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyAutocompleteComponent, isStandalone: true, selector: "spiderly-autocomplete", inputs: { appendTo: "appendTo", showClear: "showClear", emptyMessage: "emptyMessage", displayName: "displayName" }, usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\"> <!-- 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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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 </div>\n</ng-container>", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i4.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "variant", "fluid"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "ngmodule", type: InputGroupModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: RequiredComponent, selector: "required" }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
356
356
  }
357
357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyAutocompleteComponent, decorators: [{
358
358
  type: Component,
@@ -366,7 +366,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
366
366
  CommonModule,
367
367
  RequiredComponent,
368
368
  TranslocoDirective,
369
- ], template: "<ng-container *transloco=\"let t\">\r\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\"> <!-- By passing an empty string we remove the label entirely -->\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n \r\n <!-- Don't support p-inputgroup -->\r\n <p-autocomplete\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [id]=\"label\"\r\n [formControl]=\"helperFormControl\"\r\n [placeholder]=\"placeholder\"\r\n [suggestions]=\"options\"\r\n (completeMethod)=\"search($event)\"\r\n [forceSelection]=\"true\"\r\n [dropdown]=\"false\"\r\n [showClear]=\"showClear\"\r\n (onHide)=\"autocompleteMarkAsDirty()\"\r\n (onSelect)=\"select($event)\"\r\n (onClear)=\"clear()\"\r\n [completeOnFocus]=\"true\"\r\n [fluid]=\"true\"\r\n [style]=\"{'width':'100%'}\"\r\n [appendTo]=\"appendTo\"\r\n [emptyMessage]=\"emptyMessage\"\r\n [lazy]=\"true\"\r\n optionLabel=\"displayName\"\r\n ></p-autocomplete>\r\n </div>\r\n</ng-container>" }]
369
+ ], template: "<ng-container *transloco=\"let t\">\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\"> <!-- 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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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 </div>\n</ng-container>" }]
370
370
  }], ctorParameters: () => [{ type: i1.TranslocoService }, { type: ValidatorAbstractService }], propDecorators: { appendTo: [{
371
371
  type: Input
372
372
  }], showClear: [{
@@ -389,7 +389,7 @@ class SpiderlyCalendarComponent extends BaseControl {
389
389
  setDate(event) {
390
390
  }
391
391
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyCalendarComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
392
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyCalendarComponent, isStandalone: true, selector: "spiderly-calendar", inputs: { showTime: "showTime" }, usesInheritance: true, ngImport: i0, template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\" style=\"display: flex; align-items: center;\">\r\n <div>\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <!-- tabindex=\"-1\": Makes the element focusable, but removes it from the tab order. -->\r\n <i *ngIf=\"showTooltip\" class=\"{{tooltipIcon}}\" style=\"margin-left: 8px; cursor: pointer;\" [pTooltip]=\"tooltipText\" tabindex=\"-1\" tooltipEvent=\"focus\"></i>\r\n </div>\r\n <p-datepicker\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [formControl]=\"control\"\r\n (onBlur)=\"control.markAsDirty()\"\r\n dateFormat=\"dd.mm.yy.\"\r\n iconDisplay=\"input\" \r\n [showIcon]=\"true\" \r\n [showTime]=\"showTime\"\r\n (onSelect)=\"setDate($event)\"\r\n appendTo=\"body\"\r\n [fluid]=\"true\"\r\n />\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i4$1.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
392
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyCalendarComponent, isStandalone: true, selector: "spiderly-calendar", inputs: { showTime: "showTime" }, usesInheritance: true, ngImport: i0, template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\" style=\"display: flex; align-items: center;\">\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 *ngIf=\"showTooltip\" class=\"{{tooltipIcon}}\" style=\"margin-left: 8px; cursor: pointer;\" [pTooltip]=\"tooltipText\" tabindex=\"-1\" tooltipEvent=\"focus\"></i>\n </div>\n <p-datepicker\n *ngIf=\"control\"\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\n [formControl]=\"control\"\n (onBlur)=\"control.markAsDirty()\"\n dateFormat=\"dd.mm.yy.\"\n iconDisplay=\"input\" \n [showIcon]=\"true\" \n [showTime]=\"showTime\"\n (onSelect)=\"setDate($event)\"\n appendTo=\"body\"\n [fluid]=\"true\"\n />\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i4$1.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
393
393
  }
394
394
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyCalendarComponent, decorators: [{
395
395
  type: Component,
@@ -400,7 +400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
400
400
  DatePickerModule,
401
401
  TooltipModule,
402
402
  RequiredComponent
403
- ], template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\" style=\"display: flex; align-items: center;\">\r\n <div>\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <!-- tabindex=\"-1\": Makes the element focusable, but removes it from the tab order. -->\r\n <i *ngIf=\"showTooltip\" class=\"{{tooltipIcon}}\" style=\"margin-left: 8px; cursor: pointer;\" [pTooltip]=\"tooltipText\" tabindex=\"-1\" tooltipEvent=\"focus\"></i>\r\n </div>\r\n <p-datepicker\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [formControl]=\"control\"\r\n (onBlur)=\"control.markAsDirty()\"\r\n dateFormat=\"dd.mm.yy.\"\r\n iconDisplay=\"input\" \r\n [showIcon]=\"true\" \r\n [showTime]=\"showTime\"\r\n (onSelect)=\"setDate($event)\"\r\n appendTo=\"body\"\r\n [fluid]=\"true\"\r\n />\r\n</div>\r\n" }]
403
+ ], template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\" style=\"display: flex; align-items: center;\">\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 *ngIf=\"showTooltip\" class=\"{{tooltipIcon}}\" style=\"margin-left: 8px; cursor: pointer;\" [pTooltip]=\"tooltipText\" tabindex=\"-1\" tooltipEvent=\"focus\"></i>\n </div>\n <p-datepicker\n *ngIf=\"control\"\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\n [formControl]=\"control\"\n (onBlur)=\"control.markAsDirty()\"\n dateFormat=\"dd.mm.yy.\"\n iconDisplay=\"input\" \n [showIcon]=\"true\" \n [showTime]=\"showTime\"\n (onSelect)=\"setDate($event)\"\n appendTo=\"body\"\n [fluid]=\"true\"\n />\n</div>\n" }]
404
404
  }], ctorParameters: () => [{ type: i1.TranslocoService }], propDecorators: { showTime: [{
405
405
  type: Input
406
406
  }] } });
@@ -423,7 +423,7 @@ class SpiderlyCheckboxComponent extends BaseControl {
423
423
  super.ngOnInit();
424
424
  }
425
425
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyCheckboxComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
426
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyCheckboxComponent, isStandalone: true, selector: "spiderly-checkbox", inputs: { fakeLabel: "fakeLabel", initializeToFalse: "initializeToFalse", inlineLabel: "inlineLabel" }, outputs: { onChange: "onChange" }, usesInheritance: true, ngImport: i0, template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"inlineLabel === false && getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <div style=\"margin-top: 0.5rem; position: relative;\"> <!-- The margin-top is intentional: it vertically aligns the checkbox with other input controls that have greater height. -->\r\n <p-checkbox\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\" \r\n [formControl]=\"control\"\r\n [value]=\"inlineLabel ? label : null\"\r\n [id]=\"label\"\r\n [binary]=\"true\"\r\n (onChange)=\"change($event)\"\r\n />\r\n </div>\r\n</div>", styles: ["::ng-deep .p-checkbox-false .p-checkbox-box{border-color:var(--p-checkbox-checked-border-color);background:var(--p-checkbox-checked-background)}::ng-deep .p-checkbox-false .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box{border-color:var(--p-checkbox-checked-hover-border-color);background:var(--p-checkbox-checked-hover-background)}::ng-deep .p-checkbox-false .p-checkbox-false:has(.p-checkbox.p-disabled) .p-checkbox-false-icon{color:var(--p-checkbox-icon-disabled-color)}.p-checkbox-false-icon{position:absolute;top:3px;left:2.7px;font-size:12.25px;color:var(--p-checkbox-icon-checked-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i4$2.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
426
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyCheckboxComponent, isStandalone: true, selector: "spiderly-checkbox", inputs: { fakeLabel: "fakeLabel", initializeToFalse: "initializeToFalse", inlineLabel: "inlineLabel" }, outputs: { onChange: "onChange" }, usesInheritance: true, ngImport: i0, template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\n <div *ngIf=\"inlineLabel === false && getTranslatedLabel() != '' && getTranslatedLabel() != null\">\n <label>{{getTranslatedLabel()}}</label>\n <required *ngIf=\"control?.required && showRequired\"></required>\n </div>\n <div style=\"margin-top: 0.5rem; position: relative;\"> <!-- 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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\" \n [formControl]=\"control\"\n [value]=\"inlineLabel ? label : null\"\n [id]=\"label\"\n [binary]=\"true\"\n (onChange)=\"change($event)\"\n />\n </div>\n</div>", styles: ["::ng-deep .p-checkbox-false .p-checkbox-box{border-color:var(--p-checkbox-checked-border-color);background:var(--p-checkbox-checked-background)}::ng-deep .p-checkbox-false .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box{border-color:var(--p-checkbox-checked-hover-border-color);background:var(--p-checkbox-checked-hover-background)}::ng-deep .p-checkbox-false .p-checkbox-false:has(.p-checkbox.p-disabled) .p-checkbox-false-icon{color:var(--p-checkbox-icon-disabled-color)}.p-checkbox-false-icon{position:absolute;top:3px;left:2.7px;font-size:12.25px;color:var(--p-checkbox-icon-checked-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i4$2.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
427
427
  }
428
428
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyCheckboxComponent, decorators: [{
429
429
  type: Component,
@@ -434,7 +434,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
434
434
  CheckboxModule,
435
435
  TooltipModule,
436
436
  RequiredComponent
437
- ], template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"inlineLabel === false && getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <div style=\"margin-top: 0.5rem; position: relative;\"> <!-- The margin-top is intentional: it vertically aligns the checkbox with other input controls that have greater height. -->\r\n <p-checkbox\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\" \r\n [formControl]=\"control\"\r\n [value]=\"inlineLabel ? label : null\"\r\n [id]=\"label\"\r\n [binary]=\"true\"\r\n (onChange)=\"change($event)\"\r\n />\r\n </div>\r\n</div>", styles: ["::ng-deep .p-checkbox-false .p-checkbox-box{border-color:var(--p-checkbox-checked-border-color);background:var(--p-checkbox-checked-background)}::ng-deep .p-checkbox-false .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box{border-color:var(--p-checkbox-checked-hover-border-color);background:var(--p-checkbox-checked-hover-background)}::ng-deep .p-checkbox-false .p-checkbox-false:has(.p-checkbox.p-disabled) .p-checkbox-false-icon{color:var(--p-checkbox-icon-disabled-color)}.p-checkbox-false-icon{position:absolute;top:3px;left:2.7px;font-size:12.25px;color:var(--p-checkbox-icon-checked-color)}\n"] }]
437
+ ], template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\n <div *ngIf=\"inlineLabel === false && getTranslatedLabel() != '' && getTranslatedLabel() != null\">\n <label>{{getTranslatedLabel()}}</label>\n <required *ngIf=\"control?.required && showRequired\"></required>\n </div>\n <div style=\"margin-top: 0.5rem; position: relative;\"> <!-- 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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\" \n [formControl]=\"control\"\n [value]=\"inlineLabel ? label : null\"\n [id]=\"label\"\n [binary]=\"true\"\n (onChange)=\"change($event)\"\n />\n </div>\n</div>", styles: ["::ng-deep .p-checkbox-false .p-checkbox-box{border-color:var(--p-checkbox-checked-border-color);background:var(--p-checkbox-checked-background)}::ng-deep .p-checkbox-false .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box{border-color:var(--p-checkbox-checked-hover-border-color);background:var(--p-checkbox-checked-hover-background)}::ng-deep .p-checkbox-false .p-checkbox-false:has(.p-checkbox.p-disabled) .p-checkbox-false-icon{color:var(--p-checkbox-icon-disabled-color)}.p-checkbox-false-icon{position:absolute;top:3px;left:2.7px;font-size:12.25px;color:var(--p-checkbox-icon-checked-color)}\n"] }]
438
438
  }], ctorParameters: () => [{ type: i1.TranslocoService }], propDecorators: { fakeLabel: [{
439
439
  type: Input
440
440
  }], initializeToFalse: [{
@@ -460,7 +460,7 @@ class SpiderlyColorPickerComponent extends BaseControl {
460
460
  super.ngOnInit();
461
461
  }
462
462
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyColorPickerComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
463
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyColorPickerComponent, isStandalone: true, selector: "spiderly-colorpicker", inputs: { showInputTextField: "showInputTextField" }, usesInheritance: true, ngImport: i0, template: "<!-- Can't put (onBlur) in this control -->\r\n\r\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <div style=\"display: flex; gap: 10px;\">\r\n <input\r\n *ngIf=\"control && showInputTextField\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n pInputText\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [id]=\"control.label\"\r\n (blur)=\"control.markAsDirty()\"\r\n [fluid]=\"true\"\r\n />\r\n <p-colorpicker\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [formControl]=\"control\"\r\n [id]=\"control.label\"\r\n (blur)=\"control.markAsDirty()\"\r\n appendTo=\"body\"\r\n ></p-colorpicker>\r\n </div>\r\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ColorPickerModule }, { kind: "component", type: i4$3.ColorPicker, selector: "p-colorPicker, p-colorpicker, p-color-picker", inputs: ["style", "styleClass", "inline", "format", "appendTo", "disabled", "tabindex", "inputId", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "autofocus"], outputs: ["onChange", "onShow", "onHide"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i5$1.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
463
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyColorPickerComponent, isStandalone: true, selector: "spiderly-colorpicker", inputs: { showInputTextField: "showInputTextField" }, usesInheritance: true, ngImport: i0, template: "<!-- 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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\n [formControl]=\"control\"\n [id]=\"control.label\"\n (blur)=\"control.markAsDirty()\"\n appendTo=\"body\"\n ></p-colorpicker>\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ColorPickerModule }, { kind: "component", type: i4$3.ColorPicker, selector: "p-colorPicker, p-colorpicker, p-color-picker", inputs: ["style", "styleClass", "inline", "format", "appendTo", "disabled", "tabindex", "inputId", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "autofocus"], outputs: ["onChange", "onShow", "onHide"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i5$1.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
464
464
  }
465
465
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyColorPickerComponent, decorators: [{
466
466
  type: Component,
@@ -472,7 +472,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
472
472
  InputTextModule,
473
473
  TooltipModule,
474
474
  RequiredComponent
475
- ], template: "<!-- Can't put (onBlur) in this control -->\r\n\r\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <div style=\"display: flex; gap: 10px;\">\r\n <input\r\n *ngIf=\"control && showInputTextField\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n pInputText\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [id]=\"control.label\"\r\n (blur)=\"control.markAsDirty()\"\r\n [fluid]=\"true\"\r\n />\r\n <p-colorpicker\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [formControl]=\"control\"\r\n [id]=\"control.label\"\r\n (blur)=\"control.markAsDirty()\"\r\n appendTo=\"body\"\r\n ></p-colorpicker>\r\n </div>\r\n</div>" }]
475
+ ], template: "<!-- 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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\n [formControl]=\"control\"\n [id]=\"control.label\"\n (blur)=\"control.markAsDirty()\"\n appendTo=\"body\"\n ></p-colorpicker>\n </div>\n</div>" }]
476
476
  }], ctorParameters: () => [{ type: i1.TranslocoService }], propDecorators: { showInputTextField: [{
477
477
  type: Input
478
478
  }] } });
@@ -498,7 +498,7 @@ class SpiderlyDropdownComponent extends BaseDropdownControl {
498
498
  this.onChange.next(event);
499
499
  }
500
500
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyDropdownComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
501
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyDropdownComponent, isStandalone: true, selector: "spiderly-dropdown", inputs: { isBooleanPicker: "isBooleanPicker" }, outputs: { onChange: "onChange" }, usesInheritance: true, ngImport: i0, template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n <!-- tabindex=\"-1\": Makes the element focusable, but removes it from the tab order. -->\r\n <i *ngIf=\"showTooltip\" class=\"{{tooltipIcon}}\" style=\"margin-left: 5px; cursor: pointer;\" [pTooltip]=\"tooltipText\" tabindex=\"-1\" tooltipEvent=\"focus\"></i>\r\n </div>\r\n\r\n <!-- Don't support p-inputgroup -->\r\n <p-select\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\" \r\n [id]=\"label\"\r\n [formControl]=\"control\"\r\n [placeholder]=\"placeholder\"\r\n [options]=\"options\"\r\n optionLabel=\"displayName\"\r\n optionValue=\"id\"\r\n [showClear]=\"true\"\r\n (onHide)=\"dropdownMarkAsDirty()\"\r\n (onChange)=\"change($event)\"\r\n [fluid]=\"true\"\r\n appendTo=\"body\"\r\n />\r\n \r\n</div>", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i3$1.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
501
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyDropdownComponent, isStandalone: true, selector: "spiderly-dropdown", inputs: { isBooleanPicker: "isBooleanPicker" }, outputs: { onChange: "onChange" }, usesInheritance: true, ngImport: i0, template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\n\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 *ngIf=\"showTooltip\" class=\"{{tooltipIcon}}\" style=\"margin-left: 5px; cursor: pointer;\" [pTooltip]=\"tooltipText\" tabindex=\"-1\" tooltipEvent=\"focus\"></i>\n </div>\n\n <!-- Don't support p-inputgroup -->\n <p-select\n *ngIf=\"control\"\n [pTooltip]=\"getValidationErrrorMessages()\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\" \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 \n</div>", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i3$1.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
502
502
  }
503
503
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyDropdownComponent, decorators: [{
504
504
  type: Component,
@@ -509,7 +509,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
509
509
  TooltipModule,
510
510
  CommonModule,
511
511
  RequiredComponent,
512
- ], template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n <!-- tabindex=\"-1\": Makes the element focusable, but removes it from the tab order. -->\r\n <i *ngIf=\"showTooltip\" class=\"{{tooltipIcon}}\" style=\"margin-left: 5px; cursor: pointer;\" [pTooltip]=\"tooltipText\" tabindex=\"-1\" tooltipEvent=\"focus\"></i>\r\n </div>\r\n\r\n <!-- Don't support p-inputgroup -->\r\n <p-select\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\" \r\n [id]=\"label\"\r\n [formControl]=\"control\"\r\n [placeholder]=\"placeholder\"\r\n [options]=\"options\"\r\n optionLabel=\"displayName\"\r\n optionValue=\"id\"\r\n [showClear]=\"true\"\r\n (onHide)=\"dropdownMarkAsDirty()\"\r\n (onChange)=\"change($event)\"\r\n [fluid]=\"true\"\r\n appendTo=\"body\"\r\n />\r\n \r\n</div>" }]
512
+ ], template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\n\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 *ngIf=\"showTooltip\" class=\"{{tooltipIcon}}\" style=\"margin-left: 5px; cursor: pointer;\" [pTooltip]=\"tooltipText\" tabindex=\"-1\" tooltipEvent=\"focus\"></i>\n </div>\n\n <!-- Don't support p-inputgroup -->\n <p-select\n *ngIf=\"control\"\n [pTooltip]=\"getValidationErrrorMessages()\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\" \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 \n</div>" }]
513
513
  }], ctorParameters: () => [{ type: i1.TranslocoService }], propDecorators: { isBooleanPicker: [{
514
514
  type: Input
515
515
  }], onChange: [{
@@ -542,7 +542,7 @@ class SpiderlyEditorComponent extends BaseControl {
542
542
  };
543
543
  }
544
544
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyEditorComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
545
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyEditorComponent, isStandalone: true, selector: "spiderly-editor", viewQueries: [{ propertyName: "editor", first: true, predicate: Editor, descendants: true }, { propertyName: "tooltip", first: true, predicate: Tooltip, descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Can't put (onBlur) in this control -->\r\n\r\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n\r\n <!-- Disable doesn't work on this control -->\r\n <p-editor\r\n *ngIf=\"control\"\r\n [formControl]=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [readonly]=\"control.disabled\"\r\n [class]=\"control.invalid && control.dirty ? 'control-error-border' : ''\"\r\n [id]=\"control.label\"\r\n [placeholder]=\"placeholder\"\r\n (click)=\"onClick()\"\r\n [style]=\"{ height: '320px' }\"\r\n ></p-editor>\r\n\r\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: i4$4.Editor, selector: "p-editor", inputs: ["style", "styleClass", "placeholder", "formats", "modules", "bounds", "scrollingContainer", "debug", "readonly"], outputs: ["onInit", "onTextChange", "onSelectionChange"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
545
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyEditorComponent, isStandalone: true, selector: "spiderly-editor", viewQueries: [{ propertyName: "editor", first: true, predicate: Editor, descendants: true }, { propertyName: "tooltip", first: true, predicate: Tooltip, descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- 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\n <!-- Disable doesn't work on this control -->\n <p-editor\n *ngIf=\"control\"\n [formControl]=\"control\"\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\n [readonly]=\"control.disabled\"\n [class]=\"control.invalid && control.dirty ? 'control-error-border' : ''\"\n [id]=\"control.label\"\n [placeholder]=\"placeholder\"\n (click)=\"onClick()\"\n [style]=\"{ height: '320px' }\"\n ></p-editor>\n\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: i4$4.Editor, selector: "p-editor", inputs: ["style", "styleClass", "placeholder", "formats", "modules", "bounds", "scrollingContainer", "debug", "readonly"], outputs: ["onInit", "onTextChange", "onSelectionChange"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
546
546
  }
547
547
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyEditorComponent, decorators: [{
548
548
  type: Component,
@@ -553,7 +553,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
553
553
  EditorModule,
554
554
  TooltipModule,
555
555
  RequiredComponent
556
- ], template: "<!-- Can't put (onBlur) in this control -->\r\n\r\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n\r\n <!-- Disable doesn't work on this control -->\r\n <p-editor\r\n *ngIf=\"control\"\r\n [formControl]=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [readonly]=\"control.disabled\"\r\n [class]=\"control.invalid && control.dirty ? 'control-error-border' : ''\"\r\n [id]=\"control.label\"\r\n [placeholder]=\"placeholder\"\r\n (click)=\"onClick()\"\r\n [style]=\"{ height: '320px' }\"\r\n ></p-editor>\r\n\r\n</div>" }]
556
+ ], template: "<!-- 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\n <!-- Disable doesn't work on this control -->\n <p-editor\n *ngIf=\"control\"\n [formControl]=\"control\"\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\n [readonly]=\"control.disabled\"\n [class]=\"control.invalid && control.dirty ? 'control-error-border' : ''\"\n [id]=\"control.label\"\n [placeholder]=\"placeholder\"\n (click)=\"onClick()\"\n [style]=\"{ height: '320px' }\"\n ></p-editor>\n\n</div>" }]
557
557
  }], ctorParameters: () => [{ type: i1.TranslocoService }], propDecorators: { editor: [{
558
558
  type: ViewChild,
559
559
  args: [Editor]
@@ -634,7 +634,7 @@ class SpiderlyButtonComponent extends SpiderlyButtonBaseComponent {
634
634
  this.type = 'button';
635
635
  }
636
636
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
637
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyButtonComponent, isStandalone: true, selector: "spiderly-button", inputs: { type: "type" }, usesInheritance: true, ngImport: i0, template: "<p-button \r\n(onClick)=\"handleClick($event)\" \r\n[label]=\"label\" \r\n[icon]=\"icon\" \r\n[outlined]=\"outlined\" \r\n[styleClass]=\"styleClass\" \r\n[severity]=\"severity\" \r\n[rounded]=\"rounded\"\r\n[style]=\"style\"\r\n[class]=\"class\"\r\n[disabled]=\"disabled\"\r\n[size]=\"size\"\r\n[type]=\"type\"\r\n>\r\n <ng-content></ng-content>\r\n</p-button>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: SplitButtonModule }] }); }
637
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyButtonComponent, isStandalone: true, selector: "spiderly-button", inputs: { type: "type" }, usesInheritance: true, ngImport: i0, template: "<p-button \n(onClick)=\"handleClick($event)\" \n[label]=\"label\" \n[icon]=\"icon\" \n[outlined]=\"outlined\" \n[styleClass]=\"styleClass\" \n[severity]=\"severity\" \n[rounded]=\"rounded\"\n[style]=\"style\"\n[class]=\"class\"\n[disabled]=\"disabled\"\n[size]=\"size\"\n[type]=\"type\"\n>\n <ng-content></ng-content>\n</p-button>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: SplitButtonModule }] }); }
638
638
  }
639
639
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyButtonComponent, decorators: [{
640
640
  type: Component,
@@ -642,7 +642,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
642
642
  CommonModule,
643
643
  ButtonModule,
644
644
  SplitButtonModule
645
- ], template: "<p-button \r\n(onClick)=\"handleClick($event)\" \r\n[label]=\"label\" \r\n[icon]=\"icon\" \r\n[outlined]=\"outlined\" \r\n[styleClass]=\"styleClass\" \r\n[severity]=\"severity\" \r\n[rounded]=\"rounded\"\r\n[style]=\"style\"\r\n[class]=\"class\"\r\n[disabled]=\"disabled\"\r\n[size]=\"size\"\r\n[type]=\"type\"\r\n>\r\n <ng-content></ng-content>\r\n</p-button>" }]
645
+ ], template: "<p-button \n(onClick)=\"handleClick($event)\" \n[label]=\"label\" \n[icon]=\"icon\" \n[outlined]=\"outlined\" \n[styleClass]=\"styleClass\" \n[severity]=\"severity\" \n[rounded]=\"rounded\"\n[style]=\"style\"\n[class]=\"class\"\n[disabled]=\"disabled\"\n[size]=\"size\"\n[type]=\"type\"\n>\n <ng-content></ng-content>\n</p-button>" }]
646
646
  }], propDecorators: { type: [{
647
647
  type: Input
648
648
  }] } });
@@ -982,7 +982,7 @@ class SpiderlyFileComponent extends BaseControl {
982
982
  return isExcelFileType(mimeType);
983
983
  }
984
984
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyFileComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
985
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyFileComponent, isStandalone: true, selector: "spiderly-file", inputs: { objectId: "objectId", fileData: "fileData", acceptedFileTypes: "acceptedFileTypes", required: "required", multiple: "multiple", isCloudinaryFileData: "isCloudinaryFileData", files: "files" }, outputs: { onFileSelected: "onFileSelected", onFileRemoved: "onFileRemoved" }, usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\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. -->\r\n <required *ngIf=\"control?.required || required\"></required>\r\n </div>\r\n\r\n <p-fileUpload \r\n [files]=\"files\" \r\n [disabled]=\"disabled\" \r\n [name]=\"control?.label ?? label\" \r\n [multiple]=\"multiple\" \r\n [accept]=\"acceptedFileTypesCommaSeparated\" \r\n [maxFileSize]=\"1000000\" \r\n (onSelect)=\"filesSelected($event)\"\r\n [class]=\"control?.invalid && control?.dirty ? 'control-error-border' : ''\"\r\n >\r\n <ng-template pTemplate=\"header\" let-files let-chooseCallback=\"chooseCallback\" let-clearCallback=\"clearCallback\" let-uploadCallback=\"uploadCallback\">\r\n <div class=\"flex flex-wrap justify-content-between align-items-center flex-1 gap-2\">\r\n <div class=\"flex gap-2\">\r\n <spiderly-button [disabled]=\"disabled\" (onClick)=\"choose($event, chooseCallback)\" icon=\"pi pi-upload\" [rounded]=\"true\" [outlined]=\"true\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"content\" let-files let-removeFileCallback=\"removeFileCallback\">\r\n <div *ngIf=\"files.length > 0\">\r\n <div class=\"flex justify-content-center p-0 gap-5\">\r\n <div *ngFor=\"let file of files; let index = index\" class=\"card m-0 px-3 py-3 flex flex-column align-items-center gap-3\" style=\"justify-content: center; overflow: hidden;\">\r\n <div *ngIf=\"isImageFileType(file.type)\" class=\"image-container\">\r\n <img role=\"presentation\" [src]=\"file.objectURL\"/>\r\n </div>\r\n <div *ngIf=\"isExcelFileType(file.type)\" class=\"excel-container\">\r\n <div class=\"excel-details\">\r\n <i class=\"pi pi-file-excel\" style=\"color: green; margin-right: 4px;\"></i>\r\n <span class=\"file-name\">{{ file.name }}</span>\r\n </div>\r\n </div>\r\n <spiderly-button [disabled]=\"disabled\" icon=\"pi pi-times\" (onClick)=\"fileRemoved(removeFileCallback, index)\" [outlined]=\"true\" [rounded]=\"true\" severity=\"danger\" />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"file\"> </ng-template>\r\n <ng-template pTemplate=\"empty\">\r\n <div class=\"flex align-items-center justify-content-center flex-column\">\r\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-8xl text-400 border-400 mt-3\"></i>\r\n <p class=\"mt-4 mb-0\">{{t('DragAndDropFilesHereToUpload')}}</p>\r\n </div>\r\n </ng-template>\r\n </p-fileUpload>\r\n </div>\r\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i3$3.FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "directive", type: i1$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: RequiredComponent, selector: "required" }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
985
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyFileComponent, isStandalone: true, selector: "spiderly-file", inputs: { objectId: "objectId", fileData: "fileData", acceptedFileTypes: "acceptedFileTypes", required: "required", multiple: "multiple", isCloudinaryFileData: "isCloudinaryFileData", files: "files" }, outputs: { onFileSelected: "onFileSelected", onFileRemoved: "onFileRemoved" }, usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\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]=\"1000000\" \n (onSelect)=\"filesSelected($event)\"\n [class]=\"control?.invalid && control?.dirty ? 'control-error-border' : ''\"\n >\n <ng-template pTemplate=\"header\" let-files let-chooseCallback=\"chooseCallback\" let-clearCallback=\"clearCallback\" let-uploadCallback=\"uploadCallback\">\n <div class=\"flex flex-wrap justify-content-between align-items-center flex-1 gap-2\">\n <div class=\"flex gap-2\">\n <spiderly-button [disabled]=\"disabled\" (onClick)=\"choose($event, chooseCallback)\" icon=\"pi pi-upload\" [rounded]=\"true\" [outlined]=\"true\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"content\" let-files let-removeFileCallback=\"removeFileCallback\">\n <div *ngIf=\"files.length > 0\">\n <div class=\"flex justify-content-center p-0 gap-5\">\n <div *ngFor=\"let file of files; let index = index\" class=\"card m-0 px-3 py-3 flex flex-column align-items-center gap-3\" style=\"justify-content: center; overflow: hidden;\">\n <div *ngIf=\"isImageFileType(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 class=\"pi pi-file-excel\" style=\"color: green; margin-right: 4px;\"></i>\n <span class=\"file-name\">{{ file.name }}</span>\n </div>\n </div>\n <spiderly-button [disabled]=\"disabled\" icon=\"pi pi-times\" (onClick)=\"fileRemoved(removeFileCallback, index)\" [outlined]=\"true\" [rounded]=\"true\" severity=\"danger\" />\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"file\"> </ng-template>\n <ng-template pTemplate=\"empty\">\n <div class=\"flex align-items-center justify-content-center flex-column\">\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-8xl text-400 border-400 mt-3\"></i>\n <p class=\"mt-4 mb-0\">{{t('DragAndDropFilesHereToUpload')}}</p>\n </div>\n </ng-template>\n </p-fileUpload>\n </div>\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i3$3.FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "directive", type: i1$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: RequiredComponent, selector: "required" }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
986
986
  }
987
987
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyFileComponent, decorators: [{
988
988
  type: Component,
@@ -994,7 +994,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
994
994
  RequiredComponent,
995
995
  SpiderlyButtonComponent,
996
996
  TranslocoDirective
997
- ], template: "<ng-container *transloco=\"let t\">\r\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\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. -->\r\n <required *ngIf=\"control?.required || required\"></required>\r\n </div>\r\n\r\n <p-fileUpload \r\n [files]=\"files\" \r\n [disabled]=\"disabled\" \r\n [name]=\"control?.label ?? label\" \r\n [multiple]=\"multiple\" \r\n [accept]=\"acceptedFileTypesCommaSeparated\" \r\n [maxFileSize]=\"1000000\" \r\n (onSelect)=\"filesSelected($event)\"\r\n [class]=\"control?.invalid && control?.dirty ? 'control-error-border' : ''\"\r\n >\r\n <ng-template pTemplate=\"header\" let-files let-chooseCallback=\"chooseCallback\" let-clearCallback=\"clearCallback\" let-uploadCallback=\"uploadCallback\">\r\n <div class=\"flex flex-wrap justify-content-between align-items-center flex-1 gap-2\">\r\n <div class=\"flex gap-2\">\r\n <spiderly-button [disabled]=\"disabled\" (onClick)=\"choose($event, chooseCallback)\" icon=\"pi pi-upload\" [rounded]=\"true\" [outlined]=\"true\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"content\" let-files let-removeFileCallback=\"removeFileCallback\">\r\n <div *ngIf=\"files.length > 0\">\r\n <div class=\"flex justify-content-center p-0 gap-5\">\r\n <div *ngFor=\"let file of files; let index = index\" class=\"card m-0 px-3 py-3 flex flex-column align-items-center gap-3\" style=\"justify-content: center; overflow: hidden;\">\r\n <div *ngIf=\"isImageFileType(file.type)\" class=\"image-container\">\r\n <img role=\"presentation\" [src]=\"file.objectURL\"/>\r\n </div>\r\n <div *ngIf=\"isExcelFileType(file.type)\" class=\"excel-container\">\r\n <div class=\"excel-details\">\r\n <i class=\"pi pi-file-excel\" style=\"color: green; margin-right: 4px;\"></i>\r\n <span class=\"file-name\">{{ file.name }}</span>\r\n </div>\r\n </div>\r\n <spiderly-button [disabled]=\"disabled\" icon=\"pi pi-times\" (onClick)=\"fileRemoved(removeFileCallback, index)\" [outlined]=\"true\" [rounded]=\"true\" severity=\"danger\" />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"file\"> </ng-template>\r\n <ng-template pTemplate=\"empty\">\r\n <div class=\"flex align-items-center justify-content-center flex-column\">\r\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-8xl text-400 border-400 mt-3\"></i>\r\n <p class=\"mt-4 mb-0\">{{t('DragAndDropFilesHereToUpload')}}</p>\r\n </div>\r\n </ng-template>\r\n </p-fileUpload>\r\n </div>\r\n</ng-container>" }]
997
+ ], template: "<ng-container *transloco=\"let t\">\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\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]=\"1000000\" \n (onSelect)=\"filesSelected($event)\"\n [class]=\"control?.invalid && control?.dirty ? 'control-error-border' : ''\"\n >\n <ng-template pTemplate=\"header\" let-files let-chooseCallback=\"chooseCallback\" let-clearCallback=\"clearCallback\" let-uploadCallback=\"uploadCallback\">\n <div class=\"flex flex-wrap justify-content-between align-items-center flex-1 gap-2\">\n <div class=\"flex gap-2\">\n <spiderly-button [disabled]=\"disabled\" (onClick)=\"choose($event, chooseCallback)\" icon=\"pi pi-upload\" [rounded]=\"true\" [outlined]=\"true\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"content\" let-files let-removeFileCallback=\"removeFileCallback\">\n <div *ngIf=\"files.length > 0\">\n <div class=\"flex justify-content-center p-0 gap-5\">\n <div *ngFor=\"let file of files; let index = index\" class=\"card m-0 px-3 py-3 flex flex-column align-items-center gap-3\" style=\"justify-content: center; overflow: hidden;\">\n <div *ngIf=\"isImageFileType(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 class=\"pi pi-file-excel\" style=\"color: green; margin-right: 4px;\"></i>\n <span class=\"file-name\">{{ file.name }}</span>\n </div>\n </div>\n <spiderly-button [disabled]=\"disabled\" icon=\"pi pi-times\" (onClick)=\"fileRemoved(removeFileCallback, index)\" [outlined]=\"true\" [rounded]=\"true\" severity=\"danger\" />\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"file\"> </ng-template>\n <ng-template pTemplate=\"empty\">\n <div class=\"flex align-items-center justify-content-center flex-column\">\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-8xl text-400 border-400 mt-3\"></i>\n <p class=\"mt-4 mb-0\">{{t('DragAndDropFilesHereToUpload')}}</p>\n </div>\n </ng-template>\n </p-fileUpload>\n </div>\n</ng-container>" }]
998
998
  }], ctorParameters: () => [{ type: i1.TranslocoService }], propDecorators: { onFileSelected: [{
999
999
  type: Output
1000
1000
  }], onFileRemoved: [{
@@ -1035,7 +1035,7 @@ class SpiderlyMultiAutocompleteComponent extends BaseAutocompleteControl {
1035
1035
  this.onTextInput.next(event);
1036
1036
  }
1037
1037
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyMultiAutocompleteComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
1038
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyMultiAutocompleteComponent, isStandalone: true, selector: "spiderly-multiautocomplete", usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div>\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n\r\n <!-- Don't support p-inputgroup -->\r\n <!-- Showing label fix: https://github.com/primefaces/primeng/issues/17332#issuecomment-2922861294 -->\r\n <p-autocomplete \r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [id]=\"label\"\r\n [formControl]=\"control\"\r\n [placeholder]=\"placeholder\"\r\n [suggestions]=\"options\"\r\n (completeMethod)=\"search($event)\"\r\n [forceSelection]=\"true\"\r\n [multiple]=\"true\"\r\n [dropdown]=\"false\"\r\n [showClear]=\"true\"\r\n (onHide)=\"dropdownMarkAsDirty()\"\r\n [completeOnFocus]=\"true\"\r\n dropdownIcon=\"pi pi-plus\"\r\n [fluid]=\"true\"\r\n [style]=\"{'width': '100%'}\"\r\n appendTo=\"body\"\r\n optionLabel=\"displayName\"\r\n dataKey=\"id\"\r\n >\r\n </p-autocomplete>\r\n </div>\r\n</ng-container>", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i4.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "variant", "fluid"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: RequiredComponent, selector: "required" }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
1038
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyMultiAutocompleteComponent, isStandalone: true, selector: "spiderly-multiautocomplete", usesInheritance: true, ngImport: i0, template: "<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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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 </div>\n</ng-container>", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i4.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "variant", "fluid"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: RequiredComponent, selector: "required" }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
1039
1039
  }
1040
1040
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyMultiAutocompleteComponent, decorators: [{
1041
1041
  type: Component,
@@ -1047,7 +1047,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
1047
1047
  CommonModule,
1048
1048
  RequiredComponent,
1049
1049
  TranslocoDirective,
1050
- ], template: "<ng-container *transloco=\"let t\">\r\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div>\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n\r\n <!-- Don't support p-inputgroup -->\r\n <!-- Showing label fix: https://github.com/primefaces/primeng/issues/17332#issuecomment-2922861294 -->\r\n <p-autocomplete \r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [id]=\"label\"\r\n [formControl]=\"control\"\r\n [placeholder]=\"placeholder\"\r\n [suggestions]=\"options\"\r\n (completeMethod)=\"search($event)\"\r\n [forceSelection]=\"true\"\r\n [multiple]=\"true\"\r\n [dropdown]=\"false\"\r\n [showClear]=\"true\"\r\n (onHide)=\"dropdownMarkAsDirty()\"\r\n [completeOnFocus]=\"true\"\r\n dropdownIcon=\"pi pi-plus\"\r\n [fluid]=\"true\"\r\n [style]=\"{'width': '100%'}\"\r\n appendTo=\"body\"\r\n optionLabel=\"displayName\"\r\n dataKey=\"id\"\r\n >\r\n </p-autocomplete>\r\n </div>\r\n</ng-container>" }]
1050
+ ], template: "<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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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 </div>\n</ng-container>" }]
1051
1051
  }], ctorParameters: () => [{ type: i1.TranslocoService }] });
1052
1052
 
1053
1053
  class SpiderlyMultiSelectComponent extends BaseDropdownControl {
@@ -1059,7 +1059,7 @@ class SpiderlyMultiSelectComponent extends BaseDropdownControl {
1059
1059
  super.ngOnInit();
1060
1060
  }
1061
1061
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyMultiSelectComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
1062
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyMultiSelectComponent, isStandalone: true, selector: "spiderly-multiselect", usesInheritance: true, ngImport: i0, template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div>\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <p-multiSelect\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [id]=\"label\"\r\n [formControl]=\"control\"\r\n [options]=\"options\"\r\n optionLabel=\"displayName\"\r\n optionValue=\"id\"\r\n display=\"chip\"\r\n [maxSelectedLabels]=\"20\"\r\n [placeholder]=\"placeholder\"\r\n [fluid]=\"true\"\r\n appendTo=\"body\"\r\n />\r\n <!-- [virtualScroll]=\"true\" FT: I think that this is not doing anything, check -->\r\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\r\n we need to use this and dropdown control only on the client -->\r\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i4$5.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus", "highlightOnSelect"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
1062
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyMultiSelectComponent, isStandalone: true, selector: "spiderly-multiselect", usesInheritance: true, ngImport: i0, template: "<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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i4$5.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus", "highlightOnSelect"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
1063
1063
  }
1064
1064
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyMultiSelectComponent, decorators: [{
1065
1065
  type: Component,
@@ -1070,7 +1070,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
1070
1070
  MultiSelectModule,
1071
1071
  TooltipModule,
1072
1072
  RequiredComponent
1073
- ], template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div>\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <p-multiSelect\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [id]=\"label\"\r\n [formControl]=\"control\"\r\n [options]=\"options\"\r\n optionLabel=\"displayName\"\r\n optionValue=\"id\"\r\n display=\"chip\"\r\n [maxSelectedLabels]=\"20\"\r\n [placeholder]=\"placeholder\"\r\n [fluid]=\"true\"\r\n appendTo=\"body\"\r\n />\r\n <!-- [virtualScroll]=\"true\" FT: I think that this is not doing anything, check -->\r\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\r\n we need to use this and dropdown control only on the client -->\r\n</div>" }]
1073
+ ], template: "<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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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</div>" }]
1074
1074
  }], ctorParameters: () => [{ type: i1.TranslocoService }] });
1075
1075
 
1076
1076
  class SpiderlyNumberComponent extends BaseControl {
@@ -1084,7 +1084,7 @@ class SpiderlyNumberComponent extends BaseControl {
1084
1084
  super.ngOnInit();
1085
1085
  }
1086
1086
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyNumberComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
1087
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyNumberComponent, isStandalone: true, selector: "spiderly-number", inputs: { prefix: "prefix", showButtons: "showButtons", decimal: "decimal", maxFractionDigits: "maxFractionDigits" }, usesInheritance: true, ngImport: i0, template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"showLabel\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <p-inputNumber\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [formControl]=\"control\"\r\n [id]=\"control.label\"\r\n (onBlur)=\"control.markAsDirty()\"\r\n [prefix]=\"prefix\"\r\n [style]=\"{'width':'100%'}\"\r\n [inputStyle]=\"{'width':'100%'}\"\r\n [showButtons]=\"showButtons\"\r\n buttonLayout=\"horizontal\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n />\r\n </div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i4$6.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
1087
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyNumberComponent, isStandalone: true, selector: "spiderly-number", inputs: { prefix: "prefix", showButtons: "showButtons", decimal: "decimal", maxFractionDigits: "maxFractionDigits" }, usesInheritance: true, ngImport: i0, template: "<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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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 </div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i4$6.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
1088
1088
  }
1089
1089
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyNumberComponent, decorators: [{
1090
1090
  type: Component,
@@ -1095,7 +1095,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
1095
1095
  InputNumberModule,
1096
1096
  TooltipModule,
1097
1097
  RequiredComponent
1098
- ], template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"showLabel\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <p-inputNumber\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [formControl]=\"control\"\r\n [id]=\"control.label\"\r\n (onBlur)=\"control.markAsDirty()\"\r\n [prefix]=\"prefix\"\r\n [style]=\"{'width':'100%'}\"\r\n [inputStyle]=\"{'width':'100%'}\"\r\n [showButtons]=\"showButtons\"\r\n buttonLayout=\"horizontal\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n />\r\n </div>" }]
1098
+ ], template: "<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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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 </div>" }]
1099
1099
  }], ctorParameters: () => [{ type: i1.TranslocoService }], propDecorators: { prefix: [{
1100
1100
  type: Input
1101
1101
  }], showButtons: [{
@@ -1116,7 +1116,7 @@ class SpiderlyPasswordComponent extends BaseControl {
1116
1116
  super.ngOnInit();
1117
1117
  }
1118
1118
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyPasswordComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
1119
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyPasswordComponent, isStandalone: true, selector: "spiderly-password", inputs: { showPasswordStrength: "showPasswordStrength" }, usesInheritance: true, ngImport: i0, template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div>\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <p-password\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [formControl]=\"control\"\r\n [id]=\"control?.label\"\r\n [toggleMask]=\"true\"\r\n [feedback]=\"showPasswordStrength\"\r\n (onBlur)=\"control?.markAsDirty()\"\r\n [style]=\"{'width':'100%'}\"\r\n [inputStyle]=\"{'width':'100%'}\"\r\n />\r\n </div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: PasswordModule }, { kind: "component", type: i4$7.Password, selector: "p-password", inputs: ["ariaLabel", "fluid", "ariaLabelledBy", "label", "disabled", "promptLabel", "mediumRegex", "strongRegex", "weakLabel", "mediumLabel", "maxLength", "strongLabel", "inputId", "feedback", "appendTo", "toggleMask", "size", "inputStyleClass", "styleClass", "style", "inputStyle", "showTransitionOptions", "hideTransitionOptions", "autocomplete", "placeholder", "showClear", "autofocus", "variant", "tabindex"], outputs: ["onFocus", "onBlur", "onClear"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
1119
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyPasswordComponent, isStandalone: true, selector: "spiderly-password", inputs: { showPasswordStrength: "showPasswordStrength" }, usesInheritance: true, ngImport: i0, template: "<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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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 </div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: PasswordModule }, { kind: "component", type: i4$7.Password, selector: "p-password", inputs: ["ariaLabel", "fluid", "ariaLabelledBy", "label", "disabled", "promptLabel", "mediumRegex", "strongRegex", "weakLabel", "mediumLabel", "maxLength", "strongLabel", "inputId", "feedback", "appendTo", "toggleMask", "size", "inputStyleClass", "styleClass", "style", "inputStyle", "showTransitionOptions", "hideTransitionOptions", "autocomplete", "placeholder", "showClear", "autofocus", "variant", "tabindex"], outputs: ["onFocus", "onBlur", "onClear"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
1120
1120
  }
1121
1121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyPasswordComponent, decorators: [{
1122
1122
  type: Component,
@@ -1127,7 +1127,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
1127
1127
  PasswordModule,
1128
1128
  TooltipModule,
1129
1129
  RequiredComponent
1130
- ], template: "<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div>\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <p-password\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n [formControl]=\"control\"\r\n [id]=\"control?.label\"\r\n [toggleMask]=\"true\"\r\n [feedback]=\"showPasswordStrength\"\r\n (onBlur)=\"control?.markAsDirty()\"\r\n [style]=\"{'width':'100%'}\"\r\n [inputStyle]=\"{'width':'100%'}\"\r\n />\r\n </div>\r\n" }]
1130
+ ], template: "<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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\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 </div>\n" }]
1131
1131
  }], ctorParameters: () => [{ type: i1.TranslocoService }], propDecorators: { showPasswordStrength: [{
1132
1132
  type: Input
1133
1133
  }] } });
@@ -1141,7 +1141,7 @@ class SpiderlyTextareaComponent extends BaseControl {
1141
1141
  super.ngOnInit();
1142
1142
  }
1143
1143
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyTextareaComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
1144
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyTextareaComponent, isStandalone: true, selector: "spiderly-textarea", usesInheritance: true, ngImport: i0, template: "<!-- Can't put (onBlur) in this control -->\r\n\r\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div>\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <textarea\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n pTextarea\r\n [formControl]=\"control\"\r\n [id]=\"control.label\"\r\n (blur)=\"control.markAsDirty()\"\r\n [autoResize]=\"true\"\r\n [class]=\"control.disabled ? 'disabled' : ''\"\r\n ></textarea>\r\n </div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TextareaModule }, { kind: "directive", type: i4$8.Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "variant", "fluid", "pSize"], outputs: ["onResize"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
1144
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyTextareaComponent, isStandalone: true, selector: "spiderly-textarea", usesInheritance: true, ngImport: i0, template: "<!-- 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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\n pTextarea\n [formControl]=\"control\"\n [id]=\"control.label\"\n (blur)=\"control.markAsDirty()\"\n [autoResize]=\"true\"\n [class]=\"control.disabled ? 'disabled' : ''\"\n ></textarea>\n </div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TextareaModule }, { kind: "directive", type: i4$8.Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "variant", "fluid", "pSize"], outputs: ["onResize"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
1145
1145
  }
1146
1146
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyTextareaComponent, decorators: [{
1147
1147
  type: Component,
@@ -1152,7 +1152,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
1152
1152
  TextareaModule,
1153
1153
  TooltipModule,
1154
1154
  RequiredComponent
1155
- ], template: "<!-- Can't put (onBlur) in this control -->\r\n\r\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div>\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <textarea\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n pTextarea\r\n [formControl]=\"control\"\r\n [id]=\"control.label\"\r\n (blur)=\"control.markAsDirty()\"\r\n [autoResize]=\"true\"\r\n [class]=\"control.disabled ? 'disabled' : ''\"\r\n ></textarea>\r\n </div>" }]
1155
+ ], template: "<!-- 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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\n pTextarea\n [formControl]=\"control\"\n [id]=\"control.label\"\n (blur)=\"control.markAsDirty()\"\n [autoResize]=\"true\"\n [class]=\"control.disabled ? 'disabled' : ''\"\n ></textarea>\n </div>" }]
1156
1156
  }], ctorParameters: () => [{ type: i1.TranslocoService }] });
1157
1157
 
1158
1158
  class SpiderlyTextboxComponent extends BaseControl {
@@ -1169,7 +1169,7 @@ class SpiderlyTextboxComponent extends BaseControl {
1169
1169
  this.onButtonClick.next(null);
1170
1170
  }
1171
1171
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyTextboxComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
1172
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyTextboxComponent, isStandalone: true, selector: "spiderly-textbox", inputs: { showButton: "showButton", buttonIcon: "buttonIcon" }, outputs: { onButtonClick: "onButtonClick" }, usesInheritance: true, ngImport: i0, template: "<!-- Can't put (onBlur) in this control -->\r\n\r\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <div class=\"spiderly-inputgroup\">\r\n <input\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n pInputText\r\n [formControl]=\"control\"\r\n [id]=\"control.label\"\r\n (blur)=\"control.markAsDirty()\"\r\n [placeholder]=\"placeholder\"\r\n [fluid]=\"true\"\r\n />\r\n <span *ngIf=\"showButton\" (click)=\"buttonClick()\" class=\"spiderly-inputgroup-addon\">\r\n <i class=\"{{buttonIcon}}\"></i>\r\n </span>\r\n </div>\r\n</div>", styles: [".spiderly-inputgroup{display:flex;gap:8px}.spiderly-inputgroup-addon{width:38px;cursor:pointer;background-color:var(--p-primary-color);border-color:var(--p-primary-color);border-radius:var(--p-content-border-radius);display:flex}.spiderly-inputgroup-addon i{margin:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i5$1.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
1172
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyTextboxComponent, isStandalone: true, selector: "spiderly-textbox", inputs: { showButton: "showButton", buttonIcon: "buttonIcon" }, outputs: { onButtonClick: "onButtonClick" }, usesInheritance: true, ngImport: i0, template: "<!-- 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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\n pInputText\n [formControl]=\"control\"\n [id]=\"control.label\"\n (blur)=\"control.markAsDirty()\"\n [placeholder]=\"placeholder\"\n [fluid]=\"true\"\n />\n <span *ngIf=\"showButton\" (click)=\"buttonClick()\" class=\"spiderly-inputgroup-addon\">\n <i class=\"{{buttonIcon}}\"></i>\n </span>\n </div>\n</div>", styles: [".spiderly-inputgroup{display:flex;gap:8px}.spiderly-inputgroup-addon{width:38px;cursor:pointer;background-color:var(--p-primary-color);border-color:var(--p-primary-color);border-radius:var(--p-content-border-radius);display:flex}.spiderly-inputgroup-addon i{margin:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i5$1.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: RequiredComponent, selector: "required" }] }); }
1173
1173
  }
1174
1174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyTextboxComponent, decorators: [{
1175
1175
  type: Component,
@@ -1180,7 +1180,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
1180
1180
  InputTextModule,
1181
1181
  TooltipModule,
1182
1182
  RequiredComponent
1183
- ], template: "<!-- Can't put (onBlur) in this control -->\r\n\r\n<div style=\"display: flex; flex-direction: column; gap: 0.5rem;\">\r\n <div *ngIf=\"getTranslatedLabel() != '' && getTranslatedLabel() != null\">\r\n <label>{{getTranslatedLabel()}}</label>\r\n <required *ngIf=\"control?.required && showRequired\"></required>\r\n </div>\r\n <div class=\"spiderly-inputgroup\">\r\n <input\r\n *ngIf=\"control\"\r\n [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\r\n pInputText\r\n [formControl]=\"control\"\r\n [id]=\"control.label\"\r\n (blur)=\"control.markAsDirty()\"\r\n [placeholder]=\"placeholder\"\r\n [fluid]=\"true\"\r\n />\r\n <span *ngIf=\"showButton\" (click)=\"buttonClick()\" class=\"spiderly-inputgroup-addon\">\r\n <i class=\"{{buttonIcon}}\"></i>\r\n </span>\r\n </div>\r\n</div>", styles: [".spiderly-inputgroup{display:flex;gap:8px}.spiderly-inputgroup-addon{width:38px;cursor:pointer;background-color:var(--p-primary-color);border-color:var(--p-primary-color);border-radius:var(--p-content-border-radius);display:flex}.spiderly-inputgroup-addon i{margin:auto}\n"] }]
1183
+ ], template: "<!-- 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 [pTooltip]=\"getValidationErrrorMessages()\" [tooltipEvent]=\"errorMessageTooltipEvent\" tooltipPosition=\"bottom\" [tooltipDisabled]=\"control.valid\" tooltipStyleClass=\"spiderly-tooltip-invalid\"\n pInputText\n [formControl]=\"control\"\n [id]=\"control.label\"\n (blur)=\"control.markAsDirty()\"\n [placeholder]=\"placeholder\"\n [fluid]=\"true\"\n />\n <span *ngIf=\"showButton\" (click)=\"buttonClick()\" class=\"spiderly-inputgroup-addon\">\n <i class=\"{{buttonIcon}}\"></i>\n </span>\n </div>\n</div>", styles: [".spiderly-inputgroup{display:flex;gap:8px}.spiderly-inputgroup-addon{width:38px;cursor:pointer;background-color:var(--p-primary-color);border-color:var(--p-primary-color);border-radius:var(--p-content-border-radius);display:flex}.spiderly-inputgroup-addon i{margin:auto}\n"] }]
1184
1184
  }], ctorParameters: () => [{ type: i1.TranslocoService }], propDecorators: { showButton: [{
1185
1185
  type: Input
1186
1186
  }], buttonIcon: [{
@@ -1204,7 +1204,7 @@ class SpiderlyReturnButtonComponent {
1204
1204
  }
1205
1205
  }
1206
1206
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyReturnButtonComponent, deps: [{ token: i3$2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
1207
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyReturnButtonComponent, isStandalone: true, selector: "return-button", inputs: { navigateUrl: "navigateUrl" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <spiderly-button (onClick)=\"onReturn()\" [label]=\"t('Return')\" icon=\"pi pi-undo\" [outlined]=\"true\"></spiderly-button>\r\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
1207
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyReturnButtonComponent, isStandalone: true, selector: "return-button", inputs: { navigateUrl: "navigateUrl" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <spiderly-button (onClick)=\"onReturn()\" [label]=\"t('Return')\" icon=\"pi pi-undo\" [outlined]=\"true\"></spiderly-button>\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
1208
1208
  }
1209
1209
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyReturnButtonComponent, decorators: [{
1210
1210
  type: Component,
@@ -1213,7 +1213,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
1213
1213
  ButtonModule,
1214
1214
  SpiderlyButtonComponent,
1215
1215
  TranslocoDirective,
1216
- ], template: "<ng-container *transloco=\"let t\">\r\n <spiderly-button (onClick)=\"onReturn()\" [label]=\"t('Return')\" icon=\"pi pi-undo\" [outlined]=\"true\"></spiderly-button>\r\n</ng-container>" }]
1216
+ ], template: "<ng-container *transloco=\"let t\">\n <spiderly-button (onClick)=\"onReturn()\" [label]=\"t('Return')\" icon=\"pi pi-undo\" [outlined]=\"true\"></spiderly-button>\n</ng-container>" }]
1217
1217
  }], ctorParameters: () => [{ type: i3$2.Router }], propDecorators: { navigateUrl: [{
1218
1218
  type: Input
1219
1219
  }] } });
@@ -1307,372 +1307,553 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
1307
1307
  }]
1308
1308
  }] });
1309
1309
 
1310
- class IsAuthorizedForSaveEvent extends BaseEntity {
1311
- constructor({ isAuthorizedForSave, } = {}) {
1312
- super();
1313
- this.isAuthorizedForSave = isAuthorizedForSave;
1314
- }
1315
- static { this.typeName = 'IsAuthorizedForSaveEvent'; }
1316
- }
1317
-
1318
- class Namebook extends BaseEntity {
1319
- constructor({ id, displayName, } = {}) {
1320
- super();
1321
- this.id = id;
1322
- this.displayName = displayName;
1310
+ // When we call it, inside the console, it will show SpiderlyError: ...
1311
+ class SpiderlyError extends Error {
1312
+ constructor(message) {
1313
+ super(message);
1323
1314
  }
1324
- static { this.schema = {
1325
- id: {
1326
- type: 'any',
1327
- },
1328
- displayName: {
1329
- type: 'string',
1330
- },
1331
- }; }
1332
- static { this.typeName = 'Namebook'; }
1333
1315
  }
1334
1316
 
1335
- class UserBase extends BaseEntity {
1336
- static { this.typeName = 'UserBase'; }
1337
- constructor({ id, email, } = {}) {
1338
- super();
1339
- this.id = id;
1340
- this.email = email;
1341
- }
1342
- static { this.schema = {
1343
- id: {
1344
- type: 'number',
1345
- },
1346
- email: {
1347
- type: 'string',
1348
- },
1349
- }; }
1350
- }
1351
- class RolePermission extends BaseEntity {
1352
- static { this.typeName = 'RolePermission'; }
1353
- constructor({ roleDisplayName, roleId, permissionDisplayName, permissionId } = {}) {
1354
- super();
1355
- this.roleDisplayName = roleDisplayName;
1356
- this.roleId = roleId;
1357
- this.permissionDisplayName = permissionDisplayName;
1358
- this.permissionId = permissionId;
1359
- }
1360
- static { this.schema = {
1361
- roleDisplayName: {
1362
- type: 'string',
1363
- },
1364
- roleId: {
1365
- type: 'number',
1366
- },
1367
- permissionDisplayName: {
1368
- type: 'string',
1369
- },
1370
- permissionId: {
1371
- type: 'number',
1372
- },
1373
- }; }
1374
- }
1375
- class RolePermissionSaveBody extends BaseEntity {
1376
- static { this.typeName = 'RolePermissionSaveBody'; }
1377
- constructor({ rolePermissionDTO } = {}) {
1378
- super();
1379
- this.rolePermissionDTO = rolePermissionDTO;
1380
- }
1381
- static { this.schema = {
1382
- rolePermissionDTO: {
1383
- type: 'RolePermission',
1384
- get nestedConstructor() { return RolePermission; },
1385
- },
1386
- }; }
1387
- }
1388
- class AuthResult extends BaseEntity {
1389
- static { this.typeName = 'AuthResult'; }
1390
- constructor({ userId, email, accessToken, refreshToken } = {}) {
1391
- super();
1392
- this.userId = userId;
1393
- this.email = email;
1394
- this.accessToken = accessToken;
1395
- this.refreshToken = refreshToken;
1396
- }
1397
- static { this.schema = {
1398
- userId: {
1399
- type: 'number',
1400
- },
1401
- email: {
1402
- type: 'string',
1403
- },
1404
- accessToken: {
1405
- type: 'string',
1406
- },
1407
- refreshToken: {
1408
- type: 'string',
1409
- },
1410
- }; }
1411
- }
1412
- class VerificationTokenRequest extends BaseEntity {
1413
- static { this.typeName = 'VerificationTokenRequest'; }
1414
- constructor({ verificationCode, browserId, email } = {}) {
1415
- super();
1416
- this.verificationCode = verificationCode;
1417
- this.browserId = browserId;
1418
- this.email = email;
1419
- }
1420
- static { this.schema = {
1421
- verificationCode: {
1422
- type: 'string',
1423
- },
1424
- browserId: {
1425
- type: 'string',
1426
- },
1427
- email: {
1428
- type: 'string',
1429
- },
1430
- }; }
1431
- }
1432
- class ExternalProvider extends BaseEntity {
1433
- static { this.typeName = 'ExternalProvider'; }
1434
- constructor({ idToken, browserId } = {}) {
1435
- super();
1436
- this.idToken = idToken;
1437
- this.browserId = browserId;
1317
+ class SpiderlyMessageService {
1318
+ constructor(messageService, translocoService, ngZone) {
1319
+ this.messageService = messageService;
1320
+ this.translocoService = translocoService;
1321
+ this.ngZone = ngZone;
1438
1322
  }
1439
- static { this.schema = {
1440
- idToken: {
1441
- type: 'string',
1442
- },
1443
- browserId: {
1444
- type: 'string',
1445
- },
1446
- }; }
1447
- }
1448
- class UserRole extends BaseEntity {
1449
- static { this.typeName = 'UserRole'; }
1450
- constructor({ roleId, userId } = {}) {
1451
- super();
1452
- this.roleId = roleId;
1453
- this.userId = userId;
1323
+ successMessage(detail, title = this.translocoService.translate('SuccessfulAction')) {
1324
+ this.messageService.add({
1325
+ severity: 'success',
1326
+ summary: title,
1327
+ detail: detail,
1328
+ life: 10000,
1329
+ });
1454
1330
  }
1455
- static { this.schema = {
1456
- roleId: {
1457
- type: 'number',
1458
- },
1459
- userId: {
1460
- type: 'number',
1461
- },
1462
- }; }
1463
- }
1464
- class UserRoleSaveBody extends BaseEntity {
1465
- static { this.typeName = 'UserRoleSaveBody'; }
1466
- constructor({ userRoleDTO } = {}) {
1467
- super();
1468
- this.userRoleDTO = userRoleDTO;
1331
+ warningMessage(detail, title, sticky) {
1332
+ this.messageService.add({
1333
+ severity: 'warn',
1334
+ summary: title ?? this.translocoService.translate('Warning'),
1335
+ detail: detail,
1336
+ life: 10000,
1337
+ sticky: sticky
1338
+ });
1469
1339
  }
1470
- static { this.schema = {
1471
- userRoleDTO: {
1472
- type: 'UserRole',
1473
- get nestedConstructor() { return UserRole; },
1474
- },
1475
- }; }
1476
- }
1477
- class LoginVerificationToken extends BaseEntity {
1478
- static { this.typeName = 'LoginVerificationToken'; }
1479
- constructor({ email, userId, browserId, expireAt } = {}) {
1480
- super();
1481
- this.email = email;
1482
- this.userId = userId;
1483
- this.browserId = browserId;
1484
- this.expireAt = expireAt;
1340
+ errorMessage(detail, title = this.translocoService.translate('Error')) {
1341
+ this.messageService.add({
1342
+ severity: 'error',
1343
+ summary: title,
1344
+ detail: detail,
1345
+ life: 10000,
1346
+ });
1485
1347
  }
1486
- static { this.schema = {
1487
- email: {
1488
- type: 'string',
1489
- },
1490
- userId: {
1491
- type: 'number',
1492
- },
1493
- browserId: {
1494
- type: 'string',
1495
- },
1496
- expireAt: {
1497
- type: 'Date',
1498
- },
1499
- }; }
1500
- }
1501
- class Login extends BaseEntity {
1502
- static { this.typeName = 'Login'; }
1503
- constructor({ email, browserId } = {}) {
1504
- super();
1505
- this.email = email;
1506
- this.browserId = browserId;
1348
+ infoMessage(detail, title, sticky) {
1349
+ this.messageService.add({
1350
+ severity: 'info',
1351
+ summary: title ?? this.translocoService.translate('Info'),
1352
+ detail: detail,
1353
+ life: 10000,
1354
+ sticky: sticky,
1355
+ });
1507
1356
  }
1508
- static { this.schema = {
1509
- email: {
1510
- type: 'string',
1511
- },
1512
- browserId: {
1513
- type: 'string',
1514
- },
1515
- }; }
1357
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyMessageService, deps: [{ token: i1$2.MessageService }, { token: i1.TranslocoService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
1358
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyMessageService, providedIn: 'root' }); }
1516
1359
  }
1517
- class RefreshTokenRequest extends BaseEntity {
1518
- static { this.typeName = 'RefreshTokenRequest'; }
1519
- constructor({ refreshToken, browserId } = {}) {
1520
- super();
1521
- this.refreshToken = refreshToken;
1522
- this.browserId = browserId;
1360
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyMessageService, decorators: [{
1361
+ type: Injectable,
1362
+ args: [{
1363
+ providedIn: 'root',
1364
+ }]
1365
+ }], ctorParameters: () => [{ type: i1$2.MessageService }, { type: i1.TranslocoService }, { type: i0.NgZone }] });
1366
+
1367
+ class TranslateLabelsAbstractService {
1368
+ constructor() {
1523
1369
  }
1524
- static { this.schema = {
1525
- refreshToken: {
1526
- type: 'string',
1527
- },
1528
- browserId: {
1529
- type: 'string',
1530
- },
1531
- }; }
1370
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TranslateLabelsAbstractService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1371
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TranslateLabelsAbstractService, providedIn: 'root' }); }
1532
1372
  }
1533
- class Role extends BaseEntity {
1534
- static { this.typeName = 'Role'; }
1535
- constructor({ name, description, version, id, createdAt, modifiedAt } = {}) {
1536
- super();
1537
- this.name = name;
1538
- this.description = description;
1539
- this.version = version;
1540
- this.id = id;
1541
- this.createdAt = createdAt;
1542
- this.modifiedAt = modifiedAt;
1543
- }
1544
- static { this.schema = {
1545
- name: {
1546
- type: 'string',
1547
- },
1548
- description: {
1549
- type: 'string',
1550
- },
1551
- version: {
1552
- type: 'number',
1553
- },
1554
- id: {
1555
- type: 'number',
1373
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TranslateLabelsAbstractService, decorators: [{
1374
+ type: Injectable,
1375
+ args: [{
1376
+ providedIn: 'root',
1377
+ }]
1378
+ }], ctorParameters: () => [] });
1379
+
1380
+ class BaseFormService {
1381
+ constructor(translateLabelsService, validatorService, messageService, translocoService) {
1382
+ this.translateLabelsService = translateLabelsService;
1383
+ this.validatorService = validatorService;
1384
+ this.messageService = messageService;
1385
+ this.translocoService = translocoService;
1386
+ this.initFormGroup = (formGroup, targetClass, initialValues, updateOnChangeControls) => {
1387
+ if (!formGroup)
1388
+ throw new SpiderlyError('You need to instantiate the form group.');
1389
+ if (!targetClass)
1390
+ throw new SpiderlyError('You need to pass targetClass.');
1391
+ if (!initialValues)
1392
+ initialValues = {};
1393
+ Object.keys(targetClass.schema).forEach((formControlName) => {
1394
+ const propSchema = targetClass.schema[formControlName];
1395
+ let propInitialValue = initialValues[formControlName];
1396
+ const existingControl = formGroup.get(formControlName);
1397
+ if (propSchema.type.endsWith('[]') &&
1398
+ propSchema.nestedConstructor &&
1399
+ propSchema.type !== 'Namebook[]') {
1400
+ if (existingControl instanceof SpiderlyFormArray) {
1401
+ this.initFormArray(existingControl, propSchema.nestedConstructor, propInitialValue);
1402
+ }
1403
+ else {
1404
+ const control = new SpiderlyFormArray([], this.translocoService, this);
1405
+ this.initFormArray(control, propSchema.nestedConstructor, propInitialValue);
1406
+ control.label = formControlName;
1407
+ control.labelForDisplay = this.getTranslatedLabel(formControlName);
1408
+ formGroup.setControl(formControlName, control);
1409
+ }
1410
+ }
1411
+ else if (propSchema.nestedConstructor &&
1412
+ propSchema.type !== 'Namebook[]') {
1413
+ if (existingControl instanceof SpiderlyFormGroup) {
1414
+ this.initFormGroup(existingControl, propSchema.nestedConstructor, propInitialValue);
1415
+ }
1416
+ else {
1417
+ const control = new SpiderlyFormGroup({});
1418
+ this.initFormGroup(control, propSchema.nestedConstructor, propInitialValue);
1419
+ formGroup.setControl(formControlName, control);
1420
+ }
1421
+ }
1422
+ else {
1423
+ // 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.
1424
+ if (formControlName === 'id' && !propInitialValue) {
1425
+ propInitialValue = 0;
1426
+ }
1427
+ if (existingControl instanceof SpiderlyFormControl) {
1428
+ existingControl.setValue(propInitialValue);
1429
+ }
1430
+ else {
1431
+ let control;
1432
+ if (updateOnChangeControls?.includes(formControlName) ||
1433
+ (formControlName.endsWith('Id') && formControlName.length > 2) ||
1434
+ propSchema.type === 'Date' ||
1435
+ propSchema.type === 'Namebook[]') {
1436
+ control = new SpiderlyFormControl(propInitialValue, { updateOn: 'change' });
1437
+ }
1438
+ else {
1439
+ control = new SpiderlyFormControl(propInitialValue, { updateOn: 'blur' });
1440
+ }
1441
+ control.label = formControlName;
1442
+ control.labelForDisplay = this.getTranslatedLabel(formControlName);
1443
+ control.parentClassName = targetClass.typeName;
1444
+ this.validatorService.setValidator(control, targetClass.typeName);
1445
+ formGroup.setControl(formControlName, control);
1446
+ }
1447
+ }
1448
+ });
1449
+ formGroup.targetClass = targetClass;
1450
+ return formGroup;
1451
+ };
1452
+ //#region Helpers
1453
+ this.showInvalidFieldsMessage = () => {
1454
+ this.messageService.warningMessage(this.translocoService.translate('YouHaveSomeInvalidFieldsDescription'), this.translocoService.translate('YouHaveSomeInvalidFieldsTitle'));
1455
+ };
1456
+ this.getSaveBodyMainDTOKey = (saveBodyClass) => {
1457
+ const schema = saveBodyClass.schema;
1458
+ return Object.keys(schema).find(k => schema[k].isSaveBodyMainDTO === true);
1459
+ };
1460
+ this.mapMainUIFormToSaveBody = (mainUIFormClass, mainUIFormValues) => {
1461
+ let saveBody = {};
1462
+ Object.keys(mainUIFormClass.schema).forEach(propName => {
1463
+ const property = mainUIFormClass.schema[propName];
1464
+ const value = mainUIFormValues[propName];
1465
+ // Handle ordered one-to-many (e.g., "orderedItemsMainUIFormDTO" -> "orderedItemsSaveBodyDTO")
1466
+ if (propName.startsWith('ordered') && propName.endsWith('MainUIFormDTO')) {
1467
+ const newKey = propName.replace('MainUIFormDTO', 'SaveBodyDTO');
1468
+ // Recursively map nested DTOs
1469
+ const relatedEntity = property.nestedConstructor;
1470
+ saveBody[newKey] = value?.map(item => this.mapMainUIFormToSaveBody(relatedEntity, item)) ?? [];
1471
+ }
1472
+ // Handle multi-select (e.g., "itemsIds" -> "selectedItemsIds")
1473
+ else if (propName.endsWith('Ids')) {
1474
+ saveBody[`selected${capitalizeFirstChar(propName)}`] = value ?? [];
1475
+ }
1476
+ // Handle multi-autocomplete (e.g., "itemsNamebookDTOList" -> "selectedItemsIds")
1477
+ else if (propName.endsWith('NamebookDTOList')) {
1478
+ saveBody[`selected${capitalizeFirstChar(propName)}`] = value ?? [];
1479
+ }
1480
+ // Handle the main DTO object (e.g., "entityDTO")
1481
+ else {
1482
+ saveBody[propName] = value;
1483
+ }
1484
+ });
1485
+ return saveBody;
1486
+ };
1487
+ }
1488
+ getTranslatedLabel(formControlName) {
1489
+ if (formControlName.endsWith('Id') && formControlName.length > 2) {
1490
+ formControlName = formControlName.substring(0, formControlName.length - 2);
1491
+ }
1492
+ else if (formControlName.endsWith('DisplayName')) {
1493
+ formControlName = formControlName.replace('DisplayName', '');
1494
+ }
1495
+ return this.translateLabelsService.translate(formControlName);
1496
+ }
1497
+ addNewFormGroupToFormArray(formArray, targetClass, initialValues, index) {
1498
+ let helperFormGroup = new SpiderlyFormGroup({});
1499
+ this.initFormGroup(helperFormGroup, targetClass, initialValues);
1500
+ if (index == null) {
1501
+ formArray.push(helperFormGroup);
1502
+ }
1503
+ else {
1504
+ formArray.insert(index, helperFormGroup);
1505
+ }
1506
+ return helperFormGroup;
1507
+ }
1508
+ removeFormControlFromTheFormArray(formArray, index) {
1509
+ if (index == null)
1510
+ throw new SpiderlyError('Can not pass null index.');
1511
+ formArray.removeAt(index);
1512
+ }
1513
+ initFormArray(formArray, targetClass, initialValues = []) {
1514
+ if (!formArray)
1515
+ throw new SpiderlyError('You must pass a FormArray instance to be initialized or updated.');
1516
+ if (!targetClass)
1517
+ throw new SpiderlyError('You did not initialize targetClass');
1518
+ formArray.formGroupInitialValues = {}; // When we need we can pass formGroupInitialValues to this method instead of assigning it to empty object
1519
+ formArray.targetClass = targetClass;
1520
+ initialValues.forEach((model, index) => {
1521
+ const existingControl = formArray.at(index);
1522
+ if (existingControl instanceof SpiderlyFormGroup) {
1523
+ this.initFormGroup(existingControl, targetClass, model);
1524
+ }
1525
+ else {
1526
+ let helperFormGroup = new SpiderlyFormGroup({});
1527
+ this.initFormGroup(helperFormGroup, targetClass, model);
1528
+ formArray.push(helperFormGroup);
1529
+ }
1530
+ });
1531
+ return formArray;
1532
+ }
1533
+ generateNewNegativeId(formArray) {
1534
+ return -formArray.getRawValue().filter(x => x.id < 0).length - 1;
1535
+ }
1536
+ isControlValid(control, controlNamesFromHtml) {
1537
+ let invalid = false;
1538
+ if (control instanceof SpiderlyFormControl) {
1539
+ if (control.invalid &&
1540
+ (controlNamesFromHtml == null || controlNamesFromHtml?.includes(control.label))) {
1541
+ control.markAsDirty();
1542
+ invalid = true;
1543
+ }
1544
+ }
1545
+ else if (control instanceof SpiderlyFormGroup) {
1546
+ Object.keys(control.controls).forEach(key => {
1547
+ const nestedControl = control.controls[key];
1548
+ if (!this.isControlValid(nestedControl, control.controlNamesFromHtml)) {
1549
+ invalid = true;
1550
+ }
1551
+ });
1552
+ }
1553
+ else if (control instanceof SpiderlyFormArray) {
1554
+ control.controls.forEach((nestedControl) => {
1555
+ if (!this.isControlValid(nestedControl)) {
1556
+ invalid = true;
1557
+ }
1558
+ });
1559
+ }
1560
+ if (invalid) {
1561
+ return false;
1562
+ }
1563
+ return true;
1564
+ }
1565
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: BaseFormService, deps: [{ token: TranslateLabelsAbstractService }, { token: ValidatorAbstractService }, { token: SpiderlyMessageService }, { token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1566
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: BaseFormService, providedIn: 'root' }); }
1567
+ }
1568
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: BaseFormService, decorators: [{
1569
+ type: Injectable,
1570
+ args: [{
1571
+ providedIn: 'root',
1572
+ }]
1573
+ }], ctorParameters: () => [{ type: TranslateLabelsAbstractService }, { type: ValidatorAbstractService }, { type: SpiderlyMessageService }, { type: i1.TranslocoService }] });
1574
+
1575
+ class BaseFormCopy {
1576
+ constructor(differs, http, messageService, changeDetectorRef, router, route, translocoService, baseFormService) {
1577
+ this.differs = differs;
1578
+ this.http = http;
1579
+ this.messageService = messageService;
1580
+ this.changeDetectorRef = changeDetectorRef;
1581
+ this.router = router;
1582
+ this.route = route;
1583
+ this.translocoService = translocoService;
1584
+ this.baseFormService = baseFormService;
1585
+ this.parentFormGroup = new SpiderlyFormGroup({});
1586
+ this.successfulSaveToastDescription = this.translocoService.translate('SuccessfulSaveToastDescription');
1587
+ //#region Model
1588
+ // onSave method is here only because of the hooks, we should move everything except them to the BaseFromService
1589
+ this.onSave = (reroute = true) => {
1590
+ if (!this.saveBodyClass)
1591
+ throw new SpiderlyError('You did not initialize saveBodyClass');
1592
+ if (!this.mainUIFormClass)
1593
+ throw new SpiderlyError('You did not initialize mainUIFormClass');
1594
+ this.saveBody = this.parentFormGroup.initSaveBody();
1595
+ this.onBeforeSave(this.saveBody);
1596
+ this.saveBody = this.saveBody ?? this.parentFormGroup.getRawValue();
1597
+ const isValid = this.baseFormService.isControlValid(this.parentFormGroup);
1598
+ if (isValid) {
1599
+ this.parentFormGroup.saveObservableMethod(this.saveBody).subscribe(res => {
1600
+ this.messageService.successMessage(this.successfulSaveToastDescription);
1601
+ this.baseFormService.initFormGroup(this.parentFormGroup, this.mainUIFormClass, res);
1602
+ if (reroute) {
1603
+ const saveBodyMainDTOKey = this.baseFormService.getSaveBodyMainDTOKey(this.saveBodyClass);
1604
+ const savedObjectId = res[saveBodyMainDTOKey]?.id;
1605
+ this.rerouteToSavedObject(savedObjectId); // You always need to have id, because of id == 0 and version change
1606
+ }
1607
+ this.onAfterSave();
1608
+ });
1609
+ this.onAfterSaveRequest();
1610
+ }
1611
+ else {
1612
+ this.baseFormService.showInvalidFieldsMessage();
1613
+ }
1614
+ };
1615
+ this.rerouteToSavedObject = (rerouteId) => {
1616
+ if (rerouteId == null) {
1617
+ const currentUrl = this.router.url;
1618
+ const parentUrl = getParentUrl(currentUrl);
1619
+ this.router.navigateByUrl(parentUrl);
1620
+ return;
1621
+ }
1622
+ const segments = this.router.url.split('/');
1623
+ segments[segments.length - 1] = rerouteId.toString();
1624
+ const newUrl = segments.join('/');
1625
+ this.router.navigateByUrl(newUrl);
1626
+ };
1627
+ this.onBeforeSave = (saveBody) => { };
1628
+ this.onAfterSave = () => { };
1629
+ this.onAfterSaveRequest = () => { };
1630
+ }
1631
+ ngOnInit() {
1632
+ }
1633
+ //#endregion
1634
+ //#region Model List
1635
+ getFormArrayControlByIndex(formControlName, formArray, index, filter) {
1636
+ // if(formArray.controlNamesFromHtml.findIndex(x => x === formControlName) === -1)
1637
+ // formArray.controlNamesFromHtml.push(formControlName);
1638
+ let filteredFormGroups;
1639
+ if (filter) {
1640
+ filteredFormGroups = filter(formArray.controls);
1641
+ }
1642
+ else {
1643
+ return formArray.controls[index].controls[formControlName];
1644
+ }
1645
+ return filteredFormGroups[index]?.controls[formControlName]; // FT: Don't change this. It's always possible that change detection occurs before something.
1646
+ }
1647
+ getFormArrayControls(formControlName, formArray, filter) {
1648
+ // if(formArray.controlNamesFromHtml.findIndex(x => x === formControlName) === -1)
1649
+ // formArray.controlNamesFromHtml.push(formControlName);
1650
+ let filteredFormGroups;
1651
+ if (filter) {
1652
+ filteredFormGroups = filter(formArray.controls);
1653
+ }
1654
+ else {
1655
+ return formArray.controls.map(x => x.controls[formControlName]);
1656
+ }
1657
+ return filteredFormGroups.map(x => x.controls[formControlName]);
1658
+ }
1659
+ removeFormControlsFromTheFormArray(formArray, indexes) {
1660
+ // Sort indexes in descending order to avoid index shifts when removing controls
1661
+ const sortedIndexes = indexes.sort((a, b) => b - a);
1662
+ sortedIndexes.forEach(index => {
1663
+ if (index >= 0 && index < formArray.length) {
1664
+ formArray.removeAt(index);
1665
+ }
1666
+ });
1667
+ }
1668
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: BaseFormCopy, deps: [{ token: i0.KeyValueDiffers }, { token: i1$3.HttpClient }, { token: SpiderlyMessageService }, { token: i0.ChangeDetectorRef }, { token: i3$2.Router }, { token: i3$2.ActivatedRoute }, { token: i1.TranslocoService }, { token: BaseFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1669
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: BaseFormCopy, isStandalone: false, selector: "base-form", ngImport: i0, template: '', isInline: true }); }
1670
+ }
1671
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: BaseFormCopy, decorators: [{
1672
+ type: Component,
1673
+ args: [{ selector: 'base-form', template: '', standalone: false }]
1674
+ }], ctorParameters: () => [{ type: i0.KeyValueDiffers }, { type: i1$3.HttpClient }, { type: SpiderlyMessageService }, { type: i0.ChangeDetectorRef }, { type: i3$2.Router }, { type: i3$2.ActivatedRoute }, { type: i1.TranslocoService }, { type: BaseFormService }] });
1675
+
1676
+ class CardSkeletonComponent {
1677
+ constructor() {
1678
+ this.height = 400;
1679
+ this.titleHeight = 23;
1680
+ this.padding = 21;
1681
+ this.titleMarginBottom = 14;
1682
+ this.titleMarginTop = 4;
1683
+ }
1684
+ ngOnInit() {
1685
+ this.dataHeight = this.height - (this.titleHeight + this.padding * 2 + this.titleMarginBottom + this.titleMarginTop);
1686
+ }
1687
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: CardSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1688
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: CardSkeletonComponent, isStandalone: true, selector: "card-skeleton", inputs: { height: "height" }, ngImport: i0, template: "<div class=\"border-round border-1 surface-border p-4 surface-card\" [style]=\"'height: ' + height + 'px;'\">\n <div [style]=\"'margin-bottom:' + titleMarginBottom + 'px; margin-top:' + titleMarginTop + 'px;'\">\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>", dependencies: [{ kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i1$4.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }] }); }
1689
+ }
1690
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: CardSkeletonComponent, decorators: [{
1691
+ type: Component,
1692
+ args: [{ selector: 'card-skeleton', imports: [SkeletonModule], template: "<div class=\"border-round border-1 surface-border p-4 surface-card\" [style]=\"'height: ' + height + 'px;'\">\n <div [style]=\"'margin-bottom:' + titleMarginBottom + 'px; margin-top:' + titleMarginTop + 'px;'\">\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>" }]
1693
+ }], propDecorators: { height: [{
1694
+ type: Input
1695
+ }] } });
1696
+
1697
+ class UserBase extends BaseEntity {
1698
+ static { this.typeName = 'UserBase'; }
1699
+ constructor({ id, email, } = {}) {
1700
+ super();
1701
+ this.id = id;
1702
+ this.email = email;
1703
+ }
1704
+ static { this.schema = {
1705
+ id: {
1706
+ type: 'number',
1707
+ },
1708
+ email: {
1709
+ type: 'string',
1710
+ },
1711
+ }; }
1712
+ }
1713
+ class AuthResult extends BaseEntity {
1714
+ static { this.typeName = 'AuthResult'; }
1715
+ constructor({ userId, email, accessToken, refreshToken } = {}) {
1716
+ super();
1717
+ this.userId = userId;
1718
+ this.email = email;
1719
+ this.accessToken = accessToken;
1720
+ this.refreshToken = refreshToken;
1721
+ }
1722
+ static { this.schema = {
1723
+ userId: {
1724
+ type: 'number',
1556
1725
  },
1557
- createdAt: {
1558
- type: 'Date',
1726
+ email: {
1727
+ type: 'string',
1559
1728
  },
1560
- modifiedAt: {
1561
- type: 'Date',
1729
+ accessToken: {
1730
+ type: 'string',
1731
+ },
1732
+ refreshToken: {
1733
+ type: 'string',
1562
1734
  },
1563
1735
  }; }
1564
1736
  }
1565
- class RoleMainUIForm extends BaseEntity {
1566
- static { this.typeName = 'RoleMainUIForm'; }
1567
- constructor({ roleDTO, usersNamebookDTOList = [], permissionsIds = [] } = {}) {
1737
+ class VerificationTokenRequest extends BaseEntity {
1738
+ static { this.typeName = 'VerificationTokenRequest'; }
1739
+ constructor({ verificationCode, browserId, email } = {}) {
1568
1740
  super();
1569
- this.roleDTO = roleDTO;
1570
- this.usersNamebookDTOList = usersNamebookDTOList;
1571
- this.permissionsIds = permissionsIds;
1741
+ this.verificationCode = verificationCode;
1742
+ this.browserId = browserId;
1743
+ this.email = email;
1572
1744
  }
1573
1745
  static { this.schema = {
1574
- roleDTO: {
1575
- type: 'Role',
1576
- get nestedConstructor() { return Role; },
1577
- isMainDTOForMainUIFormDTO: true,
1746
+ verificationCode: {
1747
+ type: 'string',
1578
1748
  },
1579
- usersNamebookDTOList: {
1580
- type: 'Namebook[]',
1581
- get nestedConstructor() { return Namebook; },
1749
+ browserId: {
1750
+ type: 'string',
1582
1751
  },
1583
- permissionsIds: {
1584
- type: 'number[]',
1752
+ email: {
1753
+ type: 'string',
1585
1754
  },
1586
1755
  }; }
1587
1756
  }
1588
- class RoleSaveBody extends BaseEntity {
1589
- static { this.typeName = 'RoleSaveBody'; }
1590
- constructor({ roleDTO, selectedPermissionsIds = [], selectedUsersIds = [] } = {}) {
1757
+ class ExternalProvider extends BaseEntity {
1758
+ static { this.typeName = 'ExternalProvider'; }
1759
+ constructor({ idToken, browserId } = {}) {
1591
1760
  super();
1592
- this.roleDTO = roleDTO;
1593
- this.selectedPermissionsIds = selectedPermissionsIds;
1594
- this.selectedUsersIds = selectedUsersIds;
1761
+ this.idToken = idToken;
1762
+ this.browserId = browserId;
1595
1763
  }
1596
1764
  static { this.schema = {
1597
- roleDTO: {
1598
- type: 'Role',
1599
- get nestedConstructor() { return Role; },
1600
- isSaveBodyMainDTO: true,
1765
+ idToken: {
1766
+ type: 'string',
1767
+ },
1768
+ browserId: {
1769
+ type: 'string',
1601
1770
  },
1602
- selectedPermissionsIds: {
1603
- type: 'number[]',
1771
+ }; }
1772
+ }
1773
+ class UserRole extends BaseEntity {
1774
+ static { this.typeName = 'UserRole'; }
1775
+ constructor({ roleId, userId } = {}) {
1776
+ super();
1777
+ this.roleId = roleId;
1778
+ this.userId = userId;
1779
+ }
1780
+ static { this.schema = {
1781
+ roleId: {
1782
+ type: 'number',
1604
1783
  },
1605
- selectedUsersIds: {
1606
- type: 'number[]',
1784
+ userId: {
1785
+ type: 'number',
1607
1786
  },
1608
1787
  }; }
1609
1788
  }
1610
- class Permission extends BaseEntity {
1611
- static { this.typeName = 'Permission'; }
1612
- constructor({ name, nameLatin, description, descriptionLatin, code, id } = {}) {
1789
+ class LoginVerificationToken extends BaseEntity {
1790
+ static { this.typeName = 'LoginVerificationToken'; }
1791
+ constructor({ email, userId, browserId, expireAt } = {}) {
1613
1792
  super();
1614
- this.name = name;
1615
- this.nameLatin = nameLatin;
1616
- this.description = description;
1617
- this.descriptionLatin = descriptionLatin;
1618
- this.code = code;
1619
- this.id = id;
1793
+ this.email = email;
1794
+ this.userId = userId;
1795
+ this.browserId = browserId;
1796
+ this.expireAt = expireAt;
1620
1797
  }
1621
1798
  static { this.schema = {
1622
- name: {
1799
+ email: {
1623
1800
  type: 'string',
1624
1801
  },
1625
- nameLatin: {
1626
- type: 'string',
1802
+ userId: {
1803
+ type: 'number',
1627
1804
  },
1628
- description: {
1805
+ browserId: {
1629
1806
  type: 'string',
1630
1807
  },
1631
- descriptionLatin: {
1632
- type: 'string',
1808
+ expireAt: {
1809
+ type: 'Date',
1633
1810
  },
1634
- code: {
1811
+ }; }
1812
+ }
1813
+ class Login extends BaseEntity {
1814
+ static { this.typeName = 'Login'; }
1815
+ constructor({ email, browserId } = {}) {
1816
+ super();
1817
+ this.email = email;
1818
+ this.browserId = browserId;
1819
+ }
1820
+ static { this.schema = {
1821
+ email: {
1635
1822
  type: 'string',
1636
1823
  },
1637
- id: {
1638
- type: 'number',
1824
+ browserId: {
1825
+ type: 'string',
1639
1826
  },
1640
1827
  }; }
1641
1828
  }
1642
- class PermissionSaveBody extends BaseEntity {
1643
- static { this.typeName = 'PermissionSaveBody'; }
1644
- constructor({ permissionDTO } = {}) {
1829
+ class RefreshTokenRequest extends BaseEntity {
1830
+ static { this.typeName = 'RefreshTokenRequest'; }
1831
+ constructor({ refreshToken, browserId } = {}) {
1645
1832
  super();
1646
- this.permissionDTO = permissionDTO;
1833
+ this.refreshToken = refreshToken;
1834
+ this.browserId = browserId;
1647
1835
  }
1648
1836
  static { this.schema = {
1649
- permissionDTO: {
1650
- type: 'Permission',
1651
- get nestedConstructor() { return Permission; },
1837
+ refreshToken: {
1838
+ type: 'string',
1839
+ },
1840
+ browserId: {
1841
+ type: 'string',
1652
1842
  },
1653
1843
  }; }
1654
1844
  }
1655
-
1656
- class CardSkeletonComponent {
1657
- constructor() {
1658
- this.height = 400;
1659
- this.titleHeight = 23;
1660
- this.padding = 21;
1661
- this.titleMarginBottom = 14;
1662
- this.titleMarginTop = 4;
1663
- }
1664
- ngOnInit() {
1665
- this.dataHeight = this.height - (this.titleHeight + this.padding * 2 + this.titleMarginBottom + this.titleMarginTop);
1845
+ class SendLoginVerificationEmailResult extends BaseEntity {
1846
+ static { this.typeName = 'SendLoginVerificationEmailResult'; }
1847
+ constructor({ message } = {}) {
1848
+ super();
1849
+ this.message = message;
1666
1850
  }
1667
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: CardSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1668
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: CardSkeletonComponent, isStandalone: true, selector: "card-skeleton", inputs: { height: "height" }, ngImport: i0, template: "<div class=\"border-round border-1 surface-border p-4 surface-card\" [style]=\"'height: ' + height + 'px;'\">\r\n <div [style]=\"'margin-bottom:' + titleMarginBottom + 'px; margin-top:' + titleMarginTop + 'px;'\">\r\n <p-skeleton width=\"160px\" [height]=\"titleHeight + 'px'\"></p-skeleton>\r\n </div>\r\n <div [style]=\"'height: ' + dataHeight + 'px;'\">\r\n <p-skeleton width=\"100%\" height=\"100%\"/>\r\n </div>\r\n</div>", dependencies: [{ kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i1$3.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }] }); }
1851
+ static { this.schema = {
1852
+ message: {
1853
+ type: 'string',
1854
+ },
1855
+ }; }
1669
1856
  }
1670
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: CardSkeletonComponent, decorators: [{
1671
- type: Component,
1672
- args: [{ selector: 'card-skeleton', imports: [SkeletonModule], template: "<div class=\"border-round border-1 surface-border p-4 surface-card\" [style]=\"'height: ' + height + 'px;'\">\r\n <div [style]=\"'margin-bottom:' + titleMarginBottom + 'px; margin-top:' + titleMarginTop + 'px;'\">\r\n <p-skeleton width=\"160px\" [height]=\"titleHeight + 'px'\"></p-skeleton>\r\n </div>\r\n <div [style]=\"'height: ' + dataHeight + 'px;'\">\r\n <p-skeleton width=\"100%\" height=\"100%\"/>\r\n </div>\r\n</div>" }]
1673
- }], propDecorators: { height: [{
1674
- type: Input
1675
- }] } });
1676
1857
 
1677
1858
  class PanelBodyComponent {
1678
1859
  constructor() {
@@ -1681,11 +1862,11 @@ class PanelBodyComponent {
1681
1862
  ngOnInit() {
1682
1863
  }
1683
1864
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: PanelBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1684
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: PanelBodyComponent, isStandalone: false, selector: "panel-body", inputs: { normalBottomPadding: "normalBottomPadding" }, ngImport: i0, template: "<!-- this is selector, not the class -->\r\n<div class=\"panel-body\"\r\n [ngClass]=\"{\r\n 'non-grid-panel-bottom-padding': normalBottomPadding, \r\n }\"\r\n style=\"overflow: auto;\">\r\n <!-- 'card': true, -->\r\n <ng-content></ng-content>\r\n</div>", styles: [".non-grid-panel-bottom-padding{padding-bottom:14px}@media (max-width: 600px){.non-grid-panel-bottom-padding{padding-bottom:0}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
1865
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: PanelBodyComponent, isStandalone: false, selector: "panel-body", inputs: { normalBottomPadding: "normalBottomPadding" }, ngImport: i0, template: "<!-- this is selector, not the class -->\n<div class=\"panel-body\"\n [ngClass]=\"{\n 'non-grid-panel-bottom-padding': normalBottomPadding, \n }\"\n style=\"overflow: auto;\">\n <!-- 'card': true, -->\n <ng-content></ng-content>\n</div>", styles: [".non-grid-panel-bottom-padding{padding-bottom:14px}@media (max-width: 600px){.non-grid-panel-bottom-padding{padding-bottom:0}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
1685
1866
  }
1686
1867
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: PanelBodyComponent, decorators: [{
1687
1868
  type: Component,
1688
- args: [{ selector: 'panel-body', standalone: false, template: "<!-- this is selector, not the class -->\r\n<div class=\"panel-body\"\r\n [ngClass]=\"{\r\n 'non-grid-panel-bottom-padding': normalBottomPadding, \r\n }\"\r\n style=\"overflow: auto;\">\r\n <!-- 'card': true, -->\r\n <ng-content></ng-content>\r\n</div>", styles: [".non-grid-panel-bottom-padding{padding-bottom:14px}@media (max-width: 600px){.non-grid-panel-bottom-padding{padding-bottom:0}}\n"] }]
1869
+ args: [{ selector: 'panel-body', standalone: false, template: "<!-- this is selector, not the class -->\n<div class=\"panel-body\"\n [ngClass]=\"{\n 'non-grid-panel-bottom-padding': normalBottomPadding, \n }\"\n style=\"overflow: auto;\">\n <!-- 'card': true, -->\n <ng-content></ng-content>\n</div>", styles: [".non-grid-panel-bottom-padding{padding-bottom:14px}@media (max-width: 600px){.non-grid-panel-bottom-padding{padding-bottom:0}}\n"] }]
1689
1870
  }], ctorParameters: () => [], propDecorators: { normalBottomPadding: [{
1690
1871
  type: Input
1691
1872
  }] } });
@@ -1695,11 +1876,11 @@ class PanelFooterComponent {
1695
1876
  ngOnInit() {
1696
1877
  }
1697
1878
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: PanelFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1698
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: PanelFooterComponent, isStandalone: false, selector: "panel-footer", ngImport: i0, template: "<div class=\"spiderly-panel-footer\">\r\n <div class=\"buttons-wrapper\">\r\n <ng-content></ng-content>\r\n </div>\r\n <span class=\"p-text-secondary\">\r\n <ng-content select=\"[footerRight]\"></ng-content>\r\n </span>\r\n</div>", styles: [".spiderly-panel-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;border-top:1px solid var(--p-content-border-color);border-bottom-right-radius:var(--p-content-border-radius);border-bottom-left-radius:var(--p-content-border-radius);padding:18px}.buttons-wrapper{gap:.5rem;display:flex;align-items:center;flex-wrap:wrap}\n"] }); }
1879
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: PanelFooterComponent, isStandalone: false, selector: "panel-footer", ngImport: i0, template: "<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>", styles: [".spiderly-panel-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;border-top:1px solid var(--p-content-border-color);border-bottom-right-radius:var(--p-content-border-radius);border-bottom-left-radius:var(--p-content-border-radius);padding:18px}.buttons-wrapper{gap:.5rem;display:flex;align-items:center;flex-wrap:wrap}\n"] }); }
1699
1880
  }
1700
1881
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: PanelFooterComponent, decorators: [{
1701
1882
  type: Component,
1702
- args: [{ selector: 'panel-footer', standalone: false, template: "<div class=\"spiderly-panel-footer\">\r\n <div class=\"buttons-wrapper\">\r\n <ng-content></ng-content>\r\n </div>\r\n <span class=\"p-text-secondary\">\r\n <ng-content select=\"[footerRight]\"></ng-content>\r\n </span>\r\n</div>", styles: [".spiderly-panel-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;border-top:1px solid var(--p-content-border-color);border-bottom-right-radius:var(--p-content-border-radius);border-bottom-left-radius:var(--p-content-border-radius);padding:18px}.buttons-wrapper{gap:.5rem;display:flex;align-items:center;flex-wrap:wrap}\n"] }]
1883
+ args: [{ selector: 'panel-footer', standalone: false, template: "<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>", styles: [".spiderly-panel-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;border-top:1px solid var(--p-content-border-color);border-bottom-right-radius:var(--p-content-border-radius);border-bottom-left-radius:var(--p-content-border-radius);padding:18px}.buttons-wrapper{gap:.5rem;display:flex;align-items:center;flex-wrap:wrap}\n"] }]
1703
1884
  }], ctorParameters: () => [] });
1704
1885
 
1705
1886
  class PanelHeaderComponent {
@@ -1720,11 +1901,11 @@ class PanelHeaderComponent {
1720
1901
  tab.isSelected = true;
1721
1902
  }
1722
1903
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: PanelHeaderComponent, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
1723
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: PanelHeaderComponent, isStandalone: false, selector: "panel-header", inputs: { title: "title", showBigTitle: "showBigTitle", showIcon: "showIcon", icon: "icon", index: "index", tabs: "tabs" }, ngImport: i0, template: "<div style=\"display: flex; align-items: center; gap: 24px; flex-wrap: wrap;\">\r\n @if (tabs == null) {\r\n <div style=\"display: flex; align-items: center; gap: 8px;\">\r\n <span *ngIf=\"index != null\" class=\"number-circle\">{{index + 1}}</span>\r\n <i class=\"{{icon}} primary-color\" [style]=\"showBigTitle ? 'font-size: 21px' : 'font-size: 16px;'\"></i> \r\n <div [style]=\"(showBigTitle ? 'font-size: 17.5px; font-weight: 500;' : '')\">{{title}}</div>\r\n </div>\r\n }\r\n @else {\r\n @for (tab of tabs; track $index) {\r\n <div (click)=\"setTabIsSelected(tab)\"\r\n [style]=\"{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n cursor: 'pointer',\r\n fontWeight: tab.isSelected ? '700' : 'normal'\r\n }\">\r\n <span *ngIf=\"index != null\" class=\"number-circle\">{{index + 1}}</span>\r\n <i class=\"{{tab.icon}} primary-color\" [style]=\"showBigTitle ? 'font-size: 21px' : 'font-size: 16px;'\"></i> \r\n <div [style]=\"showBigTitle ? 'font-size: 17.5px; font-weight: 500;' : ''\">{{tab.label}}</div>\r\n </div>\r\n }\r\n }\r\n</div>", styles: [".p-panel-icons-end{font-size:50px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1904
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: PanelHeaderComponent, isStandalone: false, selector: "panel-header", inputs: { title: "title", showBigTitle: "showBigTitle", showIcon: "showIcon", icon: "icon", index: "index", tabs: "tabs" }, ngImport: i0, template: "<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 class=\"{{icon}} primary-color\" [style]=\"showBigTitle ? 'font-size: 21px' : 'font-size: 16px;'\"></i> \n <div [style]=\"(showBigTitle ? 'font-size: 17.5px; font-weight: 500;' : '')\">{{title}}</div>\n </div>\n }\n @else {\n @for (tab of tabs; track $index) {\n <div (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 <span *ngIf=\"index != null\" class=\"number-circle\">{{index + 1}}</span>\n <i class=\"{{tab.icon}} primary-color\" [style]=\"showBigTitle ? 'font-size: 21px' : 'font-size: 16px;'\"></i> \n <div [style]=\"showBigTitle ? 'font-size: 17.5px; font-weight: 500;' : ''\">{{tab.label}}</div>\n </div>\n }\n }\n</div>", styles: [".p-panel-icons-end{font-size:50px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1724
1905
  }
1725
1906
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: PanelHeaderComponent, decorators: [{
1726
1907
  type: Component,
1727
- args: [{ selector: 'panel-header', standalone: false, template: "<div style=\"display: flex; align-items: center; gap: 24px; flex-wrap: wrap;\">\r\n @if (tabs == null) {\r\n <div style=\"display: flex; align-items: center; gap: 8px;\">\r\n <span *ngIf=\"index != null\" class=\"number-circle\">{{index + 1}}</span>\r\n <i class=\"{{icon}} primary-color\" [style]=\"showBigTitle ? 'font-size: 21px' : 'font-size: 16px;'\"></i> \r\n <div [style]=\"(showBigTitle ? 'font-size: 17.5px; font-weight: 500;' : '')\">{{title}}</div>\r\n </div>\r\n }\r\n @else {\r\n @for (tab of tabs; track $index) {\r\n <div (click)=\"setTabIsSelected(tab)\"\r\n [style]=\"{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n cursor: 'pointer',\r\n fontWeight: tab.isSelected ? '700' : 'normal'\r\n }\">\r\n <span *ngIf=\"index != null\" class=\"number-circle\">{{index + 1}}</span>\r\n <i class=\"{{tab.icon}} primary-color\" [style]=\"showBigTitle ? 'font-size: 21px' : 'font-size: 16px;'\"></i> \r\n <div [style]=\"showBigTitle ? 'font-size: 17.5px; font-weight: 500;' : ''\">{{tab.label}}</div>\r\n </div>\r\n }\r\n }\r\n</div>", styles: [".p-panel-icons-end{font-size:50px}\n"] }]
1908
+ args: [{ selector: 'panel-header', standalone: false, template: "<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 class=\"{{icon}} primary-color\" [style]=\"showBigTitle ? 'font-size: 21px' : 'font-size: 16px;'\"></i> \n <div [style]=\"(showBigTitle ? 'font-size: 17.5px; font-weight: 500;' : '')\">{{title}}</div>\n </div>\n }\n @else {\n @for (tab of tabs; track $index) {\n <div (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 <span *ngIf=\"index != null\" class=\"number-circle\">{{index + 1}}</span>\n <i class=\"{{tab.icon}} primary-color\" [style]=\"showBigTitle ? 'font-size: 21px' : 'font-size: 16px;'\"></i> \n <div [style]=\"showBigTitle ? 'font-size: 17.5px; font-weight: 500;' : ''\">{{tab.label}}</div>\n </div>\n }\n }\n</div>", styles: [".p-panel-icons-end{font-size:50px}\n"] }]
1728
1909
  }], ctorParameters: () => [{ type: i1.TranslocoService }], propDecorators: { title: [{
1729
1910
  type: Input
1730
1911
  }], showBigTitle: [{
@@ -1771,11 +1952,11 @@ class SpiderlyPanelComponent {
1771
1952
  this.onRemoveIconClick.next(null);
1772
1953
  }
1773
1954
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1774
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyPanelComponent, isStandalone: false, selector: "spiderly-panel", inputs: { isFirstMultiplePanel: "isFirstMultiplePanel", isMiddleMultiplePanel: "isMiddleMultiplePanel", isLastMultiplePanel: "isLastMultiplePanel", toggleable: "toggleable", toggler: "toggler", collapsed: "collapsed", crudMenu: "crudMenu", showCrudMenu: "showCrudMenu", showRemoveIcon: "showRemoveIcon", index: "index", showPanelHeader: "showPanelHeader" }, outputs: { onMenuIconClick: "onMenuIconClick", onRemoveIconClick: "onRemoveIconClick" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], ngImport: i0, template: "<p-panel \r\n[showHeader]=\"showPanelHeader\"\r\n[ngClass]=\"{\r\n 'multiple-panel-first-without-header': isFirstMultiplePanel && !showPanelHeader,\r\n 'multiple-panel-first': isFirstMultiplePanel,\r\n 'multiple-panel-middle-without-header': isMiddleMultiplePanel && !showPanelHeader,\r\n 'multiple-panel-middle': isMiddleMultiplePanel,\r\n 'multiple-panel-last-without-header': isLastMultiplePanel && !showPanelHeader,\r\n 'multiple-panel-last': isLastMultiplePanel,\r\n 'panel-border': !isFirstMultiplePanel,\r\n 'spiderly-panel': true,\r\n 'panel-header-cursor-pointer': toggler === 'header' && toggleable\r\n}\"\r\n[toggleable]=\"toggleable\"\r\n[toggler]=\"toggler\"\r\n[collapsed]=\"toggleable && collapsed\"\r\nexpandIcon=\"pi pi-chevron-up\"\r\ncollapseIcon=\"pi pi-chevron-down\"\r\n>\r\n <ng-template pTemplate=\"header\">\r\n <div>\r\n <ng-content select=\"panel-header\"></ng-content>\r\n <ng-content select=\"[panelHeader]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"icons\">\r\n <div *ngIf=\"showCrudMenu && crudMenu\" class=\"mr-2\">\r\n <i class=\"pi pi-ellipsis-h icon-hover\" (click)=\"menuItemClick(index, $event)\"></i>\r\n <!-- https://github.com/primefaces/primeng/issues/13934 -->\r\n <p-menu #menu [model]=\"crudMenu\" [popup]=\"true\" appendTo=\"body\" [tabindex]=\"undefined\"></p-menu>\r\n </div>\r\n <div *ngIf=\"showRemoveIcon\" class=\"mr-2\">\r\n <i class=\"pi pi-minus icon-hover error-color-light\" (click)=\"removeItemClick()\"></i>\r\n </div>\r\n </ng-template>\r\n\r\n <div class=\"panel-body-wrapper\">\r\n <ng-content select=\"panel-body\"></ng-content>\r\n </div>\r\n\r\n <ng-content select=\"panel-footer\"></ng-content>\r\n\r\n</p-panel>\r\n", styles: [":host ::ng-deep .spiderly-panel .p-panel-content{padding:0}:host ::ng-deep .p-panel{overflow:hidden}:host ::ng-deep .p-panel-icons{display:flex;align-items:center}:host ::ng-deep .panel-header-cursor-pointer .p-panel-header{cursor:pointer!important}.multiple-panel-first-without-header .p-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid var(--surface-border);border-top-left-radius:var(--p-content-border-radius);border-top-right-radius:var(--p-content-border-radius);border-bottom:none}.multiple-panel-middle-without-header .p-panel{border-radius:0/0px;border-top:1px solid var(--surface-border);border-bottom:none}.multiple-panel-last-without-header .p-panel{border-bottom-left-radius:var(--p-content-border-radius);border-bottom-right-radius:var(--p-content-border-radius);border-top:1px solid var(--surface-border);border-top-left-radius:0;border-top-right-radius:0}.multiple-panel-first .p-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}.panel-border .p-panel{border-bottom-left-radius:var(--p-content-border-radius);border-bottom-right-radius:var(--p-content-border-radius);border-bottom:1px solid var(--surface-border)}.multiple-panel-middle .p-panel{border-radius:0;border-bottom:none}.multiple-panel-last .p-panel{border-top-left-radius:0;border-top-right-radius:0}.panel-body-wrapper{padding:18px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "directive", type: i1$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4$9.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions", "toggleButtonProps"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }] }); }
1955
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyPanelComponent, isStandalone: false, selector: "spiderly-panel", inputs: { isFirstMultiplePanel: "isFirstMultiplePanel", isMiddleMultiplePanel: "isMiddleMultiplePanel", isLastMultiplePanel: "isLastMultiplePanel", toggleable: "toggleable", toggler: "toggler", collapsed: "collapsed", crudMenu: "crudMenu", showCrudMenu: "showCrudMenu", showRemoveIcon: "showRemoveIcon", index: "index", showPanelHeader: "showPanelHeader" }, outputs: { onMenuIconClick: "onMenuIconClick", onRemoveIconClick: "onRemoveIconClick" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], ngImport: i0, template: "<p-panel \n[showHeader]=\"showPanelHeader\"\n[ngClass]=\"{\n 'multiple-panel-first-without-header': isFirstMultiplePanel && !showPanelHeader,\n 'multiple-panel-first': isFirstMultiplePanel,\n 'multiple-panel-middle-without-header': isMiddleMultiplePanel && !showPanelHeader,\n 'multiple-panel-middle': isMiddleMultiplePanel,\n 'multiple-panel-last-without-header': 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\"\nexpandIcon=\"pi pi-chevron-up\"\ncollapseIcon=\"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 class=\"pi pi-ellipsis-h icon-hover\" (click)=\"menuItemClick(index, $event)\"></i>\n <!-- https://github.com/primefaces/primeng/issues/13934 -->\n <p-menu #menu [model]=\"crudMenu\" [popup]=\"true\" appendTo=\"body\" [tabindex]=\"undefined\"></p-menu>\n </div>\n <div *ngIf=\"showRemoveIcon\" class=\"mr-2\">\n <i class=\"pi pi-minus icon-hover error-color-light\" (click)=\"removeItemClick()\"></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\n</p-panel>\n", styles: [":host ::ng-deep .spiderly-panel .p-panel-content{padding:0}:host ::ng-deep .p-panel{overflow:hidden}:host ::ng-deep .p-panel-icons{display:flex;align-items:center}:host ::ng-deep .panel-header-cursor-pointer .p-panel-header{cursor:pointer!important}.multiple-panel-first-without-header .p-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid var(--surface-border);border-top-left-radius:var(--p-content-border-radius);border-top-right-radius:var(--p-content-border-radius);border-bottom:none}.multiple-panel-middle-without-header .p-panel{border-radius:0/0px;border-top:1px solid var(--surface-border);border-bottom:none}.multiple-panel-last-without-header .p-panel{border-bottom-left-radius:var(--p-content-border-radius);border-bottom-right-radius:var(--p-content-border-radius);border-top:1px solid var(--surface-border);border-top-left-radius:0;border-top-right-radius:0}.multiple-panel-first .p-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}.panel-border .p-panel{border-bottom-left-radius:var(--p-content-border-radius);border-bottom-right-radius:var(--p-content-border-radius);border-bottom:1px solid var(--surface-border)}.multiple-panel-middle .p-panel{border-radius:0;border-bottom:none}.multiple-panel-last .p-panel{border-top-left-radius:0;border-top-right-radius:0}.panel-body-wrapper{padding:18px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "directive", type: i1$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4$9.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions", "toggleButtonProps"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }] }); }
1775
1956
  }
1776
1957
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyPanelComponent, decorators: [{
1777
1958
  type: Component,
1778
- args: [{ selector: 'spiderly-panel', standalone: false, template: "<p-panel \r\n[showHeader]=\"showPanelHeader\"\r\n[ngClass]=\"{\r\n 'multiple-panel-first-without-header': isFirstMultiplePanel && !showPanelHeader,\r\n 'multiple-panel-first': isFirstMultiplePanel,\r\n 'multiple-panel-middle-without-header': isMiddleMultiplePanel && !showPanelHeader,\r\n 'multiple-panel-middle': isMiddleMultiplePanel,\r\n 'multiple-panel-last-without-header': isLastMultiplePanel && !showPanelHeader,\r\n 'multiple-panel-last': isLastMultiplePanel,\r\n 'panel-border': !isFirstMultiplePanel,\r\n 'spiderly-panel': true,\r\n 'panel-header-cursor-pointer': toggler === 'header' && toggleable\r\n}\"\r\n[toggleable]=\"toggleable\"\r\n[toggler]=\"toggler\"\r\n[collapsed]=\"toggleable && collapsed\"\r\nexpandIcon=\"pi pi-chevron-up\"\r\ncollapseIcon=\"pi pi-chevron-down\"\r\n>\r\n <ng-template pTemplate=\"header\">\r\n <div>\r\n <ng-content select=\"panel-header\"></ng-content>\r\n <ng-content select=\"[panelHeader]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"icons\">\r\n <div *ngIf=\"showCrudMenu && crudMenu\" class=\"mr-2\">\r\n <i class=\"pi pi-ellipsis-h icon-hover\" (click)=\"menuItemClick(index, $event)\"></i>\r\n <!-- https://github.com/primefaces/primeng/issues/13934 -->\r\n <p-menu #menu [model]=\"crudMenu\" [popup]=\"true\" appendTo=\"body\" [tabindex]=\"undefined\"></p-menu>\r\n </div>\r\n <div *ngIf=\"showRemoveIcon\" class=\"mr-2\">\r\n <i class=\"pi pi-minus icon-hover error-color-light\" (click)=\"removeItemClick()\"></i>\r\n </div>\r\n </ng-template>\r\n\r\n <div class=\"panel-body-wrapper\">\r\n <ng-content select=\"panel-body\"></ng-content>\r\n </div>\r\n\r\n <ng-content select=\"panel-footer\"></ng-content>\r\n\r\n</p-panel>\r\n", styles: [":host ::ng-deep .spiderly-panel .p-panel-content{padding:0}:host ::ng-deep .p-panel{overflow:hidden}:host ::ng-deep .p-panel-icons{display:flex;align-items:center}:host ::ng-deep .panel-header-cursor-pointer .p-panel-header{cursor:pointer!important}.multiple-panel-first-without-header .p-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid var(--surface-border);border-top-left-radius:var(--p-content-border-radius);border-top-right-radius:var(--p-content-border-radius);border-bottom:none}.multiple-panel-middle-without-header .p-panel{border-radius:0/0px;border-top:1px solid var(--surface-border);border-bottom:none}.multiple-panel-last-without-header .p-panel{border-bottom-left-radius:var(--p-content-border-radius);border-bottom-right-radius:var(--p-content-border-radius);border-top:1px solid var(--surface-border);border-top-left-radius:0;border-top-right-radius:0}.multiple-panel-first .p-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}.panel-border .p-panel{border-bottom-left-radius:var(--p-content-border-radius);border-bottom-right-radius:var(--p-content-border-radius);border-bottom:1px solid var(--surface-border)}.multiple-panel-middle .p-panel{border-radius:0;border-bottom:none}.multiple-panel-last .p-panel{border-top-left-radius:0;border-top-right-radius:0}.panel-body-wrapper{padding:18px}\n"] }]
1959
+ args: [{ selector: 'spiderly-panel', standalone: false, template: "<p-panel \n[showHeader]=\"showPanelHeader\"\n[ngClass]=\"{\n 'multiple-panel-first-without-header': isFirstMultiplePanel && !showPanelHeader,\n 'multiple-panel-first': isFirstMultiplePanel,\n 'multiple-panel-middle-without-header': isMiddleMultiplePanel && !showPanelHeader,\n 'multiple-panel-middle': isMiddleMultiplePanel,\n 'multiple-panel-last-without-header': 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\"\nexpandIcon=\"pi pi-chevron-up\"\ncollapseIcon=\"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 class=\"pi pi-ellipsis-h icon-hover\" (click)=\"menuItemClick(index, $event)\"></i>\n <!-- https://github.com/primefaces/primeng/issues/13934 -->\n <p-menu #menu [model]=\"crudMenu\" [popup]=\"true\" appendTo=\"body\" [tabindex]=\"undefined\"></p-menu>\n </div>\n <div *ngIf=\"showRemoveIcon\" class=\"mr-2\">\n <i class=\"pi pi-minus icon-hover error-color-light\" (click)=\"removeItemClick()\"></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\n</p-panel>\n", styles: [":host ::ng-deep .spiderly-panel .p-panel-content{padding:0}:host ::ng-deep .p-panel{overflow:hidden}:host ::ng-deep .p-panel-icons{display:flex;align-items:center}:host ::ng-deep .panel-header-cursor-pointer .p-panel-header{cursor:pointer!important}.multiple-panel-first-without-header .p-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid var(--surface-border);border-top-left-radius:var(--p-content-border-radius);border-top-right-radius:var(--p-content-border-radius);border-bottom:none}.multiple-panel-middle-without-header .p-panel{border-radius:0/0px;border-top:1px solid var(--surface-border);border-bottom:none}.multiple-panel-last-without-header .p-panel{border-bottom-left-radius:var(--p-content-border-radius);border-bottom-right-radius:var(--p-content-border-radius);border-top:1px solid var(--surface-border);border-top-left-radius:0;border-top-right-radius:0}.multiple-panel-first .p-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}.panel-border .p-panel{border-bottom-left-radius:var(--p-content-border-radius);border-bottom-right-radius:var(--p-content-border-radius);border-bottom:1px solid var(--surface-border)}.multiple-panel-middle .p-panel{border-radius:0;border-bottom:none}.multiple-panel-last .p-panel{border-top-left-radius:0;border-top-right-radius:0}.panel-body-wrapper{padding:18px}\n"] }]
1779
1960
  }], ctorParameters: () => [], propDecorators: { isFirstMultiplePanel: [{
1780
1961
  type: Input
1781
1962
  }], isMiddleMultiplePanel: [{
@@ -1846,388 +2027,141 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
1846
2027
  }]
1847
2028
  }] });
1848
2029
 
1849
- class ConfigBaseService {
1850
- constructor() {
1851
- this.production = false;
1852
- this.frontendUrl = 'http://localhost:4200';
1853
- this.companyName = 'Company Name';
1854
- this.primaryColor = '#111b2c';
1855
- this.googleAuth = true;
1856
- /* URLs */
1857
- this.loginSlug = 'login';
1858
- /* Local storage */
1859
- this.accessTokenKey = 'access_token';
1860
- this.refreshTokenKey = 'refresh_token';
1861
- this.browserIdKey = 'browser_id';
1862
- this.httpOptions = {};
1863
- this.httpSkipSpinnerOptions = {
1864
- headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
1865
- params: new HttpParams().set('X-Skip-Spinner', 'true')
1866
- };
1867
- this.logoPath = 'assets/images/logo/logo.svg';
1868
- }
1869
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ConfigBaseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1870
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ConfigBaseService, providedIn: 'root' }); }
1871
- }
1872
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ConfigBaseService, decorators: [{
1873
- type: Injectable,
1874
- args: [{
1875
- providedIn: 'root'
1876
- }]
1877
- }], ctorParameters: () => [] });
1878
-
1879
- class ApiSecurityService {
1880
- constructor(http, config) {
2030
+ class VerificationWrapperComponent extends BaseFormCopy {
2031
+ constructor(differs, http, messageService, changeDetectorRef, router, route, translocoService, baseFormService) {
2032
+ super(differs, http, messageService, changeDetectorRef, router, route, translocoService, baseFormService);
2033
+ this.differs = differs;
1881
2034
  this.http = http;
1882
- this.config = config;
1883
- //#region Authentication
1884
- this.login = (request) => {
1885
- return this.http.post(`${this.config.apiUrl}/Security/Login`, request, this.config.httpOptions);
1886
- };
1887
- this.loginExternal = (externalProviderDTO) => {
1888
- return this.http.post(`${this.config.apiUrl}/Security/LoginExternal`, externalProviderDTO, this.config.httpOptions);
1889
- };
1890
- this.sendLoginVerificationEmail = (loginDTO) => {
1891
- return this.http.post(`${this.config.apiUrl}/Security/SendLoginVerificationEmail`, loginDTO, this.config.httpOptions);
1892
- };
1893
- this.logout = (browserId) => {
1894
- return this.http.get(`${this.config.apiUrl}/Security/Logout?browserId=${browserId}`);
1895
- };
1896
- this.refreshToken = (request) => {
1897
- return this.http.post(`${this.config.apiUrl}/Security/RefreshToken`, request, this.config.httpOptions);
1898
- };
1899
- //#endregion
1900
- //#region User
1901
- this.getCurrentUserBase = () => {
1902
- return this.http.get(`${this.config.apiUrl}/Security/GetCurrentUserBase`, this.config.httpSkipSpinnerOptions);
1903
- };
1904
- this.getCurrentUserPermissionCodes = () => {
1905
- return this.http.get(`${this.config.apiUrl}/Security/GetCurrentUserPermissionCodes`, this.config.httpSkipSpinnerOptions);
1906
- };
1907
- //#endregion
1908
- //#region Role
1909
- this.getPaginatedRoleList = (dto) => {
1910
- return this.http.post(`${this.config.apiUrl}/Security/GetPaginatedRoleList`, dto, this.config.httpSkipSpinnerOptions);
1911
- };
1912
- this.exportRoleListToExcel = (dto) => {
1913
- return this.http.post(`${this.config.apiUrl}/Security/ExportRoleListToExcel`, dto, this.config.httpOptions);
1914
- };
1915
- this.deleteRole = (id) => {
1916
- return this.http.delete(`${this.config.apiUrl}/Security/DeleteRole?id=${id}`);
1917
- };
1918
- this.getRoleMainUIFormDTO = (id) => {
1919
- return this.http.get(`${this.config.apiUrl}/Security/GetRoleMainUIFormDTO?id=${id}`);
1920
- };
1921
- this.getRole = (id) => {
1922
- return this.http.get(`${this.config.apiUrl}/Security/GetRole?id=${id}`);
1923
- };
1924
- this.saveRole = (dto) => {
1925
- return this.http.put(`${this.config.apiUrl}/Security/SaveRole`, dto, this.config.httpOptions);
1926
- };
1927
- this.getUsersNamebookListForRole = (roleId) => {
1928
- return this.http.get(`${this.config.apiUrl}/Security/GetUsersNamebookListForRole?roleId=${roleId}`, this.config.httpSkipSpinnerOptions);
1929
- };
1930
- this.getPermissionsDropdownListForRole = () => {
1931
- return this.http.get(`${this.config.apiUrl}/Security/GetPermissionsDropdownListForRole`, this.config.httpSkipSpinnerOptions);
1932
- };
1933
- this.getPermissionsNamebookListForRole = (roleId) => {
1934
- return this.http.get(`${this.config.apiUrl}/Security/GetPermissionsNamebookListForRole?roleId=${roleId}`, this.config.httpSkipSpinnerOptions);
1935
- };
1936
- this.getUsersAutocompleteListForRole = (limit, query) => {
1937
- return this.http.get(`${this.config.apiUrl}/Security/GetUsersAutocompleteListForRole?limit=${limit}&query=${query}`, this.config.httpSkipSpinnerOptions);
1938
- };
1939
- //#endregion
1940
- //#region Notification
1941
- this.getUnreadNotificationsCountForCurrentUser = () => {
1942
- return this.http.get(`${this.config.apiUrl}/Notification/GetUnreadNotificationsCountForCurrentUser`, this.config.httpSkipSpinnerOptions);
1943
- };
1944
- }
1945
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ApiSecurityService, deps: [{ token: i1$4.HttpClient }, { token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1946
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ApiSecurityService, providedIn: 'root' }); }
1947
- }
1948
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ApiSecurityService, decorators: [{
1949
- type: Injectable,
1950
- args: [{
1951
- providedIn: 'root'
1952
- }]
1953
- }], ctorParameters: () => [{ type: i1$4.HttpClient }, { type: ConfigBaseService }] });
1954
-
1955
- // When we call it, inside the console, it will show SpiderlyError: ...
1956
- class SpiderlyError extends Error {
1957
- constructor(message) {
1958
- super(message);
1959
- }
1960
- }
1961
-
1962
- class TranslateLabelsAbstractService {
1963
- constructor() {
1964
- }
1965
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TranslateLabelsAbstractService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1966
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TranslateLabelsAbstractService, providedIn: 'root' }); }
1967
- }
1968
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TranslateLabelsAbstractService, decorators: [{
1969
- type: Injectable,
1970
- args: [{
1971
- providedIn: 'root',
1972
- }]
1973
- }], ctorParameters: () => [] });
1974
-
1975
- class SpiderlyMessageService {
1976
- constructor(messageService, translocoService, ngZone) {
1977
2035
  this.messageService = messageService;
2036
+ this.changeDetectorRef = changeDetectorRef;
2037
+ this.router = router;
2038
+ this.route = route;
1978
2039
  this.translocoService = translocoService;
1979
- this.ngZone = ngZone;
2040
+ this.baseFormService = baseFormService;
2041
+ this.verificationTokenRequestFormGroup = new SpiderlyFormGroup({});
2042
+ this.onResendVerificationToken = new EventEmitter();
2043
+ this.onCodeSubmit = new EventEmitter();
1980
2044
  }
1981
- successMessage(detail, title = this.translocoService.translate('SuccessfulAction')) {
1982
- this.messageService.add({
1983
- severity: 'success',
1984
- summary: title,
1985
- detail: detail,
1986
- life: 10000,
1987
- });
2045
+ ngOnInit() {
2046
+ this.initVerificationTokenRequestFormGroup(new VerificationTokenRequest({ email: this.email }));
1988
2047
  }
1989
- warningMessage(detail, title, sticky) {
1990
- this.messageService.add({
1991
- severity: 'warn',
1992
- summary: title ?? this.translocoService.translate('Warning'),
1993
- detail: detail,
1994
- life: 10000,
1995
- sticky: sticky
1996
- });
2048
+ initVerificationTokenRequestFormGroup(model) {
2049
+ this.baseFormService.initFormGroup(this.verificationTokenRequestFormGroup, VerificationTokenRequest, model, ['verificationCode']);
1997
2050
  }
1998
- errorMessage(detail, title = this.translocoService.translate('Error')) {
1999
- this.messageService.add({
2000
- severity: 'error',
2001
- summary: title,
2002
- detail: detail,
2003
- life: 10000,
2004
- });
2051
+ codeSubmit() {
2052
+ let isValid = this.baseFormService.isControlValid(this.verificationTokenRequestFormGroup);
2053
+ if (isValid) {
2054
+ this.onCodeSubmit.next(this.verificationTokenRequestFormGroup.controls.verificationCode.getRawValue());
2055
+ }
2005
2056
  }
2006
- infoMessage(detail, title, sticky) {
2007
- this.messageService.add({
2008
- severity: 'info',
2009
- summary: title ?? this.translocoService.translate('Info'),
2010
- detail: detail,
2011
- life: 10000,
2012
- sticky: sticky,
2013
- });
2057
+ resendVerificationToken() {
2058
+ this.onResendVerificationToken.next(null);
2014
2059
  }
2015
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyMessageService, deps: [{ token: i1$2.MessageService }, { token: i1.TranslocoService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
2016
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyMessageService, providedIn: 'root' }); }
2060
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: VerificationWrapperComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i1$3.HttpClient }, { token: SpiderlyMessageService }, { token: i0.ChangeDetectorRef }, { token: i3$2.Router }, { token: i3$2.ActivatedRoute }, { token: i1.TranslocoService }, { token: BaseFormService }], target: i0.ɵɵFactoryTarget.Component }); }
2061
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: VerificationWrapperComponent, isStandalone: true, selector: "verification-wrapper", inputs: { email: "email" }, outputs: { onResendVerificationToken: "onResendVerificationToken", onCodeSubmit: "onCodeSubmit" }, usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div class=\"min-h-screen\" style=\"display: flex; justify-content: center; align-items: center;\">\n <div class=\"dialog\" style=\"padding: 0px;\">\n @if (verificationTokenRequestFormGroup != null) {\n <spiderly-panel>\n <panel-header [title]=\"t('AccountVerificationHeader')\" [showBigTitle]=\"true\" icon=\"pi pi-envelope\"></panel-header>\n \n <panel-body>\n <form class=\"grid\">\n <div class=\"col-12\">\n <div style=\"font-size: 17.5px\">{{t('AccountVerificationTitle')}}</div>\n </div>\n <div class=\"col-12\">\n {{t('AccountVerificationDescription', {email: email})}}\n </div>\n <div class=\"col-12\">\n <spiderly-textbox [control]=\"verificationTokenRequestFormGroup.getControl('verificationCode')\"></spiderly-textbox>\n </div>\n <div class=\"col-12\">\n <spiderly-button (onClick)=\"codeSubmit()\" [label]=\"t('Submit')\" icon=\"pi pi-verified\" type=\"submit\"></spiderly-button>\n </div>\n </form>\n </panel-body>\n \n <panel-footer>\n <a pButton class=\"p-button-link\" [label]=\"t('GoToGmail')\" icon=\"pi pi-external-link\" href=\"https://mail.google.com/mail/u/\" target=\"_blank\" rel=\"noopener noreferrer\"></a>\n <a pButton class=\"p-button-link\" [label]=\"t('GoToYahoo')\" icon=\"pi pi-external-link\" href=\"https://mail.yahoo.com/d/folders/1/\" target=\"_blank\" rel=\"noopener noreferrer\"></a>\n </panel-footer>\n <panel-footer>\n <div>{{t('ResendVerificationCodeFirstPart')}} <a class=\"link\" (click)=\"resendVerificationToken()\">{{t('ResendVerificationCodeLinkSecondPart')}}</a></div>\n </panel-footer>\n </spiderly-panel>\n }\n @else {\n <!-- TODO FT: Add skeleton -->\n }\n </div>\n </div>\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: SpiderlyTextboxComponent, selector: "spiderly-textbox", inputs: ["showButton", "buttonIcon"], outputs: ["onButtonClick"] }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "ngmodule", type: SpiderlyPanelsModule }, { kind: "component", type: PanelHeaderComponent, selector: "panel-header", inputs: ["title", "showBigTitle", "showIcon", "icon", "index", "tabs"] }, { kind: "component", type: PanelBodyComponent, selector: "panel-body", inputs: ["normalBottomPadding"] }, { kind: "component", type: PanelFooterComponent, selector: "panel-footer" }, { kind: "component", type: SpiderlyPanelComponent, selector: "spiderly-panel", inputs: ["isFirstMultiplePanel", "isMiddleMultiplePanel", "isLastMultiplePanel", "toggleable", "toggler", "collapsed", "crudMenu", "showCrudMenu", "showRemoveIcon", "index", "showPanelHeader"], outputs: ["onMenuIconClick", "onRemoveIconClick"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
2017
2062
  }
2018
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyMessageService, decorators: [{
2063
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: VerificationWrapperComponent, decorators: [{
2064
+ type: Component,
2065
+ args: [{ selector: 'verification-wrapper', imports: [
2066
+ CommonModule,
2067
+ FormsModule,
2068
+ ReactiveFormsModule,
2069
+ SpiderlyControlsModule,
2070
+ SpiderlyPanelsModule,
2071
+ ButtonModule,
2072
+ TranslocoDirective,
2073
+ ], template: "<ng-container *transloco=\"let t\">\n <div class=\"min-h-screen\" style=\"display: flex; justify-content: center; align-items: center;\">\n <div class=\"dialog\" style=\"padding: 0px;\">\n @if (verificationTokenRequestFormGroup != null) {\n <spiderly-panel>\n <panel-header [title]=\"t('AccountVerificationHeader')\" [showBigTitle]=\"true\" icon=\"pi pi-envelope\"></panel-header>\n \n <panel-body>\n <form class=\"grid\">\n <div class=\"col-12\">\n <div style=\"font-size: 17.5px\">{{t('AccountVerificationTitle')}}</div>\n </div>\n <div class=\"col-12\">\n {{t('AccountVerificationDescription', {email: email})}}\n </div>\n <div class=\"col-12\">\n <spiderly-textbox [control]=\"verificationTokenRequestFormGroup.getControl('verificationCode')\"></spiderly-textbox>\n </div>\n <div class=\"col-12\">\n <spiderly-button (onClick)=\"codeSubmit()\" [label]=\"t('Submit')\" icon=\"pi pi-verified\" type=\"submit\"></spiderly-button>\n </div>\n </form>\n </panel-body>\n \n <panel-footer>\n <a pButton class=\"p-button-link\" [label]=\"t('GoToGmail')\" icon=\"pi pi-external-link\" href=\"https://mail.google.com/mail/u/\" target=\"_blank\" rel=\"noopener noreferrer\"></a>\n <a pButton class=\"p-button-link\" [label]=\"t('GoToYahoo')\" icon=\"pi pi-external-link\" href=\"https://mail.yahoo.com/d/folders/1/\" target=\"_blank\" rel=\"noopener noreferrer\"></a>\n </panel-footer>\n <panel-footer>\n <div>{{t('ResendVerificationCodeFirstPart')}} <a class=\"link\" (click)=\"resendVerificationToken()\">{{t('ResendVerificationCodeLinkSecondPart')}}</a></div>\n </panel-footer>\n </spiderly-panel>\n }\n @else {\n <!-- TODO FT: Add skeleton -->\n }\n </div>\n </div>\n</ng-container>" }]
2074
+ }], ctorParameters: () => [{ type: i0.KeyValueDiffers }, { type: i1$3.HttpClient }, { type: SpiderlyMessageService }, { type: i0.ChangeDetectorRef }, { type: i3$2.Router }, { type: i3$2.ActivatedRoute }, { type: i1.TranslocoService }, { type: BaseFormService }], propDecorators: { email: [{
2075
+ type: Input
2076
+ }], onResendVerificationToken: [{
2077
+ type: Output
2078
+ }], onCodeSubmit: [{
2079
+ type: Output
2080
+ }] } });
2081
+
2082
+ class InitCompanyAuthDialogDetails extends BaseEntity {
2083
+ constructor({ image, companyName, } = {}) {
2084
+ super();
2085
+ this.image = image;
2086
+ this.companyName = companyName;
2087
+ }
2088
+ static { this.typeName = 'InitCompanyAuthDialogDetails'; }
2089
+ }
2090
+
2091
+ class ConfigServiceBase {
2092
+ constructor() {
2093
+ this.production = false;
2094
+ this.frontendUrl = 'http://localhost:4200';
2095
+ this.companyName = 'Company Name';
2096
+ this.primaryColor = '#111b2c';
2097
+ /* URLs */
2098
+ this.loginSlug = 'login';
2099
+ /* Local storage */
2100
+ this.accessTokenKey = 'access_token';
2101
+ this.refreshTokenKey = 'refresh_token';
2102
+ this.browserIdKey = 'browser_id';
2103
+ this.httpOptions = {};
2104
+ this.httpSkipSpinnerOptions = {
2105
+ headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
2106
+ params: new HttpParams().set('X-Skip-Spinner', 'true')
2107
+ };
2108
+ this.logoPath = 'assets/images/logo/logo.svg';
2109
+ }
2110
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ConfigServiceBase, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2111
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ConfigServiceBase, providedIn: 'root' }); }
2112
+ }
2113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ConfigServiceBase, decorators: [{
2019
2114
  type: Injectable,
2020
2115
  args: [{
2021
- providedIn: 'root',
2116
+ providedIn: 'root'
2022
2117
  }]
2023
- }], ctorParameters: () => [{ type: i1$2.MessageService }, { type: i1.TranslocoService }, { type: i0.NgZone }] });
2118
+ }], ctorParameters: () => [] });
2024
2119
 
2025
- class BaseFormService {
2026
- constructor(translateLabelsService, validatorService, messageService, translocoService) {
2027
- this.translateLabelsService = translateLabelsService;
2028
- this.validatorService = validatorService;
2029
- this.messageService = messageService;
2030
- this.translocoService = translocoService;
2031
- this.initFormGroup = (formGroup, targetClass, initialValues, updateOnChangeControls) => {
2032
- if (!formGroup)
2033
- throw new SpiderlyError('You need to instantiate the form group.');
2034
- if (!targetClass)
2035
- throw new SpiderlyError('You need to pass targetClass.');
2036
- if (!initialValues)
2037
- initialValues = {};
2038
- Object.keys(targetClass.schema).forEach((formControlName) => {
2039
- const propSchema = targetClass.schema[formControlName];
2040
- let propInitialValue = initialValues[formControlName];
2041
- const existingControl = formGroup.get(formControlName);
2042
- if (propSchema.type.endsWith('[]') &&
2043
- propSchema.nestedConstructor &&
2044
- propSchema.type !== 'Namebook[]') {
2045
- if (existingControl instanceof SpiderlyFormArray) {
2046
- this.initFormArray(existingControl, propSchema.nestedConstructor, propInitialValue);
2047
- }
2048
- else {
2049
- const control = new SpiderlyFormArray([], this.translocoService, this);
2050
- this.initFormArray(control, propSchema.nestedConstructor, propInitialValue);
2051
- control.label = formControlName;
2052
- control.labelForDisplay = this.getTranslatedLabel(formControlName);
2053
- formGroup.setControl(formControlName, control);
2054
- }
2055
- }
2056
- else if (propSchema.nestedConstructor &&
2057
- propSchema.type !== 'Namebook[]') {
2058
- if (existingControl instanceof SpiderlyFormGroup) {
2059
- this.initFormGroup(existingControl, propSchema.nestedConstructor, propInitialValue);
2060
- }
2061
- else {
2062
- const control = new SpiderlyFormGroup({});
2063
- this.initFormGroup(control, propSchema.nestedConstructor, propInitialValue);
2064
- formGroup.setControl(formControlName, control);
2065
- }
2066
- }
2067
- else {
2068
- // 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.
2069
- if (formControlName === 'id' && !propInitialValue) {
2070
- propInitialValue = 0;
2071
- }
2072
- if (existingControl instanceof SpiderlyFormControl) {
2073
- existingControl.setValue(propInitialValue);
2074
- }
2075
- else {
2076
- let control;
2077
- if (updateOnChangeControls?.includes(formControlName) ||
2078
- (formControlName.endsWith('Id') && formControlName.length > 2) ||
2079
- propSchema.type === 'Date' ||
2080
- propSchema.type === 'Namebook[]') {
2081
- control = new SpiderlyFormControl(propInitialValue, { updateOn: 'change' });
2082
- }
2083
- else {
2084
- control = new SpiderlyFormControl(propInitialValue, { updateOn: 'blur' });
2085
- }
2086
- control.label = formControlName;
2087
- control.labelForDisplay = this.getTranslatedLabel(formControlName);
2088
- control.parentClassName = targetClass.typeName;
2089
- this.validatorService.setValidator(control, targetClass.typeName);
2090
- formGroup.setControl(formControlName, control);
2091
- }
2092
- }
2093
- });
2094
- formGroup.targetClass = targetClass;
2095
- return formGroup;
2120
+ class ApiSecurityService {
2121
+ constructor(http, config) {
2122
+ this.http = http;
2123
+ this.config = config;
2124
+ //#region Authentication
2125
+ this.login = (request) => {
2126
+ return this.http.post(`${this.config.apiUrl}/Security/Login`, request, this.config.httpOptions);
2096
2127
  };
2097
- //#region Helpers
2098
- this.showInvalidFieldsMessage = () => {
2099
- this.messageService.warningMessage(this.translocoService.translate('YouHaveSomeInvalidFieldsDescription'), this.translocoService.translate('YouHaveSomeInvalidFieldsTitle'));
2128
+ this.loginExternal = (externalProviderDTO) => {
2129
+ return this.http.post(`${this.config.apiUrl}/Security/LoginExternal`, externalProviderDTO, this.config.httpOptions);
2100
2130
  };
2101
- this.getSaveBodyMainDTOKey = (saveBodyClass) => {
2102
- const schema = saveBodyClass.schema;
2103
- return Object.keys(schema).find(k => schema[k].isSaveBodyMainDTO === true);
2131
+ this.sendLoginVerificationEmail = (loginDTO) => {
2132
+ return this.http.post(`${this.config.apiUrl}/Security/SendLoginVerificationEmail`, loginDTO, this.config.httpOptions);
2104
2133
  };
2105
- this.mapMainUIFormToSaveBody = (mainUIFormClass, mainUIFormValues) => {
2106
- let saveBody = {};
2107
- Object.keys(mainUIFormClass.schema).forEach(propName => {
2108
- const property = mainUIFormClass.schema[propName];
2109
- const value = mainUIFormValues[propName];
2110
- // Handle ordered one-to-many (e.g., "orderedItemsMainUIFormDTO" -> "orderedItemsSaveBodyDTO")
2111
- if (propName.startsWith('ordered') && propName.endsWith('MainUIFormDTO')) {
2112
- const newKey = propName.replace('MainUIFormDTO', 'SaveBodyDTO');
2113
- // Recursively map nested DTOs
2114
- const relatedEntity = property.nestedConstructor;
2115
- saveBody[newKey] = value?.map(item => this.mapMainUIFormToSaveBody(relatedEntity, item)) ?? [];
2116
- }
2117
- // Handle multi-select (e.g., "itemsIds" -> "selectedItemsIds")
2118
- else if (propName.endsWith('Ids')) {
2119
- saveBody[`selected${capitalizeFirstChar(propName)}`] = value ?? [];
2120
- }
2121
- // Handle multi-autocomplete (e.g., "itemsNamebookDTOList" -> "selectedItemsIds")
2122
- else if (propName.endsWith('NamebookDTOList')) {
2123
- saveBody[`selected${capitalizeFirstChar(propName)}`] = value ?? [];
2124
- }
2125
- // Handle the main DTO object (e.g., "entityDTO")
2126
- else {
2127
- saveBody[propName] = value;
2128
- }
2129
- });
2130
- return saveBody;
2134
+ this.logout = (browserId) => {
2135
+ return this.http.get(`${this.config.apiUrl}/Security/Logout?browserId=${browserId}`);
2136
+ };
2137
+ this.refreshToken = (request) => {
2138
+ return this.http.post(`${this.config.apiUrl}/Security/RefreshToken`, request, this.config.httpOptions);
2139
+ };
2140
+ //#endregion
2141
+ //#region User
2142
+ this.getCurrentUserBase = () => {
2143
+ return this.http.get(`${this.config.apiUrl}/Security/GetCurrentUserBase`, this.config.httpSkipSpinnerOptions);
2144
+ };
2145
+ this.getCurrentUserPermissionCodes = () => {
2146
+ return this.http.get(`${this.config.apiUrl}/Security/GetCurrentUserPermissionCodes`, this.config.httpSkipSpinnerOptions);
2147
+ };
2148
+ //#endregion
2149
+ //#region Notification
2150
+ this.getUnreadNotificationsCountForCurrentUser = () => {
2151
+ return this.http.get(`${this.config.apiUrl}/Notification/GetUnreadNotificationsCountForCurrentUser`, this.config.httpSkipSpinnerOptions);
2131
2152
  };
2132
2153
  }
2133
- getTranslatedLabel(formControlName) {
2134
- if (formControlName.endsWith('Id') && formControlName.length > 2) {
2135
- formControlName = formControlName.substring(0, formControlName.length - 2);
2136
- }
2137
- else if (formControlName.endsWith('DisplayName')) {
2138
- formControlName = formControlName.replace('DisplayName', '');
2139
- }
2140
- return this.translateLabelsService.translate(formControlName);
2141
- }
2142
- addNewFormGroupToFormArray(formArray, targetClass, initialValues, index) {
2143
- let helperFormGroup = new SpiderlyFormGroup({});
2144
- this.initFormGroup(helperFormGroup, targetClass, initialValues);
2145
- if (index == null) {
2146
- formArray.push(helperFormGroup);
2147
- }
2148
- else {
2149
- formArray.insert(index, helperFormGroup);
2150
- }
2151
- return helperFormGroup;
2152
- }
2153
- removeFormControlFromTheFormArray(formArray, index) {
2154
- if (index == null)
2155
- throw new SpiderlyError('Can not pass null index.');
2156
- formArray.removeAt(index);
2157
- }
2158
- initFormArray(formArray, targetClass, initialValues = []) {
2159
- if (!formArray)
2160
- throw new SpiderlyError('You must pass a FormArray instance to be initialized or updated.');
2161
- if (!targetClass)
2162
- throw new SpiderlyError('You did not initialize targetClass');
2163
- // formArray.required = required;
2164
- formArray.formGroupInitialValues = {}; // When we need we can pass formGroupInitialValues to this method instead of assigning it to empty object
2165
- formArray.targetClass = targetClass;
2166
- initialValues.forEach((model, index) => {
2167
- const existingControl = formArray.at(index);
2168
- if (existingControl instanceof SpiderlyFormGroup) {
2169
- this.initFormGroup(existingControl, targetClass, model);
2170
- }
2171
- else {
2172
- let helperFormGroup = new SpiderlyFormGroup({});
2173
- this.initFormGroup(helperFormGroup, targetClass, model);
2174
- formArray.push(helperFormGroup);
2175
- }
2176
- });
2177
- return formArray;
2178
- }
2179
- generateNewNegativeId(formArray) {
2180
- return -formArray.getRawValue().filter(x => x.id < 0).length - 1;
2181
- }
2182
- isControlValid(control, controlNamesFromHtml) {
2183
- let invalid = false;
2184
- if (control instanceof SpiderlyFormControl) {
2185
- if (control.invalid &&
2186
- (controlNamesFromHtml == null || controlNamesFromHtml?.includes(control.label))) {
2187
- control.markAsDirty();
2188
- invalid = true;
2189
- }
2190
- }
2191
- else if (control instanceof SpiderlyFormGroup) {
2192
- Object.keys(control.controls).forEach(key => {
2193
- const nestedControl = control.controls[key];
2194
- if (!this.isControlValid(nestedControl, control.controlNamesFromHtml)) {
2195
- invalid = true;
2196
- }
2197
- });
2198
- }
2199
- else if (control instanceof SpiderlyFormArray) {
2200
- control.controls.forEach((nestedControl) => {
2201
- if (!this.isControlValid(nestedControl)) {
2202
- invalid = true;
2203
- }
2204
- });
2205
- }
2206
- if (invalid) {
2207
- return false;
2208
- }
2209
- return true;
2210
- }
2211
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: BaseFormService, deps: [{ token: TranslateLabelsAbstractService }, { token: ValidatorAbstractService }, { token: SpiderlyMessageService }, { token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2212
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: BaseFormService, providedIn: 'root' }); }
2154
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ApiSecurityService, deps: [{ token: i1$3.HttpClient }, { token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Injectable }); }
2155
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ApiSecurityService, providedIn: 'root' }); }
2213
2156
  }
2214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: BaseFormService, decorators: [{
2157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ApiSecurityService, decorators: [{
2215
2158
  type: Injectable,
2216
2159
  args: [{
2217
- providedIn: 'root',
2160
+ providedIn: 'root'
2218
2161
  }]
2219
- }], ctorParameters: () => [{ type: TranslateLabelsAbstractService }, { type: ValidatorAbstractService }, { type: SpiderlyMessageService }, { type: i1.TranslocoService }] });
2220
-
2221
- class InitCompanyAuthDialogDetails extends BaseEntity {
2222
- constructor({ image, companyName, } = {}) {
2223
- super();
2224
- this.image = image;
2225
- this.companyName = companyName;
2226
- }
2227
- static { this.typeName = 'InitCompanyAuthDialogDetails'; }
2228
- }
2162
+ }], ctorParameters: () => [{ type: i1$3.HttpClient }, { type: ConfigServiceBase }] });
2229
2163
 
2230
- class AuthBaseService {
2164
+ class AuthServiceBase {
2231
2165
  constructor(router, http, externalAuthService, apiService, config, platformId) {
2232
2166
  this.router = router;
2233
2167
  this.http = http;
@@ -2423,284 +2357,19 @@ class AuthBaseService {
2423
2357
  }
2424
2358
  this.onAfterNgOnDestroy();
2425
2359
  }
2426
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthBaseService, deps: [{ token: i3$2.Router }, { token: i1$4.HttpClient }, { token: i3$4.SocialAuthService }, { token: ApiSecurityService }, { token: ConfigBaseService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
2427
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthBaseService, providedIn: 'root' }); }
2360
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthServiceBase, deps: [{ token: i3$2.Router }, { token: i1$3.HttpClient }, { token: i3$4.SocialAuthService }, { token: ApiSecurityService }, { token: ConfigServiceBase }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
2361
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthServiceBase, providedIn: 'root' }); }
2428
2362
  }
2429
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthBaseService, decorators: [{
2363
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthServiceBase, decorators: [{
2430
2364
  type: Injectable,
2431
2365
  args: [{
2432
2366
  providedIn: 'root'
2433
2367
  }]
2434
- }], ctorParameters: () => [{ type: i3$2.Router }, { type: i1$4.HttpClient }, { type: i3$4.SocialAuthService }, { type: ApiSecurityService }, { type: ConfigBaseService }, { type: Object, decorators: [{
2368
+ }], ctorParameters: () => [{ type: i3$2.Router }, { type: i1$3.HttpClient }, { type: i3$4.SocialAuthService }, { type: ApiSecurityService }, { type: ConfigServiceBase }, { type: Object, decorators: [{
2435
2369
  type: Inject,
2436
2370
  args: [PLATFORM_ID]
2437
2371
  }] }] });
2438
2372
 
2439
- class RoleBaseDetailsComponent {
2440
- constructor(apiService, route, baseFormService, authService) {
2441
- this.apiService = apiService;
2442
- this.route = route;
2443
- this.baseFormService = baseFormService;
2444
- this.authService = authService;
2445
- this.onSave = new EventEmitter();
2446
- this.onAfterFormGroupInit = new EventEmitter();
2447
- this.additionalButtons = [];
2448
- this.showBigPanelTitle = true;
2449
- this.handleAdditionalSaveAuthorization = () => Promise.resolve(true);
2450
- this.isAuthorizedForSave = false;
2451
- this.onIsAuthorizedForSaveChange = new EventEmitter();
2452
- this.loading = true;
2453
- this.handleAuthorizationForSave = async () => {
2454
- const currentUserPermissionCodes = await firstValueFrom(this.authService.currentUserPermissionCodes$);
2455
- const isAdditionallyAuthorizedForSave = await this.handleAdditionalSaveAuthorization();
2456
- this.isAuthorizedForSave =
2457
- (currentUserPermissionCodes.includes('InsertRole') && this.modelId <= 0) ||
2458
- (currentUserPermissionCodes.includes('UpdateRole') && this.modelId > 0) ||
2459
- isAdditionallyAuthorizedForSave;
2460
- if (this.isAuthorizedForSave) {
2461
- this.parentFormGroup.enable();
2462
- }
2463
- else {
2464
- this.parentFormGroup.disable();
2465
- }
2466
- this.onIsAuthorizedForSaveChange.next(new IsAuthorizedForSaveEvent({
2467
- isAuthorizedForSave: this.isAuthorizedForSave,
2468
- }));
2469
- };
2470
- }
2471
- ngOnInit() {
2472
- this.parentFormGroup.initSaveBody = () => {
2473
- let saveBody = new RoleSaveBody();
2474
- saveBody = this.baseFormService.mapMainUIFormToSaveBody(RoleMainUIForm, this.parentFormGroup.getRawValue());
2475
- return saveBody;
2476
- };
2477
- this.parentFormGroup.saveObservableMethod = this.apiService.saveRole;
2478
- this.route.params.subscribe(async (params) => {
2479
- this.modelId = params['id'];
2480
- this.apiService.getPermissionsDropdownListForRole().subscribe(po => {
2481
- this.permissionsForRoleOptions = po;
2482
- });
2483
- if (this.modelId > 0) {
2484
- forkJoin({
2485
- mainUIFormDTO: this.apiService.getRoleMainUIFormDTO(this.modelId)
2486
- })
2487
- .subscribe(async ({ mainUIFormDTO }) => {
2488
- this.baseFormService.initFormGroup(this.parentFormGroup, RoleMainUIForm, mainUIFormDTO);
2489
- await this.handleAuthorizationForSave();
2490
- this.loading = false;
2491
- this.onAfterFormGroupInit.next();
2492
- });
2493
- }
2494
- else {
2495
- this.baseFormService.initFormGroup(this.parentFormGroup, RoleMainUIForm);
2496
- await this.handleAuthorizationForSave();
2497
- this.loading = false;
2498
- this.onAfterFormGroupInit.next();
2499
- }
2500
- });
2501
- }
2502
- searchUsersForRole(event) {
2503
- this.apiService.getUsersAutocompleteListForRole(50, event?.query ?? '').subscribe(no => {
2504
- this.usersForRoleOptions = no;
2505
- });
2506
- }
2507
- save() {
2508
- this.onSave.next();
2509
- }
2510
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: RoleBaseDetailsComponent, deps: [{ token: ApiSecurityService }, { token: i3$2.ActivatedRoute }, { token: BaseFormService }, { token: AuthBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
2511
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: RoleBaseDetailsComponent, isStandalone: true, selector: "role-base-details", inputs: { getCrudMenuForOrderedData: "getCrudMenuForOrderedData", parentFormGroup: "parentFormGroup", additionalButtons: "additionalButtons", panelTitle: "panelTitle", showBigPanelTitle: "showBigPanelTitle", panelIcon: "panelIcon", handleAdditionalSaveAuthorization: "handleAdditionalSaveAuthorization" }, outputs: { onSave: "onSave", onAfterFormGroupInit: "onAfterFormGroupInit", onIsAuthorizedForSaveChange: "onIsAuthorizedForSaveChange" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <spiderly-panel>\r\n <panel-header [title]=\"panelTitle\" [showBigTitle]=\"showBigPanelTitle\" [icon]=\"panelIcon\"></panel-header>\r\n\r\n <panel-body>\r\n <form *ngIf=\"loading === false\" class=\"grid\"> <!-- FT: Don't put @deffer it's not working as expected -->\r\n <div class=\"col-12\">\r\n <spiderly-textbox [control]=\"parentFormGroup.controls.roleDTO.getControl('name')\"></spiderly-textbox>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-textarea [control]=\"parentFormGroup.controls.roleDTO.getControl('description')\"></spiderly-textarea>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-multiautocomplete [control]=\"parentFormGroup.controls.usersNamebookDTOList\" [options]=\"usersForRoleOptions\" (onTextInput)=\"searchUsersForRole($event)\" [label]=\"t('Users')\"></spiderly-multiautocomplete>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-multiselect [control]=\"parentFormGroup.controls.permissionsIds\" [options]=\"permissionsForRoleOptions\" [label]=\"t('Permissions')\"></spiderly-multiselect>\r\n </div>\r\n </form>\r\n\r\n <card-skeleton *ngIf=\"loading === true\" [height]=\"502\"></card-skeleton>\r\n\r\n </panel-body>\r\n\r\n <panel-footer>\r\n <spiderly-button [disabled]=\"!isAuthorizedForSave\" (onClick)=\"save()\" [label]=\"t('Save')\" icon=\"pi pi-save\"></spiderly-button>\r\n @for (button of additionalButtons; track button.label) {\r\n <spiderly-button (onClick)=\"button.onClick()\" [disabled]=\"button.disabled\" [label]=\"button.label\" [icon]=\"button.icon\"></spiderly-button>\r\n }\r\n <return-button></return-button>\r\n </panel-footer>\r\n </spiderly-panel>\r\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: CardSkeletonComponent, selector: "card-skeleton", inputs: ["height"] }, { kind: "component", type: SpiderlyTextboxComponent, selector: "spiderly-textbox", inputs: ["showButton", "buttonIcon"], outputs: ["onButtonClick"] }, { kind: "component", type: SpiderlyTextareaComponent, selector: "spiderly-textarea" }, { kind: "component", type: SpiderlyMultiAutocompleteComponent, selector: "spiderly-multiautocomplete" }, { kind: "component", type: SpiderlyMultiSelectComponent, selector: "spiderly-multiselect" }, { kind: "ngmodule", type: SpiderlyPanelsModule }, { kind: "component", type: PanelHeaderComponent, selector: "panel-header", inputs: ["title", "showBigTitle", "showIcon", "icon", "index", "tabs"] }, { kind: "component", type: PanelBodyComponent, selector: "panel-body", inputs: ["normalBottomPadding"] }, { kind: "component", type: PanelFooterComponent, selector: "panel-footer" }, { kind: "component", type: SpiderlyPanelComponent, selector: "spiderly-panel", inputs: ["isFirstMultiplePanel", "isMiddleMultiplePanel", "isLastMultiplePanel", "toggleable", "toggler", "collapsed", "crudMenu", "showCrudMenu", "showRemoveIcon", "index", "showPanelHeader"], outputs: ["onMenuIconClick", "onRemoveIconClick"] }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "component", type: SpiderlyReturnButtonComponent, selector: "return-button", inputs: ["navigateUrl"] }] }); }
2512
- }
2513
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: RoleBaseDetailsComponent, decorators: [{
2514
- type: Component,
2515
- args: [{ selector: 'role-base-details', imports: [
2516
- CommonModule,
2517
- FormsModule,
2518
- ReactiveFormsModule,
2519
- TranslocoDirective,
2520
- CardSkeletonComponent,
2521
- SpiderlyTextboxComponent,
2522
- SpiderlyTextareaComponent,
2523
- SpiderlyMultiAutocompleteComponent,
2524
- SpiderlyMultiSelectComponent,
2525
- SpiderlyPanelsModule,
2526
- SpiderlyButtonComponent,
2527
- SpiderlyReturnButtonComponent
2528
- ], template: "<ng-container *transloco=\"let t\">\r\n <spiderly-panel>\r\n <panel-header [title]=\"panelTitle\" [showBigTitle]=\"showBigPanelTitle\" [icon]=\"panelIcon\"></panel-header>\r\n\r\n <panel-body>\r\n <form *ngIf=\"loading === false\" class=\"grid\"> <!-- FT: Don't put @deffer it's not working as expected -->\r\n <div class=\"col-12\">\r\n <spiderly-textbox [control]=\"parentFormGroup.controls.roleDTO.getControl('name')\"></spiderly-textbox>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-textarea [control]=\"parentFormGroup.controls.roleDTO.getControl('description')\"></spiderly-textarea>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-multiautocomplete [control]=\"parentFormGroup.controls.usersNamebookDTOList\" [options]=\"usersForRoleOptions\" (onTextInput)=\"searchUsersForRole($event)\" [label]=\"t('Users')\"></spiderly-multiautocomplete>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-multiselect [control]=\"parentFormGroup.controls.permissionsIds\" [options]=\"permissionsForRoleOptions\" [label]=\"t('Permissions')\"></spiderly-multiselect>\r\n </div>\r\n </form>\r\n\r\n <card-skeleton *ngIf=\"loading === true\" [height]=\"502\"></card-skeleton>\r\n\r\n </panel-body>\r\n\r\n <panel-footer>\r\n <spiderly-button [disabled]=\"!isAuthorizedForSave\" (onClick)=\"save()\" [label]=\"t('Save')\" icon=\"pi pi-save\"></spiderly-button>\r\n @for (button of additionalButtons; track button.label) {\r\n <spiderly-button (onClick)=\"button.onClick()\" [disabled]=\"button.disabled\" [label]=\"button.label\" [icon]=\"button.icon\"></spiderly-button>\r\n }\r\n <return-button></return-button>\r\n </panel-footer>\r\n </spiderly-panel>\r\n</ng-container>" }]
2529
- }], ctorParameters: () => [{ type: ApiSecurityService }, { type: i3$2.ActivatedRoute }, { type: BaseFormService }, { type: AuthBaseService }], propDecorators: { onSave: [{
2530
- type: Output
2531
- }], onAfterFormGroupInit: [{
2532
- type: Output
2533
- }], getCrudMenuForOrderedData: [{
2534
- type: Input
2535
- }], parentFormGroup: [{
2536
- type: Input
2537
- }], additionalButtons: [{
2538
- type: Input
2539
- }], panelTitle: [{
2540
- type: Input
2541
- }], showBigPanelTitle: [{
2542
- type: Input
2543
- }], panelIcon: [{
2544
- type: Input
2545
- }], handleAdditionalSaveAuthorization: [{
2546
- type: Input
2547
- }], onIsAuthorizedForSaveChange: [{
2548
- type: Output
2549
- }] } });
2550
-
2551
- class BaseFormCopy {
2552
- constructor(differs, http, messageService, changeDetectorRef, router, route, translocoService, baseFormService) {
2553
- this.differs = differs;
2554
- this.http = http;
2555
- this.messageService = messageService;
2556
- this.changeDetectorRef = changeDetectorRef;
2557
- this.router = router;
2558
- this.route = route;
2559
- this.translocoService = translocoService;
2560
- this.baseFormService = baseFormService;
2561
- this.parentFormGroup = new SpiderlyFormGroup({});
2562
- this.successfulSaveToastDescription = this.translocoService.translate('SuccessfulSaveToastDescription');
2563
- //#region Model
2564
- // onSave method is here only because of the hooks, we should move everything except them to the BaseFromService
2565
- this.onSave = (reroute = true) => {
2566
- if (!this.saveBodyClass)
2567
- throw new SpiderlyError('You did not initialize saveBodyClass');
2568
- if (!this.mainUIFormClass)
2569
- throw new SpiderlyError('You did not initialize mainUIFormClass');
2570
- this.saveBody = this.parentFormGroup.initSaveBody();
2571
- this.onBeforeSave(this.saveBody);
2572
- this.saveBody = this.saveBody ?? this.parentFormGroup.getRawValue();
2573
- const isValid = this.baseFormService.isControlValid(this.parentFormGroup);
2574
- if (isValid) {
2575
- this.parentFormGroup.saveObservableMethod(this.saveBody).subscribe(res => {
2576
- this.messageService.successMessage(this.successfulSaveToastDescription);
2577
- this.baseFormService.initFormGroup(this.parentFormGroup, this.mainUIFormClass, res);
2578
- if (reroute) {
2579
- const saveBodyMainDTOKey = this.baseFormService.getSaveBodyMainDTOKey(this.saveBodyClass);
2580
- const savedObjectId = res[saveBodyMainDTOKey]?.id;
2581
- this.rerouteToSavedObject(savedObjectId); // You always need to have id, because of id == 0 and version change
2582
- }
2583
- this.onAfterSave();
2584
- });
2585
- this.onAfterSaveRequest();
2586
- }
2587
- else {
2588
- this.baseFormService.showInvalidFieldsMessage();
2589
- }
2590
- };
2591
- this.rerouteToSavedObject = (rerouteId) => {
2592
- if (rerouteId == null) {
2593
- const currentUrl = this.router.url;
2594
- const parentUrl = getParentUrl(currentUrl);
2595
- this.router.navigateByUrl(parentUrl);
2596
- return;
2597
- }
2598
- const segments = this.router.url.split('/');
2599
- segments[segments.length - 1] = rerouteId.toString();
2600
- const newUrl = segments.join('/');
2601
- this.router.navigateByUrl(newUrl);
2602
- };
2603
- this.onBeforeSave = (saveBody) => { };
2604
- this.onAfterSave = () => { };
2605
- this.onAfterSaveRequest = () => { };
2606
- }
2607
- ngOnInit() {
2608
- }
2609
- //#endregion
2610
- //#region Model List
2611
- getFormArrayControlByIndex(formControlName, formArray, index, filter) {
2612
- // if(formArray.controlNamesFromHtml.findIndex(x => x === formControlName) === -1)
2613
- // formArray.controlNamesFromHtml.push(formControlName);
2614
- let filteredFormGroups;
2615
- if (filter) {
2616
- filteredFormGroups = filter(formArray.controls);
2617
- }
2618
- else {
2619
- return formArray.controls[index].controls[formControlName];
2620
- }
2621
- return filteredFormGroups[index]?.controls[formControlName]; // FT: Don't change this. It's always possible that change detection occurs before something.
2622
- }
2623
- getFormArrayControls(formControlName, formArray, filter) {
2624
- // if(formArray.controlNamesFromHtml.findIndex(x => x === formControlName) === -1)
2625
- // formArray.controlNamesFromHtml.push(formControlName);
2626
- let filteredFormGroups;
2627
- if (filter) {
2628
- filteredFormGroups = filter(formArray.controls);
2629
- }
2630
- else {
2631
- return formArray.controls.map(x => x.controls[formControlName]);
2632
- }
2633
- return filteredFormGroups.map(x => x.controls[formControlName]);
2634
- }
2635
- removeFormControlsFromTheFormArray(formArray, indexes) {
2636
- // Sort indexes in descending order to avoid index shifts when removing controls
2637
- const sortedIndexes = indexes.sort((a, b) => b - a);
2638
- sortedIndexes.forEach(index => {
2639
- if (index >= 0 && index < formArray.length) {
2640
- formArray.removeAt(index);
2641
- }
2642
- });
2643
- }
2644
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: BaseFormCopy, deps: [{ token: i0.KeyValueDiffers }, { token: i1$4.HttpClient }, { token: SpiderlyMessageService }, { token: i0.ChangeDetectorRef }, { token: i3$2.Router }, { token: i3$2.ActivatedRoute }, { token: i1.TranslocoService }, { token: BaseFormService }], target: i0.ɵɵFactoryTarget.Component }); }
2645
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: BaseFormCopy, isStandalone: false, selector: "base-form", ngImport: i0, template: '', isInline: true }); }
2646
- }
2647
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: BaseFormCopy, decorators: [{
2648
- type: Component,
2649
- args: [{ selector: 'base-form', template: '', standalone: false }]
2650
- }], ctorParameters: () => [{ type: i0.KeyValueDiffers }, { type: i1$4.HttpClient }, { type: SpiderlyMessageService }, { type: i0.ChangeDetectorRef }, { type: i3$2.Router }, { type: i3$2.ActivatedRoute }, { type: i1.TranslocoService }, { type: BaseFormService }] });
2651
-
2652
- class VerificationWrapperComponent extends BaseFormCopy {
2653
- constructor(differs, http, messageService, changeDetectorRef, router, route, translocoService, baseFormService) {
2654
- super(differs, http, messageService, changeDetectorRef, router, route, translocoService, baseFormService);
2655
- this.differs = differs;
2656
- this.http = http;
2657
- this.messageService = messageService;
2658
- this.changeDetectorRef = changeDetectorRef;
2659
- this.router = router;
2660
- this.route = route;
2661
- this.translocoService = translocoService;
2662
- this.baseFormService = baseFormService;
2663
- this.verificationTokenRequestFormGroup = new SpiderlyFormGroup({});
2664
- this.onResendVerificationToken = new EventEmitter();
2665
- this.onCodeSubmit = new EventEmitter();
2666
- }
2667
- ngOnInit() {
2668
- this.initVerificationTokenRequestFormGroup(new VerificationTokenRequest({ email: this.email }));
2669
- }
2670
- initVerificationTokenRequestFormGroup(model) {
2671
- this.baseFormService.initFormGroup(this.verificationTokenRequestFormGroup, VerificationTokenRequest, model, ['verificationCode']);
2672
- }
2673
- codeSubmit() {
2674
- let isValid = this.baseFormService.isControlValid(this.verificationTokenRequestFormGroup);
2675
- if (isValid) {
2676
- this.onCodeSubmit.next(this.verificationTokenRequestFormGroup.controls.verificationCode.getRawValue());
2677
- }
2678
- }
2679
- resendVerificationToken() {
2680
- this.onResendVerificationToken.next(null);
2681
- }
2682
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: VerificationWrapperComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i1$4.HttpClient }, { token: SpiderlyMessageService }, { token: i0.ChangeDetectorRef }, { token: i3$2.Router }, { token: i3$2.ActivatedRoute }, { token: i1.TranslocoService }, { token: BaseFormService }], target: i0.ɵɵFactoryTarget.Component }); }
2683
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: VerificationWrapperComponent, isStandalone: true, selector: "verification-wrapper", inputs: { email: "email" }, outputs: { onResendVerificationToken: "onResendVerificationToken", onCodeSubmit: "onCodeSubmit" }, usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <div class=\"min-h-screen\" style=\"display: flex; justify-content: center; align-items: center;\">\r\n <div class=\"dialog\" style=\"padding: 0px;\">\r\n @if (verificationTokenRequestFormGroup != null) {\r\n <spiderly-panel>\r\n <panel-header [title]=\"t('AccountVerificationHeader')\" [showBigTitle]=\"true\" icon=\"pi pi-envelope\"></panel-header>\r\n \r\n <panel-body>\r\n <form class=\"grid\">\r\n <div class=\"col-12\">\r\n <div style=\"font-size: 17.5px\">{{t('AccountVerificationTitle')}}</div>\r\n </div>\r\n <div class=\"col-12\">\r\n {{t('AccountVerificationDescription', {email: email})}}\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-textbox [control]=\"verificationTokenRequestFormGroup.getControl('verificationCode')\"></spiderly-textbox>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-button (onClick)=\"codeSubmit()\" [label]=\"t('Submit')\" icon=\"pi pi-verified\" type=\"submit\"></spiderly-button>\r\n </div>\r\n </form>\r\n </panel-body>\r\n \r\n <panel-footer>\r\n <a pButton class=\"p-button-link\" [label]=\"t('GoToGmail')\" icon=\"pi pi-external-link\" href=\"https://mail.google.com/mail/u/\" target=\"_blank\" rel=\"noopener noreferrer\"></a>\r\n <a pButton class=\"p-button-link\" [label]=\"t('GoToYahoo')\" icon=\"pi pi-external-link\" href=\"https://mail.yahoo.com/d/folders/1/\" target=\"_blank\" rel=\"noopener noreferrer\"></a>\r\n </panel-footer>\r\n <panel-footer>\r\n <div>{{t('ResendVerificationCodeFirstPart')}} <a class=\"link\" (click)=\"resendVerificationToken()\">{{t('ResendVerificationCodeLinkSecondPart')}}</a></div>\r\n </panel-footer>\r\n </spiderly-panel>\r\n }\r\n @else {\r\n <!-- TODO FT: Add skeleton -->\r\n }\r\n </div>\r\n </div>\r\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: SpiderlyTextboxComponent, selector: "spiderly-textbox", inputs: ["showButton", "buttonIcon"], outputs: ["onButtonClick"] }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "ngmodule", type: SpiderlyPanelsModule }, { kind: "component", type: PanelHeaderComponent, selector: "panel-header", inputs: ["title", "showBigTitle", "showIcon", "icon", "index", "tabs"] }, { kind: "component", type: PanelBodyComponent, selector: "panel-body", inputs: ["normalBottomPadding"] }, { kind: "component", type: PanelFooterComponent, selector: "panel-footer" }, { kind: "component", type: SpiderlyPanelComponent, selector: "spiderly-panel", inputs: ["isFirstMultiplePanel", "isMiddleMultiplePanel", "isLastMultiplePanel", "toggleable", "toggler", "collapsed", "crudMenu", "showCrudMenu", "showRemoveIcon", "index", "showPanelHeader"], outputs: ["onMenuIconClick", "onRemoveIconClick"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
2684
- }
2685
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: VerificationWrapperComponent, decorators: [{
2686
- type: Component,
2687
- args: [{ selector: 'verification-wrapper', imports: [
2688
- CommonModule,
2689
- FormsModule,
2690
- ReactiveFormsModule,
2691
- SpiderlyControlsModule,
2692
- SpiderlyPanelsModule,
2693
- ButtonModule,
2694
- TranslocoDirective,
2695
- ], template: "<ng-container *transloco=\"let t\">\r\n <div class=\"min-h-screen\" style=\"display: flex; justify-content: center; align-items: center;\">\r\n <div class=\"dialog\" style=\"padding: 0px;\">\r\n @if (verificationTokenRequestFormGroup != null) {\r\n <spiderly-panel>\r\n <panel-header [title]=\"t('AccountVerificationHeader')\" [showBigTitle]=\"true\" icon=\"pi pi-envelope\"></panel-header>\r\n \r\n <panel-body>\r\n <form class=\"grid\">\r\n <div class=\"col-12\">\r\n <div style=\"font-size: 17.5px\">{{t('AccountVerificationTitle')}}</div>\r\n </div>\r\n <div class=\"col-12\">\r\n {{t('AccountVerificationDescription', {email: email})}}\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-textbox [control]=\"verificationTokenRequestFormGroup.getControl('verificationCode')\"></spiderly-textbox>\r\n </div>\r\n <div class=\"col-12\">\r\n <spiderly-button (onClick)=\"codeSubmit()\" [label]=\"t('Submit')\" icon=\"pi pi-verified\" type=\"submit\"></spiderly-button>\r\n </div>\r\n </form>\r\n </panel-body>\r\n \r\n <panel-footer>\r\n <a pButton class=\"p-button-link\" [label]=\"t('GoToGmail')\" icon=\"pi pi-external-link\" href=\"https://mail.google.com/mail/u/\" target=\"_blank\" rel=\"noopener noreferrer\"></a>\r\n <a pButton class=\"p-button-link\" [label]=\"t('GoToYahoo')\" icon=\"pi pi-external-link\" href=\"https://mail.yahoo.com/d/folders/1/\" target=\"_blank\" rel=\"noopener noreferrer\"></a>\r\n </panel-footer>\r\n <panel-footer>\r\n <div>{{t('ResendVerificationCodeFirstPart')}} <a class=\"link\" (click)=\"resendVerificationToken()\">{{t('ResendVerificationCodeLinkSecondPart')}}</a></div>\r\n </panel-footer>\r\n </spiderly-panel>\r\n }\r\n @else {\r\n <!-- TODO FT: Add skeleton -->\r\n }\r\n </div>\r\n </div>\r\n</ng-container>" }]
2696
- }], ctorParameters: () => [{ type: i0.KeyValueDiffers }, { type: i1$4.HttpClient }, { type: SpiderlyMessageService }, { type: i0.ChangeDetectorRef }, { type: i3$2.Router }, { type: i3$2.ActivatedRoute }, { type: i1.TranslocoService }, { type: BaseFormService }], propDecorators: { email: [{
2697
- type: Input
2698
- }], onResendVerificationToken: [{
2699
- type: Output
2700
- }], onCodeSubmit: [{
2701
- type: Output
2702
- }] } });
2703
-
2704
2373
  class LoginVerificationComponent {
2705
2374
  constructor(authService, messageService, translocoService) {
2706
2375
  this.authService = authService;
@@ -2720,15 +2389,15 @@ class LoginVerificationComponent {
2720
2389
  this.authService.navigateToDashboard();
2721
2390
  });
2722
2391
  }
2723
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LoginVerificationComponent, deps: [{ token: AuthBaseService }, { token: SpiderlyMessageService }, { token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
2724
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: LoginVerificationComponent, isStandalone: true, selector: "login-verification", inputs: { email: "email", userId: "userId" }, ngImport: i0, template: "<verification-wrapper [email]=\"email\" (onResendVerificationToken)=\"resendVerificationToken()\" (onCodeSubmit)=\"onCodeSubmit($event)\"></verification-wrapper>\r\n\r\n", dependencies: [{ kind: "component", type: VerificationWrapperComponent, selector: "verification-wrapper", inputs: ["email"], outputs: ["onResendVerificationToken", "onCodeSubmit"] }] }); }
2392
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LoginVerificationComponent, deps: [{ token: AuthServiceBase }, { token: SpiderlyMessageService }, { token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
2393
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: LoginVerificationComponent, isStandalone: true, selector: "login-verification", inputs: { email: "email", userId: "userId" }, ngImport: i0, template: "<verification-wrapper [email]=\"email\" (onResendVerificationToken)=\"resendVerificationToken()\" (onCodeSubmit)=\"onCodeSubmit($event)\"></verification-wrapper>\n\n", dependencies: [{ kind: "component", type: VerificationWrapperComponent, selector: "verification-wrapper", inputs: ["email"], outputs: ["onResendVerificationToken", "onCodeSubmit"] }] }); }
2725
2394
  }
2726
2395
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LoginVerificationComponent, decorators: [{
2727
2396
  type: Component,
2728
2397
  args: [{ selector: 'login-verification', imports: [
2729
2398
  VerificationWrapperComponent
2730
- ], template: "<verification-wrapper [email]=\"email\" (onResendVerificationToken)=\"resendVerificationToken()\" (onCodeSubmit)=\"onCodeSubmit($event)\"></verification-wrapper>\r\n\r\n" }]
2731
- }], ctorParameters: () => [{ type: AuthBaseService }, { type: SpiderlyMessageService }, { type: i1.TranslocoService }], propDecorators: { email: [{
2399
+ ], template: "<verification-wrapper [email]=\"email\" (onResendVerificationToken)=\"resendVerificationToken()\" (onCodeSubmit)=\"onCodeSubmit($event)\"></verification-wrapper>\n\n" }]
2400
+ }], ctorParameters: () => [{ type: AuthServiceBase }, { type: SpiderlyMessageService }, { type: i1.TranslocoService }], propDecorators: { email: [{
2732
2401
  type: Input
2733
2402
  }], userId: [{
2734
2403
  type: Input
@@ -2742,14 +2411,14 @@ class GoogleButtonComponent {
2742
2411
  this.loginWithGoogle.emit(createFakeGoogleWrapper());
2743
2412
  }
2744
2413
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: GoogleButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2745
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: GoogleButtonComponent, isStandalone: true, selector: "google-button", inputs: { label: "label" }, outputs: { loginWithGoogle: "loginWithGoogle" }, ngImport: i0, template: "<ng-container>\r\n <spiderly-button (onClick)=\"handleGoogleLogin()\" [label]=\"label\" [outlined]=\"true\" [style]=\"{width: '100%'}\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0.98em\" height=\"1em\" viewBox=\"0 0 256 262\"><path fill=\"#4285f4\" d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"/><path fill=\"#34a853\" d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"/><path fill=\"#fbbc05\" d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"/><path fill=\"#eb4335\" d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"/></svg>\r\n </spiderly-button>\r\n</ng-container>", dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }] }); }
2414
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: GoogleButtonComponent, isStandalone: true, selector: "google-button", inputs: { label: "label" }, outputs: { loginWithGoogle: "loginWithGoogle" }, ngImport: i0, template: "<ng-container>\n <spiderly-button (onClick)=\"handleGoogleLogin()\" [label]=\"label\" [outlined]=\"true\" [style]=\"{width: '100%'}\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0.98em\" height=\"1em\" viewBox=\"0 0 256 262\"><path fill=\"#4285f4\" d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"/><path fill=\"#34a853\" d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"/><path fill=\"#fbbc05\" d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"/><path fill=\"#eb4335\" d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"/></svg>\n </spiderly-button>\n</ng-container>", dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }] }); }
2746
2415
  }
2747
2416
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: GoogleButtonComponent, decorators: [{
2748
2417
  type: Component,
2749
2418
  args: [{ selector: 'google-button', imports: [
2750
2419
  ButtonModule,
2751
2420
  SpiderlyButtonComponent
2752
- ], template: "<ng-container>\r\n <spiderly-button (onClick)=\"handleGoogleLogin()\" [label]=\"label\" [outlined]=\"true\" [style]=\"{width: '100%'}\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0.98em\" height=\"1em\" viewBox=\"0 0 256 262\"><path fill=\"#4285f4\" d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"/><path fill=\"#34a853\" d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"/><path fill=\"#fbbc05\" d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"/><path fill=\"#eb4335\" d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"/></svg>\r\n </spiderly-button>\r\n</ng-container>" }]
2421
+ ], template: "<ng-container>\n <spiderly-button (onClick)=\"handleGoogleLogin()\" [label]=\"label\" [outlined]=\"true\" [style]=\"{width: '100%'}\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0.98em\" height=\"1em\" viewBox=\"0 0 256 262\"><path fill=\"#4285f4\" d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"/><path fill=\"#34a853\" d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"/><path fill=\"#fbbc05\" d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"/><path fill=\"#eb4335\" d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"/></svg>\n </spiderly-button>\n</ng-container>" }]
2753
2422
  }], propDecorators: { label: [{
2754
2423
  type: Input
2755
2424
  }], loginWithGoogle: [{
@@ -2762,8 +2431,7 @@ class AuthComponent {
2762
2431
  this.authService = authService;
2763
2432
  this.initCompanyAuthDialogDetailsSubscription = null;
2764
2433
  this.onCompanyNameChange = new EventEmitter();
2765
- this.showGoogleAuth = true;
2766
- this.hasGoogleAuth = this.config.googleAuth;
2434
+ this.showGoogleAuth = false;
2767
2435
  }
2768
2436
  ngOnInit() {
2769
2437
  this.initCompanyDetails();
@@ -2785,8 +2453,8 @@ class AuthComponent {
2785
2453
  this.initCompanyAuthDialogDetailsSubscription.unsubscribe();
2786
2454
  }
2787
2455
  }
2788
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthComponent, deps: [{ token: ConfigBaseService }, { token: AuthBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
2789
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: AuthComponent, isStandalone: true, selector: "auth", inputs: { showGoogleAuth: "showGoogleAuth" }, outputs: { onCompanyNameChange: "onCompanyNameChange" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px;\">\r\n <div class=\"flex flex-column w-full\">\r\n <div class=\"w-full sm:w-30rem\" style=\"margin: auto; border-radius:50px; padding:0.3rem; background: linear-gradient(180deg, var(--p-primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\r\n <div class=\"surface-card py-6 px-5 sm:px-6\" style=\"border-radius:45px;\">\r\n <div class=\"text-center\" style=\"margin-bottom: 38px;\">\r\n <img *ngIf=\"image != null\" [src]=\"image\" alt=\"{{companyName}} Logo\" title=\"{{companyName}} Logo\" height=\"60\">\r\n <i *ngIf=\"image == null\" class=\"pi pi-spin pi-spinner primary-color\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <ng-content></ng-content>\r\n \r\n <div *ngIf=\"hasGoogleAuth && showGoogleAuth\">\r\n <div style=\"display: flex; align-items: center; gap: 7px; justify-content: center; margin-bottom: 16px;\">\r\n <div class=\"separator\"></div>\r\n <div>{{t('or')}}</div>\r\n <div class=\"separator\"></div>\r\n </div>\r\n <div>\r\n <!-- https://code-maze.com/how-to-sign-in-with-google-angular-aspnet-webapi/ -->\r\n <google-button (loginWithGoogle)=\"onGoogleSignIn($event)\" [label]=\"t('ContinueWithGoogle')\"></google-button> \r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GoogleButtonComponent, selector: "google-button", inputs: ["label"], outputs: ["loginWithGoogle"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
2456
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthComponent, deps: [{ token: ConfigServiceBase }, { token: AuthServiceBase }], target: i0.ɵɵFactoryTarget.Component }); }
2457
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: AuthComponent, isStandalone: true, selector: "auth", inputs: { showGoogleAuth: "showGoogleAuth" }, outputs: { onCompanyNameChange: "onCompanyNameChange" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px;\">\n <div class=\"flex flex-column w-full\">\n <div class=\"w-full sm:w-30rem\" style=\"margin: auto; border-radius:50px; padding:0.3rem; background: linear-gradient(180deg, var(--p-primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div class=\"surface-card py-6 px-5 sm:px-6\" style=\"border-radius:45px;\">\n <div class=\"text-center\" style=\"margin-bottom: 38px;\">\n <img *ngIf=\"image != null\" [src]=\"image\" alt=\"{{companyName}} Logo\" title=\"{{companyName}} Logo\" height=\"60\">\n <i *ngIf=\"image == null\" class=\"pi pi-spin pi-spinner primary-color\" style=\"font-size: 2rem\"></i>\n </div>\n\n <ng-content></ng-content>\n \n <div *ngIf=\"showGoogleAuth\">\n <div style=\"display: flex; align-items: center; gap: 7px; justify-content: center; margin-bottom: 16px;\">\n <div class=\"separator\"></div>\n <div>{{t('or')}}</div>\n <div class=\"separator\"></div>\n </div>\n <div>\n <!-- https://code-maze.com/how-to-sign-in-with-google-angular-aspnet-webapi/ -->\n <google-button (loginWithGoogle)=\"onGoogleSignIn($event)\" [label]=\"t('ContinueWithGoogle')\"></google-button> \n </div>\n </div>\n \n </div>\n </div>\n </div>\n </div>\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GoogleButtonComponent, selector: "google-button", inputs: ["label"], outputs: ["loginWithGoogle"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
2790
2458
  }
2791
2459
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthComponent, decorators: [{
2792
2460
  type: Component,
@@ -2794,8 +2462,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
2794
2462
  CommonModule,
2795
2463
  GoogleButtonComponent,
2796
2464
  TranslocoDirective,
2797
- ], template: "<ng-container *transloco=\"let t\">\r\n <div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px;\">\r\n <div class=\"flex flex-column w-full\">\r\n <div class=\"w-full sm:w-30rem\" style=\"margin: auto; border-radius:50px; padding:0.3rem; background: linear-gradient(180deg, var(--p-primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\r\n <div class=\"surface-card py-6 px-5 sm:px-6\" style=\"border-radius:45px;\">\r\n <div class=\"text-center\" style=\"margin-bottom: 38px;\">\r\n <img *ngIf=\"image != null\" [src]=\"image\" alt=\"{{companyName}} Logo\" title=\"{{companyName}} Logo\" height=\"60\">\r\n <i *ngIf=\"image == null\" class=\"pi pi-spin pi-spinner primary-color\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <ng-content></ng-content>\r\n \r\n <div *ngIf=\"hasGoogleAuth && showGoogleAuth\">\r\n <div style=\"display: flex; align-items: center; gap: 7px; justify-content: center; margin-bottom: 16px;\">\r\n <div class=\"separator\"></div>\r\n <div>{{t('or')}}</div>\r\n <div class=\"separator\"></div>\r\n </div>\r\n <div>\r\n <!-- https://code-maze.com/how-to-sign-in-with-google-angular-aspnet-webapi/ -->\r\n <google-button (loginWithGoogle)=\"onGoogleSignIn($event)\" [label]=\"t('ContinueWithGoogle')\"></google-button> \r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>" }]
2798
- }], ctorParameters: () => [{ type: ConfigBaseService }, { type: AuthBaseService }], propDecorators: { onCompanyNameChange: [{
2465
+ ], template: "<ng-container *transloco=\"let t\">\n <div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px;\">\n <div class=\"flex flex-column w-full\">\n <div class=\"w-full sm:w-30rem\" style=\"margin: auto; border-radius:50px; padding:0.3rem; background: linear-gradient(180deg, var(--p-primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div class=\"surface-card py-6 px-5 sm:px-6\" style=\"border-radius:45px;\">\n <div class=\"text-center\" style=\"margin-bottom: 38px;\">\n <img *ngIf=\"image != null\" [src]=\"image\" alt=\"{{companyName}} Logo\" title=\"{{companyName}} Logo\" height=\"60\">\n <i *ngIf=\"image == null\" class=\"pi pi-spin pi-spinner primary-color\" style=\"font-size: 2rem\"></i>\n </div>\n\n <ng-content></ng-content>\n \n <div *ngIf=\"showGoogleAuth\">\n <div style=\"display: flex; align-items: center; gap: 7px; justify-content: center; margin-bottom: 16px;\">\n <div class=\"separator\"></div>\n <div>{{t('or')}}</div>\n <div class=\"separator\"></div>\n </div>\n <div>\n <!-- https://code-maze.com/how-to-sign-in-with-google-angular-aspnet-webapi/ -->\n <google-button (loginWithGoogle)=\"onGoogleSignIn($event)\" [label]=\"t('ContinueWithGoogle')\"></google-button> \n </div>\n </div>\n \n </div>\n </div>\n </div>\n </div>\n</ng-container>" }]
2466
+ }], ctorParameters: () => [{ type: ConfigServiceBase }, { type: AuthServiceBase }], propDecorators: { onCompanyNameChange: [{
2799
2467
  type: Output
2800
2468
  }], showGoogleAuth: [{
2801
2469
  type: Input
@@ -2828,14 +2496,19 @@ class LoginComponent extends BaseFormCopy {
2828
2496
  }
2829
2497
  sendLoginVerificationEmail() {
2830
2498
  let isFormGroupValid = this.baseFormService.isControlValid(this.loginFormGroup);
2831
- if (isFormGroupValid == false)
2499
+ if (isFormGroupValid == false) {
2500
+ this.baseFormService.showInvalidFieldsMessage();
2832
2501
  return;
2833
- this.authService.sendLoginVerificationEmail(this.loginFormGroup.getRawValue()).subscribe(() => {
2502
+ }
2503
+ this.authService.sendLoginVerificationEmail(this.loginFormGroup.getRawValue()).subscribe((result) => {
2504
+ if (result.message) {
2505
+ this.messageService.successMessage(result.message);
2506
+ }
2834
2507
  this.showEmailSentDialog = true;
2835
2508
  });
2836
2509
  }
2837
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LoginComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i1$4.HttpClient }, { token: SpiderlyMessageService }, { token: i0.ChangeDetectorRef }, { token: i3$2.Router }, { token: i3$2.ActivatedRoute }, { token: i1.TranslocoService }, { token: BaseFormService }, { token: AuthBaseService }, { token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
2838
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: LoginComponent, isStandalone: true, selector: "app-login", usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n @if (loginFormGroup != null) {\r\n @if (showEmailSentDialog == false) {\r\n <auth (onCompanyNameChange)=\"companyNameChange($event)\">\r\n <form [formGroup]=\"loginFormGroup\" style=\"margin-bottom: 16px;\"> <!-- FT: We are not loading anything from the server here so we don't need defer block -->\r\n <div class=\"col-12\" style=\"padding-left: 0; padding-right: 0;\">\r\n <spiderly-textbox [control]=\"loginFormGroup.getControl('email')\"></spiderly-textbox>\r\n </div>\r\n \r\n <div class=\"mb-4 gap-5\">\r\n <div class=\"text-center\" style=\"font-size: smaller;\">\r\n {{t('AgreementsOnRegister')}} <b routerLink=\"/user-agreement\" class=\"primary-color cursor-pointer\">{{t('UserAgreement')}}</b> {{t('and')}} <b routerLink=\"/privacy-policy\" class=\"primary-color cursor-pointer\">{{t('PrivacyPolicy')}}</b>.\r\n </div>\r\n </div>\r\n\r\n <div style=\"display: flex; flex-direction: column; gap: 16px;\">\r\n <spiderly-button [label]=\"t('Login')\" (onClick)=\"sendLoginVerificationEmail()\" [outlined]=\"true\" [style]=\"{width: '100%'}\" type=\"submit\"></spiderly-button>\r\n </div>\r\n </form>\r\n </auth>\r\n }\r\n @else {\r\n <login-verification [email]=\"loginFormGroup.controls.email.getRawValue()\"></login-verification>\r\n }\r\n }\r\n @else {\r\n <!-- TODO FT: Add skeleton -->\r\n }\r\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: AuthComponent, selector: "auth", inputs: ["showGoogleAuth"], outputs: ["onCompanyNameChange"] }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: SpiderlyTextboxComponent, selector: "spiderly-textbox", inputs: ["showButton", "buttonIcon"], outputs: ["onButtonClick"] }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "component", type: LoginVerificationComponent, selector: "login-verification", inputs: ["email", "userId"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
2510
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LoginComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i1$3.HttpClient }, { token: SpiderlyMessageService }, { token: i0.ChangeDetectorRef }, { token: i3$2.Router }, { token: i3$2.ActivatedRoute }, { token: i1.TranslocoService }, { token: BaseFormService }, { token: AuthServiceBase }, { token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Component }); }
2511
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: LoginComponent, isStandalone: true, selector: "app-login", usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t\">\n @if (loginFormGroup != null) {\n @if (showEmailSentDialog == false) {\n <auth (onCompanyNameChange)=\"companyNameChange($event)\">\n <!-- We are not loading anything from the server here so we don't need defer block -->\n <form [formGroup]=\"loginFormGroup\" style=\"margin-bottom: 16px;\">\n <div class=\"col-12\" style=\"padding-left: 0; padding-right: 0;\">\n <spiderly-textbox [control]=\"loginFormGroup.getControl('email')\"></spiderly-textbox>\n </div>\n \n <div class=\"mb-4 gap-5\">\n <div class=\"text-center\" style=\"font-size: smaller;\">\n {{t('AgreementsOnRegister')}} <b routerLink=\"/user-agreement\" class=\"primary-color cursor-pointer\">{{t('UserAgreement')}}</b> {{t('and')}} <b routerLink=\"/privacy-policy\" class=\"primary-color cursor-pointer\">{{t('PrivacyPolicy')}}</b>.\n </div>\n </div>\n\n <div style=\"display: flex; flex-direction: column; gap: 16px;\">\n <spiderly-button [label]=\"t('Login')\" (onClick)=\"sendLoginVerificationEmail()\" [outlined]=\"true\" [style]=\"{width: '100%'}\" type=\"submit\"></spiderly-button>\n </div>\n </form>\n </auth>\n }\n @else {\n <login-verification [email]=\"loginFormGroup.controls.email.getRawValue()\"></login-verification>\n }\n }\n @else {\n <!-- TODO: Add skeleton -->\n }\n</ng-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: AuthComponent, selector: "auth", inputs: ["showGoogleAuth"], outputs: ["onCompanyNameChange"] }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: SpiderlyTextboxComponent, selector: "spiderly-textbox", inputs: ["showButton", "buttonIcon"], outputs: ["onButtonClick"] }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "component", type: LoginVerificationComponent, selector: "login-verification", inputs: ["email", "userId"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
2839
2512
  }
2840
2513
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LoginComponent, decorators: [{
2841
2514
  type: Component,
@@ -2846,21 +2519,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
2846
2519
  SpiderlyControlsModule,
2847
2520
  LoginVerificationComponent,
2848
2521
  TranslocoDirective,
2849
- ], template: "<ng-container *transloco=\"let t\">\r\n @if (loginFormGroup != null) {\r\n @if (showEmailSentDialog == false) {\r\n <auth (onCompanyNameChange)=\"companyNameChange($event)\">\r\n <form [formGroup]=\"loginFormGroup\" style=\"margin-bottom: 16px;\"> <!-- FT: We are not loading anything from the server here so we don't need defer block -->\r\n <div class=\"col-12\" style=\"padding-left: 0; padding-right: 0;\">\r\n <spiderly-textbox [control]=\"loginFormGroup.getControl('email')\"></spiderly-textbox>\r\n </div>\r\n \r\n <div class=\"mb-4 gap-5\">\r\n <div class=\"text-center\" style=\"font-size: smaller;\">\r\n {{t('AgreementsOnRegister')}} <b routerLink=\"/user-agreement\" class=\"primary-color cursor-pointer\">{{t('UserAgreement')}}</b> {{t('and')}} <b routerLink=\"/privacy-policy\" class=\"primary-color cursor-pointer\">{{t('PrivacyPolicy')}}</b>.\r\n </div>\r\n </div>\r\n\r\n <div style=\"display: flex; flex-direction: column; gap: 16px;\">\r\n <spiderly-button [label]=\"t('Login')\" (onClick)=\"sendLoginVerificationEmail()\" [outlined]=\"true\" [style]=\"{width: '100%'}\" type=\"submit\"></spiderly-button>\r\n </div>\r\n </form>\r\n </auth>\r\n }\r\n @else {\r\n <login-verification [email]=\"loginFormGroup.controls.email.getRawValue()\"></login-verification>\r\n }\r\n }\r\n @else {\r\n <!-- TODO FT: Add skeleton -->\r\n }\r\n</ng-container>" }]
2850
- }], ctorParameters: () => [{ type: i0.KeyValueDiffers }, { type: i1$4.HttpClient }, { type: SpiderlyMessageService }, { type: i0.ChangeDetectorRef }, { type: i3$2.Router }, { type: i3$2.ActivatedRoute }, { type: i1.TranslocoService }, { type: BaseFormService }, { type: AuthBaseService }, { type: ConfigBaseService }] });
2522
+ ], template: "<ng-container *transloco=\"let t\">\n @if (loginFormGroup != null) {\n @if (showEmailSentDialog == false) {\n <auth (onCompanyNameChange)=\"companyNameChange($event)\">\n <!-- We are not loading anything from the server here so we don't need defer block -->\n <form [formGroup]=\"loginFormGroup\" style=\"margin-bottom: 16px;\">\n <div class=\"col-12\" style=\"padding-left: 0; padding-right: 0;\">\n <spiderly-textbox [control]=\"loginFormGroup.getControl('email')\"></spiderly-textbox>\n </div>\n \n <div class=\"mb-4 gap-5\">\n <div class=\"text-center\" style=\"font-size: smaller;\">\n {{t('AgreementsOnRegister')}} <b routerLink=\"/user-agreement\" class=\"primary-color cursor-pointer\">{{t('UserAgreement')}}</b> {{t('and')}} <b routerLink=\"/privacy-policy\" class=\"primary-color cursor-pointer\">{{t('PrivacyPolicy')}}</b>.\n </div>\n </div>\n\n <div style=\"display: flex; flex-direction: column; gap: 16px;\">\n <spiderly-button [label]=\"t('Login')\" (onClick)=\"sendLoginVerificationEmail()\" [outlined]=\"true\" [style]=\"{width: '100%'}\" type=\"submit\"></spiderly-button>\n </div>\n </form>\n </auth>\n }\n @else {\n <login-verification [email]=\"loginFormGroup.controls.email.getRawValue()\"></login-verification>\n }\n }\n @else {\n <!-- TODO: Add skeleton -->\n }\n</ng-container>" }]
2523
+ }], ctorParameters: () => [{ type: i0.KeyValueDiffers }, { type: i1$3.HttpClient }, { type: SpiderlyMessageService }, { type: i0.ChangeDetectorRef }, { type: i3$2.Router }, { type: i3$2.ActivatedRoute }, { type: i1.TranslocoService }, { type: BaseFormService }, { type: AuthServiceBase }, { type: ConfigServiceBase }] });
2851
2524
 
2852
2525
  class FooterComponent {
2853
2526
  constructor(config) {
2854
2527
  this.config = config;
2855
2528
  this.companyName = this.config.companyName;
2856
2529
  }
2857
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: FooterComponent, deps: [{ token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
2858
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: FooterComponent, isStandalone: true, selector: "footer", ngImport: i0, template: "<div class=\"layout-footer\">\r\n <span class=\"font-medium ml-2\">{{companyName}}</span>\r\n</div>\r\n" }); }
2530
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: FooterComponent, deps: [{ token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Component }); }
2531
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: FooterComponent, isStandalone: true, selector: "footer", ngImport: i0, template: "<div class=\"layout-footer\">\n <span class=\"font-medium ml-2\">{{companyName}}</span>\n</div>\n" }); }
2859
2532
  }
2860
2533
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: FooterComponent, decorators: [{
2861
2534
  type: Component,
2862
- args: [{ selector: 'footer', standalone: true, template: "<div class=\"layout-footer\">\r\n <span class=\"font-medium ml-2\">{{companyName}}</span>\r\n</div>\r\n" }]
2863
- }], ctorParameters: () => [{ type: ConfigBaseService }] });
2535
+ args: [{ selector: 'footer', standalone: true, template: "<div class=\"layout-footer\">\n <span class=\"font-medium ml-2\">{{companyName}}</span>\n</div>\n" }]
2536
+ }], ctorParameters: () => [{ type: ConfigServiceBase }] });
2864
2537
 
2865
2538
  class IndexCardComponent {
2866
2539
  constructor(formBuilder) {
@@ -2879,14 +2552,14 @@ class IndexCardComponent {
2879
2552
  this.onRemoveIconClick.next(null);
2880
2553
  }
2881
2554
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: IndexCardComponent, deps: [{ token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
2882
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: IndexCardComponent, isStandalone: true, selector: "index-card", inputs: { last: "last", index: "index", header: "header", description: "description", showRemoveIcon: "showRemoveIcon", showCrudMenu: "showCrudMenu", crudMenu: "crudMenu" }, outputs: { onMenuIconClick: "onMenuIconClick", onRemoveIconClick: "onRemoveIconClick" }, ngImport: i0, template: "<div [ngClass]=\"{\r\n\t'last-child-zero-margin': last,\r\n 'card-margin-bottom': true,\r\n\t}\">\r\n\t<spiderly-panel [crudMenu]=\"crudMenu\" [showCrudMenu]=\"showCrudMenu\" (onMenuIconClick)=\"menuIconClick($event)\" [showRemoveIcon]=\"showRemoveIcon\" (onRemoveIconClick)=\"removeIconClick()\" [index]=\"index\">\r\n\t\t<panel-header [title]=\"header\" [index]=\"index\" [showIcon]=\"false\"></panel-header>\r\n\t\t\r\n\t\t<panel-body>\r\n\t\t\t<ng-content>\r\n\t\t\t\t<!-- Custom things below description -->\r\n\t\t\t</ng-content>\r\n\t\t</panel-body>\r\n\t\t\r\n\t</spiderly-panel>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: SpiderlyPanelsModule }, { kind: "component", type: PanelHeaderComponent, selector: "panel-header", inputs: ["title", "showBigTitle", "showIcon", "icon", "index", "tabs"] }, { kind: "component", type: PanelBodyComponent, selector: "panel-body", inputs: ["normalBottomPadding"] }, { kind: "component", type: SpiderlyPanelComponent, selector: "spiderly-panel", inputs: ["isFirstMultiplePanel", "isMiddleMultiplePanel", "isLastMultiplePanel", "toggleable", "toggler", "collapsed", "crudMenu", "showCrudMenu", "showRemoveIcon", "index", "showPanelHeader"], outputs: ["onMenuIconClick", "onRemoveIconClick"] }] }); }
2555
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: IndexCardComponent, isStandalone: true, selector: "index-card", inputs: { last: "last", index: "index", header: "header", description: "description", showRemoveIcon: "showRemoveIcon", showCrudMenu: "showCrudMenu", crudMenu: "crudMenu" }, outputs: { onMenuIconClick: "onMenuIconClick", onRemoveIconClick: "onRemoveIconClick" }, ngImport: i0, template: "<div [ngClass]=\"{\n\t'last-child-zero-margin': last,\n 'card-margin-bottom': true,\n\t}\">\n\t<spiderly-panel [crudMenu]=\"crudMenu\" [showCrudMenu]=\"showCrudMenu\" (onMenuIconClick)=\"menuIconClick($event)\" [showRemoveIcon]=\"showRemoveIcon\" (onRemoveIconClick)=\"removeIconClick()\" [index]=\"index\">\n\t\t<panel-header [title]=\"header\" [index]=\"index\" [showIcon]=\"false\"></panel-header>\n\t\t\n\t\t<panel-body>\n\t\t\t<ng-content>\n\t\t\t\t<!-- Custom things below description -->\n\t\t\t</ng-content>\n\t\t</panel-body>\n\t\t\n\t</spiderly-panel>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: SpiderlyPanelsModule }, { kind: "component", type: PanelHeaderComponent, selector: "panel-header", inputs: ["title", "showBigTitle", "showIcon", "icon", "index", "tabs"] }, { kind: "component", type: PanelBodyComponent, selector: "panel-body", inputs: ["normalBottomPadding"] }, { kind: "component", type: SpiderlyPanelComponent, selector: "spiderly-panel", inputs: ["isFirstMultiplePanel", "isMiddleMultiplePanel", "isLastMultiplePanel", "toggleable", "toggler", "collapsed", "crudMenu", "showCrudMenu", "showRemoveIcon", "index", "showPanelHeader"], outputs: ["onMenuIconClick", "onRemoveIconClick"] }] }); }
2883
2556
  }
2884
2557
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: IndexCardComponent, decorators: [{
2885
2558
  type: Component,
2886
2559
  args: [{ selector: 'index-card', imports: [
2887
2560
  CommonModule,
2888
2561
  SpiderlyPanelsModule
2889
- ], template: "<div [ngClass]=\"{\r\n\t'last-child-zero-margin': last,\r\n 'card-margin-bottom': true,\r\n\t}\">\r\n\t<spiderly-panel [crudMenu]=\"crudMenu\" [showCrudMenu]=\"showCrudMenu\" (onMenuIconClick)=\"menuIconClick($event)\" [showRemoveIcon]=\"showRemoveIcon\" (onRemoveIconClick)=\"removeIconClick()\" [index]=\"index\">\r\n\t\t<panel-header [title]=\"header\" [index]=\"index\" [showIcon]=\"false\"></panel-header>\r\n\t\t\r\n\t\t<panel-body>\r\n\t\t\t<ng-content>\r\n\t\t\t\t<!-- Custom things below description -->\r\n\t\t\t</ng-content>\r\n\t\t</panel-body>\r\n\t\t\r\n\t</spiderly-panel>\r\n</div>\r\n" }]
2562
+ ], template: "<div [ngClass]=\"{\n\t'last-child-zero-margin': last,\n 'card-margin-bottom': true,\n\t}\">\n\t<spiderly-panel [crudMenu]=\"crudMenu\" [showCrudMenu]=\"showCrudMenu\" (onMenuIconClick)=\"menuIconClick($event)\" [showRemoveIcon]=\"showRemoveIcon\" (onRemoveIconClick)=\"removeIconClick()\" [index]=\"index\">\n\t\t<panel-header [title]=\"header\" [index]=\"index\" [showIcon]=\"false\"></panel-header>\n\t\t\n\t\t<panel-body>\n\t\t\t<ng-content>\n\t\t\t\t<!-- Custom things below description -->\n\t\t\t</ng-content>\n\t\t</panel-body>\n\t\t\n\t</spiderly-panel>\n</div>\n" }]
2890
2563
  }], ctorParameters: () => [{ type: i3.FormBuilder }], propDecorators: { last: [{
2891
2564
  type: Input
2892
2565
  }], index: [{
@@ -2918,14 +2591,14 @@ class InfoCardComponent {
2918
2591
  ngOnInit() {
2919
2592
  }
2920
2593
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: InfoCardComponent, deps: [{ token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
2921
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: InfoCardComponent, isStandalone: true, selector: "info-card", inputs: { header: "header", showSmallIcon: "showSmallIcon", icon: "icon", textColor: "textColor" }, ngImport: i0, template: "<div class=\"card responsive-card-padding info-card\">\r\n <div class=\"info-card__content\">\r\n <div>\r\n <div class=\"info-card__header\">\r\n <i *ngIf=\"showSmallIcon\" class=\"{{icon}} info-card__icon\"></i>\r\n {{header}}\r\n </div>\r\n <div class=\"info-card__body\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"info-card__background-icon\">\r\n <i class=\"{{icon}}\"></i>\r\n </div>\r\n</div>", styles: [".info-card{background-color:var(--p-primary-100);position:relative;overflow:hidden}.info-card__content{display:flex;align-items:center;gap:21px;position:relative;z-index:2}.info-card__icon{font-size:21px;color:var(--p-primary-color)}.info-card__header{display:flex;gap:8px;color:var(--p-primary-color);font-weight:600;text-align:left;font-size:17.5px}.info-card__body{text-align:left;margin-top:8px}.info-card__background-icon{text-align:center;transform:rotate(30deg);color:var(--p-primary-400);opacity:.2;position:absolute;overflow:hidden;right:-30px;top:-25px;z-index:1}.info-card__background-icon i{font-size:270px}::ng-deep html.dark .info-card{background-color:var(--p-primary-950)}::ng-deep html.dark .info-card__header{color:var(--p-primary-400)}::ng-deep html.dark .info-card__icon{color:var(--p-primary-400)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: SpiderlyPanelsModule }] }); }
2594
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: InfoCardComponent, isStandalone: true, selector: "info-card", inputs: { header: "header", showSmallIcon: "showSmallIcon", icon: "icon", textColor: "textColor" }, ngImport: i0, template: "<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>", styles: [".info-card{background-color:var(--p-primary-100);position:relative;overflow:hidden}.info-card__content{display:flex;align-items:center;gap:21px;position:relative;z-index:2}.info-card__icon{font-size:21px;color:var(--p-primary-color)}.info-card__header{display:flex;gap:8px;color:var(--p-primary-color);font-weight:600;text-align:left;font-size:17.5px}.info-card__body{text-align:left;margin-top:8px}.info-card__background-icon{text-align:center;transform:rotate(30deg);color:var(--p-primary-400);opacity:.2;position:absolute;overflow:hidden;right:-30px;top:-25px;z-index:1}.info-card__background-icon i{font-size:270px}::ng-deep html.dark .info-card{background-color:var(--p-primary-950)}::ng-deep html.dark .info-card__header{color:var(--p-primary-400)}::ng-deep html.dark .info-card__icon{color:var(--p-primary-400)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: SpiderlyPanelsModule }] }); }
2922
2595
  }
2923
2596
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: InfoCardComponent, decorators: [{
2924
2597
  type: Component,
2925
2598
  args: [{ selector: 'info-card', imports: [
2926
2599
  CommonModule,
2927
2600
  SpiderlyPanelsModule
2928
- ], template: "<div class=\"card responsive-card-padding info-card\">\r\n <div class=\"info-card__content\">\r\n <div>\r\n <div class=\"info-card__header\">\r\n <i *ngIf=\"showSmallIcon\" class=\"{{icon}} info-card__icon\"></i>\r\n {{header}}\r\n </div>\r\n <div class=\"info-card__body\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"info-card__background-icon\">\r\n <i class=\"{{icon}}\"></i>\r\n </div>\r\n</div>", styles: [".info-card{background-color:var(--p-primary-100);position:relative;overflow:hidden}.info-card__content{display:flex;align-items:center;gap:21px;position:relative;z-index:2}.info-card__icon{font-size:21px;color:var(--p-primary-color)}.info-card__header{display:flex;gap:8px;color:var(--p-primary-color);font-weight:600;text-align:left;font-size:17.5px}.info-card__body{text-align:left;margin-top:8px}.info-card__background-icon{text-align:center;transform:rotate(30deg);color:var(--p-primary-400);opacity:.2;position:absolute;overflow:hidden;right:-30px;top:-25px;z-index:1}.info-card__background-icon i{font-size:270px}::ng-deep html.dark .info-card{background-color:var(--p-primary-950)}::ng-deep html.dark .info-card__header{color:var(--p-primary-400)}::ng-deep html.dark .info-card__icon{color:var(--p-primary-400)}\n"] }]
2601
+ ], template: "<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>", styles: [".info-card{background-color:var(--p-primary-100);position:relative;overflow:hidden}.info-card__content{display:flex;align-items:center;gap:21px;position:relative;z-index:2}.info-card__icon{font-size:21px;color:var(--p-primary-color)}.info-card__header{display:flex;gap:8px;color:var(--p-primary-color);font-weight:600;text-align:left;font-size:17.5px}.info-card__body{text-align:left;margin-top:8px}.info-card__background-icon{text-align:center;transform:rotate(30deg);color:var(--p-primary-400);opacity:.2;position:absolute;overflow:hidden;right:-30px;top:-25px;z-index:1}.info-card__background-icon i{font-size:270px}::ng-deep html.dark .info-card{background-color:var(--p-primary-950)}::ng-deep html.dark .info-card__header{color:var(--p-primary-400)}::ng-deep html.dark .info-card__icon{color:var(--p-primary-400)}\n"] }]
2929
2602
  }], ctorParameters: () => [{ type: i3.FormBuilder }], propDecorators: { header: [{
2930
2603
  type: Input
2931
2604
  }], showSmallIcon: [{
@@ -2942,20 +2615,20 @@ class NotFoundComponent {
2942
2615
  this.companyName = this.config.companyName;
2943
2616
  this.logoPath = this.config.logoPath;
2944
2617
  }
2945
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: NotFoundComponent, deps: [{ token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
2946
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: NotFoundComponent, isStandalone: true, selector: "not-found", ngImport: i0, template: "<div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px;\">\r\n <div class=\"flex flex-column w-full\">\r\n <div class=\"w-full sm:w-30rem\" style=\"margin: auto; border-radius:50px; padding:0.3rem; background: linear-gradient(180deg, var(--p-primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\r\n <div class=\"surface-card py-6 px-5 sm:px-6\" style=\"border-radius:45px;\">\r\n <div class=\"text-center\">\r\n <img \r\n [src]=\"logoPath\" \r\n alt=\"{{companyName}} Logo\" \r\n title=\"{{companyName}} Logo\" \r\n height=\"60\"\r\n class=\"mb-4\"\r\n >\r\n </div>\r\n <h1 class=\"mb-4\">\r\n <div class=\"font-bold text-5xl lg:text-6xl spiderly-gradient-title\">404</div>\r\n <div class=\"font-bold text-5xl lg:text-6xl\">Page Not Found</div>\r\n </h1>\r\n <div class=\"text-600 text-lg mb-5\">\r\n The page you're looking for doesn't exist or has been moved. Let's get you back on track.\r\n </div>\r\n <div>\r\n <p-button [routerLink]=\"['/']\" label=\"Go to Homepage\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }] }); }
2618
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: NotFoundComponent, deps: [{ token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Component }); }
2619
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: NotFoundComponent, isStandalone: true, selector: "not-found", ngImport: i0, template: "<div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px;\">\n <div class=\"flex flex-column w-full\">\n <div class=\"w-full sm:w-30rem\" style=\"margin: auto; border-radius:50px; padding:0.3rem; background: linear-gradient(180deg, var(--p-primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div class=\"surface-card py-6 px-5 sm:px-6\" 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-4\"\n >\n </div>\n <h1 class=\"mb-4\">\n <div class=\"font-bold text-5xl lg:text-6xl spiderly-gradient-title\">404</div>\n <div class=\"font-bold text-5xl lg:text-6xl\">Page Not Found</div>\n </h1>\n <div class=\"text-600 text-lg mb-5\">\n The page you're looking for doesn't exist or has been moved. Let's get 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>", dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }] }); }
2947
2620
  }
2948
2621
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: NotFoundComponent, decorators: [{
2949
2622
  type: Component,
2950
2623
  args: [{ selector: 'not-found', imports: [
2951
2624
  RouterModule,
2952
2625
  ButtonModule,
2953
- ], template: "<div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px;\">\r\n <div class=\"flex flex-column w-full\">\r\n <div class=\"w-full sm:w-30rem\" style=\"margin: auto; border-radius:50px; padding:0.3rem; background: linear-gradient(180deg, var(--p-primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\r\n <div class=\"surface-card py-6 px-5 sm:px-6\" style=\"border-radius:45px;\">\r\n <div class=\"text-center\">\r\n <img \r\n [src]=\"logoPath\" \r\n alt=\"{{companyName}} Logo\" \r\n title=\"{{companyName}} Logo\" \r\n height=\"60\"\r\n class=\"mb-4\"\r\n >\r\n </div>\r\n <h1 class=\"mb-4\">\r\n <div class=\"font-bold text-5xl lg:text-6xl spiderly-gradient-title\">404</div>\r\n <div class=\"font-bold text-5xl lg:text-6xl\">Page Not Found</div>\r\n </h1>\r\n <div class=\"text-600 text-lg mb-5\">\r\n The page you're looking for doesn't exist or has been moved. Let's get you back on track.\r\n </div>\r\n <div>\r\n <p-button [routerLink]=\"['/']\" label=\"Go to Homepage\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
2954
- }], ctorParameters: () => [{ type: ConfigBaseService }] });
2626
+ ], template: "<div class=\"flex min-h-screen overflow-hidden\" style=\"padding: 20px;\">\n <div class=\"flex flex-column w-full\">\n <div class=\"w-full sm:w-30rem\" style=\"margin: auto; border-radius:50px; padding:0.3rem; background: linear-gradient(180deg, var(--p-primary-color) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div class=\"surface-card py-6 px-5 sm:px-6\" 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-4\"\n >\n </div>\n <h1 class=\"mb-4\">\n <div class=\"font-bold text-5xl lg:text-6xl spiderly-gradient-title\">404</div>\n <div class=\"font-bold text-5xl lg:text-6xl\">Page Not Found</div>\n </h1>\n <div class=\"text-600 text-lg mb-5\">\n The page you're looking for doesn't exist or has been moved. Let's get 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>" }]
2627
+ }], ctorParameters: () => [{ type: ConfigServiceBase }] });
2955
2628
 
2956
2629
  class SpiderlySplitButtonComponent extends SpiderlyButtonBaseComponent {
2957
2630
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlySplitButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2958
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlySplitButtonComponent, isStandalone: true, selector: "spiderly-split-button", inputs: { dropdownItems: "dropdownItems" }, usesInheritance: true, ngImport: i0, template: "<p-splitButton\r\n(onClick)=\"handleClick($event)\" \r\n[label]=\"label\" \r\n[icon]=\"icon\" \r\n[outlined]=\"outlined\" \r\n[styleClass]=\"styleClass\" \r\n[severity]=\"severity\" \r\n[rounded]=\"rounded\"\r\n[style]=\"style\"\r\n[class]=\"class\"\r\n[disabled]=\"disabled\"\r\n[model]=\"dropdownItems\"\r\n>\r\n <ng-content></ng-content>\r\n</p-splitButton>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i1$5.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }] }); }
2631
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlySplitButtonComponent, isStandalone: true, selector: "spiderly-split-button", inputs: { dropdownItems: "dropdownItems" }, usesInheritance: true, ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i1$5.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }] }); }
2959
2632
  }
2960
2633
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlySplitButtonComponent, decorators: [{
2961
2634
  type: Component,
@@ -2963,7 +2636,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
2963
2636
  CommonModule,
2964
2637
  ButtonModule,
2965
2638
  SplitButtonModule
2966
- ], template: "<p-splitButton\r\n(onClick)=\"handleClick($event)\" \r\n[label]=\"label\" \r\n[icon]=\"icon\" \r\n[outlined]=\"outlined\" \r\n[styleClass]=\"styleClass\" \r\n[severity]=\"severity\" \r\n[rounded]=\"rounded\"\r\n[style]=\"style\"\r\n[class]=\"class\"\r\n[disabled]=\"disabled\"\r\n[model]=\"dropdownItems\"\r\n>\r\n <ng-content></ng-content>\r\n</p-splitButton>" }]
2639
+ ], template: "<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>" }]
2967
2640
  }], propDecorators: { dropdownItems: [{
2968
2641
  type: Input
2969
2642
  }] } });
@@ -2999,7 +2672,7 @@ class SpiderlyDeleteConfirmationComponent {
2999
2672
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyDeleteConfirmationComponent, deps: [{ token: i1$6.DynamicDialogRef }, { token: i1$6.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component }); }
3000
2673
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyDeleteConfirmationComponent, isStandalone: true, selector: "spiderly-delete-confirmation", providers: [
3001
2674
  ConfirmationService
3002
- ], ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <p-confirmDialog \r\n #cd \r\n ></p-confirmDialog>\r\n <div\r\n class=\"border-bottom-1 surface-border text-lg\"\r\n style=\"display: flex; align-items: center; padding-bottom: 10px; width: 100%; gap: 10px;\"\r\n >\r\n <i class=\"pi pi-exclamation-circle text-4xl\"></i>\r\n <p>{{t('PleaseConfirmToProceed')}}</p>\r\n </div>\r\n \r\n <div style=\"display: flex; gap: 12px; justify-content: right; margin-top: 28px;\">\r\n <spiderly-button (onClick)=\"reject()\" icon=\"pi pi-times\" [label]=\"t('Cancel')\" severity=\"secondary\"></spiderly-button>\r\n <spiderly-button (onClick)=\"accept()\" icon=\"pi pi-check\" [label]=\"t('Confirm')\" styleClass=\"p-button-danger\"></spiderly-button>\r\n </div>\r\n</ng-container>\r\n", dependencies: [{ kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i2$2.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }] }); }
2675
+ ], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <p-confirmDialog \n #cd \n ></p-confirmDialog>\n <div\n class=\"border-bottom-1 surface-border text-lg\"\n style=\"display: flex; align-items: center; padding-bottom: 10px; width: 100%; gap: 10px;\"\n >\n <i class=\"pi pi-exclamation-circle text-4xl\"></i>\n <p>{{t('PleaseConfirmToProceed')}}</p>\n </div>\n \n <div style=\"display: flex; gap: 12px; justify-content: right; margin-top: 28px;\">\n <spiderly-button (onClick)=\"reject()\" icon=\"pi pi-times\" [label]=\"t('Cancel')\" severity=\"secondary\"></spiderly-button>\n <spiderly-button (onClick)=\"accept()\" icon=\"pi pi-check\" [label]=\"t('Confirm')\" styleClass=\"p-button-danger\"></spiderly-button>\n </div>\n</ng-container>\n", dependencies: [{ kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i2$2.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }] }); }
3003
2676
  }
3004
2677
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyDeleteConfirmationComponent, decorators: [{
3005
2678
  type: Component,
@@ -3009,7 +2682,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
3009
2682
  ConfirmDialogModule,
3010
2683
  ], providers: [
3011
2684
  ConfirmationService
3012
- ], template: "<ng-container *transloco=\"let t\">\r\n <p-confirmDialog \r\n #cd \r\n ></p-confirmDialog>\r\n <div\r\n class=\"border-bottom-1 surface-border text-lg\"\r\n style=\"display: flex; align-items: center; padding-bottom: 10px; width: 100%; gap: 10px;\"\r\n >\r\n <i class=\"pi pi-exclamation-circle text-4xl\"></i>\r\n <p>{{t('PleaseConfirmToProceed')}}</p>\r\n </div>\r\n \r\n <div style=\"display: flex; gap: 12px; justify-content: right; margin-top: 28px;\">\r\n <spiderly-button (onClick)=\"reject()\" icon=\"pi pi-times\" [label]=\"t('Cancel')\" severity=\"secondary\"></spiderly-button>\r\n <spiderly-button (onClick)=\"accept()\" icon=\"pi pi-check\" [label]=\"t('Confirm')\" styleClass=\"p-button-danger\"></spiderly-button>\r\n </div>\r\n</ng-container>\r\n" }]
2685
+ ], template: "<ng-container *transloco=\"let t\">\n <p-confirmDialog \n #cd \n ></p-confirmDialog>\n <div\n class=\"border-bottom-1 surface-border text-lg\"\n style=\"display: flex; align-items: center; padding-bottom: 10px; width: 100%; gap: 10px;\"\n >\n <i class=\"pi pi-exclamation-circle text-4xl\"></i>\n <p>{{t('PleaseConfirmToProceed')}}</p>\n </div>\n \n <div style=\"display: flex; gap: 12px; justify-content: right; margin-top: 28px;\">\n <spiderly-button (onClick)=\"reject()\" icon=\"pi pi-times\" [label]=\"t('Cancel')\" severity=\"secondary\"></spiderly-button>\n <spiderly-button (onClick)=\"accept()\" icon=\"pi pi-check\" [label]=\"t('Confirm')\" styleClass=\"p-button-danger\"></spiderly-button>\n </div>\n</ng-container>\n" }]
3013
2686
  }], ctorParameters: () => [{ type: i1$6.DynamicDialogRef }, { type: i1$6.DynamicDialogConfig }] });
3014
2687
 
3015
2688
  class SpiderlyDataTableComponent {
@@ -3205,7 +2878,7 @@ class SpiderlyDataTableComponent {
3205
2878
  * If not, it will navigate to the current route with the rowId.
3206
2879
  */
3207
2880
  navigateToDetails(rowId) {
3208
- if (!rowId)
2881
+ if (rowId == null)
3209
2882
  return;
3210
2883
  if (this.rowNavigationPath) {
3211
2884
  const cleanPath = this.rowNavigationPath.replace(/^\/|\/$/g, ''); // Remove leading and trailing slashes
@@ -3411,7 +3084,7 @@ class SpiderlyDataTableComponent {
3411
3084
  }
3412
3085
  }
3413
3086
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyDataTableComponent, deps: [{ token: i3$2.Router }, { token: i1$6.DialogService }, { token: i3$2.ActivatedRoute }, { token: SpiderlyMessageService }, { token: i1.TranslocoService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component }); }
3414
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyDataTableComponent, isStandalone: true, selector: "spiderly-data-table", inputs: { tableTitle: "tableTitle", tableIcon: "tableIcon", items: "items", rows: "rows", cols: "cols", showPaginator: "showPaginator", showCardWrapper: "showCardWrapper", readonly: "readonly", idField: "idField", getPaginatedListObservableMethod: "getPaginatedListObservableMethod", exportListToExcelObservableMethod: "exportListToExcelObservableMethod", deleteItemFromTableObservableMethod: "deleteItemFromTableObservableMethod", newlySelectedItems: "newlySelectedItems", unselectedItems: "unselectedItems", selectionMode: "selectionMode", selectedLazyLoadObservableMethod: "selectedLazyLoadObservableMethod", additionalFilterIdLong: "additionalFilterIdLong", showAddButton: "showAddButton", showExportToExcelButton: "showExportToExcelButton", showReloadTableButton: "showReloadTableButton", getFormArrayItems: "getFormArrayItems", hasLazyLoad: "hasLazyLoad", getAlreadySelectedItemIds: "getAlreadySelectedItemIds", getAlreadySelectedItems: "getAlreadySelectedItems", getFormControl: "getFormControl", additionalIndexes: "additionalIndexes", navigateOnRowClick: "navigateOnRowClick", rowNavigationPath: "rowNavigationPath" }, outputs: { onTotalRecordsChange: "onTotalRecordsChange", onLazyLoad: "onLazyLoad", onIsAllSelectedChange: "onIsAllSelectedChange", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect" }, viewQueries: [{ propertyName: "table", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <div [class]=\"showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\">\r\n <p-table #dt [value]=\"items\" [rows]=\"rows\" [rowHover]=\"true\" [paginator]=\"showPaginator\" responsiveLayout=\"scroll\" [lazy]=\"hasLazyLoad\"\r\n (onLazyLoad)=\"lazyLoad($event)\" [totalRecords]=\"totalRecords\" class=\"spiderly-table\" [loading]=\"(items === undefined || loading === true)\" [selectionMode]=\"selectionMode\" dataKey=\"id\" \r\n (onFilter)=\"filter($event)\"> \r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"table-header overflow-auto\">\r\n <div style=\"display: flex; align-items: center; gap: 8px;\">\r\n <i class=\"{{tableIcon}}\" style=\"font-size: 20px;\"></i>\r\n <div style=\"margin: 0px; font-size: 17.5px;\">{{tableTitle}}</div>\r\n </div>\r\n <div style=\"display: flex; gap: 8px;\">\r\n <button pButton [label]=\"t('ClearFilters')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-filter-slash\" (click)=\"clear(dt)\"></button>\r\n <button pButton *ngIf=\"showExportToExcelButton\" [label]=\"t('ExportToExcel')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-download\" (click)=\"exportListToExcel()\"></button>\r\n <button pButton *ngIf=\"showReloadTableButton\" [label]=\"t('Reload')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-refresh\" (click)=\"reload()\"></button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width: 0rem;\" *ngIf=\"selectionMode == 'multiple'\">\r\n <div style=\"display: flex; gap: 8px;\">\r\n <p-checkbox [disabled]=\"readonly\" (onChange)=\"selectAll($event.checked)\" [(ngModel)]=\"fakeIsAllSelected\" [binary]=\"true\"></p-checkbox> ({{rowsSelectedNumber}})\r\n </div>\r\n </th>\r\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\r\n <th [style]=\"getColHeaderWidth(col.filterType)\">\r\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n {{col.name}}\r\n <p-columnFilter *ngIf=\"col.filterType != null && col.filterType !== 'blob'\" [type]=\"col.filterType\" [field]=\"col.filterField ?? col.field\" display=\"menu\" [placeholder]=\"col.filterPlaceholder\" \r\n [showOperator]=\"false\" [showMatchModes]=\"col.showMatchModes\" [showAddButton]=\"col.showAddButton\" [matchModeOptions]=\"getColMatchModeOptions(col.filterType)\"\r\n [matchMode]=\"getColMatchMode(col.filterType)\"\r\n >\r\n <ng-template *ngIf=\"isDropOrMulti(col.filterType)\" pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"col.dropdownOrMultiselectValues\" [placeholder]=\"t('All')\" (onChange)=\"filter($event.value)\" optionLabel=\"label\" optionValue=\"code\" [style]=\"{'width':'240px'}\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n <ng-template *ngIf=\"col.filterType == 'date'\" pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-datepicker \r\n [ngModel]=\"value\" \r\n [showTime]=\"col.showTime\"\r\n (onSelect)=\"filter($event)\"\r\n ></p-datepicker>\r\n </ng-template>\r\n </p-columnFilter>\r\n </div>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-index=\"rowIndex\" let-editing=\"editing\">\r\n <tr [class.clickable]=\" navigateOnRowClick\"\r\n (click)=\"onRowClick(rowData)\">\r\n <td *ngIf=\"selectionMode == 'multiple'\">\r\n <p-checkbox [disabled]=\"readonly\" (onChange)=\"selectRow(rowData[idField], rowData.index)\" [ngModel]=\"isRowSelected(rowData[idField])\" [binary]=\"true\"></p-checkbox>\r\n </td>\r\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\r\n <td [style]=\"getStyleForBodyColumn(col)\" *ngIf=\"!col.editable\">\r\n <div style=\"display: flex; align-items: center; justify-content: center; gap: 18px;\">\r\n <ng-container *ngFor=\"let action of col.actions; trackBy: actionTrackByFn\" >\r\n <span [pTooltip]=\"action.name\" [class]=\"getClassForAction(action)\" [style]=\"getStyleForAction(action)\" (click)=\"getMethodForAction(action, rowData)\"></span>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"col.filterType === 'blob'\">\r\n <img width=\"45\" [src]=\"getRowData(rowData, col)\" alt=\"\">\r\n </ng-container>\r\n <ng-container *ngIf=\"col.filterType !== 'blob'\">\r\n {{getRowData(rowData, col)}}\r\n </ng-container>\r\n </td>\r\n <td *ngIf=\"col.editable\">\r\n <spiderly-number [control]=\"getFormArrayControlByIndex(col.field, rowData.index)\" [showLabel]=\"false\"></spiderly-number>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('NoRecordsFound')}}</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr>\r\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('Loading')}}...</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorleft\">\r\n {{t('TotalRecords')}}: {{totalRecords}}\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\">\r\n <div style=\"display: flex; justify-content: end; gap: 10px;\">\r\n <spiderly-button *ngIf=\"showAddButton\" [label]=\"t('AddNew')\" icon=\"pi pi-plus\" (onClick)=\"navigateToDetails(0)\"></spiderly-button>\r\n </div>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n</ng-container>", styles: [".table-header{display:flex;justify-content:space-between;align-items:center}@media (max-width: 640px){.table-header{display:flex;flex-direction:column;align-items:start;gap:14px}}.spiderly-table .p-paginator{padding:1rem}@media (min-width: 1400px){.spiderly-table .p-paginator-left-content{position:absolute;padding:14px;left:0}}@media (min-width: 1400px){.spiderly-table .p-paginator-right-content{position:absolute;padding:14px;right:0}}:host ::ng-deep .p-datatable-thead{position:unset!important}:host ::ng-deep .p-datatable-header{border-radius:6px 6px 0 0}:host ::ng-deep .p-datatable{border-radius:var(--p-content-border-radius);border:1px solid var(--p-datatable-border-color)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "component", type: SpiderlyNumberComponent, selector: "spiderly-number", inputs: ["prefix", "showButtons", "decimal", "maxFractionDigits"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i9.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i1$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel", "filterButtonProps"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i4$5.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus", "highlightOnSelect"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i4$1.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i4$2.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] }); }
3087
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyDataTableComponent, isStandalone: true, selector: "spiderly-data-table", inputs: { tableTitle: "tableTitle", tableIcon: "tableIcon", items: "items", rows: "rows", cols: "cols", showPaginator: "showPaginator", showCardWrapper: "showCardWrapper", readonly: "readonly", idField: "idField", getPaginatedListObservableMethod: "getPaginatedListObservableMethod", exportListToExcelObservableMethod: "exportListToExcelObservableMethod", deleteItemFromTableObservableMethod: "deleteItemFromTableObservableMethod", newlySelectedItems: "newlySelectedItems", unselectedItems: "unselectedItems", selectionMode: "selectionMode", selectedLazyLoadObservableMethod: "selectedLazyLoadObservableMethod", additionalFilterIdLong: "additionalFilterIdLong", showAddButton: "showAddButton", showExportToExcelButton: "showExportToExcelButton", showReloadTableButton: "showReloadTableButton", getFormArrayItems: "getFormArrayItems", hasLazyLoad: "hasLazyLoad", getAlreadySelectedItemIds: "getAlreadySelectedItemIds", getAlreadySelectedItems: "getAlreadySelectedItems", getFormControl: "getFormControl", additionalIndexes: "additionalIndexes", navigateOnRowClick: "navigateOnRowClick", rowNavigationPath: "rowNavigationPath" }, outputs: { onTotalRecordsChange: "onTotalRecordsChange", onLazyLoad: "onLazyLoad", onIsAllSelectedChange: "onIsAllSelectedChange", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect" }, viewQueries: [{ propertyName: "table", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div [class]=\"showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\">\n <p-table #dt [value]=\"items\" [rows]=\"rows\" [rowHover]=\"true\" [paginator]=\"showPaginator\" responsiveLayout=\"scroll\" [lazy]=\"hasLazyLoad\"\n (onLazyLoad)=\"lazyLoad($event)\" [totalRecords]=\"totalRecords\" class=\"spiderly-table\" [loading]=\"(items === undefined || loading === true)\" [selectionMode]=\"selectionMode\" dataKey=\"id\" \n (onFilter)=\"filter($event)\"> \n <ng-template pTemplate=\"caption\">\n <div class=\"table-header overflow-auto\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i class=\"{{tableIcon}}\" style=\"font-size: 20px;\"></i>\n <div style=\"margin: 0px; font-size: 17.5px;\">{{tableTitle}}</div>\n </div>\n <div style=\"display: flex; gap: 8px;\">\n <button pButton [label]=\"t('ClearFilters')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-filter-slash\" (click)=\"clear(dt)\"></button>\n <button pButton *ngIf=\"showExportToExcelButton\" [label]=\"t('ExportToExcel')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-download\" (click)=\"exportListToExcel()\"></button>\n <button pButton *ngIf=\"showReloadTableButton\" [label]=\"t('Reload')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-refresh\" (click)=\"reload()\"></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 [disabled]=\"readonly\" (onChange)=\"selectAll($event.checked)\" [(ngModel)]=\"fakeIsAllSelected\" [binary]=\"true\"></p-checkbox> ({{rowsSelectedNumber}})\n </div>\n </th>\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\n <th [style]=\"getColHeaderWidth(col.filterType)\">\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n {{col.name}}\n <p-columnFilter *ngIf=\"col.filterType != null && col.filterType !== 'blob'\" [type]=\"col.filterType\" [field]=\"col.filterField ?? col.field\" display=\"menu\" [placeholder]=\"col.filterPlaceholder\" \n [showOperator]=\"false\" [showMatchModes]=\"col.showMatchModes\" [showAddButton]=\"col.showAddButton\" [matchModeOptions]=\"getColMatchModeOptions(col.filterType)\"\n [matchMode]=\"getColMatchMode(col.filterType)\"\n >\n <ng-template *ngIf=\"isDropOrMulti(col.filterType)\" pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\n <p-multiSelect [ngModel]=\"value\" [options]=\"col.dropdownOrMultiselectValues\" [placeholder]=\"t('All')\" (onChange)=\"filter($event.value)\" optionLabel=\"label\" optionValue=\"code\" [style]=\"{'width':'240px'}\">\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 *ngIf=\"col.filterType == 'date'\" pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\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 pTemplate=\"body\" let-rowData let-index=\"rowIndex\" let-editing=\"editing\">\n <tr [class.clickable]=\" navigateOnRowClick\"\n (click)=\"onRowClick(rowData)\">\n <td *ngIf=\"selectionMode == 'multiple'\">\n <p-checkbox [disabled]=\"readonly\" (onChange)=\"selectRow(rowData[idField], rowData.index)\" [ngModel]=\"isRowSelected(rowData[idField])\" [binary]=\"true\"></p-checkbox>\n </td>\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\n <td [style]=\"getStyleForBodyColumn(col)\" *ngIf=\"!col.editable\">\n <div style=\"display: flex; align-items: center; justify-content: center; gap: 18px;\">\n <ng-container *ngFor=\"let action of col.actions; trackBy: actionTrackByFn\" >\n <span [pTooltip]=\"action.name\" [class]=\"getClassForAction(action)\" [style]=\"getStyleForAction(action)\" (click)=\"getMethodForAction(action, rowData)\"></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 [control]=\"getFormArrayControlByIndex(col.field, rowData.index)\" [showLabel]=\"false\"></spiderly-number>\n </td>\n </ng-container>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('NoRecordsFound')}}</td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingbody\">\n <tr>\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('Loading')}}...</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 *ngIf=\"showAddButton\" [label]=\"t('AddNew')\" icon=\"pi pi-plus\" (onClick)=\"navigateToDetails(0)\"></spiderly-button>\n </div>\n </ng-template>\n </p-table>\n </div>\n</ng-container>", styles: [".table-header{display:flex;justify-content:space-between;align-items:center}@media (max-width: 640px){.table-header{display:flex;flex-direction:column;align-items:start;gap:14px}}.spiderly-table .p-paginator{padding:1rem}@media (min-width: 1400px){.spiderly-table .p-paginator-left-content{position:absolute;padding:14px;left:0}}@media (min-width: 1400px){.spiderly-table .p-paginator-right-content{position:absolute;padding:14px;right:0}}:host ::ng-deep .p-datatable-thead{position:unset!important}:host ::ng-deep .p-datatable-header{border-radius:6px 6px 0 0}:host ::ng-deep .p-datatable{border-radius:var(--p-content-border-radius);border:1px solid var(--p-datatable-border-color)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "component", type: SpiderlyNumberComponent, selector: "spiderly-number", inputs: ["prefix", "showButtons", "decimal", "maxFractionDigits"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i9.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i1$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel", "filterButtonProps"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i4$5.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus", "highlightOnSelect"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i4$1.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i4$2.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] }); }
3415
3088
  }
3416
3089
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyDataTableComponent, decorators: [{
3417
3090
  type: Component,
@@ -3426,7 +3099,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
3426
3099
  DatePickerModule,
3427
3100
  CheckboxModule,
3428
3101
  TooltipModule,
3429
- ], template: "<ng-container *transloco=\"let t\">\r\n <div [class]=\"showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\">\r\n <p-table #dt [value]=\"items\" [rows]=\"rows\" [rowHover]=\"true\" [paginator]=\"showPaginator\" responsiveLayout=\"scroll\" [lazy]=\"hasLazyLoad\"\r\n (onLazyLoad)=\"lazyLoad($event)\" [totalRecords]=\"totalRecords\" class=\"spiderly-table\" [loading]=\"(items === undefined || loading === true)\" [selectionMode]=\"selectionMode\" dataKey=\"id\" \r\n (onFilter)=\"filter($event)\"> \r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"table-header overflow-auto\">\r\n <div style=\"display: flex; align-items: center; gap: 8px;\">\r\n <i class=\"{{tableIcon}}\" style=\"font-size: 20px;\"></i>\r\n <div style=\"margin: 0px; font-size: 17.5px;\">{{tableTitle}}</div>\r\n </div>\r\n <div style=\"display: flex; gap: 8px;\">\r\n <button pButton [label]=\"t('ClearFilters')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-filter-slash\" (click)=\"clear(dt)\"></button>\r\n <button pButton *ngIf=\"showExportToExcelButton\" [label]=\"t('ExportToExcel')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-download\" (click)=\"exportListToExcel()\"></button>\r\n <button pButton *ngIf=\"showReloadTableButton\" [label]=\"t('Reload')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-refresh\" (click)=\"reload()\"></button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width: 0rem;\" *ngIf=\"selectionMode == 'multiple'\">\r\n <div style=\"display: flex; gap: 8px;\">\r\n <p-checkbox [disabled]=\"readonly\" (onChange)=\"selectAll($event.checked)\" [(ngModel)]=\"fakeIsAllSelected\" [binary]=\"true\"></p-checkbox> ({{rowsSelectedNumber}})\r\n </div>\r\n </th>\r\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\r\n <th [style]=\"getColHeaderWidth(col.filterType)\">\r\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n {{col.name}}\r\n <p-columnFilter *ngIf=\"col.filterType != null && col.filterType !== 'blob'\" [type]=\"col.filterType\" [field]=\"col.filterField ?? col.field\" display=\"menu\" [placeholder]=\"col.filterPlaceholder\" \r\n [showOperator]=\"false\" [showMatchModes]=\"col.showMatchModes\" [showAddButton]=\"col.showAddButton\" [matchModeOptions]=\"getColMatchModeOptions(col.filterType)\"\r\n [matchMode]=\"getColMatchMode(col.filterType)\"\r\n >\r\n <ng-template *ngIf=\"isDropOrMulti(col.filterType)\" pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"col.dropdownOrMultiselectValues\" [placeholder]=\"t('All')\" (onChange)=\"filter($event.value)\" optionLabel=\"label\" optionValue=\"code\" [style]=\"{'width':'240px'}\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n <ng-template *ngIf=\"col.filterType == 'date'\" pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-datepicker \r\n [ngModel]=\"value\" \r\n [showTime]=\"col.showTime\"\r\n (onSelect)=\"filter($event)\"\r\n ></p-datepicker>\r\n </ng-template>\r\n </p-columnFilter>\r\n </div>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-index=\"rowIndex\" let-editing=\"editing\">\r\n <tr [class.clickable]=\" navigateOnRowClick\"\r\n (click)=\"onRowClick(rowData)\">\r\n <td *ngIf=\"selectionMode == 'multiple'\">\r\n <p-checkbox [disabled]=\"readonly\" (onChange)=\"selectRow(rowData[idField], rowData.index)\" [ngModel]=\"isRowSelected(rowData[idField])\" [binary]=\"true\"></p-checkbox>\r\n </td>\r\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\r\n <td [style]=\"getStyleForBodyColumn(col)\" *ngIf=\"!col.editable\">\r\n <div style=\"display: flex; align-items: center; justify-content: center; gap: 18px;\">\r\n <ng-container *ngFor=\"let action of col.actions; trackBy: actionTrackByFn\" >\r\n <span [pTooltip]=\"action.name\" [class]=\"getClassForAction(action)\" [style]=\"getStyleForAction(action)\" (click)=\"getMethodForAction(action, rowData)\"></span>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"col.filterType === 'blob'\">\r\n <img width=\"45\" [src]=\"getRowData(rowData, col)\" alt=\"\">\r\n </ng-container>\r\n <ng-container *ngIf=\"col.filterType !== 'blob'\">\r\n {{getRowData(rowData, col)}}\r\n </ng-container>\r\n </td>\r\n <td *ngIf=\"col.editable\">\r\n <spiderly-number [control]=\"getFormArrayControlByIndex(col.field, rowData.index)\" [showLabel]=\"false\"></spiderly-number>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('NoRecordsFound')}}</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr>\r\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('Loading')}}...</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorleft\">\r\n {{t('TotalRecords')}}: {{totalRecords}}\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\">\r\n <div style=\"display: flex; justify-content: end; gap: 10px;\">\r\n <spiderly-button *ngIf=\"showAddButton\" [label]=\"t('AddNew')\" icon=\"pi pi-plus\" (onClick)=\"navigateToDetails(0)\"></spiderly-button>\r\n </div>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n</ng-container>", styles: [".table-header{display:flex;justify-content:space-between;align-items:center}@media (max-width: 640px){.table-header{display:flex;flex-direction:column;align-items:start;gap:14px}}.spiderly-table .p-paginator{padding:1rem}@media (min-width: 1400px){.spiderly-table .p-paginator-left-content{position:absolute;padding:14px;left:0}}@media (min-width: 1400px){.spiderly-table .p-paginator-right-content{position:absolute;padding:14px;right:0}}:host ::ng-deep .p-datatable-thead{position:unset!important}:host ::ng-deep .p-datatable-header{border-radius:6px 6px 0 0}:host ::ng-deep .p-datatable{border-radius:var(--p-content-border-radius);border:1px solid var(--p-datatable-border-color)}\n"] }]
3102
+ ], template: "<ng-container *transloco=\"let t\">\n <div [class]=\"showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\">\n <p-table #dt [value]=\"items\" [rows]=\"rows\" [rowHover]=\"true\" [paginator]=\"showPaginator\" responsiveLayout=\"scroll\" [lazy]=\"hasLazyLoad\"\n (onLazyLoad)=\"lazyLoad($event)\" [totalRecords]=\"totalRecords\" class=\"spiderly-table\" [loading]=\"(items === undefined || loading === true)\" [selectionMode]=\"selectionMode\" dataKey=\"id\" \n (onFilter)=\"filter($event)\"> \n <ng-template pTemplate=\"caption\">\n <div class=\"table-header overflow-auto\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i class=\"{{tableIcon}}\" style=\"font-size: 20px;\"></i>\n <div style=\"margin: 0px; font-size: 17.5px;\">{{tableTitle}}</div>\n </div>\n <div style=\"display: flex; gap: 8px;\">\n <button pButton [label]=\"t('ClearFilters')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-filter-slash\" (click)=\"clear(dt)\"></button>\n <button pButton *ngIf=\"showExportToExcelButton\" [label]=\"t('ExportToExcel')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-download\" (click)=\"exportListToExcel()\"></button>\n <button pButton *ngIf=\"showReloadTableButton\" [label]=\"t('Reload')\" class=\"p-button-outlined\" style=\"flex: none;\" icon=\"pi pi-refresh\" (click)=\"reload()\"></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 [disabled]=\"readonly\" (onChange)=\"selectAll($event.checked)\" [(ngModel)]=\"fakeIsAllSelected\" [binary]=\"true\"></p-checkbox> ({{rowsSelectedNumber}})\n </div>\n </th>\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\n <th [style]=\"getColHeaderWidth(col.filterType)\">\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n {{col.name}}\n <p-columnFilter *ngIf=\"col.filterType != null && col.filterType !== 'blob'\" [type]=\"col.filterType\" [field]=\"col.filterField ?? col.field\" display=\"menu\" [placeholder]=\"col.filterPlaceholder\" \n [showOperator]=\"false\" [showMatchModes]=\"col.showMatchModes\" [showAddButton]=\"col.showAddButton\" [matchModeOptions]=\"getColMatchModeOptions(col.filterType)\"\n [matchMode]=\"getColMatchMode(col.filterType)\"\n >\n <ng-template *ngIf=\"isDropOrMulti(col.filterType)\" pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\n <p-multiSelect [ngModel]=\"value\" [options]=\"col.dropdownOrMultiselectValues\" [placeholder]=\"t('All')\" (onChange)=\"filter($event.value)\" optionLabel=\"label\" optionValue=\"code\" [style]=\"{'width':'240px'}\">\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 *ngIf=\"col.filterType == 'date'\" pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\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 pTemplate=\"body\" let-rowData let-index=\"rowIndex\" let-editing=\"editing\">\n <tr [class.clickable]=\" navigateOnRowClick\"\n (click)=\"onRowClick(rowData)\">\n <td *ngIf=\"selectionMode == 'multiple'\">\n <p-checkbox [disabled]=\"readonly\" (onChange)=\"selectRow(rowData[idField], rowData.index)\" [ngModel]=\"isRowSelected(rowData[idField])\" [binary]=\"true\"></p-checkbox>\n </td>\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\n <td [style]=\"getStyleForBodyColumn(col)\" *ngIf=\"!col.editable\">\n <div style=\"display: flex; align-items: center; justify-content: center; gap: 18px;\">\n <ng-container *ngFor=\"let action of col.actions; trackBy: actionTrackByFn\" >\n <span [pTooltip]=\"action.name\" [class]=\"getClassForAction(action)\" [style]=\"getStyleForAction(action)\" (click)=\"getMethodForAction(action, rowData)\"></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 [control]=\"getFormArrayControlByIndex(col.field, rowData.index)\" [showLabel]=\"false\"></spiderly-number>\n </td>\n </ng-container>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('NoRecordsFound')}}</td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingbody\">\n <tr>\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('Loading')}}...</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 *ngIf=\"showAddButton\" [label]=\"t('AddNew')\" icon=\"pi pi-plus\" (onClick)=\"navigateToDetails(0)\"></spiderly-button>\n </div>\n </ng-template>\n </p-table>\n </div>\n</ng-container>", styles: [".table-header{display:flex;justify-content:space-between;align-items:center}@media (max-width: 640px){.table-header{display:flex;flex-direction:column;align-items:start;gap:14px}}.spiderly-table .p-paginator{padding:1rem}@media (min-width: 1400px){.spiderly-table .p-paginator-left-content{position:absolute;padding:14px;left:0}}@media (min-width: 1400px){.spiderly-table .p-paginator-right-content{position:absolute;padding:14px;right:0}}:host ::ng-deep .p-datatable-thead{position:unset!important}:host ::ng-deep .p-datatable-header{border-radius:6px 6px 0 0}:host ::ng-deep .p-datatable{border-radius:var(--p-content-border-radius);border:1px solid var(--p-datatable-border-color)}\n"] }]
3430
3103
  }], ctorParameters: () => [{ type: i3$2.Router }, { type: i1$6.DialogService }, { type: i3$2.ActivatedRoute }, { type: SpiderlyMessageService }, { type: i1.TranslocoService }, { type: undefined, decorators: [{
3431
3104
  type: Inject,
3432
3105
  args: [LOCALE_ID]
@@ -3652,7 +3325,7 @@ class SpiderlyDataViewComponent {
3652
3325
  this.table.clear();
3653
3326
  }
3654
3327
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyDataViewComponent, deps: [{ token: i1.TranslocoService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component }); }
3655
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: SpiderlyDataViewComponent, isStandalone: true, selector: "spiderly-data-view", inputs: { items: "items", rows: "rows", filters: "filters", showCardWrapper: "showCardWrapper", showPaginatorRightData: "showPaginatorRightData", showTotalRecordsNumber: "showTotalRecordsNumber", applyFiltersIcon: "applyFiltersIcon", clearFiltersIcon: "clearFiltersIcon", getPaginatedListObservableMethod: "getPaginatedListObservableMethod" }, outputs: { onLazyLoad: "onLazyLoad" }, queries: [{ propertyName: "cardBody", first: true, predicate: ["cardBody"], descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "table", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <div [class]=\"showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\">\r\n <p-table \r\n #dt \r\n [value]=\"items\" \r\n [rows]=\"rows\" \r\n [rowHover]=\"false\" \r\n responsiveLayout=\"scroll\" \r\n [lazy]=\"true\"\r\n (onLazyLoad)=\"lazyLoad($event)\" \r\n [totalRecords]=\"totalRecords\" class=\"spiderly-table\" \r\n [loading]=\"(items === undefined || loading === true)\" \r\n dataKey=\"id\" \r\n (onFilter)=\"filter($event)\"\r\n [filterDelay]=\"500\"\r\n [paginator]=\"true\"\r\n > \r\n <ng-template #caption>\r\n <div *ngIf=\"filters.length !== 0\">\r\n <div class=\"data-view-grid\">\r\n @for (filter of filters; track $index) {\r\n <div>\r\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem; position: relative;\">\r\n <div>\r\n <label>\r\n {{filter.label}}\r\n </label>\r\n </div>\r\n\r\n <p-columnFilter *ngIf=\"filter.type != null\" [type]=\"filter.type\" [field]=\"filter.filterField ?? filter.field\" display=\"row\" [placeholder]=\"filter.placeholder\" \r\n [showOperator]=\"false\" [showMenu]=\"filter.showMatchModes\" [showMatchModes]=\"true\" [showClearButton]=\"false\" [matchMode]=\"getDefaultMatchMode(filter.type)\" [matchModeOptions]=\"getMatchModeOptions(filter.type)\" \r\n >\r\n <ng-container *ngIf=\"filter.type == 'multiselect'\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"filter.dropdownOrMultiselectValues\" [placeholder]=\"t('All')\" (onChange)=\"filter($event.value)\" optionLabel=\"label\" optionValue=\"code\" [style]=\"{'width':'100%'}\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </ng-container>\r\n </p-columnFilter>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div style=\"display: flex; gap: 12px;\">\r\n <spiderly-button [label]=\"t('ApplyFilters')\" (onClick)=\"applyFilters()\" [icon]=\"applyFiltersIcon\"></spiderly-button>\r\n <spiderly-button [label]=\"t('ClearFilters')\" (onClick)=\"clearFilters()\" [icon]=\"clearFiltersIcon\"></spiderly-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #body let-rowData let-index=\"rowIndex\">\r\n <tr style=\"padding: 0; margin-bottom: 0;\">\r\n <td style=\"display: block; border: 0; padding: 0;\">\r\n <ng-container *ngTemplateOutlet=\"cardBody; context: { $implicit: rowData, item: rowData, index: index }\">\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n {{t('NoRecordsFound')}}\r\n </ng-template>\r\n <ng-template *ngIf=\"showTotalRecordsNumber\" pTemplate=\"paginatorleft\">\r\n {{t('TotalRecords')}}: {{totalRecords}}\r\n </ng-template>\r\n <ng-template *ngIf=\"showPaginatorRightData\" pTemplate=\"paginatorright\">\r\n <ng-content select=\"[PAGINATORRIGHT]\"></ng-content>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n</ng-container>", styles: ["::ng-deep .p-datatable-tbody{display:flex;flex-direction:column;gap:18px}::ng-deep .p-datatable-header{margin-bottom:36px;border:0!important;padding:0!important;background-color:transparent!important}::ng-deep .p-paginator{padding:18px 9px 0!important}::ng-deep .p-fluid{width:100%!important}::ng-deep .p-inputtext{width:100%!important}::ng-deep .p-inputnumber{width:100%!important}::ng-deep .p-datepicker{width:100%!important}.data-view-grid{display:grid;gap:18px;grid-template-columns:1fr 1fr 1fr;margin-bottom:18px}@media (max-width: 1080px){.data-view-grid{gap:12px;grid-template-columns:1fr 1fr}}@media (max-width: 500px){.data-view-grid{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i9.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i1$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel", "filterButtonProps"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i4$5.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus", "highlightOnSelect"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: InputNumberModule }, { kind: "ngmodule", type: SelectModule }] }); }
3328
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.13", type: SpiderlyDataViewComponent, isStandalone: true, selector: "spiderly-data-view", inputs: { items: "items", rows: "rows", filters: "filters", showCardWrapper: "showCardWrapper", showPaginatorRightData: "showPaginatorRightData", showTotalRecordsNumber: "showTotalRecordsNumber", applyFiltersIcon: "applyFiltersIcon", clearFiltersIcon: "clearFiltersIcon", getPaginatedListObservableMethod: "getPaginatedListObservableMethod" }, outputs: { onLazyLoad: "onLazyLoad" }, queries: [{ propertyName: "cardBody", first: true, predicate: ["cardBody"], descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "table", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div [class]=\"showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\">\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\" 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 style=\"display: flex; flex-direction: column; gap: 0.5rem; position: relative;\">\n <div>\n <label>\n {{filter.label}}\n </label>\n </div>\n\n <p-columnFilter *ngIf=\"filter.type != null\" [type]=\"filter.type\" [field]=\"filter.filterField ?? filter.field\" display=\"row\" [placeholder]=\"filter.placeholder\" \n [showOperator]=\"false\" [showMenu]=\"filter.showMatchModes\" [showMatchModes]=\"true\" [showClearButton]=\"false\" [matchMode]=\"getDefaultMatchMode(filter.type)\" [matchModeOptions]=\"getMatchModeOptions(filter.type)\" \n >\n <ng-container *ngIf=\"filter.type == 'multiselect'\">\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\n <p-multiSelect [ngModel]=\"value\" [options]=\"filter.dropdownOrMultiselectValues\" [placeholder]=\"t('All')\" (onChange)=\"filter($event.value)\" optionLabel=\"label\" optionValue=\"code\" [style]=\"{'width':'100%'}\">\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 [label]=\"t('ApplyFilters')\" (onClick)=\"applyFilters()\" [icon]=\"applyFiltersIcon\"></spiderly-button>\n <spiderly-button [label]=\"t('ClearFilters')\" (onClick)=\"clearFilters()\" [icon]=\"clearFiltersIcon\"></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 *ngTemplateOutlet=\"cardBody; context: { $implicit: rowData, item: rowData, index: index }\">\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>", styles: ["::ng-deep .p-datatable-tbody{display:flex;flex-direction:column;gap:18px}::ng-deep .p-datatable-header{margin-bottom:36px;border:0!important;padding:0!important;background-color:transparent!important}::ng-deep .p-paginator{padding:18px 9px 0!important}::ng-deep .p-fluid{width:100%!important}::ng-deep .p-inputtext{width:100%!important}::ng-deep .p-inputnumber{width:100%!important}::ng-deep .p-datepicker{width:100%!important}.data-view-grid{display:grid;gap:18px;grid-template-columns:1fr 1fr 1fr;margin-bottom:18px}@media (max-width: 1080px){.data-view-grid{gap:12px;grid-template-columns:1fr 1fr}}@media (max-width: 500px){.data-view-grid{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i9.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i1$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel", "filterButtonProps"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i4$5.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus", "highlightOnSelect"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: InputNumberModule }, { kind: "ngmodule", type: SelectModule }] }); }
3656
3329
  }
3657
3330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyDataViewComponent, decorators: [{
3658
3331
  type: Component,
@@ -3670,7 +3343,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
3670
3343
  InputTextModule,
3671
3344
  InputNumberModule,
3672
3345
  SelectModule,
3673
- ], template: "<ng-container *transloco=\"let t\">\r\n <div [class]=\"showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\">\r\n <p-table \r\n #dt \r\n [value]=\"items\" \r\n [rows]=\"rows\" \r\n [rowHover]=\"false\" \r\n responsiveLayout=\"scroll\" \r\n [lazy]=\"true\"\r\n (onLazyLoad)=\"lazyLoad($event)\" \r\n [totalRecords]=\"totalRecords\" class=\"spiderly-table\" \r\n [loading]=\"(items === undefined || loading === true)\" \r\n dataKey=\"id\" \r\n (onFilter)=\"filter($event)\"\r\n [filterDelay]=\"500\"\r\n [paginator]=\"true\"\r\n > \r\n <ng-template #caption>\r\n <div *ngIf=\"filters.length !== 0\">\r\n <div class=\"data-view-grid\">\r\n @for (filter of filters; track $index) {\r\n <div>\r\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem; position: relative;\">\r\n <div>\r\n <label>\r\n {{filter.label}}\r\n </label>\r\n </div>\r\n\r\n <p-columnFilter *ngIf=\"filter.type != null\" [type]=\"filter.type\" [field]=\"filter.filterField ?? filter.field\" display=\"row\" [placeholder]=\"filter.placeholder\" \r\n [showOperator]=\"false\" [showMenu]=\"filter.showMatchModes\" [showMatchModes]=\"true\" [showClearButton]=\"false\" [matchMode]=\"getDefaultMatchMode(filter.type)\" [matchModeOptions]=\"getMatchModeOptions(filter.type)\" \r\n >\r\n <ng-container *ngIf=\"filter.type == 'multiselect'\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"filter.dropdownOrMultiselectValues\" [placeholder]=\"t('All')\" (onChange)=\"filter($event.value)\" optionLabel=\"label\" optionValue=\"code\" [style]=\"{'width':'100%'}\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </ng-container>\r\n </p-columnFilter>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div style=\"display: flex; gap: 12px;\">\r\n <spiderly-button [label]=\"t('ApplyFilters')\" (onClick)=\"applyFilters()\" [icon]=\"applyFiltersIcon\"></spiderly-button>\r\n <spiderly-button [label]=\"t('ClearFilters')\" (onClick)=\"clearFilters()\" [icon]=\"clearFiltersIcon\"></spiderly-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #body let-rowData let-index=\"rowIndex\">\r\n <tr style=\"padding: 0; margin-bottom: 0;\">\r\n <td style=\"display: block; border: 0; padding: 0;\">\r\n <ng-container *ngTemplateOutlet=\"cardBody; context: { $implicit: rowData, item: rowData, index: index }\">\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n {{t('NoRecordsFound')}}\r\n </ng-template>\r\n <ng-template *ngIf=\"showTotalRecordsNumber\" pTemplate=\"paginatorleft\">\r\n {{t('TotalRecords')}}: {{totalRecords}}\r\n </ng-template>\r\n <ng-template *ngIf=\"showPaginatorRightData\" pTemplate=\"paginatorright\">\r\n <ng-content select=\"[PAGINATORRIGHT]\"></ng-content>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n</ng-container>", styles: ["::ng-deep .p-datatable-tbody{display:flex;flex-direction:column;gap:18px}::ng-deep .p-datatable-header{margin-bottom:36px;border:0!important;padding:0!important;background-color:transparent!important}::ng-deep .p-paginator{padding:18px 9px 0!important}::ng-deep .p-fluid{width:100%!important}::ng-deep .p-inputtext{width:100%!important}::ng-deep .p-inputnumber{width:100%!important}::ng-deep .p-datepicker{width:100%!important}.data-view-grid{display:grid;gap:18px;grid-template-columns:1fr 1fr 1fr;margin-bottom:18px}@media (max-width: 1080px){.data-view-grid{gap:12px;grid-template-columns:1fr 1fr}}@media (max-width: 500px){.data-view-grid{grid-template-columns:1fr}}\n"] }]
3346
+ ], template: "<ng-container *transloco=\"let t\">\n <div [class]=\"showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\">\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\" 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 style=\"display: flex; flex-direction: column; gap: 0.5rem; position: relative;\">\n <div>\n <label>\n {{filter.label}}\n </label>\n </div>\n\n <p-columnFilter *ngIf=\"filter.type != null\" [type]=\"filter.type\" [field]=\"filter.filterField ?? filter.field\" display=\"row\" [placeholder]=\"filter.placeholder\" \n [showOperator]=\"false\" [showMenu]=\"filter.showMatchModes\" [showMatchModes]=\"true\" [showClearButton]=\"false\" [matchMode]=\"getDefaultMatchMode(filter.type)\" [matchModeOptions]=\"getMatchModeOptions(filter.type)\" \n >\n <ng-container *ngIf=\"filter.type == 'multiselect'\">\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\n <p-multiSelect [ngModel]=\"value\" [options]=\"filter.dropdownOrMultiselectValues\" [placeholder]=\"t('All')\" (onChange)=\"filter($event.value)\" optionLabel=\"label\" optionValue=\"code\" [style]=\"{'width':'100%'}\">\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 [label]=\"t('ApplyFilters')\" (onClick)=\"applyFilters()\" [icon]=\"applyFiltersIcon\"></spiderly-button>\n <spiderly-button [label]=\"t('ClearFilters')\" (onClick)=\"clearFilters()\" [icon]=\"clearFiltersIcon\"></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 *ngTemplateOutlet=\"cardBody; context: { $implicit: rowData, item: rowData, index: index }\">\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>", styles: ["::ng-deep .p-datatable-tbody{display:flex;flex-direction:column;gap:18px}::ng-deep .p-datatable-header{margin-bottom:36px;border:0!important;padding:0!important;background-color:transparent!important}::ng-deep .p-paginator{padding:18px 9px 0!important}::ng-deep .p-fluid{width:100%!important}::ng-deep .p-inputtext{width:100%!important}::ng-deep .p-inputnumber{width:100%!important}::ng-deep .p-datepicker{width:100%!important}.data-view-grid{display:grid;gap:18px;grid-template-columns:1fr 1fr 1fr;margin-bottom:18px}@media (max-width: 1080px){.data-view-grid{gap:12px;grid-template-columns:1fr 1fr}}@media (max-width: 500px){.data-view-grid{grid-template-columns:1fr}}\n"] }]
3674
3347
  }], ctorParameters: () => [{ type: i1.TranslocoService }, { type: undefined, decorators: [{
3675
3348
  type: Inject,
3676
3349
  args: [LOCALE_ID]
@@ -3709,11 +3382,11 @@ class SpiderlyCardComponent {
3709
3382
  ngOnInit() {
3710
3383
  }
3711
3384
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3712
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyCardComponent, isStandalone: true, selector: "spiderly-card", inputs: { icon: "icon", title: "title" }, ngImport: i0, template: "<div class=\"card responsive-card-padding\">\r\n <div style=\"display: flex; align-items: center; margin-bottom: 14px; gap: 8px;\">\r\n <i style=\"font-size: 21px;\" class=\"{{icon}} primary-color\"></i>\r\n <div style=\"margin: 0; font-size: 17.5px;\">{{title}}</div>\r\n </div>\r\n <ng-content></ng-content>\r\n</div>" }); }
3385
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyCardComponent, isStandalone: true, selector: "spiderly-card", inputs: { icon: "icon", title: "title" }, ngImport: i0, template: "<div class=\"card responsive-card-padding\">\n <div style=\"display: flex; align-items: center; margin-bottom: 14px; gap: 8px;\">\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>" }); }
3713
3386
  }
3714
3387
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyCardComponent, decorators: [{
3715
3388
  type: Component,
3716
- args: [{ selector: 'spiderly-card', template: "<div class=\"card responsive-card-padding\">\r\n <div style=\"display: flex; align-items: center; margin-bottom: 14px; gap: 8px;\">\r\n <i style=\"font-size: 21px;\" class=\"{{icon}} primary-color\"></i>\r\n <div style=\"margin: 0; font-size: 17.5px;\">{{title}}</div>\r\n </div>\r\n <ng-content></ng-content>\r\n</div>" }]
3389
+ args: [{ selector: 'spiderly-card', template: "<div class=\"card responsive-card-padding\">\n <div style=\"display: flex; align-items: center; margin-bottom: 14px; gap: 8px;\">\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>" }]
3717
3390
  }], ctorParameters: () => [], propDecorators: { icon: [{
3718
3391
  type: Input
3719
3392
  }], title: [{
@@ -3732,7 +3405,7 @@ class InitTopBarData extends BaseEntity {
3732
3405
  static { this.typeName = 'InitTopBarData'; }
3733
3406
  }
3734
3407
 
3735
- class LayoutBaseService {
3408
+ class LayoutServiceBase {
3736
3409
  constructor(apiService, config, authService) {
3737
3410
  this.apiService = apiService;
3738
3411
  this.config = config;
@@ -3847,15 +3520,15 @@ class LayoutBaseService {
3847
3520
  this.userSubscription.unsubscribe();
3848
3521
  }
3849
3522
  }
3850
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LayoutBaseService, deps: [{ token: ApiSecurityService }, { token: ConfigBaseService }, { token: AuthBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3851
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LayoutBaseService, providedIn: 'root' }); }
3523
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LayoutServiceBase, deps: [{ token: ApiSecurityService }, { token: ConfigServiceBase }, { token: AuthServiceBase }], target: i0.ɵɵFactoryTarget.Injectable }); }
3524
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LayoutServiceBase, providedIn: 'root' }); }
3852
3525
  }
3853
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LayoutBaseService, decorators: [{
3526
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: LayoutServiceBase, decorators: [{
3854
3527
  type: Injectable,
3855
3528
  args: [{
3856
3529
  providedIn: 'root',
3857
3530
  }]
3858
- }], ctorParameters: () => [{ type: ApiSecurityService }, { type: ConfigBaseService }, { type: AuthBaseService }] });
3531
+ }], ctorParameters: () => [{ type: ApiSecurityService }, { type: ConfigServiceBase }, { type: AuthServiceBase }] });
3859
3532
 
3860
3533
  class SidebarMenuService {
3861
3534
  constructor() {
@@ -3976,8 +3649,8 @@ class MenuitemComponent {
3976
3649
  this.permissionSubscription.unsubscribe();
3977
3650
  }
3978
3651
  }
3979
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MenuitemComponent, deps: [{ token: LayoutBaseService }, { token: i0.ChangeDetectorRef }, { token: i3$2.Router }, { token: SidebarMenuService }, { token: AuthBaseService }, { token: ApiSecurityService }, { token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
3980
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: MenuitemComponent, isStandalone: true, selector: "[menuitem]", inputs: { item: "item", index: "index", root: "root", parentKey: "parentKey" }, host: { properties: { "class.layout-root-menuitem": "this.root", "class.active-menuitem": "this.activeClass" } }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <div *ngIf=\"root && item.visible === true\" class=\"layout-menuitem-root-text\">{{item.label}}</div>\r\n <a *ngIf=\"(!item.routerLink || item.items) && item.visible === true\" [attr.href]=\"item.url\" (click)=\"itemClick($event)\"\r\n [ngClass]=\"item.styleClass\" [attr.target]=\"item.target\" tabindex=\"0\" pRipple>\r\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\r\n <span class=\"layout-menuitem-text\">{{item.label}}</span>\r\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items\"></i>\r\n </a>\r\n <a *ngIf=\"(item.routerLink && !item.items) && item.visible === true\" (click)=\"itemClick($event)\" [ngClass]=\"item.styleClass\"\r\n [routerLink]=\"item.routerLink\" routerLinkActive=\"active-route\" [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{ paths: 'exact', queryParams: 'ignored', matrixParams: 'ignored', fragment: 'ignored' }\"\r\n [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\"\r\n [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\" [queryParams]=\"item.queryParams\"\r\n [attr.target]=\"item.target\" tabindex=\"0\" pRipple>\r\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\r\n <span class=\"layout-menuitem-text\">{{item.label}}</span>\r\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items\"></i>\r\n </a>\r\n\r\n <ul *ngIf=\"item.items && item.visible === true\" [@children]=\"submenuAnimation\">\r\n <ng-template ngFor let-child let-i=\"index\" [ngForOf]=\"item.items\">\r\n <li menuitem [item]=\"child\" [index]=\"i\" [parentKey]=\"key\" [class]=\"child.badgeStyleClass\"></li>\r\n </ng-template>\r\n </ul>\r\n\r\n <!-- Delete this in the future iterations, make link to partner in /partners page -->\r\n <spiderly-autocomplete\r\n *ngIf=\"item.showPartnerDialog\"\r\n [control]=\"selectedPartner\"\r\n [options]=\"partnerOptions\"\r\n (onTextInput)=\"searchPartners($event)\"\r\n label=\"\"\r\n [placeholder]=\"t('SelectThePartner')\"\r\n [showAddon]=\"true\"\r\n (onButtonClick)=\"partnersAutocompleteButtonClick()\"\r\n addonIcon=\"pi pi-check\"\r\n [emptyMessage]=\"t('LeftCornerPartnersEmptyMessage')\"\r\n class=\"mobile-stay-open\"\r\n ></spiderly-autocomplete>\r\n \r\n</ng-container>", dependencies: [{ kind: "component", type: MenuitemComponent, selector: "[menuitem]", inputs: ["item", "index", "root", "parentKey"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3$2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: SpiderlyAutocompleteComponent, selector: "spiderly-autocomplete", inputs: ["appendTo", "showClear", "emptyMessage", "displayName"] }], animations: [
3652
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: MenuitemComponent, deps: [{ token: LayoutServiceBase }, { token: i0.ChangeDetectorRef }, { token: i3$2.Router }, { token: SidebarMenuService }, { token: AuthServiceBase }, { token: ApiSecurityService }, { token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Component }); }
3653
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: MenuitemComponent, isStandalone: true, selector: "[menuitem]", inputs: { item: "item", index: "index", root: "root", parentKey: "parentKey" }, host: { properties: { "class.layout-root-menuitem": "this.root", "class.active-menuitem": "this.activeClass" } }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div *ngIf=\"root && item.visible === true\" class=\"layout-menuitem-root-text\">{{item.label}}</div>\n <a *ngIf=\"(!item.routerLink || item.items) && item.visible === true\" [attr.href]=\"item.url\" (click)=\"itemClick($event)\"\n [ngClass]=\"item.styleClass\" [attr.target]=\"item.target\" tabindex=\"0\" pRipple>\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{item.label}}</span>\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items\"></i>\n </a>\n <a *ngIf=\"(item.routerLink && !item.items) && item.visible === true\" (click)=\"itemClick($event)\" [ngClass]=\"item.styleClass\"\n [routerLink]=\"item.routerLink\" routerLinkActive=\"active-route\" [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{ paths: 'exact', queryParams: 'ignored', matrixParams: 'ignored', fragment: 'ignored' }\"\n [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\" [queryParams]=\"item.queryParams\"\n [attr.target]=\"item.target\" tabindex=\"0\" pRipple>\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{item.label}}</span>\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items\"></i>\n </a>\n\n <ul *ngIf=\"item.items && item.visible === true\" [@children]=\"submenuAnimation\">\n <ng-template ngFor let-child let-i=\"index\" [ngForOf]=\"item.items\">\n <li menuitem [item]=\"child\" [index]=\"i\" [parentKey]=\"key\" [class]=\"child.badgeStyleClass\"></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 \n</ng-container>", dependencies: [{ kind: "component", type: MenuitemComponent, selector: "[menuitem]", inputs: ["item", "index", "root", "parentKey"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3$2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: SpiderlyAutocompleteComponent, selector: "spiderly-autocomplete", inputs: ["appendTo", "showClear", "emptyMessage", "displayName"] }], animations: [
3981
3654
  trigger('children', [
3982
3655
  state('collapsed', style({
3983
3656
  height: '0'
@@ -4006,8 +3679,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
4006
3679
  RouterModule,
4007
3680
  TranslocoDirective,
4008
3681
  SpiderlyControlsModule,
4009
- ], template: "<ng-container *transloco=\"let t\">\r\n <div *ngIf=\"root && item.visible === true\" class=\"layout-menuitem-root-text\">{{item.label}}</div>\r\n <a *ngIf=\"(!item.routerLink || item.items) && item.visible === true\" [attr.href]=\"item.url\" (click)=\"itemClick($event)\"\r\n [ngClass]=\"item.styleClass\" [attr.target]=\"item.target\" tabindex=\"0\" pRipple>\r\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\r\n <span class=\"layout-menuitem-text\">{{item.label}}</span>\r\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items\"></i>\r\n </a>\r\n <a *ngIf=\"(item.routerLink && !item.items) && item.visible === true\" (click)=\"itemClick($event)\" [ngClass]=\"item.styleClass\"\r\n [routerLink]=\"item.routerLink\" routerLinkActive=\"active-route\" [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{ paths: 'exact', queryParams: 'ignored', matrixParams: 'ignored', fragment: 'ignored' }\"\r\n [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\"\r\n [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\" [queryParams]=\"item.queryParams\"\r\n [attr.target]=\"item.target\" tabindex=\"0\" pRipple>\r\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\r\n <span class=\"layout-menuitem-text\">{{item.label}}</span>\r\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items\"></i>\r\n </a>\r\n\r\n <ul *ngIf=\"item.items && item.visible === true\" [@children]=\"submenuAnimation\">\r\n <ng-template ngFor let-child let-i=\"index\" [ngForOf]=\"item.items\">\r\n <li menuitem [item]=\"child\" [index]=\"i\" [parentKey]=\"key\" [class]=\"child.badgeStyleClass\"></li>\r\n </ng-template>\r\n </ul>\r\n\r\n <!-- Delete this in the future iterations, make link to partner in /partners page -->\r\n <spiderly-autocomplete\r\n *ngIf=\"item.showPartnerDialog\"\r\n [control]=\"selectedPartner\"\r\n [options]=\"partnerOptions\"\r\n (onTextInput)=\"searchPartners($event)\"\r\n label=\"\"\r\n [placeholder]=\"t('SelectThePartner')\"\r\n [showAddon]=\"true\"\r\n (onButtonClick)=\"partnersAutocompleteButtonClick()\"\r\n addonIcon=\"pi pi-check\"\r\n [emptyMessage]=\"t('LeftCornerPartnersEmptyMessage')\"\r\n class=\"mobile-stay-open\"\r\n ></spiderly-autocomplete>\r\n \r\n</ng-container>" }]
4010
- }], ctorParameters: () => [{ type: LayoutBaseService }, { type: i0.ChangeDetectorRef }, { type: i3$2.Router }, { type: SidebarMenuService }, { type: AuthBaseService }, { type: ApiSecurityService }, { type: ConfigBaseService }], propDecorators: { item: [{
3682
+ ], template: "<ng-container *transloco=\"let t\">\n <div *ngIf=\"root && item.visible === true\" class=\"layout-menuitem-root-text\">{{item.label}}</div>\n <a *ngIf=\"(!item.routerLink || item.items) && item.visible === true\" [attr.href]=\"item.url\" (click)=\"itemClick($event)\"\n [ngClass]=\"item.styleClass\" [attr.target]=\"item.target\" tabindex=\"0\" pRipple>\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{item.label}}</span>\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items\"></i>\n </a>\n <a *ngIf=\"(item.routerLink && !item.items) && item.visible === true\" (click)=\"itemClick($event)\" [ngClass]=\"item.styleClass\"\n [routerLink]=\"item.routerLink\" routerLinkActive=\"active-route\" [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{ paths: 'exact', queryParams: 'ignored', matrixParams: 'ignored', fragment: 'ignored' }\"\n [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\" [queryParams]=\"item.queryParams\"\n [attr.target]=\"item.target\" tabindex=\"0\" pRipple>\n <i [ngClass]=\"item.icon\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{item.label}}</span>\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items\"></i>\n </a>\n\n <ul *ngIf=\"item.items && item.visible === true\" [@children]=\"submenuAnimation\">\n <ng-template ngFor let-child let-i=\"index\" [ngForOf]=\"item.items\">\n <li menuitem [item]=\"child\" [index]=\"i\" [parentKey]=\"key\" [class]=\"child.badgeStyleClass\"></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 \n</ng-container>" }]
3683
+ }], ctorParameters: () => [{ type: LayoutServiceBase }, { type: i0.ChangeDetectorRef }, { type: i3$2.Router }, { type: SidebarMenuService }, { type: AuthServiceBase }, { type: ApiSecurityService }, { type: ConfigServiceBase }], propDecorators: { item: [{
4011
3684
  type: Input
4012
3685
  }], index: [{
4013
3686
  type: Input
@@ -4034,16 +3707,16 @@ class SidebarMenuComponent {
4034
3707
  }
4035
3708
  ngOnDestroy() {
4036
3709
  }
4037
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SidebarMenuComponent, deps: [{ token: LayoutBaseService }, { token: AuthBaseService }, { token: i1.TranslocoService }, { token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
4038
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SidebarMenuComponent, isStandalone: true, selector: "sidebar-menu", inputs: { menu: "menu" }, ngImport: i0, template: "<ul class=\"layout-menu\">\r\n <ng-container *ngFor=\"let item of menu; let i = index;\">\r\n <li menuitem *ngIf=\"!item.separator\" [item]=\"item\" [index]=\"i\" [root]=\"true\"></li>\r\n <li *ngIf=\"item.separator\" class=\"gray-separator\" style=\"margin-top: 11px;\"></li>\r\n </ng-container>\r\n</ul>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MenuitemComponent, selector: "[menuitem]", inputs: ["item", "index", "root", "parentKey"] }] }); }
3710
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SidebarMenuComponent, deps: [{ token: LayoutServiceBase }, { token: AuthServiceBase }, { token: i1.TranslocoService }, { token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Component }); }
3711
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SidebarMenuComponent, isStandalone: true, selector: "sidebar-menu", inputs: { menu: "menu" }, ngImport: i0, template: "<ul class=\"layout-menu\">\n <ng-container *ngFor=\"let item of menu; let i = index;\">\n <li menuitem *ngIf=\"!item.separator\" [item]=\"item\" [index]=\"i\" [root]=\"true\"></li>\n <li *ngIf=\"item.separator\" class=\"gray-separator\" style=\"margin-top: 11px;\"></li>\n </ng-container>\n</ul>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MenuitemComponent, selector: "[menuitem]", inputs: ["item", "index", "root", "parentKey"] }] }); }
4039
3712
  }
4040
3713
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SidebarMenuComponent, decorators: [{
4041
3714
  type: Component,
4042
3715
  args: [{ selector: 'sidebar-menu', imports: [
4043
3716
  CommonModule,
4044
3717
  MenuitemComponent
4045
- ], template: "<ul class=\"layout-menu\">\r\n <ng-container *ngFor=\"let item of menu; let i = index;\">\r\n <li menuitem *ngIf=\"!item.separator\" [item]=\"item\" [index]=\"i\" [root]=\"true\"></li>\r\n <li *ngIf=\"item.separator\" class=\"gray-separator\" style=\"margin-top: 11px;\"></li>\r\n </ng-container>\r\n</ul>\r\n" }]
4046
- }], ctorParameters: () => [{ type: LayoutBaseService }, { type: AuthBaseService }, { type: i1.TranslocoService }, { type: ConfigBaseService }], propDecorators: { menu: [{
3718
+ ], template: "<ul class=\"layout-menu\">\n <ng-container *ngFor=\"let item of menu; let i = index;\">\n <li menuitem *ngIf=\"!item.separator\" [item]=\"item\" [index]=\"i\" [root]=\"true\"></li>\n <li *ngIf=\"item.separator\" class=\"gray-separator\" style=\"margin-top: 11px;\"></li>\n </ng-container>\n</ul>\n" }]
3719
+ }], ctorParameters: () => [{ type: LayoutServiceBase }, { type: AuthServiceBase }, { type: i1.TranslocoService }, { type: ConfigServiceBase }], propDecorators: { menu: [{
4047
3720
  type: Input
4048
3721
  }] } });
4049
3722
 
@@ -4054,13 +3727,13 @@ class AppSidebarComponent {
4054
3727
  ngOnInit() {
4055
3728
  }
4056
3729
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AppSidebarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
4057
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: AppSidebarComponent, isStandalone: true, selector: "sidebar", inputs: { menu: "menu" }, ngImport: i0, template: " <sidebar-menu [menu]=\"menu\"></sidebar-menu>\r\n", dependencies: [{ kind: "component", type: SidebarMenuComponent, selector: "sidebar-menu", inputs: ["menu"] }] }); }
3730
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: AppSidebarComponent, isStandalone: true, selector: "sidebar", inputs: { menu: "menu" }, ngImport: i0, template: " <sidebar-menu [menu]=\"menu\"></sidebar-menu>\n", dependencies: [{ kind: "component", type: SidebarMenuComponent, selector: "sidebar-menu", inputs: ["menu"] }] }); }
4058
3731
  }
4059
3732
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AppSidebarComponent, decorators: [{
4060
3733
  type: Component,
4061
3734
  args: [{ selector: 'sidebar', imports: [
4062
3735
  SidebarMenuComponent
4063
- ], template: " <sidebar-menu [menu]=\"menu\"></sidebar-menu>\r\n" }]
3736
+ ], template: " <sidebar-menu [menu]=\"menu\"></sidebar-menu>\n" }]
4064
3737
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { menu: [{
4065
3738
  type: Input
4066
3739
  }] } });
@@ -4153,8 +3826,8 @@ class ProfileAvatarComponent {
4153
3826
  this.initTopBarSubscription.unsubscribe();
4154
3827
  }
4155
3828
  }
4156
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ProfileAvatarComponent, deps: [{ token: LayoutBaseService }, { token: AuthBaseService }, { token: i3$2.Router }, { token: i1.TranslocoService }, { token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
4157
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: ProfileAvatarComponent, isStandalone: true, selector: "spiderly-profile-avatar", inputs: { isSideMenuLayout: "isSideMenuLayout", routeOnLargeProfileAvatarClick: "routeOnLargeProfileAvatarClick", showLoginButton: "showLoginButton", routeToLoginPage: "routeToLoginPage", loginButtonOutlined: "loginButtonOutlined", loginButtonSeverity: "loginButtonSeverity", loginButtonSize: "loginButtonSize", menuItems: "menuItems" }, outputs: { onLoginButtonClick: "onLoginButtonClick" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["topbarmenu"], descendants: true }, { propertyName: "topbarProfileDropdownMenuButton", first: true, predicate: ["topbarprofiledropdownmenubutton"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <div\r\n *ngIf=\"this.currentUser != null\"\r\n #topbarmenu\r\n >\r\n <div\r\n #topbarprofiledropdownmenubutton\r\n (click)=\"layoutService.showProfileDropdownSidebar()\"\r\n >\r\n <p-avatar\r\n *ngIf=\"showProfileIcon\"\r\n [label]=\"avatarLabel\"\r\n [style]=\"{ 'background-color': 'var(--p-primary-color)', 'color': '#fff', 'cursor': 'pointer', 'width': '34px', 'height': '34px', 'font-size': '21px' }\"\r\n pBadge \r\n [badgeStyleClass]=\"'p-badge-danger'\"\r\n [badgeDisabled]=\"unreadNotificationsCount == 0 || unreadNotificationsCount == null\"\r\n [value]=\"unreadNotificationsCount\"\r\n />\r\n </div>\r\n <div\r\n #topbarprofiledropdownmenu\r\n (document:click)=\"onDocumentClick($event)\"\r\n >\r\n <div \r\n *ngIf=\"layoutService.state.profileDropdownSidebarVisible\" \r\n style=\"width: 280px; position: absolute; padding: 15px; background: var(--p-content-background);\" \r\n class=\"card\"\r\n [ngClass]=\"{\r\n 'side-menu-profile-dialog': isSideMenuLayout,\r\n 'top-menu-profile-dialog': !isSideMenuLayout,\r\n }\r\n \"\r\n >\r\n <div style=\"display: flex; flex-direction: column; justify-content: center; text-align: center; gap: 10px;\">\r\n <p-avatar\r\n [label]=\"avatarLabel\"\r\n size=\"xlarge\"\r\n [style]=\"{ 'background-color': 'var(--p-primary-color)', 'color': '#fff', 'margin': 'auto', 'cursor': routeOnLargeProfileAvatarClick ? 'pointer' : '' }\"\r\n (click)=\"routeToUserPage()\"\r\n />\r\n <div style=\"font-size: 15px;\">{{currentUser?.email}}</div>\r\n </div>\r\n <div style=\"margin-top: 15px;\">\r\n <div *ngFor=\"let item of menuItems\" [style]=\"item.showSeparator ? 'margin-top: 5px;' : ''\">\r\n <div *ngIf=\"item.showSeparator\" class=\"gray-separator\"></div>\r\n <div (click)=\"item.onClick()\" class=\"hover-card\" style=\"display: flex; align-items: center; gap: 8px; margin-top: 5px;\">\r\n <i \r\n class=\"pi pi-fw {{item.icon}}\" \r\n style=\"font-size: 16px; position: relative;\"\r\n >\r\n <span *ngIf=\"item.showNotificationBadge && unreadNotificationsCount != 0\" class=\"badge\"></span>\r\n </i>\r\n <div style=\"font-size: 15px;\"> {{item.label}} </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"this.currentUser == null && this.showLoginButton\">\r\n <spiderly-button \r\n [label]=\"t('Login')\" \r\n (onClick)=\"loginButtonClick()\" \r\n icon=\"pi pi-sign-in\" \r\n [outlined]=\"loginButtonOutlined\" \r\n [severity]=\"loginButtonSeverity\"\r\n [size]=\"loginButtonSize\"\r\n ></spiderly-button>\r\n </div>\r\n</ng-container>", styles: [".side-menu-profile-dialog{right:26px;top:60px}.top-menu-profile-dialog{right:0;top:40px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i7.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: BadgeModule }, { kind: "directive", type: i8.BadgeDirective, selector: "[pBadge]", inputs: ["badgeDisabled", "badgeSize", "size", "severity", "value", "badgeStyle", "badgeStyleClass"] }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
3829
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ProfileAvatarComponent, deps: [{ token: LayoutServiceBase }, { token: AuthServiceBase }, { token: i3$2.Router }, { token: i1.TranslocoService }, { token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Component }); }
3830
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: ProfileAvatarComponent, isStandalone: true, selector: "spiderly-profile-avatar", inputs: { isSideMenuLayout: "isSideMenuLayout", routeOnLargeProfileAvatarClick: "routeOnLargeProfileAvatarClick", showLoginButton: "showLoginButton", routeToLoginPage: "routeToLoginPage", loginButtonOutlined: "loginButtonOutlined", loginButtonSeverity: "loginButtonSeverity", loginButtonSize: "loginButtonSize", menuItems: "menuItems" }, outputs: { onLoginButtonClick: "onLoginButtonClick" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["topbarmenu"], descendants: true }, { propertyName: "topbarProfileDropdownMenuButton", first: true, predicate: ["topbarprofiledropdownmenubutton"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div\n *ngIf=\"this.currentUser != null\"\n #topbarmenu\n >\n <div\n #topbarprofiledropdownmenubutton\n (click)=\"layoutService.showProfileDropdownSidebar()\"\n >\n <p-avatar\n *ngIf=\"showProfileIcon\"\n [label]=\"avatarLabel\"\n [style]=\"{ 'background-color': 'var(--p-primary-color)', 'color': '#fff', 'cursor': 'pointer', 'width': '34px', 'height': '34px', 'font-size': '21px' }\"\n pBadge \n [badgeStyleClass]=\"'p-badge-danger'\"\n [badgeDisabled]=\"unreadNotificationsCount == 0 || unreadNotificationsCount == null\"\n [value]=\"unreadNotificationsCount\"\n />\n </div>\n <div\n #topbarprofiledropdownmenu\n (document:click)=\"onDocumentClick($event)\"\n >\n <div \n *ngIf=\"layoutService.state.profileDropdownSidebarVisible\" \n style=\"width: 280px; position: absolute; padding: 15px; background: var(--p-content-background);\" \n class=\"card\"\n [ngClass]=\"{\n 'side-menu-profile-dialog': isSideMenuLayout,\n 'top-menu-profile-dialog': !isSideMenuLayout,\n }\n \"\n >\n <div style=\"display: flex; flex-direction: column; justify-content: center; text-align: center; gap: 10px;\">\n <p-avatar\n [label]=\"avatarLabel\"\n size=\"xlarge\"\n [style]=\"{ 'background-color': 'var(--p-primary-color)', 'color': '#fff', 'margin': 'auto', 'cursor': routeOnLargeProfileAvatarClick ? 'pointer' : '' }\"\n (click)=\"routeToUserPage()\"\n />\n <div style=\"font-size: 15px;\">{{currentUser?.email}}</div>\n </div>\n <div style=\"margin-top: 15px;\">\n <div *ngFor=\"let item of menuItems\" [style]=\"item.showSeparator ? 'margin-top: 5px;' : ''\">\n <div *ngIf=\"item.showSeparator\" class=\"gray-separator\"></div>\n <div (click)=\"item.onClick()\" class=\"hover-card\" style=\"display: flex; align-items: center; gap: 8px; margin-top: 5px;\">\n <i \n class=\"pi pi-fw {{item.icon}}\" \n style=\"font-size: 16px; position: relative;\"\n >\n <span *ngIf=\"item.showNotificationBadge && unreadNotificationsCount != 0\" class=\"badge\"></span>\n </i>\n <div style=\"font-size: 15px;\"> {{item.label}} </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\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>", styles: [".side-menu-profile-dialog{right:26px;top:60px}.top-menu-profile-dialog{right:0;top:40px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i7.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: BadgeModule }, { kind: "directive", type: i8.BadgeDirective, selector: "[pBadge]", inputs: ["badgeDisabled", "badgeSize", "size", "severity", "value", "badgeStyle", "badgeStyleClass"] }, { kind: "component", type: SpiderlyButtonComponent, selector: "spiderly-button", inputs: ["type"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
4158
3831
  }
4159
3832
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: ProfileAvatarComponent, decorators: [{
4160
3833
  type: Component,
@@ -4165,8 +3838,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
4165
3838
  BadgeModule,
4166
3839
  SpiderlyButtonComponent,
4167
3840
  TranslocoDirective,
4168
- ], template: "<ng-container *transloco=\"let t\">\r\n <div\r\n *ngIf=\"this.currentUser != null\"\r\n #topbarmenu\r\n >\r\n <div\r\n #topbarprofiledropdownmenubutton\r\n (click)=\"layoutService.showProfileDropdownSidebar()\"\r\n >\r\n <p-avatar\r\n *ngIf=\"showProfileIcon\"\r\n [label]=\"avatarLabel\"\r\n [style]=\"{ 'background-color': 'var(--p-primary-color)', 'color': '#fff', 'cursor': 'pointer', 'width': '34px', 'height': '34px', 'font-size': '21px' }\"\r\n pBadge \r\n [badgeStyleClass]=\"'p-badge-danger'\"\r\n [badgeDisabled]=\"unreadNotificationsCount == 0 || unreadNotificationsCount == null\"\r\n [value]=\"unreadNotificationsCount\"\r\n />\r\n </div>\r\n <div\r\n #topbarprofiledropdownmenu\r\n (document:click)=\"onDocumentClick($event)\"\r\n >\r\n <div \r\n *ngIf=\"layoutService.state.profileDropdownSidebarVisible\" \r\n style=\"width: 280px; position: absolute; padding: 15px; background: var(--p-content-background);\" \r\n class=\"card\"\r\n [ngClass]=\"{\r\n 'side-menu-profile-dialog': isSideMenuLayout,\r\n 'top-menu-profile-dialog': !isSideMenuLayout,\r\n }\r\n \"\r\n >\r\n <div style=\"display: flex; flex-direction: column; justify-content: center; text-align: center; gap: 10px;\">\r\n <p-avatar\r\n [label]=\"avatarLabel\"\r\n size=\"xlarge\"\r\n [style]=\"{ 'background-color': 'var(--p-primary-color)', 'color': '#fff', 'margin': 'auto', 'cursor': routeOnLargeProfileAvatarClick ? 'pointer' : '' }\"\r\n (click)=\"routeToUserPage()\"\r\n />\r\n <div style=\"font-size: 15px;\">{{currentUser?.email}}</div>\r\n </div>\r\n <div style=\"margin-top: 15px;\">\r\n <div *ngFor=\"let item of menuItems\" [style]=\"item.showSeparator ? 'margin-top: 5px;' : ''\">\r\n <div *ngIf=\"item.showSeparator\" class=\"gray-separator\"></div>\r\n <div (click)=\"item.onClick()\" class=\"hover-card\" style=\"display: flex; align-items: center; gap: 8px; margin-top: 5px;\">\r\n <i \r\n class=\"pi pi-fw {{item.icon}}\" \r\n style=\"font-size: 16px; position: relative;\"\r\n >\r\n <span *ngIf=\"item.showNotificationBadge && unreadNotificationsCount != 0\" class=\"badge\"></span>\r\n </i>\r\n <div style=\"font-size: 15px;\"> {{item.label}} </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"this.currentUser == null && this.showLoginButton\">\r\n <spiderly-button \r\n [label]=\"t('Login')\" \r\n (onClick)=\"loginButtonClick()\" \r\n icon=\"pi pi-sign-in\" \r\n [outlined]=\"loginButtonOutlined\" \r\n [severity]=\"loginButtonSeverity\"\r\n [size]=\"loginButtonSize\"\r\n ></spiderly-button>\r\n </div>\r\n</ng-container>", styles: [".side-menu-profile-dialog{right:26px;top:60px}.top-menu-profile-dialog{right:0;top:40px}\n"] }]
4169
- }], ctorParameters: () => [{ type: LayoutBaseService }, { type: AuthBaseService }, { type: i3$2.Router }, { type: i1.TranslocoService }, { type: ConfigBaseService }], propDecorators: { isSideMenuLayout: [{
3841
+ ], template: "<ng-container *transloco=\"let t\">\n <div\n *ngIf=\"this.currentUser != null\"\n #topbarmenu\n >\n <div\n #topbarprofiledropdownmenubutton\n (click)=\"layoutService.showProfileDropdownSidebar()\"\n >\n <p-avatar\n *ngIf=\"showProfileIcon\"\n [label]=\"avatarLabel\"\n [style]=\"{ 'background-color': 'var(--p-primary-color)', 'color': '#fff', 'cursor': 'pointer', 'width': '34px', 'height': '34px', 'font-size': '21px' }\"\n pBadge \n [badgeStyleClass]=\"'p-badge-danger'\"\n [badgeDisabled]=\"unreadNotificationsCount == 0 || unreadNotificationsCount == null\"\n [value]=\"unreadNotificationsCount\"\n />\n </div>\n <div\n #topbarprofiledropdownmenu\n (document:click)=\"onDocumentClick($event)\"\n >\n <div \n *ngIf=\"layoutService.state.profileDropdownSidebarVisible\" \n style=\"width: 280px; position: absolute; padding: 15px; background: var(--p-content-background);\" \n class=\"card\"\n [ngClass]=\"{\n 'side-menu-profile-dialog': isSideMenuLayout,\n 'top-menu-profile-dialog': !isSideMenuLayout,\n }\n \"\n >\n <div style=\"display: flex; flex-direction: column; justify-content: center; text-align: center; gap: 10px;\">\n <p-avatar\n [label]=\"avatarLabel\"\n size=\"xlarge\"\n [style]=\"{ 'background-color': 'var(--p-primary-color)', 'color': '#fff', 'margin': 'auto', 'cursor': routeOnLargeProfileAvatarClick ? 'pointer' : '' }\"\n (click)=\"routeToUserPage()\"\n />\n <div style=\"font-size: 15px;\">{{currentUser?.email}}</div>\n </div>\n <div style=\"margin-top: 15px;\">\n <div *ngFor=\"let item of menuItems\" [style]=\"item.showSeparator ? 'margin-top: 5px;' : ''\">\n <div *ngIf=\"item.showSeparator\" class=\"gray-separator\"></div>\n <div (click)=\"item.onClick()\" class=\"hover-card\" style=\"display: flex; align-items: center; gap: 8px; margin-top: 5px;\">\n <i \n class=\"pi pi-fw {{item.icon}}\" \n style=\"font-size: 16px; position: relative;\"\n >\n <span *ngIf=\"item.showNotificationBadge && unreadNotificationsCount != 0\" class=\"badge\"></span>\n </i>\n <div style=\"font-size: 15px;\"> {{item.label}} </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\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>", styles: [".side-menu-profile-dialog{right:26px;top:60px}.top-menu-profile-dialog{right:0;top:40px}\n"] }]
3842
+ }], ctorParameters: () => [{ type: LayoutServiceBase }, { type: AuthServiceBase }, { type: i3$2.Router }, { type: i1.TranslocoService }, { type: ConfigServiceBase }], propDecorators: { isSideMenuLayout: [{
4170
3843
  type: Input
4171
3844
  }], routeOnLargeProfileAvatarClick: [{
4172
3845
  type: Input
@@ -4207,8 +3880,8 @@ class SideMenuTopBarComponent {
4207
3880
  this.layoutService.state.profileDropdownSidebarVisible = false;
4208
3881
  });
4209
3882
  }
4210
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SideMenuTopBarComponent, deps: [{ token: LayoutBaseService }, { token: i3$2.Router }, { token: ConfigBaseService }, { token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
4211
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SideMenuTopBarComponent, isStandalone: true, selector: "spiderly-sidemenu-topbar", viewQueries: [{ propertyName: "menuButton", first: true, predicate: ["menubutton"], descendants: true }], ngImport: i0, template: "<div class=\"layout-topbar\">\r\n <a class=\"layout-topbar-logo\" routerLink=\"/\">\r\n <span>{{companyName?.toLocaleUpperCase()}}</span>\r\n </a>\r\n\r\n <button\r\n #menubutton\r\n class=\"p-link layout-menu-button layout-topbar-button\"\r\n (click)=\"layoutService.onMenuToggle()\"\r\n >\r\n <i class=\"pi pi-bars\"></i>\r\n </button>\r\n\r\n <div class=\"profile-button\">\r\n <spiderly-profile-avatar\r\n ></spiderly-profile-avatar>\r\n </div>\r\n\r\n</div>\r\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "ngmodule", type: BadgeModule }, { kind: "component", type: ProfileAvatarComponent, selector: "spiderly-profile-avatar", inputs: ["isSideMenuLayout", "routeOnLargeProfileAvatarClick", "showLoginButton", "routeToLoginPage", "loginButtonOutlined", "loginButtonSeverity", "loginButtonSize", "menuItems"], outputs: ["onLoginButtonClick"] }] }); }
3883
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SideMenuTopBarComponent, deps: [{ token: LayoutServiceBase }, { token: i3$2.Router }, { token: ConfigServiceBase }, { token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
3884
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SideMenuTopBarComponent, isStandalone: true, selector: "spiderly-sidemenu-topbar", viewQueries: [{ propertyName: "menuButton", first: true, predicate: ["menubutton"], descendants: true }], ngImport: i0, template: "<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\n ></spiderly-profile-avatar>\n </div>\n\n</div>\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "ngmodule", type: BadgeModule }, { kind: "component", type: ProfileAvatarComponent, selector: "spiderly-profile-avatar", inputs: ["isSideMenuLayout", "routeOnLargeProfileAvatarClick", "showLoginButton", "routeToLoginPage", "loginButtonOutlined", "loginButtonSeverity", "loginButtonSize", "menuItems"], outputs: ["onLoginButtonClick"] }] }); }
4212
3885
  }
4213
3886
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SideMenuTopBarComponent, decorators: [{
4214
3887
  type: Component,
@@ -4218,8 +3891,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
4218
3891
  AvatarModule,
4219
3892
  BadgeModule,
4220
3893
  ProfileAvatarComponent,
4221
- ], template: "<div class=\"layout-topbar\">\r\n <a class=\"layout-topbar-logo\" routerLink=\"/\">\r\n <span>{{companyName?.toLocaleUpperCase()}}</span>\r\n </a>\r\n\r\n <button\r\n #menubutton\r\n class=\"p-link layout-menu-button layout-topbar-button\"\r\n (click)=\"layoutService.onMenuToggle()\"\r\n >\r\n <i class=\"pi pi-bars\"></i>\r\n </button>\r\n\r\n <div class=\"profile-button\">\r\n <spiderly-profile-avatar\r\n ></spiderly-profile-avatar>\r\n </div>\r\n\r\n</div>\r\n " }]
4222
- }], ctorParameters: () => [{ type: LayoutBaseService }, { type: i3$2.Router }, { type: ConfigBaseService }, { type: i1.TranslocoService }], propDecorators: { menuButton: [{
3894
+ ], template: "<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\n ></spiderly-profile-avatar>\n </div>\n\n</div>\n " }]
3895
+ }], ctorParameters: () => [{ type: LayoutServiceBase }, { type: i3$2.Router }, { type: ConfigServiceBase }, { type: i1.TranslocoService }], propDecorators: { menuButton: [{
4223
3896
  type: ViewChild,
4224
3897
  args: ['menubutton']
4225
3898
  }] } });
@@ -4258,8 +3931,8 @@ class TopBarComponent {
4258
3931
  this.permissionSubscription.unsubscribe();
4259
3932
  }
4260
3933
  }
4261
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TopBarComponent, deps: [{ token: AuthBaseService }, { token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
4262
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: TopBarComponent, isStandalone: true, selector: "spiderly-topbar", inputs: { menu: "menu", showHoverBgOnRootItems: "showHoverBgOnRootItems" }, ngImport: i0, template: "<div class=\"topbar-wrapper\">\r\n <nav class=\"topbar {{showHoverBgOnRootItems ? '' : 'show-hover-bg-on-root-items'}}\">\r\n <p-menubar [model]=\"menu\" [style]=\"{ border: '0' }\">\r\n <ng-template #start>\r\n <img style=\"margin-left: 11px; cursor: pointer;\" width=\"45\" height=\"45\" routerLink=\"/\" [src]=\"logoPath\" alt=\"Logo\">\r\n </ng-template>\r\n <ng-template #end>\r\n <div style=\"margin-right: 11px; display: flex; gap: 10px; align-items: center; position: relative;\">\r\n <div>\r\n <ng-content select=\"[ACTIONS]\"></ng-content>\r\n </div>\r\n <spiderly-profile-avatar [isSideMenuLayout]=\"false\"></spiderly-profile-avatar>\r\n </div>\r\n </ng-template>\r\n </p-menubar>\r\n </nav>\r\n</div>", styles: [".topbar-wrapper{background-color:var(--p-content-background);width:100%;border-bottom:1px solid var(--p-content-border-color);box-shadow:0 4px 6px #0000001a;position:sticky;top:0;left:0;z-index:1000}.topbar{max-width:1100px;margin:auto}::ng-deep .show-hover-bg-on-root-items .p-menubar-root-list>.p-menubar-item>.p-menubar-item-content{background-color:transparent!important}::ng-deep .p-menubar-item-link{background-color:transparent!important;padding:10px!important;font-size:15px!important}::ng-deep .p-menubar-item-link .pi{font-size:15px}::ng-deep .p-menubar-button{width:35px!important;height:35px!important}::ng-deep .p-menubar-button .p-icon{width:16px;height:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MenubarModule }, { kind: "component", type: i4$a.Menubar, selector: "p-menubar", inputs: ["model", "style", "styleClass", "autoZIndex", "baseZIndex", "autoDisplay", "autoHide", "breakpoint", "autoHideDelay", "id", "ariaLabel", "ariaLabelledBy"], outputs: ["onFocus", "onBlur"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: ProfileAvatarComponent, selector: "spiderly-profile-avatar", inputs: ["isSideMenuLayout", "routeOnLargeProfileAvatarClick", "showLoginButton", "routeToLoginPage", "loginButtonOutlined", "loginButtonSeverity", "loginButtonSize", "menuItems"], outputs: ["onLoginButtonClick"] }] }); }
3934
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TopBarComponent, deps: [{ token: AuthServiceBase }, { token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Component }); }
3935
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: TopBarComponent, isStandalone: true, selector: "spiderly-topbar", inputs: { menu: "menu", showHoverBgOnRootItems: "showHoverBgOnRootItems" }, ngImport: i0, template: "<div class=\"topbar-wrapper\">\n <nav class=\"topbar {{showHoverBgOnRootItems ? '' : 'show-hover-bg-on-root-items'}}\">\n <p-menubar [model]=\"menu\" [style]=\"{ border: '0' }\">\n <ng-template #start>\n <img style=\"margin-left: 11px; cursor: pointer;\" width=\"45\" height=\"45\" routerLink=\"/\" [src]=\"logoPath\" alt=\"Logo\">\n </ng-template>\n <ng-template #end>\n <div style=\"margin-right: 11px; display: flex; gap: 10px; align-items: center; position: relative;\">\n <div>\n <ng-content select=\"[ACTIONS]\"></ng-content>\n </div>\n <spiderly-profile-avatar [isSideMenuLayout]=\"false\"></spiderly-profile-avatar>\n </div>\n </ng-template>\n </p-menubar>\n </nav>\n</div>", styles: [".topbar-wrapper{background-color:var(--p-content-background);width:100%;border-bottom:1px solid var(--p-content-border-color);box-shadow:0 4px 6px #0000001a;position:sticky;top:0;left:0;z-index:1000}.topbar{max-width:1100px;margin:auto}::ng-deep .show-hover-bg-on-root-items .p-menubar-root-list>.p-menubar-item>.p-menubar-item-content{background-color:transparent!important}::ng-deep .p-menubar-item-link{background-color:transparent!important;padding:10px!important;font-size:15px!important}::ng-deep .p-menubar-item-link .pi{font-size:15px}::ng-deep .p-menubar-button{width:35px!important;height:35px!important}::ng-deep .p-menubar-button .p-icon{width:16px;height:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MenubarModule }, { kind: "component", type: i4$a.Menubar, selector: "p-menubar", inputs: ["model", "style", "styleClass", "autoZIndex", "baseZIndex", "autoDisplay", "autoHide", "breakpoint", "autoHideDelay", "id", "ariaLabel", "ariaLabelledBy"], outputs: ["onFocus", "onBlur"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: ProfileAvatarComponent, selector: "spiderly-profile-avatar", inputs: ["isSideMenuLayout", "routeOnLargeProfileAvatarClick", "showLoginButton", "routeToLoginPage", "loginButtonOutlined", "loginButtonSeverity", "loginButtonSize", "menuItems"], outputs: ["onLoginButtonClick"] }] }); }
4263
3936
  }
4264
3937
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: TopBarComponent, decorators: [{
4265
3938
  type: Component,
@@ -4269,8 +3942,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
4269
3942
  MenubarModule,
4270
3943
  AvatarModule,
4271
3944
  ProfileAvatarComponent,
4272
- ], template: "<div class=\"topbar-wrapper\">\r\n <nav class=\"topbar {{showHoverBgOnRootItems ? '' : 'show-hover-bg-on-root-items'}}\">\r\n <p-menubar [model]=\"menu\" [style]=\"{ border: '0' }\">\r\n <ng-template #start>\r\n <img style=\"margin-left: 11px; cursor: pointer;\" width=\"45\" height=\"45\" routerLink=\"/\" [src]=\"logoPath\" alt=\"Logo\">\r\n </ng-template>\r\n <ng-template #end>\r\n <div style=\"margin-right: 11px; display: flex; gap: 10px; align-items: center; position: relative;\">\r\n <div>\r\n <ng-content select=\"[ACTIONS]\"></ng-content>\r\n </div>\r\n <spiderly-profile-avatar [isSideMenuLayout]=\"false\"></spiderly-profile-avatar>\r\n </div>\r\n </ng-template>\r\n </p-menubar>\r\n </nav>\r\n</div>", styles: [".topbar-wrapper{background-color:var(--p-content-background);width:100%;border-bottom:1px solid var(--p-content-border-color);box-shadow:0 4px 6px #0000001a;position:sticky;top:0;left:0;z-index:1000}.topbar{max-width:1100px;margin:auto}::ng-deep .show-hover-bg-on-root-items .p-menubar-root-list>.p-menubar-item>.p-menubar-item-content{background-color:transparent!important}::ng-deep .p-menubar-item-link{background-color:transparent!important;padding:10px!important;font-size:15px!important}::ng-deep .p-menubar-item-link .pi{font-size:15px}::ng-deep .p-menubar-button{width:35px!important;height:35px!important}::ng-deep .p-menubar-button .p-icon{width:16px;height:16px}\n"] }]
4273
- }], ctorParameters: () => [{ type: AuthBaseService }, { type: ConfigBaseService }], propDecorators: { menu: [{
3945
+ ], template: "<div class=\"topbar-wrapper\">\n <nav class=\"topbar {{showHoverBgOnRootItems ? '' : 'show-hover-bg-on-root-items'}}\">\n <p-menubar [model]=\"menu\" [style]=\"{ border: '0' }\">\n <ng-template #start>\n <img style=\"margin-left: 11px; cursor: pointer;\" width=\"45\" height=\"45\" routerLink=\"/\" [src]=\"logoPath\" alt=\"Logo\">\n </ng-template>\n <ng-template #end>\n <div style=\"margin-right: 11px; display: flex; gap: 10px; align-items: center; position: relative;\">\n <div>\n <ng-content select=\"[ACTIONS]\"></ng-content>\n </div>\n <spiderly-profile-avatar [isSideMenuLayout]=\"false\"></spiderly-profile-avatar>\n </div>\n </ng-template>\n </p-menubar>\n </nav>\n</div>", styles: [".topbar-wrapper{background-color:var(--p-content-background);width:100%;border-bottom:1px solid var(--p-content-border-color);box-shadow:0 4px 6px #0000001a;position:sticky;top:0;left:0;z-index:1000}.topbar{max-width:1100px;margin:auto}::ng-deep .show-hover-bg-on-root-items .p-menubar-root-list>.p-menubar-item>.p-menubar-item-content{background-color:transparent!important}::ng-deep .p-menubar-item-link{background-color:transparent!important;padding:10px!important;font-size:15px!important}::ng-deep .p-menubar-item-link .pi{font-size:15px}::ng-deep .p-menubar-button{width:35px!important;height:35px!important}::ng-deep .p-menubar-button .p-icon{width:16px;height:16px}\n"] }]
3946
+ }], ctorParameters: () => [{ type: AuthServiceBase }, { type: ConfigServiceBase }], propDecorators: { menu: [{
4274
3947
  type: Input
4275
3948
  }], showHoverBgOnRootItems: [{
4276
3949
  type: Input
@@ -4392,8 +4065,8 @@ class SpiderlyLayoutComponent {
4392
4065
  }
4393
4066
  this.onAfterNgDestroy();
4394
4067
  }
4395
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyLayoutComponent, deps: [{ token: LayoutBaseService }, { token: i0.Renderer2 }, { token: i3$2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
4396
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyLayoutComponent, isStandalone: true, selector: "spiderly-layout", inputs: { menu: "menu", isSideMenuLayout: "isSideMenuLayout", showHoverBgOnRootTopMenuItems: "showHoverBgOnRootTopMenuItems", maxWidth: "maxWidth" }, viewQueries: [{ propertyName: "appSidebar", first: true, predicate: AppSidebarComponent, descendants: true }, { propertyName: "sidemenuTopbar", first: true, predicate: SideMenuTopBarComponent, descendants: true }, { propertyName: "topbarmenu", first: true, predicate: ["topbarmenu"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"isSideMenuLayout\" class=\"layout-wrapper\" [ngClass]=\"containerClass\">\r\n <spiderly-sidemenu-topbar></spiderly-sidemenu-topbar>\r\n <div class=\"layout-sidebar\">\r\n <sidebar [menu]=\"sideMenu\"></sidebar>\r\n </div>\r\n <div class=\"layout-main-container\">\r\n <div class=\"layout-main\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <footer></footer>\r\n </div>\r\n <div class=\"layout-mask\"></div>\r\n</div>\r\n\r\n<div *ngIf=\"isSideMenuLayout === false\">\r\n <spiderly-topbar [menu]=\"topMenu\" [showHoverBgOnRootItems]=\"showHoverBgOnRootTopMenuItems\">\r\n <ng-content ACTIONS select=\"[ACTIONS]\"></ng-content>\r\n </spiderly-topbar>\r\n <main [style.max-width]=\"maxWidth\" style=\"margin: auto; padding: 18px;\">\r\n <router-outlet></router-outlet>\r\n </main>\r\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: AppSidebarComponent, selector: "sidebar", inputs: ["menu"] }, { kind: "component", type: FooterComponent, selector: "footer" }, { kind: "component", type: SideMenuTopBarComponent, selector: "spiderly-sidemenu-topbar" }, { kind: "component", type: TopBarComponent, selector: "spiderly-topbar", inputs: ["menu", "showHoverBgOnRootItems"] }] }); }
4068
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyLayoutComponent, deps: [{ token: LayoutServiceBase }, { token: i0.Renderer2 }, { token: i3$2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
4069
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: SpiderlyLayoutComponent, isStandalone: true, selector: "spiderly-layout", inputs: { menu: "menu", isSideMenuLayout: "isSideMenuLayout", showHoverBgOnRootTopMenuItems: "showHoverBgOnRootTopMenuItems", maxWidth: "maxWidth" }, viewQueries: [{ propertyName: "appSidebar", first: true, predicate: AppSidebarComponent, descendants: true }, { propertyName: "sidemenuTopbar", first: true, predicate: SideMenuTopBarComponent, descendants: true }, { propertyName: "topbarmenu", first: true, predicate: ["topbarmenu"], descendants: true }], ngImport: i0, template: "<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 [menu]=\"topMenu\" [showHoverBgOnRootItems]=\"showHoverBgOnRootTopMenuItems\">\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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: AppSidebarComponent, selector: "sidebar", inputs: ["menu"] }, { kind: "component", type: FooterComponent, selector: "footer" }, { kind: "component", type: SideMenuTopBarComponent, selector: "spiderly-sidemenu-topbar" }, { kind: "component", type: TopBarComponent, selector: "spiderly-topbar", inputs: ["menu", "showHoverBgOnRootItems"] }] }); }
4397
4070
  }
4398
4071
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyLayoutComponent, decorators: [{
4399
4072
  type: Component,
@@ -4404,8 +4077,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
4404
4077
  FooterComponent,
4405
4078
  SideMenuTopBarComponent,
4406
4079
  TopBarComponent,
4407
- ], template: "<div *ngIf=\"isSideMenuLayout\" class=\"layout-wrapper\" [ngClass]=\"containerClass\">\r\n <spiderly-sidemenu-topbar></spiderly-sidemenu-topbar>\r\n <div class=\"layout-sidebar\">\r\n <sidebar [menu]=\"sideMenu\"></sidebar>\r\n </div>\r\n <div class=\"layout-main-container\">\r\n <div class=\"layout-main\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <footer></footer>\r\n </div>\r\n <div class=\"layout-mask\"></div>\r\n</div>\r\n\r\n<div *ngIf=\"isSideMenuLayout === false\">\r\n <spiderly-topbar [menu]=\"topMenu\" [showHoverBgOnRootItems]=\"showHoverBgOnRootTopMenuItems\">\r\n <ng-content ACTIONS select=\"[ACTIONS]\"></ng-content>\r\n </spiderly-topbar>\r\n <main [style.max-width]=\"maxWidth\" style=\"margin: auto; padding: 18px;\">\r\n <router-outlet></router-outlet>\r\n </main>\r\n</div>" }]
4408
- }], ctorParameters: () => [{ type: LayoutBaseService }, { type: i0.Renderer2 }, { type: i3$2.Router }], propDecorators: { menu: [{
4080
+ ], template: "<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 [menu]=\"topMenu\" [showHoverBgOnRootItems]=\"showHoverBgOnRootTopMenuItems\">\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>" }]
4081
+ }], ctorParameters: () => [{ type: LayoutServiceBase }, { type: i0.Renderer2 }, { type: i3$2.Router }], propDecorators: { menu: [{
4409
4082
  type: Input
4410
4083
  }], isSideMenuLayout: [{
4411
4084
  type: Input
@@ -4471,6 +4144,23 @@ class MimeTypes {
4471
4144
  }
4472
4145
  }
4473
4146
 
4147
+ class Namebook extends BaseEntity {
4148
+ constructor({ id, displayName, } = {}) {
4149
+ super();
4150
+ this.id = id;
4151
+ this.displayName = displayName;
4152
+ }
4153
+ static { this.schema = {
4154
+ id: {
4155
+ type: 'any',
4156
+ },
4157
+ displayName: {
4158
+ type: 'string',
4159
+ },
4160
+ }; }
4161
+ static { this.typeName = 'Namebook'; }
4162
+ }
4163
+
4474
4164
  class PrimengOption extends BaseEntity {
4475
4165
  constructor({ label, code, } = {}) {
4476
4166
  super();
@@ -4570,6 +4260,14 @@ class FilterRule {
4570
4260
  class PaginatedResult {
4571
4261
  }
4572
4262
 
4263
+ class IsAuthorizedForSaveEvent extends BaseEntity {
4264
+ constructor({ isAuthorizedForSave, } = {}) {
4265
+ super();
4266
+ this.isAuthorizedForSave = isAuthorizedForSave;
4267
+ }
4268
+ static { this.typeName = 'IsAuthorizedForSaveEvent'; }
4269
+ }
4270
+
4573
4271
  var SecurityPermissionCodes;
4574
4272
  (function (SecurityPermissionCodes) {
4575
4273
  SecurityPermissionCodes["ReadUser"] = "ReadUser";
@@ -4616,7 +4314,7 @@ class AuthGuard {
4616
4314
  }
4617
4315
  }));
4618
4316
  }
4619
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthGuard, deps: [{ token: AuthBaseService }, { token: i3$2.Router }, { token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4317
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthGuard, deps: [{ token: AuthServiceBase }, { token: i3$2.Router }, { token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Injectable }); }
4620
4318
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthGuard, providedIn: 'root' }); }
4621
4319
  }
4622
4320
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AuthGuard, decorators: [{
@@ -4624,7 +4322,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
4624
4322
  args: [{
4625
4323
  providedIn: 'root',
4626
4324
  }]
4627
- }], ctorParameters: () => [{ type: AuthBaseService }, { type: i3$2.Router }, { type: ConfigBaseService }] });
4325
+ }], ctorParameters: () => [{ type: AuthServiceBase }, { type: i3$2.Router }, { type: ConfigServiceBase }] });
4628
4326
 
4629
4327
  class NotAuthGuard {
4630
4328
  constructor(authService) {
@@ -4644,7 +4342,7 @@ class NotAuthGuard {
4644
4342
  }
4645
4343
  }));
4646
4344
  }
4647
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: NotAuthGuard, deps: [{ token: AuthBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4345
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: NotAuthGuard, deps: [{ token: AuthServiceBase }], target: i0.ɵɵFactoryTarget.Injectable }); }
4648
4346
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: NotAuthGuard, providedIn: 'root' }); }
4649
4347
  }
4650
4348
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: NotAuthGuard, decorators: [{
@@ -4652,7 +4350,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
4652
4350
  args: [{
4653
4351
  providedIn: 'root',
4654
4352
  }]
4655
- }], ctorParameters: () => [{ type: AuthBaseService }] });
4353
+ }], ctorParameters: () => [{ type: AuthServiceBase }] });
4656
4354
 
4657
4355
  class SpiderlyErrorHandler {
4658
4356
  constructor(messageService, translocoService, config) {
@@ -4668,7 +4366,7 @@ class SpiderlyErrorHandler {
4668
4366
  this.messageService.errorMessage(this.translocoService.translate('UnexpectedErrorDetails'), this.translocoService.translate('UnexpectedErrorTitle'));
4669
4367
  }
4670
4368
  }
4671
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyErrorHandler, deps: [{ token: SpiderlyMessageService }, { token: i1.TranslocoService }, { token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4369
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyErrorHandler, deps: [{ token: SpiderlyMessageService }, { token: i1.TranslocoService }, { token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Injectable }); }
4672
4370
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyErrorHandler, providedIn: 'root' }); }
4673
4371
  }
4674
4372
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyErrorHandler, decorators: [{
@@ -4676,7 +4374,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
4676
4374
  args: [{
4677
4375
  providedIn: 'root'
4678
4376
  }]
4679
- }], ctorParameters: () => [{ type: SpiderlyMessageService }, { type: i1.TranslocoService }, { type: ConfigBaseService }] });
4377
+ }], ctorParameters: () => [{ type: SpiderlyMessageService }, { type: i1.TranslocoService }, { type: ConfigServiceBase }] });
4680
4378
 
4681
4379
  const httpLoadingInterceptor = (req, next) => {
4682
4380
  const spinner = inject(NgxSpinnerService);
@@ -4751,7 +4449,7 @@ const convertToDate = (object, parent, key) => {
4751
4449
  };
4752
4450
 
4753
4451
  const jwtInterceptor = (req, next) => {
4754
- const config = inject(ConfigBaseService);
4452
+ const config = inject(ConfigServiceBase);
4755
4453
  const platformId = inject(PLATFORM_ID);
4756
4454
  let accessToken = null;
4757
4455
  if (isPlatformBrowser(platformId)) {
@@ -4769,7 +4467,8 @@ const jwtInterceptor = (req, next) => {
4769
4467
  const unauthorizedInterceptor = (req, next) => {
4770
4468
  const messageService = inject(SpiderlyMessageService);
4771
4469
  const translocoService = inject(TranslocoService);
4772
- const config = inject(ConfigBaseService);
4470
+ const config = inject(ConfigServiceBase);
4471
+ const authService = inject(AuthServiceBase);
4773
4472
  const handleAuthError = (err, request) => {
4774
4473
  if (!config.production) {
4775
4474
  console.error(err);
@@ -4800,13 +4499,13 @@ const unauthorizedInterceptor = (req, next) => {
4800
4499
  return of(err.message);
4801
4500
  }
4802
4501
  else if (err.status == 419) { // Access token expired
4502
+ authService.clearLocalStorage();
4803
4503
  return of(err.message);
4804
4504
  }
4805
4505
  else {
4806
4506
  messageService.errorMessage(translocoService.translate('UnexpectedErrorDetails'), translocoService.translate('UnexpectedErrorTitle'));
4807
4507
  return of(err.message);
4808
4508
  }
4809
- return throwError(err);
4810
4509
  };
4811
4510
  return next(req).pipe(catchError((err) => {
4812
4511
  return handleAuthError(err, req);
@@ -4832,7 +4531,7 @@ class SpiderlyTranslocoLoader {
4832
4531
  getTranslation(lang) {
4833
4532
  return this.http.get(`${this.config.frontendUrl}/assets/i18n/${lang}.json`);
4834
4533
  }
4835
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyTranslocoLoader, deps: [{ token: i1$4.HttpClient }, { token: ConfigBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4534
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyTranslocoLoader, deps: [{ token: i1$3.HttpClient }, { token: ConfigServiceBase }], target: i0.ɵɵFactoryTarget.Injectable }); }
4836
4535
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyTranslocoLoader, providedIn: 'root' }); }
4837
4536
  }
4838
4537
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: SpiderlyTranslocoLoader, decorators: [{
@@ -4840,7 +4539,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
4840
4539
  args: [{
4841
4540
  providedIn: 'root'
4842
4541
  }]
4843
- }], ctorParameters: () => [{ type: i1$4.HttpClient }, { type: ConfigBaseService }] });
4542
+ }], ctorParameters: () => [{ type: i1$3.HttpClient }, { type: ConfigServiceBase }] });
4844
4543
 
4845
4544
  class SpiderlyTemplateTypeDirective {
4846
4545
  static ngTemplateContextGuard(dir, ctx) {
@@ -4866,5 +4565,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImpo
4866
4565
  * Generated bundle index. Do not edit.
4867
4566
  */
4868
4567
 
4869
- export { Action, AllClickEvent, ApiSecurityService, AppSidebarComponent, AuthBaseService, AuthGuard, AuthResult, BaseAutocompleteControl, BaseControl, BaseDropdownControl, BaseEntity, BaseFormCopy, BaseFormService, CardSkeletonComponent, Codebook, Column, ConfigBaseService, ExternalProvider, Filter, FilterRule, FilterSortMeta, FooterComponent, GoogleButtonComponent, IndexCardComponent, InfoCardComponent, InitCompanyAuthDialogDetails, InitTopBarData, IsAuthorizedForSaveEvent, LastMenuIconIndexClicked, LayoutBaseService, LazyLoadSelectedIdsResult, Login, LoginComponent, LoginVerificationComponent, LoginVerificationToken, MatchModeCodes, MenuChangeEvent, MenuitemComponent, MimeTypes, Namebook, NotAuthGuard, NotFoundComponent, PROPS_KEY, PaginatedResult, PanelBodyComponent, PanelFooterComponent, PanelHeaderComponent, Permission, PermissionSaveBody, PrimengOption, ProfileAvatarComponent, ReflectProp, RefreshTokenRequest, RequiredComponent, Role, RoleBaseDetailsComponent, RoleMainUIForm, RolePermission, RolePermissionSaveBody, RoleSaveBody, RowClickEvent, SecurityPermissionCodes, SideMenuTopBarComponent, SidebarMenuComponent, SimpleSaveResult, SpiderlyAutocompleteComponent, SpiderlyButtonBaseComponent, SpiderlyButtonComponent, SpiderlyCalendarComponent, SpiderlyCardComponent, SpiderlyCheckboxComponent, SpiderlyColorPickerComponent, SpiderlyControlsModule, SpiderlyDataTableComponent, SpiderlyDataViewComponent, SpiderlyDeleteConfirmationComponent, SpiderlyDropdownComponent, SpiderlyEditorComponent, SpiderlyErrorHandler, SpiderlyFileComponent, SpiderlyFileSelectEvent, SpiderlyFormArray, SpiderlyFormControl, SpiderlyFormGroup, SpiderlyLayoutComponent, SpiderlyMessageService, SpiderlyMultiAutocompleteComponent, SpiderlyMultiSelectComponent, SpiderlyNumberComponent, SpiderlyPanelComponent, SpiderlyPanelsModule, SpiderlyPasswordComponent, SpiderlyReturnButtonComponent, SpiderlySplitButtonComponent, SpiderlyTab, SpiderlyTemplateTypeDirective, SpiderlyTextareaComponent, SpiderlyTextboxComponent, SpiderlyTranslocoLoader, TopBarComponent, TranslateLabelsAbstractService, UserBase, UserRole, UserRoleSaveBody, ValidatorAbstractService, VerificationTokenRequest, VerificationTypeCodes, VerificationWrapperComponent, adjustColor, authInitializer, capitalizeFirstChar, createFakeGoogleWrapper, deleteAction, exportListToExcel, firstCharToUpper, getFileNameFromContentDisposition, getHtmlImgDisplayString64, getMimeTypeForFileName, getMonth, getParentUrl, getPrimengAutocompleteCodebookOptions, getPrimengAutocompleteNamebookOptions, getPrimengDropdownCodebookOptions, getPrimengDropdownNamebookOptions, httpLoadingInterceptor, isExcelFileType, isImageFileType, isNullOrEmpty, jsonHttpInterceptor, jwtInterceptor, kebabToTitleCase, nameOf, nameof, primitiveArrayTypes, pushAction, selectedTab, singleOrDefault, splitPascalCase, toCommaSeparatedString, unauthorizedInterceptor, validatePrecisionScale };
4568
+ export { Action, AllClickEvent, ApiSecurityService, AppSidebarComponent, AuthGuard, AuthResult, AuthServiceBase, BaseAutocompleteControl, BaseControl, BaseDropdownControl, BaseEntity, BaseFormCopy, BaseFormService, CardSkeletonComponent, Codebook, Column, ConfigServiceBase, ExternalProvider, Filter, FilterRule, FilterSortMeta, FooterComponent, GoogleButtonComponent, IndexCardComponent, InfoCardComponent, InitCompanyAuthDialogDetails, InitTopBarData, IsAuthorizedForSaveEvent, LastMenuIconIndexClicked, LayoutServiceBase, LazyLoadSelectedIdsResult, Login, LoginComponent, LoginVerificationComponent, LoginVerificationToken, MatchModeCodes, MenuChangeEvent, MenuitemComponent, MimeTypes, Namebook, NotAuthGuard, NotFoundComponent, PROPS_KEY, PaginatedResult, PanelBodyComponent, PanelFooterComponent, PanelHeaderComponent, PrimengOption, ProfileAvatarComponent, ReflectProp, RefreshTokenRequest, RequiredComponent, RowClickEvent, SecurityPermissionCodes, SendLoginVerificationEmailResult, SideMenuTopBarComponent, SidebarMenuComponent, SimpleSaveResult, SpiderlyAutocompleteComponent, SpiderlyButtonBaseComponent, SpiderlyButtonComponent, SpiderlyCalendarComponent, SpiderlyCardComponent, SpiderlyCheckboxComponent, SpiderlyColorPickerComponent, SpiderlyControlsModule, SpiderlyDataTableComponent, SpiderlyDataViewComponent, SpiderlyDeleteConfirmationComponent, SpiderlyDropdownComponent, SpiderlyEditorComponent, SpiderlyErrorHandler, SpiderlyFileComponent, SpiderlyFileSelectEvent, SpiderlyFormArray, SpiderlyFormControl, SpiderlyFormGroup, SpiderlyLayoutComponent, SpiderlyMessageService, SpiderlyMultiAutocompleteComponent, SpiderlyMultiSelectComponent, SpiderlyNumberComponent, SpiderlyPanelComponent, SpiderlyPanelsModule, SpiderlyPasswordComponent, SpiderlyReturnButtonComponent, SpiderlySplitButtonComponent, SpiderlyTab, SpiderlyTemplateTypeDirective, SpiderlyTextareaComponent, SpiderlyTextboxComponent, SpiderlyTranslocoLoader, TopBarComponent, TranslateLabelsAbstractService, UserBase, UserRole, ValidatorAbstractService, VerificationTokenRequest, VerificationTypeCodes, VerificationWrapperComponent, adjustColor, authInitializer, capitalizeFirstChar, createFakeGoogleWrapper, deleteAction, exportListToExcel, firstCharToUpper, getFileNameFromContentDisposition, getHtmlImgDisplayString64, getMimeTypeForFileName, getMonth, getParentUrl, getPrimengAutocompleteCodebookOptions, getPrimengAutocompleteNamebookOptions, getPrimengDropdownCodebookOptions, getPrimengDropdownNamebookOptions, httpLoadingInterceptor, isExcelFileType, isImageFileType, isNullOrEmpty, jsonHttpInterceptor, jwtInterceptor, kebabToTitleCase, nameOf, nameof, primitiveArrayTypes, pushAction, selectedTab, singleOrDefault, splitPascalCase, toCommaSeparatedString, unauthorizedInterceptor, validatePrecisionScale };
4870
4569
  //# sourceMappingURL=spiderly.mjs.map