wuic-framework-lib 1.7.8 → 1.7.10

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-B-qi3f9x.mjs → wuic-framework-lib-chart-list.component-BM4iMVEF.mjs} +2 -2
  2. package/fesm2022/{wuic-framework-lib-code-editor.component-CdZRro82.mjs → wuic-framework-lib-code-editor.component-BhLnfWq3.mjs} +2 -2
  3. package/fesm2022/{wuic-framework-lib-designer.component-NI80qEef.mjs → wuic-framework-lib-designer.component-yPNbRYOE.mjs} +2 -2
  4. package/fesm2022/{wuic-framework-lib-first-run-wizard.component-CZRn9cUV.mjs → wuic-framework-lib-first-run-wizard.component-Cf1BHCvJ.mjs} +2 -2
  5. package/fesm2022/{wuic-framework-lib-framework-docs.component-CreW338k.mjs → wuic-framework-lib-framework-docs.component-DQEh15Vz.mjs} +68 -38
  6. package/fesm2022/{wuic-framework-lib-pivot-builder.component-0iwqvcfZ.mjs → wuic-framework-lib-pivot-builder.component-Df00Yaxo.mjs} +14 -14
  7. package/fesm2022/{wuic-framework-lib-prompt-dialog-fallback-host.component-DFGOpdlV.mjs → wuic-framework-lib-prompt-dialog-fallback-host.component-DExcTKa6.mjs} +2 -2
  8. package/fesm2022/{wuic-framework-lib-report-designer.component-x1qjlyS9.mjs → wuic-framework-lib-report-designer.component-DTFAvjaD.mjs} +2 -2
  9. package/fesm2022/{wuic-framework-lib-report-scaffold-dialog.component-YO8IyqI9.mjs → wuic-framework-lib-report-scaffold-dialog.component-CigGqFfV.mjs} +2 -2
  10. package/fesm2022/{wuic-framework-lib-report-viewer.component-AOhX1ah0.mjs → wuic-framework-lib-report-viewer.component-DKgW13uF.mjs} +2 -2
  11. package/fesm2022/{wuic-framework-lib-scene3d-designer.component-B-9lIpui.mjs → wuic-framework-lib-scene3d-designer.component-Bcih9wqu.mjs} +3 -3
  12. package/fesm2022/{wuic-framework-lib-scene3d-light-baker-gpu-MyzRdukh.mjs → wuic-framework-lib-scene3d-light-baker-gpu-VH-R0E-j.mjs} +2 -2
  13. package/fesm2022/{wuic-framework-lib-scene3d-viewer.component-DHrKs3zg.mjs → wuic-framework-lib-scene3d-viewer.component-CqitWdf-.mjs} +2 -2
  14. package/fesm2022/{wuic-framework-lib-scheduler-list.component-B4Y92Q0p.mjs → wuic-framework-lib-scheduler-list.component-Bhyln-cQ.mjs} +2 -2
  15. package/fesm2022/{wuic-framework-lib-spreadsheet-list-sf.component-BvVnXgfH.mjs → wuic-framework-lib-spreadsheet-list-sf.component-BirgUqOO.mjs} +2 -2
  16. package/fesm2022/{wuic-framework-lib-timeline-list.component-a_KcbMD0.mjs → wuic-framework-lib-timeline-list.component-x3HAhB4G.mjs} +4 -4
  17. package/fesm2022/{wuic-framework-lib-workflow-designer.component-A6g5UefX.mjs → wuic-framework-lib-workflow-designer.component-DLBbgX0s.mjs} +2 -2
  18. package/fesm2022/{wuic-framework-lib-wuic-framework-lib-D4Q320L6.mjs → wuic-framework-lib-wuic-framework-lib-HGQNVwv6.mjs} +238 -82
  19. package/fesm2022/wuic-framework-lib.mjs +1 -1
  20. package/package.json +1 -1
  21. package/types/wuic-framework-lib.d.ts +74 -3
@@ -2400,6 +2400,83 @@ class WtoolboxService {
2400
2400
  }
2401
2401
  };
2402
2402
  static isBusy = new BehaviorSubject(false);
2403
+ /**
2404
+ * Quante operazioni sono in volo su OGNI subject di "occupato".
2405
+ *
2406
+ * Perche' il conteggio sta qui e non nei componenti: `isBusy` e' uno stato condiviso —
2407
+ * list-grid e bounded-repeater lo passano come `loading` ai datasource che creano, quindi
2408
+ * su una singola pagina ci scrivono piu' istanze insieme. Finche' il contatore stava dentro
2409
+ * il singolo datasource, la prima operazione che finiva portava il PROPRIO contatore a zero
2410
+ * ed emetteva `false` sul subject di tutti: aprendo una route lenta con colonne lookup, le
2411
+ * dodici letture di metadata rispondevano in mezzo secondo e spegnevano lo spinner della
2412
+ * griglia che stava ancora aspettando i suoi dati (misurato: maschera via a 1056 ms su una
2413
+ * query che rispondeva a 3822 ms). Un contatore per istanza su uno stato globale funziona
2414
+ * finche' c'e' una cosa sola in volo; alla seconda, chi finisce per primo spegne la luce
2415
+ * a tutti.
2416
+ *
2417
+ * WeakMap: la chiave e' il subject stesso, cosi' un subject locale che nessuno usa piu'
2418
+ * non trattiene una voce.
2419
+ */
2420
+ static operazioniInVoloPerSubject = new WeakMap();
2421
+ /**
2422
+ * Segnala l'inizio di un'operazione su un subject di "occupato".
2423
+ *
2424
+ * @param subject Il subject da portare a `true`. Ignorato se assente.
2425
+ */
2426
+ static beginBusy(subject) {
2427
+ if (!subject?.next) {
2428
+ return;
2429
+ }
2430
+ const inVolo = (WtoolboxService.operazioniInVoloPerSubject.get(subject) || 0) + 1;
2431
+ WtoolboxService.operazioniInVoloPerSubject.set(subject, inVolo);
2432
+ if (inVolo === 1) {
2433
+ subject.next(true);
2434
+ }
2435
+ }
2436
+ /**
2437
+ * Segnala la fine di un'operazione: il subject torna a `false` solo quando finisce
2438
+ * l'ULTIMA operazione in volo, non la prima.
2439
+ *
2440
+ * @param subject Lo stesso subject passato a `beginBusy`. Ignorato se assente.
2441
+ */
2442
+ static endBusy(subject) {
2443
+ if (!subject?.next) {
2444
+ return;
2445
+ }
2446
+ const inVolo = Math.max(0, (WtoolboxService.operazioniInVoloPerSubject.get(subject) || 0) - 1);
2447
+ WtoolboxService.operazioniInVoloPerSubject.set(subject, inVolo);
2448
+ if (inVolo === 0) {
2449
+ subject.next(false);
2450
+ }
2451
+ }
2452
+ /**
2453
+ * Quante operazioni risultano in volo su quel subject. Serve a chi deve rilasciare le
2454
+ * proprie (es. un componente che viene distrutto mentre una fetch e' ancora aperta).
2455
+ *
2456
+ * @param subject Il subject da interrogare.
2457
+ * @returns Il numero di operazioni aperte, 0 se il subject non e' mai stato usato.
2458
+ */
2459
+ static busyCount(subject) {
2460
+ return subject ? (WtoolboxService.operazioniInVoloPerSubject.get(subject) || 0) : 0;
2461
+ }
2462
+ /**
2463
+ * Azzera lo stato "occupato" di quel subject, qualunque cosa risulti in volo.
2464
+ *
2465
+ * E' il ripiego per i percorsi di RECUPERO — il gestore globale degli errori, un annullo
2466
+ * dell'utente — dove non si sa quante operazioni siano rimaste aperte e lasciare la
2467
+ * clessidra accesa bloccherebbe l'interfaccia. Va usato solo li': in un flusso normale
2468
+ * spegne anche le operazioni degli altri, ed e' esattamente il difetto che
2469
+ * `beginBusy`/`endBusy` esistono per evitare.
2470
+ *
2471
+ * @param subject Il subject da riportare a `false`.
2472
+ */
2473
+ static resetBusy(subject) {
2474
+ if (!subject?.next) {
2475
+ return;
2476
+ }
2477
+ WtoolboxService.operazioniInVoloPerSubject.set(subject, 0);
2478
+ subject.next(false);
2479
+ }
2403
2480
  static menuUpdated = new BehaviorSubject(false);
2404
2481
  /**
2405
2482
  * Generic wrapper for invoking user-supplied callbacks compiled from
@@ -3144,7 +3221,7 @@ class WtoolboxService {
3144
3221
  script,
3145
3222
  ' resolve();',
3146
3223
  ' } catch (_err) {',
3147
- ' wtoolbox.isBusy.next(false);',
3224
+ ' wtoolbox.resetBusy(wtoolbox.isBusy);',
3148
3225
  ' reject(_err);',
3149
3226
  ' }',
3150
3227
  '});'
@@ -3341,7 +3418,7 @@ class WtoolboxService {
3341
3418
  const appRef = resolvedInjector.get(ApplicationRef);
3342
3419
  const environmentInjector = resolvedInjector.get(EnvironmentInjector);
3343
3420
  const close$ = new Subject();
3344
- const { PromptDialogFallbackHostComponent } = await import('./wuic-framework-lib-prompt-dialog-fallback-host.component-DFGOpdlV.mjs');
3421
+ const { PromptDialogFallbackHostComponent } = await import('./wuic-framework-lib-prompt-dialog-fallback-host.component-DExcTKa6.mjs');
3345
3422
  const hostRef = createComponent(PromptDialogFallbackHostComponent, { environmentInjector });
3346
3423
  hostRef.instance.datasource = dialogConfig?.data?.datasource;
3347
3424
  hostRef.instance.header = String(dialogConfig?.header || '');
@@ -4797,7 +4874,16 @@ class WtoolboxService {
4797
4874
  return;
4798
4875
  }
4799
4876
  const fragment = {};
4800
- setPathValue(fragment, path.split('.'), clone(templateValue));
4877
+ // Spuntare una foglia BOOLEANA vuol dire accenderla, non copiarne il valore di
4878
+ // esempio. Nel modello di riferimento quei flag stanno quasi tutti a `false` — e'
4879
+ // il loro default a runtime — quindi copiarlo alla lettera produceva il risultato
4880
+ // piu' assurdo possibile: si spunta `advancedFilter`, nel JSON compare
4881
+ // `"advancedFilter": false`, e l'utente deve andare a correggerlo a mano. Chi non
4882
+ // vuole il flag semplicemente non lo spunta: il default vale gia'.
4883
+ // Sui nodi non booleani (oggetti, array, stringhe d'esempio) resta il valore del
4884
+ // modello, che li' serve proprio come traccia da compilare.
4885
+ const valoreDaInserire = (typeof templateValue === 'boolean') ? true : clone(templateValue);
4886
+ setPathValue(fragment, path.split('.'), valoreDaInserire);
4801
4887
  suggestedJson = WtoolboxService.deepMerge(suggestedJson, fragment);
4802
4888
  });
4803
4889
  let existingJson = {};
@@ -4953,7 +5039,16 @@ class WtoolboxService {
4953
5039
  return;
4954
5040
  }
4955
5041
  const fragment = {};
4956
- setPathValue(fragment, path.split('.'), clone(templateValue));
5042
+ // Spuntare una foglia BOOLEANA vuol dire accenderla, non copiarne il valore di
5043
+ // esempio. Nel modello di riferimento quei flag stanno quasi tutti a `false` — e'
5044
+ // il loro default a runtime — quindi copiarlo alla lettera produceva il risultato
5045
+ // piu' assurdo possibile: si spunta `advancedFilter`, nel JSON compare
5046
+ // `"advancedFilter": false`, e l'utente deve andare a correggerlo a mano. Chi non
5047
+ // vuole il flag semplicemente non lo spunta: il default vale gia'.
5048
+ // Sui nodi non booleani (oggetti, array, stringhe d'esempio) resta il valore del
5049
+ // modello, che li' serve proprio come traccia da compilare.
5050
+ const valoreDaInserire = (typeof templateValue === 'boolean') ? true : clone(templateValue);
5051
+ setPathValue(fragment, path.split('.'), valoreDaInserire);
4957
5052
  suggestedJson = WtoolboxService.deepMerge(suggestedJson, fragment);
4958
5053
  });
4959
5054
  record[field.mc_nome_colonna].next(JSON.stringify(suggestedJson, null, 2));
@@ -6333,7 +6428,7 @@ class GlobalHandler {
6333
6428
  GlobalHandler.messageNotification.next({ show: true, exception: cust });
6334
6429
  }
6335
6430
  finally {
6336
- WtoolboxService.isBusy.next(false);
6431
+ WtoolboxService.resetBusy(WtoolboxService.isBusy);
6337
6432
  }
6338
6433
  }
6339
6434
  /**
@@ -8547,7 +8642,7 @@ class MetadataProviderService {
8547
8642
  */
8548
8643
  async getMetas(route, userId, md_id) {
8549
8644
  const metaDb = await MetadataProviderService.generateLocalDB(5);
8550
- WtoolboxService.isBusy.next(true);
8645
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
8551
8646
  // GUARANTEE busy=false anche se questa funzione throwa o ritorna early con
8552
8647
  // results vuoti. Senza il try/finally, due path leak-avano lo stato busy
8553
8648
  // a true → spinner globale stuck sulla pagina (visibile anche su list-grid
@@ -8614,7 +8709,6 @@ class MetadataProviderService {
8614
8709
  if (!rawPayload) {
8615
8710
  // Cache miss — fall back to full request without ETag
8616
8711
  MetadataProviderService.metadataETagByKey.delete(etagKey);
8617
- WtoolboxService.isBusy.next(false);
8618
8712
  return this.getMetas(route, userId, md_id);
8619
8713
  }
8620
8714
  }
@@ -8748,7 +8842,6 @@ class MetadataProviderService {
8748
8842
  });
8749
8843
  mapped = MetadataProviderService.mapMetadata(results);
8750
8844
  mapped.schedulerInfo = Array.isArray(schedulerInfo) ? schedulerInfo : [];
8751
- WtoolboxService.isBusy.next(false);
8752
8845
  return mapped;
8753
8846
  }
8754
8847
  else {
@@ -8763,7 +8856,7 @@ class MetadataProviderService {
8763
8856
  // });
8764
8857
  }
8765
8858
  finally {
8766
- WtoolboxService.isBusy.next(false);
8859
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
8767
8860
  }
8768
8861
  }
8769
8862
  normalizeMetadataPayload(payload) {
@@ -9504,7 +9597,7 @@ ${extraScope} ${suggestCallbackSanitized}
9504
9597
  if (existing != null) {
9505
9598
  return existing;
9506
9599
  }
9507
- WtoolboxService.isBusy.next(true);
9600
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
9508
9601
  const promise = (async () => {
9509
9602
  try {
9510
9603
  const results = await this.http.post(MetadataProviderService.getMenuByUserIDUri, { user_id: uId }).toPromise();
@@ -9518,7 +9611,7 @@ ${extraScope} ${suggestCallbackSanitized}
9518
9611
  return [];
9519
9612
  }
9520
9613
  finally {
9521
- WtoolboxService.isBusy.next(false);
9614
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
9522
9615
  // Rilascia l'in-flight entry SOLO dopo la fine della call (ok o ko):
9523
9616
  // fino ad allora, chiamanti concorrenti devono agganciarsi a questa
9524
9617
  // Promise, dopo invece devono poter ripartire (es. per forceRefresh
@@ -12154,7 +12247,7 @@ class DataProviderMetaService {
12154
12247
  const routeContext = this.buildRouteContext(route, 'export', 'DataProviderMetaService.exportXlsWithTheme');
12155
12248
  const trackProgress = String(progressGuid || '').trim().length > 0;
12156
12249
  if (!trackProgress) {
12157
- WtoolboxService.isBusy.next(true);
12250
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12158
12251
  }
12159
12252
  try {
12160
12253
  let data = await this.http.post(MetadataProviderService.exportUri, {
@@ -12171,7 +12264,7 @@ class DataProviderMetaService {
12171
12264
  }
12172
12265
  finally {
12173
12266
  if (!trackProgress) {
12174
- WtoolboxService.isBusy.next(false);
12267
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12175
12268
  }
12176
12269
  }
12177
12270
  }
@@ -12247,9 +12340,9 @@ class DataProviderMetaService {
12247
12340
  * @returns Oggetto dashboard serializzato restituito dal backend.
12248
12341
  */
12249
12342
  async saveDashboard(payload) {
12250
- WtoolboxService.isBusy.next(true);
12343
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12251
12344
  let data = await this.http.post(MetadataProviderService.saveDashboardUri, payload).toPromise();
12252
- WtoolboxService.isBusy.next(false);
12345
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12253
12346
  return data;
12254
12347
  }
12255
12348
  /**
@@ -12258,9 +12351,9 @@ class DataProviderMetaService {
12258
12351
  * @returns Stato dashboard serializzato dal backend (`dom_board` + dati correlati).
12259
12352
  */
12260
12353
  async loadDashboard(payload) {
12261
- WtoolboxService.isBusy.next(true);
12354
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12262
12355
  let data = await this.http.post(MetadataProviderService.loadDashboardUri, payload).toPromise();
12263
- WtoolboxService.isBusy.next(false);
12356
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12264
12357
  return data;
12265
12358
  }
12266
12359
  /**
@@ -12270,9 +12363,9 @@ class DataProviderMetaService {
12270
12363
  * @returns Esito serializzato `{ deleted, affected }`.
12271
12364
  */
12272
12365
  async deleteDashboard(payload) {
12273
- WtoolboxService.isBusy.next(true);
12366
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12274
12367
  const data = await this.http.post(MetadataProviderService.deleteDashboardUri, payload).toPromise();
12275
- WtoolboxService.isBusy.next(false);
12368
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12276
12369
  return data;
12277
12370
  }
12278
12371
  /**
@@ -12283,44 +12376,44 @@ class DataProviderMetaService {
12283
12376
  * @returns Esito serializzato con id/chiave/nome e numero route metadata processate.
12284
12377
  */
12285
12378
  async saveWorkflowGraph(payload) {
12286
- WtoolboxService.isBusy.next(true);
12379
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12287
12380
  const data = await this.http.post(MetadataProviderService.saveWorkflowGraphUri, payload).toPromise();
12288
- WtoolboxService.isBusy.next(false);
12381
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12289
12382
  return data;
12290
12383
  }
12291
12384
  /** Feature J — persiste le transizioni di stato del workflow (`MetaService.saveWorkflowTransitions`). */
12292
12385
  async saveWorkflowTransitions(payload) {
12293
- WtoolboxService.isBusy.next(true);
12386
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12294
12387
  const data = await this.http.post(MetadataProviderService.saveWorkflowTransitionsUri, payload).toPromise();
12295
- WtoolboxService.isBusy.next(false);
12388
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12296
12389
  return data;
12297
12390
  }
12298
12391
  /** Feature J — rilegge le transizioni di stato del workflow (`MetaService.getWorkflowTransitions`). */
12299
12392
  async getWorkflowTransitions(payload) {
12300
- WtoolboxService.isBusy.next(true);
12393
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12301
12394
  const data = await this.http.post(MetadataProviderService.getWorkflowTransitionsUri, payload).toPromise();
12302
- WtoolboxService.isBusy.next(false);
12395
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12303
12396
  return data;
12304
12397
  }
12305
12398
  /** Feature K — salva uno snapshot versione del workflow graph (`MetaService.saveWorkflowGraphVersion`). */
12306
12399
  async saveWorkflowGraphVersion(payload) {
12307
- WtoolboxService.isBusy.next(true);
12400
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12308
12401
  const data = await this.http.post(MetadataProviderService.saveWorkflowGraphVersionUri, payload).toPromise();
12309
- WtoolboxService.isBusy.next(false);
12402
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12310
12403
  return data;
12311
12404
  }
12312
12405
  /** Feature K — elenca le versioni storicizzate (`MetaService.getWorkflowGraphVersions`). */
12313
12406
  async getWorkflowGraphVersions(payload) {
12314
- WtoolboxService.isBusy.next(true);
12407
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12315
12408
  const data = await this.http.post(MetadataProviderService.getWorkflowGraphVersionsUri, payload).toPromise();
12316
- WtoolboxService.isBusy.next(false);
12409
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12317
12410
  return data;
12318
12411
  }
12319
12412
  /** Feature K — ritorna il graph_json di una versione specifica (`MetaService.getWorkflowGraphVersion`). */
12320
12413
  async getWorkflowGraphVersion(payload) {
12321
- WtoolboxService.isBusy.next(true);
12414
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12322
12415
  const data = await this.http.post(MetadataProviderService.getWorkflowGraphVersionUri, payload).toPromise();
12323
- WtoolboxService.isBusy.next(false);
12416
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12324
12417
  return data;
12325
12418
  }
12326
12419
  /**
@@ -12330,9 +12423,9 @@ class DataProviderMetaService {
12330
12423
  * @returns Struttura `{ graph_key, graph_name, graph_json, route_metadata }`.
12331
12424
  */
12332
12425
  async loadWorkflowGraph(payload) {
12333
- WtoolboxService.isBusy.next(true);
12426
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12334
12427
  const data = await this.http.post(MetadataProviderService.loadWorkflowGraphUri, payload).toPromise();
12335
- WtoolboxService.isBusy.next(false);
12428
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12336
12429
  return data;
12337
12430
  }
12338
12431
  /**
@@ -12341,9 +12434,9 @@ class DataProviderMetaService {
12341
12434
  * @returns Collezione graph restituita dal server.
12342
12435
  */
12343
12436
  async getWorkflowGraphs(payload) {
12344
- WtoolboxService.isBusy.next(true);
12437
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12345
12438
  const data = await this.http.post(MetadataProviderService.getWorkflowGraphsUri, payload).toPromise();
12346
- WtoolboxService.isBusy.next(false);
12439
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12347
12440
  return data;
12348
12441
  }
12349
12442
  /**
@@ -12352,9 +12445,9 @@ class DataProviderMetaService {
12352
12445
  * @returns Risposta backend del rename.
12353
12446
  */
12354
12447
  async renameWorkflowGraph(payload) {
12355
- WtoolboxService.isBusy.next(true);
12448
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12356
12449
  const data = await this.http.post(MetadataProviderService.renameWorkflowGraphUri, payload).toPromise();
12357
- WtoolboxService.isBusy.next(false);
12450
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12358
12451
  return data;
12359
12452
  }
12360
12453
  /**
@@ -12363,9 +12456,9 @@ class DataProviderMetaService {
12363
12456
  * @returns Esito serializzato `{ deleted, affected }`.
12364
12457
  */
12365
12458
  async deleteWorkflowGraph(payload) {
12366
- WtoolboxService.isBusy.next(true);
12459
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12367
12460
  const data = await this.http.post(MetadataProviderService.deleteWorkflowGraphUri, payload).toPromise();
12368
- WtoolboxService.isBusy.next(false);
12461
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12369
12462
  return data;
12370
12463
  }
12371
12464
  /**
@@ -12375,9 +12468,9 @@ class DataProviderMetaService {
12375
12468
  * @returns Esito serializzato con id/chiave/nome.
12376
12469
  */
12377
12470
  async saveScene3d(payload) {
12378
- WtoolboxService.isBusy.next(true);
12471
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12379
12472
  const data = await this.http.post(MetadataProviderService.saveScene3dUri, payload).toPromise();
12380
- WtoolboxService.isBusy.next(false);
12473
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12381
12474
  return data;
12382
12475
  }
12383
12476
  /**
@@ -12396,9 +12489,9 @@ class DataProviderMetaService {
12396
12489
  * @returns Struttura `{ scene_key, scene_name, scene_json }`.
12397
12490
  */
12398
12491
  async loadScene3d(payload) {
12399
- WtoolboxService.isBusy.next(true);
12492
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12400
12493
  const data = await this.http.post(MetadataProviderService.loadScene3dUri, payload).toPromise();
12401
- WtoolboxService.isBusy.next(false);
12494
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12402
12495
  return data;
12403
12496
  }
12404
12497
  /**
@@ -12407,9 +12500,9 @@ class DataProviderMetaService {
12407
12500
  * @returns Collezione scene restituita dal server.
12408
12501
  */
12409
12502
  async getScene3ds(payload) {
12410
- WtoolboxService.isBusy.next(true);
12503
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12411
12504
  const data = await this.http.post(MetadataProviderService.getScene3dsUri, payload).toPromise();
12412
- WtoolboxService.isBusy.next(false);
12505
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12413
12506
  return data;
12414
12507
  }
12415
12508
  /**
@@ -12418,9 +12511,9 @@ class DataProviderMetaService {
12418
12511
  * @returns Lista classi CSS rilevate.
12419
12512
  */
12420
12513
  async getCssClassesFromSheets(sheetPaths) {
12421
- WtoolboxService.isBusy.next(true);
12514
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12422
12515
  const data = await this.http.post(MetadataProviderService.getCssClassesFromSheetsUri, { sheets: sheetPaths || [] }).toPromise();
12423
- WtoolboxService.isBusy.next(false);
12516
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12424
12517
  return data || [];
12425
12518
  }
12426
12519
  /**
@@ -12428,9 +12521,9 @@ class DataProviderMetaService {
12428
12521
  * @param sheet Foglio CSS oggetto di lettura/scrittura.
12429
12522
  */
12430
12523
  async writeChangesToCssFile(sheet) {
12431
- WtoolboxService.isBusy.next(true);
12524
+ WtoolboxService.beginBusy(WtoolboxService.isBusy);
12432
12525
  await this.http.post(MetadataProviderService.writeChangesToCssFileUri, { sheet: sheet }).toPromise();
12433
- WtoolboxService.isBusy.next(false);
12526
+ WtoolboxService.endBusy(WtoolboxService.isBusy);
12434
12527
  }
12435
12528
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DataProviderMetaService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
12436
12529
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DataProviderMetaService, providedIn: 'root' });
@@ -15176,6 +15269,14 @@ class DataSourceComponent {
15176
15269
  * Contatore richieste in-flight per gestire il busy in modo concorrente-safe.
15177
15270
  */
15178
15271
  loadingInFlight = 0;
15272
+ /**
15273
+ * Il subject di "occupato" su cui questa istanza ha aperto le operazioni in volo.
15274
+ *
15275
+ * Non basta rileggere `this.loading` alla chiusura: e' un `@Input()` e puo' cambiare
15276
+ * mentre una fetch e' in corso. Chiudendo sul subject nuovo, quello vecchio resterebbe
15277
+ * bloccato su `true` per sempre.
15278
+ */
15279
+ subjectOccupatoInUso;
15179
15280
  /**
15180
15281
  * Flag interno per garantire emissione "after first load" una sola volta per ciclo init.
15181
15282
  */
@@ -15249,29 +15350,60 @@ class DataSourceComponent {
15249
15350
  this.route = new BehaviorSubject(null);
15250
15351
  }
15251
15352
  /**
15252
- * Incrementa il contatore loading e notifica busy=true solo sulla transizione 0->1.
15353
+ * Apre un'operazione sullo stato "occupato". Il segnale passa a `true` solo se e' la prima
15354
+ * in volo su quel subject: il conteggio vive in `WtoolboxService`, non qui, perche' `loading`
15355
+ * e' spesso condiviso con gli altri componenti della pagina.
15253
15356
  */
15254
15357
  beginLoading() {
15255
- this.loadingInFlight = Math.max(0, this.loadingInFlight) + 1;
15256
- if (this.loadingInFlight === 1) {
15257
- this.loading?.next?.(true);
15358
+ const subject = this.loadingInFlight > 0 ? this.subjectOccupatoInUso : this.loading;
15359
+ if (!subject) {
15360
+ return;
15258
15361
  }
15362
+ this.subjectOccupatoInUso = subject;
15363
+ this.loadingInFlight = Math.max(0, this.loadingInFlight) + 1;
15364
+ // Il conteggio vero sta sul subject, non qui: `loading` e' spesso
15365
+ // `WtoolboxService.isBusy`, condiviso con gli altri datasource della pagina. Quello
15366
+ // locale serve solo a sapere quante operazioni ha aperto QUESTA istanza, per poterle
15367
+ // rilasciare alla distruzione.
15368
+ WtoolboxService.beginBusy(subject);
15259
15369
  }
15260
15370
  /**
15261
- * Decrementa il contatore loading e notifica busy=false solo sulla transizione 1->0.
15371
+ * Chiude un'operazione: il segnale torna a `false` solo quando finisce l'ULTIMA in volo su
15372
+ * quel subject, non la prima. Una chiusura senza apertura viene ignorata, altrimenti
15373
+ * scalerebbe le operazioni di qualcun altro.
15262
15374
  */
15263
15375
  endLoading() {
15264
- this.loadingInFlight = Math.max(0, this.loadingInFlight - 1);
15376
+ if (this.loadingInFlight <= 0) {
15377
+ return;
15378
+ }
15379
+ // Si chiude sullo STESSO subject su cui si e' aperto: se nel frattempo l'input `loading`
15380
+ // e' cambiato, decrementare quello nuovo lascerebbe il vecchio bloccato su `true`.
15381
+ const subject = this.subjectOccupatoInUso;
15382
+ this.loadingInFlight -= 1;
15383
+ WtoolboxService.endBusy(subject);
15265
15384
  if (this.loadingInFlight === 0) {
15266
- this.loading?.next?.(false);
15385
+ this.subjectOccupatoInUso = undefined;
15386
+ }
15387
+ }
15388
+ /**
15389
+ * Rilascia le operazioni che questa istanza ha lasciato aperte.
15390
+ *
15391
+ * Serve alla distruzione del componente: con un contatore condiviso, un datasource che
15392
+ * sparisce mentre una fetch e' in volo lascerebbe lo stato "occupato" acceso per tutta
15393
+ * l'applicazione, e nessuno lo spegnerebbe piu'.
15394
+ */
15395
+ rilasciaOperazioniInVolo() {
15396
+ while (this.loadingInFlight > 0) {
15397
+ this.endLoading();
15267
15398
  }
15268
15399
  }
15269
15400
  /**
15270
15401
  * Ripristina forzatamente lo stato loading in caso di recovery da errori inattesi.
15271
15402
  */
15272
15403
  resetLoadingState() {
15273
- this.loadingInFlight = 0;
15274
- this.loading?.next?.(false);
15404
+ // Rilascia solo le operazioni di QUESTA istanza: forzare `false` sul subject
15405
+ // spegnerebbe anche le fetch delle altre griglie della pagina, che lo condividono.
15406
+ this.rilasciaOperazioniInVolo();
15275
15407
  }
15276
15408
  /**
15277
15409
  * Legge `filterInfo` dalla querystring, aggiorna `filterInfo.filters` (anche querystring-fixed) e sincronizza i valori nel `filterDescriptor`.
@@ -15638,6 +15770,9 @@ class DataSourceComponent {
15638
15770
  */
15639
15771
  ngOnDestroy() {
15640
15772
  DataSourceComponent.liveInstances.delete(this);
15773
+ // Con il conteggio condiviso, un datasource distrutto mentre una fetch e' ancora in volo
15774
+ // lascerebbe lo stato "occupato" acceso per tutta l'applicazione: qui rilascia le sue.
15775
+ this.rilasciaOperazioniInVolo();
15641
15776
  // Clear the E2E introspection hook set in ngOnInit. The host element may
15642
15777
  // outlive the component instance briefly during Angular's tear-down, so
15643
15778
  // dropping the ref prevents stale-component leaks for tests.
@@ -16526,7 +16661,7 @@ class DataSourceComponent {
16526
16661
  try {
16527
16662
  ${String(action.action_callback || '')}
16528
16663
  } catch (_err) {
16529
- wtoolbox.isBusy.next(false);
16664
+ wtoolbox.resetBusy(wtoolbox.isBusy);
16530
16665
  wtoolbox.errorHandler.handleError(_err);
16531
16666
  resolve();
16532
16667
  }
@@ -16541,7 +16676,7 @@ class DataSourceComponent {
16541
16676
  try {
16542
16677
  ${String(action.disable_callback || '')}
16543
16678
  } catch (_err) {
16544
- wtoolbox.isBusy.next(false);
16679
+ wtoolbox.resetBusy(wtoolbox.isBusy);
16545
16680
  wtoolbox.errorHandler.handleError(_err);
16546
16681
  return false;
16547
16682
  // resolve(false);
@@ -17083,6 +17218,27 @@ class DataSourceComponent {
17083
17218
  });
17084
17219
  return;
17085
17220
  }
17221
+ // Payload anticipato: metadati sì, righe no.
17222
+ //
17223
+ // Serve a far esistere la griglia PRIMA che la query risponda. Nella list-grid la
17224
+ // <p-table> — e con lei l'overlay [loading] — sta dentro @if (rowTemplate), e
17225
+ // rowTemplate si compila dentro la subscribe a fetchInfo$: senza questa
17226
+ // pubblicazione il componente non rende niente finche' i dati non arrivano, e su una
17227
+ // route lenta l'utente guarda una pagina vuota, senza alcun segnale di attesa.
17228
+ //
17229
+ // Solo al primo caricamento (dato ancora vuoto): su un refetch di una griglia gia'
17230
+ // popolata svuoterebbe la tabella per un istante, che e' peggio del problema.
17231
+ //
17232
+ // Si emette su fetchInfo$ direttamente e NON tramite publishFetchInfo, perche' quello
17233
+ // fa scattare anche afterFirstLoad$ — che i consumer aspettano per il primo
17234
+ // caricamento VERO, non per un payload vuoto.
17235
+ if (!this.resultInfo?.dato?.length) {
17236
+ this.fetchInfo$.next({
17237
+ resultInfo: { ...this.resultInfo, dato: [], totalRowCount: 0 },
17238
+ metaInfo: this.metaInfo,
17239
+ filterDescriptor: this.filterDescriptor
17240
+ });
17241
+ }
17086
17242
  await this.fetchData();
17087
17243
  }
17088
17244
  finally {
@@ -18762,7 +18918,7 @@ class DataSourceComponent {
18762
18918
  // the form closes and navigates away, destroying the typed dialog
18763
18919
  // before it can render). Pass `rethrow:true` to runUserCallback —
18764
18920
  // the helper still emits the typed dialog for the user.
18765
- WtoolboxService.isBusy.next(false);
18921
+ WtoolboxService.resetBusy(WtoolboxService.isBusy);
18766
18922
  const cloneOrUpdatePhase = isClone ? 'clone' : 'update';
18767
18923
  const insertOrExistingPhase = isInsert ? 'insert' : cloneOrUpdatePhase;
18768
18924
  await WtoolboxService.runUserCallback('md_after_save', afterSaveCallback, [this, savingData, syncedData, isInsert, isClone, isDelete, null, WtoolboxService], {
@@ -21845,7 +22001,7 @@ class LazySchedulerListComponent {
21845
22001
  * Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
21846
22002
  */
21847
22003
  async ngOnInit() {
21848
- schedulerListComponentPromise ??= import('./wuic-framework-lib-scheduler-list.component-B4Y92Q0p.mjs').then((m) => m.SchedulerListComponent);
22004
+ schedulerListComponentPromise ??= import('./wuic-framework-lib-scheduler-list.component-Bhyln-cQ.mjs').then((m) => m.SchedulerListComponent);
21849
22005
  this.loadedComponent = await schedulerListComponentPromise;
21850
22006
  this.cdr.markForCheck();
21851
22007
  }
@@ -22053,7 +22209,7 @@ class LazySpreadsheetListSfComponent {
22053
22209
  this.activatedRoute = activatedRoute;
22054
22210
  }
22055
22211
  async ngOnInit() {
22056
- spreadsheetListSfComponentPromise ??= import('./wuic-framework-lib-spreadsheet-list-sf.component-BvVnXgfH.mjs').then((m) => m.SpreadsheetListSfComponent);
22212
+ spreadsheetListSfComponentPromise ??= import('./wuic-framework-lib-spreadsheet-list-sf.component-BirgUqOO.mjs').then((m) => m.SpreadsheetListSfComponent);
22057
22213
  this.loadedComponent = await spreadsheetListSfComponentPromise;
22058
22214
  // Quando la promise e' gia' risolta dal cache module-scope (secondo mount
22059
22215
  // post-refresh), il microtask che risolve `await` non scatena sempre CD
@@ -22331,7 +22487,7 @@ class LazyChartListComponent {
22331
22487
  * Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
22332
22488
  */
22333
22489
  async ngOnInit() {
22334
- chartListComponentPromise ??= import('./wuic-framework-lib-chart-list.component-B-qi3f9x.mjs').then((m) => m.ChartListComponent);
22490
+ chartListComponentPromise ??= import('./wuic-framework-lib-chart-list.component-BM4iMVEF.mjs').then((m) => m.ChartListComponent);
22335
22491
  this.loadedComponent = await chartListComponentPromise;
22336
22492
  this.cdr.markForCheck();
22337
22493
  }
@@ -22653,7 +22809,7 @@ class LazyTimelineListComponent {
22653
22809
  this.cdr = cdr;
22654
22810
  }
22655
22811
  async ngOnInit() {
22656
- timelineListComponentPromise ??= import('./wuic-framework-lib-timeline-list.component-a_KcbMD0.mjs').then((m) => m.TimelineListComponent);
22812
+ timelineListComponentPromise ??= import('./wuic-framework-lib-timeline-list.component-x3HAhB4G.mjs').then((m) => m.TimelineListComponent);
22657
22813
  this.loadedComponent = await timelineListComponentPromise;
22658
22814
  this.cdr.markForCheck();
22659
22815
  }
@@ -23922,7 +24078,7 @@ class MetadataEditorComponent {
23922
24078
  }
23923
24079
  let result;
23924
24080
  try {
23925
- const { ReportScaffoldDialogComponent } = await import('./wuic-framework-lib-report-scaffold-dialog.component-YO8IyqI9.mjs');
24081
+ const { ReportScaffoldDialogComponent } = await import('./wuic-framework-lib-report-scaffold-dialog.component-CigGqFfV.mjs');
23926
24082
  WtoolboxService.resolveDialogServiceFromInjector();
23927
24083
  const ref = WtoolboxService.dialogService?.open?.(ReportScaffoldDialogComponent, {
23928
24084
  header: this.t('report.scaffold.dialog_title', 'Create report'),
@@ -50188,7 +50344,7 @@ class LazyFirstRunWizardComponent {
50188
50344
  this.cdr = cdr;
50189
50345
  }
50190
50346
  async ngOnInit() {
50191
- firstRunWizardComponentPromise ??= import('./wuic-framework-lib-first-run-wizard.component-CZRn9cUV.mjs').then((m) => m.WuicFirstRunWizardComponent);
50347
+ firstRunWizardComponentPromise ??= import('./wuic-framework-lib-first-run-wizard.component-Cf1BHCvJ.mjs').then((m) => m.WuicFirstRunWizardComponent);
50192
50348
  const componentClass = await firstRunWizardComponentPromise;
50193
50349
  this.componentRef = this.vcr.createComponent(componentClass);
50194
50350
  // Forward output del componente reale al wrapper. Type assertion necessaria
@@ -61889,7 +62045,7 @@ class LazyCodeEditorComponent {
61889
62045
  this.cdr = cdr;
61890
62046
  }
61891
62047
  async ngOnInit() {
61892
- codeEditorComponentPromise ??= import('./wuic-framework-lib-code-editor.component-CdZRro82.mjs').then((m) => m.CodeEditorComponent);
62048
+ codeEditorComponentPromise ??= import('./wuic-framework-lib-code-editor.component-BhLnfWq3.mjs').then((m) => m.CodeEditorComponent);
61893
62049
  this.loadedComponent = await codeEditorComponentPromise;
61894
62050
  this.cdr.markForCheck();
61895
62051
  }
@@ -64068,7 +64224,7 @@ class DesignerRouteComponent {
64068
64224
  * Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
64069
64225
  */
64070
64226
  async ngOnInit() {
64071
- designerComponentPromise ??= import('./wuic-framework-lib-designer.component-NI80qEef.mjs').then((m) => m.DesignerComponent);
64227
+ designerComponentPromise ??= import('./wuic-framework-lib-designer.component-yPNbRYOE.mjs').then((m) => m.DesignerComponent);
64072
64228
  this.loadedComponent = await designerComponentPromise;
64073
64229
  }
64074
64230
  /**
@@ -64149,7 +64305,7 @@ class LazyPivotBuilderComponent {
64149
64305
  this.cdr = cdr;
64150
64306
  }
64151
64307
  async ngOnInit() {
64152
- pivotBuilderComponentPromise ??= import('./wuic-framework-lib-pivot-builder.component-0iwqvcfZ.mjs').then((m) => m.PivotBuilderComponent);
64308
+ pivotBuilderComponentPromise ??= import('./wuic-framework-lib-pivot-builder.component-Df00Yaxo.mjs').then((m) => m.PivotBuilderComponent);
64153
64309
  this.loadedComponent = await pivotBuilderComponentPromise;
64154
64310
  this.cdr.markForCheck();
64155
64311
  }
@@ -64188,7 +64344,7 @@ class WorkflowDesignerRouteComponent {
64188
64344
  * Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
64189
64345
  */
64190
64346
  async ngOnInit() {
64191
- workflowDesignerComponentPromise ??= import('./wuic-framework-lib-workflow-designer.component-A6g5UefX.mjs').then((m) => m.WorkflowDesignerComponent);
64347
+ workflowDesignerComponentPromise ??= import('./wuic-framework-lib-workflow-designer.component-DLBbgX0s.mjs').then((m) => m.WorkflowDesignerComponent);
64192
64348
  this.loadedComponent = await workflowDesignerComponentPromise;
64193
64349
  }
64194
64350
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: WorkflowDesignerRouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -64234,7 +64390,7 @@ class Scene3dDesignerRouteComponent {
64234
64390
  /** Componente designer runtime caricato lazy, usato dal template. */
64235
64391
  loadedComponent = null;
64236
64392
  async ngOnInit() {
64237
- scene3dDesignerComponentPromise ??= import('./wuic-framework-lib-scene3d-designer.component-B-9lIpui.mjs').then(function (n) { return n.s; }).then((m) => m.Scene3dDesignerComponent);
64393
+ scene3dDesignerComponentPromise ??= import('./wuic-framework-lib-scene3d-designer.component-Bcih9wqu.mjs').then(function (n) { return n.s; }).then((m) => m.Scene3dDesignerComponent);
64238
64394
  this.loadedComponent = await scene3dDesignerComponentPromise;
64239
64395
  }
64240
64396
  /** Delega al designer runtime la conferma navigazione con pending changes. */
@@ -64290,7 +64446,7 @@ class Scene3dViewerRouteComponent {
64290
64446
  /** Componente viewer runtime caricato lazy, usato dal template. */
64291
64447
  loadedComponent = null;
64292
64448
  async ngOnInit() {
64293
- scene3dViewerComponentPromise ??= import('./wuic-framework-lib-scene3d-viewer.component-DHrKs3zg.mjs').then((m) => m.Scene3dViewerComponent);
64449
+ scene3dViewerComponentPromise ??= import('./wuic-framework-lib-scene3d-viewer.component-CqitWdf-.mjs').then((m) => m.Scene3dViewerComponent);
64294
64450
  this.loadedComponent = await scene3dViewerComponentPromise;
64295
64451
  }
64296
64452
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Scene3dViewerRouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -64351,7 +64507,7 @@ class LazyReportDesignerComponent {
64351
64507
  this.cdr = cdr;
64352
64508
  }
64353
64509
  async ngOnInit() {
64354
- reportDesignerComponentPromise ??= import('./wuic-framework-lib-report-designer.component-x1qjlyS9.mjs').then((m) => m.ReportDesignerComponent);
64510
+ reportDesignerComponentPromise ??= import('./wuic-framework-lib-report-designer.component-DTFAvjaD.mjs').then((m) => m.ReportDesignerComponent);
64355
64511
  this.loadedComponent = await reportDesignerComponentPromise;
64356
64512
  this.cdr.markForCheck();
64357
64513
  }
@@ -64406,7 +64562,7 @@ class LazyReportViewerComponent {
64406
64562
  this.cdr = cdr;
64407
64563
  }
64408
64564
  async ngOnInit() {
64409
- reportViewerComponentPromise ??= import('./wuic-framework-lib-report-viewer.component-AOhX1ah0.mjs').then((m) => m.ReportViewerComponent);
64565
+ reportViewerComponentPromise ??= import('./wuic-framework-lib-report-viewer.component-DKgW13uF.mjs').then((m) => m.ReportViewerComponent);
64410
64566
  this.loadedComponent = await reportViewerComponentPromise;
64411
64567
  this.cdr.markForCheck();
64412
64568
  }
@@ -68730,7 +68886,7 @@ const themeBuilderPendingChangesGuard = (component) => {
68730
68886
  const routes = [
68731
68887
  {
68732
68888
  path: 'framework-docs',
68733
- loadComponent: () => import('./wuic-framework-lib-framework-docs.component-CreW338k.mjs').then((m) => m.FrameworkDocsComponent),
68889
+ loadComponent: () => import('./wuic-framework-lib-framework-docs.component-DQEh15Vz.mjs').then((m) => m.FrameworkDocsComponent),
68734
68890
  canMatch: [menuRouteAccessCanMatchGuard],
68735
68891
  canActivate: [menuRouteAccessCanActivateGuard],
68736
68892
  data: {
@@ -68739,7 +68895,7 @@ const routes = [
68739
68895
  },
68740
68896
  {
68741
68897
  path: 'framework-docs/:slug',
68742
- loadComponent: () => import('./wuic-framework-lib-framework-docs.component-CreW338k.mjs').then((m) => m.FrameworkDocsComponent),
68898
+ loadComponent: () => import('./wuic-framework-lib-framework-docs.component-DQEh15Vz.mjs').then((m) => m.FrameworkDocsComponent),
68743
68899
  canMatch: [menuRouteAccessCanMatchGuard],
68744
68900
  canActivate: [menuRouteAccessCanActivateGuard],
68745
68901
  data: {
@@ -68784,7 +68940,7 @@ const routes = [
68784
68940
  },
68785
68941
  {
68786
68942
  path: ':route/report-designer',
68787
- loadComponent: () => import('./wuic-framework-lib-report-designer.component-x1qjlyS9.mjs').then((m) => m.ReportDesignerComponent),
68943
+ loadComponent: () => import('./wuic-framework-lib-report-designer.component-DTFAvjaD.mjs').then((m) => m.ReportDesignerComponent),
68788
68944
  canMatch: [menuRouteAccessCanMatchGuard, featureRouteCanMatchGuard],
68789
68945
  canActivate: [menuRouteAccessCanActivateGuard, featureRouteCanActivateGuard],
68790
68946
  data: {
@@ -68794,7 +68950,7 @@ const routes = [
68794
68950
  },
68795
68951
  {
68796
68952
  path: ':route/report-viewer',
68797
- loadComponent: () => import('./wuic-framework-lib-report-viewer.component-AOhX1ah0.mjs').then((m) => m.ReportViewerComponent),
68953
+ loadComponent: () => import('./wuic-framework-lib-report-viewer.component-DKgW13uF.mjs').then((m) => m.ReportViewerComponent),
68798
68954
  canMatch: [menuRouteAccessCanMatchGuard],
68799
68955
  canActivate: [menuRouteAccessCanActivateGuard],
68800
68956
  data: {
@@ -68814,7 +68970,7 @@ const routes = [
68814
68970
  },
68815
68971
  {
68816
68972
  path: ':route/pivot-builder',
68817
- loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-0iwqvcfZ.mjs').then((m) => m.PivotBuilderComponent),
68973
+ loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-Df00Yaxo.mjs').then((m) => m.PivotBuilderComponent),
68818
68974
  canMatch: [menuRouteAccessCanMatchGuard, featureRouteCanMatchGuard],
68819
68975
  canActivate: [menuRouteAccessCanActivateGuard, featureRouteCanActivateGuard],
68820
68976
  data: {
@@ -68824,7 +68980,7 @@ const routes = [
68824
68980
  },
68825
68981
  {
68826
68982
  path: 'pivot-builder',
68827
- loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-0iwqvcfZ.mjs').then((m) => m.PivotBuilderComponent),
68983
+ loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-Df00Yaxo.mjs').then((m) => m.PivotBuilderComponent),
68828
68984
  canMatch: [menuRouteAccessCanMatchGuard, featureRouteCanMatchGuard],
68829
68985
  canActivate: [menuRouteAccessCanActivateGuard, featureRouteCanActivateGuard],
68830
68986
  data: {
@@ -70924,4 +71080,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
70924
71080
  */
70925
71081
 
70926
71082
  export { DEFAULT_THEME_VALUE as $, ArchetypeConfiguratorComponent as A, AuthSessionService as B, ChatbotHostRegistryService as C, DynamicGenericTemplateComponent as D, BooleanEditorComponent as E, FilterBarComponent as F, GlobalHandler as G, BoundedRepeaterComponent as H, ImportExportButtonComponent as I, ButtonEditorComponent as J, CUSTOM_THEMES_STORAGE_KEY as K, LazyParametricDialogComponent as L, MetadataProviderService as M, CallbackPipe as N, CallbackPipe2 as O, PagerComponent as P, CarouselListComponent as Q, CodeAreaEditorComponent as R, ColorEditorComponent as S, TranslationManagerService as T, UserInfoService as U, CrashReporterService as V, WtoolboxService as W, CustomAttributesService as X, CustomException as Y, DEFAULT_FONT_STACK as Z, DEFAULT_THEME_STORAGE_KEY as _, DynamicCompilerService as a, UserMenuComponent as a$, DataActionButtonComponent as a0, DataProviderOdataService as a1, DateEditorComponent as a2, DesignerRouteComponent as a3, DictionaryEditorComponent as a4, DynamicRowTemplateComponent as a5, FormatGridViewValuePipe as a6, GetSrcUploadPreviewPipe as a7, HtmlEditorComponent as a8, ImageWrapperComponent as a9, NumberEditorComponent as aA, PALETTE_STOPS as aB, PREVIEW_RESTORE_KEY as aC, PRIMARY_PALETTES as aD, PerformanceInspectorComponent as aE, PointFilterComponent as aF, PropertyArrayEditorComponent as aG, PropertyObjectEditorComponent as aH, RAG_DESTRUCTIVE_KINDS as aI, RouteMetricsDashboardComponent as aJ, Scene3dDesignerRouteComponent as aK, Scene3dViewerRouteComponent as aL, THEME_MODE_STORAGE_KEY as aM, THEME_OPTIONS as aN, THEME_STORAGE_KEY as aO, TextAreaEditorComponent as aP, TextEditorComponent as aQ, ThemeBuilderComponent as aR, ThemeCatalogService as aS, ThemePreviewPanelComponent as aT, ThemeRuntimeService as aU, ThemeSelectorComponent as aV, TreeListComponent as aW, TreeViewSelectorComponent as aX, UploadDialogComponent as aY, UploadEditorComponent as aZ, UserLanguageService as a_, IsSelectedRowPipe as aa, KanbanListComponent as ab, KanbanOptions as ac, KanbanStatusColumnItem as ad, LazyChartListComponent as ae, LazyCodeEditorComponent as af, LazyDataActionButtonComponent as ag, LazyDataSourceComponent as ah, LazyFieldEditorComponent as ai, LazyFirstRunWizardComponent as aj, LazyImageWrapperComponent as ak, LazyKanbanListComponent as al, LazyMetaMenuComponent as am, LazyPivotBuilderComponent as an, LazyReportDesignerComponent as ao, LazyReportViewerComponent as ap, LazySchedulerListComponent as aq, LazySpreadsheetListSfComponent as ar, LazyTimelineListComponent as as, ListGridComponent as at, LookupEditorComponent as au, MapListComponent as av, MetaMenuComponent as aw, MetadatiTabella as ax, NotificationBellComponent as ay, NotificationRealtimeService as az, DataSourceComponent as b, resolveThemePresetForOption as b$, ValidationRule as b0, ValueChangedPayload as b1, VisibleFieldListPipe as b2, WUIC_FONT_CATALOG as b3, WidgetDefinition as b4, WorkflowDesignerRouteComponent as b5, WorkflowRunnerComponent as b6, WuicAziendaSwitcherComponent as b7, WuicErrorDialogComponent as b8, WuicErrorInterceptor as b9, isDestructiveRagAction as bA, isRoutePersistenceEnabled as bB, loadBooleanEditorComponent as bC, loadButtonEditorComponent as bD, loadCodeAreaEditorComponent as bE, loadColorEditorComponent as bF, loadDateEditorComponent as bG, loadDictionaryEditorComponent as bH, loadHtmlEditorComponent as bI, loadLookupEditorComponent as bJ, loadNumberEditorComponent as bK, loadPropertyArrayEditorComponent as bL, loadPropertyObjectEditorComponent as bM, loadTextAreaEditorComponent as bN, loadTextEditorComponent as bO, loadTreeViewSelectorComponent as bP, loadUploadEditorComponent as bQ, menuRouteAccessCanActivateGuard as bR, menuRouteAccessCanMatchGuard as bS, nearestPrimaryName as bT, normalizeHex$1 as bU, oklchToHex as bV, oklchToRgb as bW, resolveBackgroundCss as bX, resolveFontStack as bY, resolveGridStrengths as bZ, resolveThemePreset as b_, WuicFeatureDirective as ba, WuicFrozenColumnDirective as bb, WuicRagChatbotComponent as bc, WuicRagChatbotFabComponent as bd, WuicRagService as be, WuicRowTogglerDirective as bf, _PRIMENG_TABLE_DIRECTIVES_NAMES as bg, authExpiredInterceptor as bh, bestContrastColor as bi, boundedRepeaterPendingChangesGuard as bj, buildCustomPreset as bk, buildThemeValue as bl, computeDataQualitySummary as bm, contrastRatio as bn, createDraftTheme as bo, featureRouteCanActivateGuard as bp, featureRouteCanMatchGuard as bq, generatePrimaryPalette as br, generateSurfacePalette as bs, getQualityInspectorOptions as bt, getThemePrimaryHex as bu, hexToOklch as bv, hexToRgb as bw, hsbaToRgbaString as bx, inferTemplateFieldFromBaseClass as by, isCustomThemeValue as bz, DataRepeaterComponent as c, rgbToHex as c0, rgbToOklch as c1, rgbaToHsbaModel as c2, routeMetricsClient as c3, routes as c4, scene3dDesignerPendingChangesGuard as c5, themeBuilderPendingChangesGuard as c6, wcagLevel as c7, wuicErrorInterceptor as c8, parametricDialog_component as c9, clampAlpha as d, toPersistedColor as e, ParametricDialogComponent as f, MetadatiColonna as g, DataProviderService as h, MetadataEditorService as i, WorkflowRuntimeMetadataService as j, FieldEditorComponent as k, MetadataEditorComponent as l, WuicClientException as m, WuicErrorCodes as n, MetaInfo as o, WUIC_SUPPRESS_GLOBAL_ERROR as p, FilterInfo as q, LicenseFeatureService as r, FilterItem as s, toHsbaModel as t, TimelineOptions as u, getThemeOptions as v, AUTH_REDIRECT_REASON_KEY as w, AppHeaderComponent as x, AppHeaderConfigService as y, AppSettingsEditorComponent as z };
70927
- //# sourceMappingURL=wuic-framework-lib-wuic-framework-lib-D4Q320L6.mjs.map
71083
+ //# sourceMappingURL=wuic-framework-lib-wuic-framework-lib-HGQNVwv6.mjs.map