@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,51 +1,76 @@
|
|
|
1
1
|
import { useState, useCallback, useRef, useEffect } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface DeviceLoadingStatesConfig {
|
|
4
|
-
enableMobileStates
|
|
4
|
+
enableMobileStates?: boolean
|
|
5
|
+
enableTabletStates?: boolean
|
|
6
|
+
enableDesktopStates?: boolean
|
|
7
|
+
enableAdaptiveBehavior?: boolean
|
|
8
|
+
enableOrientationSupport?: boolean
|
|
9
|
+
enablePerformanceAdaptation?: boolean
|
|
10
|
+
}
|
|
5
11
|
|
|
6
12
|
export interface LoadingState {
|
|
7
|
-
id
|
|
13
|
+
id: string
|
|
14
|
+
name: string
|
|
15
|
+
type: 'skeleton' | 'spinner' | 'progress' | 'skeleton-spinner' | 'custom'
|
|
16
|
+
duration: number
|
|
17
|
+
complexity: 'low' | 'medium' | 'high'
|
|
18
|
+
mobileOptimized: boolean
|
|
19
|
+
tabletOptimized: boolean
|
|
20
|
+
desktopOptimized: boolean
|
|
21
|
+
orientation: 'portrait' | 'landscape' | 'both'
|
|
22
|
+
performance: 'low' | 'medium' | 'high'
|
|
23
|
+
}
|
|
8
24
|
|
|
9
25
|
export interface DeviceSpecificState {
|
|
10
|
-
deviceType
|
|
11
|
-
|
|
26
|
+
deviceType: 'mobile' | 'tablet' | 'desktop'
|
|
27
|
+
orientation: 'portrait' | 'landscape'
|
|
28
|
+
screenSize: 'small' | 'medium' | 'large'
|
|
29
|
+
performanceLevel: 'low' | 'medium' | 'high'
|
|
30
|
+
batteryLevel: 'critical' | 'low' | 'medium' | 'high'
|
|
31
|
+
loadingStates: LoadingState[]
|
|
32
|
+
activeState: LoadingState | null
|
|
33
|
+
adaptiveBehavior: boolean
|
|
34
|
+
}
|
|
12
35
|
|
|
13
36
|
export interface DeviceLoadingStatesCallbacks {
|
|
14
|
-
onLoadingStateChanged
|
|
15
|
-
onDeviceStateChanged
|
|
16
|
-
onAdaptiveBehaviorEnabled
|
|
17
|
-
onPerformanceAdapted
|
|
37
|
+
onLoadingStateChanged?: (state: LoadingState) => void
|
|
38
|
+
onDeviceStateChanged?: (deviceState: DeviceSpecificState) => void
|
|
39
|
+
onAdaptiveBehaviorEnabled?: (behavior: string) => void
|
|
40
|
+
onPerformanceAdapted?: (adaptation: string) => void
|
|
18
41
|
}
|
|
19
42
|
|
|
20
43
|
export const useDeviceLoadingStates = (
|
|
21
|
-
config= {},
|
|
22
|
-
callbacks= {}
|
|
44
|
+
config: DeviceLoadingStatesConfig = {},
|
|
45
|
+
callbacks: DeviceLoadingStatesCallbacks = {}
|
|
23
46
|
) => {
|
|
24
47
|
const {
|
|
25
48
|
enableMobileStates = true,
|
|
26
49
|
enableTabletStates = true,
|
|
27
50
|
enableDesktopStates = true,
|
|
28
|
-
enableAdaptiveBehavior= true,
|
|
51
|
+
enableAdaptiveBehavior: enableAdaptiveBehaviorConfig = true,
|
|
29
52
|
enablePerformanceAdaptation = true
|
|
30
53
|
} = config
|
|
31
54
|
|
|
32
55
|
const [deviceState, setDeviceState] = useState<DeviceSpecificState>({
|
|
33
|
-
deviceType,
|
|
34
|
-
orientation,
|
|
35
|
-
screenSize,
|
|
36
|
-
performanceLevel,
|
|
37
|
-
batteryLevel,
|
|
38
|
-
loadingStates],
|
|
39
|
-
activeState,
|
|
40
|
-
adaptiveBehavior
|
|
56
|
+
deviceType: 'desktop',
|
|
57
|
+
orientation: 'landscape',
|
|
58
|
+
screenSize: 'large',
|
|
59
|
+
performanceLevel: 'high',
|
|
60
|
+
batteryLevel: 'high',
|
|
61
|
+
loadingStates: [],
|
|
62
|
+
activeState: null,
|
|
63
|
+
adaptiveBehavior: false
|
|
64
|
+
})
|
|
41
65
|
|
|
42
66
|
const [isAdapting, setIsAdapting] = useState(false)
|
|
43
67
|
const [adaptations, setAdaptations] = useState<string[]>([])
|
|
44
68
|
const [performanceMetrics, setPerformanceMetrics] = useState({
|
|
45
|
-
frameRate,
|
|
46
|
-
renderTime,
|
|
47
|
-
memoryUsage,
|
|
48
|
-
batteryDrain
|
|
69
|
+
frameRate: 60,
|
|
70
|
+
renderTime: 0,
|
|
71
|
+
memoryUsage: 0,
|
|
72
|
+
batteryDrain: 'low'
|
|
73
|
+
})
|
|
49
74
|
|
|
50
75
|
|
|
51
76
|
const performanceTimerRef = useRef<number | null>(null)
|
|
@@ -57,7 +82,11 @@ export const useDeviceLoadingStates = (
|
|
|
57
82
|
const height = window.innerHeight
|
|
58
83
|
const isPortrait = height > width
|
|
59
84
|
|
|
60
|
-
let deviceType
|
|
85
|
+
let deviceType: 'mobile' | 'tablet' | 'desktop'
|
|
86
|
+
let screenSize: 'small' | 'medium' | 'large'
|
|
87
|
+
let performanceLevel: 'low' | 'medium' | 'high'
|
|
88
|
+
|
|
89
|
+
if (width <= 768) {
|
|
61
90
|
deviceType = 'mobile'
|
|
62
91
|
screenSize = 'small'
|
|
63
92
|
performanceLevel = 'low'
|
|
@@ -71,10 +100,10 @@ export const useDeviceLoadingStates = (
|
|
|
71
100
|
performanceLevel = 'high'
|
|
72
101
|
}
|
|
73
102
|
|
|
74
|
-
const newDeviceState= {
|
|
103
|
+
const newDeviceState: DeviceSpecificState = {
|
|
75
104
|
...deviceState,
|
|
76
105
|
deviceType,
|
|
77
|
-
orientation,
|
|
106
|
+
orientation: isPortrait ? 'portrait' : 'landscape',
|
|
78
107
|
screenSize,
|
|
79
108
|
performanceLevel
|
|
80
109
|
}
|
|
@@ -87,17 +116,17 @@ export const useDeviceLoadingStates = (
|
|
|
87
116
|
|
|
88
117
|
// Create loading states
|
|
89
118
|
const createLoadingState = useCallback((
|
|
90
|
-
state, 'id'>
|
|
119
|
+
state: Omit<LoadingState, 'id'>
|
|
91
120
|
) => {
|
|
92
121
|
const id = `loading-state-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
|
|
93
|
-
const newState= {
|
|
122
|
+
const newState: LoadingState = {
|
|
94
123
|
...state,
|
|
95
124
|
id
|
|
96
125
|
}
|
|
97
126
|
|
|
98
127
|
setDeviceState(prev => ({
|
|
99
128
|
...prev,
|
|
100
|
-
loadingStates, newState]
|
|
129
|
+
loadingStates: [...prev.loadingStates, newState]
|
|
101
130
|
}))
|
|
102
131
|
|
|
103
132
|
return id
|
|
@@ -105,101 +134,109 @@ export const useDeviceLoadingStates = (
|
|
|
105
134
|
|
|
106
135
|
// Generate device-specific loading states
|
|
107
136
|
const generateDeviceLoadingStates = useCallback(() => {
|
|
108
|
-
const mobileStates] = [
|
|
137
|
+
const mobileStates: LoadingState[] = [
|
|
109
138
|
{
|
|
110
|
-
id,
|
|
111
|
-
name,
|
|
112
|
-
type,
|
|
113
|
-
duration,
|
|
114
|
-
complexity,
|
|
115
|
-
mobileOptimized,
|
|
116
|
-
tabletOptimized,
|
|
117
|
-
desktopOptimized,
|
|
118
|
-
orientation,
|
|
119
|
-
performance
|
|
139
|
+
id: 'mobile-skeleton',
|
|
140
|
+
name: 'Mobile Skeleton',
|
|
141
|
+
type: 'skeleton',
|
|
142
|
+
duration: 1000,
|
|
143
|
+
complexity: 'low',
|
|
144
|
+
mobileOptimized: true,
|
|
145
|
+
tabletOptimized: false,
|
|
146
|
+
desktopOptimized: false,
|
|
147
|
+
orientation: 'both',
|
|
148
|
+
performance: 'low'
|
|
149
|
+
},
|
|
120
150
|
{
|
|
121
|
-
id,
|
|
122
|
-
name,
|
|
123
|
-
type,
|
|
124
|
-
duration,
|
|
125
|
-
complexity,
|
|
126
|
-
mobileOptimized,
|
|
127
|
-
tabletOptimized,
|
|
128
|
-
desktopOptimized,
|
|
129
|
-
orientation,
|
|
130
|
-
performance
|
|
151
|
+
id: 'mobile-spinner',
|
|
152
|
+
name: 'Mobile Spinner',
|
|
153
|
+
type: 'spinner',
|
|
154
|
+
duration: 800,
|
|
155
|
+
complexity: 'low',
|
|
156
|
+
mobileOptimized: true,
|
|
157
|
+
tabletOptimized: false,
|
|
158
|
+
desktopOptimized: false,
|
|
159
|
+
orientation: 'both',
|
|
160
|
+
performance: 'low'
|
|
161
|
+
}
|
|
131
162
|
]
|
|
132
163
|
|
|
133
|
-
const tabletStates] = [
|
|
164
|
+
const tabletStates: LoadingState[] = [
|
|
134
165
|
{
|
|
135
|
-
id,
|
|
136
|
-
name,
|
|
137
|
-
type,
|
|
138
|
-
duration,
|
|
139
|
-
complexity,
|
|
140
|
-
mobileOptimized,
|
|
141
|
-
tabletOptimized,
|
|
142
|
-
desktopOptimized,
|
|
143
|
-
orientation,
|
|
144
|
-
performance
|
|
166
|
+
id: 'tablet-skeleton-spinner',
|
|
167
|
+
name: 'Tablet Skeleton + Spinner',
|
|
168
|
+
type: 'skeleton-spinner',
|
|
169
|
+
duration: 1200,
|
|
170
|
+
complexity: 'medium',
|
|
171
|
+
mobileOptimized: false,
|
|
172
|
+
tabletOptimized: true,
|
|
173
|
+
desktopOptimized: false,
|
|
174
|
+
orientation: 'both',
|
|
175
|
+
performance: 'medium'
|
|
176
|
+
},
|
|
145
177
|
{
|
|
146
|
-
id,
|
|
147
|
-
name,
|
|
148
|
-
type,
|
|
149
|
-
duration,
|
|
150
|
-
complexity,
|
|
151
|
-
mobileOptimized,
|
|
152
|
-
tabletOptimized,
|
|
153
|
-
desktopOptimized,
|
|
154
|
-
orientation,
|
|
155
|
-
performance
|
|
178
|
+
id: 'tablet-progress',
|
|
179
|
+
name: 'Tablet Progress',
|
|
180
|
+
type: 'progress',
|
|
181
|
+
duration: 1500,
|
|
182
|
+
complexity: 'medium',
|
|
183
|
+
mobileOptimized: false,
|
|
184
|
+
tabletOptimized: true,
|
|
185
|
+
desktopOptimized: false,
|
|
186
|
+
orientation: 'both',
|
|
187
|
+
performance: 'medium'
|
|
188
|
+
}
|
|
156
189
|
]
|
|
157
190
|
|
|
158
|
-
const desktopStates] = [
|
|
191
|
+
const desktopStates: LoadingState[] = [
|
|
159
192
|
{
|
|
160
|
-
id,
|
|
161
|
-
name,
|
|
162
|
-
type,
|
|
163
|
-
duration,
|
|
164
|
-
complexity,
|
|
165
|
-
mobileOptimized,
|
|
166
|
-
tabletOptimized,
|
|
167
|
-
desktopOptimized,
|
|
168
|
-
orientation,
|
|
169
|
-
performance
|
|
193
|
+
id: 'desktop-skeleton',
|
|
194
|
+
name: 'Desktop Skeleton',
|
|
195
|
+
type: 'skeleton',
|
|
196
|
+
duration: 2000,
|
|
197
|
+
complexity: 'high',
|
|
198
|
+
mobileOptimized: false,
|
|
199
|
+
tabletOptimized: false,
|
|
200
|
+
desktopOptimized: true,
|
|
201
|
+
orientation: 'both',
|
|
202
|
+
performance: 'high'
|
|
203
|
+
},
|
|
170
204
|
{
|
|
171
|
-
id,
|
|
172
|
-
name,
|
|
173
|
-
type,
|
|
174
|
-
duration,
|
|
175
|
-
complexity,
|
|
176
|
-
mobileOptimized,
|
|
177
|
-
tabletOptimized,
|
|
178
|
-
desktopOptimized,
|
|
179
|
-
orientation,
|
|
180
|
-
performance
|
|
205
|
+
id: 'desktop-custom',
|
|
206
|
+
name: 'Desktop Custom',
|
|
207
|
+
type: 'custom',
|
|
208
|
+
duration: 2500,
|
|
209
|
+
complexity: 'high',
|
|
210
|
+
mobileOptimized: false,
|
|
211
|
+
tabletOptimized: false,
|
|
212
|
+
desktopOptimized: true,
|
|
213
|
+
orientation: 'both',
|
|
214
|
+
performance: 'high'
|
|
215
|
+
}
|
|
181
216
|
]
|
|
182
217
|
|
|
183
218
|
const allStates = [
|
|
184
|
-
...(enableMobileStates ? mobileStates ]),
|
|
185
|
-
...(enableTabletStates ? tabletStates ]),
|
|
186
|
-
...(enableDesktopStates ? desktopStates ])
|
|
219
|
+
...(enableMobileStates ? mobileStates : []),
|
|
220
|
+
...(enableTabletStates ? tabletStates : []),
|
|
221
|
+
...(enableDesktopStates ? desktopStates : [])
|
|
187
222
|
]
|
|
188
223
|
|
|
189
224
|
setDeviceState(prev => ({
|
|
190
225
|
...prev,
|
|
191
|
-
loadingStates
|
|
226
|
+
loadingStates: allStates
|
|
227
|
+
}))
|
|
192
228
|
|
|
193
229
|
return allStates
|
|
194
230
|
}, [enableMobileStates, enableTabletStates, enableDesktopStates])
|
|
195
231
|
|
|
196
232
|
// Set active loading state
|
|
197
|
-
const setActiveLoadingState = useCallback((stateId) => {
|
|
233
|
+
const setActiveLoadingState = useCallback((stateId: string) => {
|
|
198
234
|
const state = deviceState.loadingStates.find(s => s.id === stateId)
|
|
199
235
|
if (state) {
|
|
200
236
|
setDeviceState(prev => ({
|
|
201
237
|
...prev,
|
|
202
|
-
activeState
|
|
238
|
+
activeState: state
|
|
239
|
+
}))
|
|
203
240
|
callbacks.onLoadingStateChanged?.(state)
|
|
204
241
|
}
|
|
205
242
|
}, [deviceState.loadingStates, callbacks])
|
|
@@ -221,7 +258,8 @@ export const useDeviceLoadingStates = (
|
|
|
221
258
|
setAdaptations(prev => [...prev, ...adaptiveFeatures])
|
|
222
259
|
setDeviceState(prev => ({
|
|
223
260
|
...prev,
|
|
224
|
-
adaptiveBehavior
|
|
261
|
+
adaptiveBehavior: true
|
|
262
|
+
}))
|
|
225
263
|
setIsAdapting(false)
|
|
226
264
|
|
|
227
265
|
adaptiveFeatures.forEach(feature => {
|
|
@@ -278,7 +316,7 @@ export const useDeviceLoadingStates = (
|
|
|
278
316
|
|
|
279
317
|
setPerformanceMetrics(prev => ({
|
|
280
318
|
...prev,
|
|
281
|
-
frameRate,
|
|
319
|
+
frameRate: fps,
|
|
282
320
|
renderTime
|
|
283
321
|
}))
|
|
284
322
|
|
|
@@ -308,7 +346,8 @@ export const useDeviceLoadingStates = (
|
|
|
308
346
|
const battery = await (navigator as any).getBattery()
|
|
309
347
|
const level = battery.level
|
|
310
348
|
|
|
311
|
-
let batteryLevel
|
|
349
|
+
let batteryLevel: 'critical' | 'low' | 'medium' | 'high'
|
|
350
|
+
if (level <= 0.1) batteryLevel = 'critical'
|
|
312
351
|
else if (level <= 0.3) batteryLevel = 'low'
|
|
313
352
|
else if (level <= 0.7) batteryLevel = 'medium'
|
|
314
353
|
else batteryLevel = 'high'
|
|
@@ -319,7 +358,7 @@ export const useDeviceLoadingStates = (
|
|
|
319
358
|
}))
|
|
320
359
|
}
|
|
321
360
|
} catch (error) {
|
|
322
|
-
console.warn('Battery monitoring failed, error)
|
|
361
|
+
console.warn('Battery monitoring failed:', error)
|
|
323
362
|
}
|
|
324
363
|
}
|
|
325
364
|
|
|
@@ -401,15 +440,19 @@ export const useDeviceLoadingStates = (
|
|
|
401
440
|
autoAdapt,
|
|
402
441
|
|
|
403
442
|
// Utility functions
|
|
404
|
-
isMobileDevice) => deviceState.deviceType === 'mobile',
|
|
405
|
-
isTabletDevice) => deviceState.deviceType === 'tablet',
|
|
406
|
-
isDesktopDevice) => deviceState.deviceType === 'desktop',
|
|
407
|
-
getActiveState) => deviceState.activeState,
|
|
408
|
-
getLoadingStatesForDevice) => deviceState.loadingStates.filter(state => {
|
|
443
|
+
isMobileDevice: () => deviceState.deviceType === 'mobile',
|
|
444
|
+
isTabletDevice: () => deviceState.deviceType === 'tablet',
|
|
445
|
+
isDesktopDevice: () => deviceState.deviceType === 'desktop',
|
|
446
|
+
getActiveState: () => deviceState.activeState,
|
|
447
|
+
getLoadingStatesForDevice: () => deviceState.loadingStates.filter(state => {
|
|
409
448
|
switch (deviceState.deviceType) {
|
|
410
|
-
case 'mobile'
|
|
449
|
+
case 'mobile': return state.mobileOptimized
|
|
450
|
+
case 'tablet': return state.tabletOptimized
|
|
451
|
+
case 'desktop': return state.desktopOptimized
|
|
452
|
+
default: return false
|
|
453
|
+
}
|
|
411
454
|
}),
|
|
412
|
-
clearAdaptations) => setAdaptations([])
|
|
455
|
+
clearAdaptations: () => setAdaptations([])
|
|
413
456
|
}
|
|
414
457
|
}
|
|
415
458
|
|
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
import { useState, useEffect } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface DeviceInfo {
|
|
4
|
-
isMobile
|
|
4
|
+
isMobile: boolean
|
|
5
|
+
isTablet: boolean
|
|
6
|
+
isDesktop: boolean
|
|
7
|
+
screenSize: 'mobile' | 'tablet' | 'desktop'
|
|
8
|
+
orientation: 'portrait' | 'landscape'
|
|
9
|
+
touchDevice: boolean
|
|
10
|
+
}
|
|
5
11
|
|
|
6
12
|
// Breakpoints based on common device sizes
|
|
7
13
|
const BREAKPOINTS = {
|
|
8
|
-
mobile,
|
|
9
|
-
tablet,
|
|
10
|
-
desktop
|
|
14
|
+
mobile: 768,
|
|
15
|
+
tablet: 1024,
|
|
16
|
+
desktop: 1440
|
|
17
|
+
} as const
|
|
11
18
|
|
|
12
19
|
/**
|
|
13
20
|
* Enhanced device detection hook with tablet-specific support
|
|
14
21
|
* Provides detailed device information including orientation and touch capabilities
|
|
15
22
|
*/
|
|
16
|
-
export const useDevice = ()=> {
|
|
23
|
+
export const useDevice = (): DeviceInfo => {
|
|
17
24
|
const [deviceInfo, setDeviceInfo] = useState<DeviceInfo>({
|
|
18
|
-
isMobile,
|
|
19
|
-
isTablet,
|
|
20
|
-
isDesktop,
|
|
21
|
-
screenSize,
|
|
22
|
-
orientation,
|
|
23
|
-
touchDevice
|
|
25
|
+
isMobile: false,
|
|
26
|
+
isTablet: false,
|
|
27
|
+
isDesktop: false,
|
|
28
|
+
screenSize: 'desktop',
|
|
29
|
+
orientation: 'landscape',
|
|
30
|
+
touchDevice: false
|
|
31
|
+
})
|
|
24
32
|
|
|
25
33
|
useEffect(() => {
|
|
26
34
|
const updateDeviceInfo = () => {
|
|
@@ -33,13 +41,16 @@ export const useDevice = ()=> {
|
|
|
33
41
|
const isDesktop = width >= BREAKPOINTS.tablet
|
|
34
42
|
|
|
35
43
|
// Determine screen size category
|
|
36
|
-
let screenSize]
|
|
44
|
+
let screenSize: DeviceInfo['screenSize']
|
|
37
45
|
if (isMobile) screenSize = 'mobile'
|
|
38
46
|
else if (isTablet) screenSize = 'tablet'
|
|
39
47
|
else screenSize = 'desktop'
|
|
40
48
|
|
|
41
49
|
// Determine orientation
|
|
42
|
-
const orientation] = width > height ? 'landscape'
|
|
50
|
+
const orientation: DeviceInfo['orientation'] = width > height ? 'landscape' : 'portrait'
|
|
51
|
+
|
|
52
|
+
// Detect touch capability
|
|
53
|
+
const touchDevice = 'ontouchstart' in window ||
|
|
43
54
|
navigator.maxTouchPoints > 0 ||
|
|
44
55
|
// @ts-ignore - some browsers use this property
|
|
45
56
|
navigator.msMaxTouchPoints > 0
|
|
@@ -85,7 +96,7 @@ export const useOrientation = () => useDevice().orientation
|
|
|
85
96
|
export const useIsTouchDevice = () => useDevice().touchDevice
|
|
86
97
|
|
|
87
98
|
// Utility function to get device-specific classes
|
|
88
|
-
export const getDeviceClasses = (deviceInfo)=> {
|
|
99
|
+
export const getDeviceClasses = (deviceInfo: DeviceInfo): string => {
|
|
89
100
|
const classes = []
|
|
90
101
|
|
|
91
102
|
classes.push(`screen-${deviceInfo.screenSize}`)
|
package/dist/hooks/use-device.js
CHANGED
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
import { useState, useEffect } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface DeviceInfo {
|
|
4
|
-
isMobile
|
|
4
|
+
isMobile: boolean
|
|
5
|
+
isTablet: boolean
|
|
6
|
+
isDesktop: boolean
|
|
7
|
+
screenSize: 'mobile' | 'tablet' | 'desktop'
|
|
8
|
+
orientation: 'portrait' | 'landscape'
|
|
9
|
+
touchDevice: boolean
|
|
10
|
+
}
|
|
5
11
|
|
|
6
12
|
// Breakpoints based on common device sizes
|
|
7
13
|
const BREAKPOINTS = {
|
|
8
|
-
mobile,
|
|
9
|
-
tablet,
|
|
10
|
-
desktop
|
|
14
|
+
mobile: 768,
|
|
15
|
+
tablet: 1024,
|
|
16
|
+
desktop: 1440
|
|
17
|
+
} as const
|
|
11
18
|
|
|
12
19
|
/**
|
|
13
20
|
* Enhanced device detection hook with tablet-specific support
|
|
14
21
|
* Provides detailed device information including orientation and touch capabilities
|
|
15
22
|
*/
|
|
16
|
-
export const useDevice = ()=> {
|
|
23
|
+
export const useDevice = (): DeviceInfo => {
|
|
17
24
|
const [deviceInfo, setDeviceInfo] = useState<DeviceInfo>({
|
|
18
|
-
isMobile,
|
|
19
|
-
isTablet,
|
|
20
|
-
isDesktop,
|
|
21
|
-
screenSize,
|
|
22
|
-
orientation,
|
|
23
|
-
touchDevice
|
|
25
|
+
isMobile: false,
|
|
26
|
+
isTablet: false,
|
|
27
|
+
isDesktop: false,
|
|
28
|
+
screenSize: 'desktop',
|
|
29
|
+
orientation: 'landscape',
|
|
30
|
+
touchDevice: false
|
|
31
|
+
})
|
|
24
32
|
|
|
25
33
|
useEffect(() => {
|
|
26
34
|
const updateDeviceInfo = () => {
|
|
@@ -33,13 +41,16 @@ export const useDevice = ()=> {
|
|
|
33
41
|
const isDesktop = width >= BREAKPOINTS.tablet
|
|
34
42
|
|
|
35
43
|
// Determine screen size category
|
|
36
|
-
let screenSize]
|
|
44
|
+
let screenSize: DeviceInfo['screenSize']
|
|
37
45
|
if (isMobile) screenSize = 'mobile'
|
|
38
46
|
else if (isTablet) screenSize = 'tablet'
|
|
39
47
|
else screenSize = 'desktop'
|
|
40
48
|
|
|
41
49
|
// Determine orientation
|
|
42
|
-
const orientation] = width > height ? 'landscape'
|
|
50
|
+
const orientation: DeviceInfo['orientation'] = width > height ? 'landscape' : 'portrait'
|
|
51
|
+
|
|
52
|
+
// Detect touch capability
|
|
53
|
+
const touchDevice = 'ontouchstart' in window ||
|
|
43
54
|
navigator.maxTouchPoints > 0 ||
|
|
44
55
|
// @ts-ignore - some browsers use this property
|
|
45
56
|
navigator.msMaxTouchPoints > 0
|
|
@@ -85,7 +96,7 @@ export const useOrientation = () => useDevice().orientation
|
|
|
85
96
|
export const useIsTouchDevice = () => useDevice().touchDevice
|
|
86
97
|
|
|
87
98
|
// Utility function to get device-specific classes
|
|
88
|
-
export const getDeviceClasses = (deviceInfo)=> {
|
|
99
|
+
export const getDeviceClasses = (deviceInfo: DeviceInfo): string => {
|
|
89
100
|
const classes = []
|
|
90
101
|
|
|
91
102
|
classes.push(`screen-${deviceInfo.screenSize}`)
|