@1money/react-ui 1.15.3 → 1.17.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 (378) hide show
  1. package/AGENTS.md +393 -0
  2. package/es/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  3. package/es/components/CheckboxGroup/CheckboxGroup.js +94 -91
  4. package/es/components/CheckboxGroup/interface.d.ts +21 -15
  5. package/es/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  6. package/es/components/Flex/Flex.d.ts +5 -0
  7. package/es/components/Flex/Flex.js +50 -0
  8. package/es/components/Flex/constants.d.ts +41 -0
  9. package/es/components/Flex/constants.js +45 -0
  10. package/es/components/Flex/index.d.ts +5 -0
  11. package/es/components/Flex/index.js +6 -0
  12. package/es/components/Flex/interface.d.ts +13 -0
  13. package/es/components/Flex/interface.js +2 -0
  14. package/es/components/Flex/style/Flex.css +1 -0
  15. package/es/components/Flex/style/Flex.scss +70 -0
  16. package/es/components/Flex/style/css.js +2 -0
  17. package/es/components/Flex/style/index.d.ts +1 -0
  18. package/es/components/Flex/style/index.js +2 -0
  19. package/es/components/Form/Form.d.ts +29 -0
  20. package/es/components/Form/Form.js +188 -0
  21. package/es/components/Form/FormItem.d.ts +4 -0
  22. package/es/components/Form/FormItem.js +165 -0
  23. package/es/components/Form/FormItemContent.d.ts +18 -0
  24. package/es/components/Form/FormItemContent.js +146 -0
  25. package/es/components/Form/constants.d.ts +46 -0
  26. package/es/components/Form/constants.js +65 -0
  27. package/es/components/Form/helper.d.ts +120 -0
  28. package/es/components/Form/helper.js +284 -0
  29. package/es/components/Form/index.d.ts +20 -0
  30. package/es/components/Form/index.js +21 -0
  31. package/es/components/Form/interface.d.ts +238 -0
  32. package/es/components/Form/interface.js +2 -0
  33. package/es/components/Form/style/Form.css +1 -0
  34. package/es/components/Form/style/Form.scss +167 -0
  35. package/es/components/Form/style/css.js +2 -0
  36. package/es/components/Form/style/index.d.ts +1 -0
  37. package/es/components/Form/style/index.js +2 -0
  38. package/es/components/Form/useFormItemContext.d.ts +32 -0
  39. package/es/components/Form/useFormItemContext.js +55 -0
  40. package/es/components/Form/useFormItemWatch.d.ts +51 -0
  41. package/es/components/Form/useFormItemWatch.js +69 -0
  42. package/es/components/Form/useValidationTrigger.d.ts +40 -0
  43. package/es/components/Form/useValidationTrigger.js +74 -0
  44. package/es/components/Grid/Col.d.ts +5 -0
  45. package/es/components/Grid/Col.js +97 -0
  46. package/es/components/Grid/Grid.d.ts +12 -0
  47. package/es/components/Grid/Grid.js +12 -0
  48. package/es/components/Grid/Row.d.ts +5 -0
  49. package/es/components/Grid/Row.js +48 -0
  50. package/es/components/Grid/constants.d.ts +55 -0
  51. package/es/components/Grid/constants.js +66 -0
  52. package/es/components/Grid/helper.d.ts +10 -0
  53. package/es/components/Grid/helper.js +44 -0
  54. package/es/components/Grid/index.d.ts +7 -0
  55. package/es/components/Grid/index.js +8 -0
  56. package/es/components/Grid/interface.d.ts +38 -0
  57. package/es/components/Grid/interface.js +2 -0
  58. package/es/components/Grid/style/Grid.css +1 -0
  59. package/es/components/Grid/style/Grid.scss +196 -0
  60. package/es/components/Grid/style/css.js +2 -0
  61. package/es/components/Grid/style/index.d.ts +1 -0
  62. package/es/components/Grid/style/index.js +2 -0
  63. package/es/components/Input/Input.js +72 -74
  64. package/es/components/Input/interface.d.ts +9 -9
  65. package/es/components/InputAmount/InputAmount.js +228 -276
  66. package/es/components/InputAmount/helper.d.ts +46 -0
  67. package/es/components/InputAmount/helper.js +115 -0
  68. package/es/components/InputAmount/style/normal.css +1 -1
  69. package/es/components/InputAmount/style/normal.scss +2 -2
  70. package/es/components/InputAmount/style/primary.css +1 -1
  71. package/es/components/InputAmount/style/primary.scss +2 -2
  72. package/es/components/Message/style/Message.css +1 -1
  73. package/es/components/Message/style/Message.scss +3 -3
  74. package/es/components/ProForm/ProForm.d.ts +33 -0
  75. package/es/components/ProForm/ProForm.js +208 -0
  76. package/es/components/ProForm/ProFormDependency.d.ts +12 -0
  77. package/es/components/ProForm/ProFormDependency.js +61 -0
  78. package/es/components/ProForm/ProFormList.d.ts +19 -0
  79. package/es/components/ProForm/ProFormList.js +348 -0
  80. package/es/components/ProForm/Submitter.d.ts +21 -0
  81. package/es/components/ProForm/Submitter.js +76 -0
  82. package/es/components/ProForm/constants.d.ts +34 -0
  83. package/es/components/ProForm/constants.js +40 -0
  84. package/es/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  85. package/es/components/ProForm/fields/ProFormCheckbox.js +11 -0
  86. package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  87. package/es/components/ProForm/fields/ProFormCheckboxGroup.js +46 -0
  88. package/es/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  89. package/es/components/ProForm/fields/ProFormDigit.js +15 -0
  90. package/es/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  91. package/es/components/ProForm/fields/ProFormMoney.js +10 -0
  92. package/es/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  93. package/es/components/ProForm/fields/ProFormMultiSelect.js +27 -0
  94. package/es/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  95. package/es/components/ProForm/fields/ProFormPassword.js +16 -0
  96. package/es/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  97. package/es/components/ProForm/fields/ProFormRadio.js +13 -0
  98. package/es/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  99. package/es/components/ProForm/fields/ProFormSelect.js +13 -0
  100. package/es/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  101. package/es/components/ProForm/fields/ProFormSwitch.js +11 -0
  102. package/es/components/ProForm/fields/ProFormText.d.ts +6 -0
  103. package/es/components/ProForm/fields/ProFormText.js +15 -0
  104. package/es/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  105. package/es/components/ProForm/fields/ProFormTextArea.js +16 -0
  106. package/es/components/ProForm/fields/createProFormField.d.ts +43 -0
  107. package/es/components/ProForm/fields/createProFormField.js +200 -0
  108. package/es/components/ProForm/fields/index.d.ts +12 -0
  109. package/es/components/ProForm/fields/index.js +13 -0
  110. package/es/components/ProForm/index.d.ts +7 -0
  111. package/es/components/ProForm/index.js +7 -0
  112. package/es/components/ProForm/interface.d.ts +306 -0
  113. package/es/components/ProForm/interface.js +2 -0
  114. package/es/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  115. package/es/components/ProForm/layouts/DrawerForm.js +79 -0
  116. package/es/components/ProForm/layouts/ModalForm.d.ts +16 -0
  117. package/es/components/ProForm/layouts/ModalForm.js +89 -0
  118. package/es/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  119. package/es/components/ProForm/layouts/QueryFilter.js +132 -0
  120. package/es/components/ProForm/layouts/StepsForm.d.ts +13 -0
  121. package/es/components/ProForm/layouts/StepsForm.js +295 -0
  122. package/es/components/ProForm/layouts/index.d.ts +4 -0
  123. package/es/components/ProForm/layouts/index.js +5 -0
  124. package/es/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  125. package/es/components/ProForm/layouts/useOverlayForm.js +143 -0
  126. package/es/components/ProForm/style/ProForm.module.css +1 -0
  127. package/es/components/ProForm/style/ProForm.module.scss +59 -0
  128. package/es/components/ProForm/style/css.js +3 -0
  129. package/es/components/ProForm/style/index.d.ts +1 -0
  130. package/es/components/ProForm/style/index.js +3 -0
  131. package/es/components/ProForm/utils.d.ts +72 -0
  132. package/es/components/ProForm/utils.js +206 -0
  133. package/es/components/RadioGroup/RadioGroup.js +46 -23
  134. package/es/components/RadioGroup/interface.d.ts +3 -1
  135. package/es/components/Select/Select.d.ts +1 -1
  136. package/es/components/Select/Select.js +113 -106
  137. package/es/components/Select/constants.d.ts +18 -0
  138. package/es/components/Select/constants.js +19 -0
  139. package/es/components/Sidebar/Sidebar.js +21 -23
  140. package/es/components/Sidebar/SidebarLogo.d.ts +7 -0
  141. package/es/components/Sidebar/SidebarLogo.js +33 -0
  142. package/es/components/Sidebar/SimplySidebar.d.ts +2 -2
  143. package/es/components/Sidebar/SimplySidebar.js +18 -22
  144. package/es/components/Sidebar/Stepper.js +14 -14
  145. package/es/components/Sidebar/constants.d.ts +16 -0
  146. package/es/components/Sidebar/constants.js +17 -0
  147. package/es/components/Sidebar/style/Sidebar.css +1 -1
  148. package/es/components/Sidebar/style/Sidebar.scss +1 -1
  149. package/es/components/Sidebar/style/SimplySidebar.css +1 -1
  150. package/es/components/Sidebar/style/SimplySidebar.scss +1 -1
  151. package/es/components/Sidebar/style/Stepper.css +1 -1
  152. package/es/components/Sidebar/style/Stepper.scss +11 -1
  153. package/es/components/Space/Space.d.ts +5 -0
  154. package/es/components/Space/Space.js +71 -0
  155. package/es/components/Space/constants.d.ts +33 -0
  156. package/es/components/Space/constants.js +37 -0
  157. package/es/components/Space/index.d.ts +5 -0
  158. package/es/components/Space/index.js +6 -0
  159. package/es/components/Space/interface.d.ts +12 -0
  160. package/es/components/Space/interface.js +2 -0
  161. package/es/components/Space/style/Space.css +1 -0
  162. package/es/components/Space/style/Space.scss +40 -0
  163. package/es/components/Space/style/css.js +2 -0
  164. package/es/components/Space/style/index.d.ts +1 -0
  165. package/es/components/Space/style/index.js +2 -0
  166. package/es/components/Switch/Switch.js +28 -25
  167. package/es/components/Switch/interface.d.ts +9 -4
  168. package/es/components/useControlledState/index.d.ts +14 -0
  169. package/es/components/useControlledState/index.js +32 -0
  170. package/es/components/useEventCallback/index.d.ts +11 -0
  171. package/es/components/useEventCallback/index.js +17 -0
  172. package/es/components/useLayoutEffect/index.d.ts +11 -0
  173. package/es/components/useLayoutEffect/index.js +17 -0
  174. package/es/components/useLayoutState/index.d.ts +13 -0
  175. package/es/components/useLayoutState/index.js +71 -0
  176. package/es/components/useMemoizedFn/index.d.ts +12 -0
  177. package/es/components/useMemoizedFn/index.js +27 -0
  178. package/es/components/usePrevious/index.d.ts +11 -0
  179. package/es/components/usePrevious/index.js +19 -0
  180. package/es/components/useSafeState/index.d.ts +12 -0
  181. package/es/components/useSafeState/index.js +24 -0
  182. package/es/components/useSyncState/index.d.ts +14 -0
  183. package/es/components/useSyncState/index.js +37 -0
  184. package/es/components/useUpdateEffect/index.d.ts +9 -0
  185. package/es/components/useUpdateEffect/index.js +19 -0
  186. package/es/index.css +1 -1
  187. package/es/index.d.ts +32 -2
  188. package/es/index.js +30 -1
  189. package/jest.setup.d.ts +1 -0
  190. package/jest.setup.ts +1 -0
  191. package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  192. package/lib/components/CheckboxGroup/CheckboxGroup.js +92 -89
  193. package/lib/components/CheckboxGroup/interface.d.ts +21 -15
  194. package/lib/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  195. package/lib/components/Flex/Flex.d.ts +5 -0
  196. package/lib/components/Flex/Flex.js +60 -0
  197. package/lib/components/Flex/constants.d.ts +41 -0
  198. package/lib/components/Flex/constants.js +51 -0
  199. package/lib/components/Flex/index.d.ts +5 -0
  200. package/lib/components/Flex/index.js +60 -0
  201. package/lib/components/Flex/interface.d.ts +13 -0
  202. package/lib/components/Flex/interface.js +6 -0
  203. package/lib/components/Flex/style/Flex.css +1 -0
  204. package/lib/components/Flex/style/Flex.scss +70 -0
  205. package/lib/components/Flex/style/css.js +4 -0
  206. package/lib/components/Flex/style/index.d.ts +1 -0
  207. package/lib/components/Flex/style/index.js +4 -0
  208. package/lib/components/Form/Form.d.ts +29 -0
  209. package/lib/components/Form/Form.js +199 -0
  210. package/lib/components/Form/FormItem.d.ts +4 -0
  211. package/lib/components/Form/FormItem.js +176 -0
  212. package/lib/components/Form/FormItemContent.d.ts +18 -0
  213. package/lib/components/Form/FormItemContent.js +156 -0
  214. package/lib/components/Form/constants.d.ts +46 -0
  215. package/lib/components/Form/constants.js +71 -0
  216. package/lib/components/Form/helper.d.ts +120 -0
  217. package/lib/components/Form/helper.js +290 -0
  218. package/lib/components/Form/index.d.ts +20 -0
  219. package/lib/components/Form/index.js +45 -0
  220. package/lib/components/Form/interface.d.ts +238 -0
  221. package/lib/components/Form/interface.js +6 -0
  222. package/lib/components/Form/style/Form.css +1 -0
  223. package/lib/components/Form/style/Form.scss +167 -0
  224. package/lib/components/Form/style/css.js +4 -0
  225. package/lib/components/Form/style/index.d.ts +1 -0
  226. package/lib/components/Form/style/index.js +4 -0
  227. package/lib/components/Form/useFormItemContext.d.ts +32 -0
  228. package/lib/components/Form/useFormItemContext.js +62 -0
  229. package/lib/components/Form/useFormItemWatch.d.ts +51 -0
  230. package/lib/components/Form/useFormItemWatch.js +76 -0
  231. package/lib/components/Form/useValidationTrigger.d.ts +40 -0
  232. package/lib/components/Form/useValidationTrigger.js +81 -0
  233. package/lib/components/Grid/Col.d.ts +5 -0
  234. package/lib/components/Grid/Col.js +107 -0
  235. package/lib/components/Grid/Grid.d.ts +12 -0
  236. package/lib/components/Grid/Grid.js +18 -0
  237. package/lib/components/Grid/Row.d.ts +5 -0
  238. package/lib/components/Grid/Row.js +58 -0
  239. package/lib/components/Grid/constants.d.ts +55 -0
  240. package/lib/components/Grid/constants.js +72 -0
  241. package/lib/components/Grid/helper.d.ts +10 -0
  242. package/lib/components/Grid/helper.js +51 -0
  243. package/lib/components/Grid/index.d.ts +7 -0
  244. package/lib/components/Grid/index.js +62 -0
  245. package/lib/components/Grid/interface.d.ts +38 -0
  246. package/lib/components/Grid/interface.js +6 -0
  247. package/lib/components/Grid/style/Grid.css +1 -0
  248. package/lib/components/Grid/style/Grid.scss +196 -0
  249. package/lib/components/Grid/style/css.js +4 -0
  250. package/lib/components/Grid/style/index.d.ts +1 -0
  251. package/lib/components/Grid/style/index.js +4 -0
  252. package/lib/components/Input/Input.js +71 -73
  253. package/lib/components/Input/interface.d.ts +9 -9
  254. package/lib/components/InputAmount/InputAmount.js +230 -278
  255. package/lib/components/InputAmount/helper.d.ts +46 -0
  256. package/lib/components/InputAmount/helper.js +122 -0
  257. package/lib/components/InputAmount/style/normal.css +1 -1
  258. package/lib/components/InputAmount/style/normal.scss +2 -2
  259. package/lib/components/InputAmount/style/primary.css +1 -1
  260. package/lib/components/InputAmount/style/primary.scss +2 -2
  261. package/lib/components/Message/style/Message.css +1 -1
  262. package/lib/components/Message/style/Message.scss +3 -3
  263. package/lib/components/ProForm/ProForm.d.ts +33 -0
  264. package/lib/components/ProForm/ProForm.js +216 -0
  265. package/lib/components/ProForm/ProFormDependency.d.ts +12 -0
  266. package/lib/components/ProForm/ProFormDependency.js +67 -0
  267. package/lib/components/ProForm/ProFormList.d.ts +19 -0
  268. package/lib/components/ProForm/ProFormList.js +355 -0
  269. package/lib/components/ProForm/Submitter.d.ts +21 -0
  270. package/lib/components/ProForm/Submitter.js +83 -0
  271. package/lib/components/ProForm/constants.d.ts +34 -0
  272. package/lib/components/ProForm/constants.js +46 -0
  273. package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  274. package/lib/components/ProForm/fields/ProFormCheckbox.js +18 -0
  275. package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  276. package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +53 -0
  277. package/lib/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  278. package/lib/components/ProForm/fields/ProFormDigit.js +22 -0
  279. package/lib/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  280. package/lib/components/ProForm/fields/ProFormMoney.js +17 -0
  281. package/lib/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  282. package/lib/components/ProForm/fields/ProFormMultiSelect.js +34 -0
  283. package/lib/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  284. package/lib/components/ProForm/fields/ProFormPassword.js +23 -0
  285. package/lib/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  286. package/lib/components/ProForm/fields/ProFormRadio.js +20 -0
  287. package/lib/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  288. package/lib/components/ProForm/fields/ProFormSelect.js +20 -0
  289. package/lib/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  290. package/lib/components/ProForm/fields/ProFormSwitch.js +18 -0
  291. package/lib/components/ProForm/fields/ProFormText.d.ts +6 -0
  292. package/lib/components/ProForm/fields/ProFormText.js +22 -0
  293. package/lib/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  294. package/lib/components/ProForm/fields/ProFormTextArea.js +23 -0
  295. package/lib/components/ProForm/fields/createProFormField.d.ts +43 -0
  296. package/lib/components/ProForm/fields/createProFormField.js +208 -0
  297. package/lib/components/ProForm/fields/index.d.ts +12 -0
  298. package/lib/components/ProForm/fields/index.js +90 -0
  299. package/lib/components/ProForm/index.d.ts +7 -0
  300. package/lib/components/ProForm/index.js +73 -0
  301. package/lib/components/ProForm/interface.d.ts +306 -0
  302. package/lib/components/ProForm/interface.js +6 -0
  303. package/lib/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  304. package/lib/components/ProForm/layouts/DrawerForm.js +86 -0
  305. package/lib/components/ProForm/layouts/ModalForm.d.ts +16 -0
  306. package/lib/components/ProForm/layouts/ModalForm.js +96 -0
  307. package/lib/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  308. package/lib/components/ProForm/layouts/QueryFilter.js +139 -0
  309. package/lib/components/ProForm/layouts/StepsForm.d.ts +13 -0
  310. package/lib/components/ProForm/layouts/StepsForm.js +302 -0
  311. package/lib/components/ProForm/layouts/index.d.ts +4 -0
  312. package/lib/components/ProForm/layouts/index.js +40 -0
  313. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  314. package/lib/components/ProForm/layouts/useOverlayForm.js +150 -0
  315. package/lib/components/ProForm/style/ProForm.module.css +1 -0
  316. package/lib/components/ProForm/style/ProForm.module.scss +59 -0
  317. package/lib/components/ProForm/style/css.js +4 -0
  318. package/lib/components/ProForm/style/index.d.ts +1 -0
  319. package/lib/components/ProForm/style/index.js +4 -0
  320. package/lib/components/ProForm/utils.d.ts +72 -0
  321. package/lib/components/ProForm/utils.js +213 -0
  322. package/lib/components/RadioGroup/RadioGroup.js +45 -22
  323. package/lib/components/RadioGroup/interface.d.ts +3 -1
  324. package/lib/components/Select/Select.d.ts +1 -1
  325. package/lib/components/Select/Select.js +114 -107
  326. package/lib/components/Select/constants.d.ts +18 -0
  327. package/lib/components/Select/constants.js +25 -0
  328. package/lib/components/Sidebar/Sidebar.js +21 -23
  329. package/lib/components/Sidebar/SidebarLogo.d.ts +7 -0
  330. package/lib/components/Sidebar/SidebarLogo.js +39 -0
  331. package/lib/components/Sidebar/SimplySidebar.d.ts +2 -2
  332. package/lib/components/Sidebar/SimplySidebar.js +17 -21
  333. package/lib/components/Sidebar/Stepper.js +14 -14
  334. package/lib/components/Sidebar/constants.d.ts +16 -0
  335. package/lib/components/Sidebar/constants.js +23 -0
  336. package/lib/components/Sidebar/style/Sidebar.css +1 -1
  337. package/lib/components/Sidebar/style/Sidebar.scss +1 -1
  338. package/lib/components/Sidebar/style/SimplySidebar.css +1 -1
  339. package/lib/components/Sidebar/style/SimplySidebar.scss +1 -1
  340. package/lib/components/Sidebar/style/Stepper.css +1 -1
  341. package/lib/components/Sidebar/style/Stepper.scss +11 -1
  342. package/lib/components/Space/Space.d.ts +5 -0
  343. package/lib/components/Space/Space.js +81 -0
  344. package/lib/components/Space/constants.d.ts +33 -0
  345. package/lib/components/Space/constants.js +43 -0
  346. package/lib/components/Space/index.d.ts +5 -0
  347. package/lib/components/Space/index.js +53 -0
  348. package/lib/components/Space/interface.d.ts +12 -0
  349. package/lib/components/Space/interface.js +6 -0
  350. package/lib/components/Space/style/Space.css +1 -0
  351. package/lib/components/Space/style/Space.scss +40 -0
  352. package/lib/components/Space/style/css.js +4 -0
  353. package/lib/components/Space/style/index.d.ts +1 -0
  354. package/lib/components/Space/style/index.js +4 -0
  355. package/lib/components/Switch/Switch.js +27 -24
  356. package/lib/components/Switch/interface.d.ts +9 -4
  357. package/lib/components/useControlledState/index.d.ts +14 -0
  358. package/lib/components/useControlledState/index.js +39 -0
  359. package/lib/components/useEventCallback/index.d.ts +11 -0
  360. package/lib/components/useEventCallback/index.js +24 -0
  361. package/lib/components/useLayoutEffect/index.d.ts +11 -0
  362. package/lib/components/useLayoutEffect/index.js +23 -0
  363. package/lib/components/useLayoutState/index.d.ts +13 -0
  364. package/lib/components/useLayoutState/index.js +79 -0
  365. package/lib/components/useMemoizedFn/index.d.ts +12 -0
  366. package/lib/components/useMemoizedFn/index.js +33 -0
  367. package/lib/components/usePrevious/index.d.ts +11 -0
  368. package/lib/components/usePrevious/index.js +25 -0
  369. package/lib/components/useSafeState/index.d.ts +12 -0
  370. package/lib/components/useSafeState/index.js +31 -0
  371. package/lib/components/useSyncState/index.d.ts +14 -0
  372. package/lib/components/useSyncState/index.js +44 -0
  373. package/lib/components/useUpdateEffect/index.d.ts +9 -0
  374. package/lib/components/useUpdateEffect/index.js +25 -0
  375. package/lib/index.css +1 -1
  376. package/lib/index.d.ts +32 -2
  377. package/lib/index.js +251 -1
  378. package/package.json +31 -1
@@ -0,0 +1,167 @@
1
+ @use '../../../variable.scss' as *;
2
+
3
+ // Intentionally token-level SCSS (no global tag selectors): spacing/typography/
4
+ // opacity values are centralized as component CSS variables for predictable BEM output.
5
+ $component: 'form';
6
+ $cls: #{$prefix}-#{$component};
7
+
8
+ @mixin om-form-token-vars {
9
+ --om-form-spacing-xs: 4px;
10
+ --om-form-spacing-sm: 8px;
11
+ --om-form-spacing-md: 12px;
12
+ --om-form-spacing-lg: 16px;
13
+ --om-form-control-height: 44px;
14
+ --om-form-font-size-base: 14px;
15
+ --om-form-line-height-base: 20px;
16
+ --om-form-font-size-help: 12px;
17
+ --om-form-line-height-help: 18px;
18
+ --om-form-opacity-disabled: 0.6;
19
+ }
20
+
21
+ .#{$cls} {
22
+ @include om-form-token-vars;
23
+
24
+ &-root {
25
+ width: 100%;
26
+
27
+ @include om-form-token-vars;
28
+ }
29
+
30
+ &-layout-horizontal .#{$prefix}-form-item-root {
31
+ display: flex;
32
+ align-items: flex-start;
33
+ }
34
+
35
+ &-layout-vertical .#{$prefix}-form-item-root {
36
+ display: flex;
37
+ flex-direction: column;
38
+ }
39
+
40
+ &-layout-inline {
41
+ display: flex;
42
+ flex-wrap: wrap;
43
+ gap: var(--om-form-spacing-lg);
44
+ }
45
+
46
+ &-label-left .#{$prefix}-form-item-label {
47
+ text-align: left;
48
+ }
49
+ }
50
+
51
+ $item: 'form-item';
52
+ $item-cls: #{$prefix}-#{$item};
53
+
54
+ .#{$item-cls} {
55
+ @include om-form-token-vars;
56
+
57
+ &-root {
58
+ width: 100%;
59
+ margin-bottom: var(--om-form-spacing-lg);
60
+
61
+ @include om-form-token-vars;
62
+ }
63
+
64
+ &-label {
65
+ display: flex;
66
+ flex: 0 0 var(--om-form-label-width, 25%);
67
+ align-items: center;
68
+ justify-content: flex-end;
69
+ min-width: fit-content;
70
+ min-height: var(--om-form-control-height);
71
+ padding-right: var(--om-form-spacing-md);
72
+ color: $color-primary-black;
73
+ font-size: var(--om-form-font-size-base);
74
+ line-height: var(--om-form-line-height-base);
75
+ white-space: nowrap;
76
+ text-align: right;
77
+ }
78
+
79
+ &-label-required::before {
80
+ margin-right: var(--om-form-spacing-xs);
81
+ color: $color-negative;
82
+ content: '*';
83
+ }
84
+
85
+ &-colon {
86
+ margin-left: var(--om-form-spacing-xs);
87
+ }
88
+
89
+ &-control {
90
+ flex: 1 1 auto;
91
+ max-width: var(--om-form-wrapper-width, 75%);
92
+ }
93
+
94
+ &-content {
95
+ display: flex;
96
+ flex-direction: column;
97
+ gap: var(--om-form-spacing-sm);
98
+ }
99
+
100
+ &-content-disabled {
101
+ opacity: var(--om-form-opacity-disabled);
102
+ }
103
+
104
+ &-help {
105
+ color: $color-grey-midnight;
106
+ font-size: var(--om-form-font-size-help);
107
+ line-height: var(--om-form-line-height-help);
108
+ }
109
+
110
+ &-help-error {
111
+ color: $color-negative;
112
+ }
113
+
114
+ &-help-warning {
115
+ color: $color-warning-dark;
116
+ }
117
+
118
+ &-help-success {
119
+ color: $color-success;
120
+ }
121
+
122
+ &-content-error {
123
+ --om-form-item-status-color: #{$color-negative};
124
+ }
125
+
126
+ &-content-warning {
127
+ --om-form-item-status-color: #{$color-warning-dark};
128
+ }
129
+
130
+ &-content-success {
131
+ --om-form-item-status-color: #{$color-success};
132
+ }
133
+
134
+ &-content-validating {
135
+ --om-form-item-status-color: #{$color-info};
136
+ }
137
+
138
+ &-extra {
139
+ color: $color-grey-dark;
140
+ font-size: var(--om-form-font-size-help);
141
+ line-height: var(--om-form-line-height-help);
142
+ }
143
+ }
144
+
145
+ .#{$prefix}-form-layout-vertical {
146
+ .#{$item-cls}-label {
147
+ flex: 0 0 auto;
148
+ justify-content: flex-start;
149
+ min-width: 0;
150
+ min-height: auto;
151
+ margin-bottom: var(--om-form-spacing-sm);
152
+ padding-right: 0;
153
+ white-space: normal;
154
+ text-align: left;
155
+ }
156
+
157
+ .#{$item-cls}-control {
158
+ max-width: 100%;
159
+ }
160
+ }
161
+
162
+ .#{$prefix}-form-layout-inline {
163
+ .#{$item-cls}-root {
164
+ width: auto;
165
+ margin-bottom: 0;
166
+ }
167
+ }
@@ -0,0 +1,2 @@
1
+ import './Form.css';
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvRm9ybS9zcmMvY29tcG9uZW50cy9Gb3JtL3N0eWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sYUFBYSIsImZpbGUiOiJjb21wb25lbnRzL0Zvcm0vc3R5bGUvY3NzLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -0,0 +1 @@
1
+ import './Form.scss';
@@ -0,0 +1,2 @@
1
+ import './Form.scss';
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvRm9ybS9zcmMvY29tcG9uZW50cy9Gb3JtL3N0eWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sYUFBYSIsImZpbGUiOiJjb21wb25lbnRzL0Zvcm0vc3R5bGUvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,32 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { FieldValues, UseFormReturn } from 'react-hook-form';
3
+ interface FallbackFormProviderProps {
4
+ children: ReactNode;
5
+ }
6
+ /**
7
+ * Lazily creates form methods only when mounted.
8
+ *
9
+ * Use this provider when rendering form-aware components outside `<Form>`.
10
+ */
11
+ export declare function FallbackFormProvider({ children }: FallbackFormProviderProps): import("react").FunctionComponentElement<import("react").ProviderProps<UseFormReturn<FieldValues> | null>>;
12
+ /**
13
+ * Resolves form context for a `<FormItem>`.
14
+ *
15
+ * When rendered inside a `<Form>`, this hook uses the context-provided
16
+ * `react-hook-form` methods. Otherwise it reads methods from
17
+ * {@link FallbackFormProvider}, which creates a local `useForm()` instance.
18
+ *
19
+ * A development-only console warning is emitted (once per field name) when
20
+ * a `name` prop is set but no parent `<Form>` context is found.
21
+ *
22
+ * @template TFieldValues - The shape of the form values.
23
+ * @param name - The field name, used for the missing-context warning check.
24
+ * @returns An object with `ctx` (form context or `null`), `methods`, `control`, and `trigger`.
25
+ */
26
+ export declare function useFormItemContext<TFieldValues extends FieldValues = FieldValues>(name?: string): {
27
+ ctx: import("./interface").FormContextValue | null;
28
+ methods: UseFormReturn<TFieldValues>;
29
+ control: import("react-hook-form").Control<TFieldValues, any, TFieldValues>;
30
+ trigger: import("react-hook-form").UseFormTrigger<TFieldValues>;
31
+ };
32
+ export {};
@@ -0,0 +1,55 @@
1
+ import { createContext, createElement, useContext, useEffect, useRef } from 'react';
2
+ import { useForm } from 'react-hook-form';
3
+ import { FormContext } from './Form';
4
+ var FallbackFormContext = /*#__PURE__*/createContext(null);
5
+ /**
6
+ * Lazily creates form methods only when mounted.
7
+ *
8
+ * Use this provider when rendering form-aware components outside `<Form>`.
9
+ */
10
+ export function FallbackFormProvider(_ref) {
11
+ var children = _ref.children;
12
+ var methods = useForm();
13
+ return /*#__PURE__*/createElement(FallbackFormContext.Provider, {
14
+ value: methods
15
+ }, children);
16
+ }
17
+ /**
18
+ * Resolves form context for a `<FormItem>`.
19
+ *
20
+ * When rendered inside a `<Form>`, this hook uses the context-provided
21
+ * `react-hook-form` methods. Otherwise it reads methods from
22
+ * {@link FallbackFormProvider}, which creates a local `useForm()` instance.
23
+ *
24
+ * A development-only console warning is emitted (once per field name) when
25
+ * a `name` prop is set but no parent `<Form>` context is found.
26
+ *
27
+ * @template TFieldValues - The shape of the form values.
28
+ * @param name - The field name, used for the missing-context warning check.
29
+ * @returns An object with `ctx` (form context or `null`), `methods`, `control`, and `trigger`.
30
+ */
31
+ export function useFormItemContext(name) {
32
+ var _a;
33
+ var ctx = useContext(FormContext);
34
+ var fallbackMethods = useContext(FallbackFormContext);
35
+ var warnedRef = useRef(new Set());
36
+ var methods = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.methods) !== null && _a !== void 0 ? _a : fallbackMethods;
37
+ if (!methods) {
38
+ throw new Error('[FormItem] No form control found. Wrap with <Form> or mount inside <FallbackFormProvider>.');
39
+ }
40
+ var control = methods.control;
41
+ var trigger = methods.trigger;
42
+ useEffect(function () {
43
+ if (name && !(ctx === null || ctx === void 0 ? void 0 : ctx.methods) && !warnedRef.current.has(name)) {
44
+ warnedRef.current.add(name);
45
+ console.warn('[FormItem] `name` prop is set but no form control found. Wrap FormItem inside a <Form> component.');
46
+ }
47
+ }, [name, ctx === null || ctx === void 0 ? void 0 : ctx.methods]);
48
+ return {
49
+ ctx: ctx,
50
+ methods: methods,
51
+ control: control,
52
+ trigger: trigger
53
+ };
54
+ }
55
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybS91c2VGb3JtSXRlbUNvbnRleHQudHMiLCJjb21wb25lbnRzL0Zvcm0vdXNlRm9ybUl0ZW1Db250ZXh0LmpzIl0sIm5hbWVzIjpbImNyZWF0ZUNvbnRleHQiLCJjcmVhdGVFbGVtZW50IiwidXNlQ29udGV4dCIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZUZvcm0iLCJGb3JtQ29udGV4dCIsIkZhbGxiYWNrRm9ybUNvbnRleHQiLCJGYWxsYmFja0Zvcm1Qcm92aWRlciIsIl9yZWYiLCJjaGlsZHJlbiIsIm1ldGhvZHMiLCJQcm92aWRlciIsInZhbHVlIiwidXNlRm9ybUl0ZW1Db250ZXh0IiwibmFtZSIsIl9hIiwiY3R4IiwiZmFsbGJhY2tNZXRob2RzIiwid2FybmVkUmVmIiwiU2V0IiwiRXJyb3IiLCJjb250cm9sIiwidHJpZ2dlciIsImN1cnJlbnQiLCJoYXMiLCJhZGQiLCJjb25zb2xlIiwid2FybiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsYUFBYSxFQUFFQyxhQUFhLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxNQUFNLFFBQVEsT0FBTztBQUNuRixTQUFTQyxPQUFPLFFBQVEsaUJBQWlCO0FBR3pDLFNBQVNDLFdBQVcsUUFBUSxRQUFRO0FBRXBDLElBQU1DLG1CQUFtQixnQkFBR1AsYUFBYSxDQUFvQyxJQUFJLENBQUM7QUFNbEY7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBRFNBLE9BQU0sU0FBVVEsb0JBQW9CQSxDQUFBQyxJQUFBLEVBQXdDO0VBQUEsSUFBckNDLFFBQVEsR0FBQUQsSUFBQSxDQUFSQyxRQUFRO0VBQzdDLElBQU1DLE9BQU8sR0FBR04sT0FBTyxDQUFBLENBQWU7RUFDdEMsb0JBQU9KLGFBQWEsQ0FBQ00sbUJBQW1CLENBQUNLLFFBQVEsRUFBRTtJQUFFQyxLQUFLLEVBQUVGO0VBQU8sQ0FBRSxFQUFFRCxRQUFRLENBQUM7QUFDbEY7QUFFQTtBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FEVUEsT0FBTSxTQUFVSSxrQkFBa0JBLENBQWlEQyxJQUFhLEVBQUE7RUNSNUYsSUFBSUMsRUFBRTtFRFNSLElBQU1DLEdBQUcsR0FBR2YsVUFBVSxDQUFDSSxXQUFXLENBQUM7RUFDbkMsSUFBTVksZUFBZSxHQUFHaEIsVUFBVSxDQUFDSyxtQkFBbUIsQ0FBQztFQUN2RCxJQUFNWSxTQUFTLEdBQUdmLE1BQU0sQ0FBYyxJQUFJZ0IsR0FBRyxDQUFBLENBQUUsQ0FBQztFQUNoRCxJQUFNVCxPQUFPLEdBQUcsQ0FBQUssRUFBQSxHQUFDQyxHQUFHLEtBQUEsSUFBQSxJQUFIQSxHQUFHLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUhBLEdBQUcsQ0FBRU4sT0FBbUQsTUFBQSxJQUFBLElBQUFLLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUNuRUUsZUFBc0Q7RUFFNUQsSUFBSSxDQUFDUCxPQUFPLEVBQUU7SUFDWixNQUFNLElBQUlVLEtBQUssQ0FDYiw0RkFBNEYsQ0FDN0Y7RUFDSDtFQUVBLElBQU1DLE9BQU8sR0FBR1gsT0FBTyxDQUFDVyxPQUFPO0VBQy9CLElBQU1DLE9BQU8sR0FBR1osT0FBTyxDQUFDWSxPQUFPO0VBRS9CcEIsU0FBUyxDQUFDLFlBQUs7SUFDYixJQUFJWSxJQUFJLElBQUksRUFBQ0UsR0FBRyxLQUFBLElBQUEsSUFBSEEsR0FBRyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFIQSxHQUFHLENBQUVOLE9BQU8sQ0FBQSxJQUFJLENBQUNRLFNBQVMsQ0FBQ0ssT0FBTyxDQUFDQyxHQUFHLENBQUNWLElBQUksQ0FBQyxFQUFFO01BQ3pESSxTQUFTLENBQUNLLE9BQU8sQ0FBQ0UsR0FBRyxDQUFDWCxJQUFJLENBQUM7TUFDM0JZLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLG1HQUFtRyxDQUFDO0lBQ25IO0VBQ0YsQ0FBQyxFQUFFLENBQUNiLElBQUksRUFBRUUsR0FBRyxLQUFBLElBQUEsSUFBSEEsR0FBRyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFIQSxHQUFHLENBQUVOLE9BQU8sQ0FBQyxDQUFDO0VBRXhCLE9BQU87SUFBRU0sR0FBRyxFQUFIQSxHQUFHO0lBQUVOLE9BQU8sRUFBUEEsT0FBTztJQUFFVyxPQUFPLEVBQVBBLE9BQU87SUFBRUMsT0FBTyxFQUFQQTtFQUFPLENBQUU7QUFDM0MiLCJmaWxlIjoiY29tcG9uZW50cy9Gb3JtL3VzZUZvcm1JdGVtQ29udGV4dC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgY3JlYXRlRWxlbWVudCwgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IEZvcm1Db250ZXh0IH0gZnJvbSAnLi9Gb3JtJztcbmNvbnN0IEZhbGxiYWNrRm9ybUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpO1xuLyoqXG4gKiBMYXppbHkgY3JlYXRlcyBmb3JtIG1ldGhvZHMgb25seSB3aGVuIG1vdW50ZWQuXG4gKlxuICogVXNlIHRoaXMgcHJvdmlkZXIgd2hlbiByZW5kZXJpbmcgZm9ybS1hd2FyZSBjb21wb25lbnRzIG91dHNpZGUgYDxGb3JtPmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBGYWxsYmFja0Zvcm1Qcm92aWRlcih7IGNoaWxkcmVuIH0pIHtcbiAgICBjb25zdCBtZXRob2RzID0gdXNlRm9ybSgpO1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEZhbGxiYWNrRm9ybUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IG1ldGhvZHMgfSwgY2hpbGRyZW4pO1xufVxuLyoqXG4gKiBSZXNvbHZlcyBmb3JtIGNvbnRleHQgZm9yIGEgYDxGb3JtSXRlbT5gLlxuICpcbiAqIFdoZW4gcmVuZGVyZWQgaW5zaWRlIGEgYDxGb3JtPmAsIHRoaXMgaG9vayB1c2VzIHRoZSBjb250ZXh0LXByb3ZpZGVkXG4gKiBgcmVhY3QtaG9vay1mb3JtYCBtZXRob2RzLiBPdGhlcndpc2UgaXQgcmVhZHMgbWV0aG9kcyBmcm9tXG4gKiB7QGxpbmsgRmFsbGJhY2tGb3JtUHJvdmlkZXJ9LCB3aGljaCBjcmVhdGVzIGEgbG9jYWwgYHVzZUZvcm0oKWAgaW5zdGFuY2UuXG4gKlxuICogQSBkZXZlbG9wbWVudC1vbmx5IGNvbnNvbGUgd2FybmluZyBpcyBlbWl0dGVkIChvbmNlIHBlciBmaWVsZCBuYW1lKSB3aGVuXG4gKiBhIGBuYW1lYCBwcm9wIGlzIHNldCBidXQgbm8gcGFyZW50IGA8Rm9ybT5gIGNvbnRleHQgaXMgZm91bmQuXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBzaGFwZSBvZiB0aGUgZm9ybSB2YWx1ZXMuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBmaWVsZCBuYW1lLCB1c2VkIGZvciB0aGUgbWlzc2luZy1jb250ZXh0IHdhcm5pbmcgY2hlY2suXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBgY3R4YCAoZm9ybSBjb250ZXh0IG9yIGBudWxsYCksIGBtZXRob2RzYCwgYGNvbnRyb2xgLCBhbmQgYHRyaWdnZXJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRm9ybUl0ZW1Db250ZXh0KG5hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChGb3JtQ29udGV4dCk7XG4gICAgY29uc3QgZmFsbGJhY2tNZXRob2RzID0gdXNlQ29udGV4dChGYWxsYmFja0Zvcm1Db250ZXh0KTtcbiAgICBjb25zdCB3YXJuZWRSZWYgPSB1c2VSZWYobmV3IFNldCgpKTtcbiAgICBjb25zdCBtZXRob2RzID0gKF9hID0gY3R4ID09PSBudWxsIHx8IGN0eCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3R4Lm1ldGhvZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbGxiYWNrTWV0aG9kcztcbiAgICBpZiAoIW1ldGhvZHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbRm9ybUl0ZW1dIE5vIGZvcm0gY29udHJvbCBmb3VuZC4gV3JhcCB3aXRoIDxGb3JtPiBvciBtb3VudCBpbnNpZGUgPEZhbGxiYWNrRm9ybVByb3ZpZGVyPi4nKTtcbiAgICB9XG4gICAgY29uc3QgY29udHJvbCA9IG1ldGhvZHMuY29udHJvbDtcbiAgICBjb25zdCB0cmlnZ2VyID0gbWV0aG9kcy50cmlnZ2VyO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChuYW1lICYmICEoY3R4ID09PSBudWxsIHx8IGN0eCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3R4Lm1ldGhvZHMpICYmICF3YXJuZWRSZWYuY3VycmVudC5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHdhcm5lZFJlZi5jdXJyZW50LmFkZChuYW1lKTtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW0Zvcm1JdGVtXSBgbmFtZWAgcHJvcCBpcyBzZXQgYnV0IG5vIGZvcm0gY29udHJvbCBmb3VuZC4gV3JhcCBGb3JtSXRlbSBpbnNpZGUgYSA8Rm9ybT4gY29tcG9uZW50LicpO1xuICAgICAgICB9XG4gICAgfSwgW25hbWUsIGN0eCA9PT0gbnVsbCB8fCBjdHggPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN0eC5tZXRob2RzXSk7XG4gICAgcmV0dXJuIHsgY3R4LCBtZXRob2RzLCBjb250cm9sLCB0cmlnZ2VyIH07XG59Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,51 @@
1
+ import type { Control, FieldPath, FieldValues, UseFormReturn } from 'react-hook-form';
2
+ import type { FormItemProps } from './interface';
3
+ /**
4
+ * Return type of {@link useFormItemWatch}.
5
+ *
6
+ * @template TFieldValues - The shape of the form values.
7
+ */
8
+ interface UseFormItemWatchResult<TFieldValues extends FieldValues> {
9
+ /** Current snapshot of all form values. */
10
+ allValues: TFieldValues;
11
+ /** Watched dependency values (array when multiple, single value otherwise). */
12
+ depValues: unknown;
13
+ /** Whether the FormItem should render based on `shouldUpdate` evaluation. */
14
+ shouldRender: boolean;
15
+ }
16
+ /**
17
+ * Arguments for {@link useFormItemWatch}.
18
+ *
19
+ * @template TFieldValues - The shape of the form values.
20
+ */
21
+ interface UseFormItemWatchArgs<TFieldValues extends FieldValues> {
22
+ /** The `react-hook-form` `Control` instance. */
23
+ control: Control<TFieldValues>;
24
+ /** The `react-hook-form` methods instance. */
25
+ methods: UseFormReturn<TFieldValues>;
26
+ /** Field paths that trigger re-validation when their values change. */
27
+ dependencies?: FormItemProps<TFieldValues>['dependencies'];
28
+ /** Additional field paths to watch for re-render. */
29
+ watchNames?: FormItemProps<TFieldValues>['watchNames'];
30
+ /** Controls when the FormItem re-renders. */
31
+ shouldUpdate?: FormItemProps<TFieldValues>['shouldUpdate'];
32
+ /** The field path for this FormItem. */
33
+ name?: FieldPath<TFieldValues>;
34
+ }
35
+ /**
36
+ * Consolidates the three `useWatch` subscriptions (dependencies, all values,
37
+ * and named watches) along with `allValues` derivation and `shouldRender`
38
+ * gating into a single hook.
39
+ *
40
+ * This hook manages:
41
+ * 1. Watching dependency fields for cross-field re-validation.
42
+ * 2. Watching all values when `shouldUpdate` requires a full-form comparison.
43
+ * 3. Watching named fields specified via `watchNames`.
44
+ * 4. Computing `shouldRender` based on the `shouldUpdate` prop.
45
+ *
46
+ * @template TFieldValues - The shape of the form values.
47
+ * @param args - {@link UseFormItemWatchArgs}
48
+ * @returns {@link UseFormItemWatchResult} containing current values and render gate.
49
+ */
50
+ export declare function useFormItemWatch<TFieldValues extends FieldValues = FieldValues>({ control, methods, dependencies, watchNames, shouldUpdate, name, }: UseFormItemWatchArgs<TFieldValues>): UseFormItemWatchResult<TFieldValues>;
51
+ export {};
@@ -0,0 +1,69 @@
1
+ import { useMemo } from 'react';
2
+ import { useWatch } from 'react-hook-form';
3
+ import usePrevious from '../usePrevious';
4
+ // Module-level constant to avoid recreating empty array on each render.
5
+ var EMPTY_NAMES = [];
6
+ /**
7
+ * Consolidates the three `useWatch` subscriptions (dependencies, all values,
8
+ * and named watches) along with `allValues` derivation and `shouldRender`
9
+ * gating into a single hook.
10
+ *
11
+ * This hook manages:
12
+ * 1. Watching dependency fields for cross-field re-validation.
13
+ * 2. Watching all values when `shouldUpdate` requires a full-form comparison.
14
+ * 3. Watching named fields specified via `watchNames`.
15
+ * 4. Computing `shouldRender` based on the `shouldUpdate` prop.
16
+ *
17
+ * @template TFieldValues - The shape of the form values.
18
+ * @param args - {@link UseFormItemWatchArgs}
19
+ * @returns {@link UseFormItemWatchResult} containing current values and render gate.
20
+ */
21
+ export function useFormItemWatch(_ref) {
22
+ var control = _ref.control,
23
+ methods = _ref.methods,
24
+ dependencies = _ref.dependencies,
25
+ watchNames = _ref.watchNames,
26
+ shouldUpdate = _ref.shouldUpdate,
27
+ name = _ref.name;
28
+ var shouldWatchAllValues = shouldUpdate === true || typeof shouldUpdate === 'function';
29
+ var depNames = (dependencies === null || dependencies === void 0 ? void 0 : dependencies.length) ? dependencies : EMPTY_NAMES;
30
+ var shouldWatchDeps = !!(name && depNames.length);
31
+ var watchNamesList = (watchNames === null || watchNames === void 0 ? void 0 : watchNames.length) ? watchNames : EMPTY_NAMES;
32
+ var shouldWatchNames = !!(watchNames === null || watchNames === void 0 ? void 0 : watchNames.length);
33
+ var depValues = useWatch({
34
+ control: control,
35
+ name: depNames,
36
+ disabled: !shouldWatchDeps
37
+ });
38
+ var watchedAllValues = useWatch({
39
+ control: control,
40
+ disabled: !shouldWatchAllValues
41
+ });
42
+ var watchedNamesValues = useWatch({
43
+ control: control,
44
+ name: watchNamesList,
45
+ disabled: !shouldWatchNames
46
+ });
47
+ var allValues = useMemo(function () {
48
+ var getValues = methods.getValues;
49
+ if (!getValues) return {};
50
+ if (shouldWatchAllValues) return watchedAllValues !== null && watchedAllValues !== void 0 ? watchedAllValues : getValues();
51
+ return getValues();
52
+ }, [methods, shouldWatchAllValues, watchedAllValues,
53
+ // Intentionally unused in useMemo body: this dependency forces `allValues`
54
+ // to recompute via methods.getValues() when watched names change while
55
+ // `shouldWatchAllValues` is false.
56
+ watchedNamesValues]);
57
+ var prevValues = usePrevious(allValues);
58
+ var shouldRender = useMemo(function () {
59
+ if (!shouldUpdate || shouldUpdate === true) return true;
60
+ if (prevValues === undefined) return true;
61
+ return shouldUpdate(prevValues, allValues);
62
+ }, [allValues, prevValues, shouldUpdate]);
63
+ return {
64
+ allValues: allValues,
65
+ depValues: depValues,
66
+ shouldRender: shouldRender
67
+ };
68
+ }
69
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybS91c2VGb3JtSXRlbVdhdGNoLnRzIiwiY29tcG9uZW50cy9Gb3JtL3VzZUZvcm1JdGVtV2F0Y2guanMiXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVdhdGNoIiwidXNlUHJldmlvdXMiLCJFTVBUWV9OQU1FUyIsInVzZUZvcm1JdGVtV2F0Y2giLCJfcmVmIiwiY29udHJvbCIsIm1ldGhvZHMiLCJkZXBlbmRlbmNpZXMiLCJ3YXRjaE5hbWVzIiwic2hvdWxkVXBkYXRlIiwibmFtZSIsInNob3VsZFdhdGNoQWxsVmFsdWVzIiwiZGVwTmFtZXMiLCJsZW5ndGgiLCJzaG91bGRXYXRjaERlcHMiLCJ3YXRjaE5hbWVzTGlzdCIsInNob3VsZFdhdGNoTmFtZXMiLCJkZXBWYWx1ZXMiLCJkaXNhYmxlZCIsIndhdGNoZWRBbGxWYWx1ZXMiLCJ3YXRjaGVkTmFtZXNWYWx1ZXMiLCJhbGxWYWx1ZXMiLCJnZXRWYWx1ZXMiLCJwcmV2VmFsdWVzIiwic2hvdWxkUmVuZGVyIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxPQUFPLFFBQVEsT0FBTztBQUMvQixTQUFTQyxRQUFRLFFBQVEsaUJBQWlCO0FBQzFDLE9BQU9DLFdBQVcsTUFBTSxnQkFBZ0I7QUFzQ3hDO0FBQ0EsSUFBTUMsV0FBVyxHQUFZLEVBQUU7QUFFL0I7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBRHVDQSxPQUFNLFNBQVVDLGdCQUFnQkEsQ0FBQUMsSUFBQSxFQU9LO0VBQUEsSUFObkNDLE9BQU8sR0FBQUQsSUFBQSxDQUFQQyxPQUFPO0lBQ1BDLE9BQU8sR0FBQUYsSUFBQSxDQUFQRSxPQUFPO0lBQ1BDLFlBQVksR0FBQUgsSUFBQSxDQUFaRyxZQUFZO0lBQ1pDLFVBQVUsR0FBQUosSUFBQSxDQUFWSSxVQUFVO0lBQ1ZDLFlBQVksR0FBQUwsSUFBQSxDQUFaSyxZQUFZO0lBQ1pDLElBQUksR0FBQU4sSUFBQSxDQUFKTSxJQUFJO0VBRUosSUFBTUMsb0JBQW9CLEdBQUdGLFlBQVksS0FBSyxJQUFJLElBQUksT0FBT0EsWUFBWSxLQUFLLFVBQVU7RUFDeEYsSUFBTUcsUUFBUSxHQUFJLENBQUFMLFlBQVksS0FBQSxJQUFBLElBQVpBLFlBQVksS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBWkEsWUFBWSxDQUFFTSxNQUFNLElBQUdOLFlBQVksR0FBR0wsV0FBeUM7RUFDakcsSUFBTVksZUFBZSxHQUFHLENBQUMsRUFBRUosSUFBSSxJQUFJRSxRQUFRLENBQUNDLE1BQU0sQ0FBQztFQUNuRCxJQUFNRSxjQUFjLEdBQUksQ0FBQVAsVUFBVSxLQUFBLElBQUEsSUFBVkEsVUFBVSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFWQSxVQUFVLENBQUVLLE1BQU0sSUFBR0wsVUFBVSxHQUFHTixXQUF5QztFQUNuRyxJQUFNYyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUNSLFVBQVUsS0FBQSxJQUFBLElBQVZBLFVBQVUsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBVkEsVUFBVSxDQUFFSyxNQUFNLENBQUE7RUFFN0MsSUFBTUksU0FBUyxHQUFHakIsUUFBUSxDQUFDO0lBQUVLLE9BQU8sRUFBUEEsT0FBTztJQUFFSyxJQUFJLEVBQUVFLFFBQVE7SUFBRU0sUUFBUSxFQUFFLENBQUNKO0VBQWUsQ0FBRSxDQUFDO0VBQ25GLElBQU1LLGdCQUFnQixHQUFHbkIsUUFBUSxDQUFDO0lBQUVLLE9BQU8sRUFBUEEsT0FBTztJQUFFYSxRQUFRLEVBQUUsQ0FBQ1A7RUFBb0IsQ0FBRSxDQUFDO0VBQy9FLElBQU1TLGtCQUFrQixHQUFHcEIsUUFBUSxDQUFDO0lBQ2xDSyxPQUFPLEVBQVBBLE9BQU87SUFDUEssSUFBSSxFQUFFSyxjQUFjO0lBQ3BCRyxRQUFRLEVBQUUsQ0FBQ0Y7RUM3Q1gsQ0Q4Q0QsQ0FBQztFQUVGLElBQU1LLFNBQVMsR0FBR3RCLE9BQU8sQ0FBQyxZQUFLO0lBQzdCLElBQU11QixTQUFTLEdBQUdoQixPQUFPLENBQUNnQixTQUFTO0lBQ25DLElBQUksQ0FBQ0EsU0FBUyxFQUFFLE9BQU8sQ0FBQSxDQUFrQjtJQUN6QyxJQUFJWCxvQkFBb0IsRUFBRSxPQUFRUSxnQkFBZ0IsS0FBQSxJQUFBLElBQWhCQSxnQkFBZ0IsS0FBQSxLQUFBLENBQUEsR0FBaEJBLGdCQUFnQixHQUFJRyxTQUFTLENBQUEsQ0FBRTtJQUNqRSxPQUFPQSxTQUFTLENBQUEsQ0FBRTtFQUNwQixDQUFDLEVBQUUsQ0FDRGhCLE9BQU8sRUFDUEssb0JBQW9CLEVBQ3BCUSxnQkFBZ0I7RUFDaEI7RUFDQTtFQUNBO0VBQ0FDLGtCQUFrQixDQUNuQixDQUFDO0VBRUYsSUFBTUcsVUFBVSxHQUFHdEIsV0FBVyxDQUFDb0IsU0FBUyxDQUFDO0VBRXpDLElBQU1HLFlBQVksR0FBR3pCLE9BQU8sQ0FBQyxZQUFLO0lBQ2hDLElBQUksQ0FBQ1UsWUFBWSxJQUFJQSxZQUFZLEtBQUssSUFBSSxFQUFFLE9BQU8sSUFBSTtJQUN2RCxJQUFJYyxVQUFVLEtBQUtFLFNBQVMsRUFBRSxPQUFPLElBQUk7SUFDekMsT0FBT2hCLFlBQVksQ0FBQ2MsVUFBVSxFQUFFRixTQUFTLENBQUM7RUFDNUMsQ0FBQyxFQUFFLENBQUNBLFNBQVMsRUFBRUUsVUFBVSxFQUFFZCxZQUFZLENBQUMsQ0FBQztFQUV6QyxPQUFPO0lBQUVZLFNBQVMsRUFBVEEsU0FBUztJQUFFSixTQUFTLEVBQVRBLFNBQVM7SUFBRU8sWUFBWSxFQUFaQTtFQUFZLENBQUU7QUFDL0MiLCJmaWxlIjoiY29tcG9uZW50cy9Gb3JtL3VzZUZvcm1JdGVtV2F0Y2guanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VXYXRjaCB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgdXNlUHJldmlvdXMgZnJvbSAnLi4vdXNlUHJldmlvdXMnO1xuLy8gTW9kdWxlLWxldmVsIGNvbnN0YW50IHRvIGF2b2lkIHJlY3JlYXRpbmcgZW1wdHkgYXJyYXkgb24gZWFjaCByZW5kZXIuXG5jb25zdCBFTVBUWV9OQU1FUyA9IFtdO1xuLyoqXG4gKiBDb25zb2xpZGF0ZXMgdGhlIHRocmVlIGB1c2VXYXRjaGAgc3Vic2NyaXB0aW9ucyAoZGVwZW5kZW5jaWVzLCBhbGwgdmFsdWVzLFxuICogYW5kIG5hbWVkIHdhdGNoZXMpIGFsb25nIHdpdGggYGFsbFZhbHVlc2AgZGVyaXZhdGlvbiBhbmQgYHNob3VsZFJlbmRlcmBcbiAqIGdhdGluZyBpbnRvIGEgc2luZ2xlIGhvb2suXG4gKlxuICogVGhpcyBob29rIG1hbmFnZXM6XG4gKiAxLiBXYXRjaGluZyBkZXBlbmRlbmN5IGZpZWxkcyBmb3IgY3Jvc3MtZmllbGQgcmUtdmFsaWRhdGlvbi5cbiAqIDIuIFdhdGNoaW5nIGFsbCB2YWx1ZXMgd2hlbiBgc2hvdWxkVXBkYXRlYCByZXF1aXJlcyBhIGZ1bGwtZm9ybSBjb21wYXJpc29uLlxuICogMy4gV2F0Y2hpbmcgbmFtZWQgZmllbGRzIHNwZWNpZmllZCB2aWEgYHdhdGNoTmFtZXNgLlxuICogNC4gQ29tcHV0aW5nIGBzaG91bGRSZW5kZXJgIGJhc2VkIG9uIHRoZSBgc2hvdWxkVXBkYXRlYCBwcm9wLlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgc2hhcGUgb2YgdGhlIGZvcm0gdmFsdWVzLlxuICogQHBhcmFtIGFyZ3MgLSB7QGxpbmsgVXNlRm9ybUl0ZW1XYXRjaEFyZ3N9XG4gKiBAcmV0dXJucyB7QGxpbmsgVXNlRm9ybUl0ZW1XYXRjaFJlc3VsdH0gY29udGFpbmluZyBjdXJyZW50IHZhbHVlcyBhbmQgcmVuZGVyIGdhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb3JtSXRlbVdhdGNoKHsgY29udHJvbCwgbWV0aG9kcywgZGVwZW5kZW5jaWVzLCB3YXRjaE5hbWVzLCBzaG91bGRVcGRhdGUsIG5hbWUsIH0pIHtcbiAgICBjb25zdCBzaG91bGRXYXRjaEFsbFZhbHVlcyA9IHNob3VsZFVwZGF0ZSA9PT0gdHJ1ZSB8fCB0eXBlb2Ygc2hvdWxkVXBkYXRlID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGRlcE5hbWVzID0gKChkZXBlbmRlbmNpZXMgPT09IG51bGwgfHwgZGVwZW5kZW5jaWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZXBlbmRlbmNpZXMubGVuZ3RoKSA/IGRlcGVuZGVuY2llcyA6IEVNUFRZX05BTUVTKTtcbiAgICBjb25zdCBzaG91bGRXYXRjaERlcHMgPSAhIShuYW1lICYmIGRlcE5hbWVzLmxlbmd0aCk7XG4gICAgY29uc3Qgd2F0Y2hOYW1lc0xpc3QgPSAoKHdhdGNoTmFtZXMgPT09IG51bGwgfHwgd2F0Y2hOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2F0Y2hOYW1lcy5sZW5ndGgpID8gd2F0Y2hOYW1lcyA6IEVNUFRZX05BTUVTKTtcbiAgICBjb25zdCBzaG91bGRXYXRjaE5hbWVzID0gISEod2F0Y2hOYW1lcyA9PT0gbnVsbCB8fCB3YXRjaE5hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3YXRjaE5hbWVzLmxlbmd0aCk7XG4gICAgY29uc3QgZGVwVmFsdWVzID0gdXNlV2F0Y2goeyBjb250cm9sLCBuYW1lOiBkZXBOYW1lcywgZGlzYWJsZWQ6ICFzaG91bGRXYXRjaERlcHMgfSk7XG4gICAgY29uc3Qgd2F0Y2hlZEFsbFZhbHVlcyA9IHVzZVdhdGNoKHsgY29udHJvbCwgZGlzYWJsZWQ6ICFzaG91bGRXYXRjaEFsbFZhbHVlcyB9KTtcbiAgICBjb25zdCB3YXRjaGVkTmFtZXNWYWx1ZXMgPSB1c2VXYXRjaCh7XG4gICAgICAgIGNvbnRyb2wsXG4gICAgICAgIG5hbWU6IHdhdGNoTmFtZXNMaXN0LFxuICAgICAgICBkaXNhYmxlZDogIXNob3VsZFdhdGNoTmFtZXMsXG4gICAgfSk7XG4gICAgY29uc3QgYWxsVmFsdWVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldFZhbHVlcyA9IG1ldGhvZHMuZ2V0VmFsdWVzO1xuICAgICAgICBpZiAoIWdldFZhbHVlcylcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgaWYgKHNob3VsZFdhdGNoQWxsVmFsdWVzKVxuICAgICAgICAgICAgcmV0dXJuICh3YXRjaGVkQWxsVmFsdWVzICE9PSBudWxsICYmIHdhdGNoZWRBbGxWYWx1ZXMgIT09IHZvaWQgMCA/IHdhdGNoZWRBbGxWYWx1ZXMgOiBnZXRWYWx1ZXMoKSk7XG4gICAgICAgIHJldHVybiBnZXRWYWx1ZXMoKTtcbiAgICB9LCBbXG4gICAgICAgIG1ldGhvZHMsXG4gICAgICAgIHNob3VsZFdhdGNoQWxsVmFsdWVzLFxuICAgICAgICB3YXRjaGVkQWxsVmFsdWVzLFxuICAgICAgICAvLyBJbnRlbnRpb25hbGx5IHVudXNlZCBpbiB1c2VNZW1vIGJvZHk6IHRoaXMgZGVwZW5kZW5jeSBmb3JjZXMgYGFsbFZhbHVlc2BcbiAgICAgICAgLy8gdG8gcmVjb21wdXRlIHZpYSBtZXRob2RzLmdldFZhbHVlcygpIHdoZW4gd2F0Y2hlZCBuYW1lcyBjaGFuZ2Ugd2hpbGVcbiAgICAgICAgLy8gYHNob3VsZFdhdGNoQWxsVmFsdWVzYCBpcyBmYWxzZS5cbiAgICAgICAgd2F0Y2hlZE5hbWVzVmFsdWVzLFxuICAgIF0pO1xuICAgIGNvbnN0IHByZXZWYWx1ZXMgPSB1c2VQcmV2aW91cyhhbGxWYWx1ZXMpO1xuICAgIGNvbnN0IHNob3VsZFJlbmRlciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIXNob3VsZFVwZGF0ZSB8fCBzaG91bGRVcGRhdGUgPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHByZXZWYWx1ZXMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gc2hvdWxkVXBkYXRlKHByZXZWYWx1ZXMsIGFsbFZhbHVlcyk7XG4gICAgfSwgW2FsbFZhbHVlcywgcHJldlZhbHVlcywgc2hvdWxkVXBkYXRlXSk7XG4gICAgcmV0dXJuIHsgYWxsVmFsdWVzLCBkZXBWYWx1ZXMsIHNob3VsZFJlbmRlciB9O1xufSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,40 @@
1
+ import type { FieldPath, FieldValues } from 'react-hook-form';
2
+ import type { FormItemProps } from './interface';
3
+ /**
4
+ * Arguments for {@link useValidationTrigger}.
5
+ *
6
+ * @template TFieldValues - The shape of the form values.
7
+ */
8
+ interface UseValidationTriggerArgs<TFieldValues extends FieldValues> {
9
+ /** The field path to validate. When `undefined`, validation is skipped. */
10
+ name?: FieldPath<TFieldValues>;
11
+ /** The `trigger` function from `react-hook-form` for imperative validation. */
12
+ trigger: (name: FieldPath<TFieldValues>) => Promise<boolean>;
13
+ /** Event(s) that should trigger validation (`'onChange'`, `'onBlur'`, or both). */
14
+ validateTrigger?: FormItemProps<TFieldValues>['validateTrigger'];
15
+ /** Debounce delay in milliseconds for triggered validation. */
16
+ validateDebounce?: number;
17
+ /** Field paths whose changes should re-trigger this field's validation. */
18
+ dependencies?: FormItemProps<TFieldValues>['dependencies'];
19
+ /** Current watched dependency values used to detect changes. */
20
+ depValues: unknown;
21
+ }
22
+ /**
23
+ * Encapsulates validation trigger logic for a single form field.
24
+ *
25
+ * Responsibilities:
26
+ * - Normalizes the `validateTrigger` prop into an array of trigger modes.
27
+ * - Provides a `withTrigger` wrapper that composes event handlers (onChange/onBlur)
28
+ * with conditional validation calls.
29
+ * - Applies optional debounce to validation triggers.
30
+ * - Re-validates the field when dependency values change (cross-field validation).
31
+ * - Cleans up debounce timers on unmount.
32
+ *
33
+ * @template TFieldValues - The shape of the form values.
34
+ * @param args - {@link UseValidationTriggerArgs}
35
+ * @returns An object containing the `withTrigger` function.
36
+ */
37
+ export declare function useValidationTrigger<TFieldValues extends FieldValues = FieldValues>({ name, trigger, validateTrigger, validateDebounce, dependencies, depValues, }: UseValidationTriggerArgs<TFieldValues>): {
38
+ withTrigger: (mode: "onBlur" | "onChange", fn?: ((...args: unknown[]) => void) | undefined) => (...args: unknown[]) => void;
39
+ };
40
+ export {};
@@ -0,0 +1,74 @@
1
+ import { useEffect, useMemo, useRef } from 'react';
2
+ import useMemoizedFn from '../useMemoizedFn';
3
+ import { DEBOUNCE_MIN } from './constants';
4
+ import { normalizeValidateTrigger, shallowEqualArray } from './helper';
5
+ /**
6
+ * Encapsulates validation trigger logic for a single form field.
7
+ *
8
+ * Responsibilities:
9
+ * - Normalizes the `validateTrigger` prop into an array of trigger modes.
10
+ * - Provides a `withTrigger` wrapper that composes event handlers (onChange/onBlur)
11
+ * with conditional validation calls.
12
+ * - Applies optional debounce to validation triggers.
13
+ * - Re-validates the field when dependency values change (cross-field validation).
14
+ * - Cleans up debounce timers on unmount.
15
+ *
16
+ * @template TFieldValues - The shape of the form values.
17
+ * @param args - {@link UseValidationTriggerArgs}
18
+ * @returns An object containing the `withTrigger` function.
19
+ */
20
+ export function useValidationTrigger(_ref) {
21
+ var name = _ref.name,
22
+ trigger = _ref.trigger,
23
+ validateTrigger = _ref.validateTrigger,
24
+ validateDebounce = _ref.validateDebounce,
25
+ dependencies = _ref.dependencies,
26
+ depValues = _ref.depValues;
27
+ var triggerTimerRef = useRef(null);
28
+ var prevDepValuesRef = useRef(null);
29
+ var triggerModes = useMemo(function () {
30
+ return normalizeValidateTrigger(validateTrigger);
31
+ }, [validateTrigger]);
32
+ var triggerValidation = useMemoizedFn(function () {
33
+ if (!name) return;
34
+ var run = function run() {
35
+ void trigger(name);
36
+ };
37
+ if (validateDebounce && validateDebounce > DEBOUNCE_MIN) {
38
+ if (triggerTimerRef.current) clearTimeout(triggerTimerRef.current);
39
+ triggerTimerRef.current = setTimeout(run, validateDebounce);
40
+ return;
41
+ }
42
+ run();
43
+ });
44
+ useEffect(function () {
45
+ if (!name || !(dependencies === null || dependencies === void 0 ? void 0 : dependencies.length)) return;
46
+ var nextDeps = Array.isArray(depValues) ? depValues : [depValues];
47
+ var prevDeps = prevDepValuesRef.current;
48
+ if (!prevDeps) {
49
+ prevDepValuesRef.current = nextDeps;
50
+ return;
51
+ }
52
+ if (shallowEqualArray(prevDeps, nextDeps)) return;
53
+ prevDepValuesRef.current = nextDeps;
54
+ triggerValidation();
55
+ }, [depValues, dependencies === null || dependencies === void 0 ? void 0 : dependencies.length, name, triggerValidation]);
56
+ useEffect(function () {
57
+ return function () {
58
+ if (triggerTimerRef.current) clearTimeout(triggerTimerRef.current);
59
+ };
60
+ }, []);
61
+ var shouldTrigger = useMemoizedFn(function (mode) {
62
+ return triggerModes.includes(mode);
63
+ });
64
+ var withTrigger = useMemoizedFn(function (mode, fn) {
65
+ return function () {
66
+ fn === null || fn === void 0 ? void 0 : fn.apply(void 0, arguments);
67
+ if (name && shouldTrigger(mode)) triggerValidation();
68
+ };
69
+ });
70
+ return {
71
+ withTrigger: withTrigger
72
+ };
73
+ }
74
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybS91c2VWYWxpZGF0aW9uVHJpZ2dlci50cyIsImNvbXBvbmVudHMvRm9ybS91c2VWYWxpZGF0aW9uVHJpZ2dlci5qcyJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlTWVtb2l6ZWRGbiIsIkRFQk9VTkNFX01JTiIsIm5vcm1hbGl6ZVZhbGlkYXRlVHJpZ2dlciIsInNoYWxsb3dFcXVhbEFycmF5IiwidXNlVmFsaWRhdGlvblRyaWdnZXIiLCJfcmVmIiwibmFtZSIsInRyaWdnZXIiLCJ2YWxpZGF0ZVRyaWdnZXIiLCJ2YWxpZGF0ZURlYm91bmNlIiwiZGVwZW5kZW5jaWVzIiwiZGVwVmFsdWVzIiwidHJpZ2dlclRpbWVyUmVmIiwicHJldkRlcFZhbHVlc1JlZiIsInRyaWdnZXJNb2RlcyIsInRyaWdnZXJWYWxpZGF0aW9uIiwicnVuIiwiY3VycmVudCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJsZW5ndGgiLCJuZXh0RGVwcyIsIkFycmF5IiwiaXNBcnJheSIsInByZXZEZXBzIiwic2hvdWxkVHJpZ2dlciIsIm1vZGUiLCJpbmNsdWRlcyIsIndpdGhUcmlnZ2VyIiwiZm4iLCJhcHBseSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sUUFBUSxPQUFPO0FBQ2xELE9BQU9DLGFBQWEsTUFBTSxrQkFBa0I7QUFFNUMsU0FBU0MsWUFBWSxRQUFzQyxhQUFhO0FBQ3hFLFNBQVNDLHdCQUF3QixFQUFFQyxpQkFBaUIsUUFBUSxVQUFVO0FBdUJ0RTtBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FEd0JBLE9BQU0sU0FBVUMsb0JBQW9CQSxDQUFBQyxJQUFBLEVBT0s7RUFBQSxJQU52Q0MsSUFBSSxHQUFBRCxJQUFBLENBQUpDLElBQUk7SUFDSkMsT0FBTyxHQUFBRixJQUFBLENBQVBFLE9BQU87SUFDUEMsZUFBZSxHQUFBSCxJQUFBLENBQWZHLGVBQWU7SUFDZkMsZ0JBQWdCLEdBQUFKLElBQUEsQ0FBaEJJLGdCQUFnQjtJQUNoQkMsWUFBWSxHQUFBTCxJQUFBLENBQVpLLFlBQVk7SUFDWkMsU0FBUyxHQUFBTixJQUFBLENBQVRNLFNBQVM7RUFFVCxJQUFNQyxlQUFlLEdBQUdiLE1BQU0sQ0FBdUMsSUFBSSxDQUFDO0VBQzFFLElBQU1jLGdCQUFnQixHQUFHZCxNQUFNLENBQW1CLElBQUksQ0FBQztFQUV2RCxJQUFNZSxZQUFZLEdBQUdoQixPQUFPLENBQzFCO0lBQUEsT0FBTUksd0JBQXdCLENBQUNNLGVBQWUsQ0FBQztFQUFBLEdBQy9DLENBQUNBLGVBQWUsQ0FBQyxDQUNsQjtFQUVELElBQU1PLGlCQUFpQixHQUFHZixhQUFhLENBQUMsWUFBSztJQUMzQyxJQUFJLENBQUNNLElBQUksRUFBRTtJQUNYLElBQU1VLEdBQUcsR0FBRyxTQUFOQSxHQUFHQSxDQUFBLEVBQVE7TUFDZixLQUFLVCxPQUFPLENBQUNELElBQUksQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSUcsZ0JBQWdCLElBQUlBLGdCQUFnQixHQUFHUixZQUFZLEVBQUU7TUFDdkQsSUFBSVcsZUFBZSxDQUFDSyxPQUFPLEVBQUVDLFlBQVksQ0FBQ04sZUFBZSxDQUFDSyxPQUFPLENBQUM7TUFDbEVMLGVBQWUsQ0FBQ0ssT0FBTyxHQUFHRSxVQUFVLENBQUNILEdBQUcsRUFBRVAsZ0JBQWdCLENBQUM7TUFDM0Q7SUFDRjtJQUNBTyxHQUFHLENBQUEsQ0FBRTtFQUNQLENBQUMsQ0FBQztFQUVGbkIsU0FBUyxDQUFDLFlBQUs7SUFDYixJQUFJLENBQUNTLElBQUksSUFBSSxFQUFDSSxZQUFZLEtBQUEsSUFBQSxJQUFaQSxZQUFZLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQVpBLFlBQVksQ0FBRVUsTUFBTSxDQUFBLEVBQUU7SUFDcEMsSUFBTUMsUUFBUSxHQUFHQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ1osU0FBUyxDQUFDLEdBQUdBLFNBQVMsR0FBRyxDQUFDQSxTQUFTLENBQUM7SUFDbkUsSUFBTWEsUUFBUSxHQUFHWCxnQkFBZ0IsQ0FBQ0ksT0FBTztJQUN6QyxJQUFJLENBQUNPLFFBQVEsRUFBRTtNQUNiWCxnQkFBZ0IsQ0FBQ0ksT0FBTyxHQUFHSSxRQUFRO01BQ25DO0lBQ0Y7SUFDQSxJQUFJbEIsaUJBQWlCLENBQUNxQixRQUFRLEVBQUVILFFBQVEsQ0FBQyxFQUFFO0lBQzNDUixnQkFBZ0IsQ0FBQ0ksT0FBTyxHQUFHSSxRQUFRO0lBQ25DTixpQkFBaUIsQ0FBQSxDQUFFO0VBQ3JCLENBQUMsRUFBRSxDQUFDSixTQUFTLEVBQUVELFlBQVksS0FBQSxJQUFBLElBQVpBLFlBQVksS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBWkEsWUFBWSxDQUFFVSxNQUFNLEVBQUVkLElBQUksRUFBRVMsaUJBQWlCLENBQUMsQ0FBQztFQUU5RGxCLFNBQVMsQ0FBQztJQUFBLE9BQU0sWUFBSztNQUNuQixJQUFJZSxlQUFlLENBQUNLLE9BQU8sRUFBRUMsWUFBWSxDQUFDTixlQUFlLENBQUNLLE9BQU8sQ0FBQztJQUNwRSxDQUFDO0VBQUEsR0FBRSxFQUFFLENBQUM7RUFFTixJQUFNUSxhQUFhLEdBQUd6QixhQUFhLENBQ2pDLFVBQUMwQixJQUFpRDtJQUFBLE9BQUtaLFlBQVksQ0FBQ2EsUUFBUSxDQUFDRCxJQUFJLENBQUM7RUFBQSxFQUNuRjtFQUVELElBQU1FLFdBQVcsR0FBRzVCLGFBQWEsQ0FDL0IsVUFBQzBCLElBQWlELEVBQUVHLEVBQWlDO0lBQUEsT0FDbkYsWUFBdUI7TUFDckJBLEVBQUUsS0FBQSxJQUFBLElBQUZBLEVBQUUsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBRkEsRUFBRSxDQUFBQyxLQUFBLFNBQUFDLFNBQVUsQ0FBQztNQUNiLElBQUl6QixJQUFJLElBQUltQixhQUFhLENBQUNDLElBQUksQ0FBQyxFQUFFWCxpQkFBaUIsQ0FBQSxDQUFFO0lBQ3RELENBQUM7RUFBQSxFQUNKO0VBRUQsT0FBTztJQUFFYSxXQUFXLEVBQVhBO0VBQVcsQ0FBRTtBQUN4QiIsImZpbGUiOiJjb21wb25lbnRzL0Zvcm0vdXNlVmFsaWRhdGlvblRyaWdnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnLi4vdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyBERUJPVU5DRV9NSU4gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBub3JtYWxpemVWYWxpZGF0ZVRyaWdnZXIsIHNoYWxsb3dFcXVhbEFycmF5IH0gZnJvbSAnLi9oZWxwZXInO1xuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgdmFsaWRhdGlvbiB0cmlnZ2VyIGxvZ2ljIGZvciBhIHNpbmdsZSBmb3JtIGZpZWxkLlxuICpcbiAqIFJlc3BvbnNpYmlsaXRpZXM6XG4gKiAtIE5vcm1hbGl6ZXMgdGhlIGB2YWxpZGF0ZVRyaWdnZXJgIHByb3AgaW50byBhbiBhcnJheSBvZiB0cmlnZ2VyIG1vZGVzLlxuICogLSBQcm92aWRlcyBhIGB3aXRoVHJpZ2dlcmAgd3JhcHBlciB0aGF0IGNvbXBvc2VzIGV2ZW50IGhhbmRsZXJzIChvbkNoYW5nZS9vbkJsdXIpXG4gKiAgIHdpdGggY29uZGl0aW9uYWwgdmFsaWRhdGlvbiBjYWxscy5cbiAqIC0gQXBwbGllcyBvcHRpb25hbCBkZWJvdW5jZSB0byB2YWxpZGF0aW9uIHRyaWdnZXJzLlxuICogLSBSZS12YWxpZGF0ZXMgdGhlIGZpZWxkIHdoZW4gZGVwZW5kZW5jeSB2YWx1ZXMgY2hhbmdlIChjcm9zcy1maWVsZCB2YWxpZGF0aW9uKS5cbiAqIC0gQ2xlYW5zIHVwIGRlYm91bmNlIHRpbWVycyBvbiB1bm1vdW50LlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgc2hhcGUgb2YgdGhlIGZvcm0gdmFsdWVzLlxuICogQHBhcmFtIGFyZ3MgLSB7QGxpbmsgVXNlVmFsaWRhdGlvblRyaWdnZXJBcmdzfVxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGB3aXRoVHJpZ2dlcmAgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VWYWxpZGF0aW9uVHJpZ2dlcih7IG5hbWUsIHRyaWdnZXIsIHZhbGlkYXRlVHJpZ2dlciwgdmFsaWRhdGVEZWJvdW5jZSwgZGVwZW5kZW5jaWVzLCBkZXBWYWx1ZXMsIH0pIHtcbiAgICBjb25zdCB0cmlnZ2VyVGltZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgcHJldkRlcFZhbHVlc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCB0cmlnZ2VyTW9kZXMgPSB1c2VNZW1vKCgpID0+IG5vcm1hbGl6ZVZhbGlkYXRlVHJpZ2dlcih2YWxpZGF0ZVRyaWdnZXIpLCBbdmFsaWRhdGVUcmlnZ2VyXSk7XG4gICAgY29uc3QgdHJpZ2dlclZhbGlkYXRpb24gPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgICAgICB2b2lkIHRyaWdnZXIobmFtZSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh2YWxpZGF0ZURlYm91bmNlICYmIHZhbGlkYXRlRGVib3VuY2UgPiBERUJPVU5DRV9NSU4pIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyVGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgdHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KHJ1biwgdmFsaWRhdGVEZWJvdW5jZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcnVuKCk7XG4gICAgfSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFuYW1lIHx8ICEoZGVwZW5kZW5jaWVzID09PSBudWxsIHx8IGRlcGVuZGVuY2llcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwZW5kZW5jaWVzLmxlbmd0aCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHREZXBzID0gQXJyYXkuaXNBcnJheShkZXBWYWx1ZXMpID8gZGVwVmFsdWVzIDogW2RlcFZhbHVlc107XG4gICAgICAgIGNvbnN0IHByZXZEZXBzID0gcHJldkRlcFZhbHVlc1JlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIXByZXZEZXBzKSB7XG4gICAgICAgICAgICBwcmV2RGVwVmFsdWVzUmVmLmN1cnJlbnQgPSBuZXh0RGVwcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hhbGxvd0VxdWFsQXJyYXkocHJldkRlcHMsIG5leHREZXBzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcHJldkRlcFZhbHVlc1JlZi5jdXJyZW50ID0gbmV4dERlcHM7XG4gICAgICAgIHRyaWdnZXJWYWxpZGF0aW9uKCk7XG4gICAgfSwgW2RlcFZhbHVlcywgZGVwZW5kZW5jaWVzID09PSBudWxsIHx8IGRlcGVuZGVuY2llcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwZW5kZW5jaWVzLmxlbmd0aCwgbmFtZSwgdHJpZ2dlclZhbGlkYXRpb25dKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgICAgICBpZiAodHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQpXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBzaG91bGRUcmlnZ2VyID0gdXNlTWVtb2l6ZWRGbigobW9kZSkgPT4gdHJpZ2dlck1vZGVzLmluY2x1ZGVzKG1vZGUpKTtcbiAgICBjb25zdCB3aXRoVHJpZ2dlciA9IHVzZU1lbW9pemVkRm4oKG1vZGUsIGZuKSA9PiAoLi4uYXJncykgPT4ge1xuICAgICAgICBmbiA9PT0gbnVsbCB8fCBmbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZm4oLi4uYXJncyk7XG4gICAgICAgIGlmIChuYW1lICYmIHNob3VsZFRyaWdnZXIobW9kZSkpXG4gICAgICAgICAgICB0cmlnZ2VyVmFsaWRhdGlvbigpO1xuICAgIH0pO1xuICAgIHJldHVybiB7IHdpdGhUcmlnZ2VyIH07XG59Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,5 @@
1
+ import type { FC, PropsWithChildren } from 'react';
2
+ import type { GridColProps } from './interface';
3
+ export declare const Col: FC<PropsWithChildren<GridColProps>>;
4
+ declare const _default: import("react").NamedExoticComponent<PropsWithChildren<GridColProps>>;
5
+ export default _default;