@esfaenza/flow-builder 20.3.40 → 20.3.42

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
@@ -253,6 +253,12 @@ interface FlowScreenField {
253
253
  defaultSelectedChoiceReference?: string;
254
254
  /** Nomi di `FlowChoice` o `FlowDynamicChoiceSet`, **nell'ordine di presentazione**. */
255
255
  choiceReferences?: string[];
256
+ /**
257
+ * §5.2 — con **una sola** opzione risolta il campo la sceglie da se'. Serve alle tendine che
258
+ * dipendono da un'altra tendina; dove il campo non presenta opzioni non ha effetto ed e'
259
+ * `SCREEN_FIELD_CONFIGURATION_INVALID` (avviso).
260
+ */
261
+ autoSelectSingleChoice?: boolean;
256
262
  scale?: number;
257
263
  maxLength?: number;
258
264
  /** 1..12 nella griglia della schermata: il frontend puo' ignorarla. */
@@ -3181,6 +3187,21 @@ declare class FlowDocumentStore {
3181
3187
  * riferimenti a output automatico (`Vecchio.Campo` → `Nuovo.Campo`).
3182
3188
  */
3183
3189
  renameNode(oldName: string, newName: string): void;
3190
+ /**
3191
+ * Etichetta **e** nome tecnico in una sola mutazione.
3192
+ *
3193
+ * Serve al nome che segue l'etichetta di un elemento appena creato (§3.3): farlo con due
3194
+ * `update` scriverebbe due passi di storico per ogni battuta, e l'annulla riporterebbe
3195
+ * indietro il nome lasciando l'etichetta nuova — uno stato che non e' mai esistito. Con
3196
+ * `newName` assente e' un semplice cambio di etichetta.
3197
+ */
3198
+ relabelNode(name: string, label: string, newName?: string | null): void;
3199
+ /**
3200
+ * Il corpo della rinomina, sul draft: nome del node, riferimenti, appartenenza ai riquadri.
3201
+ * `reference` va risolto **prima** dell'`update`, perche' l'indice viene dal documento
3202
+ * corrente e dentro il mutatore i signal derivati sono ancora quelli di prima.
3203
+ */
3204
+ private static applyRename;
3184
3205
  /**
3185
3206
  * §5.2 — rinomina un campo di screen dinamico riscrivendo i riferimenti che lo usano.
3186
3207
  *
@@ -4991,7 +5012,7 @@ declare class FormulaEditorComponent {
4991
5012
  * dinamico — e riscriverla a ogni tasto costa. La **verifica** parte comunque durante la
4992
5013
  * digitazione: usa la bozza locale, non cio' che e' arrivato al documento.
4993
5014
  */
4994
- readonly commitOn: _angular_core.InputSignal<"input" | "change">;
5015
+ readonly commitOn: _angular_core.InputSignal<"change" | "input">;
4995
5016
  readonly expressionChange: _angular_core.OutputEmitterRef<string>;
4996
5017
  private readonly area;
4997
5018
  /**
@@ -5541,7 +5562,7 @@ declare class MergeTextEditorComponent {
5541
5562
  readonly disabled: _angular_core.InputSignal<boolean>;
5542
5563
  readonly rows: _angular_core.InputSignal<number>;
5543
5564
  /** Come nel formula editor: `change` dove mutare il documento ridisegna mezza schermata. */
5544
- readonly commitOn: _angular_core.InputSignal<"input" | "change">;
5565
+ readonly commitOn: _angular_core.InputSignal<"change" | "input">;
5545
5566
  readonly textChange: _angular_core.OutputEmitterRef<string>;
5546
5567
  private readonly area;
5547
5568
  /**
@@ -5662,6 +5683,9 @@ declare class ElementInspectorComponent {
5662
5683
  private readonly store;
5663
5684
  private readonly dictionaries;
5664
5685
  private readonly validation;
5686
+ private readonly injector;
5687
+ /** L'etichetta: e' il primo campo di un elemento nuovo, e prende il focus da se'. */
5688
+ private readonly labelInput;
5665
5689
  /** Il nome dell'elemento selezionato; `$start` per lo Start. */
5666
5690
  readonly selectedName: _angular_core.InputSignal<string | null>;
5667
5691
  /**
@@ -5706,6 +5730,43 @@ declare class ElementInspectorComponent {
5706
5730
  readonly hiddenIssueCount: _angular_core.Signal<number>;
5707
5731
  toggleIssues(): void;
5708
5732
  readonly pendingName: _angular_core.WritableSignal<string | null>;
5733
+ /**
5734
+ * L'elemento il cui nome si sta ancora componendo, e cosa c'e' scritto nel campo.
5735
+ *
5736
+ * `draft: null` e' «segue l'etichetta», che e' lo stato iniziale e quello in cui si torna
5737
+ * svuotando il campo. `element` segue le rinomine: senza, la prima battuta sull'etichetta —
5738
+ * che rinomina — farebbe ripartire lo stato da capo e il campo tornerebbe a seguire una
5739
+ * scelta che l'utente aveva già disfatto.
5740
+ */
5741
+ private readonly composing;
5742
+ /** Il nome si compone qui invece di stare dietro il comando di rinomina. */
5743
+ readonly isComposingName: _angular_core.Signal<boolean>;
5744
+ /** Cio' che si vede nel campo: vuoto finche' non c'e' un'etichetta da cui costruirlo. */
5745
+ readonly composedName: _angular_core.Signal<string>;
5746
+ readonly composedNameError: _angular_core.Signal<string | null>;
5747
+ constructor();
5748
+ /**
5749
+ * Un elemento **senza etichetta** e' un elemento che nessuno ha ancora nominato: il campo del
5750
+ * nome parte vuoto e segue l'etichetta. Uno che ce l'ha e' un elemento vero, e il suo nome si
5751
+ * cambia solo col comando di rinomina, che dice prima quanti riferimenti riscrivera'.
5752
+ */
5753
+ private seedComposing;
5754
+ /**
5755
+ * Il nome scritto a mano: smette di seguire l'etichetta e, appena e' valido, diventa il nome
5756
+ * dell'elemento. Un nome intermedio non valido resta nel campo senza toccare il documento —
5757
+ * ricopiarci sopra il nome corrente impedirebbe di digitare.
5758
+ */
5759
+ onComposedNameInput(value: string): void;
5760
+ /**
5761
+ * Il nome costruito dall'etichetta (§3.3): spazi e caratteri non ammessi diventano `_`, i
5762
+ * diacritici cadono e un nome già preso prende un suffisso.
5763
+ *
5764
+ * Etichetta vuota → `null`, cioe' resta il nome provvisorio con cui l'elemento e' nato: il
5765
+ * documento non puo' stare senza, perche' il nome e' la chiave di tutto (§3.3).
5766
+ */
5767
+ private deriveName;
5768
+ /** Rimette il nome a seguire l'etichetta, dopo che il campo e' stato svuotato. */
5769
+ private applyDerivedName;
5709
5770
  readonly nameError: _angular_core.Signal<string | null>;
5710
5771
  /**
5711
5772
  * Quanti riferimenti verrebbero riscritti dalla rinomina. Serve a rendere visibile che
@@ -5780,6 +5841,15 @@ declare class ElementDialogComponent {
5780
5841
  private readonly reference;
5781
5842
  readonly typeLabel: _angular_core.Signal<string>;
5782
5843
  readonly title: _angular_core.Signal<string>;
5844
+ /**
5845
+ * L'ultimo nome adottato da una rinomina.
5846
+ *
5847
+ * La selezione dell'editor **e' il nome**, quindi una rinomina cambia `selectedName` senza
5848
+ * che l'elemento sia cambiato. Senza distinguere i due casi il nome che si costruisce
5849
+ * dall'etichetta mentre la si digita riportava il focus sul pannello a ogni battuta, e
5850
+ * l'etichetta si scriveva una lettera alla volta.
5851
+ */
5852
+ private renamedTo?;
5783
5853
  constructor();
5784
5854
  /** Il vincolo: dentro il builder resta la maniglia, non la finestra intera. */
5785
5855
  readonly constrainPosition: DialogConstrainPosition;
@@ -6198,6 +6268,8 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
6198
6268
  readonly hasOutputConflict: _angular_core.Signal<boolean>;
6199
6269
  /** §5.2 — la choice di default fuori dall'elenco e' un avviso, non un errore. */
6200
6270
  readonly defaultChoiceIsForeign: _angular_core.Signal<boolean>;
6271
+ /** §5.2 — spunta spenta per default: si scrive solo il `true`. */
6272
+ readonly selectedAutoSelectsSingleChoice: _angular_core.Signal<boolean>;
6201
6273
  /** §5.2 — `scale` su un campo non numerico e' `SCALE_NOT_APPLICABLE`. */
6202
6274
  readonly scaleApplies: _angular_core.Signal<boolean>;
6203
6275
  readonly requiresObjectType: _angular_core.Signal<boolean>;
@@ -6225,6 +6297,11 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
6225
6297
  setRequired(value: boolean): void;
6226
6298
  /** `isEditable` ha default `true`: si scrive solo il `false`, che e' la scelta significativa. */
6227
6299
  setEditable(value: boolean): void;
6300
+ /**
6301
+ * §5.2 — la spunta e' spenta per default, quindi nel documento va **solo** il `true`: scriverla
6302
+ * a `false` sarebbe una scelta che nessuno ha fatto su un campo che il contratto omette.
6303
+ */
6304
+ setAutoSelectSingleChoice(value: boolean): void;
6228
6305
  addChoice(name: string | undefined): void;
6229
6306
  removeChoice(index: number): void;
6230
6307
  moveChoice(index: number, direction: -1 | 1): void;
@@ -6276,6 +6353,13 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
6276
6353
  actionHasNoTrigger(action: FlowScreenAction): boolean;
6277
6354
  /** §5.2 — senza campo e senza `initBehavior` il trigger non scattera' mai: `SCREEN_TRIGGER_WITHOUT_CAUSE`. */
6278
6355
  triggerHasNoCause(trigger: FlowScreenTrigger): boolean;
6356
+ /**
6357
+ * §5.2 — `runOnLoad` **non serve** per il caso comune: un trigger il cui campo osservato porta un
6358
+ * `defaultValue` non vuoto scatta comunque all'arrivo sulla schermata, perche' un campo precompilato
6359
+ * dal flow conta come un campo che ha preso un valore. Dirlo qui evita di scriverlo per sicurezza e
6360
+ * poi chiedersi perche' l'action gira due volte.
6361
+ */
6362
+ triggerFiresOnLoadByDefault(trigger: FlowScreenTrigger): boolean;
6279
6363
  /**
6280
6364
  * §5.2 — l'unico valore ammesso e' `runOnLoad`. Il `runOnRevisit` della specifica Salesforce e'
6281
6365
  * `SCREEN_TRIGGER_INIT_BEHAVIOR_UNKNOWN`, e vale la pena dirlo qui: chi arriva da quella
@@ -6847,7 +6931,7 @@ declare class FlowBuilderComponent {
6847
6931
  * troppo. `panel` tiene il form nel pannello laterale, che e' piu' comodo quando si
6848
6932
  * modificano molti elementi di fila perche' non c'e' niente da aprire e chiudere.
6849
6933
  */
6850
- readonly inspectorMode: _angular_core.InputSignal<"dialog" | "panel">;
6934
+ readonly inspectorMode: _angular_core.InputSignal<"panel" | "dialog">;
6851
6935
  /**
6852
6936
  * L'esito dell'ultima esecuzione, se l'ospite ne ha uno da mostrare.
6853
6937
  *
@@ -6944,8 +7028,23 @@ declare class FlowBuilderComponent {
6944
7028
  setFullName(value: string): void;
6945
7029
  setDescription(value: string): void;
6946
7030
  setInterviewLabel(value: string): void;
7031
+ /**
7032
+ * Il tipo di flow si sceglie **alla creazione**, e su un flow salvato non si tocca.
7033
+ *
7034
+ * Non e' una preferenza: decide quali globali esistono (`$Record` non c'e' in uno screen
7035
+ * flow, §4.1), quali elementi sono ammessi (§13.6) e come il motore lo esegue. Cambiarlo su
7036
+ * un documento già scritto lo lascia pieno di riferimenti a cose che da quel momento non
7037
+ * esistono — e nessuna primitiva del backend rimedia. Il comando non c'e' nemmeno
7038
+ * nell'interfaccia; il controllo qui e' perché la chiamata resta pubblica.
7039
+ */
6947
7040
  setProcessType(value: string): void;
6948
7041
  readonly processTypes: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
7042
+ /**
7043
+ * Il tipo scritto per esteso, per il flow salvato dove non e' più una scelta. Fuori catalogo
7044
+ * si mostra il valore grezzo: e' del backend, non nostro da correggere (vedi
7045
+ * {@link isProcessTypeOutOfCatalog}).
7046
+ */
7047
+ readonly processTypeLabel: _angular_core.Signal<string>;
6949
7048
  /**
6950
7049
  * Il `processType` del documento non e' fra quelli del dizionario. Non e' un caso di scuola:
6951
7050
  * basta che il dizionario arrivi senza `processTypes`, o che il backend salvi una scrittura
@@ -7123,6 +7222,17 @@ declare class FlowBuilderComponent {
7123
7222
  autoLayout(): void;
7124
7223
  undo(): void;
7125
7224
  redo(): void;
7225
+ /**
7226
+ * Un passo di storico, con la selezione che lo segue.
7227
+ *
7228
+ * La selezione dell'editor **e' il nome** (§3.3), e un annulla può riportare indietro una
7229
+ * rinomina — succede a ogni battuta sull'etichetta di un elemento appena creato, dove il nome
7230
+ * la segue. Il nome selezionato allora non esiste più: l'inspector resta puntato sul vuoto, il
7231
+ * form del tipo sparisce e l'intestazione mostra un nome che nel documento non c'è. L'annulla
7232
+ * però non sposta gli elementi nella loro collection, quindi **dove** stavano — collection e
7233
+ * indice — e' la traccia che sopravvive: dopo il passo si adotta il nome che si trova lì.
7234
+ */
7235
+ private stepHistory;
7126
7236
  save(): Promise<void>;
7127
7237
  /** Il modulo del duplicato e' aperto. */
7128
7238
  readonly isCopyOpen: _angular_core.WritableSignal<boolean>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/flow-builder",
3
- "version": "20.3.40",
3
+ "version": "20.3.42",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^20.2.14",
6
6
  "@angular/common": "^20.3.28",