@kilivi/payloadcms-theme-management 1.1.2 → 2.1.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 (214) hide show
  1. package/README.md +318 -847
  2. package/dist/components/AppearanceSessionControls.d.ts +15 -0
  3. package/dist/components/AppearanceSessionControls.d.ts.map +1 -0
  4. package/dist/components/AppearanceSessionControls.js +152 -0
  5. package/dist/components/AppearanceSessionControls.js.map +1 -0
  6. package/dist/components/ColorModeToggle.css +42 -0
  7. package/dist/components/ColorModeToggle.d.ts +40 -0
  8. package/dist/components/ColorModeToggle.d.ts.map +1 -0
  9. package/dist/components/ColorModeToggle.js +111 -0
  10. package/dist/components/ColorModeToggle.js.map +1 -0
  11. package/dist/components/ServerThemeInjector.d.ts.map +1 -1
  12. package/dist/components/ServerThemeInjector.js +41 -14
  13. package/dist/components/ServerThemeInjector.js.map +1 -1
  14. package/dist/components/ThemeLivePreviewSync.d.ts +1 -0
  15. package/dist/components/ThemeLivePreviewSync.d.ts.map +1 -1
  16. package/dist/components/ThemeLivePreviewSync.js +1 -1
  17. package/dist/components/ThemeLivePreviewSync.js.map +1 -1
  18. package/dist/components/ThemeSwitcher.d.ts +36 -0
  19. package/dist/components/ThemeSwitcher.d.ts.map +1 -0
  20. package/dist/components/ThemeSwitcher.js +89 -0
  21. package/dist/components/ThemeSwitcher.js.map +1 -0
  22. package/dist/components/typographyPreviewUtils.d.ts.map +1 -1
  23. package/dist/components/typographyPreviewUtils.js +8 -1
  24. package/dist/components/typographyPreviewUtils.js.map +1 -1
  25. package/dist/constants/devicePreviews.d.ts +35 -0
  26. package/dist/constants/devicePreviews.d.ts.map +1 -0
  27. package/dist/constants/devicePreviews.js +43 -0
  28. package/dist/constants/devicePreviews.js.map +1 -0
  29. package/dist/constants/themeFonts.js +9 -9
  30. package/dist/constants/themeFonts.js.map +1 -1
  31. package/dist/extended-presets.d.ts +0 -4
  32. package/dist/extended-presets.d.ts.map +1 -1
  33. package/dist/extended-presets.js +1 -18
  34. package/dist/extended-presets.js.map +1 -1
  35. package/dist/extended-themes.d.ts.map +1 -1
  36. package/dist/extended-themes.js +428 -0
  37. package/dist/extended-themes.js.map +1 -1
  38. package/dist/fields/AccessibilityAuditField.d.ts +2 -0
  39. package/dist/fields/AccessibilityAuditField.d.ts.map +1 -0
  40. package/dist/fields/AccessibilityAuditField.js +303 -0
  41. package/dist/fields/AccessibilityAuditField.js.map +1 -0
  42. package/dist/fields/AppearancePreviewField.d.ts +2 -0
  43. package/dist/fields/AppearancePreviewField.d.ts.map +1 -0
  44. package/dist/fields/AppearancePreviewField.js +763 -0
  45. package/dist/fields/AppearancePreviewField.js.map +1 -0
  46. package/dist/fields/ColorPickerField.d.ts.map +1 -1
  47. package/dist/fields/ColorPickerField.js +89 -85
  48. package/dist/fields/ColorPickerField.js.map +1 -1
  49. package/dist/fields/FontSelectField.d.ts +6 -0
  50. package/dist/fields/FontSelectField.d.ts.map +1 -1
  51. package/dist/fields/FontSelectField.js +195 -122
  52. package/dist/fields/FontSelectField.js.map +1 -1
  53. package/dist/fields/PaletteGeneratorField.d.ts +7 -0
  54. package/dist/fields/PaletteGeneratorField.d.ts.map +1 -0
  55. package/dist/fields/PaletteGeneratorField.js +327 -0
  56. package/dist/fields/PaletteGeneratorField.js.map +1 -0
  57. package/dist/fields/StylePresetField.d.ts +3 -0
  58. package/dist/fields/StylePresetField.d.ts.map +1 -0
  59. package/dist/fields/StylePresetField.js +462 -0
  60. package/dist/fields/StylePresetField.js.map +1 -0
  61. package/dist/fields/ThemeColorPickerField.css +115 -35
  62. package/dist/fields/ThemeColorPickerField.d.ts.map +1 -1
  63. package/dist/fields/ThemeColorPickerField.js +204 -70
  64. package/dist/fields/ThemeColorPickerField.js.map +1 -1
  65. package/dist/fields/ThemeExportField.d.ts +6 -0
  66. package/dist/fields/ThemeExportField.d.ts.map +1 -0
  67. package/dist/fields/ThemeExportField.js +202 -0
  68. package/dist/fields/ThemeExportField.js.map +1 -0
  69. package/dist/fields/ThemePresetImportField.d.ts.map +1 -1
  70. package/dist/fields/ThemePresetImportField.js +56 -25
  71. package/dist/fields/ThemePresetImportField.js.map +1 -1
  72. package/dist/fields/ThemePreviewField.css +382 -5
  73. package/dist/fields/ThemePreviewField.d.ts.map +1 -1
  74. package/dist/fields/ThemePreviewField.js +268 -170
  75. package/dist/fields/ThemePreviewField.js.map +1 -1
  76. package/dist/fields/ThemeTokenSelectField.d.ts.map +1 -1
  77. package/dist/fields/ThemeTokenSelectField.js +278 -80
  78. package/dist/fields/ThemeTokenSelectField.js.map +1 -1
  79. package/dist/fields/colorFieldHelpers.d.ts +90 -0
  80. package/dist/fields/colorFieldHelpers.d.ts.map +1 -0
  81. package/dist/fields/colorFieldHelpers.js +133 -0
  82. package/dist/fields/colorFieldHelpers.js.map +1 -0
  83. package/dist/fields/colorModeFields.d.ts +1 -1
  84. package/dist/fields/colorModeFields.d.ts.map +1 -1
  85. package/dist/fields/colorModeFields.js +49 -7
  86. package/dist/fields/colorModeFields.js.map +1 -1
  87. package/dist/fields/themeConfigurationField.d.ts +8 -1
  88. package/dist/fields/themeConfigurationField.d.ts.map +1 -1
  89. package/dist/fields/themeConfigurationField.js +961 -29
  90. package/dist/fields/themeConfigurationField.js.map +1 -1
  91. package/dist/globals/ThemeSettings/FontPicker/FontPreview.d.ts.map +1 -1
  92. package/dist/globals/ThemeSettings/FontPicker/FontPreview.js +8 -4
  93. package/dist/globals/ThemeSettings/FontPicker/FontPreview.js.map +1 -1
  94. package/dist/globals/ThemeSettings/FontPicker/index.d.ts.map +1 -1
  95. package/dist/globals/ThemeSettings/FontPicker/index.js +81 -26
  96. package/dist/globals/ThemeSettings/FontPicker/index.js.map +1 -1
  97. package/dist/globals/ThemeSettings/FontPicker/styles.css +98 -41
  98. package/dist/globals/ThemeSettings/FontPicker/translations.d.ts +6 -0
  99. package/dist/globals/ThemeSettings/FontPicker/translations.d.ts.map +1 -1
  100. package/dist/globals/ThemeSettings/FontPicker/translations.js +14 -2
  101. package/dist/globals/ThemeSettings/FontPicker/translations.js.map +1 -1
  102. package/dist/globals/ThemeSettings/config.d.ts.map +1 -1
  103. package/dist/globals/ThemeSettings/config.js +76 -79
  104. package/dist/globals/ThemeSettings/config.js.map +1 -1
  105. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.d.ts.map +1 -1
  106. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.js +63 -62
  107. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.js.map +1 -1
  108. package/dist/globals/ThemeSettings/fields/TypographyInfoField.d.ts.map +1 -1
  109. package/dist/globals/ThemeSettings/fields/TypographyInfoField.js +22 -25
  110. package/dist/globals/ThemeSettings/fields/TypographyInfoField.js.map +1 -1
  111. package/dist/hooks/useAppearanceSession.d.ts +50 -0
  112. package/dist/hooks/useAppearanceSession.d.ts.map +1 -0
  113. package/dist/hooks/useAppearanceSession.js +91 -0
  114. package/dist/hooks/useAppearanceSession.js.map +1 -0
  115. package/dist/hooks/useThemeTranslations.d.ts +13 -0
  116. package/dist/hooks/useThemeTranslations.d.ts.map +1 -0
  117. package/dist/hooks/useThemeTranslations.js +22 -0
  118. package/dist/hooks/useThemeTranslations.js.map +1 -0
  119. package/dist/i18n.d.ts +53 -0
  120. package/dist/i18n.d.ts.map +1 -0
  121. package/dist/i18n.js +53 -0
  122. package/dist/i18n.js.map +1 -0
  123. package/dist/index.d.ts +10 -4
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +130 -32
  126. package/dist/index.js.map +1 -1
  127. package/dist/payload-types.d.ts +24 -0
  128. package/dist/payload-types.d.ts.map +1 -1
  129. package/dist/payload-types.js.map +1 -1
  130. package/dist/presets.d.ts +8 -0
  131. package/dist/presets.d.ts.map +1 -1
  132. package/dist/presets.js.map +1 -1
  133. package/dist/providers/Theme/index.d.ts.map +1 -1
  134. package/dist/providers/Theme/index.js +75 -11
  135. package/dist/providers/Theme/index.js.map +1 -1
  136. package/dist/providers/Theme/themeConfig.d.ts.map +1 -1
  137. package/dist/providers/Theme/themeConfig.js +104 -0
  138. package/dist/providers/Theme/themeConfig.js.map +1 -1
  139. package/dist/providers/Theme/types.d.ts +1 -1
  140. package/dist/providers/Theme/types.d.ts.map +1 -1
  141. package/dist/providers/Theme/types.js +10 -1
  142. package/dist/providers/Theme/types.js.map +1 -1
  143. package/dist/style-presets.d.ts +66 -0
  144. package/dist/style-presets.d.ts.map +1 -0
  145. package/dist/style-presets.js +556 -0
  146. package/dist/style-presets.js.map +1 -0
  147. package/dist/translations.d.ts +159 -1
  148. package/dist/translations.d.ts.map +1 -1
  149. package/dist/translations.js +310 -9
  150. package/dist/translations.js.map +1 -1
  151. package/dist/tweakcn-special-themes.d.ts.map +1 -1
  152. package/dist/tweakcn-special-themes.js +585 -9
  153. package/dist/tweakcn-special-themes.js.map +1 -1
  154. package/dist/types/css.d.js +3 -0
  155. package/dist/types/css.d.js.map +1 -0
  156. package/dist/types.d.ts +30 -0
  157. package/dist/types.d.ts.map +1 -1
  158. package/dist/types.js +1 -1
  159. package/dist/types.js.map +1 -1
  160. package/dist/utilities/getThemeSettings.d.ts.map +1 -1
  161. package/dist/utilities/getThemeSettings.js +2 -14
  162. package/dist/utilities/getThemeSettings.js.map +1 -1
  163. package/dist/utils/contrast.d.ts +63 -0
  164. package/dist/utils/contrast.d.ts.map +1 -0
  165. package/dist/utils/contrast.js +158 -0
  166. package/dist/utils/contrast.js.map +1 -0
  167. package/dist/utils/exportTokens.d.ts +30 -0
  168. package/dist/utils/exportTokens.d.ts.map +1 -0
  169. package/dist/utils/exportTokens.js +183 -0
  170. package/dist/utils/exportTokens.js.map +1 -0
  171. package/dist/utils/generatePalette.d.ts +46 -0
  172. package/dist/utils/generatePalette.d.ts.map +1 -0
  173. package/dist/utils/generatePalette.js +127 -0
  174. package/dist/utils/generatePalette.js.map +1 -0
  175. package/dist/utils/generateThemeCSS.d.ts.map +1 -1
  176. package/dist/utils/generateThemeCSS.js +2 -40
  177. package/dist/utils/generateThemeCSS.js.map +1 -1
  178. package/dist/utils/livePreviewThemeRuntime.d.ts +16 -2
  179. package/dist/utils/livePreviewThemeRuntime.d.ts.map +1 -1
  180. package/dist/utils/livePreviewThemeRuntime.js +37 -14
  181. package/dist/utils/livePreviewThemeRuntime.js.map +1 -1
  182. package/dist/utils/localizedText.d.ts +8 -0
  183. package/dist/utils/localizedText.d.ts.map +1 -0
  184. package/dist/utils/localizedText.js +21 -0
  185. package/dist/utils/localizedText.js.map +1 -0
  186. package/dist/utils/resolveThemeConfiguration.d.ts +45 -1
  187. package/dist/utils/resolveThemeConfiguration.d.ts.map +1 -1
  188. package/dist/utils/resolveThemeConfiguration.js +12 -5
  189. package/dist/utils/resolveThemeConfiguration.js.map +1 -1
  190. package/dist/utils/themeColors.d.ts +3 -0
  191. package/dist/utils/themeColors.d.ts.map +1 -1
  192. package/dist/utils/themeColors.js +30 -1
  193. package/dist/utils/themeColors.js.map +1 -1
  194. package/dist/utils/themeHtmlAttributes.d.ts +32 -12
  195. package/dist/utils/themeHtmlAttributes.d.ts.map +1 -1
  196. package/dist/utils/themeHtmlAttributes.js +38 -5
  197. package/dist/utils/themeHtmlAttributes.js.map +1 -1
  198. package/dist/utils/themeUtils.d.ts +3 -5
  199. package/dist/utils/themeUtils.d.ts.map +1 -1
  200. package/dist/utils/themeUtils.js +416 -6
  201. package/dist/utils/themeUtils.js.map +1 -1
  202. package/dist/utils/tweakcnConverter.d.ts +1 -3
  203. package/dist/utils/tweakcnConverter.d.ts.map +1 -1
  204. package/dist/utils/tweakcnConverter.js +1 -3
  205. package/dist/utils/tweakcnConverter.js.map +1 -1
  206. package/package.json +11 -5
  207. package/dist/components/ThemePreview.d.ts +0 -3
  208. package/dist/components/ThemePreview.d.ts.map +0 -1
  209. package/dist/components/ThemePreview.js +0 -321
  210. package/dist/components/ThemePreview.js.map +0 -1
  211. package/dist/plugin.d.ts +0 -2
  212. package/dist/plugin.d.ts.map +0 -1
  213. package/dist/plugin.js +0 -3
  214. package/dist/plugin.js.map +0 -1
@@ -1,30 +1,33 @@
1
1
  import { BASE_FONT_SIZE_OPTIONS, BODY_FONT_OPTIONS, HEADING_FONT_OPTIONS, LINE_HEIGHT_OPTIONS } from '../constants/themeFonts.js';
2
+ import { getTranslations } from '../translations.js';
2
3
  import { darkModeField, lightModeField } from './colorModeFields.js';
3
4
  /**
4
5
  * Theme Configuration Field with Theme Selection as default value setter
5
6
  * Theme Selection populates lightMode/darkMode colors automatically
6
7
  */ export function createThemeConfigurationField(options) {
7
- const { themePresets, defaultTheme, includeColorModeToggle, includeCustomCSS, enableAdvancedFeatures = true, useThemePreviewField = true } = options;
8
+ const { themePresets, defaultTheme, includeColorModeToggle, includeCustomCSS, enableAdvancedFeatures = true, useThemePreviewField = true, customThemeConfigurationFields, customThemeConfigurationSections } = options;
8
9
  const fields = [
10
+ // NOTE: the palette generator is rendered *inside* ThemePreviewField (in the
11
+ // preset column, above the preset list) — it is not a separate UI field.
9
12
  {
10
13
  name: 'theme',
11
14
  type: 'text',
12
15
  required: true,
13
16
  defaultValue: defaultTheme,
14
17
  label: {
15
- en: '🎨 Theme Selection',
16
- cs: '🎨 Výběr tématu'
18
+ en: 'Theme Selection',
19
+ cs: 'Výběr motivu'
17
20
  },
18
- validate: (value)=>{
21
+ validate: (value, options)=>{
19
22
  if (typeof value === 'string' && value.trim().length > 0) {
20
23
  return true;
21
24
  }
22
- return 'Select a theme';
25
+ return getTranslations(options?.req?.i18n?.language ?? 'en').ui.selectThemeError;
23
26
  },
24
27
  admin: {
25
28
  description: {
26
- en: 'Select a theme to auto-populate color values. You can customize colors after selection.',
27
- cs: 'Vyberte téma pro automatické předvyplnění barev. Po výběru můžete barvy upravit.'
29
+ en: 'Pick a theme to fill in the colours. You can fine-tune them afterwards.',
30
+ cs: 'Vyberte motiv a barvy se předvyplní. Potom je můžete dál upravovat.'
28
31
  },
29
32
  components: {
30
33
  Field: '@kilivi/payloadcms-theme-management/fields/ThemePreviewField'
@@ -36,6 +39,50 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
36
39
  }
37
40
  }
38
41
  ];
42
+ // Live preview: colours, fonts and component styles in one place. On wide admins
43
+ // it occupies a sticky right-hand column spanning the whole tab (see
44
+ // ThemePreviewField.css, `.tm-appearance`); on narrow ones it follows the theme picker.
45
+ fields.push({
46
+ name: 'appearancePreview',
47
+ type: 'ui',
48
+ admin: {
49
+ components: {
50
+ Field: '@kilivi/payloadcms-theme-management/fields/AppearancePreviewField'
51
+ }
52
+ }
53
+ });
54
+ // Style Preset - visual style selection independent of colors
55
+ fields.push({
56
+ type: 'collapsible',
57
+ label: {
58
+ en: 'Style Preset',
59
+ cs: 'Styl vzhledu'
60
+ },
61
+ admin: {
62
+ initCollapsed: true,
63
+ className: 'tm-section-style-preset',
64
+ description: {
65
+ en: 'Choose a visual style (Brutalism, Swiss, Glassmorphism …) without changing the colour palette.',
66
+ cs: 'Zvolte vizuální styl (Brutalismus, Švýcarský, Glassmorphism …) bez změny barevné palety.'
67
+ }
68
+ },
69
+ fields: [
70
+ {
71
+ name: 'stylePreset',
72
+ type: 'text',
73
+ label: {
74
+ en: 'Active Style Preset',
75
+ cs: 'Aktivní styl vzhledu'
76
+ },
77
+ defaultValue: '',
78
+ admin: {
79
+ components: {
80
+ Field: '@kilivi/payloadcms-theme-management/fields/StylePresetField'
81
+ }
82
+ }
83
+ }
84
+ ]
85
+ });
39
86
  // Border Radius Configuration - Always visible
40
87
  fields.push({
41
88
  type: 'row',
@@ -44,8 +91,8 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
44
91
  name: 'borderRadius',
45
92
  type: 'select',
46
93
  label: {
47
- en: '📐 Border Radius',
48
- cs: '📐 Zaoblení rohů'
94
+ en: 'Border Radius',
95
+ cs: 'Zaoblení rohů'
49
96
  },
50
97
  defaultValue: 'medium',
51
98
  options: [
@@ -98,8 +145,8 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
98
145
  name: 'spacing',
99
146
  type: 'select',
100
147
  label: {
101
- en: '📏 Spacing Scale',
102
- cs: '📏 Škála rozestupů'
148
+ en: 'Spacing Scale',
149
+ cs: 'Škála rozestupů'
103
150
  },
104
151
  defaultValue: 'medium',
105
152
  options: [
@@ -141,14 +188,15 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
141
188
  fields.push({
142
189
  type: 'collapsible',
143
190
  label: {
144
- en: '🌗 Color Mode Settings',
145
- cs: '🌗 Nastavení barevného režimu'
191
+ en: 'Color Mode Settings',
192
+ cs: 'Nastavení barevného režimu'
146
193
  },
147
194
  admin: {
148
- initCollapsed: false,
195
+ // Fine-tuning: collapsed by default so presets and the preview lead the tab.
196
+ initCollapsed: true,
149
197
  description: {
150
- en: 'Configure light and dark mode colors. Changes here override theme selection.',
151
- cs: 'Nakonfigurujte barvy světlého a tmavého režimu. Změny zde přepíší výběr tématu.'
198
+ en: 'Individual light and dark mode colours. Edits here take precedence over the theme.',
199
+ cs: 'Jednotlivé barvy světlého a tmavého režimu. Úpravy zde mají přednost před motivem.'
152
200
  }
153
201
  },
154
202
  fields: [
@@ -214,7 +262,25 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
214
262
  ]
215
263
  },
216
264
  lightModeField,
217
- darkModeField
265
+ darkModeField,
266
+ {
267
+ name: 'accessibilityAudit',
268
+ type: 'ui',
269
+ admin: {
270
+ components: {
271
+ Field: '@kilivi/payloadcms-theme-management/fields/AccessibilityAuditField'
272
+ }
273
+ }
274
+ },
275
+ {
276
+ name: 'themeExport',
277
+ type: 'ui',
278
+ admin: {
279
+ components: {
280
+ Field: '@kilivi/payloadcms-theme-management/fields/ThemeExportField'
281
+ }
282
+ }
283
+ }
218
284
  ]
219
285
  });
220
286
  }
@@ -222,11 +288,12 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
222
288
  fields.push({
223
289
  type: 'collapsible',
224
290
  label: {
225
- en: '🅰️ Typography',
226
- cs: '🅰️ Typografie'
291
+ en: 'Typography',
292
+ cs: 'Typografie'
227
293
  },
228
294
  admin: {
229
295
  initCollapsed: true,
296
+ className: 'tm-section-typography',
230
297
  description: {
231
298
  en: 'Choose font families and base typography settings. Leave fields on "Use preset" to inherit the theme defaults.',
232
299
  cs: 'Zvolte rodiny písem a základní typografické nastavení. Hodnota "Použít výchozí" zachová nastavení motivu.'
@@ -365,11 +432,12 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
365
432
  const customPresetsField = {
366
433
  type: 'collapsible',
367
434
  label: {
368
- en: '🧩 Custom Theme Presets',
369
- cs: '🧩 Vlastní motivy'
435
+ en: 'Custom Theme Presets',
436
+ cs: 'Vlastní motivy'
370
437
  },
371
438
  admin: {
372
439
  initCollapsed: true,
440
+ className: 'tm-section-custom-presets',
373
441
  description: {
374
442
  en: 'Import additional theme presets via JSON to extend or override the defaults. These presets become available instantly in the Theme Selection above.',
375
443
  cs: 'Importujte další motivy pomocí JSONu a rozšiřte nebo přepište výchozí nabídku. Motivy budou ihned k dispozici ve výběru výše.'
@@ -386,7 +454,7 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
386
454
  admin: {
387
455
  description: {
388
456
  en: 'Paste or import an array (or object map) of theme presets. Each entry should include at least a unique "name" and "label" with optional lightMode/darkMode colors.',
389
- cs: 'Vložte nebo importujte pole (či objekt) motivů. Každý motiv musí mít unikátní „name“ a „label“ a volitelně barvy pro světly/tmavý režim.'
457
+ cs: 'Vložte nebo importujte pole (či objekt) motivů. Každý motiv musí mít unikátní „name“ a „label“ a volitelně barvy pro světlý a tmavý režim.'
390
458
  },
391
459
  components: {
392
460
  Field: '@kilivi/payloadcms-theme-management/fields/ThemePresetImportField'
@@ -396,6 +464,868 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
396
464
  ]
397
465
  };
398
466
  fields.push(customPresetsField);
467
+ // Visual Effects — glassmorphism, shadows, border style
468
+ fields.push({
469
+ type: 'collapsible',
470
+ label: {
471
+ en: 'Visual Effects',
472
+ cs: 'Vizuální efekty'
473
+ },
474
+ admin: {
475
+ initCollapsed: true,
476
+ className: 'tm-section-effects',
477
+ description: {
478
+ en: 'Configure UI effect style, shadow intensity and border appearance.',
479
+ cs: 'Nastavte styl efektů UI, intenzitu stínů a vzhled okrajů.'
480
+ }
481
+ },
482
+ fields: [
483
+ {
484
+ name: 'visualEffects',
485
+ type: 'group',
486
+ fields: [
487
+ {
488
+ type: 'row',
489
+ fields: [
490
+ {
491
+ name: 'effectStyle',
492
+ type: 'select',
493
+ label: {
494
+ en: 'Effect Style',
495
+ cs: 'Styl efektů'
496
+ },
497
+ defaultValue: 'flat',
498
+ options: [
499
+ {
500
+ label: {
501
+ en: 'Flat',
502
+ cs: 'Plochý'
503
+ },
504
+ value: 'flat'
505
+ },
506
+ {
507
+ label: {
508
+ en: 'Elevated (Box shadows)',
509
+ cs: 'Vyvýšený (stíny)'
510
+ },
511
+ value: 'elevated'
512
+ },
513
+ {
514
+ label: {
515
+ en: 'Glassmorphism (Frosted glass)',
516
+ cs: 'Glassmorphism (mléčné sklo)'
517
+ },
518
+ value: 'glass'
519
+ },
520
+ {
521
+ label: {
522
+ en: 'Neumorphism (Soft UI)',
523
+ cs: 'Neumorphism (měkké UI)'
524
+ },
525
+ value: 'neumorphic'
526
+ },
527
+ {
528
+ label: {
529
+ en: 'Claymorphism (Clay-like)',
530
+ cs: 'Claymorphism (hlína)'
531
+ },
532
+ value: 'clay'
533
+ }
534
+ ],
535
+ admin: {
536
+ description: {
537
+ en: 'Visual style applied to cards, panels and interactive elements.',
538
+ cs: 'Vizuální styl karet, panelů a interaktivních prvků.'
539
+ },
540
+ width: '50%'
541
+ },
542
+ dbName: 'effect_style'
543
+ },
544
+ {
545
+ name: 'shadowIntensity',
546
+ type: 'select',
547
+ label: {
548
+ en: 'Shadow Intensity',
549
+ cs: 'Intenzita stínů'
550
+ },
551
+ defaultValue: 'medium',
552
+ options: [
553
+ {
554
+ label: {
555
+ en: 'None',
556
+ cs: 'Žádné'
557
+ },
558
+ value: 'none'
559
+ },
560
+ {
561
+ label: {
562
+ en: 'Subtle',
563
+ cs: 'Jemné'
564
+ },
565
+ value: 'subtle'
566
+ },
567
+ {
568
+ label: {
569
+ en: 'Medium',
570
+ cs: 'Střední'
571
+ },
572
+ value: 'medium'
573
+ },
574
+ {
575
+ label: {
576
+ en: 'Strong',
577
+ cs: 'Silné'
578
+ },
579
+ value: 'strong'
580
+ },
581
+ {
582
+ label: {
583
+ en: 'Dramatic',
584
+ cs: 'Dramatické'
585
+ },
586
+ value: 'dramatic'
587
+ }
588
+ ],
589
+ admin: {
590
+ description: {
591
+ en: 'Global shadow depth for elevated elements.',
592
+ cs: 'Globální hloubka stínů pro vyvýšené prvky.'
593
+ },
594
+ width: '50%'
595
+ },
596
+ dbName: 'shadow_intensity'
597
+ }
598
+ ]
599
+ },
600
+ {
601
+ type: 'row',
602
+ fields: [
603
+ {
604
+ name: 'backdropBlur',
605
+ type: 'select',
606
+ label: {
607
+ en: 'Backdrop Blur',
608
+ cs: 'Rozmazání pozadí'
609
+ },
610
+ defaultValue: 'none',
611
+ options: [
612
+ {
613
+ label: {
614
+ en: 'None',
615
+ cs: 'Žádné'
616
+ },
617
+ value: 'none'
618
+ },
619
+ {
620
+ label: {
621
+ en: 'Slight (4px)',
622
+ cs: 'Jemné (4px)'
623
+ },
624
+ value: 'slight'
625
+ },
626
+ {
627
+ label: {
628
+ en: 'Medium (8px)',
629
+ cs: 'Střední (8px)'
630
+ },
631
+ value: 'medium'
632
+ },
633
+ {
634
+ label: {
635
+ en: 'Strong (16px)',
636
+ cs: 'Silné (16px)'
637
+ },
638
+ value: 'strong'
639
+ },
640
+ {
641
+ label: {
642
+ en: 'Heavy (24px)',
643
+ cs: 'Intenzivní (24px)'
644
+ },
645
+ value: 'heavy'
646
+ }
647
+ ],
648
+ admin: {
649
+ description: {
650
+ en: 'Blur effect behind translucent elements (requires glass effect style).',
651
+ cs: 'Rozmazání za průhledné prvky (vyžaduje styl skla).'
652
+ },
653
+ width: '50%'
654
+ },
655
+ dbName: 'backdrop_blur'
656
+ },
657
+ {
658
+ name: 'borderStyle',
659
+ type: 'select',
660
+ label: {
661
+ en: 'Border Style',
662
+ cs: 'Styl okrajů'
663
+ },
664
+ defaultValue: 'solid',
665
+ options: [
666
+ {
667
+ label: {
668
+ en: 'None',
669
+ cs: 'Žádné'
670
+ },
671
+ value: 'none'
672
+ },
673
+ {
674
+ label: {
675
+ en: 'Solid',
676
+ cs: 'Plné'
677
+ },
678
+ value: 'solid'
679
+ },
680
+ {
681
+ label: {
682
+ en: 'Dashed',
683
+ cs: 'Čárkované'
684
+ },
685
+ value: 'dashed'
686
+ },
687
+ {
688
+ label: {
689
+ en: 'Dotted',
690
+ cs: 'Tečkované'
691
+ },
692
+ value: 'dotted'
693
+ },
694
+ {
695
+ label: {
696
+ en: 'Double',
697
+ cs: 'Dvojité'
698
+ },
699
+ value: 'double'
700
+ }
701
+ ],
702
+ admin: {
703
+ description: {
704
+ en: 'Default border style for cards, inputs and dividers.',
705
+ cs: 'Výchozí styl okrajů pro karty, vstupy a oddělovače.'
706
+ },
707
+ width: '50%'
708
+ },
709
+ dbName: 'border_style'
710
+ }
711
+ ]
712
+ },
713
+ {
714
+ type: 'row',
715
+ fields: [
716
+ {
717
+ name: 'borderWidth',
718
+ type: 'select',
719
+ label: {
720
+ en: 'Border Width',
721
+ cs: 'Tloušťka okraje'
722
+ },
723
+ defaultValue: '1px',
724
+ options: [
725
+ {
726
+ label: '0px',
727
+ value: '0px'
728
+ },
729
+ {
730
+ label: '1px',
731
+ value: '1px'
732
+ },
733
+ {
734
+ label: '2px',
735
+ value: '2px'
736
+ },
737
+ {
738
+ label: '3px',
739
+ value: '3px'
740
+ },
741
+ {
742
+ label: '4px',
743
+ value: '4px'
744
+ }
745
+ ],
746
+ admin: {
747
+ width: '50%'
748
+ },
749
+ dbName: 'border_width'
750
+ },
751
+ {
752
+ name: 'glassOpacity',
753
+ type: 'number',
754
+ label: {
755
+ en: 'Glass Opacity (%)',
756
+ cs: 'Průhlednost skla (%)'
757
+ },
758
+ defaultValue: 60,
759
+ min: 0,
760
+ max: 100,
761
+ admin: {
762
+ description: {
763
+ en: 'Card/panel opacity when using glass effect (0 = fully transparent, 100 = opaque).',
764
+ cs: 'Průhlednost karet/panelů při skleněném efektu (0 = plně průhledné, 100 = neprůhledné).'
765
+ },
766
+ width: '50%',
767
+ condition: (_, siblingData)=>siblingData?.effectStyle === 'glass'
768
+ }
769
+ }
770
+ ]
771
+ }
772
+ ]
773
+ }
774
+ ]
775
+ });
776
+ // Component Styles — buttons, cards, images, icons
777
+ fields.push({
778
+ type: 'collapsible',
779
+ label: {
780
+ en: 'Component Styles',
781
+ cs: 'Styly komponent'
782
+ },
783
+ admin: {
784
+ initCollapsed: true,
785
+ className: 'tm-section-components',
786
+ description: {
787
+ en: 'Customize button variant, card style and navbar appearance.',
788
+ cs: 'Přizpůsobte styl tlačítek, karet a navigační lišty.'
789
+ }
790
+ },
791
+ fields: [
792
+ {
793
+ name: 'componentStyles',
794
+ type: 'group',
795
+ fields: [
796
+ {
797
+ type: 'row',
798
+ fields: [
799
+ {
800
+ name: 'buttonVariant',
801
+ type: 'select',
802
+ label: {
803
+ en: 'Primary Button Style',
804
+ cs: 'Styl primárního tlačítka'
805
+ },
806
+ defaultValue: 'filled',
807
+ options: [
808
+ {
809
+ label: {
810
+ en: 'Filled (solid)',
811
+ cs: 'Plné (solid)'
812
+ },
813
+ value: 'filled'
814
+ },
815
+ {
816
+ label: {
817
+ en: 'Outlined',
818
+ cs: 'Ohraničené'
819
+ },
820
+ value: 'outlined'
821
+ },
822
+ {
823
+ label: {
824
+ en: 'Ghost (transparent)',
825
+ cs: 'Průhledné'
826
+ },
827
+ value: 'ghost'
828
+ },
829
+ {
830
+ label: {
831
+ en: 'Gradient',
832
+ cs: 'Přechodové'
833
+ },
834
+ value: 'gradient'
835
+ },
836
+ {
837
+ label: {
838
+ en: 'Pill (full rounded)',
839
+ cs: 'Pill (plné zaoblení)'
840
+ },
841
+ value: 'pill'
842
+ },
843
+ {
844
+ label: {
845
+ en: 'Brutalist (thick border)',
846
+ cs: 'Brutalistické (silný okraj)'
847
+ },
848
+ value: 'brutal'
849
+ }
850
+ ],
851
+ admin: {
852
+ description: {
853
+ en: 'Default visual style of primary action buttons.',
854
+ cs: 'Výchozí vizuální styl primárních tlačítek.'
855
+ },
856
+ width: '50%'
857
+ },
858
+ dbName: 'button_variant'
859
+ },
860
+ {
861
+ name: 'buttonSize',
862
+ type: 'select',
863
+ label: {
864
+ en: 'Button Size',
865
+ cs: 'Velikost tlačítka'
866
+ },
867
+ defaultValue: 'medium',
868
+ options: [
869
+ {
870
+ label: {
871
+ en: 'Small',
872
+ cs: 'Malé'
873
+ },
874
+ value: 'small'
875
+ },
876
+ {
877
+ label: {
878
+ en: 'Medium',
879
+ cs: 'Střední'
880
+ },
881
+ value: 'medium'
882
+ },
883
+ {
884
+ label: {
885
+ en: 'Large',
886
+ cs: 'Velké'
887
+ },
888
+ value: 'large'
889
+ },
890
+ {
891
+ label: {
892
+ en: 'XL',
893
+ cs: 'XL'
894
+ },
895
+ value: 'xl'
896
+ }
897
+ ],
898
+ admin: {
899
+ description: {
900
+ en: 'Default padding / font-size of buttons.',
901
+ cs: 'Výchozí odsazení a velikost písma tlačítek.'
902
+ },
903
+ width: '50%'
904
+ },
905
+ dbName: 'button_size'
906
+ }
907
+ ]
908
+ },
909
+ {
910
+ type: 'row',
911
+ fields: [
912
+ {
913
+ name: 'cardStyle',
914
+ type: 'select',
915
+ label: {
916
+ en: 'Card Style',
917
+ cs: 'Styl karet'
918
+ },
919
+ defaultValue: 'elevated',
920
+ options: [
921
+ {
922
+ label: {
923
+ en: 'Elevated (shadow)',
924
+ cs: 'Vyvýšené (stín)'
925
+ },
926
+ value: 'elevated'
927
+ },
928
+ {
929
+ label: {
930
+ en: 'Flat (no shadow)',
931
+ cs: 'Ploché (bez stínu)'
932
+ },
933
+ value: 'flat'
934
+ },
935
+ {
936
+ label: {
937
+ en: 'Bordered',
938
+ cs: 'S okrajem'
939
+ },
940
+ value: 'bordered'
941
+ },
942
+ {
943
+ label: {
944
+ en: 'Glass',
945
+ cs: 'Skleněné'
946
+ },
947
+ value: 'glass'
948
+ },
949
+ {
950
+ label: {
951
+ en: 'Neumorphic',
952
+ cs: 'Neumorfní'
953
+ },
954
+ value: 'neumorphic'
955
+ },
956
+ {
957
+ label: {
958
+ en: 'Gradient border',
959
+ cs: 'Přechodový okraj'
960
+ },
961
+ value: 'gradient-border'
962
+ }
963
+ ],
964
+ admin: {
965
+ description: {
966
+ en: 'Default card/panel visual style across the website.',
967
+ cs: 'Výchozí vizuální styl karet a panelů na webu.'
968
+ },
969
+ width: '50%'
970
+ },
971
+ dbName: 'card_style'
972
+ },
973
+ {
974
+ name: 'cardHoverEffect',
975
+ type: 'select',
976
+ label: {
977
+ en: 'Card Hover Effect',
978
+ cs: 'Efekt při najetí na kartu'
979
+ },
980
+ defaultValue: 'lift',
981
+ options: [
982
+ {
983
+ label: {
984
+ en: 'None',
985
+ cs: 'Žádný'
986
+ },
987
+ value: 'none'
988
+ },
989
+ {
990
+ label: {
991
+ en: 'Lift (translate up)',
992
+ cs: 'Zvednutí (posun nahoru)'
993
+ },
994
+ value: 'lift'
995
+ },
996
+ {
997
+ label: {
998
+ en: 'Scale up',
999
+ cs: 'Zvětšení'
1000
+ },
1001
+ value: 'scale'
1002
+ },
1003
+ {
1004
+ label: {
1005
+ en: 'Shadow grow',
1006
+ cs: 'Větší stín'
1007
+ },
1008
+ value: 'shadow'
1009
+ },
1010
+ {
1011
+ label: {
1012
+ en: 'Border glow',
1013
+ cs: 'Zářící okraj'
1014
+ },
1015
+ value: 'glow'
1016
+ },
1017
+ {
1018
+ label: {
1019
+ en: 'Tilt 3D',
1020
+ cs: '3D náklon'
1021
+ },
1022
+ value: 'tilt'
1023
+ }
1024
+ ],
1025
+ admin: {
1026
+ width: '50%'
1027
+ },
1028
+ dbName: 'card_hover_effect'
1029
+ }
1030
+ ]
1031
+ },
1032
+ {
1033
+ type: 'row',
1034
+ fields: [
1035
+ {
1036
+ name: 'navbarStyle',
1037
+ type: 'select',
1038
+ label: {
1039
+ en: 'Navbar Style',
1040
+ cs: 'Styl navigace'
1041
+ },
1042
+ defaultValue: 'solid',
1043
+ options: [
1044
+ {
1045
+ label: {
1046
+ en: 'Solid',
1047
+ cs: 'Plná'
1048
+ },
1049
+ value: 'solid'
1050
+ },
1051
+ {
1052
+ label: {
1053
+ en: 'Transparent (on hero)',
1054
+ cs: 'Průhledná (nad hero)'
1055
+ },
1056
+ value: 'transparent'
1057
+ },
1058
+ {
1059
+ label: {
1060
+ en: 'Blurred glass',
1061
+ cs: 'Rozmazané sklo'
1062
+ },
1063
+ value: 'blur'
1064
+ },
1065
+ {
1066
+ label: {
1067
+ en: 'Floating',
1068
+ cs: 'Plovoucí'
1069
+ },
1070
+ value: 'floating'
1071
+ },
1072
+ {
1073
+ label: {
1074
+ en: 'Minimal (bottom border only)',
1075
+ cs: 'Minimalistická (jen spodní okraj)'
1076
+ },
1077
+ value: 'minimal'
1078
+ }
1079
+ ],
1080
+ admin: {
1081
+ description: {
1082
+ en: 'Navigation bar visual style.',
1083
+ cs: 'Vizuální styl navigační lišty.'
1084
+ },
1085
+ width: '50%'
1086
+ },
1087
+ dbName: 'navbar_style'
1088
+ },
1089
+ {
1090
+ name: 'footerStyle',
1091
+ type: 'select',
1092
+ label: {
1093
+ en: 'Footer Style',
1094
+ cs: 'Styl patičky'
1095
+ },
1096
+ defaultValue: 'standard',
1097
+ options: [
1098
+ {
1099
+ label: {
1100
+ en: 'Standard',
1101
+ cs: 'Standardní'
1102
+ },
1103
+ value: 'standard'
1104
+ },
1105
+ {
1106
+ label: {
1107
+ en: 'Minimal',
1108
+ cs: 'Minimalistická'
1109
+ },
1110
+ value: 'minimal'
1111
+ },
1112
+ {
1113
+ label: {
1114
+ en: 'Dark',
1115
+ cs: 'Tmavá'
1116
+ },
1117
+ value: 'dark'
1118
+ },
1119
+ {
1120
+ label: {
1121
+ en: 'Gradient top edge',
1122
+ cs: 'Gradient horní hrana'
1123
+ },
1124
+ value: 'gradient-top'
1125
+ },
1126
+ {
1127
+ label: {
1128
+ en: 'Full colour',
1129
+ cs: 'Plná barva'
1130
+ },
1131
+ value: 'full-color'
1132
+ }
1133
+ ],
1134
+ admin: {
1135
+ description: {
1136
+ en: 'Footer visual style.',
1137
+ cs: 'Vizuální styl patičky.'
1138
+ },
1139
+ width: '50%'
1140
+ },
1141
+ dbName: 'footer_style'
1142
+ }
1143
+ ]
1144
+ },
1145
+ {
1146
+ type: 'row',
1147
+ fields: [
1148
+ {
1149
+ name: 'imageStyle',
1150
+ type: 'select',
1151
+ label: {
1152
+ en: 'Image Style',
1153
+ cs: 'Styl obrázků'
1154
+ },
1155
+ defaultValue: 'default',
1156
+ options: [
1157
+ {
1158
+ label: {
1159
+ en: 'Default',
1160
+ cs: 'Výchozí'
1161
+ },
1162
+ value: 'default'
1163
+ },
1164
+ {
1165
+ label: {
1166
+ en: 'Rounded',
1167
+ cs: 'Zaoblené'
1168
+ },
1169
+ value: 'rounded'
1170
+ },
1171
+ {
1172
+ label: {
1173
+ en: 'Circle',
1174
+ cs: 'Kruhové'
1175
+ },
1176
+ value: 'circle'
1177
+ },
1178
+ {
1179
+ label: {
1180
+ en: 'Vignette',
1181
+ cs: 'Vinětace'
1182
+ },
1183
+ value: 'vignette'
1184
+ },
1185
+ {
1186
+ label: {
1187
+ en: 'Grayscale',
1188
+ cs: 'Černobílé'
1189
+ },
1190
+ value: 'grayscale'
1191
+ },
1192
+ {
1193
+ label: {
1194
+ en: 'Duotone',
1195
+ cs: 'Duotón'
1196
+ },
1197
+ value: 'duotone'
1198
+ },
1199
+ {
1200
+ label: {
1201
+ en: 'Polaroid',
1202
+ cs: 'Polaroid'
1203
+ },
1204
+ value: 'polaroid'
1205
+ }
1206
+ ],
1207
+ admin: {
1208
+ description: {
1209
+ en: 'Default treatment for content images (applied via [data-img] / .themed-image).',
1210
+ cs: 'Výchozí úprava obsahových obrázků (přes [data-img] / .themed-image).'
1211
+ },
1212
+ width: '50%'
1213
+ },
1214
+ dbName: 'image_style'
1215
+ },
1216
+ {
1217
+ name: 'linkStyle',
1218
+ type: 'select',
1219
+ label: {
1220
+ en: 'Link Style',
1221
+ cs: 'Styl odkazů'
1222
+ },
1223
+ defaultValue: 'underline-hover',
1224
+ options: [
1225
+ {
1226
+ label: {
1227
+ en: 'Always underlined',
1228
+ cs: 'Vždy podtržené'
1229
+ },
1230
+ value: 'underline'
1231
+ },
1232
+ {
1233
+ label: {
1234
+ en: 'Underline on hover',
1235
+ cs: 'Podtržení při najetí'
1236
+ },
1237
+ value: 'underline-hover'
1238
+ },
1239
+ {
1240
+ label: {
1241
+ en: 'No underline',
1242
+ cs: 'Bez podtržení'
1243
+ },
1244
+ value: 'none'
1245
+ },
1246
+ {
1247
+ label: {
1248
+ en: 'Highlight',
1249
+ cs: 'Zvýraznění'
1250
+ },
1251
+ value: 'highlight'
1252
+ },
1253
+ {
1254
+ label: {
1255
+ en: 'Animated underline',
1256
+ cs: 'Animované podtržení'
1257
+ },
1258
+ value: 'animated'
1259
+ }
1260
+ ],
1261
+ admin: {
1262
+ description: {
1263
+ en: 'Default style for in-content links (applied via [data-link] / .themed-link).',
1264
+ cs: 'Výchozí styl odkazů v obsahu (přes [data-link] / .themed-link).'
1265
+ },
1266
+ width: '50%'
1267
+ },
1268
+ dbName: 'link_style'
1269
+ }
1270
+ ]
1271
+ },
1272
+ {
1273
+ type: 'row',
1274
+ fields: [
1275
+ {
1276
+ name: 'enableScrollReveal',
1277
+ type: 'checkbox',
1278
+ label: {
1279
+ en: 'Scroll reveal animations',
1280
+ cs: 'Animace při scrollování'
1281
+ },
1282
+ defaultValue: true,
1283
+ admin: {
1284
+ description: {
1285
+ en: 'Reveal elements as they enter the viewport.',
1286
+ cs: 'Odhalovat prvky při vstupu do viewportu.'
1287
+ },
1288
+ width: '50%'
1289
+ }
1290
+ },
1291
+ {
1292
+ name: 'enableHoverAnimations',
1293
+ type: 'checkbox',
1294
+ label: {
1295
+ en: 'Hover micro-animations',
1296
+ cs: 'Hover mikro-animace'
1297
+ },
1298
+ defaultValue: true,
1299
+ admin: {
1300
+ description: {
1301
+ en: 'Subtle motion on interactive elements when hovered.',
1302
+ cs: 'Jemný pohyb interaktivních prvků při najetí.'
1303
+ },
1304
+ width: '50%'
1305
+ }
1306
+ }
1307
+ ]
1308
+ }
1309
+ ]
1310
+ }
1311
+ ]
1312
+ });
1313
+ if (customThemeConfigurationFields?.length) {
1314
+ fields.push(...customThemeConfigurationFields);
1315
+ }
1316
+ if (customThemeConfigurationSections?.length) {
1317
+ customThemeConfigurationSections.forEach((section)=>{
1318
+ fields.push({
1319
+ type: 'collapsible',
1320
+ label: section.label,
1321
+ admin: {
1322
+ initCollapsed: section.initCollapsed ?? true,
1323
+ description: section.description
1324
+ },
1325
+ fields: section.fields
1326
+ });
1327
+ });
1328
+ }
399
1329
  // Advanced Settings (when using extended theme configuration)
400
1330
  if (enableAdvancedFeatures) {
401
1331
  const advancedFields = [
@@ -467,11 +1397,12 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
467
1397
  fields.push({
468
1398
  type: 'collapsible',
469
1399
  label: {
470
- en: '⚙️ Advanced Settings',
471
- cs: '⚙️ Pokročilé nastavení'
1400
+ en: 'Advanced Settings',
1401
+ cs: 'Pokročilé nastavení'
472
1402
  },
473
1403
  admin: {
474
- initCollapsed: true
1404
+ initCollapsed: true,
1405
+ className: 'tm-section-advanced'
475
1406
  },
476
1407
  fields: advancedFields
477
1408
  });
@@ -479,17 +1410,18 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
479
1410
  // Return as tab configuration to be injected into tabs structure
480
1411
  return {
481
1412
  label: {
482
- en: '🎨 Appearance Settings',
483
- cs: '🎨 Nastavení vzhledu'
1413
+ en: 'Appearance Settings',
1414
+ cs: 'Nastavení vzhledu'
484
1415
  },
485
1416
  fields: [
486
1417
  {
487
1418
  name: 'themeConfiguration',
488
1419
  type: 'group',
489
1420
  admin: {
1421
+ className: 'tm-appearance',
490
1422
  description: {
491
- en: 'Configure website appearance and styling',
492
- cs: 'Nakonfigurujte vzhled a stylování webu'
1423
+ en: 'Appearance and style of the whole website',
1424
+ cs: 'Vzhled a styl celého webu'
493
1425
  }
494
1426
  },
495
1427
  fields