react-native-system-ui 0.0.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/README.md +53 -30
  2. package/dist/cjs/components/action-sheet/ActionSheet.js +97 -105
  3. package/dist/cjs/components/action-sheet/tokens.js +16 -27
  4. package/dist/cjs/components/area/Area.js +54 -67
  5. package/dist/cjs/components/area/tokens.js +6 -3
  6. package/dist/cjs/components/avatar/Avatar.js +25 -23
  7. package/dist/cjs/components/badge/Badge.js +31 -31
  8. package/dist/cjs/components/badge/tokens.js +6 -8
  9. package/dist/cjs/components/button/Button.js +115 -151
  10. package/dist/cjs/components/button/ButtonGroup.js +8 -42
  11. package/dist/cjs/components/button/tokens.js +1 -8
  12. package/dist/cjs/components/calendar/Calendar.js +212 -223
  13. package/dist/cjs/components/calendar/tokens.js +3 -3
  14. package/dist/cjs/components/cascader/Cascader.js +177 -180
  15. package/dist/cjs/components/cascader/tokens.js +2 -2
  16. package/dist/cjs/components/cascader/useCascaderExtend.js +25 -29
  17. package/dist/cjs/components/cell/Cell.js +70 -83
  18. package/dist/cjs/components/cell/CellGroup.js +16 -29
  19. package/dist/cjs/components/checkbox/Checkbox.js +139 -132
  20. package/dist/cjs/components/checkbox/CheckboxGroup.js +4 -35
  21. package/dist/cjs/components/checkbox/tokens.js +7 -10
  22. package/dist/cjs/components/circle/Circle.js +25 -24
  23. package/dist/cjs/components/collapse/Collapse.js +75 -91
  24. package/dist/cjs/components/config-provider/ConfigProvider.js +16 -3
  25. package/dist/cjs/components/config-provider/DirectionContext.js +15 -0
  26. package/dist/cjs/components/config-provider/index.js +7 -0
  27. package/dist/cjs/components/config-provider/locale/en-US.js +32 -0
  28. package/dist/cjs/components/config-provider/locale/zh-CN.js +32 -0
  29. package/dist/cjs/components/config-provider/useDirection.js +16 -0
  30. package/dist/cjs/components/count-down/CountDown.js +20 -15
  31. package/dist/cjs/components/datetime-picker/DatetimePicker.js +61 -84
  32. package/dist/cjs/components/datetime-picker/tokens.js +14 -3
  33. package/dist/cjs/components/dialog/Dialog.js +153 -121
  34. package/dist/cjs/components/dialog/imperative.js +17 -30
  35. package/dist/cjs/components/divider/Divider.js +26 -28
  36. package/dist/cjs/components/empty/Empty.js +35 -39
  37. package/dist/cjs/components/error-boundary/ErrorBoundary.js +73 -0
  38. package/dist/cjs/components/error-boundary/index.js +19 -0
  39. package/dist/cjs/components/field/Field.js +109 -106
  40. package/dist/cjs/components/flex/Flex.js +18 -18
  41. package/dist/cjs/components/flex/FlexItem.js +26 -27
  42. package/dist/cjs/components/form/Form.js +142 -161
  43. package/dist/cjs/components/form/FormItem.js +69 -97
  44. package/dist/cjs/components/form/FormList.js +49 -37
  45. package/dist/cjs/components/form/tokens.js +6 -3
  46. package/dist/cjs/components/form/utils.js +15 -34
  47. package/dist/cjs/components/grid/Grid.js +30 -29
  48. package/dist/cjs/components/grid/GridItem.js +84 -85
  49. package/dist/cjs/components/image/Image.js +55 -59
  50. package/dist/cjs/components/image/tokens.js +2 -2
  51. package/dist/cjs/components/image-preview/ImagePreview.js +124 -112
  52. package/dist/cjs/components/image-preview/imperative.js +4 -13
  53. package/dist/cjs/components/index.js +13 -0
  54. package/dist/cjs/components/input/Input.js +30 -22
  55. package/dist/cjs/components/loading/Loading.js +14 -15
  56. package/dist/cjs/components/nav-bar/NavBar.js +68 -83
  57. package/dist/cjs/components/nav-bar/tokens.js +1 -9
  58. package/dist/cjs/components/notice-bar/NoticeBar.js +74 -77
  59. package/dist/cjs/components/notify/Notify.js +88 -84
  60. package/dist/cjs/components/notify/imperative.js +20 -43
  61. package/dist/cjs/components/notify/tokens.js +1 -11
  62. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +187 -209
  63. package/dist/cjs/components/overlay/Overlay.js +37 -52
  64. package/dist/cjs/components/overlay/tokens.js +5 -3
  65. package/dist/cjs/components/password-input/PasswordInput.js +98 -79
  66. package/dist/cjs/components/picker/Picker.js +440 -421
  67. package/dist/cjs/components/picker/tokens.js +1 -1
  68. package/dist/cjs/components/popup/Popup.js +263 -293
  69. package/dist/cjs/components/portal/Portal.js +12 -29
  70. package/dist/cjs/components/portal/PortalHost.js +151 -234
  71. package/dist/cjs/components/progress/Progress.js +51 -48
  72. package/dist/cjs/components/radio/Radio.js +45 -42
  73. package/dist/cjs/components/radio/RadioGroup.js +8 -40
  74. package/dist/cjs/components/radio/tokens.js +7 -10
  75. package/dist/cjs/components/safe-area-view/SafeAreaView.js +22 -26
  76. package/dist/cjs/components/search/Search.js +51 -43
  77. package/dist/cjs/components/selector/Selector.js +14 -13
  78. package/dist/cjs/components/share-sheet/ShareSheet.js +160 -161
  79. package/dist/cjs/components/sidebar/Sidebar.js +39 -45
  80. package/dist/cjs/components/sidebar/SidebarContext.js +1 -2
  81. package/dist/cjs/components/sidebar/SidebarItem.js +13 -16
  82. package/dist/cjs/components/sidebar/tokens.js +1 -3
  83. package/dist/cjs/components/skeleton/Skeleton.js +30 -37
  84. package/dist/cjs/components/skeleton/tokens.js +1 -2
  85. package/dist/cjs/components/slider/Slider.js +156 -135
  86. package/dist/cjs/components/space/Space.js +46 -69
  87. package/dist/cjs/components/stepper/Stepper.js +177 -155
  88. package/dist/cjs/components/swiper/Swiper.js +251 -253
  89. package/dist/cjs/components/swiper/SwiperPagIndicator.js +25 -27
  90. package/dist/cjs/components/swiper/tokens.js +10 -3
  91. package/dist/cjs/components/switch/Switch.js +13 -15
  92. package/dist/cjs/components/tabbar/Tabbar.js +35 -27
  93. package/dist/cjs/components/tabbar/TabbarContext.js +1 -2
  94. package/dist/cjs/components/tabbar/TabbarItem.js +65 -68
  95. package/dist/cjs/components/tabs/Tabs.js +286 -313
  96. package/dist/cjs/components/tag/Tag.js +46 -37
  97. package/dist/cjs/components/toast/Toast.js +90 -90
  98. package/dist/cjs/components/toast/imperative.js +16 -41
  99. package/dist/cjs/components/typography/Typography.js +3 -5
  100. package/dist/cjs/components/water-mark/WaterMark.js +31 -29
  101. package/dist/cjs/design-system/ThemeProvider.js +5 -11
  102. package/dist/cjs/design-system/createComponentTokensHook.js +11 -13
  103. package/dist/cjs/design-system/presets.js +2 -3
  104. package/dist/cjs/design-system/tokens.js +2 -11
  105. package/dist/cjs/hooks/animation/index.js +25 -0
  106. package/dist/cjs/hooks/animation/useAnimatedTransition.js +72 -0
  107. package/dist/cjs/hooks/animation/useReducedMotion.js +75 -0
  108. package/dist/cjs/hooks/aria/useAriaListBox.js +8 -16
  109. package/dist/cjs/hooks/aria/useAriaOverlay.js +3 -3
  110. package/dist/cjs/hooks/aria/useAriaPress.js +8 -21
  111. package/dist/cjs/hooks/aria/useAriaToggle.js +3 -3
  112. package/dist/cjs/hooks/gesture/useGestureScroll.js +60 -61
  113. package/dist/cjs/hooks/index.js +12 -0
  114. package/dist/cjs/hooks/overlay/OverlayStackStore.js +49 -69
  115. package/dist/cjs/hooks/overlay/useOverlayStack.js +13 -19
  116. package/dist/cjs/hooks/useControllableValue.js +10 -21
  117. package/dist/cjs/hooks/useCountDown.js +14 -22
  118. package/dist/cjs/hooks/useHairline.js +17 -29
  119. package/dist/cjs/hooks/useSafeAreaPadding.js +1 -4
  120. package/dist/cjs/index.js +67 -1
  121. package/dist/cjs/platform/animation.js +10 -2
  122. package/dist/cjs/platform/measure.js +18 -36
  123. package/dist/cjs/utils/color.js +21 -35
  124. package/dist/cjs/utils/compare.js +7 -12
  125. package/dist/cjs/utils/createPlatformShadow.js +28 -39
  126. package/dist/cjs/utils/date.js +20 -50
  127. package/dist/cjs/utils/deepMerge.js +16 -26
  128. package/dist/cjs/utils/hairline.js +74 -71
  129. package/dist/cjs/utils/index.js +22 -0
  130. package/dist/cjs/utils/number.js +21 -29
  131. package/dist/cjs/utils/render.js +27 -0
  132. package/dist/cjs/utils/rtl.js +25 -0
  133. package/dist/cjs/utils/string.js +8 -25
  134. package/dist/es/components/action-sheet/ActionSheet.js +99 -107
  135. package/dist/es/components/action-sheet/tokens.js +16 -27
  136. package/dist/es/components/area/Area.js +55 -68
  137. package/dist/es/components/area/tokens.js +6 -3
  138. package/dist/es/components/avatar/Avatar.js +25 -23
  139. package/dist/es/components/avatar/index.js +1 -2
  140. package/dist/es/components/badge/Badge.js +33 -33
  141. package/dist/es/components/badge/tokens.js +6 -8
  142. package/dist/es/components/button/Button.js +116 -152
  143. package/dist/es/components/button/ButtonGroup.js +9 -43
  144. package/dist/es/components/button/tokens.js +2 -3
  145. package/dist/es/components/calendar/Calendar.js +214 -225
  146. package/dist/es/components/calendar/tokens.js +3 -3
  147. package/dist/es/components/cascader/Cascader.js +180 -183
  148. package/dist/es/components/cascader/tokens.js +2 -2
  149. package/dist/es/components/cascader/useCascaderExtend.js +25 -29
  150. package/dist/es/components/cell/Cell.js +71 -84
  151. package/dist/es/components/cell/CellGroup.js +16 -28
  152. package/dist/es/components/checkbox/Checkbox.js +140 -133
  153. package/dist/es/components/checkbox/CheckboxGroup.js +5 -36
  154. package/dist/es/components/checkbox/tokens.js +7 -10
  155. package/dist/es/components/circle/Circle.js +25 -23
  156. package/dist/es/components/collapse/Collapse.js +77 -92
  157. package/dist/es/components/config-provider/ConfigProvider.js +10 -3
  158. package/dist/es/components/config-provider/DirectionContext.js +2 -0
  159. package/dist/es/components/config-provider/index.js +1 -0
  160. package/dist/es/components/config-provider/locale/en-US.js +32 -0
  161. package/dist/es/components/config-provider/locale/zh-CN.js +32 -0
  162. package/dist/es/components/config-provider/useDirection.js +3 -0
  163. package/dist/es/components/count-down/CountDown.js +23 -18
  164. package/dist/es/components/datetime-picker/DatetimePicker.js +61 -84
  165. package/dist/es/components/datetime-picker/tokens.js +14 -3
  166. package/dist/es/components/dialog/Dialog.js +154 -121
  167. package/dist/es/components/dialog/imperative.js +17 -30
  168. package/dist/es/components/divider/Divider.js +28 -29
  169. package/dist/es/components/empty/Empty.js +36 -39
  170. package/dist/es/components/error-boundary/ErrorBoundary.js +61 -0
  171. package/dist/es/components/error-boundary/index.js +1 -0
  172. package/dist/es/components/field/Field.js +109 -106
  173. package/dist/es/components/flex/Flex.js +18 -17
  174. package/dist/es/components/flex/FlexItem.js +27 -27
  175. package/dist/es/components/form/Form.js +143 -162
  176. package/dist/es/components/form/FormItem.js +68 -95
  177. package/dist/es/components/form/FormList.js +49 -37
  178. package/dist/es/components/form/tokens.js +6 -3
  179. package/dist/es/components/form/utils.js +15 -34
  180. package/dist/es/components/grid/Grid.js +30 -28
  181. package/dist/es/components/grid/GridItem.js +84 -84
  182. package/dist/es/components/image/Image.js +58 -62
  183. package/dist/es/components/image/tokens.js +2 -2
  184. package/dist/es/components/image-preview/ImagePreview.js +124 -112
  185. package/dist/es/components/image-preview/imperative.js +4 -13
  186. package/dist/es/components/index.js +3 -1
  187. package/dist/es/components/input/Input.js +31 -23
  188. package/dist/es/components/loading/Loading.js +16 -16
  189. package/dist/es/components/nav-bar/NavBar.js +68 -83
  190. package/dist/es/components/nav-bar/tokens.js +1 -3
  191. package/dist/es/components/notice-bar/NoticeBar.js +74 -76
  192. package/dist/es/components/notify/Notify.js +92 -87
  193. package/dist/es/components/notify/imperative.js +21 -44
  194. package/dist/es/components/notify/tokens.js +1 -5
  195. package/dist/es/components/number-keyboard/NumberKeyboard.js +187 -209
  196. package/dist/es/components/overlay/Overlay.js +36 -51
  197. package/dist/es/components/overlay/tokens.js +5 -3
  198. package/dist/es/components/password-input/PasswordInput.js +98 -79
  199. package/dist/es/components/picker/Picker.js +440 -421
  200. package/dist/es/components/picker/tokens.js +1 -1
  201. package/dist/es/components/popup/Popup.js +263 -292
  202. package/dist/es/components/portal/Portal.js +13 -29
  203. package/dist/es/components/portal/PortalHost.js +152 -234
  204. package/dist/es/components/progress/Progress.js +51 -48
  205. package/dist/es/components/radio/Radio.js +47 -44
  206. package/dist/es/components/radio/RadioGroup.js +10 -41
  207. package/dist/es/components/radio/tokens.js +7 -10
  208. package/dist/es/components/safe-area-view/SafeAreaView.js +22 -25
  209. package/dist/es/components/search/Search.js +52 -44
  210. package/dist/es/components/selector/Selector.js +14 -13
  211. package/dist/es/components/share-sheet/ShareSheet.js +162 -163
  212. package/dist/es/components/sidebar/Sidebar.js +41 -47
  213. package/dist/es/components/sidebar/SidebarContext.js +1 -2
  214. package/dist/es/components/sidebar/SidebarItem.js +13 -15
  215. package/dist/es/components/sidebar/tokens.js +1 -3
  216. package/dist/es/components/skeleton/Skeleton.js +30 -37
  217. package/dist/es/components/skeleton/tokens.js +1 -2
  218. package/dist/es/components/slider/Slider.js +156 -134
  219. package/dist/es/components/space/Space.js +48 -71
  220. package/dist/es/components/stepper/Stepper.js +178 -156
  221. package/dist/es/components/swiper/Swiper.js +252 -254
  222. package/dist/es/components/swiper/SwiperPagIndicator.js +25 -27
  223. package/dist/es/components/swiper/tokens.js +10 -3
  224. package/dist/es/components/switch/Switch.js +13 -15
  225. package/dist/es/components/tabbar/Tabbar.js +36 -28
  226. package/dist/es/components/tabbar/TabbarContext.js +1 -2
  227. package/dist/es/components/tabbar/TabbarItem.js +66 -69
  228. package/dist/es/components/tabs/Tabs.js +286 -313
  229. package/dist/es/components/tag/Tag.js +49 -39
  230. package/dist/es/components/toast/Toast.js +93 -91
  231. package/dist/es/components/toast/imperative.js +16 -41
  232. package/dist/es/components/typography/Typography.js +3 -5
  233. package/dist/es/components/water-mark/WaterMark.js +32 -30
  234. package/dist/es/design-system/ThemeProvider.js +5 -11
  235. package/dist/es/design-system/createComponentTokensHook.js +11 -13
  236. package/dist/es/design-system/presets.js +2 -3
  237. package/dist/es/design-system/tokens.js +1 -9
  238. package/dist/es/hooks/animation/index.js +2 -0
  239. package/dist/es/hooks/animation/useAnimatedTransition.js +53 -0
  240. package/dist/es/hooks/animation/useReducedMotion.js +54 -0
  241. package/dist/es/hooks/aria/useAriaListBox.js +8 -16
  242. package/dist/es/hooks/aria/useAriaOverlay.js +3 -3
  243. package/dist/es/hooks/aria/useAriaPress.js +8 -21
  244. package/dist/es/hooks/aria/useAriaToggle.js +3 -3
  245. package/dist/es/hooks/gesture/useGestureScroll.js +60 -61
  246. package/dist/es/hooks/index.js +1 -0
  247. package/dist/es/hooks/overlay/OverlayStackStore.js +49 -69
  248. package/dist/es/hooks/overlay/useOverlayStack.js +13 -19
  249. package/dist/es/hooks/useControllableValue.js +10 -21
  250. package/dist/es/hooks/useCountDown.js +14 -22
  251. package/dist/es/hooks/useHairline.js +16 -28
  252. package/dist/es/hooks/useSafeAreaPadding.js +1 -4
  253. package/dist/es/index.js +8 -1
  254. package/dist/es/platform/animation.js +9 -1
  255. package/dist/es/platform/measure.js +18 -36
  256. package/dist/es/utils/color.js +21 -35
  257. package/dist/es/utils/compare.js +7 -12
  258. package/dist/es/utils/createPlatformShadow.js +28 -39
  259. package/dist/es/utils/date.js +20 -50
  260. package/dist/es/utils/deepMerge.js +16 -26
  261. package/dist/es/utils/hairline.js +73 -65
  262. package/dist/es/utils/index.js +2 -0
  263. package/dist/es/utils/number.js +21 -29
  264. package/dist/es/utils/render.js +7 -0
  265. package/dist/es/utils/rtl.js +17 -0
  266. package/dist/es/utils/string.js +8 -25
  267. package/dist/types/components/action-sheet/ActionSheet.d.ts +1 -1
  268. package/dist/types/components/area/Area.d.ts +1 -1
  269. package/dist/types/components/area/tokens.d.ts +4 -0
  270. package/dist/types/components/avatar/Avatar.d.ts +1 -1
  271. package/dist/types/components/avatar/index.d.ts +1 -2
  272. package/dist/types/components/badge/Badge.d.ts +1 -1
  273. package/dist/types/components/button/Button.d.ts +1 -1
  274. package/dist/types/components/button/index.d.ts +1 -1
  275. package/dist/types/components/calendar/Calendar.d.ts +1 -1
  276. package/dist/types/components/cascader/Cascader.d.ts +1 -1
  277. package/dist/types/components/cell/Cell.d.ts +1 -1
  278. package/dist/types/components/cell/CellGroup.d.ts +1 -1
  279. package/dist/types/components/cell/index.d.ts +2 -2
  280. package/dist/types/components/checkbox/Checkbox.d.ts +1 -1
  281. package/dist/types/components/circle/Circle.d.ts +1 -1
  282. package/dist/types/components/collapse/Collapse.d.ts +1 -2
  283. package/dist/types/components/config-provider/DirectionContext.d.ts +3 -0
  284. package/dist/types/components/config-provider/index.d.ts +2 -1
  285. package/dist/types/components/config-provider/locale/en-US.d.ts +32 -0
  286. package/dist/types/components/config-provider/locale/zh-CN.d.ts +32 -0
  287. package/dist/types/components/config-provider/useDirection.d.ts +1 -0
  288. package/dist/types/components/count-down/CountDown.d.ts +1 -1
  289. package/dist/types/components/datetime-picker/DatetimePicker.d.ts +1 -1
  290. package/dist/types/components/datetime-picker/tokens.d.ts +12 -0
  291. package/dist/types/components/dialog/Dialog.d.ts +1 -1
  292. package/dist/types/components/divider/Divider.d.ts +1 -1
  293. package/dist/types/components/empty/Empty.d.ts +1 -1
  294. package/dist/types/components/error-boundary/ErrorBoundary.d.ts +6 -0
  295. package/dist/types/components/error-boundary/index.d.ts +2 -0
  296. package/dist/types/components/field/Field.d.ts +1 -1
  297. package/dist/types/components/flex/Flex.d.ts +1 -1
  298. package/dist/types/components/flex/FlexItem.d.ts +1 -1
  299. package/dist/types/components/flex/index.d.ts +2 -2
  300. package/dist/types/components/form/Form.d.ts +1 -1
  301. package/dist/types/components/form/FormItem.d.ts +2 -1
  302. package/dist/types/components/form/index.d.ts +2 -2
  303. package/dist/types/components/form/tokens.d.ts +4 -0
  304. package/dist/types/components/grid/Grid.d.ts +1 -1
  305. package/dist/types/components/grid/GridItem.d.ts +1 -1
  306. package/dist/types/components/grid/index.d.ts +2 -2
  307. package/dist/types/components/image/Image.d.ts +1 -1
  308. package/dist/types/components/image-preview/ImagePreview.d.ts +1 -1
  309. package/dist/types/components/index.d.ts +4 -1
  310. package/dist/types/components/input/Input.d.ts +3 -3
  311. package/dist/types/components/loading/Loading.d.ts +1 -1
  312. package/dist/types/components/nav-bar/NavBar.d.ts +1 -1
  313. package/dist/types/components/notice-bar/NoticeBar.d.ts +1 -1
  314. package/dist/types/components/notify/Notify.d.ts +2 -2
  315. package/dist/types/components/notify/index.d.ts +1 -1
  316. package/dist/types/components/overlay/Overlay.d.ts +1 -5
  317. package/dist/types/components/overlay/tokens.d.ts +3 -0
  318. package/dist/types/components/password-input/PasswordInput.d.ts +1 -1
  319. package/dist/types/components/picker/Picker.d.ts +5 -5
  320. package/dist/types/components/popup/Popup.d.ts +3 -42
  321. package/dist/types/components/portal/Portal.d.ts +9 -6
  322. package/dist/types/components/portal/PortalHost.d.ts +1 -1
  323. package/dist/types/components/radio/RadioGroup.d.ts +1 -1
  324. package/dist/types/components/safe-area-view/SafeAreaView.d.ts +1 -1
  325. package/dist/types/components/search/Search.d.ts +1 -1
  326. package/dist/types/components/share-sheet/ShareSheet.d.ts +1 -1
  327. package/dist/types/components/sidebar/Sidebar.d.ts +1 -1
  328. package/dist/types/components/sidebar/SidebarContext.d.ts +1 -1
  329. package/dist/types/components/sidebar/SidebarItem.d.ts +1 -1
  330. package/dist/types/components/sidebar/index.d.ts +2 -2
  331. package/dist/types/components/skeleton/Skeleton.d.ts +1 -1
  332. package/dist/types/components/slider/Slider.d.ts +1 -1
  333. package/dist/types/components/stepper/Stepper.d.ts +1 -1
  334. package/dist/types/components/swiper/Swiper.d.ts +1 -1
  335. package/dist/types/components/swiper/index.d.ts +1 -1
  336. package/dist/types/components/swiper/tokens.d.ts +8 -0
  337. package/dist/types/components/tabbar/Tabbar.d.ts +2 -2
  338. package/dist/types/components/tabbar/TabbarContext.d.ts +1 -1
  339. package/dist/types/components/tabbar/TabbarItem.d.ts +2 -2
  340. package/dist/types/components/tabs/Tabs.d.ts +1 -1
  341. package/dist/types/components/tabs/index.d.ts +1 -1
  342. package/dist/types/components/tag/Tag.d.ts +1 -1
  343. package/dist/types/components/toast/Toast.d.ts +2 -2
  344. package/dist/types/components/toast/index.d.ts +1 -1
  345. package/dist/types/components/water-mark/WaterMark.d.ts +1 -1
  346. package/dist/types/design-system/tokens.d.ts +0 -1
  347. package/dist/types/hooks/animation/index.d.ts +3 -0
  348. package/dist/types/hooks/animation/useAnimatedTransition.d.ts +13 -0
  349. package/dist/types/hooks/animation/useReducedMotion.d.ts +3 -0
  350. package/dist/types/hooks/aria/useAriaOverlay.d.ts +1 -1
  351. package/dist/types/hooks/gesture/useGestureScroll.d.ts +11 -10
  352. package/dist/types/hooks/index.d.ts +1 -0
  353. package/dist/types/hooks/overlay/OverlayStackStore.d.ts +8 -8
  354. package/dist/types/hooks/useHairline.d.ts +1 -1
  355. package/dist/types/index.d.ts +5 -0
  356. package/dist/types/platform/animation.d.ts +8 -0
  357. package/dist/types/platform/measure.d.ts +1 -1
  358. package/dist/types/utils/compare.d.ts +1 -1
  359. package/dist/types/utils/createPlatformShadow.d.ts +2 -2
  360. package/dist/types/utils/date.d.ts +2 -2
  361. package/dist/types/utils/hairline.d.ts +5 -10
  362. package/dist/types/utils/index.d.ts +2 -0
  363. package/dist/types/utils/number.d.ts +2 -2
  364. package/dist/types/utils/render.d.ts +5 -0
  365. package/dist/types/utils/rtl.d.ts +5 -0
  366. package/package.json +10 -3
@@ -1,10 +1,12 @@
1
1
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
2
  import React from 'react';
3
- import { Pressable, Text, View } from 'react-native';
3
+ import { Pressable, View } from 'react-native';
4
4
  import { Close } from 'react-native-system-icon';
5
- import { isFunction, isText } from '../../utils';
5
+ import { createHairlineView, isFunction, renderTextOrNode } from '../../utils';
6
+ import { isRenderable } from '../../utils/validate';
7
+ import { useDirection } from '../config-provider/useDirection';
6
8
  import { useTagTokens } from './tokens';
7
- export const Tag = props => {
9
+ const TagImpl = props => {
8
10
  const {
9
11
  tokensOverride,
10
12
  children,
@@ -25,45 +27,46 @@ export const Tag = props => {
25
27
  ...rest
26
28
  } = props;
27
29
  const tokens = useTagTokens(tokensOverride);
30
+ const dir = useDirection();
28
31
  const type = typeProp ?? tokens.defaults.type;
29
32
  const size = sizeProp ?? tokens.defaults.size;
30
33
  const plain = plainProp ?? tokens.defaults.plain;
31
34
  const round = roundProp ?? tokens.defaults.round;
32
35
  const mark = markProp ?? tokens.defaults.mark;
33
36
  const show = showProp ?? tokens.defaults.show;
34
- if (!show) {
35
- return null;
36
- }
37
+ if (!show) return null;
37
38
  const tone = tokens.colors.toneMap[type] ?? tokens.colors.toneMap.default;
38
39
  const sizeTokens = tokens.sizing.sizes[size];
39
40
  const backgroundColor = plain ? tokens.colors.plainBackground : color ?? tone.background;
40
41
  const resolvedTextColor = textColor ?? (plain ? color ?? tone.background : tone.text);
41
42
  const borderColor = plain ? color ?? tone.background : 'transparent';
42
- const borderWidth = plain ? tokens.borders.width : 0;
43
43
  const borderRadius = round ? tokens.radii.round : sizeTokens.borderRadius;
44
- const containerStyle = [tokens.layout.container, {
45
- backgroundColor,
46
- paddingHorizontal: sizeTokens.paddingHorizontal,
47
- paddingVertical: sizeTokens.paddingVertical,
48
- borderRadius,
49
- borderWidth,
50
- borderColor
51
- }, mark ? {
44
+ const markRadii = mark ? dir === 'rtl' ? {
45
+ borderTopRightRadius: tokens.radii.markLeading,
46
+ borderBottomRightRadius: tokens.radii.markLeading,
47
+ borderTopLeftRadius: tokens.radii.round,
48
+ borderBottomLeftRadius: tokens.radii.round
49
+ } : {
52
50
  borderTopLeftRadius: tokens.radii.markLeading,
53
51
  borderBottomLeftRadius: tokens.radii.markLeading,
54
52
  borderTopRightRadius: tokens.radii.round,
55
53
  borderBottomRightRadius: tokens.radii.round
56
- } : null, style];
57
- const label = children == null || children === false ? null : isText(children) ? /*#__PURE__*/React.createElement(Text, {
58
- style: [{
59
- color: resolvedTextColor,
60
- fontSize: sizeTokens.fontSize,
61
- lineHeight: sizeTokens.lineHeight,
62
- fontFamily: tokens.typography.fontFamily,
63
- fontWeight: tokens.typography.fontWeight
64
- }, textStyle]
65
- }, children) : children;
66
- const close = !closeable ? null : /*#__PURE__*/React.createElement(Pressable, {
54
+ } : null;
55
+ const resolvedRadius = mark ? tokens.radii.round : borderRadius;
56
+ const containerStyle = [tokens.layout.container, {
57
+ backgroundColor,
58
+ paddingHorizontal: sizeTokens.paddingHorizontal,
59
+ paddingVertical: sizeTokens.paddingVertical,
60
+ borderRadius
61
+ }, markRadii, style];
62
+ const label = !isRenderable(children) ? null : renderTextOrNode(children, [{
63
+ color: resolvedTextColor,
64
+ fontSize: sizeTokens.fontSize,
65
+ lineHeight: sizeTokens.lineHeight,
66
+ fontFamily: tokens.typography.fontFamily,
67
+ fontWeight: tokens.typography.fontWeight
68
+ }, textStyle].filter(Boolean));
69
+ const close = closeable && /*#__PURE__*/React.createElement(Pressable, {
67
70
  accessibilityRole: "button",
68
71
  hitSlop: tokens.spacing.closeHitSlop,
69
72
  style: [tokens.layout.close, {
@@ -77,19 +80,26 @@ export const Tag = props => {
77
80
  color: resolvedTextColor,
78
81
  size: tokens.sizing.closeIconSize
79
82
  }));
80
- const content = /*#__PURE__*/React.createElement(React.Fragment, null, label, close);
81
- if (onPress) {
82
- return /*#__PURE__*/React.createElement(Pressable, _extends({
83
- accessibilityRole: "button",
84
- onPress: onPress,
85
- style: ({
86
- pressed
87
- }) => [containerStyle, pressed && {
88
- opacity: tokens.defaults.pressedOpacity
89
- }]
90
- }, rest), content);
91
- }
83
+ const hairlineOverlay = plain ? /*#__PURE__*/React.createElement(View, {
84
+ style: createHairlineView({
85
+ position: 'all',
86
+ color: borderColor,
87
+ borderRadius: resolvedRadius
88
+ })
89
+ }) : null;
90
+ const content = /*#__PURE__*/React.createElement(React.Fragment, null, label, close, hairlineOverlay);
91
+ if (onPress) return /*#__PURE__*/React.createElement(Pressable, _extends({
92
+ accessibilityRole: "button",
93
+ onPress: onPress,
94
+ style: ({
95
+ pressed
96
+ }) => [containerStyle, pressed && {
97
+ opacity: tokens.defaults.pressedOpacity
98
+ }]
99
+ }, rest), content);
92
100
  return /*#__PURE__*/React.createElement(View, _extends({
93
101
  style: containerStyle
94
102
  }, rest), content);
95
- };
103
+ };
104
+ export const Tag = /*#__PURE__*/React.memo(TagImpl);
105
+ Tag.displayName = 'Tag';
@@ -1,15 +1,19 @@
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, useRef, useState } from 'react';
3
- import { AccessibilityInfo, Animated, Easing, Pressable, StyleSheet, Text, View, useWindowDimensions, Platform } from 'react-native';
2
+ import React, { useEffect, useMemo, useRef, useState } from 'react';
3
+ import { AccessibilityInfo, Animated, Easing, Pressable, StyleSheet, View, useWindowDimensions } from 'react-native';
4
4
  import Portal from '../portal/Portal';
5
5
  import { SafeAreaView } from '../safe-area-view';
6
6
  import { useAriaPress, useOverlayStack } from '../../hooks';
7
7
  import Loading from '../loading';
8
8
  import { Checked, Close } from 'react-native-system-icon';
9
- import { isFiniteNumber, isText } from '../../utils/validate';
9
+ import { isFiniteNumber, isText, isRenderable } from '../../utils/validate';
10
+ import { renderTextOrNode } from '../../utils';
10
11
  import { nativeDriverEnabled } from '../../platform';
12
+ import { useReducedMotion } from '../../hooks/animation';
13
+ import { useLocale } from '../config-provider/useLocale';
11
14
  import { useToastTokens } from './tokens';
12
- export const ToastContent = props => {
15
+ const RT = () => true;
16
+ const ToastContentImpl = props => {
13
17
  const {
14
18
  visible,
15
19
  message,
@@ -34,25 +38,35 @@ export const ToastContent = props => {
34
38
  onOpened,
35
39
  onClosed
36
40
  } = props;
41
+ const locale = useLocale();
37
42
  const tokens = useToastTokens(tokensOverride);
43
+ const reducedMotion = useReducedMotion();
38
44
  const {
39
45
  colors
40
46
  } = tokens;
41
47
  const {
42
48
  height: windowHeight
43
49
  } = useWindowDimensions();
44
- const durationMs = isFiniteNumber(duration) ? Math.max(0, duration) : 0;
50
+ const resolvedDuration = isFiniteNumber(duration) ? Math.max(0, duration) : 0;
45
51
  const [mounted, setMounted] = useState(visible);
46
- const animated = useRef(new Animated.Value(visible ? 1 : 0)).current;
52
+ const animatedValue = useRef(new Animated.Value(visible ? 1 : 0)).current;
47
53
  const animationRef = useRef(null);
48
54
  const animationIdRef = useRef(0);
55
+ const onCloseRef = useRef(onClose);
56
+ onCloseRef.current = onClose;
57
+ const onOpenRef = useRef(onOpen);
58
+ onOpenRef.current = onOpen;
59
+ const onOpenedRef = useRef(onOpened);
60
+ onOpenedRef.current = onOpened;
61
+ const onClosedRef = useRef(onClosed);
62
+ onClosedRef.current = onClosed;
49
63
  const {
50
64
  zIndex: stackZIndex
51
65
  } = useOverlayStack({
52
66
  visible: mounted,
53
67
  type: 'toast'
54
68
  });
55
- const prevVisibleRef = useRef(visible);
69
+ const previousVisibleRef = useRef(visible);
56
70
  const closingRef = useRef(false);
57
71
  const positionOffset = windowHeight > 0 ? Math.round(windowHeight * tokens.positionOffsetRatio) : tokens.positionOffsetMin;
58
72
  const needsSafeAreaTop = safeAreaInsetTopProp !== undefined ? safeAreaInsetTopProp : position === 'top';
@@ -70,21 +84,21 @@ export const ToastContent = props => {
70
84
  animationIdRef.current += 1;
71
85
  const animationId = animationIdRef.current;
72
86
  animationRef.current?.stop();
73
- const durationValue = tokens.animationDuration;
87
+ const d = reducedMotion ? 0 : tokens.animationDuration;
74
88
  if (visible) {
75
89
  setMounted(true);
76
- animationRef.current = Animated.timing(animated, {
90
+ animationRef.current = Animated.timing(animatedValue, {
77
91
  toValue: 1,
78
- duration: durationValue,
92
+ duration: d,
79
93
  easing: Easing.out(Easing.cubic),
80
94
  useNativeDriver: nativeDriverEnabled,
81
95
  isInteraction: false
82
96
  });
83
97
  animationRef.current.start();
84
98
  } else {
85
- animationRef.current = Animated.timing(animated, {
99
+ animationRef.current = Animated.timing(animatedValue, {
86
100
  toValue: 0,
87
- duration: durationValue,
101
+ duration: d,
88
102
  easing: Easing.out(Easing.cubic),
89
103
  useNativeDriver: nativeDriverEnabled,
90
104
  isInteraction: false
@@ -96,63 +110,55 @@ export const ToastContent = props => {
96
110
  setMounted(false);
97
111
  });
98
112
  }
99
- }, [animated, tokens.animationDuration, visible]);
113
+ }, [animatedValue, reducedMotion, tokens.animationDuration, visible]);
100
114
  useEffect(() => () => {
101
115
  animationRef.current?.stop();
102
116
  }, []);
103
117
  useEffect(() => {
104
- let timer = null;
105
- if (visible) {
106
- if (durationMs > 0) {
107
- timer = setTimeout(() => {
108
- onClose?.();
109
- }, durationMs);
110
- }
111
- }
112
- return () => {
113
- if (timer) clearTimeout(timer);
114
- };
115
- }, [durationMs, onClose, visible]);
118
+ if (!visible || resolvedDuration <= 0) return;
119
+ const timeout = setTimeout(() => {
120
+ onCloseRef.current?.();
121
+ }, resolvedDuration);
122
+ return () => clearTimeout(timeout);
123
+ }, [resolvedDuration, visible]);
116
124
  useEffect(() => {
117
- if (!visible) return;
118
- if (!isText(message)) return;
125
+ if (!visible || !isText(message)) return;
119
126
  const text = String(message);
120
- if (!text) return;
121
- AccessibilityInfo.announceForAccessibility?.(text);
127
+ if (text) AccessibilityInfo.announceForAccessibility?.(text);
122
128
  }, [message, visible]);
129
+ const resolvedAnimDuration = reducedMotion ? 0 : tokens.animationDuration;
123
130
  useEffect(() => {
124
- let openedTimer = null;
131
+ let openedTimeout = null;
125
132
  if (visible) {
126
133
  closingRef.current = false;
127
- if (!prevVisibleRef.current) {
128
- onOpen?.();
129
- if (onOpened) {
130
- openedTimer = setTimeout(onOpened, tokens.animationDuration);
134
+ if (!previousVisibleRef.current) {
135
+ onOpenRef.current?.();
136
+ if (onOpenedRef.current) {
137
+ const callback = onOpenedRef.current;
138
+ openedTimeout = setTimeout(callback, resolvedAnimDuration);
131
139
  }
132
140
  }
133
- } else if (prevVisibleRef.current) {
141
+ } else if (previousVisibleRef.current) {
134
142
  closingRef.current = true;
135
143
  }
136
- prevVisibleRef.current = visible;
144
+ previousVisibleRef.current = visible;
137
145
  return () => {
138
- if (openedTimer) clearTimeout(openedTimer);
146
+ if (openedTimeout) clearTimeout(openedTimeout);
139
147
  };
140
- }, [onOpen, onOpened, tokens.animationDuration, visible]);
148
+ }, [resolvedAnimDuration, visible]);
141
149
  useEffect(() => {
142
150
  if (!mounted && closingRef.current) {
143
151
  closingRef.current = false;
144
- onClosed?.();
152
+ onClosedRef.current?.();
145
153
  }
146
- }, [mounted, onClosed]);
147
- const handleClose = useCallback(() => {
148
- onClose?.();
149
- }, [onClose]);
150
- const toastPress = useAriaPress({
154
+ }, [mounted]);
155
+ const handleClose = useRef(() => onCloseRef.current?.()).current;
156
+ const pressProps = useAriaPress({
151
157
  disabled: !closeOnClick,
152
158
  onPress: handleClose,
153
159
  extraProps: {
154
160
  accessibilityRole: closeOnClick ? 'button' : 'alert',
155
- accessibilityHint: closeOnClick ? '双击关闭提示' : undefined,
161
+ accessibilityHint: closeOnClick ? locale?.vanToast?.closeHint ?? 'Double-tap to dismiss' : undefined,
156
162
  accessibilityLiveRegion: 'assertive'
157
163
  }
158
164
  });
@@ -181,8 +187,16 @@ export const ToastContent = props => {
181
187
  return null;
182
188
  }
183
189
  }, [colors.text, icon, iconSize, loadingIndicator, tokens.iconSize, type]);
184
- const isTextToast = type === 'info' && !iconNode;
185
- const boxStyle = useMemo(() => isTextToast ? {
190
+ const iconWrapperStyle = useMemo(() => ({
191
+ marginBottom: tokens.gap
192
+ }), [tokens.gap]);
193
+ const messageStyle = useMemo(() => ({
194
+ color: colors.text,
195
+ fontSize: tokens.fontSize,
196
+ lineHeight: tokens.lineHeight
197
+ }), [colors.text, tokens.fontSize, tokens.lineHeight]);
198
+ const isTextOnly = type === 'info' && !iconNode;
199
+ const baseStyle = useMemo(() => isTextOnly ? {
186
200
  minWidth: tokens.textMinWidth,
187
201
  minHeight: 0,
188
202
  paddingVertical: tokens.textPaddingVertical,
@@ -191,84 +205,72 @@ export const ToastContent = props => {
191
205
  minWidth: tokens.defaultWidth,
192
206
  minHeight: tokens.defaultMinHeight,
193
207
  padding: tokens.defaultPadding
194
- }, [isTextToast, tokens.defaultMinHeight, tokens.defaultPadding, tokens.defaultWidth, tokens.textMinWidth, tokens.textPaddingHorizontal, tokens.textPaddingVertical]);
208
+ }, [isTextOnly, tokens.defaultMinHeight, tokens.defaultPadding, tokens.defaultWidth, tokens.textMinWidth, tokens.textPaddingHorizontal, tokens.textPaddingVertical]);
195
209
  const toastStyle = useMemo(() => ({
196
210
  borderRadius: tokens.radius,
197
- opacity: closeOnClick && toastPress.states.pressed ? tokens.pressedOpacity : animated,
211
+ opacity: closeOnClick && pressProps.states.pressed ? tokens.pressedOpacity : animatedValue,
198
212
  backgroundColor: tokens.colors.variants[type],
199
213
  maxWidth: tokens.maxWidth,
200
- ...boxStyle
201
- }), [animated, boxStyle, closeOnClick, toastPress.states.pressed, tokens.colors.variants, tokens.maxWidth, tokens.pressedOpacity, tokens.radius, type]);
214
+ ...baseStyle
215
+ }), [animatedValue, baseStyle, closeOnClick, pressProps.states.pressed, tokens.colors.variants, tokens.maxWidth, tokens.pressedOpacity, tokens.radius, type]);
202
216
  if (!mounted) return null;
203
- const hasMessage = message !== undefined && message !== null && message !== false && message !== '';
217
+ const hasMessage = isRenderable(message) && (typeof message !== 'string' || message !== '');
204
218
  return /*#__PURE__*/React.createElement(View, {
205
- style: [styles.backdrop, {
219
+ style: [S.b, {
206
220
  backgroundColor: tokens.colors.transparent
207
221
  }, positionStyle, stackZIndex ? {
208
222
  zIndex: stackZIndex
209
223
  } : undefined],
210
224
  pointerEvents: forbidClick || overlay || closeOnClick ? 'auto' : 'none'
211
- }, overlay || forbidClick ? /*#__PURE__*/React.createElement(Pressable, {
225
+ }, (overlay || forbidClick) && /*#__PURE__*/React.createElement(Pressable, {
212
226
  testID: "rv-toast-overlay",
213
- style: [styles.overlay, {
227
+ style: [S.o, {
214
228
  backgroundColor: tokens.colors.transparent
215
229
  }, overlay && {
216
230
  backgroundColor: colors.backdrop
217
231
  }, overlayStyle],
218
232
  pointerEvents: "auto",
219
233
  onPress: overlay && closeOnClickOverlay ? handleClose : undefined,
220
- onStartShouldSetResponder: () => true,
221
- onMoveShouldSetResponder: () => true
222
- }) : null, needsSafeAreaTop && /*#__PURE__*/React.createElement(SafeAreaView, {
234
+ onStartShouldSetResponder: RT,
235
+ onMoveShouldSetResponder: RT
236
+ }), needsSafeAreaTop && /*#__PURE__*/React.createElement(SafeAreaView, {
223
237
  edge: "top",
224
238
  pointerEvents: "none"
225
239
  }), /*#__PURE__*/React.createElement(Pressable, _extends({
226
240
  disabled: !closeOnClick
227
- }, toastPress.interactionProps), /*#__PURE__*/React.createElement(Animated.View, {
228
- style: [styles.toast, toastStyle, style]
229
- }, iconNode ? /*#__PURE__*/React.createElement(View, {
230
- style: {
231
- marginBottom: tokens.gap
232
- }
233
- }, iconNode) : null, hasMessage ? isText(message) ? /*#__PURE__*/React.createElement(Text, {
234
- style: [styles.message, {
235
- color: colors.text,
236
- fontSize: tokens.fontSize,
237
- lineHeight: tokens.lineHeight
238
- }, textStyle]
239
- }, message) : /*#__PURE__*/React.createElement(View, {
240
- style: {
241
- alignItems: 'center'
242
- }
243
- }, message) : null)), needsSafeAreaBottom && /*#__PURE__*/React.createElement(SafeAreaView, {
241
+ }, pressProps.interactionProps), /*#__PURE__*/React.createElement(Animated.View, {
242
+ renderToHardwareTextureAndroid: true,
243
+ shouldRasterizeIOS: true,
244
+ style: [S.t, toastStyle, style]
245
+ }, iconNode && /*#__PURE__*/React.createElement(View, {
246
+ style: iconWrapperStyle
247
+ }, iconNode), hasMessage && (isText(message) ? renderTextOrNode(message, [S.m, messageStyle, textStyle]) : /*#__PURE__*/React.createElement(View, {
248
+ style: S.mw
249
+ }, message)))), needsSafeAreaBottom && /*#__PURE__*/React.createElement(SafeAreaView, {
244
250
  edge: "bottom",
245
251
  pointerEvents: "none"
246
252
  }));
247
253
  };
248
- export const Toast = props => /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(ToastContent, props));
249
- const styles = StyleSheet.create({
250
- backdrop: {
254
+ export const ToastContent = /*#__PURE__*/React.memo(ToastContentImpl);
255
+ const ToastImpl = props => /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(ToastContent, props));
256
+ export const Toast = /*#__PURE__*/React.memo(ToastImpl);
257
+ const S = StyleSheet.create({
258
+ b: {
251
259
  flex: 1,
252
- alignItems: 'center',
253
- ...(Platform.OS === 'web' ? {
254
- position: 'fixed',
255
- top: 0,
256
- left: 0,
257
- right: 0,
258
- bottom: 0
259
- } : {})
260
+ alignItems: 'center'
260
261
  },
261
- overlay: {
262
+ o: {
262
263
  ...StyleSheet.absoluteFillObject
263
264
  },
264
- toast: {
265
+ t: {
265
266
  alignItems: 'center',
266
267
  justifyContent: 'center'
267
268
  },
268
- message: {
269
+ m: {
269
270
  textAlign: 'center'
271
+ },
272
+ mw: {
273
+ alignItems: 'center'
270
274
  }
271
275
  });
272
- ToastContent.displayName = 'ToastContent';
273
- Toast.displayName = 'Toast';
274
276
  export default Toast;
@@ -17,28 +17,18 @@ let currentOptions = {
17
17
  ...baseOptions
18
18
  };
19
19
  const typeDefaults = new Map();
20
- const parseOptions = input => {
21
- if (/*#__PURE__*/React.isValidElement(input) || isText(input)) {
22
- return {
23
- message: input
24
- };
25
- }
26
- return input ?? {};
27
- };
20
+ const parseOptions = input => /*#__PURE__*/React.isValidElement(input) || isText(input) ? {
21
+ message: input
22
+ } : input ?? {};
28
23
  const mergeOptions = (input, fallbackType) => {
29
24
  const type = input.type ?? fallbackType;
30
- const base = {
31
- ...currentOptions,
32
- ...typeDefaults.get(type)
33
- };
34
25
  const merged = {
35
- ...base,
26
+ ...currentOptions,
27
+ ...typeDefaults.get(type),
36
28
  ...input,
37
29
  type
38
30
  };
39
- if (merged.duration === undefined || merged.duration === null) {
40
- merged.duration = base.duration ?? 2000;
41
- }
31
+ if (merged.duration == null) merged.duration = currentOptions.duration ?? 2000;
42
32
  return merged;
43
33
  };
44
34
  const removeToast = key => {
@@ -48,12 +38,8 @@ const removeToast = key => {
48
38
  toastControllers.delete(key);
49
39
  };
50
40
  const closeToast = key => {
51
- const controller = toastControllers.get(key);
52
- if (controller) {
53
- controller.close();
54
- } else {
55
- removeToast(key);
56
- }
41
+ const c = toastControllers.get(key);
42
+ c ? c.close() : removeToast(key);
57
43
  };
58
44
  const ToastPortal = ({
59
45
  id,
@@ -84,9 +70,7 @@ const ToastPortal = ({
84
70
  };
85
71
  const showToast = (input, fallbackType = 'info') => {
86
72
  const opts = mergeOptions(parseOptions(input), fallbackType);
87
- if (!allowMultiple) {
88
- activeKeys.forEach(key => closeToast(key));
89
- }
73
+ if (!allowMultiple) activeKeys.forEach(key => closeToast(key));
90
74
  const key = Portal.add(null);
91
75
  toastOptions.set(key, opts);
92
76
  Portal.update(key, /*#__PURE__*/React.createElement(ToastPortal, {
@@ -97,17 +81,14 @@ const showToast = (input, fallbackType = 'info') => {
97
81
  const config = next => {
98
82
  const prev = toastOptions.get(key);
99
83
  if (!prev) return;
100
- const nextInput = isFunction(next) ? next(prev) : next;
101
- const parsed = parseOptions(nextInput);
84
+ const parsed = parseOptions(isFunction(next) ? next(prev) : next);
102
85
  const nextType = parsed.type ?? prev.type ?? fallbackType;
103
86
  const merged = {
104
87
  ...prev,
105
88
  ...parsed,
106
89
  type: nextType
107
90
  };
108
- if ('duration' in parsed && (parsed.duration === undefined || parsed.duration === null)) {
109
- merged.duration = typeDefaults.get(nextType)?.duration ?? currentOptions.duration ?? baseOptions.duration ?? 2000;
110
- }
91
+ if ('duration' in parsed && parsed.duration == null) merged.duration = typeDefaults.get(nextType)?.duration ?? currentOptions.duration ?? 2000;
111
92
  toastOptions.set(key, merged);
112
93
  Portal.update(key, /*#__PURE__*/React.createElement(ToastPortal, {
113
94
  id: key,
@@ -133,19 +114,13 @@ export const ToastImperative = {
133
114
  allowMultiple = value;
134
115
  },
135
116
  setDefaultOptions: (typeOrOptions, options) => {
136
- if (isString(typeOrOptions)) {
137
- typeDefaults.set(typeOrOptions, options ?? {});
138
- } else {
139
- currentOptions = {
140
- ...currentOptions,
141
- ...typeOrOptions
142
- };
143
- }
117
+ if (isString(typeOrOptions)) typeDefaults.set(typeOrOptions, options ?? {});else currentOptions = {
118
+ ...currentOptions,
119
+ ...typeOrOptions
120
+ };
144
121
  },
145
122
  resetDefaultOptions: type => {
146
- if (type) {
147
- typeDefaults.delete(type);
148
- } else {
123
+ if (type) typeDefaults.delete(type);else {
149
124
  currentOptions = {
150
125
  ...baseOptions
151
126
  };
@@ -93,11 +93,9 @@ const TypographyTextBaseInner = /*#__PURE__*/React.forwardRef((props, ref) => {
93
93
  ellipsizeMode: "tail",
94
94
  onTextLayout: hasActionText && ellipsisRows && !expanded && !isWeb ? handleTextLayout : undefined
95
95
  }, textProps), children);
96
- if (!shouldShowAction) {
97
- return center ? /*#__PURE__*/React.createElement(View, {
98
- style: tokens.layout.centerWrapper
99
- }, textNode) : textNode;
100
- }
96
+ if (!shouldShowAction) return center ? /*#__PURE__*/React.createElement(View, {
97
+ style: tokens.layout.centerWrapper
98
+ }, textNode) : textNode;
101
99
  const actionNode = /*#__PURE__*/React.createElement(View, {
102
100
  style: tokens.layout.actionRow
103
101
  }, textNode, /*#__PURE__*/React.createElement(Text, {