@woodylab/payload 0.0.86 → 0.0.88
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.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-AsrRNOzZ.js +2 -0
- package/dist/index-AsrRNOzZ.js.map +1 -0
- package/dist/index-CVxEpCHf.js +2 -0
- package/dist/index-CVxEpCHf.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/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/fields/index.cjs.js +0 -2
- package/dist/fields/index.cjs.js.map +0 -1
- package/dist/fields/index.esm.js +0 -2
- package/dist/fields/index.esm.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
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const fieldThemeColor = (override) => ({
|
|
2
|
+
name: override?.name || 'color',
|
|
3
|
+
label: override?.label || 'Colore',
|
|
4
|
+
type: 'select',
|
|
5
|
+
required: override?.required ?? false,
|
|
6
|
+
options: [
|
|
7
|
+
{ label: 'Default', value: '' },
|
|
8
|
+
{ label: 'Foreground', value: 'foreground' },
|
|
9
|
+
{ label: 'Primary', value: 'primary' },
|
|
10
|
+
{ label: 'Secondary', value: 'secondary' },
|
|
11
|
+
{ label: 'Accent', value: 'accent' },
|
|
12
|
+
{ label: 'Dark', value: 'dark' },
|
|
13
|
+
{ label: 'Light', value: 'light' },
|
|
14
|
+
{ label: 'White', value: 'white' },
|
|
15
|
+
{ label: 'Black', value: 'black' },
|
|
16
|
+
],
|
|
17
|
+
admin: {
|
|
18
|
+
...override?.admin,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
export default fieldThemeColor;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TailwindContainerWidths } from '../../tailwind';
|
|
2
|
+
import fieldSelect from '../fieldSelect';
|
|
3
|
+
/**
|
|
4
|
+
* Genera un campo per la selezione delle larghezze del container
|
|
5
|
+
* @returns Field - Campo di tipo `select` per PayloadCMS
|
|
6
|
+
*/
|
|
7
|
+
const fieldContainerWidths = () => {
|
|
8
|
+
return fieldSelect({
|
|
9
|
+
name: 'container',
|
|
10
|
+
label: 'Larghezza del container',
|
|
11
|
+
options: [{ value: '', label: '(Nessuno)' }, ...TailwindContainerWidths],
|
|
12
|
+
admin: {
|
|
13
|
+
description: 'Seleziona una larghezza massima per il container. Usa "None" per una larghezza a schermo intero.',
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
export default fieldContainerWidths;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import fieldText from '../fieldText';
|
|
2
|
+
import fieldMargins from './fieldMargins';
|
|
3
|
+
import fieldPaddings from './fieldPaddings';
|
|
4
|
+
import fieldHeights from './fieldHeights';
|
|
5
|
+
/*
|
|
6
|
+
const concatCssFields: FieldHook = (args) => {
|
|
7
|
+
const { value, siblingData, operation } = args
|
|
8
|
+
console.log(value)
|
|
9
|
+
console.log(siblingData)
|
|
10
|
+
console.log(operation)
|
|
11
|
+
const classes: string[] = []
|
|
12
|
+
if (operation === 'create' || operation === 'update') {
|
|
13
|
+
Object.entries(siblingData).forEach(([key, val]) => {
|
|
14
|
+
if (key !== 'className' && val !== null && val !== undefined) {
|
|
15
|
+
classes.push(`${key}${val}`)
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
return classes.join(' ') || null
|
|
20
|
+
}
|
|
21
|
+
*/
|
|
22
|
+
const concatCssFields = (args) => {
|
|
23
|
+
const { value, siblingData, operation } = args;
|
|
24
|
+
console.log('value', value);
|
|
25
|
+
console.log('siblingData', siblingData);
|
|
26
|
+
console.log('operation', operation);
|
|
27
|
+
if (operation === 'create' || operation === 'update') {
|
|
28
|
+
const classes = [];
|
|
29
|
+
Object.entries(siblingData || {}).forEach(([key, val]) => {
|
|
30
|
+
if (key !== 'className' && val !== null && val !== undefined) {
|
|
31
|
+
classes.push(`${key}${val}`);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
console.log(classes.join(' '));
|
|
35
|
+
return classes.join(' ');
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const fieldCss = () => {
|
|
39
|
+
return {
|
|
40
|
+
name: 'css',
|
|
41
|
+
type: 'group',
|
|
42
|
+
label: 'Regole di stile',
|
|
43
|
+
fields: [
|
|
44
|
+
fieldText({
|
|
45
|
+
name: 'className',
|
|
46
|
+
label: 'className',
|
|
47
|
+
required: false,
|
|
48
|
+
admin: {
|
|
49
|
+
readOnly: true,
|
|
50
|
+
},
|
|
51
|
+
hooks: {
|
|
52
|
+
beforeValidate: [concatCssFields],
|
|
53
|
+
},
|
|
54
|
+
}),
|
|
55
|
+
fieldHeights(),
|
|
56
|
+
{
|
|
57
|
+
type: 'tabs',
|
|
58
|
+
tabs: [
|
|
59
|
+
{
|
|
60
|
+
label: 'Spacing',
|
|
61
|
+
fields: [fieldMargins(), fieldPaddings()],
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
export default fieldCss;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TailwindTextSizes } from '../../tailwind';
|
|
2
|
+
import fieldSelect from '../fieldSelect';
|
|
3
|
+
const fieldFontSizes = () => {
|
|
4
|
+
return fieldSelect({
|
|
5
|
+
name: 'fs',
|
|
6
|
+
label: 'Dimensione del testo',
|
|
7
|
+
options: TailwindTextSizes,
|
|
8
|
+
defaultValue: 'text-base',
|
|
9
|
+
admin: {
|
|
10
|
+
description: 'Seleziona una dimensione per il testo (es. Small, Base, Large, ecc.).',
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
export default fieldFontSizes;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TailwindHeights, TailwindViewportHeights } from '../../tailwind';
|
|
2
|
+
import fieldSelect from '../fieldSelect';
|
|
3
|
+
/**
|
|
4
|
+
* Genera un campo per la selezione delle altezze
|
|
5
|
+
* @returns Field - Campo di tipo `select` per PayloadCMS
|
|
6
|
+
*/
|
|
7
|
+
const fieldHeights = () => {
|
|
8
|
+
return fieldSelect({
|
|
9
|
+
name: 'h-',
|
|
10
|
+
label: 'Altezza',
|
|
11
|
+
type: 'select',
|
|
12
|
+
defaultValue: 'full',
|
|
13
|
+
options: [
|
|
14
|
+
{ value: '', label: '(Nessuno)' },
|
|
15
|
+
...TailwindViewportHeights.map((h) => ({ value: `${h}`, label: h })),
|
|
16
|
+
...TailwindHeights.map((h) => ({ value: `${h}`, label: h })),
|
|
17
|
+
],
|
|
18
|
+
admin: {
|
|
19
|
+
description: 'Definisce l’altezza dell’elemento.',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
export default fieldHeights;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import fieldNumber from '../fieldNumber';
|
|
2
|
+
import { getNumberValueFromClassNameString } from '../../hooks';
|
|
3
|
+
const concatMarginFields = (args) => {
|
|
4
|
+
const { value, siblingData, operation } = args;
|
|
5
|
+
if (operation === 'create' || operation === 'update') {
|
|
6
|
+
const margins = siblingData || {};
|
|
7
|
+
const { all, x, y, t, r, b, l } = margins;
|
|
8
|
+
const classes = [];
|
|
9
|
+
if (all)
|
|
10
|
+
classes.push(`m-${all}`);
|
|
11
|
+
if (x)
|
|
12
|
+
classes.push(`mx-${x}`);
|
|
13
|
+
if (y)
|
|
14
|
+
classes.push(`my-${y}`);
|
|
15
|
+
if (t)
|
|
16
|
+
classes.push(`mt-${t}`);
|
|
17
|
+
if (r)
|
|
18
|
+
classes.push(`mr-${r}`);
|
|
19
|
+
if (b)
|
|
20
|
+
classes.push(`mb-${b}`);
|
|
21
|
+
if (l)
|
|
22
|
+
classes.push(`ml-${l}`);
|
|
23
|
+
return classes.join(' ');
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Genera un campo per la selezione dinamica dei margini
|
|
29
|
+
* @returns Field - Campo di tipo `group` per PayloadCMS
|
|
30
|
+
*/
|
|
31
|
+
const fieldMargins = () => {
|
|
32
|
+
return {
|
|
33
|
+
label: 'Margini',
|
|
34
|
+
type: 'collapsible',
|
|
35
|
+
admin: {
|
|
36
|
+
initCollapsed: true,
|
|
37
|
+
},
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
type: 'row',
|
|
41
|
+
fields: [
|
|
42
|
+
fieldNumber({
|
|
43
|
+
name: 'm-',
|
|
44
|
+
label: 'Tutti i lati',
|
|
45
|
+
virtual: true,
|
|
46
|
+
min: 0,
|
|
47
|
+
max: 96,
|
|
48
|
+
admin: {
|
|
49
|
+
width: '25%',
|
|
50
|
+
},
|
|
51
|
+
hooks: {
|
|
52
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
53
|
+
},
|
|
54
|
+
}),
|
|
55
|
+
fieldNumber({
|
|
56
|
+
name: 'mx-',
|
|
57
|
+
label: 'Orizzontale',
|
|
58
|
+
virtual: true,
|
|
59
|
+
min: 0,
|
|
60
|
+
max: 96,
|
|
61
|
+
admin: {
|
|
62
|
+
width: '25%',
|
|
63
|
+
},
|
|
64
|
+
hooks: {
|
|
65
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
66
|
+
},
|
|
67
|
+
}),
|
|
68
|
+
fieldNumber({
|
|
69
|
+
name: 'my-',
|
|
70
|
+
label: 'Verticale',
|
|
71
|
+
virtual: true,
|
|
72
|
+
min: 0,
|
|
73
|
+
max: 96,
|
|
74
|
+
admin: {
|
|
75
|
+
width: '25%',
|
|
76
|
+
},
|
|
77
|
+
hooks: {
|
|
78
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
79
|
+
},
|
|
80
|
+
}),
|
|
81
|
+
fieldNumber({
|
|
82
|
+
name: 'mt-',
|
|
83
|
+
label: 'Top',
|
|
84
|
+
virtual: true,
|
|
85
|
+
min: 0,
|
|
86
|
+
max: 96,
|
|
87
|
+
admin: {
|
|
88
|
+
width: '25%',
|
|
89
|
+
},
|
|
90
|
+
hooks: {
|
|
91
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
92
|
+
},
|
|
93
|
+
}),
|
|
94
|
+
fieldNumber({
|
|
95
|
+
name: 'mr-',
|
|
96
|
+
label: 'Right',
|
|
97
|
+
virtual: true,
|
|
98
|
+
min: 0,
|
|
99
|
+
max: 96,
|
|
100
|
+
admin: {
|
|
101
|
+
width: '25%',
|
|
102
|
+
},
|
|
103
|
+
hooks: {
|
|
104
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
105
|
+
},
|
|
106
|
+
}),
|
|
107
|
+
fieldNumber({
|
|
108
|
+
name: 'mb-',
|
|
109
|
+
label: 'Bottom',
|
|
110
|
+
virtual: true,
|
|
111
|
+
min: 0,
|
|
112
|
+
max: 96,
|
|
113
|
+
admin: {
|
|
114
|
+
width: '25%',
|
|
115
|
+
},
|
|
116
|
+
hooks: {
|
|
117
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
118
|
+
},
|
|
119
|
+
}),
|
|
120
|
+
fieldNumber({
|
|
121
|
+
name: 'ml-',
|
|
122
|
+
label: 'Left',
|
|
123
|
+
virtual: true,
|
|
124
|
+
min: 0,
|
|
125
|
+
max: 96,
|
|
126
|
+
admin: {
|
|
127
|
+
width: '25%',
|
|
128
|
+
},
|
|
129
|
+
hooks: {
|
|
130
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
131
|
+
},
|
|
132
|
+
}),
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
export default fieldMargins;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import fieldNumber from '../fieldNumber';
|
|
2
|
+
import { getNumberValueFromClassNameString } from '../../hooks';
|
|
3
|
+
/**
|
|
4
|
+
* Genera un campo per la selezione dinamica dei margini
|
|
5
|
+
* @returns Field - Campo di tipo `group` per PayloadCMS
|
|
6
|
+
*/
|
|
7
|
+
const fieldPaddings = () => {
|
|
8
|
+
return {
|
|
9
|
+
label: 'Paddings',
|
|
10
|
+
type: 'collapsible',
|
|
11
|
+
admin: {
|
|
12
|
+
initCollapsed: true,
|
|
13
|
+
},
|
|
14
|
+
fields: [
|
|
15
|
+
{
|
|
16
|
+
type: 'row',
|
|
17
|
+
fields: [
|
|
18
|
+
fieldNumber({
|
|
19
|
+
name: 'p-',
|
|
20
|
+
label: 'Tutti i lati',
|
|
21
|
+
virtual: true,
|
|
22
|
+
min: 0,
|
|
23
|
+
max: 96,
|
|
24
|
+
admin: {
|
|
25
|
+
width: '25%',
|
|
26
|
+
},
|
|
27
|
+
hooks: {
|
|
28
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
29
|
+
},
|
|
30
|
+
}),
|
|
31
|
+
fieldNumber({
|
|
32
|
+
name: 'px-',
|
|
33
|
+
label: 'Orizzontale',
|
|
34
|
+
virtual: true,
|
|
35
|
+
min: 0,
|
|
36
|
+
max: 96,
|
|
37
|
+
admin: {
|
|
38
|
+
width: '25%',
|
|
39
|
+
},
|
|
40
|
+
hooks: {
|
|
41
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
42
|
+
},
|
|
43
|
+
}),
|
|
44
|
+
fieldNumber({
|
|
45
|
+
name: 'py-',
|
|
46
|
+
label: 'Verticale',
|
|
47
|
+
virtual: true,
|
|
48
|
+
min: 0,
|
|
49
|
+
max: 96,
|
|
50
|
+
admin: {
|
|
51
|
+
width: '25%',
|
|
52
|
+
},
|
|
53
|
+
hooks: {
|
|
54
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
55
|
+
},
|
|
56
|
+
}),
|
|
57
|
+
fieldNumber({
|
|
58
|
+
name: 'pt-',
|
|
59
|
+
label: 'Top',
|
|
60
|
+
virtual: true,
|
|
61
|
+
min: 0,
|
|
62
|
+
max: 96,
|
|
63
|
+
admin: {
|
|
64
|
+
width: '25%',
|
|
65
|
+
},
|
|
66
|
+
hooks: {
|
|
67
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
68
|
+
},
|
|
69
|
+
}),
|
|
70
|
+
fieldNumber({
|
|
71
|
+
name: 'pr-',
|
|
72
|
+
label: 'Right',
|
|
73
|
+
virtual: true,
|
|
74
|
+
min: 0,
|
|
75
|
+
max: 96,
|
|
76
|
+
admin: {
|
|
77
|
+
width: '25%',
|
|
78
|
+
},
|
|
79
|
+
hooks: {
|
|
80
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
81
|
+
},
|
|
82
|
+
}),
|
|
83
|
+
fieldNumber({
|
|
84
|
+
name: 'pb-',
|
|
85
|
+
label: 'Bottom',
|
|
86
|
+
virtual: true,
|
|
87
|
+
min: 0,
|
|
88
|
+
max: 96,
|
|
89
|
+
admin: {
|
|
90
|
+
width: '25%',
|
|
91
|
+
},
|
|
92
|
+
hooks: {
|
|
93
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
94
|
+
},
|
|
95
|
+
}),
|
|
96
|
+
fieldNumber({
|
|
97
|
+
name: 'pl-',
|
|
98
|
+
label: 'Left',
|
|
99
|
+
virtual: true,
|
|
100
|
+
min: 0,
|
|
101
|
+
max: 96,
|
|
102
|
+
admin: {
|
|
103
|
+
width: '25%',
|
|
104
|
+
},
|
|
105
|
+
hooks: {
|
|
106
|
+
afterRead: [getNumberValueFromClassNameString],
|
|
107
|
+
},
|
|
108
|
+
}),
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
export default fieldPaddings;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TailwindViewportHeights } from '../../tailwind';
|
|
2
|
+
import fieldSelect from '../fieldSelect';
|
|
3
|
+
/**
|
|
4
|
+
* Genera un campo per la selezione delle altezze
|
|
5
|
+
* @returns Field - Campo di tipo `select` per PayloadCMS
|
|
6
|
+
*/
|
|
7
|
+
const fieldViewportHeights = () => {
|
|
8
|
+
return fieldSelect({
|
|
9
|
+
name: 'h-',
|
|
10
|
+
label: 'Altezza viewport',
|
|
11
|
+
type: 'select',
|
|
12
|
+
options: [
|
|
13
|
+
{ value: '', label: '(Nessuno)' },
|
|
14
|
+
...TailwindViewportHeights.map((h) => ({ value: `${h}`, label: h })),
|
|
15
|
+
],
|
|
16
|
+
admin: {
|
|
17
|
+
description: 'Definisce l’altezza dell’elemento.',
|
|
18
|
+
width: '50%',
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
export default fieldViewportHeights;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import userRoles from '../../enums/userRoles';
|
|
2
|
+
const fieldRoles = (override) => ({
|
|
3
|
+
name: override?.name || 'roles',
|
|
4
|
+
label: override?.label || 'Ruoli',
|
|
5
|
+
type: 'select',
|
|
6
|
+
required: override?.required ?? true,
|
|
7
|
+
hasMany: override?.hasMany ?? true,
|
|
8
|
+
options: [
|
|
9
|
+
...Object.values(userRoles).map((role) => ({
|
|
10
|
+
label: role.charAt(0).toUpperCase() + role.slice(1).toLowerCase(),
|
|
11
|
+
value: role,
|
|
12
|
+
})),
|
|
13
|
+
...(override?.options || []),
|
|
14
|
+
],
|
|
15
|
+
access: {
|
|
16
|
+
create: () => true,
|
|
17
|
+
update: () => true,
|
|
18
|
+
read: () => true,
|
|
19
|
+
...override?.access,
|
|
20
|
+
},
|
|
21
|
+
admin: {
|
|
22
|
+
description: 'Seleziona uno o più ruoli utente.',
|
|
23
|
+
...override?.admin,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
export default fieldRoles;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import hexToRgb from "./hexToRgb";
|
|
2
|
+
function generateCssVars(settings) {
|
|
3
|
+
// Gestione robusta dei font
|
|
4
|
+
const fontWeights = [300, 400, 500, 600, 700, 800];
|
|
5
|
+
const fontsToImport = [settings.headingFont, settings.textFont]
|
|
6
|
+
.filter(Boolean)
|
|
7
|
+
.map(f => {
|
|
8
|
+
if (!f)
|
|
9
|
+
return '';
|
|
10
|
+
// Aggiungiamo il parametro wght per specificare i pesi da caricare
|
|
11
|
+
return `@import url('https://fonts.googleapis.com/css2?family=${f.replace(/ /g, "+")}:wght@${fontWeights.join(';')}&display=swap');`;
|
|
12
|
+
})
|
|
13
|
+
.join("\n");
|
|
14
|
+
const generateOpacityVariants = (color, name) => {
|
|
15
|
+
if (!color) {
|
|
16
|
+
return '';
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const rgbValue = hexToRgb(color);
|
|
20
|
+
if (!rgbValue || typeof rgbValue.r !== 'number' ||
|
|
21
|
+
typeof rgbValue.g !== 'number' ||
|
|
22
|
+
typeof rgbValue.b !== 'number') {
|
|
23
|
+
console.warn(`Impossibile convertire il colore ${name}: ${color}`);
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
const { r, g, b } = rgbValue;
|
|
27
|
+
const opacityVars = Array.from({ length: 9 }, (_, i) => {
|
|
28
|
+
const opacity = (i + 1) * 10;
|
|
29
|
+
return `--color-${name}-${opacity}: rgba(${r}, ${g}, ${b}, ${opacity / 100});`;
|
|
30
|
+
}).join("\n");
|
|
31
|
+
return `
|
|
32
|
+
--color-${name}: rgb(${r}, ${g}, ${b}); /* Default (opacità 1) */
|
|
33
|
+
${opacityVars}
|
|
34
|
+
`;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.warn(`Errore nella generazione delle varianti di opacità per ${name}: ${error}`);
|
|
38
|
+
return '';
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
// Genera variabili solo per i colori forniti
|
|
42
|
+
const primaryVars = generateOpacityVariants(settings.primaryColor, "primary");
|
|
43
|
+
const secondaryVars = generateOpacityVariants(settings.secondaryColor, "secondary");
|
|
44
|
+
const accentVars = generateOpacityVariants(settings.accentColor, "accent");
|
|
45
|
+
const darkVars = generateOpacityVariants(settings.darkColor, "dark");
|
|
46
|
+
const lightVars = generateOpacityVariants(settings.lightColor, "light");
|
|
47
|
+
// Genera i valori dei font in modo sicuro
|
|
48
|
+
const headingFontValue = settings.headingFont
|
|
49
|
+
? `'${settings.headingFont}', sans-serif`
|
|
50
|
+
: 'system-layout, sans-serif';
|
|
51
|
+
const textFontValue = settings.textFont
|
|
52
|
+
? `'${settings.textFont}', sans-serif`
|
|
53
|
+
: 'system-layout, sans-serif';
|
|
54
|
+
return `
|
|
55
|
+
${fontsToImport}
|
|
56
|
+
|
|
57
|
+
:root {
|
|
58
|
+
--font-heading: ${headingFontValue};
|
|
59
|
+
--font-text: ${textFontValue};
|
|
60
|
+
--color-white: #ffffff;
|
|
61
|
+
--color-black: #000000;
|
|
62
|
+
--color-foreground: ${settings.foregroundColor || '#FFFFFF'};
|
|
63
|
+
${primaryVars}
|
|
64
|
+
${secondaryVars}
|
|
65
|
+
${accentVars}
|
|
66
|
+
${darkVars}
|
|
67
|
+
${lightVars}
|
|
68
|
+
}
|
|
69
|
+
`;
|
|
70
|
+
}
|
|
71
|
+
export default generateCssVars;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const collectionPrefixMap = {
|
|
2
|
+
pages: '',
|
|
3
|
+
};
|
|
4
|
+
const generatePreviewPath = ({ collection, slug }) => {
|
|
5
|
+
const encodedParams = new URLSearchParams({
|
|
6
|
+
slug,
|
|
7
|
+
collection,
|
|
8
|
+
path: `${collectionPrefixMap[collection]}/${slug}`,
|
|
9
|
+
previewSecret: process.env.PREVIEW_SECRET || '',
|
|
10
|
+
});
|
|
11
|
+
const url = `/next/preview?${encodedParams.toString()}`;
|
|
12
|
+
return url;
|
|
13
|
+
};
|
|
14
|
+
export default generatePreviewPath;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
function getButtonClasses(config) {
|
|
2
|
+
const { buttonStyle = 'solid', buttonColor = 'primary', buttonSize = 'default', buttonRounded = 'default', iconPosition = 'left', textColor, // Aggiungiamo il colore del testo
|
|
3
|
+
additionalEffects = [], } = config;
|
|
4
|
+
const classes = [
|
|
5
|
+
'inline-flex',
|
|
6
|
+
'items-center',
|
|
7
|
+
'justify-center',
|
|
8
|
+
'font-medium',
|
|
9
|
+
'focus:outline-none',
|
|
10
|
+
'focus-visible:ring-2',
|
|
11
|
+
'focus-visible:ring-offset-2',
|
|
12
|
+
];
|
|
13
|
+
// Stile base
|
|
14
|
+
switch (buttonStyle) {
|
|
15
|
+
case 'solid':
|
|
16
|
+
classes.push(`bg-${buttonColor}`);
|
|
17
|
+
// Usa textColor se specificato, altrimenti usa il colore predefinito basato sul buttonColor
|
|
18
|
+
if (textColor) {
|
|
19
|
+
classes.push(`text-${textColor}`);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
classes.push(buttonColor === 'light' ? 'text-dark' : 'text-white');
|
|
23
|
+
}
|
|
24
|
+
classes.push(`hover:bg-${buttonColor}/90`);
|
|
25
|
+
break;
|
|
26
|
+
case 'outline':
|
|
27
|
+
classes.push(`border`);
|
|
28
|
+
classes.push(`border-${buttonColor}`);
|
|
29
|
+
// Usa textColor se specificato, altrimenti usa il colore del bottone
|
|
30
|
+
if (textColor) {
|
|
31
|
+
classes.push(`text-${textColor}`);
|
|
32
|
+
// Mantieni lo stesso colore di testo per l'hover, a meno che non sia specificato diversamente
|
|
33
|
+
classes.push(`hover:text-${textColor}`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
classes.push(`text-${buttonColor}`);
|
|
37
|
+
classes.push(`hover:text-${buttonColor === 'light' ? 'dark' : 'white'}`);
|
|
38
|
+
}
|
|
39
|
+
classes.push(`hover:bg-${buttonColor}`);
|
|
40
|
+
break;
|
|
41
|
+
case 'ghost':
|
|
42
|
+
// Usa textColor se specificato, altrimenti usa il colore del bottone
|
|
43
|
+
if (textColor) {
|
|
44
|
+
classes.push(`text-${textColor}`);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
classes.push(`text-${buttonColor}`);
|
|
48
|
+
}
|
|
49
|
+
classes.push(`hover:bg-${buttonColor}/10`);
|
|
50
|
+
break;
|
|
51
|
+
case 'link':
|
|
52
|
+
// Usa textColor se specificato, altrimenti usa il colore del bottone
|
|
53
|
+
if (textColor) {
|
|
54
|
+
classes.push(`text-${textColor}`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
classes.push(`text-${buttonColor}`);
|
|
58
|
+
}
|
|
59
|
+
classes.push('hover:underline');
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
// Dimensione
|
|
63
|
+
switch (buttonSize) {
|
|
64
|
+
case 'small':
|
|
65
|
+
classes.push('text-xs px-2.5 py-1.5');
|
|
66
|
+
break;
|
|
67
|
+
case 'default':
|
|
68
|
+
classes.push('text-sm px-4 py-2');
|
|
69
|
+
break;
|
|
70
|
+
case 'medium':
|
|
71
|
+
classes.push('text-base px-5 py-2.5');
|
|
72
|
+
break;
|
|
73
|
+
case 'large':
|
|
74
|
+
classes.push('text-lg px-6 py-3');
|
|
75
|
+
break;
|
|
76
|
+
case 'xl':
|
|
77
|
+
classes.push('text-xl px-8 py-4');
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
// Se è solo icona, aggiusta il padding per renderlo quadrato/rotondo
|
|
81
|
+
if (config.useIcon && iconPosition === 'only') {
|
|
82
|
+
classes.push('p-0');
|
|
83
|
+
switch (buttonSize) {
|
|
84
|
+
case 'small':
|
|
85
|
+
classes.push('w-7 h-7');
|
|
86
|
+
break;
|
|
87
|
+
case 'default':
|
|
88
|
+
classes.push('w-9 h-9');
|
|
89
|
+
break;
|
|
90
|
+
case 'medium':
|
|
91
|
+
classes.push('w-10 h-10');
|
|
92
|
+
break;
|
|
93
|
+
case 'large':
|
|
94
|
+
classes.push('w-12 h-12');
|
|
95
|
+
break;
|
|
96
|
+
case 'xl':
|
|
97
|
+
classes.push('w-14 h-14');
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Arrotondamento
|
|
102
|
+
switch (buttonRounded) {
|
|
103
|
+
case 'none':
|
|
104
|
+
classes.push('rounded-none');
|
|
105
|
+
break;
|
|
106
|
+
case 'sm':
|
|
107
|
+
classes.push('rounded-sm');
|
|
108
|
+
break;
|
|
109
|
+
case 'default':
|
|
110
|
+
classes.push('rounded');
|
|
111
|
+
break;
|
|
112
|
+
case 'lg':
|
|
113
|
+
classes.push('rounded-lg');
|
|
114
|
+
break;
|
|
115
|
+
case 'full':
|
|
116
|
+
classes.push('rounded-full');
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
// Effetti aggiuntivi
|
|
120
|
+
if (additionalEffects) {
|
|
121
|
+
if (additionalEffects.includes('shadow')) {
|
|
122
|
+
classes.push('shadow-md hover:shadow-lg');
|
|
123
|
+
}
|
|
124
|
+
if (additionalEffects.includes('transition')) {
|
|
125
|
+
classes.push('transition-all duration-200');
|
|
126
|
+
}
|
|
127
|
+
if (additionalEffects.includes('scale')) {
|
|
128
|
+
classes.push('transform hover:scale-105');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Aggiungi la classe focus-ring per il colore appropriato
|
|
132
|
+
classes.push(`focus-visible:ring-${buttonColor}/50`);
|
|
133
|
+
return classes.join(' ');
|
|
134
|
+
}
|
|
135
|
+
export default getButtonClasses;
|