@massimo-cassandro/minimo 1.32.3 → 1.33.0
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/dev-tools/starter-kit/package-tpl.json +1 -1
- package/dev-tools/starter-kit/source_files/CLAUDE-frontend.md +1 -0
- package/dev-tools/starter-kit/source_files/_private/pwd.md +16 -0
- package/dev-tools/starter-kit/source_files/_private/sf.md +12 -0
- package/dev-tools/starter-kit/source_files/stylelint.config.mjs +1 -1
- package/dev-tools/starter-kit/starter-install.sh +102 -8
- package/dev-tools/starter-kit/webpack.config.mjs +6 -14
- package/dev-tools/stylelint-config/README.md +45 -0
- package/dev-tools/stylelint-config/index.js +184 -0
- package/package.json +11 -2
- package/src/custom-properties.css +7 -0
- package/src/web-components/json-table/json-table-component.js +283 -0
- package/src/web-components/json-table/json-table-component.module.css +57 -0
- package/src/web-components/json-table/json-table.minimo.tokens.mjs +48 -0
- package/src/web-components/json-table/readme.md +243 -0
- package/src/web-components/json-table/src/defaults.js +105 -0
- package/src/web-components/json-table/src/get-data.js +57 -0
- package/src/web-components/json-table/src/info-section.js +72 -0
- package/src/web-components/json-table/src/main-builder.js +95 -0
- package/src/web-components/json-table/src/resolve-params.js +96 -0
- package/src/web-components/json-table/src/update-info.js +48 -0
- package/src/web-components/s-datatable-component/docs.md +62 -0
- package/src/web-components/s-datatable-component/s-datatable-component.js +9 -1
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"launchChrome": "open -n -a 'Google Chrome' --args --profile-directory='Profile 3'",
|
|
29
29
|
"python server": "python3 -m http.server 8000 # --directory __dirname__ # 8000 = default port",
|
|
30
30
|
"php server": "php -S localhost:8000 # -t root_dir/",
|
|
31
|
-
"symfony server": "symfony serve --port=
|
|
31
|
+
"symfony server": "symfony serve --port=[[port8000]] --listen-ip=0.0.0.0 # http://192.168.1.135:[[port8000]] # -d (deamon): rimane aperto anche dopo la chiusura del terminale, terminare con `symfony server:stop`",
|
|
32
32
|
"node server": "node serve # richiede ‘npm i serve’",
|
|
33
33
|
"build tokens": "npx buildTokens --config ./app/css/tokens-config.mjs",
|
|
34
34
|
"check unresolved props": "npx checkUnresolvedProps --config ./app/css/tokens-config.mjs",
|
|
@@ -12,3 +12,4 @@
|
|
|
12
12
|
- nella chat evitare neologismi come parsare, committare ecc., usare i termini corrispondenti in italiano o il termine originale in inglese dove non sia possibile un equivalente in italiano. Non coniugare mai secondo le regole dell'italiano verbi di altre lingue
|
|
13
13
|
- nei commenti su più righe preferire `/* ... */` piuttosto che ripetere `//` ad igni inizio riga
|
|
14
14
|
- a meno che non sia esplicitamente richiesto di eseguire subito una modifica, NON ESEGUIRE MAI nulla autonomamente ma mostra sempre un piano d'azione prima di procedere
|
|
15
|
+
- nei commenti jsDoc aggiungere sempre dove possibile una sezione example che riepiloghi i vari parametri mostrando i valori di default
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
## pwd dev
|
|
2
|
+
* massimo.cassandro@blu-net.it
|
|
3
|
+
* pwd: `devMax`
|
|
4
|
+
* Password hash `$2y$13$woOLLKqTHGnCqlo8D6Iste50vipaXOn2uKPaxztUK8bfQMYPa2MXu`
|
|
5
|
+
|
|
6
|
+
```sql
|
|
7
|
+
INSERT INTO `utente` (`id`, `email`, `password`, `nome`, `cognome`, `roles`, `active`, `cr_timestamp`, `last_login`, `cancellato`, `export`, `um_utente_id`, `um_timestamp`)
|
|
8
|
+
VALUES
|
|
9
|
+
(2, 'massimo.cassandro@blu-net.it', '$2y$13$woOLLKqTHGnCqlo8D6Iste50vipaXOn2uKPaxztUK8bfQMYPa2MXu', 'Massimo', 'Cassandro', '[\"ROLE_DEPLOY\"]', 1, '2026-03-30 00:00:00', '2026-07-22 09:52:57', 0, 1, 1, '2026-07-22 11:52:57')
|
|
10
|
+
ON DUPLICATE KEY UPDATE
|
|
11
|
+
password = '$2y$13$woOLLKqTHGnCqlo8D6Iste50vipaXOn2uKPaxztUK8bfQMYPa2MXu';
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## genera pwd symfony
|
|
15
|
+
|
|
16
|
+
`php bin/console security:hash-password`
|
|
@@ -27,6 +27,65 @@ if [ -z "$ZSH_VERSION" ]; then
|
|
|
27
27
|
exit 1
|
|
28
28
|
fi
|
|
29
29
|
|
|
30
|
+
# Porta da utilizzare: l'utente inserisce un numero da 0 a 99 (default 0), che
|
|
31
|
+
# viene normalizzato a due cifre e usato come suffisso delle porte 80xx e 57xx.
|
|
32
|
+
# I valori sostituiscono i segnaposto [[port8000]] e [[port5700]] presenti in
|
|
33
|
+
# package-tpl.json, webpack.config.mjs e altri (vedi safe_cat_with_ports).
|
|
34
|
+
read "PORT_INPUT?Porta da utilizzare (0-99) [0]: "
|
|
35
|
+
PORT_INPUT=${PORT_INPUT:-0}
|
|
36
|
+
if [[ ! "$PORT_INPUT" =~ '^[0-9]{1,2}$' ]]; then
|
|
37
|
+
printf "${RED}Errore: inserire un numero intero tra 0 e 99.${NC}\n" >&2
|
|
38
|
+
exit 1
|
|
39
|
+
fi
|
|
40
|
+
PORT_SUFFIX=${(l:2::0:)PORT_INPUT}
|
|
41
|
+
PORT_8000="80${PORT_SUFFIX}"
|
|
42
|
+
PORT_5700="57${PORT_SUFFIX}"
|
|
43
|
+
echo -e "${DIM}Porte: ${PORT_8000} (server), ${PORT_5700} (webpack dev server)${NC}"
|
|
44
|
+
|
|
45
|
+
# Pacchetti opzionali: installati come devDependency solo su conferma
|
|
46
|
+
# esplicita dell'utente (vedi ciclo di domande più sotto). Include sia
|
|
47
|
+
# devDependency "pure" del progetto, sia i peer dependencies opzionali di
|
|
48
|
+
# @massimo-cassandro/minimo (vedi package.json di minimo, campi
|
|
49
|
+
# peerDependencies/peerDependenciesMeta: elenco mantenuto a mano, non letto
|
|
50
|
+
# dinamicamente da minimo — se cambiano va aggiornato manualmente anche qui).
|
|
51
|
+
# In entrambi i casi vengono installati con `npm i -D`: in questo progetto
|
|
52
|
+
# `dependencies` contiene solo @massimo-cassandro/minimo, tutto il resto
|
|
53
|
+
# (tooling di build e librerie usate dai singoli componenti) è devDependency.
|
|
54
|
+
# Ogni voce è "<pacchetto>|<descrizione>" (pacchetto allineato a colonna fissa
|
|
55
|
+
# solo per leggibilità, non richiesto dal parsing).
|
|
56
|
+
optionalPackages=(
|
|
57
|
+
"dotenv-webpack | gestione variabili d'ambiente (.env) nel bundle webpack"
|
|
58
|
+
"@principalstudio/html-webpack-inject-preload | injection dei tag <link rel=preload> nell'html generato"
|
|
59
|
+
"postcss-jit-props | include nel CSS compilato solo le custom properties effettivamente usate"
|
|
60
|
+
"@svgdotjs/svg.js | richiesto da charts/ di minimo"
|
|
61
|
+
"blurhash | richiesto da unsplash-page di minimo (create-blurhash-canvas)"
|
|
62
|
+
"simple-datatables | richiesto da s-datatable-component di minimo"
|
|
63
|
+
"style-dictionary | richiesto da design-tokens/utilities di minimo (build-tokens)"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# Chiede conferma per un singolo pacchetto opzionale (default: No).
|
|
67
|
+
ask_optional_pkg() {
|
|
68
|
+
local pkg="$1"
|
|
69
|
+
local desc="$2"
|
|
70
|
+
local reply
|
|
71
|
+
read "reply?Installare il pacchetto opzionale '$pkg' (${desc})? [y/N]: "
|
|
72
|
+
[[ "$reply" =~ ^[Yy]$ ]]
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
selectedOptionalPkgs=()
|
|
76
|
+
|
|
77
|
+
if [ "$DEBUG" != "TRUE" ]; then
|
|
78
|
+
echo -e "\n${GREEN}...PACCHETTI OPZIONALI${NC}"
|
|
79
|
+
for entry in "${optionalPackages[@]}"; do
|
|
80
|
+
pkg="${entry%%|*}"
|
|
81
|
+
pkg="${pkg%% *}"
|
|
82
|
+
desc="${entry#*| }"
|
|
83
|
+
if ask_optional_pkg "$pkg" "$desc"; then
|
|
84
|
+
selectedOptionalPkgs+=("$pkg")
|
|
85
|
+
fi
|
|
86
|
+
done
|
|
87
|
+
fi
|
|
88
|
+
|
|
30
89
|
BASE_URL=${0:A:h}
|
|
31
90
|
|
|
32
91
|
echo "BASE_URL: ${BASE_URL}"
|
|
@@ -67,6 +126,27 @@ safe_cat() {
|
|
|
67
126
|
cat "$src" >| "$dest"
|
|
68
127
|
}
|
|
69
128
|
|
|
129
|
+
# Come safe_cat, ma sostituisce i segnaposto [[port8000]] e [[port5700]] con
|
|
130
|
+
# le porte scelte all'avvio. La sostituzione viene fatta su un file temporaneo
|
|
131
|
+
# che è poi passato a safe_cat: il confronto per l'idempotenza avviene quindi
|
|
132
|
+
# sul contenuto già sostituito (stessa porta => copia saltata).
|
|
133
|
+
safe_cat_with_ports() {
|
|
134
|
+
local src="$1"
|
|
135
|
+
local dest="$2"
|
|
136
|
+
if [ ! -f "$src" ]; then
|
|
137
|
+
echo -e "${RED}Sorgente mancante: $src${NC}"
|
|
138
|
+
return 1
|
|
139
|
+
fi
|
|
140
|
+
local tmp="$(mktemp)"
|
|
141
|
+
sed -e "s/\[\[port8000\]\]/${PORT_8000}/g" \
|
|
142
|
+
-e "s/\[\[port5700\]\]/${PORT_5700}/g" \
|
|
143
|
+
"$src" >| "$tmp"
|
|
144
|
+
safe_cat "$tmp" "$dest"
|
|
145
|
+
local rc=$?
|
|
146
|
+
rm -f "$tmp"
|
|
147
|
+
return $rc
|
|
148
|
+
}
|
|
149
|
+
|
|
70
150
|
FRONTEND_INSTALL_PATH="./app"
|
|
71
151
|
# se la cartella esiste già: la prima volta viene rinominata per intero in
|
|
72
152
|
# OLD-app (preservata, mai più toccata); se OLD-app esiste già, la cartella
|
|
@@ -85,8 +165,8 @@ mkdir -p "${FRONTEND_INSTALL_PATH}"
|
|
|
85
165
|
|
|
86
166
|
|
|
87
167
|
echo -e "${GREEN}...ROOT FILES${NC}"
|
|
88
|
-
|
|
89
|
-
|
|
168
|
+
safe_cat_with_ports "${BASE_URL}/package-tpl.json" package.json
|
|
169
|
+
safe_cat_with_ports "${WEBPACK_CONFIG_SOURCE_PATH}/webpack.config.mjs" webpack.config.mjs
|
|
90
170
|
|
|
91
171
|
safe_cat "${SOURCE_FILES_DIR}/_gitignore" .gitignore
|
|
92
172
|
safe_cat "${SOURCE_FILES_DIR}/_browserslistrc" .browserslistrc
|
|
@@ -134,7 +214,6 @@ dependencies=(
|
|
|
134
214
|
|
|
135
215
|
devDependencies=(
|
|
136
216
|
@massimo-cassandro/eslint-config
|
|
137
|
-
@massimo-cassandro/stylelint-config
|
|
138
217
|
|
|
139
218
|
@babel/core
|
|
140
219
|
@babel/preset-env
|
|
@@ -157,7 +236,6 @@ devDependencies=(
|
|
|
157
236
|
process
|
|
158
237
|
purgecss-webpack-plugin
|
|
159
238
|
responsive-loader
|
|
160
|
-
style-dictionary
|
|
161
239
|
style-loader
|
|
162
240
|
svg-url-loader
|
|
163
241
|
svgo
|
|
@@ -169,12 +247,12 @@ devDependencies=(
|
|
|
169
247
|
webpack-dev-server
|
|
170
248
|
webpack-manifest-plugin
|
|
171
249
|
webpack-remove-empty-scripts
|
|
172
|
-
|
|
173
|
-
# da installare solo se necessari
|
|
174
|
-
# dotenv-webpack
|
|
175
|
-
# @principalstudio/html-webpack-inject-preload file-loader
|
|
176
250
|
)
|
|
177
251
|
|
|
252
|
+
# pacchetti opzionali selezionati dall'utente (vedi ciclo di domande a inizio
|
|
253
|
+
# script), aggiunti all'array di installazione già definito sopra
|
|
254
|
+
devDependencies+=("${selectedOptionalPkgs[@]}")
|
|
255
|
+
|
|
178
256
|
if [ "$DEBUG" = "TRUE" ]; then
|
|
179
257
|
dependencies=( @massimo-cassandro/minimo )
|
|
180
258
|
devDependencies=()
|
|
@@ -232,6 +310,22 @@ safe_cat "${SOURCE_FILES_DIR}/app_index.js" "${FRONTEND_INSTALL_PATH}/index.js"
|
|
|
232
310
|
safe_cat "${SOURCE_FILES_DIR}/layout-critical.css" "${FRONTEND_INSTALL_PATH}/css/layout-critical.css"
|
|
233
311
|
|
|
234
312
|
|
|
313
|
+
# copia tutti i file presenti in ${SOURCE_FILES_DIR}/_private,
|
|
314
|
+
echo -e "${GREEN}..._PRIVATE FILES${NC}"
|
|
315
|
+
mkdir -p "_private"
|
|
316
|
+
for FILE in "${SOURCE_FILES_DIR}/_private"/*; do
|
|
317
|
+
[ -f "$FILE" ] || continue
|
|
318
|
+
safe_cat_with_ports "$FILE" "_private/$(basename "$FILE")"
|
|
319
|
+
done
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
if [ ${#selectedOptionalPkgs[@]} -gt 0 ]; then
|
|
323
|
+
echo -e "\n${YELLOW}Pacchetti opzionali installati:${NC}"
|
|
324
|
+
for pkg in "${selectedOptionalPkgs[@]}"; do
|
|
325
|
+
echo -e "${YELLOW} - $pkg${NC}"
|
|
326
|
+
done
|
|
327
|
+
echo -e "${YELLOW}Potrebbe essere necessaria una modifica alla configurazione webpack e/o postcss per utilizzare questi pacchetti.${NC}"
|
|
328
|
+
fi
|
|
235
329
|
|
|
236
330
|
set +C
|
|
237
331
|
echo -e "\n\n${GREEN}*** END ***${NC}"
|
|
@@ -36,8 +36,8 @@ const fromProjectRoot = (relPath) => {
|
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
const isDevelopment = process.env.NODE_ENV === 'development'
|
|
39
|
-
,devServerPort =
|
|
40
|
-
// ,apiPort =
|
|
39
|
+
,devServerPort = [[port5700]]
|
|
40
|
+
// ,apiPort = [[port8000]]
|
|
41
41
|
,useSass = false
|
|
42
42
|
,inlineCssInDevMode = true
|
|
43
43
|
,useSvgo = true
|
|
@@ -643,18 +643,10 @@ const config = {
|
|
|
643
643
|
// =>> Video
|
|
644
644
|
// {
|
|
645
645
|
// test: /\.(?:mp4|webm)$/i,
|
|
646
|
-
//
|
|
647
|
-
//
|
|
648
|
-
//
|
|
649
|
-
//
|
|
650
|
-
// loader: 'file-loader',
|
|
651
|
-
// options: {
|
|
652
|
-
// name: '[name].[contenthash][ext]',
|
|
653
|
-
// outputPath: 'video/',
|
|
654
|
-
// esModule: false,
|
|
655
|
-
// }
|
|
656
|
-
// }
|
|
657
|
-
// ]
|
|
646
|
+
// type: 'asset/resource',
|
|
647
|
+
// generator: {
|
|
648
|
+
// filename: 'video/[name].[contenthash][ext]'
|
|
649
|
+
// }
|
|
658
650
|
// },
|
|
659
651
|
|
|
660
652
|
// =>> rules: Fonts
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Stylelint config
|
|
2
|
+
|
|
3
|
+
My [stylelint](https://stylelint.io/) config,
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## Use
|
|
7
|
+
|
|
8
|
+
Install package:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install @massimo-cassandro/minimo
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Create a `stylelint.config.mjs` file and add:
|
|
15
|
+
|
|
16
|
+
```javascript
|
|
17
|
+
export default {
|
|
18
|
+
extends: [
|
|
19
|
+
'@massimo-cassandro/minimo/stylelint-config',
|
|
20
|
+
],
|
|
21
|
+
|
|
22
|
+
// Files to be ignored
|
|
23
|
+
ignoreFiles: [
|
|
24
|
+
'node_modules/**/*.{css,scss}',
|
|
25
|
+
'vendor/**/*.{css,scss}',
|
|
26
|
+
'templates/**/*.{css,scss}',
|
|
27
|
+
'dist/**/*.css',
|
|
28
|
+
'build/**/*.css',
|
|
29
|
+
'public/**/*.css',
|
|
30
|
+
'test/**/*.css'
|
|
31
|
+
],
|
|
32
|
+
|
|
33
|
+
// Overrides
|
|
34
|
+
rules: {
|
|
35
|
+
//********************** optionally for tailwind:
|
|
36
|
+
// 'at-rule-no-unknown': [
|
|
37
|
+
// true,
|
|
38
|
+
// 'value-keyword-case': null,
|
|
39
|
+
// '@stylistic/number-no-trailing-zeros': null
|
|
40
|
+
// ],
|
|
41
|
+
//********************** /tailwind
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
```
|
|
45
|
+
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/** @type {import('stylelint').Config} */
|
|
2
|
+
|
|
3
|
+
const tailwindAtRules = ['tailwind', 'apply', 'layer', 'variants', 'responsive', 'screen', 'config'],
|
|
4
|
+
postCSSRules = ['define-mixin', 'mixin'];
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
extends: [
|
|
8
|
+
'stylelint-config-standard',
|
|
9
|
+
'stylelint-config-recess-order',
|
|
10
|
+
'@stylistic/stylelint-config'
|
|
11
|
+
],
|
|
12
|
+
plugins: [
|
|
13
|
+
'@stylistic/stylelint-plugin'
|
|
14
|
+
],
|
|
15
|
+
ignoreFiles: [
|
|
16
|
+
'node_modules/**/*.*',
|
|
17
|
+
'vendor/**/*.*',
|
|
18
|
+
'build/**/*.*',
|
|
19
|
+
'public/**/*.*',
|
|
20
|
+
'templates/**/*.*',
|
|
21
|
+
'dist/**/*.*'
|
|
22
|
+
],
|
|
23
|
+
rules: {
|
|
24
|
+
|
|
25
|
+
'alpha-value-notation': null,
|
|
26
|
+
'at-rule-empty-line-before': null,
|
|
27
|
+
'at-rule-no-vendor-prefix': true,
|
|
28
|
+
'at-rule-no-unknown': [ true, { ignoreAtRules: [ ...tailwindAtRules, ...postCSSRules ] } ],
|
|
29
|
+
'color-function-notation': 'modern',
|
|
30
|
+
'color-named': 'never',
|
|
31
|
+
'comment-empty-line-before': null,
|
|
32
|
+
'custom-property-empty-line-before': null,
|
|
33
|
+
'custom-property-pattern': null,
|
|
34
|
+
'declaration-block-no-redundant-longhand-properties': null,
|
|
35
|
+
'declaration-empty-line-before': null,
|
|
36
|
+
'declaration-no-important': true,
|
|
37
|
+
'font-family-name-quotes': 'always-where-recommended',
|
|
38
|
+
'font-weight-notation': ['numeric', { ignore: ['relative'] }],
|
|
39
|
+
'function-no-unknown': [true, { ignoreFunctions: ['theme'] }],
|
|
40
|
+
'function-url-no-scheme-relative': true,
|
|
41
|
+
'function-url-quotes': 'always',
|
|
42
|
+
'hue-degree-notation': null,
|
|
43
|
+
'import-notation': null,
|
|
44
|
+
'max-nesting-depth': [3, {
|
|
45
|
+
ignore: ['pseudo-classes', 'blockless-at-rules'],
|
|
46
|
+
ignoreAtRules: [/media/, /include/],
|
|
47
|
+
ignorePseudoClasses: ['before', 'after']
|
|
48
|
+
}],
|
|
49
|
+
'media-feature-range-notation': null,
|
|
50
|
+
'media-query-no-invalid': null,
|
|
51
|
+
'no-descending-specificity': null,
|
|
52
|
+
'number-max-precision': null,
|
|
53
|
+
'property-no-vendor-prefix': true,
|
|
54
|
+
'rule-empty-line-before': null,
|
|
55
|
+
'selector-attribute-quotes': 'always',
|
|
56
|
+
'selector-class-pattern': ['^[a-z][a-z0-9\\-]*[a-z0-9]$', { resolveNestedSelectors: true }],
|
|
57
|
+
'selector-max-attribute': 2,
|
|
58
|
+
'selector-max-class': 4,
|
|
59
|
+
'selector-max-combinators': 4,
|
|
60
|
+
'selector-max-compound-selectors': 4,
|
|
61
|
+
'selector-max-id': 0,
|
|
62
|
+
'selector-max-specificity': null,
|
|
63
|
+
'selector-max-type': [3, { ignore: ['child', 'compounded', 'descendant', 'next-sibling'] }],
|
|
64
|
+
'selector-max-universal': 1,
|
|
65
|
+
'selector-no-qualifying-type': null, // https://stylelint.io/user-guide/rules/selector-no-qualifying-type/
|
|
66
|
+
'selector-no-vendor-prefix': true,
|
|
67
|
+
'selector-not-notation': null,
|
|
68
|
+
'selector-pseudo-class-no-unknown': [true, { ignorePseudoClasses: ['global'] }],
|
|
69
|
+
'shorthand-property-no-redundant-values': true,
|
|
70
|
+
'value-keyword-case': ['lower', { ignoreKeywords: ['currentColor'] }],
|
|
71
|
+
'value-no-vendor-prefix': true,
|
|
72
|
+
|
|
73
|
+
// --- Stylistic ---
|
|
74
|
+
'@stylistic/at-rule-name-space-after': 'always',
|
|
75
|
+
'@stylistic/at-rule-semicolon-space-before': 'never',
|
|
76
|
+
'@stylistic/block-closing-brace-empty-line-before': null,
|
|
77
|
+
'@stylistic/block-closing-brace-newline-after': null,
|
|
78
|
+
'@stylistic/block-opening-brace-space-before': null,
|
|
79
|
+
'@stylistic/declaration-block-semicolon-newline-before': 'never-multi-line',
|
|
80
|
+
'@stylistic/function-max-empty-lines': 2,
|
|
81
|
+
'@stylistic/function-parentheses-space-inside': 'never-single-line',
|
|
82
|
+
'@stylistic/max-empty-lines': 2,
|
|
83
|
+
'@stylistic/max-line-length': null,
|
|
84
|
+
'@stylistic/no-empty-first-line': null,
|
|
85
|
+
'@stylistic/no-missing-end-of-source-newline': null,
|
|
86
|
+
'@stylistic/number-leading-zero': 'never',
|
|
87
|
+
'@stylistic/selector-list-comma-newline-after': 'always-multi-line',
|
|
88
|
+
'@stylistic/selector-list-comma-newline-before': 'never-multi-line',
|
|
89
|
+
'@stylistic/selector-list-comma-space-after': 'always-single-line',
|
|
90
|
+
'@stylistic/selector-list-comma-space-before': 'never-single-line',
|
|
91
|
+
'@stylistic/string-quotes': 'single',
|
|
92
|
+
'@stylistic/unicode-bom': 'never',
|
|
93
|
+
'@stylistic/value-list-comma-newline-after': 'always-multi-line',
|
|
94
|
+
'@stylistic/value-list-comma-newline-before': 'never-multi-line',
|
|
95
|
+
'@stylistic/value-list-comma-space-after': null,
|
|
96
|
+
'@stylistic/value-list-max-empty-lines': 3
|
|
97
|
+
},
|
|
98
|
+
overrides: [
|
|
99
|
+
{
|
|
100
|
+
files: ['**/*.scss'],
|
|
101
|
+
plugins: ['stylelint-scss'],
|
|
102
|
+
extends: [
|
|
103
|
+
'stylelint-config-standard-scss',
|
|
104
|
+
'stylelint-config-recess-order'
|
|
105
|
+
],
|
|
106
|
+
rules: {
|
|
107
|
+
'no-invalid-position-at-import-rule': null,
|
|
108
|
+
'scss/at-extend-no-missing-placeholder': null,
|
|
109
|
+
'scss/at-function-named-arguments': 'never',
|
|
110
|
+
'scss/at-function-parentheses-space-before': 'never',
|
|
111
|
+
'scss/at-function-pattern': '^[a-z][a-z-]*$',
|
|
112
|
+
'scss/at-if-closing-brace-newline-after': null,
|
|
113
|
+
'scss/at-if-closing-brace-space-after': null,
|
|
114
|
+
'scss/at-if-no-null': null,
|
|
115
|
+
'scss/at-mixin-argumentless-call-parentheses': 'always',
|
|
116
|
+
'scss/at-mixin-named-arguments': null,
|
|
117
|
+
'scss/at-mixin-parentheses-space-before': 'never',
|
|
118
|
+
'scss/at-mixin-pattern': null,
|
|
119
|
+
'scss/at-rule-conditional-no-parentheses': null,
|
|
120
|
+
'scss/load-no-partial-leading-underscore': true,
|
|
121
|
+
'scss/load-partial-extension': 'never',
|
|
122
|
+
|
|
123
|
+
'at-rule-no-unknown': null, // disabilita regola base per evitare conflitti
|
|
124
|
+
'scss/at-rule-no-unknown': [
|
|
125
|
+
true,
|
|
126
|
+
{
|
|
127
|
+
ignoreAtRules: [
|
|
128
|
+
...tailwindAtRules,
|
|
129
|
+
...postCSSRules,
|
|
130
|
+
// SCSS
|
|
131
|
+
'extend', 'include', 'if', 'else', 'function', 'at-root',
|
|
132
|
+
'use', 'forward', 'each', 'while', 'for', 'error', 'warn', 'debug', 'return'
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
],
|
|
136
|
+
'scss/comment-no-empty': null,
|
|
137
|
+
'scss/dimension-no-non-numeric-values': true,
|
|
138
|
+
'scss/dollar-variable-colon-space-after': 'at-least-one-space',
|
|
139
|
+
'scss/dollar-variable-colon-space-before': 'never',
|
|
140
|
+
'scss/dollar-variable-empty-line-before': null,
|
|
141
|
+
'scss/dollar-variable-no-missing-interpolation': true,
|
|
142
|
+
'scss/dollar-variable-pattern': '^[a-z][a-z-\\d]*$',
|
|
143
|
+
'scss/double-slash-comment-empty-line-before': null,
|
|
144
|
+
'scss/double-slash-comment-whitespace-inside': null,
|
|
145
|
+
'scss/no-duplicate-dollar-variables': [
|
|
146
|
+
null,
|
|
147
|
+
{ ignoreInsideAtRules: ['extend', 'if', 'mixin'] }
|
|
148
|
+
],
|
|
149
|
+
'scss/no-duplicate-mixins': true,
|
|
150
|
+
'scss/operator-no-newline-after': true,
|
|
151
|
+
'scss/operator-no-newline-before': true,
|
|
152
|
+
'scss/operator-no-unspaced': true
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
files: ['**/*.module.scss', '**/*.module.css'],
|
|
157
|
+
extends: ['stylelint-config-css-modules'],
|
|
158
|
+
rules: {
|
|
159
|
+
'selector-class-pattern': [
|
|
160
|
+
'^[a-z]+(_?[A-Z]?[a-z0-9]*)*$',
|
|
161
|
+
{
|
|
162
|
+
ignoreSelectors: [/:global/], // non funziona
|
|
163
|
+
resolveNestedSelectors: true
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// da testare
|
|
169
|
+
// {
|
|
170
|
+
// files: ['**/*.module.scss', '**/*.module.css'],
|
|
171
|
+
// extends: ['stylelint-config-css-modules'],
|
|
172
|
+
// rules: {
|
|
173
|
+
// 'selector-class-pattern': [
|
|
174
|
+
// '^([a-z][a-z0-9]*([A-Z][a-z0-9]*)*|[a-z][a-z0-9-]*)$',
|
|
175
|
+
// { resolveNestedSelectors: true }
|
|
176
|
+
// ],
|
|
177
|
+
// 'selector-pseudo-class-no-unknown': [
|
|
178
|
+
// true,
|
|
179
|
+
// { ignorePseudoClasses: ['global', 'local'] }
|
|
180
|
+
// ]
|
|
181
|
+
// }
|
|
182
|
+
// }
|
|
183
|
+
]
|
|
184
|
+
};
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@massimo-cassandro/minimo",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.33.0",
|
|
4
4
|
"description": "Light css framework & utilities",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": "./index.js",
|
|
9
9
|
"./charts": "./charts/index.js",
|
|
10
|
+
"./stylelint-config": "./dev-tools/stylelint-config/index.js",
|
|
10
11
|
"./css/*": "./src/css/*.css",
|
|
11
12
|
"./tokens/*": "./design-tokens/tokens/*",
|
|
12
13
|
"./*": "./*"
|
|
@@ -94,7 +95,6 @@
|
|
|
94
95
|
},
|
|
95
96
|
"devDependencies": {
|
|
96
97
|
"@massimo-cassandro/eslint-config": "^3.0.16",
|
|
97
|
-
"@massimo-cassandro/stylelint-config": "^2.3.15",
|
|
98
98
|
"@types/node": "^26.2.0",
|
|
99
99
|
"jsdom": "^30.0.1",
|
|
100
100
|
"style-dictionary": "^5.5.1"
|
|
@@ -102,9 +102,18 @@
|
|
|
102
102
|
"dependencies": {
|
|
103
103
|
"@inquirer/input": "^5.1.2",
|
|
104
104
|
"@inquirer/select": "^5.2.1",
|
|
105
|
+
"@stylistic/stylelint-config": "^5.0.0",
|
|
106
|
+
"@stylistic/stylelint-plugin": "^5.3.0",
|
|
105
107
|
"clipboardy": "^5.3.2",
|
|
106
108
|
"sharp": "^0.35.3",
|
|
107
109
|
"sharp-ico": "^0.1.5",
|
|
110
|
+
"stylelint": "^17.15.0",
|
|
111
|
+
"stylelint-config-css-modules": "^4.6.0",
|
|
112
|
+
"stylelint-config-recess-order": "^7.8.0",
|
|
113
|
+
"stylelint-config-standard": "^40.0.0",
|
|
114
|
+
"stylelint-config-standard-scss": "^17.0.0",
|
|
115
|
+
"stylelint-order": "^8.1.1",
|
|
116
|
+
"stylelint-scss": "^7.2.0",
|
|
108
117
|
"svgo": "^4.0.2"
|
|
109
118
|
},
|
|
110
119
|
"directories": {
|
|
@@ -222,6 +222,13 @@
|
|
|
222
222
|
--inner-nav-gap: var(--size-lg);
|
|
223
223
|
--inner-nav-margin-block: var(--size-base);
|
|
224
224
|
|
|
225
|
+
--jt-info-color: var(--text-muted);
|
|
226
|
+
--jt-info-font-size: var(--font-size-sm);
|
|
227
|
+
--jt-info-gap: var(--size-sm);
|
|
228
|
+
--jt-info-outer-padding-block-end: var(--size-xs);
|
|
229
|
+
--jt-search-max-width: 20rem;
|
|
230
|
+
--jt-wrapper-margin-block: var(--size-md);
|
|
231
|
+
|
|
225
232
|
--line-height-base: 1.5;
|
|
226
233
|
--line-height-sm: 1.4;
|
|
227
234
|
--line-height-xs: 1.25;
|