@esfaenza/flow-builder 20.3.43 → 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
@@ -3389,11 +3389,21 @@ declare class FlowDocumentStore {
3389
3389
  */
3390
3390
  declare const FLOW_REFERENCE_FIELDS: ReadonlySet<string>;
3391
3391
  /**
3392
- * 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**.
3393
3393
  *
3394
3394
  * Cammina tutto cio' che gli si passa — un documento intero per la rinomina, il solo frammento
3395
3395
  * copiato per l'incolla — perche' i riferimenti compaiono in una ventina di posti diversi (§4)
3396
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).
3397
3407
  */
3398
3408
  declare function rewriteReferences(root: unknown, oldName: string, newName: string): void;
3399
3409
  /**
@@ -4817,7 +4827,7 @@ declare class NamePickerComponent {
4817
4827
  * **errori** che bloccano l'attivazione (`ACTION_UNKNOWN`, `FORM_UNKNOWN`), mentre un flow
4818
4828
  * senza versione attiva e' un avviso. Mostrarli con lo stesso colore direbbe il falso.
4819
4829
  */
4820
- readonly unknownSeverity: _angular_core.InputSignal<"warn" | "error">;
4830
+ readonly unknownSeverity: _angular_core.InputSignal<"error" | "warn">;
4821
4831
  /**
4822
4832
  * Nomi che **esistono** ma non sono utilizzabili qui. Il caso vero e' il catalogo dei form,
4823
4833
  * dove una schermata intera e un componente vivono nello stesso elenco e si distinguono per
@@ -5037,7 +5047,7 @@ declare class FormulaEditorComponent {
5037
5047
  * dinamico — e riscriverla a ogni tasto costa. La **verifica** parte comunque durante la
5038
5048
  * digitazione: usa la bozza locale, non cio' che e' arrivato al documento.
5039
5049
  */
5040
- readonly commitOn: _angular_core.InputSignal<"input" | "change">;
5050
+ readonly commitOn: _angular_core.InputSignal<"change" | "input">;
5041
5051
  readonly expressionChange: _angular_core.OutputEmitterRef<string>;
5042
5052
  private readonly area;
5043
5053
  /**
@@ -5386,7 +5396,7 @@ declare class RecordFilterEditorComponent {
5386
5396
  * (§5.8, §13.10).
5387
5397
  */
5388
5398
  readonly emptyWarning: _angular_core.InputSignal<string | null>;
5389
- readonly emptyWarningSeverity: _angular_core.InputSignal<"warn" | "error">;
5399
+ readonly emptyWarningSeverity: _angular_core.InputSignal<"error" | "warn">;
5390
5400
  readonly changed: _angular_core.OutputEmitterRef<(holder: FilterHolder) => void>;
5391
5401
  /** Tutti i campi, filtrabili o no: serve solo a riconoscere le chiavi composte (§5.8). */
5392
5402
  private readonly allFields;
@@ -5607,7 +5617,7 @@ declare class MergeTextEditorComponent {
5607
5617
  readonly disabled: _angular_core.InputSignal<boolean>;
5608
5618
  readonly rows: _angular_core.InputSignal<number>;
5609
5619
  /** Come nel formula editor: `change` dove mutare il documento ridisegna mezza schermata. */
5610
- readonly commitOn: _angular_core.InputSignal<"input" | "change">;
5620
+ readonly commitOn: _angular_core.InputSignal<"change" | "input">;
5611
5621
  readonly textChange: _angular_core.OutputEmitterRef<string>;
5612
5622
  private readonly area;
5613
5623
  /**
@@ -5817,7 +5827,22 @@ declare class ElementInspectorComponent {
5817
5827
  * Quanti riferimenti verrebbero riscritti dalla rinomina. Serve a rendere visibile che
5818
5828
  * l'operazione tocca il resto del documento, non solo questo elemento.
5819
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. */
5820
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>;
5821
5846
  readonly canRename: _angular_core.Signal<boolean>;
5822
5847
  startRename(): void;
5823
5848
  onPendingNameInput(value: string): void;
@@ -6456,6 +6481,17 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
6456
6481
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicScreenInspectorComponent, "fb-dynamic-screen-inspector", never, { "initialSelection": { "alias": "initialSelection"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6457
6482
  }
6458
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
+
6459
6495
  /** La risorsa aperta in modifica: collection piu' indice, la sola chiave del documento. */
6460
6496
  interface FlowResourceEdit {
6461
6497
  collection: FlowResourceCollection;
@@ -6621,6 +6657,17 @@ declare class ResourcePanelComponent {
6621
6657
  * senza, tre formule che leggono una variabile la direbbero «non usata».
6622
6658
  */
6623
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;
6624
6671
  /**
6625
6672
  * Il conteggio di **tutte** le risorse, calcolato una volta per documento.
6626
6673
  *
@@ -6628,10 +6675,10 @@ declare class ResourcePanelComponent {
6628
6675
  * chiede per ogni risorsa di ogni collection — i numeri delle schede, il chip «non usate» —
6629
6676
  * chiamarlo dal template significherebbe cinquanta walk per giro di change detection.
6630
6677
  *
6631
- * La chiave e' il nome **esatto** e non quello minuscolo: `countNameUses` confronta le
6632
- * stringhe come sono, quindi due nomi che differiscono solo per il case — che sono un
6633
- * `NAME_DUPLICATED`, non un caso da normalizzare qui — hanno due conteggi diversi, ed e'
6634
- * quello che il pannello mostrava anche prima della memoizzazione.
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.
6635
6682
  */
6636
6683
  private readonly useCounts;
6637
6684
  private keyOf;
@@ -6708,6 +6755,14 @@ declare class ResourceFormComponent {
6708
6755
  ignoredChoiceSetFilters(): string | null;
6709
6756
  /** La ripulitura e' un comando, non un effetto dell'apertura del form. */
6710
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>;
6711
6766
  /** Su un choice set da enum il tipo e' `enumType`: il campo generico sarebbe un doppione. */
6712
6767
  hidesObjectType(): boolean;
6713
6768
  isChoiceSetSource(source: ChoiceSetSource): boolean;
@@ -6836,21 +6891,82 @@ declare class ProblemsPanelComponent {
6836
6891
  }>;
6837
6892
  readonly closed: _angular_core.OutputEmitterRef<void>;
6838
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();
6839
6905
  readonly isRunning: _angular_core.Signal<boolean>;
6840
6906
  readonly hasResult: _angular_core.Signal<boolean>;
6841
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;
6842
6922
  /**
6843
6923
  * I conteggi dei chip vengono dai rilievi, non dal risultato: il numero sul filtro deve
6844
- * 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.
6845
6928
  */
6846
6929
  private readonly counts;
6847
6930
  readonly errorCount: _angular_core.Signal<number>;
6848
6931
  readonly warningCount: _angular_core.Signal<number>;
6849
6932
  readonly infoCount: _angular_core.Signal<number>;
6933
+ /** Quante righe aprirebbe «Tutti»: il totale **dopo** testo e codici. */
6850
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>;
6851
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». */
6852
6968
  readonly isClean: _angular_core.Signal<boolean>;
6853
- /** 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. */
6854
6970
  readonly isFilteredEmpty: _angular_core.Signal<boolean>;
6855
6971
  readonly activeFilterLabel: _angular_core.Signal<string>;
6856
6972
  /** Un secondo clic sul filtro attivo torna a «Tutti»: e' l'unico modo per uscirne col mouse dov'e'. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/flow-builder",
3
- "version": "20.3.43",
3
+ "version": "20.3.44",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^20.2.14",
6
6
  "@angular/common": "^20.3.28",