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,37 +1,18 @@
1
- import React, { useContext, useLayoutEffect, useMemo, useRef } from 'react';
2
- import Overlay from '../overlay';
1
+ import React, { useContext, useLayoutEffect, useRef } from 'react';
3
2
  import { PortalHost, portalManager as globalManager, portalStore } from './PortalHost';
4
3
  import { PortalContext } from './PortalContext';
5
- const PortalComponent = /*#__PURE__*/React.forwardRef(({
4
+ const PortalComponentImpl = ({
6
5
  children,
7
6
  isOpen,
8
- visible,
9
- useRNModal,
10
- useRNModalOnAndroid,
11
- isKeyboardDismissable,
12
- animationPreset,
13
- onRequestClose,
14
- style
7
+ visible
15
8
  }, _ref) => {
16
9
  const manager = useContext(PortalContext) ?? globalManager;
17
10
  const keyRef = useRef(null);
18
- const resolvedOpen = isOpen ?? visible ?? true;
19
- const overlayNode = useMemo(() => /*#__PURE__*/React.createElement(Overlay, {
20
- isOpen: resolvedOpen,
21
- useRNModal: useRNModal,
22
- useRNModalOnAndroid: useRNModalOnAndroid,
23
- isKeyboardDismissable: isKeyboardDismissable,
24
- animationPreset: animationPreset,
25
- onRequestClose: onRequestClose,
26
- style: style
27
- }, children), [animationPreset, children, isKeyboardDismissable, onRequestClose, resolvedOpen, style, useRNModal, useRNModalOnAndroid]);
11
+ const shouldRender = isOpen ?? visible ?? true;
12
+ const content = shouldRender ? children : null;
28
13
  useLayoutEffect(() => {
29
- if (keyRef.current === null) {
30
- keyRef.current = manager.mount(overlayNode);
31
- } else {
32
- manager.update(keyRef.current, overlayNode);
33
- }
34
- }, [manager, overlayNode]);
14
+ if (keyRef.current === null) keyRef.current = manager.mount(content);else manager.update(keyRef.current, content);
15
+ }, [manager, content]);
35
16
  useLayoutEffect(() => () => {
36
17
  if (keyRef.current !== null) {
37
18
  manager.unmount(keyRef.current);
@@ -39,10 +20,13 @@ const PortalComponent = /*#__PURE__*/React.forwardRef(({
39
20
  }
40
21
  }, [manager]);
41
22
  return null;
42
- });
43
- const add = (children, key) => globalManager.mount(children, key);
23
+ };
24
+ const PortalComponentRef = /*#__PURE__*/React.forwardRef(PortalComponentImpl);
25
+ PortalComponentRef.displayName = 'Portal';
26
+ const PortalComponent = /*#__PURE__*/React.memo(PortalComponentRef);
27
+ const add = (content, key) => globalManager.mount(content, key);
44
28
  const remove = key => globalManager.unmount(key);
45
- const update = (key, children) => globalManager.update(key, children);
29
+ const update = (key, content) => globalManager.update(key, content);
46
30
  const clear = () => portalStore.clear();
47
31
  export const Portal = Object.assign(PortalComponent, {
48
32
  Host: PortalHost,
@@ -1,316 +1,234 @@
1
1
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
- import { DeviceEventEmitter, NativeEventEmitter, StyleSheet, View } from 'react-native';
2
+ import { DeviceEventEmitter, NativeEventEmitter, Platform, StyleSheet, View } from 'react-native';
3
3
  import { isNumber } from '../../utils';
4
- import { OverlayProvider } from '../overlay';
5
4
  import { PortalContext } from './PortalContext';
6
- const ADD_EVENT = 'RNSU_PORTAL_ADD';
7
- const UPDATE_EVENT = 'RNSU_PORTAL_UPDATE';
8
- const REMOVE_EVENT = 'RNSU_PORTAL_REMOVE';
9
- const CLEAR_EVENT = 'RNSU_PORTAL_CLEAR';
10
- const TopViewEventEmitter = DeviceEventEmitter || new NativeEventEmitter();
11
- const getMaxZIndex = node => {
12
- if (!node) return undefined;
13
- if (Array.isArray(node)) {
14
- let max;
15
- for (const child of node) {
16
- const value = getMaxZIndex(child);
17
- if (!isNumber(value)) continue;
18
- max = isNumber(max) ? Math.max(max, value) : value;
19
- }
20
- return max;
21
- }
22
- if (! /*#__PURE__*/React.isValidElement(node)) return undefined;
23
- const element = node;
24
- const style = element.props.style;
25
- let max;
26
- if (style && typeof style !== 'function') {
27
- const flattened = typeof style === 'object' && !Array.isArray(style) && style !== null ? style : StyleSheet.flatten(style);
28
- const zIndex = flattened?.zIndex;
29
- if (isNumber(zIndex)) {
30
- max = zIndex;
31
- }
32
- }
33
- const childMax = getMaxZIndex(element.props.children);
34
- if (!isNumber(childMax)) return max;
35
- if (!isNumber(max)) return childMax;
36
- return Math.max(max, childMax);
37
- };
38
- const applyOperation = (manager, operation) => {
39
- if (operation.type === 'mount') {
40
- manager.mount(operation.children, operation.key);
41
- } else if (operation.type === 'update') {
42
- manager.update(operation.key, operation.children);
43
- } else if (operation.type === 'clear') {
44
- manager.clear();
45
- } else {
46
- manager.unmount(operation.key);
47
- }
5
+ const AE = 'RNSU_PORTAL_ADD';
6
+ const UE = 'RNSU_PORTAL_UPDATE';
7
+ const RE = 'RNSU_PORTAL_REMOVE';
8
+ const CE = 'RNSU_PORTAL_CLEAR';
9
+ const TVE = DeviceEventEmitter || new NativeEventEmitter();
10
+ const IW = Platform.OS === 'web';
11
+ const ao = (m, o) => {
12
+ if (o.type === 'mount') m.mount(o.children, o.key);else if (o.type === 'update') m.update(o.key, o.children);else if (o.type === 'clear') m.clear();else m.unmount(o.key);
48
13
  };
49
14
  const PortalManagerView = /*#__PURE__*/React.forwardRef((_, ref) => {
50
- const [entries, setEntries] = useState([]);
51
- const keySeed = useRef(0);
52
- const mount = useCallback((children, key) => {
53
- const resolvedKey = key ?? ++keySeed.current;
54
- if (isNumber(key) && key >= keySeed.current) {
55
- keySeed.current = key + 1;
56
- }
57
- const entry = {
58
- key: resolvedKey,
59
- children,
60
- zIndex: getMaxZIndex(children)
61
- };
62
- setEntries(prev => {
63
- const index = prev.findIndex(item => item.key === resolvedKey);
64
- if (index === -1) {
65
- return [...prev, entry];
66
- }
67
- return [...prev.slice(0, index), entry, ...prev.slice(index + 1)];
15
+ const [e, setE] = useState([]);
16
+ const ks = useRef(0);
17
+ const us = useCallback(en => {
18
+ setE(p => {
19
+ const i = p.findIndex(it => it.key === en.key);
20
+ return i === -1 ? [...p, en] : [...p.slice(0, i), en, ...p.slice(i + 1)];
68
21
  });
69
- return resolvedKey;
70
22
  }, []);
71
- const update = useCallback((key, children) => {
72
- setEntries(prev => {
73
- const index = prev.findIndex(item => item.key === key);
74
- const entry = {
75
- key,
76
- children,
77
- zIndex: getMaxZIndex(children)
78
- };
79
- if (index === -1) {
80
- return [...prev, entry];
81
- }
82
- return [...prev.slice(0, index), entry, ...prev.slice(index + 1)];
23
+ const mt = useCallback((c, k) => {
24
+ const rk = k ?? ++ks.current;
25
+ if (isNumber(k) && k >= ks.current) ks.current = k + 1;
26
+ us({
27
+ key: rk,
28
+ children: c
83
29
  });
30
+ return rk;
31
+ }, [us]);
32
+ const up = useCallback((k, c) => {
33
+ us({
34
+ key: k,
35
+ children: c
36
+ });
37
+ }, [us]);
38
+ const um = useCallback(k => {
39
+ setE(p => p.filter(it => it.key !== k));
84
40
  }, []);
85
- const unmount = useCallback(key => {
86
- setEntries(prev => prev.filter(item => item.key !== key));
87
- }, []);
88
- const clear = useCallback(() => {
89
- setEntries([]);
41
+ const cl = useCallback(() => {
42
+ setE([]);
90
43
  }, []);
91
44
  React.useImperativeHandle(ref, () => ({
92
- mount,
93
- update,
94
- unmount,
95
- clear
96
- }), [mount, update, unmount, clear]);
97
- if (entries.length === 0) return null;
45
+ mount: mt,
46
+ update: up,
47
+ unmount: um,
48
+ clear: cl
49
+ }), [mt, up, um, cl]);
50
+ if (e.length === 0) return null;
98
51
  return /*#__PURE__*/React.createElement(View, {
99
52
  pointerEvents: "box-none",
100
- style: styles.portalLayer,
53
+ style: S.pl,
101
54
  collapsable: false
102
- }, entries.map(entry => /*#__PURE__*/React.createElement(View, {
103
- key: entry.key,
55
+ }, e.map(en => /*#__PURE__*/React.createElement(View, {
56
+ key: en.key,
104
57
  pointerEvents: "box-none",
105
58
  collapsable: false,
106
- style: [styles.portalEntry, isNumber(entry.zIndex) && {
107
- zIndex: entry.zIndex
108
- }]
109
- }, entry.children)));
59
+ style: S.pe
60
+ }, en.children)));
110
61
  });
111
- let activeHostId = 0;
112
- let nextHostId = 1;
113
- let nextGlobalKey = 1;
114
- const globalManager = {
115
- mount: (children, key) => {
116
- if (typeof __DEV__ !== 'undefined' && __DEV__ && activeHostId === 0) {
117
- console.warn('[Portal] 请在根节点挂载 <PortalHost> <ConfigProvider> 以启用静态组件能力。');
118
- }
119
- const resolvedKey = key ?? nextGlobalKey++;
120
- if (isNumber(key) && key >= nextGlobalKey) {
121
- nextGlobalKey = key + 1;
122
- }
123
- TopViewEventEmitter.emit(ADD_EVENT, {
124
- key: resolvedKey,
125
- children
62
+ let ah = 0;
63
+ let nh = 1;
64
+ let ngk = 10000;
65
+ const gm = {
66
+ mount: (c, k) => {
67
+ if (typeof __DEV__ !== 'undefined' && __DEV__ && ah === 0) console.warn('[Portal] Please mount <PortalHost> or <ConfigProvider> at the root to enable imperative APIs.');
68
+ const rk = k ?? ngk++;
69
+ if (isNumber(k) && k >= ngk) ngk = k + 1;
70
+ TVE.emit(AE, {
71
+ key: rk,
72
+ children: c
126
73
  });
127
- return resolvedKey;
74
+ return rk;
128
75
  },
129
- update: (key, children) => {
130
- TopViewEventEmitter.emit(UPDATE_EVENT, {
131
- key,
132
- children
76
+ update: (k, c) => {
77
+ TVE.emit(UE, {
78
+ key: k,
79
+ children: c
133
80
  });
134
81
  },
135
- unmount: key => {
136
- TopViewEventEmitter.emit(REMOVE_EVENT, {
137
- key
82
+ unmount: k => {
83
+ TVE.emit(RE, {
84
+ key: k
138
85
  });
139
86
  }
140
87
  };
141
- export const PortalHost = ({
88
+ const PortalHostImpl = ({
142
89
  children
143
90
  }) => {
144
- const hostIdRef = useRef(nextHostId++);
145
- const managerRef = useRef(null);
146
- const queueRef = useRef([]);
147
- const nextKeyRef = useRef(1);
148
- const enqueueOrRun = useCallback(operation => {
149
- const manager = managerRef.current;
150
- if (manager) {
151
- applyOperation(manager, operation);
152
- } else {
153
- queueRef.current.push(operation);
154
- }
91
+ const hir = useRef(nh++),
92
+ mr = useRef(null),
93
+ qr = useRef([]),
94
+ nkr = useRef(1);
95
+ const eor = useCallback(o => {
96
+ const m = mr.current;
97
+ if (m) ao(m, o);else qr.current.push(o);
155
98
  }, []);
156
- const scopedManager = useMemo(() => ({
157
- mount: (children, key) => {
158
- const resolvedKey = key ?? nextKeyRef.current++;
159
- if (isNumber(key) && key >= nextKeyRef.current) {
160
- nextKeyRef.current = key + 1;
161
- }
162
- enqueueOrRun({
99
+ const sm = useMemo(() => ({
100
+ mount: (c, k) => {
101
+ const rk = k ?? nkr.current++;
102
+ if (isNumber(k) && k >= nkr.current) nkr.current = k + 1;
103
+ eor({
163
104
  type: 'mount',
164
- key: resolvedKey,
165
- children
105
+ key: rk,
106
+ children: c
166
107
  });
167
- return resolvedKey;
108
+ return rk;
168
109
  },
169
- update: (key, children) => {
170
- enqueueOrRun({
110
+ update: (k, c) => {
111
+ eor({
171
112
  type: 'update',
172
- key,
173
- children
113
+ key: k,
114
+ children: c
174
115
  });
175
116
  },
176
- unmount: key => {
177
- enqueueOrRun({
117
+ unmount: k => {
118
+ eor({
178
119
  type: 'unmount',
179
- key
120
+ key: k
180
121
  });
181
122
  }
182
- }), [enqueueOrRun]);
183
- const handleManagerRef = useCallback(manager => {
184
- managerRef.current = manager;
185
- if (manager) {
186
- if (queueRef.current.length > 0) {
187
- const pending = queueRef.current.splice(0, queueRef.current.length);
188
- pending.forEach(operation => applyOperation(manager, operation));
189
- }
190
- if (activeHostId === 0 || activeHostId === hostIdRef.current) {
191
- activeHostId = hostIdRef.current;
192
- if (typeof __DEV__ !== 'undefined' && __DEV__) {
193
- console.log('[PortalHost] activeHost', activeHostId);
194
- }
195
- } else if (typeof __DEV__ !== 'undefined' && __DEV__) {
196
- console.warn('[PortalHost] 检测到多个 Portal.Host,静态 API 仅会使用第一个挂载的 Host。建议全局只挂载一个。');
123
+ }), [eor]);
124
+ const hmr = useCallback(m => {
125
+ mr.current = m;
126
+ if (m) {
127
+ if (qr.current.length > 0) {
128
+ const pd = qr.current.splice(0, qr.current.length);
129
+ pd.forEach(o => ao(m, o));
197
130
  }
131
+ ;
132
+ if (ah === 0 || ah === hir.current) ah = hir.current;else if (typeof __DEV__ !== 'undefined' && __DEV__) console.warn('[PortalHost] Multiple PortalHost instances detected. Imperative APIs will only use the first mounted host.');
198
133
  }
199
134
  }, []);
200
135
  useEffect(() => () => {
201
- if (activeHostId === hostIdRef.current) {
202
- activeHostId = 0;
203
- queueRef.current = [];
136
+ if (ah === hir.current) {
137
+ ah = 0;
138
+ qr.current = [];
204
139
  portalStore.clear();
205
140
  }
206
141
  }, []);
207
142
  useEffect(() => {
208
- if (typeof __DEV__ !== 'undefined' && __DEV__) {
209
- console.log('[PortalHost] mounted', {
210
- hostId: hostIdRef.current,
211
- activeHostId
212
- });
213
- }
214
- }, []);
215
- useEffect(() => {
216
- const handleAdd = ({
217
- key,
218
- children
143
+ const ha = ({
144
+ key: k,
145
+ children: c
219
146
  }) => {
220
- if (activeHostId !== hostIdRef.current) return;
221
- if (typeof __DEV__ !== 'undefined' && __DEV__) {
222
- console.log('[PortalHost] add', key);
223
- }
224
- enqueueOrRun({
147
+ if (ah !== hir.current) return;
148
+ eor({
225
149
  type: 'mount',
226
- key,
227
- children
150
+ key: k,
151
+ children: c
228
152
  });
229
153
  };
230
- const handleUpdate = ({
231
- key,
232
- children
154
+ const hu = ({
155
+ key: k,
156
+ children: c
233
157
  }) => {
234
- if (activeHostId !== hostIdRef.current) return;
235
- if (typeof __DEV__ !== 'undefined' && __DEV__) {
236
- console.log('[PortalHost] update', key);
237
- }
238
- enqueueOrRun({
158
+ if (ah !== hir.current) return;
159
+ eor({
239
160
  type: 'update',
240
- key,
241
- children
161
+ key: k,
162
+ children: c
242
163
  });
243
164
  };
244
- const handleRemove = ({
245
- key
165
+ const hr = ({
166
+ key: k
246
167
  }) => {
247
- if (activeHostId !== hostIdRef.current) return;
248
- if (typeof __DEV__ !== 'undefined' && __DEV__) {
249
- console.log('[PortalHost] remove', key);
250
- }
251
- enqueueOrRun({
168
+ if (ah !== hir.current) return;
169
+ eor({
252
170
  type: 'unmount',
253
- key
171
+ key: k
254
172
  });
255
173
  };
256
- const handleClear = () => {
257
- if (activeHostId !== hostIdRef.current) return;
258
- if (typeof __DEV__ !== 'undefined' && __DEV__) {
259
- console.log('[PortalHost] clear');
260
- }
261
- queueRef.current = [];
262
- enqueueOrRun({
174
+ const hc = () => {
175
+ if (ah !== hir.current) return;
176
+ qr.current = [];
177
+ eor({
263
178
  type: 'clear'
264
179
  });
265
180
  };
266
- const addSub = TopViewEventEmitter.addListener(ADD_EVENT, handleAdd);
267
- const updateSub = TopViewEventEmitter.addListener(UPDATE_EVENT, handleUpdate);
268
- const removeSub = TopViewEventEmitter.addListener(REMOVE_EVENT, handleRemove);
269
- const clearSub = TopViewEventEmitter.addListener(CLEAR_EVENT, handleClear);
181
+ const as = TVE.addListener(AE, ha);
182
+ const us = TVE.addListener(UE, hu);
183
+ const rs = TVE.addListener(RE, hr);
184
+ const cs = TVE.addListener(CE, hc);
270
185
  return () => {
271
- addSub.remove?.();
272
- updateSub.remove?.();
273
- removeSub.remove?.();
274
- clearSub.remove?.();
275
- const emitter = TopViewEventEmitter;
276
- emitter.removeListener?.(ADD_EVENT, handleAdd);
277
- emitter.removeListener?.(UPDATE_EVENT, handleUpdate);
278
- emitter.removeListener?.(REMOVE_EVENT, handleRemove);
279
- emitter.removeListener?.(CLEAR_EVENT, handleClear);
186
+ as.remove();
187
+ us.remove();
188
+ rs.remove();
189
+ cs.remove();
280
190
  };
281
- }, [enqueueOrRun]);
282
- return /*#__PURE__*/React.createElement(OverlayProvider, null, /*#__PURE__*/React.createElement(PortalContext.Provider, {
283
- value: scopedManager
191
+ }, [eor]);
192
+ return /*#__PURE__*/React.createElement(PortalContext.Provider, {
193
+ value: sm
284
194
  }, /*#__PURE__*/React.createElement(View, {
285
- style: styles.host,
195
+ style: S.h,
286
196
  collapsable: false
287
197
  }, /*#__PURE__*/React.createElement(View, {
288
- style: styles.root,
198
+ style: S.r,
289
199
  collapsable: false,
290
200
  pointerEvents: "box-none"
291
201
  }, children), /*#__PURE__*/React.createElement(PortalManagerView, {
292
- ref: handleManagerRef
293
- }))));
202
+ ref: hmr
203
+ })));
294
204
  };
295
- const styles = StyleSheet.create({
296
- host: {
205
+ export const PortalHost = /*#__PURE__*/React.memo(PortalHostImpl);
206
+ PortalHost.displayName = 'PortalHost';
207
+ const S = StyleSheet.create({
208
+ h: {
297
209
  position: 'relative',
298
210
  flex: 1
299
211
  },
300
- root: {
212
+ r: {
301
213
  flex: 1
302
214
  },
303
- portalLayer: {
215
+ pl: IW ? {
216
+ position: 'fixed',
217
+ top: 0,
218
+ left: 0,
219
+ right: 0,
220
+ bottom: 0
221
+ } : {
304
222
  ...StyleSheet.absoluteFillObject
305
223
  },
306
- portalEntry: {
224
+ pe: {
307
225
  ...StyleSheet.absoluteFillObject
308
226
  }
309
227
  });
310
- export const portalManager = globalManager;
228
+ export const portalManager = gm;
311
229
  export const portalStore = {
312
230
  clear: () => {
313
- TopViewEventEmitter.emit(CLEAR_EVENT);
231
+ TVE.emit(CE);
314
232
  },
315
- hasHosts: () => activeHostId !== 0
233
+ hasHosts: () => ah !== 0
316
234
  };