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,72 +1,71 @@
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, useMemo } from 'react';
3
- import { Pressable, StyleSheet, Text, View } from 'react-native';
2
+ import React, { useCallback, useMemo, useRef } from 'react';
3
+ import { Pressable, StyleSheet, View } from 'react-native';
4
4
  import { useAriaPress } from '../../hooks';
5
5
  import { createHairlineView } from '../../utils/hairline';
6
6
  import { isFiniteNumber, isText, isValidNode } from '../../utils/validate';
7
+ import { renderTextOrNode } from '../../utils';
7
8
  import Popup from '../popup';
9
+ import { useLocale } from '../config-provider/useLocale';
8
10
  import { useShareSheetTokens } from './tokens';
9
- const normalizeOptions = options => {
10
- if (!options || options.length === 0) return [];
11
- if (Array.isArray(options[0])) {
12
- return options;
13
- }
14
- return [options];
11
+ const no = o => {
12
+ if (!o || o.length === 0) return [];
13
+ if (Array.isArray(o[0])) return o;
14
+ return [o];
15
15
  };
16
16
  const ShareSheetOptionItem = /*#__PURE__*/React.memo(({
17
- option,
18
- index,
19
- columns,
20
- tokens,
21
- onSelect
17
+ option: o,
18
+ index: i,
19
+ columns: cols,
20
+ tokens: t,
21
+ onSelect: os
22
22
  }) => {
23
- const optionWidthStyle = useMemo(() => ({
24
- width: `${100 / columns}%`
25
- }), [columns]);
26
- const iconStyle = useMemo(() => ({
27
- width: tokens.sizing.icon,
28
- height: tokens.sizing.icon
29
- }), [tokens.sizing.icon]);
30
- const press = useAriaPress({
31
- onPress: () => onSelect(option, index),
23
+ const ows = {
24
+ width: `${100 / cols}%`
25
+ };
26
+ const is = {
27
+ width: t.sizing.icon,
28
+ height: t.sizing.icon
29
+ };
30
+ const p = useAriaPress({
31
+ onPress: () => os(o, i),
32
32
  extraProps: {
33
- accessibilityRole: 'button',
34
- testID: `rv-share-sheet-item-${index}`
33
+ accessibilityRole: 'menuitem',
34
+ accessibilityLabel: isText(o.name) ? String(o.name) : undefined,
35
+ testID: `rv-share-sheet-item-${i}`
35
36
  }
36
37
  });
37
38
  return /*#__PURE__*/React.createElement(Pressable, _extends({
38
- style: [styles.option, optionWidthStyle]
39
- }, press.interactionProps), /*#__PURE__*/React.createElement(View, {
40
- style: [styles.icon, iconStyle, {
41
- marginHorizontal: tokens.spacing.iconMarginHorizontal
42
- }]
43
- }, option.icon), isValidNode(option.name) ? isText(option.name) ? /*#__PURE__*/React.createElement(Text, {
44
- style: [styles.optionText, {
45
- color: tokens.colors.option,
46
- fontSize: tokens.typography.option,
47
- paddingHorizontal: tokens.spacing.optionTextPaddingHorizontal
48
- }]
49
- }, option.name) : option.name : null, isValidNode(option.description) ? isText(option.description) ? /*#__PURE__*/React.createElement(Text, {
50
- style: [styles.optionDesc, {
51
- color: tokens.colors.optionDesc,
52
- marginTop: tokens.spacing.gap,
53
- fontSize: tokens.typography.optionDesc,
54
- paddingHorizontal: tokens.spacing.optionDescPaddingHorizontal
39
+ style: [S.o, ows]
40
+ }, p.interactionProps), /*#__PURE__*/React.createElement(View, {
41
+ style: [S.ic, is, {
42
+ marginHorizontal: t.spacing.iconMarginHorizontal
55
43
  }]
56
- }, option.description) : /*#__PURE__*/React.createElement(View, {
57
- style: [styles.optionDescNode, {
58
- marginTop: tokens.spacing.gap,
59
- paddingHorizontal: tokens.spacing.optionDescPaddingHorizontal
44
+ }, o.icon), isValidNode(o.name) && renderTextOrNode(o.name, [S.ot, {
45
+ color: t.colors.option,
46
+ fontFamily: t.typography.fontFamily,
47
+ fontSize: t.typography.option,
48
+ paddingHorizontal: t.spacing.optionTextPaddingHorizontal
49
+ }]), isValidNode(o.description) && (isText(o.description) ? renderTextOrNode(o.description, [S.od, {
50
+ color: t.colors.optionDesc,
51
+ fontFamily: t.typography.fontFamily,
52
+ marginTop: t.spacing.gap,
53
+ fontSize: t.typography.optionDesc,
54
+ paddingHorizontal: t.spacing.optionDescPaddingHorizontal
55
+ }]) : /*#__PURE__*/React.createElement(View, {
56
+ style: [S.odn, {
57
+ marginTop: t.spacing.gap,
58
+ paddingHorizontal: t.spacing.optionDescPaddingHorizontal
60
59
  }]
61
- }, option.description) : null);
60
+ }, o.description)));
62
61
  });
63
62
  const ShareSheetCancel = /*#__PURE__*/React.memo(({
64
- cancelText,
65
- tokens,
66
- onPress
63
+ cancelText: ct,
64
+ tokens: t,
65
+ onPress: op
67
66
  }) => {
68
- const cancelPress = useAriaPress({
69
- onPress,
67
+ const cp = useAriaPress({
68
+ onPress: op,
70
69
  extraProps: {
71
70
  testID: 'rv-share-sheet-cancel',
72
71
  accessibilityRole: 'button'
@@ -74,27 +73,27 @@ const ShareSheetCancel = /*#__PURE__*/React.memo(({
74
73
  });
75
74
  return /*#__PURE__*/React.createElement(View, {
76
75
  style: {
77
- backgroundColor: tokens.colors.divider
76
+ backgroundColor: t.colors.divider
78
77
  }
79
78
  }, /*#__PURE__*/React.createElement(Pressable, _extends({
80
- style: [styles.cancel, {
81
- backgroundColor: tokens.colors.background,
82
- paddingVertical: tokens.spacing.cancelPaddingVertical,
83
- marginTop: tokens.spacing.cancelMarginTop
79
+ style: [S.c, {
80
+ backgroundColor: t.colors.background,
81
+ paddingVertical: t.spacing.cancelPaddingVertical,
82
+ marginTop: t.spacing.cancelMarginTop
84
83
  }]
85
- }, cancelPress.interactionProps), isText(cancelText) ? /*#__PURE__*/React.createElement(Text, {
86
- style: [styles.cancelText, {
87
- color: tokens.colors.option,
88
- fontSize: tokens.typography.cancel
89
- }]
90
- }, cancelText) : cancelText));
84
+ }, cp.interactionProps), renderTextOrNode(ct, [S.ct, {
85
+ color: t.colors.option,
86
+ fontFamily: t.typography.fontFamily,
87
+ fontSize: t.typography.cancel
88
+ }])));
91
89
  });
92
- const ShareSheet = props => {
90
+ const ShareSheetImpl = p => {
91
+ const locale = useLocale();
93
92
  const {
94
93
  visible,
95
94
  title,
96
95
  description,
97
- cancelText = '取消',
96
+ cancelText = locale?.vanShareSheet?.cancel ?? locale?.cancel ?? 'Cancel',
98
97
  options,
99
98
  columns = 4,
100
99
  closeOnSelect = true,
@@ -107,156 +106,161 @@ const ShareSheet = props => {
107
106
  lockScroll = true,
108
107
  overlay = true,
109
108
  round = true,
110
- style: popupStyle,
111
- placement: _placement,
112
- position: _position,
113
- ...popupProps
114
- } = props;
115
- const tokens = useShareSheetTokens(tokensOverride);
116
- const groups = useMemo(() => normalizeOptions(options), [options]);
117
- const resolvedColumns = useMemo(() => isFiniteNumber(columns) ? Math.max(1, Math.floor(columns)) : 4, [columns]);
118
- const hasTitle = isValidNode(title);
119
- const hasDescription = isValidNode(description);
120
- const hasCancelText = isValidNode(cancelText);
121
- const close = useCallback(isCancel => {
122
- if (isCancel) onCancel?.();
123
- onClose?.();
124
- }, [onCancel, onClose]);
125
- const handleSelect = useCallback((option, index) => {
126
- onSelect?.(option, index);
127
- option.onPress?.(option);
128
- if (closeOnSelect) close();
129
- }, [close, closeOnSelect, onSelect]);
130
- const onPopupClose = useCallback(() => close(true), [close]);
131
- const wrapperStyle = useMemo(() => [styles.wrapper, {
132
- backgroundColor: tokens.colors.background
133
- }], [tokens.colors.background]);
134
- const groupRowStyle = useMemo(() => [styles.optionsRow, {
135
- paddingLeft: tokens.spacing.gap,
109
+ style: ps,
110
+ placement: _p,
111
+ position: _pos,
112
+ ...pp
113
+ } = p;
114
+ const t = useShareSheetTokens(tokensOverride);
115
+ const gs = no(options);
116
+ const rc = isFiniteNumber(columns) ? Math.max(1, Math.floor(columns)) : 4;
117
+ const ht = isValidNode(title);
118
+ const hd = isValidNode(description);
119
+ const hc = isValidNode(cancelText);
120
+ const ocr = useRef(onCancel),
121
+ ocrr = useRef(onClose),
122
+ osr = useRef(onSelect);
123
+ ocr.current = onCancel;
124
+ ocrr.current = onClose;
125
+ osr.current = onSelect;
126
+ const cl = useCallback(ic => {
127
+ if (ic) ocr.current?.();
128
+ ocrr.current?.();
129
+ }, []);
130
+ const hs = useCallback((o, i) => {
131
+ osr.current?.(o, i);
132
+ o.onPress?.(o);
133
+ if (closeOnSelect) cl();
134
+ }, [cl, closeOnSelect]);
135
+ const opc = useCallback(() => cl(true), [cl]);
136
+ const ws = [S.w, {
137
+ backgroundColor: t.colors.background
138
+ }];
139
+ const grs = [S.or, {
140
+ paddingLeft: t.spacing.gap,
136
141
  paddingVertical: 12
137
- }], [tokens.spacing.gap]);
138
- const groupNodes = useMemo(() => {
139
- if (!groups.length) return null;
140
- let globalIndex = 0;
141
- return groups.map((group, groupIndex) => /*#__PURE__*/React.createElement(View, {
142
- key: groupIndex
143
- }, groupIndex ? /*#__PURE__*/React.createElement(View, {
142
+ }];
143
+ const gn = useMemo(() => {
144
+ if (!gs.length) return null;
145
+ let gi = 0;
146
+ return gs.map((g, gidx) => /*#__PURE__*/React.createElement(View, {
147
+ key: gidx
148
+ }, gidx > 0 && /*#__PURE__*/React.createElement(View, {
144
149
  style: createHairlineView({
145
150
  position: 'top',
146
- color: tokens.colors.border,
147
- left: tokens.spacing.horizontal,
148
- right: tokens.spacing.horizontal
151
+ color: t.colors.border,
152
+ left: t.spacing.horizontal,
153
+ right: t.spacing.horizontal
149
154
  })
150
- }) : null, /*#__PURE__*/React.createElement(View, {
151
- style: groupRowStyle
152
- }, group.map(option => {
153
- const currentIndex = globalIndex++;
155
+ }), /*#__PURE__*/React.createElement(View, {
156
+ style: grs
157
+ }, g.map(o => {
158
+ const ci = gi++;
154
159
  return /*#__PURE__*/React.createElement(ShareSheetOptionItem, {
155
- key: option.key ?? currentIndex,
156
- option: option,
157
- index: currentIndex,
158
- columns: resolvedColumns,
159
- tokens: tokens,
160
- onSelect: handleSelect
160
+ key: o.key ?? ci,
161
+ option: o,
162
+ index: ci,
163
+ columns: rc,
164
+ tokens: t,
165
+ onSelect: hs
161
166
  });
162
167
  }))));
163
- }, [groups, groupRowStyle, handleSelect, resolvedColumns, tokens]);
164
- const headerNode = useMemo(() => {
165
- if (!hasTitle && !hasDescription) return null;
168
+ }, [gs, grs, hs, rc, t]);
169
+ const hn = useMemo(() => {
170
+ if (!ht && !hd) return null;
166
171
  return /*#__PURE__*/React.createElement(View, {
167
- style: [styles.header, {
168
- paddingTop: tokens.spacing.headerPaddingTop,
169
- paddingHorizontal: tokens.spacing.headerPaddingHorizontal,
170
- paddingBottom: tokens.spacing.headerPaddingBottom
171
- }]
172
- }, hasTitle ? isText(title) ? /*#__PURE__*/React.createElement(Text, {
173
- style: [styles.title, {
174
- color: tokens.colors.title,
175
- fontSize: tokens.typography.title,
176
- marginTop: tokens.spacing.titleMarginTop
177
- }]
178
- }, title) : /*#__PURE__*/React.createElement(View, {
179
- style: [styles.node, {
180
- marginTop: tokens.spacing.nodeMarginTop
172
+ style: [S.h, {
173
+ paddingTop: t.spacing.headerPaddingTop,
174
+ paddingHorizontal: t.spacing.headerPaddingHorizontal,
175
+ paddingBottom: t.spacing.headerPaddingBottom
181
176
  }]
182
- }, title) : null, hasDescription ? isText(description) ? /*#__PURE__*/React.createElement(Text, {
183
- style: [styles.description, {
184
- color: tokens.colors.description,
185
- fontSize: tokens.typography.description,
186
- marginTop: tokens.spacing.descriptionMarginTop
177
+ }, ht && (isText(title) ? renderTextOrNode(title, [S.t, {
178
+ color: t.colors.title,
179
+ fontFamily: t.typography.fontFamily,
180
+ fontSize: t.typography.title,
181
+ marginTop: t.spacing.titleMarginTop
182
+ }]) : /*#__PURE__*/React.createElement(View, {
183
+ style: [S.n, {
184
+ marginTop: t.spacing.nodeMarginTop
187
185
  }]
188
- }, description) : /*#__PURE__*/React.createElement(View, {
189
- style: [styles.node, {
190
- marginTop: tokens.spacing.nodeMarginTop
186
+ }, title)), hd && (isText(description) ? renderTextOrNode(description, [S.d, {
187
+ color: t.colors.description,
188
+ fontFamily: t.typography.fontFamily,
189
+ fontSize: t.typography.description,
190
+ marginTop: t.spacing.descriptionMarginTop
191
+ }]) : /*#__PURE__*/React.createElement(View, {
192
+ style: [S.n, {
193
+ marginTop: t.spacing.nodeMarginTop
191
194
  }]
192
- }, description) : null);
193
- }, [description, hasDescription, hasTitle, title, tokens.colors.description, tokens.colors.title, tokens.spacing.descriptionMarginTop, tokens.spacing.headerPaddingBottom, tokens.spacing.headerPaddingHorizontal, tokens.spacing.headerPaddingTop, tokens.spacing.nodeMarginTop, tokens.spacing.titleMarginTop, tokens.typography.description, tokens.typography.title]);
194
- const popupStyleMemo = useMemo(() => [styles.popupOverride, {
195
- padding: tokens.spacing.popupPadding
196
- }, popupStyle], [popupStyle, tokens.spacing.popupPadding]);
197
- return /*#__PURE__*/React.createElement(Popup, _extends({}, popupProps, {
195
+ }, description)));
196
+ }, [description, hd, ht, title, t.colors.description, t.colors.title, t.spacing.descriptionMarginTop, t.spacing.headerPaddingBottom, t.spacing.headerPaddingHorizontal, t.spacing.headerPaddingTop, t.spacing.nodeMarginTop, t.spacing.titleMarginTop, t.typography.description, t.typography.fontFamily, t.typography.title]);
197
+ const psm = [{
198
+ padding: t.spacing.popupPadding
199
+ }, ps];
200
+ return /*#__PURE__*/React.createElement(Popup, _extends({}, pp, {
198
201
  visible: visible,
199
202
  placement: "bottom",
200
203
  round: round,
201
204
  safeAreaInsetBottom: safeAreaInsetBottom,
202
205
  overlay: overlay,
203
206
  lockScroll: lockScroll,
204
- onClose: onPopupClose,
205
- style: popupStyleMemo
207
+ onClose: opc,
208
+ style: psm
206
209
  }), /*#__PURE__*/React.createElement(View, {
207
- style: wrapperStyle
208
- }, headerNode, groupNodes, children, hasCancelText ? /*#__PURE__*/React.createElement(ShareSheetCancel, {
210
+ accessibilityRole: "menu",
211
+ style: ws
212
+ }, hn, gn, children, hc && /*#__PURE__*/React.createElement(ShareSheetCancel, {
209
213
  cancelText: cancelText,
210
- tokens: tokens,
211
- onPress: onPopupClose
212
- }) : null));
214
+ tokens: t,
215
+ onPress: opc
216
+ })));
213
217
  };
214
- const styles = StyleSheet.create({
215
- popupOverride: {},
216
- wrapper: {
218
+ const S = StyleSheet.create({
219
+ w: {
217
220
  width: '100%'
218
221
  },
219
- header: {
222
+ h: {
220
223
  alignItems: 'center'
221
224
  },
222
- title: {
225
+ t: {
223
226
  fontWeight: 'normal',
224
227
  textAlign: 'center'
225
228
  },
226
- description: {
229
+ d: {
227
230
  textAlign: 'center'
228
231
  },
229
- node: {
232
+ n: {
230
233
  alignItems: 'center'
231
234
  },
232
- optionsRow: {
235
+ or: {
233
236
  flexDirection: 'row',
234
237
  flexWrap: 'wrap'
235
238
  },
236
- option: {
239
+ o: {
237
240
  alignItems: 'center',
238
241
  justifyContent: 'center'
239
242
  },
240
- icon: {
243
+ ic: {
241
244
  alignItems: 'center',
242
245
  justifyContent: 'center'
243
246
  },
244
- optionText: {
247
+ ot: {
245
248
  fontWeight: '500',
246
249
  textAlign: 'center'
247
250
  },
248
- optionDesc: {
251
+ od: {
249
252
  textAlign: 'center'
250
253
  },
251
- optionDescNode: {
254
+ odn: {
252
255
  alignItems: 'center'
253
256
  },
254
- cancel: {
257
+ c: {
255
258
  alignItems: 'center'
256
259
  },
257
- cancelText: {
260
+ ct: {
258
261
  fontWeight: '500'
259
262
  }
260
263
  });
264
+ const ShareSheet = /*#__PURE__*/React.memo(ShareSheetImpl);
261
265
  ShareSheet.displayName = 'ShareSheet';
262
266
  export default ShareSheet;
@@ -3,7 +3,8 @@ const createTokens = foundations => {
3
3
  const {
4
4
  palette,
5
5
  spacing,
6
- fontSize
6
+ fontSize,
7
+ typography
7
8
  } = foundations;
8
9
  return {
9
10
  colors: {
@@ -36,6 +37,7 @@ const createTokens = foundations => {
36
37
  icon: 48
37
38
  },
38
39
  typography: {
40
+ fontFamily: typography.fontFamily,
39
41
  title: fontSize.md,
40
42
  description: fontSize.xs,
41
43
  option: fontSize.xs,
@@ -1,12 +1,14 @@
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
2
  import React, { useMemo } from 'react';
3
- import { Text, View } from 'react-native';
3
+ import { View } from 'react-native';
4
4
  import { mergeTokensOverride } from '../../design-system';
5
5
  import { useControllableValue } from '../../hooks';
6
+ import { useDirection } from '../config-provider/useDirection';
6
7
  import { SidebarContext } from './SidebarContext';
7
8
  import { useSidebarTokens } from './tokens';
8
- import { isText } from '../../utils';
9
- const SidebarBase = props => {
9
+ import { createHairlineView, renderTextOrNode } from '../../utils';
10
+ import { isRenderable } from '../../utils/validate';
11
+ const SidebarBaseImpl = props => {
10
12
  const {
11
13
  children,
12
14
  sideStyle,
@@ -15,70 +17,68 @@ const SidebarBase = props => {
15
17
  ...rest
16
18
  } = props;
17
19
  const tokens = useSidebarTokens(tokensOverride);
18
- const items = useMemo(() => {
19
- const out = [];
20
- const list = React.Children.toArray(children);
21
- for (let i = 0; i < list.length; i++) {
22
- const child = list[i];
23
- if (! /*#__PURE__*/React.isValidElement(child)) continue;
24
- out.push({
20
+ const dir = useDirection();
21
+ const sidebarItems = useMemo(() => {
22
+ const items = [];
23
+ React.Children.toArray(children).forEach((child, i) => {
24
+ if (/*#__PURE__*/React.isValidElement(child)) items.push({
25
25
  element: child,
26
26
  index: i
27
27
  });
28
- }
29
- return out;
28
+ });
29
+ return items;
30
30
  }, [children]);
31
- const firstIndex = items[0]?.index ?? 0;
31
+ const firstIdx = sidebarItems[0]?.index ?? 0;
32
32
  const [activeIndex, setActiveIndex] = useControllableValue(props, {
33
- defaultValue: firstIndex,
33
+ defaultValue: firstIdx,
34
34
  valuePropName: 'value',
35
35
  defaultValuePropName: 'defaultValue',
36
36
  trigger: 'onChange'
37
37
  });
38
- const currentIndex = useMemo(() => {
39
- let next = firstIndex;
40
- for (let i = 0; i < items.length; i++) {
41
- if (items[i].index === activeIndex) {
42
- next = activeIndex;
43
- break;
44
- }
38
+ const curIdx = useMemo(() => {
39
+ for (const item of sidebarItems) {
40
+ if (item.index === activeIndex) return activeIndex;
45
41
  }
46
- return next;
47
- }, [activeIndex, firstIndex, items]);
48
- const contextValue = useMemo(() => ({
49
- activeIndex: currentIndex,
42
+ ;
43
+ return firstIdx;
44
+ }, [activeIndex, firstIdx, sidebarItems]);
45
+ const ctxVal = useMemo(() => ({
46
+ activeIndex: curIdx,
50
47
  onSelect: setActiveIndex
51
- }), [currentIndex, setActiveIndex]);
52
- const clonedItems = useMemo(() => items.map(item => {
53
- const key = item.element.key ?? item.index;
54
- const merged = mergeTokensOverride(tokensOverride, item.element.props.tokensOverride);
55
- return /*#__PURE__*/React.cloneElement(item.element, {
56
- key,
57
- index: item.index,
58
- tokensOverride: merged
59
- });
60
- }), [items, tokensOverride]);
61
- const activeItem = items.find(item => item.index === currentIndex)?.element;
62
- const activeContentStyle = activeItem?.props?.contentStyle;
63
- const activeContent = activeItem?.props?.children;
64
- const activeContentNode = useMemo(() => activeContent == null || activeContent === false ? null : isText(activeContent) ? /*#__PURE__*/React.createElement(Text, null, activeContent) : activeContent, [activeContent]);
65
- const containerStyle = useMemo(() => [tokens.layout.container, {
66
- backgroundColor: tokens.colors.background
67
- }, style], [style, tokens.colors.background, tokens.layout.container]);
68
- const sideContainerStyle = useMemo(() => [tokens.layout.side, {
69
- width: tokens.sizing.width,
70
- borderRightColor: tokens.colors.border
71
- }, sideStyle], [sideStyle, tokens.colors.border, tokens.layout.side, tokens.sizing.width]);
48
+ }), [curIdx, setActiveIndex]);
49
+ const cloned = useMemo(() => sidebarItems.map(item => /*#__PURE__*/React.cloneElement(item.element, {
50
+ key: item.element.key ?? item.index,
51
+ index: item.index,
52
+ tokensOverride: mergeTokensOverride(tokensOverride, item.element.props.tokensOverride)
53
+ })), [sidebarItems, tokensOverride]);
54
+ const activeItem = sidebarItems.find(item => item.index === curIdx)?.element;
55
+ const contentTxtStyle = useMemo(() => ({
56
+ fontFamily: tokens.typography.fontFamily,
57
+ fontSize: tokens.typography.contentFontSize,
58
+ fontWeight: tokens.typography.fontWeight
59
+ }), [tokens.typography.fontFamily, tokens.typography.contentFontSize, tokens.typography.fontWeight]);
60
+ const activeContent = !isRenderable(activeItem?.props?.children) ? null : renderTextOrNode(activeItem.props.children, contentTxtStyle);
72
61
  return /*#__PURE__*/React.createElement(View, _extends({}, rest, {
73
- style: containerStyle
62
+ style: [tokens.layout.container, {
63
+ backgroundColor: tokens.colors.background
64
+ }, style]
74
65
  }), /*#__PURE__*/React.createElement(View, {
75
- style: sideContainerStyle,
66
+ style: [tokens.layout.side, {
67
+ width: tokens.sizing.width
68
+ }, sideStyle],
76
69
  accessibilityRole: "tablist"
77
70
  }, /*#__PURE__*/React.createElement(SidebarContext.Provider, {
78
- value: contextValue
79
- }, clonedItems)), /*#__PURE__*/React.createElement(View, {
80
- style: [tokens.layout.content, activeContentStyle]
81
- }, activeContentNode));
71
+ value: ctxVal
72
+ }, cloned), /*#__PURE__*/React.createElement(View, {
73
+ style: createHairlineView({
74
+ position: dir === 'rtl' ? 'left' : 'right',
75
+ color: tokens.colors.border,
76
+ top: 0,
77
+ bottom: 0
78
+ })
79
+ })), /*#__PURE__*/React.createElement(View, {
80
+ style: [tokens.layout.content, activeItem?.props?.contentStyle]
81
+ }, activeContent));
82
82
  };
83
- SidebarBase.displayName = 'Sidebar';
83
+ const SidebarBase = /*#__PURE__*/React.memo(SidebarBaseImpl);
84
84
  export default SidebarBase;
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
- import { useContext } from 'react';
1
+ import React, { useContext } from 'react';
3
2
  export const SidebarContext = /*#__PURE__*/React.createContext(null);
4
3
  export const useSidebarContext = () => useContext(SidebarContext);