wuic-framework-lib 1.7.13 → 1.7.15

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 (21) hide show
  1. package/fesm2022/{wuic-framework-lib-chart-list.component-BIpu6QY3.mjs → wuic-framework-lib-chart-list.component-KnBu-yVf.mjs} +2 -2
  2. package/fesm2022/{wuic-framework-lib-code-editor.component-P181nIU9.mjs → wuic-framework-lib-code-editor.component-DtI4RXbf.mjs} +2 -2
  3. package/fesm2022/{wuic-framework-lib-designer.component-DZ7C9ygB.mjs → wuic-framework-lib-designer.component-jWS88Z6N.mjs} +2 -2
  4. package/fesm2022/{wuic-framework-lib-first-run-wizard.component-CGCBKpdv.mjs → wuic-framework-lib-first-run-wizard.component-Bewa6pM8.mjs} +2 -2
  5. package/fesm2022/{wuic-framework-lib-framework-docs.component-CX4DuW-Q.mjs → wuic-framework-lib-framework-docs.component-fMNH_vI8.mjs} +226 -146
  6. package/fesm2022/{wuic-framework-lib-pivot-builder.component-CrJUJDxX.mjs → wuic-framework-lib-pivot-builder.component-Bie3oqY9.mjs} +2 -2
  7. package/fesm2022/{wuic-framework-lib-prompt-dialog-fallback-host.component-fk_u2CFB.mjs → wuic-framework-lib-prompt-dialog-fallback-host.component-ojBL8qTM.mjs} +2 -2
  8. package/fesm2022/{wuic-framework-lib-report-designer.component-urOz2Pq8.mjs → wuic-framework-lib-report-designer.component-CDIPEVkI.mjs} +2 -2
  9. package/fesm2022/{wuic-framework-lib-report-scaffold-dialog.component-okexsstE.mjs → wuic-framework-lib-report-scaffold-dialog.component-DNS7CPAW.mjs} +2 -2
  10. package/fesm2022/{wuic-framework-lib-report-viewer.component-CCpUOyb4.mjs → wuic-framework-lib-report-viewer.component-BFw7SVe3.mjs} +2 -2
  11. package/fesm2022/{wuic-framework-lib-scene3d-designer.component-DLcruDYB.mjs → wuic-framework-lib-scene3d-designer.component-Bc-_NNcX.mjs} +3 -3
  12. package/fesm2022/{wuic-framework-lib-scene3d-light-baker-gpu-Dj22rwPQ.mjs → wuic-framework-lib-scene3d-light-baker-gpu-CxpO9_pd.mjs} +2 -2
  13. package/fesm2022/{wuic-framework-lib-scene3d-viewer.component-DA47y9vo.mjs → wuic-framework-lib-scene3d-viewer.component-jbV7-Xy8.mjs} +2 -2
  14. package/fesm2022/{wuic-framework-lib-scheduler-list.component-BXx84Cc7.mjs → wuic-framework-lib-scheduler-list.component-am7oZQln.mjs} +2 -2
  15. package/fesm2022/{wuic-framework-lib-spreadsheet-list-sf.component-v7rE3WW_.mjs → wuic-framework-lib-spreadsheet-list-sf.component-Cl2xoB6n.mjs} +2 -2
  16. package/fesm2022/{wuic-framework-lib-timeline-list.component-CP9PpRQB.mjs → wuic-framework-lib-timeline-list.component-AXyPh6SA.mjs} +4 -4
  17. package/fesm2022/{wuic-framework-lib-workflow-designer.component-CETZSZzu.mjs → wuic-framework-lib-workflow-designer.component-euretE8u.mjs} +2 -2
  18. package/fesm2022/{wuic-framework-lib-wuic-framework-lib-CRUM1gc_.mjs → wuic-framework-lib-wuic-framework-lib-BXteb2PD.mjs} +78 -29
  19. package/fesm2022/wuic-framework-lib.mjs +1 -1
  20. package/package.json +1 -1
  21. package/types/wuic-framework-lib.d.ts +12 -1
@@ -204,6 +204,8 @@ const WuicErrorCodes = {
204
204
  // Causa tipica lato client: chiavi con case diverso da `mc_nome_colonna`, che e'
205
205
  // case-sensitive (es. `cityID` invece di `CityID`), o PK omessa dal payload.
206
206
  CrudMissingKeyPredicate: 'errors.metaservice.crud.missing_key_predicate',
207
+ // Export rifiutato: tutti gli slot export occupati e la coda (maxQueuedExports) piena. HTTP 503.
208
+ ExportQueueFull: 'errors.metaservice.export.queue_full',
207
209
  DbSqlException: 'errors.db.sql_exception', // passthrough — dialog dedicato
208
210
  DbConnection: 'errors.db.connection',
209
211
  DbTimeout: 'errors.db.timeout',
@@ -3420,7 +3422,7 @@ class WtoolboxService {
3420
3422
  const appRef = resolvedInjector.get(ApplicationRef);
3421
3423
  const environmentInjector = resolvedInjector.get(EnvironmentInjector);
3422
3424
  const close$ = new Subject();
3423
- const { PromptDialogFallbackHostComponent } = await import('./wuic-framework-lib-prompt-dialog-fallback-host.component-fk_u2CFB.mjs');
3425
+ const { PromptDialogFallbackHostComponent } = await import('./wuic-framework-lib-prompt-dialog-fallback-host.component-ojBL8qTM.mjs');
3424
3426
  const hostRef = createComponent(PromptDialogFallbackHostComponent, { environmentInjector });
3425
3427
  hostRef.instance.datasource = dialogConfig?.data?.datasource;
3426
3428
  hostRef.instance.header = String(dialogConfig?.header || '');
@@ -4745,6 +4747,8 @@ class WtoolboxService {
4745
4747
  commit_level: "R",
4746
4748
  use_column_captions: "C",
4747
4749
  use_descriptive_fkey: true,
4750
+ // Colonne lookup di export e import: "key" | "description" | "both" (vince su use_descriptive_fkey).
4751
+ fkey_mode: "description",
4748
4752
  separator: ";"
4749
4753
  },
4750
4754
  notifications: {
@@ -22131,7 +22135,7 @@ class LazySchedulerListComponent {
22131
22135
  * Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
22132
22136
  */
22133
22137
  async ngOnInit() {
22134
- schedulerListComponentPromise ??= import('./wuic-framework-lib-scheduler-list.component-BXx84Cc7.mjs').then((m) => m.SchedulerListComponent);
22138
+ schedulerListComponentPromise ??= import('./wuic-framework-lib-scheduler-list.component-am7oZQln.mjs').then((m) => m.SchedulerListComponent);
22135
22139
  this.loadedComponent = await schedulerListComponentPromise;
22136
22140
  this.cdr.markForCheck();
22137
22141
  }
@@ -22339,7 +22343,7 @@ class LazySpreadsheetListSfComponent {
22339
22343
  this.activatedRoute = activatedRoute;
22340
22344
  }
22341
22345
  async ngOnInit() {
22342
- spreadsheetListSfComponentPromise ??= import('./wuic-framework-lib-spreadsheet-list-sf.component-v7rE3WW_.mjs').then((m) => m.SpreadsheetListSfComponent);
22346
+ spreadsheetListSfComponentPromise ??= import('./wuic-framework-lib-spreadsheet-list-sf.component-Cl2xoB6n.mjs').then((m) => m.SpreadsheetListSfComponent);
22343
22347
  this.loadedComponent = await spreadsheetListSfComponentPromise;
22344
22348
  // Quando la promise e' gia' risolta dal cache module-scope (secondo mount
22345
22349
  // post-refresh), il microtask che risolve `await` non scatena sempre CD
@@ -22617,7 +22621,7 @@ class LazyChartListComponent {
22617
22621
  * Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
22618
22622
  */
22619
22623
  async ngOnInit() {
22620
- chartListComponentPromise ??= import('./wuic-framework-lib-chart-list.component-BIpu6QY3.mjs').then((m) => m.ChartListComponent);
22624
+ chartListComponentPromise ??= import('./wuic-framework-lib-chart-list.component-KnBu-yVf.mjs').then((m) => m.ChartListComponent);
22621
22625
  this.loadedComponent = await chartListComponentPromise;
22622
22626
  this.cdr.markForCheck();
22623
22627
  }
@@ -22939,7 +22943,7 @@ class LazyTimelineListComponent {
22939
22943
  this.cdr = cdr;
22940
22944
  }
22941
22945
  async ngOnInit() {
22942
- timelineListComponentPromise ??= import('./wuic-framework-lib-timeline-list.component-CP9PpRQB.mjs').then((m) => m.TimelineListComponent);
22946
+ timelineListComponentPromise ??= import('./wuic-framework-lib-timeline-list.component-AXyPh6SA.mjs').then((m) => m.TimelineListComponent);
22943
22947
  this.loadedComponent = await timelineListComponentPromise;
22944
22948
  this.cdr.markForCheck();
22945
22949
  }
@@ -24208,7 +24212,7 @@ class MetadataEditorComponent {
24208
24212
  }
24209
24213
  let result;
24210
24214
  try {
24211
- const { ReportScaffoldDialogComponent } = await import('./wuic-framework-lib-report-scaffold-dialog.component-okexsstE.mjs');
24215
+ const { ReportScaffoldDialogComponent } = await import('./wuic-framework-lib-report-scaffold-dialog.component-DNS7CPAW.mjs');
24212
24216
  WtoolboxService.resolveDialogServiceFromInjector();
24213
24217
  const ref = WtoolboxService.dialogService?.open?.(ReportScaffoldDialogComponent, {
24214
24218
  header: this.t('report.scaffold.dialog_title', 'Create report'),
@@ -34483,6 +34487,9 @@ class NotificationRealtimeService {
34483
34487
  route: String(payload?.route || '').trim() || undefined,
34484
34488
  totalRecords: Number.isFinite(Number(payload?.totalRecords))
34485
34489
  ? Number(payload?.totalRecords)
34490
+ : null,
34491
+ queuePosition: Number(payload?.queuePosition) > 0
34492
+ ? Math.floor(Number(payload?.queuePosition))
34486
34493
  : null
34487
34494
  };
34488
34495
  this.progressEvents$.next(event);
@@ -34716,7 +34723,7 @@ class ImportExportButtonComponent {
34716
34723
  import_type: 'I',
34717
34724
  commit_level: 'R',
34718
34725
  use_column_captions: 'C',
34719
- use_descriptive_fkey: true,
34726
+ fkey_mode: 'description',
34720
34727
  separator: ';',
34721
34728
  allowedExtensions: ['xls', 'xlsx']
34722
34729
  };
@@ -35037,9 +35044,23 @@ class ImportExportButtonComponent {
35037
35044
  if (this.exportProgressTotalRecords <= 0 && Number.isFinite(totalFromEvent) && totalFromEvent > 0) {
35038
35045
  this.exportProgressTotalRecords = Math.floor(totalFromEvent);
35039
35046
  }
35047
+ const queuePosition = Number(evt?.queuePosition);
35048
+ if (queuePosition > 0) {
35049
+ this.applyExportQueuePosition(queuePosition);
35050
+ return;
35051
+ }
35040
35052
  this.applyExportProgressValue(progress);
35041
35053
  });
35042
35054
  }
35055
+ /** Il server ha gia' il massimo di export in corso: questo aspetta il suo turno. */
35056
+ applyExportQueuePosition(position) {
35057
+ this.exportProgressValue = 0;
35058
+ this.exportProgressDetail = this.trslSrv.format(this.t('import_export.export_queued_{0}', "In coda: posizione {0}. L'export parte appena si libera un posto."), String(Math.floor(position)));
35059
+ try {
35060
+ this.cdr.detectChanges();
35061
+ }
35062
+ catch { /* host destroyed mid-export */ }
35063
+ }
35043
35064
  stopExportProgressPolling() {
35044
35065
  this.exportProgressWsSubscription?.unsubscribe();
35045
35066
  this.exportProgressWsSubscription = undefined;
@@ -35105,6 +35126,14 @@ class ImportExportButtonComponent {
35105
35126
  this.exportProgressDialogVisible = true;
35106
35127
  this.startExportProgressPolling(guid);
35107
35128
  }
35129
+ /** extraProps.import.fkey_mode, altrimenti il booleano storico use_descriptive_fkey (default descrizione). */
35130
+ resolveFkeyMode(importCfg) {
35131
+ const mode = String(importCfg?.fkey_mode || '').trim().toLowerCase();
35132
+ if (mode === 'key' || mode === 'description' || mode === 'both') {
35133
+ return mode;
35134
+ }
35135
+ return importCfg?.use_descriptive_fkey === false ? 'key' : 'description';
35136
+ }
35108
35137
  getImportConfigFromMetadata() {
35109
35138
  return (this.tableMetadata?.extraProps)?.import || {};
35110
35139
  }
@@ -35121,7 +35150,7 @@ class ImportExportButtonComponent {
35121
35150
  import_type: String(importCfg?.import_type || 'I').trim() || 'I',
35122
35151
  commit_level: String(importCfg?.commit_level || 'R').trim() || 'R',
35123
35152
  use_column_captions: String(importCfg?.use_column_captions || 'C').trim() || 'C',
35124
- use_descriptive_fkey: importCfg?.use_descriptive_fkey === undefined ? true : !!importCfg?.use_descriptive_fkey,
35153
+ fkey_mode: this.resolveFkeyMode(importCfg),
35125
35154
  separator: String(importCfg?.separator || ';') || ';',
35126
35155
  allowedExtensions: allowedExtensions.length ? allowedExtensions : ['xls', 'xlsx']
35127
35156
  };
@@ -35247,7 +35276,9 @@ class ImportExportButtonComponent {
35247
35276
  appendOpt('import_type', this.importOptionsForm.import_type || 'I');
35248
35277
  appendOpt('commit_level', this.importOptionsForm.commit_level || 'R');
35249
35278
  appendOpt('use_column_captions', this.importOptionsForm.use_column_captions || 'C');
35250
- appendOpt('use_descriptive_fkey', this.importOptionsForm.use_descriptive_fkey ?? true);
35279
+ appendOpt('fkey_mode', this.importOptionsForm.fkey_mode || 'description');
35280
+ // Per i backend che non conoscono fkey_mode: 'both' e 'description' sono descrittivi.
35281
+ appendOpt('use_descriptive_fkey', (this.importOptionsForm.fkey_mode || 'description') !== 'key');
35251
35282
  appendOpt('separator', this.importOptionsForm.separator || ';');
35252
35283
  appendOpt('route_context_json', JSON.stringify(WtoolboxService.buildCrudRouteContext(routeName, 'import', 'ImportExportButton.importFile')));
35253
35284
  const response = await fetch(uploadEndpoint, {
@@ -35488,11 +35519,11 @@ class ImportExportButtonComponent {
35488
35519
  this.importProgressWsSubscription = undefined;
35489
35520
  }
35490
35521
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ImportExportButtonComponent, deps: [{ token: i1$2.ActivatedRoute }, { token: DataProviderService }, { token: DataProviderMetaService }, { token: NotificationRealtimeService }, { token: TranslationManagerService }, { token: UserInfoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
35491
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ImportExportButtonComponent, isStandalone: true, selector: "wuic-import-export-button", inputs: { routeName: "routeName", tableMetadata: "tableMetadata", filterInfoProvider: "filterInfoProvider" }, host: { listeners: { "window:wuic-export-progress-resume": "onExportProgressResumeEvent($event)", "window:wuic-import-progress-resume": "onImportProgressResumeEvent($event)" } }, viewQueries: [{ propertyName: "importFileInputRef", first: true, predicate: ["importFileInput"], descendants: true }], ngImport: i0, template: "@if (hasAnyAction) {\r\n@if (hasBothActions) {\r\n<p-button [label]=\"label\" [icon]=\"icon\" (onClick)=\"toggleMenu($event, importExportMenu)\" />\r\n<p-menu #importExportMenu [popup]=\"true\" [model]=\"popupMenuItems\" appendTo=\"body\"></p-menu>\r\n} @else {\r\n<p-button [label]=\"label\" [icon]=\"icon\" (onClick)=\"onPrimaryClick()\" />\r\n}\r\n@if (canImportXls) {\r\n<input #importFileInput type=\"file\"\r\n accept=\".xls,.xlsx,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\r\n style=\"display: none;\" (change)=\"onImportFileSelected($event)\" />\r\n}\r\n}\r\n\r\n<p-dialog [header]=\"'import_export.import_dialog_title' | translate\" [(visible)]=\"importDialogVisible\" [modal]=\"true\" [closable]=\"true\"\r\n [style]=\"{ width: '34rem', maxWidth: '95vw' }\">\r\n <div class=\"wuic-import-dialog\">\r\n <div class=\"wuic-import-grid\">\r\n <label for=\"wuic-import-type\">{{ 'import_export.import_type' | translate }}</label>\r\n <select id=\"wuic-import-type\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.import_type\">\r\n <option value=\"I\">{{ 'import_export.import_type_i' | translate }}</option>\r\n <option value=\"U\">{{ 'import_export.import_type_u' | translate }}</option>\r\n <option value=\"IU\">{{ 'import_export.import_type_iu' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-commit-level\">{{ 'import_export.commit_level' | translate }}</label>\r\n <select id=\"wuic-import-commit-level\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.commit_level\">\r\n <option value=\"R\">{{ 'import_export.commit_level_r' | translate }}</option>\r\n <option value=\"I\">{{ 'import_export.commit_level_i' | translate }}</option>\r\n <option value=\"C\">{{ 'import_export.commit_level_c' | translate }}</option>\r\n <option value=\"T\">{{ 'import_export.commit_level_t' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-use-column-captions\">{{ 'import_export.use_column_captions' | translate }}</label>\r\n <select id=\"wuic-import-use-column-captions\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.use_column_captions\">\r\n <option value=\"N\">{{ 'import_export.use_column_captions_n' | translate }}</option>\r\n <option value=\"C\">{{ 'import_export.use_column_captions_c' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-separator\">{{ 'import_export.separator' | translate }}</label>\r\n <input id=\"wuic-import-separator\" type=\"text\" pInputText [(ngModel)]=\"importOptionsForm.separator\" />\r\n </div>\r\n\r\n <label class=\"wuic-column-layout-check\">\r\n <input type=\"checkbox\" [(ngModel)]=\"importOptionsForm.use_descriptive_fkey\" />\r\n <span>{{ 'import_export.use_descriptive_fkey' | translate }}</span>\r\n </label>\r\n\r\n <div class=\"wuic-import-file-row\">\r\n <p-button icon=\"pi pi-paperclip\" [label]=\"'import_export.select_file' | translate\" [outlined]=\"true\" (onClick)=\"triggerImportFileSelection()\" />\r\n <span>{{ importSelectedFileName || ('import_export.no_file_selected' | translate) }}</span>\r\n </div>\r\n </div>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'cancel' | translate\" [outlined]=\"true\" [disabled]=\"importDialogBusy\"\r\n (onClick)=\"importDialogVisible = false\" />\r\n <p-button [label]=\"'import_export.confirm_import' | translate\" [disabled]=\"importDialogBusy || !importSelectedFileName\"\r\n (onClick)=\"confirmImportDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [header]=\"'import_export.import_progress_title' | translate\" [(visible)]=\"importProgressDialogVisible\" [modal]=\"true\" [closable]=\"false\"\r\n [draggable]=\"false\" [resizable]=\"false\" [style]=\"{ width: '30rem', maxWidth: '95vw' }\"\r\n styleClass=\"wuic-progress-dialog\">\r\n <div class=\"wuic-export-progress-dialog\">\r\n <p-progressbar [value]=\"importProgressValue\"></p-progressbar>\r\n <div class=\"wuic-export-progress-detail\">{{ importProgressDetail }}</div>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'import_export.continue_in_background' | translate\" [outlined]=\"true\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"continueImportInBackground()\" />\r\n <p-button [label]=\"'import_export.cancel_import_rollback' | translate\" severity=\"danger\" [outlined]=\"true\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"cancelImportTaskFromDialog()\" />\r\n <p-button [label]=\"'import_export.stop_commit_partial' | translate\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"stopImportAndCommitFromDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [header]=\"'import_export.export_progress_title' | translate\" [(visible)]=\"exportProgressDialogVisible\" [modal]=\"true\" [closable]=\"false\"\r\n [draggable]=\"false\" [resizable]=\"false\" [style]=\"{ width: '30rem', maxWidth: '95vw' }\"\r\n styleClass=\"wuic-progress-dialog\">\r\n <div class=\"wuic-export-progress-dialog\">\r\n <p-progressbar [value]=\"exportProgressValue\"></p-progressbar>\r\n <div class=\"wuic-export-progress-detail\">{{ exportProgressDetail }}</div>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'import_export.continue_in_background' | translate\" [outlined]=\"true\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"continueExportInBackground()\" />\r\n <p-button [label]=\"'import_export.cancel_task' | translate\" severity=\"danger\" [outlined]=\"true\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"cancelExportTaskFromDialog()\" />\r\n <p-button [label]=\"'import_export.stop_download_partial' | translate\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"stopExportAndDownloadPartialFromDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [".wuic-export-progress-dialog{display:flex;flex-direction:column;gap:.65rem}::ng-deep .wuic-progress-dialog .p-progressbar{--p-progressbar-value-transition: none}::ng-deep .wuic-progress-dialog .p-progressbar .p-progressbar-value,::ng-deep .wuic-progress-dialog .p-progressbar-value,:host ::ng-deep .wuic-export-progress-dialog .p-progressbar .p-progressbar-value,:host ::ng-deep .wuic-export-progress-dialog .p-progressbar-value{transition:none!important;animation:none!important}.wuic-export-progress-detail{font-size:.9rem;font-weight:600;text-align:right}.wuic-import-dialog{display:flex;flex-direction:column;gap:.75rem}.wuic-import-grid{display:grid;grid-template-columns:1fr;gap:.35rem}.wuic-import-file-row{display:flex;align-items:center;gap:.65rem}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i7$1.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo", "motionOptions"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "maskMotionOptions", "motionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: ProgressBarModule }, { kind: "component", type: i6$3.ProgressBar, selector: "p-progressBar, p-progressbar, p-progress-bar", inputs: ["value", "showValue", "styleClass", "valueStyleClass", "unit", "mode", "color"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$3.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: i1$3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$2.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
35522
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ImportExportButtonComponent, isStandalone: true, selector: "wuic-import-export-button", inputs: { routeName: "routeName", tableMetadata: "tableMetadata", filterInfoProvider: "filterInfoProvider" }, host: { listeners: { "window:wuic-export-progress-resume": "onExportProgressResumeEvent($event)", "window:wuic-import-progress-resume": "onImportProgressResumeEvent($event)" } }, viewQueries: [{ propertyName: "importFileInputRef", first: true, predicate: ["importFileInput"], descendants: true }], ngImport: i0, template: "@if (hasAnyAction) {\r\n@if (hasBothActions) {\r\n<p-button [label]=\"label\" [icon]=\"icon\" (onClick)=\"toggleMenu($event, importExportMenu)\" />\r\n<p-menu #importExportMenu [popup]=\"true\" [model]=\"popupMenuItems\" appendTo=\"body\"></p-menu>\r\n} @else {\r\n<p-button [label]=\"label\" [icon]=\"icon\" (onClick)=\"onPrimaryClick()\" />\r\n}\r\n@if (canImportXls) {\r\n<input #importFileInput type=\"file\"\r\n accept=\".xls,.xlsx,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\r\n style=\"display: none;\" (change)=\"onImportFileSelected($event)\" />\r\n}\r\n}\r\n\r\n<p-dialog [header]=\"'import_export.import_dialog_title' | translate\" [(visible)]=\"importDialogVisible\" [modal]=\"true\" [closable]=\"true\"\r\n [style]=\"{ width: '34rem', maxWidth: '95vw' }\">\r\n <div class=\"wuic-import-dialog\">\r\n <div class=\"wuic-import-grid\">\r\n <label for=\"wuic-import-type\">{{ 'import_export.import_type' | translate }}</label>\r\n <select id=\"wuic-import-type\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.import_type\">\r\n <option value=\"I\">{{ 'import_export.import_type_i' | translate }}</option>\r\n <option value=\"U\">{{ 'import_export.import_type_u' | translate }}</option>\r\n <option value=\"IU\">{{ 'import_export.import_type_iu' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-commit-level\">{{ 'import_export.commit_level' | translate }}</label>\r\n <select id=\"wuic-import-commit-level\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.commit_level\">\r\n <option value=\"R\">{{ 'import_export.commit_level_r' | translate }}</option>\r\n <option value=\"I\">{{ 'import_export.commit_level_i' | translate }}</option>\r\n <option value=\"C\">{{ 'import_export.commit_level_c' | translate }}</option>\r\n <option value=\"T\">{{ 'import_export.commit_level_t' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-use-column-captions\">{{ 'import_export.use_column_captions' | translate }}</label>\r\n <select id=\"wuic-import-use-column-captions\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.use_column_captions\">\r\n <option value=\"N\">{{ 'import_export.use_column_captions_n' | translate }}</option>\r\n <option value=\"C\">{{ 'import_export.use_column_captions_c' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-separator\">{{ 'import_export.separator' | translate }}</label>\r\n <input id=\"wuic-import-separator\" type=\"text\" pInputText [(ngModel)]=\"importOptionsForm.separator\" />\r\n\r\n <label for=\"wuic-import-fkey-mode\">{{ 'import_export.fkey_mode' | translate }}</label>\r\n <select id=\"wuic-import-fkey-mode\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.fkey_mode\">\r\n <option value=\"description\">{{ 'import_export.fkey_mode_description' | translate }}</option>\r\n <option value=\"key\">{{ 'import_export.fkey_mode_key' | translate }}</option>\r\n <option value=\"both\">{{ 'import_export.fkey_mode_both' | translate }}</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"wuic-import-file-row\">\r\n <p-button icon=\"pi pi-paperclip\" [label]=\"'import_export.select_file' | translate\" [outlined]=\"true\" (onClick)=\"triggerImportFileSelection()\" />\r\n <span>{{ importSelectedFileName || ('import_export.no_file_selected' | translate) }}</span>\r\n </div>\r\n </div>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'cancel' | translate\" [outlined]=\"true\" [disabled]=\"importDialogBusy\"\r\n (onClick)=\"importDialogVisible = false\" />\r\n <p-button [label]=\"'import_export.confirm_import' | translate\" [disabled]=\"importDialogBusy || !importSelectedFileName\"\r\n (onClick)=\"confirmImportDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [header]=\"'import_export.import_progress_title' | translate\" [(visible)]=\"importProgressDialogVisible\" [modal]=\"true\" [closable]=\"false\"\r\n [draggable]=\"false\" [resizable]=\"false\" [style]=\"{ width: '30rem', maxWidth: '95vw' }\"\r\n styleClass=\"wuic-progress-dialog\">\r\n <div class=\"wuic-export-progress-dialog\">\r\n <p-progressbar [value]=\"importProgressValue\"></p-progressbar>\r\n <div class=\"wuic-export-progress-detail\">{{ importProgressDetail }}</div>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'import_export.continue_in_background' | translate\" [outlined]=\"true\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"continueImportInBackground()\" />\r\n <p-button [label]=\"'import_export.cancel_import_rollback' | translate\" severity=\"danger\" [outlined]=\"true\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"cancelImportTaskFromDialog()\" />\r\n <p-button [label]=\"'import_export.stop_commit_partial' | translate\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"stopImportAndCommitFromDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [header]=\"'import_export.export_progress_title' | translate\" [(visible)]=\"exportProgressDialogVisible\" [modal]=\"true\" [closable]=\"false\"\r\n [draggable]=\"false\" [resizable]=\"false\" [style]=\"{ width: '30rem', maxWidth: '95vw' }\"\r\n styleClass=\"wuic-progress-dialog\">\r\n <div class=\"wuic-export-progress-dialog\">\r\n <p-progressbar [value]=\"exportProgressValue\"></p-progressbar>\r\n <div class=\"wuic-export-progress-detail\">{{ exportProgressDetail }}</div>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'import_export.continue_in_background' | translate\" [outlined]=\"true\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"continueExportInBackground()\" />\r\n <p-button [label]=\"'import_export.cancel_task' | translate\" severity=\"danger\" [outlined]=\"true\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"cancelExportTaskFromDialog()\" />\r\n <p-button [label]=\"'import_export.stop_download_partial' | translate\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"stopExportAndDownloadPartialFromDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [".wuic-export-progress-dialog{display:flex;flex-direction:column;gap:.65rem}::ng-deep .wuic-progress-dialog .p-progressbar{--p-progressbar-value-transition: none}::ng-deep .wuic-progress-dialog .p-progressbar .p-progressbar-value,::ng-deep .wuic-progress-dialog .p-progressbar-value,:host ::ng-deep .wuic-export-progress-dialog .p-progressbar .p-progressbar-value,:host ::ng-deep .wuic-export-progress-dialog .p-progressbar-value{transition:none!important;animation:none!important}.wuic-export-progress-detail{font-size:.9rem;font-weight:600;text-align:right}.wuic-import-dialog{display:flex;flex-direction:column;gap:.75rem}.wuic-import-grid{display:grid;grid-template-columns:1fr;gap:.35rem}.wuic-import-file-row{display:flex;align-items:center;gap:.65rem}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i7$1.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo", "motionOptions"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "maskMotionOptions", "motionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: ProgressBarModule }, { kind: "component", type: i6$3.ProgressBar, selector: "p-progressBar, p-progressbar, p-progress-bar", inputs: ["value", "showValue", "styleClass", "valueStyleClass", "unit", "mode", "color"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$3.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: i1$3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$2.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
35492
35523
  }
35493
35524
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ImportExportButtonComponent, decorators: [{
35494
35525
  type: Component,
35495
- args: [{ selector: 'wuic-import-export-button', imports: [ButtonModule, MenuModule, DialogModule, ProgressBarModule, FormsModule, InputTextModule, TranslateModule], template: "@if (hasAnyAction) {\r\n@if (hasBothActions) {\r\n<p-button [label]=\"label\" [icon]=\"icon\" (onClick)=\"toggleMenu($event, importExportMenu)\" />\r\n<p-menu #importExportMenu [popup]=\"true\" [model]=\"popupMenuItems\" appendTo=\"body\"></p-menu>\r\n} @else {\r\n<p-button [label]=\"label\" [icon]=\"icon\" (onClick)=\"onPrimaryClick()\" />\r\n}\r\n@if (canImportXls) {\r\n<input #importFileInput type=\"file\"\r\n accept=\".xls,.xlsx,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\r\n style=\"display: none;\" (change)=\"onImportFileSelected($event)\" />\r\n}\r\n}\r\n\r\n<p-dialog [header]=\"'import_export.import_dialog_title' | translate\" [(visible)]=\"importDialogVisible\" [modal]=\"true\" [closable]=\"true\"\r\n [style]=\"{ width: '34rem', maxWidth: '95vw' }\">\r\n <div class=\"wuic-import-dialog\">\r\n <div class=\"wuic-import-grid\">\r\n <label for=\"wuic-import-type\">{{ 'import_export.import_type' | translate }}</label>\r\n <select id=\"wuic-import-type\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.import_type\">\r\n <option value=\"I\">{{ 'import_export.import_type_i' | translate }}</option>\r\n <option value=\"U\">{{ 'import_export.import_type_u' | translate }}</option>\r\n <option value=\"IU\">{{ 'import_export.import_type_iu' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-commit-level\">{{ 'import_export.commit_level' | translate }}</label>\r\n <select id=\"wuic-import-commit-level\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.commit_level\">\r\n <option value=\"R\">{{ 'import_export.commit_level_r' | translate }}</option>\r\n <option value=\"I\">{{ 'import_export.commit_level_i' | translate }}</option>\r\n <option value=\"C\">{{ 'import_export.commit_level_c' | translate }}</option>\r\n <option value=\"T\">{{ 'import_export.commit_level_t' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-use-column-captions\">{{ 'import_export.use_column_captions' | translate }}</label>\r\n <select id=\"wuic-import-use-column-captions\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.use_column_captions\">\r\n <option value=\"N\">{{ 'import_export.use_column_captions_n' | translate }}</option>\r\n <option value=\"C\">{{ 'import_export.use_column_captions_c' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-separator\">{{ 'import_export.separator' | translate }}</label>\r\n <input id=\"wuic-import-separator\" type=\"text\" pInputText [(ngModel)]=\"importOptionsForm.separator\" />\r\n </div>\r\n\r\n <label class=\"wuic-column-layout-check\">\r\n <input type=\"checkbox\" [(ngModel)]=\"importOptionsForm.use_descriptive_fkey\" />\r\n <span>{{ 'import_export.use_descriptive_fkey' | translate }}</span>\r\n </label>\r\n\r\n <div class=\"wuic-import-file-row\">\r\n <p-button icon=\"pi pi-paperclip\" [label]=\"'import_export.select_file' | translate\" [outlined]=\"true\" (onClick)=\"triggerImportFileSelection()\" />\r\n <span>{{ importSelectedFileName || ('import_export.no_file_selected' | translate) }}</span>\r\n </div>\r\n </div>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'cancel' | translate\" [outlined]=\"true\" [disabled]=\"importDialogBusy\"\r\n (onClick)=\"importDialogVisible = false\" />\r\n <p-button [label]=\"'import_export.confirm_import' | translate\" [disabled]=\"importDialogBusy || !importSelectedFileName\"\r\n (onClick)=\"confirmImportDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [header]=\"'import_export.import_progress_title' | translate\" [(visible)]=\"importProgressDialogVisible\" [modal]=\"true\" [closable]=\"false\"\r\n [draggable]=\"false\" [resizable]=\"false\" [style]=\"{ width: '30rem', maxWidth: '95vw' }\"\r\n styleClass=\"wuic-progress-dialog\">\r\n <div class=\"wuic-export-progress-dialog\">\r\n <p-progressbar [value]=\"importProgressValue\"></p-progressbar>\r\n <div class=\"wuic-export-progress-detail\">{{ importProgressDetail }}</div>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'import_export.continue_in_background' | translate\" [outlined]=\"true\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"continueImportInBackground()\" />\r\n <p-button [label]=\"'import_export.cancel_import_rollback' | translate\" severity=\"danger\" [outlined]=\"true\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"cancelImportTaskFromDialog()\" />\r\n <p-button [label]=\"'import_export.stop_commit_partial' | translate\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"stopImportAndCommitFromDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [header]=\"'import_export.export_progress_title' | translate\" [(visible)]=\"exportProgressDialogVisible\" [modal]=\"true\" [closable]=\"false\"\r\n [draggable]=\"false\" [resizable]=\"false\" [style]=\"{ width: '30rem', maxWidth: '95vw' }\"\r\n styleClass=\"wuic-progress-dialog\">\r\n <div class=\"wuic-export-progress-dialog\">\r\n <p-progressbar [value]=\"exportProgressValue\"></p-progressbar>\r\n <div class=\"wuic-export-progress-detail\">{{ exportProgressDetail }}</div>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'import_export.continue_in_background' | translate\" [outlined]=\"true\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"continueExportInBackground()\" />\r\n <p-button [label]=\"'import_export.cancel_task' | translate\" severity=\"danger\" [outlined]=\"true\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"cancelExportTaskFromDialog()\" />\r\n <p-button [label]=\"'import_export.stop_download_partial' | translate\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"stopExportAndDownloadPartialFromDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [".wuic-export-progress-dialog{display:flex;flex-direction:column;gap:.65rem}::ng-deep .wuic-progress-dialog .p-progressbar{--p-progressbar-value-transition: none}::ng-deep .wuic-progress-dialog .p-progressbar .p-progressbar-value,::ng-deep .wuic-progress-dialog .p-progressbar-value,:host ::ng-deep .wuic-export-progress-dialog .p-progressbar .p-progressbar-value,:host ::ng-deep .wuic-export-progress-dialog .p-progressbar-value{transition:none!important;animation:none!important}.wuic-export-progress-detail{font-size:.9rem;font-weight:600;text-align:right}.wuic-import-dialog{display:flex;flex-direction:column;gap:.75rem}.wuic-import-grid{display:grid;grid-template-columns:1fr;gap:.35rem}.wuic-import-file-row{display:flex;align-items:center;gap:.65rem}\n"] }]
35526
+ args: [{ selector: 'wuic-import-export-button', imports: [ButtonModule, MenuModule, DialogModule, ProgressBarModule, FormsModule, InputTextModule, TranslateModule], template: "@if (hasAnyAction) {\r\n@if (hasBothActions) {\r\n<p-button [label]=\"label\" [icon]=\"icon\" (onClick)=\"toggleMenu($event, importExportMenu)\" />\r\n<p-menu #importExportMenu [popup]=\"true\" [model]=\"popupMenuItems\" appendTo=\"body\"></p-menu>\r\n} @else {\r\n<p-button [label]=\"label\" [icon]=\"icon\" (onClick)=\"onPrimaryClick()\" />\r\n}\r\n@if (canImportXls) {\r\n<input #importFileInput type=\"file\"\r\n accept=\".xls,.xlsx,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\r\n style=\"display: none;\" (change)=\"onImportFileSelected($event)\" />\r\n}\r\n}\r\n\r\n<p-dialog [header]=\"'import_export.import_dialog_title' | translate\" [(visible)]=\"importDialogVisible\" [modal]=\"true\" [closable]=\"true\"\r\n [style]=\"{ width: '34rem', maxWidth: '95vw' }\">\r\n <div class=\"wuic-import-dialog\">\r\n <div class=\"wuic-import-grid\">\r\n <label for=\"wuic-import-type\">{{ 'import_export.import_type' | translate }}</label>\r\n <select id=\"wuic-import-type\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.import_type\">\r\n <option value=\"I\">{{ 'import_export.import_type_i' | translate }}</option>\r\n <option value=\"U\">{{ 'import_export.import_type_u' | translate }}</option>\r\n <option value=\"IU\">{{ 'import_export.import_type_iu' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-commit-level\">{{ 'import_export.commit_level' | translate }}</label>\r\n <select id=\"wuic-import-commit-level\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.commit_level\">\r\n <option value=\"R\">{{ 'import_export.commit_level_r' | translate }}</option>\r\n <option value=\"I\">{{ 'import_export.commit_level_i' | translate }}</option>\r\n <option value=\"C\">{{ 'import_export.commit_level_c' | translate }}</option>\r\n <option value=\"T\">{{ 'import_export.commit_level_t' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-use-column-captions\">{{ 'import_export.use_column_captions' | translate }}</label>\r\n <select id=\"wuic-import-use-column-captions\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.use_column_captions\">\r\n <option value=\"N\">{{ 'import_export.use_column_captions_n' | translate }}</option>\r\n <option value=\"C\">{{ 'import_export.use_column_captions_c' | translate }}</option>\r\n </select>\r\n\r\n <label for=\"wuic-import-separator\">{{ 'import_export.separator' | translate }}</label>\r\n <input id=\"wuic-import-separator\" type=\"text\" pInputText [(ngModel)]=\"importOptionsForm.separator\" />\r\n\r\n <label for=\"wuic-import-fkey-mode\">{{ 'import_export.fkey_mode' | translate }}</label>\r\n <select id=\"wuic-import-fkey-mode\" class=\"p-inputtext p-component\" [(ngModel)]=\"importOptionsForm.fkey_mode\">\r\n <option value=\"description\">{{ 'import_export.fkey_mode_description' | translate }}</option>\r\n <option value=\"key\">{{ 'import_export.fkey_mode_key' | translate }}</option>\r\n <option value=\"both\">{{ 'import_export.fkey_mode_both' | translate }}</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"wuic-import-file-row\">\r\n <p-button icon=\"pi pi-paperclip\" [label]=\"'import_export.select_file' | translate\" [outlined]=\"true\" (onClick)=\"triggerImportFileSelection()\" />\r\n <span>{{ importSelectedFileName || ('import_export.no_file_selected' | translate) }}</span>\r\n </div>\r\n </div>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'cancel' | translate\" [outlined]=\"true\" [disabled]=\"importDialogBusy\"\r\n (onClick)=\"importDialogVisible = false\" />\r\n <p-button [label]=\"'import_export.confirm_import' | translate\" [disabled]=\"importDialogBusy || !importSelectedFileName\"\r\n (onClick)=\"confirmImportDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [header]=\"'import_export.import_progress_title' | translate\" [(visible)]=\"importProgressDialogVisible\" [modal]=\"true\" [closable]=\"false\"\r\n [draggable]=\"false\" [resizable]=\"false\" [style]=\"{ width: '30rem', maxWidth: '95vw' }\"\r\n styleClass=\"wuic-progress-dialog\">\r\n <div class=\"wuic-export-progress-dialog\">\r\n <p-progressbar [value]=\"importProgressValue\"></p-progressbar>\r\n <div class=\"wuic-export-progress-detail\">{{ importProgressDetail }}</div>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'import_export.continue_in_background' | translate\" [outlined]=\"true\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"continueImportInBackground()\" />\r\n <p-button [label]=\"'import_export.cancel_import_rollback' | translate\" severity=\"danger\" [outlined]=\"true\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"cancelImportTaskFromDialog()\" />\r\n <p-button [label]=\"'import_export.stop_commit_partial' | translate\" [disabled]=\"importControlBusy\"\r\n (onClick)=\"stopImportAndCommitFromDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [header]=\"'import_export.export_progress_title' | translate\" [(visible)]=\"exportProgressDialogVisible\" [modal]=\"true\" [closable]=\"false\"\r\n [draggable]=\"false\" [resizable]=\"false\" [style]=\"{ width: '30rem', maxWidth: '95vw' }\"\r\n styleClass=\"wuic-progress-dialog\">\r\n <div class=\"wuic-export-progress-dialog\">\r\n <p-progressbar [value]=\"exportProgressValue\"></p-progressbar>\r\n <div class=\"wuic-export-progress-detail\">{{ exportProgressDetail }}</div>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <p-button [label]=\"'import_export.continue_in_background' | translate\" [outlined]=\"true\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"continueExportInBackground()\" />\r\n <p-button [label]=\"'import_export.cancel_task' | translate\" severity=\"danger\" [outlined]=\"true\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"cancelExportTaskFromDialog()\" />\r\n <p-button [label]=\"'import_export.stop_download_partial' | translate\" [disabled]=\"exportControlBusy\"\r\n (onClick)=\"stopExportAndDownloadPartialFromDialog()\" />\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [".wuic-export-progress-dialog{display:flex;flex-direction:column;gap:.65rem}::ng-deep .wuic-progress-dialog .p-progressbar{--p-progressbar-value-transition: none}::ng-deep .wuic-progress-dialog .p-progressbar .p-progressbar-value,::ng-deep .wuic-progress-dialog .p-progressbar-value,:host ::ng-deep .wuic-export-progress-dialog .p-progressbar .p-progressbar-value,:host ::ng-deep .wuic-export-progress-dialog .p-progressbar-value{transition:none!important;animation:none!important}.wuic-export-progress-detail{font-size:.9rem;font-weight:600;text-align:right}.wuic-import-dialog{display:flex;flex-direction:column;gap:.75rem}.wuic-import-grid{display:grid;grid-template-columns:1fr;gap:.35rem}.wuic-import-file-row{display:flex;align-items:center;gap:.65rem}\n"] }]
35496
35527
  }], ctorParameters: () => [{ type: i1$2.ActivatedRoute }, { type: DataProviderService }, { type: DataProviderMetaService }, { type: NotificationRealtimeService }, { type: TranslationManagerService }, { type: UserInfoService }, { type: i0.ChangeDetectorRef }], propDecorators: { routeName: [{
35497
35528
  type: Input
35498
35529
  }], tableMetadata: [{
@@ -50568,7 +50599,7 @@ class LazyFirstRunWizardComponent {
50568
50599
  this.cdr = cdr;
50569
50600
  }
50570
50601
  async ngOnInit() {
50571
- firstRunWizardComponentPromise ??= import('./wuic-framework-lib-first-run-wizard.component-CGCBKpdv.mjs').then((m) => m.WuicFirstRunWizardComponent);
50602
+ firstRunWizardComponentPromise ??= import('./wuic-framework-lib-first-run-wizard.component-Bewa6pM8.mjs').then((m) => m.WuicFirstRunWizardComponent);
50572
50603
  const componentClass = await firstRunWizardComponentPromise;
50573
50604
  this.componentRef = this.vcr.createComponent(componentClass);
50574
50605
  // Forward output del componente reale al wrapper. Type assertion necessaria
@@ -62287,7 +62318,7 @@ class LazyCodeEditorComponent {
62287
62318
  this.cdr = cdr;
62288
62319
  }
62289
62320
  async ngOnInit() {
62290
- codeEditorComponentPromise ??= import('./wuic-framework-lib-code-editor.component-P181nIU9.mjs').then((m) => m.CodeEditorComponent);
62321
+ codeEditorComponentPromise ??= import('./wuic-framework-lib-code-editor.component-DtI4RXbf.mjs').then((m) => m.CodeEditorComponent);
62291
62322
  this.loadedComponent = await codeEditorComponentPromise;
62292
62323
  this.cdr.markForCheck();
62293
62324
  }
@@ -64079,6 +64110,8 @@ class NotificationBellComponent {
64079
64110
  notifications = [];
64080
64111
  isVisible = true;
64081
64112
  progressByGuid = {};
64113
+ /** Posizione nella coda export del server per le notifiche di progress in attesa. */
64114
+ queuePositionByGuid = {};
64082
64115
  /** Title del bottone "elimina notifica letta" (X), localizzato. */
64083
64116
  deleteNotificationTitle = '';
64084
64117
  sub = new Subscription();
@@ -64150,6 +64183,13 @@ class NotificationBellComponent {
64150
64183
  }
64151
64184
  const normalized = Math.max(0, Math.min(100, progress));
64152
64185
  this.progressByGuid[guid] = normalized;
64186
+ const queuePosition = Number(evt?.queuePosition);
64187
+ if (queuePosition > 0) {
64188
+ this.queuePositionByGuid[guid] = Math.floor(queuePosition);
64189
+ }
64190
+ else {
64191
+ delete this.queuePositionByGuid[guid];
64192
+ }
64153
64193
  }));
64154
64194
  // Riaggancio al LOGIN TARDIVO: `connect()` da solo non basta.
64155
64195
  // La campanella vive nell'header, quindi si monta anche sulla pagina di
@@ -64346,6 +64386,15 @@ class NotificationBellComponent {
64346
64386
  }));
64347
64387
  return true;
64348
64388
  }
64389
+ /** Testo "In coda: posizione N" per un export che aspetta il suo turno, altrimenti null. */
64390
+ getNotificationQueueText(item) {
64391
+ const guid = this.getNotificationProgressGuid(item);
64392
+ const position = guid ? this.queuePositionByGuid[guid] : undefined;
64393
+ if (!position) {
64394
+ return null;
64395
+ }
64396
+ return this.trslSrv.format(this.safeT('import_export.export_queued_short_{0}', 'In coda: posizione {0}'), String(position));
64397
+ }
64349
64398
  getNotificationProgress(item) {
64350
64399
  const guid = this.getNotificationProgressGuid(item);
64351
64400
  if (!guid) {
@@ -64406,11 +64455,11 @@ class NotificationBellComponent {
64406
64455
  }
64407
64456
  }
64408
64457
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NotificationBellComponent, deps: [{ token: NotificationRealtimeService }, { token: i1$2.Router }, { token: TranslationManagerService }, { token: AuthSessionService }], target: i0.ɵɵFactoryTarget.Component });
64409
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NotificationBellComponent, isStandalone: true, selector: "wuic-notification-bell", inputs: { userId: "userId", title: "title", emptyMessage: "emptyMessage", clearReadLabel: "clearReadLabel", markAllReadLabel: "markAllReadLabel" }, viewQueries: [{ propertyName: "notificationPanel", first: true, predicate: ["notificationPanel"], descendants: true }], ngImport: i0, template: "@if (isVisible) {\r\n <button type=\"button\" class=\"notification-bell-btn\" (click)=\"notificationPanel.toggle($event)\"\r\n [attr.aria-label]=\"title || 'Notifiche'\" [attr.title]=\"title || 'Notifiche'\">\r\n <i class=\"pi pi-bell\"></i>\r\n @if (unreadCount > 0) {\r\n <span class=\"notification-bell-badge\">{{ unreadCount }}</span>\r\n }\r\n </button>\r\n\r\n <p-popover #notificationPanel appendTo=\"body\" [style]=\"{ width: '26rem', maxWidth: '92vw' }\">\r\n <div class=\"notification-panel\">\r\n <div class=\"notification-panel-header-row\">\r\n <div class=\"notification-panel-header\">{{ title }}</div>\r\n @if (notifications.length) {\r\n <div class=\"notification-panel-actions\">\r\n @if (unreadCount > 0) {\r\n <button type=\"button\" class=\"notification-mark-all-btn\" (click)=\"markAllRead()\" [title]=\"markAllReadLabel\">{{ markAllReadLabel }}</button>\r\n }\r\n <button type=\"button\" class=\"notification-clear-read-btn\" (click)=\"clearRead()\">{{ clearReadLabel }}</button>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!notifications.length) {\r\n <div class=\"notification-empty\">{{ emptyMessage }}</div>\r\n }\r\n\r\n @for (n of notifications; track n.id) {\r\n <div class=\"notification-item\"\r\n [class.notification-item-unread]=\"!n.isRead\"\r\n [class.notification-item-clickable]=\"isClickable(n)\">\r\n <button type=\"button\" class=\"notification-item-open\" (click)=\"openNotification(n)\">\r\n <div class=\"notification-item-message\">\r\n {{ n.message }}\r\n @if (isClickable(n)) {\r\n <i class=\"pi pi-angle-right notification-item-chevron\" aria-hidden=\"true\"></i>\r\n }\r\n </div>\r\n @if (getNotificationProgress(n) !== null) {\r\n <div class=\"notification-item-progress\">\r\n <p-progressbar [value]=\"getNotificationProgress(n) || 0\"></p-progressbar>\r\n <div class=\"notification-item-progress-text\">{{ (getNotificationProgress(n) || 0).toFixed(2) }}%</div>\r\n </div>\r\n }\r\n <div class=\"notification-item-meta\">{{ n.type }} \u00B7 {{ n.createdAt | date:'dd/MM/yyyy HH:mm' }}</div>\r\n </button>\r\n @if (n.isRead) {\r\n <button type=\"button\" class=\"notification-item-delete\" (click)=\"deleteReadNotification($event, n)\" [title]=\"deleteNotificationTitle\">\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </p-popover>\r\n}\r\n", styles: [":host{display:inline-flex}.notification-bell-btn{position:relative;border:0;background:transparent;cursor:pointer;width:2.25rem;height:2.25rem;border-radius:999px;color:inherit}.notification-bell-btn:hover{background:color-mix(in srgb,var(--wuic-accent, #3b82f6) 12%,transparent)}.notification-bell-badge{position:absolute;top:-.2rem;right:-.2rem;min-width:1.1rem;height:1.1rem;padding:0 .2rem;border-radius:999px;background:#ef4444;color:#fff;font-size:.68rem;line-height:1.1rem;text-align:center}.notification-panel{display:flex;flex-direction:column;gap:.35rem}.notification-panel-header-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.notification-panel-header{font-weight:700}.notification-panel-actions{display:flex;align-items:center;gap:.5rem}.notification-clear-read-btn,.notification-mark-all-btn{border:0;background:transparent;color:var(--wuic-accent, #3b82f6);cursor:pointer;font-size:.85rem;padding:.2rem .45rem;border-radius:.35rem}.notification-clear-read-btn:hover,.notification-mark-all-btn:hover{background:color-mix(in srgb,var(--wuic-accent, #3b82f6) 12%,transparent)}.notification-mark-all-btn{font-weight:600}.notification-empty{color:var(--wuic-text-muted, #64748b);padding:.5rem 0}.notification-item{display:flex;align-items:flex-start;gap:.4rem;border:1px solid var(--wuic-border, #dbe2ef);border-radius:.5rem;background:var(--wuic-surface, #fff);padding:.4rem}.notification-item:hover{border-color:color-mix(in srgb,var(--wuic-accent, #3b82f6) 40%,var(--wuic-border, #dbe2ef))}.notification-item-unread{border-left:4px solid var(--wuic-accent, #3b82f6)}.notification-item-message{font-size:.95rem;line-height:1.25rem}.notification-item-open{flex:1;border:0;background:transparent;text-align:left;cursor:pointer;padding:.15rem}.notification-item-delete{border:0;background:transparent;color:var(--wuic-text-muted, #64748b);cursor:pointer;width:1.8rem;height:1.8rem;border-radius:999px;margin-top:.05rem}.notification-item-delete:hover{background:#ef44441f;color:#b91c1c}.notification-item-meta{margin-top:.25rem;color:var(--wuic-text-muted, #64748b);font-size:.78rem}.notification-item-progress{margin-top:.35rem}:host ::ng-deep .notification-item-progress .p-progressbar .p-progressbar-value,:host ::ng-deep .notification-item-progress .p-progressbar-value{transition:none!important}.notification-item-progress-text{margin-top:.2rem;text-align:right;color:var(--wuic-text-muted, #64748b);font-size:.74rem;font-weight:600}.notification-item-clickable{background:linear-gradient(to right,color-mix(in srgb,var(--wuic-accent, #3b82f6) 6%,transparent),color-mix(in srgb,var(--wuic-accent, #3b82f6) 2%,transparent));border-color:color-mix(in srgb,var(--wuic-accent, #3b82f6) 35%,transparent)}.notification-item-clickable:hover{background:linear-gradient(to right,color-mix(in srgb,var(--wuic-accent, #3b82f6) 14%,transparent),color-mix(in srgb,var(--wuic-accent, #3b82f6) 6%,transparent));border-color:var(--wuic-accent, #3b82f6);box-shadow:0 1px 3px color-mix(in srgb,var(--wuic-accent, #3b82f6) 15%,transparent)}.notification-item-clickable .notification-item-message{color:var(--wuic-accent, #3b82f6);font-weight:500;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.notification-item-chevron{color:var(--wuic-accent, #3b82f6);font-size:.9rem;flex-shrink:0;opacity:.75;transition:transform .15s ease-out,opacity .15s ease-out}.notification-item-clickable:hover .notification-item-chevron{opacity:1;transform:translate(2px)}.notification-item:not(.notification-item-clickable) .notification-item-open{cursor:default}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i5$5.Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions", "motionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: ProgressBarModule }, { kind: "component", type: i6$3.ProgressBar, selector: "p-progressBar, p-progressbar, p-progress-bar", inputs: ["value", "showValue", "styleClass", "valueStyleClass", "unit", "mode", "color"] }, { kind: "pipe", type: DatePipe, name: "date" }] });
64458
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NotificationBellComponent, isStandalone: true, selector: "wuic-notification-bell", inputs: { userId: "userId", title: "title", emptyMessage: "emptyMessage", clearReadLabel: "clearReadLabel", markAllReadLabel: "markAllReadLabel" }, viewQueries: [{ propertyName: "notificationPanel", first: true, predicate: ["notificationPanel"], descendants: true }], ngImport: i0, template: "@if (isVisible) {\r\n <button type=\"button\" class=\"notification-bell-btn\" (click)=\"notificationPanel.toggle($event)\"\r\n [attr.aria-label]=\"title || 'Notifiche'\" [attr.title]=\"title || 'Notifiche'\">\r\n <i class=\"pi pi-bell\"></i>\r\n @if (unreadCount > 0) {\r\n <span class=\"notification-bell-badge\">{{ unreadCount }}</span>\r\n }\r\n </button>\r\n\r\n <p-popover #notificationPanel appendTo=\"body\" [style]=\"{ width: '26rem', maxWidth: '92vw' }\">\r\n <div class=\"notification-panel\">\r\n <div class=\"notification-panel-header-row\">\r\n <div class=\"notification-panel-header\">{{ title }}</div>\r\n @if (notifications.length) {\r\n <div class=\"notification-panel-actions\">\r\n @if (unreadCount > 0) {\r\n <button type=\"button\" class=\"notification-mark-all-btn\" (click)=\"markAllRead()\" [title]=\"markAllReadLabel\">{{ markAllReadLabel }}</button>\r\n }\r\n <button type=\"button\" class=\"notification-clear-read-btn\" (click)=\"clearRead()\">{{ clearReadLabel }}</button>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!notifications.length) {\r\n <div class=\"notification-empty\">{{ emptyMessage }}</div>\r\n }\r\n\r\n @for (n of notifications; track n.id) {\r\n <div class=\"notification-item\"\r\n [class.notification-item-unread]=\"!n.isRead\"\r\n [class.notification-item-clickable]=\"isClickable(n)\">\r\n <button type=\"button\" class=\"notification-item-open\" (click)=\"openNotification(n)\">\r\n <div class=\"notification-item-message\">\r\n {{ n.message }}\r\n @if (isClickable(n)) {\r\n <i class=\"pi pi-angle-right notification-item-chevron\" aria-hidden=\"true\"></i>\r\n }\r\n </div>\r\n @if (getNotificationProgress(n) !== null) {\r\n <div class=\"notification-item-progress\">\r\n <p-progressbar [value]=\"getNotificationProgress(n) || 0\"></p-progressbar>\r\n <div class=\"notification-item-progress-text\">{{ getNotificationQueueText(n) || ((getNotificationProgress(n) || 0).toFixed(2) + '%') }}</div>\r\n </div>\r\n }\r\n <div class=\"notification-item-meta\">{{ n.type }} \u00B7 {{ n.createdAt | date:'dd/MM/yyyy HH:mm' }}</div>\r\n </button>\r\n @if (n.isRead) {\r\n <button type=\"button\" class=\"notification-item-delete\" (click)=\"deleteReadNotification($event, n)\" [title]=\"deleteNotificationTitle\">\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </p-popover>\r\n}\r\n", styles: [":host{display:inline-flex}.notification-bell-btn{position:relative;border:0;background:transparent;cursor:pointer;width:2.25rem;height:2.25rem;border-radius:999px;color:inherit}.notification-bell-btn:hover{background:color-mix(in srgb,var(--wuic-accent, #3b82f6) 12%,transparent)}.notification-bell-badge{position:absolute;top:-.2rem;right:-.2rem;min-width:1.1rem;height:1.1rem;padding:0 .2rem;border-radius:999px;background:#ef4444;color:#fff;font-size:.68rem;line-height:1.1rem;text-align:center}.notification-panel{display:flex;flex-direction:column;gap:.35rem}.notification-panel-header-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.notification-panel-header{font-weight:700}.notification-panel-actions{display:flex;align-items:center;gap:.5rem}.notification-clear-read-btn,.notification-mark-all-btn{border:0;background:transparent;color:var(--wuic-accent, #3b82f6);cursor:pointer;font-size:.85rem;padding:.2rem .45rem;border-radius:.35rem}.notification-clear-read-btn:hover,.notification-mark-all-btn:hover{background:color-mix(in srgb,var(--wuic-accent, #3b82f6) 12%,transparent)}.notification-mark-all-btn{font-weight:600}.notification-empty{color:var(--wuic-text-muted, #64748b);padding:.5rem 0}.notification-item{display:flex;align-items:flex-start;gap:.4rem;border:1px solid var(--wuic-border, #dbe2ef);border-radius:.5rem;background:var(--wuic-surface, #fff);padding:.4rem}.notification-item:hover{border-color:color-mix(in srgb,var(--wuic-accent, #3b82f6) 40%,var(--wuic-border, #dbe2ef))}.notification-item-unread{border-left:4px solid var(--wuic-accent, #3b82f6)}.notification-item-message{font-size:.95rem;line-height:1.25rem}.notification-item-open{flex:1;border:0;background:transparent;text-align:left;cursor:pointer;padding:.15rem}.notification-item-delete{border:0;background:transparent;color:var(--wuic-text-muted, #64748b);cursor:pointer;width:1.8rem;height:1.8rem;border-radius:999px;margin-top:.05rem}.notification-item-delete:hover{background:#ef44441f;color:#b91c1c}.notification-item-meta{margin-top:.25rem;color:var(--wuic-text-muted, #64748b);font-size:.78rem}.notification-item-progress{margin-top:.35rem}:host ::ng-deep .notification-item-progress .p-progressbar .p-progressbar-value,:host ::ng-deep .notification-item-progress .p-progressbar-value{transition:none!important}.notification-item-progress-text{margin-top:.2rem;text-align:right;color:var(--wuic-text-muted, #64748b);font-size:.74rem;font-weight:600}.notification-item-clickable{background:linear-gradient(to right,color-mix(in srgb,var(--wuic-accent, #3b82f6) 6%,transparent),color-mix(in srgb,var(--wuic-accent, #3b82f6) 2%,transparent));border-color:color-mix(in srgb,var(--wuic-accent, #3b82f6) 35%,transparent)}.notification-item-clickable:hover{background:linear-gradient(to right,color-mix(in srgb,var(--wuic-accent, #3b82f6) 14%,transparent),color-mix(in srgb,var(--wuic-accent, #3b82f6) 6%,transparent));border-color:var(--wuic-accent, #3b82f6);box-shadow:0 1px 3px color-mix(in srgb,var(--wuic-accent, #3b82f6) 15%,transparent)}.notification-item-clickable .notification-item-message{color:var(--wuic-accent, #3b82f6);font-weight:500;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.notification-item-chevron{color:var(--wuic-accent, #3b82f6);font-size:.9rem;flex-shrink:0;opacity:.75;transition:transform .15s ease-out,opacity .15s ease-out}.notification-item-clickable:hover .notification-item-chevron{opacity:1;transform:translate(2px)}.notification-item:not(.notification-item-clickable) .notification-item-open{cursor:default}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i5$5.Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions", "motionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: ProgressBarModule }, { kind: "component", type: i6$3.ProgressBar, selector: "p-progressBar, p-progressbar, p-progress-bar", inputs: ["value", "showValue", "styleClass", "valueStyleClass", "unit", "mode", "color"] }, { kind: "pipe", type: DatePipe, name: "date" }] });
64410
64459
  }
64411
64460
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NotificationBellComponent, decorators: [{
64412
64461
  type: Component,
64413
- args: [{ selector: 'wuic-notification-bell', imports: [DatePipe, ButtonModule, PopoverModule, ProgressBarModule], template: "@if (isVisible) {\r\n <button type=\"button\" class=\"notification-bell-btn\" (click)=\"notificationPanel.toggle($event)\"\r\n [attr.aria-label]=\"title || 'Notifiche'\" [attr.title]=\"title || 'Notifiche'\">\r\n <i class=\"pi pi-bell\"></i>\r\n @if (unreadCount > 0) {\r\n <span class=\"notification-bell-badge\">{{ unreadCount }}</span>\r\n }\r\n </button>\r\n\r\n <p-popover #notificationPanel appendTo=\"body\" [style]=\"{ width: '26rem', maxWidth: '92vw' }\">\r\n <div class=\"notification-panel\">\r\n <div class=\"notification-panel-header-row\">\r\n <div class=\"notification-panel-header\">{{ title }}</div>\r\n @if (notifications.length) {\r\n <div class=\"notification-panel-actions\">\r\n @if (unreadCount > 0) {\r\n <button type=\"button\" class=\"notification-mark-all-btn\" (click)=\"markAllRead()\" [title]=\"markAllReadLabel\">{{ markAllReadLabel }}</button>\r\n }\r\n <button type=\"button\" class=\"notification-clear-read-btn\" (click)=\"clearRead()\">{{ clearReadLabel }}</button>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!notifications.length) {\r\n <div class=\"notification-empty\">{{ emptyMessage }}</div>\r\n }\r\n\r\n @for (n of notifications; track n.id) {\r\n <div class=\"notification-item\"\r\n [class.notification-item-unread]=\"!n.isRead\"\r\n [class.notification-item-clickable]=\"isClickable(n)\">\r\n <button type=\"button\" class=\"notification-item-open\" (click)=\"openNotification(n)\">\r\n <div class=\"notification-item-message\">\r\n {{ n.message }}\r\n @if (isClickable(n)) {\r\n <i class=\"pi pi-angle-right notification-item-chevron\" aria-hidden=\"true\"></i>\r\n }\r\n </div>\r\n @if (getNotificationProgress(n) !== null) {\r\n <div class=\"notification-item-progress\">\r\n <p-progressbar [value]=\"getNotificationProgress(n) || 0\"></p-progressbar>\r\n <div class=\"notification-item-progress-text\">{{ (getNotificationProgress(n) || 0).toFixed(2) }}%</div>\r\n </div>\r\n }\r\n <div class=\"notification-item-meta\">{{ n.type }} \u00B7 {{ n.createdAt | date:'dd/MM/yyyy HH:mm' }}</div>\r\n </button>\r\n @if (n.isRead) {\r\n <button type=\"button\" class=\"notification-item-delete\" (click)=\"deleteReadNotification($event, n)\" [title]=\"deleteNotificationTitle\">\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </p-popover>\r\n}\r\n", styles: [":host{display:inline-flex}.notification-bell-btn{position:relative;border:0;background:transparent;cursor:pointer;width:2.25rem;height:2.25rem;border-radius:999px;color:inherit}.notification-bell-btn:hover{background:color-mix(in srgb,var(--wuic-accent, #3b82f6) 12%,transparent)}.notification-bell-badge{position:absolute;top:-.2rem;right:-.2rem;min-width:1.1rem;height:1.1rem;padding:0 .2rem;border-radius:999px;background:#ef4444;color:#fff;font-size:.68rem;line-height:1.1rem;text-align:center}.notification-panel{display:flex;flex-direction:column;gap:.35rem}.notification-panel-header-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.notification-panel-header{font-weight:700}.notification-panel-actions{display:flex;align-items:center;gap:.5rem}.notification-clear-read-btn,.notification-mark-all-btn{border:0;background:transparent;color:var(--wuic-accent, #3b82f6);cursor:pointer;font-size:.85rem;padding:.2rem .45rem;border-radius:.35rem}.notification-clear-read-btn:hover,.notification-mark-all-btn:hover{background:color-mix(in srgb,var(--wuic-accent, #3b82f6) 12%,transparent)}.notification-mark-all-btn{font-weight:600}.notification-empty{color:var(--wuic-text-muted, #64748b);padding:.5rem 0}.notification-item{display:flex;align-items:flex-start;gap:.4rem;border:1px solid var(--wuic-border, #dbe2ef);border-radius:.5rem;background:var(--wuic-surface, #fff);padding:.4rem}.notification-item:hover{border-color:color-mix(in srgb,var(--wuic-accent, #3b82f6) 40%,var(--wuic-border, #dbe2ef))}.notification-item-unread{border-left:4px solid var(--wuic-accent, #3b82f6)}.notification-item-message{font-size:.95rem;line-height:1.25rem}.notification-item-open{flex:1;border:0;background:transparent;text-align:left;cursor:pointer;padding:.15rem}.notification-item-delete{border:0;background:transparent;color:var(--wuic-text-muted, #64748b);cursor:pointer;width:1.8rem;height:1.8rem;border-radius:999px;margin-top:.05rem}.notification-item-delete:hover{background:#ef44441f;color:#b91c1c}.notification-item-meta{margin-top:.25rem;color:var(--wuic-text-muted, #64748b);font-size:.78rem}.notification-item-progress{margin-top:.35rem}:host ::ng-deep .notification-item-progress .p-progressbar .p-progressbar-value,:host ::ng-deep .notification-item-progress .p-progressbar-value{transition:none!important}.notification-item-progress-text{margin-top:.2rem;text-align:right;color:var(--wuic-text-muted, #64748b);font-size:.74rem;font-weight:600}.notification-item-clickable{background:linear-gradient(to right,color-mix(in srgb,var(--wuic-accent, #3b82f6) 6%,transparent),color-mix(in srgb,var(--wuic-accent, #3b82f6) 2%,transparent));border-color:color-mix(in srgb,var(--wuic-accent, #3b82f6) 35%,transparent)}.notification-item-clickable:hover{background:linear-gradient(to right,color-mix(in srgb,var(--wuic-accent, #3b82f6) 14%,transparent),color-mix(in srgb,var(--wuic-accent, #3b82f6) 6%,transparent));border-color:var(--wuic-accent, #3b82f6);box-shadow:0 1px 3px color-mix(in srgb,var(--wuic-accent, #3b82f6) 15%,transparent)}.notification-item-clickable .notification-item-message{color:var(--wuic-accent, #3b82f6);font-weight:500;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.notification-item-chevron{color:var(--wuic-accent, #3b82f6);font-size:.9rem;flex-shrink:0;opacity:.75;transition:transform .15s ease-out,opacity .15s ease-out}.notification-item-clickable:hover .notification-item-chevron{opacity:1;transform:translate(2px)}.notification-item:not(.notification-item-clickable) .notification-item-open{cursor:default}\n"] }]
64462
+ args: [{ selector: 'wuic-notification-bell', imports: [DatePipe, ButtonModule, PopoverModule, ProgressBarModule], template: "@if (isVisible) {\r\n <button type=\"button\" class=\"notification-bell-btn\" (click)=\"notificationPanel.toggle($event)\"\r\n [attr.aria-label]=\"title || 'Notifiche'\" [attr.title]=\"title || 'Notifiche'\">\r\n <i class=\"pi pi-bell\"></i>\r\n @if (unreadCount > 0) {\r\n <span class=\"notification-bell-badge\">{{ unreadCount }}</span>\r\n }\r\n </button>\r\n\r\n <p-popover #notificationPanel appendTo=\"body\" [style]=\"{ width: '26rem', maxWidth: '92vw' }\">\r\n <div class=\"notification-panel\">\r\n <div class=\"notification-panel-header-row\">\r\n <div class=\"notification-panel-header\">{{ title }}</div>\r\n @if (notifications.length) {\r\n <div class=\"notification-panel-actions\">\r\n @if (unreadCount > 0) {\r\n <button type=\"button\" class=\"notification-mark-all-btn\" (click)=\"markAllRead()\" [title]=\"markAllReadLabel\">{{ markAllReadLabel }}</button>\r\n }\r\n <button type=\"button\" class=\"notification-clear-read-btn\" (click)=\"clearRead()\">{{ clearReadLabel }}</button>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!notifications.length) {\r\n <div class=\"notification-empty\">{{ emptyMessage }}</div>\r\n }\r\n\r\n @for (n of notifications; track n.id) {\r\n <div class=\"notification-item\"\r\n [class.notification-item-unread]=\"!n.isRead\"\r\n [class.notification-item-clickable]=\"isClickable(n)\">\r\n <button type=\"button\" class=\"notification-item-open\" (click)=\"openNotification(n)\">\r\n <div class=\"notification-item-message\">\r\n {{ n.message }}\r\n @if (isClickable(n)) {\r\n <i class=\"pi pi-angle-right notification-item-chevron\" aria-hidden=\"true\"></i>\r\n }\r\n </div>\r\n @if (getNotificationProgress(n) !== null) {\r\n <div class=\"notification-item-progress\">\r\n <p-progressbar [value]=\"getNotificationProgress(n) || 0\"></p-progressbar>\r\n <div class=\"notification-item-progress-text\">{{ getNotificationQueueText(n) || ((getNotificationProgress(n) || 0).toFixed(2) + '%') }}</div>\r\n </div>\r\n }\r\n <div class=\"notification-item-meta\">{{ n.type }} \u00B7 {{ n.createdAt | date:'dd/MM/yyyy HH:mm' }}</div>\r\n </button>\r\n @if (n.isRead) {\r\n <button type=\"button\" class=\"notification-item-delete\" (click)=\"deleteReadNotification($event, n)\" [title]=\"deleteNotificationTitle\">\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </p-popover>\r\n}\r\n", styles: [":host{display:inline-flex}.notification-bell-btn{position:relative;border:0;background:transparent;cursor:pointer;width:2.25rem;height:2.25rem;border-radius:999px;color:inherit}.notification-bell-btn:hover{background:color-mix(in srgb,var(--wuic-accent, #3b82f6) 12%,transparent)}.notification-bell-badge{position:absolute;top:-.2rem;right:-.2rem;min-width:1.1rem;height:1.1rem;padding:0 .2rem;border-radius:999px;background:#ef4444;color:#fff;font-size:.68rem;line-height:1.1rem;text-align:center}.notification-panel{display:flex;flex-direction:column;gap:.35rem}.notification-panel-header-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.notification-panel-header{font-weight:700}.notification-panel-actions{display:flex;align-items:center;gap:.5rem}.notification-clear-read-btn,.notification-mark-all-btn{border:0;background:transparent;color:var(--wuic-accent, #3b82f6);cursor:pointer;font-size:.85rem;padding:.2rem .45rem;border-radius:.35rem}.notification-clear-read-btn:hover,.notification-mark-all-btn:hover{background:color-mix(in srgb,var(--wuic-accent, #3b82f6) 12%,transparent)}.notification-mark-all-btn{font-weight:600}.notification-empty{color:var(--wuic-text-muted, #64748b);padding:.5rem 0}.notification-item{display:flex;align-items:flex-start;gap:.4rem;border:1px solid var(--wuic-border, #dbe2ef);border-radius:.5rem;background:var(--wuic-surface, #fff);padding:.4rem}.notification-item:hover{border-color:color-mix(in srgb,var(--wuic-accent, #3b82f6) 40%,var(--wuic-border, #dbe2ef))}.notification-item-unread{border-left:4px solid var(--wuic-accent, #3b82f6)}.notification-item-message{font-size:.95rem;line-height:1.25rem}.notification-item-open{flex:1;border:0;background:transparent;text-align:left;cursor:pointer;padding:.15rem}.notification-item-delete{border:0;background:transparent;color:var(--wuic-text-muted, #64748b);cursor:pointer;width:1.8rem;height:1.8rem;border-radius:999px;margin-top:.05rem}.notification-item-delete:hover{background:#ef44441f;color:#b91c1c}.notification-item-meta{margin-top:.25rem;color:var(--wuic-text-muted, #64748b);font-size:.78rem}.notification-item-progress{margin-top:.35rem}:host ::ng-deep .notification-item-progress .p-progressbar .p-progressbar-value,:host ::ng-deep .notification-item-progress .p-progressbar-value{transition:none!important}.notification-item-progress-text{margin-top:.2rem;text-align:right;color:var(--wuic-text-muted, #64748b);font-size:.74rem;font-weight:600}.notification-item-clickable{background:linear-gradient(to right,color-mix(in srgb,var(--wuic-accent, #3b82f6) 6%,transparent),color-mix(in srgb,var(--wuic-accent, #3b82f6) 2%,transparent));border-color:color-mix(in srgb,var(--wuic-accent, #3b82f6) 35%,transparent)}.notification-item-clickable:hover{background:linear-gradient(to right,color-mix(in srgb,var(--wuic-accent, #3b82f6) 14%,transparent),color-mix(in srgb,var(--wuic-accent, #3b82f6) 6%,transparent));border-color:var(--wuic-accent, #3b82f6);box-shadow:0 1px 3px color-mix(in srgb,var(--wuic-accent, #3b82f6) 15%,transparent)}.notification-item-clickable .notification-item-message{color:var(--wuic-accent, #3b82f6);font-weight:500;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.notification-item-chevron{color:var(--wuic-accent, #3b82f6);font-size:.9rem;flex-shrink:0;opacity:.75;transition:transform .15s ease-out,opacity .15s ease-out}.notification-item-clickable:hover .notification-item-chevron{opacity:1;transform:translate(2px)}.notification-item:not(.notification-item-clickable) .notification-item-open{cursor:default}\n"] }]
64414
64463
  }], ctorParameters: () => [{ type: NotificationRealtimeService }, { type: i1$2.Router }, { type: TranslationManagerService }, { type: AuthSessionService }], propDecorators: { userId: [{
64415
64464
  type: Input
64416
64465
  }], title: [{
@@ -64472,7 +64521,7 @@ class DesignerRouteComponent {
64472
64521
  * Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
64473
64522
  */
64474
64523
  async ngOnInit() {
64475
- designerComponentPromise ??= import('./wuic-framework-lib-designer.component-DZ7C9ygB.mjs').then((m) => m.DesignerComponent);
64524
+ designerComponentPromise ??= import('./wuic-framework-lib-designer.component-jWS88Z6N.mjs').then((m) => m.DesignerComponent);
64476
64525
  this.loadedComponent = await designerComponentPromise;
64477
64526
  }
64478
64527
  /**
@@ -64553,7 +64602,7 @@ class LazyPivotBuilderComponent {
64553
64602
  this.cdr = cdr;
64554
64603
  }
64555
64604
  async ngOnInit() {
64556
- pivotBuilderComponentPromise ??= import('./wuic-framework-lib-pivot-builder.component-CrJUJDxX.mjs').then((m) => m.PivotBuilderComponent);
64605
+ pivotBuilderComponentPromise ??= import('./wuic-framework-lib-pivot-builder.component-Bie3oqY9.mjs').then((m) => m.PivotBuilderComponent);
64557
64606
  this.loadedComponent = await pivotBuilderComponentPromise;
64558
64607
  this.cdr.markForCheck();
64559
64608
  }
@@ -64592,7 +64641,7 @@ class WorkflowDesignerRouteComponent {
64592
64641
  * Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
64593
64642
  */
64594
64643
  async ngOnInit() {
64595
- workflowDesignerComponentPromise ??= import('./wuic-framework-lib-workflow-designer.component-CETZSZzu.mjs').then((m) => m.WorkflowDesignerComponent);
64644
+ workflowDesignerComponentPromise ??= import('./wuic-framework-lib-workflow-designer.component-euretE8u.mjs').then((m) => m.WorkflowDesignerComponent);
64596
64645
  this.loadedComponent = await workflowDesignerComponentPromise;
64597
64646
  }
64598
64647
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: WorkflowDesignerRouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -64638,7 +64687,7 @@ class Scene3dDesignerRouteComponent {
64638
64687
  /** Componente designer runtime caricato lazy, usato dal template. */
64639
64688
  loadedComponent = null;
64640
64689
  async ngOnInit() {
64641
- scene3dDesignerComponentPromise ??= import('./wuic-framework-lib-scene3d-designer.component-DLcruDYB.mjs').then(function (n) { return n.s; }).then((m) => m.Scene3dDesignerComponent);
64690
+ scene3dDesignerComponentPromise ??= import('./wuic-framework-lib-scene3d-designer.component-Bc-_NNcX.mjs').then(function (n) { return n.s; }).then((m) => m.Scene3dDesignerComponent);
64642
64691
  this.loadedComponent = await scene3dDesignerComponentPromise;
64643
64692
  }
64644
64693
  /** Delega al designer runtime la conferma navigazione con pending changes. */
@@ -64694,7 +64743,7 @@ class Scene3dViewerRouteComponent {
64694
64743
  /** Componente viewer runtime caricato lazy, usato dal template. */
64695
64744
  loadedComponent = null;
64696
64745
  async ngOnInit() {
64697
- scene3dViewerComponentPromise ??= import('./wuic-framework-lib-scene3d-viewer.component-DA47y9vo.mjs').then((m) => m.Scene3dViewerComponent);
64746
+ scene3dViewerComponentPromise ??= import('./wuic-framework-lib-scene3d-viewer.component-jbV7-Xy8.mjs').then((m) => m.Scene3dViewerComponent);
64698
64747
  this.loadedComponent = await scene3dViewerComponentPromise;
64699
64748
  }
64700
64749
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Scene3dViewerRouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -64755,7 +64804,7 @@ class LazyReportDesignerComponent {
64755
64804
  this.cdr = cdr;
64756
64805
  }
64757
64806
  async ngOnInit() {
64758
- reportDesignerComponentPromise ??= import('./wuic-framework-lib-report-designer.component-urOz2Pq8.mjs').then((m) => m.ReportDesignerComponent);
64807
+ reportDesignerComponentPromise ??= import('./wuic-framework-lib-report-designer.component-CDIPEVkI.mjs').then((m) => m.ReportDesignerComponent);
64759
64808
  this.loadedComponent = await reportDesignerComponentPromise;
64760
64809
  this.cdr.markForCheck();
64761
64810
  }
@@ -64810,7 +64859,7 @@ class LazyReportViewerComponent {
64810
64859
  this.cdr = cdr;
64811
64860
  }
64812
64861
  async ngOnInit() {
64813
- reportViewerComponentPromise ??= import('./wuic-framework-lib-report-viewer.component-CCpUOyb4.mjs').then((m) => m.ReportViewerComponent);
64862
+ reportViewerComponentPromise ??= import('./wuic-framework-lib-report-viewer.component-BFw7SVe3.mjs').then((m) => m.ReportViewerComponent);
64814
64863
  this.loadedComponent = await reportViewerComponentPromise;
64815
64864
  this.cdr.markForCheck();
64816
64865
  }
@@ -69136,7 +69185,7 @@ const themeBuilderPendingChangesGuard = (component) => {
69136
69185
  const routes = [
69137
69186
  {
69138
69187
  path: 'framework-docs',
69139
- loadComponent: () => import('./wuic-framework-lib-framework-docs.component-CX4DuW-Q.mjs').then((m) => m.FrameworkDocsComponent),
69188
+ loadComponent: () => import('./wuic-framework-lib-framework-docs.component-fMNH_vI8.mjs').then((m) => m.FrameworkDocsComponent),
69140
69189
  canMatch: [menuRouteAccessCanMatchGuard],
69141
69190
  canActivate: [menuRouteAccessCanActivateGuard],
69142
69191
  data: {
@@ -69145,7 +69194,7 @@ const routes = [
69145
69194
  },
69146
69195
  {
69147
69196
  path: 'framework-docs/:slug',
69148
- loadComponent: () => import('./wuic-framework-lib-framework-docs.component-CX4DuW-Q.mjs').then((m) => m.FrameworkDocsComponent),
69197
+ loadComponent: () => import('./wuic-framework-lib-framework-docs.component-fMNH_vI8.mjs').then((m) => m.FrameworkDocsComponent),
69149
69198
  canMatch: [menuRouteAccessCanMatchGuard],
69150
69199
  canActivate: [menuRouteAccessCanActivateGuard],
69151
69200
  data: {
@@ -69190,7 +69239,7 @@ const routes = [
69190
69239
  },
69191
69240
  {
69192
69241
  path: ':route/report-designer',
69193
- loadComponent: () => import('./wuic-framework-lib-report-designer.component-urOz2Pq8.mjs').then((m) => m.ReportDesignerComponent),
69242
+ loadComponent: () => import('./wuic-framework-lib-report-designer.component-CDIPEVkI.mjs').then((m) => m.ReportDesignerComponent),
69194
69243
  canMatch: [menuRouteAccessCanMatchGuard, featureRouteCanMatchGuard],
69195
69244
  canActivate: [menuRouteAccessCanActivateGuard, featureRouteCanActivateGuard],
69196
69245
  data: {
@@ -69200,7 +69249,7 @@ const routes = [
69200
69249
  },
69201
69250
  {
69202
69251
  path: ':route/report-viewer',
69203
- loadComponent: () => import('./wuic-framework-lib-report-viewer.component-CCpUOyb4.mjs').then((m) => m.ReportViewerComponent),
69252
+ loadComponent: () => import('./wuic-framework-lib-report-viewer.component-BFw7SVe3.mjs').then((m) => m.ReportViewerComponent),
69204
69253
  canMatch: [menuRouteAccessCanMatchGuard],
69205
69254
  canActivate: [menuRouteAccessCanActivateGuard],
69206
69255
  data: {
@@ -69220,7 +69269,7 @@ const routes = [
69220
69269
  },
69221
69270
  {
69222
69271
  path: ':route/pivot-builder',
69223
- loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-CrJUJDxX.mjs').then((m) => m.PivotBuilderComponent),
69272
+ loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-Bie3oqY9.mjs').then((m) => m.PivotBuilderComponent),
69224
69273
  canMatch: [menuRouteAccessCanMatchGuard, featureRouteCanMatchGuard],
69225
69274
  canActivate: [menuRouteAccessCanActivateGuard, featureRouteCanActivateGuard],
69226
69275
  data: {
@@ -69230,7 +69279,7 @@ const routes = [
69230
69279
  },
69231
69280
  {
69232
69281
  path: 'pivot-builder',
69233
- loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-CrJUJDxX.mjs').then((m) => m.PivotBuilderComponent),
69282
+ loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-Bie3oqY9.mjs').then((m) => m.PivotBuilderComponent),
69234
69283
  canMatch: [menuRouteAccessCanMatchGuard, featureRouteCanMatchGuard],
69235
69284
  canActivate: [menuRouteAccessCanActivateGuard, featureRouteCanActivateGuard],
69236
69285
  data: {
@@ -71330,4 +71379,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
71330
71379
  */
71331
71380
 
71332
71381
  export { DEFAULT_THEME_STORAGE_KEY as $, ArchetypeConfiguratorComponent as A, AppSettingsEditorComponent as B, ChatbotHostRegistryService as C, DynamicGenericTemplateComponent as D, AuthSessionService as E, FilterBarComponent as F, GlobalHandler as G, BooleanEditorComponent as H, ImportExportButtonComponent as I, BoundedRepeaterComponent as J, ButtonEditorComponent as K, LazyParametricDialogComponent as L, MetadataProviderService as M, CUSTOM_THEMES_STORAGE_KEY as N, CallbackPipe as O, PagerComponent as P, CallbackPipe2 as Q, CarouselListComponent as R, CodeAreaEditorComponent as S, TranslationManagerService as T, UserInfoService as U, ColorEditorComponent as V, WtoolboxService as W, CrashReporterService as X, CustomAttributesService as Y, CustomException as Z, DEFAULT_FONT_STACK as _, DynamicCompilerService as a, UserLanguageService as a$, DEFAULT_THEME_VALUE as a0, DataActionButtonComponent as a1, DataProviderOdataService as a2, DateEditorComponent as a3, DesignerRouteComponent as a4, DictionaryEditorComponent as a5, DynamicRowTemplateComponent as a6, FormatGridViewValuePipe as a7, GetSrcUploadPreviewPipe as a8, HtmlEditorComponent as a9, NotificationRealtimeService as aA, NumberEditorComponent as aB, PALETTE_STOPS as aC, PREVIEW_RESTORE_KEY as aD, PRIMARY_PALETTES as aE, PerformanceInspectorComponent as aF, PointFilterComponent as aG, PropertyArrayEditorComponent as aH, PropertyObjectEditorComponent as aI, RAG_DESTRUCTIVE_KINDS as aJ, RouteMetricsDashboardComponent as aK, Scene3dDesignerRouteComponent as aL, Scene3dViewerRouteComponent as aM, THEME_MODE_STORAGE_KEY as aN, THEME_OPTIONS as aO, THEME_STORAGE_KEY as aP, TextAreaEditorComponent as aQ, TextEditorComponent as aR, ThemeBuilderComponent as aS, ThemeCatalogService as aT, ThemePreviewPanelComponent as aU, ThemeRuntimeService as aV, ThemeSelectorComponent as aW, TreeListComponent as aX, TreeViewSelectorComponent as aY, UploadDialogComponent as aZ, UploadEditorComponent as a_, ImageWrapperComponent as aa, IsSelectedRowPipe as ab, KanbanListComponent as ac, KanbanOptions as ad, KanbanStatusColumnItem as ae, LazyChartListComponent as af, LazyCodeEditorComponent as ag, LazyDataActionButtonComponent as ah, LazyDataSourceComponent as ai, LazyFieldEditorComponent as aj, LazyFirstRunWizardComponent as ak, LazyImageWrapperComponent as al, LazyKanbanListComponent as am, LazyMetaMenuComponent as an, LazyPivotBuilderComponent as ao, LazyReportDesignerComponent as ap, LazyReportViewerComponent as aq, LazySchedulerListComponent as ar, LazySpreadsheetListSfComponent as as, LazyTimelineListComponent as at, ListGridComponent as au, LookupEditorComponent as av, MapListComponent as aw, MetaMenuComponent as ax, MetadatiTabella as ay, NotificationBellComponent as az, DataSourceComponent as b, resolveThemePreset as b$, UserMenuComponent as b0, ValidationRule as b1, ValueChangedPayload as b2, VisibleFieldListPipe as b3, WUIC_FONT_CATALOG as b4, WidgetDefinition as b5, WorkflowDesignerRouteComponent as b6, WorkflowRunnerComponent as b7, WuicAziendaSwitcherComponent as b8, WuicErrorDialogComponent as b9, isCustomThemeValue as bA, isDestructiveRagAction as bB, isRoutePersistenceEnabled as bC, loadBooleanEditorComponent as bD, loadButtonEditorComponent as bE, loadCodeAreaEditorComponent as bF, loadColorEditorComponent as bG, loadDateEditorComponent as bH, loadDictionaryEditorComponent as bI, loadHtmlEditorComponent as bJ, loadLookupEditorComponent as bK, loadNumberEditorComponent as bL, loadPropertyArrayEditorComponent as bM, loadPropertyObjectEditorComponent as bN, loadTextAreaEditorComponent as bO, loadTextEditorComponent as bP, loadTreeViewSelectorComponent as bQ, loadUploadEditorComponent as bR, menuRouteAccessCanActivateGuard as bS, menuRouteAccessCanMatchGuard as bT, nearestPrimaryName as bU, normalizeHex$1 as bV, oklchToHex as bW, oklchToRgb as bX, resolveBackgroundCss as bY, resolveFontStack as bZ, resolveGridStrengths as b_, WuicErrorInterceptor as ba, WuicFeatureDirective as bb, WuicFrozenColumnDirective as bc, WuicRagChatbotComponent as bd, WuicRagChatbotFabComponent as be, WuicRagService as bf, WuicRowTogglerDirective as bg, _PRIMENG_TABLE_DIRECTIVES_NAMES as bh, authExpiredInterceptor as bi, bestContrastColor as bj, boundedRepeaterPendingChangesGuard as bk, buildCustomPreset as bl, buildThemeValue as bm, computeDataQualitySummary as bn, contrastRatio as bo, createDraftTheme as bp, featureRouteCanActivateGuard as bq, featureRouteCanMatchGuard as br, generatePrimaryPalette as bs, generateSurfacePalette as bt, getQualityInspectorOptions as bu, getThemePrimaryHex as bv, hexToOklch as bw, hexToRgb as bx, hsbaToRgbaString as by, inferTemplateFieldFromBaseClass as bz, DataRepeaterComponent as c, resolveThemePresetForOption as c0, rgbToHex as c1, rgbToOklch as c2, rgbaToHsbaModel as c3, routeMetricsClient as c4, routes as c5, scene3dDesignerPendingChangesGuard as c6, themeBuilderPendingChangesGuard as c7, wcagLevel as c8, wuicErrorInterceptor as c9, parametricDialog_component as ca, clampAlpha as d, toPersistedColor as e, exposeWuicCmpOnHost as f, ParametricDialogComponent as g, MetadatiColonna as h, DataProviderService as i, MetadataEditorService as j, WorkflowRuntimeMetadataService as k, FieldEditorComponent as l, MetadataEditorComponent as m, WuicClientException as n, WuicErrorCodes as o, MetaInfo as p, WUIC_SUPPRESS_GLOBAL_ERROR as q, FilterInfo as r, LicenseFeatureService as s, toHsbaModel as t, FilterItem as u, TimelineOptions as v, getThemeOptions as w, AUTH_REDIRECT_REASON_KEY as x, AppHeaderComponent as y, AppHeaderConfigService as z };
71333
- //# sourceMappingURL=wuic-framework-lib-wuic-framework-lib-CRUM1gc_.mjs.map
71382
+ //# sourceMappingURL=wuic-framework-lib-wuic-framework-lib-BXteb2PD.mjs.map
@@ -1,2 +1,2 @@
1
- export { x as AUTH_REDIRECT_REASON_KEY, y as AppHeaderComponent, z as AppHeaderConfigService, B as AppSettingsEditorComponent, E as AuthSessionService, H as BooleanEditorComponent, J as BoundedRepeaterComponent, K as ButtonEditorComponent, N as CUSTOM_THEMES_STORAGE_KEY, O as CallbackPipe, Q as CallbackPipe2, R as CarouselListComponent, S as CodeAreaEditorComponent, V as ColorEditorComponent, X as CrashReporterService, Y as CustomAttributesService, Z as CustomException, _ as DEFAULT_FONT_STACK, $ as DEFAULT_THEME_STORAGE_KEY, a0 as DEFAULT_THEME_VALUE, a1 as DataActionButtonComponent, a2 as DataProviderOdataService, c as DataRepeaterComponent, b as DataSourceComponent, a3 as DateEditorComponent, a4 as DesignerRouteComponent, a5 as DictionaryEditorComponent, a as DynamicCompilerService, a6 as DynamicRowTemplateComponent, l as FieldEditorComponent, F as FilterBarComponent, r as FilterInfo, a7 as FormatGridViewValuePipe, a8 as GetSrcUploadPreviewPipe, G as GlobalHandler, a9 as HtmlEditorComponent, aa as ImageWrapperComponent, I as ImportExportButtonComponent, ab as IsSelectedRowPipe, ac as KanbanListComponent, ad as KanbanOptions, ae as KanbanStatusColumnItem, af as LazyChartListComponent, ag as LazyCodeEditorComponent, ah as LazyDataActionButtonComponent, ai as LazyDataSourceComponent, aj as LazyFieldEditorComponent, ak as LazyFirstRunWizardComponent, al as LazyImageWrapperComponent, am as LazyKanbanListComponent, an as LazyMetaMenuComponent, ao as LazyPivotBuilderComponent, ap as LazyReportDesignerComponent, aq as LazyReportViewerComponent, ar as LazySchedulerListComponent, as as LazySpreadsheetListSfComponent, at as LazyTimelineListComponent, s as LicenseFeatureService, au as ListGridComponent, av as LookupEditorComponent, aw as MapListComponent, p as MetaInfo, ax as MetaMenuComponent, j as MetadataEditorService, M as MetadataProviderService, h as MetadatiColonna, ay as MetadatiTabella, az as NotificationBellComponent, aA as NotificationRealtimeService, aB as NumberEditorComponent, aC as PALETTE_STOPS, aD as PREVIEW_RESTORE_KEY, aE as PRIMARY_PALETTES, P as PagerComponent, g as ParametricDialogComponent, aF as PerformanceInspectorComponent, aG as PointFilterComponent, aH as PropertyArrayEditorComponent, aI as PropertyObjectEditorComponent, aJ as RAG_DESTRUCTIVE_KINDS, aK as RouteMetricsDashboardComponent, aL as Scene3dDesignerRouteComponent, aM as Scene3dViewerRouteComponent, aN as THEME_MODE_STORAGE_KEY, aO as THEME_OPTIONS, aP as THEME_STORAGE_KEY, aQ as TextAreaEditorComponent, aR as TextEditorComponent, aS as ThemeBuilderComponent, aT as ThemeCatalogService, aU as ThemePreviewPanelComponent, aV as ThemeRuntimeService, aW as ThemeSelectorComponent, v as TimelineOptions, T as TranslationManagerService, aX as TreeListComponent, aY as TreeViewSelectorComponent, aZ as UploadDialogComponent, a_ as UploadEditorComponent, U as UserInfoService, a$ as UserLanguageService, b0 as UserMenuComponent, b1 as ValidationRule, b2 as ValueChangedPayload, b3 as VisibleFieldListPipe, b4 as WUIC_FONT_CATALOG, q as WUIC_SUPPRESS_GLOBAL_ERROR, b5 as WidgetDefinition, b6 as WorkflowDesignerRouteComponent, b7 as WorkflowRunnerComponent, k as WorkflowRuntimeMetadataService, W as WtoolboxService, b8 as WuicAziendaSwitcherComponent, b9 as WuicErrorDialogComponent, ba as WuicErrorInterceptor, bb as WuicFeatureDirective, bc as WuicFrozenColumnDirective, bd as WuicRagChatbotComponent, be as WuicRagChatbotFabComponent, bf as WuicRagService, bg as WuicRowTogglerDirective, bh as _PRIMENG_TABLE_DIRECTIVES_NAMES, bi as authExpiredInterceptor, bj as bestContrastColor, bk as boundedRepeaterPendingChangesGuard, bl as buildCustomPreset, bm as buildThemeValue, d as clampAlpha, bn as computeDataQualitySummary, bo as contrastRatio, bp as createDraftTheme, bq as featureRouteCanActivateGuard, br as featureRouteCanMatchGuard, bs as generatePrimaryPalette, bt as generateSurfacePalette, bu as getQualityInspectorOptions, w as getThemeOptions, bv as getThemePrimaryHex, bw as hexToOklch, bx as hexToRgb, by as hsbaToRgbaString, bz as inferTemplateFieldFromBaseClass, bA as isCustomThemeValue, bB as isDestructiveRagAction, bC as isRoutePersistenceEnabled, bD as loadBooleanEditorComponent, bE as loadButtonEditorComponent, bF as loadCodeAreaEditorComponent, bG as loadColorEditorComponent, bH as loadDateEditorComponent, bI as loadDictionaryEditorComponent, bJ as loadHtmlEditorComponent, bK as loadLookupEditorComponent, bL as loadNumberEditorComponent, bM as loadPropertyArrayEditorComponent, bN as loadPropertyObjectEditorComponent, bO as loadTextAreaEditorComponent, bP as loadTextEditorComponent, bQ as loadTreeViewSelectorComponent, bR as loadUploadEditorComponent, bS as menuRouteAccessCanActivateGuard, bT as menuRouteAccessCanMatchGuard, bU as nearestPrimaryName, bV as normalizeHex, bW as oklchToHex, bX as oklchToRgb, bY as resolveBackgroundCss, bZ as resolveFontStack, b_ as resolveGridStrengths, b$ as resolveThemePreset, c0 as resolveThemePresetForOption, c1 as rgbToHex, c2 as rgbToOklch, c3 as rgbaToHsbaModel, c4 as routeMetricsClient, c5 as routes, c6 as scene3dDesignerPendingChangesGuard, c7 as themeBuilderPendingChangesGuard, t as toHsbaModel, e as toPersistedColor, c8 as wcagLevel, c9 as wuicErrorInterceptor } from './wuic-framework-lib-wuic-framework-lib-CRUM1gc_.mjs';
1
+ export { x as AUTH_REDIRECT_REASON_KEY, y as AppHeaderComponent, z as AppHeaderConfigService, B as AppSettingsEditorComponent, E as AuthSessionService, H as BooleanEditorComponent, J as BoundedRepeaterComponent, K as ButtonEditorComponent, N as CUSTOM_THEMES_STORAGE_KEY, O as CallbackPipe, Q as CallbackPipe2, R as CarouselListComponent, S as CodeAreaEditorComponent, V as ColorEditorComponent, X as CrashReporterService, Y as CustomAttributesService, Z as CustomException, _ as DEFAULT_FONT_STACK, $ as DEFAULT_THEME_STORAGE_KEY, a0 as DEFAULT_THEME_VALUE, a1 as DataActionButtonComponent, a2 as DataProviderOdataService, c as DataRepeaterComponent, b as DataSourceComponent, a3 as DateEditorComponent, a4 as DesignerRouteComponent, a5 as DictionaryEditorComponent, a as DynamicCompilerService, a6 as DynamicRowTemplateComponent, l as FieldEditorComponent, F as FilterBarComponent, r as FilterInfo, a7 as FormatGridViewValuePipe, a8 as GetSrcUploadPreviewPipe, G as GlobalHandler, a9 as HtmlEditorComponent, aa as ImageWrapperComponent, I as ImportExportButtonComponent, ab as IsSelectedRowPipe, ac as KanbanListComponent, ad as KanbanOptions, ae as KanbanStatusColumnItem, af as LazyChartListComponent, ag as LazyCodeEditorComponent, ah as LazyDataActionButtonComponent, ai as LazyDataSourceComponent, aj as LazyFieldEditorComponent, ak as LazyFirstRunWizardComponent, al as LazyImageWrapperComponent, am as LazyKanbanListComponent, an as LazyMetaMenuComponent, ao as LazyPivotBuilderComponent, ap as LazyReportDesignerComponent, aq as LazyReportViewerComponent, ar as LazySchedulerListComponent, as as LazySpreadsheetListSfComponent, at as LazyTimelineListComponent, s as LicenseFeatureService, au as ListGridComponent, av as LookupEditorComponent, aw as MapListComponent, p as MetaInfo, ax as MetaMenuComponent, j as MetadataEditorService, M as MetadataProviderService, h as MetadatiColonna, ay as MetadatiTabella, az as NotificationBellComponent, aA as NotificationRealtimeService, aB as NumberEditorComponent, aC as PALETTE_STOPS, aD as PREVIEW_RESTORE_KEY, aE as PRIMARY_PALETTES, P as PagerComponent, g as ParametricDialogComponent, aF as PerformanceInspectorComponent, aG as PointFilterComponent, aH as PropertyArrayEditorComponent, aI as PropertyObjectEditorComponent, aJ as RAG_DESTRUCTIVE_KINDS, aK as RouteMetricsDashboardComponent, aL as Scene3dDesignerRouteComponent, aM as Scene3dViewerRouteComponent, aN as THEME_MODE_STORAGE_KEY, aO as THEME_OPTIONS, aP as THEME_STORAGE_KEY, aQ as TextAreaEditorComponent, aR as TextEditorComponent, aS as ThemeBuilderComponent, aT as ThemeCatalogService, aU as ThemePreviewPanelComponent, aV as ThemeRuntimeService, aW as ThemeSelectorComponent, v as TimelineOptions, T as TranslationManagerService, aX as TreeListComponent, aY as TreeViewSelectorComponent, aZ as UploadDialogComponent, a_ as UploadEditorComponent, U as UserInfoService, a$ as UserLanguageService, b0 as UserMenuComponent, b1 as ValidationRule, b2 as ValueChangedPayload, b3 as VisibleFieldListPipe, b4 as WUIC_FONT_CATALOG, q as WUIC_SUPPRESS_GLOBAL_ERROR, b5 as WidgetDefinition, b6 as WorkflowDesignerRouteComponent, b7 as WorkflowRunnerComponent, k as WorkflowRuntimeMetadataService, W as WtoolboxService, b8 as WuicAziendaSwitcherComponent, b9 as WuicErrorDialogComponent, ba as WuicErrorInterceptor, bb as WuicFeatureDirective, bc as WuicFrozenColumnDirective, bd as WuicRagChatbotComponent, be as WuicRagChatbotFabComponent, bf as WuicRagService, bg as WuicRowTogglerDirective, bh as _PRIMENG_TABLE_DIRECTIVES_NAMES, bi as authExpiredInterceptor, bj as bestContrastColor, bk as boundedRepeaterPendingChangesGuard, bl as buildCustomPreset, bm as buildThemeValue, d as clampAlpha, bn as computeDataQualitySummary, bo as contrastRatio, bp as createDraftTheme, bq as featureRouteCanActivateGuard, br as featureRouteCanMatchGuard, bs as generatePrimaryPalette, bt as generateSurfacePalette, bu as getQualityInspectorOptions, w as getThemeOptions, bv as getThemePrimaryHex, bw as hexToOklch, bx as hexToRgb, by as hsbaToRgbaString, bz as inferTemplateFieldFromBaseClass, bA as isCustomThemeValue, bB as isDestructiveRagAction, bC as isRoutePersistenceEnabled, bD as loadBooleanEditorComponent, bE as loadButtonEditorComponent, bF as loadCodeAreaEditorComponent, bG as loadColorEditorComponent, bH as loadDateEditorComponent, bI as loadDictionaryEditorComponent, bJ as loadHtmlEditorComponent, bK as loadLookupEditorComponent, bL as loadNumberEditorComponent, bM as loadPropertyArrayEditorComponent, bN as loadPropertyObjectEditorComponent, bO as loadTextAreaEditorComponent, bP as loadTextEditorComponent, bQ as loadTreeViewSelectorComponent, bR as loadUploadEditorComponent, bS as menuRouteAccessCanActivateGuard, bT as menuRouteAccessCanMatchGuard, bU as nearestPrimaryName, bV as normalizeHex, bW as oklchToHex, bX as oklchToRgb, bY as resolveBackgroundCss, bZ as resolveFontStack, b_ as resolveGridStrengths, b$ as resolveThemePreset, c0 as resolveThemePresetForOption, c1 as rgbToHex, c2 as rgbToOklch, c3 as rgbaToHsbaModel, c4 as routeMetricsClient, c5 as routes, c6 as scene3dDesignerPendingChangesGuard, c7 as themeBuilderPendingChangesGuard, t as toHsbaModel, e as toPersistedColor, c8 as wcagLevel, c9 as wuicErrorInterceptor } from './wuic-framework-lib-wuic-framework-lib-BXteb2PD.mjs';
2
2
  //# sourceMappingURL=wuic-framework-lib.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wuic-framework-lib",
3
- "version": "1.7.13",
3
+ "version": "1.7.15",
4
4
  "description": "Wuic Angular Framework Library",
5
5
  "author": "Wuic",
6
6
  "license": "MIT",