@kilivi/payloadcms-theme-management 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +97 -0
  2. package/dist/components/ServerThemeInjector.d.ts +11 -0
  3. package/dist/components/ServerThemeInjector.d.ts.map +1 -0
  4. package/dist/components/ServerThemeInjector.js +73 -0
  5. package/dist/components/ServerThemeInjector.js.map +1 -0
  6. package/dist/components/ThemePreview.d.ts +2 -0
  7. package/dist/components/ThemePreview.d.ts.map +1 -0
  8. package/dist/components/ThemePreview.js +153 -0
  9. package/dist/components/ThemePreview.js.map +1 -0
  10. package/dist/components/typographyPreviewUtils.d.ts +18 -0
  11. package/dist/components/typographyPreviewUtils.d.ts.map +1 -0
  12. package/dist/components/typographyPreviewUtils.js +80 -0
  13. package/dist/components/typographyPreviewUtils.js.map +1 -0
  14. package/dist/constants/themeFonts.d.ts +75 -0
  15. package/dist/constants/themeFonts.d.ts.map +1 -0
  16. package/dist/constants/themeFonts.js +45 -0
  17. package/dist/constants/themeFonts.js.map +1 -0
  18. package/dist/fields/ColorPickerField.d.ts +3 -0
  19. package/dist/fields/ColorPickerField.d.ts.map +1 -0
  20. package/dist/fields/ColorPickerField.js +153 -0
  21. package/dist/fields/ColorPickerField.js.map +1 -0
  22. package/dist/fields/RadiusField.d.ts +3 -0
  23. package/dist/fields/RadiusField.d.ts.map +1 -0
  24. package/dist/fields/RadiusField.js +91 -0
  25. package/dist/fields/RadiusField.js.map +1 -0
  26. package/dist/fields/ThemeColorPickerField.d.ts +5 -0
  27. package/dist/fields/ThemeColorPickerField.d.ts.map +1 -0
  28. package/dist/fields/ThemeColorPickerField.js +84 -0
  29. package/dist/fields/ThemeColorPickerField.js.map +1 -0
  30. package/dist/fields/ThemePreviewField.d.ts +3 -0
  31. package/dist/fields/ThemePreviewField.d.ts.map +1 -0
  32. package/dist/fields/ThemePreviewField.js +336 -0
  33. package/dist/fields/ThemePreviewField.js.map +1 -0
  34. package/dist/fields/ThemeTokenSelectField.d.ts +3 -0
  35. package/dist/fields/ThemeTokenSelectField.d.ts.map +1 -0
  36. package/dist/fields/ThemeTokenSelectField.js +128 -0
  37. package/dist/fields/ThemeTokenSelectField.js.map +1 -0
  38. package/dist/fields/colorModeFields.d.ts +10 -0
  39. package/dist/fields/colorModeFields.d.ts.map +1 -0
  40. package/dist/fields/colorModeFields.js +241 -0
  41. package/dist/fields/colorModeFields.js.map +1 -0
  42. package/dist/fields/themeConfigurationField.d.ts +17 -0
  43. package/dist/fields/themeConfigurationField.d.ts.map +1 -0
  44. package/dist/fields/themeConfigurationField.js +389 -0
  45. package/dist/fields/themeConfigurationField.js.map +1 -0
  46. package/dist/index.d.ts +20 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +109 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/payload-types.d.ts +83 -0
  51. package/dist/payload-types.d.ts.map +1 -0
  52. package/dist/payload-types.js +6 -0
  53. package/dist/payload-types.js.map +1 -0
  54. package/dist/plugin.d.ts +3 -0
  55. package/dist/plugin.d.ts.map +1 -0
  56. package/dist/plugin.js +2 -0
  57. package/dist/plugin.js.map +1 -0
  58. package/dist/presets.d.ts +43 -0
  59. package/dist/presets.d.ts.map +1 -0
  60. package/dist/presets.js +580 -0
  61. package/dist/presets.js.map +1 -0
  62. package/dist/providers/Theme/themeConfig.d.ts +4 -0
  63. package/dist/providers/Theme/themeConfig.d.ts.map +1 -0
  64. package/dist/providers/Theme/themeConfig.js +66 -0
  65. package/dist/providers/Theme/themeConfig.js.map +1 -0
  66. package/dist/providers/Theme/types.d.ts +16 -0
  67. package/dist/providers/Theme/types.d.ts.map +1 -0
  68. package/dist/providers/Theme/types.js +14 -0
  69. package/dist/providers/Theme/types.js.map +1 -0
  70. package/dist/server.d.ts +3 -0
  71. package/dist/server.d.ts.map +1 -0
  72. package/dist/server.js +3 -0
  73. package/dist/server.js.map +1 -0
  74. package/dist/types.d.ts +36 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +2 -0
  77. package/dist/types.js.map +1 -0
  78. package/dist/utils/resolveThemeConfiguration.d.ts +40 -0
  79. package/dist/utils/resolveThemeConfiguration.d.ts.map +1 -0
  80. package/dist/utils/resolveThemeConfiguration.js +148 -0
  81. package/dist/utils/resolveThemeConfiguration.js.map +1 -0
  82. package/dist/utils/themeAssets.d.ts +6 -0
  83. package/dist/utils/themeAssets.d.ts.map +1 -0
  84. package/dist/utils/themeAssets.js +67 -0
  85. package/dist/utils/themeAssets.js.map +1 -0
  86. package/dist/utils/themeColors.d.ts +36 -0
  87. package/dist/utils/themeColors.d.ts.map +1 -0
  88. package/dist/utils/themeColors.js +111 -0
  89. package/dist/utils/themeColors.js.map +1 -0
  90. package/dist/utils/themeUtils.d.ts +16 -0
  91. package/dist/utils/themeUtils.d.ts.map +1 -0
  92. package/dist/utils/themeUtils.js +260 -0
  93. package/dist/utils/themeUtils.js.map +1 -0
  94. package/package.json +68 -0
@@ -0,0 +1,336 @@
1
+ 'use client';
2
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
3
+ import { useField, useForm, useFormFields } from '@payloadcms/ui';
4
+ import { useCallback, useEffect, useMemo, useRef } from 'react';
5
+ import { borderRadiusPresets } from '@/providers/Theme/themeConfig';
6
+ import { resolveTypographyPreview } from '../components/typographyPreviewUtils';
7
+ import { defaultThemePresets } from '../index';
8
+ import { darkModeDefaults, lightModeDefaults } from './colorModeFields';
9
+ const FALLBACK_THEME = defaultThemePresets[0]?.name ?? 'cool';
10
+ const themePresets = defaultThemePresets.reduce((acc, preset) => {
11
+ acc[preset.name] = {
12
+ label: preset.label,
13
+ lightMode: { ...lightModeDefaults, ...(preset.lightMode ?? {}) },
14
+ darkMode: { ...darkModeDefaults, ...(preset.darkMode ?? {}) },
15
+ typography: preset.typography,
16
+ borderRadius: preset.borderRadius,
17
+ };
18
+ return acc;
19
+ }, {});
20
+ const colorKeys = Object.keys(lightModeDefaults);
21
+ function ModePreview({ icon, title, colors, typography, radius }) {
22
+ const background = colors.background ?? '#ffffff';
23
+ const foreground = colors.foreground ?? '#0a0a0a';
24
+ const borderColor = colors.border ?? 'rgba(148, 163, 184, 0.35)';
25
+ const cardBackground = colors.card ?? background;
26
+ const cardForeground = colors.cardForeground ?? foreground;
27
+ const primary = colors.primary ?? foreground;
28
+ const primaryForeground = colors.primaryForeground ?? background;
29
+ const secondary = colors.secondary ?? '#f4f4f5';
30
+ const secondaryForeground = colors.secondaryForeground ?? foreground;
31
+ const muted = colors.muted ?? secondary;
32
+ const mutedForeground = colors.mutedForeground ?? secondaryForeground;
33
+ const accent = colors.accent ?? secondary;
34
+ const accentForeground = colors.accentForeground ?? secondaryForeground;
35
+ const headingFont = typography.headingFont;
36
+ const bodyFont = typography.bodyFont;
37
+ const baseFontSize = typography.baseFontSize;
38
+ const lineHeight = typography.lineHeight;
39
+ return (_jsxs("div", { style: {
40
+ display: 'grid',
41
+ gap: '16px',
42
+ padding: '18px',
43
+ borderRadius: '12px',
44
+ backgroundColor: background,
45
+ color: foreground,
46
+ border: `1px solid ${borderColor}`,
47
+ boxShadow: '0 8px 20px rgba(15, 23, 42, 0.08)',
48
+ fontFamily: bodyFont,
49
+ }, children: [_jsxs("div", { style: {
50
+ display: 'flex',
51
+ alignItems: 'center',
52
+ justifyContent: 'space-between',
53
+ fontSize: '12px',
54
+ fontWeight: 600,
55
+ letterSpacing: '0.08em',
56
+ textTransform: 'uppercase',
57
+ opacity: 0.7,
58
+ }, children: [_jsxs("span", { children: [icon, " ", title] }), _jsx("span", { style: { fontFamily: 'monospace', fontSize: '11px' }, children: background.toUpperCase() })] }), _jsxs("div", { style: {
59
+ backgroundColor: cardBackground,
60
+ color: cardForeground,
61
+ borderRadius: radius.card,
62
+ border: `1px solid ${borderColor}`,
63
+ padding: '16px',
64
+ display: 'flex',
65
+ gap: '12px',
66
+ flexWrap: 'wrap',
67
+ }, children: [_jsx("button", { type: "button", style: {
68
+ padding: '10px 18px',
69
+ borderRadius: radius.pill,
70
+ border: 'none',
71
+ cursor: 'pointer',
72
+ fontSize: '12px',
73
+ fontWeight: 600,
74
+ letterSpacing: '0.02em',
75
+ backgroundColor: primary,
76
+ color: primaryForeground,
77
+ boxShadow: '0 6px 14px rgba(15, 23, 42, 0.15)',
78
+ }, children: "Primary Action" }), _jsx("button", { type: "button", style: {
79
+ padding: '10px 18px',
80
+ borderRadius: radius.chip,
81
+ border: '1px solid transparent',
82
+ cursor: 'pointer',
83
+ fontSize: '12px',
84
+ fontWeight: 600,
85
+ letterSpacing: '0.02em',
86
+ backgroundColor: secondary,
87
+ color: secondaryForeground,
88
+ boxShadow: 'inset 0 0 0 1px rgba(15, 23, 42, 0.08)',
89
+ }, children: "Secondary" })] }), _jsxs("div", { style: {
90
+ display: 'grid',
91
+ gridTemplateColumns: 'repeat(auto-fit, minmax(120px, 1fr))',
92
+ gap: '10px',
93
+ }, children: [_jsx("div", { style: {
94
+ borderRadius: radius.chip,
95
+ padding: '10px 12px',
96
+ fontSize: '12px',
97
+ fontWeight: 500,
98
+ backgroundColor: muted,
99
+ color: mutedForeground,
100
+ }, children: "Muted Card" }), _jsx("div", { style: {
101
+ borderRadius: radius.chip,
102
+ padding: '10px 12px',
103
+ fontSize: '12px',
104
+ fontWeight: 500,
105
+ backgroundColor: accent,
106
+ color: accentForeground,
107
+ }, children: "Accent Tag" })] }), _jsxs("div", { style: {
108
+ display: 'grid',
109
+ gap: '8px',
110
+ borderRadius: '10px',
111
+ border: `1px dashed ${borderColor}`,
112
+ padding: '14px',
113
+ backgroundColor: 'rgba(148, 163, 184, 0.08)',
114
+ }, children: [_jsx("div", { style: {
115
+ fontFamily: headingFont,
116
+ fontSize: 'clamp(24px, 3vw, 32px)',
117
+ fontWeight: 600,
118
+ lineHeight: 1.2,
119
+ }, children: "Nadpis / Heading preview" }), _jsx("p", { style: {
120
+ margin: 0,
121
+ fontFamily: bodyFont,
122
+ fontSize: baseFontSize,
123
+ lineHeight,
124
+ color: foreground,
125
+ opacity: 0.85,
126
+ }, children: "Sphinx of black quartz, judge my vow. P\u0159\u00EDli\u0161 \u017Elu\u0165ou\u010Dk\u00FD k\u016F\u0148 \u00FAp\u011Bl \u010F\u00E1belsk\u00E9 \u00F3dy." }), _jsxs("div", { style: {
127
+ display: 'flex',
128
+ flexWrap: 'wrap',
129
+ gap: '10px',
130
+ fontSize: '11px',
131
+ color: 'rgba(15, 23, 42, 0.7)',
132
+ }, children: [_jsxs("span", { children: ["Body: ", typography.bodyLabel] }), _jsxs("span", { children: ["Heading: ", typography.headingLabel] }), _jsxs("span", { children: ["Base size: ", baseFontSize] }), _jsxs("span", { children: ["Line height: ", lineHeight] })] })] })] }));
133
+ }
134
+ export default function ThemePreviewField(props) {
135
+ const { field, path } = props;
136
+ const { value: selectedTheme, setValue } = useField({ path });
137
+ const { dispatchFields } = useForm();
138
+ const formFields = useFormFields(([formState]) => formState);
139
+ const hasAppliedInitialPresetRef = useRef(false);
140
+ const applyPreset = useCallback((presetName) => {
141
+ const preset = themePresets[presetName];
142
+ if (!preset) {
143
+ return;
144
+ }
145
+ colorKeys.forEach((key) => {
146
+ const lightValue = preset.lightMode[key];
147
+ const darkValue = preset.darkMode[key];
148
+ if (lightValue) {
149
+ dispatchFields({
150
+ type: 'UPDATE',
151
+ path: `themeConfiguration.lightMode.${key}`,
152
+ value: lightValue,
153
+ });
154
+ }
155
+ if (darkValue) {
156
+ dispatchFields({
157
+ type: 'UPDATE',
158
+ path: `themeConfiguration.darkMode.${key}`,
159
+ value: darkValue,
160
+ });
161
+ }
162
+ });
163
+ }, [dispatchFields]);
164
+ const handleThemeChange = useCallback((event) => {
165
+ const value = event.target.value;
166
+ setValue(value);
167
+ if (!value) {
168
+ return;
169
+ }
170
+ hasAppliedInitialPresetRef.current = true;
171
+ applyPreset(value);
172
+ }, [applyPreset, setValue]);
173
+ useEffect(() => {
174
+ if (!selectedTheme) {
175
+ return;
176
+ }
177
+ if (themePresets[selectedTheme]) {
178
+ return;
179
+ }
180
+ hasAppliedInitialPresetRef.current = false;
181
+ setValue(FALLBACK_THEME);
182
+ }, [selectedTheme, setValue]);
183
+ useEffect(() => {
184
+ if (hasAppliedInitialPresetRef.current) {
185
+ return;
186
+ }
187
+ if (!selectedTheme) {
188
+ return;
189
+ }
190
+ if (!formFields) {
191
+ return;
192
+ }
193
+ const preset = themePresets[selectedTheme];
194
+ if (!preset) {
195
+ hasAppliedInitialPresetRef.current = true;
196
+ return;
197
+ }
198
+ const hasExistingValues = colorKeys.some((key) => {
199
+ const lightField = formFields[`themeConfiguration.lightMode.${key}`];
200
+ const darkField = formFields[`themeConfiguration.darkMode.${key}`];
201
+ const lightValue = typeof lightField?.value === 'string' && lightField.value.trim().length > 0;
202
+ const darkValue = typeof darkField?.value === 'string' && darkField.value.trim().length > 0;
203
+ return lightValue || darkValue;
204
+ });
205
+ if (hasExistingValues) {
206
+ hasAppliedInitialPresetRef.current = true;
207
+ return;
208
+ }
209
+ applyPreset(selectedTheme);
210
+ hasAppliedInitialPresetRef.current = true;
211
+ }, [selectedTheme, formFields, applyPreset]);
212
+ const lightModeColors = useMemo(() => {
213
+ const presetLightMode = selectedTheme ? themePresets[selectedTheme]?.lightMode : undefined;
214
+ return colorKeys.reduce((acc, key) => {
215
+ const fieldState = formFields?.[`themeConfiguration.lightMode.${key}`];
216
+ const rawValue = typeof fieldState?.value === 'string' && fieldState.value.trim().length > 0
217
+ ? fieldState.value
218
+ : undefined;
219
+ acc[key] = rawValue ?? presetLightMode?.[key] ?? lightModeDefaults[key];
220
+ return acc;
221
+ }, {});
222
+ }, [formFields, selectedTheme]);
223
+ const darkModeColors = useMemo(() => {
224
+ const presetDarkMode = selectedTheme ? themePresets[selectedTheme]?.darkMode : undefined;
225
+ return colorKeys.reduce((acc, key) => {
226
+ const fieldState = formFields?.[`themeConfiguration.darkMode.${key}`];
227
+ const rawValue = typeof fieldState?.value === 'string' && fieldState.value.trim().length > 0
228
+ ? fieldState.value
229
+ : undefined;
230
+ acc[key] = rawValue ?? presetDarkMode?.[key] ?? darkModeDefaults[key];
231
+ return acc;
232
+ }, {});
233
+ }, [formFields, selectedTheme]);
234
+ const activePreset = selectedTheme ? themePresets[selectedTheme] : undefined;
235
+ const formTypographySelection = useMemo(() => {
236
+ if (!formFields) {
237
+ return null;
238
+ }
239
+ const getValue = (key) => formFields[`themeConfiguration.typography.${key}`]?.value;
240
+ return {
241
+ bodyFont: getValue('bodyFont') ?? undefined,
242
+ headingFont: getValue('headingFont') ?? undefined,
243
+ bodyFontCustom: getValue('bodyFontCustom') ?? undefined,
244
+ headingFontCustom: getValue('headingFontCustom') ?? undefined,
245
+ baseFontSize: getValue('baseFontSize') ?? undefined,
246
+ lineHeight: getValue('lineHeight') ?? undefined,
247
+ };
248
+ }, [formFields]);
249
+ const previewTypography = useMemo(() => {
250
+ return resolveTypographyPreview(formTypographySelection, selectedTheme);
251
+ }, [formTypographySelection, selectedTheme]);
252
+ const borderRadiusValue = formFields?.['themeConfiguration.borderRadius']?.value;
253
+ const presetRadius = activePreset?.borderRadius ?? 'medium';
254
+ const resolvedBorderRadius = (typeof borderRadiusValue === 'string' && borderRadiusValue.length
255
+ ? borderRadiusValue
256
+ : presetRadius);
257
+ const borderRadiusPreset = borderRadiusPresets[resolvedBorderRadius] ?? borderRadiusPresets.medium;
258
+ const borderRadiusCSS = typeof borderRadiusPreset.css === 'string'
259
+ ? { '--radius-default': borderRadiusPreset.css }
260
+ : borderRadiusPreset.css;
261
+ const previewRadius = {
262
+ card: borderRadiusCSS['--radius-large'] ?? '1rem',
263
+ chip: borderRadiusCSS['--radius-default'] ?? '0.75rem',
264
+ pill: borderRadiusCSS['--radius-xl'] ?? borderRadiusCSS['--radius-large'] ?? '999px',
265
+ };
266
+ const fieldLabel = typeof field.label === 'string' ? field.label : field.label?.en || field.label?.cs || 'Theme';
267
+ return (_jsxs("div", { style: { marginBottom: '24px' }, children: [_jsx("label", { style: {
268
+ display: 'block',
269
+ marginBottom: '10px',
270
+ fontSize: '13px',
271
+ fontWeight: 600,
272
+ color: 'var(--theme-elevation-800)',
273
+ }, children: fieldLabel }), _jsxs("div", { style: {
274
+ display: 'flex',
275
+ flexWrap: 'wrap',
276
+ gap: '24px',
277
+ alignItems: 'flex-start',
278
+ }, children: [_jsxs("div", { style: {
279
+ flex: '0 0 320px',
280
+ minWidth: '260px',
281
+ maxWidth: '420px',
282
+ display: 'grid',
283
+ gap: '12px',
284
+ }, children: [_jsxs("select", { value: selectedTheme || '', onChange: handleThemeChange, style: {
285
+ width: '100%',
286
+ padding: '12px 14px',
287
+ fontSize: '14px',
288
+ borderRadius: '8px',
289
+ border: '1px solid var(--theme-elevation-250)',
290
+ backgroundColor: 'var(--theme-input-bg)',
291
+ color: 'var(--theme-elevation-800)',
292
+ cursor: 'pointer',
293
+ }, children: [_jsx("option", { value: "", children: "Select a theme\u2026" }), Object.entries(themePresets).map(([key, preset]) => (_jsx("option", { value: key, children: preset.label }, key)))] }), activePreset && (_jsxs("div", { style: {
294
+ padding: '12px',
295
+ borderRadius: '10px',
296
+ border: '1px solid var(--theme-elevation-200)',
297
+ backgroundColor: 'var(--theme-elevation-50)',
298
+ display: 'grid',
299
+ gap: '6px',
300
+ fontSize: '12px',
301
+ color: 'var(--theme-elevation-600)',
302
+ }, children: [_jsx("div", { style: { fontWeight: 600, color: 'var(--theme-elevation-800)' }, children: activePreset.label }), _jsxs("div", { children: ["Primary color: ", activePreset.lightMode.primary] }), _jsxs("div", { children: ["Accent color: ", activePreset.lightMode.accent] })] })), field.admin?.description && (_jsx("div", { style: {
303
+ fontSize: '12px',
304
+ color: 'var(--theme-elevation-600)',
305
+ lineHeight: 1.5,
306
+ }, children: typeof field.admin.description === 'string'
307
+ ? field.admin.description
308
+ : field.admin.description?.en || field.admin.description?.cs || '' }))] }), _jsx("div", { style: {
309
+ flex: '1 1 420px',
310
+ minWidth: '320px',
311
+ position: 'sticky',
312
+ top: '96px',
313
+ alignSelf: 'flex-start',
314
+ }, children: _jsxs("div", { style: {
315
+ width: '100%',
316
+ borderRadius: '16px',
317
+ border: '1px solid var(--theme-elevation-200)',
318
+ backgroundColor: 'var(--theme-elevation-25)',
319
+ padding: '20px',
320
+ display: 'grid',
321
+ gap: '18px',
322
+ maxHeight: 'calc(100vh - 140px)',
323
+ overflowY: 'auto',
324
+ }, children: [_jsxs("div", { style: {
325
+ display: 'flex',
326
+ alignItems: 'center',
327
+ justifyContent: 'space-between',
328
+ fontWeight: 600,
329
+ fontSize: '13px',
330
+ color: 'var(--theme-elevation-800)',
331
+ }, children: [_jsx("span", { children: "\uD83C\uDFA8 Live Preview" }), _jsx("span", { style: { fontSize: '12px', color: 'var(--theme-elevation-600)' }, children: activePreset ? activePreset.label : 'Custom palette' })] }), _jsxs("div", { style: {
332
+ display: 'grid',
333
+ gap: '16px',
334
+ }, children: [_jsx(ModePreview, { icon: "\u2600\uFE0F", title: "Light Mode", colors: lightModeColors, typography: previewTypography, radius: previewRadius }), _jsx(ModePreview, { icon: "\uD83C\uDF19", title: "Dark Mode", colors: darkModeColors, typography: previewTypography, radius: previewRadius })] })] }) })] })] }));
335
+ }
336
+ //# sourceMappingURL=ThemePreviewField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemePreviewField.js","sourceRoot":"","sources":["../../src/fields/ThemePreviewField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SelectFieldClientProps } from 'payload';
2
+ export default function ThemeTokenSelectField(props: SelectFieldClientProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=ThemeTokenSelectField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeTokenSelectField.d.ts","sourceRoot":"","sources":["../../src/fields/ThemeTokenSelectField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAkFrD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,2CA8H1E"}
@@ -0,0 +1,128 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useField } from '@payloadcms/ui';
4
+ import { useCallback, useEffect, useState } from 'react';
5
+ import { defaultThemePresets } from '../presets';
6
+ import { resolveThemeConfiguration } from '../utils/resolveThemeConfiguration';
7
+ const FALLBACK_TOKENS = [
8
+ { value: 'background', label: 'Theme background', color: 'var(--background)' },
9
+ { value: 'card', label: 'Card background', color: 'var(--card)' },
10
+ { value: 'muted', label: 'Muted surface', color: 'var(--muted)' },
11
+ { value: 'accent', label: 'Accent surface', color: 'var(--accent)' },
12
+ { value: 'secondary', label: 'Secondary surface', color: 'var(--secondary)' },
13
+ { value: 'primary', label: 'Primary surface', color: 'var(--primary)' },
14
+ ];
15
+ async function fetchThemeConfiguration() {
16
+ try {
17
+ const response = await fetch('/api/site-settings');
18
+ if (!response.ok) {
19
+ return null;
20
+ }
21
+ const data = await response.json();
22
+ return data?.docs?.[0]?.themeConfiguration ?? null;
23
+ }
24
+ catch (error) {
25
+ console.warn('[ThemeTokenSelectField] Failed to fetch theme configuration:', error);
26
+ return null;
27
+ }
28
+ }
29
+ function buildOptionsFromConfiguration(configuration) {
30
+ if (!configuration) {
31
+ return FALLBACK_TOKENS;
32
+ }
33
+ const resolved = resolveThemeConfiguration(configuration);
34
+ const lightMode = resolved.lightMode ?? defaultThemePresets[0]?.lightMode ?? {};
35
+ const orderedKeys = [
36
+ 'background',
37
+ 'card',
38
+ 'muted',
39
+ 'accent',
40
+ 'secondary',
41
+ 'primary',
42
+ 'popover',
43
+ ];
44
+ const typedLightMode = lightMode;
45
+ const tokens = orderedKeys
46
+ .map((key) => {
47
+ const value = typedLightMode?.[key];
48
+ if (typeof value !== 'string' || value.trim().length === 0) {
49
+ return null;
50
+ }
51
+ const labelMap = {
52
+ background: 'Theme background',
53
+ card: 'Card background',
54
+ muted: 'Muted surface',
55
+ accent: 'Accent surface',
56
+ secondary: 'Secondary surface',
57
+ primary: 'Primary surface',
58
+ popover: 'Popover surface',
59
+ };
60
+ return {
61
+ value: key,
62
+ label: labelMap[key] ?? key,
63
+ color: value,
64
+ };
65
+ })
66
+ .filter((token) => Boolean(token));
67
+ return tokens.length > 0 ? tokens : FALLBACK_TOKENS;
68
+ }
69
+ export default function ThemeTokenSelectField(props) {
70
+ const { path, field } = props;
71
+ const { value, setValue } = useField({ path });
72
+ const [options, setOptions] = useState(FALLBACK_TOKENS);
73
+ const selectedValue = value || 'background';
74
+ useEffect(() => {
75
+ let isMounted = true;
76
+ fetchThemeConfiguration().then((configuration) => {
77
+ if (!isMounted)
78
+ return;
79
+ setOptions(buildOptionsFromConfiguration(configuration));
80
+ });
81
+ return () => {
82
+ isMounted = false;
83
+ };
84
+ }, []);
85
+ const handleSelect = useCallback((nextValue) => {
86
+ setValue(nextValue);
87
+ }, [setValue]);
88
+ const label = typeof field.label === 'string' ? field.label : '';
89
+ let description = '';
90
+ if (typeof field.admin?.description === 'string') {
91
+ description = field.admin.description;
92
+ }
93
+ else if (field.admin?.description &&
94
+ typeof field.admin.description === 'object' &&
95
+ typeof field.admin.description.en === 'string') {
96
+ description = field.admin.description.en;
97
+ }
98
+ return (_jsxs("div", { className: "field-type theme-token-select", children: [label && (_jsxs("label", { className: "field-label", htmlFor: path, style: { display: 'block', marginBottom: '8px' }, children: [label, field.required && _jsx("span", { className: "required", children: "*" })] })), description && (_jsx("div", { className: "field-description", style: { marginBottom: '12px', fontSize: '13px', color: 'var(--theme-elevation-500)' }, children: description })), _jsx("div", { className: "token-grid", style: {
99
+ display: 'grid',
100
+ gridTemplateColumns: 'repeat(auto-fill, minmax(140px, 1fr))',
101
+ gap: '10px',
102
+ }, children: options.map((option) => {
103
+ const isActive = option.value === selectedValue;
104
+ return (_jsxs("button", { type: "button", onClick: () => handleSelect(option.value), style: {
105
+ display: 'flex',
106
+ alignItems: 'center',
107
+ gap: '10px',
108
+ padding: '10px 12px',
109
+ borderRadius: '10px',
110
+ border: isActive
111
+ ? '2px solid var(--theme-primary-500)'
112
+ : '1px solid var(--theme-elevation-150)',
113
+ backgroundColor: 'var(--theme-elevation-0)',
114
+ boxShadow: isActive
115
+ ? '0 10px 20px -10px rgba(59, 130, 246, 0.4)'
116
+ : '0 1px 2px rgba(15, 23, 42, 0.08)',
117
+ cursor: 'pointer',
118
+ transition: 'border-color 0.2s ease, box-shadow 0.2s ease',
119
+ }, children: [_jsx("span", { "aria-hidden": true, style: {
120
+ width: '32px',
121
+ height: '32px',
122
+ borderRadius: '8px',
123
+ border: '1px solid rgba(15, 23, 42, 0.08)',
124
+ background: option.color,
125
+ } }), _jsx("span", { style: { fontSize: '13px', fontWeight: 600, color: 'var(--theme-elevation-800)' }, children: option.label })] }, option.value));
126
+ }) }), _jsx("select", { id: path, value: selectedValue, onChange: (event) => handleSelect(event.target.value), style: { display: 'none' }, children: options.map((option) => (_jsx("option", { value: option.value, children: option.label }, option.value))) })] }));
127
+ }
128
+ //# sourceMappingURL=ThemeTokenSelectField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeTokenSelectField.js","sourceRoot":"","sources":["../../src/fields/ThemeTokenSelectField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
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"];
3
+ type ColorToken = (typeof colorFieldKeys)[number];
4
+ type ColorPalette = Record<ColorToken, string>;
5
+ export declare const lightModeDefaults: ColorPalette;
6
+ export declare const darkModeDefaults: ColorPalette;
7
+ export declare const lightModeField: Field;
8
+ export declare const darkModeField: Field;
9
+ export {};
10
+ //# sourceMappingURL=colorModeFields.d.ts.map
@@ -0,0 +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"}