@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.9 → 0.2.11

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 (306) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/components/ui/accessibility-demo.esm.js +30 -24
  3. package/dist/components/ui/accessibility-demo.js +30 -24
  4. package/dist/components/ui/advanced-component-architecture-demo.esm.js +235 -179
  5. package/dist/components/ui/advanced-component-architecture-demo.js +235 -179
  6. package/dist/components/ui/advanced-transition-system-demo.esm.js +110 -64
  7. package/dist/components/ui/advanced-transition-system-demo.js +110 -64
  8. package/dist/components/ui/advanced-transition-system.esm.js +166 -122
  9. package/dist/components/ui/advanced-transition-system.js +166 -122
  10. package/dist/components/ui/animation/animated-container.esm.js +52 -29
  11. package/dist/components/ui/animation/animated-container.js +52 -29
  12. package/dist/components/ui/animation/staggered-container.esm.js +18 -9
  13. package/dist/components/ui/animation/staggered-container.js +18 -9
  14. package/dist/components/ui/animation-demo.esm.js +67 -35
  15. package/dist/components/ui/animation-demo.js +67 -35
  16. package/dist/components/ui/badge.esm.js +9 -6
  17. package/dist/components/ui/badge.js +9 -6
  18. package/dist/components/ui/battery-conscious-animation-demo.esm.js +122 -87
  19. package/dist/components/ui/battery-conscious-animation-demo.js +122 -87
  20. package/dist/components/ui/border-radius-shadow-demo.esm.js +23 -12
  21. package/dist/components/ui/border-radius-shadow-demo.js +23 -12
  22. package/dist/components/ui/button.esm.js +8 -2
  23. package/dist/components/ui/button.js +8 -2
  24. package/dist/components/ui/card.esm.js +33 -8
  25. package/dist/components/ui/card.js +33 -8
  26. package/dist/components/ui/checkbox.esm.js +3 -3
  27. package/dist/components/ui/checkbox.js +3 -3
  28. package/dist/components/ui/color-preview.esm.js +68 -45
  29. package/dist/components/ui/color-preview.js +68 -45
  30. package/dist/components/ui/data-display/chart.esm.js +112 -84
  31. package/dist/components/ui/data-display/chart.js +112 -84
  32. package/dist/components/ui/data-display/data-grid-simple.esm.js +1 -1
  33. package/dist/components/ui/data-display/data-grid-simple.js +1 -1
  34. package/dist/components/ui/data-display/data-grid.esm.js +80 -67
  35. package/dist/components/ui/data-display/data-grid.js +80 -67
  36. package/dist/components/ui/data-display/list.esm.js +53 -45
  37. package/dist/components/ui/data-display/list.js +53 -45
  38. package/dist/components/ui/data-display/table.esm.js +62 -54
  39. package/dist/components/ui/data-display/table.js +62 -54
  40. package/dist/components/ui/data-display/timeline.esm.js +39 -34
  41. package/dist/components/ui/data-display/timeline.js +39 -34
  42. package/dist/components/ui/data-display/tree.esm.js +116 -84
  43. package/dist/components/ui/data-display/tree.js +116 -84
  44. package/dist/components/ui/data-display/types.esm.js +389 -364
  45. package/dist/components/ui/data-display/types.js +389 -364
  46. package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +120 -70
  47. package/dist/components/ui/enterprise-mobile-experience-demo.js +120 -70
  48. package/dist/components/ui/enterprise-mobile-experience.esm.js +124 -73
  49. package/dist/components/ui/enterprise-mobile-experience.js +124 -73
  50. package/dist/components/ui/feedback/alert.esm.js +22 -15
  51. package/dist/components/ui/feedback/alert.js +22 -15
  52. package/dist/components/ui/feedback/progress.esm.js +47 -24
  53. package/dist/components/ui/feedback/progress.js +47 -24
  54. package/dist/components/ui/feedback/skeleton.esm.js +39 -29
  55. package/dist/components/ui/feedback/skeleton.js +39 -29
  56. package/dist/components/ui/feedback/toast.esm.js +62 -38
  57. package/dist/components/ui/feedback/toast.js +62 -38
  58. package/dist/components/ui/feedback/types.esm.js +83 -83
  59. package/dist/components/ui/feedback/types.js +83 -83
  60. package/dist/components/ui/font-preview.esm.js +41 -39
  61. package/dist/components/ui/font-preview.js +41 -39
  62. package/dist/components/ui/form-demo.esm.js +150 -113
  63. package/dist/components/ui/form-demo.js +150 -113
  64. package/dist/components/ui/hardware-acceleration-demo.esm.js +137 -87
  65. package/dist/components/ui/hardware-acceleration-demo.js +137 -87
  66. package/dist/components/ui/input.esm.js +4 -1
  67. package/dist/components/ui/input.js +4 -1
  68. package/dist/components/ui/layout-demo.esm.js +81 -56
  69. package/dist/components/ui/layout-demo.js +81 -56
  70. package/dist/components/ui/layouts/adaptive-layout.esm.js +27 -8
  71. package/dist/components/ui/layouts/adaptive-layout.js +27 -8
  72. package/dist/components/ui/layouts/desktop-layout.esm.js +39 -19
  73. package/dist/components/ui/layouts/desktop-layout.js +39 -19
  74. package/dist/components/ui/layouts/mobile-layout.esm.js +19 -9
  75. package/dist/components/ui/layouts/mobile-layout.js +19 -9
  76. package/dist/components/ui/layouts/tablet-layout.esm.js +28 -14
  77. package/dist/components/ui/layouts/tablet-layout.js +28 -14
  78. package/dist/components/ui/mobile-form-validation.esm.js +120 -87
  79. package/dist/components/ui/mobile-form-validation.js +120 -87
  80. package/dist/components/ui/mobile-input-demo.esm.js +19 -13
  81. package/dist/components/ui/mobile-input-demo.js +19 -13
  82. package/dist/components/ui/mobile-input.esm.js +185 -120
  83. package/dist/components/ui/mobile-input.js +185 -120
  84. package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +128 -111
  85. package/dist/components/ui/mobile-skeleton-loading-demo.js +128 -111
  86. package/dist/components/ui/navigation/breadcrumb.esm.js +17 -14
  87. package/dist/components/ui/navigation/breadcrumb.js +17 -14
  88. package/dist/components/ui/navigation/index.esm.js +0 -1
  89. package/dist/components/ui/navigation/index.js +0 -1
  90. package/dist/components/ui/navigation/menu.esm.js +49 -35
  91. package/dist/components/ui/navigation/menu.js +49 -35
  92. package/dist/components/ui/navigation/navigation-demo.esm.js +81 -74
  93. package/dist/components/ui/navigation/navigation-demo.js +81 -74
  94. package/dist/components/ui/navigation/pagination.esm.js +62 -50
  95. package/dist/components/ui/navigation/pagination.js +62 -50
  96. package/dist/components/ui/navigation/sidebar.esm.js +56 -42
  97. package/dist/components/ui/navigation/sidebar.js +56 -42
  98. package/dist/components/ui/navigation/stepper.esm.js +34 -23
  99. package/dist/components/ui/navigation/stepper.js +34 -23
  100. package/dist/components/ui/navigation/tabs.esm.js +32 -21
  101. package/dist/components/ui/navigation/tabs.js +32 -21
  102. package/dist/components/ui/navigation/types.esm.js +196 -195
  103. package/dist/components/ui/navigation/types.js +196 -195
  104. package/dist/components/ui/overlay/backdrop.esm.js +17 -16
  105. package/dist/components/ui/overlay/backdrop.js +17 -16
  106. package/dist/components/ui/overlay/focus-manager.esm.js +21 -19
  107. package/dist/components/ui/overlay/focus-manager.js +21 -19
  108. package/dist/components/ui/overlay/index.esm.js +0 -2
  109. package/dist/components/ui/overlay/index.js +0 -2
  110. package/dist/components/ui/overlay/modal.esm.js +38 -34
  111. package/dist/components/ui/overlay/modal.js +38 -34
  112. package/dist/components/ui/overlay/overlay-manager.esm.js +25 -20
  113. package/dist/components/ui/overlay/overlay-manager.js +25 -20
  114. package/dist/components/ui/overlay/popover.esm.js +74 -58
  115. package/dist/components/ui/overlay/popover.js +74 -58
  116. package/dist/components/ui/overlay/portal.esm.js +7 -7
  117. package/dist/components/ui/overlay/portal.js +7 -7
  118. package/dist/components/ui/overlay/tooltip.esm.js +54 -39
  119. package/dist/components/ui/overlay/tooltip.js +54 -39
  120. package/dist/components/ui/overlay/types.esm.js +132 -131
  121. package/dist/components/ui/overlay/types.js +132 -131
  122. package/dist/components/ui/performance-demo.esm.js +135 -88
  123. package/dist/components/ui/performance-demo.js +135 -88
  124. package/dist/components/ui/semantic-input-system-demo.esm.js +117 -80
  125. package/dist/components/ui/semantic-input-system-demo.js +117 -80
  126. package/dist/components/ui/theme-customizer.esm.js +84 -52
  127. package/dist/components/ui/theme-customizer.js +84 -52
  128. package/dist/components/ui/theme-preview.esm.js +95 -43
  129. package/dist/components/ui/theme-preview.js +95 -43
  130. package/dist/components/ui/theme-switcher.esm.js +70 -44
  131. package/dist/components/ui/theme-switcher.js +70 -44
  132. package/dist/components/ui/theme-toggle.esm.js +3 -3
  133. package/dist/components/ui/theme-toggle.js +3 -3
  134. package/dist/components/ui/token-demo.esm.js +33 -21
  135. package/dist/components/ui/token-demo.js +33 -21
  136. package/dist/components/ui/touch-demo.esm.js +102 -73
  137. package/dist/components/ui/touch-demo.js +102 -73
  138. package/dist/components/ui/touch-friendly-interface-demo.esm.js +102 -64
  139. package/dist/components/ui/touch-friendly-interface-demo.js +102 -64
  140. package/dist/components/ui/touch-friendly-interface.esm.js +85 -61
  141. package/dist/components/ui/touch-friendly-interface.js +85 -61
  142. package/dist/hooks/use-accessibility-support.esm.js +115 -85
  143. package/dist/hooks/use-accessibility-support.js +115 -85
  144. package/dist/hooks/use-adaptive-layout.esm.js +56 -33
  145. package/dist/hooks/use-adaptive-layout.js +56 -33
  146. package/dist/hooks/use-advanced-patterns.esm.js +57 -42
  147. package/dist/hooks/use-advanced-patterns.js +57 -42
  148. package/dist/hooks/use-advanced-transition-system.esm.js +112 -71
  149. package/dist/hooks/use-advanced-transition-system.js +112 -71
  150. package/dist/hooks/use-animation-profile.esm.js +63 -34
  151. package/dist/hooks/use-animation-profile.js +63 -34
  152. package/dist/hooks/use-battery-animations.esm.js +80 -55
  153. package/dist/hooks/use-battery-animations.js +80 -55
  154. package/dist/hooks/use-battery-conscious-loading.esm.js +166 -123
  155. package/dist/hooks/use-battery-conscious-loading.js +166 -123
  156. package/dist/hooks/use-battery-optimization.esm.js +78 -55
  157. package/dist/hooks/use-battery-optimization.js +78 -55
  158. package/dist/hooks/use-battery-status.esm.js +73 -51
  159. package/dist/hooks/use-battery-status.js +73 -51
  160. package/dist/hooks/use-component-performance.esm.js +62 -47
  161. package/dist/hooks/use-component-performance.js +62 -47
  162. package/dist/hooks/use-device-loading-states.esm.js +152 -109
  163. package/dist/hooks/use-device-loading-states.js +152 -109
  164. package/dist/hooks/use-device.esm.js +25 -14
  165. package/dist/hooks/use-device.js +25 -14
  166. package/dist/hooks/use-enterprise-mobile-experience.esm.js +137 -88
  167. package/dist/hooks/use-enterprise-mobile-experience.js +137 -88
  168. package/dist/hooks/use-form-feedback.esm.js +124 -81
  169. package/dist/hooks/use-form-feedback.js +124 -81
  170. package/dist/hooks/use-form-performance.esm.js +127 -92
  171. package/dist/hooks/use-form-performance.js +127 -92
  172. package/dist/hooks/use-frame-rate.esm.js +56 -37
  173. package/dist/hooks/use-frame-rate.js +56 -37
  174. package/dist/hooks/use-gestures.esm.js +96 -72
  175. package/dist/hooks/use-gestures.js +96 -72
  176. package/dist/hooks/use-hardware-acceleration.esm.js +65 -37
  177. package/dist/hooks/use-hardware-acceleration.js +65 -37
  178. package/dist/hooks/use-input-accessibility.esm.js +157 -119
  179. package/dist/hooks/use-input-accessibility.js +157 -119
  180. package/dist/hooks/use-input-performance.esm.js +139 -104
  181. package/dist/hooks/use-input-performance.js +139 -104
  182. package/dist/hooks/use-layout-performance.esm.js +50 -29
  183. package/dist/hooks/use-layout-performance.js +50 -29
  184. package/dist/hooks/use-loading-accessibility.esm.js +209 -169
  185. package/dist/hooks/use-loading-accessibility.js +209 -169
  186. package/dist/hooks/use-loading-performance.esm.js +117 -93
  187. package/dist/hooks/use-loading-performance.js +117 -93
  188. package/dist/hooks/use-memory-usage.esm.js +57 -38
  189. package/dist/hooks/use-memory-usage.js +57 -38
  190. package/dist/hooks/use-mobile-form-layout.esm.js +111 -74
  191. package/dist/hooks/use-mobile-form-layout.js +111 -74
  192. package/dist/hooks/use-mobile-form-validation.esm.js +211 -144
  193. package/dist/hooks/use-mobile-form-validation.js +211 -144
  194. package/dist/hooks/use-mobile-keyboard-optimization.esm.js +154 -113
  195. package/dist/hooks/use-mobile-keyboard-optimization.js +154 -113
  196. package/dist/hooks/use-mobile-layout.esm.js +73 -51
  197. package/dist/hooks/use-mobile-layout.js +73 -51
  198. package/dist/hooks/use-mobile-optimization.esm.js +72 -44
  199. package/dist/hooks/use-mobile-optimization.js +72 -44
  200. package/dist/hooks/use-mobile-skeleton.esm.js +97 -64
  201. package/dist/hooks/use-mobile-skeleton.js +97 -64
  202. package/dist/hooks/use-mobile-touch.esm.js +128 -93
  203. package/dist/hooks/use-mobile-touch.js +128 -93
  204. package/dist/hooks/use-performance-throttling.esm.js +72 -48
  205. package/dist/hooks/use-performance-throttling.js +72 -48
  206. package/dist/hooks/use-performance.esm.js +90 -52
  207. package/dist/hooks/use-performance.js +90 -52
  208. package/dist/hooks/use-reusable-architecture.esm.js +94 -65
  209. package/dist/hooks/use-reusable-architecture.js +94 -65
  210. package/dist/hooks/use-semantic-input-types.esm.js +166 -124
  211. package/dist/hooks/use-semantic-input-types.js +166 -124
  212. package/dist/hooks/use-semantic-input.esm.js +178 -126
  213. package/dist/hooks/use-semantic-input.js +178 -126
  214. package/dist/hooks/use-tablet-layout.esm.js +67 -38
  215. package/dist/hooks/use-tablet-layout.js +67 -38
  216. package/dist/hooks/use-touch-friendly-input.esm.js +193 -149
  217. package/dist/hooks/use-touch-friendly-input.js +193 -149
  218. package/dist/hooks/use-touch-friendly-interface.esm.js +99 -67
  219. package/dist/hooks/use-touch-friendly-interface.js +99 -67
  220. package/dist/hooks/use-touch-optimization.esm.js +99 -72
  221. package/dist/hooks/use-touch-optimization.js +99 -72
  222. package/dist/index.esm.js +157 -281
  223. package/dist/index.js +157 -281
  224. package/dist/lib/utils.esm.js +1 -1
  225. package/dist/lib/utils.js +1 -1
  226. package/dist/plugins/theme-css-generator.esm.js +104 -55
  227. package/dist/plugins/theme-css-generator.js +104 -55
  228. package/dist/provider.esm.js +4 -4
  229. package/dist/provider.js +4 -4
  230. package/dist/styles.css +1 -1
  231. package/dist/theme.esm.js +633 -468
  232. package/dist/theme.js +633 -468
  233. package/dist/themes/ThemeContext.esm.js +15 -15
  234. package/dist/themes/ThemeContext.js +15 -15
  235. package/dist/themes/ThemeProvider.esm.js +25 -22
  236. package/dist/themes/ThemeProvider.js +25 -22
  237. package/dist/themes/accessibility.esm.js +147 -108
  238. package/dist/themes/accessibility.js +147 -108
  239. package/dist/themes/aria-patterns.esm.js +198 -162
  240. package/dist/themes/aria-patterns.js +198 -162
  241. package/dist/themes/base-themes.esm.js +14 -11
  242. package/dist/themes/base-themes.js +14 -11
  243. package/dist/themes/colorManager.esm.js +101 -83
  244. package/dist/themes/colorManager.js +101 -83
  245. package/dist/themes/examples/dark-theme.esm.js +133 -103
  246. package/dist/themes/examples/dark-theme.js +133 -103
  247. package/dist/themes/examples/minimal-theme.esm.js +83 -61
  248. package/dist/themes/examples/minimal-theme.js +83 -61
  249. package/dist/themes/focus-management.esm.js +202 -143
  250. package/dist/themes/focus-management.js +202 -143
  251. package/dist/themes/fontLoader.esm.js +28 -19
  252. package/dist/themes/fontLoader.js +28 -19
  253. package/dist/themes/high-contrast.esm.js +152 -104
  254. package/dist/themes/high-contrast.js +152 -104
  255. package/dist/themes/index.esm.js +1 -1
  256. package/dist/themes/index.js +1 -1
  257. package/dist/themes/inheritance.esm.js +35 -27
  258. package/dist/themes/inheritance.js +35 -27
  259. package/dist/themes/keyboard-navigation.esm.js +152 -123
  260. package/dist/themes/keyboard-navigation.js +152 -123
  261. package/dist/themes/motion-reduction.esm.js +193 -133
  262. package/dist/themes/motion-reduction.js +193 -133
  263. package/dist/themes/navigation.esm.js +146 -146
  264. package/dist/themes/navigation.js +146 -146
  265. package/dist/themes/screen-reader.esm.js +159 -94
  266. package/dist/themes/screen-reader.js +159 -94
  267. package/dist/themes/systemThemeDetector.esm.js +42 -34
  268. package/dist/themes/systemThemeDetector.js +42 -34
  269. package/dist/themes/themeCSSUpdater.esm.js +21 -9
  270. package/dist/themes/themeCSSUpdater.js +21 -9
  271. package/dist/themes/themePersistence.esm.js +68 -47
  272. package/dist/themes/themePersistence.js +68 -47
  273. package/dist/themes/themes/stan-design.esm.js +633 -468
  274. package/dist/themes/themes/stan-design.js +633 -468
  275. package/dist/themes/types.esm.js +301 -287
  276. package/dist/themes/types.js +301 -287
  277. package/dist/themes/useSystemTheme.esm.js +4 -4
  278. package/dist/themes/useSystemTheme.js +4 -4
  279. package/dist/themes/useTheme.esm.js +4 -4
  280. package/dist/themes/useTheme.js +4 -4
  281. package/dist/themes/validation.esm.js +128 -77
  282. package/dist/themes/validation.js +128 -77
  283. package/dist/tokens/index.esm.js +1 -2
  284. package/dist/tokens/index.js +1 -2
  285. package/dist/tokens/tokenExporter.esm.js +87 -61
  286. package/dist/tokens/tokenExporter.js +87 -61
  287. package/dist/tokens/tokenGenerator.esm.js +86 -77
  288. package/dist/tokens/tokenGenerator.js +86 -77
  289. package/dist/tokens/tokenManager.esm.js +64 -51
  290. package/dist/tokens/tokenManager.js +64 -51
  291. package/dist/tokens/tokenValidator.esm.js +193 -147
  292. package/dist/tokens/tokenValidator.js +193 -147
  293. package/dist/tokens/types.esm.js +49 -35
  294. package/dist/tokens/types.js +49 -35
  295. package/dist/utils/bundle-analyzer.esm.js +83 -65
  296. package/dist/utils/bundle-analyzer.js +83 -65
  297. package/dist/utils/bundle-splitting.esm.js +142 -117
  298. package/dist/utils/bundle-splitting.js +142 -117
  299. package/dist/utils/lazy-loading.esm.js +132 -106
  300. package/dist/utils/lazy-loading.js +132 -106
  301. package/dist/utils/performance-monitor.esm.js +170 -129
  302. package/dist/utils/performance-monitor.js +170 -129
  303. package/dist/utils/tree-shaking.esm.js +69 -61
  304. package/dist/utils/tree-shaking.js +69 -61
  305. package/package.json +1 -1
  306. package/src/index.ts +146 -146
@@ -6,12 +6,13 @@
6
6
  import { FontThemeConfig, FontFiles } from './types';
7
7
 
8
8
  export class FontLoader {
9
- private loadedFonts= new Set();
9
+ private loadedFonts: Set<string> = new Set();
10
10
 
11
11
  /**
12
12
  * Load fonts for a theme
13
13
  */
14
- async loadThemeFonts(fonts)] = [];
14
+ async loadThemeFonts(fonts: FontThemeConfig): Promise<void> {
15
+ const fontPromises: Promise<void>[] = [];
15
16
 
16
17
  // Load primary font
17
18
  fontPromises.push(this.loadFont(fonts.primary));
@@ -32,7 +33,8 @@ export class FontLoader {
32
33
  /**
33
34
  * Load a single font family
34
35
  */
35
- private async loadFont(fontConfig]), weights, display = 'swap', source } = fontConfig;
36
+ private async loadFont(fontConfig: FontThemeConfig['primary']): Promise<void> {
37
+ const { family, weights, display = 'swap', source } = fontConfig;
36
38
 
37
39
  // Skip if already loaded
38
40
  if (this.loadedFonts.has(family)) {
@@ -61,7 +63,8 @@ export class FontLoader {
61
63
  }
62
64
  }
63
65
 
64
- // Fallback)) {
66
+ // Fallback: try Google Fonts if it's a known web font
67
+ if (this.isGoogleFont(family)) {
65
68
  await this.loadGoogleFont(family, weights, display);
66
69
  this.loadedFonts.add(family);
67
70
  return;
@@ -69,14 +72,15 @@ export class FontLoader {
69
72
 
70
73
  console.warn(`Font ${family} could not be loaded, falling back to system fonts`);
71
74
  } catch (error) {
72
- console.error(`Error loading font ${family}, error);
75
+ console.error(`Error loading font ${family}:`, error);
73
76
  }
74
77
  }
75
78
 
76
79
  /**
77
80
  * Check if a font is available in the system
78
81
  */
79
- private async isFontAvailable(fontFamily)=== 'undefined') return false;
82
+ private async isFontAvailable(fontFamily: string): Promise<boolean> {
83
+ if (typeof document === 'undefined') return false;
80
84
 
81
85
  // Remove quotes and get the first font family
82
86
  const cleanFamily = fontFamily.split(',')[0].replace(/['"]/g, '').trim();
@@ -100,7 +104,8 @@ export class FontLoader {
100
104
  /**
101
105
  * Check if a font is a Google Font
102
106
  */
103
- private isGoogleFont(fontFamily)= [
107
+ private isGoogleFont(fontFamily: string): boolean {
108
+ const googleFonts = [
104
109
  'Poppins', 'Inter', 'Roboto', 'Open Sans', 'Lato', 'Montserrat', 'Source Sans Pro',
105
110
  'Raleway', 'PT Sans', 'Ubuntu', 'Noto Sans', 'Oswald', 'Playfair Display'
106
111
  ];
@@ -112,16 +117,17 @@ export class FontLoader {
112
117
  /**
113
118
  * Load a Google Font
114
119
  */
115
- private async loadGoogleFont(family, weights], display)= family.split(',')[0].replace(/['"]/g, '').trim();
120
+ private async loadGoogleFont(family: string, weights: number[], display: string): Promise<void> {
121
+ const cleanFamily = family.split(',')[0].replace(/['"]/g, '').trim();
116
122
  const weightsParam = weights.join(',');
117
123
 
118
124
  const link = document.createElement('link');
119
125
  link.rel = 'stylesheet';
120
- link.href = `https=${cleanFamily.replace(/\s+/g, '+')}}&display=${display}`;
126
+ link.href = `https://fonts.googleapis.com/css2?family=${cleanFamily.replace(/\s+/g, '+')}:wght@${weightsParam}&display=${display}`;
121
127
 
122
128
  return new Promise((resolve, reject) => {
123
129
  link.onload = () => resolve();
124
- link.onerror = () => reject(new Error(`Failed to load Google Font}`));
130
+ link.onerror = () => reject(new Error(`Failed to load Google Font: ${family}`));
125
131
  document.head.appendChild(link);
126
132
  });
127
133
  }
@@ -129,7 +135,8 @@ export class FontLoader {
129
135
  /**
130
136
  * Load custom font files using @font-face
131
137
  */
132
- private async loadCustomFontFiles(family, files, weights], display)] = [];
138
+ private async loadCustomFontFiles(family: string, files: FontFiles, weights: number[], display: string): Promise<void> {
139
+ const promises: Promise<void>[] = [];
133
140
 
134
141
  weights.forEach(weight => {
135
142
  if (files.woff2) {
@@ -147,21 +154,22 @@ export class FontLoader {
147
154
  /**
148
155
  * Load a single font face using @font-face
149
156
  */
150
- private async loadFontFace(family, weight, url, format, display)=== 'undefined') return;
157
+ private async loadFontFace(family: string, weight: number, url: string, format: string, display: string): Promise<void> {
158
+ if (typeof document === 'undefined') return;
151
159
 
152
160
  return new Promise((resolve, reject) => {
153
161
  const style = document.createElement('style');
154
162
  style.textContent = `
155
163
  @font-face {
156
- font-family}';
157
- font-weight};
158
- font-display};
159
- src}') format('${format}');
164
+ font-family: '${family}';
165
+ font-weight: ${weight};
166
+ font-display: ${display};
167
+ src: url('${url}') format('${format}');
160
168
  }
161
169
  `;
162
170
 
163
171
  style.onload = () => resolve();
164
- style.onerror = () => reject(new Error(`Failed to load font} ${weight}`));
172
+ style.onerror = () => reject(new Error(`Failed to load font: ${family} ${weight}`));
165
173
 
166
174
  document.head.appendChild(style);
167
175
 
@@ -175,13 +183,14 @@ export class FontLoader {
175
183
  /**
176
184
  * Clear loaded fonts
177
185
  */
178
- clearLoadedFonts());
186
+ clearLoadedFonts(): void {
187
+ this.loadedFonts.clear();
179
188
  }
180
189
 
181
190
  /**
182
191
  * Get list of loaded fonts
183
192
  */
184
- getLoadedFonts()] {
193
+ getLoadedFonts(): string[] {
185
194
  return Array.from(this.loadedFonts);
186
195
  }
187
196
  }
@@ -6,12 +6,13 @@
6
6
  import { FontThemeConfig, FontFiles } from './types';
7
7
 
8
8
  export class FontLoader {
9
- private loadedFonts= new Set();
9
+ private loadedFonts: Set<string> = new Set();
10
10
 
11
11
  /**
12
12
  * Load fonts for a theme
13
13
  */
14
- async loadThemeFonts(fonts)] = [];
14
+ async loadThemeFonts(fonts: FontThemeConfig): Promise<void> {
15
+ const fontPromises: Promise<void>[] = [];
15
16
 
16
17
  // Load primary font
17
18
  fontPromises.push(this.loadFont(fonts.primary));
@@ -32,7 +33,8 @@ export class FontLoader {
32
33
  /**
33
34
  * Load a single font family
34
35
  */
35
- private async loadFont(fontConfig]), weights, display = 'swap', source } = fontConfig;
36
+ private async loadFont(fontConfig: FontThemeConfig['primary']): Promise<void> {
37
+ const { family, weights, display = 'swap', source } = fontConfig;
36
38
 
37
39
  // Skip if already loaded
38
40
  if (this.loadedFonts.has(family)) {
@@ -61,7 +63,8 @@ export class FontLoader {
61
63
  }
62
64
  }
63
65
 
64
- // Fallback)) {
66
+ // Fallback: try Google Fonts if it's a known web font
67
+ if (this.isGoogleFont(family)) {
65
68
  await this.loadGoogleFont(family, weights, display);
66
69
  this.loadedFonts.add(family);
67
70
  return;
@@ -69,14 +72,15 @@ export class FontLoader {
69
72
 
70
73
  console.warn(`Font ${family} could not be loaded, falling back to system fonts`);
71
74
  } catch (error) {
72
- console.error(`Error loading font ${family}, error);
75
+ console.error(`Error loading font ${family}:`, error);
73
76
  }
74
77
  }
75
78
 
76
79
  /**
77
80
  * Check if a font is available in the system
78
81
  */
79
- private async isFontAvailable(fontFamily)=== 'undefined') return false;
82
+ private async isFontAvailable(fontFamily: string): Promise<boolean> {
83
+ if (typeof document === 'undefined') return false;
80
84
 
81
85
  // Remove quotes and get the first font family
82
86
  const cleanFamily = fontFamily.split(',')[0].replace(/['"]/g, '').trim();
@@ -100,7 +104,8 @@ export class FontLoader {
100
104
  /**
101
105
  * Check if a font is a Google Font
102
106
  */
103
- private isGoogleFont(fontFamily)= [
107
+ private isGoogleFont(fontFamily: string): boolean {
108
+ const googleFonts = [
104
109
  'Poppins', 'Inter', 'Roboto', 'Open Sans', 'Lato', 'Montserrat', 'Source Sans Pro',
105
110
  'Raleway', 'PT Sans', 'Ubuntu', 'Noto Sans', 'Oswald', 'Playfair Display'
106
111
  ];
@@ -112,16 +117,17 @@ export class FontLoader {
112
117
  /**
113
118
  * Load a Google Font
114
119
  */
115
- private async loadGoogleFont(family, weights], display)= family.split(',')[0].replace(/['"]/g, '').trim();
120
+ private async loadGoogleFont(family: string, weights: number[], display: string): Promise<void> {
121
+ const cleanFamily = family.split(',')[0].replace(/['"]/g, '').trim();
116
122
  const weightsParam = weights.join(',');
117
123
 
118
124
  const link = document.createElement('link');
119
125
  link.rel = 'stylesheet';
120
- link.href = `https=${cleanFamily.replace(/\s+/g, '+')}}&display=${display}`;
126
+ link.href = `https://fonts.googleapis.com/css2?family=${cleanFamily.replace(/\s+/g, '+')}:wght@${weightsParam}&display=${display}`;
121
127
 
122
128
  return new Promise((resolve, reject) => {
123
129
  link.onload = () => resolve();
124
- link.onerror = () => reject(new Error(`Failed to load Google Font}`));
130
+ link.onerror = () => reject(new Error(`Failed to load Google Font: ${family}`));
125
131
  document.head.appendChild(link);
126
132
  });
127
133
  }
@@ -129,7 +135,8 @@ export class FontLoader {
129
135
  /**
130
136
  * Load custom font files using @font-face
131
137
  */
132
- private async loadCustomFontFiles(family, files, weights], display)] = [];
138
+ private async loadCustomFontFiles(family: string, files: FontFiles, weights: number[], display: string): Promise<void> {
139
+ const promises: Promise<void>[] = [];
133
140
 
134
141
  weights.forEach(weight => {
135
142
  if (files.woff2) {
@@ -147,21 +154,22 @@ export class FontLoader {
147
154
  /**
148
155
  * Load a single font face using @font-face
149
156
  */
150
- private async loadFontFace(family, weight, url, format, display)=== 'undefined') return;
157
+ private async loadFontFace(family: string, weight: number, url: string, format: string, display: string): Promise<void> {
158
+ if (typeof document === 'undefined') return;
151
159
 
152
160
  return new Promise((resolve, reject) => {
153
161
  const style = document.createElement('style');
154
162
  style.textContent = `
155
163
  @font-face {
156
- font-family}';
157
- font-weight};
158
- font-display};
159
- src}') format('${format}');
164
+ font-family: '${family}';
165
+ font-weight: ${weight};
166
+ font-display: ${display};
167
+ src: url('${url}') format('${format}');
160
168
  }
161
169
  `;
162
170
 
163
171
  style.onload = () => resolve();
164
- style.onerror = () => reject(new Error(`Failed to load font} ${weight}`));
172
+ style.onerror = () => reject(new Error(`Failed to load font: ${family} ${weight}`));
165
173
 
166
174
  document.head.appendChild(style);
167
175
 
@@ -175,13 +183,14 @@ export class FontLoader {
175
183
  /**
176
184
  * Clear loaded fonts
177
185
  */
178
- clearLoadedFonts());
186
+ clearLoadedFonts(): void {
187
+ this.loadedFonts.clear();
179
188
  }
180
189
 
181
190
  /**
182
191
  * Get list of loaded fonts
183
192
  */
184
- getLoadedFonts()] {
193
+ getLoadedFonts(): string[] {
185
194
  return Array.from(this.loadedFonts);
186
195
  }
187
196
  }