@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
|
@@ -1,21 +1,36 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback, useRef } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface PerformanceThrottlingConfig {
|
|
4
|
-
enablePerformanceMonitoring
|
|
4
|
+
enablePerformanceMonitoring?: boolean
|
|
5
|
+
enableAutomaticThrottling?: boolean
|
|
6
|
+
enableUserExperienceOptimization?: boolean
|
|
7
|
+
enableBatteryPreservation?: boolean
|
|
8
|
+
performanceThreshold?: number
|
|
9
|
+
frameRateTarget?: number
|
|
10
|
+
memoryThreshold?: number
|
|
11
|
+
cpuThreshold?: number
|
|
12
|
+
}
|
|
5
13
|
|
|
6
14
|
export interface PerformanceMetrics {
|
|
7
|
-
fps
|
|
15
|
+
fps: number
|
|
16
|
+
frameTime: number
|
|
17
|
+
memoryUsage: number
|
|
18
|
+
cpuUsage: number
|
|
19
|
+
performanceScore: number
|
|
20
|
+
isThrottling: boolean
|
|
21
|
+
throttleReason: string
|
|
22
|
+
}
|
|
8
23
|
|
|
9
24
|
export interface PerformanceThrottlingCallbacks {
|
|
10
|
-
onPerformanceWarning
|
|
11
|
-
onThrottlingApplied
|
|
12
|
-
onPerformanceRecovery
|
|
13
|
-
onUserExperienceOptimized
|
|
25
|
+
onPerformanceWarning?: (metrics: PerformanceMetrics) => void
|
|
26
|
+
onThrottlingApplied?: (level: string, reason: string) => void
|
|
27
|
+
onPerformanceRecovery?: (metrics: PerformanceMetrics) => void
|
|
28
|
+
onUserExperienceOptimized?: (optimization: string) => void
|
|
14
29
|
}
|
|
15
30
|
|
|
16
31
|
export const usePerformanceThrottling = (
|
|
17
|
-
config= {},
|
|
18
|
-
callbacks= {}
|
|
32
|
+
config: PerformanceThrottlingConfig = {},
|
|
33
|
+
callbacks: PerformanceThrottlingCallbacks = {}
|
|
19
34
|
) => {
|
|
20
35
|
const {
|
|
21
36
|
enablePerformanceMonitoring = true,
|
|
@@ -29,13 +44,14 @@ export const usePerformanceThrottling = (
|
|
|
29
44
|
} = config
|
|
30
45
|
|
|
31
46
|
const [metrics, setMetrics] = useState<PerformanceMetrics>({
|
|
32
|
-
fps,
|
|
33
|
-
frameTime,
|
|
34
|
-
memoryUsage,
|
|
35
|
-
cpuUsage,
|
|
36
|
-
performanceScore,
|
|
37
|
-
isThrottling,
|
|
38
|
-
throttleReason
|
|
47
|
+
fps: 60,
|
|
48
|
+
frameTime: 16.67,
|
|
49
|
+
memoryUsage: 0,
|
|
50
|
+
cpuUsage: 0,
|
|
51
|
+
performanceScore: 100,
|
|
52
|
+
isThrottling: false,
|
|
53
|
+
throttleReason: 'none'
|
|
54
|
+
})
|
|
39
55
|
|
|
40
56
|
const [isOptimizing, setIsOptimizing] = useState(false)
|
|
41
57
|
const [optimizations, setOptimizations] = useState<string[]>([])
|
|
@@ -82,7 +98,7 @@ export const usePerformanceThrottling = (
|
|
|
82
98
|
else if (memoryUsage > memoryThreshold) throttleReason = 'high_memory'
|
|
83
99
|
else if (cpuUsage > cpuThreshold) throttleReason = 'high_cpu'
|
|
84
100
|
|
|
85
|
-
const newMetrics= {
|
|
101
|
+
const newMetrics: PerformanceMetrics = {
|
|
86
102
|
fps,
|
|
87
103
|
frameTime,
|
|
88
104
|
memoryUsage,
|
|
@@ -105,7 +121,7 @@ export const usePerformanceThrottling = (
|
|
|
105
121
|
lastFrameTimeRef.current = now
|
|
106
122
|
}
|
|
107
123
|
} catch (error) {
|
|
108
|
-
console.warn('Performance measurement failed, error)
|
|
124
|
+
console.warn('Performance measurement failed:', error)
|
|
109
125
|
}
|
|
110
126
|
}, [enablePerformanceMonitoring, performanceThreshold, frameRateTarget, memoryThreshold, cpuThreshold, callbacks, metrics.isThrottling])
|
|
111
127
|
|
|
@@ -116,25 +132,25 @@ export const usePerformanceThrottling = (
|
|
|
116
132
|
setIsOptimizing(true)
|
|
117
133
|
|
|
118
134
|
setTimeout(() => {
|
|
119
|
-
let newThrottleLevel= 'none'
|
|
120
|
-
let optimizations] = []
|
|
135
|
+
let newThrottleLevel: 'none' | 'light' | 'moderate' | 'aggressive' = 'none'
|
|
136
|
+
let optimizations: string[] = []
|
|
121
137
|
|
|
122
138
|
// Determine throttle level based on performance metrics
|
|
123
139
|
if (metrics.performanceScore < 50 || metrics.fps < 30) {
|
|
124
140
|
newThrottleLevel = 'aggressive'
|
|
125
|
-
optimizations.push('Critical performance)
|
|
141
|
+
optimizations.push('Critical performance: Maximum throttling applied')
|
|
126
142
|
optimizations.push('All non-essential animations disabled')
|
|
127
143
|
optimizations.push('Frame rate limited to 30fps')
|
|
128
144
|
optimizations.push('Memory usage optimized')
|
|
129
145
|
} else if (metrics.performanceScore < 70 || metrics.fps < 45) {
|
|
130
146
|
newThrottleLevel = 'moderate'
|
|
131
|
-
optimizations.push('Performance issue)
|
|
147
|
+
optimizations.push('Performance issue: Moderate throttling applied')
|
|
132
148
|
optimizations.push('Animation complexity reduced by 50%')
|
|
133
149
|
optimizations.push('Frame rate limited to 45fps')
|
|
134
150
|
optimizations.push('Memory optimization enabled')
|
|
135
151
|
} else if (metrics.performanceScore < 85 || metrics.fps < 55) {
|
|
136
152
|
newThrottleLevel = 'light'
|
|
137
|
-
optimizations.push('Performance warning)
|
|
153
|
+
optimizations.push('Performance warning: Light throttling applied')
|
|
138
154
|
optimizations.push('Animation complexity reduced by 25%')
|
|
139
155
|
optimizations.push('Frame rate limited to 55fps')
|
|
140
156
|
optimizations.push('Performance monitoring enhanced')
|
|
@@ -142,13 +158,13 @@ export const usePerformanceThrottling = (
|
|
|
142
158
|
|
|
143
159
|
// Battery preservation considerations
|
|
144
160
|
if (enableBatteryPreservation && newThrottleLevel !== 'none') {
|
|
145
|
-
optimizations.push('Battery preservation)
|
|
161
|
+
optimizations.push('Battery preservation: Animation efficiency optimized')
|
|
146
162
|
optimizations.push('GPU usage minimized for power efficiency')
|
|
147
163
|
}
|
|
148
164
|
|
|
149
165
|
// User experience optimization
|
|
150
166
|
if (enableUserExperienceOptimization && newThrottleLevel !== 'none') {
|
|
151
|
-
optimizations.push('User experience)
|
|
167
|
+
optimizations.push('User experience: Smooth performance prioritized')
|
|
152
168
|
optimizations.push('Animation quality balanced with performance')
|
|
153
169
|
optimizations.push('Responsive interactions maintained')
|
|
154
170
|
}
|
|
@@ -170,33 +186,33 @@ export const usePerformanceThrottling = (
|
|
|
170
186
|
const recommendations = []
|
|
171
187
|
|
|
172
188
|
if (metrics.performanceScore < 50) {
|
|
173
|
-
recommendations.push('Critical)
|
|
189
|
+
recommendations.push('Critical: Disable all animations and complex UI operations')
|
|
174
190
|
recommendations.push('Use static UI elements and minimal interactions')
|
|
175
191
|
recommendations.push('Implement aggressive memory cleanup')
|
|
176
192
|
} else if (metrics.performanceScore < 70) {
|
|
177
|
-
recommendations.push('High)
|
|
193
|
+
recommendations.push('High: Significantly reduce animation complexity')
|
|
178
194
|
recommendations.push('Limit concurrent animations to 2-3 maximum')
|
|
179
195
|
recommendations.push('Use CSS transforms instead of JavaScript animations')
|
|
180
196
|
} else if (metrics.performanceScore < 85) {
|
|
181
|
-
recommendations.push('Medium)
|
|
197
|
+
recommendations.push('Medium: Consider light performance optimization')
|
|
182
198
|
recommendations.push('Monitor animation frame rates closely')
|
|
183
199
|
recommendations.push('Implement animation debouncing')
|
|
184
200
|
}
|
|
185
201
|
|
|
186
202
|
if (metrics.fps < frameRateTarget * 0.8) {
|
|
187
|
-
recommendations.push('Low FPS)
|
|
203
|
+
recommendations.push('Low FPS: Reduce animation frame rate')
|
|
188
204
|
recommendations.push('Use requestAnimationFrame for smooth animations')
|
|
189
205
|
recommendations.push('Implement frame skipping for complex animations')
|
|
190
206
|
}
|
|
191
207
|
|
|
192
208
|
if (metrics.memoryUsage > memoryThreshold) {
|
|
193
|
-
recommendations.push('High Memory)
|
|
209
|
+
recommendations.push('High Memory: Optimize memory usage')
|
|
194
210
|
recommendations.push('Clean up animation references')
|
|
195
211
|
recommendations.push('Use object pooling for repeated animations')
|
|
196
212
|
}
|
|
197
213
|
|
|
198
214
|
if (metrics.cpuUsage > cpuThreshold) {
|
|
199
|
-
recommendations.push('High CPU)
|
|
215
|
+
recommendations.push('High CPU: Reduce computational complexity')
|
|
200
216
|
recommendations.push('Use CSS animations instead of JavaScript')
|
|
201
217
|
recommendations.push('Implement animation pausing when not visible')
|
|
202
218
|
}
|
|
@@ -207,32 +223,37 @@ export const usePerformanceThrottling = (
|
|
|
207
223
|
// Get optimal performance settings
|
|
208
224
|
const getOptimalPerformanceSettings = useCallback(() => {
|
|
209
225
|
const settings = {
|
|
210
|
-
maxConcurrentAnimations,
|
|
211
|
-
frameRateLimit,
|
|
212
|
-
animationQuality,
|
|
213
|
-
memoryOptimization,
|
|
214
|
-
cpuOptimization
|
|
226
|
+
maxConcurrentAnimations: 5,
|
|
227
|
+
frameRateLimit: 60,
|
|
228
|
+
animationQuality: 'high',
|
|
229
|
+
memoryOptimization: false,
|
|
230
|
+
cpuOptimization: false
|
|
231
|
+
}
|
|
215
232
|
|
|
216
233
|
switch (throttleLevel) {
|
|
217
|
-
case 'aggressive'
|
|
234
|
+
case 'aggressive':
|
|
235
|
+
settings.maxConcurrentAnimations = 1
|
|
218
236
|
settings.frameRateLimit = 30
|
|
219
237
|
settings.animationQuality = 'minimal'
|
|
220
238
|
settings.memoryOptimization = true
|
|
221
239
|
settings.cpuOptimization = true
|
|
222
240
|
break
|
|
223
|
-
case 'moderate'
|
|
241
|
+
case 'moderate':
|
|
242
|
+
settings.maxConcurrentAnimations = 2
|
|
224
243
|
settings.frameRateLimit = 45
|
|
225
244
|
settings.animationQuality = 'medium'
|
|
226
245
|
settings.memoryOptimization = true
|
|
227
246
|
settings.cpuOptimization = true
|
|
228
247
|
break
|
|
229
|
-
case 'light'
|
|
248
|
+
case 'light':
|
|
249
|
+
settings.maxConcurrentAnimations = 3
|
|
230
250
|
settings.frameRateLimit = 55
|
|
231
251
|
settings.animationQuality = 'high'
|
|
232
252
|
settings.memoryOptimization = true
|
|
233
253
|
settings.cpuOptimization = false
|
|
234
254
|
break
|
|
235
|
-
default
|
|
255
|
+
default:
|
|
256
|
+
settings.maxConcurrentAnimations = 5
|
|
236
257
|
settings.frameRateLimit = 60
|
|
237
258
|
settings.animationQuality = 'high'
|
|
238
259
|
settings.memoryOptimization = false
|
|
@@ -248,8 +269,9 @@ export const usePerformanceThrottling = (
|
|
|
248
269
|
setOptimizations([])
|
|
249
270
|
setMetrics(prev => ({
|
|
250
271
|
...prev,
|
|
251
|
-
isThrottling,
|
|
252
|
-
throttleReason
|
|
272
|
+
isThrottling: false,
|
|
273
|
+
throttleReason: 'none'
|
|
274
|
+
}))
|
|
253
275
|
}, [])
|
|
254
276
|
|
|
255
277
|
// Initialize performance monitoring
|
|
@@ -265,7 +287,7 @@ export const usePerformanceThrottling = (
|
|
|
265
287
|
}
|
|
266
288
|
}
|
|
267
289
|
} catch (error) {
|
|
268
|
-
console.warn('Performance monitoring initialization failed, error)
|
|
290
|
+
console.warn('Performance monitoring initialization failed:', error)
|
|
269
291
|
}
|
|
270
292
|
}, [enablePerformanceMonitoring, measurePerformance])
|
|
271
293
|
|
|
@@ -304,14 +326,16 @@ export const usePerformanceThrottling = (
|
|
|
304
326
|
resetThrottling,
|
|
305
327
|
|
|
306
328
|
// Computed values
|
|
307
|
-
isThrottling
|
|
308
|
-
performanceLevel
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
329
|
+
isThrottling: throttleLevel !== 'none',
|
|
330
|
+
performanceLevel: metrics.performanceScore >= 90 ? 'excellent' :
|
|
331
|
+
metrics.performanceScore >= 80 ? 'good' :
|
|
332
|
+
metrics.performanceScore >= 70 ? 'fair' : 'poor',
|
|
333
|
+
needsOptimization: metrics.performanceScore < 70,
|
|
334
|
+
recommendations: getThrottlingRecommendations(),
|
|
335
|
+
performanceSettings: getOptimalPerformanceSettings(),
|
|
312
336
|
|
|
313
337
|
// Utility functions
|
|
314
|
-
getPerformanceHealth) => {
|
|
338
|
+
getPerformanceHealth: () => {
|
|
315
339
|
if (metrics.performanceScore >= 90) return 'excellent'
|
|
316
340
|
if (metrics.performanceScore >= 80) return 'good'
|
|
317
341
|
if (metrics.performanceScore >= 70) return 'fair'
|
|
@@ -1,35 +1,66 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback, useMemo, useRef } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface PerformanceMetrics {
|
|
4
|
-
fps
|
|
4
|
+
fps: number
|
|
5
|
+
frameTime: number
|
|
6
|
+
memoryUsage?: number
|
|
7
|
+
memoryLimit?: number
|
|
8
|
+
memoryPercentage?: number
|
|
9
|
+
batteryLevel?: number
|
|
10
|
+
isLowPowerMode?: boolean
|
|
11
|
+
isCharging?: boolean
|
|
12
|
+
performanceMode: 'high' | 'medium' | 'low'
|
|
13
|
+
throttlingEnabled: boolean
|
|
14
|
+
throttlingReason?: string
|
|
15
|
+
}
|
|
5
16
|
|
|
6
17
|
export interface PerformanceThresholds {
|
|
7
|
-
fps
|
|
8
|
-
|
|
9
|
-
|
|
18
|
+
fps: {
|
|
19
|
+
warning: number
|
|
20
|
+
critical: number
|
|
21
|
+
}
|
|
22
|
+
memory: {
|
|
23
|
+
warning: number
|
|
24
|
+
critical: number
|
|
25
|
+
}
|
|
26
|
+
battery: {
|
|
27
|
+
low: number
|
|
28
|
+
critical: number
|
|
29
|
+
}
|
|
10
30
|
}
|
|
11
31
|
|
|
12
32
|
export interface PerformanceCallbacks {
|
|
13
|
-
onFPSWarning
|
|
14
|
-
onMemoryWarning
|
|
15
|
-
onBatteryLow
|
|
16
|
-
onPerformanceModeChange
|
|
17
|
-
onThrottlingChange
|
|
33
|
+
onFPSWarning?: (fps: number) => void
|
|
34
|
+
onMemoryWarning?: (usage: number) => void
|
|
35
|
+
onBatteryLow?: (level: number) => void
|
|
36
|
+
onPerformanceModeChange?: (mode: PerformanceMetrics['performanceMode']) => void
|
|
37
|
+
onThrottlingChange?: (enabled: boolean, reason?: string) => void
|
|
18
38
|
}
|
|
19
39
|
|
|
20
40
|
export interface PerformanceOptions {
|
|
21
|
-
updateInterval
|
|
41
|
+
updateInterval?: number
|
|
42
|
+
thresholds?: Partial<PerformanceThresholds>
|
|
43
|
+
enableThrottling?: boolean
|
|
44
|
+
enableBatteryOptimization?: boolean
|
|
45
|
+
callbacks?: PerformanceCallbacks
|
|
46
|
+
}
|
|
22
47
|
|
|
23
|
-
const DEFAULT_THRESHOLDS= {
|
|
24
|
-
fps
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
48
|
+
const DEFAULT_THRESHOLDS: PerformanceThresholds = {
|
|
49
|
+
fps: {
|
|
50
|
+
warning: 45,
|
|
51
|
+
critical: 30
|
|
52
|
+
},
|
|
53
|
+
memory: {
|
|
54
|
+
warning: 0.7,
|
|
55
|
+
critical: 0.85
|
|
56
|
+
},
|
|
57
|
+
battery: {
|
|
58
|
+
low: 0.3,
|
|
59
|
+
critical: 0.15
|
|
60
|
+
}
|
|
30
61
|
}
|
|
31
62
|
|
|
32
|
-
export const usePerformance = (options= {}) => {
|
|
63
|
+
export const usePerformance = (options: PerformanceOptions = {}) => {
|
|
33
64
|
const {
|
|
34
65
|
updateInterval = 1000,
|
|
35
66
|
thresholds = {},
|
|
@@ -39,10 +70,11 @@ export const usePerformance = (options= {}) => {
|
|
|
39
70
|
} = options
|
|
40
71
|
|
|
41
72
|
const [metrics, setMetrics] = useState<PerformanceMetrics>({
|
|
42
|
-
fps,
|
|
43
|
-
frameTime,
|
|
44
|
-
performanceMode,
|
|
45
|
-
throttlingEnabled
|
|
73
|
+
fps: 60,
|
|
74
|
+
frameTime: 16.67,
|
|
75
|
+
performanceMode: 'high',
|
|
76
|
+
throttlingEnabled: false
|
|
77
|
+
})
|
|
46
78
|
|
|
47
79
|
const [isMonitoring, setIsMonitoring] = useState(false)
|
|
48
80
|
const frameCountRef = useRef(0)
|
|
@@ -92,8 +124,9 @@ export const usePerformance = (options= {}) => {
|
|
|
92
124
|
setMetrics(prev => ({
|
|
93
125
|
...prev,
|
|
94
126
|
memoryUsage,
|
|
95
|
-
memoryLimit,
|
|
96
|
-
memoryPercentage
|
|
127
|
+
memoryLimit: memory.jsHeapSizeLimit,
|
|
128
|
+
memoryPercentage: memoryUsage * 100
|
|
129
|
+
}))
|
|
97
130
|
|
|
98
131
|
// Check memory thresholds
|
|
99
132
|
if (memoryUsage >= finalThresholds.memory.critical && callbacks.onMemoryWarning) {
|
|
@@ -110,22 +143,23 @@ export const usePerformance = (options= {}) => {
|
|
|
110
143
|
|
|
111
144
|
setMetrics(prev => ({
|
|
112
145
|
...prev,
|
|
113
|
-
batteryLevel,
|
|
114
|
-
isLowPowerMode,
|
|
115
|
-
isCharging
|
|
146
|
+
batteryLevel: battery.level,
|
|
147
|
+
isLowPowerMode: battery.level < finalThresholds.battery.low,
|
|
148
|
+
isCharging: battery.charging
|
|
149
|
+
}))
|
|
116
150
|
|
|
117
151
|
// Check battery thresholds
|
|
118
152
|
if (battery.level <= finalThresholds.battery.critical && callbacks.onBatteryLow) {
|
|
119
153
|
callbacks.onBatteryLow(battery.level)
|
|
120
154
|
}
|
|
121
155
|
} catch (error) {
|
|
122
|
-
console.warn('Battery API not available, error)
|
|
156
|
+
console.warn('Battery API not available:', error)
|
|
123
157
|
}
|
|
124
158
|
}
|
|
125
159
|
}, [finalThresholds.battery.low, finalThresholds.battery.critical, callbacks.onBatteryLow])
|
|
126
160
|
|
|
127
161
|
// Performance mode determination
|
|
128
|
-
const determinePerformanceMode = useCallback((fps, memoryUsage
|
|
162
|
+
const determinePerformanceMode = useCallback((fps: number, memoryUsage?: number): PerformanceMetrics['performanceMode'] => {
|
|
129
163
|
if (fps < finalThresholds.fps.critical || (memoryUsage && memoryUsage > finalThresholds.memory.critical)) {
|
|
130
164
|
return 'low'
|
|
131
165
|
}
|
|
@@ -136,37 +170,38 @@ export const usePerformance = (options= {}) => {
|
|
|
136
170
|
}, [finalThresholds])
|
|
137
171
|
|
|
138
172
|
// Performance throttling logic
|
|
139
|
-
const shouldThrottle = useCallback((); reason
|
|
173
|
+
const shouldThrottle = useCallback((): { should: boolean; reason?: string } => {
|
|
140
174
|
const { fps, memoryPercentage, batteryLevel, isLowPowerMode } = metrics
|
|
141
175
|
|
|
142
176
|
// FPS-based throttling
|
|
143
177
|
if (fps < finalThresholds.fps.critical) {
|
|
144
|
-
return { should, reason}
|
|
178
|
+
return { should: true, reason: 'Low FPS' }
|
|
145
179
|
}
|
|
146
180
|
|
|
147
181
|
// Memory-based throttling
|
|
148
182
|
if (memoryPercentage && memoryPercentage > finalThresholds.memory.critical * 100) {
|
|
149
|
-
return { should, reason}
|
|
183
|
+
return { should: true, reason: 'High memory usage' }
|
|
150
184
|
}
|
|
151
185
|
|
|
152
186
|
// Battery-based throttling
|
|
153
187
|
if (enableBatteryOptimization && (isLowPowerMode || (batteryLevel && batteryLevel < finalThresholds.battery.low))) {
|
|
154
|
-
return { should, reason}
|
|
188
|
+
return { should: true, reason: 'Low battery' }
|
|
155
189
|
}
|
|
156
190
|
|
|
157
|
-
return { should}
|
|
191
|
+
return { should: false }
|
|
158
192
|
}, [metrics, finalThresholds, enableBatteryOptimization])
|
|
159
193
|
|
|
160
194
|
// Update performance mode and throttling
|
|
161
195
|
useEffect(() => {
|
|
162
196
|
const newMode = determinePerformanceMode(metrics.fps, metrics.memoryUsage)
|
|
163
|
-
const { should, reason } = shouldThrottle()
|
|
197
|
+
const { should: shouldThrottleNow, reason } = shouldThrottle()
|
|
164
198
|
|
|
165
199
|
setMetrics(prev => ({
|
|
166
200
|
...prev,
|
|
167
|
-
performanceMode,
|
|
168
|
-
throttlingEnabled,
|
|
169
|
-
throttlingReason
|
|
201
|
+
performanceMode: newMode,
|
|
202
|
+
throttlingEnabled: enableThrottling && shouldThrottleNow,
|
|
203
|
+
throttlingReason: reason
|
|
204
|
+
}))
|
|
170
205
|
|
|
171
206
|
// Notify callbacks
|
|
172
207
|
if (newMode !== metrics.performanceMode && callbacks.onPerformanceModeChange) {
|
|
@@ -213,7 +248,7 @@ export const usePerformance = (options= {}) => {
|
|
|
213
248
|
|
|
214
249
|
// Performance optimization recommendations
|
|
215
250
|
const getOptimizationRecommendations = useCallback(() => {
|
|
216
|
-
const recommendations] = []
|
|
251
|
+
const recommendations: string[] = []
|
|
217
252
|
|
|
218
253
|
if (metrics.fps < finalThresholds.fps.warning) {
|
|
219
254
|
recommendations.push('Consider reducing animation complexity or enabling performance mode')
|
|
@@ -234,15 +269,17 @@ export const usePerformance = (options= {}) => {
|
|
|
234
269
|
const enableThrottlingMode = useCallback(() => {
|
|
235
270
|
setMetrics(prev => ({
|
|
236
271
|
...prev,
|
|
237
|
-
throttlingEnabled,
|
|
238
|
-
throttlingReason
|
|
272
|
+
throttlingEnabled: true,
|
|
273
|
+
throttlingReason: 'Manual override'
|
|
274
|
+
}))
|
|
239
275
|
}, [])
|
|
240
276
|
|
|
241
277
|
const disableThrottlingMode = useCallback(() => {
|
|
242
278
|
setMetrics(prev => ({
|
|
243
279
|
...prev,
|
|
244
|
-
throttlingEnabled,
|
|
245
|
-
throttlingReason
|
|
280
|
+
throttlingEnabled: false,
|
|
281
|
+
throttlingReason: undefined
|
|
282
|
+
}))
|
|
246
283
|
}, [])
|
|
247
284
|
|
|
248
285
|
return {
|
|
@@ -255,24 +292,25 @@ export const usePerformance = (options= {}) => {
|
|
|
255
292
|
isMonitoring,
|
|
256
293
|
|
|
257
294
|
// Throttling
|
|
258
|
-
throttlingEnabled,
|
|
259
|
-
throttlingReason,
|
|
295
|
+
throttlingEnabled: metrics.throttlingEnabled,
|
|
296
|
+
throttlingReason: metrics.throttlingReason,
|
|
260
297
|
enableThrottlingMode,
|
|
261
298
|
disableThrottlingMode,
|
|
262
299
|
|
|
263
300
|
// Performance mode
|
|
264
|
-
performanceMode,
|
|
301
|
+
performanceMode: metrics.performanceMode,
|
|
265
302
|
|
|
266
303
|
// Recommendations
|
|
267
304
|
getOptimizationRecommendations,
|
|
268
305
|
|
|
269
306
|
// Thresholds
|
|
270
|
-
thresholds,
|
|
307
|
+
thresholds: finalThresholds,
|
|
271
308
|
|
|
272
309
|
// Raw values for advanced usage
|
|
273
|
-
fps,
|
|
274
|
-
frameTime,
|
|
275
|
-
memoryUsage,
|
|
276
|
-
batteryLevel,
|
|
277
|
-
isLowPowerMode
|
|
310
|
+
fps: metrics.fps,
|
|
311
|
+
frameTime: metrics.frameTime,
|
|
312
|
+
memoryUsage: metrics.memoryUsage,
|
|
313
|
+
batteryLevel: metrics.batteryLevel,
|
|
314
|
+
isLowPowerMode: metrics.isLowPowerMode
|
|
315
|
+
}
|
|
278
316
|
}
|