diff --git a/.env b/.env index 9afe33d7..60713c3f 100755 --- a/.env +++ b/.env @@ -1,6 +1,6 @@ -VITE_APP_VERSION="1.2.85" +VITE_APP_VERSION="1.2.86" VITE_LANG_DEFAULT="it" VITE_PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF" -VITE_SERVICE_WORKER_FILE="sw-1.2.85.js" +VITE_SERVICE_WORKER_FILE="sw-1.2.86.js" VITE_PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a" VITE_VUE_ROUTER_MODE="history" \ No newline at end of file diff --git a/_LIMBO/grid.html b/_LIMBO/grid.html new file mode 100644 index 00000000..e69de29b diff --git a/index.html b/index.html index cfd16c35..8c5ab6f9 100755 --- a/index.html +++ b/index.html @@ -10,7 +10,7 @@ - + diff --git a/package.json b/package.json index e0a96690..0aa63fe6 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "riso", - "version": "1.2.85", + "version": "1.2.86", "productName": "Riso 💚 - Rete Italiana Scambio orizzontale", "description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.", "author": "Surya", @@ -9,11 +9,11 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "APP_VERSION='1.2.85' PORT=8084 quasar dev", + "dev": "APP_VERSION='1.2.86' PORT=8084 quasar dev", "dev_noCheck": "SKIP_TSC=true quasar dev", "build": "quasar build", - "buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", - "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", + "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", + "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", "type-check": "vue-tsc --noEmit", "type-check:watch": "vue-tsc --noEmit --watch", "buildspa": "quasar build -m spa", @@ -21,8 +21,8 @@ "lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt", "lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt", "fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt", - "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.85' quasar dev -m pwa", - "spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.85' quasar dev", + "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa", + "spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.86' quasar dev", "debug": "quasar dev --mode debug", "test": "echo \"No test specified\" && exit 0", "generate-sw": "workbox generateSW workbox-config.js", diff --git a/scripts/_ALL_SITES/comunitanuovomondo.app/package.json b/scripts/_ALL_SITES/comunitanuovomondo.app/package.json index c87808b9..3b86daf9 100755 --- a/scripts/_ALL_SITES/comunitanuovomondo.app/package.json +++ b/scripts/_ALL_SITES/comunitanuovomondo.app/package.json @@ -1,6 +1,6 @@ { "name": "cnm", - "version": "1.2.85", + "version": "1.2.86", "description": "Comunita Nuovo Mondo", "productName": "ComunitaNuovoMondo", "author": "Surya", @@ -9,7 +9,7 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "PORT=8083 APP_VERSION='1.2.85' quasar dev", + "dev": "PORT=8083 APP_VERSION='1.2.86' quasar dev", "dev_noCheck": "SKIP_TSC=true quasar dev", "build": "quasar build", "buildpwa": "NODE_ENV=production quasar build -m pwa", @@ -21,8 +21,8 @@ "lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt", "lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt", "fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt", - "pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.85' quasar dev -m pwa", - "spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.85' quasar dev", + "pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.86' quasar dev -m pwa", + "spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.86' quasar dev", "debug": "quasar dev --mode debug", "test": "echo \"No test specified\" && exit 0", "generate-sw": "workbox generateSW workbox-config.js", diff --git a/scripts/_ALL_SITES/freeplanet.app/package.json b/scripts/_ALL_SITES/freeplanet.app/package.json index 16aa71e4..9f321e5f 100755 --- a/scripts/_ALL_SITES/freeplanet.app/package.json +++ b/scripts/_ALL_SITES/freeplanet.app/package.json @@ -1,6 +1,6 @@ { "name": "freeplanet", - "version": "1.2.85", + "version": "1.2.86", "description": "freeplanet", "productName": "freeplanet", "author": "Surya", @@ -9,11 +9,11 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "PORT=8087 APP_VERSION='1.2.85' quasar dev", + "dev": "PORT=8087 APP_VERSION='1.2.86' quasar dev", "dev_noCheck": "SKIP_TSC=true quasar dev", "build": "quasar build", - "buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", - "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", + "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", + "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", "type-check": "vue-tsc --noEmit", "type-check:watch": "vue-tsc --noEmit --watch", "buildspa": "quasar build -m spa", @@ -21,8 +21,8 @@ "lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt", "lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt", "fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt", - "pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.85' quasar dev -m pwa", - "spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.85' quasar dev", + "pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.86' quasar dev -m pwa", + "spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.86' quasar dev", "debug": "quasar dev --mode debug", "test": "echo \"No test specified\" && exit 0", "generate-sw": "workbox generateSW workbox-config.js", diff --git a/scripts/_ALL_SITES/germogliamo.app/package.json b/scripts/_ALL_SITES/germogliamo.app/package.json index 49021218..f765c129 100755 --- a/scripts/_ALL_SITES/germogliamo.app/package.json +++ b/scripts/_ALL_SITES/germogliamo.app/package.json @@ -1,6 +1,6 @@ { "name": "riso", - "version": "1.2.85", + "version": "1.2.86", "productName": "Riso 💚 - Rete Italiana Scambio orizzontale", "description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.", "author": "Surya", @@ -9,11 +9,11 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "APP_VERSION='1.2.85' PORT=8084 quasar dev", + "dev": "APP_VERSION='1.2.86' PORT=8084 quasar dev", "dev_noCheck": "SKIP_TSC=true quasar dev", "build": "quasar build", - "buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", - "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", + "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", + "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", "type-check": "vue-tsc --noEmit", "type-check:watch": "vue-tsc --noEmit --watch", "buildspa": "quasar build -m spa", @@ -21,8 +21,8 @@ "lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt", "lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt", "fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt", - "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.85' quasar dev -m pwa", - "spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.85' quasar dev", + "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa", + "spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.86' quasar dev", "debug": "quasar dev --mode debug", "test": "echo \"No test specified\" && exit 0", "generate-sw": "workbox generateSW workbox-config.js", diff --git a/scripts/_ALL_SITES/gruppomacro.app/package.json b/scripts/_ALL_SITES/gruppomacro.app/package.json index faf4ab12..fbde27f4 100755 --- a/scripts/_ALL_SITES/gruppomacro.app/package.json +++ b/scripts/_ALL_SITES/gruppomacro.app/package.json @@ -1,6 +1,6 @@ { "name": "gruppomacro", - "version": "1.2.85", + "version": "1.2.86", "productName": "Gruppo Macro", "description": "Il Gruppo Editoriale Macro, attivo dal 1987, è leader europeo nella pubblicazione di libri per il benessere e la consapevolezza. Con oltre 1.500 titoli, promuove una visione armonica del mondo, offrendo opere di autori internazionali e italiani come Gregg Braden, Bruce Lipton, Joe Dispenza, Louise Hay, Eckhart Tolle e molti altri. Scopri un'editoria che abbraccia il corpo, la mente, lo spirito e l'ecologia.", "author": "Surya", @@ -9,20 +9,20 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "PORT=8089 APP_VERSION='1.2.85' quasar dev", + "dev": "PORT=8089 APP_VERSION='1.2.86' quasar dev", "dev_noCheck": "SKIP_TSC=true quasar dev", "build": "quasar build", - "buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", - "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", + "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", + "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", "type-check": "vue-tsc --noEmit", "type-check:watch": "vue-tsc --noEmit --watch", - "buildspa": "APP_VERSION='1.2.85' quasar build -m spa", + "buildspa": "APP_VERSION='1.2.86' quasar build -m spa", "lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"", "lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt", "lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt", "fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt", - "pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.85' quasar dev -m pwa", - "spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.85' quasar dev", + "pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.86' quasar dev -m pwa", + "spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.86' quasar dev", "debug": "quasar dev --mode debug", "test": "echo \"No test specified\" && exit 0", "generate-sw": "workbox generateSW workbox-config.js", diff --git a/scripts/_ALL_SITES/nuovomondo.app/package.json b/scripts/_ALL_SITES/nuovomondo.app/package.json index 7d0351a4..a6235d9e 100755 --- a/scripts/_ALL_SITES/nuovomondo.app/package.json +++ b/scripts/_ALL_SITES/nuovomondo.app/package.json @@ -1,6 +1,6 @@ { "name": "nuovomondo", - "version": "1.2.85", + "version": "1.2.86", "description": "Nuovo Mondo", "productName": "Nuovo Mondo", "author": "Surya", @@ -9,11 +9,11 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "APP_VERSION='1.2.85' PORT=8083 quasar dev", + "dev": "APP_VERSION='1.2.86' PORT=8083 quasar dev", "dev_noCheck": "SKIP_TSC=true quasar dev", "build": "quasar build", - "buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", - "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", + "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", + "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", "type-check": "vue-tsc --noEmit", "type-check:watch": "vue-tsc --noEmit --watch", "buildspa": "quasar build -m spa", @@ -21,8 +21,8 @@ "lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt", "lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt", "fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt", - "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.85' quasar dev -m pwa", - "spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.85' quasar dev", + "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa", + "spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.86' quasar dev", "debug": "quasar dev --mode debug", "test": "echo \"No test specified\" && exit 0", "generate-sw": "workbox generateSW workbox-config.js", diff --git a/scripts/_ALL_SITES/nutriben-naturopatia.it/package.json b/scripts/_ALL_SITES/nutriben-naturopatia.it/package.json index a151fdfe..b15e9770 100755 --- a/scripts/_ALL_SITES/nutriben-naturopatia.it/package.json +++ b/scripts/_ALL_SITES/nutriben-naturopatia.it/package.json @@ -1,6 +1,6 @@ { "name": "nutriben", - "version": "1.2.85", + "version": "1.2.86", "description": "Nutriben", "productName": "Nutriben", "author": "Surya", @@ -9,20 +9,20 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "PORT=8093 APP_VERSION='1.2.85' quasar dev", + "dev": "PORT=8093 APP_VERSION='1.2.86' quasar dev", "dev_noCheck": "SKIP_TSC=true quasar dev", "build": "quasar build", - "buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", - "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", + "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", + "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", "type-check": "vue-tsc --noEmit", "type-check:watch": "vue-tsc --noEmit --watch", - "buildspa": "APP_VERSION='1.2.85' quasar build -m spa", + "buildspa": "APP_VERSION='1.2.86' quasar build -m spa", "lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"", "lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt", "lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt", "fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt", - "pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.85' quasar dev -m pwa", - "spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.85' quasar dev", + "pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.86' quasar dev -m pwa", + "spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.86' quasar dev", "debug": "quasar dev --mode debug", "test": "echo \"No test specified\" && exit 0", "generate-sw": "workbox generateSW workbox-config.js", diff --git a/scripts/_ALL_SITES/piuchebuono.app/package.json b/scripts/_ALL_SITES/piuchebuono.app/package.json index 08ddaf68..fdd0df15 100755 --- a/scripts/_ALL_SITES/piuchebuono.app/package.json +++ b/scripts/_ALL_SITES/piuchebuono.app/package.json @@ -1,6 +1,6 @@ { "name": "piuchebuono", - "version": "1.2.85", + "version": "1.2.86", "description": "PiuCheBuono", "productName": "PiuCheBuono", "author": "Surya", @@ -9,11 +9,11 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "PORT=8085 APP_VERSION='1.2.85' quasar dev", + "dev": "PORT=8085 APP_VERSION='1.2.86' quasar dev", "dev_noCheck": "SKIP_TSC=true quasar dev", "build": "quasar build", - "buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", - "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", + "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", + "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", "type-check": "vue-tsc --noEmit", "type-check:watch": "vue-tsc --noEmit --watch", "buildspa": "quasar build -m spa", @@ -21,8 +21,8 @@ "lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt", "lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt", "fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt", - "pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.85' quasar dev -m pwa", - "spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.85' quasar dev", + "pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.86' quasar dev -m pwa", + "spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.86' quasar dev", "debug": "quasar dev --mode debug", "test": "echo \"No test specified\" && exit 0", "generate-sw": "workbox generateSW workbox-config.js", diff --git a/scripts/_ALL_SITES/riso.app/package.json b/scripts/_ALL_SITES/riso.app/package.json index 49021218..f765c129 100755 --- a/scripts/_ALL_SITES/riso.app/package.json +++ b/scripts/_ALL_SITES/riso.app/package.json @@ -1,6 +1,6 @@ { "name": "riso", - "version": "1.2.85", + "version": "1.2.86", "productName": "Riso 💚 - Rete Italiana Scambio orizzontale", "description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.", "author": "Surya", @@ -9,11 +9,11 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "APP_VERSION='1.2.85' PORT=8084 quasar dev", + "dev": "APP_VERSION='1.2.86' PORT=8084 quasar dev", "dev_noCheck": "SKIP_TSC=true quasar dev", "build": "quasar build", - "buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", - "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", + "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", + "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa", "type-check": "vue-tsc --noEmit", "type-check:watch": "vue-tsc --noEmit --watch", "buildspa": "quasar build -m spa", @@ -21,8 +21,8 @@ "lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt", "lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt", "fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt", - "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.85' quasar dev -m pwa", - "spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.85' quasar dev", + "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa", + "spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.86' quasar dev", "debug": "quasar dev --mode debug", "test": "echo \"No test specified\" && exit 0", "generate-sw": "workbox generateSW workbox-config.js", diff --git a/src-pwa/custom-service-worker.js b/src-pwa/custom-service-worker.js index c43ad753..8345c651 100755 --- a/src-pwa/custom-service-worker.js +++ b/src-pwa/custom-service-worker.js @@ -3,7 +3,7 @@ /* global workbox */ /* global cfgenv */ -const VITE_APP_VERSION = '1.2.85'; +const VITE_APP_VERSION = '1.2.86'; // Costanti di configurazione const DYNAMIC_CACHE = 'dynamic-cache-v2'; diff --git a/src/common/shared_vuejs.ts b/src/common/shared_vuejs.ts index 7f957fd3..6c78fc75 100755 --- a/src/common/shared_vuejs.ts +++ b/src/common/shared_vuejs.ts @@ -324,6 +324,8 @@ export const shared_consts = { 'sectors', 'goods', 'sectorgoods', + 'bachecas', + 'sectorbachecas', 'catgrps', 'skills', 'subskills', @@ -443,6 +445,7 @@ export const shared_consts = { TABLES_REC_ID: [ 'skills', 'goods', + 'bachecas', 'subskills', 'myskills', 'mybachecas', @@ -791,98 +794,266 @@ export const shared_consts = { { value: 2, label: 'Si accettano cani', + icon: 'pets', + color: '#795548', // brown }, { value: 3, label: 'Si accettano gatti', + icon: 'pets', + color: '#FF9800', // orange }, { value: 4, label: "E' consentito fumare in casa", + icon: 'smoking_rooms', + color: '#9E9E9E', // grey }, { value: 5, label: 'Accessibile con sedia a rotelle', + icon: 'accessible', + color: '#2196F3', // blue }, { value: 6, label: 'Parcheggio gratuito nella proprietà', + icon: 'local_parking', + color: '#3F51B5', // indigo }, { value: 7, label: 'Wi-fi disponibile', + icon: 'wifi', + color: '#00BCD4', // cyan }, { value: 8, label: 'Sono permessi soggiorni a lungo termine', + icon: 'calendar_month', + color: '#009688', // teal }, { value: 9, label: 'Cucina Vegetariana', + icon: 'restaurant', + color: '#4CAF50', // green }, { value: 10, label: 'Cucina Vegana', + icon: 'spa', + color: '#8BC34A', // light-green }, { value: 11, label: 'Uso della Cucina', + icon: 'kitchen', + color: '#FFC107', // amber }, { value: 12, label: 'Uso della Lavatrice', + icon: 'local_laundry_service', + color: '#607D8B', // blue-grey }, { value: 13, label: 'Aria condizionata', + icon: 'ac_unit', + color: '#03A9F4', // light-blue }, { value: 14, label: 'Ventilatore', + icon: 'air', + color: '#00BCD4', // cyan }, { value: 15, label: "Doccia all'aperto", + icon: 'shower', + color: '#2196F3', // blue }, { value: 16, label: 'TV', + icon: 'tv', + color: '#673AB7', // deep-purple }, { value: 17, label: 'Eventi consentiti', + icon: 'celebration', + color: '#E91E63', // pink }, { value: 18, label: 'Adatto a bambini da 2 a 12 anni', + icon: 'child_care', + color: '#F9A825' }, { value: 19, label: 'Adatto ai neonati (fino ai 2 anni)', + icon: 'baby_changing_station', + color: '#F8BBD0', // pink-light }, { value: 20, label: 'Biancheria inclusa', + icon: 'bed', + color: '#9C27B0', // purple }, { value: 21, label: 'Biancheria su richiesta (a parte)', + icon: 'bedroom_parent', + color: '#673AB7', // deep-purple }, { value: 22, label: 'Asciugamani', + icon: 'dry_cleaning', + color: '#009688', // teal }, { value: 23, label: 'Asciugacapelli', + icon: 'iron', + color: '#F44336', // red }, { value: 24, label: 'Riscaldamento a legna', + icon: 'fireplace', + color: '#FF5722', // deep-orange }, { value: 25, label: 'Riscaldamento a gas', + icon: 'heat_pump', + color: '#FF9800', // orange + }, + { + value: 26, + label: 'Colazione inclusa', + icon: 'free_breakfast', + color: '#FFC107', // amber + }, + { + value: 27, + label: 'Giardino/Spazio esterno', + icon: 'yard', + color: '#4CAF50', // green + }, + { + value: 28, + label: 'Terrazzo/Balcone', + icon: 'balcony', + color: '#CDDC39', // lime + }, + { + value: 29, + label: 'Silenzioso/Zona tranquilla', + icon: 'volume_off', + color: '#607D8B', // blue-grey + }, + { + value: 30, + label: 'Vicino a mezzi pubblici', + icon: 'directions_bus', + color: '#3F51B5', // indigo + }, + { + value: 31, + label: 'Biciclette disponibili', + icon: 'directions_bike', + color: '#009688', // teal + }, + { + value: 32, + label: 'Camino', + icon: 'fireplace', + color: '#795548', // brown + }, + { + value: 33, + label: 'Barbecue', + icon: 'outdoor_grill', + color: '#F44336', // red + }, + { + value: 34, + label: 'Piscina', + icon: 'pool', + color: '#03A9F4', // light-blue + }, + { + value: 35, + label: 'Sauna', + icon: 'hot_tub', + color: '#FF5722', // deep-orange + }, + { + value: 36, + label: 'Vista panoramica', + icon: 'landscape', + color: '#9C27B0', // purple + }, + { + value: 37, + label: 'In campagna', + icon: 'nature', + color: '#4CAF50', // green + }, + { + value: 38, + label: 'In montagna', + icon: 'terrain', + color: '#795548', // brown + }, + { + value: 39, + label: 'Vicino al mare', + icon: 'beach_access', + color: '#2196F3', // blue + }, + { + value: 40, + label: 'Animali da fattoria', + icon: 'agriculture', + color: '#795548', // brown + }, + { + value: 41, + label: 'Orto/Permacultura', + icon: 'eco', + color: '#4CAF50', // green + }, + { + value: 42, + label: 'Prodotti biologici/km zero', + icon: 'local_florist', + color: '#8BC34A', // light-green + }, + { + value: 43, + label: 'Scambio lavoro/volontariato', + icon: 'handshake', + color: '#FF9800', // orange + }, + { + value: 44, + label: 'Comunità/Ecovillaggio', + icon: 'groups', + color: '#9C27B0', // purple + }, + { + value: 45, + label: 'Energie rinnovabili', + icon: 'solar_power', + color: '#FFEB3B', // yellow }, ], @@ -1947,17 +2118,17 @@ export const shared_consts = { icon: 'fas fa-home', }, { - value: 1610, // RISOHOME_MODERN + value: 1610, // RISOHOME_MODERN label: 'RISO Home Modern', icon: 'fas fa-home', }, { - value: 1620, // PAGERIS + value: 1620, // PAGERIS label: 'Pagina RIS', icon: 'fas fa-home', }, { - value: 1630, // CMYCIRCUITS + value: 1630, // CMYCIRCUITS label: 'CMyCircuits (Old Page)', icon: 'fas fa-home', }, @@ -2406,9 +2577,9 @@ export const shared_consts = { } else if (table === this.TABLES_MYBACHECAS) { proj = { recSkill: 1, - sector: 1, - idSector: 1, - idSkill: 1, + sectorBacheca: 1, + idSectorBacheca: 1, + idBacheca: 1, // 'idSubSkill': 1, idStatusSkill: 1, idContribType: 1, @@ -2690,5 +2861,5 @@ export const shared_consts = { FILETYPE: { IMG: 1, PDF: 2, - } + }, }; diff --git a/src/components/CBarSelection/CBarSelection.ts b/src/components/CBarSelection/CBarSelection.ts index f129ac11..9bb0875d 100755 --- a/src/components/CBarSelection/CBarSelection.ts +++ b/src/components/CBarSelection/CBarSelection.ts @@ -256,7 +256,11 @@ export default defineComponent({ if (recSector) { tools.setCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + recSector.value, newval) } - // setCategBySector('sectorgoods', table, newval) + } else if (table === toolsext.TABMYBACHECAS) { + const recSector = searchList.value.find((rec) => rec.table === toolsext.TABSECTORBACHECAS) + if (recSector) { + tools.setCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + recSector.value, newval) + } } diff --git a/src/components/CCatalogList/CCatalogList.vue b/src/components/CCatalogList/CCatalogList.vue index b4fbfe8c..7d8f6eb7 100755 --- a/src/components/CCatalogList/CCatalogList.vue +++ b/src/components/CCatalogList/CCatalogList.vue @@ -107,6 +107,13 @@ />
+ -
diff --git a/src/components/CEventsCalendar/CEventsCalendar.vue b/src/components/CEventsCalendar/CEventsCalendar.vue index c70d50ed..92dcf598 100755 --- a/src/components/CEventsCalendar/CEventsCalendar.vue +++ b/src/components/CEventsCalendar/CEventsCalendar.vue @@ -10,24 +10,48 @@ -->
- - + + {{ t('cal.event') }} - - + + - + Tra 1 Settimana - + Tra 2 Settimane - + 4 Eventi ogni Settimana @@ -86,7 +110,10 @@ :class="`cal__details` + ($q.dark.isActive ? `_darktheme` : ``)" v-html="myevent.details" >
-
+
{{ t('cal.teacher') }}: @@ -96,16 +123,17 @@
-
+
{{ t('cal.where') }}: Località @@ -129,17 +157,16 @@ > {{ t('event.price') }}: - {{ - getPrice(myevent) - }} + {{ getPrice(myevent) }}
-
+
{{ t('cal.when') }}: - +

- - + + {{ addOrUpdateEvent() }} {{ t('cal.event') }} - + - + - +

- +
@@ -507,28 +557,40 @@ - + - - + + {{ t('cal.booking') }} - + @@ -548,16 +610,20 @@ > {{ myevent.title }} -
+
{{ t('cal.when') }}: - +
- +
+ + - - - - + + {{ t('cal.booking') }} - + @@ -786,12 +854,13 @@ > {{ myevent.title }} -
+
{{ t('cal.when') }}: - +
@@ -812,18 +881,17 @@
- + @@ -956,20 +1024,13 @@ class="q-ma-xs" :class="badgeClasses(event, 'header')" :style="badgeStyles(event, 'header')" - style=" - width: 10px; - max-width: 10px; - height: 10px; - max-height: 10px; - " + style="width: 10px; max-width: 10px; height: 10px; max-height: 10px" >
diff --git a/src/components/CMyCardService/CMyCardService.scss b/src/components/CMyCardService/CMyCardService.scss index 0fbc9ebc..6a59d20f 100644 --- a/src/components/CMyCardService/CMyCardService.scss +++ b/src/components/CMyCardService/CMyCardService.scss @@ -1,43 +1,3 @@ -// ======================================== -// VARIABILI MODERNE CON GRADIENTI -// ======================================== -$primary-color: #1976d2; -$primary-light: #42a5f5; -$primary-dark: #1565c0; -$secondary-color: #26a69a; -$positive-color: #21ba45; -$negative-color: #c10015; -$info-color: #31ccec; -$warning-color: #f2c037; - -@use 'sass:color'; - -$grey-text: #555; -$grey-light: #999; -$grey-dark: #333; - -$border-radius: 12px; -$border-radius-sm: 8px; -$border-radius-lg: 16px; - -$transition-speed: 0.3s; -$shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08); -$shadow-md: 0 2px 8px rgba(0, 0, 0, 0.1); -$shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.15); - -$mobile-breakpoint: 768px; -$small-breakpoint: 600px; - -// ======================================== -// GRADIENTI MODERNI -// ======================================== -$gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%); -$gradient-secondary: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); -$gradient-info: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); -$gradient-positive: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%); -$gradient-card-light: linear-gradient(135deg, #fdfbfb 0%, #ebedee 100%); -$gradient-card-white: linear-gradient(to bottom, #ffffff 0%, #f8f9fa 100%); -$gradient-hover: linear-gradient(135deg, rgba(102, 126, 234, 0.05) 0%, rgba(118, 75, 162, 0.05) 100%); // ======================================== // PROFILE (con gradiente) @@ -858,4 +818,77 @@ $gradient-hover: linear-gradient(135deg, rgba(102, 126, 234, 0.05) 0%, rgba(118, border-left: 4px solid $positive-color; background: linear-gradient(to right, rgba(33, 186, 69, 0.08), transparent 20%); box-shadow: 0 2px 12px rgba(33, 186, 69, 0.1); +} + +.category-hierarchy { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 2px; + + .hierarchy-arrow { + opacity: 0.5; + font-size: 16px; + } + + @media (max-width: $mobile-breakpoint) { + gap: 0px; + } + +} + +.tag-chip { + height: 20px; + font-size: 0.9rem; + padding: 0 px; + border-radius: 4px; + box-shadow: none; + font-weight: 500; + + // Categoria principale - più scura e intensa + &.sector { + background: linear-gradient(135deg, $primary-color, #1976d2); + color: white; + } + + // Sottocategoria - stessa base ma più chiara + &.subsector { + background: linear-gradient(135deg, color.adjust($primary-color, $lightness: 10%), #42a5f5); + color: white; + opacity: 0.9; // Opzionale: leggera trasparenza + } + + @media (max-width: $mobile-breakpoint) { + height: 19px; + font-size: 0.8rem; + padding: 0 4px; + } + + :deep(.q-chip__content) { + padding: 0; + } +} + +.categories-dialog { + .dialog-header { + padding: 16px 20px; + } + + .dialog-content { + padding: 20px; + max-height: 60vh; + overflow-y: auto; + } + + .categories-grid { + display: flex; + flex-wrap: wrap; + gap: 10px; + } + + .category-chip { + font-size: 14px; + padding: 8px 12px; + font-weight: 500; + } } \ No newline at end of file diff --git a/src/components/CMyCardService/CMyCardService.ts b/src/components/CMyCardService/CMyCardService.ts index 2fe7793e..553aee40 100644 --- a/src/components/CMyCardService/CMyCardService.ts +++ b/src/components/CMyCardService/CMyCardService.ts @@ -87,6 +87,7 @@ export default defineComponent({ const showPic = ref(false) const loading = ref(false) + const showPreferencesDialog = ref(false) const $router = useRouter() @@ -275,19 +276,21 @@ export default defineComponent({ } function getRecGoodSkillByRec(rec: any) { - if (props.table === 'myskills') + if ((props.table === toolsext.TABMYSKILLS) || (props.table === toolsext.TABMYBACHECAS)) return rec.recSkill - else if (props.table === 'mygoods') + else if (props.table === toolsext.TABMYGOODS) return rec.recGood return null } function getSectorByRec(rec: any) { - if (props.table === 'myskills') + if (props.table === toolsext.TABMYSKILLS) return rec.sector - else if (props.table === 'mygoods') + else if (props.table === toolsext.TABMYGOODS) return rec.sectorGood + else if (props.table === toolsext.TABMYBACHECAS) + return rec.sectorBacheca return null } @@ -674,10 +677,24 @@ export default defineComponent({ emit('showInMap', rec) } + const arrSubSector = computed(() => { + return tools.getArrSubSector(props.table, myrec.value); + }); + const arrSector = computed(() => { + return tools.getArrSector(props.table, myrec.value); + }); + + const getColorSubSector = computed(() => { + return arrSector.value && arrSector.value.length == 1 ? arrSector.value[0].color : 'primary' + }) + onMounted(mounted) return { + getColorSubSector, + arrSector, + arrSubSector, expandDialog, profile, tools, @@ -735,6 +752,7 @@ export default defineComponent({ updatePart, numpart, colmyUserPeople, + showPreferencesDialog, } } }) diff --git a/src/components/CMyCardService/CMyCardService.vue b/src/components/CMyCardService/CMyCardService.vue index 405e45f9..a0c90518 100644 --- a/src/components/CMyCardService/CMyCardService.vue +++ b/src/components/CMyCardService/CMyCardService.vue @@ -431,6 +431,30 @@ > + - {{ getSectorByRec(myrec)[0].descr }} - - - {{ getRecGoodSkillByRec(myrec)[0].descr }} - +
+ + + {{ recSect.descr }} + + + + + {{ rec.descr }} + +
@@ -579,6 +624,7 @@ :rec="myrec" :type="costanti.FieldType.multiselect" :value="myrec.preferences" + size="md" :options=" globalStore.getTableJoinByName( toolsext.TABPREF, @@ -589,7 +635,7 @@ " :optval="fieldsTable.getKeyByTable(toolsext.TABPREF)" :optlab="fieldsTable.getLabelByTable(toolsext.TABPREF)" - :opticon="fieldsTable.getIconByTable(toolsext.TABPREF)" + :dense="false" > @@ -1041,7 +1087,9 @@
{{ $t('services.createdBy') }} {{ myrec.createdBy }}{{ + myrec.createdBy + }}
@@ -1415,21 +1463,64 @@
- +
+ + + + +
Categorie
+
+ + + + +
+ + + {{ tools.getPreferenceById(rec).label }} + +
+
+ + + + + + +
+
+ + - -
diff --git a/src/components/CMyChipList/CMyChipList.scss b/src/components/CMyChipList/CMyChipList.scss index 60f964b2..425610dc 100755 --- a/src/components/CMyChipList/CMyChipList.scss +++ b/src/components/CMyChipList/CMyChipList.scss @@ -1,80 +1,72 @@ // ======================================== -// CMyChipList - SCSS Moderno con Gradienti +// CMyChipList - RISO Design System // ======================================== -$primary-color: #1976d2; -$primary-light: #42a5f5; -$secondary-color: #26a69a; -$positive-color: #21ba45; -$negative-color: #c10015; -$info-color: #31ccec; -$warning-color: #f2c037; +.c-chiplist { + margin-bottom: $s-sm; -@use 'sass:color'; - -$border-radius-sm: 8px; -$border-radius: 10px; -$transition-speed: 0.3s; -$shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08); -$shadow-md: 0 2px 8px rgba(0, 0, 0, 0.1); - -$mobile-breakpoint: 768px; - -// ======================================== -// CONTAINER -// ======================================== -.q-mb-sm { - // Padding e margini ottimizzati - @media (max-width: $mobile-breakpoint) { - margin-bottom: 10px !important; + @media (max-width: $mobile) { + margin-bottom: $s-xs; } } // ======================================== -// LABEL/TITLE (con gradiente sottile) +// LABEL // ======================================== -.text-subtitle2 { - &.text-primary { - background: linear-gradient(135deg, $primary-color, color.adjust($primary-color, $lightness: 15%)); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - font-weight: 600; - letter-spacing: 0.02em; - margin-bottom: 8px; +.c-chiplist__label { + font-size: 0.9125rem; + font-weight: 600; + color: $mainColor; + margin-bottom: $s-xs; + letter-spacing: 0.02em; + background: linear-gradient(135deg, $mainColor, lighten($mainColor, 12%)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; - @media (max-width: $mobile-breakpoint) { - font-size: 0.875rem; - margin-bottom: 6px; - } + @media (max-width: $mobile) { + font-size: 0.85rem; + margin-bottom: 4px; } } // ======================================== // CHIPS CONTAINER // ======================================== -.q-gutter-sm { - &.row.wrap { - gap: 8px; +.c-chiplist__chips { + display: flex; + flex-wrap: wrap; + gap: 6px; - @media (max-width: $mobile-breakpoint) { - gap: 6px; - } + @media (max-width: $mobile) { + gap: 4px; } } // ======================================== -// SINGLE CHIP (con gradienti bellissimi!) +// SINGLE CHIP - RISO Style // ======================================== -.q-chip { +.c-chip { position: relative; overflow: hidden; - transition: all $transition-speed cubic-bezier(0.4, 0, 0.2, 1); - border-radius: $border-radius !important; + border-radius: 20px !important; + font-size: 0.9125rem; font-weight: 500; letter-spacing: 0.01em; + padding: 4px 10px !important; + height: auto !important; + min-height: 26px; + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.08); + + @media (max-width: $mobile) { + font-size: 0.85rem; + padding: 2px 4px !important; + min-height: 24px; + border-radius: 16px !important; + } - // Effetto luce scorrevole + // Gradiente di luce animato &::before { content: ''; position: absolute; @@ -82,171 +74,255 @@ $mobile-breakpoint: 768px; left: -100%; width: 100%; height: 100%; - background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); + background: linear-gradient(90deg, + transparent, + rgba(255, 255, 255, 0.25), + transparent + ); transition: left 0.5s ease; } - // Shadow con gradiente - &.shadow-1 { - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12); + // Testo con ombra per leggibilità + &::v-deep(.q-chip__content) { + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); + white-space: nowrap; + + @media (max-width: $mobile) { + font-size: 0.75rem; + } } - // Padding compatto - &.q-px-sm { - padding-left: 10px !important; - padding-right: 10px !important; - - @media (max-width: $mobile-breakpoint) { - padding-left: 8px !important; - padding-right: 8px !important; - font-size: 0.8125rem !important; + // Icona + &::v-deep(.q-icon) { + font-size: 1rem; + margin-right: 4px; + transition: transform 0.25s ease; + + @media (max-width: $mobile) { + font-size: 0.875rem; + margin-right: 3px; } } // Hover effect &:hover { - transform: translateY(-2px) scale(1.02); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18); + transform: translateY(-1px) scale(1.02); + box-shadow: 0 3px 8px rgba(0, 0, 0, 0.16), 0 2px 4px rgba(0, 0, 0, 0.12); &::before { left: 100%; } - } - // Colori con gradienti - &[class*='bg-primary'], - &[class*='bg-blue'] { - background: linear-gradient(135deg, $primary-color, color.adjust($primary-color, $lightness: 10%)) !important; - box-shadow: 0 2px 8px rgba($primary-color, 0.3); - - &:hover { - background: linear-gradient(135deg, color.adjust($primary-color, $lightness: -5%), $primary-color) !important; - box-shadow: 0 4px 12px rgba($primary-color, 0.4); + &::v-deep(.q-icon) { + transform: scale(1.1) rotate(5deg); } } - &[class*='bg-secondary'], - &[class*='bg-teal'] { - background: linear-gradient(135deg, $secondary-color, color.adjust($secondary-color, $lightness: 10%)) !important; - box-shadow: 0 2px 8px rgba($secondary-color, 0.3); - - &:hover { - background: linear-gradient(135deg, color.adjust($secondary-color, $lightness: -5%), $secondary-color) !important; - box-shadow: 0 4px 12px rgba($secondary-color, 0.4); - } - } - - &[class*='bg-positive'], - &[class*='bg-green'] { - background: linear-gradient(135deg, $positive-color, color.adjust($positive-color, $lightness: 10%)) !important; - box-shadow: 0 2px 8px rgba($positive-color, 0.3); - - &:hover { - background: linear-gradient(135deg, color.adjust($positive-color, $lightness: -5%), $positive-color) !important; - box-shadow: 0 4px 12px rgba($positive-color, 0.4); - } - } - - &[class*='bg-negative'], - &[class*='bg-red'] { - background: linear-gradient(135deg, $negative-color, color.adjust($negative-color, $lightness: 10%)) !important; - box-shadow: 0 2px 8px rgba($negative-color, 0.3); - - &:hover { - background: linear-gradient(135deg, color.adjust($negative-color, $lightness: -5%), $negative-color) !important; - box-shadow: 0 4px 12px rgba($negative-color, 0.4); - } - } - - &[class*='bg-warning'], - &[class*='bg-orange'], - &[class*='bg-amber'] { - background: linear-gradient(135deg, $warning-color, color.adjust($warning-color, $lightness: 10%)) !important; - box-shadow: 0 2px 8px rgba($warning-color, 0.3); - - &:hover { - background: linear-gradient(135deg, color.adjust($warning-color, $lightness: -5%), $warning-color) !important; - box-shadow: 0 4px 12px rgba($warning-color, 0.4); - } - } - - &[class*='bg-info'], - &[class*='bg-cyan'] { - background: linear-gradient(135deg, $info-color, color.adjust($info-color, $lightness: 10%)) !important; - box-shadow: 0 2px 8px rgba($info-color, 0.3); - - &:hover { - background: linear-gradient(135deg, color.adjust($info-color, $lightness: -5%), $info-color) !important; - box-shadow: 0 4px 12px rgba($info-color, 0.4); - } - } - - &[class*='bg-purple'] { - background: linear-gradient(135deg, #9c27b0, color.adjust(#9c27b0, $lightness: 10%)) !important; - box-shadow: 0 2px 8px rgba(#9c27b0, 0.3); - - &:hover { - background: linear-gradient(135deg, color.adjust(#9c27b0, $lightness: -5%), #9c27b0) !important; - box-shadow: 0 4px 12px rgba(#9c27b0, 0.4); - } - } - - &[class*='bg-pink'] { - background: linear-gradient(135deg, #e91e63, color.adjust(#e91e63, $lightness: 10%)) !important; - box-shadow: 0 2px 8px rgba(#e91e63, 0.3); - - &:hover { - background: linear-gradient(135deg, color.adjust(#e91e63, $lightness: -5%), #e91e63) !important; - box-shadow: 0 4px 12px rgba(#e91e63, 0.4); - } - } - - &[class*='bg-grey'], - &[class*='bg-gray'] { - background: linear-gradient(135deg, #757575, color.adjust(#757575, $lightness: 10%)) !important; - box-shadow: 0 2px 8px rgba(#757575, 0.3); - - &:hover { - background: linear-gradient(135deg, color.adjust(#757575, $lightness: -5%), #757575) !important; - box-shadow: 0 4px 12px rgba(#757575, 0.4); - } - } - - // Icon dentro il chip - .q-icon { - transition: transform $transition-speed ease; - } - - &:hover .q-icon { - transform: scale(1.1) rotate(5deg); - } - - // Text color bianco con ombra sottile per leggibilità - &[class*='text-white'] { - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); - } -} - -// ======================================== -// DENSE VARIANT -// ======================================== -.q-chip--dense { - padding: 3px 8px !important; - font-size: 0.8125rem; - - @media (max-width: $mobile-breakpoint) { - padding: 2px 6px !important; + // Dense variant + &.q-chip--dense { + padding: 3px 8px !important; + min-height: 24px; font-size: 0.75rem; + + @media (max-width: $mobile) { + padding: 2px 6px !important; + min-height: 22px; + font-size: 0.6875rem; + } } } // ======================================== -// ANIMATION +// SIZE VARIANTS // ======================================== -@keyframes chipAppear { + +// Medium size +.c-chip--md { + font-size: 0.9375rem !important; + padding: 6px 14px !important; + min-height: 34px !important; + border-radius: 24px !important; + + &::v-deep(.q-chip__content) { + font-size: 0.9375rem; + } + + &::v-deep(.q-icon) { + font-size: 1.25rem !important; + margin-right: 6px; + } + + @media (max-width: $mobile) { + font-size: 0.875rem !important; + padding: 5px 12px !important; + min-height: 32px !important; + border-radius: 20px !important; + + &::v-deep(.q-chip__content) { + font-size: 0.875rem; + } + + &::v-deep(.q-icon) { + font-size: 1.125rem !important; + margin-right: 5px; + } + } +} + +// Large size +.c-chip--lg { + font-size: 1.0625rem !important; + padding: 8px 18px !important; + min-height: 42px !important; + border-radius: 28px !important; + font-weight: 600; + + &::v-deep(.q-chip__content) { + font-size: 1.0625rem; + font-weight: 600; + } + + &::v-deep(.q-icon) { + font-size: 1.5rem !important; + margin-right: 8px; + } + + @media (max-width: $mobile) { + font-size: 1rem !important; + padding: 7px 16px !important; + min-height: 38px !important; + border-radius: 24px !important; + + &::v-deep(.q-chip__content) { + font-size: 1rem; + } + + &::v-deep(.q-icon) { + font-size: 1.375rem !important; + margin-right: 7px; + } + } +} + +// ======================================== +// GRADIENTI PER COLORI - RISO Style +// ======================================== + +// Blue/Primary +.c-chip.bg-blue, +.c-chip.bg-primary, +.c-chip.bg-indigo, +.c-chip.bg-light-blue { + background: linear-gradient(135deg, #1976d2, #42a5f5) !important; + + &:hover { + background: linear-gradient(135deg, #1565c0, #1976d2) !important; + } +} + +// Teal/Cyan +.c-chip.bg-teal, +.c-chip.bg-cyan { + background: linear-gradient(135deg, #00897b, #26a69a) !important; + + &:hover { + background: linear-gradient(135deg, #00796b, #00897b) !important; + } +} + +// Green +.c-chip.bg-green, +.c-chip.bg-light-green { + background: linear-gradient(135deg, #388e3c, #66bb6a) !important; + + &:hover { + background: linear-gradient(135deg, #2e7d32, #388e3c) !important; + } +} + +// Purple/Deep Purple +.c-chip.bg-purple, +.c-chip.bg-deep-purple { + background: linear-gradient(135deg, #7b1fa2, #9c27b0) !important; + + &:hover { + background: linear-gradient(135deg, #6a1b9a, #7b1fa2) !important; + } +} + +// Pink +.c-chip.bg-pink { + background: linear-gradient(135deg, #c2185b, #e91e63) !important; + + &:hover { + background: linear-gradient(135deg, #ad1457, #c2185b) !important; + } +} + +// Orange/Amber +.c-chip.bg-orange, +.c-chip.bg-amber, +.c-chip.bg-deep-orange { + background: linear-gradient(135deg, #f57c00, #ff9800) !important; + + &:hover { + background: linear-gradient(135deg, #ef6c00, #f57c00) !important; + } +} + +// Yellow/Lime +.c-chip.bg-yellow, +.c-chip.bg-lime { + background: linear-gradient(135deg, #f9a825, #fdd835) !important; + color: rgba(0, 0, 0, 0.87) !important; + + &::v-deep(.q-chip__content) { + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); + color: rgba(0, 0, 0, 0.87) !important; + } + + &:hover { + background: linear-gradient(135deg, #f57f17, #f9a825) !important; + } +} + +// Red/Negative +.c-chip.bg-red, +.c-chip.bg-negative { + background: linear-gradient(135deg, #c62828, #e53935) !important; + + &:hover { + background: linear-gradient(135deg, #b71c1c, #c62828) !important; + } +} + +// Brown +.c-chip.bg-brown { + background: linear-gradient(135deg, #5d4037, #6d4c41) !important; + + &:hover { + background: linear-gradient(135deg, #4e342e, #5d4037) !important; + } +} + +// Grey/Blue Grey +.c-chip.bg-grey, +.c-chip.bg-gray, +.c-chip.bg-blue-grey { + background: linear-gradient(135deg, #546e7a, #78909c) !important; + + &:hover { + background: linear-gradient(135deg, #455a64, #546e7a) !important; + } +} + +// ======================================== +// ANIMAZIONE INGRESSO +// ======================================== +@keyframes chipFadeIn { from { opacity: 0; - transform: scale(0.8) translateY(10px); + transform: scale(0.92) translateY(4px); } to { opacity: 1; @@ -254,29 +330,28 @@ $mobile-breakpoint: 768px; } } -.q-chip { - animation: chipAppear 0.3s ease-out; - animation-fill-mode: both; +.c-chip { + animation: chipFadeIn 0.25s ease-out backwards; - // Stagger animation per chip multipli - @for $i from 1 through 20 { + // Stagger per chip multipli + @for $i from 1 through 25 { &:nth-child(#{$i}) { - animation-delay: #{$i * 0.05}s; + animation-delay: #{$i * 0.04}s; } } } // ======================================== -// GLASSMORPHISM VARIANT (opzionale) +// RESPONSIVE TOUCH OPTIMIZATION // ======================================== -.q-chip.glass-effect { - background: rgba(255, 255, 255, 0.2) !important; - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); - box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); - - &:hover { - background: rgba(255, 255, 255, 0.3) !important; - box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15); +@media (max-width: $mobile) { + .c-chip { + // Touch target più grande su mobile + min-height: 28px; + + &:active { + transform: scale(0.96); + transition-duration: 0.1s; + } } } \ No newline at end of file diff --git a/src/components/CMyChipList/CMyChipList.ts b/src/components/CMyChipList/CMyChipList.ts index 0d93712d..9390c4c9 100755 --- a/src/components/CMyChipList/CMyChipList.ts +++ b/src/components/CMyChipList/CMyChipList.ts @@ -63,6 +63,12 @@ export default defineComponent({ required: false, default: '', }, + size: { + type: String, + required: false, + default: 'sm', + validator: (value: string) => ['sm', 'md', 'lg'].includes(value), + }, }, components: {}, setup(props, { emit }) { @@ -85,7 +91,7 @@ export default defineComponent({ // --- MULTISELECT: itera sulle selezioni, non sulle options --- if (props.type === costanti.FieldType.multiselect) { if (Array.isArray(myval.value) && myval.value.length) { - myval.value.forEach((recout, idx) => { + myval.value.forEach((recout: any, idx) => { // valore "chiave" della selezione const value = props.type_out === costanti.FieldType.object @@ -105,14 +111,14 @@ export default defineComponent({ recFromOptions || (typeof recout === 'object' ? recout : null); const mydata = { - label: null, + label: '', value, valbool: true, - icon: '', + icon: baseRec?.icon || '', // priorità: optcolor -> color su record -> fallback colore color: - (props.optcolor && baseRec?.[props.optcolor]) || baseRec?.color || + (props.optcolor && baseRec?.[props.optcolor]) || tools.getColorByIndexBest(idx), }; @@ -146,17 +152,17 @@ export default defineComponent({ } else if (props.type === costanti.FieldType.select) { // --- SELECT: itera sulle options e trova la corrispondenza --- if (Array.isArray(props.options) && props.options.length) { - props.options.forEach((rec, index) => { + props.options.forEach((rec: any, index) => { if (myval.value === rec?.[props.optval]) { const mydata = { value: myval.value, valbool: true, icon: '', color: - (props.optcolor && rec?.[props.optcolor]) || rec?.color || + (props.optcolor && rec?.[props.optcolor]) || tools.getColorByIndexBest(index), - label: null, + label: '', }; if (props.opticon && rec?.[props.opticon]) mydata.icon = rec[props.opticon]; @@ -182,23 +188,26 @@ export default defineComponent({ } else { // --- BITMASK (o altro tipo legacy): itera sulle options e verifica i bit attivi --- if (Array.isArray(props.options) && props.options.length) { - props.options.forEach((rec, index) => { + props.options.forEach((rec: any, index) => { const optVal = rec?.[props.optval]; if (optVal == null) return; + if (tools.isBitActive(myval.value, optVal)) { const mydata = { label: t(tools.getValueByFunzOrVal(rec, props.optlab)), value: optVal, valbool: true, - icon: '', + icon: tools.getValueByFunzOrVal(rec, 'icon') || '', color: + rec.color || (props.optcolor && rec?.[props.optcolor]) || - rec?.color || tools.getColorByIndexBest(index), }; - if (props.opticon && rec?.[props.opticon]) mydata.icon = rec[props.opticon]; + if (rec[props.opticon]) { + if (props.opticon && rec?.[props.opticon]) mydata.icon = rec[props.opticon]; + } myarrvalues.value.push(mydata); } @@ -215,7 +224,7 @@ export default defineComponent({ label: props.rec?.[props.optlab], value: 0, valbool: true, - icon: '', + icon: props.rec?.icon || '', color: tools.getColorByIndexBest(0), }; diff --git a/src/components/CMyChipList/CMyChipList.vue b/src/components/CMyChipList/CMyChipList.vue index b138d46b..3d219f2e 100755 --- a/src/components/CMyChipList/CMyChipList.vue +++ b/src/components/CMyChipList/CMyChipList.vue @@ -1,21 +1,18 @@ diff --git a/src/components/CMySelect/CMySelect.vue b/src/components/CMySelect/CMySelect.vue index 0ceffef0..76ac6747 100755 --- a/src/components/CMySelect/CMySelect.vue +++ b/src/components/CMySelect/CMySelect.vue @@ -45,13 +45,13 @@ > Clicca qui per cercarlo su GM - - Testo non trovato: '{{ mystr }}' - + Testo non trovato: '{{ mystr }}' - Digita il testo da cercare + + Digita il testo da cercare + @@ -80,7 +80,9 @@