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

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 (304) 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 +23 -1
  89. package/dist/components/ui/navigation/index.js +23 -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 +22 -2
  109. package/dist/components/ui/overlay/index.js +22 -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 +289 -280
  223. package/dist/index.js +289 -280
  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/inheritance.esm.js +35 -27
  256. package/dist/themes/inheritance.js +35 -27
  257. package/dist/themes/keyboard-navigation.esm.js +152 -123
  258. package/dist/themes/keyboard-navigation.js +152 -123
  259. package/dist/themes/motion-reduction.esm.js +193 -133
  260. package/dist/themes/motion-reduction.js +193 -133
  261. package/dist/themes/navigation.esm.js +146 -146
  262. package/dist/themes/navigation.js +146 -146
  263. package/dist/themes/screen-reader.esm.js +159 -94
  264. package/dist/themes/screen-reader.js +159 -94
  265. package/dist/themes/systemThemeDetector.esm.js +42 -34
  266. package/dist/themes/systemThemeDetector.js +42 -34
  267. package/dist/themes/themeCSSUpdater.esm.js +21 -9
  268. package/dist/themes/themeCSSUpdater.js +21 -9
  269. package/dist/themes/themePersistence.esm.js +68 -47
  270. package/dist/themes/themePersistence.js +68 -47
  271. package/dist/themes/themes/stan-design.esm.js +633 -468
  272. package/dist/themes/themes/stan-design.js +633 -468
  273. package/dist/themes/types.esm.js +301 -287
  274. package/dist/themes/types.js +301 -287
  275. package/dist/themes/useSystemTheme.esm.js +4 -4
  276. package/dist/themes/useSystemTheme.js +4 -4
  277. package/dist/themes/useTheme.esm.js +4 -4
  278. package/dist/themes/useTheme.js +4 -4
  279. package/dist/themes/validation.esm.js +128 -77
  280. package/dist/themes/validation.js +128 -77
  281. package/dist/tokens/index.esm.js +15 -4
  282. package/dist/tokens/index.js +15 -4
  283. package/dist/tokens/tokenExporter.esm.js +87 -61
  284. package/dist/tokens/tokenExporter.js +87 -61
  285. package/dist/tokens/tokenGenerator.esm.js +86 -77
  286. package/dist/tokens/tokenGenerator.js +86 -77
  287. package/dist/tokens/tokenManager.esm.js +64 -51
  288. package/dist/tokens/tokenManager.js +64 -51
  289. package/dist/tokens/tokenValidator.esm.js +193 -147
  290. package/dist/tokens/tokenValidator.js +193 -147
  291. package/dist/tokens/types.esm.js +49 -35
  292. package/dist/tokens/types.js +49 -35
  293. package/dist/utils/bundle-analyzer.esm.js +83 -65
  294. package/dist/utils/bundle-analyzer.js +83 -65
  295. package/dist/utils/bundle-splitting.esm.js +142 -117
  296. package/dist/utils/bundle-splitting.js +142 -117
  297. package/dist/utils/lazy-loading.esm.js +132 -106
  298. package/dist/utils/lazy-loading.js +132 -106
  299. package/dist/utils/performance-monitor.esm.js +170 -129
  300. package/dist/utils/performance-monitor.js +170 -129
  301. package/dist/utils/tree-shaking.esm.js +69 -61
  302. package/dist/utils/tree-shaking.js +69 -61
  303. package/package.json +1 -1
  304. package/src/index.ts +146 -146
@@ -3,21 +3,21 @@
3
3
  */
4
4
 
5
5
  export interface ThemePersistenceOptions {
6
- storageKey?;
7
- defaultTheme?;
8
- enableSystemPreference?;
9
- enableSystemThemeDetection?;
10
- systemThemeStorageKey?;
6
+ storageKey?: string;
7
+ defaultTheme?: string;
8
+ enableSystemPreference?: boolean;
9
+ enableSystemThemeDetection?: boolean;
10
+ systemThemeStorageKey?: string;
11
11
  }
12
12
 
13
13
  export class ThemePersistence {
14
- private storageKey;
15
- private defaultTheme;
16
- private enableSystemPreference;
17
- private enableSystemThemeDetection;
18
- private systemThemeStorageKey;
14
+ private storageKey: string;
15
+ private defaultTheme: string;
16
+ private enableSystemPreference: boolean;
17
+ private enableSystemThemeDetection: boolean;
18
+ private systemThemeStorageKey: string;
19
19
 
20
- constructor(options= {}) {
20
+ constructor(options: ThemePersistenceOptions = {}) {
21
21
  this.storageKey = options.storageKey || 'stan-design-theme';
22
22
  this.defaultTheme = options.defaultTheme || 'stan-design';
23
23
  this.enableSystemPreference = options.enableSystemPreference ?? true;
@@ -29,7 +29,10 @@ export class ThemePersistence {
29
29
  * Get the stored theme preference
30
30
  * Falls back to system preference if enabled, then default theme
31
31
  */
32
- getStoredTheme()= localStorage.getItem(this.storageKey);
32
+ getStoredTheme(): string {
33
+ try {
34
+ // Check localStorage first
35
+ const stored = localStorage.getItem(this.storageKey);
33
36
  if (stored) {
34
37
  return stored;
35
38
  }
@@ -45,7 +48,7 @@ export class ThemePersistence {
45
48
  // Finally fall back to default
46
49
  return this.defaultTheme;
47
50
  } catch (error) {
48
- console.warn('Failed to read theme from storage, error);
51
+ console.warn('Failed to read theme from storage:', error);
49
52
  return this.defaultTheme;
50
53
  }
51
54
  }
@@ -53,30 +56,36 @@ export class ThemePersistence {
53
56
  /**
54
57
  * Store the theme preference
55
58
  */
56
- setStoredTheme(themeName), themeName);
59
+ setStoredTheme(themeName: string): void {
60
+ try {
61
+ localStorage.setItem(this.storageKey, themeName);
57
62
  } catch (error) {
58
- console.warn('Failed to store theme preference, error);
63
+ console.warn('Failed to store theme preference:', error);
59
64
  }
60
65
  }
61
66
 
62
67
  /**
63
68
  * Clear the stored theme preference
64
69
  */
65
- clearStoredTheme());
70
+ clearStoredTheme(): void {
71
+ try {
72
+ localStorage.removeItem(this.storageKey);
66
73
  } catch (error) {
67
- console.warn('Failed to clear theme preference, error);
74
+ console.warn('Failed to clear theme preference:', error);
68
75
  }
69
76
  }
70
77
 
71
78
  /**
72
79
  * Get system color scheme preference
73
80
  */
74
- private getSystemPreference()== 'undefined' && window.matchMedia) {
75
- const darkModeQuery = window.matchMedia('(prefers-color-scheme)');
76
- return darkModeQuery.matches ? 'dark' ;
81
+ private getSystemPreference(): string | null {
82
+ try {
83
+ if (typeof window !== 'undefined' && window.matchMedia) {
84
+ const darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)');
85
+ return darkModeQuery.matches ? 'dark' : 'light';
77
86
  }
78
87
  } catch (error) {
79
- console.warn('Failed to detect system preference, error);
88
+ console.warn('Failed to detect system preference:', error);
80
89
  }
81
90
  return null;
82
91
  }
@@ -84,13 +93,13 @@ export class ThemePersistence {
84
93
  /**
85
94
  * Listen for system preference changes
86
95
  */
87
- onSystemPreferenceChange(callback) => void)) => void) | null {
96
+ onSystemPreferenceChange(callback: (preference: string) => void): (() => void) | null {
88
97
  try {
89
98
  if (typeof window !== 'undefined' && window.matchMedia) {
90
- const mediaQuery = window.matchMedia('(prefers-color-scheme)');
99
+ const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
91
100
 
92
- const handleChange = (event) => {
93
- const preference = event.matches ? 'dark' ;
101
+ const handleChange = (event: MediaQueryListEvent) => {
102
+ const preference = event.matches ? 'dark' : 'light';
94
103
  callback(preference);
95
104
  };
96
105
 
@@ -106,7 +115,7 @@ export class ThemePersistence {
106
115
  }
107
116
  }
108
117
  } catch (error) {
109
- console.warn('Failed to set up system preference listener, error);
118
+ console.warn('Failed to set up system preference listener:', error);
110
119
  }
111
120
  return null;
112
121
  }
@@ -114,7 +123,9 @@ export class ThemePersistence {
114
123
  /**
115
124
  * Check if localStorage is available
116
125
  */
117
- isStorageAvailable()= '__test__';
126
+ isStorageAvailable(): boolean {
127
+ try {
128
+ const test = '__test__';
118
129
  localStorage.setItem(test, test);
119
130
  localStorage.removeItem(test);
120
131
  return true;
@@ -126,9 +137,9 @@ export class ThemePersistence {
126
137
  /**
127
138
  * Get all available storage keys related to themes
128
139
  */
129
- getThemeKeys()] {
140
+ getThemeKeys(): string[] {
130
141
  try {
131
- const keys] = [];
142
+ const keys: string[] = [];
132
143
  for (let i = 0; i < localStorage.length; i++) {
133
144
  const key = localStorage.key(i);
134
145
  if (key && key.includes('theme')) {
@@ -137,7 +148,7 @@ export class ThemePersistence {
137
148
  }
138
149
  return keys;
139
150
  } catch (error) {
140
- console.warn('Failed to get theme keys, error);
151
+ console.warn('Failed to get theme keys:', error);
141
152
  return [];
142
153
  }
143
154
  }
@@ -145,12 +156,14 @@ export class ThemePersistence {
145
156
  /**
146
157
  * Get stored system theme preference
147
158
  */
148
- getStoredSystemTheme()= localStorage.getItem(this.systemThemeStorageKey);
159
+ getStoredSystemTheme(): 'light' | 'dark' | null {
160
+ try {
161
+ const stored = localStorage.getItem(this.systemThemeStorageKey);
149
162
  if (stored === 'light' || stored === 'dark') {
150
163
  return stored;
151
164
  }
152
165
  } catch (error) {
153
- console.warn('Failed to read system theme from storage, error);
166
+ console.warn('Failed to read system theme from storage:', error);
154
167
  }
155
168
  return null;
156
169
  }
@@ -158,41 +171,49 @@ export class ThemePersistence {
158
171
  /**
159
172
  * Store system theme preference
160
173
  */
161
- setStoredSystemTheme(theme), theme);
174
+ setStoredSystemTheme(theme: 'light' | 'dark'): void {
175
+ try {
176
+ localStorage.setItem(this.systemThemeStorageKey, theme);
162
177
  } catch (error) {
163
- console.warn('Failed to store system theme preference, error);
178
+ console.warn('Failed to store system theme preference:', error);
164
179
  }
165
180
  }
166
181
 
167
182
  /**
168
183
  * Clear stored system theme preference
169
184
  */
170
- clearStoredSystemTheme());
185
+ clearStoredSystemTheme(): void {
186
+ try {
187
+ localStorage.removeItem(this.systemThemeStorageKey);
171
188
  } catch (error) {
172
- console.warn('Failed to clear system theme preference, error);
189
+ console.warn('Failed to clear system theme preference:', error);
173
190
  }
174
191
  }
175
192
 
176
193
  /**
177
194
  * Get comprehensive theme state including system theme
178
195
  */
179
- getThemeState();
180
- systemTheme;
181
- isSystemThemeEnabled;
196
+ getThemeState(): {
197
+ theme: string;
198
+ systemTheme: 'light' | 'dark' | null;
199
+ isSystemThemeEnabled: boolean;
182
200
  } {
183
201
  return {
184
- theme),
185
- systemTheme),
186
- isSystemThemeEnabled};
202
+ theme: this.getStoredTheme(),
203
+ systemTheme: this.getStoredSystemTheme(),
204
+ isSystemThemeEnabled: this.enableSystemThemeDetection
205
+ };
187
206
  }
188
207
 
189
208
  /**
190
209
  * Set comprehensive theme state
191
210
  */
192
- setThemeState(state;
193
- systemTheme?;
194
- enableSystemTheme?;
195
- })== undefined) {
211
+ setThemeState(state: {
212
+ theme?: string;
213
+ systemTheme?: 'light' | 'dark';
214
+ enableSystemTheme?: boolean;
215
+ }): void {
216
+ if (state.theme !== undefined) {
196
217
  this.setStoredTheme(state.theme);
197
218
  }
198
219
  if (state.systemTheme !== undefined) {
@@ -212,6 +233,6 @@ export const defaultThemePersistence = new ThemePersistence();
212
233
  /**
213
234
  * Create a custom theme persistence instance
214
235
  */
215
- export const createThemePersistence = (options) => {
236
+ export const createThemePersistence = (options: ThemePersistenceOptions) => {
216
237
  return new ThemePersistence(options);
217
238
  };
@@ -3,21 +3,21 @@
3
3
  */
4
4
 
5
5
  export interface ThemePersistenceOptions {
6
- storageKey?;
7
- defaultTheme?;
8
- enableSystemPreference?;
9
- enableSystemThemeDetection?;
10
- systemThemeStorageKey?;
6
+ storageKey?: string;
7
+ defaultTheme?: string;
8
+ enableSystemPreference?: boolean;
9
+ enableSystemThemeDetection?: boolean;
10
+ systemThemeStorageKey?: string;
11
11
  }
12
12
 
13
13
  export class ThemePersistence {
14
- private storageKey;
15
- private defaultTheme;
16
- private enableSystemPreference;
17
- private enableSystemThemeDetection;
18
- private systemThemeStorageKey;
14
+ private storageKey: string;
15
+ private defaultTheme: string;
16
+ private enableSystemPreference: boolean;
17
+ private enableSystemThemeDetection: boolean;
18
+ private systemThemeStorageKey: string;
19
19
 
20
- constructor(options= {}) {
20
+ constructor(options: ThemePersistenceOptions = {}) {
21
21
  this.storageKey = options.storageKey || 'stan-design-theme';
22
22
  this.defaultTheme = options.defaultTheme || 'stan-design';
23
23
  this.enableSystemPreference = options.enableSystemPreference ?? true;
@@ -29,7 +29,10 @@ export class ThemePersistence {
29
29
  * Get the stored theme preference
30
30
  * Falls back to system preference if enabled, then default theme
31
31
  */
32
- getStoredTheme()= localStorage.getItem(this.storageKey);
32
+ getStoredTheme(): string {
33
+ try {
34
+ // Check localStorage first
35
+ const stored = localStorage.getItem(this.storageKey);
33
36
  if (stored) {
34
37
  return stored;
35
38
  }
@@ -45,7 +48,7 @@ export class ThemePersistence {
45
48
  // Finally fall back to default
46
49
  return this.defaultTheme;
47
50
  } catch (error) {
48
- console.warn('Failed to read theme from storage, error);
51
+ console.warn('Failed to read theme from storage:', error);
49
52
  return this.defaultTheme;
50
53
  }
51
54
  }
@@ -53,30 +56,36 @@ export class ThemePersistence {
53
56
  /**
54
57
  * Store the theme preference
55
58
  */
56
- setStoredTheme(themeName), themeName);
59
+ setStoredTheme(themeName: string): void {
60
+ try {
61
+ localStorage.setItem(this.storageKey, themeName);
57
62
  } catch (error) {
58
- console.warn('Failed to store theme preference, error);
63
+ console.warn('Failed to store theme preference:', error);
59
64
  }
60
65
  }
61
66
 
62
67
  /**
63
68
  * Clear the stored theme preference
64
69
  */
65
- clearStoredTheme());
70
+ clearStoredTheme(): void {
71
+ try {
72
+ localStorage.removeItem(this.storageKey);
66
73
  } catch (error) {
67
- console.warn('Failed to clear theme preference, error);
74
+ console.warn('Failed to clear theme preference:', error);
68
75
  }
69
76
  }
70
77
 
71
78
  /**
72
79
  * Get system color scheme preference
73
80
  */
74
- private getSystemPreference()== 'undefined' && window.matchMedia) {
75
- const darkModeQuery = window.matchMedia('(prefers-color-scheme)');
76
- return darkModeQuery.matches ? 'dark' ;
81
+ private getSystemPreference(): string | null {
82
+ try {
83
+ if (typeof window !== 'undefined' && window.matchMedia) {
84
+ const darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)');
85
+ return darkModeQuery.matches ? 'dark' : 'light';
77
86
  }
78
87
  } catch (error) {
79
- console.warn('Failed to detect system preference, error);
88
+ console.warn('Failed to detect system preference:', error);
80
89
  }
81
90
  return null;
82
91
  }
@@ -84,13 +93,13 @@ export class ThemePersistence {
84
93
  /**
85
94
  * Listen for system preference changes
86
95
  */
87
- onSystemPreferenceChange(callback) => void)) => void) | null {
96
+ onSystemPreferenceChange(callback: (preference: string) => void): (() => void) | null {
88
97
  try {
89
98
  if (typeof window !== 'undefined' && window.matchMedia) {
90
- const mediaQuery = window.matchMedia('(prefers-color-scheme)');
99
+ const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
91
100
 
92
- const handleChange = (event) => {
93
- const preference = event.matches ? 'dark' ;
101
+ const handleChange = (event: MediaQueryListEvent) => {
102
+ const preference = event.matches ? 'dark' : 'light';
94
103
  callback(preference);
95
104
  };
96
105
 
@@ -106,7 +115,7 @@ export class ThemePersistence {
106
115
  }
107
116
  }
108
117
  } catch (error) {
109
- console.warn('Failed to set up system preference listener, error);
118
+ console.warn('Failed to set up system preference listener:', error);
110
119
  }
111
120
  return null;
112
121
  }
@@ -114,7 +123,9 @@ export class ThemePersistence {
114
123
  /**
115
124
  * Check if localStorage is available
116
125
  */
117
- isStorageAvailable()= '__test__';
126
+ isStorageAvailable(): boolean {
127
+ try {
128
+ const test = '__test__';
118
129
  localStorage.setItem(test, test);
119
130
  localStorage.removeItem(test);
120
131
  return true;
@@ -126,9 +137,9 @@ export class ThemePersistence {
126
137
  /**
127
138
  * Get all available storage keys related to themes
128
139
  */
129
- getThemeKeys()] {
140
+ getThemeKeys(): string[] {
130
141
  try {
131
- const keys] = [];
142
+ const keys: string[] = [];
132
143
  for (let i = 0; i < localStorage.length; i++) {
133
144
  const key = localStorage.key(i);
134
145
  if (key && key.includes('theme')) {
@@ -137,7 +148,7 @@ export class ThemePersistence {
137
148
  }
138
149
  return keys;
139
150
  } catch (error) {
140
- console.warn('Failed to get theme keys, error);
151
+ console.warn('Failed to get theme keys:', error);
141
152
  return [];
142
153
  }
143
154
  }
@@ -145,12 +156,14 @@ export class ThemePersistence {
145
156
  /**
146
157
  * Get stored system theme preference
147
158
  */
148
- getStoredSystemTheme()= localStorage.getItem(this.systemThemeStorageKey);
159
+ getStoredSystemTheme(): 'light' | 'dark' | null {
160
+ try {
161
+ const stored = localStorage.getItem(this.systemThemeStorageKey);
149
162
  if (stored === 'light' || stored === 'dark') {
150
163
  return stored;
151
164
  }
152
165
  } catch (error) {
153
- console.warn('Failed to read system theme from storage, error);
166
+ console.warn('Failed to read system theme from storage:', error);
154
167
  }
155
168
  return null;
156
169
  }
@@ -158,41 +171,49 @@ export class ThemePersistence {
158
171
  /**
159
172
  * Store system theme preference
160
173
  */
161
- setStoredSystemTheme(theme), theme);
174
+ setStoredSystemTheme(theme: 'light' | 'dark'): void {
175
+ try {
176
+ localStorage.setItem(this.systemThemeStorageKey, theme);
162
177
  } catch (error) {
163
- console.warn('Failed to store system theme preference, error);
178
+ console.warn('Failed to store system theme preference:', error);
164
179
  }
165
180
  }
166
181
 
167
182
  /**
168
183
  * Clear stored system theme preference
169
184
  */
170
- clearStoredSystemTheme());
185
+ clearStoredSystemTheme(): void {
186
+ try {
187
+ localStorage.removeItem(this.systemThemeStorageKey);
171
188
  } catch (error) {
172
- console.warn('Failed to clear system theme preference, error);
189
+ console.warn('Failed to clear system theme preference:', error);
173
190
  }
174
191
  }
175
192
 
176
193
  /**
177
194
  * Get comprehensive theme state including system theme
178
195
  */
179
- getThemeState();
180
- systemTheme;
181
- isSystemThemeEnabled;
196
+ getThemeState(): {
197
+ theme: string;
198
+ systemTheme: 'light' | 'dark' | null;
199
+ isSystemThemeEnabled: boolean;
182
200
  } {
183
201
  return {
184
- theme),
185
- systemTheme),
186
- isSystemThemeEnabled};
202
+ theme: this.getStoredTheme(),
203
+ systemTheme: this.getStoredSystemTheme(),
204
+ isSystemThemeEnabled: this.enableSystemThemeDetection
205
+ };
187
206
  }
188
207
 
189
208
  /**
190
209
  * Set comprehensive theme state
191
210
  */
192
- setThemeState(state;
193
- systemTheme?;
194
- enableSystemTheme?;
195
- })== undefined) {
211
+ setThemeState(state: {
212
+ theme?: string;
213
+ systemTheme?: 'light' | 'dark';
214
+ enableSystemTheme?: boolean;
215
+ }): void {
216
+ if (state.theme !== undefined) {
196
217
  this.setStoredTheme(state.theme);
197
218
  }
198
219
  if (state.systemTheme !== undefined) {
@@ -212,6 +233,6 @@ export const defaultThemePersistence = new ThemePersistence();
212
233
  /**
213
234
  * Create a custom theme persistence instance
214
235
  */
215
- export const createThemePersistence = (options) => {
236
+ export const createThemePersistence = (options: ThemePersistenceOptions) => {
216
237
  return new ThemePersistence(options);
217
238
  };