rn-inputforge 0.4.0 → 0.5.1

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 (634) hide show
  1. package/README.md +959 -39
  2. package/lib/commonjs/a11y/audit.js +72 -0
  3. package/lib/commonjs/a11y/audit.js.map +1 -0
  4. package/lib/commonjs/a11y/index.js +13 -0
  5. package/lib/commonjs/a11y/index.js.map +1 -0
  6. package/lib/commonjs/adapters/index.js +25 -0
  7. package/lib/commonjs/adapters/index.js.map +1 -0
  8. package/lib/commonjs/adapters/reactHookForm.js +107 -0
  9. package/lib/commonjs/adapters/reactHookForm.js.map +1 -0
  10. package/lib/commonjs/autofill/index.js +25 -0
  11. package/lib/commonjs/autofill/index.js.map +1 -0
  12. package/lib/commonjs/autofill/profiles.js +199 -0
  13. package/lib/commonjs/autofill/profiles.js.map +1 -0
  14. package/lib/commonjs/components/FieldFlowA11yAudit/FieldFlowA11yAudit.js +99 -0
  15. package/lib/commonjs/components/FieldFlowA11yAudit/FieldFlowA11yAudit.js.map +1 -0
  16. package/lib/commonjs/components/FieldFlowA11yAudit/index.js +13 -0
  17. package/lib/commonjs/components/FieldFlowA11yAudit/index.js.map +1 -0
  18. package/lib/commonjs/components/FieldFlowAffordance/FieldFlowAffordance.js +104 -0
  19. package/lib/commonjs/components/FieldFlowAffordance/FieldFlowAffordance.js.map +1 -0
  20. package/lib/commonjs/components/FieldFlowAffordance/index.js +13 -0
  21. package/lib/commonjs/components/FieldFlowAffordance/index.js.map +1 -0
  22. package/lib/commonjs/components/FieldFlowAuthActions/FieldFlowAuthActions.js +130 -0
  23. package/lib/commonjs/components/FieldFlowAuthActions/FieldFlowAuthActions.js.map +1 -0
  24. package/lib/commonjs/components/FieldFlowAuthActions/index.js +13 -0
  25. package/lib/commonjs/components/FieldFlowAuthActions/index.js.map +1 -0
  26. package/lib/commonjs/components/FieldFlowCompleteness/FieldFlowCompleteness.js +100 -0
  27. package/lib/commonjs/components/FieldFlowCompleteness/FieldFlowCompleteness.js.map +1 -0
  28. package/lib/commonjs/components/FieldFlowCompleteness/index.js +13 -0
  29. package/lib/commonjs/components/FieldFlowCompleteness/index.js.map +1 -0
  30. package/lib/commonjs/components/FieldFlowCreditCard/FieldFlowCreditCard.js +146 -0
  31. package/lib/commonjs/components/FieldFlowCreditCard/FieldFlowCreditCard.js.map +1 -0
  32. package/lib/commonjs/components/FieldFlowCreditCard/index.js +13 -0
  33. package/lib/commonjs/components/FieldFlowCreditCard/index.js.map +1 -0
  34. package/lib/commonjs/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js +156 -0
  35. package/lib/commonjs/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js.map +1 -0
  36. package/lib/commonjs/components/FieldFlowDraftBanner/index.js +13 -0
  37. package/lib/commonjs/components/FieldFlowDraftBanner/index.js.map +1 -0
  38. package/lib/commonjs/components/FieldFlowFormHeader/FieldFlowFormHeader.js +102 -0
  39. package/lib/commonjs/components/FieldFlowFormHeader/FieldFlowFormHeader.js.map +1 -0
  40. package/lib/commonjs/components/FieldFlowFormHeader/index.js +13 -0
  41. package/lib/commonjs/components/FieldFlowFormHeader/index.js.map +1 -0
  42. package/lib/commonjs/components/FieldFlowInfoTip/FieldFlowInfoTip.js +121 -0
  43. package/lib/commonjs/components/FieldFlowInfoTip/FieldFlowInfoTip.js.map +1 -0
  44. package/lib/commonjs/components/FieldFlowInfoTip/index.js +13 -0
  45. package/lib/commonjs/components/FieldFlowInfoTip/index.js.map +1 -0
  46. package/lib/commonjs/components/FieldFlowInlineAlert/FieldFlowInlineAlert.js +142 -0
  47. package/lib/commonjs/components/FieldFlowInlineAlert/FieldFlowInlineAlert.js.map +1 -0
  48. package/lib/commonjs/components/FieldFlowInlineAlert/index.js +13 -0
  49. package/lib/commonjs/components/FieldFlowInlineAlert/index.js.map +1 -0
  50. package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js +179 -53
  51. package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js.map +1 -1
  52. package/lib/commonjs/components/FieldFlowInput/styles.js +60 -8
  53. package/lib/commonjs/components/FieldFlowInput/styles.js.map +1 -1
  54. package/lib/commonjs/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.js +137 -0
  55. package/lib/commonjs/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.js.map +1 -0
  56. package/lib/commonjs/components/FieldFlowKeyboardToolbar/index.js +19 -0
  57. package/lib/commonjs/components/FieldFlowKeyboardToolbar/index.js.map +1 -0
  58. package/lib/commonjs/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js +136 -0
  59. package/lib/commonjs/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js.map +1 -0
  60. package/lib/commonjs/components/FieldFlowNumberStepper/index.js +13 -0
  61. package/lib/commonjs/components/FieldFlowNumberStepper/index.js.map +1 -0
  62. package/lib/commonjs/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js +122 -0
  63. package/lib/commonjs/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js.map +1 -0
  64. package/lib/commonjs/components/FieldFlowPasswordStrength/index.js +13 -0
  65. package/lib/commonjs/components/FieldFlowPasswordStrength/index.js.map +1 -0
  66. package/lib/commonjs/components/FieldFlowPhone/FieldFlowPhone.js +263 -0
  67. package/lib/commonjs/components/FieldFlowPhone/FieldFlowPhone.js.map +1 -0
  68. package/lib/commonjs/components/FieldFlowPhone/index.js +13 -0
  69. package/lib/commonjs/components/FieldFlowPhone/index.js.map +1 -0
  70. package/lib/commonjs/components/FieldFlowRating/FieldFlowRating.js +106 -0
  71. package/lib/commonjs/components/FieldFlowRating/FieldFlowRating.js.map +1 -0
  72. package/lib/commonjs/components/FieldFlowRating/index.js +13 -0
  73. package/lib/commonjs/components/FieldFlowRating/index.js.map +1 -0
  74. package/lib/commonjs/components/FieldFlowSection/FieldFlowSection.js +141 -0
  75. package/lib/commonjs/components/FieldFlowSection/FieldFlowSection.js.map +1 -0
  76. package/lib/commonjs/components/FieldFlowSection/index.js +13 -0
  77. package/lib/commonjs/components/FieldFlowSection/index.js.map +1 -0
  78. package/lib/commonjs/components/FieldFlowSegmented/FieldFlowSegmented.js +195 -0
  79. package/lib/commonjs/components/FieldFlowSegmented/FieldFlowSegmented.js.map +1 -0
  80. package/lib/commonjs/components/FieldFlowSegmented/index.js +13 -0
  81. package/lib/commonjs/components/FieldFlowSegmented/index.js.map +1 -0
  82. package/lib/commonjs/components/FieldFlowSignature/FieldFlowSignature.js +200 -0
  83. package/lib/commonjs/components/FieldFlowSignature/FieldFlowSignature.js.map +1 -0
  84. package/lib/commonjs/components/FieldFlowSignature/index.js +13 -0
  85. package/lib/commonjs/components/FieldFlowSignature/index.js.map +1 -0
  86. package/lib/commonjs/components/FieldFlowSkeleton/FieldFlowSkeleton.js +101 -0
  87. package/lib/commonjs/components/FieldFlowSkeleton/FieldFlowSkeleton.js.map +1 -0
  88. package/lib/commonjs/components/FieldFlowSkeleton/index.js +13 -0
  89. package/lib/commonjs/components/FieldFlowSkeleton/index.js.map +1 -0
  90. package/lib/commonjs/components/FieldFlowSlider/FieldFlowSlider.js +178 -0
  91. package/lib/commonjs/components/FieldFlowSlider/FieldFlowSlider.js.map +1 -0
  92. package/lib/commonjs/components/FieldFlowSlider/index.js +13 -0
  93. package/lib/commonjs/components/FieldFlowSlider/index.js.map +1 -0
  94. package/lib/commonjs/components/FieldFlowStepper/FieldFlowStepper.js +166 -0
  95. package/lib/commonjs/components/FieldFlowStepper/FieldFlowStepper.js.map +1 -0
  96. package/lib/commonjs/components/FieldFlowStepper/index.js +13 -0
  97. package/lib/commonjs/components/FieldFlowStepper/index.js.map +1 -0
  98. package/lib/commonjs/components/FieldFlowTags/FieldFlowTags.js +240 -0
  99. package/lib/commonjs/components/FieldFlowTags/FieldFlowTags.js.map +1 -0
  100. package/lib/commonjs/components/FieldFlowTags/index.js +13 -0
  101. package/lib/commonjs/components/FieldFlowTags/index.js.map +1 -0
  102. package/lib/commonjs/components/FieldFlowTypeahead/FieldFlowTypeahead.js +227 -0
  103. package/lib/commonjs/components/FieldFlowTypeahead/FieldFlowTypeahead.js.map +1 -0
  104. package/lib/commonjs/components/FieldFlowTypeahead/index.js +13 -0
  105. package/lib/commonjs/components/FieldFlowTypeahead/index.js.map +1 -0
  106. package/lib/commonjs/components/FieldFlowUpload/FieldFlowUpload.js +191 -0
  107. package/lib/commonjs/components/FieldFlowUpload/FieldFlowUpload.js.map +1 -0
  108. package/lib/commonjs/components/FieldFlowUpload/index.js +13 -0
  109. package/lib/commonjs/components/FieldFlowUpload/index.js.map +1 -0
  110. package/lib/commonjs/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js +6 -4
  111. package/lib/commonjs/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js.map +1 -1
  112. package/lib/commonjs/hooks/index.js +56 -0
  113. package/lib/commonjs/hooks/index.js.map +1 -1
  114. package/lib/commonjs/hooks/useFieldFlowArray.js +110 -0
  115. package/lib/commonjs/hooks/useFieldFlowArray.js.map +1 -0
  116. package/lib/commonjs/hooks/useFieldFlowCompleteness.js +46 -0
  117. package/lib/commonjs/hooks/useFieldFlowCompleteness.js.map +1 -0
  118. package/lib/commonjs/hooks/useFieldFlowDirtyGuard.js +53 -0
  119. package/lib/commonjs/hooks/useFieldFlowDirtyGuard.js.map +1 -0
  120. package/lib/commonjs/hooks/useFieldFlowDraft.js +168 -0
  121. package/lib/commonjs/hooks/useFieldFlowDraft.js.map +1 -0
  122. package/lib/commonjs/hooks/useFieldFlowForm.js +224 -30
  123. package/lib/commonjs/hooks/useFieldFlowForm.js.map +1 -1
  124. package/lib/commonjs/hooks/useFieldFlowSteps.js +77 -0
  125. package/lib/commonjs/hooks/useFieldFlowSteps.js.map +1 -0
  126. package/lib/commonjs/hooks/useFieldFlowSubmitQueue.js +145 -0
  127. package/lib/commonjs/hooks/useFieldFlowSubmitQueue.js.map +1 -0
  128. package/lib/commonjs/hooks/useFormIntelligence.js +130 -0
  129. package/lib/commonjs/hooks/useFormIntelligence.js.map +1 -0
  130. package/lib/commonjs/hooks/useKeyboardManager.js +15 -0
  131. package/lib/commonjs/hooks/useKeyboardManager.js.map +1 -1
  132. package/lib/commonjs/hooks/useSmartPaste.js +27 -0
  133. package/lib/commonjs/hooks/useSmartPaste.js.map +1 -0
  134. package/lib/commonjs/i18n/index.js +25 -0
  135. package/lib/commonjs/i18n/index.js.map +1 -0
  136. package/lib/commonjs/i18n/messages.js +88 -0
  137. package/lib/commonjs/i18n/messages.js.map +1 -0
  138. package/lib/commonjs/index.js +466 -0
  139. package/lib/commonjs/index.js.map +1 -1
  140. package/lib/commonjs/intelligence/formAccessibility.js +79 -0
  141. package/lib/commonjs/intelligence/formAccessibility.js.map +1 -0
  142. package/lib/commonjs/intelligence/index.js +31 -0
  143. package/lib/commonjs/intelligence/index.js.map +1 -0
  144. package/lib/commonjs/intelligence/types.js +2 -0
  145. package/lib/commonjs/intelligence/types.js.map +1 -0
  146. package/lib/commonjs/motion/index.js +20 -0
  147. package/lib/commonjs/motion/index.js.map +1 -0
  148. package/lib/commonjs/motion/useFieldMotion.js +111 -0
  149. package/lib/commonjs/motion/useFieldMotion.js.map +1 -0
  150. package/lib/commonjs/motion/useReducedMotion.js +32 -0
  151. package/lib/commonjs/motion/useReducedMotion.js.map +1 -0
  152. package/lib/commonjs/paste/index.js +19 -0
  153. package/lib/commonjs/paste/index.js.map +1 -0
  154. package/lib/commonjs/paste/smartPaste.js +113 -0
  155. package/lib/commonjs/paste/smartPaste.js.map +1 -0
  156. package/lib/commonjs/schema/FieldFlowSchemaForm.js +219 -0
  157. package/lib/commonjs/schema/FieldFlowSchemaForm.js.map +1 -0
  158. package/lib/commonjs/schema/index.js +13 -0
  159. package/lib/commonjs/schema/index.js.map +1 -0
  160. package/lib/commonjs/schema/types.js +6 -0
  161. package/lib/commonjs/schema/types.js.map +1 -0
  162. package/lib/commonjs/theme/ThemeProvider.js +65 -4
  163. package/lib/commonjs/theme/ThemeProvider.js.map +1 -1
  164. package/lib/commonjs/theme/appearance.js +93 -0
  165. package/lib/commonjs/theme/appearance.js.map +1 -0
  166. package/lib/commonjs/theme/defaultTheme.js +17 -2
  167. package/lib/commonjs/theme/defaultTheme.js.map +1 -1
  168. package/lib/commonjs/theme/index.js +32 -0
  169. package/lib/commonjs/theme/index.js.map +1 -1
  170. package/lib/commonjs/theme/presets.js +142 -0
  171. package/lib/commonjs/theme/presets.js.map +1 -0
  172. package/lib/commonjs/types/globals.d.js +2 -0
  173. package/lib/commonjs/types/globals.d.js.map +1 -0
  174. package/lib/commonjs/utils/affordance.js +151 -0
  175. package/lib/commonjs/utils/affordance.js.map +1 -0
  176. package/lib/commonjs/utils/passwordStrength.js +79 -0
  177. package/lib/commonjs/utils/passwordStrength.js.map +1 -0
  178. package/lib/commonjs/utils/phoneCountries.js +119 -0
  179. package/lib/commonjs/utils/phoneCountries.js.map +1 -0
  180. package/lib/commonjs/validation/validators.js +10 -7
  181. package/lib/commonjs/validation/validators.js.map +1 -1
  182. package/lib/module/a11y/audit.js +68 -0
  183. package/lib/module/a11y/audit.js.map +1 -0
  184. package/lib/module/a11y/index.js +4 -0
  185. package/lib/module/a11y/index.js.map +1 -0
  186. package/lib/module/adapters/index.js +4 -0
  187. package/lib/module/adapters/index.js.map +1 -0
  188. package/lib/module/adapters/reactHookForm.js +100 -0
  189. package/lib/module/adapters/reactHookForm.js.map +1 -0
  190. package/lib/module/autofill/index.js +4 -0
  191. package/lib/module/autofill/index.js.map +1 -0
  192. package/lib/module/autofill/profiles.js +193 -0
  193. package/lib/module/autofill/profiles.js.map +1 -0
  194. package/lib/module/components/FieldFlowA11yAudit/FieldFlowA11yAudit.js +94 -0
  195. package/lib/module/components/FieldFlowA11yAudit/FieldFlowA11yAudit.js.map +1 -0
  196. package/lib/module/components/FieldFlowA11yAudit/index.js +4 -0
  197. package/lib/module/components/FieldFlowA11yAudit/index.js.map +1 -0
  198. package/lib/module/components/FieldFlowAffordance/FieldFlowAffordance.js +99 -0
  199. package/lib/module/components/FieldFlowAffordance/FieldFlowAffordance.js.map +1 -0
  200. package/lib/module/components/FieldFlowAffordance/index.js +4 -0
  201. package/lib/module/components/FieldFlowAffordance/index.js.map +1 -0
  202. package/lib/module/components/FieldFlowAuthActions/FieldFlowAuthActions.js +125 -0
  203. package/lib/module/components/FieldFlowAuthActions/FieldFlowAuthActions.js.map +1 -0
  204. package/lib/module/components/FieldFlowAuthActions/index.js +4 -0
  205. package/lib/module/components/FieldFlowAuthActions/index.js.map +1 -0
  206. package/lib/module/components/FieldFlowCompleteness/FieldFlowCompleteness.js +95 -0
  207. package/lib/module/components/FieldFlowCompleteness/FieldFlowCompleteness.js.map +1 -0
  208. package/lib/module/components/FieldFlowCompleteness/index.js +4 -0
  209. package/lib/module/components/FieldFlowCompleteness/index.js.map +1 -0
  210. package/lib/module/components/FieldFlowCreditCard/FieldFlowCreditCard.js +141 -0
  211. package/lib/module/components/FieldFlowCreditCard/FieldFlowCreditCard.js.map +1 -0
  212. package/lib/module/components/FieldFlowCreditCard/index.js +4 -0
  213. package/lib/module/components/FieldFlowCreditCard/index.js.map +1 -0
  214. package/lib/module/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js +151 -0
  215. package/lib/module/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js.map +1 -0
  216. package/lib/module/components/FieldFlowDraftBanner/index.js +4 -0
  217. package/lib/module/components/FieldFlowDraftBanner/index.js.map +1 -0
  218. package/lib/module/components/FieldFlowFormHeader/FieldFlowFormHeader.js +97 -0
  219. package/lib/module/components/FieldFlowFormHeader/FieldFlowFormHeader.js.map +1 -0
  220. package/lib/module/components/FieldFlowFormHeader/index.js +4 -0
  221. package/lib/module/components/FieldFlowFormHeader/index.js.map +1 -0
  222. package/lib/module/components/FieldFlowInfoTip/FieldFlowInfoTip.js +116 -0
  223. package/lib/module/components/FieldFlowInfoTip/FieldFlowInfoTip.js.map +1 -0
  224. package/lib/module/components/FieldFlowInfoTip/index.js +4 -0
  225. package/lib/module/components/FieldFlowInfoTip/index.js.map +1 -0
  226. package/lib/module/components/FieldFlowInlineAlert/FieldFlowInlineAlert.js +137 -0
  227. package/lib/module/components/FieldFlowInlineAlert/FieldFlowInlineAlert.js.map +1 -0
  228. package/lib/module/components/FieldFlowInlineAlert/index.js +4 -0
  229. package/lib/module/components/FieldFlowInlineAlert/index.js.map +1 -0
  230. package/lib/module/components/FieldFlowInput/FieldFlowInput.js +180 -54
  231. package/lib/module/components/FieldFlowInput/FieldFlowInput.js.map +1 -1
  232. package/lib/module/components/FieldFlowInput/styles.js +60 -8
  233. package/lib/module/components/FieldFlowInput/styles.js.map +1 -1
  234. package/lib/module/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.js +131 -0
  235. package/lib/module/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.js.map +1 -0
  236. package/lib/module/components/FieldFlowKeyboardToolbar/index.js +4 -0
  237. package/lib/module/components/FieldFlowKeyboardToolbar/index.js.map +1 -0
  238. package/lib/module/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js +131 -0
  239. package/lib/module/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js.map +1 -0
  240. package/lib/module/components/FieldFlowNumberStepper/index.js +4 -0
  241. package/lib/module/components/FieldFlowNumberStepper/index.js.map +1 -0
  242. package/lib/module/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js +117 -0
  243. package/lib/module/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js.map +1 -0
  244. package/lib/module/components/FieldFlowPasswordStrength/index.js +4 -0
  245. package/lib/module/components/FieldFlowPasswordStrength/index.js.map +1 -0
  246. package/lib/module/components/FieldFlowPhone/FieldFlowPhone.js +258 -0
  247. package/lib/module/components/FieldFlowPhone/FieldFlowPhone.js.map +1 -0
  248. package/lib/module/components/FieldFlowPhone/index.js +4 -0
  249. package/lib/module/components/FieldFlowPhone/index.js.map +1 -0
  250. package/lib/module/components/FieldFlowRating/FieldFlowRating.js +101 -0
  251. package/lib/module/components/FieldFlowRating/FieldFlowRating.js.map +1 -0
  252. package/lib/module/components/FieldFlowRating/index.js +4 -0
  253. package/lib/module/components/FieldFlowRating/index.js.map +1 -0
  254. package/lib/module/components/FieldFlowSection/FieldFlowSection.js +136 -0
  255. package/lib/module/components/FieldFlowSection/FieldFlowSection.js.map +1 -0
  256. package/lib/module/components/FieldFlowSection/index.js +4 -0
  257. package/lib/module/components/FieldFlowSection/index.js.map +1 -0
  258. package/lib/module/components/FieldFlowSegmented/FieldFlowSegmented.js +190 -0
  259. package/lib/module/components/FieldFlowSegmented/FieldFlowSegmented.js.map +1 -0
  260. package/lib/module/components/FieldFlowSegmented/index.js +4 -0
  261. package/lib/module/components/FieldFlowSegmented/index.js.map +1 -0
  262. package/lib/module/components/FieldFlowSignature/FieldFlowSignature.js +195 -0
  263. package/lib/module/components/FieldFlowSignature/FieldFlowSignature.js.map +1 -0
  264. package/lib/module/components/FieldFlowSignature/index.js +4 -0
  265. package/lib/module/components/FieldFlowSignature/index.js.map +1 -0
  266. package/lib/module/components/FieldFlowSkeleton/FieldFlowSkeleton.js +96 -0
  267. package/lib/module/components/FieldFlowSkeleton/FieldFlowSkeleton.js.map +1 -0
  268. package/lib/module/components/FieldFlowSkeleton/index.js +4 -0
  269. package/lib/module/components/FieldFlowSkeleton/index.js.map +1 -0
  270. package/lib/module/components/FieldFlowSlider/FieldFlowSlider.js +173 -0
  271. package/lib/module/components/FieldFlowSlider/FieldFlowSlider.js.map +1 -0
  272. package/lib/module/components/FieldFlowSlider/index.js +4 -0
  273. package/lib/module/components/FieldFlowSlider/index.js.map +1 -0
  274. package/lib/module/components/FieldFlowStepper/FieldFlowStepper.js +161 -0
  275. package/lib/module/components/FieldFlowStepper/FieldFlowStepper.js.map +1 -0
  276. package/lib/module/components/FieldFlowStepper/index.js +4 -0
  277. package/lib/module/components/FieldFlowStepper/index.js.map +1 -0
  278. package/lib/module/components/FieldFlowTags/FieldFlowTags.js +235 -0
  279. package/lib/module/components/FieldFlowTags/FieldFlowTags.js.map +1 -0
  280. package/lib/module/components/FieldFlowTags/index.js +4 -0
  281. package/lib/module/components/FieldFlowTags/index.js.map +1 -0
  282. package/lib/module/components/FieldFlowTypeahead/FieldFlowTypeahead.js +222 -0
  283. package/lib/module/components/FieldFlowTypeahead/FieldFlowTypeahead.js.map +1 -0
  284. package/lib/module/components/FieldFlowTypeahead/index.js +4 -0
  285. package/lib/module/components/FieldFlowTypeahead/index.js.map +1 -0
  286. package/lib/module/components/FieldFlowUpload/FieldFlowUpload.js +186 -0
  287. package/lib/module/components/FieldFlowUpload/FieldFlowUpload.js.map +1 -0
  288. package/lib/module/components/FieldFlowUpload/index.js +4 -0
  289. package/lib/module/components/FieldFlowUpload/index.js.map +1 -0
  290. package/lib/module/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js +5 -3
  291. package/lib/module/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js.map +1 -1
  292. package/lib/module/hooks/index.js +8 -0
  293. package/lib/module/hooks/index.js.map +1 -1
  294. package/lib/module/hooks/useFieldFlowArray.js +106 -0
  295. package/lib/module/hooks/useFieldFlowArray.js.map +1 -0
  296. package/lib/module/hooks/useFieldFlowCompleteness.js +42 -0
  297. package/lib/module/hooks/useFieldFlowCompleteness.js.map +1 -0
  298. package/lib/module/hooks/useFieldFlowDirtyGuard.js +49 -0
  299. package/lib/module/hooks/useFieldFlowDirtyGuard.js.map +1 -0
  300. package/lib/module/hooks/useFieldFlowDraft.js +165 -0
  301. package/lib/module/hooks/useFieldFlowDraft.js.map +1 -0
  302. package/lib/module/hooks/useFieldFlowForm.js +224 -30
  303. package/lib/module/hooks/useFieldFlowForm.js.map +1 -1
  304. package/lib/module/hooks/useFieldFlowSteps.js +73 -0
  305. package/lib/module/hooks/useFieldFlowSteps.js.map +1 -0
  306. package/lib/module/hooks/useFieldFlowSubmitQueue.js +141 -0
  307. package/lib/module/hooks/useFieldFlowSubmitQueue.js.map +1 -0
  308. package/lib/module/hooks/useFormIntelligence.js +126 -0
  309. package/lib/module/hooks/useFormIntelligence.js.map +1 -0
  310. package/lib/module/hooks/useKeyboardManager.js +15 -0
  311. package/lib/module/hooks/useKeyboardManager.js.map +1 -1
  312. package/lib/module/hooks/useSmartPaste.js +23 -0
  313. package/lib/module/hooks/useSmartPaste.js.map +1 -0
  314. package/lib/module/i18n/index.js +4 -0
  315. package/lib/module/i18n/index.js.map +1 -0
  316. package/lib/module/i18n/messages.js +82 -0
  317. package/lib/module/i18n/messages.js.map +1 -0
  318. package/lib/module/index.js +46 -2
  319. package/lib/module/index.js.map +1 -1
  320. package/lib/module/intelligence/formAccessibility.js +72 -0
  321. package/lib/module/intelligence/formAccessibility.js.map +1 -0
  322. package/lib/module/intelligence/index.js +4 -0
  323. package/lib/module/intelligence/index.js.map +1 -0
  324. package/lib/module/intelligence/types.js +2 -0
  325. package/lib/module/intelligence/types.js.map +1 -0
  326. package/lib/module/motion/index.js +5 -0
  327. package/lib/module/motion/index.js.map +1 -0
  328. package/lib/module/motion/useFieldMotion.js +107 -0
  329. package/lib/module/motion/useFieldMotion.js.map +1 -0
  330. package/lib/module/motion/useReducedMotion.js +29 -0
  331. package/lib/module/motion/useReducedMotion.js.map +1 -0
  332. package/lib/module/paste/index.js +4 -0
  333. package/lib/module/paste/index.js.map +1 -0
  334. package/lib/module/paste/smartPaste.js +108 -0
  335. package/lib/module/paste/smartPaste.js.map +1 -0
  336. package/lib/module/schema/FieldFlowSchemaForm.js +214 -0
  337. package/lib/module/schema/FieldFlowSchemaForm.js.map +1 -0
  338. package/lib/module/schema/index.js +4 -0
  339. package/lib/module/schema/index.js.map +1 -0
  340. package/lib/module/schema/types.js +4 -0
  341. package/lib/module/schema/types.js.map +1 -0
  342. package/lib/module/theme/ThemeProvider.js +66 -5
  343. package/lib/module/theme/ThemeProvider.js.map +1 -1
  344. package/lib/module/theme/appearance.js +87 -0
  345. package/lib/module/theme/appearance.js.map +1 -0
  346. package/lib/module/theme/defaultTheme.js +17 -2
  347. package/lib/module/theme/defaultTheme.js.map +1 -1
  348. package/lib/module/theme/index.js +2 -0
  349. package/lib/module/theme/index.js.map +1 -1
  350. package/lib/module/theme/presets.js +138 -0
  351. package/lib/module/theme/presets.js.map +1 -0
  352. package/lib/module/types/globals.d.js +2 -0
  353. package/lib/module/types/globals.d.js.map +1 -0
  354. package/lib/module/utils/affordance.js +140 -0
  355. package/lib/module/utils/affordance.js.map +1 -0
  356. package/lib/module/utils/passwordStrength.js +74 -0
  357. package/lib/module/utils/passwordStrength.js.map +1 -0
  358. package/lib/module/utils/phoneCountries.js +113 -0
  359. package/lib/module/utils/phoneCountries.js.map +1 -0
  360. package/lib/module/validation/validators.js +10 -7
  361. package/lib/module/validation/validators.js.map +1 -1
  362. package/lib/typescript/a11y/audit.d.ts +32 -0
  363. package/lib/typescript/a11y/audit.d.ts.map +1 -0
  364. package/lib/typescript/a11y/index.d.ts +3 -0
  365. package/lib/typescript/a11y/index.d.ts.map +1 -0
  366. package/lib/typescript/adapters/index.d.ts +3 -0
  367. package/lib/typescript/adapters/index.d.ts.map +1 -0
  368. package/lib/typescript/adapters/reactHookForm.d.ts +56 -0
  369. package/lib/typescript/adapters/reactHookForm.d.ts.map +1 -0
  370. package/lib/typescript/autofill/index.d.ts +3 -0
  371. package/lib/typescript/autofill/index.d.ts.map +1 -0
  372. package/lib/typescript/autofill/profiles.d.ts +48 -0
  373. package/lib/typescript/autofill/profiles.d.ts.map +1 -0
  374. package/lib/typescript/components/FieldFlowA11yAudit/FieldFlowA11yAudit.d.ts +21 -0
  375. package/lib/typescript/components/FieldFlowA11yAudit/FieldFlowA11yAudit.d.ts.map +1 -0
  376. package/lib/typescript/components/FieldFlowA11yAudit/index.d.ts +3 -0
  377. package/lib/typescript/components/FieldFlowA11yAudit/index.d.ts.map +1 -0
  378. package/lib/typescript/components/FieldFlowAffordance/FieldFlowAffordance.d.ts +29 -0
  379. package/lib/typescript/components/FieldFlowAffordance/FieldFlowAffordance.d.ts.map +1 -0
  380. package/lib/typescript/components/FieldFlowAffordance/index.d.ts +3 -0
  381. package/lib/typescript/components/FieldFlowAffordance/index.d.ts.map +1 -0
  382. package/lib/typescript/components/FieldFlowAuthActions/FieldFlowAuthActions.d.ts +29 -0
  383. package/lib/typescript/components/FieldFlowAuthActions/FieldFlowAuthActions.d.ts.map +1 -0
  384. package/lib/typescript/components/FieldFlowAuthActions/index.d.ts +3 -0
  385. package/lib/typescript/components/FieldFlowAuthActions/index.d.ts.map +1 -0
  386. package/lib/typescript/components/FieldFlowCompleteness/FieldFlowCompleteness.d.ts +25 -0
  387. package/lib/typescript/components/FieldFlowCompleteness/FieldFlowCompleteness.d.ts.map +1 -0
  388. package/lib/typescript/components/FieldFlowCompleteness/index.d.ts +3 -0
  389. package/lib/typescript/components/FieldFlowCompleteness/index.d.ts.map +1 -0
  390. package/lib/typescript/components/FieldFlowCreditCard/FieldFlowCreditCard.d.ts +27 -0
  391. package/lib/typescript/components/FieldFlowCreditCard/FieldFlowCreditCard.d.ts.map +1 -0
  392. package/lib/typescript/components/FieldFlowCreditCard/index.d.ts +3 -0
  393. package/lib/typescript/components/FieldFlowCreditCard/index.d.ts.map +1 -0
  394. package/lib/typescript/components/FieldFlowDraftBanner/FieldFlowDraftBanner.d.ts +24 -0
  395. package/lib/typescript/components/FieldFlowDraftBanner/FieldFlowDraftBanner.d.ts.map +1 -0
  396. package/lib/typescript/components/FieldFlowDraftBanner/index.d.ts +3 -0
  397. package/lib/typescript/components/FieldFlowDraftBanner/index.d.ts.map +1 -0
  398. package/lib/typescript/components/FieldFlowFormHeader/FieldFlowFormHeader.d.ts +23 -0
  399. package/lib/typescript/components/FieldFlowFormHeader/FieldFlowFormHeader.d.ts.map +1 -0
  400. package/lib/typescript/components/FieldFlowFormHeader/index.d.ts +3 -0
  401. package/lib/typescript/components/FieldFlowFormHeader/index.d.ts.map +1 -0
  402. package/lib/typescript/components/FieldFlowInfoTip/FieldFlowInfoTip.d.ts +19 -0
  403. package/lib/typescript/components/FieldFlowInfoTip/FieldFlowInfoTip.d.ts.map +1 -0
  404. package/lib/typescript/components/FieldFlowInfoTip/index.d.ts +3 -0
  405. package/lib/typescript/components/FieldFlowInfoTip/index.d.ts.map +1 -0
  406. package/lib/typescript/components/FieldFlowInlineAlert/FieldFlowInlineAlert.d.ts +22 -0
  407. package/lib/typescript/components/FieldFlowInlineAlert/FieldFlowInlineAlert.d.ts.map +1 -0
  408. package/lib/typescript/components/FieldFlowInlineAlert/index.d.ts +3 -0
  409. package/lib/typescript/components/FieldFlowInlineAlert/index.d.ts.map +1 -0
  410. package/lib/typescript/components/FieldFlowInput/FieldFlowInput.d.ts.map +1 -1
  411. package/lib/typescript/components/FieldFlowInput/styles.d.ts +52 -1
  412. package/lib/typescript/components/FieldFlowInput/styles.d.ts.map +1 -1
  413. package/lib/typescript/components/FieldFlowInput/types.d.ts +50 -0
  414. package/lib/typescript/components/FieldFlowInput/types.d.ts.map +1 -1
  415. package/lib/typescript/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.d.ts +30 -0
  416. package/lib/typescript/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.d.ts.map +1 -0
  417. package/lib/typescript/components/FieldFlowKeyboardToolbar/index.d.ts +3 -0
  418. package/lib/typescript/components/FieldFlowKeyboardToolbar/index.d.ts.map +1 -0
  419. package/lib/typescript/components/FieldFlowNumberStepper/FieldFlowNumberStepper.d.ts +34 -0
  420. package/lib/typescript/components/FieldFlowNumberStepper/FieldFlowNumberStepper.d.ts.map +1 -0
  421. package/lib/typescript/components/FieldFlowNumberStepper/index.d.ts +3 -0
  422. package/lib/typescript/components/FieldFlowNumberStepper/index.d.ts.map +1 -0
  423. package/lib/typescript/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.d.ts +26 -0
  424. package/lib/typescript/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.d.ts.map +1 -0
  425. package/lib/typescript/components/FieldFlowPasswordStrength/index.d.ts +3 -0
  426. package/lib/typescript/components/FieldFlowPasswordStrength/index.d.ts.map +1 -0
  427. package/lib/typescript/components/FieldFlowPhone/FieldFlowPhone.d.ts +40 -0
  428. package/lib/typescript/components/FieldFlowPhone/FieldFlowPhone.d.ts.map +1 -0
  429. package/lib/typescript/components/FieldFlowPhone/index.d.ts +3 -0
  430. package/lib/typescript/components/FieldFlowPhone/index.d.ts.map +1 -0
  431. package/lib/typescript/components/FieldFlowRating/FieldFlowRating.d.ts +30 -0
  432. package/lib/typescript/components/FieldFlowRating/FieldFlowRating.d.ts.map +1 -0
  433. package/lib/typescript/components/FieldFlowRating/index.d.ts +3 -0
  434. package/lib/typescript/components/FieldFlowRating/index.d.ts.map +1 -0
  435. package/lib/typescript/components/FieldFlowSection/FieldFlowSection.d.ts +35 -0
  436. package/lib/typescript/components/FieldFlowSection/FieldFlowSection.d.ts.map +1 -0
  437. package/lib/typescript/components/FieldFlowSection/index.d.ts +3 -0
  438. package/lib/typescript/components/FieldFlowSection/index.d.ts.map +1 -0
  439. package/lib/typescript/components/FieldFlowSegmented/FieldFlowSegmented.d.ts +28 -0
  440. package/lib/typescript/components/FieldFlowSegmented/FieldFlowSegmented.d.ts.map +1 -0
  441. package/lib/typescript/components/FieldFlowSegmented/index.d.ts +3 -0
  442. package/lib/typescript/components/FieldFlowSegmented/index.d.ts.map +1 -0
  443. package/lib/typescript/components/FieldFlowSignature/FieldFlowSignature.d.ts +41 -0
  444. package/lib/typescript/components/FieldFlowSignature/FieldFlowSignature.d.ts.map +1 -0
  445. package/lib/typescript/components/FieldFlowSignature/index.d.ts +3 -0
  446. package/lib/typescript/components/FieldFlowSignature/index.d.ts.map +1 -0
  447. package/lib/typescript/components/FieldFlowSkeleton/FieldFlowSkeleton.d.ts +21 -0
  448. package/lib/typescript/components/FieldFlowSkeleton/FieldFlowSkeleton.d.ts.map +1 -0
  449. package/lib/typescript/components/FieldFlowSkeleton/index.d.ts +3 -0
  450. package/lib/typescript/components/FieldFlowSkeleton/index.d.ts.map +1 -0
  451. package/lib/typescript/components/FieldFlowSlider/FieldFlowSlider.d.ts +30 -0
  452. package/lib/typescript/components/FieldFlowSlider/FieldFlowSlider.d.ts.map +1 -0
  453. package/lib/typescript/components/FieldFlowSlider/index.d.ts +3 -0
  454. package/lib/typescript/components/FieldFlowSlider/index.d.ts.map +1 -0
  455. package/lib/typescript/components/FieldFlowStepper/FieldFlowStepper.d.ts +31 -0
  456. package/lib/typescript/components/FieldFlowStepper/FieldFlowStepper.d.ts.map +1 -0
  457. package/lib/typescript/components/FieldFlowStepper/index.d.ts +3 -0
  458. package/lib/typescript/components/FieldFlowStepper/index.d.ts.map +1 -0
  459. package/lib/typescript/components/FieldFlowTags/FieldFlowTags.d.ts +41 -0
  460. package/lib/typescript/components/FieldFlowTags/FieldFlowTags.d.ts.map +1 -0
  461. package/lib/typescript/components/FieldFlowTags/index.d.ts +3 -0
  462. package/lib/typescript/components/FieldFlowTags/index.d.ts.map +1 -0
  463. package/lib/typescript/components/FieldFlowTypeahead/FieldFlowTypeahead.d.ts +43 -0
  464. package/lib/typescript/components/FieldFlowTypeahead/FieldFlowTypeahead.d.ts.map +1 -0
  465. package/lib/typescript/components/FieldFlowTypeahead/index.d.ts +3 -0
  466. package/lib/typescript/components/FieldFlowTypeahead/index.d.ts.map +1 -0
  467. package/lib/typescript/components/FieldFlowUpload/FieldFlowUpload.d.ts +52 -0
  468. package/lib/typescript/components/FieldFlowUpload/FieldFlowUpload.d.ts.map +1 -0
  469. package/lib/typescript/components/FieldFlowUpload/index.d.ts +3 -0
  470. package/lib/typescript/components/FieldFlowUpload/index.d.ts.map +1 -0
  471. package/lib/typescript/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.d.ts +3 -2
  472. package/lib/typescript/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.d.ts.map +1 -1
  473. package/lib/typescript/hooks/index.d.ts +17 -1
  474. package/lib/typescript/hooks/index.d.ts.map +1 -1
  475. package/lib/typescript/hooks/useFieldFlowArray.d.ts +54 -0
  476. package/lib/typescript/hooks/useFieldFlowArray.d.ts.map +1 -0
  477. package/lib/typescript/hooks/useFieldFlowCompleteness.d.ts +28 -0
  478. package/lib/typescript/hooks/useFieldFlowCompleteness.d.ts.map +1 -0
  479. package/lib/typescript/hooks/useFieldFlowDirtyGuard.d.ts +26 -0
  480. package/lib/typescript/hooks/useFieldFlowDirtyGuard.d.ts.map +1 -0
  481. package/lib/typescript/hooks/useFieldFlowDraft.d.ts +64 -0
  482. package/lib/typescript/hooks/useFieldFlowDraft.d.ts.map +1 -0
  483. package/lib/typescript/hooks/useFieldFlowForm.d.ts +80 -2
  484. package/lib/typescript/hooks/useFieldFlowForm.d.ts.map +1 -1
  485. package/lib/typescript/hooks/useFieldFlowSteps.d.ts +42 -0
  486. package/lib/typescript/hooks/useFieldFlowSteps.d.ts.map +1 -0
  487. package/lib/typescript/hooks/useFieldFlowSubmitQueue.d.ts +45 -0
  488. package/lib/typescript/hooks/useFieldFlowSubmitQueue.d.ts.map +1 -0
  489. package/lib/typescript/hooks/useFormIntelligence.d.ts +23 -0
  490. package/lib/typescript/hooks/useFormIntelligence.d.ts.map +1 -0
  491. package/lib/typescript/hooks/useKeyboardManager.d.ts +6 -0
  492. package/lib/typescript/hooks/useKeyboardManager.d.ts.map +1 -1
  493. package/lib/typescript/hooks/useSmartPaste.d.ts +14 -0
  494. package/lib/typescript/hooks/useSmartPaste.d.ts.map +1 -0
  495. package/lib/typescript/i18n/index.d.ts +3 -0
  496. package/lib/typescript/i18n/index.d.ts.map +1 -0
  497. package/lib/typescript/i18n/messages.d.ts +16 -0
  498. package/lib/typescript/i18n/messages.d.ts.map +1 -0
  499. package/lib/typescript/index.d.ts +73 -5
  500. package/lib/typescript/index.d.ts.map +1 -1
  501. package/lib/typescript/intelligence/formAccessibility.d.ts +21 -0
  502. package/lib/typescript/intelligence/formAccessibility.d.ts.map +1 -0
  503. package/lib/typescript/intelligence/index.d.ts +4 -0
  504. package/lib/typescript/intelligence/index.d.ts.map +1 -0
  505. package/lib/typescript/intelligence/types.d.ts +36 -0
  506. package/lib/typescript/intelligence/types.d.ts.map +1 -0
  507. package/lib/typescript/motion/index.d.ts +4 -0
  508. package/lib/typescript/motion/index.d.ts.map +1 -0
  509. package/lib/typescript/motion/useFieldMotion.d.ts +31 -0
  510. package/lib/typescript/motion/useFieldMotion.d.ts.map +1 -0
  511. package/lib/typescript/motion/useReducedMotion.d.ts +5 -0
  512. package/lib/typescript/motion/useReducedMotion.d.ts.map +1 -0
  513. package/lib/typescript/paste/index.d.ts +3 -0
  514. package/lib/typescript/paste/index.d.ts.map +1 -0
  515. package/lib/typescript/paste/smartPaste.d.ts +32 -0
  516. package/lib/typescript/paste/smartPaste.d.ts.map +1 -0
  517. package/lib/typescript/schema/FieldFlowSchemaForm.d.ts +28 -0
  518. package/lib/typescript/schema/FieldFlowSchemaForm.d.ts.map +1 -0
  519. package/lib/typescript/schema/index.d.ts +4 -0
  520. package/lib/typescript/schema/index.d.ts.map +1 -0
  521. package/lib/typescript/schema/types.d.ts +43 -0
  522. package/lib/typescript/schema/types.d.ts.map +1 -0
  523. package/lib/typescript/theme/ThemeProvider.d.ts +18 -4
  524. package/lib/typescript/theme/ThemeProvider.d.ts.map +1 -1
  525. package/lib/typescript/theme/appearance.d.ts +19 -0
  526. package/lib/typescript/theme/appearance.d.ts.map +1 -0
  527. package/lib/typescript/theme/defaultTheme.d.ts.map +1 -1
  528. package/lib/typescript/theme/index.d.ts +3 -0
  529. package/lib/typescript/theme/index.d.ts.map +1 -1
  530. package/lib/typescript/theme/presets.d.ts +134 -0
  531. package/lib/typescript/theme/presets.d.ts.map +1 -0
  532. package/lib/typescript/types/index.d.ts +26 -0
  533. package/lib/typescript/types/index.d.ts.map +1 -1
  534. package/lib/typescript/utils/affordance.d.ts +36 -0
  535. package/lib/typescript/utils/affordance.d.ts.map +1 -0
  536. package/lib/typescript/utils/passwordStrength.d.ts +26 -0
  537. package/lib/typescript/utils/passwordStrength.d.ts.map +1 -0
  538. package/lib/typescript/utils/phoneCountries.d.ts +12 -0
  539. package/lib/typescript/utils/phoneCountries.d.ts.map +1 -0
  540. package/lib/typescript/validation/validators.d.ts +3 -1
  541. package/lib/typescript/validation/validators.d.ts.map +1 -1
  542. package/package.json +19 -2
  543. package/src/a11y/audit.ts +99 -0
  544. package/src/a11y/index.ts +7 -0
  545. package/src/adapters/index.ts +9 -0
  546. package/src/adapters/reactHookForm.tsx +152 -0
  547. package/src/autofill/index.ts +10 -0
  548. package/src/autofill/profiles.ts +224 -0
  549. package/src/components/FieldFlowA11yAudit/FieldFlowA11yAudit.tsx +112 -0
  550. package/src/components/FieldFlowA11yAudit/index.ts +2 -0
  551. package/src/components/FieldFlowAffordance/FieldFlowAffordance.tsx +143 -0
  552. package/src/components/FieldFlowAffordance/index.ts +2 -0
  553. package/src/components/FieldFlowAuthActions/FieldFlowAuthActions.tsx +146 -0
  554. package/src/components/FieldFlowAuthActions/index.ts +6 -0
  555. package/src/components/FieldFlowCompleteness/FieldFlowCompleteness.tsx +109 -0
  556. package/src/components/FieldFlowCompleteness/index.ts +2 -0
  557. package/src/components/FieldFlowCreditCard/FieldFlowCreditCard.tsx +152 -0
  558. package/src/components/FieldFlowCreditCard/index.ts +2 -0
  559. package/src/components/FieldFlowDraftBanner/FieldFlowDraftBanner.tsx +169 -0
  560. package/src/components/FieldFlowDraftBanner/index.ts +2 -0
  561. package/src/components/FieldFlowFormHeader/FieldFlowFormHeader.tsx +106 -0
  562. package/src/components/FieldFlowFormHeader/index.ts +2 -0
  563. package/src/components/FieldFlowInfoTip/FieldFlowInfoTip.tsx +120 -0
  564. package/src/components/FieldFlowInfoTip/index.ts +2 -0
  565. package/src/components/FieldFlowInlineAlert/FieldFlowInlineAlert.tsx +134 -0
  566. package/src/components/FieldFlowInlineAlert/index.ts +2 -0
  567. package/src/components/FieldFlowInput/FieldFlowInput.tsx +240 -61
  568. package/src/components/FieldFlowInput/styles.ts +69 -11
  569. package/src/components/FieldFlowInput/types.ts +54 -0
  570. package/src/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.tsx +150 -0
  571. package/src/components/FieldFlowKeyboardToolbar/index.ts +5 -0
  572. package/src/components/FieldFlowNumberStepper/FieldFlowNumberStepper.tsx +156 -0
  573. package/src/components/FieldFlowNumberStepper/index.ts +2 -0
  574. package/src/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.tsx +148 -0
  575. package/src/components/FieldFlowPasswordStrength/index.ts +2 -0
  576. package/src/components/FieldFlowPhone/FieldFlowPhone.tsx +298 -0
  577. package/src/components/FieldFlowPhone/index.ts +2 -0
  578. package/src/components/FieldFlowRating/FieldFlowRating.tsx +121 -0
  579. package/src/components/FieldFlowRating/index.ts +2 -0
  580. package/src/components/FieldFlowSection/FieldFlowSection.tsx +176 -0
  581. package/src/components/FieldFlowSection/index.ts +2 -0
  582. package/src/components/FieldFlowSegmented/FieldFlowSegmented.tsx +248 -0
  583. package/src/components/FieldFlowSegmented/index.ts +2 -0
  584. package/src/components/FieldFlowSignature/FieldFlowSignature.tsx +241 -0
  585. package/src/components/FieldFlowSignature/index.ts +7 -0
  586. package/src/components/FieldFlowSkeleton/FieldFlowSkeleton.tsx +105 -0
  587. package/src/components/FieldFlowSkeleton/index.ts +2 -0
  588. package/src/components/FieldFlowSlider/FieldFlowSlider.tsx +190 -0
  589. package/src/components/FieldFlowSlider/index.ts +2 -0
  590. package/src/components/FieldFlowStepper/FieldFlowStepper.tsx +190 -0
  591. package/src/components/FieldFlowStepper/index.ts +2 -0
  592. package/src/components/FieldFlowTags/FieldFlowTags.tsx +319 -0
  593. package/src/components/FieldFlowTags/index.ts +2 -0
  594. package/src/components/FieldFlowTypeahead/FieldFlowTypeahead.tsx +261 -0
  595. package/src/components/FieldFlowTypeahead/index.ts +2 -0
  596. package/src/components/FieldFlowUpload/FieldFlowUpload.tsx +226 -0
  597. package/src/components/FieldFlowUpload/index.ts +6 -0
  598. package/src/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.tsx +8 -4
  599. package/src/hooks/index.ts +48 -0
  600. package/src/hooks/useFieldFlowArray.ts +153 -0
  601. package/src/hooks/useFieldFlowCompleteness.ts +69 -0
  602. package/src/hooks/useFieldFlowDirtyGuard.ts +70 -0
  603. package/src/hooks/useFieldFlowDraft.ts +221 -0
  604. package/src/hooks/useFieldFlowForm.ts +357 -28
  605. package/src/hooks/useFieldFlowSteps.ts +130 -0
  606. package/src/hooks/useFieldFlowSubmitQueue.ts +206 -0
  607. package/src/hooks/useFormIntelligence.ts +207 -0
  608. package/src/hooks/useKeyboardManager.ts +26 -0
  609. package/src/hooks/useSmartPaste.ts +33 -0
  610. package/src/i18n/index.ts +6 -0
  611. package/src/i18n/messages.ts +101 -0
  612. package/src/index.ts +251 -3
  613. package/src/intelligence/formAccessibility.ts +87 -0
  614. package/src/intelligence/index.ts +12 -0
  615. package/src/intelligence/types.ts +34 -0
  616. package/src/motion/index.ts +3 -0
  617. package/src/motion/useFieldMotion.ts +120 -0
  618. package/src/motion/useReducedMotion.ts +31 -0
  619. package/src/paste/index.ts +7 -0
  620. package/src/paste/smartPaste.ts +132 -0
  621. package/src/schema/FieldFlowSchemaForm.tsx +274 -0
  622. package/src/schema/index.ts +8 -0
  623. package/src/schema/types.ts +63 -0
  624. package/src/theme/ThemeProvider.tsx +96 -7
  625. package/src/theme/appearance.ts +105 -0
  626. package/src/theme/defaultTheme.ts +11 -0
  627. package/src/theme/index.ts +3 -0
  628. package/src/theme/presets.ts +120 -0
  629. package/src/types/globals.d.ts +2 -0
  630. package/src/types/index.ts +28 -0
  631. package/src/utils/affordance.ts +138 -0
  632. package/src/utils/passwordStrength.ts +109 -0
  633. package/src/utils/phoneCountries.ts +44 -0
  634. package/src/validation/validators.ts +17 -7
@@ -1,6 +1,17 @@
1
1
  import { useCallback, useMemo, useRef, useState } from 'react';
2
+ import type { TextInput } from 'react-native';
2
3
  import type { FieldFlowRules, ValidationResult } from '../types';
3
4
  import { runRules } from '../validation/validators';
5
+ import {
6
+ getValidationMessages,
7
+ type FieldFlowLocale,
8
+ type FieldFlowValidationMessages,
9
+ } from '../i18n/messages';
10
+ import {
11
+ useFormIntelligence,
12
+ type UseFormIntelligenceResult,
13
+ } from './useFormIntelligence';
14
+ import type { FormIntelligenceOptions } from '../intelligence/types';
4
15
 
5
16
  export type FieldFlowFormRules<T extends Record<string, string>> = {
6
17
  [K in keyof T]?: FieldFlowRules;
@@ -23,6 +34,27 @@ export interface CrossFieldRule<T extends Record<string, string>> {
23
34
  validate: (values: T) => ValidationResult;
24
35
  }
25
36
 
37
+ export type FieldConditionFn<T extends Record<string, string>> = (values: T) => boolean;
38
+
39
+ export interface FieldConditionConfig<T extends Record<string, string>> {
40
+ /** Hide the field when false. Hidden fields are skipped during validation. */
41
+ showWhen?: FieldConditionFn<T>;
42
+ /** Dynamically require the field. */
43
+ requiredWhen?: FieldConditionFn<T>;
44
+ /** Dynamically disable the field (caller should pass `disabled` to the input). */
45
+ disabledWhen?: FieldConditionFn<T>;
46
+ }
47
+
48
+ export type FieldConditions<T extends Record<string, string>> = {
49
+ [K in keyof T]?: FieldConditionConfig<T>;
50
+ };
51
+
52
+ export interface FieldVisibilityState {
53
+ visible: boolean;
54
+ required: boolean;
55
+ disabled: boolean;
56
+ }
57
+
26
58
  export interface UseFieldFlowFormOptions<T extends Record<string, string>> {
27
59
  initialValues: T;
28
60
  rules?: FieldFlowFormRules<T>;
@@ -39,6 +71,10 @@ export interface UseFieldFlowFormOptions<T extends Record<string, string>> {
39
71
  * }]
40
72
  */
41
73
  crossFieldRules?: CrossFieldRule<T>[];
74
+ /**
75
+ * Conditional visibility / required / disabled rules evaluated against live values.
76
+ */
77
+ conditions?: FieldConditions<T>;
42
78
  /**
43
79
  * Whole-form validator (e.g. from `zodFormValidate(schema)`).
44
80
  * Merged after sync + cross-field rules; field keys map to error messages.
@@ -53,6 +89,20 @@ export interface UseFieldFlowFormOptions<T extends Record<string, string>> {
53
89
  asyncValidators?: AsyncFieldValidators<T>;
54
90
  /** Debounce for async field validators on change. Default: 400ms. */
55
91
  asyncDebounceMs?: number;
92
+ /**
93
+ * Enable form intelligence (friction analytics + a11y autofocus/announce on failed submit).
94
+ * Pass `true` for defaults, or an options object.
95
+ */
96
+ intelligence?: boolean | FormIntelligenceOptions;
97
+ /** Preferred field order for focus-first-error / announcements. */
98
+ fieldOrder?: (keyof T)[];
99
+ /**
100
+ * Locale for default validation messages (`en` | `es` | `fr` | `de` | `pt` | `ar`).
101
+ * Ignored for rule keys that already pass a custom string message.
102
+ */
103
+ locale?: FieldFlowLocale;
104
+ /** Full message catalog override (wins over `locale`). */
105
+ messages?: FieldFlowValidationMessages;
56
106
  /** Called only when every field passes sync + cross-field + form + async validation. */
57
107
  onSubmit?: (values: T) => void | Promise<void>;
58
108
  }
@@ -67,30 +117,77 @@ export interface UseFieldFlowFormResult<T extends Record<string, string>> {
67
117
  isValid: boolean;
68
118
  /** True while any async field validator is in flight. */
69
119
  isValidating: boolean;
120
+ /** True when current values differ from `initialValues`. */
121
+ isDirty: boolean;
122
+ /** Per-field dirty flags. */
123
+ dirtyFields: Partial<Record<keyof T, boolean>>;
70
124
  setValue: (field: keyof T, value: string) => void;
125
+ setValues: (values: T | ((prev: T) => T)) => void;
126
+ /** Merge server / API errors (e.g. 422 field map). Touches those fields. */
127
+ setErrors: (errors: Partial<Record<keyof T, string | undefined>>) => void;
128
+ /** Set a single field error from the server. */
129
+ setFieldError: (field: keyof T, message: string | undefined) => void;
130
+ /** Clear one field or all errors. */
131
+ clearErrors: (field?: keyof T) => void;
71
132
  handleChange: (field: keyof T) => (value: string) => void;
72
133
  handleBlur: (field: keyof T) => () => void;
134
+ handleFocus: (field: keyof T) => () => void;
73
135
  validateField: (field: keyof T) => Promise<boolean>;
136
+ /** Validate a subset of fields (wizard steps). */
137
+ validateFields: (fields: (keyof T)[]) => Promise<boolean>;
74
138
  validateAll: () => Promise<boolean>;
75
139
  submit: () => Promise<void>;
76
140
  reset: () => void;
141
+ /** Evaluate conditional rules for a field against current values. */
142
+ getFieldState: (field: keyof T) => FieldVisibilityState;
143
+ isVisible: (field: keyof T) => boolean;
144
+ isRequired: (field: keyof T) => boolean;
145
+ isDisabled: (field: keyof T) => boolean;
146
+ /**
147
+ * Convenience props to spread onto a FieldFlow input for a given field.
148
+ * Respects visibility (returns `null` when hidden so you can short-circuit render).
149
+ */
150
+ getInputProps: (
151
+ field: keyof T,
152
+ ) => null | {
153
+ value: string;
154
+ onChangeText: (value: string) => void;
155
+ onBlur: () => void;
156
+ onFocus: () => void;
157
+ errorText: string | undefined;
158
+ required: boolean;
159
+ disabled: boolean;
160
+ };
161
+ /** Present when `intelligence` is enabled. */
162
+ intelligence: UseFormIntelligenceResult<Extract<keyof T, string>> | null;
163
+ /** Register a TextInput ref for a11y autofocus (intelligence). */
164
+ registerFieldRef: (
165
+ field: keyof T,
166
+ ref: { current: TextInput | null } | TextInput | null,
167
+ ) => void;
77
168
  }
78
169
 
79
170
  /**
80
171
  * Drop-in form state manager for a set of FieldFlow inputs. Handles values,
81
- * per-field + cross-field + async validation, touched-state, and submission.
172
+ * per-field + cross-field + conditional + async validation, touched-state,
173
+ * optional form intelligence, and submission.
82
174
  */
83
175
  export function useFieldFlowForm<T extends Record<string, string>>({
84
176
  initialValues,
85
177
  rules,
86
178
  crossFieldRules,
179
+ conditions,
87
180
  formValidate,
88
181
  asyncValidators,
89
182
  asyncDebounceMs = 400,
183
+ intelligence: intelligenceOpt,
184
+ fieldOrder,
185
+ locale = 'en',
186
+ messages: messagesOverride,
90
187
  onSubmit,
91
188
  }: UseFieldFlowFormOptions<T>): UseFieldFlowFormResult<T> {
92
- const [values, setValues] = useState<T>(initialValues);
93
- const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});
189
+ const [values, setValuesState] = useState<T>(initialValues);
190
+ const [errors, setErrorsState] = useState<Partial<Record<keyof T, string>>>({});
94
191
  const [touched, setTouched] = useState<Partial<Record<keyof T, boolean>>>({});
95
192
  const [validating, setValidating] = useState<Partial<Record<keyof T, boolean>>>({});
96
193
  const [isSubmitting, setIsSubmitting] = useState(false);
@@ -99,26 +196,76 @@ export function useFieldFlowForm<T extends Record<string, string>>({
99
196
  valuesRef.current = values;
100
197
  const debounceTimers = useRef<Partial<Record<keyof T, ReturnType<typeof setTimeout>>>>({});
101
198
  const asyncGen = useRef(0);
199
+ const messages = messagesOverride ?? getValidationMessages(locale);
200
+
201
+ const intelligenceEnabled = Boolean(intelligenceOpt);
202
+ const intelligenceOptions: FormIntelligenceOptions =
203
+ typeof intelligenceOpt === 'object' && intelligenceOpt ? intelligenceOpt : {};
204
+ const intelligence = useFormIntelligence<Extract<keyof T, string>>(
205
+ intelligenceEnabled ? intelligenceOptions : { focusFirstError: false, announceErrors: false },
206
+ );
207
+
208
+ const evalFieldState = useCallback(
209
+ (field: keyof T, allValues: T): FieldVisibilityState => {
210
+ const cfg = conditions?.[field];
211
+ const visible = cfg?.showWhen ? cfg.showWhen(allValues) : true;
212
+ const required = cfg?.requiredWhen ? cfg.requiredWhen(allValues) : Boolean(rules?.[field]?.required);
213
+ const disabled = cfg?.disabledWhen ? cfg.disabledWhen(allValues) : false;
214
+ return { visible, required, disabled };
215
+ },
216
+ [conditions, rules],
217
+ );
218
+
219
+ const getFieldState = useCallback(
220
+ (field: keyof T) => evalFieldState(field, valuesRef.current),
221
+ [evalFieldState],
222
+ );
223
+
224
+ const isVisible = useCallback((field: keyof T) => getFieldState(field).visible, [getFieldState]);
225
+ const isRequired = useCallback((field: keyof T) => getFieldState(field).required, [getFieldState]);
226
+ const isDisabled = useCallback((field: keyof T) => getFieldState(field).disabled, [getFieldState]);
227
+
228
+ const effectiveRulesFor = useCallback(
229
+ (field: keyof T, allValues: T): FieldFlowRules | undefined => {
230
+ const base = { ...(rules?.[field] ?? {}) };
231
+ const state = evalFieldState(field, allValues);
232
+ if (state.required && !base.required) {
233
+ base.required = true;
234
+ }
235
+ if (!state.required && base.required && conditions?.[field]?.requiredWhen) {
236
+ // Dynamically optional — strip required when condition is false
237
+ delete base.required;
238
+ }
239
+ return Object.keys(base).length ? base : undefined;
240
+ },
241
+ [rules, evalFieldState, conditions],
242
+ );
102
243
 
103
244
  const syncErrorFor = useCallback(
104
245
  (field: keyof T, fieldValue: string, allValues: T): string | undefined => {
105
- const result = runRules(fieldValue, rules?.[field]);
246
+ const state = evalFieldState(field, allValues);
247
+ if (!state.visible) return undefined;
248
+
249
+ const result = runRules(fieldValue, effectiveRulesFor(field, allValues), messages);
106
250
  if (!result.valid) return result.message;
107
251
 
108
252
  if (crossFieldRules) {
109
253
  for (const rule of crossFieldRules) {
110
254
  if (rule.target !== field) continue;
255
+ const targetVisible = evalFieldState(rule.target, allValues).visible;
256
+ if (!targetVisible) continue;
111
257
  const cross = rule.validate(allValues);
112
- if (!cross.valid) return cross.message ?? 'Invalid';
258
+ if (!cross.valid) return cross.message ?? messages.invalid;
113
259
  }
114
260
  }
115
261
  return undefined;
116
262
  },
117
- [rules, crossFieldRules],
263
+ [crossFieldRules, effectiveRulesFor, evalFieldState, messages],
118
264
  );
119
265
 
120
266
  const runAsyncForField = useCallback(
121
267
  async (field: keyof T, fieldValue: string, allValues: T): Promise<string | undefined> => {
268
+ if (!evalFieldState(field, allValues).visible) return undefined;
122
269
  const validator = asyncValidators?.[field];
123
270
  if (!validator) return undefined;
124
271
  setValidating(prev => ({ ...prev, [field]: true }));
@@ -129,7 +276,7 @@ export function useFieldFlowForm<T extends Record<string, string>>({
129
276
  setValidating(prev => ({ ...prev, [field]: false }));
130
277
  }
131
278
  },
132
- [asyncValidators],
279
+ [asyncValidators, evalFieldState],
133
280
  );
134
281
 
135
282
  const scheduleAsync = useCallback(
@@ -142,7 +289,7 @@ export function useFieldFlowForm<T extends Record<string, string>>({
142
289
  const gen = ++asyncGen.current;
143
290
  const message = await runAsyncForField(field, fieldValue, allValues);
144
291
  if (gen !== asyncGen.current) return;
145
- setErrors(prev => {
292
+ setErrorsState(prev => {
146
293
  const syncMsg = syncErrorFor(field, fieldValue, allValues);
147
294
  if (syncMsg) return { ...prev, [field]: syncMsg };
148
295
  return { ...prev, [field]: message };
@@ -155,17 +302,34 @@ export function useFieldFlowForm<T extends Record<string, string>>({
155
302
  const validateField = useCallback(
156
303
  async (field: keyof T): Promise<boolean> => {
157
304
  const allValues = valuesRef.current;
305
+ if (!evalFieldState(field, allValues).visible) {
306
+ setErrorsState(prev => ({ ...prev, [field]: undefined }));
307
+ return true;
308
+ }
158
309
  const fieldValue = allValues[field] ?? '';
159
310
  const syncError = syncErrorFor(field, fieldValue, allValues);
160
311
  if (syncError) {
161
- setErrors(prev => ({ ...prev, [field]: syncError }));
312
+ setErrorsState(prev => ({ ...prev, [field]: syncError }));
162
313
  return false;
163
314
  }
164
315
  const asyncError = await runAsyncForField(field, fieldValue, allValues);
165
- setErrors(prev => ({ ...prev, [field]: asyncError }));
316
+ setErrorsState(prev => ({ ...prev, [field]: asyncError }));
166
317
  return !asyncError;
167
318
  },
168
- [runAsyncForField, syncErrorFor],
319
+ [evalFieldState, runAsyncForField, syncErrorFor],
320
+ );
321
+
322
+ const validateFields = useCallback(
323
+ async (fields: (keyof T)[]): Promise<boolean> => {
324
+ const results = await Promise.all(fields.map(f => validateField(f)));
325
+ setTouched(prev => {
326
+ const next = { ...prev };
327
+ for (const f of fields) next[f] = true;
328
+ return next;
329
+ });
330
+ return results.every(Boolean);
331
+ },
332
+ [validateField],
169
333
  );
170
334
 
171
335
  const validateAll = useCallback(async (): Promise<boolean> => {
@@ -176,32 +340,37 @@ export function useFieldFlowForm<T extends Record<string, string>>({
176
340
  ...(rules ? (Object.keys(rules) as (keyof T)[]) : []),
177
341
  ...(crossFieldRules?.map(r => r.target) ?? []),
178
342
  ...(asyncValidators ? (Object.keys(asyncValidators) as (keyof T)[]) : []),
343
+ ...(conditions ? (Object.keys(conditions) as (keyof T)[]) : []),
179
344
  ]);
180
345
 
181
346
  for (const key of keys) {
347
+ if (!evalFieldState(key, allValues).visible) continue;
182
348
  const syncError = syncErrorFor(key, allValues[key] ?? '', allValues);
183
349
  if (syncError) nextErrors[key] = syncError;
184
350
  }
185
351
 
186
352
  if (crossFieldRules) {
187
353
  for (const rule of crossFieldRules) {
354
+ if (!evalFieldState(rule.target, allValues).visible) continue;
188
355
  if (nextErrors[rule.target]) continue;
189
356
  const result = rule.validate(allValues);
190
- if (!result.valid) nextErrors[rule.target] = result.message ?? 'Invalid';
357
+ if (!result.valid) nextErrors[rule.target] = result.message ?? messages.invalid;
191
358
  }
192
359
  }
193
360
 
194
361
  if (formValidate) {
195
362
  const formErrors = await formValidate(allValues);
196
363
  for (const key of Object.keys(formErrors) as (keyof T)[]) {
197
- const msg = formErrors[key];
198
- if (msg && !nextErrors[key]) nextErrors[key] = msg;
364
+ if (!evalFieldState(key, allValues).visible) continue;
365
+ const formMsg = formErrors[key];
366
+ if (formMsg && !nextErrors[key]) nextErrors[key] = formMsg;
199
367
  }
200
368
  }
201
369
 
202
370
  if (asyncValidators) {
203
371
  await Promise.all(
204
372
  (Object.keys(asyncValidators) as (keyof T)[]).map(async key => {
373
+ if (!evalFieldState(key, allValues).visible) return;
205
374
  if (nextErrors[key]) return;
206
375
  const asyncError = await runAsyncForField(key, allValues[key] ?? '', allValues);
207
376
  if (asyncError) nextErrors[key] = asyncError;
@@ -209,58 +378,162 @@ export function useFieldFlowForm<T extends Record<string, string>>({
209
378
  );
210
379
  }
211
380
 
212
- setErrors(nextErrors);
381
+ setErrorsState(nextErrors);
382
+ setTouched(prev => {
383
+ const next = { ...prev };
384
+ for (const key of keys) {
385
+ if (evalFieldState(key, allValues).visible) next[key] = true;
386
+ }
387
+ return next;
388
+ });
389
+
390
+ const valid = Object.values(nextErrors).every(e => !e);
391
+ if (intelligenceEnabled) {
392
+ intelligence.onValidationResult(
393
+ valid,
394
+ nextErrors as Partial<Record<Extract<keyof T, string>, string | undefined>>,
395
+ fieldOrder as Extract<keyof T, string>[] | undefined,
396
+ );
397
+ }
398
+ return valid;
399
+ }, [
400
+ rules,
401
+ crossFieldRules,
402
+ formValidate,
403
+ asyncValidators,
404
+ conditions,
405
+ evalFieldState,
406
+ syncErrorFor,
407
+ runAsyncForField,
408
+ intelligenceEnabled,
409
+ intelligence,
410
+ fieldOrder,
411
+ messages,
412
+ ]);
413
+
414
+ const setErrors = useCallback((next: Partial<Record<keyof T, string | undefined>>) => {
415
+ setErrorsState(prev => {
416
+ const merged = { ...prev };
417
+ for (const key of Object.keys(next) as (keyof T)[]) {
418
+ const msg = next[key];
419
+ if (msg == null || msg === '') delete merged[key];
420
+ else merged[key] = msg;
421
+ }
422
+ return merged;
423
+ });
213
424
  setTouched(prev => {
425
+ const merged = { ...prev };
426
+ for (const key of Object.keys(next) as (keyof T)[]) {
427
+ if (next[key]) merged[key] = true;
428
+ }
429
+ return merged;
430
+ });
431
+ }, []);
432
+
433
+ const setFieldError = useCallback((field: keyof T, message: string | undefined) => {
434
+ setErrors({ [field]: message } as Partial<Record<keyof T, string | undefined>>);
435
+ }, [setErrors]);
436
+
437
+ const clearErrors = useCallback((field?: keyof T) => {
438
+ if (field == null) {
439
+ setErrorsState({});
440
+ return;
441
+ }
442
+ setErrorsState(prev => {
443
+ if (!prev[field]) return prev;
214
444
  const next = { ...prev };
215
- for (const key of keys) next[key] = true;
445
+ delete next[field];
216
446
  return next;
217
447
  });
218
- return Object.values(nextErrors).every(e => !e);
219
- }, [rules, crossFieldRules, formValidate, asyncValidators, syncErrorFor, runAsyncForField]);
448
+ }, []);
220
449
 
221
450
  const setValue = useCallback((field: keyof T, value: string) => {
222
- setValues(prev => {
451
+ setValuesState(prev => {
223
452
  const next = { ...prev, [field]: value };
224
453
  valuesRef.current = next;
225
454
  return next;
226
455
  });
227
456
  }, []);
228
457
 
458
+ const setValues = useCallback((next: T | ((prev: T) => T)) => {
459
+ setValuesState(prev => {
460
+ const resolved = typeof next === 'function' ? (next as (p: T) => T)(prev) : next;
461
+ valuesRef.current = resolved;
462
+ return resolved;
463
+ });
464
+ }, []);
465
+
229
466
  const handleChange = useCallback(
230
467
  (field: keyof T) => (value: string) => {
231
468
  setValue(field, value);
469
+ if (intelligenceEnabled) {
470
+ intelligence.trackChange(field as Extract<keyof T, string>);
471
+ }
232
472
  const allValues = { ...valuesRef.current, [field]: value };
233
473
 
234
474
  if (touched[field]) {
235
475
  const syncError = syncErrorFor(field, value, allValues);
236
- setErrors(prev => ({ ...prev, [field]: syncError }));
476
+ setErrorsState(prev => ({ ...prev, [field]: syncError }));
237
477
  if (!syncError) scheduleAsync(field, value, allValues);
238
478
  }
239
479
 
480
+ // Clear errors for fields that just became hidden
481
+ if (conditions) {
482
+ for (const key of Object.keys(conditions) as (keyof T)[]) {
483
+ if (!evalFieldState(key, allValues).visible) {
484
+ setErrorsState(prev => (prev[key] ? { ...prev, [key]: undefined } : prev));
485
+ }
486
+ }
487
+ }
488
+
240
489
  if (crossFieldRules) {
241
490
  for (const rule of crossFieldRules) {
242
491
  if (rule.target === field) continue;
243
492
  if (rule.deps && !rule.deps.includes(field)) continue;
244
493
  if (!touched[rule.target] && !touched[field]) continue;
494
+ if (!evalFieldState(rule.target, allValues).visible) continue;
245
495
  const result = rule.validate(allValues);
246
- setErrors(prev => ({
496
+ setErrorsState(prev => ({
247
497
  ...prev,
248
498
  [rule.target]: result.valid
249
499
  ? syncErrorFor(rule.target, allValues[rule.target] ?? '', allValues)
250
- : result.message ?? 'Invalid',
500
+ : result.message ?? messages.invalid,
251
501
  }));
252
502
  }
253
503
  }
254
504
  },
255
- [setValue, touched, syncErrorFor, scheduleAsync, crossFieldRules],
505
+ [
506
+ setValue,
507
+ touched,
508
+ syncErrorFor,
509
+ scheduleAsync,
510
+ crossFieldRules,
511
+ conditions,
512
+ evalFieldState,
513
+ intelligenceEnabled,
514
+ intelligence,
515
+ messages,
516
+ ],
256
517
  );
257
518
 
258
519
  const handleBlur = useCallback(
259
520
  (field: keyof T) => () => {
521
+ if (intelligenceEnabled) {
522
+ intelligence.trackBlur(field as Extract<keyof T, string>);
523
+ }
260
524
  setTouched(prev => ({ ...prev, [field]: true }));
261
525
  void validateField(field);
262
526
  },
263
- [validateField],
527
+ [validateField, intelligenceEnabled, intelligence],
528
+ );
529
+
530
+ const handleFocus = useCallback(
531
+ (field: keyof T) => () => {
532
+ if (intelligenceEnabled) {
533
+ intelligence.trackFocus(field as Extract<keyof T, string>);
534
+ }
535
+ },
536
+ [intelligenceEnabled, intelligence],
264
537
  );
265
538
 
266
539
  const submit = useCallback(async () => {
@@ -269,10 +542,11 @@ export function useFieldFlowForm<T extends Record<string, string>>({
269
542
  setIsSubmitting(true);
270
543
  try {
271
544
  await onSubmit?.(valuesRef.current);
545
+ if (intelligenceEnabled) intelligence.trackSubmitSuccess();
272
546
  } finally {
273
547
  setIsSubmitting(false);
274
548
  }
275
- }, [onSubmit, validateAll]);
549
+ }, [onSubmit, validateAll, intelligenceEnabled, intelligence]);
276
550
 
277
551
  const reset = useCallback(() => {
278
552
  asyncGen.current += 1;
@@ -280,16 +554,56 @@ export function useFieldFlowForm<T extends Record<string, string>>({
280
554
  const t = debounceTimers.current[key];
281
555
  if (t) clearTimeout(t);
282
556
  }
283
- setValues(initialValues);
557
+ setValuesState(initialValues);
284
558
  valuesRef.current = initialValues;
285
- setErrors({});
559
+ setErrorsState({});
286
560
  setTouched({});
287
561
  setValidating({});
288
- }, [initialValues]);
562
+ if (intelligenceEnabled) intelligence.reset();
563
+ }, [initialValues, intelligenceEnabled, intelligence]);
564
+
565
+ const getInputProps = useCallback(
566
+ (field: keyof T) => {
567
+ const state = getFieldState(field);
568
+ if (!state.visible) return null;
569
+ return {
570
+ value: values[field] ?? '',
571
+ onChangeText: handleChange(field),
572
+ onBlur: handleBlur(field),
573
+ onFocus: handleFocus(field),
574
+ errorText: touched[field] ? errors[field] : undefined,
575
+ required: state.required,
576
+ disabled: state.disabled,
577
+ };
578
+ },
579
+ [getFieldState, values, handleChange, handleBlur, handleFocus, touched, errors],
580
+ );
581
+
582
+ const registerFieldRef = useCallback(
583
+ (field: keyof T, ref: { current: TextInput | null } | TextInput | null) => {
584
+ if (intelligenceEnabled) {
585
+ intelligence.registerFieldRef(field as Extract<keyof T, string>, ref);
586
+ }
587
+ },
588
+ [intelligenceEnabled, intelligence],
589
+ );
289
590
 
290
591
  const isValid = useMemo(() => Object.values(errors).every(e => !e), [errors]);
291
592
  const isValidating = useMemo(() => Object.values(validating).some(Boolean), [validating]);
292
593
 
594
+ const dirtyFields = useMemo(() => {
595
+ const next: Partial<Record<keyof T, boolean>> = {};
596
+ for (const key of Object.keys(initialValues) as (keyof T)[]) {
597
+ if ((values[key] ?? '') !== (initialValues[key] ?? '')) next[key] = true;
598
+ }
599
+ for (const key of Object.keys(values) as (keyof T)[]) {
600
+ if ((values[key] ?? '') !== (initialValues[key] ?? '')) next[key] = true;
601
+ }
602
+ return next;
603
+ }, [values, initialValues]);
604
+
605
+ const isDirty = useMemo(() => Object.values(dirtyFields).some(Boolean), [dirtyFields]);
606
+
293
607
  return {
294
608
  values,
295
609
  errors,
@@ -298,12 +612,27 @@ export function useFieldFlowForm<T extends Record<string, string>>({
298
612
  isSubmitting,
299
613
  isValid,
300
614
  isValidating,
615
+ isDirty,
616
+ dirtyFields,
301
617
  setValue,
618
+ setValues,
619
+ setErrors,
620
+ setFieldError,
621
+ clearErrors,
302
622
  handleChange,
303
623
  handleBlur,
624
+ handleFocus,
304
625
  validateField,
626
+ validateFields,
305
627
  validateAll,
306
628
  submit,
307
629
  reset,
630
+ getFieldState,
631
+ isVisible,
632
+ isRequired,
633
+ isDisabled,
634
+ getInputProps,
635
+ intelligence: intelligenceEnabled ? intelligence : null,
636
+ registerFieldRef,
308
637
  };
309
638
  }