@woodylab/payload 0.0.85 → 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.
Files changed (149) hide show
  1. package/dist/acl/hasRoles.js +17 -0
  2. package/dist/acl/index.js +1 -0
  3. package/dist/config/blocks/blockCarousel.d.ts +1 -1
  4. package/dist/config/blocks/blockCarousel.js +102 -0
  5. package/dist/config/blocks/blockDisclosureList.d.ts +1 -1
  6. package/dist/config/blocks/blockDisclosureList.js +58 -0
  7. package/dist/config/blocks/blockGrid.d.ts +1 -1
  8. package/dist/config/blocks/blockGrid.js +161 -0
  9. package/dist/config/blocks/blockGridContent.d.ts +1 -1
  10. package/dist/config/blocks/blockGridContent.js +195 -0
  11. package/dist/config/blocks/blockHtmlElement.d.ts +5 -2
  12. package/dist/config/blocks/blockHtmlElement.js +13 -0
  13. package/dist/config/blocks/blockImage.d.ts +1 -1
  14. package/dist/config/blocks/blockImage.js +15 -0
  15. package/dist/config/blocks/blockParallax.d.ts +1 -1
  16. package/dist/config/blocks/blockParallax.js +76 -0
  17. package/dist/config/blocks/blockTabs.d.ts +1 -1
  18. package/dist/config/blocks/blockTabs.js +24 -0
  19. package/dist/config/blocks/blockView.d.ts +2 -0
  20. package/dist/config/blocks/blockView.js +234 -0
  21. package/dist/config/collections/collectionMenus.js +41 -0
  22. package/dist/config/globals/configFooter.d.ts +1 -1
  23. package/dist/config/globals/configFooter.js +46 -0
  24. package/dist/config/globals/configHeader.d.ts +1 -1
  25. package/dist/config/globals/configHeader.js +50 -0
  26. package/dist/config/globals/configSettings.d.ts +1 -1
  27. package/dist/config/globals/configSettings.js +144 -0
  28. package/dist/config/index.cjs.js +1 -1
  29. package/dist/config/index.esm.js +1 -1
  30. package/dist/config/index.js +15 -0
  31. package/dist/enums/index.js +1 -0
  32. package/dist/enums/userRoles.js +8 -0
  33. package/dist/fields/fieldArray.js +9 -0
  34. package/dist/fields/fieldBlocks.js +9 -0
  35. package/dist/fields/fieldCheckbox.js +11 -0
  36. package/dist/fields/fieldCode.js +8 -0
  37. package/dist/fields/fieldDate.js +15 -0
  38. package/dist/fields/fieldEmail.js +8 -0
  39. package/dist/fields/fieldJoin.js +9 -0
  40. package/dist/fields/fieldNumber.js +8 -0
  41. package/dist/fields/fieldPoint.js +8 -0
  42. package/dist/fields/fieldRadioGroup.js +18 -0
  43. package/dist/fields/fieldRelationship.js +9 -0
  44. package/dist/fields/fieldRichText.js +12 -0
  45. package/dist/fields/fieldSelect.js +9 -0
  46. package/dist/fields/fieldText.js +8 -0
  47. package/dist/fields/fieldTextArea.js +8 -0
  48. package/dist/fields/fieldUpload.js +9 -0
  49. package/dist/fields/index.js +37 -0
  50. package/dist/fields/layout/fieldContainerProps.js +74 -0
  51. package/dist/fields/section/fieldAction.js +236 -0
  52. package/dist/fields/section/fieldConfigProps.js +11 -0
  53. package/dist/fields/section/fieldContentProps.js +11 -0
  54. package/dist/fields/section/fieldSectionProps.js +15 -0
  55. package/dist/fields/section/fieldSectionTabs.js +40 -0
  56. package/dist/fields/style/fieldColor.js +21 -0
  57. package/dist/fields/style/fieldContainerWidths.js +17 -0
  58. package/dist/fields/style/fieldCss.js +68 -0
  59. package/dist/fields/style/fieldFontSizes.js +14 -0
  60. package/dist/fields/style/fieldHeights.js +23 -0
  61. package/dist/fields/style/fieldMargins.js +138 -0
  62. package/dist/fields/style/fieldPaddings.js +114 -0
  63. package/dist/fields/style/fieldViewportHeights.js +22 -0
  64. package/dist/fields/utils/fieldRoles.js +26 -0
  65. package/dist/generateCssVars.js +71 -0
  66. package/dist/generatePreviewPath.d.ts +1 -1
  67. package/dist/generatePreviewPath.js +14 -0
  68. package/dist/getButtonClasses.js +135 -0
  69. package/dist/getClassName.js +28 -0
  70. package/dist/getInlineStyles.d.ts +2 -2
  71. package/dist/getInlineStyles.js +17 -0
  72. package/dist/googleFonts.js +1343 -0
  73. package/dist/hexToRgb.js +21 -0
  74. package/dist/hooks/fields/getNumberValueFromClassNameString.js +16 -0
  75. package/dist/hooks/fields/populateSiblingClassName.js +23 -0
  76. package/dist/hooks/fields/populateSiblingClassNameAfterChange.js +6 -0
  77. package/dist/hooks/fields/updateClassNameAfterRead.js +16 -0
  78. package/dist/hooks/index.js +4 -0
  79. package/dist/iconsList.js +112 -0
  80. package/dist/index-AsrRNOzZ.js +2 -0
  81. package/dist/index-AsrRNOzZ.js.map +1 -0
  82. package/dist/index-CVxEpCHf.js +2 -0
  83. package/dist/index-CVxEpCHf.js.map +1 -0
  84. package/dist/index.cjs.js +1 -1
  85. package/dist/index.cjs.js.map +1 -1
  86. package/dist/index.d.ts +0 -8
  87. package/dist/index.esm.js +1 -1
  88. package/dist/index.esm.js.map +1 -1
  89. package/dist/index.js +26 -0
  90. package/dist/tailwind/index.d.ts +5 -3
  91. package/dist/tailwind/index.js +2692 -0
  92. package/dist/types/fieldOverride.js +1 -0
  93. package/package.json +16 -33
  94. package/dist/acl/index.cjs.js +0 -2
  95. package/dist/acl/index.cjs.js.map +0 -1
  96. package/dist/acl/index.esm.js +0 -2
  97. package/dist/acl/index.esm.js.map +0 -1
  98. package/dist/enums/index.cjs.js +0 -2
  99. package/dist/enums/index.cjs.js.map +0 -1
  100. package/dist/enums/index.esm.js +0 -2
  101. package/dist/enums/index.esm.js.map +0 -1
  102. package/dist/fieldViewportHeights-BDcXwnNa.js +0 -2
  103. package/dist/fieldViewportHeights-BDcXwnNa.js.map +0 -1
  104. package/dist/fieldViewportHeights-BiejOiGj.js +0 -2
  105. package/dist/fieldViewportHeights-BiejOiGj.js.map +0 -1
  106. package/dist/fields/index.cjs.js +0 -2
  107. package/dist/fields/index.cjs.js.map +0 -1
  108. package/dist/fields/index.esm.js +0 -2
  109. package/dist/fields/index.esm.js.map +0 -1
  110. package/dist/getNumberValueFromClassNameString-Dm5eOjBJ.js +0 -2
  111. package/dist/getNumberValueFromClassNameString-Dm5eOjBJ.js.map +0 -1
  112. package/dist/getNumberValueFromClassNameString-pKKt97eg.js +0 -2
  113. package/dist/getNumberValueFromClassNameString-pKKt97eg.js.map +0 -1
  114. package/dist/hooks/index.cjs.js +0 -2
  115. package/dist/hooks/index.cjs.js.map +0 -1
  116. package/dist/hooks/index.esm.js +0 -2
  117. package/dist/hooks/index.esm.js.map +0 -1
  118. package/dist/index--JXKMhaT.js +0 -2
  119. package/dist/index--JXKMhaT.js.map +0 -1
  120. package/dist/index-B-FTpy4t.js +0 -2
  121. package/dist/index-B-FTpy4t.js.map +0 -1
  122. package/dist/index-C4uc5BOd.js +0 -2
  123. package/dist/index-C4uc5BOd.js.map +0 -1
  124. package/dist/index-C6SROxLn.js +0 -2
  125. package/dist/index-C6SROxLn.js.map +0 -1
  126. package/dist/index-CPtPsRwp.js +0 -2
  127. package/dist/index-CPtPsRwp.js.map +0 -1
  128. package/dist/index-CbPSDPpZ.js +0 -2
  129. package/dist/index-CbPSDPpZ.js.map +0 -1
  130. package/dist/index-D7075_q9.js +0 -2
  131. package/dist/index-D7075_q9.js.map +0 -1
  132. package/dist/index-DArGZfob.js +0 -2
  133. package/dist/index-DArGZfob.js.map +0 -1
  134. package/dist/index-DfvZ1mDE.js +0 -2
  135. package/dist/index-DfvZ1mDE.js.map +0 -1
  136. package/dist/index-FnRjWfU7.js +0 -2
  137. package/dist/index-FnRjWfU7.js.map +0 -1
  138. package/dist/index-GDdL2MgQ.js +0 -2
  139. package/dist/index-GDdL2MgQ.js.map +0 -1
  140. package/dist/index-gxytNJWT.js +0 -2
  141. package/dist/index-gxytNJWT.js.map +0 -1
  142. package/dist/tailwind/index.cjs.js +0 -2
  143. package/dist/tailwind/index.cjs.js.map +0 -1
  144. package/dist/tailwind/index.esm.js +0 -2
  145. package/dist/tailwind/index.esm.js.map +0 -1
  146. package/dist/userRoles-BIrmWoCJ.js +0 -2
  147. package/dist/userRoles-BIrmWoCJ.js.map +0 -1
  148. package/dist/userRoles-Dd_gfx51.js +0 -2
  149. 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;
@@ -1,4 +1,4 @@
1
- import { CollectionSlug, PayloadRequest } from 'payload';
1
+ import type { CollectionSlug, PayloadRequest } from 'payload';
2
2
  declare const collectionPrefixMap: Partial<Record<CollectionSlug, string>>;
3
3
  type Props = {
4
4
  collection: keyof typeof collectionPrefixMap;
@@ -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;