@esfaenza/flow-builder 20.3.14 → 20.3.16
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 +72 -4
- package/fesm2022/esfaenza-flow-builder.mjs +1528 -33
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +661 -16
- package/package.json +2 -1
- package/styles/flow-builder.css +35 -0
package/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as _angular_core from '@angular/core';
|
|
|
2
2
|
import { InjectionToken, Signal, AfterViewChecked } from '@angular/core';
|
|
3
3
|
import * as _esfaenza_flow_builder from '@esfaenza/flow-builder';
|
|
4
4
|
import { EFMarkerType, EFConnectableSide } from '@foblex/flow';
|
|
5
|
+
import { CdkDragMove, CdkDragEnd } from '@angular/cdk/drag-drop';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Modello del documento Flow — FRONTEND.md §3, §4, §5.
|
|
@@ -131,7 +132,11 @@ interface FlowFormula {
|
|
|
131
132
|
description?: string;
|
|
132
133
|
dataType?: FlowDataType;
|
|
133
134
|
scale?: number;
|
|
134
|
-
/**
|
|
135
|
+
/**
|
|
136
|
+
* Passata verbatim al motore di regole: il backend non la interpreta, ma la fa **verificare**
|
|
137
|
+
* al motore — `POST /flows/validate-formula` mentre si digita, e la stessa cosa durante la
|
|
138
|
+
* validazione del documento (§4.6, §6.3).
|
|
139
|
+
*/
|
|
135
140
|
expression?: string;
|
|
136
141
|
}
|
|
137
142
|
interface FlowTextTemplate {
|
|
@@ -188,6 +193,91 @@ interface FlowScreen extends FlowNodeBase {
|
|
|
188
193
|
outputParameters?: FlowOutputParameter[];
|
|
189
194
|
connector?: FlowConnector;
|
|
190
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* §5.2 — il tipo di un campo di screen dinamico. L'elenco autoritativo e' il dizionario
|
|
198
|
+
* `screenFieldTypes`, che porta anche i flag (`storesValue`, `isContainer`, …) con cui
|
|
199
|
+
* l'editor decide quali campi mostrare: qui il tipo e' aperto proprio per quello.
|
|
200
|
+
*/
|
|
201
|
+
type FlowScreenFieldType = 'DisplayText' | 'InputField' | 'LargeTextArea' | 'PasswordField' | 'RadioButtons' | 'DropdownBox' | 'MultiSelectCheckboxes' | 'MultiSelectPicklist' | 'ComponentInstance' | 'Region' | 'RegionContainer' | 'ObjectProvided' | string;
|
|
202
|
+
/** §5.2 — la sezione con o senza intestazione. */
|
|
203
|
+
type FlowRegionContainerType = 'SectionWithHeader' | 'SectionWithoutHeader' | string;
|
|
204
|
+
/** §5.2 — cosa succede ai valori quando si torna sulla schermata. */
|
|
205
|
+
type FlowScreenFieldInputsRevisited = 'UseStoredValues' | 'ResetValues' | string;
|
|
206
|
+
/** §5.2 — regola di validazione di un campo: espressione piu' messaggio d'errore. */
|
|
207
|
+
interface FlowScreenValidationRule {
|
|
208
|
+
formulaExpression?: string;
|
|
209
|
+
errorMessage?: string;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* §5.2 — un campo di uno screen dinamico.
|
|
213
|
+
*
|
|
214
|
+
* Due cose che il tipo non dice da solo:
|
|
215
|
+
* - un campo che raccoglie un valore **e' una risorsa del flow**, referenziabile per nome e di
|
|
216
|
+
* sola lettura (`kind: "ScreenField"`, §4.6): il suo `name` vive nello stesso spazio dei nomi
|
|
217
|
+
* di node e risorse (§3.3), e un Assignment che ci scrive e' `TARGET_NOT_WRITABLE`;
|
|
218
|
+
* - `fields` esiste solo sui contenitori (`Region`, `RegionContainer`) e l'annidamento previsto
|
|
219
|
+
* e' **sezione → colonne → campi**: piu' profondo di così e' un avviso.
|
|
220
|
+
*/
|
|
221
|
+
interface FlowScreenField {
|
|
222
|
+
name?: string;
|
|
223
|
+
/** Obbligatorio: senza, `SCREEN_FIELD_TYPE_MISSING`. */
|
|
224
|
+
fieldType?: FlowScreenFieldType;
|
|
225
|
+
/** La label; per `DisplayText` e' il testo stesso. Supporta i merge field `{!...}`. */
|
|
226
|
+
fieldText?: string;
|
|
227
|
+
helpText?: string;
|
|
228
|
+
/** Obbligatorio dove il tipo `storesValue`, tranne `ObjectProvided` (§5.2). */
|
|
229
|
+
dataType?: FlowDataType;
|
|
230
|
+
objectType?: string;
|
|
231
|
+
isRequired?: boolean;
|
|
232
|
+
/** Default `true`. A `false` il runtime **ignora** cio' che il client rimanda indietro. */
|
|
233
|
+
isEditable?: boolean;
|
|
234
|
+
defaultValue?: FlowValue;
|
|
235
|
+
/** Nome di una choice; fuori da `choiceReferences` e' un avviso. */
|
|
236
|
+
defaultSelectedChoiceReference?: string;
|
|
237
|
+
/** Nomi di `FlowChoice` o `FlowDynamicChoiceSet`, **nell'ordine di presentazione**. */
|
|
238
|
+
choiceReferences?: string[];
|
|
239
|
+
scale?: number;
|
|
240
|
+
maxLength?: number;
|
|
241
|
+
/** 1..12 nella griglia della schermata: il frontend puo' ignorarla. */
|
|
242
|
+
width?: number;
|
|
243
|
+
/** Solo sui contenitori: sezione → colonne → campi. */
|
|
244
|
+
fields?: FlowScreenField[];
|
|
245
|
+
regionContainerType?: FlowRegionContainerType;
|
|
246
|
+
/** `ComponentInstance`: il componente del frontend, dal catalogo dei form. */
|
|
247
|
+
extensionName?: string;
|
|
248
|
+
inputParameters?: FlowInputParameter[];
|
|
249
|
+
outputParameters?: FlowOutputParameter[];
|
|
250
|
+
/** Insieme a `outputParameters` e' `OUTPUT_CONFIGURATION_CONFLICT` (§5.2). */
|
|
251
|
+
storeOutputAutomatically?: boolean;
|
|
252
|
+
/** `ObjectProvided`: forma `<Oggetto>.<Campo>`. */
|
|
253
|
+
objectFieldReference?: string;
|
|
254
|
+
inputsOnNextNavToAssocScrn?: FlowScreenFieldInputsRevisited;
|
|
255
|
+
validationRule?: FlowScreenValidationRule;
|
|
256
|
+
/** Come una regola di Decision: rivalutata sui valori appena inviati (§5.2). */
|
|
257
|
+
visibilityRule?: FlowConditionHolder;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* §5.2 — lo screen dinamico: **descrive i propri campi**, invece di referenziare un form.
|
|
261
|
+
*
|
|
262
|
+
* E' il complemento dello Screen a form (§5.1), non il suo sostituto: convivono nello stesso
|
|
263
|
+
* flow e il motore li tratta allo stesso modo. Cambia chi decide il layout.
|
|
264
|
+
*/
|
|
265
|
+
interface FlowDynamicScreen extends FlowNodeBase {
|
|
266
|
+
helpText?: string;
|
|
267
|
+
allowBack?: boolean;
|
|
268
|
+
allowFinish?: boolean;
|
|
269
|
+
allowPause?: boolean;
|
|
270
|
+
pausedText?: string;
|
|
271
|
+
showHeader?: boolean;
|
|
272
|
+
showFooter?: boolean;
|
|
273
|
+
backButtonLabel?: string;
|
|
274
|
+
nextOrFinishButtonLabel?: string;
|
|
275
|
+
pauseButtonLabel?: string;
|
|
276
|
+
/** Nome di uno stage dichiarato: alimenta l'indicatore di avanzamento. */
|
|
277
|
+
stageReference?: string;
|
|
278
|
+
fields?: FlowScreenField[];
|
|
279
|
+
connector?: FlowConnector;
|
|
280
|
+
}
|
|
191
281
|
type FlowAssignmentOperator = 'Assign' | 'Add' | 'Subtract' | 'AddAtStart' | 'AssignCount' | 'RemoveFirst' | 'RemoveAll' | 'RemovePosition' | 'RemoveAfterFirst' | 'RemoveBeforeFirst' | 'RemoveUncommon' | string;
|
|
192
282
|
interface FlowAssignmentItem {
|
|
193
283
|
assignToReference?: string;
|
|
@@ -504,6 +594,7 @@ interface FlowDefinition {
|
|
|
504
594
|
dynamicChoiceSets?: FlowDynamicChoiceSet[];
|
|
505
595
|
stages?: FlowStage[];
|
|
506
596
|
screens?: FlowScreen[];
|
|
597
|
+
dynamicScreens?: FlowDynamicScreen[];
|
|
507
598
|
assignments?: FlowAssignment[];
|
|
508
599
|
decisions?: FlowDecision[];
|
|
509
600
|
loops?: FlowLoop[];
|
|
@@ -530,13 +621,13 @@ interface FlowDefinition {
|
|
|
530
621
|
customProperties?: FlowCustomProperty[];
|
|
531
622
|
}
|
|
532
623
|
/** Le collection di node: `metadataProperty` del dizionario `elementTypes` (§3.2). */
|
|
533
|
-
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"];
|
|
624
|
+
declare const FLOW_NODE_COLLECTIONS: readonly ["screens", "dynamicScreens", "assignments", "decisions", "loops", "collectionProcessors", "recordLookups", "recordCreates", "recordUpdates", "recordDeletes", "recordRollbacks", "actionCalls", "scriptPluginCalls", "subflows", "transforms", "waits", "customErrors", "orchestratedStages", "steps", "experiments"];
|
|
534
625
|
type FlowNodeCollection = (typeof FLOW_NODE_COLLECTIONS)[number];
|
|
535
626
|
/** Le collection di risorse (§4.6). Condividono lo spazio dei nomi con i node (§3.3). */
|
|
536
627
|
declare const FLOW_RESOURCE_COLLECTIONS: readonly ["variables", "constants", "formulas", "textTemplates", "choices", "dynamicChoiceSets", "stages"];
|
|
537
628
|
type FlowResourceCollection = (typeof FLOW_RESOURCE_COLLECTIONS)[number];
|
|
538
629
|
/** Il discriminatore `value` del dizionario `elementTypes`. */
|
|
539
|
-
type FlowElementType = 'Screen' | 'Assignment' | 'Decision' | 'Loop' | 'CollectionProcessor' | 'CustomError' | 'Wait' | 'RecordLookup' | 'RecordCreate' | 'RecordUpdate' | 'RecordDelete' | 'RecordRollback' | 'ActionCall' | 'ScriptCall' | 'Subflow' | 'Transform' | 'OrchestratedStage' | 'Step' | 'Experiment' | string;
|
|
630
|
+
type FlowElementType = 'Screen' | 'DynamicScreen' | 'Assignment' | 'Decision' | 'Loop' | 'CollectionProcessor' | 'CustomError' | 'Wait' | 'RecordLookup' | 'RecordCreate' | 'RecordUpdate' | 'RecordDelete' | 'RecordRollback' | 'ActionCall' | 'ScriptCall' | 'Subflow' | 'Transform' | 'OrchestratedStage' | 'Step' | 'Experiment' | string;
|
|
540
631
|
/** Un node qualunque, come lo vede il canvas. */
|
|
541
632
|
type FlowAnyNode = FlowNodeBase & Record<string, unknown>;
|
|
542
633
|
|
|
@@ -629,6 +720,27 @@ interface FlowStageStepTypeEntry extends FlowDictionaryEntry {
|
|
|
629
720
|
/** `true` → il rifiuto e' un esito previsto, e prende il `faultConnector` dello stage. */
|
|
630
721
|
supportsRejection?: boolean;
|
|
631
722
|
}
|
|
723
|
+
/**
|
|
724
|
+
* §5.2, §6.4 — un tipo di campo di screen dinamico.
|
|
725
|
+
*
|
|
726
|
+
* E' l'unica voce di dizionario che porta piu' di `value`/`label`/`description`, e i flag non
|
|
727
|
+
* sono un di piu': sono **gli stessi** che applica il runtime. Reimplementarli lato editor
|
|
728
|
+
* porta prima o poi a proporre una configurazione che il motore rifiuta — un `dataType` su un
|
|
729
|
+
* `DisplayText`, delle choice su una textarea.
|
|
730
|
+
*/
|
|
731
|
+
interface FlowScreenFieldTypeEntry extends FlowDictionaryEntry {
|
|
732
|
+
value: FlowScreenFieldType;
|
|
733
|
+
/** Il campo raccoglie un valore: e' una risorsa del flow, e vuole `dataType`, default, … */
|
|
734
|
+
storesValue?: boolean;
|
|
735
|
+
/** Il valore raccolto e' una **collection**, non una stringa con i valori concatenati. */
|
|
736
|
+
isCollection?: boolean;
|
|
737
|
+
/** Il campo si configura con `choiceReferences`. */
|
|
738
|
+
acceptsChoices?: boolean;
|
|
739
|
+
/** Il campo contiene altri campi (`Region`, `RegionContainer`). */
|
|
740
|
+
isContainer?: boolean;
|
|
741
|
+
/** `dataType` obbligatorio: senza, `DATA_TYPE_MISSING`. */
|
|
742
|
+
requiresDataType?: boolean;
|
|
743
|
+
}
|
|
632
744
|
interface FlowResourceKindEntry extends FlowDictionaryEntry {
|
|
633
745
|
/** Solo le variabili sono scrivibili (§4.6). */
|
|
634
746
|
isWritable?: boolean;
|
|
@@ -667,6 +779,12 @@ interface FlowDictionaries {
|
|
|
667
779
|
assigneeTypes?: FlowDictionaryEntry[];
|
|
668
780
|
conditionLogicModes?: FlowDictionaryEntry[];
|
|
669
781
|
screenNavigations?: FlowDictionaryEntry[];
|
|
782
|
+
/** §5.2 — i tipi di campo di uno screen dinamico, con i flag che guidano il form. */
|
|
783
|
+
screenFieldTypes?: FlowScreenFieldTypeEntry[];
|
|
784
|
+
/** §5.2 — `SectionWithHeader` | `SectionWithoutHeader`. */
|
|
785
|
+
regionContainerTypes?: FlowDictionaryEntry[];
|
|
786
|
+
/** §5.2 — `UseStoredValues` | `ResetValues` (`inputsOnNextNavToAssocScrn`). */
|
|
787
|
+
screenFieldInputsRevisited?: FlowDictionaryEntry[];
|
|
670
788
|
}
|
|
671
789
|
interface FlowObjectSummary {
|
|
672
790
|
name: string;
|
|
@@ -840,6 +958,50 @@ interface FlowValidationResult {
|
|
|
840
958
|
warningCount: number;
|
|
841
959
|
isValid: boolean;
|
|
842
960
|
}
|
|
961
|
+
/**
|
|
962
|
+
* Dove comparira' l'espressione. Non e' cosmesi: e' cio' che permette al motore di dire
|
|
963
|
+
* «qui serve un booleano» invece di accettare un'espressione che poi fallira' a runtime (§6.3).
|
|
964
|
+
*/
|
|
965
|
+
type FlowFormulaUsage = 'Resource' | 'Condition' | 'ValidationRule' | 'Value' | string;
|
|
966
|
+
/**
|
|
967
|
+
* L'unica primitiva della §6.3 che **avvolge** il documento invece di prenderlo nudo: oltre al
|
|
968
|
+
* flow deve portare l'espressione e cosa ci si aspetta che produca (§6.4, ultimo capoverso).
|
|
969
|
+
* Il documento va mandato **in lavorazione**: una formula cita le variabili appena aggiunte, e
|
|
970
|
+
* verificarla contro la versione salvata la direbbe sbagliata.
|
|
971
|
+
*/
|
|
972
|
+
interface FlowFormulaValidationRequest {
|
|
973
|
+
flow: FlowDefinition;
|
|
974
|
+
expression: string;
|
|
975
|
+
/** `Boolean` per una condizione o una validation rule, il tipo dichiarato per una risorsa. */
|
|
976
|
+
expectedDataType?: FlowDataType;
|
|
977
|
+
usage?: FlowFormulaUsage;
|
|
978
|
+
/** Solo dove il tipo atteso e' `Number` o `Integer` (§4.6). */
|
|
979
|
+
scale?: number;
|
|
980
|
+
}
|
|
981
|
+
/**
|
|
982
|
+
* Come {@link FlowValidationIssue}, piu' la **posizione del tratto sbagliato** dentro
|
|
983
|
+
* l'espressione: e' il motivo per cui questa primitiva esiste accanto a `POST /flows/validate`.
|
|
984
|
+
* `code` resta del motore: l'elenco della §7 non lo comprende, quindi si mostra e non si
|
|
985
|
+
* interpreta.
|
|
986
|
+
*/
|
|
987
|
+
interface FlowFormulaIssue extends FlowValidationIssue {
|
|
988
|
+
/** Indice del primo carattere, 0-based. Puo' mancare: non ogni rilievo ha una posizione. */
|
|
989
|
+
position?: number | null;
|
|
990
|
+
length?: number | null;
|
|
991
|
+
}
|
|
992
|
+
interface FlowFormulaValidationResult {
|
|
993
|
+
issues: FlowFormulaIssue[];
|
|
994
|
+
/** Il tipo che l'espressione produce, quando il motore sa dirlo. Puo' mancare. */
|
|
995
|
+
resultDataType?: FlowDataType | null;
|
|
996
|
+
isCollection?: boolean;
|
|
997
|
+
/**
|
|
998
|
+
* `false` significa «nessun motore di validazione configurato»: nessun rilievo, ma nemmeno
|
|
999
|
+
* una conferma. **Non e' una promozione** — una spunta verde su un'espressione mai
|
|
1000
|
+
* controllata e' peggio di nessuna spunta (§6.3).
|
|
1001
|
+
*/
|
|
1002
|
+
isVerified: boolean;
|
|
1003
|
+
isValid: boolean;
|
|
1004
|
+
}
|
|
843
1005
|
interface FlowCreateRequest {
|
|
844
1006
|
definition: FlowDefinition;
|
|
845
1007
|
flowName?: string;
|
|
@@ -1191,6 +1353,21 @@ declare abstract class FlowBuilderApi {
|
|
|
1191
1353
|
abstract validateDefinition(definition: FlowDefinition): Promise<FlowValidationResult>;
|
|
1192
1354
|
/** `GET /flows/{name}/versions/{v}/validate` — valida una versione già salvata. */
|
|
1193
1355
|
validateVersion(flowName: string, version: number): Promise<FlowValidationResult>;
|
|
1356
|
+
/**
|
|
1357
|
+
* `POST /flows/validate-formula` — verifica **una sola** espressione mentre l'utente la
|
|
1358
|
+
* scrive (§6.3). È l'editor di formule, non il pannello dei problemi: i rilievi portano la
|
|
1359
|
+
* `position` del tratto sbagliato, che la validazione dell'intero documento non ha.
|
|
1360
|
+
*
|
|
1361
|
+
* Unica primitiva di analisi con un involucro: il documento sta sotto `flow` perche' il body
|
|
1362
|
+
* deve portare anche l'espressione e il tipo atteso (§6.4).
|
|
1363
|
+
*
|
|
1364
|
+
* Opzionale come tutte le primitive che dipendono da un servizio dell'host: senza motore di
|
|
1365
|
+
* validazione delle formule l'editor deve restare usabile. Ci sono **due** modi in cui manca,
|
|
1366
|
+
* e sono diversi — il rifiuto `MissingService` (la primitiva non c'e') e la risposta con
|
|
1367
|
+
* `isVerified: false` (la primitiva c'e', il motore no): in entrambi i casi l'espressione non
|
|
1368
|
+
* si accompagna a una conferma, mai a una spunta verde.
|
|
1369
|
+
*/
|
|
1370
|
+
validateFormula(request: FlowFormulaValidationRequest): Promise<FlowFormulaValidationResult>;
|
|
1194
1371
|
/**
|
|
1195
1372
|
* `GET /flows/dictionaries?processType=` — le tendine in una risposta.
|
|
1196
1373
|
*
|
|
@@ -1386,6 +1563,11 @@ declare class HttpFlowBuilderApi extends FlowBuilderApi {
|
|
|
1386
1563
|
* validazione di un flow vuoto, cioe' «manca lo Start».
|
|
1387
1564
|
*/
|
|
1388
1565
|
validateDefinition(definition: FlowDefinition): Promise<FlowValidationResult>;
|
|
1566
|
+
/**
|
|
1567
|
+
* L'eccezione alla regola del documento nudo: qui l'involucro c'e' e il flow sta sotto
|
|
1568
|
+
* `flow`, perche' il body porta anche l'espressione e cosa deve produrre (§6.3, §6.4).
|
|
1569
|
+
*/
|
|
1570
|
+
validateFormula(request: FlowFormulaValidationRequest): Promise<FlowFormulaValidationResult>;
|
|
1389
1571
|
validateVersion(flowName: string, version: number): Promise<FlowValidationResult>;
|
|
1390
1572
|
getDictionaries(processType?: string): Promise<FlowDictionaries>;
|
|
1391
1573
|
/**
|
|
@@ -1742,6 +1924,77 @@ declare function stageStepOutputReferenced(reference: string | undefined, steps:
|
|
|
1742
1924
|
*/
|
|
1743
1925
|
declare const ORCHESTRATION_CONDITION_OUTPUT = "isOrchestrationConditionMet";
|
|
1744
1926
|
|
|
1927
|
+
/**
|
|
1928
|
+
* L'albero dei campi di uno screen dinamico — FRONTEND.md §5.2.
|
|
1929
|
+
*
|
|
1930
|
+
* Un campo puo' contenerne altri (`Region` dentro `RegionContainer`), quindi «il campo
|
|
1931
|
+
* selezionato» non e' un indice ma un **percorso di indici**: `[1, 0, 2]` e' il terzo campo
|
|
1932
|
+
* della prima colonna della seconda sezione. Tutto cio' che cammina l'albero sta qui, perche'
|
|
1933
|
+
* inspector, store e outline lo fanno con la stessa regola e sbagliarne una copia significa
|
|
1934
|
+
* scrivere in un campo diverso da quello che l'utente vede selezionato.
|
|
1935
|
+
*
|
|
1936
|
+
* L'altra ragione per cui questo file esiste: **i campi che raccolgono un valore sono risorse
|
|
1937
|
+
* del flow** (§5.2). I loro nomi vivono nello stesso spazio dei nomi di node e risorse (§3.3),
|
|
1938
|
+
* quindi `usedNames` dello store deve comprenderli — un campo omonimo di una variabile e'
|
|
1939
|
+
* `NAME_DUPLICATED`, non una stranezza tollerata.
|
|
1940
|
+
*/
|
|
1941
|
+
|
|
1942
|
+
/** Il percorso di un campo nell'albero: indici dalla radice alla foglia. */
|
|
1943
|
+
type FlowScreenFieldPath = number[];
|
|
1944
|
+
/** Un campo con il suo percorso e la sua profondita': e' cio' che l'albero mostra. */
|
|
1945
|
+
interface FlowScreenFieldNode {
|
|
1946
|
+
field: FlowScreenField;
|
|
1947
|
+
path: FlowScreenFieldPath;
|
|
1948
|
+
depth: number;
|
|
1949
|
+
}
|
|
1950
|
+
/** Uguaglianza fra percorsi: due array diversi con gli stessi indici sono lo stesso campo. */
|
|
1951
|
+
declare function samePath(a: FlowScreenFieldPath | null, b: FlowScreenFieldPath | null): boolean;
|
|
1952
|
+
/** `true` se `parent` e' un antenato di `path` (o lo stesso campo). */
|
|
1953
|
+
declare function isPathInside(parent: FlowScreenFieldPath, path: FlowScreenFieldPath): boolean;
|
|
1954
|
+
/** Chiave stabile di un percorso: serve al `track` e agli id delle liste di trascinamento. */
|
|
1955
|
+
declare function pathKey(path: FlowScreenFieldPath): string;
|
|
1956
|
+
/** Il campo a un percorso, o `undefined` se il percorso non esiste piu'. */
|
|
1957
|
+
declare function fieldAt(fields: FlowScreenField[] | undefined, path: FlowScreenFieldPath): FlowScreenField | undefined;
|
|
1958
|
+
/** L'albero appiattito in ordine di visita, con profondita': e' l'elenco che si disegna. */
|
|
1959
|
+
declare function flattenFields(fields: FlowScreenField[] | undefined, parentPath?: FlowScreenFieldPath): FlowScreenFieldNode[];
|
|
1960
|
+
/** Tutti i campi di uno screen, in ordine di visita. */
|
|
1961
|
+
declare function allFieldsOf(screen: FlowDynamicScreen | undefined): FlowScreenField[];
|
|
1962
|
+
/**
|
|
1963
|
+
* I nomi dei campi di tutti gli screen dinamici del documento.
|
|
1964
|
+
*
|
|
1965
|
+
* Contenitori compresi: un `Region` non e' una risorsa — non raccoglie un valore — ma il suo
|
|
1966
|
+
* nome resta un nome, e due campi omonimi nella stessa schermata sono comunque un problema.
|
|
1967
|
+
* Chi vuole i **soli** riferimenti proponibili usa `isFieldResource`.
|
|
1968
|
+
*/
|
|
1969
|
+
declare function screenFieldNames(definition: FlowDefinition | undefined): string[];
|
|
1970
|
+
/**
|
|
1971
|
+
* §5.2 — il campo e' una risorsa del flow (`kind: "ScreenField"`), quindi referenziabile
|
|
1972
|
+
* per nome ovunque e **di sola lettura**.
|
|
1973
|
+
*
|
|
1974
|
+
* Un `ComponentInstance` non lo e' pur essendo un campo: non ha un valore proprio, ce l'hanno
|
|
1975
|
+
* i suoi output. Il flag `storesValue` arriva dal dizionario, che e' l'unica fonte autoritativa:
|
|
1976
|
+
* senza la voce del dizionario si risponde `false`, cioe' "non lo so" — proporre un riferimento
|
|
1977
|
+
* che il backend non conosce e' peggio che non proporlo.
|
|
1978
|
+
*/
|
|
1979
|
+
declare function isFieldResource(field: FlowScreenField | undefined, entry: FlowScreenFieldTypeEntry | undefined): boolean;
|
|
1980
|
+
/** Inserisce un campo dentro `parentPath` alla posizione indicata (in fondo se assente). */
|
|
1981
|
+
declare function insertField(screen: FlowDynamicScreen, parentPath: FlowScreenFieldPath, field: FlowScreenField, index?: number): FlowScreenFieldPath | undefined;
|
|
1982
|
+
/** Rimuove il campo a un percorso, e con esso tutto cio' che conteneva. */
|
|
1983
|
+
declare function removeField(screen: FlowDynamicScreen, path: FlowScreenFieldPath): void;
|
|
1984
|
+
/**
|
|
1985
|
+
* Sposta un campo dentro un'altra lista, a una posizione precisa.
|
|
1986
|
+
*
|
|
1987
|
+
* `toIndex` e' l'indice **dopo** l'estrazione, cioe' la stessa convenzione di
|
|
1988
|
+
* `moveItemInArray` del CDK: e' l'indice che il drop del trascinamento consegna, e riallinearlo
|
|
1989
|
+
* qui sposterebbe di uno ogni trascinamento verso il basso nella stessa lista.
|
|
1990
|
+
*
|
|
1991
|
+
* Uno spostamento dentro se stesso e' rifiutato: sposterebbe un contenitore dentro il proprio
|
|
1992
|
+
* sottoalbero, e il sottoalbero sparirebbe con lui.
|
|
1993
|
+
*/
|
|
1994
|
+
declare function moveField(screen: FlowDynamicScreen, from: FlowScreenFieldPath, toParent: FlowScreenFieldPath, toIndex: number): FlowScreenFieldPath | undefined;
|
|
1995
|
+
/** Duplica un campo accanto all'originale, rinominandolo: i nomi restano unici (§3.3). */
|
|
1996
|
+
declare function duplicateField(screen: FlowDynamicScreen, path: FlowScreenFieldPath, newName: string): FlowScreenFieldPath | undefined;
|
|
1997
|
+
|
|
1745
1998
|
/**
|
|
1746
1999
|
* La gravita' di un rilievo, ridotta a tre secchi — FRONTEND.md §7.
|
|
1747
2000
|
*
|
|
@@ -1816,6 +2069,27 @@ declare class FlowDictionaryStore {
|
|
|
1816
2069
|
readonly stageStepTypes: _angular_core.Signal<FlowStageStepTypeEntry[]>;
|
|
1817
2070
|
readonly assigneeTypes: _angular_core.Signal<FlowDictionaryEntry[]>;
|
|
1818
2071
|
readonly conditionLogicModes: _angular_core.Signal<FlowDictionaryEntry[]>;
|
|
2072
|
+
readonly regionContainerTypes: _angular_core.Signal<FlowDictionaryEntry[]>;
|
|
2073
|
+
readonly screenFieldInputsRevisited: _angular_core.Signal<FlowDictionaryEntry[]>;
|
|
2074
|
+
/** §5.2 — i tipi di campo di uno screen dinamico, con i flag che guidano il form. */
|
|
2075
|
+
readonly screenFieldTypes: _angular_core.Signal<FlowScreenFieldTypeEntry[]>;
|
|
2076
|
+
/**
|
|
2077
|
+
* La voce di un tipo di campo. **Non c'e' un fallback cablato**, di proposito: i flag sono gli
|
|
2078
|
+
* stessi che applica il runtime (§5.2, §6.4), e indovinarli qui vorrebbe dire proporre una
|
|
2079
|
+
* configurazione che il motore rifiuta. Voce assente = nessun flag, cioe' il form mostra i soli
|
|
2080
|
+
* campi comuni e lascia decidere al backend.
|
|
2081
|
+
*/
|
|
2082
|
+
screenFieldType(value: string | undefined | null): FlowScreenFieldTypeEntry | undefined;
|
|
2083
|
+
/** §5.2 — il campo raccoglie un valore: e' una risorsa, e vuole tipo, default, … */
|
|
2084
|
+
screenFieldStoresValue(value: string | undefined | null): boolean;
|
|
2085
|
+
/** §5.2 — il campo contiene altri campi: `Region`, `RegionContainer`. */
|
|
2086
|
+
screenFieldIsContainer(value: string | undefined | null): boolean;
|
|
2087
|
+
/** §5.2 — il campo si configura con `choiceReferences`. */
|
|
2088
|
+
screenFieldAcceptsChoices(value: string | undefined | null): boolean;
|
|
2089
|
+
/** §5.2 — `dataType` obbligatorio: senza, `DATA_TYPE_MISSING`. */
|
|
2090
|
+
screenFieldRequiresDataType(value: string | undefined | null): boolean;
|
|
2091
|
+
/** §5.2 — il valore raccolto e' una collection: contano gli operatori di collection. */
|
|
2092
|
+
screenFieldIsCollection(value: string | undefined | null): boolean;
|
|
1819
2093
|
readonly elementTypes: _angular_core.Signal<FlowElementTypeEntry[]>;
|
|
1820
2094
|
/**
|
|
1821
2095
|
* I tipi mostrabili nella palette: `isSupported: false` va nascosto (§3.2, §13.9).
|
|
@@ -2229,10 +2503,12 @@ declare class FlowDocumentStore {
|
|
|
2229
2503
|
readonly nodeByName: _angular_core.Signal<Map<string, FlowNodeRef>>;
|
|
2230
2504
|
readonly resources: _angular_core.Signal<FlowResourceRef[]>;
|
|
2231
2505
|
/**
|
|
2232
|
-
* §3.3 — l'insieme dei nomi già usati: node, risorse
|
|
2233
|
-
* spazio di nomi. Il controllo di unicita' che guarda solo le
|
|
2234
|
-
* variabile omonima di un node (§13.5); quello che dimentica gli
|
|
2235
|
-
* step omonimo di una variabile
|
|
2506
|
+
* §3.3 — l'insieme dei nomi già usati: node, risorse, step di orchestrazione **e campi di
|
|
2507
|
+
* screen dinamico**, un unico spazio di nomi. Il controllo di unicita' che guarda solo le
|
|
2508
|
+
* variabili lascia passare una variabile omonima di un node (§13.5); quello che dimentica gli
|
|
2509
|
+
* step lascia passare uno step omonimo di una variabile (§5.13); quello che dimentica i campi
|
|
2510
|
+
* lascia passare un campo omonimo di una variabile, che e' `NAME_DUPLICATED` come gli altri
|
|
2511
|
+
* — e lì il danno e' peggiore, perche' un campo **e' un riferimento** (§5.2).
|
|
2236
2512
|
*/
|
|
2237
2513
|
readonly usedNames: _angular_core.Signal<string[]>;
|
|
2238
2514
|
/** Gli archi derivati dal documento, Start incluso. */
|
|
@@ -2289,6 +2565,15 @@ declare class FlowDocumentStore {
|
|
|
2289
2565
|
* riferimenti a output automatico (`Vecchio.Campo` → `Nuovo.Campo`).
|
|
2290
2566
|
*/
|
|
2291
2567
|
renameNode(oldName: string, newName: string): void;
|
|
2568
|
+
/**
|
|
2569
|
+
* §5.2 — rinomina un campo di screen dinamico riscrivendo i riferimenti che lo usano.
|
|
2570
|
+
*
|
|
2571
|
+
* Un campo che raccoglie un valore **e' una risorsa** referenziabile per nome: rinominarlo
|
|
2572
|
+
* senza riscrivere le condizioni e le assegnazioni che lo citano lascia dei
|
|
2573
|
+
* `REFERENCE_UNKNOWN` che si scoprono solo alla validazione. Vale la stessa regola dei node
|
|
2574
|
+
* (§13.8): nessuna primitiva del backend lo fa, lo fa l'editor.
|
|
2575
|
+
*/
|
|
2576
|
+
renameScreenField(nodeName: string, path: FlowScreenFieldPath, newName: string): void;
|
|
2292
2577
|
/** Rinomina una risorsa, riscrivendo i riferimenti che la usano. */
|
|
2293
2578
|
renameResource(collection: FlowResourceCollection, index: number, newName: string): void;
|
|
2294
2579
|
/**
|
|
@@ -2378,6 +2663,29 @@ declare class FlowValidationStore {
|
|
|
2378
2663
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<FlowValidationStore>;
|
|
2379
2664
|
}
|
|
2380
2665
|
|
|
2666
|
+
declare class FormulaValidationService {
|
|
2667
|
+
private readonly api;
|
|
2668
|
+
private readonly _isSupported;
|
|
2669
|
+
private readonly _lastError;
|
|
2670
|
+
/**
|
|
2671
|
+
* `false` quando la primitiva non e' esposta da questo ambiente. Diverso da
|
|
2672
|
+
* `isVerified: false` nella risposta, che dice «primitiva sì, motore no»: per l'utente
|
|
2673
|
+
* l'effetto e' lo stesso — nessuna conferma — ma il secondo caso lo dice il backend e lo si
|
|
2674
|
+
* riferisce, il primo e' silenzio (§6.3).
|
|
2675
|
+
*/
|
|
2676
|
+
readonly isSupported: _angular_core.Signal<boolean>;
|
|
2677
|
+
readonly lastError: _angular_core.Signal<string | null>;
|
|
2678
|
+
/** Ci si puo' provare: la primitiva c'e' e l'ultima chiamata non e' esplosa. */
|
|
2679
|
+
readonly canValidate: _angular_core.Signal<boolean>;
|
|
2680
|
+
/**
|
|
2681
|
+
* Verifica l'espressione. `null` significa «non lo so»: primitiva assente o richiesta
|
|
2682
|
+
* fallita. Non e' «formula valida» — chi chiama non deve mostrare una conferma su un `null`.
|
|
2683
|
+
*/
|
|
2684
|
+
validate(request: FlowFormulaValidationRequest): Promise<FlowFormulaValidationResult | null>;
|
|
2685
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormulaValidationService, never>;
|
|
2686
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<FormulaValidationService>;
|
|
2687
|
+
}
|
|
2688
|
+
|
|
2381
2689
|
interface FlowLayoutNodeInput {
|
|
2382
2690
|
name: string;
|
|
2383
2691
|
width: number;
|
|
@@ -2789,7 +3097,11 @@ declare class ElementPaletteComponent {
|
|
|
2789
3097
|
readonly isEmpty: _angular_core.Signal<boolean>;
|
|
2790
3098
|
onFilter(value: string): void;
|
|
2791
3099
|
pick(item: PaletteItem): void;
|
|
2792
|
-
/**
|
|
3100
|
+
/**
|
|
3101
|
+
* Uno screen in un flow che non mostra nulla: si segnala, non si nasconde (§3.1). Vale per
|
|
3102
|
+
* entrambi i tipi di screen — quello a form e quello dinamico sono la stessa interazione con
|
|
3103
|
+
* l'utente, e in un flow `AutoLaunched` non c'e' nessuno a cui mostrarli.
|
|
3104
|
+
*/
|
|
2793
3105
|
isIncompatible(item: PaletteItem): boolean;
|
|
2794
3106
|
/**
|
|
2795
3107
|
* Il testo del tooltip. Su una voce che nasce da una variante ci va anche il nome del tipo:
|
|
@@ -2935,7 +3247,7 @@ declare class ReferencePickerComponent {
|
|
|
2935
3247
|
* percorso inesistente di uno scope che i percorsi li dichiara, perche' lì il backend
|
|
2936
3248
|
* risponderebbe `GLOBAL_UNKNOWN`.
|
|
2937
3249
|
*/
|
|
2938
|
-
readonly valueState: _angular_core.Signal<"
|
|
3250
|
+
readonly valueState: _angular_core.Signal<"empty" | "unknown" | "member" | "known" | "navigated" | "host" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid">;
|
|
2939
3251
|
/** Le parole cambiano con la tappa: un campo di un'entita' non e' un membro di una classe. */
|
|
2940
3252
|
private readonly tailIsObject;
|
|
2941
3253
|
private readonly tailContainer;
|
|
@@ -3087,7 +3399,7 @@ declare class NamePickerComponent {
|
|
|
3087
3399
|
* **errori** che bloccano l'attivazione (`ACTION_UNKNOWN`, `FORM_UNKNOWN`), mentre un flow
|
|
3088
3400
|
* senza versione attiva e' un avviso. Mostrarli con lo stesso colore direbbe il falso.
|
|
3089
3401
|
*/
|
|
3090
|
-
readonly unknownSeverity: _angular_core.InputSignal<"
|
|
3402
|
+
readonly unknownSeverity: _angular_core.InputSignal<"error" | "warn">;
|
|
3091
3403
|
/** Cosa dire quando l'elenco e' vuoto: e' il caso "non lo so", non un errore. */
|
|
3092
3404
|
readonly emptyMessage: _angular_core.InputSignal<string>;
|
|
3093
3405
|
/** Testo monospazio: i nomi tecnici si leggono meglio, ed e' come li mostra il resto del form. */
|
|
@@ -3237,6 +3549,114 @@ declare class EnumValuePickerComponent {
|
|
|
3237
3549
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EnumValuePickerComponent, "fb-enum-value-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "enumType": { "alias": "enumType"; "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>;
|
|
3238
3550
|
}
|
|
3239
3551
|
|
|
3552
|
+
declare class FormulaEditorComponent {
|
|
3553
|
+
private readonly store;
|
|
3554
|
+
private readonly api;
|
|
3555
|
+
private readonly service;
|
|
3556
|
+
private readonly destroyRef;
|
|
3557
|
+
readonly expression: _angular_core.InputSignal<string>;
|
|
3558
|
+
/** Dove comparira': e' cio' che dice al motore cosa pretendere (§6.3). */
|
|
3559
|
+
readonly usage: _angular_core.InputSignal<string>;
|
|
3560
|
+
/** `Boolean` per condizioni e validation rule, il tipo dichiarato per una risorsa. */
|
|
3561
|
+
readonly expectedDataType: _angular_core.InputSignal<string | undefined>;
|
|
3562
|
+
readonly scale: _angular_core.InputSignal<number | undefined>;
|
|
3563
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
3564
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
3565
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
3566
|
+
readonly rows: _angular_core.InputSignal<number>;
|
|
3567
|
+
/**
|
|
3568
|
+
* Quando propagare al documento. `input` a ogni tasto, `change` all'uscita dal campo: la
|
|
3569
|
+
* seconda serve dove mutare il documento ridisegna mezza schermata — l'anteprima dello screen
|
|
3570
|
+
* dinamico — e riscriverla a ogni tasto costa. La **verifica** parte comunque durante la
|
|
3571
|
+
* digitazione: usa la bozza locale, non cio' che e' arrivato al documento.
|
|
3572
|
+
*/
|
|
3573
|
+
readonly commitOn: _angular_core.InputSignal<"input" | "change">;
|
|
3574
|
+
readonly expressionChange: _angular_core.OutputEmitterRef<string>;
|
|
3575
|
+
private readonly area;
|
|
3576
|
+
/**
|
|
3577
|
+
* Il testo che si sta scrivendo. Non e' legato al DOM — la casella tiene il suo valore e la
|
|
3578
|
+
* `[value]` resta quella del documento — perche' riscrivere l'attributo a ogni tasto sposta il
|
|
3579
|
+
* cursore quando si corregge in mezzo all'espressione.
|
|
3580
|
+
*/
|
|
3581
|
+
private readonly draft;
|
|
3582
|
+
private readonly _result;
|
|
3583
|
+
private readonly _isChecking;
|
|
3584
|
+
private timer?;
|
|
3585
|
+
/** Cresce a ogni richiesta: scarta le risposte di verifiche già superate. */
|
|
3586
|
+
private sequence;
|
|
3587
|
+
readonly result: _angular_core.Signal<FlowFormulaValidationResult | null>;
|
|
3588
|
+
readonly isChecking: _angular_core.Signal<boolean>;
|
|
3589
|
+
readonly isSupported: _angular_core.Signal<boolean>;
|
|
3590
|
+
/**
|
|
3591
|
+
* I nomi citabili, per l'autocompletamento (§6.3): li da' `POST /flows/references`, cioe' la
|
|
3592
|
+
* stessa fonte del reference picker — compresi gli **output automatici**, che sono riferimenti
|
|
3593
|
+
* validi pur non essendo dichiarati in nessuna collection (§4.5, §13.3). Qui non si filtra per
|
|
3594
|
+
* tipo: dentro un'espressione il tipo lo decide il motore, non il campo.
|
|
3595
|
+
*/
|
|
3596
|
+
private readonly references;
|
|
3597
|
+
/** Il documento per cui l'elenco e' stato chiesto: evita una richiesta a ogni focus. */
|
|
3598
|
+
private loadedFor;
|
|
3599
|
+
/** La parola sotto il cursore, che e' cio' che si sta completando. */
|
|
3600
|
+
private readonly token;
|
|
3601
|
+
protected readonly highlighted: _angular_core.WritableSignal<number>;
|
|
3602
|
+
readonly suggestions: _angular_core.Signal<FlowReference[]>;
|
|
3603
|
+
readonly issues: _angular_core.Signal<FlowFormulaIssue[]>;
|
|
3604
|
+
readonly hasErrors: _angular_core.Signal<boolean>;
|
|
3605
|
+
/**
|
|
3606
|
+
* L'esito e' una conferma **solo** se un motore ha davvero guardato l'espressione: senza
|
|
3607
|
+
* `isVerified` non si mostra la spunta, perche' una spunta verde su un'espressione mai
|
|
3608
|
+
* controllata e' peggio di nessuna spunta (§6.3).
|
|
3609
|
+
*/
|
|
3610
|
+
readonly isConfirmed: _angular_core.Signal<boolean>;
|
|
3611
|
+
/** Il motore c'e' come primitiva ma non come motore: si dice, non si tace (§6.3). */
|
|
3612
|
+
readonly isUnverified: _angular_core.Signal<boolean>;
|
|
3613
|
+
/**
|
|
3614
|
+
* Il tipo prodotto quando il motore sa dirlo. Serve a segnalare una formula dichiarata
|
|
3615
|
+
* `String` che restituisce una data — ma il rilievo lo fa il motore: se l'ha già emesso,
|
|
3616
|
+
* qui non si ripete lo stesso avviso con parole diverse.
|
|
3617
|
+
*/
|
|
3618
|
+
readonly resultDataType: _angular_core.Signal<string | null>;
|
|
3619
|
+
readonly typeMismatch: _angular_core.Signal<{
|
|
3620
|
+
expected: string;
|
|
3621
|
+
produced: string;
|
|
3622
|
+
} | null>;
|
|
3623
|
+
constructor();
|
|
3624
|
+
onInput(value: string): void;
|
|
3625
|
+
onCommit(value: string): void;
|
|
3626
|
+
onFocus(): void;
|
|
3627
|
+
/** Il cursore si sposta anche senza digitare: la parola sotto il cursore va riletta. */
|
|
3628
|
+
onCaretMove(): void;
|
|
3629
|
+
onBlur(): void;
|
|
3630
|
+
/**
|
|
3631
|
+
* Le frecce scorrono l'elenco e Invio inserisce. Senza, l'elenco sarebbe una decorazione: chi
|
|
3632
|
+
* scrive una formula ha le mani sulla tastiera e non va a cercare il mouse.
|
|
3633
|
+
*/
|
|
3634
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
3635
|
+
/**
|
|
3636
|
+
* Sostituisce la parola sotto il cursore col nome scelto. Si scrive nel DOM e poi si propaga:
|
|
3637
|
+
* la casella e' la sorgente del testo mentre si digita, e riscrivere solo il documento
|
|
3638
|
+
* lascerebbe indietro il cursore.
|
|
3639
|
+
*/
|
|
3640
|
+
insert(name: string): void;
|
|
3641
|
+
private loadReferences;
|
|
3642
|
+
/** La parola sotto il cursore: identificatore o percorso puntato, com'e' in un riferimento. */
|
|
3643
|
+
private refreshToken;
|
|
3644
|
+
severityOf(issue: FlowFormulaIssue): string;
|
|
3645
|
+
hasPosition(issue: FlowFormulaIssue): boolean;
|
|
3646
|
+
/** Il tratto citato dal rilievo, così il messaggio dice *dove* anche senza il salto. */
|
|
3647
|
+
excerptOf(issue: FlowFormulaIssue): string;
|
|
3648
|
+
/**
|
|
3649
|
+
* Porta il cursore sul tratto segnalato. È il payoff di `position`: un indice di carattere
|
|
3650
|
+
* che l'utente dovrebbe contare a mano non aiuta nessuno.
|
|
3651
|
+
*/
|
|
3652
|
+
goToIssue(issue: FlowFormulaIssue): void;
|
|
3653
|
+
private schedule;
|
|
3654
|
+
private run;
|
|
3655
|
+
private cancel;
|
|
3656
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormulaEditorComponent, never>;
|
|
3657
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormulaEditorComponent, "fb-formula-editor", never, { "expression": { "alias": "expression"; "required": false; "isSignal": true; }; "usage": { "alias": "usage"; "required": false; "isSignal": true; }; "expectedDataType": { "alias": "expectedDataType"; "required": false; "isSignal": true; }; "scale": { "alias": "scale"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "commitOn": { "alias": "commitOn"; "required": false; "isSignal": true; }; }, { "expressionChange": "expressionChange"; }, never, ["*"], true, never>;
|
|
3658
|
+
}
|
|
3659
|
+
|
|
3240
3660
|
/** Le modalita' offerte: una per campo del modello. */
|
|
3241
3661
|
type ValueMode = 'reference' | 'literal' | 'formula' | 'globalConstant' | 'empty';
|
|
3242
3662
|
declare class ValueEditorComponent {
|
|
@@ -3363,7 +3783,7 @@ declare class ConditionEditorComponent {
|
|
|
3363
3783
|
*/
|
|
3364
3784
|
hasTypeMismatch(condition: FlowCondition): boolean;
|
|
3365
3785
|
typeMismatchMessage(condition: FlowCondition): string;
|
|
3366
|
-
readonly logicMode: _angular_core.Signal<"
|
|
3786
|
+
readonly logicMode: _angular_core.Signal<"and" | "or" | "formula" | "custom">;
|
|
3367
3787
|
readonly customLogic: _angular_core.Signal<string>;
|
|
3368
3788
|
/** Feedback immediato sull'espressione: la verita' resta della validazione backend. */
|
|
3369
3789
|
readonly customLogicError: _angular_core.Signal<string | null>;
|
|
@@ -3431,7 +3851,7 @@ declare class RecordFilterEditorComponent {
|
|
|
3431
3851
|
* (§5.7, §13.10).
|
|
3432
3852
|
*/
|
|
3433
3853
|
readonly emptyWarning: _angular_core.InputSignal<string | null>;
|
|
3434
|
-
readonly emptyWarningSeverity: _angular_core.InputSignal<"
|
|
3854
|
+
readonly emptyWarningSeverity: _angular_core.InputSignal<"error" | "warn">;
|
|
3435
3855
|
readonly changed: _angular_core.OutputEmitterRef<(holder: FilterHolder) => void>;
|
|
3436
3856
|
/** Tutti i campi, filtrabili o no: serve solo a riconoscere le chiavi composte (§5.7). */
|
|
3437
3857
|
private readonly allFields;
|
|
@@ -3454,7 +3874,7 @@ declare class RecordFilterEditorComponent {
|
|
|
3454
3874
|
* evita la ricerca di un campo che nell'elenco non c'e' e non ci sara'.
|
|
3455
3875
|
*/
|
|
3456
3876
|
readonly identifierNotFilterable: _angular_core.Signal<boolean>;
|
|
3457
|
-
readonly logicMode: _angular_core.Signal<"
|
|
3877
|
+
readonly logicMode: _angular_core.Signal<"and" | "or" | "formula" | "custom">;
|
|
3458
3878
|
readonly customLogic: _angular_core.Signal<string>;
|
|
3459
3879
|
readonly showEmptyWarning: _angular_core.Signal<boolean>;
|
|
3460
3880
|
addFilter(): void;
|
|
@@ -3828,6 +4248,225 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
|
|
|
3828
4248
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OrchestratedStageInspectorComponent, "fb-orchestrated-stage-inspector", never, {}, {}, never, never, true, never>;
|
|
3829
4249
|
}
|
|
3830
4250
|
|
|
4251
|
+
/** Il punto di inserimento calcolato dal trascinamento: dove, e in che posizione. */
|
|
4252
|
+
interface DropTarget {
|
|
4253
|
+
parent: FlowScreenFieldPath;
|
|
4254
|
+
index: number;
|
|
4255
|
+
}
|
|
4256
|
+
declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
|
|
4257
|
+
private readonly catalog;
|
|
4258
|
+
private readonly document;
|
|
4259
|
+
protected readonly dictionary: FlowDictionaryStore;
|
|
4260
|
+
readonly elementType: FlowElementType;
|
|
4261
|
+
readonly screen: _angular_core.Signal<FlowDynamicScreen>;
|
|
4262
|
+
/** Il percorso del campo selezionato: `null` = nessuno, e a destra ci sono le proprieta'
|
|
4263
|
+
* della **schermata** — lo stesso gesto del cliccare fuori da un campo. */
|
|
4264
|
+
private readonly selection;
|
|
4265
|
+
readonly selectedPath: _angular_core.Signal<FlowScreenFieldPath | null>;
|
|
4266
|
+
readonly selectedField: _angular_core.Signal<FlowScreenField | undefined>;
|
|
4267
|
+
/** La voce di dizionario del campo selezionato: e' lei a decidere il form di destra. */
|
|
4268
|
+
readonly selectedType: _angular_core.Signal<FlowScreenFieldTypeEntry | undefined>;
|
|
4269
|
+
/**
|
|
4270
|
+
* Due elenchi e non uno: un **componente** si sceglie per tipo (che cosa fa), un **campo di
|
|
4271
|
+
* un'entita'** si sceglie per nome (quale dato), e da lì tipo, etichetta, obbligatorieta' e
|
|
4272
|
+
* opzioni arrivano dallo schema (§5.2). Metterli insieme costringerebbe a scegliere prima
|
|
4273
|
+
* `ObjectProvided` e poi il campo, che e' il contrario dell'ordine in cui si pensa.
|
|
4274
|
+
*/
|
|
4275
|
+
readonly paletteTab: _angular_core.WritableSignal<"fields" | "components">;
|
|
4276
|
+
/** L'entita' di cui elencare i campi nella seconda scheda. */
|
|
4277
|
+
readonly fieldsObject: _angular_core.WritableSignal<string | undefined>;
|
|
4278
|
+
private readonly objectFields;
|
|
4279
|
+
readonly fieldsOfObject: _angular_core.Signal<FlowFieldDescription[]>;
|
|
4280
|
+
iconOf(type: string | undefined): string;
|
|
4281
|
+
setPaletteTab(tab: 'components' | 'fields'): void;
|
|
4282
|
+
setFieldsObject(object: string | undefined): void;
|
|
4283
|
+
/** Componenti e form sono la stessa domanda al frontend, e lo stesso catalogo (§5.2). */
|
|
4284
|
+
private readonly components;
|
|
4285
|
+
private readonly componentParameters;
|
|
4286
|
+
/** I tipi di enumerazione: dizionario chiuso, quindi `<select>` e non combo (§4.6). */
|
|
4287
|
+
private readonly enumTypes;
|
|
4288
|
+
constructor();
|
|
4289
|
+
readonly componentOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4290
|
+
readonly enumOptions: _angular_core.Signal<FlowCatalogEntry[]>;
|
|
4291
|
+
readonly componentParameterList: _angular_core.Signal<FlowCatalogParameter[]>;
|
|
4292
|
+
/**
|
|
4293
|
+
* Le choice proponibili: **solo** `choices` e `dynamicChoiceSets` (§5.2). Un elenco costruito
|
|
4294
|
+
* dai riferimenti in generale farebbe scegliere una variabile, che e'
|
|
4295
|
+
* `SCREEN_FIELD_CHOICE_UNKNOWN`.
|
|
4296
|
+
*/
|
|
4297
|
+
readonly choiceOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4298
|
+
/** Gli stage dichiarati: `stageReference` alimenta l'indicatore di avanzamento (§5.2). */
|
|
4299
|
+
readonly stageOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4300
|
+
isSelected(path: FlowScreenFieldPath): boolean;
|
|
4301
|
+
isContainer(field: FlowScreenField | undefined): boolean;
|
|
4302
|
+
/** `true` sulla sezione, che dispone i figli **in riga**: le colonne stanno una accanto all'altra. */
|
|
4303
|
+
isSection(field: FlowScreenField | undefined): boolean;
|
|
4304
|
+
childPath(parent: FlowScreenFieldPath, index: number): FlowScreenFieldPath;
|
|
4305
|
+
/** L'etichetta da disegnare: `fieldText`, poi il nome, poi un segnaposto esplicito. */
|
|
4306
|
+
captionOf(field: FlowScreenField): string;
|
|
4307
|
+
typeLabelOf(field: FlowScreenField): string;
|
|
4308
|
+
/**
|
|
4309
|
+
* La larghezza in dodicesimi: assente = tutta la riga, che e' il default del runtime. È anche
|
|
4310
|
+
* il numero di colonne che il campo occupa nella griglia dell'anteprima, limitato a 1..12
|
|
4311
|
+
* perche' un valore fuori scala romperebbe la griglia invece di segnalarsi.
|
|
4312
|
+
*/
|
|
4313
|
+
widthOf(field: FlowScreenField): number;
|
|
4314
|
+
/** `true` dove il tipo non e' nel dizionario: si dice, invece di indovinare un disegno. */
|
|
4315
|
+
isUnknownType(field: FlowScreenField | undefined): boolean;
|
|
4316
|
+
/**
|
|
4317
|
+
* Le etichette delle opzioni, per disegnarle nell'anteprima: il `choiceText` di una
|
|
4318
|
+
* `FlowChoice`, il nome del choice set (le sue opzioni sono una query, e non esistono finche'
|
|
4319
|
+
* la schermata non viene presentata — §5.2).
|
|
4320
|
+
*/
|
|
4321
|
+
choiceLabelsOf(field: FlowScreenField): string[];
|
|
4322
|
+
/** Il testo mostrato dentro il controllo inerte: il default, se ce n'e' uno leggibile. */
|
|
4323
|
+
placeholderOf(field: FlowScreenField): string;
|
|
4324
|
+
/** Il campo che si sta trascinando: la sua anteprima si sbiadisce e non intercetta il mouse. */
|
|
4325
|
+
readonly dragging: _angular_core.WritableSignal<FlowScreenFieldPath | null>;
|
|
4326
|
+
/** Il punto di inserimento corrente, disegnato come una barra fra i campi. */
|
|
4327
|
+
readonly dropTarget: _angular_core.WritableSignal<DropTarget | null>;
|
|
4328
|
+
isDragging(path: FlowScreenFieldPath): boolean;
|
|
4329
|
+
/** `true` se la barra di inserimento va disegnata qui. */
|
|
4330
|
+
isDropAt(parent: FlowScreenFieldPath, index: number): boolean;
|
|
4331
|
+
onFieldDragStarted(path: FlowScreenFieldPath): void;
|
|
4332
|
+
onFieldDragMoved(event: CdkDragMove): void;
|
|
4333
|
+
onFieldDragEnded(event: CdkDragEnd, path: FlowScreenFieldPath): void;
|
|
4334
|
+
/** Trascinamento **dalla palette**: non sposta niente, crea. */
|
|
4335
|
+
onPaletteDragMoved(event: CdkDragMove): void;
|
|
4336
|
+
onComponentDragEnded(event: CdkDragEnd, type: string): void;
|
|
4337
|
+
onObjectFieldDragEnded(event: CdkDragEnd, field: FlowFieldDescription): void;
|
|
4338
|
+
/**
|
|
4339
|
+
* Il documento si muta **dopo** che il gesto e' finito, non dentro `cdkDragEnded`: lì
|
|
4340
|
+
* l'anteprima si ridisegnerebbe mentre il CDK sta ancora chiudendo il trascinamento
|
|
4341
|
+
* sull'elemento che Angular in quel momento riusa per un altro campo. Un rinvio al task
|
|
4342
|
+
* successivo basta, e per chi guarda lo spostamento resta istantaneo.
|
|
4343
|
+
*/
|
|
4344
|
+
private afterDrag;
|
|
4345
|
+
/**
|
|
4346
|
+
* Il bersaglio del rilascio, calcolato dal **DOM** e non dalle drop list del CDK.
|
|
4347
|
+
*
|
|
4348
|
+
* Le drop list annidate qui sono ambigue per costruzione: il rettangolo di una sezione
|
|
4349
|
+
* contiene quello delle sue colonne, e a ricevere il rilascio finisce sempre la lista
|
|
4350
|
+
* registrata per prima, cioe' la radice. Interrogando `elementFromPoint` si prende invece il
|
|
4351
|
+
* contenitore **piu' interno** sotto il puntatore, che e' esattamente quello che si vede.
|
|
4352
|
+
*
|
|
4353
|
+
* L'indice viene dal confronto con la mezzeria dei fratelli, sull'asse del contenitore: le
|
|
4354
|
+
* colonne di una sezione stanno in riga, tutto il resto in colonna.
|
|
4355
|
+
*/
|
|
4356
|
+
private hitTest;
|
|
4357
|
+
/** `"0.2"` → `[0, 2]`; la radice e' la stringa vuota. */
|
|
4358
|
+
private static parsePath;
|
|
4359
|
+
/** Il valore dell'attributo che marca un contenitore di rilascio. */
|
|
4360
|
+
dropId(path: FlowScreenFieldPath): string;
|
|
4361
|
+
/**
|
|
4362
|
+
* Dove finisce un campo aggiunto **con un clic**: dentro il contenitore selezionato, oppure
|
|
4363
|
+
* accanto al campo selezionato, oppure in fondo alla schermata. È l'ordine in cui uno se lo
|
|
4364
|
+
* aspetta dopo aver cliccato una colonna.
|
|
4365
|
+
*/
|
|
4366
|
+
private clickTarget;
|
|
4367
|
+
addComponentAtSelection(type: string): void;
|
|
4368
|
+
addObjectFieldAtSelection(field: FlowFieldDescription): void;
|
|
4369
|
+
/**
|
|
4370
|
+
* Un componente nuovo. Una sezione nasce **con una colonna dentro**: una sezione vuota e'
|
|
4371
|
+
* `SCREEN_CONTAINER_EMPTY` e non ha nemmeno un posto in cui rilasciare i campi, quindi il
|
|
4372
|
+
* primo gesto sarebbe sempre lo stesso.
|
|
4373
|
+
*/
|
|
4374
|
+
private addComponent;
|
|
4375
|
+
/**
|
|
4376
|
+
* §5.2 — un campo dell'entita': `objectFieldReference` fa arrivare tipo, label,
|
|
4377
|
+
* obbligatorieta', scala e le opzioni **dallo schema**, invece di ridichiararli qui.
|
|
4378
|
+
*/
|
|
4379
|
+
private addObjectField;
|
|
4380
|
+
select(path: FlowScreenFieldPath): void;
|
|
4381
|
+
/** Cliccare la schermata fuori da un campo: a destra tornano le proprieta' della schermata. */
|
|
4382
|
+
selectScreen(): void;
|
|
4383
|
+
removeSelected(): void;
|
|
4384
|
+
duplicateSelected(): void;
|
|
4385
|
+
/**
|
|
4386
|
+
* Spostamento con i tasti: la stessa operazione del trascinamento, per chi non trascina e
|
|
4387
|
+
* perche' spostare di una posizione con il mouse e' piu' difficile che con una freccia.
|
|
4388
|
+
*/
|
|
4389
|
+
moveSelected(direction: -1 | 1): void;
|
|
4390
|
+
/** Estrae il campo dal proprio contenitore e lo mette subito dopo di esso. */
|
|
4391
|
+
outdentSelected(): void;
|
|
4392
|
+
readonly canOutdent: _angular_core.Signal<boolean>;
|
|
4393
|
+
/**
|
|
4394
|
+
* `preRemoval` distingue le due convenzioni sull'indice di arrivo: i comandi (su, giu', porta
|
|
4395
|
+
* fuori) ragionano sulla lista **dopo** l'estrazione, il rilascio su cio' che si vedeva
|
|
4396
|
+
* **prima**. Confonderle sposta di uno ogni trascinamento verso il basso.
|
|
4397
|
+
*/
|
|
4398
|
+
private applyMove;
|
|
4399
|
+
/** Il campo raccoglie un valore, quindi e' referenziabile per nome nel resto del flow (§5.2). */
|
|
4400
|
+
readonly selectedIsResource: _angular_core.Signal<boolean>;
|
|
4401
|
+
/**
|
|
4402
|
+
* §5.2 — uno screen senza campi non ha niente da mostrare (`SCREEN_WITHOUT_FIELDS`), e uno
|
|
4403
|
+
* senza destinazione che non consente «fine» e' un vicolo cieco (`SCREEN_DEAD_END`). Si dicono
|
|
4404
|
+
* qui prima che lo dica la validazione.
|
|
4405
|
+
*/
|
|
4406
|
+
readonly isEmpty: _angular_core.Signal<boolean>;
|
|
4407
|
+
readonly isDeadEnd: _angular_core.Signal<boolean>;
|
|
4408
|
+
allowBack: _angular_core.Signal<boolean>;
|
|
4409
|
+
allowFinish: _angular_core.Signal<boolean>;
|
|
4410
|
+
allowPause: _angular_core.Signal<boolean>;
|
|
4411
|
+
showHeader: _angular_core.Signal<boolean>;
|
|
4412
|
+
showFooter: _angular_core.Signal<boolean>;
|
|
4413
|
+
/** §5.2 — `isEditable` ha default `true`: a `false` il runtime ignora cio' che torna. */
|
|
4414
|
+
readonly selectedIsEditable: _angular_core.Signal<boolean>;
|
|
4415
|
+
readonly selectedIsRequired: _angular_core.Signal<boolean>;
|
|
4416
|
+
/**
|
|
4417
|
+
* §5.2 — `storeOutputAutomatically` **insieme** a `outputParameters` e'
|
|
4418
|
+
* `OUTPUT_CONFIGURATION_CONFLICT`: la coppia si mostra come esclusiva, non come due caselle.
|
|
4419
|
+
*/
|
|
4420
|
+
readonly hasOutputConflict: _angular_core.Signal<boolean>;
|
|
4421
|
+
/** §5.2 — la choice di default fuori dall'elenco e' un avviso, non un errore. */
|
|
4422
|
+
readonly defaultChoiceIsForeign: _angular_core.Signal<boolean>;
|
|
4423
|
+
/** §5.2 — `scale` su un campo non numerico e' `SCALE_NOT_APPLICABLE`. */
|
|
4424
|
+
readonly scaleApplies: _angular_core.Signal<boolean>;
|
|
4425
|
+
readonly requiresObjectType: _angular_core.Signal<boolean>;
|
|
4426
|
+
readonly objectTypeIsStructure: _angular_core.Signal<boolean>;
|
|
4427
|
+
/** L'oggetto di un `ObjectProvided`, cioe' la parte prima del punto (§5.2). */
|
|
4428
|
+
readonly providedObject: _angular_core.Signal<string>;
|
|
4429
|
+
readonly providedField: _angular_core.Signal<string>;
|
|
4430
|
+
/** Scrive una proprieta' del campo selezionato; valore vuoto → chiave omessa (§2). */
|
|
4431
|
+
private patchField;
|
|
4432
|
+
setFieldProperty(property: keyof FlowScreenField, value: unknown): void;
|
|
4433
|
+
/**
|
|
4434
|
+
* Il nome si applica sull'uscita dal campo e passa da `renameScreenField`: il campo e' una
|
|
4435
|
+
* risorsa, quindi la rinomina deve riscrivere i riferimenti che lo citano (§5.2, §13.8).
|
|
4436
|
+
*/
|
|
4437
|
+
setFieldName(value: string): void;
|
|
4438
|
+
/**
|
|
4439
|
+
* Cambiare tipo **ripulisce** cio' che il tipo nuovo non prevede: choice su una textarea o un
|
|
4440
|
+
* `dataType` su un `DisplayText` sono `SCREEN_FIELD_CONFIGURATION_INVALID`, e lasciarli nel
|
|
4441
|
+
* documento significa lasciare un errore invisibile nell'editor.
|
|
4442
|
+
*/
|
|
4443
|
+
setFieldType(type: string): void;
|
|
4444
|
+
setDefaultValue(value: FlowValue | undefined): void;
|
|
4445
|
+
setNumberProperty(property: 'scale' | 'maxLength' | 'width', raw: string): void;
|
|
4446
|
+
/** `isRequired` si scrive solo quando e' vero: il default e' facoltativo. */
|
|
4447
|
+
setRequired(value: boolean): void;
|
|
4448
|
+
/** `isEditable` ha default `true`: si scrive solo il `false`, che e' la scelta significativa. */
|
|
4449
|
+
setEditable(value: boolean): void;
|
|
4450
|
+
addChoice(name: string | undefined): void;
|
|
4451
|
+
removeChoice(index: number): void;
|
|
4452
|
+
moveChoice(index: number, direction: -1 | 1): void;
|
|
4453
|
+
setValidationRule(part: 'formulaExpression' | 'errorMessage', value: string): void;
|
|
4454
|
+
/** La regola di visibilita' e' un blocco condizioni come quello di una Decision (§5.2). */
|
|
4455
|
+
onVisibilityChanged(mutate: (holder: FlowConditionHolder) => void): void;
|
|
4456
|
+
/** Il blocco passato all'editor delle condizioni: mai `undefined`, altrimenti non si apre. */
|
|
4457
|
+
readonly visibilityRule: _angular_core.Signal<FlowConditionHolder>;
|
|
4458
|
+
onComponentParametersChanged(mutate: (holder: ParameterHolder) => void): void;
|
|
4459
|
+
setStoreOutputAutomatically(value: boolean): void;
|
|
4460
|
+
/** `ObjectProvided`: oggetto e campo si scrivono in un unico `<Oggetto>.<Campo>` (§5.2). */
|
|
4461
|
+
setProvidedObject(value: string | undefined): void;
|
|
4462
|
+
setProvidedField(value: string | undefined): void;
|
|
4463
|
+
setScreenText(property: string, value: string): void;
|
|
4464
|
+
/** I flag con default `true` si scrivono solo quando si nega, per non sporcare il diff. */
|
|
4465
|
+
setScreenFlag(flag: 'allowBack' | 'allowFinish' | 'allowPause' | 'showHeader' | 'showFooter', value: boolean): void;
|
|
4466
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicScreenInspectorComponent, never>;
|
|
4467
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicScreenInspectorComponent, "fb-dynamic-screen-inspector", never, {}, {}, never, never, true, never>;
|
|
4468
|
+
}
|
|
4469
|
+
|
|
3831
4470
|
interface ResourceKindDescriptor {
|
|
3832
4471
|
collection: FlowResourceCollection;
|
|
3833
4472
|
label: string;
|
|
@@ -4088,7 +4727,7 @@ declare class FlowBuilderComponent {
|
|
|
4088
4727
|
* troppo. `panel` tiene il form nel pannello laterale, che e' piu' comodo quando si
|
|
4089
4728
|
* modificano molti elementi di fila perche' non c'e' niente da aprire e chiudere.
|
|
4090
4729
|
*/
|
|
4091
|
-
readonly inspectorMode: _angular_core.InputSignal<"
|
|
4730
|
+
readonly inspectorMode: _angular_core.InputSignal<"dialog" | "panel">;
|
|
4092
4731
|
readonly saved: _angular_core.OutputEmitterRef<FlowSaveResult>;
|
|
4093
4732
|
readonly activated: _angular_core.OutputEmitterRef<FlowSaveResult>;
|
|
4094
4733
|
readonly closeRequested: _angular_core.OutputEmitterRef<void>;
|
|
@@ -4138,6 +4777,12 @@ declare class FlowBuilderComponent {
|
|
|
4138
4777
|
* mancante; qui si decide solo se serve.
|
|
4139
4778
|
*/
|
|
4140
4779
|
readonly isProcessTypeOutOfCatalog: _angular_core.Signal<boolean>;
|
|
4780
|
+
/**
|
|
4781
|
+
* Quante schermate ha il flow. **Entrambi** i tipi di screen contano: quello a form e quello
|
|
4782
|
+
* dinamico sono la stessa interazione con l'utente, e contarne uno solo faceva comparire
|
|
4783
|
+
* «questo flow Screen non ha screen» su un flow fatto di soli screen dinamici (§5.2).
|
|
4784
|
+
*/
|
|
4785
|
+
private readonly screenCount;
|
|
4141
4786
|
/** `AutoLaunched` + screen e' un errore di validazione: si segnala subito (§13.6). */
|
|
4142
4787
|
readonly hasScreensInAutoLaunched: _angular_core.Signal<boolean>;
|
|
4143
4788
|
/** Un flow `Screen` senza screen e' `SCREEN_FLOW_WITHOUT_SCREENS`. */
|
|
@@ -4220,5 +4865,5 @@ declare class SelectValueDirective implements AfterViewChecked {
|
|
|
4220
4865
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectValueDirective, "select[fbValue]", never, { "fbValue": { "alias": "fbValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4221
4866
|
}
|
|
4222
4867
|
|
|
4223
|
-
export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, EnumValuePickerComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ELEMENT_VARIANT_FIELDS, FLOW_ELEMENT_VARIANT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FLOW_VALUE_FIELDS, FLOW_VALUE_LITERAL_FIELDS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, SEVERITY_BUCKETS, SEVERITY_ICON, SEVERITY_LABEL, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, StructureMemberPickerComponent, StructurePickerComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, areTypesComparable, canvasNodeId, checkConditionLogic, checkFlowName, describePathEntry, elementIcon, emptyFlowDefinition, filterReferences, flowNodeWidth, flowNodeWidthClass, isCustomConditionLogic, isEmptyReferenceFilter, isGlobalReference, isNumericType, isTypeCheckedOperator, isValidFlowName, isValued, loadPathLevel, matchesReferenceFilter, moveCondition, navigatePath, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, pathAvailableNames, pathContainerLabel, pathNotVerifiableMessage, referenceRoot, remapConditionLogic, removeCondition, resolvePath, severityBucket, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, uniqueFlowName, valuedFieldOf, valuedFieldsOf, variantFieldOf, variantOf, variantPresetOf };
|
|
4224
|
-
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, FlowEnumValue, 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, FlowPalettePick, FlowPendingScreen, FlowProcessType, FlowRecordCreate, FlowRecordDelete, FlowRecordFilter, FlowRecordFilterOperator, FlowRecordLookup, FlowRecordRollback, FlowRecordTriggerType, FlowRecordUpdate, FlowRecordValue, FlowReference, FlowReferenceFilter, FlowReferenceKind, FlowResourceCollection, FlowResourceKindEntry, FlowResourceRef, FlowResumeRequest, FlowSaveRequest, FlowSaveResult, FlowSchedule, FlowScheduledPath, FlowScreen, FlowScreenNavigation, FlowScreenResponseRequest, FlowScriptPluginCall, FlowSeverityBucket, FlowSortOption, FlowSortOrder, FlowStage, FlowStageStep, FlowStageStepActionType, FlowStageStepAssignee, FlowStageStepConditionActionType, FlowStageStepRequest, FlowStageStepState, FlowStageStepStatus, FlowStageStepTypeEntry, FlowStart, FlowStartInterviewRequest, FlowStructureDescribed, FlowStructureDescription, FlowStructureInstance, FlowStructureMember, FlowSubflow, FlowSubflowInputAssignment, FlowSubflowOutputAssignment, FlowSummary, FlowTextTemplate, FlowTraceEntry, FlowTransactionModel, FlowTransform, FlowTransformType, FlowTransformValue, FlowTransformValueAction, FlowTriggerType, FlowTypedEntry, FlowTypedValue, FlowUnsupportedNode, FlowValidationIssue, FlowValidationResult, FlowValue, FlowVariable, FlowVersionStatus, FlowVersionSummary, FlowWait, FlowWaitEvent, NamePickerOption, PaletteGroup, PaletteItem, ParameterHolder, PathCatalog, PathContainer, PathContainerKind, PathEntry, PathLevel, PathLevelStatus, PathNavigation, PathNavigationRequest, PathResolution, PathStopReason, StructureMemberUsage, ValueMode };
|
|
4868
|
+
export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, DynamicScreenInspectorComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, EnumValuePickerComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ELEMENT_VARIANT_FIELDS, FLOW_ELEMENT_VARIANT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FLOW_VALUE_FIELDS, FLOW_VALUE_LITERAL_FIELDS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, FormulaEditorComponent, FormulaValidationService, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, SEVERITY_BUCKETS, SEVERITY_ICON, SEVERITY_LABEL, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, StructureMemberPickerComponent, StructurePickerComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, allFieldsOf, areTypesComparable, canvasNodeId, checkConditionLogic, checkFlowName, describePathEntry, duplicateField, elementIcon, emptyFlowDefinition, fieldAt, filterReferences, flattenFields, flowNodeWidth, flowNodeWidthClass, insertField, isCustomConditionLogic, isEmptyReferenceFilter, isFieldResource, isGlobalReference, isNumericType, isPathInside, isTypeCheckedOperator, isValidFlowName, isValued, loadPathLevel, matchesReferenceFilter, moveCondition, moveField, navigatePath, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, pathAvailableNames, pathContainerLabel, pathKey, pathNotVerifiableMessage, referenceRoot, remapConditionLogic, removeCondition, removeField, resolvePath, samePath, screenFieldNames, severityBucket, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, uniqueFlowName, valuedFieldOf, valuedFieldsOf, variantFieldOf, variantOf, variantPresetOf };
|
|
4869
|
+
export type { FieldAssignmentHolder, FilterHolder, FlowActionCall, FlowAnyNode, FlowAssignment, FlowAssignmentItem, FlowAssignmentOperator, FlowAssignmentOperatorEntry, FlowBuilderHttpConfig, FlowCanvasEdge, FlowCanvasNode, FlowCatalogEntry, FlowCatalogParameter, FlowChoice, FlowCloneRequest, FlowCollectionProcessor, FlowCollectionProcessorType, FlowComparisonOperator, FlowComparisonOperatorEntry, FlowCondition, FlowConditionHolder, FlowConditionLogic, FlowConflictState, FlowConnectionKind, FlowConnector, FlowConnectorTarget, FlowConstant, FlowCreateRequest, FlowCustomError, FlowCustomErrorMessage, FlowCustomProperty, FlowDataType, FlowDataTypeEntry, FlowDecision, FlowDecisionRule, FlowDefinition, FlowDictionaries, FlowDictionaryEntry, FlowDynamicChoiceSet, FlowDynamicScreen, FlowEdge, FlowElementType, FlowElementTypeEntry, FlowEnumValue, FlowErrorCategory, FlowExportQuery, FlowFieldDescription, FlowFieldUsage, FlowFieldValue, FlowFormula, FlowFormulaIssue, FlowFormulaUsage, FlowFormulaValidationRequest, FlowFormulaValidationResult, FlowGlobalVariableEntry, FlowInputFieldAssignment, FlowInputParameter, FlowInterviewResult, FlowInterviewStatus, FlowIssueSeverity, FlowLayoutDirection, FlowLayoutNodeInput, FlowLayoutOptions, FlowLayoutResult, FlowListQuery, FlowLoop, FlowNameCheck, FlowNameProblem, FlowNewVersionRequest, FlowNodeBase, FlowNodeCollection, FlowNodeRef, FlowObjectDescription, FlowObjectSummary, FlowOffsetUnit, FlowOrchestratedStage, FlowOutlet, FlowOutline, FlowOutlineConnection, FlowOutlineNode, FlowOutputFieldAssignment, FlowOutputParameter, FlowPalettePick, FlowPendingScreen, FlowProcessType, FlowRecordCreate, FlowRecordDelete, FlowRecordFilter, FlowRecordFilterOperator, FlowRecordLookup, FlowRecordRollback, FlowRecordTriggerType, FlowRecordUpdate, FlowRecordValue, FlowReference, FlowReferenceFilter, FlowReferenceKind, FlowRegionContainerType, FlowResourceCollection, FlowResourceKindEntry, FlowResourceRef, FlowResumeRequest, FlowSaveRequest, FlowSaveResult, FlowSchedule, FlowScheduledPath, FlowScreen, FlowScreenField, FlowScreenFieldInputsRevisited, FlowScreenFieldNode, FlowScreenFieldPath, FlowScreenFieldType, FlowScreenFieldTypeEntry, FlowScreenNavigation, FlowScreenResponseRequest, FlowScreenValidationRule, FlowScriptPluginCall, FlowSeverityBucket, FlowSortOption, FlowSortOrder, FlowStage, FlowStageStep, FlowStageStepActionType, FlowStageStepAssignee, FlowStageStepConditionActionType, FlowStageStepRequest, FlowStageStepState, FlowStageStepStatus, FlowStageStepTypeEntry, FlowStart, FlowStartInterviewRequest, FlowStructureDescribed, FlowStructureDescription, FlowStructureInstance, FlowStructureMember, FlowSubflow, FlowSubflowInputAssignment, FlowSubflowOutputAssignment, FlowSummary, FlowTextTemplate, FlowTraceEntry, FlowTransactionModel, FlowTransform, FlowTransformType, FlowTransformValue, FlowTransformValueAction, FlowTriggerType, FlowTypedEntry, FlowTypedValue, FlowUnsupportedNode, FlowValidationIssue, FlowValidationResult, FlowValue, FlowVariable, FlowVersionStatus, FlowVersionSummary, FlowWait, FlowWaitEvent, NamePickerOption, PaletteGroup, PaletteItem, ParameterHolder, PathCatalog, PathContainer, PathContainerKind, PathEntry, PathLevel, PathLevelStatus, PathNavigation, PathNavigationRequest, PathResolution, PathStopReason, StructureMemberUsage, ValueMode };
|