@esfaenza/flow-builder 20.3.14 → 20.3.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -221,10 +221,31 @@ stesso che avra' sul canvas. `core/element-variants.ts` tiene la mappa tipo →
221
221
  discriminatore; i valori restano nel dizionario del backend (`collectionProcessorTypes`), e
222
222
  senza quel dizionario il tipo torna a essere una voce sola.
223
223
 
224
- **Inspector.** Un form per ogni tipo supportato: Start, Screen, Assignment, Decision, Loop,
225
- Collection Processor, Get / Create / Update / Delete / Rollback Records, Action, Script,
226
- Subflow, Wait, Custom Error, Transform, Orchestrated Stage. Più l'intestazione comune con la
227
- rinomina, che **riscrive tutti i riferimenti** all'elemento.
224
+ **Inspector.** Un form per ogni tipo supportato: Start, Screen, Screen dinamico, Assignment,
225
+ Decision, Loop, Collection Processor, Get / Create / Update / Delete / Rollback Records,
226
+ Action, Script, Subflow, Wait, Custom Error, Transform, Orchestrated Stage. Più l'intestazione
227
+ comune con la rinomina, che **riscrive tutti i riferimenti** all'elemento.
228
+
229
+ **Screen dinamico (§5.2).** È l'unico inspector a due pannelli, e per questo la dialog e' larga
230
+ il doppio di com'era: a sinistra l'albero dei campi con la larghezza in dodicesimi disegnata, a
231
+ destra le proprieta' del campo selezionato. Quali proprieta' mostrare **lo decide il dizionario**
232
+ (`screenFieldTypes` e i suoi flag `storesValue`, `isCollection`, `acceptsChoices`, `isContainer`,
233
+ `requiresDataType`), non il codice: sono gli stessi flag che applica il runtime, e
234
+ reimplementarli porta a proporre configurazioni che il motore rifiuta.
235
+
236
+ Tre cose che il modello non mostra e il form dice:
237
+
238
+ - un campo che raccoglie un valore **e' una risorsa del flow**, referenziabile per nome ovunque
239
+ e di **sola lettura** — il suo nome vive nello spazio dei nomi comune, e rinominarlo riscrive i
240
+ riferimenti (`FlowDocumentStore.renameScreenField`, come per i node: nessuna primitiva del
241
+ backend lo fa);
242
+ - le regole di visibilita' si rivalutano **sui valori appena inviati**, i campi nascosti vengono
243
+ **azzerati** e solo i visibili vengono validati;
244
+ - `choiceReferences` accetta **solo** `Choice` e `DynamicChoiceSet`, e gli output automatici di un
245
+ `ComponentInstance` sono esclusivi con i suoi `outputParameters`.
246
+
247
+ Il riordino e l'annidamento si fanno trascinando (`@angular/cdk/drag-drop`) oppure con i comandi
248
+ «su / giu' / porta dentro / porta fuori», che coprono anche gli alberi piu' alti del pannello.
228
249
 
229
250
  Sullo stage di orchestrazione il form dice le tre cose che il modello non mostra: gli step
230
251
  **non sono una sequenza** (le frecce riordinano l'esame, non l'esecuzione), ingresso e uscita
@@ -412,6 +433,7 @@ src/lib/
412
433
  condition-logic.util.ts riscrittura di conditionLogic su cancella / riordina
413
434
  condition-types.util.ts quali tipi si confrontano, e i numeri in cultura invariante
414
435
  stage-step.util.ts gli step di uno stage: nomi, output non condizionabili
436
+ screen-field.util.ts l'albero dei campi di uno screen dinamico: percorsi, nomi, mutazioni
415
437
  ui/
416
438
  flow-builder.component.ts il componente da montare
417
439
  canvas/ palette/ inspector/ resources/ problems/ versions/ debug/ shared/
@@ -442,6 +464,7 @@ Oltre ad Angular:
442
464
  |---|---|
443
465
  | `@foblex/flow` (+ `@foblex/platform`, `@foblex/mediator`, `@foblex/2d`, `@foblex/utils`) | rendering del grafo, pan/zoom, gesti su node e connessioni. Usata in *classic mode*: la libreria disegna e riconosce i gesti, lo stato resta nostro |
444
466
  | `dagre` | auto-layout gerarchico del comando «Riordina» |
467
+ | `@angular/cdk` | il solo `drag-drop`, per l'albero dei campi dello screen dinamico. Nessun componente Material: i controlli restano input nativi |
445
468
 
446
469
  Nessun design system: i controlli sono input nativi con binding espliciti e CSS custom, così
447
470
  il builder si integra nel tema dell'app ospite senza imporre il proprio.
@@ -465,6 +488,12 @@ Le variabili si sovrascrivono sul contenitore:
465
488
  Elenco completo in `styles/flow-builder.css`. Per la variante scura basta
466
489
  `data-fb-theme="dark"` su un antenato.
467
490
 
491
+ La dialog di modifica ha **una misura sola per ogni tipo di elemento** — l'inspector dentro
492
+ cambia, la finestra no, altrimenti i comandi si spostano sotto il mouse a ogni apertura — e le
493
+ due misure sono token: `--fb-dialog-width` (1400px) e `--fb-dialog-height` (860px), entrambe
494
+ limitate allo spazio disponibile. La larghezza e' quella che serve al compositore dello screen
495
+ dinamico, che e' a due pannelli.
496
+
468
497
  Nota sugli archi: il colore si imposta valorizzando le custom properties del tema di
469
498
  @foblex/flow (`--ff-connection-color`, `--ff-marker-color`) invece di sovrascrivere le sue
470
499
  regole, perche' i selettori hanno la stessa specificita' e chi vince dipenderebbe dall'ordine
@@ -523,6 +552,13 @@ possibile anche con errori e attivazione bloccata dagli errori (§8).
523
552
  vivono dentro `rules[i].connector`, ma un arco selezionato perde la selezione.
524
553
  - **`relatedRecords` di Get Records** e' esposto in sola lettura con un avviso: e' modellato
525
554
  ma non tradotto in query.
555
+ - **L'albero dei campi dello screen dinamico e' una lista di rilascio piatta**, non una per
556
+ contenitore: le drop list annidate del CDK sono ambigue proprio qui — il rettangolo di una
557
+ sezione contiene quello delle sue colonne, e a ricevere il rilascio e' sempre la lista
558
+ registrata per prima, cioe' la radice. Con la lista piatta il contenitore di arrivo si deduce
559
+ dalla riga che precede il punto di rilascio (sotto un contenitore = dentro, sotto un campo =
560
+ accanto). Il prezzo: trascinando una sezione, i suoi figli restano fermi finche' non si
561
+ rilascia — poi si spostano con lei.
526
562
  - **L'esecutore della demo non valuta le condizioni**: prende il primo ramo disponibile e lo
527
563
  scrive nella traccia. È un mock per esercitare il pannello, non il motore.
528
564
  - **Nessun test automatico**: la libreria e' stata verificata a mano sull'app demo (canvas,