@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
|
@@ -3,27 +3,27 @@
|
|
|
3
3
|
* Detects and manages system theme preferences
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
export type SystemTheme = 'light' | 'dark';
|
|
7
7
|
|
|
8
8
|
export interface SystemThemeOptions {
|
|
9
|
-
defaultTheme
|
|
10
|
-
storageKey
|
|
11
|
-
enablePersistence
|
|
9
|
+
defaultTheme?: SystemTheme;
|
|
10
|
+
storageKey?: string;
|
|
11
|
+
enablePersistence?: boolean;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export class SystemThemeDetector {
|
|
15
|
-
private mediaQuery= null;
|
|
16
|
-
private storageKey;
|
|
17
|
-
private enablePersistence;
|
|
18
|
-
private listeners) => void> = new Set();
|
|
15
|
+
private mediaQuery: MediaQueryList | null = null;
|
|
16
|
+
private storageKey: string;
|
|
17
|
+
private enablePersistence: boolean;
|
|
18
|
+
private listeners: Set<(theme: SystemTheme) => void> = new Set();
|
|
19
19
|
|
|
20
|
-
constructor(options= {}) {
|
|
20
|
+
constructor(options: SystemThemeOptions = {}) {
|
|
21
21
|
this.storageKey = options.storageKey || 'system-theme-preference';
|
|
22
22
|
this.enablePersistence = options.enablePersistence ?? true;
|
|
23
23
|
|
|
24
24
|
// Initialize media query if available
|
|
25
25
|
if (typeof window !== 'undefined' && window.matchMedia) {
|
|
26
|
-
this.mediaQuery = window.matchMedia('(prefers-color-scheme)');
|
|
26
|
+
this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
27
27
|
this.mediaQuery.addEventListener('change', this.handleMediaQueryChange);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -31,8 +31,9 @@ export class SystemThemeDetector {
|
|
|
31
31
|
/**
|
|
32
32
|
* Get the current system theme preference
|
|
33
33
|
*/
|
|
34
|
-
getSystemTheme()
|
|
35
|
-
|
|
34
|
+
getSystemTheme(): SystemTheme {
|
|
35
|
+
if (this.mediaQuery) {
|
|
36
|
+
return this.mediaQuery.matches ? 'dark' : 'light';
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
// Fallback to stored preference or default
|
|
@@ -47,7 +48,8 @@ export class SystemThemeDetector {
|
|
|
47
48
|
/**
|
|
48
49
|
* Get stored theme preference
|
|
49
50
|
*/
|
|
50
|
-
getStoredPreference()
|
|
51
|
+
getStoredPreference(): SystemTheme | null {
|
|
52
|
+
if (!this.enablePersistence || typeof window === 'undefined') {
|
|
51
53
|
return null;
|
|
52
54
|
}
|
|
53
55
|
|
|
@@ -57,7 +59,7 @@ export class SystemThemeDetector {
|
|
|
57
59
|
return stored;
|
|
58
60
|
}
|
|
59
61
|
} catch (error) {
|
|
60
|
-
console.warn('Failed to read system theme preference from storage, error);
|
|
62
|
+
console.warn('Failed to read system theme preference from storage:', error);
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
return null;
|
|
@@ -66,21 +68,23 @@ export class SystemThemeDetector {
|
|
|
66
68
|
/**
|
|
67
69
|
* Store theme preference
|
|
68
70
|
*/
|
|
69
|
-
setStoredPreference(theme
|
|
71
|
+
setStoredPreference(theme: SystemTheme): void {
|
|
72
|
+
if (!this.enablePersistence || typeof window === 'undefined') {
|
|
70
73
|
return;
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
try {
|
|
74
77
|
localStorage.setItem(this.storageKey, theme);
|
|
75
78
|
} catch (error) {
|
|
76
|
-
console.warn('Failed to store system theme preference, error);
|
|
79
|
+
console.warn('Failed to store system theme preference:', error);
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
82
|
|
|
80
83
|
/**
|
|
81
84
|
* Check if system theme detection is supported
|
|
82
85
|
*/
|
|
83
|
-
isSupported()
|
|
86
|
+
isSupported(): boolean {
|
|
87
|
+
return typeof window !== 'undefined' &&
|
|
84
88
|
'matchMedia' in window &&
|
|
85
89
|
'addEventListener' in MediaQueryList.prototype;
|
|
86
90
|
}
|
|
@@ -88,7 +92,7 @@ export class SystemThemeDetector {
|
|
|
88
92
|
/**
|
|
89
93
|
* Subscribe to system theme changes
|
|
90
94
|
*/
|
|
91
|
-
subscribe(callback) => void)) => void {
|
|
95
|
+
subscribe(callback: (theme: SystemTheme) => void): () => void {
|
|
92
96
|
this.listeners.add(callback);
|
|
93
97
|
|
|
94
98
|
// Return unsubscribe function
|
|
@@ -100,11 +104,12 @@ export class SystemThemeDetector {
|
|
|
100
104
|
/**
|
|
101
105
|
* Notify all listeners of theme change
|
|
102
106
|
*/
|
|
103
|
-
private notifyListeners(theme)
|
|
107
|
+
private notifyListeners(theme: SystemTheme): void {
|
|
108
|
+
this.listeners.forEach(callback => {
|
|
104
109
|
try {
|
|
105
110
|
callback(theme);
|
|
106
111
|
} catch (error) {
|
|
107
|
-
console.error('Error in system theme change callback, error);
|
|
112
|
+
console.error('Error in system theme change callback:', error);
|
|
108
113
|
}
|
|
109
114
|
});
|
|
110
115
|
}
|
|
@@ -112,8 +117,8 @@ export class SystemThemeDetector {
|
|
|
112
117
|
/**
|
|
113
118
|
* Handle media query changes
|
|
114
119
|
*/
|
|
115
|
-
private handleMediaQueryChange = (event)=> {
|
|
116
|
-
const newTheme= event.matches ? 'dark' ;
|
|
120
|
+
private handleMediaQueryChange = (event: MediaQueryListEvent): void => {
|
|
121
|
+
const newTheme: SystemTheme = event.matches ? 'dark' : 'light';
|
|
117
122
|
|
|
118
123
|
if (this.enablePersistence) {
|
|
119
124
|
this.setStoredPreference(newTheme);
|
|
@@ -125,26 +130,26 @@ export class SystemThemeDetector {
|
|
|
125
130
|
/**
|
|
126
131
|
* Get theme-aware CSS variables
|
|
127
132
|
*/
|
|
128
|
-
getThemeCSSVariables(theme), string> {
|
|
133
|
+
getThemeCSSVariables(theme: SystemTheme): Record<string, string> {
|
|
129
134
|
const baseVars = {
|
|
130
|
-
'--system-theme',
|
|
131
|
-
'--system-theme-opposite'=== 'light' ? 'dark' ,
|
|
135
|
+
'--system-theme': theme,
|
|
136
|
+
'--system-theme-opposite': theme === 'light' ? 'dark' : 'light',
|
|
132
137
|
};
|
|
133
138
|
|
|
134
139
|
// Add system-specific color adjustments
|
|
135
140
|
if (theme === 'dark') {
|
|
136
141
|
return {
|
|
137
142
|
...baseVars,
|
|
138
|
-
'--system-bg',
|
|
139
|
-
'--system-text',
|
|
140
|
-
'--system-border',
|
|
143
|
+
'--system-bg': '#000000',
|
|
144
|
+
'--system-text': '#ffffff',
|
|
145
|
+
'--system-border': '#333333',
|
|
141
146
|
};
|
|
142
147
|
} else {
|
|
143
148
|
return {
|
|
144
149
|
...baseVars,
|
|
145
|
-
'--system-bg',
|
|
146
|
-
'--system-text',
|
|
147
|
-
'--system-border',
|
|
150
|
+
'--system-bg': '#ffffff',
|
|
151
|
+
'--system-text': '#000000',
|
|
152
|
+
'--system-border': '#e5e7eb',
|
|
148
153
|
};
|
|
149
154
|
}
|
|
150
155
|
}
|
|
@@ -152,7 +157,8 @@ export class SystemThemeDetector {
|
|
|
152
157
|
/**
|
|
153
158
|
* Apply system theme CSS variables to document
|
|
154
159
|
*/
|
|
155
|
-
applySystemThemeCSS(theme
|
|
160
|
+
applySystemThemeCSS(theme: SystemTheme): void {
|
|
161
|
+
if (typeof document === 'undefined') return;
|
|
156
162
|
|
|
157
163
|
const cssVars = this.getThemeCSSVariables(theme);
|
|
158
164
|
|
|
@@ -164,11 +170,13 @@ export class SystemThemeDetector {
|
|
|
164
170
|
/**
|
|
165
171
|
* Clean up event listeners
|
|
166
172
|
*/
|
|
167
|
-
destroy()
|
|
173
|
+
destroy(): void {
|
|
174
|
+
if (this.mediaQuery) {
|
|
168
175
|
this.mediaQuery.removeEventListener('change', this.handleMediaQueryChange);
|
|
169
176
|
}
|
|
170
177
|
this.listeners.clear();
|
|
171
178
|
}
|
|
172
179
|
}
|
|
173
180
|
|
|
174
|
-
// Note
|
|
181
|
+
// Note: React hook is exported separately in a React-specific file
|
|
182
|
+
// This file contains only the core SystemThemeDetector class
|
|
@@ -3,27 +3,27 @@
|
|
|
3
3
|
* Detects and manages system theme preferences
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
export type SystemTheme = 'light' | 'dark';
|
|
7
7
|
|
|
8
8
|
export interface SystemThemeOptions {
|
|
9
|
-
defaultTheme
|
|
10
|
-
storageKey
|
|
11
|
-
enablePersistence
|
|
9
|
+
defaultTheme?: SystemTheme;
|
|
10
|
+
storageKey?: string;
|
|
11
|
+
enablePersistence?: boolean;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export class SystemThemeDetector {
|
|
15
|
-
private mediaQuery= null;
|
|
16
|
-
private storageKey;
|
|
17
|
-
private enablePersistence;
|
|
18
|
-
private listeners) => void> = new Set();
|
|
15
|
+
private mediaQuery: MediaQueryList | null = null;
|
|
16
|
+
private storageKey: string;
|
|
17
|
+
private enablePersistence: boolean;
|
|
18
|
+
private listeners: Set<(theme: SystemTheme) => void> = new Set();
|
|
19
19
|
|
|
20
|
-
constructor(options= {}) {
|
|
20
|
+
constructor(options: SystemThemeOptions = {}) {
|
|
21
21
|
this.storageKey = options.storageKey || 'system-theme-preference';
|
|
22
22
|
this.enablePersistence = options.enablePersistence ?? true;
|
|
23
23
|
|
|
24
24
|
// Initialize media query if available
|
|
25
25
|
if (typeof window !== 'undefined' && window.matchMedia) {
|
|
26
|
-
this.mediaQuery = window.matchMedia('(prefers-color-scheme)');
|
|
26
|
+
this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
27
27
|
this.mediaQuery.addEventListener('change', this.handleMediaQueryChange);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -31,8 +31,9 @@ export class SystemThemeDetector {
|
|
|
31
31
|
/**
|
|
32
32
|
* Get the current system theme preference
|
|
33
33
|
*/
|
|
34
|
-
getSystemTheme()
|
|
35
|
-
|
|
34
|
+
getSystemTheme(): SystemTheme {
|
|
35
|
+
if (this.mediaQuery) {
|
|
36
|
+
return this.mediaQuery.matches ? 'dark' : 'light';
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
// Fallback to stored preference or default
|
|
@@ -47,7 +48,8 @@ export class SystemThemeDetector {
|
|
|
47
48
|
/**
|
|
48
49
|
* Get stored theme preference
|
|
49
50
|
*/
|
|
50
|
-
getStoredPreference()
|
|
51
|
+
getStoredPreference(): SystemTheme | null {
|
|
52
|
+
if (!this.enablePersistence || typeof window === 'undefined') {
|
|
51
53
|
return null;
|
|
52
54
|
}
|
|
53
55
|
|
|
@@ -57,7 +59,7 @@ export class SystemThemeDetector {
|
|
|
57
59
|
return stored;
|
|
58
60
|
}
|
|
59
61
|
} catch (error) {
|
|
60
|
-
console.warn('Failed to read system theme preference from storage, error);
|
|
62
|
+
console.warn('Failed to read system theme preference from storage:', error);
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
return null;
|
|
@@ -66,21 +68,23 @@ export class SystemThemeDetector {
|
|
|
66
68
|
/**
|
|
67
69
|
* Store theme preference
|
|
68
70
|
*/
|
|
69
|
-
setStoredPreference(theme
|
|
71
|
+
setStoredPreference(theme: SystemTheme): void {
|
|
72
|
+
if (!this.enablePersistence || typeof window === 'undefined') {
|
|
70
73
|
return;
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
try {
|
|
74
77
|
localStorage.setItem(this.storageKey, theme);
|
|
75
78
|
} catch (error) {
|
|
76
|
-
console.warn('Failed to store system theme preference, error);
|
|
79
|
+
console.warn('Failed to store system theme preference:', error);
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
82
|
|
|
80
83
|
/**
|
|
81
84
|
* Check if system theme detection is supported
|
|
82
85
|
*/
|
|
83
|
-
isSupported()
|
|
86
|
+
isSupported(): boolean {
|
|
87
|
+
return typeof window !== 'undefined' &&
|
|
84
88
|
'matchMedia' in window &&
|
|
85
89
|
'addEventListener' in MediaQueryList.prototype;
|
|
86
90
|
}
|
|
@@ -88,7 +92,7 @@ export class SystemThemeDetector {
|
|
|
88
92
|
/**
|
|
89
93
|
* Subscribe to system theme changes
|
|
90
94
|
*/
|
|
91
|
-
subscribe(callback) => void)) => void {
|
|
95
|
+
subscribe(callback: (theme: SystemTheme) => void): () => void {
|
|
92
96
|
this.listeners.add(callback);
|
|
93
97
|
|
|
94
98
|
// Return unsubscribe function
|
|
@@ -100,11 +104,12 @@ export class SystemThemeDetector {
|
|
|
100
104
|
/**
|
|
101
105
|
* Notify all listeners of theme change
|
|
102
106
|
*/
|
|
103
|
-
private notifyListeners(theme)
|
|
107
|
+
private notifyListeners(theme: SystemTheme): void {
|
|
108
|
+
this.listeners.forEach(callback => {
|
|
104
109
|
try {
|
|
105
110
|
callback(theme);
|
|
106
111
|
} catch (error) {
|
|
107
|
-
console.error('Error in system theme change callback, error);
|
|
112
|
+
console.error('Error in system theme change callback:', error);
|
|
108
113
|
}
|
|
109
114
|
});
|
|
110
115
|
}
|
|
@@ -112,8 +117,8 @@ export class SystemThemeDetector {
|
|
|
112
117
|
/**
|
|
113
118
|
* Handle media query changes
|
|
114
119
|
*/
|
|
115
|
-
private handleMediaQueryChange = (event)=> {
|
|
116
|
-
const newTheme= event.matches ? 'dark' ;
|
|
120
|
+
private handleMediaQueryChange = (event: MediaQueryListEvent): void => {
|
|
121
|
+
const newTheme: SystemTheme = event.matches ? 'dark' : 'light';
|
|
117
122
|
|
|
118
123
|
if (this.enablePersistence) {
|
|
119
124
|
this.setStoredPreference(newTheme);
|
|
@@ -125,26 +130,26 @@ export class SystemThemeDetector {
|
|
|
125
130
|
/**
|
|
126
131
|
* Get theme-aware CSS variables
|
|
127
132
|
*/
|
|
128
|
-
getThemeCSSVariables(theme), string> {
|
|
133
|
+
getThemeCSSVariables(theme: SystemTheme): Record<string, string> {
|
|
129
134
|
const baseVars = {
|
|
130
|
-
'--system-theme',
|
|
131
|
-
'--system-theme-opposite'=== 'light' ? 'dark' ,
|
|
135
|
+
'--system-theme': theme,
|
|
136
|
+
'--system-theme-opposite': theme === 'light' ? 'dark' : 'light',
|
|
132
137
|
};
|
|
133
138
|
|
|
134
139
|
// Add system-specific color adjustments
|
|
135
140
|
if (theme === 'dark') {
|
|
136
141
|
return {
|
|
137
142
|
...baseVars,
|
|
138
|
-
'--system-bg',
|
|
139
|
-
'--system-text',
|
|
140
|
-
'--system-border',
|
|
143
|
+
'--system-bg': '#000000',
|
|
144
|
+
'--system-text': '#ffffff',
|
|
145
|
+
'--system-border': '#333333',
|
|
141
146
|
};
|
|
142
147
|
} else {
|
|
143
148
|
return {
|
|
144
149
|
...baseVars,
|
|
145
|
-
'--system-bg',
|
|
146
|
-
'--system-text',
|
|
147
|
-
'--system-border',
|
|
150
|
+
'--system-bg': '#ffffff',
|
|
151
|
+
'--system-text': '#000000',
|
|
152
|
+
'--system-border': '#e5e7eb',
|
|
148
153
|
};
|
|
149
154
|
}
|
|
150
155
|
}
|
|
@@ -152,7 +157,8 @@ export class SystemThemeDetector {
|
|
|
152
157
|
/**
|
|
153
158
|
* Apply system theme CSS variables to document
|
|
154
159
|
*/
|
|
155
|
-
applySystemThemeCSS(theme
|
|
160
|
+
applySystemThemeCSS(theme: SystemTheme): void {
|
|
161
|
+
if (typeof document === 'undefined') return;
|
|
156
162
|
|
|
157
163
|
const cssVars = this.getThemeCSSVariables(theme);
|
|
158
164
|
|
|
@@ -164,11 +170,13 @@ export class SystemThemeDetector {
|
|
|
164
170
|
/**
|
|
165
171
|
* Clean up event listeners
|
|
166
172
|
*/
|
|
167
|
-
destroy()
|
|
173
|
+
destroy(): void {
|
|
174
|
+
if (this.mediaQuery) {
|
|
168
175
|
this.mediaQuery.removeEventListener('change', this.handleMediaQueryChange);
|
|
169
176
|
}
|
|
170
177
|
this.listeners.clear();
|
|
171
178
|
}
|
|
172
179
|
}
|
|
173
180
|
|
|
174
|
-
// Note
|
|
181
|
+
// Note: React hook is exported separately in a React-specific file
|
|
182
|
+
// This file contains only the core SystemThemeDetector class
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { CompleteThemeConfig } from './types';
|
|
7
7
|
|
|
8
8
|
export class ThemeCSSUpdater {
|
|
9
|
-
private root;
|
|
9
|
+
private root: HTMLElement;
|
|
10
10
|
|
|
11
11
|
constructor() {
|
|
12
12
|
this.root = document.documentElement;
|
|
@@ -15,7 +15,8 @@ export class ThemeCSSUpdater {
|
|
|
15
15
|
/**
|
|
16
16
|
* Apply a complete theme configuration to CSS custom properties
|
|
17
17
|
*/
|
|
18
|
-
applyTheme(theme)
|
|
18
|
+
applyTheme(theme: CompleteThemeConfig): void {
|
|
19
|
+
this.applyColors(theme.colors);
|
|
19
20
|
this.applyFonts(theme.fonts);
|
|
20
21
|
this.applySpacing(theme.spacing);
|
|
21
22
|
this.applyShadows(theme.shadows);
|
|
@@ -26,7 +27,9 @@ export class ThemeCSSUpdater {
|
|
|
26
27
|
/**
|
|
27
28
|
* Apply color variables to CSS custom properties
|
|
28
29
|
*/
|
|
29
|
-
private applyColors(colors
|
|
30
|
+
private applyColors(colors: CompleteThemeConfig['colors']): void {
|
|
31
|
+
// Primary colors - set both flat and nested versions for compatibility
|
|
32
|
+
Object.entries(colors.primary).forEach(([shade, value]) => {
|
|
30
33
|
// Set flat version (for backward compatibility)
|
|
31
34
|
this.root.style.setProperty(`--cs-primary-${shade}`, value);
|
|
32
35
|
// Set nested version (for badge CSS and other components)
|
|
@@ -99,7 +102,9 @@ export class ThemeCSSUpdater {
|
|
|
99
102
|
/**
|
|
100
103
|
* Apply font variables to CSS custom properties
|
|
101
104
|
*/
|
|
102
|
-
private applyFonts(fonts])
|
|
105
|
+
private applyFonts(fonts: CompleteThemeConfig['fonts']): void {
|
|
106
|
+
// Helper function to build font family string with fallbacks
|
|
107
|
+
const buildFontFamily = (config: any) => {
|
|
103
108
|
if (config.fallbacks && config.fallbacks.length > 0) {
|
|
104
109
|
return `${config.family}, ${config.fallbacks.join(', ')}`;
|
|
105
110
|
}
|
|
@@ -141,7 +146,9 @@ export class ThemeCSSUpdater {
|
|
|
141
146
|
/**
|
|
142
147
|
* Apply spacing variables to CSS custom properties
|
|
143
148
|
*/
|
|
144
|
-
private applySpacing(spacing
|
|
149
|
+
private applySpacing(spacing: CompleteThemeConfig['spacing']): void {
|
|
150
|
+
// Scale spacing - set both flat and nested versions
|
|
151
|
+
Object.entries(spacing.scale).forEach(([size, value]) => {
|
|
145
152
|
// Set flat version (for backward compatibility)
|
|
146
153
|
this.root.style.setProperty(`--cs-spacing-${size}`, value);
|
|
147
154
|
// Set nested version (for badge CSS and other components)
|
|
@@ -171,7 +178,8 @@ export class ThemeCSSUpdater {
|
|
|
171
178
|
/**
|
|
172
179
|
* Apply shadow variables to CSS custom properties
|
|
173
180
|
*/
|
|
174
|
-
private applyShadows(shadows
|
|
181
|
+
private applyShadows(shadows: CompleteThemeConfig['shadows']): void {
|
|
182
|
+
Object.entries(shadows).forEach(([shadow, value]) => {
|
|
175
183
|
// Set flat version (for backward compatibility)
|
|
176
184
|
this.root.style.setProperty(`--cs-shadow-${shadow}`, value);
|
|
177
185
|
// Set nested version (for badge CSS and other components)
|
|
@@ -182,7 +190,9 @@ export class ThemeCSSUpdater {
|
|
|
182
190
|
/**
|
|
183
191
|
* Apply transition variables to CSS custom properties
|
|
184
192
|
*/
|
|
185
|
-
private applyTransitions(transitions
|
|
193
|
+
private applyTransitions(transitions: CompleteThemeConfig['transitions']): void {
|
|
194
|
+
// Duration - set both flat and nested versions
|
|
195
|
+
Object.entries(transitions.duration).forEach(([duration, value]) => {
|
|
186
196
|
// Set flat version (for backward compatibility)
|
|
187
197
|
this.root.style.setProperty(`--cs-transition-duration-${duration}`, value);
|
|
188
198
|
// Set nested version (for badge CSS and other components)
|
|
@@ -209,7 +219,8 @@ export class ThemeCSSUpdater {
|
|
|
209
219
|
/**
|
|
210
220
|
* Apply border radius variables to CSS custom properties
|
|
211
221
|
*/
|
|
212
|
-
private applyBorderRadius(borderRadius
|
|
222
|
+
private applyBorderRadius(borderRadius: CompleteThemeConfig['borderRadius']): void {
|
|
223
|
+
Object.entries(borderRadius).forEach(([size, value]) => {
|
|
213
224
|
// Set flat version (for backward compatibility)
|
|
214
225
|
this.root.style.setProperty(`--cs-border-radius-${size}`, value);
|
|
215
226
|
// Set nested version (for badge CSS and other components)
|
|
@@ -220,7 +231,8 @@ export class ThemeCSSUpdater {
|
|
|
220
231
|
/**
|
|
221
232
|
* Clear all theme CSS variables
|
|
222
233
|
*/
|
|
223
|
-
clearTheme()
|
|
234
|
+
clearTheme(): void {
|
|
235
|
+
const cssVars = [
|
|
224
236
|
'--cs-primary-50', '--cs-primary-100', '--cs-primary-200', '--cs-primary-300',
|
|
225
237
|
'--cs-primary-400', '--cs-primary-500', '--cs-primary-600', '--cs-primary-700',
|
|
226
238
|
'--cs-primary-800', '--cs-primary-900',
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { CompleteThemeConfig } from './types';
|
|
7
7
|
|
|
8
8
|
export class ThemeCSSUpdater {
|
|
9
|
-
private root;
|
|
9
|
+
private root: HTMLElement;
|
|
10
10
|
|
|
11
11
|
constructor() {
|
|
12
12
|
this.root = document.documentElement;
|
|
@@ -15,7 +15,8 @@ export class ThemeCSSUpdater {
|
|
|
15
15
|
/**
|
|
16
16
|
* Apply a complete theme configuration to CSS custom properties
|
|
17
17
|
*/
|
|
18
|
-
applyTheme(theme)
|
|
18
|
+
applyTheme(theme: CompleteThemeConfig): void {
|
|
19
|
+
this.applyColors(theme.colors);
|
|
19
20
|
this.applyFonts(theme.fonts);
|
|
20
21
|
this.applySpacing(theme.spacing);
|
|
21
22
|
this.applyShadows(theme.shadows);
|
|
@@ -26,7 +27,9 @@ export class ThemeCSSUpdater {
|
|
|
26
27
|
/**
|
|
27
28
|
* Apply color variables to CSS custom properties
|
|
28
29
|
*/
|
|
29
|
-
private applyColors(colors
|
|
30
|
+
private applyColors(colors: CompleteThemeConfig['colors']): void {
|
|
31
|
+
// Primary colors - set both flat and nested versions for compatibility
|
|
32
|
+
Object.entries(colors.primary).forEach(([shade, value]) => {
|
|
30
33
|
// Set flat version (for backward compatibility)
|
|
31
34
|
this.root.style.setProperty(`--cs-primary-${shade}`, value);
|
|
32
35
|
// Set nested version (for badge CSS and other components)
|
|
@@ -99,7 +102,9 @@ export class ThemeCSSUpdater {
|
|
|
99
102
|
/**
|
|
100
103
|
* Apply font variables to CSS custom properties
|
|
101
104
|
*/
|
|
102
|
-
private applyFonts(fonts])
|
|
105
|
+
private applyFonts(fonts: CompleteThemeConfig['fonts']): void {
|
|
106
|
+
// Helper function to build font family string with fallbacks
|
|
107
|
+
const buildFontFamily = (config: any) => {
|
|
103
108
|
if (config.fallbacks && config.fallbacks.length > 0) {
|
|
104
109
|
return `${config.family}, ${config.fallbacks.join(', ')}`;
|
|
105
110
|
}
|
|
@@ -141,7 +146,9 @@ export class ThemeCSSUpdater {
|
|
|
141
146
|
/**
|
|
142
147
|
* Apply spacing variables to CSS custom properties
|
|
143
148
|
*/
|
|
144
|
-
private applySpacing(spacing
|
|
149
|
+
private applySpacing(spacing: CompleteThemeConfig['spacing']): void {
|
|
150
|
+
// Scale spacing - set both flat and nested versions
|
|
151
|
+
Object.entries(spacing.scale).forEach(([size, value]) => {
|
|
145
152
|
// Set flat version (for backward compatibility)
|
|
146
153
|
this.root.style.setProperty(`--cs-spacing-${size}`, value);
|
|
147
154
|
// Set nested version (for badge CSS and other components)
|
|
@@ -171,7 +178,8 @@ export class ThemeCSSUpdater {
|
|
|
171
178
|
/**
|
|
172
179
|
* Apply shadow variables to CSS custom properties
|
|
173
180
|
*/
|
|
174
|
-
private applyShadows(shadows
|
|
181
|
+
private applyShadows(shadows: CompleteThemeConfig['shadows']): void {
|
|
182
|
+
Object.entries(shadows).forEach(([shadow, value]) => {
|
|
175
183
|
// Set flat version (for backward compatibility)
|
|
176
184
|
this.root.style.setProperty(`--cs-shadow-${shadow}`, value);
|
|
177
185
|
// Set nested version (for badge CSS and other components)
|
|
@@ -182,7 +190,9 @@ export class ThemeCSSUpdater {
|
|
|
182
190
|
/**
|
|
183
191
|
* Apply transition variables to CSS custom properties
|
|
184
192
|
*/
|
|
185
|
-
private applyTransitions(transitions
|
|
193
|
+
private applyTransitions(transitions: CompleteThemeConfig['transitions']): void {
|
|
194
|
+
// Duration - set both flat and nested versions
|
|
195
|
+
Object.entries(transitions.duration).forEach(([duration, value]) => {
|
|
186
196
|
// Set flat version (for backward compatibility)
|
|
187
197
|
this.root.style.setProperty(`--cs-transition-duration-${duration}`, value);
|
|
188
198
|
// Set nested version (for badge CSS and other components)
|
|
@@ -209,7 +219,8 @@ export class ThemeCSSUpdater {
|
|
|
209
219
|
/**
|
|
210
220
|
* Apply border radius variables to CSS custom properties
|
|
211
221
|
*/
|
|
212
|
-
private applyBorderRadius(borderRadius
|
|
222
|
+
private applyBorderRadius(borderRadius: CompleteThemeConfig['borderRadius']): void {
|
|
223
|
+
Object.entries(borderRadius).forEach(([size, value]) => {
|
|
213
224
|
// Set flat version (for backward compatibility)
|
|
214
225
|
this.root.style.setProperty(`--cs-border-radius-${size}`, value);
|
|
215
226
|
// Set nested version (for badge CSS and other components)
|
|
@@ -220,7 +231,8 @@ export class ThemeCSSUpdater {
|
|
|
220
231
|
/**
|
|
221
232
|
* Clear all theme CSS variables
|
|
222
233
|
*/
|
|
223
|
-
clearTheme()
|
|
234
|
+
clearTheme(): void {
|
|
235
|
+
const cssVars = [
|
|
224
236
|
'--cs-primary-50', '--cs-primary-100', '--cs-primary-200', '--cs-primary-300',
|
|
225
237
|
'--cs-primary-400', '--cs-primary-500', '--cs-primary-600', '--cs-primary-700',
|
|
226
238
|
'--cs-primary-800', '--cs-primary-900',
|