lazy-render-virtual-scroll 1.0.6 → 1.0.8
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 +14 -1
- package/dist/cjs/adapters/angular/lazy-scroll.component.d.ts +28 -0
- package/dist/cjs/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
- package/dist/cjs/adapters/angular/lazy-scroll.directive.d.ts +21 -0
- package/dist/cjs/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
- package/dist/cjs/adapters/index.d.ts +7 -0
- package/dist/cjs/adapters/index.d.ts.map +1 -0
- package/dist/cjs/adapters/svelte/lazyScrollAction.d.ts +13 -0
- package/dist/cjs/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
- package/dist/cjs/adapters/vue/useLazyScroll.d.ts +13 -0
- package/dist/cjs/adapters/vue/useLazyScroll.d.ts.map +1 -0
- package/dist/cjs/core/AdaptiveBufferCalculator.d.ts +46 -0
- package/dist/cjs/core/AdaptiveBufferCalculator.d.ts.map +1 -0
- package/dist/cjs/core/ContentComplexityAnalyzer.d.ts +13 -0
- package/dist/cjs/core/ContentComplexityAnalyzer.d.ts.map +1 -0
- package/dist/cjs/core/DevicePerformanceMonitor.d.ts +22 -0
- package/dist/cjs/core/DevicePerformanceMonitor.d.ts.map +1 -0
- package/dist/cjs/core/Engine.d.ts +5 -1
- package/dist/cjs/core/Engine.d.ts.map +1 -1
- package/dist/cjs/core/GPUAccelerator.d.ts +23 -0
- package/dist/cjs/core/GPUAccelerator.d.ts.map +1 -0
- package/dist/cjs/core/MemoryManager.d.ts +33 -0
- package/dist/cjs/core/MemoryManager.d.ts.map +1 -0
- package/dist/cjs/core/PerformanceOptimizer.d.ts +39 -0
- package/dist/cjs/core/PerformanceOptimizer.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1486 -14
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/adapters/angular/lazy-scroll.component.d.ts +28 -0
- package/dist/esm/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
- package/dist/esm/adapters/angular/lazy-scroll.directive.d.ts +21 -0
- package/dist/esm/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
- package/dist/esm/adapters/index.d.ts +7 -0
- package/dist/esm/adapters/index.d.ts.map +1 -0
- package/dist/esm/adapters/svelte/lazyScrollAction.d.ts +13 -0
- package/dist/esm/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
- package/dist/esm/adapters/vue/useLazyScroll.d.ts +13 -0
- package/dist/esm/adapters/vue/useLazyScroll.d.ts.map +1 -0
- package/dist/esm/core/AdaptiveBufferCalculator.d.ts +46 -0
- package/dist/esm/core/AdaptiveBufferCalculator.d.ts.map +1 -0
- package/dist/esm/core/ContentComplexityAnalyzer.d.ts +13 -0
- package/dist/esm/core/ContentComplexityAnalyzer.d.ts.map +1 -0
- package/dist/esm/core/DevicePerformanceMonitor.d.ts +22 -0
- package/dist/esm/core/DevicePerformanceMonitor.d.ts.map +1 -0
- package/dist/esm/core/Engine.d.ts +5 -1
- package/dist/esm/core/Engine.d.ts.map +1 -1
- package/dist/esm/core/GPUAccelerator.d.ts +23 -0
- package/dist/esm/core/GPUAccelerator.d.ts.map +1 -0
- package/dist/esm/core/MemoryManager.d.ts +33 -0
- package/dist/esm/core/MemoryManager.d.ts.map +1 -0
- package/dist/esm/core/PerformanceOptimizer.d.ts +39 -0
- package/dist/esm/core/PerformanceOptimizer.d.ts.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1474 -15
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +531 -2
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -28,10 +28,23 @@ A framework-agnostic virtual scrolling and lazy rendering solution that efficien
|
|
|
28
28
|
- **Framework Agnostic Core**: Pure logic implementation that works across different environments
|
|
29
29
|
- **Virtual Scrolling**: Only renders visible items to improve performance
|
|
30
30
|
- **Intelligent Scroll Detection**: Analyzes scroll velocity, direction, and patterns
|
|
31
|
-
- **Adaptive Buffer Management**: Dynamically adjusts buffer size based on
|
|
31
|
+
- **Adaptive Buffer Management**: Dynamically adjusts buffer size based on multiple factors
|
|
32
32
|
- **Smart Prefetching**: Loads data ahead of user scroll to prevent loading gaps
|
|
33
|
+
- **Network Awareness**: Adapts to network conditions and bandwidth limitations
|
|
34
|
+
- **Device Performance Monitoring**: Adjusts behavior based on device capabilities
|
|
35
|
+
- **Content Complexity Analysis**: Optimizes for different content types and complexity
|
|
33
36
|
- **Memory Efficient**: Automatically cleans up off-screen elements
|
|
37
|
+
- **Multi-Framework Support**: Easy integration with React, Vue, Angular, Svelte, and vanilla JavaScript
|
|
38
|
+
- **Advanced Performance Optimization**: Frame-rate optimized updates and GPU acceleration
|
|
39
|
+
- **Memory Management**: Intelligent caching and cleanup for optimal memory usage
|
|
40
|
+
- **GPU Acceleration**: Hardware-accelerated rendering for smooth performance
|
|
41
|
+
- **Frame Budget Optimization**: Limits updates to maintain 60fps performance
|
|
42
|
+
- **Batch Update Processing**: Reduces DOM manipulations for better performance
|
|
34
43
|
- **React Adapter**: Easy integration with React applications
|
|
44
|
+
- **Vue Adapter**: Composition API integration with Vue 3
|
|
45
|
+
- **Angular Adapter**: Directive and component for Angular applications
|
|
46
|
+
- **Svelte Adapter**: Action and component for Svelte applications
|
|
47
|
+
- **Vanilla JS Support**: Web Components and plain JavaScript implementation
|
|
35
48
|
- **Configurable Buffer**: Adjustable buffer size for optimal performance
|
|
36
49
|
- **Overscan Support**: Additional buffer for smoother scrolling
|
|
37
50
|
- **Predictive Loading**: Anticipates user needs based on scroll patterns
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { TemplateRef, AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
|
+
export declare class LazyScrollComponent implements AfterViewInit, OnDestroy {
|
|
3
|
+
items: any[];
|
|
4
|
+
itemHeight: number;
|
|
5
|
+
viewportHeight: number;
|
|
6
|
+
bufferSize: number;
|
|
7
|
+
fetchMore: () => Promise<any>;
|
|
8
|
+
visibleRangeChange: any;
|
|
9
|
+
loadingChange: any;
|
|
10
|
+
itemTemplate: TemplateRef<any>;
|
|
11
|
+
visibleRange: {
|
|
12
|
+
start: number;
|
|
13
|
+
end: number;
|
|
14
|
+
};
|
|
15
|
+
isLoading: boolean;
|
|
16
|
+
get topPadding(): number;
|
|
17
|
+
get bottomPadding(): number;
|
|
18
|
+
get visibleItems(): any[];
|
|
19
|
+
ngAfterViewInit(): void;
|
|
20
|
+
ngOnDestroy(): void;
|
|
21
|
+
onVisibleRangeChange(range: {
|
|
22
|
+
start: number;
|
|
23
|
+
end: number;
|
|
24
|
+
}): void;
|
|
25
|
+
onLoadingChange(loading: boolean): void;
|
|
26
|
+
trackByFn(index: number, item: any): any;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=lazy-scroll.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-scroll.component.d.ts","sourceRoot":"","sources":["../../../src/adapters/angular/lazy-scroll.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwD,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG5H,qBAwDa,mBAAoB,YAAW,aAAa,EAAE,SAAS;IACzD,KAAK,EAAE,GAAG,EAAE,CAAM;IAClB,UAAU,EAAE,MAAM,CAAM;IACxB,cAAc,EAAE,MAAM,CAAO;IAC7B,UAAU,EAAE,MAAM,CAAK;IACvB,SAAS,EAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAE9B,kBAAkB,MAAsD;IACxE,aAAa,MAA+B;IAGtD,YAAY,EAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,YAAY;;;MAAwB;IACpC,SAAS,UAAS;IAElB,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,YAAY,IAAI,GAAG,EAAE,CAExB;IAED,eAAe;IAIf,WAAW;IAIX,oBAAoB,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAK1D,eAAe,CAAC,OAAO,EAAE,OAAO;IAKhC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG;CAGzC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ElementRef, OnInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { FetchMoreCallback } from '../../core/types';
|
|
3
|
+
export declare class LazyScrollDirective implements OnInit, OnDestroy {
|
|
4
|
+
private el;
|
|
5
|
+
items: any[];
|
|
6
|
+
itemHeight: number;
|
|
7
|
+
viewportHeight: number;
|
|
8
|
+
bufferSize: number;
|
|
9
|
+
fetchMore: FetchMoreCallback;
|
|
10
|
+
visibleRangeChange: any;
|
|
11
|
+
loadingChange: any;
|
|
12
|
+
private engine;
|
|
13
|
+
private scrollListener;
|
|
14
|
+
constructor(el: ElementRef);
|
|
15
|
+
ngOnInit(): void;
|
|
16
|
+
ngOnDestroy(): void;
|
|
17
|
+
private onScroll;
|
|
18
|
+
refresh(): void;
|
|
19
|
+
getVisibleRange(): import("../../core/types").VisibleRange;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=lazy-scroll.directive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-scroll.directive.d.ts","sourceRoot":"","sources":["../../../src/adapters/angular/lazy-scroll.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,EAAE,SAAS,EAA+B,MAAM,eAAe,CAAC;AAEtG,OAAO,EAAgB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEnE,qBAGa,mBAAoB,YAAW,MAAM,EAAE,SAAS;IAa/C,OAAO,CAAC,EAAE;IAZb,KAAK,EAAE,GAAG,EAAE,CAAM;IAClB,UAAU,EAAE,MAAM,CAAM;IACxB,cAAc,EAAE,MAAM,CAAO;IAC7B,UAAU,EAAE,MAAM,CAAK;IACvB,SAAS,EAAG,iBAAiB,CAAC;IAE7B,kBAAkB,MAAsD;IACxE,aAAa,MAA+B;IAEtD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,cAAc,CAAyC;gBAE3C,EAAE,EAAE,UAAU;IAElC,QAAQ;IAoBR,WAAW;IAWX,OAAO,CAAC,QAAQ;IAYhB,OAAO;IAQP,eAAe;CAMhB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { useLazyScroll } from './vue/useLazyScroll';
|
|
2
|
+
export { LazyScrollDirective } from './angular/lazy-scroll.directive';
|
|
3
|
+
export { LazyScrollComponent } from './angular/lazy-scroll.component';
|
|
4
|
+
export { lazyScroll } from './svelte/lazyScrollAction';
|
|
5
|
+
export { LazyScroll, createLazyScroll } from './vanilla/lazyScroll';
|
|
6
|
+
export { default as LazyScrollElement } from './vanilla/LazyScrollElement';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAIvD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FetchMoreCallback } from '../../core/types';
|
|
2
|
+
interface LazyScrollConfig {
|
|
3
|
+
itemHeight: number;
|
|
4
|
+
viewportHeight: number;
|
|
5
|
+
bufferSize?: number;
|
|
6
|
+
fetchMore: FetchMoreCallback;
|
|
7
|
+
}
|
|
8
|
+
export declare function lazyScroll(node: HTMLElement, config: LazyScrollConfig): {
|
|
9
|
+
update(newConfig: LazyScrollConfig): void;
|
|
10
|
+
destroy(): void;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=lazyScrollAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazyScrollAction.d.ts","sourceRoot":"","sources":["../../../src/adapters/svelte/lazyScrollAction.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEnE,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB;sBAsBhD,gBAAgB;;EAgBrC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { EngineConfig, FetchMoreCallback } from '../../core/types';
|
|
2
|
+
interface LazyScrollConfig extends EngineConfig {
|
|
3
|
+
fetchMore: FetchMoreCallback;
|
|
4
|
+
}
|
|
5
|
+
export declare const useLazyScroll: (config: LazyScrollConfig) => {
|
|
6
|
+
visibleRange: any;
|
|
7
|
+
loadedItems: any;
|
|
8
|
+
isLoading: any;
|
|
9
|
+
containerRef: any;
|
|
10
|
+
refresh: () => void;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=useLazyScroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLazyScroll.d.ts","sourceRoot":"","sources":["../../../src/adapters/vue/useLazyScroll.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAgB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,UAAU,gBAAiB,SAAQ,YAAY;IAC7C,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED,eAAO,MAAM,aAAa,GAAI,QAAQ,gBAAgB;;;;;;CA4DrD,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export declare class AdaptiveBufferCalculator {
|
|
2
|
+
private scrollFactor;
|
|
3
|
+
private networkFactor;
|
|
4
|
+
private performanceFactor;
|
|
5
|
+
private contentFactor;
|
|
6
|
+
private performanceMonitor;
|
|
7
|
+
private contentAnalyzer;
|
|
8
|
+
constructor();
|
|
9
|
+
calculateOptimalBuffer(params: {
|
|
10
|
+
scrollVelocity: number;
|
|
11
|
+
networkQuality: 'excellent' | 'good' | 'poor' | 'offline';
|
|
12
|
+
baseBuffer: number;
|
|
13
|
+
visibleItems: any[];
|
|
14
|
+
}): Promise<number>;
|
|
15
|
+
private calculateScrollBuffer;
|
|
16
|
+
private calculateNetworkAdjustment;
|
|
17
|
+
private calculatePerformanceAdjustment;
|
|
18
|
+
private calculateContentAdjustment;
|
|
19
|
+
getAdaptiveInsights(params: {
|
|
20
|
+
scrollVelocity: number;
|
|
21
|
+
networkQuality: 'excellent' | 'good' | 'poor' | 'offline';
|
|
22
|
+
baseBuffer: number;
|
|
23
|
+
visibleItems: any[];
|
|
24
|
+
}): Promise<{
|
|
25
|
+
currentBuffer: number;
|
|
26
|
+
performance: {
|
|
27
|
+
frameRate: number;
|
|
28
|
+
score: number;
|
|
29
|
+
};
|
|
30
|
+
network: {
|
|
31
|
+
quality: string;
|
|
32
|
+
adjustment: number;
|
|
33
|
+
};
|
|
34
|
+
complexity: {
|
|
35
|
+
score: number;
|
|
36
|
+
breakdown: any;
|
|
37
|
+
};
|
|
38
|
+
factors: {
|
|
39
|
+
scroll: number;
|
|
40
|
+
network: number;
|
|
41
|
+
performance: number;
|
|
42
|
+
content: number;
|
|
43
|
+
};
|
|
44
|
+
}>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=AdaptiveBufferCalculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdaptiveBufferCalculator.d.ts","sourceRoot":"","sources":["../../src/core/AdaptiveBufferCalculator.ts"],"names":[],"mappings":"AAGA,qBAAa,wBAAwB;IACnC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,aAAa,CAAe;IAEpC,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,eAAe,CAA4B;;IAQ7C,sBAAsB,CAAC,MAAM,EAAE;QACnC,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;QAC1D,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,GAAG,EAAE,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BnB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,8BAA8B;IAKtC,OAAO,CAAC,0BAA0B;IAM5B,mBAAmB,CAAC,MAAM,EAAE;QAChC,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;QAC1D,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,GAAG,EAAE,CAAC;KACrB,GAAG,OAAO,CAAC;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAClD,OAAO,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;QACjD,UAAU,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,GAAG,CAAA;SAAE,CAAC;QAC9C,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;CA2BH"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class ContentComplexityAnalyzer {
|
|
2
|
+
analyzeContentComplexity(items: any[]): number;
|
|
3
|
+
private analyzeTextComplexity;
|
|
4
|
+
private analyzeMediaComplexity;
|
|
5
|
+
private analyzeComponentComplexity;
|
|
6
|
+
getComplexityInsights(items: any[]): {
|
|
7
|
+
averageComplexity: number;
|
|
8
|
+
textComplexity: number;
|
|
9
|
+
mediaComplexity: number;
|
|
10
|
+
componentComplexity: number;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ContentComplexityAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentComplexityAnalyzer.d.ts","sourceRoot":"","sources":["../../src/core/ContentComplexityAnalyzer.ts"],"names":[],"mappings":"AAAA,qBAAa,yBAAyB;IAEpC,wBAAwB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM;IAkB9C,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,0BAA0B;IAiBlC,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG;QACnC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;KAC7B;CAyBF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare class DevicePerformanceMonitor {
|
|
2
|
+
private frameRateHistory;
|
|
3
|
+
private memoryUsageHistory;
|
|
4
|
+
private gcMonitoring;
|
|
5
|
+
private readonly HISTORY_SIZE;
|
|
6
|
+
constructor();
|
|
7
|
+
getFrameRate(): Promise<number>;
|
|
8
|
+
getAverageFrameRate(): number;
|
|
9
|
+
getMemoryInfo(): {
|
|
10
|
+
used: number;
|
|
11
|
+
total: number;
|
|
12
|
+
} | null;
|
|
13
|
+
assessPerformance(): Promise<number>;
|
|
14
|
+
private setupPerformanceMonitoring;
|
|
15
|
+
getPerformanceInsights(): {
|
|
16
|
+
frameRate: number;
|
|
17
|
+
performanceScore: number;
|
|
18
|
+
memoryUsed: number | null;
|
|
19
|
+
memoryTotal: number | null;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=DevicePerformanceMonitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DevicePerformanceMonitor.d.ts","sourceRoot":"","sources":["../../src/core/DevicePerformanceMonitor.ts"],"names":[],"mappings":"AAAA,qBAAa,wBAAwB;IACnC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;;IAO7B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAyBrC,mBAAmB,IAAI,MAAM;IAO7B,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE,GAAG,IAAI;IAelD,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAgB1C,OAAO,CAAC,0BAA0B;IAQlC,sBAAsB,IAAI;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B;CAcF"}
|
|
@@ -8,6 +8,10 @@ export declare class Engine {
|
|
|
8
8
|
private networkDetector;
|
|
9
9
|
private networkAwarePrefetchManager;
|
|
10
10
|
private networkAwareRequestQueue;
|
|
11
|
+
private adaptiveBufferCalculator;
|
|
12
|
+
private performanceOptimizer;
|
|
13
|
+
private memoryManager;
|
|
14
|
+
private gpuAccelerator;
|
|
11
15
|
private state;
|
|
12
16
|
private fetchMoreCallback;
|
|
13
17
|
private totalItems;
|
|
@@ -15,7 +19,7 @@ export declare class Engine {
|
|
|
15
19
|
/**
|
|
16
20
|
* Update scroll position and recalculate visible range with intelligent detection
|
|
17
21
|
*/
|
|
18
|
-
updateScrollPosition(scrollTop: number): void
|
|
22
|
+
updateScrollPosition(scrollTop: number): Promise<void>;
|
|
19
23
|
/**
|
|
20
24
|
* Get the current visible range
|
|
21
25
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../src/core/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../src/core/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAarF,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,yBAAyB,CAA4B;IAC7D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,2BAA2B,CAA8B;IACjE,OAAO,CAAC,wBAAwB,CAA2B;IAC3D,OAAO,CAAC,wBAAwB,CAA2B;IAC3D,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,YAAY;IAiChC;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC5D;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAsBzC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBhC;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAIvD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQlE;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare class GPUAccelerator {
|
|
2
|
+
private gpuAccelerationEnabled;
|
|
3
|
+
private gpuElements;
|
|
4
|
+
private animationFrameId;
|
|
5
|
+
constructor();
|
|
6
|
+
private isGPUSupported;
|
|
7
|
+
enableForElement(element: HTMLElement): void;
|
|
8
|
+
disableForElement(element: HTMLElement): void;
|
|
9
|
+
enableForElements(elements: HTMLElement[]): void;
|
|
10
|
+
batchUpdate(elements: HTMLElement[], enable: boolean): void;
|
|
11
|
+
optimizeScrollContainer(container: HTMLElement): void;
|
|
12
|
+
optimizeItem(item: HTMLElement): void;
|
|
13
|
+
getStatus(): {
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
supported: boolean;
|
|
16
|
+
elementCount: number;
|
|
17
|
+
};
|
|
18
|
+
optimizeForScenario(scenario: 'scrolling' | 'animation' | 'static'): void;
|
|
19
|
+
cleanup(): void;
|
|
20
|
+
isAccelerated(element: HTMLElement): boolean;
|
|
21
|
+
getRecommendations(): string[];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=GPUAccelerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GPUAccelerator.d.ts","sourceRoot":"","sources":["../../src/core/GPUAccelerator.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACzB,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,gBAAgB,CAAuB;;IAO/C,OAAO,CAAC,cAAc;IAQtB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAc5C,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAc7C,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI;IAKhD,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAW3D,uBAAuB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAUrD,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IASrC,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB;IAcD,mBAAmB,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,IAAI;IAqBzE,OAAO,IAAI,IAAI;IAUf,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;IAK5C,kBAAkB,IAAI,MAAM,EAAE;CAa/B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare class MemoryManager {
|
|
2
|
+
private itemCache;
|
|
3
|
+
private maxCacheSize;
|
|
4
|
+
private cleanupThreshold;
|
|
5
|
+
private visibleRange;
|
|
6
|
+
private totalItems;
|
|
7
|
+
constructor(maxCacheSize?: number);
|
|
8
|
+
setVisibleRange(range: {
|
|
9
|
+
start: number;
|
|
10
|
+
end: number;
|
|
11
|
+
}): void;
|
|
12
|
+
setTotalItems(total: number): void;
|
|
13
|
+
get(key: number): any | null;
|
|
14
|
+
set(key: number, value: any): void;
|
|
15
|
+
has(key: number): boolean;
|
|
16
|
+
delete(key: number): boolean;
|
|
17
|
+
clear(): void;
|
|
18
|
+
cleanupCache(): void;
|
|
19
|
+
private getDistanceFromVisible;
|
|
20
|
+
getStats(): {
|
|
21
|
+
size: number;
|
|
22
|
+
maxCacheSize: number;
|
|
23
|
+
visibleItems: number;
|
|
24
|
+
offScreenItems: number;
|
|
25
|
+
memoryEstimate: number;
|
|
26
|
+
};
|
|
27
|
+
private estimateObjectSize;
|
|
28
|
+
pruneEssential(): void;
|
|
29
|
+
private isEssential;
|
|
30
|
+
getSize(): number;
|
|
31
|
+
getKeys(): number[];
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=MemoryManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryManager.d.ts","sourceRoot":"","sources":["../../src/core/MemoryManager.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,YAAY,CAAwD;IAC5E,OAAO,CAAC,UAAU,CAAa;gBAEnB,YAAY,GAAE,MAAa;IAKvC,eAAe,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAK5D,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAK5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAUlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK5B,KAAK,IAAI,IAAI;IAKb,YAAY,IAAI,IAAI;IAwCpB,OAAO,CAAC,sBAAsB;IAa9B,QAAQ,IAAI;QACV,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;KACxB;IAuBD,OAAO,CAAC,kBAAkB;IAsB1B,cAAc,IAAI,IAAI;IAkBtB,OAAO,CAAC,WAAW;IAOnB,OAAO,IAAI,MAAM;IAKjB,OAAO,IAAI,MAAM,EAAE;CAGpB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export declare class PerformanceOptimizer {
|
|
2
|
+
private frameBudget;
|
|
3
|
+
private lastFrameTime;
|
|
4
|
+
private animationFrameId;
|
|
5
|
+
private isOptimizing;
|
|
6
|
+
private lastUpdate;
|
|
7
|
+
private minUpdateInterval;
|
|
8
|
+
private updateQueue;
|
|
9
|
+
private isProcessingQueue;
|
|
10
|
+
private cleanupThreshold;
|
|
11
|
+
private gcInterval;
|
|
12
|
+
constructor();
|
|
13
|
+
scheduleOptimizedUpdate(updateFn: () => void): void;
|
|
14
|
+
private processUpdateQueue;
|
|
15
|
+
private getTimeRemaining;
|
|
16
|
+
optimizeMemory(cleanupFn: (startIndex: number, endIndex: number) => void, visibleRange: {
|
|
17
|
+
start: number;
|
|
18
|
+
end: number;
|
|
19
|
+
}): void;
|
|
20
|
+
enableGPUCssAcceleration(element: HTMLElement): void;
|
|
21
|
+
disableGPUCssAcceleration(element: HTMLElement): void;
|
|
22
|
+
getOptimizationProfile(): {
|
|
23
|
+
frameRate: number;
|
|
24
|
+
batchSize: number;
|
|
25
|
+
bufferMultiplier: number;
|
|
26
|
+
updateInterval: number;
|
|
27
|
+
};
|
|
28
|
+
private isLowEndDevice;
|
|
29
|
+
private setupPerformanceMonitoring;
|
|
30
|
+
getPerformanceInsights(): {
|
|
31
|
+
frameRate: number;
|
|
32
|
+
memoryUsage: number | null;
|
|
33
|
+
updateFrequency: number;
|
|
34
|
+
optimizationActive: boolean;
|
|
35
|
+
};
|
|
36
|
+
private getMemoryUsage;
|
|
37
|
+
cleanup(): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=PerformanceOptimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformanceOptimizer.d.ts","sourceRoot":"","sources":["../../src/core/PerformanceOptimizer.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,YAAY,CAAkB;IAGtC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,iBAAiB,CAAc;IAGvC,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,iBAAiB,CAAkB;IAG3C,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,UAAU,CAAuB;;IAOzC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;YA4BrC,kBAAkB;IA4BhC,OAAO,CAAC,gBAAgB;IAWxB,cAAc,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAe7H,wBAAwB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAQpD,yBAAyB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAOrD,sBAAsB,IAAI;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB;IAuBD,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,0BAA0B;IA6ClC,sBAAsB,IAAI;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,OAAO,CAAC;KAC7B;IASD,OAAO,CAAC,cAAc;IAStB,OAAO,IAAI,IAAI;CAYhB"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -6,7 +6,19 @@ export { IntelligentScrollDetector } from './core/IntelligentScrollDetector';
|
|
|
6
6
|
export { NetworkSpeedDetector } from './core/NetworkSpeedDetector';
|
|
7
7
|
export { NetworkAwarePrefetchManager } from './core/NetworkAwarePrefetchManager';
|
|
8
8
|
export { NetworkAwareRequestQueue } from './core/NetworkAwareRequestQueue';
|
|
9
|
+
export { AdaptiveBufferCalculator } from './core/AdaptiveBufferCalculator';
|
|
10
|
+
export { DevicePerformanceMonitor } from './core/DevicePerformanceMonitor';
|
|
11
|
+
export { ContentComplexityAnalyzer } from './core/ContentComplexityAnalyzer';
|
|
12
|
+
export { PerformanceOptimizer } from './core/PerformanceOptimizer';
|
|
13
|
+
export { MemoryManager } from './core/MemoryManager';
|
|
14
|
+
export { GPUAccelerator } from './core/GPUAccelerator';
|
|
9
15
|
export type { EngineConfig, VisibleRange, FetchMoreCallback, EngineState, ScrollAnalysis } from './core/types';
|
|
16
|
+
export { useLazyScroll } from './adapters/vue/useLazyScroll';
|
|
17
|
+
export { LazyScrollDirective } from './adapters/angular/lazy-scroll.directive';
|
|
18
|
+
export { LazyScrollComponent } from './adapters/angular/lazy-scroll.component';
|
|
19
|
+
export { lazyScroll } from './adapters/svelte/lazyScrollAction';
|
|
20
|
+
export { LazyScroll, createLazyScroll } from './adapters/vanilla/lazyScroll';
|
|
21
|
+
export { default as LazyScrollElement } from './adapters/vanilla/LazyScrollElement';
|
|
10
22
|
export { ScrollObserver } from './platform/browser/ScrollObserver';
|
|
11
23
|
export { useLazyList } from './adapters/react/useLazyList';
|
|
12
24
|
export { LazyList } from './adapters/react/LazyList';
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -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,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,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,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/G,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAI7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAG/E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAIhE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAGpF,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|