@esfaenza/flow-builder 20.3.13 → 20.3.15
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 +52 -5
- package/fesm2022/esfaenza-flow-builder.mjs +979 -66
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +428 -11
- package/package.json +2 -1
- package/styles/flow-builder.css +33 -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 { CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Modello del documento Flow — FRONTEND.md §3, §4, §5.
|
|
@@ -188,6 +189,91 @@ interface FlowScreen extends FlowNodeBase {
|
|
|
188
189
|
outputParameters?: FlowOutputParameter[];
|
|
189
190
|
connector?: FlowConnector;
|
|
190
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* §5.2 — il tipo di un campo di screen dinamico. L'elenco autoritativo e' il dizionario
|
|
194
|
+
* `screenFieldTypes`, che porta anche i flag (`storesValue`, `isContainer`, …) con cui
|
|
195
|
+
* l'editor decide quali campi mostrare: qui il tipo e' aperto proprio per quello.
|
|
196
|
+
*/
|
|
197
|
+
type FlowScreenFieldType = 'DisplayText' | 'InputField' | 'LargeTextArea' | 'PasswordField' | 'RadioButtons' | 'DropdownBox' | 'MultiSelectCheckboxes' | 'MultiSelectPicklist' | 'ComponentInstance' | 'Region' | 'RegionContainer' | 'ObjectProvided' | string;
|
|
198
|
+
/** §5.2 — la sezione con o senza intestazione. */
|
|
199
|
+
type FlowRegionContainerType = 'SectionWithHeader' | 'SectionWithoutHeader' | string;
|
|
200
|
+
/** §5.2 — cosa succede ai valori quando si torna sulla schermata. */
|
|
201
|
+
type FlowScreenFieldInputsRevisited = 'UseStoredValues' | 'ResetValues' | string;
|
|
202
|
+
/** §5.2 — regola di validazione di un campo: espressione piu' messaggio d'errore. */
|
|
203
|
+
interface FlowScreenValidationRule {
|
|
204
|
+
formulaExpression?: string;
|
|
205
|
+
errorMessage?: string;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* §5.2 — un campo di uno screen dinamico.
|
|
209
|
+
*
|
|
210
|
+
* Due cose che il tipo non dice da solo:
|
|
211
|
+
* - un campo che raccoglie un valore **e' una risorsa del flow**, referenziabile per nome e di
|
|
212
|
+
* sola lettura (`kind: "ScreenField"`, §4.6): il suo `name` vive nello stesso spazio dei nomi
|
|
213
|
+
* di node e risorse (§3.3), e un Assignment che ci scrive e' `TARGET_NOT_WRITABLE`;
|
|
214
|
+
* - `fields` esiste solo sui contenitori (`Region`, `RegionContainer`) e l'annidamento previsto
|
|
215
|
+
* e' **sezione → colonne → campi**: piu' profondo di così e' un avviso.
|
|
216
|
+
*/
|
|
217
|
+
interface FlowScreenField {
|
|
218
|
+
name?: string;
|
|
219
|
+
/** Obbligatorio: senza, `SCREEN_FIELD_TYPE_MISSING`. */
|
|
220
|
+
fieldType?: FlowScreenFieldType;
|
|
221
|
+
/** La label; per `DisplayText` e' il testo stesso. Supporta i merge field `{!...}`. */
|
|
222
|
+
fieldText?: string;
|
|
223
|
+
helpText?: string;
|
|
224
|
+
/** Obbligatorio dove il tipo `storesValue`, tranne `ObjectProvided` (§5.2). */
|
|
225
|
+
dataType?: FlowDataType;
|
|
226
|
+
objectType?: string;
|
|
227
|
+
isRequired?: boolean;
|
|
228
|
+
/** Default `true`. A `false` il runtime **ignora** cio' che il client rimanda indietro. */
|
|
229
|
+
isEditable?: boolean;
|
|
230
|
+
defaultValue?: FlowValue;
|
|
231
|
+
/** Nome di una choice; fuori da `choiceReferences` e' un avviso. */
|
|
232
|
+
defaultSelectedChoiceReference?: string;
|
|
233
|
+
/** Nomi di `FlowChoice` o `FlowDynamicChoiceSet`, **nell'ordine di presentazione**. */
|
|
234
|
+
choiceReferences?: string[];
|
|
235
|
+
scale?: number;
|
|
236
|
+
maxLength?: number;
|
|
237
|
+
/** 1..12 nella griglia della schermata: il frontend puo' ignorarla. */
|
|
238
|
+
width?: number;
|
|
239
|
+
/** Solo sui contenitori: sezione → colonne → campi. */
|
|
240
|
+
fields?: FlowScreenField[];
|
|
241
|
+
regionContainerType?: FlowRegionContainerType;
|
|
242
|
+
/** `ComponentInstance`: il componente del frontend, dal catalogo dei form. */
|
|
243
|
+
extensionName?: string;
|
|
244
|
+
inputParameters?: FlowInputParameter[];
|
|
245
|
+
outputParameters?: FlowOutputParameter[];
|
|
246
|
+
/** Insieme a `outputParameters` e' `OUTPUT_CONFIGURATION_CONFLICT` (§5.2). */
|
|
247
|
+
storeOutputAutomatically?: boolean;
|
|
248
|
+
/** `ObjectProvided`: forma `<Oggetto>.<Campo>`. */
|
|
249
|
+
objectFieldReference?: string;
|
|
250
|
+
inputsOnNextNavToAssocScrn?: FlowScreenFieldInputsRevisited;
|
|
251
|
+
validationRule?: FlowScreenValidationRule;
|
|
252
|
+
/** Come una regola di Decision: rivalutata sui valori appena inviati (§5.2). */
|
|
253
|
+
visibilityRule?: FlowConditionHolder;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* §5.2 — lo screen dinamico: **descrive i propri campi**, invece di referenziare un form.
|
|
257
|
+
*
|
|
258
|
+
* E' il complemento dello Screen a form (§5.1), non il suo sostituto: convivono nello stesso
|
|
259
|
+
* flow e il motore li tratta allo stesso modo. Cambia chi decide il layout.
|
|
260
|
+
*/
|
|
261
|
+
interface FlowDynamicScreen extends FlowNodeBase {
|
|
262
|
+
helpText?: string;
|
|
263
|
+
allowBack?: boolean;
|
|
264
|
+
allowFinish?: boolean;
|
|
265
|
+
allowPause?: boolean;
|
|
266
|
+
pausedText?: string;
|
|
267
|
+
showHeader?: boolean;
|
|
268
|
+
showFooter?: boolean;
|
|
269
|
+
backButtonLabel?: string;
|
|
270
|
+
nextOrFinishButtonLabel?: string;
|
|
271
|
+
pauseButtonLabel?: string;
|
|
272
|
+
/** Nome di uno stage dichiarato: alimenta l'indicatore di avanzamento. */
|
|
273
|
+
stageReference?: string;
|
|
274
|
+
fields?: FlowScreenField[];
|
|
275
|
+
connector?: FlowConnector;
|
|
276
|
+
}
|
|
191
277
|
type FlowAssignmentOperator = 'Assign' | 'Add' | 'Subtract' | 'AddAtStart' | 'AssignCount' | 'RemoveFirst' | 'RemoveAll' | 'RemovePosition' | 'RemoveAfterFirst' | 'RemoveBeforeFirst' | 'RemoveUncommon' | string;
|
|
192
278
|
interface FlowAssignmentItem {
|
|
193
279
|
assignToReference?: string;
|
|
@@ -504,6 +590,7 @@ interface FlowDefinition {
|
|
|
504
590
|
dynamicChoiceSets?: FlowDynamicChoiceSet[];
|
|
505
591
|
stages?: FlowStage[];
|
|
506
592
|
screens?: FlowScreen[];
|
|
593
|
+
dynamicScreens?: FlowDynamicScreen[];
|
|
507
594
|
assignments?: FlowAssignment[];
|
|
508
595
|
decisions?: FlowDecision[];
|
|
509
596
|
loops?: FlowLoop[];
|
|
@@ -530,13 +617,13 @@ interface FlowDefinition {
|
|
|
530
617
|
customProperties?: FlowCustomProperty[];
|
|
531
618
|
}
|
|
532
619
|
/** 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"];
|
|
620
|
+
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
621
|
type FlowNodeCollection = (typeof FLOW_NODE_COLLECTIONS)[number];
|
|
535
622
|
/** Le collection di risorse (§4.6). Condividono lo spazio dei nomi con i node (§3.3). */
|
|
536
623
|
declare const FLOW_RESOURCE_COLLECTIONS: readonly ["variables", "constants", "formulas", "textTemplates", "choices", "dynamicChoiceSets", "stages"];
|
|
537
624
|
type FlowResourceCollection = (typeof FLOW_RESOURCE_COLLECTIONS)[number];
|
|
538
625
|
/** 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;
|
|
626
|
+
type FlowElementType = 'Screen' | 'DynamicScreen' | 'Assignment' | 'Decision' | 'Loop' | 'CollectionProcessor' | 'CustomError' | 'Wait' | 'RecordLookup' | 'RecordCreate' | 'RecordUpdate' | 'RecordDelete' | 'RecordRollback' | 'ActionCall' | 'ScriptCall' | 'Subflow' | 'Transform' | 'OrchestratedStage' | 'Step' | 'Experiment' | string;
|
|
540
627
|
/** Un node qualunque, come lo vede il canvas. */
|
|
541
628
|
type FlowAnyNode = FlowNodeBase & Record<string, unknown>;
|
|
542
629
|
|
|
@@ -629,6 +716,27 @@ interface FlowStageStepTypeEntry extends FlowDictionaryEntry {
|
|
|
629
716
|
/** `true` → il rifiuto e' un esito previsto, e prende il `faultConnector` dello stage. */
|
|
630
717
|
supportsRejection?: boolean;
|
|
631
718
|
}
|
|
719
|
+
/**
|
|
720
|
+
* §5.2, §6.4 — un tipo di campo di screen dinamico.
|
|
721
|
+
*
|
|
722
|
+
* E' l'unica voce di dizionario che porta piu' di `value`/`label`/`description`, e i flag non
|
|
723
|
+
* sono un di piu': sono **gli stessi** che applica il runtime. Reimplementarli lato editor
|
|
724
|
+
* porta prima o poi a proporre una configurazione che il motore rifiuta — un `dataType` su un
|
|
725
|
+
* `DisplayText`, delle choice su una textarea.
|
|
726
|
+
*/
|
|
727
|
+
interface FlowScreenFieldTypeEntry extends FlowDictionaryEntry {
|
|
728
|
+
value: FlowScreenFieldType;
|
|
729
|
+
/** Il campo raccoglie un valore: e' una risorsa del flow, e vuole `dataType`, default, … */
|
|
730
|
+
storesValue?: boolean;
|
|
731
|
+
/** Il valore raccolto e' una **collection**, non una stringa con i valori concatenati. */
|
|
732
|
+
isCollection?: boolean;
|
|
733
|
+
/** Il campo si configura con `choiceReferences`. */
|
|
734
|
+
acceptsChoices?: boolean;
|
|
735
|
+
/** Il campo contiene altri campi (`Region`, `RegionContainer`). */
|
|
736
|
+
isContainer?: boolean;
|
|
737
|
+
/** `dataType` obbligatorio: senza, `DATA_TYPE_MISSING`. */
|
|
738
|
+
requiresDataType?: boolean;
|
|
739
|
+
}
|
|
632
740
|
interface FlowResourceKindEntry extends FlowDictionaryEntry {
|
|
633
741
|
/** Solo le variabili sono scrivibili (§4.6). */
|
|
634
742
|
isWritable?: boolean;
|
|
@@ -667,6 +775,12 @@ interface FlowDictionaries {
|
|
|
667
775
|
assigneeTypes?: FlowDictionaryEntry[];
|
|
668
776
|
conditionLogicModes?: FlowDictionaryEntry[];
|
|
669
777
|
screenNavigations?: FlowDictionaryEntry[];
|
|
778
|
+
/** §5.2 — i tipi di campo di uno screen dinamico, con i flag che guidano il form. */
|
|
779
|
+
screenFieldTypes?: FlowScreenFieldTypeEntry[];
|
|
780
|
+
/** §5.2 — `SectionWithHeader` | `SectionWithoutHeader`. */
|
|
781
|
+
regionContainerTypes?: FlowDictionaryEntry[];
|
|
782
|
+
/** §5.2 — `UseStoredValues` | `ResetValues` (`inputsOnNextNavToAssocScrn`). */
|
|
783
|
+
screenFieldInputsRevisited?: FlowDictionaryEntry[];
|
|
670
784
|
}
|
|
671
785
|
interface FlowObjectSummary {
|
|
672
786
|
name: string;
|
|
@@ -1673,6 +1787,43 @@ declare function areTypesComparable(left: FlowDataType | undefined | null, right
|
|
|
1673
1787
|
*/
|
|
1674
1788
|
declare function parseInvariantNumber(raw: string): number | undefined;
|
|
1675
1789
|
|
|
1790
|
+
/**
|
|
1791
|
+
* Quale campo di un `FlowElementReferenceOrValue` porta davvero il valore — FRONTEND.md §4.2.
|
|
1792
|
+
*
|
|
1793
|
+
* La regola del contratto e' "uno e un solo campo valorizzato", e la §2 dice che cio' che non c'e'
|
|
1794
|
+
* si **omette**. Un backend che serializza tutte le proprieta' — `System.Text.Json` senza
|
|
1795
|
+
* `IgnoreNullValues` lo fa di default — rispetta il contratto nella sostanza e lo viola nella forma:
|
|
1796
|
+
* arriva `{"enumValue": "InIstruttoria", "formulaExpression": null, ...}`, cioe' un solo valore e
|
|
1797
|
+
* sette caselle piene di niente.
|
|
1798
|
+
*
|
|
1799
|
+
* Il campo si sceglieva con `!== undefined`, e un `null` passava: la prima casella letta —
|
|
1800
|
+
* `formulaExpression` — vinceva, l'editor apriva la formula (vuota) e il valore, pur presente nel
|
|
1801
|
+
* documento, spariva dalla vista. Da qui questa funzione sola: **`null` e' assente quanto
|
|
1802
|
+
* `undefined`**, e chi interpreta un valore la usa invece di confrontare con `undefined`.
|
|
1803
|
+
*
|
|
1804
|
+
* Sta in `core/` perche' i chiamanti sono piu' d'uno — l'editor del valore, l'editor delle
|
|
1805
|
+
* condizioni — e la regola non deve divergere fra loro.
|
|
1806
|
+
*/
|
|
1807
|
+
|
|
1808
|
+
/**
|
|
1809
|
+
* I campi che possono portare il valore, **nell'ordine in cui si interpretano**: `formulaExpression`
|
|
1810
|
+
* per primo perche' e' l'unico a due campi, poi il riferimento, poi i letterali. `formulaDataType`
|
|
1811
|
+
* non c'e': accompagna l'espressione, non e' un valore da solo.
|
|
1812
|
+
*/
|
|
1813
|
+
declare const FLOW_VALUE_FIELDS: readonly (keyof FlowValue)[];
|
|
1814
|
+
/** I soli campi letterali: quelli che l'editor mostra sotto la modalita' «Valore». */
|
|
1815
|
+
declare const FLOW_VALUE_LITERAL_FIELDS: readonly (keyof FlowValue)[];
|
|
1816
|
+
/**
|
|
1817
|
+
* `true` se il campo porta un valore. Attenzione ai falsi legittimi: `booleanValue: false`,
|
|
1818
|
+
* `numberValue: 0` e `stringValue: ''` sono valori, quindi il confronto e' con `null`/`undefined`
|
|
1819
|
+
* e non una verifica di verita'.
|
|
1820
|
+
*/
|
|
1821
|
+
declare function isValued(field: unknown): boolean;
|
|
1822
|
+
/** I campi valorizzati, nell'ordine di interpretazione: piu' di uno e' `VALUE_AMBIGUOUS` (§4.2). */
|
|
1823
|
+
declare function valuedFieldsOf(value: FlowValue | undefined | null): (keyof FlowValue)[];
|
|
1824
|
+
/** Il campo che l'editor considera **il** valore, cioe' il primo valorizzato nell'ordine sopra. */
|
|
1825
|
+
declare function valuedFieldOf(value: FlowValue | undefined | null): keyof FlowValue | undefined;
|
|
1826
|
+
|
|
1676
1827
|
/**
|
|
1677
1828
|
* Gli step di uno stage di orchestrazione — FRONTEND.md §5.13.
|
|
1678
1829
|
*
|
|
@@ -1705,6 +1856,77 @@ declare function stageStepOutputReferenced(reference: string | undefined, steps:
|
|
|
1705
1856
|
*/
|
|
1706
1857
|
declare const ORCHESTRATION_CONDITION_OUTPUT = "isOrchestrationConditionMet";
|
|
1707
1858
|
|
|
1859
|
+
/**
|
|
1860
|
+
* L'albero dei campi di uno screen dinamico — FRONTEND.md §5.2.
|
|
1861
|
+
*
|
|
1862
|
+
* Un campo puo' contenerne altri (`Region` dentro `RegionContainer`), quindi «il campo
|
|
1863
|
+
* selezionato» non e' un indice ma un **percorso di indici**: `[1, 0, 2]` e' il terzo campo
|
|
1864
|
+
* della prima colonna della seconda sezione. Tutto cio' che cammina l'albero sta qui, perche'
|
|
1865
|
+
* inspector, store e outline lo fanno con la stessa regola e sbagliarne una copia significa
|
|
1866
|
+
* scrivere in un campo diverso da quello che l'utente vede selezionato.
|
|
1867
|
+
*
|
|
1868
|
+
* L'altra ragione per cui questo file esiste: **i campi che raccolgono un valore sono risorse
|
|
1869
|
+
* del flow** (§5.2). I loro nomi vivono nello stesso spazio dei nomi di node e risorse (§3.3),
|
|
1870
|
+
* quindi `usedNames` dello store deve comprenderli — un campo omonimo di una variabile e'
|
|
1871
|
+
* `NAME_DUPLICATED`, non una stranezza tollerata.
|
|
1872
|
+
*/
|
|
1873
|
+
|
|
1874
|
+
/** Il percorso di un campo nell'albero: indici dalla radice alla foglia. */
|
|
1875
|
+
type FlowScreenFieldPath = number[];
|
|
1876
|
+
/** Un campo con il suo percorso e la sua profondita': e' cio' che l'albero mostra. */
|
|
1877
|
+
interface FlowScreenFieldNode {
|
|
1878
|
+
field: FlowScreenField;
|
|
1879
|
+
path: FlowScreenFieldPath;
|
|
1880
|
+
depth: number;
|
|
1881
|
+
}
|
|
1882
|
+
/** Uguaglianza fra percorsi: due array diversi con gli stessi indici sono lo stesso campo. */
|
|
1883
|
+
declare function samePath(a: FlowScreenFieldPath | null, b: FlowScreenFieldPath | null): boolean;
|
|
1884
|
+
/** `true` se `parent` e' un antenato di `path` (o lo stesso campo). */
|
|
1885
|
+
declare function isPathInside(parent: FlowScreenFieldPath, path: FlowScreenFieldPath): boolean;
|
|
1886
|
+
/** Chiave stabile di un percorso: serve al `track` e agli id delle liste di trascinamento. */
|
|
1887
|
+
declare function pathKey(path: FlowScreenFieldPath): string;
|
|
1888
|
+
/** Il campo a un percorso, o `undefined` se il percorso non esiste piu'. */
|
|
1889
|
+
declare function fieldAt(fields: FlowScreenField[] | undefined, path: FlowScreenFieldPath): FlowScreenField | undefined;
|
|
1890
|
+
/** L'albero appiattito in ordine di visita, con profondita': e' l'elenco che si disegna. */
|
|
1891
|
+
declare function flattenFields(fields: FlowScreenField[] | undefined, parentPath?: FlowScreenFieldPath): FlowScreenFieldNode[];
|
|
1892
|
+
/** Tutti i campi di uno screen, in ordine di visita. */
|
|
1893
|
+
declare function allFieldsOf(screen: FlowDynamicScreen | undefined): FlowScreenField[];
|
|
1894
|
+
/**
|
|
1895
|
+
* I nomi dei campi di tutti gli screen dinamici del documento.
|
|
1896
|
+
*
|
|
1897
|
+
* Contenitori compresi: un `Region` non e' una risorsa — non raccoglie un valore — ma il suo
|
|
1898
|
+
* nome resta un nome, e due campi omonimi nella stessa schermata sono comunque un problema.
|
|
1899
|
+
* Chi vuole i **soli** riferimenti proponibili usa `isFieldResource`.
|
|
1900
|
+
*/
|
|
1901
|
+
declare function screenFieldNames(definition: FlowDefinition | undefined): string[];
|
|
1902
|
+
/**
|
|
1903
|
+
* §5.2 — il campo e' una risorsa del flow (`kind: "ScreenField"`), quindi referenziabile
|
|
1904
|
+
* per nome ovunque e **di sola lettura**.
|
|
1905
|
+
*
|
|
1906
|
+
* Un `ComponentInstance` non lo e' pur essendo un campo: non ha un valore proprio, ce l'hanno
|
|
1907
|
+
* i suoi output. Il flag `storesValue` arriva dal dizionario, che e' l'unica fonte autoritativa:
|
|
1908
|
+
* senza la voce del dizionario si risponde `false`, cioe' "non lo so" — proporre un riferimento
|
|
1909
|
+
* che il backend non conosce e' peggio che non proporlo.
|
|
1910
|
+
*/
|
|
1911
|
+
declare function isFieldResource(field: FlowScreenField | undefined, entry: FlowScreenFieldTypeEntry | undefined): boolean;
|
|
1912
|
+
/** Inserisce un campo dentro `parentPath` alla posizione indicata (in fondo se assente). */
|
|
1913
|
+
declare function insertField(screen: FlowDynamicScreen, parentPath: FlowScreenFieldPath, field: FlowScreenField, index?: number): FlowScreenFieldPath | undefined;
|
|
1914
|
+
/** Rimuove il campo a un percorso, e con esso tutto cio' che conteneva. */
|
|
1915
|
+
declare function removeField(screen: FlowDynamicScreen, path: FlowScreenFieldPath): void;
|
|
1916
|
+
/**
|
|
1917
|
+
* Sposta un campo dentro un'altra lista, a una posizione precisa.
|
|
1918
|
+
*
|
|
1919
|
+
* `toIndex` e' l'indice **dopo** l'estrazione, cioe' la stessa convenzione di
|
|
1920
|
+
* `moveItemInArray` del CDK: e' l'indice che il drop del trascinamento consegna, e riallinearlo
|
|
1921
|
+
* qui sposterebbe di uno ogni trascinamento verso il basso nella stessa lista.
|
|
1922
|
+
*
|
|
1923
|
+
* Uno spostamento dentro se stesso e' rifiutato: sposterebbe un contenitore dentro il proprio
|
|
1924
|
+
* sottoalbero, e il sottoalbero sparirebbe con lui.
|
|
1925
|
+
*/
|
|
1926
|
+
declare function moveField(screen: FlowDynamicScreen, from: FlowScreenFieldPath, toParent: FlowScreenFieldPath, toIndex: number): FlowScreenFieldPath | undefined;
|
|
1927
|
+
/** Duplica un campo accanto all'originale, rinominandolo: i nomi restano unici (§3.3). */
|
|
1928
|
+
declare function duplicateField(screen: FlowDynamicScreen, path: FlowScreenFieldPath, newName: string): FlowScreenFieldPath | undefined;
|
|
1929
|
+
|
|
1708
1930
|
/**
|
|
1709
1931
|
* La gravita' di un rilievo, ridotta a tre secchi — FRONTEND.md §7.
|
|
1710
1932
|
*
|
|
@@ -1779,6 +2001,27 @@ declare class FlowDictionaryStore {
|
|
|
1779
2001
|
readonly stageStepTypes: _angular_core.Signal<FlowStageStepTypeEntry[]>;
|
|
1780
2002
|
readonly assigneeTypes: _angular_core.Signal<FlowDictionaryEntry[]>;
|
|
1781
2003
|
readonly conditionLogicModes: _angular_core.Signal<FlowDictionaryEntry[]>;
|
|
2004
|
+
readonly regionContainerTypes: _angular_core.Signal<FlowDictionaryEntry[]>;
|
|
2005
|
+
readonly screenFieldInputsRevisited: _angular_core.Signal<FlowDictionaryEntry[]>;
|
|
2006
|
+
/** §5.2 — i tipi di campo di uno screen dinamico, con i flag che guidano il form. */
|
|
2007
|
+
readonly screenFieldTypes: _angular_core.Signal<FlowScreenFieldTypeEntry[]>;
|
|
2008
|
+
/**
|
|
2009
|
+
* La voce di un tipo di campo. **Non c'e' un fallback cablato**, di proposito: i flag sono gli
|
|
2010
|
+
* stessi che applica il runtime (§5.2, §6.4), e indovinarli qui vorrebbe dire proporre una
|
|
2011
|
+
* configurazione che il motore rifiuta. Voce assente = nessun flag, cioe' il form mostra i soli
|
|
2012
|
+
* campi comuni e lascia decidere al backend.
|
|
2013
|
+
*/
|
|
2014
|
+
screenFieldType(value: string | undefined | null): FlowScreenFieldTypeEntry | undefined;
|
|
2015
|
+
/** §5.2 — il campo raccoglie un valore: e' una risorsa, e vuole tipo, default, … */
|
|
2016
|
+
screenFieldStoresValue(value: string | undefined | null): boolean;
|
|
2017
|
+
/** §5.2 — il campo contiene altri campi: `Region`, `RegionContainer`. */
|
|
2018
|
+
screenFieldIsContainer(value: string | undefined | null): boolean;
|
|
2019
|
+
/** §5.2 — il campo si configura con `choiceReferences`. */
|
|
2020
|
+
screenFieldAcceptsChoices(value: string | undefined | null): boolean;
|
|
2021
|
+
/** §5.2 — `dataType` obbligatorio: senza, `DATA_TYPE_MISSING`. */
|
|
2022
|
+
screenFieldRequiresDataType(value: string | undefined | null): boolean;
|
|
2023
|
+
/** §5.2 — il valore raccolto e' una collection: contano gli operatori di collection. */
|
|
2024
|
+
screenFieldIsCollection(value: string | undefined | null): boolean;
|
|
1782
2025
|
readonly elementTypes: _angular_core.Signal<FlowElementTypeEntry[]>;
|
|
1783
2026
|
/**
|
|
1784
2027
|
* I tipi mostrabili nella palette: `isSupported: false` va nascosto (§3.2, §13.9).
|
|
@@ -2192,10 +2435,12 @@ declare class FlowDocumentStore {
|
|
|
2192
2435
|
readonly nodeByName: _angular_core.Signal<Map<string, FlowNodeRef>>;
|
|
2193
2436
|
readonly resources: _angular_core.Signal<FlowResourceRef[]>;
|
|
2194
2437
|
/**
|
|
2195
|
-
* §3.3 — l'insieme dei nomi già usati: node, risorse
|
|
2196
|
-
* spazio di nomi. Il controllo di unicita' che guarda solo le
|
|
2197
|
-
* variabile omonima di un node (§13.5); quello che dimentica gli
|
|
2198
|
-
* step omonimo di una variabile
|
|
2438
|
+
* §3.3 — l'insieme dei nomi già usati: node, risorse, step di orchestrazione **e campi di
|
|
2439
|
+
* screen dinamico**, un unico spazio di nomi. Il controllo di unicita' che guarda solo le
|
|
2440
|
+
* variabili lascia passare una variabile omonima di un node (§13.5); quello che dimentica gli
|
|
2441
|
+
* step lascia passare uno step omonimo di una variabile (§5.13); quello che dimentica i campi
|
|
2442
|
+
* lascia passare un campo omonimo di una variabile, che e' `NAME_DUPLICATED` come gli altri
|
|
2443
|
+
* — e lì il danno e' peggiore, perche' un campo **e' un riferimento** (§5.2).
|
|
2199
2444
|
*/
|
|
2200
2445
|
readonly usedNames: _angular_core.Signal<string[]>;
|
|
2201
2446
|
/** Gli archi derivati dal documento, Start incluso. */
|
|
@@ -2252,6 +2497,15 @@ declare class FlowDocumentStore {
|
|
|
2252
2497
|
* riferimenti a output automatico (`Vecchio.Campo` → `Nuovo.Campo`).
|
|
2253
2498
|
*/
|
|
2254
2499
|
renameNode(oldName: string, newName: string): void;
|
|
2500
|
+
/**
|
|
2501
|
+
* §5.2 — rinomina un campo di screen dinamico riscrivendo i riferimenti che lo usano.
|
|
2502
|
+
*
|
|
2503
|
+
* Un campo che raccoglie un valore **e' una risorsa** referenziabile per nome: rinominarlo
|
|
2504
|
+
* senza riscrivere le condizioni e le assegnazioni che lo citano lascia dei
|
|
2505
|
+
* `REFERENCE_UNKNOWN` che si scoprono solo alla validazione. Vale la stessa regola dei node
|
|
2506
|
+
* (§13.8): nessuna primitiva del backend lo fa, lo fa l'editor.
|
|
2507
|
+
*/
|
|
2508
|
+
renameScreenField(nodeName: string, path: FlowScreenFieldPath, newName: string): void;
|
|
2255
2509
|
/** Rinomina una risorsa, riscrivendo i riferimenti che la usano. */
|
|
2256
2510
|
renameResource(collection: FlowResourceCollection, index: number, newName: string): void;
|
|
2257
2511
|
/**
|
|
@@ -2752,7 +3006,11 @@ declare class ElementPaletteComponent {
|
|
|
2752
3006
|
readonly isEmpty: _angular_core.Signal<boolean>;
|
|
2753
3007
|
onFilter(value: string): void;
|
|
2754
3008
|
pick(item: PaletteItem): void;
|
|
2755
|
-
/**
|
|
3009
|
+
/**
|
|
3010
|
+
* Uno screen in un flow che non mostra nulla: si segnala, non si nasconde (§3.1). Vale per
|
|
3011
|
+
* entrambi i tipi di screen — quello a form e quello dinamico sono la stessa interazione con
|
|
3012
|
+
* l'utente, e in un flow `AutoLaunched` non c'e' nessuno a cui mostrarli.
|
|
3013
|
+
*/
|
|
2756
3014
|
isIncompatible(item: PaletteItem): boolean;
|
|
2757
3015
|
/**
|
|
2758
3016
|
* Il testo del tooltip. Su una voce che nasce da una variante ci va anche il nome del tipo:
|
|
@@ -2898,7 +3156,7 @@ declare class ReferencePickerComponent {
|
|
|
2898
3156
|
* percorso inesistente di uno scope che i percorsi li dichiara, perche' lì il backend
|
|
2899
3157
|
* risponderebbe `GLOBAL_UNKNOWN`.
|
|
2900
3158
|
*/
|
|
2901
|
-
readonly valueState: _angular_core.Signal<"empty" | "
|
|
3159
|
+
readonly valueState: _angular_core.Signal<"empty" | "known" | "navigated" | "host" | "member" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid" | "unknown">;
|
|
2902
3160
|
/** Le parole cambiano con la tappa: un campo di un'entita' non e' un membro di una classe. */
|
|
2903
3161
|
private readonly tailIsObject;
|
|
2904
3162
|
private readonly tailContainer;
|
|
@@ -3791,6 +4049,159 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
|
|
|
3791
4049
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OrchestratedStageInspectorComponent, "fb-orchestrated-stage-inspector", never, {}, {}, never, never, true, never>;
|
|
3792
4050
|
}
|
|
3793
4051
|
|
|
4052
|
+
/** Il payload della lista di rilascio: l'albero appiattito, cioe' le righe che si vedono. */
|
|
4053
|
+
type DropData = FlowScreenFieldNode[];
|
|
4054
|
+
declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
|
|
4055
|
+
private readonly catalog;
|
|
4056
|
+
protected readonly dictionary: FlowDictionaryStore;
|
|
4057
|
+
readonly elementType: FlowElementType;
|
|
4058
|
+
readonly screen: _angular_core.Signal<FlowDynamicScreen>;
|
|
4059
|
+
/** Il percorso del campo selezionato: `null` = nessuno, e il pannello destro lo dice. */
|
|
4060
|
+
private readonly selection;
|
|
4061
|
+
/** L'albero appiattito: e' anche cio' che serve per capire quali percorsi esistono ancora. */
|
|
4062
|
+
readonly tree: _angular_core.Signal<FlowScreenFieldNode[]>;
|
|
4063
|
+
readonly selectedPath: _angular_core.Signal<FlowScreenFieldPath | null>;
|
|
4064
|
+
readonly selectedField: _angular_core.Signal<FlowScreenField | undefined>;
|
|
4065
|
+
/** La voce di dizionario del campo selezionato: e' lei a decidere il form di destra. */
|
|
4066
|
+
readonly selectedType: _angular_core.Signal<FlowScreenFieldTypeEntry | undefined>;
|
|
4067
|
+
/** Componenti e form sono la stessa domanda al frontend, e lo stesso catalogo (§5.2). */
|
|
4068
|
+
private readonly components;
|
|
4069
|
+
private readonly componentParameters;
|
|
4070
|
+
/** I tipi di enumerazione: dizionario chiuso, quindi `<select>` e non combo (§4.6). */
|
|
4071
|
+
private readonly enumTypes;
|
|
4072
|
+
constructor();
|
|
4073
|
+
readonly componentOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4074
|
+
readonly enumOptions: _angular_core.Signal<FlowCatalogEntry[]>;
|
|
4075
|
+
readonly componentParameterList: _angular_core.Signal<FlowCatalogParameter[]>;
|
|
4076
|
+
/**
|
|
4077
|
+
* Le choice proponibili: **solo** `choices` e `dynamicChoiceSets` (§5.2). Un elenco costruito
|
|
4078
|
+
* dai riferimenti in generale farebbe scegliere una variabile, che e'
|
|
4079
|
+
* `SCREEN_FIELD_CHOICE_UNKNOWN`.
|
|
4080
|
+
*/
|
|
4081
|
+
readonly choiceOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4082
|
+
/** Gli stage dichiarati: `stageReference` alimenta l'indicatore di avanzamento (§5.2). */
|
|
4083
|
+
readonly stageOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4084
|
+
readonly icon: string;
|
|
4085
|
+
isSelected(path: FlowScreenFieldPath): boolean;
|
|
4086
|
+
isContainer(field: FlowScreenField | undefined): boolean;
|
|
4087
|
+
/** L'etichetta mostrata nell'albero: `fieldText`, poi il nome, poi un segnaposto. */
|
|
4088
|
+
captionOf(field: FlowScreenField): string;
|
|
4089
|
+
typeLabelOf(field: FlowScreenField): string;
|
|
4090
|
+
/** La larghezza in dodicesimi: assente = tutta la riga, che e' il comportamento di default. */
|
|
4091
|
+
widthOf(field: FlowScreenField): number;
|
|
4092
|
+
/** `true` dove il tipo non e' nel dizionario: il form di destra lo dice invece di indovinare. */
|
|
4093
|
+
isUnknownType(field: FlowScreenField | undefined): boolean;
|
|
4094
|
+
/** Il campo raccoglie un valore, quindi e' referenziabile per nome nel resto del flow (§5.2). */
|
|
4095
|
+
readonly selectedIsResource: _angular_core.Signal<boolean>;
|
|
4096
|
+
/**
|
|
4097
|
+
* §5.2 — uno screen senza campi non ha niente da mostrare (`SCREEN_WITHOUT_FIELDS`), e uno
|
|
4098
|
+
* senza destinazione che non consente «fine» e' un vicolo cieco (`SCREEN_DEAD_END`). Si dicono
|
|
4099
|
+
* qui prima che lo dica la validazione.
|
|
4100
|
+
*/
|
|
4101
|
+
readonly isEmpty: _angular_core.Signal<boolean>;
|
|
4102
|
+
readonly isDeadEnd: _angular_core.Signal<boolean>;
|
|
4103
|
+
allowBack: _angular_core.Signal<boolean>;
|
|
4104
|
+
allowFinish: _angular_core.Signal<boolean>;
|
|
4105
|
+
allowPause: _angular_core.Signal<boolean>;
|
|
4106
|
+
showHeader: _angular_core.Signal<boolean>;
|
|
4107
|
+
showFooter: _angular_core.Signal<boolean>;
|
|
4108
|
+
/** §5.2 — `isEditable` ha default `true`: a `false` il runtime ignora cio' che torna. */
|
|
4109
|
+
readonly selectedIsEditable: _angular_core.Signal<boolean>;
|
|
4110
|
+
readonly selectedIsRequired: _angular_core.Signal<boolean>;
|
|
4111
|
+
/**
|
|
4112
|
+
* §5.2 — `storeOutputAutomatically` **insieme** a `outputParameters` e'
|
|
4113
|
+
* `OUTPUT_CONFIGURATION_CONFLICT`: la coppia si mostra come esclusiva, non come due caselle.
|
|
4114
|
+
*/
|
|
4115
|
+
readonly hasOutputConflict: _angular_core.Signal<boolean>;
|
|
4116
|
+
/** §5.2 — la choice di default fuori dall'elenco e' un avviso, non un errore. */
|
|
4117
|
+
readonly defaultChoiceIsForeign: _angular_core.Signal<boolean>;
|
|
4118
|
+
/** §5.2 — `scale` su un campo non numerico e' `SCALE_NOT_APPLICABLE`. */
|
|
4119
|
+
readonly scaleApplies: _angular_core.Signal<boolean>;
|
|
4120
|
+
readonly requiresObjectType: _angular_core.Signal<boolean>;
|
|
4121
|
+
readonly objectTypeIsStructure: _angular_core.Signal<boolean>;
|
|
4122
|
+
/** L'oggetto di un `ObjectProvided`, cioe' la parte prima del punto (§5.2). */
|
|
4123
|
+
readonly providedObject: _angular_core.Signal<string>;
|
|
4124
|
+
readonly providedField: _angular_core.Signal<string>;
|
|
4125
|
+
select(path: FlowScreenFieldPath): void;
|
|
4126
|
+
/** Aggiunge un campo dentro il contenitore selezionato, o in fondo alla schermata. */
|
|
4127
|
+
addField(type: string): void;
|
|
4128
|
+
/**
|
|
4129
|
+
* Dove finisce un campo nuovo: dentro il contenitore selezionato (o dentro il contenitore
|
|
4130
|
+
* che contiene il campo selezionato), altrimenti in fondo alla schermata. È il gesto che
|
|
4131
|
+
* l'utente si aspetta dopo aver cliccato una colonna.
|
|
4132
|
+
*/
|
|
4133
|
+
private parentForNewField;
|
|
4134
|
+
removeSelected(): void;
|
|
4135
|
+
duplicateSelected(): void;
|
|
4136
|
+
/**
|
|
4137
|
+
* Spostamento con i tasti: la stessa operazione del trascinamento, per chi non trascina e per
|
|
4138
|
+
* i casi in cui la lista e' piu' alta del pannello.
|
|
4139
|
+
*/
|
|
4140
|
+
moveSelected(direction: -1 | 1): void;
|
|
4141
|
+
/**
|
|
4142
|
+
* Sposta il campo dentro il contenitore che lo precede. È la controparte esplicita del
|
|
4143
|
+
* trascinamento: dove l'albero e' lungo, mirare la riga giusta costa piu' di un clic.
|
|
4144
|
+
*/
|
|
4145
|
+
indentSelected(): void;
|
|
4146
|
+
/** Il contenitore in cui «porta dentro» metterebbe il campo, o `null` se non ce n'e' uno. */
|
|
4147
|
+
readonly indentTarget: _angular_core.Signal<FlowScreenFieldPath | null>;
|
|
4148
|
+
/** Estrae il campo dal proprio contenitore e lo mette subito dopo di esso. */
|
|
4149
|
+
outdentSelected(): void;
|
|
4150
|
+
/**
|
|
4151
|
+
* Rilascio del trascinamento sulla lista **piatta**.
|
|
4152
|
+
*
|
|
4153
|
+
* Il contenitore di arrivo non lo dice il CDK — c'e' una sola lista — ma si deduce dalla riga
|
|
4154
|
+
* che **precede** il punto di rilascio, che e' anche cio' che l'utente vede: rilasciare subito
|
|
4155
|
+
* sotto una sezione o una colonna significa «mettilo dentro»; rilasciare sotto un campo
|
|
4156
|
+
* normale significa «mettilo accanto». Sono le due sole intenzioni possibili.
|
|
4157
|
+
*/
|
|
4158
|
+
onDrop(event: CdkDragDrop<DropData>): void;
|
|
4159
|
+
/**
|
|
4160
|
+
* `preRemoval` distingue le due convenzioni sull'indice di arrivo: i comandi (su, giu',
|
|
4161
|
+
* porta fuori) ragionano sulla lista **dopo** l'estrazione, il rilascio ragiona su cio' che
|
|
4162
|
+
* si vedeva **prima**. Confonderle sposta di uno ogni trascinamento verso il basso.
|
|
4163
|
+
*/
|
|
4164
|
+
private applyMove;
|
|
4165
|
+
/** Scrive una proprieta' del campo selezionato; valore vuoto → chiave omessa (§2). */
|
|
4166
|
+
private patchField;
|
|
4167
|
+
setFieldProperty(property: keyof FlowScreenField, value: unknown): void;
|
|
4168
|
+
/**
|
|
4169
|
+
* Il nome si applica sull'uscita dal campo e passa da `renameScreenField`: il campo e' una
|
|
4170
|
+
* risorsa, quindi la rinomina deve riscrivere i riferimenti che lo citano (§5.2, §13.8).
|
|
4171
|
+
*/
|
|
4172
|
+
setFieldName(value: string): void;
|
|
4173
|
+
/**
|
|
4174
|
+
* Cambiare tipo **ripulisce** cio' che il tipo nuovo non prevede: choice su una textarea o un
|
|
4175
|
+
* `dataType` su un `DisplayText` sono `SCREEN_FIELD_CONFIGURATION_INVALID`, e lasciarli nel
|
|
4176
|
+
* documento significa lasciare un errore invisibile nell'editor.
|
|
4177
|
+
*/
|
|
4178
|
+
setFieldType(type: string): void;
|
|
4179
|
+
setDefaultValue(value: FlowValue | undefined): void;
|
|
4180
|
+
setNumberProperty(property: 'scale' | 'maxLength' | 'width', raw: string): void;
|
|
4181
|
+
/** `isRequired` si scrive solo quando e' vero: il default e' facoltativo. */
|
|
4182
|
+
setRequired(value: boolean): void;
|
|
4183
|
+
/** `isEditable` ha default `true`: si scrive solo il `false`, che e' la scelta significativa. */
|
|
4184
|
+
setEditable(value: boolean): void;
|
|
4185
|
+
addChoice(name: string | undefined): void;
|
|
4186
|
+
removeChoice(index: number): void;
|
|
4187
|
+
moveChoice(index: number, direction: -1 | 1): void;
|
|
4188
|
+
setValidationRule(part: 'formulaExpression' | 'errorMessage', value: string): void;
|
|
4189
|
+
/** La regola di visibilita' e' un blocco condizioni come quello di una Decision (§5.2). */
|
|
4190
|
+
onVisibilityChanged(mutate: (holder: FlowConditionHolder) => void): void;
|
|
4191
|
+
/** Il blocco passato all'editor delle condizioni: mai `undefined`, altrimenti non si apre. */
|
|
4192
|
+
readonly visibilityRule: _angular_core.Signal<FlowConditionHolder>;
|
|
4193
|
+
onComponentParametersChanged(mutate: (holder: ParameterHolder) => void): void;
|
|
4194
|
+
setStoreOutputAutomatically(value: boolean): void;
|
|
4195
|
+
/** `ObjectProvided`: oggetto e campo si scrivono in un unico `<Oggetto>.<Campo>` (§5.2). */
|
|
4196
|
+
setProvidedObject(value: string | undefined): void;
|
|
4197
|
+
setProvidedField(value: string | undefined): void;
|
|
4198
|
+
setScreenText(property: string, value: string): void;
|
|
4199
|
+
/** I flag con default `true` si scrivono solo quando si nega, per non sporcare il diff. */
|
|
4200
|
+
setScreenFlag(flag: 'allowBack' | 'allowFinish' | 'allowPause' | 'showHeader' | 'showFooter', value: boolean): void;
|
|
4201
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicScreenInspectorComponent, never>;
|
|
4202
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicScreenInspectorComponent, "fb-dynamic-screen-inspector", never, {}, {}, never, never, true, never>;
|
|
4203
|
+
}
|
|
4204
|
+
|
|
3794
4205
|
interface ResourceKindDescriptor {
|
|
3795
4206
|
collection: FlowResourceCollection;
|
|
3796
4207
|
label: string;
|
|
@@ -4051,7 +4462,7 @@ declare class FlowBuilderComponent {
|
|
|
4051
4462
|
* troppo. `panel` tiene il form nel pannello laterale, che e' piu' comodo quando si
|
|
4052
4463
|
* modificano molti elementi di fila perche' non c'e' niente da aprire e chiudere.
|
|
4053
4464
|
*/
|
|
4054
|
-
readonly inspectorMode: _angular_core.InputSignal<"
|
|
4465
|
+
readonly inspectorMode: _angular_core.InputSignal<"dialog" | "panel">;
|
|
4055
4466
|
readonly saved: _angular_core.OutputEmitterRef<FlowSaveResult>;
|
|
4056
4467
|
readonly activated: _angular_core.OutputEmitterRef<FlowSaveResult>;
|
|
4057
4468
|
readonly closeRequested: _angular_core.OutputEmitterRef<void>;
|
|
@@ -4101,6 +4512,12 @@ declare class FlowBuilderComponent {
|
|
|
4101
4512
|
* mancante; qui si decide solo se serve.
|
|
4102
4513
|
*/
|
|
4103
4514
|
readonly isProcessTypeOutOfCatalog: _angular_core.Signal<boolean>;
|
|
4515
|
+
/**
|
|
4516
|
+
* Quante schermate ha il flow. **Entrambi** i tipi di screen contano: quello a form e quello
|
|
4517
|
+
* dinamico sono la stessa interazione con l'utente, e contarne uno solo faceva comparire
|
|
4518
|
+
* «questo flow Screen non ha screen» su un flow fatto di soli screen dinamici (§5.2).
|
|
4519
|
+
*/
|
|
4520
|
+
private readonly screenCount;
|
|
4104
4521
|
/** `AutoLaunched` + screen e' un errore di validazione: si segnala subito (§13.6). */
|
|
4105
4522
|
readonly hasScreensInAutoLaunched: _angular_core.Signal<boolean>;
|
|
4106
4523
|
/** Un flow `Screen` senza screen e' `SCREEN_FLOW_WITHOUT_SCREENS`. */
|
|
@@ -4183,5 +4600,5 @@ declare class SelectValueDirective implements AfterViewChecked {
|
|
|
4183
4600
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectValueDirective, "select[fbValue]", never, { "fbValue": { "alias": "fbValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4184
4601
|
}
|
|
4185
4602
|
|
|
4186
|
-
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, 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, 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, variantFieldOf, variantOf, variantPresetOf };
|
|
4187
|
-
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 };
|
|
4603
|
+
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, 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 };
|
|
4604
|
+
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, 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 };
|
package/package.json
CHANGED
package/styles/flow-builder.css
CHANGED
|
@@ -506,3 +506,36 @@ f-flow .fb-edge--goto .f-connection-path {
|
|
|
506
506
|
background: color-mix(in srgb, var(--fb-warning, #b7791f) 8%, transparent);
|
|
507
507
|
font-size: 11px;
|
|
508
508
|
}
|
|
509
|
+
|
|
510
|
+
/* ------------------------------------------------ trascinamento (CDK) */
|
|
511
|
+
/*
|
|
512
|
+
* L'anteprima del trascinamento e' l'unico pezzo di UI che il CDK sposta **fuori** dal
|
|
513
|
+
* componente: la aggancia a `body` (o al piu' vicino contenitore con overlay), dove il CSS
|
|
514
|
+
* incapsulato dell'inspector non arriva. Senza queste regole il campo trascinato si vede
|
|
515
|
+
* come testo nudo senza sfondo — lo stesso motivo per cui gli archi stanno qui.
|
|
516
|
+
*/
|
|
517
|
+
.cdk-drag-preview {
|
|
518
|
+
display: flex;
|
|
519
|
+
align-items: center;
|
|
520
|
+
gap: 6px;
|
|
521
|
+
box-sizing: border-box;
|
|
522
|
+
padding: 4px 6px;
|
|
523
|
+
border: 1px solid var(--fb-accent, #4f6ef7);
|
|
524
|
+
border-radius: var(--fb-radius-xs, 6px);
|
|
525
|
+
background: var(--fb-surface, #fff);
|
|
526
|
+
box-shadow: var(--fb-shadow-md, 0 6px 18px rgb(16 24 40 / 10%));
|
|
527
|
+
font-size: 12px;
|
|
528
|
+
color: var(--fb-text, #1a1c23);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/* L'anteprima resta essenziale: il tipo e la barra della larghezza sono contorno, e in un
|
|
532
|
+
riquadro che segue il puntatore rubano l'attenzione al punto di rilascio. */
|
|
533
|
+
.cdk-drag-preview .fb-dyn__type,
|
|
534
|
+
.cdk-drag-preview .fb-dyn__width {
|
|
535
|
+
display: none;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
.cdk-drag-animating,
|
|
539
|
+
.cdk-drop-list-dragging .cdk-drag {
|
|
540
|
+
transition: transform 180ms cubic-bezier(0, 0, 0.2, 1);
|
|
541
|
+
}
|