wuic-framework-lib 1.7.12 → 1.7.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{wuic-framework-lib-chart-list.component-C9rj-6-8.mjs → wuic-framework-lib-chart-list.component-BIpu6QY3.mjs} +4 -2
- package/fesm2022/{wuic-framework-lib-code-editor.component-CTI_gqvB.mjs → wuic-framework-lib-code-editor.component-P181nIU9.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-designer.component-67PCnDYC.mjs → wuic-framework-lib-designer.component-DZ7C9ygB.mjs} +4 -2
- package/fesm2022/{wuic-framework-lib-first-run-wizard.component-Bg41Xfht.mjs → wuic-framework-lib-first-run-wizard.component-CGCBKpdv.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-framework-docs.component-BLxQmoDZ.mjs → wuic-framework-lib-framework-docs.component-CX4DuW-Q.mjs} +484 -3
- package/fesm2022/{wuic-framework-lib-pivot-builder.component-Dg-xWzxO.mjs → wuic-framework-lib-pivot-builder.component-CrJUJDxX.mjs} +5 -2
- package/fesm2022/{wuic-framework-lib-prompt-dialog-fallback-host.component-BB0AhnsE.mjs → wuic-framework-lib-prompt-dialog-fallback-host.component-fk_u2CFB.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-report-designer.component-9_M4MA2p.mjs → wuic-framework-lib-report-designer.component-urOz2Pq8.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-report-scaffold-dialog.component-BsKSP1Dk.mjs → wuic-framework-lib-report-scaffold-dialog.component-okexsstE.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-report-viewer.component-C5EAoGOx.mjs → wuic-framework-lib-report-viewer.component-CCpUOyb4.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-scene3d-designer.component-CkoU_J5j.mjs → wuic-framework-lib-scene3d-designer.component-DLcruDYB.mjs} +3 -3
- package/fesm2022/{wuic-framework-lib-scene3d-light-baker-gpu-CjTKHG3s.mjs → wuic-framework-lib-scene3d-light-baker-gpu-Dj22rwPQ.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-scene3d-viewer.component-Dt0fvwFX.mjs → wuic-framework-lib-scene3d-viewer.component-DA47y9vo.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-scheduler-list.component-CEMQJrsN.mjs → wuic-framework-lib-scheduler-list.component-BXx84Cc7.mjs} +24 -16
- package/fesm2022/{wuic-framework-lib-spreadsheet-list-sf.component-Cgmf9tb1.mjs → wuic-framework-lib-spreadsheet-list-sf.component-v7rE3WW_.mjs} +4 -2
- package/fesm2022/{wuic-framework-lib-timeline-list.component-B_bRKY_H.mjs → wuic-framework-lib-timeline-list.component-CP9PpRQB.mjs} +6 -4
- package/fesm2022/{wuic-framework-lib-workflow-designer.component-DVEL_aHg.mjs → wuic-framework-lib-workflow-designer.component-CETZSZzu.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-wuic-framework-lib-Ds_oD2In.mjs → wuic-framework-lib-wuic-framework-lib-CRUM1gc_.mjs} +284 -34
- package/fesm2022/wuic-framework-lib.mjs +1 -1
- package/package.json +1 -1
- package/types/wuic-framework-lib.d.ts +87 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, ApplicationRef, EnvironmentInjector, createComponent, NgModule, Component, createNgModule, inject, NgZone, ElementRef, Input, EventEmitter, Output, signal, HostBinding, ChangeDetectionStrategy, Pipe, ViewChild, forwardRef, HostListener, Optional, Directive, ViewChildren, computed, ViewContainerRef, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { Injectable, ApplicationRef, EnvironmentInjector, createComponent, NgModule, Component, createNgModule, inject, NgZone, ElementRef, Input, EventEmitter, Output, DestroyRef, isDevMode, signal, HostBinding, ChangeDetectionStrategy, Pipe, ViewChild, forwardRef, HostListener, Optional, Directive, ViewChildren, computed, ViewContainerRef, ViewEncapsulation } from '@angular/core';
|
|
3
3
|
import { BehaviorSubject, firstValueFrom, Subject, combineLatest, catchError, EMPTY, throwError, Subscription } from 'rxjs';
|
|
4
4
|
import * as i1$2 from '@angular/router';
|
|
5
5
|
import { Router, NavigationEnd, NavigationStart, RouterModule, RouterLink } from '@angular/router';
|
|
@@ -180,6 +180,8 @@ const WuicErrorCodes = {
|
|
|
180
180
|
AuthCookieMalformed: 'errors.auth.cookie_malformed',
|
|
181
181
|
AuthOperationDisabled: 'errors.auth.operation_disabled',
|
|
182
182
|
AuthLoginFailed: 'errors.auth.login_failed',
|
|
183
|
+
// HTTP 403: richiesta sulle notifiche di un altro utente (NotificationsController).
|
|
184
|
+
AuthNotificationForbidden: 'errors.auth.notification_forbidden',
|
|
183
185
|
MetadataPropsBagMalformed: 'errors.metadata.props_bag.malformed',
|
|
184
186
|
MetadataRouteNotFound: 'errors.metadata.route.not_found',
|
|
185
187
|
MetadataRouteAmbiguousCase: 'errors.metadata.route.ambiguous_case',
|
|
@@ -3418,7 +3420,7 @@ class WtoolboxService {
|
|
|
3418
3420
|
const appRef = resolvedInjector.get(ApplicationRef);
|
|
3419
3421
|
const environmentInjector = resolvedInjector.get(EnvironmentInjector);
|
|
3420
3422
|
const close$ = new Subject();
|
|
3421
|
-
const { PromptDialogFallbackHostComponent } = await import('./wuic-framework-lib-prompt-dialog-fallback-host.component-
|
|
3423
|
+
const { PromptDialogFallbackHostComponent } = await import('./wuic-framework-lib-prompt-dialog-fallback-host.component-fk_u2CFB.mjs');
|
|
3422
3424
|
const hostRef = createComponent(PromptDialogFallbackHostComponent, { environmentInjector });
|
|
3423
3425
|
hostRef.instance.datasource = dialogConfig?.data?.datasource;
|
|
3424
3426
|
hostRef.instance.header = String(dialogConfig?.header || '');
|
|
@@ -7697,6 +7699,10 @@ class MetadataProviderService {
|
|
|
7697
7699
|
static metatableColumnAuthRoute;
|
|
7698
7700
|
static metadataVersionInFlight;
|
|
7699
7701
|
static lastMetadataVersionCheckAtMs = 0;
|
|
7702
|
+
// Ultima versione letta dal backend: dentro la finestra di throttle si
|
|
7703
|
+
// restituisce questa (non `null`), cosi' ogni route confronta la propria
|
|
7704
|
+
// cache Dexie con la versione piu' recente nota.
|
|
7705
|
+
static lastKnownMetadataVersion = 0;
|
|
7700
7706
|
static minMetadataVersionIntervalMs = 5000;
|
|
7701
7707
|
static minReportListIntervalMs = 5000;
|
|
7702
7708
|
static reportListInFlightByRoute = new Map();
|
|
@@ -10565,9 +10571,9 @@ ${extraScope} ${suggestCallbackSanitized}
|
|
|
10565
10571
|
}
|
|
10566
10572
|
/**
|
|
10567
10573
|
* Recupera `ProjectMetadataVersion` dal backend solo quando la cache versione e scaduta;
|
|
10568
|
-
* usa `MetaService.getAppSettings
|
|
10574
|
+
* usa `MetaService.getAppSettings`, salva il timestamp in localStorage e la versione in memoria per ridurre chiamate ripetute.
|
|
10569
10575
|
* @param offsetMs Offset fuso client in millisecondi da riportare al backend.
|
|
10570
|
-
* @returns Versione metadata progetto corrente
|
|
10576
|
+
* @returns Versione metadata progetto corrente (dentro la finestra: l'ultima letta dal backend).
|
|
10571
10577
|
*/
|
|
10572
10578
|
async getProjectMetadataVersionIfExpired(offsetMs) {
|
|
10573
10579
|
const effectiveOffsetMs = Math.max(Number(offsetMs) || 0, MetadataProviderService.minMetadataVersionIntervalMs);
|
|
@@ -10578,14 +10584,30 @@ ${extraScope} ${suggestCallbackSanitized}
|
|
|
10578
10584
|
? lastFromStorage
|
|
10579
10585
|
: MetadataProviderService.lastMetadataVersionCheckAtMs;
|
|
10580
10586
|
if (effectiveOffsetMs > 0 && lastCheckAt > 0 && nowMs <= (lastCheckAt + effectiveOffsetMs)) {
|
|
10581
|
-
|
|
10587
|
+
// Dentro la finestra NON si ritorna `null` ("cache valida"): la finestra
|
|
10588
|
+
// vale per TUTTE le route, e al caricamento della pagina la prima route
|
|
10589
|
+
// (il menu) scarica la versione nuova; le route lette subito dopo
|
|
10590
|
+
// ricevevano `null` e servivano la cache Dexie stale senza confrontarla
|
|
10591
|
+
// (verificato 23/09 su cities: stile colonna appena inserito + invalidate
|
|
10592
|
+
// + reload, la list-grid restava con i metadati vecchi). Si restituisce
|
|
10593
|
+
// l'ultima versione letta DA QUESTA PAGINA, se letta dentro la finestra:
|
|
10594
|
+
// il chiamante la confronta con quella in cache.
|
|
10595
|
+
const ownCheckAt = MetadataProviderService.lastMetadataVersionCheckAtMs;
|
|
10596
|
+
const knownVersion = MetadataProviderService.lastKnownMetadataVersion;
|
|
10597
|
+
if (knownVersion > 0 && ownCheckAt > 0 && nowMs <= (ownCheckAt + effectiveOffsetMs)) {
|
|
10598
|
+
return knownVersion;
|
|
10599
|
+
}
|
|
10600
|
+
// Timestamp scritto prima del reload o da un'altra scheda: la versione
|
|
10601
|
+
// non e' nota qui, si interroga il backend invece di fidarsi della cache.
|
|
10582
10602
|
}
|
|
10583
10603
|
if (!MetadataProviderService.metadataVersionInFlight) {
|
|
10584
10604
|
MetadataProviderService.metadataVersionInFlight = this.http.post(this.getMetadataVersionUri, {}).toPromise().then((version) => {
|
|
10585
10605
|
const checkedAt = Date.now();
|
|
10586
10606
|
MetadataProviderService.lastMetadataVersionCheckAtMs = checkedAt;
|
|
10587
10607
|
localStorage.setItem("lastprojectmetaversionretrieve", String(checkedAt));
|
|
10588
|
-
|
|
10608
|
+
const fetchedVersion = Number(version || 0);
|
|
10609
|
+
MetadataProviderService.lastKnownMetadataVersion = fetchedVersion;
|
|
10610
|
+
return fetchedVersion;
|
|
10589
10611
|
}).finally(() => {
|
|
10590
10612
|
MetadataProviderService.metadataVersionInFlight = undefined;
|
|
10591
10613
|
});
|
|
@@ -15265,6 +15287,12 @@ class DataSourceComponent {
|
|
|
15265
15287
|
* Proprieta di stato del componente per last action, usata dalla logica interna e dal template.
|
|
15266
15288
|
*/
|
|
15267
15289
|
lastAction = null;
|
|
15290
|
+
/**
|
|
15291
|
+
* Ultimo valore del parametro di route `:filters` (id del record in edit/detail, o
|
|
15292
|
+
* descriptor `campo||op||valore`) visto dal gestore NavigationEnd: serve a riconoscere
|
|
15293
|
+
* una navigazione che cambia SOLO il record, a parita' di route e action.
|
|
15294
|
+
*/
|
|
15295
|
+
lastRouteFiltersParam = null;
|
|
15268
15296
|
/**
|
|
15269
15297
|
* Contatore richieste in-flight per gestire il busy in modo concorrente-safe.
|
|
15270
15298
|
*/
|
|
@@ -15692,6 +15720,7 @@ class DataSourceComponent {
|
|
|
15692
15720
|
}
|
|
15693
15721
|
catch { /* defensive */ }
|
|
15694
15722
|
this.lastAction = this.aRoute.snapshot.paramMap.get('action');
|
|
15723
|
+
this.lastRouteFiltersParam = this.aRoute.snapshot.paramMap.get('filters');
|
|
15695
15724
|
if (this.routeFromRouting) {
|
|
15696
15725
|
this.routerEventsSubscription?.unsubscribe();
|
|
15697
15726
|
this.routerEventsSubscription = this.router.events.subscribe((val) => {
|
|
@@ -15708,7 +15737,21 @@ class DataSourceComponent {
|
|
|
15708
15737
|
const pageInfoChanged = currentPageInfoQueryRaw !== this.lastPageInfoQueryRaw;
|
|
15709
15738
|
const sortInfoChanged = currentSortInfoQueryRaw !== this.lastSortInfoQueryRaw;
|
|
15710
15739
|
const actionChanged = this.lastAction !== newaction;
|
|
15711
|
-
|
|
15740
|
+
// Anche il solo cambio di `:filters` va ricaricato. Da `cities/edit/1` a
|
|
15741
|
+
// `cities/edit/3` la configurazione di route e' la stessa, quindi Angular riusa
|
|
15742
|
+
// il componente e questo datasource: con il confronto solo su route e action non
|
|
15743
|
+
// partiva nessuna getFlatRecordData, la form di edit/3 mostrava il record 1 e il
|
|
15744
|
+
// salvataggio lo avrebbe sovrascritto. Stesso difetto su `detail/<id>` e su
|
|
15745
|
+
// `list/<campo||op||valore>`. Si passa dal ramo del cambio action (init completo)
|
|
15746
|
+
// e non da un semplice fetchData perche' applyRouteParamFilterFromSnapshot
|
|
15747
|
+
// aggiorna o aggiunge il filtro di route ma non toglie quello precedente: con un
|
|
15748
|
+
// descriptor su un campo diverso resterebbero attivi entrambi.
|
|
15749
|
+
// Nessun doppio caricamento: al primo ingresso (e da list a edit, che cambia
|
|
15750
|
+
// configurazione di route e ricrea il componente) il valore e' gia' allineato in
|
|
15751
|
+
// ngOnInit, e se cambiano insieme action e record il ramo scatta una volta sola.
|
|
15752
|
+
const newFiltersParam = this.aRoute.snapshot.paramMap.get('filters');
|
|
15753
|
+
const filtersParamChanged = this.lastRouteFiltersParam !== newFiltersParam;
|
|
15754
|
+
if (this.route.value && (newroute !== this.route.value || actionChanged || filtersParamChanged)) {
|
|
15712
15755
|
this.init();
|
|
15713
15756
|
this.applyFilterInfoFromQueryString();
|
|
15714
15757
|
this.applyPageInfoFromQueryString();
|
|
@@ -15730,6 +15773,7 @@ class DataSourceComponent {
|
|
|
15730
15773
|
}
|
|
15731
15774
|
}
|
|
15732
15775
|
this.lastAction = newaction;
|
|
15776
|
+
this.lastRouteFiltersParam = newFiltersParam;
|
|
15733
15777
|
}
|
|
15734
15778
|
});
|
|
15735
15779
|
this.applyFilterInfoFromQueryString();
|
|
@@ -17232,11 +17276,18 @@ class DataSourceComponent {
|
|
|
17232
17276
|
// Si emette su fetchInfo$ direttamente e NON tramite publishFetchInfo, perche' quello
|
|
17233
17277
|
// fa scattare anche afterFirstLoad$ — che i consumer aspettano per il primo
|
|
17234
17278
|
// caricamento VERO, non per un payload vuoto.
|
|
17279
|
+
//
|
|
17280
|
+
// `preliminare: true` lo dichiara anche a chi legge solo fetchInfo$: la form di
|
|
17281
|
+
// edit (parametric-dialog) su questo payload crea un record vuoto con
|
|
17282
|
+
// addNewRecord, e senza il marcatore scambiava quel record per quello caricato
|
|
17283
|
+
// (data-record-loaded="true" con i campi ancora vuoti, prima ancora che partisse
|
|
17284
|
+
// getFlatRecordData).
|
|
17235
17285
|
if (!this.resultInfo?.dato?.length) {
|
|
17236
17286
|
this.fetchInfo$.next({
|
|
17237
17287
|
resultInfo: { ...this.resultInfo, dato: [], totalRowCount: 0 },
|
|
17238
17288
|
metaInfo: this.metaInfo,
|
|
17239
|
-
filterDescriptor: this.filterDescriptor
|
|
17289
|
+
filterDescriptor: this.filterDescriptor,
|
|
17290
|
+
preliminare: true
|
|
17240
17291
|
});
|
|
17241
17292
|
}
|
|
17242
17293
|
await this.fetchData();
|
|
@@ -19668,6 +19719,82 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
19668
19719
|
type: Output
|
|
19669
19720
|
}] } });
|
|
19670
19721
|
|
|
19722
|
+
/**
|
|
19723
|
+
* Espone l'istanza del componente sull'elemento DOM ospite come `__wuicCmp`.
|
|
19724
|
+
*
|
|
19725
|
+
* PERCHE'. I test e2e docs-driven devono poter leggere lo stato runtime di un
|
|
19726
|
+
* componente. Lo facevano con `window.ng.getComponent(host)`, che Angular
|
|
19727
|
+
* **rimuove nelle build di produzione** (`enableProdMode` toglie i debug tools):
|
|
19728
|
+
* contro un'installazione vera — cioe' quella che usano i clienti — quei test
|
|
19729
|
+
* non fallivano per un difetto, fallivano perche' lo strumento non c'era.
|
|
19730
|
+
* Misurato il 21/09/2026 sulla campagna docs-driven: **una trentina di prove**
|
|
19731
|
+
* (`timeline-list`, `list-grid`, `chart-list`, `kanban-list`, `scheduler-list`,
|
|
19732
|
+
* `tree-list`, `carousel-list`, `designer`, piu' tutti gli `--host-events`)
|
|
19733
|
+
* chiudevano con "introspezione runtime fallita: window.ng.getComponent not
|
|
19734
|
+
* available (production build?)", su entrambi i motori e su entrambi i sistemi
|
|
19735
|
+
* operativi.
|
|
19736
|
+
*
|
|
19737
|
+
* `__wuicCmp` e' la strada gia' adottata da `pivot-builder`, `report-designer`,
|
|
19738
|
+
* `workflow-designer`, `data-source`, `code-editor` e `app-settings-editor`, e
|
|
19739
|
+
* 11 test la cercano gia' prima di ripiegare su `window.ng`. Questo helper la
|
|
19740
|
+
* rende una riga sola, senza toccare costruttori ne' cicli di vita:
|
|
19741
|
+
*
|
|
19742
|
+
* ```ts
|
|
19743
|
+
* export class ListGridComponent {
|
|
19744
|
+
* private readonly wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
19745
|
+
* }
|
|
19746
|
+
* ```
|
|
19747
|
+
*
|
|
19748
|
+
* QUANDO SI ATTACCA. Non sempre: esporre l'istanza di un componente la rende
|
|
19749
|
+
* raggiungibile da qualunque script della pagina, e in un'installazione di un
|
|
19750
|
+
* cliente non serve a nessuno. Quindi:
|
|
19751
|
+
*
|
|
19752
|
+
* - in sviluppo (`isDevMode()`): sempre, dove `window.ng` c'e' comunque;
|
|
19753
|
+
* - in produzione: SOLO se la pagina ha dichiarato `globalThis.__wuicE2E = true`
|
|
19754
|
+
* prima dell'avvio dell'applicazione. Lo fa il bootstrap dei test e2e
|
|
19755
|
+
* (`playwright/docs/_shared/e2e-login-utils.mjs`, via `addInitScript`), non
|
|
19756
|
+
* il prodotto.
|
|
19757
|
+
*
|
|
19758
|
+
* Costo quando e' attivo: un assegnamento di proprieta' per istanza piu' una
|
|
19759
|
+
* callback di pulizia. Quando e' spento: un confronto booleano.
|
|
19760
|
+
*/
|
|
19761
|
+
function exposeWuicCmpOnHost(cmp) {
|
|
19762
|
+
try {
|
|
19763
|
+
if (!isWuicIntrospectionEnabled()) {
|
|
19764
|
+
return;
|
|
19765
|
+
}
|
|
19766
|
+
const ref = inject(ElementRef, { optional: true });
|
|
19767
|
+
const el = ref?.nativeElement;
|
|
19768
|
+
if (!el) {
|
|
19769
|
+
return;
|
|
19770
|
+
}
|
|
19771
|
+
el.__wuicCmp = cmp;
|
|
19772
|
+
// Pulizia senza obbligare il componente ad avere (o a modificare) ngOnDestroy.
|
|
19773
|
+
inject(DestroyRef, { optional: true })?.onDestroy(() => {
|
|
19774
|
+
try {
|
|
19775
|
+
delete el.__wuicCmp;
|
|
19776
|
+
}
|
|
19777
|
+
catch { /* elemento gia' smontato */ }
|
|
19778
|
+
});
|
|
19779
|
+
}
|
|
19780
|
+
catch {
|
|
19781
|
+
// Fuori da un contesto di injection, o ambiente senza DOM (unit test, SSR):
|
|
19782
|
+
// l'handle e' un extra, non deve mai rompere il componente.
|
|
19783
|
+
}
|
|
19784
|
+
}
|
|
19785
|
+
/** True quando l'introspezione dei test e' consentita su questa pagina. */
|
|
19786
|
+
function isWuicIntrospectionEnabled() {
|
|
19787
|
+
try {
|
|
19788
|
+
if (isDevMode()) {
|
|
19789
|
+
return true;
|
|
19790
|
+
}
|
|
19791
|
+
return globalThis.__wuicE2E === true;
|
|
19792
|
+
}
|
|
19793
|
+
catch {
|
|
19794
|
+
return false;
|
|
19795
|
+
}
|
|
19796
|
+
}
|
|
19797
|
+
|
|
19671
19798
|
/**
|
|
19672
19799
|
* Metametrics — Dashboard amministrativa delle metriche route
|
|
19673
19800
|
* (menu Amministrazione → route `/route-metrics-dashboard`).
|
|
@@ -19705,6 +19832,9 @@ class RouteMetricsDashboardComponent {
|
|
|
19705
19832
|
metric = 'fetch';
|
|
19706
19833
|
valueKind = 'avg';
|
|
19707
19834
|
scope = 'global';
|
|
19835
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E): in build di
|
|
19836
|
+
* produzione `window.ng` non c'e' e route-metrics-dashboard--filters legge lo stato da qui. */
|
|
19837
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
19708
19838
|
/** Palette serie (ciclica) — colori PrimeNG standard, ok light/dark. */
|
|
19709
19839
|
palette = ['#3b82f6', '#22c55e', '#f97316', '#a855f7', '#ef4444', '#14b8a6', '#eab308', '#64748b'];
|
|
19710
19840
|
/**
|
|
@@ -22001,7 +22131,7 @@ class LazySchedulerListComponent {
|
|
|
22001
22131
|
* Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
|
|
22002
22132
|
*/
|
|
22003
22133
|
async ngOnInit() {
|
|
22004
|
-
schedulerListComponentPromise ??= import('./wuic-framework-lib-scheduler-list.component-
|
|
22134
|
+
schedulerListComponentPromise ??= import('./wuic-framework-lib-scheduler-list.component-BXx84Cc7.mjs').then((m) => m.SchedulerListComponent);
|
|
22005
22135
|
this.loadedComponent = await schedulerListComponentPromise;
|
|
22006
22136
|
this.cdr.markForCheck();
|
|
22007
22137
|
}
|
|
@@ -22209,7 +22339,7 @@ class LazySpreadsheetListSfComponent {
|
|
|
22209
22339
|
this.activatedRoute = activatedRoute;
|
|
22210
22340
|
}
|
|
22211
22341
|
async ngOnInit() {
|
|
22212
|
-
spreadsheetListSfComponentPromise ??= import('./wuic-framework-lib-spreadsheet-list-sf.component-
|
|
22342
|
+
spreadsheetListSfComponentPromise ??= import('./wuic-framework-lib-spreadsheet-list-sf.component-v7rE3WW_.mjs').then((m) => m.SpreadsheetListSfComponent);
|
|
22213
22343
|
this.loadedComponent = await spreadsheetListSfComponentPromise;
|
|
22214
22344
|
// Quando la promise e' gia' risolta dal cache module-scope (secondo mount
|
|
22215
22345
|
// post-refresh), il microtask che risolve `await` non scatena sempre CD
|
|
@@ -22487,7 +22617,7 @@ class LazyChartListComponent {
|
|
|
22487
22617
|
* Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
|
|
22488
22618
|
*/
|
|
22489
22619
|
async ngOnInit() {
|
|
22490
|
-
chartListComponentPromise ??= import('./wuic-framework-lib-chart-list.component-
|
|
22620
|
+
chartListComponentPromise ??= import('./wuic-framework-lib-chart-list.component-BIpu6QY3.mjs').then((m) => m.ChartListComponent);
|
|
22491
22621
|
this.loadedComponent = await chartListComponentPromise;
|
|
22492
22622
|
this.cdr.markForCheck();
|
|
22493
22623
|
}
|
|
@@ -22809,7 +22939,7 @@ class LazyTimelineListComponent {
|
|
|
22809
22939
|
this.cdr = cdr;
|
|
22810
22940
|
}
|
|
22811
22941
|
async ngOnInit() {
|
|
22812
|
-
timelineListComponentPromise ??= import('./wuic-framework-lib-timeline-list.component-
|
|
22942
|
+
timelineListComponentPromise ??= import('./wuic-framework-lib-timeline-list.component-CP9PpRQB.mjs').then((m) => m.TimelineListComponent);
|
|
22813
22943
|
this.loadedComponent = await timelineListComponentPromise;
|
|
22814
22944
|
this.cdr.markForCheck();
|
|
22815
22945
|
}
|
|
@@ -24078,7 +24208,7 @@ class MetadataEditorComponent {
|
|
|
24078
24208
|
}
|
|
24079
24209
|
let result;
|
|
24080
24210
|
try {
|
|
24081
|
-
const { ReportScaffoldDialogComponent } = await import('./wuic-framework-lib-report-scaffold-dialog.component-
|
|
24211
|
+
const { ReportScaffoldDialogComponent } = await import('./wuic-framework-lib-report-scaffold-dialog.component-okexsstE.mjs');
|
|
24082
24212
|
WtoolboxService.resolveDialogServiceFromInjector();
|
|
24083
24213
|
const ref = WtoolboxService.dialogService?.open?.(ReportScaffoldDialogComponent, {
|
|
24084
24214
|
header: this.t('report.scaffold.dialog_title', 'Create report'),
|
|
@@ -26719,6 +26849,15 @@ class PointFilterComponent {
|
|
|
26719
26849
|
* Proprieta di stato del componente per map zoom, usata dalla logica interna e dal template.
|
|
26720
26850
|
*/
|
|
26721
26851
|
mapZoom = 6;
|
|
26852
|
+
/**
|
|
26853
|
+
* Il template monta `<google-map>` solo se lo script Maps e' caricato (stesso controllo di
|
|
26854
|
+
* `MapListComponent.isMapsApiAvailable`). E' un getter perche' la condizione va rivalutata a
|
|
26855
|
+
* ogni change detection: se lo script arriva dopo, la mappa compare senza ricaricare.
|
|
26856
|
+
*/
|
|
26857
|
+
get mapsApiReady() {
|
|
26858
|
+
const g = globalThis.google;
|
|
26859
|
+
return !!(g && g.maps && typeof g.maps.importLibrary === 'function');
|
|
26860
|
+
}
|
|
26722
26861
|
/**
|
|
26723
26862
|
* Modalita' di disegno corrente. Sostituisce `google.maps.drawing.DrawingManager`
|
|
26724
26863
|
* deprecato (Maps JavaScript API drawing library, deprecated 2025-08, removed
|
|
@@ -27274,11 +27413,11 @@ class PointFilterComponent {
|
|
|
27274
27413
|
};
|
|
27275
27414
|
}
|
|
27276
27415
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: PointFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
27277
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: PointFilterComponent, isStandalone: true, selector: "wuic-point-filter", inputs: { record: "record", field: "field", metaInfo: "metaInfo", datasource: "datasource" }, viewQueries: [{ propertyName: "map", first: true, predicate: GoogleMap, descendants: true }], ngImport: i0, template: "<div class=\"point-filter-box\">\r\n <div class=\"point-filter-actions\">\r\n <button pButton type=\"button\" icon=\"pi pi-map\" [pTooltip]=\"'map.configure' | translate\" tooltipPosition=\"top\"\r\n class=\"p-button-sm\" (click)=\"openDialog()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" [pTooltip]=\"'form_reset' | translate\" tooltipPosition=\"top\"\r\n class=\"p-button-sm p-button-secondary p-button-outlined\" (click)=\"clearFilter()\"></button>\r\n\r\n <span class=\"point-filter-status\">\r\n @if (pendingOperator === 'maparea') {\r\n <i class=\"pi pi-check-circle point-filter-status-icon active\"></i>\r\n <span>{{ 'point_filter.area_ready' | translate }}</span>\r\n } @else if (pendingOperator === 'mapdistance') {\r\n <i class=\"pi pi-check-circle point-filter-status-icon active\"></i>\r\n <span>{{ 'point_filter.circle_ready' | translate }}</span>\r\n } @else {\r\n <i class=\"pi pi-map-marker point-filter-status-icon\"></i>\r\n <span>{{ 'point_filter.none' | translate }}</span>\r\n }\r\n </span>\r\n </div>\r\n</div>\r\n\r\n<p-dialog [header]=\"'point_filter.header' | translate\" [(visible)]=\"dialogVisible\" [modal]=\"true\" [closable]=\"true\" [style]=\"{ width: '920px', maxWidth: '95vw' }\">\r\n <div class=\"point-filter-dialog-actions\">\r\n <button pButton type=\"button\" icon=\"pi pi-pencil\" [label]=\"'point_filter.draw_area' | translate\"\r\n class=\"p-button-sm\" (click)=\"drawArea()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-circle\" [label]=\"'point_filter.draw_circle' | translate\"\r\n class=\"p-button-sm\" (click)=\"drawCircle()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-trash\" [label]=\"'point_filter.clear_shape' | translate\"\r\n class=\"p-button-sm p-button-secondary p-button-outlined\" (click)=\"clearShapes()\"></button>\r\n </div>\r\n\r\n <google-map [height]=\"'420px'\" [width]=\"'100%'\" [center]=\"mapCenter\" [zoom]=\"mapZoom\"></google-map>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <button pButton type=\"button\" icon=\"pi pi-times\" [label]=\"'cancel' | translate\"\r\n class=\"p-button-secondary\" (click)=\"closeDialog()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-check\" [label]=\"'point_filter.use_filter' | translate\"\r\n (click)=\"applyFilter()\"></button>\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [".point-filter-box{display:flex;flex-direction:column;gap:.25rem}.point-filter-actions{display:flex;align-items:center;gap:.4rem}.point-filter-status{display:inline-flex;align-items:center;gap:.3rem;font-size:.8rem;color:#64748b;margin-left:.25rem}.point-filter-status-icon{font-size:.85rem;color:#94a3b8}.point-filter-status-icon.active{color:#22c55e}.point-filter-dialog-actions{display:flex;gap:.5rem;margin-bottom:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: GoogleMapsModule }, { kind: "component", type: i5$2.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { 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: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
27416
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: PointFilterComponent, isStandalone: true, selector: "wuic-point-filter", inputs: { record: "record", field: "field", metaInfo: "metaInfo", datasource: "datasource" }, viewQueries: [{ propertyName: "map", first: true, predicate: GoogleMap, descendants: true }], ngImport: i0, template: "<div class=\"point-filter-box\">\r\n <div class=\"point-filter-actions\">\r\n <button pButton type=\"button\" icon=\"pi pi-map\" [pTooltip]=\"'map.configure' | translate\" tooltipPosition=\"top\"\r\n class=\"p-button-sm\" (click)=\"openDialog()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" [pTooltip]=\"'form_reset' | translate\" tooltipPosition=\"top\"\r\n class=\"p-button-sm p-button-secondary p-button-outlined\" (click)=\"clearFilter()\"></button>\r\n\r\n <span class=\"point-filter-status\">\r\n @if (pendingOperator === 'maparea') {\r\n <i class=\"pi pi-check-circle point-filter-status-icon active\"></i>\r\n <span>{{ 'point_filter.area_ready' | translate }}</span>\r\n } @else if (pendingOperator === 'mapdistance') {\r\n <i class=\"pi pi-check-circle point-filter-status-icon active\"></i>\r\n <span>{{ 'point_filter.circle_ready' | translate }}</span>\r\n } @else {\r\n <i class=\"pi pi-map-marker point-filter-status-icon\"></i>\r\n <span>{{ 'point_filter.none' | translate }}</span>\r\n }\r\n </span>\r\n </div>\r\n</div>\r\n\r\n<p-dialog [header]=\"'point_filter.header' | translate\" [(visible)]=\"dialogVisible\" [modal]=\"true\" [closable]=\"true\" [style]=\"{ width: '920px', maxWidth: '95vw' }\">\r\n <div class=\"point-filter-dialog-actions\">\r\n <button pButton type=\"button\" icon=\"pi pi-pencil\" [label]=\"'point_filter.draw_area' | translate\"\r\n class=\"p-button-sm\" (click)=\"drawArea()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-circle\" [label]=\"'point_filter.draw_circle' | translate\"\r\n class=\"p-button-sm\" (click)=\"drawCircle()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-trash\" [label]=\"'point_filter.clear_shape' | translate\"\r\n class=\"p-button-sm p-button-secondary p-button-outlined\" (click)=\"clearShapes()\"></button>\r\n </div>\r\n\r\n <!-- `mapsApiReady` come in map-list: il contenuto proiettato nel p-dialog viene creato\r\n SUBITO, anche a dialog chiuso, quindi <google-map> girava il suo ngOnInit appena la\r\n filter-bar mostrava il filtro geografico. Senza lo script Maps (chiave API vuota) lanciava\r\n `ReferenceError: google is not defined`, che apriva il dialog di errore applicativo sopra\r\n la filter-bar e bloccava tutta la pagina (cella Windows x postgres, 23/09/2026:\r\n filter-bar--operators, responsive filter-bar-overlay, point-filter--*). -->\r\n @if (mapsApiReady) {\r\n <google-map [height]=\"'420px'\" [width]=\"'100%'\" [center]=\"mapCenter\" [zoom]=\"mapZoom\"></google-map>\r\n } @else {\r\n <div class=\"point-filter-map-unavailable\" role=\"status\">\r\n <i class=\"pi pi-map\" aria-hidden=\"true\"></i>\r\n <div class=\"point-filter-map-unavailable__title\">{{ 'map.api_key_missing.title' | translate }}</div>\r\n <div>{{ 'map.api_key_missing.detail' | translate }}</div>\r\n </div>\r\n }\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <button pButton type=\"button\" icon=\"pi pi-times\" [label]=\"'cancel' | translate\"\r\n class=\"p-button-secondary\" (click)=\"closeDialog()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-check\" [label]=\"'point_filter.use_filter' | translate\"\r\n (click)=\"applyFilter()\"></button>\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [".point-filter-box{display:flex;flex-direction:column;gap:.25rem}.point-filter-actions{display:flex;align-items:center;gap:.4rem}.point-filter-status{display:inline-flex;align-items:center;gap:.3rem;font-size:.8rem;color:#64748b;margin-left:.25rem}.point-filter-status-icon{font-size:.85rem;color:#94a3b8}.point-filter-status-icon.active{color:#22c55e}.point-filter-dialog-actions{display:flex;gap:.5rem;margin-bottom:.75rem}.point-filter-map-unavailable{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;min-height:220px;padding:1.5rem;text-align:center;color:var(--text-color-secondary, #64748b);border:1px dashed var(--surface-border, #e2e8f0)}.point-filter-map-unavailable__title{font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: GoogleMapsModule }, { kind: "component", type: i5$2.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { 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: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
27278
27417
|
}
|
|
27279
27418
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: PointFilterComponent, decorators: [{
|
|
27280
27419
|
type: Component,
|
|
27281
|
-
args: [{ selector: 'wuic-point-filter', imports: [GoogleMapsModule, DialogModule, ButtonModule, TooltipModule, TranslateModule], template: "<div class=\"point-filter-box\">\r\n <div class=\"point-filter-actions\">\r\n <button pButton type=\"button\" icon=\"pi pi-map\" [pTooltip]=\"'map.configure' | translate\" tooltipPosition=\"top\"\r\n class=\"p-button-sm\" (click)=\"openDialog()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" [pTooltip]=\"'form_reset' | translate\" tooltipPosition=\"top\"\r\n class=\"p-button-sm p-button-secondary p-button-outlined\" (click)=\"clearFilter()\"></button>\r\n\r\n <span class=\"point-filter-status\">\r\n @if (pendingOperator === 'maparea') {\r\n <i class=\"pi pi-check-circle point-filter-status-icon active\"></i>\r\n <span>{{ 'point_filter.area_ready' | translate }}</span>\r\n } @else if (pendingOperator === 'mapdistance') {\r\n <i class=\"pi pi-check-circle point-filter-status-icon active\"></i>\r\n <span>{{ 'point_filter.circle_ready' | translate }}</span>\r\n } @else {\r\n <i class=\"pi pi-map-marker point-filter-status-icon\"></i>\r\n <span>{{ 'point_filter.none' | translate }}</span>\r\n }\r\n </span>\r\n </div>\r\n</div>\r\n\r\n<p-dialog [header]=\"'point_filter.header' | translate\" [(visible)]=\"dialogVisible\" [modal]=\"true\" [closable]=\"true\" [style]=\"{ width: '920px', maxWidth: '95vw' }\">\r\n <div class=\"point-filter-dialog-actions\">\r\n <button pButton type=\"button\" icon=\"pi pi-pencil\" [label]=\"'point_filter.draw_area' | translate\"\r\n class=\"p-button-sm\" (click)=\"drawArea()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-circle\" [label]=\"'point_filter.draw_circle' | translate\"\r\n class=\"p-button-sm\" (click)=\"drawCircle()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-trash\" [label]=\"'point_filter.clear_shape' | translate\"\r\n class=\"p-button-sm p-button-secondary p-button-outlined\" (click)=\"clearShapes()\"></button>\r\n </div>\r\n\r\n <google-map [height]=\"'420px'\" [width]=\"'100%'\" [center]=\"mapCenter\" [zoom]=\"mapZoom\"></google-map>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <button pButton type=\"button\" icon=\"pi pi-times\" [label]=\"'cancel' | translate\"\r\n class=\"p-button-secondary\" (click)=\"closeDialog()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-check\" [label]=\"'point_filter.use_filter' | translate\"\r\n (click)=\"applyFilter()\"></button>\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [".point-filter-box{display:flex;flex-direction:column;gap:.25rem}.point-filter-actions{display:flex;align-items:center;gap:.4rem}.point-filter-status{display:inline-flex;align-items:center;gap:.3rem;font-size:.8rem;color:#64748b;margin-left:.25rem}.point-filter-status-icon{font-size:.85rem;color:#94a3b8}.point-filter-status-icon.active{color:#22c55e}.point-filter-dialog-actions{display:flex;gap:.5rem;margin-bottom:.75rem}\n"] }]
|
|
27420
|
+
args: [{ selector: 'wuic-point-filter', imports: [GoogleMapsModule, DialogModule, ButtonModule, TooltipModule, TranslateModule], template: "<div class=\"point-filter-box\">\r\n <div class=\"point-filter-actions\">\r\n <button pButton type=\"button\" icon=\"pi pi-map\" [pTooltip]=\"'map.configure' | translate\" tooltipPosition=\"top\"\r\n class=\"p-button-sm\" (click)=\"openDialog()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" [pTooltip]=\"'form_reset' | translate\" tooltipPosition=\"top\"\r\n class=\"p-button-sm p-button-secondary p-button-outlined\" (click)=\"clearFilter()\"></button>\r\n\r\n <span class=\"point-filter-status\">\r\n @if (pendingOperator === 'maparea') {\r\n <i class=\"pi pi-check-circle point-filter-status-icon active\"></i>\r\n <span>{{ 'point_filter.area_ready' | translate }}</span>\r\n } @else if (pendingOperator === 'mapdistance') {\r\n <i class=\"pi pi-check-circle point-filter-status-icon active\"></i>\r\n <span>{{ 'point_filter.circle_ready' | translate }}</span>\r\n } @else {\r\n <i class=\"pi pi-map-marker point-filter-status-icon\"></i>\r\n <span>{{ 'point_filter.none' | translate }}</span>\r\n }\r\n </span>\r\n </div>\r\n</div>\r\n\r\n<p-dialog [header]=\"'point_filter.header' | translate\" [(visible)]=\"dialogVisible\" [modal]=\"true\" [closable]=\"true\" [style]=\"{ width: '920px', maxWidth: '95vw' }\">\r\n <div class=\"point-filter-dialog-actions\">\r\n <button pButton type=\"button\" icon=\"pi pi-pencil\" [label]=\"'point_filter.draw_area' | translate\"\r\n class=\"p-button-sm\" (click)=\"drawArea()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-circle\" [label]=\"'point_filter.draw_circle' | translate\"\r\n class=\"p-button-sm\" (click)=\"drawCircle()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-trash\" [label]=\"'point_filter.clear_shape' | translate\"\r\n class=\"p-button-sm p-button-secondary p-button-outlined\" (click)=\"clearShapes()\"></button>\r\n </div>\r\n\r\n <!-- `mapsApiReady` come in map-list: il contenuto proiettato nel p-dialog viene creato\r\n SUBITO, anche a dialog chiuso, quindi <google-map> girava il suo ngOnInit appena la\r\n filter-bar mostrava il filtro geografico. Senza lo script Maps (chiave API vuota) lanciava\r\n `ReferenceError: google is not defined`, che apriva il dialog di errore applicativo sopra\r\n la filter-bar e bloccava tutta la pagina (cella Windows x postgres, 23/09/2026:\r\n filter-bar--operators, responsive filter-bar-overlay, point-filter--*). -->\r\n @if (mapsApiReady) {\r\n <google-map [height]=\"'420px'\" [width]=\"'100%'\" [center]=\"mapCenter\" [zoom]=\"mapZoom\"></google-map>\r\n } @else {\r\n <div class=\"point-filter-map-unavailable\" role=\"status\">\r\n <i class=\"pi pi-map\" aria-hidden=\"true\"></i>\r\n <div class=\"point-filter-map-unavailable__title\">{{ 'map.api_key_missing.title' | translate }}</div>\r\n <div>{{ 'map.api_key_missing.detail' | translate }}</div>\r\n </div>\r\n }\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <button pButton type=\"button\" icon=\"pi pi-times\" [label]=\"'cancel' | translate\"\r\n class=\"p-button-secondary\" (click)=\"closeDialog()\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-check\" [label]=\"'point_filter.use_filter' | translate\"\r\n (click)=\"applyFilter()\"></button>\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [".point-filter-box{display:flex;flex-direction:column;gap:.25rem}.point-filter-actions{display:flex;align-items:center;gap:.4rem}.point-filter-status{display:inline-flex;align-items:center;gap:.3rem;font-size:.8rem;color:#64748b;margin-left:.25rem}.point-filter-status-icon{font-size:.85rem;color:#94a3b8}.point-filter-status-icon.active{color:#22c55e}.point-filter-dialog-actions{display:flex;gap:.5rem;margin-bottom:.75rem}.point-filter-map-unavailable{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;min-height:220px;padding:1.5rem;text-align:center;color:var(--text-color-secondary, #64748b);border:1px dashed var(--surface-border, #e2e8f0)}.point-filter-map-unavailable__title{font-weight:600}\n"] }]
|
|
27282
27421
|
}], propDecorators: { record: [{
|
|
27283
27422
|
type: Input
|
|
27284
27423
|
}], field: [{
|
|
@@ -27293,6 +27432,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
27293
27432
|
}] } });
|
|
27294
27433
|
|
|
27295
27434
|
class NumberEditorComponent {
|
|
27435
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
27436
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
27296
27437
|
/**
|
|
27297
27438
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
27298
27439
|
*/
|
|
@@ -29626,6 +29767,8 @@ class BoundedRepeaterComponent {
|
|
|
29626
29767
|
userService;
|
|
29627
29768
|
sanitizer;
|
|
29628
29769
|
cdr;
|
|
29770
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
29771
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
29629
29772
|
/**
|
|
29630
29773
|
* Input dal componente padre per hardcoded route; usata nella configurazione e nel rendering del componente.
|
|
29631
29774
|
*/
|
|
@@ -30178,6 +30321,8 @@ class FieldEditorComponent {
|
|
|
30178
30321
|
userInfo;
|
|
30179
30322
|
metadataEditorSrv;
|
|
30180
30323
|
hostElementRef;
|
|
30324
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
30325
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
30181
30326
|
static LABEL_FOR_SUPPORTED_WIDGETS = new Set([
|
|
30182
30327
|
'text',
|
|
30183
30328
|
'textarea',
|
|
@@ -31137,6 +31282,8 @@ class ParametricDialogComponent {
|
|
|
31137
31282
|
hostElementRef;
|
|
31138
31283
|
customAttributesService;
|
|
31139
31284
|
dialogService;
|
|
31285
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
31286
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
31140
31287
|
/**
|
|
31141
31288
|
* Input dal componente padre per datasource; usata nella configurazione e nel rendering del componente.
|
|
31142
31289
|
*/
|
|
@@ -31361,7 +31508,11 @@ class ParametricDialogComponent {
|
|
|
31361
31508
|
const fetchInfo$ = this.datasource.value?.fetchInfo$;
|
|
31362
31509
|
if (fetchInfo$ && typeof fetchInfo$.subscribe === 'function') {
|
|
31363
31510
|
this.fetchInfoSubscription = fetchInfo$.subscribe((info) => {
|
|
31364
|
-
if (info
|
|
31511
|
+
if (!info) {
|
|
31512
|
+
this.segnalaRecordNonCaricato();
|
|
31513
|
+
return;
|
|
31514
|
+
}
|
|
31515
|
+
if (info.metaInfo) {
|
|
31365
31516
|
this.applyDatasourceSnapshot(this.datasource?.value, info.metaInfo);
|
|
31366
31517
|
this.ensureWizardTrackingBound(this.datasource?.value);
|
|
31367
31518
|
this.bootstrapConditionalActions();
|
|
@@ -31380,7 +31531,11 @@ class ParametricDialogComponent {
|
|
|
31380
31531
|
const fetchInfo$ = this.datasource.value?.fetchInfo$;
|
|
31381
31532
|
if (fetchInfo$ && typeof fetchInfo$.subscribe === 'function') {
|
|
31382
31533
|
this.fetchInfoSubscription = fetchInfo$.subscribe((info) => {
|
|
31383
|
-
if (info
|
|
31534
|
+
if (!info) {
|
|
31535
|
+
this.segnalaRecordNonCaricato();
|
|
31536
|
+
return;
|
|
31537
|
+
}
|
|
31538
|
+
if (info.metaInfo) {
|
|
31384
31539
|
this.applyDatasourceSnapshot(this.datasource?.value, info.metaInfo);
|
|
31385
31540
|
this.ensureWizardTrackingBound(this.datasource?.value);
|
|
31386
31541
|
this.bootstrapConditionalActions();
|
|
@@ -31442,6 +31597,62 @@ class ParametricDialogComponent {
|
|
|
31442
31597
|
record: this.record,
|
|
31443
31598
|
pristine: this.pristine
|
|
31444
31599
|
});
|
|
31600
|
+
// `data-record-loaded`: il record non e' solo ASSEGNATO, i valori sono arrivati.
|
|
31601
|
+
//
|
|
31602
|
+
// Serviva distinguerlo. `wuic-field-editor` espone `data-has-record`, che vale
|
|
31603
|
+
// `this.record ? true : false`, cioe' diventa vero appena la form costruisce lo
|
|
31604
|
+
// scheletro — mentre `getFlatRecordData` e' ancora in volo (misurato su VM il
|
|
31605
|
+
// 21/09/2026: 1,3 s per il record, dentro una raffica di 18 `getTableMetadata`
|
|
31606
|
+
// paralleli, il piu' lento 2,8 s). Chi leggeva un campo appoggiandosi a quel
|
|
31607
|
+
// flag trovava stringa vuota e la scambiava per un difetto: otto prove
|
|
31608
|
+
// `field-widget-*` rosse su entrambi i motori.
|
|
31609
|
+
//
|
|
31610
|
+
// Avere un record non basta: questo metodo gira anche prima dei dati, e in quel
|
|
31611
|
+
// caso il record e' quello VUOTO creato qui sopra da `addNewRecord`. Succede
|
|
31612
|
+
// (a) sul payload anticipato del datasource (`preliminare: true`, emesso appena
|
|
31613
|
+
// arrivano i metadati) e (b) quando il dialogo nasce dopo il reset di `init()`,
|
|
31614
|
+
// con `fetchInfo$` ancora a null. Misurato il 23/09/2026 su Linux x MySQL e
|
|
31615
|
+
// Windows x PostgreSQL: il segnale saliva a +0,2 s, PRIMA che partisse la
|
|
31616
|
+
// richiesta `getFlatRecordData`, e il valore arrivava a +1,0/1,6 s. Si alza
|
|
31617
|
+
// quindi solo quando il payload corrente e' una risposta vera: quella del
|
|
31618
|
+
// record in edit, o quella vuota di un inserimento (dove il record di
|
|
31619
|
+
// `addNewRecord` E' il record giusto). Un datasource senza `fetchInfo$` (quello
|
|
31620
|
+
// costruito da `promptDialog`) non ha niente da caricare: il suo record e' gia'
|
|
31621
|
+
// quello definitivo.
|
|
31622
|
+
try {
|
|
31623
|
+
const el = this.hostElementRef?.nativeElement;
|
|
31624
|
+
const cicloDati = ds.fetchInfo$;
|
|
31625
|
+
const payloadCorrente = cicloDati?.value;
|
|
31626
|
+
const datiArrivati = !!this.record
|
|
31627
|
+
&& (!cicloDati || (!!payloadCorrente && payloadCorrente.preliminare !== true));
|
|
31628
|
+
if (el) {
|
|
31629
|
+
el.setAttribute('data-record-loaded', datiArrivati ? 'true' : 'false');
|
|
31630
|
+
}
|
|
31631
|
+
}
|
|
31632
|
+
catch { /* ambiente senza DOM */ }
|
|
31633
|
+
}
|
|
31634
|
+
/**
|
|
31635
|
+
* Abbassa `data-record-loaded` quando il datasource pubblica `null` su `fetchInfo$`.
|
|
31636
|
+
*
|
|
31637
|
+
* Quel `null` lo emette solo `init()` del datasource, cioe' un ricaricamento appena
|
|
31638
|
+
* partito: da `cities/edit/A` a `cities/edit/B` il componente e' riusato e il
|
|
31639
|
+
* gestore NavigationEnd rifa' init + getSchemaAndData. La subscribe ignorava il
|
|
31640
|
+
* payload nullo, e siccome `resultInfo.dato` ha ancora il record A il datasource non
|
|
31641
|
+
* emette nemmeno il payload preliminare: il segnale restava "true" sul record A per
|
|
31642
|
+
* tutta la durata della richiesta di B, e chi lo aspettava leggeva i valori di A
|
|
31643
|
+
* credendoli di B. Qui non si ricalcola niente: con il payload corrente a `null` la
|
|
31644
|
+
* formula di `applyDatasourceSnapshot` darebbe comunque "false", e il segnale si
|
|
31645
|
+
* rialza da li' quando arriva la risposta vera. Il contratto degli altri casi non
|
|
31646
|
+
* cambia: popup (`config.data`, senza subscribe) e promptDialog (senza `fetchInfo$`)
|
|
31647
|
+
* non ricevono mai questo `null`; un inserimento raggiunto navigando riparte da
|
|
31648
|
+
* "false" e si rialza con la sua risposta vuota, come gia' prevedeva la formula; una
|
|
31649
|
+
* form senza record era gia' a "false".
|
|
31650
|
+
*/
|
|
31651
|
+
segnalaRecordNonCaricato() {
|
|
31652
|
+
try {
|
|
31653
|
+
this.hostElementRef?.nativeElement?.setAttribute('data-record-loaded', 'false');
|
|
31654
|
+
}
|
|
31655
|
+
catch { /* ambiente senza DOM */ }
|
|
31445
31656
|
}
|
|
31446
31657
|
/**
|
|
31447
31658
|
* In modalita wizard forza una singola riallocazione del current record sul datasource
|
|
@@ -34472,6 +34683,9 @@ class ImportExportButtonComponent {
|
|
|
34472
34683
|
trslSrv;
|
|
34473
34684
|
userInfo;
|
|
34474
34685
|
cdr;
|
|
34686
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E): in build di
|
|
34687
|
+
* produzione `window.ng` non c'e' e i test leggono lo stato dei dialog import/export da qui. */
|
|
34688
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
34475
34689
|
routeName = '';
|
|
34476
34690
|
tableMetadata = null;
|
|
34477
34691
|
/**
|
|
@@ -35310,6 +35524,8 @@ class ListGridComponent {
|
|
|
35310
35524
|
deviceAwareness;
|
|
35311
35525
|
zone;
|
|
35312
35526
|
customAttributesService;
|
|
35527
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
35528
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
35313
35529
|
static FORCED_VIRTUALIZATION_PAGE_SIZE_THRESHOLD = 1000;
|
|
35314
35530
|
static FORCED_VIRTUALIZATION_ITEM_SIZE = 44;
|
|
35315
35531
|
static ACTION_BUTTON_VISIBLE_ROWS_OVERSCAN = 4;
|
|
@@ -42271,6 +42487,8 @@ class MapListComponent {
|
|
|
42271
42487
|
route;
|
|
42272
42488
|
userInfo;
|
|
42273
42489
|
trslSrv;
|
|
42490
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
42491
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
42274
42492
|
/**
|
|
42275
42493
|
* Riferimento a elementi o componenti figli usato dalla logica UI per map.
|
|
42276
42494
|
*/
|
|
@@ -44656,6 +44874,8 @@ class CarouselListComponent {
|
|
|
44656
44874
|
route;
|
|
44657
44875
|
trslSrv;
|
|
44658
44876
|
userInfo;
|
|
44877
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
44878
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
44659
44879
|
/**
|
|
44660
44880
|
* Input dal componente padre per hardcoded route; usata nella configurazione e nel rendering del componente.
|
|
44661
44881
|
*/
|
|
@@ -45278,6 +45498,8 @@ class TreeListComponent {
|
|
|
45278
45498
|
dataSrv;
|
|
45279
45499
|
cd;
|
|
45280
45500
|
trslSrv;
|
|
45501
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
45502
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
45281
45503
|
/**
|
|
45282
45504
|
* Input dal componente padre per hardcoded route; usata nella configurazione e nel rendering del componente.
|
|
45283
45505
|
*/
|
|
@@ -48602,6 +48824,8 @@ class MetaMenuComponent {
|
|
|
48602
48824
|
userLanguage;
|
|
48603
48825
|
headerConfig;
|
|
48604
48826
|
themeCatalog;
|
|
48827
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
48828
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
48605
48829
|
/**
|
|
48606
48830
|
* Collezione dati per items, consumata dal rendering e dalle operazioni del componente.
|
|
48607
48831
|
*/
|
|
@@ -50344,7 +50568,7 @@ class LazyFirstRunWizardComponent {
|
|
|
50344
50568
|
this.cdr = cdr;
|
|
50345
50569
|
}
|
|
50346
50570
|
async ngOnInit() {
|
|
50347
|
-
firstRunWizardComponentPromise ??= import('./wuic-framework-lib-first-run-wizard.component-
|
|
50571
|
+
firstRunWizardComponentPromise ??= import('./wuic-framework-lib-first-run-wizard.component-CGCBKpdv.mjs').then((m) => m.WuicFirstRunWizardComponent);
|
|
50348
50572
|
const componentClass = await firstRunWizardComponentPromise;
|
|
50349
50573
|
this.componentRef = this.vcr.createComponent(componentClass);
|
|
50350
50574
|
// Forward output del componente reale al wrapper. Type assertion necessaria
|
|
@@ -50379,6 +50603,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
50379
50603
|
}] } });
|
|
50380
50604
|
|
|
50381
50605
|
class TextEditorComponent {
|
|
50606
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
50607
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
50382
50608
|
/**
|
|
50383
50609
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
50384
50610
|
*/
|
|
@@ -50501,6 +50727,8 @@ var textEditor_component = /*#__PURE__*/Object.freeze({
|
|
|
50501
50727
|
});
|
|
50502
50728
|
|
|
50503
50729
|
class TextAreaEditorComponent {
|
|
50730
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
50731
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
50504
50732
|
/**
|
|
50505
50733
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
50506
50734
|
*/
|
|
@@ -50608,6 +50836,8 @@ class LookupEditorComponent {
|
|
|
50608
50836
|
trslSrv;
|
|
50609
50837
|
cd;
|
|
50610
50838
|
hostElementRef;
|
|
50839
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
50840
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
50611
50841
|
static LOOKUP_VIRTUALIZATION_DEFAULT_ITEM_SIZE = 44;
|
|
50612
50842
|
pendingSearchFocusRestore = false;
|
|
50613
50843
|
lookupOverlayVisible = false;
|
|
@@ -51415,6 +51645,8 @@ var lookupEditor_component = /*#__PURE__*/Object.freeze({
|
|
|
51415
51645
|
class DictionaryEditorComponent {
|
|
51416
51646
|
trnSrv;
|
|
51417
51647
|
hostElementRef;
|
|
51648
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
51649
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
51418
51650
|
/**
|
|
51419
51651
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
51420
51652
|
*/
|
|
@@ -51779,6 +52011,8 @@ var dictionaryEditor_component = /*#__PURE__*/Object.freeze({
|
|
|
51779
52011
|
});
|
|
51780
52012
|
|
|
51781
52013
|
class BooleanEditorComponent {
|
|
52014
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
52015
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
51782
52016
|
/**
|
|
51783
52017
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
51784
52018
|
*/
|
|
@@ -51930,6 +52164,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
51930
52164
|
}] });
|
|
51931
52165
|
|
|
51932
52166
|
class DateEditorComponent {
|
|
52167
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
52168
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
51933
52169
|
/**
|
|
51934
52170
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
51935
52171
|
*/
|
|
@@ -52038,6 +52274,8 @@ var dateEditor_component = /*#__PURE__*/Object.freeze({
|
|
|
52038
52274
|
});
|
|
52039
52275
|
|
|
52040
52276
|
class HtmlEditorComponent {
|
|
52277
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
52278
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
52041
52279
|
/**
|
|
52042
52280
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
52043
52281
|
*/
|
|
@@ -61282,6 +61520,8 @@ class UploadEditorComponent {
|
|
|
61282
61520
|
trnsl;
|
|
61283
61521
|
usrSrv;
|
|
61284
61522
|
config;
|
|
61523
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
61524
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
61285
61525
|
/**
|
|
61286
61526
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
61287
61527
|
*/
|
|
@@ -61924,6 +62164,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
61924
62164
|
* CodeEditorComponent + parser SQL/TS in un chunk separato caricato on-demand.
|
|
61925
62165
|
*/
|
|
61926
62166
|
class CodeAreaEditorComponent {
|
|
62167
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
62168
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
61927
62169
|
/**
|
|
61928
62170
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
61929
62171
|
*/
|
|
@@ -62045,7 +62287,7 @@ class LazyCodeEditorComponent {
|
|
|
62045
62287
|
this.cdr = cdr;
|
|
62046
62288
|
}
|
|
62047
62289
|
async ngOnInit() {
|
|
62048
|
-
codeEditorComponentPromise ??= import('./wuic-framework-lib-code-editor.component-
|
|
62290
|
+
codeEditorComponentPromise ??= import('./wuic-framework-lib-code-editor.component-P181nIU9.mjs').then((m) => m.CodeEditorComponent);
|
|
62049
62291
|
this.loadedComponent = await codeEditorComponentPromise;
|
|
62050
62292
|
this.cdr.markForCheck();
|
|
62051
62293
|
}
|
|
@@ -62218,6 +62460,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
62218
62460
|
}] } });
|
|
62219
62461
|
|
|
62220
62462
|
class ColorEditorComponent {
|
|
62463
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
62464
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
62221
62465
|
/**
|
|
62222
62466
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
62223
62467
|
*/
|
|
@@ -62568,6 +62812,8 @@ var propertyObjectEditor_component = /*#__PURE__*/Object.freeze({
|
|
|
62568
62812
|
});
|
|
62569
62813
|
|
|
62570
62814
|
class TreeViewSelectorComponent {
|
|
62815
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
62816
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
62571
62817
|
/**
|
|
62572
62818
|
* Input dal componente padre per record; usata nella configurazione e nel rendering del componente.
|
|
62573
62819
|
*/
|
|
@@ -63817,6 +64063,8 @@ class NotificationBellComponent {
|
|
|
63817
64063
|
router;
|
|
63818
64064
|
trslSrv;
|
|
63819
64065
|
authSession;
|
|
64066
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
64067
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
63820
64068
|
userId;
|
|
63821
64069
|
// Default sentinel vuoto: se il consumer NON passa l'input, risolviamo via
|
|
63822
64070
|
// TranslationManagerService all'ngOnInit. I fallback italiani restano nel
|
|
@@ -64224,7 +64472,7 @@ class DesignerRouteComponent {
|
|
|
64224
64472
|
* Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
|
|
64225
64473
|
*/
|
|
64226
64474
|
async ngOnInit() {
|
|
64227
|
-
designerComponentPromise ??= import('./wuic-framework-lib-designer.component-
|
|
64475
|
+
designerComponentPromise ??= import('./wuic-framework-lib-designer.component-DZ7C9ygB.mjs').then((m) => m.DesignerComponent);
|
|
64228
64476
|
this.loadedComponent = await designerComponentPromise;
|
|
64229
64477
|
}
|
|
64230
64478
|
/**
|
|
@@ -64305,7 +64553,7 @@ class LazyPivotBuilderComponent {
|
|
|
64305
64553
|
this.cdr = cdr;
|
|
64306
64554
|
}
|
|
64307
64555
|
async ngOnInit() {
|
|
64308
|
-
pivotBuilderComponentPromise ??= import('./wuic-framework-lib-pivot-builder.component-
|
|
64556
|
+
pivotBuilderComponentPromise ??= import('./wuic-framework-lib-pivot-builder.component-CrJUJDxX.mjs').then((m) => m.PivotBuilderComponent);
|
|
64309
64557
|
this.loadedComponent = await pivotBuilderComponentPromise;
|
|
64310
64558
|
this.cdr.markForCheck();
|
|
64311
64559
|
}
|
|
@@ -64344,7 +64592,7 @@ class WorkflowDesignerRouteComponent {
|
|
|
64344
64592
|
* Inizializza il componente preparando stato, sottoscrizioni e primi caricamenti richiesti.
|
|
64345
64593
|
*/
|
|
64346
64594
|
async ngOnInit() {
|
|
64347
|
-
workflowDesignerComponentPromise ??= import('./wuic-framework-lib-workflow-designer.component-
|
|
64595
|
+
workflowDesignerComponentPromise ??= import('./wuic-framework-lib-workflow-designer.component-CETZSZzu.mjs').then((m) => m.WorkflowDesignerComponent);
|
|
64348
64596
|
this.loadedComponent = await workflowDesignerComponentPromise;
|
|
64349
64597
|
}
|
|
64350
64598
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: WorkflowDesignerRouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -64390,7 +64638,7 @@ class Scene3dDesignerRouteComponent {
|
|
|
64390
64638
|
/** Componente designer runtime caricato lazy, usato dal template. */
|
|
64391
64639
|
loadedComponent = null;
|
|
64392
64640
|
async ngOnInit() {
|
|
64393
|
-
scene3dDesignerComponentPromise ??= import('./wuic-framework-lib-scene3d-designer.component-
|
|
64641
|
+
scene3dDesignerComponentPromise ??= import('./wuic-framework-lib-scene3d-designer.component-DLcruDYB.mjs').then(function (n) { return n.s; }).then((m) => m.Scene3dDesignerComponent);
|
|
64394
64642
|
this.loadedComponent = await scene3dDesignerComponentPromise;
|
|
64395
64643
|
}
|
|
64396
64644
|
/** Delega al designer runtime la conferma navigazione con pending changes. */
|
|
@@ -64446,7 +64694,7 @@ class Scene3dViewerRouteComponent {
|
|
|
64446
64694
|
/** Componente viewer runtime caricato lazy, usato dal template. */
|
|
64447
64695
|
loadedComponent = null;
|
|
64448
64696
|
async ngOnInit() {
|
|
64449
|
-
scene3dViewerComponentPromise ??= import('./wuic-framework-lib-scene3d-viewer.component-
|
|
64697
|
+
scene3dViewerComponentPromise ??= import('./wuic-framework-lib-scene3d-viewer.component-DA47y9vo.mjs').then((m) => m.Scene3dViewerComponent);
|
|
64450
64698
|
this.loadedComponent = await scene3dViewerComponentPromise;
|
|
64451
64699
|
}
|
|
64452
64700
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Scene3dViewerRouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -64507,7 +64755,7 @@ class LazyReportDesignerComponent {
|
|
|
64507
64755
|
this.cdr = cdr;
|
|
64508
64756
|
}
|
|
64509
64757
|
async ngOnInit() {
|
|
64510
|
-
reportDesignerComponentPromise ??= import('./wuic-framework-lib-report-designer.component-
|
|
64758
|
+
reportDesignerComponentPromise ??= import('./wuic-framework-lib-report-designer.component-urOz2Pq8.mjs').then((m) => m.ReportDesignerComponent);
|
|
64511
64759
|
this.loadedComponent = await reportDesignerComponentPromise;
|
|
64512
64760
|
this.cdr.markForCheck();
|
|
64513
64761
|
}
|
|
@@ -64562,7 +64810,7 @@ class LazyReportViewerComponent {
|
|
|
64562
64810
|
this.cdr = cdr;
|
|
64563
64811
|
}
|
|
64564
64812
|
async ngOnInit() {
|
|
64565
|
-
reportViewerComponentPromise ??= import('./wuic-framework-lib-report-viewer.component-
|
|
64813
|
+
reportViewerComponentPromise ??= import('./wuic-framework-lib-report-viewer.component-CCpUOyb4.mjs').then((m) => m.ReportViewerComponent);
|
|
64566
64814
|
this.loadedComponent = await reportViewerComponentPromise;
|
|
64567
64815
|
this.cdr.markForCheck();
|
|
64568
64816
|
}
|
|
@@ -64592,6 +64840,8 @@ class KanbanListComponent {
|
|
|
64592
64840
|
userInfo;
|
|
64593
64841
|
cdr;
|
|
64594
64842
|
ngZone;
|
|
64843
|
+
/** Handle di ispezione per i test e2e (attivo solo in dev o con __wuicE2E). */
|
|
64844
|
+
wuicCmpHandle = exposeWuicCmpOnHost(this);
|
|
64595
64845
|
hardcodedRoute;
|
|
64596
64846
|
parentRecord;
|
|
64597
64847
|
parentMetaInfo;
|
|
@@ -68886,7 +69136,7 @@ const themeBuilderPendingChangesGuard = (component) => {
|
|
|
68886
69136
|
const routes = [
|
|
68887
69137
|
{
|
|
68888
69138
|
path: 'framework-docs',
|
|
68889
|
-
loadComponent: () => import('./wuic-framework-lib-framework-docs.component-
|
|
69139
|
+
loadComponent: () => import('./wuic-framework-lib-framework-docs.component-CX4DuW-Q.mjs').then((m) => m.FrameworkDocsComponent),
|
|
68890
69140
|
canMatch: [menuRouteAccessCanMatchGuard],
|
|
68891
69141
|
canActivate: [menuRouteAccessCanActivateGuard],
|
|
68892
69142
|
data: {
|
|
@@ -68895,7 +69145,7 @@ const routes = [
|
|
|
68895
69145
|
},
|
|
68896
69146
|
{
|
|
68897
69147
|
path: 'framework-docs/:slug',
|
|
68898
|
-
loadComponent: () => import('./wuic-framework-lib-framework-docs.component-
|
|
69148
|
+
loadComponent: () => import('./wuic-framework-lib-framework-docs.component-CX4DuW-Q.mjs').then((m) => m.FrameworkDocsComponent),
|
|
68899
69149
|
canMatch: [menuRouteAccessCanMatchGuard],
|
|
68900
69150
|
canActivate: [menuRouteAccessCanActivateGuard],
|
|
68901
69151
|
data: {
|
|
@@ -68940,7 +69190,7 @@ const routes = [
|
|
|
68940
69190
|
},
|
|
68941
69191
|
{
|
|
68942
69192
|
path: ':route/report-designer',
|
|
68943
|
-
loadComponent: () => import('./wuic-framework-lib-report-designer.component-
|
|
69193
|
+
loadComponent: () => import('./wuic-framework-lib-report-designer.component-urOz2Pq8.mjs').then((m) => m.ReportDesignerComponent),
|
|
68944
69194
|
canMatch: [menuRouteAccessCanMatchGuard, featureRouteCanMatchGuard],
|
|
68945
69195
|
canActivate: [menuRouteAccessCanActivateGuard, featureRouteCanActivateGuard],
|
|
68946
69196
|
data: {
|
|
@@ -68950,7 +69200,7 @@ const routes = [
|
|
|
68950
69200
|
},
|
|
68951
69201
|
{
|
|
68952
69202
|
path: ':route/report-viewer',
|
|
68953
|
-
loadComponent: () => import('./wuic-framework-lib-report-viewer.component-
|
|
69203
|
+
loadComponent: () => import('./wuic-framework-lib-report-viewer.component-CCpUOyb4.mjs').then((m) => m.ReportViewerComponent),
|
|
68954
69204
|
canMatch: [menuRouteAccessCanMatchGuard],
|
|
68955
69205
|
canActivate: [menuRouteAccessCanActivateGuard],
|
|
68956
69206
|
data: {
|
|
@@ -68970,7 +69220,7 @@ const routes = [
|
|
|
68970
69220
|
},
|
|
68971
69221
|
{
|
|
68972
69222
|
path: ':route/pivot-builder',
|
|
68973
|
-
loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-
|
|
69223
|
+
loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-CrJUJDxX.mjs').then((m) => m.PivotBuilderComponent),
|
|
68974
69224
|
canMatch: [menuRouteAccessCanMatchGuard, featureRouteCanMatchGuard],
|
|
68975
69225
|
canActivate: [menuRouteAccessCanActivateGuard, featureRouteCanActivateGuard],
|
|
68976
69226
|
data: {
|
|
@@ -68980,7 +69230,7 @@ const routes = [
|
|
|
68980
69230
|
},
|
|
68981
69231
|
{
|
|
68982
69232
|
path: 'pivot-builder',
|
|
68983
|
-
loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-
|
|
69233
|
+
loadComponent: () => import('./wuic-framework-lib-pivot-builder.component-CrJUJDxX.mjs').then((m) => m.PivotBuilderComponent),
|
|
68984
69234
|
canMatch: [menuRouteAccessCanMatchGuard, featureRouteCanMatchGuard],
|
|
68985
69235
|
canActivate: [menuRouteAccessCanActivateGuard, featureRouteCanActivateGuard],
|
|
68986
69236
|
data: {
|
|
@@ -71079,5 +71329,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
71079
71329
|
* Generated bundle index. Do not edit.
|
|
71080
71330
|
*/
|
|
71081
71331
|
|
|
71082
|
-
export {
|
|
71083
|
-
//# sourceMappingURL=wuic-framework-lib-wuic-framework-lib-
|
|
71332
|
+
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
|