rn-inputforge 0.3.1 → 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 (555) hide show
  1. package/README.md +909 -20
  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/FieldFlowCheckbox/FieldFlowCheckbox.js +131 -0
  11. package/lib/commonjs/components/FieldFlowCheckbox/FieldFlowCheckbox.js.map +1 -0
  12. package/lib/commonjs/components/FieldFlowCheckbox/index.js +13 -0
  13. package/lib/commonjs/components/FieldFlowCheckbox/index.js.map +1 -0
  14. package/lib/commonjs/components/FieldFlowCreditCard/FieldFlowCreditCard.js +146 -0
  15. package/lib/commonjs/components/FieldFlowCreditCard/FieldFlowCreditCard.js.map +1 -0
  16. package/lib/commonjs/components/FieldFlowCreditCard/index.js +13 -0
  17. package/lib/commonjs/components/FieldFlowCreditCard/index.js.map +1 -0
  18. package/lib/commonjs/components/FieldFlowDateTimePicker/FieldFlowDateTimePicker.js +536 -0
  19. package/lib/commonjs/components/FieldFlowDateTimePicker/FieldFlowDateTimePicker.js.map +1 -0
  20. package/lib/commonjs/components/FieldFlowDateTimePicker/index.js +13 -0
  21. package/lib/commonjs/components/FieldFlowDateTimePicker/index.js.map +1 -0
  22. package/lib/commonjs/components/FieldFlowDateTimePicker/types.js +6 -0
  23. package/lib/commonjs/components/FieldFlowDateTimePicker/types.js.map +1 -0
  24. package/lib/commonjs/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js +156 -0
  25. package/lib/commonjs/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js.map +1 -0
  26. package/lib/commonjs/components/FieldFlowDraftBanner/index.js +13 -0
  27. package/lib/commonjs/components/FieldFlowDraftBanner/index.js.map +1 -0
  28. package/lib/commonjs/components/FieldFlowDropdown/FieldFlowDropdown.js +24 -9
  29. package/lib/commonjs/components/FieldFlowDropdown/FieldFlowDropdown.js.map +1 -1
  30. package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js +187 -56
  31. package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js.map +1 -1
  32. package/lib/commonjs/components/FieldFlowInput/styles.js +48 -11
  33. package/lib/commonjs/components/FieldFlowInput/styles.js.map +1 -1
  34. package/lib/commonjs/components/FieldFlowMaskedInput/FieldFlowMaskedInput.js +66 -0
  35. package/lib/commonjs/components/FieldFlowMaskedInput/FieldFlowMaskedInput.js.map +1 -0
  36. package/lib/commonjs/components/FieldFlowMaskedInput/index.js +13 -0
  37. package/lib/commonjs/components/FieldFlowMaskedInput/index.js.map +1 -0
  38. package/lib/commonjs/components/FieldFlowMaskedInput/types.js +6 -0
  39. package/lib/commonjs/components/FieldFlowMaskedInput/types.js.map +1 -0
  40. package/lib/commonjs/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js +136 -0
  41. package/lib/commonjs/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js.map +1 -0
  42. package/lib/commonjs/components/FieldFlowNumberStepper/index.js +13 -0
  43. package/lib/commonjs/components/FieldFlowNumberStepper/index.js.map +1 -0
  44. package/lib/commonjs/components/FieldFlowOTP/FieldFlowOTP.js +255 -0
  45. package/lib/commonjs/components/FieldFlowOTP/FieldFlowOTP.js.map +1 -0
  46. package/lib/commonjs/components/FieldFlowOTP/index.js +13 -0
  47. package/lib/commonjs/components/FieldFlowOTP/index.js.map +1 -0
  48. package/lib/commonjs/components/FieldFlowOTP/types.js +6 -0
  49. package/lib/commonjs/components/FieldFlowOTP/types.js.map +1 -0
  50. package/lib/commonjs/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js +122 -0
  51. package/lib/commonjs/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js.map +1 -0
  52. package/lib/commonjs/components/FieldFlowPasswordStrength/index.js +13 -0
  53. package/lib/commonjs/components/FieldFlowPasswordStrength/index.js.map +1 -0
  54. package/lib/commonjs/components/FieldFlowPhone/FieldFlowPhone.js +263 -0
  55. package/lib/commonjs/components/FieldFlowPhone/FieldFlowPhone.js.map +1 -0
  56. package/lib/commonjs/components/FieldFlowPhone/index.js +13 -0
  57. package/lib/commonjs/components/FieldFlowPhone/index.js.map +1 -0
  58. package/lib/commonjs/components/FieldFlowRadio/FieldFlowRadio.js +164 -0
  59. package/lib/commonjs/components/FieldFlowRadio/FieldFlowRadio.js.map +1 -0
  60. package/lib/commonjs/components/FieldFlowRadio/index.js +13 -0
  61. package/lib/commonjs/components/FieldFlowRadio/index.js.map +1 -0
  62. package/lib/commonjs/components/FieldFlowRating/FieldFlowRating.js +106 -0
  63. package/lib/commonjs/components/FieldFlowRating/FieldFlowRating.js.map +1 -0
  64. package/lib/commonjs/components/FieldFlowRating/index.js +13 -0
  65. package/lib/commonjs/components/FieldFlowRating/index.js.map +1 -0
  66. package/lib/commonjs/components/FieldFlowSection/FieldFlowSection.js +141 -0
  67. package/lib/commonjs/components/FieldFlowSection/FieldFlowSection.js.map +1 -0
  68. package/lib/commonjs/components/FieldFlowSection/index.js +13 -0
  69. package/lib/commonjs/components/FieldFlowSection/index.js.map +1 -0
  70. package/lib/commonjs/components/FieldFlowSegmented/FieldFlowSegmented.js +195 -0
  71. package/lib/commonjs/components/FieldFlowSegmented/FieldFlowSegmented.js.map +1 -0
  72. package/lib/commonjs/components/FieldFlowSegmented/index.js +13 -0
  73. package/lib/commonjs/components/FieldFlowSegmented/index.js.map +1 -0
  74. package/lib/commonjs/components/FieldFlowSignature/FieldFlowSignature.js +200 -0
  75. package/lib/commonjs/components/FieldFlowSignature/FieldFlowSignature.js.map +1 -0
  76. package/lib/commonjs/components/FieldFlowSignature/index.js +13 -0
  77. package/lib/commonjs/components/FieldFlowSignature/index.js.map +1 -0
  78. package/lib/commonjs/components/FieldFlowSlider/FieldFlowSlider.js +178 -0
  79. package/lib/commonjs/components/FieldFlowSlider/FieldFlowSlider.js.map +1 -0
  80. package/lib/commonjs/components/FieldFlowSlider/index.js +13 -0
  81. package/lib/commonjs/components/FieldFlowSlider/index.js.map +1 -0
  82. package/lib/commonjs/components/FieldFlowStepper/FieldFlowStepper.js +166 -0
  83. package/lib/commonjs/components/FieldFlowStepper/FieldFlowStepper.js.map +1 -0
  84. package/lib/commonjs/components/FieldFlowStepper/index.js +13 -0
  85. package/lib/commonjs/components/FieldFlowStepper/index.js.map +1 -0
  86. package/lib/commonjs/components/FieldFlowSwitch/FieldFlowSwitch.js +152 -0
  87. package/lib/commonjs/components/FieldFlowSwitch/FieldFlowSwitch.js.map +1 -0
  88. package/lib/commonjs/components/FieldFlowSwitch/index.js +13 -0
  89. package/lib/commonjs/components/FieldFlowSwitch/index.js.map +1 -0
  90. package/lib/commonjs/components/FieldFlowTags/FieldFlowTags.js +240 -0
  91. package/lib/commonjs/components/FieldFlowTags/FieldFlowTags.js.map +1 -0
  92. package/lib/commonjs/components/FieldFlowTags/index.js +13 -0
  93. package/lib/commonjs/components/FieldFlowTags/index.js.map +1 -0
  94. package/lib/commonjs/components/FieldFlowTypeahead/FieldFlowTypeahead.js +227 -0
  95. package/lib/commonjs/components/FieldFlowTypeahead/FieldFlowTypeahead.js.map +1 -0
  96. package/lib/commonjs/components/FieldFlowTypeahead/index.js +13 -0
  97. package/lib/commonjs/components/FieldFlowTypeahead/index.js.map +1 -0
  98. package/lib/commonjs/components/FieldFlowUpload/FieldFlowUpload.js +191 -0
  99. package/lib/commonjs/components/FieldFlowUpload/FieldFlowUpload.js.map +1 -0
  100. package/lib/commonjs/components/FieldFlowUpload/index.js +13 -0
  101. package/lib/commonjs/components/FieldFlowUpload/index.js.map +1 -0
  102. package/lib/commonjs/hooks/index.js +35 -0
  103. package/lib/commonjs/hooks/index.js.map +1 -1
  104. package/lib/commonjs/hooks/useFieldFlowArray.js +110 -0
  105. package/lib/commonjs/hooks/useFieldFlowArray.js.map +1 -0
  106. package/lib/commonjs/hooks/useFieldFlowDirtyGuard.js +53 -0
  107. package/lib/commonjs/hooks/useFieldFlowDirtyGuard.js.map +1 -0
  108. package/lib/commonjs/hooks/useFieldFlowDraft.js +168 -0
  109. package/lib/commonjs/hooks/useFieldFlowDraft.js.map +1 -0
  110. package/lib/commonjs/hooks/useFieldFlowForm.js +350 -41
  111. package/lib/commonjs/hooks/useFieldFlowForm.js.map +1 -1
  112. package/lib/commonjs/hooks/useFieldFlowSteps.js +77 -0
  113. package/lib/commonjs/hooks/useFieldFlowSteps.js.map +1 -0
  114. package/lib/commonjs/hooks/useFormIntelligence.js +130 -0
  115. package/lib/commonjs/hooks/useFormIntelligence.js.map +1 -0
  116. package/lib/commonjs/i18n/index.js +25 -0
  117. package/lib/commonjs/i18n/index.js.map +1 -0
  118. package/lib/commonjs/i18n/messages.js +88 -0
  119. package/lib/commonjs/i18n/messages.js.map +1 -0
  120. package/lib/commonjs/icons/Icon.js +719 -30
  121. package/lib/commonjs/icons/Icon.js.map +1 -1
  122. package/lib/commonjs/icons/index.js +7 -0
  123. package/lib/commonjs/icons/index.js.map +1 -1
  124. package/lib/commonjs/icons/renderIcon.js +24 -0
  125. package/lib/commonjs/icons/renderIcon.js.map +1 -0
  126. package/lib/commonjs/index.js +449 -0
  127. package/lib/commonjs/index.js.map +1 -1
  128. package/lib/commonjs/intelligence/formAccessibility.js +79 -0
  129. package/lib/commonjs/intelligence/formAccessibility.js.map +1 -0
  130. package/lib/commonjs/intelligence/index.js +31 -0
  131. package/lib/commonjs/intelligence/index.js.map +1 -0
  132. package/lib/commonjs/intelligence/types.js +2 -0
  133. package/lib/commonjs/intelligence/types.js.map +1 -0
  134. package/lib/commonjs/motion/index.js +20 -0
  135. package/lib/commonjs/motion/index.js.map +1 -0
  136. package/lib/commonjs/motion/useFieldMotion.js +111 -0
  137. package/lib/commonjs/motion/useFieldMotion.js.map +1 -0
  138. package/lib/commonjs/motion/useReducedMotion.js +32 -0
  139. package/lib/commonjs/motion/useReducedMotion.js.map +1 -0
  140. package/lib/commonjs/theme/index.js +13 -0
  141. package/lib/commonjs/theme/index.js.map +1 -1
  142. package/lib/commonjs/theme/presets.js +142 -0
  143. package/lib/commonjs/theme/presets.js.map +1 -0
  144. package/lib/commonjs/utils/affordance.js +151 -0
  145. package/lib/commonjs/utils/affordance.js.map +1 -0
  146. package/lib/commonjs/utils/masks.js +130 -0
  147. package/lib/commonjs/utils/masks.js.map +1 -0
  148. package/lib/commonjs/utils/passwordStrength.js +79 -0
  149. package/lib/commonjs/utils/passwordStrength.js.map +1 -0
  150. package/lib/commonjs/utils/phoneCountries.js +119 -0
  151. package/lib/commonjs/utils/phoneCountries.js.map +1 -0
  152. package/lib/commonjs/validation/index.js +25 -0
  153. package/lib/commonjs/validation/index.js.map +1 -1
  154. package/lib/commonjs/validation/validators.js +10 -7
  155. package/lib/commonjs/validation/validators.js.map +1 -1
  156. package/lib/commonjs/validation/zodAdapter.js +91 -0
  157. package/lib/commonjs/validation/zodAdapter.js.map +1 -0
  158. package/lib/module/adapters/index.js +4 -0
  159. package/lib/module/adapters/index.js.map +1 -0
  160. package/lib/module/adapters/reactHookForm.js +100 -0
  161. package/lib/module/adapters/reactHookForm.js.map +1 -0
  162. package/lib/module/components/FieldFlowAffordance/FieldFlowAffordance.js +99 -0
  163. package/lib/module/components/FieldFlowAffordance/FieldFlowAffordance.js.map +1 -0
  164. package/lib/module/components/FieldFlowAffordance/index.js +4 -0
  165. package/lib/module/components/FieldFlowAffordance/index.js.map +1 -0
  166. package/lib/module/components/FieldFlowCheckbox/FieldFlowCheckbox.js +126 -0
  167. package/lib/module/components/FieldFlowCheckbox/FieldFlowCheckbox.js.map +1 -0
  168. package/lib/module/components/FieldFlowCheckbox/index.js +4 -0
  169. package/lib/module/components/FieldFlowCheckbox/index.js.map +1 -0
  170. package/lib/module/components/FieldFlowCreditCard/FieldFlowCreditCard.js +141 -0
  171. package/lib/module/components/FieldFlowCreditCard/FieldFlowCreditCard.js.map +1 -0
  172. package/lib/module/components/FieldFlowCreditCard/index.js +4 -0
  173. package/lib/module/components/FieldFlowCreditCard/index.js.map +1 -0
  174. package/lib/module/components/FieldFlowDateTimePicker/FieldFlowDateTimePicker.js +531 -0
  175. package/lib/module/components/FieldFlowDateTimePicker/FieldFlowDateTimePicker.js.map +1 -0
  176. package/lib/module/components/FieldFlowDateTimePicker/index.js +4 -0
  177. package/lib/module/components/FieldFlowDateTimePicker/index.js.map +1 -0
  178. package/lib/module/components/FieldFlowDateTimePicker/types.js +4 -0
  179. package/lib/module/components/FieldFlowDateTimePicker/types.js.map +1 -0
  180. package/lib/module/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js +151 -0
  181. package/lib/module/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js.map +1 -0
  182. package/lib/module/components/FieldFlowDraftBanner/index.js +4 -0
  183. package/lib/module/components/FieldFlowDraftBanner/index.js.map +1 -0
  184. package/lib/module/components/FieldFlowDropdown/FieldFlowDropdown.js +24 -9
  185. package/lib/module/components/FieldFlowDropdown/FieldFlowDropdown.js.map +1 -1
  186. package/lib/module/components/FieldFlowInput/FieldFlowInput.js +190 -59
  187. package/lib/module/components/FieldFlowInput/FieldFlowInput.js.map +1 -1
  188. package/lib/module/components/FieldFlowInput/styles.js +48 -11
  189. package/lib/module/components/FieldFlowInput/styles.js.map +1 -1
  190. package/lib/module/components/FieldFlowMaskedInput/FieldFlowMaskedInput.js +61 -0
  191. package/lib/module/components/FieldFlowMaskedInput/FieldFlowMaskedInput.js.map +1 -0
  192. package/lib/module/components/FieldFlowMaskedInput/index.js +4 -0
  193. package/lib/module/components/FieldFlowMaskedInput/index.js.map +1 -0
  194. package/lib/module/components/FieldFlowMaskedInput/types.js +4 -0
  195. package/lib/module/components/FieldFlowMaskedInput/types.js.map +1 -0
  196. package/lib/module/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js +131 -0
  197. package/lib/module/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js.map +1 -0
  198. package/lib/module/components/FieldFlowNumberStepper/index.js +4 -0
  199. package/lib/module/components/FieldFlowNumberStepper/index.js.map +1 -0
  200. package/lib/module/components/FieldFlowOTP/FieldFlowOTP.js +250 -0
  201. package/lib/module/components/FieldFlowOTP/FieldFlowOTP.js.map +1 -0
  202. package/lib/module/components/FieldFlowOTP/index.js +4 -0
  203. package/lib/module/components/FieldFlowOTP/index.js.map +1 -0
  204. package/lib/module/components/FieldFlowOTP/types.js +4 -0
  205. package/lib/module/components/FieldFlowOTP/types.js.map +1 -0
  206. package/lib/module/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js +117 -0
  207. package/lib/module/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js.map +1 -0
  208. package/lib/module/components/FieldFlowPasswordStrength/index.js +4 -0
  209. package/lib/module/components/FieldFlowPasswordStrength/index.js.map +1 -0
  210. package/lib/module/components/FieldFlowPhone/FieldFlowPhone.js +258 -0
  211. package/lib/module/components/FieldFlowPhone/FieldFlowPhone.js.map +1 -0
  212. package/lib/module/components/FieldFlowPhone/index.js +4 -0
  213. package/lib/module/components/FieldFlowPhone/index.js.map +1 -0
  214. package/lib/module/components/FieldFlowRadio/FieldFlowRadio.js +159 -0
  215. package/lib/module/components/FieldFlowRadio/FieldFlowRadio.js.map +1 -0
  216. package/lib/module/components/FieldFlowRadio/index.js +4 -0
  217. package/lib/module/components/FieldFlowRadio/index.js.map +1 -0
  218. package/lib/module/components/FieldFlowRating/FieldFlowRating.js +101 -0
  219. package/lib/module/components/FieldFlowRating/FieldFlowRating.js.map +1 -0
  220. package/lib/module/components/FieldFlowRating/index.js +4 -0
  221. package/lib/module/components/FieldFlowRating/index.js.map +1 -0
  222. package/lib/module/components/FieldFlowSection/FieldFlowSection.js +136 -0
  223. package/lib/module/components/FieldFlowSection/FieldFlowSection.js.map +1 -0
  224. package/lib/module/components/FieldFlowSection/index.js +4 -0
  225. package/lib/module/components/FieldFlowSection/index.js.map +1 -0
  226. package/lib/module/components/FieldFlowSegmented/FieldFlowSegmented.js +190 -0
  227. package/lib/module/components/FieldFlowSegmented/FieldFlowSegmented.js.map +1 -0
  228. package/lib/module/components/FieldFlowSegmented/index.js +4 -0
  229. package/lib/module/components/FieldFlowSegmented/index.js.map +1 -0
  230. package/lib/module/components/FieldFlowSignature/FieldFlowSignature.js +195 -0
  231. package/lib/module/components/FieldFlowSignature/FieldFlowSignature.js.map +1 -0
  232. package/lib/module/components/FieldFlowSignature/index.js +4 -0
  233. package/lib/module/components/FieldFlowSignature/index.js.map +1 -0
  234. package/lib/module/components/FieldFlowSlider/FieldFlowSlider.js +173 -0
  235. package/lib/module/components/FieldFlowSlider/FieldFlowSlider.js.map +1 -0
  236. package/lib/module/components/FieldFlowSlider/index.js +4 -0
  237. package/lib/module/components/FieldFlowSlider/index.js.map +1 -0
  238. package/lib/module/components/FieldFlowStepper/FieldFlowStepper.js +161 -0
  239. package/lib/module/components/FieldFlowStepper/FieldFlowStepper.js.map +1 -0
  240. package/lib/module/components/FieldFlowStepper/index.js +4 -0
  241. package/lib/module/components/FieldFlowStepper/index.js.map +1 -0
  242. package/lib/module/components/FieldFlowSwitch/FieldFlowSwitch.js +147 -0
  243. package/lib/module/components/FieldFlowSwitch/FieldFlowSwitch.js.map +1 -0
  244. package/lib/module/components/FieldFlowSwitch/index.js +4 -0
  245. package/lib/module/components/FieldFlowSwitch/index.js.map +1 -0
  246. package/lib/module/components/FieldFlowTags/FieldFlowTags.js +235 -0
  247. package/lib/module/components/FieldFlowTags/FieldFlowTags.js.map +1 -0
  248. package/lib/module/components/FieldFlowTags/index.js +4 -0
  249. package/lib/module/components/FieldFlowTags/index.js.map +1 -0
  250. package/lib/module/components/FieldFlowTypeahead/FieldFlowTypeahead.js +222 -0
  251. package/lib/module/components/FieldFlowTypeahead/FieldFlowTypeahead.js.map +1 -0
  252. package/lib/module/components/FieldFlowTypeahead/index.js +4 -0
  253. package/lib/module/components/FieldFlowTypeahead/index.js.map +1 -0
  254. package/lib/module/components/FieldFlowUpload/FieldFlowUpload.js +186 -0
  255. package/lib/module/components/FieldFlowUpload/FieldFlowUpload.js.map +1 -0
  256. package/lib/module/components/FieldFlowUpload/index.js +4 -0
  257. package/lib/module/components/FieldFlowUpload/index.js.map +1 -0
  258. package/lib/module/hooks/index.js +5 -0
  259. package/lib/module/hooks/index.js.map +1 -1
  260. package/lib/module/hooks/useFieldFlowArray.js +106 -0
  261. package/lib/module/hooks/useFieldFlowArray.js.map +1 -0
  262. package/lib/module/hooks/useFieldFlowDirtyGuard.js +49 -0
  263. package/lib/module/hooks/useFieldFlowDirtyGuard.js.map +1 -0
  264. package/lib/module/hooks/useFieldFlowDraft.js +165 -0
  265. package/lib/module/hooks/useFieldFlowDraft.js.map +1 -0
  266. package/lib/module/hooks/useFieldFlowForm.js +351 -42
  267. package/lib/module/hooks/useFieldFlowForm.js.map +1 -1
  268. package/lib/module/hooks/useFieldFlowSteps.js +73 -0
  269. package/lib/module/hooks/useFieldFlowSteps.js.map +1 -0
  270. package/lib/module/hooks/useFormIntelligence.js +126 -0
  271. package/lib/module/hooks/useFormIntelligence.js.map +1 -0
  272. package/lib/module/i18n/index.js +4 -0
  273. package/lib/module/i18n/index.js.map +1 -0
  274. package/lib/module/i18n/messages.js +82 -0
  275. package/lib/module/i18n/messages.js.map +1 -0
  276. package/lib/module/icons/Icon.js +720 -31
  277. package/lib/module/icons/Icon.js.map +1 -1
  278. package/lib/module/icons/index.js +1 -0
  279. package/lib/module/icons/index.js.map +1 -1
  280. package/lib/module/icons/renderIcon.js +19 -0
  281. package/lib/module/icons/renderIcon.js.map +1 -0
  282. package/lib/module/index.js +42 -5
  283. package/lib/module/index.js.map +1 -1
  284. package/lib/module/intelligence/formAccessibility.js +72 -0
  285. package/lib/module/intelligence/formAccessibility.js.map +1 -0
  286. package/lib/module/intelligence/index.js +4 -0
  287. package/lib/module/intelligence/index.js.map +1 -0
  288. package/lib/module/intelligence/types.js +2 -0
  289. package/lib/module/intelligence/types.js.map +1 -0
  290. package/lib/module/motion/index.js +5 -0
  291. package/lib/module/motion/index.js.map +1 -0
  292. package/lib/module/motion/useFieldMotion.js +107 -0
  293. package/lib/module/motion/useFieldMotion.js.map +1 -0
  294. package/lib/module/motion/useReducedMotion.js +29 -0
  295. package/lib/module/motion/useReducedMotion.js.map +1 -0
  296. package/lib/module/theme/index.js +1 -0
  297. package/lib/module/theme/index.js.map +1 -1
  298. package/lib/module/theme/presets.js +138 -0
  299. package/lib/module/theme/presets.js.map +1 -0
  300. package/lib/module/utils/affordance.js +140 -0
  301. package/lib/module/utils/affordance.js.map +1 -0
  302. package/lib/module/utils/masks.js +118 -0
  303. package/lib/module/utils/masks.js.map +1 -0
  304. package/lib/module/utils/passwordStrength.js +74 -0
  305. package/lib/module/utils/passwordStrength.js.map +1 -0
  306. package/lib/module/utils/phoneCountries.js +113 -0
  307. package/lib/module/utils/phoneCountries.js.map +1 -0
  308. package/lib/module/validation/index.js +1 -0
  309. package/lib/module/validation/index.js.map +1 -1
  310. package/lib/module/validation/validators.js +10 -7
  311. package/lib/module/validation/validators.js.map +1 -1
  312. package/lib/module/validation/zodAdapter.js +84 -0
  313. package/lib/module/validation/zodAdapter.js.map +1 -0
  314. package/lib/typescript/adapters/index.d.ts +3 -0
  315. package/lib/typescript/adapters/index.d.ts.map +1 -0
  316. package/lib/typescript/adapters/reactHookForm.d.ts +56 -0
  317. package/lib/typescript/adapters/reactHookForm.d.ts.map +1 -0
  318. package/lib/typescript/components/FieldFlowAffordance/FieldFlowAffordance.d.ts +29 -0
  319. package/lib/typescript/components/FieldFlowAffordance/FieldFlowAffordance.d.ts.map +1 -0
  320. package/lib/typescript/components/FieldFlowAffordance/index.d.ts +3 -0
  321. package/lib/typescript/components/FieldFlowAffordance/index.d.ts.map +1 -0
  322. package/lib/typescript/components/FieldFlowCheckbox/FieldFlowCheckbox.d.ts +36 -0
  323. package/lib/typescript/components/FieldFlowCheckbox/FieldFlowCheckbox.d.ts.map +1 -0
  324. package/lib/typescript/components/FieldFlowCheckbox/index.d.ts +3 -0
  325. package/lib/typescript/components/FieldFlowCheckbox/index.d.ts.map +1 -0
  326. package/lib/typescript/components/FieldFlowCreditCard/FieldFlowCreditCard.d.ts +27 -0
  327. package/lib/typescript/components/FieldFlowCreditCard/FieldFlowCreditCard.d.ts.map +1 -0
  328. package/lib/typescript/components/FieldFlowCreditCard/index.d.ts +3 -0
  329. package/lib/typescript/components/FieldFlowCreditCard/index.d.ts.map +1 -0
  330. package/lib/typescript/components/FieldFlowDateTimePicker/FieldFlowDateTimePicker.d.ts +4 -0
  331. package/lib/typescript/components/FieldFlowDateTimePicker/FieldFlowDateTimePicker.d.ts.map +1 -0
  332. package/lib/typescript/components/FieldFlowDateTimePicker/index.d.ts +3 -0
  333. package/lib/typescript/components/FieldFlowDateTimePicker/index.d.ts.map +1 -0
  334. package/lib/typescript/components/FieldFlowDateTimePicker/types.d.ts +55 -0
  335. package/lib/typescript/components/FieldFlowDateTimePicker/types.d.ts.map +1 -0
  336. package/lib/typescript/components/FieldFlowDraftBanner/FieldFlowDraftBanner.d.ts +24 -0
  337. package/lib/typescript/components/FieldFlowDraftBanner/FieldFlowDraftBanner.d.ts.map +1 -0
  338. package/lib/typescript/components/FieldFlowDraftBanner/index.d.ts +3 -0
  339. package/lib/typescript/components/FieldFlowDraftBanner/index.d.ts.map +1 -0
  340. package/lib/typescript/components/FieldFlowDropdown/FieldFlowDropdown.d.ts.map +1 -1
  341. package/lib/typescript/components/FieldFlowDropdown/types.d.ts +7 -1
  342. package/lib/typescript/components/FieldFlowDropdown/types.d.ts.map +1 -1
  343. package/lib/typescript/components/FieldFlowInput/FieldFlowInput.d.ts.map +1 -1
  344. package/lib/typescript/components/FieldFlowInput/styles.d.ts +35 -2
  345. package/lib/typescript/components/FieldFlowInput/styles.d.ts.map +1 -1
  346. package/lib/typescript/components/FieldFlowInput/types.d.ts +55 -4
  347. package/lib/typescript/components/FieldFlowInput/types.d.ts.map +1 -1
  348. package/lib/typescript/components/FieldFlowMaskedInput/FieldFlowMaskedInput.d.ts +5 -0
  349. package/lib/typescript/components/FieldFlowMaskedInput/FieldFlowMaskedInput.d.ts.map +1 -0
  350. package/lib/typescript/components/FieldFlowMaskedInput/index.d.ts +3 -0
  351. package/lib/typescript/components/FieldFlowMaskedInput/index.d.ts.map +1 -0
  352. package/lib/typescript/components/FieldFlowMaskedInput/types.d.ts +20 -0
  353. package/lib/typescript/components/FieldFlowMaskedInput/types.d.ts.map +1 -0
  354. package/lib/typescript/components/FieldFlowNumberStepper/FieldFlowNumberStepper.d.ts +34 -0
  355. package/lib/typescript/components/FieldFlowNumberStepper/FieldFlowNumberStepper.d.ts.map +1 -0
  356. package/lib/typescript/components/FieldFlowNumberStepper/index.d.ts +3 -0
  357. package/lib/typescript/components/FieldFlowNumberStepper/index.d.ts.map +1 -0
  358. package/lib/typescript/components/FieldFlowOTP/FieldFlowOTP.d.ts +4 -0
  359. package/lib/typescript/components/FieldFlowOTP/FieldFlowOTP.d.ts.map +1 -0
  360. package/lib/typescript/components/FieldFlowOTP/index.d.ts +3 -0
  361. package/lib/typescript/components/FieldFlowOTP/index.d.ts.map +1 -0
  362. package/lib/typescript/components/FieldFlowOTP/types.d.ts +52 -0
  363. package/lib/typescript/components/FieldFlowOTP/types.d.ts.map +1 -0
  364. package/lib/typescript/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.d.ts +26 -0
  365. package/lib/typescript/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.d.ts.map +1 -0
  366. package/lib/typescript/components/FieldFlowPasswordStrength/index.d.ts +3 -0
  367. package/lib/typescript/components/FieldFlowPasswordStrength/index.d.ts.map +1 -0
  368. package/lib/typescript/components/FieldFlowPhone/FieldFlowPhone.d.ts +40 -0
  369. package/lib/typescript/components/FieldFlowPhone/FieldFlowPhone.d.ts.map +1 -0
  370. package/lib/typescript/components/FieldFlowPhone/index.d.ts +3 -0
  371. package/lib/typescript/components/FieldFlowPhone/index.d.ts.map +1 -0
  372. package/lib/typescript/components/FieldFlowRadio/FieldFlowRadio.d.ts +39 -0
  373. package/lib/typescript/components/FieldFlowRadio/FieldFlowRadio.d.ts.map +1 -0
  374. package/lib/typescript/components/FieldFlowRadio/index.d.ts +3 -0
  375. package/lib/typescript/components/FieldFlowRadio/index.d.ts.map +1 -0
  376. package/lib/typescript/components/FieldFlowRating/FieldFlowRating.d.ts +30 -0
  377. package/lib/typescript/components/FieldFlowRating/FieldFlowRating.d.ts.map +1 -0
  378. package/lib/typescript/components/FieldFlowRating/index.d.ts +3 -0
  379. package/lib/typescript/components/FieldFlowRating/index.d.ts.map +1 -0
  380. package/lib/typescript/components/FieldFlowSection/FieldFlowSection.d.ts +35 -0
  381. package/lib/typescript/components/FieldFlowSection/FieldFlowSection.d.ts.map +1 -0
  382. package/lib/typescript/components/FieldFlowSection/index.d.ts +3 -0
  383. package/lib/typescript/components/FieldFlowSection/index.d.ts.map +1 -0
  384. package/lib/typescript/components/FieldFlowSegmented/FieldFlowSegmented.d.ts +28 -0
  385. package/lib/typescript/components/FieldFlowSegmented/FieldFlowSegmented.d.ts.map +1 -0
  386. package/lib/typescript/components/FieldFlowSegmented/index.d.ts +3 -0
  387. package/lib/typescript/components/FieldFlowSegmented/index.d.ts.map +1 -0
  388. package/lib/typescript/components/FieldFlowSignature/FieldFlowSignature.d.ts +41 -0
  389. package/lib/typescript/components/FieldFlowSignature/FieldFlowSignature.d.ts.map +1 -0
  390. package/lib/typescript/components/FieldFlowSignature/index.d.ts +3 -0
  391. package/lib/typescript/components/FieldFlowSignature/index.d.ts.map +1 -0
  392. package/lib/typescript/components/FieldFlowSlider/FieldFlowSlider.d.ts +30 -0
  393. package/lib/typescript/components/FieldFlowSlider/FieldFlowSlider.d.ts.map +1 -0
  394. package/lib/typescript/components/FieldFlowSlider/index.d.ts +3 -0
  395. package/lib/typescript/components/FieldFlowSlider/index.d.ts.map +1 -0
  396. package/lib/typescript/components/FieldFlowStepper/FieldFlowStepper.d.ts +31 -0
  397. package/lib/typescript/components/FieldFlowStepper/FieldFlowStepper.d.ts.map +1 -0
  398. package/lib/typescript/components/FieldFlowStepper/index.d.ts +3 -0
  399. package/lib/typescript/components/FieldFlowStepper/index.d.ts.map +1 -0
  400. package/lib/typescript/components/FieldFlowSwitch/FieldFlowSwitch.d.ts +31 -0
  401. package/lib/typescript/components/FieldFlowSwitch/FieldFlowSwitch.d.ts.map +1 -0
  402. package/lib/typescript/components/FieldFlowSwitch/index.d.ts +3 -0
  403. package/lib/typescript/components/FieldFlowSwitch/index.d.ts.map +1 -0
  404. package/lib/typescript/components/FieldFlowTags/FieldFlowTags.d.ts +41 -0
  405. package/lib/typescript/components/FieldFlowTags/FieldFlowTags.d.ts.map +1 -0
  406. package/lib/typescript/components/FieldFlowTags/index.d.ts +3 -0
  407. package/lib/typescript/components/FieldFlowTags/index.d.ts.map +1 -0
  408. package/lib/typescript/components/FieldFlowTypeahead/FieldFlowTypeahead.d.ts +43 -0
  409. package/lib/typescript/components/FieldFlowTypeahead/FieldFlowTypeahead.d.ts.map +1 -0
  410. package/lib/typescript/components/FieldFlowTypeahead/index.d.ts +3 -0
  411. package/lib/typescript/components/FieldFlowTypeahead/index.d.ts.map +1 -0
  412. package/lib/typescript/components/FieldFlowUpload/FieldFlowUpload.d.ts +52 -0
  413. package/lib/typescript/components/FieldFlowUpload/FieldFlowUpload.d.ts.map +1 -0
  414. package/lib/typescript/components/FieldFlowUpload/index.d.ts +3 -0
  415. package/lib/typescript/components/FieldFlowUpload/index.d.ts.map +1 -0
  416. package/lib/typescript/hooks/index.d.ts +11 -1
  417. package/lib/typescript/hooks/index.d.ts.map +1 -1
  418. package/lib/typescript/hooks/useFieldFlowArray.d.ts +54 -0
  419. package/lib/typescript/hooks/useFieldFlowArray.d.ts.map +1 -0
  420. package/lib/typescript/hooks/useFieldFlowDirtyGuard.d.ts +26 -0
  421. package/lib/typescript/hooks/useFieldFlowDirtyGuard.d.ts.map +1 -0
  422. package/lib/typescript/hooks/useFieldFlowDraft.d.ts +64 -0
  423. package/lib/typescript/hooks/useFieldFlowDraft.d.ts.map +1 -0
  424. package/lib/typescript/hooks/useFieldFlowForm.d.ts +124 -7
  425. package/lib/typescript/hooks/useFieldFlowForm.d.ts.map +1 -1
  426. package/lib/typescript/hooks/useFieldFlowSteps.d.ts +42 -0
  427. package/lib/typescript/hooks/useFieldFlowSteps.d.ts.map +1 -0
  428. package/lib/typescript/hooks/useFormIntelligence.d.ts +23 -0
  429. package/lib/typescript/hooks/useFormIntelligence.d.ts.map +1 -0
  430. package/lib/typescript/i18n/index.d.ts +3 -0
  431. package/lib/typescript/i18n/index.d.ts.map +1 -0
  432. package/lib/typescript/i18n/messages.d.ts +16 -0
  433. package/lib/typescript/i18n/messages.d.ts.map +1 -0
  434. package/lib/typescript/icons/Icon.d.ts +2 -2
  435. package/lib/typescript/icons/Icon.d.ts.map +1 -1
  436. package/lib/typescript/icons/index.d.ts +2 -0
  437. package/lib/typescript/icons/index.d.ts.map +1 -1
  438. package/lib/typescript/icons/renderIcon.d.ts +6 -0
  439. package/lib/typescript/icons/renderIcon.d.ts.map +1 -0
  440. package/lib/typescript/index.d.ts +67 -9
  441. package/lib/typescript/index.d.ts.map +1 -1
  442. package/lib/typescript/intelligence/formAccessibility.d.ts +21 -0
  443. package/lib/typescript/intelligence/formAccessibility.d.ts.map +1 -0
  444. package/lib/typescript/intelligence/index.d.ts +4 -0
  445. package/lib/typescript/intelligence/index.d.ts.map +1 -0
  446. package/lib/typescript/intelligence/types.d.ts +36 -0
  447. package/lib/typescript/intelligence/types.d.ts.map +1 -0
  448. package/lib/typescript/motion/index.d.ts +4 -0
  449. package/lib/typescript/motion/index.d.ts.map +1 -0
  450. package/lib/typescript/motion/useFieldMotion.d.ts +31 -0
  451. package/lib/typescript/motion/useFieldMotion.d.ts.map +1 -0
  452. package/lib/typescript/motion/useReducedMotion.d.ts +5 -0
  453. package/lib/typescript/motion/useReducedMotion.d.ts.map +1 -0
  454. package/lib/typescript/theme/index.d.ts +2 -0
  455. package/lib/typescript/theme/index.d.ts.map +1 -1
  456. package/lib/typescript/theme/presets.d.ts +134 -0
  457. package/lib/typescript/theme/presets.d.ts.map +1 -0
  458. package/lib/typescript/types/index.d.ts +4 -0
  459. package/lib/typescript/types/index.d.ts.map +1 -1
  460. package/lib/typescript/utils/affordance.d.ts +36 -0
  461. package/lib/typescript/utils/affordance.d.ts.map +1 -0
  462. package/lib/typescript/utils/masks.d.ts +37 -0
  463. package/lib/typescript/utils/masks.d.ts.map +1 -0
  464. package/lib/typescript/utils/passwordStrength.d.ts +26 -0
  465. package/lib/typescript/utils/passwordStrength.d.ts.map +1 -0
  466. package/lib/typescript/utils/phoneCountries.d.ts +12 -0
  467. package/lib/typescript/utils/phoneCountries.d.ts.map +1 -0
  468. package/lib/typescript/validation/index.d.ts +2 -0
  469. package/lib/typescript/validation/index.d.ts.map +1 -1
  470. package/lib/typescript/validation/validators.d.ts +3 -1
  471. package/lib/typescript/validation/validators.d.ts.map +1 -1
  472. package/lib/typescript/validation/zodAdapter.d.ts +53 -0
  473. package/lib/typescript/validation/zodAdapter.d.ts.map +1 -0
  474. package/package.json +34 -3
  475. package/src/adapters/index.ts +9 -0
  476. package/src/adapters/reactHookForm.tsx +152 -0
  477. package/src/components/FieldFlowAffordance/FieldFlowAffordance.tsx +143 -0
  478. package/src/components/FieldFlowAffordance/index.ts +2 -0
  479. package/src/components/FieldFlowCheckbox/FieldFlowCheckbox.tsx +174 -0
  480. package/src/components/FieldFlowCheckbox/index.ts +2 -0
  481. package/src/components/FieldFlowCreditCard/FieldFlowCreditCard.tsx +152 -0
  482. package/src/components/FieldFlowCreditCard/index.ts +2 -0
  483. package/src/components/FieldFlowDateTimePicker/FieldFlowDateTimePicker.tsx +585 -0
  484. package/src/components/FieldFlowDateTimePicker/index.ts +2 -0
  485. package/src/components/FieldFlowDateTimePicker/types.ts +57 -0
  486. package/src/components/FieldFlowDraftBanner/FieldFlowDraftBanner.tsx +169 -0
  487. package/src/components/FieldFlowDraftBanner/index.ts +2 -0
  488. package/src/components/FieldFlowDropdown/FieldFlowDropdown.tsx +17 -7
  489. package/src/components/FieldFlowDropdown/types.ts +8 -1
  490. package/src/components/FieldFlowInput/FieldFlowInput.tsx +230 -66
  491. package/src/components/FieldFlowInput/styles.ts +57 -6
  492. package/src/components/FieldFlowInput/types.ts +56 -4
  493. package/src/components/FieldFlowMaskedInput/FieldFlowMaskedInput.tsx +76 -0
  494. package/src/components/FieldFlowMaskedInput/index.ts +2 -0
  495. package/src/components/FieldFlowMaskedInput/types.ts +22 -0
  496. package/src/components/FieldFlowNumberStepper/FieldFlowNumberStepper.tsx +156 -0
  497. package/src/components/FieldFlowNumberStepper/index.ts +2 -0
  498. package/src/components/FieldFlowOTP/FieldFlowOTP.tsx +305 -0
  499. package/src/components/FieldFlowOTP/index.ts +2 -0
  500. package/src/components/FieldFlowOTP/types.ts +57 -0
  501. package/src/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.tsx +148 -0
  502. package/src/components/FieldFlowPasswordStrength/index.ts +2 -0
  503. package/src/components/FieldFlowPhone/FieldFlowPhone.tsx +298 -0
  504. package/src/components/FieldFlowPhone/index.ts +2 -0
  505. package/src/components/FieldFlowRadio/FieldFlowRadio.tsx +215 -0
  506. package/src/components/FieldFlowRadio/index.ts +2 -0
  507. package/src/components/FieldFlowRating/FieldFlowRating.tsx +121 -0
  508. package/src/components/FieldFlowRating/index.ts +2 -0
  509. package/src/components/FieldFlowSection/FieldFlowSection.tsx +176 -0
  510. package/src/components/FieldFlowSection/index.ts +2 -0
  511. package/src/components/FieldFlowSegmented/FieldFlowSegmented.tsx +248 -0
  512. package/src/components/FieldFlowSegmented/index.ts +2 -0
  513. package/src/components/FieldFlowSignature/FieldFlowSignature.tsx +241 -0
  514. package/src/components/FieldFlowSignature/index.ts +7 -0
  515. package/src/components/FieldFlowSlider/FieldFlowSlider.tsx +190 -0
  516. package/src/components/FieldFlowSlider/index.ts +2 -0
  517. package/src/components/FieldFlowStepper/FieldFlowStepper.tsx +190 -0
  518. package/src/components/FieldFlowStepper/index.ts +2 -0
  519. package/src/components/FieldFlowSwitch/FieldFlowSwitch.tsx +172 -0
  520. package/src/components/FieldFlowSwitch/index.ts +2 -0
  521. package/src/components/FieldFlowTags/FieldFlowTags.tsx +319 -0
  522. package/src/components/FieldFlowTags/index.ts +2 -0
  523. package/src/components/FieldFlowTypeahead/FieldFlowTypeahead.tsx +261 -0
  524. package/src/components/FieldFlowTypeahead/index.ts +2 -0
  525. package/src/components/FieldFlowUpload/FieldFlowUpload.tsx +226 -0
  526. package/src/components/FieldFlowUpload/index.ts +6 -0
  527. package/src/hooks/index.ts +34 -0
  528. package/src/hooks/useFieldFlowArray.ts +153 -0
  529. package/src/hooks/useFieldFlowDirtyGuard.ts +70 -0
  530. package/src/hooks/useFieldFlowDraft.ts +221 -0
  531. package/src/hooks/useFieldFlowForm.ts +545 -40
  532. package/src/hooks/useFieldFlowSteps.ts +130 -0
  533. package/src/hooks/useFormIntelligence.ts +207 -0
  534. package/src/i18n/index.ts +6 -0
  535. package/src/i18n/messages.ts +101 -0
  536. package/src/icons/Icon.tsx +451 -5
  537. package/src/icons/index.ts +2 -0
  538. package/src/icons/renderIcon.tsx +17 -0
  539. package/src/index.ts +208 -7
  540. package/src/intelligence/formAccessibility.ts +87 -0
  541. package/src/intelligence/index.ts +12 -0
  542. package/src/intelligence/types.ts +34 -0
  543. package/src/motion/index.ts +3 -0
  544. package/src/motion/useFieldMotion.ts +120 -0
  545. package/src/motion/useReducedMotion.ts +31 -0
  546. package/src/theme/index.ts +2 -0
  547. package/src/theme/presets.ts +120 -0
  548. package/src/types/index.ts +5 -0
  549. package/src/utils/affordance.ts +138 -0
  550. package/src/utils/masks.ts +137 -0
  551. package/src/utils/passwordStrength.ts +109 -0
  552. package/src/utils/phoneCountries.ts +44 -0
  553. package/src/validation/index.ts +7 -0
  554. package/src/validation/validators.ts +17 -7
  555. package/src/validation/zodAdapter.ts +103 -0
@@ -0,0 +1,176 @@
1
+ import React, { useMemo, useState } from 'react';
2
+ import {
3
+ LayoutAnimation,
4
+ Platform,
5
+ Pressable,
6
+ StyleSheet,
7
+ Text,
8
+ UIManager,
9
+ View,
10
+ type TextStyle,
11
+ type ViewStyle,
12
+ } from 'react-native';
13
+ import { useFieldFlowTheme, mergeDeep } from '../../theme/ThemeProvider';
14
+ import { defaultTheme } from '../../theme/defaultTheme';
15
+ import { renderFieldFlowIcon, type FieldFlowIconSource } from '../../icons';
16
+ import type { DeepPartial, FieldFlowTheme } from '../../types';
17
+
18
+ if (Platform.OS === 'android' && UIManager.setLayoutAnimationEnabledExperimental) {
19
+ UIManager.setLayoutAnimationEnabledExperimental(true);
20
+ }
21
+
22
+ export interface FieldFlowSectionProps {
23
+ title?: string;
24
+ description?: string;
25
+ /** Leading icon next to the title. */
26
+ icon?: FieldFlowIconSource;
27
+ children: React.ReactNode;
28
+ /** Soft card surface (default) vs flush / borderless. */
29
+ elevated?: boolean;
30
+ /** Allow collapsing the body. Default: false. */
31
+ collapsible?: boolean;
32
+ /** Initial open state when collapsible. Default: true. */
33
+ defaultOpen?: boolean;
34
+ /** Controlled open state. */
35
+ open?: boolean;
36
+ onOpenChange?: (open: boolean) => void;
37
+ /** Optional trailing header action (e.g. “Edit”). */
38
+ headerRight?: React.ReactNode;
39
+ containerStyle?: ViewStyle;
40
+ headerStyle?: ViewStyle;
41
+ bodyStyle?: ViewStyle;
42
+ titleStyle?: TextStyle;
43
+ descriptionStyle?: TextStyle;
44
+ theme?: DeepPartial<FieldFlowTheme>;
45
+ testID?: string;
46
+ }
47
+
48
+ /**
49
+ * Themed form surface — groups related fields into a designed card with
50
+ * optional icon, description, and collapse.
51
+ */
52
+ export function FieldFlowSection({
53
+ title,
54
+ description,
55
+ icon,
56
+ children,
57
+ elevated = true,
58
+ collapsible = false,
59
+ defaultOpen = true,
60
+ open: openProp,
61
+ onOpenChange,
62
+ headerRight,
63
+ containerStyle,
64
+ headerStyle,
65
+ bodyStyle,
66
+ titleStyle,
67
+ descriptionStyle,
68
+ theme: themeOverride,
69
+ testID,
70
+ }: FieldFlowSectionProps) {
71
+ const contextTheme = useFieldFlowTheme();
72
+ const theme = useMemo(
73
+ () => (themeOverride ? mergeDeep(contextTheme ?? defaultTheme, themeOverride) : contextTheme ?? defaultTheme),
74
+ [contextTheme, themeOverride],
75
+ );
76
+ const styles = useMemo(() => createStyles(theme, elevated), [theme, elevated]);
77
+
78
+ const [internalOpen, setInternalOpen] = useState(defaultOpen);
79
+ const isControlled = openProp !== undefined;
80
+ const open = isControlled ? openProp : internalOpen;
81
+
82
+ const toggle = () => {
83
+ const next = !open;
84
+ LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
85
+ if (!isControlled) setInternalOpen(next);
86
+ onOpenChange?.(next);
87
+ };
88
+
89
+ const showHeader = Boolean(title || description || icon || headerRight || collapsible);
90
+
91
+ return (
92
+ <View style={[styles.card, containerStyle]} testID={testID}>
93
+ {showHeader ? (
94
+ <Pressable
95
+ onPress={collapsible ? toggle : undefined}
96
+ disabled={!collapsible}
97
+ style={[styles.header, headerStyle]}
98
+ accessibilityRole={collapsible ? 'button' : undefined}
99
+ accessibilityState={collapsible ? { expanded: open } : undefined}
100
+ >
101
+ {icon ? (
102
+ <View style={styles.iconWrap}>{renderFieldFlowIcon(icon, theme.colors.borderFocused, 18)}</View>
103
+ ) : null}
104
+ <View style={styles.headerCopy}>
105
+ {title ? <Text style={[styles.title, titleStyle]}>{title}</Text> : null}
106
+ {description ? <Text style={[styles.description, descriptionStyle]}>{description}</Text> : null}
107
+ </View>
108
+ {headerRight}
109
+ {collapsible
110
+ ? renderFieldFlowIcon(open ? 'chevronUp' : 'chevronDown', theme.colors.icon, 18)
111
+ : null}
112
+ </Pressable>
113
+ ) : null}
114
+
115
+ {(!collapsible || open) && <View style={[styles.body, bodyStyle]}>{children}</View>}
116
+ </View>
117
+ );
118
+ }
119
+
120
+ function createStyles(theme: FieldFlowTheme, elevated: boolean) {
121
+ return StyleSheet.create({
122
+ card: {
123
+ marginBottom: theme.spacing.gap * 2.5,
124
+ borderRadius: theme.spacing.borderRadius + 4,
125
+ backgroundColor: theme.colors.background,
126
+ borderWidth: elevated ? theme.spacing.borderWidth : 0,
127
+ borderColor: theme.colors.border,
128
+ overflow: 'hidden',
129
+ ...(elevated
130
+ ? {
131
+ shadowColor: '#000',
132
+ shadowOpacity: 0.06,
133
+ shadowRadius: 12,
134
+ shadowOffset: { width: 0, height: 4 },
135
+ elevation: 2,
136
+ }
137
+ : null),
138
+ },
139
+ header: {
140
+ flexDirection: 'row',
141
+ alignItems: 'center',
142
+ gap: theme.spacing.gap,
143
+ paddingHorizontal: theme.spacing.paddingHorizontal + 2,
144
+ paddingTop: theme.spacing.paddingVertical + 2,
145
+ paddingBottom: theme.spacing.paddingVertical / 1.5,
146
+ },
147
+ iconWrap: {
148
+ width: 36,
149
+ height: 36,
150
+ borderRadius: 10,
151
+ alignItems: 'center',
152
+ justifyContent: 'center',
153
+ backgroundColor: theme.colors.backgroundDisabled,
154
+ },
155
+ headerCopy: {
156
+ flex: 1,
157
+ },
158
+ title: {
159
+ fontSize: theme.typography.fontSize + 1,
160
+ fontWeight: '600',
161
+ color: theme.colors.text,
162
+ fontFamily: theme.typography.fontFamily,
163
+ },
164
+ description: {
165
+ marginTop: 2,
166
+ fontSize: theme.typography.helperFontSize,
167
+ color: theme.colors.label,
168
+ fontFamily: theme.typography.fontFamily,
169
+ },
170
+ body: {
171
+ paddingHorizontal: theme.spacing.paddingHorizontal + 2,
172
+ paddingBottom: theme.spacing.paddingVertical + 4,
173
+ paddingTop: theme.spacing.gap,
174
+ },
175
+ });
176
+ }
@@ -0,0 +1,2 @@
1
+ export { FieldFlowSection } from './FieldFlowSection';
2
+ export type { FieldFlowSectionProps } from './FieldFlowSection';
@@ -0,0 +1,248 @@
1
+ import React, { useEffect, useMemo, useRef } from 'react';
2
+ import {
3
+ Animated,
4
+ Pressable,
5
+ StyleSheet,
6
+ Text,
7
+ View,
8
+ type LayoutChangeEvent,
9
+ type TextStyle,
10
+ type ViewStyle,
11
+ } from 'react-native';
12
+ import { useFieldFlowTheme, mergeDeep } from '../../theme/ThemeProvider';
13
+ import { defaultTheme } from '../../theme/defaultTheme';
14
+ import { renderFieldFlowIcon } from '../../icons/renderIcon';
15
+ import { useReducedMotion } from '../../motion/useReducedMotion';
16
+ import type { DeepPartial, FieldFlowOption, FieldFlowTheme } from '../../types';
17
+
18
+ export interface FieldFlowSegmentedProps {
19
+ options: FieldFlowOption[];
20
+ value?: string | null;
21
+ onChange: (value: string) => void;
22
+ label?: string;
23
+ helperText?: string;
24
+ errorText?: string;
25
+ disabled?: boolean;
26
+ required?: boolean;
27
+ /** Equal-width segments. Default: true. */
28
+ equalWidth?: boolean;
29
+ containerStyle?: ViewStyle;
30
+ trackStyle?: ViewStyle;
31
+ segmentStyle?: ViewStyle;
32
+ labelStyle?: TextStyle;
33
+ helperStyle?: TextStyle;
34
+ theme?: DeepPartial<FieldFlowTheme>;
35
+ testID?: string;
36
+ }
37
+
38
+ /**
39
+ * Animated pill segmented control — plan pickers, account type, filters.
40
+ * Matches FieldFlow theming and supports option icons.
41
+ */
42
+ export function FieldFlowSegmented({
43
+ options,
44
+ value,
45
+ onChange,
46
+ label,
47
+ helperText,
48
+ errorText,
49
+ disabled,
50
+ required,
51
+ equalWidth = true,
52
+ containerStyle,
53
+ trackStyle,
54
+ segmentStyle,
55
+ labelStyle,
56
+ helperStyle,
57
+ theme: themeOverride,
58
+ testID,
59
+ }: FieldFlowSegmentedProps) {
60
+ const contextTheme = useFieldFlowTheme();
61
+ const theme = useMemo(
62
+ () => (themeOverride ? mergeDeep(contextTheme ?? defaultTheme, themeOverride) : contextTheme ?? defaultTheme),
63
+ [contextTheme, themeOverride],
64
+ );
65
+ const styles = useMemo(() => createStyles(theme, Boolean(errorText), Boolean(disabled)), [theme, errorText, disabled]);
66
+ const reducedMotion = useReducedMotion();
67
+
68
+ const selectedIndex = Math.max(
69
+ 0,
70
+ options.findIndex(o => o.value === value),
71
+ );
72
+ const [trackWidth, setTrackWidth] = React.useState(0);
73
+ const translate = useRef(new Animated.Value(0)).current;
74
+
75
+ const segmentWidth = options.length > 0 && trackWidth > 0 ? trackWidth / options.length : 0;
76
+
77
+ useEffect(() => {
78
+ if (!equalWidth || segmentWidth <= 0) return;
79
+ const to = selectedIndex * segmentWidth + 2;
80
+ if (reducedMotion) {
81
+ translate.setValue(to);
82
+ return;
83
+ }
84
+ Animated.spring(translate, {
85
+ toValue: to,
86
+ friction: 8,
87
+ tension: 120,
88
+ useNativeDriver: true,
89
+ }).start();
90
+ }, [selectedIndex, segmentWidth, equalWidth, reducedMotion, translate]);
91
+
92
+ const onTrackLayout = (e: LayoutChangeEvent) => {
93
+ setTrackWidth(e.nativeEvent.layout.width);
94
+ };
95
+
96
+ return (
97
+ <View style={[styles.wrapper, containerStyle]} testID={testID}>
98
+ {label ? (
99
+ <Text style={[styles.label, labelStyle]}>
100
+ {label}
101
+ {required ? ' *' : ''}
102
+ </Text>
103
+ ) : null}
104
+
105
+ <View
106
+ style={[styles.track, trackStyle]}
107
+ onLayout={onTrackLayout}
108
+ accessibilityRole="tablist"
109
+ >
110
+ {equalWidth && segmentWidth > 0 ? (
111
+ <Animated.View
112
+ pointerEvents="none"
113
+ style={[
114
+ styles.thumb,
115
+ {
116
+ width: segmentWidth - 4,
117
+ transform: [{ translateX: translate }],
118
+ },
119
+ ]}
120
+ />
121
+ ) : null}
122
+
123
+ {options.map(option => {
124
+ const isSelected = option.value === value;
125
+ const itemDisabled = disabled || option.disabled;
126
+ return (
127
+ <Pressable
128
+ key={option.value}
129
+ onPress={() => !itemDisabled && onChange(option.value)}
130
+ disabled={itemDisabled}
131
+ style={[
132
+ styles.segment,
133
+ equalWidth && { flex: 1 },
134
+ !equalWidth && isSelected && styles.segmentSelectedStatic,
135
+ segmentStyle,
136
+ itemDisabled && styles.segmentDisabled,
137
+ ]}
138
+ accessibilityRole="tab"
139
+ accessibilityState={{ selected: isSelected, disabled: Boolean(itemDisabled) }}
140
+ accessibilityLabel={option.label}
141
+ >
142
+ {option.icon ? (
143
+ <View style={styles.segmentIcon}>
144
+ {renderFieldFlowIcon(
145
+ option.icon,
146
+ isSelected ? theme.colors.borderFocused : theme.colors.icon,
147
+ 14,
148
+ )}
149
+ </View>
150
+ ) : null}
151
+ <Text
152
+ style={[styles.segmentText, isSelected && styles.segmentTextSelected]}
153
+ numberOfLines={1}
154
+ >
155
+ {option.label}
156
+ </Text>
157
+ </Pressable>
158
+ );
159
+ })}
160
+ </View>
161
+
162
+ {errorText ? (
163
+ <Text style={[styles.errorText, helperStyle]}>{errorText}</Text>
164
+ ) : helperText ? (
165
+ <Text style={[styles.helperText, helperStyle]}>{helperText}</Text>
166
+ ) : null}
167
+ </View>
168
+ );
169
+ }
170
+
171
+ function createStyles(theme: FieldFlowTheme, hasError: boolean, disabled: boolean) {
172
+ return StyleSheet.create({
173
+ wrapper: {
174
+ marginBottom: theme.spacing.gap * 2,
175
+ opacity: disabled ? 0.6 : 1,
176
+ },
177
+ label: {
178
+ fontSize: theme.typography.labelFontSize,
179
+ marginBottom: theme.spacing.gap,
180
+ color: hasError ? theme.colors.error : theme.colors.label,
181
+ fontWeight: '500',
182
+ fontFamily: theme.typography.fontFamily,
183
+ },
184
+ track: {
185
+ flexDirection: 'row',
186
+ alignItems: 'center',
187
+ backgroundColor: theme.colors.backgroundDisabled,
188
+ borderRadius: theme.spacing.borderRadius + 2,
189
+ padding: 2,
190
+ borderWidth: hasError ? theme.spacing.borderWidth : 0,
191
+ borderColor: theme.colors.borderError,
192
+ position: 'relative',
193
+ overflow: 'hidden',
194
+ },
195
+ thumb: {
196
+ position: 'absolute',
197
+ top: 2,
198
+ bottom: 2,
199
+ left: 0,
200
+ borderRadius: theme.spacing.borderRadius,
201
+ backgroundColor: theme.colors.background,
202
+ shadowColor: '#000',
203
+ shadowOpacity: 0.08,
204
+ shadowRadius: 4,
205
+ shadowOffset: { width: 0, height: 1 },
206
+ elevation: 2,
207
+ },
208
+ segment: {
209
+ flexDirection: 'row',
210
+ alignItems: 'center',
211
+ justifyContent: 'center',
212
+ gap: 6,
213
+ paddingVertical: 10,
214
+ paddingHorizontal: 12,
215
+ zIndex: 1,
216
+ },
217
+ segmentSelectedStatic: {
218
+ backgroundColor: theme.colors.background,
219
+ borderRadius: theme.spacing.borderRadius,
220
+ },
221
+ segmentDisabled: {
222
+ opacity: 0.45,
223
+ },
224
+ segmentIcon: {
225
+ marginRight: 0,
226
+ },
227
+ segmentText: {
228
+ fontSize: theme.typography.helperFontSize + 1,
229
+ color: theme.colors.label,
230
+ fontWeight: '500',
231
+ fontFamily: theme.typography.fontFamily,
232
+ },
233
+ segmentTextSelected: {
234
+ color: theme.colors.text,
235
+ fontWeight: '600',
236
+ },
237
+ helperText: {
238
+ marginTop: theme.spacing.gap / 1.5,
239
+ fontSize: theme.typography.helperFontSize,
240
+ color: theme.colors.label,
241
+ },
242
+ errorText: {
243
+ marginTop: theme.spacing.gap / 1.5,
244
+ fontSize: theme.typography.helperFontSize,
245
+ color: theme.colors.error,
246
+ },
247
+ });
248
+ }
@@ -0,0 +1,2 @@
1
+ export { FieldFlowSegmented } from './FieldFlowSegmented';
2
+ export type { FieldFlowSegmentedProps } from './FieldFlowSegmented';
@@ -0,0 +1,241 @@
1
+ import React, { useMemo, useRef, useState } from 'react';
2
+ import {
3
+ PanResponder,
4
+ Pressable,
5
+ StyleSheet,
6
+ Text,
7
+ View,
8
+ type TextStyle,
9
+ type ViewStyle,
10
+ } from 'react-native';
11
+ import { useFieldFlowTheme, mergeDeep } from '../../theme/ThemeProvider';
12
+ import { defaultTheme } from '../../theme/defaultTheme';
13
+ import type { DeepPartial, FieldFlowTheme } from '../../types';
14
+
15
+ export interface FieldFlowPoint {
16
+ x: number;
17
+ y: number;
18
+ }
19
+
20
+ export type FieldFlowStroke = FieldFlowPoint[];
21
+
22
+ export interface FieldFlowSignatureValue {
23
+ strokes: FieldFlowStroke[];
24
+ /** True when at least one stroke exists. */
25
+ isEmpty: boolean;
26
+ }
27
+
28
+ export interface FieldFlowSignatureProps {
29
+ value?: FieldFlowSignatureValue | null;
30
+ onChange: (value: FieldFlowSignatureValue) => void;
31
+ label?: string;
32
+ helperText?: string;
33
+ errorText?: string;
34
+ disabled?: boolean;
35
+ required?: boolean;
36
+ height?: number;
37
+ strokeWidth?: number;
38
+ strokeColor?: string;
39
+ clearLabel?: string;
40
+ /** Empty-pad hint (default “Sign here”). */
41
+ placeholder?: string;
42
+ /** Custom clear control. Call `clear()` to wipe strokes. */
43
+ renderClear?: (ctx: { clear: () => void; isEmpty: boolean }) => React.ReactNode;
44
+ /** Custom empty overlay inside the pad. */
45
+ renderPlaceholder?: () => React.ReactNode;
46
+ containerStyle?: ViewStyle;
47
+ labelStyle?: TextStyle;
48
+ theme?: DeepPartial<FieldFlowTheme>;
49
+ testID?: string;
50
+ }
51
+
52
+ function SignatureSegment({
53
+ p1,
54
+ p2,
55
+ color,
56
+ thickness,
57
+ }: {
58
+ p1: FieldFlowPoint;
59
+ p2: FieldFlowPoint;
60
+ color: string;
61
+ thickness: number;
62
+ }) {
63
+ const dx = p2.x - p1.x;
64
+ const dy = p2.y - p1.y;
65
+ const len = Math.sqrt(dx * dx + dy * dy) || 0.01;
66
+ const angle = (Math.atan2(dy, dx) * 180) / Math.PI;
67
+ return (
68
+ <View
69
+ pointerEvents="none"
70
+ style={{
71
+ position: 'absolute',
72
+ left: p1.x,
73
+ top: p1.y,
74
+ width: len,
75
+ height: thickness,
76
+ backgroundColor: color,
77
+ borderRadius: thickness / 2,
78
+ transform: [{ translateY: -thickness / 2 }, { rotate: `${angle}deg` }],
79
+ }}
80
+ />
81
+ );
82
+ }
83
+
84
+ export function FieldFlowSignature({
85
+ value,
86
+ onChange,
87
+ label,
88
+ helperText,
89
+ errorText,
90
+ disabled,
91
+ required,
92
+ height = 160,
93
+ strokeWidth = 2.5,
94
+ strokeColor,
95
+ clearLabel = 'Clear',
96
+ placeholder = 'Sign here',
97
+ renderClear,
98
+ renderPlaceholder,
99
+ containerStyle,
100
+ labelStyle,
101
+ theme: themeOverride,
102
+ testID,
103
+ }: FieldFlowSignatureProps) {
104
+ const contextTheme = useFieldFlowTheme();
105
+ const theme = useMemo(
106
+ () => (themeOverride ? mergeDeep(contextTheme ?? defaultTheme, themeOverride) : contextTheme ?? defaultTheme),
107
+ [contextTheme, themeOverride],
108
+ );
109
+ const styles = useMemo(() => createStyles(theme, Boolean(errorText), Boolean(disabled)), [theme, errorText, disabled]);
110
+ const color = strokeColor ?? theme.colors.text;
111
+
112
+ const strokes = value?.strokes ?? [];
113
+ const strokesRef = useRef(strokes);
114
+ strokesRef.current = strokes;
115
+ const currentRef = useRef<FieldFlowPoint[]>([]);
116
+ const [, setTick] = useState(0);
117
+ const bump = () => setTick(t => t + 1);
118
+
119
+ const emit = (next: FieldFlowStroke[]) => {
120
+ onChange({ strokes: next, isEmpty: next.length === 0 });
121
+ };
122
+
123
+ const pan = useRef(
124
+ PanResponder.create({
125
+ onStartShouldSetPanResponder: () => !disabled,
126
+ onMoveShouldSetPanResponder: () => !disabled,
127
+ onPanResponderGrant: e => {
128
+ currentRef.current = [{ x: e.nativeEvent.locationX, y: e.nativeEvent.locationY }];
129
+ bump();
130
+ },
131
+ onPanResponderMove: e => {
132
+ currentRef.current = [
133
+ ...currentRef.current,
134
+ { x: e.nativeEvent.locationX, y: e.nativeEvent.locationY },
135
+ ];
136
+ bump();
137
+ },
138
+ onPanResponderRelease: () => {
139
+ if (currentRef.current.length > 1) {
140
+ emit([...strokesRef.current, currentRef.current]);
141
+ }
142
+ currentRef.current = [];
143
+ bump();
144
+ },
145
+ }),
146
+ ).current;
147
+
148
+ const allStrokes = currentRef.current.length
149
+ ? [...strokes, currentRef.current]
150
+ : strokes;
151
+
152
+ const clear = () => {
153
+ currentRef.current = [];
154
+ emit([]);
155
+ bump();
156
+ };
157
+
158
+ return (
159
+ <View style={[styles.wrap, containerStyle]} testID={testID}>
160
+ <View style={styles.header}>
161
+ {label ? (
162
+ <Text style={[styles.label, labelStyle]}>
163
+ {label}
164
+ {required ? ' *' : ''}
165
+ </Text>
166
+ ) : (
167
+ <View />
168
+ )}
169
+ {renderClear ? (
170
+ renderClear({ clear, isEmpty: allStrokes.length === 0 })
171
+ ) : (
172
+ <Pressable
173
+ onPress={clear}
174
+ disabled={disabled || allStrokes.length === 0}
175
+ hitSlop={8}
176
+ >
177
+ <Text style={styles.clear}>{clearLabel}</Text>
178
+ </Pressable>
179
+ )}
180
+ </View>
181
+
182
+ <View style={[styles.pad, { height }]} {...pan.panHandlers}>
183
+ {allStrokes.map((stroke, si) =>
184
+ stroke.slice(1).map((point, pi) => (
185
+ <SignatureSegment
186
+ key={`${si}-${pi}`}
187
+ p1={stroke[pi]}
188
+ p2={point}
189
+ color={color}
190
+ thickness={strokeWidth}
191
+ />
192
+ )),
193
+ )}
194
+ {allStrokes.length === 0
195
+ ? renderPlaceholder
196
+ ? renderPlaceholder()
197
+ : (
198
+ <Text style={styles.placeholder} pointerEvents="none">
199
+ {placeholder}
200
+ </Text>
201
+ )
202
+ : null}
203
+ </View>
204
+
205
+ {errorText ? (
206
+ <Text style={styles.error}>{errorText}</Text>
207
+ ) : helperText ? (
208
+ <Text style={styles.helper}>{helperText}</Text>
209
+ ) : null}
210
+ </View>
211
+ );
212
+ }
213
+
214
+ function createStyles(theme: FieldFlowTheme, hasError: boolean, disabled: boolean) {
215
+ return StyleSheet.create({
216
+ wrap: { marginBottom: theme.spacing.gap * 2, opacity: disabled ? 0.6 : 1 },
217
+ header: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', marginBottom: 8 },
218
+ label: {
219
+ fontSize: theme.typography.labelFontSize,
220
+ color: hasError ? theme.colors.error : theme.colors.label,
221
+ fontWeight: '500',
222
+ },
223
+ clear: { color: theme.colors.borderFocused, fontWeight: '600', fontSize: theme.typography.helperFontSize },
224
+ pad: {
225
+ borderWidth: hasError ? theme.spacing.borderWidthFocused : theme.spacing.borderWidth,
226
+ borderColor: hasError ? theme.colors.borderError : theme.colors.border,
227
+ borderRadius: theme.spacing.borderRadius,
228
+ backgroundColor: theme.colors.background,
229
+ overflow: 'hidden',
230
+ },
231
+ placeholder: {
232
+ position: 'absolute',
233
+ alignSelf: 'center',
234
+ top: '42%',
235
+ color: theme.colors.placeholder,
236
+ fontSize: theme.typography.fontSize,
237
+ },
238
+ helper: { marginTop: 6, fontSize: theme.typography.helperFontSize, color: theme.colors.label },
239
+ error: { marginTop: 6, fontSize: theme.typography.helperFontSize, color: theme.colors.error },
240
+ });
241
+ }
@@ -0,0 +1,7 @@
1
+ export { FieldFlowSignature } from './FieldFlowSignature';
2
+ export type {
3
+ FieldFlowSignatureProps,
4
+ FieldFlowSignatureValue,
5
+ FieldFlowStroke,
6
+ FieldFlowPoint,
7
+ } from './FieldFlowSignature';