@kilivi/payloadcms-theme-management 2.1.0 → 2.2.0

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 (81) hide show
  1. package/README.md +37 -7
  2. package/dist/components/ServerThemeInjector.d.ts +13 -1
  3. package/dist/components/ServerThemeInjector.d.ts.map +1 -1
  4. package/dist/components/ServerThemeInjector.js +24 -1
  5. package/dist/components/ServerThemeInjector.js.map +1 -1
  6. package/dist/components/ThemeLivePreviewSync.d.ts +3 -0
  7. package/dist/components/ThemeLivePreviewSync.d.ts.map +1 -1
  8. package/dist/components/ThemeLivePreviewSync.js +28 -4
  9. package/dist/components/ThemeLivePreviewSync.js.map +1 -1
  10. package/dist/components/typographyPreviewUtils.d.ts +5 -0
  11. package/dist/components/typographyPreviewUtils.d.ts.map +1 -1
  12. package/dist/components/typographyPreviewUtils.js +16 -10
  13. package/dist/components/typographyPreviewUtils.js.map +1 -1
  14. package/dist/constants/themeFonts.d.ts +94 -168
  15. package/dist/constants/themeFonts.d.ts.map +1 -1
  16. package/dist/constants/themeFonts.js +260 -140
  17. package/dist/constants/themeFonts.js.map +1 -1
  18. package/dist/endpoints/themeFonts.d.ts +5 -0
  19. package/dist/endpoints/themeFonts.d.ts.map +1 -0
  20. package/dist/endpoints/themeFonts.js +138 -0
  21. package/dist/endpoints/themeFonts.js.map +1 -0
  22. package/dist/fields/AppearancePreviewField.d.ts.map +1 -1
  23. package/dist/fields/AppearancePreviewField.js +196 -133
  24. package/dist/fields/AppearancePreviewField.js.map +1 -1
  25. package/dist/fields/FontSelectField.css +155 -0
  26. package/dist/fields/FontSelectField.d.ts +4 -2
  27. package/dist/fields/FontSelectField.d.ts.map +1 -1
  28. package/dist/fields/FontSelectField.js +80 -118
  29. package/dist/fields/FontSelectField.js.map +1 -1
  30. package/dist/fields/StylePresetField.d.ts.map +1 -1
  31. package/dist/fields/StylePresetField.js +31 -30
  32. package/dist/fields/StylePresetField.js.map +1 -1
  33. package/dist/fields/ThemePreviewField.css +63 -1
  34. package/dist/fields/ThemePreviewField.d.ts.map +1 -1
  35. package/dist/fields/ThemePreviewField.js +2 -5
  36. package/dist/fields/ThemePreviewField.js.map +1 -1
  37. package/dist/fields/themeConfigurationField.d.ts.map +1 -1
  38. package/dist/fields/themeConfigurationField.js +320 -271
  39. package/dist/fields/themeConfigurationField.js.map +1 -1
  40. package/dist/hooks/useNativeLivePreview.d.ts +15 -0
  41. package/dist/hooks/useNativeLivePreview.d.ts.map +1 -0
  42. package/dist/hooks/useNativeLivePreview.js +18 -0
  43. package/dist/hooks/useNativeLivePreview.js.map +1 -0
  44. package/dist/hooks/useThemeFonts.d.ts +10 -0
  45. package/dist/hooks/useThemeFonts.d.ts.map +1 -0
  46. package/dist/hooks/useThemeFonts.js +36 -0
  47. package/dist/hooks/useThemeFonts.js.map +1 -0
  48. package/dist/index.d.ts +3 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +9 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/next-fonts.d.ts +3 -0
  53. package/dist/next-fonts.d.ts.map +1 -0
  54. package/dist/next-fonts.js +360 -0
  55. package/dist/next-fonts.js.map +1 -0
  56. package/dist/payload-types.d.ts +10 -6
  57. package/dist/payload-types.d.ts.map +1 -1
  58. package/dist/payload-types.js.map +1 -1
  59. package/dist/presets.d.ts +6 -0
  60. package/dist/presets.d.ts.map +1 -1
  61. package/dist/presets.js.map +1 -1
  62. package/dist/style-presets.d.ts +27 -18
  63. package/dist/style-presets.d.ts.map +1 -1
  64. package/dist/style-presets.js +399 -217
  65. package/dist/style-presets.js.map +1 -1
  66. package/dist/translations.d.ts +5 -0
  67. package/dist/translations.d.ts.map +1 -1
  68. package/dist/translations.js +10 -0
  69. package/dist/translations.js.map +1 -1
  70. package/dist/utils/livePreviewThemeRuntime.d.ts +6 -1
  71. package/dist/utils/livePreviewThemeRuntime.d.ts.map +1 -1
  72. package/dist/utils/livePreviewThemeRuntime.js +11 -1
  73. package/dist/utils/livePreviewThemeRuntime.js.map +1 -1
  74. package/dist/utils/resolveThemeConfiguration.d.ts +15 -0
  75. package/dist/utils/resolveThemeConfiguration.d.ts.map +1 -1
  76. package/dist/utils/resolveThemeConfiguration.js +41 -8
  77. package/dist/utils/resolveThemeConfiguration.js.map +1 -1
  78. package/dist/utils/themeUtils.d.ts.map +1 -1
  79. package/dist/utils/themeUtils.js +60 -2
  80. package/dist/utils/themeUtils.js.map +1 -1
  81. package/package.json +5 -1
@@ -1,124 +1,249 @@
1
1
  /**
2
- * Style presets — define visual style (effects, component defaults, layout)
3
- * WITHOUT touching color palettes.
2
+ * Style presets — define the visual style (type, rhythm, effects, component
3
+ * styles) WITHOUT touching colour palettes.
4
4
  *
5
- * A user can combine any color preset (ThemePreset) with any style preset (StylePreset).
6
- */ export const allStylePresets = [
5
+ * A user can combine any colour preset (ThemePreset) with any style preset
6
+ * (StylePreset). Every value here must be a valid option of the matching admin
7
+ * field (see `themeConfigurationField.ts` and `constants/themeFonts.ts`),
8
+ * otherwise the document cannot be saved — `tests/unit/stylePresets.test.ts`
9
+ * guards this.
10
+ */ const LEGACY_STYLE_VALUES = {
11
+ spacing: {
12
+ spacious: 'comfortable'
13
+ },
14
+ 'typography.baseFontSize': {
15
+ small: '15',
16
+ medium: '16',
17
+ large: '18'
18
+ },
19
+ 'typography.lineHeight': {
20
+ compact: '1.4',
21
+ normal: '1.6',
22
+ relaxed: '1.8'
23
+ },
24
+ 'typography.bodyFont': {
25
+ 'Source Sans Pro': 'Source Sans 3',
26
+ 'Helvetica Neue': 'helvetica'
27
+ },
28
+ 'typography.headingFont': {
29
+ 'Source Sans Pro': 'Source Sans 3',
30
+ 'Helvetica Neue': 'helvetica'
31
+ }
32
+ };
33
+ /** Maps values from older StylePreset definitions onto the current field options. */ export function normalizeStylePresetValue(path, value) {
34
+ return typeof value === 'string' ? LEGACY_STYLE_VALUES[path]?.[value] ?? value : value;
35
+ }
36
+ export const allStylePresets = [
7
37
  // ─── Classic styles ───────────────────────────────────────────────────────
8
38
  {
9
- name: 'brutalism',
39
+ name: 'swiss',
10
40
  label: {
11
- en: 'Brutalism',
12
- cs: 'Brutalismus'
41
+ en: 'Swiss / Clean',
42
+ cs: 'Švýcarský / čistý'
13
43
  },
14
44
  description: {
15
- en: 'Raw, anti-aesthetic design. Thick borders, harsh shadows, zero roundness.',
16
- cs: 'Surový, anti-estetický design. Silné okraje, tvrdé stíny, žádné zaoblení.'
45
+ en: 'Typographic clarity. Square corners, outlined buttons, strict grid, no decoration.',
46
+ cs: 'Typografická jasnost. Ostré rohy, obrysová tlačítka, přísná mřížka, žádná dekorace.'
17
47
  },
18
48
  category: 'classic',
19
49
  borderRadius: 'none',
20
- animationLevel: 'none',
21
- spacing: 'spacious',
50
+ animationLevel: 'reduced',
51
+ spacing: 'comfortable',
22
52
  typography: {
23
- bodyFont: 'Space Mono',
24
- headingFont: 'Space Mono',
25
- baseFontSize: 'medium',
26
- lineHeight: 'compact',
27
- letterSpacing: 'normal',
53
+ bodyFont: 'helvetica',
54
+ headingFont: 'helvetica',
55
+ baseFontSize: '16',
56
+ lineHeight: '1.5',
57
+ letterSpacing: 'tight',
28
58
  headingWeight: '700'
29
59
  },
30
60
  visualEffects: {
31
- effectStyle: 'elevated',
32
- shadowIntensity: 'dramatic',
61
+ effectStyle: 'flat',
62
+ shadowIntensity: 'none',
63
+ backdropBlur: 'none',
33
64
  borderStyle: 'solid',
34
- borderWidth: '3px'
65
+ borderWidth: '1px'
35
66
  },
36
67
  componentStyles: {
37
- buttonVariant: 'brutal',
38
- cardStyle: 'bordered',
39
- cardHoverEffect: 'shadow',
40
- navbarStyle: 'solid'
68
+ buttonVariant: 'outlined',
69
+ buttonSize: 'medium',
70
+ cardStyle: 'flat',
71
+ cardHoverEffect: 'none',
72
+ navbarStyle: 'minimal',
73
+ footerStyle: 'minimal',
74
+ imageStyle: 'default',
75
+ linkStyle: 'underline'
41
76
  }
42
77
  },
43
78
  {
44
- name: 'swiss',
79
+ name: 'editorial',
45
80
  label: {
46
- en: 'Swiss / Clean',
47
- cs: 'Švýcarský / čistý'
81
+ en: 'Editorial / Magazine',
82
+ cs: 'Redakční / časopis'
48
83
  },
49
84
  description: {
50
- en: 'Typographic clarity. No radius, outlined elements, strict grid, zero decoration.',
51
- cs: 'Typografická jasnost. Žádné zaoblení, obrysové prvky, přísný grid, nulová dekorace.'
85
+ en: 'Serif headings, generous line spacing, ink-on-paper feel. Typography is the hero.',
86
+ cs: 'Patkové nadpisy, velké řádkování, pocit tisku na papíře. Hlavní roli hraje typografie.'
52
87
  },
53
88
  category: 'classic',
54
89
  borderRadius: 'none',
55
90
  animationLevel: 'reduced',
56
- spacing: 'spacious',
91
+ spacing: 'comfortable',
57
92
  typography: {
58
- bodyFont: 'Helvetica Neue, Arial, sans-serif',
59
- headingFont: 'Helvetica Neue, Arial, sans-serif',
60
- baseFontSize: 'medium',
61
- lineHeight: 'normal',
93
+ bodyFont: 'Lora',
94
+ headingFont: 'Playfair Display',
95
+ baseFontSize: '18',
96
+ lineHeight: '1.8',
62
97
  letterSpacing: 'tight',
63
98
  headingWeight: '700'
64
99
  },
65
100
  visualEffects: {
66
101
  effectStyle: 'flat',
67
102
  shadowIntensity: 'none',
103
+ backdropBlur: 'none',
68
104
  borderStyle: 'solid',
69
105
  borderWidth: '1px'
70
106
  },
71
107
  componentStyles: {
72
108
  buttonVariant: 'outlined',
109
+ buttonSize: 'medium',
73
110
  cardStyle: 'flat',
74
111
  cardHoverEffect: 'none',
75
- navbarStyle: 'minimal'
112
+ navbarStyle: 'minimal',
113
+ footerStyle: 'minimal',
114
+ imageStyle: 'default',
115
+ linkStyle: 'underline'
76
116
  }
77
117
  },
78
118
  {
79
- name: 'flat-design',
119
+ name: 'luxury',
80
120
  label: {
81
- en: 'Flat Design',
82
- cs: 'Plochý design'
121
+ en: 'Luxury / Boutique',
122
+ cs: 'Luxusní / butik'
83
123
  },
84
124
  description: {
85
- en: 'No shadows, no depth. Clean colours, simple icons, purely functional UI.',
86
- cs: 'Bez stínů, bez hloubky. Čisté barvy, jednoduché ikony, čistě funkční UI.'
125
+ en: 'High-contrast display serif, light airy text, wide tracking and black-and-white imagery.',
126
+ cs: 'Kontrastní výrazné patkové písmo, lehký vzdušný text, široké prostrkání a černobílé fotky.'
127
+ },
128
+ category: 'classic',
129
+ borderRadius: 'none',
130
+ animationLevel: 'reduced',
131
+ spacing: 'comfortable',
132
+ typography: {
133
+ bodyFont: 'Manrope',
134
+ headingFont: 'DM Serif Display',
135
+ baseFontSize: '16',
136
+ lineHeight: '1.8',
137
+ letterSpacing: 'wide',
138
+ headingWeight: '400'
139
+ },
140
+ visualEffects: {
141
+ effectStyle: 'flat',
142
+ shadowIntensity: 'none',
143
+ backdropBlur: 'none',
144
+ borderStyle: 'solid',
145
+ borderWidth: '1px'
146
+ },
147
+ componentStyles: {
148
+ buttonVariant: 'outlined',
149
+ buttonSize: 'large',
150
+ cardStyle: 'flat',
151
+ cardHoverEffect: 'none',
152
+ navbarStyle: 'transparent',
153
+ footerStyle: 'dark',
154
+ imageStyle: 'grayscale',
155
+ linkStyle: 'animated'
156
+ }
157
+ },
158
+ {
159
+ name: 'art-deco',
160
+ label: {
161
+ en: 'Art Deco',
162
+ cs: 'Art deco'
163
+ },
164
+ description: {
165
+ en: 'Capitalised serif headings, double rules and a strong vertical rhythm.',
166
+ cs: 'Patkové nadpisy verzálkami, dvojité linky a silný vertikální rytmus.'
167
+ },
168
+ category: 'classic',
169
+ borderRadius: 'none',
170
+ animationLevel: 'reduced',
171
+ spacing: 'comfortable',
172
+ typography: {
173
+ bodyFont: 'Libre Baskerville',
174
+ headingFont: 'Cormorant Garamond',
175
+ baseFontSize: '17',
176
+ lineHeight: '1.7',
177
+ letterSpacing: 'wider',
178
+ headingWeight: '600'
179
+ },
180
+ visualEffects: {
181
+ effectStyle: 'flat',
182
+ shadowIntensity: 'none',
183
+ backdropBlur: 'none',
184
+ borderStyle: 'double',
185
+ borderWidth: '4px'
186
+ },
187
+ componentStyles: {
188
+ buttonVariant: 'outlined',
189
+ buttonSize: 'large',
190
+ cardStyle: 'flat',
191
+ cardHoverEffect: 'none',
192
+ navbarStyle: 'solid',
193
+ footerStyle: 'dark',
194
+ imageStyle: 'vignette',
195
+ linkStyle: 'underline'
196
+ }
197
+ },
198
+ {
199
+ name: 'corporate',
200
+ label: {
201
+ en: 'Corporate / Professional',
202
+ cs: 'Firemní / profesionální'
203
+ },
204
+ description: {
205
+ en: 'Trustworthy and calm. Clean sans-serif, soft shadows, solid buttons.',
206
+ cs: 'Důvěryhodný a klidný. Čisté bezpatkové písmo, jemné stíny, plná tlačítka.'
87
207
  },
88
208
  category: 'classic',
89
209
  borderRadius: 'small',
90
210
  animationLevel: 'reduced',
91
211
  spacing: 'medium',
92
212
  typography: {
93
- bodyFont: 'Inter',
94
- headingFont: 'Inter',
95
- baseFontSize: 'medium',
96
- lineHeight: 'normal',
213
+ bodyFont: 'Source Sans 3',
214
+ headingFont: 'Source Sans 3',
215
+ baseFontSize: '16',
216
+ lineHeight: '1.6',
97
217
  letterSpacing: 'normal',
98
218
  headingWeight: '600'
99
219
  },
100
220
  visualEffects: {
101
- effectStyle: 'flat',
102
- shadowIntensity: 'none',
103
- borderStyle: 'none',
104
- borderWidth: '0px'
221
+ effectStyle: 'elevated',
222
+ shadowIntensity: 'subtle',
223
+ backdropBlur: 'none',
224
+ borderStyle: 'solid',
225
+ borderWidth: '1px'
105
226
  },
106
227
  componentStyles: {
107
228
  buttonVariant: 'filled',
108
- cardStyle: 'flat',
109
- cardHoverEffect: 'scale',
110
- navbarStyle: 'solid'
229
+ buttonSize: 'medium',
230
+ cardStyle: 'elevated',
231
+ cardHoverEffect: 'lift',
232
+ navbarStyle: 'solid',
233
+ footerStyle: 'standard',
234
+ imageStyle: 'rounded',
235
+ linkStyle: 'underline-hover'
111
236
  }
112
237
  },
113
238
  {
114
239
  name: 'material',
115
240
  label: {
116
241
  en: 'Material / Elevated',
117
- cs: 'Material / Vyvýšený'
242
+ cs: 'Material / vyvýšený'
118
243
  },
119
244
  description: {
120
- en: 'Google Material style — cards with shadows, layered surfaces, subtle depth.',
121
- cs: 'Google Material styl — karty se stíny, vrstvené povrchy, jemná hloubka.'
245
+ en: 'Layered surfaces with clear shadows, medium rounding and lively motion.',
246
+ cs: 'Vrstvené plochy s výraznými stíny, středním zaoblením a živým pohybem.'
122
247
  },
123
248
  category: 'classic',
124
249
  borderRadius: 'medium',
@@ -127,22 +252,27 @@
127
252
  typography: {
128
253
  bodyFont: 'Roboto',
129
254
  headingFont: 'Roboto',
130
- baseFontSize: 'medium',
131
- lineHeight: 'normal',
255
+ baseFontSize: '16',
256
+ lineHeight: '1.5',
132
257
  letterSpacing: 'normal',
133
258
  headingWeight: '500'
134
259
  },
135
260
  visualEffects: {
136
261
  effectStyle: 'elevated',
137
262
  shadowIntensity: 'medium',
263
+ backdropBlur: 'none',
138
264
  borderStyle: 'none',
139
265
  borderWidth: '0px'
140
266
  },
141
267
  componentStyles: {
142
268
  buttonVariant: 'filled',
269
+ buttonSize: 'medium',
143
270
  cardStyle: 'elevated',
144
271
  cardHoverEffect: 'lift',
145
- navbarStyle: 'solid'
272
+ navbarStyle: 'solid',
273
+ footerStyle: 'standard',
274
+ imageStyle: 'rounded',
275
+ linkStyle: 'underline-hover'
146
276
  }
147
277
  },
148
278
  {
@@ -152,183 +282,128 @@
152
282
  cs: 'Minimalismus'
153
283
  },
154
284
  description: {
155
- en: 'Maximum whitespace, near-invisible borders, thin type. Only what is necessary.',
156
- cs: 'Maximální bílý prostor, téměř neviditelné okraje, tenké písmo. Jen to nezbytné.'
285
+ en: 'Maximum whitespace, thin headings, ghost buttons. Only what is necessary.',
286
+ cs: 'Maximum volného prostoru, tenké nadpisy, průhledná tlačítka. Jen to nezbytné.'
157
287
  },
158
288
  category: 'classic',
159
289
  borderRadius: 'small',
160
290
  animationLevel: 'reduced',
161
- spacing: 'spacious',
291
+ spacing: 'comfortable',
162
292
  typography: {
163
293
  bodyFont: 'DM Sans',
164
294
  headingFont: 'DM Sans',
165
- baseFontSize: 'medium',
166
- lineHeight: 'relaxed',
295
+ baseFontSize: '17',
296
+ lineHeight: '1.8',
167
297
  letterSpacing: 'wide',
168
298
  headingWeight: '300'
169
299
  },
170
300
  visualEffects: {
171
301
  effectStyle: 'flat',
172
302
  shadowIntensity: 'none',
303
+ backdropBlur: 'none',
173
304
  borderStyle: 'solid',
174
305
  borderWidth: '1px'
175
306
  },
176
307
  componentStyles: {
177
308
  buttonVariant: 'ghost',
309
+ buttonSize: 'small',
178
310
  cardStyle: 'flat',
179
311
  cardHoverEffect: 'none',
180
- navbarStyle: 'minimal'
312
+ navbarStyle: 'minimal',
313
+ footerStyle: 'minimal',
314
+ imageStyle: 'default',
315
+ linkStyle: 'underline'
181
316
  }
182
317
  },
183
318
  {
184
- name: 'editorial',
319
+ name: 'tech',
185
320
  label: {
186
- en: 'Editorial / Magazine',
187
- cs: 'Redakční / Časopis'
321
+ en: 'Tech / Product',
322
+ cs: 'Tech / produkt'
188
323
  },
189
324
  description: {
190
- en: 'Serif headings, generous line spacing, ink-on-paper feel. Bold typography as the hero.',
191
- cs: 'Serifové nadpisy, velké řádkování, pocit inkoustu na papíře. Typografie jako hrdina.'
325
+ en: 'Geometric grotesk, tight headings, hairline borders and a glow on hover.',
326
+ cs: 'Geometrický grotesk, sevřené nadpisy, vlasové linky a záře při najetí.'
192
327
  },
193
328
  category: 'classic',
194
- borderRadius: 'none',
195
- animationLevel: 'reduced',
196
- spacing: 'spacious',
329
+ borderRadius: 'small',
330
+ animationLevel: 'medium',
331
+ spacing: 'medium',
197
332
  typography: {
198
- bodyFont: 'Lora',
199
- headingFont: 'Playfair Display',
200
- baseFontSize: 'large',
201
- lineHeight: 'relaxed',
333
+ bodyFont: 'Inter',
334
+ headingFont: 'Space Grotesk',
335
+ baseFontSize: '16',
336
+ lineHeight: '1.6',
202
337
  letterSpacing: 'tight',
203
- headingWeight: '700'
338
+ headingWeight: '600'
204
339
  },
205
340
  visualEffects: {
206
341
  effectStyle: 'flat',
207
342
  shadowIntensity: 'none',
343
+ backdropBlur: 'medium',
208
344
  borderStyle: 'solid',
209
345
  borderWidth: '1px'
210
346
  },
211
347
  componentStyles: {
212
- buttonVariant: 'outlined',
348
+ buttonVariant: 'filled',
349
+ buttonSize: 'small',
213
350
  cardStyle: 'flat',
214
- cardHoverEffect: 'none',
215
- navbarStyle: 'minimal'
351
+ cardHoverEffect: 'glow',
352
+ navbarStyle: 'blur',
353
+ footerStyle: 'minimal',
354
+ imageStyle: 'rounded',
355
+ linkStyle: 'animated'
216
356
  }
217
357
  },
218
358
  {
219
- name: 'retro',
359
+ name: 'poster',
220
360
  label: {
221
- en: 'Retro / 90s',
222
- cs: 'Retro / 90. léta'
361
+ en: 'Bold / Poster',
362
+ cs: 'Výrazný / plakát'
223
363
  },
224
364
  description: {
225
- en: 'Chunky type, bold outlines, pixel-inspired borders. Nostalgic web aesthetic.',
226
- cs: 'Tučné písmo, silné obrysy, pixelové hranice. Nostalgická webová estetika.'
365
+ en: 'Huge expressive headings, extra-large buttons and a full-colour footer.',
366
+ cs: 'Velké výrazné nadpisy, extra velká tlačítka a patička v plné barvě.'
227
367
  },
228
368
  category: 'classic',
229
- borderRadius: 'none',
369
+ borderRadius: 'medium',
230
370
  animationLevel: 'medium',
231
- spacing: 'compact',
232
- typography: {
233
- bodyFont: 'IBM Plex Mono',
234
- headingFont: 'Bebas Neue',
235
- baseFontSize: 'large',
236
- lineHeight: 'compact',
237
- letterSpacing: 'wider',
238
- headingWeight: '400'
239
- },
240
- visualEffects: {
241
- effectStyle: 'elevated',
242
- shadowIntensity: 'dramatic',
243
- borderStyle: 'solid',
244
- borderWidth: '2px'
245
- },
246
- componentStyles: {
247
- buttonVariant: 'brutal',
248
- cardStyle: 'bordered',
249
- cardHoverEffect: 'shadow',
250
- navbarStyle: 'solid'
251
- }
252
- },
253
- {
254
- name: 'art-deco',
255
- label: {
256
- en: 'Art Deco',
257
- cs: 'Art Deco'
258
- },
259
- description: {
260
- en: 'Geometric symmetry, ornate headings, gold accents and strong vertical rhythm.',
261
- cs: 'Geometrická symetrie, ozdobné nadpisy, zlaté akcenty a silný vertikální rytmus.'
262
- },
263
- category: 'classic',
264
- borderRadius: 'none',
265
- animationLevel: 'reduced',
266
- spacing: 'spacious',
371
+ spacing: 'comfortable',
267
372
  typography: {
268
- bodyFont: 'Cormorant Garamond',
269
- headingFont: 'Cormorant Garamond',
270
- baseFontSize: 'medium',
271
- lineHeight: 'relaxed',
272
- letterSpacing: 'wider',
273
- headingWeight: '600'
373
+ bodyFont: 'Archivo',
374
+ headingFont: 'Syne',
375
+ baseFontSize: '17',
376
+ lineHeight: '1.6',
377
+ letterSpacing: 'tight',
378
+ headingWeight: '800'
274
379
  },
275
380
  visualEffects: {
276
381
  effectStyle: 'flat',
277
- shadowIntensity: 'subtle',
278
- borderStyle: 'double',
279
- borderWidth: '3px'
280
- },
281
- componentStyles: {
282
- buttonVariant: 'outlined',
283
- cardStyle: 'bordered',
284
- cardHoverEffect: 'none',
285
- navbarStyle: 'solid'
286
- }
287
- },
288
- {
289
- name: 'corporate',
290
- label: {
291
- en: 'Corporate / Professional',
292
- cs: 'Korporátní / Profesionální'
293
- },
294
- description: {
295
- en: 'Trustworthy, conservative design. Clean sans-serif, ample whitespace, minimal decoration.',
296
- cs: 'Důvěryhodný, konzervativní design. Čisté sans-serif, dostatek prostoru, minimální dekorace.'
297
- },
298
- category: 'classic',
299
- borderRadius: 'small',
300
- animationLevel: 'reduced',
301
- spacing: 'medium',
302
- typography: {
303
- bodyFont: 'Source Sans Pro',
304
- headingFont: 'Source Sans Pro',
305
- baseFontSize: 'medium',
306
- lineHeight: 'normal',
307
- letterSpacing: 'normal',
308
- headingWeight: '600'
309
- },
310
- visualEffects: {
311
- effectStyle: 'elevated',
312
- shadowIntensity: 'subtle',
313
- borderStyle: 'solid',
314
- borderWidth: '1px'
382
+ shadowIntensity: 'none',
383
+ backdropBlur: 'none',
384
+ borderStyle: 'none',
385
+ borderWidth: '0px'
315
386
  },
316
387
  componentStyles: {
317
388
  buttonVariant: 'filled',
318
- cardStyle: 'elevated',
389
+ buttonSize: 'xl',
390
+ cardStyle: 'flat',
319
391
  cardHoverEffect: 'lift',
320
- navbarStyle: 'solid'
392
+ navbarStyle: 'solid',
393
+ footerStyle: 'full-color',
394
+ imageStyle: 'rounded',
395
+ linkStyle: 'highlight'
321
396
  }
322
397
  },
323
398
  {
324
399
  name: 'playful',
325
400
  label: {
326
401
  en: 'Playful / Rounded',
327
- cs: 'Hravý / Zaoblený'
402
+ cs: 'Hravý / zaoblený'
328
403
  },
329
404
  description: {
330
- en: 'Bubbly rounded corners, bouncy animations, friendly typefaces. Fun and approachable.',
331
- cs: 'Bublinkové zaoblení, skákavé animace, přátelské písmo. Zábavné a přístupné.'
405
+ en: 'Bubbly corners, pill buttons, a floating navbar and friendly rounded type.',
406
+ cs: 'Bublinkové rohy, oblá tlačítka, plovoucí navigace a přátelské zaoblené písmo.'
332
407
  },
333
408
  category: 'classic',
334
409
  borderRadius: 'xl',
@@ -337,57 +412,147 @@
337
412
  typography: {
338
413
  bodyFont: 'Nunito',
339
414
  headingFont: 'Nunito',
340
- baseFontSize: 'medium',
341
- lineHeight: 'relaxed',
415
+ baseFontSize: '17',
416
+ lineHeight: '1.7',
342
417
  letterSpacing: 'normal',
343
- headingWeight: '700'
418
+ headingWeight: '800'
344
419
  },
345
420
  visualEffects: {
346
421
  effectStyle: 'elevated',
347
422
  shadowIntensity: 'medium',
423
+ backdropBlur: 'none',
348
424
  borderStyle: 'none',
349
425
  borderWidth: '0px'
350
426
  },
351
427
  componentStyles: {
352
428
  buttonVariant: 'pill',
429
+ buttonSize: 'large',
353
430
  cardStyle: 'elevated',
354
431
  cardHoverEffect: 'scale',
355
- navbarStyle: 'floating'
432
+ navbarStyle: 'floating',
433
+ footerStyle: 'full-color',
434
+ imageStyle: 'rounded',
435
+ linkStyle: 'highlight'
356
436
  }
357
437
  },
358
438
  {
359
439
  name: 'organic',
360
440
  label: {
361
441
  en: 'Organic / Nature',
362
- cs: 'Organický / Příroda'
442
+ cs: 'Organický / příroda'
363
443
  },
364
444
  description: {
365
- en: 'Soft curves, earthy tones, hand-crafted feel. Asymmetric shapes and warm spacing.',
366
- cs: 'Jemné křivky, zemité tóny, ručně vyrobený pocit. Asymetrické tvary a teplé mezery.'
445
+ en: 'Soft serif headings, warm spacing, large rounding and a transparent navbar.',
446
+ cs: 'Měkké patkové nadpisy, vzdušné rozestupy, velké zaoblení a průhledná navigace.'
367
447
  },
368
448
  category: 'classic',
369
449
  borderRadius: 'large',
370
450
  animationLevel: 'medium',
371
- spacing: 'spacious',
451
+ spacing: 'comfortable',
372
452
  typography: {
373
- bodyFont: 'Crimson Pro',
374
- headingFont: 'Crimson Pro',
375
- baseFontSize: 'large',
376
- lineHeight: 'relaxed',
453
+ bodyFont: 'Work Sans',
454
+ headingFont: 'Fraunces',
455
+ baseFontSize: '18',
456
+ lineHeight: '1.7',
377
457
  letterSpacing: 'tight',
378
- headingWeight: '600'
458
+ headingWeight: '500'
379
459
  },
380
460
  visualEffects: {
381
461
  effectStyle: 'flat',
382
462
  shadowIntensity: 'subtle',
463
+ backdropBlur: 'none',
383
464
  borderStyle: 'none',
384
465
  borderWidth: '0px'
385
466
  },
386
467
  componentStyles: {
387
468
  buttonVariant: 'pill',
469
+ buttonSize: 'medium',
388
470
  cardStyle: 'flat',
389
471
  cardHoverEffect: 'lift',
390
- navbarStyle: 'transparent'
472
+ navbarStyle: 'transparent',
473
+ footerStyle: 'gradient-top',
474
+ imageStyle: 'rounded',
475
+ linkStyle: 'highlight'
476
+ }
477
+ },
478
+ {
479
+ name: 'brutalism',
480
+ label: {
481
+ en: 'Brutalism',
482
+ cs: 'Brutalismus'
483
+ },
484
+ description: {
485
+ en: 'Raw and loud. Thick borders, hard offset shadows, zero rounding.',
486
+ cs: 'Surový a hlasitý. Silné okraje, tvrdé posunuté stíny, žádné zaoblení.'
487
+ },
488
+ category: 'classic',
489
+ borderRadius: 'none',
490
+ animationLevel: 'none',
491
+ spacing: 'comfortable',
492
+ typography: {
493
+ bodyFont: 'Space Grotesk',
494
+ headingFont: 'Archivo Black',
495
+ baseFontSize: '17',
496
+ lineHeight: '1.5',
497
+ letterSpacing: 'tight',
498
+ headingWeight: '400'
499
+ },
500
+ visualEffects: {
501
+ effectStyle: 'flat',
502
+ shadowIntensity: 'none',
503
+ backdropBlur: 'none',
504
+ borderStyle: 'solid',
505
+ borderWidth: '3px'
506
+ },
507
+ componentStyles: {
508
+ buttonVariant: 'brutal',
509
+ buttonSize: 'large',
510
+ cardStyle: 'bordered',
511
+ cardHoverEffect: 'shadow',
512
+ navbarStyle: 'solid',
513
+ footerStyle: 'dark',
514
+ imageStyle: 'grayscale',
515
+ linkStyle: 'highlight'
516
+ }
517
+ },
518
+ {
519
+ name: 'retro',
520
+ label: {
521
+ en: 'Retro / 90s',
522
+ cs: 'Retro / 90. léta'
523
+ },
524
+ description: {
525
+ en: 'Condensed capital headings, typewriter text, polaroid images and chunky outlines.',
526
+ cs: 'Úzké nadpisy verzálkami, strojopisný text, fotky jako polaroid a silné obrysy.'
527
+ },
528
+ category: 'classic',
529
+ borderRadius: 'none',
530
+ animationLevel: 'medium',
531
+ spacing: 'compact',
532
+ typography: {
533
+ bodyFont: 'IBM Plex Mono',
534
+ headingFont: 'Bebas Neue',
535
+ baseFontSize: '16',
536
+ lineHeight: '1.6',
537
+ letterSpacing: 'wider',
538
+ headingWeight: '400'
539
+ },
540
+ visualEffects: {
541
+ effectStyle: 'flat',
542
+ shadowIntensity: 'none',
543
+ backdropBlur: 'none',
544
+ borderStyle: 'solid',
545
+ borderWidth: '2px'
546
+ },
547
+ componentStyles: {
548
+ buttonVariant: 'brutal',
549
+ buttonSize: 'medium',
550
+ cardStyle: 'bordered',
551
+ cardHoverEffect: 'shadow',
552
+ navbarStyle: 'solid',
553
+ footerStyle: 'full-color',
554
+ imageStyle: 'polaroid',
555
+ linkStyle: 'highlight'
391
556
  }
392
557
  },
393
558
  // ─── Visual effect styles ─────────────────────────────────────────────────
@@ -395,11 +560,11 @@
395
560
  name: 'glassmorphism',
396
561
  label: {
397
562
  en: 'Glassmorphism',
398
- cs: 'Glassmorphism'
563
+ cs: 'Mléčné sklo'
399
564
  },
400
565
  description: {
401
- en: 'Frosted glass — blurred backgrounds, transparency, soft borders.',
402
- cs: 'Mléčné sklo — rozmazané pozadí, průhlednost, jemné hranice.'
566
+ en: 'Frosted glass panels over colour — blur, translucency, soft edges. Best on a vivid background.',
567
+ cs: 'Panely z mléčného skla nad barvou — rozostření, průsvitnost, jemné hrany. Nejlépe na sytém pozadí.'
403
568
  },
404
569
  category: 'effect',
405
570
  borderRadius: 'large',
@@ -407,10 +572,10 @@
407
572
  spacing: 'medium',
408
573
  typography: {
409
574
  bodyFont: 'Inter',
410
- headingFont: 'Inter',
411
- baseFontSize: 'medium',
412
- lineHeight: 'normal',
413
- letterSpacing: 'normal',
575
+ headingFont: 'Outfit',
576
+ baseFontSize: '16',
577
+ lineHeight: '1.6',
578
+ letterSpacing: 'tight',
414
579
  headingWeight: '600'
415
580
  },
416
581
  visualEffects: {
@@ -422,21 +587,25 @@
422
587
  glassOpacity: 55
423
588
  },
424
589
  componentStyles: {
425
- buttonVariant: 'ghost',
590
+ buttonVariant: 'filled',
591
+ buttonSize: 'medium',
426
592
  cardStyle: 'glass',
427
593
  cardHoverEffect: 'glow',
428
- navbarStyle: 'blur'
594
+ navbarStyle: 'blur',
595
+ footerStyle: 'minimal',
596
+ imageStyle: 'rounded',
597
+ linkStyle: 'animated'
429
598
  }
430
599
  },
431
600
  {
432
601
  name: 'neumorphism',
433
602
  label: {
434
- en: 'Neumorphism',
435
- cs: 'Neumorphism'
603
+ en: 'Soft UI',
604
+ cs: 'Měkké UI'
436
605
  },
437
606
  description: {
438
- en: 'Soft UI — elements look extruded from the background using dual light/dark shadows.',
439
- cs: 'Měkké UI — prvky vypadají vytlačené z pozadí díky dvojitým stínům.'
607
+ en: 'Elements look pressed out of the background with paired light and dark shadows.',
608
+ cs: 'Prvky vypadají vytlačené z pozadí díky dvojici světlého a tmavého stínu.'
440
609
  },
441
610
  category: 'effect',
442
611
  borderRadius: 'large',
@@ -445,8 +614,8 @@
445
614
  typography: {
446
615
  bodyFont: 'DM Sans',
447
616
  headingFont: 'DM Sans',
448
- baseFontSize: 'medium',
449
- lineHeight: 'normal',
617
+ baseFontSize: '16',
618
+ lineHeight: '1.6',
450
619
  letterSpacing: 'normal',
451
620
  headingWeight: '500'
452
621
  },
@@ -459,20 +628,24 @@
459
628
  },
460
629
  componentStyles: {
461
630
  buttonVariant: 'filled',
631
+ buttonSize: 'medium',
462
632
  cardStyle: 'neumorphic',
463
633
  cardHoverEffect: 'shadow',
464
- navbarStyle: 'solid'
634
+ navbarStyle: 'solid',
635
+ footerStyle: 'standard',
636
+ imageStyle: 'rounded',
637
+ linkStyle: 'underline-hover'
465
638
  }
466
639
  },
467
640
  {
468
641
  name: 'claymorphism',
469
642
  label: {
470
- en: 'Claymorphism',
471
- cs: 'Claymorphism'
643
+ en: 'Clay',
644
+ cs: 'Plastelína'
472
645
  },
473
646
  description: {
474
- en: 'Soft, colourful 3D clay-like elements with large radius and inflated look.',
475
- cs: 'Měkké, barevné 3D „plastelínové" prvky s velkým zaoblením a nafouklým vzhledem.'
647
+ en: 'Soft, inflated 3D clay shapes with large rounding and chunky type.',
648
+ cs: 'Měkké nafouklé 3D tvary jako z plastelíny, velké zaoblení a tučné písmo.'
476
649
  },
477
650
  category: 'effect',
478
651
  borderRadius: 'xl',
@@ -481,8 +654,8 @@
481
654
  typography: {
482
655
  bodyFont: 'Nunito',
483
656
  headingFont: 'Nunito',
484
- baseFontSize: 'large',
485
- lineHeight: 'relaxed',
657
+ baseFontSize: '18',
658
+ lineHeight: '1.7',
486
659
  letterSpacing: 'normal',
487
660
  headingWeight: '800'
488
661
  },
@@ -495,20 +668,24 @@
495
668
  },
496
669
  componentStyles: {
497
670
  buttonVariant: 'pill',
671
+ buttonSize: 'large',
498
672
  cardStyle: 'elevated',
499
673
  cardHoverEffect: 'scale',
500
- navbarStyle: 'floating'
674
+ navbarStyle: 'floating',
675
+ footerStyle: 'full-color',
676
+ imageStyle: 'rounded',
677
+ linkStyle: 'highlight'
501
678
  }
502
679
  },
503
680
  {
504
681
  name: 'gradient-heavy',
505
682
  label: {
506
683
  en: 'Gradient',
507
- cs: 'Gradientový'
684
+ cs: 'Přechodový'
508
685
  },
509
686
  description: {
510
- en: 'Gradient borders and glow effects as the primary visual accent.',
511
- cs: 'Gradientové okraje a záře jako hlavní vizuální akcent.'
687
+ en: 'The brand gradient leads: gradient buttons, gradient card borders and a glow.',
688
+ cs: 'Hlavní roli hraje brandový přechod: přechodová tlačítka, okraje karet a záře.'
512
689
  },
513
690
  category: 'effect',
514
691
  borderRadius: 'medium',
@@ -517,22 +694,27 @@
517
694
  typography: {
518
695
  bodyFont: 'Inter',
519
696
  headingFont: 'Plus Jakarta Sans',
520
- baseFontSize: 'medium',
521
- lineHeight: 'normal',
697
+ baseFontSize: '16',
698
+ lineHeight: '1.6',
522
699
  letterSpacing: 'tight',
523
- headingWeight: '700'
700
+ headingWeight: '800'
524
701
  },
525
702
  visualEffects: {
526
703
  effectStyle: 'elevated',
527
704
  shadowIntensity: 'medium',
705
+ backdropBlur: 'medium',
528
706
  borderStyle: 'none',
529
707
  borderWidth: '0px'
530
708
  },
531
709
  componentStyles: {
532
710
  buttonVariant: 'gradient',
711
+ buttonSize: 'medium',
533
712
  cardStyle: 'gradient-border',
534
713
  cardHoverEffect: 'glow',
535
- navbarStyle: 'blur'
714
+ navbarStyle: 'blur',
715
+ footerStyle: 'gradient-top',
716
+ imageStyle: 'rounded',
717
+ linkStyle: 'animated'
536
718
  }
537
719
  }
538
720
  ];
@@ -540,15 +722,15 @@ export const stylePresetCategories = [
540
722
  {
541
723
  name: 'classic',
542
724
  label: {
543
- en: 'Classic Styles',
544
- cs: 'Klasické styly'
725
+ en: 'Styles',
726
+ cs: 'Styly'
545
727
  }
546
728
  },
547
729
  {
548
730
  name: 'effect',
549
731
  label: {
550
- en: 'Visual Effects',
551
- cs: 'Vizuální efekty'
732
+ en: 'Effect styles',
733
+ cs: 'Styly s efekty'
552
734
  }
553
735
  }
554
736
  ];