@sheinx/base 3.4.0-beta.1 → 3.4.0-beta.11

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 (301) hide show
  1. package/cjs/absolute-list/absolute-list.d.ts.map +1 -1
  2. package/cjs/absolute-list/absolute-list.js +25 -14
  3. package/cjs/absolute-list/absolute-list.type.d.ts +4 -0
  4. package/cjs/absolute-list/absolute-list.type.d.ts.map +1 -1
  5. package/cjs/animation-list/animation-list.d.ts.map +1 -1
  6. package/cjs/animation-list/animation-list.js +4 -2
  7. package/cjs/animation-list/animation-list.type.d.ts +1 -0
  8. package/cjs/animation-list/animation-list.type.d.ts.map +1 -1
  9. package/cjs/badge/badge.d.ts +5 -0
  10. package/cjs/badge/badge.d.ts.map +1 -0
  11. package/cjs/badge/badge.js +100 -0
  12. package/cjs/badge/badge.type.d.ts +81 -0
  13. package/cjs/badge/badge.type.d.ts.map +1 -0
  14. package/cjs/badge/badge.type.js +5 -0
  15. package/cjs/badge/index.d.ts +3 -0
  16. package/cjs/badge/index.d.ts.map +1 -0
  17. package/cjs/badge/index.js +20 -0
  18. package/cjs/cascader/cascader.js +2 -2
  19. package/cjs/cascader/cascader.type.d.ts +3 -2
  20. package/cjs/cascader/cascader.type.d.ts.map +1 -1
  21. package/cjs/checkbox/checkbox-group.d.ts.map +1 -1
  22. package/cjs/checkbox/checkbox-group.js +4 -0
  23. package/cjs/checkbox/simple-checkbox.js +1 -0
  24. package/cjs/date-picker/confirm.d.ts +5 -0
  25. package/cjs/date-picker/confirm.d.ts.map +1 -0
  26. package/cjs/date-picker/confirm.js +31 -0
  27. package/cjs/date-picker/confirm.type.d.ts +5 -0
  28. package/cjs/date-picker/confirm.type.d.ts.map +1 -0
  29. package/cjs/date-picker/confirm.type.js +5 -0
  30. package/cjs/date-picker/date-picker.d.ts.map +1 -1
  31. package/cjs/date-picker/date-picker.js +47 -7
  32. package/cjs/date-picker/date-picker.type.d.ts +23 -2
  33. package/cjs/date-picker/date-picker.type.d.ts.map +1 -1
  34. package/cjs/date-picker/day.d.ts.map +1 -1
  35. package/cjs/date-picker/day.js +37 -13
  36. package/cjs/date-picker/month.d.ts.map +1 -1
  37. package/cjs/date-picker/month.js +5 -1
  38. package/cjs/date-picker/picker.d.ts.map +1 -1
  39. package/cjs/date-picker/picker.js +27 -4
  40. package/cjs/date-picker/picker.type.d.ts +6 -2
  41. package/cjs/date-picker/picker.type.d.ts.map +1 -1
  42. package/cjs/date-picker/quarter.d.ts.map +1 -1
  43. package/cjs/date-picker/quarter.js +5 -1
  44. package/cjs/date-picker/quick.d.ts.map +1 -1
  45. package/cjs/date-picker/quick.js +23 -5
  46. package/cjs/date-picker/quick.type.d.ts +1 -0
  47. package/cjs/date-picker/quick.type.d.ts.map +1 -1
  48. package/cjs/date-picker/result.d.ts +6 -0
  49. package/cjs/date-picker/result.d.ts.map +1 -1
  50. package/cjs/date-picker/result.js +14 -1
  51. package/cjs/date-picker/time.d.ts.map +1 -1
  52. package/cjs/date-picker/time.js +14 -6
  53. package/cjs/date-picker/year.d.ts.map +1 -1
  54. package/cjs/date-picker/year.js +5 -1
  55. package/cjs/dropdown/Item.d.ts.map +1 -1
  56. package/cjs/dropdown/Item.js +7 -2
  57. package/cjs/dropdown/dropdown.type.d.ts +6 -0
  58. package/cjs/dropdown/dropdown.type.d.ts.map +1 -1
  59. package/cjs/dropdown/dropdownIn.d.ts.map +1 -1
  60. package/cjs/dropdown/dropdownIn.js +3 -1
  61. package/cjs/form/form-footer-context.d.ts.map +1 -1
  62. package/cjs/form/form-footer-context.js +6 -2
  63. package/cjs/form/form.d.ts.map +1 -1
  64. package/cjs/form/form.js +3 -1
  65. package/cjs/icons/config.d.ts +3 -0
  66. package/cjs/icons/config.d.ts.map +1 -1
  67. package/cjs/icons/config.js +3 -0
  68. package/cjs/icons/icons.d.ts +1 -0
  69. package/cjs/icons/icons.d.ts.map +1 -1
  70. package/cjs/icons/icons.js +3 -1
  71. package/cjs/index.d.ts +2 -0
  72. package/cjs/index.d.ts.map +1 -1
  73. package/cjs/index.js +24 -0
  74. package/cjs/link/index.d.ts +3 -0
  75. package/cjs/link/index.d.ts.map +1 -0
  76. package/cjs/link/index.js +20 -0
  77. package/cjs/link/link.d.ts +5 -0
  78. package/cjs/link/link.d.ts.map +1 -0
  79. package/cjs/link/link.js +52 -0
  80. package/cjs/link/link.type.d.ts +50 -0
  81. package/cjs/link/link.type.d.ts.map +1 -0
  82. package/cjs/link/link.type.js +5 -0
  83. package/cjs/popover/popover.d.ts.map +1 -1
  84. package/cjs/popover/popover.js +4 -0
  85. package/cjs/select/list-columns.js +1 -1
  86. package/cjs/select/list-option.d.ts.map +1 -1
  87. package/cjs/select/list-option.js +27 -3
  88. package/cjs/select/list-option.type.d.ts +3 -0
  89. package/cjs/select/list-option.type.d.ts.map +1 -1
  90. package/cjs/select/list.d.ts.map +1 -1
  91. package/cjs/select/list.js +11 -18
  92. package/cjs/select/result-input.d.ts.map +1 -1
  93. package/cjs/select/result-input.js +9 -2
  94. package/cjs/select/result-input.type.d.ts +1 -0
  95. package/cjs/select/result-input.type.d.ts.map +1 -1
  96. package/cjs/select/result-more.d.ts +2 -2
  97. package/cjs/select/result-more.d.ts.map +1 -1
  98. package/cjs/select/result-more.js +2 -2
  99. package/cjs/select/result-more.type.d.ts +1 -1
  100. package/cjs/select/result-more.type.d.ts.map +1 -1
  101. package/cjs/select/result.d.ts.map +1 -1
  102. package/cjs/select/result.js +7 -9
  103. package/cjs/select/result.type.d.ts +1 -0
  104. package/cjs/select/result.type.d.ts.map +1 -1
  105. package/cjs/select/select.d.ts.map +1 -1
  106. package/cjs/select/select.js +24 -3
  107. package/cjs/select/select.type.d.ts +14 -8
  108. package/cjs/select/select.type.d.ts.map +1 -1
  109. package/cjs/table/table.d.ts.map +1 -1
  110. package/cjs/table/table.js +13 -5
  111. package/cjs/table/table.type.d.ts +7 -5
  112. package/cjs/table/table.type.d.ts.map +1 -1
  113. package/cjs/table/tbody.d.ts.map +1 -1
  114. package/cjs/table/tbody.js +1 -0
  115. package/cjs/table/tr.d.ts +1 -0
  116. package/cjs/table/tr.d.ts.map +1 -1
  117. package/cjs/table/tr.js +21 -8
  118. package/cjs/tabs/tab.d.ts.map +1 -1
  119. package/cjs/tabs/tab.js +27 -16
  120. package/cjs/tabs/tabs-header.d.ts.map +1 -1
  121. package/cjs/tabs/tabs-header.js +27 -6
  122. package/cjs/tabs/tabs.d.ts.map +1 -1
  123. package/cjs/tabs/tabs.js +18 -14
  124. package/cjs/tabs/tabs.type.d.ts +1 -0
  125. package/cjs/tabs/tabs.type.d.ts.map +1 -1
  126. package/cjs/tag/tag.js +2 -2
  127. package/cjs/tag/use-tag.js +2 -2
  128. package/cjs/tooltip/tooltip.d.ts.map +1 -1
  129. package/cjs/tooltip/tooltip.js +18 -6
  130. package/cjs/tooltip/tooltip.type.d.ts +4 -0
  131. package/cjs/tooltip/tooltip.type.d.ts.map +1 -1
  132. package/cjs/transfer/transfer-list-item.d.ts.map +1 -1
  133. package/cjs/transfer/transfer-list.type.d.ts +1 -1
  134. package/cjs/transfer/transfer-list.type.d.ts.map +1 -1
  135. package/cjs/transfer/transfer.d.ts.map +1 -1
  136. package/cjs/transfer/transfer.js +2 -1
  137. package/cjs/transfer/transfer.type.d.ts +7 -1
  138. package/cjs/transfer/transfer.type.d.ts.map +1 -1
  139. package/cjs/tree/tree.d.ts.map +1 -1
  140. package/cjs/tree/tree.js +24 -8
  141. package/cjs/tree/tree.type.d.ts +5 -0
  142. package/cjs/tree/tree.type.d.ts.map +1 -1
  143. package/cjs/tree-select/tree-select.type.d.ts +3 -2
  144. package/cjs/tree-select/tree-select.type.d.ts.map +1 -1
  145. package/cjs/virtual-scroll/scroll.d.ts.map +1 -1
  146. package/cjs/virtual-scroll/scroll.js +11 -1
  147. package/cjs/virtual-scroll/virtual-scroll-list.d.ts.map +1 -1
  148. package/cjs/virtual-scroll/virtual-scroll-list.js +148 -21
  149. package/cjs/virtual-scroll/virtual-scroll-list.type.d.ts +2 -0
  150. package/cjs/virtual-scroll/virtual-scroll-list.type.d.ts.map +1 -1
  151. package/esm/absolute-list/absolute-list.d.ts.map +1 -1
  152. package/esm/absolute-list/absolute-list.js +25 -14
  153. package/esm/absolute-list/absolute-list.type.d.ts +4 -0
  154. package/esm/absolute-list/absolute-list.type.d.ts.map +1 -1
  155. package/esm/animation-list/animation-list.d.ts.map +1 -1
  156. package/esm/animation-list/animation-list.js +4 -2
  157. package/esm/animation-list/animation-list.type.d.ts +1 -0
  158. package/esm/animation-list/animation-list.type.d.ts.map +1 -1
  159. package/esm/badge/badge.d.ts +5 -0
  160. package/esm/badge/badge.d.ts.map +1 -0
  161. package/esm/badge/badge.js +95 -0
  162. package/esm/badge/badge.type.d.ts +81 -0
  163. package/esm/badge/badge.type.d.ts.map +1 -0
  164. package/esm/badge/badge.type.js +1 -0
  165. package/esm/badge/index.d.ts +3 -0
  166. package/esm/badge/index.d.ts.map +1 -0
  167. package/esm/badge/index.js +2 -0
  168. package/esm/cascader/cascader.js +2 -2
  169. package/esm/cascader/cascader.type.d.ts +3 -2
  170. package/esm/cascader/cascader.type.d.ts.map +1 -1
  171. package/esm/checkbox/checkbox-group.d.ts.map +1 -1
  172. package/esm/checkbox/checkbox-group.js +6 -2
  173. package/esm/checkbox/simple-checkbox.js +1 -0
  174. package/esm/date-picker/confirm.d.ts +5 -0
  175. package/esm/date-picker/confirm.d.ts.map +1 -0
  176. package/esm/date-picker/confirm.js +24 -0
  177. package/esm/date-picker/confirm.type.d.ts +5 -0
  178. package/esm/date-picker/confirm.type.d.ts.map +1 -0
  179. package/esm/date-picker/confirm.type.js +1 -0
  180. package/esm/date-picker/date-picker.d.ts.map +1 -1
  181. package/esm/date-picker/date-picker.js +48 -8
  182. package/esm/date-picker/date-picker.type.d.ts +23 -2
  183. package/esm/date-picker/date-picker.type.d.ts.map +1 -1
  184. package/esm/date-picker/day.d.ts.map +1 -1
  185. package/esm/date-picker/day.js +37 -13
  186. package/esm/date-picker/month.d.ts.map +1 -1
  187. package/esm/date-picker/month.js +5 -1
  188. package/esm/date-picker/picker.d.ts.map +1 -1
  189. package/esm/date-picker/picker.js +27 -4
  190. package/esm/date-picker/picker.type.d.ts +6 -2
  191. package/esm/date-picker/picker.type.d.ts.map +1 -1
  192. package/esm/date-picker/quarter.d.ts.map +1 -1
  193. package/esm/date-picker/quarter.js +5 -1
  194. package/esm/date-picker/quick.d.ts.map +1 -1
  195. package/esm/date-picker/quick.js +20 -5
  196. package/esm/date-picker/quick.type.d.ts +1 -0
  197. package/esm/date-picker/quick.type.d.ts.map +1 -1
  198. package/esm/date-picker/result.d.ts +6 -0
  199. package/esm/date-picker/result.d.ts.map +1 -1
  200. package/esm/date-picker/result.js +14 -1
  201. package/esm/date-picker/time.d.ts.map +1 -1
  202. package/esm/date-picker/time.js +14 -6
  203. package/esm/date-picker/year.d.ts.map +1 -1
  204. package/esm/date-picker/year.js +5 -1
  205. package/esm/dropdown/Item.d.ts.map +1 -1
  206. package/esm/dropdown/Item.js +7 -2
  207. package/esm/dropdown/dropdown.type.d.ts +6 -0
  208. package/esm/dropdown/dropdown.type.d.ts.map +1 -1
  209. package/esm/dropdown/dropdownIn.d.ts.map +1 -1
  210. package/esm/dropdown/dropdownIn.js +3 -1
  211. package/esm/form/form-footer-context.d.ts.map +1 -1
  212. package/esm/form/form-footer-context.js +6 -2
  213. package/esm/form/form.d.ts.map +1 -1
  214. package/esm/form/form.js +3 -1
  215. package/esm/icons/config.d.ts +3 -0
  216. package/esm/icons/config.d.ts.map +1 -1
  217. package/esm/icons/config.js +3 -0
  218. package/esm/icons/icons.d.ts +1 -0
  219. package/esm/icons/icons.d.ts.map +1 -1
  220. package/esm/icons/icons.js +3 -1
  221. package/esm/index.d.ts +2 -0
  222. package/esm/index.d.ts.map +1 -1
  223. package/esm/index.js +2 -0
  224. package/esm/link/index.d.ts +3 -0
  225. package/esm/link/index.d.ts.map +1 -0
  226. package/esm/link/index.js +2 -0
  227. package/esm/link/link.d.ts +5 -0
  228. package/esm/link/link.d.ts.map +1 -0
  229. package/esm/link/link.js +47 -0
  230. package/esm/link/link.type.d.ts +50 -0
  231. package/esm/link/link.type.d.ts.map +1 -0
  232. package/esm/link/link.type.js +1 -0
  233. package/esm/popover/popover.d.ts.map +1 -1
  234. package/esm/popover/popover.js +4 -0
  235. package/esm/select/list-columns.js +1 -1
  236. package/esm/select/list-option.d.ts.map +1 -1
  237. package/esm/select/list-option.js +27 -3
  238. package/esm/select/list-option.type.d.ts +3 -0
  239. package/esm/select/list-option.type.d.ts.map +1 -1
  240. package/esm/select/list.d.ts.map +1 -1
  241. package/esm/select/list.js +11 -19
  242. package/esm/select/result-input.d.ts.map +1 -1
  243. package/esm/select/result-input.js +9 -2
  244. package/esm/select/result-input.type.d.ts +1 -0
  245. package/esm/select/result-input.type.d.ts.map +1 -1
  246. package/esm/select/result-more.d.ts +2 -2
  247. package/esm/select/result-more.d.ts.map +1 -1
  248. package/esm/select/result-more.js +2 -2
  249. package/esm/select/result-more.type.d.ts +1 -1
  250. package/esm/select/result-more.type.d.ts.map +1 -1
  251. package/esm/select/result.d.ts.map +1 -1
  252. package/esm/select/result.js +9 -11
  253. package/esm/select/result.type.d.ts +1 -0
  254. package/esm/select/result.type.d.ts.map +1 -1
  255. package/esm/select/select.d.ts.map +1 -1
  256. package/esm/select/select.js +24 -3
  257. package/esm/select/select.type.d.ts +14 -8
  258. package/esm/select/select.type.d.ts.map +1 -1
  259. package/esm/table/table.d.ts.map +1 -1
  260. package/esm/table/table.js +14 -6
  261. package/esm/table/table.type.d.ts +7 -5
  262. package/esm/table/table.type.d.ts.map +1 -1
  263. package/esm/table/tbody.d.ts.map +1 -1
  264. package/esm/table/tbody.js +1 -0
  265. package/esm/table/tr.d.ts +1 -0
  266. package/esm/table/tr.d.ts.map +1 -1
  267. package/esm/table/tr.js +22 -8
  268. package/esm/tabs/tab.d.ts.map +1 -1
  269. package/esm/tabs/tab.js +28 -16
  270. package/esm/tabs/tabs-header.d.ts.map +1 -1
  271. package/esm/tabs/tabs-header.js +27 -6
  272. package/esm/tabs/tabs.d.ts.map +1 -1
  273. package/esm/tabs/tabs.js +18 -14
  274. package/esm/tabs/tabs.type.d.ts +1 -0
  275. package/esm/tabs/tabs.type.d.ts.map +1 -1
  276. package/esm/tag/tag.js +2 -2
  277. package/esm/tag/use-tag.js +2 -2
  278. package/esm/tooltip/tooltip.d.ts.map +1 -1
  279. package/esm/tooltip/tooltip.js +20 -8
  280. package/esm/tooltip/tooltip.type.d.ts +4 -0
  281. package/esm/tooltip/tooltip.type.d.ts.map +1 -1
  282. package/esm/transfer/transfer-list-item.d.ts.map +1 -1
  283. package/esm/transfer/transfer-list.type.d.ts +1 -1
  284. package/esm/transfer/transfer-list.type.d.ts.map +1 -1
  285. package/esm/transfer/transfer.d.ts.map +1 -1
  286. package/esm/transfer/transfer.js +2 -1
  287. package/esm/transfer/transfer.type.d.ts +7 -1
  288. package/esm/transfer/transfer.type.d.ts.map +1 -1
  289. package/esm/tree/tree.d.ts.map +1 -1
  290. package/esm/tree/tree.js +25 -9
  291. package/esm/tree/tree.type.d.ts +5 -0
  292. package/esm/tree/tree.type.d.ts.map +1 -1
  293. package/esm/tree-select/tree-select.type.d.ts +3 -2
  294. package/esm/tree-select/tree-select.type.d.ts.map +1 -1
  295. package/esm/virtual-scroll/scroll.d.ts.map +1 -1
  296. package/esm/virtual-scroll/scroll.js +12 -2
  297. package/esm/virtual-scroll/virtual-scroll-list.d.ts.map +1 -1
  298. package/esm/virtual-scroll/virtual-scroll-list.js +149 -22
  299. package/esm/virtual-scroll/virtual-scroll-list.type.d.ts +2 -0
  300. package/esm/virtual-scroll/virtual-scroll-list.type.d.ts.map +1 -1
  301. package/package.json +2 -2
@@ -10,7 +10,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
10
10
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11
11
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
12
12
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
- import React, { useState, useEffect, useRef } from 'react';
13
+ import React, { useState, useEffect, useLayoutEffect, useRef } from 'react';
14
14
  import { usePersistFn } from '@sheinx/hooks';
15
15
  import Scroll from "./scroll";
16
16
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -28,30 +28,110 @@ var VirtualList = function VirtualList(props) {
28
28
  _props$tag = props.tag,
29
29
  tag = _props$tag === void 0 ? 'div' : _props$tag,
30
30
  tagClassName = props.tagClassName,
31
+ dynamicVirtual = props.dynamicVirtual,
31
32
  virtualRef = props.virtualRef,
32
33
  onControlTypeChange = props.onControlTypeChange;
33
34
  var _useState = useState(0),
34
35
  _useState2 = _slicedToArray(_useState, 2),
35
- currentIndex = _useState2[0],
36
- setCurrentIndex = _useState2[1];
36
+ top = _useState2[0],
37
+ setTop = _useState2[1];
37
38
  var _useState3 = useState(0),
38
39
  _useState4 = _slicedToArray(_useState3, 2),
39
- top = _useState4[0],
40
- setTop = _useState4[1];
40
+ offsetY = _useState4[0],
41
+ setOffsetY = _useState4[1];
42
+ var _useState5 = useState(props.data.length * lineHeight),
43
+ _useState6 = _slicedToArray(_useState5, 2),
44
+ scrollHeight = _useState6[0],
45
+ setHeight = _useState6[1];
46
+ var _useState7 = useState(0),
47
+ _useState8 = _slicedToArray(_useState7, 2),
48
+ startIndex = _useState8[0],
49
+ setStartIndex = _useState8[1];
41
50
  var wrapperRef = useRef(null);
42
- var getScrollHeight = function getScrollHeight() {
43
- var rows = Math.ceil(data.length);
44
- return rows * lineHeight;
51
+ var _useRef = useRef({
52
+ cachedHeight: [],
53
+ controlScrollRate: null,
54
+ heightCallback: null,
55
+ preIndex: null,
56
+ topTimer: null,
57
+ rateTimer: null,
58
+ shouldUpdateHeight: true
59
+ }),
60
+ context = _useRef.current;
61
+ var getContentHeight = function getContentHeight(index) {
62
+ var sum = 0;
63
+ for (var i = 0; i <= index; i++) {
64
+ sum += context.cachedHeight[i] || lineHeight;
65
+ }
66
+ return sum;
45
67
  };
46
68
  var getCurrentIndex = usePersistFn(function () {
47
- return currentIndex;
69
+ return startIndex;
48
70
  });
49
71
  var getTop = usePersistFn(function () {
50
72
  return top;
51
73
  });
74
+ var setRowHeight = usePersistFn(function (index, height) {
75
+ var beforeHeight = context.cachedHeight[index];
76
+ if (beforeHeight && beforeHeight === height) return;
77
+ context.cachedHeight[index] = height;
78
+ if (context.shouldUpdateHeight) {
79
+ setHeight(getContentHeight(props.data.length - 1));
80
+ }
81
+ var preIndex = context.preIndex;
82
+ // 解决: 从下往上滚 由于高度变化会导致滚动条跳动
83
+ if (preIndex && preIndex > startIndex && startIndex === index) {
84
+ // 发生在顶部
85
+ if (context.heightCallback) return;
86
+ var offset = height - (beforeHeight || lineHeight);
87
+ setOffsetY(function (s) {
88
+ return s + offset;
89
+ });
90
+ }
91
+ });
92
+ var updateRateScroll = usePersistFn(function (rate) {
93
+ var sumHeight = getContentHeight(props.data.length - 1);
94
+ if (sumHeight === scrollHeight) return;
95
+ context.shouldUpdateHeight = true;
96
+ context.heightCallback = function () {
97
+ if (wrapperRef && wrapperRef.current) {
98
+ var _scrollHeight = wrapperRef.current.scrollHeight;
99
+ var clientHeight = wrapperRef.current.clientHeight;
100
+ var nowTop = wrapperRef.current.scrollTop;
101
+ var max = _scrollHeight - clientHeight;
102
+ var _top = rate * max;
103
+ if (Math.abs(nowTop - _top) < 1) {
104
+ context.controlScrollRate = null;
105
+ } else {
106
+ context.controlScrollRate = rate;
107
+ wrapperRef.current.scrollTop = _top;
108
+ }
109
+ }
110
+ };
111
+ setHeight(sumHeight);
112
+ });
113
+ var updateIndexAndTopFromTop = function updateIndexAndTopFromTop(scrollTop) {
114
+ var sum = 0;
115
+ var nextCurrentIndex = 0;
116
+ var top = 0;
117
+ var maxIndex = Math.max(props.data.length - rowsInView, 0);
118
+ for (var i = 0; i <= maxIndex; i++) {
119
+ sum += context.cachedHeight[i] || lineHeight;
120
+ if (scrollTop < sum || i === maxIndex) {
121
+ nextCurrentIndex = i;
122
+ var beforeHeight = i === 0 ? 0 : sum - (context.cachedHeight[i] || lineHeight);
123
+ top = scrollTop - beforeHeight;
124
+ break;
125
+ }
126
+ }
127
+ if (nextCurrentIndex !== startIndex) {
128
+ setStartIndex(nextCurrentIndex);
129
+ }
130
+ setTop(top);
131
+ };
52
132
  var handleScrollByStep = usePersistFn(function (step, top) {
53
133
  var _wrapperRef$current;
54
- var next = currentIndex + step;
134
+ var next = startIndex + step;
55
135
  (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 || _wrapperRef$current.scrollTo({
56
136
  top: next * lineHeight + (top || 0)
57
137
  });
@@ -61,21 +141,35 @@ var VirtualList = function VirtualList(props) {
61
141
  };
62
142
  var handleScroll = function handleScroll(info) {
63
143
  var _props$onScroll;
64
- var current = Math.floor(info.scrollTop / lineHeight);
65
- var top = info.scrollTop - current * lineHeight;
144
+ var height = info.height,
145
+ y = info.y,
146
+ fromDrag = info.fromDrag;
147
+ var scrollTop = info.scrollTop;
148
+ context.shouldUpdateHeight = !fromDrag;
149
+ var sumHeight = getContentHeight(props.data.length - 1);
150
+ var max = sumHeight - height;
151
+ if (scrollTop > max) {
152
+ scrollTop = max;
153
+ }
154
+ if (fromDrag) {
155
+ var _top2 = y * max;
156
+ updateIndexAndTopFromTop(_top2);
157
+ if (context.rateTimer) clearTimeout(context.rateTimer);
158
+ context.rateTimer = setTimeout(function () {
159
+ updateRateScroll(y);
160
+ }, 120);
161
+ } else {
162
+ updateIndexAndTopFromTop(scrollTop);
163
+ }
66
164
  (_props$onScroll = props.onScroll) === null || _props$onScroll === void 0 || _props$onScroll.call(props, info);
67
- setTop(top);
68
- setCurrentIndex(current);
69
165
  };
70
- var scrollHeight = getScrollHeight();
71
166
  var renderList = function renderList() {
72
- var start = currentIndex;
73
- var end = currentIndex + rowsInView;
74
- var items = data.slice(start, end);
167
+ var items = data.slice(startIndex, startIndex + rowsInView);
75
168
  var Tag = tag;
76
- var shouldScroll = data.length * lineHeight > height;
169
+ var shouldScroll = getContentHeight(data.length - 1) > height;
77
170
  var nextStyle = _objectSpread({}, style);
78
171
  if (shouldScroll) nextStyle.height = height;
172
+ var scrollHeight = getContentHeight(data.length - 1);
79
173
  return /*#__PURE__*/_jsx(Scroll, {
80
174
  className: className,
81
175
  style: nextStyle,
@@ -96,16 +190,49 @@ var VirtualList = function VirtualList(props) {
96
190
  children: items.map(function (d, i) {
97
191
  if (d[groupKey]) {
98
192
  return /*#__PURE__*/_jsx(React.Fragment, {
99
- children: customRenderItem(d, currentIndex + i, i)
193
+ children: customRenderItem(d, startIndex + i, i)
100
194
  }, i);
101
195
  }
102
196
  return /*#__PURE__*/_jsx(React.Fragment, {
103
- children: renderItem(d, currentIndex + i, i)
104
- }, i);
197
+ children: renderItem(d, startIndex + i, i, setRowHeight)
198
+ }, dynamicVirtual ? startIndex + i : i);
105
199
  })
106
200
  })
107
201
  });
108
202
  };
203
+ useEffect(function () {
204
+ // 记录preIndex
205
+ context.preIndex = startIndex;
206
+ }, [startIndex]);
207
+ useLayoutEffect(function () {
208
+ // 数据变化的时候清空掉 preIndex, 如果之前有缓存的index, setRowHeight 会有问题
209
+ setTop(0);
210
+ setStartIndex(0);
211
+ return function () {
212
+ context.preIndex = null;
213
+ };
214
+ }, [data.length]);
215
+ useEffect(function () {
216
+ if (offsetY) {
217
+ if (wrapperRef.current) {
218
+ setOffsetY(0);
219
+ setTop(function (s) {
220
+ return s + offsetY;
221
+ });
222
+ wrapperRef.current.scrollTop += offsetY;
223
+ }
224
+ }
225
+ }, [offsetY, startIndex]);
226
+ useEffect(function () {
227
+ setHeight(getContentHeight(props.data.length - 1));
228
+ }, [data.length]);
229
+ useEffect(function () {
230
+ if (context.heightCallback) {
231
+ var cb = context.heightCallback;
232
+ context.heightCallback = null;
233
+ cb();
234
+ }
235
+ }, [scrollHeight]);
109
236
  useEffect(function () {
110
237
  if (virtualRef !== null && virtualRef !== void 0 && virtualRef.current) {
111
238
  virtualRef.current.scrollByStep = handleScrollByStep;
@@ -6,6 +6,7 @@ export type VirtualListType = {
6
6
  getCurrentIndex?: () => number;
7
7
  getTop?: () => number;
8
8
  getHoverIndex?: () => number;
9
+ setStartIndex?: (index: number) => void;
9
10
  };
10
11
  export interface VirtualListProps<DataItem> extends Pick<CommonType, 'className' | 'style'> {
11
12
  data: DataItem[];
@@ -21,6 +22,7 @@ export interface VirtualListProps<DataItem> extends Pick<CommonType, 'className'
21
22
  tagClassName?: string;
22
23
  virtualRef?: React.MutableRefObject<VirtualListType>;
23
24
  scrollerStyle?: React.CSSProperties;
25
+ dynamicVirtual?: boolean;
24
26
  onControlTypeChange?: React.Dispatch<React.SetStateAction<'mouse' | 'keyboard'>>;
25
27
  onScroll?: (info: {
26
28
  scrollLeft: number;
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-scroll-list.type.d.ts","sourceRoot":"","sources":["virtual-scroll-list.type.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,gBAAgB,CAAC,QAAQ,CAAE,SAAQ,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC;IACzF,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE9B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,GAAG,CAAC;IAChB,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACrD,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,mBAAmB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;IACjF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,IAAI,CAAC;CACZ"}
1
+ {"version":3,"file":"virtual-scroll-list.type.d.ts","sourceRoot":"","sources":["virtual-scroll-list.type.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF,MAAM,WAAW,gBAAgB,CAAC,QAAQ,CAAE,SAAQ,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC;IACzF,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE9B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,GAAG,CAAC;IAChB,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACrD,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;IACjF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,IAAI,CAAC;CACZ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sheinx/base",
3
- "version": "3.4.0-beta.1",
3
+ "version": "3.4.0-beta.11",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -10,7 +10,7 @@
10
10
  "module": "./esm/index.js",
11
11
  "typings": "./cjs/index.d.ts",
12
12
  "dependencies": {
13
- "@sheinx/hooks": "3.4.0-beta.1",
13
+ "@sheinx/hooks": "3.4.0-beta.11",
14
14
  "immer": "^10.0.0",
15
15
  "classnames": "^2.0.0",
16
16
  "@shined/reactive": "^0.1.3-alpha.0"