lazy-render-virtual-scroll 2.0.0 → 2.1.2
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/README.md +172 -87
- package/dist/cjs/adapters/react/adapters/react/components/withLazyRender.d.ts +22 -0
- package/dist/cjs/adapters/react/adapters/react/components/withLazyRender.d.ts.map +1 -0
- package/dist/cjs/adapters/react/adapters/react/hooks/useLazyComponent.d.ts +38 -0
- package/dist/cjs/adapters/react/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/cjs/adapters/react/components/withLazyRender.d.ts +22 -0
- package/dist/cjs/adapters/react/components/withLazyRender.d.ts.map +1 -0
- package/dist/cjs/adapters/react/core/GlobalScrollManager.d.ts +61 -0
- package/dist/cjs/adapters/react/core/GlobalScrollManager.d.ts.map +1 -0
- package/dist/cjs/adapters/react/hooks/useLazyComponent.d.ts +38 -0
- package/dist/cjs/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/cjs/adapters/react/index.d.ts +5 -0
- package/dist/cjs/adapters/react/index.d.ts.map +1 -1
- package/dist/cjs/angular/adapters/react/components/withLazyRender.d.ts +22 -0
- package/dist/cjs/angular/adapters/react/components/withLazyRender.d.ts.map +1 -0
- package/dist/cjs/angular/adapters/react/hooks/useLazyComponent.d.ts +38 -0
- package/dist/cjs/angular/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/cjs/angular/core/GlobalScrollManager.d.ts +61 -0
- package/dist/cjs/angular/core/GlobalScrollManager.d.ts.map +1 -0
- package/dist/cjs/angular/index.d.ts +5 -0
- package/dist/cjs/angular/index.d.ts.map +1 -1
- package/dist/cjs/core/GlobalScrollManager.d.ts +61 -0
- package/dist/cjs/core/GlobalScrollManager.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +5 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +269 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/svelte/adapters/react/components/withLazyRender.d.ts +22 -0
- package/dist/cjs/svelte/adapters/react/components/withLazyRender.d.ts.map +1 -0
- package/dist/cjs/svelte/adapters/react/hooks/useLazyComponent.d.ts +38 -0
- package/dist/cjs/svelte/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/cjs/svelte/core/GlobalScrollManager.d.ts +61 -0
- package/dist/cjs/svelte/core/GlobalScrollManager.d.ts.map +1 -0
- package/dist/cjs/svelte/index.d.ts +5 -0
- package/dist/cjs/svelte/index.d.ts.map +1 -1
- package/dist/cjs/vue/adapters/react/components/withLazyRender.d.ts +22 -0
- package/dist/cjs/vue/adapters/react/components/withLazyRender.d.ts.map +1 -0
- package/dist/cjs/vue/adapters/react/hooks/useLazyComponent.d.ts +38 -0
- package/dist/cjs/vue/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/cjs/vue/core/GlobalScrollManager.d.ts +61 -0
- package/dist/cjs/vue/core/GlobalScrollManager.d.ts.map +1 -0
- package/dist/cjs/vue/index.d.ts +5 -0
- package/dist/cjs/vue/index.d.ts.map +1 -1
- package/dist/esm/adapters/react/adapters/react/components/withLazyRender.d.ts +22 -0
- package/dist/esm/adapters/react/adapters/react/components/withLazyRender.d.ts.map +1 -0
- package/dist/esm/adapters/react/adapters/react/hooks/useLazyComponent.d.ts +38 -0
- package/dist/esm/adapters/react/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/esm/adapters/react/components/withLazyRender.d.ts +22 -0
- package/dist/esm/adapters/react/components/withLazyRender.d.ts.map +1 -0
- package/dist/esm/adapters/react/core/GlobalScrollManager.d.ts +61 -0
- package/dist/esm/adapters/react/core/GlobalScrollManager.d.ts.map +1 -0
- package/dist/esm/adapters/react/hooks/useLazyComponent.d.ts +38 -0
- package/dist/esm/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/esm/adapters/react/index.d.ts +5 -0
- package/dist/esm/adapters/react/index.d.ts.map +1 -1
- package/dist/esm/angular/adapters/react/components/withLazyRender.d.ts +22 -0
- package/dist/esm/angular/adapters/react/components/withLazyRender.d.ts.map +1 -0
- package/dist/esm/angular/adapters/react/hooks/useLazyComponent.d.ts +38 -0
- package/dist/esm/angular/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/esm/angular/core/GlobalScrollManager.d.ts +61 -0
- package/dist/esm/angular/core/GlobalScrollManager.d.ts.map +1 -0
- package/dist/esm/angular/index.d.ts +5 -0
- package/dist/esm/angular/index.d.ts.map +1 -1
- package/dist/esm/core/GlobalScrollManager.d.ts +61 -0
- package/dist/esm/core/GlobalScrollManager.d.ts.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +266 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/svelte/adapters/react/components/withLazyRender.d.ts +22 -0
- package/dist/esm/svelte/adapters/react/components/withLazyRender.d.ts.map +1 -0
- package/dist/esm/svelte/adapters/react/hooks/useLazyComponent.d.ts +38 -0
- package/dist/esm/svelte/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/esm/svelte/core/GlobalScrollManager.d.ts +61 -0
- package/dist/esm/svelte/core/GlobalScrollManager.d.ts.map +1 -0
- package/dist/esm/svelte/index.d.ts +5 -0
- package/dist/esm/svelte/index.d.ts.map +1 -1
- package/dist/esm/vue/adapters/react/components/withLazyRender.d.ts +22 -0
- package/dist/esm/vue/adapters/react/components/withLazyRender.d.ts.map +1 -0
- package/dist/esm/vue/adapters/react/hooks/useLazyComponent.d.ts +38 -0
- package/dist/esm/vue/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/esm/vue/core/GlobalScrollManager.d.ts +61 -0
- package/dist/esm/vue/core/GlobalScrollManager.d.ts.map +1 -0
- package/dist/esm/vue/index.d.ts +5 -0
- package/dist/esm/vue/index.d.ts.map +1 -1
- package/dist/index.d.ts +113 -2
- package/package.json +3 -3
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type LazyMode = 'virtual' | 'visibility' | 'hybrid';
|
|
3
|
+
export interface UseLazyComponentProps {
|
|
4
|
+
mode?: LazyMode;
|
|
5
|
+
threshold?: number;
|
|
6
|
+
rootMargin?: string;
|
|
7
|
+
onVisible?: () => void;
|
|
8
|
+
onHidden?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface UseLazyComponentReturn {
|
|
11
|
+
isVisible: boolean;
|
|
12
|
+
isInView: boolean;
|
|
13
|
+
ref: React.RefObject<HTMLDivElement>;
|
|
14
|
+
shouldRender: boolean;
|
|
15
|
+
shouldMount: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Hook for lazy component rendering with multiple modes
|
|
19
|
+
*
|
|
20
|
+
* Modes:
|
|
21
|
+
* - virtual: Traditional virtual scrolling (render all, show visible)
|
|
22
|
+
* - visibility: Intersection Observer (mount only when visible)
|
|
23
|
+
* - hybrid: Combine both (best performance)
|
|
24
|
+
*/
|
|
25
|
+
export declare function useLazyComponent(props?: UseLazyComponentProps): UseLazyComponentReturn;
|
|
26
|
+
/**
|
|
27
|
+
* HOC for lazy rendering components
|
|
28
|
+
*
|
|
29
|
+
* Usage:
|
|
30
|
+
* const LazyCard = withLazyRender(Card);
|
|
31
|
+
*
|
|
32
|
+
* <LazyCard mode="hybrid" />
|
|
33
|
+
*/
|
|
34
|
+
export declare function withLazyRender<P extends object>(WrappedComponent: React.ComponentType<P & {
|
|
35
|
+
mode?: LazyMode;
|
|
36
|
+
}>): (props: P) => React.JSX.Element;
|
|
37
|
+
export default useLazyComponent;
|
|
38
|
+
//# sourceMappingURL=useLazyComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLazyComponent.d.ts","sourceRoot":"","sources":["../../../../src/adapters/react/hooks/useLazyComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,GAAE,qBAA0B,GAChC,sBAAsB,CA+ExB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC,IAEhC,OAAO,CAAC,uBAevC;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global Scroll Manager
|
|
3
|
+
* Singleton that manages scroll events for all lazy-render components
|
|
4
|
+
* Uses only 2 event listeners for ALL components (scroll + resize)
|
|
5
|
+
*/
|
|
6
|
+
export interface ScrollManagerConfig {
|
|
7
|
+
scrollThrottle?: number;
|
|
8
|
+
resizeDebounce?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ScrollListener {
|
|
11
|
+
id: string;
|
|
12
|
+
callback: (scrollTop: number, container: HTMLElement) => void;
|
|
13
|
+
container: HTMLElement;
|
|
14
|
+
}
|
|
15
|
+
declare class GlobalScrollManagerClass {
|
|
16
|
+
private static instance;
|
|
17
|
+
private listeners;
|
|
18
|
+
private scrollThrottle;
|
|
19
|
+
private resizeDebounce;
|
|
20
|
+
private scrollHandler;
|
|
21
|
+
private resizeHandler;
|
|
22
|
+
private isInitialized;
|
|
23
|
+
private constructor();
|
|
24
|
+
static getInstance(config?: ScrollManagerConfig): GlobalScrollManagerClass;
|
|
25
|
+
/**
|
|
26
|
+
* Register a scroll listener
|
|
27
|
+
* Only 2 event listeners total (scroll + resize) for ALL components
|
|
28
|
+
*/
|
|
29
|
+
register(id: string, container: HTMLElement, callback: (scrollTop: number, container: HTMLElement) => void): void;
|
|
30
|
+
/**
|
|
31
|
+
* Unregister a scroll listener
|
|
32
|
+
*/
|
|
33
|
+
unregister(id: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Initialize global event listeners
|
|
36
|
+
* Only called once, regardless of how many components
|
|
37
|
+
*/
|
|
38
|
+
private initialize;
|
|
39
|
+
/**
|
|
40
|
+
* Cleanup event listeners
|
|
41
|
+
*/
|
|
42
|
+
private cleanup;
|
|
43
|
+
/**
|
|
44
|
+
* Throttle helper
|
|
45
|
+
*/
|
|
46
|
+
private throttle;
|
|
47
|
+
/**
|
|
48
|
+
* Debounce helper
|
|
49
|
+
*/
|
|
50
|
+
private debounce;
|
|
51
|
+
/**
|
|
52
|
+
* Get stats
|
|
53
|
+
*/
|
|
54
|
+
getStats(): {
|
|
55
|
+
listenerCount: number;
|
|
56
|
+
isInitialized: boolean;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export declare const GlobalScrollManager: GlobalScrollManagerClass;
|
|
60
|
+
export default GlobalScrollManager;
|
|
61
|
+
//# sourceMappingURL=GlobalScrollManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalScrollManager.d.ts","sourceRoot":"","sources":["../../src/core/GlobalScrollManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9D,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,cAAM,wBAAwB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2B;IAClD,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAAkB;IAEvC,OAAO;IAKP,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,wBAAwB;IAO1E;;;OAGG;IACH,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,WAAW,EACtB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,KAAK,IAAI,GAC5D,IAAI;IAQP;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQ5B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,OAAO;IAcf;;OAEG;IACH,OAAO,CAAC,QAAQ;IAWhB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAQhB;;OAEG;IACH,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC;KACxB;CAMF;AAGD,eAAO,MAAM,mBAAmB,0BAAyC,CAAC;AAC1E,eAAe,mBAAmB,CAAC"}
|
|
@@ -25,10 +25,15 @@ export { PerformanceAnalytics } from './core/PerformanceAnalytics';
|
|
|
25
25
|
export { PerformanceDashboard } from './core/PerformanceDashboard';
|
|
26
26
|
export { AccessibilityManager } from './core/AccessibilityManager';
|
|
27
27
|
export { AnimationManager } from './core/AnimationManager';
|
|
28
|
+
export { GlobalScrollManager } from './core/GlobalScrollManager';
|
|
28
29
|
export type { EngineConfig, VisibleRange, FetchMoreCallback, EngineState, ScrollAnalysis } from './core/types';
|
|
29
30
|
export { ScrollObserver } from './platform/browser/ScrollObserver';
|
|
30
31
|
export { useLazyList } from './adapters/react/useLazyList';
|
|
31
32
|
export { LazyList } from './adapters/react/LazyList';
|
|
33
|
+
export { useLazyComponent } from './adapters/react/hooks/useLazyComponent';
|
|
34
|
+
export { withLazyRender } from './adapters/react/hooks/useLazyComponent';
|
|
35
|
+
export { createLazyComponent } from './adapters/react/components/withLazyRender';
|
|
36
|
+
export type { LazyMode } from './adapters/react/hooks/useLazyComponent';
|
|
32
37
|
export { LazyScroll, createLazyScroll } from './adapters/vanilla/lazyScroll';
|
|
33
38
|
declare class LazyScrollElementClass {
|
|
34
39
|
constructor();
|
|
@@ -1 +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,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/G,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
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,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/G,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,YAAY,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAGxE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAK7E,cAAM,sBAAsB;;IAE1B,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACrB,OAAO;IACP,eAAe;;;;IACf,MAAM,CAAC,eAAe;CACvB;AAGD,QAAA,MAAM,iBAAiB,+BAEG,CAAC;AAE3B,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAG7B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { LazyMode } from '../hooks/useLazyComponent';
|
|
3
|
+
export interface WithLazyRenderProps {
|
|
4
|
+
mode?: LazyMode;
|
|
5
|
+
placeholder?: React.ReactNode;
|
|
6
|
+
onVisible?: () => void;
|
|
7
|
+
onHidden?: () => void;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Higher-Order Component for lazy rendering
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* const LazyCard = withLazyRender(Card);
|
|
14
|
+
*
|
|
15
|
+
* <LazyCard mode="hybrid" placeholder={<div>Loading...</div>} />
|
|
16
|
+
*/
|
|
17
|
+
export declare function createLazyComponent<P extends object>(WrappedComponent: React.ComponentType<P>, options?: {
|
|
18
|
+
placeholder?: React.ReactNode;
|
|
19
|
+
mode?: LazyMode;
|
|
20
|
+
}): (props: P & WithLazyRenderProps) => React.JSX.Element;
|
|
21
|
+
export default createLazyComponent;
|
|
22
|
+
//# sourceMappingURL=withLazyRender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withLazyRender.d.ts","sourceRoot":"","sources":["../../../../src/adapters/react/components/withLazyRender.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAkB,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACxC,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,QAAQ,CAAC;CACZ,IAEwB,OAAO,CAAC,GAAG,mBAAmB,uBAqE7D;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type LazyMode = 'virtual' | 'visibility' | 'hybrid';
|
|
3
|
+
export interface UseLazyComponentProps {
|
|
4
|
+
mode?: LazyMode;
|
|
5
|
+
threshold?: number;
|
|
6
|
+
rootMargin?: string;
|
|
7
|
+
onVisible?: () => void;
|
|
8
|
+
onHidden?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface UseLazyComponentReturn {
|
|
11
|
+
isVisible: boolean;
|
|
12
|
+
isInView: boolean;
|
|
13
|
+
ref: React.RefObject<HTMLDivElement>;
|
|
14
|
+
shouldRender: boolean;
|
|
15
|
+
shouldMount: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Hook for lazy component rendering with multiple modes
|
|
19
|
+
*
|
|
20
|
+
* Modes:
|
|
21
|
+
* - virtual: Traditional virtual scrolling (render all, show visible)
|
|
22
|
+
* - visibility: Intersection Observer (mount only when visible)
|
|
23
|
+
* - hybrid: Combine both (best performance)
|
|
24
|
+
*/
|
|
25
|
+
export declare function useLazyComponent(props?: UseLazyComponentProps): UseLazyComponentReturn;
|
|
26
|
+
/**
|
|
27
|
+
* HOC for lazy rendering components
|
|
28
|
+
*
|
|
29
|
+
* Usage:
|
|
30
|
+
* const LazyCard = withLazyRender(Card);
|
|
31
|
+
*
|
|
32
|
+
* <LazyCard mode="hybrid" />
|
|
33
|
+
*/
|
|
34
|
+
export declare function withLazyRender<P extends object>(WrappedComponent: React.ComponentType<P & {
|
|
35
|
+
mode?: LazyMode;
|
|
36
|
+
}>): (props: P) => React.JSX.Element;
|
|
37
|
+
export default useLazyComponent;
|
|
38
|
+
//# sourceMappingURL=useLazyComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLazyComponent.d.ts","sourceRoot":"","sources":["../../../../src/adapters/react/hooks/useLazyComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,GAAE,qBAA0B,GAChC,sBAAsB,CA+ExB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC,IAEhC,OAAO,CAAC,uBAevC;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global Scroll Manager
|
|
3
|
+
* Singleton that manages scroll events for all lazy-render components
|
|
4
|
+
* Uses only 2 event listeners for ALL components (scroll + resize)
|
|
5
|
+
*/
|
|
6
|
+
export interface ScrollManagerConfig {
|
|
7
|
+
scrollThrottle?: number;
|
|
8
|
+
resizeDebounce?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ScrollListener {
|
|
11
|
+
id: string;
|
|
12
|
+
callback: (scrollTop: number, container: HTMLElement) => void;
|
|
13
|
+
container: HTMLElement;
|
|
14
|
+
}
|
|
15
|
+
declare class GlobalScrollManagerClass {
|
|
16
|
+
private static instance;
|
|
17
|
+
private listeners;
|
|
18
|
+
private scrollThrottle;
|
|
19
|
+
private resizeDebounce;
|
|
20
|
+
private scrollHandler;
|
|
21
|
+
private resizeHandler;
|
|
22
|
+
private isInitialized;
|
|
23
|
+
private constructor();
|
|
24
|
+
static getInstance(config?: ScrollManagerConfig): GlobalScrollManagerClass;
|
|
25
|
+
/**
|
|
26
|
+
* Register a scroll listener
|
|
27
|
+
* Only 2 event listeners total (scroll + resize) for ALL components
|
|
28
|
+
*/
|
|
29
|
+
register(id: string, container: HTMLElement, callback: (scrollTop: number, container: HTMLElement) => void): void;
|
|
30
|
+
/**
|
|
31
|
+
* Unregister a scroll listener
|
|
32
|
+
*/
|
|
33
|
+
unregister(id: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Initialize global event listeners
|
|
36
|
+
* Only called once, regardless of how many components
|
|
37
|
+
*/
|
|
38
|
+
private initialize;
|
|
39
|
+
/**
|
|
40
|
+
* Cleanup event listeners
|
|
41
|
+
*/
|
|
42
|
+
private cleanup;
|
|
43
|
+
/**
|
|
44
|
+
* Throttle helper
|
|
45
|
+
*/
|
|
46
|
+
private throttle;
|
|
47
|
+
/**
|
|
48
|
+
* Debounce helper
|
|
49
|
+
*/
|
|
50
|
+
private debounce;
|
|
51
|
+
/**
|
|
52
|
+
* Get stats
|
|
53
|
+
*/
|
|
54
|
+
getStats(): {
|
|
55
|
+
listenerCount: number;
|
|
56
|
+
isInitialized: boolean;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export declare const GlobalScrollManager: GlobalScrollManagerClass;
|
|
60
|
+
export default GlobalScrollManager;
|
|
61
|
+
//# sourceMappingURL=GlobalScrollManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalScrollManager.d.ts","sourceRoot":"","sources":["../../src/core/GlobalScrollManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9D,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,cAAM,wBAAwB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2B;IAClD,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAAkB;IAEvC,OAAO;IAKP,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,wBAAwB;IAO1E;;;OAGG;IACH,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,WAAW,EACtB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,KAAK,IAAI,GAC5D,IAAI;IAQP;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQ5B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,OAAO;IAcf;;OAEG;IACH,OAAO,CAAC,QAAQ;IAWhB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAQhB;;OAEG;IACH,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC;KACxB;CAMF;AAGD,eAAO,MAAM,mBAAmB,0BAAyC,CAAC;AAC1E,eAAe,mBAAmB,CAAC"}
|
package/dist/esm/vue/index.d.ts
CHANGED
|
@@ -25,10 +25,15 @@ export { PerformanceAnalytics } from './core/PerformanceAnalytics';
|
|
|
25
25
|
export { PerformanceDashboard } from './core/PerformanceDashboard';
|
|
26
26
|
export { AccessibilityManager } from './core/AccessibilityManager';
|
|
27
27
|
export { AnimationManager } from './core/AnimationManager';
|
|
28
|
+
export { GlobalScrollManager } from './core/GlobalScrollManager';
|
|
28
29
|
export type { EngineConfig, VisibleRange, FetchMoreCallback, EngineState, ScrollAnalysis } from './core/types';
|
|
29
30
|
export { ScrollObserver } from './platform/browser/ScrollObserver';
|
|
30
31
|
export { useLazyList } from './adapters/react/useLazyList';
|
|
31
32
|
export { LazyList } from './adapters/react/LazyList';
|
|
33
|
+
export { useLazyComponent } from './adapters/react/hooks/useLazyComponent';
|
|
34
|
+
export { withLazyRender } from './adapters/react/hooks/useLazyComponent';
|
|
35
|
+
export { createLazyComponent } from './adapters/react/components/withLazyRender';
|
|
36
|
+
export type { LazyMode } from './adapters/react/hooks/useLazyComponent';
|
|
32
37
|
export { LazyScroll, createLazyScroll } from './adapters/vanilla/lazyScroll';
|
|
33
38
|
declare class LazyScrollElementClass {
|
|
34
39
|
constructor();
|
|
@@ -1 +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,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/G,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
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,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/G,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,YAAY,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAGxE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAK7E,cAAM,sBAAsB;;IAE1B,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACrB,OAAO;IACP,eAAe;;;;IACf,MAAM,CAAC,eAAe;CACvB;AAGD,QAAA,MAAM,iBAAiB,+BAEG,CAAC;AAE3B,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAG7B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
3
|
|
|
3
4
|
interface EngineConfig {
|
|
4
5
|
itemHeight: number;
|
|
@@ -1352,6 +1353,61 @@ declare class AnimationManager {
|
|
|
1352
1353
|
updateConfig(config: Partial<AnimationConfig>): void;
|
|
1353
1354
|
}
|
|
1354
1355
|
|
|
1356
|
+
/**
|
|
1357
|
+
* Global Scroll Manager
|
|
1358
|
+
* Singleton that manages scroll events for all lazy-render components
|
|
1359
|
+
* Uses only 2 event listeners for ALL components (scroll + resize)
|
|
1360
|
+
*/
|
|
1361
|
+
interface ScrollManagerConfig {
|
|
1362
|
+
scrollThrottle?: number;
|
|
1363
|
+
resizeDebounce?: number;
|
|
1364
|
+
}
|
|
1365
|
+
declare class GlobalScrollManagerClass {
|
|
1366
|
+
private static instance;
|
|
1367
|
+
private listeners;
|
|
1368
|
+
private scrollThrottle;
|
|
1369
|
+
private resizeDebounce;
|
|
1370
|
+
private scrollHandler;
|
|
1371
|
+
private resizeHandler;
|
|
1372
|
+
private isInitialized;
|
|
1373
|
+
private constructor();
|
|
1374
|
+
static getInstance(config?: ScrollManagerConfig): GlobalScrollManagerClass;
|
|
1375
|
+
/**
|
|
1376
|
+
* Register a scroll listener
|
|
1377
|
+
* Only 2 event listeners total (scroll + resize) for ALL components
|
|
1378
|
+
*/
|
|
1379
|
+
register(id: string, container: HTMLElement, callback: (scrollTop: number, container: HTMLElement) => void): void;
|
|
1380
|
+
/**
|
|
1381
|
+
* Unregister a scroll listener
|
|
1382
|
+
*/
|
|
1383
|
+
unregister(id: string): void;
|
|
1384
|
+
/**
|
|
1385
|
+
* Initialize global event listeners
|
|
1386
|
+
* Only called once, regardless of how many components
|
|
1387
|
+
*/
|
|
1388
|
+
private initialize;
|
|
1389
|
+
/**
|
|
1390
|
+
* Cleanup event listeners
|
|
1391
|
+
*/
|
|
1392
|
+
private cleanup;
|
|
1393
|
+
/**
|
|
1394
|
+
* Throttle helper
|
|
1395
|
+
*/
|
|
1396
|
+
private throttle;
|
|
1397
|
+
/**
|
|
1398
|
+
* Debounce helper
|
|
1399
|
+
*/
|
|
1400
|
+
private debounce;
|
|
1401
|
+
/**
|
|
1402
|
+
* Get stats
|
|
1403
|
+
*/
|
|
1404
|
+
getStats(): {
|
|
1405
|
+
listenerCount: number;
|
|
1406
|
+
isInitialized: boolean;
|
|
1407
|
+
};
|
|
1408
|
+
}
|
|
1409
|
+
declare const GlobalScrollManager: GlobalScrollManagerClass;
|
|
1410
|
+
|
|
1355
1411
|
declare class ScrollObserver {
|
|
1356
1412
|
private container;
|
|
1357
1413
|
private callback;
|
|
@@ -1406,6 +1462,61 @@ interface LazyListProps extends EngineConfig {
|
|
|
1406
1462
|
}
|
|
1407
1463
|
declare const LazyList: React.ForwardRefExoticComponent<LazyListProps & React.RefAttributes<HTMLDivElement>>;
|
|
1408
1464
|
|
|
1465
|
+
type LazyMode = 'virtual' | 'visibility' | 'hybrid';
|
|
1466
|
+
interface UseLazyComponentProps {
|
|
1467
|
+
mode?: LazyMode;
|
|
1468
|
+
threshold?: number;
|
|
1469
|
+
rootMargin?: string;
|
|
1470
|
+
onVisible?: () => void;
|
|
1471
|
+
onHidden?: () => void;
|
|
1472
|
+
}
|
|
1473
|
+
interface UseLazyComponentReturn {
|
|
1474
|
+
isVisible: boolean;
|
|
1475
|
+
isInView: boolean;
|
|
1476
|
+
ref: React.RefObject<HTMLDivElement>;
|
|
1477
|
+
shouldRender: boolean;
|
|
1478
|
+
shouldMount: boolean;
|
|
1479
|
+
}
|
|
1480
|
+
/**
|
|
1481
|
+
* Hook for lazy component rendering with multiple modes
|
|
1482
|
+
*
|
|
1483
|
+
* Modes:
|
|
1484
|
+
* - virtual: Traditional virtual scrolling (render all, show visible)
|
|
1485
|
+
* - visibility: Intersection Observer (mount only when visible)
|
|
1486
|
+
* - hybrid: Combine both (best performance)
|
|
1487
|
+
*/
|
|
1488
|
+
declare function useLazyComponent(props?: UseLazyComponentProps): UseLazyComponentReturn;
|
|
1489
|
+
/**
|
|
1490
|
+
* HOC for lazy rendering components
|
|
1491
|
+
*
|
|
1492
|
+
* Usage:
|
|
1493
|
+
* const LazyCard = withLazyRender(Card);
|
|
1494
|
+
*
|
|
1495
|
+
* <LazyCard mode="hybrid" />
|
|
1496
|
+
*/
|
|
1497
|
+
declare function withLazyRender<P extends object>(WrappedComponent: React.ComponentType<P & {
|
|
1498
|
+
mode?: LazyMode;
|
|
1499
|
+
}>): (props: P) => react_jsx_runtime.JSX.Element;
|
|
1500
|
+
|
|
1501
|
+
interface WithLazyRenderProps {
|
|
1502
|
+
mode?: LazyMode;
|
|
1503
|
+
placeholder?: React.ReactNode;
|
|
1504
|
+
onVisible?: () => void;
|
|
1505
|
+
onHidden?: () => void;
|
|
1506
|
+
}
|
|
1507
|
+
/**
|
|
1508
|
+
* Higher-Order Component for lazy rendering
|
|
1509
|
+
*
|
|
1510
|
+
* Usage:
|
|
1511
|
+
* const LazyCard = withLazyRender(Card);
|
|
1512
|
+
*
|
|
1513
|
+
* <LazyCard mode="hybrid" placeholder={<div>Loading...</div>} />
|
|
1514
|
+
*/
|
|
1515
|
+
declare function createLazyComponent<P extends object>(WrappedComponent: React.ComponentType<P>, options?: {
|
|
1516
|
+
placeholder?: React.ReactNode;
|
|
1517
|
+
mode?: LazyMode;
|
|
1518
|
+
}): (props: P & WithLazyRenderProps) => react_jsx_runtime.JSX.Element;
|
|
1519
|
+
|
|
1409
1520
|
class LazyScroll {
|
|
1410
1521
|
constructor(container, config) {
|
|
1411
1522
|
this.container = container;
|
|
@@ -1555,5 +1666,5 @@ declare class LazyScrollElementClass {
|
|
|
1555
1666
|
}
|
|
1556
1667
|
declare const LazyScrollElement: typeof LazyScrollElementClass;
|
|
1557
1668
|
|
|
1558
|
-
export { AccessibilityManager, AdaptiveBufferCalculator, AnimationManager, BatchSizeOptimizer, ContentComplexityAnalyzer, DevicePerformanceMonitor, DynamicHeightEngine, Engine, GPUAccelerator, HeightMeasurementCache, IntelligentPagination, IntelligentScrollDetector, LazyList, LazyScroll, LazyScrollElement, MemoryManager, NetworkAwarePrefetchManager, NetworkAwareRequestQueue, NetworkSpeedDetector, PerformanceAnalytics, PerformanceDashboard, PerformanceOptimizer, PreemptiveCache, PrefetchManager, Priority, PriorityRequestQueue, RequestDeduplicator, RequestQueue, ScrollObserver, SmartPrefetchAlgorithm, VariableHeightManager, WindowManager, createLazyScroll, debounce, throttle, useLazyList };
|
|
1559
|
-
export type { EngineConfig, EngineState, FetchMoreCallback, ScrollAnalysis, VisibleRange };
|
|
1669
|
+
export { AccessibilityManager, AdaptiveBufferCalculator, AnimationManager, BatchSizeOptimizer, ContentComplexityAnalyzer, DevicePerformanceMonitor, DynamicHeightEngine, Engine, GPUAccelerator, GlobalScrollManager, HeightMeasurementCache, IntelligentPagination, IntelligentScrollDetector, LazyList, LazyScroll, LazyScrollElement, MemoryManager, NetworkAwarePrefetchManager, NetworkAwareRequestQueue, NetworkSpeedDetector, PerformanceAnalytics, PerformanceDashboard, PerformanceOptimizer, PreemptiveCache, PrefetchManager, Priority, PriorityRequestQueue, RequestDeduplicator, RequestQueue, ScrollObserver, SmartPrefetchAlgorithm, VariableHeightManager, WindowManager, createLazyComponent, createLazyScroll, debounce, throttle, useLazyComponent, useLazyList, withLazyRender };
|
|
1670
|
+
export type { EngineConfig, EngineState, FetchMoreCallback, LazyMode, ScrollAnalysis, VisibleRange };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lazy-render-virtual-scroll",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "A framework-agnostic virtual scrolling and lazy rendering solution",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -71,9 +71,9 @@
|
|
|
71
71
|
"url": "https://github.com/sannuk79/PROJECTS-AND-NPM-PACKAGES-?tab=readme-ov-file"
|
|
72
72
|
},
|
|
73
73
|
"bugs": {
|
|
74
|
-
"url": "https://
|
|
74
|
+
"url": "https://mypackagedoc.vercel.app/package/lazy-render"
|
|
75
75
|
},
|
|
76
|
-
"homepage": "https://
|
|
76
|
+
"homepage": "https://mypackagedoc.vercel.app/package/lazy-render",
|
|
77
77
|
"peerDependencies": {
|
|
78
78
|
"react": "^18.3.1",
|
|
79
79
|
"react-dom": "^18.3.1"
|