lazy-render-virtual-scroll 2.0.0 → 2.1.0

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 (87) hide show
  1. package/README.md +511 -75
  2. package/dist/cjs/adapters/react/adapters/react/components/withLazyRender.d.ts +22 -0
  3. package/dist/cjs/adapters/react/adapters/react/components/withLazyRender.d.ts.map +1 -0
  4. package/dist/cjs/adapters/react/adapters/react/hooks/useLazyComponent.d.ts +38 -0
  5. package/dist/cjs/adapters/react/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
  6. package/dist/cjs/adapters/react/components/withLazyRender.d.ts +22 -0
  7. package/dist/cjs/adapters/react/components/withLazyRender.d.ts.map +1 -0
  8. package/dist/cjs/adapters/react/core/GlobalScrollManager.d.ts +61 -0
  9. package/dist/cjs/adapters/react/core/GlobalScrollManager.d.ts.map +1 -0
  10. package/dist/cjs/adapters/react/hooks/useLazyComponent.d.ts +38 -0
  11. package/dist/cjs/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
  12. package/dist/cjs/adapters/react/index.d.ts +5 -0
  13. package/dist/cjs/adapters/react/index.d.ts.map +1 -1
  14. package/dist/cjs/angular/adapters/react/components/withLazyRender.d.ts +22 -0
  15. package/dist/cjs/angular/adapters/react/components/withLazyRender.d.ts.map +1 -0
  16. package/dist/cjs/angular/adapters/react/hooks/useLazyComponent.d.ts +38 -0
  17. package/dist/cjs/angular/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
  18. package/dist/cjs/angular/core/GlobalScrollManager.d.ts +61 -0
  19. package/dist/cjs/angular/core/GlobalScrollManager.d.ts.map +1 -0
  20. package/dist/cjs/angular/index.d.ts +5 -0
  21. package/dist/cjs/angular/index.d.ts.map +1 -1
  22. package/dist/cjs/core/GlobalScrollManager.d.ts +61 -0
  23. package/dist/cjs/core/GlobalScrollManager.d.ts.map +1 -0
  24. package/dist/cjs/index.d.ts +5 -0
  25. package/dist/cjs/index.d.ts.map +1 -1
  26. package/dist/cjs/index.js +269 -0
  27. package/dist/cjs/index.js.map +1 -1
  28. package/dist/cjs/svelte/adapters/react/components/withLazyRender.d.ts +22 -0
  29. package/dist/cjs/svelte/adapters/react/components/withLazyRender.d.ts.map +1 -0
  30. package/dist/cjs/svelte/adapters/react/hooks/useLazyComponent.d.ts +38 -0
  31. package/dist/cjs/svelte/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
  32. package/dist/cjs/svelte/core/GlobalScrollManager.d.ts +61 -0
  33. package/dist/cjs/svelte/core/GlobalScrollManager.d.ts.map +1 -0
  34. package/dist/cjs/svelte/index.d.ts +5 -0
  35. package/dist/cjs/svelte/index.d.ts.map +1 -1
  36. package/dist/cjs/vue/adapters/react/components/withLazyRender.d.ts +22 -0
  37. package/dist/cjs/vue/adapters/react/components/withLazyRender.d.ts.map +1 -0
  38. package/dist/cjs/vue/adapters/react/hooks/useLazyComponent.d.ts +38 -0
  39. package/dist/cjs/vue/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
  40. package/dist/cjs/vue/core/GlobalScrollManager.d.ts +61 -0
  41. package/dist/cjs/vue/core/GlobalScrollManager.d.ts.map +1 -0
  42. package/dist/cjs/vue/index.d.ts +5 -0
  43. package/dist/cjs/vue/index.d.ts.map +1 -1
  44. package/dist/esm/adapters/react/adapters/react/components/withLazyRender.d.ts +22 -0
  45. package/dist/esm/adapters/react/adapters/react/components/withLazyRender.d.ts.map +1 -0
  46. package/dist/esm/adapters/react/adapters/react/hooks/useLazyComponent.d.ts +38 -0
  47. package/dist/esm/adapters/react/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
  48. package/dist/esm/adapters/react/components/withLazyRender.d.ts +22 -0
  49. package/dist/esm/adapters/react/components/withLazyRender.d.ts.map +1 -0
  50. package/dist/esm/adapters/react/core/GlobalScrollManager.d.ts +61 -0
  51. package/dist/esm/adapters/react/core/GlobalScrollManager.d.ts.map +1 -0
  52. package/dist/esm/adapters/react/hooks/useLazyComponent.d.ts +38 -0
  53. package/dist/esm/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
  54. package/dist/esm/adapters/react/index.d.ts +5 -0
  55. package/dist/esm/adapters/react/index.d.ts.map +1 -1
  56. package/dist/esm/angular/adapters/react/components/withLazyRender.d.ts +22 -0
  57. package/dist/esm/angular/adapters/react/components/withLazyRender.d.ts.map +1 -0
  58. package/dist/esm/angular/adapters/react/hooks/useLazyComponent.d.ts +38 -0
  59. package/dist/esm/angular/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
  60. package/dist/esm/angular/core/GlobalScrollManager.d.ts +61 -0
  61. package/dist/esm/angular/core/GlobalScrollManager.d.ts.map +1 -0
  62. package/dist/esm/angular/index.d.ts +5 -0
  63. package/dist/esm/angular/index.d.ts.map +1 -1
  64. package/dist/esm/core/GlobalScrollManager.d.ts +61 -0
  65. package/dist/esm/core/GlobalScrollManager.d.ts.map +1 -0
  66. package/dist/esm/index.d.ts +5 -0
  67. package/dist/esm/index.d.ts.map +1 -1
  68. package/dist/esm/index.js +266 -1
  69. package/dist/esm/index.js.map +1 -1
  70. package/dist/esm/svelte/adapters/react/components/withLazyRender.d.ts +22 -0
  71. package/dist/esm/svelte/adapters/react/components/withLazyRender.d.ts.map +1 -0
  72. package/dist/esm/svelte/adapters/react/hooks/useLazyComponent.d.ts +38 -0
  73. package/dist/esm/svelte/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
  74. package/dist/esm/svelte/core/GlobalScrollManager.d.ts +61 -0
  75. package/dist/esm/svelte/core/GlobalScrollManager.d.ts.map +1 -0
  76. package/dist/esm/svelte/index.d.ts +5 -0
  77. package/dist/esm/svelte/index.d.ts.map +1 -1
  78. package/dist/esm/vue/adapters/react/components/withLazyRender.d.ts +22 -0
  79. package/dist/esm/vue/adapters/react/components/withLazyRender.d.ts.map +1 -0
  80. package/dist/esm/vue/adapters/react/hooks/useLazyComponent.d.ts +38 -0
  81. package/dist/esm/vue/adapters/react/hooks/useLazyComponent.d.ts.map +1 -0
  82. package/dist/esm/vue/core/GlobalScrollManager.d.ts +61 -0
  83. package/dist/esm/vue/core/GlobalScrollManager.d.ts.map +1 -0
  84. package/dist/esm/vue/index.d.ts +5 -0
  85. package/dist/esm/vue/index.d.ts.map +1 -1
  86. package/dist/index.d.ts +113 -2
  87. package/package.json +1 -1
@@ -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,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,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"}
@@ -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"}
@@ -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;AAGrD,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"}
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"}
@@ -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;AAGrD,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"}
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,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;AAGrD,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"}
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"}