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
@@ -3,7 +3,8 @@ import { isFunction, isString } from '../../utils';
3
3
  import { FormContext } from './FormContext';
4
4
  import { FORM_ALL_FIELDS_KEY, normalizeTrigger, serializeNamePath } from './utils';
5
5
  const EMPTY_RULES = [];
6
- export const FormItem = ({
6
+ const EMPTY_VALUES = {};
7
+ const FormItemImpl = ({
7
8
  name,
8
9
  label,
9
10
  description,
@@ -21,139 +22,117 @@ export const FormItem = ({
21
22
  children
22
23
  }) => {
23
24
  const renderProps = typeof children === 'function';
24
- const context = useContext(FormContext);
25
- if (!context) {
26
- if (renderProps) {
27
- return /*#__PURE__*/React.createElement(React.Fragment, null, children({
28
- getFieldValue: () => undefined,
29
- getFieldsValue: () => ({}),
30
- form: null
31
- }));
32
- }
33
- return /*#__PURE__*/React.createElement(React.Fragment, null, children);
34
- }
35
- const normalizedRules = rules ?? EMPTY_RULES;
36
- const prevValuesRef = useRef(context.getFieldsValue());
25
+ const ctx = useContext(FormContext);
26
+ const normRules = rules ?? EMPTY_RULES;
27
+ const nKey = name ? serializeNamePath(name) : undefined;
28
+ const shouldAlwaysUp = renderProps && !nKey && !shouldUpdate;
29
+ const prevValsRef = useRef(EMPTY_VALUES);
37
30
  const [, forceUpdate] = useState(0);
38
- const nameKey = name ? serializeNamePath(name) : undefined;
39
- const subscribeAll = renderProps && !nameKey && !shouldUpdate;
40
31
  useEffect(() => {
41
- if (!context?.subscribe) return undefined;
42
- return context.subscribe((changed, all) => {
43
- if (FORM_ALL_FIELDS_KEY in changed) {
44
- forceUpdate(version => version + 1);
32
+ if (!ctx?.subscribe) return undefined;
33
+ return ctx.subscribe((ch, all) => {
34
+ if (FORM_ALL_FIELDS_KEY in ch) {
35
+ forceUpdate(v => v + 1);
45
36
  return;
46
37
  }
47
- if (subscribeAll) {
48
- forceUpdate(version => version + 1);
38
+ ;
39
+ if (shouldAlwaysUp) {
40
+ forceUpdate(v => v + 1);
49
41
  return;
50
42
  }
43
+ ;
51
44
  if (shouldUpdate) {
52
- if (shouldUpdate(prevValuesRef.current, all)) {
53
- forceUpdate(version => version + 1);
54
- }
45
+ if (shouldUpdate(prevValsRef.current, all)) forceUpdate(v => v + 1);
55
46
  return;
56
47
  }
57
- if (nameKey && nameKey in changed) {
58
- forceUpdate(version => version + 1);
59
- }
48
+ ;
49
+ if (nKey && nKey in ch) forceUpdate(v => v + 1);
60
50
  });
61
- }, [context, nameKey, shouldUpdate, subscribeAll]);
62
- const currentValues = context.getFieldsValue();
51
+ }, [ctx, nKey, shouldUpdate, shouldAlwaysUp]);
52
+ const curVals = ctx?.getFieldsValue() ?? EMPTY_VALUES;
63
53
  useEffect(() => {
64
- prevValuesRef.current = currentValues;
65
- }, [currentValues]);
66
- const shouldRender = !shouldUpdate || shouldUpdate(prevValuesRef.current, currentValues);
54
+ prevValsRef.current = curVals;
55
+ }, [curVals]);
67
56
  useEffect(() => {
68
- if (!name) return undefined;
69
- return context.registerField(name, {
70
- rules: normalizedRules,
57
+ if (!name || !ctx) return undefined;
58
+ return ctx.registerField(name, {
59
+ rules: normRules,
71
60
  dependencies,
72
61
  initialValue,
73
62
  validateTrigger: validateTrigger ?? trigger
74
63
  });
75
- }, [context.registerField, name, normalizedRules, dependencies, initialValue, validateTrigger, trigger]);
76
- const mergedValue = name ? context.getFieldValue(name) : undefined;
77
- const mergedShowMessage = showValidateMessage ?? context.showValidateMessage ?? true;
78
- const fieldErrors = name ? context.getFieldError(name) : undefined;
79
- const firstError = mergedShowMessage ? fieldErrors?.[0] : undefined;
80
- const mergedRequired = required ?? normalizedRules.some(rule => rule.required);
81
- const mergedValidateTriggers = normalizeTrigger(validateTrigger ?? trigger);
64
+ }, [ctx, name, normRules, dependencies, initialValue, validateTrigger, trigger]);
65
+ if (!ctx) {
66
+ if (renderProps) return /*#__PURE__*/React.createElement(React.Fragment, null, children({
67
+ getFieldValue: () => undefined,
68
+ getFieldsValue: () => EMPTY_VALUES,
69
+ form: null
70
+ }));
71
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children);
72
+ }
73
+ ;
74
+ const shouldRender = !shouldUpdate || shouldUpdate(prevValsRef.current, curVals);
75
+ const modelVal = name ? ctx.getFieldValue(name) : undefined;
76
+ const rShowMsg = showValidateMessage ?? ctx.showValidateMessage ?? true;
77
+ const fieldErrs = name ? ctx.getFieldError(name) : undefined;
78
+ const fieldErr = rShowMsg ? fieldErrs?.[0] : undefined;
79
+ const rRequired = required ?? normRules.some(r => r.required);
80
+ const rValidateTrigger = normalizeTrigger(validateTrigger ?? trigger);
82
81
  if (renderProps) {
83
82
  if (!shouldRender) return null;
84
- const node = children({
85
- getFieldValue: context.getFieldValue,
86
- getFieldsValue: context.getFieldsValue,
87
- form: context.form || null
88
- });
89
- return /*#__PURE__*/React.createElement(React.Fragment, null, node);
90
- }
91
- if (!name) {
92
- return /*#__PURE__*/React.createElement(React.Fragment, null, children);
83
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children({
84
+ getFieldValue: ctx.getFieldValue,
85
+ getFieldsValue: ctx.getFieldsValue,
86
+ form: ctx.form || null
87
+ }));
93
88
  }
89
+ ;
90
+ if (!name) return /*#__PURE__*/React.createElement(React.Fragment, null, children);
94
91
  if (!shouldRender) return null;
95
- const childArray = React.Children.toArray(children);
96
- if (childArray.length !== 1) {
97
- return /*#__PURE__*/React.createElement(React.Fragment, null, children);
98
- }
99
- const child = childArray[0];
92
+ const chArr = React.Children.toArray(children);
93
+ if (chArr.length !== 1) return /*#__PURE__*/React.createElement(React.Fragment, null, children);
94
+ const child = chArr[0];
100
95
  const handleChange = next => {
101
- context.setFieldValue(name, next, trigger);
102
- const original = child.props[trigger];
103
- if (isFunction(original)) {
104
- original(next);
105
- }
96
+ ctx.setFieldValue(name, next, trigger);
97
+ const orig = child.props[trigger];
98
+ if (isFunction(orig)) orig(next);
106
99
  };
107
- const isFieldLike = (() => {
108
- const displayName = child.type.displayName;
109
- return isString(displayName) && (displayName.includes('Field') || displayName.includes('Input'));
110
- })();
111
- const resolveValue = () => {
112
- const childValue = child.props[valuePropName];
113
- if (childValue !== undefined) return childValue;
114
- if (mergedValue !== undefined) return mergedValue;
100
+ const dispName = child.type.displayName;
101
+ const isFieldLike = isString(dispName) && (dispName.includes('Field') || dispName.includes('Input'));
102
+ const rValue = () => {
103
+ const cv = child.props[valuePropName];
104
+ if (cv !== undefined) return cv;
105
+ if (modelVal !== undefined) return modelVal;
115
106
  if (isFieldLike && valuePropName === 'value') return '';
116
- return mergedValue;
107
+ return modelVal;
117
108
  };
118
- const injectedProps = {
119
- [valuePropName]: resolveValue(),
109
+ const injected = {
110
+ [valuePropName]: rValue(),
120
111
  [trigger]: handleChange
121
112
  };
122
- mergedValidateTriggers.forEach(eventName => {
123
- if (!eventName || eventName === trigger) return;
124
- const original = child.props[eventName];
125
- injectedProps[eventName] = (...args) => {
126
- if (isFunction(original)) {
127
- original(...args);
128
- }
129
- context.validateField(name, eventName);
113
+ rValidateTrigger.forEach(ev => {
114
+ if (!ev || ev === trigger) return;
115
+ const orig = child.props[ev];
116
+ injected[ev] = (...args) => {
117
+ if (isFunction(orig)) orig(...args);
118
+ ctx.validateField(name, ev);
130
119
  };
131
120
  });
132
- if (label !== undefined && child.props.label === undefined) {
133
- injectedProps.label = label;
134
- }
135
- if (context.colon !== undefined && injectedProps.label !== undefined && child.props.colon === undefined) {
136
- injectedProps.colon = context.colon;
137
- }
138
- if (context.labelWidth !== undefined && child.props.labelWidth === undefined) {
139
- injectedProps.labelWidth = context.labelWidth;
140
- }
141
- if (description && child.props.description === undefined) {
142
- injectedProps.description = description;
143
- }
144
- if (intro && child.props.intro === undefined) {
145
- injectedProps.intro = intro;
146
- }
147
- if (tooltip && child.props.tooltip === undefined) {
148
- injectedProps.tooltip = tooltip;
149
- }
150
- if (mergedRequired && child.props.required === undefined) {
151
- injectedProps.required = true;
152
- }
153
- if (firstError && child.props.errorMessage === undefined) {
154
- injectedProps.error = true;
155
- injectedProps.errorMessage = firstError;
121
+ const cp = child.props;
122
+ if (label !== undefined && cp.label === undefined) injected.label = label;
123
+ if (ctx.colon !== undefined && injected.label !== undefined && cp.colon === undefined) injected.colon = ctx.colon;
124
+ if (ctx.labelWidth !== undefined && cp.labelWidth === undefined) injected.labelWidth = ctx.labelWidth;
125
+ if (description && cp.description === undefined) injected.description = description;
126
+ if (intro && cp.intro === undefined) injected.intro = intro;
127
+ if (tooltip && cp.tooltip === undefined) injected.tooltip = tooltip;
128
+ if (rRequired && cp.required === undefined) injected.required = true;
129
+ if (fieldErr && cp.errorMessage === undefined) {
130
+ injected.error = true;
131
+ injected.errorMessage = fieldErr;
156
132
  }
157
- return /*#__PURE__*/React.cloneElement(child, injectedProps);
133
+ ;
134
+ return /*#__PURE__*/React.cloneElement(child, injected);
158
135
  };
159
- FormItem.displayName = 'FormItem';
136
+ FormItemImpl.displayName = 'FormItem';
137
+ export const FormItem = /*#__PURE__*/React.memo(FormItemImpl);
138
+ export default FormItem;
@@ -1,65 +1,77 @@
1
1
  import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';
2
2
  import { FormContext } from './FormContext';
3
3
  import { FORM_ALL_FIELDS_KEY, getValueByName, serializeNamePath } from './utils';
4
+ const getList = (context, name) => {
5
+ const raw = getValueByName(context.getFieldsValue(), name);
6
+ return Array.isArray(raw) ? raw : [];
7
+ };
4
8
  export const FormList = ({
5
9
  name,
6
10
  initialValue,
7
11
  children
8
12
  }) => {
9
- const context = useContext(FormContext);
10
- const keyRef = useRef(0);
11
- const nameKey = serializeNamePath(name);
12
- const [listValue, setListValue] = useState(() => {
13
- if (!context) return [];
14
- const current = getValueByName(context.getFieldsValue(), name);
15
- return Array.isArray(current) ? current : [];
16
- });
13
+ const ctx = useContext(FormContext);
14
+ const keyCounterRef = useRef(0);
15
+ const keysRef = useRef([]);
16
+ const nKey = serializeNamePath(name);
17
+ const [listValue, setListValue] = useState(() => ctx ? getList(ctx, name) : []);
18
+ const syncKeys = useCallback(len => {
19
+ const k = keysRef.current;
20
+ while (k.length < len) k.push(keyCounterRef.current++);
21
+ if (k.length > len) keysRef.current = k.slice(0, len);
22
+ }, []);
17
23
  const ensureInitial = useCallback(() => {
18
- if (!context) return;
19
- const current = getValueByName(context.getFieldsValue(), name);
20
- if (current === undefined && initialValue !== undefined) {
21
- context.setFieldValue(name, initialValue);
22
- }
23
- }, [context, initialValue, name]);
24
+ if (!ctx) return;
25
+ if (getValueByName(ctx.getFieldsValue(), name) === undefined && initialValue !== undefined) ctx.setFieldValue(name, initialValue);
26
+ }, [ctx, initialValue, name]);
24
27
  useEffect(() => {
25
28
  ensureInitial();
26
29
  }, [ensureInitial]);
27
30
  useEffect(() => {
28
- if (!context?.subscribe) return undefined;
29
- return context.subscribe((changed, all) => {
30
- if (FORM_ALL_FIELDS_KEY in changed || nameKey in changed) {
31
- const nextRaw = getValueByName(all, name);
32
- setListValue(Array.isArray(nextRaw) ? nextRaw : []);
31
+ if (!ctx?.subscribe) return undefined;
32
+ return ctx.subscribe((ch, all) => {
33
+ if (FORM_ALL_FIELDS_KEY in ch || nKey in ch) {
34
+ const next = getValueByName(all, name);
35
+ const nl = Array.isArray(next) ? next : [];
36
+ syncKeys(nl.length);
37
+ setListValue(nl);
33
38
  }
34
39
  });
35
- }, [context, name, nameKey]);
36
- if (!context) {
37
- return null;
38
- }
39
- const fields = listValue.map((_, index) => ({
40
- name: index,
41
- key: keyRef.current + index,
42
- isListField: true
43
- }));
44
- const add = (defaultValue, index) => {
45
- const insertIndex = typeof index === 'number' ? index : listValue.length;
46
- const next = [...listValue];
47
- next.splice(insertIndex, 0, defaultValue);
48
- context.setFieldValue(name, next);
49
- keyRef.current += 1;
50
- };
51
- const remove = index => {
52
- if (index < 0 || index >= listValue.length) return;
53
- const next = listValue.slice(0, index).concat(listValue.slice(index + 1));
54
- context.setFieldValue(name, next);
55
- };
56
- const move = (from, to) => {
57
- if (from === to || from < 0 || to < 0 || from >= listValue.length || to >= listValue.length) return;
58
- const next = [...listValue];
40
+ }, [ctx, name, nKey, syncKeys]);
41
+ const add = useCallback((defaultValue, index) => {
42
+ if (!ctx) return;
43
+ const a = getList(ctx, name);
44
+ const i = typeof index === 'number' ? index : a.length;
45
+ const next = [...a];
46
+ next.splice(i, 0, defaultValue);
47
+ keysRef.current.splice(i, 0, keyCounterRef.current++);
48
+ ctx.setFieldValue(name, next);
49
+ }, [ctx, name]);
50
+ const remove = useCallback(index => {
51
+ if (!ctx) return;
52
+ const a = getList(ctx, name);
53
+ if (index < 0 || index >= a.length) return;
54
+ keysRef.current.splice(index, 1);
55
+ ctx.setFieldValue(name, a.slice(0, index).concat(a.slice(index + 1)));
56
+ }, [ctx, name]);
57
+ const move = useCallback((from, to) => {
58
+ if (!ctx) return;
59
+ const a = getList(ctx, name);
60
+ if (from === to || from < 0 || to < 0 || from >= a.length || to >= a.length) return;
61
+ const next = [...a];
59
62
  const item = next.splice(from, 1)[0];
60
63
  next.splice(to, 0, item);
61
- context.setFieldValue(name, next);
62
- };
64
+ const [movedKey] = keysRef.current.splice(from, 1);
65
+ keysRef.current.splice(to, 0, movedKey);
66
+ ctx.setFieldValue(name, next);
67
+ }, [ctx, name]);
68
+ if (!ctx) return null;
69
+ syncKeys(listValue.length);
70
+ const fields = listValue.map((_, i) => ({
71
+ name: i,
72
+ key: keysRef.current[i],
73
+ isListField: true
74
+ }));
63
75
  return /*#__PURE__*/React.createElement(React.Fragment, null, children(fields, {
64
76
  add,
65
77
  remove,
@@ -1,5 +1,8 @@
1
1
  import { createComponentTokensHook } from '../../design-system';
2
- const createFormTokens = _foundations => {
3
- return {};
4
- };
2
+ const createFormTokens = _foundations => ({
3
+ defaults: {
4
+ showValidateMessage: true,
5
+ defaultValidationMessage: 'Validation failed'
6
+ }
7
+ });
5
8
  export const useFormTokens = createComponentTokensHook('form', createFormTokens);
@@ -5,28 +5,19 @@ export const toNamePath = name => {
5
5
  if (name === undefined || name === null) return [];
6
6
  if (Array.isArray(name)) return name;
7
7
  if (isNumber(name)) return [name];
8
- if (isString(name)) {
9
- return name.split('.');
10
- }
8
+ if (isString(name)) return name.split('.');
11
9
  return [String(name)];
12
10
  };
13
- export const serializeNamePath = name => {
14
- const path = toNamePath(name);
15
- return path.join('.');
16
- };
11
+ export const serializeNamePath = name => toNamePath(name).join('.');
17
12
  export const getValueByName = (source, name) => {
18
- const path = toNamePath(name);
19
- return path.reduce((acc, key) => {
13
+ return toNamePath(name).reduce((acc, key) => {
20
14
  if (acc == null) return acc;
21
- const keyStr = String(key);
15
+ const k = String(key);
22
16
  if (Array.isArray(acc)) {
23
- const index = Number(keyStr);
24
- return Number.isFinite(index) ? acc[index] : acc[keyStr];
17
+ const i = Number(k);
18
+ return Number.isFinite(i) ? acc[i] : acc[k];
25
19
  }
26
- if (typeof acc === 'object') {
27
- return acc[keyStr];
28
- }
29
- return undefined;
20
+ return typeof acc === 'object' ? acc[k] : undefined;
30
21
  }, source);
31
22
  };
32
23
  export const setValueByName = (source, name, value) => {
@@ -37,28 +28,18 @@ export const setValueByName = (source, name, value) => {
37
28
  } : {};
38
29
  let cursor = clone;
39
30
  path.forEach((key, index) => {
40
- const keyStr = String(key);
41
- const keyIndex = Number(keyStr);
31
+ const k = String(key),
32
+ ki = Number(k);
42
33
  if (index === path.length - 1) {
43
- if (Array.isArray(cursor) && Number.isFinite(keyIndex)) {
44
- cursor[keyIndex] = value;
45
- } else {
46
- ;
47
- cursor[keyStr] = value;
48
- }
34
+ if (Array.isArray(cursor) && Number.isFinite(ki)) cursor[ki] = value;else cursor[k] = value;
49
35
  return;
50
36
  }
51
- const nextVal = Array.isArray(cursor) && Number.isFinite(keyIndex) ? cursor[keyIndex] : cursor[keyStr];
52
- const nextContainer = nextVal === undefined || nextVal === null ? isNumber(path[index + 1]) ? [] : {} : Array.isArray(nextVal) ? [...nextVal] : typeof nextVal === 'object' ? {
53
- ...nextVal
37
+ const nv = Array.isArray(cursor) && Number.isFinite(ki) ? cursor[ki] : cursor[k];
38
+ const nc = nv === undefined || nv === null ? isNumber(path[index + 1]) ? [] : {} : Array.isArray(nv) ? [...nv] : typeof nv === 'object' ? {
39
+ ...nv
54
40
  } : {};
55
- if (Array.isArray(cursor) && Number.isFinite(keyIndex)) {
56
- cursor[keyIndex] = nextContainer;
57
- } else {
58
- ;
59
- cursor[keyStr] = nextContainer;
60
- }
61
- cursor = nextContainer;
41
+ if (Array.isArray(cursor) && Number.isFinite(ki)) cursor[ki] = nc;else cursor[k] = nc;
42
+ cursor = nc;
62
43
  });
63
44
  return clone;
64
45
  };
@@ -4,64 +4,64 @@ import { Platform, View } from 'react-native';
4
4
  import { createHairlineView } from '../../utils';
5
5
  import { useGridTokens } from './tokens';
6
6
  export const GridContext = /*#__PURE__*/React.createContext(null);
7
- export const Grid = props => {
7
+ const GridImpl = props => {
8
8
  const {
9
9
  tokensOverride,
10
10
  children,
11
- columnNum: columnNumProp,
12
- gutter: gutterProp,
13
- border: borderProp,
14
- center: centerProp,
15
- square: squareProp,
16
- direction: directionProp,
17
- reverse: reverseProp,
18
- clickable: clickableProp,
19
- iconSize: iconSizeProp,
11
+ columnNum: colNumP,
12
+ gutter: gutP,
13
+ border: borderP,
14
+ center: centerP,
15
+ square: sqP,
16
+ direction: dirP,
17
+ reverse: revP,
18
+ clickable: clkP,
19
+ iconSize: iconSzP,
20
20
  iconColor,
21
21
  style,
22
22
  ...rest
23
23
  } = props;
24
24
  const tokens = useGridTokens(tokensOverride);
25
25
  const columnNum = useMemo(() => {
26
- const columnNumValue = columnNumProp ?? tokens.defaults.columnNum;
27
- return Number.isFinite(columnNumValue) && columnNumValue > 0 ? Math.floor(columnNumValue) : tokens.defaults.columnNum;
28
- }, [columnNumProp, tokens.defaults.columnNum]);
26
+ const v = colNumP ?? tokens.defaults.columnNum;
27
+ return Number.isFinite(v) && v > 0 ? Math.floor(v) : tokens.defaults.columnNum;
28
+ }, [colNumP, tokens.defaults.columnNum]);
29
29
  const gutter = useMemo(() => {
30
- const gutterValue = gutterProp ?? tokens.defaults.gutter;
31
- return Number.isFinite(gutterValue) && gutterValue > 0 ? gutterValue : 0;
32
- }, [gutterProp, tokens.defaults.gutter]);
33
- const border = useMemo(() => borderProp ?? tokens.defaults.border, [borderProp, tokens.defaults.border]);
34
- const center = useMemo(() => centerProp ?? tokens.defaults.center, [centerProp, tokens.defaults.center]);
35
- const square = useMemo(() => squareProp ?? tokens.defaults.square, [squareProp, tokens.defaults.square]);
36
- const direction = useMemo(() => directionProp ?? tokens.defaults.direction, [directionProp, tokens.defaults.direction]);
37
- const reverse = useMemo(() => reverseProp ?? tokens.defaults.reverse, [reverseProp, tokens.defaults.reverse]);
38
- const clickable = useMemo(() => clickableProp ?? tokens.defaults.clickable, [clickableProp, tokens.defaults.clickable]);
30
+ const v = gutP ?? tokens.defaults.gutter;
31
+ return Number.isFinite(v) && v > 0 ? v : 0;
32
+ }, [gutP, tokens.defaults.gutter]);
33
+ const border = borderP ?? tokens.defaults.border;
34
+ const center = centerP ?? tokens.defaults.center;
35
+ const square = sqP ?? tokens.defaults.square;
36
+ const direction = dirP ?? tokens.defaults.direction;
37
+ const reverse = revP ?? tokens.defaults.reverse;
38
+ const clickable = clkP ?? tokens.defaults.clickable;
39
39
  const iconSize = useMemo(() => {
40
- const iconSizeValue = iconSizeProp ?? tokens.defaults.iconSize;
41
- return Number.isFinite(iconSizeValue) && iconSizeValue > 0 ? iconSizeValue : tokens.defaults.iconSize;
42
- }, [iconSizeProp, tokens.defaults.iconSize]);
43
- const childArray = useMemo(() => React.Children.toArray(children).filter(child => /*#__PURE__*/React.isValidElement(child)), [children]);
40
+ const v = iconSzP ?? tokens.defaults.iconSize;
41
+ return Number.isFinite(v) && v > 0 ? v : tokens.defaults.iconSize;
42
+ }, [iconSzP, tokens.defaults.iconSize]);
43
+ const childrenArray = useMemo(() => React.Children.toArray(children).filter(c => /*#__PURE__*/React.isValidElement(c)), [children]);
44
44
  const showBorder = border && !gutter;
45
- const borderColor = tokens.colors.border;
45
+ const borderClr = tokens.colors.border;
46
46
  const topBorder = useMemo(() => showBorder ? /*#__PURE__*/React.createElement(View, {
47
47
  style: [tokens.layout.border, tokens.layout.borderTop, createHairlineView({
48
48
  position: 'top',
49
- color: borderColor,
49
+ color: borderClr,
50
50
  left: 0,
51
51
  right: 0,
52
52
  top: 0
53
53
  })]
54
- }) : null, [borderColor, showBorder, tokens.layout.border, tokens.layout.borderTop]);
54
+ }) : null, [borderClr, showBorder, tokens.layout.border, tokens.layout.borderTop]);
55
55
  const bottomBorder = useMemo(() => showBorder ? /*#__PURE__*/React.createElement(View, {
56
56
  style: [tokens.layout.border, tokens.layout.borderBottom, createHairlineView({
57
57
  position: 'bottom',
58
- color: borderColor,
58
+ color: borderClr,
59
59
  left: 0,
60
60
  right: 0,
61
61
  bottom: 0
62
62
  })]
63
- }) : null, [borderColor, showBorder, tokens.layout.border, tokens.layout.borderBottom]);
64
- const contextValue = useMemo(() => ({
63
+ }) : null, [borderClr, showBorder, tokens.layout.border, tokens.layout.borderBottom]);
64
+ const ctxVal = useMemo(() => ({
65
65
  columnNum,
66
66
  gutter,
67
67
  border,
@@ -72,26 +72,28 @@ export const Grid = props => {
72
72
  clickable,
73
73
  iconSize,
74
74
  iconColor,
75
- count: childArray.length,
75
+ count: childrenArray.length,
76
76
  tokens
77
- }), [border, center, childArray.length, clickable, columnNum, direction, gutter, iconColor, iconSize, reverse, square, tokens]);
77
+ }), [border, center, childrenArray.length, clickable, columnNum, direction, gutter, iconColor, iconSize, reverse, square, tokens]);
78
78
  const webGridStyle = useMemo(() => Platform.OS === 'web' ? {
79
79
  display: 'grid',
80
80
  gridTemplateColumns: `repeat(${columnNum}, minmax(0, 1fr))`,
81
81
  columnGap: gutter,
82
82
  rowGap: gutter
83
83
  } : undefined, [columnNum, gutter]);
84
- const containerStyle = useMemo(() => [tokens.layout.container, Platform.OS === 'web' ? webGridStyle : gutter ? {
84
+ const ctrStyle = useMemo(() => [tokens.layout.container, Platform.OS === 'web' ? webGridStyle : gutter ? {
85
85
  paddingLeft: gutter
86
86
  } : undefined, style], [gutter, style, tokens.layout.container, webGridStyle]);
87
- const renderedChildren = useMemo(() => childArray.map((child, index) => /*#__PURE__*/React.cloneElement(child, {
88
- gridItemIndex: index,
89
- key: child.key ?? index
90
- })), [childArray]);
87
+ const rendered = useMemo(() => childrenArray.map((child, i) => /*#__PURE__*/React.cloneElement(child, {
88
+ gridItemIndex: i,
89
+ key: child.key ?? i
90
+ })), [childrenArray]);
91
91
  return /*#__PURE__*/React.createElement(GridContext.Provider, {
92
- value: contextValue
92
+ value: ctxVal
93
93
  }, /*#__PURE__*/React.createElement(View, _extends({
94
- style: containerStyle
95
- }, rest), topBorder, renderedChildren, bottomBorder));
94
+ accessibilityRole: 'grid',
95
+ style: ctrStyle
96
+ }, rest), topBorder, rendered, bottomBorder));
96
97
  };
98
+ export const Grid = /*#__PURE__*/React.memo(GridImpl);
97
99
  Grid.displayName = 'Grid';