@massimo-cassandro/minimo 1.29.4 → 1.29.6

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.
Files changed (32) hide show
  1. package/dev-tools/starter-kit/package-tpl.json +7 -7
  2. package/dev-tools/starter-kit/source_files/__project__.code-workspace +50 -0
  3. package/dev-tools/starter-kit/source_files/favicons-readme.md +5 -0
  4. package/dev-tools/starter-kit/starter-install.sh +125 -220
  5. package/dev-tools/starter-kit/{webpack-modules → webpack-config-modules}/postcss.config.mjs +2 -2
  6. package/dev-tools/starter-kit/webpack-template.ejs +2 -2
  7. package/dev-tools/starter-kit/webpack.config.mjs +36 -37
  8. package/package.json +2 -2
  9. package/src/components/modal-popup/modal-popup.minimo.tokens.mjs +1 -1
  10. package/src/custom-properties.css +1 -1
  11. package/src/minimo.css +3 -3
  12. package/dev-tools/starter-kit/templates/__project__.code-workspace +0 -94
  13. package/dev-tools/starter-kit/templates/favicons-readme.md +0 -5
  14. /package/dev-tools/starter-kit/{templates → source_files}/CLAUDE-frontend.md +0 -0
  15. /package/dev-tools/starter-kit/{templates → source_files}/_browserslistrc +0 -0
  16. /package/dev-tools/starter-kit/{templates → source_files}/_editorconfig +0 -0
  17. /package/dev-tools/starter-kit/{templates → source_files}/_gitignore +0 -0
  18. /package/dev-tools/starter-kit/{templates → source_files}/_prettierrc +0 -0
  19. /package/dev-tools/starter-kit/{templates → source_files}/_root_htaccess +0 -0
  20. /package/dev-tools/starter-kit/{templates → source_files}/_root_robots.txt +0 -0
  21. /package/dev-tools/starter-kit/{templates → source_files}/app_index.js +0 -0
  22. /package/dev-tools/starter-kit/{templates → source_files}/eslint.config.mjs +0 -0
  23. /package/dev-tools/starter-kit/{templates → source_files}/jsconfig.json +0 -0
  24. /package/dev-tools/starter-kit/{templates → source_files}/layout-critical.css +0 -0
  25. /package/dev-tools/starter-kit/{templates → source_files}/stylelint.config.mjs +0 -0
  26. /package/dev-tools/starter-kit/{webpack-modules → webpack-config-modules}/css-rules.mjs +0 -0
  27. /package/dev-tools/starter-kit/{webpack-modules → webpack-config-modules}/get-jsConfig-aliases.mjs +0 -0
  28. /package/dev-tools/starter-kit/{webpack-modules → webpack-config-modules}/mini-svg-data-uri-loader.cjs +0 -0
  29. /package/dev-tools/starter-kit/{webpack-modules → webpack-config-modules}/purgecss-setup.mjs +0 -0
  30. /package/dev-tools/starter-kit/{webpack-modules → webpack-config-modules}/purgecss-variables-safelist.mjs +0 -0
  31. /package/dev-tools/starter-kit/{webpack-modules → webpack-config-modules}/svg-rules.mjs +0 -0
  32. /package/dev-tools/starter-kit/{webpack-modules → webpack-config-modules}/svgo.config.mjs +0 -0
@@ -17,21 +17,21 @@
17
17
  "*.avif"
18
18
  ],
19
19
  "scripts": {
20
- "progetto JS webpack DEV": "npm 'launchChrome' && NODE_ENV=development webpack serve --config ./webpack.config.mjs #--open-app-name 'Google Chrome'",
21
- "progetto sf webpack DEV": "rm -rf ./public/_dev && NODE_ENV=development webpack --config ./frontend/webpack.config.mjs",
20
+ "progetto JS webpack DEV": "npm run 'launchChrome' && NODE_ENV=development webpack serve --config ./webpack.config.mjs #--open-app-name 'Google Chrome'",
21
+ "progetto sf webpack DEV": "rm -rf ./public/_dev && NODE_ENV=development webpack --config ./webpack.config.mjs",
22
22
  "webpack PROD": "npm run 'UPD-version' && NODE_ENV=production webpack --config ./webpack.config.mjs --stats minimal",
23
- "eslint-check": "npx eslint app/ # or src/, frontend/src/ ...",
23
+ "eslint-check": "npx eslint app/",
24
24
  "create-favicons INIT": "npx create-favicons init",
25
- "create-favicons": "npx create-favicons --dir=./favicons # o ./frontend/favicons",
26
- "UPD-version": "npx update-version --no-log-v0 # --log-file=./frontend/changelog.md --log-patch --pkg=alt/path/to/package.json",
25
+ "create-favicons": "npx create-favicons --dir=./app/favicons",
26
+ "UPD-version": "npx update-version --no-log-v0 --log-file=./changelog.md # --log-patch --pkg=alt/path/to/package.json",
27
27
  "upd@m": "npx upd@m",
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
31
  "symfony server": "symfony serve --port=810X --listen-ip=0.0.0.0 # http://192.168.1.135:810X # -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
- "build tokens": "npx buildTokens --config ./src/css/tokens-config.mjs # o ./frontend/src/css/tokens-config.mjs",
34
- "check unresolved props": "npx checkUnresolvedProps --config ./src/css/tokens-config.mjs # o ./frontend/src/css/tokens-config.mjs",
33
+ "build tokens": "npx buildTokens --config ./app/css/tokens-config.mjs",
34
+ "check unresolved props": "npx checkUnresolvedProps --config ./app/css/tokens-config.mjs",
35
35
  "npm-outdated": "npm outdated",
36
36
  "npm-upd": "npm update --save"
37
37
  },
@@ -0,0 +1,50 @@
1
+ {
2
+ "folders": [
3
+ {
4
+ "path": "."
5
+ }
6
+ ],
7
+ "settings": {
8
+
9
+ "cssvar.files": [
10
+ "app/css/custom-properties.css",
11
+
12
+ // OPEN PROPS
13
+ // "./node_modules/open-props/open-props.min.css", // all open-props
14
+
15
+ ],
16
+ // Do not ignore node_modules css files, which is ignored by default
17
+ // "cssvar.ignore": [], // decomment if you are using open props
18
+
19
+ // add support for autocomplete in JS or JS like files
20
+ "cssvar.extensions": [
21
+ "css", "postcss", "jsx", "tsx", "scss"
22
+ ],
23
+
24
+ "favorites.resources": [
25
+ {
26
+ "filePath": "node_modules/@fontsource-variable",
27
+ "group": "Default"
28
+ },
29
+ {
30
+ "filePath": "node_modules/@fontsource",
31
+ "group": "Default"
32
+ },
33
+ {
34
+ "filePath": "node_modules/@massimo-cassandro",
35
+ "group": "Default"
36
+ },
37
+ {
38
+ "filePath": "node_modules/open-props",
39
+ "group": "Default"
40
+ }
41
+ ],
42
+
43
+ "bootstrapIntelliSense": {
44
+ "enable": false,
45
+ "bsVersion": "5.3.7",
46
+ "showSuggestions": false,
47
+ "autoComplete": false
48
+ }
49
+ }
50
+ }
@@ -0,0 +1,5 @@
1
+ Eseguire (dalla root del progetto):
2
+
3
+ ```
4
+ npx create-favicons --dir=./app/favicons
5
+ ```
@@ -12,291 +12,196 @@ YELLOW='\033[0;33m'
12
12
  GREEN='\033[0;32m'
13
13
  NC='\033[0m' # No Color
14
14
 
15
+ DEBUG=TRUE
16
+
15
17
  # Questo script richiede zsh: se lanciato con sh/bash blocca l'esecuzione
16
18
  if [ -z "$ZSH_VERSION" ]; then
17
19
  printf "${RED}Errore: lanciare con 'zsh starter-install.sh', non con sh/bash.${NC}\n" >&2
18
20
  exit 1
19
21
  fi
20
22
 
21
- # --no-npm: salta le installazioni npm (utile per testare rapidamente lo script)
22
- # --root / --frontend / --app: posizione della configurazione frontend (salta
23
- # il prompt, utile per esecuzioni non interattive)
24
- SKIP_NPM=0
25
- FRONTEND_CHOICE=""
26
- for ARG in "$@"; do
27
- case "$ARG" in
28
- --no-npm) SKIP_NPM=1 ;;
29
- --root) FRONTEND_CHOICE=1 ;;
30
- --frontend) FRONTEND_CHOICE=2 ;;
31
- --app) FRONTEND_CHOICE=3 ;;
32
- esac
33
- done
34
-
35
- # Wrapper: esegue "npm i ..." a meno che SKIP_NPM sia attivo
36
- npm_i() {
37
- if [ "$SKIP_NPM" = "1" ]; then
38
- echo "(--no-npm) skip: npm i $*"
39
- else
40
- npm i "$@"
41
- fi
42
- }
43
-
44
- # Configurazione variabili
45
- # BASE_URL="https://raw.githubusercontent.com/massimo-cassandro/minimo/refs/heads/main"
46
-
47
- # in locale: cat ....
48
- # da remoto curl -s
49
-
50
- # %:A risolve il percorso assoluto (anche con link simbolici)
51
- # %:h estrae l'header (ovvero la directory, come 'dirname')
52
23
  BASE_URL=${0:A:h}
53
24
 
54
25
  echo "BASE_URL: ${BASE_URL}"
55
26
 
56
- TEMPLATES_DIR="${BASE_URL}/templates"
57
- # WEBPACK_SOURCE_DIR="$BASE_URL/starter-kit"
58
- WEBPACK_SOURCE_DIR="$BASE_URL"
27
+ SOURCE_FILES_DIR="${BASE_URL}/source_files"
28
+
29
+ # webpack
30
+ WEBPACK_CONFIG_SOURCE_PATH="$BASE_URL"
31
+ WEBPACK_MODULES_SOURCE_PATH="${BASE_URL}/webpack-config-modules"
32
+ WEBPACK_MODULES_INSTALL_PATH="./webpack-config-modules"
59
33
 
60
34
  # protezione contro la sovrascrittura
61
35
  set -C
62
36
 
63
- # Array per tracciare i file già esistenti
64
- BLOCKED_FILES=()
65
37
 
66
- # Wrapper: copia solo se il file non esiste, altrimenti registra il blocco.
67
- # Con terzo argomento "new", se la destinazione esiste già la copia viene
68
- # comunque creata con prefisso NEW- (da integrare manualmente o rimuovere).
69
- # Con terzo argomento "underscore", stesso comportamento ma con prefisso _
70
- # (usato per package.json e *.code-workspace: il file esistente non viene
71
- # toccato, il template arriva accanto con un _ davanti al nome, da integrare
72
- # o rimuovere manualmente)
38
+ # Wrapper: copia il file, se esiste viene copiato con prefisso NEW- (da integrare manualmente o rimuovere).
73
39
  safe_cat() {
74
40
  local src="$1"
75
41
  local dest="$2"
76
- local mode="$3"
77
42
  if [ ! -f "$src" ]; then
78
43
  echo -e "${RED}Sorgente mancante: $src${NC}"
79
44
  return 1
80
45
  fi
81
46
  if [ -e "$dest" ]; then
82
- case "$mode" in
83
- new)
84
- local new_dest="$(dirname "$dest")/NEW-$(basename "$dest")"
85
- cat "$src" >| "$new_dest"
86
- BLOCKED_FILES+=("$dest → copiato come $new_dest")
87
- ;;
88
- underscore)
89
- local new_dest="$(dirname "$dest")/_$(basename "$dest")"
90
- cat "$src" >| "$new_dest"
91
- BLOCKED_FILES+=("$dest → copiato come $new_dest")
92
- ;;
93
- *)
94
- BLOCKED_FILES+=("$dest")
95
- ;;
96
- esac
47
+ local new_dest="$(dirname "$dest")/NEW-$(basename "$dest")"
48
+ cat "$src" >| "$new_dest"
97
49
  else
98
50
  cat "$src" > "$dest"
99
51
  fi
100
52
  }
101
53
 
102
- echo -e "${GREEN}...package.json${NC}"
103
- safe_cat "${BASE_URL}/package-tpl.json" package.json underscore
104
-
105
- echo -e "${GREEN}...gitignore${NC}"
106
- safe_cat "${TEMPLATES_DIR}/_gitignore" .gitignore new
107
-
108
- if [ -n "$FRONTEND_CHOICE" ]; then
109
- choice="$FRONTEND_CHOICE"
110
- else
111
- echo -e "\n${GREEN}Where do you want to install the frontend configuration?${NC}"
112
- echo "1) Root directory"
113
- echo "2) 'frontend' Directory"
114
- echo "3) 'app' Directory"
115
- read "?Choose (1, 2 or 3) [default: 2]: " choice < /dev/tty
116
- choice=${choice:-2}
117
- fi
118
-
119
- if [ "$choice" = "1" ]; then
120
- FRONTEND_INSTALL_PATH="."
121
- echo -e "${GREEN}Files will be installed in: root directory${NC}"
122
- elif [ "$choice" = "3" ]; then
123
- FRONTEND_INSTALL_PATH="./app"
124
- echo -e "${GREEN}Files will be installed in: ./app${NC}"
125
- else
126
- FRONTEND_INSTALL_PATH="./frontend"
127
- echo -e "${GREEN}Files will be installed in: ./frontend${NC}"
128
- fi
129
-
130
- if [ "$FRONTEND_INSTALL_PATH" != "." ]; then
131
- mkdir -p "$FRONTEND_INSTALL_PATH"
132
- fi
133
-
134
-
135
- echo -e "\n${GREEN}...config files & utilities${NC}"
136
-
137
- safe_cat "${TEMPLATES_DIR}/_browserslistrc" .browserslistrc new
138
- safe_cat "${TEMPLATES_DIR}/_editorconfig" .editorconfig new
139
- safe_cat "${TEMPLATES_DIR}/_prettierrc" .prettierrc new
140
- safe_cat "${TEMPLATES_DIR}/_root_htaccess" "${FRONTEND_INSTALL_PATH}/_root_htaccess"
141
- safe_cat "${TEMPLATES_DIR}/_root_robots.txt" "${FRONTEND_INSTALL_PATH}/_root_robots.txt"
142
- safe_cat "${TEMPLATES_DIR}/CLAUDE-frontend.md" "${FRONTEND_INSTALL_PATH}/CLAUDE.md"
143
-
144
- # jsconfig.json: sta SEMPRE nella root del progetto (è anche il file di
145
- # riferimento di vscode). I suoi path sono quindi relativi alla root: il
146
- # placeholder __FRONTEND__ viene risolto in base alla posizione scelta.
147
- # NB: webpack.config.mjs lo cerca in root anche quando è in una sottodirectory
148
- if [ "$FRONTEND_INSTALL_PATH" = "." ]; then
149
- FRONTEND_REL="./"
150
- else
151
- FRONTEND_REL="${FRONTEND_INSTALL_PATH}/"
152
- fi
153
- JSCONFIG_TPL="${TEMPLATES_DIR}/jsconfig.json"
154
- if [ ! -f "$JSCONFIG_TPL" ]; then
155
- echo -e "${RED}Sorgente mancante: ${JSCONFIG_TPL}${NC}"
156
- else
157
- JSCONFIG_TMP="$(mktemp)"
158
- sed "s|__FRONTEND__|${FRONTEND_REL}|g" "$JSCONFIG_TPL" >| "$JSCONFIG_TMP"
159
- safe_cat "$JSCONFIG_TMP" jsconfig.json new
160
- rm -f "$JSCONFIG_TMP"
161
- fi
162
-
163
- # code-workspace: se un file .code-workspace esiste già (qualunque sia il nome),
164
- # il template viene copiato accanto con un _ davanti al nome esistente
165
- WORKSPACE_TPL="${TEMPLATES_DIR}/__project__.code-workspace"
166
- WORKSPACE_FILES=( *.code-workspace(N) )
167
- if [ ${#WORKSPACE_FILES[@]} -gt 1 ]; then
168
- echo -e "${RED}Trovati più file .code-workspace (${WORKSPACE_FILES[*]}): copia saltata${NC}"
169
- elif [ ${#WORKSPACE_FILES[@]} -eq 0 ]; then
170
- safe_cat "$WORKSPACE_TPL" __project__.code-workspace
171
- else
172
- safe_cat "$WORKSPACE_TPL" "${WORKSPACE_FILES[1]}" underscore
54
+ FRONTEND_INSTALL_PATH="./app"
55
+ # se la cartella esiste già, i moduli vengono copiati in NEW-webpack-modules
56
+ # (da integrare manualmente o rimuovere)
57
+ if [ -d "$FRONTEND_INSTALL_PATH" ]; then
58
+ FRONTEND_INSTALL_PATH="./NEW-$(basename "$FRONTEND_INSTALL_PATH")"
173
59
  fi
174
60
 
61
+ echo -e "${GREEN}Files will be installed in: '${FRONTEND_INSTALL_PATH}'${NC}"
62
+ mkdir -p "${FRONTEND_INSTALL_PATH}"
175
63
 
176
- echo -e "\n${GREEN}...minimo${NC}"
177
- npm_i -S @massimo-cassandro/minimo
178
64
 
179
- echo -e "\n${GREEN}...eslint${NC}"
180
- npm_i -D @massimo-cassandro/eslint-config
181
- safe_cat "${TEMPLATES_DIR}/eslint.config.mjs" eslint.config.mjs new
182
65
 
183
- echo -e "\n${GREEN}...stylelint${NC}"
184
- npm_i -D @massimo-cassandro/stylelint-config
185
- safe_cat "${TEMPLATES_DIR}/stylelint.config.mjs" stylelint.config.mjs new
66
+ echo -e "${GREEN}...ROOT FILES${NC}"
67
+ safe_cat "${BASE_URL}/package-tpl.json" package.json
68
+ safe_cat "${WEBPACK_CONFIG_SOURCE_PATH}/webpack.config.mjs" webpack.config.mjs
186
69
 
187
- echo -e "\n${GREEN}...webpack${NC}"
188
- npm_i -D webpack-cli webpack-dev-server webpack-manifest-plugin webpack
189
- npm_i -D @babel/core @babel/preset-env babel-loader terser-webpack-plugin
190
- npm_i -D webpack-remove-empty-scripts copy-webpack-plugin html-loader html-webpack-plugin
191
- # npm_i -D @principalstudio/html-webpack-inject-preload file-loader # da installare solo se necessario
192
- npm_i -D postcss autoprefixer postcss-custom-media @csstools/postcss-global-data postcss-loader postcss-preset-env
193
- # NB: niente cssnano: la minificazione è di css-minimizer-webpack-plugin e cssnano
194
- # nel loader postcss eliminerebbe i commenti `purgecss ignore` prima di PurgeCSS
195
- npm_i -D mini-css-extract-plugin style-loader css-loader css-minimizer-webpack-plugin
196
- npm_i -D responsive-loader
197
- npm_i -D process dotenv-webpack
198
- npm_i -D svgo svg-url-loader svgo-loader svgo-add-viewbox mini-svg-data-uri
199
- npm_i -D ejs-loader
200
- npm_i -D purgecss-webpack-plugin glob
70
+ safe_cat "${SOURCE_FILES_DIR}/_gitignore" .gitignore
71
+ safe_cat "${SOURCE_FILES_DIR}/_browserslistrc" .browserslistrc
72
+ safe_cat "${SOURCE_FILES_DIR}/_editorconfig" .editorconfig
73
+ safe_cat "${SOURCE_FILES_DIR}/_prettierrc" .prettierrc
74
+ safe_cat "${SOURCE_FILES_DIR}/jsconfig.json" jsconfig.json
75
+ safe_cat "${SOURCE_FILES_DIR}/__project__.code-workspace" __project__.code-workspace
76
+ safe_cat "${SOURCE_FILES_DIR}/eslint.config.mjs" eslint.config.mjs
77
+ safe_cat "${SOURCE_FILES_DIR}/stylelint.config.mjs" stylelint.config.mjs
201
78
 
202
- npm_i -D style-dictionary
79
+ echo -e "${GREEN}...APP FILES${NC}"
80
+ safe_cat "${SOURCE_FILES_DIR}/_root_htaccess" "${FRONTEND_INSTALL_PATH}/_root_htaccess"
81
+ safe_cat "${SOURCE_FILES_DIR}/_root_robots.txt" "${FRONTEND_INSTALL_PATH}/_root_robots.txt"
82
+ safe_cat "${SOURCE_FILES_DIR}/CLAUDE-frontend.md" "${FRONTEND_INSTALL_PATH}/CLAUDE.md"
83
+ safe_cat "${WEBPACK_CONFIG_SOURCE_PATH}/webpack-template.ejs" "${FRONTEND_INSTALL_PATH}/tpl/index.ejs"
203
84
 
204
- safe_cat "${WEBPACK_SOURCE_DIR}/webpack.config.mjs" "${FRONTEND_INSTALL_PATH}/webpack.config.mjs"
205
-
206
- # cartella webpack
207
- WEBPACK_LOCAL_DIR="${FRONTEND_INSTALL_PATH}/webpack-modules"
208
- WEBPACK_MODULES_REMOTE_URL="${WEBPACK_SOURCE_DIR}/webpack-modules"
209
85
 
86
+ echo -e "${GREEN}..WEBPACK CONFIG MODULES${NC}"
210
87
  # se la cartella esiste già, i moduli vengono copiati in NEW-webpack-modules
211
88
  # (da integrare manualmente o rimuovere)
212
- if [ -d "$WEBPACK_LOCAL_DIR" ]; then
213
- NEW_WEBPACK_LOCAL_DIR="$(dirname "$WEBPACK_LOCAL_DIR")/NEW-$(basename "$WEBPACK_LOCAL_DIR")"
214
- BLOCKED_FILES+=("$WEBPACK_LOCAL_DIR → copiata come $NEW_WEBPACK_LOCAL_DIR")
215
- WEBPACK_LOCAL_DIR="$NEW_WEBPACK_LOCAL_DIR"
89
+ if [ -d "$WEBPACK_MODULES_INSTALL_PATH" ]; then
90
+ WEBPACK_MODULES_INSTALL_PATH="./NEW-$(basename "$WEBPACK_MODULES_INSTALL_PATH")"
216
91
  fi
217
92
 
218
- mkdir -p "$WEBPACK_LOCAL_DIR"
93
+ mkdir -p "$WEBPACK_MODULES_INSTALL_PATH"
219
94
 
220
95
  # copia tutti i file presenti in webpack-modules,
221
- for FILE in "${WEBPACK_MODULES_REMOTE_URL}"/*; do
96
+ for FILE in "${WEBPACK_MODULES_SOURCE_PATH}"/*; do
222
97
  [ -f "$FILE" ] || continue
223
- safe_cat "$FILE" "${WEBPACK_LOCAL_DIR}/$(basename "$FILE")"
98
+ safe_cat "$FILE" "${WEBPACK_MODULES_INSTALL_PATH}/$(basename "$FILE")"
99
+ done
100
+
101
+
102
+ echo -e "\n${GREEN}...NODE MODULES${NC}"
103
+
104
+ dependencies=(
105
+ @massimo-cassandro/minimo
106
+ )
107
+
108
+ devDependencies=(
109
+ @massimo-cassandro/eslint-config
110
+ @massimo-cassandro/stylelint-config
111
+
112
+ @babel/core
113
+ @babel/preset-env
114
+ @csstools/postcss-global-data
115
+ autoprefixer
116
+ babel-loader
117
+ copy-webpack-plugin
118
+ css-loader
119
+ css-minimizer-webpack-plugin
120
+ ejs-loader
121
+ glob
122
+ html-loader
123
+ html-webpack-plugin
124
+ mini-css-extract-plugin
125
+ mini-svg-data-uri
126
+ postcss
127
+ postcss-custom-media
128
+ postcss-loader
129
+ postcss-preset-env
130
+ process
131
+ purgecss-webpack-plugin
132
+ responsive-loader
133
+ style-dictionary
134
+ style-loader
135
+ svg-url-loader
136
+ svgo
137
+ svgo-add-viewbox
138
+ svgo-loader
139
+ terser-webpack-plugin
140
+ webpack
141
+ webpack-cli
142
+ webpack-dev-server
143
+ webpack-manifest-plugin
144
+ webpack-remove-empty-scripts
145
+
146
+ # da installare solo se necessari
147
+ # dotenv-webpack
148
+ # @principalstudio/html-webpack-inject-preload file-loader
149
+ )
150
+
151
+ if [ "$DEBUG" = "TRUE" ]; then
152
+ dependencies=( @massimo-cassandro/minimo )
153
+ devDependencies=()
154
+ fi
155
+
156
+ for pkg in "${dependencies[@]}"; do
157
+ npm i -S "$pkg"
224
158
  done
225
159
 
226
- echo -e "\n${GREEN}Creating your frontend application's folder structure${NC}"
160
+ for pkg in "${devDependencies[@]}"; do
161
+ npm i -S "$pkg"
162
+ done
227
163
 
228
- # La struttura viene creata nella posizione scelta a inizio script, coerente con
229
- # i percorsi attesi da webpack.config.mjs (`./src/...`, `./favicons/output`,
230
- # `./error-pages/...`), da jsconfig.json (@css, @src, @icons, @imgs) e da
231
- # postcss.config.mjs (`../src/css/custom-media.css`)
164
+ echo -e "\n${GREEN}...creating default folders${NC}"
232
165
  mkdir -p \
233
- "${FRONTEND_INSTALL_PATH}/src/css" \
234
- "${FRONTEND_INSTALL_PATH}/src/tpl" \
166
+ "${FRONTEND_INSTALL_PATH}/src" \
167
+ "${FRONTEND_INSTALL_PATH}/css" \
168
+ "${FRONTEND_INSTALL_PATH}/tpl" \
235
169
  "${FRONTEND_INSTALL_PATH}/icons" \
236
170
  "${FRONTEND_INSTALL_PATH}/imgs" \
237
171
  "${FRONTEND_INSTALL_PATH}/favicons" \
238
172
  "${FRONTEND_INSTALL_PATH}/error-pages"
239
173
 
240
- # template html di webpack (HtmlWebpackPlugin: `./src/tpl/index.ejs`)
241
- safe_cat "${WEBPACK_SOURCE_DIR}/webpack-template.ejs" "${FRONTEND_INSTALL_PATH}/src/tpl/index.ejs"
242
174
 
175
+ echo -e "${GREEN}...MINIMO FILES${NC}"
243
176
  # Sorgenti di minimo da copiare nel progetto: si usa il pacchetto appena
244
- # installato in node_modules (stessa versione che userà il progetto) e, in
245
- # fallback, la dir da cui è lanciato questo script (repo o pacchetto estratto)
246
- MINIMO_PKG_DIR=""
247
- for CANDIDATE in "./node_modules/@massimo-cassandro/minimo" "${BASE_URL}/../.."; do
248
- if [ -f "${CANDIDATE}/src/custom-properties.css" ]; then
249
- MINIMO_PKG_DIR="$CANDIDATE"
250
- break
251
- fi
252
- done
177
+ # installato in node_modules (stessa versione che userà il progetto)
178
+ MINIMO_PKG_DIR=./node_modules/@massimo-cassandro/minimo
253
179
 
254
- if [ -z "$MINIMO_PKG_DIR" ]; then
255
- if [ "$SKIP_NPM" = "1" ]; then
256
- echo -e "${YELLOW}(--no-npm) css di base, index.css, tokens-config e config favicons non copiati: npm i è stato saltato, quindi @massimo-cassandro/minimo non è ancora installato in node_modules (rilancia lo script senza --no-npm per completare la copia)${NC}"
257
- BLOCKED_FILES+=("css di base + index.css + tokens-config.mjs + create-favicons-cfg.mjs → saltati (--no-npm)")
258
- else
259
- echo -e "${RED}Sorgenti di minimo non trovati (né in ./node_modules/@massimo-cassandro/minimo né in ${BASE_URL}/../..): css di base, index.css, tokens-config e config favicons non copiati${NC}"
260
- BLOCKED_FILES+=("css di base + index.css + tokens-config.mjs + create-favicons-cfg.mjs → sorgenti minimo non trovati")
261
- fi
262
- else
263
- echo "sorgenti minimo: ${MINIMO_PKG_DIR}"
180
+ safe_cat "${MINIMO_PKG_DIR}/src/custom-properties.css" "${FRONTEND_INSTALL_PATH}/css/custom-properties.css"
181
+ safe_cat "${MINIMO_PKG_DIR}/src/custom-media.css" "${FRONTEND_INSTALL_PATH}/css/custom-media.css"
182
+ safe_cat "${MINIMO_PKG_DIR}/src/fonts.css" "${FRONTEND_INSTALL_PATH}/css/fonts.css"
264
183
 
265
- # css di partenza del progetto: solo i file destinati a essere personalizzati
266
- for FILE in custom-properties.css custom-media.css fonts.css; do
267
- safe_cat "${MINIMO_PKG_DIR}/src/${FILE}" "${FRONTEND_INSTALL_PATH}/src/css/${FILE}"
268
- done
184
+ # config di build-tokens: collocato accanto al css generato (custom-properties.css).
185
+ safe_cat "${MINIMO_PKG_DIR}/design-tokens/tokens-config-sample.mjs" "${FRONTEND_INSTALL_PATH}/css/tokens-config.mjs"
269
186
 
270
- # config di build-tokens: collocato accanto al css generato (custom-properties.css).
271
- # NB: i percorsi relativi nel file vanno adattati alla sua posizione effettiva
272
- safe_cat "${MINIMO_PKG_DIR}/design-tokens/tokens-config-sample.mjs" "${FRONTEND_INSTALL_PATH}/src/css/tokens-config.mjs"
187
+ # entry css principale del progetto: copia diretta di minimo.css, rinominato
188
+ # index.css e collocato sulla root di installazione (non in /src)
189
+ safe_cat "${MINIMO_PKG_DIR}/src/minimo.css" "${FRONTEND_INSTALL_PATH}/index.css"
273
190
 
274
- # entry css principale del progetto: copia diretta di minimo.css, rinominato
275
- # index.css e collocato sulla root di installazione (non in /src)
276
- safe_cat "${MINIMO_PKG_DIR}/src/minimo.css" "${FRONTEND_INSTALL_PATH}/index.css"
191
+ # favicons: config di default per `npx create-favicons`
192
+ safe_cat "${MINIMO_PKG_DIR}/dev-tools/create-favicons/src/default-params.mjs" "${FRONTEND_INSTALL_PATH}/favicons/create-favicons-cfg.mjs"
193
+ # favicons: istruzioni d'uso di `npx create-favicons`
194
+ safe_cat "${SOURCE_FILES_DIR}/favicons-readme.md" "${FRONTEND_INSTALL_PATH}/favicons/readme.md"
277
195
 
278
- # favicons: config di default per `npx create-favicons`
279
- safe_cat "${MINIMO_PKG_DIR}/dev-tools/create-favicons/src/default-params.mjs" "${FRONTEND_INSTALL_PATH}/favicons/create-favicons-cfg.mjs"
280
- fi
281
196
 
282
197
  # entry css critical (inline nei template html) e entry js, sulla root di
283
198
  # installazione accanto a index.css
284
- safe_cat "${TEMPLATES_DIR}/layout-critical.css" "${FRONTEND_INSTALL_PATH}/src/css/layout-critical.css"
285
- safe_cat "${TEMPLATES_DIR}/app_index.js" "${FRONTEND_INSTALL_PATH}/index.js"
199
+ safe_cat "${SOURCE_FILES_DIR}/app_index.js" "${FRONTEND_INSTALL_PATH}/index.js"
286
200
 
287
- # favicons: istruzioni d'uso di `npx create-favicons`
288
- safe_cat "${TEMPLATES_DIR}/favicons-readme.md" "${FRONTEND_INSTALL_PATH}/favicons/readme.md"
201
+ # layout critical css
202
+ safe_cat "${SOURCE_FILES_DIR}/layout-critical.css" "${FRONTEND_INSTALL_PATH}/css/layout-critical.css"
289
203
 
290
- set +C
291
204
 
292
- # Riepilogo finale dei file già esistenti
293
- if [ ${#BLOCKED_FILES[@]} -gt 0 ]; then
294
- echo -e "\n${YELLOW}*** File già esistenti (non copiati o copiati con prefisso NEW-/_): ***${NC}"
295
- for F in "${BLOCKED_FILES[@]}"; do
296
- echo -e "${YELLOW} ✗ $F${NC}"
297
- done
298
- else
299
- echo -e "\n${GREEN}Nessun file bloccato.${NC}"
300
- fi
301
205
 
206
+ set +C
302
207
  echo -e "\n\n${GREEN}*** END ***${NC}"
@@ -29,13 +29,13 @@ export default (loaderContext) => {
29
29
  // in ogni asset e interferirebbe con il purge, vedi sopra)
30
30
  globalData({
31
31
  files: [
32
- path.resolve(__dirname, '../src/css/custom-media.css'),
32
+ path.resolve(__dirname, '../app/css/custom-media.css'),
33
33
  ]
34
34
  }),
35
35
 
36
36
  // jitProps({
37
37
  // files: [
38
- // path.resolve(__dirname, '../src/css/custom-properties.css'),
38
+ // path.resolve(__dirname, '../app/css/custom-properties.css'),
39
39
  // ]
40
40
  // }),
41
41
 
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html>
2
- <!-- template html di webpack: installato in <frontend>/src/tpl/index.ejs
2
+ <!-- template html di webpack: installato in app/tpl/index.ejs
3
3
  (vedi HtmlWebpackPlugin in webpack.config.mjs).
4
4
  I require sono relativi a QUESTO file. -->
5
5
  <html lang="it">
@@ -9,7 +9,7 @@
9
9
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
10
10
 
11
11
  <!-- favicons (generate da `npx create-favicons`, vedi package.json) -->
12
- <%= require('../../favicons/output/favicons.incl.ejs')({}) %>
12
+ <%= require('../favicons/output/favicons.incl.ejs')({}) %>
13
13
 
14
14
  <title><%= htmlWebpackPlugin.options.title %></title>
15
15
  <!-- <base href="<%= htmlWebpackPlugin.options.base %>"> -->
@@ -13,22 +13,22 @@ import TerserPlugin from 'terser-webpack-plugin';
13
13
  import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
14
14
  import MiniCssExtractPlugin from 'mini-css-extract-plugin';
15
15
  import CopyWebpackPlugin from 'copy-webpack-plugin';
16
- import Dotenv from 'dotenv-webpack';
16
+ // import Dotenv from 'dotenv-webpack';
17
17
  import RemoveEmptyScriptsPlugin from 'webpack-remove-empty-scripts';
18
18
  // import { WebpackManifestPlugin } from 'webpack-manifest-plugin';
19
19
  // import HtmlWebpackInjectAttributesPlugin from 'html-webpack-inject-attributes-plugin';
20
20
 
21
- import { cssRules } from './webpack-modules/css-rules.mjs';
22
- import { createPurgeCSSPlugins } from './webpack-modules/purgecss-setup.mjs';
23
- import { getJsConfigAliases } from './webpack-modules/get-jsConfig-aliases.mjs';
24
- import { svgRules } from './webpack-modules/svg-rules.mjs';
21
+ import { cssRules } from './webpack-config-modules/css-rules.mjs';
22
+ import { createPurgeCSSPlugins } from './webpack-config-modules/purgecss-setup.mjs';
23
+ import { getJsConfigAliases } from './webpack-config-modules/get-jsConfig-aliases.mjs';
24
+ import { svgRules } from './webpack-config-modules/svg-rules.mjs';
25
25
 
26
26
  // --- config ---
27
27
  const __filename = fileURLToPath(import.meta.url)
28
28
  ,__dirname = path.dirname(__filename);
29
29
 
30
30
  // Risolve un percorso a partire dalla root del progetto, che coincide con la dir
31
- // di questo file solo se il frontend NON è in una sottodirectory (es. ./frontend):
31
+ // di questo file solo se il frontend NON è in una sottodirectory (es. ./app):
32
32
  // vengono provate entrambe le posizioni, in fallback la prima
33
33
  const fromProjectRoot = (relPath) => {
34
34
  const candidates = ['./', '../'].map(p => path.resolve(__dirname, p, relPath));
@@ -36,21 +36,23 @@ const fromProjectRoot = (relPath) => {
36
36
  };
37
37
 
38
38
  const isDevelopment = process.env.NODE_ENV === 'development'
39
+ ,devServerPort = 5704
40
+ // ,apiPort = 8104
39
41
  ,useSass = false
40
42
  ,inlineCssInDevMode = true
41
43
  ,useSvgo = true
42
44
  ,useSvgr = false // svg per react
43
- ,svgoConfig = useSvgo? (await import('./webpack-modules/svgo.config.mjs')).default : null
44
- ,postcssConfig_path = path.resolve(__dirname, './webpack-modules/postcss.config.mjs')
45
+ ,svgoConfig = useSvgo? (await import('./webpack-config-modules/svgo.config.mjs')).default : null
46
+ ,postcssConfig_path = path.resolve(__dirname, './webpack-config-modules/postcss.config.mjs')
45
47
  // dir di output: relativa a QUESTO file ('../build' se il frontend è in una
46
48
  // sottodirectory, './build' se webpack.config.mjs è nella root del progetto)
47
- ,output_dir = path.resolve(__dirname, '../build')
49
+ ,output_dir = path.resolve(__dirname, './build')
48
50
  // ,output_dir = isDevelopment? '_dev' : 'build' // symfony
49
51
  // dir delle favicons generate da `npx create-favicons` (vedi package.json):
50
52
  // il path assoluto serve a CopyWebpackPlugin/HtmlWebpackPlugin (i path
51
53
  // relativi sarebbero risolti dal cwd, non da questo file), mentre la regexp
52
54
  // resta relativa perché viene confrontata con i path dei moduli
53
- ,favicons_path = path.resolve(__dirname, './favicons/output')
55
+ ,favicons_path = path.resolve(__dirname, './app/favicons/output')
54
56
  ,favicons_path_regexp = /favicons\/output/ // source pattern per le favicons (regexp o null)
55
57
  // NB: jsconfig.json va tenuto in questa stessa dir (gli alias sono risolti
56
58
  // a partire dalla sua posizione)
@@ -95,9 +97,10 @@ const shared_chunk_paths = (module) => {
95
97
  const sep = '[\\\\/]'; // stringa che produce [\\/] nel pattern
96
98
  const pathsRegexp = new RegExp([
97
99
  'node_modules',
98
- 'frontend/src/js',
99
- 'frontend/src/web-components',
100
- 'frontend/src/components',
100
+ 'app/js',
101
+ 'app/src',
102
+ 'app/src/web-components',
103
+ 'app/src/components',
101
104
  ].map(p => `${sep}${p.replace(/\//g, sep)}${sep}`).join('|'));
102
105
 
103
106
  return pathsRegexp.test(module.nameForCondition?.() ?? '');
@@ -136,7 +139,7 @@ const CopyWebpackPluginPatterns = [
136
139
  ];
137
140
 
138
141
  // =>> PurgeCSS
139
- // Istanze e opzioni sono in webpack-modules/purgecss-setup.mjs: qui restano
142
+ // Istanze e opzioni sono in webpack-config-modules/purgecss-setup.mjs: qui restano
140
143
  // solo i flag e i dati di progetto (vedi createPurgeCSSPlugins nei `plugins`).
141
144
 
142
145
  // recupero metadata immagini
@@ -176,11 +179,11 @@ const config = {
176
179
  },
177
180
 
178
181
  // https://webpack.js.org/configuration/dotenv/
179
- dotenv: {
180
- prefix: 'APP_',
181
- dir: '/',
182
- template: ['.env', '.env.development'] //, '.env.local', '.env.[mode]', '.env.[mode].local'],
183
- },
182
+ // dotenv: {
183
+ // prefix: 'APP_',
184
+ // dir: '/',
185
+ // template: ['.env', '.env.development'] //, '.env.local', '.env.[mode]', '.env.[mode].local'],
186
+ // },
184
187
 
185
188
  devtool: isDevelopment ? 'inline-source-map' : false,
186
189
 
@@ -252,34 +255,30 @@ const config = {
252
255
  directory: path.join(__dirname, '/'),
253
256
  serveIndex: true
254
257
  },
258
+ open: { app: { name: 'Google Chrome' } },
259
+ compress: true,
260
+ hot: true,
261
+ port: devServerPort,
255
262
  /*
256
263
  proxy: [
257
264
  {
258
- // /login, /logout (redirect Google) e /api/... (fetch AJAX) vanno
259
- // inoltrati al server PHP reale (npm run "php server", vedi
260
- // package.json e app/router.php), che webpack-dev-server non può
261
- // eseguire da solo.
262
- context: ['/api', '/login', '/logout'],
263
- target: process.env.PHP_BASE_URL || 'http://localhost:8000'
265
+ context: ['/api'],
266
+ target: process.env.API_URL || `http://localhost:${apiPort}`
264
267
  }
265
268
  ],
266
269
  static: false,
267
270
  */
268
- open: { app: { name: 'Google Chrome' } },
269
- compress: true,
270
- hot: true,
271
- port: 5700
272
271
  },
273
272
 
274
273
  // =>> plugins
275
274
  plugins: [
276
275
  // =>> plugins: Dotenv
277
- new Dotenv({
278
- path: isDevelopment ? './.env.development' : './.env',
279
- expand: true,
280
- ignoreStub: true,
281
- allowEmptyValues: true
282
- }),
276
+ // new Dotenv({
277
+ // path: isDevelopment ? './.env.development' : './.env',
278
+ // expand: true,
279
+ // ignoreStub: true,
280
+ // allowEmptyValues: true
281
+ // }),
283
282
  new webpack.ProvidePlugin({
284
283
  process: 'process/browser.js'
285
284
  }),
@@ -404,7 +403,7 @@ const config = {
404
403
  // =>> plugins: PurgeCSSPlugin (per ultimo, attivo anche in dev)
405
404
  // https://github.com/FullHuman/purgecss/tree/main/packages/purgecss-webpack-plugin
406
405
  // https://purgecss.com/configuration.html
407
- // istanze e opzioni in webpack-modules/purgecss-setup.mjs (qui solo flag/dati progetto)
406
+ // istanze e opzioni in webpack-config-modules/purgecss-setup.mjs (qui solo flag/dati progetto)
408
407
  // `usePurgeCss: false` disattiva il purge per intero (utile per isolare rapidamente
409
408
  // eventuali problemi legati ad esso); `purgeCSSOptions` (variables/keyframes/debug,
410
409
  // vedi sopra) si applica solo quando è attivo
@@ -460,7 +459,7 @@ const config = {
460
459
 
461
460
  // elenco generato: usi di var() nei blocchi `purgecss ignore` e nei css
462
461
  // shadow-DOM/`?raw`, override cross-asset (seeds), con chiusura transitiva
463
- // delle dipendenze (vedi webpack-modules/purgecss-variables-safelist.mjs)
462
+ // delle dipendenze (vedi webpack-config-modules/purgecss-variables-safelist.mjs)
464
463
  variablesSafelist: {
465
464
  declarationGlobs: [
466
465
  path.resolve(__dirname, './index.css'), // entry css di default (vedi starter-install.sh)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@massimo-cassandro/minimo",
3
- "version": "1.29.4",
3
+ "version": "1.29.6",
4
4
  "description": "Light css framework & utilities",
5
5
  "type": "module",
6
6
  "main": "./index.js",
@@ -96,7 +96,7 @@
96
96
  "@massimo-cassandro/eslint-config": "^3.0.16",
97
97
  "@massimo-cassandro/stylelint-config": "^2.3.15",
98
98
  "@types/node": "^26.2.0",
99
- "jsdom": "^29.1.1",
99
+ "jsdom": "^30.0.1",
100
100
  "style-dictionary": "^5.5.1"
101
101
  },
102
102
  "dependencies": {
@@ -52,7 +52,7 @@ export default {
52
52
  border: {
53
53
  radius: {
54
54
  $type: 'dimension',
55
- $value: '{size.base}',
55
+ $value: '{radius.base}',
56
56
  }
57
57
  },
58
58
 
@@ -278,7 +278,7 @@
278
278
 
279
279
  --mpopup-backdrop-color: rgb(0 0 0 / .6);
280
280
  --mpopup-background-color: var(--body-background-color);
281
- --mpopup-border-radius: var(--size-base);
281
+ --mpopup-border-radius: var(--radius-base);
282
282
  --mpopup-btn-close-size: 1.6rem;
283
283
  --mpopup-content-padding: var(--size-base) var(--size-sm) var(--size-sm);
284
284
  --mpopup-content-scrollbar-padding-i-end: var(--size-md);
package/src/minimo.css CHANGED
@@ -1,9 +1,9 @@
1
1
  /* decomment if you want to use layers. see https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@layer */
2
2
  /* @layer reset, base, components, utilities, project, overrides; */
3
3
 
4
- /* @import '@src/fonts.css'; */
5
- /* @import '@src/css/custom-media.css'; */ /* managed by postcss */
6
- /* @import '@src/custom-properties.css' layer('base'); */ /* managed by postcss-jit-props */
4
+ /* @import '@css/fonts.css'; */
5
+ /* @import '@css/custom-media.css'; */ /* managed by postcss */
6
+ /* @import '@css/custom-properties.css' layer('base'); */ /* managed by postcss-jit-props */
7
7
 
8
8
  @import '@minimo/css/reset.css';
9
9
  @import '@minimo/css/layout-base.css';
@@ -1,94 +0,0 @@
1
- {
2
- "folders": [
3
- {
4
- "path": "."
5
- }
6
- ],
7
- "settings": {
8
-
9
- "cssvar.files": [
10
- "frontend/src/css/custom-properties.css", // project props (frontend in sottodirectory)
11
- // "src/css/custom-properties.css", // project props (frontend nella root)
12
-
13
- // OPEN PROPS
14
- // "./node_modules/open-props/open-props.min.css", // all open-props
15
-
16
- // "./node_modules/open-props/animations.min.css",
17
- // "./node_modules/open-props/aspects.min.css",
18
- // "./node_modules/open-props/borders.min.css",
19
- // "./node_modules/open-props/buttons.dark.min.css",
20
- // "./node_modules/open-props/buttons.light.min.css",
21
- // "./node_modules/open-props/buttons.min.css",
22
- // "./node_modules/open-props/durations.min.css",
23
- // "./node_modules/open-props/easings.min.css",
24
- // "./node_modules/open-props/fonts.min.css",
25
- // "./node_modules/open-props/gradients.min.css",
26
- // "./node_modules/open-props/masks.corner-cuts.min.css",
27
- // "./node_modules/open-props/masks.edges.min.css",
28
- // "./node_modules/open-props/media.min.css",
29
- // "./node_modules/open-props/normalize.dark.min.css",
30
- // "./node_modules/open-props/normalize.light.min.css",
31
- // "./node_modules/open-props/normalize.min.css",
32
- // "./node_modules/open-props/sizes.min.css",
33
- // "./node_modules/open-props/supports.min.css",
34
- // "./node_modules/open-props/theme.dark.switch.min.css",
35
- // "./node_modules/open-props/theme.light.switch.min.css",
36
- // "./node_modules/open-props/zindex.min.css",
37
-
38
- // "./node_modules/open-props/colors.min.css",
39
- // "./node_modules/open-props/colors-hsl.min.css",
40
- // "./node_modules/open-props/colors-hsl.shadow.min.css",
41
- // "./node_modules/open-props/colors-oklch.min.css",
42
- // "./node_modules/open-props/colors-oklch.shadow.min.css",
43
- // "./node_modules/open-props/oklch-hues.min.css",
44
- // "./node_modules/open-props/oklch-hues.shadow.min.css",
45
-
46
- // "./node_modules/open-props/shadows.min.css",
47
- // "./node_modules/open-props/animations.shadow.min.css",
48
- // "./node_modules/open-props/aspects.shadow.min.css",
49
- // "./node_modules/open-props/borders.shadow.min.css",
50
- // "./node_modules/open-props/colors.shadow.min.css",
51
- // "./node_modules/open-props/easings.shadow.min.css",
52
- // "./node_modules/open-props/fonts.shadow.min.css",
53
- // "./node_modules/open-props/gradients.shadow.min.css",
54
- // "./node_modules/open-props/normalize.shadow.min.css",
55
- // "./node_modules/open-props/shadows.shadow.min.css",
56
- // "./node_modules/open-props/sizes.shadow.min.css",
57
- // "./node_modules/open-props/zindex.shadow.min.css",
58
-
59
- ],
60
- // Do not ignore node_modules css files, which is ignored by default
61
- // "cssvar.ignore": [], // decomment if you are using open props
62
-
63
- // add support for autocomplete in JS or JS like files
64
- "cssvar.extensions": [
65
- "css", "postcss", "jsx", "tsx", "scss"
66
- ],
67
-
68
- "favorites.resources": [
69
- {
70
- "filePath": "node_modules/@fontsource-variable",
71
- "group": "Default"
72
- },
73
- {
74
- "filePath": "node_modules/@fontsource",
75
- "group": "Default"
76
- },
77
- {
78
- "filePath": "node_modules/@massimo-cassandro",
79
- "group": "Default"
80
- },
81
- {
82
- "filePath": "node_modules/open-props",
83
- "group": "Default"
84
- }
85
- ],
86
-
87
- "bootstrapIntelliSense": {
88
- "enable": false,
89
- "bsVersion": "5.3.7",
90
- "showSuggestions": false,
91
- "autoComplete": false
92
- }
93
- }
94
- }
@@ -1,5 +0,0 @@
1
- Eseguire (dalla root del progetto):
2
-
3
- ```
4
- npx create-favicons --dir=./favicons # o ./frontend/favicons, ./app/favicons
5
- ```