@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,48 +1,68 @@
1
1
  import { useState, useEffect, useCallback, useRef } from 'react'
2
2
 
3
3
  export interface FeedbackState {
4
- type}
4
+ type: 'none' | 'success' | 'error' | 'warning' | 'info'
5
+ message: string
6
+ isVisible: boolean
7
+ isAnimating: boolean
8
+ duration: number
9
+ timestamp: number
10
+ }
5
11
 
6
12
  export interface FeedbackConfig {
7
- enableAnimations}
13
+ enableAnimations: boolean
14
+ enableTouchFeedback: boolean
15
+ enableHapticFeedback: boolean
16
+ enableSoundFeedback: boolean
17
+ defaultDuration: number
18
+ animationDuration: number
19
+ enableAutoHide: boolean
20
+ enableAccessibility: boolean
21
+ }
8
22
 
9
23
  export interface FeedbackCallbacks {
10
- onFeedbackShow?) => void
11
- onFeedbackHide?) => void
12
- onFeedbackComplete?) => void
13
- onAccessibilityAnnounce?) => void
24
+ onFeedbackShow?: (feedback: FeedbackState) => void
25
+ onFeedbackHide?: (feedback: FeedbackState) => void
26
+ onFeedbackComplete?: (feedback: FeedbackState) => void
27
+ onAccessibilityAnnounce?: (message: string) => void
14
28
  }
15
29
 
16
30
  export interface FormFeedbackState {
17
- currentFeedback]
18
- isAnimating}
31
+ currentFeedback: FeedbackState
32
+ feedbackHistory: FeedbackState[]
33
+ isAnimating: boolean
34
+ accessibilityEnabled: boolean
35
+ }
19
36
 
20
37
  export const useFormFeedback = (
21
- callbacks= {},
22
- config= {}
38
+ callbacks: FeedbackCallbacks = {},
39
+ config: Partial<FeedbackConfig> = {}
23
40
  ) => {
24
- const defaultConfig= {
25
- enableAnimations,
26
- enableTouchFeedback,
27
- enableHapticFeedback,
28
- enableSoundFeedback,
29
- defaultDuration,
30
- animationDuration,
31
- enableAutoHide,
32
- enableAccessibility,
41
+ const defaultConfig: FeedbackConfig = {
42
+ enableAnimations: true,
43
+ enableTouchFeedback: true,
44
+ enableHapticFeedback: true,
45
+ enableSoundFeedback: false,
46
+ defaultDuration: 3000,
47
+ animationDuration: 300,
48
+ enableAutoHide: true,
49
+ enableAccessibility: true,
33
50
  ...config
34
51
  }
35
52
 
36
53
  const [feedbackState, setFeedbackState] = useState<FormFeedbackState>({
37
- currentFeedback,
38
- message,
39
- isVisible,
40
- isAnimating,
41
- duration,
42
- timestamp},
43
- feedbackHistory],
44
- isAnimating,
45
- accessibilityEnabled})
54
+ currentFeedback: {
55
+ type: 'none',
56
+ message: '',
57
+ isVisible: false,
58
+ isAnimating: false,
59
+ duration: defaultConfig.defaultDuration,
60
+ timestamp: 0
61
+ },
62
+ feedbackHistory: [],
63
+ isAnimating: false,
64
+ accessibilityEnabled: defaultConfig.enableAccessibility
65
+ })
46
66
 
47
67
  const hideTimerRef = useRef<NodeJS.Timeout | null>(null)
48
68
  const animationTimerRef = useRef<NodeJS.Timeout | null>(null)
@@ -56,23 +76,24 @@ export const useFormFeedback = (
56
76
  }, [defaultConfig.enableSoundFeedback])
57
77
 
58
78
  // Trigger haptic feedback
59
- const triggerHapticFeedback = useCallback((intensity= 'medium') => {
79
+ const triggerHapticFeedback = useCallback((intensity: 'light' | 'medium' | 'strong' = 'medium') => {
60
80
  if (!defaultConfig.enableHapticFeedback || !('vibrate' in navigator)) return
61
81
 
62
82
  const vibrationPattern = {
63
- light,
64
- medium,
65
- strong}
83
+ light: 20,
84
+ medium: 50,
85
+ strong: 100
86
+ }
66
87
 
67
88
  try {
68
89
  navigator.vibrate(vibrationPattern[intensity])
69
90
  } catch (error) {
70
- console.warn('Haptic feedback not supported, error)
91
+ console.warn('Haptic feedback not supported:', error)
71
92
  }
72
93
  }, [defaultConfig.enableHapticFeedback])
73
94
 
74
95
  // Trigger sound feedback
75
- const triggerSoundFeedback = useCallback((type= 'success') => {
96
+ const triggerSoundFeedback = useCallback((type: 'success' | 'error' | 'warning' | 'info' = 'success') => {
76
97
  if (!defaultConfig.enableSoundFeedback || !audioContextRef.current) return
77
98
 
78
99
  try {
@@ -84,10 +105,10 @@ export const useFormFeedback = (
84
105
  gainNode.connect(audioContext.destination)
85
106
 
86
107
  const soundConfig = {
87
- success, duration, volume},
88
- error, duration, volume},
89
- warning, duration, volume},
90
- info, duration, volume}
108
+ success: { frequency: 800, duration: 0.1, volume: 0.1 },
109
+ error: { frequency: 400, duration: 0.2, volume: 0.15 },
110
+ warning: { frequency: 600, duration: 0.15, volume: 0.12 },
111
+ info: { frequency: 1000, duration: 0.08, volume: 0.08 }
91
112
  }
92
113
 
93
114
  const config = soundConfig[type]
@@ -97,12 +118,12 @@ export const useFormFeedback = (
97
118
  oscillator.start(audioContext.currentTime)
98
119
  oscillator.stop(audioContext.currentTime + config.duration)
99
120
  } catch (error) {
100
- console.warn('Sound feedback not supported, error)
121
+ console.warn('Sound feedback not supported:', error)
101
122
  }
102
123
  }, [defaultConfig.enableSoundFeedback])
103
124
 
104
125
  // Announce feedback for accessibility
105
- const announceAccessibility = useCallback((message) => {
126
+ const announceAccessibility = useCallback((message: string) => {
106
127
  if (!defaultConfig.enableAccessibility) return
107
128
 
108
129
  // Create a live region for screen readers
@@ -126,10 +147,10 @@ export const useFormFeedback = (
126
147
 
127
148
  // Show feedback with animation
128
149
  const showFeedback = useCallback((
129
- type],
130
- message,
131
- duration?,
132
- options?; skipSound?; skipHaptic?}
150
+ type: FeedbackState['type'],
151
+ message: string,
152
+ duration?: number,
153
+ options?: { skipAnimation?: boolean; skipSound?: boolean; skipHaptic?: boolean }
133
154
  ) => {
134
155
  // Clear existing timers
135
156
  if (hideTimerRef.current) {
@@ -142,57 +163,64 @@ export const useFormFeedback = (
142
163
  animationTimerRef.current = null
143
164
  }
144
165
 
145
- const feedback= {
166
+ const feedback: FeedbackState = {
146
167
  type,
147
168
  message,
148
- isVisible,
149
- isAnimating,
150
- duration,
151
- timestamp)
169
+ isVisible: true,
170
+ isAnimating: !options?.skipAnimation && defaultConfig.enableAnimations,
171
+ duration: duration || defaultConfig.defaultDuration,
172
+ timestamp: Date.now()
152
173
  }
153
174
 
154
175
  // Start animation
155
176
  if (feedback.isAnimating) {
156
177
  setFeedbackState(prev => ({
157
178
  ...prev,
158
- currentFeedback,
159
- isAnimating}))
179
+ currentFeedback: feedback,
180
+ isAnimating: true
181
+ }))
160
182
 
161
183
  // End animation after animation duration
162
184
  animationTimerRef.current = setTimeout(() => {
163
185
  setFeedbackState(prev => ({
164
186
  ...prev,
165
- isAnimating}))
187
+ isAnimating: false
188
+ }))
166
189
  }, defaultConfig.animationDuration)
167
190
  } else {
168
191
  setFeedbackState(prev => ({
169
192
  ...prev,
170
- currentFeedback,
171
- isAnimating}))
193
+ currentFeedback: feedback,
194
+ isAnimating: false
195
+ }))
172
196
  }
173
197
 
174
198
  // Add to history
175
199
  setFeedbackState(prev => ({
176
200
  ...prev,
177
- feedbackHistory, ...prev.feedbackHistory.slice(0, 9)] // Keep last 10
201
+ feedbackHistory: [feedback, ...prev.feedbackHistory.slice(0, 9)] // Keep last 10
178
202
  }))
179
203
 
180
204
  // Trigger feedback based on type
181
205
  if (!options?.skipHaptic) {
182
206
  switch (type) {
183
- case 'success')
207
+ case 'success':
208
+ triggerHapticFeedback('light')
184
209
  break
185
- case 'error')
210
+ case 'error':
211
+ triggerHapticFeedback('strong')
186
212
  break
187
- case 'warning')
213
+ case 'warning':
214
+ triggerHapticFeedback('medium')
188
215
  break
189
- case 'info')
216
+ case 'info':
217
+ triggerHapticFeedback('light')
190
218
  break
191
219
  }
192
220
  }
193
221
 
194
222
  if (!options?.skipSound) {
195
- triggerSoundFeedback(type === 'none' ? 'success' )
223
+ triggerSoundFeedback(type === 'none' ? 'success' : type)
196
224
  }
197
225
 
198
226
  // Announce for accessibility
@@ -231,31 +259,34 @@ export const useFormFeedback = (
231
259
 
232
260
  setFeedbackState(prev => ({
233
261
  ...prev,
234
- currentFeedback,
235
- isVisible,
236
- isAnimating},
237
- isAnimating}))
262
+ currentFeedback: {
263
+ ...prev.currentFeedback,
264
+ isVisible: false,
265
+ isAnimating: false
266
+ },
267
+ isAnimating: false
268
+ }))
238
269
 
239
270
  callbacks.onFeedbackHide?.(feedbackState.currentFeedback)
240
271
  }, [feedbackState.currentFeedback, callbacks])
241
272
 
242
273
  // Show success feedback
243
- const showSuccess = useCallback((message, duration?, options?) => {
274
+ const showSuccess = useCallback((message: string, duration?: number, options?: any) => {
244
275
  showFeedback('success', message, duration, options)
245
276
  }, [showFeedback])
246
277
 
247
278
  // Show error feedback
248
- const showError = useCallback((message, duration?, options?) => {
279
+ const showError = useCallback((message: string, duration?: number, options?: any) => {
249
280
  showFeedback('error', message, duration, options)
250
281
  }, [showFeedback])
251
282
 
252
283
  // Show warning feedback
253
- const showWarning = useCallback((message, duration?, options?) => {
284
+ const showWarning = useCallback((message: string, duration?: number, options?: any) => {
254
285
  showFeedback('warning', message, duration, options)
255
286
  }, [showFeedback])
256
287
 
257
288
  // Show info feedback
258
- const showInfo = useCallback((message, duration?, options?) => {
289
+ const showInfo = useCallback((message: string, duration?: number, options?: any) => {
259
290
  showFeedback('info', message, duration, options)
260
291
  }, [showFeedback])
261
292
 
@@ -264,7 +295,7 @@ export const useFormFeedback = (
264
295
  hideFeedback()
265
296
  setFeedbackState(prev => ({
266
297
  ...prev,
267
- feedbackHistory]
298
+ feedbackHistory: []
268
299
  }))
269
300
  }, [hideFeedback])
270
301
 
@@ -294,9 +325,19 @@ export const useFormFeedback = (
294
325
  }, [feedbackState])
295
326
 
296
327
  // Get feedback icon
297
- const getFeedbackIcon = useCallback((type]) => {
328
+ const getFeedbackIcon = useCallback((type: FeedbackState['type']) => {
298
329
  switch (type) {
299
- case 'success'}
330
+ case 'success':
331
+ return '✅'
332
+ case 'error':
333
+ return '❌'
334
+ case 'warning':
335
+ return '⚠️'
336
+ case 'info':
337
+ return 'ℹ️'
338
+ default:
339
+ return ''
340
+ }
300
341
  }, [])
301
342
 
302
343
  // Check if feedback is visible
@@ -342,19 +383,21 @@ export const useFormFeedback = (
342
383
  // Convenience hook for basic form feedback
343
384
  export const useBasicFormFeedback = () => {
344
385
  return useFormFeedback({}, {
345
- enableAnimations,
346
- enableTouchFeedback,
347
- enableHapticFeedback,
348
- enableSoundFeedback,
349
- enableAccessibility})
386
+ enableAnimations: true,
387
+ enableTouchFeedback: false,
388
+ enableHapticFeedback: false,
389
+ enableSoundFeedback: false,
390
+ enableAccessibility: true
391
+ })
350
392
  }
351
393
 
352
394
  // Convenience hook for enhanced form feedback
353
395
  export const useEnhancedFormFeedback = () => {
354
396
  return useFormFeedback({}, {
355
- enableAnimations,
356
- enableTouchFeedback,
357
- enableHapticFeedback,
358
- enableSoundFeedback,
359
- enableAccessibility})
397
+ enableAnimations: true,
398
+ enableTouchFeedback: true,
399
+ enableHapticFeedback: true,
400
+ enableSoundFeedback: true,
401
+ enableAccessibility: true
402
+ })
360
403
  }