rn-inputforge 0.4.0 → 0.5.0

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 (396) hide show
  1. package/README.md +723 -39
  2. package/lib/commonjs/adapters/index.js +25 -0
  3. package/lib/commonjs/adapters/index.js.map +1 -0
  4. package/lib/commonjs/adapters/reactHookForm.js +107 -0
  5. package/lib/commonjs/adapters/reactHookForm.js.map +1 -0
  6. package/lib/commonjs/components/FieldFlowAffordance/FieldFlowAffordance.js +104 -0
  7. package/lib/commonjs/components/FieldFlowAffordance/FieldFlowAffordance.js.map +1 -0
  8. package/lib/commonjs/components/FieldFlowAffordance/index.js +13 -0
  9. package/lib/commonjs/components/FieldFlowAffordance/index.js.map +1 -0
  10. package/lib/commonjs/components/FieldFlowCreditCard/FieldFlowCreditCard.js +146 -0
  11. package/lib/commonjs/components/FieldFlowCreditCard/FieldFlowCreditCard.js.map +1 -0
  12. package/lib/commonjs/components/FieldFlowCreditCard/index.js +13 -0
  13. package/lib/commonjs/components/FieldFlowCreditCard/index.js.map +1 -0
  14. package/lib/commonjs/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js +156 -0
  15. package/lib/commonjs/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js.map +1 -0
  16. package/lib/commonjs/components/FieldFlowDraftBanner/index.js +13 -0
  17. package/lib/commonjs/components/FieldFlowDraftBanner/index.js.map +1 -0
  18. package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js +143 -43
  19. package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js.map +1 -1
  20. package/lib/commonjs/components/FieldFlowInput/styles.js +16 -0
  21. package/lib/commonjs/components/FieldFlowInput/styles.js.map +1 -1
  22. package/lib/commonjs/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js +136 -0
  23. package/lib/commonjs/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js.map +1 -0
  24. package/lib/commonjs/components/FieldFlowNumberStepper/index.js +13 -0
  25. package/lib/commonjs/components/FieldFlowNumberStepper/index.js.map +1 -0
  26. package/lib/commonjs/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js +122 -0
  27. package/lib/commonjs/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js.map +1 -0
  28. package/lib/commonjs/components/FieldFlowPasswordStrength/index.js +13 -0
  29. package/lib/commonjs/components/FieldFlowPasswordStrength/index.js.map +1 -0
  30. package/lib/commonjs/components/FieldFlowPhone/FieldFlowPhone.js +263 -0
  31. package/lib/commonjs/components/FieldFlowPhone/FieldFlowPhone.js.map +1 -0
  32. package/lib/commonjs/components/FieldFlowPhone/index.js +13 -0
  33. package/lib/commonjs/components/FieldFlowPhone/index.js.map +1 -0
  34. package/lib/commonjs/components/FieldFlowRating/FieldFlowRating.js +106 -0
  35. package/lib/commonjs/components/FieldFlowRating/FieldFlowRating.js.map +1 -0
  36. package/lib/commonjs/components/FieldFlowRating/index.js +13 -0
  37. package/lib/commonjs/components/FieldFlowRating/index.js.map +1 -0
  38. package/lib/commonjs/components/FieldFlowSection/FieldFlowSection.js +141 -0
  39. package/lib/commonjs/components/FieldFlowSection/FieldFlowSection.js.map +1 -0
  40. package/lib/commonjs/components/FieldFlowSection/index.js +13 -0
  41. package/lib/commonjs/components/FieldFlowSection/index.js.map +1 -0
  42. package/lib/commonjs/components/FieldFlowSegmented/FieldFlowSegmented.js +195 -0
  43. package/lib/commonjs/components/FieldFlowSegmented/FieldFlowSegmented.js.map +1 -0
  44. package/lib/commonjs/components/FieldFlowSegmented/index.js +13 -0
  45. package/lib/commonjs/components/FieldFlowSegmented/index.js.map +1 -0
  46. package/lib/commonjs/components/FieldFlowSignature/FieldFlowSignature.js +200 -0
  47. package/lib/commonjs/components/FieldFlowSignature/FieldFlowSignature.js.map +1 -0
  48. package/lib/commonjs/components/FieldFlowSignature/index.js +13 -0
  49. package/lib/commonjs/components/FieldFlowSignature/index.js.map +1 -0
  50. package/lib/commonjs/components/FieldFlowSlider/FieldFlowSlider.js +178 -0
  51. package/lib/commonjs/components/FieldFlowSlider/FieldFlowSlider.js.map +1 -0
  52. package/lib/commonjs/components/FieldFlowSlider/index.js +13 -0
  53. package/lib/commonjs/components/FieldFlowSlider/index.js.map +1 -0
  54. package/lib/commonjs/components/FieldFlowStepper/FieldFlowStepper.js +166 -0
  55. package/lib/commonjs/components/FieldFlowStepper/FieldFlowStepper.js.map +1 -0
  56. package/lib/commonjs/components/FieldFlowStepper/index.js +13 -0
  57. package/lib/commonjs/components/FieldFlowStepper/index.js.map +1 -0
  58. package/lib/commonjs/components/FieldFlowTags/FieldFlowTags.js +240 -0
  59. package/lib/commonjs/components/FieldFlowTags/FieldFlowTags.js.map +1 -0
  60. package/lib/commonjs/components/FieldFlowTags/index.js +13 -0
  61. package/lib/commonjs/components/FieldFlowTags/index.js.map +1 -0
  62. package/lib/commonjs/components/FieldFlowTypeahead/FieldFlowTypeahead.js +227 -0
  63. package/lib/commonjs/components/FieldFlowTypeahead/FieldFlowTypeahead.js.map +1 -0
  64. package/lib/commonjs/components/FieldFlowTypeahead/index.js +13 -0
  65. package/lib/commonjs/components/FieldFlowTypeahead/index.js.map +1 -0
  66. package/lib/commonjs/components/FieldFlowUpload/FieldFlowUpload.js +191 -0
  67. package/lib/commonjs/components/FieldFlowUpload/FieldFlowUpload.js.map +1 -0
  68. package/lib/commonjs/components/FieldFlowUpload/index.js +13 -0
  69. package/lib/commonjs/components/FieldFlowUpload/index.js.map +1 -0
  70. package/lib/commonjs/hooks/index.js +35 -0
  71. package/lib/commonjs/hooks/index.js.map +1 -1
  72. package/lib/commonjs/hooks/useFieldFlowArray.js +110 -0
  73. package/lib/commonjs/hooks/useFieldFlowArray.js.map +1 -0
  74. package/lib/commonjs/hooks/useFieldFlowDirtyGuard.js +53 -0
  75. package/lib/commonjs/hooks/useFieldFlowDirtyGuard.js.map +1 -0
  76. package/lib/commonjs/hooks/useFieldFlowDraft.js +168 -0
  77. package/lib/commonjs/hooks/useFieldFlowDraft.js.map +1 -0
  78. package/lib/commonjs/hooks/useFieldFlowForm.js +224 -30
  79. package/lib/commonjs/hooks/useFieldFlowForm.js.map +1 -1
  80. package/lib/commonjs/hooks/useFieldFlowSteps.js +77 -0
  81. package/lib/commonjs/hooks/useFieldFlowSteps.js.map +1 -0
  82. package/lib/commonjs/hooks/useFormIntelligence.js +130 -0
  83. package/lib/commonjs/hooks/useFormIntelligence.js.map +1 -0
  84. package/lib/commonjs/i18n/index.js +25 -0
  85. package/lib/commonjs/i18n/index.js.map +1 -0
  86. package/lib/commonjs/i18n/messages.js +88 -0
  87. package/lib/commonjs/i18n/messages.js.map +1 -0
  88. package/lib/commonjs/index.js +322 -0
  89. package/lib/commonjs/index.js.map +1 -1
  90. package/lib/commonjs/intelligence/formAccessibility.js +79 -0
  91. package/lib/commonjs/intelligence/formAccessibility.js.map +1 -0
  92. package/lib/commonjs/intelligence/index.js +31 -0
  93. package/lib/commonjs/intelligence/index.js.map +1 -0
  94. package/lib/commonjs/intelligence/types.js +2 -0
  95. package/lib/commonjs/intelligence/types.js.map +1 -0
  96. package/lib/commonjs/motion/index.js +20 -0
  97. package/lib/commonjs/motion/index.js.map +1 -0
  98. package/lib/commonjs/motion/useFieldMotion.js +111 -0
  99. package/lib/commonjs/motion/useFieldMotion.js.map +1 -0
  100. package/lib/commonjs/motion/useReducedMotion.js +32 -0
  101. package/lib/commonjs/motion/useReducedMotion.js.map +1 -0
  102. package/lib/commonjs/theme/index.js +13 -0
  103. package/lib/commonjs/theme/index.js.map +1 -1
  104. package/lib/commonjs/theme/presets.js +142 -0
  105. package/lib/commonjs/theme/presets.js.map +1 -0
  106. package/lib/commonjs/utils/affordance.js +151 -0
  107. package/lib/commonjs/utils/affordance.js.map +1 -0
  108. package/lib/commonjs/utils/passwordStrength.js +79 -0
  109. package/lib/commonjs/utils/passwordStrength.js.map +1 -0
  110. package/lib/commonjs/utils/phoneCountries.js +119 -0
  111. package/lib/commonjs/utils/phoneCountries.js.map +1 -0
  112. package/lib/commonjs/validation/validators.js +10 -7
  113. package/lib/commonjs/validation/validators.js.map +1 -1
  114. package/lib/module/adapters/index.js +4 -0
  115. package/lib/module/adapters/index.js.map +1 -0
  116. package/lib/module/adapters/reactHookForm.js +100 -0
  117. package/lib/module/adapters/reactHookForm.js.map +1 -0
  118. package/lib/module/components/FieldFlowAffordance/FieldFlowAffordance.js +99 -0
  119. package/lib/module/components/FieldFlowAffordance/FieldFlowAffordance.js.map +1 -0
  120. package/lib/module/components/FieldFlowAffordance/index.js +4 -0
  121. package/lib/module/components/FieldFlowAffordance/index.js.map +1 -0
  122. package/lib/module/components/FieldFlowCreditCard/FieldFlowCreditCard.js +141 -0
  123. package/lib/module/components/FieldFlowCreditCard/FieldFlowCreditCard.js.map +1 -0
  124. package/lib/module/components/FieldFlowCreditCard/index.js +4 -0
  125. package/lib/module/components/FieldFlowCreditCard/index.js.map +1 -0
  126. package/lib/module/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js +151 -0
  127. package/lib/module/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js.map +1 -0
  128. package/lib/module/components/FieldFlowDraftBanner/index.js +4 -0
  129. package/lib/module/components/FieldFlowDraftBanner/index.js.map +1 -0
  130. package/lib/module/components/FieldFlowInput/FieldFlowInput.js +144 -44
  131. package/lib/module/components/FieldFlowInput/FieldFlowInput.js.map +1 -1
  132. package/lib/module/components/FieldFlowInput/styles.js +16 -0
  133. package/lib/module/components/FieldFlowInput/styles.js.map +1 -1
  134. package/lib/module/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js +131 -0
  135. package/lib/module/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js.map +1 -0
  136. package/lib/module/components/FieldFlowNumberStepper/index.js +4 -0
  137. package/lib/module/components/FieldFlowNumberStepper/index.js.map +1 -0
  138. package/lib/module/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js +117 -0
  139. package/lib/module/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js.map +1 -0
  140. package/lib/module/components/FieldFlowPasswordStrength/index.js +4 -0
  141. package/lib/module/components/FieldFlowPasswordStrength/index.js.map +1 -0
  142. package/lib/module/components/FieldFlowPhone/FieldFlowPhone.js +258 -0
  143. package/lib/module/components/FieldFlowPhone/FieldFlowPhone.js.map +1 -0
  144. package/lib/module/components/FieldFlowPhone/index.js +4 -0
  145. package/lib/module/components/FieldFlowPhone/index.js.map +1 -0
  146. package/lib/module/components/FieldFlowRating/FieldFlowRating.js +101 -0
  147. package/lib/module/components/FieldFlowRating/FieldFlowRating.js.map +1 -0
  148. package/lib/module/components/FieldFlowRating/index.js +4 -0
  149. package/lib/module/components/FieldFlowRating/index.js.map +1 -0
  150. package/lib/module/components/FieldFlowSection/FieldFlowSection.js +136 -0
  151. package/lib/module/components/FieldFlowSection/FieldFlowSection.js.map +1 -0
  152. package/lib/module/components/FieldFlowSection/index.js +4 -0
  153. package/lib/module/components/FieldFlowSection/index.js.map +1 -0
  154. package/lib/module/components/FieldFlowSegmented/FieldFlowSegmented.js +190 -0
  155. package/lib/module/components/FieldFlowSegmented/FieldFlowSegmented.js.map +1 -0
  156. package/lib/module/components/FieldFlowSegmented/index.js +4 -0
  157. package/lib/module/components/FieldFlowSegmented/index.js.map +1 -0
  158. package/lib/module/components/FieldFlowSignature/FieldFlowSignature.js +195 -0
  159. package/lib/module/components/FieldFlowSignature/FieldFlowSignature.js.map +1 -0
  160. package/lib/module/components/FieldFlowSignature/index.js +4 -0
  161. package/lib/module/components/FieldFlowSignature/index.js.map +1 -0
  162. package/lib/module/components/FieldFlowSlider/FieldFlowSlider.js +173 -0
  163. package/lib/module/components/FieldFlowSlider/FieldFlowSlider.js.map +1 -0
  164. package/lib/module/components/FieldFlowSlider/index.js +4 -0
  165. package/lib/module/components/FieldFlowSlider/index.js.map +1 -0
  166. package/lib/module/components/FieldFlowStepper/FieldFlowStepper.js +161 -0
  167. package/lib/module/components/FieldFlowStepper/FieldFlowStepper.js.map +1 -0
  168. package/lib/module/components/FieldFlowStepper/index.js +4 -0
  169. package/lib/module/components/FieldFlowStepper/index.js.map +1 -0
  170. package/lib/module/components/FieldFlowTags/FieldFlowTags.js +235 -0
  171. package/lib/module/components/FieldFlowTags/FieldFlowTags.js.map +1 -0
  172. package/lib/module/components/FieldFlowTags/index.js +4 -0
  173. package/lib/module/components/FieldFlowTags/index.js.map +1 -0
  174. package/lib/module/components/FieldFlowTypeahead/FieldFlowTypeahead.js +222 -0
  175. package/lib/module/components/FieldFlowTypeahead/FieldFlowTypeahead.js.map +1 -0
  176. package/lib/module/components/FieldFlowTypeahead/index.js +4 -0
  177. package/lib/module/components/FieldFlowTypeahead/index.js.map +1 -0
  178. package/lib/module/components/FieldFlowUpload/FieldFlowUpload.js +186 -0
  179. package/lib/module/components/FieldFlowUpload/FieldFlowUpload.js.map +1 -0
  180. package/lib/module/components/FieldFlowUpload/index.js +4 -0
  181. package/lib/module/components/FieldFlowUpload/index.js.map +1 -0
  182. package/lib/module/hooks/index.js +5 -0
  183. package/lib/module/hooks/index.js.map +1 -1
  184. package/lib/module/hooks/useFieldFlowArray.js +106 -0
  185. package/lib/module/hooks/useFieldFlowArray.js.map +1 -0
  186. package/lib/module/hooks/useFieldFlowDirtyGuard.js +49 -0
  187. package/lib/module/hooks/useFieldFlowDirtyGuard.js.map +1 -0
  188. package/lib/module/hooks/useFieldFlowDraft.js +165 -0
  189. package/lib/module/hooks/useFieldFlowDraft.js.map +1 -0
  190. package/lib/module/hooks/useFieldFlowForm.js +224 -30
  191. package/lib/module/hooks/useFieldFlowForm.js.map +1 -1
  192. package/lib/module/hooks/useFieldFlowSteps.js +73 -0
  193. package/lib/module/hooks/useFieldFlowSteps.js.map +1 -0
  194. package/lib/module/hooks/useFormIntelligence.js +126 -0
  195. package/lib/module/hooks/useFormIntelligence.js.map +1 -0
  196. package/lib/module/i18n/index.js +4 -0
  197. package/lib/module/i18n/index.js.map +1 -0
  198. package/lib/module/i18n/messages.js +82 -0
  199. package/lib/module/i18n/messages.js.map +1 -0
  200. package/lib/module/index.js +31 -2
  201. package/lib/module/index.js.map +1 -1
  202. package/lib/module/intelligence/formAccessibility.js +72 -0
  203. package/lib/module/intelligence/formAccessibility.js.map +1 -0
  204. package/lib/module/intelligence/index.js +4 -0
  205. package/lib/module/intelligence/index.js.map +1 -0
  206. package/lib/module/intelligence/types.js +2 -0
  207. package/lib/module/intelligence/types.js.map +1 -0
  208. package/lib/module/motion/index.js +5 -0
  209. package/lib/module/motion/index.js.map +1 -0
  210. package/lib/module/motion/useFieldMotion.js +107 -0
  211. package/lib/module/motion/useFieldMotion.js.map +1 -0
  212. package/lib/module/motion/useReducedMotion.js +29 -0
  213. package/lib/module/motion/useReducedMotion.js.map +1 -0
  214. package/lib/module/theme/index.js +1 -0
  215. package/lib/module/theme/index.js.map +1 -1
  216. package/lib/module/theme/presets.js +138 -0
  217. package/lib/module/theme/presets.js.map +1 -0
  218. package/lib/module/utils/affordance.js +140 -0
  219. package/lib/module/utils/affordance.js.map +1 -0
  220. package/lib/module/utils/passwordStrength.js +74 -0
  221. package/lib/module/utils/passwordStrength.js.map +1 -0
  222. package/lib/module/utils/phoneCountries.js +113 -0
  223. package/lib/module/utils/phoneCountries.js.map +1 -0
  224. package/lib/module/validation/validators.js +10 -7
  225. package/lib/module/validation/validators.js.map +1 -1
  226. package/lib/typescript/adapters/index.d.ts +3 -0
  227. package/lib/typescript/adapters/index.d.ts.map +1 -0
  228. package/lib/typescript/adapters/reactHookForm.d.ts +56 -0
  229. package/lib/typescript/adapters/reactHookForm.d.ts.map +1 -0
  230. package/lib/typescript/components/FieldFlowAffordance/FieldFlowAffordance.d.ts +29 -0
  231. package/lib/typescript/components/FieldFlowAffordance/FieldFlowAffordance.d.ts.map +1 -0
  232. package/lib/typescript/components/FieldFlowAffordance/index.d.ts +3 -0
  233. package/lib/typescript/components/FieldFlowAffordance/index.d.ts.map +1 -0
  234. package/lib/typescript/components/FieldFlowCreditCard/FieldFlowCreditCard.d.ts +27 -0
  235. package/lib/typescript/components/FieldFlowCreditCard/FieldFlowCreditCard.d.ts.map +1 -0
  236. package/lib/typescript/components/FieldFlowCreditCard/index.d.ts +3 -0
  237. package/lib/typescript/components/FieldFlowCreditCard/index.d.ts.map +1 -0
  238. package/lib/typescript/components/FieldFlowDraftBanner/FieldFlowDraftBanner.d.ts +24 -0
  239. package/lib/typescript/components/FieldFlowDraftBanner/FieldFlowDraftBanner.d.ts.map +1 -0
  240. package/lib/typescript/components/FieldFlowDraftBanner/index.d.ts +3 -0
  241. package/lib/typescript/components/FieldFlowDraftBanner/index.d.ts.map +1 -0
  242. package/lib/typescript/components/FieldFlowInput/FieldFlowInput.d.ts.map +1 -1
  243. package/lib/typescript/components/FieldFlowInput/styles.d.ts +16 -0
  244. package/lib/typescript/components/FieldFlowInput/styles.d.ts.map +1 -1
  245. package/lib/typescript/components/FieldFlowInput/types.d.ts +32 -0
  246. package/lib/typescript/components/FieldFlowInput/types.d.ts.map +1 -1
  247. package/lib/typescript/components/FieldFlowNumberStepper/FieldFlowNumberStepper.d.ts +34 -0
  248. package/lib/typescript/components/FieldFlowNumberStepper/FieldFlowNumberStepper.d.ts.map +1 -0
  249. package/lib/typescript/components/FieldFlowNumberStepper/index.d.ts +3 -0
  250. package/lib/typescript/components/FieldFlowNumberStepper/index.d.ts.map +1 -0
  251. package/lib/typescript/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.d.ts +26 -0
  252. package/lib/typescript/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.d.ts.map +1 -0
  253. package/lib/typescript/components/FieldFlowPasswordStrength/index.d.ts +3 -0
  254. package/lib/typescript/components/FieldFlowPasswordStrength/index.d.ts.map +1 -0
  255. package/lib/typescript/components/FieldFlowPhone/FieldFlowPhone.d.ts +40 -0
  256. package/lib/typescript/components/FieldFlowPhone/FieldFlowPhone.d.ts.map +1 -0
  257. package/lib/typescript/components/FieldFlowPhone/index.d.ts +3 -0
  258. package/lib/typescript/components/FieldFlowPhone/index.d.ts.map +1 -0
  259. package/lib/typescript/components/FieldFlowRating/FieldFlowRating.d.ts +30 -0
  260. package/lib/typescript/components/FieldFlowRating/FieldFlowRating.d.ts.map +1 -0
  261. package/lib/typescript/components/FieldFlowRating/index.d.ts +3 -0
  262. package/lib/typescript/components/FieldFlowRating/index.d.ts.map +1 -0
  263. package/lib/typescript/components/FieldFlowSection/FieldFlowSection.d.ts +35 -0
  264. package/lib/typescript/components/FieldFlowSection/FieldFlowSection.d.ts.map +1 -0
  265. package/lib/typescript/components/FieldFlowSection/index.d.ts +3 -0
  266. package/lib/typescript/components/FieldFlowSection/index.d.ts.map +1 -0
  267. package/lib/typescript/components/FieldFlowSegmented/FieldFlowSegmented.d.ts +28 -0
  268. package/lib/typescript/components/FieldFlowSegmented/FieldFlowSegmented.d.ts.map +1 -0
  269. package/lib/typescript/components/FieldFlowSegmented/index.d.ts +3 -0
  270. package/lib/typescript/components/FieldFlowSegmented/index.d.ts.map +1 -0
  271. package/lib/typescript/components/FieldFlowSignature/FieldFlowSignature.d.ts +41 -0
  272. package/lib/typescript/components/FieldFlowSignature/FieldFlowSignature.d.ts.map +1 -0
  273. package/lib/typescript/components/FieldFlowSignature/index.d.ts +3 -0
  274. package/lib/typescript/components/FieldFlowSignature/index.d.ts.map +1 -0
  275. package/lib/typescript/components/FieldFlowSlider/FieldFlowSlider.d.ts +30 -0
  276. package/lib/typescript/components/FieldFlowSlider/FieldFlowSlider.d.ts.map +1 -0
  277. package/lib/typescript/components/FieldFlowSlider/index.d.ts +3 -0
  278. package/lib/typescript/components/FieldFlowSlider/index.d.ts.map +1 -0
  279. package/lib/typescript/components/FieldFlowStepper/FieldFlowStepper.d.ts +31 -0
  280. package/lib/typescript/components/FieldFlowStepper/FieldFlowStepper.d.ts.map +1 -0
  281. package/lib/typescript/components/FieldFlowStepper/index.d.ts +3 -0
  282. package/lib/typescript/components/FieldFlowStepper/index.d.ts.map +1 -0
  283. package/lib/typescript/components/FieldFlowTags/FieldFlowTags.d.ts +41 -0
  284. package/lib/typescript/components/FieldFlowTags/FieldFlowTags.d.ts.map +1 -0
  285. package/lib/typescript/components/FieldFlowTags/index.d.ts +3 -0
  286. package/lib/typescript/components/FieldFlowTags/index.d.ts.map +1 -0
  287. package/lib/typescript/components/FieldFlowTypeahead/FieldFlowTypeahead.d.ts +43 -0
  288. package/lib/typescript/components/FieldFlowTypeahead/FieldFlowTypeahead.d.ts.map +1 -0
  289. package/lib/typescript/components/FieldFlowTypeahead/index.d.ts +3 -0
  290. package/lib/typescript/components/FieldFlowTypeahead/index.d.ts.map +1 -0
  291. package/lib/typescript/components/FieldFlowUpload/FieldFlowUpload.d.ts +52 -0
  292. package/lib/typescript/components/FieldFlowUpload/FieldFlowUpload.d.ts.map +1 -0
  293. package/lib/typescript/components/FieldFlowUpload/index.d.ts +3 -0
  294. package/lib/typescript/components/FieldFlowUpload/index.d.ts.map +1 -0
  295. package/lib/typescript/hooks/index.d.ts +11 -1
  296. package/lib/typescript/hooks/index.d.ts.map +1 -1
  297. package/lib/typescript/hooks/useFieldFlowArray.d.ts +54 -0
  298. package/lib/typescript/hooks/useFieldFlowArray.d.ts.map +1 -0
  299. package/lib/typescript/hooks/useFieldFlowDirtyGuard.d.ts +26 -0
  300. package/lib/typescript/hooks/useFieldFlowDirtyGuard.d.ts.map +1 -0
  301. package/lib/typescript/hooks/useFieldFlowDraft.d.ts +64 -0
  302. package/lib/typescript/hooks/useFieldFlowDraft.d.ts.map +1 -0
  303. package/lib/typescript/hooks/useFieldFlowForm.d.ts +80 -2
  304. package/lib/typescript/hooks/useFieldFlowForm.d.ts.map +1 -1
  305. package/lib/typescript/hooks/useFieldFlowSteps.d.ts +42 -0
  306. package/lib/typescript/hooks/useFieldFlowSteps.d.ts.map +1 -0
  307. package/lib/typescript/hooks/useFormIntelligence.d.ts +23 -0
  308. package/lib/typescript/hooks/useFormIntelligence.d.ts.map +1 -0
  309. package/lib/typescript/i18n/index.d.ts +3 -0
  310. package/lib/typescript/i18n/index.d.ts.map +1 -0
  311. package/lib/typescript/i18n/messages.d.ts +16 -0
  312. package/lib/typescript/i18n/messages.d.ts.map +1 -0
  313. package/lib/typescript/index.d.ts +48 -4
  314. package/lib/typescript/index.d.ts.map +1 -1
  315. package/lib/typescript/intelligence/formAccessibility.d.ts +21 -0
  316. package/lib/typescript/intelligence/formAccessibility.d.ts.map +1 -0
  317. package/lib/typescript/intelligence/index.d.ts +4 -0
  318. package/lib/typescript/intelligence/index.d.ts.map +1 -0
  319. package/lib/typescript/intelligence/types.d.ts +36 -0
  320. package/lib/typescript/intelligence/types.d.ts.map +1 -0
  321. package/lib/typescript/motion/index.d.ts +4 -0
  322. package/lib/typescript/motion/index.d.ts.map +1 -0
  323. package/lib/typescript/motion/useFieldMotion.d.ts +31 -0
  324. package/lib/typescript/motion/useFieldMotion.d.ts.map +1 -0
  325. package/lib/typescript/motion/useReducedMotion.d.ts +5 -0
  326. package/lib/typescript/motion/useReducedMotion.d.ts.map +1 -0
  327. package/lib/typescript/theme/index.d.ts +2 -0
  328. package/lib/typescript/theme/index.d.ts.map +1 -1
  329. package/lib/typescript/theme/presets.d.ts +134 -0
  330. package/lib/typescript/theme/presets.d.ts.map +1 -0
  331. package/lib/typescript/utils/affordance.d.ts +36 -0
  332. package/lib/typescript/utils/affordance.d.ts.map +1 -0
  333. package/lib/typescript/utils/passwordStrength.d.ts +26 -0
  334. package/lib/typescript/utils/passwordStrength.d.ts.map +1 -0
  335. package/lib/typescript/utils/phoneCountries.d.ts +12 -0
  336. package/lib/typescript/utils/phoneCountries.d.ts.map +1 -0
  337. package/lib/typescript/validation/validators.d.ts +3 -1
  338. package/lib/typescript/validation/validators.d.ts.map +1 -1
  339. package/package.json +19 -2
  340. package/src/adapters/index.ts +9 -0
  341. package/src/adapters/reactHookForm.tsx +152 -0
  342. package/src/components/FieldFlowAffordance/FieldFlowAffordance.tsx +143 -0
  343. package/src/components/FieldFlowAffordance/index.ts +2 -0
  344. package/src/components/FieldFlowCreditCard/FieldFlowCreditCard.tsx +152 -0
  345. package/src/components/FieldFlowCreditCard/index.ts +2 -0
  346. package/src/components/FieldFlowDraftBanner/FieldFlowDraftBanner.tsx +169 -0
  347. package/src/components/FieldFlowDraftBanner/index.ts +2 -0
  348. package/src/components/FieldFlowInput/FieldFlowInput.tsx +174 -53
  349. package/src/components/FieldFlowInput/styles.ts +16 -0
  350. package/src/components/FieldFlowInput/types.ts +33 -0
  351. package/src/components/FieldFlowNumberStepper/FieldFlowNumberStepper.tsx +156 -0
  352. package/src/components/FieldFlowNumberStepper/index.ts +2 -0
  353. package/src/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.tsx +148 -0
  354. package/src/components/FieldFlowPasswordStrength/index.ts +2 -0
  355. package/src/components/FieldFlowPhone/FieldFlowPhone.tsx +298 -0
  356. package/src/components/FieldFlowPhone/index.ts +2 -0
  357. package/src/components/FieldFlowRating/FieldFlowRating.tsx +121 -0
  358. package/src/components/FieldFlowRating/index.ts +2 -0
  359. package/src/components/FieldFlowSection/FieldFlowSection.tsx +176 -0
  360. package/src/components/FieldFlowSection/index.ts +2 -0
  361. package/src/components/FieldFlowSegmented/FieldFlowSegmented.tsx +248 -0
  362. package/src/components/FieldFlowSegmented/index.ts +2 -0
  363. package/src/components/FieldFlowSignature/FieldFlowSignature.tsx +241 -0
  364. package/src/components/FieldFlowSignature/index.ts +7 -0
  365. package/src/components/FieldFlowSlider/FieldFlowSlider.tsx +190 -0
  366. package/src/components/FieldFlowSlider/index.ts +2 -0
  367. package/src/components/FieldFlowStepper/FieldFlowStepper.tsx +190 -0
  368. package/src/components/FieldFlowStepper/index.ts +2 -0
  369. package/src/components/FieldFlowTags/FieldFlowTags.tsx +319 -0
  370. package/src/components/FieldFlowTags/index.ts +2 -0
  371. package/src/components/FieldFlowTypeahead/FieldFlowTypeahead.tsx +261 -0
  372. package/src/components/FieldFlowTypeahead/index.ts +2 -0
  373. package/src/components/FieldFlowUpload/FieldFlowUpload.tsx +226 -0
  374. package/src/components/FieldFlowUpload/index.ts +6 -0
  375. package/src/hooks/index.ts +31 -0
  376. package/src/hooks/useFieldFlowArray.ts +153 -0
  377. package/src/hooks/useFieldFlowDirtyGuard.ts +70 -0
  378. package/src/hooks/useFieldFlowDraft.ts +221 -0
  379. package/src/hooks/useFieldFlowForm.ts +357 -28
  380. package/src/hooks/useFieldFlowSteps.ts +130 -0
  381. package/src/hooks/useFormIntelligence.ts +207 -0
  382. package/src/i18n/index.ts +6 -0
  383. package/src/i18n/messages.ts +101 -0
  384. package/src/index.ts +161 -3
  385. package/src/intelligence/formAccessibility.ts +87 -0
  386. package/src/intelligence/index.ts +12 -0
  387. package/src/intelligence/types.ts +34 -0
  388. package/src/motion/index.ts +3 -0
  389. package/src/motion/useFieldMotion.ts +120 -0
  390. package/src/motion/useReducedMotion.ts +31 -0
  391. package/src/theme/index.ts +2 -0
  392. package/src/theme/presets.ts +120 -0
  393. package/src/utils/affordance.ts +138 -0
  394. package/src/utils/passwordStrength.ts +109 -0
  395. package/src/utils/phoneCountries.ts +44 -0
  396. package/src/validation/validators.ts +17 -7
@@ -0,0 +1,130 @@
1
+ import { useCallback, useMemo, useState } from 'react';
2
+
3
+ export interface FieldFlowStepDefinition<T extends Record<string, string> = Record<string, string>> {
4
+ /** Stable id for the step. */
5
+ id: string;
6
+ title: string;
7
+ description?: string;
8
+ /** Fields that must pass validation before advancing (keys of your form values). */
9
+ fields?: (keyof T)[];
10
+ /** Optional guard — return false (or a message) to block next. */
11
+ canLeave?: (values: T) => boolean | string;
12
+ }
13
+
14
+ export interface UseFieldFlowStepsOptions<T extends Record<string, string>> {
15
+ steps: FieldFlowStepDefinition<T>[];
16
+ /** Form values used by `canLeave` and exposed to callers. */
17
+ values: T;
18
+ /**
19
+ * Validate a subset of fields (usually from `useFieldFlowForm`).
20
+ * Should return true when all listed fields are valid.
21
+ */
22
+ validateFields?: (fields: (keyof T)[]) => Promise<boolean>;
23
+ /** Initial step index. Default: 0. */
24
+ initialStep?: number;
25
+ /** Called when the user completes the last step successfully. */
26
+ onComplete?: () => void | Promise<void>;
27
+ }
28
+
29
+ export interface UseFieldFlowStepsResult<T extends Record<string, string>> {
30
+ steps: FieldFlowStepDefinition<T>[];
31
+ stepIndex: number;
32
+ step: FieldFlowStepDefinition<T>;
33
+ isFirst: boolean;
34
+ isLast: boolean;
35
+ progress: number;
36
+ stepError: string | undefined;
37
+ goTo: (index: number) => void;
38
+ next: () => Promise<boolean>;
39
+ back: () => void;
40
+ reset: () => void;
41
+ }
42
+
43
+ /**
44
+ * Multi-step / wizard controller — pairs with `FieldFlowStepper` and `useFieldFlowForm`.
45
+ */
46
+ export function useFieldFlowSteps<T extends Record<string, string>>({
47
+ steps,
48
+ values,
49
+ validateFields,
50
+ initialStep = 0,
51
+ onComplete,
52
+ }: UseFieldFlowStepsOptions<T>): UseFieldFlowStepsResult<T> {
53
+ const [stepIndex, setStepIndex] = useState(() =>
54
+ Math.min(Math.max(0, initialStep), Math.max(0, steps.length - 1)),
55
+ );
56
+ const [stepError, setStepError] = useState<string | undefined>();
57
+
58
+ const step = steps[stepIndex] ?? steps[0];
59
+ const isFirst = stepIndex <= 0;
60
+ const isLast = stepIndex >= steps.length - 1;
61
+ const progress = steps.length <= 1 ? 1 : stepIndex / (steps.length - 1);
62
+
63
+ const goTo = useCallback(
64
+ (index: number) => {
65
+ if (index < 0 || index >= steps.length) return;
66
+ setStepError(undefined);
67
+ setStepIndex(index);
68
+ },
69
+ [steps.length],
70
+ );
71
+
72
+ const back = useCallback(() => {
73
+ if (isFirst) return;
74
+ setStepError(undefined);
75
+ setStepIndex(i => i - 1);
76
+ }, [isFirst]);
77
+
78
+ const next = useCallback(async (): Promise<boolean> => {
79
+ const current = steps[stepIndex];
80
+ if (!current) return false;
81
+
82
+ if (current.fields?.length && validateFields) {
83
+ const ok = await validateFields(current.fields);
84
+ if (!ok) {
85
+ setStepError(undefined);
86
+ return false;
87
+ }
88
+ }
89
+
90
+ if (current.canLeave) {
91
+ const result = current.canLeave(values);
92
+ if (result !== true) {
93
+ setStepError(typeof result === 'string' ? result : 'Please complete this step');
94
+ return false;
95
+ }
96
+ }
97
+
98
+ setStepError(undefined);
99
+
100
+ if (isLast) {
101
+ await onComplete?.();
102
+ return true;
103
+ }
104
+
105
+ setStepIndex(i => i + 1);
106
+ return true;
107
+ }, [steps, stepIndex, validateFields, values, isLast, onComplete]);
108
+
109
+ const reset = useCallback(() => {
110
+ setStepIndex(Math.min(Math.max(0, initialStep), Math.max(0, steps.length - 1)));
111
+ setStepError(undefined);
112
+ }, [initialStep, steps.length]);
113
+
114
+ return useMemo(
115
+ () => ({
116
+ steps,
117
+ stepIndex,
118
+ step,
119
+ isFirst,
120
+ isLast,
121
+ progress,
122
+ stepError,
123
+ goTo,
124
+ next,
125
+ back,
126
+ reset,
127
+ }),
128
+ [steps, stepIndex, step, isFirst, isLast, progress, stepError, goTo, next, back, reset],
129
+ );
130
+ }
@@ -0,0 +1,207 @@
1
+ import { useCallback, useMemo, useRef } from 'react';
2
+ import type { TextInput } from 'react-native';
3
+ import {
4
+ announceForAccessibility,
5
+ buildValidationAnnouncement,
6
+ focusFirstError,
7
+ type FieldRefMap,
8
+ } from '../intelligence/formAccessibility';
9
+ import type {
10
+ FieldFrictionStats,
11
+ FormHealthReport,
12
+ FormIntelligenceOptions,
13
+ } from '../intelligence/types';
14
+
15
+ function emptyStats(): FieldFrictionStats {
16
+ return {
17
+ focusCount: 0,
18
+ totalFocusMs: 0,
19
+ errorCount: 0,
20
+ changeCount: 0,
21
+ blurCount: 0,
22
+ };
23
+ }
24
+
25
+ export interface UseFormIntelligenceResult<T extends string = string> {
26
+ registerFieldRef: (field: T, ref: { current: TextInput | null } | TextInput | null) => void;
27
+ trackFocus: (field: T) => void;
28
+ trackBlur: (field: T) => void;
29
+ trackChange: (field: T) => void;
30
+ trackError: (field: T) => void;
31
+ /** Call after validateAll — handles a11y focus/announce + friction accounting. */
32
+ onValidationResult: (
33
+ valid: boolean,
34
+ errors: Partial<Record<T, string | undefined>>,
35
+ fieldOrder?: T[],
36
+ ) => void;
37
+ trackSubmitSuccess: () => void;
38
+ getReport: () => FormHealthReport;
39
+ flush: () => FormHealthReport;
40
+ reset: () => void;
41
+ }
42
+
43
+ /**
44
+ * Tracks per-field friction and runs accessibility autopilot on failed validation.
45
+ * Designed to plug into `useFieldFlowForm({ intelligence: true })` or be used standalone.
46
+ */
47
+ export function useFormIntelligence<T extends string = string>(
48
+ options: FormIntelligenceOptions = {},
49
+ ): UseFormIntelligenceResult<T> {
50
+ const {
51
+ onReport,
52
+ focusFirstError: shouldFocus = true,
53
+ announceErrors = true,
54
+ } = options;
55
+
56
+ const sessionStartedAt = useRef(Date.now());
57
+ const statsRef = useRef<Record<string, FieldFrictionStats>>({});
58
+ const refsRef = useRef<FieldRefMap<T>>({});
59
+ const submitAttempts = useRef(0);
60
+ const successfulSubmits = useRef(0);
61
+
62
+ const ensure = useCallback((field: T): FieldFrictionStats => {
63
+ const key = String(field);
64
+ if (!statsRef.current[key]) statsRef.current[key] = emptyStats();
65
+ return statsRef.current[key];
66
+ }, []);
67
+
68
+ const registerFieldRef = useCallback(
69
+ (field: T, ref: { current: TextInput | null } | TextInput | null) => {
70
+ refsRef.current[field] = ref;
71
+ },
72
+ [],
73
+ );
74
+
75
+ const trackFocus = useCallback(
76
+ (field: T) => {
77
+ const s = ensure(field);
78
+ s.focusCount += 1;
79
+ s.focusStartedAt = Date.now();
80
+ s.lastFocusedAt = s.focusStartedAt;
81
+ },
82
+ [ensure],
83
+ );
84
+
85
+ const trackBlur = useCallback(
86
+ (field: T) => {
87
+ const s = ensure(field);
88
+ s.blurCount += 1;
89
+ if (s.focusStartedAt) {
90
+ s.totalFocusMs += Date.now() - s.focusStartedAt;
91
+ s.focusStartedAt = undefined;
92
+ }
93
+ },
94
+ [ensure],
95
+ );
96
+
97
+ const trackChange = useCallback(
98
+ (field: T) => {
99
+ ensure(field).changeCount += 1;
100
+ },
101
+ [ensure],
102
+ );
103
+
104
+ const trackError = useCallback(
105
+ (field: T) => {
106
+ ensure(field).errorCount += 1;
107
+ },
108
+ [ensure],
109
+ );
110
+
111
+ const buildReport = useCallback((): FormHealthReport => {
112
+ const fields = { ...statsRef.current };
113
+ // Close any open focus sessions for accurate totals
114
+ const now = Date.now();
115
+ for (const s of Object.values(fields)) {
116
+ if (s.focusStartedAt) {
117
+ s.totalFocusMs += now - s.focusStartedAt;
118
+ s.focusStartedAt = undefined;
119
+ }
120
+ }
121
+
122
+ const mostFriction = Object.entries(fields)
123
+ .map(([field, s]) => ({
124
+ field,
125
+ score: s.errorCount * 3 + s.focusCount + Math.floor(s.changeCount / 10) + Math.floor(s.totalFocusMs / 5000),
126
+ }))
127
+ .sort((a, b) => b.score - a.score);
128
+
129
+ return {
130
+ sessionMs: now - sessionStartedAt.current,
131
+ submitAttempts: submitAttempts.current,
132
+ successfulSubmits: successfulSubmits.current,
133
+ fields,
134
+ mostFriction,
135
+ generatedAt: now,
136
+ };
137
+ }, []);
138
+
139
+ const onValidationResult = useCallback(
140
+ (valid: boolean, errors: Partial<Record<T, string | undefined>>, fieldOrder?: T[]) => {
141
+ submitAttempts.current += 1;
142
+
143
+ for (const [field, message] of Object.entries(errors) as Array<[T, string | undefined]>) {
144
+ if (message) trackError(field);
145
+ }
146
+
147
+ if (!valid) {
148
+ if (shouldFocus) {
149
+ focusFirstError(errors, refsRef.current, fieldOrder);
150
+ }
151
+ if (announceErrors) {
152
+ announceForAccessibility(buildValidationAnnouncement(errors));
153
+ }
154
+ }
155
+
156
+ onReport?.(buildReport());
157
+ },
158
+ [announceErrors, buildReport, onReport, shouldFocus, trackError],
159
+ );
160
+
161
+ const trackSubmitSuccess = useCallback(() => {
162
+ successfulSubmits.current += 1;
163
+ onReport?.(buildReport());
164
+ }, [buildReport, onReport]);
165
+
166
+ const getReport = useCallback(() => buildReport(), [buildReport]);
167
+
168
+ const flush = useCallback(() => {
169
+ const report = buildReport();
170
+ onReport?.(report);
171
+ return report;
172
+ }, [buildReport, onReport]);
173
+
174
+ const reset = useCallback(() => {
175
+ statsRef.current = {};
176
+ submitAttempts.current = 0;
177
+ successfulSubmits.current = 0;
178
+ sessionStartedAt.current = Date.now();
179
+ }, []);
180
+
181
+ return useMemo(
182
+ () => ({
183
+ registerFieldRef,
184
+ trackFocus,
185
+ trackBlur,
186
+ trackChange,
187
+ trackError,
188
+ onValidationResult,
189
+ trackSubmitSuccess,
190
+ getReport,
191
+ flush,
192
+ reset,
193
+ }),
194
+ [
195
+ registerFieldRef,
196
+ trackFocus,
197
+ trackBlur,
198
+ trackChange,
199
+ trackError,
200
+ onValidationResult,
201
+ trackSubmitSuccess,
202
+ getReport,
203
+ flush,
204
+ reset,
205
+ ],
206
+ );
207
+ }
@@ -0,0 +1,6 @@
1
+ export {
2
+ validationMessageCatalogs,
3
+ getValidationMessages,
4
+ createValidationMessages,
5
+ } from './messages';
6
+ export type { FieldFlowLocale, FieldFlowValidationMessages } from './messages';
@@ -0,0 +1,101 @@
1
+ export type FieldFlowLocale = 'en' | 'es' | 'fr' | 'de' | 'pt' | 'ar';
2
+
3
+ export interface FieldFlowValidationMessages {
4
+ required: string;
5
+ email: string;
6
+ number: string;
7
+ phone: string;
8
+ minLength: (min: number) => string;
9
+ maxLength: (max: number) => string;
10
+ pattern: string;
11
+ invalid: string;
12
+ }
13
+
14
+ const en: FieldFlowValidationMessages = {
15
+ required: 'This field is required',
16
+ email: 'Enter a valid email address',
17
+ number: 'Enter a valid number',
18
+ phone: 'Enter a valid phone number',
19
+ minLength: min => `Must be at least ${min} characters`,
20
+ maxLength: max => `Must be at most ${max} characters`,
21
+ pattern: 'Invalid format',
22
+ invalid: 'Invalid',
23
+ };
24
+
25
+ const es: FieldFlowValidationMessages = {
26
+ required: 'Este campo es obligatorio',
27
+ email: 'Introduce un correo válido',
28
+ number: 'Introduce un número válido',
29
+ phone: 'Introduce un teléfono válido',
30
+ minLength: min => `Debe tener al menos ${min} caracteres`,
31
+ maxLength: max => `Debe tener como máximo ${max} caracteres`,
32
+ pattern: 'Formato no válido',
33
+ invalid: 'No válido',
34
+ };
35
+
36
+ const fr: FieldFlowValidationMessages = {
37
+ required: 'Ce champ est obligatoire',
38
+ email: 'Entrez une adresse e-mail valide',
39
+ number: 'Entrez un nombre valide',
40
+ phone: 'Entrez un numéro de téléphone valide',
41
+ minLength: min => `Doit contenir au moins ${min} caractères`,
42
+ maxLength: max => `Doit contenir au plus ${max} caractères`,
43
+ pattern: 'Format invalide',
44
+ invalid: 'Invalide',
45
+ };
46
+
47
+ const de: FieldFlowValidationMessages = {
48
+ required: 'Dieses Feld ist erforderlich',
49
+ email: 'Gültige E-Mail-Adresse eingeben',
50
+ number: 'Gültige Zahl eingeben',
51
+ phone: 'Gültige Telefonnummer eingeben',
52
+ minLength: min => `Mindestens ${min} Zeichen`,
53
+ maxLength: max => `Höchstens ${max} Zeichen`,
54
+ pattern: 'Ungültiges Format',
55
+ invalid: 'Ungültig',
56
+ };
57
+
58
+ const pt: FieldFlowValidationMessages = {
59
+ required: 'Este campo é obrigatório',
60
+ email: 'Introduza um e-mail válido',
61
+ number: 'Introduza um número válido',
62
+ phone: 'Introduza um telefone válido',
63
+ minLength: min => `Deve ter pelo menos ${min} caracteres`,
64
+ maxLength: max => `Deve ter no máximo ${max} caracteres`,
65
+ pattern: 'Formato inválido',
66
+ invalid: 'Inválido',
67
+ };
68
+
69
+ const ar: FieldFlowValidationMessages = {
70
+ required: 'هذا الحقل مطلوب',
71
+ email: 'أدخل بريداً إلكترونياً صالحاً',
72
+ number: 'أدخل رقماً صالحاً',
73
+ phone: 'أدخل رقم هاتف صالحاً',
74
+ minLength: min => `يجب أن يكون على الأقل ${min} أحرف`,
75
+ maxLength: max => `يجب أن يكون على الأكثر ${max} أحرف`,
76
+ pattern: 'تنسيق غير صالح',
77
+ invalid: 'غير صالح',
78
+ };
79
+
80
+ export const validationMessageCatalogs: Record<FieldFlowLocale, FieldFlowValidationMessages> = {
81
+ en,
82
+ es,
83
+ fr,
84
+ de,
85
+ pt,
86
+ ar,
87
+ };
88
+
89
+ export function getValidationMessages(
90
+ locale: FieldFlowLocale = 'en',
91
+ ): FieldFlowValidationMessages {
92
+ return validationMessageCatalogs[locale] ?? en;
93
+ }
94
+
95
+ /** Merge a partial catalog over a locale base (default English). */
96
+ export function createValidationMessages(
97
+ overrides: Partial<FieldFlowValidationMessages>,
98
+ locale: FieldFlowLocale = 'en',
99
+ ): FieldFlowValidationMessages {
100
+ return { ...getValidationMessages(locale), ...overrides };
101
+ }
package/src/index.ts CHANGED
@@ -40,12 +40,97 @@ export type {
40
40
  FieldFlowDateTimeMode,
41
41
  } from './components/FieldFlowDateTimePicker';
42
42
 
43
+ export { FieldFlowAffordance } from './components/FieldFlowAffordance';
44
+ export type { FieldFlowAffordanceProps } from './components/FieldFlowAffordance';
45
+
46
+ export { FieldFlowDraftBanner } from './components/FieldFlowDraftBanner';
47
+ export type { FieldFlowDraftBannerProps } from './components/FieldFlowDraftBanner';
48
+
49
+ export { FieldFlowTags } from './components/FieldFlowTags';
50
+ export type { FieldFlowTagsProps } from './components/FieldFlowTags';
51
+
52
+ export { FieldFlowPasswordStrength } from './components/FieldFlowPasswordStrength';
53
+ export type { FieldFlowPasswordStrengthProps } from './components/FieldFlowPasswordStrength';
54
+
55
+ export { FieldFlowSection } from './components/FieldFlowSection';
56
+ export type { FieldFlowSectionProps } from './components/FieldFlowSection';
57
+
58
+ export { FieldFlowSegmented } from './components/FieldFlowSegmented';
59
+ export type { FieldFlowSegmentedProps } from './components/FieldFlowSegmented';
60
+
61
+ export { FieldFlowStepper } from './components/FieldFlowStepper';
62
+ export type { FieldFlowStepperProps, FieldFlowStepRenderContext } from './components/FieldFlowStepper';
63
+
64
+ export { FieldFlowPhone } from './components/FieldFlowPhone';
65
+ export type { FieldFlowPhoneProps, FieldFlowPhoneValue } from './components/FieldFlowPhone';
66
+
67
+ export { FieldFlowUpload } from './components/FieldFlowUpload';
68
+ export type {
69
+ FieldFlowUploadProps,
70
+ FieldFlowUploadFile,
71
+ FieldFlowUploadPicker,
72
+ } from './components/FieldFlowUpload';
73
+
74
+ export { FieldFlowTypeahead } from './components/FieldFlowTypeahead';
75
+ export type { FieldFlowTypeaheadProps, FieldFlowTypeaheadFetcher } from './components/FieldFlowTypeahead';
76
+
77
+ export { FieldFlowRating } from './components/FieldFlowRating';
78
+ export type { FieldFlowRatingProps } from './components/FieldFlowRating';
79
+
80
+ export { FieldFlowSlider } from './components/FieldFlowSlider';
81
+ export type { FieldFlowSliderProps } from './components/FieldFlowSlider';
82
+
83
+ export { FieldFlowNumberStepper } from './components/FieldFlowNumberStepper';
84
+ export type { FieldFlowNumberStepperProps } from './components/FieldFlowNumberStepper';
85
+
86
+ export { FieldFlowCreditCard } from './components/FieldFlowCreditCard';
87
+ export type { FieldFlowCreditCardProps, FieldFlowCreditCardValue } from './components/FieldFlowCreditCard';
88
+
89
+ export { FieldFlowSignature } from './components/FieldFlowSignature';
90
+ export type {
91
+ FieldFlowSignatureProps,
92
+ FieldFlowSignatureValue,
93
+ FieldFlowStroke,
94
+ FieldFlowPoint,
95
+ } from './components/FieldFlowSignature';
96
+
97
+ // Adapters (optional peers: react-hook-form)
98
+ export {
99
+ FieldFlowController,
100
+ FieldFlowTagsController,
101
+ mapRhfToFieldFlowProps,
102
+ } from './adapters';
103
+ export type {
104
+ FieldFlowControllerProps,
105
+ FieldFlowTagsControllerProps,
106
+ } from './adapters';
107
+
43
108
  // Theming
44
- export { FieldFlowThemeProvider, useFieldFlowTheme, defaultTheme, darkTheme } from './theme';
45
- export type { FieldFlowThemeProviderProps } from './theme';
109
+ export {
110
+ FieldFlowThemeProvider,
111
+ useFieldFlowTheme,
112
+ defaultTheme,
113
+ darkTheme,
114
+ themePresets,
115
+ getThemePreset,
116
+ } from './theme';
117
+ export type { FieldFlowThemeProviderProps, FieldFlowThemePresetName } from './theme';
118
+
119
+ // Motion
120
+ export { useFieldMotion, useReducedMotion } from './motion';
121
+ export type { UseFieldMotionOptions, UseFieldMotionResult } from './motion';
46
122
 
47
123
  // Hooks
48
- export { useFieldFlowForm, useKeyboardManager, useFieldState } from './hooks';
124
+ export {
125
+ useFieldFlowForm,
126
+ useKeyboardManager,
127
+ useFieldState,
128
+ useFormIntelligence,
129
+ useFieldFlowArray,
130
+ useFieldFlowDraft,
131
+ useFieldFlowSteps,
132
+ useFieldFlowDirtyGuard,
133
+ } from './hooks';
49
134
  export type {
50
135
  UseFieldFlowFormOptions,
51
136
  UseFieldFlowFormResult,
@@ -53,11 +138,43 @@ export type {
53
138
  AsyncFieldValidator,
54
139
  AsyncFieldValidators,
55
140
  CrossFieldRule,
141
+ FieldConditionFn,
142
+ FieldConditionConfig,
143
+ FieldConditions,
144
+ FieldVisibilityState,
56
145
  UseKeyboardManagerOptions,
57
146
  UseKeyboardManagerResult,
58
147
  UseFieldStateOptions,
148
+ UseFormIntelligenceResult,
149
+ UseFieldFlowArrayOptions,
150
+ UseFieldFlowArrayResult,
151
+ FieldFlowDraftStorage,
152
+ FieldFlowDraftPayload,
153
+ UseFieldFlowDraftOptions,
154
+ UseFieldFlowDraftResult,
155
+ FieldFlowStepDefinition,
156
+ UseFieldFlowStepsOptions,
157
+ UseFieldFlowStepsResult,
158
+ UseFieldFlowDirtyGuardOptions,
159
+ UseFieldFlowDirtyGuardResult,
59
160
  } from './hooks';
60
161
 
162
+ // i18n
163
+ export {
164
+ validationMessageCatalogs,
165
+ getValidationMessages,
166
+ createValidationMessages,
167
+ } from './i18n';
168
+ export type { FieldFlowLocale, FieldFlowValidationMessages } from './i18n';
169
+
170
+ // Phone helpers
171
+ export {
172
+ DEFAULT_COUNTRY_DIALS,
173
+ findCountryByCode,
174
+ composeE164,
175
+ } from './utils/phoneCountries';
176
+ export type { FieldFlowCountryDial } from './utils/phoneCountries';
177
+
61
178
  // Validation
62
179
  export {
63
180
  useValidation,
@@ -93,6 +210,47 @@ export {
93
210
  } from './utils/masks';
94
211
  export type { FieldFlowMaskType, MaskResult, ApplyMaskOptions } from './utils/masks';
95
212
 
213
+ // Affordance helpers
214
+ export {
215
+ applyEmailDomainSuggestion,
216
+ applyPhoneDialSuggestion,
217
+ applyCurrencySymbolSuggestion,
218
+ applyAffordanceSuggestion,
219
+ resolveAffordanceChips,
220
+ emailDomainsToChips,
221
+ affordanceKindFromFieldType,
222
+ DEFAULT_EMAIL_DOMAINS,
223
+ DEFAULT_PHONE_DIAL_CODES,
224
+ DEFAULT_CURRENCY_SYMBOLS,
225
+ } from './utils/affordance';
226
+ export type { FieldFlowAffordanceKind, FieldFlowAffordanceChip } from './utils/affordance';
227
+
228
+ // Password strength
229
+ export {
230
+ evaluatePasswordStrength,
231
+ DEFAULT_PASSWORD_RULES,
232
+ PASSWORD_STRENGTH_COLORS,
233
+ } from './utils/passwordStrength';
234
+ export type {
235
+ PasswordStrengthLevel,
236
+ PasswordStrengthRule,
237
+ PasswordStrengthResult,
238
+ } from './utils/passwordStrength';
239
+
240
+ // Form intelligence / a11y
241
+ export {
242
+ focusFirstError,
243
+ announceForAccessibility,
244
+ buildValidationAnnouncement,
245
+ setAccessibilityFocus,
246
+ } from './intelligence';
247
+ export type {
248
+ FieldRefMap,
249
+ FieldFrictionStats,
250
+ FormHealthReport,
251
+ FormIntelligenceOptions,
252
+ } from './intelligence';
253
+
96
254
  // Icons
97
255
  export { FieldFlowIcon, renderFieldFlowIcon } from './icons';
98
256
  export type { FieldFlowIconName, FieldFlowIconProps, FieldFlowIconSource } from './icons';