@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
@@ -1,17 +1,17 @@
1
1
  import React, { useState, useEffect } from 'react';
2
2
  import { Button } from './button';
3
3
  import { useTheme } from '../../themes';
4
-
4
+ import type { MultiThemeConfig } from '../../themes';
5
5
 
6
6
  export interface ThemeSwitcherProps {
7
- themes?, MultiThemeConfig>;
8
- showPreview?;
9
- showSystemTheme?;
10
- className?;
11
- variant?;
7
+ themes?: Record<string, MultiThemeConfig>;
8
+ showPreview?: boolean;
9
+ showSystemTheme?: boolean;
10
+ className?: string;
11
+ variant?: 'default' | 'compact' | 'detailed';
12
12
  }
13
13
 
14
- export const ThemeSwitcher= ({
14
+ export const ThemeSwitcher: React.FC<ThemeSwitcherProps> = ({
15
15
  showPreview = true,
16
16
  showSystemTheme = true,
17
17
  className = '',
@@ -25,9 +25,9 @@ export const ThemeSwitcher= ({
25
25
  useEffect(() => {
26
26
  if (!showSystemTheme) return;
27
27
 
28
- const mediaQuery = window.matchMedia('(prefers-color-scheme)');
29
- const updateSystemTheme = (e) => {
30
- setSystemTheme(e.matches ? 'dark' );
28
+ const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
29
+ const updateSystemTheme = (e: MediaQueryListEvent | MediaQueryList) => {
30
+ setSystemTheme(e.matches ? 'dark' : 'light');
31
31
  };
32
32
 
33
33
  updateSystemTheme(mediaQuery);
@@ -36,33 +36,35 @@ export const ThemeSwitcher= ({
36
36
  return () => mediaQuery.removeEventListener('change', updateSystemTheme);
37
37
  }, [showSystemTheme]);
38
38
 
39
- const getThemeDisplayName = (theme) => {
40
- const themeNames, string> = {
41
- 'stan-design',
42
- 'enterprise',
43
- 'harvey'};
39
+ const getThemeDisplayName = (theme: string) => {
40
+ const themeNames: Record<string, string> = {
41
+ 'stan-design': 'Stan Design',
42
+ 'enterprise': 'Enterprise',
43
+ 'harvey': 'Harvey Creative'
44
+ };
44
45
  return themeNames[theme] || theme;
45
46
  };
46
47
 
47
- const getThemeEmoji = (theme) => {
48
- const themeEmojis, string> = {
49
- 'stan-design',
50
- 'enterprise',
51
- 'harvey'};
48
+ const getThemeEmoji = (theme: string) => {
49
+ const themeEmojis: Record<string, string> = {
50
+ 'stan-design': '⚡',
51
+ 'enterprise': '🏢',
52
+ 'harvey': '🎨'
53
+ };
52
54
  return themeEmojis[theme] || '🎯';
53
55
  };
54
56
 
55
- const getThemeDescription = (theme) => {
57
+ const getThemeDescription = (theme: string) => {
56
58
  const themeConfig = getTheme(theme);
57
59
  return themeConfig?.meta?.description || 'Custom theme';
58
60
  };
59
61
 
60
- const getThemeCategory = (theme) => {
62
+ const getThemeCategory = (theme: string) => {
61
63
  const themeConfig = getTheme(theme);
62
64
  return themeConfig?.meta?.category || 'custom';
63
65
  };
64
66
 
65
- const handleThemeSwitch = (themeName) => {
67
+ const handleThemeSwitch = (themeName: string) => {
66
68
  setTheme(themeName);
67
69
  // Close preview if open
68
70
  if (showThemePreview) {
@@ -82,11 +84,12 @@ export const ThemeSwitcher= ({
82
84
 
83
85
  const renderCompactSwitcher = () => (
84
86
  <div className="flex items-center gap-2">
85
- <span className="text-sm text-gray-600 dark="flex gap-1">
87
+ <span className="text-sm text-gray-600 dark:text-gray-400">Theme:</span>
88
+ <div className="flex gap-1">
86
89
  {availableThemes.map((theme) => (
87
90
  <Button
88
91
  key={theme}
89
- variant={currentTheme === theme ? "default" }
92
+ variant={currentTheme === theme ? "default" : "outline"}
90
93
  size="sm"
91
94
  onClick={() => handleThemeSwitch(theme)}
92
95
  className="text-xs"
@@ -107,11 +110,12 @@ export const ThemeSwitcher= ({
107
110
  size="sm"
108
111
  onClick={() => setShowThemePreview(!showThemePreview)}
109
112
  >
110
- {showThemePreview ? 'Hide' } Preview
113
+ {showThemePreview ? 'Hide' : 'Show'} Preview
111
114
  </Button>
112
115
  </div>
113
116
 
114
- <div className="grid grid-cols-1 md) => {
117
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
118
+ {availableThemes.map((theme) => {
115
119
  const isActive = currentTheme === theme;
116
120
 
117
121
  return (
@@ -119,24 +123,31 @@ export const ThemeSwitcher= ({
119
123
  key={theme}
120
124
  className={`p-4 rounded-lg border-2 transition-all duration-200 cursor-pointer ${
121
125
  isActive
122
- ? 'border-blue-500 bg-blue-50 dark}`}
126
+ ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20'
127
+ : 'border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600'
128
+ }`}
123
129
  onClick={() => handleThemeSwitch(theme)}
124
130
  >
125
131
  <div className="flex items-center gap-3 mb-3">
126
132
  <span className="text-2xl">{getThemeEmoji(theme)}</span>
127
133
  <div>
128
- <h4 className="font-semibold text-gray-900 dark)}
134
+ <h4 className="font-semibold text-gray-900 dark:text-gray-100">
135
+ {getThemeDisplayName(theme)}
129
136
  </h4>
130
- <p className="text-sm text-gray-500 dark)}
137
+ <p className="text-sm text-gray-500 dark:text-gray-400">
138
+ {getThemeCategory(theme)}
131
139
  </p>
132
140
  </div>
133
141
  </div>
134
142
 
135
- <p className="text-sm text-gray-600 dark)}
143
+ <p className="text-sm text-gray-600 dark:text-gray-300 mb-3">
144
+ {getThemeDescription(theme)}
136
145
  </p>
137
146
 
138
147
  {isActive && (
139
- <div className="flex items-center gap-2 text-blue-600 dark="w-2 h-2 bg-blue-600 dark="text-sm font-medium">Active</span>
148
+ <div className="flex items-center gap-2 text-blue-600 dark:text-blue-400">
149
+ <div className="w-2 h-2 bg-blue-600 dark:bg-blue-400 rounded-full"></div>
150
+ <span className="text-sm font-medium">Active</span>
140
151
  </div>
141
152
  )}
142
153
  </div>
@@ -145,9 +156,14 @@ export const ThemeSwitcher= ({
145
156
  </div>
146
157
 
147
158
  {showSystemTheme && (
148
- <div className="mt-6 p-4 bg-gray-50 dark="flex items-center justify-between">
159
+ <div className="mt-6 p-4 bg-gray-50 dark:bg-gray-800 rounded-lg">
160
+ <div className="flex items-center justify-between">
149
161
  <div>
150
- <h4 className="font-medium text-gray-900 dark="text-sm text-gray-600 dark}
162
+ <h4 className="font-medium text-gray-900 dark:text-gray-100">
163
+ System Theme Detection
164
+ </h4>
165
+ <p className="text-sm text-gray-600 dark:text-gray-400">
166
+ Current system preference: {systemTheme}
151
167
  </p>
152
168
  </div>
153
169
  <Button
@@ -166,11 +182,12 @@ export const ThemeSwitcher= ({
166
182
  const renderDefaultSwitcher = () => (
167
183
  <div className="space-y-3">
168
184
  <div className="flex items-center gap-2">
169
- <span className="text-sm font-medium text-gray-700 dark="flex gap-2">
185
+ <span className="text-sm font-medium text-gray-700 dark:text-gray-300">Theme:</span>
186
+ <div className="flex gap-2">
170
187
  {availableThemes.map((theme) => (
171
188
  <Button
172
189
  key={theme}
173
- variant={currentTheme === theme ? "default" }
190
+ variant={currentTheme === theme ? "default" : "outline"}
174
191
  size="sm"
175
192
  onClick={() => handleThemeSwitch(theme)}
176
193
  className="text-sm"
@@ -189,13 +206,15 @@ export const ThemeSwitcher= ({
189
206
  onClick={() => setShowThemePreview(!showThemePreview)}
190
207
  className="text-xs"
191
208
  >
192
- {showThemePreview ? 'Hide' } Theme Details
209
+ {showThemePreview ? 'Hide' : 'Show'} Theme Details
193
210
  </Button>
194
211
  </div>
195
212
  )}
196
213
 
197
214
  {showThemePreview && (
198
- <div className="mt-3 p-3 bg-gray-50 dark="grid grid-cols-1 sm) => {
215
+ <div className="mt-3 p-3 bg-gray-50 dark:bg-gray-800 rounded-lg">
216
+ <div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
217
+ {availableThemes.map((theme) => {
199
218
  const isActive = currentTheme === theme;
200
219
 
201
220
  return (
@@ -203,15 +222,19 @@ export const ThemeSwitcher= ({
203
222
  key={theme}
204
223
  className={`p-2 rounded border text-xs ${
205
224
  isActive
206
- ? 'border-blue-300 bg-blue-50 dark}`}
225
+ ? 'border-blue-300 bg-blue-50 dark:bg-blue-900/20'
226
+ : 'border-gray-200 dark:border-gray-700'
227
+ }`}
207
228
  >
208
229
  <div className="flex items-center gap-2 mb-1">
209
230
  <span>{getThemeEmoji(theme)}</span>
210
231
  <span className="font-medium">{getThemeDisplayName(theme)}</span>
211
232
  {isActive && (
212
- <span className="text-blue-600 dark)}
233
+ <span className="text-blue-600 dark:text-blue-400 text-xs">●</span>
234
+ )}
213
235
  </div>
214
- <p className="text-gray-600 dark)}
236
+ <p className="text-gray-600 dark:text-gray-400">
237
+ {getThemeDescription(theme)}
215
238
  </p>
216
239
  </div>
217
240
  );
@@ -224,9 +247,12 @@ export const ThemeSwitcher= ({
224
247
 
225
248
  const renderContent = () => {
226
249
  switch (variant) {
227
- case 'compact');
228
- case 'detailed');
229
- default);
250
+ case 'compact':
251
+ return renderCompactSwitcher();
252
+ case 'detailed':
253
+ return renderDetailedSwitcher();
254
+ default:
255
+ return renderDefaultSwitcher();
230
256
  }
231
257
  };
232
258
 
@@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
2
2
  import { Button } from './button';
3
3
  import { Moon, Sun } from 'lucide-react';
4
4
 
5
- export const ThemeToggle= () => {
5
+ export const ThemeToggle: React.FC = () => {
6
6
  const [isDark, setIsDark] = useState(false);
7
7
 
8
8
  useEffect(() => {
@@ -30,9 +30,9 @@ export const ThemeToggle= () => {
30
30
  size="sm"
31
31
  onClick={toggleTheme}
32
32
  className="h-8 w-8 px-0"
33
- aria-label={`Switch to ${isDark ? 'light' } mode`}
33
+ aria-label={`Switch to ${isDark ? 'light' : 'dark'} mode`}
34
34
  >
35
- {isDark ? <Sun className="h-4 w-4" /> ="h-4 w-4" />}
35
+ {isDark ? <Sun className="h-4 w-4" /> : <Moon className="h-4 w-4" />}
36
36
  </Button>
37
37
  );
38
38
  };
@@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
2
2
  import { Button } from './button';
3
3
  import { Moon, Sun } from 'lucide-react';
4
4
 
5
- export const ThemeToggle= () => {
5
+ export const ThemeToggle: React.FC = () => {
6
6
  const [isDark, setIsDark] = useState(false);
7
7
 
8
8
  useEffect(() => {
@@ -30,9 +30,9 @@ export const ThemeToggle= () => {
30
30
  size="sm"
31
31
  onClick={toggleTheme}
32
32
  className="h-8 w-8 px-0"
33
- aria-label={`Switch to ${isDark ? 'light' } mode`}
33
+ aria-label={`Switch to ${isDark ? 'light' : 'dark'} mode`}
34
34
  >
35
- {isDark ? <Sun className="h-4 w-4" /> ="h-4 w-4" />}
35
+ {isDark ? <Sun className="h-4 w-4" /> : <Moon className="h-4 w-4" />}
36
36
  </Button>
37
37
  );
38
38
  };
@@ -5,7 +5,7 @@ import { Button } from './button';
5
5
  import { useTheme } from '../../themes';
6
6
  import { createTokenManager } from '../../tokens';
7
7
 
8
- export const TokenDemo= () => {
8
+ export const TokenDemo: React.FC = () => {
9
9
  const { currentTheme, currentThemeConfig } = useTheme();
10
10
  const [tokenManager] = useState(() => createTokenManager());
11
11
  const [exportFormat, setExportFormat] = useState<'json' | 'css' | 'scss' | 'js' | 'ts'>('json');
@@ -36,7 +36,7 @@ export const TokenDemo= () => {
36
36
  const allFormats = ['json', 'css', 'scss', 'js', 'ts'] as const;
37
37
  const results = allFormats.map(format => ({
38
38
  format,
39
- content, format)
39
+ content: tokenManager.exportTokens(tokens, format)
40
40
  }));
41
41
 
42
42
  const combined = results.map(r => `=== ${r.format.toUpperCase()} ===\n${r.content}\n\n`).join('');
@@ -79,7 +79,9 @@ export const TokenDemo= () => {
79
79
  </div>
80
80
 
81
81
  <div className="flex items-center gap-4">
82
- <label className="text-sm font-medium">Export Format={exportFormat}
82
+ <label className="text-sm font-medium">Export Format:</label>
83
+ <select
84
+ value={exportFormat}
83
85
  onChange={(e) => setExportFormat(e.target.value as any)}
84
86
  className="px-3 py-1 border rounded text-sm"
85
87
  >
@@ -92,26 +94,34 @@ export const TokenDemo= () => {
92
94
  </div>
93
95
 
94
96
  {tokenStats && (
95
- <div className="p-4 bg-gray-50 dark="font-semibold mb-3">Token Statistics</h4>
96
- <div className="grid grid-cols-2 md="font-medium">Total Themes="text-lg font-bold">{tokenStats.totalThemes}</div>
97
+ <div className="p-4 bg-gray-50 dark:bg-gray-800 rounded-lg">
98
+ <h4 className="font-semibold mb-3">Token Statistics</h4>
99
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-4 text-sm">
100
+ <div>
101
+ <span className="font-medium">Total Themes:</span>
102
+ <div className="text-lg font-bold">{tokenStats.totalThemes}</div>
97
103
  </div>
98
104
  <div>
99
- <span className="font-medium">Total Tokens="text-lg font-bold">{tokenStats.totalTokens}</div>
105
+ <span className="font-medium">Total Tokens:</span>
106
+ <div className="text-lg font-bold">{tokenStats.totalTokens}</div>
100
107
  </div>
101
108
  <div>
102
- <span className="font-medium">Current Theme="text-lg font-bold">{currentTheme}</div>
109
+ <span className="font-medium">Current Theme:</span>
110
+ <div className="text-lg font-bold">{currentTheme}</div>
103
111
  </div>
104
112
  <div>
105
- <span className="font-medium">Theme Version="text-lg font-bold">{currentThemeConfig?.meta.version || 'N/A'}</div>
113
+ <span className="font-medium">Theme Version:</span>
114
+ <div className="text-lg font-bold">{currentThemeConfig?.meta.version || 'N/A'}</div>
106
115
  </div>
107
116
  </div>
108
117
 
109
118
  {tokenStats.tokenBreakdown && (
110
119
  <div className="mt-4">
111
- <h5 className="font-medium mb-2">Token Breakdown="flex flex-wrap gap-2">
120
+ <h5 className="font-medium mb-2">Token Breakdown:</h5>
121
+ <div className="flex flex-wrap gap-2">
112
122
  {Object.entries(tokenStats.tokenBreakdown).map(([category, count]) => (
113
123
  <Badge key={category} variant="secondary">
114
- {category}}
124
+ {category}: {count as number}
115
125
  </Badge>
116
126
  ))}
117
127
  </div>
@@ -156,23 +166,25 @@ export const TokenDemo= () => {
156
166
  </CardDescription>
157
167
  </CardHeader>
158
168
  <CardContent>
159
- <div className="grid grid-cols-1 md="font-medium mb-2">Theme Details</h4>
169
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
170
+ <div>
171
+ <h4 className="font-medium mb-2">Theme Details</h4>
160
172
  <div className="space-y-2 text-sm">
161
- <div><span className="font-medium">Name}</div>
162
- <div><span className="font-medium">Description}</div>
163
- <div><span className="font-medium">Category}</div>
164
- <div><span className="font-medium">Version}</div>
165
- <div><span className="font-medium">Author}</div>
173
+ <div><span className="font-medium">Name:</span> {currentThemeConfig?.meta.name}</div>
174
+ <div><span className="font-medium">Description:</span> {currentThemeConfig?.meta.description}</div>
175
+ <div><span className="font-medium">Category:</span> {currentThemeConfig?.meta.category}</div>
176
+ <div><span className="font-medium">Version:</span> {currentThemeConfig?.meta.version}</div>
177
+ <div><span className="font-medium">Author:</span> {currentThemeConfig?.meta.author}</div>
166
178
  </div>
167
179
  </div>
168
180
  <div>
169
181
  <h4 className="font-medium mb-2">Font Configuration</h4>
170
182
  <div className="space-y-2 text-sm">
171
- <div><span className="font-medium">Primary}</div>
172
- <div><span className="font-medium">Secondary}</div>
173
- <div><span className="font-medium">Display}</div>
174
- <div><span className="font-medium">Body}</div>
175
- <div><span className="font-medium">Mono}</div>
183
+ <div><span className="font-medium">Primary:</span> {currentThemeConfig?.fonts.primary.family}</div>
184
+ <div><span className="font-medium">Secondary:</span> {currentThemeConfig?.fonts.secondary.family}</div>
185
+ <div><span className="font-medium">Display:</span> {currentThemeConfig?.fonts.display.family}</div>
186
+ <div><span className="font-medium">Body:</span> {currentThemeConfig?.fonts.body.family}</div>
187
+ <div><span className="font-medium">Mono:</span> {currentThemeConfig?.fonts.mono.family}</div>
176
188
  </div>
177
189
  </div>
178
190
  </div>
@@ -5,7 +5,7 @@ import { Button } from './button';
5
5
  import { useTheme } from '../../themes';
6
6
  import { createTokenManager } from '../../tokens';
7
7
 
8
- export const TokenDemo= () => {
8
+ export const TokenDemo: React.FC = () => {
9
9
  const { currentTheme, currentThemeConfig } = useTheme();
10
10
  const [tokenManager] = useState(() => createTokenManager());
11
11
  const [exportFormat, setExportFormat] = useState<'json' | 'css' | 'scss' | 'js' | 'ts'>('json');
@@ -36,7 +36,7 @@ export const TokenDemo= () => {
36
36
  const allFormats = ['json', 'css', 'scss', 'js', 'ts'] as const;
37
37
  const results = allFormats.map(format => ({
38
38
  format,
39
- content, format)
39
+ content: tokenManager.exportTokens(tokens, format)
40
40
  }));
41
41
 
42
42
  const combined = results.map(r => `=== ${r.format.toUpperCase()} ===\n${r.content}\n\n`).join('');
@@ -79,7 +79,9 @@ export const TokenDemo= () => {
79
79
  </div>
80
80
 
81
81
  <div className="flex items-center gap-4">
82
- <label className="text-sm font-medium">Export Format={exportFormat}
82
+ <label className="text-sm font-medium">Export Format:</label>
83
+ <select
84
+ value={exportFormat}
83
85
  onChange={(e) => setExportFormat(e.target.value as any)}
84
86
  className="px-3 py-1 border rounded text-sm"
85
87
  >
@@ -92,26 +94,34 @@ export const TokenDemo= () => {
92
94
  </div>
93
95
 
94
96
  {tokenStats && (
95
- <div className="p-4 bg-gray-50 dark="font-semibold mb-3">Token Statistics</h4>
96
- <div className="grid grid-cols-2 md="font-medium">Total Themes="text-lg font-bold">{tokenStats.totalThemes}</div>
97
+ <div className="p-4 bg-gray-50 dark:bg-gray-800 rounded-lg">
98
+ <h4 className="font-semibold mb-3">Token Statistics</h4>
99
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-4 text-sm">
100
+ <div>
101
+ <span className="font-medium">Total Themes:</span>
102
+ <div className="text-lg font-bold">{tokenStats.totalThemes}</div>
97
103
  </div>
98
104
  <div>
99
- <span className="font-medium">Total Tokens="text-lg font-bold">{tokenStats.totalTokens}</div>
105
+ <span className="font-medium">Total Tokens:</span>
106
+ <div className="text-lg font-bold">{tokenStats.totalTokens}</div>
100
107
  </div>
101
108
  <div>
102
- <span className="font-medium">Current Theme="text-lg font-bold">{currentTheme}</div>
109
+ <span className="font-medium">Current Theme:</span>
110
+ <div className="text-lg font-bold">{currentTheme}</div>
103
111
  </div>
104
112
  <div>
105
- <span className="font-medium">Theme Version="text-lg font-bold">{currentThemeConfig?.meta.version || 'N/A'}</div>
113
+ <span className="font-medium">Theme Version:</span>
114
+ <div className="text-lg font-bold">{currentThemeConfig?.meta.version || 'N/A'}</div>
106
115
  </div>
107
116
  </div>
108
117
 
109
118
  {tokenStats.tokenBreakdown && (
110
119
  <div className="mt-4">
111
- <h5 className="font-medium mb-2">Token Breakdown="flex flex-wrap gap-2">
120
+ <h5 className="font-medium mb-2">Token Breakdown:</h5>
121
+ <div className="flex flex-wrap gap-2">
112
122
  {Object.entries(tokenStats.tokenBreakdown).map(([category, count]) => (
113
123
  <Badge key={category} variant="secondary">
114
- {category}}
124
+ {category}: {count as number}
115
125
  </Badge>
116
126
  ))}
117
127
  </div>
@@ -156,23 +166,25 @@ export const TokenDemo= () => {
156
166
  </CardDescription>
157
167
  </CardHeader>
158
168
  <CardContent>
159
- <div className="grid grid-cols-1 md="font-medium mb-2">Theme Details</h4>
169
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
170
+ <div>
171
+ <h4 className="font-medium mb-2">Theme Details</h4>
160
172
  <div className="space-y-2 text-sm">
161
- <div><span className="font-medium">Name}</div>
162
- <div><span className="font-medium">Description}</div>
163
- <div><span className="font-medium">Category}</div>
164
- <div><span className="font-medium">Version}</div>
165
- <div><span className="font-medium">Author}</div>
173
+ <div><span className="font-medium">Name:</span> {currentThemeConfig?.meta.name}</div>
174
+ <div><span className="font-medium">Description:</span> {currentThemeConfig?.meta.description}</div>
175
+ <div><span className="font-medium">Category:</span> {currentThemeConfig?.meta.category}</div>
176
+ <div><span className="font-medium">Version:</span> {currentThemeConfig?.meta.version}</div>
177
+ <div><span className="font-medium">Author:</span> {currentThemeConfig?.meta.author}</div>
166
178
  </div>
167
179
  </div>
168
180
  <div>
169
181
  <h4 className="font-medium mb-2">Font Configuration</h4>
170
182
  <div className="space-y-2 text-sm">
171
- <div><span className="font-medium">Primary}</div>
172
- <div><span className="font-medium">Secondary}</div>
173
- <div><span className="font-medium">Display}</div>
174
- <div><span className="font-medium">Body}</div>
175
- <div><span className="font-medium">Mono}</div>
183
+ <div><span className="font-medium">Primary:</span> {currentThemeConfig?.fonts.primary.family}</div>
184
+ <div><span className="font-medium">Secondary:</span> {currentThemeConfig?.fonts.secondary.family}</div>
185
+ <div><span className="font-medium">Display:</span> {currentThemeConfig?.fonts.display.family}</div>
186
+ <div><span className="font-medium">Body:</span> {currentThemeConfig?.fonts.body.family}</div>
187
+ <div><span className="font-medium">Mono:</span> {currentThemeConfig?.fonts.mono.family}</div>
176
188
  </div>
177
189
  </div>
178
190
  </div>