@xhsreds/reds-rn-next 0.9.1-feat-swiper202511031535 → 0.9.1-feat-0.10.0-rc202511031536

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 (536) hide show
  1. package/coverage/.tmp/coverage-10.json +1 -1
  2. package/coverage/.tmp/coverage-11.json +1 -1
  3. package/coverage/.tmp/coverage-12.json +1 -1
  4. package/coverage/.tmp/coverage-13.json +1 -1
  5. package/coverage/.tmp/coverage-14.json +1 -1
  6. package/coverage/.tmp/coverage-15.json +1 -1
  7. package/coverage/.tmp/coverage-17.json +1 -1
  8. package/coverage/.tmp/coverage-2.json +1 -1
  9. package/coverage/.tmp/coverage-21.json +1 -1
  10. package/coverage/.tmp/coverage-22.json +1 -1
  11. package/coverage/.tmp/coverage-23.json +1 -1
  12. package/coverage/.tmp/coverage-24.json +1 -1
  13. package/coverage/.tmp/coverage-25.json +1 -1
  14. package/coverage/.tmp/coverage-26.json +1 -1
  15. package/coverage/.tmp/coverage-27.json +1 -1
  16. package/coverage/.tmp/coverage-3.json +1 -1
  17. package/coverage/.tmp/coverage-30.json +1 -1
  18. package/coverage/.tmp/coverage-31.json +1 -1
  19. package/coverage/.tmp/coverage-32.json +1 -1
  20. package/coverage/.tmp/coverage-33.json +1 -1
  21. package/coverage/.tmp/coverage-34.json +1 -1
  22. package/coverage/.tmp/coverage-35.json +1 -1
  23. package/coverage/.tmp/coverage-36.json +1 -1
  24. package/coverage/.tmp/coverage-37.json +1 -1
  25. package/coverage/.tmp/coverage-38.json +1 -1
  26. package/coverage/.tmp/coverage-39.json +1 -1
  27. package/coverage/.tmp/coverage-4.json +1 -1
  28. package/coverage/.tmp/coverage-40.json +1 -1
  29. package/coverage/.tmp/coverage-41.json +1 -1
  30. package/coverage/.tmp/coverage-42.json +1 -1
  31. package/coverage/.tmp/coverage-5.json +1 -1
  32. package/coverage/.tmp/coverage-6.json +1 -1
  33. package/coverage/.tmp/coverage-7.json +1 -1
  34. package/coverage/.tmp/coverage-8.json +1 -1
  35. package/coverage/.tmp/coverage-9.json +1 -1
  36. package/lib/cjs/_chunks/{hnLc3Qom.js → C9tZEm0t.js} +10 -8
  37. package/lib/cjs/_chunks/{hnLc3Qom.js.map → C9tZEm0t.js.map} +1 -1
  38. package/lib/cjs/_chunks/CwkpVXDI.js.map +1 -1
  39. package/lib/cjs/_chunks/{Dn-t7SiM.js → DNr-ZG4Y.js} +2 -2
  40. package/lib/cjs/_chunks/{Dn-t7SiM.js.map → DNr-ZG4Y.js.map} +1 -1
  41. package/lib/cjs/_chunks/{CIr5S84J.js → DUU5wf2f.js} +4 -2
  42. package/lib/cjs/_chunks/DUU5wf2f.js.map +1 -0
  43. package/lib/cjs/components/ActionSheets/ActionSheets.js +1 -1
  44. package/lib/cjs/components/ActionSheets/ActionSheetsItem.js +1 -1
  45. package/lib/cjs/components/ActionSheets/api.js +1 -1
  46. package/lib/cjs/components/ActionSheets/hooks.js +1 -1
  47. package/lib/cjs/components/ActionSheets/index.js +1 -1
  48. package/lib/cjs/components/ActionablePopover/ActionablePopover.js +1 -1
  49. package/lib/cjs/components/ActionablePopover/index.js +1 -1
  50. package/lib/cjs/components/Alert/Alert.js +1 -1
  51. package/lib/cjs/components/Alert/hooks/alert.js +1 -1
  52. package/lib/cjs/components/Alert/index.js +1 -1
  53. package/lib/cjs/components/Alert/styles.js +1 -1
  54. package/lib/cjs/components/Avatar/Avatar.js +1 -1
  55. package/lib/cjs/components/Avatar/index.js +1 -1
  56. package/lib/cjs/components/Avatar/styles.js +1 -1
  57. package/lib/cjs/components/AvatarGroup/AvatarGroup.js +1 -1
  58. package/lib/cjs/components/AvatarGroup/index.js +1 -1
  59. package/lib/cjs/components/Badge/Badge.js +1 -1
  60. package/lib/cjs/components/Badge/index.js +1 -1
  61. package/lib/cjs/components/Badge/styles.js +1 -1
  62. package/lib/cjs/components/BottomBar/BottomBar.js +1 -1
  63. package/lib/cjs/components/BottomBar/index.js +1 -1
  64. package/lib/cjs/components/Button/Button.js +1 -1
  65. package/lib/cjs/components/Button/Viewable.js +1 -1
  66. package/lib/cjs/components/Button/index.js +1 -1
  67. package/lib/cjs/components/Button/styleMap.js +1 -1
  68. package/lib/cjs/components/Carousel/Carousel.js +10 -3
  69. package/lib/cjs/components/Carousel/Carousel.js.map +1 -1
  70. package/lib/cjs/components/Carousel/index.js +1 -1
  71. package/lib/cjs/components/CheckBoxGroup/CheckBox.js +1 -1
  72. package/lib/cjs/components/CheckBoxGroup/CheckBoxGroup.js +1 -1
  73. package/lib/cjs/components/CheckBoxGroup/index.js +1 -1
  74. package/lib/cjs/components/CheckBoxGroup/styles.js +1 -1
  75. package/lib/cjs/components/Collapse/Collapse.js +1 -1
  76. package/lib/cjs/components/Collapse/Item/Item.js +1 -1
  77. package/lib/cjs/components/Collapse/Item/styles.js +1 -1
  78. package/lib/cjs/components/Collapse/index.js +1 -1
  79. package/lib/cjs/components/ConfigProvider/ConfigProvider.js +1 -1
  80. package/lib/cjs/components/ConfigProvider/hooks/ConfigCache/ConfigCache.js +1 -1
  81. package/lib/cjs/components/ConfigProvider/hooks/ConfigCache/index.js +1 -1
  82. package/lib/cjs/components/ConfigProvider/hooks/themeToken/index.js +1 -1
  83. package/lib/cjs/components/ConfigProvider/hooks/themeToken/useThemeToken.js +1 -1
  84. package/lib/cjs/components/ConfigProvider/index.js +1 -1
  85. package/lib/cjs/components/DatePicker/DatePicker.js +1 -1
  86. package/lib/cjs/components/DatePicker/api.js +1 -1
  87. package/lib/cjs/components/DatePicker/index.js +1 -1
  88. package/lib/cjs/components/Divider/Divider.js +1 -1
  89. package/lib/cjs/components/Divider/index.js +1 -1
  90. package/lib/cjs/components/Divider/styles.js +1 -1
  91. package/lib/cjs/components/DropDown/DropDown.js +1 -1
  92. package/lib/cjs/components/DropDown/DropDownItem.js +1 -1
  93. package/lib/cjs/components/DropDown/index.js +1 -1
  94. package/lib/cjs/components/Empty/Empty.js +1 -1
  95. package/lib/cjs/components/Empty/index.js +1 -1
  96. package/lib/cjs/components/Empty/styles.js +1 -1
  97. package/lib/cjs/components/FAB/FAB.js +1 -1
  98. package/lib/cjs/components/FAB/index.js +1 -1
  99. package/lib/cjs/components/Form/Form.js +1 -1
  100. package/lib/cjs/components/Form/FormItem.js +1 -1
  101. package/lib/cjs/components/Form/index.js +1 -1
  102. package/lib/cjs/components/Form/styles.js +1 -1
  103. package/lib/cjs/components/Image/Image.js +30 -93
  104. package/lib/cjs/components/Image/Image.js.map +1 -1
  105. package/lib/cjs/components/Image/Image69.js +1 -1
  106. package/lib/cjs/components/Image/VisibilitySensor.js +2 -2
  107. package/lib/cjs/components/Image/VisibilitySensor.js.map +1 -1
  108. package/lib/cjs/components/Image/hook/index.js +1 -1
  109. package/lib/cjs/components/Image/index.js +5 -4
  110. package/lib/cjs/components/Image/index.js.map +1 -1
  111. package/lib/cjs/components/Image/queryCacheBatcher.js +96 -0
  112. package/lib/cjs/components/Image/queryCacheBatcher.js.map +1 -0
  113. package/lib/cjs/components/Image/utils.js +1 -1
  114. package/lib/cjs/components/ImagePreview/ImagePreview.js +1 -1
  115. package/lib/cjs/components/ImagePreview/api.js +1 -1
  116. package/lib/cjs/components/ImagePreview/index.js +1 -1
  117. package/lib/cjs/components/LanguageProvider/hooks/useLanguage.js +1 -1
  118. package/lib/cjs/components/LanguageProvider/index.js +1 -1
  119. package/lib/cjs/components/List/List.js +1 -1
  120. package/lib/cjs/components/List/ListItem/ListItem.js +1 -1
  121. package/lib/cjs/components/List/index.js +1 -1
  122. package/lib/cjs/components/List/styles.js +1 -1
  123. package/lib/cjs/components/MiniSnackBar/MiniSnackBar.js +1 -1
  124. package/lib/cjs/components/MiniSnackBar/index.js +1 -1
  125. package/lib/cjs/components/MiniSnackBar/styles.js +1 -1
  126. package/lib/cjs/components/NavigationBar/NavigationBar.js +1 -1
  127. package/lib/cjs/components/NavigationBar/index.js +1 -1
  128. package/lib/cjs/components/NavigationBar/styles.js +1 -1
  129. package/lib/cjs/components/NoticeBar/NoticeBar.js +1 -1
  130. package/lib/cjs/components/NoticeBar/index.js +1 -1
  131. package/lib/cjs/components/Picker/Picker.js +1 -1
  132. package/lib/cjs/components/Picker/api.js +1 -1
  133. package/lib/cjs/components/Picker/index.js +1 -1
  134. package/lib/cjs/components/PickerView/PickerView.js +1 -1
  135. package/lib/cjs/components/PickerView/Wheel.js +1 -1
  136. package/lib/cjs/components/PickerView/index.js +1 -1
  137. package/lib/cjs/components/Popover/Popover.js +5 -4
  138. package/lib/cjs/components/Popover/Popover.js.map +1 -1
  139. package/lib/cjs/components/Popover/index.js +1 -1
  140. package/lib/cjs/components/Portal/core/PortalProvider.js +1 -1
  141. package/lib/cjs/components/Portal/index.js +1 -1
  142. package/lib/cjs/components/Progress/Progress.js +1 -1
  143. package/lib/cjs/components/Progress/index.js +1 -1
  144. package/lib/cjs/components/Progress/styles.js +1 -1
  145. package/lib/cjs/components/ProgressIndicator/ProgressIndicator.js +1 -1
  146. package/lib/cjs/components/ProgressIndicator/index.js +1 -1
  147. package/lib/cjs/components/ProgressIndicator/styles.js +1 -1
  148. package/lib/cjs/components/PullRefresh/PullRefresh.js +105 -41
  149. package/lib/cjs/components/PullRefresh/PullRefresh.js.map +1 -1
  150. package/lib/cjs/components/PullRefresh/component.js +2 -2
  151. package/lib/cjs/components/PullRefresh/index.js +2 -2
  152. package/lib/cjs/components/PullRefresh/interface/index.js +1 -1
  153. package/lib/cjs/components/Radio/Radio.js +5 -10
  154. package/lib/cjs/components/Radio/Radio.js.map +1 -1
  155. package/lib/cjs/components/Radio/RadioGroup.js +1 -1
  156. package/lib/cjs/components/Radio/index.js +5 -10
  157. package/lib/cjs/components/Radio/index.js.map +1 -1
  158. package/lib/cjs/components/Radio/styles.js +1 -1
  159. package/lib/cjs/components/Rate/Rate.js +1 -1
  160. package/lib/cjs/components/Rate/index.js +1 -1
  161. package/lib/cjs/components/Result/Result.js +1 -1
  162. package/lib/cjs/components/Result/index.js +1 -1
  163. package/lib/cjs/components/Result/styles.js +1 -1
  164. package/lib/cjs/components/Search/Search.js +1 -1
  165. package/lib/cjs/components/Search/index.js +1 -1
  166. package/lib/cjs/components/Search/styles.js +1 -1
  167. package/lib/cjs/components/SegmentedControl/SegmentedControl.js +1 -1
  168. package/lib/cjs/components/SegmentedControl/index.js +1 -1
  169. package/lib/cjs/components/Sheets/AnimatedSheets.js +1 -1
  170. package/lib/cjs/components/Sheets/Sheets.js +1 -1
  171. package/lib/cjs/components/Sheets/api.js +1 -1
  172. package/lib/cjs/components/Sheets/index.js +1 -1
  173. package/lib/cjs/components/Sheets/styles.js +2 -2
  174. package/lib/cjs/components/Sheets/styles.js.map +1 -1
  175. package/lib/cjs/components/Skeleton/Item/SkeletonItem.js +1 -1
  176. package/lib/cjs/components/Skeleton/Item/SkeletonItem69.js +1 -1
  177. package/lib/cjs/components/Skeleton/Skeleton.js +1 -1
  178. package/lib/cjs/components/Skeleton/Skeleton69.js +1 -1
  179. package/lib/cjs/components/Skeleton/index.js +1 -1
  180. package/lib/cjs/components/Slider/Slider.js +1 -1
  181. package/lib/cjs/components/Slider/index.js +1 -1
  182. package/lib/cjs/components/SlimAlert/Alert.js +1 -1
  183. package/lib/cjs/components/SlimAlert/AlertContent.js +1 -1
  184. package/lib/cjs/components/SlimAlert/AlertFooter.js +1 -1
  185. package/lib/cjs/components/SlimAlert/index.js +1 -1
  186. package/lib/cjs/components/SlimAlert/styles.js +1 -1
  187. package/lib/cjs/components/SlimNavigationBar/NavigationBar.js +1 -1
  188. package/lib/cjs/components/SlimNavigationBar/NavigationBarAction.js +1 -1
  189. package/lib/cjs/components/SlimNavigationBar/index.js +1 -1
  190. package/lib/cjs/components/SlimNavigationBar/styles.js +1 -1
  191. package/lib/cjs/components/SlimSheets/AnimatedSheets.js +1 -1
  192. package/lib/cjs/components/SlimSheets/AnimatedSheetsAction.js +1 -1
  193. package/lib/cjs/components/SlimSheets/AnimatedSheetsHeader.js +1 -1
  194. package/lib/cjs/components/SlimSheets/DragAnimatedSheets.js +1 -1
  195. package/lib/cjs/components/SlimSheets/index.js +1 -1
  196. package/lib/cjs/components/SlimTabs/BadgeSlimTabItem.js +1 -1
  197. package/lib/cjs/components/SlimTabs/SlimTab.js +1 -1
  198. package/lib/cjs/components/SlimTabs/SlimTabItem.js +1 -1
  199. package/lib/cjs/components/SlimTabs/SlimTabItemLabel.js +1 -1
  200. package/lib/cjs/components/SlimTabs/SlimTabItemValue.js +1 -1
  201. package/lib/cjs/components/SlimTabs/SlimTabList.js +1 -1
  202. package/lib/cjs/components/SlimTabs/index.js +1 -1
  203. package/lib/cjs/components/SlimTabs/styles.js +1 -1
  204. package/lib/cjs/components/SnackBar/SnackBar.js +1 -1
  205. package/lib/cjs/components/SnackBar/index.js +1 -1
  206. package/lib/cjs/components/SnackBar/styles.js +1 -1
  207. package/lib/cjs/components/Stepper/Stepper.js +1 -1
  208. package/lib/cjs/components/Stepper/index.js +1 -1
  209. package/lib/cjs/components/Switch/Switch.js +1 -1
  210. package/lib/cjs/components/Switch/index.js +1 -1
  211. package/lib/cjs/components/Tab/Tabs.js +1 -1
  212. package/lib/cjs/components/Tab/index.js +1 -1
  213. package/lib/cjs/components/Tab/styles.js +1 -1
  214. package/lib/cjs/components/TabBar/TabBar.js +1 -1
  215. package/lib/cjs/components/TabBar/index.js +1 -1
  216. package/lib/cjs/components/TabBar/styles.js +1 -1
  217. package/lib/cjs/components/Tag/Tag.js +1 -1
  218. package/lib/cjs/components/Tag/index.js +1 -1
  219. package/lib/cjs/components/Text/Text.js +1 -1
  220. package/lib/cjs/components/Text/Viewable.js +1 -1
  221. package/lib/cjs/components/Text/hooks/cloneContainer.js +1 -1
  222. package/lib/cjs/components/Text/hooks/index.js +1 -1
  223. package/lib/cjs/components/Text/hooks/loadFontFromFile.js +2 -2
  224. package/lib/cjs/components/Text/hooks/loadFontFromFile.js.map +1 -1
  225. package/lib/cjs/components/Text/index.js +1 -1
  226. package/lib/cjs/components/Text/styles.js +1 -1
  227. package/lib/cjs/components/TextField/TextField.js +1 -1
  228. package/lib/cjs/components/TextField/index.js +1 -1
  229. package/lib/cjs/components/TextField/styles.js +1 -1
  230. package/lib/cjs/components/TextView/TextView.js +1 -1
  231. package/lib/cjs/components/TextView/index.js +1 -1
  232. package/lib/cjs/components/TextView/styles.js +1 -1
  233. package/lib/cjs/components/Toast/Toast.js +1 -1
  234. package/lib/cjs/components/Toast/api.js +1 -1
  235. package/lib/cjs/components/Toast/index.js +1 -1
  236. package/lib/cjs/components/Toast/styles.js +1 -1
  237. package/lib/cjs/components/Uploader/Uploader.js +3 -3
  238. package/lib/cjs/components/Uploader/Uploader.js.map +1 -1
  239. package/lib/cjs/components/Uploader/index.js +2 -2
  240. package/lib/cjs/components/Uploader/interface/index.js +2 -2
  241. package/lib/cjs/components/Uploader/styles.js +2 -2
  242. package/lib/cjs/components/Uploader/utils.js +1 -1
  243. package/lib/cjs/index.js +5 -11
  244. package/lib/cjs/index.js.map +1 -1
  245. package/lib/cjs/pvCount/pvData.js +0 -1
  246. package/lib/cjs/pvCount/pvData.js.map +1 -1
  247. package/lib/esm/_chunks/{CgvIDP0E.js → CAkwE9ZD.js} +10 -8
  248. package/lib/esm/_chunks/{CgvIDP0E.js.map → CAkwE9ZD.js.map} +1 -1
  249. package/lib/esm/_chunks/Da9cW8JG.js.map +1 -1
  250. package/lib/esm/_chunks/{DRgGcbc8.js → eYElHgNc.js} +2 -2
  251. package/lib/esm/_chunks/{DRgGcbc8.js.map → eYElHgNc.js.map} +1 -1
  252. package/lib/esm/_chunks/{CZtagXcj.js → gC9g4Fr_.js} +4 -2
  253. package/lib/esm/_chunks/gC9g4Fr_.js.map +1 -0
  254. package/lib/esm/components/ActionSheets/ActionSheets.js +1 -1
  255. package/lib/esm/components/ActionSheets/ActionSheetsItem.js +1 -1
  256. package/lib/esm/components/ActionSheets/api.js +1 -1
  257. package/lib/esm/components/ActionSheets/hooks.js +1 -1
  258. package/lib/esm/components/ActionSheets/index.js +1 -1
  259. package/lib/esm/components/ActionablePopover/ActionablePopover.js +1 -1
  260. package/lib/esm/components/ActionablePopover/index.js +1 -1
  261. package/lib/esm/components/Alert/Alert.js +1 -1
  262. package/lib/esm/components/Alert/hooks/alert.js +1 -1
  263. package/lib/esm/components/Alert/index.js +1 -1
  264. package/lib/esm/components/Alert/styles.js +1 -1
  265. package/lib/esm/components/Avatar/Avatar.js +1 -1
  266. package/lib/esm/components/Avatar/index.js +1 -1
  267. package/lib/esm/components/Avatar/styles.js +1 -1
  268. package/lib/esm/components/AvatarGroup/AvatarGroup.js +1 -1
  269. package/lib/esm/components/AvatarGroup/index.js +1 -1
  270. package/lib/esm/components/Badge/Badge.js +1 -1
  271. package/lib/esm/components/Badge/index.js +1 -1
  272. package/lib/esm/components/Badge/styles.js +1 -1
  273. package/lib/esm/components/BottomBar/BottomBar.js +1 -1
  274. package/lib/esm/components/BottomBar/index.js +1 -1
  275. package/lib/esm/components/Button/Button.js +1 -1
  276. package/lib/esm/components/Button/Viewable.js +1 -1
  277. package/lib/esm/components/Button/index.js +1 -1
  278. package/lib/esm/components/Button/styleMap.js +1 -1
  279. package/lib/esm/components/Carousel/Carousel.js +10 -3
  280. package/lib/esm/components/Carousel/Carousel.js.map +1 -1
  281. package/lib/esm/components/Carousel/index.js +1 -1
  282. package/lib/esm/components/CheckBoxGroup/CheckBox.js +1 -1
  283. package/lib/esm/components/CheckBoxGroup/CheckBoxGroup.js +1 -1
  284. package/lib/esm/components/CheckBoxGroup/index.js +1 -1
  285. package/lib/esm/components/CheckBoxGroup/styles.js +1 -1
  286. package/lib/esm/components/Collapse/Collapse.js +1 -1
  287. package/lib/esm/components/Collapse/Item/Item.js +1 -1
  288. package/lib/esm/components/Collapse/Item/styles.js +1 -1
  289. package/lib/esm/components/Collapse/index.js +1 -1
  290. package/lib/esm/components/ConfigProvider/ConfigProvider.js +1 -1
  291. package/lib/esm/components/ConfigProvider/hooks/ConfigCache/ConfigCache.js +1 -1
  292. package/lib/esm/components/ConfigProvider/hooks/ConfigCache/index.js +1 -1
  293. package/lib/esm/components/ConfigProvider/hooks/themeToken/index.js +1 -1
  294. package/lib/esm/components/ConfigProvider/hooks/themeToken/useThemeToken.js +1 -1
  295. package/lib/esm/components/ConfigProvider/index.js +1 -1
  296. package/lib/esm/components/DatePicker/DatePicker.js +1 -1
  297. package/lib/esm/components/DatePicker/api.js +1 -1
  298. package/lib/esm/components/DatePicker/index.js +1 -1
  299. package/lib/esm/components/Divider/Divider.js +1 -1
  300. package/lib/esm/components/Divider/index.js +1 -1
  301. package/lib/esm/components/Divider/styles.js +1 -1
  302. package/lib/esm/components/DropDown/DropDown.js +1 -1
  303. package/lib/esm/components/DropDown/DropDownItem.js +1 -1
  304. package/lib/esm/components/DropDown/index.js +1 -1
  305. package/lib/esm/components/Empty/Empty.js +1 -1
  306. package/lib/esm/components/Empty/index.js +1 -1
  307. package/lib/esm/components/Empty/styles.js +1 -1
  308. package/lib/esm/components/FAB/FAB.js +1 -1
  309. package/lib/esm/components/FAB/index.js +1 -1
  310. package/lib/esm/components/Form/Form.js +1 -1
  311. package/lib/esm/components/Form/FormItem.js +1 -1
  312. package/lib/esm/components/Form/index.js +1 -1
  313. package/lib/esm/components/Form/styles.js +1 -1
  314. package/lib/esm/components/Image/Image.js +32 -95
  315. package/lib/esm/components/Image/Image.js.map +1 -1
  316. package/lib/esm/components/Image/Image69.js +1 -1
  317. package/lib/esm/components/Image/VisibilitySensor.js +2 -2
  318. package/lib/esm/components/Image/VisibilitySensor.js.map +1 -1
  319. package/lib/esm/components/Image/hook/index.js +1 -1
  320. package/lib/esm/components/Image/index.js +5 -4
  321. package/lib/esm/components/Image/index.js.map +1 -1
  322. package/lib/esm/components/Image/queryCacheBatcher.js +92 -0
  323. package/lib/esm/components/Image/queryCacheBatcher.js.map +1 -0
  324. package/lib/esm/components/Image/utils.js +1 -1
  325. package/lib/esm/components/ImagePreview/ImagePreview.js +1 -1
  326. package/lib/esm/components/ImagePreview/api.js +1 -1
  327. package/lib/esm/components/ImagePreview/index.js +1 -1
  328. package/lib/esm/components/LanguageProvider/hooks/useLanguage.js +1 -1
  329. package/lib/esm/components/LanguageProvider/index.js +1 -1
  330. package/lib/esm/components/List/List.js +1 -1
  331. package/lib/esm/components/List/ListItem/ListItem.js +1 -1
  332. package/lib/esm/components/List/index.js +1 -1
  333. package/lib/esm/components/List/styles.js +1 -1
  334. package/lib/esm/components/MiniSnackBar/MiniSnackBar.js +1 -1
  335. package/lib/esm/components/MiniSnackBar/index.js +1 -1
  336. package/lib/esm/components/MiniSnackBar/styles.js +1 -1
  337. package/lib/esm/components/NavigationBar/NavigationBar.js +1 -1
  338. package/lib/esm/components/NavigationBar/index.js +1 -1
  339. package/lib/esm/components/NavigationBar/styles.js +1 -1
  340. package/lib/esm/components/NoticeBar/NoticeBar.js +1 -1
  341. package/lib/esm/components/NoticeBar/index.js +1 -1
  342. package/lib/esm/components/Picker/Picker.js +1 -1
  343. package/lib/esm/components/Picker/api.js +1 -1
  344. package/lib/esm/components/Picker/index.js +1 -1
  345. package/lib/esm/components/PickerView/PickerView.js +1 -1
  346. package/lib/esm/components/PickerView/Wheel.js +1 -1
  347. package/lib/esm/components/PickerView/index.js +1 -1
  348. package/lib/esm/components/Popover/Popover.js +5 -4
  349. package/lib/esm/components/Popover/Popover.js.map +1 -1
  350. package/lib/esm/components/Popover/index.js +1 -1
  351. package/lib/esm/components/Portal/core/PortalProvider.js +1 -1
  352. package/lib/esm/components/Portal/index.js +1 -1
  353. package/lib/esm/components/Progress/Progress.js +1 -1
  354. package/lib/esm/components/Progress/index.js +1 -1
  355. package/lib/esm/components/Progress/styles.js +1 -1
  356. package/lib/esm/components/ProgressIndicator/ProgressIndicator.js +1 -1
  357. package/lib/esm/components/ProgressIndicator/index.js +1 -1
  358. package/lib/esm/components/ProgressIndicator/styles.js +1 -1
  359. package/lib/esm/components/PullRefresh/PullRefresh.js +106 -42
  360. package/lib/esm/components/PullRefresh/PullRefresh.js.map +1 -1
  361. package/lib/esm/components/PullRefresh/component.js +2 -2
  362. package/lib/esm/components/PullRefresh/index.js +2 -2
  363. package/lib/esm/components/PullRefresh/interface/index.js +1 -1
  364. package/lib/esm/components/Radio/Radio.js +5 -10
  365. package/lib/esm/components/Radio/Radio.js.map +1 -1
  366. package/lib/esm/components/Radio/RadioGroup.js +1 -1
  367. package/lib/esm/components/Radio/index.js +5 -10
  368. package/lib/esm/components/Radio/index.js.map +1 -1
  369. package/lib/esm/components/Radio/styles.js +1 -1
  370. package/lib/esm/components/Rate/Rate.js +1 -1
  371. package/lib/esm/components/Rate/index.js +1 -1
  372. package/lib/esm/components/Result/Result.js +1 -1
  373. package/lib/esm/components/Result/index.js +1 -1
  374. package/lib/esm/components/Result/styles.js +1 -1
  375. package/lib/esm/components/Search/Search.js +1 -1
  376. package/lib/esm/components/Search/index.js +1 -1
  377. package/lib/esm/components/Search/styles.js +1 -1
  378. package/lib/esm/components/SegmentedControl/SegmentedControl.js +1 -1
  379. package/lib/esm/components/SegmentedControl/index.js +1 -1
  380. package/lib/esm/components/Sheets/AnimatedSheets.js +1 -1
  381. package/lib/esm/components/Sheets/Sheets.js +1 -1
  382. package/lib/esm/components/Sheets/api.js +1 -1
  383. package/lib/esm/components/Sheets/index.js +1 -1
  384. package/lib/esm/components/Sheets/styles.js +2 -2
  385. package/lib/esm/components/Sheets/styles.js.map +1 -1
  386. package/lib/esm/components/Skeleton/Item/SkeletonItem.js +1 -1
  387. package/lib/esm/components/Skeleton/Item/SkeletonItem69.js +1 -1
  388. package/lib/esm/components/Skeleton/Skeleton.js +1 -1
  389. package/lib/esm/components/Skeleton/Skeleton69.js +1 -1
  390. package/lib/esm/components/Skeleton/index.js +1 -1
  391. package/lib/esm/components/Slider/Slider.js +1 -1
  392. package/lib/esm/components/Slider/index.js +1 -1
  393. package/lib/esm/components/SlimAlert/Alert.js +1 -1
  394. package/lib/esm/components/SlimAlert/AlertContent.js +1 -1
  395. package/lib/esm/components/SlimAlert/AlertFooter.js +1 -1
  396. package/lib/esm/components/SlimAlert/index.js +1 -1
  397. package/lib/esm/components/SlimAlert/styles.js +1 -1
  398. package/lib/esm/components/SlimNavigationBar/NavigationBar.js +1 -1
  399. package/lib/esm/components/SlimNavigationBar/NavigationBarAction.js +1 -1
  400. package/lib/esm/components/SlimNavigationBar/index.js +1 -1
  401. package/lib/esm/components/SlimNavigationBar/styles.js +1 -1
  402. package/lib/esm/components/SlimSheets/AnimatedSheets.js +1 -1
  403. package/lib/esm/components/SlimSheets/AnimatedSheetsAction.js +1 -1
  404. package/lib/esm/components/SlimSheets/AnimatedSheetsHeader.js +1 -1
  405. package/lib/esm/components/SlimSheets/DragAnimatedSheets.js +1 -1
  406. package/lib/esm/components/SlimSheets/index.js +1 -1
  407. package/lib/esm/components/SlimTabs/BadgeSlimTabItem.js +1 -1
  408. package/lib/esm/components/SlimTabs/SlimTab.js +1 -1
  409. package/lib/esm/components/SlimTabs/SlimTabItem.js +1 -1
  410. package/lib/esm/components/SlimTabs/SlimTabItemLabel.js +1 -1
  411. package/lib/esm/components/SlimTabs/SlimTabItemValue.js +1 -1
  412. package/lib/esm/components/SlimTabs/SlimTabList.js +1 -1
  413. package/lib/esm/components/SlimTabs/index.js +1 -1
  414. package/lib/esm/components/SlimTabs/styles.js +1 -1
  415. package/lib/esm/components/SnackBar/SnackBar.js +1 -1
  416. package/lib/esm/components/SnackBar/index.js +1 -1
  417. package/lib/esm/components/SnackBar/styles.js +1 -1
  418. package/lib/esm/components/Stepper/Stepper.js +1 -1
  419. package/lib/esm/components/Stepper/index.js +1 -1
  420. package/lib/esm/components/Switch/Switch.js +1 -1
  421. package/lib/esm/components/Switch/index.js +1 -1
  422. package/lib/esm/components/Tab/Tabs.js +1 -1
  423. package/lib/esm/components/Tab/index.js +1 -1
  424. package/lib/esm/components/Tab/styles.js +1 -1
  425. package/lib/esm/components/TabBar/TabBar.js +1 -1
  426. package/lib/esm/components/TabBar/index.js +1 -1
  427. package/lib/esm/components/TabBar/styles.js +1 -1
  428. package/lib/esm/components/Tag/Tag.js +1 -1
  429. package/lib/esm/components/Tag/index.js +1 -1
  430. package/lib/esm/components/Text/Text.js +1 -1
  431. package/lib/esm/components/Text/Viewable.js +1 -1
  432. package/lib/esm/components/Text/hooks/cloneContainer.js +1 -1
  433. package/lib/esm/components/Text/hooks/index.js +1 -1
  434. package/lib/esm/components/Text/hooks/loadFontFromFile.js +2 -2
  435. package/lib/esm/components/Text/hooks/loadFontFromFile.js.map +1 -1
  436. package/lib/esm/components/Text/index.js +1 -1
  437. package/lib/esm/components/Text/styles.js +1 -1
  438. package/lib/esm/components/TextField/TextField.js +1 -1
  439. package/lib/esm/components/TextField/index.js +1 -1
  440. package/lib/esm/components/TextField/styles.js +1 -1
  441. package/lib/esm/components/TextView/TextView.js +1 -1
  442. package/lib/esm/components/TextView/index.js +1 -1
  443. package/lib/esm/components/TextView/styles.js +1 -1
  444. package/lib/esm/components/Toast/Toast.js +1 -1
  445. package/lib/esm/components/Toast/api.js +1 -1
  446. package/lib/esm/components/Toast/index.js +1 -1
  447. package/lib/esm/components/Toast/styles.js +1 -1
  448. package/lib/esm/components/Uploader/Uploader.js +3 -3
  449. package/lib/esm/components/Uploader/Uploader.js.map +1 -1
  450. package/lib/esm/components/Uploader/index.js +2 -2
  451. package/lib/esm/components/Uploader/interface/index.js +2 -2
  452. package/lib/esm/components/Uploader/styles.js +2 -2
  453. package/lib/esm/components/Uploader/utils.js +1 -1
  454. package/lib/esm/index.js +5 -10
  455. package/lib/esm/index.js.map +1 -1
  456. package/lib/esm/pvCount/pvData.js +0 -1
  457. package/lib/esm/pvCount/pvData.js.map +1 -1
  458. package/lib/src/components/Image/queryCacheBatcher.d.ts +5 -0
  459. package/lib/src/components/Popover/Popover.d.ts +1 -1
  460. package/lib/src/components/Popover/interface/index.d.ts +1 -0
  461. package/lib/src/components/PullRefresh/PullRefresh.d.ts +2 -0
  462. package/lib/src/components/PullRefresh/interface/index.d.ts +5 -0
  463. package/lib/src/index.d.ts +0 -1
  464. package/lib/types/components/Image/queryCacheBatcher.d.ts +5 -0
  465. package/lib/types/components/Popover/Popover.d.ts +1 -1
  466. package/lib/types/components/Popover/interface/index.d.ts +1 -0
  467. package/lib/types/components/PullRefresh/PullRefresh.d.ts +2 -0
  468. package/lib/types/components/PullRefresh/interface/index.d.ts +5 -0
  469. package/lib/types/index.d.ts +0 -1
  470. package/package.json +1 -2
  471. package/src/components/Carousel/Carousel.tsx +15 -3
  472. package/src/components/Carousel/demo/index.tsx +14 -2
  473. package/src/components/Image/Image.tsx +53 -115
  474. package/src/components/Image/VisibilitySensor.tsx +1 -2
  475. package/src/components/Image/queryCacheBatcher.ts +84 -0
  476. package/src/components/Popover/Popover.tsx +4 -3
  477. package/src/components/Popover/doc/index.mdx +22 -21
  478. package/src/components/Popover/interface/index.ts +1 -0
  479. package/src/components/PullRefresh/PullRefresh.tsx +146 -55
  480. package/src/components/PullRefresh/doc/index.mdx +19 -16
  481. package/src/components/PullRefresh/interface/index.ts +6 -0
  482. package/src/components/Sheets/styles.ts +2 -2
  483. package/src/index.ts +0 -1
  484. package/lib/cjs/_chunks/CIr5S84J.js.map +0 -1
  485. package/lib/cjs/components/Swiper/LazyPage.js +0 -42
  486. package/lib/cjs/components/Swiper/LazyPage.js.map +0 -1
  487. package/lib/cjs/components/Swiper/Swiper.js +0 -27
  488. package/lib/cjs/components/Swiper/Swiper.js.map +0 -1
  489. package/lib/cjs/components/Swiper/SwiperFlatList.js +0 -227
  490. package/lib/cjs/components/Swiper/SwiperFlatList.js.map +0 -1
  491. package/lib/cjs/components/Swiper/SwiperPagerView.js +0 -231
  492. package/lib/cjs/components/Swiper/SwiperPagerView.js.map +0 -1
  493. package/lib/cjs/components/Swiper/index.js +0 -16
  494. package/lib/cjs/components/Swiper/index.js.map +0 -1
  495. package/lib/cjs/components/Swiper/types.js +0 -3
  496. package/lib/cjs/components/Swiper/types.js.map +0 -1
  497. package/lib/cjs/components/Swiper/utils.js +0 -73
  498. package/lib/cjs/components/Swiper/utils.js.map +0 -1
  499. package/lib/esm/_chunks/CZtagXcj.js.map +0 -1
  500. package/lib/esm/components/Swiper/LazyPage.js +0 -40
  501. package/lib/esm/components/Swiper/LazyPage.js.map +0 -1
  502. package/lib/esm/components/Swiper/Swiper.js +0 -25
  503. package/lib/esm/components/Swiper/Swiper.js.map +0 -1
  504. package/lib/esm/components/Swiper/SwiperFlatList.js +0 -225
  505. package/lib/esm/components/Swiper/SwiperFlatList.js.map +0 -1
  506. package/lib/esm/components/Swiper/SwiperPagerView.js +0 -229
  507. package/lib/esm/components/Swiper/SwiperPagerView.js.map +0 -1
  508. package/lib/esm/components/Swiper/index.js +0 -10
  509. package/lib/esm/components/Swiper/index.js.map +0 -1
  510. package/lib/esm/components/Swiper/types.js +0 -2
  511. package/lib/esm/components/Swiper/types.js.map +0 -1
  512. package/lib/esm/components/Swiper/utils.js +0 -68
  513. package/lib/esm/components/Swiper/utils.js.map +0 -1
  514. package/lib/src/components/Swiper/LazyPage.d.ts +0 -7
  515. package/lib/src/components/Swiper/Swiper.d.ts +0 -5
  516. package/lib/src/components/Swiper/SwiperFlatList.d.ts +0 -5
  517. package/lib/src/components/Swiper/SwiperPagerView.d.ts +0 -5
  518. package/lib/src/components/Swiper/index.d.ts +0 -24
  519. package/lib/src/components/Swiper/types.d.ts +0 -166
  520. package/lib/src/components/Swiper/utils.d.ts +0 -42
  521. package/lib/types/components/Swiper/LazyPage.d.ts +0 -7
  522. package/lib/types/components/Swiper/Swiper.d.ts +0 -5
  523. package/lib/types/components/Swiper/SwiperFlatList.d.ts +0 -5
  524. package/lib/types/components/Swiper/SwiperPagerView.d.ts +0 -5
  525. package/lib/types/components/Swiper/index.d.ts +0 -24
  526. package/lib/types/components/Swiper/types.d.ts +0 -166
  527. package/lib/types/components/Swiper/utils.d.ts +0 -42
  528. package/src/components/Swiper/LazyPage.tsx +0 -44
  529. package/src/components/Swiper/Swiper.tsx +0 -31
  530. package/src/components/Swiper/SwiperFlatList.tsx +0 -299
  531. package/src/components/Swiper/SwiperPagerView.tsx +0 -286
  532. package/src/components/Swiper/demo/index.tsx +0 -146
  533. package/src/components/Swiper/doc/index.mdx +0 -49
  534. package/src/components/Swiper/index.ts +0 -25
  535. package/src/components/Swiper/types.ts +0 -208
  536. package/src/components/Swiper/utils.ts +0 -133
@@ -11,6 +11,8 @@ declare namespace PullRefresh {
11
11
  showText: boolean;
12
12
  initRefresh: boolean;
13
13
  refresh: boolean;
14
+ nativeAndroidPullRefresh: boolean;
15
+ androidRefreshProps: {};
14
16
  };
15
17
  }
16
18
  export default PullRefresh;
@@ -16,6 +16,9 @@ export interface RedsPullRefresh {
16
16
  showText?: boolean;
17
17
  initRefresh?: boolean;
18
18
  refresh?: boolean;
19
+ nativeAndroidPullRefresh?: boolean;
20
+ androidRefreshProps?: Object;
21
+ androidColors?: string[];
19
22
  }
20
23
  export declare enum PullState {
21
24
  INIT = 0,// 初始化
@@ -35,4 +38,6 @@ export declare const PullRefreshDefaultProps: {
35
38
  showText: boolean;
36
39
  initRefresh: boolean;
37
40
  refresh: boolean;
41
+ nativeAndroidPullRefresh: boolean;
42
+ androidRefreshProps: {};
38
43
  };
@@ -55,5 +55,4 @@ export * from "./components/SlimAlert";
55
55
  export * from "./components/SlimNavigationBar";
56
56
  export * from "./components/Search";
57
57
  export * from "./components/ActionablePopover";
58
- export * from "./components/Swiper";
59
58
  import "react-native-url-polyfill/auto";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xhsreds/reds-rn-next",
3
- "version": "0.9.1-feat-swiper202511031535",
3
+ "version": "0.9.1-feat-0.10.0-rc202511031536",
4
4
  "author": "贾斌(呀哈) <jiabin@xiaohongshu.com>",
5
5
  "license": "ISC",
6
6
  "dependencies": {
@@ -24,7 +24,6 @@
24
24
  "react": "*",
25
25
  "react-native": "*",
26
26
  "react-native-fs": "2.20.0",
27
- "react-native-pager-view": ">=6.0.0",
28
27
  "react-native-svg": "13.14.0",
29
28
  "@xhs/react-native-harmony": "*",
30
29
  "@xhsreds/reds-token-next": "0.9.0"
@@ -238,8 +238,8 @@ export const Carousel: React.FC<RedsCarousel> = (props) => {
238
238
 
239
239
  requestAnimationFrame(() => {
240
240
  let scrollOffset = index * offsetPerItem;
241
-
242
- if (props.playingMode !== "normal") {
241
+ // 修复:只有在无限循环模式下才需要减去containerPadding
242
+ if (props.playingMode !== "normal" && props.infinite) {
243
243
  scrollOffset -= containerPadding;
244
244
  }
245
245
 
@@ -287,10 +287,18 @@ export const Carousel: React.FC<RedsCarousel> = (props) => {
287
287
  props.direction === "horizontal" ? event.nativeEvent.contentOffset.x : event.nativeEvent.contentOffset.y;
288
288
 
289
289
  let index: number;
290
+ // 修复:对于非无限循环的compact模式,需要调整偏移量计算
290
291
  if (props.playingMode === "normal") {
291
292
  index = Math.round(offset / offsetPerItem);
292
293
  } else {
293
- index = Math.round((offset + containerPadding) / offsetPerItem);
294
+ // 对于compact和card模式
295
+ if (!props.infinite) {
296
+ // 非无限循环模式:不需要加containerPadding,因为滚动时已经考虑了padding
297
+ index = Math.round(offset / offsetPerItem);
298
+ } else {
299
+ // 无限循环模式:需要加containerPadding
300
+ index = Math.round((offset + containerPadding) / offsetPerItem);
301
+ }
294
302
  }
295
303
 
296
304
  index = Math.max(0, Math.min(index, extendedData.length - 1));
@@ -312,6 +320,10 @@ export const Carousel: React.FC<RedsCarousel> = (props) => {
312
320
  const clampedIndex = Math.max(0, Math.min(index, length - 1));
313
321
  setCurrentIndex(clampedIndex);
314
322
  setRealIndex(clampedIndex);
323
+ // 修复:确保滚动到正确位置
324
+ if (props.playingMode !== "normal") {
325
+ scrollToIndex(clampedIndex, true);
326
+ }
315
327
  }
316
328
 
317
329
  setIsScrolling(false);
@@ -1,6 +1,6 @@
1
1
  import React, { useState } from "react";
2
2
  import { View, Text, StyleSheet, ScrollView, Image as RNImage } from "react-native";
3
- import { Carousel } from "@xhs/reds-rn-next";
3
+ import { Carousel, CarouselType } from "@xhs/reds-rn-next";
4
4
  const styles = StyleSheet.create({
5
5
  container: {
6
6
  paddingBottom: 100,
@@ -54,6 +54,18 @@ export default function App() {
54
54
  handlable={false}
55
55
  />
56
56
  <Carousel
57
+ data={images}
58
+ autoPlay={false}
59
+ currentIndex={3}
60
+ onChange={handleChange}
61
+ onClick={handleClick}
62
+ displayNumbers={true}
63
+ // duration={3000}
64
+ playingMode={CarouselType.PLAYINGMODE.COMPACT}
65
+ handlable={true}
66
+ infinite={false}
67
+ />
68
+ {/* <Carousel
57
69
  autoPlay={true}
58
70
  currentIndex={3}
59
71
  onChange={handleChange}
@@ -82,7 +94,7 @@ export default function App() {
82
94
  {images.map((item, idx) => (
83
95
  <RNImage style={{ width: 300, height: 200 }} source={{ uri: item }} />
84
96
  ))}
85
- </Carousel>
97
+ </Carousel> */}
86
98
  {/* <Desc>自动播放(默认轮播间隔1000ms)</Desc>
87
99
  <Carousel data={images} duration={3000} />
88
100
 
@@ -27,8 +27,8 @@ import { useColorMode } from "../ConfigProvider";
27
27
  import useMounted from "../../pvCount/useUnmountedProcess";
28
28
  import { lightColor } from "@xhs/reds-token-next";
29
29
  import { formatUri, isDataUri, isLocalFile, convertKeysToSnakeCase } from "./utils";
30
- import VisibilitySensor from "./VisibilitySensor";
31
30
  import { apmPush } from "./apm";
31
+ import { queryCacheBatched } from "./queryCacheBatcher";
32
32
 
33
33
  const imageReLoad = {
34
34
  light: "https://picasso-static.xiaohongshu.com/fe-platform/06ae169b310c2926e541903b828486a80fcac404.png",
@@ -56,16 +56,14 @@ const Image = ({
56
56
  onFirstDrawFinished,
57
57
  ...props
58
58
  }: RedsImage & Omit<ImageProps, keyof RedsImage>) => {
59
- useMounted("Image");
59
+ // useMounted("Image");
60
60
  const [imageStatus, setImageStatus] = useState(IMAGE_STATUS.LOADING);
61
61
  const [progress, setProgress] = useState(0);
62
-
63
- const [loadedTime, setLoadedTime] = useState(0);
64
- const [loadStartTime, setLoadStartTime] = useState(0);
62
+ const mountTimeRef = useRef<number>(Date.now());
65
63
 
66
64
  const formatSource = useMemo(() => {
67
65
  // @ts-ignore
68
- if (_source) return _source as ImageSourcePropTyp;
66
+ if (_source) return _source as ImageSourcePropType;
69
67
  // @ts-ignore
70
68
  return { uri: src } as ImageSourcePropType;
71
69
  }, [src, _source]);
@@ -78,21 +76,11 @@ const Image = ({
78
76
 
79
77
  const blurSource = useBlur({ source: formatSource });
80
78
 
81
- const [viewable, setViewable] = useState(false);
82
- const hasInit = useRef(false);
83
- const checkIsVisible = (isVisible: boolean) => {
84
- if (abortApmCollection) return;
85
- // 判断首屏
86
- if (!hasInit.current) {
87
- hasInit.current = true;
88
- apmDataRef.current.isFirstScreen = isVisible ? "true" : "false";
89
- }
90
- setViewable(isVisible);
91
- };
79
+ // Visibility tracking removed: no longer needed for APM
92
80
  const apmDataRef = useRef<ImageTrackerProps>({
93
81
  imageUrl: "",
94
82
  imageHost: "",
95
- intersectTime: viewable ? Date.now() : 0,
83
+ intersectTime: 0,
96
84
  imageSize: 0,
97
85
  isFirstScreen: "false",
98
86
  isPrefetch: "",
@@ -103,7 +91,7 @@ const Image = ({
103
91
  loadDuration: 0,
104
92
  viewDuration: 0,
105
93
  });
106
- const [apmDoneRef, setApmDoneRef] = useState(false);
94
+ const apmDoneRef = useRef(false);
107
95
 
108
96
  useEffect(() => {
109
97
  if (abortApmCollection) return;
@@ -126,17 +114,19 @@ const Image = ({
126
114
  useEffect(() => {
127
115
  if (abortApmCollection) return;
128
116
  const imageUrl = (formatSource as ImageURISource)?.uri || "";
129
- if (typeof RNImage.queryCache === "function" && !!imageUrl) {
130
- const uriEncodeImageUrl = encodeURI(imageUrl);
131
- RNImage.queryCache([imageUrl]).then((res) => {
132
- if (res?.[uriEncodeImageUrl]) {
133
- apmDataRef.current.isPrefetch = "true";
134
- } else {
135
- apmDataRef.current.isPrefetch = "false";
136
- }
117
+ if (!imageUrl) return;
118
+ let alive = true;
119
+ queryCacheBatched(imageUrl)
120
+ .then((isPrefetched) => {
121
+ if (!alive) return;
122
+ apmDataRef.current.isPrefetch = String(isPrefetched);
123
+ })
124
+ .catch(() => {
125
+ if (!alive) return;
126
+ apmDataRef.current.isPrefetch = "false";
137
127
  });
138
- }
139
128
  return () => {
129
+ alive = false;
140
130
  apmDataRef.current.isPrefetch = "";
141
131
  };
142
132
  }, [formatSource, abortApmCollection]);
@@ -144,8 +134,9 @@ const Image = ({
144
134
  const pushApmData = useCallback(() => {
145
135
  if (abortApmCollection) return;
146
136
  const apmData = apmDataRef.current;
147
- const viewDuration = apmData.loadedTime - apmData.intersectTime;
148
- apmData.viewDuration = viewDuration < 0 ? 0 : viewDuration;
137
+ // Simplify: do not track view duration/intersect time
138
+ apmData.intersectTime = 0;
139
+ apmData.viewDuration = 0;
149
140
  /**
150
141
  * 如果Image.queryCache未完成时,通过imageSize来判断
151
142
  * 如果image_size是-1,那么认为图片已有缓存
@@ -154,40 +145,19 @@ const Image = ({
154
145
  if (!apmDataRef.current.isPrefetch) {
155
146
  apmDataRef.current.isPrefetch = String((imageSize || 0) <= 0);
156
147
  }
157
- if (!apmDoneRef && apmData.imageUrl && !abortApmCollection) {
158
- setApmDoneRef(true);
148
+ if (!apmDoneRef.current && apmData.imageUrl && !abortApmCollection) {
149
+ apmDoneRef.current = true;
159
150
  apmPush(convertKeysToSnakeCase(apmData));
160
151
  }
161
152
  }, [abortApmCollection]);
162
153
 
163
154
  // 判断首屏
164
- if (
165
- (!apmDataRef.current.isFirstScreen || apmDataRef.current.isFirstScreen === "false") &&
166
- viewable &&
167
- !abortApmCollection
168
- ) {
169
- apmDataRef.current.isFirstScreen = "true";
170
- }
171
- useEffect(() => {
172
- if (abortApmCollection) return;
173
- const apmData = apmDataRef.current;
174
- if (!apmData.intersectTime && viewable) {
175
- apmData.intersectTime = Date.now();
176
- // 进入视窗前加载完成/失败
177
- if (apmData.loadedTime || apmData.errorReason) {
178
- pushApmData();
179
- }
180
- }
181
- }, [viewable, pushApmData, abortApmCollection]);
182
-
155
+ // isFirstScreen stays "false" and intersectTime stays 0 by design
183
156
  const onLoadEnd = () => {
184
157
  props?.onLoadEnd?.();
185
158
  if (abortApmCollection) return;
186
- const apmData = apmDataRef.current;
187
- // 进入视窗后加载成功/失败
188
- // if (apmData.intersectTime) {
159
+ // Push regardless of visibility/intersect time
189
160
  pushApmData();
190
- // }
191
161
  };
192
162
 
193
163
  const onProgress = (e: NativeSyntheticEvent<ImageProgressEventDataIOS>) => {
@@ -203,8 +173,10 @@ const Image = ({
203
173
  const onLoad = (e: NativeSyntheticEvent<ImageLoadEventData>) => {
204
174
  if (!abortApmCollection) {
205
175
  const now = Date.now();
206
- setLoadedTime(now);
207
- const loadDuration = now - apmDataRef.current.loadedStartTime;
176
+ let start = apmDataRef.current.loadedStartTime || mountTimeRef.current;
177
+ if (start > now) start = now;
178
+ apmDataRef.current.loadedStartTime = start;
179
+ const loadDuration = now - start;
208
180
  apmDataRef.current.loadedTime = now;
209
181
  apmDataRef.current.loadDuration = loadDuration < 0 ? 0 : loadDuration;
210
182
  apmDataRef.current.isSuccess = "true";
@@ -213,17 +185,8 @@ const Image = ({
213
185
  setImageStatus(IMAGE_STATUS.LOADED);
214
186
  };
215
187
 
216
- useEffect(() => {
217
- const loadDuration = loadedTime - loadStartTime;
218
- apmDataRef.current.loadDuration = loadDuration < 0 ? 0 : loadDuration;
219
- }, [loadedTime, loadStartTime]);
220
-
221
188
  const onLoadStart = () => {
222
- if (!abortApmCollection) {
223
- const now = Date.now();
224
- apmDataRef.current.loadedStartTime = now;
225
- setLoadStartTime(now);
226
- }
189
+ !abortApmCollection && (apmDataRef.current.loadedStartTime = Date.now());
227
190
  };
228
191
 
229
192
  const onError = (e: NativeSyntheticEvent<ImageErrorEventData>) => {
@@ -246,54 +209,29 @@ const Image = ({
246
209
 
247
210
  return (
248
211
  <View style={{ borderRadius, height, width, ...(style as {}) }}>
249
- {imageStatus !== IMAGE_STATUS.HIDE &&
250
- (!abortApmCollection ? (
251
- <VisibilitySensor onChange={checkIsVisible} disabled={apmDoneRef}>
252
- <RNImage
253
- {...props}
254
- // @ts-ignore
255
- source={formatSource}
256
- onLoadStart={onLoadStart}
257
- onLoad={onLoad}
258
- onProgress={onProgress}
259
- onError={onError}
260
- onLoadEnd={onLoadEnd}
261
- fadeDuration={fadeDuration}
262
- // @ts-ignore
263
- onFirstDrawFinished={onFirstDrawFinished}
264
- style={{
265
- width: width || style?.width,
266
- height: height || style?.height,
267
- borderRadius,
268
- // opacity: imageStatus === IMAGE_STATUS.LOADED ? 1 : 0,
269
- }}
270
- // @ts-ignore
271
- apmBiz={props.apmBiz}
272
- ></RNImage>
273
- </VisibilitySensor>
274
- ) : (
275
- <RNImage
276
- {...props}
277
- // @ts-ignore
278
- source={formatSource}
279
- onLoadStart={onLoadStart}
280
- onLoad={onLoad}
281
- onProgress={onProgress}
282
- onError={onError}
283
- onLoadEnd={onLoadEnd}
284
- fadeDuration={fadeDuration}
285
- // @ts-ignore
286
- onFirstDrawFinished={onFirstDrawFinished}
287
- style={{
288
- width: width || style?.width,
289
- height: height || style?.height,
290
- borderRadius,
291
- // opacity: imageStatus === IMAGE_STATUS.LOADED ? 1 : 0,
292
- }}
293
- // @ts-ignore
294
- apmBiz={props.apmBiz}
295
- ></RNImage>
296
- ))}
212
+ {imageStatus !== IMAGE_STATUS.HIDE && (
213
+ <RNImage
214
+ {...props}
215
+ // @ts-ignore
216
+ source={formatSource}
217
+ onLoadStart={onLoadStart}
218
+ onLoad={onLoad}
219
+ onProgress={onProgress}
220
+ onError={onError}
221
+ onLoadEnd={onLoadEnd}
222
+ fadeDuration={fadeDuration}
223
+ // @ts-ignore
224
+ onFirstDrawFinished={(e) => onFirstDrawFinished(e)}
225
+ style={{
226
+ width: width || style?.width,
227
+ height: height || style?.height,
228
+ borderRadius,
229
+ // opacity: imageStatus === IMAGE_STATUS.LOADED ? 1 : 0,
230
+ }}
231
+ // @ts-ignore
232
+ apmBiz={props.apmBiz}
233
+ ></RNImage>
234
+ )}
297
235
  {imageStatus === IMAGE_STATUS.LOADING && loadStyle !== TLoadStyle.NONE && (
298
236
  <View
299
237
  style={{
@@ -87,8 +87,7 @@ const VisibilitySensor = forwardRef<VisibilitySensorRef, VisibilitySensorProps>(
87
87
  stopWatching();
88
88
  }
89
89
  }
90
- // eslint-disable-next-line react-hooks/exhaustive-deps
91
- }, [rectDimensions, lastValue]);
90
+ }, [rectDimensions, lastValue, threshold, onChange, triggerOnce, stopWatching]);
92
91
  return (
93
92
  <View ref={localRef} {...rest} onLayout={() => measureInnerView()}>
94
93
  {children}
@@ -0,0 +1,84 @@
1
+ import { Image as RNImage } from "react-native";
2
+
3
+ declare const global: any;
4
+
5
+ type Resolver = (value: boolean) => void;
6
+
7
+ // Runtime switch: set global.REDS_IMAGE_QUERYCACHE_BATCHING_ENABLED = false to disable batching
8
+ let enabled: boolean = global?.REDS_IMAGE_QUERYCACHE_BATCHING_ENABLED !== false;
9
+ let FLUSH_MS = 50;
10
+
11
+ const pending = new Map<string, Resolver[]>();
12
+ let timer: ReturnType<typeof setTimeout> | null = null;
13
+
14
+ function directQuery(url: string): Promise<boolean> {
15
+ try {
16
+ if (typeof (RNImage as any).queryCache !== "function") {
17
+ return Promise.resolve(false);
18
+ }
19
+ return (RNImage as any)
20
+ .queryCache([url])
21
+ .then((res: Record<string, any>) => !!(res?.[url] || res?.[encodeURI(url)]))
22
+ .catch(() => false);
23
+ } catch (_) {
24
+ return Promise.resolve(false);
25
+ }
26
+ }
27
+
28
+ function flush() {
29
+ const entries = Array.from(pending.entries());
30
+ pending.clear();
31
+ timer = null;
32
+
33
+ const urls = entries.map(([url]) => url);
34
+ if (!urls.length) return;
35
+
36
+ if (typeof (RNImage as any).queryCache !== "function") {
37
+ entries.forEach(([, resolvers]) => resolvers.forEach((r) => r(false)));
38
+ return;
39
+ }
40
+
41
+ (RNImage as any)
42
+ .queryCache(urls)
43
+ .then((res: Record<string, any>) => {
44
+ entries.forEach(([url, resolvers]) => {
45
+ const ok = !!(res?.[url] || res?.[encodeURI(url)]);
46
+ resolvers.forEach((r) => r(ok));
47
+ });
48
+ })
49
+ .catch(() => {
50
+ entries.forEach(([, resolvers]) => resolvers.forEach((r) => r(false)));
51
+ });
52
+ }
53
+
54
+ function schedule() {
55
+ if (!timer) {
56
+ timer = setTimeout(flush, FLUSH_MS);
57
+ }
58
+ }
59
+
60
+ export function setQueryCacheBatchingEnabled(v: boolean) {
61
+ enabled = v;
62
+ }
63
+
64
+ export function configureQueryCacheBatching(options: { flushMs?: number } = {}) {
65
+ if (typeof options.flushMs === "number" && options.flushMs >= 0) {
66
+ FLUSH_MS = options.flushMs;
67
+ }
68
+ }
69
+
70
+ // Main entry: batched query with quick toggle to direct query
71
+ export function queryCacheBatched(url: string): Promise<boolean> {
72
+ if (!url) return Promise.resolve(false);
73
+ if (!enabled) return directQuery(url);
74
+
75
+ return new Promise<boolean>((resolve) => {
76
+ const list = pending.get(url);
77
+ if (list) {
78
+ list.push(resolve);
79
+ } else {
80
+ pending.set(url, [resolve]);
81
+ }
82
+ schedule();
83
+ });
84
+ }
@@ -24,6 +24,7 @@ export default ({
24
24
  arrowStyles: propsArrowStyles,
25
25
  offset,
26
26
  duration,
27
+ animation_duration,
27
28
  hostName,
28
29
  maxWidth,
29
30
  arrowOffset,
@@ -121,18 +122,18 @@ export default ({
121
122
  if (layout.x !== defaultValue) {
122
123
  Animated.timing(progress, {
123
124
  toValue: 1,
124
- duration: duration ?? 400,
125
+ duration: animation_duration ?? 400,
125
126
  useNativeDriver: false,
126
127
  }).start();
127
128
  }
128
129
  } else {
129
130
  Animated.timing(progress, {
130
131
  toValue: 0,
131
- duration: duration ?? 400,
132
+ duration: animation_duration ?? 400,
132
133
  useNativeDriver: false,
133
134
  }).start();
134
135
  }
135
- }, [_visible, layout]);
136
+ }, [_visible, layout, animation_duration]);
136
137
 
137
138
  const onMaskChange = (event: GestureResponderEvent, value: boolean) => {
138
139
  if (isControl) return;
@@ -8,27 +8,28 @@ import BaseDemo from "!!raw-loader!../demo/index.tsx";
8
8
 
9
9
  ### Props
10
10
 
11
- | 属性 | 描述 | 类型 | 默认值 |
12
- | ----------------- | --------------------------------- | --------------------------------------------------------------------------------------------------- | --------------- |
13
- | visible | 是否显示气泡 | boolean | undefined |
14
- | placement | 气泡方向 | "top-start" &#124; "top" &#124; "top-end" &#124; "bottom-start" &#124; "bottom" &#124; "bottom-end" | top |
15
- | content | 弹出内容 | ReactNode &#124; (() => ReactNode) | |
16
- | opacity | 遮罩透明度 | number | 0 |
17
- | mode | 主题色 | "light" &#124; "dark" &#124; "alwaysLight" &#124; "alwaysDark" | light |
18
- | trigger | 触发方式 | "click" &#124; "touch" | click |
19
- | duration | 固定时间后popover消失 | number | |
20
- | zIndex | 层级 | number | 1000 |
21
- | popContainerStyle | 气泡框的样式 | ViewStyle | `{}` |
22
- | closeOnClickAgain | 再次点击关闭 | boolean | true |
23
- | children | popover 作用的目标节点 | ReactNode | |
24
- | floatingStyles | floating style | ViewStyle | `{}` |
25
- | arrowStyles | arrow style | ImageStyle | `{}` |
26
- | isControl | 是否受控 | boolean | false |
27
- | offset | 气泡偏移位置 用于特殊场景适配 | Offset | `{"x":0,"y":0}` |
28
- | arrowOffset | 气泡箭头偏移位置 用于特殊场景适配 | Offset | `{"x":0,"y":0}` |
29
- | hostName | hostName | string | root |
30
- | maxWidth | popover最大宽度 | number | 280 |
31
- | layoutChange | 布局是否变化 | any | `{}` |
11
+ | 属性 | 描述 | 类型 | 默认值 |
12
+ | ------------------ | --------------------------------- | --------------------------------------------------------------------------------------------------- | --------------- |
13
+ | visible | 是否显示气泡 | boolean | undefined |
14
+ | placement | 气泡方向 | "top-start" &#124; "top" &#124; "top-end" &#124; "bottom-start" &#124; "bottom" &#124; "bottom-end" | top |
15
+ | content | 弹出内容 | ReactNode &#124; (() => ReactNode) | |
16
+ | opacity | 遮罩透明度 | number | 0 |
17
+ | mode | 主题色 | "light" &#124; "dark" &#124; "alwaysLight" &#124; "alwaysDark" | light |
18
+ | trigger | 触发方式 | "click" &#124; "touch" | click |
19
+ | duration | 固定时间后popover消失 | number | |
20
+ | animation_duration | animation_duration 动画时间 | number | |
21
+ | zIndex | 层级 | number | 1000 |
22
+ | popContainerStyle | 气泡框的样式 | ViewStyle | `{}` |
23
+ | closeOnClickAgain | 再次点击关闭 | boolean | true |
24
+ | children | popover 作用的目标节点 | ReactNode | |
25
+ | floatingStyles | floating style | ViewStyle | `{}` |
26
+ | arrowStyles | arrow style | ImageStyle | `{}` |
27
+ | isControl | 是否受控 | boolean | false |
28
+ | offset | 气泡偏移位置 用于特殊场景适配 | Offset | `{"x":0,"y":0}` |
29
+ | arrowOffset | 气泡箭头偏移位置 用于特殊场景适配 | Offset | `{"x":0,"y":0}` |
30
+ | hostName | hostName | string | root |
31
+ | maxWidth | popover最大宽度 | number | 280 |
32
+ | layoutChange | 布局是否变化 | any | `{}` |
32
33
 
33
34
  ### Events
34
35
 
@@ -12,6 +12,7 @@ export interface RedsPopover {
12
12
  mode?: "light" | "dark" | "alwaysLight" | "alwaysDark";
13
13
  trigger?: "click" | "touch";
14
14
  duration?: number;
15
+ animation_duration?: number;
15
16
  zIndex?: number;
16
17
  popContainerStyle?: ViewStyle;
17
18
  closeOnClickAgain?: boolean;