@esfaenza/dpe-builder 20.0.1
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/fesm2022/esfaenza-dpe-builder.mjs +8711 -0
- package/fesm2022/esfaenza-dpe-builder.mjs.map +1 -0
- package/index.d.ts +2424 -0
- package/package.json +28 -0
- package/styles/dpe-builder.css +222 -0
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@esfaenza/dpe-builder",
|
|
3
|
+
"version": "20.0.1",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/cdk": "^20.2.14",
|
|
6
|
+
"@angular/common": "^20.3.25",
|
|
7
|
+
"@angular/core": "^20.3.25",
|
|
8
|
+
"@foblex/flow": ">=19.0.0",
|
|
9
|
+
"dagre": "^0.8.5",
|
|
10
|
+
"rxjs": "~7.8.0"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"tslib": "^2.3.0"
|
|
14
|
+
},
|
|
15
|
+
"sideEffects": false,
|
|
16
|
+
"description": "Editor visuale delle definizioni DPE: componenti standalone Angular, con tutto il traffico verso il backend dietro un'unica classe astratta (il contratto e' la classe astratta, ADR 0007; il client HTTP e' una sua implementazione opzionale, ADR 0020).",
|
|
17
|
+
"module": "fesm2022/esfaenza-dpe-builder.mjs",
|
|
18
|
+
"typings": "index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
"./package.json": {
|
|
21
|
+
"default": "./package.json"
|
|
22
|
+
},
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./index.d.ts",
|
|
25
|
+
"default": "./fesm2022/esfaenza-dpe-builder.mjs"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Tema dell'editor DPE — da includere negli `styles` dell'applicazione ospite, in
|
|
3
|
+
* quest'ordine:
|
|
4
|
+
*
|
|
5
|
+
* "styles": [
|
|
6
|
+
* "node_modules/@foblex/flow/styles/default.scss",
|
|
7
|
+
* "node_modules/@esfaenza/dpe-builder/styles/dpe-builder.css",
|
|
8
|
+
* "src/styles.css"
|
|
9
|
+
* ]
|
|
10
|
+
*
|
|
11
|
+
* Contiene **soltanto** le due cose che non possono stare nel CSS incapsulato dei componenti:
|
|
12
|
+
*
|
|
13
|
+
* 1. le variabili di tema, cosi' l'app ospite le sovrascrive per integrarsi nel proprio
|
|
14
|
+
* design system senza toccare la libreria (compresi i token `--ff-*` di @foblex/flow,
|
|
15
|
+
* che si ritematizza **cosi'** e non sovrascrivendone le regole: hanno la stessa
|
|
16
|
+
* specificita' delle nostre e chi vince dipenderebbe dall'ordine di caricamento dei
|
|
17
|
+
* fogli nell'host);
|
|
18
|
+
* 2. gli stili degli archi: i path SVG delle connessioni sono creati a runtime da
|
|
19
|
+
* @foblex/flow e non portano l'attributo di scope Angular, quindi un selettore scoped non
|
|
20
|
+
* li raggiunge mai.
|
|
21
|
+
*
|
|
22
|
+
* Tutto il resto e' component-scoped. Se un giorno servisse davvero un controllo condiviso
|
|
23
|
+
* qui, va motivato in commento.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
.dpe-builder,
|
|
27
|
+
.dpe-theme {
|
|
28
|
+
/* Superfici e testo */
|
|
29
|
+
--dpe-surface: #ffffff;
|
|
30
|
+
--dpe-surface-alt: #f7f8fa;
|
|
31
|
+
--dpe-surface-sunken: #eef0f4;
|
|
32
|
+
--dpe-canvas-bg: #f4f5f7;
|
|
33
|
+
--dpe-border: #e2e5eb;
|
|
34
|
+
--dpe-border-strong: #cfd4de;
|
|
35
|
+
--dpe-border-subtle: #eef0f4;
|
|
36
|
+
--dpe-text: #1a1c23;
|
|
37
|
+
--dpe-text-muted: #6b7086;
|
|
38
|
+
--dpe-text-subtle: #98a2b3;
|
|
39
|
+
|
|
40
|
+
/* Accento e stati */
|
|
41
|
+
--dpe-accent: #2f7d8f;
|
|
42
|
+
--dpe-accent-strong: #226270;
|
|
43
|
+
--dpe-accent-contrast: #ffffff;
|
|
44
|
+
--dpe-error: #dc2626;
|
|
45
|
+
--dpe-warning: #b7791f;
|
|
46
|
+
--dpe-success: #22a06b;
|
|
47
|
+
--dpe-info: #3b6fd4;
|
|
48
|
+
|
|
49
|
+
/*
|
|
50
|
+
* Nodo valido ma **non compilabile** (`DPE_NODE_NOT_COMPILABLE`, I10): non e' un errore
|
|
51
|
+
* dell'utente ed e' l'unica distinzione che deve leggersi a colpo d'occhio nel pannello
|
|
52
|
+
* delle diagnostiche. Colore proprio, ne' rosso ne' giallo, per non farlo confondere con
|
|
53
|
+
* qualcosa da correggere.
|
|
54
|
+
*/
|
|
55
|
+
--dpe-not-compilable: #7c5cd6;
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* Colore per **famiglia** di categoria: sorgenti, trasformazioni, scritture, e cio' che il
|
|
59
|
+
* compilatore non traduce in v1. La famiglia si deriva da `isSource`/`isSink`/
|
|
60
|
+
* `isNotCompilableInV1` del catalogo (`core/dpe-node-icons.ts`): nessuna tassonomia nuova.
|
|
61
|
+
*
|
|
62
|
+
* La variante `-soft` e' lo sfondo della pastiglia dell'icona: il tratto usa il colore pieno,
|
|
63
|
+
* cosi' l'icona resta leggibile senza inventare un secondo colore di primo piano per il tema
|
|
64
|
+
* scuro. Sono valori espliciti e non `color-mix` perche' l'ospite deve poterli sovrascrivere
|
|
65
|
+
* uno per uno per entrare nel proprio design system.
|
|
66
|
+
*/
|
|
67
|
+
--dpe-cat-source: #2f7d8f;
|
|
68
|
+
--dpe-cat-source-soft: #dbecf0;
|
|
69
|
+
--dpe-cat-transform: #3b6fd4;
|
|
70
|
+
--dpe-cat-transform-soft: #e2eafb;
|
|
71
|
+
--dpe-cat-sink: #1c8a5c;
|
|
72
|
+
--dpe-cat-sink-soft: #dcf1e8;
|
|
73
|
+
--dpe-cat-uncompilable: #7c5cd6;
|
|
74
|
+
--dpe-cat-uncompilable-soft: #ebe6fa;
|
|
75
|
+
|
|
76
|
+
/* Colori degli archi per tipo di ingresso */
|
|
77
|
+
--dpe-edge-source: #98a2b3;
|
|
78
|
+
--dpe-edge-primary: #2f7d8f;
|
|
79
|
+
--dpe-edge-secondary: #8b5cf6;
|
|
80
|
+
--dpe-edge-append: #22a06b;
|
|
81
|
+
--dpe-edge-broken: #dc2626;
|
|
82
|
+
|
|
83
|
+
/* Scala dei raggi e delle ombre: **una sola**, cosi' pannelli, card dei nodi e dialog
|
|
84
|
+
hanno la stessa morbidezza. */
|
|
85
|
+
--dpe-radius-xs: 6px;
|
|
86
|
+
--dpe-radius-sm: 8px;
|
|
87
|
+
--dpe-radius: 10px;
|
|
88
|
+
--dpe-radius-lg: 12px;
|
|
89
|
+
--dpe-shadow-sm: 0 1px 2px rgb(16 24 40 / 6%);
|
|
90
|
+
--dpe-shadow-md: 0 6px 18px rgb(16 24 40 / 10%);
|
|
91
|
+
--dpe-shadow-lg: 0 18px 44px rgb(16 24 40 / 18%);
|
|
92
|
+
--dpe-font: inherit;
|
|
93
|
+
--dpe-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
* I token di @foblex/flow allineati ai nostri: canvas, sfondo, minimappa e spessore degli
|
|
97
|
+
* archi li disegna la libreria, e questo e' il punto previsto per ritematizzarli.
|
|
98
|
+
*/
|
|
99
|
+
--ff-canvas-background-color: var(--dpe-canvas-bg);
|
|
100
|
+
--ff-flow-background-color: var(--dpe-canvas-bg);
|
|
101
|
+
--ff-background-dot-color: color-mix(in srgb, var(--dpe-text-subtle) 40%, transparent);
|
|
102
|
+
--ff-connection-width: 2px;
|
|
103
|
+
--ff-connection-content-background-color: var(--dpe-surface);
|
|
104
|
+
--ff-connection-content-border-color: var(--dpe-border);
|
|
105
|
+
--ff-connection-content-color: var(--dpe-text-muted);
|
|
106
|
+
--ff-minimap-background-color: var(--dpe-surface);
|
|
107
|
+
--ff-minimap-border-color: var(--dpe-border);
|
|
108
|
+
--ff-minimap-node-color: var(--dpe-border-strong);
|
|
109
|
+
--ff-minimap-view-color: color-mix(in srgb, var(--dpe-accent) 12%, transparent);
|
|
110
|
+
--ff-minimap-view-border-color: var(--dpe-accent);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/*
|
|
114
|
+
* Variante scura: si attiva con `data-dpe-theme="dark"` sul contenitore e ridefinisce i **soli
|
|
115
|
+
* token**.
|
|
116
|
+
*
|
|
117
|
+
* I selettori sono tre e non uno per una ragione di cascata, non di gusto: se l'attributo sta su
|
|
118
|
+
* un **antenato** dell'editor (il caso normale: l'ospite lo mette sul proprio contenitore), la
|
|
119
|
+
* regola `.dpe-builder` qui sopra riassegna i token chiari **sull'elemento stesso** e vince sui
|
|
120
|
+
* valori scuri ereditati. Il risultato e' un tema a metà — testo chiaro su superfici chiare, cioe'
|
|
121
|
+
* illeggibile. `[data-dpe-theme='dark'] .dpe-builder` ha specificita' (0,2,0) e batte `.dpe-builder`
|
|
122
|
+
* (0,1,0); l'ultimo selettore copre il caso in cui l'attributo sia sulla radice dell'editor.
|
|
123
|
+
*/
|
|
124
|
+
[data-dpe-theme='dark'],
|
|
125
|
+
[data-dpe-theme='dark'] .dpe-builder,
|
|
126
|
+
[data-dpe-theme='dark'] .dpe-theme,
|
|
127
|
+
.dpe-builder[data-dpe-theme='dark'],
|
|
128
|
+
.dpe-theme[data-dpe-theme='dark'] {
|
|
129
|
+
--dpe-surface: #151921;
|
|
130
|
+
--dpe-surface-alt: #1c2029;
|
|
131
|
+
--dpe-surface-sunken: #232830;
|
|
132
|
+
--dpe-canvas-bg: #0c0e14;
|
|
133
|
+
--dpe-border: #2d323c;
|
|
134
|
+
--dpe-border-strong: #3b414d;
|
|
135
|
+
--dpe-border-subtle: #232830;
|
|
136
|
+
--dpe-text: #e8eaf0;
|
|
137
|
+
--dpe-text-muted: #8b90a0;
|
|
138
|
+
--dpe-text-subtle: #6b7684;
|
|
139
|
+
--dpe-accent: #5fb3c4;
|
|
140
|
+
--dpe-accent-strong: #7ac6d6;
|
|
141
|
+
--dpe-accent-contrast: #0c0e14;
|
|
142
|
+
--dpe-error: #ef6a5f;
|
|
143
|
+
--dpe-warning: #d9a13c;
|
|
144
|
+
--dpe-success: #63b57f;
|
|
145
|
+
--dpe-info: #7ea6f0;
|
|
146
|
+
--dpe-not-compilable: #a78bfa;
|
|
147
|
+
/*
|
|
148
|
+
* Famiglie in tema scuro: tratto piu' chiaro e pastiglia scura. Le `-soft` chiare del tema
|
|
149
|
+
* chiaro qui diventerebbero macchie luminose sulla card, cioe' l'icona pesarebbe piu' del
|
|
150
|
+
* titolo.
|
|
151
|
+
*/
|
|
152
|
+
--dpe-cat-source: #5fb3c4;
|
|
153
|
+
--dpe-cat-source-soft: #1b3038;
|
|
154
|
+
--dpe-cat-transform: #7ea6f0;
|
|
155
|
+
--dpe-cat-transform-soft: #1c2740;
|
|
156
|
+
--dpe-cat-sink: #63b57f;
|
|
157
|
+
--dpe-cat-sink-soft: #16301f;
|
|
158
|
+
--dpe-cat-uncompilable: #a78bfa;
|
|
159
|
+
--dpe-cat-uncompilable-soft: #241f3d;
|
|
160
|
+
--dpe-edge-source: #6b7684;
|
|
161
|
+
--dpe-shadow-sm: 0 1px 2px rgb(0 0 0 / 40%);
|
|
162
|
+
--dpe-shadow-md: 0 6px 18px rgb(0 0 0 / 45%);
|
|
163
|
+
--dpe-shadow-lg: 0 18px 44px rgb(0 0 0 / 55%);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* ---------------------------------------------------------------- archi */
|
|
167
|
+
/*
|
|
168
|
+
* Gli archi si colorano impostando le custom properties del tema di @foblex/flow, non
|
|
169
|
+
* sovrascrivendone le regole: `f-flow .f-connection .f-connection-path` ha la stessa
|
|
170
|
+
* specificita' dei nostri selettori e l'esito dipenderebbe dall'ordine dei fogli di stile
|
|
171
|
+
* nell'app ospite. Le variabili invece ereditano dall'elemento della connessione fino al path
|
|
172
|
+
* e al marker, e valgono qualunque sia l'ordine.
|
|
173
|
+
*
|
|
174
|
+
* La classe la mette il canvas sull'arco, in base allo **slot** di destinazione: la primaria
|
|
175
|
+
* e la secondaria di un join vanno distinte a vista, altrimenti l'unico modo di sapere quale
|
|
176
|
+
* lato e' quale e' aprire l'ispettore.
|
|
177
|
+
*/
|
|
178
|
+
|
|
179
|
+
.dpe-edge {
|
|
180
|
+
--ff-connection-color: var(--dpe-edge-source, #98a2b3);
|
|
181
|
+
--ff-marker-color: var(--dpe-edge-source, #98a2b3);
|
|
182
|
+
--ff-connection-selected-color: var(--dpe-accent, #2f7d8f);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.dpe-edge--primary {
|
|
186
|
+
--ff-connection-color: var(--dpe-edge-primary, #2f7d8f);
|
|
187
|
+
--ff-marker-color: var(--dpe-edge-primary, #2f7d8f);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.dpe-edge--secondary {
|
|
191
|
+
--ff-connection-color: var(--dpe-edge-secondary, #8b5cf6);
|
|
192
|
+
--ff-marker-color: var(--dpe-edge-secondary, #8b5cf6);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.dpe-edge--sources {
|
|
196
|
+
--ff-connection-color: var(--dpe-edge-append, #22a06b);
|
|
197
|
+
--ff-marker-color: var(--dpe-edge-append, #22a06b);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/*
|
|
201
|
+
* Arco con un capo che non corrisponde a nessun nodo: si **mostra**, perche' e' cio' che il
|
|
202
|
+
* documento dice. La diagnostica che lo qualifica arriva dal backend.
|
|
203
|
+
*/
|
|
204
|
+
.dpe-edge--broken {
|
|
205
|
+
--ff-connection-color: var(--dpe-edge-broken, #dc2626);
|
|
206
|
+
--ff-marker-color: var(--dpe-edge-broken, #dc2626);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.dpe-edge--creating {
|
|
210
|
+
--ff-connection-color: var(--dpe-accent, #2f7d8f);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/*
|
|
214
|
+
* Il tratteggio non e' esprimibile con una variabile del tema, quindi qui serve una regola.
|
|
215
|
+
* Il prefisso `f-flow` pareggia la specificita' di `f-flow .f-connection .f-connection-path`
|
|
216
|
+
* e, arrivando dopo nel foglio, vince — ma riguarda solo `stroke-dasharray`, che il tema di
|
|
217
|
+
* @foblex/flow non imposta: nessun conflitto reale.
|
|
218
|
+
*/
|
|
219
|
+
f-flow .dpe-edge--broken .f-connection-path,
|
|
220
|
+
f-flow .dpe-edge--creating .f-connection-path {
|
|
221
|
+
stroke-dasharray: 6 4;
|
|
222
|
+
}
|