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.
Files changed (87) hide show
  1. package/README.md +172 -87
  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 +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;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"}
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.0.0",
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://github.com/sannuk79/lezzyrender/issues"
74
+ "url": "https://mypackagedoc.vercel.app/package/lazy-render"
75
75
  },
76
- "homepage": "https://github.com/sannuk79/lezzyrender#readme",
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"