@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.1.5 → 0.1.7
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/index.d.ts +7 -0
- package/dist/index.esm.js +18 -1
- package/dist/index.js +18 -1
- package/dist/setupTests.d.ts +124 -0
- package/dist/setupTests.esm.js +122 -0
- package/dist/setupTests.js +122 -0
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/src/index.css +1046 -0
- package/src/index.ts +18 -0
- package/src/plugins/theme-css-generator.ts +354 -0
- package/src/setupTests.ts +124 -0
- package/src/stories/README.md +39 -0
- package/src/stories/components/ThemeDebugger.tsx +143 -0
- package/src/stories/index.ts +29 -0
- package/src/stories/storybook-theme-imports.css +51 -0
- package/src/styles/base/fonts.css +30 -0
- package/src/styles/base/generated-theme-variables.css +573 -0
- package/src/styles/base/index.css +7 -0
- package/src/styles/base/reset.css +48 -0
- package/src/styles/base/theme.css +1068 -0
- package/src/styles/base/typography.css +68 -0
- package/src/styles/base/variables.css +5 -0
- package/src/styles/components/CLAUDE.md +62 -0
- package/src/styles/components/base/badge.css +428 -0
- package/src/styles/components/base/button.css +774 -0
- package/src/styles/components/base/card.css +601 -0
- package/src/styles/components/base/checkbox.css +442 -0
- package/src/styles/components/base/index.css +9 -0
- package/src/styles/components/base/input.css +887 -0
- package/src/styles/components/base/label.css +296 -0
- package/src/styles/components/data-display/chart.css +353 -0
- package/src/styles/components/data-display/data-grid.css +619 -0
- package/src/styles/components/data-display/index.css +9 -0
- package/src/styles/components/data-display/list.css +560 -0
- package/src/styles/components/data-display/table.css +498 -0
- package/src/styles/components/data-display/timeline.css +764 -0
- package/src/styles/components/data-display/tree.css +881 -0
- package/src/styles/components/feedback/alert.css +358 -0
- package/src/styles/components/feedback/index.css +7 -0
- package/src/styles/components/feedback/progress.css +435 -0
- package/src/styles/components/feedback/skeleton.css +337 -0
- package/src/styles/components/feedback/toast.css +564 -0
- package/src/styles/components/index.css +17 -0
- package/src/styles/components/navigation/breadcrumb.css +465 -0
- package/src/styles/components/navigation/index.css +9 -0
- package/src/styles/components/navigation/menu.css +572 -0
- package/src/styles/components/navigation/pagination.css +635 -0
- package/src/styles/components/navigation/sidebar.css +807 -0
- package/src/styles/components/navigation/stepper.css +519 -0
- package/src/styles/components/navigation/tabs.css +404 -0
- package/src/styles/components/overlay/backdrop.css +243 -0
- package/src/styles/components/overlay/index.css +8 -0
- package/src/styles/components/overlay/modal.css +482 -0
- package/src/styles/components/overlay/popover.css +607 -0
- package/src/styles/components/overlay/portal.css +213 -0
- package/src/styles/components/overlay/tooltip.css +488 -0
- package/src/styles/generated-theme-variables.css +573 -0
- package/src/styles/index.css +5 -0
- package/src/styles/layers/index.css +54 -0
- package/src/styles/layers/overrides.css +108 -0
- package/src/styles/layers/validation.css +159 -0
- package/src/styles/layers/validation.js +310 -0
- package/src/styles/themes/default.css +450 -0
- package/src/styles/themes/enterprise.css +370 -0
- package/src/styles/themes/harvey.css +436 -0
- package/src/styles/themes/index.css +4 -0
- package/src/styles/themes/stan-design.css +572 -0
- package/src/styles/utilities/advanced-transition-system.css +467 -0
- package/src/styles/utilities/battery-conscious-animations.css +289 -0
- package/src/styles/utilities/enterprise-mobile-experience.css +817 -0
- package/src/styles/utilities/hardware-acceleration.css +121 -0
- package/src/styles/utilities/index.css +20 -0
- package/src/styles/utilities/mobile-skeleton-loading.css +596 -0
- package/src/styles/utilities/semantic-input-system.css +451 -0
- package/src/styles/utilities/touch-friendly-interface.css +247 -0
- package/src/styles/utilities/touch-optimization.css +165 -0
- package/src/test-utils/index.ts +7 -0
- package/src/test-utils/theme-testing.tsx +219 -0
- package/src/testing/test-automation.ts +627 -0
- package/src/testing/test-utils.tsx +367 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/* Typography - Base Layer */
|
|
2
|
+
/* Base typography styles using design system variables */
|
|
3
|
+
|
|
4
|
+
body {
|
|
5
|
+
font-family: var(--cs-fonts-body-family, 'Inter', -apple-system, BlinkMacSystemFont, sans-serif);
|
|
6
|
+
font-size: var(--cs-fonts-body-size, 16px);
|
|
7
|
+
font-weight: var(--cs-fonts-body-weight, 400);
|
|
8
|
+
line-height: var(--cs-fonts-body-line-height, 1.5);
|
|
9
|
+
color: var(--cs-colors-text-primary, #0f172a);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
h1,
|
|
13
|
+
h2,
|
|
14
|
+
h3,
|
|
15
|
+
h4,
|
|
16
|
+
h5,
|
|
17
|
+
h6 {
|
|
18
|
+
font-family: var(--cs-fonts-heading-family, 'Inter', -apple-system, BlinkMacSystemFont, sans-serif);
|
|
19
|
+
font-weight: var(--cs-fonts-heading-weight, 600);
|
|
20
|
+
line-height: var(--cs-fonts-heading-line-height, 1.2);
|
|
21
|
+
color: var(--cs-colors-text-primary, #0f172a);
|
|
22
|
+
margin-bottom: var(--cs-spacing-scale-3, 0.75rem);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
h1 {
|
|
26
|
+
font-size: var(--cs-fonts-heading-h1-size, 2.25rem);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
h2 {
|
|
30
|
+
font-size: var(--cs-fonts-heading-h2-size, 1.875rem);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
h3 {
|
|
34
|
+
font-size: var(--cs-fonts-heading-h3-size, 1.5rem);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
h4 {
|
|
38
|
+
font-size: var(--cs-fonts-heading-h4-size, 1.25rem);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
h5 {
|
|
42
|
+
font-size: var(--cs-fonts-heading-h5-size, 1.125rem);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
h6 {
|
|
46
|
+
font-size: var(--cs-fonts-heading-h6-size, 1rem);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
p {
|
|
50
|
+
margin-bottom: var(--cs-spacing-scale-3, 0.75rem);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
a {
|
|
54
|
+
color: var(--cs-colors-primary, #3b82f6);
|
|
55
|
+
text-decoration: underline;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
a:hover {
|
|
59
|
+
color: var(--cs-colors-primary-hover, #2563eb);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
code {
|
|
63
|
+
font-family: var(--cs-fonts-mono-family, 'Monaco', 'Menlo', 'Ubuntu Mono', monospace);
|
|
64
|
+
font-size: var(--cs-fonts-mono-size, 0.875rem);
|
|
65
|
+
background-color: var(--cs-colors-surface-secondary, #f1f5f9);
|
|
66
|
+
padding: var(--cs-spacing-scale-1, 0.25rem) var(--cs-spacing-scale-2, 0.5rem);
|
|
67
|
+
border-radius: var(--cs-border-radius-sm, 0.25rem);
|
|
68
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# CSS Rules and Best Practices
|
|
2
|
+
|
|
3
|
+
## Core Principles
|
|
4
|
+
- Only use the design system variables, do not use any generic or tailwind variables
|
|
5
|
+
- Follow semantic CSS architecture with BEM methodology
|
|
6
|
+
- Maintain consistency across all components
|
|
7
|
+
- Ensure accessibility and responsive design
|
|
8
|
+
|
|
9
|
+
## Design System Integration
|
|
10
|
+
- **Colors**: Always use `var(--cs-colors-*)` variables instead of hardcoded hex values
|
|
11
|
+
- **Spacing**: Use `var(--cs-spacing-scale-*)` for margins, padding, and gaps
|
|
12
|
+
- **Typography**: Use `var(--cs-fonts-*)` for font sizes, weights, and families
|
|
13
|
+
- **Shadows**: Use `var(--cs-shadows-*)` for box-shadow values
|
|
14
|
+
- **Border Radius**: Use `var(--cs-border-radius-*)` for border-radius values
|
|
15
|
+
- **Transitions**: Use `var(--cs-transitions-*)` for animation durations and easing
|
|
16
|
+
|
|
17
|
+
## Responsive Design Rules
|
|
18
|
+
- **Media Queries**: Use hardcoded breakpoints (e.g., `@media (min-width: 768px)`) instead of CSS variables
|
|
19
|
+
- **CSS Variables in Media Queries**: Never use `var(--cs-breakpoints-*)` inside `@media` rules - this will break
|
|
20
|
+
- **Breakpoint Values**:
|
|
21
|
+
- Mobile: 640px
|
|
22
|
+
- Tablet: 768px
|
|
23
|
+
- Desktop: 1024px
|
|
24
|
+
- Wide: 1280px
|
|
25
|
+
- Ultra: 1536px
|
|
26
|
+
- **Container Queries**: Consider using `@container` for component-level responsiveness when appropriate
|
|
27
|
+
|
|
28
|
+
## CSS Architecture
|
|
29
|
+
- **Component Isolation**: Each component should have its own CSS file
|
|
30
|
+
- **CSS Import Strategy**: Use direct JavaScript imports in Storybook instead of CSS `@import` statements
|
|
31
|
+
- **CSS Specificity**: Use `!important` sparingly and only when necessary to override conflicting styles
|
|
32
|
+
- **CSS Variables**: Define component-specific variables with fallbacks: `var(--component-var, fallback-value)`
|
|
33
|
+
|
|
34
|
+
## Storybook Compatibility
|
|
35
|
+
- **CSS Loading**: Import CSS files directly in `.storybook/preview.tsx` for reliable loading
|
|
36
|
+
- **Theme CSS Generation**: Ensure theme CSS generator runs in Storybook builds
|
|
37
|
+
- **CSS Processing**: Avoid PostCSS-dependent features like `@custom-media` unless explicitly configured
|
|
38
|
+
- **CSS Variables**: All design system variables must be available before component CSS loads
|
|
39
|
+
|
|
40
|
+
## Component Styling Patterns
|
|
41
|
+
- **Flexbox Layouts**: Use `display: flex` with `flex-wrap: wrap` for responsive button grids
|
|
42
|
+
- **Grid Layouts**: Use CSS Grid for responsive column layouts
|
|
43
|
+
- **Gap Management**: Use design system spacing variables for consistent gaps
|
|
44
|
+
- **Width Management**: Set `width: 100%` on flex containers to ensure proper wrapping behavior
|
|
45
|
+
|
|
46
|
+
## Error Prevention
|
|
47
|
+
- **No Hardcoded Values**: Never use values like `1rem`, `#ffffff`, `768px` directly in CSS
|
|
48
|
+
- **Fallback Values**: Always provide fallback values in CSS variable declarations
|
|
49
|
+
- **Type Safety**: Ensure all design system variables are properly typed in TypeScript interfaces
|
|
50
|
+
- **Build Validation**: Run `npm run build` and `npm test` after any CSS changes
|
|
51
|
+
|
|
52
|
+
## Performance Considerations
|
|
53
|
+
- **CSS Generation**: Use build-time CSS generation from TypeScript theme definitions
|
|
54
|
+
- **CSS Imports**: Minimize CSS imports to only necessary files
|
|
55
|
+
- **CSS Variables**: Leverage CSS variables for runtime theme switching
|
|
56
|
+
- **CSS Optimization**: Ensure generated CSS is optimized and minified in production builds
|
|
57
|
+
|
|
58
|
+
## Testing and Validation
|
|
59
|
+
- **Storybook Testing**: Test all responsive behaviors in Storybook viewport modes
|
|
60
|
+
- **Cross-Browser**: Ensure CSS works across different browsers and devices
|
|
61
|
+
- **Theme Switching**: Test light/dark mode switching in Storybook
|
|
62
|
+
- **Responsive Behavior**: Verify breakpoint behavior at exact pixel values
|
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
/* Badge Component Styles */
|
|
2
|
+
/* Using semantic CSS architecture with CSS variables and BEM methodology */
|
|
3
|
+
|
|
4
|
+
/* Badge Component CSS Variables */
|
|
5
|
+
:root {
|
|
6
|
+
/* Badge Base Variables */
|
|
7
|
+
--badge-height: var(--cs-spacing-scale-lg);
|
|
8
|
+
--badge-padding-y: var(--cs-spacing-scale-xs);
|
|
9
|
+
--badge-padding-x: var(--cs-spacing-scale-sm);
|
|
10
|
+
--badge-font-size: var(--cs-fonts-primary-sizes-xs);
|
|
11
|
+
--badge-font-weight: var(--cs-fonts-primary-weights-semibold);
|
|
12
|
+
--badge-line-height: var(--cs-fonts-primary-line-heights-tight);
|
|
13
|
+
--badge-border-width: var(--cs-spacing-scale-xs);
|
|
14
|
+
--badge-border-radius: var(--cs-border-radius-full);
|
|
15
|
+
--badge-transition: var(--cs-transitions-properties-colors);
|
|
16
|
+
|
|
17
|
+
/* Badge Variant Variables - Using Original Poker Project Colors */
|
|
18
|
+
--badge-default-background: var(--cs-colors-primary-500);
|
|
19
|
+
--badge-default-text: var(--cs-colors-text-inverse);
|
|
20
|
+
--badge-default-border: var(--cs-colors-border-transparent);
|
|
21
|
+
|
|
22
|
+
--badge-secondary-background: var(--cs-colors-surface-surface);
|
|
23
|
+
--badge-secondary-text: var(--cs-colors-text-primary);
|
|
24
|
+
--badge-secondary-border: var(--cs-colors-border-transparent);
|
|
25
|
+
|
|
26
|
+
--badge-destructive-background: var(--cs-colors-semantic-error);
|
|
27
|
+
--badge-destructive-text: var(--cs-colors-text-inverse);
|
|
28
|
+
--badge-destructive-border: var(--cs-colors-border-transparent);
|
|
29
|
+
|
|
30
|
+
--badge-outline-background: var(--cs-colors-border-transparent);
|
|
31
|
+
--badge-outline-text: var(--cs-colors-text-primary);
|
|
32
|
+
--badge-outline-border: var(--cs-colors-border-transparent);
|
|
33
|
+
|
|
34
|
+
/* Badge Hover State Variables - Using Original Poker Project Colors */
|
|
35
|
+
--badge-default-hover: var(--cs-colors-primary-hover);
|
|
36
|
+
--badge-secondary-hover: var(--cs-colors-interactive-hover);
|
|
37
|
+
--badge-destructive-hover: var(--cs-colors-semantic-error-dark);
|
|
38
|
+
--badge-outline-hover: var(--cs-colors-interactive-hover);
|
|
39
|
+
--badge-outline-hover-border: var(--cs-colors-border-transparent);
|
|
40
|
+
|
|
41
|
+
/* Badge Interactive State Variables */
|
|
42
|
+
--badge-hover-transform: translateY(calc(-1 * var(--cs-spacing-scale-xs)));
|
|
43
|
+
--badge-hover-shadow: var(--cs-shadows-md);
|
|
44
|
+
--badge-focus-outline: var(--cs-spacing-scale-xs) solid var(--cs-colors-interactive-focus);
|
|
45
|
+
--badge-focus-offset: var(--cs-spacing-scale-xs);
|
|
46
|
+
--badge-active-transform: translateY(0);
|
|
47
|
+
--badge-active-shadow: var(--cs-shadows-sm);
|
|
48
|
+
--badge-focus-ring-outline: var(--cs-spacing-scale-xs) solid var(--cs-colors-interactive-focus);
|
|
49
|
+
--badge-focus-ring-offset: var(--cs-spacing-scale-xs);
|
|
50
|
+
|
|
51
|
+
/* Badge High Contrast Variables */
|
|
52
|
+
--badge-high-contrast-border-width: var(--cs-spacing-scale-xs);
|
|
53
|
+
--badge-outline-high-contrast-border-width: var(--cs-spacing-scale-xs);
|
|
54
|
+
|
|
55
|
+
/* Badge Responsive Variables */
|
|
56
|
+
--badge-mobile-font-size: var(--cs-fonts-primary-sizes-xs);
|
|
57
|
+
--badge-mobile-padding-y: var(--cs-spacing-scale-xs);
|
|
58
|
+
--badge-mobile-padding-x: var(--cs-spacing-scale-sm);
|
|
59
|
+
--badge-container-font-size: var(--cs-fonts-primary-sizes-sm);
|
|
60
|
+
|
|
61
|
+
/* Badge Size Variables */
|
|
62
|
+
--badge-sm-height: var(--cs-spacing-scale-md);
|
|
63
|
+
--badge-sm-padding-y: var(--cs-spacing-scale-xs);
|
|
64
|
+
--badge-sm-padding-x: var(--cs-spacing-scale-sm);
|
|
65
|
+
--badge-sm-font-size: var(--cs-fonts-primary-sizes-xs);
|
|
66
|
+
|
|
67
|
+
--badge-lg-height: var(--cs-spacing-scale-xl);
|
|
68
|
+
--badge-lg-padding-y: var(--cs-spacing-scale-sm);
|
|
69
|
+
--badge-lg-padding-x: var(--cs-spacing-scale-sm);
|
|
70
|
+
--badge-lg-font-size: var(--cs-fonts-primary-sizes-sm);
|
|
71
|
+
|
|
72
|
+
/* Badge Element Variables */
|
|
73
|
+
--badge-icon-margin: var(--cs-spacing-scale-xs);
|
|
74
|
+
--badge-icon-size: var(--cs-fonts-primary-sizes-sm);
|
|
75
|
+
|
|
76
|
+
/* Badge Showcase Variables */
|
|
77
|
+
--badge-showcase-gap: var(--cs-spacing-scale-md);
|
|
78
|
+
--badge-status-showcase-gap: var(--cs-spacing-scale-sm);
|
|
79
|
+
--badge-status-item-gap: var(--cs-spacing-scale-sm);
|
|
80
|
+
--badge-status-text-size: var(--cs-fonts-primary-sizes-sm);
|
|
81
|
+
--badge-notification-text-size: var(--cs-fonts-primary-sizes-sm);
|
|
82
|
+
--badge-category-title-size: var(--cs-fonts-primary-sizes-lg);
|
|
83
|
+
--badge-category-title-weight: var(--cs-fonts-primary-weights-semibold);
|
|
84
|
+
--badge-category-grid-gap: var(--cs-spacing-scale-sm);
|
|
85
|
+
--badge-responsive-grid-gap: var(--cs-spacing-scale-md);
|
|
86
|
+
--badge-responsive-title-size: var(--cs-fonts-primary-sizes-md);
|
|
87
|
+
--badge-responsive-title-weight: var(--cs-fonts-primary-weights-medium);
|
|
88
|
+
--badge-responsive-badges-gap: var(--cs-spacing-scale-sm);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* Base Badge Component - Using Original Poker Project Styling */
|
|
92
|
+
.badge {
|
|
93
|
+
/* Layout */
|
|
94
|
+
display: inline-flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
justify-content: center;
|
|
97
|
+
|
|
98
|
+
/* Sizing */
|
|
99
|
+
min-height: var(--cs-spacing-scale-lg);
|
|
100
|
+
padding: var(--cs-spacing-scale-xs) var(--cs-spacing-scale-sm);
|
|
101
|
+
|
|
102
|
+
/* Typography */
|
|
103
|
+
font-family: var(--cs-fonts-primary-family);
|
|
104
|
+
font-size: var(--cs-fonts-primary-sizes-xs);
|
|
105
|
+
font-weight: var(--cs-fonts-primary-weights-semibold);
|
|
106
|
+
line-height: var(--cs-fonts-primary-line-heights-tight);
|
|
107
|
+
|
|
108
|
+
/* Visual Styling */
|
|
109
|
+
border: var(--cs-spacing-scale-xs) solid var(--cs-colors-border-transparent);
|
|
110
|
+
border-radius: var(--cs-border-radius-full);
|
|
111
|
+
|
|
112
|
+
/* Transitions */
|
|
113
|
+
transition: var(--cs-transitions-properties-colors);
|
|
114
|
+
|
|
115
|
+
/* Focus Management */
|
|
116
|
+
outline: none;
|
|
117
|
+
cursor: default;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* Badge Variants - Using Original Poker Project Colors */
|
|
121
|
+
.badge--default {
|
|
122
|
+
background-color: var(--badge-default-background, var(--cs-colors-primary-500));
|
|
123
|
+
color: var(--badge-default-text, var(--cs-colors-text-inverse));
|
|
124
|
+
border-color: var(--badge-default-border);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.badge--secondary {
|
|
128
|
+
background-color: var(--badge-secondary-background, var(--cs-colors-surface-surface));
|
|
129
|
+
color: var(--badge-secondary-text, var(--cs-colors-text-primary));
|
|
130
|
+
border-color: var(--badge-secondary-border, var(--cs-colors-surface-border));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.badge--destructive {
|
|
134
|
+
background-color: var(--badge-destructive-background, var(--cs-colors-semantic-error));
|
|
135
|
+
color: var(--badge-destructive-text, var(--cs-colors-text-inverse));
|
|
136
|
+
border-color: var(--badge-destructive-border, var(--cs-colors-semantic-error));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.badge--outline {
|
|
140
|
+
background-color: var(--badge-outline-background);
|
|
141
|
+
color: var(--badge-outline-text, var(--cs-colors-text-primary));
|
|
142
|
+
border-color: var(--badge-outline-border, var(--cs-colors-surface-border));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Interactive States - Using Original Poker Project Colors */
|
|
146
|
+
.badge[tabindex]:hover,
|
|
147
|
+
.badge[role="button"]:hover,
|
|
148
|
+
.badge[role="link"]:hover {
|
|
149
|
+
transform: var(--badge-hover-transform, translateY(calc(-1 * var(--cs-spacing-scale-xs))));
|
|
150
|
+
box-shadow: var(--badge-hover-shadow, var(--cs-shadows-md));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* Hover States for Specific Variants - Matching Original Project */
|
|
154
|
+
.badge--default:hover {
|
|
155
|
+
background-color: var(--badge-default-hover, var(--cs-colors-primary-hover));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.badge--secondary:hover {
|
|
159
|
+
background-color: var(--badge-secondary-hover, var(--cs-colors-interactive-hover));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.badge--destructive:hover {
|
|
163
|
+
background-color: var(--badge-destructive-hover);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.badge--outline:hover {
|
|
167
|
+
background-color: var(--badge-outline-hover, var(--cs-colors-interactive-hover));
|
|
168
|
+
border-color: var(--badge-outline-hover-border, var(--cs-colors-surface-border));
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.badge[tabindex]:focus,
|
|
172
|
+
.badge[role="button"]:focus,
|
|
173
|
+
.badge[role="link"]:focus {
|
|
174
|
+
outline: none;
|
|
175
|
+
box-shadow: 0 0 0 var(--cs-spacing-scale-xs) var(--cs-colors-interactive-focus), 0 0 0 var(--cs-spacing-scale-sm) var(--cs-colors-text-inverse);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.badge[tabindex]:active,
|
|
179
|
+
.badge[role="button"]:active,
|
|
180
|
+
.badge[role="link"]:active {
|
|
181
|
+
transform: var(--badge-active-transform, translateY(0));
|
|
182
|
+
box-shadow: var(--badge-active-shadow, var(--cs-shadow-sm));
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* Focus Ring for Accessibility */
|
|
186
|
+
.badge:focus-visible {
|
|
187
|
+
outline: none;
|
|
188
|
+
box-shadow: 0 0 0 var(--cs-spacing-scale-xs) var(--cs-colors-interactive-focus), 0 0 0 var(--cs-spacing-scale-sm) var(--cs-colors-text-inverse);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* High Contrast Mode Support */
|
|
192
|
+
@media (prefers-contrast: high) {
|
|
193
|
+
.badge {
|
|
194
|
+
border-width: var(--badge-high-contrast-border-width);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.badge--outline {
|
|
198
|
+
border-width: var(--badge-outline-high-contrast-border-width);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* Reduced Motion Support */
|
|
203
|
+
@media (prefers-reduced-motion: reduce) {
|
|
204
|
+
.badge {
|
|
205
|
+
transition: none;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.badge[tabindex]:hover,
|
|
209
|
+
.badge[role="button"]:hover,
|
|
210
|
+
.badge[role="link"]:hover {
|
|
211
|
+
transform: none;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* Responsive Design */
|
|
216
|
+
@media (max-width: var(--cs-breakpoints-mobile)) {
|
|
217
|
+
.badge {
|
|
218
|
+
font-size: var(--badge-mobile-font-size, var(--cs-fonts-primary-sizes-xs));
|
|
219
|
+
padding: var(--badge-mobile-padding-y, var(--cs-spacing-scale-xs)) var(--badge-mobile-padding-x, var(--cs-spacing-scale-sm));
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/* Container Queries for Adaptive Layouts */
|
|
224
|
+
@container (min-width: var(--cs-breakpoints-tablet)) {
|
|
225
|
+
.badge {
|
|
226
|
+
font-size: var(--badge-container-font-size, var(--cs-fonts-primary-sizes-sm));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* Badge Element Modifiers */
|
|
231
|
+
.badge__icon {
|
|
232
|
+
margin-right: var(--badge-icon-margin, var(--cs-spacing-scale-xs));
|
|
233
|
+
width: var(--badge-icon-size, var(--cs-fonts-primary-sizes-sm));
|
|
234
|
+
height: var(--badge-icon-size, var(--cs-fonts-primary-sizes-sm));
|
|
235
|
+
flex-shrink: 0;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.badge__text {
|
|
239
|
+
white-space: nowrap;
|
|
240
|
+
overflow: hidden;
|
|
241
|
+
text-overflow: ellipsis;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/* Badge Size Variants */
|
|
245
|
+
.badge--sm {
|
|
246
|
+
min-height: var(--badge-sm-height, var(--cs-spacing-scale-md));
|
|
247
|
+
padding: var(--badge-sm-padding-y, var(--cs-spacing-scale-xs)) var(--badge-sm-padding-x, var(--cs-spacing-scale-sm));
|
|
248
|
+
font-size: var(--badge-sm-font-size, var(--cs-fonts-primary-sizes-xs));
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.badge--lg {
|
|
252
|
+
min-height: var(--badge-lg-height, var(--cs-spacing-scale-xl));
|
|
253
|
+
padding: var(--badge-lg-padding-y, var(--cs-spacing-scale-sm)) var(--badge-lg-padding-x, var(--cs-spacing-scale-sm));
|
|
254
|
+
font-size: var(--badge-lg-font-size, var(--cs-fonts-primary-sizes-sm));
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/* Storybook Showcase Styles */
|
|
258
|
+
/* Badge Showcase Layout */
|
|
259
|
+
.badge-showcase {
|
|
260
|
+
display: flex;
|
|
261
|
+
flex-wrap: wrap;
|
|
262
|
+
gap: var(--badge-showcase-gap, var(--cs-spacing-scale-md));
|
|
263
|
+
align-items: center;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/* Status Badge Showcase */
|
|
267
|
+
.badge-status-showcase {
|
|
268
|
+
display: flex;
|
|
269
|
+
flex-direction: column;
|
|
270
|
+
gap: var(--badge-status-showcase-gap, var(--cs-spacing-scale-md));
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.badge-status-item {
|
|
274
|
+
display: flex;
|
|
275
|
+
align-items: center;
|
|
276
|
+
gap: var(--badge-status-item-gap, var(--cs-spacing-scale-sm));
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.badge-status-text {
|
|
280
|
+
font-size: var(--badge-status-text-size, var(--cs-fonts-primary-sizes-sm));
|
|
281
|
+
color: var(--cs-text-secondary);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/* Notification Badge Showcase */
|
|
285
|
+
.badge-notification-showcase {
|
|
286
|
+
display: flex;
|
|
287
|
+
flex-direction: column;
|
|
288
|
+
gap: var(--badge-notification-gap, var(--cs-spacing-scale-md));
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.badge-notification-item {
|
|
292
|
+
display: flex;
|
|
293
|
+
align-items: center;
|
|
294
|
+
gap: var(--badge-notification-item-gap, var(--cs-spacing-scale-sm));
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.badge-notification-text {
|
|
298
|
+
font-size: var(--badge-notification-text-size, var(--cs-fonts-primary-sizes-sm));
|
|
299
|
+
color: var(--cs-text-secondary);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/* Category Badge Showcase */
|
|
303
|
+
.badge-category-showcase {
|
|
304
|
+
display: flex;
|
|
305
|
+
flex-direction: column;
|
|
306
|
+
gap: var(--badge-category-gap, var(--cs-spacing-scale-md));
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.badge-category-section {
|
|
310
|
+
display: flex;
|
|
311
|
+
flex-direction: column;
|
|
312
|
+
gap: var(--badge-category-section-gap, var(--cs-spacing-scale-sm));
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.badge-category-title {
|
|
316
|
+
font-size: var(--badge-category-title-size, var(--cs-fonts-primary-sizes-lg));
|
|
317
|
+
font-weight: var(--badge-category-title-weight, var(--cs-fonts-primary-weights-semibold));
|
|
318
|
+
margin-bottom: var(--badge-category-title-margin, var(--cs-spacing-scale-sm));
|
|
319
|
+
color: var(--cs-text-primary);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.badge-category-grid {
|
|
323
|
+
display: flex;
|
|
324
|
+
flex-wrap: wrap;
|
|
325
|
+
gap: var(--badge-category-grid-gap, var(--cs-spacing-scale-sm));
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/* Interactive Badge Showcase */
|
|
329
|
+
.badge-interactive-showcase {
|
|
330
|
+
display: flex;
|
|
331
|
+
flex-direction: column;
|
|
332
|
+
gap: var(--badge-interactive-gap, var(--cs-spacing-scale-md));
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.badge-interactive-grid {
|
|
336
|
+
display: flex;
|
|
337
|
+
flex-wrap: wrap;
|
|
338
|
+
gap: var(--badge-interactive-grid-gap, var(--cs-spacing-scale-sm));
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
.badge-interactive-description {
|
|
342
|
+
font-size: var(--cs-fonts-primary-sizes-sm);
|
|
343
|
+
color: var(--cs-text-muted);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/* Badge Size Showcase */
|
|
347
|
+
.badge-size-showcase {
|
|
348
|
+
display: flex;
|
|
349
|
+
flex-direction: column;
|
|
350
|
+
gap: var(--badge-size-gap, var(--cs-spacing-scale-md));
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.badge-size-grid {
|
|
354
|
+
display: flex;
|
|
355
|
+
align-items: center;
|
|
356
|
+
gap: var(--badge-size-grid-gap, var(--cs-spacing-scale-sm));
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.badge-size-description {
|
|
360
|
+
font-size: var(--cs-fonts-primary-sizes-sm);
|
|
361
|
+
color: var(--cs-text-muted);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/* Badge Icon Showcase */
|
|
365
|
+
.badge-icon-showcase {
|
|
366
|
+
display: flex;
|
|
367
|
+
flex-direction: column;
|
|
368
|
+
gap: var(--badge-icon-gap, var(--cs-spacing-scale-md));
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
.badge-icon-grid {
|
|
372
|
+
display: flex;
|
|
373
|
+
flex-wrap: wrap;
|
|
374
|
+
gap: var(--badge-icon-grid-gap, var(--cs-spacing-scale-sm));
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.badge-icon-description {
|
|
378
|
+
font-size: var(--cs-fonts-primary-sizes-sm);
|
|
379
|
+
color: var(--cs-text-muted);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/* Badge Responsive Showcase */
|
|
383
|
+
.badge-responsive-showcase {
|
|
384
|
+
display: flex;
|
|
385
|
+
flex-direction: column;
|
|
386
|
+
gap: var(--badge-responsive-gap, var(--cs-spacing-scale-md));
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.badge-responsive-description {
|
|
390
|
+
font-size: var(--cs-fonts-primary-sizes-sm);
|
|
391
|
+
color: var(--cs-text-muted);
|
|
392
|
+
margin-bottom: var(--badge-responsive-description-margin, var(--cs-spacing-scale-sm));
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.badge-responsive-grid {
|
|
396
|
+
display: grid;
|
|
397
|
+
grid-template-columns: 1fr;
|
|
398
|
+
gap: var(--badge-responsive-grid-gap, var(--cs-spacing-scale-md));
|
|
399
|
+
width: 100%;
|
|
400
|
+
max-width: var(--badge-responsive-grid-max-width, var(--cs-spacing-scale-6xl));
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
.badge-responsive-column {
|
|
404
|
+
display: flex;
|
|
405
|
+
flex-direction: column;
|
|
406
|
+
gap: var(--badge-responsive-column-gap, var(--cs-spacing-scale-sm));
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
.badge-responsive-title {
|
|
410
|
+
font-size: var(--badge-responsive-title-size, var(--cs-fonts-primary-sizes-base));
|
|
411
|
+
font-weight: var(--badge-responsive-title-weight, var(--cs-fonts-primary-weights-medium));
|
|
412
|
+
margin-bottom: var(--badge-responsive-title-margin, var(--cs-spacing-scale-sm));
|
|
413
|
+
color: var(--cs-text-primary);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.badge-responsive-badges {
|
|
417
|
+
display: flex;
|
|
418
|
+
flex-wrap: wrap;
|
|
419
|
+
gap: var(--badge-responsive-badges-gap, var(--cs-spacing-scale-sm));
|
|
420
|
+
width: 100%;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/* Responsive Design for Showcase */
|
|
424
|
+
@media (min-width: 768px) {
|
|
425
|
+
.badge-responsive-grid {
|
|
426
|
+
grid-template-columns: 1fr 1fr !important;
|
|
427
|
+
}
|
|
428
|
+
}
|