@kilivi/payloadcms-theme-management 0.2.11 → 0.2.13

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.
@@ -1,228 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useField } from '@payloadcms/ui';
4
- import { useEffect, useState } from 'react';
5
- import { allExtendedThemePresets } from '../extended-presets.js';
6
- const ThemePresetSelectField = ({ field, path })=>{
7
- const { value, setValue } = useField({
8
- path
9
- });
10
- const [isOpen, setIsOpen] = useState(false);
11
- const options = field.options || [];
12
- const selectedOption = options.find((opt)=>opt.value === value);
13
- const handleSelect = (optionValue)=>{
14
- setValue(optionValue);
15
- setIsOpen(false);
16
- };
17
- useEffect(()=>{
18
- const handleClickOutside = (e)=>{
19
- const target = e.target;
20
- if (!target.closest('.theme-preset-select-container')) {
21
- setIsOpen(false);
22
- }
23
- };
24
- if (isOpen) {
25
- document.addEventListener('mousedown', handleClickOutside);
26
- return ()=>document.removeEventListener('mousedown', handleClickOutside);
27
- }
28
- }, [
29
- isOpen
30
- ]);
31
- const label = typeof field.label === 'string' ? field.label : field.label?.en || field.label?.cs || 'Theme Preset';
32
- const description = typeof field.admin?.description === 'string' ? field.admin.description : field.admin?.description?.en || field.admin?.description?.cs;
33
- // Get color swatches for a preset
34
- const getPresetColors = (presetValue)=>{
35
- const preset = allExtendedThemePresets[presetValue];
36
- if (!preset) return [];
37
- const colors = [
38
- preset.styles.light.primary,
39
- preset.styles.light.secondary,
40
- preset.styles.light.accent,
41
- preset.styles.light.background,
42
- preset.styles.light.foreground
43
- ].filter(Boolean);
44
- return colors.slice(0, 5) // Max 5 swatches
45
- ;
46
- };
47
- return /*#__PURE__*/ _jsxs("div", {
48
- className: "theme-preset-select-container",
49
- style: {
50
- position: 'relative',
51
- marginBottom: '16px'
52
- },
53
- children: [
54
- /*#__PURE__*/ _jsx("label", {
55
- style: {
56
- display: 'block',
57
- marginBottom: '6px',
58
- fontSize: '13px',
59
- fontWeight: 600,
60
- color: 'var(--theme-elevation-800)'
61
- },
62
- children: label
63
- }),
64
- description && /*#__PURE__*/ _jsx("div", {
65
- style: {
66
- fontSize: '12px',
67
- color: 'var(--theme-elevation-500)',
68
- marginBottom: '8px'
69
- },
70
- children: description
71
- }),
72
- /*#__PURE__*/ _jsxs("button", {
73
- type: "button",
74
- onClick: ()=>setIsOpen(!isOpen),
75
- style: {
76
- width: '100%',
77
- padding: '12px 14px',
78
- borderRadius: '6px',
79
- border: '1px solid var(--theme-elevation-200)',
80
- backgroundColor: 'var(--theme-input-bg)',
81
- color: 'var(--theme-elevation-800)',
82
- textAlign: 'left',
83
- cursor: 'pointer',
84
- display: 'flex',
85
- justifyContent: 'space-between',
86
- alignItems: 'center',
87
- fontSize: '14px',
88
- transition: 'border-color 0.2s ease'
89
- },
90
- onMouseEnter: (e)=>{
91
- e.currentTarget.style.borderColor = 'var(--theme-elevation-400)';
92
- },
93
- onMouseLeave: (e)=>{
94
- e.currentTarget.style.borderColor = 'var(--theme-elevation-200)';
95
- },
96
- children: [
97
- /*#__PURE__*/ _jsxs("div", {
98
- style: {
99
- display: 'flex',
100
- alignItems: 'center',
101
- gap: '12px',
102
- flex: 1
103
- },
104
- children: [
105
- /*#__PURE__*/ _jsx("span", {
106
- style: {
107
- flex: 1
108
- },
109
- children: selectedOption?.label || 'Vyberte téma...'
110
- }),
111
- selectedOption && /*#__PURE__*/ _jsx("div", {
112
- style: {
113
- display: 'flex',
114
- gap: '4px'
115
- },
116
- children: getPresetColors(selectedOption.value).map((color, index)=>/*#__PURE__*/ _jsx("span", {
117
- style: {
118
- width: '20px',
119
- height: '20px',
120
- borderRadius: '50%',
121
- backgroundColor: color,
122
- border: '1px solid rgba(15, 23, 42, 0.12)',
123
- boxShadow: 'inset 0 1px 2px rgba(15, 23, 42, 0.08)'
124
- }
125
- }, `${selectedOption.value}-swatch-${index}`))
126
- })
127
- ]
128
- }),
129
- /*#__PURE__*/ _jsx("svg", {
130
- width: "12",
131
- height: "12",
132
- viewBox: "0 0 12 12",
133
- fill: "none",
134
- style: {
135
- transition: 'transform 0.2s ease',
136
- transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',
137
- marginLeft: '8px'
138
- },
139
- children: /*#__PURE__*/ _jsx("path", {
140
- d: "M3 4.5L6 7.5L9 4.5",
141
- stroke: "currentColor",
142
- strokeWidth: "1.5",
143
- strokeLinecap: "round",
144
- strokeLinejoin: "round"
145
- })
146
- })
147
- ]
148
- }),
149
- isOpen && /*#__PURE__*/ _jsx("div", {
150
- style: {
151
- position: 'absolute',
152
- top: '100%',
153
- left: 0,
154
- right: 0,
155
- marginTop: '4px',
156
- maxHeight: '320px',
157
- overflowY: 'auto',
158
- backgroundColor: 'var(--theme-elevation-0)',
159
- border: '1px solid var(--theme-elevation-200)',
160
- borderRadius: '8px',
161
- boxShadow: '0 8px 24px rgba(15, 23, 42, 0.15)',
162
- zIndex: 1000
163
- },
164
- children: options.map((option)=>{
165
- const isSelected = option.value === value;
166
- const colors = getPresetColors(option.value);
167
- return /*#__PURE__*/ _jsxs("button", {
168
- type: "button",
169
- onClick: ()=>handleSelect(option.value),
170
- style: {
171
- width: '100%',
172
- padding: '12px 14px',
173
- border: 'none',
174
- backgroundColor: isSelected ? 'var(--theme-elevation-100)' : 'transparent',
175
- color: 'var(--theme-elevation-800)',
176
- textAlign: 'left',
177
- cursor: 'pointer',
178
- fontSize: '14px',
179
- display: 'flex',
180
- justifyContent: 'space-between',
181
- alignItems: 'center',
182
- gap: '12px',
183
- transition: 'background-color 0.15s ease'
184
- },
185
- onMouseEnter: (e)=>{
186
- if (!isSelected) {
187
- e.currentTarget.style.backgroundColor = 'var(--theme-elevation-50)';
188
- }
189
- },
190
- onMouseLeave: (e)=>{
191
- if (!isSelected) {
192
- e.currentTarget.style.backgroundColor = 'transparent';
193
- }
194
- },
195
- children: [
196
- /*#__PURE__*/ _jsx("div", {
197
- style: {
198
- fontWeight: isSelected ? 600 : 500,
199
- flex: 1
200
- },
201
- children: option.label
202
- }),
203
- /*#__PURE__*/ _jsx("div", {
204
- style: {
205
- display: 'flex',
206
- gap: '4px'
207
- },
208
- children: colors.map((color, index)=>/*#__PURE__*/ _jsx("span", {
209
- style: {
210
- width: '24px',
211
- height: '24px',
212
- borderRadius: '50%',
213
- backgroundColor: color,
214
- border: '1px solid rgba(15, 23, 42, 0.12)',
215
- boxShadow: 'inset 0 1px 2px rgba(15, 23, 42, 0.08)'
216
- }
217
- }, `${option.value}-dropdown-swatch-${index}`))
218
- })
219
- ]
220
- }, option.value);
221
- })
222
- })
223
- ]
224
- });
225
- };
226
- export default ThemePresetSelectField;
227
-
228
- //# sourceMappingURL=ThemePresetSelectField.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/fields/ThemePresetSelectField.tsx"],"sourcesContent":["'use client'\n\nimport { useField } from '@payloadcms/ui'\nimport type { SelectFieldClientComponent } from 'payload'\nimport { useEffect, useState } from 'react'\nimport { allExtendedThemePresets } from '../extended-presets.js'\n\nconst ThemePresetSelectField: SelectFieldClientComponent = ({ field, path }) => {\n const { value, setValue } = useField<string>({ path })\n const [isOpen, setIsOpen] = useState(false)\n\n const options = (field.options as Array<{ label: string; value: string }>) || []\n const selectedOption = options.find((opt) => opt.value === value)\n\n const handleSelect = (optionValue: string) => {\n setValue(optionValue)\n setIsOpen(false)\n }\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as HTMLElement\n if (!target.closest('.theme-preset-select-container')) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const label =\n typeof field.label === 'string'\n ? field.label\n : field.label?.en || field.label?.cs || 'Theme Preset'\n const description =\n typeof field.admin?.description === 'string'\n ? field.admin.description\n : field.admin?.description?.en || field.admin?.description?.cs\n\n // Get color swatches for a preset\n const getPresetColors = (presetValue: string) => {\n const preset = allExtendedThemePresets[presetValue as keyof typeof allExtendedThemePresets]\n if (!preset) return []\n\n const colors = [\n preset.styles.light.primary,\n preset.styles.light.secondary,\n preset.styles.light.accent,\n preset.styles.light.background,\n preset.styles.light.foreground,\n ].filter(Boolean)\n\n return colors.slice(0, 5) // Max 5 swatches\n }\n\n return (\n <div\n className=\"theme-preset-select-container\"\n style={{ position: 'relative', marginBottom: '16px' }}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '6px',\n fontSize: '13px',\n fontWeight: 600,\n color: 'var(--theme-elevation-800)',\n }}\n >\n {label}\n </label>\n\n {description && (\n <div\n style={{\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n marginBottom: '8px',\n }}\n >\n {description}\n </div>\n )}\n\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n style={{\n width: '100%',\n padding: '12px 14px',\n borderRadius: '6px',\n border: '1px solid var(--theme-elevation-200)',\n backgroundColor: 'var(--theme-input-bg)',\n color: 'var(--theme-elevation-800)',\n textAlign: 'left',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n fontSize: '14px',\n transition: 'border-color 0.2s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = 'var(--theme-elevation-400)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = 'var(--theme-elevation-200)'\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', flex: 1 }}>\n <span style={{ flex: 1 }}>{selectedOption?.label || 'Vyberte téma...'}</span>\n {selectedOption && (\n <div style={{ display: 'flex', gap: '4px' }}>\n {getPresetColors(selectedOption.value).map((color, index) => (\n <span\n key={`${selectedOption.value}-swatch-${index}`}\n style={{\n width: '20px',\n height: '20px',\n borderRadius: '50%',\n backgroundColor: color,\n border: '1px solid rgba(15, 23, 42, 0.12)',\n boxShadow: 'inset 0 1px 2px rgba(15, 23, 42, 0.08)',\n }}\n />\n ))}\n </div>\n )}\n </div>\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n style={{\n transition: 'transform 0.2s ease',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n marginLeft: '8px',\n }}\n >\n <path\n d=\"M3 4.5L6 7.5L9 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {isOpen && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n maxHeight: '320px',\n overflowY: 'auto',\n backgroundColor: 'var(--theme-elevation-0)',\n border: '1px solid var(--theme-elevation-200)',\n borderRadius: '8px',\n boxShadow: '0 8px 24px rgba(15, 23, 42, 0.15)',\n zIndex: 1000,\n }}\n >\n {options.map((option) => {\n const isSelected = option.value === value\n const colors = getPresetColors(option.value)\n\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => handleSelect(option.value)}\n style={{\n width: '100%',\n padding: '12px 14px',\n border: 'none',\n backgroundColor: isSelected ? 'var(--theme-elevation-100)' : 'transparent',\n color: 'var(--theme-elevation-800)',\n textAlign: 'left',\n cursor: 'pointer',\n fontSize: '14px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: '12px',\n transition: 'background-color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = 'var(--theme-elevation-50)'\n }\n }}\n onMouseLeave={(e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n >\n <div\n style={{\n fontWeight: isSelected ? 600 : 500,\n flex: 1,\n }}\n >\n {option.label}\n </div>\n\n {/* Color Swatches */}\n <div style={{ display: 'flex', gap: '4px' }}>\n {colors.map((color, index) => (\n <span\n key={`${option.value}-dropdown-swatch-${index}`}\n style={{\n width: '24px',\n height: '24px',\n borderRadius: '50%',\n backgroundColor: color,\n border: '1px solid rgba(15, 23, 42, 0.12)',\n boxShadow: 'inset 0 1px 2px rgba(15, 23, 42, 0.08)',\n }}\n />\n ))}\n </div>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\nexport default ThemePresetSelectField\n"],"names":["useField","useEffect","useState","allExtendedThemePresets","ThemePresetSelectField","field","path","value","setValue","isOpen","setIsOpen","options","selectedOption","find","opt","handleSelect","optionValue","handleClickOutside","e","target","closest","document","addEventListener","removeEventListener","label","en","cs","description","admin","getPresetColors","presetValue","preset","colors","styles","light","primary","secondary","accent","background","foreground","filter","Boolean","slice","div","className","style","position","marginBottom","display","fontSize","fontWeight","color","button","type","onClick","width","padding","borderRadius","border","backgroundColor","textAlign","cursor","justifyContent","alignItems","transition","onMouseEnter","currentTarget","borderColor","onMouseLeave","gap","flex","span","map","index","height","boxShadow","svg","viewBox","fill","transform","marginLeft","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","top","left","right","marginTop","maxHeight","overflowY","zIndex","option","isSelected"],"mappings":"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"}