@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/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
+ }