solid-ui 3.0.0 → 3.0.1-11be53b
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/README.md +18 -4
- package/dist/header/index.d.ts.map +1 -1
- package/dist/header/index.js +52 -0
- package/dist/header/index.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/solid-ui.esm.js +25411 -23519
- package/dist/solid-ui.esm.js.map +1 -1
- package/dist/solid-ui.esm.min.js +27 -28
- package/dist/solid-ui.esm.min.js.map +1 -1
- package/dist/solid-ui.js +572 -241
- package/dist/solid-ui.js.map +1 -1
- package/dist/solid-ui.min.js +12 -12
- package/dist/solid-ui.min.js.map +1 -1
- package/dist/themes/README.md +254 -0
- package/dist/themes/foundation/accessibility.css +147 -0
- package/dist/themes/foundation/variables.css +163 -0
- package/dist/themes/presets/classic.css +70 -0
- package/dist/themes/presets/default.css +65 -0
- package/dist/themes/presets/signal.css +65 -0
- package/dist/themes/presets/telegram.css +65 -0
- package/dist/themes/presets/wave.css +65 -0
- package/dist/versionInfo.js +8 -8
- package/dist/widgets/buttons.js +3 -3
- package/dist/widgets/buttons.js.map +1 -1
- package/package.json +11 -11
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# Solid-UI Theme System
|
|
2
|
+
|
|
3
|
+
**Phase 1: Foundation** - CSS Variables & Runtime Theme Switching
|
|
4
|
+
|
|
5
|
+
## 🎨 Live Demo
|
|
6
|
+
|
|
7
|
+
**[Open Theme Demo](../../docs/theme-demo.html)** - Interactive preview of all 5 themes (no setup required, works offline)
|
|
8
|
+
|
|
9
|
+
This standalone demo file can be:
|
|
10
|
+
- Shared with team members via email or Slack
|
|
11
|
+
- Attached to GitHub issues/PRs for visual review
|
|
12
|
+
- Opened directly in any browser for quick testing
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
The Solid-UI theme system provides modern, customizable styling using CSS custom properties (variables). It supports multiple built-in themes and allows runtime theme switching with localStorage persistence.
|
|
17
|
+
|
|
18
|
+
## Architecture
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
src/themes/
|
|
22
|
+
├── foundation/
|
|
23
|
+
│ ├── variables.css # Base CSS custom properties
|
|
24
|
+
│ └── accessibility.css # WCAG 2.1 AA compliance features
|
|
25
|
+
└── presets/
|
|
26
|
+
├── classic.css # Original solid-ui appearance (default)
|
|
27
|
+
├── default.css # Modern purple gradient (Solid style)
|
|
28
|
+
├── wave.css # WhatsApp-style green
|
|
29
|
+
├── telegram.css # Messenger-style blue
|
|
30
|
+
└── signal.css # Signal-style blue
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
### Automatic Initialization
|
|
36
|
+
|
|
37
|
+
The theme system auto-initializes on page load and applies the saved theme preference (or "classic" by default):
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
import { themeLoader } from 'solid-ui'
|
|
41
|
+
|
|
42
|
+
// Theme system initializes automatically
|
|
43
|
+
// Loads foundation CSS + saved theme from localStorage
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Switching Themes Programmatically
|
|
47
|
+
|
|
48
|
+
```javascript
|
|
49
|
+
import { themeLoader } from 'solid-ui'
|
|
50
|
+
|
|
51
|
+
// Switch to a theme
|
|
52
|
+
await themeLoader.loadTheme('wave')
|
|
53
|
+
|
|
54
|
+
// Get current theme
|
|
55
|
+
const currentTheme = themeLoader.getCurrentTheme() // 'wave'
|
|
56
|
+
|
|
57
|
+
// Get available themes
|
|
58
|
+
const themes = themeLoader.getAvailableThemes()
|
|
59
|
+
// Returns: [{ name: 'classic', label: 'Classic' }, ...]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Listen for Theme Changes
|
|
63
|
+
|
|
64
|
+
```javascript
|
|
65
|
+
window.addEventListener('solid-ui-theme-change', (event) => {
|
|
66
|
+
console.log('Theme changed to:', event.detail.theme)
|
|
67
|
+
})
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Using in Components
|
|
71
|
+
|
|
72
|
+
The `style` object now uses CSS variables with fallbacks:
|
|
73
|
+
|
|
74
|
+
```javascript
|
|
75
|
+
import { style } from 'solid-ui'
|
|
76
|
+
|
|
77
|
+
// Styles automatically adapt to active theme
|
|
78
|
+
const input = document.createElement('input')
|
|
79
|
+
input.style = style.textInputStyle
|
|
80
|
+
// Uses var(--sui-bg-input) from active theme, falls back to #eef
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Available Themes
|
|
84
|
+
|
|
85
|
+
### Classic (Default)
|
|
86
|
+
- **Colors**: Original solid-ui palette (#3B5998, #eef, #888)
|
|
87
|
+
- **Style**: Preserves exact original appearance
|
|
88
|
+
- **Use case**: Backward compatibility, no visual changes
|
|
89
|
+
|
|
90
|
+
### Default (Solid)
|
|
91
|
+
- **Colors**: Modern purple gradient (#667eea, #9f7aea)
|
|
92
|
+
- **Style**: Clean, modern with improved spacing
|
|
93
|
+
- **Use case**: New projects, modern look
|
|
94
|
+
|
|
95
|
+
### Wave
|
|
96
|
+
- **Colors**: WhatsApp green (#128c7e, #075e54)
|
|
97
|
+
- **Style**: Clean messenger style
|
|
98
|
+
- **Use case**: Familiar, friendly interface
|
|
99
|
+
|
|
100
|
+
### Telegram
|
|
101
|
+
- **Colors**: Telegram blue (#0088cc, #0078b8)
|
|
102
|
+
- **Style**: Professional messenger
|
|
103
|
+
- **Use case**: Business, clean interface
|
|
104
|
+
|
|
105
|
+
### Signal
|
|
106
|
+
- **Colors**: Signal blue (#2c6bed, #1851c4)
|
|
107
|
+
- **Style**: Privacy-focused, professional
|
|
108
|
+
- **Use case**: Security-focused apps
|
|
109
|
+
|
|
110
|
+
## CSS Variables Reference
|
|
111
|
+
|
|
112
|
+
### Colors
|
|
113
|
+
```css
|
|
114
|
+
--sui-primary: #805ad5;
|
|
115
|
+
--sui-accent: #9f7aea;
|
|
116
|
+
--sui-bg: #f7f8fc;
|
|
117
|
+
--sui-bg-panel: #ffffff;
|
|
118
|
+
--sui-text: #2d3748;
|
|
119
|
+
--sui-text-secondary: #4a5568;
|
|
120
|
+
--sui-border-color: #e2e8f0;
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Spacing
|
|
124
|
+
```css
|
|
125
|
+
--sui-space-xs: 0.25em;
|
|
126
|
+
--sui-space-sm: 0.5em;
|
|
127
|
+
--sui-space-md: 1em;
|
|
128
|
+
--sui-space-lg: 1.5em;
|
|
129
|
+
--sui-space-xl: 2em;
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Border Radius
|
|
133
|
+
```css
|
|
134
|
+
--sui-border-radius: 0.5em;
|
|
135
|
+
--sui-border-radius-sm: 0.3em;
|
|
136
|
+
--sui-border-radius-lg: 1em;
|
|
137
|
+
--sui-border-radius-full: 50%;
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Shadows
|
|
141
|
+
```css
|
|
142
|
+
--sui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.08);
|
|
143
|
+
--sui-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
144
|
+
--sui-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.2);
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
See `foundation/variables.css` for the complete list.
|
|
148
|
+
|
|
149
|
+
## Creating Custom Themes
|
|
150
|
+
|
|
151
|
+
Create a new CSS file in `presets/`:
|
|
152
|
+
|
|
153
|
+
```css
|
|
154
|
+
/* src/themes/presets/mytheme.css */
|
|
155
|
+
:root {
|
|
156
|
+
--sui-primary: #your-color;
|
|
157
|
+
--sui-accent: #your-accent;
|
|
158
|
+
/* Override other variables as needed */
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Register the theme:
|
|
163
|
+
|
|
164
|
+
```javascript
|
|
165
|
+
import { themeLoader } from 'solid-ui'
|
|
166
|
+
|
|
167
|
+
themeLoader.themes.mytheme = 'themes/presets/mytheme.css'
|
|
168
|
+
await themeLoader.loadTheme('mytheme')
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Accessibility Features
|
|
172
|
+
|
|
173
|
+
All themes include WCAG 2.1 Level AA compliance features:
|
|
174
|
+
|
|
175
|
+
- **Focus Indicators**: Visible 2px outlines
|
|
176
|
+
- **High Contrast Mode**: Automatic adaptation
|
|
177
|
+
- **Reduced Motion**: Respects user preference
|
|
178
|
+
- **Touch Targets**: Minimum 44x44px
|
|
179
|
+
- **Screen Reader Support**: `.sr-only` utility class
|
|
180
|
+
|
|
181
|
+
See `foundation/accessibility.css` for details.
|
|
182
|
+
|
|
183
|
+
## Browser Support
|
|
184
|
+
|
|
185
|
+
CSS custom properties are supported in:
|
|
186
|
+
- ✅ Chrome/Edge 49+
|
|
187
|
+
- ✅ Firefox 31+
|
|
188
|
+
- ✅ Safari 9.1+
|
|
189
|
+
- ✅ iOS Safari 9.3+
|
|
190
|
+
- ✅ Android Browser 76+
|
|
191
|
+
|
|
192
|
+
For older browsers, fallback values ensure basic functionality.
|
|
193
|
+
|
|
194
|
+
## Migration from Inline Styles
|
|
195
|
+
|
|
196
|
+
The style.js file now uses a hybrid approach:
|
|
197
|
+
|
|
198
|
+
**Before (hard-coded)**:
|
|
199
|
+
```javascript
|
|
200
|
+
background-color: #eef;
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**After (with CSS variable + fallback)**:
|
|
204
|
+
```javascript
|
|
205
|
+
background-color: var(--sui-bg-input, #eef);
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
This maintains backward compatibility while enabling theming.
|
|
209
|
+
|
|
210
|
+
## Performance
|
|
211
|
+
|
|
212
|
+
- CSS variables have negligible performance impact
|
|
213
|
+
- Theme files are ~2-4KB each (gzipped)
|
|
214
|
+
- Theme switching is near-instant (<100ms)
|
|
215
|
+
- Foundation CSS loads once and caches
|
|
216
|
+
|
|
217
|
+
## Troubleshooting
|
|
218
|
+
|
|
219
|
+
### Theme not loading?
|
|
220
|
+
Check browser console for errors. Verify CSS file paths are correct relative to your build output.
|
|
221
|
+
|
|
222
|
+
### Styles not updating?
|
|
223
|
+
Hard refresh (Ctrl+Shift+R) to clear cached CSS. Check that CSS variables are defined in your theme file.
|
|
224
|
+
|
|
225
|
+
### Want to disable auto-init?
|
|
226
|
+
```javascript
|
|
227
|
+
// In your app's entry point, before solid-ui loads:
|
|
228
|
+
window.SOLID_UI_SKIP_THEME_INIT = true
|
|
229
|
+
|
|
230
|
+
// Then manually init later:
|
|
231
|
+
import { themeLoader } from 'solid-ui'
|
|
232
|
+
await themeLoader.init()
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Future Enhancements
|
|
236
|
+
|
|
237
|
+
Phase 1 establishes the foundation. Future phases will add:
|
|
238
|
+
- Theme picker widget
|
|
239
|
+
- Component-specific theme overrides
|
|
240
|
+
- Dark mode variants
|
|
241
|
+
- Community theme marketplace
|
|
242
|
+
|
|
243
|
+
## Contributing
|
|
244
|
+
|
|
245
|
+
When adding new styles:
|
|
246
|
+
1. Use CSS variables with fallbacks
|
|
247
|
+
2. Test with all 5 themes
|
|
248
|
+
3. Verify accessibility (contrast, focus, etc.)
|
|
249
|
+
4. Update this documentation
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
**Status**: Phase 1 Complete ✅
|
|
254
|
+
**Next**: Phase 2 - Component Modernization
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accessibility Features for Solid-UI
|
|
3
|
+
* WCAG 2.1 Level AA compliance
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* ========== Screen Reader Only ========== */
|
|
7
|
+
.sr-only {
|
|
8
|
+
position: absolute;
|
|
9
|
+
width: 1px;
|
|
10
|
+
height: 1px;
|
|
11
|
+
padding: 0;
|
|
12
|
+
margin: -1px;
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
clip: rect(0, 0, 0, 0);
|
|
15
|
+
white-space: nowrap;
|
|
16
|
+
border-width: 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.sr-only-focusable:focus {
|
|
20
|
+
position: static;
|
|
21
|
+
width: auto;
|
|
22
|
+
height: auto;
|
|
23
|
+
padding: inherit;
|
|
24
|
+
margin: inherit;
|
|
25
|
+
overflow: visible;
|
|
26
|
+
clip: auto;
|
|
27
|
+
white-space: normal;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* ========== Focus Indicators ========== */
|
|
31
|
+
:focus-visible {
|
|
32
|
+
outline: var(--sui-focus-width, 2px) solid var(--sui-focus-color, #667eea);
|
|
33
|
+
outline-offset: var(--sui-focus-offset, 2px);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Don't hide focus for mouse users who might need it */
|
|
37
|
+
:focus:not(:focus-visible) {
|
|
38
|
+
outline: none;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* ========== Skip Links ========== */
|
|
42
|
+
.skip-link {
|
|
43
|
+
position: absolute;
|
|
44
|
+
top: -40px;
|
|
45
|
+
left: 0;
|
|
46
|
+
background: var(--sui-primary);
|
|
47
|
+
color: white;
|
|
48
|
+
padding: 0.5em 1em;
|
|
49
|
+
text-decoration: none;
|
|
50
|
+
z-index: var(--sui-z-tooltip, 200);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.skip-link:focus {
|
|
54
|
+
top: 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* ========== High Contrast Mode ========== */
|
|
58
|
+
@media (prefers-contrast: high) {
|
|
59
|
+
:root {
|
|
60
|
+
--sui-border-color: #000;
|
|
61
|
+
--sui-border-color-dark: #000;
|
|
62
|
+
--sui-text: #000;
|
|
63
|
+
--sui-bg-panel: #fff;
|
|
64
|
+
--sui-bg: #fff;
|
|
65
|
+
--sui-focus-color: #000;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
button,
|
|
69
|
+
input,
|
|
70
|
+
select,
|
|
71
|
+
textarea {
|
|
72
|
+
border: 2px solid currentColor !important;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
a {
|
|
76
|
+
text-decoration: underline;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* ========== Reduced Motion ========== */
|
|
81
|
+
@media (prefers-reduced-motion: reduce) {
|
|
82
|
+
*,
|
|
83
|
+
*::before,
|
|
84
|
+
*::after {
|
|
85
|
+
animation-duration: 0.01ms !important;
|
|
86
|
+
animation-iteration-count: 1 !important;
|
|
87
|
+
transition-duration: 0.01ms !important;
|
|
88
|
+
scroll-behavior: auto !important;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* ========== Touch Targets ========== */
|
|
93
|
+
/* Mobile/tablet: 44px minimum for touch targets */
|
|
94
|
+
@media (max-width: 1024px) {
|
|
95
|
+
button,
|
|
96
|
+
a,
|
|
97
|
+
input[type="checkbox"],
|
|
98
|
+
input[type="radio"],
|
|
99
|
+
select {
|
|
100
|
+
min-height: var(--sui-touch-target-min, 44px);
|
|
101
|
+
min-width: var(--sui-touch-target-min, 44px);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* Desktop: smaller targets are acceptable with precise mouse control */
|
|
106
|
+
@media (min-width: 1025px) {
|
|
107
|
+
button,
|
|
108
|
+
a,
|
|
109
|
+
select {
|
|
110
|
+
min-height: var(--sui-touch-target-min-desktop, 32px);
|
|
111
|
+
min-width: var(--sui-touch-target-min-desktop, 32px);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
input[type="checkbox"],
|
|
115
|
+
input[type="radio"] {
|
|
116
|
+
min-height: auto;
|
|
117
|
+
min-width: auto;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* Allow smaller targets when explicitly sized */
|
|
122
|
+
.small-touch-target {
|
|
123
|
+
min-height: auto;
|
|
124
|
+
min-width: auto;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* ========== Heading Styles ========== */
|
|
128
|
+
/* Apply theme colors to headings */
|
|
129
|
+
h1, h2, h3, h4, h5, h6 {
|
|
130
|
+
color: var(--sui-primary, #7C4DFF);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Override for specific contexts where headings should use text color */
|
|
134
|
+
.use-text-color h1,
|
|
135
|
+
.use-text-color h2,
|
|
136
|
+
.use-text-color h3,
|
|
137
|
+
.use-text-color h4,
|
|
138
|
+
.use-text-color h5,
|
|
139
|
+
.use-text-color h6 {
|
|
140
|
+
color: var(--sui-text, #333);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* ========== Dark Mode Support ========== */
|
|
144
|
+
@media (prefers-color-scheme: dark) {
|
|
145
|
+
/* Dark mode variables can be defined here or in a dark theme preset */
|
|
146
|
+
/* For now, themes will handle dark mode explicitly */
|
|
147
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base CSS Variables for Solid-UI Theme System
|
|
3
|
+
* Phase 1: Foundation
|
|
4
|
+
*
|
|
5
|
+
* These variables form the foundation of all themes.
|
|
6
|
+
* They provide fallback values and can be overridden by theme presets.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
:root {
|
|
10
|
+
/* ========== Colors - Primary ========== */
|
|
11
|
+
--sui-primary: #805ad5;
|
|
12
|
+
--sui-primary-dark: #667eea;
|
|
13
|
+
--sui-primary-light: #9f7aea;
|
|
14
|
+
--sui-accent: #9f7aea;
|
|
15
|
+
|
|
16
|
+
/* ========== Colors - Gradients ========== */
|
|
17
|
+
--sui-gradient-start: #667eea;
|
|
18
|
+
--sui-gradient-end: #9f7aea;
|
|
19
|
+
--sui-gradient: linear-gradient(135deg, var(--sui-gradient-start), var(--sui-gradient-end));
|
|
20
|
+
|
|
21
|
+
/* ========== Backgrounds ========== */
|
|
22
|
+
--sui-bg: #f7f8fc;
|
|
23
|
+
--sui-bg-panel: #ffffff;
|
|
24
|
+
--sui-bg-header: #ffffff;
|
|
25
|
+
--sui-bg-input: #eef;
|
|
26
|
+
--sui-bg-hover: #f7f8fc;
|
|
27
|
+
--sui-bg-active: #ede9fe;
|
|
28
|
+
--sui-bg-button: #fff;
|
|
29
|
+
--sui-bg-button-hover: #f7f8fc;
|
|
30
|
+
|
|
31
|
+
/* ========== Text Colors ========== */
|
|
32
|
+
--sui-text: #2d3748;
|
|
33
|
+
--sui-text-secondary: #4a5568;
|
|
34
|
+
--sui-text-muted: #a0aec0;
|
|
35
|
+
--sui-text-link: #3B5998;
|
|
36
|
+
--sui-text-on-primary: #ffffff;
|
|
37
|
+
|
|
38
|
+
/* ========== Borders ========== */
|
|
39
|
+
--sui-border-color: #e2e8f0;
|
|
40
|
+
--sui-border-color-dark: #88c;
|
|
41
|
+
--sui-border-width: 0.05em;
|
|
42
|
+
--sui-border: var(--sui-border-width) solid var(--sui-border-color);
|
|
43
|
+
|
|
44
|
+
/* ========== Border Radius ========== */
|
|
45
|
+
--sui-border-radius: 0.5em;
|
|
46
|
+
--sui-border-radius-sm: 0.2em;
|
|
47
|
+
--sui-border-radius-lg: 1em;
|
|
48
|
+
--sui-border-radius-full: 50%;
|
|
49
|
+
|
|
50
|
+
/* ========== Shadows ========== */
|
|
51
|
+
--sui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.08);
|
|
52
|
+
--sui-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
53
|
+
--sui-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.2);
|
|
54
|
+
--sui-shadow-colored: 0 4px 20px rgba(102, 126, 234, 0.3);
|
|
55
|
+
|
|
56
|
+
/* ========== Spacing Scale ========== */
|
|
57
|
+
--sui-space-xs: 0.25em;
|
|
58
|
+
--sui-space-sm: 0.5em;
|
|
59
|
+
--sui-space-md: 1em;
|
|
60
|
+
--sui-space-lg: 1.5em;
|
|
61
|
+
--sui-space-xl: 2em;
|
|
62
|
+
--sui-space-2xl: 3em;
|
|
63
|
+
|
|
64
|
+
/* ========== Typography ========== */
|
|
65
|
+
--sui-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
|
66
|
+
"Helvetica Neue", Arial, sans-serif;
|
|
67
|
+
--sui-font-family-mono: 'Monaco', 'Courier New', monospace;
|
|
68
|
+
|
|
69
|
+
--sui-font-size-xs: 0.75em;
|
|
70
|
+
--sui-font-size-sm: 0.875em;
|
|
71
|
+
--sui-font-size-base: 1em;
|
|
72
|
+
--sui-font-size-lg: 1.125em;
|
|
73
|
+
--sui-font-size-xl: 1.25em;
|
|
74
|
+
--sui-font-size-2xl: 1.5em;
|
|
75
|
+
--sui-font-size-3xl: 1.875em;
|
|
76
|
+
|
|
77
|
+
--sui-line-height: 1.5;
|
|
78
|
+
--sui-line-height-tight: 1.25;
|
|
79
|
+
--sui-line-height-relaxed: 1.75;
|
|
80
|
+
|
|
81
|
+
/* ========== Forms ========== */
|
|
82
|
+
--sui-form-border-color: #88c;
|
|
83
|
+
--sui-form-group-border: var(--sui-border-width) solid var(--sui-form-border-color);
|
|
84
|
+
--sui-input-padding: var(--sui-space-sm);
|
|
85
|
+
--sui-input-margin: 0.4em;
|
|
86
|
+
|
|
87
|
+
/* ========== Buttons ========== */
|
|
88
|
+
--sui-button-padding: 0.7em;
|
|
89
|
+
--sui-button-padding-sm: 0.5em 1em;
|
|
90
|
+
--sui-button-padding-lg: 1em 4em;
|
|
91
|
+
--sui-button-margin: 0.3em;
|
|
92
|
+
|
|
93
|
+
/* ========== Icon Sizes ========== */
|
|
94
|
+
--sui-icon-size: 1.5em; /* Standard icons and buttons */
|
|
95
|
+
--sui-avatar-size: 2.5em; /* Person/contact avatars */
|
|
96
|
+
--sui-icon-class-size: 3em; /* Class/type icons */
|
|
97
|
+
|
|
98
|
+
/* ========== ACL Groups (preserve current colors) ========== */
|
|
99
|
+
--sui-group-default: #888;
|
|
100
|
+
--sui-group-1: green;
|
|
101
|
+
--sui-group-2: #cc0;
|
|
102
|
+
--sui-group-3: orange;
|
|
103
|
+
--sui-group-5: red;
|
|
104
|
+
--sui-group-9: blue;
|
|
105
|
+
--sui-group-13: purple;
|
|
106
|
+
|
|
107
|
+
/* ========== Status Colors ========== */
|
|
108
|
+
--sui-success: #48bb78;
|
|
109
|
+
--sui-warning: orange;
|
|
110
|
+
--sui-error: red;
|
|
111
|
+
--sui-info: #01c9ea;
|
|
112
|
+
|
|
113
|
+
/* ========== Header ========== */
|
|
114
|
+
--sui-header-gradient: linear-gradient(to right, #7C4DFF 0%, #18A9E6 50%, #01C9EA 100%);
|
|
115
|
+
--sui-header-height: 60px;
|
|
116
|
+
--sui-header-shadow: 0px 1px 4px #000000;
|
|
117
|
+
|
|
118
|
+
/* ========== Transitions ========== */
|
|
119
|
+
--sui-transition-fast: 0.15s ease;
|
|
120
|
+
--sui-transition: 0.2s ease;
|
|
121
|
+
--sui-transition-slow: 0.3s ease;
|
|
122
|
+
|
|
123
|
+
/* ========== Z-Index Scale ========== */
|
|
124
|
+
--sui-z-dropdown: 1;
|
|
125
|
+
--sui-z-modal: 100;
|
|
126
|
+
--sui-z-tooltip: 200;
|
|
127
|
+
|
|
128
|
+
/* ========== Accessibility ========== */
|
|
129
|
+
--sui-focus-color: #667eea;
|
|
130
|
+
--sui-focus-width: 2px;
|
|
131
|
+
--sui-focus-offset: 2px;
|
|
132
|
+
--sui-touch-target-min: 44px;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* ========== Responsive Adjustments ========== */
|
|
136
|
+
/* Mobile: Smaller base font and tighter spacing */
|
|
137
|
+
@media (max-width: 768px) {
|
|
138
|
+
:root {
|
|
139
|
+
--sui-font-size-base: 0.9em;
|
|
140
|
+
--sui-font-size-sm: 0.8em;
|
|
141
|
+
--sui-font-size-xs: 0.7em;
|
|
142
|
+
--sui-space-md: 0.8em;
|
|
143
|
+
--sui-space-lg: 1.2em;
|
|
144
|
+
--sui-space-xl: 1.6em;
|
|
145
|
+
--sui-space-2xl: 2.4em;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* Tablet: Slightly smaller than desktop */
|
|
150
|
+
@media (min-width: 769px) and (max-width: 1024px) {
|
|
151
|
+
:root {
|
|
152
|
+
--sui-font-size-base: 0.95em;
|
|
153
|
+
--sui-space-md: 0.9em;
|
|
154
|
+
--sui-space-lg: 1.35em;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* Desktop: Use default values (already defined above) */
|
|
159
|
+
@media (min-width: 1025px) {
|
|
160
|
+
:root {
|
|
161
|
+
/* Desktop uses the base values defined above */
|
|
162
|
+
}
|
|
163
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classic Theme - Preserves Original solid-ui Appearance
|
|
3
|
+
*
|
|
4
|
+
* This theme maintains backward compatibility by using the exact
|
|
5
|
+
* colors and styling from the original solid-ui implementation.
|
|
6
|
+
* Use this as the default to ensure no visual changes during migration.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
:root {
|
|
10
|
+
/* ========== Primary Colors (Original) ========== */
|
|
11
|
+
--sui-primary: #3B5998;
|
|
12
|
+
--sui-primary-dark: #2d4373;
|
|
13
|
+
--sui-primary-light: #7C4DFF;
|
|
14
|
+
--sui-accent: #01c9ea;
|
|
15
|
+
|
|
16
|
+
/* ========== Gradients (Original) ========== */
|
|
17
|
+
--sui-gradient-start: #7C4DFF;
|
|
18
|
+
--sui-gradient-end: #01c9ea;
|
|
19
|
+
--sui-gradient: linear-gradient(to right, #7C4DFF 0%, #18A9E6 50%, #01C9EA 100%);
|
|
20
|
+
|
|
21
|
+
/* ========== Backgrounds (Original) ========== */
|
|
22
|
+
--sui-bg: #ffffff;
|
|
23
|
+
--sui-bg-panel: #ffffff;
|
|
24
|
+
--sui-bg-header: #eef;
|
|
25
|
+
--sui-bg-input: #eef;
|
|
26
|
+
--sui-bg-hover: #eef;
|
|
27
|
+
--sui-bg-active: #dde;
|
|
28
|
+
--sui-bg-button: #fff;
|
|
29
|
+
--sui-bg-button-hover: #eef;
|
|
30
|
+
|
|
31
|
+
/* ========== Text Colors (Original) ========== */
|
|
32
|
+
--sui-text: #000000;
|
|
33
|
+
--sui-text-secondary: #333333;
|
|
34
|
+
--sui-text-muted: #888888;
|
|
35
|
+
--sui-text-link: #3B5998;
|
|
36
|
+
--sui-text-on-primary: #ffffff;
|
|
37
|
+
|
|
38
|
+
/* ========== Borders (Original) ========== */
|
|
39
|
+
--sui-border-color: #88c;
|
|
40
|
+
--sui-border-color-dark: #888;
|
|
41
|
+
--sui-border-width: 0.05em;
|
|
42
|
+
--sui-border: var(--sui-border-width) solid var(--sui-border-color);
|
|
43
|
+
|
|
44
|
+
/* ========== Border Radius (Original) ========== */
|
|
45
|
+
--sui-border-radius: 0.2em;
|
|
46
|
+
--sui-border-radius-sm: 0.2em;
|
|
47
|
+
--sui-border-radius-lg: 1em;
|
|
48
|
+
--sui-border-radius-full: 50%;
|
|
49
|
+
|
|
50
|
+
/* ========== Shadows (Original - minimal) ========== */
|
|
51
|
+
--sui-shadow-sm: 0 1px 2px #888;
|
|
52
|
+
--sui-shadow: 0.5em 0.9em #888;
|
|
53
|
+
--sui-shadow-lg: 0.7em 1.1em #888;
|
|
54
|
+
--sui-shadow-colored: 0.5em 0.9em #888;
|
|
55
|
+
|
|
56
|
+
/* ========== Forms (Original) ========== */
|
|
57
|
+
--sui-form-border-color: #88c;
|
|
58
|
+
--sui-form-group-border: var(--sui-border-width) solid var(--sui-form-border-color);
|
|
59
|
+
|
|
60
|
+
/* ========== Status Colors (Original) ========== */
|
|
61
|
+
--sui-success: green;
|
|
62
|
+
--sui-warning: orange;
|
|
63
|
+
--sui-error: red;
|
|
64
|
+
--sui-info: #01c9ea;
|
|
65
|
+
|
|
66
|
+
/* ========== Header (Original) ========== */
|
|
67
|
+
--sui-header-gradient: linear-gradient(to right, #7C4DFF 0%, #18A9E6 50%, #01C9EA 100%);
|
|
68
|
+
|
|
69
|
+
/* Keep all other variables from foundation/variables.css */
|
|
70
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default (Solid) Theme - Modern Purple Gradient
|
|
3
|
+
*
|
|
4
|
+
* Inspired by solid-chat's "Solid" theme.
|
|
5
|
+
* Modern, clean design with purple gradient and improved spacing.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
:root {
|
|
9
|
+
/* ========== Primary Colors ========== */
|
|
10
|
+
--sui-primary: #805ad5;
|
|
11
|
+
--sui-primary-dark: #667eea;
|
|
12
|
+
--sui-primary-light: #9f7aea;
|
|
13
|
+
--sui-accent: #9f7aea;
|
|
14
|
+
|
|
15
|
+
/* ========== Gradients ========== */
|
|
16
|
+
--sui-gradient-start: #667eea;
|
|
17
|
+
--sui-gradient-end: #9f7aea;
|
|
18
|
+
--sui-gradient: linear-gradient(135deg, var(--sui-gradient-start), var(--sui-gradient-end));
|
|
19
|
+
|
|
20
|
+
/* ========== Backgrounds ========== */
|
|
21
|
+
--sui-bg: #f7f8fc;
|
|
22
|
+
--sui-bg-panel: #ffffff;
|
|
23
|
+
--sui-bg-header: #e9d8fd;
|
|
24
|
+
--sui-bg-input: #ffffff;
|
|
25
|
+
--sui-bg-hover: #f7f8fc;
|
|
26
|
+
--sui-bg-active: #ede9fe;
|
|
27
|
+
--sui-bg-button: #ffffff;
|
|
28
|
+
--sui-bg-button-hover: #f7f8fc;
|
|
29
|
+
|
|
30
|
+
/* ========== Text Colors ========== */
|
|
31
|
+
--sui-text: #2d3748;
|
|
32
|
+
--sui-text-secondary: #4a5568;
|
|
33
|
+
--sui-text-muted: #a0aec0;
|
|
34
|
+
--sui-text-link: #805ad5;
|
|
35
|
+
--sui-text-on-primary: #ffffff;
|
|
36
|
+
|
|
37
|
+
/* ========== Borders ========== */
|
|
38
|
+
--sui-border-color: #e2e8f0;
|
|
39
|
+
--sui-border-color-dark: #cbd5e0;
|
|
40
|
+
--sui-border-width: 0.05em;
|
|
41
|
+
--sui-border: var(--sui-border-width) solid var(--sui-border-color);
|
|
42
|
+
|
|
43
|
+
/* ========== Border Radius ========== */
|
|
44
|
+
--sui-border-radius: 0.5em;
|
|
45
|
+
--sui-border-radius-sm: 0.3em;
|
|
46
|
+
--sui-border-radius-lg: 1em;
|
|
47
|
+
--sui-border-radius-full: 50%;
|
|
48
|
+
|
|
49
|
+
/* ========== Shadows ========== */
|
|
50
|
+
--sui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.08);
|
|
51
|
+
--sui-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
52
|
+
--sui-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.2);
|
|
53
|
+
--sui-shadow-colored: 0 4px 20px rgba(102, 126, 234, 0.3);
|
|
54
|
+
|
|
55
|
+
/* ========== Status Colors ========== */
|
|
56
|
+
--sui-success: #48bb78;
|
|
57
|
+
--sui-warning: #ed8936;
|
|
58
|
+
--sui-error: #f56565;
|
|
59
|
+
--sui-info: #4299e1;
|
|
60
|
+
|
|
61
|
+
/* ========== Header ========== */
|
|
62
|
+
--sui-header-gradient: linear-gradient(135deg, var(--sui-gradient-start), var(--sui-gradient-end));
|
|
63
|
+
|
|
64
|
+
/* All other variables inherit from foundation/variables.css */
|
|
65
|
+
}
|