@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.37 → 0.2.39

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rakeyshgidwani/roger-ui-bank-theme-stan-design",
3
- "version": "0.2.37",
3
+ "version": "0.2.39",
4
4
  "description": "Roger UI stan-design theme - Complete design system with components, styles, and utilities",
5
5
  "keywords": [
6
6
  "design-system",
@@ -9,9 +9,19 @@ export const ThemeToggle: React.FC = () => {
9
9
  const [isDark, setIsDark] = useState(false);
10
10
 
11
11
  useEffect(() => {
12
- // Check initial theme
13
- const isDarkMode = document.documentElement.classList.contains('dark');
12
+ // Check initial theme from localStorage and DOM
13
+ const savedTheme = localStorage.getItem('theme');
14
+ const isDarkMode = savedTheme === 'dark' ||
15
+ (savedTheme === null && document.documentElement.classList.contains('dark'));
16
+
14
17
  setIsDark(isDarkMode);
18
+
19
+ // Ensure DOM is in sync
20
+ if (isDarkMode) {
21
+ document.documentElement.classList.add('dark');
22
+ } else {
23
+ document.documentElement.classList.remove('dark');
24
+ }
15
25
  }, []);
16
26
 
17
27
  const toggleTheme = () => {
@@ -32,10 +42,15 @@ export const ThemeToggle: React.FC = () => {
32
42
  variant="ghost"
33
43
  size="sm"
34
44
  onClick={toggleTheme}
35
- className="h-8 w-8 px-0"
45
+ className="theme-toggle h-8 w-8 px-0"
36
46
  aria-label={`Switch to ${isDark ? 'light' : 'dark'} mode`}
47
+ aria-pressed={isDark}
37
48
  >
38
- {isDark ? <Sun className="h-4 w-4" /> : <Moon className="h-4 w-4" />}
49
+ {isDark ? (
50
+ <Sun className="h-4 w-4 sun-icon" />
51
+ ) : (
52
+ <Moon className="h-4 w-4 moon-icon" />
53
+ )}
39
54
  </Button>
40
55
  );
41
56
  };
@@ -89,6 +89,8 @@
89
89
  }
90
90
 
91
91
  /* Base Badge Component - Using Original Poker Project Styling */
92
+ @layer components {
93
+
92
94
  .badge {
93
95
  /* Layout */
94
96
  display: inline-flex;
@@ -426,3 +428,5 @@
426
428
  grid-template-columns: 1fr 1fr !important;
427
429
  }
428
430
  }
431
+
432
+ } /* End @layer components */
@@ -179,6 +179,8 @@
179
179
  }
180
180
 
181
181
  /* Base Button Component */
182
+ @layer components {
183
+
182
184
  .button {
183
185
  /* Layout */
184
186
  display: inline-flex;
@@ -527,14 +529,7 @@
527
529
  border-color: var(--cs-modes-dark-colors-border);
528
530
  }
529
531
 
530
- .dark .button--variant-ghost {
531
- color: var(--cs-modes-dark-colors-text-secondary);
532
- }
533
-
534
- .dark .button--variant-ghost:hover {
535
- background-color: var(--cs-modes-dark-colors-interactive-hover);
536
- color: var(--cs-modes-dark-colors-text-primary);
537
- }
532
+ /* Ghost variant automatically adapts to theme via CSS variables */
538
533
 
539
534
  .dark .button--variant-destructive {
540
535
  background-color: var(--cs-modes-dark-colors-semantic-error);
@@ -772,3 +767,5 @@
772
767
  transition: none;
773
768
  }
774
769
  }
770
+
771
+ } /* End @layer components */
@@ -133,6 +133,8 @@
133
133
  }
134
134
 
135
135
  /* Base Card Component */
136
+ @layer components {
137
+
136
138
  .card {
137
139
  /* Base Styles */
138
140
  background-color: var(--card-background);
@@ -599,3 +601,5 @@
599
601
  box-shadow: var(--card-shadow-base);
600
602
  transform: none;
601
603
  }
604
+
605
+ } /* End @layer components */
@@ -37,6 +37,8 @@
37
37
  }
38
38
 
39
39
  /* Checkbox Base Styles */
40
+ @layer components {
41
+
40
42
  .checkbox {
41
43
  position: relative;
42
44
  display: inline-flex;
@@ -440,3 +442,5 @@
440
442
  background-color: var(--cs-colors-semantic-info);
441
443
  color: var(--cs-colors-text-on-primary);
442
444
  }
445
+
446
+ } /* End @layer components */
@@ -164,6 +164,8 @@
164
164
  }
165
165
 
166
166
  /* Input Base Styles */
167
+ @layer components {
168
+
167
169
  .input {
168
170
  position: relative;
169
171
  display: block;
@@ -885,3 +887,5 @@
885
887
  border-width: var(--input-border-width-normal);
886
888
  }
887
889
  }
890
+
891
+ } /* End @layer components */
@@ -56,6 +56,8 @@
56
56
  }
57
57
 
58
58
  /* Base Label Styles */
59
+ @layer components {
60
+
59
61
  .label {
60
62
  display: inline-block;
61
63
  font-family: var(--cs-fonts-primary-family), var(--cs-fonts-primary-fallbacks);
@@ -294,3 +296,5 @@
294
296
  background: var(--cs-print-background-color);
295
297
  }
296
298
  }
299
+
300
+ } /* End @layer components */
@@ -0,0 +1,4 @@
1
+ /* UI Components */
2
+ /* Interactive UI components and widgets */
3
+
4
+ @import './theme-toggle.css';
@@ -0,0 +1,200 @@
1
+ /* ThemeToggle Component Styles */
2
+ /* Using semantic CSS architecture with CSS variables and BEM methodology */
3
+
4
+ /* ThemeToggle Component CSS Variables */
5
+ :root {
6
+ /* ThemeToggle Base Variables */
7
+ --theme-toggle-transition: var(--cs-transitions-properties-colors);
8
+ --theme-toggle-icon-size: var(--cs-spacing-scale-md);
9
+ --theme-toggle-background: transparent;
10
+
11
+ /* ThemeToggle Color Variables - using theme-aware design system variables */
12
+ --theme-toggle-text: var(--cs-colors-text-secondary);
13
+ --theme-toggle-text-hover: var(--cs-colors-text-primary);
14
+ --theme-toggle-background-hover: var(--cs-colors-interactive-hover);
15
+ --theme-toggle-focus-ring: var(--cs-colors-primary);
16
+
17
+ /* ThemeToggle State Variables */
18
+ --theme-toggle-active-background: var(--cs-colors-interactive-active);
19
+ --theme-toggle-active-text: var(--cs-colors-primary);
20
+
21
+ /* ThemeToggle Animation Variables */
22
+ --theme-toggle-animation-duration: var(--cs-animation-duration-fast);
23
+ --theme-toggle-animation-easing: var(--cs-animation-easing-ease-out);
24
+ --theme-toggle-transform-scale: var(--cs-animation-transforms-scale);
25
+ }
26
+
27
+ /* Base ThemeToggle Styles */
28
+ @layer components {
29
+
30
+ .theme-toggle {
31
+ position: relative;
32
+ display: inline-flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ color: var(--theme-toggle-text);
36
+ background-color: var(--theme-toggle-background);
37
+ transition: var(--theme-toggle-transition);
38
+ border-radius: var(--cs-border-radius-sm);
39
+ cursor: pointer;
40
+ overflow: hidden;
41
+ }
42
+
43
+ /* ThemeToggle Icon Styles */
44
+ .theme-toggle svg {
45
+ width: var(--theme-toggle-icon-size);
46
+ height: var(--theme-toggle-icon-size);
47
+ transition: var(--theme-toggle-transition);
48
+ stroke-width: 1.5;
49
+ }
50
+
51
+ /* ThemeToggle Hover State */
52
+ .theme-toggle:hover {
53
+ color: var(--theme-toggle-text-hover);
54
+ background-color: var(--theme-toggle-background-hover);
55
+ transform: var(--theme-toggle-transform-scale);
56
+ }
57
+
58
+ .theme-toggle:hover svg {
59
+ color: var(--theme-toggle-text-hover);
60
+ }
61
+
62
+ /* ThemeToggle Focus State */
63
+ .theme-toggle:focus-visible {
64
+ outline: var(--cs-accessibility-focus-ring-width) solid var(--theme-toggle-focus-ring);
65
+ outline-offset: var(--cs-accessibility-focus-ring-offset);
66
+ }
67
+
68
+ /* ThemeToggle Active State */
69
+ .theme-toggle:active {
70
+ background-color: var(--theme-toggle-active-background);
71
+ color: var(--theme-toggle-active-text);
72
+ transform: translateY(1px);
73
+ }
74
+
75
+ /* ThemeToggle Icon Animation */
76
+ .theme-toggle svg {
77
+ transition: transform var(--theme-toggle-animation-duration) var(--theme-toggle-animation-easing);
78
+ }
79
+
80
+ .theme-toggle:hover svg {
81
+ transform: rotate(180deg);
82
+ }
83
+
84
+ /* Light Mode Icon (Moon) Animation */
85
+ .theme-toggle .moon-icon {
86
+ transform: rotate(0deg);
87
+ }
88
+
89
+ .theme-toggle:hover .moon-icon {
90
+ transform: rotate(-30deg) scale(1.1);
91
+ }
92
+
93
+ /* Dark Mode Icon (Sun) Animation */
94
+ .theme-toggle .sun-icon {
95
+ transform: rotate(0deg);
96
+ }
97
+
98
+ .theme-toggle:hover .sun-icon {
99
+ transform: rotate(180deg) scale(1.1);
100
+ }
101
+
102
+ /* Theme transition effects */
103
+ .theme-toggle::before {
104
+ content: '';
105
+ position: absolute;
106
+ top: 0;
107
+ left: 0;
108
+ right: 0;
109
+ bottom: 0;
110
+ background: linear-gradient(45deg, var(--cs-colors-primary), var(--cs-colors-primary-hover));
111
+ opacity: 0;
112
+ transition: opacity var(--theme-toggle-animation-duration) var(--theme-toggle-animation-easing);
113
+ border-radius: inherit;
114
+ z-index: -1;
115
+ }
116
+
117
+ .theme-toggle:hover::before {
118
+ opacity: 0.1;
119
+ }
120
+
121
+ /* Dark mode specific adjustments (these automatically switch via CSS variables) */
122
+ /* No explicit .dark selectors needed - the design system variables handle this */
123
+
124
+ /* Responsive adjustments */
125
+ @media (max-width: 768px) {
126
+ .theme-toggle {
127
+ min-height: 44px;
128
+ min-width: 44px;
129
+ touch-action: manipulation;
130
+ -webkit-tap-highlight-color: transparent;
131
+ }
132
+
133
+ .theme-toggle svg {
134
+ width: var(--cs-spacing-scale-lg);
135
+ height: var(--cs-spacing-scale-lg);
136
+ }
137
+ }
138
+
139
+ /* High contrast mode support */
140
+ @media (prefers-contrast: high) {
141
+ .theme-toggle {
142
+ border: var(--cs-accessibility-high-contrast-border-width) solid var(--theme-toggle-text);
143
+ }
144
+
145
+ .theme-toggle:focus-visible {
146
+ outline-width: var(--cs-accessibility-high-contrast-outline-width);
147
+ }
148
+ }
149
+
150
+ /* Reduced motion support */
151
+ @media (prefers-reduced-motion: reduce) {
152
+ .theme-toggle,
153
+ .theme-toggle svg,
154
+ .theme-toggle::before {
155
+ transition: none;
156
+ animation: none;
157
+ }
158
+
159
+ .theme-toggle:hover svg {
160
+ transform: none;
161
+ }
162
+ }
163
+
164
+ /* Print styles */
165
+ @media print {
166
+ .theme-toggle {
167
+ display: none; /* Hide theme toggle in print */
168
+ }
169
+ }
170
+
171
+ /* ThemeToggle accessibility enhancements */
172
+ .theme-toggle[aria-pressed="true"] {
173
+ background-color: var(--theme-toggle-active-background);
174
+ color: var(--theme-toggle-active-text);
175
+ }
176
+
177
+ .theme-toggle[aria-pressed="true"]::before {
178
+ opacity: 0.15;
179
+ }
180
+
181
+ /* Loading state */
182
+ .theme-toggle[data-loading="true"] {
183
+ pointer-events: none;
184
+ opacity: 0.7;
185
+ }
186
+
187
+ .theme-toggle[data-loading="true"] svg {
188
+ animation: spin var(--cs-animation-duration-slow) linear infinite;
189
+ }
190
+
191
+ @keyframes spin {
192
+ from {
193
+ transform: rotate(0deg);
194
+ }
195
+ to {
196
+ transform: rotate(360deg);
197
+ }
198
+ }
199
+
200
+ } /* End @layer components */
@@ -12,40 +12,19 @@
12
12
 
13
13
  @layer reset, base, themes, components, utilities, overrides;
14
14
 
15
- /* Reset layer - CSS reset and normalization */
16
- @layer reset {
17
- @import '../base/reset.css';
18
- }
19
-
20
- /* Base layer - foundational styles */
21
- @layer base {
22
- @import '../base/typography.css';
23
- @import '../base/variables.css';
24
- }
25
-
26
- /* Themes layer - theme-specific variables and styles */
27
- @layer themes {
28
- @import '../themes/index.css';
29
- }
30
-
31
- /* Components layer - all UI component styles */
32
- @layer components {
33
- @import '../components/base/index.css';
34
- @import '../components/navigation/index.css';
35
- @import '../components/data-display/index.css';
36
- @import '../components/feedback/index.css';
37
- @import '../components/overlay/index.css';
38
- }
39
-
40
- /* Utilities layer - utility classes and system styles */
41
- @layer utilities {
42
- @import '../utilities/index.css';
43
- }
44
-
45
- /* Overrides layer - highest priority application-specific overrides */
46
- @layer overrides {
47
- @import './overrides.css';
48
- }
15
+ /* Modern CSS layers syntax - imports with layer assignment */
16
+ @import '../base/reset.css' layer(reset);
17
+ @import '../base/typography.css' layer(base);
18
+ @import '../base/variables.css' layer(base);
19
+ @import '../themes/index.css' layer(themes);
20
+ @import '../components/base/index.css' layer(components);
21
+ @import '../components/ui/index.css' layer(components);
22
+ @import '../components/navigation/index.css' layer(components);
23
+ @import '../components/data-display/index.css' layer(components);
24
+ @import '../components/feedback/index.css' layer(components);
25
+ @import '../components/overlay/index.css' layer(components);
26
+ @import '../utilities/index.css' layer(utilities);
27
+ @import './overrides.css' layer(overrides);
49
28
 
50
29
  /* Development validation tools (only in development) */
51
30
  /* @import './validation.css'; */
@@ -0,0 +1,95 @@
1
+ /* Design System Utilities */
2
+ /* Custom utility classes for design system integration */
3
+
4
+ @layer utilities {
5
+ /* Custom Focus Ring Utilities */
6
+ .focus\:ring-cs-primary {
7
+ --tw-ring-color: var(--cs-colors-primary);
8
+ }
9
+
10
+ .focus\:ring-cs-secondary {
11
+ --tw-ring-color: var(--cs-colors-secondary-500);
12
+ }
13
+
14
+ .focus\:ring-cs-info {
15
+ --tw-ring-color: var(--cs-colors-semantic-info);
16
+ }
17
+
18
+ .focus\:ring-cs-success {
19
+ --tw-ring-color: var(--cs-colors-semantic-success);
20
+ }
21
+
22
+ .focus\:ring-cs-warning {
23
+ --tw-ring-color: var(--cs-colors-semantic-warning);
24
+ }
25
+
26
+ .focus\:ring-cs-error {
27
+ --tw-ring-color: var(--cs-colors-semantic-error);
28
+ }
29
+
30
+ /* Custom Border Color Utilities */
31
+ .focus\:border-cs-primary {
32
+ --tw-border-opacity: 1;
33
+ border-color: rgb(var(--cs-colors-primary-500-rgb) / var(--tw-border-opacity));
34
+ }
35
+
36
+ .focus\:border-cs-secondary {
37
+ --tw-border-opacity: 1;
38
+ border-color: rgb(var(--cs-colors-secondary-500-rgb) / var(--tw-border-opacity));
39
+ }
40
+
41
+ /* Custom Background Color Utilities */
42
+ .bg-cs-primary {
43
+ --tw-bg-opacity: 1;
44
+ background-color: var(--cs-colors-primary);
45
+ }
46
+
47
+ .bg-cs-secondary {
48
+ --tw-bg-opacity: 1;
49
+ background-color: var(--cs-colors-secondary-500);
50
+ }
51
+
52
+ .bg-cs-surface-bg {
53
+ --tw-bg-opacity: 1;
54
+ background-color: var(--cs-colors-surface-background);
55
+ }
56
+
57
+ /* Custom Text Color Utilities */
58
+ .text-cs-text-primary {
59
+ --tw-text-opacity: 1;
60
+ color: var(--cs-colors-text-primary);
61
+ }
62
+
63
+ .text-cs-text-secondary {
64
+ --tw-text-opacity: 1;
65
+ color: var(--cs-colors-text-secondary);
66
+ }
67
+
68
+ /* Custom Border Utilities */
69
+ .border-cs-border {
70
+ --tw-border-opacity: 1;
71
+ border-color: var(--cs-colors-border);
72
+ }
73
+
74
+ /* Custom Hover State Utilities */
75
+ .hover\:bg-cs-secondary-hover:hover {
76
+ --tw-bg-opacity: 1;
77
+ background-color: var(--cs-colors-secondary-400);
78
+ }
79
+
80
+ .hover\:bg-cs-primary-hover:hover {
81
+ --tw-bg-opacity: 1;
82
+ background-color: var(--cs-colors-primary-hover);
83
+ }
84
+
85
+ /* Custom Active State Utilities */
86
+ .active\:bg-cs-secondary-active:active {
87
+ --tw-bg-opacity: 1;
88
+ background-color: var(--cs-colors-secondary-600);
89
+ }
90
+
91
+ .active\:bg-cs-primary-active:active {
92
+ --tw-bg-opacity: 1;
93
+ background-color: var(--cs-colors-primary-active);
94
+ }
95
+ }
@@ -17,4 +17,7 @@
17
17
  @import './enterprise-mobile-experience.css';
18
18
  @import './semantic-input-system.css';
19
19
 
20
+ /* Design system integration utilities */
21
+ @import './design-system-utilities.css';
22
+
20
23
  /* Additional utility classes would be added here */