@pdanpdan/virtual-scroll 0.2.0 → 0.2.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.
package/dist/index.js CHANGED
@@ -76,50 +76,54 @@ function useVirtualScroll(e) {
76
76
  let n = ref(0), r = ref(0), i = ref(!1), a = ref(!1), o = ref(!1), l = ref(!1), u = ref(0), p = ref(0), g = reactive({
77
77
  x: 0,
78
78
  y: 0
79
- }), _, v = ref(!1), y = new FenwickTree(e.value.items.length), b = new FenwickTree(e.value.items.length), S = new FenwickTree(e.value.columnCount || 0), D = ref(0), O = new Uint8Array(), k = new Uint8Array(), A = new Uint8Array(), j = ref(null), M = ref(0), N = ref(0), P = ref(!1), F = [], I = computed(() => e.value.itemSize === void 0 || e.value.itemSize === null || e.value.itemSize === 0), L = computed(() => e.value.columnWidth === void 0 || e.value.columnWidth === null || e.value.columnWidth === 0), R = computed(() => typeof e.value.itemSize == "number" && e.value.itemSize > 0 ? e.value.itemSize : null), z = computed(() => R.value || e.value.defaultItemSize || 50), B = computed(() => [...e.value.stickyIndices || []].sort((e, t) => e - t)), V = computed(() => {
79
+ }), _, v = ref(!1), y = new FenwickTree(e.value.items.length), b = new FenwickTree(e.value.items.length), S = new FenwickTree(e.value.columnCount || 0), D = ref(0), O = new Uint8Array(), k = new Uint8Array(), A = new Uint8Array(), j = ref(null), M = ref(!1), N = [], P = computed(() => e.value.itemSize === void 0 || e.value.itemSize === null || e.value.itemSize === 0), F = computed(() => e.value.columnWidth === void 0 || e.value.columnWidth === null || e.value.columnWidth === 0), I = computed(() => typeof e.value.itemSize == "number" && e.value.itemSize > 0 ? e.value.itemSize : null), L = computed(() => I.value || e.value.defaultItemSize || 50), R = computed(() => [...e.value.stickyIndices || []].sort((e, t) => e - t)), z = computed(() => {
80
80
  if (D.value, !a.value && e.value.ssrRange && !l.value) {
81
81
  let { start: t = 0, end: n = 0, colStart: r = 0, colEnd: i = 0 } = e.value.ssrRange, a = e.value.columnCount || 0;
82
82
  if (e.value.direction === "both" && a > 0) return S.query(i || a) - S.query(r);
83
- if (e.value.direction === "horizontal") return R.value === null ? y.query(n) - y.query(t) : (n - t) * (R.value + (e.value.columnGap || 0));
83
+ /* v8 ignore else -- @preserve */
84
+ if (e.value.direction === "horizontal") return I.value === null ? y.query(n) - y.query(t) : (n - t) * (I.value + (e.value.columnGap || 0));
84
85
  }
85
- return e.value.direction === "both" && e.value.columnCount ? S.query(e.value.columnCount) : e.value.direction === "vertical" ? 0 : R.value === null ? y.query(e.value.items.length) : e.value.items.length * (R.value + (e.value.columnGap || 0));
86
- }), H = computed(() => {
86
+ return e.value.direction === "both" && e.value.columnCount ? S.query(e.value.columnCount) : e.value.direction === "vertical" ? 0 : I.value === null ? y.query(e.value.items.length) : e.value.items.length * (I.value + (e.value.columnGap || 0));
87
+ }), B = computed(() => {
87
88
  if (D.value, !a.value && e.value.ssrRange && !l.value) {
88
89
  let { start: t, end: n } = e.value.ssrRange;
89
- if (e.value.direction === "vertical" || e.value.direction === "both") return R.value === null ? b.query(n) - b.query(t) : (n - t) * (R.value + (e.value.gap || 0));
90
+ /* v8 ignore else -- @preserve */
91
+ if (e.value.direction === "vertical" || e.value.direction === "both") return I.value === null ? b.query(n) - b.query(t) : (n - t) * (I.value + (e.value.gap || 0));
90
92
  }
91
- return e.value.direction === "horizontal" ? 0 : R.value === null ? b.query(e.value.items.length) : e.value.items.length * (R.value + (e.value.gap || 0));
92
- }), U = computed(() => {
93
+ return e.value.direction === "horizontal" ? 0 : I.value === null ? b.query(e.value.items.length) : e.value.items.length * (I.value + (e.value.gap || 0));
94
+ }), V = computed(() => {
93
95
  let t = e.value.direction === "horizontal" || e.value.direction === "both" ? getPaddingX(e.value.scrollPaddingStart, e.value.direction) : 0;
94
96
  return Math.max(0, n.value + t - g.x);
95
- }), W = computed(() => {
97
+ }), H = computed(() => {
96
98
  let t = e.value.direction === "vertical" || e.value.direction === "both" ? getPaddingY(e.value.scrollPaddingStart, e.value.direction) : 0;
97
99
  return Math.max(0, r.value + t - g.y);
98
- }), G = (t) => {
100
+ }), U = (t) => {
99
101
  D.value;
100
102
  let n = e.value.columnWidth;
101
103
  return typeof n == "number" && n > 0 ? n : Array.isArray(n) && n.length > 0 ? n[t % n.length] || 150 : typeof n == "function" ? n(t) : S.get(t) || e.value.defaultColumnWidth || 150;
102
- }, K = (t, a, o) => {
104
+ }, W = (t, a, o) => {
103
105
  let s = typeof o == "object" && o && "isCorrection" in o ? o.isCorrection : !1;
104
106
  s || (j.value = {
105
107
  rowIndex: t,
106
108
  colIndex: a,
107
109
  options: o
108
110
  });
109
- let c = e.value.container || window, l = R.value, d = e.value.gap || 0, f = e.value.columnGap || 0, m, h;
111
+ let c = e.value.container || window, l = I.value, d = e.value.gap || 0, f = e.value.columnGap || 0, m, h;
110
112
  isScrollToIndexOptions(o) ? (m = o.align, h = o.behavior) : m = o;
111
- let _ = (typeof m == "object" ? m.x : m) || "auto", x = (typeof m == "object" ? m.y : m) || "auto", C = getPaddingX(e.value.scrollPaddingStart, e.value.direction), D = getPaddingX(e.value.scrollPaddingEnd, e.value.direction), O = getPaddingY(e.value.scrollPaddingStart, e.value.direction), k = getPaddingY(e.value.scrollPaddingEnd, e.value.direction), A = e.value.direction === "vertical" || e.value.direction === "both", M = e.value.direction === "horizontal" || e.value.direction === "both", N = u.value - (M ? C + D : 0), P = p.value - (A ? O + k : 0), F = U.value, I = W.value, L = 0, z = 0;
112
- if (t != null && (t >= e.value.items.length ? (I = H.value, z = 0) : (I = l === null ? b.query(t) : t * (l + d), z = l === null ? b.get(t) - d : l), x === "start" || (x === "center" ? I -= (P - z) / 2 : x === "end" ? I -= P - z : I >= W.value && I + z <= W.value + P || I < W.value || (I -= P - z))), a != null) {
113
+ let _ = (typeof m == "object" ? m.x : m) || "auto", x = (typeof m == "object" ? m.y : m) || "auto", C = getPaddingX(e.value.scrollPaddingStart, e.value.direction), D = getPaddingX(e.value.scrollPaddingEnd, e.value.direction), O = getPaddingY(e.value.scrollPaddingStart, e.value.direction), k = getPaddingY(e.value.scrollPaddingEnd, e.value.direction), A = e.value.direction === "vertical" || e.value.direction === "both", M = e.value.direction === "horizontal" || e.value.direction === "both", N = u.value - (M ? C + D : 0), P = p.value - (A ? O + k : 0), F = V.value, L = H.value, R = 0, U = 0;
114
+ if (t != null && (t >= e.value.items.length ? (L = B.value, U = 0) : (L = l === null ? b.query(t) : t * (l + d), U = l === null ? b.get(t) - d : l), x === "start" || (x === "center" ? L -= (P - U) / 2 : x === "end" ? L -= P - U : L >= H.value && L + U <= H.value + P || L < H.value || (L -= P - U))), a != null) {
113
115
  let t = e.value.columnCount || 0;
114
- a >= t && t > 0 ? (F = V.value, L = 0) : e.value.direction === "horizontal" ? (F = l === null ? y.query(a) : a * (l + f), L = l === null ? y.get(a) - f : l) : (F = S.query(a), L = S.get(a)), _ === "start" || (_ === "center" ? F -= (N - L) / 2 : _ === "end" ? F -= N - L : F >= U.value && F + L <= U.value + N || F < U.value || (F -= N - L));
116
+ a >= t && t > 0 ? (F = z.value, R = 0) : e.value.direction === "horizontal" ? (F = l === null ? y.query(a) : a * (l + f), R = l === null ? y.get(a) - f : l) : (F = S.query(a), R = S.get(a)), _ === "start" || (_ === "center" ? F -= (N - R) / 2 : _ === "end" ? F -= N - R : F >= V.value && F + R <= V.value + N || F < V.value || (F -= N - R));
115
117
  }
116
- F = Math.max(0, Math.min(F, Math.max(0, V.value - N))), I = Math.max(0, Math.min(I, Math.max(0, H.value - P)));
117
- let B = F + g.x - (M ? C : 0), G = I + g.y - (A ? O : 0), K = a == null || Math.abs(U.value - F) < 1, q = t == null || Math.abs(W.value - I) < 1;
118
+ F = Math.max(0, Math.min(F, Math.max(0, z.value - N))), L = Math.max(0, Math.min(L, Math.max(0, B.value - P)));
119
+ let W = F + g.x - (M ? C : 0), G = L + g.y - (A ? O : 0), K = a == null || Math.abs(V.value - F) < 1, q = t == null || Math.abs(H.value - L) < 1;
118
120
  if (!K || !q) {
119
121
  let e = 0, n = 0, r = 0, i = 0, o = 0, s = 0;
122
+ /* v8 ignore else -- @preserve */
120
123
  if (typeof window < "u") {
121
124
  if (c === window ? (e = window.scrollX, n = window.scrollY, r = document.documentElement.scrollWidth, i = document.documentElement.scrollHeight, o = window.innerWidth, s = window.innerHeight) : isElement(c) && (e = c.scrollLeft, n = c.scrollTop, r = c.scrollWidth, i = c.scrollHeight, o = c.clientWidth, s = c.clientHeight), !K && a != null) {
122
- let t = e <= 1 && B <= 1, n = e >= r - o - 1 && B >= r - o - 1;
125
+ let t = e <= 1 && W <= 1, n = e >= r - o - 1 && W >= r - o - 1;
126
+ /* v8 ignore else -- @preserve */
123
127
  (t || n) && (K = !0);
124
128
  }
125
129
  if (!q && t != null) {
@@ -130,30 +134,30 @@ function useVirtualScroll(e) {
130
134
  }
131
135
  let J = s ? "auto" : h || "smooth";
132
136
  if (v.value = !0, typeof window < "u" && c === window) window.scrollTo({
133
- left: a == null ? void 0 : Math.max(0, B),
137
+ left: a == null ? void 0 : Math.max(0, W),
134
138
  top: t == null ? void 0 : Math.max(0, G),
135
139
  behavior: J
136
140
  });
137
141
  else if (isScrollableElement(c)) {
138
142
  let e = { behavior: J };
139
- a != null && (e.left = Math.max(0, B)), t != null && (e.top = Math.max(0, G)), typeof c.scrollTo == "function" ? c.scrollTo(e) : (e.left !== void 0 && (c.scrollLeft = e.left), e.top !== void 0 && (c.scrollTop = e.top));
143
+ a != null && (e.left = Math.max(0, W)), t != null && (e.top = Math.max(0, G)), typeof c.scrollTo == "function" ? c.scrollTo(e) : (e.left !== void 0 && (c.scrollLeft = e.left), e.top !== void 0 && (c.scrollTop = e.top));
140
144
  }
141
- (J === "auto" || J === void 0) && (a != null && (n.value = Math.max(0, B)), t != null && (r.value = Math.max(0, G))), K && q && !i.value && (j.value = null);
142
- }, q = (t, i, a) => {
145
+ (J === "auto" || J === void 0) && (a != null && (n.value = Math.max(0, W)), t != null && (r.value = Math.max(0, G))), K && q && !i.value && (j.value = null);
146
+ }, G = (t, i, a) => {
143
147
  let o = e.value.container || window;
144
148
  v.value = !0;
145
- let s = e.value.direction === "vertical" || e.value.direction === "both", c = e.value.direction === "horizontal" || e.value.direction === "both", l = getPaddingX(e.value.scrollPaddingStart, e.value.direction), u = getPaddingY(e.value.scrollPaddingStart, e.value.direction), d = typeof window < "u" && o === window ? window.scrollX : o.scrollLeft, f = typeof window < "u" && o === window ? window.scrollY : o.scrollTop, p = t == null ? d : t + g.x - (c ? l : 0), m = i == null ? f : i + g.y - (s ? u : 0);
149
+ let s = e.value.direction === "vertical" || e.value.direction === "both", c = e.value.direction === "horizontal" || e.value.direction === "both", l = getPaddingX(e.value.scrollPaddingStart, e.value.direction), d = getPaddingY(e.value.scrollPaddingStart, e.value.direction), f = getPaddingX(e.value.scrollPaddingEnd, e.value.direction), m = getPaddingY(e.value.scrollPaddingEnd, e.value.direction), h = u.value - (c ? l + f : 0), _ = p.value - (s ? d + m : 0), y = t == null ? null : c ? Math.max(0, Math.min(t, Math.max(0, z.value - h))) : Math.max(0, t), b = i == null ? null : s ? Math.max(0, Math.min(i, Math.max(0, B.value - _))) : Math.max(0, i), x = typeof window < "u" && o === window ? window.scrollX : o.scrollLeft, S = typeof window < "u" && o === window ? window.scrollY : o.scrollTop, C = y === null ? x : y + g.x - (c ? l : 0), w = b === null ? S : b + g.y - (s ? d : 0);
146
150
  if (typeof window < "u" && o === window) window.scrollTo({
147
- left: t == null ? void 0 : p,
148
- top: i == null ? void 0 : m,
151
+ left: t == null ? void 0 : C,
152
+ top: i == null ? void 0 : w,
149
153
  behavior: a?.behavior || "auto"
150
154
  });
151
155
  else if (isScrollableElement(o)) {
152
156
  let e = { behavior: a?.behavior || "auto" };
153
- t != null && (e.left = p), i != null && (e.top = m), typeof o.scrollTo == "function" ? o.scrollTo(e) : (e.left !== void 0 && (o.scrollLeft = e.left), e.top !== void 0 && (o.scrollTop = e.top));
157
+ t != null && (e.left = C), i != null && (e.top = w), typeof o.scrollTo == "function" ? o.scrollTo(e) : (e.left !== void 0 && (o.scrollLeft = e.left), e.top !== void 0 && (o.scrollTop = e.top));
154
158
  }
155
- (a?.behavior === "auto" || a?.behavior === void 0) && (t != null && (n.value = p), i != null && (r.value = m));
156
- }, J = () => {
159
+ (a?.behavior === "auto" || a?.behavior === void 0) && (t != null && (n.value = C), i != null && (r.value = w));
160
+ }, K = () => {
157
161
  let t = e.value.items, n = t.length, r = e.value.columnCount || 0;
158
162
  if (y.resize(n), b.resize(n), S.resize(r), k.length !== n) {
159
163
  let e = new Uint8Array(n);
@@ -168,10 +172,11 @@ function useVirtualScroll(e) {
168
172
  e.set(O.subarray(0, Math.min(r, O.length))), O = e;
169
173
  }
170
174
  let i = 0;
171
- if (e.value.restoreScrollOnPrepend && F.length > 0 && n > F.length) {
172
- let e = F[0];
175
+ if (e.value.restoreScrollOnPrepend && N.length > 0 && n > N.length) {
176
+ let e = N[0];
177
+ /* v8 ignore else -- @preserve */
173
178
  if (e !== void 0) {
174
- for (let r = 1; r <= n - F.length; r++) if (t[r] === e) {
179
+ for (let r = 1; r <= n - N.length; r++) if (t[r] === e) {
175
180
  i = r;
176
181
  break;
177
182
  }
@@ -183,19 +188,21 @@ function useVirtualScroll(e) {
183
188
  r.set(k.subarray(0, Math.min(n - i, k.length)), i), a.set(A.subarray(0, Math.min(n - i, A.length)), i), k = r, A = a;
184
189
  let o = e.value.gap || 0, s = e.value.columnGap || 0, l = 0, u = 0;
185
190
  for (let n = 0; n < i; n++) {
186
- let r = typeof e.value.itemSize == "function" ? e.value.itemSize(t[n], n) : z.value;
191
+ let r = typeof e.value.itemSize == "function" ? e.value.itemSize(t[n], n) : L.value;
187
192
  e.value.direction === "horizontal" ? l += r + s : u += r + o;
188
193
  }
194
+ /* v8 ignore else -- @preserve */
189
195
  (l > 0 || u > 0) && nextTick(() => {
190
- q(l > 0 ? U.value + l : null, u > 0 ? W.value + u : null, { behavior: "auto" });
196
+ G(l > 0 ? V.value + l : null, u > 0 ? H.value + u : null, { behavior: "auto" });
191
197
  });
192
198
  }
193
199
  if (r > 0) {
194
200
  let t = e.value.columnGap || 0, n = !1;
195
201
  for (let e = 0; e < r; e++) {
196
- let r = G(e), i = S.get(e);
197
- if (!L.value || i === 0) {
202
+ let r = U(e), i = S.get(e);
203
+ if (!F.value || i === 0) {
198
204
  let a = r + t;
205
+ /* v8 ignore else -- @preserve */
199
206
  Math.abs(i - a) > .5 && (S.set(e, a), n = !0);
200
207
  }
201
208
  }
@@ -204,14 +211,12 @@ function useVirtualScroll(e) {
204
211
  let a = e.value.gap || 0, o = e.value.columnGap || 0, s = !1;
205
212
  for (let t = 0; t < n; t++) {
206
213
  let n = e.value.items[t], r = y.get(t), i = b.get(t);
207
- if (I.value && (r > 0 || i > 0)) continue;
208
- let c = typeof e.value.itemSize == "function" ? e.value.itemSize(n, t) : z.value, l = e.value.direction === "vertical", d = e.value.direction === "horizontal", f = e.value.direction === "both", p = d ? c + o : 0, m = l || f ? c + a : 0;
209
- Math.abs(r - p) > .5 && (y.set(t, p), s = !0), Math.abs(i - m) > .5 && (b.set(t, m), s = !0);
210
- let h = d ? c : f ? Math.max(c, u.value) : 0, g = l || f ? c : 0;
211
- h > M.value && (M.value = h), g > N.value && (N.value = g);
214
+ if (P.value && (r > 0 || i > 0)) continue;
215
+ let c = typeof e.value.itemSize == "function" ? e.value.itemSize(n, t) : L.value, l = e.value.direction === "vertical", u = e.value.direction === "horizontal", d = e.value.direction === "both", f = u ? c + o : 0, p = l || d ? c + a : 0;
216
+ Math.abs(r - f) > .5 && (y.set(t, f), s = !0), Math.abs(i - p) > .5 && (b.set(t, p), s = !0);
212
217
  }
213
- s && (y.rebuild(), b.rebuild()), F = [...t], P.value = !0, D.value++;
214
- }, Y = () => {
218
+ s && (y.rebuild(), b.rebuild()), N = [...t], M.value = !0, D.value++;
219
+ }, q = () => {
215
220
  if (e.value.hostElement && typeof window < "u") {
216
221
  let t = e.value.hostElement.getBoundingClientRect(), n = e.value.container || window, r = 0, i = 0;
217
222
  if (n === window) r = t.left + window.scrollX, i = t.top + window.scrollY;
@@ -230,43 +235,43 @@ function useVirtualScroll(e) {
230
235
  () => e.value.itemSize,
231
236
  () => e.value.gap,
232
237
  () => e.value.columnGap
233
- ], J, { immediate: !0 }), watch(() => [e.value.container, e.value.hostElement], () => {
234
- Y();
238
+ ], K, { immediate: !0 }), watch(() => [e.value.container, e.value.hostElement], () => {
239
+ q();
235
240
  });
236
- let X = computed(() => {
241
+ let J = computed(() => {
237
242
  if (D.value, (!a.value || o.value) && e.value.ssrRange) return {
238
243
  start: e.value.ssrRange.start,
239
244
  end: e.value.ssrRange.end
240
245
  };
241
- let t = e.value.direction || "vertical", n = e.value.ssrRange && !i.value ? 0 : e.value.bufferBefore ?? 5, r = e.value.bufferAfter ?? 5, s = e.value.gap || 0, c = e.value.columnGap || 0, l = R.value, d = getPaddingX(e.value.scrollPaddingStart, t), f = getPaddingX(e.value.scrollPaddingEnd, t), m = getPaddingY(e.value.scrollPaddingStart, t), h = getPaddingY(e.value.scrollPaddingEnd, t), g = t === "vertical" || t === "both", _ = t === "horizontal" || t === "both", v = u.value - (_ ? d + f : 0), x = p.value - (g ? m + h : 0), S = 0, C = e.value.items.length;
242
- if (g) if (l !== null) S = Math.floor(W.value / (l + s)), C = Math.ceil((W.value + x) / (l + s));
246
+ let t = e.value.direction || "vertical", n = e.value.ssrRange && !i.value ? 0 : e.value.bufferBefore ?? 5, r = e.value.bufferAfter ?? 5, s = e.value.gap || 0, c = e.value.columnGap || 0, l = I.value, d = getPaddingX(e.value.scrollPaddingStart, t), f = getPaddingX(e.value.scrollPaddingEnd, t), m = getPaddingY(e.value.scrollPaddingStart, t), h = getPaddingY(e.value.scrollPaddingEnd, t), g = t === "vertical" || t === "both", _ = t === "horizontal" || t === "both", v = u.value - (_ ? d + f : 0), x = p.value - (g ? m + h : 0), S = 0, C = e.value.items.length;
247
+ if (g) if (l !== null) S = Math.floor(H.value / (l + s)), C = Math.ceil((H.value + x) / (l + s));
243
248
  else {
244
- S = b.findLowerBound(W.value);
249
+ S = b.findLowerBound(H.value);
245
250
  let t = b.query(S), n = S;
246
- for (; n < e.value.items.length && t < W.value + x;) t = b.query(++n);
251
+ for (; n < e.value.items.length && t < H.value + x;) t = b.query(++n);
247
252
  C = n;
248
253
  }
249
- else if (l !== null) S = Math.floor(U.value / (l + c)), C = Math.ceil((U.value + v) / (l + c));
254
+ else if (l !== null) S = Math.floor(V.value / (l + c)), C = Math.ceil((V.value + v) / (l + c));
250
255
  else {
251
- S = y.findLowerBound(U.value);
256
+ S = y.findLowerBound(V.value);
252
257
  let t = y.query(S), n = S;
253
- for (; n < e.value.items.length && t < U.value + v;) t = y.query(++n);
258
+ for (; n < e.value.items.length && t < V.value + v;) t = y.query(++n);
254
259
  C = n;
255
260
  }
256
261
  return {
257
262
  start: Math.max(0, S - n),
258
263
  end: Math.min(e.value.items.length, C + r)
259
264
  };
260
- }), Z = computed(() => {
265
+ }), Y = computed(() => {
261
266
  D.value;
262
- let t = R.value, n = e.value.gap || 0, r = e.value.columnGap || 0;
263
- return e.value.direction === "horizontal" ? t === null ? y.findLowerBound(U.value) : Math.floor(U.value / (t + r)) : t === null ? b.findLowerBound(W.value) : Math.floor(W.value / (t + n));
264
- }), Q = computed(() => {
267
+ let t = I.value, n = e.value.gap || 0, r = e.value.columnGap || 0;
268
+ return e.value.direction === "horizontal" ? t === null ? y.findLowerBound(V.value) : Math.floor(V.value / (t + r)) : t === null ? b.findLowerBound(H.value) : Math.floor(H.value / (t + n));
269
+ }), X = computed(() => {
265
270
  D.value;
266
- let { start: t, end: n } = X.value, r = [], i = R.value, o = e.value.gap || 0, s = e.value.columnGap || 0, c = B.value, l = /* @__PURE__ */ new Set();
271
+ let { start: t, end: n } = J.value, r = [], i = I.value, o = e.value.gap || 0, s = e.value.columnGap || 0, c = R.value, l = /* @__PURE__ */ new Set();
267
272
  for (let e = t; e < n; e++) l.add(e);
268
273
  if (a.value || !e.value.ssrRange) {
269
- let e = Z.value, r, i = 0, a = c.length - 1;
274
+ let e = Y.value, r, i = 0, a = c.length - 1;
270
275
  for (; i <= a;) {
271
276
  let t = i + a >>> 1;
272
277
  c[t] < e ? (r = c[t], i = t + 1) : a = t - 1;
@@ -280,14 +285,14 @@ function useVirtualScroll(e) {
280
285
  let n = e.value.items[t];
281
286
  if (n === void 0) continue;
282
287
  let a = 0, l = 0, d = 0, f = 0;
283
- e.value.direction === "horizontal" ? (a = i === null ? y.query(t) : t * (i + s), d = i === null ? y.get(t) - s : i, f = p.value) : (l = (e.value.direction === "vertical" || e.value.direction === "both") && i !== null ? t * (i + o) : b.query(t), f = i === null ? b.get(t) - o : i, d = e.value.direction === "both" ? V.value : u.value);
288
+ e.value.direction === "horizontal" ? (a = i === null ? y.query(t) : t * (i + s), d = i === null ? y.get(t) - s : i, f = p.value) : (l = (e.value.direction === "vertical" || e.value.direction === "both") && i !== null ? t * (i + o) : b.query(t), f = i === null ? b.get(t) - o : i, d = e.value.direction === "both" ? z.value : u.value);
284
289
  let m = c.includes(t), _ = a, v = l, x = !1, S = {
285
290
  x: 0,
286
291
  y: 0
287
292
  };
288
293
  if (m) {
289
294
  if (e.value.direction === "vertical" || e.value.direction === "both") {
290
- if (W.value > v) {
295
+ if (H.value > v) {
291
296
  x = !0;
292
297
  let e, n = 0, r = c.length - 1;
293
298
  for (; n <= r;) {
@@ -295,11 +300,12 @@ function useVirtualScroll(e) {
295
300
  c[i] > t ? (e = c[i], r = i - 1) : n = i + 1;
296
301
  }
297
302
  if (e !== void 0) {
298
- let t = (i === null ? b.query(e) : e * (i + o)) - W.value;
303
+ let t = (i === null ? b.query(e) : e * (i + o)) - H.value;
304
+ /* v8 ignore else -- @preserve */
299
305
  t < f && (S.y = -(f - t));
300
306
  }
301
307
  }
302
- } else if (e.value.direction === "horizontal" && U.value > _) {
308
+ } else if (e.value.direction === "horizontal" && V.value > _) {
303
309
  x = !0;
304
310
  let e, n = 0, r = c.length - 1;
305
311
  for (; n <= r;) {
@@ -307,7 +313,8 @@ function useVirtualScroll(e) {
307
313
  c[i] > t ? (e = c[i], r = i - 1) : n = i + 1;
308
314
  }
309
315
  if (e !== void 0) {
310
- let t = (i === null ? y.query(e) : e * (i + s)) - U.value;
316
+ let t = (i === null ? y.query(e) : e * (i + s)) - V.value;
317
+ /* v8 ignore else -- @preserve */
311
318
  t < d && (S.x = -(d - t));
312
319
  }
313
320
  }
@@ -331,7 +338,7 @@ function useVirtualScroll(e) {
331
338
  });
332
339
  }
333
340
  return r;
334
- }), ne = computed(() => {
341
+ }), Z = computed(() => {
335
342
  D.value;
336
343
  let t = e.value.columnCount || 0;
337
344
  if (!t) return {
@@ -349,8 +356,8 @@ function useVirtualScroll(e) {
349
356
  padEnd: 0
350
357
  };
351
358
  }
352
- let n = S.findLowerBound(U.value), r = S.query(n), s = n;
353
- for (; s < t && r < U.value + u.value;) r = S.query(++s);
359
+ let n = S.findLowerBound(V.value), r = S.query(n), s = n;
360
+ for (; s < t && r < V.value + u.value;) r = S.query(++s);
354
361
  let c = e.value.ssrRange && !i.value ? 0 : 2, l = Math.max(0, n - c), d = Math.min(t, s + c);
355
362
  return {
356
363
  start: l,
@@ -358,42 +365,42 @@ function useVirtualScroll(e) {
358
365
  padStart: S.query(l),
359
366
  padEnd: S.query(t) - S.query(d)
360
367
  };
361
- }), re = computed(() => {
368
+ }), ne = computed(() => {
362
369
  D.value;
363
- let t = R.value, n = e.value.columnGap || 0, r = 0;
364
- return (e.value.direction === "horizontal" || e.value.direction === "both") && (r = t === null ? y.findLowerBound(U.value) : Math.floor(U.value / (t + n))), {
365
- items: Q.value,
366
- currentIndex: Z.value,
370
+ let t = I.value, n = e.value.columnGap || 0, r = 0;
371
+ return (e.value.direction === "horizontal" || e.value.direction === "both") && (r = t === null ? y.findLowerBound(V.value) : Math.floor(V.value / (t + n))), {
372
+ items: X.value,
373
+ currentIndex: Y.value,
367
374
  currentColIndex: r,
368
375
  scrollOffset: {
369
- x: U.value,
370
- y: W.value
376
+ x: V.value,
377
+ y: H.value
371
378
  },
372
379
  viewportSize: {
373
380
  width: u.value,
374
381
  height: p.value
375
382
  },
376
383
  totalSize: {
377
- width: V.value,
378
- height: H.value
384
+ width: z.value,
385
+ height: B.value
379
386
  },
380
387
  isScrolling: i.value,
381
388
  isProgrammaticScroll: v.value,
382
- range: X.value,
383
- columnRange: ne.value
389
+ range: J.value,
390
+ columnRange: Z.value
384
391
  };
385
- }), ie = () => {
392
+ }), re = () => {
386
393
  v.value = !1, j.value = null;
387
- }, $ = (e) => {
394
+ }, Q = (e) => {
388
395
  let t = e.target;
389
396
  typeof window > "u" || (t === window || t === document ? (n.value = window.scrollX, r.value = window.scrollY) : isScrollableElement(t) && (n.value = t.scrollLeft, r.value = t.scrollTop), i.value ||= (v.value || (j.value = null), !0), clearTimeout(_), _ = setTimeout(() => {
390
397
  i.value = !1, v.value = !1;
391
398
  }, 250));
392
- }, ae = (t) => {
399
+ }, ie = (t) => {
393
400
  let n = !1, r = e.value.gap || 0, i = e.value.columnGap || 0;
394
401
  for (let { index: a, inlineSize: o, blockSize: s, element: c } of t) {
395
- if (I.value) {
396
- if (o > M.value && (M.value = o), s > N.value && (N.value = s), e.value.direction === "horizontal") {
402
+ if (P.value) {
403
+ if (e.value.direction === "horizontal") {
397
404
  let e = y.get(a), t = o + i;
398
405
  Math.abs(e - t) > .5 && (t > e || !k[a]) && (y.update(a, t - e), k[a] = 1, n = !0);
399
406
  }
@@ -402,29 +409,31 @@ function useVirtualScroll(e) {
402
409
  e.value.direction === "both" ? (i > t || !A[a]) && (b.update(a, i - t), A[a] = 1, n = !0) : Math.abs(t - i) > .5 && (i > t || !A[a]) && (b.update(a, i - t), A[a] = 1, n = !0);
403
410
  }
404
411
  }
405
- if (e.value.direction === "both" && c && e.value.columnCount && L.value) {
412
+ if (e.value.direction === "both" && c && e.value.columnCount && F.value) {
406
413
  let t = c.dataset.colIndex === void 0 ? Array.from(c.querySelectorAll("[data-col-index]")) : [c];
407
414
  for (let r of t) {
408
415
  let t = Number.parseInt(r.dataset.colIndex, 10);
416
+ /* v8 ignore else -- @preserve */
409
417
  if (t >= 0 && t < (e.value.columnCount || 0)) {
410
418
  let e = r.offsetWidth, a = S.get(t), o = e + i;
419
+ /* v8 ignore else -- @preserve */
411
420
  (o > a || !O[t]) && (S.update(t, o - a), O[t] = 1, n = !0);
412
421
  }
413
422
  }
414
423
  }
415
424
  }
416
425
  n && D.value++;
417
- }, oe = (e, t, n, r) => {
418
- ae([{
426
+ }, ae = (e, t, n, r) => {
427
+ ie([{
419
428
  index: e,
420
429
  inlineSize: t,
421
430
  blockSize: n,
422
431
  element: r
423
432
  }]);
424
- }, se = () => {
433
+ }, oe = () => {
425
434
  if (j.value && !o.value) {
426
435
  let { rowIndex: e, colIndex: t, options: n } = j.value;
427
- K(e, t, isScrollToIndexOptions(n) ? {
436
+ W(e, t, isScrollToIndexOptions(n) ? {
428
437
  ...n,
429
438
  isCorrection: !0
430
439
  } : {
@@ -433,33 +442,35 @@ function useVirtualScroll(e) {
433
442
  });
434
443
  }
435
444
  };
436
- watch(D, se), watch(i, (e) => {
437
- e || se();
445
+ watch(D, oe), watch(i, (e) => {
446
+ e || oe();
438
447
  });
439
- let ce = null, le = (e) => {
448
+ let $ = null, se = (e) => {
440
449
  if (!e || typeof window > "u") return;
441
450
  let t = e === window ? document : e;
442
- if (t.addEventListener("scroll", $, { passive: !0 }), e === window) {
451
+ if (t.addEventListener("scroll", Q, { passive: !0 }), e === window) {
443
452
  u.value = window.innerWidth, p.value = window.innerHeight, n.value = window.scrollX, r.value = window.scrollY;
444
453
  let e = () => {
445
- u.value = window.innerWidth, p.value = window.innerHeight, Y();
454
+ u.value = window.innerWidth, p.value = window.innerHeight, q();
446
455
  };
447
456
  return window.addEventListener("resize", e), () => {
448
- t.removeEventListener("scroll", $), window.removeEventListener("resize", e);
457
+ t.removeEventListener("scroll", Q), window.removeEventListener("resize", e);
449
458
  };
450
- } else return u.value = e.clientWidth, p.value = e.clientHeight, n.value = e.scrollLeft, r.value = e.scrollTop, ce = new ResizeObserver((t) => {
451
- for (let n of t) n.target === e && (u.value = e.clientWidth, p.value = e.clientHeight, Y());
452
- }), ce.observe(e), () => {
453
- t.removeEventListener("scroll", $), ce?.disconnect();
459
+ } else return u.value = e.clientWidth, p.value = e.clientHeight, n.value = e.scrollLeft, r.value = e.scrollTop, $ = new ResizeObserver((t) => {
460
+ for (let n of t)
461
+ /* v8 ignore else -- @preserve */
462
+ n.target === e && (u.value = e.clientWidth, p.value = e.clientHeight, q());
463
+ }), $.observe(e), () => {
464
+ t.removeEventListener("scroll", Q), $?.disconnect();
454
465
  };
455
- }, ue;
466
+ }, ce;
456
467
  return getCurrentInstance() && (onMounted(() => {
457
468
  l.value = !0, watch(() => e.value.container, (e) => {
458
- ue?.(), ue = le(e || null);
459
- }, { immediate: !0 }), Y(), e.value.ssrRange || e.value.initialScrollIndex !== void 0 ? nextTick(() => {
460
- Y();
469
+ ce?.(), ce = se(e || null);
470
+ }, { immediate: !0 }), q(), e.value.ssrRange || e.value.initialScrollIndex !== void 0 ? nextTick(() => {
471
+ q();
461
472
  let t = e.value.initialScrollIndex === void 0 ? e.value.ssrRange?.start : e.value.initialScrollIndex, n = e.value.initialScrollAlign || "start";
462
- t != null && K(t, e.value.ssrRange?.colStart, {
473
+ t != null && W(t, e.value.ssrRange?.colStart, {
463
474
  align: n,
464
475
  behavior: "auto"
465
476
  }), a.value = !0, o.value = !0, nextTick(() => {
@@ -467,22 +478,22 @@ function useVirtualScroll(e) {
467
478
  });
468
479
  }) : a.value = !0;
469
480
  }), onUnmounted(() => {
470
- ue?.();
481
+ ce?.();
471
482
  })), {
472
- renderedItems: Q,
473
- totalWidth: V,
474
- totalHeight: H,
475
- scrollDetails: re,
476
- scrollToIndex: K,
477
- scrollToOffset: q,
478
- stopProgrammaticScroll: ie,
479
- updateItemSize: oe,
480
- updateItemSizes: ae,
481
- updateHostOffset: Y,
482
- columnRange: ne,
483
- getColumnWidth: G,
483
+ renderedItems: X,
484
+ totalWidth: z,
485
+ totalHeight: B,
486
+ scrollDetails: ne,
487
+ scrollToIndex: W,
488
+ scrollToOffset: G,
489
+ stopProgrammaticScroll: re,
490
+ updateItemSize: ae,
491
+ updateItemSizes: ie,
492
+ updateHostOffset: q,
493
+ columnRange: Z,
494
+ getColumnWidth: U,
484
495
  refresh: () => {
485
- y.resize(0), b.resize(0), S.resize(0), O.fill(0), k.fill(0), A.fill(0), M.value = 0, N.value = 0, J();
496
+ y.resize(0), b.resize(0), S.resize(0), O.fill(0), k.fill(0), A.fill(0), K();
486
497
  },
487
498
  isHydrated: a
488
499
  };
@@ -551,6 +562,7 @@ var _hoisted_1 = {
551
562
  return e === T.value || typeof window < "u" && (e === window || e === null);
552
563
  }), { isHydrated: F, columnRange: I, renderedItems: L, scrollDetails: R, totalHeight: z, totalWidth: B, getColumnWidth: V, scrollToIndex: H, scrollToOffset: U, updateHostOffset: W, updateItemSizes: G, refresh: K, stopProgrammaticScroll: q } = useVirtualScroll(computed(() => {
553
564
  let e = m.scrollPaddingStart, t = m.scrollPaddingEnd, n = typeof e == "object" ? e.x || 0 : m.direction === "horizontal" && e || 0, r = typeof e == "object" ? e.y || 0 : m.direction === "horizontal" ? 0 : e || 0, i = typeof t == "object" ? t.x || 0 : m.direction === "horizontal" && t || 0, a = typeof t == "object" ? t.y || 0 : m.direction === "horizontal" ? 0 : t || 0;
565
+ /* v8 ignore stop -- @preserve */
554
566
  return {
555
567
  items: m.items,
556
568
  itemSize: m.itemSize,
@@ -591,6 +603,7 @@ var _hoisted_1 = {
591
603
  colEnd: e.columnRange.end
592
604
  }), !m.loading && (m.direction !== "horizontal" && e.totalSize.height - (e.scrollOffset.y + e.viewportSize.height) <= m.loadDistance && C("load", "vertical"), m.direction !== "vertical" && e.totalSize.width - (e.scrollOffset.x + e.viewportSize.width) <= m.loadDistance && C("load", "horizontal")));
593
605
  }), watch(F, (e) => {
606
+ /* v8 ignore else -- @preserve */
594
607
  e && C("visibleRangeChange", {
595
608
  start: R.value.range.start,
596
609
  end: R.value.range.end,
@@ -598,6 +611,7 @@ var _hoisted_1 = {
598
611
  colEnd: R.value.columnRange.end
599
612
  });
600
613
  }, { once: !0 });
614
+ /* v8 ignore next 2 -- @preserve */
601
615
  let J = typeof window > "u" ? null : new ResizeObserver(W), Y = typeof window > "u" ? null : new ResizeObserver((e) => {
602
616
  let t = [];
603
617
  for (let n of e) {
@@ -618,6 +632,7 @@ var _hoisted_1 = {
618
632
  });
619
633
  }
620
634
  }
635
+ /* v8 ignore else -- @preserve */
621
636
  t.length > 0 && G(t);
622
637
  }), X = typeof window > "u" ? null : new ResizeObserver(() => {
623
638
  M.value = D.value?.offsetHeight || 0, N.value = O.value?.offsetHeight || 0, W();
@@ -630,33 +645,39 @@ var _hoisted_1 = {
630
645
  let Z = computed(() => L.value[0]?.index);
631
646
  watch(Z, (e, t) => {
632
647
  if (m.direction === "both") {
648
+ /* v8 ignore else -- @preserve */
633
649
  if (t !== void 0) {
634
650
  let e = k.get(t);
635
651
  e && e.querySelectorAll("[data-col-index]").forEach((e) => Y?.unobserve(e));
636
652
  }
637
653
  if (e !== void 0) {
638
654
  let t = k.get(e);
655
+ /* v8 ignore else -- @preserve */
639
656
  t && t.querySelectorAll("[data-col-index]").forEach((e) => Y?.observe(e));
640
657
  }
641
658
  }
642
659
  }, { flush: "post" }), onMounted(() => {
660
+ /* v8 ignore else -- @preserve */
643
661
  T.value && J?.observe(T.value);
644
662
  for (let e of k.values()) Y?.observe(e);
663
+ /* v8 ignore else -- @preserve */
645
664
  if (Z.value !== void 0) {
646
665
  let e = k.get(Z.value);
666
+ /* v8 ignore else -- @preserve */
647
667
  e && e.querySelectorAll("[data-col-index]").forEach((e) => Y?.observe(e));
648
668
  }
649
669
  }), watch([T, E], ([e], [t]) => {
650
670
  t && J?.unobserve(t), e && J?.observe(e);
651
671
  });
652
- function Q(e, t) {
672
+ function ne(e, t) {
653
673
  if (e) k.set(t, e), Y?.observe(e);
654
674
  else {
655
675
  let e = k.get(t);
676
+ /* v8 ignore else -- @preserve */
656
677
  e && (Y?.unobserve(e), k.delete(t));
657
678
  }
658
679
  }
659
- function ne(e) {
680
+ function re(e) {
660
681
  q();
661
682
  let { viewportSize: t, scrollOffset: n } = R.value, r = m.direction !== "vertical", i = m.direction !== "horizontal";
662
683
  if (e.key === "Home") {
@@ -666,7 +687,7 @@ var _hoisted_1 = {
666
687
  if (e.key === "End") {
667
688
  e.preventDefault();
668
689
  let t = m.items.length - 1, n = (m.columnCount || 0) > 0 ? m.columnCount - 1 : 0;
669
- r && i ? H(t, n, "end") : H(0, t, "end");
690
+ r ? i ? H(t, n, "end") : H(0, t, "end") : H(t, 0, "end");
670
691
  return;
671
692
  }
672
693
  if (e.key === "ArrowUp") {
@@ -686,21 +707,21 @@ var _hoisted_1 = {
686
707
  return;
687
708
  }
688
709
  if (e.key === "PageUp") {
689
- e.preventDefault(), U(r ? n.x - t.width : null, i ? n.y - t.height : null);
710
+ e.preventDefault(), U(!i && r ? n.x - t.width : null, i ? n.y - t.height : null);
690
711
  return;
691
712
  }
692
- e.key === "PageDown" && (e.preventDefault(), U(r ? n.x + t.width : null, i ? n.y + t.height : null));
713
+ e.key === "PageDown" && (e.preventDefault(), U(!i && r ? n.x + t.width : null, i ? n.y + t.height : null));
693
714
  }
694
715
  onUnmounted(() => {
695
716
  J?.disconnect(), Y?.disconnect(), X?.disconnect();
696
717
  });
697
- let re = computed(() => {
718
+ let Q = computed(() => {
698
719
  let e = m.container;
699
720
  return e === null || typeof window < "u" && e === window ? !0 : e && typeof e == "object" && "tagName" in e ? e.tagName === "BODY" : !1;
700
- }), ie = computed(() => re.value ? { ...m.direction === "vertical" ? {} : { whiteSpace: "nowrap" } } : m.containerTag === "table" ? { minInlineSize: m.direction === "vertical" ? "100%" : "auto" } : { ...m.direction === "vertical" ? {} : { whiteSpace: "nowrap" } }), $ = computed(() => ({
721
+ }), ie = computed(() => Q.value ? { ...m.direction === "vertical" ? {} : { whiteSpace: "nowrap" } } : m.containerTag === "table" ? { minInlineSize: m.direction === "vertical" ? "100%" : "auto" } : { ...m.direction === "vertical" ? {} : { whiteSpace: "nowrap" } }), ae = computed(() => ({
701
722
  inlineSize: m.direction === "vertical" ? "100%" : `${B.value}px`,
702
723
  blockSize: m.direction === "horizontal" ? "100%" : `${z.value}px`
703
- })), ae = computed(() => {
724
+ })), oe = computed(() => {
704
725
  let e = m.direction === "horizontal";
705
726
  return {
706
727
  display: e ? "inline-block" : "block",
@@ -709,7 +730,7 @@ var _hoisted_1 = {
709
730
  verticalAlign: "top"
710
731
  } : { inlineSize: "100%" }
711
732
  };
712
- }), oe = computed(() => ({
733
+ }), $ = computed(() => ({
713
734
  inlineSize: m.direction === "vertical" ? "1px" : `${B.value}px`,
714
735
  blockSize: m.direction === "horizontal" ? "1px" : `${z.value}px`
715
736
  }));
@@ -730,12 +751,12 @@ var _hoisted_1 = {
730
751
  ref: T,
731
752
  class: normalizeClass(["virtual-scroll-container", [`virtual-scroll--${o.direction}`, {
732
753
  "virtual-scroll--hydrated": unref(F),
733
- "virtual-scroll--window": re.value,
754
+ "virtual-scroll--window": Q.value,
734
755
  "virtual-scroll--table": o.containerTag === "table"
735
756
  }]]),
736
757
  style: normalizeStyle(ie.value),
737
758
  tabindex: "0",
738
- onKeydown: ne,
759
+ onKeydown: re,
739
760
  onWheelPassive: unref(q),
740
761
  onPointerdownPassive: unref(q),
741
762
  onTouchstartPassive: unref(q)
@@ -754,12 +775,12 @@ var _hoisted_1 = {
754
775
  ref_key: "wrapperRef",
755
776
  ref: E,
756
777
  class: "virtual-scroll-wrapper",
757
- style: normalizeStyle($.value)
778
+ style: normalizeStyle(ae.value)
758
779
  }, {
759
780
  default: withCtx(() => [o.containerTag === "table" ? (openBlock(), createBlock(resolveDynamicComponent(o.itemTag), {
760
781
  key: 0,
761
782
  class: "virtual-scroll-spacer",
762
- style: normalizeStyle(oe.value)
783
+ style: normalizeStyle($.value)
763
784
  }, {
764
785
  default: withCtx(() => [...s[0] ||= [createElementVNode("td", { style: {
765
786
  padding: "0",
@@ -770,7 +791,7 @@ var _hoisted_1 = {
770
791
  }, 8, ["style"])) : createCommentVNode("", !0), (openBlock(!0), createElementBlock(Fragment, null, renderList(unref(L), (e) => (openBlock(), createBlock(resolveDynamicComponent(o.itemTag), {
771
792
  key: e.index,
772
793
  ref_for: !0,
773
- ref: (t) => Q(t, e.index),
794
+ ref: (t) => ne(t, e.index),
774
795
  "data-index": e.index,
775
796
  class: normalizeClass(["virtual-scroll-item", {
776
797
  "virtual-scroll--sticky": e.isStickyActive,
@@ -797,7 +818,7 @@ var _hoisted_1 = {
797
818
  o.loading && t.$slots.loading ? (openBlock(), createElementBlock("div", {
798
819
  key: 1,
799
820
  class: "virtual-scroll-loading",
800
- style: normalizeStyle(ae.value)
821
+ style: normalizeStyle(oe.value)
801
822
  }, [renderSlot(t.$slots, "loading", {}, void 0, !0)], 4)) : createCommentVNode("", !0),
802
823
  t.$slots.footer ? (openBlock(), createBlock(resolveDynamicComponent(o.containerTag === "table" ? "tfoot" : "div"), {
803
824
  key: 2,
@@ -818,7 +839,7 @@ var _hoisted_1 = {
818
839
  "onTouchstartPassive"
819
840
  ]));
820
841
  }
821
- }), [["__scopeId", "data-v-8d960026"]]);
842
+ }), [["__scopeId", "data-v-105a0cd5"]]);
822
843
  export { DEFAULT_BUFFER, DEFAULT_COLUMN_WIDTH, DEFAULT_ITEM_SIZE, FenwickTree, VirtualScroll_default as VirtualScroll, getPaddingX, getPaddingY, isElement, isScrollToIndexOptions, isScrollableElement, useVirtualScroll };
823
844
 
824
845
  //# sourceMappingURL=index.js.map