@esfaenza/flow-builder 20.0.0 → 20.3.2

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
@@ -34,7 +34,11 @@ interface FlowValue {
34
34
  stringValue?: string;
35
35
  integerValue?: number;
36
36
  numberValue?: number;
37
- /** Formato roundtrip senza fuso: `2026-08-15T00:00:00` (§2, §4.2). */
37
+ /**
38
+ * `2026-08-15T09:00:00Z` sono le 9 UTC, `2026-08-15T09:00:00` le 9 nel fuso
39
+ * dell'applicazione: sono **due istanti diversi**, e il motore converte prima di
40
+ * confrontare. Scrivere il fuso quando lo si conosce e' una scelta, non un dettaglio (§4.2).
41
+ */
38
42
  dateValue?: string;
39
43
  booleanValue?: boolean;
40
44
  enumValue?: string;
@@ -364,6 +368,67 @@ interface FlowUnsupportedNode extends FlowNodeBase {
364
368
  connector?: FlowConnector;
365
369
  [key: string]: unknown;
366
370
  }
371
+ /**
372
+ * §5.13 — i tre tipi di step. `stepMuleSoft` non esiste in questo sistema
373
+ * (`ELEMENT_NOT_SUPPORTED`); l'elenco autoritativo e' il dizionario `stageStepTypes`.
374
+ */
375
+ type FlowStageStepActionType = 'stepBackground' | 'stepInteractive' | 'stepApproval' | string;
376
+ /** A chi e' assegnato uno step interattivo. `assigneeTypes` e' il dizionario (§6.4). */
377
+ interface FlowStageStepAssignee {
378
+ assigneeType?: string;
379
+ assignee?: FlowValue;
380
+ }
381
+ /** Il nome di un *evaluation flow* che decide una condizione di ingresso o di uscita. */
382
+ type FlowStageStepConditionActionType = 'EvaluationFlow' | string;
383
+ /**
384
+ * §5.13 — uno step di uno stage.
385
+ *
386
+ * Due cose che non si vedono dal tipo:
387
+ * - gli step **non hanno un ordine di esecuzione**: parte quello le cui `entryConditions`
388
+ * sono vere, e l'ordine nell'array e' solo l'ordine d'esame;
389
+ * - `name` sta nello **stesso spazio dei nomi** di node e risorse (§3.3), e l'output di uno
390
+ * step e' sempre referenziabile come `<NomeStep>.<NomeOutput>`.
391
+ *
392
+ * I campi riservati (`runAsUser`, ignorato dal runtime, `canAssigneeEdit`, `shouldLock`,
393
+ * `requiresAsyncProcessing`) non sono modellati di proposito: non vanno esposti. Sopravvivono
394
+ * comunque al round-trip, perche' il documento viaggia come JSON.
395
+ */
396
+ interface FlowStageStep {
397
+ name?: string;
398
+ label?: string;
399
+ description?: string;
400
+ actionType?: FlowStageStepActionType;
401
+ /** Obbligatorio su `stepBackground`: il flow che il motore esegue subito. */
402
+ actionName?: string;
403
+ /** Obbligatori su `stepInteractive` e `stepApproval`. */
404
+ assignees?: FlowStageStepAssignee[];
405
+ /** `"0"` o `"1"`: il modello lo porta come stringa. */
406
+ requiresMultiMemberApproval?: string;
407
+ /** *Se* lo step si applica: se non si avverano, viene saltato (§5.13). */
408
+ entryConditions?: FlowCondition[];
409
+ /** *Quando* lo step libera lo stage: se restano false, lo stage va in stallo (§5.13). */
410
+ exitConditions?: FlowCondition[];
411
+ /** Evaluation flow che decide l'ingresso: deve restituire `isOrchestrationConditionMet`. */
412
+ entryActionName?: string;
413
+ entryActionType?: FlowStageStepConditionActionType;
414
+ exitActionName?: string;
415
+ exitActionType?: FlowStageStepConditionActionType;
416
+ inputParameters?: FlowInputParameter[];
417
+ /** `assignToReference` e' facoltativo: l'output e' già referenziabile (§5.13). */
418
+ outputParameters?: FlowOutputParameter[];
419
+ /** `true` → usa `outputConfigParams` come output finti, senza eseguire lo step. */
420
+ debugSimulateStep?: boolean;
421
+ outputConfigParams?: FlowInputParameter[];
422
+ }
423
+ interface FlowOrchestratedStage extends FlowNodeBase {
424
+ stageSteps?: FlowStageStep[];
425
+ connector?: FlowConnector;
426
+ /**
427
+ * **Non** e' un ramo di guasto: e' il ramo percorso quando uno step viene rifiutato.
428
+ * Senza, un rifiuto fa fallire l'interview (§5.13).
429
+ */
430
+ faultConnector?: FlowConnector;
431
+ }
367
432
  interface FlowSchedule {
368
433
  frequency?: 'Once' | 'Daily' | 'Weekly' | 'Monthly' | string;
369
434
  /** Data senza fuso: `2026-08-01T00:00:00`. */
@@ -438,10 +503,10 @@ interface FlowDefinition {
438
503
  transforms?: FlowTransform[];
439
504
  waits?: FlowWait[];
440
505
  customErrors?: FlowCustomError[];
506
+ orchestratedStages?: FlowOrchestratedStage[];
441
507
  /** Non supportati: conservati nel round-trip ma non creabili dalla palette. */
442
508
  steps?: FlowUnsupportedNode[];
443
509
  experiments?: FlowUnsupportedNode[];
444
- orchestratedStages?: FlowUnsupportedNode[];
445
510
  apiVersion?: string;
446
511
  timeZoneSidKey?: string;
447
512
  triggerOrder?: number;
@@ -449,13 +514,13 @@ interface FlowDefinition {
449
514
  customProperties?: FlowCustomProperty[];
450
515
  }
451
516
  /** Le collection di node: `metadataProperty` del dizionario `elementTypes` (§3.2). */
452
- declare const FLOW_NODE_COLLECTIONS: readonly ["screens", "assignments", "decisions", "loops", "collectionProcessors", "recordLookups", "recordCreates", "recordUpdates", "recordDeletes", "recordRollbacks", "actionCalls", "scriptPluginCalls", "subflows", "transforms", "waits", "customErrors", "steps", "experiments", "orchestratedStages"];
517
+ declare const FLOW_NODE_COLLECTIONS: readonly ["screens", "assignments", "decisions", "loops", "collectionProcessors", "recordLookups", "recordCreates", "recordUpdates", "recordDeletes", "recordRollbacks", "actionCalls", "scriptPluginCalls", "subflows", "transforms", "waits", "customErrors", "orchestratedStages", "steps", "experiments"];
453
518
  type FlowNodeCollection = (typeof FLOW_NODE_COLLECTIONS)[number];
454
519
  /** Le collection di risorse (§4.6). Condividono lo spazio dei nomi con i node (§3.3). */
455
520
  declare const FLOW_RESOURCE_COLLECTIONS: readonly ["variables", "constants", "formulas", "textTemplates", "choices", "dynamicChoiceSets", "stages"];
456
521
  type FlowResourceCollection = (typeof FLOW_RESOURCE_COLLECTIONS)[number];
457
522
  /** Il discriminatore `value` del dizionario `elementTypes`. */
458
- type FlowElementType = 'Screen' | 'Assignment' | 'Decision' | 'Loop' | 'CollectionProcessor' | 'CustomError' | 'Wait' | 'RecordLookup' | 'RecordCreate' | 'RecordUpdate' | 'RecordDelete' | 'RecordRollback' | 'ActionCall' | 'ScriptCall' | 'Subflow' | 'Transform' | 'Step' | 'Experiment' | 'OrchestratedStage' | string;
523
+ type FlowElementType = 'Screen' | 'Assignment' | 'Decision' | 'Loop' | 'CollectionProcessor' | 'CustomError' | 'Wait' | 'RecordLookup' | 'RecordCreate' | 'RecordUpdate' | 'RecordDelete' | 'RecordRollback' | 'ActionCall' | 'ScriptCall' | 'Subflow' | 'Transform' | 'OrchestratedStage' | 'Step' | 'Experiment' | string;
459
524
  /** Un node qualunque, come lo vede il canvas. */
460
525
  type FlowAnyNode = FlowNodeBase & Record<string, unknown>;
461
526
 
@@ -508,17 +573,37 @@ interface FlowAssignmentOperatorEntry extends FlowDictionaryEntry {
508
573
  /** Ha senso solo su destinazioni collection; altrove e' un avviso. */
509
574
  expectsCollection?: boolean;
510
575
  }
511
- /** §4.1 — variabile globale proponibile invece di farla digitare. */
576
+ /**
577
+ * §4.1 — variabile globale proponibile invece di farla digitare.
578
+ *
579
+ * La verificabilita' e' **per scope**: se `paths` porta almeno una voce, un percorso che non
580
+ * c'e' e' `GLOBAL_UNKNOWN`; se `paths` e' vuoto, lo scope resta non verificabile — che
581
+ * significa "non lo so", non "non esiste".
582
+ */
512
583
  interface FlowGlobalVariableEntry extends FlowDictionaryEntry {
513
584
  /** `$Flow`, `$GlobalConstant`, `$Record`, `$User`, … */
514
585
  scope?: string;
515
- /** Percorsi noti dello scope; per gli scope dell'host e' vuoto. */
586
+ /** Percorsi noti dello scope. Vuoto lo scope non e' verificabile (§4.1). */
516
587
  paths?: string[] | null;
517
- /** `true` → il backend non sa quali percorsi esistano e accetta qualunque cosa (§4.1). */
588
+ /** `true` → i percorsi li dichiara il sistema ospite, e solo quelli che dichiara. */
518
589
  isResolvedByHost?: boolean;
519
590
  /** Disponibile solo con un trigger su record (`$Record`, `$Record__Prior`). */
520
591
  requiresRecordTrigger?: boolean;
521
592
  }
593
+ /**
594
+ * §5.13 — i tipi di step di uno stage di orchestrazione (`stageStepTypes`).
595
+ * Le colonne dicono cosa il tipo pretende: senza, l'editor dovrebbe cablare i tre nomi.
596
+ */
597
+ interface FlowStageStepTypeEntry extends FlowDictionaryEntry {
598
+ /** `stepBackground`: il flow eseguito subito e' obbligatorio. */
599
+ requiresActionName?: boolean;
600
+ /** `stepInteractive` / `stepApproval`: gli assegnatari sono obbligatori. */
601
+ requiresAssignees?: boolean;
602
+ /** `true` → l'interview si **sospende** su questo step, in attesa di una persona. */
603
+ suspendsInterview?: boolean;
604
+ /** `true` → il rifiuto e' un esito previsto, e prende il `faultConnector` dello stage. */
605
+ supportsRejection?: boolean;
606
+ }
522
607
  interface FlowResourceKindEntry extends FlowDictionaryEntry {
523
608
  /** Solo le variabili sono scrivibili (§4.6). */
524
609
  isWritable?: boolean;
@@ -526,9 +611,13 @@ interface FlowResourceKindEntry extends FlowDictionaryEntry {
526
611
  metadataProperty?: string;
527
612
  }
528
613
  /**
529
- * §6.4 — tutte le tendine statiche in una risposta.
614
+ * §6.4 — le tendine in una risposta.
530
615
  * I campi sono opzionali: un backend che non popola un dizionario non deve far
531
616
  * crollare l'editor, che degrada mostrando il valore grezzo.
617
+ *
618
+ * Sono **quasi** statici: `globalVariables` dipende dal `processType` con cui si sono
619
+ * chiesti, perche' `$Record` non esiste in uno screen flow (§4.1). Chi lavora su piu' tipi di
620
+ * flow ne tiene una copia per tipo — se ne occupa {@link FlowDictionaryStore}.
532
621
  */
533
622
  interface FlowDictionaries {
534
623
  dataTypes?: FlowDataTypeEntry[];
@@ -549,6 +638,8 @@ interface FlowDictionaries {
549
638
  transformTypes?: FlowDictionaryEntry[];
550
639
  transactionModels?: FlowDictionaryEntry[];
551
640
  waitEventTypes?: FlowDictionaryEntry[];
641
+ stageStepTypes?: FlowStageStepTypeEntry[];
642
+ assigneeTypes?: FlowDictionaryEntry[];
552
643
  conditionLogicModes?: FlowDictionaryEntry[];
553
644
  screenNavigations?: FlowDictionaryEntry[];
554
645
  }
@@ -706,7 +797,11 @@ interface FlowReference {
706
797
  dataType?: FlowDataType | null;
707
798
  isCollection?: boolean;
708
799
  objectType?: string | null;
709
- /** Per i campi di destinazione: solo le variabili sono scrivibili (§4.6). */
800
+ /**
801
+ * Per i campi di destinazione. Scrivibili sono le variabili, `$Flow.CurrentStage`,
802
+ * `$Flow.ActiveStages` e le globali che il sistema ospite dichiara tali: la primitiva
803
+ * `POST /flows/references/writable` le comprende già, non vanno aggiunte lato client (§5.2).
804
+ */
710
805
  isWritable?: boolean;
711
806
  description?: string | null;
712
807
  }
@@ -773,6 +868,22 @@ interface FlowPendingScreen {
773
868
  canFinish?: boolean;
774
869
  canPause?: boolean;
775
870
  }
871
+ /**
872
+ * §5.13 — lo stato che un assegnatario comunica concludendo uno step.
873
+ * `Pending` non e' accettato in scrittura: e' `INVALID_REQUEST`.
874
+ */
875
+ type FlowStageStepStatus = 'Completed' | 'Rejected' | 'Cancelled' | 'Pending' | string;
876
+ /** Lo stato di uno step, come lo riporta l'ispezione di una sospesa (§5.13, §6.5). */
877
+ interface FlowStageStepState {
878
+ stepName?: string;
879
+ label?: string | null;
880
+ actionType?: string;
881
+ status?: FlowStageStepStatus;
882
+ /** `true` → c'e' un work item aperto: e' questo step a tenere sospesa l'interview. */
883
+ isWaiting?: boolean;
884
+ assignees?: string[];
885
+ outputs?: Record<string, FlowTypedValue>;
886
+ }
776
887
  interface FlowTraceEntry {
777
888
  sequence?: number;
778
889
  level?: string;
@@ -796,6 +907,14 @@ interface FlowInterviewResult {
796
907
  trace?: FlowTraceEntry[];
797
908
  /** Con `debug: true`: i valori di **tutte** le risorse, non solo gli output. */
798
909
  resources?: Record<string, FlowTypedValue>;
910
+ /**
911
+ * `Suspended` copre due attese diverse, e questi due flag le distinguono: un evento
912
+ * oppure uno step di orchestrazione (§6.5).
913
+ */
914
+ isWaitingForEvent?: boolean;
915
+ isWaitingForStageStep?: boolean;
916
+ /** Con `isWaitingForStageStep`: lo stato di ogni step dello stage corrente (§5.13). */
917
+ stageSteps?: FlowStageStepState[];
799
918
  isSuccess?: boolean;
800
919
  }
801
920
  interface FlowStartInterviewRequest {
@@ -815,6 +934,19 @@ interface FlowResumeRequest {
815
934
  interviewKey: string;
816
935
  debug?: boolean;
817
936
  }
937
+ /**
938
+ * §5.13 — `POST /interviews/{key}/stage-step`: un assegnatario conclude uno step.
939
+ * Se lo stage si sospende di nuovo, la risposta porta una `interviewKey` **nuova** e la
940
+ * vecchia non e' piu' valida.
941
+ */
942
+ interface FlowStageStepRequest {
943
+ interviewKey: string;
944
+ stepName: string;
945
+ /** `Pending` viene rifiutato come `INVALID_REQUEST`. */
946
+ status: FlowStageStepStatus;
947
+ stepOutputs?: Record<string, unknown>;
948
+ debug?: boolean;
949
+ }
818
950
  interface FlowExportQuery {
819
951
  version?: number;
820
952
  indented?: boolean;
@@ -936,10 +1068,14 @@ declare abstract class FlowBuilderApi {
936
1068
  /** `GET /flows/{name}/versions/{v}/validate` — valida una versione già salvata. */
937
1069
  validateVersion(flowName: string, version: number): Promise<FlowValidationResult>;
938
1070
  /**
939
- * `GET /flows/dictionaries`tutte le tendine statiche in una risposta.
940
- * Statiche: si caricano una volta e si tengono in cache (§6.4, §13.11).
1071
+ * `GET /flows/dictionaries?processType=` — le tendine in una risposta.
1072
+ *
1073
+ * Quasi statiche: si caricano una volta e si tengono in cache (§6.4, §13.11). L'eccezione e'
1074
+ * `globalVariables`, che dipende dal `processType`: `$Record` non esiste in uno screen flow,
1075
+ * e referenziarlo lì e' un errore, non un avviso (§4.1). Chi lavora su piu' tipi di flow
1076
+ * tiene una copia di dizionari per tipo.
941
1077
  */
942
- abstract getDictionaries(): Promise<FlowDictionaries>;
1078
+ abstract getDictionaries(processType?: string): Promise<FlowDictionaries>;
943
1079
  /**
944
1080
  * `POST /flows/references` — i valori proponibili in un campo che accetta una risorsa.
945
1081
  * Include gli **output automatici** degli elementi, che non sono dichiarati in nessuna
@@ -947,9 +1083,11 @@ declare abstract class FlowBuilderApi {
947
1083
  */
948
1084
  abstract getReferences(query: FlowReferenceQuery): Promise<FlowReference[]>;
949
1085
  /**
950
- * `POST /flows/references/writable` — solo le variabili, per i campi di destinazione.
951
- * Ai campi `assignToReference` va aggiunto `$Flow.CurrentStage` / `$Flow.ActiveStages`
952
- * se il flow dichiara stage (§5.2): quello lo fa l'editor, non la primitiva.
1086
+ * `POST /flows/references/writable` — le variabili **piu' le globali assegnabili**, per i
1087
+ * campi di destinazione: `$Flow.CurrentStage`, `$Flow.ActiveStages` e quelle che il sistema
1088
+ * ospite dichiara `isWritable`. La primitiva le comprende già, l'editor non le aggiunge
1089
+ * (§5.2). Restano fuori i campi di `$Record`, che dipendono dallo schema: quelli arrivano da
1090
+ * `listFields(object, 'updateable')` (§6.4).
953
1091
  */
954
1092
  abstract getWritableReferences(query: FlowReferenceQuery): Promise<FlowReference[]>;
955
1093
  /** `POST /flows/connector-targets?excluding=` — i node a cui un arco puo' puntare. */
@@ -1000,7 +1138,16 @@ declare abstract class FlowBuilderApi {
1000
1138
  respondToScreen(request: FlowScreenResponseRequest): Promise<FlowInterviewResult>;
1001
1139
  /** `POST /interviews/resume` — riprende un'esecuzione in pausa. */
1002
1140
  resumeInterview(request: FlowResumeRequest): Promise<FlowInterviewResult>;
1003
- /** `GET /interviews/{key}` — ispeziona una sospesa senza consumarla. */
1141
+ /**
1142
+ * `POST /interviews/{key}/stage-step` — un assegnatario conclude uno step (§5.13).
1143
+ * Se lo stage si sospende di nuovo, la risposta porta una `interviewKey` **nuova**: la
1144
+ * vecchia non e' piu' valida e va sostituita, non conservata.
1145
+ */
1146
+ completeStageStep(request: FlowStageStepRequest): Promise<FlowInterviewResult>;
1147
+ /**
1148
+ * `GET /interviews/{key}` — ispeziona una sospesa senza consumarla.
1149
+ * Con `isWaitingForStageStep` porta `stageSteps` con lo stato di ognuno (§5.13).
1150
+ */
1004
1151
  inspectInterview(interviewKey: string): Promise<FlowInterviewResult>;
1005
1152
  /** `DELETE /interviews/{key}` — abbandona. */
1006
1153
  abandonInterview(interviewKey: string): Promise<void>;
@@ -1053,7 +1200,7 @@ declare class HttpFlowBuilderApi extends FlowBuilderApi {
1053
1200
  deleteFlow(flowName: string): Promise<void>;
1054
1201
  validateDefinition(definition: FlowDefinition): Promise<FlowValidationResult>;
1055
1202
  validateVersion(flowName: string, version: number): Promise<FlowValidationResult>;
1056
- getDictionaries(): Promise<FlowDictionaries>;
1203
+ getDictionaries(processType?: string): Promise<FlowDictionaries>;
1057
1204
  getReferences(query: FlowReferenceQuery): Promise<FlowReference[]>;
1058
1205
  getWritableReferences(query: FlowReferenceQuery): Promise<FlowReference[]>;
1059
1206
  getConnectorTargets(definition: FlowDefinition, excluding?: string): Promise<FlowConnectorTarget[]>;
@@ -1075,6 +1222,7 @@ declare class HttpFlowBuilderApi extends FlowBuilderApi {
1075
1222
  startInterview(request: FlowStartInterviewRequest): Promise<FlowInterviewResult>;
1076
1223
  respondToScreen(request: FlowScreenResponseRequest): Promise<FlowInterviewResult>;
1077
1224
  resumeInterview(request: FlowResumeRequest): Promise<FlowInterviewResult>;
1225
+ completeStageStep(request: FlowStageStepRequest): Promise<FlowInterviewResult>;
1078
1226
  inspectInterview(interviewKey: string): Promise<FlowInterviewResult>;
1079
1227
  abandonInterview(interviewKey: string): Promise<void>;
1080
1228
  }
@@ -1131,7 +1279,7 @@ declare const FALLBACK_COLLECTION_BY_TYPE: Record<string, FlowNodeCollection>;
1131
1279
  declare const TYPE_BY_COLLECTION: Record<string, FlowElementType>;
1132
1280
  /** Etichette di fallback, se il dizionario non e' caricato. */
1133
1281
  declare const FALLBACK_TYPE_LABEL: Record<string, string>;
1134
- /** I tre tipi che il motore rifiuta: nascosti dalla palette (§3.2, §13.9). */
1282
+ /** I due tipi che il motore rifiuta: nascosti dalla palette (§3.2, §13.9). */
1135
1283
  declare const UNSUPPORTED_TYPES: ReadonlySet<string>;
1136
1284
  /** Elementi che espongono il proprio risultato sotto il nome dell'elemento (§4.5). */
1137
1285
  declare const TYPES_WITH_AUTOMATIC_OUTPUT: ReadonlySet<string>;
@@ -1231,6 +1379,78 @@ declare function moveCondition(holder: FlowConditionHolder, from: number, to: nu
1231
1379
  */
1232
1380
  declare function checkConditionLogic(logic: string, conditionCount: number): string | null;
1233
1381
 
1382
+ /**
1383
+ * Testo e numero non si confrontano — FRONTEND.md §4.3, §13.13.
1384
+ *
1385
+ * `Importo > "1000"` con `Importo` numerico e' `CONDITION_TYPE_MISMATCH`, un **errore** che
1386
+ * blocca l'attivazione: la conversione implicita renderebbe l'esito dipendente dal formato
1387
+ * del testo, e chi disegna il flow non ha modo di accorgersene.
1388
+ *
1389
+ * Il backend segnala solo quando conosce **entrambi** i tipi, e su un campo di un record o
1390
+ * sull'output automatico di un elemento non li conosce: il posto giusto in cui fermare
1391
+ * l'utente e' il picker, cioe' l'editor delle condizioni. Questo file e' la regola, in un
1392
+ * posto solo.
1393
+ *
1394
+ * Vale per i soli operatori di uguaglianza e ordine. `Contains`, `StartsWith`, `EndsWith`,
1395
+ * `In` e `NotIn` hanno una semantica propria e non sono soggetti alla regola; gli unari non
1396
+ * hanno un secondo operando.
1397
+ */
1398
+
1399
+ /**
1400
+ * `true` → per questo operatore i due lati devono essere compatibili.
1401
+ * `isUnary` arriva dal dizionario: un unario non ha un termine di confronto.
1402
+ */
1403
+ declare function isTypeCheckedOperator(operator: string | undefined | null, isUnary: boolean): boolean;
1404
+ declare function isNumericType(dataType: FlowDataType | undefined | null): boolean;
1405
+ /**
1406
+ * `false` solo per la coppia vietata: testo con numero.
1407
+ *
1408
+ * È l'**unica** coppia vietata. Un `Enum` confrontato con un testo resta lecito, perche' un
1409
+ * enum si confronta anche per nome; e con un tipo ignoto da un lato non si segnala nulla,
1410
+ * perche' non sapere non e' sapere che e' sbagliato.
1411
+ */
1412
+ declare function areTypesComparable(left: FlowDataType | undefined | null, right: FlowDataType | undefined | null): boolean;
1413
+ /**
1414
+ * I numeri viaggiano in **cultura invariante**: il separatore decimale e' il punto, la virgola
1415
+ * non e' accettata (§4.3). Un campo che mostra `1.234,50` deve scrivere `1234.50`.
1416
+ *
1417
+ * Accetta la virgola come separatore decimale digitato — e' quello che un utente italiano
1418
+ * scrive — e la traduce, invece di lasciare che `parseFloat` tronchi silenziosamente a `1`.
1419
+ */
1420
+ declare function parseInvariantNumber(raw: string): number | undefined;
1421
+
1422
+ /**
1423
+ * Gli step di uno stage di orchestrazione — FRONTEND.md §5.13.
1424
+ *
1425
+ * Tre regole del contratto che non si vedono guardando il tipo, e che qui stanno in un posto
1426
+ * solo perche' le usano l'inspector, lo spazio dei nomi del documento e la validazione locale:
1427
+ *
1428
+ * 1. il `name` di uno step vive nello **stesso spazio dei nomi** di node e risorse (§3.3):
1429
+ * uno step omonimo di una variabile e' `NAME_DUPLICATED`;
1430
+ * 2. l'output di uno step e' sempre referenziabile come `<NomeStep>.<NomeOutput>`, ma una
1431
+ * condizione **non** puo' referenziarlo: finche' lo step non ha girato il riferimento e'
1432
+ * irrisolvibile, e a runtime un riferimento irrisolvibile e' un errore;
1433
+ * 3. gli step non sono una sequenza: l'ordine nell'array e' solo l'ordine d'esame.
1434
+ */
1435
+
1436
+ /** I nomi di tutti gli step del documento: entrano nello spazio dei nomi comune (§3.3). */
1437
+ declare function stageStepNames(definition: FlowDefinition): string[];
1438
+ /** Gli step di uno stage, con l'array assente trattato come vuoto. */
1439
+ declare function stepsOf(stage: FlowOrchestratedStage | undefined): FlowStageStep[];
1440
+ /**
1441
+ * Il nome dello step il cui output un riferimento sta leggendo, se e' uno degli step passati.
1442
+ * `undefined` quando il riferimento e' legittimo. Serve a impedire nell'editor la condizione
1443
+ * che referenzia l'output di un altro step (§5.13, punto 4): la strada corretta e' scrivere
1444
+ * quel risultato in una variabile con `outputParameters.assignToReference` e condizionare
1445
+ * su quella.
1446
+ */
1447
+ declare function stageStepOutputReferenced(reference: string | undefined, steps: FlowStageStep[]): string | undefined;
1448
+ /**
1449
+ * L'unico output che il runtime legge da un evaluation flow di condizione. Dichiararne altri
1450
+ * e' `STAGE_ACTION_INVALID` (§5.13, punto 7).
1451
+ */
1452
+ declare const ORCHESTRATION_CONDITION_OUTPUT = "isOrchestrationConditionMet";
1453
+
1234
1454
  /** Un node come lo vede l'editor: il node piu' da dove viene. */
1235
1455
  interface FlowNodeRef {
1236
1456
  name: string;
@@ -1278,9 +1498,10 @@ declare class FlowDocumentStore {
1278
1498
  readonly nodeByName: _angular_core.Signal<Map<string, FlowNodeRef>>;
1279
1499
  readonly resources: _angular_core.Signal<FlowResourceRef[]>;
1280
1500
  /**
1281
- * §3.3 — l'insieme dei nomi già usati: node **e** risorse, un unico spazio di nomi.
1282
- * Il controllo di unicita' che guarda solo le variabili lascia passare una variabile
1283
- * omonima di un node (§13.5).
1501
+ * §3.3 — l'insieme dei nomi già usati: node, risorse **e** step di orchestrazione, un unico
1502
+ * spazio di nomi. Il controllo di unicita' che guarda solo le variabili lascia passare una
1503
+ * variabile omonima di un node (§13.5); quello che dimentica gli step lascia passare uno
1504
+ * step omonimo di una variabile, che e' `NAME_DUPLICATED` allo stesso modo (§5.13).
1284
1505
  */
1285
1506
  readonly usedNames: _angular_core.Signal<string[]>;
1286
1507
  /** Gli archi derivati dal documento, Start incluso. */
@@ -1369,11 +1590,21 @@ declare class FlowDictionaryStore {
1369
1590
  private readonly api;
1370
1591
  private readonly _dictionaries;
1371
1592
  private readonly _isLoaded;
1372
- private loading?;
1593
+ private readonly _processType;
1594
+ /** Una copia per tipo di flow: le globali dipendono dal `processType` (§4.1, §6.4). */
1595
+ private readonly cache;
1596
+ /** Cresce a ogni `load`: scarta la risposta di un caricamento superato. */
1597
+ private sequence;
1373
1598
  readonly dictionaries: _angular_core.Signal<FlowDictionaries>;
1374
1599
  readonly isLoaded: _angular_core.Signal<boolean>;
1375
- /** Idempotente: chiamabile da ogni componente che ne ha bisogno. */
1376
- load(): Promise<void>;
1600
+ /** Il `processType` dei dizionari attualmente in uso. */
1601
+ readonly processType: _angular_core.Signal<string | undefined>;
1602
+ /**
1603
+ * Idempotente: chiamabile da ogni componente che ne ha bisogno.
1604
+ * Con un `processType` diverso da quello in uso ricarica — dalla cache se c'e' già —
1605
+ * perche' cambiare tipo di flow cambia quali globali sono proponibili.
1606
+ */
1607
+ load(processType?: string): Promise<void>;
1377
1608
  readonly dataTypes: _angular_core.Signal<FlowDataTypeEntry[]>;
1378
1609
  readonly comparisonOperators: _angular_core.Signal<FlowComparisonOperatorEntry[]>;
1379
1610
  readonly assignmentOperators: _angular_core.Signal<_esfaenza_flow_builder.FlowAssignmentOperatorEntry[]>;
@@ -1390,6 +1621,8 @@ declare class FlowDictionaryStore {
1390
1621
  readonly transformTypes: _angular_core.Signal<FlowDictionaryEntry[]>;
1391
1622
  readonly transactionModels: _angular_core.Signal<FlowDictionaryEntry[]>;
1392
1623
  readonly waitEventTypes: _angular_core.Signal<FlowDictionaryEntry[]>;
1624
+ readonly stageStepTypes: _angular_core.Signal<FlowStageStepTypeEntry[]>;
1625
+ readonly assigneeTypes: _angular_core.Signal<FlowDictionaryEntry[]>;
1393
1626
  readonly conditionLogicModes: _angular_core.Signal<FlowDictionaryEntry[]>;
1394
1627
  readonly elementTypes: _angular_core.Signal<FlowElementTypeEntry[]>;
1395
1628
  /**
@@ -1423,6 +1656,22 @@ declare class FlowDictionaryStore {
1423
1656
  * Operatori applicabili al tipo del lato sinistro: `appliesTo` vuoto = qualunque tipo (§4.3).
1424
1657
  */
1425
1658
  operatorsFor(dataType: FlowDataType | undefined): FlowComparisonOperatorEntry[];
1659
+ /** La voce di `globalVariables` di uno scope: `$User`, `$Flow`, … (§4.1). */
1660
+ globalScope(scope: string | undefined | null): FlowGlobalVariableEntry | undefined;
1661
+ /**
1662
+ * §4.1 — la verificabilita' e' **per scope**: se lo scope dichiara almeno un percorso, uno
1663
+ * che non c'e' e' `GLOBAL_UNKNOWN`; se non ne dichiara nessuno, resta non verificabile, che
1664
+ * significa "non lo so", non "non esiste".
1665
+ */
1666
+ isGlobalScopeVerifiable(scope: string | undefined | null): boolean;
1667
+ /** I percorsi noti di uno scope, già prefissati: `$User.Email`. */
1668
+ globalPathsOf(scope: string | undefined | null): string[];
1669
+ /** §5.13 — la voce di `stageStepTypes` di un `actionType`. */
1670
+ stageStepType(value: string | undefined | null): FlowStageStepTypeEntry | undefined;
1671
+ /** `stepBackground` vuole `actionName`; il fallback serve se il dizionario non lo dichiara. */
1672
+ stageStepRequiresActionName(actionType: string | undefined | null): boolean;
1673
+ /** `stepInteractive` e `stepApproval` vogliono gli assegnatari (§5.13). */
1674
+ stageStepRequiresAssignees(actionType: string | undefined | null): boolean;
1426
1675
  dataType(value: string | undefined | null): FlowDataTypeEntry | undefined;
1427
1676
  /** §4.6 — `Object` ed `Enum` richiedono `objectType`. */
1428
1677
  requiresObjectType(dataType: string | undefined | null): boolean;
@@ -1868,6 +2117,12 @@ declare class ElementPaletteComponent {
1868
2117
  incompatibleHint(entry: FlowElementTypeEntry): string | null;
1869
2118
  /** Lo stesso glifo che l'elemento avra' sul canvas, così il trascinamento e' prevedibile. */
1870
2119
  iconOf(entry: FlowElementTypeEntry): string;
2120
+ /**
2121
+ * L'etichetta del ramo di fault, presa dalla mappa delle uscite invece di scrivere «ramo di
2122
+ * errore» per tutti: su uno stage di orchestrazione quel ramo **non** e' un guasto, e' lo step
2123
+ * rifiutato (§5.13). Un tipo nuovo eredita l'etichetta giusta senza toccare la palette.
2124
+ */
2125
+ faultLabel(entry: FlowElementTypeEntry): string | null;
1871
2126
  categoryClass(category: string): string;
1872
2127
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementPaletteComponent, never>;
1873
2128
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementPaletteComponent, "fb-element-palette", never, { "processType": { "alias": "processType"; "required": false; "isSignal": true; }; }, { "elementPicked": "elementPicked"; }, never, never, true, never>;
@@ -1890,11 +2145,6 @@ declare class ReferencePickerComponent {
1890
2145
  * formula e' `TARGET_NOT_WRITABLE` (§4.6).
1891
2146
  */
1892
2147
  readonly writableOnly: _angular_core.InputSignal<boolean>;
1893
- /**
1894
- * `true` → aggiunge `$Flow.CurrentStage` e `$Flow.ActiveStages` alle destinazioni.
1895
- * Sono le sole variabili globali scrivibili, e solo se il flow dichiara stage (§5.2).
1896
- */
1897
- readonly allowStageTargets: _angular_core.InputSignal<boolean>;
1898
2148
  /**
1899
2149
  * `true` → a sinistra ci va il nome di un **node**, non di una risorsa: e' il caso di
1900
2150
  * `WasVisited` e `HasError` (§4.3).
@@ -1907,8 +2157,6 @@ declare class ReferencePickerComponent {
1907
2157
  readonly isOpen: _angular_core.WritableSignal<boolean>;
1908
2158
  readonly query: _angular_core.WritableSignal<string>;
1909
2159
  constructor();
1910
- /** Le due globali di stage, aggiunte alle destinazioni quando il flow dichiara stage. */
1911
- private readonly stageTargets;
1912
2160
  readonly options: _angular_core.Signal<FlowReference[]>;
1913
2161
  /** Le opzioni raggruppate per `kind`, così gli output automatici si distinguono. */
1914
2162
  readonly groups: _angular_core.Signal<{
@@ -1923,8 +2171,10 @@ declare class ReferencePickerComponent {
1923
2171
  * - `navigated`: la radice e' nota ma c'e' un percorso dopo il punto (campo di record,
1924
2172
  * output automatico navigato): la validazione non verifica i percorsi con il punto,
1925
2173
  * quindi si accetta senza segnalare;
1926
- * - `host`: scope dell'host, non verificabile per costruzione (§4.1);
1927
- * - `unknown`: nessuna corrispondenza: si avvisa, senza bloccare.
2174
+ * - `host`: scope del sistema ospite che **non dichiara percorsi**: non verificabile (§4.1);
2175
+ * - `unknown`: nessuna corrispondenza: si avvisa, senza bloccare. Ci finisce anche il
2176
+ * percorso inesistente di uno scope che i percorsi li dichiara, perche' lì il backend
2177
+ * risponderebbe `GLOBAL_UNKNOWN`.
1928
2178
  */
1929
2179
  readonly valueState: _angular_core.Signal<"empty" | "known" | "navigated" | "host" | "unknown">;
1930
2180
  readonly hint: _angular_core.Signal<string | null>;
@@ -1939,7 +2189,121 @@ declare class ReferencePickerComponent {
1939
2189
  clear(): void;
1940
2190
  describe(reference: FlowReference): string;
1941
2191
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ReferencePickerComponent, never>;
1942
- 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; }; "allowStageTargets": { "alias": "allowStageTargets"; "required": false; "isSignal": true; }; "elementsOnly": { "alias": "elementsOnly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2192
+ 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>;
2193
+ }
2194
+
2195
+ declare class ObjectPickerComponent {
2196
+ private readonly catalog;
2197
+ readonly value: _angular_core.InputSignal<string | undefined>;
2198
+ readonly label: _angular_core.InputSignal<string>;
2199
+ readonly placeholder: _angular_core.InputSignal<string>;
2200
+ readonly disabled: _angular_core.InputSignal<boolean>;
2201
+ readonly valueChange: _angular_core.OutputEmitterRef<string | undefined>;
2202
+ private readonly objects;
2203
+ private readonly loadFailed;
2204
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
2205
+ /**
2206
+ * Il testo digitato **mentre** il pannello e' aperto: filtra l'elenco. Chiuso il pannello
2207
+ * torna a null e la casella mostra di nuovo il valore del documento, che e' l'unica
2208
+ * fonte di verita'.
2209
+ */
2210
+ private readonly query;
2211
+ constructor();
2212
+ /** Quel che si vede nella casella: il filtro se si sta digitando, il valore altrimenti. */
2213
+ readonly text: _angular_core.Signal<string>;
2214
+ readonly options: _angular_core.Signal<FlowObjectSummary[]>;
2215
+ readonly hasCatalog: _angular_core.Signal<boolean>;
2216
+ /**
2217
+ * Nome fuori catalogo: si avvisa e non si blocca. Senza catalogo non si accusa nessuno —
2218
+ * "non lo so" non e' "non esiste".
2219
+ */
2220
+ readonly isUnknown: _angular_core.Signal<boolean>;
2221
+ readonly labelOfValue: _angular_core.Signal<string | null>;
2222
+ readonly loadErrored: _angular_core.Signal<boolean>;
2223
+ open(): void;
2224
+ close(): void;
2225
+ toggle(): void;
2226
+ /** Digitare filtra **e** scrive: il nome puo' non essere in catalogo. */
2227
+ onInput(text: string): void;
2228
+ choose(object: FlowObjectSummary): void;
2229
+ clear(): void;
2230
+ describe(object: FlowObjectSummary): string;
2231
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectPickerComponent, never>;
2232
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ObjectPickerComponent, "fb-object-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; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2233
+ }
2234
+
2235
+ declare class FieldPickerComponent {
2236
+ private readonly catalog;
2237
+ readonly value: _angular_core.InputSignal<string | undefined>;
2238
+ /** L'entita' di cui elencare i campi: senza oggetto non c'e' catalogo. */
2239
+ readonly object: _angular_core.InputSignal<string | undefined>;
2240
+ readonly usage: _angular_core.InputSignal<FlowFieldUsage>;
2241
+ readonly label: _angular_core.InputSignal<string>;
2242
+ readonly placeholder: _angular_core.InputSignal<string>;
2243
+ readonly disabled: _angular_core.InputSignal<boolean>;
2244
+ readonly valueChange: _angular_core.OutputEmitterRef<string | undefined>;
2245
+ private readonly fields;
2246
+ private readonly loadFailed;
2247
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
2248
+ /** Il testo digitato mentre il pannello e' aperto: filtra l'elenco. */
2249
+ private readonly query;
2250
+ constructor();
2251
+ readonly text: _angular_core.Signal<string>;
2252
+ readonly options: _angular_core.Signal<FlowFieldDescription[]>;
2253
+ readonly hasCatalog: _angular_core.Signal<boolean>;
2254
+ /** `true` se il valore e' un percorso di relazione: non enumerabile, non verificato (§4.4). */
2255
+ readonly isRelationPath: _angular_core.Signal<boolean>;
2256
+ readonly isUnknown: _angular_core.Signal<boolean>;
2257
+ /** L'avviso dipende dall'uso: un campo puo' esistere e non essere filtrabile. */
2258
+ readonly unknownMessage: _angular_core.Signal<"Questo campo non e’ fra quelli filtrabili dell’oggetto." | "Questo campo non e’ fra quelli su cui si puo’ ordinare." | "Questo campo non e’ fra quelli aggiornabili dell’oggetto." | "Questo campo non e’ fra quelli dell’oggetto.">;
2259
+ readonly describeValue: _angular_core.Signal<string | null>;
2260
+ readonly loadErrored: _angular_core.Signal<boolean>;
2261
+ open(): void;
2262
+ close(): void;
2263
+ toggle(): void;
2264
+ onInput(text: string): void;
2265
+ choose(field: FlowFieldDescription): void;
2266
+ clear(): void;
2267
+ describe(field: FlowFieldDescription): string;
2268
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldPickerComponent, never>;
2269
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FieldPickerComponent, "fb-field-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "object": { "alias": "object"; "required": false; "isSignal": true; }; "usage": { "alias": "usage"; "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; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2270
+ }
2271
+
2272
+ interface NamePickerOption {
2273
+ name: string;
2274
+ label?: string | null;
2275
+ description?: string | null;
2276
+ }
2277
+ declare class NamePickerComponent {
2278
+ readonly value: _angular_core.InputSignal<string | undefined>;
2279
+ readonly options: _angular_core.InputSignal<NamePickerOption[]>;
2280
+ readonly label: _angular_core.InputSignal<string>;
2281
+ readonly placeholder: _angular_core.InputSignal<string>;
2282
+ readonly disabled: _angular_core.InputSignal<boolean>;
2283
+ /** Il testo dell'avviso sul nome fuori elenco: dipende da cosa si sta scegliendo. */
2284
+ readonly unknownMessage: _angular_core.InputSignal<string>;
2285
+ /** Cosa dire quando l'elenco e' vuoto: e' il caso "non lo so", non un errore. */
2286
+ readonly emptyMessage: _angular_core.InputSignal<string>;
2287
+ /** Testo monospazio: i nomi tecnici si leggono meglio, ed e' come li mostra il resto del form. */
2288
+ readonly isMono: _angular_core.InputSignal<boolean>;
2289
+ readonly valueChange: _angular_core.OutputEmitterRef<string | undefined>;
2290
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
2291
+ private readonly query;
2292
+ constructor();
2293
+ readonly text: _angular_core.Signal<string>;
2294
+ readonly visibleOptions: _angular_core.Signal<NamePickerOption[]>;
2295
+ readonly hasOptions: _angular_core.Signal<boolean>;
2296
+ readonly isUnknown: _angular_core.Signal<boolean>;
2297
+ readonly labelOfValue: _angular_core.Signal<string | null>;
2298
+ open(): void;
2299
+ close(): void;
2300
+ toggle(): void;
2301
+ onInput(text: string): void;
2302
+ choose(option: NamePickerOption): void;
2303
+ clear(): void;
2304
+ describe(option: NamePickerOption): string;
2305
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NamePickerComponent, never>;
2306
+ 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; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "isMono": { "alias": "isMono"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1943
2307
  }
1944
2308
 
1945
2309
  /** Le modalita' offerte: una per campo del modello. */
@@ -1975,12 +2339,24 @@ declare class ValueEditorComponent {
1975
2339
  readonly literalInputType: _angular_core.Signal<string>;
1976
2340
  readonly literalText: _angular_core.Signal<string>;
1977
2341
  readonly booleanValue: _angular_core.Signal<boolean>;
2342
+ /** Il fuso dichiarato nel valore data: `Z`, un offset, oppure niente = ora locale (§4.2). */
2343
+ readonly dateIsUtc: _angular_core.Signal<boolean>;
2344
+ private static readonly ZONE_PATTERN;
2345
+ private static hasZone;
2346
+ private static stripZone;
1978
2347
  readonly globalConstants: _angular_core.Signal<string[]>;
1979
- readonly numericScaleHint: _angular_core.Signal<"Usa Number per importi e quantita’: Integer troncherebbe i decimali." | null>;
2348
+ readonly numericHint: _angular_core.Signal<string | null>;
1980
2349
  setMode(mode: ValueMode): void;
1981
2350
  onReferenceChange(reference: string | undefined): void;
1982
2351
  onLiteralChange(raw: string): void;
1983
2352
  onBooleanChange(checked: boolean): void;
2353
+ private withDateZone;
2354
+ /**
2355
+ * Cambia il fuso **dichiarato**, non l'istante: `09:00Z` e `09:00` sono le nove in due fusi
2356
+ * diversi, e l'editor non converte al posto dell'utente. Riscrivere lo stesso orario con
2357
+ * l'altro fuso e' esattamente cio' che serve quando il valore e' stato inserito sbagliato.
2358
+ */
2359
+ setDateZone(utc: boolean): void;
1984
2360
  onFormulaChange(expression: string): void;
1985
2361
  onFormulaTypeChange(dataType: string): void;
1986
2362
  onGlobalConstantChange(value: string): void;
@@ -1994,23 +2370,55 @@ declare class ValueEditorComponent {
1994
2370
 
1995
2371
  declare class ConditionEditorComponent {
1996
2372
  private readonly dictionaries;
2373
+ private readonly api;
2374
+ private readonly store;
1997
2375
  /** Il contenitore: porta `conditions`, `conditionLogic` e, se serve, `formula`. */
1998
2376
  readonly holder: _angular_core.InputSignal<FlowConditionHolder>;
1999
2377
  readonly title: _angular_core.InputSignal<string>;
2000
2378
  /** `false` dove il modello non prevede la modalita' formula sull'elemento. */
2001
2379
  readonly allowFormula: _angular_core.InputSignal<boolean>;
2380
+ /**
2381
+ * `false` dove il modello porta **solo** la lista di condizioni, senza un campo per la
2382
+ * logica: gli `entryConditions` / `exitConditions` di uno step di orchestrazione (§5.13).
2383
+ * Mostrare i pulsanti della logica lì scriverebbe un campo che il contratto non prevede.
2384
+ */
2385
+ readonly allowLogic: _angular_core.InputSignal<boolean>;
2002
2386
  /** Path per ancorare i rilievi di validazione, es. `rules[Approvato]`. */
2003
2387
  readonly issuePath: _angular_core.InputSignal<string>;
2004
2388
  /** Emesso a ogni modifica: il chiamante applica la mutazione allo store. */
2005
2389
  readonly changed: _angular_core.OutputEmitterRef<(holder: FlowConditionHolder) => void>;
2006
2390
  readonly conditions: _angular_core.Signal<FlowCondition[]>;
2007
- readonly logicMode: _angular_core.Signal<"and" | "or" | "formula" | "custom">;
2391
+ /**
2392
+ * I riferimenti del documento, per conoscere il tipo del lato sinistro. Non e' un doppione
2393
+ * del picker: serve **il tipo**, che e' l'unica cosa che permette di impedire il confronto
2394
+ * fra testo e numero prima che lo dica la validazione (§4.3).
2395
+ */
2396
+ private readonly references;
2397
+ constructor();
2398
+ /** Il tipo di un riferimento, `undefined` se navigato o ignoto: lì non si segnala (§4.3). */
2399
+ private typeOfReference;
2400
+ /** Il tipo del lato sinistro: guida il secondo operando. */
2401
+ leftDataType(condition: FlowCondition): FlowDataType | undefined;
2402
+ /** Il tipo del lato destro, dedotto dal campo valorizzato o dal riferimento scelto. */
2403
+ private rightDataType;
2404
+ /**
2405
+ * `true` quando i due lati sono incompatibili: e' `CONDITION_TYPE_MISMATCH`, un errore che
2406
+ * blocca l'attivazione. L'unica coppia vietata e' testo con numero (§4.3).
2407
+ */
2408
+ hasTypeMismatch(condition: FlowCondition): boolean;
2409
+ typeMismatchMessage(condition: FlowCondition): string;
2410
+ readonly logicMode: _angular_core.Signal<"and" | "or" | "custom" | "formula">;
2008
2411
  readonly customLogic: _angular_core.Signal<string>;
2009
2412
  /** Feedback immediato sull'espressione: la verita' resta della validazione backend. */
2010
2413
  readonly customLogicError: _angular_core.Signal<string | null>;
2011
2414
  /** Con `Formula` il campo `conditions` viene **ignorato** dal motore (§4.3). */
2012
2415
  readonly conditionsIgnored: _angular_core.Signal<boolean>;
2013
- readonly operators: _angular_core.Signal<_esfaenza_flow_builder.FlowComparisonOperatorEntry[]>;
2416
+ /**
2417
+ * Gli operatori applicabili al tipo del lato sinistro: `appliesTo` del dizionario, vuoto =
2418
+ * qualunque tipo (§4.3). L'operatore già scritto si tiene comunque nell'elenco, altrimenti
2419
+ * il `select` resterebbe vuoto pur avendo un valore.
2420
+ */
2421
+ operatorsFor(condition: FlowCondition): ReturnType<FlowDictionaryStore['operatorsFor']>;
2014
2422
  isUnary(condition: FlowCondition): boolean;
2015
2423
  appliesToElements(condition: FlowCondition): boolean;
2016
2424
  /** L'esito atteso di un operatore unario: assente equivale a `true` (§4.3). */
@@ -2022,8 +2430,13 @@ declare class ConditionEditorComponent {
2022
2430
  unarySummary(condition: FlowCondition): string;
2023
2431
  operatorLabel(operator: string | undefined): string;
2024
2432
  operatorDescription(operator: string | undefined): string | null;
2025
- /** `None` consente di salvare una condizione incompleta: a runtime vale sempre falso. */
2433
+ /**
2434
+ * `None` e' uno stato dell'editor, non un operatore: la **bozza si salva, l'attivazione no**
2435
+ * (`CONDITION_INCOMPLETE`, errore). A runtime vale sempre falso (§4.3, §13.14).
2436
+ */
2026
2437
  isPlaceholderOperator(condition: FlowCondition): boolean;
2438
+ /** Quante condizioni sono da completare: si dice in testa, non solo riga per riga. */
2439
+ readonly incompleteCount: _angular_core.Signal<number>;
2027
2440
  addCondition(): void;
2028
2441
  removeCondition(index: number): void;
2029
2442
  moveCondition(index: number, direction: -1 | 1): void;
@@ -2035,7 +2448,7 @@ declare class ConditionEditorComponent {
2035
2448
  setRightValue(index: number, value: FlowValue | undefined): void;
2036
2449
  setUnaryExpectation(index: number, expectation: boolean): void;
2037
2450
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConditionEditorComponent, never>;
2038
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConditionEditorComponent, "fb-condition-editor", never, { "holder": { "alias": "holder"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "allowFormula": { "alias": "allowFormula"; "required": false; "isSignal": true; }; "issuePath": { "alias": "issuePath"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, never, never, true, never>;
2451
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConditionEditorComponent, "fb-condition-editor", never, { "holder": { "alias": "holder"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "allowFormula": { "alias": "allowFormula"; "required": false; "isSignal": true; }; "allowLogic": { "alias": "allowLogic"; "required": false; "isSignal": true; }; "issuePath": { "alias": "issuePath"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, never, never, true, never>;
2039
2452
  }
2040
2453
 
2041
2454
  /** Il contenitore dei filtri, qualunque elemento sia. */
@@ -2062,16 +2475,13 @@ declare class RecordFilterEditorComponent {
2062
2475
  * (§5.7, §13.10).
2063
2476
  */
2064
2477
  readonly emptyWarning: _angular_core.InputSignal<string | null>;
2065
- readonly emptyWarningSeverity: _angular_core.InputSignal<"error" | "warn">;
2478
+ readonly emptyWarningSeverity: _angular_core.InputSignal<"warn" | "error">;
2066
2479
  readonly changed: _angular_core.OutputEmitterRef<(holder: FilterHolder) => void>;
2067
2480
  private readonly fields;
2068
2481
  readonly filters: _angular_core.Signal<FlowRecordFilter[]>;
2069
2482
  readonly operators: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
2070
2483
  constructor();
2071
- readonly fieldOptions: _angular_core.Signal<FlowFieldDescription[]>;
2072
- /** Catalogo vuoto = "non lo so": si lascia il campo libero, non si blocca (§7). */
2073
- readonly hasFieldCatalog: _angular_core.Signal<boolean>;
2074
- readonly logicMode: _angular_core.Signal<"and" | "or" | "formula" | "custom">;
2484
+ readonly logicMode: _angular_core.Signal<"and" | "or" | "custom" | "formula">;
2075
2485
  readonly customLogic: _angular_core.Signal<string>;
2076
2486
  readonly showEmptyWarning: _angular_core.Signal<boolean>;
2077
2487
  addFilter(): void;
@@ -2085,10 +2495,11 @@ declare class RecordFilterEditorComponent {
2085
2495
  setLogicMode(mode: 'and' | 'or' | 'custom' | 'formula'): void;
2086
2496
  setCustomLogic(logic: string): void;
2087
2497
  setFormula(formula: string): void;
2088
- /** Il tipo del campo, per proporre il controllo giusto sul valore. */
2498
+ /**
2499
+ * Il tipo del campo, per proporre il controllo giusto sul valore: e' il motivo per cui il
2500
+ * catalogo resta caricato qui, e non solo dentro il picker.
2501
+ */
2089
2502
  fieldDataType(filter: FlowRecordFilter): string | undefined;
2090
- /** `true` se il campo referenzia una relazione: la validazione non lo verifica (§4.4). */
2091
- isRelationPath(filter: FlowRecordFilter): boolean;
2092
2503
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RecordFilterEditorComponent, never>;
2093
2504
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<RecordFilterEditorComponent, "fb-record-filter-editor", never, { "holder": { "alias": "holder"; "required": true; "isSignal": true; }; "object": { "alias": "object"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "usage": { "alias": "usage"; "required": false; "isSignal": true; }; "supportsLogic": { "alias": "supportsLogic"; "required": false; "isSignal": true; }; "supportsFormula": { "alias": "supportsFormula"; "required": false; "isSignal": true; }; "emptyWarning": { "alias": "emptyWarning"; "required": false; "isSignal": true; }; "emptyWarningSeverity": { "alias": "emptyWarningSeverity"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, never, never, true, never>;
2094
2505
  }
@@ -2144,7 +2555,6 @@ declare class FieldAssignmentEditorComponent {
2144
2555
  readonly changed: _angular_core.OutputEmitterRef<(holder: FieldAssignmentHolder) => void>;
2145
2556
  private readonly fields;
2146
2557
  readonly assignments: _angular_core.Signal<FlowInputFieldAssignment[]>;
2147
- readonly fieldOptions: _angular_core.Signal<FlowFieldDescription[]>;
2148
2558
  readonly hasCatalog: _angular_core.Signal<boolean>;
2149
2559
  /** Campi obbligatori dell'entita' non ancora valorizzati. */
2150
2560
  readonly missingRequired: _angular_core.Signal<FlowFieldDescription[]>;
@@ -2153,9 +2563,11 @@ declare class FieldAssignmentEditorComponent {
2153
2563
  remove(index: number): void;
2154
2564
  setField(index: number, field: string): void;
2155
2565
  setValue(index: number, value: FlowValue | undefined): void;
2566
+ /**
2567
+ * Il tipo del campo serve all'editor di valore: e' il motivo per cui il catalogo resta
2568
+ * caricato anche qui, oltre che dentro il picker.
2569
+ */
2156
2570
  describe(name: string | undefined): FlowFieldDescription | undefined;
2157
- /** Il catalogo e' popolato ma non conosce questo campo: sarebbe `FIELD_UNKNOWN`. */
2158
- isUnknown(assignment: FlowInputFieldAssignment): boolean;
2159
2571
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldAssignmentEditorComponent, never>;
2160
2572
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FieldAssignmentEditorComponent, "fb-field-assignment-editor", never, { "holder": { "alias": "holder"; "required": true; "isSignal": true; }; "object": { "alias": "object"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "disabledReason": { "alias": "disabledReason"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, never, never, true, never>;
2161
2573
  }
@@ -2298,7 +2710,6 @@ declare class ElementDialogComponent {
2298
2710
  declare class StartInspectorComponent {
2299
2711
  private readonly store;
2300
2712
  private readonly dictionaries;
2301
- private readonly catalog;
2302
2713
  private readonly validation;
2303
2714
  readonly start: _angular_core.Signal<FlowStart>;
2304
2715
  readonly startNode: _angular_core.Signal<FlowAnyNode>;
@@ -2307,10 +2718,6 @@ declare class StartInspectorComponent {
2307
2718
  readonly recordTriggerTypes: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
2308
2719
  readonly frequencies: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
2309
2720
  readonly offsetUnits: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
2310
- private readonly objects;
2311
- constructor();
2312
- readonly objectOptions: _angular_core.Signal<FlowObjectSummary[]>;
2313
- readonly hasObjectCatalog: _angular_core.Signal<boolean>;
2314
2721
  readonly triggerType: _angular_core.Signal<string>;
2315
2722
  readonly isRecordTrigger: _angular_core.Signal<boolean>;
2316
2723
  readonly isScheduled: _angular_core.Signal<boolean>;
@@ -2343,6 +2750,97 @@ declare class StartInspectorComponent {
2343
2750
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StartInspectorComponent, "fb-start-inspector", never, {}, {}, never, never, true, never>;
2344
2751
  }
2345
2752
 
2753
+ /** I due contenitori di condizioni di uno step, come li vuole l'editor condiviso. */
2754
+ interface StepConditionHolders {
2755
+ entry: FlowConditionHolder;
2756
+ exit: FlowConditionHolder;
2757
+ }
2758
+ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
2759
+ private readonly api;
2760
+ readonly elementType: FlowElementType;
2761
+ readonly stage: _angular_core.Signal<FlowOrchestratedStage>;
2762
+ readonly steps: _angular_core.Signal<FlowStageStep[]>;
2763
+ /** I tre tipi di step: `stageStepTypes` e' l'elenco autoritativo (§6.4). */
2764
+ readonly stepTypes: _angular_core.Signal<_esfaenza_flow_builder.FlowStageStepTypeEntry[]>;
2765
+ readonly assigneeTypes: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
2766
+ /** L'output che il runtime legge da un evaluation flow di condizione. */
2767
+ readonly conditionOutputName = "isOrchestrationConditionMet";
2768
+ /**
2769
+ * I flow proponibili come step in background o come evaluation flow. Una lista vuota
2770
+ * significa "non lo so": in quel caso il campo resta scrivibile a mano (§5.9, §7).
2771
+ */
2772
+ private readonly flowCandidates;
2773
+ constructor();
2774
+ /** I candidati come li vuole il picker: il nome del flow e' il suo `flowName`. */
2775
+ readonly candidateOptions: _angular_core.Signal<NamePickerOption[]>;
2776
+ /**
2777
+ * I contenitori di condizioni, uno per step, calcolati **una volta** per documento: costruirli
2778
+ * nel template creerebbe un oggetto nuovo a ogni ciclo di change detection.
2779
+ */
2780
+ readonly conditionHolders: _angular_core.Signal<StepConditionHolders[]>;
2781
+ requiresActionName(step: FlowStageStep): boolean;
2782
+ requiresAssignees(step: FlowStageStep): boolean;
2783
+ /** Il rifiuto e' un esito previsto solo per l'approvazione: e' lì che serve il ramo. */
2784
+ supportsRejection(step: FlowStageStep): boolean;
2785
+ stepTypeDescription(step: FlowStageStep): string | null;
2786
+ /** Un `actionType` che il dizionario non conosce: sarebbe `STAGE_STEP_TYPE_UNKNOWN`. */
2787
+ isUnknownStepType(step: FlowStageStep): boolean;
2788
+ /**
2789
+ * Il nome dello step: stessa regola dei node, sullo spazio dei nomi comune (§3.3).
2790
+ * L'unicita' si conta sulle occorrenze in `usedNames`, che gli step li comprende già: una
2791
+ * sola occorrenza e' questo step, due sono un omonimo.
2792
+ */
2793
+ stepNameError(step: FlowStageStep): string | null;
2794
+ /**
2795
+ * Il nome dello step il cui output una condizione sta leggendo: e' irrisolvibile finche'
2796
+ * quello step non ha girato (§5.13, punto 4). `undefined` quando va tutto bene.
2797
+ */
2798
+ stepOutputInConditions(step: FlowStageStep): string | undefined;
2799
+ /** Lo step tiene un output senza destinazione: e' lecito, ma vale la pena dirlo. */
2800
+ hasSimulatedOutputs(step: FlowStageStep): boolean;
2801
+ addStep(): void;
2802
+ removeStep(index: number): void;
2803
+ /** Sposta lo step nell'ordine d'**esame**: non e' un ordine di esecuzione (§5.13). */
2804
+ moveStep(index: number, direction: -1 | 1): void;
2805
+ private patchStep;
2806
+ setStepLabel(index: number, label: string): void;
2807
+ setStepName(index: number, name: string): void;
2808
+ setStepDescription(index: number, description: string): void;
2809
+ /**
2810
+ * Cambiare tipo cambia cosa lo step pretende: gli assegnatari non hanno senso su uno step in
2811
+ * background, e `actionName` non ne ha su uno assegnato. I campi che il nuovo tipo non
2812
+ * prevede si rimuovono, invece di restare nel documento a dire una cosa che non vale piu'.
2813
+ */
2814
+ setStepType(index: number, actionType: string): void;
2815
+ setStepActionName(index: number, actionName: string): void;
2816
+ setMultiMemberApproval(index: number, required: boolean): void;
2817
+ isMultiMemberApproval(step: FlowStageStep): boolean;
2818
+ setSimulateStep(index: number, simulate: boolean): void;
2819
+ assigneesOf(step: FlowStageStep): FlowStageStepAssignee[];
2820
+ addAssignee(index: number): void;
2821
+ removeAssignee(stepIndex: number, assigneeIndex: number): void;
2822
+ setAssigneeType(stepIndex: number, assigneeIndex: number, assigneeType: string): void;
2823
+ setAssigneeValue(stepIndex: number, assigneeIndex: number, value: FlowValue | undefined): void;
2824
+ /** Assegnatario senza tipo o senza valore: e' `STAGE_STEP_ASSIGNEE_INVALID`. */
2825
+ isAssigneeIncomplete(assignee: FlowStageStepAssignee): boolean;
2826
+ /**
2827
+ * Le condizioni di uno step sono condizioni come le altre (§4.3), ma il modello porta solo
2828
+ * la lista: `conditionLogic` e `formula` non esistono e non vanno scritti.
2829
+ */
2830
+ onEntryConditionsChanged(index: number, mutate: (holder: FlowConditionHolder) => void): void;
2831
+ onExitConditionsChanged(index: number, mutate: (holder: FlowConditionHolder) => void): void;
2832
+ private applyConditions;
2833
+ setEntryActionName(index: number, actionName: string): void;
2834
+ setExitActionName(index: number, actionName: string): void;
2835
+ onParametersChanged(index: number, mutate: (holder: ParameterHolder) => void): void;
2836
+ /** Il ramo del rifiuto e' disegnato: senza, un rifiuto fa fallire l'interview (§5.13). */
2837
+ readonly hasRejectionBranch: _angular_core.Signal<boolean>;
2838
+ /** C'e' almeno uno step il cui rifiuto e' un esito previsto. */
2839
+ readonly hasApprovalStep: _angular_core.Signal<boolean>;
2840
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OrchestratedStageInspectorComponent, never>;
2841
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OrchestratedStageInspectorComponent, "fb-orchestrated-stage-inspector", never, {}, {}, never, never, true, never>;
2842
+ }
2843
+
2346
2844
  interface ResourceKindDescriptor {
2347
2845
  collection: FlowResourceCollection;
2348
2846
  label: string;
@@ -2359,14 +2857,12 @@ declare class ResourcePanelComponent {
2359
2857
  readonly kinds: ResourceKindDescriptor[];
2360
2858
  readonly dataTypes: _angular_core.Signal<_esfaenza_flow_builder.FlowDataTypeEntry[]>;
2361
2859
  readonly sortOrders: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
2362
- private readonly objects;
2363
2860
  private readonly enumTypes;
2364
2861
  /** La collection aperta nel pannello. */
2365
2862
  readonly activeCollection: _angular_core.WritableSignal<"variables" | "constants" | "formulas" | "textTemplates" | "choices" | "dynamicChoiceSets" | "stages">;
2366
2863
  /** L'indice della risorsa in modifica, o `null`. */
2367
2864
  readonly editingIndex: _angular_core.WritableSignal<number | null>;
2368
2865
  constructor();
2369
- readonly objectOptions: _angular_core.Signal<FlowObjectSummary[]>;
2370
2866
  readonly enumOptions: _angular_core.Signal<FlowCatalogEntry[]>;
2371
2867
  readonly activeKind: _angular_core.Signal<ResourceKindDescriptor>;
2372
2868
  readonly items: _angular_core.Signal<FlowResourceRef[]>;
@@ -2471,6 +2967,13 @@ declare class DebugPanelComponent {
2471
2967
  readonly status: _angular_core.Signal<string | null>;
2472
2968
  readonly pendingScreen: _angular_core.Signal<_esfaenza_flow_builder.FlowPendingScreen | null>;
2473
2969
  readonly isWaitingForScreen: _angular_core.Signal<boolean>;
2970
+ /** §5.13 — l'attesa e' su uno step assegnato a una persona, non su un evento. */
2971
+ readonly isWaitingForStageStep: _angular_core.Signal<boolean>;
2972
+ readonly stageSteps: _angular_core.Signal<FlowStageStepState[]>;
2973
+ /** Lo step su cui c'e' un work item aperto: e' quello che si puo' concludere. */
2974
+ readonly waitingStageSteps: _angular_core.Signal<FlowStageStepState[]>;
2975
+ /** I valori con cui si conclude uno step, per nome di output. */
2976
+ readonly stepOutputs: _angular_core.WritableSignal<Record<string, string>>;
2474
2977
  readonly trace: _angular_core.Signal<_esfaenza_flow_builder.FlowTraceEntry[]>;
2475
2978
  /** Le risorse come righe ordinate: il tipo dichiarato vince in lettura (§6.5). */
2476
2979
  readonly resourceRows: _angular_core.Signal<{
@@ -2499,6 +3002,14 @@ declare class DebugPanelComponent {
2499
3002
  private coerceInputs;
2500
3003
  start(): Promise<void>;
2501
3004
  respond(navigation: FlowScreenNavigation): Promise<void>;
3005
+ setStepOutput(name: string, value: string): void;
3006
+ /** Gli output dichiarati dallo step, per generare i campi da compilare. */
3007
+ stepOutputNames(stepName: string | undefined): string[];
3008
+ /**
3009
+ * Conclude uno step come farebbe l'assegnatario. `Rejected` non e' un errore: e' l'esito che
3010
+ * prende il ramo «Step rifiutato» dello stage — e se quel ramo non c'e', l'interview fallisce.
3011
+ */
3012
+ completeStep(stepName: string | undefined, status: FlowStageStepStatus): Promise<void>;
2502
3013
  private apply;
2503
3014
  private handleError;
2504
3015
  reset(): void;
@@ -2588,8 +3099,11 @@ declare class FlowBuilderComponent {
2588
3099
  readonly hasScreensInAutoLaunched: _angular_core.Signal<boolean>;
2589
3100
  /** Un flow `Screen` senza screen e' `SCREEN_FLOW_WITHOUT_SCREENS`. */
2590
3101
  readonly hasNoScreensInScreenFlow: _angular_core.Signal<boolean>;
2591
- /** `Orchestration` non e' eseguibile dal motore. */
2592
- readonly isOrchestration: _angular_core.Signal<boolean>;
3102
+ /**
3103
+ * Un flow `Orchestration` senza stage di orchestrazione e' un **avviso**
3104
+ * (`ORCHESTRATION_WITHOUT_STAGES`): il tipo dichiara un'orchestrazione che non c'e' (§3.1).
3105
+ */
3106
+ readonly isOrchestrationWithoutStages: _angular_core.Signal<boolean>;
2593
3107
  /**
2594
3108
  * Click singolo sul canvas: seleziona. Con la dialog il form **non** si apre qui: un click
2595
3109
  * capita anche solo per spostare un node, e una finestra che si apre a ogni click sarebbe
@@ -2662,5 +3176,5 @@ declare class SelectValueDirective implements AfterViewChecked {
2662
3176
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectValueDirective, "select[fbValue]", never, { "fbValue": { "alias": "fbValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2663
3177
  }
2664
3178
 
2665
- export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FieldAssignmentEditorComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, HttpFlowBuilderApi, NodeInspectorBase, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, canvasNodeId, checkConditionLogic, checkFlowName, elementIcon, emptyFlowDefinition, flowNodeWidth, flowNodeWidthClass, isCustomConditionLogic, isGlobalReference, isValidFlowName, moveCondition, outletByKey, outletsOf, parseCanvasNodeId, parseSourceConnectorId, parseTargetConnectorId, referenceRoot, remapConditionLogic, removeCondition, slugifyFlowName, sourceConnectorId, targetConnectorId, uniqueFlowName };
2666
- 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, FlowEdge, FlowElementType, FlowElementTypeEntry, FlowErrorCategory, FlowExportQuery, FlowFieldDescription, FlowFieldUsage, FlowFieldValue, FlowFormula, FlowGlobalVariableEntry, FlowInputFieldAssignment, FlowInputParameter, FlowInterviewResult, FlowInterviewStatus, FlowIssueSeverity, FlowLayoutDirection, FlowLayoutNodeInput, FlowLayoutOptions, FlowLayoutResult, FlowListQuery, FlowLoop, FlowNameCheck, FlowNameProblem, FlowNewVersionRequest, FlowNodeBase, FlowNodeCollection, FlowNodeRef, FlowObjectDescription, FlowObjectSummary, FlowOffsetUnit, FlowOutlet, FlowOutline, FlowOutlineConnection, FlowOutlineNode, FlowOutputFieldAssignment, FlowOutputParameter, FlowPendingScreen, FlowProcessType, FlowRecordCreate, FlowRecordDelete, FlowRecordFilter, FlowRecordFilterOperator, FlowRecordLookup, FlowRecordRollback, FlowRecordTriggerType, FlowRecordUpdate, FlowReference, FlowReferenceKind, FlowReferenceQuery, FlowResourceCollection, FlowResourceKindEntry, FlowResourceRef, FlowResumeRequest, FlowSaveRequest, FlowSaveResult, FlowSchedule, FlowScheduledPath, FlowScreen, FlowScreenNavigation, FlowScreenResponseRequest, FlowScriptPluginCall, FlowSortOption, FlowSortOrder, FlowStage, FlowStart, FlowStartInterviewRequest, FlowSubflow, FlowSubflowInputAssignment, FlowSubflowOutputAssignment, FlowSummary, FlowTextTemplate, FlowTraceEntry, FlowTransactionModel, FlowTransform, FlowTransformType, FlowTransformValue, FlowTransformValueAction, FlowTriggerType, FlowTypedValue, FlowUnsupportedNode, FlowValidationIssue, FlowValidationResult, FlowValue, FlowVariable, FlowVersionStatus, FlowVersionSummary, FlowWait, FlowWaitEvent, ParameterHolder, ValueMode };
3179
+ export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, areTypesComparable, canvasNodeId, checkConditionLogic, checkFlowName, elementIcon, emptyFlowDefinition, flowNodeWidth, flowNodeWidthClass, isCustomConditionLogic, isGlobalReference, isNumericType, isTypeCheckedOperator, isValidFlowName, moveCondition, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, referenceRoot, remapConditionLogic, removeCondition, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, uniqueFlowName };
3180
+ 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, FlowEdge, FlowElementType, FlowElementTypeEntry, FlowErrorCategory, FlowExportQuery, FlowFieldDescription, FlowFieldUsage, FlowFieldValue, FlowFormula, 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, FlowPendingScreen, FlowProcessType, FlowRecordCreate, FlowRecordDelete, FlowRecordFilter, FlowRecordFilterOperator, FlowRecordLookup, FlowRecordRollback, FlowRecordTriggerType, FlowRecordUpdate, FlowReference, FlowReferenceKind, FlowReferenceQuery, FlowResourceCollection, FlowResourceKindEntry, FlowResourceRef, FlowResumeRequest, FlowSaveRequest, FlowSaveResult, FlowSchedule, FlowScheduledPath, FlowScreen, FlowScreenNavigation, FlowScreenResponseRequest, FlowScriptPluginCall, FlowSortOption, FlowSortOrder, FlowStage, FlowStageStep, FlowStageStepActionType, FlowStageStepAssignee, FlowStageStepConditionActionType, FlowStageStepRequest, FlowStageStepState, FlowStageStepStatus, FlowStageStepTypeEntry, FlowStart, FlowStartInterviewRequest, FlowSubflow, FlowSubflowInputAssignment, FlowSubflowOutputAssignment, FlowSummary, FlowTextTemplate, FlowTraceEntry, FlowTransactionModel, FlowTransform, FlowTransformType, FlowTransformValue, FlowTransformValueAction, FlowTriggerType, FlowTypedValue, FlowUnsupportedNode, FlowValidationIssue, FlowValidationResult, FlowValue, FlowVariable, FlowVersionStatus, FlowVersionSummary, FlowWait, FlowWaitEvent, NamePickerOption, ParameterHolder, ValueMode };