@minilo/ui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/README.md +44 -0
  2. package/minilo/dist/index.css +1 -0
  3. package/minilo/dist/index.full.js +7054 -0
  4. package/minilo/dist/index.full.min.js +2 -0
  5. package/minilo/dist/index.full.min.js.map +1 -0
  6. package/minilo/dist/index.full.min.mjs +2 -0
  7. package/minilo/dist/index.full.min.mjs.map +1 -0
  8. package/minilo/dist/index.full.mjs +7041 -0
  9. package/minilo/es/components/button/index.d.ts +47 -0
  10. package/minilo/es/components/button/index.mjs +6 -0
  11. package/minilo/es/components/button/index.vue.d.ts +29 -0
  12. package/minilo/es/components/button/index.vue.mjs +5 -0
  13. package/minilo/es/components/button/index.vue2.mjs +67 -0
  14. package/minilo/es/components/button/type.d.ts +10 -0
  15. package/minilo/es/components/button/type.mjs +1 -0
  16. package/minilo/es/components/chart/index.d.ts +49 -0
  17. package/minilo/es/components/chart/index.mjs +6 -0
  18. package/minilo/es/components/chart/index.vue.d.ts +33 -0
  19. package/minilo/es/components/chart/index.vue.mjs +5 -0
  20. package/minilo/es/components/chart/index.vue2.mjs +124 -0
  21. package/minilo/es/components/chart/type.d.ts +7 -0
  22. package/minilo/es/components/chart/type.mjs +1 -0
  23. package/minilo/es/components/detail/index.d.ts +37 -0
  24. package/minilo/es/components/detail/index.mjs +6 -0
  25. package/minilo/es/components/detail/index.vue.d.ts +23 -0
  26. package/minilo/es/components/detail/index.vue.mjs +5 -0
  27. package/minilo/es/components/detail/index.vue2.mjs +194 -0
  28. package/minilo/es/components/detail/renderLabel.vue.d.ts +8 -0
  29. package/minilo/es/components/detail/renderLabel.vue.mjs +5 -0
  30. package/minilo/es/components/detail/renderLabel.vue2.mjs +23 -0
  31. package/minilo/es/components/detail/renderTooltip.vue.d.ts +8 -0
  32. package/minilo/es/components/detail/renderTooltip.vue.mjs +5 -0
  33. package/minilo/es/components/detail/renderTooltip.vue2.mjs +23 -0
  34. package/minilo/es/components/detail/type.d.ts +27 -0
  35. package/minilo/es/components/detail/type.mjs +1 -0
  36. package/minilo/es/components/index.d.ts +7 -0
  37. package/minilo/es/components/index.mjs +7 -0
  38. package/minilo/es/components/number-range-input/index.d.ts +41 -0
  39. package/minilo/es/components/number-range-input/index.mjs +6 -0
  40. package/minilo/es/components/number-range-input/index.vue.d.ts +33 -0
  41. package/minilo/es/components/number-range-input/index.vue.mjs +5 -0
  42. package/minilo/es/components/number-range-input/index.vue2.mjs +150 -0
  43. package/minilo/es/components/number-range-input/props.d.ts +10 -0
  44. package/minilo/es/components/number-range-input/props.mjs +1 -0
  45. package/minilo/es/components/search/index.d.ts +586 -0
  46. package/minilo/es/components/search/index.mjs +6 -0
  47. package/minilo/es/components/search/index.vue.d.ts +750 -0
  48. package/minilo/es/components/search/index.vue.mjs +5 -0
  49. package/minilo/es/components/search/index.vue2.mjs +298 -0
  50. package/minilo/es/components/search/props.d.ts +107 -0
  51. package/minilo/es/components/search/props.mjs +55 -0
  52. package/minilo/es/components/search-table/index.d.ts +274 -0
  53. package/minilo/es/components/search-table/index.mjs +6 -0
  54. package/minilo/es/components/search-table/index.vue.d.ts +173 -0
  55. package/minilo/es/components/search-table/index.vue.mjs +5 -0
  56. package/minilo/es/components/search-table/index.vue2.mjs +195 -0
  57. package/minilo/es/components/search-table/props.d.ts +69 -0
  58. package/minilo/es/components/search-table/props.mjs +69 -0
  59. package/minilo/es/components/search-table/render.d.ts +11 -0
  60. package/minilo/es/components/search-table/render.mjs +19 -0
  61. package/minilo/es/components/virtual-list/index.d.ts +59 -0
  62. package/minilo/es/components/virtual-list/index.mjs +6 -0
  63. package/minilo/es/components/virtual-list/index.vue.d.ts +39 -0
  64. package/minilo/es/components/virtual-list/index.vue.mjs +5 -0
  65. package/minilo/es/components/virtual-list/index.vue2.mjs +421 -0
  66. package/minilo/es/components/virtual-list/type.d.ts +20 -0
  67. package/minilo/es/components/virtual-list/type.mjs +1 -0
  68. package/minilo/es/index.d.ts +1087 -0
  69. package/minilo/es/node_modules/.pnpm/@element-plus_icons-vue@2.3.1_vue@3.5.17_typescript@5.8.3_/node_modules/@element-plus/icons-vue/dist/index.mjs +25 -0
  70. package/minilo/es/node_modules/.pnpm/@vueuse_core@13.6.0_vue@3.5.17_typescript@5.9.3_/node_modules/@vueuse/core/index.mjs +73 -0
  71. package/minilo/es/node_modules/.pnpm/@vueuse_shared@13.6.0_vue@3.5.17_typescript@5.9.3_/node_modules/@vueuse/shared/index.mjs +76 -0
  72. package/minilo/es/packages/utils/dist/func/common.mjs +14 -0
  73. package/minilo/es/packages/utils/dist/request/index.mjs +110 -0
  74. package/minilo/es/resolver/index.d.ts +8 -0
  75. package/minilo/es/resolver/index.mjs +26 -0
  76. package/minilo/es/utils/index.d.ts +28 -0
  77. package/minilo/es/utils/index.mjs +30 -0
  78. package/minilo/lib/components/button/index.d.ts +47 -0
  79. package/minilo/lib/components/button/index.js +11 -0
  80. package/minilo/lib/components/button/index.vue.d.ts +29 -0
  81. package/minilo/lib/components/button/index.vue.js +9 -0
  82. package/minilo/lib/components/button/index.vue2.js +71 -0
  83. package/minilo/lib/components/button/type.d.ts +10 -0
  84. package/minilo/lib/components/button/type.js +2 -0
  85. package/minilo/lib/components/chart/index.d.ts +49 -0
  86. package/minilo/lib/components/chart/index.js +11 -0
  87. package/minilo/lib/components/chart/index.vue.d.ts +33 -0
  88. package/minilo/lib/components/chart/index.vue.js +9 -0
  89. package/minilo/lib/components/chart/index.vue2.js +128 -0
  90. package/minilo/lib/components/chart/type.d.ts +7 -0
  91. package/minilo/lib/components/chart/type.js +2 -0
  92. package/minilo/lib/components/detail/index.d.ts +37 -0
  93. package/minilo/lib/components/detail/index.js +11 -0
  94. package/minilo/lib/components/detail/index.vue.d.ts +23 -0
  95. package/minilo/lib/components/detail/index.vue.js +9 -0
  96. package/minilo/lib/components/detail/index.vue2.js +198 -0
  97. package/minilo/lib/components/detail/renderLabel.vue.d.ts +8 -0
  98. package/minilo/lib/components/detail/renderLabel.vue.js +9 -0
  99. package/minilo/lib/components/detail/renderLabel.vue2.js +27 -0
  100. package/minilo/lib/components/detail/renderTooltip.vue.d.ts +8 -0
  101. package/minilo/lib/components/detail/renderTooltip.vue.js +9 -0
  102. package/minilo/lib/components/detail/renderTooltip.vue2.js +27 -0
  103. package/minilo/lib/components/detail/type.d.ts +27 -0
  104. package/minilo/lib/components/detail/type.js +2 -0
  105. package/minilo/lib/components/index.d.ts +7 -0
  106. package/minilo/lib/components/index.js +19 -0
  107. package/minilo/lib/components/number-range-input/index.d.ts +41 -0
  108. package/minilo/lib/components/number-range-input/index.js +11 -0
  109. package/minilo/lib/components/number-range-input/index.vue.d.ts +33 -0
  110. package/minilo/lib/components/number-range-input/index.vue.js +9 -0
  111. package/minilo/lib/components/number-range-input/index.vue2.js +154 -0
  112. package/minilo/lib/components/number-range-input/props.d.ts +10 -0
  113. package/minilo/lib/components/number-range-input/props.js +2 -0
  114. package/minilo/lib/components/search/index.d.ts +586 -0
  115. package/minilo/lib/components/search/index.js +11 -0
  116. package/minilo/lib/components/search/index.vue.d.ts +750 -0
  117. package/minilo/lib/components/search/index.vue.js +9 -0
  118. package/minilo/lib/components/search/index.vue2.js +302 -0
  119. package/minilo/lib/components/search/props.d.ts +107 -0
  120. package/minilo/lib/components/search/props.js +58 -0
  121. package/minilo/lib/components/search-table/index.d.ts +274 -0
  122. package/minilo/lib/components/search-table/index.js +11 -0
  123. package/minilo/lib/components/search-table/index.vue.d.ts +173 -0
  124. package/minilo/lib/components/search-table/index.vue.js +9 -0
  125. package/minilo/lib/components/search-table/index.vue2.js +199 -0
  126. package/minilo/lib/components/search-table/props.d.ts +69 -0
  127. package/minilo/lib/components/search-table/props.js +72 -0
  128. package/minilo/lib/components/search-table/render.d.ts +11 -0
  129. package/minilo/lib/components/search-table/render.js +23 -0
  130. package/minilo/lib/components/virtual-list/index.d.ts +59 -0
  131. package/minilo/lib/components/virtual-list/index.js +11 -0
  132. package/minilo/lib/components/virtual-list/index.vue.d.ts +39 -0
  133. package/minilo/lib/components/virtual-list/index.vue.js +9 -0
  134. package/minilo/lib/components/virtual-list/index.vue2.js +425 -0
  135. package/minilo/lib/components/virtual-list/type.d.ts +20 -0
  136. package/minilo/lib/components/virtual-list/type.js +2 -0
  137. package/minilo/lib/index.d.ts +1087 -0
  138. package/minilo/lib/node_modules/.pnpm/@element-plus_icons-vue@2.3.1_vue@3.5.17_typescript@5.8.3_/node_modules/@element-plus/icons-vue/dist/index.js +27 -0
  139. package/minilo/lib/node_modules/.pnpm/@vueuse_core@13.6.0_vue@3.5.17_typescript@5.9.3_/node_modules/@vueuse/core/index.js +84 -0
  140. package/minilo/lib/node_modules/.pnpm/@vueuse_shared@13.6.0_vue@3.5.17_typescript@5.9.3_/node_modules/@vueuse/shared/index.js +83 -0
  141. package/minilo/lib/packages/utils/dist/func/common.js +16 -0
  142. package/minilo/lib/packages/utils/dist/request/index.js +120 -0
  143. package/minilo/lib/resolver/index.d.ts +8 -0
  144. package/minilo/lib/resolver/index.js +28 -0
  145. package/minilo/lib/utils/index.d.ts +28 -0
  146. package/minilo/lib/utils/index.js +34 -0
  147. package/minilo/theme-chalk/index.css +1 -0
  148. package/minilo/theme-chalk/ml-button.css +1 -0
  149. package/minilo/theme-chalk/ml-chart.css +1 -0
  150. package/minilo/theme-chalk/ml-detail.css +1 -0
  151. package/minilo/theme-chalk/ml-number-range-input.css +1 -0
  152. package/minilo/theme-chalk/ml-search-table.css +1 -0
  153. package/minilo/theme-chalk/ml-search.css +1 -0
  154. package/minilo/theme-chalk/ml-virtual-list.css +1 -0
  155. package/minilo/theme-chalk/src/button.scss +22 -0
  156. package/minilo/theme-chalk/src/chart.scss +11 -0
  157. package/minilo/theme-chalk/src/default/variable.scss +1 -0
  158. package/minilo/theme-chalk/src/detail.scss +9 -0
  159. package/minilo/theme-chalk/src/index.scss +12 -0
  160. package/minilo/theme-chalk/src/mixins/mixin.scss +273 -0
  161. package/minilo/theme-chalk/src/number-range-input.scss +9 -0
  162. package/minilo/theme-chalk/src/search-table.scss +47 -0
  163. package/minilo/theme-chalk/src/search.scss +20 -0
  164. package/minilo/theme-chalk/src/virtual-list.scss +49 -0
  165. package/package.json +107 -0
@@ -0,0 +1,421 @@
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 };
@@ -0,0 +1,20 @@
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
+ }