@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.9 → 0.2.11
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/CHANGELOG.md +1 -1
- package/dist/components/ui/accessibility-demo.esm.js +30 -24
- package/dist/components/ui/accessibility-demo.js +30 -24
- package/dist/components/ui/advanced-component-architecture-demo.esm.js +235 -179
- package/dist/components/ui/advanced-component-architecture-demo.js +235 -179
- package/dist/components/ui/advanced-transition-system-demo.esm.js +110 -64
- package/dist/components/ui/advanced-transition-system-demo.js +110 -64
- package/dist/components/ui/advanced-transition-system.esm.js +166 -122
- package/dist/components/ui/advanced-transition-system.js +166 -122
- package/dist/components/ui/animation/animated-container.esm.js +52 -29
- package/dist/components/ui/animation/animated-container.js +52 -29
- package/dist/components/ui/animation/staggered-container.esm.js +18 -9
- package/dist/components/ui/animation/staggered-container.js +18 -9
- package/dist/components/ui/animation-demo.esm.js +67 -35
- package/dist/components/ui/animation-demo.js +67 -35
- package/dist/components/ui/badge.esm.js +9 -6
- package/dist/components/ui/badge.js +9 -6
- package/dist/components/ui/battery-conscious-animation-demo.esm.js +122 -87
- package/dist/components/ui/battery-conscious-animation-demo.js +122 -87
- package/dist/components/ui/border-radius-shadow-demo.esm.js +23 -12
- package/dist/components/ui/border-radius-shadow-demo.js +23 -12
- package/dist/components/ui/button.esm.js +8 -2
- package/dist/components/ui/button.js +8 -2
- package/dist/components/ui/card.esm.js +33 -8
- package/dist/components/ui/card.js +33 -8
- package/dist/components/ui/checkbox.esm.js +3 -3
- package/dist/components/ui/checkbox.js +3 -3
- package/dist/components/ui/color-preview.esm.js +68 -45
- package/dist/components/ui/color-preview.js +68 -45
- package/dist/components/ui/data-display/chart.esm.js +112 -84
- package/dist/components/ui/data-display/chart.js +112 -84
- package/dist/components/ui/data-display/data-grid-simple.esm.js +1 -1
- package/dist/components/ui/data-display/data-grid-simple.js +1 -1
- package/dist/components/ui/data-display/data-grid.esm.js +80 -67
- package/dist/components/ui/data-display/data-grid.js +80 -67
- package/dist/components/ui/data-display/list.esm.js +53 -45
- package/dist/components/ui/data-display/list.js +53 -45
- package/dist/components/ui/data-display/table.esm.js +62 -54
- package/dist/components/ui/data-display/table.js +62 -54
- package/dist/components/ui/data-display/timeline.esm.js +39 -34
- package/dist/components/ui/data-display/timeline.js +39 -34
- package/dist/components/ui/data-display/tree.esm.js +116 -84
- package/dist/components/ui/data-display/tree.js +116 -84
- package/dist/components/ui/data-display/types.esm.js +389 -364
- package/dist/components/ui/data-display/types.js +389 -364
- package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience-demo.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience.esm.js +124 -73
- package/dist/components/ui/enterprise-mobile-experience.js +124 -73
- package/dist/components/ui/feedback/alert.esm.js +22 -15
- package/dist/components/ui/feedback/alert.js +22 -15
- package/dist/components/ui/feedback/progress.esm.js +47 -24
- package/dist/components/ui/feedback/progress.js +47 -24
- package/dist/components/ui/feedback/skeleton.esm.js +39 -29
- package/dist/components/ui/feedback/skeleton.js +39 -29
- package/dist/components/ui/feedback/toast.esm.js +62 -38
- package/dist/components/ui/feedback/toast.js +62 -38
- package/dist/components/ui/feedback/types.esm.js +83 -83
- package/dist/components/ui/feedback/types.js +83 -83
- package/dist/components/ui/font-preview.esm.js +41 -39
- package/dist/components/ui/font-preview.js +41 -39
- package/dist/components/ui/form-demo.esm.js +150 -113
- package/dist/components/ui/form-demo.js +150 -113
- package/dist/components/ui/hardware-acceleration-demo.esm.js +137 -87
- package/dist/components/ui/hardware-acceleration-demo.js +137 -87
- package/dist/components/ui/input.esm.js +4 -1
- package/dist/components/ui/input.js +4 -1
- package/dist/components/ui/layout-demo.esm.js +81 -56
- package/dist/components/ui/layout-demo.js +81 -56
- package/dist/components/ui/layouts/adaptive-layout.esm.js +27 -8
- package/dist/components/ui/layouts/adaptive-layout.js +27 -8
- package/dist/components/ui/layouts/desktop-layout.esm.js +39 -19
- package/dist/components/ui/layouts/desktop-layout.js +39 -19
- package/dist/components/ui/layouts/mobile-layout.esm.js +19 -9
- package/dist/components/ui/layouts/mobile-layout.js +19 -9
- package/dist/components/ui/layouts/tablet-layout.esm.js +28 -14
- package/dist/components/ui/layouts/tablet-layout.js +28 -14
- package/dist/components/ui/mobile-form-validation.esm.js +120 -87
- package/dist/components/ui/mobile-form-validation.js +120 -87
- package/dist/components/ui/mobile-input-demo.esm.js +19 -13
- package/dist/components/ui/mobile-input-demo.js +19 -13
- package/dist/components/ui/mobile-input.esm.js +185 -120
- package/dist/components/ui/mobile-input.js +185 -120
- package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +128 -111
- package/dist/components/ui/mobile-skeleton-loading-demo.js +128 -111
- package/dist/components/ui/navigation/breadcrumb.esm.js +17 -14
- package/dist/components/ui/navigation/breadcrumb.js +17 -14
- package/dist/components/ui/navigation/index.esm.js +0 -1
- package/dist/components/ui/navigation/index.js +0 -1
- package/dist/components/ui/navigation/menu.esm.js +49 -35
- package/dist/components/ui/navigation/menu.js +49 -35
- package/dist/components/ui/navigation/navigation-demo.esm.js +81 -74
- package/dist/components/ui/navigation/navigation-demo.js +81 -74
- package/dist/components/ui/navigation/pagination.esm.js +62 -50
- package/dist/components/ui/navigation/pagination.js +62 -50
- package/dist/components/ui/navigation/sidebar.esm.js +56 -42
- package/dist/components/ui/navigation/sidebar.js +56 -42
- package/dist/components/ui/navigation/stepper.esm.js +34 -23
- package/dist/components/ui/navigation/stepper.js +34 -23
- package/dist/components/ui/navigation/tabs.esm.js +32 -21
- package/dist/components/ui/navigation/tabs.js +32 -21
- package/dist/components/ui/navigation/types.esm.js +196 -195
- package/dist/components/ui/navigation/types.js +196 -195
- package/dist/components/ui/overlay/backdrop.esm.js +17 -16
- package/dist/components/ui/overlay/backdrop.js +17 -16
- package/dist/components/ui/overlay/focus-manager.esm.js +21 -19
- package/dist/components/ui/overlay/focus-manager.js +21 -19
- package/dist/components/ui/overlay/index.esm.js +0 -2
- package/dist/components/ui/overlay/index.js +0 -2
- package/dist/components/ui/overlay/modal.esm.js +38 -34
- package/dist/components/ui/overlay/modal.js +38 -34
- package/dist/components/ui/overlay/overlay-manager.esm.js +25 -20
- package/dist/components/ui/overlay/overlay-manager.js +25 -20
- package/dist/components/ui/overlay/popover.esm.js +74 -58
- package/dist/components/ui/overlay/popover.js +74 -58
- package/dist/components/ui/overlay/portal.esm.js +7 -7
- package/dist/components/ui/overlay/portal.js +7 -7
- package/dist/components/ui/overlay/tooltip.esm.js +54 -39
- package/dist/components/ui/overlay/tooltip.js +54 -39
- package/dist/components/ui/overlay/types.esm.js +132 -131
- package/dist/components/ui/overlay/types.js +132 -131
- package/dist/components/ui/performance-demo.esm.js +135 -88
- package/dist/components/ui/performance-demo.js +135 -88
- package/dist/components/ui/semantic-input-system-demo.esm.js +117 -80
- package/dist/components/ui/semantic-input-system-demo.js +117 -80
- package/dist/components/ui/theme-customizer.esm.js +84 -52
- package/dist/components/ui/theme-customizer.js +84 -52
- package/dist/components/ui/theme-preview.esm.js +95 -43
- package/dist/components/ui/theme-preview.js +95 -43
- package/dist/components/ui/theme-switcher.esm.js +70 -44
- package/dist/components/ui/theme-switcher.js +70 -44
- package/dist/components/ui/theme-toggle.esm.js +3 -3
- package/dist/components/ui/theme-toggle.js +3 -3
- package/dist/components/ui/token-demo.esm.js +33 -21
- package/dist/components/ui/token-demo.js +33 -21
- package/dist/components/ui/touch-demo.esm.js +102 -73
- package/dist/components/ui/touch-demo.js +102 -73
- package/dist/components/ui/touch-friendly-interface-demo.esm.js +102 -64
- package/dist/components/ui/touch-friendly-interface-demo.js +102 -64
- package/dist/components/ui/touch-friendly-interface.esm.js +85 -61
- package/dist/components/ui/touch-friendly-interface.js +85 -61
- package/dist/hooks/use-accessibility-support.esm.js +115 -85
- package/dist/hooks/use-accessibility-support.js +115 -85
- package/dist/hooks/use-adaptive-layout.esm.js +56 -33
- package/dist/hooks/use-adaptive-layout.js +56 -33
- package/dist/hooks/use-advanced-patterns.esm.js +57 -42
- package/dist/hooks/use-advanced-patterns.js +57 -42
- package/dist/hooks/use-advanced-transition-system.esm.js +112 -71
- package/dist/hooks/use-advanced-transition-system.js +112 -71
- package/dist/hooks/use-animation-profile.esm.js +63 -34
- package/dist/hooks/use-animation-profile.js +63 -34
- package/dist/hooks/use-battery-animations.esm.js +80 -55
- package/dist/hooks/use-battery-animations.js +80 -55
- package/dist/hooks/use-battery-conscious-loading.esm.js +166 -123
- package/dist/hooks/use-battery-conscious-loading.js +166 -123
- package/dist/hooks/use-battery-optimization.esm.js +78 -55
- package/dist/hooks/use-battery-optimization.js +78 -55
- package/dist/hooks/use-battery-status.esm.js +73 -51
- package/dist/hooks/use-battery-status.js +73 -51
- package/dist/hooks/use-component-performance.esm.js +62 -47
- package/dist/hooks/use-component-performance.js +62 -47
- package/dist/hooks/use-device-loading-states.esm.js +152 -109
- package/dist/hooks/use-device-loading-states.js +152 -109
- package/dist/hooks/use-device.esm.js +25 -14
- package/dist/hooks/use-device.js +25 -14
- package/dist/hooks/use-enterprise-mobile-experience.esm.js +137 -88
- package/dist/hooks/use-enterprise-mobile-experience.js +137 -88
- package/dist/hooks/use-form-feedback.esm.js +124 -81
- package/dist/hooks/use-form-feedback.js +124 -81
- package/dist/hooks/use-form-performance.esm.js +127 -92
- package/dist/hooks/use-form-performance.js +127 -92
- package/dist/hooks/use-frame-rate.esm.js +56 -37
- package/dist/hooks/use-frame-rate.js +56 -37
- package/dist/hooks/use-gestures.esm.js +96 -72
- package/dist/hooks/use-gestures.js +96 -72
- package/dist/hooks/use-hardware-acceleration.esm.js +65 -37
- package/dist/hooks/use-hardware-acceleration.js +65 -37
- package/dist/hooks/use-input-accessibility.esm.js +157 -119
- package/dist/hooks/use-input-accessibility.js +157 -119
- package/dist/hooks/use-input-performance.esm.js +139 -104
- package/dist/hooks/use-input-performance.js +139 -104
- package/dist/hooks/use-layout-performance.esm.js +50 -29
- package/dist/hooks/use-layout-performance.js +50 -29
- package/dist/hooks/use-loading-accessibility.esm.js +209 -169
- package/dist/hooks/use-loading-accessibility.js +209 -169
- package/dist/hooks/use-loading-performance.esm.js +117 -93
- package/dist/hooks/use-loading-performance.js +117 -93
- package/dist/hooks/use-memory-usage.esm.js +57 -38
- package/dist/hooks/use-memory-usage.js +57 -38
- package/dist/hooks/use-mobile-form-layout.esm.js +111 -74
- package/dist/hooks/use-mobile-form-layout.js +111 -74
- package/dist/hooks/use-mobile-form-validation.esm.js +211 -144
- package/dist/hooks/use-mobile-form-validation.js +211 -144
- package/dist/hooks/use-mobile-keyboard-optimization.esm.js +154 -113
- package/dist/hooks/use-mobile-keyboard-optimization.js +154 -113
- package/dist/hooks/use-mobile-layout.esm.js +73 -51
- package/dist/hooks/use-mobile-layout.js +73 -51
- package/dist/hooks/use-mobile-optimization.esm.js +72 -44
- package/dist/hooks/use-mobile-optimization.js +72 -44
- package/dist/hooks/use-mobile-skeleton.esm.js +97 -64
- package/dist/hooks/use-mobile-skeleton.js +97 -64
- package/dist/hooks/use-mobile-touch.esm.js +128 -93
- package/dist/hooks/use-mobile-touch.js +128 -93
- package/dist/hooks/use-performance-throttling.esm.js +72 -48
- package/dist/hooks/use-performance-throttling.js +72 -48
- package/dist/hooks/use-performance.esm.js +90 -52
- package/dist/hooks/use-performance.js +90 -52
- package/dist/hooks/use-reusable-architecture.esm.js +94 -65
- package/dist/hooks/use-reusable-architecture.js +94 -65
- package/dist/hooks/use-semantic-input-types.esm.js +166 -124
- package/dist/hooks/use-semantic-input-types.js +166 -124
- package/dist/hooks/use-semantic-input.esm.js +178 -126
- package/dist/hooks/use-semantic-input.js +178 -126
- package/dist/hooks/use-tablet-layout.esm.js +67 -38
- package/dist/hooks/use-tablet-layout.js +67 -38
- package/dist/hooks/use-touch-friendly-input.esm.js +193 -149
- package/dist/hooks/use-touch-friendly-input.js +193 -149
- package/dist/hooks/use-touch-friendly-interface.esm.js +99 -67
- package/dist/hooks/use-touch-friendly-interface.js +99 -67
- package/dist/hooks/use-touch-optimization.esm.js +99 -72
- package/dist/hooks/use-touch-optimization.js +99 -72
- package/dist/index.esm.js +157 -281
- package/dist/index.js +157 -281
- package/dist/lib/utils.esm.js +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/plugins/theme-css-generator.esm.js +104 -55
- package/dist/plugins/theme-css-generator.js +104 -55
- package/dist/provider.esm.js +4 -4
- package/dist/provider.js +4 -4
- package/dist/styles.css +1 -1
- package/dist/theme.esm.js +633 -468
- package/dist/theme.js +633 -468
- package/dist/themes/ThemeContext.esm.js +15 -15
- package/dist/themes/ThemeContext.js +15 -15
- package/dist/themes/ThemeProvider.esm.js +25 -22
- package/dist/themes/ThemeProvider.js +25 -22
- package/dist/themes/accessibility.esm.js +147 -108
- package/dist/themes/accessibility.js +147 -108
- package/dist/themes/aria-patterns.esm.js +198 -162
- package/dist/themes/aria-patterns.js +198 -162
- package/dist/themes/base-themes.esm.js +14 -11
- package/dist/themes/base-themes.js +14 -11
- package/dist/themes/colorManager.esm.js +101 -83
- package/dist/themes/colorManager.js +101 -83
- package/dist/themes/examples/dark-theme.esm.js +133 -103
- package/dist/themes/examples/dark-theme.js +133 -103
- package/dist/themes/examples/minimal-theme.esm.js +83 -61
- package/dist/themes/examples/minimal-theme.js +83 -61
- package/dist/themes/focus-management.esm.js +202 -143
- package/dist/themes/focus-management.js +202 -143
- package/dist/themes/fontLoader.esm.js +28 -19
- package/dist/themes/fontLoader.js +28 -19
- package/dist/themes/high-contrast.esm.js +152 -104
- package/dist/themes/high-contrast.js +152 -104
- package/dist/themes/index.esm.js +1 -1
- package/dist/themes/index.js +1 -1
- package/dist/themes/inheritance.esm.js +35 -27
- package/dist/themes/inheritance.js +35 -27
- package/dist/themes/keyboard-navigation.esm.js +152 -123
- package/dist/themes/keyboard-navigation.js +152 -123
- package/dist/themes/motion-reduction.esm.js +193 -133
- package/dist/themes/motion-reduction.js +193 -133
- package/dist/themes/navigation.esm.js +146 -146
- package/dist/themes/navigation.js +146 -146
- package/dist/themes/screen-reader.esm.js +159 -94
- package/dist/themes/screen-reader.js +159 -94
- package/dist/themes/systemThemeDetector.esm.js +42 -34
- package/dist/themes/systemThemeDetector.js +42 -34
- package/dist/themes/themeCSSUpdater.esm.js +21 -9
- package/dist/themes/themeCSSUpdater.js +21 -9
- package/dist/themes/themePersistence.esm.js +68 -47
- package/dist/themes/themePersistence.js +68 -47
- package/dist/themes/themes/stan-design.esm.js +633 -468
- package/dist/themes/themes/stan-design.js +633 -468
- package/dist/themes/types.esm.js +301 -287
- package/dist/themes/types.js +301 -287
- package/dist/themes/useSystemTheme.esm.js +4 -4
- package/dist/themes/useSystemTheme.js +4 -4
- package/dist/themes/useTheme.esm.js +4 -4
- package/dist/themes/useTheme.js +4 -4
- package/dist/themes/validation.esm.js +128 -77
- package/dist/themes/validation.js +128 -77
- package/dist/tokens/index.esm.js +1 -2
- package/dist/tokens/index.js +1 -2
- package/dist/tokens/tokenExporter.esm.js +87 -61
- package/dist/tokens/tokenExporter.js +87 -61
- package/dist/tokens/tokenGenerator.esm.js +86 -77
- package/dist/tokens/tokenGenerator.js +86 -77
- package/dist/tokens/tokenManager.esm.js +64 -51
- package/dist/tokens/tokenManager.js +64 -51
- package/dist/tokens/tokenValidator.esm.js +193 -147
- package/dist/tokens/tokenValidator.js +193 -147
- package/dist/tokens/types.esm.js +49 -35
- package/dist/tokens/types.js +49 -35
- package/dist/utils/bundle-analyzer.esm.js +83 -65
- package/dist/utils/bundle-analyzer.js +83 -65
- package/dist/utils/bundle-splitting.esm.js +142 -117
- package/dist/utils/bundle-splitting.js +142 -117
- package/dist/utils/lazy-loading.esm.js +132 -106
- package/dist/utils/lazy-loading.js +132 -106
- package/dist/utils/performance-monitor.esm.js +170 -129
- package/dist/utils/performance-monitor.js +170 -129
- package/dist/utils/tree-shaking.esm.js +69 -61
- package/dist/utils/tree-shaking.js +69 -61
- package/package.json +1 -1
- package/src/index.ts +146 -146
|
@@ -2,70 +2,74 @@ import React from 'react';
|
|
|
2
2
|
|
|
3
3
|
// Lazy loading utilities for code splitting and dynamic imports
|
|
4
4
|
export interface LazyLoadConfig {
|
|
5
|
-
enabled;
|
|
6
|
-
preloadThreshold;
|
|
7
|
-
cacheSize;
|
|
8
|
-
retryAttempts;
|
|
9
|
-
retryDelay;
|
|
10
|
-
loadingTimeout;
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
preloadThreshold: number;
|
|
7
|
+
cacheSize: number;
|
|
8
|
+
retryAttempts: number;
|
|
9
|
+
retryDelay: number;
|
|
10
|
+
loadingTimeout: number;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export interface LazyLoadResult<T> {
|
|
14
|
-
data;
|
|
15
|
-
loading;
|
|
16
|
-
error;
|
|
17
|
-
retry) => Promise<LazyLoadResult<T>>;
|
|
14
|
+
data: T | null;
|
|
15
|
+
loading: boolean;
|
|
16
|
+
error: Error | null;
|
|
17
|
+
retry: () => Promise<LazyLoadResult<T>>;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export interface LazyLoadStats {
|
|
21
|
-
totalRequests;
|
|
22
|
-
successfulLoads;
|
|
23
|
-
failedLoads;
|
|
24
|
-
cacheHits;
|
|
25
|
-
averageLoadTime;
|
|
26
|
-
totalLoadTime;
|
|
21
|
+
totalRequests: number;
|
|
22
|
+
successfulLoads: number;
|
|
23
|
+
failedLoads: number;
|
|
24
|
+
cacheHits: number;
|
|
25
|
+
averageLoadTime: number;
|
|
26
|
+
totalLoadTime: number;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export class LazyLoader {
|
|
30
|
-
private config;
|
|
31
|
-
private cache, { data; timestamp; ttl}>;
|
|
32
|
-
private loadingStates, boolean>;
|
|
33
|
-
private errorStates, Error>;
|
|
34
|
-
private stats;
|
|
35
|
-
private preloadQueue
|
|
36
|
-
private retryCounts, number>;
|
|
37
|
-
|
|
38
|
-
constructor(config= {
|
|
39
|
-
enabled,
|
|
40
|
-
preloadThreshold,
|
|
41
|
-
cacheSize,
|
|
42
|
-
retryAttempts,
|
|
43
|
-
retryDelay,
|
|
44
|
-
loadingTimeout
|
|
30
|
+
private config: LazyLoadConfig;
|
|
31
|
+
private cache: Map<string, { data: any; timestamp: number; ttl: number }>;
|
|
32
|
+
private loadingStates: Map<string, boolean>;
|
|
33
|
+
private errorStates: Map<string, Error>;
|
|
34
|
+
private stats: LazyLoadStats;
|
|
35
|
+
private preloadQueue: Set<string>;
|
|
36
|
+
private retryCounts: Map<string, number>;
|
|
37
|
+
|
|
38
|
+
constructor(config: LazyLoadConfig = {
|
|
39
|
+
enabled: true,
|
|
40
|
+
preloadThreshold: 0.8,
|
|
41
|
+
cacheSize: 100,
|
|
42
|
+
retryAttempts: 3,
|
|
43
|
+
retryDelay: 1000,
|
|
44
|
+
loadingTimeout: 10000
|
|
45
|
+
}) {
|
|
45
46
|
this.config = config;
|
|
46
47
|
this.cache = new Map();
|
|
47
48
|
this.loadingStates = new Map();
|
|
48
49
|
this.errorStates = new Map();
|
|
49
50
|
this.stats = {
|
|
50
|
-
totalRequests,
|
|
51
|
-
successfulLoads,
|
|
52
|
-
failedLoads,
|
|
53
|
-
cacheHits,
|
|
54
|
-
averageLoadTime,
|
|
55
|
-
totalLoadTime
|
|
51
|
+
totalRequests: 0,
|
|
52
|
+
successfulLoads: 0,
|
|
53
|
+
failedLoads: 0,
|
|
54
|
+
cacheHits: 0,
|
|
55
|
+
averageLoadTime: 0,
|
|
56
|
+
totalLoadTime: 0
|
|
57
|
+
};
|
|
56
58
|
this.preloadQueue = new Set();
|
|
57
59
|
this.retryCounts = new Map();
|
|
58
60
|
}
|
|
59
61
|
|
|
60
62
|
// Lazy load a module with dynamic import
|
|
61
63
|
async lazyLoad<T>(
|
|
62
|
-
modulePath,
|
|
63
|
-
importFn) => Promise<T>,
|
|
64
|
-
options
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
modulePath: string,
|
|
65
|
+
importFn: () => Promise<T>,
|
|
66
|
+
options: {
|
|
67
|
+
cacheKey?: string;
|
|
68
|
+
ttl?: number;
|
|
69
|
+
preload?: boolean;
|
|
67
70
|
} = {}
|
|
68
|
-
)
|
|
71
|
+
): Promise<LazyLoadResult<T>> {
|
|
72
|
+
const cacheKey = options.cacheKey || modulePath;
|
|
69
73
|
const ttl = options.ttl || 300000; // 5 minutes default
|
|
70
74
|
|
|
71
75
|
// Check cache first
|
|
@@ -75,10 +79,10 @@ export class LazyLoader {
|
|
|
75
79
|
this.stats.cacheHits++;
|
|
76
80
|
this.stats.totalRequests++; // Count cache hits as requests too
|
|
77
81
|
return {
|
|
78
|
-
data,
|
|
79
|
-
loading,
|
|
80
|
-
error,
|
|
81
|
-
retry) => {
|
|
82
|
+
data: cached.data,
|
|
83
|
+
loading: false,
|
|
84
|
+
error: null,
|
|
85
|
+
retry: () => {
|
|
82
86
|
// Clear error state before retrying
|
|
83
87
|
this.errorStates.delete(cacheKey);
|
|
84
88
|
this.retryCounts.delete(cacheKey);
|
|
@@ -94,10 +98,10 @@ export class LazyLoader {
|
|
|
94
98
|
// Check if already loading
|
|
95
99
|
if (this.loadingStates.get(cacheKey)) {
|
|
96
100
|
return {
|
|
97
|
-
data,
|
|
98
|
-
loading,
|
|
99
|
-
error,
|
|
100
|
-
retry) => this.lazyLoad(modulePath, importFn, options)
|
|
101
|
+
data: null,
|
|
102
|
+
loading: true,
|
|
103
|
+
error: null,
|
|
104
|
+
retry: () => this.lazyLoad(modulePath, importFn, options)
|
|
101
105
|
};
|
|
102
106
|
}
|
|
103
107
|
|
|
@@ -105,10 +109,10 @@ export class LazyLoader {
|
|
|
105
109
|
const previousError = this.errorStates.get(cacheKey);
|
|
106
110
|
if (previousError) {
|
|
107
111
|
return {
|
|
108
|
-
data,
|
|
109
|
-
loading,
|
|
110
|
-
error,
|
|
111
|
-
retry) => this.lazyLoad(modulePath, importFn, options)
|
|
112
|
+
data: null,
|
|
113
|
+
loading: false,
|
|
114
|
+
error: previousError,
|
|
115
|
+
retry: () => this.lazyLoad(modulePath, importFn, options)
|
|
112
116
|
};
|
|
113
117
|
}
|
|
114
118
|
|
|
@@ -145,9 +149,9 @@ export class LazyLoader {
|
|
|
145
149
|
|
|
146
150
|
return {
|
|
147
151
|
data,
|
|
148
|
-
loading,
|
|
149
|
-
error,
|
|
150
|
-
retry) => this.lazyLoad(modulePath, importFn, options)
|
|
152
|
+
loading: false,
|
|
153
|
+
error: null,
|
|
154
|
+
retry: () => this.lazyLoad(modulePath, importFn, options)
|
|
151
155
|
};
|
|
152
156
|
|
|
153
157
|
} catch (error) {
|
|
@@ -168,14 +172,14 @@ export class LazyLoader {
|
|
|
168
172
|
}, this.config.retryDelay);
|
|
169
173
|
}
|
|
170
174
|
|
|
171
|
-
const errorObj = error instanceof Error ? error ));
|
|
175
|
+
const errorObj = error instanceof Error ? error : new Error(String(error));
|
|
172
176
|
this.errorStates.set(cacheKey, errorObj);
|
|
173
177
|
|
|
174
178
|
return {
|
|
175
|
-
data,
|
|
176
|
-
loading,
|
|
177
|
-
error,
|
|
178
|
-
retry) => {
|
|
179
|
+
data: null,
|
|
180
|
+
loading: false,
|
|
181
|
+
error: errorObj,
|
|
182
|
+
retry: () => {
|
|
179
183
|
// Clear error state before retrying
|
|
180
184
|
this.errorStates.delete(cacheKey);
|
|
181
185
|
this.retryCounts.delete(cacheKey);
|
|
@@ -186,7 +190,8 @@ export class LazyLoader {
|
|
|
186
190
|
}
|
|
187
191
|
|
|
188
192
|
// Preload a module without waiting for the result
|
|
189
|
-
preload<T>(modulePath, importFn) => Promise<T>)
|
|
193
|
+
preload<T>(modulePath: string, importFn: () => Promise<T>): void {
|
|
194
|
+
if (!this.config.enabled) return;
|
|
190
195
|
|
|
191
196
|
// Limit preload queue size
|
|
192
197
|
if (this.preloadQueue.size >= 10) {
|
|
@@ -211,17 +216,20 @@ export class LazyLoader {
|
|
|
211
216
|
}
|
|
212
217
|
|
|
213
218
|
// Execute preload
|
|
214
|
-
private async executePreload<T>(modulePath, importFn) => Promise<T>)
|
|
219
|
+
private async executePreload<T>(modulePath: string, importFn: () => Promise<T>): Promise<void> {
|
|
220
|
+
try {
|
|
221
|
+
await this.lazyLoad(modulePath, importFn, { cacheKey: modulePath, ttl: 600000 }); // 10 minutes for preloaded modules
|
|
215
222
|
} catch (error) {
|
|
216
223
|
// Silently fail preloads
|
|
217
|
-
console.debug(`Preload failed for ${modulePath}
|
|
224
|
+
console.debug(`Preload failed for ${modulePath}:`, error);
|
|
218
225
|
} finally {
|
|
219
226
|
this.preloadQueue.delete(modulePath);
|
|
220
227
|
}
|
|
221
228
|
}
|
|
222
229
|
|
|
223
230
|
// Queue preload for later execution
|
|
224
|
-
private queuePreload(modulePath)
|
|
231
|
+
private queuePreload(modulePath: string): void {
|
|
232
|
+
if (this.preloadQueue.size < 10) { // Limit preload queue
|
|
225
233
|
this.preloadQueue.add(modulePath);
|
|
226
234
|
}
|
|
227
235
|
}
|
|
@@ -229,7 +237,9 @@ export class LazyLoader {
|
|
|
229
237
|
|
|
230
238
|
|
|
231
239
|
// Cache a result
|
|
232
|
-
private cacheResult(key, data, ttl
|
|
240
|
+
private cacheResult(key: string, data: any, ttl: number): void {
|
|
241
|
+
// Implement LRU cache eviction
|
|
242
|
+
if (this.cache.size >= this.config.cacheSize) {
|
|
233
243
|
const oldestKey = this.cache.keys().next().value;
|
|
234
244
|
if (oldestKey) {
|
|
235
245
|
this.cache.delete(oldestKey);
|
|
@@ -238,83 +248,95 @@ export class LazyLoader {
|
|
|
238
248
|
|
|
239
249
|
this.cache.set(key, {
|
|
240
250
|
data,
|
|
241
|
-
timestamp),
|
|
251
|
+
timestamp: Date.now(),
|
|
242
252
|
ttl
|
|
243
253
|
});
|
|
244
254
|
}
|
|
245
255
|
|
|
246
256
|
// Create a timeout promise
|
|
247
|
-
private createTimeout(ms
|
|
257
|
+
private createTimeout(ms: number): Promise<never> {
|
|
258
|
+
return new Promise((_, reject) => {
|
|
248
259
|
setTimeout(() => reject(new Error(`Loading timeout after ${ms}ms`)), ms);
|
|
249
260
|
});
|
|
250
261
|
}
|
|
251
262
|
|
|
252
263
|
// Update load time statistics
|
|
253
|
-
private updateLoadTimeStats(loadTime)
|
|
264
|
+
private updateLoadTimeStats(loadTime: number): void {
|
|
265
|
+
this.stats.totalLoadTime += loadTime;
|
|
254
266
|
this.stats.averageLoadTime = this.stats.totalLoadTime / this.stats.totalRequests;
|
|
255
267
|
}
|
|
256
268
|
|
|
257
269
|
// Get loading state for a module
|
|
258
|
-
isLoading(modulePath)
|
|
270
|
+
isLoading(modulePath: string): boolean {
|
|
271
|
+
return this.loadingStates.has(modulePath);
|
|
259
272
|
}
|
|
260
273
|
|
|
261
274
|
// Get error state for a module
|
|
262
|
-
getError(modulePath)
|
|
275
|
+
getError(modulePath: string): Error | null {
|
|
276
|
+
return this.errorStates.get(modulePath) || null;
|
|
263
277
|
}
|
|
264
278
|
|
|
265
279
|
// Clear cache for a specific module
|
|
266
|
-
clearCache(modulePath)
|
|
280
|
+
clearCache(modulePath: string): void {
|
|
281
|
+
this.cache.delete(modulePath);
|
|
267
282
|
this.errorStates.delete(modulePath);
|
|
268
283
|
this.retryCounts.delete(modulePath);
|
|
269
284
|
}
|
|
270
285
|
|
|
271
286
|
// Clear all cache
|
|
272
|
-
clearAllCache()
|
|
287
|
+
clearAllCache(): void {
|
|
288
|
+
this.cache.clear();
|
|
273
289
|
this.errorStates.clear();
|
|
274
290
|
this.retryCounts.clear();
|
|
275
291
|
}
|
|
276
292
|
|
|
277
293
|
// Get cache statistics
|
|
278
|
-
getCacheStats()
|
|
279
|
-
|
|
280
|
-
|
|
294
|
+
getCacheStats(): {
|
|
295
|
+
size: number;
|
|
296
|
+
maxSize: number;
|
|
297
|
+
hitRate: number;
|
|
281
298
|
} {
|
|
282
299
|
const hitRate = this.stats.totalRequests > 0
|
|
283
300
|
? (this.stats.cacheHits / this.stats.totalRequests) * 100
|
|
284
|
-
;
|
|
301
|
+
: 0;
|
|
285
302
|
|
|
286
303
|
return {
|
|
287
|
-
size,
|
|
288
|
-
maxSize,
|
|
304
|
+
size: this.cache.size,
|
|
305
|
+
maxSize: this.config.cacheSize,
|
|
289
306
|
hitRate
|
|
290
307
|
};
|
|
291
308
|
}
|
|
292
309
|
|
|
293
310
|
// Get performance statistics
|
|
294
|
-
getStats()
|
|
311
|
+
getStats(): LazyLoadStats {
|
|
312
|
+
return { ...this.stats };
|
|
295
313
|
}
|
|
296
314
|
|
|
297
315
|
// Reset all statistics
|
|
298
|
-
resetStats()
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
316
|
+
resetStats(): void {
|
|
317
|
+
this.stats = {
|
|
318
|
+
totalRequests: 0,
|
|
319
|
+
successfulLoads: 0,
|
|
320
|
+
failedLoads: 0,
|
|
321
|
+
cacheHits: 0,
|
|
322
|
+
averageLoadTime: 0,
|
|
323
|
+
totalLoadTime: 0
|
|
324
|
+
};
|
|
305
325
|
}
|
|
306
326
|
|
|
307
327
|
// Check if preload is in progress
|
|
308
|
-
isPreloading(modulePath)
|
|
328
|
+
isPreloading(modulePath: string): boolean {
|
|
329
|
+
return this.preloadQueue.has(modulePath);
|
|
309
330
|
}
|
|
310
331
|
|
|
311
332
|
// Get preload queue status
|
|
312
|
-
getPreloadQueue()] {
|
|
333
|
+
getPreloadQueue(): string[] {
|
|
313
334
|
return Array.from(this.preloadQueue);
|
|
314
335
|
}
|
|
315
336
|
|
|
316
337
|
// Update configuration
|
|
317
|
-
updateConfig(newConfig)
|
|
338
|
+
updateConfig(newConfig: Partial<LazyLoadConfig>): void {
|
|
339
|
+
this.config = { ...this.config, ...newConfig };
|
|
318
340
|
|
|
319
341
|
// Adjust cache size if needed
|
|
320
342
|
if (newConfig.cacheSize && newConfig.cacheSize < this.cache.size) {
|
|
@@ -328,16 +350,17 @@ export class LazyLoader {
|
|
|
328
350
|
}
|
|
329
351
|
|
|
330
352
|
// Export lazy loading analysis
|
|
331
|
-
exportAnalysis()
|
|
353
|
+
exportAnalysis(): string {
|
|
354
|
+
const cacheStats = this.getCacheStats();
|
|
332
355
|
const stats = this.getStats();
|
|
333
356
|
const preloadQueue = this.getPreloadQueue();
|
|
334
357
|
|
|
335
358
|
return JSON.stringify({
|
|
336
|
-
config,
|
|
359
|
+
config: this.config,
|
|
337
360
|
cacheStats,
|
|
338
|
-
performanceStats,
|
|
361
|
+
performanceStats: stats,
|
|
339
362
|
preloadQueue,
|
|
340
|
-
timestamp).toISOString()
|
|
363
|
+
timestamp: new Date().toISOString()
|
|
341
364
|
}, null, 2);
|
|
342
365
|
}
|
|
343
366
|
}
|
|
@@ -347,15 +370,18 @@ export const lazyLoader = new LazyLoader();
|
|
|
347
370
|
|
|
348
371
|
// Utility function for React lazy loading
|
|
349
372
|
export function createLazyComponent<T>(
|
|
350
|
-
importFn) => Promise<{ default}>
|
|
351
|
-
)
|
|
373
|
+
importFn: () => Promise<{ default: React.ComponentType<T> }>
|
|
374
|
+
): React.LazyExoticComponent<React.ComponentType<T>> {
|
|
375
|
+
return React.lazy(importFn);
|
|
352
376
|
}
|
|
353
377
|
|
|
354
378
|
// Utility function for conditional lazy loading
|
|
355
379
|
export function conditionalLazyLoad<T>(
|
|
356
|
-
condition,
|
|
357
|
-
importFn) => Promise<T>,
|
|
358
|
-
fallback
|
|
380
|
+
condition: boolean,
|
|
381
|
+
importFn: () => Promise<T>,
|
|
382
|
+
fallback: T
|
|
383
|
+
): Promise<T> {
|
|
384
|
+
if (condition) {
|
|
359
385
|
return importFn();
|
|
360
386
|
}
|
|
361
387
|
return Promise.resolve(fallback);
|
|
@@ -363,9 +389,9 @@ export function conditionalLazyLoad<T>(
|
|
|
363
389
|
|
|
364
390
|
// Utility function for batch lazy loading
|
|
365
391
|
export function batchLazyLoad<T>(
|
|
366
|
-
modules; importFn) => Promise<T> }>,
|
|
367
|
-
options; maxConcurrent
|
|
368
|
-
)]> {
|
|
392
|
+
modules: Array<{ path: string; importFn: () => Promise<T> }>,
|
|
393
|
+
options: { parallel?: boolean; maxConcurrent?: number } = {}
|
|
394
|
+
): Promise<T[]> {
|
|
369
395
|
const { parallel = true, maxConcurrent = 3 } = options;
|
|
370
396
|
|
|
371
397
|
if (!parallel) {
|
|
@@ -378,9 +404,9 @@ export function batchLazyLoad<T>(
|
|
|
378
404
|
}
|
|
379
405
|
|
|
380
406
|
// Parallel loading with concurrency limit
|
|
381
|
-
const results] = [];
|
|
407
|
+
const results: T[] = [];
|
|
382
408
|
const queue = [...modules];
|
|
383
|
-
const active] = [];
|
|
409
|
+
const active: Promise<void>[] = [];
|
|
384
410
|
|
|
385
411
|
return new Promise((resolve, reject) => {
|
|
386
412
|
function processQueue() {
|