@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,50 +1,70 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback, useRef } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface TouchOptimizationConfig {
|
|
4
|
-
enablePassiveListeners
|
|
4
|
+
enablePassiveListeners: boolean
|
|
5
|
+
enableTouchActionOptimization: boolean
|
|
6
|
+
enableBatteryOptimization: boolean
|
|
7
|
+
enablePerformanceMonitoring: boolean
|
|
8
|
+
touchActionMode: 'auto' | 'manipulation' | 'pan-x' | 'pan-y' | 'none'
|
|
9
|
+
maxTouchPoints: number
|
|
10
|
+
touchEventThrottling: number
|
|
11
|
+
}
|
|
5
12
|
|
|
6
13
|
export interface TouchPerformanceMetrics {
|
|
7
|
-
touchEventCount
|
|
14
|
+
touchEventCount: number
|
|
15
|
+
averageTouchDuration: number
|
|
16
|
+
touchEventLatency: number
|
|
17
|
+
batteryImpact: 'low' | 'medium' | 'high'
|
|
18
|
+
performanceScore: 'excellent' | 'good' | 'fair' | 'poor'
|
|
19
|
+
}
|
|
8
20
|
|
|
9
21
|
export interface TouchOptimizationCallbacks {
|
|
10
|
-
onTouchPerformanceWarning
|
|
11
|
-
onBatteryOptimization
|
|
12
|
-
onTouchEventThrottling
|
|
22
|
+
onTouchPerformanceWarning?: (metrics: TouchPerformanceMetrics) => void
|
|
23
|
+
onBatteryOptimization?: (enabled: boolean) => void
|
|
24
|
+
onTouchEventThrottling?: (enabled: boolean) => void
|
|
13
25
|
}
|
|
14
26
|
|
|
15
27
|
export interface TouchOptimizationState {
|
|
16
|
-
isOptimized
|
|
28
|
+
isOptimized: boolean
|
|
29
|
+
currentTouchAction: string
|
|
30
|
+
passiveListenersEnabled: boolean
|
|
31
|
+
batteryOptimizationEnabled: boolean
|
|
32
|
+
throttlingEnabled: boolean
|
|
33
|
+
lastOptimization: Date | null
|
|
34
|
+
}
|
|
17
35
|
|
|
18
36
|
export const useTouchOptimization = (
|
|
19
|
-
elementRef
|
|
20
|
-
callbacks= {},
|
|
21
|
-
config= {}
|
|
37
|
+
elementRef: React.RefObject<HTMLElement>,
|
|
38
|
+
callbacks: TouchOptimizationCallbacks = {},
|
|
39
|
+
config: Partial<TouchOptimizationConfig> = {}
|
|
22
40
|
) => {
|
|
23
|
-
const defaultConfig= {
|
|
24
|
-
enablePassiveListeners,
|
|
25
|
-
enableTouchActionOptimization,
|
|
26
|
-
enableBatteryOptimization,
|
|
27
|
-
enablePerformanceMonitoring,
|
|
28
|
-
touchActionMode,
|
|
29
|
-
maxTouchPoints,
|
|
30
|
-
touchEventThrottling, // ~60fps
|
|
41
|
+
const defaultConfig: TouchOptimizationConfig = {
|
|
42
|
+
enablePassiveListeners: true,
|
|
43
|
+
enableTouchActionOptimization: true,
|
|
44
|
+
enableBatteryOptimization: true,
|
|
45
|
+
enablePerformanceMonitoring: true,
|
|
46
|
+
touchActionMode: 'manipulation',
|
|
47
|
+
maxTouchPoints: 5,
|
|
48
|
+
touchEventThrottling: 16, // ~60fps
|
|
31
49
|
...config
|
|
32
50
|
}
|
|
33
51
|
|
|
34
52
|
const [optimizationState, setOptimizationState] = useState<TouchOptimizationState>({
|
|
35
|
-
isOptimized,
|
|
36
|
-
currentTouchAction,
|
|
37
|
-
passiveListenersEnabled,
|
|
38
|
-
batteryOptimizationEnabled,
|
|
39
|
-
throttlingEnabled,
|
|
40
|
-
lastOptimization
|
|
53
|
+
isOptimized: false,
|
|
54
|
+
currentTouchAction: defaultConfig.touchActionMode,
|
|
55
|
+
passiveListenersEnabled: false,
|
|
56
|
+
batteryOptimizationEnabled: false,
|
|
57
|
+
throttlingEnabled: false,
|
|
58
|
+
lastOptimization: null
|
|
59
|
+
})
|
|
41
60
|
|
|
42
61
|
const [performanceMetrics, setPerformanceMetrics] = useState<TouchPerformanceMetrics>({
|
|
43
|
-
touchEventCount,
|
|
44
|
-
averageTouchDuration,
|
|
45
|
-
touchEventLatency,
|
|
46
|
-
batteryImpact,
|
|
47
|
-
performanceScore
|
|
62
|
+
touchEventCount: 0,
|
|
63
|
+
averageTouchDuration: 0,
|
|
64
|
+
touchEventLatency: 0,
|
|
65
|
+
batteryImpact: 'low',
|
|
66
|
+
performanceScore: 'excellent'
|
|
67
|
+
})
|
|
48
68
|
|
|
49
69
|
const touchEventTimesRef = useRef<number[]>([])
|
|
50
70
|
const lastTouchEventRef = useRef<number>(0)
|
|
@@ -62,11 +82,11 @@ export const useTouchOptimization = (
|
|
|
62
82
|
isLowPowerModeRef.current = battery.level < 0.2
|
|
63
83
|
|
|
64
84
|
if (defaultConfig.enableBatteryOptimization && isLowPowerModeRef.current) {
|
|
65
|
-
setOptimizationState(prev => ({ ...prev, batteryOptimizationEnabled}))
|
|
85
|
+
setOptimizationState(prev => ({ ...prev, batteryOptimizationEnabled: true }))
|
|
66
86
|
callbacks.onBatteryOptimization?.(true)
|
|
67
87
|
}
|
|
68
88
|
} catch (error) {
|
|
69
|
-
console.warn('Battery API not supported, error)
|
|
89
|
+
console.warn('Battery API not supported:', error)
|
|
70
90
|
}
|
|
71
91
|
}
|
|
72
92
|
}
|
|
@@ -75,7 +95,7 @@ export const useTouchOptimization = (
|
|
|
75
95
|
}, [defaultConfig.enableBatteryOptimization, callbacks])
|
|
76
96
|
|
|
77
97
|
// Calculate performance score
|
|
78
|
-
const calculatePerformanceScore = useCallback((metrics)=> {
|
|
98
|
+
const calculatePerformanceScore = useCallback((metrics: TouchPerformanceMetrics): 'excellent' | 'good' | 'fair' | 'poor' => {
|
|
79
99
|
if (metrics.touchEventLatency < 16 && metrics.averageTouchDuration < 50) return 'excellent'
|
|
80
100
|
if (metrics.touchEventLatency < 32 && metrics.averageTouchDuration < 100) return 'good'
|
|
81
101
|
if (metrics.touchEventLatency < 64 && metrics.averageTouchDuration < 200) return 'fair'
|
|
@@ -83,7 +103,7 @@ export const useTouchOptimization = (
|
|
|
83
103
|
}, [])
|
|
84
104
|
|
|
85
105
|
// Update performance metrics
|
|
86
|
-
const updatePerformanceMetrics = useCallback((touchDuration, latency) => {
|
|
106
|
+
const updatePerformanceMetrics = useCallback((touchDuration: number, latency: number) => {
|
|
87
107
|
const currentTime = Date.now()
|
|
88
108
|
touchEventTimesRef.current.push(currentTime)
|
|
89
109
|
|
|
@@ -97,12 +117,15 @@ export const useTouchOptimization = (
|
|
|
97
117
|
const newAverageDuration = (prev.averageTouchDuration * prev.touchEventCount + touchDuration) / newCount
|
|
98
118
|
const newAverageLatency = (prev.touchEventLatency * prev.touchEventCount + latency) / newCount
|
|
99
119
|
|
|
100
|
-
const batteryImpact= isLowPowerModeRef.current ? 'high'
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
120
|
+
const batteryImpact: 'low' | 'medium' | 'high' = isLowPowerModeRef.current ? 'high' : batteryLevelRef.current && batteryLevelRef.current < 0.5 ? 'medium' : 'low'
|
|
121
|
+
|
|
122
|
+
const newMetrics: TouchPerformanceMetrics = {
|
|
123
|
+
touchEventCount: newCount,
|
|
124
|
+
averageTouchDuration: newAverageDuration,
|
|
125
|
+
touchEventLatency: newAverageLatency,
|
|
104
126
|
batteryImpact,
|
|
105
|
-
performanceScore
|
|
127
|
+
performanceScore: 'excellent'
|
|
128
|
+
}
|
|
106
129
|
|
|
107
130
|
newMetrics.performanceScore = calculatePerformanceScore(newMetrics)
|
|
108
131
|
|
|
@@ -126,8 +149,8 @@ export const useTouchOptimization = (
|
|
|
126
149
|
element.style.touchAction = defaultConfig.touchActionMode
|
|
127
150
|
setOptimizationState(prev => ({
|
|
128
151
|
...prev,
|
|
129
|
-
currentTouchAction,
|
|
130
|
-
lastOptimization)
|
|
152
|
+
currentTouchAction: defaultConfig.touchActionMode,
|
|
153
|
+
lastOptimization: new Date()
|
|
131
154
|
}))
|
|
132
155
|
}
|
|
133
156
|
}, [elementRef, defaultConfig.enableTouchActionOptimization, defaultConfig.touchActionMode])
|
|
@@ -141,7 +164,7 @@ export const useTouchOptimization = (
|
|
|
141
164
|
let supportsPassive = false
|
|
142
165
|
try {
|
|
143
166
|
const opts = Object.defineProperty({}, 'passive', {
|
|
144
|
-
get) => { supportsPassive = true; return true; }
|
|
167
|
+
get: () => { supportsPassive = true; return true; }
|
|
145
168
|
})
|
|
146
169
|
// Use a dummy event listener to test passive support
|
|
147
170
|
const testListener = () => {}
|
|
@@ -152,7 +175,7 @@ export const useTouchOptimization = (
|
|
|
152
175
|
}
|
|
153
176
|
|
|
154
177
|
if (supportsPassive) {
|
|
155
|
-
setOptimizationState(prev => ({ ...prev, passiveListenersEnabled}))
|
|
178
|
+
setOptimizationState(prev => ({ ...prev, passiveListenersEnabled: true }))
|
|
156
179
|
}
|
|
157
180
|
}, [elementRef, defaultConfig.enablePassiveListeners])
|
|
158
181
|
|
|
@@ -160,12 +183,12 @@ export const useTouchOptimization = (
|
|
|
160
183
|
const enableTouchEventThrottling = useCallback(() => {
|
|
161
184
|
if (!defaultConfig.enablePerformanceMonitoring) return
|
|
162
185
|
|
|
163
|
-
setOptimizationState(prev => ({ ...prev, throttlingEnabled}))
|
|
186
|
+
setOptimizationState(prev => ({ ...prev, throttlingEnabled: true }))
|
|
164
187
|
callbacks.onTouchEventThrottling?.(true)
|
|
165
188
|
}, [defaultConfig.enablePerformanceMonitoring, callbacks])
|
|
166
189
|
|
|
167
190
|
// Optimize touch event handling
|
|
168
|
-
const optimizeTouchEventHandling = useCallback((event) => {
|
|
191
|
+
const optimizeTouchEventHandling = useCallback((event: TouchEvent) => {
|
|
169
192
|
const currentTime = Date.now()
|
|
170
193
|
const touchDuration = currentTime - lastTouchEventRef.current
|
|
171
194
|
const latency = performance.now() - event.timeStamp
|
|
@@ -199,8 +222,8 @@ export const useTouchOptimization = (
|
|
|
199
222
|
|
|
200
223
|
setOptimizationState(prev => ({
|
|
201
224
|
...prev,
|
|
202
|
-
isOptimized,
|
|
203
|
-
lastOptimization)
|
|
225
|
+
isOptimized: true,
|
|
226
|
+
lastOptimization: new Date()
|
|
204
227
|
}))
|
|
205
228
|
}, [
|
|
206
229
|
optimizeTouchAction,
|
|
@@ -217,19 +240,21 @@ export const useTouchOptimization = (
|
|
|
217
240
|
}
|
|
218
241
|
|
|
219
242
|
setOptimizationState({
|
|
220
|
-
isOptimized,
|
|
221
|
-
currentTouchAction,
|
|
222
|
-
passiveListenersEnabled,
|
|
223
|
-
batteryOptimizationEnabled,
|
|
224
|
-
throttlingEnabled,
|
|
225
|
-
lastOptimization
|
|
243
|
+
isOptimized: false,
|
|
244
|
+
currentTouchAction: 'auto',
|
|
245
|
+
passiveListenersEnabled: false,
|
|
246
|
+
batteryOptimizationEnabled: false,
|
|
247
|
+
throttlingEnabled: false,
|
|
248
|
+
lastOptimization: null
|
|
249
|
+
})
|
|
226
250
|
|
|
227
251
|
setPerformanceMetrics({
|
|
228
|
-
touchEventCount,
|
|
229
|
-
averageTouchDuration,
|
|
230
|
-
touchEventLatency,
|
|
231
|
-
batteryImpact,
|
|
232
|
-
performanceScore
|
|
252
|
+
touchEventCount: 0,
|
|
253
|
+
averageTouchDuration: 0,
|
|
254
|
+
touchEventLatency: 0,
|
|
255
|
+
batteryImpact: 'low',
|
|
256
|
+
performanceScore: 'excellent'
|
|
257
|
+
})
|
|
233
258
|
|
|
234
259
|
if (touchEventThrottleTimerRef.current) {
|
|
235
260
|
clearTimeout(touchEventThrottleTimerRef.current)
|
|
@@ -246,13 +271,13 @@ export const useTouchOptimization = (
|
|
|
246
271
|
applyOptimizations()
|
|
247
272
|
|
|
248
273
|
// Add touch event listener
|
|
249
|
-
const handleTouchEvent = (event) => {
|
|
274
|
+
const handleTouchEvent = (event: TouchEvent) => {
|
|
250
275
|
if (defaultConfig.enablePerformanceMonitoring) {
|
|
251
276
|
optimizeTouchEventHandling(event)
|
|
252
277
|
}
|
|
253
278
|
}
|
|
254
279
|
|
|
255
|
-
const eventOptions = optimizationState.passiveListenersEnabled ? { passive} }
|
|
280
|
+
const eventOptions = optimizationState.passiveListenersEnabled ? { passive: true } : {}
|
|
256
281
|
element.addEventListener('touchstart', handleTouchEvent, eventOptions)
|
|
257
282
|
element.addEventListener('touchmove', handleTouchEvent, eventOptions)
|
|
258
283
|
element.addEventListener('touchend', handleTouchEvent, eventOptions)
|
|
@@ -293,14 +318,14 @@ export const useTouchOptimization = (
|
|
|
293
318
|
// Utility functions
|
|
294
319
|
const getOptimizationReport = useCallback(() => {
|
|
295
320
|
return {
|
|
296
|
-
state,
|
|
297
|
-
metrics,
|
|
298
|
-
recommendations)
|
|
321
|
+
state: optimizationState,
|
|
322
|
+
metrics: performanceMetrics,
|
|
323
|
+
recommendations: getOptimizationRecommendations()
|
|
299
324
|
}
|
|
300
325
|
}, [optimizationState, performanceMetrics])
|
|
301
326
|
|
|
302
327
|
const getOptimizationRecommendations = useCallback(() => {
|
|
303
|
-
const recommendations] = []
|
|
328
|
+
const recommendations: string[] = []
|
|
304
329
|
|
|
305
330
|
if (performanceMetrics.performanceScore === 'poor') {
|
|
306
331
|
recommendations.push('Consider enabling touch event throttling')
|
|
@@ -330,19 +355,21 @@ export const useTouchOptimization = (
|
|
|
330
355
|
}
|
|
331
356
|
|
|
332
357
|
// Convenience hook for basic touch optimization
|
|
333
|
-
export const useBasicTouchOptimization = (elementRef) => {
|
|
358
|
+
export const useBasicTouchOptimization = (elementRef: React.RefObject<HTMLElement>) => {
|
|
334
359
|
return useTouchOptimization(elementRef, {}, {
|
|
335
|
-
enablePassiveListeners,
|
|
336
|
-
enableTouchActionOptimization,
|
|
337
|
-
enableBatteryOptimization,
|
|
338
|
-
enablePerformanceMonitoring
|
|
360
|
+
enablePassiveListeners: true,
|
|
361
|
+
enableTouchActionOptimization: true,
|
|
362
|
+
enableBatteryOptimization: false,
|
|
363
|
+
enablePerformanceMonitoring: false
|
|
364
|
+
})
|
|
339
365
|
}
|
|
340
366
|
|
|
341
367
|
// Convenience hook for battery-aware touch optimization
|
|
342
|
-
export const useBatteryAwareTouchOptimization = (elementRef) => {
|
|
368
|
+
export const useBatteryAwareTouchOptimization = (elementRef: React.RefObject<HTMLElement>) => {
|
|
343
369
|
return useTouchOptimization(elementRef, {}, {
|
|
344
|
-
enablePassiveListeners,
|
|
345
|
-
enableTouchActionOptimization,
|
|
346
|
-
enableBatteryOptimization,
|
|
347
|
-
enablePerformanceMonitoring
|
|
370
|
+
enablePassiveListeners: true,
|
|
371
|
+
enableTouchActionOptimization: true,
|
|
372
|
+
enableBatteryOptimization: true,
|
|
373
|
+
enablePerformanceMonitoring: true
|
|
374
|
+
})
|
|
348
375
|
}
|
|
@@ -1,50 +1,70 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback, useRef } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface TouchOptimizationConfig {
|
|
4
|
-
enablePassiveListeners
|
|
4
|
+
enablePassiveListeners: boolean
|
|
5
|
+
enableTouchActionOptimization: boolean
|
|
6
|
+
enableBatteryOptimization: boolean
|
|
7
|
+
enablePerformanceMonitoring: boolean
|
|
8
|
+
touchActionMode: 'auto' | 'manipulation' | 'pan-x' | 'pan-y' | 'none'
|
|
9
|
+
maxTouchPoints: number
|
|
10
|
+
touchEventThrottling: number
|
|
11
|
+
}
|
|
5
12
|
|
|
6
13
|
export interface TouchPerformanceMetrics {
|
|
7
|
-
touchEventCount
|
|
14
|
+
touchEventCount: number
|
|
15
|
+
averageTouchDuration: number
|
|
16
|
+
touchEventLatency: number
|
|
17
|
+
batteryImpact: 'low' | 'medium' | 'high'
|
|
18
|
+
performanceScore: 'excellent' | 'good' | 'fair' | 'poor'
|
|
19
|
+
}
|
|
8
20
|
|
|
9
21
|
export interface TouchOptimizationCallbacks {
|
|
10
|
-
onTouchPerformanceWarning
|
|
11
|
-
onBatteryOptimization
|
|
12
|
-
onTouchEventThrottling
|
|
22
|
+
onTouchPerformanceWarning?: (metrics: TouchPerformanceMetrics) => void
|
|
23
|
+
onBatteryOptimization?: (enabled: boolean) => void
|
|
24
|
+
onTouchEventThrottling?: (enabled: boolean) => void
|
|
13
25
|
}
|
|
14
26
|
|
|
15
27
|
export interface TouchOptimizationState {
|
|
16
|
-
isOptimized
|
|
28
|
+
isOptimized: boolean
|
|
29
|
+
currentTouchAction: string
|
|
30
|
+
passiveListenersEnabled: boolean
|
|
31
|
+
batteryOptimizationEnabled: boolean
|
|
32
|
+
throttlingEnabled: boolean
|
|
33
|
+
lastOptimization: Date | null
|
|
34
|
+
}
|
|
17
35
|
|
|
18
36
|
export const useTouchOptimization = (
|
|
19
|
-
elementRef
|
|
20
|
-
callbacks= {},
|
|
21
|
-
config= {}
|
|
37
|
+
elementRef: React.RefObject<HTMLElement>,
|
|
38
|
+
callbacks: TouchOptimizationCallbacks = {},
|
|
39
|
+
config: Partial<TouchOptimizationConfig> = {}
|
|
22
40
|
) => {
|
|
23
|
-
const defaultConfig= {
|
|
24
|
-
enablePassiveListeners,
|
|
25
|
-
enableTouchActionOptimization,
|
|
26
|
-
enableBatteryOptimization,
|
|
27
|
-
enablePerformanceMonitoring,
|
|
28
|
-
touchActionMode,
|
|
29
|
-
maxTouchPoints,
|
|
30
|
-
touchEventThrottling, // ~60fps
|
|
41
|
+
const defaultConfig: TouchOptimizationConfig = {
|
|
42
|
+
enablePassiveListeners: true,
|
|
43
|
+
enableTouchActionOptimization: true,
|
|
44
|
+
enableBatteryOptimization: true,
|
|
45
|
+
enablePerformanceMonitoring: true,
|
|
46
|
+
touchActionMode: 'manipulation',
|
|
47
|
+
maxTouchPoints: 5,
|
|
48
|
+
touchEventThrottling: 16, // ~60fps
|
|
31
49
|
...config
|
|
32
50
|
}
|
|
33
51
|
|
|
34
52
|
const [optimizationState, setOptimizationState] = useState<TouchOptimizationState>({
|
|
35
|
-
isOptimized,
|
|
36
|
-
currentTouchAction,
|
|
37
|
-
passiveListenersEnabled,
|
|
38
|
-
batteryOptimizationEnabled,
|
|
39
|
-
throttlingEnabled,
|
|
40
|
-
lastOptimization
|
|
53
|
+
isOptimized: false,
|
|
54
|
+
currentTouchAction: defaultConfig.touchActionMode,
|
|
55
|
+
passiveListenersEnabled: false,
|
|
56
|
+
batteryOptimizationEnabled: false,
|
|
57
|
+
throttlingEnabled: false,
|
|
58
|
+
lastOptimization: null
|
|
59
|
+
})
|
|
41
60
|
|
|
42
61
|
const [performanceMetrics, setPerformanceMetrics] = useState<TouchPerformanceMetrics>({
|
|
43
|
-
touchEventCount,
|
|
44
|
-
averageTouchDuration,
|
|
45
|
-
touchEventLatency,
|
|
46
|
-
batteryImpact,
|
|
47
|
-
performanceScore
|
|
62
|
+
touchEventCount: 0,
|
|
63
|
+
averageTouchDuration: 0,
|
|
64
|
+
touchEventLatency: 0,
|
|
65
|
+
batteryImpact: 'low',
|
|
66
|
+
performanceScore: 'excellent'
|
|
67
|
+
})
|
|
48
68
|
|
|
49
69
|
const touchEventTimesRef = useRef<number[]>([])
|
|
50
70
|
const lastTouchEventRef = useRef<number>(0)
|
|
@@ -62,11 +82,11 @@ export const useTouchOptimization = (
|
|
|
62
82
|
isLowPowerModeRef.current = battery.level < 0.2
|
|
63
83
|
|
|
64
84
|
if (defaultConfig.enableBatteryOptimization && isLowPowerModeRef.current) {
|
|
65
|
-
setOptimizationState(prev => ({ ...prev, batteryOptimizationEnabled}))
|
|
85
|
+
setOptimizationState(prev => ({ ...prev, batteryOptimizationEnabled: true }))
|
|
66
86
|
callbacks.onBatteryOptimization?.(true)
|
|
67
87
|
}
|
|
68
88
|
} catch (error) {
|
|
69
|
-
console.warn('Battery API not supported, error)
|
|
89
|
+
console.warn('Battery API not supported:', error)
|
|
70
90
|
}
|
|
71
91
|
}
|
|
72
92
|
}
|
|
@@ -75,7 +95,7 @@ export const useTouchOptimization = (
|
|
|
75
95
|
}, [defaultConfig.enableBatteryOptimization, callbacks])
|
|
76
96
|
|
|
77
97
|
// Calculate performance score
|
|
78
|
-
const calculatePerformanceScore = useCallback((metrics)=> {
|
|
98
|
+
const calculatePerformanceScore = useCallback((metrics: TouchPerformanceMetrics): 'excellent' | 'good' | 'fair' | 'poor' => {
|
|
79
99
|
if (metrics.touchEventLatency < 16 && metrics.averageTouchDuration < 50) return 'excellent'
|
|
80
100
|
if (metrics.touchEventLatency < 32 && metrics.averageTouchDuration < 100) return 'good'
|
|
81
101
|
if (metrics.touchEventLatency < 64 && metrics.averageTouchDuration < 200) return 'fair'
|
|
@@ -83,7 +103,7 @@ export const useTouchOptimization = (
|
|
|
83
103
|
}, [])
|
|
84
104
|
|
|
85
105
|
// Update performance metrics
|
|
86
|
-
const updatePerformanceMetrics = useCallback((touchDuration, latency) => {
|
|
106
|
+
const updatePerformanceMetrics = useCallback((touchDuration: number, latency: number) => {
|
|
87
107
|
const currentTime = Date.now()
|
|
88
108
|
touchEventTimesRef.current.push(currentTime)
|
|
89
109
|
|
|
@@ -97,12 +117,15 @@ export const useTouchOptimization = (
|
|
|
97
117
|
const newAverageDuration = (prev.averageTouchDuration * prev.touchEventCount + touchDuration) / newCount
|
|
98
118
|
const newAverageLatency = (prev.touchEventLatency * prev.touchEventCount + latency) / newCount
|
|
99
119
|
|
|
100
|
-
const batteryImpact= isLowPowerModeRef.current ? 'high'
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
120
|
+
const batteryImpact: 'low' | 'medium' | 'high' = isLowPowerModeRef.current ? 'high' : batteryLevelRef.current && batteryLevelRef.current < 0.5 ? 'medium' : 'low'
|
|
121
|
+
|
|
122
|
+
const newMetrics: TouchPerformanceMetrics = {
|
|
123
|
+
touchEventCount: newCount,
|
|
124
|
+
averageTouchDuration: newAverageDuration,
|
|
125
|
+
touchEventLatency: newAverageLatency,
|
|
104
126
|
batteryImpact,
|
|
105
|
-
performanceScore
|
|
127
|
+
performanceScore: 'excellent'
|
|
128
|
+
}
|
|
106
129
|
|
|
107
130
|
newMetrics.performanceScore = calculatePerformanceScore(newMetrics)
|
|
108
131
|
|
|
@@ -126,8 +149,8 @@ export const useTouchOptimization = (
|
|
|
126
149
|
element.style.touchAction = defaultConfig.touchActionMode
|
|
127
150
|
setOptimizationState(prev => ({
|
|
128
151
|
...prev,
|
|
129
|
-
currentTouchAction,
|
|
130
|
-
lastOptimization)
|
|
152
|
+
currentTouchAction: defaultConfig.touchActionMode,
|
|
153
|
+
lastOptimization: new Date()
|
|
131
154
|
}))
|
|
132
155
|
}
|
|
133
156
|
}, [elementRef, defaultConfig.enableTouchActionOptimization, defaultConfig.touchActionMode])
|
|
@@ -141,7 +164,7 @@ export const useTouchOptimization = (
|
|
|
141
164
|
let supportsPassive = false
|
|
142
165
|
try {
|
|
143
166
|
const opts = Object.defineProperty({}, 'passive', {
|
|
144
|
-
get) => { supportsPassive = true; return true; }
|
|
167
|
+
get: () => { supportsPassive = true; return true; }
|
|
145
168
|
})
|
|
146
169
|
// Use a dummy event listener to test passive support
|
|
147
170
|
const testListener = () => {}
|
|
@@ -152,7 +175,7 @@ export const useTouchOptimization = (
|
|
|
152
175
|
}
|
|
153
176
|
|
|
154
177
|
if (supportsPassive) {
|
|
155
|
-
setOptimizationState(prev => ({ ...prev, passiveListenersEnabled}))
|
|
178
|
+
setOptimizationState(prev => ({ ...prev, passiveListenersEnabled: true }))
|
|
156
179
|
}
|
|
157
180
|
}, [elementRef, defaultConfig.enablePassiveListeners])
|
|
158
181
|
|
|
@@ -160,12 +183,12 @@ export const useTouchOptimization = (
|
|
|
160
183
|
const enableTouchEventThrottling = useCallback(() => {
|
|
161
184
|
if (!defaultConfig.enablePerformanceMonitoring) return
|
|
162
185
|
|
|
163
|
-
setOptimizationState(prev => ({ ...prev, throttlingEnabled}))
|
|
186
|
+
setOptimizationState(prev => ({ ...prev, throttlingEnabled: true }))
|
|
164
187
|
callbacks.onTouchEventThrottling?.(true)
|
|
165
188
|
}, [defaultConfig.enablePerformanceMonitoring, callbacks])
|
|
166
189
|
|
|
167
190
|
// Optimize touch event handling
|
|
168
|
-
const optimizeTouchEventHandling = useCallback((event) => {
|
|
191
|
+
const optimizeTouchEventHandling = useCallback((event: TouchEvent) => {
|
|
169
192
|
const currentTime = Date.now()
|
|
170
193
|
const touchDuration = currentTime - lastTouchEventRef.current
|
|
171
194
|
const latency = performance.now() - event.timeStamp
|
|
@@ -199,8 +222,8 @@ export const useTouchOptimization = (
|
|
|
199
222
|
|
|
200
223
|
setOptimizationState(prev => ({
|
|
201
224
|
...prev,
|
|
202
|
-
isOptimized,
|
|
203
|
-
lastOptimization)
|
|
225
|
+
isOptimized: true,
|
|
226
|
+
lastOptimization: new Date()
|
|
204
227
|
}))
|
|
205
228
|
}, [
|
|
206
229
|
optimizeTouchAction,
|
|
@@ -217,19 +240,21 @@ export const useTouchOptimization = (
|
|
|
217
240
|
}
|
|
218
241
|
|
|
219
242
|
setOptimizationState({
|
|
220
|
-
isOptimized,
|
|
221
|
-
currentTouchAction,
|
|
222
|
-
passiveListenersEnabled,
|
|
223
|
-
batteryOptimizationEnabled,
|
|
224
|
-
throttlingEnabled,
|
|
225
|
-
lastOptimization
|
|
243
|
+
isOptimized: false,
|
|
244
|
+
currentTouchAction: 'auto',
|
|
245
|
+
passiveListenersEnabled: false,
|
|
246
|
+
batteryOptimizationEnabled: false,
|
|
247
|
+
throttlingEnabled: false,
|
|
248
|
+
lastOptimization: null
|
|
249
|
+
})
|
|
226
250
|
|
|
227
251
|
setPerformanceMetrics({
|
|
228
|
-
touchEventCount,
|
|
229
|
-
averageTouchDuration,
|
|
230
|
-
touchEventLatency,
|
|
231
|
-
batteryImpact,
|
|
232
|
-
performanceScore
|
|
252
|
+
touchEventCount: 0,
|
|
253
|
+
averageTouchDuration: 0,
|
|
254
|
+
touchEventLatency: 0,
|
|
255
|
+
batteryImpact: 'low',
|
|
256
|
+
performanceScore: 'excellent'
|
|
257
|
+
})
|
|
233
258
|
|
|
234
259
|
if (touchEventThrottleTimerRef.current) {
|
|
235
260
|
clearTimeout(touchEventThrottleTimerRef.current)
|
|
@@ -246,13 +271,13 @@ export const useTouchOptimization = (
|
|
|
246
271
|
applyOptimizations()
|
|
247
272
|
|
|
248
273
|
// Add touch event listener
|
|
249
|
-
const handleTouchEvent = (event) => {
|
|
274
|
+
const handleTouchEvent = (event: TouchEvent) => {
|
|
250
275
|
if (defaultConfig.enablePerformanceMonitoring) {
|
|
251
276
|
optimizeTouchEventHandling(event)
|
|
252
277
|
}
|
|
253
278
|
}
|
|
254
279
|
|
|
255
|
-
const eventOptions = optimizationState.passiveListenersEnabled ? { passive} }
|
|
280
|
+
const eventOptions = optimizationState.passiveListenersEnabled ? { passive: true } : {}
|
|
256
281
|
element.addEventListener('touchstart', handleTouchEvent, eventOptions)
|
|
257
282
|
element.addEventListener('touchmove', handleTouchEvent, eventOptions)
|
|
258
283
|
element.addEventListener('touchend', handleTouchEvent, eventOptions)
|
|
@@ -293,14 +318,14 @@ export const useTouchOptimization = (
|
|
|
293
318
|
// Utility functions
|
|
294
319
|
const getOptimizationReport = useCallback(() => {
|
|
295
320
|
return {
|
|
296
|
-
state,
|
|
297
|
-
metrics,
|
|
298
|
-
recommendations)
|
|
321
|
+
state: optimizationState,
|
|
322
|
+
metrics: performanceMetrics,
|
|
323
|
+
recommendations: getOptimizationRecommendations()
|
|
299
324
|
}
|
|
300
325
|
}, [optimizationState, performanceMetrics])
|
|
301
326
|
|
|
302
327
|
const getOptimizationRecommendations = useCallback(() => {
|
|
303
|
-
const recommendations] = []
|
|
328
|
+
const recommendations: string[] = []
|
|
304
329
|
|
|
305
330
|
if (performanceMetrics.performanceScore === 'poor') {
|
|
306
331
|
recommendations.push('Consider enabling touch event throttling')
|
|
@@ -330,19 +355,21 @@ export const useTouchOptimization = (
|
|
|
330
355
|
}
|
|
331
356
|
|
|
332
357
|
// Convenience hook for basic touch optimization
|
|
333
|
-
export const useBasicTouchOptimization = (elementRef) => {
|
|
358
|
+
export const useBasicTouchOptimization = (elementRef: React.RefObject<HTMLElement>) => {
|
|
334
359
|
return useTouchOptimization(elementRef, {}, {
|
|
335
|
-
enablePassiveListeners,
|
|
336
|
-
enableTouchActionOptimization,
|
|
337
|
-
enableBatteryOptimization,
|
|
338
|
-
enablePerformanceMonitoring
|
|
360
|
+
enablePassiveListeners: true,
|
|
361
|
+
enableTouchActionOptimization: true,
|
|
362
|
+
enableBatteryOptimization: false,
|
|
363
|
+
enablePerformanceMonitoring: false
|
|
364
|
+
})
|
|
339
365
|
}
|
|
340
366
|
|
|
341
367
|
// Convenience hook for battery-aware touch optimization
|
|
342
|
-
export const useBatteryAwareTouchOptimization = (elementRef) => {
|
|
368
|
+
export const useBatteryAwareTouchOptimization = (elementRef: React.RefObject<HTMLElement>) => {
|
|
343
369
|
return useTouchOptimization(elementRef, {}, {
|
|
344
|
-
enablePassiveListeners,
|
|
345
|
-
enableTouchActionOptimization,
|
|
346
|
-
enableBatteryOptimization,
|
|
347
|
-
enablePerformanceMonitoring
|
|
370
|
+
enablePassiveListeners: true,
|
|
371
|
+
enableTouchActionOptimization: true,
|
|
372
|
+
enableBatteryOptimization: true,
|
|
373
|
+
enablePerformanceMonitoring: true
|
|
374
|
+
})
|
|
348
375
|
}
|