@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,25 +1,47 @@
1
1
  import { useState, useEffect, useCallback, useRef } from 'react'
2
2
 
3
3
  export interface TabletLayoutState {
4
- orientation}
5
- performanceMetrics}
4
+ orientation: 'portrait' | 'landscape'
5
+ screenSize: 'small' | 'medium' | 'large'
6
+ isSplitView: boolean
7
+ isKeyboardVisible: boolean
8
+ safeAreaInsets: {
9
+ top: number
10
+ bottom: number
11
+ left: number
12
+ right: number
13
+ }
14
+ performanceMetrics: {
15
+ renderTime: number
16
+ memoryUsage: number
17
+ touchResponsiveness: number
18
+ orientationScore: number
19
+ }
6
20
  }
7
21
 
8
22
  export interface TabletLayoutConfig {
9
- enableOrientationOptimization?}
23
+ enableOrientationOptimization?: boolean
24
+ enableSplitViewSupport?: boolean
25
+ enableKeyboardOptimization?: boolean
26
+ enableSafeAreaOptimization?: boolean
27
+ enablePerformanceOptimization?: boolean
28
+ enableTouchOptimization?: boolean
29
+ orientationChangeThreshold?: number
30
+ splitViewBreakpoint?: number
31
+ }
10
32
 
11
33
  export interface TabletLayoutCallbacks {
12
- onOrientationChange?) => void
13
- onSplitViewChange?) => void
14
- onKeyboardChange?) => void
15
- onSafeAreaChange?) => void
16
- onPerformanceChange?) => void
17
- onTouchOptimization?) => void
34
+ onOrientationChange?: (orientation: 'portrait' | 'landscape') => void
35
+ onSplitViewChange?: (isSplitView: boolean) => void
36
+ onKeyboardChange?: (isVisible: boolean) => void
37
+ onSafeAreaChange?: (insets: any) => void
38
+ onPerformanceChange?: (metrics: any) => void
39
+ onTouchOptimization?: (optimization: string) => void
18
40
  }
19
41
 
20
42
  export const useTabletLayout = (
21
- config= {},
22
- callbacks= {}
43
+ config: TabletLayoutConfig = {},
44
+ callbacks: TabletLayoutCallbacks = {}
23
45
  ) => {
24
46
  const {
25
47
  enableOrientationOptimization = true,
@@ -33,15 +55,17 @@ export const useTabletLayout = (
33
55
  } = config
34
56
 
35
57
  const [state, setState] = useState<TabletLayoutState>({
36
- orientation,
37
- screenSize,
38
- isSplitView,
39
- isKeyboardVisible,
40
- safeAreaInsets, bottom, left, right},
41
- performanceMetrics,
42
- memoryUsage,
43
- touchResponsiveness,
44
- orientationScore}
58
+ orientation: 'landscape',
59
+ screenSize: 'medium',
60
+ isSplitView: false,
61
+ isKeyboardVisible: false,
62
+ safeAreaInsets: { top: 0, bottom: 0, left: 0, right: 0 },
63
+ performanceMetrics: {
64
+ renderTime: 0,
65
+ memoryUsage: 0,
66
+ touchResponsiveness: 0,
67
+ orientationScore: 100
68
+ }
45
69
  })
46
70
 
47
71
  const [optimizations, setOptimizations] = useState<string[]>([])
@@ -57,8 +81,10 @@ export const useTabletLayout = (
57
81
 
58
82
  const width = window.innerWidth
59
83
  const height = window.innerHeight
60
- const newOrientation = width > height ? 'landscape' == state.orientation) {
61
- setState(prev => ({ ...prev, orientation}))
84
+ const newOrientation = width > height ? 'landscape' : 'portrait'
85
+
86
+ if (newOrientation !== state.orientation) {
87
+ setState(prev => ({ ...prev, orientation: newOrientation }))
62
88
  callbacks.onOrientationChange?.(newOrientation)
63
89
 
64
90
  // Optimize for new orientation
@@ -66,11 +92,11 @@ export const useTabletLayout = (
66
92
  }
67
93
  }, [enableOrientationOptimization, state.orientation, callbacks])
68
94
 
69
- const optimizeForOrientation = useCallback((orientation) => {
95
+ const optimizeForOrientation = useCallback((orientation: 'portrait' | 'landscape') => {
70
96
  setIsOptimizing(true)
71
97
 
72
98
  setTimeout(() => {
73
- const newOptimizations] = []
99
+ const newOptimizations: string[] = []
74
100
 
75
101
  if (orientation === 'portrait') {
76
102
  newOptimizations.push('Portrait layout optimized - vertical navigation enabled')
@@ -156,10 +182,10 @@ export const useTabletLayout = (
156
182
  if (!enableSafeAreaOptimization) return
157
183
 
158
184
  const safeAreaInsets = {
159
- top).getPropertyValue('--sat') || '0'),
160
- bottom).getPropertyValue('--sab') || '0'),
161
- left).getPropertyValue('--sal') || '0'),
162
- right).getPropertyValue('--sar') || '0')
185
+ top: parseInt(getComputedStyle(document.documentElement).getPropertyValue('--sat') || '0'),
186
+ bottom: parseInt(getComputedStyle(document.documentElement).getPropertyValue('--sab') || '0'),
187
+ left: parseInt(getComputedStyle(document.documentElement).getPropertyValue('--sal') || '0'),
188
+ right: parseInt(getComputedStyle(document.documentElement).getPropertyValue('--sar') || '0')
163
189
  }
164
190
 
165
191
  setState(prev => ({ ...prev, safeAreaInsets }))
@@ -169,12 +195,12 @@ export const useTabletLayout = (
169
195
  optimizeForSafeArea(safeAreaInsets)
170
196
  }, [enableSafeAreaOptimization, callbacks])
171
197
 
172
- const optimizeForSafeArea = useCallback((insets) => {
198
+ const optimizeForSafeArea = useCallback((insets: any) => {
173
199
  setIsOptimizing(true)
174
200
 
175
201
  setTimeout(() => {
176
202
  const optimizations = [
177
- `Safe area insets applied}px top, ${insets.bottom}px bottom`,
203
+ `Safe area insets applied: ${insets.top}px top, ${insets.bottom}px bottom`,
178
204
  'Layout adjusted for device-specific safe areas',
179
205
  'Touch targets positioned within safe areas'
180
206
  ]
@@ -195,10 +221,12 @@ export const useTabletLayout = (
195
221
  const renderTime = endTime - startTime
196
222
 
197
223
  // Calculate orientation-specific performance score
198
- const orientationScore = state.orientation === 'landscape' ? 95 = {
224
+ const orientationScore = state.orientation === 'landscape' ? 95 : 90
225
+
226
+ const performanceMetrics = {
199
227
  renderTime,
200
- memoryUsage) * 100,
201
- touchResponsiveness) * 15,
228
+ memoryUsage: Math.random() * 100,
229
+ touchResponsiveness: 85 + Math.random() * 15,
202
230
  orientationScore
203
231
  }
204
232
 
@@ -345,11 +373,12 @@ export const useTabletLayout = (
345
373
  optimizeTouchInteractions,
346
374
 
347
375
  // Computed values
348
- isPortrait=== 'portrait',
349
- isLandscape=== 'landscape',
350
- hasSafeArea).some(value => value > 0),
351
- performanceScore,
352
- optimizationCount}
376
+ isPortrait: state.orientation === 'portrait',
377
+ isLandscape: state.orientation === 'landscape',
378
+ hasSafeArea: Object.values(state.safeAreaInsets).some(value => value > 0),
379
+ performanceScore: state.performanceMetrics.orientationScore,
380
+ optimizationCount: optimizations.length
381
+ }
353
382
  }
354
383
 
355
384
  export default useTabletLayout
@@ -1,25 +1,54 @@
1
1
  import { useState, useCallback, useRef, useEffect } from 'react'
2
2
 
3
3
  export interface TouchFriendlyConfig {
4
- enableTouchOptimization?}
4
+ enableTouchOptimization?: boolean
5
+ enableGestureSupport?: boolean
6
+ enableTouchFeedback?: boolean
7
+ enablePerformanceMonitoring?: boolean
8
+ enableAccessibilitySupport?: boolean
9
+ touchTargetSize?: number
10
+ touchFeedbackDelay?: number
11
+ gestureSensitivity?: number
12
+ }
5
13
 
6
14
  export interface TouchState {
7
- isTouching}
15
+ isTouching: boolean
16
+ touchCount: number
17
+ touchStartTime: number
18
+ touchDuration: number
19
+ touchStartX: number
20
+ touchStartY: number
21
+ touchCurrentX: number
22
+ touchCurrentY: number
23
+ touchDeltaX: number
24
+ touchDeltaY: number
25
+ touchVelocity: number
26
+ gestureType: 'tap' | 'double-tap' | 'long-press' | 'swipe' | 'pinch' | 'rotate' | 'none'
27
+ touchTarget: HTMLElement | null
28
+ }
8
29
 
9
30
  export interface TouchOptimization {
10
- id}
31
+ id: string
32
+ name: string
33
+ type: 'touch' | 'gesture' | 'feedback' | 'performance' | 'accessibility'
34
+ applied: boolean
35
+ impact: 'low' | 'medium' | 'high'
36
+ description: string
37
+ touchTargetSize?: number
38
+ gestureType?: string
39
+ }
11
40
 
12
41
  export interface TouchFriendlyInputCallbacks {
13
- onTouchStateChanged?) => void
14
- onTouchOptimizationApplied?) => void
15
- onGestureDetected?) => void
16
- onTouchFeedbackTriggered?) => void
17
- onPerformanceOptimized?) => void
42
+ onTouchStateChanged?: (state: TouchState) => void
43
+ onTouchOptimizationApplied?: (optimization: TouchOptimization) => void
44
+ onGestureDetected?: (gesture: string) => void
45
+ onTouchFeedbackTriggered?: (feedback: string) => void
46
+ onPerformanceOptimized?: (optimization: string) => void
18
47
  }
19
48
 
20
49
  export const useTouchFriendlyInput = (
21
- config= {},
22
- callbacks= {}
50
+ config: TouchFriendlyConfig = {},
51
+ callbacks: TouchFriendlyInputCallbacks = {}
23
52
  ) => {
24
53
  const {
25
54
  enableTouchOptimization = true,
@@ -33,27 +62,29 @@ export const useTouchFriendlyInput = (
33
62
  } = config
34
63
 
35
64
  const [touchState, setTouchState] = useState<TouchState>({
36
- isTouching,
37
- touchCount,
38
- touchStartTime,
39
- touchDuration,
40
- touchStartX,
41
- touchStartY,
42
- touchCurrentX,
43
- touchCurrentY,
44
- touchDeltaX,
45
- touchDeltaY,
46
- touchVelocity,
47
- gestureType,
48
- touchTarget})
65
+ isTouching: false,
66
+ touchCount: 0,
67
+ touchStartTime: 0,
68
+ touchDuration: 0,
69
+ touchStartX: 0,
70
+ touchStartY: 0,
71
+ touchCurrentX: 0,
72
+ touchCurrentY: 0,
73
+ touchDeltaX: 0,
74
+ touchDeltaY: 0,
75
+ touchVelocity: 0,
76
+ gestureType: 'none',
77
+ touchTarget: null
78
+ })
49
79
 
50
80
  const [touchOptimizations, setTouchOptimizations] = useState<TouchOptimization[]>([])
51
81
  const [isOptimizing, setIsOptimizing] = useState(false)
52
82
  const [performanceMetrics, setPerformanceMetrics] = useState({
53
- touchResponseTime,
54
- gestureRecognitionTime,
55
- touchEventLatency,
56
- memoryUsage})
83
+ touchResponseTime: 0,
84
+ gestureRecognitionTime: 0,
85
+ touchEventLatency: 0,
86
+ memoryUsage: 0
87
+ })
57
88
 
58
89
  const touchStartTimeRef = useRef(0)
59
90
  const lastTouchTimeRef = useRef(0)
@@ -63,41 +94,43 @@ export const useTouchFriendlyInput = (
63
94
  const touchTargetRef = useRef<HTMLElement | null>(null)
64
95
 
65
96
  // Touch event handlers
66
- const handleTouchStart = useCallback((event) => {
97
+ const handleTouchStart = useCallback((event: TouchEvent) => {
67
98
  const touch = event.touches[0]
68
99
  const currentTime = performance.now()
69
100
 
70
101
  setTouchState(prev => ({
71
102
  ...prev,
72
- isTouching,
73
- touchCount,
74
- touchStartTime,
75
- touchStartX,
76
- touchStartY,
77
- touchCurrentX,
78
- touchCurrentY,
79
- touchDeltaX,
80
- touchDeltaY,
81
- touchTarget}))
103
+ isTouching: true,
104
+ touchCount: event.touches.length,
105
+ touchStartTime: currentTime,
106
+ touchStartX: touch.clientX,
107
+ touchStartY: touch.clientY,
108
+ touchCurrentX: touch.clientX,
109
+ touchCurrentY: touch.clientY,
110
+ touchDeltaX: 0,
111
+ touchDeltaY: 0,
112
+ touchTarget: touch.target as HTMLElement
113
+ }))
82
114
 
83
115
  touchStartTimeRef.current = currentTime
84
116
  touchTargetRef.current = touch.target as HTMLElement
85
117
 
86
118
  callbacks.onTouchStateChanged?.({
87
119
  ...touchState,
88
- isTouching,
89
- touchCount,
90
- touchStartTime,
91
- touchStartX,
92
- touchStartY,
93
- touchCurrentX,
94
- touchCurrentY,
95
- touchDeltaX,
96
- touchDeltaY,
97
- touchTarget})
120
+ isTouching: true,
121
+ touchCount: event.touches.length,
122
+ touchStartTime: currentTime,
123
+ touchStartX: touch.clientX,
124
+ touchStartY: touch.clientY,
125
+ touchCurrentX: touch.clientX,
126
+ touchCurrentY: touch.clientY,
127
+ touchDeltaX: 0,
128
+ touchDeltaY: 0,
129
+ touchTarget: touch.target as HTMLElement
130
+ })
98
131
  }, [touchState, callbacks])
99
132
 
100
- const handleTouchMove = useCallback((event) => {
133
+ const handleTouchMove = useCallback((event: TouchEvent) => {
101
134
  const touch = event.touches[0]
102
135
  const currentTime = performance.now()
103
136
  const deltaX = touch.clientX - touchState.touchStartX
@@ -107,21 +140,23 @@ export const useTouchFriendlyInput = (
107
140
 
108
141
  setTouchState(prev => ({
109
142
  ...prev,
110
- touchCurrentX,
111
- touchCurrentY,
112
- touchDeltaX,
113
- touchDeltaY,
114
- touchDuration,
115
- touchVelocity}))
143
+ touchCurrentX: touch.clientX,
144
+ touchCurrentY: touch.clientY,
145
+ touchDeltaX: deltaX,
146
+ touchDeltaY: deltaY,
147
+ touchDuration: duration,
148
+ touchVelocity: velocity
149
+ }))
116
150
 
117
151
  callbacks.onTouchStateChanged?.({
118
152
  ...touchState,
119
- touchCurrentX,
120
- touchCurrentY,
121
- touchDeltaX,
122
- touchDeltaY,
123
- touchDuration,
124
- touchVelocity})
153
+ touchCurrentX: touch.clientX,
154
+ touchCurrentY: touch.clientY,
155
+ touchDeltaX: deltaX,
156
+ touchDeltaY: deltaY,
157
+ touchDuration: duration,
158
+ touchVelocity: velocity
159
+ })
125
160
  }, [touchState, callbacks])
126
161
 
127
162
  const handleTouchEnd = useCallback(() => {
@@ -132,7 +167,7 @@ export const useTouchFriendlyInput = (
132
167
  const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY)
133
168
 
134
169
  // Detect gesture type
135
- let gestureType] = 'none'
170
+ let gestureType: TouchState['gestureType'] = 'none'
136
171
 
137
172
  if (duration < 200 && distance < 10) {
138
173
  // Tap detection
@@ -152,8 +187,8 @@ export const useTouchFriendlyInput = (
152
187
 
153
188
  setTouchState(prev => ({
154
189
  ...prev,
155
- isTouching,
156
- touchDuration,
190
+ isTouching: false,
191
+ touchDuration: duration,
157
192
  gestureType
158
193
  }))
159
194
 
@@ -166,8 +201,8 @@ export const useTouchFriendlyInput = (
166
201
 
167
202
  callbacks.onTouchStateChanged?.({
168
203
  ...touchState,
169
- isTouching,
170
- touchDuration,
204
+ isTouching: false,
205
+ touchDuration: duration,
171
206
  gestureType
172
207
  })
173
208
  }, [touchState, callbacks])
@@ -177,23 +212,24 @@ export const useTouchFriendlyInput = (
177
212
  setIsOptimizing(true)
178
213
 
179
214
  setTimeout(() => {
180
- const touchOptimizations] = [
215
+ const touchOptimizations: TouchOptimization[] = [
181
216
  {
182
- id,
183
- name,
184
- type,
185
- applied,
186
- impact,
187
- description}px size`,
217
+ id: 'touch-target-1',
218
+ name: 'Touch Target Size Optimization',
219
+ type: 'touch',
220
+ applied: true,
221
+ impact: 'high',
222
+ description: `Optimized touch targets to minimum ${touchTargetSize}px size`,
188
223
  touchTargetSize
189
224
  },
190
225
  {
191
- id,
192
- name,
193
- type,
194
- applied,
195
- impact,
196
- description}
226
+ id: 'touch-target-2',
227
+ name: 'Touch-Friendly Spacing',
228
+ type: 'touch',
229
+ applied: true,
230
+ impact: 'medium',
231
+ description: 'Added adequate spacing between touch targets'
232
+ }
197
233
  ]
198
234
 
199
235
  setTouchOptimizations(prev => [...prev, ...touchOptimizations])
@@ -210,23 +246,25 @@ export const useTouchFriendlyInput = (
210
246
  setIsOptimizing(true)
211
247
 
212
248
  setTimeout(() => {
213
- const gestureOptimizations] = [
249
+ const gestureOptimizations: TouchOptimization[] = [
214
250
  {
215
- id,
216
- name,
217
- type,
218
- applied,
219
- impact,
220
- description,
221
- gestureType},
251
+ id: 'gesture-1',
252
+ name: 'Multi-touch Gesture Support',
253
+ type: 'gesture',
254
+ applied: true,
255
+ impact: 'medium',
256
+ description: 'Enhanced multi-touch gesture recognition',
257
+ gestureType: 'multi-touch'
258
+ },
222
259
  {
223
- id,
224
- name,
225
- type,
226
- applied,
227
- impact,
228
- description}`,
229
- gestureType}
260
+ id: 'gesture-2',
261
+ name: 'Gesture Sensitivity Tuning',
262
+ type: 'gesture',
263
+ applied: true,
264
+ impact: 'low',
265
+ description: `Tuned gesture sensitivity to ${gestureSensitivity}`,
266
+ gestureType: 'sensitivity'
267
+ }
230
268
  ]
231
269
 
232
270
  setTouchOptimizations(prev => [...prev, ...gestureOptimizations])
@@ -243,21 +281,23 @@ export const useTouchFriendlyInput = (
243
281
  setIsOptimizing(true)
244
282
 
245
283
  setTimeout(() => {
246
- const feedbackOptimizations] = [
284
+ const feedbackOptimizations: TouchOptimization[] = [
247
285
  {
248
- id,
249
- name,
250
- type,
251
- applied,
252
- impact,
253
- description},
286
+ id: 'feedback-1',
287
+ name: 'Touch Visual Feedback',
288
+ type: 'feedback',
289
+ applied: true,
290
+ impact: 'medium',
291
+ description: 'Enhanced visual feedback for touch interactions'
292
+ },
254
293
  {
255
- id,
256
- name,
257
- type,
258
- applied,
259
- impact,
260
- description}
294
+ id: 'feedback-2',
295
+ name: 'Haptic Feedback Support',
296
+ type: 'feedback',
297
+ applied: true,
298
+ impact: 'low',
299
+ description: 'Added haptic feedback support where available'
300
+ }
261
301
  ]
262
302
 
263
303
  setTouchOptimizations(prev => [...prev, ...feedbackOptimizations])
@@ -276,21 +316,23 @@ export const useTouchFriendlyInput = (
276
316
  setIsOptimizing(true)
277
317
 
278
318
  setTimeout(() => {
279
- const performanceOptimizations] = [
319
+ const performanceOptimizations: TouchOptimization[] = [
280
320
  {
281
- id,
282
- name,
283
- type,
284
- applied,
285
- impact,
286
- description},
321
+ id: 'performance-1',
322
+ name: 'Touch Event Optimization',
323
+ type: 'performance',
324
+ applied: true,
325
+ impact: 'high',
326
+ description: 'Optimized touch event handling for better performance'
327
+ },
287
328
  {
288
- id,
289
- name,
290
- type,
291
- applied,
292
- impact,
293
- description}
329
+ id: 'performance-2',
330
+ name: 'Gesture Recognition Optimization',
331
+ type: 'performance',
332
+ applied: true,
333
+ impact: 'medium',
334
+ description: 'Enhanced gesture recognition performance'
335
+ }
294
336
  ]
295
337
 
296
338
  setTouchOptimizations(prev => [...prev, ...performanceOptimizations])
@@ -309,21 +351,23 @@ export const useTouchFriendlyInput = (
309
351
  setIsOptimizing(true)
310
352
 
311
353
  setTimeout(() => {
312
- const accessibilityFeatures] = [
354
+ const accessibilityFeatures: TouchOptimization[] = [
313
355
  {
314
- id,
315
- name,
316
- type,
317
- applied,
318
- impact,
319
- description},
356
+ id: 'accessibility-1',
357
+ name: 'Touch Accessibility',
358
+ type: 'accessibility',
359
+ applied: true,
360
+ impact: 'high',
361
+ description: 'Enhanced touch accessibility features'
362
+ },
320
363
  {
321
- id,
322
- name,
323
- type,
324
- applied,
325
- impact,
326
- description}
364
+ id: 'accessibility-2',
365
+ name: 'Screen Reader Touch Support',
366
+ type: 'accessibility',
367
+ applied: true,
368
+ impact: 'medium',
369
+ description: 'Improved screen reader touch interaction support'
370
+ }
327
371
  ]
328
372
 
329
373
  setTouchOptimizations(prev => [...prev, ...accessibilityFeatures])
@@ -383,7 +427,7 @@ export const useTouchFriendlyInput = (
383
427
 
384
428
  // Get touch optimization recommendations
385
429
  const getTouchOptimizationRecommendations = useCallback(() => {
386
- const recommendations] = []
430
+ const recommendations: string[] = []
387
431
 
388
432
  if (touchState.touchDuration > 500) {
389
433
  recommendations.push('Touch duration is long, consider optimizing touch event handling')
@@ -404,9 +448,9 @@ export const useTouchFriendlyInput = (
404
448
  useEffect(() => {
405
449
  if (!enableTouchOptimization) return
406
450
 
407
- document.addEventListener('touchstart', handleTouchStart, { passive})
408
- document.addEventListener('touchmove', handleTouchMove, { passive})
409
- document.addEventListener('touchend', handleTouchEnd, { passive})
451
+ document.addEventListener('touchstart', handleTouchStart, { passive: false })
452
+ document.addEventListener('touchmove', handleTouchMove, { passive: false })
453
+ document.addEventListener('touchend', handleTouchEnd, { passive: false })
410
454
 
411
455
  return () => {
412
456
  document.removeEventListener('touchstart', handleTouchStart)
@@ -459,20 +503,20 @@ export const useTouchFriendlyInput = (
459
503
  autoOptimizeTouch,
460
504
 
461
505
  // Utility functions
462
- isTouching) => touchState.isTouching,
463
- getTouchTarget) => touchState.touchTarget,
464
- getGestureType) => touchState.gestureType,
465
- getTouchDuration) => touchState.touchDuration,
466
- getTouchVelocity) => touchState.touchVelocity,
467
- getOptimizationStatus) => ({
468
- touch=> o.type === 'touch'),
469
- gesture=> o.type === 'gesture'),
470
- feedback=> o.type === 'feedback'),
471
- performance=> o.type === 'performance'),
472
- accessibility=> o.type === 'accessibility')
506
+ isTouching: () => touchState.isTouching,
507
+ getTouchTarget: () => touchState.touchTarget,
508
+ getGestureType: () => touchState.gestureType,
509
+ getTouchDuration: () => touchState.touchDuration,
510
+ getTouchVelocity: () => touchState.touchVelocity,
511
+ getOptimizationStatus: () => ({
512
+ touch: touchOptimizations.some(o => o.type === 'touch'),
513
+ gesture: touchOptimizations.some(o => o.type === 'gesture'),
514
+ feedback: touchOptimizations.some(o => o.type === 'feedback'),
515
+ performance: touchOptimizations.some(o => o.type === 'performance'),
516
+ accessibility: touchOptimizations.some(o => o.type === 'accessibility')
473
517
  }),
474
518
  getTouchOptimizationRecommendations,
475
- clearTouchOptimizations) => setTouchOptimizations([])
519
+ clearTouchOptimizations: () => setTouchOptimizations([])
476
520
  }
477
521
  }
478
522