@esfaenza/flow-builder 20.3.20 → 20.3.22

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
@@ -1269,6 +1269,69 @@ interface FlowStartInterviewRequest {
1269
1269
  inputs?: Record<string, unknown>;
1270
1270
  debug?: boolean;
1271
1271
  }
1272
+ /**
1273
+ * I comandi «Esegui» e «Debug» della barra dell'editor.
1274
+ *
1275
+ * Non e' una primitiva della §6.5: l'editor **non** esegue niente per conto suo. Raccoglie i
1276
+ * valori di ingresso in una finestra e li consegna all'applicazione ospite, che sa dove gira il
1277
+ * motore e con quale interfaccia lo si guarda — un runner suo, una scheda separata, un
1278
+ * debugger. Senza implementazione il comando fallisce con `MissingService`, che e' la risposta
1279
+ * onesta: un editor che finge di avviare un'esecuzione e' peggio di uno che dice di non poterlo
1280
+ * fare.
1281
+ *
1282
+ * Il flow si identifica per **nome e versione**, non per documento: si esegue cio' che e'
1283
+ * salvato, ed e' per questo che i due comandi sono spenti su un flow mai scritto e avvertono
1284
+ * quando ci sono modifiche non salvate.
1285
+ */
1286
+ interface FlowRunRequest {
1287
+ flowName: string;
1288
+ /** Assente → l'ospite decide (di norma l'attiva, altrimenti l'ultima), come in §6.1. */
1289
+ version?: number;
1290
+ /**
1291
+ * I valori delle variabili `isInput`, per nome. Sono già convertiti al tipo dichiarato: un
1292
+ * `Number` e' un numero, non la stringa digitata. Un'istanza di classe segue la forma della
1293
+ * §4.7 (`{type, instance:{className, members}}`), la stessa in lettura e in scrittura.
1294
+ */
1295
+ inputs?: Record<string, unknown>;
1296
+ /**
1297
+ * `true` sul comando «Debug». L'ospite ne fa cio' che vuole — traccia, breakpoint, passo
1298
+ * passo — ma il contratto ricorda che una traccia riporta i valori di **tutte** le risorse,
1299
+ * dati personali compresi (§6.5).
1300
+ */
1301
+ debug: boolean;
1302
+ }
1303
+ /**
1304
+ * Cio' che l'ospite puo' **restituire** da `runFlow`/`debugFlow`, e che l'editor mostra nel
1305
+ * pannello «Debug».
1306
+ *
1307
+ * Esiste per un caso preciso: un flow che non ha schermate — un `AutoLaunched`, o
1308
+ * un'orchestrazione che gira tutta in background — non ha nessuna interfaccia in cui guardare
1309
+ * cosa e' successo. Non c'e' un form da compilare, non c'e' una finestra del runtime: c'e' solo
1310
+ * la traccia, e il posto in cui la si vuole e' l'editor, accanto al grafo su cui si sta
1311
+ * lavorando. Ogni voce della traccia porta un `elementName`, e il pannello lo usa per portare
1312
+ * l'utente sull'elemento.
1313
+ *
1314
+ * Restituire qualcosa e' **facoltativo**: un ospite che apre un suo runner e ci mostra tutto lì
1315
+ * risolve con `void`, e l'editor si limita a dire che l'esecuzione e' partita. Un ospite che
1316
+ * parla già la §6.5 puo' restituire il suo `FlowInterviewResult` così com'e': i campi
1317
+ * interattivi (token, `pendingScreen`) l'editor non li guarda, perche' non e' lui a condurre
1318
+ * l'esecuzione.
1319
+ *
1320
+ * `trace` e `resources` arrivano solo con `debug: true` e riportano i valori di **tutte** le
1321
+ * risorse, dati personali compresi (§6.5): il pannello lo dice in chiaro.
1322
+ */
1323
+ interface FlowRunOutcome {
1324
+ status?: FlowInterviewStatus;
1325
+ steps?: number;
1326
+ /** L'elemento su cui l'esecuzione si e' fermata: il pannello ci porta sopra. */
1327
+ currentElementName?: string | null;
1328
+ trace?: FlowTraceEntry[];
1329
+ resources?: Record<string, FlowTypedValue>;
1330
+ outputs?: Record<string, FlowTypedValue>;
1331
+ /** `Failed` non e' un errore di trasporto: la chiamata e' riuscita, il flow e' fallito. */
1332
+ errors?: string[];
1333
+ fault?: string | null;
1334
+ }
1272
1335
  interface FlowScreenResponseRequest {
1273
1336
  continuationToken: string;
1274
1337
  screenElementName?: string;
@@ -1564,6 +1627,29 @@ declare abstract class FlowBuilderApi {
1564
1627
  * escluso quello corrente (§5.10).
1565
1628
  */
1566
1629
  abstract listSubflowCandidates(excluding?: string): Promise<FlowSummary[]>;
1630
+ /**
1631
+ * «Esegui»: avvia il flow **salvato** con i valori raccolti dalla finestra.
1632
+ *
1633
+ * Chi integra l'editor la implementa. Non c'e' un default che «prova» il flow: l'editor non
1634
+ * ha un motore, e nascondere l'assenza dietro un'esecuzione finta e' il modo piu' veloce di
1635
+ * far credere che un flow funzioni.
1636
+ *
1637
+ * Il ritorno e' **facoltativo** ed e' l'unica cosa che l'editor sa dell'esecuzione: un
1638
+ * {@link FlowRunOutcome} finisce nel pannello «Debug» — stato, traccia, risorse, output —
1639
+ * mentre `void` significa «guardo altrove», e l'editor dice solo che e' partita. Serve
1640
+ * soprattutto ai flow **senza schermate**: lì non c'e' nessuna interfaccia del runtime in cui
1641
+ * vedere cos'e' successo, e la traccia accanto al grafo e' tutto cio' che si ha.
1642
+ */
1643
+ runFlow(request: FlowRunRequest): Promise<FlowRunOutcome | void>;
1644
+ /**
1645
+ * «Debug»: come {@link runFlow}, ma `request.debug` e' `true` — ed e' il caso in cui il
1646
+ * ritorno conta davvero, perche' `trace` e `resources` esistono solo in debug (§6.5).
1647
+ *
1648
+ * Sono due metodi e non un flag perche' quasi sempre sono due strade diverse dell'ospite —
1649
+ * l'una avvia e basta, l'altra apre un ispettore — e perche' un ambiente puo' esporre l'una
1650
+ * senza l'altra: due `MissingService` distinti dicono quale delle due manca.
1651
+ */
1652
+ debugFlow(request: FlowRunRequest): Promise<FlowRunOutcome | void>;
1567
1653
  /**
1568
1654
  * `POST /interviews` — avvia. Ricorda: `status: 'Failed'` **non** e' un errore
1569
1655
  * di trasporto, e `debug: true` popola `trace` e `resources` con dati che
@@ -2676,15 +2762,43 @@ declare class FlowDocumentStore {
2676
2762
  renameResource(collection: FlowResourceCollection, index: number, newName: string): void;
2677
2763
  /**
2678
2764
  * Riscrive ogni occorrenza di un nome nei campi che contengono riferimenti.
2679
- * Cammina l'intero documento: e' l'unico modo per non dimenticare un campo, dato che
2680
- * i riferimenti compaiono in una ventina di posti diversi (§4).
2765
+ *
2766
+ * L'implementazione sta in `core/flow-clipboard.ts` perche' la usa anche l'incolla, sul solo
2767
+ * frammento invece che sul documento: l'elenco dei campi-riferimento deve essere **uno**.
2681
2768
  */
2682
2769
  private static rewriteReferences;
2683
- /** Duplica un node con un nome nuovo, senza copiarne le uscite. */
2684
- duplicateNode(name: string, newName: string, offset?: {
2770
+ /**
2771
+ * Duplica uno o piu' node, ritornando i nomi creati.
2772
+ *
2773
+ * E' un copia-e-incolla nello stesso documento, e passa dallo stesso motore: e' cio' che gli
2774
+ * fa rinominare **tutto** cio' che collide — non solo il node, ma anche i suoi step, i campi
2775
+ * di uno screen dinamico e le sue screen action, che stanno nello stesso spazio dei nomi
2776
+ * (§3.3) — e riscrivere i riferimenti interni al blocco di conseguenza. Duplicare uno screen
2777
+ * dinamico copiandolo e basta produceva un `NAME_DUPLICATED` per ogni campo.
2778
+ *
2779
+ * Le uscite **verso l'esterno** non si copiano (duplicherebbero rami che l'utente non ha
2780
+ * disegnato); quelle interne al blocco sì, ed e' cio' che rende utile duplicare due elementi
2781
+ * collegati invece che uno alla volta.
2782
+ */
2783
+ duplicateNodes(names: readonly string[], offset?: {
2685
2784
  x: number;
2686
2785
  y: number;
2687
- }): void;
2786
+ }): string[];
2787
+ /**
2788
+ * Incolla gli appunti seguendo il piano già mostrato all'utente, in **un solo** passo di
2789
+ * storico: un incolla che si annulla in sette volte — un elemento, una variabile, un altro
2790
+ * elemento — non e' il gesto che l'utente ha compiuto.
2791
+ *
2792
+ * Ritorna i nomi creati, che sono cio' che va selezionato dopo: senza, la selezione resterebbe
2793
+ * sull'elemento da cui si e' copiato e il blocco appena incollato non si saprebbe dov'e'.
2794
+ */
2795
+ pasteClipboard(payload: FlowClipboardPayload, plan: FlowPastePlan, options: {
2796
+ createMissingResources: boolean;
2797
+ offset?: {
2798
+ x: number;
2799
+ y: number;
2800
+ };
2801
+ }): string[];
2688
2802
  /** Scrive la destinazione di un'uscita. `target` assente → il ramo si stacca del tutto. */
2689
2803
  setConnector(fromName: string, outletKey: string, target: string | undefined, isGoTo?: boolean): void;
2690
2804
  /** Rimuove un arco: il percorso finisce lì, che e' legittimo (§3.5). */
@@ -2700,6 +2814,200 @@ declare class FlowDocumentStore {
2700
2814
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<FlowDocumentStore>;
2701
2815
  }
2702
2816
 
2817
+ /**
2818
+ * Copia e incolla di **elementi** — la logica pura, senza Angular e senza storage.
2819
+ *
2820
+ * Il gesto e' quello che ci si aspetta da un editor, ma il contratto lo rende meno banale di
2821
+ * un `JSON.parse(JSON.stringify(...))`, e le tre cose che lo complicano sono tutte della §3.3:
2822
+ *
2823
+ * 1. **lo spazio dei nomi e' unico e case-insensitive.** Un elemento incollato non porta solo
2824
+ * il proprio nome: porta anche quelli dei suoi step di orchestrazione, dei campi di uno
2825
+ * screen dinamico e delle sue screen action, che sono nomi come gli altri (§5.2, §5.14).
2826
+ * Un omonimo e' `NAME_DUPLICATED`, quindi tutto cio' che collide va rinominato **prima**
2827
+ * di entrare nel documento;
2828
+ * 2. **rinominare non aggiorna i riferimenti** e nessuna primitiva lo fa (§13.8). Se il nome
2829
+ * cambia all'ingresso, i riferimenti interni al blocco vanno riscritti qui: le condizioni
2830
+ * che guardano un campo, i target dei connector interni, gli output automatici
2831
+ * (`Leggi_Ordine.Numero`);
2832
+ * 3. **un elemento non e' autosufficiente.** Referenzia risorse — variabili, formule, choice —
2833
+ * che nel flow di destinazione possono non esistere. Portarsele dietro e' il senso di
2834
+ * «copiare senza riconfigurare»; inventarle in silenzio no, ed e' per questo che
2835
+ * {@link planPaste} produce un **piano** che l'interfaccia mostra prima di applicarlo.
2836
+ *
2837
+ * Cio' che di proposito **non** si copia: le uscite che escono dal blocco. Un connector che
2838
+ * punta a un elemento rimasto nell'altro flow sarebbe `CONNECTOR_TARGET_UNKNOWN`, cioe' un
2839
+ * errore che blocca l'attivazione; quelle **interne** al blocco si conservano e si rimappano,
2840
+ * ed e' cio' che rende utile copiare due elementi insieme invece che uno alla volta.
2841
+ */
2842
+
2843
+ /**
2844
+ * I campi il cui valore e' un riferimento a un node o a una risorsa.
2845
+ *
2846
+ * Elenco unico, condiviso con la rinomina: due elenchi che devono restare uguali diventano due
2847
+ * elenchi diversi al primo campo aggiunto, e il campo dimenticato non da' nessun errore —
2848
+ * lascia un riferimento al nome vecchio che si scopre solo alla validazione (§13.8).
2849
+ */
2850
+ declare const FLOW_REFERENCE_FIELDS: ReadonlySet<string>;
2851
+ /**
2852
+ * Riscrive ogni occorrenza di un nome nei campi che contengono riferimenti.
2853
+ *
2854
+ * Cammina tutto cio' che gli si passa — un documento intero per la rinomina, il solo frammento
2855
+ * copiato per l'incolla — perche' i riferimenti compaiono in una ventina di posti diversi (§4)
2856
+ * e l'elenco dei posti sarebbe la cosa che si dimentica di aggiornare.
2857
+ */
2858
+ declare function rewriteReferences(root: unknown, oldName: string, newName: string): void;
2859
+ /**
2860
+ * Marcatore del formato. Sta scritto dentro il payload perche' gli appunti viaggiano anche
2861
+ * fuori dall'editor (storage del browser, incolla di un JSON a mano): leggere qualcosa che non
2862
+ * e' nostro deve fallire con un messaggio, non con un documento rovinato.
2863
+ */
2864
+ declare const FLOW_CLIPBOARD_KIND = "flow-builder/elements";
2865
+ declare const FLOW_CLIPBOARD_VERSION = 1;
2866
+ interface FlowClipboardNode {
2867
+ collection: FlowNodeCollection;
2868
+ node: FlowAnyNode;
2869
+ }
2870
+ interface FlowClipboardResource {
2871
+ collection: FlowResourceCollection;
2872
+ resource: Record<string, unknown>;
2873
+ }
2874
+ interface FlowClipboardPayload {
2875
+ kind: typeof FLOW_CLIPBOARD_KIND;
2876
+ version: number;
2877
+ /** Da dove viene: serve solo a dirlo nella finestra dell'incolla. */
2878
+ flowName?: string;
2879
+ /**
2880
+ * Il `processType` di origine. Non blocca niente: serve ad avvisare quando si incolla in un
2881
+ * flow di tipo diverso, dove le globali disponibili cambiano — `$Record` non esiste in uno
2882
+ * screen flow (§4.1).
2883
+ */
2884
+ processType?: string;
2885
+ nodes: FlowClipboardNode[];
2886
+ /** Le risorse referenziate dal blocco, copiate per intero. */
2887
+ resources: FlowClipboardResource[];
2888
+ /**
2889
+ * Le radici referenziate dal blocco che non sono ne' fra i node ne' fra le risorse copiate:
2890
+ * globali (`$Flow`, `$Record`), elementi rimasti nel flow di origine, campi di uno screen non
2891
+ * copiato. Sono cio' che l'incolla non puo' portarsi dietro, e quindi cio' che va detto.
2892
+ */
2893
+ externalReferences: string[];
2894
+ }
2895
+ declare function isClipboardPayload(value: unknown): value is FlowClipboardPayload;
2896
+ /**
2897
+ * I nomi **dichiarati** dentro un node, oltre al suo: step di orchestrazione, campi di screen
2898
+ * dinamico (contenitori compresi) e screen action. Stanno tutti nello stesso spazio dei nomi
2899
+ * del node (§3.3), quindi collidono come lui e vanno rinominati come lui.
2900
+ *
2901
+ * Si cammina la struttura sapendo **dove** stanno, invece di cercare ogni `name` nell'albero:
2902
+ * `inputParameters[].name` e' il nome di un parametro dell'action, non una risorsa del flow, e
2903
+ * rinominarlo perche' per caso coincide con un campo copiato romperebbe la chiamata.
2904
+ */
2905
+ declare function innerNamesOf(node: FlowAnyNode): string[];
2906
+ /**
2907
+ * Le **radici** dei riferimenti presenti in un frammento: di `Leggi_Ordine.Numero` la radice e'
2908
+ * `Leggi_Ordine`, ed e' quella che deve esistere nella destinazione (§6.4 — l'elenco dei
2909
+ * riferimenti porta le radici, non i percorsi).
2910
+ *
2911
+ * I `targetReference` restano fuori: sono i connector, e quelli li tratta il taglio delle
2912
+ * uscite. Contarli come riferimenti farebbe comparire fra le dipendenze l'elemento a valle,
2913
+ * che e' esattamente cio' che copiare un blocco non si porta dietro.
2914
+ */
2915
+ declare function referencedRootsOf(fragment: unknown): string[];
2916
+ /**
2917
+ * Costruisce gli appunti a partire dalla selezione.
2918
+ *
2919
+ * Le uscite si tengono **solo** se restano dentro il blocco; le altre si tolgono del tutto e
2920
+ * non si azzerano: un connector dichiarato senza destinazione e' `CONNECTOR_TARGET_MISSING`,
2921
+ * un avviso che l'utente non ha nessun modo di far sparire se non riaprendo il ramo, mentre un
2922
+ * ramo senza connector e' «il percorso finisce qui», che e' cio' che e' davvero successo (§3.5).
2923
+ */
2924
+ declare function buildClipboardPayload(input: {
2925
+ nodes: FlowNodeRef[];
2926
+ resources: FlowResourceRef[];
2927
+ /** I nomi selezionati. Lo Start non si copia: e' uno per flow (§3.4). */
2928
+ names: readonly string[];
2929
+ flowName?: string;
2930
+ processType?: string;
2931
+ }): FlowClipboardPayload | null;
2932
+ interface FlowPasteRename {
2933
+ /** Cosa e' il nome: serve a raccontarlo («l’elemento», «il campo»). */
2934
+ kind: 'node' | 'inner' | 'resource';
2935
+ from: string;
2936
+ to: string;
2937
+ }
2938
+ interface FlowPasteResource {
2939
+ collection: FlowResourceCollection;
2940
+ name: string;
2941
+ /** `reused`: nella destinazione esiste già un nome uguale, e si usa quello. */
2942
+ status: 'new' | 'reused';
2943
+ }
2944
+ interface FlowPastePlan {
2945
+ nodeCount: number;
2946
+ renames: FlowPasteRename[];
2947
+ resources: FlowPasteResource[];
2948
+ /**
2949
+ * Riferimenti che nella destinazione non esistono e che l'incolla non puo' creare: globali di
2950
+ * un altro `processType`, elementi rimasti nel flow di origine. Diventeranno i normali
2951
+ * `REFERENCE_UNKNOWN` del pannello dei problemi.
2952
+ */
2953
+ unresolved: string[];
2954
+ /** Il flow di origine aveva un altro `processType`: le globali disponibili sono altre (§4.1). */
2955
+ processTypeMismatch: string | null;
2956
+ }
2957
+ /**
2958
+ * Decide **prima** di toccare il documento cosa cambierebbe: quali nomi vanno rinominati, quali
2959
+ * risorse nascono e quali si riusano, cosa resta irrisolto. La finestra dell'incolla mostra
2960
+ * questo, e `applyPaste` lo esegue senza deciderne piu' niente.
2961
+ *
2962
+ * Una risorsa il cui nome esiste già nella destinazione si **riusa**: e' quasi sempre la stessa
2963
+ * variabile di prima (stesso flow, altra versione), e crearne una omonima sarebbe comunque
2964
+ * `NAME_DUPLICATED`. Rinominarla d'ufficio sarebbe peggio: i riferimenti del blocco
2965
+ * continuerebbero a puntare a quella esistente pur avendone appena creata una identica.
2966
+ */
2967
+ declare function planPaste(payload: FlowClipboardPayload, target: {
2968
+ usedNames: readonly string[];
2969
+ processType?: string;
2970
+ }): FlowPastePlan;
2971
+ /**
2972
+ * Applica gli appunti a un documento di lavoro, seguendo il piano.
2973
+ *
2974
+ * L'ordine conta: **prima** si rinomina dentro il frammento — nomi dichiarati e riferimenti —
2975
+ * e **poi** si innesta. Riscrivere dopo l'innesto significherebbe camminare tutto il documento
2976
+ * per ogni nome, e riscrivere anche i riferimenti degli elementi che c'erano già: un elemento
2977
+ * di destinazione che citava `Priorita` finirebbe a citare `Priorita_copia`.
2978
+ */
2979
+ declare function applyPaste(draft: FlowDefinition, payload: FlowClipboardPayload, plan: FlowPastePlan, options: {
2980
+ createMissingResources: boolean;
2981
+ offset?: {
2982
+ x: number;
2983
+ y: number;
2984
+ };
2985
+ }): string[];
2986
+ /** Il tipo dell'elemento a partire dalla collection: serve solo a raccontare il blocco. */
2987
+ declare function typeOfCollection(collection: FlowNodeCollection): string;
2988
+
2989
+ declare class FlowClipboardService {
2990
+ /** La copia in memoria: fonte di verita' quando lo storage non c'e' o rifiuta. */
2991
+ private memory;
2992
+ private readonly _revision;
2993
+ constructor();
2994
+ private storage;
2995
+ write(payload: FlowClipboardPayload): void;
2996
+ read(): FlowClipboardPayload | null;
2997
+ /**
2998
+ * C'e' qualcosa da incollare. E' un signal e non un booleano calcolato al momento perche' il
2999
+ * comando «Incolla» sta in una toolbar `OnPush`: senza un segnale che cambia, il pulsante
3000
+ * resterebbe spento fino al successivo giro di change detection.
3001
+ */
3002
+ readonly hasContent: _angular_core.WritableSignal<boolean>;
3003
+ /** Da chiamare dove serve il valore aggiornato: rilegge lo storage e aggiorna il signal. */
3004
+ refresh(): boolean;
3005
+ /** Cambia a ogni scrittura, anche da un'altra scheda: chi vuole reagire osservi questo. */
3006
+ readonly revision: _angular_core.Signal<number>;
3007
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlowClipboardService, never>;
3008
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FlowClipboardService>;
3009
+ }
3010
+
2703
3011
  declare class FlowValidationStore {
2704
3012
  private readonly api;
2705
3013
  private readonly destroyRef;
@@ -3084,6 +3392,13 @@ declare class FlowCanvasComponent {
3084
3392
  readonly sides: typeof EFConnectableSide;
3085
3393
  /** Il nome dell'elemento selezionato, `$start` per lo Start. */
3086
3394
  readonly selectedName: _angular_core.InputSignal<string | null>;
3395
+ /**
3396
+ * La selezione **intera**, quando ne fa parte piu' di un elemento: la libreria sa selezionare
3397
+ * a rettangolo e con `Ctrl`+`A`, e i comandi che agiscono su un blocco (copia, duplica,
3398
+ * elimina) devono vederli tutti. `selectedName` resta l'elemento «corrente», quello di cui si
3399
+ * apre il form: un inspector che mostrasse cinque elementi insieme non saprebbe cosa mostrare.
3400
+ */
3401
+ readonly selectedNames: _angular_core.InputSignal<readonly string[]>;
3087
3402
  /**
3088
3403
  * L'outline del backend, quando disponibile: da' la raggiungibilita' autoritativa (§6.4).
3089
3404
  * Assente → si usa il calcolo locale.
@@ -3095,7 +3410,11 @@ declare class FlowCanvasComponent {
3095
3410
  * perche' il canvas resti montabile da solo.
3096
3411
  */
3097
3412
  readonly isEditable: _angular_core.InputSignal<boolean>;
3098
- readonly selectionChange: _angular_core.OutputEmitterRef<string | null>;
3413
+ /**
3414
+ * La selezione dopo il gesto: vuota se si e' cliccato nel vuoto. Il primo nome e' quello
3415
+ * «corrente» — chi ascolta ne fa la selezione singola.
3416
+ */
3417
+ readonly selectionChange: _angular_core.OutputEmitterRef<string[]>;
3099
3418
  readonly nodeOpened: _angular_core.OutputEmitterRef<string>;
3100
3419
  readonly nodeRemoveRequested: _angular_core.OutputEmitterRef<string>;
3101
3420
  readonly nodeDuplicateRequested: _angular_core.OutputEmitterRef<string>;
@@ -3202,15 +3521,22 @@ declare class FlowCanvasComponent {
3202
3521
  * `removeNode` toglie anche i connector che lo puntavano.
3203
3522
  */
3204
3523
  onRemoveClick(event: Event, name: string): void;
3524
+ /** Come ✎ e ×: `stopPropagation` perche' il clic non valga anche come selezione. */
3525
+ onDuplicateClick(event: Event, name: string): void;
3205
3526
  connectorIdOf(node: FlowCanvasNode, outletKey: string): string;
3206
3527
  targetIdOf(node: FlowCanvasNode): string;
3528
+ /**
3529
+ * Selezionato = corrente **oppure** parte del blocco selezionato. Senza il secondo caso, un
3530
+ * rettangolo che prende cinque elementi ne evidenziava uno, e i comandi che agiscono su tutti
3531
+ * e cinque sembravano agire su quello.
3532
+ */
3207
3533
  isSelected(node: FlowCanvasNode): boolean;
3208
3534
  /** Etichette dei rami dichiarati senza destinazione, per il tooltip del badge. */
3209
3535
  danglingLabels(node: FlowCanvasNode): string;
3210
3536
  /** Classe della fascia colorata, per categoria del dizionario. */
3211
3537
  categoryClass(node: FlowCanvasNode): string;
3212
3538
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlowCanvasComponent, never>;
3213
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlowCanvasComponent, "fb-flow-canvas", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; "outline": { "alias": "outline"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "nodeOpened": "nodeOpened"; "nodeRemoveRequested": "nodeRemoveRequested"; "nodeDuplicateRequested": "nodeDuplicateRequested"; "elementDropped": "elementDropped"; }, never, never, true, never>;
3539
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlowCanvasComponent, "fb-flow-canvas", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; "selectedNames": { "alias": "selectedNames"; "required": false; "isSignal": true; }; "outline": { "alias": "outline"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "nodeOpened": "nodeOpened"; "nodeRemoveRequested": "nodeRemoveRequested"; "nodeDuplicateRequested": "nodeDuplicateRequested"; "elementDropped": "elementDropped"; }, never, never, true, never>;
3214
3540
  }
3215
3541
 
3216
3542
  /** Il gesto scelto sulla palette: un tipo e, dove esiste, la sua variante (§5.6). */
@@ -3432,7 +3758,7 @@ declare class ReferencePickerComponent {
3432
3758
  * percorso inesistente di uno scope che i percorsi li dichiara, perche' lì il backend
3433
3759
  * risponderebbe `GLOBAL_UNKNOWN`.
3434
3760
  */
3435
- readonly valueState: _angular_core.Signal<"empty" | "unknown" | "member" | "known" | "navigated" | "host" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid">;
3761
+ readonly valueState: _angular_core.Signal<"member" | "empty" | "unknown" | "known" | "navigated" | "host" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid">;
3436
3762
  /** Le parole cambiano con la tappa: un campo di un'entita' non e' un membro di una classe. */
3437
3763
  private readonly tailIsObject;
3438
3764
  private readonly tailContainer;
@@ -3776,7 +4102,7 @@ declare class FormulaEditorComponent {
3776
4102
  * dinamico — e riscriverla a ogni tasto costa. La **verifica** parte comunque durante la
3777
4103
  * digitazione: usa la bozza locale, non cio' che e' arrivato al documento.
3778
4104
  */
3779
- readonly commitOn: _angular_core.InputSignal<"input" | "change">;
4105
+ readonly commitOn: _angular_core.InputSignal<"change" | "input">;
3780
4106
  readonly expressionChange: _angular_core.OutputEmitterRef<string>;
3781
4107
  private readonly area;
3782
4108
  /**
@@ -4336,6 +4662,30 @@ declare class ElementDialogComponent {
4336
4662
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementDialogComponent, "fb-element-dialog", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "removeRequested": "removeRequested"; "duplicateRequested": "duplicateRequested"; "renamed": "renamed"; }, never, never, true, never>;
4337
4663
  }
4338
4664
 
4665
+ declare class PasteDialogComponent {
4666
+ readonly payload: _angular_core.InputSignal<FlowClipboardPayload>;
4667
+ readonly plan: _angular_core.InputSignal<FlowPastePlan>;
4668
+ readonly confirmed: _angular_core.OutputEmitterRef<{
4669
+ createMissingResources: boolean;
4670
+ }>;
4671
+ readonly cancelled: _angular_core.OutputEmitterRef<void>;
4672
+ /** Predefinito acceso: e' il motivo per cui si copia un elemento invece di rifarlo. */
4673
+ readonly createMissingResources: _angular_core.WritableSignal<boolean>;
4674
+ readonly elementLabel: _angular_core.Signal<string>;
4675
+ readonly newResources: _angular_core.Signal<_esfaenza_flow_builder.FlowPasteResource[]>;
4676
+ readonly reusedResources: _angular_core.Signal<_esfaenza_flow_builder.FlowPasteResource[]>;
4677
+ /** I nomi degli elementi che cambiano: si distinguono da quelli interni perche' il rimedio e' diverso. */
4678
+ readonly nodeRenames: _angular_core.Signal<_esfaenza_flow_builder.FlowPasteRename[]>;
4679
+ readonly innerRenames: _angular_core.Signal<_esfaenza_flow_builder.FlowPasteRename[]>;
4680
+ /** Fuori mappa si mostra il nome tecnico: meglio una parola strana che nessuna parola. */
4681
+ resourceLabel(collection: FlowResourceCollection): string;
4682
+ setCreateMissingResources(value: boolean): void;
4683
+ confirm(): void;
4684
+ cancel(): void;
4685
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PasteDialogComponent, never>;
4686
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasteDialogComponent, "fb-paste-dialog", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; "plan": { "alias": "plan"; "required": true; "isSignal": true; }; }, { "confirmed": "confirmed"; "cancelled": "cancelled"; }, never, never, true, never>;
4687
+ }
4688
+
4339
4689
  declare class StartInspectorComponent {
4340
4690
  private readonly store;
4341
4691
  private readonly dictionaries;
@@ -4972,24 +5322,24 @@ declare class VersionPanelComponent {
4972
5322
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<VersionPanelComponent, "fb-version-panel", never, {}, { "closed": "closed"; "versionOpened": "versionOpened"; "notice": "notice"; }, never, never, true, never>;
4973
5323
  }
4974
5324
 
4975
- declare class DebugPanelComponent {
4976
- private readonly api;
5325
+ declare class RunDialogComponent {
4977
5326
  private readonly store;
4978
- private readonly session;
4979
5327
  private readonly dictionaries;
4980
5328
  private readonly catalog;
4981
- constructor();
4982
- readonly closed: _angular_core.OutputEmitterRef<void>;
4983
- /** Chiede all'host di evidenziare l'elemento corrente dell'esecuzione. */
4984
- readonly elementFocused: _angular_core.OutputEmitterRef<string>;
4985
- readonly result: _angular_core.WritableSignal<FlowInterviewResult | null>;
4986
- readonly isRunning: _angular_core.WritableSignal<boolean>;
4987
- readonly errorMessage: _angular_core.WritableSignal<string | null>;
4988
- readonly debugEnabled: _angular_core.WritableSignal<boolean>;
4989
- /** I valori che l'utente compila nel piccolo form generato dalle variabili di input. */
4990
- readonly inputValues: _angular_core.WritableSignal<Record<string, string>>;
4991
- /** I valori raccolti per lo screen corrente, per nome di `outputParameters`. */
4992
- readonly screenOutputs: _angular_core.WritableSignal<Record<string, string>>;
5329
+ /** `debug` cambia il titolo, l'avviso sui dati e quale primitiva verra' chiamata. */
5330
+ readonly mode: _angular_core.InputSignal<"run" | "debug">;
5331
+ /** Il flow che verra' eseguito: e' quello **salvato**, non il documento in mano. */
5332
+ readonly flowName: _angular_core.InputSignal<string | null>;
5333
+ readonly version: _angular_core.InputSignal<number | null>;
5334
+ /** Con modifiche non salvate si esegue la versione salvata: dirlo evita la sorpresa. */
5335
+ readonly isDirty: _angular_core.InputSignal<boolean>;
5336
+ /** L'ospite sta ancora rispondendo: il bottone resta spento invece di ripartire. */
5337
+ readonly isBusy: _angular_core.InputSignal<boolean>;
5338
+ readonly confirmed: _angular_core.OutputEmitterRef<Record<string, unknown>>;
5339
+ readonly cancelled: _angular_core.OutputEmitterRef<void>;
5340
+ readonly isDebug: _angular_core.Signal<boolean>;
5341
+ /** I valori compilati, come stringhe: la conversione al tipo avviene alla conferma. */
5342
+ private readonly rawValues;
4993
5343
  /** Le variabili `isInput` del flow: il contratto verso chi lo invoca (§4.6). */
4994
5344
  readonly inputVariables: _angular_core.Signal<FlowVariable[]>;
4995
5345
  /**
@@ -4997,27 +5347,45 @@ declare class DebugPanelComponent {
4997
5347
  * compila un membro alla volta: non c'e' un letterale con cui scriverla in un campo solo.
4998
5348
  */
4999
5349
  private readonly membersByClass;
5000
- /** I membri **scrivibili** di una classe: gli altri li calcola il backend. */
5001
- membersOf(className: string | undefined): FlowStructureMember[];
5002
5350
  /**
5003
- * §4.6 — i valori di un tipo di enumerazione, per nome del tipo. Elenco vuoto significa "non lo
5004
- * so" tipo non indicato, primitiva assente, tipo senza valori dichiarati e allora il valore
5005
- * si scrive a mano.
5351
+ * §4.6 — i valori dei tipi `Enum` che compaiono fra gli input. Un insieme chiuso merita una
5352
+ * tendina: qui si scrive un nome che il motore confrontera', e digitarlo e' il modo piu'
5353
+ * facile di sbagliarlo.
5006
5354
  */
5007
5355
  private readonly valuesByEnumType;
5356
+ constructor();
5357
+ /** I membri **scrivibili** di una classe: gli altri li calcola il motore. */
5358
+ membersOf(className: string | undefined): FlowStructureMember[];
5008
5359
  enumValuesOf(enumType: string | null | undefined): FlowEnumValue[];
5009
5360
  isStructureVariable(variable: FlowVariable): boolean;
5010
- readonly canRun: _angular_core.Signal<boolean>;
5361
+ setValue(key: string, value: string): void;
5362
+ /** Il valore di un campo del form: serve a ripopolarlo se la finestra si ridisegna. */
5363
+ valueOf(key: string): string;
5364
+ /** Converte un valore del form nel tipo dichiarato: il tipo vince, anche in scrittura (§6.5). */
5365
+ private static coerce;
5366
+ /**
5367
+ * I valori da mandare. Un campo lasciato vuoto **non** si manda: mandare la stringa vuota
5368
+ * significherebbe assegnare, e un input non valorizzato e' un'altra cosa da un input a "".
5369
+ */
5370
+ private collectInputs;
5371
+ confirm(): void;
5372
+ cancel(): void;
5373
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RunDialogComponent, never>;
5374
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RunDialogComponent, "fb-run-dialog", never, { "mode": { "alias": "mode"; "required": true; "isSignal": true; }; "flowName": { "alias": "flowName"; "required": false; "isSignal": true; }; "version": { "alias": "version"; "required": false; "isSignal": true; }; "isDirty": { "alias": "isDirty"; "required": false; "isSignal": true; }; "isBusy": { "alias": "isBusy"; "required": false; "isSignal": true; }; }, { "confirmed": "confirmed"; "cancelled": "cancelled"; }, never, never, true, never>;
5375
+ }
5376
+
5377
+ declare class DebugPanelComponent {
5378
+ /** L'esito dell'ultima esecuzione; `null` = non ne e' ancora stata lanciata una. */
5379
+ readonly outcome: _angular_core.InputSignal<FlowRunOutcome | null>;
5380
+ /** L'ultima esecuzione era in debug: senza, traccia e risorse non arrivano ed e' normale. */
5381
+ readonly wasDebug: _angular_core.InputSignal<boolean>;
5382
+ /** L'ospite sta ancora eseguendo: l'esito, se arriva, arriva dopo. */
5383
+ readonly isRunning: _angular_core.InputSignal<boolean>;
5384
+ readonly closed: _angular_core.OutputEmitterRef<void>;
5385
+ /** Chiede all'host di portare l'utente sull'elemento: e' l'ancora della traccia. */
5386
+ readonly elementFocused: _angular_core.OutputEmitterRef<string>;
5387
+ readonly cleared: _angular_core.OutputEmitterRef<void>;
5011
5388
  readonly status: _angular_core.Signal<string | null>;
5012
- readonly pendingScreen: _angular_core.Signal<_esfaenza_flow_builder.FlowPendingScreen | null>;
5013
- readonly isWaitingForScreen: _angular_core.Signal<boolean>;
5014
- /** §5.14 — l'attesa e' su uno step assegnato a una persona, non su un evento. */
5015
- readonly isWaitingForStageStep: _angular_core.Signal<boolean>;
5016
- readonly stageSteps: _angular_core.Signal<FlowStageStepState[]>;
5017
- /** Lo step su cui c'e' un work item aperto: e' quello che si puo' concludere. */
5018
- readonly waitingStageSteps: _angular_core.Signal<FlowStageStepState[]>;
5019
- /** I valori con cui si conclude uno step, per nome di output. */
5020
- readonly stepOutputs: _angular_core.WritableSignal<Record<string, string>>;
5021
5389
  readonly trace: _angular_core.Signal<_esfaenza_flow_builder.FlowTraceEntry[]>;
5022
5390
  /** Le risorse come righe ordinate: il tipo dichiarato vince in lettura (§6.5). */
5023
5391
  readonly resourceRows: _angular_core.Signal<{
@@ -5030,49 +5398,19 @@ declare class DebugPanelComponent {
5030
5398
  type: string;
5031
5399
  value: string;
5032
5400
  }[]>;
5033
- /** Gli input che lo screen corrente riceve, per mostrarli accanto al form generico. */
5034
- readonly screenInputRows: _angular_core.Signal<{
5035
- name: string;
5036
- type: string;
5037
- value: string;
5038
- }[]>;
5039
- /** I nomi degli output dichiarati dallo screen, per generare i campi da compilare. */
5040
- readonly screenOutputNames: _angular_core.Signal<string[]>;
5041
5401
  /**
5042
- * §6.5 il tipo dichiarato vince, e due tipi hanno una forma propria invece di `value`: un
5043
- * record e un'istanza di classe. Cercare `value` su un `Structure` mostrerebbe «—» pur avendo
5044
- * i dati sotto gli occhi (§4.7).
5402
+ * L'ospite ha restituito qualcosa, ma niente di leggibile: nessuno stato, nessuna traccia,
5403
+ * nessun valore. Va distinto dal «non e' stata lanciata nessuna esecuzione», perche' il
5404
+ * rimedio e' diverso si preme «Esegui», qui manca un pezzo dell'implementazione.
5045
5405
  */
5046
- private static render;
5047
- setDebugEnabled(value: boolean): void;
5048
- setInputValue(name: string, value: string): void;
5049
- setScreenOutput(name: string, value: string): void;
5050
- /** Converte un valore del form nel tipo dichiarato: il tipo vince, anche in scrittura (§6.5). */
5051
- private static coerce;
5052
- /** Converte i valori del form nel tipo dichiarato dalla variabile. */
5053
- private coerceInputs;
5054
- start(): Promise<void>;
5055
- respond(navigation: FlowScreenNavigation): Promise<void>;
5056
- setStepOutput(name: string, value: string): void;
5057
- /** Gli output dichiarati dallo step, per generare i campi da compilare. */
5058
- stepOutputNames(stepName: string | undefined): string[];
5059
- /**
5060
- * Conclude uno step come farebbe l'assegnatario. `Rejected` non e' un errore: e' l'esito che
5061
- * prende il ramo «Step rifiutato» dello stage — e se quel ramo non c'e', l'interview fallisce.
5062
- */
5063
- completeStep(stepName: string | undefined, status: FlowStageStepStatus): Promise<void>;
5064
- private apply;
5065
- private handleError;
5066
- reset(): void;
5406
+ readonly isEmptyOutcome: _angular_core.Signal<boolean>;
5067
5407
  close(): void;
5068
- /** L'etichetta dello stato, che non e' un errore anche quando dice "Failed" (§6.5). */
5408
+ clear(): void;
5409
+ /** L'etichetta dello stato, che non e' un errore anche quando dice «Fallita» (§6.5). */
5069
5410
  statusLabel(): string;
5070
5411
  statusNote(): string | null;
5071
- canGoBack(): boolean;
5072
- canFinish(): boolean;
5073
- canPause(): boolean;
5074
5412
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DebugPanelComponent, never>;
5075
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DebugPanelComponent, "fb-debug-panel", never, {}, { "closed": "closed"; "elementFocused": "elementFocused"; }, never, never, true, never>;
5413
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DebugPanelComponent, "fb-debug-panel", never, { "outcome": { "alias": "outcome"; "required": false; "isSignal": true; }; "wasDebug": { "alias": "wasDebug"; "required": false; "isSignal": true; }; "isRunning": { "alias": "isRunning"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "elementFocused": "elementFocused"; "cleared": "cleared"; }, never, never, true, never>;
5076
5414
  }
5077
5415
 
5078
5416
  type SidePanel = 'inspector' | 'resources' | 'versions' | 'debug';
@@ -5082,6 +5420,7 @@ interface Notice {
5082
5420
  }
5083
5421
  declare class FlowBuilderComponent {
5084
5422
  private readonly api;
5423
+ private readonly clipboard;
5085
5424
  private readonly destroyRef;
5086
5425
  /** Serve a `afterNextRender` chiamato fuori dal costruttore. */
5087
5426
  private readonly injector;
@@ -5176,7 +5515,7 @@ declare class FlowBuilderComponent {
5176
5515
  * capita anche solo per spostare un node, e una finestra che si apre a ogni click sarebbe
5177
5516
  * insopportabile. Nel pannello laterale, invece, mostrare subito il form non costa nulla.
5178
5517
  */
5179
- onSelectionChange(name: string | null): void;
5518
+ onSelectionChange(names: string[]): void;
5180
5519
  /** Doppio click o bottone «✎» sul node: qui il dettaglio si apre. */
5181
5520
  onNodeOpened(name: string): void;
5182
5521
  /** Porta l'utente sull'elemento **e** ne apre il form: e' l'ancora dei problemi (§7). */
@@ -5187,9 +5526,9 @@ declare class FlowBuilderComponent {
5187
5526
  openSelectedElement(): void;
5188
5527
  closeDialog(): void;
5189
5528
  /**
5190
- * Evidenzia l'elemento sul canvas senza cambiare pannello.
5191
- * Serve durante la prova: l'esecuzione segnala su quale elemento e' ferma, ma sostituire
5192
- * il pannello con l'inspector farebbe sparire il form da compilare a metà interview.
5529
+ * Evidenzia l'elemento sul canvas **senza** cambiare pannello.
5530
+ * Serve alla traccia del debug: portare l'utente sull'elemento e' il punto del pannello, ma
5531
+ * sostituirlo con l'inspector farebbe sparire la traccia che si stava leggendo.
5193
5532
  */
5194
5533
  highlightElement(name: string): void;
5195
5534
  /** Rilascio dalla palette: il punto di rilascio diventa `locationX`/`locationY` (§11). */
@@ -5209,6 +5548,45 @@ declare class FlowBuilderComponent {
5209
5548
  */
5210
5549
  onNodeRenamed(newName: string): void;
5211
5550
  onDuplicateNode(name: string): void;
5551
+ /** La selezione del canvas per intero; `selectedName` resta l'elemento «corrente». */
5552
+ readonly selectedNames: _angular_core.WritableSignal<string[]>;
5553
+ /** L'anteprima dell'incolla, mentre la finestra e' aperta. */
5554
+ readonly pastePreview: _angular_core.WritableSignal<{
5555
+ payload: FlowClipboardPayload;
5556
+ plan: FlowPastePlan;
5557
+ } | null>;
5558
+ /**
5559
+ * I nomi copiabili: la selezione meno lo Start (§3.4) e meno cio' che nel documento non c'e'
5560
+ * piu'. Il secondo filtro non e' teorico: dopo un annulla la selezione resta sul nome di un
5561
+ * elemento appena tolto, e senza il controllo il comando risultava attivo su niente.
5562
+ */
5563
+ private copyableNames;
5564
+ readonly canCopy: _angular_core.Signal<boolean>;
5565
+ /** Il comando «Incolla» si accende quando negli appunti c'e' qualcosa, anche di un altro flow. */
5566
+ readonly canPaste: _angular_core.Signal<boolean>;
5567
+ copySelection(): void;
5568
+ /**
5569
+ * Prepara l'incolla: calcola il piano e apre la finestra. Non tocca il documento — cosa
5570
+ * cambierebbe si vede prima, ed e' l'unico momento in cui la scelta sulle risorse mancanti ha
5571
+ * ancora senso.
5572
+ */
5573
+ startPaste(): void;
5574
+ cancelPaste(): void;
5575
+ confirmPaste(options: {
5576
+ createMissingResources: boolean;
5577
+ }): void;
5578
+ /** Duplica in loco, senza passare dagli appunti: stesso motore, nessuna domanda da fare. */
5579
+ duplicateSelection(): void;
5580
+ private duplicateNames;
5581
+ /** Porta la selezione sul blocco appena creato: senza, resterebbe su cio' da cui e' nato. */
5582
+ private selectNames;
5583
+ /**
5584
+ * Le scorciatoie. L'ascoltatore sta sull'**host** del builder e non sul documento: la libreria
5585
+ * si innesta in una pagina che non e' nostra, e `Ctrl`+`C` catturato globalmente ruberebbe la
5586
+ * copia all'applicazione ospite. Per la stessa ragione il gesto si ignora quando il fuoco e'
5587
+ * dentro un campo: lì `Ctrl`+`C` copia il testo, che e' cio' che l'utente si aspetta.
5588
+ */
5589
+ onKeyDown(event: KeyboardEvent): void;
5212
5590
  /** Riordina il grafo e **scrive** le coordinate nel documento (§3.5). */
5213
5591
  autoLayout(): void;
5214
5592
  undo(): void;
@@ -5243,6 +5621,38 @@ declare class FlowBuilderComponent {
5243
5621
  setCopyLabel(value: string): void;
5244
5622
  /** Scrive la copia e continua a lavorare su di essa (§6.2). */
5245
5623
  confirmCopy(): Promise<void>;
5624
+ /** Quale delle due finestre e' aperta; `null` = nessuna. */
5625
+ readonly runMode: _angular_core.WritableSignal<"run" | "debug" | null>;
5626
+ /** La chiamata all'ospite e' in volo: il bottone della finestra resta spento. */
5627
+ readonly isStartingRun: _angular_core.WritableSignal<boolean>;
5628
+ /**
5629
+ * L'esito dell'ultima esecuzione, se l'ospite ne ha restituito uno.
5630
+ *
5631
+ * È tutto cio' che l'editor sa di un'esecuzione, e serve soprattutto ai flow **senza
5632
+ * schermate**: lì non si apre nessuna interfaccia del runtime, quindi senza questo pannello
5633
+ * non ci sarebbe **nessun** posto in cui vedere quali elementi sono stati eseguiti.
5634
+ */
5635
+ readonly runOutcome: _angular_core.WritableSignal<FlowRunOutcome | null>;
5636
+ /** L'ultima esecuzione era in debug: senza, traccia e risorse non arrivano ed e' normale. */
5637
+ readonly wasRunInDebug: _angular_core.WritableSignal<boolean>;
5638
+ /**
5639
+ * Si esegue cio' che e' **salvato**: su un flow mai scritto non c'e' niente da avviare, e il
5640
+ * titolo del bottone lo dice invece di lasciare un comando che non risponde.
5641
+ */
5642
+ readonly canRun: _angular_core.Signal<boolean>;
5643
+ openRun(mode: 'run' | 'debug'): void;
5644
+ closeRun(): void;
5645
+ /** Svuota il pannello: l'esito di prima non riguarda piu' il documento che si sta editando. */
5646
+ clearRunOutcome(): void;
5647
+ /**
5648
+ * Consegna gli ingressi all'ospite.
5649
+ *
5650
+ * La finestra si chiude **subito**, prima che la chiamata risponda: un'esecuzione puo' durare
5651
+ * quanto vuole — con schermate da compilare puo' finire minuti dopo — e tenere aperto il form
5652
+ * degli ingressi per tutto quel tempo coprirebbe proprio il grafo che si sta guardando. Il
5653
+ * pannello «Debug» prende il posto dell'attesa, e l'esito ci arriva quando arriva.
5654
+ */
5655
+ confirmRun(inputs: Record<string, unknown>): Promise<void>;
5246
5656
  createNewVersion(): Promise<void>;
5247
5657
  activate(): Promise<void>;
5248
5658
  /** §9.3 — prima opzione davanti a un conflitto. */
@@ -5278,5 +5688,5 @@ declare class SelectValueDirective implements AfterViewChecked {
5278
5688
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectValueDirective, "select[fbValue]", never, { "fbValue": { "alias": "fbValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5279
5689
  }
5280
5690
 
5281
- export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, DynamicScreenInspectorComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, EnumValuePickerComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ELEMENT_VARIANT_FIELDS, FLOW_ELEMENT_VARIANT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FLOW_VALUE_FIELDS, FLOW_VALUE_LITERAL_FIELDS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, FormulaEditorComponent, FormulaValidationService, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, SEVERITY_BUCKETS, SEVERITY_ICON, SEVERITY_LABEL, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, StructureMemberPickerComponent, StructurePickerComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, allFieldsOf, areTypesComparable, canvasNodeId, checkConditionLogic, checkFlowName, describePathEntry, duplicateField, elementIcon, emptyFlowDefinition, fieldAt, filterReferences, flattenFields, flowNodeWidth, flowNodeWidthClass, insertField, isCustomConditionLogic, isEmptyReferenceFilter, isFieldResource, isGlobalReference, isNumericType, isPathInside, isTypeCheckedOperator, isValidFlowName, isValued, loadPathLevel, matchesReferenceFilter, moveCondition, moveField, navigatePath, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, pathAvailableNames, pathContainerLabel, pathKey, pathNotVerifiableMessage, referenceRoot, remapConditionLogic, removeCondition, removeField, resolvePath, samePath, screenActionNames, screenFieldNames, severityBucket, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, uniqueFlowName, valuedFieldOf, valuedFieldsOf, variantFieldOf, variantOf, variantPresetOf };
5282
- 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, FlowFormKind, FlowFormula, FlowFormulaIssue, FlowFormulaUsage, FlowFormulaValidationRequest, FlowFormulaValidationResult, FlowGlobalVariableEntry, FlowInputFieldAssignment, FlowInputParameter, FlowInterviewResult, FlowInterviewStatus, FlowIssueSeverity, FlowLayoutDirection, FlowLayoutNodeInput, FlowLayoutOptions, FlowLayoutResult, FlowListQuery, FlowLoop, FlowNameCheck, FlowNameProblem, FlowNewVersionRequest, FlowNodeBase, FlowNodeCollection, FlowNodeRef, FlowObjectDescription, FlowObjectSummary, FlowOffsetUnit, FlowOrchestratedStage, FlowOutlet, FlowOutline, FlowOutlineConnection, FlowOutlineNode, FlowOutputFieldAssignment, FlowOutputParameter, FlowPalettePick, FlowPendingScreen, FlowProcessType, FlowRecordCreate, FlowRecordDelete, FlowRecordFilter, FlowRecordFilterOperator, FlowRecordLookup, FlowRecordRollback, FlowRecordTriggerType, FlowRecordUpdate, FlowRecordValue, FlowReference, FlowReferenceFilter, FlowReferenceKind, FlowRegionContainerType, FlowResourceCollection, FlowResourceKindEntry, FlowResourceRef, FlowResumeRequest, FlowSaveRequest, FlowSaveResult, FlowSchedule, FlowScheduledPath, FlowScreen, FlowScreenAction, FlowScreenField, FlowScreenFieldInputsRevisited, FlowScreenFieldNode, FlowScreenFieldPath, FlowScreenFieldType, FlowScreenFieldTypeEntry, FlowScreenNavigation, FlowScreenResponseRequest, FlowScreenTrigger, FlowScreenTriggerInitBehavior, 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 };
5691
+ export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, DynamicScreenInspectorComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, EnumValuePickerComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_CLIPBOARD_KIND, FLOW_CLIPBOARD_VERSION, 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_REFERENCE_FIELDS, FLOW_RESOURCE_COLLECTIONS, FLOW_VALUE_FIELDS, FLOW_VALUE_LITERAL_FIELDS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowClipboardService, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, FormulaEditorComponent, FormulaValidationService, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, PasteDialogComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, RunDialogComponent, 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, applyPaste, areTypesComparable, buildClipboardPayload, canvasNodeId, checkConditionLogic, checkFlowName, describePathEntry, duplicateField, elementIcon, emptyFlowDefinition, fieldAt, filterReferences, flattenFields, flowNodeWidth, flowNodeWidthClass, innerNamesOf, insertField, isClipboardPayload, isCustomConditionLogic, isEmptyReferenceFilter, isFieldResource, isGlobalReference, isNumericType, isPathInside, isTypeCheckedOperator, isValidFlowName, isValued, loadPathLevel, matchesReferenceFilter, moveCondition, moveField, navigatePath, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, pathAvailableNames, pathContainerLabel, pathKey, pathNotVerifiableMessage, planPaste, referenceRoot, referencedRootsOf, remapConditionLogic, removeCondition, removeField, resolvePath, rewriteReferences, samePath, screenActionNames, screenFieldNames, severityBucket, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, typeOfCollection, uniqueFlowName, valuedFieldOf, valuedFieldsOf, variantFieldOf, variantOf, variantPresetOf };
5692
+ export type { FieldAssignmentHolder, FilterHolder, FlowActionCall, FlowAnyNode, FlowAssignment, FlowAssignmentItem, FlowAssignmentOperator, FlowAssignmentOperatorEntry, FlowBuilderHttpConfig, FlowCanvasEdge, FlowCanvasNode, FlowCatalogEntry, FlowCatalogParameter, FlowChoice, FlowClipboardNode, FlowClipboardPayload, FlowClipboardResource, 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, FlowFormKind, FlowFormula, FlowFormulaIssue, FlowFormulaUsage, FlowFormulaValidationRequest, FlowFormulaValidationResult, FlowGlobalVariableEntry, FlowInputFieldAssignment, FlowInputParameter, FlowInterviewResult, FlowInterviewStatus, FlowIssueSeverity, FlowLayoutDirection, FlowLayoutNodeInput, FlowLayoutOptions, FlowLayoutResult, FlowListQuery, FlowLoop, FlowNameCheck, FlowNameProblem, FlowNewVersionRequest, FlowNodeBase, FlowNodeCollection, FlowNodeRef, FlowObjectDescription, FlowObjectSummary, FlowOffsetUnit, FlowOrchestratedStage, FlowOutlet, FlowOutline, FlowOutlineConnection, FlowOutlineNode, FlowOutputFieldAssignment, FlowOutputParameter, FlowPalettePick, FlowPastePlan, FlowPasteRename, FlowPasteResource, FlowPendingScreen, FlowProcessType, FlowRecordCreate, FlowRecordDelete, FlowRecordFilter, FlowRecordFilterOperator, FlowRecordLookup, FlowRecordRollback, FlowRecordTriggerType, FlowRecordUpdate, FlowRecordValue, FlowReference, FlowReferenceFilter, FlowReferenceKind, FlowRegionContainerType, FlowResourceCollection, FlowResourceKindEntry, FlowResourceRef, FlowResumeRequest, FlowRunOutcome, FlowRunRequest, FlowSaveRequest, FlowSaveResult, FlowSchedule, FlowScheduledPath, FlowScreen, FlowScreenAction, FlowScreenField, FlowScreenFieldInputsRevisited, FlowScreenFieldNode, FlowScreenFieldPath, FlowScreenFieldType, FlowScreenFieldTypeEntry, FlowScreenNavigation, FlowScreenResponseRequest, FlowScreenTrigger, FlowScreenTriggerInitBehavior, 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 };