@minilo/ui 0.0.6 → 0.0.8

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 (216) hide show
  1. package/package.json +2 -2
  2. package/minilo/dist/index.css +0 -1
  3. package/minilo/dist/index.full.js +0 -8421
  4. package/minilo/dist/index.full.min.js +0 -2
  5. package/minilo/dist/index.full.min.js.map +0 -1
  6. package/minilo/dist/index.full.min.mjs +0 -2
  7. package/minilo/dist/index.full.min.mjs.map +0 -1
  8. package/minilo/dist/index.full.mjs +0 -8401
  9. package/minilo/es/components/button/index.d.ts +0 -47
  10. package/minilo/es/components/button/index.mjs +0 -6
  11. package/minilo/es/components/button/index.vue.d.ts +0 -29
  12. package/minilo/es/components/button/index.vue.mjs +0 -5
  13. package/minilo/es/components/button/index.vue2.mjs +0 -67
  14. package/minilo/es/components/button/type.d.ts +0 -10
  15. package/minilo/es/components/chart/index.d.ts +0 -49
  16. package/minilo/es/components/chart/index.mjs +0 -6
  17. package/minilo/es/components/chart/index.vue.d.ts +0 -33
  18. package/minilo/es/components/chart/index.vue.mjs +0 -5
  19. package/minilo/es/components/chart/index.vue2.mjs +0 -124
  20. package/minilo/es/components/chart/type.d.ts +0 -7
  21. package/minilo/es/components/detail/index.d.ts +0 -37
  22. package/minilo/es/components/detail/index.mjs +0 -6
  23. package/minilo/es/components/detail/index.vue.d.ts +0 -23
  24. package/minilo/es/components/detail/index.vue.mjs +0 -5
  25. package/minilo/es/components/detail/index.vue2.mjs +0 -194
  26. package/minilo/es/components/detail/renderLabel.vue.d.ts +0 -8
  27. package/minilo/es/components/detail/renderLabel.vue.mjs +0 -5
  28. package/minilo/es/components/detail/renderLabel.vue2.mjs +0 -23
  29. package/minilo/es/components/detail/renderTooltip.vue.d.ts +0 -8
  30. package/minilo/es/components/detail/renderTooltip.vue.mjs +0 -5
  31. package/minilo/es/components/detail/renderTooltip.vue2.mjs +0 -23
  32. package/minilo/es/components/detail/type.d.ts +0 -27
  33. package/minilo/es/components/image-upload-pro/index.d.ts +0 -544
  34. package/minilo/es/components/image-upload-pro/index.mjs +0 -7
  35. package/minilo/es/components/image-upload-pro/index.vue.d.ts +0 -546
  36. package/minilo/es/components/image-upload-pro/index.vue.mjs +0 -5
  37. package/minilo/es/components/image-upload-pro/index.vue2.mjs +0 -657
  38. package/minilo/es/components/image-upload-pro/type.d.ts +0 -147
  39. package/minilo/es/components/image-upload-pro/type.mjs +0 -81
  40. package/minilo/es/components/index.d.ts +0 -11
  41. package/minilo/es/components/index.mjs +0 -14
  42. package/minilo/es/components/number-range-input/index.d.ts +0 -41
  43. package/minilo/es/components/number-range-input/index.mjs +0 -6
  44. package/minilo/es/components/number-range-input/index.vue.d.ts +0 -33
  45. package/minilo/es/components/number-range-input/index.vue.mjs +0 -5
  46. package/minilo/es/components/number-range-input/index.vue2.mjs +0 -150
  47. package/minilo/es/components/number-range-input/props.d.ts +0 -10
  48. package/minilo/es/components/search/index.d.ts +0 -488
  49. package/minilo/es/components/search/index.mjs +0 -6
  50. package/minilo/es/components/search/index.vue.d.ts +0 -554
  51. package/minilo/es/components/search/index.vue.mjs +0 -5
  52. package/minilo/es/components/search/index.vue2.mjs +0 -298
  53. package/minilo/es/components/search/props.d.ts +0 -107
  54. package/minilo/es/components/search/props.mjs +0 -55
  55. package/minilo/es/components/search-table/index.d.ts +0 -274
  56. package/minilo/es/components/search-table/index.mjs +0 -6
  57. package/minilo/es/components/search-table/index.vue.d.ts +0 -173
  58. package/minilo/es/components/search-table/index.vue.mjs +0 -5
  59. package/minilo/es/components/search-table/index.vue2.mjs +0 -195
  60. package/minilo/es/components/search-table/props.d.ts +0 -69
  61. package/minilo/es/components/search-table/props.mjs +0 -69
  62. package/minilo/es/components/search-table/render.d.ts +0 -11
  63. package/minilo/es/components/search-table/render.mjs +0 -19
  64. package/minilo/es/components/tree-select/index.d.ts +0 -32
  65. package/minilo/es/components/tree-select/index.mjs +0 -6
  66. package/minilo/es/components/tree-select/index.vue.d.ts +0 -20
  67. package/minilo/es/components/tree-select/index.vue.mjs +0 -5
  68. package/minilo/es/components/tree-select/index.vue2.mjs +0 -226
  69. package/minilo/es/components/tree-select/type.d.ts +0 -34
  70. package/minilo/es/components/tree-select-dialog/index.d.ts +0 -62
  71. package/minilo/es/components/tree-select-dialog/index.mjs +0 -7
  72. package/minilo/es/components/tree-select-dialog/index.vue.d.ts +0 -23
  73. package/minilo/es/components/tree-select-dialog/index.vue.mjs +0 -5
  74. package/minilo/es/components/tree-select-dialog/index.vue2.mjs +0 -137
  75. package/minilo/es/components/tree-select-dialog/type.d.ts +0 -9
  76. package/minilo/es/components/tree-select-dialog/type.mjs +0 -24
  77. package/minilo/es/components/tree-select-drawer/index.d.ts +0 -67
  78. package/minilo/es/components/tree-select-drawer/index.mjs +0 -7
  79. package/minilo/es/components/tree-select-drawer/index.vue.d.ts +0 -23
  80. package/minilo/es/components/tree-select-drawer/index.vue.mjs +0 -5
  81. package/minilo/es/components/tree-select-drawer/index.vue2.mjs +0 -143
  82. package/minilo/es/components/tree-select-drawer/type.d.ts +0 -10
  83. package/minilo/es/components/tree-select-drawer/type.mjs +0 -20
  84. package/minilo/es/components/virtual-list/index.d.ts +0 -59
  85. package/minilo/es/components/virtual-list/index.mjs +0 -6
  86. package/minilo/es/components/virtual-list/index.vue.d.ts +0 -39
  87. package/minilo/es/components/virtual-list/index.vue.mjs +0 -5
  88. package/minilo/es/components/virtual-list/index.vue2.mjs +0 -421
  89. package/minilo/es/components/virtual-list/type.d.ts +0 -20
  90. package/minilo/es/index.d.ts +0 -1724
  91. package/minilo/es/node_modules/.pnpm/@element-plus_icons-vue@2.3.1_vue@3.5.26_typescript@5.9.3_/node_modules/@element-plus/icons-vue/dist/index.mjs +0 -41
  92. package/minilo/es/node_modules/.pnpm/@minilo_utils@0.0.2_vue@3.5.26_typescript@5.9.3_/node_modules/@minilo/utils/dist/func/common.mjs +0 -14
  93. package/minilo/es/node_modules/.pnpm/@minilo_utils@0.0.2_vue@3.5.26_typescript@5.9.3_/node_modules/@minilo/utils/dist/request/index.mjs +0 -110
  94. package/minilo/es/node_modules/.pnpm/@vueuse_core@13.9.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/core/index.mjs +0 -73
  95. package/minilo/es/node_modules/.pnpm/@vueuse_shared@13.9.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/shared/index.mjs +0 -76
  96. package/minilo/es/resolver/index.d.ts +0 -8
  97. package/minilo/es/resolver/index.mjs +0 -29
  98. package/minilo/es/utils/index.d.ts +0 -28
  99. package/minilo/es/utils/index.mjs +0 -30
  100. package/minilo/lib/components/button/index.d.ts +0 -47
  101. package/minilo/lib/components/button/index.js +0 -11
  102. package/minilo/lib/components/button/index.vue.d.ts +0 -29
  103. package/minilo/lib/components/button/index.vue.js +0 -9
  104. package/minilo/lib/components/button/index.vue2.js +0 -71
  105. package/minilo/lib/components/button/type.d.ts +0 -10
  106. package/minilo/lib/components/chart/index.d.ts +0 -49
  107. package/minilo/lib/components/chart/index.js +0 -11
  108. package/minilo/lib/components/chart/index.vue.d.ts +0 -33
  109. package/minilo/lib/components/chart/index.vue.js +0 -9
  110. package/minilo/lib/components/chart/index.vue2.js +0 -128
  111. package/minilo/lib/components/chart/type.d.ts +0 -7
  112. package/minilo/lib/components/detail/index.d.ts +0 -37
  113. package/minilo/lib/components/detail/index.js +0 -11
  114. package/minilo/lib/components/detail/index.vue.d.ts +0 -23
  115. package/minilo/lib/components/detail/index.vue.js +0 -9
  116. package/minilo/lib/components/detail/index.vue2.js +0 -198
  117. package/minilo/lib/components/detail/renderLabel.vue.d.ts +0 -8
  118. package/minilo/lib/components/detail/renderLabel.vue.js +0 -9
  119. package/minilo/lib/components/detail/renderLabel.vue2.js +0 -27
  120. package/minilo/lib/components/detail/renderTooltip.vue.d.ts +0 -8
  121. package/minilo/lib/components/detail/renderTooltip.vue.js +0 -9
  122. package/minilo/lib/components/detail/renderTooltip.vue2.js +0 -27
  123. package/minilo/lib/components/detail/type.d.ts +0 -27
  124. package/minilo/lib/components/image-upload-pro/index.d.ts +0 -544
  125. package/minilo/lib/components/image-upload-pro/index.js +0 -13
  126. package/minilo/lib/components/image-upload-pro/index.vue.d.ts +0 -546
  127. package/minilo/lib/components/image-upload-pro/index.vue.js +0 -9
  128. package/minilo/lib/components/image-upload-pro/index.vue2.js +0 -661
  129. package/minilo/lib/components/image-upload-pro/type.d.ts +0 -147
  130. package/minilo/lib/components/image-upload-pro/type.js +0 -83
  131. package/minilo/lib/components/index.d.ts +0 -11
  132. package/minilo/lib/components/index.js +0 -33
  133. package/minilo/lib/components/number-range-input/index.d.ts +0 -41
  134. package/minilo/lib/components/number-range-input/index.js +0 -11
  135. package/minilo/lib/components/number-range-input/index.vue.d.ts +0 -33
  136. package/minilo/lib/components/number-range-input/index.vue.js +0 -9
  137. package/minilo/lib/components/number-range-input/index.vue2.js +0 -154
  138. package/minilo/lib/components/number-range-input/props.d.ts +0 -10
  139. package/minilo/lib/components/search/index.d.ts +0 -488
  140. package/minilo/lib/components/search/index.js +0 -11
  141. package/minilo/lib/components/search/index.vue.d.ts +0 -554
  142. package/minilo/lib/components/search/index.vue.js +0 -9
  143. package/minilo/lib/components/search/index.vue2.js +0 -302
  144. package/minilo/lib/components/search/props.d.ts +0 -107
  145. package/minilo/lib/components/search/props.js +0 -58
  146. package/minilo/lib/components/search-table/index.d.ts +0 -274
  147. package/minilo/lib/components/search-table/index.js +0 -11
  148. package/minilo/lib/components/search-table/index.vue.d.ts +0 -173
  149. package/minilo/lib/components/search-table/index.vue.js +0 -9
  150. package/minilo/lib/components/search-table/index.vue2.js +0 -199
  151. package/minilo/lib/components/search-table/props.d.ts +0 -69
  152. package/minilo/lib/components/search-table/props.js +0 -72
  153. package/minilo/lib/components/search-table/render.d.ts +0 -11
  154. package/minilo/lib/components/search-table/render.js +0 -23
  155. package/minilo/lib/components/tree-select/index.d.ts +0 -32
  156. package/minilo/lib/components/tree-select/index.js +0 -11
  157. package/minilo/lib/components/tree-select/index.vue.d.ts +0 -20
  158. package/minilo/lib/components/tree-select/index.vue.js +0 -9
  159. package/minilo/lib/components/tree-select/index.vue2.js +0 -230
  160. package/minilo/lib/components/tree-select/type.d.ts +0 -34
  161. package/minilo/lib/components/tree-select-dialog/index.d.ts +0 -62
  162. package/minilo/lib/components/tree-select-dialog/index.js +0 -13
  163. package/minilo/lib/components/tree-select-dialog/index.vue.d.ts +0 -23
  164. package/minilo/lib/components/tree-select-dialog/index.vue.js +0 -9
  165. package/minilo/lib/components/tree-select-dialog/index.vue2.js +0 -141
  166. package/minilo/lib/components/tree-select-dialog/type.d.ts +0 -9
  167. package/minilo/lib/components/tree-select-dialog/type.js +0 -26
  168. package/minilo/lib/components/tree-select-drawer/index.d.ts +0 -67
  169. package/minilo/lib/components/tree-select-drawer/index.js +0 -13
  170. package/minilo/lib/components/tree-select-drawer/index.vue.d.ts +0 -23
  171. package/minilo/lib/components/tree-select-drawer/index.vue.js +0 -9
  172. package/minilo/lib/components/tree-select-drawer/index.vue2.js +0 -147
  173. package/minilo/lib/components/tree-select-drawer/type.d.ts +0 -10
  174. package/minilo/lib/components/tree-select-drawer/type.js +0 -22
  175. package/minilo/lib/components/virtual-list/index.d.ts +0 -59
  176. package/minilo/lib/components/virtual-list/index.js +0 -11
  177. package/minilo/lib/components/virtual-list/index.vue.d.ts +0 -39
  178. package/minilo/lib/components/virtual-list/index.vue.js +0 -9
  179. package/minilo/lib/components/virtual-list/index.vue2.js +0 -425
  180. package/minilo/lib/components/virtual-list/type.d.ts +0 -20
  181. package/minilo/lib/index.d.ts +0 -1724
  182. package/minilo/lib/node_modules/.pnpm/@element-plus_icons-vue@2.3.1_vue@3.5.26_typescript@5.9.3_/node_modules/@element-plus/icons-vue/dist/index.js +0 -44
  183. package/minilo/lib/node_modules/.pnpm/@minilo_utils@0.0.2_vue@3.5.26_typescript@5.9.3_/node_modules/@minilo/utils/dist/func/common.js +0 -16
  184. package/minilo/lib/node_modules/.pnpm/@minilo_utils@0.0.2_vue@3.5.26_typescript@5.9.3_/node_modules/@minilo/utils/dist/request/index.js +0 -120
  185. package/minilo/lib/node_modules/.pnpm/@vueuse_core@13.9.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/core/index.js +0 -84
  186. package/minilo/lib/node_modules/.pnpm/@vueuse_shared@13.9.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/shared/index.js +0 -83
  187. package/minilo/lib/resolver/index.d.ts +0 -8
  188. package/minilo/lib/resolver/index.js +0 -31
  189. package/minilo/lib/utils/index.d.ts +0 -28
  190. package/minilo/lib/utils/index.js +0 -34
  191. package/minilo/theme-chalk/index.css +0 -1
  192. package/minilo/theme-chalk/ml-button.css +0 -1
  193. package/minilo/theme-chalk/ml-chart.css +0 -1
  194. package/minilo/theme-chalk/ml-detail.css +0 -1
  195. package/minilo/theme-chalk/ml-image-upload-pro.css +0 -1
  196. package/minilo/theme-chalk/ml-number-range-input.css +0 -1
  197. package/minilo/theme-chalk/ml-search-table.css +0 -1
  198. package/minilo/theme-chalk/ml-search.css +0 -1
  199. package/minilo/theme-chalk/ml-tree-select-dialog.css +0 -0
  200. package/minilo/theme-chalk/ml-tree-select-drawer.css +0 -0
  201. package/minilo/theme-chalk/ml-tree-select.css +0 -1
  202. package/minilo/theme-chalk/ml-virtual-list.css +0 -1
  203. package/minilo/theme-chalk/src/button.scss +0 -22
  204. package/minilo/theme-chalk/src/chart.scss +0 -11
  205. package/minilo/theme-chalk/src/default/variable.scss +0 -1
  206. package/minilo/theme-chalk/src/detail.scss +0 -9
  207. package/minilo/theme-chalk/src/image-upload-pro.scss +0 -70
  208. package/minilo/theme-chalk/src/index.scss +0 -14
  209. package/minilo/theme-chalk/src/mixins/mixin.scss +0 -273
  210. package/minilo/theme-chalk/src/number-range-input.scss +0 -9
  211. package/minilo/theme-chalk/src/search-table.scss +0 -47
  212. package/minilo/theme-chalk/src/search.scss +0 -20
  213. package/minilo/theme-chalk/src/tree-select-dialog.scss +0 -0
  214. package/minilo/theme-chalk/src/tree-select-drawer.scss +0 -0
  215. package/minilo/theme-chalk/src/tree-select.scss +0 -47
  216. package/minilo/theme-chalk/src/virtual-list.scss +0 -49
@@ -1,421 +0,0 @@
1
- import { defineComponent, computed, ref, watch, onMounted, onUnmounted, createElementBlock, openBlock, normalizeClass, unref, createElementVNode, normalizeStyle, createCommentVNode, Fragment, renderList, renderSlot, createTextVNode } from 'vue';
2
- import { bem } from '../../utils/index.mjs';
3
-
4
- const _hoisted_1 = ["data-index"];
5
- var _sfc_main = /* @__PURE__ */ defineComponent({
6
- ...{
7
- name: "MlVirtualList"
8
- },
9
- __name: "index",
10
- props: {
11
- height: { type: Number, required: false, default: 500 },
12
- itemHeight: { type: Number, required: false, default: 50 },
13
- estimatedItemHeight: { type: Number, required: false, default: 50 },
14
- itemEqual: { type: Boolean, required: false, default: true },
15
- preLoadCount: { type: Number, required: false, default: 5 },
16
- threshold: { type: Number, required: false, default: 200 },
17
- dataSource: { type: Array, required: false, default: () => [] },
18
- loading: { type: Boolean, required: false },
19
- finished: { type: Boolean, required: false }
20
- },
21
- emits: ["load-more"],
22
- setup(__props, { emit: __emit }) {
23
- const props = __props;
24
- const emit = __emit;
25
- const SCROLL_VIEW_HEIGHT = computed(() => props.height);
26
- const ITEM_HEIGHT = computed(() => props.itemHeight);
27
- const ESTIMATED_ITEM_HEIGHT = computed(() => props.estimatedItemHeight);
28
- const PRE_LOAD_COUNT = computed(() => props.preLoadCount);
29
- const containerRef = ref(null);
30
- const positions = ref([]);
31
- const showRange = ref({
32
- start: 0,
33
- end: 10
34
- });
35
- let rafId = null;
36
- let isRafPending = false;
37
- let resizeObserver = null;
38
- let resizeUpdateTimer = null;
39
- const initPositions = () => {
40
- const data = props.dataSource;
41
- const height = props.itemEqual ? ITEM_HEIGHT.value : ESTIMATED_ITEM_HEIGHT.value;
42
- positions.value = data.map((_, index) => ({
43
- index,
44
- height,
45
- top: index * height,
46
- bottom: (index + 1) * height
47
- }));
48
- };
49
- const scrollViewHeight = computed(() => {
50
- if (props.itemEqual) {
51
- return props.dataSource.length * ITEM_HEIGHT.value;
52
- }
53
- const len = positions.value.length;
54
- const lastPos = positions.value[len - 1];
55
- if (len > 0 && lastPos) {
56
- return lastPos.bottom;
57
- }
58
- return 0;
59
- });
60
- const scrollViewOffset = computed(() => {
61
- const start = showRange.value.start;
62
- if (props.itemEqual) {
63
- return start * ITEM_HEIGHT.value;
64
- }
65
- return start > 0 && positions.value[start] ? positions.value[start].top : 0;
66
- });
67
- const currentViewList = computed(() => {
68
- return props.dataSource.slice(showRange.value.start, showRange.value.end).map((el, index) => ({
69
- data: el,
70
- index: showRange.value.start + index
71
- }));
72
- });
73
- const getStartIndex = (scrollTop) => {
74
- let start = 0;
75
- let end = positions.value.length - 1;
76
- let mid = 0;
77
- while (start <= end) {
78
- mid = Math.floor((start + end) / 2);
79
- const midPos = positions.value[mid];
80
- if (!midPos) break;
81
- const midBottom = midPos.bottom;
82
- const midTop = midPos.top;
83
- if (midTop <= scrollTop && midBottom > scrollTop) {
84
- return mid;
85
- } else if (midTop > scrollTop) {
86
- end = mid - 1;
87
- } else {
88
- start = mid + 1;
89
- }
90
- }
91
- return 0;
92
- };
93
- const updatePositions = () => {
94
- if (props.itemEqual) return;
95
- const nodes = containerRef.value?.querySelectorAll(".virtual-list-item");
96
- if (!nodes || nodes.length === 0) return;
97
- nodes.forEach((node) => {
98
- const rect = node.getBoundingClientRect();
99
- const height = rect.height;
100
- const index = parseInt(node.dataset.index || "0");
101
- const pos = positions.value[index];
102
- if (!pos) return;
103
- const oldHeight = pos.height || 0;
104
- if (oldHeight !== height) {
105
- pos.height = height;
106
- pos.bottom = pos.top + height;
107
- for (let i = index + 1; i < positions.value.length; i++) {
108
- const currentPos = positions.value[i];
109
- const prevPos = positions.value[i - 1];
110
- if (currentPos && prevPos) {
111
- currentPos.top = prevPos.bottom;
112
- currentPos.bottom = currentPos.top + currentPos.height;
113
- }
114
- }
115
- }
116
- });
117
- };
118
- const initResizeObserver = () => {
119
- if (props.itemEqual) return;
120
- if (resizeObserver) {
121
- resizeObserver.disconnect();
122
- }
123
- resizeObserver = new ResizeObserver((entries) => {
124
- let needUpdate = false;
125
- const changedIndices = [];
126
- for (const entry of entries) {
127
- const target = entry.target;
128
- const index = parseInt(target.dataset.index || "0");
129
- const pos = positions.value[index];
130
- if (!pos) continue;
131
- const newHeight = entry.contentRect.height;
132
- const oldHeight = pos.height;
133
- if (Math.abs(newHeight - oldHeight) > 1) {
134
- needUpdate = true;
135
- changedIndices.push(index);
136
- pos.height = newHeight;
137
- pos.bottom = pos.top + newHeight;
138
- }
139
- }
140
- if (needUpdate) {
141
- if (resizeUpdateTimer !== null) {
142
- clearTimeout(resizeUpdateTimer);
143
- }
144
- resizeUpdateTimer = window.setTimeout(() => {
145
- const minChangedIndex = Math.min(...changedIndices);
146
- for (let i = minChangedIndex + 1; i < positions.value.length; i++) {
147
- const currentPos = positions.value[i];
148
- const prevPos = positions.value[i - 1];
149
- if (currentPos && prevPos) {
150
- currentPos.top = prevPos.bottom;
151
- currentPos.bottom = currentPos.top + currentPos.height;
152
- }
153
- }
154
- changedIndices.length = 0;
155
- resizeUpdateTimer = null;
156
- }, 16);
157
- }
158
- });
159
- observeVisibleItems();
160
- };
161
- const observeVisibleItems = () => {
162
- if (!resizeObserver || props.itemEqual) return;
163
- resizeObserver.disconnect();
164
- const nodes = containerRef.value?.querySelectorAll(".virtual-list-item");
165
- if (!nodes) return;
166
- nodes.forEach((node) => {
167
- resizeObserver.observe(node);
168
- });
169
- };
170
- const calculateRange = () => {
171
- const element = containerRef.value;
172
- if (!element) return;
173
- const scrollTop = element.scrollTop;
174
- const clientHeight = element.clientHeight;
175
- let start = 0;
176
- let end = 0;
177
- if (props.itemEqual) {
178
- start = Math.floor(scrollTop / ITEM_HEIGHT.value);
179
- const viewItemSize = Math.ceil(clientHeight / ITEM_HEIGHT.value);
180
- end = start + viewItemSize;
181
- } else {
182
- if (positions.value.length === 0) return;
183
- start = getStartIndex(scrollTop);
184
- let totalHeight = 0;
185
- const targetHeight = clientHeight + PRE_LOAD_COUNT.value * ESTIMATED_ITEM_HEIGHT.value;
186
- for (let i = start; i < positions.value.length; i++) {
187
- const pos = positions.value[i];
188
- if (!pos) break;
189
- totalHeight += pos.height;
190
- if (totalHeight >= targetHeight) {
191
- end = i + 1;
192
- break;
193
- }
194
- end = i + 1;
195
- }
196
- }
197
- const maxVisibleItems = 10;
198
- if (end - start > maxVisibleItems) {
199
- end = start + maxVisibleItems;
200
- }
201
- showRange.value = {
202
- start: Math.max(0, start - PRE_LOAD_COUNT.value),
203
- end: Math.min(props.dataSource.length, end + PRE_LOAD_COUNT.value)
204
- };
205
- };
206
- const checkLoadMore = () => {
207
- const element = containerRef.value;
208
- if (!element || props.loading || props.finished) return;
209
- const scrollTop = element.scrollTop;
210
- const clientHeight = element.clientHeight;
211
- const totalHeight = scrollViewHeight.value;
212
- const distanceToBottom = totalHeight - scrollTop - clientHeight;
213
- if (distanceToBottom < props.threshold) {
214
- emit("load-more");
215
- }
216
- };
217
- const onContainerScroll = () => {
218
- if (isRafPending) return;
219
- isRafPending = true;
220
- rafId = requestAnimationFrame(() => {
221
- updatePositions();
222
- calculateRange();
223
- if (props.finished !== void 0 && !props.finished) {
224
- checkLoadMore();
225
- }
226
- isRafPending = false;
227
- });
228
- };
229
- watch(
230
- () => props.dataSource.length,
231
- (newLen, oldLen = 0) => {
232
- if (newLen !== oldLen) {
233
- if (props.itemEqual) {
234
- initPositions();
235
- } else {
236
- if (newLen > oldLen) {
237
- const height = ESTIMATED_ITEM_HEIGHT.value;
238
- for (let i = oldLen; i < newLen; i++) {
239
- const lastPos = positions.value[i - 1];
240
- positions.value.push({
241
- index: i,
242
- height,
243
- top: lastPos ? lastPos.bottom : 0,
244
- bottom: (lastPos ? lastPos.bottom : 0) + height
245
- });
246
- }
247
- } else {
248
- positions.value = positions.value.slice(0, newLen);
249
- }
250
- }
251
- requestAnimationFrame(() => {
252
- updatePositions();
253
- calculateRange();
254
- if (!props.itemEqual) {
255
- observeVisibleItems();
256
- }
257
- });
258
- }
259
- },
260
- { immediate: true }
261
- );
262
- watch(
263
- () => showRange.value,
264
- () => {
265
- if (!props.itemEqual && resizeObserver) {
266
- if (rafId !== null) {
267
- cancelAnimationFrame(rafId);
268
- }
269
- rafId = requestAnimationFrame(() => {
270
- observeVisibleItems();
271
- rafId = null;
272
- });
273
- }
274
- },
275
- { deep: true }
276
- );
277
- onMounted(() => {
278
- initPositions();
279
- initResizeObserver();
280
- requestAnimationFrame(() => {
281
- updatePositions();
282
- calculateRange();
283
- });
284
- });
285
- onUnmounted(() => {
286
- if (rafId !== null) {
287
- cancelAnimationFrame(rafId);
288
- }
289
- if (resizeUpdateTimer !== null) {
290
- clearTimeout(resizeUpdateTimer);
291
- }
292
- if (resizeObserver) {
293
- resizeObserver.disconnect();
294
- resizeObserver = null;
295
- }
296
- });
297
- return (_ctx, _cache) => {
298
- return openBlock(), createElementBlock(
299
- "div",
300
- {
301
- class: normalizeClass(unref(bem)("virtual-list"))
302
- },
303
- [
304
- createElementVNode(
305
- "div",
306
- {
307
- class: normalizeClass(unref(bem)("virtual-list", "container")),
308
- ref_key: "containerRef",
309
- ref: containerRef,
310
- style: normalizeStyle({
311
- height: SCROLL_VIEW_HEIGHT.value + "px",
312
- overflow: "auto"
313
- }),
314
- onScroll: onContainerScroll
315
- },
316
- [
317
- createElementVNode(
318
- "div",
319
- {
320
- class: normalizeClass(unref(bem)("virtual-list", "phantom")),
321
- style: normalizeStyle({
322
- height: scrollViewHeight.value + "px"
323
- })
324
- },
325
- [
326
- createElementVNode(
327
- "div",
328
- {
329
- class: normalizeClass(unref(bem)("virtual-list", "content")),
330
- style: normalizeStyle({
331
- transform: `translateY(${scrollViewOffset.value}px)`
332
- })
333
- },
334
- [
335
- (openBlock(true), createElementBlock(
336
- Fragment,
337
- null,
338
- renderList(currentViewList.value, (item) => {
339
- return openBlock(), createElementBlock("div", {
340
- key: item.index,
341
- class: normalizeClass(unref(bem)("virtual-list", "item")),
342
- "data-index": item.index,
343
- style: normalizeStyle(__props.itemEqual ? { height: ITEM_HEIGHT.value + "px" } : {})
344
- }, [
345
- renderSlot(_ctx.$slots, "default", {
346
- item: item.data,
347
- index: item.index
348
- })
349
- ], 14, _hoisted_1);
350
- }),
351
- 128
352
- /* KEYED_FRAGMENT */
353
- ))
354
- ],
355
- 6
356
- /* CLASS, STYLE */
357
- )
358
- ],
359
- 6
360
- /* CLASS, STYLE */
361
- ),
362
- createCommentVNode(" \u52A0\u8F7D\u72B6\u6001\u63D0\u793A\uFF08\u5728\u5BB9\u5668\u5185\u90E8\uFF09 "),
363
- props.loading ? (openBlock(), createElementBlock(
364
- "div",
365
- {
366
- key: 0,
367
- class: normalizeClass(unref(bem)("virtual-list", "loading-tip"))
368
- },
369
- [
370
- renderSlot(_ctx.$slots, "loading", {}, () => [
371
- _cache[0] || (_cache[0] = createElementVNode(
372
- "span",
373
- { class: "loading-spinner" },
374
- null,
375
- -1
376
- /* CACHED */
377
- )),
378
- _cache[1] || (_cache[1] = createElementVNode(
379
- "span",
380
- null,
381
- "\u52A0\u8F7D\u4E2D...",
382
- -1
383
- /* CACHED */
384
- ))
385
- ])
386
- ],
387
- 2
388
- /* CLASS */
389
- )) : createCommentVNode("v-if", true),
390
- createCommentVNode(" \u52A0\u8F7D\u5B8C\u6210\u63D0\u793A "),
391
- props.finished && !props.loading ? (openBlock(), createElementBlock(
392
- "div",
393
- {
394
- key: 1,
395
- class: normalizeClass(unref(bem)("virtual-list", "finished-tip"))
396
- },
397
- [
398
- renderSlot(_ctx.$slots, "finished", {}, () => [
399
- _cache[2] || (_cache[2] = createTextVNode(
400
- "\u5DF2\u52A0\u8F7D\u5168\u90E8\u6570\u636E",
401
- -1
402
- /* CACHED */
403
- ))
404
- ])
405
- ],
406
- 2
407
- /* CLASS */
408
- )) : createCommentVNode("v-if", true)
409
- ],
410
- 38
411
- /* CLASS, STYLE, NEED_HYDRATION */
412
- )
413
- ],
414
- 2
415
- /* CLASS */
416
- );
417
- };
418
- }
419
- });
420
-
421
- export { _sfc_main as default };
@@ -1,20 +0,0 @@
1
- export interface MlVirtualListProps {
2
- /** 容器高度,默认 500px */
3
- height?: number;
4
- /** 列表项高度(定高模式必传) */
5
- itemHeight?: number;
6
- /** 列表项预估高度(不定高模式使用),默认 50px */
7
- estimatedItemHeight?: number;
8
- /** 是否为等高列表,true=定高,false=不定高,默认 true */
9
- itemEqual?: boolean;
10
- /** 预加载数量(上下各预加载几个) */
11
- preLoadCount?: number;
12
- /** 距离底部多少像素时触发加载 */
13
- threshold?: number;
14
- /** 数据源 */
15
- dataSource?: any[];
16
- /** 是否正在加载 */
17
- loading?: boolean;
18
- /** 是否已加载完所有数据 */
19
- finished?: boolean;
20
- }