react-native-system-ui 0.0.7 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. package/README.md +46 -31
  2. package/dist/cjs/components/action-sheet/ActionSheet.js +128 -142
  3. package/dist/cjs/components/action-sheet/tokens.js +16 -27
  4. package/dist/cjs/components/area/Area.js +57 -70
  5. package/dist/cjs/components/area/tokens.js +6 -3
  6. package/dist/cjs/components/avatar/Avatar.js +38 -36
  7. package/dist/cjs/components/badge/Badge.js +68 -73
  8. package/dist/cjs/components/badge/tokens.js +6 -8
  9. package/dist/cjs/components/button/Button.js +135 -176
  10. package/dist/cjs/components/button/ButtonGroup.js +11 -45
  11. package/dist/cjs/components/button/tokens.js +1 -8
  12. package/dist/cjs/components/calendar/Calendar.js +212 -223
  13. package/dist/cjs/components/calendar/tokens.js +3 -3
  14. package/dist/cjs/components/cascader/Cascader.js +257 -267
  15. package/dist/cjs/components/cascader/tokens.js +2 -2
  16. package/dist/cjs/components/cascader/useCascaderExtend.js +25 -29
  17. package/dist/cjs/components/cell/Cell.js +94 -104
  18. package/dist/cjs/components/cell/CellGroup.js +37 -49
  19. package/dist/cjs/components/checkbox/Checkbox.js +140 -132
  20. package/dist/cjs/components/checkbox/CheckboxGroup.js +21 -51
  21. package/dist/cjs/components/checkbox/tokens.js +7 -10
  22. package/dist/cjs/components/circle/Circle.js +87 -74
  23. package/dist/cjs/components/collapse/Collapse.js +88 -104
  24. package/dist/cjs/components/config-provider/ConfigProvider.js +17 -4
  25. package/dist/cjs/components/config-provider/DirectionContext.js +15 -0
  26. package/dist/cjs/components/config-provider/index.js +7 -0
  27. package/dist/cjs/components/config-provider/locale/en-US.js +32 -0
  28. package/dist/cjs/components/config-provider/locale/zh-CN.js +32 -0
  29. package/dist/cjs/components/config-provider/useDirection.js +16 -0
  30. package/dist/cjs/components/count-down/CountDown.js +32 -27
  31. package/dist/cjs/components/datetime-picker/DatetimePicker.js +80 -104
  32. package/dist/cjs/components/datetime-picker/tokens.js +14 -3
  33. package/dist/cjs/components/dialog/Dialog.js +159 -121
  34. package/dist/cjs/components/dialog/imperative.js +24 -43
  35. package/dist/cjs/components/dialog/tokens.js +1 -0
  36. package/dist/cjs/components/divider/Divider.js +57 -62
  37. package/dist/cjs/components/empty/Empty.js +53 -52
  38. package/dist/cjs/components/error-boundary/ErrorBoundary.js +74 -0
  39. package/dist/cjs/components/error-boundary/index.js +19 -0
  40. package/dist/cjs/components/field/Field.js +109 -106
  41. package/dist/cjs/components/flex/Flex.js +32 -32
  42. package/dist/cjs/components/flex/FlexItem.js +27 -27
  43. package/dist/cjs/components/form/Form.js +178 -196
  44. package/dist/cjs/components/form/FormItem.js +87 -109
  45. package/dist/cjs/components/form/FormList.js +57 -45
  46. package/dist/cjs/components/form/tokens.js +6 -3
  47. package/dist/cjs/components/form/utils.js +15 -34
  48. package/dist/cjs/components/grid/Grid.js +44 -43
  49. package/dist/cjs/components/grid/GridItem.js +92 -86
  50. package/dist/cjs/components/image/Image.js +76 -79
  51. package/dist/cjs/components/image/tokens.js +5 -3
  52. package/dist/cjs/components/image-preview/ImagePreview.js +125 -113
  53. package/dist/cjs/components/image-preview/imperative.js +4 -13
  54. package/dist/cjs/components/image-preview/tokens.js +3 -1
  55. package/dist/cjs/components/index.js +13 -0
  56. package/dist/cjs/components/input/Input.js +40 -35
  57. package/dist/cjs/components/loading/Loading.js +32 -33
  58. package/dist/cjs/components/nav-bar/NavBar.js +88 -100
  59. package/dist/cjs/components/nav-bar/tokens.js +4 -10
  60. package/dist/cjs/components/notice-bar/NoticeBar.js +81 -80
  61. package/dist/cjs/components/notice-bar/tokens.js +3 -1
  62. package/dist/cjs/components/notify/Notify.js +89 -84
  63. package/dist/cjs/components/notify/imperative.js +32 -55
  64. package/dist/cjs/components/notify/tokens.js +2 -11
  65. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +277 -283
  66. package/dist/cjs/components/number-keyboard/tokens.js +7 -1
  67. package/dist/cjs/components/overlay/Overlay.js +37 -52
  68. package/dist/cjs/components/overlay/tokens.js +5 -3
  69. package/dist/cjs/components/password-input/PasswordInput.js +114 -95
  70. package/dist/cjs/components/picker/Picker.js +465 -454
  71. package/dist/cjs/components/picker/tokens.js +1 -1
  72. package/dist/cjs/components/popup/Popup.js +269 -299
  73. package/dist/cjs/components/popup/tokens.js +1 -0
  74. package/dist/cjs/components/portal/Portal.js +12 -30
  75. package/dist/cjs/components/portal/PortalHost.js +151 -234
  76. package/dist/cjs/components/progress/Progress.js +103 -101
  77. package/dist/cjs/components/progress/tokens.js +1 -0
  78. package/dist/cjs/components/radio/Radio.js +98 -91
  79. package/dist/cjs/components/radio/RadioGroup.js +13 -45
  80. package/dist/cjs/components/radio/tokens.js +7 -10
  81. package/dist/cjs/components/safe-area-view/SafeAreaView.js +22 -26
  82. package/dist/cjs/components/search/Search.js +65 -57
  83. package/dist/cjs/components/selector/Selector.js +21 -27
  84. package/dist/cjs/components/share-sheet/ShareSheet.js +165 -161
  85. package/dist/cjs/components/share-sheet/tokens.js +3 -1
  86. package/dist/cjs/components/sidebar/Sidebar.js +51 -51
  87. package/dist/cjs/components/sidebar/SidebarContext.js +1 -2
  88. package/dist/cjs/components/sidebar/SidebarItem.js +19 -21
  89. package/dist/cjs/components/sidebar/tokens.js +4 -4
  90. package/dist/cjs/components/skeleton/Skeleton.js +71 -77
  91. package/dist/cjs/components/skeleton/tokens.js +1 -2
  92. package/dist/cjs/components/slider/Slider.js +156 -135
  93. package/dist/cjs/components/space/Space.js +57 -76
  94. package/dist/cjs/components/space/tokens.js +7 -1
  95. package/dist/cjs/components/stepper/Stepper.js +182 -158
  96. package/dist/cjs/components/stepper/tokens.js +1 -0
  97. package/dist/cjs/components/swiper/Swiper.js +256 -255
  98. package/dist/cjs/components/swiper/SwiperPagIndicator.js +26 -27
  99. package/dist/cjs/components/swiper/tokens.js +10 -3
  100. package/dist/cjs/components/switch/Switch.js +23 -25
  101. package/dist/cjs/components/tabbar/Tabbar.js +48 -40
  102. package/dist/cjs/components/tabbar/TabbarContext.js +1 -2
  103. package/dist/cjs/components/tabbar/TabbarItem.js +65 -68
  104. package/dist/cjs/components/tabs/Tabs.js +402 -439
  105. package/dist/cjs/components/tabs/tokens.js +3 -1
  106. package/dist/cjs/components/tag/Tag.js +68 -59
  107. package/dist/cjs/components/toast/Toast.js +91 -90
  108. package/dist/cjs/components/toast/imperative.js +16 -41
  109. package/dist/cjs/components/toast/tokens.js +1 -0
  110. package/dist/cjs/components/typography/Typography.js +25 -25
  111. package/dist/cjs/components/water-mark/WaterMark.js +80 -78
  112. package/dist/cjs/design-system/Text.js +38 -0
  113. package/dist/cjs/design-system/ThemeProvider.js +5 -11
  114. package/dist/cjs/design-system/createComponentTokensHook.js +11 -13
  115. package/dist/cjs/design-system/index.js +7 -0
  116. package/dist/cjs/design-system/mergeTokensOverride.js +1 -4
  117. package/dist/cjs/design-system/presets.js +2 -3
  118. package/dist/cjs/design-system/tokens.js +2 -11
  119. package/dist/cjs/hooks/animation/index.js +25 -0
  120. package/dist/cjs/hooks/animation/useAnimatedTransition.js +72 -0
  121. package/dist/cjs/hooks/animation/useReducedMotion.js +75 -0
  122. package/dist/cjs/hooks/aria/useAriaListBox.js +8 -16
  123. package/dist/cjs/hooks/aria/useAriaOverlay.js +3 -3
  124. package/dist/cjs/hooks/aria/useAriaPress.js +8 -21
  125. package/dist/cjs/hooks/aria/useAriaToggle.js +3 -3
  126. package/dist/cjs/hooks/gesture/useGestureScroll.js +60 -61
  127. package/dist/cjs/hooks/index.js +12 -0
  128. package/dist/cjs/hooks/overlay/OverlayStackStore.js +49 -69
  129. package/dist/cjs/hooks/overlay/useOverlayStack.js +13 -19
  130. package/dist/cjs/hooks/useControllableValue.js +13 -24
  131. package/dist/cjs/hooks/useCountDown.js +30 -38
  132. package/dist/cjs/hooks/useHairline.js +17 -29
  133. package/dist/cjs/hooks/useSafeAreaPadding.js +1 -4
  134. package/dist/cjs/index.js +67 -1
  135. package/dist/cjs/platform/animation.js +10 -2
  136. package/dist/cjs/platform/measure.js +21 -37
  137. package/dist/cjs/utils/color.js +20 -39
  138. package/dist/cjs/utils/compare.js +7 -12
  139. package/dist/cjs/utils/createPlatformShadow.js +28 -39
  140. package/dist/cjs/utils/date.js +20 -50
  141. package/dist/cjs/utils/deepMerge.js +16 -26
  142. package/dist/cjs/utils/hairline.js +75 -71
  143. package/dist/cjs/utils/index.js +22 -0
  144. package/dist/cjs/utils/number.js +21 -29
  145. package/dist/cjs/utils/render.js +21 -0
  146. package/dist/cjs/utils/rtl.js +25 -0
  147. package/dist/cjs/utils/string.js +8 -25
  148. package/dist/cjs/utils/validate.js +2 -4
  149. package/dist/es/components/action-sheet/ActionSheet.js +130 -144
  150. package/dist/es/components/action-sheet/tokens.js +16 -27
  151. package/dist/es/components/area/Area.js +58 -71
  152. package/dist/es/components/area/tokens.js +6 -3
  153. package/dist/es/components/avatar/Avatar.js +38 -36
  154. package/dist/es/components/avatar/index.js +1 -2
  155. package/dist/es/components/badge/Badge.js +70 -75
  156. package/dist/es/components/badge/tokens.js +6 -8
  157. package/dist/es/components/button/Button.js +136 -177
  158. package/dist/es/components/button/ButtonGroup.js +12 -46
  159. package/dist/es/components/button/tokens.js +2 -3
  160. package/dist/es/components/calendar/Calendar.js +214 -225
  161. package/dist/es/components/calendar/tokens.js +3 -3
  162. package/dist/es/components/cascader/Cascader.js +260 -270
  163. package/dist/es/components/cascader/tokens.js +2 -2
  164. package/dist/es/components/cascader/useCascaderExtend.js +25 -29
  165. package/dist/es/components/cell/Cell.js +95 -105
  166. package/dist/es/components/cell/CellGroup.js +37 -48
  167. package/dist/es/components/checkbox/Checkbox.js +141 -133
  168. package/dist/es/components/checkbox/CheckboxGroup.js +22 -52
  169. package/dist/es/components/checkbox/tokens.js +7 -10
  170. package/dist/es/components/circle/Circle.js +87 -73
  171. package/dist/es/components/collapse/Collapse.js +90 -105
  172. package/dist/es/components/config-provider/ConfigProvider.js +11 -4
  173. package/dist/es/components/config-provider/DirectionContext.js +2 -0
  174. package/dist/es/components/config-provider/index.js +1 -0
  175. package/dist/es/components/config-provider/locale/en-US.js +32 -0
  176. package/dist/es/components/config-provider/locale/zh-CN.js +32 -0
  177. package/dist/es/components/config-provider/useDirection.js +3 -0
  178. package/dist/es/components/count-down/CountDown.js +35 -30
  179. package/dist/es/components/datetime-picker/DatetimePicker.js +80 -104
  180. package/dist/es/components/datetime-picker/tokens.js +14 -3
  181. package/dist/es/components/dialog/Dialog.js +160 -121
  182. package/dist/es/components/dialog/imperative.js +24 -43
  183. package/dist/es/components/dialog/tokens.js +1 -0
  184. package/dist/es/components/divider/Divider.js +59 -63
  185. package/dist/es/components/empty/Empty.js +54 -52
  186. package/dist/es/components/error-boundary/ErrorBoundary.js +62 -0
  187. package/dist/es/components/error-boundary/index.js +1 -0
  188. package/dist/es/components/field/Field.js +109 -106
  189. package/dist/es/components/flex/Flex.js +32 -31
  190. package/dist/es/components/flex/FlexItem.js +28 -27
  191. package/dist/es/components/form/Form.js +179 -197
  192. package/dist/es/components/form/FormItem.js +86 -107
  193. package/dist/es/components/form/FormList.js +57 -45
  194. package/dist/es/components/form/tokens.js +6 -3
  195. package/dist/es/components/form/utils.js +15 -34
  196. package/dist/es/components/grid/Grid.js +44 -42
  197. package/dist/es/components/grid/GridItem.js +94 -87
  198. package/dist/es/components/image/Image.js +79 -82
  199. package/dist/es/components/image/tokens.js +5 -3
  200. package/dist/es/components/image-preview/ImagePreview.js +125 -113
  201. package/dist/es/components/image-preview/imperative.js +4 -13
  202. package/dist/es/components/image-preview/tokens.js +3 -1
  203. package/dist/es/components/index.js +3 -1
  204. package/dist/es/components/input/Input.js +41 -36
  205. package/dist/es/components/loading/Loading.js +34 -34
  206. package/dist/es/components/nav-bar/NavBar.js +88 -100
  207. package/dist/es/components/nav-bar/tokens.js +4 -4
  208. package/dist/es/components/notice-bar/NoticeBar.js +81 -79
  209. package/dist/es/components/notice-bar/tokens.js +3 -1
  210. package/dist/es/components/notify/Notify.js +93 -87
  211. package/dist/es/components/notify/imperative.js +33 -56
  212. package/dist/es/components/notify/tokens.js +2 -5
  213. package/dist/es/components/number-keyboard/NumberKeyboard.js +277 -283
  214. package/dist/es/components/number-keyboard/tokens.js +7 -1
  215. package/dist/es/components/overlay/Overlay.js +36 -51
  216. package/dist/es/components/overlay/tokens.js +5 -3
  217. package/dist/es/components/password-input/PasswordInput.js +114 -95
  218. package/dist/es/components/picker/Picker.js +465 -454
  219. package/dist/es/components/picker/tokens.js +1 -1
  220. package/dist/es/components/popup/Popup.js +269 -298
  221. package/dist/es/components/popup/tokens.js +1 -0
  222. package/dist/es/components/portal/Portal.js +13 -30
  223. package/dist/es/components/portal/PortalHost.js +152 -234
  224. package/dist/es/components/progress/Progress.js +103 -101
  225. package/dist/es/components/progress/tokens.js +1 -0
  226. package/dist/es/components/radio/Radio.js +100 -93
  227. package/dist/es/components/radio/RadioGroup.js +15 -46
  228. package/dist/es/components/radio/tokens.js +7 -10
  229. package/dist/es/components/safe-area-view/SafeAreaView.js +22 -25
  230. package/dist/es/components/search/Search.js +66 -58
  231. package/dist/es/components/selector/Selector.js +21 -27
  232. package/dist/es/components/share-sheet/ShareSheet.js +167 -163
  233. package/dist/es/components/share-sheet/tokens.js +3 -1
  234. package/dist/es/components/sidebar/Sidebar.js +53 -53
  235. package/dist/es/components/sidebar/SidebarContext.js +1 -2
  236. package/dist/es/components/sidebar/SidebarItem.js +19 -20
  237. package/dist/es/components/sidebar/tokens.js +4 -4
  238. package/dist/es/components/skeleton/Skeleton.js +71 -77
  239. package/dist/es/components/skeleton/tokens.js +1 -2
  240. package/dist/es/components/slider/Slider.js +156 -134
  241. package/dist/es/components/space/Space.js +59 -78
  242. package/dist/es/components/space/tokens.js +7 -1
  243. package/dist/es/components/stepper/Stepper.js +183 -159
  244. package/dist/es/components/stepper/tokens.js +1 -0
  245. package/dist/es/components/swiper/Swiper.js +258 -257
  246. package/dist/es/components/swiper/SwiperPagIndicator.js +26 -27
  247. package/dist/es/components/swiper/tokens.js +10 -3
  248. package/dist/es/components/switch/Switch.js +23 -25
  249. package/dist/es/components/tabbar/Tabbar.js +49 -41
  250. package/dist/es/components/tabbar/TabbarContext.js +1 -2
  251. package/dist/es/components/tabbar/TabbarItem.js +66 -69
  252. package/dist/es/components/tabs/Tabs.js +403 -440
  253. package/dist/es/components/tabs/tokens.js +3 -1
  254. package/dist/es/components/tag/Tag.js +71 -61
  255. package/dist/es/components/toast/Toast.js +94 -91
  256. package/dist/es/components/toast/imperative.js +16 -41
  257. package/dist/es/components/toast/tokens.js +1 -0
  258. package/dist/es/components/typography/Typography.js +25 -25
  259. package/dist/es/components/water-mark/WaterMark.js +81 -79
  260. package/dist/es/design-system/Text.js +19 -0
  261. package/dist/es/design-system/ThemeProvider.js +5 -11
  262. package/dist/es/design-system/createComponentTokensHook.js +11 -13
  263. package/dist/es/design-system/index.js +1 -0
  264. package/dist/es/design-system/mergeTokensOverride.js +1 -4
  265. package/dist/es/design-system/presets.js +2 -3
  266. package/dist/es/design-system/tokens.js +1 -9
  267. package/dist/es/hooks/animation/index.js +2 -0
  268. package/dist/es/hooks/animation/useAnimatedTransition.js +53 -0
  269. package/dist/es/hooks/animation/useReducedMotion.js +54 -0
  270. package/dist/es/hooks/aria/useAriaListBox.js +8 -16
  271. package/dist/es/hooks/aria/useAriaOverlay.js +3 -3
  272. package/dist/es/hooks/aria/useAriaPress.js +8 -21
  273. package/dist/es/hooks/aria/useAriaToggle.js +3 -3
  274. package/dist/es/hooks/gesture/useGestureScroll.js +60 -61
  275. package/dist/es/hooks/index.js +1 -0
  276. package/dist/es/hooks/overlay/OverlayStackStore.js +49 -69
  277. package/dist/es/hooks/overlay/useOverlayStack.js +13 -19
  278. package/dist/es/hooks/useControllableValue.js +13 -24
  279. package/dist/es/hooks/useCountDown.js +30 -38
  280. package/dist/es/hooks/useHairline.js +16 -28
  281. package/dist/es/hooks/useSafeAreaPadding.js +1 -4
  282. package/dist/es/index.js +8 -1
  283. package/dist/es/platform/animation.js +9 -1
  284. package/dist/es/platform/measure.js +21 -37
  285. package/dist/es/utils/color.js +18 -35
  286. package/dist/es/utils/compare.js +7 -12
  287. package/dist/es/utils/createPlatformShadow.js +28 -39
  288. package/dist/es/utils/date.js +20 -50
  289. package/dist/es/utils/deepMerge.js +16 -26
  290. package/dist/es/utils/hairline.js +74 -65
  291. package/dist/es/utils/index.js +2 -0
  292. package/dist/es/utils/number.js +21 -29
  293. package/dist/es/utils/render.js +7 -0
  294. package/dist/es/utils/rtl.js +17 -0
  295. package/dist/es/utils/string.js +8 -25
  296. package/dist/es/utils/validate.js +1 -2
  297. package/dist/types/components/action-sheet/ActionSheet.d.ts +1 -1
  298. package/dist/types/components/area/Area.d.ts +1 -1
  299. package/dist/types/components/area/tokens.d.ts +4 -0
  300. package/dist/types/components/avatar/Avatar.d.ts +1 -1
  301. package/dist/types/components/avatar/index.d.ts +1 -2
  302. package/dist/types/components/badge/Badge.d.ts +1 -1
  303. package/dist/types/components/button/Button.d.ts +1 -1
  304. package/dist/types/components/button/index.d.ts +1 -1
  305. package/dist/types/components/calendar/Calendar.d.ts +1 -1
  306. package/dist/types/components/cascader/Cascader.d.ts +1 -1
  307. package/dist/types/components/cell/Cell.d.ts +1 -1
  308. package/dist/types/components/cell/CellGroup.d.ts +1 -1
  309. package/dist/types/components/cell/index.d.ts +2 -2
  310. package/dist/types/components/checkbox/Checkbox.d.ts +1 -1
  311. package/dist/types/components/circle/Circle.d.ts +1 -1
  312. package/dist/types/components/collapse/Collapse.d.ts +1 -2
  313. package/dist/types/components/config-provider/DirectionContext.d.ts +3 -0
  314. package/dist/types/components/config-provider/index.d.ts +2 -1
  315. package/dist/types/components/config-provider/locale/en-US.d.ts +32 -0
  316. package/dist/types/components/config-provider/locale/zh-CN.d.ts +32 -0
  317. package/dist/types/components/config-provider/useDirection.d.ts +1 -0
  318. package/dist/types/components/count-down/CountDown.d.ts +1 -1
  319. package/dist/types/components/datetime-picker/DatetimePicker.d.ts +1 -1
  320. package/dist/types/components/datetime-picker/tokens.d.ts +12 -0
  321. package/dist/types/components/dialog/Dialog.d.ts +1 -1
  322. package/dist/types/components/dialog/tokens.d.ts +1 -0
  323. package/dist/types/components/divider/Divider.d.ts +1 -1
  324. package/dist/types/components/empty/Empty.d.ts +1 -1
  325. package/dist/types/components/error-boundary/ErrorBoundary.d.ts +6 -0
  326. package/dist/types/components/error-boundary/index.d.ts +2 -0
  327. package/dist/types/components/field/Field.d.ts +1 -1
  328. package/dist/types/components/flex/Flex.d.ts +1 -1
  329. package/dist/types/components/flex/FlexItem.d.ts +1 -1
  330. package/dist/types/components/flex/index.d.ts +2 -2
  331. package/dist/types/components/form/Form.d.ts +1 -1
  332. package/dist/types/components/form/FormItem.d.ts +2 -1
  333. package/dist/types/components/form/index.d.ts +2 -2
  334. package/dist/types/components/form/tokens.d.ts +4 -0
  335. package/dist/types/components/grid/Grid.d.ts +1 -1
  336. package/dist/types/components/grid/GridItem.d.ts +1 -1
  337. package/dist/types/components/grid/index.d.ts +2 -2
  338. package/dist/types/components/image/Image.d.ts +1 -1
  339. package/dist/types/components/image-preview/ImagePreview.d.ts +1 -1
  340. package/dist/types/components/image-preview/tokens.d.ts +1 -0
  341. package/dist/types/components/index.d.ts +4 -1
  342. package/dist/types/components/input/Input.d.ts +3 -3
  343. package/dist/types/components/loading/Loading.d.ts +1 -1
  344. package/dist/types/components/nav-bar/NavBar.d.ts +1 -1
  345. package/dist/types/components/nav-bar/tokens.d.ts +1 -1
  346. package/dist/types/components/notice-bar/NoticeBar.d.ts +1 -1
  347. package/dist/types/components/notice-bar/tokens.d.ts +1 -0
  348. package/dist/types/components/notify/Notify.d.ts +2 -2
  349. package/dist/types/components/notify/index.d.ts +1 -1
  350. package/dist/types/components/number-keyboard/tokens.d.ts +5 -0
  351. package/dist/types/components/overlay/Overlay.d.ts +1 -5
  352. package/dist/types/components/overlay/tokens.d.ts +3 -0
  353. package/dist/types/components/password-input/PasswordInput.d.ts +1 -1
  354. package/dist/types/components/picker/Picker.d.ts +6 -6
  355. package/dist/types/components/popup/Popup.d.ts +3 -42
  356. package/dist/types/components/popup/tokens.d.ts +1 -0
  357. package/dist/types/components/portal/Portal.d.ts +9 -6
  358. package/dist/types/components/portal/PortalHost.d.ts +1 -1
  359. package/dist/types/components/radio/RadioGroup.d.ts +1 -1
  360. package/dist/types/components/safe-area-view/SafeAreaView.d.ts +1 -1
  361. package/dist/types/components/search/Search.d.ts +1 -1
  362. package/dist/types/components/share-sheet/ShareSheet.d.ts +1 -1
  363. package/dist/types/components/share-sheet/tokens.d.ts +1 -0
  364. package/dist/types/components/sidebar/Sidebar.d.ts +1 -1
  365. package/dist/types/components/sidebar/SidebarContext.d.ts +1 -1
  366. package/dist/types/components/sidebar/SidebarItem.d.ts +1 -1
  367. package/dist/types/components/sidebar/index.d.ts +2 -2
  368. package/dist/types/components/skeleton/Skeleton.d.ts +1 -1
  369. package/dist/types/components/slider/Slider.d.ts +1 -1
  370. package/dist/types/components/stepper/Stepper.d.ts +1 -1
  371. package/dist/types/components/stepper/tokens.d.ts +1 -0
  372. package/dist/types/components/swiper/Swiper.d.ts +1 -1
  373. package/dist/types/components/swiper/index.d.ts +1 -1
  374. package/dist/types/components/swiper/tokens.d.ts +8 -0
  375. package/dist/types/components/tabbar/Tabbar.d.ts +2 -2
  376. package/dist/types/components/tabbar/TabbarContext.d.ts +1 -1
  377. package/dist/types/components/tabbar/TabbarItem.d.ts +2 -2
  378. package/dist/types/components/tabs/Tabs.d.ts +1 -1
  379. package/dist/types/components/tabs/index.d.ts +1 -1
  380. package/dist/types/components/tabs/tokens.d.ts +1 -0
  381. package/dist/types/components/tag/Tag.d.ts +1 -1
  382. package/dist/types/components/toast/Toast.d.ts +2 -2
  383. package/dist/types/components/toast/index.d.ts +1 -1
  384. package/dist/types/components/toast/tokens.d.ts +1 -0
  385. package/dist/types/components/water-mark/WaterMark.d.ts +1 -1
  386. package/dist/types/design-system/Text.d.ts +3 -0
  387. package/dist/types/design-system/index.d.ts +1 -0
  388. package/dist/types/design-system/tokens.d.ts +0 -1
  389. package/dist/types/hooks/animation/index.d.ts +3 -0
  390. package/dist/types/hooks/animation/useAnimatedTransition.d.ts +13 -0
  391. package/dist/types/hooks/animation/useReducedMotion.d.ts +3 -0
  392. package/dist/types/hooks/aria/useAriaOverlay.d.ts +1 -1
  393. package/dist/types/hooks/gesture/useGestureScroll.d.ts +11 -10
  394. package/dist/types/hooks/index.d.ts +1 -0
  395. package/dist/types/hooks/overlay/OverlayStackStore.d.ts +8 -8
  396. package/dist/types/hooks/useCountDown.d.ts +1 -1
  397. package/dist/types/hooks/useHairline.d.ts +1 -1
  398. package/dist/types/index.d.ts +5 -0
  399. package/dist/types/platform/animation.d.ts +8 -0
  400. package/dist/types/platform/measure.d.ts +1 -1
  401. package/dist/types/utils/color.d.ts +0 -2
  402. package/dist/types/utils/compare.d.ts +1 -1
  403. package/dist/types/utils/createPlatformShadow.d.ts +2 -2
  404. package/dist/types/utils/date.d.ts +2 -2
  405. package/dist/types/utils/hairline.d.ts +5 -10
  406. package/dist/types/utils/index.d.ts +2 -0
  407. package/dist/types/utils/number.d.ts +2 -2
  408. package/dist/types/utils/render.d.ts +5 -0
  409. package/dist/types/utils/rtl.d.ts +5 -0
  410. package/dist/types/utils/validate.d.ts +0 -1
  411. package/package.json +25 -4
@@ -18,20 +18,21 @@ function _reactNative() {
18
18
  };
19
19
  return data;
20
20
  }
21
+ var _designSystem = require("../../design-system");
21
22
  var _badge = _interopRequireDefault(require("../badge"));
22
23
  var _utils = require("../../utils");
23
24
  var _GridContext = require("./GridContext");
24
25
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
25
26
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
26
27
  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); }
27
- const GridItem = props => {
28
- const context = (0, _react().useContext)(_GridContext.GridContext);
29
- if (!context) throw new Error('GridItem must be used within Grid');
28
+ const GridItemImpl = p => {
29
+ const ctx = (0, _react().useContext)(_GridContext.GridContext);
30
+ if (!ctx) throw new Error('GridItem must be used within Grid');
30
31
  const {
31
32
  gridItemIndex = 0,
32
33
  text,
33
34
  icon,
34
- iconColor: iconColorProp,
35
+ iconColor: icp,
35
36
  badge,
36
37
  dot,
37
38
  contentStyle,
@@ -40,113 +41,118 @@ const GridItem = props => {
40
41
  style,
41
42
  onPress,
42
43
  ...rest
43
- } = props;
44
+ } = p;
44
45
  const {
45
- tokens,
46
- columnNum,
47
- gutter,
48
- border,
49
- center,
50
- square,
51
- direction,
52
- reverse,
53
- clickable,
54
- iconSize,
55
- iconColor,
46
+ tokens: t,
47
+ columnNum: cn,
48
+ gutter: g,
49
+ border: b,
50
+ center: c,
51
+ square: sq,
52
+ direction: d,
53
+ reverse: r,
54
+ clickable: cl,
55
+ iconSize: is,
56
+ iconColor: ic,
56
57
  count
57
- } = context;
58
- const widthPercent = (0, _react().useMemo)(() => `${100 / columnNum}%`, [columnNum]);
59
- const isLastColumn = (0, _react().useMemo)(() => (gridItemIndex + 1) % columnNum === 0, [columnNum, gridItemIndex]);
60
- const rowIndex = (0, _react().useMemo)(() => Math.floor(gridItemIndex / columnNum), [columnNum, gridItemIndex]);
61
- const lastRowIndex = (0, _react().useMemo)(() => Math.floor((count - 1) / columnNum), [columnNum, count]);
62
- const contentWrapperStyle = (0, _react().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, {
63
- paddingHorizontal: tokens.spacing.paddingHorizontal,
64
- paddingVertical: tokens.spacing.paddingVertical,
65
- backgroundColor: tokens.colors.background
66
- }, 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]);
67
- const hasText = (0, _utils.isRenderable)(text);
68
- const resolvedIconColor = (0, _react().useMemo)(() => iconColorProp ?? iconColor ?? tokens.colors.text, [iconColor, iconColorProp, tokens.colors.text]);
69
- const innerContent = (0, _react().useMemo)(() => {
70
- if (children) return children;
71
- let iconElement = null;
58
+ } = ctx;
59
+ const wp = `${100 / cn}%`;
60
+ const ilc = (gridItemIndex + 1) % cn === 0;
61
+ const ri = Math.floor(gridItemIndex / cn);
62
+ const lri = Math.floor((count - 1) / cn);
63
+ 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, {
64
+ paddingHorizontal: t.spacing.paddingHorizontal,
65
+ paddingVertical: t.spacing.paddingVertical,
66
+ backgroundColor: t.colors.background
67
+ }, contentStyle];
68
+ const ht = (0, _utils.isRenderable)(text);
69
+ const ric = icp ?? ic ?? t.colors.text;
70
+ const icn = (0, _react().useMemo)(() => {
71
+ if (children) return (0, _utils.isText)(children) ? (0, _utils.renderTextOrNode)(children, [t.layout.text, {
72
+ color: t.colors.text,
73
+ fontSize: t.typography.fontSize,
74
+ lineHeight: t.typography.lineHeight,
75
+ fontFamily: t.typography.fontFamily,
76
+ fontWeight: t.typography.fontWeight
77
+ }, textStyle]) : children;
78
+ let ie = null;
72
79
  if (icon || badge || dot) {
73
80
  const {
74
- style: badgeWrapperStyle,
75
- ...badgeRest
81
+ style: bws,
82
+ ...br
76
83
  } = badge ?? {};
77
- const marginKey = direction === 'vertical' ? reverse ? 'marginTop' : 'marginBottom' : reverse ? 'marginLeft' : 'marginRight';
78
- const iconWrapperStyle = [tokens.layout.iconWrapper, hasText && {
79
- [marginKey]: tokens.spacing.iconGap
84
+ const mk = d === 'vertical' ? r ? 'marginTop' : 'marginBottom' : r ? 'marginLeft' : 'marginRight';
85
+ const iws = [t.layout.iconWrapper, ht && {
86
+ [mk]: t.spacing.iconGap
80
87
  }];
81
- const iconNode = (0, _utils.isFunction)(icon) ? icon(iconSize, resolvedIconColor) : icon;
82
- const content = /*#__PURE__*/_react().default.createElement(_reactNative().View, {
83
- style: iconWrapperStyle
84
- }, iconNode);
85
- iconElement = badge || dot ? /*#__PURE__*/_react().default.createElement(_badge.default, _extends({
88
+ const ino = (0, _utils.isFunction)(icon) ? icon(is, ric) : icon;
89
+ const cnt = /*#__PURE__*/_react().default.createElement(_reactNative().View, {
90
+ style: iws
91
+ }, ino);
92
+ ie = badge || dot ? /*#__PURE__*/_react().default.createElement(_badge.default, _extends({
86
93
  dot: dot
87
- }, badgeRest, {
88
- style: center ? [badgeWrapperStyle, {
94
+ }, br, {
95
+ style: c ? [bws, {
89
96
  alignSelf: 'center'
90
- }] : badgeWrapperStyle
91
- }), content) : content;
97
+ }] : bws
98
+ }), cnt) : cnt;
92
99
  }
93
- const textElement = hasText && ((0, _utils.isText)(text) ? /*#__PURE__*/_react().default.createElement(_reactNative().Text, {
94
- style: [tokens.layout.text, {
95
- color: tokens.colors.text,
96
- fontSize: tokens.typography.fontSize,
97
- lineHeight: tokens.typography.lineHeight,
98
- fontFamily: tokens.typography.fontFamily,
99
- fontWeight: tokens.typography.fontWeight
100
+ const te = ht && ((0, _utils.isText)(text) ? /*#__PURE__*/_react().default.createElement(_designSystem.Text, {
101
+ style: [t.layout.text, {
102
+ color: t.colors.text,
103
+ fontSize: t.typography.fontSize,
104
+ lineHeight: t.typography.lineHeight,
105
+ fontFamily: t.typography.fontFamily,
106
+ fontWeight: t.typography.fontWeight
100
107
  }, textStyle],
101
- numberOfLines: tokens.defaults.textNumberOfLines
108
+ numberOfLines: t.defaults.textNumberOfLines
102
109
  }, text) : text);
103
- return /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, iconElement, textElement);
104
- }, [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]);
105
- const rightBorder = (0, _react().useMemo)(() => border && !gutter && !isLastColumn ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
106
- style: [tokens.layout.itemBorderRight, (0, _utils.createHairlineView)({
110
+ return /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, ie, te);
111
+ }, [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]);
112
+ const rb = b && !g && !ilc ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
113
+ style: [t.layout.itemBorderRight, (0, _utils.createHairlineView)({
107
114
  position: 'right',
108
- color: tokens.colors.border,
115
+ color: t.colors.border,
109
116
  top: 0,
110
117
  bottom: 0,
111
118
  right: 0
112
119
  })]
113
- }) : null, [border, gutter, isLastColumn, tokens.colors.border, tokens.layout.itemBorderRight]);
114
- const bottomBorder = (0, _react().useMemo)(() => border && !gutter && rowIndex < lastRowIndex ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
115
- style: [tokens.layout.itemBorderBottom, (0, _utils.createHairlineView)({
120
+ }) : null;
121
+ const bb = b && !g && ri < lri ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
122
+ style: [t.layout.itemBorderBottom, (0, _utils.createHairlineView)({
116
123
  position: 'bottom',
117
- color: tokens.colors.border,
124
+ color: t.colors.border,
118
125
  left: 0,
119
126
  right: 0,
120
127
  bottom: 0
121
128
  })]
122
- }) : null, [border, gutter, lastRowIndex, rowIndex, tokens.colors.border, tokens.layout.itemBorderBottom]);
123
- const content = (0, _react().useMemo)(() => /*#__PURE__*/_react().default.createElement(_reactNative().View, {
124
- style: contentWrapperStyle
125
- }, innerContent, rightBorder, bottomBorder), [bottomBorder, contentWrapperStyle, innerContent, rightBorder]);
126
- const baseItemStyle = (0, _react().useMemo)(() => ({
127
- width: _reactNative().Platform.OS === 'web' ? undefined : widthPercent,
129
+ }) : null;
130
+ const cnt = /*#__PURE__*/_react().default.createElement(_reactNative().View, {
131
+ style: cws
132
+ }, icn, rb, bb);
133
+ const bis = {
134
+ width: _reactNative().Platform.OS === 'web' ? undefined : wp,
128
135
  flexGrow: 0,
129
136
  flexShrink: 0,
130
- paddingRight: _reactNative().Platform.OS === 'web' ? undefined : gutter ? gutter : undefined,
131
- marginTop: _reactNative().Platform.OS === 'web' ? undefined : gutter && rowIndex > 0 ? gutter : undefined
132
- }), [gutter, rowIndex, widthPercent]);
133
- const isInteractive = clickable || (0, _utils.isFunction)(onPress);
134
- if (isInteractive) {
135
- return /*#__PURE__*/_react().default.createElement(_reactNative().Pressable, _extends({
136
- style: pressableState => [baseItemStyle, typeof style === 'function' ? style(pressableState) : style, {
137
- opacity: pressableState.pressed ? tokens.defaults.pressedOpacity : 1
138
- }],
139
- android_ripple: {
140
- color: tokens.colors.active
141
- },
142
- onPress: onPress
143
- }, rest), content);
144
- }
137
+ paddingRight: _reactNative().Platform.OS === 'web' ? undefined : g ? g : undefined,
138
+ marginTop: _reactNative().Platform.OS === 'web' ? undefined : g && ri > 0 ? g : undefined
139
+ };
140
+ const ii = cl || (0, _utils.isFunction)(onPress);
141
+ if (ii) return /*#__PURE__*/_react().default.createElement(_reactNative().Pressable, _extends({
142
+ accessibilityRole: "button",
143
+ style: ps => [bis, typeof style === 'function' ? style(ps) : style, {
144
+ opacity: ps.pressed ? t.defaults.pressedOpacity : 1
145
+ }],
146
+ android_ripple: {
147
+ color: t.colors.active
148
+ },
149
+ onPress: onPress
150
+ }, rest), cnt);
145
151
  return /*#__PURE__*/_react().default.createElement(_reactNative().View, _extends({
146
- style: [baseItemStyle, typeof style === 'function' ? style({
152
+ style: [bis, typeof style === 'function' ? style({
147
153
  pressed: false
148
154
  }) : style]
149
- }, rest), content);
155
+ }, rest), cnt);
150
156
  };
151
- exports.GridItem = GridItem;
157
+ const GridItem = exports.GridItem = /*#__PURE__*/_react().default.memo(GridItemImpl);
152
158
  GridItem.displayName = 'GridItem';
@@ -26,6 +26,8 @@ function _reactNativeSvg() {
26
26
  return data;
27
27
  }
28
28
  var _utils = require("../../utils");
29
+ var _validate = require("../../utils/validate");
30
+ var _useLocale = require("../config-provider/useLocale");
29
31
  var _tokens = require("./tokens");
30
32
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
31
33
  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); }
@@ -55,11 +57,7 @@ const splitImageStyle = style => {
55
57
  for (const key of Object.keys(flattenedRecord)) {
56
58
  const value = flattenedRecord[key];
57
59
  if (value === undefined) continue;
58
- if (isLayoutStyleKey(key)) {
59
- container[key] = value;
60
- } else {
61
- image[key] = value;
62
- }
60
+ if (isLayoutStyleKey(key)) container[key] = value;else image[key] = value;
63
61
  }
64
62
  return {
65
63
  container: Object.keys(container).length ? container : undefined,
@@ -75,23 +73,23 @@ const PRESERVE_ASPECT_RATIO_MAP = {
75
73
  center: 'xMidYMid meet'
76
74
  };
77
75
  const resolvePreserveAspectRatio = fit => PRESERVE_ASPECT_RATIO_MAP[fit] || 'xMidYMid slice';
76
+ const WEB_IMAGE_STYLE = _reactNative().Platform.OS === 'web' ? {
77
+ height: 'revert-layer',
78
+ width: 'revert-layer'
79
+ } : undefined;
78
80
  const resolveSourceUri = source => {
79
81
  if (!source) return undefined;
80
82
  if (typeof source === 'number') return undefined;
81
83
  if (Array.isArray(source)) {
82
84
  for (const item of source) {
83
- if (item && typeof item === 'object' && 'uri' in item && typeof item.uri === 'string') {
84
- return item.uri;
85
- }
85
+ if (item && typeof item === 'object' && 'uri' in item && typeof item.uri === 'string') return item.uri;
86
86
  }
87
87
  return undefined;
88
88
  }
89
- if (typeof source === 'object' && 'uri' in source && typeof source.uri === 'string') {
90
- return source.uri;
91
- }
89
+ if (typeof source === 'object' && 'uri' in source && typeof source.uri === 'string') return source.uri;
92
90
  return undefined;
93
91
  };
94
- const Image = /*#__PURE__*/_react().default.forwardRef((props, ref) => {
92
+ const ImageImpl = (props, ref) => {
95
93
  const {
96
94
  src,
97
95
  source,
@@ -99,15 +97,15 @@ const Image = /*#__PURE__*/_react().default.forwardRef((props, ref) => {
99
97
  height,
100
98
  radius,
101
99
  round,
102
- fit: fitProp,
103
- showLoading: showLoadingProp,
104
- showError: showErrorProp,
105
- loadingText: loadingTextProp,
100
+ fit: fitP,
101
+ showLoading: showLoadP,
102
+ showError: showErrP,
103
+ loadingText: loadTxtP,
106
104
  loadingIcon,
107
105
  errorIcon,
108
- iconSize: iconSizeProp,
106
+ iconSize: iconSzP,
109
107
  loadingSize,
110
- errorText: errorTextProp,
108
+ errorText: errTxtP,
111
109
  fallback,
112
110
  onPress,
113
111
  alt,
@@ -121,15 +119,16 @@ const Image = /*#__PURE__*/_react().default.forwardRef((props, ref) => {
121
119
  onError,
122
120
  ...rest
123
121
  } = props;
122
+ const locale = (0, _useLocale.useLocale)();
124
123
  const tokens = (0, _tokens.useImageTokens)(tokensOverride);
125
- const fit = fitProp ?? tokens.defaults.fit;
126
- const showLoading = showLoadingProp ?? tokens.defaults.showLoading;
127
- const showError = showErrorProp ?? tokens.defaults.showError;
128
- const loadingText = loadingTextProp !== undefined ? loadingTextProp : tokens.defaults.loadingText;
129
- const errorText = errorTextProp !== undefined ? errorTextProp : tokens.defaults.errorText;
124
+ const fit = fitP ?? tokens.defaults.fit;
125
+ const showLoading = showLoadP ?? tokens.defaults.showLoading;
126
+ const showError = showErrP ?? tokens.defaults.showError;
127
+ const loadingText = loadTxtP !== undefined ? loadTxtP : locale?.vanImage?.loading ?? tokens.defaults.loadingText;
128
+ const errorText = errTxtP !== undefined ? errTxtP : locale?.vanImage?.error ?? tokens.defaults.errorText;
130
129
  const {
131
130
  container: containerLayoutStyle,
132
- image: imageStyleWithoutLayout
131
+ image: imageStyleWithLayout
133
132
  } = (0, _react().useMemo)(() => splitImageStyle(style), [style]);
134
133
  const actualSource = (0, _react().useMemo)(() => source ? source : src ? {
135
134
  uri: src
@@ -137,65 +136,66 @@ const Image = /*#__PURE__*/_react().default.forwardRef((props, ref) => {
137
136
  const sourceKey = (0, _react().useMemo)(() => {
138
137
  if (source) {
139
138
  if (typeof source === 'number') return `res:${source}`;
140
- const uri = resolveSourceUri(source);
141
- if (uri) return `uri:${uri}`;
139
+ const u = resolveSourceUri(source);
140
+ if (u) return `uri:${u}`;
142
141
  return 'source:unknown';
143
142
  }
143
+ ;
144
144
  if (src) return `src:${src}`;
145
145
  return 'none';
146
146
  }, [source, src]);
147
- const resolvedAccessibilityLabel = alt ?? accessibilityLabel ?? ariaLabel;
148
- const [status, setStatus] = (0, _react().useState)(() => actualSource ? 'loading' : 'idle');
147
+ const accLabel = alt ?? accessibilityLabel ?? ariaLabel;
148
+ const [state, setState] = (0, _react().useState)(() => actualSource ? 'loading' : 'idle');
149
149
  (0, _react().useEffect)(() => {
150
- setStatus(actualSource ? 'loading' : 'idle');
150
+ setState(actualSource ? 'loading' : 'idle');
151
151
  }, [sourceKey]);
152
+ const onLoadRef = (0, _react().useRef)(onLoad);
153
+ onLoadRef.current = onLoad;
154
+ const onErrorRef = (0, _react().useRef)(onError);
155
+ onErrorRef.current = onError;
152
156
  const handleLoad = (0, _react().useCallback)(event => {
153
- setStatus('loaded');
154
- onLoad?.(event);
155
- }, [onLoad]);
157
+ setState('loaded');
158
+ onLoadRef.current?.(event);
159
+ }, []);
156
160
  const handleError = (0, _react().useCallback)(event => {
157
- setStatus('error');
158
- onError?.(event);
159
- }, [onError]);
161
+ setState('error');
162
+ onErrorRef.current?.(event);
163
+ }, []);
160
164
  const handleSvgLoad = (0, _react().useCallback)(() => {
161
165
  handleLoad({
162
166
  nativeEvent: {}
163
167
  });
164
168
  }, [handleLoad]);
165
- const handleSvgError = (0, _react().useCallback)(error => {
169
+ const handleSvgError = (0, _react().useCallback)(err => {
166
170
  handleError({
167
171
  nativeEvent: {
168
- error
172
+ error: err
169
173
  }
170
174
  });
171
175
  }, [handleError]);
172
176
  const uri = (0, _react().useMemo)(() => resolveSourceUri(actualSource), [actualSource]);
173
- const normalizedUri = (0, _react().useMemo)(() => (0, _utils.isString)(uri) ? uri.toLowerCase() : undefined, [uri]);
174
- const isSvg = (0, _react().useMemo)(() => !!normalizedUri && (normalizedUri.endsWith('.svg') || normalizedUri.includes('.svg?') || normalizedUri.includes('/svg?')), [normalizedUri]);
175
- const resolvedLoadingSize = (0, _react().useMemo)(() => (0, _utils.isNumber)(loadingSize) ? loadingSize : tokens.defaults.loadingIndicatorBaseSize, [loadingSize, tokens.defaults.loadingIndicatorBaseSize]);
176
- const resolvedErrorIconSize = (0, _react().useMemo)(() => iconSizeProp ?? tokens.defaults.iconSize, [iconSizeProp, tokens.defaults.iconSize]);
177
- const containerRole = onPress ? 'button' : undefined;
177
+ const normalizedUri = (0, _utils.isString)(uri) ? uri.toLowerCase() : undefined;
178
+ const isSvg = !!normalizedUri && (normalizedUri.endsWith('.svg') || normalizedUri.includes('.svg?') || normalizedUri.includes('/svg?'));
179
+ const rLoadSz = (0, _utils.isNumber)(loadingSize) ? loadingSize : tokens.defaults.loadingIndicatorBaseSize;
180
+ const rErrIconSz = iconSzP ?? tokens.defaults.iconSize;
181
+ const clickableRole = onPress ? 'button' : undefined;
178
182
  const pressableProps = onPress ? {
179
183
  onPress
180
184
  } : null;
181
185
  const renderLabel = (node, color, marginTop) => {
182
- if (node == null || node === false) return null;
183
- if ((0, _utils.isText)(node)) {
184
- return /*#__PURE__*/_react().default.createElement(_reactNative().Text, {
185
- style: [tokens.layout.label, {
186
- color
187
- }, marginTop ? {
188
- marginTop
189
- } : undefined]
190
- }, node);
191
- }
192
- return marginTop ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
186
+ if (!(0, _validate.isRenderable)(node)) return null;
187
+ const textNode = (0, _utils.renderTextOrNode)(node, [tokens.layout.label, {
188
+ color: color
189
+ }, marginTop ? {
190
+ marginTop: marginTop
191
+ } : undefined].filter(Boolean));
192
+ return marginTop && !(0, _validate.isText)(node) ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
193
193
  style: {
194
- marginTop
194
+ marginTop: marginTop
195
195
  }
196
- }, node) : node;
196
+ }, textNode) : textNode;
197
197
  };
198
- const containerStyles = (0, _react().useMemo)(() => [tokens.layout.container, {
198
+ const computedContainerStyle = (0, _react().useMemo)(() => [tokens.layout.container, {
199
199
  width: width,
200
200
  height: height,
201
201
  backgroundColor: tokens.colors.background
@@ -204,34 +204,30 @@ const Image = /*#__PURE__*/_react().default.forwardRef((props, ref) => {
204
204
  } : (0, _utils.isNumber)(radius) ? {
205
205
  borderRadius: radius
206
206
  } : undefined, containerStyle, containerLayoutStyle], [containerLayoutStyle, containerStyle, height, radius, round, tokens.colors.background, tokens.defaults.roundRadius, tokens.layout.container, width]);
207
- const imageAccessibilityLabel = !onPress ? resolvedAccessibilityLabel : undefined;
208
- const webImageStyle = _reactNative().Platform.OS === 'web' ? {
209
- height: 'revert-layer',
210
- width: 'revert-layer'
211
- } : undefined;
207
+ const imgAccLabel = !onPress ? accLabel : undefined;
212
208
  const imageNode = actualSource ? isSvg && _reactNative().Platform.OS !== 'web' && uri ? /*#__PURE__*/_react().default.createElement(_reactNativeSvg().SvgUri, _extends({
213
209
  width: "100%",
214
210
  height: "100%",
215
211
  uri: uri,
216
212
  preserveAspectRatio: resolvePreserveAspectRatio(fit),
217
213
  accessible: !onPress,
218
- accessibilityLabel: imageAccessibilityLabel
214
+ accessibilityLabel: imgAccLabel
219
215
  }, rest, {
220
- style: [tokens.layout.absoluteFill, imageStyleWithoutLayout],
216
+ style: [tokens.layout.absoluteFill, imageStyleWithLayout],
221
217
  onLoad: handleSvgLoad,
222
218
  onError: handleSvgError
223
219
  })) : /*#__PURE__*/_react().default.createElement(_reactNative().Image, _extends({
224
220
  ref: ref,
225
221
  accessible: !onPress,
226
- accessibilityLabel: imageAccessibilityLabel
222
+ accessibilityLabel: imgAccLabel
227
223
  }, rest, {
228
224
  source: actualSource,
229
- style: [tokens.layout.absoluteFill, imageStyleWithoutLayout, webImageStyle],
225
+ style: [tokens.layout.absoluteFill, imageStyleWithLayout, WEB_IMAGE_STYLE],
230
226
  resizeMode: resolveFitMode(fit),
231
227
  onLoad: handleLoad,
232
228
  onError: handleError
233
229
  })) : null;
234
- const content = /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, status === 'loading' && showLoading ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
230
+ const content = /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, state === 'loading' && showLoading && /*#__PURE__*/_react().default.createElement(_reactNative().View, {
235
231
  style: tokens.layout.overlay,
236
232
  pointerEvents: "none",
237
233
  testID: "rv-image-loading"
@@ -240,27 +236,28 @@ const Image = /*#__PURE__*/_react().default.forwardRef((props, ref) => {
240
236
  size: (0, _utils.isString)(loadingSize) ? loadingSize : 'small',
241
237
  style: {
242
238
  transform: [{
243
- scale: resolvedLoadingSize / tokens.defaults.loadingIndicatorBaseSize
239
+ scale: rLoadSz / tokens.defaults.loadingIndicatorBaseSize
244
240
  }]
245
241
  }
246
- }), renderLabel(loadingText, tokens.colors.text, tokens.defaults.loadingLabelMarginTop)) : null, imageNode, status === 'error' && showError ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
242
+ }), renderLabel(loadingText, tokens.colors.text, tokens.defaults.loadingLabelMarginTop)), imageNode, state === 'error' && showError && /*#__PURE__*/_react().default.createElement(_reactNative().View, {
247
243
  style: tokens.layout.overlay,
248
244
  pointerEvents: "none",
249
245
  testID: "rv-image-error"
250
- }, errorIcon ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
246
+ }, errorIcon && /*#__PURE__*/_react().default.createElement(_reactNative().View, {
251
247
  style: [tokens.layout.iconContainer, {
252
- width: resolvedErrorIconSize,
253
- height: resolvedErrorIconSize
248
+ width: rErrIconSz,
249
+ height: rErrIconSz
254
250
  }]
255
- }, errorIcon) : null, fallback !== undefined && fallback !== null && fallback !== false ? renderLabel(fallback, tokens.colors.error) : renderLabel(errorText, tokens.colors.error)) : null, children);
251
+ }, errorIcon), (0, _validate.isRenderable)(fallback) ? renderLabel(fallback, tokens.colors.error) : renderLabel(errorText, tokens.colors.error)), children);
256
252
  return pressableProps ? /*#__PURE__*/_react().default.createElement(_reactNative().Pressable, _extends({}, pressableProps, {
257
- accessibilityRole: containerRole,
258
- accessibilityLabel: resolvedAccessibilityLabel,
259
- style: containerStyles
253
+ accessibilityRole: clickableRole,
254
+ accessibilityLabel: accLabel,
255
+ style: computedContainerStyle
260
256
  }), content) : /*#__PURE__*/_react().default.createElement(_reactNative().View, {
261
- accessibilityLabel: resolvedAccessibilityLabel,
262
- style: containerStyles
257
+ accessibilityLabel: accLabel,
258
+ style: computedContainerStyle
263
259
  }, content);
264
- });
265
- Image.displayName = 'Image';
260
+ };
261
+ const ImageForwardRef = /*#__PURE__*/_react().default.forwardRef(ImageImpl);
262
+ const Image = /*#__PURE__*/_react().default.memo(ImageForwardRef);
266
263
  var _default = exports.default = Image;
@@ -10,15 +10,16 @@ const createTokens = foundations => {
10
10
  palette,
11
11
  spacing,
12
12
  fontSize,
13
- radii
13
+ radii,
14
+ typography
14
15
  } = foundations;
15
16
  return {
16
17
  defaults: {
17
18
  fit: 'cover',
18
19
  showLoading: true,
19
20
  showError: true,
20
- loadingText: '加载中…',
21
- errorText: '加载失败',
21
+ loadingText: 'Loading...',
22
+ errorText: 'Failed to load',
22
23
  iconSize: 20,
23
24
  loadingIndicatorBaseSize: 20,
24
25
  loadingLabelMarginTop: spacing.xs,
@@ -40,6 +41,7 @@ const createTokens = foundations => {
40
41
  justifyContent: 'center'
41
42
  },
42
43
  label: {
44
+ fontFamily: typography.fontFamily,
43
45
  fontSize: fontSize.xs
44
46
  },
45
47
  iconContainer: {