@kilivi/payloadcms-theme-management 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +37 -7
  2. package/dist/components/ServerThemeInjector.d.ts +13 -1
  3. package/dist/components/ServerThemeInjector.d.ts.map +1 -1
  4. package/dist/components/ServerThemeInjector.js +24 -1
  5. package/dist/components/ServerThemeInjector.js.map +1 -1
  6. package/dist/components/ThemeLivePreviewSync.d.ts +3 -0
  7. package/dist/components/ThemeLivePreviewSync.d.ts.map +1 -1
  8. package/dist/components/ThemeLivePreviewSync.js +28 -4
  9. package/dist/components/ThemeLivePreviewSync.js.map +1 -1
  10. package/dist/components/typographyPreviewUtils.d.ts +5 -0
  11. package/dist/components/typographyPreviewUtils.d.ts.map +1 -1
  12. package/dist/components/typographyPreviewUtils.js +16 -10
  13. package/dist/components/typographyPreviewUtils.js.map +1 -1
  14. package/dist/constants/themeFonts.d.ts +94 -168
  15. package/dist/constants/themeFonts.d.ts.map +1 -1
  16. package/dist/constants/themeFonts.js +260 -140
  17. package/dist/constants/themeFonts.js.map +1 -1
  18. package/dist/endpoints/themeFonts.d.ts +5 -0
  19. package/dist/endpoints/themeFonts.d.ts.map +1 -0
  20. package/dist/endpoints/themeFonts.js +138 -0
  21. package/dist/endpoints/themeFonts.js.map +1 -0
  22. package/dist/fields/AppearancePreviewField.d.ts.map +1 -1
  23. package/dist/fields/AppearancePreviewField.js +196 -133
  24. package/dist/fields/AppearancePreviewField.js.map +1 -1
  25. package/dist/fields/FontSelectField.css +155 -0
  26. package/dist/fields/FontSelectField.d.ts +4 -2
  27. package/dist/fields/FontSelectField.d.ts.map +1 -1
  28. package/dist/fields/FontSelectField.js +80 -118
  29. package/dist/fields/FontSelectField.js.map +1 -1
  30. package/dist/fields/StylePresetField.d.ts.map +1 -1
  31. package/dist/fields/StylePresetField.js +31 -30
  32. package/dist/fields/StylePresetField.js.map +1 -1
  33. package/dist/fields/ThemePreviewField.css +63 -1
  34. package/dist/fields/ThemePreviewField.d.ts.map +1 -1
  35. package/dist/fields/ThemePreviewField.js +2 -5
  36. package/dist/fields/ThemePreviewField.js.map +1 -1
  37. package/dist/fields/themeConfigurationField.d.ts.map +1 -1
  38. package/dist/fields/themeConfigurationField.js +320 -271
  39. package/dist/fields/themeConfigurationField.js.map +1 -1
  40. package/dist/hooks/useNativeLivePreview.d.ts +15 -0
  41. package/dist/hooks/useNativeLivePreview.d.ts.map +1 -0
  42. package/dist/hooks/useNativeLivePreview.js +18 -0
  43. package/dist/hooks/useNativeLivePreview.js.map +1 -0
  44. package/dist/hooks/useThemeFonts.d.ts +10 -0
  45. package/dist/hooks/useThemeFonts.d.ts.map +1 -0
  46. package/dist/hooks/useThemeFonts.js +36 -0
  47. package/dist/hooks/useThemeFonts.js.map +1 -0
  48. package/dist/index.d.ts +3 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +9 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/next-fonts.d.ts +3 -0
  53. package/dist/next-fonts.d.ts.map +1 -0
  54. package/dist/next-fonts.js +360 -0
  55. package/dist/next-fonts.js.map +1 -0
  56. package/dist/payload-types.d.ts +10 -6
  57. package/dist/payload-types.d.ts.map +1 -1
  58. package/dist/payload-types.js.map +1 -1
  59. package/dist/presets.d.ts +6 -0
  60. package/dist/presets.d.ts.map +1 -1
  61. package/dist/presets.js.map +1 -1
  62. package/dist/style-presets.d.ts +27 -18
  63. package/dist/style-presets.d.ts.map +1 -1
  64. package/dist/style-presets.js +399 -217
  65. package/dist/style-presets.js.map +1 -1
  66. package/dist/translations.d.ts +5 -0
  67. package/dist/translations.d.ts.map +1 -1
  68. package/dist/translations.js +10 -0
  69. package/dist/translations.js.map +1 -1
  70. package/dist/utils/livePreviewThemeRuntime.d.ts +6 -1
  71. package/dist/utils/livePreviewThemeRuntime.d.ts.map +1 -1
  72. package/dist/utils/livePreviewThemeRuntime.js +11 -1
  73. package/dist/utils/livePreviewThemeRuntime.js.map +1 -1
  74. package/dist/utils/resolveThemeConfiguration.d.ts +15 -0
  75. package/dist/utils/resolveThemeConfiguration.d.ts.map +1 -1
  76. package/dist/utils/resolveThemeConfiguration.js +41 -8
  77. package/dist/utils/resolveThemeConfiguration.js.map +1 -1
  78. package/dist/utils/themeUtils.d.ts.map +1 -1
  79. package/dist/utils/themeUtils.js +60 -2
  80. package/dist/utils/themeUtils.js.map +1 -1
  81. package/package.json +5 -1
@@ -1,216 +1,336 @@
1
- // Theme font constants for the plugin
1
+ // Theme font constants for the plugin.
2
+ //
3
+ // One catalog drives everything: the body/heading selects, the style presets,
4
+ // the admin previews, the CSS emitted for the site and the Google Fonts request
5
+ // that loads the chosen faces. A font a style preset refers to must exist here,
6
+ // otherwise Payload rejects the saved value.
7
+ const google = (value, category, cssVar, fallback, googleWeights, headingOnly)=>({
8
+ value,
9
+ category,
10
+ fontFamily: `var(${cssVar}, "${value}"), ${fallback}`,
11
+ googleWeights,
12
+ headingOnly
13
+ });
14
+ const SANS = 'system-ui, -apple-system, "Segoe UI", sans-serif';
15
+ const SERIF = 'Georgia, "Times New Roman", serif';
16
+ const MONO = 'ui-monospace, SFMono-Regular, Menlo, monospace';
17
+ export const FONT_CATALOG = [
18
+ {
19
+ value: 'system-ui',
20
+ category: 'sans-serif',
21
+ fontFamily: SANS,
22
+ googleWeights: null
23
+ },
24
+ {
25
+ value: 'helvetica',
26
+ category: 'sans-serif',
27
+ fontFamily: '"Helvetica Neue", Helvetica, Arial, sans-serif',
28
+ googleWeights: null
29
+ },
30
+ google('Inter', 'sans-serif', '--font-inter', SANS, '300;400;500;600;700;800'),
31
+ google('Roboto', 'sans-serif', '--font-roboto', SANS, '300;400;500;700;900'),
32
+ google('Open Sans', 'sans-serif', '--font-open-sans', SANS, '300;400;500;600;700;800'),
33
+ google('Lato', 'sans-serif', '--font-lato', SANS, '300;400;700;900'),
34
+ google('Montserrat', 'sans-serif', '--font-montserrat', SANS, '300;400;500;600;700;800'),
35
+ google('Poppins', 'sans-serif', '--font-poppins', SANS, '300;400;500;600;700;800'),
36
+ google('Raleway', 'sans-serif', '--font-raleway', SANS, '300;400;500;600;700;800'),
37
+ google('DM Sans', 'sans-serif', '--font-dm-sans', SANS, '300;400;500;600;700'),
38
+ google('Nunito', 'sans-serif', '--font-nunito', SANS, '300;400;600;700;800'),
39
+ google('Plus Jakarta Sans', 'sans-serif', '--font-plus-jakarta', SANS, '300;400;500;600;700;800'),
40
+ google('Manrope', 'sans-serif', '--font-manrope', SANS, '300;400;500;600;700;800'),
41
+ google('Space Grotesk', 'sans-serif', '--font-space-grotesk', SANS, '300;400;500;600;700'),
42
+ google('Source Sans 3', 'sans-serif', '--font-source-sans', SANS, '300;400;600;700'),
43
+ google('Work Sans', 'sans-serif', '--font-work-sans', SANS, '300;400;500;600;700'),
44
+ google('Archivo', 'sans-serif', '--font-archivo', SANS, '400;500;600;700;800'),
45
+ google('Outfit', 'sans-serif', '--font-outfit', SANS, '300;400;500;600;700'),
46
+ google('Playfair Display', 'serif', '--font-playfair', SERIF, '400;500;600;700;800'),
47
+ google('Merriweather', 'serif', '--font-merriweather', SERIF, '300;400;700;900'),
48
+ google('Lora', 'serif', '--font-lora', SERIF, '400;500;600;700'),
49
+ google('Cormorant Garamond', 'serif', '--font-cormorant', SERIF, '300;400;500;600;700'),
50
+ google('Crimson Pro', 'serif', '--font-crimson', SERIF, '300;400;500;600;700'),
51
+ google('Fraunces', 'serif', '--font-fraunces', SERIF, '300;400;500;600;700'),
52
+ google('Libre Baskerville', 'serif', '--font-libre-baskerville', SERIF, '400;700'),
53
+ google('DM Serif Display', 'display', '--font-dm-serif', SERIF, '400', true),
54
+ google('Bebas Neue', 'display', '--font-bebas', SANS, '400', true),
55
+ google('Archivo Black', 'display', '--font-archivo-black', SANS, '400', true),
56
+ google('Syne', 'display', '--font-syne', SANS, '400;500;600;700;800', true),
57
+ google('Space Mono', 'monospace', '--font-space-mono', MONO, '400;700'),
58
+ google('IBM Plex Mono', 'monospace', '--font-ibm-plex-mono', MONO, '300;400;500;600;700'),
59
+ google('JetBrains Mono', 'monospace', '--font-jetbrains-mono', MONO, '300;400;500;700')
60
+ ];
61
+ const CATALOG_BY_VALUE = new Map(FONT_CATALOG.map((entry)=>[
62
+ entry.value,
63
+ entry
64
+ ]));
65
+ /** Values stored by earlier versions that now map onto a catalog entry. */ const LEGACY_FONT_ALIASES = {
66
+ 'Source Sans Pro': 'Source Sans 3',
67
+ 'Helvetica Neue': 'helvetica'
68
+ };
69
+ export function getFontCatalogEntry(value) {
70
+ if (!value) return undefined;
71
+ return CATALOG_BY_VALUE.get(LEGACY_FONT_ALIASES[value] ?? value);
72
+ }
73
+ export const FONT_CATEGORY_LABELS = {
74
+ 'sans-serif': {
75
+ en: 'Sans-serif',
76
+ cs: 'Bezpatkové'
77
+ },
78
+ serif: {
79
+ en: 'Serif',
80
+ cs: 'Patkové'
81
+ },
82
+ display: {
83
+ en: 'Display (headings)',
84
+ cs: 'Výrazné (nadpisy)'
85
+ },
86
+ monospace: {
87
+ en: 'Monospace',
88
+ cs: 'Neproporcionální'
89
+ }
90
+ };
91
+ const fontLabel = (entry)=>entry.value === 'system-ui' ? {
92
+ en: 'System',
93
+ cs: 'Systémové'
94
+ } : entry.value === 'helvetica' ? {
95
+ en: 'Helvetica (system)',
96
+ cs: 'Helvetica (systémové)'
97
+ } : {
98
+ en: entry.value,
99
+ cs: entry.value
100
+ };
101
+ const toOption = (entry)=>({
102
+ label: fontLabel(entry),
103
+ value: entry.value,
104
+ fontFamily: entry.fontFamily,
105
+ category: entry.category
106
+ });
107
+ const PRESET_OPTION = {
108
+ label: {
109
+ en: 'Use theme preset',
110
+ cs: 'Podle motivu'
111
+ },
112
+ value: 'preset'
113
+ };
114
+ const CUSTOM_OPTION = {
115
+ label: {
116
+ en: 'Custom font…',
117
+ cs: 'Vlastní písmo…'
118
+ },
119
+ value: 'custom'
120
+ };
2
121
  export const BODY_FONT_OPTIONS = [
122
+ PRESET_OPTION,
123
+ ...FONT_CATALOG.filter((entry)=>!entry.headingOnly).map(toOption),
124
+ CUSTOM_OPTION
125
+ ];
126
+ export const HEADING_FONT_OPTIONS = [
127
+ PRESET_OPTION,
128
+ ...FONT_CATALOG.map(toOption),
129
+ CUSTOM_OPTION
130
+ ];
131
+ export const BASE_FONT_SIZE_OPTIONS = [
3
132
  {
4
133
  label: {
5
134
  en: 'Use theme preset',
6
- cs: 'Použít výchozí'
135
+ cs: 'Podle motivu'
7
136
  },
8
137
  value: 'preset'
9
138
  },
10
139
  {
11
- label: {
12
- en: 'System',
13
- cs: 'Systémové'
14
- },
15
- value: 'system-ui',
16
- fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
17
- category: 'sans-serif'
140
+ label: '14px',
141
+ value: '14'
18
142
  },
19
143
  {
20
- label: {
21
- en: 'Inter',
22
- cs: 'Inter'
23
- },
24
- value: 'Inter',
25
- fontFamily: '"Inter", sans-serif',
26
- category: 'sans-serif'
144
+ label: '15px',
145
+ value: '15'
27
146
  },
28
147
  {
29
- label: {
30
- en: 'Roboto',
31
- cs: 'Roboto'
32
- },
33
- value: 'Roboto',
34
- fontFamily: '"Roboto", sans-serif',
35
- category: 'sans-serif'
148
+ label: '16px',
149
+ value: '16'
36
150
  },
37
151
  {
38
- label: {
39
- en: 'Open Sans',
40
- cs: 'Open Sans'
41
- },
42
- value: 'Open Sans',
43
- fontFamily: '"Open Sans", sans-serif',
44
- category: 'sans-serif'
152
+ label: '17px',
153
+ value: '17'
45
154
  },
46
155
  {
47
- label: {
48
- en: 'Lato',
49
- cs: 'Lato'
50
- },
51
- value: 'Lato',
52
- fontFamily: '"Lato", sans-serif',
53
- category: 'sans-serif'
156
+ label: '18px',
157
+ value: '18'
54
158
  },
159
+ {
160
+ label: '20px',
161
+ value: '20'
162
+ }
163
+ ];
164
+ export const LINE_HEIGHT_OPTIONS = [
55
165
  {
56
166
  label: {
57
- en: 'Montserrat',
58
- cs: 'Montserrat'
167
+ en: 'Use theme preset',
168
+ cs: 'Podle motivu'
59
169
  },
60
- value: 'Montserrat',
61
- fontFamily: '"Montserrat", sans-serif',
62
- category: 'sans-serif'
170
+ value: 'preset'
63
171
  },
64
172
  {
65
173
  label: {
66
- en: 'Poppins',
67
- cs: 'Poppins'
174
+ en: '1.4 — tight',
175
+ cs: '1,4 — těsné'
68
176
  },
69
- value: 'Poppins',
70
- fontFamily: '"Poppins", sans-serif',
71
- category: 'sans-serif'
177
+ value: '1.4'
178
+ },
179
+ {
180
+ label: '1.5',
181
+ value: '1.5'
182
+ },
183
+ {
184
+ label: '1.6',
185
+ value: '1.6'
186
+ },
187
+ {
188
+ label: '1.7',
189
+ value: '1.7'
72
190
  },
73
191
  {
74
192
  label: {
75
- en: 'Custom font...',
76
- cs: 'Vlastní písmo...'
193
+ en: '1.8 — airy',
194
+ cs: '1,8 — vzdušné'
77
195
  },
78
- value: 'custom'
196
+ value: '1.8'
79
197
  }
80
198
  ];
81
- export const HEADING_FONT_OPTIONS = [
199
+ export const HEADING_WEIGHT_OPTIONS = [
82
200
  {
83
201
  label: {
84
202
  en: 'Use theme preset',
85
- cs: 'Použít výchozí'
203
+ cs: 'Podle motivu'
86
204
  },
87
205
  value: 'preset'
88
206
  },
89
207
  {
90
208
  label: {
91
- en: 'System',
92
- cs: 'Systémové'
209
+ en: 'Light (300)',
210
+ cs: 'Tenké (300)'
93
211
  },
94
- value: 'system-ui',
95
- fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
96
- category: 'sans-serif'
212
+ value: '300'
97
213
  },
98
214
  {
99
215
  label: {
100
- en: 'Inter',
101
- cs: 'Inter'
216
+ en: 'Regular (400)',
217
+ cs: 'Normální (400)'
102
218
  },
103
- value: 'Inter',
104
- fontFamily: '"Inter", sans-serif',
105
- category: 'sans-serif'
219
+ value: '400'
106
220
  },
107
221
  {
108
222
  label: {
109
- en: 'Playfair Display',
110
- cs: 'Playfair Display'
223
+ en: 'Medium (500)',
224
+ cs: 'Střední (500)'
111
225
  },
112
- value: 'Playfair Display',
113
- fontFamily: '"Playfair Display", serif',
114
- category: 'serif'
226
+ value: '500'
115
227
  },
116
228
  {
117
229
  label: {
118
- en: 'Merriweather',
119
- cs: 'Merriweather'
230
+ en: 'Semibold (600)',
231
+ cs: 'Polotučné (600)'
120
232
  },
121
- value: 'Merriweather',
122
- fontFamily: '"Merriweather", serif',
123
- category: 'serif'
233
+ value: '600'
124
234
  },
125
235
  {
126
236
  label: {
127
- en: 'Montserrat',
128
- cs: 'Montserrat'
237
+ en: 'Bold (700)',
238
+ cs: 'Tučné (700)'
129
239
  },
130
- value: 'Montserrat',
131
- fontFamily: '"Montserrat", sans-serif',
132
- category: 'sans-serif'
240
+ value: '700'
133
241
  },
134
242
  {
135
243
  label: {
136
- en: 'Raleway',
137
- cs: 'Raleway'
244
+ en: 'Extra bold (800)',
245
+ cs: 'Extra tučné (800)'
138
246
  },
139
- value: 'Raleway',
140
- fontFamily: '"Raleway", sans-serif',
141
- category: 'sans-serif'
142
- },
143
- {
144
- label: {
145
- en: 'Custom font...',
146
- cs: 'Vlastní písmo...'
147
- },
148
- value: 'custom'
247
+ value: '800'
149
248
  }
150
249
  ];
151
- export const BASE_FONT_SIZE_OPTIONS = [
250
+ export const LETTER_SPACING_OPTIONS = [
152
251
  {
153
- label: 'preset',
154
- value: 'preset'
155
- },
156
- {
157
- label: '14px',
158
- value: '14'
159
- },
160
- {
161
- label: '15px',
162
- value: '15'
163
- },
164
- {
165
- label: '16px',
166
- value: '16'
167
- },
168
- {
169
- label: '17px',
170
- value: '17'
171
- },
172
- {
173
- label: '18px',
174
- value: '18'
175
- }
176
- ];
177
- export const LINE_HEIGHT_OPTIONS = [
178
- {
179
- label: 'preset',
252
+ label: {
253
+ en: 'Use theme preset',
254
+ cs: 'Podle motivu'
255
+ },
180
256
  value: 'preset'
181
257
  },
182
258
  {
183
- label: '1.4',
184
- value: '1.4'
185
- },
186
- {
187
- label: '1.5',
188
- value: '1.5'
259
+ label: {
260
+ en: 'Tight',
261
+ cs: 'Těsné'
262
+ },
263
+ value: 'tight'
189
264
  },
190
265
  {
191
- label: '1.6',
192
- value: '1.6'
266
+ label: {
267
+ en: 'Normal',
268
+ cs: 'Normální'
269
+ },
270
+ value: 'normal'
193
271
  },
194
272
  {
195
- label: '1.7',
196
- value: '1.7'
273
+ label: {
274
+ en: 'Wide',
275
+ cs: 'Široké'
276
+ },
277
+ value: 'wide'
197
278
  },
198
279
  {
199
- label: '1.8',
200
- value: '1.8'
280
+ label: {
281
+ en: 'Extra wide (caps)',
282
+ cs: 'Velmi široké (verzálky)'
283
+ },
284
+ value: 'wider'
201
285
  }
202
286
  ];
203
- export const FONT_VALUE_TO_CSS = {
204
- 'system-ui': 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
205
- Inter: 'var(--font-inter, var(--font-geist-sans), "Inter", sans-serif)',
206
- Roboto: 'var(--font-roboto, "Roboto", sans-serif)',
207
- 'Open Sans': 'var(--font-open-sans, "Open Sans", sans-serif)',
208
- Lato: 'var(--font-lato, "Lato", sans-serif)',
209
- Montserrat: 'var(--font-montserrat, "Montserrat", sans-serif)',
210
- Poppins: 'var(--font-poppins, "Poppins", sans-serif)',
211
- 'Playfair Display': 'var(--font-playfair, "Playfair Display", serif)',
212
- Merriweather: 'var(--font-merriweather, "Merriweather", serif)',
213
- Raleway: 'var(--font-raleway, "Raleway", sans-serif)'
287
+ /** Heading tracking for each letter-spacing token. `wider` also sets headings in caps. */ export const LETTER_SPACING_TO_CSS = {
288
+ tight: '-0.025em',
289
+ normal: '0',
290
+ wide: '0.02em',
291
+ wider: '0.08em'
214
292
  };
293
+ /** Stored base-font-size values are bare pixel numbers ('16'); CSS needs a unit. */ export function toFontSizeCss(value) {
294
+ if (!value || value === 'preset') return undefined;
295
+ return /^\d+(\.\d+)?$/.test(value.trim()) ? `${value.trim()}px` : value;
296
+ }
297
+ export const FONT_VALUE_TO_CSS = Object.fromEntries(FONT_CATALOG.map((entry)=>[
298
+ entry.value,
299
+ entry.fontFamily
300
+ ]));
301
+ /**
302
+ * Google Fonts stylesheet URL for the given font values (catalog entries only;
303
+ * system stacks and custom stacks are skipped). Returns null when nothing needs loading.
304
+ */ export function buildGoogleFontsHref(values) {
305
+ const families = [
306
+ ...new Set(values.map((value)=>getFontCatalogEntry(value)).filter(Boolean))
307
+ ].filter((entry)=>Boolean(entry?.googleWeights)).map((entry)=>`family=${encodeURIComponent(entry.value).replace(/%20/g, '+')}:wght@${entry.googleWeights}`);
308
+ if (families.length === 0) return null;
309
+ return `https://fonts.googleapis.com/css2?${families.join('&')}&display=swap`;
310
+ }
311
+ /** Payload endpoints (under `routes.api`) that serve the catalog fonts from the site's own origin. */ export const THEME_FONTS_CSS_PATH = '/theme-fonts/css';
312
+ export const THEME_FONTS_FILE_PATH = '/theme-fonts/file';
313
+ /** Catalog font values hosted by Google, de-duplicated and sorted (stable cache key). */ export function parseFontFamilies(raw) {
314
+ if (!raw) return [];
315
+ const values = raw.split(',').map((value)=>getFontCatalogEntry(value.trim())).filter((entry)=>Boolean(entry?.googleWeights)).map((entry)=>entry.value);
316
+ return [
317
+ ...new Set(values)
318
+ ].sort();
319
+ }
320
+ /**
321
+ * Stylesheet URL that loads the given fonts.
322
+ *
323
+ * - `self-hosted` (default): same-origin URL served by the plugin's font
324
+ * endpoints; the visitor's browser never contacts Google (GDPR-friendly).
325
+ * - `google`: the Google Fonts CDN directly.
326
+ * - `none`: nothing; the site loads the faces itself (e.g. `next/font`).
327
+ */ export function buildThemeFontsHref(values, options = {}) {
328
+ const { mode = 'self-hosted', apiRoute = '/api' } = options;
329
+ if (mode === 'none') return null;
330
+ const families = parseFontFamilies(values.filter(Boolean).join(','));
331
+ if (families.length === 0) return null;
332
+ if (mode === 'google') return buildGoogleFontsHref(families);
333
+ return `${apiRoute}${THEME_FONTS_CSS_PATH}?f=${families.map(encodeURIComponent).join(',')}`;
334
+ }
215
335
 
216
336
  //# sourceMappingURL=themeFonts.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/constants/themeFonts.ts"],"sourcesContent":["// Theme font constants for the plugin\nexport const BODY_FONT_OPTIONS = [\n { label: { en: 'Use theme preset', cs: 'Použít výchozí' }, value: 'preset' },\n {\n label: { en: 'System', cs: 'Systémové' },\n value: 'system-ui',\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n category: 'sans-serif' as const,\n },\n {\n label: { en: 'Inter', cs: 'Inter' },\n value: 'Inter',\n fontFamily: '\"Inter\", sans-serif',\n category: 'sans-serif' as const,\n },\n {\n label: { en: 'Roboto', cs: 'Roboto' },\n value: 'Roboto',\n fontFamily: '\"Roboto\", sans-serif',\n category: 'sans-serif' as const,\n },\n {\n label: { en: 'Open Sans', cs: 'Open Sans' },\n value: 'Open Sans',\n fontFamily: '\"Open Sans\", sans-serif',\n category: 'sans-serif' as const,\n },\n {\n label: { en: 'Lato', cs: 'Lato' },\n value: 'Lato',\n fontFamily: '\"Lato\", sans-serif',\n category: 'sans-serif' as const,\n },\n {\n label: { en: 'Montserrat', cs: 'Montserrat' },\n value: 'Montserrat',\n fontFamily: '\"Montserrat\", sans-serif',\n category: 'sans-serif' as const,\n },\n {\n label: { en: 'Poppins', cs: 'Poppins' },\n value: 'Poppins',\n fontFamily: '\"Poppins\", sans-serif',\n category: 'sans-serif' as const,\n },\n { label: { en: 'Custom font...', cs: 'Vlastní písmo...' }, value: 'custom' },\n] as const\n\nexport const HEADING_FONT_OPTIONS = [\n { label: { en: 'Use theme preset', cs: 'Použít výchozí' }, value: 'preset' },\n {\n label: { en: 'System', cs: 'Systémové' },\n value: 'system-ui',\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n category: 'sans-serif' as const,\n },\n {\n label: { en: 'Inter', cs: 'Inter' },\n value: 'Inter',\n fontFamily: '\"Inter\", sans-serif',\n category: 'sans-serif' as const,\n },\n {\n label: { en: 'Playfair Display', cs: 'Playfair Display' },\n value: 'Playfair Display',\n fontFamily: '\"Playfair Display\", serif',\n category: 'serif' as const,\n },\n {\n label: { en: 'Merriweather', cs: 'Merriweather' },\n value: 'Merriweather',\n fontFamily: '\"Merriweather\", serif',\n category: 'serif' as const,\n },\n {\n label: { en: 'Montserrat', cs: 'Montserrat' },\n value: 'Montserrat',\n fontFamily: '\"Montserrat\", sans-serif',\n category: 'sans-serif' as const,\n },\n {\n label: { en: 'Raleway', cs: 'Raleway' },\n value: 'Raleway',\n fontFamily: '\"Raleway\", sans-serif',\n category: 'sans-serif' as const,\n },\n { label: { en: 'Custom font...', cs: 'Vlastní písmo...' }, value: 'custom' },\n] as const\n\nexport const BASE_FONT_SIZE_OPTIONS = [\n { label: 'preset', value: 'preset' },\n { label: '14px', value: '14' },\n { label: '15px', value: '15' },\n { label: '16px', value: '16' },\n { label: '17px', value: '17' },\n { label: '18px', value: '18' },\n] as const\n\nexport const LINE_HEIGHT_OPTIONS = [\n { label: 'preset', value: 'preset' },\n { label: '1.4', value: '1.4' },\n { label: '1.5', value: '1.5' },\n { label: '1.6', value: '1.6' },\n { label: '1.7', value: '1.7' },\n { label: '1.8', value: '1.8' },\n] as const\n\nexport const FONT_VALUE_TO_CSS: Record<string, string> = {\n 'system-ui': 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n Inter: 'var(--font-inter, var(--font-geist-sans), \"Inter\", sans-serif)',\n Roboto: 'var(--font-roboto, \"Roboto\", sans-serif)',\n 'Open Sans': 'var(--font-open-sans, \"Open Sans\", sans-serif)',\n Lato: 'var(--font-lato, \"Lato\", sans-serif)',\n Montserrat: 'var(--font-montserrat, \"Montserrat\", sans-serif)',\n Poppins: 'var(--font-poppins, \"Poppins\", sans-serif)',\n 'Playfair Display': 'var(--font-playfair, \"Playfair Display\", serif)',\n Merriweather: 'var(--font-merriweather, \"Merriweather\", serif)',\n Raleway: 'var(--font-raleway, \"Raleway\", sans-serif)',\n}\n"],"names":["BODY_FONT_OPTIONS","label","en","cs","value","fontFamily","category","HEADING_FONT_OPTIONS","BASE_FONT_SIZE_OPTIONS","LINE_HEIGHT_OPTIONS","FONT_VALUE_TO_CSS","Inter","Roboto","Lato","Montserrat","Poppins","Merriweather","Raleway"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/constants/themeFonts.ts"],"sourcesContent":["// Theme font constants for the plugin.\n//\n// One catalog drives everything: the body/heading selects, the style presets,\n// the admin previews, the CSS emitted for the site and the Google Fonts request\n// that loads the chosen faces. A font a style preset refers to must exist here,\n// otherwise Payload rejects the saved value.\n\nexport type FontCategory = 'sans-serif' | 'serif' | 'display' | 'monospace'\n\nexport interface FontCatalogEntry {\n /** Stored value (the Google Fonts family name, or a system keyword). */\n value: string\n category: FontCategory\n /** Full CSS font-family stack. A `--font-*` variable is honoured first so a\n * site that self-hosts the face with `next/font` keeps using that copy. */\n fontFamily: string\n /** Weights requested from Google Fonts (`null` for system stacks). */\n googleWeights: string | null\n /** Display faces only make sense for headings. */\n headingOnly?: boolean\n}\n\nconst google = (\n value: string,\n category: FontCategory,\n cssVar: string,\n fallback: string,\n googleWeights: string,\n headingOnly?: boolean,\n): FontCatalogEntry => ({\n value,\n category,\n fontFamily: `var(${cssVar}, \"${value}\"), ${fallback}`,\n googleWeights,\n headingOnly,\n})\n\nconst SANS = 'system-ui, -apple-system, \"Segoe UI\", sans-serif'\nconst SERIF = 'Georgia, \"Times New Roman\", serif'\nconst MONO = 'ui-monospace, SFMono-Regular, Menlo, monospace'\n\nexport const FONT_CATALOG: readonly FontCatalogEntry[] = [\n {\n value: 'system-ui',\n category: 'sans-serif',\n fontFamily: SANS,\n googleWeights: null,\n },\n {\n value: 'helvetica',\n category: 'sans-serif',\n fontFamily: '\"Helvetica Neue\", Helvetica, Arial, sans-serif',\n googleWeights: null,\n },\n google('Inter', 'sans-serif', '--font-inter', SANS, '300;400;500;600;700;800'),\n google('Roboto', 'sans-serif', '--font-roboto', SANS, '300;400;500;700;900'),\n google('Open Sans', 'sans-serif', '--font-open-sans', SANS, '300;400;500;600;700;800'),\n google('Lato', 'sans-serif', '--font-lato', SANS, '300;400;700;900'),\n google('Montserrat', 'sans-serif', '--font-montserrat', SANS, '300;400;500;600;700;800'),\n google('Poppins', 'sans-serif', '--font-poppins', SANS, '300;400;500;600;700;800'),\n google('Raleway', 'sans-serif', '--font-raleway', SANS, '300;400;500;600;700;800'),\n google('DM Sans', 'sans-serif', '--font-dm-sans', SANS, '300;400;500;600;700'),\n google('Nunito', 'sans-serif', '--font-nunito', SANS, '300;400;600;700;800'),\n google('Plus Jakarta Sans', 'sans-serif', '--font-plus-jakarta', SANS, '300;400;500;600;700;800'),\n google('Manrope', 'sans-serif', '--font-manrope', SANS, '300;400;500;600;700;800'),\n google('Space Grotesk', 'sans-serif', '--font-space-grotesk', SANS, '300;400;500;600;700'),\n google('Source Sans 3', 'sans-serif', '--font-source-sans', SANS, '300;400;600;700'),\n google('Work Sans', 'sans-serif', '--font-work-sans', SANS, '300;400;500;600;700'),\n google('Archivo', 'sans-serif', '--font-archivo', SANS, '400;500;600;700;800'),\n google('Outfit', 'sans-serif', '--font-outfit', SANS, '300;400;500;600;700'),\n google('Playfair Display', 'serif', '--font-playfair', SERIF, '400;500;600;700;800'),\n google('Merriweather', 'serif', '--font-merriweather', SERIF, '300;400;700;900'),\n google('Lora', 'serif', '--font-lora', SERIF, '400;500;600;700'),\n google('Cormorant Garamond', 'serif', '--font-cormorant', SERIF, '300;400;500;600;700'),\n google('Crimson Pro', 'serif', '--font-crimson', SERIF, '300;400;500;600;700'),\n google('Fraunces', 'serif', '--font-fraunces', SERIF, '300;400;500;600;700'),\n google('Libre Baskerville', 'serif', '--font-libre-baskerville', SERIF, '400;700'),\n google('DM Serif Display', 'display', '--font-dm-serif', SERIF, '400', true),\n google('Bebas Neue', 'display', '--font-bebas', SANS, '400', true),\n google('Archivo Black', 'display', '--font-archivo-black', SANS, '400', true),\n google('Syne', 'display', '--font-syne', SANS, '400;500;600;700;800', true),\n google('Space Mono', 'monospace', '--font-space-mono', MONO, '400;700'),\n google('IBM Plex Mono', 'monospace', '--font-ibm-plex-mono', MONO, '300;400;500;600;700'),\n google('JetBrains Mono', 'monospace', '--font-jetbrains-mono', MONO, '300;400;500;700'),\n]\n\nconst CATALOG_BY_VALUE = new Map(FONT_CATALOG.map((entry) => [entry.value, entry]))\n\n/** Values stored by earlier versions that now map onto a catalog entry. */\nconst LEGACY_FONT_ALIASES: Record<string, string> = {\n 'Source Sans Pro': 'Source Sans 3',\n 'Helvetica Neue': 'helvetica',\n}\n\nexport function getFontCatalogEntry(value?: string | null): FontCatalogEntry | undefined {\n if (!value) return undefined\n return CATALOG_BY_VALUE.get(LEGACY_FONT_ALIASES[value] ?? value)\n}\n\nexport const FONT_CATEGORY_LABELS: Record<FontCategory, { en: string; cs: string }> = {\n 'sans-serif': { en: 'Sans-serif', cs: 'Bezpatkové' },\n serif: { en: 'Serif', cs: 'Patkové' },\n display: { en: 'Display (headings)', cs: 'Výrazné (nadpisy)' },\n monospace: { en: 'Monospace', cs: 'Neproporcionální' },\n}\n\nconst fontLabel = (entry: FontCatalogEntry) =>\n entry.value === 'system-ui'\n ? { en: 'System', cs: 'Systémové' }\n : entry.value === 'helvetica'\n ? { en: 'Helvetica (system)', cs: 'Helvetica (systémové)' }\n : { en: entry.value, cs: entry.value }\n\nconst toOption = (entry: FontCatalogEntry) => ({\n label: fontLabel(entry),\n value: entry.value,\n fontFamily: entry.fontFamily,\n category: entry.category,\n})\n\nconst PRESET_OPTION = { label: { en: 'Use theme preset', cs: 'Podle motivu' }, value: 'preset' }\nconst CUSTOM_OPTION = { label: { en: 'Custom font…', cs: 'Vlastní písmo…' }, value: 'custom' }\n\nexport const BODY_FONT_OPTIONS = [\n PRESET_OPTION,\n ...FONT_CATALOG.filter((entry) => !entry.headingOnly).map(toOption),\n CUSTOM_OPTION,\n]\n\nexport const HEADING_FONT_OPTIONS = [PRESET_OPTION, ...FONT_CATALOG.map(toOption), CUSTOM_OPTION]\n\nexport const BASE_FONT_SIZE_OPTIONS = [\n { label: { en: 'Use theme preset', cs: 'Podle motivu' }, value: 'preset' },\n { label: '14px', value: '14' },\n { label: '15px', value: '15' },\n { label: '16px', value: '16' },\n { label: '17px', value: '17' },\n { label: '18px', value: '18' },\n { label: '20px', value: '20' },\n]\n\nexport const LINE_HEIGHT_OPTIONS = [\n { label: { en: 'Use theme preset', cs: 'Podle motivu' }, value: 'preset' },\n { label: { en: '1.4 — tight', cs: '1,4 — těsné' }, value: '1.4' },\n { label: '1.5', value: '1.5' },\n { label: '1.6', value: '1.6' },\n { label: '1.7', value: '1.7' },\n { label: { en: '1.8 — airy', cs: '1,8 — vzdušné' }, value: '1.8' },\n]\n\nexport const HEADING_WEIGHT_OPTIONS = [\n { label: { en: 'Use theme preset', cs: 'Podle motivu' }, value: 'preset' },\n { label: { en: 'Light (300)', cs: 'Tenké (300)' }, value: '300' },\n { label: { en: 'Regular (400)', cs: 'Normální (400)' }, value: '400' },\n { label: { en: 'Medium (500)', cs: 'Střední (500)' }, value: '500' },\n { label: { en: 'Semibold (600)', cs: 'Polotučné (600)' }, value: '600' },\n { label: { en: 'Bold (700)', cs: 'Tučné (700)' }, value: '700' },\n { label: { en: 'Extra bold (800)', cs: 'Extra tučné (800)' }, value: '800' },\n]\n\nexport const LETTER_SPACING_OPTIONS = [\n { label: { en: 'Use theme preset', cs: 'Podle motivu' }, value: 'preset' },\n { label: { en: 'Tight', cs: 'Těsné' }, value: 'tight' },\n { label: { en: 'Normal', cs: 'Normální' }, value: 'normal' },\n { label: { en: 'Wide', cs: 'Široké' }, value: 'wide' },\n { label: { en: 'Extra wide (caps)', cs: 'Velmi široké (verzálky)' }, value: 'wider' },\n]\n\n/** Heading tracking for each letter-spacing token. `wider` also sets headings in caps. */\nexport const LETTER_SPACING_TO_CSS: Record<string, string> = {\n tight: '-0.025em',\n normal: '0',\n wide: '0.02em',\n wider: '0.08em',\n}\n\n/** Stored base-font-size values are bare pixel numbers ('16'); CSS needs a unit. */\nexport function toFontSizeCss(value?: string | null): string | undefined {\n if (!value || value === 'preset') return undefined\n return /^\\d+(\\.\\d+)?$/.test(value.trim()) ? `${value.trim()}px` : value\n}\n\nexport const FONT_VALUE_TO_CSS: Record<string, string> = Object.fromEntries(\n FONT_CATALOG.map((entry) => [entry.value, entry.fontFamily]),\n)\n\n/**\n * Google Fonts stylesheet URL for the given font values (catalog entries only;\n * system stacks and custom stacks are skipped). Returns null when nothing needs loading.\n */\nexport function buildGoogleFontsHref(values: Array<string | null | undefined>): string | null {\n const families = [...new Set(values.map((value) => getFontCatalogEntry(value)).filter(Boolean))]\n .filter((entry): entry is FontCatalogEntry => Boolean(entry?.googleWeights))\n .map(\n (entry) =>\n `family=${encodeURIComponent(entry.value).replace(/%20/g, '+')}:wght@${entry.googleWeights}`,\n )\n if (families.length === 0) return null\n return `https://fonts.googleapis.com/css2?${families.join('&')}&display=swap`\n}\n\n/** Payload endpoints (under `routes.api`) that serve the catalog fonts from the site's own origin. */\nexport const THEME_FONTS_CSS_PATH = '/theme-fonts/css'\nexport const THEME_FONTS_FILE_PATH = '/theme-fonts/file'\n\n/** Catalog font values hosted by Google, de-duplicated and sorted (stable cache key). */\nexport function parseFontFamilies(raw: string | null | undefined): string[] {\n if (!raw) return []\n const values = raw\n .split(',')\n .map((value) => getFontCatalogEntry(value.trim()))\n .filter((entry): entry is FontCatalogEntry => Boolean(entry?.googleWeights))\n .map((entry) => entry.value)\n return [...new Set(values)].sort()\n}\n\nexport type ThemeFontLoading = 'self-hosted' | 'google' | 'none'\n\n/**\n * Stylesheet URL that loads the given fonts.\n *\n * - `self-hosted` (default): same-origin URL served by the plugin's font\n * endpoints; the visitor's browser never contacts Google (GDPR-friendly).\n * - `google`: the Google Fonts CDN directly.\n * - `none`: nothing; the site loads the faces itself (e.g. `next/font`).\n */\nexport function buildThemeFontsHref(\n values: Array<string | null | undefined>,\n options: { mode?: ThemeFontLoading; apiRoute?: string } = {},\n): string | null {\n const { mode = 'self-hosted', apiRoute = '/api' } = options\n if (mode === 'none') return null\n const families = parseFontFamilies(values.filter(Boolean).join(','))\n if (families.length === 0) return null\n if (mode === 'google') return buildGoogleFontsHref(families)\n return `${apiRoute}${THEME_FONTS_CSS_PATH}?f=${families.map(encodeURIComponent).join(',')}`\n}\n"],"names":["google","value","category","cssVar","fallback","googleWeights","headingOnly","fontFamily","SANS","SERIF","MONO","FONT_CATALOG","CATALOG_BY_VALUE","Map","map","entry","LEGACY_FONT_ALIASES","getFontCatalogEntry","undefined","get","FONT_CATEGORY_LABELS","en","cs","serif","display","monospace","fontLabel","toOption","label","PRESET_OPTION","CUSTOM_OPTION","BODY_FONT_OPTIONS","filter","HEADING_FONT_OPTIONS","BASE_FONT_SIZE_OPTIONS","LINE_HEIGHT_OPTIONS","HEADING_WEIGHT_OPTIONS","LETTER_SPACING_OPTIONS","LETTER_SPACING_TO_CSS","tight","normal","wide","wider","toFontSizeCss","test","trim","FONT_VALUE_TO_CSS","Object","fromEntries","buildGoogleFontsHref","values","families","Set","Boolean","encodeURIComponent","replace","length","join","THEME_FONTS_CSS_PATH","THEME_FONTS_FILE_PATH","parseFontFamilies","raw","split","sort","buildThemeFontsHref","options","mode","apiRoute"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Endpoint } from 'payload';
2
+ /** Rewrites fonts.gstatic.com URLs in Google's CSS to the self-hosted file endpoint. */
3
+ export declare function rewriteFontUrls(css: string, fileEndpoint: string): string;
4
+ export declare const themeFontEndpoints: Endpoint[];
5
+ //# sourceMappingURL=themeFonts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeFonts.d.ts","sourceRoot":"","sources":["../../src/endpoints/themeFonts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,SAAS,CAAA;AAgDvD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAIzE;AAmFD,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EAAgC,CAAA"}