@massimo-cassandro/minimo 1.41.4 → 1.41.5
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 +12 -12
- package/charts/src/node-helpers/create-svg-canvas-node.mjs +2 -2
- package/charts/src/node-helpers/svg-text-to-path.js +9 -9
- package/charts/src/rating-display/index.js +1 -1
- package/charts/src/rating-display/ratindDisplayAnimation.js +3 -3
- package/design-tokens/README.md +2 -2
- package/design-tokens/_src/_readme.md +26 -26
- package/dev-tools/README.md +16 -16
- package/dev-tools/create-favicons/README.md +31 -31
- package/dev-tools/create-favicons/src/create-ico.mjs +2 -2
- package/dev-tools/create-favicons/src/default-params.mjs +1 -1
- package/dev-tools/create-favicons/src/init.mjs +1 -1
- package/dev-tools/design-tokens-builder/README.md +102 -102
- package/dev-tools/design-tokens-builder/build-tokens-src/build-source-modes.mjs +85 -73
- package/dev-tools/design-tokens-builder/build-tokens-src/config.mjs +109 -85
- package/dev-tools/design-tokens-builder/build-tokens-src/formats/css.mjs +113 -90
- package/dev-tools/design-tokens-builder/build-tokens-src/formats/json.mjs +107 -95
- package/dev-tools/design-tokens-builder/build-tokens-src/legacy-tokens-parser.mjs +71 -64
- package/dev-tools/design-tokens-builder/build-tokens-src/light-dark.mjs +75 -65
- package/dev-tools/design-tokens-builder/build-tokens-src/merge-css.mjs +113 -102
- package/dev-tools/design-tokens-builder/build-tokens-src/platforms.mjs +36 -30
- package/dev-tools/design-tokens-builder/build-tokens-src/resolve-source-paths.mjs +15 -13
- package/dev-tools/design-tokens-builder/build-tokens-src/source-prefixes.mjs +44 -42
- package/dev-tools/design-tokens-builder/build-tokens-src/source-transforms.mjs +89 -83
- package/dev-tools/design-tokens-builder/build-tokens-src/token-rename-parser.mjs +99 -86
- package/dev-tools/design-tokens-builder/build-tokens-src/transforms.mjs +64 -48
- package/dev-tools/design-tokens-builder/build-tokens.mjs +80 -68
- package/dev-tools/design-tokens-builder/check-unresolved-custom-props.mjs +103 -77
- package/dev-tools/design-tokens-builder/tokens-config-sample.mjs +275 -238
- package/dev-tools/find-orphan-css-classes/find-orphan-css-classes.mjs +2 -2
- package/dev-tools/starter-kit/source_files/app/CLAUDE.md +4 -2
- package/dev-tools/starter-kit/source_files/app/{css/index.css → index.css} +2 -2
- package/dev-tools/starter-kit/source_files/app/index.js +1 -1
- package/dev-tools/starter-kit/source_files/root/_sf/controller/ImgViewerController.php +3 -3
- package/dev-tools/starter-kit/source_files/root/_sf/controller/ViewerController.php +2 -2
- package/dev-tools/starter-kit/source_files/root/stylelint.config.mjs +1 -1
- package/dev-tools/starter-kit/source_files/root/webpack-config-modules/css-rules.mjs +1 -1
- package/dev-tools/stylelint-config/README.md +7 -7
- package/dev-tools/svg-icons-tools/README.md +32 -32
- package/dev-tools/svg-icons-tools/src/config-manager.mjs +1 -1
- package/dev-tools/svg-icons-tools/src/default-config.mjs +118 -118
- package/dev-tools/svg-icons-tools/src/jsx-icon-file-builder.mjs +24 -24
- package/dev-tools/svg-icons-tools/src/parse-svg-filename.mjs +3 -3
- package/dev-tools/svg-icons-tools/src/parse-svg-files.mjs +1 -1
- package/dev-tools/svg-icons-tools/src/parse-svg-markup.mjs +4 -4
- package/dev-tools/svg-icons-tools/src/svg-to-jsx.mjs +2 -2
- package/dev-tools/svg-icons-tools/src/svg-to-optimized.mjs +2 -2
- package/dev-tools/svg-icons-tools/src/svg-to-symbols.mjs +2 -2
- package/dev-tools/upd@m/README.md +1 -1
- package/dev-tools/upd@m/index.mjs +1 -1
- package/dev-tools/update-version/README.md +9 -9
- package/package.json +1 -1
- package/snippets/unsplash-browser-app/README.md +1 -1
- package/snippets/unsplash-browser-app/unsplash-utilities.js +9 -9
- package/src/components/autocomplete/README.md +3 -3
- package/src/components/autocomplete/autocomplete-engine.js +75 -63
- package/src/components/autocomplete/check-autocomplete.js +3 -3
- package/src/components/dismiss-alerts.js +3 -3
- package/src/components/form-reset-submit.js +6 -6
- package/src/components/inner-nav/inner-nav.js +2 -2
- package/src/components/modal-alert/modal-alert.js +67 -65
- package/src/components/modal-alert/modal-alert.minimo.tokens.mjs +1 -1
- package/src/components/modal-popup/modal-popup.js +56 -56
- package/src/components/overlay/overlay.js +3 -3
- package/src/components/sf-macro/readme.md +1 -1
- package/src/components/sf-macro/sf-macro.js +27 -23
- package/src/components/slide-up-down-toggle/slide-up-down-toggle.js +83 -79
- package/src/components/slide-up-down-toggle/slide-up-down-toggle.module.css +44 -44
- package/src/components/snackbar/snackbar.js +19 -19
- package/src/components/spinner/spinner.js +3 -3
- package/src/components/unsplash-page/README.md +8 -8
- package/src/components/unsplash-page/fetch-unsplash-data.js +3 -3
- package/src/components/unsplash-page/unsplash-page.js +33 -33
- package/src/components/unsplash-page/unsplash-page.module.css +1 -1
- package/src/css/alerts.css +2 -2
- package/src/css/forms/forms.css +4 -4
- package/src/css/forms/validation.css +1 -1
- package/src/css/margin-padding-media.css +4 -4
- package/src/css/margin-padding.css +4 -4
- package/src/css/reset.css +11 -11
- package/src/icons/read-me.md +1 -1
- package/src/minimo.css +3 -3
- package/src/utilities/better-text-with-places.js +22 -22
- package/src/utilities/better-text.js +42 -35
- package/src/utilities/classnames.js +8 -8
- package/src/utilities/cookies.js +6 -6
- package/src/utilities/create-id.js +3 -3
- package/src/utilities/disable-btns-on-submit.js +2 -2
- package/src/utilities/dom-builder/dom-builder.js +89 -86
- package/src/utilities/dom-builder/domBuilderBasicSetup.js +9 -9
- package/src/utilities/dom-builder/parseDomString.js +23 -23
- package/src/utilities/dom-builder-helpers/README.md +2 -2
- package/src/utilities/dom-builder-helpers/form-tags.js +100 -100
- package/src/utilities/dom-builder-helpers/picture-tag.js +39 -39
- package/src/utilities/enable-submit-btns.js +1 -1
- package/src/utilities/escape-html.js +2 -2
- package/src/utilities/generate-pwd.js +4 -4
- package/src/utilities/linked-dates.js +13 -13
- package/src/utilities/parse-file-size.js +6 -6
- package/src/utilities/random-id.js +3 -3
- package/src/utilities/relative-date.js +40 -40
- package/src/utilities/sentence-case.js +1 -1
- package/src/utilities/strip-tags.js +1 -1
- package/src/utilities/title-case.js +1 -1
- package/src/utilities/truncate-string.js +5 -5
- package/src/utilities/validation-error-class.js +12 -12
- package/src/web-components/json-table/json-table-component.js +123 -121
- package/src/web-components/json-table/json-table-component.module.css +6 -6
- package/src/web-components/json-table/json-table.minimo.tokens.mjs +6 -6
- package/src/web-components/json-table/readme.md +72 -108
- package/src/web-components/json-table/src/cell-content.js +25 -25
- package/src/web-components/json-table/src/content-utils.js +21 -21
- package/src/web-components/json-table/src/data-types.js +32 -32
- package/src/web-components/json-table/src/defaults.js +230 -191
- package/src/web-components/json-table/src/get-data.js +55 -38
- package/src/web-components/json-table/src/icons.js +17 -17
- package/src/web-components/json-table/src/info-section.js +18 -18
- package/src/web-components/json-table/src/main-builder.js +45 -45
- package/src/web-components/json-table/src/pagination.js +32 -32
- package/src/web-components/json-table/src/parse-cols.js +18 -18
- package/src/web-components/json-table/src/parse-rows.js +17 -17
- package/src/web-components/json-table/src/resolve-params.js +53 -41
- package/src/web-components/json-table/src/search.js +13 -13
- package/src/web-components/json-table/src/sorting.js +20 -20
- package/src/web-components/json-table/src/table-body.js +13 -13
- package/src/web-components/json-table/src/table-builder.js +34 -34
- package/src/web-components/json-table/src/table-tfoot.js +8 -8
- package/src/web-components/json-table/src/table-thead.js +21 -21
- package/src/web-components/json-table/src/update-info.js +11 -11
- package/types/classes.d.ts +2 -2
- package/types/global.d.ts +18 -12
|
@@ -1,33 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
1
|
+
/*
|
|
2
|
+
build-tokens-src/build-source-modes.mjs
|
|
3
|
+
Percorso di build alternativo usato quando la config del progetto imposta `sourceModes`
|
|
4
|
+
(vedi config.mjs) al posto di un singolo array `source` — tipicamente per una
|
|
5
|
+
suddivisione light/dark delle custom properties.
|
|
6
|
+
|
|
7
|
+
Per ogni modalità viene costruita un'istanza separata di StyleDictionary a partire
|
|
8
|
+
dall'array `source` di quella modalità. I blocchi CSS generati `<selector> { ... }`
|
|
9
|
+
(selector: customPropsSelector, default ':root' — vedi config.mjs) vengono poi
|
|
10
|
+
composti in un unico destFile:
|
|
11
|
+
- il blocco della modalità base resta una semplice regola `<selector> { ... }`, con
|
|
12
|
+
una dichiarazione `color-scheme: <tutte le modalità unite>;` anteposta (ad es.
|
|
13
|
+
"light dark")
|
|
14
|
+
- il blocco di ogni altra modalità viene racchiuso in
|
|
15
|
+
`@media (prefers-color-scheme: <modalità>) { <selector> { ... } }`, con una
|
|
16
|
+
dichiarazione `color-scheme: <modalità>;` anteposta
|
|
17
|
+
customPropsGroups, mergeCustomProps e pxToRem si applicano per modalità, esattamente come
|
|
18
|
+
nella build a sorgente singola. addLayer (se impostato) racchiude l'intero risultato
|
|
19
|
+
composto in un unico `@layer`, anziché uno per modalità.
|
|
20
|
+
|
|
21
|
+
Quando sourceModes definisce sia una chiave `light` sia una `dark` e
|
|
22
|
+
useLightDarkFunc è true (default), le custom properties condivise da entrambe vengono
|
|
23
|
+
riconciliate in un'unica dichiarazione `light-dark()` invece di essere divise
|
|
24
|
+
tra il blocco base e una regola `@media (prefers-color-scheme: dark)` —
|
|
25
|
+
vedi light-dark.mjs.
|
|
26
|
+
|
|
27
|
+
I token JSON (se jsonBuildPath è impostato) vengono prodotti per modalità: un set di
|
|
28
|
+
file per modalità, con `-<modalità>` aggiunto a ogni nome di file (vedi
|
|
29
|
+
buildJsonFiles() in formats/json.mjs), ad es. "tokens-light.jsonc" /
|
|
30
|
+
"tokens-dark.jsonc", oppure "size-light.jsonc" / "size-dark.jsonc" in
|
|
31
|
+
modalità multi-file (jsonDestFile: null).
|
|
32
|
+
*/
|
|
31
33
|
|
|
32
34
|
import StyleDictionary from 'style-dictionary';
|
|
33
35
|
import * as path from 'node:path';
|
|
@@ -40,22 +42,22 @@ import { applyLightDarkFunc } from './light-dark.mjs';
|
|
|
40
42
|
|
|
41
43
|
/**
|
|
42
44
|
* @param {object} opts
|
|
43
|
-
* @param {Record<string,string[]>} opts.sourceModes
|
|
44
|
-
* @param {string} opts.baseMode
|
|
45
|
-
* @param {string} opts.buildPath
|
|
46
|
-
* @param {string} opts.destFile CSS output
|
|
47
|
-
* @param {string|null} opts.jsonBuildPath
|
|
48
|
-
* @param {string|null} opts.jsonDestFile
|
|
49
|
-
* @param {'json'|'jsonc'} opts.jsonFormat
|
|
50
|
-
* @param {'keep'|'calc'|'resolve'} opts.jsonExpression
|
|
45
|
+
* @param {Record<string,string[]>} opts.sourceModes Percorsi sorgente risolti per modalità (vedi config.mjs)
|
|
46
|
+
* @param {string} opts.baseMode Modalità il cui blocco resta una regola `<selector> { ... }` di primo livello
|
|
47
|
+
* @param {string} opts.buildPath Percorso assoluto della directory di output CSS
|
|
48
|
+
* @param {string} opts.destFile Nome del file CSS di output
|
|
49
|
+
* @param {string|null} opts.jsonBuildPath Percorso assoluto dell'output JSON (null = disattivato)
|
|
50
|
+
* @param {string|null} opts.jsonDestFile Nome base del file JSON aggregato; null = un file per sorgente
|
|
51
|
+
* @param {'json'|'jsonc'} opts.jsonFormat Formato di output dei file JSON
|
|
52
|
+
* @param {'keep'|'calc'|'resolve'} opts.jsonExpression Come gestire le espressioni matematiche nei token dimension
|
|
51
53
|
* @param {{name:string,prefixes:string[]}[]} opts.customPropsGroups
|
|
52
54
|
* @param {boolean} opts.pxToRem
|
|
53
55
|
* @param {string|null} opts.addLayer
|
|
54
|
-
* @param {boolean|(string|RegExp)[]} opts.mergeCustomProps true =
|
|
55
|
-
* @param {boolean} opts.useLightDarkFunc
|
|
56
|
-
* @param {string} opts.customPropsSelector CSS
|
|
57
|
-
* @param {string[]} opts.parserNames Style Dictionary
|
|
58
|
-
* @param {string[]} opts.preprocessorNames Style Dictionary
|
|
56
|
+
* @param {boolean|(string|RegExp)[]} opts.mergeCustomProps true = unisce tutte le sorgenti, array = solo i file token sorgente corrispondenti
|
|
57
|
+
* @param {boolean} opts.useLightDarkFunc riconcilia le proprietà `light`/`dark` condivise in chiamate `light-dark()` (default: true — vedi config.mjs e light-dark.mjs). Ignorato a meno che sourceModes definisca sia una chiave `light` sia una `dark`.
|
|
58
|
+
* @param {string} opts.customPropsSelector selettore CSS che racchiude i blocchi generati (default: ':root' — vedi config.mjs)
|
|
59
|
+
* @param {string[]} opts.parserNames nomi dei parser di Style Dictionary a cui far aderire ogni istanza (bridge legacy, più il parser di rinomina dei token quando almeno una sorgente ha un `transform` — vedi build-tokens.mjs)
|
|
60
|
+
* @param {string[]} opts.preprocessorNames nomi dei preprocessor di Style Dictionary a cui far aderire ogni istanza (il riscrittore dei riferimenti di rinomina dei token, quando almeno una sorgente ha un `transform` — vedi build-tokens.mjs)
|
|
59
61
|
* @returns {Promise<{cssDestPath: string, totalCustomProps: number, jsonFilesByMode: Record<string, object[]>}>}
|
|
60
62
|
*/
|
|
61
63
|
export const buildSourceModes = async ({
|
|
@@ -78,8 +80,8 @@ export const buildSourceModes = async ({
|
|
|
78
80
|
}) => {
|
|
79
81
|
const modeNames = Object.keys(sourceModes);
|
|
80
82
|
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
+
// Legge il destFile preesistente (se c'è) PRIMA che venga eseguita qualsiasi istanza
|
|
84
|
+
// di Style Dictionary, dato che la prima a scrivere lo sovrascriverebbe.
|
|
83
85
|
if (mergeCustomProps) {
|
|
84
86
|
loadExistingCustomPropsScoped(path.join(buildPath, destFile), baseMode, mergeCustomProps, customPropsSelector);
|
|
85
87
|
}
|
|
@@ -90,12 +92,14 @@ export const buildSourceModes = async ({
|
|
|
90
92
|
|
|
91
93
|
/** @type {Record<string,string>} */
|
|
92
94
|
const modeBlocks = {};
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
/*
|
|
96
|
+
Conteggio delle custom props per modalità e mappa strutturata delle props (nome -> coda),
|
|
97
|
+
catturati subito dopo ogni chiamata al format per modalità (customPropsCount e
|
|
98
|
+
lastFinalProps sono live binding, aggiornati in modo sincrono dalla funzione
|
|
99
|
+
format — vedi formats/css.mjs). Conservati per modalità (invece di sommarli
|
|
100
|
+
al volo) così che applyLightDarkFunc() possa poi sovrascrivere solo le voci che
|
|
101
|
+
tocca davvero (light, dark e la modalità base).
|
|
102
|
+
*/
|
|
99
103
|
/** @type {Record<string,number>} */
|
|
100
104
|
const modeCounts = {};
|
|
101
105
|
/** @type {Record<string, Record<string,string>>} */
|
|
@@ -104,12 +108,14 @@ export const buildSourceModes = async ({
|
|
|
104
108
|
const jsonFilesByMode = {};
|
|
105
109
|
|
|
106
110
|
for (const mode of modeNames) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
/*
|
|
112
|
+
Le modalità non base possono referenziare i token della modalità base (sempre definiti, dato che
|
|
113
|
+
il blocco base è il `<selector>` di primo livello incondizionato). Le sorgenti
|
|
114
|
+
base vengono passate come `include`: disponibili per la risoluzione dei riferimenti
|
|
115
|
+
ma contrassegnate isSource: false, e saltate dai format css/json.
|
|
116
|
+
Solo la modalità base, volutamente: un riferimento a un token che esiste solo in
|
|
117
|
+
un altro blocco `@media` verrebbe compilato senza errori ma risulterebbe non definito a runtime.
|
|
118
|
+
*/
|
|
113
119
|
const include = mode === baseMode ? [] : sourceModes[baseMode];
|
|
114
120
|
|
|
115
121
|
const sd = new StyleDictionary({
|
|
@@ -138,12 +144,12 @@ export const buildSourceModes = async ({
|
|
|
138
144
|
},
|
|
139
145
|
});
|
|
140
146
|
|
|
141
|
-
// formatPlatform()
|
|
142
|
-
//
|
|
147
|
+
// formatPlatform() esegue la funzione format senza scrivere su disco —
|
|
148
|
+
// il file composto multi-modalità viene scritto una sola volta, alla fine, qui sotto.
|
|
143
149
|
const [formatted] = await sd.formatPlatform('css');
|
|
144
150
|
modeBlocks[mode] = /** @type {string} */ (formatted.output);
|
|
145
|
-
// customPropsCount / lastFinalProps
|
|
146
|
-
//
|
|
151
|
+
// customPropsCount / lastFinalProps sono live binding, aggiornati in modo
|
|
152
|
+
// sincrono dalla funzione format chiamata qui sopra (vedi formats/css.mjs).
|
|
147
153
|
modeCounts[mode] = customPropsCount;
|
|
148
154
|
modeFinalProps[mode] = lastFinalProps;
|
|
149
155
|
|
|
@@ -170,10 +176,12 @@ export const buildSourceModes = async ({
|
|
|
170
176
|
}
|
|
171
177
|
}
|
|
172
178
|
|
|
173
|
-
// ── light-dark()
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
179
|
+
// ── Riconciliazione light-dark() (solo modalità light/dark) ──────────────────
|
|
180
|
+
/*
|
|
181
|
+
Ricostruisce solo i blocchi `light`, `dark` e della modalità base a partire dalle mappe
|
|
182
|
+
di props modificate — vedi light-dark.mjs. Non fa nulla (restituisce null) a meno che sourceModes
|
|
183
|
+
definisca sia una chiave `light` sia una `dark`.
|
|
184
|
+
*/
|
|
177
185
|
if (useLightDarkFunc) {
|
|
178
186
|
const reconciled = applyLightDarkFunc({
|
|
179
187
|
modeFinalProps,
|
|
@@ -190,11 +198,13 @@ export const buildSourceModes = async ({
|
|
|
190
198
|
|
|
191
199
|
const totalCustomProps = Object.values(modeCounts).reduce((sum, n) => sum + n, 0);
|
|
192
200
|
|
|
193
|
-
// ──
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
201
|
+
// ── Composizione del CSS finale ────────────────────────────────────────────────
|
|
202
|
+
/*
|
|
203
|
+
Una modalità rimasta senza alcuna custom property — tipicamente una modalità `light`/`dark`
|
|
204
|
+
completamente assorbita da applyLightDarkFunc() nelle dichiarazioni light-dark()
|
|
205
|
+
della modalità base — non ottiene alcun blocco `@media`, invece di
|
|
206
|
+
un blocco vuoto (ma innocuo).
|
|
207
|
+
*/
|
|
198
208
|
const otherModes = modeNames.filter((mode) => mode !== baseMode && modeCounts[mode] > 0);
|
|
199
209
|
|
|
200
210
|
let composed = modeBlocks[baseMode];
|
|
@@ -202,9 +212,11 @@ export const buildSourceModes = async ({
|
|
|
202
212
|
composed += `\n@media (prefers-color-scheme: ${mode}) {\n${modeBlocks[mode]}}\n`;
|
|
203
213
|
}
|
|
204
214
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
215
|
+
/*
|
|
216
|
+
addLayer racchiude l'intero risultato composto una sola volta, anziché una volta per
|
|
217
|
+
modalità. L'indentazione è lasciata al passaggio di fix di stylelint (eseguito subito dopo la
|
|
218
|
+
build), come nella build a sorgente singola.
|
|
219
|
+
*/
|
|
208
220
|
const finalCss = addLayer
|
|
209
221
|
? `@layer ${addLayer} {\n\n${composed}}\n`
|
|
210
222
|
: composed;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
/*
|
|
3
|
+
build-tokens-src/config.mjs
|
|
4
|
+
Legge il flag --config da argv, importa il file di configurazione del progetto,
|
|
5
|
+
risolve tutti i percorsi e li esporta per build-tokens.mjs.
|
|
6
|
+
|
|
7
|
+
Tenere questa logica separata dal punto di ingresso ne facilita il test
|
|
8
|
+
e il riutilizzo in altri script.
|
|
9
|
+
*/
|
|
8
10
|
|
|
9
11
|
/* globals process */
|
|
10
12
|
|
|
@@ -13,7 +15,7 @@ import { pathToFileURL } from 'node:url';
|
|
|
13
15
|
import { splitSourceEntries } from './source-prefixes.mjs';
|
|
14
16
|
|
|
15
17
|
// ---------------------------------------------------------------------------
|
|
16
|
-
//
|
|
18
|
+
// Legge il flag --config
|
|
17
19
|
// ---------------------------------------------------------------------------
|
|
18
20
|
const args = process.argv.slice(2);
|
|
19
21
|
const configFlagIndex = args.indexOf('--config');
|
|
@@ -31,64 +33,74 @@ export const configAbsPath = path.resolve(process.cwd(), configArgPath);
|
|
|
31
33
|
export const configDir = path.dirname(configAbsPath);
|
|
32
34
|
|
|
33
35
|
// ---------------------------------------------------------------------------
|
|
34
|
-
//
|
|
36
|
+
// Importa la config del progetto
|
|
35
37
|
// ---------------------------------------------------------------------------
|
|
36
38
|
const buildConfig = (await import(pathToFileURL(configAbsPath).href)).default;
|
|
37
39
|
|
|
38
|
-
// Helper:
|
|
39
|
-
//
|
|
40
|
+
// Helper: risolve un percorso relativo alla directory della config.
|
|
41
|
+
// Lascia invariati i percorsi già assoluti.
|
|
40
42
|
/** @param {string} p */
|
|
41
43
|
const resolveFromConfig = (p) => path.resolve(configDir, p);
|
|
42
44
|
|
|
43
45
|
// ---------------------------------------------------------------------------
|
|
44
|
-
//
|
|
46
|
+
// Risoluzione dei percorsi
|
|
45
47
|
// ---------------------------------------------------------------------------
|
|
46
48
|
|
|
47
|
-
// CSS
|
|
49
|
+
// Output CSS
|
|
48
50
|
export const buildPath = resolveFromConfig(buildConfig.buildPath);
|
|
49
51
|
export const destFile = buildConfig.destFile;
|
|
50
52
|
|
|
51
53
|
// Stylelint
|
|
52
54
|
export const stylelintConfigPath = resolveFromConfig(buildConfig.stylelintConfigPath);
|
|
53
55
|
|
|
54
|
-
// JSON — platform
|
|
56
|
+
// JSON — la platform è attiva solo se jsonBuildPath è impostato nella config
|
|
55
57
|
const jsonBuildPathRaw = buildConfig.jsonBuildPath ?? null;
|
|
56
58
|
export const jsonBuildPath = jsonBuildPathRaw ? resolveFromConfig(jsonBuildPathRaw) : null;
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
/*
|
|
61
|
+
jsonDestFile: nome base (senza estensione) del file aggregato di output.
|
|
62
|
+
null → un file per sorgente (replica la struttura dei sorgenti)
|
|
63
|
+
string → singolo file aggregato (ad es. 'tokens' → 'tokens.jsonc')
|
|
64
|
+
L'estensione viene aggiunta automaticamente in base a jsonFormat.
|
|
65
|
+
*/
|
|
62
66
|
export const jsonDestFile = buildConfig.jsonDestFile ?? null;
|
|
63
67
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
/*
|
|
69
|
+
jsonFormat: controlla il formato di output dei file JSON dei token generati.
|
|
70
|
+
'jsonc' → estensione .jsonc + intestazione che segnala il file generato
|
|
71
|
+
'json' → .json semplice, senza intestazione
|
|
72
|
+
Qualsiasi valore diverso da 'jsonc' viene normalizzato a 'json'.
|
|
73
|
+
*/
|
|
68
74
|
export const jsonFormat = buildConfig.jsonFormat === 'jsonc' ? 'jsonc' : 'json';
|
|
69
75
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
76
|
+
/*
|
|
77
|
+
jsonExpression: controlla come vengono gestite le espressioni matematiche nei valori dei token dimension.
|
|
78
|
+
'keep' (default) — scrive l'espressione così com'è
|
|
79
|
+
'calc' — la racchiude in calc() CSS
|
|
80
|
+
'resolve' — la valuta numericamente; unità ereditata dal primo token referenziato
|
|
81
|
+
*/
|
|
74
82
|
const VALID_EXPR_MODES = ['keep', 'calc', 'resolve'];
|
|
75
83
|
export const jsonExpression = VALID_EXPR_MODES.includes(buildConfig.jsonExpression)
|
|
76
84
|
? buildConfig.jsonExpression
|
|
77
85
|
: 'resolve';
|
|
78
86
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
87
|
+
/*
|
|
88
|
+
pxToRem: se true (default), i valori dei token dimension espressi in px vengono
|
|
89
|
+
convertiti in rem nel CSS generato (vedi la transform size/pxToRem-smart
|
|
90
|
+
in build-tokens-src/transforms.mjs). I valori in altre unità
|
|
91
|
+
(em, %, vh, dvw, ...) non vengono mai toccati, indipendentemente da questa opzione.
|
|
92
|
+
*/
|
|
83
93
|
export const pxToRem = buildConfig.pxToRem !== false;
|
|
84
94
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
95
|
+
/*
|
|
96
|
+
mergeCustomProps: se true, le custom properties già presenti nel file CSS di
|
|
97
|
+
destinazione hanno priorità su quelle generate da questa build (vedi
|
|
98
|
+
build-tokens-src/merge-css.mjs). Può essere anche un array di stringhe/RegExp:
|
|
99
|
+
vengono unite solo le proprietà generate dai file token sorgente che corrispondono a una
|
|
100
|
+
delle sue voci. Un array vuoto o non valido equivale a false. false esplicito
|
|
101
|
+
disattiva del tutto il merge (il file di destinazione viene rigenerato completamente).
|
|
102
|
+
Default: true (cioè quando la chiave non è impostata).
|
|
103
|
+
*/
|
|
92
104
|
/** @type {boolean|(string|RegExp)[]} */
|
|
93
105
|
export const mergeCustomProps = (() => {
|
|
94
106
|
const value = buildConfig.mergeCustomProps;
|
|
@@ -101,63 +113,73 @@ export const mergeCustomProps = (() => {
|
|
|
101
113
|
return false;
|
|
102
114
|
})();
|
|
103
115
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
116
|
+
/*
|
|
117
|
+
addLayer: racchiude le custom properties generate in una at-rule CSS `@layer`
|
|
118
|
+
(vedi formats/css.mjs), ad es. `@layer project { :root { ... } }`.
|
|
119
|
+
Impostare a null, undefined o false (default) per non emettere alcun layer.
|
|
120
|
+
*/
|
|
107
121
|
export const addLayer = buildConfig.addLayer ? String(buildConfig.addLayer).trim() : null;
|
|
108
122
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
123
|
+
/*
|
|
124
|
+
customPropsSelector: selettore CSS che racchiude i blocchi di custom properties
|
|
125
|
+
generati (vedi formats/css.mjs buildCssBlock()), al posto del default
|
|
126
|
+
`:root`. Si applica in modo uniforme a una build a sorgente singola e a una build
|
|
127
|
+
con sourceModes (il blocco di primo livello della modalità base e il blocco di ogni altra modalità,
|
|
128
|
+
annidato nella propria regola `@media (prefers-color-scheme: <modalità>)`, usano
|
|
129
|
+
lo stesso selettore). Valori falsy o vuoti ripiegano su ':root'.
|
|
130
|
+
*/
|
|
115
131
|
export const customPropsSelector = typeof buildConfig.customPropsSelector === 'string'
|
|
116
132
|
&& buildConfig.customPropsSelector.trim()
|
|
117
133
|
? buildConfig.customPropsSelector.trim()
|
|
118
134
|
: ':root';
|
|
119
135
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
136
|
+
/*
|
|
137
|
+
useLightDarkFunc: con sourceModes impostato (vedi sotto) e che definisce sia una
|
|
138
|
+
chiave `light` sia una `dark`, le custom properties presenti in entrambe vengono scritte
|
|
139
|
+
una sola volta come `--name: light-dark(<light>, <dark>);` invece di essere divise
|
|
140
|
+
tra il blocco della modalità base e una regola
|
|
141
|
+
`@media (prefers-color-scheme: dark) { ... }` (vedi light-dark.mjs).
|
|
142
|
+
Ignorata quando sourceModes non è impostato o non definisce sia una modalità light sia una
|
|
143
|
+
dark. Default: true.
|
|
144
|
+
*/
|
|
127
145
|
export const useLightDarkFunc = buildConfig.useLightDarkFunc !== false;
|
|
128
146
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
147
|
+
/*
|
|
148
|
+
customPropsGroups: le custom properties il cui primo segmento del nome (separato
|
|
149
|
+
da trattini) corrisponde a uno dei prefissi di un gruppo vengono estratte, etichettate con
|
|
150
|
+
il nome del gruppo e spostate all'inizio del file CSS generato, nell'ordine
|
|
151
|
+
dell'elenco dei gruppi (vedi formats/css.mjs). Ogni voce: { name, prefixes }.
|
|
152
|
+
Default: [].
|
|
153
|
+
*/
|
|
134
154
|
export const customPropsGroups = Array.isArray(buildConfig.customPropsGroups)
|
|
135
155
|
? buildConfig.customPropsGroups
|
|
136
156
|
: [];
|
|
137
157
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
/*
|
|
159
|
+
---------------------------------------------------------------------------
|
|
160
|
+
Source: risolve i pattern relativi alla directory della config e li normalizza in
|
|
161
|
+
percorsi assoluti con forward slash (fast-glob, usato internamente da Style Dictionary,
|
|
162
|
+
richiede i forward slash anche su Windows). Vedi resolve-source-paths.mjs.
|
|
163
|
+
|
|
164
|
+
ATTENZIONE: nel file di configurazione del progetto, evitare di costruire i pattern glob con
|
|
165
|
+
path.join() — può corrompere la sintassi del pattern. Usare i template literal:
|
|
166
|
+
OK: `${minimo_path}/**\/*.{json,mjs}`
|
|
167
|
+
NO: path.join(minimo_path, '/**\/*.{json,mjs}')
|
|
168
|
+
|
|
169
|
+
sourceModes: alternativa a `source`, per una suddivisione light/dark (o altra) delle
|
|
170
|
+
custom properties — vedi build-tokens-src/build-source-modes.mjs. Quando è impostato
|
|
171
|
+
(buildConfig.sourceModes è un oggetto non null), `source` viene ignorato e
|
|
172
|
+
l'array di pattern sorgente di ogni modalità viene risolto allo stesso modo.
|
|
173
|
+
|
|
174
|
+
Le voci di `source` / di ogni modalità possono essere anche oggetti `{ src, prefix, transform }`,
|
|
175
|
+
per rendere le custom properties di quei file con un prefisso
|
|
176
|
+
(vedi source-prefixes.mjs) e/o per rinominare i nodi dei token al loro interno
|
|
177
|
+
(vedi source-transforms.mjs). Qui vengono appiattite in semplici pattern
|
|
178
|
+
per Style Dictionary; quelle con prefisso/transform vengono raccolte anche in
|
|
179
|
+
`prefixedSources`/`transformedSources`, da registrare in
|
|
180
|
+
build-tokens.mjs.
|
|
181
|
+
---------------------------------------------------------------------------
|
|
182
|
+
*/
|
|
161
183
|
const sourceModesRaw = buildConfig.sourceModes ?? null;
|
|
162
184
|
|
|
163
185
|
/** @type {import('./source-prefixes.mjs').PrefixedSource[]} */
|
|
@@ -186,11 +208,13 @@ export const sourceModes = sourceModesRaw
|
|
|
186
208
|
)
|
|
187
209
|
: null;
|
|
188
210
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
211
|
+
/*
|
|
212
|
+
sourceModesBase: la modalità le cui dichiarazioni vengono scritte nel blocco
|
|
213
|
+
`:root { ... }` di primo livello (le altre sono annidate in
|
|
214
|
+
`@media (prefers-color-scheme: <modalità>) { ... }`). Default: la prima chiave
|
|
215
|
+
di sourceModes (ordine di inserimento), ad es. 'light'. Ignorata quando sourceModes
|
|
216
|
+
non è impostato.
|
|
217
|
+
*/
|
|
194
218
|
export const sourceModesBase = sourceModes
|
|
195
219
|
? (Object.prototype.hasOwnProperty.call(sourceModes, buildConfig.sourceModesBase)
|
|
196
220
|
? buildConfig.sourceModesBase
|