@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/README.md +393 -354
- package/fesm2022/esfaenza-flow-builder.mjs +1459 -244
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +575 -61
- package/package.json +1 -1
- package/styles/flow-builder.css +25 -0
package/index.d.ts
CHANGED
|
@@ -34,7 +34,11 @@ interface FlowValue {
|
|
|
34
34
|
stringValue?: string;
|
|
35
35
|
integerValue?: number;
|
|
36
36
|
numberValue?: number;
|
|
37
|
-
/**
|
|
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", "
|
|
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' | '
|
|
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
|
-
/**
|
|
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
|
|
586
|
+
/** Percorsi noti dello scope. Vuoto → lo scope non e' verificabile (§4.1). */
|
|
516
587
|
paths?: string[] | null;
|
|
517
|
-
/** `true` →
|
|
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 —
|
|
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
|
-
/**
|
|
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
|
|
940
|
-
*
|
|
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` —
|
|
951
|
-
*
|
|
952
|
-
*
|
|
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
|
-
/**
|
|
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
|
|
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**
|
|
1282
|
-
* Il controllo di unicita' che guarda solo le variabili lascia passare una
|
|
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
|
|
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
|
-
/**
|
|
1376
|
-
|
|
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
|
|
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; }; "
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
/**
|
|
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<"
|
|
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
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
2592
|
-
|
|
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 };
|