@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/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 **e** step di orchestrazione, un unico
2196
- * spazio di nomi. Il controllo di unicita' che guarda solo le variabili lascia passare una
2197
- * variabile omonima di un node (§13.5); quello che dimentica gli step lascia passare uno
2198
- * step omonimo di una variabile, che e' `NAME_DUPLICATED` allo stesso modo (§5.13).
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
- /** Uno screen in un flow che non mostra nulla: si segnala, non si nasconde (§3.1). */
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" | "unknown" | "member" | "known" | "navigated" | "host" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid">;
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<"panel" | "dialog">;
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
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@esfaenza/flow-builder",
3
- "version": "20.3.13",
3
+ "version": "20.3.15",
4
4
  "peerDependencies": {
5
+ "@angular/cdk": "^20.2.14",
5
6
  "@angular/common": "^20.3.25",
6
7
  "@angular/core": "^20.3.25",
7
8
  "@foblex/flow": ">=19.0.0",
@@ -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
+ }