react-native-system-ui 0.0.7 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. package/README.md +46 -31
  2. package/dist/cjs/components/action-sheet/ActionSheet.js +128 -142
  3. package/dist/cjs/components/action-sheet/tokens.js +16 -27
  4. package/dist/cjs/components/area/Area.js +57 -70
  5. package/dist/cjs/components/area/tokens.js +6 -3
  6. package/dist/cjs/components/avatar/Avatar.js +38 -36
  7. package/dist/cjs/components/badge/Badge.js +68 -73
  8. package/dist/cjs/components/badge/tokens.js +6 -8
  9. package/dist/cjs/components/button/Button.js +135 -176
  10. package/dist/cjs/components/button/ButtonGroup.js +11 -45
  11. package/dist/cjs/components/button/tokens.js +1 -8
  12. package/dist/cjs/components/calendar/Calendar.js +212 -223
  13. package/dist/cjs/components/calendar/tokens.js +3 -3
  14. package/dist/cjs/components/cascader/Cascader.js +257 -267
  15. package/dist/cjs/components/cascader/tokens.js +2 -2
  16. package/dist/cjs/components/cascader/useCascaderExtend.js +25 -29
  17. package/dist/cjs/components/cell/Cell.js +94 -104
  18. package/dist/cjs/components/cell/CellGroup.js +37 -49
  19. package/dist/cjs/components/checkbox/Checkbox.js +140 -132
  20. package/dist/cjs/components/checkbox/CheckboxGroup.js +21 -51
  21. package/dist/cjs/components/checkbox/tokens.js +7 -10
  22. package/dist/cjs/components/circle/Circle.js +87 -74
  23. package/dist/cjs/components/collapse/Collapse.js +88 -104
  24. package/dist/cjs/components/config-provider/ConfigProvider.js +17 -4
  25. package/dist/cjs/components/config-provider/DirectionContext.js +15 -0
  26. package/dist/cjs/components/config-provider/index.js +7 -0
  27. package/dist/cjs/components/config-provider/locale/en-US.js +32 -0
  28. package/dist/cjs/components/config-provider/locale/zh-CN.js +32 -0
  29. package/dist/cjs/components/config-provider/useDirection.js +16 -0
  30. package/dist/cjs/components/count-down/CountDown.js +32 -27
  31. package/dist/cjs/components/datetime-picker/DatetimePicker.js +80 -104
  32. package/dist/cjs/components/datetime-picker/tokens.js +14 -3
  33. package/dist/cjs/components/dialog/Dialog.js +159 -121
  34. package/dist/cjs/components/dialog/imperative.js +24 -43
  35. package/dist/cjs/components/dialog/tokens.js +1 -0
  36. package/dist/cjs/components/divider/Divider.js +57 -62
  37. package/dist/cjs/components/empty/Empty.js +53 -52
  38. package/dist/cjs/components/error-boundary/ErrorBoundary.js +74 -0
  39. package/dist/cjs/components/error-boundary/index.js +19 -0
  40. package/dist/cjs/components/field/Field.js +109 -106
  41. package/dist/cjs/components/flex/Flex.js +32 -32
  42. package/dist/cjs/components/flex/FlexItem.js +27 -27
  43. package/dist/cjs/components/form/Form.js +178 -196
  44. package/dist/cjs/components/form/FormItem.js +87 -109
  45. package/dist/cjs/components/form/FormList.js +57 -45
  46. package/dist/cjs/components/form/tokens.js +6 -3
  47. package/dist/cjs/components/form/utils.js +15 -34
  48. package/dist/cjs/components/grid/Grid.js +44 -43
  49. package/dist/cjs/components/grid/GridItem.js +92 -86
  50. package/dist/cjs/components/image/Image.js +76 -79
  51. package/dist/cjs/components/image/tokens.js +5 -3
  52. package/dist/cjs/components/image-preview/ImagePreview.js +125 -113
  53. package/dist/cjs/components/image-preview/imperative.js +4 -13
  54. package/dist/cjs/components/image-preview/tokens.js +3 -1
  55. package/dist/cjs/components/index.js +13 -0
  56. package/dist/cjs/components/input/Input.js +40 -35
  57. package/dist/cjs/components/loading/Loading.js +32 -33
  58. package/dist/cjs/components/nav-bar/NavBar.js +88 -100
  59. package/dist/cjs/components/nav-bar/tokens.js +4 -10
  60. package/dist/cjs/components/notice-bar/NoticeBar.js +81 -80
  61. package/dist/cjs/components/notice-bar/tokens.js +3 -1
  62. package/dist/cjs/components/notify/Notify.js +89 -84
  63. package/dist/cjs/components/notify/imperative.js +32 -55
  64. package/dist/cjs/components/notify/tokens.js +2 -11
  65. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +277 -283
  66. package/dist/cjs/components/number-keyboard/tokens.js +7 -1
  67. package/dist/cjs/components/overlay/Overlay.js +37 -52
  68. package/dist/cjs/components/overlay/tokens.js +5 -3
  69. package/dist/cjs/components/password-input/PasswordInput.js +114 -95
  70. package/dist/cjs/components/picker/Picker.js +465 -454
  71. package/dist/cjs/components/picker/tokens.js +1 -1
  72. package/dist/cjs/components/popup/Popup.js +269 -299
  73. package/dist/cjs/components/popup/tokens.js +1 -0
  74. package/dist/cjs/components/portal/Portal.js +12 -30
  75. package/dist/cjs/components/portal/PortalHost.js +151 -234
  76. package/dist/cjs/components/progress/Progress.js +103 -101
  77. package/dist/cjs/components/progress/tokens.js +1 -0
  78. package/dist/cjs/components/radio/Radio.js +98 -91
  79. package/dist/cjs/components/radio/RadioGroup.js +13 -45
  80. package/dist/cjs/components/radio/tokens.js +7 -10
  81. package/dist/cjs/components/safe-area-view/SafeAreaView.js +22 -26
  82. package/dist/cjs/components/search/Search.js +65 -57
  83. package/dist/cjs/components/selector/Selector.js +21 -27
  84. package/dist/cjs/components/share-sheet/ShareSheet.js +165 -161
  85. package/dist/cjs/components/share-sheet/tokens.js +3 -1
  86. package/dist/cjs/components/sidebar/Sidebar.js +51 -51
  87. package/dist/cjs/components/sidebar/SidebarContext.js +1 -2
  88. package/dist/cjs/components/sidebar/SidebarItem.js +19 -21
  89. package/dist/cjs/components/sidebar/tokens.js +4 -4
  90. package/dist/cjs/components/skeleton/Skeleton.js +71 -77
  91. package/dist/cjs/components/skeleton/tokens.js +1 -2
  92. package/dist/cjs/components/slider/Slider.js +156 -135
  93. package/dist/cjs/components/space/Space.js +57 -76
  94. package/dist/cjs/components/space/tokens.js +7 -1
  95. package/dist/cjs/components/stepper/Stepper.js +182 -158
  96. package/dist/cjs/components/stepper/tokens.js +1 -0
  97. package/dist/cjs/components/swiper/Swiper.js +256 -255
  98. package/dist/cjs/components/swiper/SwiperPagIndicator.js +26 -27
  99. package/dist/cjs/components/swiper/tokens.js +10 -3
  100. package/dist/cjs/components/switch/Switch.js +23 -25
  101. package/dist/cjs/components/tabbar/Tabbar.js +48 -40
  102. package/dist/cjs/components/tabbar/TabbarContext.js +1 -2
  103. package/dist/cjs/components/tabbar/TabbarItem.js +65 -68
  104. package/dist/cjs/components/tabs/Tabs.js +402 -439
  105. package/dist/cjs/components/tabs/tokens.js +3 -1
  106. package/dist/cjs/components/tag/Tag.js +68 -59
  107. package/dist/cjs/components/toast/Toast.js +91 -90
  108. package/dist/cjs/components/toast/imperative.js +16 -41
  109. package/dist/cjs/components/toast/tokens.js +1 -0
  110. package/dist/cjs/components/typography/Typography.js +25 -25
  111. package/dist/cjs/components/water-mark/WaterMark.js +80 -78
  112. package/dist/cjs/design-system/Text.js +38 -0
  113. package/dist/cjs/design-system/ThemeProvider.js +5 -11
  114. package/dist/cjs/design-system/createComponentTokensHook.js +11 -13
  115. package/dist/cjs/design-system/index.js +7 -0
  116. package/dist/cjs/design-system/mergeTokensOverride.js +1 -4
  117. package/dist/cjs/design-system/presets.js +2 -3
  118. package/dist/cjs/design-system/tokens.js +2 -11
  119. package/dist/cjs/hooks/animation/index.js +25 -0
  120. package/dist/cjs/hooks/animation/useAnimatedTransition.js +72 -0
  121. package/dist/cjs/hooks/animation/useReducedMotion.js +75 -0
  122. package/dist/cjs/hooks/aria/useAriaListBox.js +8 -16
  123. package/dist/cjs/hooks/aria/useAriaOverlay.js +3 -3
  124. package/dist/cjs/hooks/aria/useAriaPress.js +8 -21
  125. package/dist/cjs/hooks/aria/useAriaToggle.js +3 -3
  126. package/dist/cjs/hooks/gesture/useGestureScroll.js +60 -61
  127. package/dist/cjs/hooks/index.js +12 -0
  128. package/dist/cjs/hooks/overlay/OverlayStackStore.js +49 -69
  129. package/dist/cjs/hooks/overlay/useOverlayStack.js +13 -19
  130. package/dist/cjs/hooks/useControllableValue.js +13 -24
  131. package/dist/cjs/hooks/useCountDown.js +30 -38
  132. package/dist/cjs/hooks/useHairline.js +17 -29
  133. package/dist/cjs/hooks/useSafeAreaPadding.js +1 -4
  134. package/dist/cjs/index.js +67 -1
  135. package/dist/cjs/platform/animation.js +10 -2
  136. package/dist/cjs/platform/measure.js +21 -37
  137. package/dist/cjs/utils/color.js +20 -39
  138. package/dist/cjs/utils/compare.js +7 -12
  139. package/dist/cjs/utils/createPlatformShadow.js +28 -39
  140. package/dist/cjs/utils/date.js +20 -50
  141. package/dist/cjs/utils/deepMerge.js +16 -26
  142. package/dist/cjs/utils/hairline.js +75 -71
  143. package/dist/cjs/utils/index.js +22 -0
  144. package/dist/cjs/utils/number.js +21 -29
  145. package/dist/cjs/utils/render.js +21 -0
  146. package/dist/cjs/utils/rtl.js +25 -0
  147. package/dist/cjs/utils/string.js +8 -25
  148. package/dist/cjs/utils/validate.js +2 -4
  149. package/dist/es/components/action-sheet/ActionSheet.js +130 -144
  150. package/dist/es/components/action-sheet/tokens.js +16 -27
  151. package/dist/es/components/area/Area.js +58 -71
  152. package/dist/es/components/area/tokens.js +6 -3
  153. package/dist/es/components/avatar/Avatar.js +38 -36
  154. package/dist/es/components/avatar/index.js +1 -2
  155. package/dist/es/components/badge/Badge.js +70 -75
  156. package/dist/es/components/badge/tokens.js +6 -8
  157. package/dist/es/components/button/Button.js +136 -177
  158. package/dist/es/components/button/ButtonGroup.js +12 -46
  159. package/dist/es/components/button/tokens.js +2 -3
  160. package/dist/es/components/calendar/Calendar.js +214 -225
  161. package/dist/es/components/calendar/tokens.js +3 -3
  162. package/dist/es/components/cascader/Cascader.js +260 -270
  163. package/dist/es/components/cascader/tokens.js +2 -2
  164. package/dist/es/components/cascader/useCascaderExtend.js +25 -29
  165. package/dist/es/components/cell/Cell.js +95 -105
  166. package/dist/es/components/cell/CellGroup.js +37 -48
  167. package/dist/es/components/checkbox/Checkbox.js +141 -133
  168. package/dist/es/components/checkbox/CheckboxGroup.js +22 -52
  169. package/dist/es/components/checkbox/tokens.js +7 -10
  170. package/dist/es/components/circle/Circle.js +87 -73
  171. package/dist/es/components/collapse/Collapse.js +90 -105
  172. package/dist/es/components/config-provider/ConfigProvider.js +11 -4
  173. package/dist/es/components/config-provider/DirectionContext.js +2 -0
  174. package/dist/es/components/config-provider/index.js +1 -0
  175. package/dist/es/components/config-provider/locale/en-US.js +32 -0
  176. package/dist/es/components/config-provider/locale/zh-CN.js +32 -0
  177. package/dist/es/components/config-provider/useDirection.js +3 -0
  178. package/dist/es/components/count-down/CountDown.js +35 -30
  179. package/dist/es/components/datetime-picker/DatetimePicker.js +80 -104
  180. package/dist/es/components/datetime-picker/tokens.js +14 -3
  181. package/dist/es/components/dialog/Dialog.js +160 -121
  182. package/dist/es/components/dialog/imperative.js +24 -43
  183. package/dist/es/components/dialog/tokens.js +1 -0
  184. package/dist/es/components/divider/Divider.js +59 -63
  185. package/dist/es/components/empty/Empty.js +54 -52
  186. package/dist/es/components/error-boundary/ErrorBoundary.js +62 -0
  187. package/dist/es/components/error-boundary/index.js +1 -0
  188. package/dist/es/components/field/Field.js +109 -106
  189. package/dist/es/components/flex/Flex.js +32 -31
  190. package/dist/es/components/flex/FlexItem.js +28 -27
  191. package/dist/es/components/form/Form.js +179 -197
  192. package/dist/es/components/form/FormItem.js +86 -107
  193. package/dist/es/components/form/FormList.js +57 -45
  194. package/dist/es/components/form/tokens.js +6 -3
  195. package/dist/es/components/form/utils.js +15 -34
  196. package/dist/es/components/grid/Grid.js +44 -42
  197. package/dist/es/components/grid/GridItem.js +94 -87
  198. package/dist/es/components/image/Image.js +79 -82
  199. package/dist/es/components/image/tokens.js +5 -3
  200. package/dist/es/components/image-preview/ImagePreview.js +125 -113
  201. package/dist/es/components/image-preview/imperative.js +4 -13
  202. package/dist/es/components/image-preview/tokens.js +3 -1
  203. package/dist/es/components/index.js +3 -1
  204. package/dist/es/components/input/Input.js +41 -36
  205. package/dist/es/components/loading/Loading.js +34 -34
  206. package/dist/es/components/nav-bar/NavBar.js +88 -100
  207. package/dist/es/components/nav-bar/tokens.js +4 -4
  208. package/dist/es/components/notice-bar/NoticeBar.js +81 -79
  209. package/dist/es/components/notice-bar/tokens.js +3 -1
  210. package/dist/es/components/notify/Notify.js +93 -87
  211. package/dist/es/components/notify/imperative.js +33 -56
  212. package/dist/es/components/notify/tokens.js +2 -5
  213. package/dist/es/components/number-keyboard/NumberKeyboard.js +277 -283
  214. package/dist/es/components/number-keyboard/tokens.js +7 -1
  215. package/dist/es/components/overlay/Overlay.js +36 -51
  216. package/dist/es/components/overlay/tokens.js +5 -3
  217. package/dist/es/components/password-input/PasswordInput.js +114 -95
  218. package/dist/es/components/picker/Picker.js +465 -454
  219. package/dist/es/components/picker/tokens.js +1 -1
  220. package/dist/es/components/popup/Popup.js +269 -298
  221. package/dist/es/components/popup/tokens.js +1 -0
  222. package/dist/es/components/portal/Portal.js +13 -30
  223. package/dist/es/components/portal/PortalHost.js +152 -234
  224. package/dist/es/components/progress/Progress.js +103 -101
  225. package/dist/es/components/progress/tokens.js +1 -0
  226. package/dist/es/components/radio/Radio.js +100 -93
  227. package/dist/es/components/radio/RadioGroup.js +15 -46
  228. package/dist/es/components/radio/tokens.js +7 -10
  229. package/dist/es/components/safe-area-view/SafeAreaView.js +22 -25
  230. package/dist/es/components/search/Search.js +66 -58
  231. package/dist/es/components/selector/Selector.js +21 -27
  232. package/dist/es/components/share-sheet/ShareSheet.js +167 -163
  233. package/dist/es/components/share-sheet/tokens.js +3 -1
  234. package/dist/es/components/sidebar/Sidebar.js +53 -53
  235. package/dist/es/components/sidebar/SidebarContext.js +1 -2
  236. package/dist/es/components/sidebar/SidebarItem.js +19 -20
  237. package/dist/es/components/sidebar/tokens.js +4 -4
  238. package/dist/es/components/skeleton/Skeleton.js +71 -77
  239. package/dist/es/components/skeleton/tokens.js +1 -2
  240. package/dist/es/components/slider/Slider.js +156 -134
  241. package/dist/es/components/space/Space.js +59 -78
  242. package/dist/es/components/space/tokens.js +7 -1
  243. package/dist/es/components/stepper/Stepper.js +183 -159
  244. package/dist/es/components/stepper/tokens.js +1 -0
  245. package/dist/es/components/swiper/Swiper.js +258 -257
  246. package/dist/es/components/swiper/SwiperPagIndicator.js +26 -27
  247. package/dist/es/components/swiper/tokens.js +10 -3
  248. package/dist/es/components/switch/Switch.js +23 -25
  249. package/dist/es/components/tabbar/Tabbar.js +49 -41
  250. package/dist/es/components/tabbar/TabbarContext.js +1 -2
  251. package/dist/es/components/tabbar/TabbarItem.js +66 -69
  252. package/dist/es/components/tabs/Tabs.js +403 -440
  253. package/dist/es/components/tabs/tokens.js +3 -1
  254. package/dist/es/components/tag/Tag.js +71 -61
  255. package/dist/es/components/toast/Toast.js +94 -91
  256. package/dist/es/components/toast/imperative.js +16 -41
  257. package/dist/es/components/toast/tokens.js +1 -0
  258. package/dist/es/components/typography/Typography.js +25 -25
  259. package/dist/es/components/water-mark/WaterMark.js +81 -79
  260. package/dist/es/design-system/Text.js +19 -0
  261. package/dist/es/design-system/ThemeProvider.js +5 -11
  262. package/dist/es/design-system/createComponentTokensHook.js +11 -13
  263. package/dist/es/design-system/index.js +1 -0
  264. package/dist/es/design-system/mergeTokensOverride.js +1 -4
  265. package/dist/es/design-system/presets.js +2 -3
  266. package/dist/es/design-system/tokens.js +1 -9
  267. package/dist/es/hooks/animation/index.js +2 -0
  268. package/dist/es/hooks/animation/useAnimatedTransition.js +53 -0
  269. package/dist/es/hooks/animation/useReducedMotion.js +54 -0
  270. package/dist/es/hooks/aria/useAriaListBox.js +8 -16
  271. package/dist/es/hooks/aria/useAriaOverlay.js +3 -3
  272. package/dist/es/hooks/aria/useAriaPress.js +8 -21
  273. package/dist/es/hooks/aria/useAriaToggle.js +3 -3
  274. package/dist/es/hooks/gesture/useGestureScroll.js +60 -61
  275. package/dist/es/hooks/index.js +1 -0
  276. package/dist/es/hooks/overlay/OverlayStackStore.js +49 -69
  277. package/dist/es/hooks/overlay/useOverlayStack.js +13 -19
  278. package/dist/es/hooks/useControllableValue.js +13 -24
  279. package/dist/es/hooks/useCountDown.js +30 -38
  280. package/dist/es/hooks/useHairline.js +16 -28
  281. package/dist/es/hooks/useSafeAreaPadding.js +1 -4
  282. package/dist/es/index.js +8 -1
  283. package/dist/es/platform/animation.js +9 -1
  284. package/dist/es/platform/measure.js +21 -37
  285. package/dist/es/utils/color.js +18 -35
  286. package/dist/es/utils/compare.js +7 -12
  287. package/dist/es/utils/createPlatformShadow.js +28 -39
  288. package/dist/es/utils/date.js +20 -50
  289. package/dist/es/utils/deepMerge.js +16 -26
  290. package/dist/es/utils/hairline.js +74 -65
  291. package/dist/es/utils/index.js +2 -0
  292. package/dist/es/utils/number.js +21 -29
  293. package/dist/es/utils/render.js +7 -0
  294. package/dist/es/utils/rtl.js +17 -0
  295. package/dist/es/utils/string.js +8 -25
  296. package/dist/es/utils/validate.js +1 -2
  297. package/dist/types/components/action-sheet/ActionSheet.d.ts +1 -1
  298. package/dist/types/components/area/Area.d.ts +1 -1
  299. package/dist/types/components/area/tokens.d.ts +4 -0
  300. package/dist/types/components/avatar/Avatar.d.ts +1 -1
  301. package/dist/types/components/avatar/index.d.ts +1 -2
  302. package/dist/types/components/badge/Badge.d.ts +1 -1
  303. package/dist/types/components/button/Button.d.ts +1 -1
  304. package/dist/types/components/button/index.d.ts +1 -1
  305. package/dist/types/components/calendar/Calendar.d.ts +1 -1
  306. package/dist/types/components/cascader/Cascader.d.ts +1 -1
  307. package/dist/types/components/cell/Cell.d.ts +1 -1
  308. package/dist/types/components/cell/CellGroup.d.ts +1 -1
  309. package/dist/types/components/cell/index.d.ts +2 -2
  310. package/dist/types/components/checkbox/Checkbox.d.ts +1 -1
  311. package/dist/types/components/circle/Circle.d.ts +1 -1
  312. package/dist/types/components/collapse/Collapse.d.ts +1 -2
  313. package/dist/types/components/config-provider/DirectionContext.d.ts +3 -0
  314. package/dist/types/components/config-provider/index.d.ts +2 -1
  315. package/dist/types/components/config-provider/locale/en-US.d.ts +32 -0
  316. package/dist/types/components/config-provider/locale/zh-CN.d.ts +32 -0
  317. package/dist/types/components/config-provider/useDirection.d.ts +1 -0
  318. package/dist/types/components/count-down/CountDown.d.ts +1 -1
  319. package/dist/types/components/datetime-picker/DatetimePicker.d.ts +1 -1
  320. package/dist/types/components/datetime-picker/tokens.d.ts +12 -0
  321. package/dist/types/components/dialog/Dialog.d.ts +1 -1
  322. package/dist/types/components/dialog/tokens.d.ts +1 -0
  323. package/dist/types/components/divider/Divider.d.ts +1 -1
  324. package/dist/types/components/empty/Empty.d.ts +1 -1
  325. package/dist/types/components/error-boundary/ErrorBoundary.d.ts +6 -0
  326. package/dist/types/components/error-boundary/index.d.ts +2 -0
  327. package/dist/types/components/field/Field.d.ts +1 -1
  328. package/dist/types/components/flex/Flex.d.ts +1 -1
  329. package/dist/types/components/flex/FlexItem.d.ts +1 -1
  330. package/dist/types/components/flex/index.d.ts +2 -2
  331. package/dist/types/components/form/Form.d.ts +1 -1
  332. package/dist/types/components/form/FormItem.d.ts +2 -1
  333. package/dist/types/components/form/index.d.ts +2 -2
  334. package/dist/types/components/form/tokens.d.ts +4 -0
  335. package/dist/types/components/grid/Grid.d.ts +1 -1
  336. package/dist/types/components/grid/GridItem.d.ts +1 -1
  337. package/dist/types/components/grid/index.d.ts +2 -2
  338. package/dist/types/components/image/Image.d.ts +1 -1
  339. package/dist/types/components/image-preview/ImagePreview.d.ts +1 -1
  340. package/dist/types/components/image-preview/tokens.d.ts +1 -0
  341. package/dist/types/components/index.d.ts +4 -1
  342. package/dist/types/components/input/Input.d.ts +3 -3
  343. package/dist/types/components/loading/Loading.d.ts +1 -1
  344. package/dist/types/components/nav-bar/NavBar.d.ts +1 -1
  345. package/dist/types/components/nav-bar/tokens.d.ts +1 -1
  346. package/dist/types/components/notice-bar/NoticeBar.d.ts +1 -1
  347. package/dist/types/components/notice-bar/tokens.d.ts +1 -0
  348. package/dist/types/components/notify/Notify.d.ts +2 -2
  349. package/dist/types/components/notify/index.d.ts +1 -1
  350. package/dist/types/components/number-keyboard/tokens.d.ts +5 -0
  351. package/dist/types/components/overlay/Overlay.d.ts +1 -5
  352. package/dist/types/components/overlay/tokens.d.ts +3 -0
  353. package/dist/types/components/password-input/PasswordInput.d.ts +1 -1
  354. package/dist/types/components/picker/Picker.d.ts +6 -6
  355. package/dist/types/components/popup/Popup.d.ts +3 -42
  356. package/dist/types/components/popup/tokens.d.ts +1 -0
  357. package/dist/types/components/portal/Portal.d.ts +9 -6
  358. package/dist/types/components/portal/PortalHost.d.ts +1 -1
  359. package/dist/types/components/radio/RadioGroup.d.ts +1 -1
  360. package/dist/types/components/safe-area-view/SafeAreaView.d.ts +1 -1
  361. package/dist/types/components/search/Search.d.ts +1 -1
  362. package/dist/types/components/share-sheet/ShareSheet.d.ts +1 -1
  363. package/dist/types/components/share-sheet/tokens.d.ts +1 -0
  364. package/dist/types/components/sidebar/Sidebar.d.ts +1 -1
  365. package/dist/types/components/sidebar/SidebarContext.d.ts +1 -1
  366. package/dist/types/components/sidebar/SidebarItem.d.ts +1 -1
  367. package/dist/types/components/sidebar/index.d.ts +2 -2
  368. package/dist/types/components/skeleton/Skeleton.d.ts +1 -1
  369. package/dist/types/components/slider/Slider.d.ts +1 -1
  370. package/dist/types/components/stepper/Stepper.d.ts +1 -1
  371. package/dist/types/components/stepper/tokens.d.ts +1 -0
  372. package/dist/types/components/swiper/Swiper.d.ts +1 -1
  373. package/dist/types/components/swiper/index.d.ts +1 -1
  374. package/dist/types/components/swiper/tokens.d.ts +8 -0
  375. package/dist/types/components/tabbar/Tabbar.d.ts +2 -2
  376. package/dist/types/components/tabbar/TabbarContext.d.ts +1 -1
  377. package/dist/types/components/tabbar/TabbarItem.d.ts +2 -2
  378. package/dist/types/components/tabs/Tabs.d.ts +1 -1
  379. package/dist/types/components/tabs/index.d.ts +1 -1
  380. package/dist/types/components/tabs/tokens.d.ts +1 -0
  381. package/dist/types/components/tag/Tag.d.ts +1 -1
  382. package/dist/types/components/toast/Toast.d.ts +2 -2
  383. package/dist/types/components/toast/index.d.ts +1 -1
  384. package/dist/types/components/toast/tokens.d.ts +1 -0
  385. package/dist/types/components/water-mark/WaterMark.d.ts +1 -1
  386. package/dist/types/design-system/Text.d.ts +3 -0
  387. package/dist/types/design-system/index.d.ts +1 -0
  388. package/dist/types/design-system/tokens.d.ts +0 -1
  389. package/dist/types/hooks/animation/index.d.ts +3 -0
  390. package/dist/types/hooks/animation/useAnimatedTransition.d.ts +13 -0
  391. package/dist/types/hooks/animation/useReducedMotion.d.ts +3 -0
  392. package/dist/types/hooks/aria/useAriaOverlay.d.ts +1 -1
  393. package/dist/types/hooks/gesture/useGestureScroll.d.ts +11 -10
  394. package/dist/types/hooks/index.d.ts +1 -0
  395. package/dist/types/hooks/overlay/OverlayStackStore.d.ts +8 -8
  396. package/dist/types/hooks/useCountDown.d.ts +1 -1
  397. package/dist/types/hooks/useHairline.d.ts +1 -1
  398. package/dist/types/index.d.ts +5 -0
  399. package/dist/types/platform/animation.d.ts +8 -0
  400. package/dist/types/platform/measure.d.ts +1 -1
  401. package/dist/types/utils/color.d.ts +0 -2
  402. package/dist/types/utils/compare.d.ts +1 -1
  403. package/dist/types/utils/createPlatformShadow.d.ts +2 -2
  404. package/dist/types/utils/date.d.ts +2 -2
  405. package/dist/types/utils/hairline.d.ts +5 -10
  406. package/dist/types/utils/index.d.ts +2 -0
  407. package/dist/types/utils/number.d.ts +2 -2
  408. package/dist/types/utils/render.d.ts +5 -0
  409. package/dist/types/utils/rtl.d.ts +5 -0
  410. package/dist/types/utils/validate.d.ts +0 -1
  411. package/package.json +25 -4
@@ -1,33 +1,32 @@
1
1
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
- import React, { useCallback, useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';
2
+ import React, { useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
3
3
  import { View } from 'react-native';
4
4
  import { shallowEqualObject } from '../../utils';
5
5
  import { isPromiseLike } from '../../utils/promise';
6
6
  import { isNumber, isString, isText } from '../../utils/validate';
7
7
  import { FORM_ALL_FIELDS_KEY, getValueByName, normalizeTrigger, serializeNamePath, setValueByName } from './utils';
8
+ import { useLocale } from '../config-provider/useLocale';
8
9
  export const FormContext = /*#__PURE__*/React.createContext(null);
9
- const runRuleValidation = (rule, value, values) => {
10
- const message = rule.message ?? '表单验证未通过';
10
+ const runRuleValidation = (rule, value, values, fallbackMsg) => {
11
+ const msg = rule.message ?? fallbackMsg ?? 'Validation failed';
11
12
  const empty = value == null || value === '' || Array.isArray(value) && value.length === 0;
12
- if (rule.required && (empty || rule.whitespace && isString(value) && value.trim().length === 0)) {
13
- return message;
14
- }
13
+ if (rule.required && (empty || rule.whitespace && isString(value) && value.trim().length === 0)) return msg;
15
14
  if (empty) return null;
16
- if (rule.pattern && isString(value) && !rule.pattern.test(value)) return message;
15
+ if (rule.pattern && isString(value) && !rule.pattern.test(value)) return msg;
17
16
  if (rule.len !== undefined || rule.min !== undefined || rule.max !== undefined) {
18
- const length = isNumber(value) ? value : isString(value) || Array.isArray(value) ? value.length : 0;
19
- if (rule.len !== undefined && length !== rule.len) return message;
20
- if (rule.min !== undefined && length < rule.min) return message;
21
- if (rule.max !== undefined && length > rule.max) return message;
17
+ const len = isNumber(value) ? value : isString(value) || Array.isArray(value) ? value.length : 0;
18
+ if (rule.len !== undefined && len !== rule.len) return msg;
19
+ if (rule.min !== undefined && len < rule.min) return msg;
20
+ if (rule.max !== undefined && len > rule.max) return msg;
22
21
  }
23
22
  if (!rule.validator) return null;
24
- const handle = result => isString(result) ? result : result === false ? message : null;
25
- const result = rule.validator(value, values);
26
- return isPromiseLike(result) ? result.then(handle) : handle(result);
23
+ const handleResult = r => isString(r) ? r : r === false ? msg : null;
24
+ const res = rule.validator(value, values);
25
+ return isPromiseLike(res) ? res.then(handleResult) : handleResult(res);
27
26
  };
28
- const InternalForm = /*#__PURE__*/React.forwardRef((props, ref) => {
27
+ const InternalFormImpl = (props, ref) => {
29
28
  const {
30
- initialValues: initialValuesProp,
29
+ initialValues,
31
30
  colon,
32
31
  labelWidth,
33
32
  showValidateMessage = true,
@@ -38,241 +37,224 @@ const InternalForm = /*#__PURE__*/React.forwardRef((props, ref) => {
38
37
  children,
39
38
  ...rest
40
39
  } = props;
41
- const defaultInitialValuesRef = useRef({});
42
- const mergedInitialValues = initialValuesProp ?? defaultInitialValuesRef.current;
43
- const [, setFormVersion] = useState(0);
44
- const errorsRef = useRef({});
45
- const lastInitialValuesRef = useRef(mergedInitialValues);
46
- const fieldsRef = useRef({});
47
- const dependencyGraphRef = useRef(new Map());
48
- const valuesRef = useRef(mergedInitialValues);
49
- const validationSeqRef = useRef({});
50
- const subscribersRef = useRef(new Set());
51
- const notify = useCallback((changedValues, nextValues) => {
52
- subscribersRef.current.forEach(listener => listener(changedValues, nextValues));
40
+ const locale = useLocale();
41
+ const defaultValuesRef = useRef({}),
42
+ errorsRef = useRef({}),
43
+ lastInitialValuesRef = useRef(initialValues ?? defaultValuesRef.current),
44
+ fieldsRef = useRef({}),
45
+ dependencyGraphRef = useRef(new Map()),
46
+ valuesRef = useRef(initialValues ?? defaultValuesRef.current),
47
+ validationSeqRef = useRef({}),
48
+ subscribersRef = useRef(new Set()),
49
+ onValuesChangeRef = useRef(onValuesChange),
50
+ onFinishRef = useRef(onFinish);
51
+ onValuesChangeRef.current = onValuesChange;
52
+ onFinishRef.current = onFinish;
53
+ const mergedInitialValues = initialValues ?? defaultValuesRef.current;
54
+ const [, setVersion] = useState(0);
55
+ const notify = useCallback((changedValues, newValues) => {
56
+ subscribersRef.current.forEach(l => l(changedValues, newValues));
53
57
  }, []);
54
58
  useEffect(() => {
55
- if (shallowEqualObject(lastInitialValuesRef.current, mergedInitialValues)) {
56
- return;
57
- }
59
+ if (shallowEqualObject(lastInitialValuesRef.current, mergedInitialValues)) return;
58
60
  lastInitialValuesRef.current = mergedInitialValues;
59
61
  valuesRef.current = mergedInitialValues;
60
62
  errorsRef.current = {};
61
- setFormVersion(version => version + 1);
63
+ setVersion(v => v + 1);
62
64
  notify({
63
65
  [FORM_ALL_FIELDS_KEY]: true
64
66
  }, mergedInitialValues);
65
67
  }, [mergedInitialValues, notify]);
66
- const setFieldErrors = useCallback((name, nextErrors) => {
68
+ const setFieldErrors = useCallback((name, newErrors) => {
67
69
  const key = serializeNamePath(name);
68
- const prevErrors = errorsRef.current[key];
69
- if (!nextErrors.length) {
70
- if (!prevErrors) return;
71
- const clone = {
70
+ const prevE = errorsRef.current[key];
71
+ if (!newErrors.length) {
72
+ if (!prevE) return;
73
+ const cl = {
72
74
  ...errorsRef.current
73
75
  };
74
- delete clone[key];
75
- errorsRef.current = clone;
76
+ delete cl[key];
77
+ errorsRef.current = cl;
76
78
  notify({
77
79
  [key]: getValueByName(valuesRef.current, name)
78
80
  }, valuesRef.current);
79
81
  return;
80
82
  }
81
- if (prevErrors?.[0] === nextErrors[0] && prevErrors.length === nextErrors.length) {
82
- return;
83
- }
83
+ if (prevE?.[0] === newErrors[0] && prevE.length === newErrors.length) return;
84
84
  errorsRef.current = {
85
85
  ...errorsRef.current,
86
- [key]: nextErrors
86
+ [key]: newErrors
87
87
  };
88
88
  notify({
89
89
  [key]: getValueByName(valuesRef.current, name)
90
90
  }, valuesRef.current);
91
91
  }, [notify]);
92
- const registerField = useCallback((name, options) => {
92
+ const registerField = useCallback((name, opts) => {
93
93
  const key = serializeNamePath(name);
94
94
  const prev = fieldsRef.current[key];
95
95
  if (prev?.dependencies?.length) {
96
96
  for (const dep of prev.dependencies) {
97
- const depKey = serializeNamePath(dep);
98
- const set = dependencyGraphRef.current.get(depKey);
99
- if (!set) continue;
100
- set.delete(key);
101
- if (!set.size) dependencyGraphRef.current.delete(depKey);
97
+ const dk = serializeNamePath(dep);
98
+ const s = dependencyGraphRef.current.get(dk);
99
+ if (!s) continue;
100
+ s.delete(key);
101
+ if (!s.size) dependencyGraphRef.current.delete(dk);
102
102
  }
103
103
  }
104
104
  fieldsRef.current[key] = {
105
- ...options,
105
+ ...opts,
106
106
  name
107
107
  };
108
- if (options.dependencies?.length) {
109
- for (const dep of options.dependencies) {
110
- const depKey = serializeNamePath(dep);
111
- const set = dependencyGraphRef.current.get(depKey);
112
- if (set) {
113
- set.add(key);
114
- } else {
115
- dependencyGraphRef.current.set(depKey, new Set([key]));
116
- }
108
+ if (opts.dependencies?.length) {
109
+ for (const dep of opts.dependencies) {
110
+ const dk = serializeNamePath(dep);
111
+ const s = dependencyGraphRef.current.get(dk);
112
+ if (s) s.add(key);else dependencyGraphRef.current.set(dk, new Set([key]));
117
113
  }
118
114
  }
119
- if (options.initialValue !== undefined) {
120
- const existsInInitial = getValueByName(lastInitialValuesRef.current, name);
121
- if (existsInInitial === undefined) {
122
- lastInitialValuesRef.current = setValueByName(lastInitialValuesRef.current, name, options.initialValue);
123
- }
124
- const existsInState = getValueByName(valuesRef.current, name);
125
- if (existsInState === undefined) {
126
- const next = setValueByName(valuesRef.current, name, options.initialValue);
115
+ if (opts.initialValue !== undefined) {
116
+ const exInit = getValueByName(lastInitialValuesRef.current, name);
117
+ if (exInit === undefined) lastInitialValuesRef.current = setValueByName(lastInitialValuesRef.current, name, opts.initialValue);
118
+ const exState = getValueByName(valuesRef.current, name);
119
+ if (exState === undefined) {
120
+ const next = setValueByName(valuesRef.current, name, opts.initialValue);
127
121
  valuesRef.current = next;
128
122
  notify({
129
- [key]: options.initialValue
123
+ [key]: opts.initialValue
130
124
  }, next);
131
125
  }
132
126
  }
133
127
  return () => {
134
- const current = fieldsRef.current[key];
128
+ const cur = fieldsRef.current[key];
135
129
  delete fieldsRef.current[key];
136
- if (current?.dependencies?.length) {
137
- for (const dep of current.dependencies) {
138
- const depKey = serializeNamePath(dep);
139
- const set = dependencyGraphRef.current.get(depKey);
140
- if (!set) continue;
141
- set.delete(key);
142
- if (!set.size) dependencyGraphRef.current.delete(depKey);
130
+ if (cur?.dependencies?.length) {
131
+ for (const dep of cur.dependencies) {
132
+ const dk = serializeNamePath(dep);
133
+ const s = dependencyGraphRef.current.get(dk);
134
+ if (!s) continue;
135
+ s.delete(key);
136
+ if (!s.size) dependencyGraphRef.current.delete(dk);
143
137
  }
144
138
  }
139
+ ;
145
140
  setFieldErrors(name, []);
146
141
  };
147
- }, [setFieldErrors]);
148
- const runFieldValidation = useCallback(async (name, trigger, valueOverride, valuesOverride) => {
142
+ }, [notify, setFieldErrors]);
143
+ const localeRef = useRef(locale);
144
+ localeRef.current = locale;
145
+ const validateField = useCallback(async (name, trigger, valueOverride, valuesOverride) => {
149
146
  const key = serializeNamePath(name);
150
- const validationSeq = (validationSeqRef.current[key] ?? 0) + 1;
151
- validationSeqRef.current[key] = validationSeq;
152
- const fieldOptions = fieldsRef.current[key];
153
- const fieldRules = fieldOptions?.rules ?? [];
154
- if (!fieldRules.length) {
147
+ const seq = (validationSeqRef.current[key] ?? 0) + 1;
148
+ validationSeqRef.current[key] = seq;
149
+ const fOpts = fieldsRef.current[key];
150
+ const fRules = fOpts?.rules ?? [];
151
+ if (!fRules.length) {
155
152
  setFieldErrors(name, []);
156
153
  return true;
157
154
  }
158
- let activeRules = trigger ? fieldRules.filter(rule => {
159
- const ruleTrigger = rule.validateTrigger ?? fieldOptions.validateTrigger;
160
- return !ruleTrigger || normalizeTrigger(ruleTrigger).includes(trigger);
161
- }) : fieldRules;
162
- if (!activeRules.length) {
155
+ let appRules = trigger ? fRules.filter(r => {
156
+ const rt = r.validateTrigger ?? fOpts.validateTrigger;
157
+ return !rt || normalizeTrigger(rt).includes(trigger);
158
+ }) : fRules;
159
+ if (!appRules.length) {
163
160
  if (!errorsRef.current[key]?.length) return true;
164
- activeRules = fieldRules;
161
+ appRules = fRules;
165
162
  }
166
- const currentValues = valuesOverride ?? valuesRef.current;
167
- const value = valueOverride ?? getValueByName(currentValues, name);
168
- for (const rule of activeRules) {
169
- const result = runRuleValidation(rule, value, currentValues);
170
- const error = isPromiseLike(result) ? await result : result;
171
- if (validationSeqRef.current[key] !== validationSeq) {
172
- return true;
173
- }
174
- if (error) {
175
- setFieldErrors(name, [error]);
163
+ const curVals = valuesOverride ?? valuesRef.current;
164
+ const val = valueOverride ?? getValueByName(curVals, name);
165
+ const fbMsg = localeRef.current?.vanForm?.validationFailed;
166
+ for (const rule of appRules) {
167
+ const result = runRuleValidation(rule, val, curVals, fbMsg);
168
+ const err = isPromiseLike(result) ? await result : result;
169
+ if (validationSeqRef.current[key] !== seq) return true;
170
+ if (err) {
171
+ setFieldErrors(name, [err]);
176
172
  return false;
177
173
  }
178
174
  }
179
- if (validationSeqRef.current[key] !== validationSeq) {
180
- return true;
181
- }
175
+ if (validationSeqRef.current[key] !== seq) return true;
182
176
  setFieldErrors(name, []);
183
177
  return true;
184
178
  }, [setFieldErrors]);
185
179
  const validateFields = useCallback(async names => {
186
- const fieldNames = names ?? Object.values(fieldsRef.current).map(item => item.name);
187
- const results = await Promise.all(fieldNames.map(name => runFieldValidation(name)));
188
- const hasError = results.some(result => !result);
189
- if (hasError) {
190
- throw errorsRef.current;
191
- }
180
+ const fNames = names ?? Object.values(fieldsRef.current).map(it => it.name);
181
+ const results = await Promise.all(fNames.map(n => validateField(n)));
182
+ if (results.some(r => !r)) throw errorsRef.current;
192
183
  return valuesRef.current;
193
- }, [runFieldValidation]);
194
- const setFieldValue = useCallback((name, value, trigger) => {
195
- const nameKey = serializeNamePath(name);
196
- const prev = valuesRef.current;
197
- const prevValue = getValueByName(prev, name);
198
- if (prevValue === value) return;
199
- const next = setValueByName(prev, name, value);
200
- valuesRef.current = next;
201
- onValuesChange?.(next, nameKey, value);
202
- runFieldValidation(name, trigger, value, next);
203
- const dependents = dependencyGraphRef.current.get(nameKey);
204
- if (dependents?.size) {
205
- for (const dependentKey of dependents) {
206
- const meta = fieldsRef.current[dependentKey];
207
- if (!meta) continue;
208
- runFieldValidation(meta.name, trigger, getValueByName(next, meta.name), next);
184
+ }, [validateField]);
185
+ const validateWithDependencies = useCallback((key, name, trigger, val, vals) => {
186
+ validateField(name, trigger, val, vals);
187
+ const deps = dependencyGraphRef.current.get(key);
188
+ if (deps?.size) {
189
+ for (const dk of deps) {
190
+ const m = fieldsRef.current[dk];
191
+ if (m) validateField(m.name, trigger, getValueByName(vals, m.name), vals);
209
192
  }
210
193
  }
194
+ }, [validateField]);
195
+ const setFieldValue = useCallback((name, val, trigger) => {
196
+ const nKey = serializeNamePath(name);
197
+ const prev = valuesRef.current;
198
+ if (getValueByName(prev, name) === val) return;
199
+ const next = setValueByName(prev, name, val);
200
+ valuesRef.current = next;
201
+ onValuesChangeRef.current?.(next, nKey, val);
202
+ validateWithDependencies(nKey, name, trigger, val, next);
211
203
  notify({
212
- [nameKey]: value
204
+ [nKey]: val
213
205
  }, next);
214
- }, [notify, onValuesChange, runFieldValidation]);
215
- const formApi = {
206
+ }, [notify, validateWithDependencies]);
207
+ const formApi = useMemo(() => ({
216
208
  submit: async () => {
217
209
  try {
218
- const result = await validateFields();
219
- onFinish?.(result);
220
- return result;
221
- } catch (error) {
210
+ const res = await validateFields();
211
+ onFinishRef.current?.(res);
212
+ return res;
213
+ } catch {
222
214
  return undefined;
223
215
  }
224
216
  },
225
217
  getFieldsValue: () => valuesRef.current,
226
- setFieldsValue: (next, options) => {
227
- const shouldValidate = options?.validate ?? false;
218
+ setFieldsValue: (next, opts) => {
219
+ const sV = opts?.validate ?? false;
228
220
  const prev = valuesRef.current;
229
- let merged = prev;
230
- const changed = {};
231
- Object.keys(next).forEach(key => {
232
- const newVal = next[key];
233
- if (getValueByName(merged, key) === newVal) return;
234
- changed[key] = newVal;
235
- merged = setValueByName(merged, key, newVal);
236
- onValuesChange?.(merged, key, newVal);
237
- if (shouldValidate) {
238
- runFieldValidation(key, undefined, newVal, merged);
239
- const dependents = dependencyGraphRef.current.get(key);
240
- if (dependents?.size) {
241
- for (const dependentKey of dependents) {
242
- const meta = fieldsRef.current[dependentKey];
243
- if (!meta) continue;
244
- runFieldValidation(meta.name, undefined, getValueByName(merged, meta.name), merged);
245
- }
246
- }
247
- }
221
+ let m = prev;
222
+ const ch = {};
223
+ Object.keys(next).forEach(k => {
224
+ const nv = next[k];
225
+ if (getValueByName(m, k) === nv) return;
226
+ ch[k] = nv;
227
+ m = setValueByName(m, k, nv);
228
+ onValuesChangeRef.current?.(m, k, nv);
229
+ if (sV) validateWithDependencies(k, k, undefined, nv, m);
248
230
  });
249
- if (merged === prev) return;
250
- valuesRef.current = merged;
251
- notify(changed, merged);
231
+ if (m === prev) return;
232
+ valuesRef.current = m;
233
+ notify(ch, m);
252
234
  },
253
235
  resetFields: () => {
254
- let next = lastInitialValuesRef.current;
255
- Object.values(fieldsRef.current).forEach(meta => {
256
- if (meta.initialValue === undefined) return;
257
- if (getValueByName(next, meta.name) !== undefined) return;
258
- next = setValueByName(next, meta.name, meta.initialValue);
236
+ let n = lastInitialValuesRef.current;
237
+ Object.values(fieldsRef.current).forEach(mem => {
238
+ if (mem.initialValue === undefined) return;
239
+ if (getValueByName(n, mem.name) !== undefined) return;
240
+ n = setValueByName(n, mem.name, mem.initialValue);
259
241
  });
260
- valuesRef.current = next;
242
+ valuesRef.current = n;
261
243
  errorsRef.current = {};
262
244
  notify({
263
245
  [FORM_ALL_FIELDS_KEY]: true
264
- }, next);
246
+ }, n);
265
247
  },
266
248
  validateFields,
267
249
  getFieldError: name => errorsRef.current[serializeNamePath(name)] ?? []
268
- };
250
+ }), [validateFields, validateWithDependencies, notify]);
269
251
  useImperativeHandle(ref, () => formApi, [formApi]);
270
- const contextValue = {
252
+ const ctxVal = useMemo(() => ({
271
253
  getFieldValue: name => getValueByName(valuesRef.current, name),
272
254
  setFieldValue,
273
255
  registerField,
274
256
  getFieldError: name => errorsRef.current[serializeNamePath(name)],
275
- validateField: (name, trigger) => runFieldValidation(name, trigger),
257
+ validateField: (name, trigger) => validateField(name, trigger),
276
258
  getFieldsValue: () => valuesRef.current,
277
259
  subscribe: listener => {
278
260
  subscribersRef.current.add(listener);
@@ -282,56 +264,56 @@ const InternalForm = /*#__PURE__*/React.forwardRef((props, ref) => {
282
264
  colon,
283
265
  labelWidth,
284
266
  showValidateMessage
285
- };
267
+ }), [setFieldValue, registerField, validateField, formApi, colon, labelWidth, showValidateMessage]);
286
268
  return /*#__PURE__*/React.createElement(FormContext.Provider, {
287
- value: contextValue
269
+ value: ctxVal
288
270
  }, /*#__PURE__*/React.createElement(View, _extends({
289
271
  style: style
290
272
  }, rest), children, footer));
291
- });
292
- InternalForm.displayName = 'Form';
273
+ };
274
+ const InternalFormRef = /*#__PURE__*/React.forwardRef(InternalFormImpl);
275
+ const InternalForm = /*#__PURE__*/React.memo(InternalFormRef);
293
276
  export const useWatch = (name, formRef) => {
294
- const context = useContext(FormContext);
295
- const names = name === undefined ? undefined : !Array.isArray(name) ? [name] : name.length && isText(name[0]) ? [name] : name;
296
- const getSnapshot = useCallback(allValues => {
297
- const source = allValues ?? context?.getFieldsValue?.() ?? formRef?.current?.getFieldsValue?.() ?? {};
298
- if (!names) return source;
299
- if (names.length === 1) return getValueByName(source, names[0]);
277
+ const ctx = useContext(FormContext);
278
+ const nPaths = name === undefined ? undefined : !Array.isArray(name) ? [name] : name.length && isText(name[0]) ? [name] : name;
279
+ const getValue = useCallback(allValues => {
280
+ const src = allValues ?? ctx?.getFieldsValue?.() ?? formRef?.current?.getFieldsValue?.() ?? {};
281
+ if (!nPaths) return src;
282
+ if (nPaths.length === 1) return getValueByName(src, nPaths[0]);
300
283
  const picked = {};
301
- for (const key of names) picked[serializeNamePath(key)] = getValueByName(source, key);
284
+ for (const k of nPaths) picked[serializeNamePath(k)] = getValueByName(src, k);
302
285
  return picked;
303
- }, [context, formRef, names]);
304
- const [value, setValue] = useState(() => getSnapshot());
286
+ }, [ctx, formRef, nPaths]);
287
+ const [val, setVal] = useState(() => getValue());
305
288
  useEffect(() => {
306
- if (!context?.subscribe) return undefined;
307
- return context.subscribe((changed, all) => {
308
- if (FORM_ALL_FIELDS_KEY in changed) {
309
- setValue(getSnapshot(all));
289
+ if (!ctx?.subscribe) return undefined;
290
+ return ctx.subscribe((ch, all) => {
291
+ if (FORM_ALL_FIELDS_KEY in ch) {
292
+ setVal(getValue(all));
310
293
  return;
311
294
  }
312
- if (!names || names.some(key => serializeNamePath(key) in changed)) {
313
- setValue(getSnapshot(all));
314
- }
295
+ ;
296
+ if (!nPaths || nPaths.some(k => serializeNamePath(k) in ch)) setVal(getValue(all));
315
297
  });
316
- }, [context, getSnapshot, names]);
298
+ }, [ctx, getValue, nPaths]);
317
299
  useEffect(() => {
318
- setValue(getSnapshot());
319
- }, [getSnapshot]);
320
- return value;
300
+ setVal(getValue());
301
+ }, [getValue]);
302
+ return val;
321
303
  };
322
304
  export const FormSubscribe = ({
323
305
  to,
324
306
  children
325
307
  }) => {
326
- const context = useContext(FormContext);
327
- const [changed, setChanged] = useState({});
308
+ const ctx = useContext(FormContext);
309
+ const [chVals, setChVals] = useState({});
328
310
  useEffect(() => {
329
- if (!context?.subscribe) return undefined;
330
- return context.subscribe(next => {
331
- if (to && !(FORM_ALL_FIELDS_KEY in next) && !Object.keys(next).some(key => to.includes(key))) return;
332
- setChanged(next);
311
+ if (!ctx?.subscribe) return undefined;
312
+ return ctx.subscribe(n => {
313
+ if (to && !(FORM_ALL_FIELDS_KEY in n) && !Object.keys(n).some(k => to.includes(k))) return;
314
+ setChVals(n);
333
315
  });
334
- }, [context, to]);
335
- return /*#__PURE__*/React.createElement(React.Fragment, null, children(changed, context?.form || null));
316
+ }, [ctx, to]);
317
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children(chVals, ctx?.form || null));
336
318
  };
337
319
  export default InternalForm;