@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,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
  }