@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/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
- /** §4.3 — `and` | `or` | espressione sugli indici 1-based | `Formula`. */
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 il filtro attivo non ne mostra nessuno: va detto, non lasciato in bianco. */
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<"panel" | "dialog">;
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
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/flow-builder",
3
- "version": "20.3.42",
3
+ "version": "20.3.44",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^20.2.14",
6
6
  "@angular/common": "^20.3.28",