@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,25 +1,47 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback, useRef } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface TabletLayoutState {
|
|
4
|
-
orientation
|
|
5
|
-
|
|
4
|
+
orientation: 'portrait' | 'landscape'
|
|
5
|
+
screenSize: 'small' | 'medium' | 'large'
|
|
6
|
+
isSplitView: boolean
|
|
7
|
+
isKeyboardVisible: boolean
|
|
8
|
+
safeAreaInsets: {
|
|
9
|
+
top: number
|
|
10
|
+
bottom: number
|
|
11
|
+
left: number
|
|
12
|
+
right: number
|
|
13
|
+
}
|
|
14
|
+
performanceMetrics: {
|
|
15
|
+
renderTime: number
|
|
16
|
+
memoryUsage: number
|
|
17
|
+
touchResponsiveness: number
|
|
18
|
+
orientationScore: number
|
|
19
|
+
}
|
|
6
20
|
}
|
|
7
21
|
|
|
8
22
|
export interface TabletLayoutConfig {
|
|
9
|
-
enableOrientationOptimization
|
|
23
|
+
enableOrientationOptimization?: boolean
|
|
24
|
+
enableSplitViewSupport?: boolean
|
|
25
|
+
enableKeyboardOptimization?: boolean
|
|
26
|
+
enableSafeAreaOptimization?: boolean
|
|
27
|
+
enablePerformanceOptimization?: boolean
|
|
28
|
+
enableTouchOptimization?: boolean
|
|
29
|
+
orientationChangeThreshold?: number
|
|
30
|
+
splitViewBreakpoint?: number
|
|
31
|
+
}
|
|
10
32
|
|
|
11
33
|
export interface TabletLayoutCallbacks {
|
|
12
|
-
onOrientationChange
|
|
13
|
-
onSplitViewChange
|
|
14
|
-
onKeyboardChange
|
|
15
|
-
onSafeAreaChange
|
|
16
|
-
onPerformanceChange
|
|
17
|
-
onTouchOptimization
|
|
34
|
+
onOrientationChange?: (orientation: 'portrait' | 'landscape') => void
|
|
35
|
+
onSplitViewChange?: (isSplitView: boolean) => void
|
|
36
|
+
onKeyboardChange?: (isVisible: boolean) => void
|
|
37
|
+
onSafeAreaChange?: (insets: any) => void
|
|
38
|
+
onPerformanceChange?: (metrics: any) => void
|
|
39
|
+
onTouchOptimization?: (optimization: string) => void
|
|
18
40
|
}
|
|
19
41
|
|
|
20
42
|
export const useTabletLayout = (
|
|
21
|
-
config= {},
|
|
22
|
-
callbacks= {}
|
|
43
|
+
config: TabletLayoutConfig = {},
|
|
44
|
+
callbacks: TabletLayoutCallbacks = {}
|
|
23
45
|
) => {
|
|
24
46
|
const {
|
|
25
47
|
enableOrientationOptimization = true,
|
|
@@ -33,15 +55,17 @@ export const useTabletLayout = (
|
|
|
33
55
|
} = config
|
|
34
56
|
|
|
35
57
|
const [state, setState] = useState<TabletLayoutState>({
|
|
36
|
-
orientation,
|
|
37
|
-
screenSize,
|
|
38
|
-
isSplitView,
|
|
39
|
-
isKeyboardVisible,
|
|
40
|
-
safeAreaInsets, bottom, left, right},
|
|
41
|
-
performanceMetrics
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
58
|
+
orientation: 'landscape',
|
|
59
|
+
screenSize: 'medium',
|
|
60
|
+
isSplitView: false,
|
|
61
|
+
isKeyboardVisible: false,
|
|
62
|
+
safeAreaInsets: { top: 0, bottom: 0, left: 0, right: 0 },
|
|
63
|
+
performanceMetrics: {
|
|
64
|
+
renderTime: 0,
|
|
65
|
+
memoryUsage: 0,
|
|
66
|
+
touchResponsiveness: 0,
|
|
67
|
+
orientationScore: 100
|
|
68
|
+
}
|
|
45
69
|
})
|
|
46
70
|
|
|
47
71
|
const [optimizations, setOptimizations] = useState<string[]>([])
|
|
@@ -57,8 +81,10 @@ export const useTabletLayout = (
|
|
|
57
81
|
|
|
58
82
|
const width = window.innerWidth
|
|
59
83
|
const height = window.innerHeight
|
|
60
|
-
const newOrientation = width > height ? 'landscape'
|
|
61
|
-
|
|
84
|
+
const newOrientation = width > height ? 'landscape' : 'portrait'
|
|
85
|
+
|
|
86
|
+
if (newOrientation !== state.orientation) {
|
|
87
|
+
setState(prev => ({ ...prev, orientation: newOrientation }))
|
|
62
88
|
callbacks.onOrientationChange?.(newOrientation)
|
|
63
89
|
|
|
64
90
|
// Optimize for new orientation
|
|
@@ -66,11 +92,11 @@ export const useTabletLayout = (
|
|
|
66
92
|
}
|
|
67
93
|
}, [enableOrientationOptimization, state.orientation, callbacks])
|
|
68
94
|
|
|
69
|
-
const optimizeForOrientation = useCallback((orientation) => {
|
|
95
|
+
const optimizeForOrientation = useCallback((orientation: 'portrait' | 'landscape') => {
|
|
70
96
|
setIsOptimizing(true)
|
|
71
97
|
|
|
72
98
|
setTimeout(() => {
|
|
73
|
-
const newOptimizations] = []
|
|
99
|
+
const newOptimizations: string[] = []
|
|
74
100
|
|
|
75
101
|
if (orientation === 'portrait') {
|
|
76
102
|
newOptimizations.push('Portrait layout optimized - vertical navigation enabled')
|
|
@@ -156,10 +182,10 @@ export const useTabletLayout = (
|
|
|
156
182
|
if (!enableSafeAreaOptimization) return
|
|
157
183
|
|
|
158
184
|
const safeAreaInsets = {
|
|
159
|
-
top).getPropertyValue('--sat') || '0'),
|
|
160
|
-
bottom).getPropertyValue('--sab') || '0'),
|
|
161
|
-
left).getPropertyValue('--sal') || '0'),
|
|
162
|
-
right).getPropertyValue('--sar') || '0')
|
|
185
|
+
top: parseInt(getComputedStyle(document.documentElement).getPropertyValue('--sat') || '0'),
|
|
186
|
+
bottom: parseInt(getComputedStyle(document.documentElement).getPropertyValue('--sab') || '0'),
|
|
187
|
+
left: parseInt(getComputedStyle(document.documentElement).getPropertyValue('--sal') || '0'),
|
|
188
|
+
right: parseInt(getComputedStyle(document.documentElement).getPropertyValue('--sar') || '0')
|
|
163
189
|
}
|
|
164
190
|
|
|
165
191
|
setState(prev => ({ ...prev, safeAreaInsets }))
|
|
@@ -169,12 +195,12 @@ export const useTabletLayout = (
|
|
|
169
195
|
optimizeForSafeArea(safeAreaInsets)
|
|
170
196
|
}, [enableSafeAreaOptimization, callbacks])
|
|
171
197
|
|
|
172
|
-
const optimizeForSafeArea = useCallback((insets) => {
|
|
198
|
+
const optimizeForSafeArea = useCallback((insets: any) => {
|
|
173
199
|
setIsOptimizing(true)
|
|
174
200
|
|
|
175
201
|
setTimeout(() => {
|
|
176
202
|
const optimizations = [
|
|
177
|
-
`Safe area insets applied}px top, ${insets.bottom}px bottom`,
|
|
203
|
+
`Safe area insets applied: ${insets.top}px top, ${insets.bottom}px bottom`,
|
|
178
204
|
'Layout adjusted for device-specific safe areas',
|
|
179
205
|
'Touch targets positioned within safe areas'
|
|
180
206
|
]
|
|
@@ -195,10 +221,12 @@ export const useTabletLayout = (
|
|
|
195
221
|
const renderTime = endTime - startTime
|
|
196
222
|
|
|
197
223
|
// Calculate orientation-specific performance score
|
|
198
|
-
const orientationScore = state.orientation === 'landscape' ? 95
|
|
224
|
+
const orientationScore = state.orientation === 'landscape' ? 95 : 90
|
|
225
|
+
|
|
226
|
+
const performanceMetrics = {
|
|
199
227
|
renderTime,
|
|
200
|
-
memoryUsage) * 100,
|
|
201
|
-
touchResponsiveness) * 15,
|
|
228
|
+
memoryUsage: Math.random() * 100,
|
|
229
|
+
touchResponsiveness: 85 + Math.random() * 15,
|
|
202
230
|
orientationScore
|
|
203
231
|
}
|
|
204
232
|
|
|
@@ -345,11 +373,12 @@ export const useTabletLayout = (
|
|
|
345
373
|
optimizeTouchInteractions,
|
|
346
374
|
|
|
347
375
|
// Computed values
|
|
348
|
-
isPortrait=== 'portrait',
|
|
349
|
-
isLandscape=== 'landscape',
|
|
350
|
-
hasSafeArea).some(value => value > 0),
|
|
351
|
-
performanceScore,
|
|
352
|
-
optimizationCount
|
|
376
|
+
isPortrait: state.orientation === 'portrait',
|
|
377
|
+
isLandscape: state.orientation === 'landscape',
|
|
378
|
+
hasSafeArea: Object.values(state.safeAreaInsets).some(value => value > 0),
|
|
379
|
+
performanceScore: state.performanceMetrics.orientationScore,
|
|
380
|
+
optimizationCount: optimizations.length
|
|
381
|
+
}
|
|
353
382
|
}
|
|
354
383
|
|
|
355
384
|
export default useTabletLayout
|
|
@@ -1,25 +1,54 @@
|
|
|
1
1
|
import { useState, useCallback, useRef, useEffect } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface TouchFriendlyConfig {
|
|
4
|
-
enableTouchOptimization
|
|
4
|
+
enableTouchOptimization?: boolean
|
|
5
|
+
enableGestureSupport?: boolean
|
|
6
|
+
enableTouchFeedback?: boolean
|
|
7
|
+
enablePerformanceMonitoring?: boolean
|
|
8
|
+
enableAccessibilitySupport?: boolean
|
|
9
|
+
touchTargetSize?: number
|
|
10
|
+
touchFeedbackDelay?: number
|
|
11
|
+
gestureSensitivity?: number
|
|
12
|
+
}
|
|
5
13
|
|
|
6
14
|
export interface TouchState {
|
|
7
|
-
isTouching
|
|
15
|
+
isTouching: boolean
|
|
16
|
+
touchCount: number
|
|
17
|
+
touchStartTime: number
|
|
18
|
+
touchDuration: number
|
|
19
|
+
touchStartX: number
|
|
20
|
+
touchStartY: number
|
|
21
|
+
touchCurrentX: number
|
|
22
|
+
touchCurrentY: number
|
|
23
|
+
touchDeltaX: number
|
|
24
|
+
touchDeltaY: number
|
|
25
|
+
touchVelocity: number
|
|
26
|
+
gestureType: 'tap' | 'double-tap' | 'long-press' | 'swipe' | 'pinch' | 'rotate' | 'none'
|
|
27
|
+
touchTarget: HTMLElement | null
|
|
28
|
+
}
|
|
8
29
|
|
|
9
30
|
export interface TouchOptimization {
|
|
10
|
-
id
|
|
31
|
+
id: string
|
|
32
|
+
name: string
|
|
33
|
+
type: 'touch' | 'gesture' | 'feedback' | 'performance' | 'accessibility'
|
|
34
|
+
applied: boolean
|
|
35
|
+
impact: 'low' | 'medium' | 'high'
|
|
36
|
+
description: string
|
|
37
|
+
touchTargetSize?: number
|
|
38
|
+
gestureType?: string
|
|
39
|
+
}
|
|
11
40
|
|
|
12
41
|
export interface TouchFriendlyInputCallbacks {
|
|
13
|
-
onTouchStateChanged
|
|
14
|
-
onTouchOptimizationApplied
|
|
15
|
-
onGestureDetected
|
|
16
|
-
onTouchFeedbackTriggered
|
|
17
|
-
onPerformanceOptimized
|
|
42
|
+
onTouchStateChanged?: (state: TouchState) => void
|
|
43
|
+
onTouchOptimizationApplied?: (optimization: TouchOptimization) => void
|
|
44
|
+
onGestureDetected?: (gesture: string) => void
|
|
45
|
+
onTouchFeedbackTriggered?: (feedback: string) => void
|
|
46
|
+
onPerformanceOptimized?: (optimization: string) => void
|
|
18
47
|
}
|
|
19
48
|
|
|
20
49
|
export const useTouchFriendlyInput = (
|
|
21
|
-
config= {},
|
|
22
|
-
callbacks= {}
|
|
50
|
+
config: TouchFriendlyConfig = {},
|
|
51
|
+
callbacks: TouchFriendlyInputCallbacks = {}
|
|
23
52
|
) => {
|
|
24
53
|
const {
|
|
25
54
|
enableTouchOptimization = true,
|
|
@@ -33,27 +62,29 @@ export const useTouchFriendlyInput = (
|
|
|
33
62
|
} = config
|
|
34
63
|
|
|
35
64
|
const [touchState, setTouchState] = useState<TouchState>({
|
|
36
|
-
isTouching,
|
|
37
|
-
touchCount,
|
|
38
|
-
touchStartTime,
|
|
39
|
-
touchDuration,
|
|
40
|
-
touchStartX,
|
|
41
|
-
touchStartY,
|
|
42
|
-
touchCurrentX,
|
|
43
|
-
touchCurrentY,
|
|
44
|
-
touchDeltaX,
|
|
45
|
-
touchDeltaY,
|
|
46
|
-
touchVelocity,
|
|
47
|
-
gestureType,
|
|
48
|
-
touchTarget
|
|
65
|
+
isTouching: false,
|
|
66
|
+
touchCount: 0,
|
|
67
|
+
touchStartTime: 0,
|
|
68
|
+
touchDuration: 0,
|
|
69
|
+
touchStartX: 0,
|
|
70
|
+
touchStartY: 0,
|
|
71
|
+
touchCurrentX: 0,
|
|
72
|
+
touchCurrentY: 0,
|
|
73
|
+
touchDeltaX: 0,
|
|
74
|
+
touchDeltaY: 0,
|
|
75
|
+
touchVelocity: 0,
|
|
76
|
+
gestureType: 'none',
|
|
77
|
+
touchTarget: null
|
|
78
|
+
})
|
|
49
79
|
|
|
50
80
|
const [touchOptimizations, setTouchOptimizations] = useState<TouchOptimization[]>([])
|
|
51
81
|
const [isOptimizing, setIsOptimizing] = useState(false)
|
|
52
82
|
const [performanceMetrics, setPerformanceMetrics] = useState({
|
|
53
|
-
touchResponseTime,
|
|
54
|
-
gestureRecognitionTime,
|
|
55
|
-
touchEventLatency,
|
|
56
|
-
memoryUsage
|
|
83
|
+
touchResponseTime: 0,
|
|
84
|
+
gestureRecognitionTime: 0,
|
|
85
|
+
touchEventLatency: 0,
|
|
86
|
+
memoryUsage: 0
|
|
87
|
+
})
|
|
57
88
|
|
|
58
89
|
const touchStartTimeRef = useRef(0)
|
|
59
90
|
const lastTouchTimeRef = useRef(0)
|
|
@@ -63,41 +94,43 @@ export const useTouchFriendlyInput = (
|
|
|
63
94
|
const touchTargetRef = useRef<HTMLElement | null>(null)
|
|
64
95
|
|
|
65
96
|
// Touch event handlers
|
|
66
|
-
const handleTouchStart = useCallback((event) => {
|
|
97
|
+
const handleTouchStart = useCallback((event: TouchEvent) => {
|
|
67
98
|
const touch = event.touches[0]
|
|
68
99
|
const currentTime = performance.now()
|
|
69
100
|
|
|
70
101
|
setTouchState(prev => ({
|
|
71
102
|
...prev,
|
|
72
|
-
isTouching,
|
|
73
|
-
touchCount,
|
|
74
|
-
touchStartTime,
|
|
75
|
-
touchStartX,
|
|
76
|
-
touchStartY,
|
|
77
|
-
touchCurrentX,
|
|
78
|
-
touchCurrentY,
|
|
79
|
-
touchDeltaX,
|
|
80
|
-
touchDeltaY,
|
|
81
|
-
touchTarget
|
|
103
|
+
isTouching: true,
|
|
104
|
+
touchCount: event.touches.length,
|
|
105
|
+
touchStartTime: currentTime,
|
|
106
|
+
touchStartX: touch.clientX,
|
|
107
|
+
touchStartY: touch.clientY,
|
|
108
|
+
touchCurrentX: touch.clientX,
|
|
109
|
+
touchCurrentY: touch.clientY,
|
|
110
|
+
touchDeltaX: 0,
|
|
111
|
+
touchDeltaY: 0,
|
|
112
|
+
touchTarget: touch.target as HTMLElement
|
|
113
|
+
}))
|
|
82
114
|
|
|
83
115
|
touchStartTimeRef.current = currentTime
|
|
84
116
|
touchTargetRef.current = touch.target as HTMLElement
|
|
85
117
|
|
|
86
118
|
callbacks.onTouchStateChanged?.({
|
|
87
119
|
...touchState,
|
|
88
|
-
isTouching,
|
|
89
|
-
touchCount,
|
|
90
|
-
touchStartTime,
|
|
91
|
-
touchStartX,
|
|
92
|
-
touchStartY,
|
|
93
|
-
touchCurrentX,
|
|
94
|
-
touchCurrentY,
|
|
95
|
-
touchDeltaX,
|
|
96
|
-
touchDeltaY,
|
|
97
|
-
touchTarget
|
|
120
|
+
isTouching: true,
|
|
121
|
+
touchCount: event.touches.length,
|
|
122
|
+
touchStartTime: currentTime,
|
|
123
|
+
touchStartX: touch.clientX,
|
|
124
|
+
touchStartY: touch.clientY,
|
|
125
|
+
touchCurrentX: touch.clientX,
|
|
126
|
+
touchCurrentY: touch.clientY,
|
|
127
|
+
touchDeltaX: 0,
|
|
128
|
+
touchDeltaY: 0,
|
|
129
|
+
touchTarget: touch.target as HTMLElement
|
|
130
|
+
})
|
|
98
131
|
}, [touchState, callbacks])
|
|
99
132
|
|
|
100
|
-
const handleTouchMove = useCallback((event) => {
|
|
133
|
+
const handleTouchMove = useCallback((event: TouchEvent) => {
|
|
101
134
|
const touch = event.touches[0]
|
|
102
135
|
const currentTime = performance.now()
|
|
103
136
|
const deltaX = touch.clientX - touchState.touchStartX
|
|
@@ -107,21 +140,23 @@ export const useTouchFriendlyInput = (
|
|
|
107
140
|
|
|
108
141
|
setTouchState(prev => ({
|
|
109
142
|
...prev,
|
|
110
|
-
touchCurrentX,
|
|
111
|
-
touchCurrentY,
|
|
112
|
-
touchDeltaX,
|
|
113
|
-
touchDeltaY,
|
|
114
|
-
touchDuration,
|
|
115
|
-
touchVelocity
|
|
143
|
+
touchCurrentX: touch.clientX,
|
|
144
|
+
touchCurrentY: touch.clientY,
|
|
145
|
+
touchDeltaX: deltaX,
|
|
146
|
+
touchDeltaY: deltaY,
|
|
147
|
+
touchDuration: duration,
|
|
148
|
+
touchVelocity: velocity
|
|
149
|
+
}))
|
|
116
150
|
|
|
117
151
|
callbacks.onTouchStateChanged?.({
|
|
118
152
|
...touchState,
|
|
119
|
-
touchCurrentX,
|
|
120
|
-
touchCurrentY,
|
|
121
|
-
touchDeltaX,
|
|
122
|
-
touchDeltaY,
|
|
123
|
-
touchDuration,
|
|
124
|
-
touchVelocity
|
|
153
|
+
touchCurrentX: touch.clientX,
|
|
154
|
+
touchCurrentY: touch.clientY,
|
|
155
|
+
touchDeltaX: deltaX,
|
|
156
|
+
touchDeltaY: deltaY,
|
|
157
|
+
touchDuration: duration,
|
|
158
|
+
touchVelocity: velocity
|
|
159
|
+
})
|
|
125
160
|
}, [touchState, callbacks])
|
|
126
161
|
|
|
127
162
|
const handleTouchEnd = useCallback(() => {
|
|
@@ -132,7 +167,7 @@ export const useTouchFriendlyInput = (
|
|
|
132
167
|
const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY)
|
|
133
168
|
|
|
134
169
|
// Detect gesture type
|
|
135
|
-
let gestureType] = 'none'
|
|
170
|
+
let gestureType: TouchState['gestureType'] = 'none'
|
|
136
171
|
|
|
137
172
|
if (duration < 200 && distance < 10) {
|
|
138
173
|
// Tap detection
|
|
@@ -152,8 +187,8 @@ export const useTouchFriendlyInput = (
|
|
|
152
187
|
|
|
153
188
|
setTouchState(prev => ({
|
|
154
189
|
...prev,
|
|
155
|
-
isTouching,
|
|
156
|
-
touchDuration,
|
|
190
|
+
isTouching: false,
|
|
191
|
+
touchDuration: duration,
|
|
157
192
|
gestureType
|
|
158
193
|
}))
|
|
159
194
|
|
|
@@ -166,8 +201,8 @@ export const useTouchFriendlyInput = (
|
|
|
166
201
|
|
|
167
202
|
callbacks.onTouchStateChanged?.({
|
|
168
203
|
...touchState,
|
|
169
|
-
isTouching,
|
|
170
|
-
touchDuration,
|
|
204
|
+
isTouching: false,
|
|
205
|
+
touchDuration: duration,
|
|
171
206
|
gestureType
|
|
172
207
|
})
|
|
173
208
|
}, [touchState, callbacks])
|
|
@@ -177,23 +212,24 @@ export const useTouchFriendlyInput = (
|
|
|
177
212
|
setIsOptimizing(true)
|
|
178
213
|
|
|
179
214
|
setTimeout(() => {
|
|
180
|
-
const touchOptimizations] = [
|
|
215
|
+
const touchOptimizations: TouchOptimization[] = [
|
|
181
216
|
{
|
|
182
|
-
id,
|
|
183
|
-
name,
|
|
184
|
-
type,
|
|
185
|
-
applied,
|
|
186
|
-
impact,
|
|
187
|
-
description}px size`,
|
|
217
|
+
id: 'touch-target-1',
|
|
218
|
+
name: 'Touch Target Size Optimization',
|
|
219
|
+
type: 'touch',
|
|
220
|
+
applied: true,
|
|
221
|
+
impact: 'high',
|
|
222
|
+
description: `Optimized touch targets to minimum ${touchTargetSize}px size`,
|
|
188
223
|
touchTargetSize
|
|
189
224
|
},
|
|
190
225
|
{
|
|
191
|
-
id,
|
|
192
|
-
name,
|
|
193
|
-
type,
|
|
194
|
-
applied,
|
|
195
|
-
impact,
|
|
196
|
-
description
|
|
226
|
+
id: 'touch-target-2',
|
|
227
|
+
name: 'Touch-Friendly Spacing',
|
|
228
|
+
type: 'touch',
|
|
229
|
+
applied: true,
|
|
230
|
+
impact: 'medium',
|
|
231
|
+
description: 'Added adequate spacing between touch targets'
|
|
232
|
+
}
|
|
197
233
|
]
|
|
198
234
|
|
|
199
235
|
setTouchOptimizations(prev => [...prev, ...touchOptimizations])
|
|
@@ -210,23 +246,25 @@ export const useTouchFriendlyInput = (
|
|
|
210
246
|
setIsOptimizing(true)
|
|
211
247
|
|
|
212
248
|
setTimeout(() => {
|
|
213
|
-
const gestureOptimizations] = [
|
|
249
|
+
const gestureOptimizations: TouchOptimization[] = [
|
|
214
250
|
{
|
|
215
|
-
id,
|
|
216
|
-
name,
|
|
217
|
-
type,
|
|
218
|
-
applied,
|
|
219
|
-
impact,
|
|
220
|
-
description,
|
|
221
|
-
gestureType
|
|
251
|
+
id: 'gesture-1',
|
|
252
|
+
name: 'Multi-touch Gesture Support',
|
|
253
|
+
type: 'gesture',
|
|
254
|
+
applied: true,
|
|
255
|
+
impact: 'medium',
|
|
256
|
+
description: 'Enhanced multi-touch gesture recognition',
|
|
257
|
+
gestureType: 'multi-touch'
|
|
258
|
+
},
|
|
222
259
|
{
|
|
223
|
-
id,
|
|
224
|
-
name,
|
|
225
|
-
type,
|
|
226
|
-
applied,
|
|
227
|
-
impact,
|
|
228
|
-
description}`,
|
|
229
|
-
gestureType
|
|
260
|
+
id: 'gesture-2',
|
|
261
|
+
name: 'Gesture Sensitivity Tuning',
|
|
262
|
+
type: 'gesture',
|
|
263
|
+
applied: true,
|
|
264
|
+
impact: 'low',
|
|
265
|
+
description: `Tuned gesture sensitivity to ${gestureSensitivity}`,
|
|
266
|
+
gestureType: 'sensitivity'
|
|
267
|
+
}
|
|
230
268
|
]
|
|
231
269
|
|
|
232
270
|
setTouchOptimizations(prev => [...prev, ...gestureOptimizations])
|
|
@@ -243,21 +281,23 @@ export const useTouchFriendlyInput = (
|
|
|
243
281
|
setIsOptimizing(true)
|
|
244
282
|
|
|
245
283
|
setTimeout(() => {
|
|
246
|
-
const feedbackOptimizations] = [
|
|
284
|
+
const feedbackOptimizations: TouchOptimization[] = [
|
|
247
285
|
{
|
|
248
|
-
id,
|
|
249
|
-
name,
|
|
250
|
-
type,
|
|
251
|
-
applied,
|
|
252
|
-
impact,
|
|
253
|
-
description
|
|
286
|
+
id: 'feedback-1',
|
|
287
|
+
name: 'Touch Visual Feedback',
|
|
288
|
+
type: 'feedback',
|
|
289
|
+
applied: true,
|
|
290
|
+
impact: 'medium',
|
|
291
|
+
description: 'Enhanced visual feedback for touch interactions'
|
|
292
|
+
},
|
|
254
293
|
{
|
|
255
|
-
id,
|
|
256
|
-
name,
|
|
257
|
-
type,
|
|
258
|
-
applied,
|
|
259
|
-
impact,
|
|
260
|
-
description
|
|
294
|
+
id: 'feedback-2',
|
|
295
|
+
name: 'Haptic Feedback Support',
|
|
296
|
+
type: 'feedback',
|
|
297
|
+
applied: true,
|
|
298
|
+
impact: 'low',
|
|
299
|
+
description: 'Added haptic feedback support where available'
|
|
300
|
+
}
|
|
261
301
|
]
|
|
262
302
|
|
|
263
303
|
setTouchOptimizations(prev => [...prev, ...feedbackOptimizations])
|
|
@@ -276,21 +316,23 @@ export const useTouchFriendlyInput = (
|
|
|
276
316
|
setIsOptimizing(true)
|
|
277
317
|
|
|
278
318
|
setTimeout(() => {
|
|
279
|
-
const performanceOptimizations] = [
|
|
319
|
+
const performanceOptimizations: TouchOptimization[] = [
|
|
280
320
|
{
|
|
281
|
-
id,
|
|
282
|
-
name,
|
|
283
|
-
type,
|
|
284
|
-
applied,
|
|
285
|
-
impact,
|
|
286
|
-
description
|
|
321
|
+
id: 'performance-1',
|
|
322
|
+
name: 'Touch Event Optimization',
|
|
323
|
+
type: 'performance',
|
|
324
|
+
applied: true,
|
|
325
|
+
impact: 'high',
|
|
326
|
+
description: 'Optimized touch event handling for better performance'
|
|
327
|
+
},
|
|
287
328
|
{
|
|
288
|
-
id,
|
|
289
|
-
name,
|
|
290
|
-
type,
|
|
291
|
-
applied,
|
|
292
|
-
impact,
|
|
293
|
-
description
|
|
329
|
+
id: 'performance-2',
|
|
330
|
+
name: 'Gesture Recognition Optimization',
|
|
331
|
+
type: 'performance',
|
|
332
|
+
applied: true,
|
|
333
|
+
impact: 'medium',
|
|
334
|
+
description: 'Enhanced gesture recognition performance'
|
|
335
|
+
}
|
|
294
336
|
]
|
|
295
337
|
|
|
296
338
|
setTouchOptimizations(prev => [...prev, ...performanceOptimizations])
|
|
@@ -309,21 +351,23 @@ export const useTouchFriendlyInput = (
|
|
|
309
351
|
setIsOptimizing(true)
|
|
310
352
|
|
|
311
353
|
setTimeout(() => {
|
|
312
|
-
const accessibilityFeatures] = [
|
|
354
|
+
const accessibilityFeatures: TouchOptimization[] = [
|
|
313
355
|
{
|
|
314
|
-
id,
|
|
315
|
-
name,
|
|
316
|
-
type,
|
|
317
|
-
applied,
|
|
318
|
-
impact,
|
|
319
|
-
description
|
|
356
|
+
id: 'accessibility-1',
|
|
357
|
+
name: 'Touch Accessibility',
|
|
358
|
+
type: 'accessibility',
|
|
359
|
+
applied: true,
|
|
360
|
+
impact: 'high',
|
|
361
|
+
description: 'Enhanced touch accessibility features'
|
|
362
|
+
},
|
|
320
363
|
{
|
|
321
|
-
id,
|
|
322
|
-
name,
|
|
323
|
-
type,
|
|
324
|
-
applied,
|
|
325
|
-
impact,
|
|
326
|
-
description
|
|
364
|
+
id: 'accessibility-2',
|
|
365
|
+
name: 'Screen Reader Touch Support',
|
|
366
|
+
type: 'accessibility',
|
|
367
|
+
applied: true,
|
|
368
|
+
impact: 'medium',
|
|
369
|
+
description: 'Improved screen reader touch interaction support'
|
|
370
|
+
}
|
|
327
371
|
]
|
|
328
372
|
|
|
329
373
|
setTouchOptimizations(prev => [...prev, ...accessibilityFeatures])
|
|
@@ -383,7 +427,7 @@ export const useTouchFriendlyInput = (
|
|
|
383
427
|
|
|
384
428
|
// Get touch optimization recommendations
|
|
385
429
|
const getTouchOptimizationRecommendations = useCallback(() => {
|
|
386
|
-
const recommendations] = []
|
|
430
|
+
const recommendations: string[] = []
|
|
387
431
|
|
|
388
432
|
if (touchState.touchDuration > 500) {
|
|
389
433
|
recommendations.push('Touch duration is long, consider optimizing touch event handling')
|
|
@@ -404,9 +448,9 @@ export const useTouchFriendlyInput = (
|
|
|
404
448
|
useEffect(() => {
|
|
405
449
|
if (!enableTouchOptimization) return
|
|
406
450
|
|
|
407
|
-
document.addEventListener('touchstart', handleTouchStart, { passive})
|
|
408
|
-
document.addEventListener('touchmove', handleTouchMove, { passive})
|
|
409
|
-
document.addEventListener('touchend', handleTouchEnd, { passive})
|
|
451
|
+
document.addEventListener('touchstart', handleTouchStart, { passive: false })
|
|
452
|
+
document.addEventListener('touchmove', handleTouchMove, { passive: false })
|
|
453
|
+
document.addEventListener('touchend', handleTouchEnd, { passive: false })
|
|
410
454
|
|
|
411
455
|
return () => {
|
|
412
456
|
document.removeEventListener('touchstart', handleTouchStart)
|
|
@@ -459,20 +503,20 @@ export const useTouchFriendlyInput = (
|
|
|
459
503
|
autoOptimizeTouch,
|
|
460
504
|
|
|
461
505
|
// Utility functions
|
|
462
|
-
isTouching) => touchState.isTouching,
|
|
463
|
-
getTouchTarget) => touchState.touchTarget,
|
|
464
|
-
getGestureType) => touchState.gestureType,
|
|
465
|
-
getTouchDuration) => touchState.touchDuration,
|
|
466
|
-
getTouchVelocity) => touchState.touchVelocity,
|
|
467
|
-
getOptimizationStatus) => ({
|
|
468
|
-
touch=> o.type === 'touch'),
|
|
469
|
-
gesture=> o.type === 'gesture'),
|
|
470
|
-
feedback=> o.type === 'feedback'),
|
|
471
|
-
performance=> o.type === 'performance'),
|
|
472
|
-
accessibility=> o.type === 'accessibility')
|
|
506
|
+
isTouching: () => touchState.isTouching,
|
|
507
|
+
getTouchTarget: () => touchState.touchTarget,
|
|
508
|
+
getGestureType: () => touchState.gestureType,
|
|
509
|
+
getTouchDuration: () => touchState.touchDuration,
|
|
510
|
+
getTouchVelocity: () => touchState.touchVelocity,
|
|
511
|
+
getOptimizationStatus: () => ({
|
|
512
|
+
touch: touchOptimizations.some(o => o.type === 'touch'),
|
|
513
|
+
gesture: touchOptimizations.some(o => o.type === 'gesture'),
|
|
514
|
+
feedback: touchOptimizations.some(o => o.type === 'feedback'),
|
|
515
|
+
performance: touchOptimizations.some(o => o.type === 'performance'),
|
|
516
|
+
accessibility: touchOptimizations.some(o => o.type === 'accessibility')
|
|
473
517
|
}),
|
|
474
518
|
getTouchOptimizationRecommendations,
|
|
475
|
-
clearTouchOptimizations) => setTouchOptimizations([])
|
|
519
|
+
clearTouchOptimizations: () => setTouchOptimizations([])
|
|
476
520
|
}
|
|
477
521
|
}
|
|
478
522
|
|