react-native-system-ui 0.0.7 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/README.md +46 -31
  2. package/dist/cjs/components/action-sheet/ActionSheet.js +97 -105
  3. package/dist/cjs/components/action-sheet/tokens.js +16 -27
  4. package/dist/cjs/components/area/Area.js +54 -67
  5. package/dist/cjs/components/area/tokens.js +6 -3
  6. package/dist/cjs/components/avatar/Avatar.js +25 -23
  7. package/dist/cjs/components/badge/Badge.js +31 -31
  8. package/dist/cjs/components/badge/tokens.js +6 -8
  9. package/dist/cjs/components/button/Button.js +115 -151
  10. package/dist/cjs/components/button/ButtonGroup.js +8 -42
  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 +177 -180
  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 +70 -83
  18. package/dist/cjs/components/cell/CellGroup.js +16 -29
  19. package/dist/cjs/components/checkbox/Checkbox.js +139 -132
  20. package/dist/cjs/components/checkbox/CheckboxGroup.js +4 -35
  21. package/dist/cjs/components/checkbox/tokens.js +7 -10
  22. package/dist/cjs/components/circle/Circle.js +25 -24
  23. package/dist/cjs/components/collapse/Collapse.js +75 -91
  24. package/dist/cjs/components/config-provider/ConfigProvider.js +16 -3
  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 +20 -15
  31. package/dist/cjs/components/datetime-picker/DatetimePicker.js +61 -84
  32. package/dist/cjs/components/datetime-picker/tokens.js +14 -3
  33. package/dist/cjs/components/dialog/Dialog.js +153 -121
  34. package/dist/cjs/components/dialog/imperative.js +17 -30
  35. package/dist/cjs/components/divider/Divider.js +26 -28
  36. package/dist/cjs/components/empty/Empty.js +35 -39
  37. package/dist/cjs/components/error-boundary/ErrorBoundary.js +73 -0
  38. package/dist/cjs/components/error-boundary/index.js +19 -0
  39. package/dist/cjs/components/field/Field.js +109 -106
  40. package/dist/cjs/components/flex/Flex.js +18 -18
  41. package/dist/cjs/components/flex/FlexItem.js +26 -27
  42. package/dist/cjs/components/form/Form.js +142 -161
  43. package/dist/cjs/components/form/FormItem.js +69 -97
  44. package/dist/cjs/components/form/FormList.js +49 -37
  45. package/dist/cjs/components/form/tokens.js +6 -3
  46. package/dist/cjs/components/form/utils.js +15 -34
  47. package/dist/cjs/components/grid/Grid.js +30 -29
  48. package/dist/cjs/components/grid/GridItem.js +84 -85
  49. package/dist/cjs/components/image/Image.js +55 -59
  50. package/dist/cjs/components/image/tokens.js +2 -2
  51. package/dist/cjs/components/image-preview/ImagePreview.js +124 -112
  52. package/dist/cjs/components/image-preview/imperative.js +4 -13
  53. package/dist/cjs/components/index.js +13 -0
  54. package/dist/cjs/components/input/Input.js +30 -22
  55. package/dist/cjs/components/loading/Loading.js +14 -15
  56. package/dist/cjs/components/nav-bar/NavBar.js +68 -83
  57. package/dist/cjs/components/nav-bar/tokens.js +1 -9
  58. package/dist/cjs/components/notice-bar/NoticeBar.js +74 -77
  59. package/dist/cjs/components/notify/Notify.js +88 -84
  60. package/dist/cjs/components/notify/imperative.js +20 -43
  61. package/dist/cjs/components/notify/tokens.js +1 -11
  62. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +187 -209
  63. package/dist/cjs/components/overlay/Overlay.js +37 -52
  64. package/dist/cjs/components/overlay/tokens.js +5 -3
  65. package/dist/cjs/components/password-input/PasswordInput.js +98 -79
  66. package/dist/cjs/components/picker/Picker.js +440 -421
  67. package/dist/cjs/components/picker/tokens.js +1 -1
  68. package/dist/cjs/components/popup/Popup.js +263 -293
  69. package/dist/cjs/components/portal/Portal.js +12 -29
  70. package/dist/cjs/components/portal/PortalHost.js +151 -234
  71. package/dist/cjs/components/progress/Progress.js +51 -48
  72. package/dist/cjs/components/radio/Radio.js +45 -42
  73. package/dist/cjs/components/radio/RadioGroup.js +8 -40
  74. package/dist/cjs/components/radio/tokens.js +7 -10
  75. package/dist/cjs/components/safe-area-view/SafeAreaView.js +22 -26
  76. package/dist/cjs/components/search/Search.js +51 -43
  77. package/dist/cjs/components/selector/Selector.js +14 -13
  78. package/dist/cjs/components/share-sheet/ShareSheet.js +160 -161
  79. package/dist/cjs/components/sidebar/Sidebar.js +39 -45
  80. package/dist/cjs/components/sidebar/SidebarContext.js +1 -2
  81. package/dist/cjs/components/sidebar/SidebarItem.js +13 -16
  82. package/dist/cjs/components/sidebar/tokens.js +1 -3
  83. package/dist/cjs/components/skeleton/Skeleton.js +30 -37
  84. package/dist/cjs/components/skeleton/tokens.js +1 -2
  85. package/dist/cjs/components/slider/Slider.js +156 -135
  86. package/dist/cjs/components/space/Space.js +46 -69
  87. package/dist/cjs/components/stepper/Stepper.js +177 -155
  88. package/dist/cjs/components/swiper/Swiper.js +251 -253
  89. package/dist/cjs/components/swiper/SwiperPagIndicator.js +25 -27
  90. package/dist/cjs/components/swiper/tokens.js +10 -3
  91. package/dist/cjs/components/switch/Switch.js +13 -15
  92. package/dist/cjs/components/tabbar/Tabbar.js +35 -27
  93. package/dist/cjs/components/tabbar/TabbarContext.js +1 -2
  94. package/dist/cjs/components/tabbar/TabbarItem.js +65 -68
  95. package/dist/cjs/components/tabs/Tabs.js +286 -313
  96. package/dist/cjs/components/tag/Tag.js +46 -37
  97. package/dist/cjs/components/toast/Toast.js +90 -90
  98. package/dist/cjs/components/toast/imperative.js +16 -41
  99. package/dist/cjs/components/typography/Typography.js +3 -5
  100. package/dist/cjs/components/water-mark/WaterMark.js +31 -29
  101. package/dist/cjs/design-system/ThemeProvider.js +5 -11
  102. package/dist/cjs/design-system/createComponentTokensHook.js +11 -13
  103. package/dist/cjs/design-system/presets.js +2 -3
  104. package/dist/cjs/design-system/tokens.js +2 -11
  105. package/dist/cjs/hooks/animation/index.js +25 -0
  106. package/dist/cjs/hooks/animation/useAnimatedTransition.js +72 -0
  107. package/dist/cjs/hooks/animation/useReducedMotion.js +75 -0
  108. package/dist/cjs/hooks/aria/useAriaListBox.js +8 -16
  109. package/dist/cjs/hooks/aria/useAriaOverlay.js +3 -3
  110. package/dist/cjs/hooks/aria/useAriaPress.js +8 -21
  111. package/dist/cjs/hooks/aria/useAriaToggle.js +3 -3
  112. package/dist/cjs/hooks/gesture/useGestureScroll.js +60 -61
  113. package/dist/cjs/hooks/index.js +12 -0
  114. package/dist/cjs/hooks/overlay/OverlayStackStore.js +49 -69
  115. package/dist/cjs/hooks/overlay/useOverlayStack.js +13 -19
  116. package/dist/cjs/hooks/useControllableValue.js +10 -21
  117. package/dist/cjs/hooks/useCountDown.js +14 -22
  118. package/dist/cjs/hooks/useHairline.js +17 -29
  119. package/dist/cjs/hooks/useSafeAreaPadding.js +1 -4
  120. package/dist/cjs/index.js +67 -1
  121. package/dist/cjs/platform/animation.js +10 -2
  122. package/dist/cjs/platform/measure.js +18 -36
  123. package/dist/cjs/utils/color.js +21 -35
  124. package/dist/cjs/utils/compare.js +7 -12
  125. package/dist/cjs/utils/createPlatformShadow.js +28 -39
  126. package/dist/cjs/utils/date.js +20 -50
  127. package/dist/cjs/utils/deepMerge.js +16 -26
  128. package/dist/cjs/utils/hairline.js +74 -71
  129. package/dist/cjs/utils/index.js +22 -0
  130. package/dist/cjs/utils/number.js +21 -29
  131. package/dist/cjs/utils/render.js +27 -0
  132. package/dist/cjs/utils/rtl.js +25 -0
  133. package/dist/cjs/utils/string.js +8 -25
  134. package/dist/es/components/action-sheet/ActionSheet.js +99 -107
  135. package/dist/es/components/action-sheet/tokens.js +16 -27
  136. package/dist/es/components/area/Area.js +55 -68
  137. package/dist/es/components/area/tokens.js +6 -3
  138. package/dist/es/components/avatar/Avatar.js +25 -23
  139. package/dist/es/components/avatar/index.js +1 -2
  140. package/dist/es/components/badge/Badge.js +33 -33
  141. package/dist/es/components/badge/tokens.js +6 -8
  142. package/dist/es/components/button/Button.js +116 -152
  143. package/dist/es/components/button/ButtonGroup.js +9 -43
  144. package/dist/es/components/button/tokens.js +2 -3
  145. package/dist/es/components/calendar/Calendar.js +214 -225
  146. package/dist/es/components/calendar/tokens.js +3 -3
  147. package/dist/es/components/cascader/Cascader.js +180 -183
  148. package/dist/es/components/cascader/tokens.js +2 -2
  149. package/dist/es/components/cascader/useCascaderExtend.js +25 -29
  150. package/dist/es/components/cell/Cell.js +71 -84
  151. package/dist/es/components/cell/CellGroup.js +16 -28
  152. package/dist/es/components/checkbox/Checkbox.js +140 -133
  153. package/dist/es/components/checkbox/CheckboxGroup.js +5 -36
  154. package/dist/es/components/checkbox/tokens.js +7 -10
  155. package/dist/es/components/circle/Circle.js +25 -23
  156. package/dist/es/components/collapse/Collapse.js +77 -92
  157. package/dist/es/components/config-provider/ConfigProvider.js +10 -3
  158. package/dist/es/components/config-provider/DirectionContext.js +2 -0
  159. package/dist/es/components/config-provider/index.js +1 -0
  160. package/dist/es/components/config-provider/locale/en-US.js +32 -0
  161. package/dist/es/components/config-provider/locale/zh-CN.js +32 -0
  162. package/dist/es/components/config-provider/useDirection.js +3 -0
  163. package/dist/es/components/count-down/CountDown.js +23 -18
  164. package/dist/es/components/datetime-picker/DatetimePicker.js +61 -84
  165. package/dist/es/components/datetime-picker/tokens.js +14 -3
  166. package/dist/es/components/dialog/Dialog.js +154 -121
  167. package/dist/es/components/dialog/imperative.js +17 -30
  168. package/dist/es/components/divider/Divider.js +28 -29
  169. package/dist/es/components/empty/Empty.js +36 -39
  170. package/dist/es/components/error-boundary/ErrorBoundary.js +61 -0
  171. package/dist/es/components/error-boundary/index.js +1 -0
  172. package/dist/es/components/field/Field.js +109 -106
  173. package/dist/es/components/flex/Flex.js +18 -17
  174. package/dist/es/components/flex/FlexItem.js +27 -27
  175. package/dist/es/components/form/Form.js +143 -162
  176. package/dist/es/components/form/FormItem.js +68 -95
  177. package/dist/es/components/form/FormList.js +49 -37
  178. package/dist/es/components/form/tokens.js +6 -3
  179. package/dist/es/components/form/utils.js +15 -34
  180. package/dist/es/components/grid/Grid.js +30 -28
  181. package/dist/es/components/grid/GridItem.js +84 -84
  182. package/dist/es/components/image/Image.js +58 -62
  183. package/dist/es/components/image/tokens.js +2 -2
  184. package/dist/es/components/image-preview/ImagePreview.js +124 -112
  185. package/dist/es/components/image-preview/imperative.js +4 -13
  186. package/dist/es/components/index.js +3 -1
  187. package/dist/es/components/input/Input.js +31 -23
  188. package/dist/es/components/loading/Loading.js +16 -16
  189. package/dist/es/components/nav-bar/NavBar.js +68 -83
  190. package/dist/es/components/nav-bar/tokens.js +1 -3
  191. package/dist/es/components/notice-bar/NoticeBar.js +74 -76
  192. package/dist/es/components/notify/Notify.js +92 -87
  193. package/dist/es/components/notify/imperative.js +21 -44
  194. package/dist/es/components/notify/tokens.js +1 -5
  195. package/dist/es/components/number-keyboard/NumberKeyboard.js +187 -209
  196. package/dist/es/components/overlay/Overlay.js +36 -51
  197. package/dist/es/components/overlay/tokens.js +5 -3
  198. package/dist/es/components/password-input/PasswordInput.js +98 -79
  199. package/dist/es/components/picker/Picker.js +440 -421
  200. package/dist/es/components/picker/tokens.js +1 -1
  201. package/dist/es/components/popup/Popup.js +263 -292
  202. package/dist/es/components/portal/Portal.js +13 -29
  203. package/dist/es/components/portal/PortalHost.js +152 -234
  204. package/dist/es/components/progress/Progress.js +51 -48
  205. package/dist/es/components/radio/Radio.js +47 -44
  206. package/dist/es/components/radio/RadioGroup.js +10 -41
  207. package/dist/es/components/radio/tokens.js +7 -10
  208. package/dist/es/components/safe-area-view/SafeAreaView.js +22 -25
  209. package/dist/es/components/search/Search.js +52 -44
  210. package/dist/es/components/selector/Selector.js +14 -13
  211. package/dist/es/components/share-sheet/ShareSheet.js +162 -163
  212. package/dist/es/components/sidebar/Sidebar.js +41 -47
  213. package/dist/es/components/sidebar/SidebarContext.js +1 -2
  214. package/dist/es/components/sidebar/SidebarItem.js +13 -15
  215. package/dist/es/components/sidebar/tokens.js +1 -3
  216. package/dist/es/components/skeleton/Skeleton.js +30 -37
  217. package/dist/es/components/skeleton/tokens.js +1 -2
  218. package/dist/es/components/slider/Slider.js +156 -134
  219. package/dist/es/components/space/Space.js +48 -71
  220. package/dist/es/components/stepper/Stepper.js +178 -156
  221. package/dist/es/components/swiper/Swiper.js +252 -254
  222. package/dist/es/components/swiper/SwiperPagIndicator.js +25 -27
  223. package/dist/es/components/swiper/tokens.js +10 -3
  224. package/dist/es/components/switch/Switch.js +13 -15
  225. package/dist/es/components/tabbar/Tabbar.js +36 -28
  226. package/dist/es/components/tabbar/TabbarContext.js +1 -2
  227. package/dist/es/components/tabbar/TabbarItem.js +66 -69
  228. package/dist/es/components/tabs/Tabs.js +286 -313
  229. package/dist/es/components/tag/Tag.js +49 -39
  230. package/dist/es/components/toast/Toast.js +93 -91
  231. package/dist/es/components/toast/imperative.js +16 -41
  232. package/dist/es/components/typography/Typography.js +3 -5
  233. package/dist/es/components/water-mark/WaterMark.js +32 -30
  234. package/dist/es/design-system/ThemeProvider.js +5 -11
  235. package/dist/es/design-system/createComponentTokensHook.js +11 -13
  236. package/dist/es/design-system/presets.js +2 -3
  237. package/dist/es/design-system/tokens.js +1 -9
  238. package/dist/es/hooks/animation/index.js +2 -0
  239. package/dist/es/hooks/animation/useAnimatedTransition.js +53 -0
  240. package/dist/es/hooks/animation/useReducedMotion.js +54 -0
  241. package/dist/es/hooks/aria/useAriaListBox.js +8 -16
  242. package/dist/es/hooks/aria/useAriaOverlay.js +3 -3
  243. package/dist/es/hooks/aria/useAriaPress.js +8 -21
  244. package/dist/es/hooks/aria/useAriaToggle.js +3 -3
  245. package/dist/es/hooks/gesture/useGestureScroll.js +60 -61
  246. package/dist/es/hooks/index.js +1 -0
  247. package/dist/es/hooks/overlay/OverlayStackStore.js +49 -69
  248. package/dist/es/hooks/overlay/useOverlayStack.js +13 -19
  249. package/dist/es/hooks/useControllableValue.js +10 -21
  250. package/dist/es/hooks/useCountDown.js +14 -22
  251. package/dist/es/hooks/useHairline.js +16 -28
  252. package/dist/es/hooks/useSafeAreaPadding.js +1 -4
  253. package/dist/es/index.js +8 -1
  254. package/dist/es/platform/animation.js +9 -1
  255. package/dist/es/platform/measure.js +18 -36
  256. package/dist/es/utils/color.js +21 -35
  257. package/dist/es/utils/compare.js +7 -12
  258. package/dist/es/utils/createPlatformShadow.js +28 -39
  259. package/dist/es/utils/date.js +20 -50
  260. package/dist/es/utils/deepMerge.js +16 -26
  261. package/dist/es/utils/hairline.js +73 -65
  262. package/dist/es/utils/index.js +2 -0
  263. package/dist/es/utils/number.js +21 -29
  264. package/dist/es/utils/render.js +7 -0
  265. package/dist/es/utils/rtl.js +17 -0
  266. package/dist/es/utils/string.js +8 -25
  267. package/dist/types/components/action-sheet/ActionSheet.d.ts +1 -1
  268. package/dist/types/components/area/Area.d.ts +1 -1
  269. package/dist/types/components/area/tokens.d.ts +4 -0
  270. package/dist/types/components/avatar/Avatar.d.ts +1 -1
  271. package/dist/types/components/avatar/index.d.ts +1 -2
  272. package/dist/types/components/badge/Badge.d.ts +1 -1
  273. package/dist/types/components/button/Button.d.ts +1 -1
  274. package/dist/types/components/button/index.d.ts +1 -1
  275. package/dist/types/components/calendar/Calendar.d.ts +1 -1
  276. package/dist/types/components/cascader/Cascader.d.ts +1 -1
  277. package/dist/types/components/cell/Cell.d.ts +1 -1
  278. package/dist/types/components/cell/CellGroup.d.ts +1 -1
  279. package/dist/types/components/cell/index.d.ts +2 -2
  280. package/dist/types/components/checkbox/Checkbox.d.ts +1 -1
  281. package/dist/types/components/circle/Circle.d.ts +1 -1
  282. package/dist/types/components/collapse/Collapse.d.ts +1 -2
  283. package/dist/types/components/config-provider/DirectionContext.d.ts +3 -0
  284. package/dist/types/components/config-provider/index.d.ts +2 -1
  285. package/dist/types/components/config-provider/locale/en-US.d.ts +32 -0
  286. package/dist/types/components/config-provider/locale/zh-CN.d.ts +32 -0
  287. package/dist/types/components/config-provider/useDirection.d.ts +1 -0
  288. package/dist/types/components/count-down/CountDown.d.ts +1 -1
  289. package/dist/types/components/datetime-picker/DatetimePicker.d.ts +1 -1
  290. package/dist/types/components/datetime-picker/tokens.d.ts +12 -0
  291. package/dist/types/components/dialog/Dialog.d.ts +1 -1
  292. package/dist/types/components/divider/Divider.d.ts +1 -1
  293. package/dist/types/components/empty/Empty.d.ts +1 -1
  294. package/dist/types/components/error-boundary/ErrorBoundary.d.ts +6 -0
  295. package/dist/types/components/error-boundary/index.d.ts +2 -0
  296. package/dist/types/components/field/Field.d.ts +1 -1
  297. package/dist/types/components/flex/Flex.d.ts +1 -1
  298. package/dist/types/components/flex/FlexItem.d.ts +1 -1
  299. package/dist/types/components/flex/index.d.ts +2 -2
  300. package/dist/types/components/form/Form.d.ts +1 -1
  301. package/dist/types/components/form/FormItem.d.ts +2 -1
  302. package/dist/types/components/form/index.d.ts +2 -2
  303. package/dist/types/components/form/tokens.d.ts +4 -0
  304. package/dist/types/components/grid/Grid.d.ts +1 -1
  305. package/dist/types/components/grid/GridItem.d.ts +1 -1
  306. package/dist/types/components/grid/index.d.ts +2 -2
  307. package/dist/types/components/image/Image.d.ts +1 -1
  308. package/dist/types/components/image-preview/ImagePreview.d.ts +1 -1
  309. package/dist/types/components/index.d.ts +4 -1
  310. package/dist/types/components/input/Input.d.ts +3 -3
  311. package/dist/types/components/loading/Loading.d.ts +1 -1
  312. package/dist/types/components/nav-bar/NavBar.d.ts +1 -1
  313. package/dist/types/components/notice-bar/NoticeBar.d.ts +1 -1
  314. package/dist/types/components/notify/Notify.d.ts +2 -2
  315. package/dist/types/components/notify/index.d.ts +1 -1
  316. package/dist/types/components/overlay/Overlay.d.ts +1 -5
  317. package/dist/types/components/overlay/tokens.d.ts +3 -0
  318. package/dist/types/components/password-input/PasswordInput.d.ts +1 -1
  319. package/dist/types/components/picker/Picker.d.ts +5 -5
  320. package/dist/types/components/popup/Popup.d.ts +3 -42
  321. package/dist/types/components/portal/Portal.d.ts +9 -6
  322. package/dist/types/components/portal/PortalHost.d.ts +1 -1
  323. package/dist/types/components/radio/RadioGroup.d.ts +1 -1
  324. package/dist/types/components/safe-area-view/SafeAreaView.d.ts +1 -1
  325. package/dist/types/components/search/Search.d.ts +1 -1
  326. package/dist/types/components/share-sheet/ShareSheet.d.ts +1 -1
  327. package/dist/types/components/sidebar/Sidebar.d.ts +1 -1
  328. package/dist/types/components/sidebar/SidebarContext.d.ts +1 -1
  329. package/dist/types/components/sidebar/SidebarItem.d.ts +1 -1
  330. package/dist/types/components/sidebar/index.d.ts +2 -2
  331. package/dist/types/components/skeleton/Skeleton.d.ts +1 -1
  332. package/dist/types/components/slider/Slider.d.ts +1 -1
  333. package/dist/types/components/stepper/Stepper.d.ts +1 -1
  334. package/dist/types/components/swiper/Swiper.d.ts +1 -1
  335. package/dist/types/components/swiper/index.d.ts +1 -1
  336. package/dist/types/components/swiper/tokens.d.ts +8 -0
  337. package/dist/types/components/tabbar/Tabbar.d.ts +2 -2
  338. package/dist/types/components/tabbar/TabbarContext.d.ts +1 -1
  339. package/dist/types/components/tabbar/TabbarItem.d.ts +2 -2
  340. package/dist/types/components/tabs/Tabs.d.ts +1 -1
  341. package/dist/types/components/tabs/index.d.ts +1 -1
  342. package/dist/types/components/tag/Tag.d.ts +1 -1
  343. package/dist/types/components/toast/Toast.d.ts +2 -2
  344. package/dist/types/components/toast/index.d.ts +1 -1
  345. package/dist/types/components/water-mark/WaterMark.d.ts +1 -1
  346. package/dist/types/design-system/tokens.d.ts +0 -1
  347. package/dist/types/hooks/animation/index.d.ts +3 -0
  348. package/dist/types/hooks/animation/useAnimatedTransition.d.ts +13 -0
  349. package/dist/types/hooks/animation/useReducedMotion.d.ts +3 -0
  350. package/dist/types/hooks/aria/useAriaOverlay.d.ts +1 -1
  351. package/dist/types/hooks/gesture/useGestureScroll.d.ts +11 -10
  352. package/dist/types/hooks/index.d.ts +1 -0
  353. package/dist/types/hooks/overlay/OverlayStackStore.d.ts +8 -8
  354. package/dist/types/hooks/useHairline.d.ts +1 -1
  355. package/dist/types/index.d.ts +5 -0
  356. package/dist/types/platform/animation.d.ts +8 -0
  357. package/dist/types/platform/measure.d.ts +1 -1
  358. package/dist/types/utils/compare.d.ts +1 -1
  359. package/dist/types/utils/createPlatformShadow.d.ts +2 -2
  360. package/dist/types/utils/date.d.ts +2 -2
  361. package/dist/types/utils/hairline.d.ts +5 -10
  362. package/dist/types/utils/index.d.ts +2 -0
  363. package/dist/types/utils/number.d.ts +2 -2
  364. package/dist/types/utils/render.d.ts +5 -0
  365. package/dist/types/utils/rtl.d.ts +5 -0
  366. package/package.json +9 -2
package/README.md CHANGED
@@ -1,12 +1,13 @@
1
1
  # react-native-system-ui
2
2
 
3
- 面向 React Native 的设计系统级组件库。Tokens + ThemeProvider 主题体系,按需引入、体积可控;API 统一可组合,支持可访问性与多端一致。
3
+ 面向 React Native 的高性能设计系统组件库。基于 Design Tokens 驱动主题体系,50+ 组件全量覆盖移动端场景;原生 StyleSheet 零运行时开销,单组件均值 **3.4 KB gzip**;iOS / Android / Web 三端同构,API 一致、行为对齐。
4
4
 
5
- ## 特性
5
+ ## 核心优势
6
6
 
7
- - **设计系统**:Design Tokens + ThemeProvider,无 less、基于 StyleSheet,组件不耦合具体样式,利于主题定制与按需复用。
8
- - **体积可控**:支持 Tree Shaking 与按需引入,单组件体积可控;详见文档站「组件体积」。
9
- - **API 统一**:语义贴近主流移动端组件库,迁移成本低;文档与示例聚焦落地与扩展。
7
+ - **极致轻量**:全组件经过逐行精简——冗余 Hook 移除、StyleSheet 合并、计算内联、辅助函数提取;按需引入 + Tree Shaking,单组件平均 gzip 仅 **3.4 KB**,最小组件(SafeAreaView)仅 **0.6 KB**。
8
+ - **原生性能**:纯 StyleSheet 驱动,零 CSS-in-JS 运行时;动画基于原生 Animated / LayoutAnimation,无 JS 线程阻塞;列表类组件(Picker、Swiper、Tabs)基于 FlatList / ScrollView 原生滚动,确保 60fps 流畅交互。
9
+ - **三端同构**:iOS / Android / Web 统一 API 与交互行为;Swiper、Picker 等核心组件在 Web 端自动适配桌面鼠标拖拽与移动端触控,无需业务层额外处理。
10
+ - **设计系统**:Design Tokens + ThemeProvider 分层架构,组件自管 tokens;支持 light / dark / 品牌主题一键切换,样式定制不侵入组件实现。
10
11
 
11
12
  ## 快速开始
12
13
 
@@ -20,7 +21,7 @@ pnpm add react-native-system-icon
20
21
  # 同时保证项目已安装 react 和 react-native(>=18.2 / >=0.79)
21
22
  ```
22
23
 
23
- **优先使用 ConfigProvider** 包裹根节点,这样 Button、Toast、Popup、Dialog 等都能直接使用,无需再配弹层挂载点。
24
+ **优先使用 ConfigProvider** 包裹根节点,Button、Toast、Popup、Dialog 等即可直接使用,无需额外配置弹层挂载点。
24
25
 
25
26
  ```tsx
26
27
  import { ConfigProvider, Button, Toast } from 'react-native-system-ui'
@@ -105,40 +106,54 @@ export const AuroraBranding = () => (
105
106
 
106
107
  `themePresets.light` 等价于默认主题,`themePresets.dark` 提供深色配色,`themePresets.aurora` 演示品牌化圆角/字体,通过 `ThemeProvider` 配置。
107
108
 
108
- ## 架构总览
109
+ ## 架构
109
110
 
110
- | 层级 | 说明 |
111
+ | 层级 | 职责 |
111
112
  | --- | --- |
112
- | `src/design-system` | 仅承载基础设计变量(颜色、排版、间距、圆角等)与 `ThemeProvider`,只做公共部分。 |
113
- | `src/components/*` | 每个组件自带 `tokens.ts`/`useXXXTokens.ts` 等文件,负责自身的 token 推导与样式实现(Button 为首个示例)。 |
113
+ | `src/design-system` | 基础设计变量(颜色、排版、间距、圆角)与 ThemeProvider,仅承载公共部分 |
114
+ | `src/components/*` | 每个组件自带 `tokens.ts` / `useXXXTokens.ts`,自管 token 推导与样式,互不耦合 |
114
115
 
115
- > 这一层次化结构让“设计语言”与“交互实现”各司其职,可快速扩展到 40+ 组件而不失控。
116
+ > 分层架构使"设计语言"与"交互实现"各司其职,可平滑扩展至 50+ 组件而不失控。
116
117
 
117
- ## 已交付能力
118
+ ## 组件总览
118
119
 
119
- - **设计系统**:ConfigProvider、ThemeProvider、createTokens、themePresets(light/dark/aurora),组件自管 tokens。使用 Toast/Popup/Dialog 等弹层时推荐用 ConfigProvider 包裹根节点(内置 PortalHost)。
120
- - **基础与展示**:Button、Badge、Cell、Collapse、Divider、Empty、Flex、Grid、Space、Tag、Typography、Loading、NoticeBar、Popup、Portal、Progress、Slider、Toast、Dialog、Image、ImagePreview、Skeleton、WaterMark 等。
121
- - **表单与输入**:FormFieldInputPasswordInput、Checkbox、Radio、Switch、Stepper、Rate、Picker、DatetimePicker、Calendar、Search、NumberKeyboard、Area、Cascader、Selector 等。
122
- - **导航与反馈**:TabsNavBarTabbarActionSheetNotifyOverlayShareSheetSidebarSwiper 等。
123
- - **基础设施**:SafeAreaViewPortalHostOverlayProviderConfigProvider 的 locale(zhCN/enUS)。
124
- - **文档**:快速上手、架构设计、路线图及组件文档站(`docs/`)。
120
+ | 分类 | 组件 |
121
+ | --- | --- |
122
+ | **设计系统** | ConfigProviderThemeProvidercreateTokensthemePresets(light / dark / aurora) |
123
+ | **基础展示** | ButtonBadgeCellCollapseDividerEmptyFlexGridSpace、Tag、Typography、Loading、Avatar |
124
+ | **反馈交互** | ToastDialogActionSheetNotify、Overlay、Popup、Portal、NoticeBar、ShareSheet |
125
+ | **表单输入** | Form、Field、Input、PasswordInput、Checkbox、Radio、Switch、Stepper、Rate、Picker、DatetimePicker、Calendar、Search、NumberKeyboard、Area、Cascader、Selector |
126
+ | **导航布局** | Tabs、NavBar、Tabbar、Sidebar、Swiper(三端手势 + 桌面鼠标拖拽) |
127
+ | **数据展示** | Image、ImagePreview、Skeleton、Progress、Circle、Slider、CountDown、WaterMark |
128
+ | **基础设施** | SafeAreaView、PortalHost、OverlayProvider、locale(zhCN / enUS) |
125
129
 
126
- 详细组件列表与状态见 [指南 / 路线图](./docs/guide/roadmap.md)。
130
+ 详细组件列表与开发状态见 [路线图](./docs/guide/roadmap.md)。
127
131
 
128
132
  ## 组件体积
129
133
 
130
- 基于 `dist/es` 各组件目录 gzip 后相加(字节),非实际打包单 chunk 体积。当前体积较大的组件(Top 5):
131
-
132
- | 组件 | gzip 体积 |
133
- | --- | --- |
134
- | picker | ~10 KB |
135
- | swiper | ~10 KB |
136
- | tabs | ~9 KB |
137
- | dropdown-menu | ~6.5 KB |
138
- | form | ~6.3 KB |
139
-
140
- 完整列表与口径说明见文档站首页「组件体积」区域。
134
+ 按需引入后单组件均值约 **3.4 KB**(各组件目录 gzip 相加估算)。支持 Tree Shaking,实际打包体积以构建结果为准。
135
+
136
+ | 组件 | gzip | 组件 | gzip | 组件 | gzip |
137
+ | --- | ---: | --- | ---: | --- | ---: |
138
+ | picker | 8.4 KB | tabs | 7.7 KB | form | 6.6 KB |
139
+ | cascader | 5.8 KB | dialog | 5.6 KB | slider | 5.4 KB |
140
+ | field | 5.4 KB | calendar | 5.1 KB | popup | 5.0 KB |
141
+ | number-keyboard | 4.8 KB | checkbox | 4.8 KB | swiper | 4.7 KB |
142
+ | notify | 4.7 KB | button | 4.7 KB | toast | 4.6 KB |
143
+ | stepper | 4.5 KB | radio | 4.5 KB | image-preview | 4.3 KB |
144
+ | cell | 4.1 KB | grid | 3.9 KB | tabbar | 3.7 KB |
145
+ | notice-bar | 3.5 KB | collapse | 3.4 KB | password-input | 3.4 KB |
146
+ | action-sheet | 3.3 KB | portal | 3.3 KB | image | 3.2 KB |
147
+ | datetime-picker | 3.1 KB | sidebar | 3.0 KB | share-sheet | 2.7 KB |
148
+ | progress | 2.7 KB | selector | 2.7 KB | nav-bar | 2.6 KB |
149
+ | typography | 2.6 KB | circle | 2.4 KB | config-provider | 2.4 KB |
150
+ | badge | 2.3 KB | search | 2.3 KB | skeleton | 2.3 KB |
151
+ | water-mark | 2.2 KB | space | 2.1 KB | tag | 2.0 KB |
152
+ | flex | 1.9 KB | avatar | 1.7 KB | divider | 1.7 KB |
153
+ | empty | 1.6 KB | input | 1.5 KB | area | 1.5 KB |
154
+ | switch | 1.3 KB | loading | 1.2 KB | count-down | 1.2 KB |
155
+ | overlay | 1.0 KB | safe-area-view | 0.6 KB | | |
141
156
 
142
157
  ## 版本与反馈
143
158
 
144
- 当前为 v0.0.6,欢迎 issue / PR。
159
+ 当前为 v0.0.7,欢迎 issue / PR。
@@ -54,83 +54,74 @@ const ActionSheetHeader = /*#__PURE__*/_react().default.memo(({
54
54
  style: tokens.layout.header
55
55
  }, /*#__PURE__*/_react().default.createElement(_reactNative().View, {
56
56
  style: tokens.layout.titleContainer
57
- }, (0, _utils.isText)(title) ? /*#__PURE__*/_react().default.createElement(_reactNative().Text, {
58
- style: [tokens.layout.title, {
59
- color: colors.title,
60
- fontSize: typography.title
61
- }]
62
- }, title) : /*#__PURE__*/_react().default.createElement(_reactNative().View, {
57
+ }, (0, _utils.isText)(title) ? (0, _utils.renderTextOrNode)(title, [tokens.layout.title, {
58
+ color: colors.title,
59
+ fontSize: typography.title
60
+ }]) : /*#__PURE__*/_react().default.createElement(_reactNative().View, {
63
61
  style: tokens.layout.titleNode
64
- }, title)), closeable ? /*#__PURE__*/_react().default.createElement(_reactNative().Pressable, _extends({
62
+ }, title)), closeable && /*#__PURE__*/_react().default.createElement(_reactNative().Pressable, _extends({
65
63
  style: tokens.layout.closeButton,
66
64
  accessibilityRole: "button",
67
65
  hitSlop: 8
68
66
  }, closePress.interactionProps), /*#__PURE__*/_react().default.isValidElement(closeIcon) ? /*#__PURE__*/_react().default.cloneElement(closeIcon, {
69
67
  fill: colors.description,
70
68
  color: colors.description
71
- }) : closeIcon) : null);
69
+ }) : closeIcon));
72
70
  });
73
- ActionSheetHeader.displayName = 'ActionSheetHeader';
74
71
  const ActionSheetItem = /*#__PURE__*/_react().default.memo(({
75
72
  action,
76
73
  index,
77
74
  tokens,
78
75
  onActionPress
79
76
  }) => {
80
- const disabled = !!action.disabled;
81
- const loading = !!action.loading;
77
+ const {
78
+ disabled,
79
+ loading,
80
+ name,
81
+ subname,
82
+ icon
83
+ } = action;
82
84
  const {
83
85
  colors,
84
86
  spacing,
85
87
  typography
86
88
  } = tokens;
87
- const handlePress = (0, _react().useCallback)(() => onActionPress(action, index), [action, index, onActionPress]);
88
89
  const actionPress = (0, _hooks.useAriaPress)({
89
- disabled: disabled || loading,
90
- onPress: handlePress,
90
+ disabled: !!disabled || !!loading,
91
+ onPress: (0, _react().useCallback)(() => onActionPress(action, index), [action, index, onActionPress]),
91
92
  extraProps: {
92
- accessibilityRole: 'button',
93
+ accessibilityRole: 'menuitem',
94
+ accessibilityLabel: (0, _utils.isText)(name) ? String(name) : undefined,
93
95
  accessibilityState: {
94
- disabled,
95
- busy: loading
96
+ disabled: !!disabled,
97
+ busy: !!loading
96
98
  },
97
99
  testID: `rv-action-sheet-item-${index}`
98
100
  }
99
101
  });
100
- const color = action.color ?? colors.item;
101
- const name = action.name;
102
- const subname = action.subname;
103
- const hasIcon = !!action.icon;
104
- const hasName = (0, _utils.isRenderable)(name);
105
- const hasSubname = (0, _utils.isRenderable)(subname);
106
102
  return /*#__PURE__*/_react().default.createElement(_reactNative().Pressable, _extends({
107
103
  style: ({
108
104
  pressed
109
- }) => [tokens.layout.item, hasIcon && tokens.layout.itemWithIcon, {
105
+ }) => [tokens.layout.item, !!icon && tokens.layout.itemWithIcon, {
110
106
  paddingVertical: spacing.vertical,
111
107
  paddingHorizontal: spacing.horizontal,
112
- backgroundColor: pressed && !disabled && !loading ? colors.itemPressedBackground : colors.itemBackground
108
+ backgroundColor: pressed && !action.disabled && !action.loading ? colors.itemPressedBackground : colors.itemBackground
113
109
  }, action.style]
114
- }, actionPress.interactionProps), hasIcon && /*#__PURE__*/_react().default.createElement(_reactNative().View, {
110
+ }, actionPress.interactionProps), !!icon && /*#__PURE__*/_react().default.createElement(_reactNative().View, {
115
111
  style: tokens.layout.icon
116
- }, action.icon), loading ? /*#__PURE__*/_react().default.createElement(_loading.default, {
112
+ }, icon), loading ? /*#__PURE__*/_react().default.createElement(_loading.default, {
117
113
  size: 20
118
- }) : hasName ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
114
+ }) : (0, _utils.isRenderable)(name) ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
119
115
  style: tokens.layout.itemTextWrapper
120
- }, (0, _utils.isText)(name) ? /*#__PURE__*/_react().default.createElement(_reactNative().Text, {
121
- style: [tokens.layout.itemText, {
122
- color: disabled ? colors.disabled : color,
123
- fontSize: typography.item
124
- }]
125
- }, name) : name, hasSubname ? (0, _utils.isText)(subname) ? /*#__PURE__*/_react().default.createElement(_reactNative().Text, {
126
- style: [tokens.layout.subname, {
127
- color: colors.subitem
128
- }]
129
- }, subname) : /*#__PURE__*/_react().default.createElement(_reactNative().View, {
116
+ }, (0, _utils.renderTextOrNode)(name, [tokens.layout.itemText, {
117
+ color: action.disabled ? colors.disabled : action.color ?? colors.item,
118
+ fontSize: typography.item
119
+ }]), (0, _utils.isRenderable)(subname) && ((0, _utils.isText)(subname) ? (0, _utils.renderTextOrNode)(subname, [tokens.layout.subname, {
120
+ color: colors.subitem
121
+ }]) : /*#__PURE__*/_react().default.createElement(_reactNative().View, {
130
122
  style: tokens.layout.subnameNode
131
- }, subname) : null) : null);
123
+ }, subname))) : null);
132
124
  });
133
- ActionSheetItem.displayName = 'ActionSheetItem';
134
125
  const ActionSheetCancel = /*#__PURE__*/_react().default.memo(({
135
126
  cancelText,
136
127
  tokens,
@@ -159,15 +150,12 @@ const ActionSheetCancel = /*#__PURE__*/_react().default.memo(({
159
150
  paddingHorizontal: spacing.horizontal,
160
151
  backgroundColor: colors.cancelBackground
161
152
  }]
162
- }, cancelPress.interactionProps), (0, _utils.isText)(cancelText) ? /*#__PURE__*/_react().default.createElement(_reactNative().Text, {
163
- style: [tokens.layout.cancelText, {
164
- color: colors.cancel,
165
- fontSize: typography.item
166
- }]
167
- }, cancelText) : cancelText));
153
+ }, cancelPress.interactionProps), (0, _utils.renderTextOrNode)(cancelText, [tokens.layout.cancelText, {
154
+ color: colors.cancel,
155
+ fontSize: typography.item
156
+ }])));
168
157
  });
169
- ActionSheetCancel.displayName = 'ActionSheetCancel';
170
- const ActionSheet = props => {
158
+ const ActionSheetImpl = props => {
171
159
  const {
172
160
  tokensOverride,
173
161
  visible,
@@ -203,24 +191,31 @@ const ActionSheet = props => {
203
191
  const hasCancelText = (0, _utils.isRenderable)(cancelText);
204
192
  const lastPopupCloseReasonRef = (0, _react().useRef)('close');
205
193
  const closingRef = (0, _react().useRef)(false);
194
+ const beforeCloseRef = (0, _react().useRef)(beforeClose);
195
+ beforeCloseRef.current = beforeClose;
196
+ const onCloseRef = (0, _react().useRef)(onClose);
197
+ onCloseRef.current = onClose;
198
+ const onCancelRef = (0, _react().useRef)(onCancel);
199
+ onCancelRef.current = onCancel;
200
+ const onSelectRef = (0, _react().useRef)(onSelect);
201
+ onSelectRef.current = onSelect;
206
202
  const runBeforeClose = (0, _react().useCallback)(async action => {
207
- if (!beforeClose) return true;
203
+ if (!beforeCloseRef.current) return true;
208
204
  try {
209
- return (await beforeClose(action)) !== false;
210
- } catch (error) {
205
+ return (await beforeCloseRef.current(action)) !== false;
206
+ } catch {
211
207
  return true;
212
208
  }
213
- }, [beforeClose]);
209
+ }, []);
214
210
  const emitClose = (0, _react().useCallback)(reason => {
215
- if (onClose) {
216
- if (reason === 'cancel') {
217
- onCancel?.();
218
- }
219
- onClose();
211
+ if (onCloseRef.current) {
212
+ if (reason === 'cancel') onCancelRef.current?.();
213
+ onCloseRef.current();
220
214
  return;
221
215
  }
222
- onCancel?.();
223
- }, [onCancel, onClose]);
216
+ ;
217
+ onCancelRef.current?.();
218
+ }, []);
224
219
  const requestClose = (0, _react().useCallback)(async action => {
225
220
  if (closingRef.current) return;
226
221
  closingRef.current = true;
@@ -233,9 +228,8 @@ const ActionSheet = props => {
233
228
  }
234
229
  }, [emitClose, runBeforeClose]);
235
230
  const handlePopupBeforeClose = (0, _react().useCallback)(reason => {
236
- const action = reason === 'close-icon' ? 'close-icon' : reason === 'overlay' ? 'overlay' : 'close';
237
- lastPopupCloseReasonRef.current = action;
238
- return runBeforeClose(action);
231
+ lastPopupCloseReasonRef.current = reason;
232
+ return runBeforeClose(reason);
239
233
  }, [runBeforeClose]);
240
234
  const handlePopupClose = (0, _react().useCallback)(() => {
241
235
  emitClose(lastPopupCloseReasonRef.current);
@@ -247,65 +241,63 @@ const ActionSheet = props => {
247
241
  void requestClose('close-icon');
248
242
  }, [requestClose]);
249
243
  const handleActionPress = (0, _react().useCallback)((action, index) => {
250
- if (action.disabled || action.loading) {
251
- return;
252
- }
244
+ if (action.disabled || action.loading) return;
253
245
  action.onPress?.(action);
254
246
  action.callback?.(action);
255
- onSelect?.(action, index);
256
- if (shouldCloseOnClickAction) {
257
- void requestClose('action');
258
- }
259
- }, [onSelect, requestClose, shouldCloseOnClickAction]);
260
- const popupStyleMemo = (0, _react().useMemo)(() => [tokens.layout.popup, popupStyle], [popupStyle, tokens.layout.popup]);
261
- const panelStyle = (0, _react().useMemo)(() => [tokens.layout.panel, {
262
- backgroundColor: tokens.colors.background
263
- }], [tokens.colors.background, tokens.layout.panel]);
264
- const headerNode = (0, _react().useMemo)(() => hasTitle ? /*#__PURE__*/_react().default.createElement(ActionSheetHeader, {
247
+ onSelectRef.current?.(action, index);
248
+ if (shouldCloseOnClickAction) void requestClose('action');
249
+ }, [requestClose, shouldCloseOnClickAction]);
250
+ const popupStyleMemo = (0, _react().useMemo)(() => [tokens.layout.popup, popupStyle], [tokens.layout.popup, popupStyle]);
251
+ return /*#__PURE__*/_react().default.createElement(_popup.default, _extends({
252
+ visible: visible,
253
+ placement: "bottom",
254
+ round: round,
255
+ safeAreaInsetTop: hasTitle && closeable,
256
+ safeAreaInsetBottom: safeAreaInsetBottom,
257
+ overlay: overlay,
258
+ lockScroll: lockScroll,
259
+ beforeClose: handlePopupBeforeClose,
260
+ onClose: handlePopupClose,
261
+ style: popupStyleMemo
262
+ }, popupProps), /*#__PURE__*/_react().default.createElement(_reactNative().View, {
263
+ accessibilityRole: "menu",
264
+ style: [tokens.layout.panel, {
265
+ backgroundColor: tokens.colors.background
266
+ }]
267
+ }, hasTitle && /*#__PURE__*/_react().default.createElement(ActionSheetHeader, {
265
268
  title: title,
266
269
  closeable: closeable,
267
270
  closeIcon: closeIcon,
268
271
  tokens: tokens,
269
272
  onClose: handleCloseIcon
270
- }) : null, [closeIcon, closeable, handleCloseIcon, hasTitle, title, tokens]);
271
- const descriptionNode = (0, _react().useMemo)(() => hasDescription ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
272
- style: [tokens.layout.descriptionContainer, (0, _utils.createHairlineBorderBottom)(tokens.colors.border)]
273
- }, (0, _utils.isText)(description) ? /*#__PURE__*/_react().default.createElement(_reactNative().Text, {
274
- style: [tokens.layout.description, {
275
- color: tokens.colors.description,
276
- fontSize: tokens.typography.description
277
- }]
278
- }, description) : /*#__PURE__*/_react().default.createElement(_reactNative().View, {
273
+ }), hasDescription && /*#__PURE__*/_react().default.createElement(_reactNative().View, {
274
+ style: tokens.layout.descriptionContainer
275
+ }, (0, _utils.isText)(description) ? (0, _utils.renderTextOrNode)(description, [tokens.layout.description, {
276
+ color: tokens.colors.description,
277
+ fontSize: tokens.typography.description
278
+ }]) : /*#__PURE__*/_react().default.createElement(_reactNative().View, {
279
279
  style: tokens.layout.descriptionNode
280
- }, description)) : null, [description, hasDescription, tokens.colors.border, tokens.colors.description, tokens.layout.description, tokens.layout.descriptionContainer, tokens.layout.descriptionNode, tokens.typography.description]);
281
- const actionNodes = (0, _react().useMemo)(() => actions.map((action, index) => /*#__PURE__*/_react().default.createElement(ActionSheetItem, {
280
+ }, description), /*#__PURE__*/_react().default.createElement(_reactNative().View, {
281
+ style: (0, _utils.createHairlineView)({
282
+ position: 'bottom',
283
+ color: tokens.colors.border,
284
+ left: 0,
285
+ right: 0
286
+ })
287
+ })), /*#__PURE__*/_react().default.createElement(_reactNative().View, {
288
+ style: tokens.layout.actions
289
+ }, actions.map((action, index) => /*#__PURE__*/_react().default.createElement(ActionSheetItem, {
282
290
  key: action.key ?? index,
283
291
  action: action,
284
292
  index: index,
285
293
  tokens: tokens,
286
294
  onActionPress: handleActionPress
287
- })), [actions, handleActionPress, tokens]);
288
- const cancelNode = (0, _react().useMemo)(() => hasCancelText ? /*#__PURE__*/_react().default.createElement(ActionSheetCancel, {
295
+ }))), children, hasCancelText && /*#__PURE__*/_react().default.createElement(ActionSheetCancel, {
289
296
  cancelText: cancelText,
290
297
  tokens: tokens,
291
298
  onPress: handleCancel
292
- }) : null, [cancelText, handleCancel, hasCancelText, tokens]);
293
- return /*#__PURE__*/_react().default.createElement(_popup.default, _extends({
294
- visible: visible,
295
- placement: "bottom",
296
- round: round,
297
- safeAreaInsetTop: hasTitle && closeable,
298
- safeAreaInsetBottom: safeAreaInsetBottom,
299
- overlay: overlay,
300
- lockScroll: lockScroll,
301
- beforeClose: handlePopupBeforeClose,
302
- onClose: handlePopupClose,
303
- style: popupStyleMemo
304
- }, popupProps), /*#__PURE__*/_react().default.createElement(_reactNative().View, {
305
- style: panelStyle
306
- }, headerNode, descriptionNode, /*#__PURE__*/_react().default.createElement(_reactNative().View, {
307
- style: tokens.layout.actions
308
- }, actionNodes), children, cancelNode));
299
+ })));
309
300
  };
301
+ const ActionSheet = /*#__PURE__*/_react().default.memo(ActionSheetImpl);
310
302
  ActionSheet.displayName = 'ActionSheet';
311
303
  var _default = exports.default = ActionSheet;
@@ -5,12 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.useActionSheetTokens = exports.createActionSheetTokens = void 0;
7
7
  var _designSystem = require("../../design-system");
8
+ const centered = {
9
+ alignItems: 'center',
10
+ justifyContent: 'center'
11
+ };
8
12
  const createActionSheetTokens = foundations => {
9
13
  const {
10
14
  palette,
11
15
  spacing,
12
16
  fontSize
13
17
  } = foundations;
18
+ const white = '#ffffff';
14
19
  return {
15
20
  defaults: {
16
21
  closeOnClickAction: false,
@@ -33,31 +38,25 @@ const createActionSheetTokens = foundations => {
33
38
  header: {
34
39
  position: 'relative',
35
40
  flexDirection: 'row',
36
- alignItems: 'center',
37
- justifyContent: 'center',
41
+ ...centered,
38
42
  paddingHorizontal: 16
39
43
  },
40
44
  titleContainer: {
41
45
  flex: 1,
42
- alignItems: 'center',
43
- justifyContent: 'center'
46
+ ...centered
44
47
  },
45
48
  title: {
46
49
  fontWeight: '600',
47
50
  textAlign: 'center'
48
51
  },
49
- titleNode: {
50
- alignItems: 'center',
51
- justifyContent: 'center'
52
- },
52
+ titleNode: centered,
53
53
  closeButton: {
54
54
  position: 'absolute',
55
55
  top: 0,
56
56
  right: 0,
57
57
  width: 48,
58
58
  height: 48,
59
- alignItems: 'center',
60
- justifyContent: 'center'
59
+ ...centered
61
60
  },
62
61
  descriptionContainer: {
63
62
  paddingTop: 12,
@@ -68,26 +67,19 @@ const createActionSheetTokens = foundations => {
68
67
  textAlign: 'center',
69
68
  lineHeight: 20
70
69
  },
71
- descriptionNode: {
72
- alignItems: 'center',
73
- justifyContent: 'center'
74
- },
70
+ descriptionNode: centered,
75
71
  actions: {
76
72
  width: '100%'
77
73
  },
78
74
  item: {
79
- alignItems: 'center',
80
- justifyContent: 'center',
75
+ ...centered,
81
76
  width: '100%'
82
77
  },
83
78
  itemWithIcon: {
84
79
  flexDirection: 'row',
85
80
  justifyContent: 'center'
86
81
  },
87
- itemTextWrapper: {
88
- alignItems: 'center',
89
- justifyContent: 'center'
90
- },
82
+ itemTextWrapper: centered,
91
83
  itemText: {
92
84
  lineHeight: 24
93
85
  },
@@ -106,16 +98,13 @@ const createActionSheetTokens = foundations => {
106
98
  width: '100%',
107
99
  marginBottom: 0
108
100
  },
109
- cancel: {
110
- alignItems: 'center',
111
- justifyContent: 'center'
112
- },
101
+ cancel: centered,
113
102
  cancelText: {
114
103
  lineHeight: 24
115
104
  }
116
105
  },
117
106
  colors: {
118
- background: '#ffffff',
107
+ background: white,
119
108
  title: palette.default[900],
120
109
  description: palette.default[500],
121
110
  item: palette.default[900],
@@ -123,9 +112,9 @@ const createActionSheetTokens = foundations => {
123
112
  cancel: palette.default[900],
124
113
  disabled: palette.default[400],
125
114
  border: palette.default[200],
126
- itemBackground: '#ffffff',
115
+ itemBackground: white,
127
116
  itemPressedBackground: palette.default[100],
128
- cancelBackground: '#ffffff',
117
+ cancelBackground: white,
129
118
  cancelGapBackground: palette.default[100] ?? '#f1f2f5'
130
119
  },
131
120
  typography: {