1- // import type { Theme } from " $lib/stores/theme" ;
1+ import { USE_SELF_HOSTED_FONTS , SELF_HOSTED_FONTS_PATH , GOOGLE_FONTS_CDN } from ' $lib/config/font-config' ;
22
3- const primaryCdn = 'https://fonts.googleapis.com/css2?family=' ;
3+ const primaryCdn = GOOGLE_FONTS_CDN ;
44
55interface Theme {
66 id : string ;
@@ -14,70 +14,109 @@ interface Theme {
1414 } ;
1515}
1616
17+ // Fonts available for self-hosting (only these have been downloaded)
18+ const SELF_HOSTED_AVAILABLE = [ 'Fira Code' , 'Fira Sans' , 'Inter' ] ;
19+
20+ // Helper to get font URL (Google Fonts CDN or self-hosted)
21+ // Only uses self-hosted path if the font family is available locally
22+ const getFontUrl = ( fontFamily : string , googleFontsUrl : string ) => {
23+ if ( USE_SELF_HOSTED_FONTS && SELF_HOSTED_AVAILABLE . includes ( fontFamily ) ) {
24+ return SELF_HOSTED_FONTS_PATH ;
25+ }
26+ return googleFontsUrl ;
27+ } ;
28+
1729const fonts = {
1830 Inter : {
1931 name : 'Inter' ,
20- url : `${ primaryCdn } Inter:wght@300; 400;500;600;700&family=Roboto+Mono:wght@400;500& display=swap` ,
32+ url : getFontUrl ( 'Inter' , `${ primaryCdn } Inter:wght@400;500;600;700&display=swap&subset=latin` ) ,
2133 fallback : 'sans-serif' ,
2234 } ,
2335 Poppins : {
2436 name : 'Poppins' ,
25- url : `${ primaryCdn } Lora:ital,wght@0,400..700;1,400..700&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap` ,
26- fallback : 'sans' ,
37+ url : getFontUrl (
38+ 'Poppins' ,
39+ `${ primaryCdn } Poppins:wght@400;500;600;700&family=Lora:wght@400;500;600;700&display=swap&subset=latin` ,
40+ ) ,
41+ fallback : 'sans-serif' ,
2742 } ,
2843 Montserrat : {
2944 name : 'Montserrat' ,
30- url : `${ primaryCdn } Montserrat:wght@300;400;500;600;700;800;900&family=IBM+Plex+Mono:wght@400;500;600;700&display=swap` ,
45+ url : getFontUrl (
46+ 'Montserrat' ,
47+ `${ primaryCdn } Montserrat:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap&subset=latin` ,
48+ ) ,
3149 fallback : 'sans-serif' ,
3250 } ,
3351 Raleway : {
3452 name : 'Raleway' ,
35- url : `${ primaryCdn } Raleway:wght@300;400;500;600;700;800&family=Source+Code+Pro:wght@400;500;600;700&display=swap` ,
53+ url : getFontUrl (
54+ 'Raleway' ,
55+ `${ primaryCdn } Raleway:wght@400;500;600;700&family=Source+Code+Pro:wght@400;500;600&display=swap&subset=latin` ,
56+ ) ,
3657 fallback : 'sans-serif' ,
3758 } ,
3859 Orbitron : {
3960 name : 'Orbitron' ,
40- url : `${ primaryCdn } Orbitron:wght@400;500;600;700;800;900&family=Share+Tech+Mono&display=swap` ,
61+ url : getFontUrl (
62+ 'Orbitron' ,
63+ `${ primaryCdn } Orbitron:wght@400;500;600;700&family=Share+Tech+Mono&display=swap&subset=latin` ,
64+ ) ,
4165 fallback : 'monospace' ,
4266 } ,
4367 JetBrainsMono : {
4468 name : 'JetBrains Mono' ,
45- url : `${ primaryCdn } JetBrains+Mono:wght@300; 400;500;600;700;800 &display=swap` ,
69+ url : getFontUrl ( 'JetBrains Mono' , `${ primaryCdn } JetBrains+Mono:wght@400;500;600;700&display=swap&subset=latin` ) ,
4670 fallback : 'monospace' ,
4771 } ,
4872 SourceCodePro : {
4973 name : 'Source Code Pro' ,
50- url : `${ primaryCdn } Source+Code+Pro:wght@300;400;500;600;700&family=Open+Sans:wght@300;400;500;600;700&display=swap` ,
74+ url : getFontUrl (
75+ 'Source Code Pro' ,
76+ `${ primaryCdn } Source+Code+Pro:wght@400;500;600&family=Open+Sans:wght@400;500;600&display=swap&subset=latin` ,
77+ ) ,
5178 fallback : 'monospace' ,
5279 } ,
5380 Inconsolata : {
5481 name : 'Inconsolata' ,
55- url : `${ primaryCdn } Inconsolata:wght@300;400;500;600;700&family=Lato:wght@300;400;700&display=swap` ,
82+ url : getFontUrl (
83+ 'Inconsolata' ,
84+ `${ primaryCdn } Inconsolata:wght@400;500;600&family=Lato:wght@400;700&display=swap&subset=latin` ,
85+ ) ,
5686 fallback : 'monospace' ,
5787 } ,
5888 IBMPlexSans : {
5989 name : 'IBM Plex Sans' ,
60- url : `${ primaryCdn } IBM+Plex+Sans:wght@300;400;500;600;700&family=IBM+Plex+Mono:wght@300;400;500;600&display=swap` ,
90+ url : getFontUrl (
91+ 'IBM Plex Sans' ,
92+ `${ primaryCdn } IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500;600&display=swap&subset=latin` ,
93+ ) ,
6194 fallback : 'sans-serif' ,
6295 } ,
6396 Ubuntu : {
6497 name : 'Ubuntu' ,
65- url : `${ primaryCdn } Ubuntu:wght@300;400;500;700&family=Ubuntu+Mono:wght@400;500;700&display=swap` ,
98+ url : getFontUrl (
99+ 'Ubuntu' ,
100+ `${ primaryCdn } Ubuntu:wght@400;500;700&family=Ubuntu+Mono:wght@400;500;700&display=swap&subset=latin` ,
101+ ) ,
66102 fallback : 'monospace' ,
67103 } ,
68104 FiraCode : {
69105 name : 'Fira Code' ,
70- url : `${ primaryCdn } Fira+Sans:wght@300;400;500;600;700&family=Fira+Code:wght@300;400;500;600;700&display=swap` ,
106+ url : getFontUrl (
107+ 'Fira Code' ,
108+ `${ primaryCdn } Fira+Sans:wght@400;500;600&family=Fira+Code:wght@400;500;600;700&display=swap&subset=latin` ,
109+ ) ,
71110 fallback : 'monospace' ,
72111 } ,
73112 Outfit : {
74113 name : 'Outfit' ,
75- url : `${ primaryCdn } Outfit:wght@300; 400;500;600;700 &display=swap` ,
114+ url : getFontUrl ( 'Outfit' , `${ primaryCdn } Outfit:wght@400;500;600&display=swap&subset=latin` ) ,
76115 fallback : 'sans-serif' ,
77116 } ,
78117 Nunito : {
79118 name : 'Nunito' ,
80- url : `${ primaryCdn } Nunito:wght@300; 400;500;600;700;800 &display=swap` ,
119+ url : getFontUrl ( 'Nunito' , `${ primaryCdn } Nunito:wght@400;500;600;700&display=swap&subset=latin` ) ,
81120 fallback : 'sans-serif' ,
82121 } ,
83122} ;
0 commit comments