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
@@ -0,0 +1,132 @@
1
+ export type FieldFlowPasteKind =
2
+ | 'otp'
3
+ | 'card'
4
+ | 'email'
5
+ | 'phone'
6
+ | 'address'
7
+ | 'url'
8
+ | 'unknown';
9
+
10
+ export interface FieldFlowAddressPaste {
11
+ street?: string;
12
+ city?: string;
13
+ state?: string;
14
+ postalCode?: string;
15
+ country?: string;
16
+ raw: string;
17
+ }
18
+
19
+ export interface FieldFlowPasteResult {
20
+ kind: FieldFlowPasteKind;
21
+ /** Primary value for a single target field. */
22
+ value: string;
23
+ /** Digits-only for OTP / card / phone when applicable. */
24
+ raw?: string;
25
+ address?: FieldFlowAddressPaste;
26
+ confidence: number;
27
+ }
28
+
29
+ function digitsOnly(s: string): string {
30
+ return s.replace(/\D/g, '');
31
+ }
32
+
33
+ /**
34
+ * Classify clipboard / pasted text and extract a structured value.
35
+ * Pure — no Clipboard permission required; call from `onPaste` or after reading clipboard.
36
+ */
37
+ export function routeSmartPaste(text: string): FieldFlowPasteResult {
38
+ const trimmed = text.trim();
39
+ if (!trimmed) {
40
+ return { kind: 'unknown', value: '', confidence: 0 };
41
+ }
42
+
43
+ const digits = digitsOnly(trimmed);
44
+
45
+ // OTP: 4–8 digits, little else
46
+ if (/^\d{4,8}$/.test(digits) && digits.length === trimmed.replace(/\s/g, '').length) {
47
+ return { kind: 'otp', value: digits, raw: digits, confidence: 0.95 };
48
+ }
49
+
50
+ // Card: 13–19 digits (spaces/dashes ok)
51
+ if (digits.length >= 13 && digits.length <= 19 && /^[\d\s-]+$/.test(trimmed)) {
52
+ return { kind: 'card', value: digits, raw: digits, confidence: 0.9 };
53
+ }
54
+
55
+ // Email
56
+ if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed)) {
57
+ return { kind: 'email', value: trimmed.toLowerCase(), confidence: 0.98 };
58
+ }
59
+
60
+ // URL
61
+ if (/^https?:\/\//i.test(trimmed) || /^www\./i.test(trimmed)) {
62
+ return {
63
+ kind: 'url',
64
+ value: trimmed.startsWith('http') ? trimmed : `https://${trimmed}`,
65
+ confidence: 0.9,
66
+ };
67
+ }
68
+
69
+ // Phone: 7–15 digits with optional + and punctuation
70
+ if (
71
+ digits.length >= 7 &&
72
+ digits.length <= 15 &&
73
+ /^[+]?[\d\s().-]{7,22}$/.test(trimmed) &&
74
+ !/[a-zA-Z]{3,}/.test(trimmed)
75
+ ) {
76
+ return { kind: 'phone', value: trimmed, raw: digits, confidence: 0.85 };
77
+ }
78
+
79
+ // Multi-line address-ish
80
+ const lines = trimmed
81
+ .split(/\r?\n/)
82
+ .map(l => l.trim())
83
+ .filter(Boolean);
84
+ if (lines.length >= 2) {
85
+ const postalMatch = trimmed.match(/\b([A-Z]{1,2}\d[A-Z\d]?\s*\d[A-Z]{2}|\d{5}(?:-\d{4})?)\b/i);
86
+ const address: FieldFlowAddressPaste = {
87
+ street: lines[0],
88
+ city: lines[1]?.replace(/,.*$/, '').trim(),
89
+ state: lines[1]?.includes(',')
90
+ ? lines[1].split(',')[1]?.trim().split(/\s+/)[0]
91
+ : undefined,
92
+ postalCode: postalMatch?.[1],
93
+ raw: trimmed,
94
+ };
95
+ return {
96
+ kind: 'address',
97
+ value: lines[0],
98
+ address,
99
+ confidence: 0.7,
100
+ };
101
+ }
102
+
103
+ return { kind: 'unknown', value: trimmed, confidence: 0.2 };
104
+ }
105
+
106
+ export type FieldFlowPasteTargets = Partial<
107
+ Record<FieldFlowPasteKind, (result: FieldFlowPasteResult) => void>
108
+ > & {
109
+ /** Called when kind is address and you want field-level writes. */
110
+ addressFields?: (address: FieldFlowAddressPaste) => void;
111
+ };
112
+
113
+ /**
114
+ * Route paste into field setters. Returns true if a handler ran with confidence ≥ minConfidence.
115
+ */
116
+ export function applySmartPaste(
117
+ text: string,
118
+ targets: FieldFlowPasteTargets,
119
+ minConfidence = 0.7,
120
+ ): FieldFlowPasteResult {
121
+ const result = routeSmartPaste(text);
122
+ if (result.confidence < minConfidence) return result;
123
+
124
+ if (result.kind === 'address' && result.address && targets.addressFields) {
125
+ targets.addressFields(result.address);
126
+ return result;
127
+ }
128
+
129
+ const handler = targets[result.kind];
130
+ if (handler) handler(result);
131
+ return result;
132
+ }
@@ -0,0 +1,274 @@
1
+ import React, { useMemo, useState } from 'react';
2
+ import { View, type ViewStyle } from 'react-native';
3
+ import { FieldFlowInput } from '../components/FieldFlowInput';
4
+ import { FieldFlowCheckbox } from '../components/FieldFlowCheckbox';
5
+ import { FieldFlowSwitch } from '../components/FieldFlowSwitch';
6
+ import { FieldFlowRadio } from '../components/FieldFlowRadio';
7
+ import { FieldFlowSegmented } from '../components/FieldFlowSegmented';
8
+ import { FieldFlowDropdown } from '../components/FieldFlowDropdown';
9
+ import { FieldFlowTags } from '../components/FieldFlowTags';
10
+ import { FieldFlowRating } from '../components/FieldFlowRating';
11
+ import { FieldFlowSlider } from '../components/FieldFlowSlider';
12
+ import { FieldFlowNumberStepper } from '../components/FieldFlowNumberStepper';
13
+ import { FieldFlowSection } from '../components/FieldFlowSection';
14
+ import { useFieldFlowForm } from '../hooks/useFieldFlowForm';
15
+ import type { FieldFlowFormSchema, FieldFlowSchemaField } from './types';
16
+ import type { FieldFlowLocale } from '../i18n/messages';
17
+
18
+ export type FieldFlowSchemaShowWhenFn = (values: Record<string, string>) => boolean;
19
+
20
+ export interface FieldFlowSchemaFormProps {
21
+ schema: FieldFlowFormSchema;
22
+ /** Named showWhen resolvers referenced by field.showWhen string key. */
23
+ showWhenFns?: Record<string, FieldFlowSchemaShowWhenFn>;
24
+ locale?: FieldFlowLocale;
25
+ onSubmit?: (values: Record<string, string>) => void | Promise<void>;
26
+ /** Extra non-string state (tags, rating, etc.) change callback. */
27
+ onMetaChange?: (meta: Record<string, unknown>) => void;
28
+ /** Render a custom submit footer; receives form submit + values. */
29
+ renderFooter?: (ctx: {
30
+ submit: () => Promise<void>;
31
+ values: Record<string, string>;
32
+ meta: Record<string, unknown>;
33
+ isSubmitting: boolean;
34
+ }) => React.ReactNode;
35
+ containerStyle?: ViewStyle;
36
+ testID?: string;
37
+ }
38
+
39
+ function buildInitial(schema: FieldFlowFormSchema): Record<string, string> {
40
+ const base: Record<string, string> = { ...(schema.initialValues ?? {}) };
41
+ for (const field of schema.fields) {
42
+ if (base[field.name] === undefined) {
43
+ if (field.type === 'checkbox' || field.type === 'switch') base[field.name] = 'false';
44
+ else if (field.type === 'rating' || field.type === 'slider' || field.type === 'stepper') {
45
+ base[field.name] = String(field.min ?? 0);
46
+ } else base[field.name] = '';
47
+ }
48
+ }
49
+ return base;
50
+ }
51
+
52
+ function buildRules(schema: FieldFlowFormSchema) {
53
+ const rules: Record<string, FieldFlowSchemaField['rules']> = {};
54
+ for (const field of schema.fields) {
55
+ const r = { ...(field.rules ?? {}) };
56
+ if (field.required && !r.required) r.required = true;
57
+ if (field.type === 'email' && r.email === undefined) r.email = true;
58
+ if (Object.keys(r).length) rules[field.name] = r;
59
+ }
60
+ return rules;
61
+ }
62
+
63
+ /**
64
+ * Declarative form renderer — JSON / object schema → FieldFlow controls.
65
+ */
66
+ export function FieldFlowSchemaForm({
67
+ schema,
68
+ showWhenFns,
69
+ locale,
70
+ onSubmit,
71
+ onMetaChange,
72
+ renderFooter,
73
+ containerStyle,
74
+ testID,
75
+ }: FieldFlowSchemaFormProps) {
76
+ const initialValues = useMemo(() => buildInitial(schema), [schema]);
77
+ const rules = useMemo(() => buildRules(schema), [schema]);
78
+
79
+ const form = useFieldFlowForm({
80
+ initialValues,
81
+ rules,
82
+ locale,
83
+ onSubmit,
84
+ });
85
+
86
+ const [meta, setMeta] = useState<Record<string, unknown>>({});
87
+
88
+ const patchMeta = (key: string, value: unknown) => {
89
+ setMeta(prev => {
90
+ const next = { ...prev, [key]: value };
91
+ onMetaChange?.(next);
92
+ return next;
93
+ });
94
+ };
95
+
96
+ const isVisible = (field: FieldFlowSchemaField) => {
97
+ if (!field.showWhen) return true;
98
+ const fn = showWhenFns?.[field.showWhen];
99
+ if (!fn) return true;
100
+ return fn(form.values);
101
+ };
102
+
103
+ const sections = schema.sections ?? [];
104
+ const bySection = useMemo(() => {
105
+ const map = new Map<string | null, FieldFlowSchemaField[]>();
106
+ for (const field of schema.fields) {
107
+ const key = field.section ?? null;
108
+ const list = map.get(key) ?? [];
109
+ list.push(field);
110
+ map.set(key, list);
111
+ }
112
+ return map;
113
+ }, [schema.fields]);
114
+
115
+ const renderField = (field: FieldFlowSchemaField) => {
116
+ if (!isVisible(field)) return null;
117
+ const props = form.getInputProps(field.name);
118
+ if (!props && field.type !== 'checkbox' && field.type !== 'switch' && field.type !== 'rating' && field.type !== 'slider' && field.type !== 'stepper' && field.type !== 'tags' && field.type !== 'dropdown' && field.type !== 'radio' && field.type !== 'segmented') {
119
+ return null;
120
+ }
121
+
122
+ switch (field.type) {
123
+ case 'checkbox':
124
+ return (
125
+ <FieldFlowCheckbox
126
+ key={field.name}
127
+ label={field.label}
128
+ value={form.values[field.name] === 'true'}
129
+ onChange={v => form.handleChange(field.name)(v ? 'true' : 'false')}
130
+ required={field.required}
131
+ helperText={field.helperText}
132
+ />
133
+ );
134
+ case 'switch':
135
+ return (
136
+ <FieldFlowSwitch
137
+ key={field.name}
138
+ label={field.label}
139
+ value={form.values[field.name] === 'true'}
140
+ onChange={v => form.handleChange(field.name)(v ? 'true' : 'false')}
141
+ helperText={field.helperText}
142
+ />
143
+ );
144
+ case 'radio':
145
+ return (
146
+ <FieldFlowRadio
147
+ key={field.name}
148
+ label={field.label}
149
+ value={form.values[field.name] || null}
150
+ onChange={v => form.handleChange(field.name)(v)}
151
+ options={field.options ?? []}
152
+ required={field.required}
153
+ />
154
+ );
155
+ case 'segmented':
156
+ return (
157
+ <FieldFlowSegmented
158
+ key={field.name}
159
+ label={field.label}
160
+ value={form.values[field.name] || null}
161
+ onChange={v => form.handleChange(field.name)(v)}
162
+ options={field.options ?? []}
163
+ required={field.required}
164
+ />
165
+ );
166
+ case 'dropdown':
167
+ return (
168
+ <FieldFlowDropdown
169
+ key={field.name}
170
+ label={field.label}
171
+ placeholder={field.placeholder}
172
+ options={field.options ?? []}
173
+ value={form.values[field.name] || null}
174
+ onChange={v => form.handleChange(field.name)(v ?? '')}
175
+ required={field.required}
176
+ helperText={field.helperText}
177
+ />
178
+ );
179
+ case 'tags':
180
+ return (
181
+ <FieldFlowTags
182
+ key={field.name}
183
+ label={field.label}
184
+ value={(meta[field.name] as string[]) ?? []}
185
+ onChange={tags => patchMeta(field.name, tags)}
186
+ placeholder={field.placeholder}
187
+ helperText={field.helperText}
188
+ />
189
+ );
190
+ case 'rating':
191
+ return (
192
+ <FieldFlowRating
193
+ key={field.name}
194
+ label={field.label}
195
+ value={Number(form.values[field.name] || 0)}
196
+ onChange={v => form.handleChange(field.name)(String(v))}
197
+ max={field.max ?? 5}
198
+ required={field.required}
199
+ />
200
+ );
201
+ case 'slider':
202
+ return (
203
+ <FieldFlowSlider
204
+ key={field.name}
205
+ label={field.label}
206
+ value={Number(form.values[field.name] || field.min || 0)}
207
+ onChange={v => form.handleChange(field.name)(String(v))}
208
+ min={field.min ?? 0}
209
+ max={field.max ?? 100}
210
+ step={field.step ?? 1}
211
+ />
212
+ );
213
+ case 'stepper':
214
+ return (
215
+ <FieldFlowNumberStepper
216
+ key={field.name}
217
+ label={field.label}
218
+ value={Number(form.values[field.name] || field.min || 0)}
219
+ onChange={v => form.handleChange(field.name)(String(v))}
220
+ min={field.min ?? 0}
221
+ max={field.max ?? 99}
222
+ step={field.step ?? 1}
223
+ />
224
+ );
225
+ default:
226
+ return (
227
+ <FieldFlowInput
228
+ key={field.name}
229
+ type={field.type as 'text'}
230
+ label={field.label}
231
+ placeholder={field.placeholder}
232
+ helperText={field.helperText}
233
+ variant={field.variant}
234
+ leftIcon={field.leftIcon}
235
+ autofill={field.autofill}
236
+ suggestions={field.suggestions}
237
+ showStrength={field.showStrength}
238
+ prefix={field.prefix}
239
+ suffix={field.suffix}
240
+ {...props!}
241
+ />
242
+ );
243
+ }
244
+ };
245
+
246
+ const unsectioned = bySection.get(null) ?? [];
247
+
248
+ return (
249
+ <View style={containerStyle} testID={testID}>
250
+ {unsectioned.map(renderField)}
251
+ {sections.map(section => {
252
+ const fields = bySection.get(section.id) ?? [];
253
+ if (!fields.length) return null;
254
+ return (
255
+ <FieldFlowSection
256
+ key={section.id}
257
+ title={section.title}
258
+ description={section.description}
259
+ icon={section.icon}
260
+ collapsible={section.collapsible}
261
+ >
262
+ {fields.map(renderField)}
263
+ </FieldFlowSection>
264
+ );
265
+ })}
266
+ {renderFooter?.({
267
+ submit: form.submit,
268
+ values: form.values,
269
+ meta,
270
+ isSubmitting: form.isSubmitting,
271
+ })}
272
+ </View>
273
+ );
274
+ }
@@ -0,0 +1,8 @@
1
+ export { FieldFlowSchemaForm } from './FieldFlowSchemaForm';
2
+ export type { FieldFlowSchemaFormProps, FieldFlowSchemaShowWhenFn } from './FieldFlowSchemaForm';
3
+ export type {
4
+ FieldFlowFormSchema,
5
+ FieldFlowSchemaField,
6
+ FieldFlowSchemaFieldType,
7
+ FieldFlowSchemaSection,
8
+ } from './types';
@@ -0,0 +1,63 @@
1
+ import type { FieldFlowRules, FieldFlowOption, FieldFlowVariant } from '../types';
2
+ import type { FieldFlowAutofillRole } from '../autofill/profiles';
3
+ import type { FieldFlowIconSource } from '../icons';
4
+
5
+ export type FieldFlowSchemaFieldType =
6
+ | 'text'
7
+ | 'email'
8
+ | 'phone'
9
+ | 'password'
10
+ | 'number'
11
+ | 'decimal'
12
+ | 'search'
13
+ | 'multiline'
14
+ | 'switch'
15
+ | 'checkbox'
16
+ | 'radio'
17
+ | 'segmented'
18
+ | 'dropdown'
19
+ | 'tags'
20
+ | 'rating'
21
+ | 'slider'
22
+ | 'stepper';
23
+
24
+ export interface FieldFlowSchemaField {
25
+ name: string;
26
+ type: FieldFlowSchemaFieldType;
27
+ label?: string;
28
+ placeholder?: string;
29
+ helperText?: string;
30
+ required?: boolean;
31
+ rules?: FieldFlowRules;
32
+ variant?: FieldFlowVariant;
33
+ autofill?: FieldFlowAutofillRole;
34
+ leftIcon?: FieldFlowIconSource;
35
+ options?: FieldFlowOption[];
36
+ /** For slider / stepper / rating. */
37
+ min?: number;
38
+ max?: number;
39
+ step?: number;
40
+ /** Show when predicate returns true (values bag). */
41
+ showWhen?: string;
42
+ /** JSON-serializable expression keys — resolved by `showWhenFns` map on the renderer. */
43
+ section?: string;
44
+ suggestions?: boolean | 'email' | 'phone' | 'currency';
45
+ showStrength?: boolean;
46
+ prefix?: string;
47
+ suffix?: string;
48
+ }
49
+
50
+ export interface FieldFlowSchemaSection {
51
+ id: string;
52
+ title?: string;
53
+ description?: string;
54
+ icon?: FieldFlowIconSource;
55
+ collapsible?: boolean;
56
+ }
57
+
58
+ export interface FieldFlowFormSchema {
59
+ fields: FieldFlowSchemaField[];
60
+ sections?: FieldFlowSchemaSection[];
61
+ /** Initial string values for text-like fields. */
62
+ initialValues?: Record<string, string>;
63
+ }
@@ -1,6 +1,18 @@
1
- import React, { createContext, useContext, useMemo } from 'react';
2
- import type { DeepPartial, FieldFlowTheme } from '../types';
1
+ import React, { createContext, useContext, useEffect, useMemo, useRef } from 'react';
2
+ import { Animated, Easing } from 'react-native';
3
+ import type {
4
+ DeepPartial,
5
+ FieldFlowAppearance,
6
+ FieldFlowControlSize,
7
+ FieldFlowDensity,
8
+ FieldFlowFocusRing,
9
+ FieldFlowShape,
10
+ FieldFlowSurface,
11
+ FieldFlowTheme,
12
+ } from '../types';
3
13
  import { defaultTheme } from './defaultTheme';
14
+ import { applyAppearance, defaultAppearance } from './appearance';
15
+ import { useReducedMotion } from '../motion/useReducedMotion';
4
16
 
5
17
  const FieldFlowThemeContext = createContext<FieldFlowTheme>(defaultTheme);
6
18
 
@@ -27,18 +39,95 @@ function mergeDeep<T extends Record<string, any>>(base: T, override?: DeepPartia
27
39
 
28
40
  export interface FieldFlowThemeProviderProps {
29
41
  theme?: DeepPartial<FieldFlowTheme>;
42
+ /** Form-wide density. Default: comfortable. */
43
+ density?: FieldFlowDensity;
44
+ /** Control size scale. Default: md. */
45
+ size?: FieldFlowControlSize;
46
+ /** Surface depth language. Default: flat. */
47
+ surface?: FieldFlowSurface;
48
+ /** Corner shape. Default: rounded. */
49
+ shape?: FieldFlowShape;
50
+ /** Focus ring style. Default: softGlow. */
51
+ focusRing?: FieldFlowFocusRing;
52
+ /**
53
+ * Soft crossfade when the resolved theme changes (e.g. switching presets).
54
+ * Default: true. Skipped when Reduce Motion is on.
55
+ */
56
+ animateTheme?: boolean;
30
57
  children: React.ReactNode;
31
58
  }
32
59
 
33
60
  /**
34
61
  * Wrap your app (or a screen/form) in this provider to apply a custom theme.
35
- * Any field not covered by your overrides falls back to FieldFlow's defaults,
36
- * so you only need to specify what you want to change.
62
+ * Density / size / shape / surface / focusRing are one-liner visual knobs.
37
63
  */
38
- export function FieldFlowThemeProvider({ theme, children }: FieldFlowThemeProviderProps) {
39
- const merged = useMemo(() => mergeDeep(defaultTheme, theme), [theme]);
64
+ export function FieldFlowThemeProvider({
65
+ theme,
66
+ density,
67
+ size,
68
+ surface,
69
+ shape,
70
+ focusRing,
71
+ animateTheme = true,
72
+ children,
73
+ }: FieldFlowThemeProviderProps) {
74
+ const reducedMotion = useReducedMotion();
75
+ const appearanceOverride = useMemo(() => {
76
+ const partial: Partial<FieldFlowAppearance> = {};
77
+ if (density) partial.density = density;
78
+ if (size) partial.size = size;
79
+ if (surface) partial.surface = surface;
80
+ if (shape) partial.shape = shape;
81
+ if (focusRing) partial.focusRing = focusRing;
82
+ return partial;
83
+ }, [density, size, surface, shape, focusRing]);
84
+
85
+ const merged = useMemo(() => {
86
+ const base = mergeDeep(defaultTheme, theme);
87
+ const withAppearanceDefaults: FieldFlowTheme = {
88
+ ...base,
89
+ appearance: { ...defaultAppearance, ...(base.appearance ?? {}), ...appearanceOverride },
90
+ colors: {
91
+ ...defaultTheme.colors,
92
+ ...base.colors,
93
+ },
94
+ };
95
+ return applyAppearance(withAppearanceDefaults, appearanceOverride);
96
+ }, [theme, appearanceOverride]);
97
+
98
+ const opacity = useRef(new Animated.Value(1)).current;
99
+ const themeKey = useMemo(
100
+ () =>
101
+ JSON.stringify({
102
+ colors: merged.colors,
103
+ appearance: merged.appearance,
104
+ spacing: merged.spacing,
105
+ }),
106
+ [merged],
107
+ );
108
+ const prevKey = useRef(themeKey);
109
+
110
+ useEffect(() => {
111
+ if (!animateTheme || reducedMotion) {
112
+ opacity.setValue(1);
113
+ prevKey.current = themeKey;
114
+ return;
115
+ }
116
+ if (prevKey.current === themeKey) return;
117
+ prevKey.current = themeKey;
118
+ opacity.setValue(0.35);
119
+ Animated.timing(opacity, {
120
+ toValue: 1,
121
+ duration: Math.max(180, merged.animation.duration + 40),
122
+ easing: Easing.out(Easing.cubic),
123
+ useNativeDriver: true,
124
+ }).start();
125
+ }, [themeKey, animateTheme, reducedMotion, opacity, merged.animation.duration]);
126
+
40
127
  return (
41
- <FieldFlowThemeContext.Provider value={merged}>{children}</FieldFlowThemeContext.Provider>
128
+ <FieldFlowThemeContext.Provider value={merged}>
129
+ <Animated.View style={{ opacity }}>{children}</Animated.View>
130
+ </FieldFlowThemeContext.Provider>
42
131
  );
43
132
  }
44
133
 
@@ -0,0 +1,105 @@
1
+ import type {
2
+ FieldFlowAppearance,
3
+ FieldFlowControlSize,
4
+ FieldFlowDensity,
5
+ FieldFlowFocusRing,
6
+ FieldFlowShape,
7
+ FieldFlowSurface,
8
+ FieldFlowTheme,
9
+ } from '../types';
10
+
11
+ export const defaultAppearance: FieldFlowAppearance = {
12
+ density: 'comfortable',
13
+ size: 'md',
14
+ surface: 'flat',
15
+ shape: 'rounded',
16
+ focusRing: 'softGlow',
17
+ };
18
+
19
+ const DENSITY_SCALE: Record<FieldFlowDensity, number> = {
20
+ compact: 0.85,
21
+ comfortable: 1,
22
+ spacious: 1.18,
23
+ };
24
+
25
+ const SIZE_SCALE: Record<FieldFlowControlSize, number> = {
26
+ sm: 0.88,
27
+ md: 1,
28
+ lg: 1.14,
29
+ };
30
+
31
+ const SHAPE_RADIUS: Record<FieldFlowShape, (base: number) => number> = {
32
+ square: () => 4,
33
+ rounded: base => base,
34
+ pill: () => 999,
35
+ };
36
+
37
+ function scale(n: number, factor: number): number {
38
+ return Math.round(n * factor * 10) / 10;
39
+ }
40
+
41
+ /**
42
+ * Apply density / size / shape onto spacing + typography.
43
+ * Surface and focusRing stay as appearance flags for components to read.
44
+ */
45
+ export function applyAppearance(
46
+ theme: FieldFlowTheme,
47
+ appearance: Partial<FieldFlowAppearance> = {},
48
+ ): FieldFlowTheme {
49
+ const next: FieldFlowAppearance = {
50
+ ...defaultAppearance,
51
+ ...(theme.appearance ?? defaultAppearance),
52
+ ...appearance,
53
+ };
54
+ const factor = DENSITY_SCALE[next.density] * SIZE_SCALE[next.size];
55
+ const radius = SHAPE_RADIUS[next.shape](theme.spacing.borderRadius);
56
+
57
+ return {
58
+ ...theme,
59
+ appearance: next,
60
+ spacing: {
61
+ ...theme.spacing,
62
+ paddingHorizontal: scale(theme.spacing.paddingHorizontal, factor),
63
+ paddingVertical: scale(theme.spacing.paddingVertical, factor),
64
+ gap: scale(theme.spacing.gap, factor),
65
+ borderRadius: radius,
66
+ },
67
+ typography: {
68
+ ...theme.typography,
69
+ fontSize: scale(theme.typography.fontSize, factor),
70
+ labelFontSize: scale(theme.typography.labelFontSize, factor),
71
+ helperFontSize: scale(theme.typography.helperFontSize, Math.min(factor, 1.1)),
72
+ },
73
+ };
74
+ }
75
+
76
+ export function surfaceShadow(surface: FieldFlowSurface): {
77
+ shadowColor?: string;
78
+ shadowOpacity?: number;
79
+ shadowRadius?: number;
80
+ shadowOffset?: { width: number; height: number };
81
+ elevation?: number;
82
+ } | null {
83
+ switch (surface) {
84
+ case 'elevated':
85
+ return {
86
+ shadowColor: '#000',
87
+ shadowOpacity: 0.08,
88
+ shadowRadius: 10,
89
+ shadowOffset: { width: 0, height: 4 },
90
+ elevation: 3,
91
+ };
92
+ case 'soft':
93
+ return {
94
+ shadowColor: '#000',
95
+ shadowOpacity: 0.04,
96
+ shadowRadius: 6,
97
+ shadowOffset: { width: 0, height: 2 },
98
+ elevation: 1,
99
+ };
100
+ default:
101
+ return null;
102
+ }
103
+ }
104
+
105
+ export type { FieldFlowDensity, FieldFlowControlSize, FieldFlowSurface, FieldFlowShape, FieldFlowFocusRing };