lazy-render-virtual-scroll 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +303 -0
  2. package/dist/cjs/adapters/react/LazyList.d.ts +12 -0
  3. package/dist/cjs/adapters/react/LazyList.d.ts.map +1 -0
  4. package/dist/cjs/adapters/react/useLazyList.d.ts +13 -0
  5. package/dist/cjs/adapters/react/useLazyList.d.ts.map +1 -0
  6. package/dist/cjs/core/Engine.d.ts +48 -0
  7. package/dist/cjs/core/Engine.d.ts.map +1 -0
  8. package/dist/cjs/core/PrefetchManager.d.ts +13 -0
  9. package/dist/cjs/core/PrefetchManager.d.ts.map +1 -0
  10. package/dist/cjs/core/RequestQueue.d.ts +23 -0
  11. package/dist/cjs/core/RequestQueue.d.ts.map +1 -0
  12. package/dist/cjs/core/WindowManager.d.ts +20 -0
  13. package/dist/cjs/core/WindowManager.d.ts.map +1 -0
  14. package/dist/cjs/core/types.d.ts +20 -0
  15. package/dist/cjs/core/types.d.ts.map +1 -0
  16. package/dist/cjs/index.d.ts +11 -0
  17. package/dist/cjs/index.d.ts.map +1 -0
  18. package/dist/cjs/index.js +435 -0
  19. package/dist/cjs/index.js.map +1 -0
  20. package/dist/cjs/platform/browser/ScrollObserver.d.ts +25 -0
  21. package/dist/cjs/platform/browser/ScrollObserver.d.ts.map +1 -0
  22. package/dist/cjs/utils/debounce.d.ts +5 -0
  23. package/dist/cjs/utils/debounce.d.ts.map +1 -0
  24. package/dist/cjs/utils/throttle.d.ts +5 -0
  25. package/dist/cjs/utils/throttle.d.ts.map +1 -0
  26. package/dist/esm/adapters/react/LazyList.d.ts +12 -0
  27. package/dist/esm/adapters/react/LazyList.d.ts.map +1 -0
  28. package/dist/esm/adapters/react/useLazyList.d.ts +13 -0
  29. package/dist/esm/adapters/react/useLazyList.d.ts.map +1 -0
  30. package/dist/esm/core/Engine.d.ts +48 -0
  31. package/dist/esm/core/Engine.d.ts.map +1 -0
  32. package/dist/esm/core/PrefetchManager.d.ts +13 -0
  33. package/dist/esm/core/PrefetchManager.d.ts.map +1 -0
  34. package/dist/esm/core/RequestQueue.d.ts +23 -0
  35. package/dist/esm/core/RequestQueue.d.ts.map +1 -0
  36. package/dist/esm/core/WindowManager.d.ts +20 -0
  37. package/dist/esm/core/WindowManager.d.ts.map +1 -0
  38. package/dist/esm/core/types.d.ts +20 -0
  39. package/dist/esm/core/types.d.ts.map +1 -0
  40. package/dist/esm/index.d.ts +11 -0
  41. package/dist/esm/index.d.ts.map +1 -0
  42. package/dist/esm/index.js +425 -0
  43. package/dist/esm/index.js.map +1 -0
  44. package/dist/esm/platform/browser/ScrollObserver.d.ts +25 -0
  45. package/dist/esm/platform/browser/ScrollObserver.d.ts.map +1 -0
  46. package/dist/esm/utils/debounce.d.ts +5 -0
  47. package/dist/esm/utils/debounce.d.ts.map +1 -0
  48. package/dist/esm/utils/throttle.d.ts +5 -0
  49. package/dist/esm/utils/throttle.d.ts.map +1 -0
  50. package/dist/index.d.ts +181 -0
  51. package/examples/chat-ui/Chat.jsx +158 -0
  52. package/examples/infinite-feed/Feed.jsx +97 -0
  53. package/examples/react-basic/App.jsx +64 -0
  54. package/package.json +55 -0
  55. package/rollup.config.js +39 -0
  56. package/src/adapters/react/LazyList.tsx +92 -0
  57. package/src/adapters/react/useLazyList.ts +87 -0
  58. package/src/core/Engine.ts +134 -0
  59. package/src/core/PrefetchManager.ts +22 -0
  60. package/src/core/RequestQueue.ts +69 -0
  61. package/src/core/WindowManager.ts +49 -0
  62. package/src/core/types.ts +24 -0
  63. package/src/index.ts +17 -0
  64. package/src/platform/browser/ScrollObserver.ts +86 -0
  65. package/src/utils/debounce.ts +19 -0
  66. package/src/utils/throttle.ts +19 -0
  67. package/test/engine.test.ts +136 -0
  68. package/test/prefetchManager.test.ts +99 -0
  69. package/test/reactAdapter.test.ts +26 -0
  70. package/test/requestQueue.test.ts +88 -0
  71. package/test/testRunner.ts +8 -0
  72. package/test/windowManager.test.ts +98 -0
  73. package/tsconfig.json +33 -0
@@ -0,0 +1,435 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+
5
+ class WindowManager {
6
+ constructor(itemHeight, viewportHeight, bufferSize = 5) {
7
+ this.itemHeight = itemHeight;
8
+ this.viewportHeight = viewportHeight;
9
+ this.bufferSize = bufferSize;
10
+ }
11
+ /**
12
+ * Calculate the visible range based on scroll position
13
+ */
14
+ calculateVisibleRange(scrollTop) {
15
+ // Calculate how many items fit in the viewport
16
+ const itemsPerViewport = Math.ceil(this.viewportHeight / this.itemHeight);
17
+ // Calculate the starting index based on scroll position
18
+ const startIndex = Math.floor(scrollTop / this.itemHeight);
19
+ // Calculate the ending index with buffer
20
+ const endIndex = Math.min(startIndex + itemsPerViewport + this.bufferSize, Number.MAX_SAFE_INTEGER // Will be limited by total items later
21
+ );
22
+ return {
23
+ start: Math.max(0, startIndex - this.bufferSize),
24
+ end: endIndex
25
+ };
26
+ }
27
+ /**
28
+ * Update viewport height if it changes
29
+ */
30
+ updateViewportHeight(height) {
31
+ this.viewportHeight = height;
32
+ }
33
+ /**
34
+ * Update item height if it changes
35
+ */
36
+ updateItemHeight(height) {
37
+ this.itemHeight = height;
38
+ }
39
+ }
40
+
41
+ class PrefetchManager {
42
+ constructor(bufferSize = 5) {
43
+ this.bufferSize = bufferSize;
44
+ }
45
+ /**
46
+ * Determine if more items should be fetched based on visible range and loaded items
47
+ */
48
+ shouldPrefetch(visibleEnd, totalLoaded) {
49
+ // Simple rule: if visible end is approaching the loaded boundary, fetch more
50
+ return visibleEnd >= totalLoaded - this.bufferSize;
51
+ }
52
+ /**
53
+ * Update buffer size if it changes
54
+ */
55
+ updateBufferSize(size) {
56
+ this.bufferSize = size;
57
+ }
58
+ }
59
+
60
+ class RequestQueue {
61
+ constructor(maxConcurrent = 1) {
62
+ this.queue = [];
63
+ this.processing = false;
64
+ this.maxConcurrent = maxConcurrent;
65
+ }
66
+ /**
67
+ * Add a request to the queue
68
+ */
69
+ add(requestFn) {
70
+ return new Promise((resolve, reject) => {
71
+ this.queue.push(() => requestFn().then(resolve).catch(reject));
72
+ // Start processing if not already processing
73
+ if (!this.processing) {
74
+ this.processQueue();
75
+ }
76
+ });
77
+ }
78
+ /**
79
+ * Process the queue
80
+ */
81
+ async processQueue() {
82
+ if (this.queue.length === 0) {
83
+ this.processing = false;
84
+ return;
85
+ }
86
+ this.processing = true;
87
+ // Process up to maxConcurrent requests
88
+ const concurrentRequests = [];
89
+ const count = Math.min(this.maxConcurrent, this.queue.length);
90
+ for (let i = 0; i < count; i++) {
91
+ const requestFn = this.queue.shift();
92
+ if (requestFn) {
93
+ concurrentRequests.push(requestFn());
94
+ }
95
+ }
96
+ try {
97
+ await Promise.all(concurrentRequests);
98
+ }
99
+ catch (error) {
100
+ console.error('Request queue error:', error);
101
+ }
102
+ // Process remaining items
103
+ await this.processQueue();
104
+ }
105
+ /**
106
+ * Clear the queue
107
+ */
108
+ clear() {
109
+ this.queue = [];
110
+ }
111
+ /**
112
+ * Get the current queue length
113
+ */
114
+ getLength() {
115
+ return this.queue.length;
116
+ }
117
+ }
118
+
119
+ class Engine {
120
+ constructor(config) {
121
+ this.fetchMoreCallback = null;
122
+ this.config = {
123
+ ...config,
124
+ bufferSize: config.bufferSize || 5
125
+ };
126
+ this.windowManager = new WindowManager(this.config.itemHeight, this.config.viewportHeight, this.config.bufferSize);
127
+ this.prefetchManager = new PrefetchManager(this.config.bufferSize);
128
+ this.requestQueue = new RequestQueue(1); // Single request at a time
129
+ this.totalItems = this.config.totalItems || Number.MAX_SAFE_INTEGER;
130
+ this.state = {
131
+ scrollTop: 0,
132
+ visibleRange: { start: 0, end: 0 },
133
+ loadedItems: 0,
134
+ isLoading: false
135
+ };
136
+ }
137
+ /**
138
+ * Update scroll position and recalculate visible range
139
+ */
140
+ updateScrollPosition(scrollTop) {
141
+ this.state.scrollTop = scrollTop;
142
+ this.state.visibleRange = this.windowManager.calculateVisibleRange(scrollTop);
143
+ // Check if we need to fetch more items
144
+ if (this.shouldFetchMore()) {
145
+ this.fetchMore();
146
+ }
147
+ }
148
+ /**
149
+ * Get the current visible range
150
+ */
151
+ getVisibleRange() {
152
+ return this.state.visibleRange;
153
+ }
154
+ /**
155
+ * Check if more items should be fetched
156
+ */
157
+ shouldFetchMore() {
158
+ if (!this.fetchMoreCallback)
159
+ return false;
160
+ if (this.state.isLoading)
161
+ return false;
162
+ if (this.state.loadedItems >= this.totalItems)
163
+ return false;
164
+ return this.prefetchManager.shouldPrefetch(this.state.visibleRange.end, this.state.loadedItems);
165
+ }
166
+ /**
167
+ * Fetch more items
168
+ */
169
+ async fetchMore() {
170
+ if (!this.fetchMoreCallback || this.state.isLoading)
171
+ return;
172
+ this.state.isLoading = true;
173
+ try {
174
+ const result = await this.requestQueue.add(this.fetchMoreCallback);
175
+ // Assuming the result contains new items
176
+ // In a real implementation, this would update the loaded items count
177
+ this.state.loadedItems += Array.isArray(result) ? result.length : 1;
178
+ }
179
+ catch (error) {
180
+ console.error('Error fetching more items:', error);
181
+ }
182
+ finally {
183
+ this.state.isLoading = false;
184
+ }
185
+ }
186
+ /**
187
+ * Set the fetchMore callback function
188
+ */
189
+ setFetchMoreCallback(callback) {
190
+ this.fetchMoreCallback = callback;
191
+ }
192
+ /**
193
+ * Update total items count
194
+ */
195
+ updateTotalItems(count) {
196
+ this.totalItems = count;
197
+ }
198
+ /**
199
+ * Get current engine state
200
+ */
201
+ getState() {
202
+ return { ...this.state };
203
+ }
204
+ /**
205
+ * Update viewport dimensions
206
+ */
207
+ updateDimensions(viewportHeight, itemHeight) {
208
+ this.windowManager.updateViewportHeight(viewportHeight);
209
+ this.windowManager.updateItemHeight(itemHeight);
210
+ // Recalculate visible range with new dimensions
211
+ this.state.visibleRange = this.windowManager.calculateVisibleRange(this.state.scrollTop);
212
+ }
213
+ /**
214
+ * Cleanup resources
215
+ */
216
+ cleanup() {
217
+ this.requestQueue.clear();
218
+ this.fetchMoreCallback = null;
219
+ }
220
+ }
221
+
222
+ class ScrollObserver {
223
+ constructor(container, callback, options) {
224
+ this.observer = null;
225
+ this.sentinelElement = null;
226
+ /**
227
+ * Handle scroll events
228
+ */
229
+ this.onScroll = () => {
230
+ // Debounced scroll handler to prevent too frequent updates
231
+ this.debounce(() => {
232
+ this.callback(this.container.scrollTop);
233
+ }, 16); // ~60fps
234
+ };
235
+ this.container = container;
236
+ this.callback = callback;
237
+ this.options = {
238
+ root: container,
239
+ threshold: [0, 1],
240
+ ...options
241
+ };
242
+ }
243
+ /**
244
+ * Start observing scroll events
245
+ */
246
+ observe() {
247
+ // Create a sentinel element at the bottom to detect when user scrolls near the end
248
+ this.sentinelElement = document.createElement('div');
249
+ this.sentinelElement.style.height = '1px'; // Very small element
250
+ this.sentinelElement.setAttribute('data-lazy-sentinel', '');
251
+ // Add sentinel to the container
252
+ this.container.appendChild(this.sentinelElement);
253
+ // Create intersection observer to detect when sentinel comes into view
254
+ this.observer = new IntersectionObserver((entries) => {
255
+ entries.forEach(entry => {
256
+ if (entry.isIntersecting) {
257
+ // Trigger callback with current scroll position
258
+ this.callback(this.container.scrollTop);
259
+ }
260
+ });
261
+ }, this.options);
262
+ this.observer.observe(this.sentinelElement);
263
+ // Also listen to scroll events for continuous updates
264
+ this.container.addEventListener('scroll', this.onScroll, { passive: true });
265
+ }
266
+ /**
267
+ * Debounce function for scroll events
268
+ */
269
+ debounce(func, wait) {
270
+ let timeout;
271
+ clearTimeout(timeout);
272
+ timeout = setTimeout(func, wait);
273
+ }
274
+ /**
275
+ * Disconnect observer and clean up
276
+ */
277
+ disconnect() {
278
+ if (this.observer) {
279
+ this.observer.disconnect();
280
+ this.observer = null;
281
+ }
282
+ if (this.sentinelElement) {
283
+ this.sentinelElement.remove();
284
+ this.sentinelElement = null;
285
+ }
286
+ this.container.removeEventListener('scroll', this.onScroll);
287
+ }
288
+ }
289
+
290
+ const useLazyList = (config) => {
291
+ const { fetchMore, ...engineConfig } = config;
292
+ const engineRef = React.useRef(null);
293
+ const containerRef = React.useRef(null);
294
+ const [visibleRange, setVisibleRange] = React.useState({ start: 0, end: 0 });
295
+ const [loadedItems, setLoadedItems] = React.useState([]);
296
+ const [isLoading, setIsLoading] = React.useState(false);
297
+ // Initialize engine
298
+ React.useEffect(() => {
299
+ engineRef.current = new Engine(engineConfig);
300
+ engineRef.current.setFetchMoreCallback(fetchMore);
301
+ return () => {
302
+ if (engineRef.current) {
303
+ engineRef.current.cleanup();
304
+ }
305
+ };
306
+ }, []);
307
+ // Update engine when config changes
308
+ React.useEffect(() => {
309
+ if (engineRef.current) {
310
+ engineRef.current.updateDimensions(engineConfig.viewportHeight, engineConfig.itemHeight);
311
+ }
312
+ }, [engineConfig.viewportHeight, engineConfig.itemHeight]);
313
+ // Handle scroll events
314
+ const handleScroll = React.useCallback((scrollTop) => {
315
+ if (engineRef.current) {
316
+ engineRef.current.updateScrollPosition(scrollTop);
317
+ // Update state based on engine
318
+ const state = engineRef.current.getState();
319
+ setVisibleRange(state.visibleRange);
320
+ setIsLoading(state.isLoading);
321
+ }
322
+ }, []);
323
+ // Set container reference
324
+ const setContainerRef = (element) => {
325
+ if (element) {
326
+ containerRef.current = element;
327
+ // Initialize scroll observer when container is available
328
+ if (typeof window !== 'undefined' && element) {
329
+ // In a real implementation, we would use ScrollObserver here
330
+ // For now, we'll just attach a basic scroll listener
331
+ const handleScrollEvent = () => {
332
+ handleScroll(element.scrollTop);
333
+ };
334
+ element.addEventListener('scroll', handleScrollEvent, { passive: true });
335
+ // Cleanup
336
+ return () => {
337
+ element.removeEventListener('scroll', handleScrollEvent);
338
+ };
339
+ }
340
+ }
341
+ };
342
+ return {
343
+ visibleRange,
344
+ loadedItems,
345
+ isLoading,
346
+ setContainerRef,
347
+ // Helper function to trigger manual refresh
348
+ refresh: () => {
349
+ var _a;
350
+ if (engineRef.current) {
351
+ engineRef.current.updateScrollPosition(((_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.scrollTop) || 0);
352
+ }
353
+ }
354
+ };
355
+ };
356
+
357
+ const LazyList = React.forwardRef((props, ref) => {
358
+ const { fetchMore, renderItem, items, itemHeight, viewportHeight, bufferSize, className = '', style = {}, ...rest } = props;
359
+ const { visibleRange, setContainerRef, isLoading } = useLazyList({
360
+ fetchMore,
361
+ itemHeight,
362
+ viewportHeight,
363
+ bufferSize,
364
+ ...rest
365
+ });
366
+ // Calculate container height to simulate infinite scroll
367
+ const containerHeight = items.length * itemHeight;
368
+ const visibleItems = items.slice(visibleRange.start, visibleRange.end);
369
+ // Calculate top padding to maintain scroll position
370
+ const paddingTop = visibleRange.start * itemHeight;
371
+ return (React.createElement("div", { ref: (el) => {
372
+ setContainerRef(el);
373
+ if (ref) {
374
+ if (typeof ref === 'function') {
375
+ ref(el);
376
+ }
377
+ else {
378
+ ref.current = el;
379
+ }
380
+ }
381
+ }, className: `lazy-list ${className}`, style: {
382
+ height: `${viewportHeight}px`,
383
+ overflowY: 'auto',
384
+ ...style
385
+ }, ...rest },
386
+ React.createElement("div", { style: { height: `${paddingTop}px` } }),
387
+ visibleItems.map((item, index) => (React.createElement("div", { key: visibleRange.start + index, style: { height: `${itemHeight}px` }, className: "lazy-item" }, renderItem(item, visibleRange.start + index)))),
388
+ React.createElement("div", { style: {
389
+ height: `${Math.max(0, containerHeight - (visibleRange.end * itemHeight))}px`
390
+ } }),
391
+ isLoading && (React.createElement("div", { className: "lazy-loading" }, "Loading more items..."))));
392
+ });
393
+ LazyList.displayName = 'LazyList';
394
+
395
+ /**
396
+ * Debounce function to limit the rate at which a function is called
397
+ */
398
+ function debounce(func, wait) {
399
+ let timeout = null;
400
+ return function executedFunction(...args) {
401
+ if (timeout) {
402
+ clearTimeout(timeout);
403
+ }
404
+ timeout = setTimeout(() => {
405
+ func.apply(this, args);
406
+ }, wait);
407
+ };
408
+ }
409
+
410
+ /**
411
+ * Throttle function to limit the rate at which a function is called
412
+ */
413
+ function throttle(func, limit) {
414
+ let inThrottle;
415
+ return function executedFunction(...args) {
416
+ if (!inThrottle) {
417
+ func.apply(this, args);
418
+ inThrottle = true;
419
+ setTimeout(() => {
420
+ inThrottle = false;
421
+ }, limit);
422
+ }
423
+ };
424
+ }
425
+
426
+ exports.Engine = Engine;
427
+ exports.LazyList = LazyList;
428
+ exports.PrefetchManager = PrefetchManager;
429
+ exports.RequestQueue = RequestQueue;
430
+ exports.ScrollObserver = ScrollObserver;
431
+ exports.WindowManager = WindowManager;
432
+ exports.debounce = debounce;
433
+ exports.throttle = throttle;
434
+ exports.useLazyList = useLazyList;
435
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/core/WindowManager.ts","../../src/core/PrefetchManager.ts","../../src/core/RequestQueue.ts","../../src/core/Engine.ts","../../src/platform/browser/ScrollObserver.ts","../../src/adapters/react/useLazyList.ts","../../src/adapters/react/LazyList.tsx","../../src/utils/debounce.ts","../../src/utils/throttle.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["useRef","useState","useEffect","useCallback","forwardRef"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare class ScrollObserver {
2
+ private container;
3
+ private callback;
4
+ private options;
5
+ private observer;
6
+ private sentinelElement;
7
+ constructor(container: HTMLElement, callback: (scrollTop: number) => void, options?: Partial<IntersectionObserverInit>);
8
+ /**
9
+ * Start observing scroll events
10
+ */
11
+ observe(): void;
12
+ /**
13
+ * Handle scroll events
14
+ */
15
+ private onScroll;
16
+ /**
17
+ * Debounce function for scroll events
18
+ */
19
+ private debounce;
20
+ /**
21
+ * Disconnect observer and clean up
22
+ */
23
+ disconnect(): void;
24
+ }
25
+ //# sourceMappingURL=ScrollObserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollObserver.d.ts","sourceRoot":"","sources":["../../../src/platform/browser/ScrollObserver.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,eAAe,CAA4B;gBAGjD,SAAS,EAAE,WAAW,EACtB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,EACrC,OAAO,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC;IAW7C;;OAEG;IACH,OAAO,IAAI,IAAI;IAyBf;;OAEG;IACH,OAAO,CAAC,QAAQ,CAKd;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACH,UAAU,IAAI,IAAI;CAanB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Debounce function to limit the rate at which a function is called
3
+ */
4
+ export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void;
5
+ //# sourceMappingURL=debounce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../src/utils/debounce.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAYlC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Throttle function to limit the rate at which a function is called
3
+ */
4
+ export declare function throttle<T extends (...args: any[]) => any>(func: T, limit: number): (...args: Parameters<T>) => void;
5
+ //# sourceMappingURL=throttle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../src/utils/throttle.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAYlC"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { EngineConfig, FetchMoreCallback } from '../../core/types';
3
+ interface LazyListProps extends EngineConfig {
4
+ fetchMore: FetchMoreCallback;
5
+ renderItem: (item: any, index: number) => React.ReactNode;
6
+ items: any[];
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ }
10
+ export declare const LazyList: React.ForwardRefExoticComponent<LazyListProps & React.RefAttributes<HTMLDivElement>>;
11
+ export {};
12
+ //# sourceMappingURL=LazyList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LazyList.d.ts","sourceRoot":"","sources":["../../../src/adapters/react/LazyList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEnE,UAAU,aAAc,SAAQ,YAAY;IAC1C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC1D,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,eAAO,MAAM,QAAQ,sFA6EnB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { EngineConfig, VisibleRange, FetchMoreCallback } from '../../core/types';
2
+ interface LazyListConfig extends EngineConfig {
3
+ fetchMore: FetchMoreCallback;
4
+ }
5
+ export declare const useLazyList: (config: LazyListConfig) => {
6
+ visibleRange: VisibleRange;
7
+ loadedItems: any[];
8
+ isLoading: boolean;
9
+ setContainerRef: (element: HTMLElement | null) => (() => void) | undefined;
10
+ refresh: () => void;
11
+ };
12
+ export {};
13
+ //# sourceMappingURL=useLazyList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLazyList.d.ts","sourceRoot":"","sources":["../../../src/adapters/react/useLazyList.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,UAAU,cAAe,SAAQ,YAAY;IAC3C,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED,eAAO,MAAM,WAAW,GAAI,QAAQ,cAAc;;;;+BA4Cd,WAAW,GAAG,IAAI;;CAkCrD,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { EngineConfig, VisibleRange, FetchMoreCallback, EngineState } from './types';
2
+ export declare class Engine {
3
+ private config;
4
+ private windowManager;
5
+ private prefetchManager;
6
+ private requestQueue;
7
+ private state;
8
+ private fetchMoreCallback;
9
+ private totalItems;
10
+ constructor(config: EngineConfig);
11
+ /**
12
+ * Update scroll position and recalculate visible range
13
+ */
14
+ updateScrollPosition(scrollTop: number): void;
15
+ /**
16
+ * Get the current visible range
17
+ */
18
+ getVisibleRange(): VisibleRange;
19
+ /**
20
+ * Check if more items should be fetched
21
+ */
22
+ shouldFetchMore(): boolean;
23
+ /**
24
+ * Fetch more items
25
+ */
26
+ fetchMore(): Promise<void>;
27
+ /**
28
+ * Set the fetchMore callback function
29
+ */
30
+ setFetchMoreCallback(callback: FetchMoreCallback): void;
31
+ /**
32
+ * Update total items count
33
+ */
34
+ updateTotalItems(count: number): void;
35
+ /**
36
+ * Get current engine state
37
+ */
38
+ getState(): EngineState;
39
+ /**
40
+ * Update viewport dimensions
41
+ */
42
+ updateDimensions(viewportHeight: number, itemHeight: number): void;
43
+ /**
44
+ * Cleanup resources
45
+ */
46
+ cleanup(): void;
47
+ }
48
+ //# sourceMappingURL=Engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../src/core/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKrF,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAe;IAEnC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,YAAY;IAyBhC;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAU7C;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,eAAe,IAAI,OAAO;IAW1B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBhC;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAIvD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQlE;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,13 @@
1
+ export declare class PrefetchManager {
2
+ private bufferSize;
3
+ constructor(bufferSize?: number);
4
+ /**
5
+ * Determine if more items should be fetched based on visible range and loaded items
6
+ */
7
+ shouldPrefetch(visibleEnd: number, totalLoaded: number): boolean;
8
+ /**
9
+ * Update buffer size if it changes
10
+ */
11
+ updateBufferSize(size: number): void;
12
+ }
13
+ //# sourceMappingURL=PrefetchManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrefetchManager.d.ts","sourceRoot":"","sources":["../../src/core/PrefetchManager.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,GAAE,MAAU;IAIlC;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAKhE;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAGrC"}
@@ -0,0 +1,23 @@
1
+ export declare class RequestQueue {
2
+ private queue;
3
+ private processing;
4
+ private maxConcurrent;
5
+ constructor(maxConcurrent?: number);
6
+ /**
7
+ * Add a request to the queue
8
+ */
9
+ add(requestFn: () => Promise<any>): Promise<any>;
10
+ /**
11
+ * Process the queue
12
+ */
13
+ private processQueue;
14
+ /**
15
+ * Clear the queue
16
+ */
17
+ clear(): void;
18
+ /**
19
+ * Get the current queue length
20
+ */
21
+ getLength(): number;
22
+ }
23
+ //# sourceMappingURL=RequestQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestQueue.d.ts","sourceRoot":"","sources":["../../src/core/RequestQueue.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,GAAE,MAAU;IAIrC;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAWhD;;OAEG;YACW,YAAY;IA6B1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,SAAS,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,20 @@
1
+ import { VisibleRange } from './types';
2
+ export declare class WindowManager {
3
+ private itemHeight;
4
+ private viewportHeight;
5
+ private bufferSize;
6
+ constructor(itemHeight: number, viewportHeight: number, bufferSize?: number);
7
+ /**
8
+ * Calculate the visible range based on scroll position
9
+ */
10
+ calculateVisibleRange(scrollTop: number): VisibleRange;
11
+ /**
12
+ * Update viewport height if it changes
13
+ */
14
+ updateViewportHeight(height: number): void;
15
+ /**
16
+ * Update item height if it changes
17
+ */
18
+ updateItemHeight(height: number): void;
19
+ }
20
+ //# sourceMappingURL=WindowManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WindowManager.d.ts","sourceRoot":"","sources":["../../src/core/WindowManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU;IAM9E;;OAEG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY;IAmBtD;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAGvC"}