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
@@ -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',
@@ -175,154 +150,166 @@ const Popup = props => {
175
150
  } = props;
176
151
  const placement = placementProp ?? position ?? 'center';
177
152
  const shouldCloseOnOverlay = closeOnClickOverlay ?? closeOnOverlayPress ?? true;
178
- const shouldTranslate = placement !== 'center';
153
+ const isCenter = placement === 'center';
179
154
  const safeAreaInsetBottom = safeAreaInsetBottomProp ?? 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
+ fontSize: t.titleSize,
190
+ fontWeight: t.titleWeight,
191
+ marginHorizontal: s.descriptionHorizontal,
192
+ textAlign: 'center'
193
+ },
194
+ titleWrap: {
195
+ marginTop: s.titleTop,
196
+ marginBottom: s.titleBottom,
197
+ marginHorizontal: s.descriptionHorizontal,
198
+ alignItems: 'center'
199
+ },
200
+ desc: {
201
+ color: c.description,
202
+ fontSize: t.descriptionSize,
203
+ lineHeight: t.descriptionLineHeight
204
+ },
205
+ descWrap: {
206
+ marginHorizontal: s.descriptionHorizontal,
207
+ marginBottom: s.descriptionBottom
208
+ },
209
+ closeBase: {
210
+ minWidth: s.closeIconSize,
211
+ minHeight: s.closeIconSize,
212
+ padding: s.closeIconPadding
213
+ },
214
+ closeDef: {
215
+ width: s.closeIconSize,
216
+ height: s.closeIconSize
217
+ },
218
+ side: {
219
+ width: l.sideWidth,
220
+ maxWidth: l.maxWidth
221
+ },
222
+ center: {
223
+ minWidth: l.minWidth,
224
+ maxWidth: l.centerMaxWidth
225
+ }
226
+ };
227
+ }, [tokens]);
234
228
  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);
229
+ const [interVis, setInterVis] = (0, _react().useState)(visible);
230
+ const isOpen = visible || interVis;
231
+ const canCloseOvl = shouldCloseOnOverlay && (onClose || beforeClose);
238
232
  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);
233
+ const animRef = (0, _react().useRef)(null);
234
+ const seqRef = (0, _react().useRef)(0);
235
+ const prevVis = (0, _react().useRef)(visible);
242
236
  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, {
237
+ const isV = placement === 'top' || placement === 'bottom';
238
+ const isH = placement === 'left' || placement === 'right';
239
+ const dir = placement === 'top' || placement === 'left' ? -1 : 1;
240
+ const runAnim = (0, _react().useCallback)((show, rm) => {
241
+ seqRef.current += 1;
242
+ const seq = seqRef.current;
243
+ animRef.current?.stop();
244
+ const d = rm ? 0 : duration;
245
+ const a = _reactNative().Animated.timing(progress, {
252
246
  toValue: show ? 1 : 0,
253
- duration,
254
- easing,
247
+ duration: d,
248
+ easing: show ? EASE_OUT : EASE_IN,
255
249
  useNativeDriver: _platform.nativeDriverEnabled,
256
250
  isInteraction: false
257
251
  });
258
- animationRef.current = animation;
259
- animation.start(({
252
+ animRef.current = a;
253
+ a.start(({
260
254
  finished
261
255
  }) => {
262
- if (!finished || currentSeq !== animationSeqRef.current) return;
256
+ if (!finished || seq !== seqRef.current) return;
263
257
  if (show) {
264
- onOpened?.();
258
+ cbRef.current.onOpened?.();
265
259
  } else {
266
- setInteractionVisible(false);
267
- if (destroyOnClose) {
268
- setMounted(false);
269
- }
270
- onClosed?.();
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 (shouldCloseOnOverlay) requestClose('overlay');
305
+ }, [requestClose, shouldCloseOnOverlay]);
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,
@@ -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;