@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.9 → 0.2.10
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 +23 -1
- package/dist/components/ui/navigation/index.js +23 -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 +22 -2
- package/dist/components/ui/overlay/index.js +22 -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 +289 -280
- package/dist/index.js +289 -280
- 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/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 +15 -4
- package/dist/tokens/index.js +15 -4
- 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,52 +1,74 @@
|
|
|
1
1
|
import { useState, useCallback, useRef, useEffect } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface TransitionConfig {
|
|
4
|
-
duration
|
|
4
|
+
duration?: number
|
|
5
|
+
easing?: 'ease-out' | 'ease-in' | 'ease-in-out' | 'ease-out-quint' | 'ease-in-quint' | 'ease-in-out-quint' | 'ease-out-expo' | 'ease-in-expo' | 'ease-in-out-expo' | 'ease-out-circ' | 'ease-in-circ' | 'ease-in-out-circ'
|
|
6
|
+
delay?: number
|
|
7
|
+
performance?: boolean
|
|
8
|
+
deviceOptimization?: boolean
|
|
9
|
+
accessibility?: boolean
|
|
10
|
+
batteryAware?: boolean
|
|
11
|
+
}
|
|
5
12
|
|
|
6
13
|
export interface TransitionState {
|
|
7
|
-
isTransitioning
|
|
14
|
+
isTransitioning: boolean
|
|
15
|
+
currentEasing: string
|
|
16
|
+
currentDuration: number
|
|
17
|
+
currentDelay: number
|
|
18
|
+
performanceScore: number
|
|
19
|
+
deviceType: 'mobile' | 'tablet' | 'desktop'
|
|
20
|
+
batteryLevel: 'normal' | 'low' | 'critical'
|
|
21
|
+
reducedMotion: boolean
|
|
22
|
+
}
|
|
8
23
|
|
|
9
24
|
export interface TransitionPerformanceMetrics {
|
|
10
|
-
frameRate
|
|
25
|
+
frameRate: number
|
|
26
|
+
memoryUsage: number
|
|
27
|
+
transitionTime: number
|
|
28
|
+
smoothness: number
|
|
29
|
+
batteryImpact: number
|
|
30
|
+
}
|
|
11
31
|
|
|
12
32
|
export interface AdvancedTransitionSystemCallbacks {
|
|
13
|
-
onTransitionStart
|
|
14
|
-
onTransitionComplete
|
|
15
|
-
onPerformanceOptimized
|
|
16
|
-
onDeviceOptimized
|
|
17
|
-
onAccessibilityEnhanced
|
|
33
|
+
onTransitionStart?: (config: TransitionConfig) => void
|
|
34
|
+
onTransitionComplete?: (duration: number) => void
|
|
35
|
+
onPerformanceOptimized?: (metrics: TransitionPerformanceMetrics) => void
|
|
36
|
+
onDeviceOptimized?: (deviceType: string) => void
|
|
37
|
+
onAccessibilityEnhanced?: (feature: string) => void
|
|
18
38
|
}
|
|
19
39
|
|
|
20
40
|
export const useAdvancedTransitionSystem = (
|
|
21
|
-
config= {},
|
|
22
|
-
callbacks= {}
|
|
41
|
+
config: TransitionConfig = {},
|
|
42
|
+
callbacks: AdvancedTransitionSystemCallbacks = {}
|
|
23
43
|
) => {
|
|
24
44
|
const {
|
|
25
45
|
duration = 300,
|
|
26
46
|
easing = 'ease-out',
|
|
27
47
|
delay = 0,
|
|
28
|
-
performance= true,
|
|
48
|
+
performance: enablePerformance = true,
|
|
29
49
|
deviceOptimization = true,
|
|
30
50
|
accessibility = true,
|
|
31
51
|
batteryAware = true
|
|
32
52
|
} = config
|
|
33
53
|
|
|
34
54
|
const [transitionState, setTransitionState] = useState<TransitionState>({
|
|
35
|
-
isTransitioning,
|
|
36
|
-
currentEasing,
|
|
37
|
-
currentDuration,
|
|
38
|
-
currentDelay,
|
|
39
|
-
performanceScore,
|
|
40
|
-
deviceType,
|
|
41
|
-
batteryLevel,
|
|
42
|
-
reducedMotion
|
|
55
|
+
isTransitioning: false,
|
|
56
|
+
currentEasing: easing,
|
|
57
|
+
currentDuration: duration,
|
|
58
|
+
currentDelay: delay,
|
|
59
|
+
performanceScore: 0,
|
|
60
|
+
deviceType: 'desktop',
|
|
61
|
+
batteryLevel: 'normal',
|
|
62
|
+
reducedMotion: false
|
|
63
|
+
})
|
|
43
64
|
|
|
44
65
|
const [performanceMetrics, setPerformanceMetrics] = useState<TransitionPerformanceMetrics>({
|
|
45
|
-
frameRate,
|
|
46
|
-
memoryUsage,
|
|
47
|
-
transitionTime,
|
|
48
|
-
smoothness,
|
|
49
|
-
batteryImpact
|
|
66
|
+
frameRate: 60,
|
|
67
|
+
memoryUsage: 0,
|
|
68
|
+
transitionTime: 0,
|
|
69
|
+
smoothness: 0,
|
|
70
|
+
batteryImpact: 0
|
|
71
|
+
})
|
|
50
72
|
|
|
51
73
|
const [isOptimizing, setIsOptimizing] = useState(false)
|
|
52
74
|
const [optimizations, setOptimizations] = useState<string[]>([])
|
|
@@ -61,7 +83,7 @@ export const useAdvancedTransitionSystem = (
|
|
|
61
83
|
const detectDeviceType = useCallback(() => {
|
|
62
84
|
const width = window.innerWidth
|
|
63
85
|
|
|
64
|
-
let deviceType] = 'desktop'
|
|
86
|
+
let deviceType: TransitionState['deviceType'] = 'desktop'
|
|
65
87
|
|
|
66
88
|
if (width <= 480) {
|
|
67
89
|
deviceType = 'mobile'
|
|
@@ -81,11 +103,12 @@ export const useAdvancedTransitionSystem = (
|
|
|
81
103
|
|
|
82
104
|
// Detect reduced motion preference
|
|
83
105
|
const detectReducedMotion = useCallback(() => {
|
|
84
|
-
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion)').matches
|
|
106
|
+
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches
|
|
85
107
|
|
|
86
108
|
setTransitionState(prev => ({
|
|
87
109
|
...prev,
|
|
88
|
-
reducedMotion
|
|
110
|
+
reducedMotion: prefersReducedMotion
|
|
111
|
+
}))
|
|
89
112
|
|
|
90
113
|
return prefersReducedMotion
|
|
91
114
|
}, [])
|
|
@@ -98,23 +121,27 @@ export const useAdvancedTransitionSystem = (
|
|
|
98
121
|
|
|
99
122
|
setTransitionState(prev => ({
|
|
100
123
|
...prev,
|
|
101
|
-
batteryLevel
|
|
124
|
+
batteryLevel: randomLevel
|
|
125
|
+
}))
|
|
102
126
|
|
|
103
127
|
return randomLevel
|
|
104
128
|
}, [])
|
|
105
129
|
|
|
106
130
|
// Optimize transition duration based on device and battery
|
|
107
|
-
const optimizeTransitionDuration = useCallback((baseDuration) => {
|
|
131
|
+
const optimizeTransitionDuration = useCallback((baseDuration: number) => {
|
|
108
132
|
let optimizedDuration = baseDuration
|
|
109
133
|
|
|
110
134
|
// Device-specific optimization
|
|
111
135
|
if (deviceOptimization) {
|
|
112
136
|
switch (transitionState.deviceType) {
|
|
113
|
-
case 'mobile'
|
|
137
|
+
case 'mobile':
|
|
138
|
+
optimizedDuration = Math.min(baseDuration, 200)
|
|
114
139
|
break
|
|
115
|
-
case 'tablet'
|
|
140
|
+
case 'tablet':
|
|
141
|
+
optimizedDuration = Math.min(baseDuration, 300)
|
|
116
142
|
break
|
|
117
|
-
case 'desktop'
|
|
143
|
+
case 'desktop':
|
|
144
|
+
optimizedDuration = baseDuration
|
|
118
145
|
break
|
|
119
146
|
}
|
|
120
147
|
}
|
|
@@ -122,11 +149,16 @@ export const useAdvancedTransitionSystem = (
|
|
|
122
149
|
// Battery-aware optimization
|
|
123
150
|
if (batteryAware) {
|
|
124
151
|
switch (transitionState.batteryLevel) {
|
|
125
|
-
case 'low'
|
|
152
|
+
case 'low':
|
|
153
|
+
optimizedDuration = Math.min(optimizedDuration, 150)
|
|
126
154
|
break
|
|
127
|
-
case 'critical'
|
|
155
|
+
case 'critical':
|
|
156
|
+
optimizedDuration = Math.min(optimizedDuration, 100)
|
|
128
157
|
break
|
|
129
|
-
case 'normal'
|
|
158
|
+
case 'normal':
|
|
159
|
+
default:
|
|
160
|
+
break
|
|
161
|
+
}
|
|
130
162
|
}
|
|
131
163
|
|
|
132
164
|
// Reduced motion optimization
|
|
@@ -138,16 +170,17 @@ export const useAdvancedTransitionSystem = (
|
|
|
138
170
|
}, [deviceOptimization, batteryAware, transitionState.deviceType, transitionState.batteryLevel, transitionState.reducedMotion])
|
|
139
171
|
|
|
140
172
|
// Start a transition with optimization
|
|
141
|
-
const startTransition = useCallback((customConfig
|
|
173
|
+
const startTransition = useCallback((customConfig?: Partial<TransitionConfig>) => {
|
|
142
174
|
const finalConfig = { ...config, ...customConfig }
|
|
143
175
|
const optimizedDuration = optimizeTransitionDuration(finalConfig.duration || duration)
|
|
144
176
|
|
|
145
177
|
setTransitionState(prev => ({
|
|
146
178
|
...prev,
|
|
147
|
-
isTransitioning,
|
|
148
|
-
currentDuration,
|
|
149
|
-
currentDelay,
|
|
150
|
-
currentEasing
|
|
179
|
+
isTransitioning: true,
|
|
180
|
+
currentDuration: optimizedDuration,
|
|
181
|
+
currentDelay: finalConfig.delay || delay,
|
|
182
|
+
currentEasing: finalConfig.easing || easing
|
|
183
|
+
}))
|
|
151
184
|
|
|
152
185
|
transitionStartTimeRef.current = performance.now()
|
|
153
186
|
frameCountRef.current = 0
|
|
@@ -159,7 +192,8 @@ export const useAdvancedTransitionSystem = (
|
|
|
159
192
|
setTimeout(() => {
|
|
160
193
|
setTransitionState(prev => ({
|
|
161
194
|
...prev,
|
|
162
|
-
isTransitioning
|
|
195
|
+
isTransitioning: false
|
|
196
|
+
}))
|
|
163
197
|
|
|
164
198
|
const actualDuration = performance.now() - transitionStartTimeRef.current
|
|
165
199
|
callbacks.onTransitionComplete?.(actualDuration)
|
|
@@ -187,30 +221,34 @@ export const useAdvancedTransitionSystem = (
|
|
|
187
221
|
// Calculate transition time if transitioning
|
|
188
222
|
const transitionTime = transitionState.isTransitioning
|
|
189
223
|
? currentTime - transitionStartTimeRef.current
|
|
190
|
-
|
|
224
|
+
: 0
|
|
225
|
+
|
|
226
|
+
// Calculate battery impact based on performance
|
|
227
|
+
const batteryImpact = Math.max(0, 100 - (currentFrameRate * 0.5) - memoryUsage * 0.3)
|
|
191
228
|
|
|
192
229
|
setPerformanceMetrics({
|
|
193
|
-
frameRate),
|
|
194
|
-
memoryUsage),
|
|
195
|
-
transitionTime),
|
|
196
|
-
smoothness),
|
|
197
|
-
batteryImpact)
|
|
230
|
+
frameRate: Math.round(currentFrameRate),
|
|
231
|
+
memoryUsage: Math.round(memoryUsage),
|
|
232
|
+
transitionTime: Math.round(transitionTime),
|
|
233
|
+
smoothness: Math.round(smoothness),
|
|
234
|
+
batteryImpact: Math.round(batteryImpact)
|
|
198
235
|
})
|
|
199
236
|
|
|
200
237
|
// Update performance score
|
|
201
238
|
const overallScore = Math.round((smoothness + batteryImpact) / 2)
|
|
202
239
|
setTransitionState(prev => ({
|
|
203
240
|
...prev,
|
|
204
|
-
performanceScore
|
|
241
|
+
performanceScore: overallScore
|
|
242
|
+
}))
|
|
205
243
|
|
|
206
244
|
lastFrameTimeRef.current = currentTime
|
|
207
245
|
|
|
208
246
|
callbacks.onPerformanceOptimized?.({
|
|
209
|
-
frameRate),
|
|
210
|
-
memoryUsage),
|
|
211
|
-
transitionTime),
|
|
212
|
-
smoothness),
|
|
213
|
-
batteryImpact)
|
|
247
|
+
frameRate: Math.round(currentFrameRate),
|
|
248
|
+
memoryUsage: Math.round(memoryUsage),
|
|
249
|
+
transitionTime: Math.round(transitionTime),
|
|
250
|
+
smoothness: Math.round(smoothness),
|
|
251
|
+
batteryImpact: Math.round(batteryImpact)
|
|
214
252
|
})
|
|
215
253
|
}
|
|
216
254
|
|
|
@@ -231,17 +269,20 @@ export const useAdvancedTransitionSystem = (
|
|
|
231
269
|
if (!deviceOptimization) return
|
|
232
270
|
|
|
233
271
|
const deviceType = detectDeviceType()
|
|
234
|
-
const optimizations] = []
|
|
272
|
+
const optimizations: string[] = []
|
|
235
273
|
|
|
236
274
|
switch (deviceType) {
|
|
237
|
-
case 'mobile'
|
|
275
|
+
case 'mobile':
|
|
276
|
+
optimizations.push('Mobile-optimized transitions (200ms max)')
|
|
238
277
|
optimizations.push('Reduced animation complexity')
|
|
239
278
|
optimizations.push('Touch-friendly timing')
|
|
240
279
|
break
|
|
241
|
-
case 'tablet'
|
|
280
|
+
case 'tablet':
|
|
281
|
+
optimizations.push('Tablet-optimized transitions (300ms max)')
|
|
242
282
|
optimizations.push('Balanced performance and smoothness')
|
|
243
283
|
break
|
|
244
|
-
case 'desktop'
|
|
284
|
+
case 'desktop':
|
|
285
|
+
optimizations.push('Desktop-optimized transitions (full duration)')
|
|
245
286
|
optimizations.push('Maximum visual quality')
|
|
246
287
|
break
|
|
247
288
|
}
|
|
@@ -294,7 +335,7 @@ export const useAdvancedTransitionSystem = (
|
|
|
294
335
|
}
|
|
295
336
|
|
|
296
337
|
// Listen for reduced motion changes
|
|
297
|
-
const mediaQuery = window.matchMedia('(prefers-reduced-motion)')
|
|
338
|
+
const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)')
|
|
298
339
|
const handleMotionChange = () => {
|
|
299
340
|
detectReducedMotion()
|
|
300
341
|
}
|
|
@@ -333,19 +374,19 @@ export const useAdvancedTransitionSystem = (
|
|
|
333
374
|
autoOptimize,
|
|
334
375
|
|
|
335
376
|
// Utility functions
|
|
336
|
-
getTransitionDuration) => transitionState.currentDuration,
|
|
337
|
-
getTransitionEasing) => transitionState.currentEasing,
|
|
338
|
-
getTransitionDelay) => transitionState.currentDelay,
|
|
339
|
-
isTransitionActive) => transitionState.isTransitioning,
|
|
340
|
-
getDeviceType) => transitionState.deviceType,
|
|
341
|
-
getBatteryLevel) => transitionState.batteryLevel,
|
|
342
|
-
getReducedMotion) => transitionState.reducedMotion,
|
|
343
|
-
getPerformanceScore) => transitionState.performanceScore,
|
|
344
|
-
isPerformanceOptimal) => transitionState.performanceScore >= 80,
|
|
345
|
-
getFrameRate) => performanceMetrics.frameRate,
|
|
346
|
-
getSmoothness) => performanceMetrics.smoothness,
|
|
347
|
-
getBatteryImpact) => performanceMetrics.batteryImpact,
|
|
348
|
-
clearOptimizations) => setOptimizations([])
|
|
377
|
+
getTransitionDuration: () => transitionState.currentDuration,
|
|
378
|
+
getTransitionEasing: () => transitionState.currentEasing,
|
|
379
|
+
getTransitionDelay: () => transitionState.currentDelay,
|
|
380
|
+
isTransitionActive: () => transitionState.isTransitioning,
|
|
381
|
+
getDeviceType: () => transitionState.deviceType,
|
|
382
|
+
getBatteryLevel: () => transitionState.batteryLevel,
|
|
383
|
+
getReducedMotion: () => transitionState.reducedMotion,
|
|
384
|
+
getPerformanceScore: () => transitionState.performanceScore,
|
|
385
|
+
isPerformanceOptimal: () => transitionState.performanceScore >= 80,
|
|
386
|
+
getFrameRate: () => performanceMetrics.frameRate,
|
|
387
|
+
getSmoothness: () => performanceMetrics.smoothness,
|
|
388
|
+
getBatteryImpact: () => performanceMetrics.batteryImpact,
|
|
389
|
+
clearOptimizations: () => setOptimizations([])
|
|
349
390
|
}
|
|
350
391
|
}
|
|
351
392
|
|
|
@@ -1,52 +1,74 @@
|
|
|
1
1
|
import { useState, useCallback, useRef, useEffect } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface TransitionConfig {
|
|
4
|
-
duration
|
|
4
|
+
duration?: number
|
|
5
|
+
easing?: 'ease-out' | 'ease-in' | 'ease-in-out' | 'ease-out-quint' | 'ease-in-quint' | 'ease-in-out-quint' | 'ease-out-expo' | 'ease-in-expo' | 'ease-in-out-expo' | 'ease-out-circ' | 'ease-in-circ' | 'ease-in-out-circ'
|
|
6
|
+
delay?: number
|
|
7
|
+
performance?: boolean
|
|
8
|
+
deviceOptimization?: boolean
|
|
9
|
+
accessibility?: boolean
|
|
10
|
+
batteryAware?: boolean
|
|
11
|
+
}
|
|
5
12
|
|
|
6
13
|
export interface TransitionState {
|
|
7
|
-
isTransitioning
|
|
14
|
+
isTransitioning: boolean
|
|
15
|
+
currentEasing: string
|
|
16
|
+
currentDuration: number
|
|
17
|
+
currentDelay: number
|
|
18
|
+
performanceScore: number
|
|
19
|
+
deviceType: 'mobile' | 'tablet' | 'desktop'
|
|
20
|
+
batteryLevel: 'normal' | 'low' | 'critical'
|
|
21
|
+
reducedMotion: boolean
|
|
22
|
+
}
|
|
8
23
|
|
|
9
24
|
export interface TransitionPerformanceMetrics {
|
|
10
|
-
frameRate
|
|
25
|
+
frameRate: number
|
|
26
|
+
memoryUsage: number
|
|
27
|
+
transitionTime: number
|
|
28
|
+
smoothness: number
|
|
29
|
+
batteryImpact: number
|
|
30
|
+
}
|
|
11
31
|
|
|
12
32
|
export interface AdvancedTransitionSystemCallbacks {
|
|
13
|
-
onTransitionStart
|
|
14
|
-
onTransitionComplete
|
|
15
|
-
onPerformanceOptimized
|
|
16
|
-
onDeviceOptimized
|
|
17
|
-
onAccessibilityEnhanced
|
|
33
|
+
onTransitionStart?: (config: TransitionConfig) => void
|
|
34
|
+
onTransitionComplete?: (duration: number) => void
|
|
35
|
+
onPerformanceOptimized?: (metrics: TransitionPerformanceMetrics) => void
|
|
36
|
+
onDeviceOptimized?: (deviceType: string) => void
|
|
37
|
+
onAccessibilityEnhanced?: (feature: string) => void
|
|
18
38
|
}
|
|
19
39
|
|
|
20
40
|
export const useAdvancedTransitionSystem = (
|
|
21
|
-
config= {},
|
|
22
|
-
callbacks= {}
|
|
41
|
+
config: TransitionConfig = {},
|
|
42
|
+
callbacks: AdvancedTransitionSystemCallbacks = {}
|
|
23
43
|
) => {
|
|
24
44
|
const {
|
|
25
45
|
duration = 300,
|
|
26
46
|
easing = 'ease-out',
|
|
27
47
|
delay = 0,
|
|
28
|
-
performance= true,
|
|
48
|
+
performance: enablePerformance = true,
|
|
29
49
|
deviceOptimization = true,
|
|
30
50
|
accessibility = true,
|
|
31
51
|
batteryAware = true
|
|
32
52
|
} = config
|
|
33
53
|
|
|
34
54
|
const [transitionState, setTransitionState] = useState<TransitionState>({
|
|
35
|
-
isTransitioning,
|
|
36
|
-
currentEasing,
|
|
37
|
-
currentDuration,
|
|
38
|
-
currentDelay,
|
|
39
|
-
performanceScore,
|
|
40
|
-
deviceType,
|
|
41
|
-
batteryLevel,
|
|
42
|
-
reducedMotion
|
|
55
|
+
isTransitioning: false,
|
|
56
|
+
currentEasing: easing,
|
|
57
|
+
currentDuration: duration,
|
|
58
|
+
currentDelay: delay,
|
|
59
|
+
performanceScore: 0,
|
|
60
|
+
deviceType: 'desktop',
|
|
61
|
+
batteryLevel: 'normal',
|
|
62
|
+
reducedMotion: false
|
|
63
|
+
})
|
|
43
64
|
|
|
44
65
|
const [performanceMetrics, setPerformanceMetrics] = useState<TransitionPerformanceMetrics>({
|
|
45
|
-
frameRate,
|
|
46
|
-
memoryUsage,
|
|
47
|
-
transitionTime,
|
|
48
|
-
smoothness,
|
|
49
|
-
batteryImpact
|
|
66
|
+
frameRate: 60,
|
|
67
|
+
memoryUsage: 0,
|
|
68
|
+
transitionTime: 0,
|
|
69
|
+
smoothness: 0,
|
|
70
|
+
batteryImpact: 0
|
|
71
|
+
})
|
|
50
72
|
|
|
51
73
|
const [isOptimizing, setIsOptimizing] = useState(false)
|
|
52
74
|
const [optimizations, setOptimizations] = useState<string[]>([])
|
|
@@ -61,7 +83,7 @@ export const useAdvancedTransitionSystem = (
|
|
|
61
83
|
const detectDeviceType = useCallback(() => {
|
|
62
84
|
const width = window.innerWidth
|
|
63
85
|
|
|
64
|
-
let deviceType] = 'desktop'
|
|
86
|
+
let deviceType: TransitionState['deviceType'] = 'desktop'
|
|
65
87
|
|
|
66
88
|
if (width <= 480) {
|
|
67
89
|
deviceType = 'mobile'
|
|
@@ -81,11 +103,12 @@ export const useAdvancedTransitionSystem = (
|
|
|
81
103
|
|
|
82
104
|
// Detect reduced motion preference
|
|
83
105
|
const detectReducedMotion = useCallback(() => {
|
|
84
|
-
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion)').matches
|
|
106
|
+
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches
|
|
85
107
|
|
|
86
108
|
setTransitionState(prev => ({
|
|
87
109
|
...prev,
|
|
88
|
-
reducedMotion
|
|
110
|
+
reducedMotion: prefersReducedMotion
|
|
111
|
+
}))
|
|
89
112
|
|
|
90
113
|
return prefersReducedMotion
|
|
91
114
|
}, [])
|
|
@@ -98,23 +121,27 @@ export const useAdvancedTransitionSystem = (
|
|
|
98
121
|
|
|
99
122
|
setTransitionState(prev => ({
|
|
100
123
|
...prev,
|
|
101
|
-
batteryLevel
|
|
124
|
+
batteryLevel: randomLevel
|
|
125
|
+
}))
|
|
102
126
|
|
|
103
127
|
return randomLevel
|
|
104
128
|
}, [])
|
|
105
129
|
|
|
106
130
|
// Optimize transition duration based on device and battery
|
|
107
|
-
const optimizeTransitionDuration = useCallback((baseDuration) => {
|
|
131
|
+
const optimizeTransitionDuration = useCallback((baseDuration: number) => {
|
|
108
132
|
let optimizedDuration = baseDuration
|
|
109
133
|
|
|
110
134
|
// Device-specific optimization
|
|
111
135
|
if (deviceOptimization) {
|
|
112
136
|
switch (transitionState.deviceType) {
|
|
113
|
-
case 'mobile'
|
|
137
|
+
case 'mobile':
|
|
138
|
+
optimizedDuration = Math.min(baseDuration, 200)
|
|
114
139
|
break
|
|
115
|
-
case 'tablet'
|
|
140
|
+
case 'tablet':
|
|
141
|
+
optimizedDuration = Math.min(baseDuration, 300)
|
|
116
142
|
break
|
|
117
|
-
case 'desktop'
|
|
143
|
+
case 'desktop':
|
|
144
|
+
optimizedDuration = baseDuration
|
|
118
145
|
break
|
|
119
146
|
}
|
|
120
147
|
}
|
|
@@ -122,11 +149,16 @@ export const useAdvancedTransitionSystem = (
|
|
|
122
149
|
// Battery-aware optimization
|
|
123
150
|
if (batteryAware) {
|
|
124
151
|
switch (transitionState.batteryLevel) {
|
|
125
|
-
case 'low'
|
|
152
|
+
case 'low':
|
|
153
|
+
optimizedDuration = Math.min(optimizedDuration, 150)
|
|
126
154
|
break
|
|
127
|
-
case 'critical'
|
|
155
|
+
case 'critical':
|
|
156
|
+
optimizedDuration = Math.min(optimizedDuration, 100)
|
|
128
157
|
break
|
|
129
|
-
case 'normal'
|
|
158
|
+
case 'normal':
|
|
159
|
+
default:
|
|
160
|
+
break
|
|
161
|
+
}
|
|
130
162
|
}
|
|
131
163
|
|
|
132
164
|
// Reduced motion optimization
|
|
@@ -138,16 +170,17 @@ export const useAdvancedTransitionSystem = (
|
|
|
138
170
|
}, [deviceOptimization, batteryAware, transitionState.deviceType, transitionState.batteryLevel, transitionState.reducedMotion])
|
|
139
171
|
|
|
140
172
|
// Start a transition with optimization
|
|
141
|
-
const startTransition = useCallback((customConfig
|
|
173
|
+
const startTransition = useCallback((customConfig?: Partial<TransitionConfig>) => {
|
|
142
174
|
const finalConfig = { ...config, ...customConfig }
|
|
143
175
|
const optimizedDuration = optimizeTransitionDuration(finalConfig.duration || duration)
|
|
144
176
|
|
|
145
177
|
setTransitionState(prev => ({
|
|
146
178
|
...prev,
|
|
147
|
-
isTransitioning,
|
|
148
|
-
currentDuration,
|
|
149
|
-
currentDelay,
|
|
150
|
-
currentEasing
|
|
179
|
+
isTransitioning: true,
|
|
180
|
+
currentDuration: optimizedDuration,
|
|
181
|
+
currentDelay: finalConfig.delay || delay,
|
|
182
|
+
currentEasing: finalConfig.easing || easing
|
|
183
|
+
}))
|
|
151
184
|
|
|
152
185
|
transitionStartTimeRef.current = performance.now()
|
|
153
186
|
frameCountRef.current = 0
|
|
@@ -159,7 +192,8 @@ export const useAdvancedTransitionSystem = (
|
|
|
159
192
|
setTimeout(() => {
|
|
160
193
|
setTransitionState(prev => ({
|
|
161
194
|
...prev,
|
|
162
|
-
isTransitioning
|
|
195
|
+
isTransitioning: false
|
|
196
|
+
}))
|
|
163
197
|
|
|
164
198
|
const actualDuration = performance.now() - transitionStartTimeRef.current
|
|
165
199
|
callbacks.onTransitionComplete?.(actualDuration)
|
|
@@ -187,30 +221,34 @@ export const useAdvancedTransitionSystem = (
|
|
|
187
221
|
// Calculate transition time if transitioning
|
|
188
222
|
const transitionTime = transitionState.isTransitioning
|
|
189
223
|
? currentTime - transitionStartTimeRef.current
|
|
190
|
-
|
|
224
|
+
: 0
|
|
225
|
+
|
|
226
|
+
// Calculate battery impact based on performance
|
|
227
|
+
const batteryImpact = Math.max(0, 100 - (currentFrameRate * 0.5) - memoryUsage * 0.3)
|
|
191
228
|
|
|
192
229
|
setPerformanceMetrics({
|
|
193
|
-
frameRate),
|
|
194
|
-
memoryUsage),
|
|
195
|
-
transitionTime),
|
|
196
|
-
smoothness),
|
|
197
|
-
batteryImpact)
|
|
230
|
+
frameRate: Math.round(currentFrameRate),
|
|
231
|
+
memoryUsage: Math.round(memoryUsage),
|
|
232
|
+
transitionTime: Math.round(transitionTime),
|
|
233
|
+
smoothness: Math.round(smoothness),
|
|
234
|
+
batteryImpact: Math.round(batteryImpact)
|
|
198
235
|
})
|
|
199
236
|
|
|
200
237
|
// Update performance score
|
|
201
238
|
const overallScore = Math.round((smoothness + batteryImpact) / 2)
|
|
202
239
|
setTransitionState(prev => ({
|
|
203
240
|
...prev,
|
|
204
|
-
performanceScore
|
|
241
|
+
performanceScore: overallScore
|
|
242
|
+
}))
|
|
205
243
|
|
|
206
244
|
lastFrameTimeRef.current = currentTime
|
|
207
245
|
|
|
208
246
|
callbacks.onPerformanceOptimized?.({
|
|
209
|
-
frameRate),
|
|
210
|
-
memoryUsage),
|
|
211
|
-
transitionTime),
|
|
212
|
-
smoothness),
|
|
213
|
-
batteryImpact)
|
|
247
|
+
frameRate: Math.round(currentFrameRate),
|
|
248
|
+
memoryUsage: Math.round(memoryUsage),
|
|
249
|
+
transitionTime: Math.round(transitionTime),
|
|
250
|
+
smoothness: Math.round(smoothness),
|
|
251
|
+
batteryImpact: Math.round(batteryImpact)
|
|
214
252
|
})
|
|
215
253
|
}
|
|
216
254
|
|
|
@@ -231,17 +269,20 @@ export const useAdvancedTransitionSystem = (
|
|
|
231
269
|
if (!deviceOptimization) return
|
|
232
270
|
|
|
233
271
|
const deviceType = detectDeviceType()
|
|
234
|
-
const optimizations] = []
|
|
272
|
+
const optimizations: string[] = []
|
|
235
273
|
|
|
236
274
|
switch (deviceType) {
|
|
237
|
-
case 'mobile'
|
|
275
|
+
case 'mobile':
|
|
276
|
+
optimizations.push('Mobile-optimized transitions (200ms max)')
|
|
238
277
|
optimizations.push('Reduced animation complexity')
|
|
239
278
|
optimizations.push('Touch-friendly timing')
|
|
240
279
|
break
|
|
241
|
-
case 'tablet'
|
|
280
|
+
case 'tablet':
|
|
281
|
+
optimizations.push('Tablet-optimized transitions (300ms max)')
|
|
242
282
|
optimizations.push('Balanced performance and smoothness')
|
|
243
283
|
break
|
|
244
|
-
case 'desktop'
|
|
284
|
+
case 'desktop':
|
|
285
|
+
optimizations.push('Desktop-optimized transitions (full duration)')
|
|
245
286
|
optimizations.push('Maximum visual quality')
|
|
246
287
|
break
|
|
247
288
|
}
|
|
@@ -294,7 +335,7 @@ export const useAdvancedTransitionSystem = (
|
|
|
294
335
|
}
|
|
295
336
|
|
|
296
337
|
// Listen for reduced motion changes
|
|
297
|
-
const mediaQuery = window.matchMedia('(prefers-reduced-motion)')
|
|
338
|
+
const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)')
|
|
298
339
|
const handleMotionChange = () => {
|
|
299
340
|
detectReducedMotion()
|
|
300
341
|
}
|
|
@@ -333,19 +374,19 @@ export const useAdvancedTransitionSystem = (
|
|
|
333
374
|
autoOptimize,
|
|
334
375
|
|
|
335
376
|
// Utility functions
|
|
336
|
-
getTransitionDuration) => transitionState.currentDuration,
|
|
337
|
-
getTransitionEasing) => transitionState.currentEasing,
|
|
338
|
-
getTransitionDelay) => transitionState.currentDelay,
|
|
339
|
-
isTransitionActive) => transitionState.isTransitioning,
|
|
340
|
-
getDeviceType) => transitionState.deviceType,
|
|
341
|
-
getBatteryLevel) => transitionState.batteryLevel,
|
|
342
|
-
getReducedMotion) => transitionState.reducedMotion,
|
|
343
|
-
getPerformanceScore) => transitionState.performanceScore,
|
|
344
|
-
isPerformanceOptimal) => transitionState.performanceScore >= 80,
|
|
345
|
-
getFrameRate) => performanceMetrics.frameRate,
|
|
346
|
-
getSmoothness) => performanceMetrics.smoothness,
|
|
347
|
-
getBatteryImpact) => performanceMetrics.batteryImpact,
|
|
348
|
-
clearOptimizations) => setOptimizations([])
|
|
377
|
+
getTransitionDuration: () => transitionState.currentDuration,
|
|
378
|
+
getTransitionEasing: () => transitionState.currentEasing,
|
|
379
|
+
getTransitionDelay: () => transitionState.currentDelay,
|
|
380
|
+
isTransitionActive: () => transitionState.isTransitioning,
|
|
381
|
+
getDeviceType: () => transitionState.deviceType,
|
|
382
|
+
getBatteryLevel: () => transitionState.batteryLevel,
|
|
383
|
+
getReducedMotion: () => transitionState.reducedMotion,
|
|
384
|
+
getPerformanceScore: () => transitionState.performanceScore,
|
|
385
|
+
isPerformanceOptimal: () => transitionState.performanceScore >= 80,
|
|
386
|
+
getFrameRate: () => performanceMetrics.frameRate,
|
|
387
|
+
getSmoothness: () => performanceMetrics.smoothness,
|
|
388
|
+
getBatteryImpact: () => performanceMetrics.batteryImpact,
|
|
389
|
+
clearOptimizations: () => setOptimizations([])
|
|
349
390
|
}
|
|
350
391
|
}
|
|
351
392
|
|