@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,30 +1,46 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback, useRef, useMemo } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface MemoryMetrics {
|
|
4
|
-
usedJSHeapSize
|
|
4
|
+
usedJSHeapSize: number
|
|
5
|
+
totalJSHeapSize: number
|
|
6
|
+
jsHeapSizeLimit: number
|
|
7
|
+
memoryUsage: number
|
|
8
|
+
memoryPercentage: number
|
|
9
|
+
memoryTrend: 'increasing' | 'decreasing' | 'stable'
|
|
10
|
+
memoryLeakDetected: boolean
|
|
11
|
+
performanceScore: 'excellent' | 'good' | 'fair' | 'poor'
|
|
12
|
+
}
|
|
5
13
|
|
|
6
14
|
export interface MemoryThresholds {
|
|
7
|
-
warning
|
|
15
|
+
warning: number
|
|
16
|
+
critical: number
|
|
17
|
+
excellent: number
|
|
18
|
+
}
|
|
8
19
|
|
|
9
20
|
export interface MemoryCallbacks {
|
|
10
|
-
onMemoryWarning
|
|
11
|
-
onMemoryCritical
|
|
12
|
-
onMemoryLeakDetected
|
|
13
|
-
onPerformanceScoreChange
|
|
21
|
+
onMemoryWarning?: (usage: number) => void
|
|
22
|
+
onMemoryCritical?: (usage: number) => void
|
|
23
|
+
onMemoryLeakDetected?: (trend: MemoryMetrics['memoryTrend']) => void
|
|
24
|
+
onPerformanceScoreChange?: (score: MemoryMetrics['performanceScore']) => void
|
|
14
25
|
}
|
|
15
26
|
|
|
16
27
|
export interface MemoryOptions {
|
|
17
|
-
updateInterval
|
|
28
|
+
updateInterval?: number
|
|
29
|
+
sampleSize?: number
|
|
30
|
+
thresholds?: Partial<MemoryThresholds>
|
|
31
|
+
callbacks?: MemoryCallbacks
|
|
32
|
+
}
|
|
18
33
|
|
|
19
|
-
const DEFAULT_THRESHOLDS= {
|
|
20
|
-
warning,
|
|
21
|
-
critical,
|
|
22
|
-
excellent
|
|
34
|
+
const DEFAULT_THRESHOLDS: MemoryThresholds = {
|
|
35
|
+
warning: 0.7,
|
|
36
|
+
critical: 0.85,
|
|
37
|
+
excellent: 0.5
|
|
38
|
+
}
|
|
23
39
|
|
|
24
40
|
const DEFAULT_SAMPLE_SIZE = 10
|
|
25
41
|
const MEMORY_LEAK_THRESHOLD = 0.1 // 10% increase over time
|
|
26
42
|
|
|
27
|
-
export const useMemoryUsage = (options= {}) => {
|
|
43
|
+
export const useMemoryUsage = (options: MemoryOptions = {}) => {
|
|
28
44
|
const {
|
|
29
45
|
updateInterval = 2000,
|
|
30
46
|
sampleSize = DEFAULT_SAMPLE_SIZE,
|
|
@@ -33,14 +49,15 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
33
49
|
} = options
|
|
34
50
|
|
|
35
51
|
const [metrics, setMetrics] = useState<MemoryMetrics>({
|
|
36
|
-
usedJSHeapSize,
|
|
37
|
-
totalJSHeapSize,
|
|
38
|
-
jsHeapSizeLimit,
|
|
39
|
-
memoryUsage,
|
|
40
|
-
memoryPercentage,
|
|
41
|
-
memoryTrend,
|
|
42
|
-
memoryLeakDetected,
|
|
43
|
-
performanceScore
|
|
52
|
+
usedJSHeapSize: 0,
|
|
53
|
+
totalJSHeapSize: 0,
|
|
54
|
+
jsHeapSizeLimit: 0,
|
|
55
|
+
memoryUsage: 0,
|
|
56
|
+
memoryPercentage: 0,
|
|
57
|
+
memoryTrend: 'stable',
|
|
58
|
+
memoryLeakDetected: false,
|
|
59
|
+
performanceScore: 'excellent'
|
|
60
|
+
})
|
|
44
61
|
|
|
45
62
|
const [isMonitoring, setIsMonitoring] = useState(false)
|
|
46
63
|
const intervalIdRef = useRef<NodeJS.Timeout>()
|
|
@@ -54,7 +71,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
54
71
|
}), [thresholds])
|
|
55
72
|
|
|
56
73
|
// Calculate performance score based on memory usage
|
|
57
|
-
const calculatePerformanceScore = useCallback((usage)] => {
|
|
74
|
+
const calculatePerformanceScore = useCallback((usage: number): MemoryMetrics['performanceScore'] => {
|
|
58
75
|
if (usage <= finalThresholds.excellent) return 'excellent'
|
|
59
76
|
if (usage <= finalThresholds.warning) return 'good'
|
|
60
77
|
if (usage <= finalThresholds.critical) return 'fair'
|
|
@@ -62,7 +79,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
62
79
|
}, [finalThresholds])
|
|
63
80
|
|
|
64
81
|
// Detect memory trend
|
|
65
|
-
const detectMemoryTrend = useCallback((currentUsage, previousUsage)] => {
|
|
82
|
+
const detectMemoryTrend = useCallback((currentUsage: number, previousUsage: number): MemoryMetrics['memoryTrend'] => {
|
|
66
83
|
const difference = currentUsage - previousUsage
|
|
67
84
|
const percentageChange = Math.abs(difference) / previousUsage
|
|
68
85
|
|
|
@@ -72,7 +89,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
72
89
|
}, [])
|
|
73
90
|
|
|
74
91
|
// Detect potential memory leaks
|
|
75
|
-
const detectMemoryLeak = useCallback((_usage, history])=> {
|
|
92
|
+
const detectMemoryLeak = useCallback((_usage: number, history: number[]): boolean => {
|
|
76
93
|
if (history.length < 5) return false
|
|
77
94
|
|
|
78
95
|
// Check if memory usage is consistently increasing
|
|
@@ -118,7 +135,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
118
135
|
// Calculate performance score
|
|
119
136
|
const performanceScore = calculatePerformanceScore(memoryUsage)
|
|
120
137
|
|
|
121
|
-
const newMetrics= {
|
|
138
|
+
const newMetrics: MemoryMetrics = {
|
|
122
139
|
usedJSHeapSize,
|
|
123
140
|
totalJSHeapSize,
|
|
124
141
|
jsHeapSizeLimit,
|
|
@@ -179,8 +196,9 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
179
196
|
lastMemoryRef.current = 0
|
|
180
197
|
setMetrics(prev => ({
|
|
181
198
|
...prev,
|
|
182
|
-
memoryTrend,
|
|
183
|
-
memoryLeakDetected
|
|
199
|
+
memoryTrend: 'stable',
|
|
200
|
+
memoryLeakDetected: false
|
|
201
|
+
}))
|
|
184
202
|
}, [])
|
|
185
203
|
|
|
186
204
|
// Auto-start monitoring on mount
|
|
@@ -191,7 +209,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
191
209
|
|
|
192
210
|
// Memory optimization recommendations
|
|
193
211
|
const getOptimizationRecommendations = useCallback(() => {
|
|
194
|
-
const recommendations] = []
|
|
212
|
+
const recommendations: string[] = []
|
|
195
213
|
|
|
196
214
|
if (metrics.memoryUsage >= finalThresholds.critical) {
|
|
197
215
|
recommendations.push('Critical memory usage - consider implementing memory cleanup and lazy loading')
|
|
@@ -216,7 +234,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
216
234
|
|
|
217
235
|
// Memory cleanup suggestions
|
|
218
236
|
const getCleanupSuggestions = useCallback(() => {
|
|
219
|
-
const suggestions] = []
|
|
237
|
+
const suggestions: string[] = []
|
|
220
238
|
|
|
221
239
|
if (metrics.memoryLeakDetected) {
|
|
222
240
|
suggestions.push('Review useEffect cleanup functions')
|
|
@@ -245,24 +263,25 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
245
263
|
resetStats,
|
|
246
264
|
|
|
247
265
|
// Performance analysis
|
|
248
|
-
performanceScore,
|
|
249
|
-
memoryTrend,
|
|
250
|
-
memoryLeakDetected,
|
|
266
|
+
performanceScore: metrics.performanceScore,
|
|
267
|
+
memoryTrend: metrics.memoryTrend,
|
|
268
|
+
memoryLeakDetected: metrics.memoryLeakDetected,
|
|
251
269
|
|
|
252
270
|
// Optimization
|
|
253
271
|
getOptimizationRecommendations,
|
|
254
272
|
getCleanupSuggestions,
|
|
255
273
|
|
|
256
274
|
// Raw values
|
|
257
|
-
usedJSHeapSize,
|
|
258
|
-
totalJSHeapSize,
|
|
259
|
-
jsHeapSizeLimit,
|
|
260
|
-
memoryUsage,
|
|
261
|
-
memoryPercentage,
|
|
275
|
+
usedJSHeapSize: metrics.usedJSHeapSize,
|
|
276
|
+
totalJSHeapSize: metrics.totalJSHeapSize,
|
|
277
|
+
jsHeapSizeLimit: metrics.jsHeapSizeLimit,
|
|
278
|
+
memoryUsage: metrics.memoryUsage,
|
|
279
|
+
memoryPercentage: metrics.memoryPercentage,
|
|
262
280
|
|
|
263
281
|
// Thresholds
|
|
264
|
-
thresholds,
|
|
282
|
+
thresholds: finalThresholds,
|
|
265
283
|
|
|
266
284
|
// History
|
|
267
|
-
memoryHistory
|
|
285
|
+
memoryHistory: memoryHistoryRef.current
|
|
286
|
+
}
|
|
268
287
|
}
|
|
@@ -1,30 +1,46 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback, useRef, useMemo } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface MemoryMetrics {
|
|
4
|
-
usedJSHeapSize
|
|
4
|
+
usedJSHeapSize: number
|
|
5
|
+
totalJSHeapSize: number
|
|
6
|
+
jsHeapSizeLimit: number
|
|
7
|
+
memoryUsage: number
|
|
8
|
+
memoryPercentage: number
|
|
9
|
+
memoryTrend: 'increasing' | 'decreasing' | 'stable'
|
|
10
|
+
memoryLeakDetected: boolean
|
|
11
|
+
performanceScore: 'excellent' | 'good' | 'fair' | 'poor'
|
|
12
|
+
}
|
|
5
13
|
|
|
6
14
|
export interface MemoryThresholds {
|
|
7
|
-
warning
|
|
15
|
+
warning: number
|
|
16
|
+
critical: number
|
|
17
|
+
excellent: number
|
|
18
|
+
}
|
|
8
19
|
|
|
9
20
|
export interface MemoryCallbacks {
|
|
10
|
-
onMemoryWarning
|
|
11
|
-
onMemoryCritical
|
|
12
|
-
onMemoryLeakDetected
|
|
13
|
-
onPerformanceScoreChange
|
|
21
|
+
onMemoryWarning?: (usage: number) => void
|
|
22
|
+
onMemoryCritical?: (usage: number) => void
|
|
23
|
+
onMemoryLeakDetected?: (trend: MemoryMetrics['memoryTrend']) => void
|
|
24
|
+
onPerformanceScoreChange?: (score: MemoryMetrics['performanceScore']) => void
|
|
14
25
|
}
|
|
15
26
|
|
|
16
27
|
export interface MemoryOptions {
|
|
17
|
-
updateInterval
|
|
28
|
+
updateInterval?: number
|
|
29
|
+
sampleSize?: number
|
|
30
|
+
thresholds?: Partial<MemoryThresholds>
|
|
31
|
+
callbacks?: MemoryCallbacks
|
|
32
|
+
}
|
|
18
33
|
|
|
19
|
-
const DEFAULT_THRESHOLDS= {
|
|
20
|
-
warning,
|
|
21
|
-
critical,
|
|
22
|
-
excellent
|
|
34
|
+
const DEFAULT_THRESHOLDS: MemoryThresholds = {
|
|
35
|
+
warning: 0.7,
|
|
36
|
+
critical: 0.85,
|
|
37
|
+
excellent: 0.5
|
|
38
|
+
}
|
|
23
39
|
|
|
24
40
|
const DEFAULT_SAMPLE_SIZE = 10
|
|
25
41
|
const MEMORY_LEAK_THRESHOLD = 0.1 // 10% increase over time
|
|
26
42
|
|
|
27
|
-
export const useMemoryUsage = (options= {}) => {
|
|
43
|
+
export const useMemoryUsage = (options: MemoryOptions = {}) => {
|
|
28
44
|
const {
|
|
29
45
|
updateInterval = 2000,
|
|
30
46
|
sampleSize = DEFAULT_SAMPLE_SIZE,
|
|
@@ -33,14 +49,15 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
33
49
|
} = options
|
|
34
50
|
|
|
35
51
|
const [metrics, setMetrics] = useState<MemoryMetrics>({
|
|
36
|
-
usedJSHeapSize,
|
|
37
|
-
totalJSHeapSize,
|
|
38
|
-
jsHeapSizeLimit,
|
|
39
|
-
memoryUsage,
|
|
40
|
-
memoryPercentage,
|
|
41
|
-
memoryTrend,
|
|
42
|
-
memoryLeakDetected,
|
|
43
|
-
performanceScore
|
|
52
|
+
usedJSHeapSize: 0,
|
|
53
|
+
totalJSHeapSize: 0,
|
|
54
|
+
jsHeapSizeLimit: 0,
|
|
55
|
+
memoryUsage: 0,
|
|
56
|
+
memoryPercentage: 0,
|
|
57
|
+
memoryTrend: 'stable',
|
|
58
|
+
memoryLeakDetected: false,
|
|
59
|
+
performanceScore: 'excellent'
|
|
60
|
+
})
|
|
44
61
|
|
|
45
62
|
const [isMonitoring, setIsMonitoring] = useState(false)
|
|
46
63
|
const intervalIdRef = useRef<NodeJS.Timeout>()
|
|
@@ -54,7 +71,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
54
71
|
}), [thresholds])
|
|
55
72
|
|
|
56
73
|
// Calculate performance score based on memory usage
|
|
57
|
-
const calculatePerformanceScore = useCallback((usage)] => {
|
|
74
|
+
const calculatePerformanceScore = useCallback((usage: number): MemoryMetrics['performanceScore'] => {
|
|
58
75
|
if (usage <= finalThresholds.excellent) return 'excellent'
|
|
59
76
|
if (usage <= finalThresholds.warning) return 'good'
|
|
60
77
|
if (usage <= finalThresholds.critical) return 'fair'
|
|
@@ -62,7 +79,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
62
79
|
}, [finalThresholds])
|
|
63
80
|
|
|
64
81
|
// Detect memory trend
|
|
65
|
-
const detectMemoryTrend = useCallback((currentUsage, previousUsage)] => {
|
|
82
|
+
const detectMemoryTrend = useCallback((currentUsage: number, previousUsage: number): MemoryMetrics['memoryTrend'] => {
|
|
66
83
|
const difference = currentUsage - previousUsage
|
|
67
84
|
const percentageChange = Math.abs(difference) / previousUsage
|
|
68
85
|
|
|
@@ -72,7 +89,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
72
89
|
}, [])
|
|
73
90
|
|
|
74
91
|
// Detect potential memory leaks
|
|
75
|
-
const detectMemoryLeak = useCallback((_usage, history])=> {
|
|
92
|
+
const detectMemoryLeak = useCallback((_usage: number, history: number[]): boolean => {
|
|
76
93
|
if (history.length < 5) return false
|
|
77
94
|
|
|
78
95
|
// Check if memory usage is consistently increasing
|
|
@@ -118,7 +135,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
118
135
|
// Calculate performance score
|
|
119
136
|
const performanceScore = calculatePerformanceScore(memoryUsage)
|
|
120
137
|
|
|
121
|
-
const newMetrics= {
|
|
138
|
+
const newMetrics: MemoryMetrics = {
|
|
122
139
|
usedJSHeapSize,
|
|
123
140
|
totalJSHeapSize,
|
|
124
141
|
jsHeapSizeLimit,
|
|
@@ -179,8 +196,9 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
179
196
|
lastMemoryRef.current = 0
|
|
180
197
|
setMetrics(prev => ({
|
|
181
198
|
...prev,
|
|
182
|
-
memoryTrend,
|
|
183
|
-
memoryLeakDetected
|
|
199
|
+
memoryTrend: 'stable',
|
|
200
|
+
memoryLeakDetected: false
|
|
201
|
+
}))
|
|
184
202
|
}, [])
|
|
185
203
|
|
|
186
204
|
// Auto-start monitoring on mount
|
|
@@ -191,7 +209,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
191
209
|
|
|
192
210
|
// Memory optimization recommendations
|
|
193
211
|
const getOptimizationRecommendations = useCallback(() => {
|
|
194
|
-
const recommendations] = []
|
|
212
|
+
const recommendations: string[] = []
|
|
195
213
|
|
|
196
214
|
if (metrics.memoryUsage >= finalThresholds.critical) {
|
|
197
215
|
recommendations.push('Critical memory usage - consider implementing memory cleanup and lazy loading')
|
|
@@ -216,7 +234,7 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
216
234
|
|
|
217
235
|
// Memory cleanup suggestions
|
|
218
236
|
const getCleanupSuggestions = useCallback(() => {
|
|
219
|
-
const suggestions] = []
|
|
237
|
+
const suggestions: string[] = []
|
|
220
238
|
|
|
221
239
|
if (metrics.memoryLeakDetected) {
|
|
222
240
|
suggestions.push('Review useEffect cleanup functions')
|
|
@@ -245,24 +263,25 @@ export const useMemoryUsage = (options= {}) => {
|
|
|
245
263
|
resetStats,
|
|
246
264
|
|
|
247
265
|
// Performance analysis
|
|
248
|
-
performanceScore,
|
|
249
|
-
memoryTrend,
|
|
250
|
-
memoryLeakDetected,
|
|
266
|
+
performanceScore: metrics.performanceScore,
|
|
267
|
+
memoryTrend: metrics.memoryTrend,
|
|
268
|
+
memoryLeakDetected: metrics.memoryLeakDetected,
|
|
251
269
|
|
|
252
270
|
// Optimization
|
|
253
271
|
getOptimizationRecommendations,
|
|
254
272
|
getCleanupSuggestions,
|
|
255
273
|
|
|
256
274
|
// Raw values
|
|
257
|
-
usedJSHeapSize,
|
|
258
|
-
totalJSHeapSize,
|
|
259
|
-
jsHeapSizeLimit,
|
|
260
|
-
memoryUsage,
|
|
261
|
-
memoryPercentage,
|
|
275
|
+
usedJSHeapSize: metrics.usedJSHeapSize,
|
|
276
|
+
totalJSHeapSize: metrics.totalJSHeapSize,
|
|
277
|
+
jsHeapSizeLimit: metrics.jsHeapSizeLimit,
|
|
278
|
+
memoryUsage: metrics.memoryUsage,
|
|
279
|
+
memoryPercentage: metrics.memoryPercentage,
|
|
262
280
|
|
|
263
281
|
// Thresholds
|
|
264
|
-
thresholds,
|
|
282
|
+
thresholds: finalThresholds,
|
|
265
283
|
|
|
266
284
|
// History
|
|
267
|
-
memoryHistory
|
|
285
|
+
memoryHistory: memoryHistoryRef.current
|
|
286
|
+
}
|
|
268
287
|
}
|
|
@@ -1,55 +1,86 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback, useRef } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface LayoutConfig {
|
|
4
|
-
enableTouchOptimization
|
|
4
|
+
enableTouchOptimization: boolean
|
|
5
|
+
enableKeyboardOptimization: boolean
|
|
6
|
+
enableResponsiveBehavior: boolean
|
|
7
|
+
enablePerformanceOptimization: boolean
|
|
8
|
+
touchTargetSize: number
|
|
9
|
+
spacingMultiplier: number
|
|
10
|
+
maxFieldWidth: number
|
|
11
|
+
enableAutoFocus: boolean
|
|
12
|
+
}
|
|
5
13
|
|
|
6
14
|
export interface LayoutState {
|
|
7
|
-
isMobile
|
|
15
|
+
isMobile: boolean
|
|
16
|
+
isTablet: boolean
|
|
17
|
+
isDesktop: boolean
|
|
18
|
+
orientation: 'portrait' | 'landscape'
|
|
19
|
+
keyboardVisible: boolean
|
|
20
|
+
viewportHeight: number
|
|
21
|
+
viewportWidth: number
|
|
22
|
+
safeAreaInsets: {
|
|
23
|
+
top: number
|
|
24
|
+
bottom: number
|
|
25
|
+
left: number
|
|
26
|
+
right: number
|
|
27
|
+
}
|
|
8
28
|
}
|
|
9
29
|
|
|
10
30
|
export interface LayoutCallbacks {
|
|
11
|
-
onLayoutChange
|
|
12
|
-
onOrientationChange
|
|
13
|
-
onKeyboardVisibilityChange
|
|
14
|
-
onViewportChange
|
|
31
|
+
onLayoutChange?: (layout: LayoutState) => void
|
|
32
|
+
onOrientationChange?: (orientation: 'portrait' | 'landscape') => void
|
|
33
|
+
onKeyboardVisibilityChange?: (visible: boolean) => void
|
|
34
|
+
onViewportChange?: (width: number, height: number) => void
|
|
15
35
|
}
|
|
16
36
|
|
|
17
37
|
export interface MobileFormLayoutState {
|
|
18
|
-
layout
|
|
38
|
+
layout: LayoutState
|
|
39
|
+
isOptimized: boolean
|
|
40
|
+
currentSpacing: number
|
|
41
|
+
currentFieldWidth: number
|
|
42
|
+
performanceMetrics: {
|
|
43
|
+
layoutUpdates: number
|
|
44
|
+
lastUpdateTime: number
|
|
45
|
+
optimizationScore: number
|
|
46
|
+
}
|
|
19
47
|
}
|
|
20
48
|
|
|
21
49
|
export const useMobileFormLayout = (
|
|
22
|
-
callbacks= {},
|
|
23
|
-
config= {}
|
|
50
|
+
callbacks: LayoutCallbacks = {},
|
|
51
|
+
config: Partial<LayoutConfig> = {}
|
|
24
52
|
) => {
|
|
25
|
-
const defaultConfig= {
|
|
26
|
-
enableTouchOptimization,
|
|
27
|
-
enableKeyboardOptimization,
|
|
28
|
-
enableResponsiveBehavior,
|
|
29
|
-
enablePerformanceOptimization,
|
|
30
|
-
touchTargetSize,
|
|
31
|
-
spacingMultiplier,
|
|
32
|
-
maxFieldWidth,
|
|
33
|
-
enableAutoFocus,
|
|
53
|
+
const defaultConfig: LayoutConfig = {
|
|
54
|
+
enableTouchOptimization: true,
|
|
55
|
+
enableKeyboardOptimization: true,
|
|
56
|
+
enableResponsiveBehavior: true,
|
|
57
|
+
enablePerformanceOptimization: true,
|
|
58
|
+
touchTargetSize: 44,
|
|
59
|
+
spacingMultiplier: 1.2,
|
|
60
|
+
maxFieldWidth: 400,
|
|
61
|
+
enableAutoFocus: true,
|
|
34
62
|
...config
|
|
35
63
|
}
|
|
36
64
|
|
|
37
65
|
const [layoutState, setLayoutState] = useState<MobileFormLayoutState>({
|
|
38
|
-
layout
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
66
|
+
layout: {
|
|
67
|
+
isMobile: false,
|
|
68
|
+
isTablet: false,
|
|
69
|
+
isDesktop: false,
|
|
70
|
+
orientation: 'portrait',
|
|
71
|
+
keyboardVisible: false,
|
|
72
|
+
viewportHeight: window.innerHeight,
|
|
73
|
+
viewportWidth: window.innerWidth,
|
|
74
|
+
safeAreaInsets: { top: 0, bottom: 0, left: 0, right: 0 }
|
|
46
75
|
},
|
|
47
|
-
isOptimized,
|
|
48
|
-
currentSpacing,
|
|
49
|
-
currentFieldWidth, defaultConfig.maxFieldWidth),
|
|
50
|
-
performanceMetrics
|
|
51
|
-
|
|
52
|
-
|
|
76
|
+
isOptimized: false,
|
|
77
|
+
currentSpacing: defaultConfig.touchTargetSize * defaultConfig.spacingMultiplier,
|
|
78
|
+
currentFieldWidth: Math.min(window.innerWidth - 32, defaultConfig.maxFieldWidth),
|
|
79
|
+
performanceMetrics: {
|
|
80
|
+
layoutUpdates: 0,
|
|
81
|
+
lastUpdateTime: 0,
|
|
82
|
+
optimizationScore: 0
|
|
83
|
+
}
|
|
53
84
|
})
|
|
54
85
|
|
|
55
86
|
const resizeObserverRef = useRef<ResizeObserver | null>(null)
|
|
@@ -85,7 +116,7 @@ export const useMobileFormLayout = (
|
|
|
85
116
|
}, [])
|
|
86
117
|
|
|
87
118
|
// Detect orientation
|
|
88
|
-
const detectOrientation = useCallback(()=> {
|
|
119
|
+
const detectOrientation = useCallback((): 'portrait' | 'landscape' => {
|
|
89
120
|
if (window.innerHeight > window.innerWidth) {
|
|
90
121
|
return 'portrait'
|
|
91
122
|
}
|
|
@@ -97,10 +128,10 @@ export const useMobileFormLayout = (
|
|
|
97
128
|
const style = getComputedStyle(document.documentElement)
|
|
98
129
|
|
|
99
130
|
return {
|
|
100
|
-
top) || '0'),
|
|
101
|
-
bottom) || '0'),
|
|
102
|
-
left) || '0'),
|
|
103
|
-
right) || '0')
|
|
131
|
+
top: parseInt(style.getPropertyValue('--sat') || '0'),
|
|
132
|
+
bottom: parseInt(style.getPropertyValue('--sab') || '0'),
|
|
133
|
+
left: parseInt(style.getPropertyValue('--sal') || '0'),
|
|
134
|
+
right: parseInt(style.getPropertyValue('--sar') || '0')
|
|
104
135
|
}
|
|
105
136
|
}, [])
|
|
106
137
|
|
|
@@ -111,7 +142,9 @@ export const useMobileFormLayout = (
|
|
|
111
142
|
const currentHeight = window.innerHeight
|
|
112
143
|
const currentWidth = window.innerWidth
|
|
113
144
|
|
|
114
|
-
// Simple heuristic
|
|
145
|
+
// Simple heuristic: if height decreases significantly and width stays the same
|
|
146
|
+
// it's likely the keyboard appeared
|
|
147
|
+
const heightRatio = currentHeight / layoutState.layout.viewportHeight
|
|
115
148
|
const widthRatio = currentWidth / layoutState.layout.viewportWidth
|
|
116
149
|
|
|
117
150
|
return heightRatio < 0.8 && widthRatio > 0.95
|
|
@@ -124,12 +157,12 @@ export const useMobileFormLayout = (
|
|
|
124
157
|
const safeAreaInsets = getSafeAreaInsets()
|
|
125
158
|
const keyboardVisible = detectKeyboardVisibility()
|
|
126
159
|
|
|
127
|
-
const newLayout= {
|
|
160
|
+
const newLayout: LayoutState = {
|
|
128
161
|
...deviceType,
|
|
129
162
|
orientation,
|
|
130
163
|
keyboardVisible,
|
|
131
|
-
viewportHeight,
|
|
132
|
-
viewportWidth,
|
|
164
|
+
viewportHeight: window.innerHeight,
|
|
165
|
+
viewportWidth: window.innerWidth,
|
|
133
166
|
safeAreaInsets
|
|
134
167
|
}
|
|
135
168
|
|
|
@@ -158,12 +191,13 @@ export const useMobileFormLayout = (
|
|
|
158
191
|
setLayoutState(prev => {
|
|
159
192
|
const newState = {
|
|
160
193
|
...prev,
|
|
161
|
-
layout,
|
|
162
|
-
currentSpacing,
|
|
163
|
-
currentFieldWidth,
|
|
164
|
-
performanceMetrics
|
|
165
|
-
|
|
166
|
-
|
|
194
|
+
layout: newLayout,
|
|
195
|
+
currentSpacing: spacing,
|
|
196
|
+
currentFieldWidth: fieldWidth,
|
|
197
|
+
performanceMetrics: {
|
|
198
|
+
...prev.performanceMetrics,
|
|
199
|
+
layoutUpdates: prev.performanceMetrics.layoutUpdates + 1,
|
|
200
|
+
lastUpdateTime: Date.now()
|
|
167
201
|
}
|
|
168
202
|
}
|
|
169
203
|
|
|
@@ -192,7 +226,7 @@ export const useMobileFormLayout = (
|
|
|
192
226
|
])
|
|
193
227
|
|
|
194
228
|
// Calculate optimization score
|
|
195
|
-
const calculateOptimizationScore = useCallback((state)=> {
|
|
229
|
+
const calculateOptimizationScore = useCallback((state: MobileFormLayoutState): number => {
|
|
196
230
|
let score = 0
|
|
197
231
|
const { layout, currentSpacing, currentFieldWidth } = state
|
|
198
232
|
|
|
@@ -354,13 +388,13 @@ export const useMobileFormLayout = (
|
|
|
354
388
|
const { currentSpacing, currentFieldWidth } = layoutState
|
|
355
389
|
|
|
356
390
|
return {
|
|
357
|
-
'--mobile-spacing'}px`,
|
|
358
|
-
'--mobile-field-width'}px`,
|
|
359
|
-
'--touch-target-size'}px`,
|
|
360
|
-
'--safe-area-top'}px`,
|
|
361
|
-
'--safe-area-bottom'}px`,
|
|
362
|
-
'--safe-area-left'}px`,
|
|
363
|
-
'--safe-area-right'}px`
|
|
391
|
+
'--mobile-spacing': `${currentSpacing}px`,
|
|
392
|
+
'--mobile-field-width': `${currentFieldWidth}px`,
|
|
393
|
+
'--touch-target-size': `${defaultConfig.touchTargetSize}px`,
|
|
394
|
+
'--safe-area-top': `${layoutState.layout.safeAreaInsets.top}px`,
|
|
395
|
+
'--safe-area-bottom': `${layoutState.layout.safeAreaInsets.bottom}px`,
|
|
396
|
+
'--safe-area-left': `${layoutState.layout.safeAreaInsets.left}px`,
|
|
397
|
+
'--safe-area-right': `${layoutState.layout.safeAreaInsets.right}px`
|
|
364
398
|
}
|
|
365
399
|
}, [layoutState, defaultConfig.touchTargetSize])
|
|
366
400
|
|
|
@@ -395,33 +429,36 @@ export const useMobileFormLayout = (
|
|
|
395
429
|
getLayoutClasses,
|
|
396
430
|
getLayoutCSSVariables,
|
|
397
431
|
autoFocusFirstInput,
|
|
398
|
-
isMobile,
|
|
399
|
-
isTablet,
|
|
400
|
-
isDesktop,
|
|
401
|
-
orientation,
|
|
402
|
-
keyboardVisible,
|
|
403
|
-
currentSpacing,
|
|
404
|
-
currentFieldWidth,
|
|
405
|
-
isOptimized,
|
|
406
|
-
performanceMetrics
|
|
432
|
+
isMobile: layoutState.layout.isMobile,
|
|
433
|
+
isTablet: layoutState.layout.isTablet,
|
|
434
|
+
isDesktop: layoutState.layout.isDesktop,
|
|
435
|
+
orientation: layoutState.layout.orientation,
|
|
436
|
+
keyboardVisible: layoutState.layout.keyboardVisible,
|
|
437
|
+
currentSpacing: layoutState.currentSpacing,
|
|
438
|
+
currentFieldWidth: layoutState.currentFieldWidth,
|
|
439
|
+
isOptimized: layoutState.isOptimized,
|
|
440
|
+
performanceMetrics: layoutState.performanceMetrics
|
|
441
|
+
}
|
|
407
442
|
}
|
|
408
443
|
|
|
409
444
|
// Convenience hook for basic mobile layout
|
|
410
445
|
export const useBasicMobileLayout = () => {
|
|
411
446
|
return useMobileFormLayout({}, {
|
|
412
|
-
enableTouchOptimization,
|
|
413
|
-
enableKeyboardOptimization,
|
|
414
|
-
enableResponsiveBehavior,
|
|
415
|
-
enablePerformanceOptimization,
|
|
416
|
-
enableAutoFocus
|
|
447
|
+
enableTouchOptimization: true,
|
|
448
|
+
enableKeyboardOptimization: false,
|
|
449
|
+
enableResponsiveBehavior: true,
|
|
450
|
+
enablePerformanceOptimization: false,
|
|
451
|
+
enableAutoFocus: false
|
|
452
|
+
})
|
|
417
453
|
}
|
|
418
454
|
|
|
419
455
|
// Convenience hook for enhanced mobile layout
|
|
420
456
|
export const useEnhancedMobileLayout = () => {
|
|
421
457
|
return useMobileFormLayout({}, {
|
|
422
|
-
enableTouchOptimization,
|
|
423
|
-
enableKeyboardOptimization,
|
|
424
|
-
enableResponsiveBehavior,
|
|
425
|
-
enablePerformanceOptimization,
|
|
426
|
-
enableAutoFocus
|
|
458
|
+
enableTouchOptimization: true,
|
|
459
|
+
enableKeyboardOptimization: true,
|
|
460
|
+
enableResponsiveBehavior: true,
|
|
461
|
+
enablePerformanceOptimization: true,
|
|
462
|
+
enableAutoFocus: true
|
|
463
|
+
})
|
|
427
464
|
}
|