-
Notifications
You must be signed in to change notification settings - Fork 41
Open
0 / 20 of 2 issues completedDescription
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.csswith CSS variables - Create theme loader utility
- Add CSS injection capability
Phase 2: Migration
- Convert
style.jsto 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
- solid-chat themes: https://github.com/bourgeoa/solid-chat/tree/gh-pages/themes
- solid-chat theming docs: https://github.com/bourgeoa/solid-chat/blob/gh-pages/themes/README.md
- Current solid-ui styles:
src/style.js,src/styleConstants.js
Related 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 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
Sub-issues
Metadata
Metadata
Assignees
Labels
No labels