@esfaenza/flow-builder 20.3.16 → 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
  */
@@ -880,15 +932,31 @@ interface FlowStructureDescription {
880
932
  */
881
933
  members?: FlowStructureMember[];
882
934
  }
935
+ /**
936
+ * In quale dei due ruoli un artefatto del frontend e' utilizzabile (§5.1, §5.2, §6.4).
937
+ *
938
+ * `Form` e' una **schermata intera** (`formName` di uno Screen), `Component` un **componente**
939
+ * montabile dentro uno screen dinamico (`extensionName` di un `ComponentInstance`). `Any` — che
940
+ * e' anche cio' che significa il campo assente — dice «va bene in entrambi i posti»: un catalogo
941
+ * che il ruolo non lo dichiara non deve diventare un catalogo che vieta tutto.
942
+ */
943
+ type FlowFormKind = 'Form' | 'Component' | 'Any' | string;
883
944
  /** Voce di catalogo per action, script, form, eventi, tipi di enum, classi. */
884
945
  interface FlowCatalogEntry {
885
946
  name: string;
886
947
  label?: string | null;
887
948
  description?: string | null;
949
+ /**
950
+ * Solo per il catalogo dei form. Assente = `Any`: proponibile sia come schermata sia come
951
+ * componente. Una voce usata nel ruolo sbagliato e' `FORM_KIND_MISMATCH`, che e' un errore
952
+ * **diverso** da «il nome non esiste» — il nome esiste, e dirlo sconosciuto manderebbe a
953
+ * cercare un artefatto che c'e' (§5.1, §7).
954
+ */
955
+ formKind?: FlowFormKind | null;
888
956
  }
889
957
  /**
890
958
  * Parametro dichiarato da un'action, uno script o un form.
891
- * 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).
892
960
  */
893
961
  interface FlowCatalogParameter {
894
962
  name: string;
@@ -1147,11 +1215,11 @@ interface FlowPendingScreen {
1147
1215
  canPause?: boolean;
1148
1216
  }
1149
1217
  /**
1150
- * §5.13 — lo stato che un assegnatario comunica concludendo uno step.
1218
+ * §5.14 — lo stato che un assegnatario comunica concludendo uno step.
1151
1219
  * `Pending` non e' accettato in scrittura: e' `INVALID_REQUEST`.
1152
1220
  */
1153
1221
  type FlowStageStepStatus = 'Completed' | 'Rejected' | 'Cancelled' | 'Pending' | string;
1154
- /** 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). */
1155
1223
  interface FlowStageStepState {
1156
1224
  stepName?: string;
1157
1225
  label?: string | null;
@@ -1191,7 +1259,7 @@ interface FlowInterviewResult {
1191
1259
  */
1192
1260
  isWaitingForEvent?: boolean;
1193
1261
  isWaitingForStageStep?: boolean;
1194
- /** 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). */
1195
1263
  stageSteps?: FlowStageStepState[];
1196
1264
  isSuccess?: boolean;
1197
1265
  }
@@ -1213,7 +1281,7 @@ interface FlowResumeRequest {
1213
1281
  debug?: boolean;
1214
1282
  }
1215
1283
  /**
1216
- * §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.
1217
1285
  * Se lo stage si sospende di nuovo, la risposta porta una `interviewKey` **nuova** e la
1218
1286
  * vecchia non e' piu' valida.
1219
1287
  */
@@ -1391,7 +1459,7 @@ declare abstract class FlowBuilderApi {
1391
1459
  * `POST /flows/references/writable` — le variabili **piu' le globali assegnabili**, per i
1392
1460
  * campi di destinazione. Le globali assegnabili sono **due**, `$Flow.CurrentStage` e
1393
1461
  * `$Flow.ActiveStages`: quelle dell'host sono sempre di sola lettura e il catalogo non ha un
1394
- * 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
1395
1463
  * aggiunge. Restano fuori i campi di `$Record`, che dipendono dallo schema: quelli arrivano da
1396
1464
  * `listFields(object, 'updateable')` (§6.4).
1397
1465
  *
@@ -1424,8 +1492,18 @@ declare abstract class FlowBuilderApi {
1424
1492
  abstract listScripts(): Promise<FlowCatalogEntry[]>;
1425
1493
  /** `GET /catalog/scripts/{name}/parameters` */
1426
1494
  abstract listScriptParameters(scriptName: string): Promise<FlowCatalogParameter[]>;
1427
- /** `GET /catalog/forms` — i form realizzati a mano nel frontend applicativo (§5.1). */
1428
- abstract listForms(): Promise<FlowCatalogEntry[]>;
1495
+ /**
1496
+ * `GET /catalog/forms?kind=` — gli artefatti realizzati a mano nel frontend applicativo (§5.1,
1497
+ * §5.2). Un solo catalogo per due ruoli: le **schermate intere** che uno Screen mostra
1498
+ * (`formName`) e i **componenti** che uno screen dinamico monta (`extensionName`) sono la
1499
+ * stessa domanda al frontend — cosa sa rendere, e con quali parametri.
1500
+ *
1501
+ * `kind` filtra: `Form`, `Component`, o assente per tutto. Chiederlo non e' un dettaglio —
1502
+ * proporre una schermata intera dove va un componente porta a `FORM_KIND_MISMATCH`, che e' un
1503
+ * errore e blocca l'attivazione. Una voce senza `formKind` vale `Any` e resta proponibile in
1504
+ * entrambi i posti: un catalogo che il ruolo non lo dichiara non deve vietare tutto (§6.4).
1505
+ */
1506
+ abstract listForms(kind?: FlowFormKind): Promise<FlowCatalogEntry[]>;
1429
1507
  /** `GET /catalog/forms/{name}/parameters` */
1430
1508
  abstract listFormParameters(formName: string): Promise<FlowCatalogParameter[]>;
1431
1509
  /** `GET /catalog/enum-types` — per `objectType` delle risorse `Enum`. */
@@ -1483,7 +1561,7 @@ declare abstract class FlowBuilderApi {
1483
1561
  abstract listEvents(): Promise<FlowCatalogEntry[]>;
1484
1562
  /**
1485
1563
  * `GET /flows/subflow-candidates?excluding=` — solo i flow con una versione attiva,
1486
- * escluso quello corrente (§5.9).
1564
+ * escluso quello corrente (§5.10).
1487
1565
  */
1488
1566
  abstract listSubflowCandidates(excluding?: string): Promise<FlowSummary[]>;
1489
1567
  /**
@@ -1497,14 +1575,14 @@ declare abstract class FlowBuilderApi {
1497
1575
  /** `POST /interviews/resume` — riprende un'esecuzione in pausa. */
1498
1576
  resumeInterview(request: FlowResumeRequest): Promise<FlowInterviewResult>;
1499
1577
  /**
1500
- * `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).
1501
1579
  * Se lo stage si sospende di nuovo, la risposta porta una `interviewKey` **nuova**: la
1502
1580
  * vecchia non e' piu' valida e va sostituita, non conservata.
1503
1581
  */
1504
1582
  completeStageStep(request: FlowStageStepRequest): Promise<FlowInterviewResult>;
1505
1583
  /**
1506
1584
  * `GET /interviews/{key}` — ispeziona una sospesa senza consumarla.
1507
- * Con `isWaitingForStageStep` porta `stageSteps` con lo stato di ognuno (§5.13).
1585
+ * Con `isWaitingForStageStep` porta `stageSteps` con lo stato di ognuno (§5.14).
1508
1586
  */
1509
1587
  inspectInterview(interviewKey: string): Promise<FlowInterviewResult>;
1510
1588
  /** `DELETE /interviews/{key}` — abbandona. */
@@ -1589,7 +1667,7 @@ declare class HttpFlowBuilderApi extends FlowBuilderApi {
1589
1667
  listActionParameters(actionType: string, actionName: string): Promise<FlowCatalogParameter[]>;
1590
1668
  listScripts(): Promise<FlowCatalogEntry[]>;
1591
1669
  listScriptParameters(scriptName: string): Promise<FlowCatalogParameter[]>;
1592
- listForms(): Promise<FlowCatalogEntry[]>;
1670
+ listForms(kind?: FlowFormKind): Promise<FlowCatalogEntry[]>;
1593
1671
  listFormParameters(formName: string): Promise<FlowCatalogParameter[]>;
1594
1672
  listEnumTypes(): Promise<FlowCatalogEntry[]>;
1595
1673
  /** §4.6 — i valori di un tipo: `enumType` e' l'`objectType`, e va nel path come segmento. */
@@ -1658,7 +1736,7 @@ interface FlowOutlet {
1658
1736
  *
1659
1737
  * Vale sui soli elementi che possono fallire (Record*, ActionCall, ScriptCall, Wait):
1660
1738
  * il `faultConnector` di un `OrchestratedStage` porta `kind: 'Fault'` ma e' il ramo
1661
- * 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.
1662
1740
  */
1663
1741
  isFaultRecovery?: boolean;
1664
1742
  read(node: FlowAnyNode): FlowConnector | undefined;
@@ -1695,7 +1773,7 @@ declare const TYPES_WITH_AUTOMATIC_OUTPUT: ReadonlySet<string>;
1695
1773
  */
1696
1774
  declare const FLOW_ELEMENT_ICONS: Record<string, string>;
1697
1775
  /**
1698
- * 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
1699
1777
  * si distinguerebbero solo dall'etichetta, e sulla palette il simbolo e' la prima cosa che si
1700
1778
  * guarda. La chiave e' `tipo:variante`.
1701
1779
  */
@@ -1708,7 +1786,7 @@ declare const FLOW_ELEMENT_VARIANT_ICONS: Record<string, string>;
1708
1786
  declare function elementIcon(type: string, label?: string, variant?: string): string;
1709
1787
 
1710
1788
  /**
1711
- * 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.
1712
1790
  *
1713
1791
  * Il Collection Processor e' un solo tipo di node con un discriminatore
1714
1792
  * (`collectionProcessorType`: `Sort` o `Filter`), e i campi rilevanti cambiano con esso: un
@@ -1893,7 +1971,7 @@ declare function valuedFieldsOf(value: FlowValue | undefined | null): (keyof Flo
1893
1971
  declare function valuedFieldOf(value: FlowValue | undefined | null): keyof FlowValue | undefined;
1894
1972
 
1895
1973
  /**
1896
- * Gli step di uno stage di orchestrazione — FRONTEND.md §5.13.
1974
+ * Gli step di uno stage di orchestrazione — FRONTEND.md §5.14.
1897
1975
  *
1898
1976
  * Tre regole del contratto che non si vedono guardando il tipo, e che qui stanno in un posto
1899
1977
  * solo perche' le usano l'inspector, lo spazio dei nomi del documento e la validazione locale:
@@ -1913,14 +1991,14 @@ declare function stepsOf(stage: FlowOrchestratedStage | undefined): FlowStageSte
1913
1991
  /**
1914
1992
  * Il nome dello step il cui output un riferimento sta leggendo, se e' uno degli step passati.
1915
1993
  * `undefined` quando il riferimento e' legittimo. Serve a impedire nell'editor la condizione
1916
- * 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
1917
1995
  * quel risultato in una variabile con `outputParameters.assignToReference` e condizionare
1918
1996
  * su quella.
1919
1997
  */
1920
1998
  declare function stageStepOutputReferenced(reference: string | undefined, steps: FlowStageStep[]): string | undefined;
1921
1999
  /**
1922
2000
  * L'unico output che il runtime legge da un evaluation flow di condizione. Dichiararne altri
1923
- * e' `STAGE_ACTION_INVALID` (§5.13, punto 7).
2001
+ * e' `STAGE_ACTION_INVALID` (§5.14, punto 7).
1924
2002
  */
1925
2003
  declare const ORCHESTRATION_CONDITION_OUTPUT = "isOrchestrationConditionMet";
1926
2004
 
@@ -1967,6 +2045,18 @@ declare function allFieldsOf(screen: FlowDynamicScreen | undefined): FlowScreenF
1967
2045
  * Chi vuole i **soli** riferimenti proponibili usa `isFieldResource`.
1968
2046
  */
1969
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[];
1970
2060
  /**
1971
2061
  * §5.2 — il campo e' una risorsa del flow (`kind: "ScreenField"`), quindi referenziabile
1972
2062
  * per nome ovunque e **di sola lettura**.
@@ -2101,7 +2191,7 @@ declare class FlowDictionaryStore {
2101
2191
  readonly paletteCategories: _angular_core.Signal<string[]>;
2102
2192
  elementType(value: string): FlowElementTypeEntry | undefined;
2103
2193
  /**
2104
- * 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
2105
2195
  * Collection Processor. Elenco vuoto = tipo senza varianti, **oppure** dizionario non
2106
2196
  * disponibile: in entrambi i casi la palette mostra una voce sola, che e' l'unica cosa
2107
2197
  * onesta da fare quando non si sa quali varianti esistano.
@@ -2141,11 +2231,11 @@ declare class FlowDictionaryStore {
2141
2231
  isGlobalScopeVerifiable(scope: string | undefined | null): boolean;
2142
2232
  /** I percorsi noti di uno scope, già prefissati: `$User.Email`. */
2143
2233
  globalPathsOf(scope: string | undefined | null): string[];
2144
- /** §5.13 — la voce di `stageStepTypes` di un `actionType`. */
2234
+ /** §5.14 — la voce di `stageStepTypes` di un `actionType`. */
2145
2235
  stageStepType(value: string | undefined | null): FlowStageStepTypeEntry | undefined;
2146
2236
  /** `stepBackground` vuole `actionName`; il fallback serve se il dizionario non lo dichiara. */
2147
2237
  stageStepRequiresActionName(actionType: string | undefined | null): boolean;
2148
- /** `stepInteractive` e `stepApproval` vogliono gli assegnatari (§5.13). */
2238
+ /** `stepInteractive` e `stepApproval` vogliono gli assegnatari (§5.14). */
2149
2239
  stageStepRequiresAssignees(actionType: string | undefined | null): boolean;
2150
2240
  dataType(value: string | undefined | null): FlowDataTypeEntry | undefined;
2151
2241
  /** §4.6, §4.7 — `Object`, `Enum` e `Structure` richiedono `objectType`. */
@@ -2215,7 +2305,12 @@ declare class FlowCatalogStore {
2215
2305
  listActionParameters(actionType: string, actionName: string): Promise<FlowCatalogParameter[]>;
2216
2306
  listScripts(): Promise<FlowCatalogEntry[]>;
2217
2307
  listScriptParameters(scriptName: string): Promise<FlowCatalogParameter[]>;
2218
- listForms(): Promise<FlowCatalogEntry[]>;
2308
+ /**
2309
+ * La cache e' **per ruolo**: `Form` e `Component` sono due risposte diverse dello stesso
2310
+ * catalogo, e una chiave sola le farebbe sovrascrivere a vicenda — il primo inspector aperto
2311
+ * deciderebbe cosa vede il secondo (§6.4).
2312
+ */
2313
+ listForms(kind?: FlowFormKind): Promise<FlowCatalogEntry[]>;
2219
2314
  listFormParameters(formName: string): Promise<FlowCatalogParameter[]>;
2220
2315
  listEnumTypes(): Promise<FlowCatalogEntry[]>;
2221
2316
  /**
@@ -2251,7 +2346,7 @@ declare class FlowCatalogStore {
2251
2346
  }
2252
2347
 
2253
2348
  /**
2254
- * 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.
2255
2350
  *
2256
2351
  * La specifica e' cambiata su questo punto: i percorsi con il punto **si verificano**. Un percorso
2257
2352
  * di relazione (`Cliente.Citta`) si naviga un segmento alla volta e l'ultimo si verifica come un
@@ -2274,7 +2369,7 @@ declare class FlowCatalogStore {
2274
2369
  * - **scrivibile** non vuol dire la stessa cosa nei due mondi: un membro porta il proprio
2275
2370
  * `isWritable`, un campo no — fuori da un Create o da un Update il contesto non c'e', quindi
2276
2371
  * basta che sia `isCreateable` **oppure** `isUpdateable`, e un campo che non e' ne' l'uno ne'
2277
- * l'altro e' `TARGET_NOT_WRITABLE` in qualunque contesto (§5.7).
2372
+ * l'altro e' `TARGET_NOT_WRITABLE` in qualunque contesto (§5.8).
2278
2373
  */
2279
2374
 
2280
2375
  /** Una tappa navigabile: un'entita' dello schema, oppure una classe (§4.7). */
@@ -2503,12 +2598,15 @@ declare class FlowDocumentStore {
2503
2598
  readonly nodeByName: _angular_core.Signal<Map<string, FlowNodeRef>>;
2504
2599
  readonly resources: _angular_core.Signal<FlowResourceRef[]>;
2505
2600
  /**
2506
- * §3.3 — l'insieme dei nomi già usati: node, risorse, step di orchestrazione **e campi di
2507
- * screen dinamico**, un unico spazio di nomi. Il controllo di unicita' che guarda solo le
2508
- * variabili lascia passare una variabile omonima di un node (§13.5); quello che dimentica gli
2509
- * step lascia passare uno step omonimo di una variabile (§5.13); quello che dimentica i campi
2510
- * lascia passare un campo omonimo di una variabile, che e' `NAME_DUPLICATED` come gli altri
2511
- * 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).
2512
2610
  */
2513
2611
  readonly usedNames: _angular_core.Signal<string[]>;
2514
2612
  /** Gli archi derivati dal documento, Start incluso. */
@@ -2587,7 +2685,7 @@ declare class FlowDocumentStore {
2587
2685
  x: number;
2588
2686
  y: number;
2589
2687
  }): void;
2590
- /** Scrive la destinazione di un'uscita. `target` assente → il ramo resta incompleto. */
2688
+ /** Scrive la destinazione di un'uscita. `target` assente → il ramo si stacca del tutto. */
2591
2689
  setConnector(fromName: string, outletKey: string, target: string | undefined, isGoTo?: boolean): void;
2592
2690
  /** Rimuove un arco: il percorso finisce lì, che e' legittimo (§3.5). */
2593
2691
  removeConnector(fromName: string, outletKey: string): void;
@@ -2752,7 +2850,15 @@ declare class FlowEditorSession {
2752
2850
  readonly lastSaveResult: _angular_core.Signal<FlowSaveResult | null>;
2753
2851
  readonly conflict: _angular_core.Signal<FlowConflictState | null>;
2754
2852
  readonly expectedUpdatedAt: _angular_core.Signal<string | undefined>;
2755
- /** `true` finche' il flow non e' mai stato salvato: il comando e' "Crea", non "Salva". */
2853
+ /**
2854
+ * `true` finche' il flow non e' mai stato salvato: il comando e' "Crea", non "Salva".
2855
+ *
2856
+ * Il confronto e' `== null` e non `=== null` di proposito: il segnale e' tipato
2857
+ * `number | null`, ma cio' che ci arriva viene da una risposta del backend, e una risposta
2858
+ * senza `version` porta `undefined`. Con `=== null` un `undefined` sarebbe «versione nota»:
2859
+ * lo stato diventa «Nuovo» con il chip «v», il comando primario «Nuova versione» e l'editor
2860
+ * in sola lettura, tutti insieme, senza nessun errore che lo spieghi.
2861
+ */
2756
2862
  readonly isNew: _angular_core.Signal<boolean>;
2757
2863
  readonly currentVersionSummary: _angular_core.Signal<FlowVersionSummary | undefined>;
2758
2864
  /**
@@ -2775,8 +2881,18 @@ declare class FlowEditorSession {
2775
2881
  open(flowName: string, version?: number): Promise<void>;
2776
2882
  /** Senza `version` il backend restituisce la versione attiva, altrimenti l'ultima (§6.1). */
2777
2883
  private static pickVersion;
2778
- /** Ricarica l'elenco versioni: dopo un'attivazione la precedente e' `Obsolete` (§8.4). */
2779
- refreshVersions(): Promise<void>;
2884
+ /**
2885
+ * Ricarica l'elenco versioni: dopo un'attivazione la precedente e' `Obsolete` (§8.4).
2886
+ *
2887
+ * `adoptVersion` serve dopo una scrittura la cui risposta non porta il numero di versione
2888
+ * (§6.2): l'elenco e' l'altra fonte che quel numero lo sa, e senza il ripiego un flow appena
2889
+ * creato resterebbe «Nuovo» — cioe' il salvataggio successivo tenterebbe una *creazione* su un
2890
+ * nome che esiste già. Sta dietro un flag perche' altrove una versione assente e' un flow
2891
+ * davvero nuovo, e adottarla lo farebbe passare per salvato.
2892
+ */
2893
+ refreshVersions(options?: {
2894
+ adoptVersion?: boolean;
2895
+ }): Promise<void>;
2780
2896
  /**
2781
2897
  * Crea o salva, a seconda dello stato. Non lancia su definizione invalida: il
2782
2898
  * salvataggio riesce anche con errori e il chiamante legge `validation` (§8.2).
@@ -2788,7 +2904,44 @@ declare class FlowEditorSession {
2788
2904
  activate?: boolean;
2789
2905
  flowName?: string;
2790
2906
  }): Promise<FlowSaveResult>;
2907
+ /**
2908
+ * Il risultato di una scrittura riportato alla forma su cui l'editor puo' contare.
2909
+ *
2910
+ * La §6.2 dice che `flowName` e `version` ci sono sempre, ma se mancano — risposta vuota,
2911
+ * `204`, o piu' spesso un host che serializza in PascalCase, dove `Version` non e' `version` —
2912
+ * il difetto non e' un errore: e' `undefined` che entra nello stato della sessione e ricompare
2913
+ * ovunque. Il chip della versione diventa «v», il banner dice «Versione undefined attivata», e
2914
+ * al salvataggio successivo si manda `flowName: undefined`. Nessuna eccezione, nessun rilievo.
2915
+ *
2916
+ * Cio' che sappiamo lo sappiamo già: il nome del flow e la versione sono quelli che abbiamo
2917
+ * appena chiesto di scrivere. Si tengono, e la discrepanza si dice **una volta** in console —
2918
+ * a chi integra, perche' e' la sua risposta a non avere la forma del contratto.
2919
+ */
2920
+ private normalizeResult;
2921
+ private static readonly warned;
2922
+ private static warnOnce;
2791
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;
2792
2945
  /** Copia la versione corrente in una nuova bozza (§8.1): il comando delle versioni chiuse. */
2793
2946
  createNewVersion(): Promise<FlowSaveResult>;
2794
2947
  /**
@@ -2949,7 +3102,7 @@ declare class FlowCanvasComponent {
2949
3102
  /** Rilascio di un elemento dalla palette: tipo + punto nel sistema del canvas. */
2950
3103
  readonly elementDropped: _angular_core.OutputEmitterRef<{
2951
3104
  type: FlowElementType;
2952
- /** 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). */
2953
3106
  variant?: string;
2954
3107
  x: number;
2955
3108
  y: number;
@@ -2987,9 +3140,10 @@ declare class FlowCanvasComponent {
2987
3140
  /** Sullo Start conta il trigger: e' cio' che decide quando il flow parte (§3.4). */
2988
3141
  private startSubtitle;
2989
3142
  /**
2990
- * Creazione di un arco. `targetId` assente significa rilascio nel vuoto: si lascia il
2991
- * ramo dichiarato ma senza destinazione, che e' esattamente il "ramo incompleto" del
2992
- * modello, invece di scartare il gesto.
3143
+ * Creazione di un arco. `targetId` assente significa rilascio nel vuoto: il ramo resta
3144
+ * **staccato**, cioe' omesso dal documento (`CONNECTOR_MISSING`, «il percorso finisce
3145
+ * qui»), non dichiarato-senza-destinazione che sarebbe `CONNECTOR_TARGET_MISSING`, un
3146
+ * avviso su un ramo che l'utente non ha mai voluto collegare.
2993
3147
  */
2994
3148
  onCreateConnection(event: {
2995
3149
  sourceId: string;
@@ -3059,7 +3213,7 @@ declare class FlowCanvasComponent {
3059
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>;
3060
3214
  }
3061
3215
 
3062
- /** 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). */
3063
3217
  interface FlowPalettePick {
3064
3218
  type: FlowElementType;
3065
3219
  variant?: string;
@@ -3113,7 +3267,7 @@ declare class ElementPaletteComponent {
3113
3267
  /**
3114
3268
  * L'etichetta del ramo di fault, presa dalla mappa delle uscite invece di scrivere «ramo di
3115
3269
  * errore» per tutti: su uno stage di orchestrazione quel ramo **non** e' un guasto, e' lo step
3116
- * 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.
3117
3271
  */
3118
3272
  faultLabel(item: PaletteItem): string | null;
3119
3273
  categoryClass(category: string): string;
@@ -3144,6 +3298,18 @@ declare class ReferencePickerComponent {
3144
3298
  * `WasVisited` e `HasError` (§4.3).
3145
3299
  */
3146
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[]>;
3147
3313
  readonly valueChange: _angular_core.OutputEmitterRef<string | undefined>;
3148
3314
  /**
3149
3315
  * L'elenco come arriva dalla primitiva, **senza** il filtro di tipo.
@@ -3185,7 +3351,20 @@ declare class ReferencePickerComponent {
3185
3351
  * `String` sta solo nell'elenco non filtrato.
3186
3352
  */
3187
3353
  private readonly declaredPrefix;
3354
+ /**
3355
+ * La radice **verificabile**: e' quella su cui si giudica il valore scritto (`valueState`), e
3356
+ * tiene fuori gli output automatici perche' la validazione non guarda i loro percorsi (§4.5, §7).
3357
+ */
3188
3358
  private readonly navigableRoot;
3359
+ /**
3360
+ * La radice da cui si **propone**, che comprende anche gli output automatici. Sono due computed e
3361
+ * non uno perche' le due domande sono diverse: proporre i campi di `Leggi_Ordine` aiuta a scrivere
3362
+ * `Leggi_Ordine.Numero` — un riferimento valido — mentre giudicarne i segmenti significherebbe
3363
+ * accusare cio' che il backend non verifica. Con una radice sola una delle due cose sarebbe
3364
+ * sbagliata: o la riga sparisce dai campi tipizzati, o un campo scritto a mano diventa
3365
+ * `FIELD_UNKNOWN` senza che nessuna primitiva lo dica.
3366
+ */
3367
+ private readonly proposalRoot;
3189
3368
  /** Il percorso dopo la radice: `Cliente.Email` di `Richiesta.Cliente.Email`. */
3190
3369
  private readonly navigatedPath;
3191
3370
  private readonly navigation;
@@ -3195,16 +3374,22 @@ declare class ReferencePickerComponent {
3195
3374
  /**
3196
3375
  * I segmenti come riferimenti navigati: `Richiesta.Cliente.Email`, col tipo del segmento. Un
3197
3376
  * segmento di sola lettura non si propone in un campo di destinazione, a meno che da lì il
3198
- * 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).
3199
3378
  */
3200
3379
  /**
3201
- * §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
3202
3381
  * tale: le globali le risolve un componente che non ha modo di scriverle, e proporle come
3203
3382
  * destinazione farebbe attivare un flow che poi fallisce davanti all'utente. L'eccezione sono i
3204
3383
  * campi del record che innesca, che si assegnano (§4.1).
3205
3384
  */
3206
3385
  private readonly isReadOnlyPath;
3207
3386
  private readonly pathReferences;
3387
+ /**
3388
+ * Cosa dire di un segmento proposto. Sotto un output automatico «sola lettura» sarebbe vero ma
3389
+ * fuorviante — in un campo che vuole un valore nessuno stava cercando una destinazione: cio' che
3390
+ * cambia il comportamento e' che il percorso non lo verifica nessuno (§4.5).
3391
+ */
3392
+ private segmentDescription;
3208
3393
  /**
3209
3394
  * Lo stesso filtro delle radici (§6.4), applicato ai segmenti di un percorso: in un parametro
3210
3395
  * `String` non si propone un membro `Date`. Un segmento da cui si scende resta comunque proposto
@@ -3268,14 +3453,24 @@ declare class ReferencePickerComponent {
3268
3453
  * essere il riferimento che si vuole **oppure** la tappa da cui continuare.
3269
3454
  */
3270
3455
  descend(reference: FlowReference): void;
3271
- /** `true` se da questo riferimento il percorso continua: la sua forma e' dichiarata. */
3456
+ /**
3457
+ * `true` se da questo riferimento il percorso continua, cioe' se si conosce la forma di cio' che
3458
+ * designa. Comprende gli **output automatici** di un elemento: `Leggi_Ordine` dichiara la propria
3459
+ * entita', quindi i suoi campi si possono proporre — che il backend non verifichi i segmenti dopo
3460
+ * il punto (§4.5) cambia cosa si **dice** del valore scritto, non cosa si puo' proporre. Prima
3461
+ * l'esclusione era qui, e l'effetto era che in un campo tipizzato la riga spariva del tutto: il
3462
+ * filtro di tipo scarta il record, e senza `›` non restava nessuna strada verso `Leggi_Ordine.Numero`.
3463
+ *
3464
+ * Una collection resta esclusa: il riferimento designa l'insieme, e un campo di un insieme non
3465
+ * esiste — per scorrerlo c'e' il Loop.
3466
+ */
3272
3467
  canDescend(reference: FlowReference): boolean;
3273
3468
  /** Scrittura libera: indispensabile per gli scope dell'host e per i percorsi non enumerabili. */
3274
3469
  onManualInput(value: string): void;
3275
3470
  clear(): void;
3276
3471
  describe(reference: FlowReference): string;
3277
3472
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ReferencePickerComponent, never>;
3278
- 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>;
3279
3474
  }
3280
3475
 
3281
3476
  declare class ObjectPickerComponent {
@@ -3400,6 +3595,15 @@ declare class NamePickerComponent {
3400
3595
  * senza versione attiva e' un avviso. Mostrarli con lo stesso colore direbbe il falso.
3401
3596
  */
3402
3597
  readonly unknownSeverity: _angular_core.InputSignal<"error" | "warn">;
3598
+ /**
3599
+ * Nomi che **esistono** ma non sono utilizzabili qui. Il caso vero e' il catalogo dei form,
3600
+ * dove una schermata intera e un componente vivono nello stesso elenco e si distinguono per
3601
+ * `formKind`: usare l'uno al posto dell'altro e' `FORM_KIND_MISMATCH`, non `FORM_UNKNOWN`
3602
+ * (§5.1, §5.2). Senza questo secondo elenco il picker direbbe «non esiste» di un nome che c'e',
3603
+ * e manderebbe a cercare un artefatto già scritto.
3604
+ */
3605
+ readonly unusableOptions: _angular_core.InputSignal<NamePickerOption[]>;
3606
+ readonly unusableMessage: _angular_core.InputSignal<string>;
3403
3607
  /** Cosa dire quando l'elenco e' vuoto: e' il caso "non lo so", non un errore. */
3404
3608
  readonly emptyMessage: _angular_core.InputSignal<string>;
3405
3609
  /** Testo monospazio: i nomi tecnici si leggono meglio, ed e' come li mostra il resto del form. */
@@ -3411,6 +3615,8 @@ declare class NamePickerComponent {
3411
3615
  readonly text: _angular_core.Signal<string>;
3412
3616
  readonly visibleOptions: _angular_core.Signal<NamePickerOption[]>;
3413
3617
  readonly hasOptions: _angular_core.Signal<boolean>;
3618
+ /** Il nome c'e' nel catalogo, ma in un ruolo che qui non va: e' un errore a se' (§7). */
3619
+ readonly isUnusable: _angular_core.Signal<boolean>;
3414
3620
  readonly isUnknown: _angular_core.Signal<boolean>;
3415
3621
  readonly labelOfValue: _angular_core.Signal<string | null>;
3416
3622
  open(): void;
@@ -3421,7 +3627,7 @@ declare class NamePickerComponent {
3421
3627
  clear(): void;
3422
3628
  describe(option: NamePickerOption): string;
3423
3629
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NamePickerComponent, never>;
3424
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NamePickerComponent, "fb-name-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "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; }; "unknownMessage": { "alias": "unknownMessage"; "required": false; "isSignal": true; }; "unknownSeverity": { "alias": "unknownSeverity"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "isMono": { "alias": "isMono"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
3630
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NamePickerComponent, "fb-name-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "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; }; "unknownMessage": { "alias": "unknownMessage"; "required": false; "isSignal": true; }; "unknownSeverity": { "alias": "unknownSeverity"; "required": false; "isSignal": true; }; "unusableOptions": { "alias": "unusableOptions"; "required": false; "isSignal": true; }; "unusableMessage": { "alias": "unusableMessage"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "isMono": { "alias": "isMono"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
3425
3631
  }
3426
3632
 
3427
3633
  declare class StructurePickerComponent {
@@ -3501,7 +3707,7 @@ declare class StructureMemberPickerComponent {
3501
3707
  /**
3502
3708
  * Un segmento che esiste ma non e' scrivibile, scelto dove serve una destinazione: capita su un
3503
3709
  * documento scritto altrove, e va detto qui invece di lasciarlo scoprire dall'attivazione. Su un
3504
- * campo di record "scrivibile" vuol dire `createable` **oppure** `updateable` (§5.7).
3710
+ * campo di record "scrivibile" vuol dire `createable` **oppure** `updateable` (§5.8).
3505
3711
  */
3506
3712
  readonly isNotWritable: _angular_core.Signal<boolean>;
3507
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.">;
@@ -3742,7 +3948,7 @@ declare class ConditionEditorComponent {
3742
3948
  readonly allowFormula: _angular_core.InputSignal<boolean>;
3743
3949
  /**
3744
3950
  * `false` dove il modello porta **solo** la lista di condizioni, senza un campo per la
3745
- * logica: gli `entryConditions` / `exitConditions` di uno step di orchestrazione (§5.13).
3951
+ * logica: gli `entryConditions` / `exitConditions` di uno step di orchestrazione (§5.14).
3746
3952
  * Mostrare i pulsanti della logica lì scriverebbe un campo che il contratto non prevede.
3747
3953
  */
3748
3954
  readonly allowLogic: _angular_core.InputSignal<boolean>;
@@ -3783,7 +3989,7 @@ declare class ConditionEditorComponent {
3783
3989
  */
3784
3990
  hasTypeMismatch(condition: FlowCondition): boolean;
3785
3991
  typeMismatchMessage(condition: FlowCondition): string;
3786
- readonly logicMode: _angular_core.Signal<"and" | "or" | "formula" | "custom">;
3992
+ readonly logicMode: _angular_core.Signal<"and" | "or" | "custom" | "formula">;
3787
3993
  readonly customLogic: _angular_core.Signal<string>;
3788
3994
  /** Feedback immediato sull'espressione: la verita' resta della validazione backend. */
3789
3995
  readonly customLogicError: _angular_core.Signal<string | null>;
@@ -3848,12 +4054,12 @@ declare class RecordFilterEditorComponent {
3848
4054
  /**
3849
4055
  * Avviso da mostrare quando la lista e' vuota. Un Delete senza filtri e' un **errore**,
3850
4056
  * un Update senza filtri e' solo un avviso — ma aggiorna tutti i record dell'entita'
3851
- * (§5.7, §13.10).
4057
+ * (§5.8, §13.10).
3852
4058
  */
3853
4059
  readonly emptyWarning: _angular_core.InputSignal<string | null>;
3854
4060
  readonly emptyWarningSeverity: _angular_core.InputSignal<"error" | "warn">;
3855
4061
  readonly changed: _angular_core.OutputEmitterRef<(holder: FilterHolder) => void>;
3856
- /** 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). */
3857
4063
  private readonly allFields;
3858
4064
  readonly filters: _angular_core.Signal<FlowRecordFilter[]>;
3859
4065
  readonly operators: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
@@ -3869,12 +4075,12 @@ declare class RecordFilterEditorComponent {
3869
4075
  private readonly types;
3870
4076
  constructor();
3871
4077
  /**
3872
- * §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,
3873
4079
  * dove `Id` porta la forma canonica della chiave e le colonne filtrabili sono altre. Dirlo
3874
4080
  * evita la ricerca di un campo che nell'elenco non c'e' e non ci sara'.
3875
4081
  */
3876
4082
  readonly identifierNotFilterable: _angular_core.Signal<boolean>;
3877
- readonly logicMode: _angular_core.Signal<"and" | "or" | "formula" | "custom">;
4083
+ readonly logicMode: _angular_core.Signal<"and" | "or" | "custom" | "formula">;
3878
4084
  readonly customLogic: _angular_core.Signal<string>;
3879
4085
  readonly showEmptyWarning: _angular_core.Signal<boolean>;
3880
4086
  addFilter(): void;
@@ -3917,6 +4123,12 @@ declare class ParameterEditorComponent {
3917
4123
  readonly showOutputs: _angular_core.InputSignal<boolean>;
3918
4124
  /** `true` → gli output vanno all'output automatico, e i parametri sono ignorati. */
3919
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[]>;
3920
4132
  readonly changed: _angular_core.OutputEmitterRef<(holder: ParameterHolder) => void>;
3921
4133
  readonly inputs: _angular_core.Signal<FlowInputParameter[]>;
3922
4134
  readonly outputs: _angular_core.Signal<FlowOutputParameter[]>;
@@ -3945,7 +4157,7 @@ declare class ParameterEditorComponent {
3945
4157
  setOutputName(index: number, name: string): void;
3946
4158
  setOutputTarget(index: number, reference: string | undefined): void;
3947
4159
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ParameterEditorComponent, never>;
3948
- 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>;
3949
4161
  }
3950
4162
 
3951
4163
  interface FieldAssignmentHolder {
@@ -3955,7 +4167,7 @@ declare class FieldAssignmentEditorComponent {
3955
4167
  private readonly catalog;
3956
4168
  readonly holder: _angular_core.InputSignal<FieldAssignmentHolder>;
3957
4169
  readonly object: _angular_core.InputSignal<string | undefined>;
3958
- /** `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). */
3959
4171
  readonly usage: _angular_core.InputSignal<FlowFieldUsage>;
3960
4172
  readonly title: _angular_core.InputSignal<string>;
3961
4173
  readonly disabledReason: _angular_core.InputSignal<string | null>;
@@ -4055,6 +4267,13 @@ declare class ElementInspectorComponent {
4055
4267
  readonly closed: _angular_core.OutputEmitterRef<void>;
4056
4268
  readonly removeRequested: _angular_core.OutputEmitterRef<string>;
4057
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>;
4058
4277
  readonly isStart: _angular_core.Signal<boolean>;
4059
4278
  readonly reference: _angular_core.Signal<_esfaenza_flow_builder.FlowNodeRef | undefined>;
4060
4279
  readonly node: _angular_core.Signal<FlowAnyNode | undefined>;
@@ -4090,7 +4309,7 @@ declare class ElementInspectorComponent {
4090
4309
  y: number;
4091
4310
  }>;
4092
4311
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementInspectorComponent, never>;
4093
- 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>;
4094
4313
  }
4095
4314
 
4096
4315
  declare class ElementDialogComponent {
@@ -4101,6 +4320,8 @@ declare class ElementDialogComponent {
4101
4320
  readonly closed: _angular_core.OutputEmitterRef<void>;
4102
4321
  readonly removeRequested: _angular_core.OutputEmitterRef<string>;
4103
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>;
4104
4325
  private readonly panel;
4105
4326
  readonly isStart: _angular_core.Signal<boolean>;
4106
4327
  private readonly reference;
@@ -4110,8 +4331,9 @@ declare class ElementDialogComponent {
4110
4331
  close(): void;
4111
4332
  onRemoveRequested(name: string): void;
4112
4333
  onDuplicateRequested(name: string): void;
4334
+ onRenamed(name: string): void;
4113
4335
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementDialogComponent, never>;
4114
- 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>;
4115
4337
  }
4116
4338
 
4117
4339
  declare class StartInspectorComponent {
@@ -4174,7 +4396,7 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
4174
4396
  readonly conditionOutputName = "isOrchestrationConditionMet";
4175
4397
  /**
4176
4398
  * I flow proponibili come step in background o come evaluation flow. Una lista vuota
4177
- * 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).
4178
4400
  */
4179
4401
  private readonly flowCandidates;
4180
4402
  constructor();
@@ -4200,14 +4422,14 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
4200
4422
  stepNameError(step: FlowStageStep): string | null;
4201
4423
  /**
4202
4424
  * Il nome dello step il cui output una condizione sta leggendo: e' irrisolvibile finche'
4203
- * 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.
4204
4426
  */
4205
4427
  stepOutputInConditions(step: FlowStageStep): string | undefined;
4206
4428
  /** Lo step tiene un output senza destinazione: e' lecito, ma vale la pena dirlo. */
4207
4429
  hasSimulatedOutputs(step: FlowStageStep): boolean;
4208
4430
  addStep(): void;
4209
4431
  removeStep(index: number): void;
4210
- /** 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). */
4211
4433
  moveStep(index: number, direction: -1 | 1): void;
4212
4434
  private patchStep;
4213
4435
  setStepLabel(index: number, label: string): void;
@@ -4240,7 +4462,7 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
4240
4462
  setEntryActionName(index: number, actionName: string): void;
4241
4463
  setExitActionName(index: number, actionName: string): void;
4242
4464
  onParametersChanged(index: number, mutate: (holder: ParameterHolder) => void): void;
4243
- /** 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). */
4244
4466
  readonly hasRejectionBranch: _angular_core.Signal<boolean>;
4245
4467
  /** C'e' almeno uno step il cui rifiuto e' un esito previsto. */
4246
4468
  readonly hasApprovalStep: _angular_core.Signal<boolean>;
@@ -4252,6 +4474,20 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
4252
4474
  interface DropTarget {
4253
4475
  parent: FlowScreenFieldPath;
4254
4476
  index: number;
4477
+ /**
4478
+ * Dove disegnare la barra di inserimento, in coordinate del frame dell'anteprima. La calcola
4479
+ * {@link DynamicScreenInspectorComponent.hitTest} perche' e' lì che si conoscono i rettangoli
4480
+ * dei fratelli, e la barra e' un **velo**: non sta nel flusso (vedi `dropMarker`). Assente per
4481
+ * il bersaglio dei comandi a clic, che non nasce da un puntatore e non disegna niente.
4482
+ */
4483
+ marker?: DropMarker;
4484
+ }
4485
+ /** La barra di inserimento, in pixel relativi al frame dell'anteprima. */
4486
+ interface DropMarker {
4487
+ left: number;
4488
+ top: number;
4489
+ width: number;
4490
+ height: number;
4255
4491
  }
4256
4492
  declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
4257
4493
  private readonly catalog;
@@ -4281,12 +4517,27 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
4281
4517
  setPaletteTab(tab: 'components' | 'fields'): void;
4282
4518
  setFieldsObject(object: string | undefined): void;
4283
4519
  /** Componenti e form sono la stessa domanda al frontend, e lo stesso catalogo (§5.2). */
4520
+ /** I soli **componenti**: `GET /catalog/forms?kind=Component` (§5.2, §6.4). */
4284
4521
  private readonly components;
4522
+ /**
4523
+ * Le schermate intere, che qui non vanno. Serve a dire la cosa giusta su un nome che esiste:
4524
+ * `FORM_KIND_MISMATCH` e non `SCREEN_COMPONENT_UNKNOWN` (§5.2).
4525
+ */
4526
+ private readonly forms;
4285
4527
  private readonly componentParameters;
4286
4528
  /** I tipi di enumerazione: dizionario chiuso, quindi `<select>` e non combo (§4.6). */
4287
4529
  private readonly enumTypes;
4288
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;
4289
4535
  readonly componentOptions: _angular_core.Signal<NamePickerOption[]>;
4536
+ /**
4537
+ * Le schermate che **non** sono anche componenti: una voce senza `formKind` vale `Any` e
4538
+ * compare in entrambe le risposte, quindi qui non va accusata (§6.4).
4539
+ */
4540
+ readonly unusableComponents: _angular_core.Signal<NamePickerOption[]>;
4290
4541
  readonly enumOptions: _angular_core.Signal<FlowCatalogEntry[]>;
4291
4542
  readonly componentParameterList: _angular_core.Signal<FlowCatalogParameter[]>;
4292
4543
  /**
@@ -4326,8 +4577,22 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
4326
4577
  /** Il punto di inserimento corrente, disegnato come una barra fra i campi. */
4327
4578
  readonly dropTarget: _angular_core.WritableSignal<DropTarget | null>;
4328
4579
  isDragging(path: FlowScreenFieldPath): boolean;
4329
- /** `true` se la barra di inserimento va disegnata qui. */
4330
- isDropAt(parent: FlowScreenFieldPath, index: number): boolean;
4580
+ /**
4581
+ * La barra di inserimento, disegnata **sopra** l'anteprima e non dentro il contenitore.
4582
+ *
4583
+ * Un tempo era un figlio del contenitore di rilascio, e in una griglia a 12 tracce questo la
4584
+ * rendeva ingovernabile: una barra orizzontale prende `1 / -1`, cioe' una **riga intera piu' il
4585
+ * gap**, e spinge in basso tutto cio' che la segue — compresa la sezione che si stava puntando,
4586
+ * che si sposta di sotto il puntatore. Il gesto successivo rimisurava allora una geometria che
4587
+ * la barra stessa aveva cambiato, il bersaglio cambiava, la barra spariva, la sezione risaliva:
4588
+ * un'oscillazione a ogni movimento, e nessun modo di rilasciare dentro la sezione. Fuori dal
4589
+ * flusso la barra non muove niente, e `hitTest` misura sempre la stessa anteprima.
4590
+ *
4591
+ * Il secondo difetto che questo risolve: fra due colonne che riempivano tutte e 12 le tracce la
4592
+ * barra verticale finiva mandata a capo su una riga di altezza zero, cioe' **invisibile** —
4593
+ * proprio dove serviva di piu'.
4594
+ */
4595
+ readonly dropMarker: _angular_core.Signal<DropMarker | null>;
4331
4596
  onFieldDragStarted(path: FlowScreenFieldPath): void;
4332
4597
  onFieldDragMoved(event: CdkDragMove): void;
4333
4598
  onFieldDragEnded(event: CdkDragEnd, path: FlowScreenFieldPath): void;
@@ -4352,8 +4617,32 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
4352
4617
  *
4353
4618
  * L'indice viene dal confronto con la mezzeria dei fratelli, sull'asse del contenitore: le
4354
4619
  * colonne di una sezione stanno in riga, tutto il resto in colonna.
4620
+ *
4621
+ * La misura e' **sempre** su un'anteprima senza barra di inserimento: la barra e' un velo
4622
+ * assoluto (vedi `dropMarker`), quindi non c'e' il ciclo per cui disegnarla spostava cio' che
4623
+ * si stava puntando.
4355
4624
  */
4356
4625
  private hitTest;
4626
+ /** Barra verticale a sinistra di un campo, alta quanto lui. */
4627
+ private barBefore;
4628
+ /** Barra verticale a destra di un campo. */
4629
+ private barAfter;
4630
+ /** Barra orizzontale sopra un campo, larga quanto le tracce del contenitore. */
4631
+ private barAbove;
4632
+ /** Barra orizzontale sotto un campo. */
4633
+ private barBelow;
4634
+ /** Barra orizzontale in mezzo a un contenitore vuoto, dov'e' il segnaposto. */
4635
+ private barInside;
4636
+ /** La banda occupata dalle tracce della griglia: il rettangolo del contenitore meno il padding. */
4637
+ private contentBand;
4638
+ /** `true` se il campo occupa tutte le tracce, cioe' se la sua riga e' sua e basta. */
4639
+ private fillsRow;
4640
+ /**
4641
+ * Da coordinate del viewport a coordinate del frame dell'anteprima, che e' il contenitore
4642
+ * posizionato in cui vive il velo. Senza la conversione la barra sarebbe fuori posto appena la
4643
+ * dialog e' scorsa.
4644
+ */
4645
+ private toFrame;
4357
4646
  /** `"0.2"` → `[0, 2]`; la radice e' la stringa vuota. */
4358
4647
  private static parsePath;
4359
4648
  /** Il valore dell'attributo che marca un contenitore di rilascio. */
@@ -4460,6 +4749,88 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
4460
4749
  /** `ObjectProvided`: oggetto e campo si scrivono in un unico `<Oggetto>.<Campo>` (§5.2). */
4461
4750
  setProvidedObject(value: string | undefined): void;
4462
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;
4463
4834
  setScreenText(property: string, value: string): void;
4464
4835
  /** I flag con default `true` si scrivono solo quando si nega, per non sporcare il diff. */
4465
4836
  setScreenFlag(flag: 'allowBack' | 'allowFinish' | 'allowPause' | 'showHeader' | 'showFooter', value: boolean): void;
@@ -4634,7 +5005,7 @@ declare class DebugPanelComponent {
4634
5005
  readonly status: _angular_core.Signal<string | null>;
4635
5006
  readonly pendingScreen: _angular_core.Signal<_esfaenza_flow_builder.FlowPendingScreen | null>;
4636
5007
  readonly isWaitingForScreen: _angular_core.Signal<boolean>;
4637
- /** §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. */
4638
5009
  readonly isWaitingForStageStep: _angular_core.Signal<boolean>;
4639
5010
  readonly stageSteps: _angular_core.Signal<FlowStageStepState[]>;
4640
5011
  /** Lo step su cui c'e' un work item aperto: e' quello che si puo' concludere. */
@@ -4706,6 +5077,8 @@ interface Notice {
4706
5077
  declare class FlowBuilderComponent {
4707
5078
  private readonly api;
4708
5079
  private readonly destroyRef;
5080
+ /** Serve a `afterNextRender` chiamato fuori dal costruttore. */
5081
+ private readonly injector;
4709
5082
  protected readonly store: FlowDocumentStore;
4710
5083
  protected readonly dictionaries: FlowDictionaryStore;
4711
5084
  protected readonly session: FlowEditorSession;
@@ -4824,12 +5197,46 @@ declare class FlowBuilderComponent {
4824
5197
  onElementPicked(pick: FlowPalettePick): void;
4825
5198
  private createElement;
4826
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;
4827
5205
  onDuplicateNode(name: string): void;
4828
5206
  /** Riordina il grafo e **scrive** le coordinate nel documento (§3.5). */
4829
5207
  autoLayout(): void;
4830
5208
  undo(): void;
4831
5209
  redo(): void;
4832
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>;
4833
5240
  createNewVersion(): Promise<void>;
4834
5241
  activate(): Promise<void>;
4835
5242
  /** §9.3 — prima opzione davanti a un conflitto. */
@@ -4865,5 +5272,5 @@ declare class SelectValueDirective implements AfterViewChecked {
4865
5272
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectValueDirective, "select[fbValue]", never, { "fbValue": { "alias": "fbValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4866
5273
  }
4867
5274
 
4868
- 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 };
4869
- 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, 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 };