@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
|
@@ -1,111 +1,141 @@
|
|
|
1
1
|
// Accessibility theme configuration interface
|
|
2
2
|
export interface AccessibilityThemeConfig {
|
|
3
|
-
highContrast;
|
|
4
|
-
reducedMotion;
|
|
5
|
-
focusVisible;
|
|
6
|
-
ariaLabels, string>;
|
|
7
|
-
keyboardShortcuts, string>;
|
|
8
|
-
focusRing
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
highContrast: boolean;
|
|
4
|
+
reducedMotion: boolean;
|
|
5
|
+
focusVisible: boolean;
|
|
6
|
+
ariaLabels: Record<string, string>;
|
|
7
|
+
keyboardShortcuts: Record<string, string>;
|
|
8
|
+
focusRing: {
|
|
9
|
+
color: string;
|
|
10
|
+
width: string;
|
|
11
|
+
style: 'solid' | 'dashed' | 'dotted';
|
|
12
|
+
offset: string;
|
|
12
13
|
};
|
|
13
|
-
motion
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
motion: {
|
|
15
|
+
duration: {
|
|
16
|
+
fast: string;
|
|
17
|
+
normal: string;
|
|
18
|
+
slow: string;
|
|
16
19
|
};
|
|
17
|
-
easing
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
easing: {
|
|
21
|
+
ease: string;
|
|
22
|
+
easeIn: string;
|
|
23
|
+
easeOut: string;
|
|
24
|
+
easeInOut: string;
|
|
21
25
|
};
|
|
22
26
|
};
|
|
23
|
-
contrast
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
contrast: {
|
|
28
|
+
minimum: number; // WCAG AA minimum contrast ratio
|
|
29
|
+
enhanced: number; // WCAG AAA enhanced contrast ratio
|
|
30
|
+
target: number; // Target contrast ratio for the theme
|
|
26
31
|
};
|
|
27
|
-
spacing
|
|
28
|
-
|
|
32
|
+
spacing: {
|
|
33
|
+
focusRing: string;
|
|
34
|
+
touchTarget: string; // Minimum touch target size
|
|
29
35
|
};
|
|
30
36
|
}
|
|
31
37
|
|
|
32
38
|
// Default accessibility configuration
|
|
33
|
-
export const defaultAccessibilityConfig= {
|
|
34
|
-
highContrast,
|
|
35
|
-
reducedMotion,
|
|
36
|
-
focusVisible,
|
|
37
|
-
ariaLabels
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
submit,
|
|
52
|
-
cancel,
|
|
53
|
-
next,
|
|
54
|
-
previous,
|
|
55
|
-
expand,
|
|
56
|
-
collapse},
|
|
57
|
-
focusRing,
|
|
58
|
-
width,
|
|
59
|
-
style,
|
|
60
|
-
offset},
|
|
61
|
-
motion,
|
|
62
|
-
normal,
|
|
63
|
-
slow},
|
|
64
|
-
easing,
|
|
65
|
-
easeIn,
|
|
66
|
-
easeOut,
|
|
67
|
-
easeInOut}
|
|
39
|
+
export const defaultAccessibilityConfig: AccessibilityThemeConfig = {
|
|
40
|
+
highContrast: false,
|
|
41
|
+
reducedMotion: false,
|
|
42
|
+
focusVisible: true,
|
|
43
|
+
ariaLabels: {
|
|
44
|
+
close: 'Close',
|
|
45
|
+
open: 'Open',
|
|
46
|
+
expand: 'Expand',
|
|
47
|
+
collapse: 'Collapse',
|
|
48
|
+
next: 'Next',
|
|
49
|
+
previous: 'Previous',
|
|
50
|
+
submit: 'Submit',
|
|
51
|
+
cancel: 'Cancel',
|
|
52
|
+
loading: 'Loading',
|
|
53
|
+
error: 'Error',
|
|
54
|
+
success: 'Success',
|
|
55
|
+
warning: 'Warning',
|
|
56
|
+
info: 'Information'
|
|
68
57
|
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
58
|
+
keyboardShortcuts: {
|
|
59
|
+
close: 'Escape',
|
|
60
|
+
submit: 'Enter',
|
|
61
|
+
cancel: 'Escape',
|
|
62
|
+
next: 'Tab',
|
|
63
|
+
previous: 'Shift+Tab',
|
|
64
|
+
expand: 'Space or Enter',
|
|
65
|
+
collapse: 'Space or Enter'
|
|
66
|
+
},
|
|
67
|
+
focusRing: {
|
|
68
|
+
color: '#3b82f6',
|
|
69
|
+
width: '2px',
|
|
70
|
+
style: 'solid',
|
|
71
|
+
offset: '2px'
|
|
72
|
+
},
|
|
73
|
+
motion: {
|
|
74
|
+
duration: {
|
|
75
|
+
fast: '150ms',
|
|
76
|
+
normal: '300ms',
|
|
77
|
+
slow: '500ms'
|
|
78
|
+
},
|
|
79
|
+
easing: {
|
|
80
|
+
ease: 'ease',
|
|
81
|
+
easeIn: 'ease-in',
|
|
82
|
+
easeOut: 'ease-out',
|
|
83
|
+
easeInOut: 'ease-in-out'
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
contrast: {
|
|
87
|
+
minimum: 4.5, // WCAG AA minimum
|
|
88
|
+
enhanced: 7.0, // WCAG AAA enhanced
|
|
89
|
+
target: 4.5
|
|
90
|
+
},
|
|
91
|
+
spacing: {
|
|
92
|
+
focusRing: '2px',
|
|
93
|
+
touchTarget: '44px'
|
|
94
|
+
}
|
|
74
95
|
};
|
|
75
96
|
|
|
76
97
|
// High contrast accessibility configuration
|
|
77
|
-
export const highContrastAccessibilityConfig= {
|
|
98
|
+
export const highContrastAccessibilityConfig: AccessibilityThemeConfig = {
|
|
78
99
|
...defaultAccessibilityConfig,
|
|
79
|
-
highContrast,
|
|
80
|
-
focusRing
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
100
|
+
highContrast: true,
|
|
101
|
+
focusRing: {
|
|
102
|
+
color: '#ffffff',
|
|
103
|
+
width: '3px',
|
|
104
|
+
style: 'solid',
|
|
105
|
+
offset: '1px'
|
|
106
|
+
},
|
|
107
|
+
contrast: {
|
|
108
|
+
minimum: 7.0,
|
|
109
|
+
enhanced: 7.0,
|
|
110
|
+
target: 7.0
|
|
111
|
+
}
|
|
87
112
|
};
|
|
88
113
|
|
|
89
114
|
// Reduced motion accessibility configuration
|
|
90
|
-
export const reducedMotionAccessibilityConfig= {
|
|
115
|
+
export const reducedMotionAccessibilityConfig: AccessibilityThemeConfig = {
|
|
91
116
|
...defaultAccessibilityConfig,
|
|
92
|
-
reducedMotion,
|
|
93
|
-
motion
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
117
|
+
reducedMotion: true,
|
|
118
|
+
motion: {
|
|
119
|
+
duration: {
|
|
120
|
+
fast: '0ms',
|
|
121
|
+
normal: '0ms',
|
|
122
|
+
slow: '0ms'
|
|
123
|
+
},
|
|
124
|
+
easing: {
|
|
125
|
+
ease: 'linear',
|
|
126
|
+
easeIn: 'linear',
|
|
127
|
+
easeOut: 'linear',
|
|
128
|
+
easeInOut: 'linear'
|
|
129
|
+
}
|
|
100
130
|
}
|
|
101
131
|
};
|
|
102
132
|
|
|
103
133
|
// Accessibility theme manager
|
|
104
134
|
export class AccessibilityThemeManager {
|
|
105
|
-
private config;
|
|
106
|
-
private listeners) => void>;
|
|
135
|
+
private config: AccessibilityThemeConfig;
|
|
136
|
+
private listeners: Set<(config: AccessibilityThemeConfig) => void>;
|
|
107
137
|
|
|
108
|
-
constructor(initialConfig= defaultAccessibilityConfig) {
|
|
138
|
+
constructor(initialConfig: AccessibilityThemeConfig = defaultAccessibilityConfig) {
|
|
109
139
|
this.config = initialConfig;
|
|
110
140
|
this.listeners = new Set();
|
|
111
141
|
this.initializeSystemPreferences();
|
|
@@ -115,8 +145,8 @@ export class AccessibilityThemeManager {
|
|
|
115
145
|
private initializeSystemPreferences() {
|
|
116
146
|
// Check for system high contrast preference
|
|
117
147
|
if (typeof window !== 'undefined' && window.matchMedia) {
|
|
118
|
-
const highContrastQuery = window.matchMedia('(prefers-contrast)');
|
|
119
|
-
const reducedMotionQuery = window.matchMedia('(prefers-reduced-motion)');
|
|
148
|
+
const highContrastQuery = window.matchMedia('(prefers-contrast: high)');
|
|
149
|
+
const reducedMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
|
|
120
150
|
|
|
121
151
|
this.updateFromSystemPreferences(highContrastQuery.matches, reducedMotionQuery.matches);
|
|
122
152
|
|
|
@@ -132,7 +162,7 @@ export class AccessibilityThemeManager {
|
|
|
132
162
|
}
|
|
133
163
|
|
|
134
164
|
// Update configuration based on system preferences
|
|
135
|
-
private updateFromSystemPreferences(highContrast, reducedMotion) {
|
|
165
|
+
private updateFromSystemPreferences(highContrast: boolean, reducedMotion: boolean) {
|
|
136
166
|
let newConfig = { ...this.config };
|
|
137
167
|
|
|
138
168
|
if (highContrast) {
|
|
@@ -147,17 +177,18 @@ export class AccessibilityThemeManager {
|
|
|
147
177
|
}
|
|
148
178
|
|
|
149
179
|
// Get current accessibility configuration
|
|
150
|
-
getConfig()
|
|
180
|
+
getConfig(): AccessibilityThemeConfig {
|
|
181
|
+
return { ...this.config };
|
|
151
182
|
}
|
|
152
183
|
|
|
153
184
|
// Update accessibility configuration
|
|
154
|
-
updateConfig(newConfig) {
|
|
185
|
+
updateConfig(newConfig: Partial<AccessibilityThemeConfig>) {
|
|
155
186
|
this.config = { ...this.config, ...newConfig };
|
|
156
187
|
this.notifyListeners();
|
|
157
188
|
}
|
|
158
189
|
|
|
159
190
|
// Subscribe to accessibility configuration changes
|
|
160
|
-
subscribe(listener) => void)) => void {
|
|
191
|
+
subscribe(listener: (config: AccessibilityThemeConfig) => void): () => void {
|
|
161
192
|
this.listeners.add(listener);
|
|
162
193
|
return () => this.listeners.delete(listener);
|
|
163
194
|
}
|
|
@@ -168,47 +199,55 @@ export class AccessibilityThemeManager {
|
|
|
168
199
|
}
|
|
169
200
|
|
|
170
201
|
// Get CSS custom properties for accessibility
|
|
171
|
-
getCSSProperties(), string> {
|
|
202
|
+
getCSSProperties(): Record<string, string> {
|
|
172
203
|
const { focusRing, motion, spacing } = this.config;
|
|
173
204
|
|
|
174
205
|
return {
|
|
175
|
-
'--focus-ring-color',
|
|
176
|
-
'--focus-ring-width',
|
|
177
|
-
'--focus-ring-style',
|
|
178
|
-
'--focus-ring-offset',
|
|
179
|
-
'--motion-duration-fast',
|
|
180
|
-
'--motion-duration-normal',
|
|
181
|
-
'--motion-duration-slow',
|
|
182
|
-
'--motion-easing-ease',
|
|
183
|
-
'--motion-easing-ease-in',
|
|
184
|
-
'--motion-easing-ease-out',
|
|
185
|
-
'--motion-easing-ease-in-out',
|
|
186
|
-
'--spacing-focus-ring',
|
|
187
|
-
'--spacing-touch-target'
|
|
206
|
+
'--focus-ring-color': focusRing.color,
|
|
207
|
+
'--focus-ring-width': focusRing.width,
|
|
208
|
+
'--focus-ring-style': focusRing.style,
|
|
209
|
+
'--focus-ring-offset': focusRing.offset,
|
|
210
|
+
'--motion-duration-fast': motion.duration.fast,
|
|
211
|
+
'--motion-duration-normal': motion.duration.normal,
|
|
212
|
+
'--motion-duration-slow': motion.duration.slow,
|
|
213
|
+
'--motion-easing-ease': motion.easing.ease,
|
|
214
|
+
'--motion-easing-ease-in': motion.easing.easeIn,
|
|
215
|
+
'--motion-easing-ease-out': motion.easing.easeOut,
|
|
216
|
+
'--motion-easing-ease-in-out': motion.easing.easeInOut,
|
|
217
|
+
'--spacing-focus-ring': spacing.focusRing,
|
|
218
|
+
'--spacing-touch-target': spacing.touchTarget
|
|
219
|
+
};
|
|
188
220
|
}
|
|
189
221
|
|
|
190
222
|
// Check if high contrast mode is enabled
|
|
191
|
-
isHighContrast()
|
|
223
|
+
isHighContrast(): boolean {
|
|
224
|
+
return this.config.highContrast;
|
|
192
225
|
}
|
|
193
226
|
|
|
194
227
|
// Check if reduced motion is enabled
|
|
195
|
-
isReducedMotion()
|
|
228
|
+
isReducedMotion(): boolean {
|
|
229
|
+
return this.config.reducedMotion;
|
|
196
230
|
}
|
|
197
231
|
|
|
198
232
|
// Check if focus visible is enabled
|
|
199
|
-
isFocusVisible()
|
|
233
|
+
isFocusVisible(): boolean {
|
|
234
|
+
return this.config.focusVisible;
|
|
200
235
|
}
|
|
201
236
|
|
|
202
237
|
// Get ARIA label for a specific key
|
|
203
|
-
getAriaLabel(key)
|
|
238
|
+
getAriaLabel(key: string): string {
|
|
239
|
+
return this.config.ariaLabels[key] || key;
|
|
204
240
|
}
|
|
205
241
|
|
|
206
242
|
// Get keyboard shortcut for a specific action
|
|
207
|
-
getKeyboardShortcut(action)
|
|
243
|
+
getKeyboardShortcut(action: string): string {
|
|
244
|
+
return this.config.keyboardShortcuts[action] || '';
|
|
208
245
|
}
|
|
209
246
|
|
|
210
247
|
// Validate contrast ratio
|
|
211
|
-
validateContrastRatio(_foreground, _background)
|
|
248
|
+
validateContrastRatio(_foreground: string, _background: string): boolean {
|
|
249
|
+
// This would implement actual contrast ratio calculation
|
|
250
|
+
// For now, return true as placeholder
|
|
212
251
|
return true;
|
|
213
252
|
}
|
|
214
253
|
}
|
|
@@ -1,111 +1,141 @@
|
|
|
1
1
|
// Accessibility theme configuration interface
|
|
2
2
|
export interface AccessibilityThemeConfig {
|
|
3
|
-
highContrast;
|
|
4
|
-
reducedMotion;
|
|
5
|
-
focusVisible;
|
|
6
|
-
ariaLabels, string>;
|
|
7
|
-
keyboardShortcuts, string>;
|
|
8
|
-
focusRing
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
highContrast: boolean;
|
|
4
|
+
reducedMotion: boolean;
|
|
5
|
+
focusVisible: boolean;
|
|
6
|
+
ariaLabels: Record<string, string>;
|
|
7
|
+
keyboardShortcuts: Record<string, string>;
|
|
8
|
+
focusRing: {
|
|
9
|
+
color: string;
|
|
10
|
+
width: string;
|
|
11
|
+
style: 'solid' | 'dashed' | 'dotted';
|
|
12
|
+
offset: string;
|
|
12
13
|
};
|
|
13
|
-
motion
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
motion: {
|
|
15
|
+
duration: {
|
|
16
|
+
fast: string;
|
|
17
|
+
normal: string;
|
|
18
|
+
slow: string;
|
|
16
19
|
};
|
|
17
|
-
easing
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
easing: {
|
|
21
|
+
ease: string;
|
|
22
|
+
easeIn: string;
|
|
23
|
+
easeOut: string;
|
|
24
|
+
easeInOut: string;
|
|
21
25
|
};
|
|
22
26
|
};
|
|
23
|
-
contrast
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
contrast: {
|
|
28
|
+
minimum: number; // WCAG AA minimum contrast ratio
|
|
29
|
+
enhanced: number; // WCAG AAA enhanced contrast ratio
|
|
30
|
+
target: number; // Target contrast ratio for the theme
|
|
26
31
|
};
|
|
27
|
-
spacing
|
|
28
|
-
|
|
32
|
+
spacing: {
|
|
33
|
+
focusRing: string;
|
|
34
|
+
touchTarget: string; // Minimum touch target size
|
|
29
35
|
};
|
|
30
36
|
}
|
|
31
37
|
|
|
32
38
|
// Default accessibility configuration
|
|
33
|
-
export const defaultAccessibilityConfig= {
|
|
34
|
-
highContrast,
|
|
35
|
-
reducedMotion,
|
|
36
|
-
focusVisible,
|
|
37
|
-
ariaLabels
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
submit,
|
|
52
|
-
cancel,
|
|
53
|
-
next,
|
|
54
|
-
previous,
|
|
55
|
-
expand,
|
|
56
|
-
collapse},
|
|
57
|
-
focusRing,
|
|
58
|
-
width,
|
|
59
|
-
style,
|
|
60
|
-
offset},
|
|
61
|
-
motion,
|
|
62
|
-
normal,
|
|
63
|
-
slow},
|
|
64
|
-
easing,
|
|
65
|
-
easeIn,
|
|
66
|
-
easeOut,
|
|
67
|
-
easeInOut}
|
|
39
|
+
export const defaultAccessibilityConfig: AccessibilityThemeConfig = {
|
|
40
|
+
highContrast: false,
|
|
41
|
+
reducedMotion: false,
|
|
42
|
+
focusVisible: true,
|
|
43
|
+
ariaLabels: {
|
|
44
|
+
close: 'Close',
|
|
45
|
+
open: 'Open',
|
|
46
|
+
expand: 'Expand',
|
|
47
|
+
collapse: 'Collapse',
|
|
48
|
+
next: 'Next',
|
|
49
|
+
previous: 'Previous',
|
|
50
|
+
submit: 'Submit',
|
|
51
|
+
cancel: 'Cancel',
|
|
52
|
+
loading: 'Loading',
|
|
53
|
+
error: 'Error',
|
|
54
|
+
success: 'Success',
|
|
55
|
+
warning: 'Warning',
|
|
56
|
+
info: 'Information'
|
|
68
57
|
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
58
|
+
keyboardShortcuts: {
|
|
59
|
+
close: 'Escape',
|
|
60
|
+
submit: 'Enter',
|
|
61
|
+
cancel: 'Escape',
|
|
62
|
+
next: 'Tab',
|
|
63
|
+
previous: 'Shift+Tab',
|
|
64
|
+
expand: 'Space or Enter',
|
|
65
|
+
collapse: 'Space or Enter'
|
|
66
|
+
},
|
|
67
|
+
focusRing: {
|
|
68
|
+
color: '#3b82f6',
|
|
69
|
+
width: '2px',
|
|
70
|
+
style: 'solid',
|
|
71
|
+
offset: '2px'
|
|
72
|
+
},
|
|
73
|
+
motion: {
|
|
74
|
+
duration: {
|
|
75
|
+
fast: '150ms',
|
|
76
|
+
normal: '300ms',
|
|
77
|
+
slow: '500ms'
|
|
78
|
+
},
|
|
79
|
+
easing: {
|
|
80
|
+
ease: 'ease',
|
|
81
|
+
easeIn: 'ease-in',
|
|
82
|
+
easeOut: 'ease-out',
|
|
83
|
+
easeInOut: 'ease-in-out'
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
contrast: {
|
|
87
|
+
minimum: 4.5, // WCAG AA minimum
|
|
88
|
+
enhanced: 7.0, // WCAG AAA enhanced
|
|
89
|
+
target: 4.5
|
|
90
|
+
},
|
|
91
|
+
spacing: {
|
|
92
|
+
focusRing: '2px',
|
|
93
|
+
touchTarget: '44px'
|
|
94
|
+
}
|
|
74
95
|
};
|
|
75
96
|
|
|
76
97
|
// High contrast accessibility configuration
|
|
77
|
-
export const highContrastAccessibilityConfig= {
|
|
98
|
+
export const highContrastAccessibilityConfig: AccessibilityThemeConfig = {
|
|
78
99
|
...defaultAccessibilityConfig,
|
|
79
|
-
highContrast,
|
|
80
|
-
focusRing
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
100
|
+
highContrast: true,
|
|
101
|
+
focusRing: {
|
|
102
|
+
color: '#ffffff',
|
|
103
|
+
width: '3px',
|
|
104
|
+
style: 'solid',
|
|
105
|
+
offset: '1px'
|
|
106
|
+
},
|
|
107
|
+
contrast: {
|
|
108
|
+
minimum: 7.0,
|
|
109
|
+
enhanced: 7.0,
|
|
110
|
+
target: 7.0
|
|
111
|
+
}
|
|
87
112
|
};
|
|
88
113
|
|
|
89
114
|
// Reduced motion accessibility configuration
|
|
90
|
-
export const reducedMotionAccessibilityConfig= {
|
|
115
|
+
export const reducedMotionAccessibilityConfig: AccessibilityThemeConfig = {
|
|
91
116
|
...defaultAccessibilityConfig,
|
|
92
|
-
reducedMotion,
|
|
93
|
-
motion
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
117
|
+
reducedMotion: true,
|
|
118
|
+
motion: {
|
|
119
|
+
duration: {
|
|
120
|
+
fast: '0ms',
|
|
121
|
+
normal: '0ms',
|
|
122
|
+
slow: '0ms'
|
|
123
|
+
},
|
|
124
|
+
easing: {
|
|
125
|
+
ease: 'linear',
|
|
126
|
+
easeIn: 'linear',
|
|
127
|
+
easeOut: 'linear',
|
|
128
|
+
easeInOut: 'linear'
|
|
129
|
+
}
|
|
100
130
|
}
|
|
101
131
|
};
|
|
102
132
|
|
|
103
133
|
// Accessibility theme manager
|
|
104
134
|
export class AccessibilityThemeManager {
|
|
105
|
-
private config;
|
|
106
|
-
private listeners) => void>;
|
|
135
|
+
private config: AccessibilityThemeConfig;
|
|
136
|
+
private listeners: Set<(config: AccessibilityThemeConfig) => void>;
|
|
107
137
|
|
|
108
|
-
constructor(initialConfig= defaultAccessibilityConfig) {
|
|
138
|
+
constructor(initialConfig: AccessibilityThemeConfig = defaultAccessibilityConfig) {
|
|
109
139
|
this.config = initialConfig;
|
|
110
140
|
this.listeners = new Set();
|
|
111
141
|
this.initializeSystemPreferences();
|
|
@@ -115,8 +145,8 @@ export class AccessibilityThemeManager {
|
|
|
115
145
|
private initializeSystemPreferences() {
|
|
116
146
|
// Check for system high contrast preference
|
|
117
147
|
if (typeof window !== 'undefined' && window.matchMedia) {
|
|
118
|
-
const highContrastQuery = window.matchMedia('(prefers-contrast)');
|
|
119
|
-
const reducedMotionQuery = window.matchMedia('(prefers-reduced-motion)');
|
|
148
|
+
const highContrastQuery = window.matchMedia('(prefers-contrast: high)');
|
|
149
|
+
const reducedMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
|
|
120
150
|
|
|
121
151
|
this.updateFromSystemPreferences(highContrastQuery.matches, reducedMotionQuery.matches);
|
|
122
152
|
|
|
@@ -132,7 +162,7 @@ export class AccessibilityThemeManager {
|
|
|
132
162
|
}
|
|
133
163
|
|
|
134
164
|
// Update configuration based on system preferences
|
|
135
|
-
private updateFromSystemPreferences(highContrast, reducedMotion) {
|
|
165
|
+
private updateFromSystemPreferences(highContrast: boolean, reducedMotion: boolean) {
|
|
136
166
|
let newConfig = { ...this.config };
|
|
137
167
|
|
|
138
168
|
if (highContrast) {
|
|
@@ -147,17 +177,18 @@ export class AccessibilityThemeManager {
|
|
|
147
177
|
}
|
|
148
178
|
|
|
149
179
|
// Get current accessibility configuration
|
|
150
|
-
getConfig()
|
|
180
|
+
getConfig(): AccessibilityThemeConfig {
|
|
181
|
+
return { ...this.config };
|
|
151
182
|
}
|
|
152
183
|
|
|
153
184
|
// Update accessibility configuration
|
|
154
|
-
updateConfig(newConfig) {
|
|
185
|
+
updateConfig(newConfig: Partial<AccessibilityThemeConfig>) {
|
|
155
186
|
this.config = { ...this.config, ...newConfig };
|
|
156
187
|
this.notifyListeners();
|
|
157
188
|
}
|
|
158
189
|
|
|
159
190
|
// Subscribe to accessibility configuration changes
|
|
160
|
-
subscribe(listener) => void)) => void {
|
|
191
|
+
subscribe(listener: (config: AccessibilityThemeConfig) => void): () => void {
|
|
161
192
|
this.listeners.add(listener);
|
|
162
193
|
return () => this.listeners.delete(listener);
|
|
163
194
|
}
|
|
@@ -168,47 +199,55 @@ export class AccessibilityThemeManager {
|
|
|
168
199
|
}
|
|
169
200
|
|
|
170
201
|
// Get CSS custom properties for accessibility
|
|
171
|
-
getCSSProperties(), string> {
|
|
202
|
+
getCSSProperties(): Record<string, string> {
|
|
172
203
|
const { focusRing, motion, spacing } = this.config;
|
|
173
204
|
|
|
174
205
|
return {
|
|
175
|
-
'--focus-ring-color',
|
|
176
|
-
'--focus-ring-width',
|
|
177
|
-
'--focus-ring-style',
|
|
178
|
-
'--focus-ring-offset',
|
|
179
|
-
'--motion-duration-fast',
|
|
180
|
-
'--motion-duration-normal',
|
|
181
|
-
'--motion-duration-slow',
|
|
182
|
-
'--motion-easing-ease',
|
|
183
|
-
'--motion-easing-ease-in',
|
|
184
|
-
'--motion-easing-ease-out',
|
|
185
|
-
'--motion-easing-ease-in-out',
|
|
186
|
-
'--spacing-focus-ring',
|
|
187
|
-
'--spacing-touch-target'
|
|
206
|
+
'--focus-ring-color': focusRing.color,
|
|
207
|
+
'--focus-ring-width': focusRing.width,
|
|
208
|
+
'--focus-ring-style': focusRing.style,
|
|
209
|
+
'--focus-ring-offset': focusRing.offset,
|
|
210
|
+
'--motion-duration-fast': motion.duration.fast,
|
|
211
|
+
'--motion-duration-normal': motion.duration.normal,
|
|
212
|
+
'--motion-duration-slow': motion.duration.slow,
|
|
213
|
+
'--motion-easing-ease': motion.easing.ease,
|
|
214
|
+
'--motion-easing-ease-in': motion.easing.easeIn,
|
|
215
|
+
'--motion-easing-ease-out': motion.easing.easeOut,
|
|
216
|
+
'--motion-easing-ease-in-out': motion.easing.easeInOut,
|
|
217
|
+
'--spacing-focus-ring': spacing.focusRing,
|
|
218
|
+
'--spacing-touch-target': spacing.touchTarget
|
|
219
|
+
};
|
|
188
220
|
}
|
|
189
221
|
|
|
190
222
|
// Check if high contrast mode is enabled
|
|
191
|
-
isHighContrast()
|
|
223
|
+
isHighContrast(): boolean {
|
|
224
|
+
return this.config.highContrast;
|
|
192
225
|
}
|
|
193
226
|
|
|
194
227
|
// Check if reduced motion is enabled
|
|
195
|
-
isReducedMotion()
|
|
228
|
+
isReducedMotion(): boolean {
|
|
229
|
+
return this.config.reducedMotion;
|
|
196
230
|
}
|
|
197
231
|
|
|
198
232
|
// Check if focus visible is enabled
|
|
199
|
-
isFocusVisible()
|
|
233
|
+
isFocusVisible(): boolean {
|
|
234
|
+
return this.config.focusVisible;
|
|
200
235
|
}
|
|
201
236
|
|
|
202
237
|
// Get ARIA label for a specific key
|
|
203
|
-
getAriaLabel(key)
|
|
238
|
+
getAriaLabel(key: string): string {
|
|
239
|
+
return this.config.ariaLabels[key] || key;
|
|
204
240
|
}
|
|
205
241
|
|
|
206
242
|
// Get keyboard shortcut for a specific action
|
|
207
|
-
getKeyboardShortcut(action)
|
|
243
|
+
getKeyboardShortcut(action: string): string {
|
|
244
|
+
return this.config.keyboardShortcuts[action] || '';
|
|
208
245
|
}
|
|
209
246
|
|
|
210
247
|
// Validate contrast ratio
|
|
211
|
-
validateContrastRatio(_foreground, _background)
|
|
248
|
+
validateContrastRatio(_foreground: string, _background: string): boolean {
|
|
249
|
+
// This would implement actual contrast ratio calculation
|
|
250
|
+
// For now, return true as placeholder
|
|
212
251
|
return true;
|
|
213
252
|
}
|
|
214
253
|
}
|