@kilivi/payloadcms-theme-management 0.5.9 → 1.0.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 (56) hide show
  1. package/README.md +531 -40
  2. package/dist/app/api/google-fonts/route.d.ts +31 -0
  3. package/dist/app/api/google-fonts/route.d.ts.map +1 -0
  4. package/dist/app/api/google-fonts/route.js +925 -0
  5. package/dist/app/api/google-fonts/route.js.map +1 -0
  6. package/dist/fields/ThemePreviewField.d.ts.map +1 -1
  7. package/dist/fields/ThemePreviewField.js +6 -2
  8. package/dist/fields/ThemePreviewField.js.map +1 -1
  9. package/dist/fields/themeConfigurationField.d.ts.map +1 -1
  10. package/dist/fields/themeConfigurationField.js +16 -8
  11. package/dist/fields/themeConfigurationField.js.map +1 -1
  12. package/dist/globals/ThemeSettings/FontPicker/FontPreview.d.ts +17 -0
  13. package/dist/globals/ThemeSettings/FontPicker/FontPreview.d.ts.map +1 -0
  14. package/dist/globals/ThemeSettings/FontPicker/FontPreview.js +229 -0
  15. package/dist/globals/ThemeSettings/FontPicker/FontPreview.js.map +1 -0
  16. package/dist/globals/ThemeSettings/FontPicker/PreviewContent.d.ts +20 -0
  17. package/dist/globals/ThemeSettings/FontPicker/PreviewContent.d.ts.map +1 -0
  18. package/dist/globals/ThemeSettings/FontPicker/PreviewContent.js +400 -0
  19. package/dist/globals/ThemeSettings/FontPicker/PreviewContent.js.map +1 -0
  20. package/dist/globals/ThemeSettings/FontPicker/index.d.ts +25 -0
  21. package/dist/globals/ThemeSettings/FontPicker/index.d.ts.map +1 -0
  22. package/dist/globals/ThemeSettings/FontPicker/index.js +483 -0
  23. package/dist/globals/ThemeSettings/FontPicker/index.js.map +1 -0
  24. package/dist/globals/ThemeSettings/FontPicker/styles.css +337 -0
  25. package/dist/globals/ThemeSettings/FontPicker/translations.d.ts +76 -0
  26. package/dist/globals/ThemeSettings/FontPicker/translations.d.ts.map +1 -0
  27. package/dist/globals/ThemeSettings/FontPicker/translations.js +147 -0
  28. package/dist/globals/ThemeSettings/FontPicker/translations.js.map +1 -0
  29. package/dist/globals/ThemeSettings/config.d.ts +10 -0
  30. package/dist/globals/ThemeSettings/config.d.ts.map +1 -0
  31. package/dist/globals/ThemeSettings/config.js +171 -0
  32. package/dist/globals/ThemeSettings/config.js.map +1 -0
  33. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.d.ts +5 -0
  34. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.d.ts.map +1 -0
  35. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.js +177 -0
  36. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.js.map +1 -0
  37. package/dist/globals/ThemeSettings/fields/TypographyInfoField.d.ts +5 -0
  38. package/dist/globals/ThemeSettings/fields/TypographyInfoField.d.ts.map +1 -0
  39. package/dist/globals/ThemeSettings/fields/TypographyInfoField.js +89 -0
  40. package/dist/globals/ThemeSettings/fields/TypographyInfoField.js.map +1 -0
  41. package/dist/globals/ThemeSettings/index.d.ts +4 -0
  42. package/dist/globals/ThemeSettings/index.d.ts.map +1 -0
  43. package/dist/globals/ThemeSettings/index.js +4 -0
  44. package/dist/globals/ThemeSettings/index.js.map +1 -0
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +119 -20
  47. package/dist/index.js.map +1 -1
  48. package/dist/types.d.ts +9 -1
  49. package/dist/types.d.ts.map +1 -1
  50. package/dist/types.js.map +1 -1
  51. package/dist/utilities/getThemeSettings.d.ts +34 -0
  52. package/dist/utilities/getThemeSettings.d.ts.map +1 -0
  53. package/dist/utilities/getThemeSettings.js +67 -0
  54. package/dist/utilities/getThemeSettings.js.map +1 -0
  55. package/package.json +24 -23
  56. package/LICENSE.MD +0 -9
@@ -0,0 +1,925 @@
1
+ import { NextResponse } from 'next/server';
2
+ const cache = new Map();
3
+ const CACHE_DURATION = 24 * 60 * 60 * 1000 // 24 hours
4
+ ;
5
+ // Fallback fonts (used when API key is missing or API fails)
6
+ const FALLBACK_FONTS = [
7
+ {
8
+ family: 'Inter',
9
+ variants: [
10
+ '100',
11
+ '200',
12
+ '300',
13
+ '400',
14
+ '500',
15
+ '600',
16
+ '700',
17
+ '800',
18
+ '900'
19
+ ],
20
+ subsets: [
21
+ 'latin',
22
+ 'latin-ext',
23
+ 'cyrillic',
24
+ 'cyrillic-ext',
25
+ 'greek',
26
+ 'greek-ext',
27
+ 'vietnamese'
28
+ ],
29
+ category: 'sans-serif',
30
+ version: 'v13',
31
+ lastModified: '2024-01-01',
32
+ files: {
33
+ '400': 'https://fonts.gstatic.com/s/inter/v13/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZ9hiA.woff2'
34
+ }
35
+ },
36
+ {
37
+ family: 'Roboto',
38
+ variants: [
39
+ '100',
40
+ '300',
41
+ '400',
42
+ '500',
43
+ '700',
44
+ '900'
45
+ ],
46
+ subsets: [
47
+ 'latin',
48
+ 'latin-ext',
49
+ 'cyrillic',
50
+ 'cyrillic-ext',
51
+ 'greek',
52
+ 'greek-ext',
53
+ 'vietnamese'
54
+ ],
55
+ category: 'sans-serif',
56
+ version: 'v30',
57
+ lastModified: '2024-01-01',
58
+ files: {
59
+ '400': 'https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2'
60
+ }
61
+ },
62
+ {
63
+ family: 'Open Sans',
64
+ variants: [
65
+ '300',
66
+ '400',
67
+ '500',
68
+ '600',
69
+ '700',
70
+ '800'
71
+ ],
72
+ subsets: [
73
+ 'latin',
74
+ 'latin-ext',
75
+ 'cyrillic',
76
+ 'cyrillic-ext',
77
+ 'greek',
78
+ 'greek-ext',
79
+ 'hebrew',
80
+ 'vietnamese'
81
+ ],
82
+ category: 'sans-serif',
83
+ version: 'v35',
84
+ lastModified: '2024-01-01',
85
+ files: {
86
+ '400': 'https://fonts.gstatic.com/s/opensans/v35/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4gaVI.woff2'
87
+ }
88
+ },
89
+ {
90
+ family: 'Lato',
91
+ variants: [
92
+ '100',
93
+ '300',
94
+ '400',
95
+ '700',
96
+ '900'
97
+ ],
98
+ subsets: [
99
+ 'latin',
100
+ 'latin-ext'
101
+ ],
102
+ category: 'sans-serif',
103
+ version: 'v24',
104
+ lastModified: '2024-01-01',
105
+ files: {
106
+ '400': 'https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjx4wXg.woff2'
107
+ }
108
+ },
109
+ {
110
+ family: 'Montserrat',
111
+ variants: [
112
+ '100',
113
+ '200',
114
+ '300',
115
+ '400',
116
+ '500',
117
+ '600',
118
+ '700',
119
+ '800',
120
+ '900'
121
+ ],
122
+ subsets: [
123
+ 'latin',
124
+ 'latin-ext',
125
+ 'cyrillic',
126
+ 'cyrillic-ext',
127
+ 'vietnamese'
128
+ ],
129
+ category: 'sans-serif',
130
+ version: 'v26',
131
+ lastModified: '2024-01-01',
132
+ files: {
133
+ '400': 'https://fonts.gstatic.com/s/montserrat/v26/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Ew-Y3tcoqK5.woff2'
134
+ }
135
+ },
136
+ {
137
+ family: 'Poppins',
138
+ variants: [
139
+ '100',
140
+ '200',
141
+ '300',
142
+ '400',
143
+ '500',
144
+ '600',
145
+ '700',
146
+ '800',
147
+ '900'
148
+ ],
149
+ subsets: [
150
+ 'latin',
151
+ 'latin-ext'
152
+ ],
153
+ category: 'sans-serif',
154
+ version: 'v20',
155
+ lastModified: '2024-01-01',
156
+ files: {
157
+ '400': 'https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJfecg.woff2'
158
+ }
159
+ },
160
+ {
161
+ family: 'Nunito',
162
+ variants: [
163
+ '200',
164
+ '300',
165
+ '400',
166
+ '500',
167
+ '600',
168
+ '700',
169
+ '800',
170
+ '900'
171
+ ],
172
+ subsets: [
173
+ 'latin',
174
+ 'latin-ext',
175
+ 'cyrillic',
176
+ 'cyrillic-ext',
177
+ 'vietnamese'
178
+ ],
179
+ category: 'sans-serif',
180
+ version: 'v26',
181
+ lastModified: '2024-01-01',
182
+ files: {
183
+ '400': 'https://fonts.gstatic.com/s/nunito/v26/XRXI3I6Li01BKofiOc5wtlZ2di8HDLshdTQ3j77e.woff2'
184
+ }
185
+ },
186
+ {
187
+ family: 'Raleway',
188
+ variants: [
189
+ '100',
190
+ '200',
191
+ '300',
192
+ '400',
193
+ '500',
194
+ '600',
195
+ '700',
196
+ '800',
197
+ '900'
198
+ ],
199
+ subsets: [
200
+ 'latin',
201
+ 'latin-ext',
202
+ 'cyrillic',
203
+ 'cyrillic-ext'
204
+ ],
205
+ category: 'sans-serif',
206
+ version: 'v29',
207
+ lastModified: '2024-01-01',
208
+ files: {
209
+ '400': 'https://fonts.gstatic.com/s/raleway/v29/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrU.woff2'
210
+ }
211
+ },
212
+ {
213
+ family: 'Playfair Display',
214
+ variants: [
215
+ '400',
216
+ '500',
217
+ '600',
218
+ '700',
219
+ '800',
220
+ '900'
221
+ ],
222
+ subsets: [
223
+ 'latin',
224
+ 'latin-ext',
225
+ 'cyrillic'
226
+ ],
227
+ category: 'serif',
228
+ version: 'v37',
229
+ lastModified: '2024-01-01',
230
+ files: {
231
+ '400': 'https://fonts.gstatic.com/s/playfairdisplay/v37/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvUDQZNLo_U2r.woff2'
232
+ }
233
+ },
234
+ {
235
+ family: 'Merriweather',
236
+ variants: [
237
+ '300',
238
+ '400',
239
+ '700',
240
+ '900'
241
+ ],
242
+ subsets: [
243
+ 'latin',
244
+ 'latin-ext',
245
+ 'cyrillic',
246
+ 'cyrillic-ext',
247
+ 'vietnamese'
248
+ ],
249
+ category: 'serif',
250
+ version: 'v30',
251
+ lastModified: '2024-01-01',
252
+ files: {
253
+ '400': 'https://fonts.gstatic.com/s/merriweather/v30/u-440qyriQwlOrhSvowK_l5-fCZMdeX3rg.woff2'
254
+ }
255
+ },
256
+ {
257
+ family: 'PT Sans',
258
+ variants: [
259
+ '400',
260
+ '700'
261
+ ],
262
+ subsets: [
263
+ 'latin',
264
+ 'latin-ext',
265
+ 'cyrillic',
266
+ 'cyrillic-ext'
267
+ ],
268
+ category: 'sans-serif',
269
+ version: 'v17',
270
+ lastModified: '2024-01-01',
271
+ files: {
272
+ '400': 'https://fonts.gstatic.com/s/ptsans/v17/jizaRExUiTo99u79D0KExcOPIDU.woff2'
273
+ }
274
+ },
275
+ {
276
+ family: 'Noto Sans',
277
+ variants: [
278
+ '100',
279
+ '200',
280
+ '300',
281
+ '400',
282
+ '500',
283
+ '600',
284
+ '700',
285
+ '800',
286
+ '900'
287
+ ],
288
+ subsets: [
289
+ 'latin',
290
+ 'latin-ext',
291
+ 'cyrillic',
292
+ 'cyrillic-ext',
293
+ 'greek',
294
+ 'greek-ext',
295
+ 'vietnamese'
296
+ ],
297
+ category: 'sans-serif',
298
+ version: 'v36',
299
+ lastModified: '2024-01-01',
300
+ files: {
301
+ '400': 'https://fonts.gstatic.com/s/notosans/v36/o-0mIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjcz6L1SoM-jCpoiyD9A-9a6Vc.woff2'
302
+ }
303
+ },
304
+ {
305
+ family: 'Ubuntu',
306
+ variants: [
307
+ '300',
308
+ '400',
309
+ '500',
310
+ '700'
311
+ ],
312
+ subsets: [
313
+ 'latin',
314
+ 'latin-ext',
315
+ 'cyrillic',
316
+ 'cyrillic-ext',
317
+ 'greek',
318
+ 'greek-ext'
319
+ ],
320
+ category: 'sans-serif',
321
+ version: 'v20',
322
+ lastModified: '2024-01-01',
323
+ files: {
324
+ '400': 'https://fonts.gstatic.com/s/ubuntu/v20/4iCs6KVjbNBYlgoKcg72j00.woff2'
325
+ }
326
+ },
327
+ {
328
+ family: 'Manrope',
329
+ variants: [
330
+ '200',
331
+ '300',
332
+ '400',
333
+ '500',
334
+ '600',
335
+ '700',
336
+ '800'
337
+ ],
338
+ subsets: [
339
+ 'latin',
340
+ 'latin-ext',
341
+ 'cyrillic',
342
+ 'cyrillic-ext',
343
+ 'greek',
344
+ 'vietnamese'
345
+ ],
346
+ category: 'sans-serif',
347
+ version: 'v15',
348
+ lastModified: '2024-01-01',
349
+ files: {
350
+ '400': 'https://fonts.gstatic.com/s/manrope/v15/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk59FO_F87jxeN7B.woff2'
351
+ }
352
+ },
353
+ {
354
+ family: 'Mulish',
355
+ variants: [
356
+ '200',
357
+ '300',
358
+ '400',
359
+ '500',
360
+ '600',
361
+ '700',
362
+ '800',
363
+ '900'
364
+ ],
365
+ subsets: [
366
+ 'latin',
367
+ 'latin-ext',
368
+ 'cyrillic',
369
+ 'cyrillic-ext',
370
+ 'vietnamese'
371
+ ],
372
+ category: 'sans-serif',
373
+ version: 'v13',
374
+ lastModified: '2024-01-01',
375
+ files: {
376
+ '400': 'https://fonts.gstatic.com/s/mulish/v13/1Ptyg83HX_SGhgqO0yLcmjzUAuWexZNRwaClGrw-PTY.woff2'
377
+ }
378
+ },
379
+ {
380
+ family: 'Barlow',
381
+ variants: [
382
+ '100',
383
+ '200',
384
+ '300',
385
+ '400',
386
+ '500',
387
+ '600',
388
+ '700',
389
+ '800',
390
+ '900'
391
+ ],
392
+ subsets: [
393
+ 'latin',
394
+ 'latin-ext',
395
+ 'vietnamese'
396
+ ],
397
+ category: 'sans-serif',
398
+ version: 'v12',
399
+ lastModified: '2024-01-01',
400
+ files: {
401
+ '400': 'https://fonts.gstatic.com/s/barlow/v12/7cHpv4kjgoGqM7E3b8s8yn4hnCci.woff2'
402
+ }
403
+ },
404
+ {
405
+ family: 'Work Sans',
406
+ variants: [
407
+ '100',
408
+ '200',
409
+ '300',
410
+ '400',
411
+ '500',
412
+ '600',
413
+ '700',
414
+ '800',
415
+ '900'
416
+ ],
417
+ subsets: [
418
+ 'latin',
419
+ 'latin-ext',
420
+ 'vietnamese'
421
+ ],
422
+ category: 'sans-serif',
423
+ version: 'v19',
424
+ lastModified: '2024-01-01',
425
+ files: {
426
+ '400': 'https://fonts.gstatic.com/s/worksans/v19/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nWNigDp6_cOyA.woff2'
427
+ }
428
+ },
429
+ {
430
+ family: 'Quicksand',
431
+ variants: [
432
+ '300',
433
+ '400',
434
+ '500',
435
+ '600',
436
+ '700'
437
+ ],
438
+ subsets: [
439
+ 'latin',
440
+ 'latin-ext',
441
+ 'vietnamese'
442
+ ],
443
+ category: 'sans-serif',
444
+ version: 'v31',
445
+ lastModified: '2024-01-01',
446
+ files: {
447
+ '400': 'https://fonts.gstatic.com/s/quicksand/v31/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-xDwxUD2GF9Zc.woff2'
448
+ }
449
+ },
450
+ {
451
+ family: 'Karla',
452
+ variants: [
453
+ '200',
454
+ '300',
455
+ '400',
456
+ '500',
457
+ '600',
458
+ '700',
459
+ '800'
460
+ ],
461
+ subsets: [
462
+ 'latin',
463
+ 'latin-ext'
464
+ ],
465
+ category: 'sans-serif',
466
+ version: 'v31',
467
+ lastModified: '2024-01-01',
468
+ files: {
469
+ '400': 'https://fonts.gstatic.com/s/karla/v31/qkBIXvYC6trAT55ZBi1ueQVIjQTDeJqqFENLR7fHGw.woff2'
470
+ }
471
+ },
472
+ {
473
+ family: 'Rubik',
474
+ variants: [
475
+ '300',
476
+ '400',
477
+ '500',
478
+ '600',
479
+ '700',
480
+ '800',
481
+ '900'
482
+ ],
483
+ subsets: [
484
+ 'latin',
485
+ 'latin-ext',
486
+ 'cyrillic',
487
+ 'cyrillic-ext',
488
+ 'hebrew'
489
+ ],
490
+ category: 'sans-serif',
491
+ version: 'v28',
492
+ lastModified: '2024-01-01',
493
+ files: {
494
+ '400': 'https://fonts.gstatic.com/s/rubik/v28/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFV0U1.woff2'
495
+ }
496
+ },
497
+ {
498
+ family: 'DM Sans',
499
+ variants: [
500
+ '100',
501
+ '200',
502
+ '300',
503
+ '400',
504
+ '500',
505
+ '600',
506
+ '700',
507
+ '800',
508
+ '900'
509
+ ],
510
+ subsets: [
511
+ 'latin',
512
+ 'latin-ext'
513
+ ],
514
+ category: 'sans-serif',
515
+ version: 'v15',
516
+ lastModified: '2024-01-01',
517
+ files: {
518
+ '400': 'https://fonts.gstatic.com/s/dmsans/v15/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRR236MF0WOQ.woff2'
519
+ }
520
+ },
521
+ {
522
+ family: 'Josefin Sans',
523
+ variants: [
524
+ '100',
525
+ '200',
526
+ '300',
527
+ '400',
528
+ '500',
529
+ '600',
530
+ '700'
531
+ ],
532
+ subsets: [
533
+ 'latin',
534
+ 'latin-ext',
535
+ 'vietnamese'
536
+ ],
537
+ category: 'sans-serif',
538
+ version: 'v32',
539
+ lastModified: '2024-01-01',
540
+ files: {
541
+ '400': 'https://fonts.gstatic.com/s/josefinsans/v32/Qw3PZQNVED7rKGKxtqIqX5E-AVSJrOCfjY46_DjRXMFrLgTsQV0.woff2'
542
+ }
543
+ },
544
+ {
545
+ family: 'Libre Baskerville',
546
+ variants: [
547
+ '400',
548
+ '700'
549
+ ],
550
+ subsets: [
551
+ 'latin',
552
+ 'latin-ext'
553
+ ],
554
+ category: 'serif',
555
+ version: 'v14',
556
+ lastModified: '2024-01-01',
557
+ files: {
558
+ '400': 'https://fonts.gstatic.com/s/librebaskerville/v14/kmKnZrc3Hgbbcjq75U4uslyuy4kn0pNeYRI4CN2V.woff2'
559
+ }
560
+ },
561
+ {
562
+ family: 'Source Sans 3',
563
+ variants: [
564
+ '200',
565
+ '300',
566
+ '400',
567
+ '500',
568
+ '600',
569
+ '700',
570
+ '800',
571
+ '900'
572
+ ],
573
+ subsets: [
574
+ 'latin',
575
+ 'latin-ext',
576
+ 'cyrillic',
577
+ 'cyrillic-ext',
578
+ 'greek',
579
+ 'greek-ext',
580
+ 'vietnamese'
581
+ ],
582
+ category: 'sans-serif',
583
+ version: 'v15',
584
+ lastModified: '2024-01-01',
585
+ files: {
586
+ '400': 'https://fonts.gstatic.com/s/sourcesans3/v15/nwpBtKy2OAdR1K-IwhWudF-R9QMylBJAV3Bo8Kw461EN_io6npfB.woff2'
587
+ }
588
+ },
589
+ {
590
+ family: 'Be Vietnam Pro',
591
+ variants: [
592
+ '100',
593
+ '200',
594
+ '300',
595
+ '400',
596
+ '500',
597
+ '600',
598
+ '700',
599
+ '800',
600
+ '900'
601
+ ],
602
+ subsets: [
603
+ 'latin',
604
+ 'latin-ext',
605
+ 'vietnamese'
606
+ ],
607
+ category: 'sans-serif',
608
+ version: 'v11',
609
+ lastModified: '2024-01-01',
610
+ files: {
611
+ '400': 'https://fonts.gstatic.com/s/bevietnampro/v11/QdVMSTAyLFyeg_IDWvOJmVES_HRUBX8YYbAiah8.woff2'
612
+ }
613
+ },
614
+ {
615
+ family: 'Lexend',
616
+ variants: [
617
+ '100',
618
+ '200',
619
+ '300',
620
+ '400',
621
+ '500',
622
+ '600',
623
+ '700',
624
+ '800',
625
+ '900'
626
+ ],
627
+ subsets: [
628
+ 'latin',
629
+ 'latin-ext',
630
+ 'vietnamese'
631
+ ],
632
+ category: 'sans-serif',
633
+ version: 'v19',
634
+ lastModified: '2024-01-01',
635
+ files: {
636
+ '400': 'https://fonts.gstatic.com/s/lexend/v19/wlptgwvFAVdoq2_F94zlCfv0bz1WCzsX_LBte6KuGEo.woff2'
637
+ }
638
+ },
639
+ {
640
+ family: 'Archivo',
641
+ variants: [
642
+ '100',
643
+ '200',
644
+ '300',
645
+ '400',
646
+ '500',
647
+ '600',
648
+ '700',
649
+ '800',
650
+ '900'
651
+ ],
652
+ subsets: [
653
+ 'latin',
654
+ 'latin-ext',
655
+ 'vietnamese'
656
+ ],
657
+ category: 'sans-serif',
658
+ version: 'v19',
659
+ lastModified: '2024-01-01',
660
+ files: {
661
+ '400': 'https://fonts.gstatic.com/s/archivo/v19/k3kQo8UDI-1M0wlSV9XAw6lQkqWY8Q82sJaRE-NWIDdgffTTNDJp8B1oJ0vyVQ.woff2'
662
+ }
663
+ },
664
+ {
665
+ family: 'Space Grotesk',
666
+ variants: [
667
+ '300',
668
+ '400',
669
+ '500',
670
+ '600',
671
+ '700'
672
+ ],
673
+ subsets: [
674
+ 'latin',
675
+ 'latin-ext',
676
+ 'vietnamese'
677
+ ],
678
+ category: 'sans-serif',
679
+ version: 'v16',
680
+ lastModified: '2024-01-01',
681
+ files: {
682
+ '400': 'https://fonts.gstatic.com/s/spacegrotesk/v16/V8mQoQDjQSkFtoMM3T6r8E7mF71Q-gOoraIAEj7oUUsjNsFjTDJK.woff2'
683
+ }
684
+ },
685
+ {
686
+ family: 'Outfit',
687
+ variants: [
688
+ '100',
689
+ '200',
690
+ '300',
691
+ '400',
692
+ '500',
693
+ '600',
694
+ '700',
695
+ '800',
696
+ '900'
697
+ ],
698
+ subsets: [
699
+ 'latin',
700
+ 'latin-ext'
701
+ ],
702
+ category: 'sans-serif',
703
+ version: 'v11',
704
+ lastModified: '2024-01-01',
705
+ files: {
706
+ '400': 'https://fonts.gstatic.com/s/outfit/v11/QGYyz_MVcBeNP4NjuGObqx1XmO1I4TC1O4a0EwEpq6W1J3f6ltDB.woff2'
707
+ }
708
+ },
709
+ {
710
+ family: 'Crimson Text',
711
+ variants: [
712
+ '400',
713
+ '600',
714
+ '700'
715
+ ],
716
+ subsets: [
717
+ 'latin',
718
+ 'latin-ext',
719
+ 'vietnamese'
720
+ ],
721
+ category: 'serif',
722
+ version: 'v19',
723
+ lastModified: '2024-01-01',
724
+ files: {
725
+ '400': 'https://fonts.gstatic.com/s/crimsontext/v19/wlp2gwHKFkZgtmSR3NB0oRJvaAJSA_JN3Q.woff2'
726
+ }
727
+ },
728
+ {
729
+ family: 'Inconsolata',
730
+ variants: [
731
+ '200',
732
+ '300',
733
+ '400',
734
+ '500',
735
+ '600',
736
+ '700',
737
+ '800',
738
+ '900'
739
+ ],
740
+ subsets: [
741
+ 'latin',
742
+ 'latin-ext',
743
+ 'vietnamese'
744
+ ],
745
+ category: 'monospace',
746
+ version: 'v32',
747
+ lastModified: '2024-01-01',
748
+ files: {
749
+ '400': 'https://fonts.gstatic.com/s/inconsolata/v32/QldgNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLYxYWI2qfdm7Lpp4U8aRr8lleY2co.woff2'
750
+ }
751
+ },
752
+ {
753
+ family: 'Dancing Script',
754
+ variants: [
755
+ '400',
756
+ '500',
757
+ '600',
758
+ '700'
759
+ ],
760
+ subsets: [
761
+ 'latin',
762
+ 'latin-ext',
763
+ 'vietnamese'
764
+ ],
765
+ category: 'handwriting',
766
+ version: 'v25',
767
+ lastModified: '2024-01-01',
768
+ files: {
769
+ '400': 'https://fonts.gstatic.com/s/dancingscript/v25/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7B1i03Rep8ltA.woff2'
770
+ }
771
+ },
772
+ {
773
+ family: 'Pacifico',
774
+ variants: [
775
+ '400'
776
+ ],
777
+ subsets: [
778
+ 'latin',
779
+ 'latin-ext',
780
+ 'cyrillic',
781
+ 'cyrillic-ext',
782
+ 'vietnamese'
783
+ ],
784
+ category: 'handwriting',
785
+ version: 'v22',
786
+ lastModified: '2024-01-01',
787
+ files: {
788
+ '400': 'https://fonts.gstatic.com/s/pacifico/v22/FwZY7-Qmy14u9lezJ96A4sijpFu_.woff2'
789
+ }
790
+ },
791
+ {
792
+ family: 'Bebas Neue',
793
+ variants: [
794
+ '400'
795
+ ],
796
+ subsets: [
797
+ 'latin',
798
+ 'latin-ext'
799
+ ],
800
+ category: 'display',
801
+ version: 'v14',
802
+ lastModified: '2024-01-01',
803
+ files: {
804
+ '400': 'https://fonts.gstatic.com/s/bebasneue/v14/JTUSjIg69CK48gW7PXooxW5rygbi49c.woff2'
805
+ }
806
+ },
807
+ {
808
+ family: 'Righteous',
809
+ variants: [
810
+ '400'
811
+ ],
812
+ subsets: [
813
+ 'latin',
814
+ 'latin-ext'
815
+ ],
816
+ category: 'display',
817
+ version: 'v17',
818
+ lastModified: '2024-01-01',
819
+ files: {
820
+ '400': 'https://fonts.gstatic.com/s/righteous/v17/1cXxaUPXBpj2rGoU7C9mj3uEicG01A.woff2'
821
+ }
822
+ }
823
+ ];
824
+ /**
825
+ * Filter fonts based on search, category, and subset
826
+ */ function filterFonts(fonts, search, category, subset) {
827
+ let filtered = fonts;
828
+ // Filter by search
829
+ if (search) {
830
+ const searchLower = search.toLowerCase();
831
+ filtered = filtered.filter((font)=>font.family.toLowerCase().includes(searchLower));
832
+ }
833
+ // Filter by category
834
+ if (category !== 'all') {
835
+ filtered = filtered.filter((font)=>font.category === category);
836
+ }
837
+ // Filter by subset
838
+ if (subset !== 'all') {
839
+ filtered = filtered.filter((font)=>font.subsets.includes(subset));
840
+ }
841
+ return filtered;
842
+ }
843
+ /**
844
+ * GET /api/google-fonts
845
+ *
846
+ * Query params:
847
+ * - search: string (optional) - Search query
848
+ * - category: FontCategory (optional) - Font category filter
849
+ * - subset: LanguageSubset (optional) - Language subset filter
850
+ * - limit: number (optional, default 100) - Number of fonts to return
851
+ * - offset: number (optional, default 0) - Pagination offset
852
+ */ export async function GET(request) {
853
+ try {
854
+ const { searchParams } = new URL(request.url);
855
+ const search = searchParams.get('search') || '';
856
+ const category = searchParams.get('category') || 'all';
857
+ const subset = searchParams.get('subset') || 'all';
858
+ const limit = Math.min(Number.parseInt(searchParams.get('limit') || '100'), 200);
859
+ const offset = Number.parseInt(searchParams.get('offset') || '0');
860
+ // Generate cache key
861
+ const cacheKey = `${search}|${category}|${subset}`;
862
+ // Check cache
863
+ const cached = cache.get(cacheKey);
864
+ if (cached && Date.now() - cached.timestamp < CACHE_DURATION) {
865
+ const fonts = cached.data.fonts.slice(offset, offset + limit);
866
+ return NextResponse.json({
867
+ fonts,
868
+ total: cached.data.total
869
+ });
870
+ }
871
+ // Get Google Fonts API key from environment
872
+ const apiKey = process.env.GOOGLE_FONTS_API_KEY;
873
+ let allFonts = [];
874
+ if (apiKey) {
875
+ try {
876
+ // Fetch from Google Fonts API
877
+ const response = await fetch(`https://www.googleapis.com/webfonts/v1/webfonts?key=${apiKey}&sort=popularity`, {
878
+ next: {
879
+ revalidate: 86400
880
+ }
881
+ });
882
+ if (!response.ok) {
883
+ throw new Error(`Google Fonts API error: ${response.statusText}`);
884
+ }
885
+ const data = await response.json();
886
+ allFonts = data.items || [];
887
+ } catch (error) {
888
+ console.error('Google Fonts API error:', error);
889
+ // Fall back to fallback fonts
890
+ allFonts = FALLBACK_FONTS;
891
+ }
892
+ } else {
893
+ // No API key, use fallback fonts
894
+ console.warn('GOOGLE_FONTS_API_KEY not set, using fallback fonts');
895
+ allFonts = FALLBACK_FONTS;
896
+ }
897
+ // Filter fonts
898
+ const filteredFonts = filterFonts(allFonts, search, category, subset);
899
+ // Cache the full filtered result
900
+ cache.set(cacheKey, {
901
+ data: {
902
+ fonts: filteredFonts,
903
+ total: filteredFonts.length
904
+ },
905
+ timestamp: Date.now()
906
+ });
907
+ // Return paginated result
908
+ const fonts = filteredFonts.slice(offset, offset + limit);
909
+ return NextResponse.json({
910
+ fonts,
911
+ total: filteredFonts.length
912
+ });
913
+ } catch (error) {
914
+ console.error('Error in /api/google-fonts:', error);
915
+ return NextResponse.json({
916
+ error: 'Failed to fetch Google Fonts',
917
+ fonts: FALLBACK_FONTS.slice(0, 100),
918
+ total: FALLBACK_FONTS.length
919
+ }, {
920
+ status: 500
921
+ });
922
+ }
923
+ }
924
+
925
+ //# sourceMappingURL=route.js.map