@esfaenza/flow-builder 20.3.42 → 20.3.44
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/README.md +77 -7
- package/fesm2022/esfaenza-flow-builder.mjs +809 -146
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +263 -8
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -74,7 +74,15 @@ interface FlowRecordFilter {
|
|
|
74
74
|
value?: FlowValue;
|
|
75
75
|
}
|
|
76
76
|
type FlowRecordFilterOperator = 'EqualTo' | 'NotEqualTo' | 'GreaterThan' | 'GreaterThanOrEqualTo' | 'LessThan' | 'LessThanOrEqualTo' | 'StartsWith' | 'EndsWith' | 'Contains' | 'IsNull' | string;
|
|
77
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* §4.3 — `and` | `or` | espressione sugli indici 1-based | `Formula`.
|
|
79
|
+
*
|
|
80
|
+
* Il tipo e' uno, ma i due campi che lo usano non ammettono le stesse forme: `Formula` vale per
|
|
81
|
+
* il `conditionLogic` di una condizione (l'esito lo determina il campo `formula`), e **non** vale
|
|
82
|
+
* per nessun `filterLogic` — su un dynamic choice set e' un errore di validazione, altrove passa
|
|
83
|
+
* la validazione e fa fallire l'esecuzione (§4.4). La formula di un filtro e' un campo suo,
|
|
84
|
+
* `filterFormula`, e non passa da qui.
|
|
85
|
+
*/
|
|
78
86
|
type FlowConditionLogic = 'and' | 'or' | 'Formula' | string;
|
|
79
87
|
/** Blocco condizioni riusato da Decision rule, Wait event, Collection Processor, Start. */
|
|
80
88
|
interface FlowConditionHolder {
|
|
@@ -176,11 +184,22 @@ interface FlowDynamicChoiceSet {
|
|
|
176
184
|
displayField?: string;
|
|
177
185
|
/** Assente: il valore memorizzato e' `Name` su un enum, e va dichiarato altrove. */
|
|
178
186
|
valueField?: string;
|
|
187
|
+
/**
|
|
188
|
+
* Valgono sulle sole sorgenti `object` — dove diventano la query — ed `enumType`, dove sono
|
|
189
|
+
* valutati in memoria. Su una `collectionReference` le opzioni sono gli elementi della
|
|
190
|
+
* collection nell'ordine in cui ci sono: dichiararli lì e' `CHOICE_SET_FILTERS_IGNORED` (§5.2).
|
|
191
|
+
*/
|
|
179
192
|
sortField?: string;
|
|
180
193
|
sortOrder?: FlowSortOrder;
|
|
194
|
+
/** `limit` invece vale su tutt'e tre le sorgenti; default e massimo 200 (§5.2). */
|
|
181
195
|
limit?: number;
|
|
182
|
-
/** Sempre in AND: nessun `filterLogic` qui (§4.4). Su un enum sono valutati in memoria. */
|
|
183
196
|
filters?: FlowRecordFilter[];
|
|
197
|
+
/**
|
|
198
|
+
* §4.4 — c'e' anche qui: `AND` (o assente), `OR`, oppure la logica personalizzata sugli indici
|
|
199
|
+
* 1-based. Il valore `Formula` **non** e' supportato, e su un choice set e' un errore di
|
|
200
|
+
* validazione esplicito.
|
|
201
|
+
*/
|
|
202
|
+
filterLogic?: FlowConditionLogic;
|
|
184
203
|
}
|
|
185
204
|
interface FlowStage {
|
|
186
205
|
name?: string;
|
|
@@ -2122,8 +2141,14 @@ declare function moveCondition(holder: FlowConditionHolder, from: number, to: nu
|
|
|
2122
2141
|
* Verifica che un'espressione custom sia sintatticamente accettabile e che ogni indice
|
|
2123
2142
|
* esista. Serve al feedback immediato nel form: la verita' resta della validazione
|
|
2124
2143
|
* del backend (`CONDITION_LOGIC_INVALID`).
|
|
2144
|
+
*
|
|
2145
|
+
* Il `term` esiste perche' la stessa regola vale su **due strutture diverse**: le condizioni
|
|
2146
|
+
* (§4.3) e i filtri sui record (§4.4), che dalla revisione del contratto hanno la logica
|
|
2147
|
+
* personalizzata anche sui dynamic choice set. Il progetto tiene distinte le due cose in ogni
|
|
2148
|
+
* altro punto, e un messaggio che dice «condizione» dentro un elenco di filtri manda a cercare
|
|
2149
|
+
* qualcosa che in quel form non c'e'.
|
|
2125
2150
|
*/
|
|
2126
|
-
declare function checkConditionLogic(logic: string, conditionCount: number): string | null;
|
|
2151
|
+
declare function checkConditionLogic(logic: string, conditionCount: number, term?: 'condizione' | 'filtro'): string | null;
|
|
2127
2152
|
|
|
2128
2153
|
/**
|
|
2129
2154
|
* Testo e numero non si confrontano — FRONTEND.md §4.3, §13.13.
|
|
@@ -3364,11 +3389,21 @@ declare class FlowDocumentStore {
|
|
|
3364
3389
|
*/
|
|
3365
3390
|
declare const FLOW_REFERENCE_FIELDS: ReadonlySet<string>;
|
|
3366
3391
|
/**
|
|
3367
|
-
* Riscrive ogni occorrenza di un nome nei campi che contengono riferimenti
|
|
3392
|
+
* Riscrive ogni occorrenza di un nome nei campi che contengono riferimenti **e nei merge field**.
|
|
3368
3393
|
*
|
|
3369
3394
|
* Cammina tutto cio' che gli si passa — un documento intero per la rinomina, il solo frammento
|
|
3370
3395
|
* copiato per l'incolla — perche' i riferimenti compaiono in una ventina di posti diversi (§4)
|
|
3371
3396
|
* e l'elenco dei posti sarebbe la cosa che si dimentica di aggiornare.
|
|
3397
|
+
*
|
|
3398
|
+
* I **merge field** ci sono entrati insieme al loro conteggio, e non e' un caso: mostrare «5 usi»
|
|
3399
|
+
* contando i testi e poi riscriverne solo tre significa lasciare due messaggi rotti proprio a chi
|
|
3400
|
+
* ha letto il numero per fidarsi della rinomina. Il testo intorno all'isola non si tocca — lì la
|
|
3401
|
+
* stessa parola e' una parola — e la regola sta in `flow-merge-text.ts`.
|
|
3402
|
+
*
|
|
3403
|
+
* Restano fuori le **formule**: la loro sintassi e' del motore (§6.3), e sostituire un
|
|
3404
|
+
* identificatore in un'espressione che non si interpreta vuol dire indovinare. Chi mostra il
|
|
3405
|
+
* conteggio lo dice, invece di far scoprire dopo che una formula punta a un nome che non c'e'
|
|
3406
|
+
* piu' (`describeNameUses` le tiene contate a parte proprio per questo).
|
|
3372
3407
|
*/
|
|
3373
3408
|
declare function rewriteReferences(root: unknown, oldName: string, newName: string): void;
|
|
3374
3409
|
/**
|
|
@@ -5384,8 +5419,28 @@ declare class RecordFilterEditorComponent {
|
|
|
5384
5419
|
* evita la ricerca di un campo che nell'elenco non c'e' e non ci sara'.
|
|
5385
5420
|
*/
|
|
5386
5421
|
readonly identifierNotFilterable: _angular_core.Signal<boolean>;
|
|
5422
|
+
/**
|
|
5423
|
+
* La modalita' attiva. La **formula si riconosce dal suo campo** e non da `filterLogic`: il
|
|
5424
|
+
* valore `Formula` non e' supportato da nessun elemento (§4.4), quindi non puo' essere cio' che
|
|
5425
|
+
* accende la modalita' — altrimenti l'editor riscriverebbe nel documento un valore che fa
|
|
5426
|
+
* fallire l'esecuzione.
|
|
5427
|
+
*/
|
|
5387
5428
|
readonly logicMode: _angular_core.Signal<"and" | "or" | "formula" | "custom">;
|
|
5429
|
+
/**
|
|
5430
|
+
* `filterLogic: "Formula"` letto dal documento. Non lo scrive nessun gesto di questo editor:
|
|
5431
|
+
* arriva da un flow scritto altrove, e va detto invece di essere corretto di soppiatto —
|
|
5432
|
+
* cancellarlo sarebbe una modifica che l'utente non ha chiesto, su un campo che potrebbe
|
|
5433
|
+
* essere l'unico indizio di cosa quel flow voleva fare.
|
|
5434
|
+
*/
|
|
5435
|
+
readonly unsupportedFormulaLogic: _angular_core.Signal<boolean>;
|
|
5388
5436
|
readonly customLogic: _angular_core.Signal<string>;
|
|
5437
|
+
/**
|
|
5438
|
+
* Il riscontro locale sull'espressione: indici che non esistono, parentesi sbilanciate, termini
|
|
5439
|
+
* rimasti orfani (`?`) dopo la cancellazione di un filtro. La verita' resta della validazione
|
|
5440
|
+
* del backend (`CONDITION_LOGIC_INVALID`, che e' un **errore** e blocca l'attivazione), ma
|
|
5441
|
+
* scoprirlo lì significa scoprirlo dopo.
|
|
5442
|
+
*/
|
|
5443
|
+
readonly customLogicError: _angular_core.Signal<string | null>;
|
|
5389
5444
|
readonly showEmptyWarning: _angular_core.Signal<boolean>;
|
|
5390
5445
|
addFilter(): void;
|
|
5391
5446
|
removeFilter(index: number): void;
|
|
@@ -5772,7 +5827,22 @@ declare class ElementInspectorComponent {
|
|
|
5772
5827
|
* Quanti riferimenti verrebbero riscritti dalla rinomina. Serve a rendere visibile che
|
|
5773
5828
|
* l'operazione tocca il resto del documento, non solo questo elemento.
|
|
5774
5829
|
*/
|
|
5830
|
+
/**
|
|
5831
|
+
* Gli usi del nome, con la stessa funzione del pannello risorse: e' la stessa domanda, e due
|
|
5832
|
+
* numeri diversi per la stessa domanda sono un difetto — questo era una regex sul JSON
|
|
5833
|
+
* serializzato, che contava le stringhe uguali al nome in **qualunque** campo (anche dove non
|
|
5834
|
+
* sono riferimenti) e non vedeva ne' le formule ne' i merge field, cioe' sovrastimava e
|
|
5835
|
+
* sottostimava insieme.
|
|
5836
|
+
*/
|
|
5837
|
+
private readonly nameUses;
|
|
5838
|
+
/** Le occorrenze che la rinomina **riscrive**: riferimenti piu' merge field nei testi. */
|
|
5775
5839
|
readonly referenceCount: _angular_core.Signal<number>;
|
|
5840
|
+
/**
|
|
5841
|
+
* Le occorrenze che restano indietro: le espressioni delle formule, che l'editor non riscrive
|
|
5842
|
+
* perche' la loro sintassi e' del motore (§6.3). Dirlo qui e' l'unico modo di non farlo
|
|
5843
|
+
* scoprire dopo, quando la formula punta a un nome che non esiste piu'.
|
|
5844
|
+
*/
|
|
5845
|
+
readonly formulaUseCount: _angular_core.Signal<number>;
|
|
5776
5846
|
readonly canRename: _angular_core.Signal<boolean>;
|
|
5777
5847
|
startRename(): void;
|
|
5778
5848
|
onPendingNameInput(value: string): void;
|
|
@@ -6411,6 +6481,17 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
|
|
|
6411
6481
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicScreenInspectorComponent, "fb-dynamic-screen-inspector", never, { "initialSelection": { "alias": "initialSelection"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
6412
6482
|
}
|
|
6413
6483
|
|
|
6484
|
+
/** Gli usi di un nome, divisi per come sono scritti nel documento. */
|
|
6485
|
+
interface FlowNameUses {
|
|
6486
|
+
/** Campi di riferimento: `targetReference`, `leftValueReference`, `choiceReferences`, … */
|
|
6487
|
+
references: number;
|
|
6488
|
+
/** Espressioni del motore di regole: **non** vengono riscritte dalla rinomina. */
|
|
6489
|
+
formulas: number;
|
|
6490
|
+
/** Isole `{!...}` nei campi di testo che il contratto dichiara con merge field (§5.12). */
|
|
6491
|
+
mergeFields: number;
|
|
6492
|
+
total: number;
|
|
6493
|
+
}
|
|
6494
|
+
|
|
6414
6495
|
/** La risorsa aperta in modifica: collection piu' indice, la sola chiave del documento. */
|
|
6415
6496
|
interface FlowResourceEdit {
|
|
6416
6497
|
collection: FlowResourceCollection;
|
|
@@ -6432,6 +6513,26 @@ declare class ResourceDialogComponent {
|
|
|
6432
6513
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ResourceDialogComponent, "fb-resource-dialog", never, { "edit": { "alias": "edit"; "required": true; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
|
|
6433
6514
|
}
|
|
6434
6515
|
|
|
6516
|
+
/**
|
|
6517
|
+
* Il filtro dell'elenco delle risorse.
|
|
6518
|
+
*
|
|
6519
|
+
* Esiste per la **scala**: un flow di produzione ha ventun variabili e dodici dynamic choice
|
|
6520
|
+
* set, e a quella misura il problema dell'elenco non e' leggerlo ma trovarci dentro una riga.
|
|
6521
|
+
* Non e' la ricerca del flow (`core/flow-search.ts`), che sa dov'e' un nome che si conosce
|
|
6522
|
+
* **già**: qui si restringe un elenco che si sta guardando, e le due domande che si fanno
|
|
6523
|
+
* davvero — «quali non sono usate» e «quali hanno qualcosa che non va» — non sono nomi.
|
|
6524
|
+
*
|
|
6525
|
+
* Cio' che il testo guarda e' cio' che l'elenco **mostra**, piu' il nome e l'etichetta: e' la
|
|
6526
|
+
* stessa scelta di `flow-search`, dove il contenuto dei valori resta fuori perche' «chi cita
|
|
6527
|
+
* `Totale`» e' un'altra domanda — quella la risponde il conteggio degli usi. Quindi
|
|
6528
|
+
* l'espressione di una formula e il valore di una costante **non** si cercano: chi digita
|
|
6529
|
+
* «IVA» e vede comparire una formula che non si chiama così crede di aver trovato una risorsa
|
|
6530
|
+
* che non c'e'.
|
|
6531
|
+
*/
|
|
6532
|
+
|
|
6533
|
+
/** Lo stato su cui si restringe l'elenco, oltre al testo. */
|
|
6534
|
+
type ResourceStateFilter = 'all' | 'unused' | 'issues';
|
|
6535
|
+
|
|
6435
6536
|
/**
|
|
6436
6537
|
* Le sette collection di risorse (§4.6).
|
|
6437
6538
|
*
|
|
@@ -6478,11 +6579,58 @@ declare class ResourcePanelComponent {
|
|
|
6478
6579
|
* ricalcolo del documento.
|
|
6479
6580
|
*/
|
|
6480
6581
|
readonly pendingRemoval: _angular_core.WritableSignal<string | null>;
|
|
6582
|
+
/** Il testo del filtro. Non si azzera cambiando scheda: vedi `select`. */
|
|
6583
|
+
readonly query: _angular_core.WritableSignal<string>;
|
|
6584
|
+
/** Lo stato su cui si restringe: sono le due domande che un nome non sa fare. */
|
|
6585
|
+
readonly stateFilter: _angular_core.WritableSignal<ResourceStateFilter>;
|
|
6586
|
+
readonly hasFilter: _angular_core.Signal<boolean>;
|
|
6481
6587
|
constructor();
|
|
6482
6588
|
readonly activeKind: _angular_core.Signal<ResourceKindDescriptor>;
|
|
6589
|
+
/** Tutte le risorse della collection aperta, **prima** del filtro. */
|
|
6590
|
+
readonly collectionItems: _angular_core.Signal<FlowResourceRef[]>;
|
|
6591
|
+
/** Le righe che l'elenco disegna: la collection aperta, filtrata. */
|
|
6483
6592
|
readonly items: _angular_core.Signal<FlowResourceRef[]>;
|
|
6484
|
-
countOf(collection: FlowResourceCollection): number;
|
|
6485
6593
|
select(collection: FlowResourceCollection): void;
|
|
6594
|
+
private readonly needle;
|
|
6595
|
+
/** `true` se la risorsa passa testo **e** stato. */
|
|
6596
|
+
private matches;
|
|
6597
|
+
/**
|
|
6598
|
+
* Quante risorse di ogni collection passano il filtro, e quante ce ne sono in tutto.
|
|
6599
|
+
*
|
|
6600
|
+
* Il numero sulla scheda diventa quello delle **corrispondenze** appena un filtro e' attivo,
|
|
6601
|
+
* ed e' il solo modo di rispondere alla domanda vera di chi digita: la risorsa che cerca sta
|
|
6602
|
+
* spesso in un'altra collection, e senza questo numero bisognerebbe aprire le sette schede
|
|
6603
|
+
* una per una per scoprire che non c'e' da nessuna parte. Il conteggio e' **uno** per tutte
|
|
6604
|
+
* le schede e non una `filter` per scheda nel template: quello lo rifaceva a ogni giro di
|
|
6605
|
+
* change detection, e con il filtro «non usate» dentro sarebbero cinquanta walk del
|
|
6606
|
+
* documento per volta.
|
|
6607
|
+
*/
|
|
6608
|
+
readonly tabCounts: _angular_core.Signal<Record<string, {
|
|
6609
|
+
total: number;
|
|
6610
|
+
matching: number;
|
|
6611
|
+
}>>;
|
|
6612
|
+
countOf(collection: FlowResourceCollection): number;
|
|
6613
|
+
totalOf(collection: FlowResourceCollection): number;
|
|
6614
|
+
/**
|
|
6615
|
+
* Quante risorse ha ogni stato nella scheda aperta, contate **dopo** il testo: i due chip
|
|
6616
|
+
* dicono quanto resterebbe, non quanto ce n'e' in assoluto. A zero si disabilitano, perche'
|
|
6617
|
+
* un filtro che da' certamente un elenco vuoto non e' un filtro ma un modo di nascondere
|
|
6618
|
+
* l'elenco.
|
|
6619
|
+
*/
|
|
6620
|
+
readonly stateCounts: _angular_core.Signal<{
|
|
6621
|
+
unused: number;
|
|
6622
|
+
issues: number;
|
|
6623
|
+
}>;
|
|
6624
|
+
/**
|
|
6625
|
+
* Le corrispondenze nelle **altre** schede: e' cio' che si dice quando qui non c'e' niente.
|
|
6626
|
+
* «Nessuna corrispondenza» su un elenco vuoto e' vero e inutile — il rimedio e' cambiare
|
|
6627
|
+
* scheda, e bisogna sapere se ce n'e' una da cambiare.
|
|
6628
|
+
*/
|
|
6629
|
+
readonly matchesElsewhere: _angular_core.Signal<number>;
|
|
6630
|
+
onQuery(value: string): void;
|
|
6631
|
+
/** Il secondo clic sullo stesso stato lo spegne, come nel pannello dei problemi. */
|
|
6632
|
+
setStateFilter(filter: ResourceStateFilter): void;
|
|
6633
|
+
resetFilter(): void;
|
|
6486
6634
|
isEditing(reference: FlowResourceRef): boolean;
|
|
6487
6635
|
/** Il click sul nome: apre la finestra, o la chiude se e' già quella risorsa. */
|
|
6488
6636
|
edit(reference: FlowResourceRef): void;
|
|
@@ -6490,6 +6638,12 @@ declare class ResourcePanelComponent {
|
|
|
6490
6638
|
nameError(reference: FlowResourceRef): string | null;
|
|
6491
6639
|
constantReferencesResource(reference: FlowResourceRef): boolean;
|
|
6492
6640
|
duplicateStageOrder(reference: FlowResourceRef): boolean;
|
|
6641
|
+
/**
|
|
6642
|
+
* §5.2 — cio' che su una sorgente collection il runtime ignora. Sta anche qui e non solo nel
|
|
6643
|
+
* form per la ragione di sempre: il filtro «con rilievi» porta la riga a galla, e una riga che
|
|
6644
|
+
* non dice **cosa** non va costringe ad aprirla per scoprirlo.
|
|
6645
|
+
*/
|
|
6646
|
+
ignoredChoiceSetFilters(reference: FlowResourceRef): string | null;
|
|
6493
6647
|
add(): void;
|
|
6494
6648
|
/**
|
|
6495
6649
|
* Quante volte la risorsa e' **usata** nel documento.
|
|
@@ -6503,6 +6657,30 @@ declare class ResourcePanelComponent {
|
|
|
6503
6657
|
* senza, tre formule che leggono una variabile la direbbero «non usata».
|
|
6504
6658
|
*/
|
|
6505
6659
|
usesOf(reference: FlowResourceRef): number;
|
|
6660
|
+
/**
|
|
6661
|
+
* Il dettaglio degli usi: quanti riferimenti, quante formule, quanti merge field.
|
|
6662
|
+
*
|
|
6663
|
+
* Serve al `title` della riga, e non e' un vezzo: `{!Cliente.Nome}` in un messaggio e' un uso
|
|
6664
|
+
* che non si vede da nessuna parte nel documento, quindi «13 usi» senza dire **dove** manda a
|
|
6665
|
+
* cercarli nei posti sbagliati. E le tre categorie non si comportano allo stesso modo davanti a
|
|
6666
|
+
* una rinomina, che e' l'altra cosa che si fa con questo numero.
|
|
6667
|
+
*/
|
|
6668
|
+
usesDetailOf(reference: FlowResourceRef): FlowNameUses;
|
|
6669
|
+
/** La riga del `title`: si scrivono le sole categorie presenti, altrimenti sono sempre tre. */
|
|
6670
|
+
usesDetailLabel(reference: FlowResourceRef): string;
|
|
6671
|
+
/**
|
|
6672
|
+
* Il conteggio di **tutte** le risorse, calcolato una volta per documento.
|
|
6673
|
+
*
|
|
6674
|
+
* `countNameUses` cammina il documento intero a ogni chiamata, e da quando il filtro lo
|
|
6675
|
+
* chiede per ogni risorsa di ogni collection — i numeri delle schede, il chip «non usate» —
|
|
6676
|
+
* chiamarlo dal template significherebbe cinquanta walk per giro di change detection.
|
|
6677
|
+
*
|
|
6678
|
+
* La chiave e' il nome **esatto** e non quello minuscolo: il conteggio confronta le stringhe
|
|
6679
|
+
* come sono, quindi due nomi che differiscono solo per il case — che sono un `NAME_DUPLICATED`,
|
|
6680
|
+
* non un caso da normalizzare qui — hanno due conteggi diversi, ed e' quello che il pannello
|
|
6681
|
+
* mostrava anche prima della memoizzazione.
|
|
6682
|
+
*/
|
|
6683
|
+
private readonly useCounts;
|
|
6506
6684
|
private keyOf;
|
|
6507
6685
|
isPendingRemoval(reference: FlowResourceRef): boolean;
|
|
6508
6686
|
/**
|
|
@@ -6569,6 +6747,22 @@ declare class ResourceFormComponent {
|
|
|
6569
6747
|
* tre `FIELD_UNKNOWN` che l'utente non ha scritto.
|
|
6570
6748
|
*/
|
|
6571
6749
|
setChoiceSetSource(source: ChoiceSetSource): void;
|
|
6750
|
+
/**
|
|
6751
|
+
* §5.2 — cio' che su una sorgente collection il runtime ignora, se il documento lo dichiara.
|
|
6752
|
+
* Il controllo sta in `resource-checks.ts` perche' serve anche all'**elenco**: senza, la riga
|
|
6753
|
+
* sarebbe verde e il rilievo si vedrebbe solo aprendo il form.
|
|
6754
|
+
*/
|
|
6755
|
+
ignoredChoiceSetFilters(): string | null;
|
|
6756
|
+
/** La ripulitura e' un comando, non un effetto dell'apertura del form. */
|
|
6757
|
+
clearIgnoredChoiceSetFilters(): void;
|
|
6758
|
+
/**
|
|
6759
|
+
* Quante volte il nome di questa risorsa compare dentro un'**espressione**.
|
|
6760
|
+
*
|
|
6761
|
+
* E' l'unica delle tre categorie che la rinomina non tocca (§6.3: la sintassi e' del motore), e
|
|
6762
|
+
* va detta dove si rinomina: il conteggio della riga lo dice già nel suo `title`, ma chi sta
|
|
6763
|
+
* cambiando il nome sta guardando questo campo.
|
|
6764
|
+
*/
|
|
6765
|
+
readonly formulaUseCount: _angular_core.Signal<number>;
|
|
6572
6766
|
/** Su un choice set da enum il tipo e' `enumType`: il campo generico sarebbe un doppione. */
|
|
6573
6767
|
hidesObjectType(): boolean;
|
|
6574
6768
|
isChoiceSetSource(source: ChoiceSetSource): boolean;
|
|
@@ -6697,21 +6891,82 @@ declare class ProblemsPanelComponent {
|
|
|
6697
6891
|
}>;
|
|
6698
6892
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
6699
6893
|
readonly filter: _angular_core.WritableSignal<SeverityFilter>;
|
|
6894
|
+
/** Il testo del filtro: cerca in cio' che la riga mostra. */
|
|
6895
|
+
readonly query: _angular_core.WritableSignal<string>;
|
|
6896
|
+
/**
|
|
6897
|
+
* I codici selezionati. Vuoto significa «tutti», non «nessuno»: e' l'unico modo di far
|
|
6898
|
+
* coincidere lo stato iniziale con l'assenza di filtro.
|
|
6899
|
+
*/
|
|
6900
|
+
readonly selectedCodes: _angular_core.WritableSignal<ReadonlySet<string>>;
|
|
6901
|
+
readonly isCodeMenuOpen: _angular_core.WritableSignal<boolean>;
|
|
6902
|
+
/** Il confine della tendina: il controllo, non il pannello. Vedi il commento nel costruttore. */
|
|
6903
|
+
private readonly codesRef;
|
|
6904
|
+
constructor();
|
|
6700
6905
|
readonly isRunning: _angular_core.Signal<boolean>;
|
|
6701
6906
|
readonly hasResult: _angular_core.Signal<boolean>;
|
|
6702
6907
|
readonly lastError: _angular_core.Signal<string | null>;
|
|
6908
|
+
/**
|
|
6909
|
+
* Il testo su cui la casella confronta, **una stringa per rilievo** e allineata per indice a
|
|
6910
|
+
* `validation.issues()`.
|
|
6911
|
+
*
|
|
6912
|
+
* Ci sta anche il percorso **tradotto per nome** (`pathLabel`), che e' quello che la riga
|
|
6913
|
+
* mostra: su uno screen dinamico il path arriva a indici, e cercare il nome del campo che si
|
|
6914
|
+
* legge sullo schermo non troverebbe niente. Si calcola una volta per risultato invece che a
|
|
6915
|
+
* ogni battuta, perche' tradurre un path significa camminare l'albero della schermata.
|
|
6916
|
+
*/
|
|
6917
|
+
private readonly haystacks;
|
|
6918
|
+
private readonly needle;
|
|
6919
|
+
/** Testo e codici: i due filtri che non sono la gravita'. */
|
|
6920
|
+
private matchesText;
|
|
6921
|
+
private matchesCode;
|
|
6703
6922
|
/**
|
|
6704
6923
|
* I conteggi dei chip vengono dai rilievi, non dal risultato: il numero sul filtro deve
|
|
6705
|
-
* essere quello che il filtro apre (vedi `FlowValidationStore.issueCounts`).
|
|
6924
|
+
* essere quello che il filtro apre (vedi `FlowValidationStore.issueCounts`). E' anche il
|
|
6925
|
+
* motivo per cui **non** si leggono piu' da `issueCounts` quando gli altri filtri sono attivi:
|
|
6926
|
+
* «Errori 47» accanto a una casella che ne lascia passare tre e' un numero che promette
|
|
6927
|
+
* quarantaquattro righe che non compariranno.
|
|
6706
6928
|
*/
|
|
6707
6929
|
private readonly counts;
|
|
6708
6930
|
readonly errorCount: _angular_core.Signal<number>;
|
|
6709
6931
|
readonly warningCount: _angular_core.Signal<number>;
|
|
6710
6932
|
readonly infoCount: _angular_core.Signal<number>;
|
|
6933
|
+
/** Quante righe aprirebbe «Tutti»: il totale **dopo** testo e codici. */
|
|
6711
6934
|
readonly totalCount: _angular_core.Signal<number>;
|
|
6935
|
+
/**
|
|
6936
|
+
* Il totale assoluto, che non guarda nessun filtro. Serve a due cose diverse dai chip: dire
|
|
6937
|
+
* che il flow **non** e' senza rilievi quando i filtri li nascondono tutti, e tenere in fondo
|
|
6938
|
+
* la nota sugli errori che bloccano l'attivazione — filtrando per «Note» quella nota spariva
|
|
6939
|
+
* pur essendoci quarantasette errori, cioe' proprio quando serve.
|
|
6940
|
+
*/
|
|
6941
|
+
readonly absoluteCount: _angular_core.Signal<number>;
|
|
6942
|
+
readonly hasErrors: _angular_core.Signal<boolean>;
|
|
6712
6943
|
readonly issues: _angular_core.Signal<FlowValidationIssue[]>;
|
|
6944
|
+
/**
|
|
6945
|
+
* I codici della tendina: quelli **presenti** dopo gravita' e testo, col loro conteggio.
|
|
6946
|
+
*
|
|
6947
|
+
* Piu' quelli **selezionati** anche se non compaiono piu', a zero: una selezione che sparisce
|
|
6948
|
+
* dall'elenco quando si cambia gravita' e' una selezione che continua a filtrare senza che si
|
|
6949
|
+
* possa vedere ne' togliere. Ordinati per frequenza e poi per nome, perche' su sessanta righe
|
|
6950
|
+
* il codice che conta e' quello che si ripete.
|
|
6951
|
+
*/
|
|
6952
|
+
readonly codeFacets: _angular_core.Signal<{
|
|
6953
|
+
code: string;
|
|
6954
|
+
count: number;
|
|
6955
|
+
selected: boolean;
|
|
6956
|
+
}[]>;
|
|
6957
|
+
readonly selectedCodeCount: _angular_core.Signal<number>;
|
|
6958
|
+
/** `true` se c'e' un filtro **oltre** la gravita': decide il messaggio dell'elenco vuoto. */
|
|
6959
|
+
readonly hasTextOrCodeFilter: _angular_core.Signal<boolean>;
|
|
6960
|
+
readonly hasAnyFilter: _angular_core.Signal<boolean>;
|
|
6961
|
+
onQuery(value: string): void;
|
|
6962
|
+
toggleCodeMenu(): void;
|
|
6963
|
+
/** La selezione e' un insieme nuovo a ogni gesto: un `Set` mutato non fa scattare il signal. */
|
|
6964
|
+
toggleCode(code: string): void;
|
|
6965
|
+
clearCodes(): void;
|
|
6966
|
+
resetFilters(): void;
|
|
6967
|
+
/** Nessun rilievo **nel flow**: e' un'altra cosa dal «nessuno che passi i filtri». */
|
|
6713
6968
|
readonly isClean: _angular_core.Signal<boolean>;
|
|
6714
|
-
/** Ci sono rilievi, ma
|
|
6969
|
+
/** Ci sono rilievi, ma i filtri attivi non ne mostrano nessuno: va detto, non lasciato in bianco. */
|
|
6715
6970
|
readonly isFilteredEmpty: _angular_core.Signal<boolean>;
|
|
6716
6971
|
readonly activeFilterLabel: _angular_core.Signal<string>;
|
|
6717
6972
|
/** Un secondo clic sul filtro attivo torna a «Tutti»: e' l'unico modo per uscirne col mouse dov'e'. */
|
|
@@ -6931,7 +7186,7 @@ declare class FlowBuilderComponent {
|
|
|
6931
7186
|
* troppo. `panel` tiene il form nel pannello laterale, che e' piu' comodo quando si
|
|
6932
7187
|
* modificano molti elementi di fila perche' non c'e' niente da aprire e chiudere.
|
|
6933
7188
|
*/
|
|
6934
|
-
readonly inspectorMode: _angular_core.InputSignal<"
|
|
7189
|
+
readonly inspectorMode: _angular_core.InputSignal<"dialog" | "panel">;
|
|
6935
7190
|
/**
|
|
6936
7191
|
* L'esito dell'ultima esecuzione, se l'ospite ne ha uno da mostrare.
|
|
6937
7192
|
*
|