react-native-system-ui 0.0.4 → 0.0.6

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 (371) hide show
  1. package/dist/cjs/components/action-sheet/ActionSheet.js +28 -22
  2. package/dist/cjs/components/area/Area.js +72 -6
  3. package/dist/cjs/components/area/tokens.js +11 -0
  4. package/dist/cjs/components/avatar/Avatar.js +42 -10
  5. package/dist/cjs/components/badge/Badge.js +10 -10
  6. package/dist/cjs/components/badge/tokens.js +4 -0
  7. package/dist/cjs/components/button/Button.js +16 -65
  8. package/dist/cjs/components/button/ButtonContext.js +7 -10
  9. package/dist/cjs/components/button/ButtonGroup.js +13 -15
  10. package/dist/cjs/components/button/tokens.js +1 -5
  11. package/dist/cjs/components/calendar/Calendar.js +23 -12
  12. package/dist/cjs/components/cascader/Cascader.js +18 -13
  13. package/dist/cjs/components/cell/Cell.js +3 -3
  14. package/dist/cjs/components/cell/CellGroup.js +26 -21
  15. package/dist/cjs/components/checkbox/Checkbox.js +5 -4
  16. package/dist/cjs/components/checkbox/CheckboxContext.js +7 -10
  17. package/dist/cjs/components/checkbox/CheckboxGroup.js +24 -21
  18. package/dist/cjs/components/circle/Circle.js +6 -6
  19. package/dist/cjs/components/collapse/Collapse.js +10 -10
  20. package/dist/cjs/components/config-provider/locale/en-US.js +66 -4
  21. package/dist/cjs/components/config-provider/locale/zh-CN.js +74 -2
  22. package/dist/cjs/components/config-provider/tokens.js +11 -0
  23. package/dist/cjs/components/count-down/CountDown.js +6 -6
  24. package/dist/cjs/components/datetime-picker/DatetimePicker.js +6 -6
  25. package/dist/cjs/components/datetime-picker/tokens.js +11 -0
  26. package/dist/cjs/components/dialog/Dialog.js +39 -34
  27. package/dist/cjs/components/dialog/tokens.js +1 -4
  28. package/dist/cjs/components/divider/Divider.js +36 -1
  29. package/dist/cjs/components/field/Field.js +303 -201
  30. package/dist/cjs/components/flex/Flex.js +7 -3
  31. package/dist/cjs/components/flex/FlexContext.js +7 -14
  32. package/dist/cjs/components/form/Form.js +112 -122
  33. package/dist/cjs/components/form/FormContext.js +7 -10
  34. package/dist/cjs/components/form/FormItem.js +30 -4
  35. package/dist/cjs/components/form/FormList.js +16 -3
  36. package/dist/cjs/components/form/tokens.js +11 -0
  37. package/dist/cjs/components/form/utils.js +2 -1
  38. package/dist/cjs/components/grid/Grid.js +45 -31
  39. package/dist/cjs/components/grid/GridContext.js +7 -10
  40. package/dist/cjs/components/grid/GridItem.js +22 -22
  41. package/dist/cjs/components/image/Image.js +17 -13
  42. package/dist/cjs/components/image-preview/ImagePreview.js +43 -41
  43. package/dist/cjs/components/index.js +43 -141
  44. package/dist/cjs/components/input/Input.js +19 -5
  45. package/dist/cjs/components/loading/Loading.js +10 -139
  46. package/dist/cjs/components/loading/tokens.js +0 -24
  47. package/dist/cjs/components/notice-bar/NoticeBar.js +45 -41
  48. package/dist/cjs/components/notify/Notify.js +72 -30
  49. package/dist/cjs/components/notify/imperative.js +2 -2
  50. package/dist/cjs/components/notify/tokens.js +11 -1
  51. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +6 -6
  52. package/dist/cjs/components/overlay/Overlay.js +70 -77
  53. package/dist/cjs/components/overlay/index.js +13 -27
  54. package/dist/cjs/components/overlay/tokens.js +4 -31
  55. package/dist/cjs/components/password-input/PasswordInput.js +2 -41
  56. package/dist/cjs/components/password-input/tokens.js +53 -0
  57. package/dist/cjs/components/picker/Picker.js +618 -38
  58. package/dist/cjs/components/popup/Popup.js +60 -47
  59. package/dist/cjs/components/portal/Portal.js +39 -31
  60. package/dist/cjs/components/portal/PortalHost.js +258 -213
  61. package/dist/cjs/components/portal/tokens.js +11 -0
  62. package/dist/cjs/components/progress/Progress.js +77 -36
  63. package/dist/cjs/components/progress/index.js +6 -0
  64. package/dist/cjs/components/radio/Radio.js +35 -12
  65. package/dist/cjs/components/radio/RadioContext.js +7 -10
  66. package/dist/cjs/components/radio/RadioGroup.js +23 -20
  67. package/dist/cjs/components/safe-area-view/tokens.js +11 -0
  68. package/dist/cjs/components/search/Search.js +16 -16
  69. package/dist/cjs/components/selector/Selector.js +6 -6
  70. package/dist/cjs/components/share-sheet/ShareSheet.js +50 -46
  71. package/dist/cjs/components/sidebar/Sidebar.js +27 -22
  72. package/dist/cjs/components/sidebar/SidebarItem.js +27 -22
  73. package/dist/cjs/components/skeleton/Skeleton.js +34 -21
  74. package/dist/cjs/components/slider/Slider.js +135 -78
  75. package/dist/cjs/components/stepper/Stepper.js +12 -10
  76. package/dist/cjs/components/swiper/Swiper.js +247 -710
  77. package/dist/cjs/components/swiper/SwiperItem.js +5 -33
  78. package/dist/cjs/components/swiper/tokens.js +11 -0
  79. package/dist/cjs/components/switch/Switch.js +46 -98
  80. package/dist/cjs/components/switch/tokens.js +1 -55
  81. package/dist/cjs/components/tabbar/Tabbar.js +26 -22
  82. package/dist/cjs/components/tabbar/TabbarItem.js +23 -22
  83. package/dist/cjs/components/tabbar/tokens.js +0 -2
  84. package/dist/cjs/components/tabs/Tabs.js +268 -94
  85. package/dist/cjs/components/tabs/index.js +4 -5
  86. package/dist/cjs/components/toast/Toast.js +72 -27
  87. package/dist/cjs/components/toast/imperative.js +2 -2
  88. package/dist/cjs/hooks/gesture/useGestureScroll.js +1 -2
  89. package/dist/cjs/hooks/index.js +12 -12
  90. package/dist/cjs/hooks/overlay/index.js +27 -0
  91. package/dist/cjs/hooks/useHairline.js +0 -4
  92. package/dist/cjs/platform/scrollLock.js +1 -1
  93. package/dist/cjs/utils/compare.js +26 -0
  94. package/dist/cjs/utils/index.js +11 -0
  95. package/dist/es/components/action-sheet/ActionSheet.js +29 -23
  96. package/dist/es/components/area/Area.js +73 -7
  97. package/dist/es/components/area/tokens.js +5 -0
  98. package/dist/es/components/avatar/Avatar.js +42 -10
  99. package/dist/es/components/badge/Badge.js +11 -11
  100. package/dist/es/components/badge/tokens.js +4 -0
  101. package/dist/es/components/button/Button.js +17 -65
  102. package/dist/es/components/button/ButtonContext.js +1 -2
  103. package/dist/es/components/button/ButtonGroup.js +10 -12
  104. package/dist/es/components/button/tokens.js +1 -5
  105. package/dist/es/components/calendar/Calendar.js +24 -13
  106. package/dist/es/components/cascader/Cascader.js +16 -11
  107. package/dist/es/components/cell/Cell.js +4 -4
  108. package/dist/es/components/cell/CellGroup.js +25 -20
  109. package/dist/es/components/checkbox/Checkbox.js +5 -4
  110. package/dist/es/components/checkbox/CheckboxContext.js +1 -2
  111. package/dist/es/components/checkbox/CheckboxGroup.js +24 -21
  112. package/dist/es/components/circle/Circle.js +7 -7
  113. package/dist/es/components/collapse/Collapse.js +11 -11
  114. package/dist/es/components/config-provider/locale/en-US.js +66 -4
  115. package/dist/es/components/config-provider/locale/zh-CN.js +74 -2
  116. package/dist/es/components/config-provider/tokens.js +5 -0
  117. package/dist/es/components/count-down/CountDown.js +7 -7
  118. package/dist/es/components/datetime-picker/DatetimePicker.js +7 -7
  119. package/dist/es/components/datetime-picker/tokens.js +5 -0
  120. package/dist/es/components/dialog/Dialog.js +40 -35
  121. package/dist/es/components/dialog/tokens.js +1 -4
  122. package/dist/es/components/divider/Divider.js +36 -1
  123. package/dist/es/components/field/Field.js +304 -202
  124. package/dist/es/components/flex/Flex.js +5 -1
  125. package/dist/es/components/flex/FlexContext.js +1 -6
  126. package/dist/es/components/form/Form.js +89 -99
  127. package/dist/es/components/form/FormContext.js +1 -2
  128. package/dist/es/components/form/FormItem.js +32 -6
  129. package/dist/es/components/form/FormList.js +18 -5
  130. package/dist/es/components/form/tokens.js +5 -0
  131. package/dist/es/components/form/utils.js +1 -0
  132. package/dist/es/components/grid/Grid.js +43 -29
  133. package/dist/es/components/grid/GridContext.js +1 -2
  134. package/dist/es/components/grid/GridItem.js +24 -24
  135. package/dist/es/components/image/Image.js +18 -14
  136. package/dist/es/components/image-preview/ImagePreview.js +44 -42
  137. package/dist/es/components/index.js +2 -17
  138. package/dist/es/components/input/Input.js +20 -6
  139. package/dist/es/components/loading/Loading.js +10 -139
  140. package/dist/es/components/loading/tokens.js +0 -24
  141. package/dist/es/components/notice-bar/NoticeBar.js +46 -42
  142. package/dist/es/components/notify/Notify.js +72 -30
  143. package/dist/es/components/notify/imperative.js +2 -2
  144. package/dist/es/components/notify/tokens.js +5 -1
  145. package/dist/es/components/number-keyboard/NumberKeyboard.js +7 -7
  146. package/dist/es/components/overlay/Overlay.js +58 -75
  147. package/dist/es/components/overlay/index.js +3 -4
  148. package/dist/es/components/overlay/tokens.js +3 -29
  149. package/dist/es/components/password-input/PasswordInput.js +1 -40
  150. package/dist/es/components/password-input/tokens.js +41 -0
  151. package/dist/es/components/picker/Picker.js +610 -34
  152. package/dist/es/components/popup/Popup.js +62 -49
  153. package/dist/es/components/portal/Portal.js +37 -31
  154. package/dist/es/components/portal/PortalHost.js +257 -211
  155. package/dist/es/components/portal/tokens.js +5 -0
  156. package/dist/es/components/progress/Progress.js +76 -36
  157. package/dist/es/components/progress/index.js +2 -1
  158. package/dist/es/components/radio/Radio.js +37 -14
  159. package/dist/es/components/radio/RadioContext.js +1 -2
  160. package/dist/es/components/radio/RadioGroup.js +23 -20
  161. package/dist/es/components/safe-area-view/tokens.js +5 -0
  162. package/dist/es/components/search/Search.js +17 -17
  163. package/dist/es/components/selector/Selector.js +7 -7
  164. package/dist/es/components/share-sheet/ShareSheet.js +51 -47
  165. package/dist/es/components/sidebar/Sidebar.js +26 -21
  166. package/dist/es/components/sidebar/SidebarItem.js +26 -22
  167. package/dist/es/components/skeleton/Skeleton.js +35 -22
  168. package/dist/es/components/slider/Slider.js +132 -75
  169. package/dist/es/components/stepper/Stepper.js +13 -11
  170. package/dist/es/components/swiper/Swiper.js +248 -711
  171. package/dist/es/components/swiper/SwiperItem.js +1 -21
  172. package/dist/es/components/swiper/tokens.js +5 -0
  173. package/dist/es/components/switch/Switch.js +49 -101
  174. package/dist/es/components/switch/tokens.js +1 -49
  175. package/dist/es/components/tabbar/Tabbar.js +27 -23
  176. package/dist/es/components/tabbar/TabbarItem.js +22 -22
  177. package/dist/es/components/tabbar/tokens.js +0 -2
  178. package/dist/es/components/tabs/Tabs.js +264 -90
  179. package/dist/es/components/tabs/index.js +1 -2
  180. package/dist/es/components/toast/Toast.js +72 -28
  181. package/dist/es/components/toast/imperative.js +2 -2
  182. package/dist/es/hooks/gesture/useGestureScroll.js +1 -2
  183. package/dist/es/hooks/index.js +1 -1
  184. package/dist/es/hooks/overlay/index.js +3 -0
  185. package/dist/es/hooks/useHairline.js +0 -4
  186. package/dist/es/platform/scrollLock.js +1 -1
  187. package/dist/es/utils/compare.js +18 -0
  188. package/dist/es/utils/index.js +1 -1
  189. package/dist/types/components/area/tokens.d.ts +3 -0
  190. package/dist/types/components/avatar/Avatar.d.ts +4 -2
  191. package/dist/types/components/button/ButtonContext.d.ts +2 -16
  192. package/dist/types/components/button/ButtonGroup.d.ts +14 -1
  193. package/dist/types/components/button/index.d.ts +1 -1
  194. package/dist/types/components/checkbox/CheckboxContext.d.ts +2 -16
  195. package/dist/types/components/checkbox/CheckboxGroup.d.ts +15 -1
  196. package/dist/types/components/collapse/Collapse.d.ts +0 -1
  197. package/dist/types/components/config-provider/LocaleContext.d.ts +2 -74
  198. package/dist/types/components/config-provider/tokens.d.ts +3 -0
  199. package/dist/types/components/config-provider/useLocale.d.ts +1 -74
  200. package/dist/types/components/datetime-picker/tokens.d.ts +3 -0
  201. package/dist/types/components/flex/Flex.d.ts +6 -0
  202. package/dist/types/components/flex/FlexContext.d.ts +2 -8
  203. package/dist/types/components/form/Form.d.ts +15 -1
  204. package/dist/types/components/form/FormContext.d.ts +2 -17
  205. package/dist/types/components/form/tokens.d.ts +3 -0
  206. package/dist/types/components/form/utils.d.ts +1 -0
  207. package/dist/types/components/grid/Grid.d.ts +16 -1
  208. package/dist/types/components/grid/GridContext.d.ts +2 -17
  209. package/dist/types/components/index.d.ts +3 -33
  210. package/dist/types/components/loading/index.d.ts +1 -1
  211. package/dist/types/components/notify/Notify.d.ts +1 -0
  212. package/dist/types/components/overlay/Overlay.d.ts +6 -1
  213. package/dist/types/components/overlay/index.d.ts +2 -3
  214. package/dist/types/components/overlay/tokens.d.ts +2 -3
  215. package/dist/types/components/password-input/PasswordInput.d.ts +0 -39
  216. package/dist/types/components/password-input/tokens.d.ts +40 -0
  217. package/dist/types/components/picker/Picker.d.ts +18 -2
  218. package/dist/types/components/picker/index.d.ts +1 -1
  219. package/dist/types/components/portal/Portal.d.ts +4 -6
  220. package/dist/types/components/portal/PortalHost.d.ts +1 -15
  221. package/dist/types/components/portal/tokens.d.ts +3 -0
  222. package/dist/types/components/progress/Progress.d.ts +4 -0
  223. package/dist/types/components/progress/index.d.ts +2 -1
  224. package/dist/types/components/radio/RadioContext.d.ts +2 -13
  225. package/dist/types/components/radio/RadioGroup.d.ts +12 -1
  226. package/dist/types/components/safe-area-view/tokens.d.ts +3 -0
  227. package/dist/types/components/swiper/Swiper.d.ts +4 -2
  228. package/dist/types/components/swiper/SwiperItem.d.ts +1 -5
  229. package/dist/types/components/swiper/tokens.d.ts +3 -0
  230. package/dist/types/components/tabs/Tabs.d.ts +8 -4
  231. package/dist/types/components/tabs/index.d.ts +3 -1
  232. package/dist/types/components/toast/Toast.d.ts +1 -4
  233. package/dist/types/hooks/aria/useAriaListBox.d.ts +0 -6
  234. package/dist/types/hooks/aria/useAriaOverlay.d.ts +0 -10
  235. package/dist/types/hooks/aria/useAriaPress.d.ts +0 -20
  236. package/dist/types/hooks/aria/useAriaToggle.d.ts +0 -3
  237. package/dist/types/hooks/index.d.ts +1 -1
  238. package/dist/types/hooks/overlay/index.d.ts +2 -0
  239. package/dist/types/hooks/useHairline.d.ts +0 -21
  240. package/dist/types/utils/compare.d.ts +2 -0
  241. package/dist/types/utils/index.d.ts +1 -0
  242. package/package.json +10 -48
  243. package/dist/cjs/components/area/utils.js +0 -74
  244. package/dist/cjs/components/cascader/utils.js +0 -20
  245. package/dist/cjs/components/config-provider/locale/base.js +0 -80
  246. package/dist/cjs/components/dropdown-menu/DropdownItem.js +0 -288
  247. package/dist/cjs/components/dropdown-menu/DropdownMenu.js +0 -340
  248. package/dist/cjs/components/dropdown-menu/DropdownMenuContext.js +0 -21
  249. package/dist/cjs/components/dropdown-menu/index.js +0 -25
  250. package/dist/cjs/components/dropdown-menu/tokens.js +0 -67
  251. package/dist/cjs/components/field/utils.js +0 -24
  252. package/dist/cjs/components/index-bar/IndexAnchor.js +0 -74
  253. package/dist/cjs/components/index-bar/IndexBar.js +0 -436
  254. package/dist/cjs/components/index-bar/index.js +0 -25
  255. package/dist/cjs/components/index-bar/tokens.js +0 -45
  256. package/dist/cjs/components/list/List.js +0 -165
  257. package/dist/cjs/components/list/index.js +0 -9
  258. package/dist/cjs/components/list/tokens.js +0 -39
  259. package/dist/cjs/components/notify/defaults.js +0 -15
  260. package/dist/cjs/components/pagination/Pagination.js +0 -160
  261. package/dist/cjs/components/pagination/index.js +0 -22
  262. package/dist/cjs/components/pagination/tokens.js +0 -103
  263. package/dist/cjs/components/picker/WheelPicker.js +0 -492
  264. package/dist/cjs/components/picker/utils.js +0 -138
  265. package/dist/cjs/components/pull-refresh/PullRefresh.js +0 -378
  266. package/dist/cjs/components/pull-refresh/index.js +0 -16
  267. package/dist/cjs/components/pull-refresh/tokens.js +0 -22
  268. package/dist/cjs/components/rate/Rate.js +0 -269
  269. package/dist/cjs/components/rate/index.js +0 -15
  270. package/dist/cjs/components/rate/tokens.js +0 -60
  271. package/dist/cjs/components/slider/utils.js +0 -60
  272. package/dist/cjs/components/swiper/useSwiperWeb.js +0 -209
  273. package/dist/cjs/components/swiper/utils.js +0 -49
  274. package/dist/cjs/components/tabs/TabPane.js +0 -9
  275. package/dist/cjs/components/tabs/useTabsAnimation.js +0 -74
  276. package/dist/cjs/components/tabs/useTabsScroll.js +0 -133
  277. package/dist/cjs/components/tabs/utils.js +0 -34
  278. package/dist/cjs/components/types.js +0 -1
  279. package/dist/cjs/components/uploader/Uploader.js +0 -557
  280. package/dist/cjs/components/uploader/index.js +0 -22
  281. package/dist/cjs/components/uploader/tokens.js +0 -58
  282. package/dist/cjs/components/uploader/utils.js +0 -72
  283. package/dist/cjs/hooks/usePresenceAnimation.js +0 -70
  284. package/dist/es/components/area/utils.js +0 -67
  285. package/dist/es/components/cascader/utils.js +0 -13
  286. package/dist/es/components/config-provider/locale/base.js +0 -74
  287. package/dist/es/components/dropdown-menu/DropdownItem.js +0 -269
  288. package/dist/es/components/dropdown-menu/DropdownMenu.js +0 -320
  289. package/dist/es/components/dropdown-menu/DropdownMenuContext.js +0 -7
  290. package/dist/es/components/dropdown-menu/index.js +0 -7
  291. package/dist/es/components/dropdown-menu/tokens.js +0 -61
  292. package/dist/es/components/field/utils.js +0 -17
  293. package/dist/es/components/index-bar/IndexAnchor.js +0 -55
  294. package/dist/es/components/index-bar/IndexBar.js +0 -417
  295. package/dist/es/components/index-bar/index.js +0 -7
  296. package/dist/es/components/index-bar/tokens.js +0 -39
  297. package/dist/es/components/list/List.js +0 -145
  298. package/dist/es/components/list/index.js +0 -2
  299. package/dist/es/components/list/tokens.js +0 -32
  300. package/dist/es/components/notify/defaults.js +0 -9
  301. package/dist/es/components/pagination/Pagination.js +0 -141
  302. package/dist/es/components/pagination/index.js +0 -4
  303. package/dist/es/components/pagination/tokens.js +0 -91
  304. package/dist/es/components/picker/WheelPicker.js +0 -473
  305. package/dist/es/components/picker/utils.js +0 -127
  306. package/dist/es/components/pull-refresh/PullRefresh.js +0 -359
  307. package/dist/es/components/pull-refresh/index.js +0 -3
  308. package/dist/es/components/pull-refresh/tokens.js +0 -16
  309. package/dist/es/components/rate/Rate.js +0 -250
  310. package/dist/es/components/rate/index.js +0 -3
  311. package/dist/es/components/rate/tokens.js +0 -53
  312. package/dist/es/components/slider/utils.js +0 -49
  313. package/dist/es/components/swiper/useSwiperWeb.js +0 -190
  314. package/dist/es/components/swiper/utils.js +0 -37
  315. package/dist/es/components/tabs/TabPane.js +0 -3
  316. package/dist/es/components/tabs/useTabsAnimation.js +0 -55
  317. package/dist/es/components/tabs/useTabsScroll.js +0 -114
  318. package/dist/es/components/tabs/utils.js +0 -19
  319. package/dist/es/components/types.js +0 -1
  320. package/dist/es/components/uploader/Uploader.js +0 -537
  321. package/dist/es/components/uploader/index.js +0 -4
  322. package/dist/es/components/uploader/tokens.js +0 -52
  323. package/dist/es/components/uploader/utils.js +0 -60
  324. package/dist/es/hooks/usePresenceAnimation.js +0 -51
  325. package/dist/types/components/area/utils.d.ts +0 -2
  326. package/dist/types/components/cascader/utils.d.ts +0 -6
  327. package/dist/types/components/config-provider/locale/base.d.ts +0 -74
  328. package/dist/types/components/dropdown-menu/DropdownItem.d.ts +0 -4
  329. package/dist/types/components/dropdown-menu/DropdownMenu.d.ts +0 -4
  330. package/dist/types/components/dropdown-menu/DropdownMenuContext.d.ts +0 -17
  331. package/dist/types/components/dropdown-menu/index.d.ts +0 -8
  332. package/dist/types/components/dropdown-menu/tokens.d.ts +0 -52
  333. package/dist/types/components/field/utils.d.ts +0 -4
  334. package/dist/types/components/index-bar/IndexAnchor.d.ts +0 -4
  335. package/dist/types/components/index-bar/IndexBar.d.ts +0 -4
  336. package/dist/types/components/index-bar/index.d.ts +0 -9
  337. package/dist/types/components/index-bar/tokens.d.ts +0 -31
  338. package/dist/types/components/list/List.d.ts +0 -4
  339. package/dist/types/components/list/index.d.ts +0 -3
  340. package/dist/types/components/list/tokens.d.ts +0 -4
  341. package/dist/types/components/notify/defaults.d.ts +0 -10
  342. package/dist/types/components/pagination/Pagination.d.ts +0 -5
  343. package/dist/types/components/pagination/index.d.ts +0 -5
  344. package/dist/types/components/pagination/tokens.d.ts +0 -2
  345. package/dist/types/components/picker/WheelPicker.d.ts +0 -21
  346. package/dist/types/components/picker/utils.d.ts +0 -17
  347. package/dist/types/components/pull-refresh/PullRefresh.d.ts +0 -5
  348. package/dist/types/components/pull-refresh/index.d.ts +0 -4
  349. package/dist/types/components/pull-refresh/tokens.d.ts +0 -10
  350. package/dist/types/components/rate/Rate.d.ts +0 -4
  351. package/dist/types/components/rate/index.d.ts +0 -4
  352. package/dist/types/components/rate/tokens.d.ts +0 -4
  353. package/dist/types/components/slider/utils.d.ts +0 -42
  354. package/dist/types/components/swiper/useSwiperWeb.d.ts +0 -41
  355. package/dist/types/components/swiper/utils.d.ts +0 -17
  356. package/dist/types/components/tabs/TabPane.d.ts +0 -4
  357. package/dist/types/components/tabs/useTabsAnimation.d.ts +0 -30
  358. package/dist/types/components/tabs/useTabsScroll.d.ts +0 -23
  359. package/dist/types/components/tabs/utils.d.ts +0 -5
  360. package/dist/types/components/types.d.ts +0 -59
  361. package/dist/types/components/uploader/Uploader.d.ts +0 -4
  362. package/dist/types/components/uploader/index.d.ts +0 -5
  363. package/dist/types/components/uploader/tokens.d.ts +0 -42
  364. package/dist/types/components/uploader/utils.d.ts +0 -11
  365. package/dist/types/hooks/usePresenceAnimation.d.ts +0 -20
  366. /package/dist/cjs/{components → hooks}/overlay/OverlayStackStore.js +0 -0
  367. /package/dist/cjs/{components → hooks}/overlay/useOverlayStack.js +0 -0
  368. /package/dist/es/{components → hooks}/overlay/OverlayStackStore.js +0 -0
  369. /package/dist/es/{components → hooks}/overlay/useOverlayStack.js +0 -0
  370. /package/dist/types/{components → hooks}/overlay/OverlayStackStore.d.ts +0 -0
  371. /package/dist/types/{components → hooks}/overlay/useOverlayStack.d.ts +0 -0
@@ -1,37 +1,13 @@
1
- import React from 'react';
2
- import { Platform, StyleSheet, View } from 'react-native';
1
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { DeviceEventEmitter, NativeEventEmitter, StyleSheet, View } from 'react-native';
3
3
  import { isNumber } from '../../utils';
4
+ import { OverlayProvider } from '../overlay';
4
5
  import { PortalContext } from './PortalContext';
5
- class PortalLayer extends React.PureComponent {
6
- state = {
7
- entries: []
8
- };
9
- setEntries = entries => {
10
- this.setState(prev => prev.entries === entries ? null : {
11
- entries
12
- });
13
- };
14
- render() {
15
- const {
16
- fixed
17
- } = this.props;
18
- const {
19
- entries
20
- } = this.state;
21
- return /*#__PURE__*/React.createElement(View, {
22
- pointerEvents: "box-none",
23
- style: [styles.portalLayer, fixed && webFixedStyle],
24
- collapsable: false
25
- }, entries.map(entry => /*#__PURE__*/React.createElement(View, {
26
- key: entry.key,
27
- pointerEvents: "box-none",
28
- collapsable: false,
29
- style: [styles.portalEntry, isNumber(entry.zIndex) && {
30
- zIndex: entry.zIndex
31
- }]
32
- }, entry.children)));
33
- }
34
- }
6
+ const ADD_EVENT = 'RNSU_PORTAL_ADD';
7
+ const UPDATE_EVENT = 'RNSU_PORTAL_UPDATE';
8
+ const REMOVE_EVENT = 'RNSU_PORTAL_REMOVE';
9
+ const CLEAR_EVENT = 'RNSU_PORTAL_CLEAR';
10
+ const TopViewEventEmitter = DeviceEventEmitter || new NativeEventEmitter();
35
11
  const getMaxZIndex = node => {
36
12
  if (!node) return undefined;
37
13
  if (Array.isArray(node)) {
@@ -59,156 +35,263 @@ const getMaxZIndex = node => {
59
35
  if (!isNumber(max)) return childMax;
60
36
  return Math.max(max, childMax);
61
37
  };
62
- const hostStack = [];
63
- const portalEntries = new Map();
64
- const emptyEntries = [];
65
- let nextPortalKey = 1;
66
- let snapshotDirty = true;
67
- let snapshotCache = emptyEntries;
68
- const markSnapshotDirty = () => {
69
- snapshotDirty = true;
70
- };
71
- const getEntriesSnapshot = () => {
72
- if (!snapshotDirty) return snapshotCache;
73
- snapshotDirty = false;
74
- snapshotCache = portalEntries.size === 0 ? emptyEntries : Array.from(portalEntries.values());
75
- return snapshotCache;
76
- };
77
- const syncCurrentHost = () => {
78
- const currentHost = hostStack[hostStack.length - 1];
79
- if (currentHost) {
80
- currentHost.setEntries(getEntriesSnapshot());
81
- }
82
- };
83
- const setHostPresence = (host, present) => {
84
- if (present) {
85
- hostStack.push(host);
86
- syncCurrentHost();
87
- maybeTeardownAutoHost();
88
- return;
89
- }
90
- const index = hostStack.lastIndexOf(host);
91
- if (index >= 0) {
92
- hostStack.splice(index, 1);
93
- }
94
- if (hostStack.length === 0) {
95
- clearPortals();
96
- return;
38
+ const applyOperation = (manager, operation) => {
39
+ if (operation.type === 'mount') {
40
+ manager.mount(operation.children, operation.key);
41
+ } else if (operation.type === 'update') {
42
+ manager.update(operation.key, operation.children);
43
+ } else if (operation.type === 'clear') {
44
+ manager.clear();
45
+ } else {
46
+ manager.unmount(operation.key);
97
47
  }
98
- syncCurrentHost();
99
- maybeTeardownAutoHost();
100
48
  };
101
- const mountPortal = (children, key) => {
102
- const resolvedKey = key ?? nextPortalKey++;
103
- portalEntries.set(resolvedKey, {
104
- key: resolvedKey,
105
- children,
106
- zIndex: getMaxZIndex(children)
107
- });
108
- markSnapshotDirty();
109
- syncCurrentHost();
110
- return resolvedKey;
111
- };
112
- const updatePortal = (key, children) => {
113
- const prev = portalEntries.get(key);
114
- if (prev) {
115
- prev.children = children;
116
- prev.zIndex = getMaxZIndex(children);
117
- } else {
118
- portalEntries.set(key, {
119
- key,
49
+ const PortalManagerView = /*#__PURE__*/React.forwardRef((_, ref) => {
50
+ const [entries, setEntries] = useState([]);
51
+ const keySeed = useRef(0);
52
+ const mount = useCallback((children, key) => {
53
+ const resolvedKey = key ?? ++keySeed.current;
54
+ if (isNumber(key) && key >= keySeed.current) {
55
+ keySeed.current = key + 1;
56
+ }
57
+ const entry = {
58
+ key: resolvedKey,
120
59
  children,
121
60
  zIndex: getMaxZIndex(children)
61
+ };
62
+ setEntries(prev => {
63
+ const index = prev.findIndex(item => item.key === resolvedKey);
64
+ if (index === -1) {
65
+ return [...prev, entry];
66
+ }
67
+ return [...prev.slice(0, index), entry, ...prev.slice(index + 1)];
122
68
  });
123
- }
124
- markSnapshotDirty();
125
- syncCurrentHost();
126
- };
127
- const unmountPortal = key => {
128
- if (portalEntries.delete(key)) {
129
- markSnapshotDirty();
130
- syncCurrentHost();
131
- maybeTeardownAutoHost();
132
- }
133
- };
134
- const scheduleTeardown = typeof queueMicrotask === 'function' ? queueMicrotask : task => {
135
- Promise.resolve().then(task);
136
- };
137
- const teardownAutoHost = () => {
138
- if (!autoHostRoot || teardownScheduled) return;
139
- teardownScheduled = true;
140
- scheduleTeardown(() => {
141
- teardownScheduled = false;
142
- if (!autoHostRoot) return;
143
- if (hostStack.length > 1 || portalEntries.size === 0) {
144
- const root = autoHostRoot;
145
- const container = autoHostContainer;
146
- autoHostRoot = null;
147
- autoHostContainer = null;
148
- root.unmount();
149
- if (container?.parentNode) {
150
- container.parentNode.removeChild(container);
69
+ return resolvedKey;
70
+ }, []);
71
+ const update = useCallback((key, children) => {
72
+ setEntries(prev => {
73
+ const index = prev.findIndex(item => item.key === key);
74
+ const entry = {
75
+ key,
76
+ children,
77
+ zIndex: getMaxZIndex(children)
78
+ };
79
+ if (index === -1) {
80
+ return [...prev, entry];
151
81
  }
82
+ return [...prev.slice(0, index), entry, ...prev.slice(index + 1)];
83
+ });
84
+ }, []);
85
+ const unmount = useCallback(key => {
86
+ setEntries(prev => prev.filter(item => item.key !== key));
87
+ }, []);
88
+ const clear = useCallback(() => {
89
+ setEntries([]);
90
+ }, []);
91
+ React.useImperativeHandle(ref, () => ({
92
+ mount,
93
+ update,
94
+ unmount,
95
+ clear
96
+ }), [mount, update, unmount, clear]);
97
+ if (entries.length === 0) return null;
98
+ return /*#__PURE__*/React.createElement(View, {
99
+ pointerEvents: "box-none",
100
+ style: styles.portalLayer,
101
+ collapsable: false
102
+ }, entries.map(entry => /*#__PURE__*/React.createElement(View, {
103
+ key: entry.key,
104
+ pointerEvents: "box-none",
105
+ collapsable: false,
106
+ style: [styles.portalEntry, isNumber(entry.zIndex) && {
107
+ zIndex: entry.zIndex
108
+ }]
109
+ }, entry.children)));
110
+ });
111
+ let activeHostId = 0;
112
+ let nextHostId = 1;
113
+ let nextGlobalKey = 1;
114
+ const globalManager = {
115
+ mount: (children, key) => {
116
+ if (typeof __DEV__ !== 'undefined' && __DEV__ && activeHostId === 0) {
117
+ console.warn('[Portal] 请在根节点挂载 <PortalHost> 或 <ConfigProvider> 以启用静态组件能力。');
152
118
  }
153
- });
154
- };
155
- const maybeTeardownAutoHost = () => {
156
- if (!autoHostRoot) return;
157
- if (hostStack.length > 1 || portalEntries.size === 0) {
158
- teardownAutoHost();
159
- }
160
- };
161
- const clearPortals = () => {
162
- if (portalEntries.size > 0) {
163
- portalEntries.clear();
164
- markSnapshotDirty();
165
- syncCurrentHost();
119
+ const resolvedKey = key ?? nextGlobalKey++;
120
+ if (isNumber(key) && key >= nextGlobalKey) {
121
+ nextGlobalKey = key + 1;
122
+ }
123
+ TopViewEventEmitter.emit(ADD_EVENT, {
124
+ key: resolvedKey,
125
+ children
126
+ });
127
+ return resolvedKey;
128
+ },
129
+ update: (key, children) => {
130
+ TopViewEventEmitter.emit(UPDATE_EVENT, {
131
+ key,
132
+ children
133
+ });
134
+ },
135
+ unmount: key => {
136
+ TopViewEventEmitter.emit(REMOVE_EVENT, {
137
+ key
138
+ });
166
139
  }
167
- maybeTeardownAutoHost();
168
- };
169
- const globalManager = {
170
- mount: mountPortal,
171
- update: updatePortal,
172
- unmount: unmountPortal
173
140
  };
174
- export class PortalHost extends React.Component {
175
- layer = null;
176
- componentWillUnmount() {
177
- if (this.layer) {
178
- setHostPresence(this.layer, false);
179
- this.layer = null;
141
+ export const PortalHost = ({
142
+ children
143
+ }) => {
144
+ const hostIdRef = useRef(nextHostId++);
145
+ const managerRef = useRef(null);
146
+ const queueRef = useRef([]);
147
+ const nextKeyRef = useRef(1);
148
+ const enqueueOrRun = useCallback(operation => {
149
+ const manager = managerRef.current;
150
+ if (manager) {
151
+ applyOperation(manager, operation);
152
+ } else {
153
+ queueRef.current.push(operation);
180
154
  }
181
- }
182
- setLayerRef = layer => {
183
- if (this.layer === layer) return;
184
- if (this.layer) {
185
- setHostPresence(this.layer, false);
155
+ }, []);
156
+ const scopedManager = useMemo(() => ({
157
+ mount: (children, key) => {
158
+ const resolvedKey = key ?? nextKeyRef.current++;
159
+ if (isNumber(key) && key >= nextKeyRef.current) {
160
+ nextKeyRef.current = key + 1;
161
+ }
162
+ enqueueOrRun({
163
+ type: 'mount',
164
+ key: resolvedKey,
165
+ children
166
+ });
167
+ return resolvedKey;
168
+ },
169
+ update: (key, children) => {
170
+ enqueueOrRun({
171
+ type: 'update',
172
+ key,
173
+ children
174
+ });
175
+ },
176
+ unmount: key => {
177
+ enqueueOrRun({
178
+ type: 'unmount',
179
+ key
180
+ });
186
181
  }
187
- this.layer = layer;
188
- if (layer) {
189
- setHostPresence(layer, true);
182
+ }), [enqueueOrRun]);
183
+ const handleManagerRef = useCallback(manager => {
184
+ managerRef.current = manager;
185
+ if (manager) {
186
+ if (queueRef.current.length > 0) {
187
+ const pending = queueRef.current.splice(0, queueRef.current.length);
188
+ pending.forEach(operation => applyOperation(manager, operation));
189
+ }
190
+ if (activeHostId === 0 || activeHostId === hostIdRef.current) {
191
+ activeHostId = hostIdRef.current;
192
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
193
+ console.log('[PortalHost] activeHost', activeHostId);
194
+ }
195
+ } else if (typeof __DEV__ !== 'undefined' && __DEV__) {
196
+ console.warn('[PortalHost] 检测到多个 Portal.Host,静态 API 仅会使用第一个挂载的 Host。建议全局只挂载一个。');
197
+ }
190
198
  }
191
- };
192
- render() {
193
- const {
194
- children,
195
- fixed
196
- } = this.props;
197
- return /*#__PURE__*/React.createElement(PortalContext.Provider, {
198
- value: globalManager
199
- }, /*#__PURE__*/React.createElement(View, {
200
- style: styles.host,
201
- collapsable: false
202
- }, /*#__PURE__*/React.createElement(View, {
203
- style: styles.root,
204
- collapsable: false,
205
- pointerEvents: "box-none"
206
- }, children), /*#__PURE__*/React.createElement(PortalLayer, {
207
- ref: this.setLayerRef,
208
- fixed: fixed
209
- })));
210
- }
211
- }
199
+ }, []);
200
+ useEffect(() => () => {
201
+ if (activeHostId === hostIdRef.current) {
202
+ activeHostId = 0;
203
+ queueRef.current = [];
204
+ portalStore.clear();
205
+ }
206
+ }, []);
207
+ useEffect(() => {
208
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
209
+ console.log('[PortalHost] mounted', {
210
+ hostId: hostIdRef.current,
211
+ activeHostId
212
+ });
213
+ }
214
+ }, []);
215
+ useEffect(() => {
216
+ const handleAdd = ({
217
+ key,
218
+ children
219
+ }) => {
220
+ if (activeHostId !== hostIdRef.current) return;
221
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
222
+ console.log('[PortalHost] add', key);
223
+ }
224
+ enqueueOrRun({
225
+ type: 'mount',
226
+ key,
227
+ children
228
+ });
229
+ };
230
+ const handleUpdate = ({
231
+ key,
232
+ children
233
+ }) => {
234
+ if (activeHostId !== hostIdRef.current) return;
235
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
236
+ console.log('[PortalHost] update', key);
237
+ }
238
+ enqueueOrRun({
239
+ type: 'update',
240
+ key,
241
+ children
242
+ });
243
+ };
244
+ const handleRemove = ({
245
+ key
246
+ }) => {
247
+ if (activeHostId !== hostIdRef.current) return;
248
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
249
+ console.log('[PortalHost] remove', key);
250
+ }
251
+ enqueueOrRun({
252
+ type: 'unmount',
253
+ key
254
+ });
255
+ };
256
+ const handleClear = () => {
257
+ if (activeHostId !== hostIdRef.current) return;
258
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
259
+ console.log('[PortalHost] clear');
260
+ }
261
+ queueRef.current = [];
262
+ enqueueOrRun({
263
+ type: 'clear'
264
+ });
265
+ };
266
+ const addSub = TopViewEventEmitter.addListener(ADD_EVENT, handleAdd);
267
+ const updateSub = TopViewEventEmitter.addListener(UPDATE_EVENT, handleUpdate);
268
+ const removeSub = TopViewEventEmitter.addListener(REMOVE_EVENT, handleRemove);
269
+ const clearSub = TopViewEventEmitter.addListener(CLEAR_EVENT, handleClear);
270
+ return () => {
271
+ addSub.remove?.();
272
+ updateSub.remove?.();
273
+ removeSub.remove?.();
274
+ clearSub.remove?.();
275
+ const emitter = TopViewEventEmitter;
276
+ emitter.removeListener?.(ADD_EVENT, handleAdd);
277
+ emitter.removeListener?.(UPDATE_EVENT, handleUpdate);
278
+ emitter.removeListener?.(REMOVE_EVENT, handleRemove);
279
+ emitter.removeListener?.(CLEAR_EVENT, handleClear);
280
+ };
281
+ }, [enqueueOrRun]);
282
+ return /*#__PURE__*/React.createElement(OverlayProvider, null, /*#__PURE__*/React.createElement(PortalContext.Provider, {
283
+ value: scopedManager
284
+ }, /*#__PURE__*/React.createElement(View, {
285
+ style: styles.host,
286
+ collapsable: false
287
+ }, /*#__PURE__*/React.createElement(View, {
288
+ style: styles.root,
289
+ collapsable: false,
290
+ pointerEvents: "box-none"
291
+ }, children), /*#__PURE__*/React.createElement(PortalManagerView, {
292
+ ref: handleManagerRef
293
+ }))));
294
+ };
212
295
  const styles = StyleSheet.create({
213
296
  host: {
214
297
  position: 'relative',
@@ -224,47 +307,10 @@ const styles = StyleSheet.create({
224
307
  ...StyleSheet.absoluteFillObject
225
308
  }
226
309
  });
227
- const webFixedStyle = Platform.OS === 'web' ? {
228
- position: 'fixed'
229
- } : undefined;
230
- let autoHostContainer = null;
231
- let autoHostRoot = null;
232
- let hostPromise = null;
233
- let teardownScheduled = false;
234
- export const ensureGlobalPortalHost = () => {
235
- if (hostStack.length > 0) {
236
- return Promise.resolve();
237
- }
238
- if (typeof document === 'undefined') {
239
- return Promise.resolve();
240
- }
241
- if (autoHostRoot) return Promise.resolve();
242
- if (hostPromise) return hostPromise;
243
- hostPromise = Promise.resolve().then(async () => {
244
- if (hostStack.length > 0 || autoHostRoot) return;
245
- const doc = document;
246
- const {
247
- createRoot
248
- } = await import('react-dom/client');
249
- if (hostStack.length > 0 || autoHostRoot) return;
250
- autoHostContainer = doc.createElement('div');
251
- autoHostContainer.setAttribute('data-rnsu-portal-host', 'true');
252
- doc.body.appendChild(autoHostContainer);
253
- autoHostRoot = createRoot(autoHostContainer);
254
- autoHostRoot.render(/*#__PURE__*/React.createElement(PortalHost, {
255
- fixed: true
256
- }));
257
- maybeTeardownAutoHost();
258
- }).catch(() => {
259
- teardownAutoHost();
260
- }).finally(() => {
261
- hostPromise = null;
262
- });
263
- return hostPromise;
264
- };
265
310
  export const portalManager = globalManager;
266
311
  export const portalStore = {
267
- clear: clearPortals,
268
- getSnapshot: () => getEntriesSnapshot(),
269
- hasHosts: () => hostStack.length > 0
312
+ clear: () => {
313
+ TopViewEventEmitter.emit(CLEAR_EVENT);
314
+ },
315
+ hasHosts: () => activeHostId !== 0
270
316
  };
@@ -0,0 +1,5 @@
1
+ import { createComponentTokensHook } from '../../design-system';
2
+ const createPortalTokens = _foundations => {
3
+ return {};
4
+ };
5
+ export const usePortalTokens = createComponentTokensHook('portal', createPortalTokens);
@@ -1,9 +1,44 @@
1
1
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
- import React, { memo, useCallback, useEffect, useRef, useState } from 'react';
2
+ import React, { memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
3
3
  import { Animated, Platform, Text, View } from 'react-native';
4
4
  import { clamp, parseNumberLike, parsePercentage, isString, isText } from '../../utils';
5
5
  import { useProgressTokens } from './tokens';
6
6
  const GRADIENT_REGEX = /linear-gradient|radial-gradient|conic-gradient/i;
7
+ const ProgressContext = /*#__PURE__*/React.createContext(null);
8
+ export const ProgressFilledTrack = ({
9
+ style
10
+ }) => {
11
+ const context = useContext(ProgressContext);
12
+ if (!context) return null;
13
+ const indicatorSize = useMemo(() => context.animatedValue.interpolate({
14
+ inputRange: [0, 100],
15
+ outputRange: ['0%', '100%']
16
+ }), [context.animatedValue]);
17
+ const sizeStyle = useMemo(() => context.orientation === 'vertical' ? {
18
+ width: context.height,
19
+ height: indicatorSize,
20
+ bottom: 0,
21
+ left: 0,
22
+ position: 'absolute'
23
+ } : {
24
+ height: context.height,
25
+ width: indicatorSize
26
+ }, [context.height, context.orientation, indicatorSize]);
27
+ const baseStyle = [context.orientation === 'vertical' ? {
28
+ position: 'absolute',
29
+ left: 0,
30
+ bottom: 0
31
+ } : context.layoutIndicator, {
32
+ backgroundColor: context.indicatorColor,
33
+ borderRadius: context.height / 2,
34
+ ...(context.isGradient && context.gradientColor ? {
35
+ backgroundImage: context.gradientColor
36
+ } : null)
37
+ }, sizeStyle, context.indicatorStyle, style];
38
+ return /*#__PURE__*/React.createElement(Animated.View, {
39
+ style: baseStyle
40
+ });
41
+ };
7
42
  export const Progress = /*#__PURE__*/memo(props => {
8
43
  const {
9
44
  tokensOverride,
@@ -22,22 +57,25 @@ export const Progress = /*#__PURE__*/memo(props => {
22
57
  style,
23
58
  pivotStyle,
24
59
  indicatorStyle,
60
+ orientation: orientationProp,
61
+ children,
25
62
  ...rest
26
63
  } = props;
27
64
  const tokens = useProgressTokens(tokensOverride);
28
- const percentage = clamp(parsePercentage(percentageProp ?? tokens.defaults.percentage), 0, 100);
29
- const height = parseNumberLike(strokeWidth, tokens.sizing.height) ?? tokens.sizing.height;
30
- const inactive = inactiveProp ?? tokens.defaults.inactive;
31
- const showPivot = showPivotProp ?? tokens.defaults.showPivot;
32
- const shouldAnimate = (animated ?? transitionProp ?? tokens.defaults.transition) && !inactive;
33
- const duration = Math.max(0, animationDurationProp ?? tokens.defaults.animationDuration);
65
+ const percentage = useMemo(() => clamp(parsePercentage(percentageProp ?? tokens.defaults.percentage), 0, 100), [percentageProp, tokens.defaults.percentage]);
66
+ const height = useMemo(() => parseNumberLike(strokeWidth, tokens.sizing.height) ?? tokens.sizing.height, [strokeWidth, tokens.sizing.height]);
67
+ const inactive = useMemo(() => inactiveProp ?? tokens.defaults.inactive, [inactiveProp, tokens.defaults.inactive]);
68
+ const orientation = orientationProp ?? 'horizontal';
69
+ const showPivot = useMemo(() => orientation === 'vertical' ? false : showPivotProp ?? tokens.defaults.showPivot, [orientation, showPivotProp, tokens.defaults.showPivot]);
70
+ const shouldAnimate = useMemo(() => (animated ?? transitionProp ?? tokens.defaults.transition) && !inactive, [animated, inactive, tokens.defaults.transition, transitionProp]);
71
+ const duration = useMemo(() => Math.max(0, animationDurationProp ?? tokens.defaults.animationDuration), [animationDurationProp, tokens.defaults.animationDuration]);
34
72
  const isGradient = Platform.OS === 'web' && isString(color) && GRADIENT_REGEX.test(color);
35
- const resolvedTrackColor = trackColor ?? tokens.colors.track;
36
- const resolvedIndicatorColor = inactive ? tokens.colors.track : !isGradient ? color ?? tokens.colors.indicator : undefined;
37
- const resolvedPivotBg = pivotColor ?? (isGradient ? inactive ? tokens.colors.track : tokens.colors.indicator : resolvedIndicatorColor);
38
- const resolvedPivotTextColor = textColor ?? tokens.colors.pivotText;
39
- const pivotContent = pivotText ?? `${percentage}%`;
40
- const hasPivot = showPivot && pivotContent !== null && pivotContent !== false;
73
+ const resolvedTrackColor = useMemo(() => trackColor ?? tokens.colors.track, [tokens.colors.track, trackColor]);
74
+ const resolvedIndicatorColor = useMemo(() => inactive ? tokens.colors.track : !isGradient ? color ?? tokens.colors.indicator : undefined, [color, inactive, isGradient, tokens.colors.indicator, tokens.colors.track]);
75
+ const resolvedPivotBg = useMemo(() => pivotColor ?? (isGradient ? inactive ? tokens.colors.track : tokens.colors.indicator : resolvedIndicatorColor), [inactive, isGradient, pivotColor, resolvedIndicatorColor, tokens.colors.indicator, tokens.colors.track]);
76
+ const resolvedPivotTextColor = useMemo(() => textColor ?? tokens.colors.pivotText, [textColor, tokens.colors.pivotText]);
77
+ const pivotContent = useMemo(() => pivotText ?? `${percentage}%`, [percentage, pivotText]);
78
+ const hasPivot = useMemo(() => showPivot && pivotContent !== null && pivotContent !== false, [pivotContent, showPivot]);
41
79
  const animatedValue = useRef(new Animated.Value(percentage)).current;
42
80
  useEffect(() => {
43
81
  if (shouldAnimate && duration > 0) {
@@ -70,13 +108,18 @@ export const Progress = /*#__PURE__*/memo(props => {
70
108
  pivot: width
71
109
  });
72
110
  }, []);
73
- const trackStyle = [tokens.layout.track, {
111
+ const trackStyle = useMemo(() => [tokens.layout.track, orientation === 'vertical' ? {
112
+ width: height,
113
+ height: '100%',
114
+ backgroundColor: resolvedTrackColor,
115
+ borderRadius: height / 2
116
+ } : {
74
117
  height,
75
118
  backgroundColor: resolvedTrackColor,
76
119
  borderRadius: height / 2
77
- }];
78
- let pivotNode = null;
79
- if (hasPivot) {
120
+ }], [height, orientation, resolvedTrackColor, tokens.layout.track]);
121
+ const pivotNode = useMemo(() => {
122
+ if (!hasPivot) return null;
80
123
  const {
81
124
  track: trackW,
82
125
  pivot: pivotW
@@ -111,7 +154,7 @@ export const Progress = /*#__PURE__*/memo(props => {
111
154
  };
112
155
  }
113
156
  }
114
- pivotNode = /*#__PURE__*/React.createElement(Animated.View, {
157
+ return /*#__PURE__*/React.createElement(Animated.View, {
115
158
  style: [pivotContainerStyle, transformStyle],
116
159
  pointerEvents: "none",
117
160
  onLayout: onPivotLayout
@@ -121,12 +164,20 @@ export const Progress = /*#__PURE__*/memo(props => {
121
164
  fontSize: tokens.typography.pivotFontSize
122
165
  }, pivotStyle]
123
166
  }, pivotContent) : pivotContent);
124
- }
125
- const indicatorWidth = animatedValue.interpolate({
126
- inputRange: [0, 100],
127
- outputRange: ['0%', '100%']
128
- });
129
- return /*#__PURE__*/React.createElement(View, _extends({
167
+ }, [animatedValue, hasPivot, height, layout, onPivotLayout, pivotContent, pivotStyle, resolvedPivotBg, resolvedPivotTextColor, tokens.layout.pivot, tokens.layout.pivotText, tokens.sizing.pivotPaddingHorizontal, tokens.sizing.pivotPaddingVertical, tokens.typography.pivotFontSize]);
168
+ const progressContextValue = useMemo(() => ({
169
+ animatedValue,
170
+ orientation,
171
+ height,
172
+ indicatorColor: resolvedIndicatorColor,
173
+ indicatorStyle: indicatorStyle,
174
+ isGradient,
175
+ gradientColor: isGradient ? color : undefined,
176
+ layoutIndicator: tokens.layout.indicator
177
+ }), [animatedValue, color, height, indicatorStyle, isGradient, orientation, resolvedIndicatorColor, tokens.layout.indicator]);
178
+ return /*#__PURE__*/React.createElement(ProgressContext.Provider, {
179
+ value: progressContextValue
180
+ }, /*#__PURE__*/React.createElement(View, _extends({
130
181
  style: style,
131
182
  accessibilityRole: "progressbar",
132
183
  accessibilityValue: {
@@ -137,18 +188,7 @@ export const Progress = /*#__PURE__*/memo(props => {
137
188
  }, rest), /*#__PURE__*/React.createElement(View, {
138
189
  style: trackStyle,
139
190
  onLayout: hasPivot ? onTrackLayout : undefined
140
- }, /*#__PURE__*/React.createElement(Animated.View, {
141
- style: [tokens.layout.indicator, {
142
- height,
143
- backgroundColor: resolvedIndicatorColor,
144
- borderRadius: height / 2,
145
- ...(isGradient && {
146
- backgroundImage: color
147
- })
148
- }, indicatorStyle, {
149
- width: indicatorWidth
150
- }]
151
- })), pivotNode);
191
+ }, children ?? /*#__PURE__*/React.createElement(ProgressFilledTrack, null)), pivotNode));
152
192
  });
153
193
  Progress.displayName = 'Progress';
154
194
  export default Progress;
@@ -1,2 +1,3 @@
1
- import { Progress } from './Progress';
1
+ import { Progress, ProgressFilledTrack } from './Progress';
2
+ export { ProgressFilledTrack };
2
3
  export default Progress;