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
@@ -4,14 +4,14 @@ import { Platform, Pressable, Text, View } from 'react-native';
4
4
  import Badge from '../badge';
5
5
  import { createHairlineView, isFunction, isRenderable, isText } from '../../utils';
6
6
  import { GridContext } from './GridContext';
7
- export const GridItem = props => {
8
- const context = useContext(GridContext);
9
- if (!context) throw new Error('GridItem must be used within Grid');
7
+ const GridItemImpl = p => {
8
+ const ctx = useContext(GridContext);
9
+ if (!ctx) throw new Error('GridItem must be used within Grid');
10
10
  const {
11
11
  gridItemIndex = 0,
12
12
  text,
13
13
  icon,
14
- iconColor: iconColorProp,
14
+ iconColor: icp,
15
15
  badge,
16
16
  dot,
17
17
  contentStyle,
@@ -20,112 +20,112 @@ export const GridItem = props => {
20
20
  style,
21
21
  onPress,
22
22
  ...rest
23
- } = props;
23
+ } = p;
24
24
  const {
25
- tokens,
26
- columnNum,
27
- gutter,
28
- border,
29
- center,
30
- square,
31
- direction,
32
- reverse,
33
- clickable,
34
- iconSize,
35
- iconColor,
25
+ tokens: t,
26
+ columnNum: cn,
27
+ gutter: g,
28
+ border: b,
29
+ center: c,
30
+ square: sq,
31
+ direction: d,
32
+ reverse: r,
33
+ clickable: cl,
34
+ iconSize: is,
35
+ iconColor: ic,
36
36
  count
37
- } = context;
38
- const widthPercent = useMemo(() => `${100 / columnNum}%`, [columnNum]);
39
- const isLastColumn = useMemo(() => (gridItemIndex + 1) % columnNum === 0, [columnNum, gridItemIndex]);
40
- const rowIndex = useMemo(() => Math.floor(gridItemIndex / columnNum), [columnNum, gridItemIndex]);
41
- const lastRowIndex = useMemo(() => Math.floor((count - 1) / columnNum), [columnNum, count]);
42
- const contentWrapperStyle = useMemo(() => [tokens.layout.itemContentBase, direction === 'horizontal' ? tokens.layout.itemHorizontal : tokens.layout.itemVertical, center && tokens.layout.itemCenter, reverse ? direction === 'horizontal' ? tokens.layout.itemReverseRow : tokens.layout.itemReverseColumn : null, square ? tokens.layout.itemContentSquare : null, {
43
- paddingHorizontal: tokens.spacing.paddingHorizontal,
44
- paddingVertical: tokens.spacing.paddingVertical,
45
- backgroundColor: tokens.colors.background
46
- }, contentStyle], [center, contentStyle, direction, reverse, square, tokens.colors.background, tokens.layout.itemContentBase, tokens.layout.itemContentSquare, tokens.layout.itemHorizontal, tokens.layout.itemReverseColumn, tokens.layout.itemReverseRow, tokens.layout.itemVertical, tokens.layout.itemCenter, tokens.spacing.paddingHorizontal, tokens.spacing.paddingVertical]);
47
- const hasText = isRenderable(text);
48
- const resolvedIconColor = useMemo(() => iconColorProp ?? iconColor ?? tokens.colors.text, [iconColor, iconColorProp, tokens.colors.text]);
49
- const innerContent = useMemo(() => {
37
+ } = ctx;
38
+ const wp = `${100 / cn}%`;
39
+ const ilc = (gridItemIndex + 1) % cn === 0;
40
+ const ri = Math.floor(gridItemIndex / cn);
41
+ const lri = Math.floor((count - 1) / cn);
42
+ const cws = [t.layout.itemContentBase, d === 'horizontal' ? t.layout.itemHorizontal : t.layout.itemVertical, c && t.layout.itemCenter, r ? d === 'horizontal' ? t.layout.itemReverseRow : t.layout.itemReverseColumn : null, sq ? t.layout.itemContentSquare : null, {
43
+ paddingHorizontal: t.spacing.paddingHorizontal,
44
+ paddingVertical: t.spacing.paddingVertical,
45
+ backgroundColor: t.colors.background
46
+ }, contentStyle];
47
+ const ht = isRenderable(text);
48
+ const ric = icp ?? ic ?? t.colors.text;
49
+ const icn = useMemo(() => {
50
50
  if (children) return children;
51
- let iconElement = null;
51
+ let ie = null;
52
52
  if (icon || badge || dot) {
53
53
  const {
54
- style: badgeWrapperStyle,
55
- ...badgeRest
54
+ style: bws,
55
+ ...br
56
56
  } = badge ?? {};
57
- const marginKey = direction === 'vertical' ? reverse ? 'marginTop' : 'marginBottom' : reverse ? 'marginLeft' : 'marginRight';
58
- const iconWrapperStyle = [tokens.layout.iconWrapper, hasText && {
59
- [marginKey]: tokens.spacing.iconGap
57
+ const mk = d === 'vertical' ? r ? 'marginTop' : 'marginBottom' : r ? 'marginLeft' : 'marginRight';
58
+ const iws = [t.layout.iconWrapper, ht && {
59
+ [mk]: t.spacing.iconGap
60
60
  }];
61
- const iconNode = isFunction(icon) ? icon(iconSize, resolvedIconColor) : icon;
62
- const content = /*#__PURE__*/React.createElement(View, {
63
- style: iconWrapperStyle
64
- }, iconNode);
65
- iconElement = badge || dot ? /*#__PURE__*/React.createElement(Badge, _extends({
61
+ const ino = isFunction(icon) ? icon(is, ric) : icon;
62
+ const cnt = /*#__PURE__*/React.createElement(View, {
63
+ style: iws
64
+ }, ino);
65
+ ie = badge || dot ? /*#__PURE__*/React.createElement(Badge, _extends({
66
66
  dot: dot
67
- }, badgeRest, {
68
- style: center ? [badgeWrapperStyle, {
67
+ }, br, {
68
+ style: c ? [bws, {
69
69
  alignSelf: 'center'
70
- }] : badgeWrapperStyle
71
- }), content) : content;
70
+ }] : bws
71
+ }), cnt) : cnt;
72
72
  }
73
- const textElement = hasText && (isText(text) ? /*#__PURE__*/React.createElement(Text, {
74
- style: [tokens.layout.text, {
75
- color: tokens.colors.text,
76
- fontSize: tokens.typography.fontSize,
77
- lineHeight: tokens.typography.lineHeight,
78
- fontFamily: tokens.typography.fontFamily,
79
- fontWeight: tokens.typography.fontWeight
73
+ const te = ht && (isText(text) ? /*#__PURE__*/React.createElement(Text, {
74
+ style: [t.layout.text, {
75
+ color: t.colors.text,
76
+ fontSize: t.typography.fontSize,
77
+ lineHeight: t.typography.lineHeight,
78
+ fontFamily: t.typography.fontFamily,
79
+ fontWeight: t.typography.fontWeight
80
80
  }, textStyle],
81
- numberOfLines: tokens.defaults.textNumberOfLines
81
+ numberOfLines: t.defaults.textNumberOfLines
82
82
  }, text) : text);
83
- return /*#__PURE__*/React.createElement(React.Fragment, null, iconElement, textElement);
84
- }, [badge, center, children, direction, dot, hasText, icon, iconSize, resolvedIconColor, reverse, text, textStyle, tokens.colors.text, tokens.defaults.textNumberOfLines, tokens.layout.iconWrapper, tokens.layout.text, tokens.spacing.iconGap, tokens.typography.fontFamily, tokens.typography.fontSize, tokens.typography.fontWeight, tokens.typography.lineHeight]);
85
- const rightBorder = useMemo(() => border && !gutter && !isLastColumn ? /*#__PURE__*/React.createElement(View, {
86
- style: [tokens.layout.itemBorderRight, createHairlineView({
83
+ return /*#__PURE__*/React.createElement(React.Fragment, null, ie, te);
84
+ }, [badge, c, children, d, dot, ht, icon, is, ric, r, text, textStyle, t.colors.text, t.defaults.textNumberOfLines, t.layout.iconWrapper, t.layout.text, t.spacing.iconGap, t.typography.fontFamily, t.typography.fontSize, t.typography.fontWeight, t.typography.lineHeight]);
85
+ const rb = b && !g && !ilc ? /*#__PURE__*/React.createElement(View, {
86
+ style: [t.layout.itemBorderRight, createHairlineView({
87
87
  position: 'right',
88
- color: tokens.colors.border,
88
+ color: t.colors.border,
89
89
  top: 0,
90
90
  bottom: 0,
91
91
  right: 0
92
92
  })]
93
- }) : null, [border, gutter, isLastColumn, tokens.colors.border, tokens.layout.itemBorderRight]);
94
- const bottomBorder = useMemo(() => border && !gutter && rowIndex < lastRowIndex ? /*#__PURE__*/React.createElement(View, {
95
- style: [tokens.layout.itemBorderBottom, createHairlineView({
93
+ }) : null;
94
+ const bb = b && !g && ri < lri ? /*#__PURE__*/React.createElement(View, {
95
+ style: [t.layout.itemBorderBottom, createHairlineView({
96
96
  position: 'bottom',
97
- color: tokens.colors.border,
97
+ color: t.colors.border,
98
98
  left: 0,
99
99
  right: 0,
100
100
  bottom: 0
101
101
  })]
102
- }) : null, [border, gutter, lastRowIndex, rowIndex, tokens.colors.border, tokens.layout.itemBorderBottom]);
103
- const content = useMemo(() => /*#__PURE__*/React.createElement(View, {
104
- style: contentWrapperStyle
105
- }, innerContent, rightBorder, bottomBorder), [bottomBorder, contentWrapperStyle, innerContent, rightBorder]);
106
- const baseItemStyle = useMemo(() => ({
107
- width: Platform.OS === 'web' ? undefined : widthPercent,
102
+ }) : null;
103
+ const cnt = /*#__PURE__*/React.createElement(View, {
104
+ style: cws
105
+ }, icn, rb, bb);
106
+ const bis = {
107
+ width: Platform.OS === 'web' ? undefined : wp,
108
108
  flexGrow: 0,
109
109
  flexShrink: 0,
110
- paddingRight: Platform.OS === 'web' ? undefined : gutter ? gutter : undefined,
111
- marginTop: Platform.OS === 'web' ? undefined : gutter && rowIndex > 0 ? gutter : undefined
112
- }), [gutter, rowIndex, widthPercent]);
113
- const isInteractive = clickable || isFunction(onPress);
114
- if (isInteractive) {
115
- return /*#__PURE__*/React.createElement(Pressable, _extends({
116
- style: pressableState => [baseItemStyle, typeof style === 'function' ? style(pressableState) : style, {
117
- opacity: pressableState.pressed ? tokens.defaults.pressedOpacity : 1
118
- }],
119
- android_ripple: {
120
- color: tokens.colors.active
121
- },
122
- onPress: onPress
123
- }, rest), content);
124
- }
110
+ paddingRight: Platform.OS === 'web' ? undefined : g ? g : undefined,
111
+ marginTop: Platform.OS === 'web' ? undefined : g && ri > 0 ? g : undefined
112
+ };
113
+ const ii = cl || isFunction(onPress);
114
+ if (ii) return /*#__PURE__*/React.createElement(Pressable, _extends({
115
+ accessibilityRole: "button",
116
+ style: ps => [bis, typeof style === 'function' ? style(ps) : style, {
117
+ opacity: ps.pressed ? t.defaults.pressedOpacity : 1
118
+ }],
119
+ android_ripple: {
120
+ color: t.colors.active
121
+ },
122
+ onPress: onPress
123
+ }, rest), cnt);
125
124
  return /*#__PURE__*/React.createElement(View, _extends({
126
- style: [baseItemStyle, typeof style === 'function' ? style({
125
+ style: [bis, typeof style === 'function' ? style({
127
126
  pressed: false
128
127
  }) : style]
129
- }, rest), content);
128
+ }, rest), cnt);
130
129
  };
130
+ export const GridItem = /*#__PURE__*/React.memo(GridItemImpl);
131
131
  GridItem.displayName = 'GridItem';
@@ -1,8 +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
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
3
- import { ActivityIndicator, Image as RNImage, Platform, Pressable, StyleSheet, Text, View } from 'react-native';
2
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import { ActivityIndicator, Image as RNImage, Platform, Pressable, StyleSheet, View } from 'react-native';
4
4
  import { SvgUri } from 'react-native-svg';
5
- import { isNumber, isString, isText } from '../../utils';
5
+ import { isNumber, isString, renderTextOrNode } from '../../utils';
6
+ import { isRenderable, isText } from '../../utils/validate';
7
+ import { useLocale } from '../config-provider/useLocale';
6
8
  import { useImageTokens } from './tokens';
7
9
  const resolveFitMode = fit => {
8
10
  switch (fit) {
@@ -30,11 +32,7 @@ const splitImageStyle = style => {
30
32
  for (const key of Object.keys(flattenedRecord)) {
31
33
  const value = flattenedRecord[key];
32
34
  if (value === undefined) continue;
33
- if (isLayoutStyleKey(key)) {
34
- container[key] = value;
35
- } else {
36
- image[key] = value;
37
- }
35
+ if (isLayoutStyleKey(key)) container[key] = value;else image[key] = value;
38
36
  }
39
37
  return {
40
38
  container: Object.keys(container).length ? container : undefined,
@@ -50,23 +48,23 @@ const PRESERVE_ASPECT_RATIO_MAP = {
50
48
  center: 'xMidYMid meet'
51
49
  };
52
50
  const resolvePreserveAspectRatio = fit => PRESERVE_ASPECT_RATIO_MAP[fit] || 'xMidYMid slice';
51
+ const WEB_IMAGE_STYLE = Platform.OS === 'web' ? {
52
+ height: 'revert-layer',
53
+ width: 'revert-layer'
54
+ } : undefined;
53
55
  const resolveSourceUri = source => {
54
56
  if (!source) return undefined;
55
57
  if (typeof source === 'number') return undefined;
56
58
  if (Array.isArray(source)) {
57
59
  for (const item of source) {
58
- if (item && typeof item === 'object' && 'uri' in item && typeof item.uri === 'string') {
59
- return item.uri;
60
- }
60
+ if (item && typeof item === 'object' && 'uri' in item && typeof item.uri === 'string') return item.uri;
61
61
  }
62
62
  return undefined;
63
63
  }
64
- if (typeof source === 'object' && 'uri' in source && typeof source.uri === 'string') {
65
- return source.uri;
66
- }
64
+ if (typeof source === 'object' && 'uri' in source && typeof source.uri === 'string') return source.uri;
67
65
  return undefined;
68
66
  };
69
- const Image = /*#__PURE__*/React.forwardRef((props, ref) => {
67
+ const ImageImpl = (props, ref) => {
70
68
  const {
71
69
  src,
72
70
  source,
@@ -96,15 +94,16 @@ const Image = /*#__PURE__*/React.forwardRef((props, ref) => {
96
94
  onError,
97
95
  ...rest
98
96
  } = props;
97
+ const locale = useLocale();
99
98
  const tokens = useImageTokens(tokensOverride);
100
99
  const fit = fitProp ?? tokens.defaults.fit;
101
100
  const showLoading = showLoadingProp ?? tokens.defaults.showLoading;
102
101
  const showError = showErrorProp ?? tokens.defaults.showError;
103
- const loadingText = loadingTextProp !== undefined ? loadingTextProp : tokens.defaults.loadingText;
104
- const errorText = errorTextProp !== undefined ? errorTextProp : tokens.defaults.errorText;
102
+ const loadingText = loadingTextProp !== undefined ? loadingTextProp : locale?.vanImage?.loading ?? tokens.defaults.loadingText;
103
+ const errorText = errorTextProp !== undefined ? errorTextProp : locale?.vanImage?.error ?? tokens.defaults.errorText;
105
104
  const {
106
105
  container: containerLayoutStyle,
107
- image: imageStyleWithoutLayout
106
+ image: imageStyleWithLayout
108
107
  } = useMemo(() => splitImageStyle(style), [style]);
109
108
  const actualSource = useMemo(() => source ? source : src ? {
110
109
  uri: src
@@ -120,57 +119,57 @@ const Image = /*#__PURE__*/React.forwardRef((props, ref) => {
120
119
  return 'none';
121
120
  }, [source, src]);
122
121
  const resolvedAccessibilityLabel = alt ?? accessibilityLabel ?? ariaLabel;
123
- const [status, setStatus] = useState(() => actualSource ? 'loading' : 'idle');
122
+ const [state, setState] = useState(() => actualSource ? 'loading' : 'idle');
124
123
  useEffect(() => {
125
- setStatus(actualSource ? 'loading' : 'idle');
124
+ setState(actualSource ? 'loading' : 'idle');
126
125
  }, [sourceKey]);
126
+ const onLoadRef = useRef(onLoad);
127
+ onLoadRef.current = onLoad;
128
+ const onErrorRef = useRef(onError);
129
+ onErrorRef.current = onError;
127
130
  const handleLoad = useCallback(event => {
128
- setStatus('loaded');
129
- onLoad?.(event);
130
- }, [onLoad]);
131
+ setState('loaded');
132
+ onLoadRef.current?.(event);
133
+ }, []);
131
134
  const handleError = useCallback(event => {
132
- setStatus('error');
133
- onError?.(event);
134
- }, [onError]);
135
+ setState('error');
136
+ onErrorRef.current?.(event);
137
+ }, []);
135
138
  const handleSvgLoad = useCallback(() => {
136
139
  handleLoad({
137
140
  nativeEvent: {}
138
141
  });
139
142
  }, [handleLoad]);
140
- const handleSvgError = useCallback(error => {
143
+ const handleSvgError = useCallback(err => {
141
144
  handleError({
142
145
  nativeEvent: {
143
- error
146
+ error: err
144
147
  }
145
148
  });
146
149
  }, [handleError]);
147
150
  const uri = useMemo(() => resolveSourceUri(actualSource), [actualSource]);
148
- const normalizedUri = useMemo(() => isString(uri) ? uri.toLowerCase() : undefined, [uri]);
149
- const isSvg = useMemo(() => !!normalizedUri && (normalizedUri.endsWith('.svg') || normalizedUri.includes('.svg?') || normalizedUri.includes('/svg?')), [normalizedUri]);
150
- const resolvedLoadingSize = useMemo(() => isNumber(loadingSize) ? loadingSize : tokens.defaults.loadingIndicatorBaseSize, [loadingSize, tokens.defaults.loadingIndicatorBaseSize]);
151
- const resolvedErrorIconSize = useMemo(() => iconSizeProp ?? tokens.defaults.iconSize, [iconSizeProp, tokens.defaults.iconSize]);
152
- const containerRole = onPress ? 'button' : undefined;
151
+ const normalizedUri = isString(uri) ? uri.toLowerCase() : undefined;
152
+ const isSvg = !!normalizedUri && (normalizedUri.endsWith('.svg') || normalizedUri.includes('.svg?') || normalizedUri.includes('/svg?'));
153
+ const resolvedLoadingSize = isNumber(loadingSize) ? loadingSize : tokens.defaults.loadingIndicatorBaseSize;
154
+ const resolvedErrorIconSize = iconSizeProp ?? tokens.defaults.iconSize;
155
+ const clickableRole = onPress ? 'button' : undefined;
153
156
  const pressableProps = onPress ? {
154
157
  onPress
155
158
  } : null;
156
159
  const renderLabel = (node, color, marginTop) => {
157
- if (node == null || node === false) return null;
158
- if (isText(node)) {
159
- return /*#__PURE__*/React.createElement(Text, {
160
- style: [tokens.layout.label, {
161
- color
162
- }, marginTop ? {
163
- marginTop
164
- } : undefined]
165
- }, node);
166
- }
167
- return marginTop ? /*#__PURE__*/React.createElement(View, {
160
+ if (!isRenderable(node)) return null;
161
+ const textNode = renderTextOrNode(node, [tokens.layout.label, {
162
+ color: color
163
+ }, marginTop ? {
164
+ marginTop: marginTop
165
+ } : undefined].filter(Boolean));
166
+ return marginTop && !isText(node) ? /*#__PURE__*/React.createElement(View, {
168
167
  style: {
169
- marginTop
168
+ marginTop: marginTop
170
169
  }
171
- }, node) : node;
170
+ }, textNode) : textNode;
172
171
  };
173
- const containerStyles = useMemo(() => [tokens.layout.container, {
172
+ const computedContainerStyle = useMemo(() => [tokens.layout.container, {
174
173
  width: width,
175
174
  height: height,
176
175
  backgroundColor: tokens.colors.background
@@ -180,10 +179,6 @@ const Image = /*#__PURE__*/React.forwardRef((props, ref) => {
180
179
  borderRadius: radius
181
180
  } : undefined, containerStyle, containerLayoutStyle], [containerLayoutStyle, containerStyle, height, radius, round, tokens.colors.background, tokens.defaults.roundRadius, tokens.layout.container, width]);
182
181
  const imageAccessibilityLabel = !onPress ? resolvedAccessibilityLabel : undefined;
183
- const webImageStyle = Platform.OS === 'web' ? {
184
- height: 'revert-layer',
185
- width: 'revert-layer'
186
- } : undefined;
187
182
  const imageNode = actualSource ? isSvg && Platform.OS !== 'web' && uri ? /*#__PURE__*/React.createElement(SvgUri, _extends({
188
183
  width: "100%",
189
184
  height: "100%",
@@ -192,7 +187,7 @@ const Image = /*#__PURE__*/React.forwardRef((props, ref) => {
192
187
  accessible: !onPress,
193
188
  accessibilityLabel: imageAccessibilityLabel
194
189
  }, rest, {
195
- style: [tokens.layout.absoluteFill, imageStyleWithoutLayout],
190
+ style: [tokens.layout.absoluteFill, imageStyleWithLayout],
196
191
  onLoad: handleSvgLoad,
197
192
  onError: handleSvgError
198
193
  })) : /*#__PURE__*/React.createElement(RNImage, _extends({
@@ -201,12 +196,12 @@ const Image = /*#__PURE__*/React.forwardRef((props, ref) => {
201
196
  accessibilityLabel: imageAccessibilityLabel
202
197
  }, rest, {
203
198
  source: actualSource,
204
- style: [tokens.layout.absoluteFill, imageStyleWithoutLayout, webImageStyle],
199
+ style: [tokens.layout.absoluteFill, imageStyleWithLayout, WEB_IMAGE_STYLE],
205
200
  resizeMode: resolveFitMode(fit),
206
201
  onLoad: handleLoad,
207
202
  onError: handleError
208
203
  })) : null;
209
- const content = /*#__PURE__*/React.createElement(React.Fragment, null, status === 'loading' && showLoading ? /*#__PURE__*/React.createElement(View, {
204
+ const content = /*#__PURE__*/React.createElement(React.Fragment, null, state === 'loading' && showLoading && /*#__PURE__*/React.createElement(View, {
210
205
  style: tokens.layout.overlay,
211
206
  pointerEvents: "none",
212
207
  testID: "rv-image-loading"
@@ -218,24 +213,25 @@ const Image = /*#__PURE__*/React.forwardRef((props, ref) => {
218
213
  scale: resolvedLoadingSize / tokens.defaults.loadingIndicatorBaseSize
219
214
  }]
220
215
  }
221
- }), renderLabel(loadingText, tokens.colors.text, tokens.defaults.loadingLabelMarginTop)) : null, imageNode, status === 'error' && showError ? /*#__PURE__*/React.createElement(View, {
216
+ }), renderLabel(loadingText, tokens.colors.text, tokens.defaults.loadingLabelMarginTop)), imageNode, state === 'error' && showError && /*#__PURE__*/React.createElement(View, {
222
217
  style: tokens.layout.overlay,
223
218
  pointerEvents: "none",
224
219
  testID: "rv-image-error"
225
- }, errorIcon ? /*#__PURE__*/React.createElement(View, {
220
+ }, errorIcon && /*#__PURE__*/React.createElement(View, {
226
221
  style: [tokens.layout.iconContainer, {
227
222
  width: resolvedErrorIconSize,
228
223
  height: resolvedErrorIconSize
229
224
  }]
230
- }, errorIcon) : null, fallback !== undefined && fallback !== null && fallback !== false ? renderLabel(fallback, tokens.colors.error) : renderLabel(errorText, tokens.colors.error)) : null, children);
225
+ }, errorIcon), isRenderable(fallback) ? renderLabel(fallback, tokens.colors.error) : renderLabel(errorText, tokens.colors.error)), children);
231
226
  return pressableProps ? /*#__PURE__*/React.createElement(Pressable, _extends({}, pressableProps, {
232
- accessibilityRole: containerRole,
227
+ accessibilityRole: clickableRole,
233
228
  accessibilityLabel: resolvedAccessibilityLabel,
234
- style: containerStyles
229
+ style: computedContainerStyle
235
230
  }), content) : /*#__PURE__*/React.createElement(View, {
236
231
  accessibilityLabel: resolvedAccessibilityLabel,
237
- style: containerStyles
232
+ style: computedContainerStyle
238
233
  }, content);
239
- });
240
- Image.displayName = 'Image';
234
+ };
235
+ const ImageForwardRef = /*#__PURE__*/React.forwardRef(ImageImpl);
236
+ const Image = /*#__PURE__*/React.memo(ImageForwardRef);
241
237
  export default Image;
@@ -11,8 +11,8 @@ const createTokens = foundations => {
11
11
  fit: 'cover',
12
12
  showLoading: true,
13
13
  showError: true,
14
- loadingText: '加载中…',
15
- errorText: '加载失败',
14
+ loadingText: 'Loading...',
15
+ errorText: 'Failed to load',
16
16
  iconSize: 20,
17
17
  loadingIndicatorBaseSize: 20,
18
18
  loadingLabelMarginTop: spacing.xs,