@kilivi/payloadcms-theme-management 0.1.18 → 0.2.1
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/README.md +21 -1
- package/dist/fields/extendedThemeFields.d.ts +26 -0
- package/dist/fields/extendedThemeFields.d.ts.map +1 -0
- package/dist/fields/extendedThemeFields.js +290 -0
- package/dist/fields/extendedThemeFields.js.map +1 -0
- package/dist/fields/themeConfigurationField.d.ts.map +1 -1
- package/dist/fields/themeConfigurationField.js +39 -10
- package/dist/fields/themeConfigurationField.js.map +1 -1
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -2,13 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
A comprehensive theme management plugin for Payload CMS v3 that provides powerful theming capabilities with SSR support, preventing FOUC (Flash of Unstyled Content).
|
|
4
4
|
|
|
5
|
+
## 🎉 Version 0.2.0 - New Features!
|
|
6
|
+
|
|
7
|
+
- **✅ Tabs Structure** - Plugin now creates a "Nastavení vzhledu" (Appearance Settings) tab
|
|
8
|
+
- **✅ Extended Theme Support** - OKLCH color format with 19+ semantic tokens
|
|
9
|
+
- **✅ shadcn/ui Compatible** - Works with https://ui.shadcn.com/themes
|
|
10
|
+
- **✅ TweakCN Compatible** - Works with https://tweakcn.com/editor/theme
|
|
11
|
+
- **✅ Chart Colors** - 5 customizable colors for data visualization
|
|
12
|
+
|
|
5
13
|
## Features
|
|
6
14
|
|
|
7
15
|
- 🎨 **Multiple Theme Presets** - Cool, Brutal, Neon, Solar, and more
|
|
8
|
-
- 🎨 **
|
|
16
|
+
- 🎨 **Extended Themes** - OKLCH-based themes with full shadcn/ui token support
|
|
17
|
+
- 🎨 **Custom Color Palette** - Full HSL color customization (19+ semantic tokens)
|
|
9
18
|
- 🔤 **Typography Control** - Google Fonts integration for headings, body, and code
|
|
10
19
|
- 📐 **Border Radius Presets** - Sharp, Rounded, or Pill styles
|
|
11
20
|
- 🌓 **Dark Mode Support** - Built-in light/dark/system mode toggle
|
|
21
|
+
- 📊 **Chart Colors** - Data visualization color palette
|
|
12
22
|
- 🚀 **SSR Theme Injection** - Zero FOUC with server-side rendering
|
|
13
23
|
- ⚡ **Performance Optimized** - Critical CSS inlining, preload links
|
|
14
24
|
- 🎯 **Type Safe** - Full TypeScript support
|
|
@@ -371,6 +381,16 @@ Contributions are welcome! Please:
|
|
|
371
381
|
4. Add tests if applicable
|
|
372
382
|
5. Submit a pull request
|
|
373
383
|
|
|
384
|
+
## Troubleshooting
|
|
385
|
+
|
|
386
|
+
### Common Issues
|
|
387
|
+
|
|
388
|
+
**Error: "right-hand side of 'in' should be an object, got undefined"**
|
|
389
|
+
|
|
390
|
+
This is a known Payload CMS issue related to user preferences. See [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) for solutions.
|
|
391
|
+
|
|
392
|
+
**Quick Fix:** Go to `/admin/account` and click "Reset Preferences" at the bottom of the page.
|
|
393
|
+
|
|
374
394
|
## License
|
|
375
395
|
|
|
376
396
|
Apache-2.0
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Field } from 'payload';
|
|
2
|
+
/**
|
|
3
|
+
* Extended Theme Color Fields for Light Mode
|
|
4
|
+
*/
|
|
5
|
+
export declare const extendedLightModeFields: Field[];
|
|
6
|
+
/**
|
|
7
|
+
* Chart color fields (for data visualization)
|
|
8
|
+
*/
|
|
9
|
+
export declare const chartColorFields: Field[];
|
|
10
|
+
/**
|
|
11
|
+
* Extended Theme Selection Field
|
|
12
|
+
*/
|
|
13
|
+
export declare const extendedThemeSelectionField: Field;
|
|
14
|
+
/**
|
|
15
|
+
* Extended Light Mode Configuration
|
|
16
|
+
*/
|
|
17
|
+
export declare const extendedLightModeField: Field;
|
|
18
|
+
/**
|
|
19
|
+
* Extended Dark Mode Configuration
|
|
20
|
+
*/
|
|
21
|
+
export declare const extendedDarkModeField: Field;
|
|
22
|
+
/**
|
|
23
|
+
* Chart Colors Configuration
|
|
24
|
+
*/
|
|
25
|
+
export declare const chartColorsField: Field;
|
|
26
|
+
//# sourceMappingURL=extendedThemeFields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extendedThemeFields.d.ts","sourceRoot":"","sources":["../../src/fields/extendedThemeFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAoCpC;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,KAAK,EAgG1C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,EA0BnC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,KAezC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,KAoBpC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAoBnC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAoB9B,CAAA"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { extendedThemePresets } from '../extended-presets.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extended Theme Configuration Fields
|
|
4
|
+
* Provides advanced color token configuration using OKLCH format
|
|
5
|
+
* Compatible with shadcn/ui and TweakCN theme editors
|
|
6
|
+
*/ const extendedThemeOptions = Object.values(extendedThemePresets).map((preset)=>({
|
|
7
|
+
label: preset.label,
|
|
8
|
+
value: preset.value
|
|
9
|
+
}));
|
|
10
|
+
/**
|
|
11
|
+
* Creates OKLCH color input field
|
|
12
|
+
*/ function createOKLCHColorField(name, label, description) {
|
|
13
|
+
return {
|
|
14
|
+
name,
|
|
15
|
+
type: 'text',
|
|
16
|
+
label,
|
|
17
|
+
admin: {
|
|
18
|
+
description,
|
|
19
|
+
placeholder: 'oklch(0.5 0.2 250)',
|
|
20
|
+
components: {
|
|
21
|
+
Field: '@kilivi/payloadcms-theme-management/fields/ThemeColorPickerField'
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Extended Theme Color Fields for Light Mode
|
|
28
|
+
*/ export const extendedLightModeFields = [
|
|
29
|
+
createOKLCHColorField('background', {
|
|
30
|
+
en: 'Background',
|
|
31
|
+
cs: 'Pozadí'
|
|
32
|
+
}, {
|
|
33
|
+
en: 'Main background color',
|
|
34
|
+
cs: 'Hlavní barva pozadí'
|
|
35
|
+
}),
|
|
36
|
+
createOKLCHColorField('foreground', {
|
|
37
|
+
en: 'Foreground',
|
|
38
|
+
cs: 'Popředí'
|
|
39
|
+
}, {
|
|
40
|
+
en: 'Main text color',
|
|
41
|
+
cs: 'Hlavní barva textu'
|
|
42
|
+
}),
|
|
43
|
+
createOKLCHColorField('card', {
|
|
44
|
+
en: 'Card',
|
|
45
|
+
cs: 'Karta'
|
|
46
|
+
}, {
|
|
47
|
+
en: 'Card background',
|
|
48
|
+
cs: 'Pozadí karty'
|
|
49
|
+
}),
|
|
50
|
+
createOKLCHColorField('cardForeground', {
|
|
51
|
+
en: 'Card Foreground',
|
|
52
|
+
cs: 'Popředí karty'
|
|
53
|
+
}, {
|
|
54
|
+
en: 'Card text color',
|
|
55
|
+
cs: 'Barva textu karty'
|
|
56
|
+
}),
|
|
57
|
+
createOKLCHColorField('popover', {
|
|
58
|
+
en: 'Popover',
|
|
59
|
+
cs: 'Vyskakovací okno'
|
|
60
|
+
}, {
|
|
61
|
+
en: 'Popover background',
|
|
62
|
+
cs: 'Pozadí vyskakovacího okna'
|
|
63
|
+
}),
|
|
64
|
+
createOKLCHColorField('popoverForeground', {
|
|
65
|
+
en: 'Popover Foreground',
|
|
66
|
+
cs: 'Popředí vyskakovacího okna'
|
|
67
|
+
}, {
|
|
68
|
+
en: 'Popover text color',
|
|
69
|
+
cs: 'Barva textu vyskakovacího okna'
|
|
70
|
+
}),
|
|
71
|
+
createOKLCHColorField('primary', {
|
|
72
|
+
en: 'Primary',
|
|
73
|
+
cs: 'Primární'
|
|
74
|
+
}, {
|
|
75
|
+
en: 'Primary brand color',
|
|
76
|
+
cs: 'Primární značková barva'
|
|
77
|
+
}),
|
|
78
|
+
createOKLCHColorField('primaryForeground', {
|
|
79
|
+
en: 'Primary Foreground',
|
|
80
|
+
cs: 'Popředí primární'
|
|
81
|
+
}, {
|
|
82
|
+
en: 'Text on primary color',
|
|
83
|
+
cs: 'Text na primární barvě'
|
|
84
|
+
}),
|
|
85
|
+
createOKLCHColorField('secondary', {
|
|
86
|
+
en: 'Secondary',
|
|
87
|
+
cs: 'Sekundární'
|
|
88
|
+
}, {
|
|
89
|
+
en: 'Secondary accent color',
|
|
90
|
+
cs: 'Sekundární akcentová barva'
|
|
91
|
+
}),
|
|
92
|
+
createOKLCHColorField('secondaryForeground', {
|
|
93
|
+
en: 'Secondary Foreground',
|
|
94
|
+
cs: 'Popředí sekundární'
|
|
95
|
+
}, {
|
|
96
|
+
en: 'Text on secondary color',
|
|
97
|
+
cs: 'Text na sekundární barvě'
|
|
98
|
+
}),
|
|
99
|
+
createOKLCHColorField('muted', {
|
|
100
|
+
en: 'Muted',
|
|
101
|
+
cs: 'Tlumená'
|
|
102
|
+
}, {
|
|
103
|
+
en: 'Muted background color',
|
|
104
|
+
cs: 'Tlumená barva pozadí'
|
|
105
|
+
}),
|
|
106
|
+
createOKLCHColorField('mutedForeground', {
|
|
107
|
+
en: 'Muted Foreground',
|
|
108
|
+
cs: 'Popředí tlumené'
|
|
109
|
+
}, {
|
|
110
|
+
en: 'Muted text color',
|
|
111
|
+
cs: 'Tlumená barva textu'
|
|
112
|
+
}),
|
|
113
|
+
createOKLCHColorField('accent', {
|
|
114
|
+
en: 'Accent',
|
|
115
|
+
cs: 'Akcentová'
|
|
116
|
+
}, {
|
|
117
|
+
en: 'Accent color',
|
|
118
|
+
cs: 'Akcentová barva'
|
|
119
|
+
}),
|
|
120
|
+
createOKLCHColorField('accentForeground', {
|
|
121
|
+
en: 'Accent Foreground',
|
|
122
|
+
cs: 'Popředí akcentové'
|
|
123
|
+
}, {
|
|
124
|
+
en: 'Text on accent color',
|
|
125
|
+
cs: 'Text na akcentové barvě'
|
|
126
|
+
}),
|
|
127
|
+
createOKLCHColorField('destructive', {
|
|
128
|
+
en: 'Destructive',
|
|
129
|
+
cs: 'Destruktivní'
|
|
130
|
+
}, {
|
|
131
|
+
en: 'Error/danger color',
|
|
132
|
+
cs: 'Barva chyby/nebezpečí'
|
|
133
|
+
}),
|
|
134
|
+
createOKLCHColorField('destructiveForeground', {
|
|
135
|
+
en: 'Destructive Foreground',
|
|
136
|
+
cs: 'Popředí destruktivní'
|
|
137
|
+
}, {
|
|
138
|
+
en: 'Text on destructive color',
|
|
139
|
+
cs: 'Text na destruktivní barvě'
|
|
140
|
+
}),
|
|
141
|
+
createOKLCHColorField('border', {
|
|
142
|
+
en: 'Border',
|
|
143
|
+
cs: 'Okraj'
|
|
144
|
+
}, {
|
|
145
|
+
en: 'Border color',
|
|
146
|
+
cs: 'Barva okraje'
|
|
147
|
+
}),
|
|
148
|
+
createOKLCHColorField('input', {
|
|
149
|
+
en: 'Input',
|
|
150
|
+
cs: 'Vstup'
|
|
151
|
+
}, {
|
|
152
|
+
en: 'Input border color',
|
|
153
|
+
cs: 'Barva okraje vstupu'
|
|
154
|
+
}),
|
|
155
|
+
createOKLCHColorField('ring', {
|
|
156
|
+
en: 'Ring',
|
|
157
|
+
cs: 'Zvýraznění'
|
|
158
|
+
}, {
|
|
159
|
+
en: 'Focus ring color',
|
|
160
|
+
cs: 'Barva zvýraznění focus'
|
|
161
|
+
})
|
|
162
|
+
];
|
|
163
|
+
/**
|
|
164
|
+
* Chart color fields (for data visualization)
|
|
165
|
+
*/ export const chartColorFields = [
|
|
166
|
+
createOKLCHColorField('chart1', {
|
|
167
|
+
en: 'Chart Color 1',
|
|
168
|
+
cs: 'Barva grafu 1'
|
|
169
|
+
}, {
|
|
170
|
+
en: 'First chart color',
|
|
171
|
+
cs: 'První barva grafu'
|
|
172
|
+
}),
|
|
173
|
+
createOKLCHColorField('chart2', {
|
|
174
|
+
en: 'Chart Color 2',
|
|
175
|
+
cs: 'Barva grafu 2'
|
|
176
|
+
}, {
|
|
177
|
+
en: 'Second chart color',
|
|
178
|
+
cs: 'Druhá barva grafu'
|
|
179
|
+
}),
|
|
180
|
+
createOKLCHColorField('chart3', {
|
|
181
|
+
en: 'Chart Color 3',
|
|
182
|
+
cs: 'Barva grafu 3'
|
|
183
|
+
}, {
|
|
184
|
+
en: 'Third chart color',
|
|
185
|
+
cs: 'Třetí barva grafu'
|
|
186
|
+
}),
|
|
187
|
+
createOKLCHColorField('chart4', {
|
|
188
|
+
en: 'Chart Color 4',
|
|
189
|
+
cs: 'Barva grafu 4'
|
|
190
|
+
}, {
|
|
191
|
+
en: 'Fourth chart color',
|
|
192
|
+
cs: 'Čtvrtá barva grafu'
|
|
193
|
+
}),
|
|
194
|
+
createOKLCHColorField('chart5', {
|
|
195
|
+
en: 'Chart Color 5',
|
|
196
|
+
cs: 'Barva grafu 5'
|
|
197
|
+
}, {
|
|
198
|
+
en: 'Fifth chart color',
|
|
199
|
+
cs: 'Pátá barva grafu'
|
|
200
|
+
})
|
|
201
|
+
];
|
|
202
|
+
/**
|
|
203
|
+
* Extended Theme Selection Field
|
|
204
|
+
*/ export const extendedThemeSelectionField = {
|
|
205
|
+
name: 'extendedTheme',
|
|
206
|
+
type: 'select',
|
|
207
|
+
label: {
|
|
208
|
+
en: '🎨 Extended Theme',
|
|
209
|
+
cs: '🎨 Rozšířené téma'
|
|
210
|
+
},
|
|
211
|
+
defaultValue: 'cool-extended',
|
|
212
|
+
options: extendedThemeOptions,
|
|
213
|
+
admin: {
|
|
214
|
+
description: {
|
|
215
|
+
en: 'Select an extended theme with full OKLCH color support. Compatible with shadcn/ui.',
|
|
216
|
+
cs: 'Vyberte rozšířené téma s plnou podporou OKLCH barev. Kompatibilní s shadcn/ui.'
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Extended Light Mode Configuration
|
|
222
|
+
*/ export const extendedLightModeField = {
|
|
223
|
+
type: 'collapsible',
|
|
224
|
+
label: {
|
|
225
|
+
en: '☀️ Extended Light Mode',
|
|
226
|
+
cs: '☀️ Rozšířený světlý režim'
|
|
227
|
+
},
|
|
228
|
+
admin: {
|
|
229
|
+
initCollapsed: true,
|
|
230
|
+
description: {
|
|
231
|
+
en: 'Advanced color configuration for light mode using OKLCH format',
|
|
232
|
+
cs: 'Pokročilá konfigurace barev pro světlý režim pomocí formátu OKLCH'
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
fields: [
|
|
236
|
+
{
|
|
237
|
+
name: 'extendedLightMode',
|
|
238
|
+
type: 'group',
|
|
239
|
+
fields: extendedLightModeFields
|
|
240
|
+
}
|
|
241
|
+
]
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* Extended Dark Mode Configuration
|
|
245
|
+
*/ export const extendedDarkModeField = {
|
|
246
|
+
type: 'collapsible',
|
|
247
|
+
label: {
|
|
248
|
+
en: '🌙 Extended Dark Mode',
|
|
249
|
+
cs: '🌙 Rozšířený tmavý režim'
|
|
250
|
+
},
|
|
251
|
+
admin: {
|
|
252
|
+
initCollapsed: true,
|
|
253
|
+
description: {
|
|
254
|
+
en: 'Advanced color configuration for dark mode using OKLCH format',
|
|
255
|
+
cs: 'Pokročilá konfigurace barev pro tmavý režim pomocí formátu OKLCH'
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
fields: [
|
|
259
|
+
{
|
|
260
|
+
name: 'extendedDarkMode',
|
|
261
|
+
type: 'group',
|
|
262
|
+
fields: extendedLightModeFields
|
|
263
|
+
}
|
|
264
|
+
]
|
|
265
|
+
};
|
|
266
|
+
/**
|
|
267
|
+
* Chart Colors Configuration
|
|
268
|
+
*/ export const chartColorsField = {
|
|
269
|
+
type: 'collapsible',
|
|
270
|
+
label: {
|
|
271
|
+
en: '📊 Chart Colors',
|
|
272
|
+
cs: '📊 Barvy grafů'
|
|
273
|
+
},
|
|
274
|
+
admin: {
|
|
275
|
+
initCollapsed: true,
|
|
276
|
+
description: {
|
|
277
|
+
en: 'Configure colors for data visualization and charts',
|
|
278
|
+
cs: 'Nakonfigurujte barvy pro vizualizaci dat a grafy'
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
fields: [
|
|
282
|
+
{
|
|
283
|
+
name: 'chartColors',
|
|
284
|
+
type: 'group',
|
|
285
|
+
fields: chartColorFields
|
|
286
|
+
}
|
|
287
|
+
]
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
//# sourceMappingURL=extendedThemeFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/fields/extendedThemeFields.ts"],"sourcesContent":["import type { Field } from 'payload'\nimport { extendedThemePresets } from '../extended-presets.js'\n\n/**\n * Extended Theme Configuration Fields\n * Provides advanced color token configuration using OKLCH format\n * Compatible with shadcn/ui and TweakCN theme editors\n */\n\nconst extendedThemeOptions = Object.values(extendedThemePresets).map((preset) => ({\n label: preset.label,\n value: preset.value,\n}))\n\n/**\n * Creates OKLCH color input field\n */\nfunction createOKLCHColorField(\n name: string,\n label: { en: string; cs: string },\n description?: { en: string; cs: string },\n): Field {\n return {\n name,\n type: 'text',\n label,\n admin: {\n description,\n placeholder: 'oklch(0.5 0.2 250)',\n components: {\n Field: '@kilivi/payloadcms-theme-management/fields/ThemeColorPickerField',\n },\n },\n }\n}\n\n/**\n * Extended Theme Color Fields for Light Mode\n */\nexport const extendedLightModeFields: Field[] = [\n createOKLCHColorField(\n 'background',\n { en: 'Background', cs: 'Pozadí' },\n { en: 'Main background color', cs: 'Hlavní barva pozadí' },\n ),\n createOKLCHColorField(\n 'foreground',\n { en: 'Foreground', cs: 'Popředí' },\n { en: 'Main text color', cs: 'Hlavní barva textu' },\n ),\n createOKLCHColorField(\n 'card',\n { en: 'Card', cs: 'Karta' },\n { en: 'Card background', cs: 'Pozadí karty' },\n ),\n createOKLCHColorField(\n 'cardForeground',\n { en: 'Card Foreground', cs: 'Popředí karty' },\n { en: 'Card text color', cs: 'Barva textu karty' },\n ),\n createOKLCHColorField(\n 'popover',\n { en: 'Popover', cs: 'Vyskakovací okno' },\n { en: 'Popover background', cs: 'Pozadí vyskakovacího okna' },\n ),\n createOKLCHColorField(\n 'popoverForeground',\n { en: 'Popover Foreground', cs: 'Popředí vyskakovacího okna' },\n { en: 'Popover text color', cs: 'Barva textu vyskakovacího okna' },\n ),\n createOKLCHColorField(\n 'primary',\n { en: 'Primary', cs: 'Primární' },\n { en: 'Primary brand color', cs: 'Primární značková barva' },\n ),\n createOKLCHColorField(\n 'primaryForeground',\n { en: 'Primary Foreground', cs: 'Popředí primární' },\n { en: 'Text on primary color', cs: 'Text na primární barvě' },\n ),\n createOKLCHColorField(\n 'secondary',\n { en: 'Secondary', cs: 'Sekundární' },\n { en: 'Secondary accent color', cs: 'Sekundární akcentová barva' },\n ),\n createOKLCHColorField(\n 'secondaryForeground',\n { en: 'Secondary Foreground', cs: 'Popředí sekundární' },\n { en: 'Text on secondary color', cs: 'Text na sekundární barvě' },\n ),\n createOKLCHColorField(\n 'muted',\n { en: 'Muted', cs: 'Tlumená' },\n { en: 'Muted background color', cs: 'Tlumená barva pozadí' },\n ),\n createOKLCHColorField(\n 'mutedForeground',\n { en: 'Muted Foreground', cs: 'Popředí tlumené' },\n { en: 'Muted text color', cs: 'Tlumená barva textu' },\n ),\n createOKLCHColorField(\n 'accent',\n { en: 'Accent', cs: 'Akcentová' },\n { en: 'Accent color', cs: 'Akcentová barva' },\n ),\n createOKLCHColorField(\n 'accentForeground',\n { en: 'Accent Foreground', cs: 'Popředí akcentové' },\n { en: 'Text on accent color', cs: 'Text na akcentové barvě' },\n ),\n createOKLCHColorField(\n 'destructive',\n { en: 'Destructive', cs: 'Destruktivní' },\n { en: 'Error/danger color', cs: 'Barva chyby/nebezpečí' },\n ),\n createOKLCHColorField(\n 'destructiveForeground',\n { en: 'Destructive Foreground', cs: 'Popředí destruktivní' },\n { en: 'Text on destructive color', cs: 'Text na destruktivní barvě' },\n ),\n createOKLCHColorField(\n 'border',\n { en: 'Border', cs: 'Okraj' },\n { en: 'Border color', cs: 'Barva okraje' },\n ),\n createOKLCHColorField(\n 'input',\n { en: 'Input', cs: 'Vstup' },\n { en: 'Input border color', cs: 'Barva okraje vstupu' },\n ),\n createOKLCHColorField(\n 'ring',\n { en: 'Ring', cs: 'Zvýraznění' },\n { en: 'Focus ring color', cs: 'Barva zvýraznění focus' },\n ),\n]\n\n/**\n * Chart color fields (for data visualization)\n */\nexport const chartColorFields: Field[] = [\n createOKLCHColorField(\n 'chart1',\n { en: 'Chart Color 1', cs: 'Barva grafu 1' },\n { en: 'First chart color', cs: 'První barva grafu' },\n ),\n createOKLCHColorField(\n 'chart2',\n { en: 'Chart Color 2', cs: 'Barva grafu 2' },\n { en: 'Second chart color', cs: 'Druhá barva grafu' },\n ),\n createOKLCHColorField(\n 'chart3',\n { en: 'Chart Color 3', cs: 'Barva grafu 3' },\n { en: 'Third chart color', cs: 'Třetí barva grafu' },\n ),\n createOKLCHColorField(\n 'chart4',\n { en: 'Chart Color 4', cs: 'Barva grafu 4' },\n { en: 'Fourth chart color', cs: 'Čtvrtá barva grafu' },\n ),\n createOKLCHColorField(\n 'chart5',\n { en: 'Chart Color 5', cs: 'Barva grafu 5' },\n { en: 'Fifth chart color', cs: 'Pátá barva grafu' },\n ),\n]\n\n/**\n * Extended Theme Selection Field\n */\nexport const extendedThemeSelectionField: Field = {\n name: 'extendedTheme',\n type: 'select',\n label: {\n en: '🎨 Extended Theme',\n cs: '🎨 Rozšířené téma',\n },\n defaultValue: 'cool-extended',\n options: extendedThemeOptions,\n admin: {\n description: {\n en: 'Select an extended theme with full OKLCH color support. Compatible with shadcn/ui.',\n cs: 'Vyberte rozšířené téma s plnou podporou OKLCH barev. Kompatibilní s shadcn/ui.',\n },\n },\n}\n\n/**\n * Extended Light Mode Configuration\n */\nexport const extendedLightModeField: Field = {\n type: 'collapsible',\n label: {\n en: '☀️ Extended Light Mode',\n cs: '☀️ Rozšířený světlý režim',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Advanced color configuration for light mode using OKLCH format',\n cs: 'Pokročilá konfigurace barev pro světlý režim pomocí formátu OKLCH',\n },\n },\n fields: [\n {\n name: 'extendedLightMode',\n type: 'group',\n fields: extendedLightModeFields,\n },\n ],\n}\n\n/**\n * Extended Dark Mode Configuration\n */\nexport const extendedDarkModeField: Field = {\n type: 'collapsible',\n label: {\n en: '🌙 Extended Dark Mode',\n cs: '🌙 Rozšířený tmavý režim',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Advanced color configuration for dark mode using OKLCH format',\n cs: 'Pokročilá konfigurace barev pro tmavý režim pomocí formátu OKLCH',\n },\n },\n fields: [\n {\n name: 'extendedDarkMode',\n type: 'group',\n fields: extendedLightModeFields, // Same structure, different values\n },\n ],\n}\n\n/**\n * Chart Colors Configuration\n */\nexport const chartColorsField: Field = {\n type: 'collapsible',\n label: {\n en: '📊 Chart Colors',\n cs: '📊 Barvy grafů',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Configure colors for data visualization and charts',\n cs: 'Nakonfigurujte barvy pro vizualizaci dat a grafy',\n },\n },\n fields: [\n {\n name: 'chartColors',\n type: 'group',\n fields: chartColorFields,\n },\n ],\n}\n"],"names":["extendedThemePresets","extendedThemeOptions","Object","values","map","preset","label","value","createOKLCHColorField","name","description","type","admin","placeholder","components","Field","extendedLightModeFields","en","cs","chartColorFields","extendedThemeSelectionField","defaultValue","options","extendedLightModeField","initCollapsed","fields","extendedDarkModeField","chartColorsField"],"mappings":"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AME,8BAAqC;IAChDX,MAAM;IACNE,MAAM;IACNL,OAAO;QACLW,IAAI;QACJC,IAAI;IACN;IACAG,cAAc;IACdC,SAASrB;IACTW,OAAO;QACLF,aAAa;YACXO,IAAI;YACJC,IAAI;QACN;IACF;AACF,EAAC;AAED;;CAEC,GACD,OAAO,MAAMK,yBAAgC;IAC3CZ,MAAM;IACNL,OAAO;QACLW,IAAI;QACJC,IAAI;IACN;IACAN,OAAO;QACLY,eAAe;QACfd,aAAa;YACXO,IAAI;YACJC,IAAI;QACN;IACF;IACAO,QAAQ;QACN;YACEhB,MAAM;YACNE,MAAM;YACNc,QAAQT;QACV;KACD;AACH,EAAC;AAED;;CAEC,GACD,OAAO,MAAMU,wBAA+B;IAC1Cf,MAAM;IACNL,OAAO;QACLW,IAAI;QACJC,IAAI;IACN;IACAN,OAAO;QACLY,eAAe;QACfd,aAAa;YACXO,IAAI;YACJC,IAAI;QACN;IACF;IACAO,QAAQ;QACN;YACEhB,MAAM;YACNE,MAAM;YACNc,QAAQT;QACV;KACD;AACH,EAAC;AAED;;CAEC,GACD,OAAO,MAAMW,mBAA0B;IACrChB,MAAM;IACNL,OAAO;QACLW,IAAI;QACJC,IAAI;IACN;IACAN,OAAO;QACLY,eAAe;QACfd,aAAa;YACXO,IAAI;YACJC,IAAI;QACN;IACF;IACAO,QAAQ;QACN;YACEhB,MAAM;YACNE,MAAM;YACNc,QAAQN;QACV;KACD;AACH,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"themeConfigurationField.d.ts","sourceRoot":"","sources":["../../src/fields/themeConfigurationField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAOpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"themeConfigurationField.d.ts","sourceRoot":"","sources":["../../src/fields/themeConfigurationField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAOpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAS9C,UAAU,8BAA8B;IACtC,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,sBAAsB,EAAE,OAAO,CAAA;IAC/B,gBAAgB,EAAE,OAAO,CAAA;IACzB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,8BAA8B,GAAG,KAAK,CAya5F"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BASE_FONT_SIZE_OPTIONS, BODY_FONT_OPTIONS, HEADING_FONT_OPTIONS, LINE_HEIGHT_OPTIONS } from '../constants/themeFonts.js';
|
|
2
2
|
import { darkModeField, lightModeField } from './colorModeFields.js';
|
|
3
|
+
import { extendedThemeSelectionField, extendedLightModeField, extendedDarkModeField, chartColorsField } from './extendedThemeFields.js';
|
|
3
4
|
/**
|
|
4
5
|
* Theme Configuration Field with Theme Selection as default value setter
|
|
5
6
|
* Theme Selection populates lightMode/darkMode colors automatically
|
|
@@ -33,8 +34,31 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
|
|
|
33
34
|
Field: '@kilivi/payloadcms-theme-management/fields/ThemePreviewField'
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
|
-
}
|
|
37
|
+
},
|
|
38
|
+
extendedThemeSelectionField
|
|
37
39
|
];
|
|
40
|
+
// Extended Theme Configuration (OKLCH colors, shadcn/ui compatible)
|
|
41
|
+
if (enableAdvancedFeatures) {
|
|
42
|
+
fields.push({
|
|
43
|
+
type: 'collapsible',
|
|
44
|
+
label: {
|
|
45
|
+
en: '🎨 Extended Theme Configuration',
|
|
46
|
+
cs: '🎨 Rozšířená konfigurace tématu'
|
|
47
|
+
},
|
|
48
|
+
admin: {
|
|
49
|
+
initCollapsed: true,
|
|
50
|
+
description: {
|
|
51
|
+
en: 'Advanced color configuration using OKLCH format. Compatible with shadcn/ui and TweakCN.',
|
|
52
|
+
cs: 'Pokročilá konfigurace barev pomocí formátu OKLCH. Kompatibilní s shadcn/ui a TweakCN.'
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
fields: [
|
|
56
|
+
extendedLightModeField,
|
|
57
|
+
extendedDarkModeField,
|
|
58
|
+
chartColorsField
|
|
59
|
+
]
|
|
60
|
+
});
|
|
61
|
+
}
|
|
38
62
|
// Color Mode Settings
|
|
39
63
|
if (includeColorModeToggle) {
|
|
40
64
|
fields.push({
|
|
@@ -466,16 +490,21 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
|
|
|
466
490
|
});
|
|
467
491
|
}
|
|
468
492
|
return {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
493
|
+
type: 'tabs',
|
|
494
|
+
tabs: [
|
|
495
|
+
{
|
|
496
|
+
name: 'themeConfiguration',
|
|
497
|
+
label: {
|
|
498
|
+
en: '🎨 Appearance Settings',
|
|
499
|
+
cs: '🎨 Nastavení vzhledu'
|
|
500
|
+
},
|
|
501
|
+
description: {
|
|
502
|
+
en: 'Configure website appearance and styling',
|
|
503
|
+
cs: 'Nakonfigurujte vzhled a stylování webu'
|
|
504
|
+
},
|
|
505
|
+
fields
|
|
476
506
|
}
|
|
477
|
-
|
|
478
|
-
fields
|
|
507
|
+
]
|
|
479
508
|
};
|
|
480
509
|
}
|
|
481
510
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/themeConfigurationField.ts"],"sourcesContent":["import type { Field } from 'payload'\nimport {\n BASE_FONT_SIZE_OPTIONS,\n BODY_FONT_OPTIONS,\n HEADING_FONT_OPTIONS,\n LINE_HEIGHT_OPTIONS,\n} from '../constants/themeFonts.js'\nimport type { ThemePreset } from '../index.js'\nimport { darkModeField, lightModeField } from './colorModeFields.js'\n\ninterface ThemeConfigurationFieldOptions {\n themePresets: ThemePreset[]\n defaultTheme: string\n includeColorModeToggle: boolean\n includeCustomCSS: boolean\n includeBrandIdentity: boolean\n enableAdvancedFeatures?: boolean\n}\n\n/**\n * Theme Configuration Field with Theme Selection as default value setter\n * Theme Selection populates lightMode/darkMode colors automatically\n */\nexport function createThemeConfigurationField(options: ThemeConfigurationFieldOptions): Field {\n const {\n themePresets,\n defaultTheme,\n includeColorModeToggle,\n includeCustomCSS,\n enableAdvancedFeatures = true,\n } = options\n\n const themeOptions = themePresets.map((preset) => {\n const previewColor = preset.preview?.colors.primary\n const label = previewColor ? `${preset.label} • ${previewColor}` : preset.label\n return {\n label,\n value: preset.name,\n }\n })\n\n const fields: Field[] = [\n {\n name: 'theme',\n type: 'select',\n required: true,\n defaultValue: defaultTheme,\n options: themeOptions,\n label: {\n en: '🎨 Theme Selection',\n cs: '🎨 Výběr tématu',\n },\n admin: {\n description: {\n en: 'Select a theme to auto-populate color values. You can customize colors after selection.',\n cs: 'Vyberte téma pro automatické předvyplnění barev. Po výběru můžete barvy upravit.',\n },\n components: {\n Field: '@kilivi/payloadcms-theme-management/fields/ThemePreviewField',\n },\n },\n },\n ]\n\n // Color Mode Settings\n if (includeColorModeToggle) {\n fields.push({\n type: 'collapsible',\n label: {\n en: '🌗 Color Mode Settings',\n cs: '🌗 Nastavení barevného režimu',\n },\n admin: {\n initCollapsed: false,\n description: {\n en: 'Configure light and dark mode colors. Changes here override theme selection.',\n cs: 'Nakonfigurujte barvy světlého a tmavého režimu. Změny zde přepíší výběr tématu.',\n },\n },\n fields: [\n {\n type: 'row',\n fields: [\n {\n name: 'colorMode',\n type: 'select',\n label: {\n en: 'Default Color Mode',\n cs: 'Výchozí barevný režim',\n },\n defaultValue: 'auto',\n options: [\n {\n label: {\n en: 'Auto (System)',\n cs: 'Automaticky (Systém)',\n },\n value: 'auto',\n },\n {\n label: { en: 'Light', cs: 'Světlý' },\n value: 'light',\n },\n {\n label: { en: 'Dark', cs: 'Tmavý' },\n value: 'dark',\n },\n ],\n admin: {\n description: {\n en: 'Default color mode for visitors',\n cs: 'Výchozí barevný režim pro návštěvníky',\n },\n width: '50%',\n },\n },\n {\n name: 'allowColorModeToggle',\n type: 'checkbox',\n label: {\n en: 'Enable Mode Toggle',\n cs: 'Povolit přepínač režimu',\n },\n defaultValue: true,\n admin: {\n description: {\n en: 'Let visitors switch modes',\n cs: 'Umožnit návštěvníkům přepínat režimy',\n },\n width: '50%',\n },\n },\n ],\n },\n lightModeField,\n darkModeField,\n ],\n })\n }\n\n fields.push({\n type: 'collapsible',\n label: {\n en: '🅰️ Typography',\n cs: '🅰️ Typografie',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Choose font families and base typography settings. Leave fields on \"Use preset\" to inherit the theme defaults.',\n cs: 'Zvolte rodiny písem a základní typografické nastavení. Hodnota \"Použít výchozí\" zachová nastavení motivu.',\n },\n },\n fields: [\n {\n name: 'typography',\n type: 'group',\n fields: [\n {\n type: 'row',\n fields: [\n {\n name: 'bodyFont',\n type: 'select',\n label: {\n en: 'Body font',\n cs: 'Písmo pro text',\n },\n defaultValue: 'preset',\n options: BODY_FONT_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n {\n name: 'headingFont',\n type: 'select',\n label: {\n en: 'Heading font',\n cs: 'Písmo pro nadpisy',\n },\n defaultValue: 'preset',\n options: HEADING_FONT_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n ],\n },\n {\n type: 'row',\n fields: [\n {\n name: 'bodyFontCustom',\n type: 'text',\n label: {\n en: 'Custom body font stack',\n cs: 'Vlastní písmo pro text',\n },\n admin: {\n width: '50%',\n placeholder: '\"IBM Plex Sans\", sans-serif',\n description: {\n en: 'Provide full CSS font-family stack when using a custom font.',\n cs: 'Při volbě vlastního písma zadejte celý CSS zápis font-family.',\n },\n condition: (_, siblingData) => siblingData?.bodyFont === 'custom',\n },\n },\n {\n name: 'headingFontCustom',\n type: 'text',\n label: {\n en: 'Custom heading font stack',\n cs: 'Vlastní písmo pro nadpisy',\n },\n admin: {\n width: '50%',\n placeholder: '\"Cormorant Garamond\", serif',\n description: {\n en: 'Provide full CSS font-family stack when using a custom heading font.',\n cs: 'Při volbě vlastního nadpisového písma zadejte celý CSS zápis font-family.',\n },\n condition: (_, siblingData) => siblingData?.headingFont === 'custom',\n },\n },\n ],\n },\n {\n type: 'row',\n fields: [\n {\n name: 'baseFontSize',\n type: 'select',\n label: {\n en: 'Base font size',\n cs: 'Základní velikost písma',\n },\n defaultValue: 'preset',\n options: BASE_FONT_SIZE_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n {\n name: 'lineHeight',\n type: 'select',\n label: {\n en: 'Line height',\n cs: 'Řádkování',\n },\n defaultValue: 'preset',\n options: LINE_HEIGHT_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n ],\n },\n ],\n },\n ],\n })\n\n // Design Customization\n fields.push({\n type: 'collapsible',\n label: {\n en: '✨ Design Customization',\n cs: '✨ Přizpůsobení designu',\n },\n admin: {\n initCollapsed: true,\n },\n fields: [\n {\n name: 'borderRadius',\n type: 'select',\n label: {\n en: 'Border Radius',\n cs: 'Zaoblení rohů',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'None', cs: 'Žádné' }, value: 'none' },\n { label: { en: 'Small', cs: 'Malé' }, value: 'small' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'Large', cs: 'Velké' }, value: 'large' },\n { label: { en: 'Full', cs: 'Plné' }, value: 'xl' },\n ],\n admin: {\n components: {\n Field: '@kilivi/payloadcms-theme-management/fields/RadiusField',\n },\n width: '33%',\n },\n },\n {\n name: 'fontScale',\n type: 'select',\n label: {\n en: 'Font Scale',\n cs: 'Velikost písma',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'Small', cs: 'Malé' }, value: 'small' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'Large', cs: 'Velké' }, value: 'large' },\n ],\n admin: {\n width: '33%',\n },\n },\n {\n name: 'spacing',\n type: 'select',\n label: {\n en: 'Spacing',\n cs: 'Mezery',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'Compact', cs: 'Kompaktní' }, value: 'compact' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'Spacious', cs: 'Prostorné' }, value: 'spacious' },\n ],\n admin: {\n width: '34%',\n },\n },\n ],\n })\n\n // Advanced Settings\n if (enableAdvancedFeatures) {\n const advancedFields: Field[] = [\n {\n name: 'animationLevel',\n type: 'select',\n label: {\n en: 'Animation Level',\n cs: 'Úroveň animací',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'None', cs: 'Žádné' }, value: 'none' },\n { label: { en: 'Reduced', cs: 'Snížené' }, value: 'reduced' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'High', cs: 'Vysoké' }, value: 'high' },\n ],\n admin: {\n description: {\n en: 'Control website animations and transitions',\n cs: 'Kontrola animací a přechodů na webu',\n },\n width: '50%',\n },\n },\n ]\n\n if (includeCustomCSS) {\n advancedFields.push({\n name: 'customCSS',\n type: 'code',\n label: {\n en: 'Custom CSS',\n cs: 'Vlastní CSS',\n },\n admin: {\n language: 'css',\n description: {\n en: 'Add custom CSS to override default styles',\n cs: 'Přidejte vlastní CSS pro přepsání výchozích stylů',\n },\n // placeholder:\n // ':root {\\n --primary: #your-color;\\n --border-radius: 8px;\\n --font-family: \"Your Font\";\\n}\\n\\n.custom-class {\\n /* Your custom styles */\\n}',\n // rows: 8,\n },\n })\n }\n\n fields.push({\n type: 'collapsible',\n label: {\n en: '⚙️ Advanced Settings',\n cs: '⚙️ Pokročilé nastavení',\n },\n admin: {\n initCollapsed: true,\n },\n fields: advancedFields,\n })\n }\n\n return {\n name: 'themeConfiguration',\n type: 'group',\n label: false,\n admin: {\n description: {\n en: 'Configure website appearance and styling',\n cs: 'Nakonfigurujte vzhled a stylování webu',\n },\n },\n fields,\n }\n}\n"],"names":["BASE_FONT_SIZE_OPTIONS","BODY_FONT_OPTIONS","HEADING_FONT_OPTIONS","LINE_HEIGHT_OPTIONS","darkModeField","lightModeField","createThemeConfigurationField","options","themePresets","defaultTheme","includeColorModeToggle","includeCustomCSS","enableAdvancedFeatures","themeOptions","map","preset","previewColor","preview","colors","primary","label","value","name","fields","type","required","defaultValue","en","cs","admin","description","components","Field","push","initCollapsed","width","option","placeholder","condition","_","siblingData","bodyFont","headingFont","advancedFields","language"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/fields/themeConfigurationField.ts"],"sourcesContent":["import type { Field } from 'payload'\nimport {\n BASE_FONT_SIZE_OPTIONS,\n BODY_FONT_OPTIONS,\n HEADING_FONT_OPTIONS,\n LINE_HEIGHT_OPTIONS,\n} from '../constants/themeFonts.js'\nimport type { ThemePreset } from '../index.js'\nimport { darkModeField, lightModeField } from './colorModeFields.js'\nimport {\n extendedThemeSelectionField,\n extendedLightModeField,\n extendedDarkModeField,\n chartColorsField,\n} from './extendedThemeFields.js'\n\ninterface ThemeConfigurationFieldOptions {\n themePresets: ThemePreset[]\n defaultTheme: string\n includeColorModeToggle: boolean\n includeCustomCSS: boolean\n includeBrandIdentity: boolean\n enableAdvancedFeatures?: boolean\n}\n\n/**\n * Theme Configuration Field with Theme Selection as default value setter\n * Theme Selection populates lightMode/darkMode colors automatically\n */\nexport function createThemeConfigurationField(options: ThemeConfigurationFieldOptions): Field {\n const {\n themePresets,\n defaultTheme,\n includeColorModeToggle,\n includeCustomCSS,\n enableAdvancedFeatures = true,\n } = options\n\n const themeOptions = themePresets.map((preset) => {\n const previewColor = preset.preview?.colors.primary\n const label = previewColor ? `${preset.label} • ${previewColor}` : preset.label\n return {\n label,\n value: preset.name,\n }\n })\n\n const fields: Field[] = [\n {\n name: 'theme',\n type: 'select',\n required: true,\n defaultValue: defaultTheme,\n options: themeOptions,\n label: {\n en: '🎨 Theme Selection',\n cs: '🎨 Výběr tématu',\n },\n admin: {\n description: {\n en: 'Select a theme to auto-populate color values. You can customize colors after selection.',\n cs: 'Vyberte téma pro automatické předvyplnění barev. Po výběru můžete barvy upravit.',\n },\n components: {\n Field: '@kilivi/payloadcms-theme-management/fields/ThemePreviewField',\n },\n },\n },\n extendedThemeSelectionField,\n ]\n\n // Extended Theme Configuration (OKLCH colors, shadcn/ui compatible)\n if (enableAdvancedFeatures) {\n fields.push({\n type: 'collapsible',\n label: {\n en: '🎨 Extended Theme Configuration',\n cs: '🎨 Rozšířená konfigurace tématu',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Advanced color configuration using OKLCH format. Compatible with shadcn/ui and TweakCN.',\n cs: 'Pokročilá konfigurace barev pomocí formátu OKLCH. Kompatibilní s shadcn/ui a TweakCN.',\n },\n },\n fields: [\n extendedLightModeField,\n extendedDarkModeField,\n chartColorsField,\n ],\n })\n }\n\n // Color Mode Settings\n if (includeColorModeToggle) {\n fields.push({\n type: 'collapsible',\n label: {\n en: '🌗 Color Mode Settings',\n cs: '🌗 Nastavení barevného režimu',\n },\n admin: {\n initCollapsed: false,\n description: {\n en: 'Configure light and dark mode colors. Changes here override theme selection.',\n cs: 'Nakonfigurujte barvy světlého a tmavého režimu. Změny zde přepíší výběr tématu.',\n },\n },\n fields: [\n {\n type: 'row',\n fields: [\n {\n name: 'colorMode',\n type: 'select',\n label: {\n en: 'Default Color Mode',\n cs: 'Výchozí barevný režim',\n },\n defaultValue: 'auto',\n options: [\n {\n label: {\n en: 'Auto (System)',\n cs: 'Automaticky (Systém)',\n },\n value: 'auto',\n },\n {\n label: { en: 'Light', cs: 'Světlý' },\n value: 'light',\n },\n {\n label: { en: 'Dark', cs: 'Tmavý' },\n value: 'dark',\n },\n ],\n admin: {\n description: {\n en: 'Default color mode for visitors',\n cs: 'Výchozí barevný režim pro návštěvníky',\n },\n width: '50%',\n },\n },\n {\n name: 'allowColorModeToggle',\n type: 'checkbox',\n label: {\n en: 'Enable Mode Toggle',\n cs: 'Povolit přepínač režimu',\n },\n defaultValue: true,\n admin: {\n description: {\n en: 'Let visitors switch modes',\n cs: 'Umožnit návštěvníkům přepínat režimy',\n },\n width: '50%',\n },\n },\n ],\n },\n lightModeField,\n darkModeField,\n ],\n })\n }\n\n fields.push({\n type: 'collapsible',\n label: {\n en: '🅰️ Typography',\n cs: '🅰️ Typografie',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Choose font families and base typography settings. Leave fields on \"Use preset\" to inherit the theme defaults.',\n cs: 'Zvolte rodiny písem a základní typografické nastavení. Hodnota \"Použít výchozí\" zachová nastavení motivu.',\n },\n },\n fields: [\n {\n name: 'typography',\n type: 'group',\n fields: [\n {\n type: 'row',\n fields: [\n {\n name: 'bodyFont',\n type: 'select',\n label: {\n en: 'Body font',\n cs: 'Písmo pro text',\n },\n defaultValue: 'preset',\n options: BODY_FONT_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n {\n name: 'headingFont',\n type: 'select',\n label: {\n en: 'Heading font',\n cs: 'Písmo pro nadpisy',\n },\n defaultValue: 'preset',\n options: HEADING_FONT_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n ],\n },\n {\n type: 'row',\n fields: [\n {\n name: 'bodyFontCustom',\n type: 'text',\n label: {\n en: 'Custom body font stack',\n cs: 'Vlastní písmo pro text',\n },\n admin: {\n width: '50%',\n placeholder: '\"IBM Plex Sans\", sans-serif',\n description: {\n en: 'Provide full CSS font-family stack when using a custom font.',\n cs: 'Při volbě vlastního písma zadejte celý CSS zápis font-family.',\n },\n condition: (_, siblingData) => siblingData?.bodyFont === 'custom',\n },\n },\n {\n name: 'headingFontCustom',\n type: 'text',\n label: {\n en: 'Custom heading font stack',\n cs: 'Vlastní písmo pro nadpisy',\n },\n admin: {\n width: '50%',\n placeholder: '\"Cormorant Garamond\", serif',\n description: {\n en: 'Provide full CSS font-family stack when using a custom heading font.',\n cs: 'Při volbě vlastního nadpisového písma zadejte celý CSS zápis font-family.',\n },\n condition: (_, siblingData) => siblingData?.headingFont === 'custom',\n },\n },\n ],\n },\n {\n type: 'row',\n fields: [\n {\n name: 'baseFontSize',\n type: 'select',\n label: {\n en: 'Base font size',\n cs: 'Základní velikost písma',\n },\n defaultValue: 'preset',\n options: BASE_FONT_SIZE_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n {\n name: 'lineHeight',\n type: 'select',\n label: {\n en: 'Line height',\n cs: 'Řádkování',\n },\n defaultValue: 'preset',\n options: LINE_HEIGHT_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n ],\n },\n ],\n },\n ],\n })\n\n // Design Customization\n fields.push({\n type: 'collapsible',\n label: {\n en: '✨ Design Customization',\n cs: '✨ Přizpůsobení designu',\n },\n admin: {\n initCollapsed: true,\n },\n fields: [\n {\n name: 'borderRadius',\n type: 'select',\n label: {\n en: 'Border Radius',\n cs: 'Zaoblení rohů',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'None', cs: 'Žádné' }, value: 'none' },\n { label: { en: 'Small', cs: 'Malé' }, value: 'small' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'Large', cs: 'Velké' }, value: 'large' },\n { label: { en: 'Full', cs: 'Plné' }, value: 'xl' },\n ],\n admin: {\n components: {\n Field: '@kilivi/payloadcms-theme-management/fields/RadiusField',\n },\n width: '33%',\n },\n },\n {\n name: 'fontScale',\n type: 'select',\n label: {\n en: 'Font Scale',\n cs: 'Velikost písma',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'Small', cs: 'Malé' }, value: 'small' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'Large', cs: 'Velké' }, value: 'large' },\n ],\n admin: {\n width: '33%',\n },\n },\n {\n name: 'spacing',\n type: 'select',\n label: {\n en: 'Spacing',\n cs: 'Mezery',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'Compact', cs: 'Kompaktní' }, value: 'compact' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'Spacious', cs: 'Prostorné' }, value: 'spacious' },\n ],\n admin: {\n width: '34%',\n },\n },\n ],\n })\n\n // Advanced Settings\n if (enableAdvancedFeatures) {\n const advancedFields: Field[] = [\n {\n name: 'animationLevel',\n type: 'select',\n label: {\n en: 'Animation Level',\n cs: 'Úroveň animací',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'None', cs: 'Žádné' }, value: 'none' },\n { label: { en: 'Reduced', cs: 'Snížené' }, value: 'reduced' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'High', cs: 'Vysoké' }, value: 'high' },\n ],\n admin: {\n description: {\n en: 'Control website animations and transitions',\n cs: 'Kontrola animací a přechodů na webu',\n },\n width: '50%',\n },\n },\n ]\n\n if (includeCustomCSS) {\n advancedFields.push({\n name: 'customCSS',\n type: 'code',\n label: {\n en: 'Custom CSS',\n cs: 'Vlastní CSS',\n },\n admin: {\n language: 'css',\n description: {\n en: 'Add custom CSS to override default styles',\n cs: 'Přidejte vlastní CSS pro přepsání výchozích stylů',\n },\n // placeholder:\n // ':root {\\n --primary: #your-color;\\n --border-radius: 8px;\\n --font-family: \"Your Font\";\\n}\\n\\n.custom-class {\\n /* Your custom styles */\\n}',\n // rows: 8,\n },\n })\n }\n\n fields.push({\n type: 'collapsible',\n label: {\n en: '⚙️ Advanced Settings',\n cs: '⚙️ Pokročilé nastavení',\n },\n admin: {\n initCollapsed: true,\n },\n fields: advancedFields,\n })\n }\n\n return {\n type: 'tabs',\n tabs: [\n {\n name: 'themeConfiguration',\n label: {\n en: '🎨 Appearance Settings',\n cs: '🎨 Nastavení vzhledu',\n },\n description: {\n en: 'Configure website appearance and styling',\n cs: 'Nakonfigurujte vzhled a stylování webu',\n },\n fields,\n },\n ],\n }\n}\n"],"names":["BASE_FONT_SIZE_OPTIONS","BODY_FONT_OPTIONS","HEADING_FONT_OPTIONS","LINE_HEIGHT_OPTIONS","darkModeField","lightModeField","extendedThemeSelectionField","extendedLightModeField","extendedDarkModeField","chartColorsField","createThemeConfigurationField","options","themePresets","defaultTheme","includeColorModeToggle","includeCustomCSS","enableAdvancedFeatures","themeOptions","map","preset","previewColor","preview","colors","primary","label","value","name","fields","type","required","defaultValue","en","cs","admin","description","components","Field","push","initCollapsed","width","option","placeholder","condition","_","siblingData","bodyFont","headingFont","advancedFields","language","tabs"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kilivi/payloadcms-theme-management",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Theme configuration plugin for Payload CMS v3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -58,12 +58,17 @@
|
|
|
58
58
|
"@payloadcms/richtext-lexical": "^3.0.0",
|
|
59
59
|
"@swc/cli": "^0.1.65",
|
|
60
60
|
"@swc/core": "^1.6.3",
|
|
61
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
62
|
+
"@testing-library/react": "^16.3.0",
|
|
63
|
+
"@types/jest": "^30.0.0",
|
|
61
64
|
"@types/react": "^18.3.12",
|
|
62
65
|
"copyfiles": "^2.4.1",
|
|
66
|
+
"jest": "^30.2.0",
|
|
63
67
|
"payload": "^3.58.0",
|
|
64
68
|
"react": "^19.0.0",
|
|
65
69
|
"react-dom": "^19.0.0",
|
|
66
70
|
"rimraf": "^5.0.5",
|
|
71
|
+
"ts-jest": "^29.4.4",
|
|
67
72
|
"typescript": "^5.5.3"
|
|
68
73
|
},
|
|
69
74
|
"publishConfig": {
|
|
@@ -78,6 +83,9 @@
|
|
|
78
83
|
"dev": "swc src -d dist --config-file .swcrc --watch",
|
|
79
84
|
"clean": "rimraf dist tsconfig.tsbuildinfo",
|
|
80
85
|
"copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
|
|
86
|
+
"test": "jest",
|
|
87
|
+
"test:watch": "jest --watch",
|
|
88
|
+
"test:coverage": "jest --coverage",
|
|
81
89
|
"lint": "eslint src",
|
|
82
90
|
"lint:fix": "eslint --fix --ext .ts,.tsx src"
|
|
83
91
|
}
|