@esfaenza/flow-builder 20.3.55 → 20.3.57

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
@@ -1349,6 +1349,10 @@ interface FlowSummary {
1349
1349
  activeVersion?: number | null;
1350
1350
  latestVersion?: number;
1351
1351
  versionCount?: number;
1352
+ /**
1353
+ * Esiste una **bozza** (§6.1). Conta le sole bozze: una versione superata e' modificabile ma non
1354
+ * e' una bozza finche' nessuno la salva, quindi non e' `isEditable` di una riga qualunque.
1355
+ */
1352
1356
  hasDraft?: boolean;
1353
1357
  updatedAt?: string;
1354
1358
  /** Esiste una versione attiva. Non ricalcolarlo lato client (§6.1). */
@@ -1368,7 +1372,10 @@ interface FlowVersionSummary {
1368
1372
  updatedAt?: string;
1369
1373
  updatedBy?: string | null;
1370
1374
  isActive?: boolean;
1371
- /** La versione e' una bozza. Non ricalcolarlo lato client (§6.1). */
1375
+ /**
1376
+ * La versione **non e' quella attiva**: una bozza o una superata (§6.1, §8). Non ricalcolarlo lato
1377
+ * client, e non leggerlo come «e' una bozza» — per quello c'e' `status`.
1378
+ */
1372
1379
  isEditable?: boolean;
1373
1380
  }
1374
1381
  interface FlowListQuery {
@@ -1886,7 +1893,9 @@ declare abstract class FlowBuilderApi {
1886
1893
  /** `POST /flows` — crea la versione 1. `AlreadyExists` se il nome e' già usato. */
1887
1894
  abstract createFlow(request: FlowCreateRequest): Promise<FlowSaveResult>;
1888
1895
  /**
1889
- * `PUT /flows/{name}` — salva sulla bozza esistente o ne crea una nuova versione.
1896
+ * `PUT /flows/{name}` — salva sulla versione indicata, una bozza o una superata, o ne crea una
1897
+ * nuova (§8). Sulla versione attiva rifiuta con `NotEditable`; una superata, salvata, torna bozza
1898
+ * e lo dice lo `status` della risposta. Senza `version` sovrascrive l'ultima solo se e' una bozza.
1890
1899
  * Riesce **anche con errori** di validazione: l'esito sano si legge in
1891
1900
  * `FlowSaveResult.validation`, non nell'assenza di eccezione (§6.2).
1892
1901
  */
@@ -1903,7 +1912,7 @@ declare abstract class FlowBuilderApi {
1903
1912
  abstract activateVersion(flowName: string, version: number): Promise<FlowSaveResult>;
1904
1913
  /** `POST /flows/{name}/deactivate` — il flow non e' piu' eseguibile. */
1905
1914
  abstract deactivateFlow(flowName: string): Promise<void>;
1906
- /** `DELETE /flows/{name}/versions/{v}` — rifiutata sulla versione attiva. */
1915
+ /** `DELETE /flows/{name}/versions/{v}` — rifiutata sulla versione attiva, con `NotEditable` (§10). */
1907
1916
  deleteVersion(flowName: string, version: number): Promise<void>;
1908
1917
  /** `DELETE /flows/{name}` — rifiutata se esiste una versione attiva. */
1909
1918
  deleteFlow(flowName: string): Promise<void>;
@@ -4254,9 +4263,19 @@ declare class FlowEditorSession {
4254
4263
  * non ancora salvato, e' modificabile per definizione.
4255
4264
  */
4256
4265
  readonly isEditable: _angular_core.Signal<boolean>;
4257
- /** Su una versione non modificabile il comando primario diventa "Nuova versione" (§8.1). */
4266
+ /** Sulla versione attiva il comando primario diventa "Nuova versione" (§8, regola 1). */
4258
4267
  readonly primaryCommand: _angular_core.Signal<"create" | "save" | "newVersion">;
4259
4268
  readonly isActiveVersion: _angular_core.Signal<boolean>;
4269
+ /**
4270
+ * §8, regola 1 — la versione aperta e' una **superata**: si modifica, ma il primo salvataggio va
4271
+ * confermato. Un'esecuzione sospesa nata quando era attiva — una pausa, un'attesa, uno step, una
4272
+ * schermata parcheggiata — riprende sulla definizione modificata, e se il node su cui era ferma e'
4273
+ * stato tolto o rinominato fallisce. Il backend non puo' saperlo al posto nostro.
4274
+ *
4275
+ * Si legge lo `status` della riga, che e' del backend come `isEditable`: salvata, la versione torna
4276
+ * bozza e la domanda smette di porsi da se' al primo `refreshVersions`.
4277
+ */
4278
+ readonly isObsoleteVersion: _angular_core.Signal<boolean>;
4260
4279
  /** Attivare esige zero errori (§8.3): il comando resta disabilitato finche' ce ne sono. */
4261
4280
  readonly canActivate: _angular_core.Signal<boolean>;
4262
4281
  setAuthor(author: string | undefined): void;
@@ -4347,6 +4366,11 @@ declare class FlowEditorSession {
4347
4366
  private normalizeResult;
4348
4367
  private static readonly warned;
4349
4368
  private static warnOnce;
4369
+ /**
4370
+ * Restituisce la rilettura dell'elenco versioni, che parte comunque: chi la aspetta e' chi ha
4371
+ * appena scritto una versione **nuova**, che nell'elenco vecchio non c'e' — e finche' non c'e'
4372
+ * `currentVersionSummary` e' vuoto, cioe' stato «Nuovo» e editor in sola lettura.
4373
+ */
4350
4374
  private applySaveResult;
4351
4375
  /**
4352
4376
  * Duplica: scrive il flow **sotto un altro nome** e sposta la sessione sulla copia
@@ -4386,12 +4410,18 @@ declare class FlowEditorSession {
4386
4410
  deleteVersion(version: number): Promise<void>;
4387
4411
  /** Risoluzione del conflitto, prima opzione: ricarica e perde le modifiche locali (§9.3). */
4388
4412
  reloadAfterConflict(): Promise<void>;
4413
+ /** Risoluzione del conflitto, seconda opzione: le modifiche locali in una nuova versione (§9.3). */
4414
+ saveAsNewVersionAfterConflict(): Promise<FlowSaveResult>;
4389
4415
  /**
4390
- * Risoluzione del conflitto, seconda opzione: salva come nuova versione, conservando
4391
- * le modifiche locali (§9.3). Il salvataggio senza `expectedUpdatedAt` e senza `version`
4392
- * lascia scegliere al backend, che crea una nuova versione se l'ultima non e' toccabile.
4416
+ * Il documento in mano, modifiche comprese, scritto in una versione **nuova**: lascia intatta
4417
+ * quella da cui si era partiti. Serve dove sovrascrivere e' la cosa sbagliata o rischiosa — un
4418
+ * conflitto (§9.3), o una superata su cui ci sono esecuzioni sospese (§8, regola 1).
4419
+ *
4420
+ * Sono due chiamate e non «salva senza `version`»: quella strada sceglie da se' e sovrascrive
4421
+ * l'ultima se e' una bozza (§8), cioe' proprio cio' che qui si vuole evitare. `createVersion`
4422
+ * copia una versione salvata, e il salvataggio subito dopo ci scrive sopra il documento.
4393
4423
  */
4394
- saveAsNewVersionAfterConflict(): Promise<FlowSaveResult>;
4424
+ saveAsNewVersion(): Promise<FlowSaveResult>;
4395
4425
  dismissConflict(): void;
4396
4426
  /** L'ultima validazione conosciuta, da qualunque primitiva arrivi. */
4397
4427
  get validationResult(): FlowValidationResult | null;
@@ -5208,6 +5238,18 @@ declare class ReferencePickerComponent {
5208
5238
  * destinazione farebbe attivare un flow che poi fallisce davanti all'utente. L'eccezione sono i
5209
5239
  * campi del record che innesca, che si assegnano (§4.1).
5210
5240
  */
5241
+ /**
5242
+ * In un campo di destinazione, la radice del valore quando e' **nota ma non scrivibile**: sta fra
5243
+ * le radici di `getReferences` e non fra quelle di `getWritableReferences`. E' il caso di chi
5244
+ * scrive a mano `Leggi_Ordine.Stato` — l'output automatico si legge, ma solo le variabili si
5245
+ * assegnano (§4.6, §5.3) — e di una costante o una formula. Senza, finivano in `navigated`, che
5246
+ * dice «non verificato» di cio' che la validazione rifiuta.
5247
+ *
5248
+ * Le globali restano fuori: le giudica {@link isReadOnlyPath}, e i campi di `$Record` si
5249
+ * assegnano. E senza l'elenco scrivibile — in volo, fallito, o un host che risponde vuoto — non
5250
+ * si accusa nessuno: la regola e' quella del validatore, che senza nomi scrivibili tace.
5251
+ */
5252
+ private readonly readOnlyRoot;
5211
5253
  private readonly isReadOnlyPath;
5212
5254
  private readonly pathReferences;
5213
5255
  /**
@@ -5256,6 +5298,9 @@ declare class ReferencePickerComponent {
5256
5298
  * classe, `FIELD_UNKNOWN` su un'entita', e a differenza di prima si sa per certo;
5257
5299
  * - `memberNotWritable`: il segmento esiste, non e' scrivibile, e questo campo vuole una
5258
5300
  * destinazione: `TARGET_NOT_WRITABLE`;
5301
+ * - `rootNotWritable`: la radice esiste ma non e' una variabile — un output automatico, una
5302
+ * costante, una formula — e questo campo vuole una destinazione: `TARGET_NOT_WRITABLE` sul
5303
+ * nome intero come sui suoi campi (§4.6, §5.3);
5259
5304
  * - `pathUnverified`: la catena si interrompe (`PATH_NOT_VERIFIABLE`): avviso, non errore;
5260
5305
  * - `globalPathUntyped`: percorso globale che porta un contenitore senza dichiararne il tipo:
5261
5306
  * `PATH_NOT_VERIFIABLE`, e la correzione sta nel catalogo dell'host, non nel flow (§4.1);
@@ -5269,7 +5314,7 @@ declare class ReferencePickerComponent {
5269
5314
  * percorso inesistente di uno scope che i percorsi li dichiara, perche' lì il backend
5270
5315
  * risponderebbe `GLOBAL_UNKNOWN`.
5271
5316
  */
5272
- readonly valueState: _angular_core.Signal<"empty" | "unknown" | "member" | "known" | "navigated" | "host" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid" | "priorValuesMissing">;
5317
+ readonly valueState: _angular_core.Signal<"empty" | "known" | "navigated" | "host" | "member" | "containerRoot" | "memberUnknown" | "memberNotWritable" | "rootNotWritable" | "pathUnverified" | "globalPathUntyped" | "globalPathInvalid" | "priorValuesMissing" | "unknown">;
5273
5318
  /** Le parole cambiano con la tappa: un campo di un'entita' non e' un membro di una classe. */
5274
5319
  private readonly tailIsObject;
5275
5320
  private readonly tailContainer;
@@ -8097,7 +8142,7 @@ declare class FlowBuilderComponent {
8097
8142
  * troppo. `panel` tiene il form nel pannello laterale, che e' piu' comodo quando si
8098
8143
  * modificano molti elementi di fila perche' non c'e' niente da aprire e chiudere.
8099
8144
  */
8100
- readonly inspectorMode: _angular_core.InputSignal<"dialog" | "panel">;
8145
+ readonly inspectorMode: _angular_core.InputSignal<"panel" | "dialog">;
8101
8146
  /**
8102
8147
  * L'esito dell'ultima esecuzione, se l'ospite ne ha uno da mostrare.
8103
8148
  *
@@ -8425,7 +8470,22 @@ declare class FlowBuilderComponent {
8425
8470
  * indice — e' la traccia che sopravvive: dopo il passo si adotta il nome che si trova lì.
8426
8471
  */
8427
8472
  private stepHistory;
8473
+ /**
8474
+ * §8, regola 1 — il salvataggio su una versione **superata** aspetta una conferma. Si modifica come
8475
+ * una bozza, ma le esecuzioni sospese nate quando era attiva riprendono sulla definizione nuova, e
8476
+ * se il node su cui erano ferme non c'e' piu' falliscono: e' una domanda a cui il backend non puo'
8477
+ * rispondere al posto di chi salva. La barra resta finche' non si sceglie, come quella del duplicato,
8478
+ * e un secondo «Salva» non vale come conferma: la conferma e' un bottone che dice cosa accadra'.
8479
+ */
8480
+ readonly isObsoleteSaveOpen: _angular_core.WritableSignal<boolean>;
8428
8481
  save(): Promise<void>;
8482
+ /** «Salva comunque»: la superata si sovrascrive e torna bozza (§8). */
8483
+ confirmObsoleteSave(): Promise<void>;
8484
+ /** L'alternativa che non tocca le esecuzioni sospese: la superata resta com'era. */
8485
+ saveObsoleteAsNewVersion(): Promise<void>;
8486
+ cancelObsoleteSave(): void;
8487
+ /** Il salvataggio vero, con la notifica dell'esito; `undefined` se non e' riuscito. */
8488
+ private writeCurrentVersion;
8429
8489
  /** Il modulo del duplicato e' aperto. */
8430
8490
  readonly isCopyOpen: _angular_core.WritableSignal<boolean>;
8431
8491
  readonly copyName: _angular_core.WritableSignal<string>;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@esfaenza/flow-builder",
3
- "version": "20.3.55",
3
+ "version": "20.3.57",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^20.2.14",
6
- "@angular/common": "^20.3.31",
7
- "@angular/core": "^20.3.31",
6
+ "@angular/common": "^20.3.32",
7
+ "@angular/core": "^20.3.32",
8
8
  "@foblex/flow": ">=19.0.0",
9
9
  "dagre": "0.8.5"
10
10
  },