@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
@@ -7,9 +7,9 @@ import MobileFormValidation, { MobileFormValidationRef } from './mobile-form-val
7
7
 
8
8
  import { InputType } from '../../hooks/use-semantic-input'
9
9
 
10
- export const FormDemo= () => {
10
+ export const FormDemo: React.FC = () => {
11
11
  const [activeTab, setActiveTab] = useState<'basic' | 'advanced' | 'performance' | 'semantic'>('basic')
12
- const [formResults, setFormResults] = useState<Array<{ type; data; timestamp}>>([])
12
+ const [formResults, setFormResults] = useState<Array<{ type: string; data: any; timestamp: Date }>>([])
13
13
  const [enableEnhancedFeatures, setEnableEnhancedFeatures] = useState(true)
14
14
 
15
15
  const basicFormRef = useRef<MobileFormValidationRef>(null)
@@ -18,21 +18,23 @@ export const FormDemo= () => {
18
18
  // Basic form fields
19
19
  const basicFields = [
20
20
  {
21
- name,
22
- label,
23
- type} as InputType,
24
- placeholder,
25
- rules, message},
26
- { type, value, message}
21
+ name: 'name',
22
+ label: 'Full Name',
23
+ type: { type: 'text' } as InputType,
24
+ placeholder: 'Enter your full name',
25
+ rules: [
26
+ { type: 'required' as const, message: 'Name is required' },
27
+ { type: 'minLength' as const, value: 2, message: 'Name must be at least 2 characters' }
27
28
  ]
28
29
  },
29
30
  {
30
- name,
31
- label,
32
- type} as InputType,
33
- placeholder,
34
- rules, message},
35
- { type, message}
31
+ name: 'email',
32
+ label: 'Email Address',
33
+ type: { type: 'email' } as InputType,
34
+ placeholder: 'Enter your email',
35
+ rules: [
36
+ { type: 'required' as const, message: 'Email is required' },
37
+ { type: 'email' as const, message: 'Please enter a valid email address' }
36
38
  ]
37
39
  }
38
40
  ]
@@ -40,91 +42,99 @@ export const FormDemo= () => {
40
42
  // Advanced form fields
41
43
  const advancedFields = [
42
44
  {
43
- name,
44
- label,
45
- type} as InputType,
46
- placeholder,
47
- rules, message},
48
- { type, value, message},
49
- { type, value, message}
45
+ name: 'fullName',
46
+ label: 'Full Name',
47
+ type: { type: 'text' } as InputType,
48
+ placeholder: 'Enter your full name',
49
+ rules: [
50
+ { type: 'required' as const, message: 'Full name is required' },
51
+ { type: 'minLength' as const, value: 3, message: 'Name must be at least 3 characters' },
52
+ { type: 'maxLength' as const, value: 50, message: 'Name must be less than 50 characters' }
50
53
  ]
51
54
  },
52
55
  {
53
- name,
54
- label,
55
- type} as InputType,
56
- placeholder,
57
- rules, message},
58
- { type, message}
56
+ name: 'emailAddress',
57
+ label: 'Email Address',
58
+ type: { type: 'email' } as InputType,
59
+ placeholder: 'Enter your email address',
60
+ rules: [
61
+ { type: 'required' as const, message: 'Email is required' },
62
+ { type: 'email' as const, message: 'Please enter a valid email address' }
59
63
  ]
60
64
  },
61
65
  {
62
- name,
63
- label,
64
- type} as InputType,
65
- placeholder,
66
- rules, message},
67
- { type, value]?[0-9\s\-\(\)]{7,}$/, message}
66
+ name: 'phoneNumber',
67
+ label: 'Phone Number',
68
+ type: { type: 'tel' } as InputType,
69
+ placeholder: 'Enter your phone number',
70
+ rules: [
71
+ { type: 'required' as const, message: 'Phone number is required' },
72
+ { type: 'pattern' as const, value: /^[\+]?[0-9\s\-\(\)]{7,}$/, message: 'Please enter a valid phone number' }
68
73
  ]
69
74
  },
70
75
  {
71
- name,
72
- label,
73
- type} as InputType,
74
- placeholder,
75
- rules, value, message}
76
+ name: 'website',
77
+ label: 'Website',
78
+ type: { type: 'url' } as InputType,
79
+ placeholder: 'Enter your website URL',
80
+ rules: [
81
+ { type: 'pattern' as const, value: /^https?:\/\/.+/, message: 'Please enter a valid URL starting with http:// or https://' }
76
82
  ]
77
83
  },
78
84
  {
79
- name,
80
- label,
81
- type} as InputType,
82
- placeholder,
83
- rules, message},
84
- { type, value, message},
85
- { type, value, message}
85
+ name: 'age',
86
+ label: 'Age',
87
+ type: { type: 'number' } as InputType,
88
+ placeholder: 'Enter your age',
89
+ rules: [
90
+ { type: 'required' as const, message: 'Age is required' },
91
+ { type: 'minLength' as const, value: 1, message: 'Age must be at least 1' },
92
+ { type: 'maxLength' as const, value: 3, message: 'Age must be less than 1000' }
86
93
  ]
87
94
  },
88
95
  {
89
- name,
90
- label,
91
- type} as InputType,
92
- placeholder,
93
- rules, message},
94
- { type, value, message},
95
- { type, value=.*[a-z])(?=.*[A-Z])(?=.*\d)/, message, uppercase, and number' }
96
+ name: 'password',
97
+ label: 'Password',
98
+ type: { type: 'password' } as InputType,
99
+ placeholder: 'Enter your password',
100
+ rules: [
101
+ { type: 'required' as const, message: 'Password is required' },
102
+ { type: 'minLength' as const, value: 8, message: 'Password must be at least 8 characters' },
103
+ { type: 'pattern' as const, value: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/, message: 'Password must contain lowercase, uppercase, and number' }
96
104
  ]
97
105
  },
98
106
  {
99
- name,
100
- label,
101
- type} as InputType,
102
- placeholder,
103
- rules, message},
104
- { type, message, validator)=> {
107
+ name: 'confirmPassword',
108
+ label: 'Confirm Password',
109
+ type: { type: 'password' } as InputType,
110
+ placeholder: 'Confirm your password',
111
+ rules: [
112
+ { type: 'required' as const, message: 'Please confirm your password' },
113
+ { type: 'custom' as const, message: 'Passwords do not match', validator: (value: any): boolean => {
105
114
  const passwordField = advancedFields.find(f => f.name === 'password')
106
- const passwordValue = passwordField ? (document.getElementById('password') as HTMLInputElement)?.value === passwordValue
115
+ const passwordValue = passwordField ? (document.getElementById('password') as HTMLInputElement)?.value : ''
116
+ return value === passwordValue
107
117
  }}
108
118
  ]
109
119
  }
110
120
  ]
111
121
 
112
122
  // Handle form submission
113
- const handleFormSubmit = (formData, any>, formType) => {
123
+ const handleFormSubmit = (formData: Record<string, any>, formType: string) => {
114
124
  const result = {
115
- type,
116
- data,
117
- timestamp)
125
+ type: formType,
126
+ data: formData,
127
+ timestamp: new Date()
118
128
  }
119
129
 
120
130
  setFormResults(prev => [result, ...prev.slice(0, 9)]) // Keep last 10 results
121
131
 
122
- console.log(`${formType} form submitted, formData)
132
+ console.log(`${formType} form submitted:`, formData)
123
133
  }
124
134
 
125
135
  // Handle form validation change
126
- const handleValidationChange = (isValid, formType) => {
127
- console.log(`${formType} form validation, isValid ? 'Valid' )
136
+ const handleValidationChange = (isValid: boolean, formType: string) => {
137
+ console.log(`${formType} form validation:`, isValid ? 'Valid' : 'Invalid')
128
138
  }
129
139
 
130
140
  // Clear form results
@@ -133,32 +143,38 @@ export const FormDemo= () => {
133
143
  }
134
144
 
135
145
  // Test form submission programmatically
136
- const testFormSubmission = async (formType) => {
137
- const formRef = formType === 'basic' ? basicFormRef ) {
146
+ const testFormSubmission = async (formType: 'basic' | 'advanced') => {
147
+ const formRef = formType === 'basic' ? basicFormRef : advancedFormRef
148
+
149
+ if (formRef.current) {
138
150
  try {
139
151
  const result = await formRef.current.submit()
140
- console.log(`${formType} form test submission, result)
152
+ console.log(`${formType} form test submission:`, result)
141
153
  } catch (error) {
142
- console.error(`${formType} form test submission error, error)
154
+ console.error(`${formType} form test submission error:`, error)
143
155
  }
144
156
  }
145
157
  }
146
158
 
147
159
  // Test form validation programmatically
148
- const testFormValidation = async (formType) => {
149
- const formRef = formType === 'basic' ? basicFormRef ) {
160
+ const testFormValidation = async (formType: 'basic' | 'advanced') => {
161
+ const formRef = formType === 'basic' ? basicFormRef : advancedFormRef
162
+
163
+ if (formRef.current) {
150
164
  try {
151
165
  const isValid = await formRef.current.validate()
152
- console.log(`${formType} form validation test, isValid ? 'Valid' )
166
+ console.log(`${formType} form validation test:`, isValid ? 'Valid' : 'Invalid')
153
167
  } catch (error) {
154
- console.error(`${formType} form validation test error, error)
168
+ console.error(`${formType} form validation test error:`, error)
155
169
  }
156
170
  }
157
171
  }
158
172
 
159
173
  // Test form reset programmatically
160
- const testFormReset = (formType) => {
161
- const formRef = formType === 'basic' ? basicFormRef ) {
174
+ const testFormReset = (formType: 'basic' | 'advanced') => {
175
+ const formRef = formType === 'basic' ? basicFormRef : advancedFormRef
176
+
177
+ if (formRef.current) {
162
178
  formRef.current.reset()
163
179
  console.log(`${formType} form reset`)
164
180
  }
@@ -173,14 +189,20 @@ export const FormDemo= () => {
173
189
  Advanced form system with mobile validation, animated feedback, and performance optimization
174
190
  </p>
175
191
  <Badge variant="outline" className="text-sm">
176
- Story 6}
192
+ Story 6: Advanced Form System with Mobile Validation
193
+ </Badge>
194
+ </div>
195
+
196
+ {/* Enhanced Features Toggle */}
177
197
  <div className="flex justify-center">
178
198
  <div className="flex items-center gap-2 p-3 bg-gray-50 rounded-lg">
179
- <span className="text-sm font-medium">Enhanced Features={enableEnhancedFeatures ? 'default' }
199
+ <span className="text-sm font-medium">Enhanced Features:</span>
200
+ <Button
201
+ variant={enableEnhancedFeatures ? 'default' : 'outline'}
180
202
  size="sm"
181
203
  onClick={() => setEnableEnhancedFeatures(!enableEnhancedFeatures)}
182
204
  >
183
- {enableEnhancedFeatures ? 'Enabled' }
205
+ {enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
184
206
  </Button>
185
207
  </div>
186
208
  </div>
@@ -189,9 +211,10 @@ export const FormDemo= () => {
189
211
  <Tabs
190
212
  tabs={[
191
213
  {
192
- id,
193
- label,
194
- content="space-y-4">
214
+ id: 'basic',
215
+ label: 'Basic Form',
216
+ content: (
217
+ <div className="space-y-4">
195
218
  <Card>
196
219
  <CardHeader>
197
220
  <CardTitle className="flex items-center gap-2">
@@ -243,9 +266,10 @@ export const FormDemo= () => {
243
266
  )
244
267
  },
245
268
  {
246
- id,
247
- label,
248
- content="space-y-4">
269
+ id: 'advanced',
270
+ label: 'Advanced Form',
271
+ content: (
272
+ <div className="space-y-4">
249
273
  <Card>
250
274
  <CardHeader>
251
275
  <CardTitle className="flex items-center gap-2">
@@ -297,9 +321,10 @@ export const FormDemo= () => {
297
321
  )
298
322
  },
299
323
  {
300
- id,
301
- label,
302
- content="space-y-4">
324
+ id: 'performance',
325
+ label: 'Performance',
326
+ content: (
327
+ <div className="space-y-4">
303
328
  <Card>
304
329
  <CardHeader>
305
330
  <CardTitle className="flex items-center gap-2">
@@ -311,25 +336,30 @@ export const FormDemo= () => {
311
336
  </CardDescription>
312
337
  </CardHeader>
313
338
  <CardContent className="space-y-4">
314
- <div className="grid grid-cols-1 md="space-y-3">
339
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
340
+ <div className="space-y-3">
315
341
  <h4 className="font-semibold">Performance Features</h4>
316
342
  <div className="space-y-2 text-sm">
317
343
  <div className="flex justify-between">
318
- <span>Validation Throttling="default">Enabled</Badge>
344
+ <span>Validation Throttling:</span>
345
+ <Badge variant="default">Enabled</Badge>
319
346
  </div>
320
347
  <div className="flex justify-between">
321
- <span>Touch Event Optimization={enableEnhancedFeatures ? 'default' }>
322
- {enableEnhancedFeatures ? 'Enabled' }
348
+ <span>Touch Event Optimization:</span>
349
+ <Badge variant={enableEnhancedFeatures ? 'default' : 'secondary'}>
350
+ {enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
323
351
  </Badge>
324
352
  </div>
325
353
  <div className="flex justify-between">
326
- <span>Memory Management={enableEnhancedFeatures ? 'default' }>
327
- {enableEnhancedFeatures ? 'Enabled' }
354
+ <span>Memory Management:</span>
355
+ <Badge variant={enableEnhancedFeatures ? 'default' : 'secondary'}>
356
+ {enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
328
357
  </Badge>
329
358
  </div>
330
359
  <div className="flex justify-between">
331
- <span>Battery Optimization={enableEnhancedFeatures ? 'default' }>
332
- {enableEnhancedFeatures ? 'Enabled' }
360
+ <span>Battery Optimization:</span>
361
+ <Badge variant={enableEnhancedFeatures ? 'default' : 'secondary'}>
362
+ {enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
333
363
  </Badge>
334
364
  </div>
335
365
  </div>
@@ -363,9 +393,10 @@ export const FormDemo= () => {
363
393
  )
364
394
  },
365
395
  {
366
- id,
367
- label,
368
- content="space-y-4">
396
+ id: 'semantic',
397
+ label: 'Semantic Input',
398
+ content: (
399
+ <div className="space-y-4">
369
400
  <Card>
370
401
  <CardHeader>
371
402
  <CardTitle className="flex items-center gap-2">
@@ -377,24 +408,29 @@ export const FormDemo= () => {
377
408
  </CardDescription>
378
409
  </CardHeader>
379
410
  <CardContent className="space-y-4">
380
- <div className="grid grid-cols-1 md="space-y-3">
411
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
412
+ <div className="space-y-3">
381
413
  <h4 className="font-semibold">Semantic Features</h4>
382
414
  <div className="space-y-2 text-sm">
383
415
  <div className="flex justify-between">
384
- <span>Auto Type Detection="default">Enabled</Badge>
416
+ <span>Auto Type Detection:</span>
417
+ <Badge variant="default">Enabled</Badge>
385
418
  </div>
386
419
  <div className="flex justify-between">
387
- <span>Keyboard Optimization={enableEnhancedFeatures ? 'default' }>
388
- {enableEnhancedFeatures ? 'Enabled' }
420
+ <span>Keyboard Optimization:</span>
421
+ <Badge variant={enableEnhancedFeatures ? 'default' : 'secondary'}>
422
+ {enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
389
423
  </Badge>
390
424
  </div>
391
425
  <div className="flex justify-between">
392
- <span>Autocomplete Enhancement={enableEnhancedFeatures ? 'default' }>
393
- {enableEnhancedFeatures ? 'Enabled' }
426
+ <span>Autocomplete Enhancement:</span>
427
+ <Badge variant={enableEnhancedFeatures ? 'default' : 'secondary'}>
428
+ {enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
394
429
  </Badge>
395
430
  </div>
396
431
  <div className="flex justify-between">
397
- <span>Touch Optimization="default">Enabled</Badge>
432
+ <span>Touch Optimization:</span>
433
+ <Badge variant="default">Enabled</Badge>
398
434
  </div>
399
435
  </div>
400
436
  </div>
@@ -402,11 +438,11 @@ export const FormDemo= () => {
402
438
  <div className="space-y-3">
403
439
  <h4 className="font-semibold">Detection Examples</h4>
404
440
  <div className="space-y-2 text-sm text-gray-600">
405
- <p>• <strong>Email, sets email keyboard</p>
406
- <p>• <strong>Phone, sets phone keyboard</p>
407
- <p>• <strong>URL, sets URL keyboard</p>
408
- <p>• <strong>Search, optimizes input</p>
409
- <p>• <strong>Number, sets numeric keyboard</p>
441
+ <p>• <strong>Email:</strong> Detects @ symbol, sets email keyboard</p>
442
+ <p>• <strong>Phone:</strong> Detects numeric patterns, sets phone keyboard</p>
443
+ <p>• <strong>URL:</strong> Detects http/https, sets URL keyboard</p>
444
+ <p>• <strong>Search:</strong> Detects search context, optimizes input</p>
445
+ <p>• <strong>Number:</strong> Detects numeric patterns, sets numeric keyboard</p>
410
446
  </div>
411
447
  </div>
412
448
  </div>
@@ -428,7 +464,7 @@ export const FormDemo= () => {
428
464
  }
429
465
  ]}
430
466
  activeTab={activeTab}
431
- onTabChange={(tabId) => setActiveTab(tabId as 'basic' | 'advanced' | 'performance' | 'semantic')}
467
+ onTabChange={(tabId: string) => setActiveTab(tabId as 'basic' | 'advanced' | 'performance' | 'semantic')}
432
468
  className="w-full"
433
469
  />
434
470
 
@@ -479,7 +515,8 @@ export const FormDemo= () => {
479
515
  </CardDescription>
480
516
  </CardHeader>
481
517
  <CardContent>
482
- <div className="grid grid-cols-1 md="space-y-3">
518
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
519
+ <div className="space-y-3">
483
520
  <h4 className="font-semibold">✅ Completed Features</h4>
484
521
  <ul className="text-sm space-y-1 text-gray-600">
485
522
  <li>• Mobile form validation system</li>