@esfaenza/flow-builder 20.3.37 → 20.3.38

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
@@ -1385,50 +1385,67 @@ interface FlowStartInterviewRequest {
1385
1385
  debug?: boolean;
1386
1386
  }
1387
1387
  /**
1388
- * I comandi «Esegui» e «Debug» della barra dell'editor.
1388
+ * Cio' che l'editor **annuncia** quando si preme «Esegui» o «Debug»: il payload dell'output
1389
+ * `runRequested` di `<fb-flow-builder>`.
1389
1390
  *
1390
- * Non e' una primitiva della §6.5: l'editor **non** esegue niente per conto suo. Raccoglie i
1391
- * valori di ingresso in una finestra e li consegna all'applicazione ospite, che sa dove gira il
1392
- * motore e con quale interfaccia lo si guarda un runner suo, una scheda separata, un
1393
- * debugger. Senza implementazione il comando fallisce con `MissingService`, che e' la risposta
1394
- * onesta: un editor che finge di avviare un'esecuzione e' peggio di uno che dice di non poterlo
1395
- * fare.
1391
+ * Non e' una primitiva della §6.5 e non e' nemmeno una chiamata: l'editor **non** esegue niente
1392
+ * e non decide cosa significhi eseguire. Raccoglie l'unica cosa che l'esecuzione non puo'
1393
+ * inventare i valori delle variabili `isInput`e lo dice a chi lo ospita, che sa dove gira
1394
+ * il motore e con quale interfaccia lo si guarda: una navigazione, una chiamata a delle sue API,
1395
+ * una finestra con l'interview dentro, o niente. Nessuna primitiva di `FlowBuilderApi` viene
1396
+ * toccata, quindi non c'e' nessun `MissingService` da gestire: un ospite che non ascolta
1397
+ * l'output semplicemente non fa niente.
1396
1398
  *
1397
- * Il flow si identifica per **nome e versione**, non per documento: si esegue cio' che e'
1398
- * salvato, ed e' per questo che i due comandi sono spenti su un flow mai scritto e avvertono
1399
- * quando ci sono modifiche non salvate.
1399
+ * Ci sta **tutto** cio' che l'editor sa del momento in cui e' stato premuto il comando, perche'
1400
+ * l'ospite non ha modo di chiederlo dopo: nome e versione salvati, gli ingressi già convertiti,
1401
+ * il tipo di processo, se il documento in mano ha modifiche non salvate e il documento stesso.
1402
+ * `flowName`/`version` identificano cio' che e' **salvato** (§6.1) — `definition` e' quello che
1403
+ * si sta editando, e con `isDirty: true` le due cose non coincidono: quale delle due eseguire lo
1404
+ * decide l'ospite, non l'editor.
1400
1405
  */
1401
1406
  interface FlowRunRequest {
1407
+ /**
1408
+ * `true` sul comando «Debug». L'ospite ne fa cio' che vuole — traccia, breakpoint, passo
1409
+ * passo — ma il contratto ricorda che una traccia riporta i valori di **tutte** le risorse,
1410
+ * dati personali compresi (§6.5).
1411
+ */
1412
+ debug: boolean;
1413
+ /** Il nome con cui il flow e' salvato: il comando si accende solo su un flow che ne ha uno. */
1402
1414
  flowName: string;
1403
1415
  /** Assente → l'ospite decide (di norma l'attiva, altrimenti l'ultima), come in §6.1. */
1404
1416
  version?: number;
1405
1417
  /**
1406
1418
  * I valori delle variabili `isInput`, per nome. Sono già convertiti al tipo dichiarato: un
1407
1419
  * `Number` e' un numero, non la stringa digitata. Un'istanza di classe segue la forma della
1408
- * §4.7 (`{type, instance:{className, members}}`), la stessa in lettura e in scrittura.
1420
+ * §4.7 (`{type, instance:{className, members}}`), la stessa in lettura e in scrittura. Un
1421
+ * campo lasciato vuoto **non c'e'**: «non valorizzato» e «stringa vuota» sono due cose diverse.
1409
1422
  */
1410
1423
  inputs?: Record<string, unknown>;
1424
+ /** Il `processType` del documento: dice da se' se l'esecuzione avra' un'interfaccia (§3.2). */
1425
+ processType?: FlowProcessType;
1426
+ /** Il documento ha modifiche non salvate: cio' che e' salvato non e' cio' che si vede. */
1427
+ isDirty: boolean;
1411
1428
  /**
1412
- * `true` sul comando «Debug». L'ospite ne fa cio' che vuole traccia, breakpoint, passo
1413
- * passo ma il contratto ricorda che una traccia riporta i valori di **tutte** le risorse,
1414
- * dati personali compresi (§6.5).
1429
+ * Il documento **in mano all'editor**, non quello salvato. C'e' perche' un ospite puo' voler
1430
+ * provare la bozza senza scriverla, o mandare la definizione al suo motore: senza, l'unico
1431
+ * modo sarebbe rileggerla dal backend, che risponderebbe un'altra cosa.
1415
1432
  */
1416
- debug: boolean;
1433
+ definition: FlowDefinition;
1417
1434
  }
1418
1435
  /**
1419
- * Cio' che l'ospite puo' **restituire** da `runFlow`/`debugFlow`, e che l'editor mostra nel
1420
- * pannello «Debug».
1436
+ * Cio' che l'ospite puo' **ridare** all'editor dopo un `runRequested`, passandolo all'input
1437
+ * `runOutcome` di `<fb-flow-builder>`: e' quello che il pannello «Debug» mostra.
1421
1438
  *
1422
- * Esiste per un caso preciso: un flow che non ha schermate — un `AutoLaunched`, o
1423
- * un'orchestrazione che gira tutta in background non ha nessuna interfaccia in cui guardare
1439
+ * Non torna da nessuna chiamata l'editor non ne fa nessuna ed e' facoltativo: un ospite che
1440
+ * apre un suo runner e ci mostra tutto non passa niente, e il pannello lo dice invece di
1441
+ * sembrare rotto. Esiste per un caso preciso: un flow che non ha schermate — un `AutoLaunched`,
1442
+ * o un'orchestrazione che gira tutta in background — non ha nessuna interfaccia in cui guardare
1424
1443
  * cosa e' successo. Non c'e' un form da compilare, non c'e' una finestra del runtime: c'e' solo
1425
1444
  * la traccia, e il posto in cui la si vuole e' l'editor, accanto al grafo su cui si sta
1426
1445
  * lavorando. Ogni voce della traccia porta un `elementName`, e il pannello lo usa per portare
1427
1446
  * l'utente sull'elemento.
1428
1447
  *
1429
- * Restituire qualcosa e' **facoltativo**: un ospite che apre un suo runner e ci mostra tutto lì
1430
- * risolve con `void`, e l'editor si limita a dire che l'esecuzione e' partita. Un ospite che
1431
- * parla già la §6.5 puo' restituire il suo `FlowInterviewResult` così com'e': i campi
1448
+ * Un ospite che parla già la §6.5 puo' passare il suo `FlowInterviewResult` così com'e': i campi
1432
1449
  * interattivi (token, `pendingScreen`) l'editor non li guarda, perche' non e' lui a condurre
1433
1450
  * l'esecuzione.
1434
1451
  *
@@ -1763,29 +1780,6 @@ declare abstract class FlowBuilderApi {
1763
1780
  * escluso quello corrente (§5.10).
1764
1781
  */
1765
1782
  abstract listSubflowCandidates(excluding?: string): Promise<FlowSummary[]>;
1766
- /**
1767
- * «Esegui»: avvia il flow **salvato** con i valori raccolti dalla finestra.
1768
- *
1769
- * Chi integra l'editor la implementa. Non c'e' un default che «prova» il flow: l'editor non
1770
- * ha un motore, e nascondere l'assenza dietro un'esecuzione finta e' il modo piu' veloce di
1771
- * far credere che un flow funzioni.
1772
- *
1773
- * Il ritorno e' **facoltativo** ed e' l'unica cosa che l'editor sa dell'esecuzione: un
1774
- * {@link FlowRunOutcome} finisce nel pannello «Debug» — stato, traccia, risorse, output —
1775
- * mentre `void` significa «guardo altrove», e l'editor dice solo che e' partita. Serve
1776
- * soprattutto ai flow **senza schermate**: lì non c'e' nessuna interfaccia del runtime in cui
1777
- * vedere cos'e' successo, e la traccia accanto al grafo e' tutto cio' che si ha.
1778
- */
1779
- runFlow(request: FlowRunRequest): Promise<FlowRunOutcome | void>;
1780
- /**
1781
- * «Debug»: come {@link runFlow}, ma `request.debug` e' `true` — ed e' il caso in cui il
1782
- * ritorno conta davvero, perche' `trace` e `resources` esistono solo in debug (§6.5).
1783
- *
1784
- * Sono due metodi e non un flag perche' quasi sempre sono due strade diverse dell'ospite —
1785
- * l'una avvia e basta, l'altra apre un ispettore — e perche' un ambiente puo' esporre l'una
1786
- * senza l'altra: due `MissingService` distinti dicono quale delle due manca.
1787
- */
1788
- debugFlow(request: FlowRunRequest): Promise<FlowRunOutcome | void>;
1789
1783
  /**
1790
1784
  * `POST /interviews` — avvia. Ricorda: `status: 'Failed'` **non** e' un errore
1791
1785
  * di trasporto, e `debug: true` popola `trace` e `resources` con dati che
@@ -4603,7 +4597,7 @@ declare class ReferencePickerComponent {
4603
4597
  * percorso inesistente di uno scope che i percorsi li dichiara, perche' lì il backend
4604
4598
  * risponderebbe `GLOBAL_UNKNOWN`.
4605
4599
  */
4606
- readonly valueState: _angular_core.Signal<"empty" | "unknown" | "member" | "known" | "navigated" | "host" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid">;
4600
+ readonly valueState: _angular_core.Signal<"member" | "empty" | "unknown" | "known" | "navigated" | "host" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid">;
4607
4601
  /** Le parole cambiano con la tappa: un campo di un'entita' non e' un membro di una classe. */
4608
4602
  private readonly tailIsObject;
4609
4603
  private readonly tailContainer;
@@ -6526,14 +6520,14 @@ declare class RunDialogComponent {
6526
6520
  private readonly store;
6527
6521
  private readonly dictionaries;
6528
6522
  private readonly catalog;
6529
- /** `debug` cambia il titolo, l'avviso sui dati e quale primitiva verra' chiamata. */
6530
- readonly mode: _angular_core.InputSignal<"debug" | "run">;
6523
+ /** `debug` cambia il titolo, l'avviso sui dati e il flag nel payload annunciato. */
6524
+ readonly mode: _angular_core.InputSignal<"run" | "debug">;
6531
6525
  /** Il flow che verra' eseguito: e' quello **salvato**, non il documento in mano. */
6532
6526
  readonly flowName: _angular_core.InputSignal<string | null>;
6533
6527
  readonly version: _angular_core.InputSignal<number | null>;
6534
6528
  /** Con modifiche non salvate si esegue la versione salvata: dirlo evita la sorpresa. */
6535
6529
  readonly isDirty: _angular_core.InputSignal<boolean>;
6536
- /** L'ospite sta ancora rispondendo: il bottone resta spento invece di ripartire. */
6530
+ /** L'ospite dice che l'esecuzione di prima e' in corso: il bottone resta spento. */
6537
6531
  readonly isBusy: _angular_core.InputSignal<boolean>;
6538
6532
  readonly confirmed: _angular_core.OutputEmitterRef<Record<string, unknown>>;
6539
6533
  readonly cancelled: _angular_core.OutputEmitterRef<void>;
@@ -6686,9 +6680,34 @@ declare class FlowBuilderComponent {
6686
6680
  * modificano molti elementi di fila perche' non c'e' niente da aprire e chiudere.
6687
6681
  */
6688
6682
  readonly inspectorMode: _angular_core.InputSignal<"dialog" | "panel">;
6683
+ /**
6684
+ * L'esito dell'ultima esecuzione, se l'ospite ne ha uno da mostrare.
6685
+ *
6686
+ * E' l'altra meta' di {@link runRequested}: l'editor non esegue e non aspetta niente, quindi
6687
+ * l'unico modo per far arrivare una traccia nel pannello «Debug» e' che l'ospite la passi di
6688
+ * qui quando l'ha. Lasciarlo `null` e' legittimo — chi mostra tutto in una sua interfaccia non
6689
+ * ha niente da dire all'editor — e il pannello distingue i tre casi (niente, in corso, esito
6690
+ * vuoto) perche' i rimedi sono diversi.
6691
+ */
6692
+ readonly runOutcome: _angular_core.InputSignal<FlowRunOutcome | null>;
6693
+ /**
6694
+ * L'esecuzione annunciata e' ancora in corso. Solo l'ospite lo sa: dopo l'emit l'editor non ha
6695
+ * piu' notizie. Accende il puntino sul tab «Debug» e tiene spento il bottone della finestra.
6696
+ */
6697
+ readonly isRunning: _angular_core.InputSignal<boolean>;
6689
6698
  readonly saved: _angular_core.OutputEmitterRef<FlowSaveResult>;
6690
6699
  readonly activated: _angular_core.OutputEmitterRef<FlowSaveResult>;
6691
6700
  readonly closeRequested: _angular_core.OutputEmitterRef<void>;
6701
+ /**
6702
+ * «Esegui» / «Debug»: l'editor **annuncia**, non esegue.
6703
+ *
6704
+ * Cosa significhi eseguire lo decide chi ospita l'editor — una navigazione, una chiamata a
6705
+ * delle sue API, una finestra con l'interview dentro — e il payload porta tutto cio' che
6706
+ * serve per deciderlo (nome, versione, ingressi convertiti, `processType`, `isDirty`, il
6707
+ * documento in mano). Un ospite che non ascolta questo output non fa niente: non c'e' nessuna
6708
+ * primitiva che possa mancare, quindi nessun errore da mostrare.
6709
+ */
6710
+ readonly runRequested: _angular_core.OutputEmitterRef<FlowRunRequest>;
6692
6711
  readonly selectedName: _angular_core.WritableSignal<string | null>;
6693
6712
  readonly activePanel: _angular_core.WritableSignal<SidePanel>;
6694
6713
  /** La dialog del dettaglio e' aperta. Vale solo con `inspectorMode = 'dialog'`. */
@@ -6953,18 +6972,17 @@ declare class FlowBuilderComponent {
6953
6972
  /** Scrive la copia e continua a lavorare su di essa (§6.2). */
6954
6973
  confirmCopy(): Promise<void>;
6955
6974
  /** Quale delle due finestre e' aperta; `null` = nessuna. */
6956
- readonly runMode: _angular_core.WritableSignal<"debug" | "run" | null>;
6957
- /** La chiamata all'ospite e' in volo: il bottone della finestra resta spento. */
6958
- readonly isStartingRun: _angular_core.WritableSignal<boolean>;
6975
+ readonly runMode: _angular_core.WritableSignal<"run" | "debug" | null>;
6959
6976
  /**
6960
- * L'esito dell'ultima esecuzione, se l'ospite ne ha restituito uno.
6977
+ * L'esito da mostrare nel pannello.
6961
6978
  *
6962
- * È tutto cio' che l'editor sa di un'esecuzione, e serve soprattutto ai flow **senza
6963
- * schermate**: non si apre nessuna interfaccia del runtime, quindi senza questo pannello
6964
- * non ci sarebbe **nessun** posto in cui vedere quali elementi sono stati eseguiti.
6979
+ * E' l'input dell'ospite, ma **scartabile**: «Svuota» e' un gesto locale l'esito di prima
6980
+ * non riguarda piu' il documento che si sta editando e un input non si puo' rimettere a
6981
+ * `null` da dentro. Con `linkedSignal` il valore torna quello dell'ospite ogni volta che ne
6982
+ * arriva uno nuovo, quindi due esecuzioni di fila non restano nascoste da una pulizia.
6965
6983
  */
6966
- readonly runOutcome: _angular_core.WritableSignal<FlowRunOutcome | null>;
6967
- /** L'ultima esecuzione era in debug: senza, traccia e risorse non arrivano ed e' normale. */
6984
+ readonly shownOutcome: _angular_core.WritableSignal<FlowRunOutcome | null>;
6985
+ /** L'ultima esecuzione annunciata era in debug: senza, traccia e risorse non arrivano ed e' normale. */
6968
6986
  readonly wasRunInDebug: _angular_core.WritableSignal<boolean>;
6969
6987
  /**
6970
6988
  * Si esegue cio' che e' **salvato**: su un flow mai scritto non c'e' niente da avviare, e il
@@ -6976,14 +6994,18 @@ declare class FlowBuilderComponent {
6976
6994
  /** Svuota il pannello: l'esito di prima non riguarda piu' il documento che si sta editando. */
6977
6995
  clearRunOutcome(): void;
6978
6996
  /**
6979
- * Consegna gli ingressi all'ospite.
6997
+ * Annuncia l'esecuzione all'ospite, con tutto cio' che sappiamo del momento in cui e' stato
6998
+ * premuto il comando.
6999
+ *
7000
+ * La finestra si chiude **subito**: non c'e' niente da attendere — l'emit e' sincrono — e
7001
+ * un'esecuzione puo' durare quanto vuole, con schermate da compilare puo' finire minuti dopo.
7002
+ * Tenere aperto il form degli ingressi per tutto quel tempo coprirebbe proprio il grafo che si
7003
+ * sta guardando.
6980
7004
  *
6981
- * La finestra si chiude **subito**, prima che la chiamata risponda: un'esecuzione puo' durare
6982
- * quanto vuole con schermate da compilare puo' finire minuti dopo e tenere aperto il form
6983
- * degli ingressi per tutto quel tempo coprirebbe proprio il grafo che si sta guardando. Il
6984
- * pannello «Debug» prende il posto dell'attesa, e l'esito ci arriva quando arriva.
7005
+ * Il pannello «Debug» si apre lo stesso, e non e' l'editor che presume un esito: e' il posto in
7006
+ * cui l'esito arrivera' **se** arrivera', e dice a chiare lettere quando non c'e' niente.
6985
7007
  */
6986
- confirmRun(inputs: Record<string, unknown>): Promise<void>;
7008
+ confirmRun(inputs: Record<string, unknown>): void;
6987
7009
  createNewVersion(): Promise<void>;
6988
7010
  activate(): Promise<void>;
6989
7011
  /** §9.3 — prima opzione davanti a un conflitto. */
@@ -7008,7 +7030,7 @@ declare class FlowBuilderComponent {
7008
7030
  dismissNotice(): void;
7009
7031
  private showError;
7010
7032
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlowBuilderComponent, never>;
7011
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlowBuilderComponent, "fb-flow-builder", never, { "flowName": { "alias": "flowName"; "required": false; "isSignal": true; }; "version": { "alias": "version"; "required": false; "isSignal": true; }; "author": { "alias": "author"; "required": false; "isSignal": true; }; "defaultProcessType": { "alias": "defaultProcessType"; "required": false; "isSignal": true; }; "inspectorMode": { "alias": "inspectorMode"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "activated": "activated"; "closeRequested": "closeRequested"; }, never, never, true, never>;
7033
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlowBuilderComponent, "fb-flow-builder", never, { "flowName": { "alias": "flowName"; "required": false; "isSignal": true; }; "version": { "alias": "version"; "required": false; "isSignal": true; }; "author": { "alias": "author"; "required": false; "isSignal": true; }; "defaultProcessType": { "alias": "defaultProcessType"; "required": false; "isSignal": true; }; "inspectorMode": { "alias": "inspectorMode"; "required": false; "isSignal": true; }; "runOutcome": { "alias": "runOutcome"; "required": false; "isSignal": true; }; "isRunning": { "alias": "isRunning"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "activated": "activated"; "closeRequested": "closeRequested"; "runRequested": "runRequested"; }, never, never, true, never>;
7012
7034
  }
7013
7035
 
7014
7036
  declare class SelectValueDirective implements AfterViewChecked {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/flow-builder",
3
- "version": "20.3.37",
3
+ "version": "20.3.38",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^20.2.14",
6
6
  "@angular/common": "^20.3.28",