react-virtual-renderer 1.1.1 → 1.1.3
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/components/VirtualGrid.d.ts.map +1 -1
- package/dist/components/VirtualGrid.js +10 -9
- package/dist/components/VirtualGrid.js.map +1 -1
- package/dist/core/MeasurementSystem.d.ts +54 -6
- package/dist/core/MeasurementSystem.d.ts.map +1 -1
- package/dist/core/MeasurementSystem.js +113 -9
- package/dist/core/MeasurementSystem.js.map +1 -1
- package/dist/core/VirtualizationEngine.d.ts +12 -0
- package/dist/core/VirtualizationEngine.d.ts.map +1 -1
- package/dist/core/VirtualizationEngine.js +44 -1
- package/dist/core/VirtualizationEngine.js.map +1 -1
- package/dist/hooks/useInfiniteScroll.d.ts +8 -9
- package/dist/hooks/useInfiniteScroll.d.ts.map +1 -1
- package/dist/hooks/useInfiniteScroll.js +26 -17
- package/dist/hooks/useInfiniteScroll.js.map +1 -1
- package/dist/hooks/useVirtualList.d.ts +82 -4
- package/dist/hooks/useVirtualList.d.ts.map +1 -1
- package/dist/hooks/useVirtualList.js +220 -92
- package/dist/hooks/useVirtualList.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualGrid.d.ts","sourceRoot":"","sources":["../../src/components/VirtualGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,gBAAgB,EAAiC,MAAM,UAAU,CAAC;AAE3E,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"VirtualGrid.d.ts","sourceRoot":"","sources":["../../src/components/VirtualGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,gBAAgB,EAAiC,MAAM,UAAU,CAAC;AAE3E,eAAO,MAAM,WAAW,8FAqTvB,CAAC"}
|
|
@@ -42,18 +42,19 @@ export const VirtualGrid = forwardRef(({ items, renderItem, itemKey, height = 60
|
|
|
42
42
|
}
|
|
43
43
|
return Math.max(1, Number(columnCount));
|
|
44
44
|
}, [columnCount, containerWidth, gap]);
|
|
45
|
-
// ✅ FIX 5: Proper column width calculation
|
|
46
45
|
const colWidth = useMemo(() => {
|
|
47
46
|
if (typeof columnWidth === "number") {
|
|
48
47
|
return columnWidth;
|
|
49
48
|
}
|
|
50
|
-
if (columnWidth && typeof columnWidth === "function") {
|
|
51
|
-
return columnWidth(0);
|
|
52
|
-
}
|
|
53
|
-
// Calculate: (containerWidth - totalGaps) / numberOfColumns
|
|
54
49
|
const totalGapWidth = gap * Math.max(0, cols - 1);
|
|
55
|
-
return Math.max(
|
|
56
|
-
|
|
50
|
+
return Math.max(0, (containerWidth - totalGapWidth) /
|
|
51
|
+
cols);
|
|
52
|
+
}, [
|
|
53
|
+
containerWidth,
|
|
54
|
+
cols,
|
|
55
|
+
gap,
|
|
56
|
+
columnWidth,
|
|
57
|
+
]);
|
|
57
58
|
// ✅ FIX 6: Improved position calculation for masonry AND grid
|
|
58
59
|
const positions = useMemo(() => {
|
|
59
60
|
if (!isReady)
|
|
@@ -163,8 +164,8 @@ export const VirtualGrid = forwardRef(({ items, renderItem, itemKey, height = 60
|
|
|
163
164
|
};
|
|
164
165
|
const innerStyleComputed = {
|
|
165
166
|
position: "relative",
|
|
166
|
-
height: totalHeight || 1,
|
|
167
|
-
width:
|
|
167
|
+
height: totalHeight || 1,
|
|
168
|
+
width: "100%",
|
|
168
169
|
...innerStyle,
|
|
169
170
|
};
|
|
170
171
|
// ✅ FIX 12: Complete render logic
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualGrid.js","sourceRoot":"","sources":["../../src/components/VirtualGrid.tsx"],"names":[],"mappings":";AAAA,OAAc,EACV,UAAU,EACV,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,mBAAmB,EACnB,WAAW,GACd,MAAM,OAAO,CAAC;AAIf,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CACjC,CACI,EACI,KAAK,EACL,UAAU,EACV,OAAO,EACP,MAAM,GAAG,GAAG,EACZ,KAAK,GAAG,MAAM,EACd,WAAW,GAAG,CAAC,EACf,SAAS,GAAG,GAAG,EACf,WAAW,EACX,MAAM,GAAG,MAAM,EACf,QAAQ,GAAG,CAAC,EACZ,GAAG,GAAG,EAAE,EACR,QAAQ,EACR,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,cAAc,GACjB,EACD,GAAG,EACL,EAAE;IACA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAClD,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAyB,CAAC,CAAC;IAEvE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExD,MAAM,aAAa,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAE1D,iDAAiD;IACjD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE,OAAO;QAElC,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;gBACtC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACZ,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,sCAAsC;IACtC,SAAS,CAAC,GAAG,EAAE;QACX,OAAO,GAAG,EAAE;YACR,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;gBACxB,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;QACL,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,8BAA8B;IAC9B,MAAM,OAAO,GAAG,cAAc,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvD,8CAA8C;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;QACtB,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,GAAG,CAAC;YACxB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CACnD,CAAC;YACF,OAAO,cAAc,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5C,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvC,
|
|
1
|
+
{"version":3,"file":"VirtualGrid.js","sourceRoot":"","sources":["../../src/components/VirtualGrid.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,54 @@
|
|
|
1
1
|
export declare class MeasurementSystem {
|
|
2
2
|
private resizeObserver;
|
|
3
3
|
private measurements;
|
|
4
|
+
/**
|
|
5
|
+
* NEW (additive): separate cache for width measurements, used
|
|
6
|
+
* only when an element is observed in 'horizontal' axis mode.
|
|
7
|
+
* Existing height-only consumers never populate or read this.
|
|
8
|
+
*/
|
|
9
|
+
private widthMeasurements;
|
|
4
10
|
private observedElements;
|
|
11
|
+
/**
|
|
12
|
+
* NEW (additive): tracks which axis each observed element
|
|
13
|
+
* should report on. Defaults to 'height' to preserve existing
|
|
14
|
+
* behavior for every caller that doesn't pass an axis.
|
|
15
|
+
*/
|
|
16
|
+
private observedAxis;
|
|
5
17
|
private pendingUpdates;
|
|
18
|
+
/**
|
|
19
|
+
* NEW (additive): pending width updates, flushed alongside
|
|
20
|
+
* height updates on the same RAF batch.
|
|
21
|
+
*/
|
|
22
|
+
private pendingWidthUpdates;
|
|
6
23
|
private rafId;
|
|
7
24
|
private onMeasure;
|
|
25
|
+
/**
|
|
26
|
+
* NEW (additive): optional width callback. If not provided,
|
|
27
|
+
* width measurements are still tracked internally (available
|
|
28
|
+
* via getWidthMeasurement) but no callback fires - existing
|
|
29
|
+
* callers that only pass onMeasure are unaffected.
|
|
30
|
+
*/
|
|
31
|
+
private onMeasureWidth;
|
|
8
32
|
constructor();
|
|
9
33
|
/**
|
|
10
|
-
* Start measuring container
|
|
34
|
+
* Start measuring container.
|
|
35
|
+
*
|
|
36
|
+
* `onMeasureWidth` is optional and additive: existing callers
|
|
37
|
+
* that only pass `onMeasure` keep working exactly as before
|
|
38
|
+
* (height-only). Pass `onMeasureWidth` to also receive width
|
|
39
|
+
* updates for elements observed in 'width' axis mode.
|
|
11
40
|
*/
|
|
12
|
-
startMeasuring(container: HTMLElement, onMeasure: (index: number, size: number) => void): void;
|
|
41
|
+
startMeasuring(container: HTMLElement, onMeasure: (index: number, size: number) => void, onMeasureWidth?: (index: number, size: number) => void): void;
|
|
13
42
|
/**
|
|
14
|
-
* Observe item
|
|
43
|
+
* Observe item.
|
|
44
|
+
*
|
|
45
|
+
* `axis` is optional and additive, defaulting to 'height' so
|
|
46
|
+
* every existing call site (which never passes a third arg)
|
|
47
|
+
* behaves exactly as before. Pass axis='width' for elements in
|
|
48
|
+
* a horizontal-scrolling list so contentRect.width is measured
|
|
49
|
+
* instead of contentRect.height.
|
|
15
50
|
*/
|
|
16
|
-
observeItem(index: number, element: HTMLElement): void;
|
|
51
|
+
observeItem(index: number, element: HTMLElement, axis?: 'height' | 'width'): void;
|
|
17
52
|
/**
|
|
18
53
|
* Unobserve item
|
|
19
54
|
*/
|
|
@@ -27,15 +62,28 @@ export declare class MeasurementSystem {
|
|
|
27
62
|
*/
|
|
28
63
|
private flushPendingUpdates;
|
|
29
64
|
/**
|
|
30
|
-
* Fallback measurement
|
|
65
|
+
* Fallback measurement.
|
|
66
|
+
*
|
|
67
|
+
* `axis` is optional and additive, defaulting to 'height' to
|
|
68
|
+
* preserve existing behavior for all current call sites.
|
|
31
69
|
*/
|
|
32
|
-
syncMeasure(index: number, element: HTMLElement): void;
|
|
70
|
+
syncMeasure(index: number, element: HTMLElement, axis?: 'height' | 'width'): void;
|
|
33
71
|
/**
|
|
34
72
|
* Preserve measurements
|
|
35
73
|
*/
|
|
36
74
|
stopMeasuring(): void;
|
|
37
75
|
getMeasurement(index: number): number | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* NEW (additive): mirrors getMeasurement() but for the width
|
|
78
|
+
* cache. Returns undefined for any index never observed in
|
|
79
|
+
* 'width' axis mode.
|
|
80
|
+
*/
|
|
81
|
+
getWidthMeasurement(index: number): number | undefined;
|
|
38
82
|
getAllMeasurements(): Map<number, number>;
|
|
83
|
+
/**
|
|
84
|
+
* NEW (additive): mirrors getAllMeasurements() for widths.
|
|
85
|
+
*/
|
|
86
|
+
getAllWidthMeasurements(): Map<number, number>;
|
|
39
87
|
clearPending(): void;
|
|
40
88
|
/**
|
|
41
89
|
* Explicit cache clear
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeasurementSystem.d.ts","sourceRoot":"","sources":["../../src/core/MeasurementSystem.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,cAAc,CAA+B;IAErD,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,gBAAgB,CACe;IAEvC,OAAO,CAAC,cAAc,CACQ;IAE9B,OAAO,CAAC,KAAK,CAAuB;IAEpC,OAAO,CAAC,SAAS,CAEC;;IAclB
|
|
1
|
+
{"version":3,"file":"MeasurementSystem.d.ts","sourceRoot":"","sources":["../../src/core/MeasurementSystem.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,cAAc,CAA+B;IAErD,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAA6B;IAEtD,OAAO,CAAC,gBAAgB,CACe;IAEvC;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAC+B;IAEnD,OAAO,CAAC,cAAc,CACQ;IAE9B;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CACG;IAE9B,OAAO,CAAC,KAAK,CAAuB;IAEpC,OAAO,CAAC,SAAS,CAEC;IAElB;;;;;OAKG;IACH,OAAO,CAAC,cAAc,CAEJ;;IAclB;;;;;;;OAOG;IACH,cAAc,CACV,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,CACP,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,KACX,IAAI,EACT,cAAc,CAAC,EAAE,CACb,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,KACX,IAAI,GACV,IAAI;IA6BP;;;;;;;;OAQG;IACH,WAAW,CACP,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,WAAW,EACpB,IAAI,GAAE,QAAQ,GAAG,OAAkB,GACpC,IAAI;IAsBP;;OAEG;IACH,aAAa,CACT,OAAO,EAAE,WAAW,GACrB,IAAI;IAYP;;OAEG;IACH,OAAO,CAAC,YAAY,CAkElB;IAEF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiC3B;;;;;OAKG;IACH,WAAW,CACP,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,WAAW,EACpB,IAAI,GAAE,QAAQ,GAAG,OAAkB,GACpC,IAAI;IAwCP;;OAEG;IACH,aAAa,IAAI,IAAI;IAarB,cAAc,CACV,KAAK,EAAE,MAAM,GACd,MAAM,GAAG,SAAS;IAMrB;;;;OAIG;IACH,mBAAmB,CACf,KAAK,EAAE,MAAM,GACd,MAAM,GAAG,SAAS;IAIrB,kBAAkB,IAAI,GAAG,CACrB,MAAM,EACN,MAAM,CACT;IAMD;;OAEG;IACH,uBAAuB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAI9C,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAKzB,OAAO,IAAI,IAAI;CAgBlB"}
|
|
@@ -12,18 +12,50 @@ export class MeasurementSystem {
|
|
|
12
12
|
writable: true,
|
|
13
13
|
value: new Map()
|
|
14
14
|
});
|
|
15
|
+
/**
|
|
16
|
+
* NEW (additive): separate cache for width measurements, used
|
|
17
|
+
* only when an element is observed in 'horizontal' axis mode.
|
|
18
|
+
* Existing height-only consumers never populate or read this.
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(this, "widthMeasurements", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true,
|
|
24
|
+
value: new Map()
|
|
25
|
+
});
|
|
15
26
|
Object.defineProperty(this, "observedElements", {
|
|
16
27
|
enumerable: true,
|
|
17
28
|
configurable: true,
|
|
18
29
|
writable: true,
|
|
19
30
|
value: new WeakMap()
|
|
20
31
|
});
|
|
32
|
+
/**
|
|
33
|
+
* NEW (additive): tracks which axis each observed element
|
|
34
|
+
* should report on. Defaults to 'height' to preserve existing
|
|
35
|
+
* behavior for every caller that doesn't pass an axis.
|
|
36
|
+
*/
|
|
37
|
+
Object.defineProperty(this, "observedAxis", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
writable: true,
|
|
41
|
+
value: new WeakMap()
|
|
42
|
+
});
|
|
21
43
|
Object.defineProperty(this, "pendingUpdates", {
|
|
22
44
|
enumerable: true,
|
|
23
45
|
configurable: true,
|
|
24
46
|
writable: true,
|
|
25
47
|
value: new Map()
|
|
26
48
|
});
|
|
49
|
+
/**
|
|
50
|
+
* NEW (additive): pending width updates, flushed alongside
|
|
51
|
+
* height updates on the same RAF batch.
|
|
52
|
+
*/
|
|
53
|
+
Object.defineProperty(this, "pendingWidthUpdates", {
|
|
54
|
+
enumerable: true,
|
|
55
|
+
configurable: true,
|
|
56
|
+
writable: true,
|
|
57
|
+
value: new Map()
|
|
58
|
+
});
|
|
27
59
|
Object.defineProperty(this, "rafId", {
|
|
28
60
|
enumerable: true,
|
|
29
61
|
configurable: true,
|
|
@@ -36,6 +68,18 @@ export class MeasurementSystem {
|
|
|
36
68
|
writable: true,
|
|
37
69
|
value: null
|
|
38
70
|
});
|
|
71
|
+
/**
|
|
72
|
+
* NEW (additive): optional width callback. If not provided,
|
|
73
|
+
* width measurements are still tracked internally (available
|
|
74
|
+
* via getWidthMeasurement) but no callback fires - existing
|
|
75
|
+
* callers that only pass onMeasure are unaffected.
|
|
76
|
+
*/
|
|
77
|
+
Object.defineProperty(this, "onMeasureWidth", {
|
|
78
|
+
enumerable: true,
|
|
79
|
+
configurable: true,
|
|
80
|
+
writable: true,
|
|
81
|
+
value: null
|
|
82
|
+
});
|
|
39
83
|
/**
|
|
40
84
|
* ResizeObserver callback
|
|
41
85
|
*/
|
|
@@ -50,6 +94,16 @@ export class MeasurementSystem {
|
|
|
50
94
|
if (index === undefined) {
|
|
51
95
|
continue;
|
|
52
96
|
}
|
|
97
|
+
const axis = this.observedAxis.get(element) ?? 'height';
|
|
98
|
+
if (axis === 'width') {
|
|
99
|
+
const widthSize = Math.round(entry.contentRect.width);
|
|
100
|
+
if (this.widthMeasurements.get(index) !==
|
|
101
|
+
widthSize) {
|
|
102
|
+
this.widthMeasurements.set(index, widthSize);
|
|
103
|
+
this.pendingWidthUpdates.set(index, widthSize);
|
|
104
|
+
}
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
53
107
|
const size = Math.round(entry.contentRect.height);
|
|
54
108
|
if (this.measurements.get(index) === size) {
|
|
55
109
|
continue;
|
|
@@ -67,10 +121,16 @@ export class MeasurementSystem {
|
|
|
67
121
|
}
|
|
68
122
|
}
|
|
69
123
|
/**
|
|
70
|
-
* Start measuring container
|
|
124
|
+
* Start measuring container.
|
|
125
|
+
*
|
|
126
|
+
* `onMeasureWidth` is optional and additive: existing callers
|
|
127
|
+
* that only pass `onMeasure` keep working exactly as before
|
|
128
|
+
* (height-only). Pass `onMeasureWidth` to also receive width
|
|
129
|
+
* updates for elements observed in 'width' axis mode.
|
|
71
130
|
*/
|
|
72
|
-
startMeasuring(container, onMeasure) {
|
|
131
|
+
startMeasuring(container, onMeasure, onMeasureWidth) {
|
|
73
132
|
this.onMeasure = onMeasure;
|
|
133
|
+
this.onMeasureWidth = onMeasureWidth ?? null;
|
|
74
134
|
const items = container.querySelectorAll('[data-virtualize-index]');
|
|
75
135
|
items.forEach((item) => {
|
|
76
136
|
const indexAttr = item.dataset.virtualizeIndex;
|
|
@@ -82,14 +142,21 @@ export class MeasurementSystem {
|
|
|
82
142
|
});
|
|
83
143
|
}
|
|
84
144
|
/**
|
|
85
|
-
* Observe item
|
|
145
|
+
* Observe item.
|
|
146
|
+
*
|
|
147
|
+
* `axis` is optional and additive, defaulting to 'height' so
|
|
148
|
+
* every existing call site (which never passes a third arg)
|
|
149
|
+
* behaves exactly as before. Pass axis='width' for elements in
|
|
150
|
+
* a horizontal-scrolling list so contentRect.width is measured
|
|
151
|
+
* instead of contentRect.height.
|
|
86
152
|
*/
|
|
87
|
-
observeItem(index, element) {
|
|
153
|
+
observeItem(index, element, axis = 'height') {
|
|
88
154
|
element.dataset.virtualizeIndex =
|
|
89
155
|
String(index);
|
|
90
156
|
this.observedElements.set(element, index);
|
|
157
|
+
this.observedAxis.set(element, axis);
|
|
91
158
|
this.resizeObserver?.observe(element);
|
|
92
|
-
this.syncMeasure(index, element);
|
|
159
|
+
this.syncMeasure(index, element, axis);
|
|
93
160
|
}
|
|
94
161
|
/**
|
|
95
162
|
* Unobserve item
|
|
@@ -97,6 +164,7 @@ export class MeasurementSystem {
|
|
|
97
164
|
unobserveItem(element) {
|
|
98
165
|
this.resizeObserver?.unobserve(element);
|
|
99
166
|
this.observedElements.delete(element);
|
|
167
|
+
this.observedAxis.delete(element);
|
|
100
168
|
}
|
|
101
169
|
/**
|
|
102
170
|
* Batch updates using RAF
|
|
@@ -111,19 +179,34 @@ export class MeasurementSystem {
|
|
|
111
179
|
this.onMeasure?.(index, size);
|
|
112
180
|
});
|
|
113
181
|
this.pendingUpdates.clear();
|
|
182
|
+
this.pendingWidthUpdates.forEach((size, index) => {
|
|
183
|
+
this.onMeasureWidth?.(index, size);
|
|
184
|
+
});
|
|
185
|
+
this.pendingWidthUpdates.clear();
|
|
114
186
|
this.rafId = null;
|
|
115
187
|
});
|
|
116
188
|
}
|
|
117
189
|
/**
|
|
118
|
-
* Fallback measurement
|
|
190
|
+
* Fallback measurement.
|
|
191
|
+
*
|
|
192
|
+
* `axis` is optional and additive, defaulting to 'height' to
|
|
193
|
+
* preserve existing behavior for all current call sites.
|
|
119
194
|
*/
|
|
120
|
-
syncMeasure(index, element) {
|
|
121
|
-
const
|
|
122
|
-
|
|
195
|
+
syncMeasure(index, element, axis = 'height') {
|
|
196
|
+
const rect = element.getBoundingClientRect();
|
|
197
|
+
const size = axis === 'width' ? rect.width : rect.height;
|
|
123
198
|
if (size <= 0) {
|
|
124
199
|
return;
|
|
125
200
|
}
|
|
126
201
|
const rounded = Math.round(size);
|
|
202
|
+
if (axis === 'width') {
|
|
203
|
+
if (this.widthMeasurements.get(index) === rounded) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
this.widthMeasurements.set(index, rounded);
|
|
207
|
+
this.onMeasureWidth?.(index, rounded);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
127
210
|
if (this.measurements.get(index) === rounded) {
|
|
128
211
|
return;
|
|
129
212
|
}
|
|
@@ -136,6 +219,7 @@ export class MeasurementSystem {
|
|
|
136
219
|
stopMeasuring() {
|
|
137
220
|
this.resizeObserver?.disconnect();
|
|
138
221
|
this.pendingUpdates.clear();
|
|
222
|
+
this.pendingWidthUpdates.clear();
|
|
139
223
|
if (this.rafId !== null) {
|
|
140
224
|
cancelAnimationFrame(this.rafId);
|
|
141
225
|
}
|
|
@@ -143,25 +227,45 @@ export class MeasurementSystem {
|
|
|
143
227
|
getMeasurement(index) {
|
|
144
228
|
return this.measurements.get(index);
|
|
145
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* NEW (additive): mirrors getMeasurement() but for the width
|
|
232
|
+
* cache. Returns undefined for any index never observed in
|
|
233
|
+
* 'width' axis mode.
|
|
234
|
+
*/
|
|
235
|
+
getWidthMeasurement(index) {
|
|
236
|
+
return this.widthMeasurements.get(index);
|
|
237
|
+
}
|
|
146
238
|
getAllMeasurements() {
|
|
147
239
|
return new Map(this.measurements);
|
|
148
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* NEW (additive): mirrors getAllMeasurements() for widths.
|
|
243
|
+
*/
|
|
244
|
+
getAllWidthMeasurements() {
|
|
245
|
+
return new Map(this.widthMeasurements);
|
|
246
|
+
}
|
|
149
247
|
clearPending() {
|
|
150
248
|
this.pendingUpdates.clear();
|
|
249
|
+
this.pendingWidthUpdates.clear();
|
|
151
250
|
}
|
|
152
251
|
/**
|
|
153
252
|
* Explicit cache clear
|
|
154
253
|
*/
|
|
155
254
|
clearMeasurements() {
|
|
156
255
|
this.measurements.clear();
|
|
256
|
+
this.widthMeasurements.clear();
|
|
157
257
|
}
|
|
158
258
|
destroy() {
|
|
159
259
|
this.stopMeasuring();
|
|
160
260
|
this.measurements.clear();
|
|
161
261
|
this.pendingUpdates.clear();
|
|
262
|
+
this.widthMeasurements.clear();
|
|
263
|
+
this.pendingWidthUpdates.clear();
|
|
162
264
|
this.observedElements =
|
|
163
265
|
new WeakMap();
|
|
266
|
+
this.observedAxis = new WeakMap();
|
|
164
267
|
this.onMeasure = null;
|
|
268
|
+
this.onMeasureWidth = null;
|
|
165
269
|
}
|
|
166
270
|
}
|
|
167
271
|
//# sourceMappingURL=MeasurementSystem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeasurementSystem.js","sourceRoot":"","sources":["../../src/core/MeasurementSystem.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;
|
|
1
|
+
{"version":3,"file":"MeasurementSystem.js","sourceRoot":"","sources":["../../src/core/MeasurementSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,18 @@ export declare class VirtualizationEngine {
|
|
|
8
8
|
constructor(estimatedItemSize?: number);
|
|
9
9
|
setItemCount(count: number): void;
|
|
10
10
|
recordItemSize(index: number, size: number): void;
|
|
11
|
+
/**
|
|
12
|
+
* NEW (additive): Invalidate cached measurements from `fromIndex`
|
|
13
|
+
* onward (inclusive), or all measurements if `fromIndex` is
|
|
14
|
+
* omitted. Affected indices fall back to `estimatedItemSize`
|
|
15
|
+
* until they are re-measured and recordItemSize() is called
|
|
16
|
+
* again for them.
|
|
17
|
+
*
|
|
18
|
+
* Does not remove items below fromIndex, and does not touch
|
|
19
|
+
* itemCount. Safe to call at any time; it only marks the
|
|
20
|
+
* prefix-sum cache dirty so the next read rebuilds it.
|
|
21
|
+
*/
|
|
22
|
+
invalidateFrom(fromIndex?: number): void;
|
|
11
23
|
private rebuildPrefix;
|
|
12
24
|
getItemSize(index: number): number;
|
|
13
25
|
getItemOffset(index: number): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualizationEngine.d.ts","sourceRoot":"","sources":["../../src/core/VirtualizationEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,YAAY,EAEf,MAAM,UAAU,CAAC;AAElB,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAQ;gBAET,iBAAiB,SAAK;IAIlC,YAAY,CAAC,KAAK,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"VirtualizationEngine.d.ts","sourceRoot":"","sources":["../../src/core/VirtualizationEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,YAAY,EAEf,MAAM,UAAU,CAAC;AAElB,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAQ;gBAET,iBAAiB,SAAK;IAIlC,YAAY,CAAC,KAAK,EAAE,MAAM;IAqB1B,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAO1C;;;;;;;;;;OAUG;IACH,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBxC,OAAO,CAAC,aAAa;IAYrB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKpC,YAAY,IAAI,MAAM;IAKtB,OAAO,CAAC,YAAY;IAkBpB,eAAe,CACX,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,SAAI,GACb,YAAY;IAcf,eAAe,CACX,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACjB,QAAQ,EAAE;IAqBb,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,GAAE,OAAO,GAAG,QAAQ,GAAG,KAAe;CAchH"}
|
|
@@ -18,7 +18,7 @@ export class VirtualizationEngine {
|
|
|
18
18
|
writable: true,
|
|
19
19
|
value: 0
|
|
20
20
|
});
|
|
21
|
-
//
|
|
21
|
+
// prefix sum cache
|
|
22
22
|
Object.defineProperty(this, "prefix", {
|
|
23
23
|
enumerable: true,
|
|
24
24
|
configurable: true,
|
|
@@ -34,6 +34,21 @@ export class VirtualizationEngine {
|
|
|
34
34
|
this.estimatedItemSize = estimatedItemSize;
|
|
35
35
|
}
|
|
36
36
|
setItemCount(count) {
|
|
37
|
+
/**
|
|
38
|
+
* FIX: previously this unconditionally set `dirty = true`
|
|
39
|
+
* on every call, even when the count hadn't changed. Since
|
|
40
|
+
* getVisibleRange() calls setItemCount() on every single
|
|
41
|
+
* invocation (i.e. every scroll frame), that forced a full
|
|
42
|
+
* O(n) prefix-sum rebuild every frame regardless of whether
|
|
43
|
+
* anything actually changed.
|
|
44
|
+
*
|
|
45
|
+
* Now we only mark dirty when the count actually differs.
|
|
46
|
+
* Measurement updates still mark dirty via recordItemSize(),
|
|
47
|
+
* so cache invalidation on real changes is unaffected.
|
|
48
|
+
*/
|
|
49
|
+
if (this.itemCount === count) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
37
52
|
this.itemCount = count;
|
|
38
53
|
this.dirty = true;
|
|
39
54
|
}
|
|
@@ -43,6 +58,34 @@ export class VirtualizationEngine {
|
|
|
43
58
|
this.itemSizeMap[index] = size;
|
|
44
59
|
this.dirty = true;
|
|
45
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* NEW (additive): Invalidate cached measurements from `fromIndex`
|
|
63
|
+
* onward (inclusive), or all measurements if `fromIndex` is
|
|
64
|
+
* omitted. Affected indices fall back to `estimatedItemSize`
|
|
65
|
+
* until they are re-measured and recordItemSize() is called
|
|
66
|
+
* again for them.
|
|
67
|
+
*
|
|
68
|
+
* Does not remove items below fromIndex, and does not touch
|
|
69
|
+
* itemCount. Safe to call at any time; it only marks the
|
|
70
|
+
* prefix-sum cache dirty so the next read rebuilds it.
|
|
71
|
+
*/
|
|
72
|
+
invalidateFrom(fromIndex) {
|
|
73
|
+
if (fromIndex === undefined) {
|
|
74
|
+
this.itemSizeMap = {};
|
|
75
|
+
this.dirty = true;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (fromIndex < 0) {
|
|
79
|
+
fromIndex = 0;
|
|
80
|
+
}
|
|
81
|
+
for (const key of Object.keys(this.itemSizeMap)) {
|
|
82
|
+
const index = Number(key);
|
|
83
|
+
if (index >= fromIndex) {
|
|
84
|
+
delete this.itemSizeMap[index];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
this.dirty = true;
|
|
88
|
+
}
|
|
46
89
|
rebuildPrefix() {
|
|
47
90
|
let sum = 0;
|
|
48
91
|
this.prefix = [0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualizationEngine.js","sourceRoot":"","sources":["../../src/core/VirtualizationEngine.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,oBAAoB;IAS7B,YAAY,iBAAiB,GAAG,EAAE;QAR1B;;;;mBAAgC,EAAE;WAAC;QACnC;;;;;WAA0B;QAC1B;;;;mBAAY,CAAC;WAAC;QAEtB,
|
|
1
|
+
{"version":3,"file":"VirtualizationEngine.js","sourceRoot":"","sources":["../../src/core/VirtualizationEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +1,33 @@
|
|
|
1
1
|
export interface UseInfiniteScrollParams {
|
|
2
2
|
/**
|
|
3
|
-
* Callback triggered when user reaches threshold
|
|
3
|
+
* Callback triggered when user reaches threshold
|
|
4
4
|
*/
|
|
5
5
|
onLoadMore: () => void | Promise<void>;
|
|
6
6
|
/**
|
|
7
|
-
* Distance from bottom before triggering load
|
|
7
|
+
* Distance from bottom before triggering load
|
|
8
8
|
* Default: 500px
|
|
9
9
|
*/
|
|
10
10
|
threshold?: number;
|
|
11
11
|
/**
|
|
12
|
-
* External loading state
|
|
12
|
+
* External loading state
|
|
13
13
|
*/
|
|
14
14
|
isLoading?: boolean;
|
|
15
15
|
/**
|
|
16
|
-
* Enable/
|
|
17
|
-
* Default: true
|
|
16
|
+
* Enable / Disable infinite scroll
|
|
18
17
|
*/
|
|
19
18
|
enabled?: boolean;
|
|
20
19
|
}
|
|
21
20
|
export interface UseInfiniteScrollReturn<T extends HTMLElement = HTMLDivElement> {
|
|
22
|
-
containerRef: React.RefObject<T>;
|
|
21
|
+
containerRef: React.RefObject<T | null>;
|
|
23
22
|
isAtBottom: boolean;
|
|
24
23
|
isLoading: boolean;
|
|
25
24
|
checkIfAtBottom: () => void;
|
|
26
25
|
}
|
|
27
26
|
/**
|
|
28
|
-
*
|
|
27
|
+
* useInfiniteScroll
|
|
29
28
|
*
|
|
30
|
-
* Automatically
|
|
31
|
-
*
|
|
29
|
+
* Automatically calls onLoadMore when the user
|
|
30
|
+
* scrolls near the bottom of a container.
|
|
32
31
|
*/
|
|
33
32
|
export declare function useInfiniteScroll<T extends HTMLElement = HTMLDivElement>({ onLoadMore, threshold, isLoading, enabled, }: UseInfiniteScrollParams): UseInfiniteScrollReturn<T>;
|
|
34
33
|
//# sourceMappingURL=useInfiniteScroll.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInfiniteScroll.d.ts","sourceRoot":"","sources":["../../src/hooks/useInfiniteScroll.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,uBAAuB;IACpC;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB
|
|
1
|
+
{"version":3,"file":"useInfiniteScroll.d.ts","sourceRoot":"","sources":["../../src/hooks/useInfiniteScroll.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,uBAAuB;IACpC;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB,CACpC,CAAC,SAAS,WAAW,GAAG,cAAc;IAEtC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC7B,CAAC,SAAS,WAAW,GAAG,cAAc,EACxC,EACE,UAAU,EACV,SAAe,EACf,SAAiB,EACjB,OAAc,GACjB,EAAE,uBAAuB,GAAG,uBAAuB,CAAC,CAAC,CAAC,CA6FtD"}
|