@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.9 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/components/ui/accessibility-demo.esm.js +30 -24
- package/dist/components/ui/accessibility-demo.js +30 -24
- package/dist/components/ui/advanced-component-architecture-demo.esm.js +235 -179
- package/dist/components/ui/advanced-component-architecture-demo.js +235 -179
- package/dist/components/ui/advanced-transition-system-demo.esm.js +110 -64
- package/dist/components/ui/advanced-transition-system-demo.js +110 -64
- package/dist/components/ui/advanced-transition-system.esm.js +166 -122
- package/dist/components/ui/advanced-transition-system.js +166 -122
- package/dist/components/ui/animation/animated-container.esm.js +52 -29
- package/dist/components/ui/animation/animated-container.js +52 -29
- package/dist/components/ui/animation/staggered-container.esm.js +18 -9
- package/dist/components/ui/animation/staggered-container.js +18 -9
- package/dist/components/ui/animation-demo.esm.js +67 -35
- package/dist/components/ui/animation-demo.js +67 -35
- package/dist/components/ui/badge.esm.js +9 -6
- package/dist/components/ui/badge.js +9 -6
- package/dist/components/ui/battery-conscious-animation-demo.esm.js +122 -87
- package/dist/components/ui/battery-conscious-animation-demo.js +122 -87
- package/dist/components/ui/border-radius-shadow-demo.esm.js +23 -12
- package/dist/components/ui/border-radius-shadow-demo.js +23 -12
- package/dist/components/ui/button.esm.js +8 -2
- package/dist/components/ui/button.js +8 -2
- package/dist/components/ui/card.esm.js +33 -8
- package/dist/components/ui/card.js +33 -8
- package/dist/components/ui/checkbox.esm.js +3 -3
- package/dist/components/ui/checkbox.js +3 -3
- package/dist/components/ui/color-preview.esm.js +68 -45
- package/dist/components/ui/color-preview.js +68 -45
- package/dist/components/ui/data-display/chart.esm.js +112 -84
- package/dist/components/ui/data-display/chart.js +112 -84
- package/dist/components/ui/data-display/data-grid-simple.esm.js +1 -1
- package/dist/components/ui/data-display/data-grid-simple.js +1 -1
- package/dist/components/ui/data-display/data-grid.esm.js +80 -67
- package/dist/components/ui/data-display/data-grid.js +80 -67
- package/dist/components/ui/data-display/list.esm.js +53 -45
- package/dist/components/ui/data-display/list.js +53 -45
- package/dist/components/ui/data-display/table.esm.js +62 -54
- package/dist/components/ui/data-display/table.js +62 -54
- package/dist/components/ui/data-display/timeline.esm.js +39 -34
- package/dist/components/ui/data-display/timeline.js +39 -34
- package/dist/components/ui/data-display/tree.esm.js +116 -84
- package/dist/components/ui/data-display/tree.js +116 -84
- package/dist/components/ui/data-display/types.esm.js +389 -364
- package/dist/components/ui/data-display/types.js +389 -364
- package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience-demo.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience.esm.js +124 -73
- package/dist/components/ui/enterprise-mobile-experience.js +124 -73
- package/dist/components/ui/feedback/alert.esm.js +22 -15
- package/dist/components/ui/feedback/alert.js +22 -15
- package/dist/components/ui/feedback/progress.esm.js +47 -24
- package/dist/components/ui/feedback/progress.js +47 -24
- package/dist/components/ui/feedback/skeleton.esm.js +39 -29
- package/dist/components/ui/feedback/skeleton.js +39 -29
- package/dist/components/ui/feedback/toast.esm.js +62 -38
- package/dist/components/ui/feedback/toast.js +62 -38
- package/dist/components/ui/feedback/types.esm.js +83 -83
- package/dist/components/ui/feedback/types.js +83 -83
- package/dist/components/ui/font-preview.esm.js +41 -39
- package/dist/components/ui/font-preview.js +41 -39
- package/dist/components/ui/form-demo.esm.js +150 -113
- package/dist/components/ui/form-demo.js +150 -113
- package/dist/components/ui/hardware-acceleration-demo.esm.js +137 -87
- package/dist/components/ui/hardware-acceleration-demo.js +137 -87
- package/dist/components/ui/input.esm.js +4 -1
- package/dist/components/ui/input.js +4 -1
- package/dist/components/ui/layout-demo.esm.js +81 -56
- package/dist/components/ui/layout-demo.js +81 -56
- package/dist/components/ui/layouts/adaptive-layout.esm.js +27 -8
- package/dist/components/ui/layouts/adaptive-layout.js +27 -8
- package/dist/components/ui/layouts/desktop-layout.esm.js +39 -19
- package/dist/components/ui/layouts/desktop-layout.js +39 -19
- package/dist/components/ui/layouts/mobile-layout.esm.js +19 -9
- package/dist/components/ui/layouts/mobile-layout.js +19 -9
- package/dist/components/ui/layouts/tablet-layout.esm.js +28 -14
- package/dist/components/ui/layouts/tablet-layout.js +28 -14
- package/dist/components/ui/mobile-form-validation.esm.js +120 -87
- package/dist/components/ui/mobile-form-validation.js +120 -87
- package/dist/components/ui/mobile-input-demo.esm.js +19 -13
- package/dist/components/ui/mobile-input-demo.js +19 -13
- package/dist/components/ui/mobile-input.esm.js +185 -120
- package/dist/components/ui/mobile-input.js +185 -120
- package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +128 -111
- package/dist/components/ui/mobile-skeleton-loading-demo.js +128 -111
- package/dist/components/ui/navigation/breadcrumb.esm.js +17 -14
- package/dist/components/ui/navigation/breadcrumb.js +17 -14
- package/dist/components/ui/navigation/index.esm.js +23 -1
- package/dist/components/ui/navigation/index.js +23 -1
- package/dist/components/ui/navigation/menu.esm.js +49 -35
- package/dist/components/ui/navigation/menu.js +49 -35
- package/dist/components/ui/navigation/navigation-demo.esm.js +81 -74
- package/dist/components/ui/navigation/navigation-demo.js +81 -74
- package/dist/components/ui/navigation/pagination.esm.js +62 -50
- package/dist/components/ui/navigation/pagination.js +62 -50
- package/dist/components/ui/navigation/sidebar.esm.js +56 -42
- package/dist/components/ui/navigation/sidebar.js +56 -42
- package/dist/components/ui/navigation/stepper.esm.js +34 -23
- package/dist/components/ui/navigation/stepper.js +34 -23
- package/dist/components/ui/navigation/tabs.esm.js +32 -21
- package/dist/components/ui/navigation/tabs.js +32 -21
- package/dist/components/ui/navigation/types.esm.js +196 -195
- package/dist/components/ui/navigation/types.js +196 -195
- package/dist/components/ui/overlay/backdrop.esm.js +17 -16
- package/dist/components/ui/overlay/backdrop.js +17 -16
- package/dist/components/ui/overlay/focus-manager.esm.js +21 -19
- package/dist/components/ui/overlay/focus-manager.js +21 -19
- package/dist/components/ui/overlay/index.esm.js +22 -2
- package/dist/components/ui/overlay/index.js +22 -2
- package/dist/components/ui/overlay/modal.esm.js +38 -34
- package/dist/components/ui/overlay/modal.js +38 -34
- package/dist/components/ui/overlay/overlay-manager.esm.js +25 -20
- package/dist/components/ui/overlay/overlay-manager.js +25 -20
- package/dist/components/ui/overlay/popover.esm.js +74 -58
- package/dist/components/ui/overlay/popover.js +74 -58
- package/dist/components/ui/overlay/portal.esm.js +7 -7
- package/dist/components/ui/overlay/portal.js +7 -7
- package/dist/components/ui/overlay/tooltip.esm.js +54 -39
- package/dist/components/ui/overlay/tooltip.js +54 -39
- package/dist/components/ui/overlay/types.esm.js +132 -131
- package/dist/components/ui/overlay/types.js +132 -131
- package/dist/components/ui/performance-demo.esm.js +135 -88
- package/dist/components/ui/performance-demo.js +135 -88
- package/dist/components/ui/semantic-input-system-demo.esm.js +117 -80
- package/dist/components/ui/semantic-input-system-demo.js +117 -80
- package/dist/components/ui/theme-customizer.esm.js +84 -52
- package/dist/components/ui/theme-customizer.js +84 -52
- package/dist/components/ui/theme-preview.esm.js +95 -43
- package/dist/components/ui/theme-preview.js +95 -43
- package/dist/components/ui/theme-switcher.esm.js +70 -44
- package/dist/components/ui/theme-switcher.js +70 -44
- package/dist/components/ui/theme-toggle.esm.js +3 -3
- package/dist/components/ui/theme-toggle.js +3 -3
- package/dist/components/ui/token-demo.esm.js +33 -21
- package/dist/components/ui/token-demo.js +33 -21
- package/dist/components/ui/touch-demo.esm.js +102 -73
- package/dist/components/ui/touch-demo.js +102 -73
- package/dist/components/ui/touch-friendly-interface-demo.esm.js +102 -64
- package/dist/components/ui/touch-friendly-interface-demo.js +102 -64
- package/dist/components/ui/touch-friendly-interface.esm.js +85 -61
- package/dist/components/ui/touch-friendly-interface.js +85 -61
- package/dist/hooks/use-accessibility-support.esm.js +115 -85
- package/dist/hooks/use-accessibility-support.js +115 -85
- package/dist/hooks/use-adaptive-layout.esm.js +56 -33
- package/dist/hooks/use-adaptive-layout.js +56 -33
- package/dist/hooks/use-advanced-patterns.esm.js +57 -42
- package/dist/hooks/use-advanced-patterns.js +57 -42
- package/dist/hooks/use-advanced-transition-system.esm.js +112 -71
- package/dist/hooks/use-advanced-transition-system.js +112 -71
- package/dist/hooks/use-animation-profile.esm.js +63 -34
- package/dist/hooks/use-animation-profile.js +63 -34
- package/dist/hooks/use-battery-animations.esm.js +80 -55
- package/dist/hooks/use-battery-animations.js +80 -55
- package/dist/hooks/use-battery-conscious-loading.esm.js +166 -123
- package/dist/hooks/use-battery-conscious-loading.js +166 -123
- package/dist/hooks/use-battery-optimization.esm.js +78 -55
- package/dist/hooks/use-battery-optimization.js +78 -55
- package/dist/hooks/use-battery-status.esm.js +73 -51
- package/dist/hooks/use-battery-status.js +73 -51
- package/dist/hooks/use-component-performance.esm.js +62 -47
- package/dist/hooks/use-component-performance.js +62 -47
- package/dist/hooks/use-device-loading-states.esm.js +152 -109
- package/dist/hooks/use-device-loading-states.js +152 -109
- package/dist/hooks/use-device.esm.js +25 -14
- package/dist/hooks/use-device.js +25 -14
- package/dist/hooks/use-enterprise-mobile-experience.esm.js +137 -88
- package/dist/hooks/use-enterprise-mobile-experience.js +137 -88
- package/dist/hooks/use-form-feedback.esm.js +124 -81
- package/dist/hooks/use-form-feedback.js +124 -81
- package/dist/hooks/use-form-performance.esm.js +127 -92
- package/dist/hooks/use-form-performance.js +127 -92
- package/dist/hooks/use-frame-rate.esm.js +56 -37
- package/dist/hooks/use-frame-rate.js +56 -37
- package/dist/hooks/use-gestures.esm.js +96 -72
- package/dist/hooks/use-gestures.js +96 -72
- package/dist/hooks/use-hardware-acceleration.esm.js +65 -37
- package/dist/hooks/use-hardware-acceleration.js +65 -37
- package/dist/hooks/use-input-accessibility.esm.js +157 -119
- package/dist/hooks/use-input-accessibility.js +157 -119
- package/dist/hooks/use-input-performance.esm.js +139 -104
- package/dist/hooks/use-input-performance.js +139 -104
- package/dist/hooks/use-layout-performance.esm.js +50 -29
- package/dist/hooks/use-layout-performance.js +50 -29
- package/dist/hooks/use-loading-accessibility.esm.js +209 -169
- package/dist/hooks/use-loading-accessibility.js +209 -169
- package/dist/hooks/use-loading-performance.esm.js +117 -93
- package/dist/hooks/use-loading-performance.js +117 -93
- package/dist/hooks/use-memory-usage.esm.js +57 -38
- package/dist/hooks/use-memory-usage.js +57 -38
- package/dist/hooks/use-mobile-form-layout.esm.js +111 -74
- package/dist/hooks/use-mobile-form-layout.js +111 -74
- package/dist/hooks/use-mobile-form-validation.esm.js +211 -144
- package/dist/hooks/use-mobile-form-validation.js +211 -144
- package/dist/hooks/use-mobile-keyboard-optimization.esm.js +154 -113
- package/dist/hooks/use-mobile-keyboard-optimization.js +154 -113
- package/dist/hooks/use-mobile-layout.esm.js +73 -51
- package/dist/hooks/use-mobile-layout.js +73 -51
- package/dist/hooks/use-mobile-optimization.esm.js +72 -44
- package/dist/hooks/use-mobile-optimization.js +72 -44
- package/dist/hooks/use-mobile-skeleton.esm.js +97 -64
- package/dist/hooks/use-mobile-skeleton.js +97 -64
- package/dist/hooks/use-mobile-touch.esm.js +128 -93
- package/dist/hooks/use-mobile-touch.js +128 -93
- package/dist/hooks/use-performance-throttling.esm.js +72 -48
- package/dist/hooks/use-performance-throttling.js +72 -48
- package/dist/hooks/use-performance.esm.js +90 -52
- package/dist/hooks/use-performance.js +90 -52
- package/dist/hooks/use-reusable-architecture.esm.js +94 -65
- package/dist/hooks/use-reusable-architecture.js +94 -65
- package/dist/hooks/use-semantic-input-types.esm.js +166 -124
- package/dist/hooks/use-semantic-input-types.js +166 -124
- package/dist/hooks/use-semantic-input.esm.js +178 -126
- package/dist/hooks/use-semantic-input.js +178 -126
- package/dist/hooks/use-tablet-layout.esm.js +67 -38
- package/dist/hooks/use-tablet-layout.js +67 -38
- package/dist/hooks/use-touch-friendly-input.esm.js +193 -149
- package/dist/hooks/use-touch-friendly-input.js +193 -149
- package/dist/hooks/use-touch-friendly-interface.esm.js +99 -67
- package/dist/hooks/use-touch-friendly-interface.js +99 -67
- package/dist/hooks/use-touch-optimization.esm.js +99 -72
- package/dist/hooks/use-touch-optimization.js +99 -72
- package/dist/index.esm.js +289 -280
- package/dist/index.js +289 -280
- package/dist/lib/utils.esm.js +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/plugins/theme-css-generator.esm.js +104 -55
- package/dist/plugins/theme-css-generator.js +104 -55
- package/dist/provider.esm.js +4 -4
- package/dist/provider.js +4 -4
- package/dist/styles.css +1 -1
- package/dist/theme.esm.js +633 -468
- package/dist/theme.js +633 -468
- package/dist/themes/ThemeContext.esm.js +15 -15
- package/dist/themes/ThemeContext.js +15 -15
- package/dist/themes/ThemeProvider.esm.js +25 -22
- package/dist/themes/ThemeProvider.js +25 -22
- package/dist/themes/accessibility.esm.js +147 -108
- package/dist/themes/accessibility.js +147 -108
- package/dist/themes/aria-patterns.esm.js +198 -162
- package/dist/themes/aria-patterns.js +198 -162
- package/dist/themes/base-themes.esm.js +14 -11
- package/dist/themes/base-themes.js +14 -11
- package/dist/themes/colorManager.esm.js +101 -83
- package/dist/themes/colorManager.js +101 -83
- package/dist/themes/examples/dark-theme.esm.js +133 -103
- package/dist/themes/examples/dark-theme.js +133 -103
- package/dist/themes/examples/minimal-theme.esm.js +83 -61
- package/dist/themes/examples/minimal-theme.js +83 -61
- package/dist/themes/focus-management.esm.js +202 -143
- package/dist/themes/focus-management.js +202 -143
- package/dist/themes/fontLoader.esm.js +28 -19
- package/dist/themes/fontLoader.js +28 -19
- package/dist/themes/high-contrast.esm.js +152 -104
- package/dist/themes/high-contrast.js +152 -104
- package/dist/themes/inheritance.esm.js +35 -27
- package/dist/themes/inheritance.js +35 -27
- package/dist/themes/keyboard-navigation.esm.js +152 -123
- package/dist/themes/keyboard-navigation.js +152 -123
- package/dist/themes/motion-reduction.esm.js +193 -133
- package/dist/themes/motion-reduction.js +193 -133
- package/dist/themes/navigation.esm.js +146 -146
- package/dist/themes/navigation.js +146 -146
- package/dist/themes/screen-reader.esm.js +159 -94
- package/dist/themes/screen-reader.js +159 -94
- package/dist/themes/systemThemeDetector.esm.js +42 -34
- package/dist/themes/systemThemeDetector.js +42 -34
- package/dist/themes/themeCSSUpdater.esm.js +21 -9
- package/dist/themes/themeCSSUpdater.js +21 -9
- package/dist/themes/themePersistence.esm.js +68 -47
- package/dist/themes/themePersistence.js +68 -47
- package/dist/themes/themes/stan-design.esm.js +633 -468
- package/dist/themes/themes/stan-design.js +633 -468
- package/dist/themes/types.esm.js +301 -287
- package/dist/themes/types.js +301 -287
- package/dist/themes/useSystemTheme.esm.js +4 -4
- package/dist/themes/useSystemTheme.js +4 -4
- package/dist/themes/useTheme.esm.js +4 -4
- package/dist/themes/useTheme.js +4 -4
- package/dist/themes/validation.esm.js +128 -77
- package/dist/themes/validation.js +128 -77
- package/dist/tokens/index.esm.js +15 -4
- package/dist/tokens/index.js +15 -4
- package/dist/tokens/tokenExporter.esm.js +87 -61
- package/dist/tokens/tokenExporter.js +87 -61
- package/dist/tokens/tokenGenerator.esm.js +86 -77
- package/dist/tokens/tokenGenerator.js +86 -77
- package/dist/tokens/tokenManager.esm.js +64 -51
- package/dist/tokens/tokenManager.js +64 -51
- package/dist/tokens/tokenValidator.esm.js +193 -147
- package/dist/tokens/tokenValidator.js +193 -147
- package/dist/tokens/types.esm.js +49 -35
- package/dist/tokens/types.js +49 -35
- package/dist/utils/bundle-analyzer.esm.js +83 -65
- package/dist/utils/bundle-analyzer.js +83 -65
- package/dist/utils/bundle-splitting.esm.js +142 -117
- package/dist/utils/bundle-splitting.js +142 -117
- package/dist/utils/lazy-loading.esm.js +132 -106
- package/dist/utils/lazy-loading.js +132 -106
- package/dist/utils/performance-monitor.esm.js +170 -129
- package/dist/utils/performance-monitor.js +170 -129
- package/dist/utils/tree-shaking.esm.js +69 -61
- package/dist/utils/tree-shaking.js +69 -61
- package/package.json +1 -1
- package/src/index.ts +146 -146
|
@@ -5,13 +5,13 @@ import { useTheme } from '../../themes';
|
|
|
5
5
|
import { FontConfig } from '../../themes/types';
|
|
6
6
|
|
|
7
7
|
export interface FontPreviewProps {
|
|
8
|
-
fontConfig
|
|
9
|
-
fontType
|
|
10
|
-
showAllVariations
|
|
11
|
-
className
|
|
8
|
+
fontConfig?: FontConfig;
|
|
9
|
+
fontType?: 'primary' | 'secondary' | 'display' | 'body' | 'mono';
|
|
10
|
+
showAllVariations?: boolean;
|
|
11
|
+
className?: string;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
export const FontPreview= ({
|
|
14
|
+
export const FontPreview: React.FC<FontPreviewProps> = ({
|
|
15
15
|
fontConfig,
|
|
16
16
|
fontType = 'primary',
|
|
17
17
|
showAllVariations = false,
|
|
@@ -37,7 +37,7 @@ export const FontPreview= ({
|
|
|
37
37
|
// Build full font family string with fallbacks
|
|
38
38
|
const fullFontFamily = fallbacks
|
|
39
39
|
? `${family}, ${fallbacks.join(', ')}`
|
|
40
|
-
;
|
|
40
|
+
: family;
|
|
41
41
|
|
|
42
42
|
// Sample text for preview
|
|
43
43
|
const sampleText = "The quick brown fox jumps over the lazy dog";
|
|
@@ -64,7 +64,7 @@ export const FontPreview= ({
|
|
|
64
64
|
<span className="font-mono text-xs">{family}</span>
|
|
65
65
|
{fallbacks && fallbacks.length > 0 && (
|
|
66
66
|
<div className="mt-1 text-xs text-muted-foreground">
|
|
67
|
-
Fallbacks, 3).join(', ')}
|
|
67
|
+
Fallbacks: {fallbacks.slice(0, 3).join(', ')}
|
|
68
68
|
{fallbacks.length > 3 && ` (+${fallbacks.length - 3} more)`}
|
|
69
69
|
</div>
|
|
70
70
|
)}
|
|
@@ -83,9 +83,10 @@ export const FontPreview= ({
|
|
|
83
83
|
</Badge>
|
|
84
84
|
<p
|
|
85
85
|
style={{
|
|
86
|
-
fontFamily,
|
|
87
|
-
fontWeight,
|
|
88
|
-
fontSize
|
|
86
|
+
fontFamily: fullFontFamily,
|
|
87
|
+
fontWeight: weight,
|
|
88
|
+
fontSize: sizes?.md || '1rem'
|
|
89
|
+
}}
|
|
89
90
|
className="flex-1"
|
|
90
91
|
>
|
|
91
92
|
{sampleText}
|
|
@@ -109,9 +110,9 @@ export const FontPreview= ({
|
|
|
109
110
|
<span className="text-xs text-muted-foreground w-16">{value}</span>
|
|
110
111
|
<p
|
|
111
112
|
style={{
|
|
112
|
-
fontFamily,
|
|
113
|
-
fontSize,
|
|
114
|
-
fontWeight] || 400
|
|
113
|
+
fontFamily: fullFontFamily,
|
|
114
|
+
fontSize: value,
|
|
115
|
+
fontWeight: weights?.[0] || 400
|
|
115
116
|
}}
|
|
116
117
|
>
|
|
117
118
|
Sample text
|
|
@@ -135,10 +136,10 @@ export const FontPreview= ({
|
|
|
135
136
|
</div>
|
|
136
137
|
<p
|
|
137
138
|
style={{
|
|
138
|
-
fontFamily,
|
|
139
|
-
fontSize,
|
|
140
|
-
lineHeight,
|
|
141
|
-
fontWeight] || 400
|
|
139
|
+
fontFamily: fullFontFamily,
|
|
140
|
+
fontSize: sizes?.md || '1rem',
|
|
141
|
+
lineHeight: value,
|
|
142
|
+
fontWeight: weights?.[0] || 400
|
|
142
143
|
}}
|
|
143
144
|
className="text-sm border-l-2 border-muted pl-4"
|
|
144
145
|
>
|
|
@@ -163,10 +164,10 @@ export const FontPreview= ({
|
|
|
163
164
|
<span className="text-xs text-muted-foreground w-16">{value}</span>
|
|
164
165
|
<p
|
|
165
166
|
style={{
|
|
166
|
-
fontFamily,
|
|
167
|
-
fontSize,
|
|
168
|
-
letterSpacing,
|
|
169
|
-
fontWeight] || 400
|
|
167
|
+
fontFamily: fullFontFamily,
|
|
168
|
+
fontSize: sizes?.md || '1rem',
|
|
169
|
+
letterSpacing: value,
|
|
170
|
+
fontWeight: weights?.[0] || 400
|
|
170
171
|
}}
|
|
171
172
|
className="flex-1"
|
|
172
173
|
>
|
|
@@ -187,9 +188,9 @@ export const FontPreview= ({
|
|
|
187
188
|
<span className="text-xs text-muted-foreground block mb-1">Alphabet</span>
|
|
188
189
|
<p
|
|
189
190
|
style={{
|
|
190
|
-
fontFamily,
|
|
191
|
-
fontSize,
|
|
192
|
-
fontWeight] || 400
|
|
191
|
+
fontFamily: fullFontFamily,
|
|
192
|
+
fontSize: sizes?.md || '1rem',
|
|
193
|
+
fontWeight: weights?.[0] || 400
|
|
193
194
|
}}
|
|
194
195
|
className="text-sm"
|
|
195
196
|
>
|
|
@@ -201,10 +202,11 @@ export const FontPreview= ({
|
|
|
201
202
|
<span className="text-xs text-muted-foreground block mb-1">Numbers</span>
|
|
202
203
|
<p
|
|
203
204
|
style={{
|
|
204
|
-
fontFamily,
|
|
205
|
-
fontSize,
|
|
206
|
-
fontWeight] || 400,
|
|
207
|
-
letterSpacing
|
|
205
|
+
fontFamily: fullFontFamily,
|
|
206
|
+
fontSize: sizes?.lg || '1.125rem',
|
|
207
|
+
fontWeight: weights?.[0] || 400,
|
|
208
|
+
letterSpacing: letterSpacing?.wide || '0.025em'
|
|
209
|
+
}}
|
|
208
210
|
className="text-sm"
|
|
209
211
|
>
|
|
210
212
|
{sampleNumbers}
|
|
@@ -215,9 +217,9 @@ export const FontPreview= ({
|
|
|
215
217
|
<span className="text-xs text-muted-foreground block mb-1">Special Characters</span>
|
|
216
218
|
<p
|
|
217
219
|
style={{
|
|
218
|
-
fontFamily,
|
|
219
|
-
fontSize,
|
|
220
|
-
fontWeight] || 400
|
|
220
|
+
fontFamily: fullFontFamily,
|
|
221
|
+
fontSize: sizes?.sm || '0.875rem',
|
|
222
|
+
fontWeight: weights?.[0] || 400
|
|
221
223
|
}}
|
|
222
224
|
className="text-sm"
|
|
223
225
|
>
|
|
@@ -232,15 +234,15 @@ export const FontPreview= ({
|
|
|
232
234
|
<div className="pt-4 border-t">
|
|
233
235
|
<h4 className="text-sm font-medium mb-2">Font Loading</h4>
|
|
234
236
|
<div className="space-y-1 text-xs text-muted-foreground">
|
|
235
|
-
<div>Source="capitalize">{source.type}</span></div>
|
|
236
|
-
{source.url && <div>URL}</div>}
|
|
237
|
+
<div>Source: <span className="capitalize">{source.type}</span></div>
|
|
238
|
+
{source.url && <div>URL: {source.url}</div>}
|
|
237
239
|
{source.files && (
|
|
238
240
|
<div>
|
|
239
|
-
Files).join(', ')}
|
|
241
|
+
Files: {Object.keys(source.files).join(', ')}
|
|
240
242
|
</div>
|
|
241
243
|
)}
|
|
242
244
|
{config.display && (
|
|
243
|
-
<div>Display}</div>
|
|
245
|
+
<div>Display: {config.display}</div>
|
|
244
246
|
)}
|
|
245
247
|
</div>
|
|
246
248
|
</div>
|
|
@@ -252,11 +254,11 @@ export const FontPreview= ({
|
|
|
252
254
|
|
|
253
255
|
// Multi-font preview component
|
|
254
256
|
export interface FontShowcaseProps {
|
|
255
|
-
showAllVariations
|
|
256
|
-
className
|
|
257
|
+
showAllVariations?: boolean;
|
|
258
|
+
className?: string;
|
|
257
259
|
}
|
|
258
260
|
|
|
259
|
-
export const FontShowcase= ({
|
|
261
|
+
export const FontShowcase: React.FC<FontShowcaseProps> = ({
|
|
260
262
|
showAllVariations = false,
|
|
261
263
|
className = ''
|
|
262
264
|
}) => {
|
|
@@ -270,7 +272,7 @@ export const FontShowcase= ({
|
|
|
270
272
|
);
|
|
271
273
|
}
|
|
272
274
|
|
|
273
|
-
const fontTypes= ['primary', 'secondary', 'display', 'body', 'mono'];
|
|
275
|
+
const fontTypes: Array<keyof typeof currentThemeConfig.fonts> = ['primary', 'secondary', 'display', 'body', 'mono'];
|
|
274
276
|
|
|
275
277
|
return (
|
|
276
278
|
<div className={`space-y-6 ${className}`}>
|
|
@@ -7,9 +7,9 @@ import MobileFormValidation, { MobileFormValidationRef } from './mobile-form-val
|
|
|
7
7
|
|
|
8
8
|
import { InputType } from '../../hooks/use-semantic-input'
|
|
9
9
|
|
|
10
|
-
export const FormDemo= () => {
|
|
10
|
+
export const FormDemo: React.FC = () => {
|
|
11
11
|
const [activeTab, setActiveTab] = useState<'basic' | 'advanced' | 'performance' | 'semantic'>('basic')
|
|
12
|
-
const [formResults, setFormResults] = useState<Array<{ type; data; timestamp}>>([])
|
|
12
|
+
const [formResults, setFormResults] = useState<Array<{ type: string; data: any; timestamp: Date }>>([])
|
|
13
13
|
const [enableEnhancedFeatures, setEnableEnhancedFeatures] = useState(true)
|
|
14
14
|
|
|
15
15
|
const basicFormRef = useRef<MobileFormValidationRef>(null)
|
|
@@ -18,21 +18,23 @@ export const FormDemo= () => {
|
|
|
18
18
|
// Basic form fields
|
|
19
19
|
const basicFields = [
|
|
20
20
|
{
|
|
21
|
-
name,
|
|
22
|
-
label,
|
|
23
|
-
type} as InputType,
|
|
24
|
-
placeholder,
|
|
25
|
-
rules
|
|
26
|
-
{ type
|
|
21
|
+
name: 'name',
|
|
22
|
+
label: 'Full Name',
|
|
23
|
+
type: { type: 'text' } as InputType,
|
|
24
|
+
placeholder: 'Enter your full name',
|
|
25
|
+
rules: [
|
|
26
|
+
{ type: 'required' as const, message: 'Name is required' },
|
|
27
|
+
{ type: 'minLength' as const, value: 2, message: 'Name must be at least 2 characters' }
|
|
27
28
|
]
|
|
28
29
|
},
|
|
29
30
|
{
|
|
30
|
-
name,
|
|
31
|
-
label,
|
|
32
|
-
type} as InputType,
|
|
33
|
-
placeholder,
|
|
34
|
-
rules
|
|
35
|
-
{ type, message}
|
|
31
|
+
name: 'email',
|
|
32
|
+
label: 'Email Address',
|
|
33
|
+
type: { type: 'email' } as InputType,
|
|
34
|
+
placeholder: 'Enter your email',
|
|
35
|
+
rules: [
|
|
36
|
+
{ type: 'required' as const, message: 'Email is required' },
|
|
37
|
+
{ type: 'email' as const, message: 'Please enter a valid email address' }
|
|
36
38
|
]
|
|
37
39
|
}
|
|
38
40
|
]
|
|
@@ -40,91 +42,99 @@ export const FormDemo= () => {
|
|
|
40
42
|
// Advanced form fields
|
|
41
43
|
const advancedFields = [
|
|
42
44
|
{
|
|
43
|
-
name,
|
|
44
|
-
label,
|
|
45
|
-
type} as InputType,
|
|
46
|
-
placeholder,
|
|
47
|
-
rules
|
|
48
|
-
{ type
|
|
49
|
-
{ type, value, message}
|
|
45
|
+
name: 'fullName',
|
|
46
|
+
label: 'Full Name',
|
|
47
|
+
type: { type: 'text' } as InputType,
|
|
48
|
+
placeholder: 'Enter your full name',
|
|
49
|
+
rules: [
|
|
50
|
+
{ type: 'required' as const, message: 'Full name is required' },
|
|
51
|
+
{ type: 'minLength' as const, value: 3, message: 'Name must be at least 3 characters' },
|
|
52
|
+
{ type: 'maxLength' as const, value: 50, message: 'Name must be less than 50 characters' }
|
|
50
53
|
]
|
|
51
54
|
},
|
|
52
55
|
{
|
|
53
|
-
name,
|
|
54
|
-
label,
|
|
55
|
-
type} as InputType,
|
|
56
|
-
placeholder,
|
|
57
|
-
rules
|
|
58
|
-
{ type, message}
|
|
56
|
+
name: 'emailAddress',
|
|
57
|
+
label: 'Email Address',
|
|
58
|
+
type: { type: 'email' } as InputType,
|
|
59
|
+
placeholder: 'Enter your email address',
|
|
60
|
+
rules: [
|
|
61
|
+
{ type: 'required' as const, message: 'Email is required' },
|
|
62
|
+
{ type: 'email' as const, message: 'Please enter a valid email address' }
|
|
59
63
|
]
|
|
60
64
|
},
|
|
61
65
|
{
|
|
62
|
-
name,
|
|
63
|
-
label,
|
|
64
|
-
type} as InputType,
|
|
65
|
-
placeholder,
|
|
66
|
-
rules
|
|
67
|
-
{ type
|
|
66
|
+
name: 'phoneNumber',
|
|
67
|
+
label: 'Phone Number',
|
|
68
|
+
type: { type: 'tel' } as InputType,
|
|
69
|
+
placeholder: 'Enter your phone number',
|
|
70
|
+
rules: [
|
|
71
|
+
{ type: 'required' as const, message: 'Phone number is required' },
|
|
72
|
+
{ type: 'pattern' as const, value: /^[\+]?[0-9\s\-\(\)]{7,}$/, message: 'Please enter a valid phone number' }
|
|
68
73
|
]
|
|
69
74
|
},
|
|
70
75
|
{
|
|
71
|
-
name,
|
|
72
|
-
label,
|
|
73
|
-
type} as InputType,
|
|
74
|
-
placeholder,
|
|
75
|
-
rules
|
|
76
|
+
name: 'website',
|
|
77
|
+
label: 'Website',
|
|
78
|
+
type: { type: 'url' } as InputType,
|
|
79
|
+
placeholder: 'Enter your website URL',
|
|
80
|
+
rules: [
|
|
81
|
+
{ type: 'pattern' as const, value: /^https?:\/\/.+/, message: 'Please enter a valid URL starting with http:// or https://' }
|
|
76
82
|
]
|
|
77
83
|
},
|
|
78
84
|
{
|
|
79
|
-
name,
|
|
80
|
-
label,
|
|
81
|
-
type} as InputType,
|
|
82
|
-
placeholder,
|
|
83
|
-
rules
|
|
84
|
-
{ type
|
|
85
|
-
{ type, value, message}
|
|
85
|
+
name: 'age',
|
|
86
|
+
label: 'Age',
|
|
87
|
+
type: { type: 'number' } as InputType,
|
|
88
|
+
placeholder: 'Enter your age',
|
|
89
|
+
rules: [
|
|
90
|
+
{ type: 'required' as const, message: 'Age is required' },
|
|
91
|
+
{ type: 'minLength' as const, value: 1, message: 'Age must be at least 1' },
|
|
92
|
+
{ type: 'maxLength' as const, value: 3, message: 'Age must be less than 1000' }
|
|
86
93
|
]
|
|
87
94
|
},
|
|
88
95
|
{
|
|
89
|
-
name,
|
|
90
|
-
label,
|
|
91
|
-
type} as InputType,
|
|
92
|
-
placeholder,
|
|
93
|
-
rules
|
|
94
|
-
{ type
|
|
95
|
-
{ type, value
|
|
96
|
+
name: 'password',
|
|
97
|
+
label: 'Password',
|
|
98
|
+
type: { type: 'password' } as InputType,
|
|
99
|
+
placeholder: 'Enter your password',
|
|
100
|
+
rules: [
|
|
101
|
+
{ type: 'required' as const, message: 'Password is required' },
|
|
102
|
+
{ type: 'minLength' as const, value: 8, message: 'Password must be at least 8 characters' },
|
|
103
|
+
{ type: 'pattern' as const, value: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/, message: 'Password must contain lowercase, uppercase, and number' }
|
|
96
104
|
]
|
|
97
105
|
},
|
|
98
106
|
{
|
|
99
|
-
name,
|
|
100
|
-
label,
|
|
101
|
-
type} as InputType,
|
|
102
|
-
placeholder,
|
|
103
|
-
rules
|
|
104
|
-
{ type, message
|
|
107
|
+
name: 'confirmPassword',
|
|
108
|
+
label: 'Confirm Password',
|
|
109
|
+
type: { type: 'password' } as InputType,
|
|
110
|
+
placeholder: 'Confirm your password',
|
|
111
|
+
rules: [
|
|
112
|
+
{ type: 'required' as const, message: 'Please confirm your password' },
|
|
113
|
+
{ type: 'custom' as const, message: 'Passwords do not match', validator: (value: any): boolean => {
|
|
105
114
|
const passwordField = advancedFields.find(f => f.name === 'password')
|
|
106
|
-
const passwordValue = passwordField ? (document.getElementById('password') as HTMLInputElement)?.value
|
|
115
|
+
const passwordValue = passwordField ? (document.getElementById('password') as HTMLInputElement)?.value : ''
|
|
116
|
+
return value === passwordValue
|
|
107
117
|
}}
|
|
108
118
|
]
|
|
109
119
|
}
|
|
110
120
|
]
|
|
111
121
|
|
|
112
122
|
// Handle form submission
|
|
113
|
-
const handleFormSubmit = (formData, any>, formType) => {
|
|
123
|
+
const handleFormSubmit = (formData: Record<string, any>, formType: string) => {
|
|
114
124
|
const result = {
|
|
115
|
-
type,
|
|
116
|
-
data,
|
|
117
|
-
timestamp)
|
|
125
|
+
type: formType,
|
|
126
|
+
data: formData,
|
|
127
|
+
timestamp: new Date()
|
|
118
128
|
}
|
|
119
129
|
|
|
120
130
|
setFormResults(prev => [result, ...prev.slice(0, 9)]) // Keep last 10 results
|
|
121
131
|
|
|
122
|
-
console.log(`${formType} form submitted
|
|
132
|
+
console.log(`${formType} form submitted:`, formData)
|
|
123
133
|
}
|
|
124
134
|
|
|
125
135
|
// Handle form validation change
|
|
126
|
-
const handleValidationChange = (isValid, formType) => {
|
|
127
|
-
console.log(`${formType} form validation
|
|
136
|
+
const handleValidationChange = (isValid: boolean, formType: string) => {
|
|
137
|
+
console.log(`${formType} form validation:`, isValid ? 'Valid' : 'Invalid')
|
|
128
138
|
}
|
|
129
139
|
|
|
130
140
|
// Clear form results
|
|
@@ -133,32 +143,38 @@ export const FormDemo= () => {
|
|
|
133
143
|
}
|
|
134
144
|
|
|
135
145
|
// Test form submission programmatically
|
|
136
|
-
const testFormSubmission = async (formType) => {
|
|
137
|
-
const formRef = formType === 'basic' ? basicFormRef
|
|
146
|
+
const testFormSubmission = async (formType: 'basic' | 'advanced') => {
|
|
147
|
+
const formRef = formType === 'basic' ? basicFormRef : advancedFormRef
|
|
148
|
+
|
|
149
|
+
if (formRef.current) {
|
|
138
150
|
try {
|
|
139
151
|
const result = await formRef.current.submit()
|
|
140
|
-
console.log(`${formType} form test submission
|
|
152
|
+
console.log(`${formType} form test submission:`, result)
|
|
141
153
|
} catch (error) {
|
|
142
|
-
console.error(`${formType} form test submission error
|
|
154
|
+
console.error(`${formType} form test submission error:`, error)
|
|
143
155
|
}
|
|
144
156
|
}
|
|
145
157
|
}
|
|
146
158
|
|
|
147
159
|
// Test form validation programmatically
|
|
148
|
-
const testFormValidation = async (formType) => {
|
|
149
|
-
const formRef = formType === 'basic' ? basicFormRef
|
|
160
|
+
const testFormValidation = async (formType: 'basic' | 'advanced') => {
|
|
161
|
+
const formRef = formType === 'basic' ? basicFormRef : advancedFormRef
|
|
162
|
+
|
|
163
|
+
if (formRef.current) {
|
|
150
164
|
try {
|
|
151
165
|
const isValid = await formRef.current.validate()
|
|
152
|
-
console.log(`${formType} form validation test
|
|
166
|
+
console.log(`${formType} form validation test:`, isValid ? 'Valid' : 'Invalid')
|
|
153
167
|
} catch (error) {
|
|
154
|
-
console.error(`${formType} form validation test error
|
|
168
|
+
console.error(`${formType} form validation test error:`, error)
|
|
155
169
|
}
|
|
156
170
|
}
|
|
157
171
|
}
|
|
158
172
|
|
|
159
173
|
// Test form reset programmatically
|
|
160
|
-
const testFormReset = (formType) => {
|
|
161
|
-
const formRef = formType === 'basic' ? basicFormRef
|
|
174
|
+
const testFormReset = (formType: 'basic' | 'advanced') => {
|
|
175
|
+
const formRef = formType === 'basic' ? basicFormRef : advancedFormRef
|
|
176
|
+
|
|
177
|
+
if (formRef.current) {
|
|
162
178
|
formRef.current.reset()
|
|
163
179
|
console.log(`${formType} form reset`)
|
|
164
180
|
}
|
|
@@ -173,14 +189,20 @@ export const FormDemo= () => {
|
|
|
173
189
|
Advanced form system with mobile validation, animated feedback, and performance optimization
|
|
174
190
|
</p>
|
|
175
191
|
<Badge variant="outline" className="text-sm">
|
|
176
|
-
Story 6
|
|
192
|
+
Story 6: Advanced Form System with Mobile Validation
|
|
193
|
+
</Badge>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
{/* Enhanced Features Toggle */}
|
|
177
197
|
<div className="flex justify-center">
|
|
178
198
|
<div className="flex items-center gap-2 p-3 bg-gray-50 rounded-lg">
|
|
179
|
-
<span className="text-sm font-medium">Enhanced Features
|
|
199
|
+
<span className="text-sm font-medium">Enhanced Features:</span>
|
|
200
|
+
<Button
|
|
201
|
+
variant={enableEnhancedFeatures ? 'default' : 'outline'}
|
|
180
202
|
size="sm"
|
|
181
203
|
onClick={() => setEnableEnhancedFeatures(!enableEnhancedFeatures)}
|
|
182
204
|
>
|
|
183
|
-
{enableEnhancedFeatures ? 'Enabled' }
|
|
205
|
+
{enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
|
|
184
206
|
</Button>
|
|
185
207
|
</div>
|
|
186
208
|
</div>
|
|
@@ -189,9 +211,10 @@ export const FormDemo= () => {
|
|
|
189
211
|
<Tabs
|
|
190
212
|
tabs={[
|
|
191
213
|
{
|
|
192
|
-
id,
|
|
193
|
-
label,
|
|
194
|
-
content
|
|
214
|
+
id: 'basic',
|
|
215
|
+
label: 'Basic Form',
|
|
216
|
+
content: (
|
|
217
|
+
<div className="space-y-4">
|
|
195
218
|
<Card>
|
|
196
219
|
<CardHeader>
|
|
197
220
|
<CardTitle className="flex items-center gap-2">
|
|
@@ -243,9 +266,10 @@ export const FormDemo= () => {
|
|
|
243
266
|
)
|
|
244
267
|
},
|
|
245
268
|
{
|
|
246
|
-
id,
|
|
247
|
-
label,
|
|
248
|
-
content
|
|
269
|
+
id: 'advanced',
|
|
270
|
+
label: 'Advanced Form',
|
|
271
|
+
content: (
|
|
272
|
+
<div className="space-y-4">
|
|
249
273
|
<Card>
|
|
250
274
|
<CardHeader>
|
|
251
275
|
<CardTitle className="flex items-center gap-2">
|
|
@@ -297,9 +321,10 @@ export const FormDemo= () => {
|
|
|
297
321
|
)
|
|
298
322
|
},
|
|
299
323
|
{
|
|
300
|
-
id,
|
|
301
|
-
label,
|
|
302
|
-
content
|
|
324
|
+
id: 'performance',
|
|
325
|
+
label: 'Performance',
|
|
326
|
+
content: (
|
|
327
|
+
<div className="space-y-4">
|
|
303
328
|
<Card>
|
|
304
329
|
<CardHeader>
|
|
305
330
|
<CardTitle className="flex items-center gap-2">
|
|
@@ -311,25 +336,30 @@ export const FormDemo= () => {
|
|
|
311
336
|
</CardDescription>
|
|
312
337
|
</CardHeader>
|
|
313
338
|
<CardContent className="space-y-4">
|
|
314
|
-
<div className="grid grid-cols-1 md
|
|
339
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
340
|
+
<div className="space-y-3">
|
|
315
341
|
<h4 className="font-semibold">Performance Features</h4>
|
|
316
342
|
<div className="space-y-2 text-sm">
|
|
317
343
|
<div className="flex justify-between">
|
|
318
|
-
<span>Validation Throttling
|
|
344
|
+
<span>Validation Throttling:</span>
|
|
345
|
+
<Badge variant="default">Enabled</Badge>
|
|
319
346
|
</div>
|
|
320
347
|
<div className="flex justify-between">
|
|
321
|
-
<span>Touch Event Optimization
|
|
322
|
-
|
|
348
|
+
<span>Touch Event Optimization:</span>
|
|
349
|
+
<Badge variant={enableEnhancedFeatures ? 'default' : 'secondary'}>
|
|
350
|
+
{enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
|
|
323
351
|
</Badge>
|
|
324
352
|
</div>
|
|
325
353
|
<div className="flex justify-between">
|
|
326
|
-
<span>Memory Management
|
|
327
|
-
|
|
354
|
+
<span>Memory Management:</span>
|
|
355
|
+
<Badge variant={enableEnhancedFeatures ? 'default' : 'secondary'}>
|
|
356
|
+
{enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
|
|
328
357
|
</Badge>
|
|
329
358
|
</div>
|
|
330
359
|
<div className="flex justify-between">
|
|
331
|
-
<span>Battery Optimization
|
|
332
|
-
|
|
360
|
+
<span>Battery Optimization:</span>
|
|
361
|
+
<Badge variant={enableEnhancedFeatures ? 'default' : 'secondary'}>
|
|
362
|
+
{enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
|
|
333
363
|
</Badge>
|
|
334
364
|
</div>
|
|
335
365
|
</div>
|
|
@@ -363,9 +393,10 @@ export const FormDemo= () => {
|
|
|
363
393
|
)
|
|
364
394
|
},
|
|
365
395
|
{
|
|
366
|
-
id,
|
|
367
|
-
label,
|
|
368
|
-
content
|
|
396
|
+
id: 'semantic',
|
|
397
|
+
label: 'Semantic Input',
|
|
398
|
+
content: (
|
|
399
|
+
<div className="space-y-4">
|
|
369
400
|
<Card>
|
|
370
401
|
<CardHeader>
|
|
371
402
|
<CardTitle className="flex items-center gap-2">
|
|
@@ -377,24 +408,29 @@ export const FormDemo= () => {
|
|
|
377
408
|
</CardDescription>
|
|
378
409
|
</CardHeader>
|
|
379
410
|
<CardContent className="space-y-4">
|
|
380
|
-
<div className="grid grid-cols-1 md
|
|
411
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
412
|
+
<div className="space-y-3">
|
|
381
413
|
<h4 className="font-semibold">Semantic Features</h4>
|
|
382
414
|
<div className="space-y-2 text-sm">
|
|
383
415
|
<div className="flex justify-between">
|
|
384
|
-
<span>Auto Type Detection
|
|
416
|
+
<span>Auto Type Detection:</span>
|
|
417
|
+
<Badge variant="default">Enabled</Badge>
|
|
385
418
|
</div>
|
|
386
419
|
<div className="flex justify-between">
|
|
387
|
-
<span>Keyboard Optimization
|
|
388
|
-
|
|
420
|
+
<span>Keyboard Optimization:</span>
|
|
421
|
+
<Badge variant={enableEnhancedFeatures ? 'default' : 'secondary'}>
|
|
422
|
+
{enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
|
|
389
423
|
</Badge>
|
|
390
424
|
</div>
|
|
391
425
|
<div className="flex justify-between">
|
|
392
|
-
<span>Autocomplete Enhancement
|
|
393
|
-
|
|
426
|
+
<span>Autocomplete Enhancement:</span>
|
|
427
|
+
<Badge variant={enableEnhancedFeatures ? 'default' : 'secondary'}>
|
|
428
|
+
{enableEnhancedFeatures ? 'Enabled' : 'Disabled'}
|
|
394
429
|
</Badge>
|
|
395
430
|
</div>
|
|
396
431
|
<div className="flex justify-between">
|
|
397
|
-
<span>Touch Optimization
|
|
432
|
+
<span>Touch Optimization:</span>
|
|
433
|
+
<Badge variant="default">Enabled</Badge>
|
|
398
434
|
</div>
|
|
399
435
|
</div>
|
|
400
436
|
</div>
|
|
@@ -402,11 +438,11 @@ export const FormDemo= () => {
|
|
|
402
438
|
<div className="space-y-3">
|
|
403
439
|
<h4 className="font-semibold">Detection Examples</h4>
|
|
404
440
|
<div className="space-y-2 text-sm text-gray-600">
|
|
405
|
-
<p>• <strong>Email, sets email keyboard</p>
|
|
406
|
-
<p>• <strong>Phone, sets phone keyboard</p>
|
|
407
|
-
<p>• <strong>URL, sets URL keyboard</p>
|
|
408
|
-
<p>• <strong>Search, optimizes input</p>
|
|
409
|
-
<p>• <strong>Number, sets numeric keyboard</p>
|
|
441
|
+
<p>• <strong>Email:</strong> Detects @ symbol, sets email keyboard</p>
|
|
442
|
+
<p>• <strong>Phone:</strong> Detects numeric patterns, sets phone keyboard</p>
|
|
443
|
+
<p>• <strong>URL:</strong> Detects http/https, sets URL keyboard</p>
|
|
444
|
+
<p>• <strong>Search:</strong> Detects search context, optimizes input</p>
|
|
445
|
+
<p>• <strong>Number:</strong> Detects numeric patterns, sets numeric keyboard</p>
|
|
410
446
|
</div>
|
|
411
447
|
</div>
|
|
412
448
|
</div>
|
|
@@ -428,7 +464,7 @@ export const FormDemo= () => {
|
|
|
428
464
|
}
|
|
429
465
|
]}
|
|
430
466
|
activeTab={activeTab}
|
|
431
|
-
onTabChange={(tabId) => setActiveTab(tabId as 'basic' | 'advanced' | 'performance' | 'semantic')}
|
|
467
|
+
onTabChange={(tabId: string) => setActiveTab(tabId as 'basic' | 'advanced' | 'performance' | 'semantic')}
|
|
432
468
|
className="w-full"
|
|
433
469
|
/>
|
|
434
470
|
|
|
@@ -479,7 +515,8 @@ export const FormDemo= () => {
|
|
|
479
515
|
</CardDescription>
|
|
480
516
|
</CardHeader>
|
|
481
517
|
<CardContent>
|
|
482
|
-
<div className="grid grid-cols-1 md
|
|
518
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
519
|
+
<div className="space-y-3">
|
|
483
520
|
<h4 className="font-semibold">✅ Completed Features</h4>
|
|
484
521
|
<ul className="text-sm space-y-1 text-gray-600">
|
|
485
522
|
<li>• Mobile form validation system</li>
|