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