@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
@@ -1,50 +1,70 @@
1
1
  import { useState, useEffect, useCallback, useRef } from 'react'
2
2
 
3
3
  export interface TouchOptimizationConfig {
4
- enablePassiveListeners}
4
+ enablePassiveListeners: boolean
5
+ enableTouchActionOptimization: boolean
6
+ enableBatteryOptimization: boolean
7
+ enablePerformanceMonitoring: boolean
8
+ touchActionMode: 'auto' | 'manipulation' | 'pan-x' | 'pan-y' | 'none'
9
+ maxTouchPoints: number
10
+ touchEventThrottling: number
11
+ }
5
12
 
6
13
  export interface TouchPerformanceMetrics {
7
- touchEventCount}
14
+ touchEventCount: number
15
+ averageTouchDuration: number
16
+ touchEventLatency: number
17
+ batteryImpact: 'low' | 'medium' | 'high'
18
+ performanceScore: 'excellent' | 'good' | 'fair' | 'poor'
19
+ }
8
20
 
9
21
  export interface TouchOptimizationCallbacks {
10
- onTouchPerformanceWarning?) => void
11
- onBatteryOptimization?) => void
12
- onTouchEventThrottling?) => void
22
+ onTouchPerformanceWarning?: (metrics: TouchPerformanceMetrics) => void
23
+ onBatteryOptimization?: (enabled: boolean) => void
24
+ onTouchEventThrottling?: (enabled: boolean) => void
13
25
  }
14
26
 
15
27
  export interface TouchOptimizationState {
16
- isOptimized}
28
+ isOptimized: boolean
29
+ currentTouchAction: string
30
+ passiveListenersEnabled: boolean
31
+ batteryOptimizationEnabled: boolean
32
+ throttlingEnabled: boolean
33
+ lastOptimization: Date | null
34
+ }
17
35
 
18
36
  export const useTouchOptimization = (
19
- elementRef,
20
- callbacks= {},
21
- config= {}
37
+ elementRef: React.RefObject<HTMLElement>,
38
+ callbacks: TouchOptimizationCallbacks = {},
39
+ config: Partial<TouchOptimizationConfig> = {}
22
40
  ) => {
23
- const defaultConfig= {
24
- enablePassiveListeners,
25
- enableTouchActionOptimization,
26
- enableBatteryOptimization,
27
- enablePerformanceMonitoring,
28
- touchActionMode,
29
- maxTouchPoints,
30
- touchEventThrottling, // ~60fps
41
+ const defaultConfig: TouchOptimizationConfig = {
42
+ enablePassiveListeners: true,
43
+ enableTouchActionOptimization: true,
44
+ enableBatteryOptimization: true,
45
+ enablePerformanceMonitoring: true,
46
+ touchActionMode: 'manipulation',
47
+ maxTouchPoints: 5,
48
+ touchEventThrottling: 16, // ~60fps
31
49
  ...config
32
50
  }
33
51
 
34
52
  const [optimizationState, setOptimizationState] = useState<TouchOptimizationState>({
35
- isOptimized,
36
- currentTouchAction,
37
- passiveListenersEnabled,
38
- batteryOptimizationEnabled,
39
- throttlingEnabled,
40
- lastOptimization})
53
+ isOptimized: false,
54
+ currentTouchAction: defaultConfig.touchActionMode,
55
+ passiveListenersEnabled: false,
56
+ batteryOptimizationEnabled: false,
57
+ throttlingEnabled: false,
58
+ lastOptimization: null
59
+ })
41
60
 
42
61
  const [performanceMetrics, setPerformanceMetrics] = useState<TouchPerformanceMetrics>({
43
- touchEventCount,
44
- averageTouchDuration,
45
- touchEventLatency,
46
- batteryImpact,
47
- performanceScore})
62
+ touchEventCount: 0,
63
+ averageTouchDuration: 0,
64
+ touchEventLatency: 0,
65
+ batteryImpact: 'low',
66
+ performanceScore: 'excellent'
67
+ })
48
68
 
49
69
  const touchEventTimesRef = useRef<number[]>([])
50
70
  const lastTouchEventRef = useRef<number>(0)
@@ -62,11 +82,11 @@ export const useTouchOptimization = (
62
82
  isLowPowerModeRef.current = battery.level < 0.2
63
83
 
64
84
  if (defaultConfig.enableBatteryOptimization && isLowPowerModeRef.current) {
65
- setOptimizationState(prev => ({ ...prev, batteryOptimizationEnabled}))
85
+ setOptimizationState(prev => ({ ...prev, batteryOptimizationEnabled: true }))
66
86
  callbacks.onBatteryOptimization?.(true)
67
87
  }
68
88
  } catch (error) {
69
- console.warn('Battery API not supported, error)
89
+ console.warn('Battery API not supported:', error)
70
90
  }
71
91
  }
72
92
  }
@@ -75,7 +95,7 @@ export const useTouchOptimization = (
75
95
  }, [defaultConfig.enableBatteryOptimization, callbacks])
76
96
 
77
97
  // Calculate performance score
78
- const calculatePerformanceScore = useCallback((metrics)=> {
98
+ const calculatePerformanceScore = useCallback((metrics: TouchPerformanceMetrics): 'excellent' | 'good' | 'fair' | 'poor' => {
79
99
  if (metrics.touchEventLatency < 16 && metrics.averageTouchDuration < 50) return 'excellent'
80
100
  if (metrics.touchEventLatency < 32 && metrics.averageTouchDuration < 100) return 'good'
81
101
  if (metrics.touchEventLatency < 64 && metrics.averageTouchDuration < 200) return 'fair'
@@ -83,7 +103,7 @@ export const useTouchOptimization = (
83
103
  }, [])
84
104
 
85
105
  // Update performance metrics
86
- const updatePerformanceMetrics = useCallback((touchDuration, latency) => {
106
+ const updatePerformanceMetrics = useCallback((touchDuration: number, latency: number) => {
87
107
  const currentTime = Date.now()
88
108
  touchEventTimesRef.current.push(currentTime)
89
109
 
@@ -97,12 +117,15 @@ export const useTouchOptimization = (
97
117
  const newAverageDuration = (prev.averageTouchDuration * prev.touchEventCount + touchDuration) / newCount
98
118
  const newAverageLatency = (prev.touchEventLatency * prev.touchEventCount + latency) / newCount
99
119
 
100
- const batteryImpact= isLowPowerModeRef.current ? 'high' = {
101
- touchEventCount,
102
- averageTouchDuration,
103
- touchEventLatency,
120
+ const batteryImpact: 'low' | 'medium' | 'high' = isLowPowerModeRef.current ? 'high' : batteryLevelRef.current && batteryLevelRef.current < 0.5 ? 'medium' : 'low'
121
+
122
+ const newMetrics: TouchPerformanceMetrics = {
123
+ touchEventCount: newCount,
124
+ averageTouchDuration: newAverageDuration,
125
+ touchEventLatency: newAverageLatency,
104
126
  batteryImpact,
105
- performanceScore}
127
+ performanceScore: 'excellent'
128
+ }
106
129
 
107
130
  newMetrics.performanceScore = calculatePerformanceScore(newMetrics)
108
131
 
@@ -126,8 +149,8 @@ export const useTouchOptimization = (
126
149
  element.style.touchAction = defaultConfig.touchActionMode
127
150
  setOptimizationState(prev => ({
128
151
  ...prev,
129
- currentTouchAction,
130
- lastOptimization)
152
+ currentTouchAction: defaultConfig.touchActionMode,
153
+ lastOptimization: new Date()
131
154
  }))
132
155
  }
133
156
  }, [elementRef, defaultConfig.enableTouchActionOptimization, defaultConfig.touchActionMode])
@@ -141,7 +164,7 @@ export const useTouchOptimization = (
141
164
  let supportsPassive = false
142
165
  try {
143
166
  const opts = Object.defineProperty({}, 'passive', {
144
- get) => { supportsPassive = true; return true; }
167
+ get: () => { supportsPassive = true; return true; }
145
168
  })
146
169
  // Use a dummy event listener to test passive support
147
170
  const testListener = () => {}
@@ -152,7 +175,7 @@ export const useTouchOptimization = (
152
175
  }
153
176
 
154
177
  if (supportsPassive) {
155
- setOptimizationState(prev => ({ ...prev, passiveListenersEnabled}))
178
+ setOptimizationState(prev => ({ ...prev, passiveListenersEnabled: true }))
156
179
  }
157
180
  }, [elementRef, defaultConfig.enablePassiveListeners])
158
181
 
@@ -160,12 +183,12 @@ export const useTouchOptimization = (
160
183
  const enableTouchEventThrottling = useCallback(() => {
161
184
  if (!defaultConfig.enablePerformanceMonitoring) return
162
185
 
163
- setOptimizationState(prev => ({ ...prev, throttlingEnabled}))
186
+ setOptimizationState(prev => ({ ...prev, throttlingEnabled: true }))
164
187
  callbacks.onTouchEventThrottling?.(true)
165
188
  }, [defaultConfig.enablePerformanceMonitoring, callbacks])
166
189
 
167
190
  // Optimize touch event handling
168
- const optimizeTouchEventHandling = useCallback((event) => {
191
+ const optimizeTouchEventHandling = useCallback((event: TouchEvent) => {
169
192
  const currentTime = Date.now()
170
193
  const touchDuration = currentTime - lastTouchEventRef.current
171
194
  const latency = performance.now() - event.timeStamp
@@ -199,8 +222,8 @@ export const useTouchOptimization = (
199
222
 
200
223
  setOptimizationState(prev => ({
201
224
  ...prev,
202
- isOptimized,
203
- lastOptimization)
225
+ isOptimized: true,
226
+ lastOptimization: new Date()
204
227
  }))
205
228
  }, [
206
229
  optimizeTouchAction,
@@ -217,19 +240,21 @@ export const useTouchOptimization = (
217
240
  }
218
241
 
219
242
  setOptimizationState({
220
- isOptimized,
221
- currentTouchAction,
222
- passiveListenersEnabled,
223
- batteryOptimizationEnabled,
224
- throttlingEnabled,
225
- lastOptimization})
243
+ isOptimized: false,
244
+ currentTouchAction: 'auto',
245
+ passiveListenersEnabled: false,
246
+ batteryOptimizationEnabled: false,
247
+ throttlingEnabled: false,
248
+ lastOptimization: null
249
+ })
226
250
 
227
251
  setPerformanceMetrics({
228
- touchEventCount,
229
- averageTouchDuration,
230
- touchEventLatency,
231
- batteryImpact,
232
- performanceScore})
252
+ touchEventCount: 0,
253
+ averageTouchDuration: 0,
254
+ touchEventLatency: 0,
255
+ batteryImpact: 'low',
256
+ performanceScore: 'excellent'
257
+ })
233
258
 
234
259
  if (touchEventThrottleTimerRef.current) {
235
260
  clearTimeout(touchEventThrottleTimerRef.current)
@@ -246,13 +271,13 @@ export const useTouchOptimization = (
246
271
  applyOptimizations()
247
272
 
248
273
  // Add touch event listener
249
- const handleTouchEvent = (event) => {
274
+ const handleTouchEvent = (event: TouchEvent) => {
250
275
  if (defaultConfig.enablePerformanceMonitoring) {
251
276
  optimizeTouchEventHandling(event)
252
277
  }
253
278
  }
254
279
 
255
- const eventOptions = optimizationState.passiveListenersEnabled ? { passive} }
280
+ const eventOptions = optimizationState.passiveListenersEnabled ? { passive: true } : {}
256
281
  element.addEventListener('touchstart', handleTouchEvent, eventOptions)
257
282
  element.addEventListener('touchmove', handleTouchEvent, eventOptions)
258
283
  element.addEventListener('touchend', handleTouchEvent, eventOptions)
@@ -293,14 +318,14 @@ export const useTouchOptimization = (
293
318
  // Utility functions
294
319
  const getOptimizationReport = useCallback(() => {
295
320
  return {
296
- state,
297
- metrics,
298
- recommendations)
321
+ state: optimizationState,
322
+ metrics: performanceMetrics,
323
+ recommendations: getOptimizationRecommendations()
299
324
  }
300
325
  }, [optimizationState, performanceMetrics])
301
326
 
302
327
  const getOptimizationRecommendations = useCallback(() => {
303
- const recommendations] = []
328
+ const recommendations: string[] = []
304
329
 
305
330
  if (performanceMetrics.performanceScore === 'poor') {
306
331
  recommendations.push('Consider enabling touch event throttling')
@@ -330,19 +355,21 @@ export const useTouchOptimization = (
330
355
  }
331
356
 
332
357
  // Convenience hook for basic touch optimization
333
- export const useBasicTouchOptimization = (elementRef) => {
358
+ export const useBasicTouchOptimization = (elementRef: React.RefObject<HTMLElement>) => {
334
359
  return useTouchOptimization(elementRef, {}, {
335
- enablePassiveListeners,
336
- enableTouchActionOptimization,
337
- enableBatteryOptimization,
338
- enablePerformanceMonitoring})
360
+ enablePassiveListeners: true,
361
+ enableTouchActionOptimization: true,
362
+ enableBatteryOptimization: false,
363
+ enablePerformanceMonitoring: false
364
+ })
339
365
  }
340
366
 
341
367
  // Convenience hook for battery-aware touch optimization
342
- export const useBatteryAwareTouchOptimization = (elementRef) => {
368
+ export const useBatteryAwareTouchOptimization = (elementRef: React.RefObject<HTMLElement>) => {
343
369
  return useTouchOptimization(elementRef, {}, {
344
- enablePassiveListeners,
345
- enableTouchActionOptimization,
346
- enableBatteryOptimization,
347
- enablePerformanceMonitoring})
370
+ enablePassiveListeners: true,
371
+ enableTouchActionOptimization: true,
372
+ enableBatteryOptimization: true,
373
+ enablePerformanceMonitoring: true
374
+ })
348
375
  }
@@ -1,50 +1,70 @@
1
1
  import { useState, useEffect, useCallback, useRef } from 'react'
2
2
 
3
3
  export interface TouchOptimizationConfig {
4
- enablePassiveListeners}
4
+ enablePassiveListeners: boolean
5
+ enableTouchActionOptimization: boolean
6
+ enableBatteryOptimization: boolean
7
+ enablePerformanceMonitoring: boolean
8
+ touchActionMode: 'auto' | 'manipulation' | 'pan-x' | 'pan-y' | 'none'
9
+ maxTouchPoints: number
10
+ touchEventThrottling: number
11
+ }
5
12
 
6
13
  export interface TouchPerformanceMetrics {
7
- touchEventCount}
14
+ touchEventCount: number
15
+ averageTouchDuration: number
16
+ touchEventLatency: number
17
+ batteryImpact: 'low' | 'medium' | 'high'
18
+ performanceScore: 'excellent' | 'good' | 'fair' | 'poor'
19
+ }
8
20
 
9
21
  export interface TouchOptimizationCallbacks {
10
- onTouchPerformanceWarning?) => void
11
- onBatteryOptimization?) => void
12
- onTouchEventThrottling?) => void
22
+ onTouchPerformanceWarning?: (metrics: TouchPerformanceMetrics) => void
23
+ onBatteryOptimization?: (enabled: boolean) => void
24
+ onTouchEventThrottling?: (enabled: boolean) => void
13
25
  }
14
26
 
15
27
  export interface TouchOptimizationState {
16
- isOptimized}
28
+ isOptimized: boolean
29
+ currentTouchAction: string
30
+ passiveListenersEnabled: boolean
31
+ batteryOptimizationEnabled: boolean
32
+ throttlingEnabled: boolean
33
+ lastOptimization: Date | null
34
+ }
17
35
 
18
36
  export const useTouchOptimization = (
19
- elementRef,
20
- callbacks= {},
21
- config= {}
37
+ elementRef: React.RefObject<HTMLElement>,
38
+ callbacks: TouchOptimizationCallbacks = {},
39
+ config: Partial<TouchOptimizationConfig> = {}
22
40
  ) => {
23
- const defaultConfig= {
24
- enablePassiveListeners,
25
- enableTouchActionOptimization,
26
- enableBatteryOptimization,
27
- enablePerformanceMonitoring,
28
- touchActionMode,
29
- maxTouchPoints,
30
- touchEventThrottling, // ~60fps
41
+ const defaultConfig: TouchOptimizationConfig = {
42
+ enablePassiveListeners: true,
43
+ enableTouchActionOptimization: true,
44
+ enableBatteryOptimization: true,
45
+ enablePerformanceMonitoring: true,
46
+ touchActionMode: 'manipulation',
47
+ maxTouchPoints: 5,
48
+ touchEventThrottling: 16, // ~60fps
31
49
  ...config
32
50
  }
33
51
 
34
52
  const [optimizationState, setOptimizationState] = useState<TouchOptimizationState>({
35
- isOptimized,
36
- currentTouchAction,
37
- passiveListenersEnabled,
38
- batteryOptimizationEnabled,
39
- throttlingEnabled,
40
- lastOptimization})
53
+ isOptimized: false,
54
+ currentTouchAction: defaultConfig.touchActionMode,
55
+ passiveListenersEnabled: false,
56
+ batteryOptimizationEnabled: false,
57
+ throttlingEnabled: false,
58
+ lastOptimization: null
59
+ })
41
60
 
42
61
  const [performanceMetrics, setPerformanceMetrics] = useState<TouchPerformanceMetrics>({
43
- touchEventCount,
44
- averageTouchDuration,
45
- touchEventLatency,
46
- batteryImpact,
47
- performanceScore})
62
+ touchEventCount: 0,
63
+ averageTouchDuration: 0,
64
+ touchEventLatency: 0,
65
+ batteryImpact: 'low',
66
+ performanceScore: 'excellent'
67
+ })
48
68
 
49
69
  const touchEventTimesRef = useRef<number[]>([])
50
70
  const lastTouchEventRef = useRef<number>(0)
@@ -62,11 +82,11 @@ export const useTouchOptimization = (
62
82
  isLowPowerModeRef.current = battery.level < 0.2
63
83
 
64
84
  if (defaultConfig.enableBatteryOptimization && isLowPowerModeRef.current) {
65
- setOptimizationState(prev => ({ ...prev, batteryOptimizationEnabled}))
85
+ setOptimizationState(prev => ({ ...prev, batteryOptimizationEnabled: true }))
66
86
  callbacks.onBatteryOptimization?.(true)
67
87
  }
68
88
  } catch (error) {
69
- console.warn('Battery API not supported, error)
89
+ console.warn('Battery API not supported:', error)
70
90
  }
71
91
  }
72
92
  }
@@ -75,7 +95,7 @@ export const useTouchOptimization = (
75
95
  }, [defaultConfig.enableBatteryOptimization, callbacks])
76
96
 
77
97
  // Calculate performance score
78
- const calculatePerformanceScore = useCallback((metrics)=> {
98
+ const calculatePerformanceScore = useCallback((metrics: TouchPerformanceMetrics): 'excellent' | 'good' | 'fair' | 'poor' => {
79
99
  if (metrics.touchEventLatency < 16 && metrics.averageTouchDuration < 50) return 'excellent'
80
100
  if (metrics.touchEventLatency < 32 && metrics.averageTouchDuration < 100) return 'good'
81
101
  if (metrics.touchEventLatency < 64 && metrics.averageTouchDuration < 200) return 'fair'
@@ -83,7 +103,7 @@ export const useTouchOptimization = (
83
103
  }, [])
84
104
 
85
105
  // Update performance metrics
86
- const updatePerformanceMetrics = useCallback((touchDuration, latency) => {
106
+ const updatePerformanceMetrics = useCallback((touchDuration: number, latency: number) => {
87
107
  const currentTime = Date.now()
88
108
  touchEventTimesRef.current.push(currentTime)
89
109
 
@@ -97,12 +117,15 @@ export const useTouchOptimization = (
97
117
  const newAverageDuration = (prev.averageTouchDuration * prev.touchEventCount + touchDuration) / newCount
98
118
  const newAverageLatency = (prev.touchEventLatency * prev.touchEventCount + latency) / newCount
99
119
 
100
- const batteryImpact= isLowPowerModeRef.current ? 'high' = {
101
- touchEventCount,
102
- averageTouchDuration,
103
- touchEventLatency,
120
+ const batteryImpact: 'low' | 'medium' | 'high' = isLowPowerModeRef.current ? 'high' : batteryLevelRef.current && batteryLevelRef.current < 0.5 ? 'medium' : 'low'
121
+
122
+ const newMetrics: TouchPerformanceMetrics = {
123
+ touchEventCount: newCount,
124
+ averageTouchDuration: newAverageDuration,
125
+ touchEventLatency: newAverageLatency,
104
126
  batteryImpact,
105
- performanceScore}
127
+ performanceScore: 'excellent'
128
+ }
106
129
 
107
130
  newMetrics.performanceScore = calculatePerformanceScore(newMetrics)
108
131
 
@@ -126,8 +149,8 @@ export const useTouchOptimization = (
126
149
  element.style.touchAction = defaultConfig.touchActionMode
127
150
  setOptimizationState(prev => ({
128
151
  ...prev,
129
- currentTouchAction,
130
- lastOptimization)
152
+ currentTouchAction: defaultConfig.touchActionMode,
153
+ lastOptimization: new Date()
131
154
  }))
132
155
  }
133
156
  }, [elementRef, defaultConfig.enableTouchActionOptimization, defaultConfig.touchActionMode])
@@ -141,7 +164,7 @@ export const useTouchOptimization = (
141
164
  let supportsPassive = false
142
165
  try {
143
166
  const opts = Object.defineProperty({}, 'passive', {
144
- get) => { supportsPassive = true; return true; }
167
+ get: () => { supportsPassive = true; return true; }
145
168
  })
146
169
  // Use a dummy event listener to test passive support
147
170
  const testListener = () => {}
@@ -152,7 +175,7 @@ export const useTouchOptimization = (
152
175
  }
153
176
 
154
177
  if (supportsPassive) {
155
- setOptimizationState(prev => ({ ...prev, passiveListenersEnabled}))
178
+ setOptimizationState(prev => ({ ...prev, passiveListenersEnabled: true }))
156
179
  }
157
180
  }, [elementRef, defaultConfig.enablePassiveListeners])
158
181
 
@@ -160,12 +183,12 @@ export const useTouchOptimization = (
160
183
  const enableTouchEventThrottling = useCallback(() => {
161
184
  if (!defaultConfig.enablePerformanceMonitoring) return
162
185
 
163
- setOptimizationState(prev => ({ ...prev, throttlingEnabled}))
186
+ setOptimizationState(prev => ({ ...prev, throttlingEnabled: true }))
164
187
  callbacks.onTouchEventThrottling?.(true)
165
188
  }, [defaultConfig.enablePerformanceMonitoring, callbacks])
166
189
 
167
190
  // Optimize touch event handling
168
- const optimizeTouchEventHandling = useCallback((event) => {
191
+ const optimizeTouchEventHandling = useCallback((event: TouchEvent) => {
169
192
  const currentTime = Date.now()
170
193
  const touchDuration = currentTime - lastTouchEventRef.current
171
194
  const latency = performance.now() - event.timeStamp
@@ -199,8 +222,8 @@ export const useTouchOptimization = (
199
222
 
200
223
  setOptimizationState(prev => ({
201
224
  ...prev,
202
- isOptimized,
203
- lastOptimization)
225
+ isOptimized: true,
226
+ lastOptimization: new Date()
204
227
  }))
205
228
  }, [
206
229
  optimizeTouchAction,
@@ -217,19 +240,21 @@ export const useTouchOptimization = (
217
240
  }
218
241
 
219
242
  setOptimizationState({
220
- isOptimized,
221
- currentTouchAction,
222
- passiveListenersEnabled,
223
- batteryOptimizationEnabled,
224
- throttlingEnabled,
225
- lastOptimization})
243
+ isOptimized: false,
244
+ currentTouchAction: 'auto',
245
+ passiveListenersEnabled: false,
246
+ batteryOptimizationEnabled: false,
247
+ throttlingEnabled: false,
248
+ lastOptimization: null
249
+ })
226
250
 
227
251
  setPerformanceMetrics({
228
- touchEventCount,
229
- averageTouchDuration,
230
- touchEventLatency,
231
- batteryImpact,
232
- performanceScore})
252
+ touchEventCount: 0,
253
+ averageTouchDuration: 0,
254
+ touchEventLatency: 0,
255
+ batteryImpact: 'low',
256
+ performanceScore: 'excellent'
257
+ })
233
258
 
234
259
  if (touchEventThrottleTimerRef.current) {
235
260
  clearTimeout(touchEventThrottleTimerRef.current)
@@ -246,13 +271,13 @@ export const useTouchOptimization = (
246
271
  applyOptimizations()
247
272
 
248
273
  // Add touch event listener
249
- const handleTouchEvent = (event) => {
274
+ const handleTouchEvent = (event: TouchEvent) => {
250
275
  if (defaultConfig.enablePerformanceMonitoring) {
251
276
  optimizeTouchEventHandling(event)
252
277
  }
253
278
  }
254
279
 
255
- const eventOptions = optimizationState.passiveListenersEnabled ? { passive} }
280
+ const eventOptions = optimizationState.passiveListenersEnabled ? { passive: true } : {}
256
281
  element.addEventListener('touchstart', handleTouchEvent, eventOptions)
257
282
  element.addEventListener('touchmove', handleTouchEvent, eventOptions)
258
283
  element.addEventListener('touchend', handleTouchEvent, eventOptions)
@@ -293,14 +318,14 @@ export const useTouchOptimization = (
293
318
  // Utility functions
294
319
  const getOptimizationReport = useCallback(() => {
295
320
  return {
296
- state,
297
- metrics,
298
- recommendations)
321
+ state: optimizationState,
322
+ metrics: performanceMetrics,
323
+ recommendations: getOptimizationRecommendations()
299
324
  }
300
325
  }, [optimizationState, performanceMetrics])
301
326
 
302
327
  const getOptimizationRecommendations = useCallback(() => {
303
- const recommendations] = []
328
+ const recommendations: string[] = []
304
329
 
305
330
  if (performanceMetrics.performanceScore === 'poor') {
306
331
  recommendations.push('Consider enabling touch event throttling')
@@ -330,19 +355,21 @@ export const useTouchOptimization = (
330
355
  }
331
356
 
332
357
  // Convenience hook for basic touch optimization
333
- export const useBasicTouchOptimization = (elementRef) => {
358
+ export const useBasicTouchOptimization = (elementRef: React.RefObject<HTMLElement>) => {
334
359
  return useTouchOptimization(elementRef, {}, {
335
- enablePassiveListeners,
336
- enableTouchActionOptimization,
337
- enableBatteryOptimization,
338
- enablePerformanceMonitoring})
360
+ enablePassiveListeners: true,
361
+ enableTouchActionOptimization: true,
362
+ enableBatteryOptimization: false,
363
+ enablePerformanceMonitoring: false
364
+ })
339
365
  }
340
366
 
341
367
  // Convenience hook for battery-aware touch optimization
342
- export const useBatteryAwareTouchOptimization = (elementRef) => {
368
+ export const useBatteryAwareTouchOptimization = (elementRef: React.RefObject<HTMLElement>) => {
343
369
  return useTouchOptimization(elementRef, {}, {
344
- enablePassiveListeners,
345
- enableTouchActionOptimization,
346
- enableBatteryOptimization,
347
- enablePerformanceMonitoring})
370
+ enablePassiveListeners: true,
371
+ enableTouchActionOptimization: true,
372
+ enableBatteryOptimization: true,
373
+ enablePerformanceMonitoring: true
374
+ })
348
375
  }