@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.8 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/components/ui/accessibility-demo.esm.js +30 -24
- package/dist/components/ui/accessibility-demo.js +30 -24
- package/dist/components/ui/advanced-component-architecture-demo.esm.js +235 -179
- package/dist/components/ui/advanced-component-architecture-demo.js +235 -179
- package/dist/components/ui/advanced-transition-system-demo.esm.js +110 -64
- package/dist/components/ui/advanced-transition-system-demo.js +110 -64
- package/dist/components/ui/advanced-transition-system.esm.js +166 -122
- package/dist/components/ui/advanced-transition-system.js +166 -122
- package/dist/components/ui/animation/animated-container.esm.js +52 -29
- package/dist/components/ui/animation/animated-container.js +52 -29
- package/dist/components/ui/animation/staggered-container.esm.js +18 -9
- package/dist/components/ui/animation/staggered-container.js +18 -9
- package/dist/components/ui/animation-demo.esm.js +67 -35
- package/dist/components/ui/animation-demo.js +67 -35
- package/dist/components/ui/badge.esm.js +9 -6
- package/dist/components/ui/badge.js +9 -6
- package/dist/components/ui/battery-conscious-animation-demo.esm.js +122 -87
- package/dist/components/ui/battery-conscious-animation-demo.js +122 -87
- package/dist/components/ui/border-radius-shadow-demo.esm.js +23 -12
- package/dist/components/ui/border-radius-shadow-demo.js +23 -12
- package/dist/components/ui/button.esm.js +8 -2
- package/dist/components/ui/button.js +8 -2
- package/dist/components/ui/card.esm.js +33 -8
- package/dist/components/ui/card.js +33 -8
- package/dist/components/ui/checkbox.esm.js +3 -3
- package/dist/components/ui/checkbox.js +3 -3
- package/dist/components/ui/color-preview.esm.js +68 -45
- package/dist/components/ui/color-preview.js +68 -45
- package/dist/components/ui/data-display/chart.esm.js +112 -84
- package/dist/components/ui/data-display/chart.js +112 -84
- package/dist/components/ui/data-display/data-grid-simple.esm.js +1 -1
- package/dist/components/ui/data-display/data-grid-simple.js +1 -1
- package/dist/components/ui/data-display/data-grid.esm.js +80 -67
- package/dist/components/ui/data-display/data-grid.js +80 -67
- package/dist/components/ui/data-display/list.esm.js +53 -45
- package/dist/components/ui/data-display/list.js +53 -45
- package/dist/components/ui/data-display/table.esm.js +62 -54
- package/dist/components/ui/data-display/table.js +62 -54
- package/dist/components/ui/data-display/timeline.esm.js +39 -34
- package/dist/components/ui/data-display/timeline.js +39 -34
- package/dist/components/ui/data-display/tree.esm.js +116 -84
- package/dist/components/ui/data-display/tree.js +116 -84
- package/dist/components/ui/data-display/types.esm.js +389 -364
- package/dist/components/ui/data-display/types.js +389 -364
- package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience-demo.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience.esm.js +124 -73
- package/dist/components/ui/enterprise-mobile-experience.js +124 -73
- package/dist/components/ui/feedback/alert.esm.js +22 -15
- package/dist/components/ui/feedback/alert.js +22 -15
- package/dist/components/ui/feedback/progress.esm.js +47 -24
- package/dist/components/ui/feedback/progress.js +47 -24
- package/dist/components/ui/feedback/skeleton.esm.js +39 -29
- package/dist/components/ui/feedback/skeleton.js +39 -29
- package/dist/components/ui/feedback/toast.esm.js +62 -38
- package/dist/components/ui/feedback/toast.js +62 -38
- package/dist/components/ui/feedback/types.esm.js +83 -83
- package/dist/components/ui/feedback/types.js +83 -83
- package/dist/components/ui/font-preview.esm.js +41 -39
- package/dist/components/ui/font-preview.js +41 -39
- package/dist/components/ui/form-demo.esm.js +150 -113
- package/dist/components/ui/form-demo.js +150 -113
- package/dist/components/ui/hardware-acceleration-demo.esm.js +137 -87
- package/dist/components/ui/hardware-acceleration-demo.js +137 -87
- package/dist/components/ui/input.esm.js +4 -1
- package/dist/components/ui/input.js +4 -1
- package/dist/components/ui/layout-demo.esm.js +81 -56
- package/dist/components/ui/layout-demo.js +81 -56
- package/dist/components/ui/layouts/adaptive-layout.esm.js +27 -8
- package/dist/components/ui/layouts/adaptive-layout.js +27 -8
- package/dist/components/ui/layouts/desktop-layout.esm.js +39 -19
- package/dist/components/ui/layouts/desktop-layout.js +39 -19
- package/dist/components/ui/layouts/mobile-layout.esm.js +19 -9
- package/dist/components/ui/layouts/mobile-layout.js +19 -9
- package/dist/components/ui/layouts/tablet-layout.esm.js +28 -14
- package/dist/components/ui/layouts/tablet-layout.js +28 -14
- package/dist/components/ui/mobile-form-validation.esm.js +120 -87
- package/dist/components/ui/mobile-form-validation.js +120 -87
- package/dist/components/ui/mobile-input-demo.esm.js +19 -13
- package/dist/components/ui/mobile-input-demo.js +19 -13
- package/dist/components/ui/mobile-input.esm.js +185 -120
- package/dist/components/ui/mobile-input.js +185 -120
- package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +128 -111
- package/dist/components/ui/mobile-skeleton-loading-demo.js +128 -111
- package/dist/components/ui/navigation/breadcrumb.esm.js +17 -14
- package/dist/components/ui/navigation/breadcrumb.js +17 -14
- package/dist/components/ui/navigation/index.esm.js +23 -1
- package/dist/components/ui/navigation/index.js +23 -1
- package/dist/components/ui/navigation/menu.esm.js +49 -35
- package/dist/components/ui/navigation/menu.js +49 -35
- package/dist/components/ui/navigation/navigation-demo.esm.js +81 -74
- package/dist/components/ui/navigation/navigation-demo.js +81 -74
- package/dist/components/ui/navigation/pagination.esm.js +62 -50
- package/dist/components/ui/navigation/pagination.js +62 -50
- package/dist/components/ui/navigation/sidebar.esm.js +56 -42
- package/dist/components/ui/navigation/sidebar.js +56 -42
- package/dist/components/ui/navigation/stepper.esm.js +34 -23
- package/dist/components/ui/navigation/stepper.js +34 -23
- package/dist/components/ui/navigation/tabs.esm.js +32 -21
- package/dist/components/ui/navigation/tabs.js +32 -21
- package/dist/components/ui/navigation/types.esm.js +196 -195
- package/dist/components/ui/navigation/types.js +196 -195
- package/dist/components/ui/overlay/backdrop.esm.js +17 -16
- package/dist/components/ui/overlay/backdrop.js +17 -16
- package/dist/components/ui/overlay/focus-manager.esm.js +21 -19
- package/dist/components/ui/overlay/focus-manager.js +21 -19
- package/dist/components/ui/overlay/index.esm.js +22 -2
- package/dist/components/ui/overlay/index.js +22 -2
- package/dist/components/ui/overlay/modal.esm.js +38 -34
- package/dist/components/ui/overlay/modal.js +38 -34
- package/dist/components/ui/overlay/overlay-manager.esm.js +25 -20
- package/dist/components/ui/overlay/overlay-manager.js +25 -20
- package/dist/components/ui/overlay/popover.esm.js +74 -58
- package/dist/components/ui/overlay/popover.js +74 -58
- package/dist/components/ui/overlay/portal.esm.js +7 -7
- package/dist/components/ui/overlay/portal.js +7 -7
- package/dist/components/ui/overlay/tooltip.esm.js +54 -39
- package/dist/components/ui/overlay/tooltip.js +54 -39
- package/dist/components/ui/overlay/types.esm.js +132 -131
- package/dist/components/ui/overlay/types.js +132 -131
- package/dist/components/ui/performance-demo.esm.js +135 -88
- package/dist/components/ui/performance-demo.js +135 -88
- package/dist/components/ui/semantic-input-system-demo.esm.js +117 -80
- package/dist/components/ui/semantic-input-system-demo.js +117 -80
- package/dist/components/ui/theme-customizer.esm.js +84 -52
- package/dist/components/ui/theme-customizer.js +84 -52
- package/dist/components/ui/theme-preview.esm.js +95 -43
- package/dist/components/ui/theme-preview.js +95 -43
- package/dist/components/ui/theme-switcher.esm.js +70 -44
- package/dist/components/ui/theme-switcher.js +70 -44
- package/dist/components/ui/theme-toggle.esm.js +3 -3
- package/dist/components/ui/theme-toggle.js +3 -3
- package/dist/components/ui/token-demo.esm.js +33 -21
- package/dist/components/ui/token-demo.js +33 -21
- package/dist/components/ui/touch-demo.esm.js +102 -73
- package/dist/components/ui/touch-demo.js +102 -73
- package/dist/components/ui/touch-friendly-interface-demo.esm.js +102 -64
- package/dist/components/ui/touch-friendly-interface-demo.js +102 -64
- package/dist/components/ui/touch-friendly-interface.esm.js +85 -61
- package/dist/components/ui/touch-friendly-interface.js +85 -61
- package/dist/hooks/use-accessibility-support.esm.js +115 -85
- package/dist/hooks/use-accessibility-support.js +115 -85
- package/dist/hooks/use-adaptive-layout.esm.js +56 -33
- package/dist/hooks/use-adaptive-layout.js +56 -33
- package/dist/hooks/use-advanced-patterns.esm.js +57 -42
- package/dist/hooks/use-advanced-patterns.js +57 -42
- package/dist/hooks/use-advanced-transition-system.esm.js +112 -71
- package/dist/hooks/use-advanced-transition-system.js +112 -71
- package/dist/hooks/use-animation-profile.esm.js +63 -34
- package/dist/hooks/use-animation-profile.js +63 -34
- package/dist/hooks/use-battery-animations.esm.js +80 -55
- package/dist/hooks/use-battery-animations.js +80 -55
- package/dist/hooks/use-battery-conscious-loading.esm.js +166 -123
- package/dist/hooks/use-battery-conscious-loading.js +166 -123
- package/dist/hooks/use-battery-optimization.esm.js +78 -55
- package/dist/hooks/use-battery-optimization.js +78 -55
- package/dist/hooks/use-battery-status.esm.js +73 -51
- package/dist/hooks/use-battery-status.js +73 -51
- package/dist/hooks/use-component-performance.esm.js +62 -47
- package/dist/hooks/use-component-performance.js +62 -47
- package/dist/hooks/use-device-loading-states.esm.js +152 -109
- package/dist/hooks/use-device-loading-states.js +152 -109
- package/dist/hooks/use-device.esm.js +25 -14
- package/dist/hooks/use-device.js +25 -14
- package/dist/hooks/use-enterprise-mobile-experience.esm.js +137 -88
- package/dist/hooks/use-enterprise-mobile-experience.js +137 -88
- package/dist/hooks/use-form-feedback.esm.js +124 -81
- package/dist/hooks/use-form-feedback.js +124 -81
- package/dist/hooks/use-form-performance.esm.js +127 -92
- package/dist/hooks/use-form-performance.js +127 -92
- package/dist/hooks/use-frame-rate.esm.js +56 -37
- package/dist/hooks/use-frame-rate.js +56 -37
- package/dist/hooks/use-gestures.esm.js +96 -72
- package/dist/hooks/use-gestures.js +96 -72
- package/dist/hooks/use-hardware-acceleration.esm.js +65 -37
- package/dist/hooks/use-hardware-acceleration.js +65 -37
- package/dist/hooks/use-input-accessibility.esm.js +157 -119
- package/dist/hooks/use-input-accessibility.js +157 -119
- package/dist/hooks/use-input-performance.esm.js +139 -104
- package/dist/hooks/use-input-performance.js +139 -104
- package/dist/hooks/use-layout-performance.esm.js +50 -29
- package/dist/hooks/use-layout-performance.js +50 -29
- package/dist/hooks/use-loading-accessibility.esm.js +209 -169
- package/dist/hooks/use-loading-accessibility.js +209 -169
- package/dist/hooks/use-loading-performance.esm.js +117 -93
- package/dist/hooks/use-loading-performance.js +117 -93
- package/dist/hooks/use-memory-usage.esm.js +57 -38
- package/dist/hooks/use-memory-usage.js +57 -38
- package/dist/hooks/use-mobile-form-layout.esm.js +111 -74
- package/dist/hooks/use-mobile-form-layout.js +111 -74
- package/dist/hooks/use-mobile-form-validation.esm.js +211 -144
- package/dist/hooks/use-mobile-form-validation.js +211 -144
- package/dist/hooks/use-mobile-keyboard-optimization.esm.js +154 -113
- package/dist/hooks/use-mobile-keyboard-optimization.js +154 -113
- package/dist/hooks/use-mobile-layout.esm.js +73 -51
- package/dist/hooks/use-mobile-layout.js +73 -51
- package/dist/hooks/use-mobile-optimization.esm.js +72 -44
- package/dist/hooks/use-mobile-optimization.js +72 -44
- package/dist/hooks/use-mobile-skeleton.esm.js +97 -64
- package/dist/hooks/use-mobile-skeleton.js +97 -64
- package/dist/hooks/use-mobile-touch.esm.js +128 -93
- package/dist/hooks/use-mobile-touch.js +128 -93
- package/dist/hooks/use-performance-throttling.esm.js +72 -48
- package/dist/hooks/use-performance-throttling.js +72 -48
- package/dist/hooks/use-performance.esm.js +90 -52
- package/dist/hooks/use-performance.js +90 -52
- package/dist/hooks/use-reusable-architecture.esm.js +94 -65
- package/dist/hooks/use-reusable-architecture.js +94 -65
- package/dist/hooks/use-semantic-input-types.esm.js +166 -124
- package/dist/hooks/use-semantic-input-types.js +166 -124
- package/dist/hooks/use-semantic-input.esm.js +178 -126
- package/dist/hooks/use-semantic-input.js +178 -126
- package/dist/hooks/use-tablet-layout.esm.js +67 -38
- package/dist/hooks/use-tablet-layout.js +67 -38
- package/dist/hooks/use-touch-friendly-input.esm.js +193 -149
- package/dist/hooks/use-touch-friendly-input.js +193 -149
- package/dist/hooks/use-touch-friendly-interface.esm.js +99 -67
- package/dist/hooks/use-touch-friendly-interface.js +99 -67
- package/dist/hooks/use-touch-optimization.esm.js +99 -72
- package/dist/hooks/use-touch-optimization.js +99 -72
- package/dist/index.esm.js +289 -280
- package/dist/index.js +289 -280
- package/dist/lib/utils.esm.js +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/plugins/theme-css-generator.esm.js +104 -55
- package/dist/plugins/theme-css-generator.js +104 -55
- package/dist/provider.esm.js +4 -4
- package/dist/provider.js +4 -4
- package/dist/styles.css +1 -1
- package/dist/theme.esm.js +633 -468
- package/dist/theme.js +633 -468
- package/dist/themes/ThemeContext.esm.js +15 -15
- package/dist/themes/ThemeContext.js +15 -15
- package/dist/themes/ThemeProvider.esm.js +25 -22
- package/dist/themes/ThemeProvider.js +25 -22
- package/dist/themes/accessibility.esm.js +147 -108
- package/dist/themes/accessibility.js +147 -108
- package/dist/themes/aria-patterns.esm.js +198 -162
- package/dist/themes/aria-patterns.js +198 -162
- package/dist/themes/base-themes.esm.js +14 -11
- package/dist/themes/base-themes.js +14 -11
- package/dist/themes/colorManager.esm.js +101 -83
- package/dist/themes/colorManager.js +101 -83
- package/dist/themes/examples/dark-theme.esm.js +133 -103
- package/dist/themes/examples/dark-theme.js +133 -103
- package/dist/themes/examples/minimal-theme.esm.js +83 -61
- package/dist/themes/examples/minimal-theme.js +83 -61
- package/dist/themes/focus-management.esm.js +202 -143
- package/dist/themes/focus-management.js +202 -143
- package/dist/themes/fontLoader.esm.js +28 -19
- package/dist/themes/fontLoader.js +28 -19
- package/dist/themes/high-contrast.esm.js +152 -104
- package/dist/themes/high-contrast.js +152 -104
- package/dist/themes/inheritance.esm.js +35 -27
- package/dist/themes/inheritance.js +35 -27
- package/dist/themes/keyboard-navigation.esm.js +152 -123
- package/dist/themes/keyboard-navigation.js +152 -123
- package/dist/themes/motion-reduction.esm.js +193 -133
- package/dist/themes/motion-reduction.js +193 -133
- package/dist/themes/navigation.esm.js +146 -146
- package/dist/themes/navigation.js +146 -146
- package/dist/themes/screen-reader.esm.js +159 -94
- package/dist/themes/screen-reader.js +159 -94
- package/dist/themes/systemThemeDetector.esm.js +42 -34
- package/dist/themes/systemThemeDetector.js +42 -34
- package/dist/themes/themeCSSUpdater.esm.js +21 -9
- package/dist/themes/themeCSSUpdater.js +21 -9
- package/dist/themes/themePersistence.esm.js +68 -47
- package/dist/themes/themePersistence.js +68 -47
- package/dist/themes/themes/stan-design.esm.js +633 -468
- package/dist/themes/themes/stan-design.js +633 -468
- package/dist/themes/types.esm.js +301 -287
- package/dist/themes/types.js +301 -287
- package/dist/themes/useSystemTheme.esm.js +4 -4
- package/dist/themes/useSystemTheme.js +4 -4
- package/dist/themes/useTheme.esm.js +4 -4
- package/dist/themes/useTheme.js +4 -4
- package/dist/themes/validation.esm.js +128 -77
- package/dist/themes/validation.js +128 -77
- package/dist/tokens/index.esm.js +15 -4
- package/dist/tokens/index.js +15 -4
- package/dist/tokens/tokenExporter.esm.js +87 -61
- package/dist/tokens/tokenExporter.js +87 -61
- package/dist/tokens/tokenGenerator.esm.js +86 -77
- package/dist/tokens/tokenGenerator.js +86 -77
- package/dist/tokens/tokenManager.esm.js +64 -51
- package/dist/tokens/tokenManager.js +64 -51
- package/dist/tokens/tokenValidator.esm.js +193 -147
- package/dist/tokens/tokenValidator.js +193 -147
- package/dist/tokens/types.esm.js +49 -35
- package/dist/tokens/types.js +49 -35
- package/dist/utils/bundle-analyzer.esm.js +83 -65
- package/dist/utils/bundle-analyzer.js +83 -65
- package/dist/utils/bundle-splitting.esm.js +142 -117
- package/dist/utils/bundle-splitting.js +142 -117
- package/dist/utils/lazy-loading.esm.js +132 -106
- package/dist/utils/lazy-loading.js +132 -106
- package/dist/utils/performance-monitor.esm.js +170 -129
- package/dist/utils/performance-monitor.js +170 -129
- package/dist/utils/tree-shaking.esm.js +69 -61
- package/dist/utils/tree-shaking.js +69 -61
- package/package.json +1 -1
- package/src/index.ts +146 -146
|
@@ -8,9 +8,18 @@ import { DesktopLayout } from './desktop-layout'
|
|
|
8
8
|
export type DeviceType = 'mobile' | 'tablet' | 'desktop'
|
|
9
9
|
|
|
10
10
|
export interface AdaptiveLayoutProps {
|
|
11
|
-
children
|
|
11
|
+
children: ReactNode
|
|
12
|
+
title?: string
|
|
13
|
+
description?: string
|
|
14
|
+
showHeader?: boolean
|
|
15
|
+
showSidebar?: boolean
|
|
16
|
+
enableTouchOptimization?: boolean
|
|
17
|
+
enablePerformanceMonitoring?: boolean
|
|
18
|
+
enableAdvancedFeatures?: boolean
|
|
19
|
+
className?: string
|
|
20
|
+
}
|
|
12
21
|
|
|
13
|
-
export const AdaptiveLayout= ({
|
|
22
|
+
export const AdaptiveLayout: React.FC<AdaptiveLayoutProps> = ({
|
|
14
23
|
children,
|
|
15
24
|
title = 'Adaptive Layout',
|
|
16
25
|
description = 'Automatically adapts to different device types with optimal layouts',
|
|
@@ -22,7 +31,7 @@ export const AdaptiveLayout= ({
|
|
|
22
31
|
className = ''
|
|
23
32
|
}) => {
|
|
24
33
|
const [deviceType, setDeviceType] = useState<DeviceType>('desktop')
|
|
25
|
-
const [screenSize, setScreenSize] = useState({ width, height})
|
|
34
|
+
const [screenSize, setScreenSize] = useState({ width: 0, height: 0 })
|
|
26
35
|
const [orientation, setOrientation] = useState<'portrait' | 'landscape'>('landscape')
|
|
27
36
|
|
|
28
37
|
// Device detection and adaptation
|
|
@@ -32,7 +41,7 @@ export const AdaptiveLayout= ({
|
|
|
32
41
|
const height = window.innerHeight
|
|
33
42
|
|
|
34
43
|
setScreenSize({ width, height })
|
|
35
|
-
setOrientation(width > height ? 'landscape' )
|
|
44
|
+
setOrientation(width > height ? 'landscape' : 'portrait')
|
|
36
45
|
|
|
37
46
|
// Device type detection based on screen size
|
|
38
47
|
if (width < 768) {
|
|
@@ -65,7 +74,10 @@ export const AdaptiveLayout= ({
|
|
|
65
74
|
}
|
|
66
75
|
|
|
67
76
|
switch (deviceType) {
|
|
68
|
-
case 'mobile'
|
|
77
|
+
case 'mobile':
|
|
78
|
+
return (
|
|
79
|
+
<MobileLayout
|
|
80
|
+
{...commonProps}
|
|
69
81
|
showFooter={true}
|
|
70
82
|
enableTouchOptimization={enableTouchOptimization}
|
|
71
83
|
>
|
|
@@ -73,7 +85,10 @@ export const AdaptiveLayout= ({
|
|
|
73
85
|
</MobileLayout>
|
|
74
86
|
)
|
|
75
87
|
|
|
76
|
-
case 'tablet'
|
|
88
|
+
case 'tablet':
|
|
89
|
+
return (
|
|
90
|
+
<TabletLayout
|
|
91
|
+
{...commonProps}
|
|
77
92
|
showSidebar={showSidebar}
|
|
78
93
|
enableTouchOptimization={enableTouchOptimization}
|
|
79
94
|
>
|
|
@@ -81,7 +96,10 @@ export const AdaptiveLayout= ({
|
|
|
81
96
|
</TabletLayout>
|
|
82
97
|
)
|
|
83
98
|
|
|
84
|
-
case 'desktop'
|
|
99
|
+
case 'desktop':
|
|
100
|
+
return (
|
|
101
|
+
<DesktopLayout
|
|
102
|
+
{...commonProps}
|
|
85
103
|
showSidebar={showSidebar}
|
|
86
104
|
showTopBar={true}
|
|
87
105
|
enableAdvancedFeatures={enableAdvancedFeatures}
|
|
@@ -90,7 +108,8 @@ export const AdaptiveLayout= ({
|
|
|
90
108
|
</DesktopLayout>
|
|
91
109
|
)
|
|
92
110
|
|
|
93
|
-
default
|
|
111
|
+
default:
|
|
112
|
+
return <div>{children}</div>
|
|
94
113
|
}
|
|
95
114
|
}
|
|
96
115
|
|
|
@@ -4,9 +4,18 @@ import { Badge } from '../badge'
|
|
|
4
4
|
import { Button } from '../button'
|
|
5
5
|
|
|
6
6
|
export interface DesktopLayoutProps {
|
|
7
|
-
children
|
|
7
|
+
children: ReactNode
|
|
8
|
+
title?: string
|
|
9
|
+
description?: string
|
|
10
|
+
showHeader?: boolean
|
|
11
|
+
showSidebar?: boolean
|
|
12
|
+
showTopBar?: boolean
|
|
13
|
+
enablePerformanceMonitoring?: boolean
|
|
14
|
+
enableAdvancedFeatures?: boolean
|
|
15
|
+
className?: string
|
|
16
|
+
}
|
|
8
17
|
|
|
9
|
-
export const DesktopLayout= ({
|
|
18
|
+
export const DesktopLayout: React.FC<DesktopLayoutProps> = ({
|
|
10
19
|
children,
|
|
11
20
|
title = 'Desktop Layout',
|
|
12
21
|
description = 'Desktop-optimized layout with advanced features and performance monitoring',
|
|
@@ -18,10 +27,11 @@ export const DesktopLayout= ({
|
|
|
18
27
|
className = ''
|
|
19
28
|
}) => {
|
|
20
29
|
const [performanceMetrics, setPerformanceMetrics] = useState({
|
|
21
|
-
renderTime,
|
|
22
|
-
memoryUsage,
|
|
23
|
-
cpuUsage,
|
|
24
|
-
fps
|
|
30
|
+
renderTime: 0,
|
|
31
|
+
memoryUsage: 0,
|
|
32
|
+
cpuUsage: 0,
|
|
33
|
+
fps: 60
|
|
34
|
+
})
|
|
25
35
|
const [sidebarCollapsed, setSidebarCollapsed] = useState(false)
|
|
26
36
|
|
|
27
37
|
// Performance monitoring
|
|
@@ -39,9 +49,9 @@ export const DesktopLayout= ({
|
|
|
39
49
|
setPerformanceMetrics(prev => ({
|
|
40
50
|
...prev,
|
|
41
51
|
renderTime,
|
|
42
|
-
memoryUsage) * 100,
|
|
43
|
-
cpuUsage) * 50,
|
|
44
|
-
fps) * 10
|
|
52
|
+
memoryUsage: Math.random() * 100,
|
|
53
|
+
cpuUsage: Math.random() * 50,
|
|
54
|
+
fps: 55 + Math.random() * 10
|
|
45
55
|
}))
|
|
46
56
|
}, 100)
|
|
47
57
|
}
|
|
@@ -101,11 +111,13 @@ export const DesktopLayout= ({
|
|
|
101
111
|
{/* Sidebar */}
|
|
102
112
|
{showSidebar && (
|
|
103
113
|
<aside className={`bg-cs-surface border-r border-cs-border transition-all duration-300 ${
|
|
104
|
-
sidebarCollapsed ? 'w-16'
|
|
114
|
+
sidebarCollapsed ? 'w-16' : 'w-80'
|
|
115
|
+
}`}>
|
|
105
116
|
<div className="p-4">
|
|
106
117
|
<div className="flex items-center justify-between mb-6">
|
|
107
118
|
<h3 className={`font-semibold text-cs-text-primary ${
|
|
108
|
-
sidebarCollapsed ? 'hidden'
|
|
119
|
+
sidebarCollapsed ? 'hidden' : 'block'
|
|
120
|
+
}`}>
|
|
109
121
|
Navigation
|
|
110
122
|
</h3>
|
|
111
123
|
<Button
|
|
@@ -114,33 +126,39 @@ export const DesktopLayout= ({
|
|
|
114
126
|
onClick={() => setSidebarCollapsed(!sidebarCollapsed)}
|
|
115
127
|
className="ml-auto"
|
|
116
128
|
>
|
|
117
|
-
{sidebarCollapsed ? '→' }
|
|
129
|
+
{sidebarCollapsed ? '→' : '←'}
|
|
118
130
|
</Button>
|
|
119
131
|
</div>
|
|
120
132
|
|
|
121
133
|
<nav className="space-y-2">
|
|
122
134
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
123
|
-
sidebarCollapsed ? 'px-2'
|
|
135
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
136
|
+
}`}>
|
|
124
137
|
🏠 {!sidebarCollapsed && 'Dashboard'}
|
|
125
138
|
</Button>
|
|
126
139
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
127
|
-
sidebarCollapsed ? 'px-2'
|
|
140
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
141
|
+
}`}>
|
|
128
142
|
🎨 {!sidebarCollapsed && 'Design System'}
|
|
129
143
|
</Button>
|
|
130
144
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
131
|
-
sidebarCollapsed ? 'px-2'
|
|
145
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
146
|
+
}`}>
|
|
132
147
|
📱 {!sidebarCollapsed && 'Mobile Features'}
|
|
133
148
|
</Button>
|
|
134
149
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
135
|
-
sidebarCollapsed ? 'px-2'
|
|
150
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
151
|
+
}`}>
|
|
136
152
|
🧪 {!sidebarCollapsed && 'Interactive Demos'}
|
|
137
153
|
</Button>
|
|
138
154
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
139
|
-
sidebarCollapsed ? 'px-2'
|
|
155
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
156
|
+
}`}>
|
|
140
157
|
📊 {!sidebarCollapsed && 'Performance'}
|
|
141
158
|
</Button>
|
|
142
159
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
143
|
-
sidebarCollapsed ? 'px-2'
|
|
160
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
161
|
+
}`}>
|
|
144
162
|
⚙️ {!sidebarCollapsed && 'Configuration'}
|
|
145
163
|
</Button>
|
|
146
164
|
</nav>
|
|
@@ -163,7 +181,9 @@ export const DesktopLayout= ({
|
|
|
163
181
|
</CardDescription>
|
|
164
182
|
</CardHeader>
|
|
165
183
|
<CardContent>
|
|
166
|
-
<div className="grid grid-cols-2 xl
|
|
184
|
+
<div className="grid grid-cols-2 xl:grid-cols-4 gap-8 text-center">
|
|
185
|
+
<div>
|
|
186
|
+
<p className="text-4xl font-bold text-cs-primary">
|
|
167
187
|
{performanceMetrics.renderTime.toFixed(1)}ms
|
|
168
188
|
</p>
|
|
169
189
|
<p className="text-base text-cs-text-secondary">Render Time</p>
|
|
@@ -4,9 +4,18 @@ import { Badge } from '../badge'
|
|
|
4
4
|
import { Button } from '../button'
|
|
5
5
|
|
|
6
6
|
export interface DesktopLayoutProps {
|
|
7
|
-
children
|
|
7
|
+
children: ReactNode
|
|
8
|
+
title?: string
|
|
9
|
+
description?: string
|
|
10
|
+
showHeader?: boolean
|
|
11
|
+
showSidebar?: boolean
|
|
12
|
+
showTopBar?: boolean
|
|
13
|
+
enablePerformanceMonitoring?: boolean
|
|
14
|
+
enableAdvancedFeatures?: boolean
|
|
15
|
+
className?: string
|
|
16
|
+
}
|
|
8
17
|
|
|
9
|
-
export const DesktopLayout= ({
|
|
18
|
+
export const DesktopLayout: React.FC<DesktopLayoutProps> = ({
|
|
10
19
|
children,
|
|
11
20
|
title = 'Desktop Layout',
|
|
12
21
|
description = 'Desktop-optimized layout with advanced features and performance monitoring',
|
|
@@ -18,10 +27,11 @@ export const DesktopLayout= ({
|
|
|
18
27
|
className = ''
|
|
19
28
|
}) => {
|
|
20
29
|
const [performanceMetrics, setPerformanceMetrics] = useState({
|
|
21
|
-
renderTime,
|
|
22
|
-
memoryUsage,
|
|
23
|
-
cpuUsage,
|
|
24
|
-
fps
|
|
30
|
+
renderTime: 0,
|
|
31
|
+
memoryUsage: 0,
|
|
32
|
+
cpuUsage: 0,
|
|
33
|
+
fps: 60
|
|
34
|
+
})
|
|
25
35
|
const [sidebarCollapsed, setSidebarCollapsed] = useState(false)
|
|
26
36
|
|
|
27
37
|
// Performance monitoring
|
|
@@ -39,9 +49,9 @@ export const DesktopLayout= ({
|
|
|
39
49
|
setPerformanceMetrics(prev => ({
|
|
40
50
|
...prev,
|
|
41
51
|
renderTime,
|
|
42
|
-
memoryUsage) * 100,
|
|
43
|
-
cpuUsage) * 50,
|
|
44
|
-
fps) * 10
|
|
52
|
+
memoryUsage: Math.random() * 100,
|
|
53
|
+
cpuUsage: Math.random() * 50,
|
|
54
|
+
fps: 55 + Math.random() * 10
|
|
45
55
|
}))
|
|
46
56
|
}, 100)
|
|
47
57
|
}
|
|
@@ -101,11 +111,13 @@ export const DesktopLayout= ({
|
|
|
101
111
|
{/* Sidebar */}
|
|
102
112
|
{showSidebar && (
|
|
103
113
|
<aside className={`bg-cs-surface border-r border-cs-border transition-all duration-300 ${
|
|
104
|
-
sidebarCollapsed ? 'w-16'
|
|
114
|
+
sidebarCollapsed ? 'w-16' : 'w-80'
|
|
115
|
+
}`}>
|
|
105
116
|
<div className="p-4">
|
|
106
117
|
<div className="flex items-center justify-between mb-6">
|
|
107
118
|
<h3 className={`font-semibold text-cs-text-primary ${
|
|
108
|
-
sidebarCollapsed ? 'hidden'
|
|
119
|
+
sidebarCollapsed ? 'hidden' : 'block'
|
|
120
|
+
}`}>
|
|
109
121
|
Navigation
|
|
110
122
|
</h3>
|
|
111
123
|
<Button
|
|
@@ -114,33 +126,39 @@ export const DesktopLayout= ({
|
|
|
114
126
|
onClick={() => setSidebarCollapsed(!sidebarCollapsed)}
|
|
115
127
|
className="ml-auto"
|
|
116
128
|
>
|
|
117
|
-
{sidebarCollapsed ? '→' }
|
|
129
|
+
{sidebarCollapsed ? '→' : '←'}
|
|
118
130
|
</Button>
|
|
119
131
|
</div>
|
|
120
132
|
|
|
121
133
|
<nav className="space-y-2">
|
|
122
134
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
123
|
-
sidebarCollapsed ? 'px-2'
|
|
135
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
136
|
+
}`}>
|
|
124
137
|
🏠 {!sidebarCollapsed && 'Dashboard'}
|
|
125
138
|
</Button>
|
|
126
139
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
127
|
-
sidebarCollapsed ? 'px-2'
|
|
140
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
141
|
+
}`}>
|
|
128
142
|
🎨 {!sidebarCollapsed && 'Design System'}
|
|
129
143
|
</Button>
|
|
130
144
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
131
|
-
sidebarCollapsed ? 'px-2'
|
|
145
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
146
|
+
}`}>
|
|
132
147
|
📱 {!sidebarCollapsed && 'Mobile Features'}
|
|
133
148
|
</Button>
|
|
134
149
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
135
|
-
sidebarCollapsed ? 'px-2'
|
|
150
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
151
|
+
}`}>
|
|
136
152
|
🧪 {!sidebarCollapsed && 'Interactive Demos'}
|
|
137
153
|
</Button>
|
|
138
154
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
139
|
-
sidebarCollapsed ? 'px-2'
|
|
155
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
156
|
+
}`}>
|
|
140
157
|
📊 {!sidebarCollapsed && 'Performance'}
|
|
141
158
|
</Button>
|
|
142
159
|
<Button variant="ghost" className={`w-full justify-start ${
|
|
143
|
-
sidebarCollapsed ? 'px-2'
|
|
160
|
+
sidebarCollapsed ? 'px-2' : 'px-4'
|
|
161
|
+
}`}>
|
|
144
162
|
⚙️ {!sidebarCollapsed && 'Configuration'}
|
|
145
163
|
</Button>
|
|
146
164
|
</nav>
|
|
@@ -163,7 +181,9 @@ export const DesktopLayout= ({
|
|
|
163
181
|
</CardDescription>
|
|
164
182
|
</CardHeader>
|
|
165
183
|
<CardContent>
|
|
166
|
-
<div className="grid grid-cols-2 xl
|
|
184
|
+
<div className="grid grid-cols-2 xl:grid-cols-4 gap-8 text-center">
|
|
185
|
+
<div>
|
|
186
|
+
<p className="text-4xl font-bold text-cs-primary">
|
|
167
187
|
{performanceMetrics.renderTime.toFixed(1)}ms
|
|
168
188
|
</p>
|
|
169
189
|
<p className="text-base text-cs-text-secondary">Render Time</p>
|
|
@@ -3,9 +3,17 @@ import { Card, CardContent, CardHeader, CardTitle } from '../card'
|
|
|
3
3
|
import { Badge } from '../badge'
|
|
4
4
|
|
|
5
5
|
export interface MobileLayoutProps {
|
|
6
|
-
children
|
|
6
|
+
children: ReactNode
|
|
7
|
+
title?: string
|
|
8
|
+
description?: string
|
|
9
|
+
showHeader?: boolean
|
|
10
|
+
showFooter?: boolean
|
|
11
|
+
enableTouchOptimization?: boolean
|
|
12
|
+
enablePerformanceMonitoring?: boolean
|
|
13
|
+
className?: string
|
|
14
|
+
}
|
|
7
15
|
|
|
8
|
-
export const MobileLayout= ({
|
|
16
|
+
export const MobileLayout: React.FC<MobileLayoutProps> = ({
|
|
9
17
|
children,
|
|
10
18
|
title = 'Mobile Layout',
|
|
11
19
|
description = 'Touch-optimized mobile layout with performance monitoring',
|
|
@@ -17,9 +25,10 @@ export const MobileLayout= ({
|
|
|
17
25
|
}) => {
|
|
18
26
|
const [touchActive, setTouchActive] = useState(false)
|
|
19
27
|
const [performanceMetrics, setPerformanceMetrics] = useState({
|
|
20
|
-
renderTime,
|
|
21
|
-
memoryUsage,
|
|
22
|
-
touchResponsiveness
|
|
28
|
+
renderTime: 0,
|
|
29
|
+
memoryUsage: 0,
|
|
30
|
+
touchResponsiveness: 0
|
|
31
|
+
})
|
|
23
32
|
|
|
24
33
|
// Touch optimization
|
|
25
34
|
useEffect(() => {
|
|
@@ -28,8 +37,8 @@ export const MobileLayout= ({
|
|
|
28
37
|
const handleTouchStart = () => setTouchActive(true)
|
|
29
38
|
const handleTouchEnd = () => setTouchActive(false)
|
|
30
39
|
|
|
31
|
-
document.addEventListener('touchstart', handleTouchStart, { passive})
|
|
32
|
-
document.addEventListener('touchend', handleTouchEnd, { passive})
|
|
40
|
+
document.addEventListener('touchstart', handleTouchStart, { passive: true })
|
|
41
|
+
document.addEventListener('touchend', handleTouchEnd, { passive: true })
|
|
33
42
|
|
|
34
43
|
return () => {
|
|
35
44
|
document.removeEventListener('touchstart', handleTouchStart)
|
|
@@ -52,8 +61,9 @@ export const MobileLayout= ({
|
|
|
52
61
|
setPerformanceMetrics(prev => ({
|
|
53
62
|
...prev,
|
|
54
63
|
renderTime,
|
|
55
|
-
memoryUsage) * 100,
|
|
56
|
-
touchResponsiveness
|
|
64
|
+
memoryUsage: Math.random() * 100,
|
|
65
|
+
touchResponsiveness: touchActive ? 95 : 85
|
|
66
|
+
}))
|
|
57
67
|
}, 100)
|
|
58
68
|
}
|
|
59
69
|
|
|
@@ -3,9 +3,17 @@ import { Card, CardContent, CardHeader, CardTitle } from '../card'
|
|
|
3
3
|
import { Badge } from '../badge'
|
|
4
4
|
|
|
5
5
|
export interface MobileLayoutProps {
|
|
6
|
-
children
|
|
6
|
+
children: ReactNode
|
|
7
|
+
title?: string
|
|
8
|
+
description?: string
|
|
9
|
+
showHeader?: boolean
|
|
10
|
+
showFooter?: boolean
|
|
11
|
+
enableTouchOptimization?: boolean
|
|
12
|
+
enablePerformanceMonitoring?: boolean
|
|
13
|
+
className?: string
|
|
14
|
+
}
|
|
7
15
|
|
|
8
|
-
export const MobileLayout= ({
|
|
16
|
+
export const MobileLayout: React.FC<MobileLayoutProps> = ({
|
|
9
17
|
children,
|
|
10
18
|
title = 'Mobile Layout',
|
|
11
19
|
description = 'Touch-optimized mobile layout with performance monitoring',
|
|
@@ -17,9 +25,10 @@ export const MobileLayout= ({
|
|
|
17
25
|
}) => {
|
|
18
26
|
const [touchActive, setTouchActive] = useState(false)
|
|
19
27
|
const [performanceMetrics, setPerformanceMetrics] = useState({
|
|
20
|
-
renderTime,
|
|
21
|
-
memoryUsage,
|
|
22
|
-
touchResponsiveness
|
|
28
|
+
renderTime: 0,
|
|
29
|
+
memoryUsage: 0,
|
|
30
|
+
touchResponsiveness: 0
|
|
31
|
+
})
|
|
23
32
|
|
|
24
33
|
// Touch optimization
|
|
25
34
|
useEffect(() => {
|
|
@@ -28,8 +37,8 @@ export const MobileLayout= ({
|
|
|
28
37
|
const handleTouchStart = () => setTouchActive(true)
|
|
29
38
|
const handleTouchEnd = () => setTouchActive(false)
|
|
30
39
|
|
|
31
|
-
document.addEventListener('touchstart', handleTouchStart, { passive})
|
|
32
|
-
document.addEventListener('touchend', handleTouchEnd, { passive})
|
|
40
|
+
document.addEventListener('touchstart', handleTouchStart, { passive: true })
|
|
41
|
+
document.addEventListener('touchend', handleTouchEnd, { passive: true })
|
|
33
42
|
|
|
34
43
|
return () => {
|
|
35
44
|
document.removeEventListener('touchstart', handleTouchStart)
|
|
@@ -52,8 +61,9 @@ export const MobileLayout= ({
|
|
|
52
61
|
setPerformanceMetrics(prev => ({
|
|
53
62
|
...prev,
|
|
54
63
|
renderTime,
|
|
55
|
-
memoryUsage) * 100,
|
|
56
|
-
touchResponsiveness
|
|
64
|
+
memoryUsage: Math.random() * 100,
|
|
65
|
+
touchResponsiveness: touchActive ? 95 : 85
|
|
66
|
+
}))
|
|
57
67
|
}, 100)
|
|
58
68
|
}
|
|
59
69
|
|
|
@@ -4,9 +4,17 @@ import { Badge } from '../badge'
|
|
|
4
4
|
import { Button } from '../button'
|
|
5
5
|
|
|
6
6
|
export interface TabletLayoutProps {
|
|
7
|
-
children
|
|
7
|
+
children: ReactNode
|
|
8
|
+
title?: string
|
|
9
|
+
description?: string
|
|
10
|
+
showHeader?: boolean
|
|
11
|
+
showSidebar?: boolean
|
|
12
|
+
enableTouchOptimization?: boolean
|
|
13
|
+
enablePerformanceMonitoring?: boolean
|
|
14
|
+
className?: string
|
|
15
|
+
}
|
|
8
16
|
|
|
9
|
-
export const TabletLayout= ({
|
|
17
|
+
export const TabletLayout: React.FC<TabletLayoutProps> = ({
|
|
10
18
|
children,
|
|
11
19
|
title = 'Tablet Layout',
|
|
12
20
|
description = 'Tablet-optimized layout with touch and performance features',
|
|
@@ -18,16 +26,18 @@ export const TabletLayout= ({
|
|
|
18
26
|
}) => {
|
|
19
27
|
const [orientation, setOrientation] = useState<'portrait' | 'landscape'>('portrait')
|
|
20
28
|
const [performanceMetrics, setPerformanceMetrics] = useState({
|
|
21
|
-
renderTime,
|
|
22
|
-
memoryUsage,
|
|
23
|
-
touchResponsiveness,
|
|
24
|
-
orientation
|
|
29
|
+
renderTime: 0,
|
|
30
|
+
memoryUsage: 0,
|
|
31
|
+
touchResponsiveness: 0,
|
|
32
|
+
orientation: 'portrait'
|
|
33
|
+
})
|
|
25
34
|
|
|
26
35
|
// Orientation detection
|
|
27
36
|
useEffect(() => {
|
|
28
37
|
const handleOrientationChange = () => {
|
|
29
|
-
const newOrientation = window.innerWidth > window.innerHeight ? 'landscape'
|
|
30
|
-
|
|
38
|
+
const newOrientation = window.innerWidth > window.innerHeight ? 'landscape' : 'portrait'
|
|
39
|
+
setOrientation(newOrientation)
|
|
40
|
+
setPerformanceMetrics(prev => ({ ...prev, orientation: newOrientation }))
|
|
31
41
|
}
|
|
32
42
|
|
|
33
43
|
handleOrientationChange()
|
|
@@ -55,8 +65,9 @@ export const TabletLayout= ({
|
|
|
55
65
|
setPerformanceMetrics(prev => ({
|
|
56
66
|
...prev,
|
|
57
67
|
renderTime,
|
|
58
|
-
memoryUsage) * 100,
|
|
59
|
-
touchResponsiveness=== 'landscape' ? 90
|
|
68
|
+
memoryUsage: Math.random() * 100,
|
|
69
|
+
touchResponsiveness: orientation === 'landscape' ? 90 : 95
|
|
70
|
+
}))
|
|
60
71
|
}, 100)
|
|
61
72
|
}
|
|
62
73
|
|
|
@@ -82,8 +93,8 @@ export const TabletLayout= ({
|
|
|
82
93
|
<Badge variant="outline">
|
|
83
94
|
Tablet
|
|
84
95
|
</Badge>
|
|
85
|
-
<Badge variant={orientation === 'landscape' ? 'default' }>
|
|
86
|
-
{orientation === 'landscape' ? 'Landscape' }
|
|
96
|
+
<Badge variant={orientation === 'landscape' ? 'default' : 'secondary'}>
|
|
97
|
+
{orientation === 'landscape' ? 'Landscape' : 'Portrait'}
|
|
87
98
|
</Badge>
|
|
88
99
|
{enableTouchOptimization && (
|
|
89
100
|
<Badge variant="default">
|
|
@@ -104,7 +115,8 @@ export const TabletLayout= ({
|
|
|
104
115
|
<div className="flex flex-1">
|
|
105
116
|
{/* Sidebar */}
|
|
106
117
|
{showSidebar && (
|
|
107
|
-
<aside className="w-64 bg-cs-surface border-r border-cs-border p-4 hidden lg
|
|
118
|
+
<aside className="w-64 bg-cs-surface border-r border-cs-border p-4 hidden lg:block">
|
|
119
|
+
<div className="space-y-4">
|
|
108
120
|
<h3 className="font-semibold text-cs-text-primary">Navigation</h3>
|
|
109
121
|
<nav className="space-y-2">
|
|
110
122
|
<Button variant="ghost" className="w-full justify-start">
|
|
@@ -142,7 +154,9 @@ export const TabletLayout= ({
|
|
|
142
154
|
</CardDescription>
|
|
143
155
|
</CardHeader>
|
|
144
156
|
<CardContent>
|
|
145
|
-
<div className="grid grid-cols-2 lg
|
|
157
|
+
<div className="grid grid-cols-2 lg:grid-cols-4 gap-6 text-center">
|
|
158
|
+
<div>
|
|
159
|
+
<p className="text-3xl font-bold text-cs-primary">
|
|
146
160
|
{performanceMetrics.renderTime.toFixed(1)}ms
|
|
147
161
|
</p>
|
|
148
162
|
<p className="text-sm text-cs-text-secondary">Render Time</p>
|
|
@@ -4,9 +4,17 @@ import { Badge } from '../badge'
|
|
|
4
4
|
import { Button } from '../button'
|
|
5
5
|
|
|
6
6
|
export interface TabletLayoutProps {
|
|
7
|
-
children
|
|
7
|
+
children: ReactNode
|
|
8
|
+
title?: string
|
|
9
|
+
description?: string
|
|
10
|
+
showHeader?: boolean
|
|
11
|
+
showSidebar?: boolean
|
|
12
|
+
enableTouchOptimization?: boolean
|
|
13
|
+
enablePerformanceMonitoring?: boolean
|
|
14
|
+
className?: string
|
|
15
|
+
}
|
|
8
16
|
|
|
9
|
-
export const TabletLayout= ({
|
|
17
|
+
export const TabletLayout: React.FC<TabletLayoutProps> = ({
|
|
10
18
|
children,
|
|
11
19
|
title = 'Tablet Layout',
|
|
12
20
|
description = 'Tablet-optimized layout with touch and performance features',
|
|
@@ -18,16 +26,18 @@ export const TabletLayout= ({
|
|
|
18
26
|
}) => {
|
|
19
27
|
const [orientation, setOrientation] = useState<'portrait' | 'landscape'>('portrait')
|
|
20
28
|
const [performanceMetrics, setPerformanceMetrics] = useState({
|
|
21
|
-
renderTime,
|
|
22
|
-
memoryUsage,
|
|
23
|
-
touchResponsiveness,
|
|
24
|
-
orientation
|
|
29
|
+
renderTime: 0,
|
|
30
|
+
memoryUsage: 0,
|
|
31
|
+
touchResponsiveness: 0,
|
|
32
|
+
orientation: 'portrait'
|
|
33
|
+
})
|
|
25
34
|
|
|
26
35
|
// Orientation detection
|
|
27
36
|
useEffect(() => {
|
|
28
37
|
const handleOrientationChange = () => {
|
|
29
|
-
const newOrientation = window.innerWidth > window.innerHeight ? 'landscape'
|
|
30
|
-
|
|
38
|
+
const newOrientation = window.innerWidth > window.innerHeight ? 'landscape' : 'portrait'
|
|
39
|
+
setOrientation(newOrientation)
|
|
40
|
+
setPerformanceMetrics(prev => ({ ...prev, orientation: newOrientation }))
|
|
31
41
|
}
|
|
32
42
|
|
|
33
43
|
handleOrientationChange()
|
|
@@ -55,8 +65,9 @@ export const TabletLayout= ({
|
|
|
55
65
|
setPerformanceMetrics(prev => ({
|
|
56
66
|
...prev,
|
|
57
67
|
renderTime,
|
|
58
|
-
memoryUsage) * 100,
|
|
59
|
-
touchResponsiveness=== 'landscape' ? 90
|
|
68
|
+
memoryUsage: Math.random() * 100,
|
|
69
|
+
touchResponsiveness: orientation === 'landscape' ? 90 : 95
|
|
70
|
+
}))
|
|
60
71
|
}, 100)
|
|
61
72
|
}
|
|
62
73
|
|
|
@@ -82,8 +93,8 @@ export const TabletLayout= ({
|
|
|
82
93
|
<Badge variant="outline">
|
|
83
94
|
Tablet
|
|
84
95
|
</Badge>
|
|
85
|
-
<Badge variant={orientation === 'landscape' ? 'default' }>
|
|
86
|
-
{orientation === 'landscape' ? 'Landscape' }
|
|
96
|
+
<Badge variant={orientation === 'landscape' ? 'default' : 'secondary'}>
|
|
97
|
+
{orientation === 'landscape' ? 'Landscape' : 'Portrait'}
|
|
87
98
|
</Badge>
|
|
88
99
|
{enableTouchOptimization && (
|
|
89
100
|
<Badge variant="default">
|
|
@@ -104,7 +115,8 @@ export const TabletLayout= ({
|
|
|
104
115
|
<div className="flex flex-1">
|
|
105
116
|
{/* Sidebar */}
|
|
106
117
|
{showSidebar && (
|
|
107
|
-
<aside className="w-64 bg-cs-surface border-r border-cs-border p-4 hidden lg
|
|
118
|
+
<aside className="w-64 bg-cs-surface border-r border-cs-border p-4 hidden lg:block">
|
|
119
|
+
<div className="space-y-4">
|
|
108
120
|
<h3 className="font-semibold text-cs-text-primary">Navigation</h3>
|
|
109
121
|
<nav className="space-y-2">
|
|
110
122
|
<Button variant="ghost" className="w-full justify-start">
|
|
@@ -142,7 +154,9 @@ export const TabletLayout= ({
|
|
|
142
154
|
</CardDescription>
|
|
143
155
|
</CardHeader>
|
|
144
156
|
<CardContent>
|
|
145
|
-
<div className="grid grid-cols-2 lg
|
|
157
|
+
<div className="grid grid-cols-2 lg:grid-cols-4 gap-6 text-center">
|
|
158
|
+
<div>
|
|
159
|
+
<p className="text-3xl font-bold text-cs-primary">
|
|
146
160
|
{performanceMetrics.renderTime.toFixed(1)}ms
|
|
147
161
|
</p>
|
|
148
162
|
<p className="text-sm text-cs-text-secondary">Render Time</p>
|