@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
@@ -0,0 +1,90 @@
1
+ import type { Field, GroupField } from 'payload';
2
+ /**
3
+ * Out-of-the-box field builders for adding theme-aware colour controls to ANY
4
+ * Payload collection/block/global — without hand-writing the radio + token-select
5
+ * + colour-picker boilerplate every time.
6
+ *
7
+ * Pair these builders with {@link resolveColorValue} on the front-end to turn the
8
+ * stored value into a ready-to-use CSS colour string.
9
+ */
10
+ type LocalizedLabel = string | {
11
+ [locale: string]: string;
12
+ };
13
+ export type ColorGroupOptions = {
14
+ /** Field label (bilingual object or plain string). */
15
+ label?: LocalizedLabel;
16
+ /** Whether the editor starts on the theme token or a custom colour. Default: `'theme'`. */
17
+ defaultSource?: 'theme' | 'custom';
18
+ /** Placeholder shown in the custom colour input. Default: `'#1d4ed8'`. */
19
+ placeholder?: string;
20
+ /** Description shown under the custom colour input. */
21
+ customDescription?: LocalizedLabel;
22
+ /** Description shown under the theme-token select. */
23
+ themeDescription?: LocalizedLabel;
24
+ /** Make the whole group required. */
25
+ required?: boolean;
26
+ /** Extra admin.condition applied to the whole group. */
27
+ condition?: GroupField['admin'] extends {
28
+ condition?: infer C;
29
+ } ? C : never;
30
+ };
31
+ /**
32
+ * A theme-aware colour group: editors pick either a colour token from the active
33
+ * theme (rendered with live swatches) or a fully custom HEX/HSL/RGB/CSS value.
34
+ *
35
+ * The stored shape is:
36
+ * ```ts
37
+ * { source: 'theme' | 'custom', themeToken?: string, customColor?: string }
38
+ * ```
39
+ *
40
+ * Resolve it on the front-end with {@link resolveColorValue}.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * import { createColorGroup } from '@kilivi/payloadcms-theme-management/fields/colorFieldHelpers'
45
+ *
46
+ * fields: [
47
+ * createColorGroup('sectionBackground', { label: { en: 'Background', cs: 'Pozadí' } }),
48
+ * ]
49
+ * ```
50
+ */
51
+ export declare const createColorGroup: (name: string, options?: ColorGroupOptions) => GroupField;
52
+ /**
53
+ * A single, always-custom colour field backed by the visual colour picker.
54
+ * Use when you don't need the theme-token option.
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * createColorField('badgeColor', { label: { en: 'Badge color', cs: 'Barva odznaku' } })
59
+ * ```
60
+ */
61
+ export declare const createColorField: (name: string, options?: {
62
+ label?: LocalizedLabel;
63
+ placeholder?: string;
64
+ description?: LocalizedLabel;
65
+ required?: boolean;
66
+ }) => Field;
67
+ /** Shape produced by {@link createColorGroup}. */
68
+ export type ColorGroupValue = {
69
+ source?: 'theme' | 'custom' | null;
70
+ themeToken?: string | null;
71
+ customColor?: string | null;
72
+ };
73
+ /**
74
+ * Turn a stored {@link createColorGroup} value into a CSS colour string.
75
+ *
76
+ * - `source: 'theme'` → `var(--<token>)`
77
+ * - `source: 'custom'` → the raw custom value
78
+ *
79
+ * @param value The stored group value.
80
+ * @param fallback Returned when nothing usable is set. Defaults to `undefined`.
81
+ *
82
+ * @example
83
+ * ```tsx
84
+ * const bg = resolveColorValue(data.appearance?.sectionBackground, 'var(--background)')
85
+ * <section style={{ background: bg }} />
86
+ * ```
87
+ */
88
+ export declare const resolveColorValue: (value: ColorGroupValue | null | undefined, fallback?: string) => string | undefined;
89
+ export {};
90
+ //# sourceMappingURL=colorFieldHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorFieldHelpers.d.ts","sourceRoot":"","sources":["../../src/fields/colorFieldHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEhD;;;;;;;GAOG;AAEH,KAAK,cAAc,GAAG,MAAM,GAAG;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAI3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,sDAAsD;IACtD,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,2FAA2F;IAC3F,aAAa,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IAClC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,cAAc,CAAA;IAClC,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,cAAc,CAAA;IACjC,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,KAAK,CAAA;CAC5E,CAAA;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,UAAS,iBAAsB,KAC9B,UA2DF,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,UAAS;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,KAC/G,KAcD,CAAA;AAEF,kDAAkD;AAClD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,eAAe,GAAG,IAAI,GAAG,SAAS,EACzC,WAAW,MAAM,KAChB,MAAM,GAAG,SAkBX,CAAA"}
@@ -0,0 +1,133 @@
1
+ const FIELD_PREFIX = '@kilivi/payloadcms-theme-management/fields';
2
+ const text = (en, cs)=>({
3
+ en,
4
+ cs
5
+ });
6
+ /**
7
+ * A theme-aware colour group: editors pick either a colour token from the active
8
+ * theme (rendered with live swatches) or a fully custom HEX/HSL/RGB/CSS value.
9
+ *
10
+ * The stored shape is:
11
+ * ```ts
12
+ * { source: 'theme' | 'custom', themeToken?: string, customColor?: string }
13
+ * ```
14
+ *
15
+ * Resolve it on the front-end with {@link resolveColorValue}.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { createColorGroup } from '@kilivi/payloadcms-theme-management/fields/colorFieldHelpers'
20
+ *
21
+ * fields: [
22
+ * createColorGroup('sectionBackground', { label: { en: 'Background', cs: 'Pozadí' } }),
23
+ * ]
24
+ * ```
25
+ */ export const createColorGroup = (name, options = {})=>{
26
+ const { label, defaultSource = 'theme', placeholder = '#1d4ed8', customDescription = text('HEX, HSL, RGB or CSS variable (e.g. var(--primary))', 'HEX, HSL, RGB nebo CSS proměnná (např. var(--primary))'), themeDescription = text('Pick a color from the active theme', 'Vyberte barvu z aktivního tématu'), required, condition } = options;
27
+ return {
28
+ name,
29
+ type: 'group',
30
+ label: label ?? false,
31
+ admin: condition ? {
32
+ condition
33
+ } : undefined,
34
+ fields: [
35
+ {
36
+ name: 'source',
37
+ type: 'radio',
38
+ label: text('Color source', 'Zdroj barvy'),
39
+ defaultValue: defaultSource,
40
+ required,
41
+ options: [
42
+ {
43
+ label: text('Theme color', 'Barva tématu'),
44
+ value: 'theme'
45
+ },
46
+ {
47
+ label: text('Custom color', 'Vlastní barva'),
48
+ value: 'custom'
49
+ }
50
+ ],
51
+ admin: {
52
+ layout: 'horizontal'
53
+ }
54
+ },
55
+ {
56
+ name: 'themeToken',
57
+ type: 'text',
58
+ label: text('Theme color token', 'Token barvy tématu'),
59
+ admin: {
60
+ description: themeDescription,
61
+ components: {
62
+ Field: `${FIELD_PREFIX}/ThemeTokenSelectField`
63
+ },
64
+ condition: (_, siblingData)=>siblingData?.source !== 'custom'
65
+ }
66
+ },
67
+ {
68
+ name: 'customColor',
69
+ type: 'text',
70
+ label: text('Custom color', 'Vlastní barva'),
71
+ admin: {
72
+ placeholder,
73
+ description: customDescription,
74
+ components: {
75
+ Field: `${FIELD_PREFIX}/ColorPickerField`
76
+ },
77
+ condition: (_, siblingData)=>siblingData?.source === 'custom'
78
+ }
79
+ }
80
+ ]
81
+ };
82
+ };
83
+ /**
84
+ * A single, always-custom colour field backed by the visual colour picker.
85
+ * Use when you don't need the theme-token option.
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * createColorField('badgeColor', { label: { en: 'Badge color', cs: 'Barva odznaku' } })
90
+ * ```
91
+ */ export const createColorField = (name, options = {})=>({
92
+ name,
93
+ type: 'text',
94
+ label: options.label ?? false,
95
+ required: options.required,
96
+ admin: {
97
+ placeholder: options.placeholder ?? '#1d4ed8',
98
+ description: options.description ?? text('HEX, HSL, RGB or CSS variable', 'HEX, HSL, RGB nebo CSS proměnná'),
99
+ components: {
100
+ Field: `${FIELD_PREFIX}/ColorPickerField`
101
+ }
102
+ }
103
+ });
104
+ /**
105
+ * Turn a stored {@link createColorGroup} value into a CSS colour string.
106
+ *
107
+ * - `source: 'theme'` → `var(--<token>)`
108
+ * - `source: 'custom'` → the raw custom value
109
+ *
110
+ * @param value The stored group value.
111
+ * @param fallback Returned when nothing usable is set. Defaults to `undefined`.
112
+ *
113
+ * @example
114
+ * ```tsx
115
+ * const bg = resolveColorValue(data.appearance?.sectionBackground, 'var(--background)')
116
+ * <section style={{ background: bg }} />
117
+ * ```
118
+ */ export const resolveColorValue = (value, fallback)=>{
119
+ if (!value) return fallback;
120
+ if (value.source === 'custom') {
121
+ const custom = value.customColor?.trim();
122
+ return custom && custom.length > 0 ? custom : fallback;
123
+ }
124
+ // Default to theme token (covers source === 'theme' and unset).
125
+ const token = value.themeToken?.trim();
126
+ if (token && token.length > 0) {
127
+ // Allow callers to store either a bare token (`primary`) or a full expression.
128
+ return token.startsWith('var(') || token.includes('(') || token.startsWith('#') ? token : `var(--${token})`;
129
+ }
130
+ return fallback;
131
+ };
132
+
133
+ //# sourceMappingURL=colorFieldHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/fields/colorFieldHelpers.ts"],"sourcesContent":["import type { Field, GroupField } from 'payload'\n\n/**\n * Out-of-the-box field builders for adding theme-aware colour controls to ANY\n * Payload collection/block/global — without hand-writing the radio + token-select\n * + colour-picker boilerplate every time.\n *\n * Pair these builders with {@link resolveColorValue} on the front-end to turn the\n * stored value into a ready-to-use CSS colour string.\n */\n\ntype LocalizedLabel = string | { [locale: string]: string }\n\nconst FIELD_PREFIX = '@kilivi/payloadcms-theme-management/fields'\n\nexport type ColorGroupOptions = {\n /** Field label (bilingual object or plain string). */\n label?: LocalizedLabel\n /** Whether the editor starts on the theme token or a custom colour. Default: `'theme'`. */\n defaultSource?: 'theme' | 'custom'\n /** Placeholder shown in the custom colour input. Default: `'#1d4ed8'`. */\n placeholder?: string\n /** Description shown under the custom colour input. */\n customDescription?: LocalizedLabel\n /** Description shown under the theme-token select. */\n themeDescription?: LocalizedLabel\n /** Make the whole group required. */\n required?: boolean\n /** Extra admin.condition applied to the whole group. */\n condition?: GroupField['admin'] extends { condition?: infer C } ? C : never\n}\n\nconst text = (en: string, cs: string) => ({ en, cs })\n\n/**\n * A theme-aware colour group: editors pick either a colour token from the active\n * theme (rendered with live swatches) or a fully custom HEX/HSL/RGB/CSS value.\n *\n * The stored shape is:\n * ```ts\n * { source: 'theme' | 'custom', themeToken?: string, customColor?: string }\n * ```\n *\n * Resolve it on the front-end with {@link resolveColorValue}.\n *\n * @example\n * ```ts\n * import { createColorGroup } from '@kilivi/payloadcms-theme-management/fields/colorFieldHelpers'\n *\n * fields: [\n * createColorGroup('sectionBackground', { label: { en: 'Background', cs: 'Pozadí' } }),\n * ]\n * ```\n */\nexport const createColorGroup = (\n name: string,\n options: ColorGroupOptions = {},\n): GroupField => {\n const {\n label,\n defaultSource = 'theme',\n placeholder = '#1d4ed8',\n customDescription = text(\n 'HEX, HSL, RGB or CSS variable (e.g. var(--primary))',\n 'HEX, HSL, RGB nebo CSS proměnná (např. var(--primary))',\n ),\n themeDescription = text('Pick a color from the active theme', 'Vyberte barvu z aktivního tématu'),\n required,\n condition,\n } = options\n\n return {\n name,\n type: 'group',\n label: label ?? false,\n admin: condition ? { condition } : undefined,\n fields: [\n {\n name: 'source',\n type: 'radio',\n label: text('Color source', 'Zdroj barvy'),\n defaultValue: defaultSource,\n required,\n options: [\n { label: text('Theme color', 'Barva tématu'), value: 'theme' },\n { label: text('Custom color', 'Vlastní barva'), value: 'custom' },\n ],\n admin: { layout: 'horizontal' },\n },\n {\n name: 'themeToken',\n type: 'text',\n label: text('Theme color token', 'Token barvy tématu'),\n admin: {\n description: themeDescription,\n components: {\n Field: `${FIELD_PREFIX}/ThemeTokenSelectField`,\n },\n condition: (_, siblingData) => siblingData?.source !== 'custom',\n },\n },\n {\n name: 'customColor',\n type: 'text',\n label: text('Custom color', 'Vlastní barva'),\n admin: {\n placeholder,\n description: customDescription,\n components: {\n Field: `${FIELD_PREFIX}/ColorPickerField`,\n },\n condition: (_, siblingData) => siblingData?.source === 'custom',\n },\n },\n ],\n }\n}\n\n/**\n * A single, always-custom colour field backed by the visual colour picker.\n * Use when you don't need the theme-token option.\n *\n * @example\n * ```ts\n * createColorField('badgeColor', { label: { en: 'Badge color', cs: 'Barva odznaku' } })\n * ```\n */\nexport const createColorField = (\n name: string,\n options: { label?: LocalizedLabel; placeholder?: string; description?: LocalizedLabel; required?: boolean } = {},\n): Field => ({\n name,\n type: 'text',\n label: options.label ?? false,\n required: options.required,\n admin: {\n placeholder: options.placeholder ?? '#1d4ed8',\n description:\n options.description ??\n text('HEX, HSL, RGB or CSS variable', 'HEX, HSL, RGB nebo CSS proměnná'),\n components: {\n Field: `${FIELD_PREFIX}/ColorPickerField`,\n },\n },\n})\n\n/** Shape produced by {@link createColorGroup}. */\nexport type ColorGroupValue = {\n source?: 'theme' | 'custom' | null\n themeToken?: string | null\n customColor?: string | null\n}\n\n/**\n * Turn a stored {@link createColorGroup} value into a CSS colour string.\n *\n * - `source: 'theme'` → `var(--<token>)`\n * - `source: 'custom'` → the raw custom value\n *\n * @param value The stored group value.\n * @param fallback Returned when nothing usable is set. Defaults to `undefined`.\n *\n * @example\n * ```tsx\n * const bg = resolveColorValue(data.appearance?.sectionBackground, 'var(--background)')\n * <section style={{ background: bg }} />\n * ```\n */\nexport const resolveColorValue = (\n value: ColorGroupValue | null | undefined,\n fallback?: string,\n): string | undefined => {\n if (!value) return fallback\n\n if (value.source === 'custom') {\n const custom = value.customColor?.trim()\n return custom && custom.length > 0 ? custom : fallback\n }\n\n // Default to theme token (covers source === 'theme' and unset).\n const token = value.themeToken?.trim()\n if (token && token.length > 0) {\n // Allow callers to store either a bare token (`primary`) or a full expression.\n return token.startsWith('var(') || token.includes('(') || token.startsWith('#')\n ? token\n : `var(--${token})`\n }\n\n return fallback\n}\n"],"names":["FIELD_PREFIX","text","en","cs","createColorGroup","name","options","label","defaultSource","placeholder","customDescription","themeDescription","required","condition","type","admin","undefined","fields","defaultValue","value","layout","description","components","Field","_","siblingData","source","createColorField","resolveColorValue","fallback","custom","customColor","trim","length","token","themeToken","startsWith","includes"],"mappings":"AAaA,MAAMA,eAAe;AAmBrB,MAAMC,OAAO,CAACC,IAAYC,KAAgB,CAAA;QAAED;QAAIC;IAAG,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;CAmBC,GACD,OAAO,MAAMC,mBAAmB,CAC9BC,MACAC,UAA6B,CAAC,CAAC;IAE/B,MAAM,EACJC,KAAK,EACLC,gBAAgB,OAAO,EACvBC,cAAc,SAAS,EACvBC,oBAAoBT,KAClB,uDACA,yDACD,EACDU,mBAAmBV,KAAK,sCAAsC,mCAAmC,EACjGW,QAAQ,EACRC,SAAS,EACV,GAAGP;IAEJ,OAAO;QACLD;QACAS,MAAM;QACNP,OAAOA,SAAS;QAChBQ,OAAOF,YAAY;YAAEA;QAAU,IAAIG;QACnCC,QAAQ;YACN;gBACEZ,MAAM;gBACNS,MAAM;gBACNP,OAAON,KAAK,gBAAgB;gBAC5BiB,cAAcV;gBACdI;gBACAN,SAAS;oBACP;wBAAEC,OAAON,KAAK,eAAe;wBAAiBkB,OAAO;oBAAQ;oBAC7D;wBAAEZ,OAAON,KAAK,gBAAgB;wBAAkBkB,OAAO;oBAAS;iBACjE;gBACDJ,OAAO;oBAAEK,QAAQ;gBAAa;YAChC;YACA;gBACEf,MAAM;gBACNS,MAAM;gBACNP,OAAON,KAAK,qBAAqB;gBACjCc,OAAO;oBACLM,aAAaV;oBACbW,YAAY;wBACVC,OAAO,GAAGvB,aAAa,sBAAsB,CAAC;oBAChD;oBACAa,WAAW,CAACW,GAAGC,cAAgBA,aAAaC,WAAW;gBACzD;YACF;YACA;gBACErB,MAAM;gBACNS,MAAM;gBACNP,OAAON,KAAK,gBAAgB;gBAC5Bc,OAAO;oBACLN;oBACAY,aAAaX;oBACbY,YAAY;wBACVC,OAAO,GAAGvB,aAAa,iBAAiB,CAAC;oBAC3C;oBACAa,WAAW,CAACW,GAAGC,cAAgBA,aAAaC,WAAW;gBACzD;YACF;SACD;IACH;AACF,EAAC;AAED;;;;;;;;CAQC,GACD,OAAO,MAAMC,mBAAmB,CAC9BtB,MACAC,UAA8G,CAAC,CAAC,GACrG,CAAA;QACXD;QACAS,MAAM;QACNP,OAAOD,QAAQC,KAAK,IAAI;QACxBK,UAAUN,QAAQM,QAAQ;QAC1BG,OAAO;YACLN,aAAaH,QAAQG,WAAW,IAAI;YACpCY,aACEf,QAAQe,WAAW,IACnBpB,KAAK,iCAAiC;YACxCqB,YAAY;gBACVC,OAAO,GAAGvB,aAAa,iBAAiB,CAAC;YAC3C;QACF;IACF,CAAA,EAAE;AASF;;;;;;;;;;;;;;CAcC,GACD,OAAO,MAAM4B,oBAAoB,CAC/BT,OACAU;IAEA,IAAI,CAACV,OAAO,OAAOU;IAEnB,IAAIV,MAAMO,MAAM,KAAK,UAAU;QAC7B,MAAMI,SAASX,MAAMY,WAAW,EAAEC;QAClC,OAAOF,UAAUA,OAAOG,MAAM,GAAG,IAAIH,SAASD;IAChD;IAEA,gEAAgE;IAChE,MAAMK,QAAQf,MAAMgB,UAAU,EAAEH;IAChC,IAAIE,SAASA,MAAMD,MAAM,GAAG,GAAG;QAC7B,+EAA+E;QAC/E,OAAOC,MAAME,UAAU,CAAC,WAAWF,MAAMG,QAAQ,CAAC,QAAQH,MAAME,UAAU,CAAC,OACvEF,QACA,CAAC,MAAM,EAAEA,MAAM,CAAC,CAAC;IACvB;IAEA,OAAOL;AACT,EAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Field } from 'payload';
2
- declare const colorFieldKeys: readonly ["background", "foreground", "primary", "primaryForeground", "card", "cardForeground", "popover", "popoverForeground", "secondary", "secondaryForeground", "muted", "mutedForeground", "accent", "accentForeground", "destructive", "destructiveForeground", "border", "input", "ring"];
2
+ declare const colorFieldKeys: readonly ["background", "foreground", "primary", "primaryForeground", "card", "cardForeground", "popover", "popoverForeground", "secondary", "secondaryForeground", "muted", "mutedForeground", "accent", "accentForeground", "destructive", "destructiveForeground", "border", "input", "ring", "gradientFrom", "gradientVia", "gradientTo"];
3
3
  type ColorToken = (typeof colorFieldKeys)[number];
4
4
  type ColorPalette = Record<ColorToken, string>;
5
5
  export declare const lightModeDefaults: ColorPalette;
@@ -1 +1 @@
1
- {"version":3,"file":"colorModeFields.d.ts","sourceRoot":"","sources":["../../src/fields/colorModeFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAMpC,QAAA,MAAM,cAAc,kSAoBV,CAAA;AAEV,KAAK,UAAU,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAQjD,KAAK,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;AA0H9C,eAAO,MAAM,iBAAiB,EAAE,YAoB/B,CAAA;AAGD,eAAO,MAAM,gBAAgB,EAAE,YAoB9B,CAAA;AAiBD,eAAO,MAAM,cAAc,EAAE,KAoB5B,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAoB3B,CAAA"}
1
+ {"version":3,"file":"colorModeFields.d.ts","sourceRoot":"","sources":["../../src/fields/colorModeFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAOpC,QAAA,MAAM,cAAc,+UAuBV,CAAA;AAEV,KAAK,UAAU,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAQjD,KAAK,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;AAkJ9C,eAAO,MAAM,iBAAiB,EAAE,YAuB/B,CAAA;AAGD,eAAO,MAAM,gBAAgB,EAAE,YAuB9B,CAAA;AAiBD,eAAO,MAAM,cAAc,EAAE,KAoB5B,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAoB3B,CAAA"}
@@ -18,7 +18,10 @@ const colorFieldKeys = [
18
18
  'destructiveForeground',
19
19
  'border',
20
20
  'input',
21
- 'ring'
21
+ 'ring',
22
+ 'gradientFrom',
23
+ 'gradientVia',
24
+ 'gradientTo'
22
25
  ];
23
26
  const colorFieldDefinitions = [
24
27
  {
@@ -229,6 +232,39 @@ const colorFieldDefinitions = [
229
232
  en: 'Focus ring color',
230
233
  cs: 'Barva focus prstence'
231
234
  }
235
+ },
236
+ {
237
+ name: 'gradientFrom',
238
+ label: {
239
+ en: 'Gradient · From',
240
+ cs: 'Gradient · Od'
241
+ },
242
+ description: {
243
+ en: 'Start colour of the brand gradient (--gradient-from)',
244
+ cs: 'Počáteční barva brandového gradientu (--gradient-from)'
245
+ }
246
+ },
247
+ {
248
+ name: 'gradientVia',
249
+ label: {
250
+ en: 'Gradient · Via',
251
+ cs: 'Gradient · Přes'
252
+ },
253
+ description: {
254
+ en: 'Optional middle colour of the brand gradient (--gradient-via)',
255
+ cs: 'Volitelná prostřední barva gradientu (--gradient-via)'
256
+ }
257
+ },
258
+ {
259
+ name: 'gradientTo',
260
+ label: {
261
+ en: 'Gradient · To',
262
+ cs: 'Gradient · Do'
263
+ },
264
+ description: {
265
+ en: 'End colour of the brand gradient (--gradient-to)',
266
+ cs: 'Koncová barva brandového gradientu (--gradient-to)'
267
+ }
232
268
  }
233
269
  ];
234
270
  // Light Mode Default Colors (Shadcn UI inspired defaults)
@@ -251,7 +287,10 @@ export const lightModeDefaults = {
251
287
  destructiveForeground: '#fafafa',
252
288
  border: '#e4e4e7',
253
289
  input: '#e4e4e7',
254
- ring: '#18181b'
290
+ ring: '#18181b',
291
+ gradientFrom: '#9372f7',
292
+ gradientVia: '#7c6ff0',
293
+ gradientTo: '#22d3ee'
255
294
  };
256
295
  // Dark Mode Default Colors (Shadcn UI inspired defaults)
257
296
  export const darkModeDefaults = {
@@ -273,7 +312,10 @@ export const darkModeDefaults = {
273
312
  destructiveForeground: '#fafafa',
274
313
  border: '#27272a',
275
314
  input: '#27272a',
276
- ring: '#d4d4d8'
315
+ ring: '#d4d4d8',
316
+ gradientFrom: '#9372f7',
317
+ gradientVia: '#7c6ff0',
318
+ gradientTo: '#22d3ee'
277
319
  };
278
320
  function createColorFields(defaults) {
279
321
  return colorFieldDefinitions.map(({ name, label, description })=>({
@@ -292,8 +334,8 @@ function createColorFields(defaults) {
292
334
  export const lightModeField = {
293
335
  type: 'collapsible',
294
336
  label: {
295
- en: '☀️ Light Mode Colors',
296
- cs: '☀️ Barvy světlého režimu'
337
+ en: 'Light Mode Colors',
338
+ cs: 'Barvy světlého režimu'
297
339
  },
298
340
  admin: {
299
341
  initCollapsed: true,
@@ -313,8 +355,8 @@ export const lightModeField = {
313
355
  export const darkModeField = {
314
356
  type: 'collapsible',
315
357
  label: {
316
- en: '🌙 Dark Mode Colors',
317
- cs: '🌙 Barvy tmavého režimu'
358
+ en: 'Dark Mode Colors',
359
+ cs: 'Barvy tmavého režimu'
318
360
  },
319
361
  admin: {
320
362
  initCollapsed: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/colorModeFields.ts"],"sourcesContent":["import type { Field } from 'payload'\n\nconst themeColorPickerComponentPath = '@kilivi/payloadcms-theme-management/fields/ThemeColorPickerField'\n\ntype LocalizedText = Record<string, string>\n\nconst colorFieldKeys = [\n 'background',\n 'foreground',\n 'primary',\n 'primaryForeground',\n 'card',\n 'cardForeground',\n 'popover',\n 'popoverForeground',\n 'secondary',\n 'secondaryForeground',\n 'muted',\n 'mutedForeground',\n 'accent',\n 'accentForeground',\n 'destructive',\n 'destructiveForeground',\n 'border',\n 'input',\n 'ring',\n] as const\n\ntype ColorToken = (typeof colorFieldKeys)[number]\n\ninterface ColorFieldDefinition {\n name: ColorToken\n label: LocalizedText\n description: LocalizedText\n}\n\ntype ColorPalette = Record<ColorToken, string>\n\nconst colorFieldDefinitions: ColorFieldDefinition[] = [\n {\n name: 'background',\n label: { en: 'Background', cs: 'Pozadí' },\n description: { en: 'Main background color', cs: 'Hlavní barva pozadí' },\n },\n {\n name: 'foreground',\n label: { en: 'Foreground', cs: 'Popředí' },\n description: { en: 'Main text color', cs: 'Hlavní barva textu' },\n },\n {\n name: 'primary',\n label: { en: 'Primary', cs: 'Primární' },\n description: {\n en: 'Primary brand color for buttons, links',\n cs: 'Primární barva značky pro tlačítka, odkazy',\n },\n },\n {\n name: 'primaryForeground',\n label: { en: 'Primary Foreground', cs: 'Primární popředí' },\n description: {\n en: 'Text color on primary background',\n cs: 'Barva textu na primárním pozadí',\n },\n },\n {\n name: 'card',\n label: { en: 'Card', cs: 'Karta' },\n description: { en: 'Card background color', cs: 'Barva pozadí karty' },\n },\n {\n name: 'cardForeground',\n label: { en: 'Card Foreground', cs: 'Karta popředí' },\n description: {\n en: 'Text color on card background',\n cs: 'Barva textu na pozadí karty',\n },\n },\n {\n name: 'popover',\n label: { en: 'Popover', cs: 'Popover' },\n description: { en: 'Popover background color', cs: 'Barva pozadí popoveru' },\n },\n {\n name: 'popoverForeground',\n label: { en: 'Popover Foreground', cs: 'Popover popředí' },\n description: {\n en: 'Text color on popover background',\n cs: 'Barva textu na pozadí popoveru',\n },\n },\n {\n name: 'secondary',\n label: { en: 'Secondary', cs: 'Sekundární' },\n description: { en: 'Secondary UI elements', cs: 'Sekundární UI prvky' },\n },\n {\n name: 'secondaryForeground',\n label: { en: 'Secondary Foreground', cs: 'Sekundární popředí' },\n description: {\n en: 'Text color on secondary background',\n cs: 'Barva textu na sekundárním pozadí',\n },\n },\n {\n name: 'muted',\n label: { en: 'Muted', cs: 'Ztlumený' },\n description: { en: 'Muted backgrounds', cs: 'Ztlumená pozadí' },\n },\n {\n name: 'mutedForeground',\n label: { en: 'Muted Foreground', cs: 'Ztlumené popředí' },\n description: { en: 'Muted text color', cs: 'Ztlumená barva textu' },\n },\n {\n name: 'accent',\n label: { en: 'Accent', cs: 'Akcent' },\n description: { en: 'Accent color for highlights', cs: 'Akcentová barva pro zvýraznění' },\n },\n {\n name: 'accentForeground',\n label: { en: 'Accent Foreground', cs: 'Akcent popředí' },\n description: {\n en: 'Text color on accent background',\n cs: 'Barva textu na akcentovém pozadí',\n },\n },\n {\n name: 'destructive',\n label: { en: 'Destructive', cs: 'Destruktivní' },\n description: { en: 'Error and destructive actions', cs: 'Chyby a destruktivní akce' },\n },\n {\n name: 'destructiveForeground',\n label: { en: 'Destructive Foreground', cs: 'Destruktivní popředí' },\n description: {\n en: 'Text color on destructive background',\n cs: 'Barva textu na destruktivním pozadí',\n },\n },\n {\n name: 'border',\n label: { en: 'Border', cs: 'Okraj' },\n description: { en: 'Border color', cs: 'Barva okraje' },\n },\n {\n name: 'input',\n label: { en: 'Input', cs: 'Vstup' },\n description: { en: 'Input border color', cs: 'Barva okraje vstupů' },\n },\n {\n name: 'ring',\n label: { en: 'Ring', cs: 'Prstenec' },\n description: { en: 'Focus ring color', cs: 'Barva focus prstence' },\n },\n]\n\n// Light Mode Default Colors (Shadcn UI inspired defaults)\nexport const lightModeDefaults: ColorPalette = {\n background: '#ffffff',\n foreground: '#0a0a0a',\n card: '#ffffff',\n cardForeground: '#0a0a0a',\n popover: '#ffffff',\n popoverForeground: '#0a0a0a',\n primary: '#9372f7',\n primaryForeground: '#fafafa',\n secondary: '#f4f4f5',\n secondaryForeground: '#18181b',\n muted: '#f4f4f5',\n mutedForeground: '#71717a',\n accent: '#f4f4f5',\n accentForeground: '#18181b',\n destructive: '#ef4444',\n destructiveForeground: '#fafafa',\n border: '#e4e4e7',\n input: '#e4e4e7',\n ring: '#18181b',\n}\n\n// Dark Mode Default Colors (Shadcn UI inspired defaults)\nexport const darkModeDefaults: ColorPalette = {\n background: '#0a0a0a',\n foreground: '#fafafa',\n card: '#09090b',\n cardForeground: '#fafafa',\n popover: '#09090b',\n popoverForeground: '#fafafa',\n primary: '#9372f7',\n primaryForeground: '#09090b',\n secondary: '#27272a',\n secondaryForeground: '#fafafa',\n muted: '#27272a',\n mutedForeground: '#a1a1aa',\n accent: '#27272a',\n accentForeground: '#fafafa',\n destructive: '#7f1d1d',\n destructiveForeground: '#fafafa',\n border: '#27272a',\n input: '#27272a',\n ring: '#d4d4d8',\n}\n\nfunction createColorFields(defaults: ColorPalette): Field[] {\n return colorFieldDefinitions.map(({ name, label, description }) => ({\n name,\n type: 'text',\n label,\n defaultValue: defaults[name],\n admin: {\n components: {\n Field: themeColorPickerComponentPath,\n },\n description,\n },\n }))\n}\n\nexport const lightModeField: Field = {\n type: 'collapsible',\n label: {\n en: '☀️ Light Mode Colors',\n cs: '☀️ Barvy světlého režimu',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Configure colors for light mode',\n cs: 'Nakonfigurujte barvy pro světlý režim',\n },\n },\n fields: [\n {\n name: 'lightMode',\n type: 'group',\n fields: createColorFields(lightModeDefaults),\n },\n ],\n}\n\nexport const darkModeField: Field = {\n type: 'collapsible',\n label: {\n en: '🌙 Dark Mode Colors',\n cs: '🌙 Barvy tmavého režimu',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Configure colors for dark mode',\n cs: 'Nakonfigurujte barvy pro tmavý režim',\n },\n },\n fields: [\n {\n name: 'darkMode',\n type: 'group',\n fields: createColorFields(darkModeDefaults),\n },\n ],\n}\n"],"names":["themeColorPickerComponentPath","colorFieldKeys","colorFieldDefinitions","name","label","en","cs","description","lightModeDefaults","background","foreground","card","cardForeground","popover","popoverForeground","primary","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accent","accentForeground","destructive","destructiveForeground","border","input","ring","darkModeDefaults","createColorFields","defaults","map","type","defaultValue","admin","components","Field","lightModeField","initCollapsed","fields","darkModeField"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/fields/colorModeFields.ts"],"sourcesContent":["import type { Field } from 'payload'\n\nconst themeColorPickerComponentPath =\n '@kilivi/payloadcms-theme-management/fields/ThemeColorPickerField'\n\ntype LocalizedText = Record<string, string>\n\nconst colorFieldKeys = [\n 'background',\n 'foreground',\n 'primary',\n 'primaryForeground',\n 'card',\n 'cardForeground',\n 'popover',\n 'popoverForeground',\n 'secondary',\n 'secondaryForeground',\n 'muted',\n 'mutedForeground',\n 'accent',\n 'accentForeground',\n 'destructive',\n 'destructiveForeground',\n 'border',\n 'input',\n 'ring',\n 'gradientFrom',\n 'gradientVia',\n 'gradientTo',\n] as const\n\ntype ColorToken = (typeof colorFieldKeys)[number]\n\ninterface ColorFieldDefinition {\n name: ColorToken\n label: LocalizedText\n description: LocalizedText\n}\n\ntype ColorPalette = Record<ColorToken, string>\n\nconst colorFieldDefinitions: ColorFieldDefinition[] = [\n {\n name: 'background',\n label: { en: 'Background', cs: 'Pozadí' },\n description: { en: 'Main background color', cs: 'Hlavní barva pozadí' },\n },\n {\n name: 'foreground',\n label: { en: 'Foreground', cs: 'Popředí' },\n description: { en: 'Main text color', cs: 'Hlavní barva textu' },\n },\n {\n name: 'primary',\n label: { en: 'Primary', cs: 'Primární' },\n description: {\n en: 'Primary brand color for buttons, links',\n cs: 'Primární barva značky pro tlačítka, odkazy',\n },\n },\n {\n name: 'primaryForeground',\n label: { en: 'Primary Foreground', cs: 'Primární popředí' },\n description: {\n en: 'Text color on primary background',\n cs: 'Barva textu na primárním pozadí',\n },\n },\n {\n name: 'card',\n label: { en: 'Card', cs: 'Karta' },\n description: { en: 'Card background color', cs: 'Barva pozadí karty' },\n },\n {\n name: 'cardForeground',\n label: { en: 'Card Foreground', cs: 'Karta popředí' },\n description: {\n en: 'Text color on card background',\n cs: 'Barva textu na pozadí karty',\n },\n },\n {\n name: 'popover',\n label: { en: 'Popover', cs: 'Popover' },\n description: { en: 'Popover background color', cs: 'Barva pozadí popoveru' },\n },\n {\n name: 'popoverForeground',\n label: { en: 'Popover Foreground', cs: 'Popover popředí' },\n description: {\n en: 'Text color on popover background',\n cs: 'Barva textu na pozadí popoveru',\n },\n },\n {\n name: 'secondary',\n label: { en: 'Secondary', cs: 'Sekundární' },\n description: { en: 'Secondary UI elements', cs: 'Sekundární UI prvky' },\n },\n {\n name: 'secondaryForeground',\n label: { en: 'Secondary Foreground', cs: 'Sekundární popředí' },\n description: {\n en: 'Text color on secondary background',\n cs: 'Barva textu na sekundárním pozadí',\n },\n },\n {\n name: 'muted',\n label: { en: 'Muted', cs: 'Ztlumený' },\n description: { en: 'Muted backgrounds', cs: 'Ztlumená pozadí' },\n },\n {\n name: 'mutedForeground',\n label: { en: 'Muted Foreground', cs: 'Ztlumené popředí' },\n description: { en: 'Muted text color', cs: 'Ztlumená barva textu' },\n },\n {\n name: 'accent',\n label: { en: 'Accent', cs: 'Akcent' },\n description: { en: 'Accent color for highlights', cs: 'Akcentová barva pro zvýraznění' },\n },\n {\n name: 'accentForeground',\n label: { en: 'Accent Foreground', cs: 'Akcent popředí' },\n description: {\n en: 'Text color on accent background',\n cs: 'Barva textu na akcentovém pozadí',\n },\n },\n {\n name: 'destructive',\n label: { en: 'Destructive', cs: 'Destruktivní' },\n description: { en: 'Error and destructive actions', cs: 'Chyby a destruktivní akce' },\n },\n {\n name: 'destructiveForeground',\n label: { en: 'Destructive Foreground', cs: 'Destruktivní popředí' },\n description: {\n en: 'Text color on destructive background',\n cs: 'Barva textu na destruktivním pozadí',\n },\n },\n {\n name: 'border',\n label: { en: 'Border', cs: 'Okraj' },\n description: { en: 'Border color', cs: 'Barva okraje' },\n },\n {\n name: 'input',\n label: { en: 'Input', cs: 'Vstup' },\n description: { en: 'Input border color', cs: 'Barva okraje vstupů' },\n },\n {\n name: 'ring',\n label: { en: 'Ring', cs: 'Prstenec' },\n description: { en: 'Focus ring color', cs: 'Barva focus prstence' },\n },\n {\n name: 'gradientFrom',\n label: { en: 'Gradient · From', cs: 'Gradient · Od' },\n description: {\n en: 'Start colour of the brand gradient (--gradient-from)',\n cs: 'Počáteční barva brandového gradientu (--gradient-from)',\n },\n },\n {\n name: 'gradientVia',\n label: { en: 'Gradient · Via', cs: 'Gradient · Přes' },\n description: {\n en: 'Optional middle colour of the brand gradient (--gradient-via)',\n cs: 'Volitelná prostřední barva gradientu (--gradient-via)',\n },\n },\n {\n name: 'gradientTo',\n label: { en: 'Gradient · To', cs: 'Gradient · Do' },\n description: {\n en: 'End colour of the brand gradient (--gradient-to)',\n cs: 'Koncová barva brandového gradientu (--gradient-to)',\n },\n },\n]\n\n// Light Mode Default Colors (Shadcn UI inspired defaults)\nexport const lightModeDefaults: ColorPalette = {\n background: '#ffffff',\n foreground: '#0a0a0a',\n card: '#ffffff',\n cardForeground: '#0a0a0a',\n popover: '#ffffff',\n popoverForeground: '#0a0a0a',\n primary: '#9372f7',\n primaryForeground: '#fafafa',\n secondary: '#f4f4f5',\n secondaryForeground: '#18181b',\n muted: '#f4f4f5',\n mutedForeground: '#71717a',\n accent: '#f4f4f5',\n accentForeground: '#18181b',\n destructive: '#ef4444',\n destructiveForeground: '#fafafa',\n border: '#e4e4e7',\n input: '#e4e4e7',\n ring: '#18181b',\n gradientFrom: '#9372f7',\n gradientVia: '#7c6ff0',\n gradientTo: '#22d3ee',\n}\n\n// Dark Mode Default Colors (Shadcn UI inspired defaults)\nexport const darkModeDefaults: ColorPalette = {\n background: '#0a0a0a',\n foreground: '#fafafa',\n card: '#09090b',\n cardForeground: '#fafafa',\n popover: '#09090b',\n popoverForeground: '#fafafa',\n primary: '#9372f7',\n primaryForeground: '#09090b',\n secondary: '#27272a',\n secondaryForeground: '#fafafa',\n muted: '#27272a',\n mutedForeground: '#a1a1aa',\n accent: '#27272a',\n accentForeground: '#fafafa',\n destructive: '#7f1d1d',\n destructiveForeground: '#fafafa',\n border: '#27272a',\n input: '#27272a',\n ring: '#d4d4d8',\n gradientFrom: '#9372f7',\n gradientVia: '#7c6ff0',\n gradientTo: '#22d3ee',\n}\n\nfunction createColorFields(defaults: ColorPalette): Field[] {\n return colorFieldDefinitions.map(({ name, label, description }) => ({\n name,\n type: 'text',\n label,\n defaultValue: defaults[name],\n admin: {\n components: {\n Field: themeColorPickerComponentPath,\n },\n description,\n },\n }))\n}\n\nexport const lightModeField: Field = {\n type: 'collapsible',\n label: {\n en: 'Light Mode Colors',\n cs: 'Barvy světlého režimu',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Configure colors for light mode',\n cs: 'Nakonfigurujte barvy pro světlý režim',\n },\n },\n fields: [\n {\n name: 'lightMode',\n type: 'group',\n fields: createColorFields(lightModeDefaults),\n },\n ],\n}\n\nexport const darkModeField: Field = {\n type: 'collapsible',\n label: {\n en: 'Dark Mode Colors',\n cs: 'Barvy tmavého režimu',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Configure colors for dark mode',\n cs: 'Nakonfigurujte barvy pro tmavý režim',\n },\n },\n fields: [\n {\n name: 'darkMode',\n type: 'group',\n fields: createColorFields(darkModeDefaults),\n },\n ],\n}\n"],"names":["themeColorPickerComponentPath","colorFieldKeys","colorFieldDefinitions","name","label","en","cs","description","lightModeDefaults","background","foreground","card","cardForeground","popover","popoverForeground","primary","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accent","accentForeground","destructive","destructiveForeground","border","input","ring","gradientFrom","gradientVia","gradientTo","darkModeDefaults","createColorFields","defaults","map","type","defaultValue","admin","components","Field","lightModeField","initCollapsed","fields","darkModeField"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { TabsField } from 'payload';
1
+ import type { Field, TabsField } from 'payload';
2
2
  import type { ThemePreset } from '../index.js';
3
3
  interface ThemeConfigurationFieldOptions {
4
4
  themePresets: ThemePreset[];
@@ -8,6 +8,13 @@ interface ThemeConfigurationFieldOptions {
8
8
  includeBrandIdentity: boolean;
9
9
  enableAdvancedFeatures?: boolean;
10
10
  useThemePreviewField?: boolean;
11
+ customThemeConfigurationFields?: Field[];
12
+ customThemeConfigurationSections?: Array<{
13
+ label: string | Record<string, string>;
14
+ fields: Field[];
15
+ initCollapsed?: boolean;
16
+ description?: string | Record<string, string>;
17
+ }>;
11
18
  }
12
19
  export type ThemeTab = NonNullable<TabsField['tabs']>[number];
13
20
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"themeConfigurationField.d.ts","sourceRoot":"","sources":["../../src/fields/themeConfigurationField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,SAAS,EAAE,MAAM,SAAS,CAAA;AAO/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,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;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AASD,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,8BAA8B,GAAG,QAAQ,CA+a/F"}
1
+ {"version":3,"file":"themeConfigurationField.d.ts","sourceRoot":"","sources":["../../src/fields/themeConfigurationField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAO/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C,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;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,8BAA8B,CAAC,EAAE,KAAK,EAAE,CAAA;IACxC,gCAAgC,CAAC,EAAE,KAAK,CAAC;QACvC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACtC,MAAM,EAAE,KAAK,EAAE,CAAA;QACf,aAAa,CAAC,EAAE,OAAO,CAAA;QACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAC9C,CAAC,CAAA;CACH;AASD,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,8BAA8B,GAAG,QAAQ,CAu/B/F"}