@esfaenza/flow-builder 20.3.32 → 20.3.34

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
@@ -194,6 +194,48 @@ l'attributo `style` del node a ogni spostamento e uno `[style.width]` verrebbe c
194
194
  tabella delle larghezze e' la stessa che il comando «Riordina» passa a dagre: se divergessero,
195
195
  i node larghi resterebbero sovrapposti.
196
196
 
197
+ **Lavorare su un flow grande.** Un flow di produzione arriva a quaranta elementi distribuiti su
198
+ settemila pixel di canvas, e a quella scala quasi tutto quello che serve e' *trovare* e
199
+ *orientarsi*. Quattro cose lo rendono possibile.
200
+
201
+ *Inquadratura leggibile.* «Inquadra» non scende sotto il **60%**: `fitToScreen` non ha un minimo
202
+ e su un flow del genere chiede lo 8%, cioe' quaranta rettangoli grigi senza una etichetta
203
+ leggibile. Sotto la soglia si rinuncia a mostrare tutto e si inquadra l'**inizio** del flow.
204
+ Accanto ci sono i comandi di zoom con la percentuale, e il numero e' un bottone: riporta al 100%
205
+ sull'elemento selezionato.
206
+
207
+ *Ricerca nel documento.* La casella in alto (`Ctrl`+`F`) cerca fra **tutto cio' che ha un nome
208
+ nello spazio dei nomi comune** (§3.3): elementi, risorse, campi di screen dinamico, screen action,
209
+ step di orchestrazione. Scegliere un risultato porta la vista sull'elemento e apre il suo form —
210
+ e se il risultato e' un campo di uno screen dinamico, apre il form **con quel campo
211
+ selezionato**. La casella della palette e' un'altra cosa e lo dice: filtra i *tipi* che si
212
+ possono aggiungere.
213
+
214
+ *Innesto su un arco.* Trascinando un elemento dalla palette **sopra un arco**, l'arco si accende
215
+ e il rilascio lo innesta nel percorso: chi precedeva punta al nuovo elemento, il nuovo elemento
216
+ riprende da dove l'arco arrivava, e cio' che sta sotto scende per fargli spazio — solo se serve,
217
+ e in **un solo passo di annulla**. Quale uscita «riprende il percorso» e' una scelta semantica e
218
+ non «la prima»: una Decision riprende dal ramo `default` (le regole sono cio' che l'autore deve
219
+ ancora scrivere), un Loop da `loopEnd`, e un Custom Error **non riprende affatto** perche'
220
+ interrompe l'esecuzione (§5.12) — in quel caso l'editor dice che il percorso a valle e' rimasto
221
+ scollegato.
222
+
223
+ *Spostare un blocco di elementi.* Su un flow di produzione riordinare a mano un elemento alla
224
+ volta non e' lavoro, e' penitenza. I gesti ci sono — `Ctrl`+clic aggiunge o toglie un elemento
225
+ dalla selezione, `Shift`+trascina disegna un rettangolo, `Ctrl`+`A` prende tutto, e trascinando
226
+ **uno** degli elementi selezionati si spostano tutti in **un solo passo di annulla** — ma nessuno
227
+ di questi si vede. Per questo accanto ai comandi di zoom c'e' un interruttore «Seleziona»: acceso,
228
+ il trascinamento sul canvas vuoto disegna il rettangolo di selezione invece di spostare la vista
229
+ (che nel frattempo si muove col tasto centrale del mouse). E quando la selezione contiene piu' di
230
+ un elemento, il canvas lo dice e dice **cosa farne**: «trascinane uno per spostarli tutti». Un
231
+ gesto che nessuno annuncia non esiste.
232
+
233
+ *Quante volte e' usata.* Ogni risorsa porta il numero dei suoi usi, formule comprese; a zero
234
+ occorrenze lo dice, ed e' l'unico modo di sapere quali delle venti variabili sono morte.
235
+ Rimuovere una risorsa **usata** chiede conferma e dice quanti riferimenti resterebbero orfani:
236
+ cancellare una variabile non fa sparire nessun arco dal canvas, e senza il numero il danno si
237
+ scopriva alla validazione successiva.
238
+
197
239
  **Copia, incolla, duplica.** `Ctrl`+`C` copia gli elementi selezionati — la selezione del canvas
198
240
  puo' contenerne piu' d'uno (rettangolo, `Ctrl`+`A`) — `Ctrl`+`V` li incolla, `Ctrl`+`D` li duplica in
199
241
  loco; gli stessi comandi stanno nella top bar («⧉» e «⎘») e sul node selezionato («⧉»). I tasti
@@ -222,12 +264,28 @@ Tutto l'incolla e' **un solo passo di annulla**.
222
264
 
223
265
  **Dettaglio dell'elemento.** Con `inspectorMode="dialog"` (predefinito) il form si apre in una
224
266
  finestra sopra il canvas: doppio click sul node, bottone «✎» sul node, comando «Dettaglio»
225
- nella top bar, click su un rilievo nel pannello dei problemi, o creazione di un elemento dalla
226
- palette. Il click singolo **seleziona soltanto**: un click capita anche solo per spostare un
267
+ nella top bar, bottone «✎» (o doppio click) su un rilievo nel pannello dei problemi, un risultato
268
+ della ricerca, o creazione di un elemento dalla palette. Da qualunque di queste strade la **vista si porta
269
+ sull'elemento**: aprire il form giusto lasciando il grafo dov'era, su un flow grande, lascia
270
+ «dove sono» senza risposta. Il click singolo **seleziona soltanto**: un click capita anche solo per spostare un
227
271
  node. La dialog non ha «Annulla» — le modifiche entrano nel documento mentre si digita,
228
272
  esattamente come nel pannello, e tornare indietro e' compito dell'annulla dell'editor. Vive
229
273
  dentro il componente e non in fondo al `body`: la libreria e' innestabile in una pagina
230
- qualsiasi.
274
+ qualsiasi. **Si sposta prendendola per l'intestazione**: configurare un elemento richiede spesso
275
+ di guardare il grafo — quale ramo esce da dove, come si chiama l'elemento accanto — e una finestra
276
+ larga 1400px inchiodata al centro copre esattamente cio' che si deve leggere. Cio' che resta dentro
277
+ il builder e' la **maniglia**, non tutta la finestra: si puo' spingere quasi fuori per sbirciare
278
+ sotto, e riportarla indietro e' sempre possibile. La posizione non si azzera cambiando elemento —
279
+ solo alla riapertura.
280
+
281
+ Nelle **opzioni** di un campo choice il selettore e' un comando e non un campo: si sceglie
282
+ dall'elenco, oppure si scrive il nome e si conferma con **Invio** (`commitOn="enter"` del name
283
+ picker). A emettere per tasto ogni lettera diventerebbe un'opzione a se'.
284
+
285
+ **Le tendine dei picker si chiudono cliccando fuori**, e `Esc` chiude la tendina senza portarsi
286
+ via la dialog. Sul selettore di riferimento, entrare in un record o in un'istanza di classe (il
287
+ `›`) porta i suoi campi **in cima** all'elenco: sotto le radici, e in fondo a una tendina che
288
+ scorre, sembrava che il comando non facesse niente.
231
289
 
232
290
  **Palette.** Costruita da `elementTypes`: nessun tipo e' cablato, e i due non supportati
233
291
  (`Step`, `Experiment`) sono nascosti tramite `isSupported`. L'etichetta del ramo di fault arriva
@@ -524,9 +582,17 @@ versione attiva e' un avviso. Prima questi campi erano `<select>` con un'opzione
524
582
  «(non nel catalogo)» per non perdere il valore, oppure un `datalist` che accettava qualunque
525
583
  cosa in silenzio: il primo non si poteva cercare, il secondo non diceva niente.
526
584
 
527
- **Problemi.** Pannello con filtro per gravita', navigazione all'elemento con un clic,
528
- validazione su pausa di digitazione (debounce 400 ms) e l'avvertenza che l'assenza di rilievi
529
- non e' una garanzia di correttezza.
585
+ **Problemi.** Pannello con filtro per gravita', validazione su pausa di digitazione (debounce
586
+ 400 ms) e l'avvertenza che l'assenza di rilievi
587
+ non e' una garanzia di correttezza. Il `path` del rilievo si mostra **per nome**: il backend lo
588
+ manda come percorso di campi e sugli screen dinamici spesso a indici
589
+ (`fields[1].fields[1].fields[0]`), che e' esatto e inutile perche' per seguirlo si devono contare
590
+ i figli a mano — i nomi li ha il documento, quindi tradurli e' compito dell'editor. Un clic su una
591
+ riga **mostra**: seleziona l'elemento e lo porta al centro della vista, senza aprire niente —
592
+ l'elenco dei problemi si scorre, e un form che si apre a ogni riga copre il grafo che si sta
593
+ leggendo. Ad aprire il form ci sono il bottone «✎» della riga e il doppio clic, che e' la stessa
594
+ coppia di gesti del canvas. Per la stessa
595
+ ragione il clic non si limita ad aprire l'elemento: **seleziona il campo** che il rilievo nomina.
530
596
 
531
597
  **Versioni.** Elenco con stato, «Nuova versione» al posto di «Salva» sulle versioni chiuse,
532
598
  attivazione bloccata finche' ci sono errori, eliminazione dietro una conferma esplicita che
@@ -568,6 +634,31 @@ distingue le due attese di `Suspended` (`isWaitingForEvent` / `isWaitingForStage
568
634
  uno step al posto dell'assegnatario — rifiuto compreso, con la `interviewKey` nuova che sostituisce
569
635
  la vecchia — e mostra traccia e risorse solo in debug, dove riportano anche i dati personali.
570
636
 
637
+ **Riquadri di raggruppamento (§3.6).** Cornici che racchiudono degli elementi per documentarli,
638
+ come i commenti dell'editor a blueprint di Unreal Engine: barra col titolo, testo del commento,
639
+ colore, apri/chiudi, ridimensionamento, e un pannello laterale «Riquadri» per il nome tecnico, il
640
+ commento per intero e l'elenco dei membri. Il runtime non li legge mai — nessun connettore,
641
+ nessuna raggiungibilita' — quindi aggiungerne uno e' l'unica modifica a un flow che con certezza
642
+ non ne cambia il comportamento. Quattro conseguenze, tutte visibili nell'editor:
643
+
644
+ - **il nome sta in uno spazio dei nomi a parte.** Il doppione si cerca fra i riquadri
645
+ (`GROUP_NAME_DUPLICATED`) e non in `usedNames`: un riquadro non e' referenziabile, quindi un
646
+ omonimo di una variabile e' legittimo e segnalarlo sarebbe un falso positivo;
647
+ - **l'appartenenza la dichiara `members`, non la geometria.** La geometria serve a **calcolarla**
648
+ — trascinando un elemento dentro o fuori dalla cornice l'editor riscrive `members` — e a
649
+ spostare i membri quando si sposta il riquadro. Dedurla dai rettangoli a ogni disegno, con un
650
+ auto-layout (coordinate a 0) metterebbe tutti i node in tutti i riquadri;
651
+ - **`width`/`height` a 0 significano «calcolala sui membri»**, quindi il rettangolo disegnato non
652
+ e' quello scritto nel documento. Ridimensionare un riquadro **dichiara** la geometria, ed e'
653
+ come si esce da quel caso;
654
+ - **nessun rilievo su un riquadro blocca l'attivazione.** I tre codici sono avvisi, e un `members`
655
+ che nomina un elemento cancellato e' cio' che resta dopo la cancellazione: l'editor offre di
656
+ ripulirlo con un comando e non lo fa di soppiatto mentre si trascina qualcos'altro.
657
+
658
+ Chiuso, il riquadro resta la sola barra del titolo e **gli elementi restano visibili**: nasconderli
659
+ vorrebbe dire connettori con `display: none`, cioe' geometria 0×0 e archi attaccati nel punto
660
+ sbagliato.
661
+
571
662
  **Import/export.** Export JSON indentato; import via `POST /flows/parse`, che normalizza il
572
663
  documento o lo rifiuta con `InvalidDefinition`.
573
664
 
@@ -597,9 +688,11 @@ src/lib/
597
688
  condition-types.util.ts quali tipi si confrontano, e i numeri in cultura invariante
598
689
  stage-step.util.ts gli step di uno stage: nomi, output non condizionabili
599
690
  screen-field.util.ts l'albero dei campi di uno screen dinamico: percorsi, nomi, mutazioni
691
+ flow-groups.ts i riquadri (§3.6): geometria risolta (anche quando il documento non
692
+ la dichiara) e appartenenza calcolata dai rettangoli
600
693
  ui/
601
694
  flow-builder.component.ts il componente da montare
602
- canvas/ palette/ inspector/ resources/ problems/ versions/ run/ debug/ shared/
695
+ canvas/ palette/ inspector/ resources/ groups/ problems/ versions/ run/ debug/ shared/
603
696
  styles/
604
697
  flow-builder.css variabili del tema, controlli di form, stili degli archi
605
698
  ```