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
@@ -3,12 +3,7 @@ import { Platform } from 'react-native';
3
3
  import { useFocus, useFocusRing } from '@react-native-aria/focus';
4
4
  import { useHover, usePress } from '@react-native-aria/interactions';
5
5
  import { mergeProps } from '@react-native-aria/utils';
6
- const mergePropsCompat = (...args) => {
7
- if (typeof mergeProps === 'function') {
8
- return mergeProps(...args);
9
- }
10
- return Object.assign({}, ...args);
11
- };
6
+ const mp = (...args) => typeof mergeProps === 'function' ? mergeProps(...args) : Object.assign({}, ...args);
12
7
  export const useAriaPress = ({
13
8
  disabled = false,
14
9
  allowHover = Platform.OS === 'web',
@@ -29,32 +24,24 @@ export const useAriaPress = ({
29
24
  } = useHover({
30
25
  isDisabled: disabled || !allowHover
31
26
  });
32
- const useFocusCompat = useFocus;
33
27
  const {
34
28
  isFocused,
35
29
  focusProps
36
- } = useFocusCompat({
30
+ } = useFocus({
37
31
  isDisabled: disabled
38
32
  });
39
- const useFocusRingCompat = useFocusRing;
40
33
  const {
41
34
  focusProps: focusRingProps,
42
35
  isFocusVisible
43
- } = useFocusRingCompat({
36
+ } = useFocusRing({
44
37
  isDisabled: disabled
45
38
  });
46
39
  const interactionProps = useMemo(() => {
47
- let merged = pressProps;
48
- if (allowHover) {
49
- merged = mergePropsCompat(merged, hoverProps);
50
- }
51
- if (allowFocus && !disabled) {
52
- merged = mergePropsCompat(merged, focusProps, focusRingProps);
53
- }
54
- if (extraProps) {
55
- merged = mergePropsCompat(merged, extraProps);
56
- }
57
- return merged;
40
+ let m = pressProps;
41
+ if (allowHover) m = mp(m, hoverProps);
42
+ if (allowFocus && !disabled) m = mp(m, focusProps, focusRingProps);
43
+ if (extraProps) m = mp(m, extraProps);
44
+ return m;
58
45
  }, [allowFocus, allowHover, disabled, extraProps, focusProps, focusRingProps, hoverProps, pressProps]);
59
46
  const states = useMemo(() => ({
60
47
  hovered: !!isHovered,
@@ -2,15 +2,15 @@ import { useMemo, useRef } from 'react';
2
2
  import { useToggle } from '@react-native-aria/toggle';
3
3
  import { useToggleState } from '@react-stately/toggle';
4
4
  export const useAriaToggle = props => {
5
- const inputRef = props.inputRef ?? useRef(null);
5
+ const fallbackRef = useRef(null);
6
+ const inputRef = props.inputRef ?? fallbackRef;
6
7
  const state = useToggleState(props);
7
8
  const {
8
9
  inputProps
9
10
  } = useToggle(props, state, inputRef);
10
- const resolvedInputProps = useMemo(() => inputProps, [inputProps]);
11
11
  return {
12
12
  state,
13
- inputProps: resolvedInputProps,
13
+ inputProps: useMemo(() => inputProps, [inputProps]),
14
14
  inputRef
15
15
  };
16
16
  };
@@ -1,51 +1,52 @@
1
1
  import { useCallback, useMemo, useRef, useState } from 'react';
2
2
  import { Animated } from 'react-native';
3
- const DEFAULT_THROTTLE = 16;
4
- const VELOCITY_NORMALIZER = 1000;
5
3
  export const useGestureScroll = (options = {}) => {
6
4
  const {
7
5
  axis = 'y',
8
- scrollEventThrottle = DEFAULT_THROTTLE,
6
+ scrollEventThrottle = 16,
9
7
  onScroll,
10
8
  onScrollBeginDrag,
11
9
  onScrollEndDrag,
12
10
  onMomentumScrollBegin,
13
11
  onMomentumScrollEnd
14
12
  } = options;
13
+ const onScrollRef = useRef(onScroll);
14
+ onScrollRef.current = onScroll;
15
+ const onBeginDragRef = useRef(onScrollBeginDrag);
16
+ onBeginDragRef.current = onScrollBeginDrag;
17
+ const onEndDragRef = useRef(onScrollEndDrag);
18
+ onEndDragRef.current = onScrollEndDrag;
19
+ const onMomBeginRef = useRef(onMomentumScrollBegin);
20
+ onMomBeginRef.current = onMomentumScrollBegin;
21
+ const onMomEndRef = useRef(onMomentumScrollEnd);
22
+ onMomEndRef.current = onMomentumScrollEnd;
15
23
  const scrollValue = useRef(new Animated.Value(0)).current;
16
- const lastOffsetRef = useRef(0);
17
- const lastTimestampRef = useRef(null);
18
- const velocityRef = useRef(0);
19
- const directionRef = useRef(null);
24
+ const lastOffRef = useRef(0);
25
+ const lastTsRef = useRef(null);
26
+ const velRef = useRef(0);
27
+ const dirRef = useRef(null);
20
28
  const [direction, setDirection] = useState(null);
21
29
  const [isDragging, setIsDragging] = useState(false);
22
30
  const [isMomentum, setIsMomentum] = useState(false);
23
- const updateDirection = useCallback(next => {
24
- if (directionRef.current !== next) {
25
- directionRef.current = next;
26
- setDirection(next);
31
+ const updateDir = useCallback(n => {
32
+ if (dirRef.current !== n) {
33
+ dirRef.current = n;
34
+ setDirection(n);
27
35
  }
28
36
  }, []);
29
- const handleScroll = useCallback(event => {
30
- onScroll?.(event);
31
- const contentOffset = event.nativeEvent.contentOffset;
32
- const current = axis === 'x' ? contentOffset.x ?? 0 : contentOffset.y ?? 0;
33
- const delta = current - lastOffsetRef.current;
34
- const timestamp = event.timeStamp ?? Date.now();
35
- if (delta > 0) {
36
- updateDirection('forward');
37
- } else if (delta < 0) {
38
- updateDirection('backward');
39
- }
40
- if (lastTimestampRef.current != null) {
41
- const elapsed = Math.max(timestamp - lastTimestampRef.current, 1);
42
- velocityRef.current = delta / elapsed * VELOCITY_NORMALIZER;
43
- }
44
- lastTimestampRef.current = timestamp;
45
- lastOffsetRef.current = current;
46
- }, [axis, onScroll, updateDirection]);
47
- const animatedScrollHandler = useMemo(() => {
48
- const mapping = axis === 'x' ? [{
37
+ const handleScroll = useCallback(e => {
38
+ onScrollRef.current?.(e);
39
+ const o = e.nativeEvent.contentOffset;
40
+ const cur = axis === 'x' ? o.x ?? 0 : o.y ?? 0;
41
+ const delta = cur - lastOffRef.current;
42
+ const ts = e.timeStamp ?? Date.now();
43
+ if (delta > 0) updateDir('forward');else if (delta < 0) updateDir('backward');
44
+ if (lastTsRef.current != null) velRef.current = delta / Math.max(ts - lastTsRef.current, 1) * 1000;
45
+ lastTsRef.current = ts;
46
+ lastOffRef.current = cur;
47
+ }, [axis, updateDir]);
48
+ const animHandler = useMemo(() => {
49
+ const m = axis === 'x' ? [{
49
50
  nativeEvent: {
50
51
  contentOffset: {
51
52
  x: scrollValue
@@ -58,53 +59,51 @@ export const useGestureScroll = (options = {}) => {
58
59
  }
59
60
  }
60
61
  }];
61
- return Animated.event(mapping, {
62
+ return Animated.event(m, {
62
63
  useNativeDriver: false,
63
64
  listener: handleScroll
64
65
  });
65
66
  }, [axis, handleScroll, scrollValue]);
66
- const handleScrollBeginDrag = useCallback(event => {
67
+ const hBeginDrag = useCallback(e => {
67
68
  setIsDragging(true);
68
- onScrollBeginDrag?.(event);
69
- }, [onScrollBeginDrag]);
70
- const handleScrollEndDrag = useCallback(event => {
69
+ onBeginDragRef.current?.(e);
70
+ }, []);
71
+ const hEndDrag = useCallback(e => {
71
72
  setIsDragging(false);
72
- onScrollEndDrag?.(event);
73
- }, [onScrollEndDrag]);
74
- const handleMomentumBegin = useCallback(event => {
73
+ onEndDragRef.current?.(e);
74
+ }, []);
75
+ const hMomBegin = useCallback(e => {
75
76
  setIsMomentum(true);
76
- onMomentumScrollBegin?.(event);
77
- }, [onMomentumScrollBegin]);
78
- const handleMomentumEnd = useCallback(event => {
77
+ onMomBeginRef.current?.(e);
78
+ }, []);
79
+ const hMomEnd = useCallback(e => {
79
80
  setIsMomentum(false);
80
- onMomentumScrollEnd?.(event);
81
- }, [onMomentumScrollEnd]);
82
- const resetOffset = useCallback((value = 0) => {
81
+ onMomEndRef.current?.(e);
82
+ }, []);
83
+ const resetOffset = useCallback((v = 0) => {
83
84
  scrollValue.stopAnimation();
84
- scrollValue.setValue(value);
85
- lastOffsetRef.current = value;
86
- lastTimestampRef.current = null;
87
- velocityRef.current = 0;
88
- updateDirection(null);
89
- }, [scrollValue, updateDirection]);
90
- const getVelocity = useCallback(() => velocityRef.current, []);
91
- const getCurrentOffset = useCallback(() => lastOffsetRef.current, []);
85
+ scrollValue.setValue(v);
86
+ lastOffRef.current = v;
87
+ lastTsRef.current = null;
88
+ velRef.current = 0;
89
+ updateDir(null);
90
+ }, [scrollValue, updateDir]);
92
91
  const scrollProps = useMemo(() => ({
93
- onScroll: animatedScrollHandler,
92
+ onScroll: animHandler,
94
93
  scrollEventThrottle,
95
- onScrollBeginDrag: handleScrollBeginDrag,
96
- onScrollEndDrag: handleScrollEndDrag,
97
- onMomentumScrollBegin: handleMomentumBegin,
98
- onMomentumScrollEnd: handleMomentumEnd
99
- }), [animatedScrollHandler, handleMomentumBegin, handleMomentumEnd, handleScrollBeginDrag, handleScrollEndDrag, scrollEventThrottle]);
94
+ onScrollBeginDrag: hBeginDrag,
95
+ onScrollEndDrag: hEndDrag,
96
+ onMomentumScrollBegin: hMomBegin,
97
+ onMomentumScrollEnd: hMomEnd
98
+ }), [animHandler, hBeginDrag, hEndDrag, hMomBegin, hMomEnd, scrollEventThrottle]);
100
99
  return {
101
100
  scrollValue,
102
101
  scrollProps,
103
102
  direction,
104
103
  isDragging,
105
104
  isMomentum,
106
- getVelocity,
107
- getCurrentOffset,
105
+ getVelocity: useCallback(() => velRef.current, []),
106
+ getCurrentOffset: useCallback(() => lastOffRef.current, []),
108
107
  resetOffset
109
108
  };
110
109
  };
@@ -1,4 +1,5 @@
1
1
  export * from './useSafeAreaPadding';
2
+ export * from './animation';
2
3
  export * from './aria';
3
4
  export * from './gesture';
4
5
  export * from './overlay';
@@ -1,94 +1,78 @@
1
1
  import { BackHandler, Platform } from 'react-native';
2
2
  import { setBodyScrollLocked } from '../../platform';
3
3
  import { isNumber } from '../../utils';
4
- const DEFAULT_BASE_Z_INDEX = 1000;
5
- const DEFAULT_Z_INDEX_STEP = 2;
6
4
  export class OverlayStackStore {
7
5
  listeners = new Set();
8
6
  entries = [];
9
7
  keySeed = 0;
10
- constructor(baseZIndex = DEFAULT_BASE_Z_INDEX, zIndexStep = DEFAULT_Z_INDEX_STEP) {
11
- this.baseZIndex = baseZIndex;
12
- this.zIndexStep = zIndexStep;
8
+ constructor(baseZ = 1000, zStep = 2) {
9
+ this.baseZ = baseZ;
10
+ this.zStep = zStep;
13
11
  }
14
- subscribe = listener => {
15
- this.listeners.add(listener);
12
+ subscribe = l => {
13
+ this.listeners.add(l);
16
14
  return () => {
17
- this.listeners.delete(listener);
15
+ this.listeners.delete(l);
18
16
  };
19
17
  };
20
18
  getSnapshot = () => this.entries;
21
- mount = options => {
22
- const key = ++this.keySeed;
19
+ peek = () => this.entries[this.entries.length - 1];
20
+ size = () => this.entries.length;
21
+ getBaseZIndex = () => this.baseZ;
22
+ mount = o => {
23
23
  const entry = {
24
- key,
25
- zIndex: this.resolveZIndex(options.zIndex),
26
- onClose: options.onClose,
27
- closeOnBack: options.closeOnBack,
28
- lockScroll: options.lockScroll,
29
- type: options.type,
30
- meta: options.meta
24
+ key: ++this.keySeed,
25
+ zIndex: this.resolveZ(o.zIndex),
26
+ onClose: o.onClose,
27
+ closeOnBack: o.closeOnBack,
28
+ lockScroll: o.lockScroll,
29
+ type: o.type,
30
+ meta: o.meta
31
31
  };
32
32
  this.entries = [...this.entries, entry];
33
33
  this.emit();
34
34
  return entry;
35
35
  };
36
- update = (key, options) => {
37
- const index = this.entries.findIndex(item => item.key === key);
38
- if (index === -1) return undefined;
39
- const prev = this.entries[index];
36
+ update = (key, o) => {
37
+ const i = this.entries.findIndex(e => e.key === key);
38
+ if (i === -1) return undefined;
40
39
  const next = {
41
- ...prev,
42
- ...options,
43
- zIndex: isNumber(options.zIndex) ? this.resolveZIndex(options.zIndex) : prev.zIndex
40
+ ...this.entries[i],
41
+ ...o,
42
+ zIndex: isNumber(o.zIndex) ? this.resolveZ(o.zIndex) : this.entries[i].zIndex
44
43
  };
45
- this.entries = [...this.entries.slice(0, index), next, ...this.entries.slice(index + 1)];
44
+ this.entries = [...this.entries.slice(0, i), next, ...this.entries.slice(i + 1)];
46
45
  this.emit();
47
46
  return next;
48
47
  };
49
48
  unmount = key => {
50
- const next = this.entries.filter(entry => entry.key !== key);
51
- if (next.length === this.entries.length) {
52
- return;
49
+ const next = this.entries.filter(e => e.key !== key);
50
+ if (next.length !== this.entries.length) {
51
+ this.entries = next;
52
+ this.emit();
53
53
  }
54
- this.entries = next;
55
- this.emit();
56
54
  };
57
- peek = () => this.entries[this.entries.length - 1];
58
- size = () => this.entries.length;
59
- getBaseZIndex = () => this.baseZIndex;
60
- resolveZIndex = provided => {
61
- if (isNumber(provided)) {
62
- if (!Number.isFinite(provided) || provided < 0) {
63
- return this.baseZIndex;
64
- }
65
- return provided >= this.baseZIndex ? provided : this.baseZIndex + provided;
66
- }
55
+ resolveZ = v => {
56
+ if (isNumber(v)) return !Number.isFinite(v) || v < 0 ? this.baseZ : v >= this.baseZ ? v : this.baseZ + v;
67
57
  const top = this.peek();
68
- if (!top) {
69
- return this.baseZIndex;
70
- }
71
- return top.zIndex + this.zIndexStep;
58
+ return top ? top.zIndex + this.zStep : this.baseZ;
72
59
  };
73
60
  emit = () => {
74
- this.listeners.forEach(listener => {
75
- listener();
76
- });
61
+ this.listeners.forEach(l => l());
77
62
  };
78
63
  }
79
64
  export const overlayStackStore = new OverlayStackStore();
80
- let backHandlerSubscription = null;
81
- const syncBackHandler = () => {
65
+ let backSub = null;
66
+ const syncBack = () => {
82
67
  if (Platform.OS === 'web') return;
83
68
  const entries = overlayStackStore.getSnapshot();
84
- const hasClosable = entries.some(entry => entry.closeOnBack && entry.onClose);
85
- if (hasClosable && !backHandlerSubscription && BackHandler?.addEventListener) {
86
- backHandlerSubscription = BackHandler.addEventListener('hardwareBackPress', () => {
87
- const currentEntries = overlayStackStore.getSnapshot();
88
- for (let i = currentEntries.length - 1; i >= 0; i -= 1) {
89
- const entry = currentEntries[i];
90
- if (entry.closeOnBack && entry.onClose) {
91
- entry.onClose();
69
+ const has = entries.some(e => e.closeOnBack && e.onClose);
70
+ if (has && !backSub && BackHandler?.addEventListener) {
71
+ backSub = BackHandler.addEventListener('hardwareBackPress', () => {
72
+ const cur = overlayStackStore.getSnapshot();
73
+ for (let i = cur.length - 1; i >= 0; i--) {
74
+ if (cur[i].closeOnBack && cur[i].onClose) {
75
+ cur[i].onClose();
92
76
  return true;
93
77
  }
94
78
  }
@@ -96,18 +80,14 @@ const syncBackHandler = () => {
96
80
  });
97
81
  return;
98
82
  }
99
- if (!hasClosable && backHandlerSubscription) {
100
- backHandlerSubscription.remove();
101
- backHandlerSubscription = null;
83
+ if (!has && backSub) {
84
+ backSub.remove();
85
+ backSub = null;
102
86
  }
103
87
  };
104
- const syncScrollLock = () => {
105
- const shouldLock = overlayStackStore.getSnapshot().some(entry => entry.lockScroll);
106
- setBodyScrollLocked(shouldLock);
107
- };
108
- const handleStoreChange = () => {
109
- syncBackHandler();
110
- syncScrollLock();
88
+ const onChange = () => {
89
+ syncBack();
90
+ setBodyScrollLocked(overlayStackStore.getSnapshot().some(e => e.lockScroll));
111
91
  };
112
- overlayStackStore.subscribe(handleStoreChange);
113
- handleStoreChange();
92
+ overlayStackStore.subscribe(onChange);
93
+ onChange();
@@ -1,17 +1,15 @@
1
1
  import { useEffect, useRef, useSyncExternalStore } from 'react';
2
2
  import { overlayStackStore } from './OverlayStackStore';
3
- const useOverlayEntries = () => useSyncExternalStore(overlayStackStore.subscribe, overlayStackStore.getSnapshot, overlayStackStore.getSnapshot);
3
+ const useEntries = () => useSyncExternalStore(overlayStackStore.subscribe, overlayStackStore.getSnapshot, overlayStackStore.getSnapshot);
4
4
  export const useOverlayStack = ({
5
5
  visible,
6
6
  ...options
7
7
  }) => {
8
- const entries = useOverlayEntries();
8
+ const entries = useEntries();
9
9
  const entryRef = useRef(null);
10
- const optionsRef = useRef(options);
11
- if (optionsRef.current.onClose !== options.onClose || optionsRef.current.closeOnBack !== options.closeOnBack || optionsRef.current.lockScroll !== options.lockScroll || optionsRef.current.zIndex !== options.zIndex || optionsRef.current.type !== options.type || optionsRef.current.meta !== options.meta) {
12
- optionsRef.current = options;
13
- }
14
- const stableOptions = optionsRef.current;
10
+ const optRef = useRef(options);
11
+ if (optRef.current.onClose !== options.onClose || optRef.current.closeOnBack !== options.closeOnBack || optRef.current.lockScroll !== options.lockScroll || optRef.current.zIndex !== options.zIndex || optRef.current.type !== options.type || optRef.current.meta !== options.meta) optRef.current = options;
12
+ const opts = optRef.current;
15
13
  useEffect(() => {
16
14
  if (!visible) {
17
15
  if (entryRef.current) {
@@ -20,8 +18,7 @@ export const useOverlayStack = ({
20
18
  }
21
19
  return;
22
20
  }
23
- const entry = overlayStackStore.mount(stableOptions);
24
- entryRef.current = entry;
21
+ entryRef.current = overlayStackStore.mount(opts);
25
22
  return () => {
26
23
  if (entryRef.current) {
27
24
  overlayStackStore.unmount(entryRef.current.key);
@@ -30,17 +27,14 @@ export const useOverlayStack = ({
30
27
  };
31
28
  }, [visible]);
32
29
  useEffect(() => {
33
- if (!visible || !entryRef.current) {
34
- return;
35
- }
36
- overlayStackStore.update(entryRef.current.key, stableOptions);
37
- }, [stableOptions, visible]);
38
- const current = entryRef.current;
39
- const snapshotEntry = current ? entries.find(entry => entry.key === current.key) : undefined;
30
+ if (visible && entryRef.current) overlayStackStore.update(entryRef.current.key, opts);
31
+ }, [opts, visible]);
32
+ const cur = entryRef.current;
33
+ const snap = cur ? entries.find(e => e.key === cur.key) : undefined;
40
34
  const top = entries[entries.length - 1];
41
35
  return {
42
- entryKey: snapshotEntry?.key ?? null,
43
- zIndex: snapshotEntry?.zIndex ?? stableOptions.zIndex,
44
- isTopMost: !!snapshotEntry && !!top && top.key === snapshotEntry.key
36
+ entryKey: snap?.key ?? null,
37
+ zIndex: snap?.zIndex ?? opts.zIndex,
38
+ isTopMost: !!snap && !!top && top.key === snap.key
45
39
  };
46
40
  };
@@ -8,33 +8,22 @@ function useControllableValue(props = {}, options = {}) {
8
8
  valuePropName = 'value',
9
9
  trigger = 'onChange'
10
10
  } = options;
11
- const propsRecord = props;
12
- const isControlled = hasProp(props, valuePropName);
13
- const value = propsRecord[valuePropName];
14
- const [internalValue, setInternalValue] = useState(() => {
15
- if (isControlled) {
16
- return value;
17
- }
18
- if (hasProp(props, defaultValuePropName)) {
19
- return propsRecord[defaultValuePropName];
20
- }
11
+ const p = props;
12
+ const ctrl = hasProp(props, valuePropName);
13
+ const val = p[valuePropName];
14
+ const [intVal, setIntVal] = useState(() => {
15
+ if (ctrl) return val;
16
+ if (hasProp(props, defaultValuePropName)) return p[defaultValuePropName];
21
17
  return defaultValue;
22
18
  });
23
- const mergedValue = isControlled ? value : internalValue;
24
- const handlerRef = useRef(propsRecord[trigger]);
19
+ const hRef = useRef(p[trigger]);
25
20
  useEffect(() => {
26
- handlerRef.current = propsRecord[trigger];
21
+ hRef.current = p[trigger];
27
22
  }, [props, trigger]);
28
- const triggerChange = useCallback((nextValue, ...args) => {
29
- if (!isControlled) {
30
- setInternalValue(nextValue);
31
- }
32
- const handler = handlerRef.current;
33
- if (isFunction(handler)) {
34
- ;
35
- handler(nextValue, ...args);
36
- }
37
- }, [isControlled]);
38
- return [mergedValue, triggerChange];
23
+ const setVal = useCallback((next, ...args) => {
24
+ if (!ctrl) setIntVal(next);
25
+ if (isFunction(hRef.current)) hRef.current(next, ...args);
26
+ }, [ctrl]);
27
+ return [ctrl ? val : intVal, setVal];
39
28
  }
40
29
  export default useControllableValue;
@@ -1,19 +1,14 @@
1
1
  import { useCallback, useEffect, useRef, useState } from 'react';
2
2
  import { isNumber } from '../utils/validate';
3
3
  const parseTime = time => {
4
- const total = Math.max(time, 0);
5
- const days = Math.floor(total / (24 * 60 * 60 * 1000));
6
- const hours = Math.floor(total % (24 * 60 * 60 * 1000) / (60 * 60 * 1000));
7
- const minutes = Math.floor(total % (60 * 60 * 1000) / (60 * 1000));
8
- const seconds = Math.floor(total % (60 * 1000) / 1000);
9
- const milliseconds = total % 1000;
4
+ const t = Math.max(time, 0);
10
5
  return {
11
- total,
12
- days,
13
- hours,
14
- minutes,
15
- seconds,
16
- milliseconds
6
+ total: t,
7
+ days: Math.floor(t / 86400000),
8
+ hours: Math.floor(t % 86400000 / 3600000),
9
+ minutes: Math.floor(t % 3600000 / 60000),
10
+ seconds: Math.floor(t % 60000 / 1000),
11
+ milliseconds: t % 1000
17
12
  };
18
13
  };
19
14
  const useCountDown = options => {
@@ -24,11 +19,11 @@ const useCountDown = options => {
24
19
  onFinish
25
20
  } = options;
26
21
  const timeRef = useRef(time);
27
- const millisecondRef = useRef(millisecond);
22
+ const msRef = useRef(millisecond);
28
23
  const onChangeRef = useRef(onChange);
29
24
  const onFinishRef = useRef(onFinish);
30
25
  timeRef.current = time;
31
- millisecondRef.current = millisecond;
26
+ msRef.current = millisecond;
32
27
  onChangeRef.current = onChange;
33
28
  onFinishRef.current = onFinish;
34
29
  const remainRef = useRef(Math.max(0, time));
@@ -36,34 +31,31 @@ const useCountDown = options => {
36
31
  const timerRef = useRef(null);
37
32
  const countingRef = useRef(false);
38
33
  const [current, setCurrent] = useState(() => parseTime(remainRef.current));
39
- const clearTimer = useCallback(() => {
34
+ const clear = useCallback(() => {
40
35
  if (timerRef.current) {
41
36
  clearTimeout(timerRef.current);
42
37
  timerRef.current = null;
43
38
  }
44
39
  }, []);
45
- const update = useCallback(remain => {
46
- remainRef.current = remain;
47
- const next = parseTime(remain);
40
+ const update = useCallback(rem => {
41
+ remainRef.current = rem;
42
+ const next = parseTime(rem);
48
43
  setCurrent(next);
49
44
  onChangeRef.current?.(next);
50
- if (remain === 0) {
45
+ if (rem === 0) {
51
46
  countingRef.current = false;
52
- clearTimer();
47
+ clear();
53
48
  onFinishRef.current?.();
54
49
  }
55
- }, [clearTimer]);
50
+ }, [clear]);
56
51
  const tick = useCallback(() => {
57
52
  if (!countingRef.current) return;
58
- clearTimer();
59
- const remain = Math.max(endTimeRef.current - Date.now(), 0);
60
- update(remain);
61
- if (remain <= 0) return;
62
- const delay = millisecondRef.current ? Math.max(1, Math.min(30, remain)) : Math.max(1, Math.min(remain, remain % 1000 + 1));
63
- timerRef.current = setTimeout(() => {
64
- tick();
65
- }, delay);
66
- }, [clearTimer, update]);
53
+ clear();
54
+ const rem = Math.max(endTimeRef.current - Date.now(), 0);
55
+ update(rem);
56
+ if (rem <= 0) return;
57
+ timerRef.current = setTimeout(tick, msRef.current ? Math.max(1, Math.min(30, rem)) : Math.max(1, Math.min(rem, rem % 1000 + 1)));
58
+ }, [clear, update]);
67
59
  const start = useCallback(() => {
68
60
  if (countingRef.current || remainRef.current <= 0) return;
69
61
  countingRef.current = true;
@@ -74,16 +66,16 @@ const useCountDown = options => {
74
66
  if (!countingRef.current) return;
75
67
  countingRef.current = false;
76
68
  remainRef.current = Math.max(endTimeRef.current - Date.now(), 0);
77
- clearTimer();
78
- }, [clearTimer]);
79
- const reset = useCallback(newTime => {
69
+ clear();
70
+ }, [clear]);
71
+ const reset = useCallback(newT => {
80
72
  pause();
81
- const next = Math.max(0, isNumber(newTime) ? newTime : timeRef.current);
82
- remainRef.current = next;
83
- endTimeRef.current = Date.now() + next;
84
- setCurrent(parseTime(next));
73
+ const n = Math.max(0, isNumber(newT) ? newT : timeRef.current);
74
+ remainRef.current = n;
75
+ endTimeRef.current = Date.now() + n;
76
+ setCurrent(parseTime(n));
85
77
  }, [pause]);
86
- useEffect(() => () => clearTimer(), [clearTimer]);
78
+ useEffect(() => () => clear(), [clear]);
87
79
  return {
88
80
  start,
89
81
  pause,