@glhrmoura/vue-virtualize 0.1.5 → 0.2.0

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.
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
- import { shallowRef as Me, ref as L, toValue as o, watch as ge, onBeforeUnmount as ve, computed as R, defineComponent as ie, openBlock as T, createBlock as Y, resolveDynamicComponent as q, normalizeStyle as F, withCtx as U, renderSlot as G, createElementBlock as $, Fragment as D, renderList as P, unref as K, mergeProps as ne, createElementVNode as ue, toDisplayString as ce, createTextVNode as Oe } from "vue";
2
- function ee(e) {
1
+ import { shallowRef as _e, ref as W, toValue as l, watch as Ee, onBeforeUnmount as Ce, computed as C, defineComponent as ge, openBlock as V, createBlock as le, resolveDynamicComponent as ae, normalizeStyle as B, withCtx as ce, renderSlot as U, createElementBlock as K, Fragment as te, renderList as ne, unref as j, mergeProps as we, createElementVNode as Me, toDisplayString as Oe, createTextVNode as Xe } from "vue";
2
+ function he(e) {
3
3
  return !Number.isFinite(e) || e < 0 ? 0 : e;
4
4
  }
5
- class Re {
5
+ class Ye {
6
6
  sizes = /* @__PURE__ */ new Map();
7
7
  divergent = !1;
8
8
  get(t) {
@@ -29,46 +29,56 @@ class Re {
29
29
  }
30
30
  }
31
31
  }
32
+ shift(t) {
33
+ if (!t) return;
34
+ const i = /* @__PURE__ */ new Map();
35
+ for (const [n, r] of this.sizes) {
36
+ const s = n + t;
37
+ s >= 0 && i.set(s, r);
38
+ }
39
+ this.sizes.clear();
40
+ for (const [n, r] of i) this.sizes.set(n, r);
41
+ }
32
42
  }
33
- function Se(e, t, i) {
43
+ function Te(e, t, i) {
34
44
  return Math.min(i, Math.max(t, e));
35
45
  }
36
- const Te = 16777216;
37
- function H(e, t, i) {
46
+ const qe = 16777216;
47
+ function J(e, t, i) {
38
48
  const n = Math.max(0, t - Math.max(0, i));
39
- return Se(Number.isFinite(e) ? e : 0, 0, n);
49
+ return Te(Number.isFinite(e) ? e : 0, 0, n);
40
50
  }
41
- function N(e, t) {
42
- const i = Math.max(0, Number.isFinite(e) ? e : 0), n = Math.min(i, Te);
51
+ function H(e, t) {
52
+ const i = Math.max(0, Number.isFinite(e) ? e : 0), n = Math.min(i, qe);
43
53
  return t === void 0 || !Number.isFinite(t) || t <= 0 ? n : Math.min(n, t);
44
54
  }
45
- function Ee(e, t, i, n) {
55
+ function Ue(e, t, i, n) {
46
56
  const r = Math.max(0, t - Math.max(0, n)), s = Math.max(0, i - Math.max(0, n));
47
- return r <= 0 ? 0 : s <= 0 || s >= r ? H(e, t, n) : Math.max(0, e) / s * r;
57
+ return r <= 0 ? 0 : s <= 0 || s >= r ? J(e, t, n) : Math.max(0, e) / s * r;
48
58
  }
49
- function ke(e, t, i, n) {
59
+ function Ze(e, t, i, n) {
50
60
  const r = Math.max(0, t - Math.max(0, n)), s = Math.max(0, i - Math.max(0, n));
51
- return s <= 0 ? 0 : r <= 0 || s >= r ? H(e, t, n) : H(e, t, n) / r * s;
61
+ return s <= 0 ? 0 : r <= 0 || s >= r ? J(e, t, n) : J(e, t, n) / r * s;
52
62
  }
53
- function Ce(e, t, i) {
63
+ function Je(e, t, i) {
54
64
  if (e <= 0) return 0;
55
65
  let n = 0, r = e - 1, s = e - 1;
56
66
  for (; n <= r; ) {
57
- const u = n + r >>> 1;
58
- i(u) > t ? (s = u, r = u - 1) : n = u + 1;
67
+ const d = n + r >>> 1;
68
+ i(d) > t ? (s = d, r = d - 1) : n = d + 1;
59
69
  }
60
70
  return s;
61
71
  }
62
- function $e(e, t, i) {
72
+ function Qe(e, t, i) {
63
73
  if (e <= 0) return 0;
64
74
  let n = 0, r = e - 1, s = 0;
65
75
  for (; n <= r; ) {
66
- const u = n + r >>> 1;
67
- i(u) < t ? (s = u, n = u + 1) : r = u - 1;
76
+ const d = n + r >>> 1;
77
+ i(d) < t ? (s = d, n = d + 1) : r = d - 1;
68
78
  }
69
79
  return s;
70
80
  }
71
- function Ve(e) {
81
+ function et(e) {
72
82
  const t = e.start + e.size;
73
83
  let i = e.align;
74
84
  if (i === "auto") {
@@ -78,7 +88,7 @@ function Ve(e) {
78
88
  }
79
89
  return i === "center" ? e.start - (e.viewport - e.size) / 2 : i === "end" ? t - e.viewport : e.start;
80
90
  }
81
- class Ae {
91
+ class tt {
82
92
  count = 0;
83
93
  estimateSize = () => 0;
84
94
  overscan = 0;
@@ -90,14 +100,14 @@ class Ae {
90
100
  viewportSize = 0;
91
101
  scrollOffset = 0;
92
102
  getItemKey = (t) => t;
93
- measurements = new Re();
103
+ measurements = new Ye();
94
104
  built = 0;
95
105
  offsets = [];
96
106
  laneCursor = [];
97
107
  laneEnd = [];
98
108
  setOptions(t) {
99
- const i = Math.max(1, Math.floor(t.lanes ?? 1)), n = t.gap ?? 0, r = t.paddingStart ?? 0, s = t.paddingEnd ?? 0, u = Math.max(0, Math.floor(t.count)), p = t.itemSize === void 0 || t.itemSize === null ? null : ee(t.itemSize), x = this.itemSize, I = i !== this.lanes || n !== this.gap || r !== this.paddingStart || s !== this.paddingEnd || t.estimateSize !== this.estimateSize || p !== this.itemSize;
100
- this.count = u, this.lanes = i, this.gap = n, this.paddingStart = r, this.paddingEnd = s, this.overscan = Math.max(0, Math.floor(t.overscan ?? 0)), this.estimateSize = t.estimateSize, this.itemSize = p, this.getItemKey = t.getItemKey ?? ((w) => w), t.viewportSize !== void 0 && (this.viewportSize = Math.max(0, t.viewportSize)), p !== x && this.measurements.clear(), this.measurements.trim(this.count, this.itemSize), (I || this.built > this.count) && this.resetGeometry();
109
+ const i = Math.max(1, Math.floor(t.lanes ?? 1)), n = t.gap ?? 0, r = t.paddingStart ?? 0, s = t.paddingEnd ?? 0, d = Math.max(0, Math.floor(t.count)), I = t.itemSize === void 0 || t.itemSize === null ? null : he(t.itemSize), O = this.itemSize, p = i !== this.lanes || n !== this.gap || r !== this.paddingStart || s !== this.paddingEnd || t.estimateSize !== this.estimateSize || I !== this.itemSize;
110
+ this.count = d, this.lanes = i, this.gap = n, this.paddingStart = r, this.paddingEnd = s, this.overscan = Math.max(0, Math.floor(t.overscan ?? 0)), this.estimateSize = t.estimateSize, this.itemSize = I, this.getItemKey = t.getItemKey ?? ((c) => c), t.viewportSize !== void 0 && (this.viewportSize = Math.max(0, t.viewportSize)), I !== O && this.measurements.clear(), this.measurements.trim(this.count, this.itemSize), (p || this.built > this.count) && this.resetGeometry();
101
111
  }
102
112
  setScrollOffset(t) {
103
113
  this.scrollOffset = Number.isFinite(t) ? t : 0;
@@ -110,7 +120,7 @@ class Ae {
110
120
  }
111
121
  measure(t, i) {
112
122
  if (t < 0 || t >= this.count) return !1;
113
- const n = ee(i), r = this.measurements.get(t);
123
+ const n = he(i), r = this.measurements.get(t);
114
124
  if (r !== void 0 && Math.abs(r - n) < 0.5) return !1;
115
125
  const s = this.getItemSize(t);
116
126
  return this.measurements.set(t, n, this.itemSize), Math.abs(s - n) < 0.5 ? !1 : (this.resetGeometry(), !0);
@@ -118,9 +128,12 @@ class Ae {
118
128
  clearMeasurements() {
119
129
  this.measurements.clear(), this.resetGeometry();
120
130
  }
131
+ shiftMeasurements(t) {
132
+ t && (this.measurements.shift(t), this.resetGeometry());
133
+ }
121
134
  getItemSize(t) {
122
135
  const i = this.measurements.get(t);
123
- return i !== void 0 ? i : this.itemSize !== null ? this.itemSize : ee(this.estimateSize(t));
136
+ return i !== void 0 ? i : this.itemSize !== null ? this.itemSize : he(this.estimateSize(t));
124
137
  }
125
138
  getItemOffset(t) {
126
139
  if (t <= 0 || this.count <= 0) return this.paddingStart;
@@ -137,8 +150,8 @@ class Ae {
137
150
  let i = this.paddingStart;
138
151
  const n = this.itemSize ?? 0;
139
152
  for (let r = 0; r < this.lanes && r < this.count; r += 1) {
140
- const s = this.laneLength(r), u = this.paddingStart + s * n + Math.max(0, s - 1) * this.gap;
141
- u > i && (i = u);
153
+ const s = this.laneLength(r), d = this.paddingStart + s * n + Math.max(0, s - 1) * this.gap;
154
+ d > i && (i = d);
142
155
  }
143
156
  return i + this.paddingEnd;
144
157
  }
@@ -152,26 +165,26 @@ class Ae {
152
165
  }
153
166
  getVirtualItems() {
154
167
  if (this.count <= 0 || this.viewportSize <= 0) return [];
155
- const t = H(this.scrollOffset, this.getTotalSize(), this.viewportSize), i = t + this.viewportSize, n = [];
168
+ const t = J(this.scrollOffset, this.getTotalSize(), this.viewportSize), i = t + this.viewportSize, n = [];
156
169
  for (let r = 0; r < this.lanes; r += 1) {
157
170
  const s = this.laneLength(r);
158
171
  if (s <= 0) continue;
159
- const u = Ce(s, t, (w) => {
160
- const b = this.ordinalIndex(r, w);
161
- return this.getItemOffset(b) + this.getItemSize(b);
162
- }), p = $e(
172
+ const d = Je(s, t, (c) => {
173
+ const g = this.ordinalIndex(r, c);
174
+ return this.getItemOffset(g) + this.getItemSize(g);
175
+ }), I = Qe(
163
176
  s,
164
177
  i,
165
- (w) => this.getItemOffset(this.ordinalIndex(r, w))
166
- ), x = Math.max(0, Math.min(u, p) - this.overscan), I = Math.min(s - 1, Math.max(u, p) + this.overscan);
167
- for (let w = x; w <= I; w += 1) {
168
- const b = this.ordinalIndex(r, w), E = this.getItemOffset(b), k = this.getItemSize(b);
178
+ (c) => this.getItemOffset(this.ordinalIndex(r, c))
179
+ ), O = Math.max(0, Math.min(d, I) - this.overscan), p = Math.min(s - 1, Math.max(d, I) + this.overscan);
180
+ for (let c = O; c <= p; c += 1) {
181
+ const g = this.ordinalIndex(r, c), k = this.getItemOffset(g), A = this.getItemSize(g);
169
182
  n.push({
170
- index: b,
171
- key: this.getItemKey(b),
172
- start: E,
173
- size: k,
174
- end: E + k,
183
+ index: g,
184
+ key: this.getItemKey(g),
185
+ start: k,
186
+ size: A,
187
+ end: k + A,
175
188
  lane: r
176
189
  });
177
190
  }
@@ -180,14 +193,14 @@ class Ae {
180
193
  }
181
194
  getOffsetForIndex(t, i = "auto") {
182
195
  if (this.count <= 0) return 0;
183
- const n = Se(t, 0, this.count - 1), r = this.getItemOffset(n), s = this.getItemSize(n), u = Ve({
196
+ const n = Te(t, 0, this.count - 1), r = this.getItemOffset(n), s = this.getItemSize(n), d = et({
184
197
  start: r,
185
198
  size: s,
186
199
  viewport: this.viewportSize,
187
200
  current: this.scrollOffset,
188
201
  align: i
189
202
  });
190
- return H(u, this.getTotalSize(), this.viewportSize);
203
+ return J(d, this.getTotalSize(), this.viewportSize);
191
204
  }
192
205
  usesFixedPath() {
193
206
  return this.itemSize !== null && !this.measurements.hasDivergent;
@@ -215,10 +228,10 @@ class Ae {
215
228
  function Z() {
216
229
  return typeof window < "u" && typeof document < "u";
217
230
  }
218
- function ze(e) {
231
+ function ke(e) {
219
232
  return typeof Element > "u" ? null : e instanceof Element ? e : null;
220
233
  }
221
- function Fe(e, t, i, n) {
234
+ function nt(e, t, i, n) {
222
235
  if (n === "smooth" && typeof e.scrollTo == "function") {
223
236
  e.scrollTo({
224
237
  top: i ? e.scrollTop : t,
@@ -229,22 +242,45 @@ function Fe(e, t, i, n) {
229
242
  }
230
243
  i ? e.scrollLeft = t : e.scrollTop = t;
231
244
  }
232
- function fe(e, t) {
245
+ function it(e, t, i) {
246
+ if (!(typeof window > "u")) {
247
+ if (i === "smooth") {
248
+ window.scrollTo({
249
+ top: t ? window.scrollY : e,
250
+ left: t ? e : window.scrollX,
251
+ behavior: i
252
+ });
253
+ return;
254
+ }
255
+ t ? window.scrollTo(e, window.scrollY) : window.scrollTo(window.scrollX, e);
256
+ }
257
+ }
258
+ function Ie(e, t) {
233
259
  return t ? e.scrollLeft : e.scrollTop;
234
260
  }
235
- function de(e, t) {
261
+ function rt(e) {
262
+ return typeof window > "u" ? 0 : e ? window.scrollX : window.scrollY;
263
+ }
264
+ function st(e, t) {
236
265
  return t ? e.clientWidth : e.clientHeight;
237
266
  }
238
- function Ke(e, t) {
267
+ function ot(e) {
268
+ return typeof window > "u" ? 0 : e ? window.innerWidth : window.innerHeight;
269
+ }
270
+ function lt(e, t) {
239
271
  return t ? e.scrollWidth : e.scrollHeight;
240
272
  }
241
- function Le(e) {
273
+ function at(e, t) {
274
+ const i = e.getBoundingClientRect();
275
+ return typeof window > "u" ? t ? i.left : i.top : t ? i.left + window.scrollX : i.top + window.scrollY;
276
+ }
277
+ function ct(e) {
242
278
  return typeof requestAnimationFrame == "function" ? requestAnimationFrame(e) : setTimeout(e, 0);
243
279
  }
244
- function je(e) {
280
+ function ut(e) {
245
281
  e && (typeof cancelAnimationFrame == "function" ? cancelAnimationFrame(e) : clearTimeout(e));
246
282
  }
247
- function Ge(e, t) {
283
+ function dt(e, t) {
248
284
  if (e.length !== t.length) return !1;
249
285
  for (let i = 0; i < e.length; i += 1) {
250
286
  const n = e[i], r = t[i];
@@ -253,179 +289,232 @@ function Ge(e, t) {
253
289
  }
254
290
  return !0;
255
291
  }
256
- function te(e) {
257
- const t = new Ae(), i = Me([]), n = L(0), r = L(0), s = L(0), u = L(!1), p = (a) => e.estimateSize(a);
258
- let x = null, I = null, w = null, b = 0, E = 0, k = 0, f = o(e.revision);
259
- const d = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map(), l = [];
260
- function z() {
261
- const a = o(e.container);
262
- return typeof HTMLElement > "u" ? null : a instanceof HTMLElement ? a : null;
292
+ function me(e) {
293
+ const t = new tt(), i = _e([]), n = W(0), r = W(0), s = W(0), d = W(!1), I = (o) => e.estimateSize(o);
294
+ let O = null, p = !1, c = null, g = null, k = 0, A = 0, f = 0, b = l(e.revision), S = l(e.count), v = e.getItemKey?.(0) ?? 0, z = !1, h = "";
295
+ const T = /* @__PURE__ */ new Map(), M = /* @__PURE__ */ new Map(), G = [];
296
+ function D() {
297
+ const o = l(e.container);
298
+ return typeof HTMLElement > "u" ? null : o instanceof HTMLElement ? o : null;
263
299
  }
264
- function m() {
265
- return o(e.horizontal) ?? !1;
300
+ function $() {
301
+ return l(e.horizontal) ?? !1;
266
302
  }
267
- function j() {
268
- const a = o(e.initialRect);
269
- return a ? m() ? a.width : a.height : 0;
303
+ function u() {
304
+ return l(e.windowScroll) ?? !1;
270
305
  }
271
- function X(a, c) {
272
- return a ? N(c, Ke(a, m())) : N(c);
306
+ function R() {
307
+ return l(e.reverse) ?? !1;
273
308
  }
274
- function _(a, c, g) {
275
- return Ee(
276
- fe(a, m()),
277
- c,
278
- X(a, c),
279
- g
280
- );
309
+ function y() {
310
+ const o = l(e.initialRect);
311
+ return o ? $() ? o.width : o.height : 0;
312
+ }
313
+ function L() {
314
+ const o = D(), a = l(e.scrollMargin) ?? 0;
315
+ return !o || !Z() ? a : at(o, $()) + a;
316
+ }
317
+ function ee(o, a) {
318
+ return u() || !o ? H(a) : H(a, lt(o, $()));
319
+ }
320
+ function $e(o) {
321
+ return u() ? Math.max(0, rt($()) - L()) : o ? Ie(o, $()) : 0;
322
+ }
323
+ function ve(o) {
324
+ return u() ? ot($()) : o ? st(o, $()) : 0;
325
+ }
326
+ function Ae(o, a, m) {
327
+ if (u()) {
328
+ it(a + L(), $(), m);
329
+ return;
330
+ }
331
+ o && nt(o, a, $(), m);
281
332
  }
282
- function v(a, c, g, M, O) {
283
- Fe(
333
+ function ue(o, a, m) {
334
+ return Ue(
335
+ $e(o),
284
336
  a,
285
- ke(c, g, X(a, g), M),
286
- m(),
287
- O
337
+ ee(o, a),
338
+ m
288
339
  );
289
340
  }
290
- function y() {
291
- const a = o(e.revision);
292
- Object.is(a, f) || (f = a, t.clearMeasurements());
293
- const c = z(), g = c ? de(c, m()) : 0, M = o(e.viewportInset) ?? 0, O = Math.max(0, (g > 0 ? g : j()) - M), C = o(e.itemSize);
294
- t.setOptions({
295
- count: o(e.count),
296
- estimateSize: p,
297
- overscan: (o(e.overscan) ?? 8) + k,
298
- gap: o(e.gap) ?? 0,
299
- paddingStart: o(e.paddingStart) ?? 0,
300
- paddingEnd: o(e.paddingEnd) ?? 0,
301
- lanes: o(e.lanes) ?? 1,
302
- itemSize: C ?? null,
341
+ function P(o, a, m, w, x) {
342
+ Ae(
343
+ o,
344
+ Ze(a, m, ee(o, m), w),
345
+ x
346
+ );
347
+ }
348
+ function Fe() {
349
+ const o = e.onVisibleRangeChange;
350
+ if (!o) return;
351
+ const a = i.value, m = l(e.count), w = a.length ? {
352
+ startIndex: a[0]?.index ?? 0,
353
+ endIndex: a[a.length - 1]?.index ?? -1,
354
+ count: m
355
+ } : { startIndex: 0, endIndex: -1, count: m }, x = `${w.startIndex}:${w.endIndex}:${w.count}`;
356
+ x !== h && (h = x, o(w));
357
+ }
358
+ function F() {
359
+ const o = l(e.revision);
360
+ Object.is(o, b) || (b = o, t.clearMeasurements());
361
+ const a = l(e.count), m = e.getItemKey?.(0) ?? 0, w = R() && S > 0 && a > S && m !== v, x = R() && S > 0 && a > S && m === v, E = w || x ? a - S : 0, _ = R() && t.getViewportSize() > 0 && t.getScrollOffset() + t.getViewportSize() >= t.getTotalSize() - 64;
362
+ w && E > 0 && t.shiftMeasurements(E);
363
+ const X = D(), xe = ve(X), He = l(e.viewportInset) ?? 0, Y = Math.max(0, (xe > 0 ? xe : y()) - He), De = l(e.itemSize);
364
+ if (t.setOptions({
365
+ count: a,
366
+ estimateSize: I,
367
+ overscan: (l(e.overscan) ?? 8) + f,
368
+ gap: l(e.gap) ?? 0,
369
+ paddingStart: l(e.paddingStart) ?? 0,
370
+ paddingEnd: l(e.paddingEnd) ?? 0,
371
+ lanes: l(e.lanes) ?? 1,
372
+ itemSize: De ?? null,
303
373
  getItemKey: e.getItemKey,
304
- viewportSize: O
305
- });
306
- const A = t.getTotalSize(), J = Math.max(0, A - O);
307
- t.getScrollOffset() > J && (t.setScrollOffset(J), c && v(c, J, A, O, "auto"));
308
- const ae = t.getVirtualItems();
309
- Ge(i.value, ae) || (i.value = ae), n.value !== A && (n.value = A);
310
- const Q = t.getScrollOffset();
311
- r.value !== Q && (r.value = Q);
312
- const le = c ? Q - fe(c, m()) : 0;
313
- s.value !== le && (s.value = le);
374
+ viewportSize: Y
375
+ }), w && E > 0) {
376
+ let re = 0;
377
+ const Pe = l(e.gap) ?? 0;
378
+ for (let se = 0; se < E; se += 1)
379
+ re += t.getItemSize(se), se < E - 1 && (re += Pe);
380
+ re > 0 && t.setScrollOffset(t.getScrollOffset() + re);
381
+ }
382
+ const N = t.getTotalSize(), q = Math.max(0, N - Y);
383
+ R() && !z && N > 0 && Y > 0 ? (z = !0, t.setScrollOffset(q), P(X, q, N, Y, "auto")) : x && _ || t.getScrollOffset() > q ? (t.setScrollOffset(q), P(X, q, N, Y, "auto")) : w && E > 0 && P(X, t.getScrollOffset(), N, Y, "auto"), S = a, v = m;
384
+ const pe = t.getVirtualItems();
385
+ dt(i.value, pe) || (i.value = pe), n.value !== N && (n.value = N);
386
+ const fe = t.getScrollOffset();
387
+ r.value !== fe && (r.value = fe);
388
+ const be = X && !u() ? fe - Ie(X, $()) : 0;
389
+ s.value !== be && (s.value = be), Fe();
390
+ }
391
+ function Ke() {
392
+ d.value = !1, f = 0;
393
+ for (const [o, a] of T)
394
+ G.push({ element: o, index: a });
395
+ ze(), F(), e.onScrollEnd?.();
314
396
  }
315
- function S() {
316
- u.value = !1, k = 0;
317
- for (const [a, c] of d)
318
- l.push({ element: a, index: c });
319
- se(), y();
397
+ function Le() {
398
+ d.value = !0, !(typeof window > "u") && (window.clearTimeout(A), A = window.setTimeout(Ke, 120));
320
399
  }
321
- function V() {
322
- u.value = !0, !(typeof window > "u") && (window.clearTimeout(E), E = window.setTimeout(S, 120));
400
+ function ie() {
401
+ const o = D();
402
+ if (!u() && !o) return;
403
+ Le();
404
+ const a = t.getViewportSize(), m = t.getTotalSize(), w = ue(o, m, a), x = t.getScrollOffset(), E = Math.max(1, l(e.itemSize) ?? 48);
405
+ f = Math.min(24, Math.ceil(Math.abs(w - x) / E)), t.setScrollOffset(w), F();
323
406
  }
324
- function B() {
325
- const a = z();
326
- if (!a) return;
327
- V();
328
- const c = t.getViewportSize(), g = t.getTotalSize(), M = _(a, g, c), O = t.getScrollOffset(), C = Math.max(1, o(e.itemSize) ?? 48);
329
- k = Math.min(24, Math.ceil(Math.abs(M - O) / C)), t.setScrollOffset(M), y();
407
+ function de() {
408
+ O && (O.removeEventListener("scroll", ie), O = null), p && typeof window < "u" && (window.removeEventListener("scroll", ie), window.removeEventListener("resize", F), p = !1), c?.disconnect(), c = null;
330
409
  }
331
- function we() {
332
- const a = z();
333
- if (a === x || (x && (x.removeEventListener("scroll", B), I?.disconnect(), I = null), x = a, !a || !Z())) return;
334
- const c = t.getViewportSize(), g = t.getTotalSize();
335
- t.getScrollOffset() > 0 ? v(a, t.getScrollOffset(), g, c, "auto") : t.setScrollOffset(_(a, g, c)), a.addEventListener("scroll", B, { passive: !0 }), typeof ResizeObserver < "u" && (I = new ResizeObserver(() => y()), I.observe(a));
410
+ function Be() {
411
+ const o = D();
412
+ if (u()) {
413
+ if (p && O === o || (de(), O = o, !Z())) return;
414
+ p = !0;
415
+ const x = t.getViewportSize(), E = t.getTotalSize();
416
+ t.getScrollOffset() > 0 ? P(o, t.getScrollOffset(), E, x, "auto") : t.setScrollOffset(ue(o, E, x)), window.addEventListener("scroll", ie, { passive: !0 }), window.addEventListener("resize", F), o && typeof ResizeObserver < "u" && (c = new ResizeObserver(() => F()), c.observe(o));
417
+ return;
418
+ }
419
+ if (o === O && !p || (de(), O = o, !o || !Z())) return;
420
+ const m = t.getViewportSize(), w = t.getTotalSize();
421
+ t.getScrollOffset() > 0 ? P(o, t.getScrollOffset(), w, m, "auto") : t.setScrollOffset(ue(o, w, m)), o.addEventListener("scroll", ie, { passive: !0 }), typeof ResizeObserver < "u" && (c = new ResizeObserver(() => F()), c.observe(o));
336
422
  }
337
- function xe() {
338
- return !Z() || typeof ResizeObserver > "u" ? null : (w || (w = new ResizeObserver((a) => {
339
- const c = m();
340
- let g = !1;
341
- if (!u.value) {
342
- for (const M of a) {
343
- const O = d.get(M.target);
344
- if (O === void 0) continue;
345
- const C = M.borderBoxSize?.[0], A = Math.round(
346
- c ? C?.inlineSize ?? M.contentRect.width : C?.blockSize ?? M.contentRect.height
423
+ function je() {
424
+ return !Z() || typeof ResizeObserver > "u" ? null : (g || (g = new ResizeObserver((o) => {
425
+ const a = $();
426
+ let m = !1;
427
+ if (!d.value) {
428
+ for (const w of o) {
429
+ const x = T.get(w.target);
430
+ if (x === void 0) continue;
431
+ const E = w.borderBoxSize?.[0], _ = Math.round(
432
+ a ? E?.inlineSize ?? w.contentRect.width : E?.blockSize ?? w.contentRect.height
347
433
  );
348
- A > 0 && t.measure(O, A) && (g = !0);
434
+ _ > 0 && t.measure(x, _) && (m = !0);
349
435
  }
350
- g && y();
436
+ m && F();
351
437
  }
352
- })), w);
438
+ })), g);
353
439
  }
354
- function se() {
355
- if (b = 0, u.value) return;
356
- const a = l.splice(0, l.length), c = m();
357
- let g = !1;
358
- for (const M of a) {
359
- if (!M.element.isConnected) continue;
360
- const O = M.element.getBoundingClientRect(), C = Math.round(c ? O.width : O.height);
361
- C > 0 && t.measure(M.index, C) && (g = !0);
440
+ function ze() {
441
+ if (k = 0, d.value) return;
442
+ const o = G.splice(0, G.length), a = $();
443
+ let m = !1;
444
+ for (const w of o) {
445
+ if (!w.element.isConnected) continue;
446
+ const x = w.element.getBoundingClientRect(), E = Math.round(a ? x.width : x.height);
447
+ E > 0 && t.measure(w.index, E) && (m = !0);
362
448
  }
363
- g && y();
449
+ m && F();
364
450
  }
365
- function pe(a, c) {
366
- const g = ze(a), M = xe(), O = h.get(c);
367
- O && O !== g && (M?.unobserve(O), d.delete(O), h.delete(c)), g && (h.set(c, g), d.set(g, c), M?.observe(g), l.push({ element: g, index: c }), !(u.value || b) && (b = Le(se)));
451
+ function Ge(o, a) {
452
+ const m = ke(o), w = je(), x = M.get(a);
453
+ x && x !== m && (w?.unobserve(x), T.delete(x), M.delete(a)), m && (M.set(a, m), T.set(m, a), w?.observe(m), G.push({ element: m, index: a }), !(d.value || k) && (k = ct(ze)));
368
454
  }
369
- function oe(a, c = "auto") {
370
- const g = z(), M = g ? de(g, m()) : 0, O = M > 0 ? M : t.getViewportSize(), C = t.getTotalSize(), A = H(a, C, O);
371
- t.setScrollOffset(A), g && v(g, A, C, O, c), y();
455
+ function ye(o, a = "auto") {
456
+ const m = D(), w = ve(m), x = w > 0 ? w : t.getViewportSize(), E = t.getTotalSize(), _ = J(o, E, x);
457
+ t.setScrollOffset(_), P(m, _, E, x, a), F();
372
458
  }
373
- function be(a, c) {
374
- const g = t.getOffsetForIndex(a, c?.align ?? "auto");
375
- oe(g, c?.behavior ?? "auto");
459
+ function We(o, a) {
460
+ const m = t.getOffsetForIndex(o, a?.align ?? "auto");
461
+ ye(m, a?.behavior ?? "auto");
376
462
  }
377
- function Ie(a, c) {
378
- t.measure(a, c) && y();
463
+ function Ne(o, a) {
464
+ t.measure(o, a) && F();
379
465
  }
380
- return y(), ge(
466
+ return F(), Ee(
381
467
  () => [
382
- o(e.count),
383
- o(e.overscan),
384
- o(e.gap),
385
- o(e.paddingStart),
386
- o(e.paddingEnd),
387
- o(e.lanes),
388
- o(e.horizontal),
389
- o(e.itemSize),
390
- o(e.viewportInset),
391
- o(e.revision),
392
- o(e.container),
393
- o(e.initialRect)?.width,
394
- o(e.initialRect)?.height
468
+ l(e.count),
469
+ l(e.overscan),
470
+ l(e.gap),
471
+ l(e.paddingStart),
472
+ l(e.paddingEnd),
473
+ l(e.lanes),
474
+ l(e.horizontal),
475
+ l(e.itemSize),
476
+ l(e.viewportInset),
477
+ l(e.revision),
478
+ l(e.container),
479
+ l(e.windowScroll),
480
+ l(e.scrollMargin),
481
+ l(e.reverse),
482
+ l(e.initialRect)?.width,
483
+ l(e.initialRect)?.height
395
484
  ],
396
485
  () => {
397
- we(), y();
486
+ Be(), F();
398
487
  },
399
488
  { flush: "post" }
400
- ), ve(() => {
401
- x && x.removeEventListener("scroll", B), I?.disconnect(), w?.disconnect(), je(b), typeof window < "u" && window.clearTimeout(E), d.clear(), h.clear(), l.length = 0;
489
+ ), Ce(() => {
490
+ de(), g?.disconnect(), ut(k), typeof window < "u" && window.clearTimeout(A), T.clear(), M.clear(), G.length = 0;
402
491
  }), {
403
- virtualItems: R(() => i.value),
404
- totalSize: R(() => n.value),
405
- scrollOffset: R(() => r.value),
406
- scrollAdjust: R(() => s.value),
407
- isScrolling: R(() => u.value),
408
- scrollToIndex: be,
409
- scrollToOffset: oe,
410
- measure: Ie,
411
- measureElement: pe
492
+ virtualItems: C(() => i.value),
493
+ totalSize: C(() => n.value),
494
+ scrollOffset: C(() => r.value),
495
+ scrollAdjust: C(() => s.value),
496
+ isScrolling: C(() => d.value),
497
+ scrollToIndex: We,
498
+ scrollToOffset: ye,
499
+ measure: Ne,
500
+ measureElement: Ge
412
501
  };
413
502
  }
414
- function Ne(e, t, i) {
503
+ function ft(e, t, i) {
415
504
  return typeof e == "function" ? e(t, i) : typeof e == "number" ? e : 48;
416
505
  }
417
- function ye(e) {
418
- const t = te({
419
- count: () => o(e.items).length,
506
+ function Ve(e) {
507
+ const t = me({
508
+ count: () => l(e.items).length,
420
509
  estimateSize: (n) => {
421
- const r = o(e.items);
422
- return Ne(e.estimateSize, n, r[n]);
510
+ const r = l(e.items);
511
+ return ft(e.estimateSize, n, r[n]);
423
512
  },
424
513
  getItemKey: (n) => {
425
- const s = o(e.items)[n];
514
+ const s = l(e.items)[n];
426
515
  return e.getItemKey?.(s, n) ?? n;
427
516
  },
428
- itemSize: () => e.itemSize !== void 0 ? o(e.itemSize) : typeof e.estimateSize == "number" ? e.estimateSize : void 0,
517
+ itemSize: () => e.itemSize !== void 0 ? l(e.itemSize) : typeof e.estimateSize == "number" ? e.estimateSize : void 0,
429
518
  container: e.container,
430
519
  horizontal: e.horizontal,
431
520
  overscan: e.overscan,
@@ -434,11 +523,16 @@ function ye(e) {
434
523
  paddingEnd: e.paddingEnd,
435
524
  initialRect: e.initialRect,
436
525
  viewportInset: e.viewportInset,
437
- revision: e.revision
526
+ revision: e.revision,
527
+ windowScroll: e.windowScroll,
528
+ scrollMargin: e.scrollMargin,
529
+ reverse: e.reverse,
530
+ onVisibleRangeChange: e.onVisibleRangeChange,
531
+ onScrollEnd: e.onScrollEnd
438
532
  });
439
533
  return {
440
- virtualItems: R(() => {
441
- const n = o(e.items);
534
+ virtualItems: C(() => {
535
+ const n = l(e.items);
442
536
  return t.virtualItems.value.map((r) => {
443
537
  const s = n[r.index];
444
538
  return {
@@ -458,104 +552,110 @@ function ye(e) {
458
552
  measureElement: t.measureElement
459
553
  };
460
554
  }
461
- function he(e, t, i) {
555
+ function Re(e, t, i) {
462
556
  return typeof e == "function" ? e(t) : typeof e == "number" ? e : i;
463
557
  }
464
- function Be(e) {
465
- const t = R(() => Math.max(1, Math.floor(o(e.columnCount) || 1))), i = R(() => Math.ceil(o(e.items).length / t.value)), n = /* @__PURE__ */ new Map(), r = te({
558
+ function ht(e) {
559
+ const t = C(() => Math.max(1, Math.floor(l(e.columnCount) || 1))), i = C(() => Math.ceil(l(e.items).length / t.value)), n = /* @__PURE__ */ new Map(), r = me({
466
560
  count: () => i.value,
467
- estimateSize: (f) => he(o(e.estimateRowSize), f, 48),
561
+ estimateSize: (f) => Re(l(e.estimateRowSize), f, 48),
468
562
  itemSize: () => {
469
- const f = o(e.estimateRowSize);
563
+ const f = l(e.estimateRowSize);
470
564
  return typeof f == "number" ? f : void 0;
471
565
  },
472
- overscan: () => o(e.overscanRows) ?? o(e.overscan) ?? 2,
473
- gap: () => o(e.rowGap) ?? 0,
566
+ overscan: () => l(e.overscanRows) ?? l(e.overscan) ?? 2,
567
+ gap: () => l(e.rowGap) ?? 0,
474
568
  horizontal: !1,
475
569
  container: e.container,
476
570
  initialRect: e.initialRect,
477
- revision: e.revision
478
- }), s = te({
571
+ revision: e.revision,
572
+ windowScroll: e.windowScroll,
573
+ scrollMargin: e.scrollMargin,
574
+ onVisibleRangeChange: e.onVisibleRangeChange,
575
+ onScrollEnd: e.onScrollEnd
576
+ }), s = me({
479
577
  count: () => t.value,
480
- estimateSize: (f) => he(o(e.estimateColumnSize), f, 160),
578
+ estimateSize: (f) => Re(l(e.estimateColumnSize), f, 160),
481
579
  itemSize: () => {
482
- const f = o(e.estimateColumnSize);
580
+ const f = l(e.estimateColumnSize);
483
581
  return typeof f == "number" ? f : void 0;
484
582
  },
485
- overscan: () => o(e.overscanColumns) ?? o(e.overscan) ?? 1,
486
- gap: () => o(e.columnGap) ?? 0,
583
+ overscan: () => l(e.overscanColumns) ?? l(e.overscan) ?? 1,
584
+ gap: () => l(e.columnGap) ?? 0,
487
585
  horizontal: !0,
488
586
  container: e.container,
489
587
  initialRect: e.initialRect,
490
- revision: e.revision
491
- }), u = R(() => {
492
- const f = o(e.items), d = t.value, h = [];
493
- for (const l of r.virtualItems.value)
588
+ revision: e.revision,
589
+ windowScroll: e.windowScroll,
590
+ scrollMargin: e.scrollMargin
591
+ }), d = C(() => {
592
+ const f = l(e.items), b = t.value, S = [];
593
+ for (const v of r.virtualItems.value)
494
594
  for (const z of s.virtualItems.value) {
495
- const m = l.index * d + z.index;
496
- if (m >= f.length) continue;
497
- const j = f[m];
498
- h.push({
499
- index: m,
500
- key: e.getItemKey?.(j, m) ?? m,
501
- item: j,
502
- row: l,
595
+ const h = v.index * b + z.index;
596
+ if (h >= f.length) continue;
597
+ const T = f[h];
598
+ S.push({
599
+ index: h,
600
+ key: e.getItemKey?.(T, h) ?? h,
601
+ item: T,
602
+ row: v,
503
603
  column: z
504
604
  });
505
605
  }
506
- return h;
606
+ return S;
507
607
  });
508
- function p(f, d) {
509
- const h = o(e.items);
510
- if (!h.length) return;
511
- const l = Math.min(Math.max(f, 0), h.length - 1), z = t.value;
512
- r.scrollToIndex(Math.floor(l / z), d), s.scrollToIndex(l % z, d);
608
+ function I(f, b) {
609
+ const S = l(e.items);
610
+ if (!S.length) return;
611
+ const v = Math.min(Math.max(f, 0), S.length - 1), z = t.value;
612
+ r.scrollToIndex(Math.floor(v / z), b), s.scrollToIndex(v % z, b);
513
613
  }
514
- function x(f, d = "auto") {
515
- f.top !== void 0 && r.scrollToOffset(f.top, d), f.left !== void 0 && s.scrollToOffset(f.left, d);
614
+ function O(f, b = "auto") {
615
+ f.top !== void 0 && r.scrollToOffset(f.top, b), f.left !== void 0 && s.scrollToOffset(f.left, b);
516
616
  }
517
- function I(f, d) {
518
- const h = Math.max(n.get(f) ?? 0, d);
519
- h <= 0 || h === n.get(f) || (n.set(f, h), r.measure(f, h));
617
+ function p(f, b) {
618
+ const S = Math.max(n.get(f) ?? 0, b);
619
+ S <= 0 || S === n.get(f) || (n.set(f, S), r.measure(f, S));
520
620
  }
521
- let w = null;
522
- const b = /* @__PURE__ */ new Map();
523
- function E() {
524
- return !Z() || typeof ResizeObserver > "u" ? null : (w || (w = new ResizeObserver((f) => {
525
- for (const d of f) {
526
- const h = b.get(d.target);
527
- if (h === void 0) continue;
528
- const z = d.borderBoxSize?.[0]?.blockSize ?? d.contentRect.height;
529
- z > 0 && I(h, z);
621
+ let c = null;
622
+ const g = /* @__PURE__ */ new Map();
623
+ function k() {
624
+ return !Z() || typeof ResizeObserver > "u" ? null : (c || (c = new ResizeObserver((f) => {
625
+ for (const b of f) {
626
+ const S = g.get(b.target);
627
+ if (S === void 0) continue;
628
+ const z = b.borderBoxSize?.[0]?.blockSize ?? b.contentRect.height;
629
+ z > 0 && p(S, z);
530
630
  }
531
- })), w);
631
+ })), c);
532
632
  }
533
- function k(f, d) {
534
- const h = ze(f), l = E();
535
- if (!h) return;
536
- b.set(h, d), l?.observe(h);
537
- const z = h.getBoundingClientRect().height;
538
- z > 0 && I(d, z);
633
+ function A(f, b) {
634
+ const S = ke(f), v = k();
635
+ if (!S) return;
636
+ g.set(S, b), v?.observe(S);
637
+ const z = S.getBoundingClientRect().height;
638
+ z > 0 && p(b, z);
539
639
  }
540
- return ve(() => {
541
- w?.disconnect(), b.clear();
640
+ return Ce(() => {
641
+ c?.disconnect(), g.clear();
542
642
  }), {
543
643
  virtualRows: r.virtualItems,
544
644
  virtualColumns: s.virtualItems,
545
- virtualCells: u,
645
+ virtualCells: d,
546
646
  totalHeight: r.totalSize,
547
647
  totalWidth: s.totalSize,
548
648
  scrollAdjustX: s.scrollAdjust,
549
649
  scrollAdjustY: r.scrollAdjust,
550
- scrollToIndex: p,
551
- scrollToOffset: x,
552
- measureRow: I,
553
- measureRowElement: k,
650
+ scrollToIndex: I,
651
+ scrollToOffset: O,
652
+ measureRow: p,
653
+ measureRowElement: A,
554
654
  measureColumn: s.measure
555
655
  };
556
656
  }
557
- function He(e) {
558
- const t = ye({
657
+ function mt(e) {
658
+ const t = Ve({
559
659
  items: e.rows,
560
660
  estimateSize: e.estimateRowSize,
561
661
  container: e.container,
@@ -564,25 +664,49 @@ function He(e) {
564
664
  initialRect: e.initialRect,
565
665
  viewportInset: e.viewportInset,
566
666
  revision: e.revision,
567
- itemSize: e.itemSize
568
- }), i = R(() => {
569
- const s = o(e.columns);
570
- let u = 0;
571
- return s.map((p) => {
572
- const x = p.width ?? p.minWidth ?? 160, I = {
573
- ...p,
574
- start: u,
575
- size: x,
576
- end: u + x
667
+ itemSize: e.itemSize,
668
+ windowScroll: e.windowScroll,
669
+ scrollMargin: e.scrollMargin,
670
+ reverse: e.reverse,
671
+ onVisibleRangeChange: e.onVisibleRangeChange,
672
+ onScrollEnd: e.onScrollEnd
673
+ }), i = C(() => {
674
+ const s = l(e.columns);
675
+ let d = 0;
676
+ const I = s.map((c) => {
677
+ const g = c.width ?? c.minWidth ?? 160, k = {
678
+ ...c,
679
+ start: d,
680
+ size: g,
681
+ end: d + g,
682
+ pinOffset: 0,
683
+ stickyStyle: {}
577
684
  };
578
- return u += x, I;
685
+ return d += g, k;
579
686
  });
580
- }), n = R(() => {
687
+ let O = 0;
688
+ for (const c of I)
689
+ c.pin === "start" && (c.pinOffset = O, c.stickyStyle = {
690
+ position: "sticky",
691
+ left: `${O}px`,
692
+ zIndex: 2
693
+ }, O += c.size);
694
+ let p = 0;
695
+ for (let c = I.length - 1; c >= 0; c -= 1) {
696
+ const g = I[c];
697
+ !g || g.pin !== "end" || (g.pinOffset = p, g.stickyStyle = {
698
+ position: "sticky",
699
+ right: `${p}px`,
700
+ zIndex: 2
701
+ }, p += g.size);
702
+ }
703
+ return I;
704
+ }), n = C(() => {
581
705
  const s = i.value;
582
706
  return s.length ? s[s.length - 1]?.end ?? 0 : 0;
583
707
  });
584
708
  return {
585
- virtualRows: R(() => t.virtualItems.value),
709
+ virtualRows: C(() => t.virtualItems.value),
586
710
  columns: i,
587
711
  totalHeight: t.totalSize,
588
712
  totalWidth: n,
@@ -595,11 +719,11 @@ function He(e) {
595
719
  measureElement: t.measureElement
596
720
  };
597
721
  }
598
- function me(e) {
722
+ function oe(e) {
599
723
  if (typeof e == "number" && Number.isFinite(e)) return `${e}px`;
600
724
  if (typeof e == "string" && e.trim()) return e;
601
725
  }
602
- function W(e) {
726
+ function Q(e) {
603
727
  if (typeof e == "number" && Number.isFinite(e)) return e;
604
728
  if (typeof e != "string") return 0;
605
729
  const t = /^(-?\d+(?:\.\d+)?)px$/.exec(e.trim());
@@ -607,24 +731,29 @@ function W(e) {
607
731
  const i = Number(t[1]);
608
732
  return Number.isFinite(i) ? i : 0;
609
733
  }
610
- function re(e) {
611
- return {
734
+ function Se(e) {
735
+ return e.windowScroll ? {
736
+ position: "relative",
737
+ width: oe(e.width) ?? "100%",
738
+ height: oe(e.height),
739
+ overflowAnchor: "none"
740
+ } : {
612
741
  overflow: "auto",
613
742
  position: "relative",
614
- height: me(e.height) ?? (e.horizontal ? "100%" : void 0),
615
- width: me(e.width) ?? (e.horizontal ? void 0 : "100%"),
743
+ height: oe(e.height) ?? (e.horizontal ? "100%" : void 0),
744
+ width: oe(e.width) ?? (e.horizontal ? void 0 : "100%"),
616
745
  overflowAnchor: "none"
617
746
  };
618
747
  }
619
- function We(e, t) {
620
- const i = N(e);
748
+ function gt(e, t) {
749
+ const i = H(e);
621
750
  return {
622
751
  position: "relative",
623
752
  width: t ? `${i}px` : "100%",
624
753
  height: t ? "100%" : `${i}px`
625
754
  };
626
755
  }
627
- function _e(e, t, i) {
756
+ function wt(e, t, i) {
628
757
  return {
629
758
  position: "absolute",
630
759
  top: 0,
@@ -637,7 +766,7 @@ function _e(e, t, i) {
637
766
  overflow: "hidden"
638
767
  };
639
768
  }
640
- const Ye = /* @__PURE__ */ ie({
769
+ const yt = /* @__PURE__ */ ge({
641
770
  __name: "VirtualList",
642
771
  props: {
643
772
  items: {},
@@ -653,88 +782,98 @@ const Ye = /* @__PURE__ */ ie({
653
782
  tag: { default: "div" },
654
783
  itemTag: { default: "div" },
655
784
  itemAttrs: {},
656
- revision: {}
785
+ revision: {},
786
+ windowScroll: { type: Boolean, default: !1 },
787
+ scrollMargin: { default: 0 },
788
+ reverse: { type: Boolean, default: !1 }
657
789
  },
658
- setup(e, { expose: t }) {
659
- const i = e, n = L(null), { virtualItems: r, totalSize: s, scrollAdjust: u, scrollToIndex: p, scrollToOffset: x, measure: I, measureElement: w } = ye({
660
- items: () => i.items,
661
- estimateSize: (d, h) => {
662
- const l = i.estimateSize;
663
- return typeof l == "number" ? l : l(d, h);
790
+ emits: ["visibleRangeChange", "scrollEnd"],
791
+ setup(e, { expose: t, emit: i }) {
792
+ const n = e, r = i, s = W(null), { virtualItems: d, totalSize: I, scrollAdjust: O, scrollToIndex: p, scrollToOffset: c, measure: g, measureElement: k } = Ve({
793
+ items: () => n.items,
794
+ estimateSize: (v, z) => {
795
+ const h = n.estimateSize;
796
+ return typeof h == "number" ? h : h(v, z);
664
797
  },
665
- itemSize: () => typeof i.estimateSize == "number" ? i.estimateSize : void 0,
666
- container: n,
667
- horizontal: () => i.horizontal,
668
- overscan: () => i.overscan,
669
- gap: () => i.gap,
670
- paddingStart: () => i.paddingStart,
671
- paddingEnd: () => i.paddingEnd,
672
- getItemKey: (d, h) => i.getItemKey?.(d, h) ?? h,
798
+ itemSize: () => typeof n.estimateSize == "number" ? n.estimateSize : void 0,
799
+ container: s,
800
+ horizontal: () => n.horizontal,
801
+ overscan: () => n.overscan,
802
+ gap: () => n.gap,
803
+ paddingStart: () => n.paddingStart,
804
+ paddingEnd: () => n.paddingEnd,
805
+ getItemKey: (v, z) => n.getItemKey?.(v, z) ?? z,
673
806
  initialRect: () => ({
674
- width: W(i.width),
675
- height: W(i.height)
807
+ width: Q(n.width),
808
+ height: Q(n.height)
676
809
  }),
677
- revision: () => i.revision
678
- }), b = R(
679
- () => re({
680
- height: i.height,
681
- width: i.width,
682
- horizontal: i.horizontal
810
+ revision: () => n.revision,
811
+ windowScroll: () => n.windowScroll,
812
+ scrollMargin: () => n.scrollMargin,
813
+ reverse: () => n.reverse,
814
+ onVisibleRangeChange: (v) => r("visibleRangeChange", v),
815
+ onScrollEnd: () => r("scrollEnd")
816
+ }), A = C(
817
+ () => Se({
818
+ height: n.height,
819
+ width: n.width,
820
+ horizontal: n.horizontal,
821
+ windowScroll: n.windowScroll
683
822
  })
684
- ), E = R(() => We(s.value, i.horizontal));
685
- function k(d, h) {
686
- return _e(d, i.horizontal, h);
823
+ ), f = C(() => gt(I.value, n.horizontal));
824
+ function b(v, z) {
825
+ return wt(v, n.horizontal, z);
687
826
  }
688
- function f(d) {
689
- return (h) => {
690
- w(h, d);
827
+ function S(v) {
828
+ return (z) => {
829
+ k(z, v);
691
830
  };
692
831
  }
693
832
  return t({
694
833
  scrollToIndex: p,
695
- scrollToOffset: x,
696
- measure: I
697
- }), (d, h) => (T(), Y(q(e.tag), {
834
+ scrollToOffset: c,
835
+ measure: g
836
+ }), (v, z) => (V(), le(ae(e.tag), {
698
837
  ref_key: "container",
699
- ref: n,
838
+ ref: s,
700
839
  "data-virtual-container": "",
701
840
  role: "list",
702
- style: F(b.value)
841
+ style: B(A.value)
703
842
  }, {
704
- default: U(() => [
705
- e.items.length ? (T(), $("div", {
843
+ default: ce(() => [
844
+ e.items.length ? (V(), K("div", {
706
845
  key: 1,
707
846
  "data-virtual-spacer": "",
708
- style: F(E.value)
847
+ style: B(f.value)
709
848
  }, [
710
- (T(!0), $(D, null, P(K(r), (l) => (T(), Y(q(e.itemTag), ne({
711
- key: l.key,
849
+ (V(!0), K(te, null, ne(j(d), (h) => (V(), le(ae(e.itemTag), we({
850
+ key: h.key,
712
851
  ref_for: !0,
713
- ref: f(l.index),
852
+ ref: S(h.index),
714
853
  role: "listitem",
715
- "data-index": l.index,
716
- "data-key": String(l.key),
854
+ "data-index": h.index,
855
+ "data-key": String(h.key),
717
856
  "aria-setsize": e.items.length,
718
- "aria-posinset": l.index + 1,
719
- style: k(l.start - K(u), l.size)
857
+ "aria-posinset": h.index + 1,
858
+ style: b(h.start - j(O), h.size)
720
859
  }, { ref_for: !0 }, e.itemAttrs), {
721
- default: U(() => [
722
- G(d.$slots, "default", {
723
- item: l.item,
724
- index: l.index,
725
- start: l.start,
726
- size: l.size,
727
- end: l.end
860
+ default: ce(() => [
861
+ U(v.$slots, "default", {
862
+ item: h.item,
863
+ index: h.index,
864
+ start: h.start,
865
+ size: h.size,
866
+ end: h.end
728
867
  })
729
868
  ]),
730
869
  _: 2
731
870
  }, 1040, ["data-index", "data-key", "aria-setsize", "aria-posinset", "style"]))), 128))
732
- ], 4)) : G(d.$slots, "empty", {}, void 0, void 0, 0)
871
+ ], 4)) : U(v.$slots, "empty", {}, void 0, void 0, 0)
733
872
  ]),
734
873
  _: 3
735
874
  }, 8, ["style"]));
736
875
  }
737
- }), De = ["data-index", "data-key"], qe = /* @__PURE__ */ ie({
876
+ }), St = ["data-index", "data-key"], xt = /* @__PURE__ */ ge({
738
877
  __name: "VirtualGrid",
739
878
  props: {
740
879
  items: {},
@@ -751,106 +890,114 @@ const Ye = /* @__PURE__ */ ie({
751
890
  getItemKey: {},
752
891
  tag: { default: "div" },
753
892
  itemAttrs: {},
754
- revision: {}
893
+ revision: {},
894
+ windowScroll: { type: Boolean, default: !1 },
895
+ scrollMargin: { default: 0 }
755
896
  },
756
- setup(e, { expose: t }) {
757
- const i = e, n = L(null), {
758
- virtualCells: r,
759
- totalWidth: s,
760
- totalHeight: u,
897
+ emits: ["visibleRangeChange", "scrollEnd"],
898
+ setup(e, { expose: t, emit: i }) {
899
+ const n = e, r = i, s = W(null), {
900
+ virtualCells: d,
901
+ totalWidth: I,
902
+ totalHeight: O,
761
903
  scrollAdjustX: p,
762
- scrollAdjustY: x,
763
- scrollToIndex: I,
764
- scrollToOffset: w,
765
- measureRow: b,
766
- measureRowElement: E
767
- } = Be({
768
- items: () => i.items,
769
- columnCount: () => i.columnCount,
770
- estimateRowSize: () => i.estimateRowSize,
771
- estimateColumnSize: () => i.estimateColumnSize,
772
- container: n,
773
- overscan: () => i.overscan,
774
- overscanRows: () => i.overscanRows,
775
- overscanColumns: () => i.overscanColumns,
776
- rowGap: () => i.rowGap,
777
- columnGap: () => i.columnGap,
778
- getItemKey: (l, z) => i.getItemKey?.(l, z) ?? z,
904
+ scrollAdjustY: c,
905
+ scrollToIndex: g,
906
+ scrollToOffset: k,
907
+ measureRow: A,
908
+ measureRowElement: f
909
+ } = ht({
910
+ items: () => n.items,
911
+ columnCount: () => n.columnCount,
912
+ estimateRowSize: () => n.estimateRowSize,
913
+ estimateColumnSize: () => n.estimateColumnSize,
914
+ container: s,
915
+ overscan: () => n.overscan,
916
+ overscanRows: () => n.overscanRows,
917
+ overscanColumns: () => n.overscanColumns,
918
+ rowGap: () => n.rowGap,
919
+ columnGap: () => n.columnGap,
920
+ getItemKey: (h, T) => n.getItemKey?.(h, T) ?? T,
779
921
  initialRect: () => ({
780
- width: W(i.width),
781
- height: W(i.height)
922
+ width: Q(n.width),
923
+ height: Q(n.height)
782
924
  }),
783
- revision: () => i.revision
784
- }), k = R(
785
- () => re({
786
- height: i.height,
787
- width: i.width,
788
- horizontal: !1
925
+ revision: () => n.revision,
926
+ windowScroll: () => n.windowScroll,
927
+ scrollMargin: () => n.scrollMargin,
928
+ onVisibleRangeChange: (h) => r("visibleRangeChange", h),
929
+ onScrollEnd: () => r("scrollEnd")
930
+ }), b = C(
931
+ () => Se({
932
+ height: n.height,
933
+ width: n.width,
934
+ horizontal: !1,
935
+ windowScroll: n.windowScroll
789
936
  })
790
- ), f = R(() => ({
937
+ ), S = C(() => ({
791
938
  position: "relative",
792
- width: `${N(s.value)}px`,
793
- height: `${N(u.value)}px`
939
+ width: `${H(I.value)}px`,
940
+ height: `${H(O.value)}px`
794
941
  }));
795
- function d(l) {
796
- return (z) => {
797
- E(z, l);
942
+ function v(h) {
943
+ return (T) => {
944
+ f(T, h);
798
945
  };
799
946
  }
800
- function h(l, z, m, j) {
947
+ function z(h, T, M, G) {
801
948
  return {
802
949
  position: "absolute",
803
950
  top: 0,
804
951
  left: 0,
805
- width: `${z}px`,
806
- height: `${j}px`,
807
- transform: `translate(${l}px, ${m}px)`,
952
+ width: `${T}px`,
953
+ height: `${G}px`,
954
+ transform: `translate(${h}px, ${M}px)`,
808
955
  contain: "layout style",
809
956
  boxSizing: "border-box",
810
957
  overflow: "hidden"
811
958
  };
812
959
  }
813
960
  return t({
814
- scrollToIndex: I,
815
- scrollToOffset: w,
816
- measureRow: b
817
- }), (l, z) => (T(), Y(q(e.tag), {
961
+ scrollToIndex: g,
962
+ scrollToOffset: k,
963
+ measureRow: A
964
+ }), (h, T) => (V(), le(ae(e.tag), {
818
965
  ref_key: "container",
819
- ref: n,
966
+ ref: s,
820
967
  "data-virtual-container": "",
821
968
  role: "grid",
822
- style: F(k.value)
969
+ style: B(b.value)
823
970
  }, {
824
- default: U(() => [
825
- e.items.length ? (T(), $("div", {
971
+ default: ce(() => [
972
+ e.items.length ? (V(), K("div", {
826
973
  key: 1,
827
974
  "data-virtual-spacer": "",
828
- style: F(f.value)
975
+ style: B(S.value)
829
976
  }, [
830
- (T(!0), $(D, null, P(K(r), (m) => (T(), $("div", ne({
831
- key: m.key,
977
+ (V(!0), K(te, null, ne(j(d), (M) => (V(), K("div", we({
978
+ key: M.key,
832
979
  ref_for: !0,
833
- ref: d(m.row.index),
980
+ ref: v(M.row.index),
834
981
  role: "gridcell",
835
- "data-index": m.index,
836
- "data-key": String(m.key),
837
- style: h(m.column.start - K(p), m.column.size, m.row.start - K(x), m.row.size)
982
+ "data-index": M.index,
983
+ "data-key": String(M.key),
984
+ style: z(M.column.start - j(p), M.column.size, M.row.start - j(c), M.row.size)
838
985
  }, { ref_for: !0 }, e.itemAttrs), [
839
- G(l.$slots, "default", {
840
- item: m.item,
841
- index: m.index,
842
- rowIndex: m.row.index,
843
- columnIndex: m.column.index,
844
- row: m.row,
845
- column: m.column
986
+ U(h.$slots, "default", {
987
+ item: M.item,
988
+ index: M.index,
989
+ rowIndex: M.row.index,
990
+ columnIndex: M.column.index,
991
+ row: M.row,
992
+ column: M.column
846
993
  })
847
- ], 16, De))), 128))
848
- ], 4)) : G(l.$slots, "empty", {}, void 0, void 0, 0)
994
+ ], 16, St))), 128))
995
+ ], 4)) : U(h.$slots, "empty", {}, void 0, void 0, 0)
849
996
  ]),
850
997
  _: 3
851
998
  }, 8, ["style"]));
852
999
  }
853
- }), Pe = ["data-index", "data-key", "aria-rowindex"], Ue = /* @__PURE__ */ ie({
1000
+ }), vt = ["data-index", "data-key", "aria-rowindex"], pt = /* @__PURE__ */ ge({
854
1001
  __name: "VirtualTable",
855
1002
  props: {
856
1003
  rows: {},
@@ -863,154 +1010,166 @@ const Ye = /* @__PURE__ */ ie({
863
1010
  stickyHeader: { type: Boolean, default: !0 },
864
1011
  tag: { default: "div" },
865
1012
  rowAttrs: {},
866
- revision: {}
1013
+ revision: {},
1014
+ windowScroll: { type: Boolean, default: !1 },
1015
+ scrollMargin: { default: 0 },
1016
+ reverse: { type: Boolean, default: !1 }
867
1017
  },
868
- setup(e, { expose: t }) {
869
- const i = e, n = L(null), r = L(null), s = L(0), {
870
- virtualRows: u,
1018
+ emits: ["visibleRangeChange", "scrollEnd"],
1019
+ setup(e, { expose: t, emit: i }) {
1020
+ const n = e, r = i, s = W(null), d = W(null), I = W(0), {
1021
+ virtualRows: O,
871
1022
  columns: p,
872
- totalWidth: x,
873
- totalHeight: I,
874
- scrollAdjust: w,
875
- scrollToIndex: b,
876
- scrollToOffset: E,
877
- measure: k,
878
- measureElement: f
879
- } = He({
880
- rows: () => i.rows,
881
- columns: () => i.columns,
882
- estimateRowSize: (v, y) => {
883
- const S = i.estimateRowSize;
884
- return typeof S == "number" ? S : S(v, y);
1023
+ totalWidth: c,
1024
+ totalHeight: g,
1025
+ scrollAdjust: k,
1026
+ scrollToIndex: A,
1027
+ scrollToOffset: f,
1028
+ measure: b,
1029
+ measureElement: S
1030
+ } = mt({
1031
+ rows: () => n.rows,
1032
+ columns: () => n.columns,
1033
+ estimateRowSize: (u, R) => {
1034
+ const y = n.estimateRowSize;
1035
+ return typeof y == "number" ? y : y(u, R);
885
1036
  },
886
- container: n,
887
- overscan: () => i.overscan,
888
- getRowKey: (v, y) => i.getRowKey?.(v, y) ?? y,
1037
+ container: s,
1038
+ overscan: () => n.overscan,
1039
+ getRowKey: (u, R) => n.getRowKey?.(u, R) ?? R,
889
1040
  initialRect: () => ({
890
- width: W(i.width),
891
- height: W(i.height)
1041
+ width: Q(n.width),
1042
+ height: Q(n.height)
892
1043
  }),
893
- viewportInset: s,
894
- revision: () => i.revision,
895
- itemSize: () => typeof i.estimateRowSize == "number" ? i.estimateRowSize : void 0
1044
+ viewportInset: I,
1045
+ revision: () => n.revision,
1046
+ itemSize: () => typeof n.estimateRowSize == "number" ? n.estimateRowSize : void 0,
1047
+ windowScroll: () => n.windowScroll,
1048
+ scrollMargin: () => n.scrollMargin,
1049
+ reverse: () => n.reverse,
1050
+ onVisibleRangeChange: (u) => r("visibleRangeChange", u),
1051
+ onScrollEnd: () => r("scrollEnd")
896
1052
  });
897
- ge(r, (v, y, S) => {
898
- if (y === v && !v || !v || !Z() || typeof ResizeObserver > "u") return;
899
- const V = () => {
900
- s.value = v.getBoundingClientRect().height;
901
- }, B = new ResizeObserver(V);
902
- B.observe(v), V(), S(() => B.disconnect());
1053
+ Ee(d, (u, R, y) => {
1054
+ if (R === u && !u || !u || !Z() || typeof ResizeObserver > "u") return;
1055
+ const L = () => {
1056
+ I.value = u.getBoundingClientRect().height;
1057
+ }, ee = new ResizeObserver(L);
1058
+ ee.observe(u), L(), y(() => ee.disconnect());
903
1059
  });
904
- const d = R(
905
- () => re({
906
- height: i.height,
907
- width: i.width,
908
- horizontal: !1
1060
+ const v = C(
1061
+ () => Se({
1062
+ height: n.height,
1063
+ width: n.width,
1064
+ horizontal: !1,
1065
+ windowScroll: n.windowScroll
909
1066
  })
910
- ), h = R(() => ({
911
- minWidth: `${x.value}px`
912
- })), l = R(() => ({
913
- position: i.stickyHeader ? "sticky" : "relative",
914
- top: i.stickyHeader ? "0px" : void 0,
915
- zIndex: 1,
1067
+ ), z = C(() => ({
1068
+ minWidth: `${c.value}px`
1069
+ })), h = C(() => ({
1070
+ position: n.stickyHeader ? "sticky" : "relative",
1071
+ top: n.stickyHeader ? "0px" : void 0,
1072
+ zIndex: 3,
916
1073
  display: "flex",
917
- width: `${x.value}px`
918
- })), z = R(() => ({
1074
+ width: `${c.value}px`
1075
+ })), T = C(() => ({
919
1076
  position: "relative",
920
- height: `${N(I.value)}px`,
921
- width: `${N(x.value)}px`
1077
+ height: `${H(g.value)}px`,
1078
+ width: `${H(c.value)}px`
922
1079
  }));
923
- function m(v) {
1080
+ function M(u) {
924
1081
  return {
925
- width: `${v.size}px`,
926
- minWidth: `${v.size}px`,
1082
+ width: `${u.size}px`,
1083
+ minWidth: `${u.size}px`,
927
1084
  flex: "0 0 auto",
928
- textAlign: v.align ?? "left"
1085
+ textAlign: u.align ?? "left",
1086
+ ...u.stickyStyle,
1087
+ zIndex: u.pin ? n.stickyHeader ? 4 : 2 : u.stickyStyle.zIndex
929
1088
  };
930
1089
  }
931
- function j(v, y) {
1090
+ function G(u, R) {
932
1091
  return {
933
1092
  position: "absolute",
934
1093
  top: 0,
935
1094
  left: 0,
936
1095
  width: "100%",
937
- height: `${y}px`,
1096
+ height: `${R}px`,
938
1097
  display: "flex",
939
- transform: `translateY(${v}px)`,
1098
+ transform: `translateY(${u}px)`,
940
1099
  contain: "layout style",
941
1100
  boxSizing: "border-box",
942
1101
  overflow: "hidden"
943
1102
  };
944
1103
  }
945
- function X(v) {
946
- return (y) => {
947
- f(y, v);
1104
+ function D(u) {
1105
+ return (R) => {
1106
+ S(R, u);
948
1107
  };
949
1108
  }
950
- function _(v, y, S) {
951
- return y.accessor ? y.accessor(v, S) : v && typeof v == "object" && y.id in v ? v[y.id] : "";
1109
+ function $(u, R, y) {
1110
+ return R.accessor ? R.accessor(u, y) : u && typeof u == "object" && R.id in u ? u[R.id] : "";
952
1111
  }
953
1112
  return t({
954
- scrollToIndex: b,
955
- scrollToOffset: E,
956
- measure: k
957
- }), (v, y) => (T(), Y(q(e.tag), {
1113
+ scrollToIndex: A,
1114
+ scrollToOffset: f,
1115
+ measure: b
1116
+ }), (u, R) => (V(), le(ae(e.tag), {
958
1117
  ref_key: "container",
959
- ref: n,
1118
+ ref: s,
960
1119
  "data-virtual-container": "",
961
1120
  role: "table",
962
- style: F(d.value)
1121
+ style: B(v.value)
963
1122
  }, {
964
- default: U(() => [
965
- ue("div", {
966
- style: F(h.value)
1123
+ default: ce(() => [
1124
+ Me("div", {
1125
+ style: B(z.value)
967
1126
  }, [
968
- ue("div", {
1127
+ Me("div", {
969
1128
  ref_key: "header",
970
- ref: r,
1129
+ ref: d,
971
1130
  role: "row",
972
- style: F(l.value)
1131
+ style: B(h.value)
973
1132
  }, [
974
- G(v.$slots, "header", { columns: K(p) }, () => [
975
- (T(!0), $(D, null, P(K(p), (S) => (T(), $("div", {
976
- key: S.id,
1133
+ U(u.$slots, "header", { columns: j(p) }, () => [
1134
+ (V(!0), K(te, null, ne(j(p), (y) => (V(), K("div", {
1135
+ key: y.id,
977
1136
  role: "columnheader",
978
- style: F(m(S))
979
- }, ce(S.header), 5))), 128))
1137
+ style: B(M(y))
1138
+ }, Oe(y.header), 5))), 128))
980
1139
  ])
981
1140
  ], 4),
982
- e.rows.length ? (T(), $("div", {
1141
+ e.rows.length ? (V(), K("div", {
983
1142
  key: 1,
984
1143
  "data-virtual-spacer": "",
985
1144
  role: "rowgroup",
986
- style: F(z.value)
1145
+ style: B(T.value)
987
1146
  }, [
988
- (T(!0), $(D, null, P(K(u), (S) => (T(), $("div", ne({
989
- key: S.key,
1147
+ (V(!0), K(te, null, ne(j(O), (y) => (V(), K("div", we({
1148
+ key: y.key,
990
1149
  ref_for: !0,
991
- ref: X(S.index),
1150
+ ref: D(y.index),
992
1151
  role: "row",
993
- "data-index": S.index,
994
- "data-key": String(S.key),
995
- "aria-rowindex": S.index + 1,
996
- style: j(S.start - K(w), S.size)
1152
+ "data-index": y.index,
1153
+ "data-key": String(y.key),
1154
+ "aria-rowindex": y.index + 1,
1155
+ style: G(y.start - j(k), y.size)
997
1156
  }, { ref_for: !0 }, e.rowAttrs), [
998
- (T(!0), $(D, null, P(K(p), (V) => (T(), $("div", {
999
- key: V.id,
1157
+ (V(!0), K(te, null, ne(j(p), (L) => (V(), K("div", {
1158
+ key: L.id,
1000
1159
  role: "cell",
1001
- style: F(m(V))
1160
+ style: B(M(L))
1002
1161
  }, [
1003
- G(v.$slots, "cell", {
1004
- row: S.item,
1005
- column: V,
1006
- rowIndex: S.index,
1007
- value: _(S.item, V, S.index)
1162
+ U(u.$slots, "cell", {
1163
+ row: y.item,
1164
+ column: L,
1165
+ rowIndex: y.index,
1166
+ value: $(y.item, L, y.index)
1008
1167
  }, () => [
1009
- Oe(ce(_(S.item, V, S.index)), 1)
1168
+ Xe(Oe($(y.item, L, y.index)), 1)
1010
1169
  ])
1011
1170
  ], 4))), 128))
1012
- ], 16, Pe))), 128))
1013
- ], 4)) : G(v.$slots, "empty", {}, void 0, void 0, 0)
1171
+ ], 16, vt))), 128))
1172
+ ], 4)) : U(u.$slots, "empty", {}, void 0, void 0, 0)
1014
1173
  ], 4)
1015
1174
  ]),
1016
1175
  _: 3
@@ -1018,20 +1177,20 @@ const Ye = /* @__PURE__ */ ie({
1018
1177
  }
1019
1178
  });
1020
1179
  export {
1021
- Re as MeasurementCache,
1022
- qe as VirtualGrid,
1023
- Ye as VirtualList,
1024
- Ue as VirtualTable,
1025
- Ae as Virtualizer,
1026
- H as clampScrollOffset,
1027
- Ee as mapDomOffsetToVirtual,
1028
- ke as mapVirtualOffsetToDom,
1029
- ee as normalizeSize,
1030
- Ve as resolveScrollOffset,
1031
- N as scrollContentSize,
1032
- Be as useVirtualGrid,
1033
- ye as useVirtualList,
1034
- He as useVirtualTable,
1035
- te as useVirtualizer
1180
+ Ye as MeasurementCache,
1181
+ xt as VirtualGrid,
1182
+ yt as VirtualList,
1183
+ pt as VirtualTable,
1184
+ tt as Virtualizer,
1185
+ J as clampScrollOffset,
1186
+ Ue as mapDomOffsetToVirtual,
1187
+ Ze as mapVirtualOffsetToDom,
1188
+ he as normalizeSize,
1189
+ et as resolveScrollOffset,
1190
+ H as scrollContentSize,
1191
+ ht as useVirtualGrid,
1192
+ Ve as useVirtualList,
1193
+ mt as useVirtualTable,
1194
+ me as useVirtualizer
1036
1195
  };
1037
1196
  //# sourceMappingURL=index.mjs.map