react-native-system-ui 0.0.6 → 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 +53 -30
  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 +10 -3
@@ -1,6 +1,6 @@
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, { useCallback, useImperativeHandle, useMemo, useRef } from 'react';
3
- import { Platform, View } from 'react-native';
3
+ import { View } from 'react-native';
4
4
  import { useCheckboxGroup } from '@react-native-aria/checkbox';
5
5
  import { useCheckboxGroupState } from '@react-stately/checkbox';
6
6
  import { useCheckboxTokens } from './tokens';
@@ -32,7 +32,6 @@ export const CheckboxGroup = /*#__PURE__*/React.forwardRef((props, ref) => {
32
32
  const disabled = disabledProp ?? tokens.defaults.groupDisabled;
33
33
  const direction = directionProp ?? tokens.defaults.groupDirection;
34
34
  const gap = Math.max(0, gapProp ?? tokens.spacing.groupGap);
35
- const supportsGap = Platform.OS === 'web';
36
35
  const registryRef = useRef(new Map());
37
36
  const state = useCheckboxGroupState({
38
37
  value: value?.map(serialize),
@@ -68,18 +67,6 @@ export const CheckboxGroup = /*#__PURE__*/React.forwardRef((props, ref) => {
68
67
  registryRef.current.delete(key);
69
68
  }, []);
70
69
  const childrenArray = useMemo(() => React.Children.toArray(children).filter(child => child != null && !isBoolean(child)), [children]);
71
- const childrenLength = childrenArray.length;
72
- const itemStyleForIndex = useCallback(index => {
73
- const isLast = index === childrenLength - 1;
74
- if (direction === 'horizontal') {
75
- return [tokens.layout.groupItem, !isLast && {
76
- marginRight: gap
77
- }];
78
- }
79
- return isLast ? tokens.layout.groupItem : [tokens.layout.groupItem, {
80
- marginBottom: gap
81
- }];
82
- }, [childrenLength, direction, gap, tokens.layout.groupItem]);
83
70
  const toggleAll = useCallback((options = {}) => {
84
71
  const opts = isBoolean(options) ? {
85
72
  checked: options
@@ -96,10 +83,7 @@ export const CheckboxGroup = /*#__PURE__*/React.forwardRef((props, ref) => {
96
83
  if (current.has(key)) nextKeys.push(key);
97
84
  return;
98
85
  }
99
- const shouldSelect = targetChecked === true ? true : targetChecked === false ? false : !current.has(key);
100
- if (shouldSelect) {
101
- nextKeys.push(key);
102
- }
86
+ if (targetChecked === true ? true : targetChecked === false ? false : !current.has(key)) nextKeys.push(key);
103
87
  });
104
88
  state.setValue(nextKeys);
105
89
  }, [disabled, state]);
@@ -118,30 +102,15 @@ export const CheckboxGroup = /*#__PURE__*/React.forwardRef((props, ref) => {
118
102
  registerValue,
119
103
  unregisterValue
120
104
  }), [checkedColor, direction, iconRender, iconSize, labelDisabled, max, registerValue, shape, state, unregisterValue]);
121
- const containerStyle = useMemo(() => [direction === 'horizontal' ? tokens.layout.groupHorizontal : tokens.layout.groupVertical, supportsGap ? {
105
+ const containerStyle = [direction === 'horizontal' ? tokens.layout.groupHorizontal : tokens.layout.groupVertical, {
122
106
  columnGap: direction === 'horizontal' ? gap : undefined,
123
107
  rowGap: gap
124
- } : null, style], [direction, gap, style, supportsGap, tokens.layout.groupHorizontal, tokens.layout.groupVertical]);
125
- const renderedChildren = useMemo(() => supportsGap ? childrenArray : childrenArray.map((child, index) => {
126
- const key = /*#__PURE__*/React.isValidElement(child) && child.key !== null ? child.key : index;
127
- const itemStyle = itemStyleForIndex(index);
128
- if (/*#__PURE__*/React.isValidElement(child) && child.type !== React.Fragment) {
129
- const element = child;
130
- return /*#__PURE__*/React.cloneElement(element, {
131
- style: [element.props.style, itemStyle],
132
- key
133
- });
134
- }
135
- return /*#__PURE__*/React.createElement(View, {
136
- key: key,
137
- style: itemStyle
138
- }, child);
139
- }), [childrenArray, itemStyleForIndex, supportsGap]);
108
+ }, style];
140
109
  return /*#__PURE__*/React.createElement(CheckboxGroupContext.Provider, {
141
110
  value: contextValue
142
111
  }, /*#__PURE__*/React.createElement(View, _extends({}, resolvedGroupProps, viewProps, {
143
112
  accessibilityLabel: accessibilityLabel,
144
113
  accessibilityHint: accessibilityHint,
145
114
  style: containerStyle
146
- }), renderedChildren));
115
+ }), childrenArray));
147
116
  });
@@ -1,5 +1,9 @@
1
1
  import { StyleSheet } from 'react-native';
2
2
  import { createComponentTokensHook } from '../../design-system';
3
+ const centered = {
4
+ justifyContent: 'center',
5
+ alignItems: 'center'
6
+ };
3
7
  const createCheckboxTokens = foundations => {
4
8
  const {
5
9
  palette,
@@ -8,7 +12,6 @@ const createCheckboxTokens = foundations => {
8
12
  fontSize,
9
13
  typography
10
14
  } = foundations;
11
- const onPrimary = palette.primary.foreground ?? '#ffffff';
12
15
  return {
13
16
  defaults: {
14
17
  shape: 'round',
@@ -24,14 +27,8 @@ const createCheckboxTokens = foundations => {
24
27
  flexDirection: 'row',
25
28
  alignItems: 'center'
26
29
  },
27
- iconWrapper: {
28
- justifyContent: 'center',
29
- alignItems: 'center'
30
- },
31
- icon: {
32
- justifyContent: 'center',
33
- alignItems: 'center'
34
- },
30
+ iconWrapper: centered,
31
+ icon: centered,
35
32
  checkmark: {
36
33
  textAlign: 'center',
37
34
  includeFontPadding: false
@@ -60,7 +57,7 @@ const createCheckboxTokens = foundations => {
60
57
  checkedBackground: palette.primary[500],
61
58
  disabledBorder: palette.default[300],
62
59
  disabledBackground: palette.default[100],
63
- checkmark: onPrimary,
60
+ checkmark: palette.primary.foreground ?? '#ffffff',
64
61
  label: palette.default.foreground ?? '#111827',
65
62
  labelDisabled: palette.default[400]
66
63
  },
@@ -2,6 +2,7 @@ import React, { useEffect, useMemo, useRef } from 'react';
2
2
  import { Animated, Platform, Text, View } from 'react-native';
3
3
  import Svg, { Circle as SvgCircle } from 'react-native-svg';
4
4
  import { isText, clamp, parseNumber, parsePercentage } from '../../utils';
5
+ import { useReducedMotion } from '../../hooks/animation';
5
6
  import { useCircleTokens } from './tokens';
6
7
  const SVG_ROTATION = {
7
8
  top: -90,
@@ -17,18 +18,16 @@ const WEB_ROTATION = {
17
18
  };
18
19
  const isTransparentColor = value => {
19
20
  const normalized = value.trim().toLowerCase();
20
- if (!normalized) return true;
21
- if (normalized === 'transparent') return true;
21
+ if (!normalized || normalized === 'transparent') return true;
22
22
  const rgbaMatch = normalized.match(/^rgba\(([^)]*)\)$/);
23
23
  if (rgbaMatch) {
24
- const parts = rgbaMatch[1].split(',').map(part => part.trim());
25
- const alpha = Number(parts[3]);
24
+ const alpha = Number(rgbaMatch[1].split(',')[3]?.trim());
26
25
  return Number.isFinite(alpha) && alpha === 0;
27
26
  }
28
27
  return false;
29
28
  };
30
29
  const AnimatedSvgCircle = Animated.createAnimatedComponent(SvgCircle);
31
- export const Circle = props => {
30
+ const CircleImpl = props => {
32
31
  const {
33
32
  tokensOverride,
34
33
  rate: rateProp,
@@ -47,6 +46,7 @@ export const Circle = props => {
47
46
  children
48
47
  } = props;
49
48
  const tokens = useCircleTokens(tokensOverride);
49
+ const reducedMotion = useReducedMotion();
50
50
  const fill = fillProp ?? tokens.defaults.fill;
51
51
  const clockwise = clockwiseProp ?? tokens.defaults.clockwise;
52
52
  const startPosition = startPositionProp ?? tokens.defaults.startPosition;
@@ -68,15 +68,13 @@ export const Circle = props => {
68
68
  const content = useMemo(() => {
69
69
  if (children == null || children === false) return null;
70
70
  const childArray = React.Children.toArray(children);
71
- if (childArray.every(isText)) {
72
- return /*#__PURE__*/React.createElement(Text, {
73
- style: [tokens.layout.text, {
74
- color: tokens.colors.text,
75
- fontSize: tokens.typography.fontSize,
76
- lineHeight: tokens.typography.lineHeight
77
- }, textStyle]
78
- }, childArray.map(String).join(''));
79
- }
71
+ if (childArray.every(isText)) return /*#__PURE__*/React.createElement(Text, {
72
+ style: [tokens.layout.text, {
73
+ color: tokens.colors.text,
74
+ fontSize: tokens.typography.fontSize,
75
+ lineHeight: tokens.typography.lineHeight
76
+ }, textStyle]
77
+ }, childArray.map(String).join(''));
80
78
  return children;
81
79
  }, [children, textStyle, tokens.colors.text, tokens.layout.text, tokens.typography.fontSize, tokens.typography.lineHeight]);
82
80
  if (Platform.OS === 'web') {
@@ -94,12 +92,14 @@ export const Circle = props => {
94
92
  };
95
93
  if (safeStroke > 0) {
96
94
  const mask = `radial-gradient(farthest-side, transparent calc(100% - ${safeStroke}px), #000 calc(100% - ${safeStroke}px))`;
97
- webRingStyle.WebkitMaskImage = mask;
98
- webRingStyle.maskImage = mask;
99
- webRingStyle.WebkitMaskRepeat = 'no-repeat';
100
- webRingStyle.maskRepeat = 'no-repeat';
101
- webRingStyle.WebkitMaskSize = '100% 100%';
102
- webRingStyle.maskSize = '100% 100%';
95
+ Object.assign(webRingStyle, {
96
+ WebkitMaskImage: mask,
97
+ maskImage: mask,
98
+ WebkitMaskRepeat: 'no-repeat',
99
+ maskRepeat: 'no-repeat',
100
+ WebkitMaskSize: '100% 100%',
101
+ maskSize: '100% 100%'
102
+ });
103
103
  }
104
104
  return /*#__PURE__*/React.createElement(View, {
105
105
  style: baseStyle
@@ -126,18 +126,19 @@ export const Circle = props => {
126
126
  const dashOffsetTarget = (clockwise ? 1 : -1) * circumference * (1 - rate / 100);
127
127
  const dashOffset = useRef(new Animated.Value(dashOffsetTarget)).current;
128
128
  useEffect(() => {
129
- if (!animated || safeDuration <= 0) {
129
+ if (!animated || safeDuration <= 0 || reducedMotion) {
130
130
  dashOffset.setValue(dashOffsetTarget);
131
131
  return;
132
132
  }
133
133
  const animation = Animated.timing(dashOffset, {
134
134
  toValue: dashOffsetTarget,
135
135
  duration: safeDuration,
136
- useNativeDriver: false
136
+ useNativeDriver: false,
137
+ isInteraction: false
137
138
  });
138
139
  animation.start();
139
140
  return () => animation.stop();
140
- }, [animated, dashOffset, dashOffsetTarget, safeDuration]);
141
+ }, [animated, dashOffset, dashOffsetTarget, reducedMotion, safeDuration]);
141
142
  const center = resolvedSize / 2;
142
143
  return /*#__PURE__*/React.createElement(View, {
143
144
  style: baseStyle
@@ -169,5 +170,6 @@ export const Circle = props => {
169
170
  style: contentStyle
170
171
  }, content));
171
172
  };
173
+ export const Circle = /*#__PURE__*/React.memo(CircleImpl);
172
174
  Circle.displayName = 'Circle';
173
175
  export default Circle;
@@ -1,9 +1,10 @@
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, { useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
3
- import { Animated, Easing, Text, View } from 'react-native';
3
+ import { Animated, Easing, View } from 'react-native';
4
4
  import { Arrow } from 'react-native-system-icon';
5
+ import { useReducedMotion } from '../../hooks/animation';
5
6
  import { Cell } from '../cell';
6
- import { createHairlineView, isFunction, isNumber, isObject, isRenderable, isText } from '../../utils';
7
+ import { createHairlineView, isFunction, isNumber, isObject, isRenderable, renderTextOrNode } from '../../utils';
7
8
  import { useCollapseTokens } from './tokens';
8
9
  const CollapseContext = /*#__PURE__*/React.createContext(null);
9
10
  const normalizeValue = value => {
@@ -12,13 +13,8 @@ const normalizeValue = value => {
12
13
  if (value === null) return [];
13
14
  return [String(value)];
14
15
  };
15
- const buildOutputValue = (keys, accordion) => {
16
- if (accordion) {
17
- return keys[0] ?? '';
18
- }
19
- return keys;
20
- };
21
- export const Collapse = props => {
16
+ const buildOutputValue = (keys, accordion) => accordion ? keys[0] ?? '' : keys;
17
+ const CollapseImpl = props => {
22
18
  const {
23
19
  tokensOverride,
24
20
  children,
@@ -42,36 +38,20 @@ export const Collapse = props => {
42
38
  } = tokens;
43
39
  const controlled = value !== undefined;
44
40
  const normalizedValue = normalizeValue(value);
45
- const normalizedDefault = normalizeValue(defaultValue) ?? [];
46
- const [internalValue, setInternalValue] = useState(() => accordion ? normalizedDefault.slice(0, 1) : normalizedDefault);
41
+ const normalizedDefaultValue = normalizeValue(defaultValue) ?? [];
42
+ const onChangeRef = useRef(onChange);
43
+ onChangeRef.current = onChange;
44
+ const [internalValue, setInternalValue] = useState(() => accordion ? normalizedDefaultValue.slice(0, 1) : normalizedDefaultValue);
47
45
  const activeKeys = controlled ? accordion ? (normalizedValue ?? []).slice(0, 1) : normalizedValue ?? [] : internalValue;
48
46
  const toggle = useCallback((name, expand) => {
49
47
  if (disabled) return;
50
- const current = activeKeys;
51
- const exists = current.includes(name);
52
- let next;
53
- if (accordion) {
54
- if (expand === true) {
55
- next = exists ? current : [name];
56
- } else if (expand === false) {
57
- next = exists ? [] : current;
58
- } else {
59
- next = exists ? [] : [name];
60
- }
61
- } else {
62
- if (expand === true) {
63
- next = exists ? current : [...current, name];
64
- } else if (expand === false) {
65
- next = exists ? current.filter(item => item !== name) : current;
66
- } else {
67
- next = exists ? current.filter(item => item !== name) : [...current, name];
68
- }
69
- }
70
- if (!controlled) {
71
- setInternalValue(next);
72
- }
73
- onChange?.(buildOutputValue(next, accordion));
74
- }, [accordion, activeKeys, controlled, disabled, onChange]);
48
+ const existing = activeKeys.includes(name);
49
+ const shouldExpand = expand ?? !existing;
50
+ let nextKeys;
51
+ if (accordion) nextKeys = shouldExpand ? [name] : existing ? [] : activeKeys;else nextKeys = shouldExpand ? existing ? activeKeys : [...activeKeys, name] : existing ? activeKeys.filter(key => key !== name) : activeKeys;
52
+ if (!controlled) setInternalValue(nextKeys);
53
+ onChangeRef.current?.(buildOutputValue(nextKeys, accordion));
54
+ }, [accordion, activeKeys, controlled, disabled]);
75
55
  const contextValue = useMemo(() => ({
76
56
  activeKeys,
77
57
  toggle,
@@ -86,9 +66,7 @@ export const Collapse = props => {
86
66
  const items = React.Children.toArray(children);
87
67
  return items.map((child, index) => {
88
68
  if (! /*#__PURE__*/React.isValidElement(child)) return child;
89
- if (!isFunction(child.type) && !isObject(child.type)) {
90
- return child;
91
- }
69
+ if (!isFunction(child.type) && !isObject(child.type)) return child;
92
70
  const name = child.props.name ?? String(index);
93
71
  return /*#__PURE__*/React.cloneElement(child, {
94
72
  name,
@@ -112,7 +90,7 @@ export const Collapse = props => {
112
90
  color: colors.border
113
91
  }), renderedChildren));
114
92
  };
115
- const Hairline = ({
93
+ const Hairline = /*#__PURE__*/React.memo(({
116
94
  tokens,
117
95
  position,
118
96
  color,
@@ -128,18 +106,17 @@ const Hairline = ({
128
106
  pointerEvents: "none",
129
107
  style: [tokens.layout.hairline, hairlineStyle]
130
108
  });
131
- };
109
+ });
132
110
  const CollapsePanel = /*#__PURE__*/React.forwardRef((props, ref) => {
133
111
  const context = useContext(CollapseContext);
134
- if (!context) {
135
- throw new Error('Collapse.Panel must be used within Collapse');
136
- }
112
+ const reducedMotion = useReducedMotion();
113
+ if (!context) throw new Error('Collapse.Panel must be used within Collapse');
137
114
  const {
138
115
  activeKeys,
139
116
  toggle,
140
117
  iconPosition,
141
118
  expandIcon,
142
- disabled: collapseDisabled,
119
+ disabled: contextDisabled,
143
120
  tokens
144
121
  } = context;
145
122
  const {
@@ -152,8 +129,8 @@ const CollapsePanel = /*#__PURE__*/React.forwardRef((props, ref) => {
152
129
  extra,
153
130
  value,
154
131
  border: panelBorder = tokens.defaults.panelBorder,
155
- isLink = tokens.defaults.panelIsLink,
156
- size = tokens.defaults.panelSize,
132
+ isLink: isLinkProp = tokens.defaults.panelIsLink,
133
+ size: sizeProp = tokens.defaults.panelSize,
157
134
  disabled,
158
135
  readOnly,
159
136
  children,
@@ -164,7 +141,7 @@ const CollapsePanel = /*#__PURE__*/React.forwardRef((props, ref) => {
164
141
  } = props;
165
142
  const nameKey = String(name);
166
143
  const isActive = activeKeys.includes(nameKey);
167
- const mergedDisabled = collapseDisabled || disabled;
144
+ const mergedDisabled = contextDisabled || disabled;
168
145
  const {
169
146
  colors,
170
147
  spacing,
@@ -172,20 +149,33 @@ const CollapsePanel = /*#__PURE__*/React.forwardRef((props, ref) => {
172
149
  } = tokens;
173
150
  const [contentHeight, setContentHeight] = useState(0);
174
151
  const animation = useRef(new Animated.Value(isActive ? 1 : 0)).current;
175
- const rotate = animation.interpolate({
152
+ const collapseAnimRef = useRef(null);
153
+ const rotation = animation.interpolate({
176
154
  inputRange: [0, 1],
177
155
  outputRange: ['90deg', '-90deg']
178
156
  });
179
157
  useEffect(() => {
180
- Animated.timing(animation, {
158
+ collapseAnimRef.current?.stop();
159
+ const anim = Animated.timing(animation, {
181
160
  toValue: isActive ? 1 : 0,
182
- duration: tokens.defaults.animationDuration,
161
+ duration: reducedMotion ? 0 : tokens.defaults.animationDuration,
183
162
  easing: Easing.ease,
184
- useNativeDriver: false
185
- }).start();
186
- }, [animation, isActive, tokens.defaults.animationDuration]);
187
- const resolvedLabel = description ?? label;
188
- const resolvedValue = extra ?? value;
163
+ useNativeDriver: false,
164
+ isInteraction: false
165
+ });
166
+ collapseAnimRef.current = anim;
167
+ anim.start(({
168
+ finished
169
+ }) => {
170
+ if (finished) collapseAnimRef.current = null;
171
+ });
172
+ return () => {
173
+ collapseAnimRef.current?.stop();
174
+ collapseAnimRef.current = null;
175
+ };
176
+ }, [animation, isActive, reducedMotion, tokens.defaults.animationDuration]);
177
+ const renderedLabel = description ?? label;
178
+ const renderedValue = extra ?? value;
189
179
  const handleToggle = useCallback(() => {
190
180
  if (mergedDisabled || readOnly) return;
191
181
  toggle(nameKey);
@@ -197,11 +187,9 @@ const CollapsePanel = /*#__PURE__*/React.forwardRef((props, ref) => {
197
187
  }
198
188
  }), [mergedDisabled, nameKey, readOnly, toggle]);
199
189
  const handleContentLayout = useCallback(event => {
200
- const nextHeight = event.nativeEvent.layout.height;
201
- if (isNumber(nextHeight) && Number.isFinite(nextHeight) && nextHeight !== contentHeight) {
202
- setContentHeight(nextHeight);
203
- }
204
- }, [contentHeight]);
190
+ const height = event.nativeEvent.layout.height;
191
+ if (isNumber(height) && Number.isFinite(height)) setContentHeight(prev => prev === height ? prev : height);
192
+ }, []);
205
193
  const animatedStyle = useMemo(() => ({
206
194
  height: animation.interpolate({
207
195
  inputRange: [0, 1],
@@ -209,59 +197,53 @@ const CollapsePanel = /*#__PURE__*/React.forwardRef((props, ref) => {
209
197
  })
210
198
  }), [animation, contentHeight]);
211
199
  const renderExpandIcon = useCallback(() => {
212
- if (isFunction(expandIcon)) {
213
- return expandIcon(isActive);
214
- }
215
- if (expandIcon) {
216
- return expandIcon;
217
- }
200
+ if (isFunction(expandIcon)) return expandIcon(isActive);
201
+ if (expandIcon) return expandIcon;
218
202
  return /*#__PURE__*/React.createElement(Animated.View, {
219
203
  style: {
220
204
  transform: [{
221
- rotate
205
+ rotate: rotation
222
206
  }]
223
207
  }
224
208
  }, /*#__PURE__*/React.createElement(Arrow, {
225
209
  size: 16,
226
210
  fill: mergedDisabled ? colors.disabled : colors.arrow
227
211
  }));
228
- }, [colors.arrow, colors.disabled, expandIcon, isActive, mergedDisabled, rotate]);
229
- const contentNode = useMemo(() => !isText(children) ? children : /*#__PURE__*/React.createElement(Text, {
230
- style: {
231
- color: mergedDisabled ? colors.disabled : colors.description,
232
- fontSize: typography.descriptionSize,
233
- lineHeight: Math.round(typography.descriptionSize * 1.5)
234
- }
235
- }, children), [children, colors.description, colors.disabled, mergedDisabled, typography.descriptionSize]);
236
- const showItemBorder = Boolean(panelBorder);
237
- const showTopBorder = index > 0 && showItemBorder;
238
- const showHeaderBottomBorder = isActive && showItemBorder;
239
- const showExpandIcon = isLink && !readOnly;
212
+ }, [colors.arrow, colors.disabled, expandIcon, isActive, mergedDisabled, rotation]);
213
+ const contentNode = useMemo(() => renderTextOrNode(children, {
214
+ color: mergedDisabled ? colors.disabled : colors.description,
215
+ fontSize: typography.descriptionSize,
216
+ lineHeight: Math.round(typography.descriptionSize * 1.5)
217
+ }), [children, colors.description, colors.disabled, mergedDisabled, typography.descriptionSize]);
218
+ const showInnerBorder = Boolean(panelBorder);
219
+ const showTopBorder = index > 0 && showInnerBorder;
220
+ const showHeaderBottomBorder = isActive && showInnerBorder;
221
+ const showExpandIcon = isLinkProp && !readOnly;
240
222
  const headerIcon = iconPosition === 'left' ? showExpandIcon || isRenderable(icon) ? /*#__PURE__*/React.createElement(View, {
241
223
  style: tokens.layout.headerIconRow
242
- }, showExpandIcon ? /*#__PURE__*/React.createElement(View, {
224
+ }, showExpandIcon && /*#__PURE__*/React.createElement(View, {
243
225
  style: {
244
226
  marginRight: icon ? tokens.spacing.iconGap : 0
245
227
  }
246
- }, renderExpandIcon()) : null, icon) : undefined : icon;
228
+ }, renderExpandIcon()), icon) : undefined : icon;
247
229
  const headerRightIcon = iconPosition === 'right' && showExpandIcon ? renderExpandIcon() : undefined;
248
230
  return /*#__PURE__*/React.createElement(View, _extends({
249
231
  style: [tokens.layout.panel, {
250
232
  backgroundColor: colors.background
251
233
  }, style]
252
- }, rest), showTopBorder ? /*#__PURE__*/React.createElement(Hairline, {
234
+ }, rest), showTopBorder && /*#__PURE__*/React.createElement(Hairline, {
253
235
  tokens: tokens,
254
236
  position: "top",
255
237
  color: colors.border,
256
238
  inset: spacing.paddingHorizontal
257
- }) : null, /*#__PURE__*/React.createElement(View, {
239
+ }), /*#__PURE__*/React.createElement(View, {
258
240
  style: tokens.layout.headerWrapper
259
241
  }, /*#__PURE__*/React.createElement(Cell, {
260
242
  title: title,
261
- label: resolvedLabel,
243
+ label: renderedLabel,
262
244
  icon: headerIcon,
263
- value: resolvedValue,
264
- size: size,
245
+ value: renderedValue,
246
+ size: sizeProp,
265
247
  border: false,
266
248
  disabled: mergedDisabled,
267
249
  onPress: readOnly ? undefined : handleToggle,
@@ -279,12 +261,12 @@ const CollapsePanel = /*#__PURE__*/React.forwardRef((props, ref) => {
279
261
  color: colors.disabled
280
262
  } : undefined,
281
263
  rightIcon: headerRightIcon
282
- }), showHeaderBottomBorder ? /*#__PURE__*/React.createElement(Hairline, {
264
+ }), showHeaderBottomBorder && /*#__PURE__*/React.createElement(Hairline, {
283
265
  tokens: tokens,
284
266
  position: "bottom",
285
267
  color: colors.border,
286
268
  inset: spacing.paddingHorizontal
287
- }) : null), /*#__PURE__*/React.createElement(Animated.View, {
269
+ })), /*#__PURE__*/React.createElement(Animated.View, {
288
270
  style: [tokens.layout.bodyWrapper, animatedStyle]
289
271
  }, /*#__PURE__*/React.createElement(View, {
290
272
  onLayout: handleContentLayout,
@@ -295,7 +277,10 @@ const CollapsePanel = /*#__PURE__*/React.forwardRef((props, ref) => {
295
277
  }]
296
278
  }, contentNode)));
297
279
  });
298
- Collapse.Panel = CollapsePanel;
299
- Collapse.Item = CollapsePanel;
300
- Collapse.displayName = 'Collapse';
280
+ CollapseImpl.Panel = CollapsePanel;
281
+ CollapseImpl.Item = CollapsePanel;
282
+ export const Collapse = Object.assign(/*#__PURE__*/React.memo(CollapseImpl), {
283
+ Panel: CollapsePanel,
284
+ Item: CollapsePanel
285
+ });
301
286
  export default Collapse;
@@ -1,18 +1,25 @@
1
1
  import React, { useContext } from 'react';
2
+ import { I18nManager } from 'react-native';
2
3
  import { ThemeProvider } from '../../design-system/ThemeProvider';
3
4
  import { PortalHost } from '../portal';
5
+ import { DirectionContext } from './DirectionContext';
4
6
  import { LocaleContext } from './LocaleContext';
5
7
  const ConfigProviderBase = ({
6
8
  theme,
7
9
  locale,
10
+ direction,
8
11
  children
9
12
  }) => {
10
- const parentLocale = useContext(LocaleContext);
11
- const resolvedLocale = locale ?? parentLocale;
13
+ const ctxLocale = useContext(LocaleContext);
14
+ const ctxDirection = useContext(DirectionContext);
15
+ const resolvedLocale = locale ?? ctxLocale;
16
+ const resolvedDirection = direction ?? ctxDirection ?? (I18nManager.isRTL ? 'rtl' : 'ltr');
12
17
  return /*#__PURE__*/React.createElement(ThemeProvider, {
13
18
  value: theme
19
+ }, /*#__PURE__*/React.createElement(DirectionContext.Provider, {
20
+ value: resolvedDirection
14
21
  }, /*#__PURE__*/React.createElement(LocaleContext.Provider, {
15
22
  value: resolvedLocale
16
- }, /*#__PURE__*/React.createElement(PortalHost, null, children)));
23
+ }, /*#__PURE__*/React.createElement(PortalHost, null, children))));
17
24
  };
18
25
  export const ConfigProvider = /*#__PURE__*/React.memo(ConfigProviderBase);
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export const DirectionContext = /*#__PURE__*/React.createContext('ltr');
@@ -1,4 +1,5 @@
1
1
  export { ConfigProvider } from './ConfigProvider';
2
2
  export { useLocale } from './useLocale';
3
+ export { useDirection } from './useDirection';
3
4
  export { zhCN } from './locale/zh-CN';
4
5
  export { enUS } from './locale/en-US';
@@ -70,5 +70,37 @@ export const enUS = {
70
70
  },
71
71
  vanAddressList: {
72
72
  add: 'Add address'
73
+ },
74
+ vanForm: {
75
+ validationFailed: 'Validation failed'
76
+ },
77
+ vanPopup: {
78
+ closeOverlay: 'Close overlay',
79
+ closeHint: 'Double-tap to close'
80
+ },
81
+ vanToast: {
82
+ closeHint: 'Double-tap to dismiss'
83
+ },
84
+ vanShareSheet: {
85
+ cancel: 'Cancel'
86
+ },
87
+ vanNumberKeyboard: {
88
+ close: 'Done'
89
+ },
90
+ vanNoticeBar: {
91
+ close: 'Close'
92
+ },
93
+ vanNavBar: {
94
+ back: 'Back',
95
+ action: 'Actions'
96
+ },
97
+ vanImage: {
98
+ loading: 'Loading...',
99
+ error: 'Failed to load'
100
+ },
101
+ vanCascader: {
102
+ placeholder: 'Select',
103
+ loading: 'Loading...',
104
+ close: 'Close'
73
105
  }
74
106
  };
@@ -70,5 +70,37 @@ export const zhCN = {
70
70
  },
71
71
  vanAddressList: {
72
72
  add: '新增地址'
73
+ },
74
+ vanForm: {
75
+ validationFailed: '表单验证未通过'
76
+ },
77
+ vanPopup: {
78
+ closeOverlay: '关闭弹层',
79
+ closeHint: '双击即可关闭弹层'
80
+ },
81
+ vanToast: {
82
+ closeHint: '双击关闭提示'
83
+ },
84
+ vanShareSheet: {
85
+ cancel: '取消'
86
+ },
87
+ vanNumberKeyboard: {
88
+ close: '完成'
89
+ },
90
+ vanNoticeBar: {
91
+ close: '关闭'
92
+ },
93
+ vanNavBar: {
94
+ back: '返回',
95
+ action: '操作'
96
+ },
97
+ vanImage: {
98
+ loading: '加载中…',
99
+ error: '加载失败'
100
+ },
101
+ vanCascader: {
102
+ placeholder: '请选择',
103
+ loading: '加载中...',
104
+ close: '关闭'
73
105
  }
74
106
  };
@@ -0,0 +1,3 @@
1
+ import { useContext } from 'react';
2
+ import { DirectionContext } from './DirectionContext';
3
+ export const useDirection = () => useContext(DirectionContext);