@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 +100 -7
- package/fesm2022/esfaenza-flow-builder.mjs +16510 -14333
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +905 -18
- package/package.json +1 -1
- package/styles/flow-builder.css +19 -0
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,
|
|
226
|
-
|
|
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',
|
|
528
|
-
|
|
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
|
```
|