@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,25 +1,45 @@
1
1
  import { useState, useEffect, useCallback, useRef } from 'react'
2
2
 
3
3
  export interface TouchTarget {
4
- id}
4
+ id: string
5
+ x: number
6
+ y: number
7
+ width: number
8
+ height: number
9
+ minSize: number
10
+ isOptimized: boolean
11
+ }
5
12
 
6
13
  export interface TouchEvent {
7
- type; y}
8
- timestamp}
14
+ type: 'tap' | 'double-tap' | 'long-press' | 'swipe' | 'pinch'
15
+ target: TouchTarget
16
+ coordinates: { x: number; y: number }
17
+ timestamp: number
18
+ duration?: number
19
+ distance?: number
20
+ }
9
21
 
10
22
  export interface MobileLayoutConfig {
11
- enableTouchTargetOptimization?}
23
+ enableTouchTargetOptimization?: boolean
24
+ enableGestureSupport?: boolean
25
+ enableTouchFeedback?: boolean
26
+ enablePerformanceOptimization?: boolean
27
+ minTouchTargetSize?: number
28
+ touchFeedbackDuration?: number
29
+ gestureThreshold?: number
30
+ longPressDelay?: number
31
+ }
12
32
 
13
33
  export interface MobileLayoutCallbacks {
14
- onTouchTargetOptimized?) => void
15
- onGestureDetected?) => void
16
- onTouchFeedback?, target) => void
17
- onPerformanceOptimization?) => void
34
+ onTouchTargetOptimized?: (target: TouchTarget) => void
35
+ onGestureDetected?: (event: TouchEvent) => void
36
+ onTouchFeedback?: (type: string, target: TouchTarget) => void
37
+ onPerformanceOptimization?: (optimization: string) => void
18
38
  }
19
39
 
20
40
  export const useMobileLayout = (
21
- config= {},
22
- callbacks= {}
41
+ config: MobileLayoutConfig = {},
42
+ callbacks: MobileLayoutCallbacks = {}
23
43
  ) => {
24
44
  const {
25
45
  enableTouchTargetOptimization = true,
@@ -37,7 +57,7 @@ export const useMobileLayout = (
37
57
  const [isOptimizing, setIsOptimizing] = useState(false)
38
58
  const [optimizations, setOptimizations] = useState<string[]>([])
39
59
 
40
- const touchStartRef = useRef<{ x; y; timestamp} | null>(null)
60
+ const touchStartRef = useRef<{ x: number; y: number; timestamp: number } | null>(null)
41
61
  const longPressTimerRef = useRef<number | null>(null)
42
62
  const touchFeedbackRef = useRef<HTMLDivElement | null>(null)
43
63
 
@@ -51,7 +71,7 @@ export const useMobileLayout = (
51
71
  setTimeout(() => {
52
72
  const optimizedTargets = touchTargets.map(target => ({
53
73
  ...target,
54
- isOptimized= minTouchTargetSize && target.height >= minTouchTargetSize
74
+ isOptimized: target.width >= minTouchTargetSize && target.height >= minTouchTargetSize
55
75
  }))
56
76
 
57
77
  setTouchTargets(optimizedTargets)
@@ -69,10 +89,10 @@ export const useMobileLayout = (
69
89
  }, [enableTouchTargetOptimization, touchTargets, minTouchTargetSize, callbacks])
70
90
 
71
91
  // Add touch target
72
- const addTouchTarget = useCallback((target, 'isOptimized'>) => {
73
- const newTarget= {
92
+ const addTouchTarget = useCallback((target: Omit<TouchTarget, 'isOptimized'>) => {
93
+ const newTarget: TouchTarget = {
74
94
  ...target,
75
- isOptimized= minTouchTargetSize && target.height >= minTouchTargetSize
95
+ isOptimized: target.width >= minTouchTargetSize && target.height >= minTouchTargetSize
76
96
  }
77
97
 
78
98
  setTouchTargets(prev => [...prev, newTarget])
@@ -83,12 +103,12 @@ export const useMobileLayout = (
83
103
  }, [minTouchTargetSize, callbacks])
84
104
 
85
105
  // Remove touch target
86
- const removeTouchTarget = useCallback((id) => {
106
+ const removeTouchTarget = useCallback((id: string) => {
87
107
  setTouchTargets(prev => prev.filter(target => target.id !== id))
88
108
  }, [])
89
109
 
90
110
  // Touch feedback
91
- const showTouchFeedback = useCallback((type, target) => {
111
+ const showTouchFeedback = useCallback((type: string, target: TouchTarget) => {
92
112
  if (!enableTouchFeedback) return
93
113
 
94
114
  callbacks.onTouchFeedback?.(type, target)
@@ -98,12 +118,12 @@ export const useMobileLayout = (
98
118
  const feedback = document.createElement('div')
99
119
  feedback.className = `absolute rounded-full bg-cs-primary/20 pointer-events-none transition-all duration-${touchFeedbackDuration}ms`
100
120
  feedback.style.cssText = `
101
- left}px;
102
- top}px;
103
- width}px;
104
- height}px;
105
- transform);
106
- opacity;
121
+ left: ${target.x}px;
122
+ top: ${target.y}px;
123
+ width: ${target.width}px;
124
+ height: ${target.height}px;
125
+ transform: scale(1.2);
126
+ opacity: 0.8;
107
127
  `
108
128
 
109
129
  touchFeedbackRef.current.appendChild(feedback)
@@ -124,7 +144,7 @@ export const useMobileLayout = (
124
144
  }, [enableTouchFeedback, touchFeedbackDuration, callbacks])
125
145
 
126
146
  // Gesture detection
127
- const detectGesture = useCallback((startEvent, endEvent)=> {
147
+ const detectGesture = useCallback((startEvent: TouchEvent, endEvent: TouchEvent): TouchEvent | null => {
128
148
  if (!enableGestureSupport) return null
129
149
 
130
150
  const start = touchStartRef.current
@@ -135,21 +155,23 @@ export const useMobileLayout = (
135
155
  const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY)
136
156
  const duration = endEvent.timestamp - start.timestamp
137
157
 
138
- let gestureType] = 'tap'
158
+ let gestureType: TouchEvent['type'] = 'tap'
139
159
 
140
160
  if (distance > gestureThreshold) {
141
161
  if (Math.abs(deltaX) > Math.abs(deltaY)) {
142
- gestureType = deltaX > 0 ? 'swipe' } else {
143
- gestureType = deltaY > 0 ? 'swipe' }
162
+ gestureType = deltaX > 0 ? 'swipe' : 'swipe'
163
+ } else {
164
+ gestureType = deltaY > 0 ? 'swipe' : 'swipe'
165
+ }
144
166
  } else if (duration > longPressDelay) {
145
167
  gestureType = 'long-press'
146
168
  }
147
169
 
148
- const gesture= {
149
- type,
150
- target,
151
- coordinates,
152
- timestamp,
170
+ const gesture: TouchEvent = {
171
+ type: gestureType,
172
+ target: startEvent.target,
173
+ coordinates: endEvent.coordinates,
174
+ timestamp: endEvent.timestamp,
153
175
  duration,
154
176
  distance
155
177
  }
@@ -161,22 +183,22 @@ export const useMobileLayout = (
161
183
  }, [enableGestureSupport, gestureThreshold, longPressDelay, callbacks])
162
184
 
163
185
  // Touch event handlers
164
- const handleTouchStart = useCallback((event, target) => {
186
+ const handleTouchStart = useCallback((event: React.TouchEvent, target: TouchTarget) => {
165
187
  const touch = event.touches[0]
166
188
 
167
189
  touchStartRef.current = {
168
- x,
169
- y,
170
- timestamp)
190
+ x: touch.clientX,
191
+ y: touch.clientY,
192
+ timestamp: Date.now()
171
193
  }
172
194
 
173
195
  // Start long press timer
174
196
  longPressTimerRef.current = window.setTimeout(() => {
175
- const longPressEvent= {
176
- type,
197
+ const longPressEvent: TouchEvent = {
198
+ type: 'long-press',
177
199
  target,
178
- coordinates, y},
179
- timestamp)
200
+ coordinates: { x: touch.clientX, y: touch.clientY },
201
+ timestamp: Date.now()
180
202
  }
181
203
 
182
204
  setActiveGestures(prev => [...prev, longPressEvent])
@@ -187,7 +209,7 @@ export const useMobileLayout = (
187
209
  showTouchFeedback('touch-start', target)
188
210
  }, [longPressDelay, callbacks, showTouchFeedback])
189
211
 
190
- const handleTouchEnd = useCallback((event, target) => {
212
+ const handleTouchEnd = useCallback((event: React.TouchEvent, target: TouchTarget) => {
191
213
  if (longPressTimerRef.current) {
192
214
  clearTimeout(longPressTimerRef.current)
193
215
  longPressTimerRef.current = null
@@ -195,15 +217,15 @@ export const useMobileLayout = (
195
217
 
196
218
  const touch = event.changedTouches[0]
197
219
  const gesture = detectGesture({
198
- type,
220
+ type: 'tap',
199
221
  target,
200
- coordinates, y},
201
- timestamp)
222
+ coordinates: { x: touch.clientX, y: touch.clientY },
223
+ timestamp: Date.now()
202
224
  }, {
203
- type,
225
+ type: 'tap',
204
226
  target,
205
- coordinates, y},
206
- timestamp)
227
+ coordinates: { x: touch.clientX, y: touch.clientY },
228
+ timestamp: Date.now()
207
229
  })
208
230
  if (gesture) {
209
231
  showTouchFeedback(gesture.type, target)
@@ -270,10 +292,10 @@ export const useMobileLayout = (
270
292
  optimizePerformance,
271
293
 
272
294
  // Computed values
273
- touchTargetCount,
274
- optimizedTargetCount=> t.isOptimized).length,
275
- gestureCount,
276
- isTouchOptimized=> t.isOptimized)
295
+ touchTargetCount: touchTargets.length,
296
+ optimizedTargetCount: touchTargets.filter(t => t.isOptimized).length,
297
+ gestureCount: activeGestures.length,
298
+ isTouchOptimized: touchTargets.every(t => t.isOptimized)
277
299
  }
278
300
  }
279
301
 
@@ -1,22 +1,37 @@
1
1
  import { useState, useCallback, useRef, useEffect } from 'react'
2
2
 
3
3
  export interface MobileOptimizationConfig {
4
- enableTouchOptimization?}
4
+ enableTouchOptimization?: boolean
5
+ enablePerformanceOptimization?: boolean
6
+ enableBatteryOptimization?: boolean
7
+ enableAccessibilityOptimization?: boolean
8
+ enableResponsiveOptimization?: boolean
9
+ touchTargetSize?: number
10
+ performanceThreshold?: number
11
+ batteryThreshold?: number
12
+ }
5
13
 
6
14
  export interface MobileOptimizationState {
7
- isMobile}
15
+ isMobile: boolean
16
+ isTouchDevice: boolean
17
+ screenSize: 'small' | 'medium' | 'large'
18
+ orientation: 'portrait' | 'landscape'
19
+ batteryLevel: number
20
+ performanceScore: number
21
+ accessibilityLevel: 'basic' | 'enhanced' | 'advanced'
22
+ }
8
23
 
9
24
  export interface MobileOptimizationCallbacks {
10
- onMobileOptimized?) => void
11
- onTouchOptimized?) => void
12
- onPerformanceOptimized?) => void
13
- onBatteryOptimized?) => void
14
- onAccessibilityEnhanced?) => void
25
+ onMobileOptimized?: (optimization: string) => void
26
+ onTouchOptimized?: (feature: string) => void
27
+ onPerformanceOptimized?: (improvement: string) => void
28
+ onBatteryOptimized?: (strategy: string) => void
29
+ onAccessibilityEnhanced?: (feature: string) => void
15
30
  }
16
31
 
17
32
  export const useMobileOptimization = (
18
- config= {},
19
- callbacks= {}
33
+ config: MobileOptimizationConfig = {},
34
+ callbacks: MobileOptimizationCallbacks = {}
20
35
  ) => {
21
36
  const {
22
37
  enableTouchOptimization = true,
@@ -29,13 +44,14 @@ export const useMobileOptimization = (
29
44
  } = config
30
45
 
31
46
  const [state, setState] = useState<MobileOptimizationState>({
32
- isMobile,
33
- isTouchDevice,
34
- screenSize,
35
- orientation,
36
- batteryLevel,
37
- performanceScore,
38
- accessibilityLevel})
47
+ isMobile: false,
48
+ isTouchDevice: false,
49
+ screenSize: 'medium',
50
+ orientation: 'portrait',
51
+ batteryLevel: 1,
52
+ performanceScore: 100,
53
+ accessibilityLevel: 'basic'
54
+ })
39
55
 
40
56
  const [isOptimizing, setIsOptimizing] = useState(false)
41
57
  const [optimizations, setOptimizations] = useState<string[]>([])
@@ -53,14 +69,17 @@ export const useMobileOptimization = (
53
69
 
54
70
  setState(prev => ({
55
71
  ...prev,
56
- isMobile,
57
- isTouchDevice}))
72
+ isMobile: isMobileDevice,
73
+ isTouchDevice: isTouchDevice
74
+ }))
58
75
  }, [])
59
76
 
60
77
  // Screen size detection
61
78
  const detectScreenSize = useCallback(() => {
62
79
  const width = window.innerWidth
63
- let screenSize) {
80
+ let screenSize: 'small' | 'medium' | 'large'
81
+
82
+ if (width < 768) {
64
83
  screenSize = 'small'
65
84
  } else if (width < 1024) {
66
85
  screenSize = 'medium'
@@ -76,7 +95,9 @@ export const useMobileOptimization = (
76
95
 
77
96
  // Orientation detection
78
97
  const detectOrientation = useCallback(() => {
79
- const orientation = window.innerWidth > window.innerHeight ? 'landscape' => ({
98
+ const orientation = window.innerWidth > window.innerHeight ? 'landscape' : 'portrait'
99
+
100
+ setState(prev => ({
80
101
  ...prev,
81
102
  orientation
82
103
  }))
@@ -199,9 +220,9 @@ export const useMobileOptimization = (
199
220
 
200
221
  // Touch target validation
201
222
  const validateTouchTargets = useCallback(() => {
202
- if (!enableTouchOptimization) return { isValid, issues] }
223
+ if (!enableTouchOptimization) return { isValid: true, issues: [] }
203
224
 
204
- const issues] = []
225
+ const issues: string[] = []
205
226
  const targets = Array.from(touchTargets.values())
206
227
 
207
228
  targets.forEach((target, index) => {
@@ -209,35 +230,41 @@ export const useMobileOptimization = (
209
230
  const minSize = Math.min(rect.width, rect.height)
210
231
 
211
232
  if (minSize < touchTargetSize) {
212
- issues.push(`Touch target ${index} is too small}px < ${touchTargetSize}px`)
233
+ issues.push(`Touch target ${index} is too small: ${minSize}px < ${touchTargetSize}px`)
213
234
  }
214
235
  })
215
236
 
216
237
  return {
217
- isValid=== 0,
238
+ isValid: issues.length === 0,
218
239
  issues
219
240
  }
220
241
  }, [enableTouchOptimization, touchTargets, touchTargetSize])
221
242
 
222
243
  // Mobile-specific component optimization
223
244
  const optimizeComponentForMobile = useCallback((
224
- componentId,
225
- optimizationType) => {
245
+ componentId: string,
246
+ optimizationType: 'touch' | 'performance' | 'battery' | 'accessibility' | 'responsive'
247
+ ) => {
226
248
  setIsOptimizing(true)
227
249
 
228
250
  setTimeout(() => {
229
- let optimizations] = []
251
+ let optimizations: string[] = []
230
252
 
231
253
  switch (optimizationType) {
232
- case 'touch'= [`Touch optimization applied to ${componentId}`]
254
+ case 'touch':
255
+ optimizations = [`Touch optimization applied to ${componentId}`]
233
256
  break
234
- case 'performance'= [`Performance optimization applied to ${componentId}`]
257
+ case 'performance':
258
+ optimizations = [`Performance optimization applied to ${componentId}`]
235
259
  break
236
- case 'battery'= [`Battery optimization applied to ${componentId}`]
260
+ case 'battery':
261
+ optimizations = [`Battery optimization applied to ${componentId}`]
237
262
  break
238
- case 'accessibility'= [`Accessibility optimization applied to ${componentId}`]
263
+ case 'accessibility':
264
+ optimizations = [`Accessibility optimization applied to ${componentId}`]
239
265
  break
240
- case 'responsive'= [`Responsive optimization applied to ${componentId}`]
266
+ case 'responsive':
267
+ optimizations = [`Responsive optimization applied to ${componentId}`]
241
268
  break
242
269
  }
243
270
 
@@ -253,13 +280,13 @@ export const useMobileOptimization = (
253
280
  // Mobile optimization analysis
254
281
  const analyzeMobileOptimization = useCallback(() => {
255
282
  const analysis = {
256
- isMobileOptimized,
257
- touchOptimized=> opt.includes('Touch')),
258
- performanceOptimized=> opt.includes('Performance')),
259
- batteryOptimized=> opt.includes('Battery')),
260
- accessibilityOptimized=> opt.includes('Accessibility')),
261
- responsiveOptimized=> opt.includes('Responsive')),
262
- recommendations] as string[]
283
+ isMobileOptimized: state.isMobile && optimizations.length > 0,
284
+ touchOptimized: optimizations.some(opt => opt.includes('Touch')),
285
+ performanceOptimized: optimizations.some(opt => opt.includes('Performance')),
286
+ batteryOptimized: optimizations.some(opt => opt.includes('Battery')),
287
+ accessibilityOptimized: optimizations.some(opt => opt.includes('Accessibility')),
288
+ responsiveOptimized: optimizations.some(opt => opt.includes('Responsive')),
289
+ recommendations: [] as string[]
263
290
  }
264
291
 
265
292
  if (!analysis.touchOptimized && state.isTouchDevice) {
@@ -313,9 +340,10 @@ export const useMobileOptimization = (
313
340
  const battery = await (navigator as any).getBattery()
314
341
  setState(prev => ({
315
342
  ...prev,
316
- batteryLevel}))
343
+ batteryLevel: battery.level
344
+ }))
317
345
  } catch (error) {
318
- console.warn('Battery monitoring failed, error)
346
+ console.warn('Battery monitoring failed:', error)
319
347
  }
320
348
  }, 10000)
321
349
  }
@@ -363,15 +391,15 @@ export const useMobileOptimization = (
363
391
  analyzeMobileOptimization,
364
392
 
365
393
  // Utility functions
366
- isMobileOptimized) => state.isMobile && optimizations.length > 0,
367
- getOptimizationLevel) => {
394
+ isMobileOptimized: () => state.isMobile && optimizations.length > 0,
395
+ getOptimizationLevel: () => {
368
396
  const count = optimizations.length
369
397
  if (count === 0) return 'none'
370
398
  if (count < 3) return 'basic'
371
399
  if (count < 6) return 'intermediate'
372
400
  return 'advanced'
373
401
  },
374
- clearOptimizations) => setOptimizations([])
402
+ clearOptimizations: () => setOptimizations([])
375
403
  }
376
404
  }
377
405
 
@@ -1,22 +1,37 @@
1
1
  import { useState, useCallback, useRef, useEffect } from 'react'
2
2
 
3
3
  export interface MobileOptimizationConfig {
4
- enableTouchOptimization?}
4
+ enableTouchOptimization?: boolean
5
+ enablePerformanceOptimization?: boolean
6
+ enableBatteryOptimization?: boolean
7
+ enableAccessibilityOptimization?: boolean
8
+ enableResponsiveOptimization?: boolean
9
+ touchTargetSize?: number
10
+ performanceThreshold?: number
11
+ batteryThreshold?: number
12
+ }
5
13
 
6
14
  export interface MobileOptimizationState {
7
- isMobile}
15
+ isMobile: boolean
16
+ isTouchDevice: boolean
17
+ screenSize: 'small' | 'medium' | 'large'
18
+ orientation: 'portrait' | 'landscape'
19
+ batteryLevel: number
20
+ performanceScore: number
21
+ accessibilityLevel: 'basic' | 'enhanced' | 'advanced'
22
+ }
8
23
 
9
24
  export interface MobileOptimizationCallbacks {
10
- onMobileOptimized?) => void
11
- onTouchOptimized?) => void
12
- onPerformanceOptimized?) => void
13
- onBatteryOptimized?) => void
14
- onAccessibilityEnhanced?) => void
25
+ onMobileOptimized?: (optimization: string) => void
26
+ onTouchOptimized?: (feature: string) => void
27
+ onPerformanceOptimized?: (improvement: string) => void
28
+ onBatteryOptimized?: (strategy: string) => void
29
+ onAccessibilityEnhanced?: (feature: string) => void
15
30
  }
16
31
 
17
32
  export const useMobileOptimization = (
18
- config= {},
19
- callbacks= {}
33
+ config: MobileOptimizationConfig = {},
34
+ callbacks: MobileOptimizationCallbacks = {}
20
35
  ) => {
21
36
  const {
22
37
  enableTouchOptimization = true,
@@ -29,13 +44,14 @@ export const useMobileOptimization = (
29
44
  } = config
30
45
 
31
46
  const [state, setState] = useState<MobileOptimizationState>({
32
- isMobile,
33
- isTouchDevice,
34
- screenSize,
35
- orientation,
36
- batteryLevel,
37
- performanceScore,
38
- accessibilityLevel})
47
+ isMobile: false,
48
+ isTouchDevice: false,
49
+ screenSize: 'medium',
50
+ orientation: 'portrait',
51
+ batteryLevel: 1,
52
+ performanceScore: 100,
53
+ accessibilityLevel: 'basic'
54
+ })
39
55
 
40
56
  const [isOptimizing, setIsOptimizing] = useState(false)
41
57
  const [optimizations, setOptimizations] = useState<string[]>([])
@@ -53,14 +69,17 @@ export const useMobileOptimization = (
53
69
 
54
70
  setState(prev => ({
55
71
  ...prev,
56
- isMobile,
57
- isTouchDevice}))
72
+ isMobile: isMobileDevice,
73
+ isTouchDevice: isTouchDevice
74
+ }))
58
75
  }, [])
59
76
 
60
77
  // Screen size detection
61
78
  const detectScreenSize = useCallback(() => {
62
79
  const width = window.innerWidth
63
- let screenSize) {
80
+ let screenSize: 'small' | 'medium' | 'large'
81
+
82
+ if (width < 768) {
64
83
  screenSize = 'small'
65
84
  } else if (width < 1024) {
66
85
  screenSize = 'medium'
@@ -76,7 +95,9 @@ export const useMobileOptimization = (
76
95
 
77
96
  // Orientation detection
78
97
  const detectOrientation = useCallback(() => {
79
- const orientation = window.innerWidth > window.innerHeight ? 'landscape' => ({
98
+ const orientation = window.innerWidth > window.innerHeight ? 'landscape' : 'portrait'
99
+
100
+ setState(prev => ({
80
101
  ...prev,
81
102
  orientation
82
103
  }))
@@ -199,9 +220,9 @@ export const useMobileOptimization = (
199
220
 
200
221
  // Touch target validation
201
222
  const validateTouchTargets = useCallback(() => {
202
- if (!enableTouchOptimization) return { isValid, issues] }
223
+ if (!enableTouchOptimization) return { isValid: true, issues: [] }
203
224
 
204
- const issues] = []
225
+ const issues: string[] = []
205
226
  const targets = Array.from(touchTargets.values())
206
227
 
207
228
  targets.forEach((target, index) => {
@@ -209,35 +230,41 @@ export const useMobileOptimization = (
209
230
  const minSize = Math.min(rect.width, rect.height)
210
231
 
211
232
  if (minSize < touchTargetSize) {
212
- issues.push(`Touch target ${index} is too small}px < ${touchTargetSize}px`)
233
+ issues.push(`Touch target ${index} is too small: ${minSize}px < ${touchTargetSize}px`)
213
234
  }
214
235
  })
215
236
 
216
237
  return {
217
- isValid=== 0,
238
+ isValid: issues.length === 0,
218
239
  issues
219
240
  }
220
241
  }, [enableTouchOptimization, touchTargets, touchTargetSize])
221
242
 
222
243
  // Mobile-specific component optimization
223
244
  const optimizeComponentForMobile = useCallback((
224
- componentId,
225
- optimizationType) => {
245
+ componentId: string,
246
+ optimizationType: 'touch' | 'performance' | 'battery' | 'accessibility' | 'responsive'
247
+ ) => {
226
248
  setIsOptimizing(true)
227
249
 
228
250
  setTimeout(() => {
229
- let optimizations] = []
251
+ let optimizations: string[] = []
230
252
 
231
253
  switch (optimizationType) {
232
- case 'touch'= [`Touch optimization applied to ${componentId}`]
254
+ case 'touch':
255
+ optimizations = [`Touch optimization applied to ${componentId}`]
233
256
  break
234
- case 'performance'= [`Performance optimization applied to ${componentId}`]
257
+ case 'performance':
258
+ optimizations = [`Performance optimization applied to ${componentId}`]
235
259
  break
236
- case 'battery'= [`Battery optimization applied to ${componentId}`]
260
+ case 'battery':
261
+ optimizations = [`Battery optimization applied to ${componentId}`]
237
262
  break
238
- case 'accessibility'= [`Accessibility optimization applied to ${componentId}`]
263
+ case 'accessibility':
264
+ optimizations = [`Accessibility optimization applied to ${componentId}`]
239
265
  break
240
- case 'responsive'= [`Responsive optimization applied to ${componentId}`]
266
+ case 'responsive':
267
+ optimizations = [`Responsive optimization applied to ${componentId}`]
241
268
  break
242
269
  }
243
270
 
@@ -253,13 +280,13 @@ export const useMobileOptimization = (
253
280
  // Mobile optimization analysis
254
281
  const analyzeMobileOptimization = useCallback(() => {
255
282
  const analysis = {
256
- isMobileOptimized,
257
- touchOptimized=> opt.includes('Touch')),
258
- performanceOptimized=> opt.includes('Performance')),
259
- batteryOptimized=> opt.includes('Battery')),
260
- accessibilityOptimized=> opt.includes('Accessibility')),
261
- responsiveOptimized=> opt.includes('Responsive')),
262
- recommendations] as string[]
283
+ isMobileOptimized: state.isMobile && optimizations.length > 0,
284
+ touchOptimized: optimizations.some(opt => opt.includes('Touch')),
285
+ performanceOptimized: optimizations.some(opt => opt.includes('Performance')),
286
+ batteryOptimized: optimizations.some(opt => opt.includes('Battery')),
287
+ accessibilityOptimized: optimizations.some(opt => opt.includes('Accessibility')),
288
+ responsiveOptimized: optimizations.some(opt => opt.includes('Responsive')),
289
+ recommendations: [] as string[]
263
290
  }
264
291
 
265
292
  if (!analysis.touchOptimized && state.isTouchDevice) {
@@ -313,9 +340,10 @@ export const useMobileOptimization = (
313
340
  const battery = await (navigator as any).getBattery()
314
341
  setState(prev => ({
315
342
  ...prev,
316
- batteryLevel}))
343
+ batteryLevel: battery.level
344
+ }))
317
345
  } catch (error) {
318
- console.warn('Battery monitoring failed, error)
346
+ console.warn('Battery monitoring failed:', error)
319
347
  }
320
348
  }, 10000)
321
349
  }
@@ -363,15 +391,15 @@ export const useMobileOptimization = (
363
391
  analyzeMobileOptimization,
364
392
 
365
393
  // Utility functions
366
- isMobileOptimized) => state.isMobile && optimizations.length > 0,
367
- getOptimizationLevel) => {
394
+ isMobileOptimized: () => state.isMobile && optimizations.length > 0,
395
+ getOptimizationLevel: () => {
368
396
  const count = optimizations.length
369
397
  if (count === 0) return 'none'
370
398
  if (count < 3) return 'basic'
371
399
  if (count < 6) return 'intermediate'
372
400
  return 'advanced'
373
401
  },
374
- clearOptimizations) => setOptimizations([])
402
+ clearOptimizations: () => setOptimizations([])
375
403
  }
376
404
  }
377
405