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,13 +1,14 @@
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, useMemo } from 'react';
3
- import { Animated, Easing, Platform, Pressable, Text, View } from 'react-native';
4
- import { isFunction, isText } from '../../utils';
5
- import { useAriaPress, useSafeAreaPadding } from '../../hooks';
2
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import { Animated, Easing, Platform, Pressable, View } from 'react-native';
4
+ import { isFunction, isText, renderTextOrNode } from '../../utils';
5
+ import { isRenderable } from '../../utils/validate';
6
+ import { useAriaPress, useSafeAreaPadding, useOverlayStack } from '../../hooks';
6
7
  import Portal from '../portal/Portal';
7
- import { useOverlayStack } from '../../hooks';
8
8
  import { nativeDriverEnabled } from '../../platform';
9
+ import { useReducedMotion } from '../../hooks/animation';
9
10
  import { useNotifyTokens } from './tokens';
10
- export const NotifyContent = props => {
11
+ const NotifyContentImpl = props => {
11
12
  const {
12
13
  visible,
13
14
  message,
@@ -29,7 +30,7 @@ export const NotifyContent = props => {
29
30
  onClosed
30
31
  } = props;
31
32
  const tokens = useNotifyTokens(tokensOverride);
32
- const paddingVertical = tokens.spacing.paddingVertical;
33
+ const reducedMotion = useReducedMotion();
33
34
  const safeAreaPadding = useSafeAreaPadding({
34
35
  top: 0,
35
36
  bottom: 0
@@ -39,30 +40,38 @@ export const NotifyContent = props => {
39
40
  const closeOnClick = closeOnClickProp ?? tokens.defaults.closeOnClick;
40
41
  const safeAreaInsetTop = props.safeAreaInsetTop ?? (position === 'top' ? tokens.defaults.safeAreaInsetTop : false);
41
42
  const safeAreaInsetBottom = props.safeAreaInsetBottom ?? (position === 'bottom' ? tokens.defaults.safeAreaInsetBottom : false);
42
- const safeTop = safeAreaInsetTop && position === 'top' ? safeAreaPadding.paddingTop : 0;
43
- const safeBottom = safeAreaInsetBottom && position === 'bottom' ? safeAreaPadding.paddingBottom : 0;
43
+ const safeAreaTopValue = safeAreaInsetTop && position === 'top' ? safeAreaPadding.paddingTop : 0;
44
+ const safeAreaBottomValue = safeAreaInsetBottom && position === 'bottom' ? safeAreaPadding.paddingBottom : 0;
44
45
  const offset = typeof offsetProp === 'number' && Number.isFinite(offsetProp) ? Math.max(0, offsetProp) : 0;
45
46
  const addOffset = (value, delta) => typeof value === 'string' ? `calc(${value} + ${delta}px)` : value + delta;
46
- const safeBottomInset = safeAreaInsetBottom && position === 'bottom' && typeof safeBottom === 'number' ? safeBottom + offset : offset;
47
- const webTopPadding = Platform.OS === 'web' && position === 'top' ? addOffset(safeTop, offset) : undefined;
48
- const webBottomPadding = Platform.OS === 'web' && safeAreaInsetBottom && position === 'bottom' ? addOffset(safeBottom, offset) : undefined;
47
+ const safeAreaBottomInset = safeAreaInsetBottom && position === 'bottom' && typeof safeAreaBottomValue === 'number' ? safeAreaBottomValue + offset : offset;
48
+ const webTopPadding = Platform.OS === 'web' && position === 'top' ? addOffset(safeAreaTopValue, offset) : undefined;
49
+ const webBottomPadding = Platform.OS === 'web' && safeAreaInsetBottom && position === 'bottom' ? addOffset(safeAreaBottomValue, offset) : undefined;
49
50
  const variant = tokens.colors.variants[type];
50
51
  const resolvedBackground = background ?? variant.background;
51
52
  const resolvedTextColor = color ?? variant.text;
52
53
  const resolvedDuration = durationProp ?? tokens.defaults.duration;
53
- const [barHeight, setBarHeight] = React.useState(0);
54
- const handleLayout = useCallback(event => {
55
- const height = event.nativeEvent.layout.height;
54
+ const onCloseRef = useRef(onClose);
55
+ onCloseRef.current = onClose;
56
+ const onOpenRef = useRef(onOpen);
57
+ onOpenRef.current = onOpen;
58
+ const onOpenedRef = useRef(onOpened);
59
+ onOpenedRef.current = onOpened;
60
+ const onClosedRef = useRef(onClosed);
61
+ onClosedRef.current = onClosed;
62
+ const onClickRef = useRef(onClick);
63
+ onClickRef.current = onClick;
64
+ const [barHeight, setBarHeight] = useState(0);
65
+ const handleLayout = useCallback(e => {
66
+ const height = e.nativeEvent.layout.height;
56
67
  if (!height) return;
57
68
  setBarHeight(prev => prev === height ? prev : height);
58
69
  }, []);
59
-
60
- // 关键:静态调用时 Notify 初次挂载的 visible=true,需要执行进入动画
61
70
  const canAnimate = barHeight > 0;
62
- const [mounted, setMounted] = React.useState(visible);
63
- const animated = React.useRef(new Animated.Value(0)).current;
64
- const animationRef = React.useRef(null);
65
- const animationIdRef = React.useRef(0);
71
+ const [mounted, setMounted] = useState(visible);
72
+ const animatedValue = useRef(new Animated.Value(0)).current;
73
+ const animationRef = useRef(null);
74
+ const animationIdRef = useRef(0);
66
75
  const {
67
76
  zIndex: stackZIndex
68
77
  } = useOverlayStack({
@@ -71,22 +80,22 @@ export const NotifyContent = props => {
71
80
  zIndex
72
81
  });
73
82
  const resolvedZIndex = stackZIndex ?? zIndex;
74
- const prevVisibleRef = React.useRef(visible);
75
- const closingRef = React.useRef(false);
76
- React.useEffect(() => {
83
+ const previousVisibleRef = useRef(visible);
84
+ const closingRef = useRef(false);
85
+ useEffect(() => {
77
86
  animationIdRef.current += 1;
78
87
  const animationId = animationIdRef.current;
79
88
  animationRef.current?.stop();
80
- const durationValue = tokens.defaults.animationDuration;
89
+ const d = reducedMotion ? 0 : tokens.defaults.animationDuration;
81
90
  if (visible) {
82
91
  setMounted(true);
83
92
  if (!canAnimate) {
84
- animated.setValue(0);
93
+ animatedValue.setValue(0);
85
94
  return;
86
95
  }
87
- animationRef.current = Animated.timing(animated, {
96
+ animationRef.current = Animated.timing(animatedValue, {
88
97
  toValue: 1,
89
- duration: durationValue,
98
+ duration: d,
90
99
  easing: Easing.out(Easing.cubic),
91
100
  useNativeDriver: nativeDriverEnabled,
92
101
  isInteraction: false
@@ -94,13 +103,13 @@ export const NotifyContent = props => {
94
103
  animationRef.current.start();
95
104
  } else {
96
105
  if (!canAnimate) {
97
- animated.setValue(0);
106
+ animatedValue.setValue(0);
98
107
  setMounted(false);
99
108
  return;
100
109
  }
101
- animationRef.current = Animated.timing(animated, {
110
+ animationRef.current = Animated.timing(animatedValue, {
102
111
  toValue: 0,
103
- duration: durationValue,
112
+ duration: d,
104
113
  easing: Easing.out(Easing.cubic),
105
114
  useNativeDriver: nativeDriverEnabled,
106
115
  isInteraction: false
@@ -112,51 +121,47 @@ export const NotifyContent = props => {
112
121
  setMounted(false);
113
122
  });
114
123
  }
115
- }, [animated, canAnimate, tokens.defaults.animationDuration, visible]);
116
- React.useEffect(() => () => {
124
+ }, [animatedValue, canAnimate, reducedMotion, tokens.defaults.animationDuration, visible]);
125
+ useEffect(() => () => {
117
126
  animationRef.current?.stop();
118
127
  }, []);
119
- React.useEffect(() => {
120
- let openedTimer = null;
128
+ const resolvedAnimDuration = reducedMotion ? 0 : tokens.defaults.animationDuration;
129
+ useEffect(() => {
121
130
  if (visible) {
122
131
  closingRef.current = false;
123
- if (!prevVisibleRef.current) {
124
- onOpen?.();
125
- if (onOpened) openedTimer = setTimeout(onOpened, tokens.defaults.animationDuration);
132
+ if (!previousVisibleRef.current) {
133
+ onOpenRef.current?.();
134
+ if (onOpenedRef.current) {
135
+ const cb = onOpenedRef.current;
136
+ const t = setTimeout(cb, resolvedAnimDuration);
137
+ previousVisibleRef.current = visible;
138
+ return () => clearTimeout(t);
139
+ }
126
140
  }
127
- } else if (prevVisibleRef.current) {
128
- closingRef.current = true;
129
- }
130
- prevVisibleRef.current = visible;
131
- return () => {
132
- if (openedTimer) clearTimeout(openedTimer);
133
- };
134
- }, [onOpen, onOpened, tokens.defaults.animationDuration, visible]);
135
- React.useEffect(() => {
141
+ } else if (previousVisibleRef.current) closingRef.current = true;
142
+ previousVisibleRef.current = visible;
143
+ }, [resolvedAnimDuration, visible]);
144
+ useEffect(() => {
136
145
  if (!mounted && closingRef.current) {
137
146
  closingRef.current = false;
138
- onClosed?.();
139
- }
140
- }, [mounted, onClosed]);
141
- React.useEffect(() => {
142
- let timer = null;
143
- if (visible && resolvedDuration > 0) {
144
- timer = setTimeout(() => {
145
- onClose?.();
146
- }, resolvedDuration);
147
+ onClosedRef.current?.();
147
148
  }
148
- return () => {
149
- if (timer) clearTimeout(timer);
150
- };
151
- }, [onClose, resolvedDuration, visible]);
149
+ }, [mounted]);
150
+ useEffect(() => {
151
+ if (!visible || resolvedDuration <= 0) return;
152
+ const timeout = setTimeout(() => {
153
+ onCloseRef.current?.();
154
+ }, resolvedDuration);
155
+ return () => clearTimeout(timeout);
156
+ }, [resolvedDuration, visible]);
152
157
  const contentHeight = barHeight > 0 ? barHeight : tokens.sizing.minHeight;
153
158
  const interactive = closeOnClick || isFunction(onClick);
154
159
  const handlePress = useCallback(() => {
155
- onClick?.();
156
- if (closeOnClick) onClose?.();
157
- }, [closeOnClick, onClick, onClose]);
160
+ onClickRef.current?.();
161
+ if (closeOnClick) onCloseRef.current?.();
162
+ }, [closeOnClick]);
158
163
  const accessibilityRole = interactive ? 'button' : 'alert';
159
- const press = useAriaPress({
164
+ const pressProps = useAriaPress({
160
165
  disabled: !interactive,
161
166
  onPress: handlePress,
162
167
  extraProps: {
@@ -164,17 +169,17 @@ export const NotifyContent = props => {
164
169
  accessibilityLiveRegion: 'assertive'
165
170
  }
166
171
  });
167
- const translateY = useMemo(() => position === 'bottom' ? animated.interpolate({
172
+ const translateY = useMemo(() => position === 'bottom' ? animatedValue.interpolate({
168
173
  inputRange: [0, 1],
169
174
  outputRange: [contentHeight, 0]
170
- }) : animated.interpolate({
175
+ }) : animatedValue.interpolate({
171
176
  inputRange: [0, 1],
172
177
  outputRange: [-contentHeight, 0]
173
- }), [animated, contentHeight, position]);
174
- const hasMessage = message !== undefined && message !== null && message !== false && message !== '';
175
- const bar = useMemo(() => /*#__PURE__*/React.createElement(View, {
178
+ }), [animatedValue, contentHeight, position]);
179
+ const hasMessage = isRenderable(message) && (typeof message !== 'string' || message !== '');
180
+ const barRender = useMemo(() => /*#__PURE__*/React.createElement(View, {
176
181
  style: [tokens.layout.container, position === 'top' ? {
177
- paddingTop: webTopPadding ?? addOffset(safeTop, offset)
182
+ paddingTop: webTopPadding ?? addOffset(safeAreaTopValue, offset)
178
183
  } : null, webBottomPadding !== undefined ? {
179
184
  paddingBottom: webBottomPadding
180
185
  } : null]
@@ -187,9 +192,11 @@ export const NotifyContent = props => {
187
192
  testID: "rv-notify-bar",
188
193
  accessibilityRole: !interactive ? accessibilityRole : undefined,
189
194
  accessibilityLiveRegion: !interactive ? 'assertive' : undefined,
195
+ renderToHardwareTextureAndroid: true,
196
+ shouldRasterizeIOS: true,
190
197
  onLayout: handleLayout,
191
198
  style: [tokens.layout.container, {
192
- opacity: animated,
199
+ opacity: animatedValue,
193
200
  transform: [{
194
201
  translateY
195
202
  }]
@@ -201,20 +208,18 @@ export const NotifyContent = props => {
201
208
  }, /*#__PURE__*/React.createElement(View, {
202
209
  style: [tokens.layout.content, {
203
210
  paddingHorizontal: tokens.spacing.paddingHorizontal,
204
- paddingVertical,
211
+ paddingVertical: tokens.spacing.paddingVertical,
205
212
  minHeight: tokens.sizing.minHeight
206
213
  }]
207
- }, hasMessage ? isText(message) ? /*#__PURE__*/React.createElement(Text, {
208
- style: [tokens.layout.text, {
209
- color: resolvedTextColor,
210
- fontSize: tokens.typography.fontSize,
211
- lineHeight: tokens.typography.lineHeight
212
- }, textStyle]
213
- }, message) : message : null)))), position === 'bottom' ? /*#__PURE__*/React.createElement(View, {
214
+ }, hasMessage && (isText(message) ? renderTextOrNode(message, [tokens.layout.text, {
215
+ color: resolvedTextColor,
216
+ fontSize: tokens.typography.fontSize,
217
+ lineHeight: tokens.typography.lineHeight
218
+ }, textStyle]) : message))))), position === 'bottom' && /*#__PURE__*/React.createElement(View, {
214
219
  style: {
215
- height: safeBottomInset
220
+ height: safeAreaBottomInset
216
221
  }
217
- }) : null), [accessibilityRole, animated, contentHeight, handleLayout, hasMessage, interactive, message, offset, paddingVertical, position, resolvedBackground, resolvedTextColor, safeBottomInset, safeTop, style, textStyle, tokens.layout.container, tokens.layout.content, tokens.layout.text, tokens.sizing.minHeight, tokens.spacing.paddingHorizontal, tokens.typography.fontSize, tokens.typography.lineHeight, translateY, webBottomPadding, webTopPadding]);
222
+ })), [accessibilityRole, animatedValue, contentHeight, handleLayout, hasMessage, interactive, message, offset, resolvedBackground, resolvedTextColor, safeAreaBottomInset, safeAreaTopValue, style, textStyle, tokens.layout.container, tokens.layout.content, tokens.layout.text, tokens.sizing.minHeight, tokens.spacing.paddingHorizontal, tokens.spacing.paddingVertical, tokens.typography.fontSize, tokens.typography.lineHeight, translateY, webBottomPadding, webTopPadding, position]);
218
223
  if (!mounted) return null;
219
224
  return /*#__PURE__*/React.createElement(View, {
220
225
  testID: "rv-notify",
@@ -223,14 +228,14 @@ export const NotifyContent = props => {
223
228
  bottom: 0
224
229
  } : {
225
230
  top: 0
226
- }, resolvedZIndex !== undefined && resolvedZIndex !== null ? {
231
+ }, resolvedZIndex != null ? {
227
232
  zIndex: resolvedZIndex
228
233
  } : null]
229
- }, interactive ? /*#__PURE__*/React.createElement(Pressable, _extends({}, press.interactionProps, {
234
+ }, interactive ? /*#__PURE__*/React.createElement(Pressable, _extends({}, pressProps.interactionProps, {
230
235
  disabled: !interactive
231
- }), bar) : bar);
236
+ }), barRender) : barRender);
232
237
  };
233
- export const Notify = props => /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(NotifyContent, props));
234
- NotifyContent.displayName = 'NotifyContent';
235
- Notify.displayName = 'Notify';
238
+ export const NotifyContent = /*#__PURE__*/React.memo(NotifyContentImpl);
239
+ const NotifyImpl = props => /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(NotifyContent, props));
240
+ export const Notify = /*#__PURE__*/React.memo(NotifyImpl);
236
241
  export default Notify;
@@ -1,5 +1,5 @@
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, { useEffect, useState } from 'react';
2
+ import React, { useCallback, useEffect, useState } from 'react';
3
3
  import Portal from '../portal/Portal';
4
4
  import { isFunction, isString, isText } from '../../utils';
5
5
  import { NotifyContent } from './Notify';
@@ -18,26 +18,18 @@ let currentOptions = {
18
18
  ...baseOptions
19
19
  };
20
20
  const typeDefaults = new Map();
21
- const parseOptions = input => {
22
- if (/*#__PURE__*/React.isValidElement(input) || isText(input)) {
23
- return {
24
- message: input
25
- };
26
- }
27
- return input ?? {};
28
- };
21
+ const parseOptions = input => /*#__PURE__*/React.isValidElement(input) || isText(input) ? {
22
+ message: input
23
+ } : input ?? {};
29
24
  const mergeOptions = (input, fallbackType) => {
30
25
  const type = input.type ?? fallbackType;
31
- const base = {
32
- ...currentOptions,
33
- ...typeDefaults.get(type)
34
- };
35
26
  const merged = {
36
- ...base,
27
+ ...currentOptions,
28
+ ...typeDefaults.get(type),
37
29
  ...input,
38
30
  type
39
31
  };
40
- merged.duration = merged.duration ?? base.duration ?? 3000;
32
+ merged.duration = merged.duration ?? 3000;
41
33
  return merged;
42
34
  };
43
35
  const removeNotify = key => {
@@ -47,12 +39,8 @@ const removeNotify = key => {
47
39
  notifyControllers.delete(key);
48
40
  };
49
41
  const closeNotify = key => {
50
- const controller = notifyControllers.get(key);
51
- if (controller) {
52
- controller.close();
53
- } else {
54
- removeNotify(key);
55
- }
42
+ const c = notifyControllers.get(key);
43
+ c ? c.close() : removeNotify(key);
56
44
  };
57
45
  const NotifyPortal = ({
58
46
  id,
@@ -67,14 +55,14 @@ const NotifyPortal = ({
67
55
  notifyControllers.delete(id);
68
56
  };
69
57
  }, [id]);
70
- const handleClose = () => {
58
+ const handleClose = useCallback(() => {
71
59
  options.onClose?.();
72
60
  setVisible(false);
73
- };
74
- const handleClosed = () => {
61
+ }, [options]);
62
+ const handleClosed = useCallback(() => {
75
63
  options.onClosed?.();
76
64
  removeNotify(id);
77
- };
65
+ }, [id, options]);
78
66
  return /*#__PURE__*/React.createElement(NotifyContent, _extends({}, options, {
79
67
  visible: visible,
80
68
  onClose: handleClose,
@@ -83,9 +71,7 @@ const NotifyPortal = ({
83
71
  };
84
72
  const showNotify = (input, fallbackType = 'primary') => {
85
73
  const opts = mergeOptions(parseOptions(input), fallbackType);
86
- if (!allowMultiple) {
87
- Array.from(activeKeys).forEach(key => removeNotify(key));
88
- }
74
+ if (!allowMultiple) activeKeys.forEach(key => closeNotify(key));
89
75
  const key = Portal.add(null);
90
76
  notifyOptions.set(key, opts);
91
77
  Portal.update(key, /*#__PURE__*/React.createElement(NotifyPortal, {
@@ -96,17 +82,14 @@ const showNotify = (input, fallbackType = 'primary') => {
96
82
  const config = next => {
97
83
  const prev = notifyOptions.get(key);
98
84
  if (!prev) return;
99
- const nextInput = isFunction(next) ? next(prev) : next;
100
- const parsed = parseOptions(nextInput);
85
+ const parsed = parseOptions(isFunction(next) ? next(prev) : next);
101
86
  const nextType = parsed.type ?? prev.type ?? fallbackType;
102
87
  const merged = {
103
88
  ...prev,
104
89
  ...parsed,
105
90
  type: nextType
106
91
  };
107
- if ('duration' in parsed && parsed.duration == null) {
108
- merged.duration = baseOptions.duration ?? 3000;
109
- }
92
+ if ('duration' in parsed && parsed.duration == null) merged.duration = baseOptions.duration ?? 3000;
110
93
  notifyOptions.set(key, merged);
111
94
  Portal.update(key, /*#__PURE__*/React.createElement(NotifyPortal, {
112
95
  id: key,
@@ -132,19 +115,13 @@ export const NotifyImperative = {
132
115
  allowMultiple = value;
133
116
  },
134
117
  setDefaultOptions: (typeOrOptions, options) => {
135
- if (isString(typeOrOptions)) {
136
- typeDefaults.set(typeOrOptions, options ?? {});
137
- } else {
138
- currentOptions = {
139
- ...currentOptions,
140
- ...typeOrOptions
141
- };
142
- }
118
+ if (isString(typeOrOptions)) typeDefaults.set(typeOrOptions, options ?? {});else currentOptions = {
119
+ ...currentOptions,
120
+ ...typeOrOptions
121
+ };
143
122
  },
144
123
  resetDefaultOptions: type => {
145
- if (type) {
146
- typeDefaults.delete(type);
147
- } else {
124
+ if (type) typeDefaults.delete(type);else {
148
125
  currentOptions = {
149
126
  ...baseOptions
150
127
  };
@@ -1,5 +1,4 @@
1
1
  import { createComponentTokensHook } from '../../design-system';
2
- import { Platform } from 'react-native';
3
2
  export const createNotifyTokens = foundations => ({
4
3
  defaults: {
5
4
  type: 'primary',
@@ -14,10 +13,7 @@ export const createNotifyTokens = foundations => ({
14
13
  portal: {
15
14
  position: 'absolute',
16
15
  left: 0,
17
- right: 0,
18
- ...(Platform.OS === 'web' ? {
19
- position: 'fixed'
20
- } : {})
16
+ right: 0
21
17
  },
22
18
  container: {
23
19
  width: '100%'