@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.8 → 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
@@ -2,28 +2,47 @@ import { useState, useEffect, useCallback, useMemo } from 'react'
2
2
  import { useDevice } from './use-device'
3
3
 
4
4
  export interface AnimationProfile {
5
- duration}
6
- easing}
7
- performance}
5
+ duration: {
6
+ fast: string
7
+ normal: string
8
+ slow: string
9
+ }
10
+ easing: {
11
+ ease: string
12
+ easeIn: string
13
+ easeOut: string
14
+ easeInOut: string
15
+ bounce: string
16
+ }
17
+ performance: {
18
+ mode: 'high' | 'medium' | 'low'
19
+ batteryOptimized: boolean
20
+ reducedMotion: boolean
21
+ }
8
22
  }
9
23
 
10
24
  export interface PerformanceMetrics {
11
- fps}
25
+ fps: number
26
+ memoryUsage?: number
27
+ batteryLevel?: number
28
+ isLowPowerMode?: boolean
29
+ }
12
30
 
13
31
  export const useAnimationProfile = () => {
14
32
  const deviceInfo = useDevice()
15
33
  const [performanceMetrics, setPerformanceMetrics] = useState<PerformanceMetrics>({
16
- fps,
17
- memoryUsage,
18
- batteryLevel,
19
- isLowPowerMode})
34
+ fps: 60,
35
+ memoryUsage: undefined,
36
+ batteryLevel: undefined,
37
+ isLowPowerMode: false
38
+ })
20
39
  const [isReducedMotion, setIsReducedMotion] = useState(false)
21
40
 
22
41
  // Check for reduced motion preference
23
42
  useEffect(() => {
24
43
  const checkReducedMotion = () => {
25
44
  if (typeof window !== 'undefined' && window.matchMedia) {
26
- const reducedMotionQuery = window.matchMedia('(prefers-reduced-motion)')
45
+ const reducedMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)')
27
46
  setIsReducedMotion(reducedMotionQuery.matches)
28
47
 
29
48
  reducedMotionQuery.addEventListener('change', (e) => {
@@ -39,7 +58,9 @@ export const useAnimationProfile = () => {
39
58
  useEffect(() => {
40
59
  let frameCount = 0
41
60
  let lastTime = performance.now()
42
- let animationId= () => {
61
+ let animationId: number
62
+
63
+ const measureFPS = () => {
43
64
  frameCount++
44
65
  const currentTime = performance.now()
45
66
 
@@ -69,7 +90,8 @@ export const useAnimationProfile = () => {
69
90
  const memory = (performance as any).memory
70
91
  setPerformanceMetrics(prev => ({
71
92
  ...prev,
72
- memoryUsage}))
93
+ memoryUsage: memory.usedJSHeapSize / memory.jsHeapSizeLimit
94
+ }))
73
95
  }
74
96
  }
75
97
 
@@ -87,17 +109,19 @@ export const useAnimationProfile = () => {
87
109
  const battery = await (navigator as any).getBattery()
88
110
  setPerformanceMetrics(prev => ({
89
111
  ...prev,
90
- batteryLevel,
91
- isLowPowerMode}))
112
+ batteryLevel: battery.level,
113
+ isLowPowerMode: battery.level < 0.2
114
+ }))
92
115
 
93
116
  battery.addEventListener('levelchange', () => {
94
117
  setPerformanceMetrics(prev => ({
95
118
  ...prev,
96
- batteryLevel,
97
- isLowPowerMode}))
119
+ batteryLevel: battery.level,
120
+ isLowPowerMode: battery.level < 0.2
121
+ }))
98
122
  })
99
123
  } catch (error) {
100
- console.warn('Battery API not available, error)
124
+ console.warn('Battery API not available:', error)
101
125
  }
102
126
  }
103
127
  }
@@ -122,20 +146,25 @@ export const useAnimationProfile = () => {
122
146
  }, [performanceMetrics.isLowPowerMode, performanceMetrics.batteryLevel, performanceMode])
123
147
 
124
148
  // Get device-specific animation profile
125
- const getAnimationProfile = useCallback(()=> {
126
- const baseProfile= {
127
- duration,
128
- normal,
129
- slow},
130
- easing,
131
- easeIn,
132
- easeOut,
133
- easeInOut,
134
- bounce, -0.55, 0.265, 1.55)'
149
+ const getAnimationProfile = useCallback((): AnimationProfile => {
150
+ const baseProfile: AnimationProfile = {
151
+ duration: {
152
+ fast: '0.15s',
153
+ normal: '0.3s',
154
+ slow: '0.5s'
155
+ },
156
+ easing: {
157
+ ease: 'ease',
158
+ easeIn: 'ease-in',
159
+ easeOut: 'ease-out',
160
+ easeInOut: 'ease-in-out',
161
+ bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)'
135
162
  },
136
- performance,
137
- batteryOptimized,
138
- reducedMotion}
163
+ performance: {
164
+ mode: performanceMode,
165
+ batteryOptimized: shouldOptimizeForBattery,
166
+ reducedMotion: isReducedMotion
167
+ }
139
168
  }
140
169
 
141
170
  // Apply device-specific optimizations
@@ -203,13 +232,13 @@ export const useAnimationProfile = () => {
203
232
  }, [deviceInfo.isMobile, deviceInfo.isTablet, getAnimationProfile])
204
233
 
205
234
  // Get optimized duration for specific use case
206
- const getOptimizedDuration = useCallback((type= 'normal') => {
235
+ const getOptimizedDuration = useCallback((type: 'fast' | 'normal' | 'slow' = 'normal') => {
207
236
  const profile = getAnimationProfile()
208
237
  return profile.duration[type]
209
238
  }, [getAnimationProfile])
210
239
 
211
240
  // Get optimized easing for specific use case
212
- const getOptimizedEasing = useCallback((type] = 'ease') => {
241
+ const getOptimizedEasing = useCallback((type: keyof AnimationProfile['easing'] = 'ease') => {
213
242
  const profile = getAnimationProfile()
214
243
  return profile.easing[type]
215
244
  }, [getAnimationProfile])
@@ -224,7 +253,7 @@ export const useAnimationProfile = () => {
224
253
  }, [isReducedMotion, performanceMode, shouldOptimizeForBattery])
225
254
 
226
255
  return {
227
- profile),
256
+ profile: getAnimationProfile(),
228
257
  performanceMetrics,
229
258
  deviceInfo,
230
259
  getAnimationClasses,
@@ -238,12 +267,12 @@ export const useAnimationProfile = () => {
238
267
  }
239
268
 
240
269
  // Convenience hooks for specific use cases
241
- export const useAnimationDuration = (type= 'normal') => {
270
+ export const useAnimationDuration = (type: 'fast' | 'normal' | 'slow' = 'normal') => {
242
271
  const { getOptimizedDuration } = useAnimationProfile()
243
272
  return getOptimizedDuration(type)
244
273
  }
245
274
 
246
- export const useAnimationEasing = (type] = 'ease') => {
275
+ export const useAnimationEasing = (type: keyof AnimationProfile['easing'] = 'ease') => {
247
276
  const { getOptimizedEasing } = useAnimationProfile()
248
277
  return getOptimizedEasing(type)
249
278
  }
@@ -2,28 +2,47 @@ import { useState, useEffect, useCallback, useMemo } from 'react'
2
2
  import { useDevice } from './use-device'
3
3
 
4
4
  export interface AnimationProfile {
5
- duration}
6
- easing}
7
- performance}
5
+ duration: {
6
+ fast: string
7
+ normal: string
8
+ slow: string
9
+ }
10
+ easing: {
11
+ ease: string
12
+ easeIn: string
13
+ easeOut: string
14
+ easeInOut: string
15
+ bounce: string
16
+ }
17
+ performance: {
18
+ mode: 'high' | 'medium' | 'low'
19
+ batteryOptimized: boolean
20
+ reducedMotion: boolean
21
+ }
8
22
  }
9
23
 
10
24
  export interface PerformanceMetrics {
11
- fps}
25
+ fps: number
26
+ memoryUsage?: number
27
+ batteryLevel?: number
28
+ isLowPowerMode?: boolean
29
+ }
12
30
 
13
31
  export const useAnimationProfile = () => {
14
32
  const deviceInfo = useDevice()
15
33
  const [performanceMetrics, setPerformanceMetrics] = useState<PerformanceMetrics>({
16
- fps,
17
- memoryUsage,
18
- batteryLevel,
19
- isLowPowerMode})
34
+ fps: 60,
35
+ memoryUsage: undefined,
36
+ batteryLevel: undefined,
37
+ isLowPowerMode: false
38
+ })
20
39
  const [isReducedMotion, setIsReducedMotion] = useState(false)
21
40
 
22
41
  // Check for reduced motion preference
23
42
  useEffect(() => {
24
43
  const checkReducedMotion = () => {
25
44
  if (typeof window !== 'undefined' && window.matchMedia) {
26
- const reducedMotionQuery = window.matchMedia('(prefers-reduced-motion)')
45
+ const reducedMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)')
27
46
  setIsReducedMotion(reducedMotionQuery.matches)
28
47
 
29
48
  reducedMotionQuery.addEventListener('change', (e) => {
@@ -39,7 +58,9 @@ export const useAnimationProfile = () => {
39
58
  useEffect(() => {
40
59
  let frameCount = 0
41
60
  let lastTime = performance.now()
42
- let animationId= () => {
61
+ let animationId: number
62
+
63
+ const measureFPS = () => {
43
64
  frameCount++
44
65
  const currentTime = performance.now()
45
66
 
@@ -69,7 +90,8 @@ export const useAnimationProfile = () => {
69
90
  const memory = (performance as any).memory
70
91
  setPerformanceMetrics(prev => ({
71
92
  ...prev,
72
- memoryUsage}))
93
+ memoryUsage: memory.usedJSHeapSize / memory.jsHeapSizeLimit
94
+ }))
73
95
  }
74
96
  }
75
97
 
@@ -87,17 +109,19 @@ export const useAnimationProfile = () => {
87
109
  const battery = await (navigator as any).getBattery()
88
110
  setPerformanceMetrics(prev => ({
89
111
  ...prev,
90
- batteryLevel,
91
- isLowPowerMode}))
112
+ batteryLevel: battery.level,
113
+ isLowPowerMode: battery.level < 0.2
114
+ }))
92
115
 
93
116
  battery.addEventListener('levelchange', () => {
94
117
  setPerformanceMetrics(prev => ({
95
118
  ...prev,
96
- batteryLevel,
97
- isLowPowerMode}))
119
+ batteryLevel: battery.level,
120
+ isLowPowerMode: battery.level < 0.2
121
+ }))
98
122
  })
99
123
  } catch (error) {
100
- console.warn('Battery API not available, error)
124
+ console.warn('Battery API not available:', error)
101
125
  }
102
126
  }
103
127
  }
@@ -122,20 +146,25 @@ export const useAnimationProfile = () => {
122
146
  }, [performanceMetrics.isLowPowerMode, performanceMetrics.batteryLevel, performanceMode])
123
147
 
124
148
  // Get device-specific animation profile
125
- const getAnimationProfile = useCallback(()=> {
126
- const baseProfile= {
127
- duration,
128
- normal,
129
- slow},
130
- easing,
131
- easeIn,
132
- easeOut,
133
- easeInOut,
134
- bounce, -0.55, 0.265, 1.55)'
149
+ const getAnimationProfile = useCallback((): AnimationProfile => {
150
+ const baseProfile: AnimationProfile = {
151
+ duration: {
152
+ fast: '0.15s',
153
+ normal: '0.3s',
154
+ slow: '0.5s'
155
+ },
156
+ easing: {
157
+ ease: 'ease',
158
+ easeIn: 'ease-in',
159
+ easeOut: 'ease-out',
160
+ easeInOut: 'ease-in-out',
161
+ bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)'
135
162
  },
136
- performance,
137
- batteryOptimized,
138
- reducedMotion}
163
+ performance: {
164
+ mode: performanceMode,
165
+ batteryOptimized: shouldOptimizeForBattery,
166
+ reducedMotion: isReducedMotion
167
+ }
139
168
  }
140
169
 
141
170
  // Apply device-specific optimizations
@@ -203,13 +232,13 @@ export const useAnimationProfile = () => {
203
232
  }, [deviceInfo.isMobile, deviceInfo.isTablet, getAnimationProfile])
204
233
 
205
234
  // Get optimized duration for specific use case
206
- const getOptimizedDuration = useCallback((type= 'normal') => {
235
+ const getOptimizedDuration = useCallback((type: 'fast' | 'normal' | 'slow' = 'normal') => {
207
236
  const profile = getAnimationProfile()
208
237
  return profile.duration[type]
209
238
  }, [getAnimationProfile])
210
239
 
211
240
  // Get optimized easing for specific use case
212
- const getOptimizedEasing = useCallback((type] = 'ease') => {
241
+ const getOptimizedEasing = useCallback((type: keyof AnimationProfile['easing'] = 'ease') => {
213
242
  const profile = getAnimationProfile()
214
243
  return profile.easing[type]
215
244
  }, [getAnimationProfile])
@@ -224,7 +253,7 @@ export const useAnimationProfile = () => {
224
253
  }, [isReducedMotion, performanceMode, shouldOptimizeForBattery])
225
254
 
226
255
  return {
227
- profile),
256
+ profile: getAnimationProfile(),
228
257
  performanceMetrics,
229
258
  deviceInfo,
230
259
  getAnimationClasses,
@@ -238,12 +267,12 @@ export const useAnimationProfile = () => {
238
267
  }
239
268
 
240
269
  // Convenience hooks for specific use cases
241
- export const useAnimationDuration = (type= 'normal') => {
270
+ export const useAnimationDuration = (type: 'fast' | 'normal' | 'slow' = 'normal') => {
242
271
  const { getOptimizedDuration } = useAnimationProfile()
243
272
  return getOptimizedDuration(type)
244
273
  }
245
274
 
246
- export const useAnimationEasing = (type] = 'ease') => {
275
+ export const useAnimationEasing = (type: keyof AnimationProfile['easing'] = 'ease') => {
247
276
  const { getOptimizedEasing } = useAnimationProfile()
248
277
  return getOptimizedEasing(type)
249
278
  }
@@ -1,22 +1,40 @@
1
1
  import { useState, useEffect, useCallback, useRef } from 'react'
2
2
 
3
3
  export interface BatteryAnimationConfig {
4
- enableBatteryMonitoring?}
4
+ enableBatteryMonitoring?: boolean
5
+ enablePerformanceThrottling?: boolean
6
+ enableReducedMotion?: boolean
7
+ enableUserPreferences?: boolean
8
+ enableAutomaticOptimization?: boolean
9
+ lowBatteryThreshold?: number
10
+ criticalBatteryThreshold?: number
11
+ performanceThrottleThreshold?: number
12
+ animationComplexityLevels?: 'low' | 'medium' | 'high'
13
+ }
5
14
 
6
15
  export interface BatteryAnimationState {
7
- batteryLevel}
16
+ batteryLevel: number
17
+ isLowBattery: boolean
18
+ isCriticalBattery: boolean
19
+ isCharging: boolean
20
+ performanceScore: number
21
+ shouldThrottle: boolean
22
+ throttleLevel: 'none' | 'light' | 'moderate' | 'aggressive'
23
+ reducedMotion: boolean
24
+ userPreference: 'performance' | 'balanced' | 'battery' | 'accessibility'
25
+ }
8
26
 
9
27
  export interface BatteryAnimationCallbacks {
10
- onBatteryLevelChange?, isLow) => void
11
- onPerformanceWarning?, shouldThrottle) => void
12
- onAnimationThrottled?, reason) => void
13
- onUserPreferenceChange?) => void
14
- onReducedMotionChange?) => void
28
+ onBatteryLevelChange?: (level: number, isLow: boolean) => void
29
+ onPerformanceWarning?: (score: number, shouldThrottle: boolean) => void
30
+ onAnimationThrottled?: (level: string, reason: string) => void
31
+ onUserPreferenceChange?: (preference: string) => void
32
+ onReducedMotionChange?: (enabled: boolean) => void
15
33
  }
16
34
 
17
35
  export const useBatteryAnimations = (
18
- config= {},
19
- callbacks= {}
36
+ config: BatteryAnimationConfig = {},
37
+ callbacks: BatteryAnimationCallbacks = {}
20
38
  ) => {
21
39
  const {
22
40
  enableBatteryMonitoring = true,
@@ -30,15 +48,16 @@ export const useBatteryAnimations = (
30
48
  } = config
31
49
 
32
50
  const [state, setState] = useState<BatteryAnimationState>({
33
- batteryLevel,
34
- isLowBattery,
35
- isCriticalBattery,
36
- isCharging,
37
- performanceScore,
38
- shouldThrottle,
39
- throttleLevel,
40
- reducedMotion,
41
- userPreference})
51
+ batteryLevel: 1,
52
+ isLowBattery: false,
53
+ isCriticalBattery: false,
54
+ isCharging: false,
55
+ performanceScore: 100,
56
+ shouldThrottle: false,
57
+ throttleLevel: 'none',
58
+ reducedMotion: false,
59
+ userPreference: 'balanced'
60
+ })
42
61
 
43
62
  const [isOptimizing, setIsOptimizing] = useState(false)
44
63
  const [optimizations, setOptimizations] = useState<string[]>([])
@@ -47,7 +66,7 @@ export const useBatteryAnimations = (
47
66
  const batteryCheckIntervalRef = useRef<number | null>(null)
48
67
 
49
68
  // Battery level detection
50
- const getBatteryStatus = useCallback(async ()=> {
69
+ const getBatteryStatus = useCallback(async (): Promise<void> => {
51
70
  if (!enableBatteryMonitoring || !('getBattery' in navigator)) return
52
71
 
53
72
  try {
@@ -69,7 +88,7 @@ export const useBatteryAnimations = (
69
88
 
70
89
  callbacks.onBatteryLevelChange?.(batteryLevel, isLowBattery)
71
90
  } catch (error) {
72
- console.warn('Battery API not available, error)
91
+ console.warn('Battery API not available:', error)
73
92
  }
74
93
  }, [enableBatteryMonitoring, lowBatteryThreshold, criticalBatteryThreshold, callbacks])
75
94
 
@@ -92,7 +111,7 @@ export const useBatteryAnimations = (
92
111
  callbacks.onPerformanceWarning?.(performanceScore, shouldThrottle)
93
112
  }
94
113
  } catch (error) {
95
- console.warn('Performance measurement failed, error)
114
+ console.warn('Performance measurement failed:', error)
96
115
  }
97
116
  }, [enablePerformanceThrottling, performanceThrottleThreshold, callbacks])
98
117
 
@@ -101,7 +120,7 @@ export const useBatteryAnimations = (
101
120
  if (!enableReducedMotion) return
102
121
 
103
122
  try {
104
- const reducedMotion = window.matchMedia('(prefers-reduced-motion)').matches
123
+ const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches
105
124
 
106
125
  setState(prev => ({
107
126
  ...prev,
@@ -110,7 +129,7 @@ export const useBatteryAnimations = (
110
129
 
111
130
  callbacks.onReducedMotionChange?.(reducedMotion)
112
131
  } catch (error) {
113
- console.warn('Reduced motion detection failed, error)
132
+ console.warn('Reduced motion detection failed:', error)
114
133
  }
115
134
  }, [enableReducedMotion, callbacks])
116
135
 
@@ -121,23 +140,23 @@ export const useBatteryAnimations = (
121
140
  setIsOptimizing(true)
122
141
 
123
142
  setTimeout(() => {
124
- let throttleLevel= 'none'
125
- let optimizations] = []
143
+ let throttleLevel: 'none' | 'light' | 'moderate' | 'aggressive' = 'none'
144
+ let optimizations: string[] = []
126
145
 
127
146
  // Battery-based throttling
128
147
  if (state.isCriticalBattery) {
129
148
  throttleLevel = 'aggressive'
130
- optimizations.push('Critical battery)
149
+ optimizations.push('Critical battery: Maximum animation throttling applied')
131
150
  optimizations.push('All non-essential animations disabled')
132
151
  optimizations.push('Only essential UI transitions enabled')
133
152
  } else if (state.isLowBattery) {
134
153
  throttleLevel = 'moderate'
135
- optimizations.push('Low battery)
154
+ optimizations.push('Low battery: Enhanced animation throttling applied')
136
155
  optimizations.push('Animation complexity reduced by 60%')
137
156
  optimizations.push('Performance optimizations enabled')
138
157
  } else if (state.batteryLevel < 0.5) {
139
158
  throttleLevel = 'light'
140
- optimizations.push('Medium battery)
159
+ optimizations.push('Medium battery: Light animation throttling applied')
141
160
  optimizations.push('Animation complexity reduced by 30%')
142
161
  optimizations.push('Battery optimization enabled')
143
162
  }
@@ -159,10 +178,10 @@ export const useBatteryAnimations = (
159
178
  // User preference consideration
160
179
  if (state.userPreference === 'battery') {
161
180
  if (throttleLevel === 'none') throttleLevel = 'light'
162
- optimizations.push('User preference)
181
+ optimizations.push('User preference: Battery optimization enabled')
163
182
  } else if (state.userPreference === 'accessibility') {
164
183
  if (throttleLevel === 'none') throttleLevel = 'light'
165
- optimizations.push('User preference)
184
+ optimizations.push('User preference: Accessibility optimization enabled')
166
185
  }
167
186
 
168
187
  setState(prev => ({
@@ -176,7 +195,7 @@ export const useBatteryAnimations = (
176
195
  callbacks.onAnimationThrottled?.(throttleLevel, 'Battery and performance optimization')
177
196
 
178
197
  optimizations.forEach(optimization => {
179
- console.log('Animation optimization, optimization)
198
+ console.log('Animation optimization:', optimization)
180
199
  })
181
200
  }, 300)
182
201
  }, [enablePerformanceThrottling, state, callbacks])
@@ -186,27 +205,27 @@ export const useBatteryAnimations = (
186
205
  const recommendations = []
187
206
 
188
207
  if (state.isCriticalBattery) {
189
- recommendations.push('Critical battery)
208
+ recommendations.push('Critical battery: Disable all animations except essential transitions')
190
209
  recommendations.push('Use static UI elements instead of animated ones')
191
210
  recommendations.push('Minimize DOM updates and reflows')
192
211
  } else if (state.isLowBattery) {
193
- recommendations.push('Low battery)
212
+ recommendations.push('Low battery: Reduce animation complexity significantly')
194
213
  recommendations.push('Use simple transforms instead of complex animations')
195
214
  recommendations.push('Limit animation duration to under 300ms')
196
215
  } else if (state.batteryLevel < 0.5) {
197
- recommendations.push('Medium battery)
216
+ recommendations.push('Medium battery: Consider light animation optimization')
198
217
  recommendations.push('Use CSS transforms instead of JavaScript animations')
199
218
  recommendations.push('Implement animation pausing when not in viewport')
200
219
  }
201
220
 
202
221
  if (state.shouldThrottle) {
203
- recommendations.push('Performance issue)
222
+ recommendations.push('Performance issue: Reduce animation frame rate')
204
223
  recommendations.push('Use requestAnimationFrame for smooth animations')
205
224
  recommendations.push('Implement animation debouncing')
206
225
  }
207
226
 
208
227
  if (state.reducedMotion) {
209
- recommendations.push('Accessibility)
228
+ recommendations.push('Accessibility: Respect reduced motion preference')
210
229
  recommendations.push('Provide alternative non-animated experiences')
211
230
  recommendations.push('Use subtle transitions instead of animations')
212
231
  }
@@ -217,32 +236,37 @@ export const useBatteryAnimations = (
217
236
  // Get optimal animation settings
218
237
  const getOptimalAnimationSettings = useCallback(() => {
219
238
  const settings = {
220
- duration,
221
- easing,
222
- shouldAnimate,
223
- complexity,
224
- frameRate}
239
+ duration: 300,
240
+ easing: 'ease-out',
241
+ shouldAnimate: true,
242
+ complexity: 'medium',
243
+ frameRate: 60
244
+ }
225
245
 
226
246
  switch (state.throttleLevel) {
227
- case 'aggressive'= 150
247
+ case 'aggressive':
248
+ settings.duration = 150
228
249
  settings.easing = 'linear'
229
250
  settings.shouldAnimate = false
230
251
  settings.complexity = 'minimal'
231
252
  settings.frameRate = 30
232
253
  break
233
- case 'moderate'= 200
254
+ case 'moderate':
255
+ settings.duration = 200
234
256
  settings.easing = 'ease-out'
235
257
  settings.shouldAnimate = true
236
258
  settings.complexity = 'low'
237
259
  settings.frameRate = 45
238
260
  break
239
- case 'light'= 250
261
+ case 'light':
262
+ settings.duration = 250
240
263
  settings.easing = 'ease-out'
241
264
  settings.shouldAnimate = true
242
265
  settings.complexity = 'medium'
243
266
  settings.frameRate = 50
244
267
  break
245
- default= 300
268
+ default:
269
+ settings.duration = 300
246
270
  settings.easing = 'ease-out'
247
271
  settings.shouldAnimate = true
248
272
  settings.complexity = 'high'
@@ -261,12 +285,13 @@ export const useBatteryAnimations = (
261
285
  }, [state.throttleLevel, state.reducedMotion])
262
286
 
263
287
  // Update user preferences
264
- const updateUserPreference = useCallback((preference) => {
288
+ const updateUserPreference = useCallback((preference: string) => {
265
289
  if (!enableUserPreferences) return
266
290
 
267
291
  setState(prev => ({
268
292
  ...prev,
269
- userPreference}))
293
+ userPreference: preference as any
294
+ }))
270
295
 
271
296
  callbacks.onUserPreferenceChange?.(preference)
272
297
 
@@ -295,14 +320,14 @@ export const useBatteryAnimations = (
295
320
  checkReducedMotion()
296
321
 
297
322
  // Listen for preference changes
298
- const mediaQuery = window.matchMedia('(prefers-reduced-motion)')
323
+ const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)')
299
324
  const handleChange = () => checkReducedMotion()
300
325
  mediaQuery.addEventListener('change', handleChange)
301
326
 
302
327
  return () => mediaQuery.removeEventListener('change', handleChange)
303
328
  }
304
329
  } catch (error) {
305
- console.warn('Battery animation initialization failed, error)
330
+ console.warn('Battery animation initialization failed:', error)
306
331
  }
307
332
  }, [enableBatteryMonitoring, enablePerformanceThrottling, enableReducedMotion, getBatteryStatus, measurePerformance, checkReducedMotion])
308
333
 
@@ -339,14 +364,14 @@ export const useBatteryAnimations = (
339
364
  updateUserPreference,
340
365
 
341
366
  // Computed values
342
- batteryPercentage),
343
- shouldDisableAnimations=== 'aggressive' || state.reducedMotion,
344
- animationSettings),
345
- recommendations),
367
+ batteryPercentage: Math.round(state.batteryLevel * 100),
368
+ shouldDisableAnimations: state.throttleLevel === 'aggressive' || state.reducedMotion,
369
+ animationSettings: getOptimalAnimationSettings(),
370
+ recommendations: getAnimationRecommendations(),
346
371
 
347
372
  // Utility functions
348
- isAnimationOptimized) => state.throttleLevel !== 'none',
349
- getBatteryHealth) => {
373
+ isAnimationOptimized: () => state.throttleLevel !== 'none',
374
+ getBatteryHealth: () => {
350
375
  if (state.batteryLevel >= 0.8) return 'excellent'
351
376
  if (state.batteryLevel >= 0.6) return 'good'
352
377
  if (state.batteryLevel >= 0.4) return 'fair'