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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/components/ui/accessibility-demo.esm.js +30 -24
  3. package/dist/components/ui/accessibility-demo.js +30 -24
  4. package/dist/components/ui/advanced-component-architecture-demo.esm.js +235 -179
  5. package/dist/components/ui/advanced-component-architecture-demo.js +235 -179
  6. package/dist/components/ui/advanced-transition-system-demo.esm.js +110 -64
  7. package/dist/components/ui/advanced-transition-system-demo.js +110 -64
  8. package/dist/components/ui/advanced-transition-system.esm.js +166 -122
  9. package/dist/components/ui/advanced-transition-system.js +166 -122
  10. package/dist/components/ui/animation/animated-container.esm.js +52 -29
  11. package/dist/components/ui/animation/animated-container.js +52 -29
  12. package/dist/components/ui/animation/staggered-container.esm.js +18 -9
  13. package/dist/components/ui/animation/staggered-container.js +18 -9
  14. package/dist/components/ui/animation-demo.esm.js +67 -35
  15. package/dist/components/ui/animation-demo.js +67 -35
  16. package/dist/components/ui/badge.esm.js +9 -6
  17. package/dist/components/ui/badge.js +9 -6
  18. package/dist/components/ui/battery-conscious-animation-demo.esm.js +122 -87
  19. package/dist/components/ui/battery-conscious-animation-demo.js +122 -87
  20. package/dist/components/ui/border-radius-shadow-demo.esm.js +23 -12
  21. package/dist/components/ui/border-radius-shadow-demo.js +23 -12
  22. package/dist/components/ui/button.esm.js +8 -2
  23. package/dist/components/ui/button.js +8 -2
  24. package/dist/components/ui/card.esm.js +33 -8
  25. package/dist/components/ui/card.js +33 -8
  26. package/dist/components/ui/checkbox.esm.js +3 -3
  27. package/dist/components/ui/checkbox.js +3 -3
  28. package/dist/components/ui/color-preview.esm.js +68 -45
  29. package/dist/components/ui/color-preview.js +68 -45
  30. package/dist/components/ui/data-display/chart.esm.js +112 -84
  31. package/dist/components/ui/data-display/chart.js +112 -84
  32. package/dist/components/ui/data-display/data-grid-simple.esm.js +1 -1
  33. package/dist/components/ui/data-display/data-grid-simple.js +1 -1
  34. package/dist/components/ui/data-display/data-grid.esm.js +80 -67
  35. package/dist/components/ui/data-display/data-grid.js +80 -67
  36. package/dist/components/ui/data-display/list.esm.js +53 -45
  37. package/dist/components/ui/data-display/list.js +53 -45
  38. package/dist/components/ui/data-display/table.esm.js +62 -54
  39. package/dist/components/ui/data-display/table.js +62 -54
  40. package/dist/components/ui/data-display/timeline.esm.js +39 -34
  41. package/dist/components/ui/data-display/timeline.js +39 -34
  42. package/dist/components/ui/data-display/tree.esm.js +116 -84
  43. package/dist/components/ui/data-display/tree.js +116 -84
  44. package/dist/components/ui/data-display/types.esm.js +389 -364
  45. package/dist/components/ui/data-display/types.js +389 -364
  46. package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +120 -70
  47. package/dist/components/ui/enterprise-mobile-experience-demo.js +120 -70
  48. package/dist/components/ui/enterprise-mobile-experience.esm.js +124 -73
  49. package/dist/components/ui/enterprise-mobile-experience.js +124 -73
  50. package/dist/components/ui/feedback/alert.esm.js +22 -15
  51. package/dist/components/ui/feedback/alert.js +22 -15
  52. package/dist/components/ui/feedback/progress.esm.js +47 -24
  53. package/dist/components/ui/feedback/progress.js +47 -24
  54. package/dist/components/ui/feedback/skeleton.esm.js +39 -29
  55. package/dist/components/ui/feedback/skeleton.js +39 -29
  56. package/dist/components/ui/feedback/toast.esm.js +62 -38
  57. package/dist/components/ui/feedback/toast.js +62 -38
  58. package/dist/components/ui/feedback/types.esm.js +83 -83
  59. package/dist/components/ui/feedback/types.js +83 -83
  60. package/dist/components/ui/font-preview.esm.js +41 -39
  61. package/dist/components/ui/font-preview.js +41 -39
  62. package/dist/components/ui/form-demo.esm.js +150 -113
  63. package/dist/components/ui/form-demo.js +150 -113
  64. package/dist/components/ui/hardware-acceleration-demo.esm.js +137 -87
  65. package/dist/components/ui/hardware-acceleration-demo.js +137 -87
  66. package/dist/components/ui/input.esm.js +4 -1
  67. package/dist/components/ui/input.js +4 -1
  68. package/dist/components/ui/layout-demo.esm.js +81 -56
  69. package/dist/components/ui/layout-demo.js +81 -56
  70. package/dist/components/ui/layouts/adaptive-layout.esm.js +27 -8
  71. package/dist/components/ui/layouts/adaptive-layout.js +27 -8
  72. package/dist/components/ui/layouts/desktop-layout.esm.js +39 -19
  73. package/dist/components/ui/layouts/desktop-layout.js +39 -19
  74. package/dist/components/ui/layouts/mobile-layout.esm.js +19 -9
  75. package/dist/components/ui/layouts/mobile-layout.js +19 -9
  76. package/dist/components/ui/layouts/tablet-layout.esm.js +28 -14
  77. package/dist/components/ui/layouts/tablet-layout.js +28 -14
  78. package/dist/components/ui/mobile-form-validation.esm.js +120 -87
  79. package/dist/components/ui/mobile-form-validation.js +120 -87
  80. package/dist/components/ui/mobile-input-demo.esm.js +19 -13
  81. package/dist/components/ui/mobile-input-demo.js +19 -13
  82. package/dist/components/ui/mobile-input.esm.js +185 -120
  83. package/dist/components/ui/mobile-input.js +185 -120
  84. package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +128 -111
  85. package/dist/components/ui/mobile-skeleton-loading-demo.js +128 -111
  86. package/dist/components/ui/navigation/breadcrumb.esm.js +17 -14
  87. package/dist/components/ui/navigation/breadcrumb.js +17 -14
  88. package/dist/components/ui/navigation/index.esm.js +0 -1
  89. package/dist/components/ui/navigation/index.js +0 -1
  90. package/dist/components/ui/navigation/menu.esm.js +49 -35
  91. package/dist/components/ui/navigation/menu.js +49 -35
  92. package/dist/components/ui/navigation/navigation-demo.esm.js +81 -74
  93. package/dist/components/ui/navigation/navigation-demo.js +81 -74
  94. package/dist/components/ui/navigation/pagination.esm.js +62 -50
  95. package/dist/components/ui/navigation/pagination.js +62 -50
  96. package/dist/components/ui/navigation/sidebar.esm.js +56 -42
  97. package/dist/components/ui/navigation/sidebar.js +56 -42
  98. package/dist/components/ui/navigation/stepper.esm.js +34 -23
  99. package/dist/components/ui/navigation/stepper.js +34 -23
  100. package/dist/components/ui/navigation/tabs.esm.js +32 -21
  101. package/dist/components/ui/navigation/tabs.js +32 -21
  102. package/dist/components/ui/navigation/types.esm.js +196 -195
  103. package/dist/components/ui/navigation/types.js +196 -195
  104. package/dist/components/ui/overlay/backdrop.esm.js +17 -16
  105. package/dist/components/ui/overlay/backdrop.js +17 -16
  106. package/dist/components/ui/overlay/focus-manager.esm.js +21 -19
  107. package/dist/components/ui/overlay/focus-manager.js +21 -19
  108. package/dist/components/ui/overlay/index.esm.js +0 -2
  109. package/dist/components/ui/overlay/index.js +0 -2
  110. package/dist/components/ui/overlay/modal.esm.js +38 -34
  111. package/dist/components/ui/overlay/modal.js +38 -34
  112. package/dist/components/ui/overlay/overlay-manager.esm.js +25 -20
  113. package/dist/components/ui/overlay/overlay-manager.js +25 -20
  114. package/dist/components/ui/overlay/popover.esm.js +74 -58
  115. package/dist/components/ui/overlay/popover.js +74 -58
  116. package/dist/components/ui/overlay/portal.esm.js +7 -7
  117. package/dist/components/ui/overlay/portal.js +7 -7
  118. package/dist/components/ui/overlay/tooltip.esm.js +54 -39
  119. package/dist/components/ui/overlay/tooltip.js +54 -39
  120. package/dist/components/ui/overlay/types.esm.js +132 -131
  121. package/dist/components/ui/overlay/types.js +132 -131
  122. package/dist/components/ui/performance-demo.esm.js +135 -88
  123. package/dist/components/ui/performance-demo.js +135 -88
  124. package/dist/components/ui/semantic-input-system-demo.esm.js +117 -80
  125. package/dist/components/ui/semantic-input-system-demo.js +117 -80
  126. package/dist/components/ui/theme-customizer.esm.js +84 -52
  127. package/dist/components/ui/theme-customizer.js +84 -52
  128. package/dist/components/ui/theme-preview.esm.js +95 -43
  129. package/dist/components/ui/theme-preview.js +95 -43
  130. package/dist/components/ui/theme-switcher.esm.js +70 -44
  131. package/dist/components/ui/theme-switcher.js +70 -44
  132. package/dist/components/ui/theme-toggle.esm.js +3 -3
  133. package/dist/components/ui/theme-toggle.js +3 -3
  134. package/dist/components/ui/token-demo.esm.js +33 -21
  135. package/dist/components/ui/token-demo.js +33 -21
  136. package/dist/components/ui/touch-demo.esm.js +102 -73
  137. package/dist/components/ui/touch-demo.js +102 -73
  138. package/dist/components/ui/touch-friendly-interface-demo.esm.js +102 -64
  139. package/dist/components/ui/touch-friendly-interface-demo.js +102 -64
  140. package/dist/components/ui/touch-friendly-interface.esm.js +85 -61
  141. package/dist/components/ui/touch-friendly-interface.js +85 -61
  142. package/dist/hooks/use-accessibility-support.esm.js +115 -85
  143. package/dist/hooks/use-accessibility-support.js +115 -85
  144. package/dist/hooks/use-adaptive-layout.esm.js +56 -33
  145. package/dist/hooks/use-adaptive-layout.js +56 -33
  146. package/dist/hooks/use-advanced-patterns.esm.js +57 -42
  147. package/dist/hooks/use-advanced-patterns.js +57 -42
  148. package/dist/hooks/use-advanced-transition-system.esm.js +112 -71
  149. package/dist/hooks/use-advanced-transition-system.js +112 -71
  150. package/dist/hooks/use-animation-profile.esm.js +63 -34
  151. package/dist/hooks/use-animation-profile.js +63 -34
  152. package/dist/hooks/use-battery-animations.esm.js +80 -55
  153. package/dist/hooks/use-battery-animations.js +80 -55
  154. package/dist/hooks/use-battery-conscious-loading.esm.js +166 -123
  155. package/dist/hooks/use-battery-conscious-loading.js +166 -123
  156. package/dist/hooks/use-battery-optimization.esm.js +78 -55
  157. package/dist/hooks/use-battery-optimization.js +78 -55
  158. package/dist/hooks/use-battery-status.esm.js +73 -51
  159. package/dist/hooks/use-battery-status.js +73 -51
  160. package/dist/hooks/use-component-performance.esm.js +62 -47
  161. package/dist/hooks/use-component-performance.js +62 -47
  162. package/dist/hooks/use-device-loading-states.esm.js +152 -109
  163. package/dist/hooks/use-device-loading-states.js +152 -109
  164. package/dist/hooks/use-device.esm.js +25 -14
  165. package/dist/hooks/use-device.js +25 -14
  166. package/dist/hooks/use-enterprise-mobile-experience.esm.js +137 -88
  167. package/dist/hooks/use-enterprise-mobile-experience.js +137 -88
  168. package/dist/hooks/use-form-feedback.esm.js +124 -81
  169. package/dist/hooks/use-form-feedback.js +124 -81
  170. package/dist/hooks/use-form-performance.esm.js +127 -92
  171. package/dist/hooks/use-form-performance.js +127 -92
  172. package/dist/hooks/use-frame-rate.esm.js +56 -37
  173. package/dist/hooks/use-frame-rate.js +56 -37
  174. package/dist/hooks/use-gestures.esm.js +96 -72
  175. package/dist/hooks/use-gestures.js +96 -72
  176. package/dist/hooks/use-hardware-acceleration.esm.js +65 -37
  177. package/dist/hooks/use-hardware-acceleration.js +65 -37
  178. package/dist/hooks/use-input-accessibility.esm.js +157 -119
  179. package/dist/hooks/use-input-accessibility.js +157 -119
  180. package/dist/hooks/use-input-performance.esm.js +139 -104
  181. package/dist/hooks/use-input-performance.js +139 -104
  182. package/dist/hooks/use-layout-performance.esm.js +50 -29
  183. package/dist/hooks/use-layout-performance.js +50 -29
  184. package/dist/hooks/use-loading-accessibility.esm.js +209 -169
  185. package/dist/hooks/use-loading-accessibility.js +209 -169
  186. package/dist/hooks/use-loading-performance.esm.js +117 -93
  187. package/dist/hooks/use-loading-performance.js +117 -93
  188. package/dist/hooks/use-memory-usage.esm.js +57 -38
  189. package/dist/hooks/use-memory-usage.js +57 -38
  190. package/dist/hooks/use-mobile-form-layout.esm.js +111 -74
  191. package/dist/hooks/use-mobile-form-layout.js +111 -74
  192. package/dist/hooks/use-mobile-form-validation.esm.js +211 -144
  193. package/dist/hooks/use-mobile-form-validation.js +211 -144
  194. package/dist/hooks/use-mobile-keyboard-optimization.esm.js +154 -113
  195. package/dist/hooks/use-mobile-keyboard-optimization.js +154 -113
  196. package/dist/hooks/use-mobile-layout.esm.js +73 -51
  197. package/dist/hooks/use-mobile-layout.js +73 -51
  198. package/dist/hooks/use-mobile-optimization.esm.js +72 -44
  199. package/dist/hooks/use-mobile-optimization.js +72 -44
  200. package/dist/hooks/use-mobile-skeleton.esm.js +97 -64
  201. package/dist/hooks/use-mobile-skeleton.js +97 -64
  202. package/dist/hooks/use-mobile-touch.esm.js +128 -93
  203. package/dist/hooks/use-mobile-touch.js +128 -93
  204. package/dist/hooks/use-performance-throttling.esm.js +72 -48
  205. package/dist/hooks/use-performance-throttling.js +72 -48
  206. package/dist/hooks/use-performance.esm.js +90 -52
  207. package/dist/hooks/use-performance.js +90 -52
  208. package/dist/hooks/use-reusable-architecture.esm.js +94 -65
  209. package/dist/hooks/use-reusable-architecture.js +94 -65
  210. package/dist/hooks/use-semantic-input-types.esm.js +166 -124
  211. package/dist/hooks/use-semantic-input-types.js +166 -124
  212. package/dist/hooks/use-semantic-input.esm.js +178 -126
  213. package/dist/hooks/use-semantic-input.js +178 -126
  214. package/dist/hooks/use-tablet-layout.esm.js +67 -38
  215. package/dist/hooks/use-tablet-layout.js +67 -38
  216. package/dist/hooks/use-touch-friendly-input.esm.js +193 -149
  217. package/dist/hooks/use-touch-friendly-input.js +193 -149
  218. package/dist/hooks/use-touch-friendly-interface.esm.js +99 -67
  219. package/dist/hooks/use-touch-friendly-interface.js +99 -67
  220. package/dist/hooks/use-touch-optimization.esm.js +99 -72
  221. package/dist/hooks/use-touch-optimization.js +99 -72
  222. package/dist/index.esm.js +157 -281
  223. package/dist/index.js +157 -281
  224. package/dist/lib/utils.esm.js +1 -1
  225. package/dist/lib/utils.js +1 -1
  226. package/dist/plugins/theme-css-generator.esm.js +104 -55
  227. package/dist/plugins/theme-css-generator.js +104 -55
  228. package/dist/provider.esm.js +4 -4
  229. package/dist/provider.js +4 -4
  230. package/dist/styles.css +1 -1
  231. package/dist/theme.esm.js +633 -468
  232. package/dist/theme.js +633 -468
  233. package/dist/themes/ThemeContext.esm.js +15 -15
  234. package/dist/themes/ThemeContext.js +15 -15
  235. package/dist/themes/ThemeProvider.esm.js +25 -22
  236. package/dist/themes/ThemeProvider.js +25 -22
  237. package/dist/themes/accessibility.esm.js +147 -108
  238. package/dist/themes/accessibility.js +147 -108
  239. package/dist/themes/aria-patterns.esm.js +198 -162
  240. package/dist/themes/aria-patterns.js +198 -162
  241. package/dist/themes/base-themes.esm.js +14 -11
  242. package/dist/themes/base-themes.js +14 -11
  243. package/dist/themes/colorManager.esm.js +101 -83
  244. package/dist/themes/colorManager.js +101 -83
  245. package/dist/themes/examples/dark-theme.esm.js +133 -103
  246. package/dist/themes/examples/dark-theme.js +133 -103
  247. package/dist/themes/examples/minimal-theme.esm.js +83 -61
  248. package/dist/themes/examples/minimal-theme.js +83 -61
  249. package/dist/themes/focus-management.esm.js +202 -143
  250. package/dist/themes/focus-management.js +202 -143
  251. package/dist/themes/fontLoader.esm.js +28 -19
  252. package/dist/themes/fontLoader.js +28 -19
  253. package/dist/themes/high-contrast.esm.js +152 -104
  254. package/dist/themes/high-contrast.js +152 -104
  255. package/dist/themes/index.esm.js +1 -1
  256. package/dist/themes/index.js +1 -1
  257. package/dist/themes/inheritance.esm.js +35 -27
  258. package/dist/themes/inheritance.js +35 -27
  259. package/dist/themes/keyboard-navigation.esm.js +152 -123
  260. package/dist/themes/keyboard-navigation.js +152 -123
  261. package/dist/themes/motion-reduction.esm.js +193 -133
  262. package/dist/themes/motion-reduction.js +193 -133
  263. package/dist/themes/navigation.esm.js +146 -146
  264. package/dist/themes/navigation.js +146 -146
  265. package/dist/themes/screen-reader.esm.js +159 -94
  266. package/dist/themes/screen-reader.js +159 -94
  267. package/dist/themes/systemThemeDetector.esm.js +42 -34
  268. package/dist/themes/systemThemeDetector.js +42 -34
  269. package/dist/themes/themeCSSUpdater.esm.js +21 -9
  270. package/dist/themes/themeCSSUpdater.js +21 -9
  271. package/dist/themes/themePersistence.esm.js +68 -47
  272. package/dist/themes/themePersistence.js +68 -47
  273. package/dist/themes/themes/stan-design.esm.js +633 -468
  274. package/dist/themes/themes/stan-design.js +633 -468
  275. package/dist/themes/types.esm.js +301 -287
  276. package/dist/themes/types.js +301 -287
  277. package/dist/themes/useSystemTheme.esm.js +4 -4
  278. package/dist/themes/useSystemTheme.js +4 -4
  279. package/dist/themes/useTheme.esm.js +4 -4
  280. package/dist/themes/useTheme.js +4 -4
  281. package/dist/themes/validation.esm.js +128 -77
  282. package/dist/themes/validation.js +128 -77
  283. package/dist/tokens/index.esm.js +1 -2
  284. package/dist/tokens/index.js +1 -2
  285. package/dist/tokens/tokenExporter.esm.js +87 -61
  286. package/dist/tokens/tokenExporter.js +87 -61
  287. package/dist/tokens/tokenGenerator.esm.js +86 -77
  288. package/dist/tokens/tokenGenerator.js +86 -77
  289. package/dist/tokens/tokenManager.esm.js +64 -51
  290. package/dist/tokens/tokenManager.js +64 -51
  291. package/dist/tokens/tokenValidator.esm.js +193 -147
  292. package/dist/tokens/tokenValidator.js +193 -147
  293. package/dist/tokens/types.esm.js +49 -35
  294. package/dist/tokens/types.js +49 -35
  295. package/dist/utils/bundle-analyzer.esm.js +83 -65
  296. package/dist/utils/bundle-analyzer.js +83 -65
  297. package/dist/utils/bundle-splitting.esm.js +142 -117
  298. package/dist/utils/bundle-splitting.js +142 -117
  299. package/dist/utils/lazy-loading.esm.js +132 -106
  300. package/dist/utils/lazy-loading.js +132 -106
  301. package/dist/utils/performance-monitor.esm.js +170 -129
  302. package/dist/utils/performance-monitor.js +170 -129
  303. package/dist/utils/tree-shaking.esm.js +69 -61
  304. package/dist/utils/tree-shaking.js +69 -61
  305. package/package.json +1 -1
  306. package/src/index.ts +146 -146
@@ -1,59 +1,84 @@
1
1
  import { useState, useEffect, useCallback, useRef } from 'react'
2
2
 
3
3
  export interface MobileTouchConfig {
4
- enableTouchFeedback}
4
+ enableTouchFeedback: boolean
5
+ enableGestureHints: boolean
6
+ enableTouchSounds: boolean
7
+ enableHapticFeedback: boolean
8
+ touchFeedbackDelay: number
9
+ gestureHintTimeout: number
10
+ maxTouchPoints: number
11
+ }
5
12
 
6
13
  export interface TouchFeedbackState {
7
- isPressed; y} | null
14
+ isPressed: boolean
15
+ feedbackType: 'none' | 'scale' | 'ripple' | 'glow'
16
+ feedbackIntensity: 'light' | 'medium' | 'strong'
17
+ lastTouchPosition: { x: number; y: number } | null
8
18
  }
9
19
 
10
20
  export interface GestureHint {
11
- type; y}
12
- timeout}
21
+ type: 'swipe' | 'pinch' | 'longPress' | 'doubleTap' | 'tap'
22
+ message: string
23
+ position: { x: number; y: number }
24
+ timeout: number
25
+ }
13
26
 
14
27
  export interface MobileTouchCallbacks {
15
- onTouchFeedback?) => void
16
- onGestureHint?) => void
17
- onTouchStart?; y}) => void
18
- onTouchEnd?; y}) => void
19
- onTouchMove?; y}) => void
28
+ onTouchFeedback?: (state: TouchFeedbackState) => void
29
+ onGestureHint?: (hint: GestureHint) => void
30
+ onTouchStart?: (position: { x: number; y: number }) => void
31
+ onTouchEnd?: (position: { x: number; y: number }) => void
32
+ onTouchMove?: (position: { x: number; y: number }) => void
20
33
  }
21
34
 
22
35
  export interface MobileTouchState {
23
- isActive]
24
- deviceCapabilities}
36
+ isActive: boolean
37
+ touchCount: number
38
+ currentFeedback: TouchFeedbackState
39
+ activeGestureHints: GestureHint[]
40
+ deviceCapabilities: {
41
+ supportsTouch: boolean
42
+ supportsHaptics: boolean
43
+ supportsAudio: boolean
44
+ maxTouchPoints: number
45
+ }
25
46
  }
26
47
 
27
48
  export const useMobileTouch = (
28
- elementRef,
29
- callbacks= {},
30
- config= {}
49
+ elementRef: React.RefObject<HTMLElement>,
50
+ callbacks: MobileTouchCallbacks = {},
51
+ config: Partial<MobileTouchConfig> = {}
31
52
  ) => {
32
- const defaultConfig= {
33
- enableTouchFeedback,
34
- enableGestureHints,
35
- enableTouchSounds,
36
- enableHapticFeedback,
37
- touchFeedbackDelay,
38
- gestureHintTimeout,
39
- maxTouchPoints,
53
+ const defaultConfig: MobileTouchConfig = {
54
+ enableTouchFeedback: true,
55
+ enableGestureHints: true,
56
+ enableTouchSounds: false,
57
+ enableHapticFeedback: true,
58
+ touchFeedbackDelay: 100,
59
+ gestureHintTimeout: 3000,
60
+ maxTouchPoints: 5,
40
61
  ...config
41
62
  }
42
63
 
43
64
  // Device info available if needed for future enhancements
44
65
  // const device = useDevice()
45
66
  const [mobileTouchState, setMobileTouchState] = useState<MobileTouchState>({
46
- isActive,
47
- touchCount,
48
- currentFeedback,
49
- feedbackType,
50
- feedbackIntensity,
51
- lastTouchPosition},
52
- activeGestureHints],
53
- deviceCapabilities,
54
- supportsHaptics,
55
- supportsAudio,
56
- maxTouchPoints}
67
+ isActive: false,
68
+ touchCount: 0,
69
+ currentFeedback: {
70
+ isPressed: false,
71
+ feedbackType: 'none',
72
+ feedbackIntensity: 'medium',
73
+ lastTouchPosition: null
74
+ },
75
+ activeGestureHints: [],
76
+ deviceCapabilities: {
77
+ supportsTouch: false,
78
+ supportsHaptics: false,
79
+ supportsAudio: false,
80
+ maxTouchPoints: 0
81
+ }
57
82
  })
58
83
 
59
84
  const touchStartTimeRef = useRef<number>(0)
@@ -64,14 +89,16 @@ export const useMobileTouch = (
64
89
  // Initialize device capabilities
65
90
  useEffect(() => {
66
91
  const capabilities = {
67
- supportsTouch,
68
- supportsHaptics,
69
- supportsAudio,
70
- maxTouchPoints}
92
+ supportsTouch: 'ontouchstart' in window,
93
+ supportsHaptics: 'vibrate' in navigator,
94
+ supportsAudio: 'AudioContext' in window || 'webkitAudioContext' in window,
95
+ maxTouchPoints: navigator.maxTouchPoints || 0
96
+ }
71
97
 
72
98
  setMobileTouchState(prev => ({
73
99
  ...prev,
74
- deviceCapabilities}))
100
+ deviceCapabilities: capabilities
101
+ }))
75
102
 
76
103
  // Initialize audio context if supported
77
104
  if (capabilities.supportsAudio) {
@@ -80,23 +107,24 @@ export const useMobileTouch = (
80
107
  }, [])
81
108
 
82
109
  // Trigger haptic feedback
83
- const triggerHapticFeedback = useCallback((intensity= 'medium') => {
110
+ const triggerHapticFeedback = useCallback((intensity: 'light' | 'medium' | 'strong' = 'medium') => {
84
111
  if (!defaultConfig.enableHapticFeedback || !mobileTouchState.deviceCapabilities.supportsHaptics) return
85
112
 
86
113
  const vibrationPattern = {
87
- light,
88
- medium,
89
- strong}
114
+ light: 20,
115
+ medium: 50,
116
+ strong: 100
117
+ }
90
118
 
91
119
  try {
92
120
  navigator.vibrate(vibrationPattern[intensity])
93
121
  } catch (error) {
94
- console.warn('Haptic feedback not supported, error)
122
+ console.warn('Haptic feedback not supported:', error)
95
123
  }
96
124
  }, [defaultConfig.enableHapticFeedback, mobileTouchState.deviceCapabilities.supportsHaptics])
97
125
 
98
126
  // Trigger touch sound
99
- const triggerTouchSound = useCallback((type= 'tap') => {
127
+ const triggerTouchSound = useCallback((type: 'tap' | 'press' | 'release' = 'tap') => {
100
128
  if (!defaultConfig.enableTouchSounds || !audioContextRef.current) return
101
129
 
102
130
  try {
@@ -109,9 +137,9 @@ export const useMobileTouch = (
109
137
 
110
138
  // Different sounds for different touch types
111
139
  const soundConfig = {
112
- tap, duration, volume},
113
- press, duration, volume},
114
- release, duration, volume}
140
+ tap: { frequency: 800, duration: 0.1, volume: 0.1 },
141
+ press: { frequency: 600, duration: 0.2, volume: 0.15 },
142
+ release: { frequency: 1000, duration: 0.08, volume: 0.08 }
115
143
  }
116
144
 
117
145
  const config = soundConfig[type]
@@ -121,32 +149,32 @@ export const useMobileTouch = (
121
149
  oscillator.start(audioContext.currentTime)
122
150
  oscillator.stop(audioContext.currentTime + config.duration)
123
151
  } catch (error) {
124
- console.warn('Touch sound not supported, error)
152
+ console.warn('Touch sound not supported:', error)
125
153
  }
126
154
  }, [defaultConfig.enableTouchSounds])
127
155
 
128
156
  // Update touch feedback state
129
- const updateTouchFeedback = useCallback((feedback) => {
157
+ const updateTouchFeedback = useCallback((feedback: Partial<TouchFeedbackState>) => {
130
158
  setMobileTouchState(prev => ({
131
159
  ...prev,
132
- currentFeedback, ...feedback }
160
+ currentFeedback: { ...prev.currentFeedback, ...feedback }
133
161
  }))
134
162
 
135
163
  callbacks.onTouchFeedback?.(mobileTouchState.currentFeedback)
136
164
  }, [callbacks, mobileTouchState.currentFeedback])
137
165
 
138
166
  // Add gesture hint
139
- const addGestureHint = useCallback((hint, 'timeout'>) => {
167
+ const addGestureHint = useCallback((hint: Omit<GestureHint, 'timeout'>) => {
140
168
  if (!defaultConfig.enableGestureHints) return
141
169
 
142
170
  const hintWithTimeout = {
143
171
  ...hint,
144
- timeout) + defaultConfig.gestureHintTimeout
172
+ timeout: Date.now() + defaultConfig.gestureHintTimeout
145
173
  }
146
174
 
147
175
  setMobileTouchState(prev => ({
148
176
  ...prev,
149
- activeGestureHints, hintWithTimeout]
177
+ activeGestureHints: [...prev.activeGestureHints, hintWithTimeout]
150
178
  }))
151
179
 
152
180
  // Set timer to remove hint
@@ -159,10 +187,10 @@ export const useMobileTouch = (
159
187
  }, [defaultConfig.enableGestureHints, defaultConfig.gestureHintTimeout, callbacks])
160
188
 
161
189
  // Remove gesture hint
162
- const removeGestureHint = useCallback((type) => {
190
+ const removeGestureHint = useCallback((type: string) => {
163
191
  setMobileTouchState(prev => ({
164
192
  ...prev,
165
- activeGestureHints=> hint.type !== type)
193
+ activeGestureHints: prev.activeGestureHints.filter(hint => hint.type !== type)
166
194
  }))
167
195
 
168
196
  const timer = gestureHintTimersRef.current.get(type)
@@ -173,30 +201,33 @@ export const useMobileTouch = (
173
201
  }, [])
174
202
 
175
203
  // Handle touch start
176
- const handleTouchStart = useCallback((event) => {
204
+ const handleTouchStart = useCallback((event: TouchEvent) => {
177
205
  const touch = event.touches[0]
178
- const position = { x, y}
206
+ const position = { x: touch.clientX, y: touch.clientY }
179
207
 
180
208
  touchStartTimeRef.current = Date.now()
181
209
 
182
210
  setMobileTouchState(prev => ({
183
211
  ...prev,
184
- isActive,
185
- touchCount}))
212
+ isActive: true,
213
+ touchCount: event.touches.length
214
+ }))
186
215
 
187
216
  // Update feedback state
188
217
  if (defaultConfig.enableTouchFeedback) {
189
218
  updateTouchFeedback({
190
- isPressed,
191
- feedbackType,
192
- feedbackIntensity,
193
- lastTouchPosition})
219
+ isPressed: true,
220
+ feedbackType: 'scale',
221
+ feedbackIntensity: 'medium',
222
+ lastTouchPosition: position
223
+ })
194
224
 
195
225
  // Set feedback timer
196
226
  touchFeedbackTimerRef.current = setTimeout(() => {
197
227
  updateTouchFeedback({
198
- feedbackType,
199
- feedbackIntensity})
228
+ feedbackType: 'ripple',
229
+ feedbackIntensity: 'strong'
230
+ })
200
231
  }, defaultConfig.touchFeedbackDelay)
201
232
  }
202
233
 
@@ -208,23 +239,24 @@ export const useMobileTouch = (
208
239
  }, [defaultConfig.enableTouchFeedback, defaultConfig.touchFeedbackDelay, updateTouchFeedback, triggerHapticFeedback, triggerTouchSound, callbacks])
209
240
 
210
241
  // Handle touch move
211
- const handleTouchMove = useCallback((event) => {
242
+ const handleTouchMove = useCallback((event: TouchEvent) => {
212
243
  const touch = event.touches[0]
213
- const position = { x, y}
244
+ const position = { x: touch.clientX, y: touch.clientY }
214
245
 
215
246
  // Update feedback state
216
247
  if (defaultConfig.enableTouchFeedback) {
217
248
  updateTouchFeedback({
218
- lastTouchPosition})
249
+ lastTouchPosition: position
250
+ })
219
251
  }
220
252
 
221
253
  callbacks.onTouchMove?.(position)
222
254
  }, [defaultConfig.enableTouchFeedback, updateTouchFeedback, callbacks])
223
255
 
224
256
  // Handle touch end
225
- const handleTouchEnd = useCallback((event) => {
257
+ const handleTouchEnd = useCallback((event: TouchEvent) => {
226
258
  const touch = event.changedTouches[0]
227
- const position = { x, y}
259
+ const position = { x: touch.clientX, y: touch.clientY }
228
260
  const touchDuration = Date.now() - touchStartTimeRef.current
229
261
 
230
262
  // Clear feedback timer
@@ -236,9 +268,10 @@ export const useMobileTouch = (
236
268
  // Update feedback state
237
269
  if (defaultConfig.enableTouchFeedback) {
238
270
  updateTouchFeedback({
239
- isPressed,
240
- feedbackType,
241
- feedbackIntensity})
271
+ isPressed: false,
272
+ feedbackType: 'none',
273
+ feedbackIntensity: 'medium'
274
+ })
242
275
  }
243
276
 
244
277
  // Determine touch type and provide appropriate feedback
@@ -249,8 +282,8 @@ export const useMobileTouch = (
249
282
 
250
283
  // Show tap hint
251
284
  addGestureHint({
252
- type,
253
- message,
285
+ type: 'tap',
286
+ message: 'Quick tap detected',
254
287
  position
255
288
  })
256
289
  } else if (touchDuration > 500) {
@@ -260,8 +293,8 @@ export const useMobileTouch = (
260
293
 
261
294
  // Show long press hint
262
295
  addGestureHint({
263
- type,
264
- message,
296
+ type: 'longPress',
297
+ message: 'Long press detected',
265
298
  position
266
299
  })
267
300
  } else {
@@ -272,8 +305,8 @@ export const useMobileTouch = (
272
305
 
273
306
  setMobileTouchState(prev => ({
274
307
  ...prev,
275
- isActive,
276
- touchCount, prev.touchCount - 1)
308
+ isActive: false,
309
+ touchCount: Math.max(0, prev.touchCount - 1)
277
310
  }))
278
311
 
279
312
  callbacks.onTouchEnd?.(position)
@@ -284,9 +317,9 @@ export const useMobileTouch = (
284
317
  const element = elementRef.current
285
318
  if (!element || !mobileTouchState.deviceCapabilities.supportsTouch) return
286
319
 
287
- element.addEventListener('touchstart', handleTouchStart, { passive})
288
- element.addEventListener('touchmove', handleTouchMove, { passive})
289
- element.addEventListener('touchend', handleTouchEnd, { passive})
320
+ element.addEventListener('touchstart', handleTouchStart, { passive: false })
321
+ element.addEventListener('touchmove', handleTouchMove, { passive: false })
322
+ element.addEventListener('touchend', handleTouchEnd, { passive: false })
290
323
 
291
324
  return () => {
292
325
  element.removeEventListener('touchstart', handleTouchStart)
@@ -328,7 +361,7 @@ export const useMobileTouch = (
328
361
 
329
362
  setMobileTouchState(prev => ({
330
363
  ...prev,
331
- activeGestureHints]
364
+ activeGestureHints: []
332
365
  }))
333
366
  }, [])
334
367
 
@@ -361,19 +394,21 @@ export const useMobileTouch = (
361
394
  }
362
395
 
363
396
  // Convenience hook for basic mobile touch
364
- export const useBasicMobileTouch = (elementRef) => {
397
+ export const useBasicMobileTouch = (elementRef: React.RefObject<HTMLElement>) => {
365
398
  return useMobileTouch(elementRef, {}, {
366
- enableTouchFeedback,
367
- enableGestureHints,
368
- enableTouchSounds,
369
- enableHapticFeedback})
399
+ enableTouchFeedback: true,
400
+ enableGestureHints: false,
401
+ enableTouchSounds: false,
402
+ enableHapticFeedback: true
403
+ })
370
404
  }
371
405
 
372
406
  // Convenience hook for enhanced mobile touch
373
- export const useEnhancedMobileTouch = (elementRef) => {
407
+ export const useEnhancedMobileTouch = (elementRef: React.RefObject<HTMLElement>) => {
374
408
  return useMobileTouch(elementRef, {}, {
375
- enableTouchFeedback,
376
- enableGestureHints,
377
- enableTouchSounds,
378
- enableHapticFeedback})
409
+ enableTouchFeedback: true,
410
+ enableGestureHints: true,
411
+ enableTouchSounds: true,
412
+ enableHapticFeedback: true
413
+ })
379
414
  }
@@ -1,21 +1,36 @@
1
1
  import { useState, useEffect, useCallback, useRef } from 'react'
2
2
 
3
3
  export interface PerformanceThrottlingConfig {
4
- enablePerformanceMonitoring?}
4
+ enablePerformanceMonitoring?: boolean
5
+ enableAutomaticThrottling?: boolean
6
+ enableUserExperienceOptimization?: boolean
7
+ enableBatteryPreservation?: boolean
8
+ performanceThreshold?: number
9
+ frameRateTarget?: number
10
+ memoryThreshold?: number
11
+ cpuThreshold?: number
12
+ }
5
13
 
6
14
  export interface PerformanceMetrics {
7
- fps}
15
+ fps: number
16
+ frameTime: number
17
+ memoryUsage: number
18
+ cpuUsage: number
19
+ performanceScore: number
20
+ isThrottling: boolean
21
+ throttleReason: string
22
+ }
8
23
 
9
24
  export interface PerformanceThrottlingCallbacks {
10
- onPerformanceWarning?) => void
11
- onThrottlingApplied?, reason) => void
12
- onPerformanceRecovery?) => void
13
- onUserExperienceOptimized?) => void
25
+ onPerformanceWarning?: (metrics: PerformanceMetrics) => void
26
+ onThrottlingApplied?: (level: string, reason: string) => void
27
+ onPerformanceRecovery?: (metrics: PerformanceMetrics) => void
28
+ onUserExperienceOptimized?: (optimization: string) => void
14
29
  }
15
30
 
16
31
  export const usePerformanceThrottling = (
17
- config= {},
18
- callbacks= {}
32
+ config: PerformanceThrottlingConfig = {},
33
+ callbacks: PerformanceThrottlingCallbacks = {}
19
34
  ) => {
20
35
  const {
21
36
  enablePerformanceMonitoring = true,
@@ -29,13 +44,14 @@ export const usePerformanceThrottling = (
29
44
  } = config
30
45
 
31
46
  const [metrics, setMetrics] = useState<PerformanceMetrics>({
32
- fps,
33
- frameTime,
34
- memoryUsage,
35
- cpuUsage,
36
- performanceScore,
37
- isThrottling,
38
- throttleReason})
47
+ fps: 60,
48
+ frameTime: 16.67,
49
+ memoryUsage: 0,
50
+ cpuUsage: 0,
51
+ performanceScore: 100,
52
+ isThrottling: false,
53
+ throttleReason: 'none'
54
+ })
39
55
 
40
56
  const [isOptimizing, setIsOptimizing] = useState(false)
41
57
  const [optimizations, setOptimizations] = useState<string[]>([])
@@ -82,7 +98,7 @@ export const usePerformanceThrottling = (
82
98
  else if (memoryUsage > memoryThreshold) throttleReason = 'high_memory'
83
99
  else if (cpuUsage > cpuThreshold) throttleReason = 'high_cpu'
84
100
 
85
- const newMetrics= {
101
+ const newMetrics: PerformanceMetrics = {
86
102
  fps,
87
103
  frameTime,
88
104
  memoryUsage,
@@ -105,7 +121,7 @@ export const usePerformanceThrottling = (
105
121
  lastFrameTimeRef.current = now
106
122
  }
107
123
  } catch (error) {
108
- console.warn('Performance measurement failed, error)
124
+ console.warn('Performance measurement failed:', error)
109
125
  }
110
126
  }, [enablePerformanceMonitoring, performanceThreshold, frameRateTarget, memoryThreshold, cpuThreshold, callbacks, metrics.isThrottling])
111
127
 
@@ -116,25 +132,25 @@ export const usePerformanceThrottling = (
116
132
  setIsOptimizing(true)
117
133
 
118
134
  setTimeout(() => {
119
- let newThrottleLevel= 'none'
120
- let optimizations] = []
135
+ let newThrottleLevel: 'none' | 'light' | 'moderate' | 'aggressive' = 'none'
136
+ let optimizations: string[] = []
121
137
 
122
138
  // Determine throttle level based on performance metrics
123
139
  if (metrics.performanceScore < 50 || metrics.fps < 30) {
124
140
  newThrottleLevel = 'aggressive'
125
- optimizations.push('Critical performance)
141
+ optimizations.push('Critical performance: Maximum throttling applied')
126
142
  optimizations.push('All non-essential animations disabled')
127
143
  optimizations.push('Frame rate limited to 30fps')
128
144
  optimizations.push('Memory usage optimized')
129
145
  } else if (metrics.performanceScore < 70 || metrics.fps < 45) {
130
146
  newThrottleLevel = 'moderate'
131
- optimizations.push('Performance issue)
147
+ optimizations.push('Performance issue: Moderate throttling applied')
132
148
  optimizations.push('Animation complexity reduced by 50%')
133
149
  optimizations.push('Frame rate limited to 45fps')
134
150
  optimizations.push('Memory optimization enabled')
135
151
  } else if (metrics.performanceScore < 85 || metrics.fps < 55) {
136
152
  newThrottleLevel = 'light'
137
- optimizations.push('Performance warning)
153
+ optimizations.push('Performance warning: Light throttling applied')
138
154
  optimizations.push('Animation complexity reduced by 25%')
139
155
  optimizations.push('Frame rate limited to 55fps')
140
156
  optimizations.push('Performance monitoring enhanced')
@@ -142,13 +158,13 @@ export const usePerformanceThrottling = (
142
158
 
143
159
  // Battery preservation considerations
144
160
  if (enableBatteryPreservation && newThrottleLevel !== 'none') {
145
- optimizations.push('Battery preservation)
161
+ optimizations.push('Battery preservation: Animation efficiency optimized')
146
162
  optimizations.push('GPU usage minimized for power efficiency')
147
163
  }
148
164
 
149
165
  // User experience optimization
150
166
  if (enableUserExperienceOptimization && newThrottleLevel !== 'none') {
151
- optimizations.push('User experience)
167
+ optimizations.push('User experience: Smooth performance prioritized')
152
168
  optimizations.push('Animation quality balanced with performance')
153
169
  optimizations.push('Responsive interactions maintained')
154
170
  }
@@ -170,33 +186,33 @@ export const usePerformanceThrottling = (
170
186
  const recommendations = []
171
187
 
172
188
  if (metrics.performanceScore < 50) {
173
- recommendations.push('Critical)
189
+ recommendations.push('Critical: Disable all animations and complex UI operations')
174
190
  recommendations.push('Use static UI elements and minimal interactions')
175
191
  recommendations.push('Implement aggressive memory cleanup')
176
192
  } else if (metrics.performanceScore < 70) {
177
- recommendations.push('High)
193
+ recommendations.push('High: Significantly reduce animation complexity')
178
194
  recommendations.push('Limit concurrent animations to 2-3 maximum')
179
195
  recommendations.push('Use CSS transforms instead of JavaScript animations')
180
196
  } else if (metrics.performanceScore < 85) {
181
- recommendations.push('Medium)
197
+ recommendations.push('Medium: Consider light performance optimization')
182
198
  recommendations.push('Monitor animation frame rates closely')
183
199
  recommendations.push('Implement animation debouncing')
184
200
  }
185
201
 
186
202
  if (metrics.fps < frameRateTarget * 0.8) {
187
- recommendations.push('Low FPS)
203
+ recommendations.push('Low FPS: Reduce animation frame rate')
188
204
  recommendations.push('Use requestAnimationFrame for smooth animations')
189
205
  recommendations.push('Implement frame skipping for complex animations')
190
206
  }
191
207
 
192
208
  if (metrics.memoryUsage > memoryThreshold) {
193
- recommendations.push('High Memory)
209
+ recommendations.push('High Memory: Optimize memory usage')
194
210
  recommendations.push('Clean up animation references')
195
211
  recommendations.push('Use object pooling for repeated animations')
196
212
  }
197
213
 
198
214
  if (metrics.cpuUsage > cpuThreshold) {
199
- recommendations.push('High CPU)
215
+ recommendations.push('High CPU: Reduce computational complexity')
200
216
  recommendations.push('Use CSS animations instead of JavaScript')
201
217
  recommendations.push('Implement animation pausing when not visible')
202
218
  }
@@ -207,32 +223,37 @@ export const usePerformanceThrottling = (
207
223
  // Get optimal performance settings
208
224
  const getOptimalPerformanceSettings = useCallback(() => {
209
225
  const settings = {
210
- maxConcurrentAnimations,
211
- frameRateLimit,
212
- animationQuality,
213
- memoryOptimization,
214
- cpuOptimization}
226
+ maxConcurrentAnimations: 5,
227
+ frameRateLimit: 60,
228
+ animationQuality: 'high',
229
+ memoryOptimization: false,
230
+ cpuOptimization: false
231
+ }
215
232
 
216
233
  switch (throttleLevel) {
217
- case 'aggressive'= 1
234
+ case 'aggressive':
235
+ settings.maxConcurrentAnimations = 1
218
236
  settings.frameRateLimit = 30
219
237
  settings.animationQuality = 'minimal'
220
238
  settings.memoryOptimization = true
221
239
  settings.cpuOptimization = true
222
240
  break
223
- case 'moderate'= 2
241
+ case 'moderate':
242
+ settings.maxConcurrentAnimations = 2
224
243
  settings.frameRateLimit = 45
225
244
  settings.animationQuality = 'medium'
226
245
  settings.memoryOptimization = true
227
246
  settings.cpuOptimization = true
228
247
  break
229
- case 'light'= 3
248
+ case 'light':
249
+ settings.maxConcurrentAnimations = 3
230
250
  settings.frameRateLimit = 55
231
251
  settings.animationQuality = 'high'
232
252
  settings.memoryOptimization = true
233
253
  settings.cpuOptimization = false
234
254
  break
235
- default= 5
255
+ default:
256
+ settings.maxConcurrentAnimations = 5
236
257
  settings.frameRateLimit = 60
237
258
  settings.animationQuality = 'high'
238
259
  settings.memoryOptimization = false
@@ -248,8 +269,9 @@ export const usePerformanceThrottling = (
248
269
  setOptimizations([])
249
270
  setMetrics(prev => ({
250
271
  ...prev,
251
- isThrottling,
252
- throttleReason}))
272
+ isThrottling: false,
273
+ throttleReason: 'none'
274
+ }))
253
275
  }, [])
254
276
 
255
277
  // Initialize performance monitoring
@@ -265,7 +287,7 @@ export const usePerformanceThrottling = (
265
287
  }
266
288
  }
267
289
  } catch (error) {
268
- console.warn('Performance monitoring initialization failed, error)
290
+ console.warn('Performance monitoring initialization failed:', error)
269
291
  }
270
292
  }, [enablePerformanceMonitoring, measurePerformance])
271
293
 
@@ -304,14 +326,16 @@ export const usePerformanceThrottling = (
304
326
  resetThrottling,
305
327
 
306
328
  // Computed values
307
- isThrottling== 'none',
308
- performanceLevel= 90 ? 'excellent' = 80 ? 'good' = 70 ? 'fair' ,
309
- needsOptimization,
310
- recommendations),
311
- performanceSettings),
329
+ isThrottling: throttleLevel !== 'none',
330
+ performanceLevel: metrics.performanceScore >= 90 ? 'excellent' :
331
+ metrics.performanceScore >= 80 ? 'good' :
332
+ metrics.performanceScore >= 70 ? 'fair' : 'poor',
333
+ needsOptimization: metrics.performanceScore < 70,
334
+ recommendations: getThrottlingRecommendations(),
335
+ performanceSettings: getOptimalPerformanceSettings(),
312
336
 
313
337
  // Utility functions
314
- getPerformanceHealth) => {
338
+ getPerformanceHealth: () => {
315
339
  if (metrics.performanceScore >= 90) return 'excellent'
316
340
  if (metrics.performanceScore >= 80) return 'good'
317
341
  if (metrics.performanceScore >= 70) return 'fair'