@esfaenza/flow-builder 20.3.17 → 20.3.18

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
@@ -256,6 +256,54 @@ interface FlowScreenField {
256
256
  /** Come una regola di Decision: rivalutata sui valori appena inviati (§5.2). */
257
257
  visibilityRule?: FlowConditionHolder;
258
258
  }
259
+ /**
260
+ * §5.2 — una **screen action**: un'action del flow i cui risultati finiscono negli **altri campi
261
+ * della stessa schermata**. E' il caso «inserisci il codice fiscale e, se la persona e' già a
262
+ * sistema, nome e cognome compaiono da soli», e senza di essa lo si farebbe spezzando lo screen in
263
+ * due con un elemento Action in mezzo.
264
+ *
265
+ * Identificazione e parametri sono **gli stessi** di un elemento Action (§5.9), codici di
266
+ * validazione compresi. Cambia una cosa sola, e riguarda l'editor: l'`assignToReference` di un
267
+ * `outputParameters` accetta anche i **campi di questa schermata**, che ovunque altrove sono di sola
268
+ * lettura.
269
+ */
270
+ interface FlowScreenAction {
271
+ /**
272
+ * Il nome con cui la citano i `triggers`, e la radice di `Cerca.nome` con l'output automatico. Vive
273
+ * nello spazio dei nomi **comune** (§3.3): un'action omonima di una variabile o di un node e'
274
+ * `NAME_DUPLICATED`, ed e' l'unica cosa che tiene quel riferimento non ambiguo.
275
+ */
276
+ name?: string;
277
+ actionType?: string;
278
+ /** Obbligatorio: senza, `ACTION_NAME_MISSING`; fuori catalogo, `ACTION_UNKNOWN`. */
279
+ actionName?: string;
280
+ inputParameters?: FlowInputParameter[];
281
+ outputParameters?: FlowOutputParameter[];
282
+ /**
283
+ * Rende gli output leggibili come `<NomeAction>.<NomeOutput>`. **Non scrive in nessun campo**: e'
284
+ * la forma da proporre quando il risultato serve a una condizione, non a precompilare (§5.2).
285
+ */
286
+ storeOutputAutomatically?: boolean;
287
+ }
288
+ /**
289
+ * §5.2 — cosa fa scattare una screen action all'arrivo sulla schermata. L'unico valore ammesso e'
290
+ * `runOnLoad`: il `runOnRevisit` della specifica Salesforce e'
291
+ * `SCREEN_TRIGGER_INIT_BEHAVIOR_UNKNOWN`.
292
+ */
293
+ type FlowScreenTriggerInitBehavior = 'runOnLoad' | string;
294
+ /**
295
+ * §5.2 — chi invoca una screen action, e quando. Sta separato dalle `actions` perche' **piu' trigger
296
+ * possono invocare la stessa action**.
297
+ *
298
+ * Senza ne' `triggerFieldName` ne' `initBehavior` non scatterebbe mai: `SCREEN_TRIGGER_WITHOUT_CAUSE`.
299
+ */
300
+ interface FlowScreenTrigger extends FlowConditionHolder {
301
+ /** Una delle `actions` **dello stesso screen**: altrimenti `SCREEN_ACTION_UNKNOWN`. */
302
+ screenActionName?: string;
303
+ /** Un campo **di questo screen**: altrimenti `SCREEN_TRIGGER_FIELD_UNKNOWN`. */
304
+ triggerFieldName?: string;
305
+ initBehavior?: FlowScreenTriggerInitBehavior;
306
+ }
259
307
  /**
260
308
  * §5.2 — lo screen dinamico: **descrive i propri campi**, invece di referenziare un form.
261
309
  *
@@ -276,6 +324,10 @@ interface FlowDynamicScreen extends FlowNodeBase {
276
324
  /** Nome di uno stage dichiarato: alimenta l'indicatore di avanzamento. */
277
325
  stageReference?: string;
278
326
  fields?: FlowScreenField[];
327
+ /** Le action invocabili dai campi di questa schermata (§5.2). */
328
+ actions?: FlowScreenAction[];
329
+ /** Chi le invoca, e quando: due pezzi perche' piu' trigger possono chiamare la stessa action. */
330
+ triggers?: FlowScreenTrigger[];
279
331
  connector?: FlowConnector;
280
332
  }
281
333
  type FlowAssignmentOperator = 'Assign' | 'Add' | 'Subtract' | 'AddAtStart' | 'AssignCount' | 'RemoveFirst' | 'RemoveAll' | 'RemovePosition' | 'RemoveAfterFirst' | 'RemoveBeforeFirst' | 'RemoveUncommon' | string;
@@ -284,12 +336,12 @@ interface FlowAssignmentItem {
284
336
  operator?: FlowAssignmentOperator;
285
337
  value?: FlowValue;
286
338
  }
287
- /** §5.2 — le operazioni sono eseguite nell'ordine dichiarato. */
339
+ /** §5.3 — le operazioni sono eseguite nell'ordine dichiarato. */
288
340
  interface FlowAssignment extends FlowNodeBase {
289
341
  assignmentItems?: FlowAssignmentItem[];
290
342
  connector?: FlowConnector;
291
343
  }
292
- /** §5.3 — una regola per ramo; l'ordine e' semantico. */
344
+ /** §5.4 — una regola per ramo; l'ordine e' semantico. */
293
345
  interface FlowDecisionRule extends FlowConditionHolder {
294
346
  name?: string;
295
347
  label?: string;
@@ -301,7 +353,7 @@ interface FlowDecision extends FlowNodeBase {
301
353
  defaultConnector?: FlowConnector;
302
354
  defaultConnectorLabel?: string;
303
355
  }
304
- /** §5.4 */
356
+ /** §5.5 */
305
357
  interface FlowLoop extends FlowNodeBase {
306
358
  collectionReference?: string;
307
359
  assignNextValueToReference?: string;
@@ -314,7 +366,7 @@ interface FlowSortOption {
314
366
  sortOrder?: FlowSortOrder;
315
367
  doesPutEmptyStringAndNullFirst?: boolean;
316
368
  }
317
- /** §5.5 — `assignNextValueToReference` e' l'elemento in esame, non la destinazione. */
369
+ /** §5.6 — `assignNextValueToReference` e' l'elemento in esame, non la destinazione. */
318
370
  interface FlowCollectionProcessor extends FlowNodeBase, FlowConditionHolder {
319
371
  collectionProcessorType?: FlowCollectionProcessorType;
320
372
  collectionReference?: string;
@@ -323,7 +375,7 @@ interface FlowCollectionProcessor extends FlowNodeBase, FlowConditionHolder {
323
375
  sortOptions?: FlowSortOption[];
324
376
  connector?: FlowConnector;
325
377
  }
326
- /** §5.6 */
378
+ /** §5.7 */
327
379
  interface FlowRecordLookup extends FlowNodeBase {
328
380
  object?: string;
329
381
  filterLogic?: FlowConditionLogic;
@@ -338,12 +390,12 @@ interface FlowRecordLookup extends FlowNodeBase {
338
390
  storeOutputAutomatically?: boolean;
339
391
  outputReference?: string;
340
392
  outputAssignments?: FlowOutputFieldAssignment[];
341
- /** Modellato ma non tradotto in query (§5.6). */
393
+ /** Modellato ma non tradotto in query (§5.7). */
342
394
  relatedRecords?: unknown[];
343
395
  connector?: FlowConnector;
344
396
  faultConnector?: FlowConnector;
345
397
  }
346
- /** §5.7 */
398
+ /** §5.8 */
347
399
  interface FlowRecordCreate extends FlowNodeBase {
348
400
  object?: string;
349
401
  inputReference?: string;
@@ -371,7 +423,7 @@ interface FlowRecordUpdate extends FlowNodeBase {
371
423
  interface FlowRecordDelete extends FlowNodeBase {
372
424
  object?: string;
373
425
  inputReference?: string;
374
- /** Senza filtri e' un **errore**, non un avviso (§5.7). */
426
+ /** Senza filtri e' un **errore**, non un avviso (§5.8). */
375
427
  filters?: FlowRecordFilter[];
376
428
  connector?: FlowConnector;
377
429
  faultConnector?: FlowConnector;
@@ -379,7 +431,7 @@ interface FlowRecordDelete extends FlowNodeBase {
379
431
  interface FlowRecordRollback extends FlowNodeBase {
380
432
  connector?: FlowConnector;
381
433
  }
382
- /** §5.8 */
434
+ /** §5.9 */
383
435
  interface FlowActionCall extends FlowNodeBase {
384
436
  actionType?: string;
385
437
  actionName?: string;
@@ -404,7 +456,7 @@ interface FlowScriptPluginCall extends FlowNodeBase {
404
456
  connector?: FlowConnector;
405
457
  faultConnector?: FlowConnector;
406
458
  }
407
- /** §5.9 — i `name` sono le variabili isInput/isOutput del flow **invocato**. */
459
+ /** §5.10 — i `name` sono le variabili isInput/isOutput del flow **invocato**. */
408
460
  interface FlowSubflowInputAssignment {
409
461
  name?: string;
410
462
  value?: FlowValue;
@@ -420,7 +472,7 @@ interface FlowSubflow extends FlowNodeBase {
420
472
  storeOutputAutomatically?: boolean;
421
473
  connector?: FlowConnector;
422
474
  }
423
- /** §5.10 */
475
+ /** §5.11 */
424
476
  interface FlowWaitEvent extends FlowConditionHolder {
425
477
  name?: string;
426
478
  label?: string;
@@ -438,7 +490,7 @@ interface FlowWait extends FlowNodeBase {
438
490
  defaultConnectorLabel?: string;
439
491
  faultConnector?: FlowConnector;
440
492
  }
441
- /** §5.11 */
493
+ /** §5.12 */
442
494
  interface FlowCustomErrorMessage {
443
495
  errorMessage?: string;
444
496
  isFieldError?: boolean;
@@ -447,12 +499,12 @@ interface FlowCustomErrorMessage {
447
499
  interface FlowCustomError extends FlowNodeBase {
448
500
  customErrorMessages?: FlowCustomErrorMessage[];
449
501
  }
450
- /** §5.12 */
502
+ /** §5.13 */
451
503
  interface FlowTransformValueAction {
452
504
  transformType?: FlowTransformType;
453
505
  /**
454
506
  * Il campo di destinazione, oppure — se il target e' una `Structure` — il nome del
455
- * **membro** della classe (§5.12, §4.7).
507
+ * **membro** della classe (§5.13, §4.7).
456
508
  */
457
509
  outputFieldApiName?: string;
458
510
  value?: FlowValue;
@@ -475,7 +527,7 @@ interface FlowUnsupportedNode extends FlowNodeBase {
475
527
  [key: string]: unknown;
476
528
  }
477
529
  /**
478
- * §5.13 — i tre tipi di step. `stepMuleSoft` non esiste in questo sistema
530
+ * §5.14 — i tre tipi di step. `stepMuleSoft` non esiste in questo sistema
479
531
  * (`ELEMENT_NOT_SUPPORTED`); l'elenco autoritativo e' il dizionario `stageStepTypes`.
480
532
  */
481
533
  type FlowStageStepActionType = 'stepBackground' | 'stepInteractive' | 'stepApproval' | string;
@@ -487,7 +539,7 @@ interface FlowStageStepAssignee {
487
539
  /** Il nome di un *evaluation flow* che decide una condizione di ingresso o di uscita. */
488
540
  type FlowStageStepConditionActionType = 'EvaluationFlow' | string;
489
541
  /**
490
- * §5.13 — uno step di uno stage.
542
+ * §5.14 — uno step di uno stage.
491
543
  *
492
544
  * Due cose che non si vedono dal tipo:
493
545
  * - gli step **non hanno un ordine di esecuzione**: parte quello le cui `entryConditions`
@@ -510,9 +562,9 @@ interface FlowStageStep {
510
562
  assignees?: FlowStageStepAssignee[];
511
563
  /** `"0"` o `"1"`: il modello lo porta come stringa. */
512
564
  requiresMultiMemberApproval?: string;
513
- /** *Se* lo step si applica: se non si avverano, viene saltato (§5.13). */
565
+ /** *Se* lo step si applica: se non si avverano, viene saltato (§5.14). */
514
566
  entryConditions?: FlowCondition[];
515
- /** *Quando* lo step libera lo stage: se restano false, lo stage va in stallo (§5.13). */
567
+ /** *Quando* lo step libera lo stage: se restano false, lo stage va in stallo (§5.14). */
516
568
  exitConditions?: FlowCondition[];
517
569
  /** Evaluation flow che decide l'ingresso: deve restituire `isOrchestrationConditionMet`. */
518
570
  entryActionName?: string;
@@ -520,7 +572,7 @@ interface FlowStageStep {
520
572
  exitActionName?: string;
521
573
  exitActionType?: FlowStageStepConditionActionType;
522
574
  inputParameters?: FlowInputParameter[];
523
- /** `assignToReference` e' facoltativo: l'output e' già referenziabile (§5.13). */
575
+ /** `assignToReference` e' facoltativo: l'output e' già referenziabile (§5.14). */
524
576
  outputParameters?: FlowOutputParameter[];
525
577
  /** `true` → usa `outputConfigParams` come output finti, senza eseguire lo step. */
526
578
  debugSimulateStep?: boolean;
@@ -531,7 +583,7 @@ interface FlowOrchestratedStage extends FlowNodeBase {
531
583
  connector?: FlowConnector;
532
584
  /**
533
585
  * **Non** e' un ramo di guasto: e' il ramo percorso quando uno step viene rifiutato.
534
- * Senza, un rifiuto fa fallire l'interview (§5.13).
586
+ * Senza, un rifiuto fa fallire l'interview (§5.14).
535
587
  */
536
588
  faultConnector?: FlowConnector;
537
589
  }
@@ -684,7 +736,7 @@ interface FlowComparisonOperatorEntry extends FlowDictionaryEntry {
684
736
  /** Tipi a cui l'operatore si applica; vuoto o assente = qualunque tipo. */
685
737
  appliesTo?: FlowDataType[] | null;
686
738
  }
687
- /** §5.2 — operatore di assegnazione. */
739
+ /** §5.3 — operatore di assegnazione. */
688
740
  interface FlowAssignmentOperatorEntry extends FlowDictionaryEntry {
689
741
  /** Ha senso solo su destinazioni collection; altrove e' un avviso. */
690
742
  expectsCollection?: boolean;
@@ -707,7 +759,7 @@ interface FlowGlobalVariableEntry extends FlowDictionaryEntry {
707
759
  requiresRecordTrigger?: boolean;
708
760
  }
709
761
  /**
710
- * §5.13 — i tipi di step di uno stage di orchestrazione (`stageStepTypes`).
762
+ * §5.14 — i tipi di step di uno stage di orchestrazione (`stageStepTypes`).
711
763
  * Le colonne dicono cosa il tipo pretende: senza, l'editor dovrebbe cablare i tre nomi.
712
764
  */
713
765
  interface FlowStageStepTypeEntry extends FlowDictionaryEntry {
@@ -804,14 +856,14 @@ interface FlowFieldDescription {
804
856
  /**
805
857
  * `false` → non si puo' filtrare su questo campo. Non e' un dettaglio: la chiave di
806
858
  * un'entita' con chiave composta puo' essere **non filtrabile** (porta la forma canonica
807
- * della chiave), e il filtro «per identificativo» va scritto una colonna alla volta (§5.7).
859
+ * della chiave), e il filtro «per identificativo» va scritto una colonna alla volta (§5.8).
808
860
  */
809
861
  isFilterable?: boolean;
810
862
  isSortable?: boolean;
811
- /** Aggiornabile da un Update: altrimenti `FIELD_NOT_UPDATEABLE` (§5.7). */
863
+ /** Aggiornabile da un Update: altrimenti `FIELD_NOT_UPDATEABLE` (§5.8). */
812
864
  isUpdateable?: boolean;
813
865
  /**
814
- * Valorizzabile da un Create: altrimenti `FIELD_NOT_CREATEABLE` (§5.7). **Non** e' lo stesso
866
+ * Valorizzabile da un Create: altrimenti `FIELD_NOT_CREATEABLE` (§5.8). **Non** e' lo stesso
815
867
  * insieme di `isUpdateable` — la colonna di una chiave naturale la scrive chi crea il record
816
868
  * e non si cambia dopo, un identificativo generato dal database e' l'opposto.
817
869
  */
@@ -904,7 +956,7 @@ interface FlowCatalogEntry {
904
956
  }
905
957
  /**
906
958
  * Parametro dichiarato da un'action, uno script o un form.
907
- * Con il catalogo popolato un parametro inesistente e' un **errore** (§5.8).
959
+ * Con il catalogo popolato un parametro inesistente e' un **errore** (§5.9).
908
960
  */
909
961
  interface FlowCatalogParameter {
910
962
  name: string;
@@ -1163,11 +1215,11 @@ interface FlowPendingScreen {
1163
1215
  canPause?: boolean;
1164
1216
  }
1165
1217
  /**
1166
- * §5.13 — lo stato che un assegnatario comunica concludendo uno step.
1218
+ * §5.14 — lo stato che un assegnatario comunica concludendo uno step.
1167
1219
  * `Pending` non e' accettato in scrittura: e' `INVALID_REQUEST`.
1168
1220
  */
1169
1221
  type FlowStageStepStatus = 'Completed' | 'Rejected' | 'Cancelled' | 'Pending' | string;
1170
- /** Lo stato di uno step, come lo riporta l'ispezione di una sospesa (§5.13, §6.5). */
1222
+ /** Lo stato di uno step, come lo riporta l'ispezione di una sospesa (§5.14, §6.5). */
1171
1223
  interface FlowStageStepState {
1172
1224
  stepName?: string;
1173
1225
  label?: string | null;
@@ -1207,7 +1259,7 @@ interface FlowInterviewResult {
1207
1259
  */
1208
1260
  isWaitingForEvent?: boolean;
1209
1261
  isWaitingForStageStep?: boolean;
1210
- /** Con `isWaitingForStageStep`: lo stato di ogni step dello stage corrente (§5.13). */
1262
+ /** Con `isWaitingForStageStep`: lo stato di ogni step dello stage corrente (§5.14). */
1211
1263
  stageSteps?: FlowStageStepState[];
1212
1264
  isSuccess?: boolean;
1213
1265
  }
@@ -1229,7 +1281,7 @@ interface FlowResumeRequest {
1229
1281
  debug?: boolean;
1230
1282
  }
1231
1283
  /**
1232
- * §5.13 — `POST /interviews/{key}/stage-step`: un assegnatario conclude uno step.
1284
+ * §5.14 — `POST /interviews/{key}/stage-step`: un assegnatario conclude uno step.
1233
1285
  * Se lo stage si sospende di nuovo, la risposta porta una `interviewKey` **nuova** e la
1234
1286
  * vecchia non e' piu' valida.
1235
1287
  */
@@ -1407,7 +1459,7 @@ declare abstract class FlowBuilderApi {
1407
1459
  * `POST /flows/references/writable` — le variabili **piu' le globali assegnabili**, per i
1408
1460
  * campi di destinazione. Le globali assegnabili sono **due**, `$Flow.CurrentStage` e
1409
1461
  * `$Flow.ActiveStages`: quelle dell'host sono sempre di sola lettura e il catalogo non ha un
1410
- * flag per dichiararne una scrivibile (§5.2). La primitiva le comprende già, l'editor non le
1462
+ * flag per dichiararne una scrivibile (§5.3). La primitiva le comprende già, l'editor non le
1411
1463
  * aggiunge. Restano fuori i campi di `$Record`, che dipendono dallo schema: quelli arrivano da
1412
1464
  * `listFields(object, 'updateable')` (§6.4).
1413
1465
  *
@@ -1509,7 +1561,7 @@ declare abstract class FlowBuilderApi {
1509
1561
  abstract listEvents(): Promise<FlowCatalogEntry[]>;
1510
1562
  /**
1511
1563
  * `GET /flows/subflow-candidates?excluding=` — solo i flow con una versione attiva,
1512
- * escluso quello corrente (§5.9).
1564
+ * escluso quello corrente (§5.10).
1513
1565
  */
1514
1566
  abstract listSubflowCandidates(excluding?: string): Promise<FlowSummary[]>;
1515
1567
  /**
@@ -1523,14 +1575,14 @@ declare abstract class FlowBuilderApi {
1523
1575
  /** `POST /interviews/resume` — riprende un'esecuzione in pausa. */
1524
1576
  resumeInterview(request: FlowResumeRequest): Promise<FlowInterviewResult>;
1525
1577
  /**
1526
- * `POST /interviews/{key}/stage-step` — un assegnatario conclude uno step (§5.13).
1578
+ * `POST /interviews/{key}/stage-step` — un assegnatario conclude uno step (§5.14).
1527
1579
  * Se lo stage si sospende di nuovo, la risposta porta una `interviewKey` **nuova**: la
1528
1580
  * vecchia non e' piu' valida e va sostituita, non conservata.
1529
1581
  */
1530
1582
  completeStageStep(request: FlowStageStepRequest): Promise<FlowInterviewResult>;
1531
1583
  /**
1532
1584
  * `GET /interviews/{key}` — ispeziona una sospesa senza consumarla.
1533
- * Con `isWaitingForStageStep` porta `stageSteps` con lo stato di ognuno (§5.13).
1585
+ * Con `isWaitingForStageStep` porta `stageSteps` con lo stato di ognuno (§5.14).
1534
1586
  */
1535
1587
  inspectInterview(interviewKey: string): Promise<FlowInterviewResult>;
1536
1588
  /** `DELETE /interviews/{key}` — abbandona. */
@@ -1684,7 +1736,7 @@ interface FlowOutlet {
1684
1736
  *
1685
1737
  * Vale sui soli elementi che possono fallire (Record*, ActionCall, ScriptCall, Wait):
1686
1738
  * il `faultConnector` di un `OrchestratedStage` porta `kind: 'Fault'` ma e' il ramo
1687
- * dello **step rifiutato** (§5.13), non un ramo di guasto, e la §7 non lo comprende.
1739
+ * dello **step rifiutato** (§5.14), non un ramo di guasto, e la §7 non lo comprende.
1688
1740
  */
1689
1741
  isFaultRecovery?: boolean;
1690
1742
  read(node: FlowAnyNode): FlowConnector | undefined;
@@ -1721,7 +1773,7 @@ declare const TYPES_WITH_AUTOMATIC_OUTPUT: ReadonlySet<string>;
1721
1773
  */
1722
1774
  declare const FLOW_ELEMENT_ICONS: Record<string, string>;
1723
1775
  /**
1724
- * Il glifo delle varianti (§5.5): due voci di palette dello stesso tipo con lo stesso simbolo
1776
+ * Il glifo delle varianti (§5.6): due voci di palette dello stesso tipo con lo stesso simbolo
1725
1777
  * si distinguerebbero solo dall'etichetta, e sulla palette il simbolo e' la prima cosa che si
1726
1778
  * guarda. La chiave e' `tipo:variante`.
1727
1779
  */
@@ -1734,7 +1786,7 @@ declare const FLOW_ELEMENT_VARIANT_ICONS: Record<string, string>;
1734
1786
  declare function elementIcon(type: string, label?: string, variant?: string): string;
1735
1787
 
1736
1788
  /**
1737
- * I tipi che sulla palette valgono per **piu' di una voce** — FRONTEND.md §5.5.
1789
+ * I tipi che sulla palette valgono per **piu' di una voce** — FRONTEND.md §5.6.
1738
1790
  *
1739
1791
  * Il Collection Processor e' un solo tipo di node con un discriminatore
1740
1792
  * (`collectionProcessorType`: `Sort` o `Filter`), e i campi rilevanti cambiano con esso: un
@@ -1919,7 +1971,7 @@ declare function valuedFieldsOf(value: FlowValue | undefined | null): (keyof Flo
1919
1971
  declare function valuedFieldOf(value: FlowValue | undefined | null): keyof FlowValue | undefined;
1920
1972
 
1921
1973
  /**
1922
- * Gli step di uno stage di orchestrazione — FRONTEND.md §5.13.
1974
+ * Gli step di uno stage di orchestrazione — FRONTEND.md §5.14.
1923
1975
  *
1924
1976
  * Tre regole del contratto che non si vedono guardando il tipo, e che qui stanno in un posto
1925
1977
  * solo perche' le usano l'inspector, lo spazio dei nomi del documento e la validazione locale:
@@ -1939,14 +1991,14 @@ declare function stepsOf(stage: FlowOrchestratedStage | undefined): FlowStageSte
1939
1991
  /**
1940
1992
  * Il nome dello step il cui output un riferimento sta leggendo, se e' uno degli step passati.
1941
1993
  * `undefined` quando il riferimento e' legittimo. Serve a impedire nell'editor la condizione
1942
- * che referenzia l'output di un altro step (§5.13, punto 4): la strada corretta e' scrivere
1994
+ * che referenzia l'output di un altro step (§5.14, punto 4): la strada corretta e' scrivere
1943
1995
  * quel risultato in una variabile con `outputParameters.assignToReference` e condizionare
1944
1996
  * su quella.
1945
1997
  */
1946
1998
  declare function stageStepOutputReferenced(reference: string | undefined, steps: FlowStageStep[]): string | undefined;
1947
1999
  /**
1948
2000
  * L'unico output che il runtime legge da un evaluation flow di condizione. Dichiararne altri
1949
- * e' `STAGE_ACTION_INVALID` (§5.13, punto 7).
2001
+ * e' `STAGE_ACTION_INVALID` (§5.14, punto 7).
1950
2002
  */
1951
2003
  declare const ORCHESTRATION_CONDITION_OUTPUT = "isOrchestrationConditionMet";
1952
2004
 
@@ -1993,6 +2045,18 @@ declare function allFieldsOf(screen: FlowDynamicScreen | undefined): FlowScreenF
1993
2045
  * Chi vuole i **soli** riferimenti proponibili usa `isFieldResource`.
1994
2046
  */
1995
2047
  declare function screenFieldNames(definition: FlowDefinition | undefined): string[];
2048
+ /**
2049
+ * §3.3, §5.2 — i nomi delle **screen action** di tutti gli screen dinamici del documento.
2050
+ *
2051
+ * Stanno nello spazio dei nomi comune per la stessa ragione dei campi e degli step: con
2052
+ * `storeOutputAutomatically` il nome dell'action e' la **radice** di un riferimento (`Cerca.nome`), e
2053
+ * un'omonimia con una variabile — o con una `Structure` chiamata `Cerca` — renderebbe quel riferimento
2054
+ * ambiguo. Quindi entrano in `usedNames` e un omonimo e' `NAME_DUPLICATED`.
2055
+ *
2056
+ * Ci entrano **tutte**, anche senza output automatico: il nome e' unico o non lo e', e farlo dipendere
2057
+ * da un flag significherebbe che accendere quel flag fa comparire un errore altrove.
2058
+ */
2059
+ declare function screenActionNames(definition: FlowDefinition | undefined): string[];
1996
2060
  /**
1997
2061
  * §5.2 — il campo e' una risorsa del flow (`kind: "ScreenField"`), quindi referenziabile
1998
2062
  * per nome ovunque e **di sola lettura**.
@@ -2127,7 +2191,7 @@ declare class FlowDictionaryStore {
2127
2191
  readonly paletteCategories: _angular_core.Signal<string[]>;
2128
2192
  elementType(value: string): FlowElementTypeEntry | undefined;
2129
2193
  /**
2130
- * Le varianti di un tipo, cioe' i valori del suo discriminatore (§5.5). L'unico oggi e' il
2194
+ * Le varianti di un tipo, cioe' i valori del suo discriminatore (§5.6). L'unico oggi e' il
2131
2195
  * Collection Processor. Elenco vuoto = tipo senza varianti, **oppure** dizionario non
2132
2196
  * disponibile: in entrambi i casi la palette mostra una voce sola, che e' l'unica cosa
2133
2197
  * onesta da fare quando non si sa quali varianti esistano.
@@ -2167,11 +2231,11 @@ declare class FlowDictionaryStore {
2167
2231
  isGlobalScopeVerifiable(scope: string | undefined | null): boolean;
2168
2232
  /** I percorsi noti di uno scope, già prefissati: `$User.Email`. */
2169
2233
  globalPathsOf(scope: string | undefined | null): string[];
2170
- /** §5.13 — la voce di `stageStepTypes` di un `actionType`. */
2234
+ /** §5.14 — la voce di `stageStepTypes` di un `actionType`. */
2171
2235
  stageStepType(value: string | undefined | null): FlowStageStepTypeEntry | undefined;
2172
2236
  /** `stepBackground` vuole `actionName`; il fallback serve se il dizionario non lo dichiara. */
2173
2237
  stageStepRequiresActionName(actionType: string | undefined | null): boolean;
2174
- /** `stepInteractive` e `stepApproval` vogliono gli assegnatari (§5.13). */
2238
+ /** `stepInteractive` e `stepApproval` vogliono gli assegnatari (§5.14). */
2175
2239
  stageStepRequiresAssignees(actionType: string | undefined | null): boolean;
2176
2240
  dataType(value: string | undefined | null): FlowDataTypeEntry | undefined;
2177
2241
  /** §4.6, §4.7 — `Object`, `Enum` e `Structure` richiedono `objectType`. */
@@ -2282,7 +2346,7 @@ declare class FlowCatalogStore {
2282
2346
  }
2283
2347
 
2284
2348
  /**
2285
- * Navigazione dei percorsi puntati — FRONTEND.md §4.4, §4.7, §4.7.1, §5.2, §5.7.
2349
+ * Navigazione dei percorsi puntati — FRONTEND.md §4.4, §4.7, §4.7.1, §5.2, §5.8.
2286
2350
  *
2287
2351
  * La specifica e' cambiata su questo punto: i percorsi con il punto **si verificano**. Un percorso
2288
2352
  * di relazione (`Cliente.Citta`) si naviga un segmento alla volta e l'ultimo si verifica come un
@@ -2305,7 +2369,7 @@ declare class FlowCatalogStore {
2305
2369
  * - **scrivibile** non vuol dire la stessa cosa nei due mondi: un membro porta il proprio
2306
2370
  * `isWritable`, un campo no — fuori da un Create o da un Update il contesto non c'e', quindi
2307
2371
  * basta che sia `isCreateable` **oppure** `isUpdateable`, e un campo che non e' ne' l'uno ne'
2308
- * l'altro e' `TARGET_NOT_WRITABLE` in qualunque contesto (§5.7).
2372
+ * l'altro e' `TARGET_NOT_WRITABLE` in qualunque contesto (§5.8).
2309
2373
  */
2310
2374
 
2311
2375
  /** Una tappa navigabile: un'entita' dello schema, oppure una classe (§4.7). */
@@ -2534,12 +2598,15 @@ declare class FlowDocumentStore {
2534
2598
  readonly nodeByName: _angular_core.Signal<Map<string, FlowNodeRef>>;
2535
2599
  readonly resources: _angular_core.Signal<FlowResourceRef[]>;
2536
2600
  /**
2537
- * §3.3 — l'insieme dei nomi già usati: node, risorse, step di orchestrazione **e campi di
2538
- * screen dinamico**, un unico spazio di nomi. Il controllo di unicita' che guarda solo le
2539
- * variabili lascia passare una variabile omonima di un node (§13.5); quello che dimentica gli
2540
- * step lascia passare uno step omonimo di una variabile (§5.13); quello che dimentica i campi
2541
- * lascia passare un campo omonimo di una variabile, che e' `NAME_DUPLICATED` come gli altri
2542
- * e il danno e' peggiore, perche' un campo **e' un riferimento** (§5.2).
2601
+ * §3.3 — l'insieme dei nomi già usati, che e' **uno solo**: node, risorse e le **tre** cose che non
2602
+ * sono ne' l'uno ne' l'altro ma il cui nome e' la radice di un riferimento step di orchestrazione,
2603
+ * campi di screen dinamico e screen action.
2604
+ *
2605
+ * Il controllo di unicita' che guarda solo le variabili lascia passare una variabile omonima di un
2606
+ * node (§13.5); quello che dimentica gli step lascia passare uno step omonimo di una variabile;
2607
+ * quello che dimentica i campi o le action lascia passare un omonimo che e' `NAME_DUPLICATED` come
2608
+ * gli altri — e lì il danno e' peggiore, perche' quel nome **e' un riferimento**: un campo si legge
2609
+ * per nome, e il nome di un'action e' la radice dei suoi output automatici (`Cerca.nome`, §5.2).
2543
2610
  */
2544
2611
  readonly usedNames: _angular_core.Signal<string[]>;
2545
2612
  /** Gli archi derivati dal documento, Start incluso. */
@@ -2854,6 +2921,27 @@ declare class FlowEditorSession {
2854
2921
  private static readonly warned;
2855
2922
  private static warnOnce;
2856
2923
  private applySaveResult;
2924
+ /**
2925
+ * Duplica: scrive il flow **sotto un altro nome** e sposta la sessione sulla copia
2926
+ * (§6.2, «Duplica»).
2927
+ *
2928
+ * Due strade, e la differenza non e' un dettaglio di implementazione: `cloneFlow` copia cio'
2929
+ * che il backend ha **salvato**, quindi su un documento con modifiche in corso la copia
2930
+ * nascerebbe senza quelle modifiche — senza nessun errore, e chi duplica per mettere al
2931
+ * sicuro cio' che ha appena scritto si ritroverebbe la versione vecchia. Per questo la
2932
+ * primitiva si usa solo su un documento pulito; altrimenti la copia si crea con `createFlow`
2933
+ * mandando il documento in mano. La stessa strada e' il ripiego quando `cloneFlow` non c'e':
2934
+ * e' opzionale, e `createFlow` no (§10).
2935
+ *
2936
+ * La sessione si sposta sulla copia perche' e' cio' che «salva con nome» significa: restare
2937
+ * sull'originale farebbe finire il salvataggio successivo nel flow sbagliato. Chi monta il
2938
+ * builder lo scopre dall'output `saved`, il cui `flowName` e' quello nuovo.
2939
+ */
2940
+ saveAs(targetFlowName: string, options?: {
2941
+ label?: string;
2942
+ }): Promise<FlowSaveResult>;
2943
+ /** La copia creata dal documento in lavorazione, modifiche non salvate comprese. */
2944
+ private createCopy;
2857
2945
  /** Copia la versione corrente in una nuova bozza (§8.1): il comando delle versioni chiuse. */
2858
2946
  createNewVersion(): Promise<FlowSaveResult>;
2859
2947
  /**
@@ -3014,7 +3102,7 @@ declare class FlowCanvasComponent {
3014
3102
  /** Rilascio di un elemento dalla palette: tipo + punto nel sistema del canvas. */
3015
3103
  readonly elementDropped: _angular_core.OutputEmitterRef<{
3016
3104
  type: FlowElementType;
3017
- /** La variante scelta sulla palette, dove il tipo ne ha (§5.5). */
3105
+ /** La variante scelta sulla palette, dove il tipo ne ha (§5.6). */
3018
3106
  variant?: string;
3019
3107
  x: number;
3020
3108
  y: number;
@@ -3125,7 +3213,7 @@ declare class FlowCanvasComponent {
3125
3213
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlowCanvasComponent, "fb-flow-canvas", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; "outline": { "alias": "outline"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "nodeOpened": "nodeOpened"; "nodeRemoveRequested": "nodeRemoveRequested"; "nodeDuplicateRequested": "nodeDuplicateRequested"; "elementDropped": "elementDropped"; }, never, never, true, never>;
3126
3214
  }
3127
3215
 
3128
- /** Il gesto scelto sulla palette: un tipo e, dove esiste, la sua variante (§5.5). */
3216
+ /** Il gesto scelto sulla palette: un tipo e, dove esiste, la sua variante (§5.6). */
3129
3217
  interface FlowPalettePick {
3130
3218
  type: FlowElementType;
3131
3219
  variant?: string;
@@ -3179,7 +3267,7 @@ declare class ElementPaletteComponent {
3179
3267
  /**
3180
3268
  * L'etichetta del ramo di fault, presa dalla mappa delle uscite invece di scrivere «ramo di
3181
3269
  * errore» per tutti: su uno stage di orchestrazione quel ramo **non** e' un guasto, e' lo step
3182
- * rifiutato (§5.13). Un tipo nuovo eredita l'etichetta giusta senza toccare la palette.
3270
+ * rifiutato (§5.14). Un tipo nuovo eredita l'etichetta giusta senza toccare la palette.
3183
3271
  */
3184
3272
  faultLabel(item: PaletteItem): string | null;
3185
3273
  categoryClass(category: string): string;
@@ -3210,6 +3298,18 @@ declare class ReferencePickerComponent {
3210
3298
  * `WasVisited` e `HasError` (§4.3).
3211
3299
  */
3212
3300
  readonly elementsOnly: _angular_core.InputSignal<boolean>;
3301
+ /**
3302
+ * Destinazioni in piu' rispetto a cio' che la primitiva restituisce, e oggi ce n'e' **un solo**
3303
+ * chiamante: l'`assignToReference` di una **screen action**, che accetta i campi della schermata
3304
+ * che si sta modificando (§5.2). Altrove quei campi sono di sola lettura, e
3305
+ * `POST /flows/references/writable` continua a escluderli — giustamente: un Assignment che ci
3306
+ * scrive resta `TARGET_NOT_WRITABLE`. Non e' quindi una scorciatoia per aggiungere riferimenti che
3307
+ * il backend non conosce: e' l'unico punto in cui la regola del contratto e' diversa.
3308
+ *
3309
+ * Entrano **sia** fra le proposte **sia** fra le radici: senza le radici un nome scritto a mano
3310
+ * verrebbe accusato di non esistere.
3311
+ */
3312
+ readonly extraReferences: _angular_core.InputSignal<FlowReference[]>;
3213
3313
  readonly valueChange: _angular_core.OutputEmitterRef<string | undefined>;
3214
3314
  /**
3215
3315
  * L'elenco come arriva dalla primitiva, **senza** il filtro di tipo.
@@ -3274,10 +3374,10 @@ declare class ReferencePickerComponent {
3274
3374
  /**
3275
3375
  * I segmenti come riferimenti navigati: `Richiesta.Cliente.Email`, col tipo del segmento. Un
3276
3376
  * segmento di sola lettura non si propone in un campo di destinazione, a meno che da lì il
3277
- * percorso continui: `Richiesta.Cliente` non si assegna, ma `Richiesta.Cliente.Email` sì (§5.7).
3377
+ * percorso continui: `Richiesta.Cliente` non si assegna, ma `Richiesta.Cliente.Email` sì (§5.8).
3278
3378
  */
3279
3379
  /**
3280
- * §5.2 — dentro una globale dell'host **niente** e' scrivibile, per quanto il membro si dichiari
3380
+ * §5.3 — dentro una globale dell'host **niente** e' scrivibile, per quanto il membro si dichiari
3281
3381
  * tale: le globali le risolve un componente che non ha modo di scriverle, e proporle come
3282
3382
  * destinazione farebbe attivare un flow che poi fallisce davanti all'utente. L'eccezione sono i
3283
3383
  * campi del record che innesca, che si assegnano (§4.1).
@@ -3332,7 +3432,7 @@ declare class ReferencePickerComponent {
3332
3432
  * percorso inesistente di uno scope che i percorsi li dichiara, perche' lì il backend
3333
3433
  * risponderebbe `GLOBAL_UNKNOWN`.
3334
3434
  */
3335
- readonly valueState: _angular_core.Signal<"member" | "empty" | "unknown" | "known" | "navigated" | "host" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid">;
3435
+ readonly valueState: _angular_core.Signal<"empty" | "unknown" | "member" | "known" | "navigated" | "host" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid">;
3336
3436
  /** Le parole cambiano con la tappa: un campo di un'entita' non e' un membro di una classe. */
3337
3437
  private readonly tailIsObject;
3338
3438
  private readonly tailContainer;
@@ -3370,7 +3470,7 @@ declare class ReferencePickerComponent {
3370
3470
  clear(): void;
3371
3471
  describe(reference: FlowReference): string;
3372
3472
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ReferencePickerComponent, never>;
3373
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ReferencePickerComponent, "fb-reference-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dataType": { "alias": "dataType"; "required": false; "isSignal": true; }; "isCollection": { "alias": "isCollection"; "required": false; "isSignal": true; }; "objectType": { "alias": "objectType"; "required": false; "isSignal": true; }; "writableOnly": { "alias": "writableOnly"; "required": false; "isSignal": true; }; "elementsOnly": { "alias": "elementsOnly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
3473
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ReferencePickerComponent, "fb-reference-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dataType": { "alias": "dataType"; "required": false; "isSignal": true; }; "isCollection": { "alias": "isCollection"; "required": false; "isSignal": true; }; "objectType": { "alias": "objectType"; "required": false; "isSignal": true; }; "writableOnly": { "alias": "writableOnly"; "required": false; "isSignal": true; }; "elementsOnly": { "alias": "elementsOnly"; "required": false; "isSignal": true; }; "extraReferences": { "alias": "extraReferences"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
3374
3474
  }
3375
3475
 
3376
3476
  declare class ObjectPickerComponent {
@@ -3607,7 +3707,7 @@ declare class StructureMemberPickerComponent {
3607
3707
  /**
3608
3708
  * Un segmento che esiste ma non e' scrivibile, scelto dove serve una destinazione: capita su un
3609
3709
  * documento scritto altrove, e va detto qui invece di lasciarlo scoprire dall'attivazione. Su un
3610
- * campo di record "scrivibile" vuol dire `createable` **oppure** `updateable` (§5.7).
3710
+ * campo di record "scrivibile" vuol dire `createable` **oppure** `updateable` (§5.8).
3611
3711
  */
3612
3712
  readonly isNotWritable: _angular_core.Signal<boolean>;
3613
3713
  readonly notWritableMessage: _angular_core.Signal<"Questo campo non si scrive ne’ creando ne’ aggiornando un record: assegnarlo e’ TARGET_NOT_WRITABLE." | "Questo membro e’ calcolato: si legge, ma assegnarlo e’ TARGET_NOT_WRITABLE.">;
@@ -3848,7 +3948,7 @@ declare class ConditionEditorComponent {
3848
3948
  readonly allowFormula: _angular_core.InputSignal<boolean>;
3849
3949
  /**
3850
3950
  * `false` dove il modello porta **solo** la lista di condizioni, senza un campo per la
3851
- * logica: gli `entryConditions` / `exitConditions` di uno step di orchestrazione (§5.13).
3951
+ * logica: gli `entryConditions` / `exitConditions` di uno step di orchestrazione (§5.14).
3852
3952
  * Mostrare i pulsanti della logica lì scriverebbe un campo che il contratto non prevede.
3853
3953
  */
3854
3954
  readonly allowLogic: _angular_core.InputSignal<boolean>;
@@ -3889,7 +3989,7 @@ declare class ConditionEditorComponent {
3889
3989
  */
3890
3990
  hasTypeMismatch(condition: FlowCondition): boolean;
3891
3991
  typeMismatchMessage(condition: FlowCondition): string;
3892
- readonly logicMode: _angular_core.Signal<"and" | "or" | "formula" | "custom">;
3992
+ readonly logicMode: _angular_core.Signal<"and" | "or" | "custom" | "formula">;
3893
3993
  readonly customLogic: _angular_core.Signal<string>;
3894
3994
  /** Feedback immediato sull'espressione: la verita' resta della validazione backend. */
3895
3995
  readonly customLogicError: _angular_core.Signal<string | null>;
@@ -3954,12 +4054,12 @@ declare class RecordFilterEditorComponent {
3954
4054
  /**
3955
4055
  * Avviso da mostrare quando la lista e' vuota. Un Delete senza filtri e' un **errore**,
3956
4056
  * un Update senza filtri e' solo un avviso — ma aggiorna tutti i record dell'entita'
3957
- * (§5.7, §13.10).
4057
+ * (§5.8, §13.10).
3958
4058
  */
3959
4059
  readonly emptyWarning: _angular_core.InputSignal<string | null>;
3960
4060
  readonly emptyWarningSeverity: _angular_core.InputSignal<"error" | "warn">;
3961
4061
  readonly changed: _angular_core.OutputEmitterRef<(holder: FilterHolder) => void>;
3962
- /** Tutti i campi, filtrabili o no: serve solo a riconoscere le chiavi composte (§5.7). */
4062
+ /** Tutti i campi, filtrabili o no: serve solo a riconoscere le chiavi composte (§5.8). */
3963
4063
  private readonly allFields;
3964
4064
  readonly filters: _angular_core.Signal<FlowRecordFilter[]>;
3965
4065
  readonly operators: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
@@ -3975,12 +4075,12 @@ declare class RecordFilterEditorComponent {
3975
4075
  private readonly types;
3976
4076
  constructor();
3977
4077
  /**
3978
- * §5.7 — l'identificativo esiste ma **non e' filtrabile**: e' il caso di una chiave composta,
4078
+ * §5.8 — l'identificativo esiste ma **non e' filtrabile**: e' il caso di una chiave composta,
3979
4079
  * dove `Id` porta la forma canonica della chiave e le colonne filtrabili sono altre. Dirlo
3980
4080
  * evita la ricerca di un campo che nell'elenco non c'e' e non ci sara'.
3981
4081
  */
3982
4082
  readonly identifierNotFilterable: _angular_core.Signal<boolean>;
3983
- readonly logicMode: _angular_core.Signal<"and" | "or" | "formula" | "custom">;
4083
+ readonly logicMode: _angular_core.Signal<"and" | "or" | "custom" | "formula">;
3984
4084
  readonly customLogic: _angular_core.Signal<string>;
3985
4085
  readonly showEmptyWarning: _angular_core.Signal<boolean>;
3986
4086
  addFilter(): void;
@@ -4023,6 +4123,12 @@ declare class ParameterEditorComponent {
4023
4123
  readonly showOutputs: _angular_core.InputSignal<boolean>;
4024
4124
  /** `true` → gli output vanno all'output automatico, e i parametri sono ignorati. */
4025
4125
  readonly outputsDisabledReason: _angular_core.InputSignal<string | null>;
4126
+ /**
4127
+ * Destinazioni in piu' per `assignToReference`, oltre a quelle scrivibili. Serve alle **screen
4128
+ * action**, dove un output si assegna a un campo della schermata (§5.2): e' l'unico posto in cui
4129
+ * quei campi sono una destinazione, e per questo non e' un default ma un parametro del chiamante.
4130
+ */
4131
+ readonly extraTargets: _angular_core.InputSignal<FlowReference[]>;
4026
4132
  readonly changed: _angular_core.OutputEmitterRef<(holder: ParameterHolder) => void>;
4027
4133
  readonly inputs: _angular_core.Signal<FlowInputParameter[]>;
4028
4134
  readonly outputs: _angular_core.Signal<FlowOutputParameter[]>;
@@ -4051,7 +4157,7 @@ declare class ParameterEditorComponent {
4051
4157
  setOutputName(index: number, name: string): void;
4052
4158
  setOutputTarget(index: number, reference: string | undefined): void;
4053
4159
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ParameterEditorComponent, never>;
4054
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ParameterEditorComponent, "fb-parameter-editor", never, { "holder": { "alias": "holder"; "required": true; "isSignal": true; }; "catalogParameters": { "alias": "catalogParameters"; "required": false; "isSignal": true; }; "inputTitle": { "alias": "inputTitle"; "required": false; "isSignal": true; }; "outputTitle": { "alias": "outputTitle"; "required": false; "isSignal": true; }; "showInputs": { "alias": "showInputs"; "required": false; "isSignal": true; }; "showOutputs": { "alias": "showOutputs"; "required": false; "isSignal": true; }; "outputsDisabledReason": { "alias": "outputsDisabledReason"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, never, never, true, never>;
4160
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ParameterEditorComponent, "fb-parameter-editor", never, { "holder": { "alias": "holder"; "required": true; "isSignal": true; }; "catalogParameters": { "alias": "catalogParameters"; "required": false; "isSignal": true; }; "inputTitle": { "alias": "inputTitle"; "required": false; "isSignal": true; }; "outputTitle": { "alias": "outputTitle"; "required": false; "isSignal": true; }; "showInputs": { "alias": "showInputs"; "required": false; "isSignal": true; }; "showOutputs": { "alias": "showOutputs"; "required": false; "isSignal": true; }; "outputsDisabledReason": { "alias": "outputsDisabledReason"; "required": false; "isSignal": true; }; "extraTargets": { "alias": "extraTargets"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, never, never, true, never>;
4055
4161
  }
4056
4162
 
4057
4163
  interface FieldAssignmentHolder {
@@ -4061,7 +4167,7 @@ declare class FieldAssignmentEditorComponent {
4061
4167
  private readonly catalog;
4062
4168
  readonly holder: _angular_core.InputSignal<FieldAssignmentHolder>;
4063
4169
  readonly object: _angular_core.InputSignal<string | undefined>;
4064
- /** `createable` su un Create, `updateable` su un Update: lo decide il chiamante (§5.7). */
4170
+ /** `createable` su un Create, `updateable` su un Update: lo decide il chiamante (§5.8). */
4065
4171
  readonly usage: _angular_core.InputSignal<FlowFieldUsage>;
4066
4172
  readonly title: _angular_core.InputSignal<string>;
4067
4173
  readonly disabledReason: _angular_core.InputSignal<string | null>;
@@ -4161,6 +4267,13 @@ declare class ElementInspectorComponent {
4161
4267
  readonly closed: _angular_core.OutputEmitterRef<void>;
4162
4268
  readonly removeRequested: _angular_core.OutputEmitterRef<string>;
4163
4269
  readonly duplicateRequested: _angular_core.OutputEmitterRef<string>;
4270
+ /**
4271
+ * Il nuovo nome, dopo la rinomina. La selezione dell'editor e' **il nome**: se non la
4272
+ * riportiamo sul nome nuovo, `selectedName` punta a un elemento che non esiste piu' e il
4273
+ * form del tipo — che sta dietro `@if (node())` — spariva, lasciando la dialog mezza vuota
4274
+ * finche' non la si chiudeva e riapriva.
4275
+ */
4276
+ readonly renamed: _angular_core.OutputEmitterRef<string>;
4164
4277
  readonly isStart: _angular_core.Signal<boolean>;
4165
4278
  readonly reference: _angular_core.Signal<_esfaenza_flow_builder.FlowNodeRef | undefined>;
4166
4279
  readonly node: _angular_core.Signal<FlowAnyNode | undefined>;
@@ -4196,7 +4309,7 @@ declare class ElementInspectorComponent {
4196
4309
  y: number;
4197
4310
  }>;
4198
4311
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementInspectorComponent, never>;
4199
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementInspectorComponent, "fb-element-inspector", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "removeRequested": "removeRequested"; "duplicateRequested": "duplicateRequested"; }, never, never, true, never>;
4312
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementInspectorComponent, "fb-element-inspector", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "removeRequested": "removeRequested"; "duplicateRequested": "duplicateRequested"; "renamed": "renamed"; }, never, never, true, never>;
4200
4313
  }
4201
4314
 
4202
4315
  declare class ElementDialogComponent {
@@ -4207,6 +4320,8 @@ declare class ElementDialogComponent {
4207
4320
  readonly closed: _angular_core.OutputEmitterRef<void>;
4208
4321
  readonly removeRequested: _angular_core.OutputEmitterRef<string>;
4209
4322
  readonly duplicateRequested: _angular_core.OutputEmitterRef<string>;
4323
+ /** Il nuovo nome dopo una rinomina: la selezione dell'editor deve seguirlo. */
4324
+ readonly renamed: _angular_core.OutputEmitterRef<string>;
4210
4325
  private readonly panel;
4211
4326
  readonly isStart: _angular_core.Signal<boolean>;
4212
4327
  private readonly reference;
@@ -4216,8 +4331,9 @@ declare class ElementDialogComponent {
4216
4331
  close(): void;
4217
4332
  onRemoveRequested(name: string): void;
4218
4333
  onDuplicateRequested(name: string): void;
4334
+ onRenamed(name: string): void;
4219
4335
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementDialogComponent, never>;
4220
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementDialogComponent, "fb-element-dialog", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "removeRequested": "removeRequested"; "duplicateRequested": "duplicateRequested"; }, never, never, true, never>;
4336
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementDialogComponent, "fb-element-dialog", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "removeRequested": "removeRequested"; "duplicateRequested": "duplicateRequested"; "renamed": "renamed"; }, never, never, true, never>;
4221
4337
  }
4222
4338
 
4223
4339
  declare class StartInspectorComponent {
@@ -4280,7 +4396,7 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
4280
4396
  readonly conditionOutputName = "isOrchestrationConditionMet";
4281
4397
  /**
4282
4398
  * I flow proponibili come step in background o come evaluation flow. Una lista vuota
4283
- * significa "non lo so": in quel caso il campo resta scrivibile a mano (§5.9, §7).
4399
+ * significa "non lo so": in quel caso il campo resta scrivibile a mano (§5.10, §7).
4284
4400
  */
4285
4401
  private readonly flowCandidates;
4286
4402
  constructor();
@@ -4306,14 +4422,14 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
4306
4422
  stepNameError(step: FlowStageStep): string | null;
4307
4423
  /**
4308
4424
  * Il nome dello step il cui output una condizione sta leggendo: e' irrisolvibile finche'
4309
- * quello step non ha girato (§5.13, punto 4). `undefined` quando va tutto bene.
4425
+ * quello step non ha girato (§5.14, punto 4). `undefined` quando va tutto bene.
4310
4426
  */
4311
4427
  stepOutputInConditions(step: FlowStageStep): string | undefined;
4312
4428
  /** Lo step tiene un output senza destinazione: e' lecito, ma vale la pena dirlo. */
4313
4429
  hasSimulatedOutputs(step: FlowStageStep): boolean;
4314
4430
  addStep(): void;
4315
4431
  removeStep(index: number): void;
4316
- /** Sposta lo step nell'ordine d'**esame**: non e' un ordine di esecuzione (§5.13). */
4432
+ /** Sposta lo step nell'ordine d'**esame**: non e' un ordine di esecuzione (§5.14). */
4317
4433
  moveStep(index: number, direction: -1 | 1): void;
4318
4434
  private patchStep;
4319
4435
  setStepLabel(index: number, label: string): void;
@@ -4346,7 +4462,7 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
4346
4462
  setEntryActionName(index: number, actionName: string): void;
4347
4463
  setExitActionName(index: number, actionName: string): void;
4348
4464
  onParametersChanged(index: number, mutate: (holder: ParameterHolder) => void): void;
4349
- /** Il ramo del rifiuto e' disegnato: senza, un rifiuto fa fallire l'interview (§5.13). */
4465
+ /** Il ramo del rifiuto e' disegnato: senza, un rifiuto fa fallire l'interview (§5.14). */
4350
4466
  readonly hasRejectionBranch: _angular_core.Signal<boolean>;
4351
4467
  /** C'e' almeno uno step il cui rifiuto e' un esito previsto. */
4352
4468
  readonly hasApprovalStep: _angular_core.Signal<boolean>;
@@ -4412,6 +4528,10 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
4412
4528
  /** I tipi di enumerazione: dizionario chiuso, quindi `<select>` e non combo (§4.6). */
4413
4529
  private readonly enumTypes;
4414
4530
  constructor();
4531
+ /** Scarta la risposta di un tipo che non e' piu' quello scelto: la corsa e' fra risposte, non fra tipi. */
4532
+ private applyActions;
4533
+ /** Stessa regola per i parametri, che dipendono da tipo **e** nome dell'action. */
4534
+ private applyActionParameters;
4415
4535
  readonly componentOptions: _angular_core.Signal<NamePickerOption[]>;
4416
4536
  /**
4417
4537
  * Le schermate che **non** sono anche componenti: una voce senza `formKind` vale `Any` e
@@ -4629,6 +4749,88 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
4629
4749
  /** `ObjectProvided`: oggetto e campo si scrivono in un unico `<Oggetto>.<Campo>` (§5.2). */
4630
4750
  setProvidedObject(value: string | undefined): void;
4631
4751
  setProvidedField(value: string | undefined): void;
4752
+ readonly screenActions: _angular_core.Signal<FlowScreenAction[]>;
4753
+ readonly screenTriggers: _angular_core.Signal<FlowScreenTrigger[]>;
4754
+ /** Quale action e' aperta nel dettaglio; `null` = solo l'elenco. */
4755
+ private readonly actionSelection;
4756
+ readonly selectedActionIndex: _angular_core.Signal<number | null>;
4757
+ readonly selectedAction: _angular_core.Signal<FlowScreenAction | undefined>;
4758
+ private readonly actionTypes;
4759
+ private readonly actionsOfType;
4760
+ private readonly actionParameters;
4761
+ readonly actionTypeOptions: _angular_core.Signal<NamePickerOption[]>;
4762
+ readonly actionOptions: _angular_core.Signal<NamePickerOption[]>;
4763
+ readonly actionParameterCatalog: _angular_core.Signal<FlowCatalogParameter[]>;
4764
+ selectAction(index: number | null): void;
4765
+ /**
4766
+ * Le destinazioni **in piu'** per gli output di una screen action: i campi di **questa**
4767
+ * schermata. È l'unico posto in cui un campo di screen e' scrivibile (§5.2) —
4768
+ * `POST /flows/references/writable` continua a escluderlo, e giustamente: un Assignment che ci
4769
+ * scrive resta `TARGET_NOT_WRITABLE`. Quindi l'allargamento e' qui, non nel picker.
4770
+ */
4771
+ readonly screenFieldTargets: _angular_core.Signal<FlowReference[]>;
4772
+ /** I campi che raccolgono un valore: gli unici che un'action possa riempire, e gli unici che innescano. */
4773
+ private valueFieldsOfScreen;
4774
+ /**
4775
+ * I campi proponibili come innesco. Sono **i campi di questa schermata**, non i riferimenti in
4776
+ * generale: un trigger che nomina altro e' `SCREEN_TRIGGER_FIELD_UNKNOWN` (§5.2).
4777
+ */
4778
+ readonly triggerFieldOptions: _angular_core.Signal<NamePickerOption[]>;
4779
+ /** Le action **di questo screen**: un `screenActionName` fuori da qui e' `SCREEN_ACTION_UNKNOWN`. */
4780
+ readonly screenActionOptions: _angular_core.Signal<NamePickerOption[]>;
4781
+ /**
4782
+ * §5.2 — un'action senza `outputParameters` e senza `storeOutputAutomatically` viene invocata e
4783
+ * il suo risultato si perde: `SCREEN_ACTION_WITHOUT_OUTPUTS`, avviso.
4784
+ */
4785
+ actionLosesResult(action: FlowScreenAction): boolean;
4786
+ /** §5.2 — nessuno la invoca: l'action e' scritta ma nessun trigger la cita. */
4787
+ actionHasNoTrigger(action: FlowScreenAction): boolean;
4788
+ /** §5.2 — senza campo e senza `initBehavior` il trigger non scattera' mai: `SCREEN_TRIGGER_WITHOUT_CAUSE`. */
4789
+ triggerHasNoCause(trigger: FlowScreenTrigger): boolean;
4790
+ /**
4791
+ * §5.2 — l'unico valore ammesso e' `runOnLoad`. Il `runOnRevisit` della specifica Salesforce e'
4792
+ * `SCREEN_TRIGGER_INIT_BEHAVIOR_UNKNOWN`, e vale la pena dirlo qui: chi arriva da quella
4793
+ * specifica lo scrive per abitudine.
4794
+ */
4795
+ triggerInitIsUnknown(trigger: FlowScreenTrigger): boolean;
4796
+ /**
4797
+ * §3.3 — il nome dell'action, con lo **stesso** controllo del nome di uno step: la regexp e le
4798
+ * occorrenze in `usedNames`, che le action le comprende già. Una sola occorrenza e' questa action,
4799
+ * due sono un omonimo — e qui l'omonimia non e' formale, perche' con l'output automatico quel nome
4800
+ * e' la radice di `Cerca.nome`.
4801
+ */
4802
+ actionNameError(action: FlowScreenAction): string | null;
4803
+ /** Il blocco condizioni di un trigger: mai `undefined`, altrimenti l'editor non si apre. */
4804
+ triggerConditions(trigger: FlowScreenTrigger): FlowConditionHolder;
4805
+ /**
4806
+ * Un'action nuova. Il nome sta nello spazio dei nomi **comune** (§3.3): con l'output automatico la
4807
+ * si legge come `<NomeAction>.<NomeOutput>`, e un omonimo di una variabile — o di una `Structure`
4808
+ * chiamata come lei — renderebbe ambiguo quel riferimento. `usedNames` le comprende già, quindi qui
4809
+ * non c'e' niente da aggiungere all'elenco.
4810
+ */
4811
+ addScreenAction(): void;
4812
+ removeScreenAction(index: number): void;
4813
+ private patchAction;
4814
+ /**
4815
+ * Rinominare un'action riscrive i trigger che la citano: sono l'unico posto che la nomina, e
4816
+ * lasciarli indietro trasformerebbe una rinomina in `SCREEN_ACTION_UNKNOWN`.
4817
+ */
4818
+ setActionName(index: number, value: string): void;
4819
+ /** Cambiare tipo cambia l'insieme delle action e dei loro parametri: com'e' su un elemento Action. */
4820
+ setActionType(index: number, value: string): void;
4821
+ setActionTarget(index: number, value: string): void;
4822
+ setActionStoreOutput(index: number, value: boolean): void;
4823
+ onActionParametersChanged(index: number, mutate: (holder: ParameterHolder) => void): void;
4824
+ /** Un trigger nuovo. Se un'action e' aperta, nasce già collegata a quella. */
4825
+ addScreenTrigger(): void;
4826
+ removeScreenTrigger(index: number): void;
4827
+ private patchTrigger;
4828
+ setTriggerProperty(index: number, property: 'screenActionName' | 'triggerFieldName' | 'initBehavior', value: string): void;
4829
+ /**
4830
+ * Le condizioni di un trigger sono una regola come quella di una Decision (§5.2). Assenti,
4831
+ * l'action gira a ogni cambio del campo: un blocco vuoto si omette invece di scriverlo (§2).
4832
+ */
4833
+ onTriggerConditionsChanged(index: number, mutate: (holder: FlowConditionHolder) => void): void;
4632
4834
  setScreenText(property: string, value: string): void;
4633
4835
  /** I flag con default `true` si scrivono solo quando si nega, per non sporcare il diff. */
4634
4836
  setScreenFlag(flag: 'allowBack' | 'allowFinish' | 'allowPause' | 'showHeader' | 'showFooter', value: boolean): void;
@@ -4803,7 +5005,7 @@ declare class DebugPanelComponent {
4803
5005
  readonly status: _angular_core.Signal<string | null>;
4804
5006
  readonly pendingScreen: _angular_core.Signal<_esfaenza_flow_builder.FlowPendingScreen | null>;
4805
5007
  readonly isWaitingForScreen: _angular_core.Signal<boolean>;
4806
- /** §5.13 — l'attesa e' su uno step assegnato a una persona, non su un evento. */
5008
+ /** §5.14 — l'attesa e' su uno step assegnato a una persona, non su un evento. */
4807
5009
  readonly isWaitingForStageStep: _angular_core.Signal<boolean>;
4808
5010
  readonly stageSteps: _angular_core.Signal<FlowStageStepState[]>;
4809
5011
  /** Lo step su cui c'e' un work item aperto: e' quello che si puo' concludere. */
@@ -4875,6 +5077,8 @@ interface Notice {
4875
5077
  declare class FlowBuilderComponent {
4876
5078
  private readonly api;
4877
5079
  private readonly destroyRef;
5080
+ /** Serve a `afterNextRender` chiamato fuori dal costruttore. */
5081
+ private readonly injector;
4878
5082
  protected readonly store: FlowDocumentStore;
4879
5083
  protected readonly dictionaries: FlowDictionaryStore;
4880
5084
  protected readonly session: FlowEditorSession;
@@ -4993,12 +5197,46 @@ declare class FlowBuilderComponent {
4993
5197
  onElementPicked(pick: FlowPalettePick): void;
4994
5198
  private createElement;
4995
5199
  onRemoveNode(name: string): void;
5200
+ /**
5201
+ * La selezione dell'editor e' il **nome** dell'elemento: dopo una rinomina il nome vecchio
5202
+ * non esiste piu' e va sostituito, altrimenti inspector e dialog restano puntati sul vuoto.
5203
+ */
5204
+ onNodeRenamed(newName: string): void;
4996
5205
  onDuplicateNode(name: string): void;
4997
5206
  /** Riordina il grafo e **scrive** le coordinate nel documento (§3.5). */
4998
5207
  autoLayout(): void;
4999
5208
  undo(): void;
5000
5209
  redo(): void;
5001
5210
  save(): Promise<void>;
5211
+ /** Il modulo del duplicato e' aperto. */
5212
+ readonly isCopyOpen: _angular_core.WritableSignal<boolean>;
5213
+ readonly copyName: _angular_core.WritableSignal<string>;
5214
+ readonly copyLabel: _angular_core.WritableSignal<string>;
5215
+ private readonly copyNameInput;
5216
+ /**
5217
+ * Si duplica un flow che esiste: su uno mai salvato il comando e' «Crea», e il nome lo si
5218
+ * scrive nell'intestazione.
5219
+ */
5220
+ readonly canDuplicate: _angular_core.Signal<boolean>;
5221
+ /**
5222
+ * Il nome della copia non e' verificabile lato client — i nomi dei flow stanno nel catalogo
5223
+ * del backend, ed e' lui a rifiutare un doppione con `AlreadyExists` (§6.2). Qui si fermano
5224
+ * le due cose che si sanno senza chiedere: la forma del nome tecnico e l'uguaglianza con
5225
+ * l'originale, che duplicare non e'.
5226
+ */
5227
+ readonly copyNameProblem: _angular_core.Signal<string | null>;
5228
+ /**
5229
+ * Cosa verra' copiato. Con modifiche non salvate la copia le comprende, perche' nasce dal
5230
+ * documento in mano e non dalla versione salvata: dirlo evita la domanda «devo salvare
5231
+ * prima?», che ha risposte opposte nei due casi.
5232
+ */
5233
+ readonly copyHint: _angular_core.Signal<"La copia comprende le modifiche non salvate; l’originale resta come e’ ora." | "La copia nasce come versione 1 di un flow nuovo.">;
5234
+ startCopy(): void;
5235
+ cancelCopy(): void;
5236
+ setCopyName(value: string): void;
5237
+ setCopyLabel(value: string): void;
5238
+ /** Scrive la copia e continua a lavorare su di essa (§6.2). */
5239
+ confirmCopy(): Promise<void>;
5002
5240
  createNewVersion(): Promise<void>;
5003
5241
  activate(): Promise<void>;
5004
5242
  /** §9.3 — prima opzione davanti a un conflitto. */
@@ -5034,5 +5272,5 @@ declare class SelectValueDirective implements AfterViewChecked {
5034
5272
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectValueDirective, "select[fbValue]", never, { "fbValue": { "alias": "fbValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5035
5273
  }
5036
5274
 
5037
- export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, DynamicScreenInspectorComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, EnumValuePickerComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ELEMENT_VARIANT_FIELDS, FLOW_ELEMENT_VARIANT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FLOW_VALUE_FIELDS, FLOW_VALUE_LITERAL_FIELDS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, FormulaEditorComponent, FormulaValidationService, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, SEVERITY_BUCKETS, SEVERITY_ICON, SEVERITY_LABEL, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, StructureMemberPickerComponent, StructurePickerComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, allFieldsOf, areTypesComparable, canvasNodeId, checkConditionLogic, checkFlowName, describePathEntry, duplicateField, elementIcon, emptyFlowDefinition, fieldAt, filterReferences, flattenFields, flowNodeWidth, flowNodeWidthClass, insertField, isCustomConditionLogic, isEmptyReferenceFilter, isFieldResource, isGlobalReference, isNumericType, isPathInside, isTypeCheckedOperator, isValidFlowName, isValued, loadPathLevel, matchesReferenceFilter, moveCondition, moveField, navigatePath, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, pathAvailableNames, pathContainerLabel, pathKey, pathNotVerifiableMessage, referenceRoot, remapConditionLogic, removeCondition, removeField, resolvePath, samePath, screenFieldNames, severityBucket, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, uniqueFlowName, valuedFieldOf, valuedFieldsOf, variantFieldOf, variantOf, variantPresetOf };
5038
- export type { FieldAssignmentHolder, FilterHolder, FlowActionCall, FlowAnyNode, FlowAssignment, FlowAssignmentItem, FlowAssignmentOperator, FlowAssignmentOperatorEntry, FlowBuilderHttpConfig, FlowCanvasEdge, FlowCanvasNode, FlowCatalogEntry, FlowCatalogParameter, FlowChoice, FlowCloneRequest, FlowCollectionProcessor, FlowCollectionProcessorType, FlowComparisonOperator, FlowComparisonOperatorEntry, FlowCondition, FlowConditionHolder, FlowConditionLogic, FlowConflictState, FlowConnectionKind, FlowConnector, FlowConnectorTarget, FlowConstant, FlowCreateRequest, FlowCustomError, FlowCustomErrorMessage, FlowCustomProperty, FlowDataType, FlowDataTypeEntry, FlowDecision, FlowDecisionRule, FlowDefinition, FlowDictionaries, FlowDictionaryEntry, FlowDynamicChoiceSet, FlowDynamicScreen, FlowEdge, FlowElementType, FlowElementTypeEntry, FlowEnumValue, FlowErrorCategory, FlowExportQuery, FlowFieldDescription, FlowFieldUsage, FlowFieldValue, FlowFormKind, FlowFormula, FlowFormulaIssue, FlowFormulaUsage, FlowFormulaValidationRequest, FlowFormulaValidationResult, FlowGlobalVariableEntry, FlowInputFieldAssignment, FlowInputParameter, FlowInterviewResult, FlowInterviewStatus, FlowIssueSeverity, FlowLayoutDirection, FlowLayoutNodeInput, FlowLayoutOptions, FlowLayoutResult, FlowListQuery, FlowLoop, FlowNameCheck, FlowNameProblem, FlowNewVersionRequest, FlowNodeBase, FlowNodeCollection, FlowNodeRef, FlowObjectDescription, FlowObjectSummary, FlowOffsetUnit, FlowOrchestratedStage, FlowOutlet, FlowOutline, FlowOutlineConnection, FlowOutlineNode, FlowOutputFieldAssignment, FlowOutputParameter, FlowPalettePick, FlowPendingScreen, FlowProcessType, FlowRecordCreate, FlowRecordDelete, FlowRecordFilter, FlowRecordFilterOperator, FlowRecordLookup, FlowRecordRollback, FlowRecordTriggerType, FlowRecordUpdate, FlowRecordValue, FlowReference, FlowReferenceFilter, FlowReferenceKind, FlowRegionContainerType, FlowResourceCollection, FlowResourceKindEntry, FlowResourceRef, FlowResumeRequest, FlowSaveRequest, FlowSaveResult, FlowSchedule, FlowScheduledPath, FlowScreen, FlowScreenField, FlowScreenFieldInputsRevisited, FlowScreenFieldNode, FlowScreenFieldPath, FlowScreenFieldType, FlowScreenFieldTypeEntry, FlowScreenNavigation, FlowScreenResponseRequest, FlowScreenValidationRule, FlowScriptPluginCall, FlowSeverityBucket, FlowSortOption, FlowSortOrder, FlowStage, FlowStageStep, FlowStageStepActionType, FlowStageStepAssignee, FlowStageStepConditionActionType, FlowStageStepRequest, FlowStageStepState, FlowStageStepStatus, FlowStageStepTypeEntry, FlowStart, FlowStartInterviewRequest, FlowStructureDescribed, FlowStructureDescription, FlowStructureInstance, FlowStructureMember, FlowSubflow, FlowSubflowInputAssignment, FlowSubflowOutputAssignment, FlowSummary, FlowTextTemplate, FlowTraceEntry, FlowTransactionModel, FlowTransform, FlowTransformType, FlowTransformValue, FlowTransformValueAction, FlowTriggerType, FlowTypedEntry, FlowTypedValue, FlowUnsupportedNode, FlowValidationIssue, FlowValidationResult, FlowValue, FlowVariable, FlowVersionStatus, FlowVersionSummary, FlowWait, FlowWaitEvent, NamePickerOption, PaletteGroup, PaletteItem, ParameterHolder, PathCatalog, PathContainer, PathContainerKind, PathEntry, PathLevel, PathLevelStatus, PathNavigation, PathNavigationRequest, PathResolution, PathStopReason, StructureMemberUsage, ValueMode };
5275
+ export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, DynamicScreenInspectorComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, EnumValuePickerComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ELEMENT_VARIANT_FIELDS, FLOW_ELEMENT_VARIANT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FLOW_VALUE_FIELDS, FLOW_VALUE_LITERAL_FIELDS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, FormulaEditorComponent, FormulaValidationService, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, SEVERITY_BUCKETS, SEVERITY_ICON, SEVERITY_LABEL, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, StructureMemberPickerComponent, StructurePickerComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, allFieldsOf, areTypesComparable, canvasNodeId, checkConditionLogic, checkFlowName, describePathEntry, duplicateField, elementIcon, emptyFlowDefinition, fieldAt, filterReferences, flattenFields, flowNodeWidth, flowNodeWidthClass, insertField, isCustomConditionLogic, isEmptyReferenceFilter, isFieldResource, isGlobalReference, isNumericType, isPathInside, isTypeCheckedOperator, isValidFlowName, isValued, loadPathLevel, matchesReferenceFilter, moveCondition, moveField, navigatePath, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, pathAvailableNames, pathContainerLabel, pathKey, pathNotVerifiableMessage, referenceRoot, remapConditionLogic, removeCondition, removeField, resolvePath, samePath, screenActionNames, screenFieldNames, severityBucket, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, uniqueFlowName, valuedFieldOf, valuedFieldsOf, variantFieldOf, variantOf, variantPresetOf };
5276
+ export type { FieldAssignmentHolder, FilterHolder, FlowActionCall, FlowAnyNode, FlowAssignment, FlowAssignmentItem, FlowAssignmentOperator, FlowAssignmentOperatorEntry, FlowBuilderHttpConfig, FlowCanvasEdge, FlowCanvasNode, FlowCatalogEntry, FlowCatalogParameter, FlowChoice, FlowCloneRequest, FlowCollectionProcessor, FlowCollectionProcessorType, FlowComparisonOperator, FlowComparisonOperatorEntry, FlowCondition, FlowConditionHolder, FlowConditionLogic, FlowConflictState, FlowConnectionKind, FlowConnector, FlowConnectorTarget, FlowConstant, FlowCreateRequest, FlowCustomError, FlowCustomErrorMessage, FlowCustomProperty, FlowDataType, FlowDataTypeEntry, FlowDecision, FlowDecisionRule, FlowDefinition, FlowDictionaries, FlowDictionaryEntry, FlowDynamicChoiceSet, FlowDynamicScreen, FlowEdge, FlowElementType, FlowElementTypeEntry, FlowEnumValue, FlowErrorCategory, FlowExportQuery, FlowFieldDescription, FlowFieldUsage, FlowFieldValue, FlowFormKind, FlowFormula, FlowFormulaIssue, FlowFormulaUsage, FlowFormulaValidationRequest, FlowFormulaValidationResult, FlowGlobalVariableEntry, FlowInputFieldAssignment, FlowInputParameter, FlowInterviewResult, FlowInterviewStatus, FlowIssueSeverity, FlowLayoutDirection, FlowLayoutNodeInput, FlowLayoutOptions, FlowLayoutResult, FlowListQuery, FlowLoop, FlowNameCheck, FlowNameProblem, FlowNewVersionRequest, FlowNodeBase, FlowNodeCollection, FlowNodeRef, FlowObjectDescription, FlowObjectSummary, FlowOffsetUnit, FlowOrchestratedStage, FlowOutlet, FlowOutline, FlowOutlineConnection, FlowOutlineNode, FlowOutputFieldAssignment, FlowOutputParameter, FlowPalettePick, FlowPendingScreen, FlowProcessType, FlowRecordCreate, FlowRecordDelete, FlowRecordFilter, FlowRecordFilterOperator, FlowRecordLookup, FlowRecordRollback, FlowRecordTriggerType, FlowRecordUpdate, FlowRecordValue, FlowReference, FlowReferenceFilter, FlowReferenceKind, FlowRegionContainerType, FlowResourceCollection, FlowResourceKindEntry, FlowResourceRef, FlowResumeRequest, FlowSaveRequest, FlowSaveResult, FlowSchedule, FlowScheduledPath, FlowScreen, FlowScreenAction, FlowScreenField, FlowScreenFieldInputsRevisited, FlowScreenFieldNode, FlowScreenFieldPath, FlowScreenFieldType, FlowScreenFieldTypeEntry, FlowScreenNavigation, FlowScreenResponseRequest, FlowScreenTrigger, FlowScreenTriggerInitBehavior, FlowScreenValidationRule, FlowScriptPluginCall, FlowSeverityBucket, FlowSortOption, FlowSortOrder, FlowStage, FlowStageStep, FlowStageStepActionType, FlowStageStepAssignee, FlowStageStepConditionActionType, FlowStageStepRequest, FlowStageStepState, FlowStageStepStatus, FlowStageStepTypeEntry, FlowStart, FlowStartInterviewRequest, FlowStructureDescribed, FlowStructureDescription, FlowStructureInstance, FlowStructureMember, FlowSubflow, FlowSubflowInputAssignment, FlowSubflowOutputAssignment, FlowSummary, FlowTextTemplate, FlowTraceEntry, FlowTransactionModel, FlowTransform, FlowTransformType, FlowTransformValue, FlowTransformValueAction, FlowTriggerType, FlowTypedEntry, FlowTypedValue, FlowUnsupportedNode, FlowValidationIssue, FlowValidationResult, FlowValue, FlowVariable, FlowVersionStatus, FlowVersionSummary, FlowWait, FlowWaitEvent, NamePickerOption, PaletteGroup, PaletteItem, ParameterHolder, PathCatalog, PathContainer, PathContainerKind, PathEntry, PathLevel, PathLevelStatus, PathNavigation, PathNavigationRequest, PathResolution, PathStopReason, StructureMemberUsage, ValueMode };