@woodylab/payload 0.0.86 → 0.0.89
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/dist/acl/hasRoles.js +17 -0
- package/dist/acl/index.js +1 -0
- package/dist/config/blocks/blockCarousel.d.ts +1 -1
- package/dist/config/blocks/blockCarousel.js +102 -0
- package/dist/config/blocks/blockDisclosureList.d.ts +1 -1
- package/dist/config/blocks/blockDisclosureList.js +58 -0
- package/dist/config/blocks/blockGrid.d.ts +1 -1
- package/dist/config/blocks/blockGrid.js +161 -0
- package/dist/config/blocks/blockGridContent.d.ts +1 -1
- package/dist/config/blocks/blockGridContent.js +195 -0
- package/dist/config/blocks/blockHtmlElement.d.ts +5 -2
- package/dist/config/blocks/blockHtmlElement.js +13 -0
- package/dist/config/blocks/blockImage.d.ts +1 -1
- package/dist/config/blocks/blockImage.js +15 -0
- package/dist/config/blocks/blockParallax.d.ts +1 -1
- package/dist/config/blocks/blockParallax.js +76 -0
- package/dist/config/blocks/blockTabs.d.ts +1 -1
- package/dist/config/blocks/blockTabs.js +24 -0
- package/dist/config/blocks/blockView.d.ts +2 -0
- package/dist/config/blocks/blockView.js +234 -0
- package/dist/config/collections/collectionMenus.js +41 -0
- package/dist/config/globals/configFooter.d.ts +1 -1
- package/dist/config/globals/configFooter.js +46 -0
- package/dist/config/globals/configHeader.d.ts +1 -1
- package/dist/config/globals/configHeader.js +50 -0
- package/dist/config/globals/configSettings.d.ts +1 -1
- package/dist/config/globals/configSettings.js +144 -0
- package/dist/config/index.cjs.js +1 -1
- package/dist/config/index.esm.js +1 -1
- package/dist/config/index.js +15 -0
- package/dist/enums/index.js +1 -0
- package/dist/enums/userRoles.js +8 -0
- package/dist/fields/fieldArray.js +9 -0
- package/dist/fields/fieldBlocks.js +9 -0
- package/dist/fields/fieldCheckbox.js +11 -0
- package/dist/fields/fieldCode.js +8 -0
- package/dist/fields/fieldDate.js +15 -0
- package/dist/fields/fieldEmail.js +8 -0
- package/dist/fields/fieldJoin.js +9 -0
- package/dist/fields/fieldNumber.js +8 -0
- package/dist/fields/fieldPoint.js +8 -0
- package/dist/fields/fieldRadioGroup.js +18 -0
- package/dist/fields/fieldRelationship.js +9 -0
- package/dist/fields/fieldRichText.js +12 -0
- package/dist/fields/fieldSelect.js +9 -0
- package/dist/fields/fieldText.js +8 -0
- package/dist/fields/fieldTextArea.js +8 -0
- package/dist/fields/fieldUpload.js +9 -0
- package/dist/fields/index.cjs.js +1 -1
- package/dist/fields/index.esm.js +1 -1
- package/dist/fields/index.js +37 -0
- package/dist/fields/layout/fieldContainerProps.js +74 -0
- package/dist/fields/section/fieldAction.js +236 -0
- package/dist/fields/section/fieldConfigProps.js +11 -0
- package/dist/fields/section/fieldContentProps.js +11 -0
- package/dist/fields/section/fieldSectionProps.js +15 -0
- package/dist/fields/section/fieldSectionTabs.js +40 -0
- package/dist/fields/style/fieldColor.js +21 -0
- package/dist/fields/style/fieldContainerWidths.js +17 -0
- package/dist/fields/style/fieldCss.js +68 -0
- package/dist/fields/style/fieldFontSizes.js +14 -0
- package/dist/fields/style/fieldHeights.js +23 -0
- package/dist/fields/style/fieldMargins.js +138 -0
- package/dist/fields/style/fieldPaddings.js +114 -0
- package/dist/fields/style/fieldViewportHeights.js +22 -0
- package/dist/fields/utils/fieldRoles.js +26 -0
- package/dist/generateCssVars.js +71 -0
- package/dist/generatePreviewPath.d.ts +1 -1
- package/dist/generatePreviewPath.js +14 -0
- package/dist/getButtonClasses.js +135 -0
- package/dist/getClassName.js +28 -0
- package/dist/getInlineStyles.d.ts +2 -2
- package/dist/getInlineStyles.js +17 -0
- package/dist/googleFonts.js +1343 -0
- package/dist/hexToRgb.js +21 -0
- package/dist/hooks/fields/getNumberValueFromClassNameString.js +16 -0
- package/dist/hooks/fields/populateSiblingClassName.js +23 -0
- package/dist/hooks/fields/populateSiblingClassNameAfterChange.js +6 -0
- package/dist/hooks/fields/updateClassNameAfterRead.js +16 -0
- package/dist/hooks/index.js +4 -0
- package/dist/iconsList.js +112 -0
- package/dist/index-BGUjS-bf.js +2 -0
- package/dist/index-BGUjS-bf.js.map +1 -0
- package/dist/index-CnRkn2jp.js +2 -0
- package/dist/index-CnRkn2jp.js.map +1 -0
- package/dist/index-CxARqipL.js +2 -0
- package/dist/index-CxARqipL.js.map +1 -0
- package/dist/index-ycNCyTFS.js +2 -0
- package/dist/index-ycNCyTFS.js.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +26 -0
- package/dist/tailwind/index.d.ts +5 -3
- package/dist/tailwind/index.js +2692 -0
- package/dist/types/fieldOverride.js +1 -0
- package/dist/userRoles-TiGLeC8C.js +2 -0
- package/dist/userRoles-TiGLeC8C.js.map +1 -0
- package/dist/userRoles-bv_yG2UK.js +2 -0
- package/dist/userRoles-bv_yG2UK.js.map +1 -0
- package/package.json +16 -33
- package/dist/acl/index.cjs.js +0 -2
- package/dist/acl/index.cjs.js.map +0 -1
- package/dist/acl/index.esm.js +0 -2
- package/dist/acl/index.esm.js.map +0 -1
- package/dist/enums/index.cjs.js +0 -2
- package/dist/enums/index.cjs.js.map +0 -1
- package/dist/enums/index.esm.js +0 -2
- package/dist/enums/index.esm.js.map +0 -1
- package/dist/fieldViewportHeights-BDcXwnNa.js +0 -2
- package/dist/fieldViewportHeights-BDcXwnNa.js.map +0 -1
- package/dist/fieldViewportHeights-BiejOiGj.js +0 -2
- package/dist/fieldViewportHeights-BiejOiGj.js.map +0 -1
- package/dist/getNumberValueFromClassNameString-Dm5eOjBJ.js +0 -2
- package/dist/getNumberValueFromClassNameString-Dm5eOjBJ.js.map +0 -1
- package/dist/getNumberValueFromClassNameString-pKKt97eg.js +0 -2
- package/dist/getNumberValueFromClassNameString-pKKt97eg.js.map +0 -1
- package/dist/hooks/index.cjs.js +0 -2
- package/dist/hooks/index.cjs.js.map +0 -1
- package/dist/hooks/index.esm.js +0 -2
- package/dist/hooks/index.esm.js.map +0 -1
- package/dist/index-B2AFDGT1.js +0 -2
- package/dist/index-B2AFDGT1.js.map +0 -1
- package/dist/index-C4uc5BOd.js +0 -2
- package/dist/index-C4uc5BOd.js.map +0 -1
- package/dist/index-C6SROxLn.js +0 -2
- package/dist/index-C6SROxLn.js.map +0 -1
- package/dist/index-CPtPsRwp.js +0 -2
- package/dist/index-CPtPsRwp.js.map +0 -1
- package/dist/index-CbPSDPpZ.js +0 -2
- package/dist/index-CbPSDPpZ.js.map +0 -1
- package/dist/index-D7075_q9.js +0 -2
- package/dist/index-D7075_q9.js.map +0 -1
- package/dist/index-DArGZfob.js +0 -2
- package/dist/index-DArGZfob.js.map +0 -1
- package/dist/index-DfvZ1mDE.js +0 -2
- package/dist/index-DfvZ1mDE.js.map +0 -1
- package/dist/index-FnRjWfU7.js +0 -2
- package/dist/index-FnRjWfU7.js.map +0 -1
- package/dist/index-GDdL2MgQ.js +0 -2
- package/dist/index-GDdL2MgQ.js.map +0 -1
- package/dist/index-gxytNJWT.js +0 -2
- package/dist/index-gxytNJWT.js.map +0 -1
- package/dist/index-yjSq7G2Z.js +0 -2
- package/dist/index-yjSq7G2Z.js.map +0 -1
- package/dist/tailwind/index.cjs.js +0 -2
- package/dist/tailwind/index.cjs.js.map +0 -1
- package/dist/tailwind/index.esm.js +0 -2
- package/dist/tailwind/index.esm.js.map +0 -1
- package/dist/userRoles-BIrmWoCJ.js +0 -2
- package/dist/userRoles-BIrmWoCJ.js.map +0 -1
- package/dist/userRoles-Dd_gfx51.js +0 -2
- package/dist/userRoles-Dd_gfx51.js.map +0 -1
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/hooks/fields/populateSiblingClassName.ts","../src/hooks/fields/populateSiblingClassNameAfterChange.ts","../src/hooks/fields/updateClassNameAfterRead.ts","../src/acl/hasRoles.ts"],"sourcesContent":["import { FieldHook } from 'payload'\n\nconst populateSiblingClassName: FieldHook = async (args) => {\n const { value, operation } = args\n console.log('value => ', value)\n console.log('operation => ', operation)\n\n // Controlla se esiste il campo \"css\" in \"value\"\n if (value?.css && (operation === 'create' || operation === 'update')) {\n const css = value.css\n const classes: string[] = []\n\n // Itera su tutti i campi dell'oggetto \"css\"\n Object.entries(css).forEach(([key, val]) => {\n if (key !== 'className' && val !== null && val !== undefined) {\n // Concatena nome chiave e valore\n classes.push(`${key}${val.toString()}`)\n }\n })\n\n // Concatenazione dei valori nel campo \"className\"\n const concatenatedClassName = `${classes.join(' ')}`.trim()\n value.css.className = concatenatedClassName // Aggiorna il campo \"className\"\n }\n\n // Ritorna il valore aggiornato\n return value\n}\n\nexport default populateSiblingClassName\n","import { FieldHook } from 'payload'\n\nconst populateSiblingClassNameAfterChange: FieldHook = async (args) => {\n const { value } = args\n console.log('Updated value on afterChange:', value)\n return value\n}\nexport default populateSiblingClassNameAfterChange\n","import { FieldHook } from 'payload'\n\nconst updateClassNameAfterRead: FieldHook = async (args) => {\n const { value } = args\n if (value?.css) {\n const css = value.css\n const classes: string[] = []\n\n Object.entries(css).forEach(([key, val]) => {\n if (key !== 'className' && val !== null && val !== undefined) {\n classes.push(`${key}${val.toString()}`)\n }\n })\n\n const concatenatedClassName = `${classes.join(' ')}`.trim()\n value.css.className = concatenatedClassName\n }\n\n return value\n}\nexport default updateClassNameAfterRead\n","import { Access } from 'payload'\n\n/**\n * Verifica se l'utente ha uno o più ruoli specifici.\n * @param roles - Array di ruoli da controllare.\n * @returns Funzione Access che verifica i ruoli.\n */\nconst hasRoles = (roles: string[]): Access => {\n return ({ req: { user } }) => {\n if (!user || typeof user !== 'object') {\n return false // Accesso negato se l'utente non è autenticato\n }\n if (!('roles' in user) || !Array.isArray(user.roles)) {\n return false // Accesso negato se `roles` non esiste o non è un array\n }\n return user.roles.some((role: string) => roles.includes(role)) || false\n }\n}\nexport default hasRoles\n"],"names":["async","args","value","operation","console","log","css","classes","Object","entries","forEach","key","val","push","toString","concatenatedClassName","join","trim","className","roles","req","user","Array","isArray","some","role","includes"],"mappings":"2PAE4CA,MAAOC,IACjD,MAAMC,MAAEA,EAAKC,UAAEA,GAAcF,EAK7B,GAJAG,QAAQC,IAAI,YAAaH,GACzBE,QAAQC,IAAI,gBAAiBF,GAGzBD,GAAOI,MAAsB,WAAdH,GAAwC,WAAdA,GAAyB,CACpE,MAAMG,EAAMJ,EAAMI,IACZC,EAAoB,GAG1BC,OAAOC,QAAQH,GAAKI,QAAQ,EAAEC,EAAKC,MACrB,cAARD,SAAuBC,GAEzBL,EAAQM,KAAK,GAAGF,IAAMC,EAAIE,gBAK9B,MAAMC,EAAwB,GAAGR,EAAQS,KAAK,OAAOC,OACrDf,EAAMI,IAAIY,UAAYH,CACxB,CAGA,OAAOb,uCCxB8CF,MAAOC,IAC5D,MAAMC,MAAEA,GAAUD,EAElB,OADAG,QAAQC,IAAI,gCAAiCH,GACtCA,4BCHmCF,MAAOC,IACjD,MAAMC,MAAEA,GAAUD,EAClB,GAAIC,GAAOI,IAAK,CACd,MAAMA,EAAMJ,EAAMI,IACZC,EAAoB,GAE1BC,OAAOC,QAAQH,GAAKI,QAAQ,EAAEC,EAAKC,MACrB,cAARD,SAAuBC,GACzBL,EAAQM,KAAK,GAAGF,IAAMC,EAAIE,gBAI9B,MAAMC,EAAwB,GAAGR,EAAQS,KAAK,OAAOC,OACrDf,EAAMI,IAAIY,UAAYH,CACxB,CAEA,OAAOb,kDCXSiB,GACT,EAAGC,KAAOC,WACVA,GAAwB,iBAATA,GAGd,UAAWA,GAAUC,MAAMC,QAAQF,EAAKF,QAGvCE,EAAKF,MAAMK,KAAMC,GAAiBN,EAAMO,SAASD,MAL/C"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,11 +4,3 @@ export * as Tailwind from './tailwind';
|
|
|
4
4
|
export * as Acl from './acl';
|
|
5
5
|
export * as Enum from './enums';
|
|
6
6
|
export * as Hooks from './hooks';
|
|
7
|
-
export { default as generateCssVars } from './generateCssVars';
|
|
8
|
-
export { default as generatePreviewPath } from './generatePreviewPath';
|
|
9
|
-
export { default as getButtonClasses } from './getButtonClasses';
|
|
10
|
-
export { default as getClassName } from './getClassName';
|
|
11
|
-
export { default as getInlineStyles } from './getInlineStyles';
|
|
12
|
-
export { default as googleFonts } from './googleFonts';
|
|
13
|
-
export { default as hexToRgb } from './hexToRgb';
|
|
14
|
-
export { default as iconsList } from './iconsList';
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{i as Fields}from"./index-
|
|
1
|
+
export{i as Fields}from"./index-BGUjS-bf.js";export{i as Config}from"./index-CxARqipL.js";import{g as e,u as s}from"./userRoles-TiGLeC8C.js";export{i as Tailwind}from"./userRoles-TiGLeC8C.js";var o=Object.freeze({__proto__:null,getNumberValueFromClassNameString:e,populateSiblingClassName:async e=>{const{value:s,operation:o}=e;if(console.log("value => ",s),console.log("operation => ",o),s?.css&&("create"===o||"update"===o)){const e=s.css,o=[];Object.entries(e).forEach(([e,s])=>{"className"!==e&&null!=s&&o.push(`${e}${s.toString()}`)});const a=`${o.join(" ")}`.trim();s.css.className=a}return s},populateSiblingClassNameAfterChange:async e=>{const{value:s}=e;return console.log("Updated value on afterChange:",s),s},updateClassNameAfterRead:async e=>{const{value:s}=e;if(s?.css){const e=s.css,o=[];Object.entries(e).forEach(([e,s])=>{"className"!==e&&null!=s&&o.push(`${e}${s.toString()}`)});const a=`${o.join(" ")}`.trim();s.css.className=a}return s}});var a=Object.freeze({__proto__:null,hasRoles:e=>({req:{user:s}})=>s&&"object"==typeof s&&"roles"in s&&Array.isArray(s.roles)&&s.roles.some(s=>e.includes(s))||!1}),r=Object.freeze({__proto__:null,userRoles:s});export{a as Acl,r as Enum,o as Hooks};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/hooks/fields/populateSiblingClassName.ts","../src/hooks/fields/populateSiblingClassNameAfterChange.ts","../src/hooks/fields/updateClassNameAfterRead.ts","../src/acl/hasRoles.ts"],"sourcesContent":["import { FieldHook } from 'payload'\n\nconst populateSiblingClassName: FieldHook = async (args) => {\n const { value, operation } = args\n console.log('value => ', value)\n console.log('operation => ', operation)\n\n // Controlla se esiste il campo \"css\" in \"value\"\n if (value?.css && (operation === 'create' || operation === 'update')) {\n const css = value.css\n const classes: string[] = []\n\n // Itera su tutti i campi dell'oggetto \"css\"\n Object.entries(css).forEach(([key, val]) => {\n if (key !== 'className' && val !== null && val !== undefined) {\n // Concatena nome chiave e valore\n classes.push(`${key}${val.toString()}`)\n }\n })\n\n // Concatenazione dei valori nel campo \"className\"\n const concatenatedClassName = `${classes.join(' ')}`.trim()\n value.css.className = concatenatedClassName // Aggiorna il campo \"className\"\n }\n\n // Ritorna il valore aggiornato\n return value\n}\n\nexport default populateSiblingClassName\n","import { FieldHook } from 'payload'\n\nconst populateSiblingClassNameAfterChange: FieldHook = async (args) => {\n const { value } = args\n console.log('Updated value on afterChange:', value)\n return value\n}\nexport default populateSiblingClassNameAfterChange\n","import { FieldHook } from 'payload'\n\nconst updateClassNameAfterRead: FieldHook = async (args) => {\n const { value } = args\n if (value?.css) {\n const css = value.css\n const classes: string[] = []\n\n Object.entries(css).forEach(([key, val]) => {\n if (key !== 'className' && val !== null && val !== undefined) {\n classes.push(`${key}${val.toString()}`)\n }\n })\n\n const concatenatedClassName = `${classes.join(' ')}`.trim()\n value.css.className = concatenatedClassName\n }\n\n return value\n}\nexport default updateClassNameAfterRead\n","import { Access } from 'payload'\n\n/**\n * Verifica se l'utente ha uno o più ruoli specifici.\n * @param roles - Array di ruoli da controllare.\n * @returns Funzione Access che verifica i ruoli.\n */\nconst hasRoles = (roles: string[]): Access => {\n return ({ req: { user } }) => {\n if (!user || typeof user !== 'object') {\n return false // Accesso negato se l'utente non è autenticato\n }\n if (!('roles' in user) || !Array.isArray(user.roles)) {\n return false // Accesso negato se `roles` non esiste o non è un array\n }\n return user.roles.some((role: string) => roles.includes(role)) || false\n }\n}\nexport default hasRoles\n"],"names":["async","args","value","operation","console","log","css","classes","Object","entries","forEach","key","val","push","toString","concatenatedClassName","join","trim","className","roles","req","user","Array","isArray","some","role","includes"],"mappings":"iSAE4CA,MAAOC,IACjD,MAAMC,MAAEA,EAAKC,UAAEA,GAAcF,EAK7B,GAJAG,QAAQC,IAAI,YAAaH,GACzBE,QAAQC,IAAI,gBAAiBF,GAGzBD,GAAOI,MAAsB,WAAdH,GAAwC,WAAdA,GAAyB,CACpE,MAAMG,EAAMJ,EAAMI,IACZC,EAAoB,GAG1BC,OAAOC,QAAQH,GAAKI,QAAQ,EAAEC,EAAKC,MACrB,cAARD,SAAuBC,GAEzBL,EAAQM,KAAK,GAAGF,IAAMC,EAAIE,gBAK9B,MAAMC,EAAwB,GAAGR,EAAQS,KAAK,OAAOC,OACrDf,EAAMI,IAAIY,UAAYH,CACxB,CAGA,OAAOb,uCCxB8CF,MAAOC,IAC5D,MAAMC,MAAEA,GAAUD,EAElB,OADAG,QAAQC,IAAI,gCAAiCH,GACtCA,4BCHmCF,MAAOC,IACjD,MAAMC,MAAEA,GAAUD,EAClB,GAAIC,GAAOI,IAAK,CACd,MAAMA,EAAMJ,EAAMI,IACZC,EAAoB,GAE1BC,OAAOC,QAAQH,GAAKI,QAAQ,EAAEC,EAAKC,MACrB,cAARD,SAAuBC,GACzBL,EAAQM,KAAK,GAAGF,IAAMC,EAAIE,gBAI9B,MAAMC,EAAwB,GAAGR,EAAQS,KAAK,OAAOC,OACrDf,EAAMI,IAAIY,UAAYH,CACxB,CAEA,OAAOb,kDCXSiB,GACT,EAAGC,KAAOC,WACVA,GAAwB,iBAATA,GAGd,UAAWA,GAAUC,MAAMC,QAAQF,EAAKF,QAGvCE,EAAKF,MAAMK,KAAMC,GAAiBN,EAAMO,SAASD,MAL/C"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// FIELDS
|
|
2
|
+
export * as Fields from './fields';
|
|
3
|
+
// CONFIG
|
|
4
|
+
export * as Config from './config';
|
|
5
|
+
// Aggiungi altre esportazioni se necessario
|
|
6
|
+
// export * as Collections from './collections';
|
|
7
|
+
// export * as Utils from './utils';
|
|
8
|
+
// TAILWIND SELECTORS
|
|
9
|
+
export * as Tailwind from './tailwind';
|
|
10
|
+
// ACL
|
|
11
|
+
export * as Acl from './acl';
|
|
12
|
+
// ENUM
|
|
13
|
+
export * as Enum from './enums';
|
|
14
|
+
// COMPONENTS
|
|
15
|
+
//export * as Components from './components'
|
|
16
|
+
// HOOKS
|
|
17
|
+
export * as Hooks from './hooks';
|
|
18
|
+
// GENERIC
|
|
19
|
+
//export { default as generateCssVars } from './generateCssVars'
|
|
20
|
+
//export { default as generatePreviewPath } from './generatePreviewPath'
|
|
21
|
+
//export { default as getButtonClasses } from './getButtonClasses'
|
|
22
|
+
//export { default as getClassName } from './getClassName'
|
|
23
|
+
//export { default as getInlineStyles } from './getInlineStyles'
|
|
24
|
+
//export { default as googleFonts } from './googleFonts'
|
|
25
|
+
//export { default as hexToRgb } from './hexToRgb'
|
|
26
|
+
//export { default as iconsList } from './iconsList'
|
package/dist/tailwind/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export declare const safelist: {
|
|
2
|
+
readonly colors: readonly ["bg-primary", "bg-secondary", "text-primary", "text-secondary"];
|
|
3
|
+
readonly spacing: readonly ["p-2", "p-4", "m-2", "m-4"];
|
|
4
|
+
readonly layout: readonly ["grid", "flex", "hidden"];
|
|
5
|
+
};
|
|
4
6
|
export declare const TailwindContainerWidths: string[];
|
|
5
7
|
/**
|
|
6
8
|
* Costante che contiene tutte le varianti di altezza relativa alla viewport
|