@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,40 +1,62 @@
|
|
|
1
1
|
import { useState, useCallback, useEffect, ComponentType, CSSProperties } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface ReusableArchitectureConfig {
|
|
4
|
-
enableComponentComposition
|
|
4
|
+
enableComponentComposition?: boolean
|
|
5
|
+
enablePatternSharing?: boolean
|
|
6
|
+
enableStyleSharing?: boolean
|
|
7
|
+
enableBehaviorSharing?: boolean
|
|
8
|
+
enableTemplateSystem?: boolean
|
|
9
|
+
enableComponentRegistry?: boolean
|
|
10
|
+
}
|
|
5
11
|
|
|
6
12
|
export interface ComponentTemplate {
|
|
7
|
-
id
|
|
8
|
-
|
|
9
|
-
|
|
13
|
+
id: string
|
|
14
|
+
name: string
|
|
15
|
+
component: ComponentType<any>
|
|
16
|
+
props: Record<string, any>
|
|
17
|
+
styles: CSSProperties
|
|
18
|
+
behaviors: string[]
|
|
19
|
+
patterns: string[]
|
|
10
20
|
}
|
|
11
21
|
|
|
12
22
|
export interface SharedPattern {
|
|
13
|
-
id
|
|
14
|
-
|
|
23
|
+
id: string
|
|
24
|
+
name: string
|
|
25
|
+
description: string
|
|
26
|
+
implementation: string
|
|
27
|
+
usage: string[]
|
|
28
|
+
category: 'composition' | 'styling' | 'behavior' | 'performance'
|
|
29
|
+
}
|
|
15
30
|
|
|
16
31
|
export interface SharedStyle {
|
|
17
|
-
id
|
|
18
|
-
|
|
19
|
-
|
|
32
|
+
id: string
|
|
33
|
+
name: string
|
|
34
|
+
css: string
|
|
35
|
+
variables: Record<string, string>
|
|
36
|
+
breakpoints: Record<string, string>
|
|
37
|
+
usage: string[]
|
|
20
38
|
}
|
|
21
39
|
|
|
22
40
|
export interface SharedBehavior {
|
|
23
|
-
id
|
|
24
|
-
|
|
41
|
+
id: string
|
|
42
|
+
name: string
|
|
43
|
+
description: string
|
|
44
|
+
hook: string
|
|
45
|
+
dependencies: string[]
|
|
46
|
+
usage: string[]
|
|
25
47
|
}
|
|
26
48
|
|
|
27
49
|
export interface ReusableArchitectureCallbacks {
|
|
28
|
-
onTemplateCreated
|
|
29
|
-
onPatternShared
|
|
30
|
-
onStyleShared
|
|
31
|
-
onBehaviorShared
|
|
32
|
-
onArchitectureOptimized
|
|
50
|
+
onTemplateCreated?: (template: ComponentTemplate) => void
|
|
51
|
+
onPatternShared?: (pattern: SharedPattern) => void
|
|
52
|
+
onStyleShared?: (style: SharedStyle) => void
|
|
53
|
+
onBehaviorShared?: (behavior: SharedBehavior) => void
|
|
54
|
+
onArchitectureOptimized?: (optimization: string) => void
|
|
33
55
|
}
|
|
34
56
|
|
|
35
57
|
export const useReusableArchitecture = (
|
|
36
|
-
config= {},
|
|
37
|
-
callbacks= {}
|
|
58
|
+
config: ReusableArchitectureConfig = {},
|
|
59
|
+
callbacks: ReusableArchitectureCallbacks = {}
|
|
38
60
|
) => {
|
|
39
61
|
const {
|
|
40
62
|
enableComponentComposition = true,
|
|
@@ -54,8 +76,8 @@ export const useReusableArchitecture = (
|
|
|
54
76
|
|
|
55
77
|
// Component composition
|
|
56
78
|
const composeComponent = useCallback((
|
|
57
|
-
baseComponent
|
|
58
|
-
enhancements) => ComponentType<any>>
|
|
79
|
+
baseComponent: ComponentType<any>,
|
|
80
|
+
enhancements: Array<(Component: ComponentType<any>) => ComponentType<any>>
|
|
59
81
|
) => {
|
|
60
82
|
if (!enableComponentComposition) return baseComponent
|
|
61
83
|
|
|
@@ -74,12 +96,12 @@ export const useReusableArchitecture = (
|
|
|
74
96
|
|
|
75
97
|
// Template system
|
|
76
98
|
const createTemplate = useCallback((
|
|
77
|
-
template, 'id'>
|
|
99
|
+
template: Omit<ComponentTemplate, 'id'>
|
|
78
100
|
) => {
|
|
79
101
|
if (!enableTemplateSystem) return null
|
|
80
102
|
|
|
81
103
|
const id = `template-${Date.now()}`
|
|
82
|
-
const newTemplate= {
|
|
104
|
+
const newTemplate: ComponentTemplate = {
|
|
83
105
|
...template,
|
|
84
106
|
id
|
|
85
107
|
}
|
|
@@ -92,13 +114,14 @@ export const useReusableArchitecture = (
|
|
|
92
114
|
return id
|
|
93
115
|
}, [enableTemplateSystem, templates, callbacks])
|
|
94
116
|
|
|
95
|
-
const getTemplate = useCallback((id) => {
|
|
117
|
+
const getTemplate = useCallback((id: string) => {
|
|
96
118
|
return templates.get(id)
|
|
97
119
|
}, [templates])
|
|
98
120
|
|
|
99
121
|
const updateTemplate = useCallback((
|
|
100
|
-
id,
|
|
101
|
-
updates
|
|
122
|
+
id: string,
|
|
123
|
+
updates: Partial<ComponentTemplate>
|
|
124
|
+
) => {
|
|
102
125
|
const template = templates.get(id)
|
|
103
126
|
if (!template) return false
|
|
104
127
|
|
|
@@ -109,7 +132,7 @@ export const useReusableArchitecture = (
|
|
|
109
132
|
return true
|
|
110
133
|
}, [templates])
|
|
111
134
|
|
|
112
|
-
const deleteTemplate = useCallback((id) => {
|
|
135
|
+
const deleteTemplate = useCallback((id: string) => {
|
|
113
136
|
const deleted = templates.delete(id)
|
|
114
137
|
if (deleted) {
|
|
115
138
|
setTemplates(new Map(templates))
|
|
@@ -119,12 +142,12 @@ export const useReusableArchitecture = (
|
|
|
119
142
|
|
|
120
143
|
// Pattern sharing
|
|
121
144
|
const sharePattern = useCallback((
|
|
122
|
-
pattern, 'id'>
|
|
145
|
+
pattern: Omit<SharedPattern, 'id'>
|
|
123
146
|
) => {
|
|
124
147
|
if (!enablePatternSharing) return null
|
|
125
148
|
|
|
126
149
|
const id = `pattern-${Date.now()}`
|
|
127
|
-
const newPattern= {
|
|
150
|
+
const newPattern: SharedPattern = {
|
|
128
151
|
...pattern,
|
|
129
152
|
id
|
|
130
153
|
}
|
|
@@ -137,22 +160,22 @@ export const useReusableArchitecture = (
|
|
|
137
160
|
return id
|
|
138
161
|
}, [enablePatternSharing, sharedPatterns, callbacks])
|
|
139
162
|
|
|
140
|
-
const getPattern = useCallback((id) => {
|
|
163
|
+
const getPattern = useCallback((id: string) => {
|
|
141
164
|
return sharedPatterns.get(id)
|
|
142
165
|
}, [sharedPatterns])
|
|
143
166
|
|
|
144
|
-
const findPatternsByCategory = useCallback((category) => {
|
|
167
|
+
const findPatternsByCategory = useCallback((category: string) => {
|
|
145
168
|
return Array.from(sharedPatterns.values()).filter(pattern => pattern.category === category)
|
|
146
169
|
}, [sharedPatterns])
|
|
147
170
|
|
|
148
171
|
// Style sharing
|
|
149
172
|
const shareStyle = useCallback((
|
|
150
|
-
style, 'id'>
|
|
173
|
+
style: Omit<SharedStyle, 'id'>
|
|
151
174
|
) => {
|
|
152
175
|
if (!enableStyleSharing) return null
|
|
153
176
|
|
|
154
177
|
const id = `style-${Date.now()}`
|
|
155
|
-
const newStyle= {
|
|
178
|
+
const newStyle: SharedStyle = {
|
|
156
179
|
...style,
|
|
157
180
|
id
|
|
158
181
|
}
|
|
@@ -165,13 +188,14 @@ export const useReusableArchitecture = (
|
|
|
165
188
|
return id
|
|
166
189
|
}, [enableStyleSharing, sharedStyles, callbacks])
|
|
167
190
|
|
|
168
|
-
const getStyle = useCallback((id) => {
|
|
191
|
+
const getStyle = useCallback((id: string) => {
|
|
169
192
|
return sharedStyles.get(id)
|
|
170
193
|
}, [sharedStyles])
|
|
171
194
|
|
|
172
195
|
const applyStyle = useCallback((
|
|
173
|
-
styleId,
|
|
174
|
-
targetComponent
|
|
196
|
+
styleId: string,
|
|
197
|
+
targetComponent: string
|
|
198
|
+
) => {
|
|
175
199
|
const style = sharedStyles.get(styleId)
|
|
176
200
|
if (!style) return false
|
|
177
201
|
|
|
@@ -187,12 +211,12 @@ export const useReusableArchitecture = (
|
|
|
187
211
|
|
|
188
212
|
// Behavior sharing
|
|
189
213
|
const shareBehavior = useCallback((
|
|
190
|
-
behavior, 'id'>
|
|
214
|
+
behavior: Omit<SharedBehavior, 'id'>
|
|
191
215
|
) => {
|
|
192
216
|
if (!enableBehaviorSharing) return null
|
|
193
217
|
|
|
194
218
|
const id = `behavior-${Date.now()}`
|
|
195
|
-
const newBehavior= {
|
|
219
|
+
const newBehavior: SharedBehavior = {
|
|
196
220
|
...behavior,
|
|
197
221
|
id
|
|
198
222
|
}
|
|
@@ -205,13 +229,14 @@ export const useReusableArchitecture = (
|
|
|
205
229
|
return id
|
|
206
230
|
}, [enableBehaviorSharing, sharedBehaviors, callbacks])
|
|
207
231
|
|
|
208
|
-
const getBehavior = useCallback((id) => {
|
|
232
|
+
const getBehavior = useCallback((id: string) => {
|
|
209
233
|
return sharedBehaviors.get(id)
|
|
210
234
|
}, [sharedBehaviors])
|
|
211
235
|
|
|
212
236
|
const applyBehavior = useCallback((
|
|
213
|
-
behaviorId,
|
|
214
|
-
targetComponent
|
|
237
|
+
behaviorId: string,
|
|
238
|
+
targetComponent: string
|
|
239
|
+
) => {
|
|
215
240
|
const behavior = sharedBehaviors.get(behaviorId)
|
|
216
241
|
if (!behavior) return false
|
|
217
242
|
|
|
@@ -227,21 +252,25 @@ export const useReusableArchitecture = (
|
|
|
227
252
|
|
|
228
253
|
// Component registry
|
|
229
254
|
const registerComponent = useCallback((
|
|
230
|
-
id,
|
|
231
|
-
component
|
|
232
|
-
metadata
|
|
255
|
+
id: string,
|
|
256
|
+
component: ComponentType<any>,
|
|
257
|
+
metadata: {
|
|
258
|
+
name: string
|
|
259
|
+
description: string
|
|
260
|
+
category: string
|
|
261
|
+
tags: string[]
|
|
233
262
|
}
|
|
234
263
|
) => {
|
|
235
264
|
if (!enableComponentRegistry) return false
|
|
236
265
|
|
|
237
|
-
const template= {
|
|
266
|
+
const template: ComponentTemplate = {
|
|
238
267
|
id,
|
|
239
|
-
name,
|
|
268
|
+
name: metadata.name,
|
|
240
269
|
component,
|
|
241
|
-
props},
|
|
242
|
-
styles},
|
|
243
|
-
behaviors],
|
|
244
|
-
patterns]
|
|
270
|
+
props: {},
|
|
271
|
+
styles: {},
|
|
272
|
+
behaviors: [],
|
|
273
|
+
patterns: []
|
|
245
274
|
}
|
|
246
275
|
|
|
247
276
|
templates.set(id, template)
|
|
@@ -253,13 +282,13 @@ export const useReusableArchitecture = (
|
|
|
253
282
|
// Architecture analysis
|
|
254
283
|
const analyzeArchitecture = useCallback(() => {
|
|
255
284
|
const analysis = {
|
|
256
|
-
totalTemplates,
|
|
257
|
-
totalPatterns,
|
|
258
|
-
totalStyles,
|
|
259
|
-
totalBehaviors,
|
|
260
|
-
compositionLevel,
|
|
261
|
-
reusabilityScore,
|
|
262
|
-
recommendations] as string[]
|
|
285
|
+
totalTemplates: templates.size,
|
|
286
|
+
totalPatterns: sharedPatterns.size,
|
|
287
|
+
totalStyles: sharedStyles.size,
|
|
288
|
+
totalBehaviors: sharedBehaviors.size,
|
|
289
|
+
compositionLevel: 'none' as 'none' | 'basic' | 'intermediate' | 'advanced',
|
|
290
|
+
reusabilityScore: 0,
|
|
291
|
+
recommendations: [] as string[]
|
|
263
292
|
}
|
|
264
293
|
|
|
265
294
|
// Calculate composition level
|
|
@@ -335,10 +364,10 @@ export const useReusableArchitecture = (
|
|
|
335
364
|
|
|
336
365
|
return {
|
|
337
366
|
// State
|
|
338
|
-
templates)),
|
|
339
|
-
sharedPatterns)),
|
|
340
|
-
sharedStyles)),
|
|
341
|
-
sharedBehaviors)),
|
|
367
|
+
templates: Array.from(templates.values()),
|
|
368
|
+
sharedPatterns: Array.from(sharedPatterns.values()),
|
|
369
|
+
sharedStyles: Array.from(sharedStyles.values()),
|
|
370
|
+
sharedBehaviors: Array.from(sharedBehaviors.values()),
|
|
342
371
|
isOptimizing,
|
|
343
372
|
optimizations,
|
|
344
373
|
|
|
@@ -374,11 +403,11 @@ export const useReusableArchitecture = (
|
|
|
374
403
|
optimizeArchitecture,
|
|
375
404
|
|
|
376
405
|
// Utility functions
|
|
377
|
-
hasTemplate) => templates.has(id),
|
|
378
|
-
hasPattern) => sharedPatterns.has(id),
|
|
379
|
-
hasStyle) => sharedStyles.has(id),
|
|
380
|
-
hasBehavior) => sharedBehaviors.has(id),
|
|
381
|
-
clearOptimizations) => setOptimizations([])
|
|
406
|
+
hasTemplate: (id: string) => templates.has(id),
|
|
407
|
+
hasPattern: (id: string) => sharedPatterns.has(id),
|
|
408
|
+
hasStyle: (id: string) => sharedStyles.has(id),
|
|
409
|
+
hasBehavior: (id: string) => sharedBehaviors.has(id),
|
|
410
|
+
clearOptimizations: () => setOptimizations([])
|
|
382
411
|
}
|
|
383
412
|
}
|
|
384
413
|
|
|
@@ -1,21 +1,42 @@
|
|
|
1
1
|
import { useState, useCallback, useRef, useEffect } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface SemanticInputConfig {
|
|
4
|
-
type
|
|
4
|
+
type: string
|
|
5
|
+
inputMode: 'text' | 'email' | 'tel' | 'url' | 'numeric' | 'decimal' | 'search'
|
|
6
|
+
autoCapitalize: 'off' | 'on' | 'sentences' | 'words' | 'characters' | 'none'
|
|
7
|
+
autoComplete: string
|
|
8
|
+
autoCorrect: 'on' | 'off'
|
|
9
|
+
spellCheck: boolean
|
|
10
|
+
pattern?: string
|
|
11
|
+
minLength?: number
|
|
12
|
+
maxLength?: number
|
|
13
|
+
placeholder?: string
|
|
14
|
+
required?: boolean
|
|
15
|
+
disabled?: boolean
|
|
16
|
+
readOnly?: boolean
|
|
17
|
+
tabIndex?: number
|
|
18
|
+
}
|
|
5
19
|
|
|
6
20
|
export interface SemanticInputType {
|
|
7
|
-
id
|
|
21
|
+
id: string
|
|
22
|
+
name: string
|
|
23
|
+
config: SemanticInputConfig
|
|
24
|
+
mobileOptimized: boolean
|
|
25
|
+
touchFriendly: boolean
|
|
26
|
+
accessibilityEnhanced: boolean
|
|
27
|
+
performanceOptimized: boolean
|
|
28
|
+
}
|
|
8
29
|
|
|
9
30
|
export interface SemanticInputTypesCallbacks {
|
|
10
|
-
onInputTypeSelected
|
|
11
|
-
onConfigApplied
|
|
12
|
-
onMobileOptimizationApplied
|
|
13
|
-
onTouchOptimizationApplied
|
|
14
|
-
onAccessibilityEnhanced
|
|
31
|
+
onInputTypeSelected?: (inputType: SemanticInputType) => void
|
|
32
|
+
onConfigApplied?: (config: SemanticInputConfig) => void
|
|
33
|
+
onMobileOptimizationApplied?: (optimization: string) => void
|
|
34
|
+
onTouchOptimizationApplied?: (optimization: string) => void
|
|
35
|
+
onAccessibilityEnhanced?: (feature: string) => void
|
|
15
36
|
}
|
|
16
37
|
|
|
17
38
|
export const useSemanticInputTypes = (
|
|
18
|
-
callbacks= {}
|
|
39
|
+
callbacks: SemanticInputTypesCallbacks = {}
|
|
19
40
|
) => {
|
|
20
41
|
const [inputTypes, setInputTypes] = useState<SemanticInputType[]>([])
|
|
21
42
|
const [selectedType, setSelectedType] = useState<SemanticInputType | null>(null)
|
|
@@ -26,121 +47,142 @@ export const useSemanticInputTypes = (
|
|
|
26
47
|
const optimizationTimerRef = useRef<number | null>(null)
|
|
27
48
|
|
|
28
49
|
// Semantic input type configurations
|
|
29
|
-
const semanticInputConfigs, SemanticInputConfig> = {
|
|
30
|
-
name
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
50
|
+
const semanticInputConfigs: Record<string, SemanticInputConfig> = {
|
|
51
|
+
name: {
|
|
52
|
+
type: 'text',
|
|
53
|
+
inputMode: 'text',
|
|
54
|
+
autoCapitalize: 'words',
|
|
55
|
+
autoComplete: 'name',
|
|
56
|
+
autoCorrect: 'on',
|
|
57
|
+
spellCheck: true,
|
|
58
|
+
minLength: 2,
|
|
59
|
+
maxLength: 50,
|
|
60
|
+
placeholder: 'Enter your full name',
|
|
61
|
+
required: true
|
|
62
|
+
},
|
|
63
|
+
email: {
|
|
64
|
+
type: 'email',
|
|
65
|
+
inputMode: 'email',
|
|
66
|
+
autoCapitalize: 'none',
|
|
67
|
+
autoComplete: 'email',
|
|
68
|
+
autoCorrect: 'off',
|
|
69
|
+
spellCheck: false,
|
|
70
|
+
pattern: '[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$',
|
|
71
|
+
placeholder: 'Enter your email address',
|
|
72
|
+
required: true
|
|
73
|
+
},
|
|
74
|
+
phone: {
|
|
75
|
+
type: 'tel',
|
|
76
|
+
inputMode: 'tel',
|
|
77
|
+
autoCapitalize: 'none',
|
|
78
|
+
autoComplete: 'tel',
|
|
79
|
+
autoCorrect: 'off',
|
|
80
|
+
spellCheck: false,
|
|
81
|
+
pattern: '[0-9\\-\\+\\(\\)\\s]+',
|
|
82
|
+
placeholder: 'Enter your phone number',
|
|
83
|
+
required: true
|
|
84
|
+
},
|
|
85
|
+
creditCard: {
|
|
86
|
+
type: 'text',
|
|
87
|
+
inputMode: 'numeric',
|
|
88
|
+
autoCapitalize: 'none',
|
|
89
|
+
autoComplete: 'cc-number',
|
|
90
|
+
autoCorrect: 'off',
|
|
91
|
+
spellCheck: false,
|
|
92
|
+
pattern: '[0-9\\s]+',
|
|
93
|
+
minLength: 13,
|
|
94
|
+
maxLength: 19,
|
|
95
|
+
placeholder: 'Enter card number',
|
|
96
|
+
required: true
|
|
97
|
+
},
|
|
98
|
+
amount: {
|
|
99
|
+
type: 'number',
|
|
100
|
+
inputMode: 'decimal',
|
|
101
|
+
autoCapitalize: 'none',
|
|
102
|
+
autoComplete: 'off',
|
|
103
|
+
autoCorrect: 'off',
|
|
104
|
+
spellCheck: false,
|
|
105
|
+
minLength: 1,
|
|
106
|
+
maxLength: 10,
|
|
107
|
+
placeholder: 'Enter amount',
|
|
108
|
+
required: true
|
|
109
|
+
},
|
|
110
|
+
password: {
|
|
111
|
+
type: 'password',
|
|
112
|
+
inputMode: 'text',
|
|
113
|
+
autoCapitalize: 'none',
|
|
114
|
+
autoComplete: 'current-password',
|
|
115
|
+
autoCorrect: 'off',
|
|
116
|
+
spellCheck: false,
|
|
117
|
+
minLength: 8,
|
|
118
|
+
maxLength: 128,
|
|
119
|
+
placeholder: 'Enter your password',
|
|
120
|
+
required: true
|
|
121
|
+
},
|
|
122
|
+
search: {
|
|
123
|
+
type: 'search',
|
|
124
|
+
inputMode: 'search',
|
|
125
|
+
autoCapitalize: 'none',
|
|
126
|
+
autoComplete: 'off',
|
|
127
|
+
autoCorrect: 'off',
|
|
128
|
+
spellCheck: true,
|
|
129
|
+
placeholder: 'Search...',
|
|
130
|
+
required: false
|
|
131
|
+
},
|
|
132
|
+
url: {
|
|
133
|
+
type: 'url',
|
|
134
|
+
inputMode: 'url',
|
|
135
|
+
autoCapitalize: 'none',
|
|
136
|
+
autoComplete: 'url',
|
|
137
|
+
autoCorrect: 'off',
|
|
138
|
+
spellCheck: false,
|
|
139
|
+
placeholder: 'Enter website URL',
|
|
140
|
+
required: false
|
|
141
|
+
},
|
|
142
|
+
username: {
|
|
143
|
+
type: 'text',
|
|
144
|
+
inputMode: 'text',
|
|
145
|
+
autoCapitalize: 'none',
|
|
146
|
+
autoComplete: 'username',
|
|
147
|
+
autoCorrect: 'off',
|
|
148
|
+
spellCheck: false,
|
|
149
|
+
minLength: 3,
|
|
150
|
+
maxLength: 30,
|
|
151
|
+
placeholder: 'Enter username',
|
|
152
|
+
required: true
|
|
153
|
+
},
|
|
154
|
+
address: {
|
|
155
|
+
type: 'text',
|
|
156
|
+
inputMode: 'text',
|
|
157
|
+
autoCapitalize: 'words',
|
|
158
|
+
autoComplete: 'street-address',
|
|
159
|
+
autoCorrect: 'on',
|
|
160
|
+
spellCheck: true,
|
|
161
|
+
minLength: 10,
|
|
162
|
+
maxLength: 200,
|
|
163
|
+
placeholder: 'Enter your address',
|
|
164
|
+
required: true
|
|
165
|
+
}
|
|
125
166
|
}
|
|
126
167
|
|
|
127
168
|
// Initialize semantic input types
|
|
128
169
|
const initializeInputTypes = useCallback(() => {
|
|
129
|
-
const types] = Object.entries(semanticInputConfigs).map(([key, config]) => ({
|
|
130
|
-
id,
|
|
131
|
-
name).toUpperCase() + key.slice(1),
|
|
170
|
+
const types: SemanticInputType[] = Object.entries(semanticInputConfigs).map(([key, config]) => ({
|
|
171
|
+
id: key,
|
|
172
|
+
name: key.charAt(0).toUpperCase() + key.slice(1),
|
|
132
173
|
config,
|
|
133
|
-
mobileOptimized,
|
|
134
|
-
touchFriendly,
|
|
135
|
-
accessibilityEnhanced,
|
|
136
|
-
performanceOptimized
|
|
174
|
+
mobileOptimized: true,
|
|
175
|
+
touchFriendly: true,
|
|
176
|
+
accessibilityEnhanced: true,
|
|
177
|
+
performanceOptimized: true
|
|
178
|
+
}))
|
|
137
179
|
|
|
138
180
|
setInputTypes(types)
|
|
139
181
|
return types
|
|
140
182
|
}, [])
|
|
141
183
|
|
|
142
184
|
// Select input type
|
|
143
|
-
const selectInputType = useCallback((typeId) => {
|
|
185
|
+
const selectInputType = useCallback((typeId: string) => {
|
|
144
186
|
const type = inputTypes.find(t => t.id === typeId)
|
|
145
187
|
if (type) {
|
|
146
188
|
setSelectedType(type)
|
|
@@ -151,7 +193,7 @@ export const useSemanticInputTypes = (
|
|
|
151
193
|
}, [inputTypes, callbacks])
|
|
152
194
|
|
|
153
195
|
// Apply input configuration
|
|
154
|
-
const applyInputConfig = useCallback((config) => {
|
|
196
|
+
const applyInputConfig = useCallback((config: SemanticInputConfig) => {
|
|
155
197
|
if (inputRef.current) {
|
|
156
198
|
// Apply all configuration properties
|
|
157
199
|
Object.entries(config).forEach(([key, value]) => {
|
|
@@ -243,13 +285,13 @@ export const useSemanticInputTypes = (
|
|
|
243
285
|
}, [selectedType, applyInputConfig, applyMobileOptimization, applyTouchOptimization, enhanceAccessibility])
|
|
244
286
|
|
|
245
287
|
// Get input type by name
|
|
246
|
-
const getInputTypeByName = useCallback((name) => {
|
|
288
|
+
const getInputTypeByName = useCallback((name: string) => {
|
|
247
289
|
return inputTypes.find(t => t.name.toLowerCase() === name.toLowerCase())
|
|
248
290
|
}, [inputTypes])
|
|
249
291
|
|
|
250
292
|
// Validate input configuration
|
|
251
|
-
const validateInputConfig = useCallback((config) => {
|
|
252
|
-
const errors] = []
|
|
293
|
+
const validateInputConfig = useCallback((config: SemanticInputConfig) => {
|
|
294
|
+
const errors: string[] = []
|
|
253
295
|
|
|
254
296
|
if (!config.type) errors.push('Input type is required')
|
|
255
297
|
if (!config.inputMode) errors.push('Input mode is required')
|
|
@@ -299,15 +341,15 @@ export const useSemanticInputTypes = (
|
|
|
299
341
|
validateInputConfig,
|
|
300
342
|
|
|
301
343
|
// Utility functions
|
|
302
|
-
getInputConfig) => semanticInputConfigs[typeId],
|
|
303
|
-
isTypeSelected) => selectedType?.id === typeId,
|
|
304
|
-
getOptimizationStatus) => ({
|
|
305
|
-
mobile=> o.includes('Mobile')),
|
|
306
|
-
touch=> o.includes('Touch')),
|
|
307
|
-
accessibility=> o.includes('ARIA') || o.includes('Screen reader')),
|
|
308
|
-
performance=> o.includes('Performance'))
|
|
344
|
+
getInputConfig: (typeId: string) => semanticInputConfigs[typeId],
|
|
345
|
+
isTypeSelected: (typeId: string) => selectedType?.id === typeId,
|
|
346
|
+
getOptimizationStatus: () => ({
|
|
347
|
+
mobile: optimizations.some(o => o.includes('Mobile')),
|
|
348
|
+
touch: optimizations.some(o => o.includes('Touch')),
|
|
349
|
+
accessibility: optimizations.some(o => o.includes('ARIA') || o.includes('Screen reader')),
|
|
350
|
+
performance: optimizations.some(o => o.includes('Performance'))
|
|
309
351
|
}),
|
|
310
|
-
clearOptimizations) => setOptimizations([])
|
|
352
|
+
clearOptimizations: () => setOptimizations([])
|
|
311
353
|
}
|
|
312
354
|
}
|
|
313
355
|
|