react-native-system-ui 0.0.7 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. package/README.md +46 -31
  2. package/dist/cjs/components/action-sheet/ActionSheet.js +128 -142
  3. package/dist/cjs/components/action-sheet/tokens.js +16 -27
  4. package/dist/cjs/components/area/Area.js +57 -70
  5. package/dist/cjs/components/area/tokens.js +6 -3
  6. package/dist/cjs/components/avatar/Avatar.js +38 -36
  7. package/dist/cjs/components/badge/Badge.js +68 -73
  8. package/dist/cjs/components/badge/tokens.js +6 -8
  9. package/dist/cjs/components/button/Button.js +135 -176
  10. package/dist/cjs/components/button/ButtonGroup.js +11 -45
  11. package/dist/cjs/components/button/tokens.js +1 -8
  12. package/dist/cjs/components/calendar/Calendar.js +212 -223
  13. package/dist/cjs/components/calendar/tokens.js +3 -3
  14. package/dist/cjs/components/cascader/Cascader.js +257 -267
  15. package/dist/cjs/components/cascader/tokens.js +2 -2
  16. package/dist/cjs/components/cascader/useCascaderExtend.js +25 -29
  17. package/dist/cjs/components/cell/Cell.js +94 -104
  18. package/dist/cjs/components/cell/CellGroup.js +37 -49
  19. package/dist/cjs/components/checkbox/Checkbox.js +140 -132
  20. package/dist/cjs/components/checkbox/CheckboxGroup.js +21 -51
  21. package/dist/cjs/components/checkbox/tokens.js +7 -10
  22. package/dist/cjs/components/circle/Circle.js +87 -74
  23. package/dist/cjs/components/collapse/Collapse.js +88 -104
  24. package/dist/cjs/components/config-provider/ConfigProvider.js +17 -4
  25. package/dist/cjs/components/config-provider/DirectionContext.js +15 -0
  26. package/dist/cjs/components/config-provider/index.js +7 -0
  27. package/dist/cjs/components/config-provider/locale/en-US.js +32 -0
  28. package/dist/cjs/components/config-provider/locale/zh-CN.js +32 -0
  29. package/dist/cjs/components/config-provider/useDirection.js +16 -0
  30. package/dist/cjs/components/count-down/CountDown.js +32 -27
  31. package/dist/cjs/components/datetime-picker/DatetimePicker.js +80 -104
  32. package/dist/cjs/components/datetime-picker/tokens.js +14 -3
  33. package/dist/cjs/components/dialog/Dialog.js +159 -121
  34. package/dist/cjs/components/dialog/imperative.js +24 -43
  35. package/dist/cjs/components/dialog/tokens.js +1 -0
  36. package/dist/cjs/components/divider/Divider.js +57 -62
  37. package/dist/cjs/components/empty/Empty.js +53 -52
  38. package/dist/cjs/components/error-boundary/ErrorBoundary.js +74 -0
  39. package/dist/cjs/components/error-boundary/index.js +19 -0
  40. package/dist/cjs/components/field/Field.js +109 -106
  41. package/dist/cjs/components/flex/Flex.js +32 -32
  42. package/dist/cjs/components/flex/FlexItem.js +27 -27
  43. package/dist/cjs/components/form/Form.js +178 -196
  44. package/dist/cjs/components/form/FormItem.js +87 -109
  45. package/dist/cjs/components/form/FormList.js +57 -45
  46. package/dist/cjs/components/form/tokens.js +6 -3
  47. package/dist/cjs/components/form/utils.js +15 -34
  48. package/dist/cjs/components/grid/Grid.js +44 -43
  49. package/dist/cjs/components/grid/GridItem.js +92 -86
  50. package/dist/cjs/components/image/Image.js +76 -79
  51. package/dist/cjs/components/image/tokens.js +5 -3
  52. package/dist/cjs/components/image-preview/ImagePreview.js +125 -113
  53. package/dist/cjs/components/image-preview/imperative.js +4 -13
  54. package/dist/cjs/components/image-preview/tokens.js +3 -1
  55. package/dist/cjs/components/index.js +13 -0
  56. package/dist/cjs/components/input/Input.js +40 -35
  57. package/dist/cjs/components/loading/Loading.js +32 -33
  58. package/dist/cjs/components/nav-bar/NavBar.js +88 -100
  59. package/dist/cjs/components/nav-bar/tokens.js +4 -10
  60. package/dist/cjs/components/notice-bar/NoticeBar.js +81 -80
  61. package/dist/cjs/components/notice-bar/tokens.js +3 -1
  62. package/dist/cjs/components/notify/Notify.js +89 -84
  63. package/dist/cjs/components/notify/imperative.js +32 -55
  64. package/dist/cjs/components/notify/tokens.js +2 -11
  65. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +277 -283
  66. package/dist/cjs/components/number-keyboard/tokens.js +7 -1
  67. package/dist/cjs/components/overlay/Overlay.js +37 -52
  68. package/dist/cjs/components/overlay/tokens.js +5 -3
  69. package/dist/cjs/components/password-input/PasswordInput.js +114 -95
  70. package/dist/cjs/components/picker/Picker.js +465 -454
  71. package/dist/cjs/components/picker/tokens.js +1 -1
  72. package/dist/cjs/components/popup/Popup.js +269 -299
  73. package/dist/cjs/components/popup/tokens.js +1 -0
  74. package/dist/cjs/components/portal/Portal.js +12 -30
  75. package/dist/cjs/components/portal/PortalHost.js +151 -234
  76. package/dist/cjs/components/progress/Progress.js +103 -101
  77. package/dist/cjs/components/progress/tokens.js +1 -0
  78. package/dist/cjs/components/radio/Radio.js +98 -91
  79. package/dist/cjs/components/radio/RadioGroup.js +13 -45
  80. package/dist/cjs/components/radio/tokens.js +7 -10
  81. package/dist/cjs/components/safe-area-view/SafeAreaView.js +22 -26
  82. package/dist/cjs/components/search/Search.js +65 -57
  83. package/dist/cjs/components/selector/Selector.js +21 -27
  84. package/dist/cjs/components/share-sheet/ShareSheet.js +165 -161
  85. package/dist/cjs/components/share-sheet/tokens.js +3 -1
  86. package/dist/cjs/components/sidebar/Sidebar.js +51 -51
  87. package/dist/cjs/components/sidebar/SidebarContext.js +1 -2
  88. package/dist/cjs/components/sidebar/SidebarItem.js +19 -21
  89. package/dist/cjs/components/sidebar/tokens.js +4 -4
  90. package/dist/cjs/components/skeleton/Skeleton.js +71 -77
  91. package/dist/cjs/components/skeleton/tokens.js +1 -2
  92. package/dist/cjs/components/slider/Slider.js +156 -135
  93. package/dist/cjs/components/space/Space.js +57 -76
  94. package/dist/cjs/components/space/tokens.js +7 -1
  95. package/dist/cjs/components/stepper/Stepper.js +182 -158
  96. package/dist/cjs/components/stepper/tokens.js +1 -0
  97. package/dist/cjs/components/swiper/Swiper.js +256 -255
  98. package/dist/cjs/components/swiper/SwiperPagIndicator.js +26 -27
  99. package/dist/cjs/components/swiper/tokens.js +10 -3
  100. package/dist/cjs/components/switch/Switch.js +23 -25
  101. package/dist/cjs/components/tabbar/Tabbar.js +48 -40
  102. package/dist/cjs/components/tabbar/TabbarContext.js +1 -2
  103. package/dist/cjs/components/tabbar/TabbarItem.js +65 -68
  104. package/dist/cjs/components/tabs/Tabs.js +402 -439
  105. package/dist/cjs/components/tabs/tokens.js +3 -1
  106. package/dist/cjs/components/tag/Tag.js +68 -59
  107. package/dist/cjs/components/toast/Toast.js +91 -90
  108. package/dist/cjs/components/toast/imperative.js +16 -41
  109. package/dist/cjs/components/toast/tokens.js +1 -0
  110. package/dist/cjs/components/typography/Typography.js +25 -25
  111. package/dist/cjs/components/water-mark/WaterMark.js +80 -78
  112. package/dist/cjs/design-system/Text.js +38 -0
  113. package/dist/cjs/design-system/ThemeProvider.js +5 -11
  114. package/dist/cjs/design-system/createComponentTokensHook.js +11 -13
  115. package/dist/cjs/design-system/index.js +7 -0
  116. package/dist/cjs/design-system/mergeTokensOverride.js +1 -4
  117. package/dist/cjs/design-system/presets.js +2 -3
  118. package/dist/cjs/design-system/tokens.js +2 -11
  119. package/dist/cjs/hooks/animation/index.js +25 -0
  120. package/dist/cjs/hooks/animation/useAnimatedTransition.js +72 -0
  121. package/dist/cjs/hooks/animation/useReducedMotion.js +75 -0
  122. package/dist/cjs/hooks/aria/useAriaListBox.js +8 -16
  123. package/dist/cjs/hooks/aria/useAriaOverlay.js +3 -3
  124. package/dist/cjs/hooks/aria/useAriaPress.js +8 -21
  125. package/dist/cjs/hooks/aria/useAriaToggle.js +3 -3
  126. package/dist/cjs/hooks/gesture/useGestureScroll.js +60 -61
  127. package/dist/cjs/hooks/index.js +12 -0
  128. package/dist/cjs/hooks/overlay/OverlayStackStore.js +49 -69
  129. package/dist/cjs/hooks/overlay/useOverlayStack.js +13 -19
  130. package/dist/cjs/hooks/useControllableValue.js +13 -24
  131. package/dist/cjs/hooks/useCountDown.js +30 -38
  132. package/dist/cjs/hooks/useHairline.js +17 -29
  133. package/dist/cjs/hooks/useSafeAreaPadding.js +1 -4
  134. package/dist/cjs/index.js +67 -1
  135. package/dist/cjs/platform/animation.js +10 -2
  136. package/dist/cjs/platform/measure.js +21 -37
  137. package/dist/cjs/utils/color.js +20 -39
  138. package/dist/cjs/utils/compare.js +7 -12
  139. package/dist/cjs/utils/createPlatformShadow.js +28 -39
  140. package/dist/cjs/utils/date.js +20 -50
  141. package/dist/cjs/utils/deepMerge.js +16 -26
  142. package/dist/cjs/utils/hairline.js +75 -71
  143. package/dist/cjs/utils/index.js +22 -0
  144. package/dist/cjs/utils/number.js +21 -29
  145. package/dist/cjs/utils/render.js +21 -0
  146. package/dist/cjs/utils/rtl.js +25 -0
  147. package/dist/cjs/utils/string.js +8 -25
  148. package/dist/cjs/utils/validate.js +2 -4
  149. package/dist/es/components/action-sheet/ActionSheet.js +130 -144
  150. package/dist/es/components/action-sheet/tokens.js +16 -27
  151. package/dist/es/components/area/Area.js +58 -71
  152. package/dist/es/components/area/tokens.js +6 -3
  153. package/dist/es/components/avatar/Avatar.js +38 -36
  154. package/dist/es/components/avatar/index.js +1 -2
  155. package/dist/es/components/badge/Badge.js +70 -75
  156. package/dist/es/components/badge/tokens.js +6 -8
  157. package/dist/es/components/button/Button.js +136 -177
  158. package/dist/es/components/button/ButtonGroup.js +12 -46
  159. package/dist/es/components/button/tokens.js +2 -3
  160. package/dist/es/components/calendar/Calendar.js +214 -225
  161. package/dist/es/components/calendar/tokens.js +3 -3
  162. package/dist/es/components/cascader/Cascader.js +260 -270
  163. package/dist/es/components/cascader/tokens.js +2 -2
  164. package/dist/es/components/cascader/useCascaderExtend.js +25 -29
  165. package/dist/es/components/cell/Cell.js +95 -105
  166. package/dist/es/components/cell/CellGroup.js +37 -48
  167. package/dist/es/components/checkbox/Checkbox.js +141 -133
  168. package/dist/es/components/checkbox/CheckboxGroup.js +22 -52
  169. package/dist/es/components/checkbox/tokens.js +7 -10
  170. package/dist/es/components/circle/Circle.js +87 -73
  171. package/dist/es/components/collapse/Collapse.js +90 -105
  172. package/dist/es/components/config-provider/ConfigProvider.js +11 -4
  173. package/dist/es/components/config-provider/DirectionContext.js +2 -0
  174. package/dist/es/components/config-provider/index.js +1 -0
  175. package/dist/es/components/config-provider/locale/en-US.js +32 -0
  176. package/dist/es/components/config-provider/locale/zh-CN.js +32 -0
  177. package/dist/es/components/config-provider/useDirection.js +3 -0
  178. package/dist/es/components/count-down/CountDown.js +35 -30
  179. package/dist/es/components/datetime-picker/DatetimePicker.js +80 -104
  180. package/dist/es/components/datetime-picker/tokens.js +14 -3
  181. package/dist/es/components/dialog/Dialog.js +160 -121
  182. package/dist/es/components/dialog/imperative.js +24 -43
  183. package/dist/es/components/dialog/tokens.js +1 -0
  184. package/dist/es/components/divider/Divider.js +59 -63
  185. package/dist/es/components/empty/Empty.js +54 -52
  186. package/dist/es/components/error-boundary/ErrorBoundary.js +62 -0
  187. package/dist/es/components/error-boundary/index.js +1 -0
  188. package/dist/es/components/field/Field.js +109 -106
  189. package/dist/es/components/flex/Flex.js +32 -31
  190. package/dist/es/components/flex/FlexItem.js +28 -27
  191. package/dist/es/components/form/Form.js +179 -197
  192. package/dist/es/components/form/FormItem.js +86 -107
  193. package/dist/es/components/form/FormList.js +57 -45
  194. package/dist/es/components/form/tokens.js +6 -3
  195. package/dist/es/components/form/utils.js +15 -34
  196. package/dist/es/components/grid/Grid.js +44 -42
  197. package/dist/es/components/grid/GridItem.js +94 -87
  198. package/dist/es/components/image/Image.js +79 -82
  199. package/dist/es/components/image/tokens.js +5 -3
  200. package/dist/es/components/image-preview/ImagePreview.js +125 -113
  201. package/dist/es/components/image-preview/imperative.js +4 -13
  202. package/dist/es/components/image-preview/tokens.js +3 -1
  203. package/dist/es/components/index.js +3 -1
  204. package/dist/es/components/input/Input.js +41 -36
  205. package/dist/es/components/loading/Loading.js +34 -34
  206. package/dist/es/components/nav-bar/NavBar.js +88 -100
  207. package/dist/es/components/nav-bar/tokens.js +4 -4
  208. package/dist/es/components/notice-bar/NoticeBar.js +81 -79
  209. package/dist/es/components/notice-bar/tokens.js +3 -1
  210. package/dist/es/components/notify/Notify.js +93 -87
  211. package/dist/es/components/notify/imperative.js +33 -56
  212. package/dist/es/components/notify/tokens.js +2 -5
  213. package/dist/es/components/number-keyboard/NumberKeyboard.js +277 -283
  214. package/dist/es/components/number-keyboard/tokens.js +7 -1
  215. package/dist/es/components/overlay/Overlay.js +36 -51
  216. package/dist/es/components/overlay/tokens.js +5 -3
  217. package/dist/es/components/password-input/PasswordInput.js +114 -95
  218. package/dist/es/components/picker/Picker.js +465 -454
  219. package/dist/es/components/picker/tokens.js +1 -1
  220. package/dist/es/components/popup/Popup.js +269 -298
  221. package/dist/es/components/popup/tokens.js +1 -0
  222. package/dist/es/components/portal/Portal.js +13 -30
  223. package/dist/es/components/portal/PortalHost.js +152 -234
  224. package/dist/es/components/progress/Progress.js +103 -101
  225. package/dist/es/components/progress/tokens.js +1 -0
  226. package/dist/es/components/radio/Radio.js +100 -93
  227. package/dist/es/components/radio/RadioGroup.js +15 -46
  228. package/dist/es/components/radio/tokens.js +7 -10
  229. package/dist/es/components/safe-area-view/SafeAreaView.js +22 -25
  230. package/dist/es/components/search/Search.js +66 -58
  231. package/dist/es/components/selector/Selector.js +21 -27
  232. package/dist/es/components/share-sheet/ShareSheet.js +167 -163
  233. package/dist/es/components/share-sheet/tokens.js +3 -1
  234. package/dist/es/components/sidebar/Sidebar.js +53 -53
  235. package/dist/es/components/sidebar/SidebarContext.js +1 -2
  236. package/dist/es/components/sidebar/SidebarItem.js +19 -20
  237. package/dist/es/components/sidebar/tokens.js +4 -4
  238. package/dist/es/components/skeleton/Skeleton.js +71 -77
  239. package/dist/es/components/skeleton/tokens.js +1 -2
  240. package/dist/es/components/slider/Slider.js +156 -134
  241. package/dist/es/components/space/Space.js +59 -78
  242. package/dist/es/components/space/tokens.js +7 -1
  243. package/dist/es/components/stepper/Stepper.js +183 -159
  244. package/dist/es/components/stepper/tokens.js +1 -0
  245. package/dist/es/components/swiper/Swiper.js +258 -257
  246. package/dist/es/components/swiper/SwiperPagIndicator.js +26 -27
  247. package/dist/es/components/swiper/tokens.js +10 -3
  248. package/dist/es/components/switch/Switch.js +23 -25
  249. package/dist/es/components/tabbar/Tabbar.js +49 -41
  250. package/dist/es/components/tabbar/TabbarContext.js +1 -2
  251. package/dist/es/components/tabbar/TabbarItem.js +66 -69
  252. package/dist/es/components/tabs/Tabs.js +403 -440
  253. package/dist/es/components/tabs/tokens.js +3 -1
  254. package/dist/es/components/tag/Tag.js +71 -61
  255. package/dist/es/components/toast/Toast.js +94 -91
  256. package/dist/es/components/toast/imperative.js +16 -41
  257. package/dist/es/components/toast/tokens.js +1 -0
  258. package/dist/es/components/typography/Typography.js +25 -25
  259. package/dist/es/components/water-mark/WaterMark.js +81 -79
  260. package/dist/es/design-system/Text.js +19 -0
  261. package/dist/es/design-system/ThemeProvider.js +5 -11
  262. package/dist/es/design-system/createComponentTokensHook.js +11 -13
  263. package/dist/es/design-system/index.js +1 -0
  264. package/dist/es/design-system/mergeTokensOverride.js +1 -4
  265. package/dist/es/design-system/presets.js +2 -3
  266. package/dist/es/design-system/tokens.js +1 -9
  267. package/dist/es/hooks/animation/index.js +2 -0
  268. package/dist/es/hooks/animation/useAnimatedTransition.js +53 -0
  269. package/dist/es/hooks/animation/useReducedMotion.js +54 -0
  270. package/dist/es/hooks/aria/useAriaListBox.js +8 -16
  271. package/dist/es/hooks/aria/useAriaOverlay.js +3 -3
  272. package/dist/es/hooks/aria/useAriaPress.js +8 -21
  273. package/dist/es/hooks/aria/useAriaToggle.js +3 -3
  274. package/dist/es/hooks/gesture/useGestureScroll.js +60 -61
  275. package/dist/es/hooks/index.js +1 -0
  276. package/dist/es/hooks/overlay/OverlayStackStore.js +49 -69
  277. package/dist/es/hooks/overlay/useOverlayStack.js +13 -19
  278. package/dist/es/hooks/useControllableValue.js +13 -24
  279. package/dist/es/hooks/useCountDown.js +30 -38
  280. package/dist/es/hooks/useHairline.js +16 -28
  281. package/dist/es/hooks/useSafeAreaPadding.js +1 -4
  282. package/dist/es/index.js +8 -1
  283. package/dist/es/platform/animation.js +9 -1
  284. package/dist/es/platform/measure.js +21 -37
  285. package/dist/es/utils/color.js +18 -35
  286. package/dist/es/utils/compare.js +7 -12
  287. package/dist/es/utils/createPlatformShadow.js +28 -39
  288. package/dist/es/utils/date.js +20 -50
  289. package/dist/es/utils/deepMerge.js +16 -26
  290. package/dist/es/utils/hairline.js +74 -65
  291. package/dist/es/utils/index.js +2 -0
  292. package/dist/es/utils/number.js +21 -29
  293. package/dist/es/utils/render.js +7 -0
  294. package/dist/es/utils/rtl.js +17 -0
  295. package/dist/es/utils/string.js +8 -25
  296. package/dist/es/utils/validate.js +1 -2
  297. package/dist/types/components/action-sheet/ActionSheet.d.ts +1 -1
  298. package/dist/types/components/area/Area.d.ts +1 -1
  299. package/dist/types/components/area/tokens.d.ts +4 -0
  300. package/dist/types/components/avatar/Avatar.d.ts +1 -1
  301. package/dist/types/components/avatar/index.d.ts +1 -2
  302. package/dist/types/components/badge/Badge.d.ts +1 -1
  303. package/dist/types/components/button/Button.d.ts +1 -1
  304. package/dist/types/components/button/index.d.ts +1 -1
  305. package/dist/types/components/calendar/Calendar.d.ts +1 -1
  306. package/dist/types/components/cascader/Cascader.d.ts +1 -1
  307. package/dist/types/components/cell/Cell.d.ts +1 -1
  308. package/dist/types/components/cell/CellGroup.d.ts +1 -1
  309. package/dist/types/components/cell/index.d.ts +2 -2
  310. package/dist/types/components/checkbox/Checkbox.d.ts +1 -1
  311. package/dist/types/components/circle/Circle.d.ts +1 -1
  312. package/dist/types/components/collapse/Collapse.d.ts +1 -2
  313. package/dist/types/components/config-provider/DirectionContext.d.ts +3 -0
  314. package/dist/types/components/config-provider/index.d.ts +2 -1
  315. package/dist/types/components/config-provider/locale/en-US.d.ts +32 -0
  316. package/dist/types/components/config-provider/locale/zh-CN.d.ts +32 -0
  317. package/dist/types/components/config-provider/useDirection.d.ts +1 -0
  318. package/dist/types/components/count-down/CountDown.d.ts +1 -1
  319. package/dist/types/components/datetime-picker/DatetimePicker.d.ts +1 -1
  320. package/dist/types/components/datetime-picker/tokens.d.ts +12 -0
  321. package/dist/types/components/dialog/Dialog.d.ts +1 -1
  322. package/dist/types/components/dialog/tokens.d.ts +1 -0
  323. package/dist/types/components/divider/Divider.d.ts +1 -1
  324. package/dist/types/components/empty/Empty.d.ts +1 -1
  325. package/dist/types/components/error-boundary/ErrorBoundary.d.ts +6 -0
  326. package/dist/types/components/error-boundary/index.d.ts +2 -0
  327. package/dist/types/components/field/Field.d.ts +1 -1
  328. package/dist/types/components/flex/Flex.d.ts +1 -1
  329. package/dist/types/components/flex/FlexItem.d.ts +1 -1
  330. package/dist/types/components/flex/index.d.ts +2 -2
  331. package/dist/types/components/form/Form.d.ts +1 -1
  332. package/dist/types/components/form/FormItem.d.ts +2 -1
  333. package/dist/types/components/form/index.d.ts +2 -2
  334. package/dist/types/components/form/tokens.d.ts +4 -0
  335. package/dist/types/components/grid/Grid.d.ts +1 -1
  336. package/dist/types/components/grid/GridItem.d.ts +1 -1
  337. package/dist/types/components/grid/index.d.ts +2 -2
  338. package/dist/types/components/image/Image.d.ts +1 -1
  339. package/dist/types/components/image-preview/ImagePreview.d.ts +1 -1
  340. package/dist/types/components/image-preview/tokens.d.ts +1 -0
  341. package/dist/types/components/index.d.ts +4 -1
  342. package/dist/types/components/input/Input.d.ts +3 -3
  343. package/dist/types/components/loading/Loading.d.ts +1 -1
  344. package/dist/types/components/nav-bar/NavBar.d.ts +1 -1
  345. package/dist/types/components/nav-bar/tokens.d.ts +1 -1
  346. package/dist/types/components/notice-bar/NoticeBar.d.ts +1 -1
  347. package/dist/types/components/notice-bar/tokens.d.ts +1 -0
  348. package/dist/types/components/notify/Notify.d.ts +2 -2
  349. package/dist/types/components/notify/index.d.ts +1 -1
  350. package/dist/types/components/number-keyboard/tokens.d.ts +5 -0
  351. package/dist/types/components/overlay/Overlay.d.ts +1 -5
  352. package/dist/types/components/overlay/tokens.d.ts +3 -0
  353. package/dist/types/components/password-input/PasswordInput.d.ts +1 -1
  354. package/dist/types/components/picker/Picker.d.ts +6 -6
  355. package/dist/types/components/popup/Popup.d.ts +3 -42
  356. package/dist/types/components/popup/tokens.d.ts +1 -0
  357. package/dist/types/components/portal/Portal.d.ts +9 -6
  358. package/dist/types/components/portal/PortalHost.d.ts +1 -1
  359. package/dist/types/components/radio/RadioGroup.d.ts +1 -1
  360. package/dist/types/components/safe-area-view/SafeAreaView.d.ts +1 -1
  361. package/dist/types/components/search/Search.d.ts +1 -1
  362. package/dist/types/components/share-sheet/ShareSheet.d.ts +1 -1
  363. package/dist/types/components/share-sheet/tokens.d.ts +1 -0
  364. package/dist/types/components/sidebar/Sidebar.d.ts +1 -1
  365. package/dist/types/components/sidebar/SidebarContext.d.ts +1 -1
  366. package/dist/types/components/sidebar/SidebarItem.d.ts +1 -1
  367. package/dist/types/components/sidebar/index.d.ts +2 -2
  368. package/dist/types/components/skeleton/Skeleton.d.ts +1 -1
  369. package/dist/types/components/slider/Slider.d.ts +1 -1
  370. package/dist/types/components/stepper/Stepper.d.ts +1 -1
  371. package/dist/types/components/stepper/tokens.d.ts +1 -0
  372. package/dist/types/components/swiper/Swiper.d.ts +1 -1
  373. package/dist/types/components/swiper/index.d.ts +1 -1
  374. package/dist/types/components/swiper/tokens.d.ts +8 -0
  375. package/dist/types/components/tabbar/Tabbar.d.ts +2 -2
  376. package/dist/types/components/tabbar/TabbarContext.d.ts +1 -1
  377. package/dist/types/components/tabbar/TabbarItem.d.ts +2 -2
  378. package/dist/types/components/tabs/Tabs.d.ts +1 -1
  379. package/dist/types/components/tabs/index.d.ts +1 -1
  380. package/dist/types/components/tabs/tokens.d.ts +1 -0
  381. package/dist/types/components/tag/Tag.d.ts +1 -1
  382. package/dist/types/components/toast/Toast.d.ts +2 -2
  383. package/dist/types/components/toast/index.d.ts +1 -1
  384. package/dist/types/components/toast/tokens.d.ts +1 -0
  385. package/dist/types/components/water-mark/WaterMark.d.ts +1 -1
  386. package/dist/types/design-system/Text.d.ts +3 -0
  387. package/dist/types/design-system/index.d.ts +1 -0
  388. package/dist/types/design-system/tokens.d.ts +0 -1
  389. package/dist/types/hooks/animation/index.d.ts +3 -0
  390. package/dist/types/hooks/animation/useAnimatedTransition.d.ts +13 -0
  391. package/dist/types/hooks/animation/useReducedMotion.d.ts +3 -0
  392. package/dist/types/hooks/aria/useAriaOverlay.d.ts +1 -1
  393. package/dist/types/hooks/gesture/useGestureScroll.d.ts +11 -10
  394. package/dist/types/hooks/index.d.ts +1 -0
  395. package/dist/types/hooks/overlay/OverlayStackStore.d.ts +8 -8
  396. package/dist/types/hooks/useCountDown.d.ts +1 -1
  397. package/dist/types/hooks/useHairline.d.ts +1 -1
  398. package/dist/types/index.d.ts +5 -0
  399. package/dist/types/platform/animation.d.ts +8 -0
  400. package/dist/types/platform/measure.d.ts +1 -1
  401. package/dist/types/utils/color.d.ts +0 -2
  402. package/dist/types/utils/compare.d.ts +1 -1
  403. package/dist/types/utils/createPlatformShadow.d.ts +2 -2
  404. package/dist/types/utils/date.d.ts +2 -2
  405. package/dist/types/utils/hairline.d.ts +5 -10
  406. package/dist/types/utils/index.d.ts +2 -0
  407. package/dist/types/utils/number.d.ts +2 -2
  408. package/dist/types/utils/render.d.ts +5 -0
  409. package/dist/types/utils/rtl.d.ts +5 -0
  410. package/dist/types/utils/validate.d.ts +0 -1
  411. package/package.json +25 -4
@@ -20,6 +20,7 @@ function _reactNative() {
20
20
  }
21
21
  var _safeAreaView = require("../safe-area-view");
22
22
  var _platform = require("../../platform");
23
+ var _animation = require("../../hooks/animation");
23
24
  var _createPlatformShadow = require("../../utils/createPlatformShadow");
24
25
  var _validate = require("../../utils/validate");
25
26
  function _reactNativeSystemIcon() {
@@ -31,13 +32,16 @@ function _reactNativeSystemIcon() {
31
32
  }
32
33
  var _Portal = _interopRequireDefault(require("../portal/Portal"));
33
34
  var _hooks = require("../../hooks");
35
+ var _useLocale = require("../config-provider/useLocale");
36
+ var _useDirection = require("../config-provider/useDirection");
34
37
  var _tokens = require("./tokens");
35
38
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
36
39
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
37
40
  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); }
38
41
  const AnimatedPressable = _reactNative().Animated.createAnimatedComponent(_reactNative().Pressable);
39
- const EASING_IN_CUBIC = _reactNative().Easing.bezier(0.55, 0.055, 0.675, 0.19);
40
- const EASING_OUT_CIRC = _reactNative().Easing.bezier(0.075, 0.82, 0.165, 1.0);
42
+ const EASE_OUT = _reactNative().Easing.bezier(0.075, 0.82, 0.165, 1.0);
43
+ const EASE_IN = _reactNative().Easing.bezier(0.55, 0.055, 0.675, 0.19);
44
+ const CAPTURE = () => true;
41
45
  const placementConfig = {
42
46
  top: {
43
47
  container: {
@@ -75,66 +79,37 @@ const placementConfig = {
75
79
  axis: 'y'
76
80
  }
77
81
  };
78
- const buildRadius = (round, placement, radius) => {
82
+ const buildRadius = (round, p, r) => {
79
83
  if (!round) return;
80
- switch (placement) {
81
- case 'top':
82
- return {
83
- borderBottomLeftRadius: radius,
84
- borderBottomRightRadius: radius
85
- };
86
- case 'bottom':
87
- return {
88
- borderTopLeftRadius: radius,
89
- borderTopRightRadius: radius
90
- };
91
- case 'left':
92
- return {
93
- borderTopRightRadius: radius,
94
- borderBottomRightRadius: radius
95
- };
96
- case 'right':
97
- return {
98
- borderTopLeftRadius: radius,
99
- borderBottomLeftRadius: radius
100
- };
101
- default:
102
- return {
103
- borderRadius: radius
104
- };
105
- }
106
- };
107
- const renderHeaderNode = (node, options) => {
108
- if (!(0, _validate.isRenderable)(node)) return null;
109
- if ((0, _validate.isText)(node)) {
110
- return /*#__PURE__*/_react().default.createElement(_reactNative().Text, {
111
- style: options.textStyle
112
- }, node);
113
- }
114
- return /*#__PURE__*/_react().default.createElement(_reactNative().View, {
115
- style: options.wrapperStyle
116
- }, node);
117
- };
118
- const renderWithSafeArea = (children, opts, onSafeAreaTopLayout) => {
119
- if (opts.safeArea) {
120
- return /*#__PURE__*/_react().default.createElement(_safeAreaView.SafeAreaView, null, children);
121
- }
122
- return /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, opts.safeAreaInsetTop ? /*#__PURE__*/_react().default.createElement(_safeAreaView.SafeAreaView, {
123
- edge: "top",
124
- onLayout: onSafeAreaTopLayout,
125
- pointerEvents: "none"
126
- }) : null, children, opts.safeAreaInsetBottom && /*#__PURE__*/_react().default.createElement(_safeAreaView.SafeAreaView, {
127
- edge: "bottom",
128
- pointerEvents: "none"
129
- }));
84
+ if (p === 'top') return {
85
+ borderBottomLeftRadius: r,
86
+ borderBottomRightRadius: r
87
+ };
88
+ if (p === 'bottom') return {
89
+ borderTopLeftRadius: r,
90
+ borderTopRightRadius: r
91
+ };
92
+ if (p === 'left') return {
93
+ borderTopRightRadius: r,
94
+ borderBottomRightRadius: r
95
+ };
96
+ if (p === 'right') return {
97
+ borderTopLeftRadius: r,
98
+ borderBottomLeftRadius: r
99
+ };
100
+ return {
101
+ borderRadius: r
102
+ };
130
103
  };
131
- const hiddenContentStyle = {
104
+ const hiddenStyle = {
132
105
  opacity: 0,
133
106
  shadowOpacity: 0,
134
107
  shadowRadius: 0,
135
108
  elevation: 0
136
109
  };
137
- const Popup = props => {
110
+ const PopupImpl = props => {
111
+ const locale = (0, _useLocale.useLocale)();
112
+ const layoutDir = (0, _useDirection.useDirection)();
138
113
  const {
139
114
  visible,
140
115
  placement: placementProp,
@@ -144,7 +119,7 @@ const Popup = props => {
144
119
  tokensOverride,
145
120
  overlay = true,
146
121
  overlayStyle,
147
- overlayAccessibilityLabel = '关闭弹层',
122
+ overlayAccessibilityLabel = locale?.vanPopup?.closeOverlay ?? 'Close overlay',
148
123
  closeOnOverlayPress,
149
124
  closeOnClickOverlay,
150
125
  overlayTestID = 'popup-overlay',
@@ -154,7 +129,7 @@ const Popup = props => {
154
129
  round,
155
130
  safeArea = false,
156
131
  safeAreaInsetTop = false,
157
- safeAreaInsetBottom: safeAreaInsetBottomProp,
132
+ safeAreaInsetBottom: safeBottomP,
158
133
  lockScroll = true,
159
134
  destroyOnClose = true,
160
135
  duration = 300,
@@ -174,155 +149,167 @@ const Popup = props => {
174
149
  ...rest
175
150
  } = props;
176
151
  const placement = placementProp ?? position ?? 'center';
177
- const shouldCloseOnOverlay = closeOnClickOverlay ?? closeOnOverlayPress ?? true;
178
- const shouldTranslate = placement !== 'center';
179
- const safeAreaInsetBottom = safeAreaInsetBottomProp ?? false;
152
+ const closeOvl = closeOnClickOverlay ?? closeOnOverlayPress ?? true;
153
+ const isCenter = placement === 'center';
154
+ const safeAreaInsetBottom = safeBottomP ?? false;
180
155
  const tokens = (0, _tokens.usePopupTokens)(tokensOverride);
181
- const shadow = (0, _react().useMemo)(() => (0, _createPlatformShadow.createPlatformShadow)({
182
- color: tokens.shadow.color,
183
- opacity: tokens.shadow.opacity,
184
- radius: tokens.shadow.radius,
185
- offsetY: tokens.shadow.offsetY,
186
- elevation: tokens.shadow.elevation
187
- }), [tokens.shadow.color, tokens.shadow.elevation, tokens.shadow.offsetY, tokens.shadow.opacity, tokens.shadow.radius]);
188
- const dynamicStyles = (0, _react().useMemo)(() => ({
189
- popup: {
190
- backgroundColor: tokens.colors.background,
191
- padding: tokens.spacing.padding,
192
- ...shadow
193
- },
194
- title: {
195
- color: tokens.colors.title,
196
- fontSize: tokens.typography.titleSize,
197
- fontWeight: tokens.typography.titleWeight,
198
- marginHorizontal: tokens.spacing.descriptionHorizontal,
199
- textAlign: 'center'
200
- },
201
- titleWrapper: {
202
- marginTop: tokens.spacing.titleTop,
203
- marginBottom: tokens.spacing.titleBottom,
204
- marginHorizontal: tokens.spacing.descriptionHorizontal,
205
- alignItems: 'center'
206
- },
207
- description: {
208
- color: tokens.colors.description,
209
- fontSize: tokens.typography.descriptionSize,
210
- lineHeight: tokens.typography.descriptionLineHeight
211
- },
212
- descriptionWrapper: {
213
- marginHorizontal: tokens.spacing.descriptionHorizontal,
214
- marginBottom: tokens.spacing.descriptionBottom
215
- },
216
- closeIconBase: {
217
- minWidth: tokens.spacing.closeIconSize,
218
- minHeight: tokens.spacing.closeIconSize,
219
- padding: tokens.spacing.closeIconPadding
220
- },
221
- closeIconDefault: {
222
- width: tokens.spacing.closeIconSize,
223
- height: tokens.spacing.closeIconSize
224
- },
225
- popupSide: {
226
- width: tokens.layout.sideWidth,
227
- maxWidth: tokens.layout.maxWidth
228
- },
229
- popupCenter: {
230
- minWidth: tokens.layout.minWidth,
231
- maxWidth: tokens.layout.centerMaxWidth
232
- }
233
- }), [shadow, tokens.colors.background, tokens.colors.description, tokens.colors.title, tokens.layout.centerMaxWidth, tokens.layout.maxWidth, tokens.layout.minWidth, tokens.layout.sideWidth, tokens.spacing.closeIconPadding, tokens.spacing.closeIconSize, tokens.spacing.descriptionBottom, tokens.spacing.descriptionHorizontal, tokens.spacing.padding, tokens.spacing.titleBottom, tokens.spacing.titleTop, tokens.typography.descriptionLineHeight, tokens.typography.descriptionSize, tokens.typography.titleSize, tokens.typography.titleWeight]);
156
+ const reducedMotion = (0, _animation.useReducedMotion)();
157
+ const cbRef = (0, _react().useRef)({
158
+ onOpened,
159
+ onClosed,
160
+ onOpen,
161
+ onClose,
162
+ beforeClose,
163
+ onClickOverlay
164
+ });
165
+ cbRef.current = {
166
+ onOpened,
167
+ onClosed,
168
+ onOpen,
169
+ onClose,
170
+ beforeClose,
171
+ onClickOverlay
172
+ };
173
+ const ds = (0, _react().useMemo)(() => {
174
+ const shadow = (0, _createPlatformShadow.createPlatformShadow)(tokens.shadow);
175
+ const {
176
+ colors: c,
177
+ spacing: s,
178
+ typography: t,
179
+ layout: l
180
+ } = tokens;
181
+ return {
182
+ popup: {
183
+ backgroundColor: c.background,
184
+ padding: s.padding,
185
+ ...shadow
186
+ },
187
+ title: {
188
+ color: c.title,
189
+ fontFamily: t.fontFamily,
190
+ fontSize: t.titleSize,
191
+ fontWeight: t.titleWeight,
192
+ marginHorizontal: s.descriptionHorizontal,
193
+ textAlign: 'center'
194
+ },
195
+ titleWrap: {
196
+ marginTop: s.titleTop,
197
+ marginBottom: s.titleBottom,
198
+ marginHorizontal: s.descriptionHorizontal,
199
+ alignItems: 'center'
200
+ },
201
+ desc: {
202
+ color: c.description,
203
+ fontFamily: t.fontFamily,
204
+ fontSize: t.descriptionSize,
205
+ lineHeight: t.descriptionLineHeight
206
+ },
207
+ descWrap: {
208
+ marginHorizontal: s.descriptionHorizontal,
209
+ marginBottom: s.descriptionBottom
210
+ },
211
+ closeBase: {
212
+ minWidth: s.closeIconSize,
213
+ minHeight: s.closeIconSize,
214
+ padding: s.closeIconPadding
215
+ },
216
+ closeDef: {
217
+ width: s.closeIconSize,
218
+ height: s.closeIconSize
219
+ },
220
+ side: {
221
+ width: l.sideWidth,
222
+ maxWidth: l.maxWidth
223
+ },
224
+ center: {
225
+ minWidth: l.minWidth,
226
+ maxWidth: l.centerMaxWidth
227
+ }
228
+ };
229
+ }, [tokens]);
234
230
  const [mounted, setMounted] = (0, _react().useState)(visible);
235
- const [interactionVisible, setInteractionVisible] = (0, _react().useState)(visible);
236
- const isOpen = visible || interactionVisible;
237
- const canCloseOnOverlay = shouldCloseOnOverlay && (onClose || beforeClose);
231
+ const [interVis, setInterVis] = (0, _react().useState)(visible);
232
+ const isOpen = visible || interVis;
233
+ const canCloseOvl = closeOvl && (onClose || beforeClose);
238
234
  const progress = (0, _react().useRef)(new (_reactNative().Animated.Value)(0)).current;
239
- const animationRef = (0, _react().useRef)(null);
240
- const animationSeqRef = (0, _react().useRef)(0);
241
- const prevVisible = (0, _react().useRef)(visible);
235
+ const animRef = (0, _react().useRef)(null);
236
+ const seqRef = (0, _react().useRef)(0);
237
+ const prevVis = (0, _react().useRef)(visible);
242
238
  const closingRef = (0, _react().useRef)(false);
243
- const isVertical = placement === 'top' || placement === 'bottom';
244
- const isHorizontal = placement === 'left' || placement === 'right';
245
- const direction = placement === 'top' || placement === 'left' ? -1 : 1;
246
- const runAnimation = (0, _react().useCallback)(show => {
247
- animationSeqRef.current += 1;
248
- const currentSeq = animationSeqRef.current;
249
- const easing = show ? EASING_OUT_CIRC : EASING_IN_CUBIC;
250
- animationRef.current?.stop();
251
- const animation = _reactNative().Animated.timing(progress, {
239
+ const isV = placement === 'top' || placement === 'bottom';
240
+ const isH = placement === 'left' || placement === 'right';
241
+ const dir = placement === 'top' || placement === 'left' ? -1 : 1;
242
+ const runAnim = (0, _react().useCallback)((show, rm) => {
243
+ seqRef.current += 1;
244
+ const seq = seqRef.current;
245
+ animRef.current?.stop();
246
+ const d = rm ? 0 : duration;
247
+ const a = _reactNative().Animated.timing(progress, {
252
248
  toValue: show ? 1 : 0,
253
- duration,
254
- easing,
249
+ duration: d,
250
+ easing: show ? EASE_OUT : EASE_IN,
255
251
  useNativeDriver: _platform.nativeDriverEnabled,
256
252
  isInteraction: false
257
253
  });
258
- animationRef.current = animation;
259
- animation.start(({
254
+ animRef.current = a;
255
+ a.start(({
260
256
  finished
261
257
  }) => {
262
- if (!finished || currentSeq !== animationSeqRef.current) return;
263
- if (show) {
264
- onOpened?.();
265
- } else {
266
- setInteractionVisible(false);
267
- if (destroyOnClose) {
268
- setMounted(false);
269
- }
270
- onClosed?.();
258
+ if (!finished || seq !== seqRef.current) return;
259
+ if (show) cbRef.current.onOpened?.();else {
260
+ setInterVis(false);
261
+ if (destroyOnClose) setMounted(false);
262
+ cbRef.current.onClosed?.();
271
263
  }
272
264
  });
273
- }, [destroyOnClose, duration, onClosed, onOpened, progress]);
265
+ }, [destroyOnClose, duration, progress]);
274
266
  (0, _react().useEffect)(() => {
275
267
  if (visible) {
276
268
  setMounted(true);
277
- setInteractionVisible(true);
278
- runAnimation(true);
269
+ setInterVis(true);
270
+ runAnim(true, reducedMotion);
279
271
  } else {
280
- if (!prevVisible.current) return;
281
- runAnimation(false);
272
+ if (prevVis.current) runAnim(false, reducedMotion);
282
273
  }
283
- }, [runAnimation, visible]);
274
+ }, [runAnim, visible, reducedMotion]);
284
275
  (0, _react().useEffect)(() => {
285
- if (visible && !prevVisible.current) {
286
- onOpen?.();
287
- }
288
- prevVisible.current = visible;
289
- }, [onOpen, visible]);
276
+ if (visible && !prevVis.current) cbRef.current.onOpen?.();
277
+ prevVis.current = visible;
278
+ }, [visible]);
290
279
  (0, _react().useEffect)(() => () => {
291
- animationRef.current?.stop();
280
+ animRef.current?.stop();
292
281
  }, []);
293
282
  const requestClose = (0, _react().useCallback)(async reason => {
294
283
  if (closingRef.current) return;
295
284
  closingRef.current = true;
296
285
  try {
297
- if (beforeClose) {
298
- const result = await beforeClose(reason);
299
- if (result === false) {
300
- return;
301
- }
286
+ if (cbRef.current.beforeClose) {
287
+ const r = await cbRef.current.beforeClose(reason);
288
+ if (r === false) return;
302
289
  }
303
- onClose?.();
290
+ ;
291
+ cbRef.current.onClose?.();
304
292
  } finally {
305
293
  closingRef.current = false;
306
294
  }
307
- }, [beforeClose, onClose]);
295
+ }, []);
308
296
  (0, _react().useEffect)(() => {
309
- if (!closeOnPopstate) {
310
- return;
311
- }
312
- const handler = () => {
313
- if (!visible) return;
314
- requestClose('close');
315
- };
316
- return (0, _platform.addPopStateListener)(handler);
297
+ if (!closeOnPopstate) return;
298
+ return (0, _platform.addPopStateListener)(() => {
299
+ if (visible) requestClose('close');
300
+ });
317
301
  }, [closeOnPopstate, requestClose, visible]);
318
- const handleStackClose = (0, _react().useCallback)(() => {
319
- requestClose('close');
320
- }, [requestClose]);
302
+ const handleOvlPress = (0, _react().useCallback)(() => {
303
+ cbRef.current.onClickOverlay?.();
304
+ if (closeOvl) requestClose('overlay');
305
+ }, [requestClose, closeOvl]);
306
+ const handleClosePress = (0, _react().useCallback)(() => requestClose('close-icon'), [requestClose]);
307
+ const handleEscape = (0, _react().useCallback)(() => requestClose('close'), [requestClose]);
321
308
  const {
322
- zIndex: stackZIndex
309
+ zIndex: stackZ
323
310
  } = (0, _hooks.useOverlayStack)({
324
311
  visible: isOpen,
325
- onClose: handleStackClose,
312
+ onClose: handleEscape,
326
313
  closeOnBack: closeOnBackPress,
327
314
  lockScroll,
328
315
  zIndex,
@@ -334,7 +321,7 @@ const Popup = props => {
334
321
  } = (0, _hooks.useAriaOverlay)({
335
322
  isOpen,
336
323
  onClose: () => requestClose('overlay'),
337
- isDismissable: shouldCloseOnOverlay,
324
+ isDismissable: closeOvl,
338
325
  overlayProps: {
339
326
  ...(_reactNative().Platform.OS === 'android' ? {} : {
340
327
  accessibilityRole: 'dialog'
@@ -343,175 +330,165 @@ const Popup = props => {
343
330
  }
344
331
  });
345
332
  const {
346
- onLayout: overlayOnLayout,
347
- ...overlayRestProps
333
+ onLayout: ovlOnLayout,
334
+ ...ovlRest
348
335
  } = overlayProps;
349
- const contentInteractionProps = stopPropagation ? {
350
- ...overlayRestProps,
351
- onStartShouldSetResponder: () => true
352
- } : overlayRestProps;
353
- const config = placementConfig[placement];
336
+ const contentProps = (0, _react().useMemo)(() => stopPropagation ? {
337
+ ...ovlRest,
338
+ onStartShouldSetResponder: CAPTURE
339
+ } : ovlRest, [ovlRest, stopPropagation]);
340
+ const cfg = placementConfig[placement];
354
341
  const radiusStyle = buildRadius(round, placement, tokens.radius.round);
355
342
  const {
356
- width: windowWidth,
357
- height: windowHeight
343
+ width: wW,
344
+ height: wH
358
345
  } = (0, _reactNative().useWindowDimensions)();
359
- const translateDistance = placement === 'left' || placement === 'right' ? windowWidth : placement === 'top' || placement === 'bottom' ? windowHeight : 0;
360
- const translateTransform = (0, _react().useMemo)(() => {
361
- if (!shouldTranslate) return null;
362
- const outputRange = [translateDistance * direction, 0];
363
- return config.axis === 'y' ? {
346
+ const dist = isH ? wW : isV ? wH : 0;
347
+ const translateT = (0, _react().useMemo)(() => {
348
+ if (isCenter) return null;
349
+ const out = [dist * dir, 0];
350
+ return cfg.axis === 'y' ? {
364
351
  translateY: progress.interpolate({
365
352
  inputRange: [0, 1],
366
- outputRange
353
+ outputRange: out
367
354
  })
368
355
  } : {
369
356
  translateX: progress.interpolate({
370
357
  inputRange: [0, 1],
371
- outputRange
358
+ outputRange: out
372
359
  })
373
360
  };
374
- }, [config.axis, direction, progress, shouldTranslate, translateDistance]);
375
- const baseTransform = translateTransform ? [translateTransform] : [];
376
- const animatedContentStyle = (0, _react().useMemo)(() => {
377
- const extraTransform = contentAnimationStyle?.transform;
378
- const transform = Array.isArray(extraTransform) ? [...baseTransform, ...extraTransform] : baseTransform;
379
- const baseStyle = {
361
+ }, [cfg.axis, dir, dist, isCenter, progress]);
362
+ const baseT = (0, _react().useMemo)(() => translateT ? [translateT] : [], [translateT]);
363
+ const animStyle = (0, _react().useMemo)(() => {
364
+ const et = contentAnimationStyle?.transform;
365
+ const t = Array.isArray(et) ? [...baseT, ...et] : baseT;
366
+ const s = {
380
367
  ...contentAnimationStyle,
381
- transform
368
+ transform: t
382
369
  };
383
- if (placement === 'center') {
384
- return {
385
- ...baseStyle,
386
- opacity: progress
387
- };
388
- }
389
- if (contentAnimationStyle?.opacity == null) {
390
- return {
391
- ...baseStyle,
392
- opacity: 1
393
- };
394
- }
395
- return baseStyle;
396
- }, [baseTransform, contentAnimationStyle, placement, progress]);
397
- const handleContentLayout = (0, _react().useCallback)(event => {
398
- overlayOnLayout?.(event);
399
- }, [overlayOnLayout]);
400
- const [safeAreaTopHeight, setSafeAreaTopHeight] = (0, _react().useState)(0);
401
- const handleSafeAreaTopLayout = (0, _react().useCallback)(event => {
402
- setSafeAreaTopHeight(event.nativeEvent.layout.height);
403
- }, []);
370
+ if (isCenter) return {
371
+ ...s,
372
+ opacity: progress
373
+ };
374
+ if (contentAnimationStyle?.opacity == null) return {
375
+ ...s,
376
+ opacity: 1
377
+ };
378
+ return s;
379
+ }, [baseT, contentAnimationStyle, isCenter, progress]);
380
+ const [saTopH, setSaTopH] = (0, _react().useState)(0);
381
+ const onSaTop = (0, _react().useCallback)(e => setSaTopH(e.nativeEvent.layout.height), []);
404
382
  const shouldRender = mounted || visible;
405
383
  const hidden = !isOpen;
406
- const hasCustomCloseIcon = closeIcon != null;
407
384
  const hasHeader = (0, _validate.isRenderable)(title) || (0, _validate.isRenderable)(description);
408
- const headerPadding = tokens.spacing.closeIconRight + tokens.spacing.closeIconSize;
409
- const headerPaddingStyle = closeable && closeIconPosition.startsWith('top-') ? closeIconPosition.endsWith('right') ? {
410
- paddingRight: headerPadding
411
- } : {
412
- paddingLeft: headerPadding
413
- } : undefined;
414
- const closeIconTopValue = closeIconPosition.includes('top') ? tokens.spacing.closeIconTop + safeAreaTopHeight : undefined;
415
- const closeIconBottomValue = closeIconPosition.includes('bottom') ? tokens.spacing.closeIconTop : undefined;
416
- const closeIconVerticalStyle = closeIconBottomValue !== undefined ? {
417
- bottom: closeIconBottomValue
418
- } : {
419
- top: closeIconTopValue
420
- };
421
- const closeIconHorizontalStyle = closeIconPosition.endsWith('left') ? {
422
- left: tokens.spacing.closeIconRight
423
- } : {
424
- right: tokens.spacing.closeIconRight
425
- };
426
385
  const headerNode = (0, _react().useMemo)(() => {
427
386
  if (!hasHeader) return null;
387
+ const pad = tokens.spacing.closeIconRight + tokens.spacing.closeIconSize;
388
+ const ps = closeable && closeIconPosition.startsWith('top-') ? closeIconPosition.endsWith('right') ? {
389
+ paddingRight: pad
390
+ } : {
391
+ paddingLeft: pad
392
+ } : undefined;
393
+ const renderH = (n, ts, ws) => !(0, _validate.isRenderable)(n) ? null : (0, _validate.isText)(n) ? /*#__PURE__*/_react().default.createElement(_reactNative().Text, {
394
+ style: ts
395
+ }, n) : /*#__PURE__*/_react().default.createElement(_reactNative().View, {
396
+ style: ws
397
+ }, n);
428
398
  return /*#__PURE__*/_react().default.createElement(_reactNative().View, {
429
- style: [styles.header, headerPaddingStyle]
430
- }, renderHeaderNode(title, {
431
- textStyle: [styles.title, dynamicStyles.title],
432
- wrapperStyle: dynamicStyles.titleWrapper
433
- }), renderHeaderNode(description, {
434
- textStyle: [styles.description, dynamicStyles.description],
435
- wrapperStyle: dynamicStyles.descriptionWrapper
436
- }));
437
- }, [description, dynamicStyles.description, dynamicStyles.descriptionWrapper, dynamicStyles.title, dynamicStyles.titleWrapper, hasHeader, headerPaddingStyle, title]);
438
- const contentBody = (0, _react().useMemo)(() => hasHeader ? /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, headerNode, children) : children, [children, hasHeader, headerNode]);
439
- const closeIconNode = (0, _react().useMemo)(() => {
399
+ style: [S.header, ps]
400
+ }, renderH(title, [S.title, ds.title], ds.titleWrap), renderH(description, [S.desc, ds.desc], ds.descWrap));
401
+ }, [closeable, closeIconPosition, description, ds, hasHeader, title, tokens.spacing.closeIconRight, tokens.spacing.closeIconSize]);
402
+ const closeNode = (0, _react().useMemo)(() => {
440
403
  if (!closeable) return null;
404
+ const custom = closeIcon != null;
405
+ const v = closeIconPosition.includes('bottom') ? {
406
+ bottom: tokens.spacing.closeIconTop
407
+ } : {
408
+ top: tokens.spacing.closeIconTop + saTopH
409
+ };
410
+ const isRtl = layoutDir === 'rtl';
411
+ const h = closeIconPosition.endsWith('left') ? isRtl ? {
412
+ right: tokens.spacing.closeIconRight
413
+ } : {
414
+ left: tokens.spacing.closeIconRight
415
+ } : isRtl ? {
416
+ left: tokens.spacing.closeIconRight
417
+ } : {
418
+ right: tokens.spacing.closeIconRight
419
+ };
441
420
  return /*#__PURE__*/_react().default.createElement(_reactNative().Pressable, {
442
- style: [styles.closeIconBase, dynamicStyles.closeIconBase, closeIconVerticalStyle, closeIconHorizontalStyle, !hasCustomCloseIcon ? dynamicStyles.closeIconDefault : null],
421
+ style: [S.closeBase, ds.closeBase, v, h, !custom && ds.closeDef],
443
422
  hitSlop: 8,
444
- onPress: () => requestClose('close-icon')
445
- }, hasCustomCloseIcon ? closeIcon : /*#__PURE__*/_react().default.createElement(_reactNativeSystemIcon().Cross, {
423
+ onPress: handleClosePress
424
+ }, custom ? closeIcon : /*#__PURE__*/_react().default.createElement(_reactNativeSystemIcon().Cross, {
446
425
  size: 22,
447
426
  fill: tokens.colors.closeIcon,
448
427
  color: tokens.colors.closeIcon
449
428
  }));
450
- }, [closeIcon, closeIconHorizontalStyle, closeIconVerticalStyle, closeable, dynamicStyles.closeIconBase, dynamicStyles.closeIconDefault, hasCustomCloseIcon, requestClose, tokens.colors.closeIcon]);
451
- const content = (0, _react().useMemo)(() => /*#__PURE__*/_react().default.createElement(_reactNative().Animated.View, _extends({
452
- ref: overlayRef
453
- }, contentInteractionProps, {
454
- onLayout: handleContentLayout,
455
- renderToHardwareTextureAndroid: _reactNative().Platform.OS === 'android',
456
- shouldRasterizeIOS: _reactNative().Platform.OS === 'ios',
457
- style: [dynamicStyles.popup, placement === 'center' ? dynamicStyles.popupCenter : null, isVertical ? styles.popupVertical : null, isHorizontal ? dynamicStyles.popupSide : null, radiusStyle, animatedContentStyle, style, hidden ? hiddenContentStyle : null]
458
- }, rest), closeIconNode, renderWithSafeArea(contentBody, {
459
- safeArea,
460
- safeAreaInsetTop,
461
- safeAreaInsetBottom
462
- }, safeAreaInsetTop ? handleSafeAreaTopLayout : undefined)), [animatedContentStyle, closeIconNode, contentBody, contentInteractionProps, dynamicStyles.popup, dynamicStyles.popupCenter, dynamicStyles.popupSide, handleContentLayout, handleSafeAreaTopLayout, hidden, isHorizontal, isVertical, overlayRef, placement, radiusStyle, rest, safeArea, safeAreaInsetBottom, safeAreaInsetTop, style]);
429
+ }, [closeIcon, closeIconPosition, closeable, ds, handleClosePress, saTopH, tokens.colors.closeIcon, tokens.spacing.closeIconRight, tokens.spacing.closeIconTop]);
430
+ const body = hasHeader ? /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, headerNode, children) : children;
463
431
  if (!shouldRender) return null;
464
- const resolvedZIndex = stackZIndex ?? zIndex;
432
+ const rz = stackZ ?? zIndex;
433
+ const safeContent = safeArea ? /*#__PURE__*/_react().default.createElement(_safeAreaView.SafeAreaView, null, body) : /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, safeAreaInsetTop && /*#__PURE__*/_react().default.createElement(_safeAreaView.SafeAreaView, {
434
+ edge: "top",
435
+ onLayout: onSaTop,
436
+ pointerEvents: "none"
437
+ }), body, safeAreaInsetBottom && /*#__PURE__*/_react().default.createElement(_safeAreaView.SafeAreaView, {
438
+ edge: "bottom",
439
+ pointerEvents: "none"
440
+ }));
465
441
  return /*#__PURE__*/_react().default.createElement(_Portal.default, null, /*#__PURE__*/_react().default.createElement(_reactNative().View, {
466
- style: [styles.portalRoot, webFixedRootStyle, resolvedZIndex ? {
467
- zIndex: resolvedZIndex
442
+ style: [S.root, rz ? {
443
+ zIndex: rz
468
444
  } : undefined],
469
445
  pointerEvents: "box-none"
470
446
  }, /*#__PURE__*/_react().default.createElement(_reactNative().View, {
471
- style: [styles.container, config.container],
447
+ style: [S.ctr, cfg.container],
472
448
  pointerEvents: isOpen ? 'auto' : 'none',
473
449
  accessibilityViewIsModal: isOpen,
474
450
  accessibilityLiveRegion: "polite",
475
- onAccessibilityEscape: () => requestClose('close')
451
+ onAccessibilityEscape: handleEscape
476
452
  }, overlay && isOpen ? /*#__PURE__*/_react().default.createElement(AnimatedPressable, _extends({
477
453
  testID: overlayTestID,
478
- style: [styles.overlay, {
454
+ style: [S.ovl, {
479
455
  backgroundColor: tokens.colors.overlay,
480
456
  opacity: progress
481
457
  }, overlayStyle],
482
458
  renderToHardwareTextureAndroid: _reactNative().Platform.OS === 'android',
483
459
  shouldRasterizeIOS: _reactNative().Platform.OS === 'ios',
484
460
  pointerEvents: isOpen ? 'auto' : 'none'
485
- }, canCloseOnOverlay ? {
461
+ }, canCloseOvl ? {
486
462
  accessibilityRole: 'button',
487
463
  accessibilityLabel: overlayAccessibilityLabel,
488
- accessibilityHint: '双击即可关闭弹层'
464
+ accessibilityHint: locale?.vanPopup?.closeHint ?? 'Double-tap to close'
489
465
  } : {
490
466
  accessible: false
491
467
  }, {
492
- onPress: () => {
493
- onClickOverlay?.();
494
- if (shouldCloseOnOverlay) {
495
- requestClose('overlay');
496
- }
497
- }
468
+ onPress: handleOvlPress
498
469
  })) : null, !overlay && lockScroll && isOpen ? /*#__PURE__*/_react().default.createElement(_reactNative().View, {
499
- style: styles.lockLayer,
470
+ style: S.lock,
500
471
  pointerEvents: "auto",
501
- onStartShouldSetResponder: () => true,
502
- onMoveShouldSetResponder: () => true
503
- }) : null, content)));
472
+ onStartShouldSetResponder: CAPTURE,
473
+ onMoveShouldSetResponder: CAPTURE
474
+ }) : null, /*#__PURE__*/_react().default.createElement(_reactNative().Animated.View, _extends({
475
+ ref: overlayRef
476
+ }, contentProps, {
477
+ onLayout: ovlOnLayout,
478
+ renderToHardwareTextureAndroid: _reactNative().Platform.OS === 'android',
479
+ shouldRasterizeIOS: _reactNative().Platform.OS === 'ios',
480
+ style: [ds.popup, isCenter && ds.center, isV && S.popV, isH && ds.side, radiusStyle, animStyle, style, hidden && hiddenStyle]
481
+ }, rest), closeNode, safeContent))));
504
482
  };
505
- exports.Popup = Popup;
506
- const styles = _reactNative().StyleSheet.create({
507
- portalRoot: {
483
+ const S = _reactNative().StyleSheet.create({
484
+ root: {
508
485
  ..._reactNative().StyleSheet.absoluteFillObject,
509
486
  justifyContent: 'center'
510
487
  },
511
- container: {
488
+ ctr: {
512
489
  flex: 1
513
490
  },
514
- overlay: {
491
+ ovl: {
515
492
  ..._reactNative().StyleSheet.absoluteFillObject,
516
493
  opacity: 0
517
494
  },
@@ -521,28 +498,21 @@ const styles = _reactNative().StyleSheet.create({
521
498
  title: {
522
499
  includeFontPadding: false
523
500
  },
524
- description: {
501
+ desc: {
525
502
  includeFontPadding: false
526
503
  },
527
- popupVertical: {
504
+ popV: {
528
505
  alignSelf: 'stretch'
529
506
  },
530
- closeIconBase: {
507
+ closeBase: {
531
508
  position: 'absolute',
532
509
  zIndex: 999,
533
510
  alignItems: 'center',
534
511
  justifyContent: 'center'
535
512
  },
536
- lockLayer: {
513
+ lock: {
537
514
  ..._reactNative().StyleSheet.absoluteFillObject
538
515
  }
539
516
  });
540
- const webFixedRootStyle = _reactNative().Platform.OS === 'web' ? {
541
- position: 'fixed',
542
- top: 0,
543
- left: 0,
544
- right: 0,
545
- bottom: 0
546
- } : undefined;
547
- Popup.displayName = 'Popup';
517
+ const Popup = exports.Popup = /*#__PURE__*/_react().default.memo(PopupImpl);
548
518
  var _default = exports.default = Popup;