Implement Modern Theme System from solid-chat
Summary
Modernize solid-ui's styling architecture by adopting the theme system from solid-chat. This would replace the current inline JavaScript style approach with CSS variables and runtime theme switching.
Current State
solid-ui (Current)
- Method: Inline JavaScript style strings (
src/style.js)
- Theming: None - hard-coded colors
- Colors: Legacy palette (
#3B5998, #eef, #888)
- Pattern:
style.textInputStyle = 'background-color: #eef; padding: 0.5em; ...'
solid-chat (Target)
- Method: External CSS files with CSS variables
- Theming: 4 themes (Solid, Wave, Telegram, Signal) with runtime switching
- Colors: Modern palette with gradients and shadows
- Pattern: CSS custom properties (
--gradient-start, --text, --border)
Proposed Changes
Phase 1: Foundation
- Create
src/themes/ directory
- Add base
default.css with CSS variables
- Create theme loader utility
- Add CSS injection capability
Phase 2: Migration
- Convert
style.js to reference CSS variables instead of hard-coded values
- Update chat components (
chat/infinite.js, chat/message.js)
- Update form components and widgets
- Maintain backward compatibility
Phase 3: Theme System
- Port solid-chat themes (Wave, Telegram, Signal)
- Add theme switcher widget
- Save preference to localStorage
- Update Storybook examples
Benefits
✅ Modern appearance - Gradients, shadows, better spacing
✅ User customization - Runtime theme switching
✅ Maintainability - CSS variables easier to manage than JS strings
✅ Performance - CSS over inline styles
✅ Consistency - Align with solid-chat visual design
Design Decisions Needed
-
Breaking changes?
- Option A: v4.0.0 (full migration, breaking)
- Option B: v3.1.0 (hybrid approach, backward compatible)
-
Default theme?
- Solid purple gradient or keep current colors initially?
-
Migration strategy?
- All at once or gradual component-by-component?
Implementation Options
Option 1: Full CSS Variable Migration (Recommended)
- Effort: 2-3 weeks
- Benefits: Best long-term solution, full theming support
- Risk: Medium - requires testing all components
Option 2: Hybrid Approach
- Effort: 1-2 weeks
- Benefits: Backward compatible, gradual migration
- Risk: Low - existing code continues to work
Option 3: Extract Key Improvements Only
- Effort: 3-5 days
- Benefits: Quick visual wins on specific components
- Risk: Very low - minimal changes
Example Theme Structure
/* src/themes/default.css */
:root {
/* Primary colors */
--theme-primary: #805ad5;
--theme-accent: #9f7aea;
--theme-gradient-start: #667eea;
--theme-gradient-end: #9f7aea;
/* Backgrounds */
--bg: #f7f8fc;
--bg-panel: #ffffff;
/* Text */
--text: #2d3748;
--text-secondary: #4a5568;
--text-muted: #a0aec0;
/* Borders */
--border: #e2e8f0;
/* Effects */
--shadow: 0 4px 20px rgba(102, 126, 234, 0.3);
--border-radius: 0.5em;
}
References
Related Components
The following components would benefit most from this update:
src/chat/ - Chat messages and UI
src/widgets/ - Buttons, inputs, forms
src/acl/ - Access control UI
src/login/ - Login forms
src/header/ - Header and navigation
Questions
- Should we maintain 100% backward compatibility or accept breaking changes for v4.0?
- Which theme should be the default - current colors or new solid-chat style?
- Should theme switching be opt-in or enabled by default?
- How should this integrate with existing apps (Mashlib, etc.)?
Next Steps
- Get community feedback on approach
- Choose implementation option
- Create detailed implementation plan
- Begin with Phase 1 (foundation)
Labels: enhancement, design, breaking-change (maybe), help-wanted
Milestone: v4.0.0 or v3.1.0
Implement Modern Theme System from solid-chat
Summary
Modernize solid-ui's styling architecture by adopting the theme system from solid-chat. This would replace the current inline JavaScript style approach with CSS variables and runtime theme switching.
Current State
solid-ui (Current)
src/style.js)#3B5998,#eef,#888)style.textInputStyle = 'background-color: #eef; padding: 0.5em; ...'solid-chat (Target)
--gradient-start,--text,--border)Proposed Changes
Phase 1: Foundation
src/themes/directorydefault.csswith CSS variablesPhase 2: Migration
style.jsto reference CSS variables instead of hard-coded valueschat/infinite.js,chat/message.js)Phase 3: Theme System
Benefits
✅ Modern appearance - Gradients, shadows, better spacing
✅ User customization - Runtime theme switching
✅ Maintainability - CSS variables easier to manage than JS strings
✅ Performance - CSS over inline styles
✅ Consistency - Align with solid-chat visual design
Design Decisions Needed
Breaking changes?
Default theme?
Migration strategy?
Implementation Options
Option 1: Full CSS Variable Migration (Recommended)
Option 2: Hybrid Approach
Option 3: Extract Key Improvements Only
Example Theme Structure
References
src/style.js,src/styleConstants.jsRelated Components
The following components would benefit most from this update:
src/chat/- Chat messages and UIsrc/widgets/- Buttons, inputs, formssrc/acl/- Access control UIsrc/login/- Login formssrc/header/- Header and navigationQuestions
Next Steps
Labels: enhancement, design, breaking-change (maybe), help-wanted
Milestone: v4.0.0 or v3.1.0