react-window 1.8.11 → 2.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +9 -161
  2. package/dist/react-window.cjs +1 -0
  3. package/dist/react-window.d.ts +217 -0
  4. package/dist/react-window.js +576 -0
  5. package/docs/assets/index-B8YZlUKM.js +67 -0
  6. package/docs/assets/index-BMf3NlnJ.css +1 -0
  7. package/docs/data/addresses.json +23932 -0
  8. package/docs/data/contacts.json +4202 -0
  9. package/docs/data/names.json +1002 -0
  10. package/docs/favicon.svg +16 -0
  11. package/docs/generated/README.md +1 -0
  12. package/docs/generated/code-snippets/CellComponent.json +4 -0
  13. package/docs/generated/code-snippets/FixedHeightList.json +4 -0
  14. package/docs/generated/code-snippets/FixedHeightRowComponent.json +4 -0
  15. package/docs/generated/code-snippets/FlexboxLayout.json +4 -0
  16. package/docs/generated/code-snippets/Grid.json +4 -0
  17. package/docs/generated/code-snippets/ListVariableRowHeights.json +4 -0
  18. package/docs/generated/code-snippets/columnWidth.json +4 -0
  19. package/docs/generated/code-snippets/gridRefClickEventHandler.json +4 -0
  20. package/docs/generated/code-snippets/listRefClickEventHandler.json +4 -0
  21. package/docs/generated/code-snippets/rowHeight.json +4 -0
  22. package/docs/generated/code-snippets/useGridRef.json +4 -0
  23. package/docs/generated/code-snippets/useGridRefImport.json +3 -0
  24. package/docs/generated/code-snippets/useListRef.json +4 -0
  25. package/docs/generated/code-snippets/useListRefImport.json +3 -0
  26. package/docs/generated/js-docs/Grid.json +318 -0
  27. package/docs/generated/js-docs/List.json +266 -0
  28. package/docs/index.html +30 -0
  29. package/docs/og.html +42 -0
  30. package/docs/og.png +0 -0
  31. package/docs/stats.html +4949 -0
  32. package/docs/svgs/checkbox-checked.svg +1 -0
  33. package/docs/svgs/checkbox-indeterminate.svg +1 -0
  34. package/docs/svgs/checkbox-unchecked.svg +1 -0
  35. package/docs/svgs/github.svg +3 -0
  36. package/docs/svgs/npm.svg +1 -0
  37. package/docs/svgs/radio-checked.svg +1 -0
  38. package/docs/svgs/radio-unchecked.svg +1 -0
  39. package/package.json +70 -90
  40. package/LICENSE.md +0 -21
  41. package/dist/index-dev.umd.js +0 -2
  42. package/dist/index-dev.umd.js.map +0 -1
  43. package/dist/index-prod.umd.js +0 -2
  44. package/dist/index-prod.umd.js.map +0 -1
  45. package/dist/index.cjs.js +0 -2087
  46. package/dist/index.cjs.js.flow +0 -3
  47. package/dist/index.cjs.js.map +0 -1
  48. package/dist/index.esm.js +0 -2076
  49. package/dist/index.esm.js.flow +0 -3
  50. package/dist/index.esm.js.map +0 -1
  51. package/src/FixedSizeGrid.js +0 -244
  52. package/src/FixedSizeList.js +0 -137
  53. package/src/VariableSizeGrid.js +0 -507
  54. package/src/VariableSizeList.js +0 -317
  55. package/src/areEqual.js +0 -18
  56. package/src/createGridComponent.js +0 -919
  57. package/src/createListComponent.js +0 -745
  58. package/src/domHelpers.js +0 -72
  59. package/src/index.js +0 -9
  60. package/src/shallowDiffers.js +0 -17
  61. package/src/shouldComponentUpdate.js +0 -16
  62. package/src/timer.js +0 -37
@@ -0,0 +1,576 @@
1
+ import { jsx as j } from "react/jsx-runtime";
2
+ import { useLayoutEffect as J, useEffect as W, useMemo as E, useState as P, useCallback as L, memo as V, useImperativeHandle as U, createElement as F, useRef as Y } from "react";
3
+ function B(t) {
4
+ if (t !== void 0)
5
+ switch (typeof t) {
6
+ case "number":
7
+ return t;
8
+ case "string": {
9
+ if (t.endsWith("px"))
10
+ return parseFloat(t);
11
+ break;
12
+ }
13
+ }
14
+ }
15
+ const q = typeof window < "u" ? J : W;
16
+ function K({
17
+ box: t,
18
+ defaultHeight: r,
19
+ defaultWidth: n,
20
+ disabled: s,
21
+ element: e,
22
+ mode: c,
23
+ style: l
24
+ }) {
25
+ const { styleHeight: f, styleWidth: o } = E(
26
+ () => ({
27
+ styleHeight: B(l?.height),
28
+ styleWidth: B(l?.width)
29
+ }),
30
+ [l?.height, l?.width]
31
+ ), [u, a] = P({
32
+ height: r,
33
+ width: n
34
+ }), O = s || c === "only-height" && f !== void 0 || c === "only-width" && o !== void 0 || f !== void 0 && o !== void 0;
35
+ return q(() => {
36
+ if (e === null || O)
37
+ return;
38
+ const b = new ResizeObserver((m) => {
39
+ for (const d of m) {
40
+ const { contentRect: w, target: g } = d;
41
+ e === g && a((v) => v.height === w.height && v.width === w.width ? v : {
42
+ height: w.height,
43
+ width: w.width
44
+ });
45
+ }
46
+ });
47
+ return b.observe(e, { box: t }), () => {
48
+ b?.unobserve(e);
49
+ };
50
+ }, [t, O, e, f, o]), E(
51
+ () => ({
52
+ height: f ?? u.height,
53
+ width: o ?? u.width
54
+ }),
55
+ [u, f, o]
56
+ );
57
+ }
58
+ function $(t, r = "Assertion error") {
59
+ if (!t)
60
+ throw console.error(r), Error(r);
61
+ }
62
+ function Q({
63
+ cachedBounds: t,
64
+ itemCount: r,
65
+ itemSize: n
66
+ }) {
67
+ if (typeof n == "number")
68
+ return r * n;
69
+ if (t.size > 0) {
70
+ const s = t.get(t.size - 1);
71
+ $(s !== void 0, "Unexpected bounds cache miss");
72
+ const e = (s.scrollOffset + s.size) / t.size;
73
+ return r * e;
74
+ } else
75
+ return 0;
76
+ }
77
+ function X({
78
+ align: t,
79
+ cachedBounds: r,
80
+ index: n,
81
+ itemCount: s,
82
+ containerScrollOffset: e,
83
+ containerSize: c
84
+ }) {
85
+ const l = r.get(s - 1).scrollOffset, f = l + l - c, o = Math.max(
86
+ 0,
87
+ r.get(n + 1).scrollOffset - c
88
+ ), u = Math.min(
89
+ l,
90
+ r.get(n).scrollOffset
91
+ );
92
+ switch (t === "smart" && (e >= o && e <= u ? t = "auto" : t = "center"), t) {
93
+ case "start":
94
+ return Math.min(f, u);
95
+ case "end":
96
+ return o;
97
+ case "center": {
98
+ const a = Math.round(
99
+ o + (u - o) / 2
100
+ );
101
+ return a < Math.ceil(c / 2) ? 0 : a > f ? f : a;
102
+ }
103
+ case "auto":
104
+ default:
105
+ return e >= o && e <= u ? e : e < o ? o : u;
106
+ }
107
+ }
108
+ function Z({
109
+ cachedBounds: t,
110
+ containerScrollOffset: r,
111
+ containerSize: n,
112
+ itemCount: s,
113
+ overscanCount: e
114
+ }) {
115
+ const c = s - 1;
116
+ let l = 0, f = -1, o = 0;
117
+ for (; o < c; ) {
118
+ const u = t.get(o);
119
+ if (u.scrollOffset + u.size > r)
120
+ break;
121
+ o++;
122
+ }
123
+ for (l = o, l = Math.max(0, l - e); o < c; ) {
124
+ const u = t.get(o);
125
+ if (u.scrollOffset + u.size >= r + n)
126
+ break;
127
+ o++;
128
+ }
129
+ return f = Math.min(c, o), f = Math.min(s - 1, f + e), l < 0 ? [0, -1] : [l, f];
130
+ }
131
+ function _({
132
+ itemCount: t,
133
+ itemProps: r,
134
+ itemSize: n
135
+ }) {
136
+ const s = /* @__PURE__ */ new Map();
137
+ return {
138
+ get(e) {
139
+ for ($(e < t, `Invalid index ${e}`); s.size - 1 < e; ) {
140
+ const l = s.size, f = typeof n == "number" ? n : n(l, r);
141
+ if (l === 0)
142
+ s.set(l, {
143
+ size: f,
144
+ scrollOffset: 0
145
+ });
146
+ else {
147
+ const o = s.get(l - 1);
148
+ $(
149
+ o !== void 0,
150
+ `Unexpected bounds cache miss for index ${e}`
151
+ ), s.set(l, {
152
+ scrollOffset: o.scrollOffset + o.size,
153
+ size: f
154
+ });
155
+ }
156
+ }
157
+ const c = s.get(e);
158
+ return $(
159
+ c !== void 0,
160
+ `Unexpected bounds cache miss for index ${e}`
161
+ ), c;
162
+ },
163
+ set(e, c) {
164
+ s.set(e, c);
165
+ },
166
+ get size() {
167
+ return s.size;
168
+ }
169
+ };
170
+ }
171
+ function N({
172
+ itemCount: t,
173
+ itemProps: r,
174
+ itemSize: n
175
+ }) {
176
+ return E(
177
+ () => _({
178
+ itemCount: t,
179
+ itemProps: r,
180
+ itemSize: n
181
+ }),
182
+ [t, r, n]
183
+ );
184
+ }
185
+ function R({
186
+ containerElement: t,
187
+ containerStyle: r,
188
+ defaultContainerSize: n = 0,
189
+ direction: s,
190
+ itemCount: e,
191
+ itemProps: c,
192
+ itemSize: l,
193
+ overscanCount: f
194
+ }) {
195
+ const [[o, u], a] = P([0, -1]), { height: O = n, width: b = n } = K({
196
+ defaultHeight: s === "vertical" ? n : void 0,
197
+ defaultWidth: s === "horizontal" ? n : void 0,
198
+ element: t,
199
+ mode: s === "vertical" ? "only-height" : "only-width",
200
+ style: r
201
+ }), m = s === "vertical" ? O : b, d = N({
202
+ itemCount: e,
203
+ itemProps: c,
204
+ itemSize: l
205
+ }), w = L(
206
+ (i) => d.get(i),
207
+ [d]
208
+ ), g = L(
209
+ () => Q({
210
+ cachedBounds: d,
211
+ itemCount: e,
212
+ itemSize: l
213
+ }),
214
+ [d, e, l]
215
+ ), v = L(
216
+ (i) => Z({
217
+ cachedBounds: d,
218
+ containerScrollOffset: i,
219
+ containerSize: m,
220
+ itemCount: e,
221
+ overscanCount: f
222
+ }),
223
+ [d, m, e, f]
224
+ );
225
+ q(() => {
226
+ a(v(0));
227
+ }, [v]);
228
+ const p = L(
229
+ ({
230
+ align: i = "auto",
231
+ behavior: x = "auto",
232
+ containerScrollOffset: z,
233
+ index: I
234
+ }) => {
235
+ const h = X({
236
+ align: i,
237
+ cachedBounds: d,
238
+ containerScrollOffset: z,
239
+ containerSize: m,
240
+ index: I,
241
+ itemCount: e
242
+ });
243
+ s === "horizontal" ? t?.scrollTo({
244
+ left: h,
245
+ behavior: x || void 0
246
+ }) : t?.scrollTo({
247
+ behavior: x || void 0,
248
+ top: h
249
+ });
250
+ },
251
+ [d, t, m, s, e]
252
+ );
253
+ return {
254
+ getCellBounds: w,
255
+ getEstimatedHeight: g,
256
+ onScroll: () => {
257
+ const i = v(
258
+ (s === "vertical" ? t?.scrollTop : t?.scrollLeft) ?? 0
259
+ );
260
+ (i[0] !== o || i[1] !== u) && a(i);
261
+ },
262
+ scrollToIndex: p,
263
+ startIndex: o,
264
+ stopIndex: u
265
+ };
266
+ }
267
+ function A(t) {
268
+ return E(() => t, Object.values(t));
269
+ }
270
+ function G(t, r) {
271
+ if (t === r)
272
+ return !0;
273
+ if (!!t != !!r || ($(t !== void 0), $(r !== void 0), Object.keys(t).length !== Object.keys(r).length))
274
+ return !1;
275
+ for (const n in t)
276
+ if (!Object.is(r[n], t[n]))
277
+ return !1;
278
+ return !0;
279
+ }
280
+ function D(t, r) {
281
+ const { style: n, ...s } = t, { style: e, ...c } = r;
282
+ return G(n, e) && G(s, c);
283
+ }
284
+ function et({
285
+ cellComponent: t,
286
+ cellProps: r,
287
+ className: n,
288
+ columnCount: s,
289
+ columnWidth: e,
290
+ defaultHeight: c = 0,
291
+ defaultWidth: l = 0,
292
+ gridRef: f,
293
+ onCellsRendered: o,
294
+ overscanCount: u = 3,
295
+ rowCount: a,
296
+ rowHeight: O,
297
+ style: b,
298
+ ...m
299
+ }) {
300
+ const d = A(r), w = E(
301
+ () => V(t, D),
302
+ [t]
303
+ ), [g, v] = P(null), p = R({
304
+ containerElement: g,
305
+ defaultContainerSize: l,
306
+ direction: "horizontal",
307
+ itemCount: s,
308
+ itemProps: d,
309
+ itemSize: e,
310
+ overscanCount: u
311
+ }), i = R({
312
+ containerElement: g,
313
+ defaultContainerSize: c,
314
+ direction: "vertical",
315
+ itemCount: a,
316
+ itemProps: d,
317
+ itemSize: O,
318
+ overscanCount: u
319
+ }), { startIndex: x, stopIndex: z } = p, { startIndex: I, stopIndex: h } = i;
320
+ U(
321
+ f,
322
+ () => ({
323
+ get element() {
324
+ return g;
325
+ },
326
+ scrollToCell({
327
+ behavior: S = "auto",
328
+ columnAlign: y = "auto",
329
+ columnIndex: T,
330
+ rowAlign: H = "auto",
331
+ rowIndex: k
332
+ }) {
333
+ i?.scrollToIndex({
334
+ align: H,
335
+ behavior: S,
336
+ containerScrollOffset: g?.scrollTop ?? 0,
337
+ index: k
338
+ }), p?.scrollToIndex({
339
+ align: y,
340
+ behavior: S,
341
+ containerScrollOffset: g?.scrollLeft ?? 0,
342
+ index: T
343
+ });
344
+ },
345
+ scrollToColumn({
346
+ align: S = "auto",
347
+ behavior: y = "auto",
348
+ index: T
349
+ }) {
350
+ p?.scrollToIndex({
351
+ align: S,
352
+ behavior: y,
353
+ containerScrollOffset: g?.scrollLeft ?? 0,
354
+ index: T
355
+ });
356
+ },
357
+ scrollToRow({
358
+ align: S = "auto",
359
+ behavior: y = "auto",
360
+ index: T
361
+ }) {
362
+ i?.scrollToIndex({
363
+ align: S,
364
+ behavior: y,
365
+ containerScrollOffset: g?.scrollTop ?? 0,
366
+ index: T
367
+ });
368
+ }
369
+ }),
370
+ [p, g, i]
371
+ ), W(() => {
372
+ x >= 0 && z >= 0 && I >= 0 && h >= 0 && o && o({
373
+ columnStartIndex: x,
374
+ columnStopIndex: z,
375
+ rowStartIndex: I,
376
+ rowStopIndex: h
377
+ });
378
+ }, [
379
+ o,
380
+ x,
381
+ z,
382
+ I,
383
+ h
384
+ ]);
385
+ const M = E(() => {
386
+ const S = [];
387
+ if (p && s > 0 && i && a > 0)
388
+ for (let y = I; y <= h; y++) {
389
+ const T = i.getCellBounds(y);
390
+ for (let H = x; H <= z; H++) {
391
+ const k = p.getCellBounds(H);
392
+ S.push(
393
+ /* @__PURE__ */ F(
394
+ w,
395
+ {
396
+ ...d,
397
+ columnIndex: H,
398
+ key: `${y}-${H}`,
399
+ rowIndex: y,
400
+ style: {
401
+ position: "absolute",
402
+ left: 0,
403
+ transform: `translate(${k.scrollOffset}px, ${T.scrollOffset}px)`,
404
+ height: T.size,
405
+ width: k.size
406
+ }
407
+ }
408
+ )
409
+ );
410
+ }
411
+ }
412
+ return S;
413
+ }, [
414
+ w,
415
+ d,
416
+ s,
417
+ x,
418
+ z,
419
+ p,
420
+ a,
421
+ I,
422
+ h,
423
+ i
424
+ ]);
425
+ return /* @__PURE__ */ j(
426
+ "div",
427
+ {
428
+ role: "grid",
429
+ ...m,
430
+ className: n,
431
+ onScroll: () => {
432
+ p.onScroll(), i.onScroll();
433
+ },
434
+ ref: v,
435
+ style: {
436
+ ...b,
437
+ maxHeight: "100%",
438
+ maxWidth: "100%",
439
+ flexGrow: 1,
440
+ overflow: "auto"
441
+ },
442
+ children: /* @__PURE__ */ j(
443
+ "div",
444
+ {
445
+ className: n,
446
+ style: {
447
+ position: "relative",
448
+ height: i?.getEstimatedHeight(),
449
+ width: p?.getEstimatedHeight()
450
+ },
451
+ children: M
452
+ }
453
+ )
454
+ }
455
+ );
456
+ }
457
+ const st = Y;
458
+ function ot({
459
+ className: t,
460
+ defaultHeight: r = 0,
461
+ listRef: n,
462
+ onRowsRendered: s,
463
+ overscanCount: e = 3,
464
+ rowComponent: c,
465
+ rowCount: l,
466
+ rowHeight: f,
467
+ rowProps: o,
468
+ style: u,
469
+ ...a
470
+ }) {
471
+ const O = A(o), b = E(
472
+ () => V(c, D),
473
+ [c]
474
+ ), [m, d] = P(null), {
475
+ getCellBounds: w,
476
+ getEstimatedHeight: g,
477
+ onScroll: v,
478
+ scrollToIndex: p,
479
+ startIndex: i,
480
+ stopIndex: x
481
+ } = R({
482
+ containerElement: m,
483
+ defaultContainerSize: r,
484
+ direction: "vertical",
485
+ itemCount: l,
486
+ itemProps: O,
487
+ itemSize: f,
488
+ overscanCount: e
489
+ });
490
+ U(
491
+ n,
492
+ () => ({
493
+ get element() {
494
+ return m;
495
+ },
496
+ scrollToRow({
497
+ align: I = "auto",
498
+ behavior: h = "auto",
499
+ index: M
500
+ }) {
501
+ p({
502
+ align: I,
503
+ behavior: h,
504
+ containerScrollOffset: m?.scrollTop ?? 0,
505
+ index: M
506
+ });
507
+ }
508
+ }),
509
+ [m, p]
510
+ ), W(() => {
511
+ i >= 0 && x >= 0 && s && s({
512
+ startIndex: i,
513
+ stopIndex: x
514
+ });
515
+ }, [s, i, x]);
516
+ const z = E(() => {
517
+ const I = [];
518
+ if (l > 0)
519
+ for (let h = i; h <= x; h++) {
520
+ const M = w(h);
521
+ I.push(
522
+ /* @__PURE__ */ F(
523
+ b,
524
+ {
525
+ ...O,
526
+ key: h,
527
+ index: h,
528
+ style: {
529
+ position: "absolute",
530
+ left: 0,
531
+ transform: `translateY(${M.scrollOffset}px)`,
532
+ height: M.size,
533
+ width: "100%"
534
+ }
535
+ }
536
+ )
537
+ );
538
+ }
539
+ return I;
540
+ }, [b, w, l, O, i, x]);
541
+ return /* @__PURE__ */ j(
542
+ "div",
543
+ {
544
+ role: "list",
545
+ ...a,
546
+ className: t,
547
+ onScroll: v,
548
+ ref: d,
549
+ style: {
550
+ ...u,
551
+ maxHeight: "100%",
552
+ flexGrow: 1,
553
+ overflowY: "auto"
554
+ },
555
+ children: /* @__PURE__ */ j(
556
+ "div",
557
+ {
558
+ className: t,
559
+ style: {
560
+ height: g(),
561
+ position: "relative",
562
+ width: "100%"
563
+ },
564
+ children: z
565
+ }
566
+ )
567
+ }
568
+ );
569
+ }
570
+ const rt = Y;
571
+ export {
572
+ et as Grid,
573
+ ot as List,
574
+ st as useGridRef,
575
+ rt as useListRef
576
+ };