Implement Modern Theme System from solid-chat
Nobody has claimed this yet.
- Dominant language
- CSS
- Stars
- 70
- Forks
- 31
- Avg merge
- 4h 14m
- Merged PRs (30d)
- 5
Description
Comprehensive Analysis: Adapting solid-chat Styles Across the Solid Ecosystem
Date: January 15, 2026
Scope: solid-chat → solid-ui → solid-panes integration
Goal: Modernize styling across the Solid ecosystem with unified theme system
Executive Summary
This analysis examines how to adapt the modern theme system from solid-chat to both solid-ui and solid-panes, creating a cohesive, modern visual experience across the entire Solid ecosystem.
Current Architecture Overview
┌─────────────────┐
│ solid-chat │ ← Modern CSS variables, 4 themes, runtime switching
│ (standalone) │ CSS files in themes/ directory
└─────────────────┘
↓ uses
┌─────────────────┐
│ solid-ui │ ← Inline JS style strings, hard-coded colors
│ (library) │ style.js + styleConstants.js
└────────┬────────┘
│ dependency
↓
┌─────────────────┐
│ solid-panes │ ← Imports solid-ui, minimal CSS (2 files)
│ (panes) │ Relies on solid-ui for most styling
└─────────────────┘
│ used by
↓
┌─────────────────┐
│ mashlib │ ← Data browser, integrates everything
│ (application) │
└─────────────────┘
1. Current State Analysis
1.1 solid-chat Styling
Architecture: Modern CSS-first approach
- Location:
themes/directory with 4 theme files - Method: CSS custom properties (variables) with runtime switching
- Themes: solid.css, wave.css, telegram.css, signal.css
- Features:
- Theme switcher dropdown
- localStorage persistence
- CSS variables for all colors
- Modern gradients, shadows, rounded corners
- Mobile-responsive (viewport-fit, safe-area-inset)
Example Pattern:
.long-chat-pane {
--gradient-start: #667eea;
--gradient-end: #9f7aea;
--bg-chat: #f7f8fc;
--bg-message-in: #ffffff;
--text: #2d3748;
}
1.2 solid-ui Styling
Architecture: Legacy inline JavaScript approach
- Location:
src/style.js(168 lines) +src/styleConstants.js - Method: JavaScript objects with CSS string properties
- Dependencies: None (base library)
- Usage: Imported by all components:
import { style } from '../style'
Characteristics:
- Hard-coded colors (
#3B5998,#eef,#888) - String concatenation for styles
- No theme system
- Older design patterns (table layouts, minimal rounded corners)
Example Pattern:
export const style = {
textInputStyle: 'background-color: #eef; padding: 0.5em; ...',
buttonStyle: 'background-color: #fff; padding: 0.7em; ...'
}
Key Files Using Styles:
src/chat/infinite.js- Chat message renderingsrc/chat/message.js- Individual messagessrc/widgets/- All UI componentssrc/acl/- Access control UIsrc/login/- Login formssrc/header/- Header components
1.3 solid-panes Styling
Architecture: Hybrid approach with minimal CSS
- Location:
src/style/tabbedtab.css(1,348 lines - legacy tabulator styles)src/microblogPane/mbStyle.css(268 lines - microblog specific)
- Dependencies:
solid-ui(primary source of styles) - Method: Imports
solid-uiin all panes:import * as UI from 'solid-ui'
Structure:
// Every pane follows this pattern
import * as UI from 'solid-ui'
export const somePane = {
name: 'paneName',
label: (subject, context) => { },
render: (subject, context) => {
// Uses UI.style, UI.widgets, UI.icons
}
}
Key Characteristics:
- Heavily dependent on solid-ui for styling
- Two CSS files contain legacy styles from tabulator era
- Panes are self-contained modules but share style system
- Modern panes imported as separate packages:
chat-panev3.0.0 (peer dep: solid-ui ^3.0.0)contacts-panev3.0.0 (peer dep: solid-ui ^3.0.0)meeting-panev3.0.0folder-panev3.0.0 (peer dep: solid-ui ^3.0.0)issue-panev3.0.0profile-panev2.0.0source-panev3.0.0- etc.
Critical Finding: All three reviewed pane packages (chat-pane, contacts-pane, folder-pane) declare solid-ui as a peer dependency and directly import it:
import * as UI from 'solid-ui'
const style = UI.style // contacts-pane
This means:
- ✅ Automatic theme propagation - Changes to solid-ui styling automatically affect all pane packages
- ✅ No pane updates required - CSS variable support in solid-ui will work immediately
- ✅ Unified styling - All panes share the same style system
- ⚠️ Must maintain compatibility - Breaking changes in solid-ui affect all panes
CSS Files Overview:
-
tabbedtab.css: Legacy styles
- Physical measurements (converted from px to em)
- Basic colors:
#8f3,#dfd,#ddddff - Minimal shadows:
0px 5px 10px - Border radius:
0.75emto1em - Tables and containers styling
-
mbStyle.css: Microblog pane specific
- Color scheme:
#357598,#333,#fff - Borders:
solid 1px #333 - Border radius:
3px - Box shadows:
0px 5px 10px #fff,0px 0px 10px #aaa
- Color scheme:
1.4 External Pane Packages Analysis
1.4.1 chat-pane v3.0.0
Location: Separate package @solidos/chat-pane
Dependencies: solid-ui: ^3.0.0 (peer dependency)
**└── depends on chat-pane (v3.0.0)
└── depends on contacts-pane (v3.0.0)
└── depends on folder-pane (v3.0.0)
└── depends on [other pane packages]
└── All have peer-dependency on solid-ui (^3.0.0)
└── solid-ui depends on rdflib (v2.x)
└── solid-uiipt
// src/longChatPane.js
import * as UI from 'solid-ui'
const SIDEBAR_COMPONENT_STYLE = UI.style.sidebarComponentStyle ||
' padding: 0.5em; width: 100%;'
const SIDEBAR_STYLE = UI.style.sidebarStyle ||
'overflow-x: auto; overflow-y: auto; border-radius: 1em; border: 0.1em solid white;'
**Key Findings**:
- ✅ Uses `UI.style` object from solid-ui
- ✅ Provides fallback values if style properties don't exist
- ✅ Will automatically benefit from solid-ui theme system
- ⚠️ Has hardcoded fallback strings that may conflict with themes
**Recommendation**: Once solid-ui has CSS variables, chat-pane should use them in fallbacks:
```javascript
const SIDEBAR_STYLE = UI.style.sidebarStyle ||
'overflow-x: auto; overflow-y: auto; border-radius: var(--sui-border-radius-lg, 1em);'
1.4.2 contacts-pane v3.0.0
Location: Separate package @solidos/contacts-pane
Dependencies: solid-ui: ^3.0.0 (peer dependency)
Styling Approach:
// src/contactsPane.js
import * as UI from 'solid-ui'
const style = UI.style
// Later in code:
// Uses style.searchInputStyle, style.autocompleteRowStyle, etc.
Key Findings:
- ✅ Directly uses solid-ui style object
- ✅ No custom styling - fully dependent on solid-ui
- ✅ Will automatically receive theme updates
- ✅ Clean architecture - separates styling from logic
TypeScript files (autocompleteBar.ts, etc.):
import { ns, widgets, icons } from 'solid-ui'
// Uses widgets.button(), widgets.makeDropTarget()
// Styling handled by solid-ui widgets
1.4.3 folder-pane v3.0.0
Location: Separate package @solidos/folder-pane
Dependencies: solid-ui: ^3.0.0 (peer dependency)
Styling Approach:
// src/folderPane.ts
import * as UI from 'solid-ui'
const paneStyle = UI.style.folderPaneStyle ||
'border-top: solid 1px #777; border-bottom: solid 1px #777; ' +
'margin-top: 0.5em; margin-bottom: 0.5em;'
div.setAttribute('style', paneStyle)
Key Findings:
- ✅ Uses
UI.stylewith fallback - ✅ Minimal custom styling
- ✅ Will automatically benefit from theme system
- ⚠️ Hardcoded border colors in fallback
Recommendation: Update fallback to use CSS variables:
const paneStyle = UI.style.folderPaneStyle ||
'border-top: solid 1px var(--sui-border, #777); ' +
'border-bottom: solid 1px var(--sui-border, #777); ' +
'margin-top: var(--sui-space-sm, 0.5em); margin-bottom: var(--sui-space-sm, 0.5em);'
1.4.4 Summary: External Pane Compatibility
| Pane Package | solid-ui Usage | Custom Styles | Theme Compatibility | Action Required |
|---|---|---|---|---|
| chat-pane | High | Low (fallbacks) | ✅ Excellent | Update fallback strings |
| contacts-pane | Full | None | ✅ Perfect | None - fully compatible |
| folder-pane | High | Low (fallbacks) | ✅ Excellent | Update fallback strings |
Impact Assessment:
- 🎯 Zero breaking changes needed - All panes already use solid-ui styles
- 🎯 Automatic propagation - CSS variables in solid-ui work immediately
- 🎯 Minor improvements - Update hardcoded fallback values to use CSS variables
- 🎯 Testing required - Verify visual appearance with new themes
2. Dependency Chain & Impact Analysis
2.1 Package Dependencies
solid-panes (v4.0.0)
└── depends on solid-ui (v3.0.0)
└── depends on rdflib (v2.x)
└── depends on solid-logic (v4.0.0)
solid-chat (standalone)
└── peer-depends on rdflib (for panes)
external pane packages (chat-pane, contacts-pane, folder-pane, etc.)
3. Tertiary impact: All panes in solid-panes (which imports those packages)
4. Quaternary impact: mashlib data browser
5. Quinary impact: All apps using mashlib
Critical Insight: Updating solid-ui creates the most leverage for ecosystem-wide improvement.
Verified Compatibility: Code review of chat-pane, contacts-pane, and folder-pane confirms:
- ✅ All three use
import * as UI from 'solid-ui' - ✅ All three reference
UI.stylefor styling - ✅ No custom CSS files in these packages
- ✅ Theme changes in solid-ui propagate automatically
- ✅ CSS variables will work without package updates
- Secondary impact: All panes in solid-panes
- Tertiary impact: mashlib data browser
- Quaternary impact: All apps using mashlib
Critical Insight: Updating solid-ui creates the most leverage for ecosystem-wide improvement.
3. Comparative Styling Analysis
3.1 Color Palettes
| Component | Primary | Secondary | Background | Border | Text |
|---|---|---|---|---|---|
| solid-chat | #805ad5 |
#9f7aea |
#f7f8fc |
#e2e8f0 |
#2d3748 |
| solid-ui | #3B5998 |
#7C4DFF |
#eef |
#88c |
#000 |
| tabbedtab.css | #8f3 |
#dfd |
white |
#777 |
#333 |
| mbStyle.css | #357598 |
#333 |
#fff |
#333 |
#333 |
Recommendation: Adopt solid-chat's modern palette as the base, with theme variations.
3.2 Visual Design Elements
| Element | solid-chat | solid-ui | solid-panes |
|---|---|---|---|
| Gradients | ✅ Extensive (135deg) | ❌ None | ❌ None |
| Shadows | ✅ rgba(102,126,234,0.3) |
⚠️ Minimal #888 |
⚠️ Basic #aaa |
| Border Radius | ✅ 18px (messages) | ⚠️ 0.2em | ⚠️ 0.75-1em |
| Spacing | ✅ 16-24px generous | ⚠️ 0.5-0.7em compact | ⚠️ 0.5em compact |
| Typography | ✅ Inter font family | ⚠️ Generic sans-serif | ⚠️ Helvetica, Arial |
| Transitions | ✅ 0.2s animations | ❌ None | ⚠️ Some (opacity) |
| Mobile | ✅ viewport-fit, dvh | ❌ Limited | ❌ Limited |
3.3 Architecture Patterns
| Aspect | solid-chat | solid-ui | solid-panes |
|---|---|---|---|
| Style injection | <style> in pane |
Inline via JS | External CSS files |
| Theming | Runtime switching | None | None |
| CSS Variables | ✅ Extensive | ❌ None | ❌ None |
| Modularity | Per-pane styles | Global style object | Mix of both |
| Maintenance | Easy (CSS files) | Hard (JS strings) | Medium (CSS + JS) |
4. Proposed Unified Architecture
4.1 Three-Tier Theme System
┌─────────────────────────────────────────────────────┐
│ TIER 1: Theme Foundation (solid-ui) │
│ - Base CSS variables │
│ - Core color palette │
│ - Typography system │
│ - Spacing/sizing constants │
└────────────────────────┬────────────────────────────┘
│
┌───────────────┴───────────────┐
↓ ↓
┌────────────────────────┐ ┌──────────────────────┐
│ TIER 2: Component │ │ TIER 2: Pane │
│ Themes (solid-ui) │ │ Themes (solid-panes) │
│ - Widget styles │ │ - Pane-specific │
│ - Form styles │ │ - Override base │
│ - Button styles │ │ - Add extensions │
└────────────────────────┘ └──────────────────────┘
│ │
└───────────────┬───────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ TIER 3: Application Themes (mashlib/apps) │
│ - App-specific overrides │
│ - Custom themes │
│ - Branding variations │
└─────────────────────────────────────────────────────┘
4.2 Directory Structure (Proposed)
solid-ui/
src/
themes/
foundation/
variables.css # Base CSS custom properties
typography.css # Font definitions
colors.css # Color system
spacing.css # Spacing scale
presets/
default.css # Default Solid theme (purple)
wave.css # WhatsApp-style (green)
telegram.css # Messenger-style (blue)
signal.css # Signal-style (dark)
classic.css # Preserve current solid-ui look
components/
buttons.css # Button theming
forms.css # Form element theming
chat.css # Chat-specific theming
modals.css # Modal/dialog theming
style.js # Updated to use CSS variables
styleConstants.js # Migrate to CSS
themeLoader.js # Theme switching utility
solid-panes/
src/
themes/
panes.css # Base pane theming
overrides/
chat-pane.css # Chat pane specific
folder-pane.css # Folder pane specific
issue-pane.css # Issue pane specific
style/
tabbedtab.css # Modernized with variables
legacy.css # Legacy support (deprecated)
solid-chat/
themes/ # Keep as reference/inspiration
(existing themes)
5. Implementation Strategy
Phase 1: Foundation in solid-ui (Weeks 1-2)
Goal: Establish CSS variable foundation without breaking existing code
-
Create theme foundation
mkdir -p src/themes/{foundation,presets,components} -
Define base CSS variables (
src/themes/foundation/variables.css)::root { /* Colors */ --sui-primary: #805ad5; --sui-secondary: #9f7aea; --sui-gradient-start: #667eea; --sui-gradient-end: #9f7aea; /* Backgrounds */ --sui-bg: #f7f8fc; --sui-bg-panel: #ffffff; --sui-bg-input: #eef; /* Text */ --sui-text: #2d3748; --sui-text-secondary: #4a5568; --sui-text-muted: #a0aec0; /* Borders */ --sui-border: #e2e8f0; --sui-border-radius: 0.5em; --sui-border-radius-sm: 0.2em; --sui-border-radius-lg: 1em; /* Shadows */ --sui-shadow-sm: 0 1px 2px rgba(0,0,0,0.08); --sui-shadow: 0 4px 12px rgba(0,0,0,0.15); --sui-shadow-lg: 0 8px 24px rgba(0,0,0,0.2); /* Spacing scale */ --sui-space-xs: 0.25em; --sui-space-sm: 0.5em; --sui-space-md: 1em; --sui-space-lg: 1.5em; --sui-space-xl: 2em; /* Typography */ --sui-font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; --sui-font-size-sm: 0.875em; --sui-font-size-base: 1em; --sui-font-size-lg: 1.125em; --sui-font-size-xl: 1.25em; } -
Create classic theme (backward compatibility):
/* src/themes/presets/classic.css */ :root { --sui-primary: #3B5998; /* Keep existing blue */ --sui-bg-input: #eef; /* Keep existing */ /* ... preserve current colors */ } -
Update style.js to hybrid mode:
// Maintain existing API, add CSS variable support export const style = { textInputStyle: 'background-color: var(--sui-bg-input, #eef); ' + 'padding: var(--sui-space-sm, 0.5em); ' + 'border: .05em solid var(--sui-border, #88c); ' + 'border-radius: var(--sui-border-radius-sm, 0.2em); ' + 'font-size: 100%; margin: 0.4em;', // ... convert all style strings } -
Create theme loader utility (
src/themeLoader.js):export class ThemeLoader { constructor() { this.currentTheme = localStorage.getItem('solid-ui-theme') || 'default' this.themes = { default: 'themes/presets/default.css', wave: 'themes/presets/wave.css', telegram: 'themes/presets/telegram.css', signal: 'themes/presets/signal.css', classic: 'themes/presets/classic.css' } } loadTheme(themeName) { const theme = this.themes[themeName] || this.themes.default const link = document.getElementById('solid-ui-theme') || this.createThemeLink() link.href = theme localStorage.setItem('solid-ui-theme', themeName) this.currentTheme = themeName } createThemeLink() { const link = document.createElement('link') link.id = 'solid-ui-theme' link.rel = 'stylesheet' document.head.insertBefore(link, document.head.firstChild) return link } } export const themeLoader = new ThemeLoader() -
Testing:
- Test all existing widgets with classic theme (no visual change)
- Test theme switching between classic and new themes
- Verify backward compatibility with existing apps
Phase 2: Modernize solid-ui Components (Weeks 3-4)
Goal: Update key components to leverage new theme system
-
Priority components:
- Chat components (
src/chat/) - Buttons and inputs (
src/widgets/) - Forms (
src/create/) - ACL controls (
src/acl/) - Login forms (
src/login/)
- Chat components (
-
Create component-specific theme files:
/* src/themes/components/buttons.css */ .solid-ui-button { background: linear-gradient(135deg, var(--sui-gradient-start), var(--sui-gradient-end)); border-radius: var(--sui-border-radius); box-shadow: var(--sui-shadow-sm); transition: all 0.2s ease; } .solid-ui-button:hover { box-shadow: var(--sui-shadow); transform: translateY(-1px); } -
Update chat components:
- Apply solid-chat styling patterns
- Use CSS variables throughout
- Add gradients to headers
- Improve message bubble design
- Add hover states and transitions
-
Testing:
- Visual regression testing
- Test in mashlib context
- Mobile responsive testing
Phase 3: Adapt solid-panes (Weeks 5-6)
Goal: Modernize panes to use solid-ui theme system
-
Update pane base styles:
/* src/themes/panes.css */ .pane-container { background: var(--sui-bg-panel); border-radius: var(--sui-border-radius); box-shadow: var(--sui-shadow); padding: var(--sui-space-lg); } .pane-header { background: linear-gradient(135deg, var(--sui-gradient-start), var(--sui-gradient-end)); color: white; padding: var(--sui-space-md); border-radius: var(--sui-border-radius) var(--sui-border-radius) 0 0; } -
Modernize tabbedtab.css:
- Replace hard-coded colors with CSS variables
- Update border-radius values
- Add modern shadows
- Improve spacing
-
Update mbStyle.css:
- Convert to CSS variables
- Apply modern gradients
- Improve button styling
- Add transitions
-
Per-pane adjustments:
- Each imported pane package may need theme update
- Create override CSS files for major panes
- Document theming API for pane developers
-
Testing:
- Test all panes in mashlib
- Verify no regressions
- Test theme switching across panes
Phase 4: Integration & Documentation (Week 7)
Goal: Complete integration and document theme system
-
Create theme switcher widget:
// Add to solid-ui widgets export function createThemeSwitcher(dom, options) { const select = dom.createElement('select') select.className = 'solid-ui-theme-switcher' Object.entries(themeLoader.themes).forEach(([name, path]) => { const option = dom.createElement('option') option.value = name option.textContent = name.charAt(0).toUpperCase() + name.slice(1) select.appendChild(option) }) select.value = themeLoader.currentTheme select.addEventListener('change', (e) => { themeLoader.loadTheme(e.target.value) }) return select } -
Documentation:
- Theme creation guide
- CSS variable reference
- Migration guide from old styles
- Best practices for pane developers
-
Storybook updates:
- Add theme switcher to Storybook
- Document all themes
- Show before/after comparisons
-
Integration testing:
- Test in mashlib with all themes
- Performance testing
- Browser compatibility
6. Backward Compatibility Strategy
6.1 Compatibility Layers
For solid-ui:
// style.js - maintain existing API
export const style = {
// Old API (still works)
textInputStyle: 'background-color: var(--sui-bg-input, #eef); ...',
// New API (recommended)
textInput: {
backgroundColor: 'var(--sui-bg-input)',
padding: 'var(--sui-space-sm)',
// ...
}
}
// Provide helper to convert old to new
export function applyStyle(element, styleString) {
element.setAttribute('style', styleString)
}
For solid-panes:
/* Provide fallback values in CSS variables */
:root {
--sui-primary: var(--legacy-primary, #805ad5);
--sui-bg: var(--legacy-bg, #f7f8fc);
}
6.2 Migration Path
- v3.1.0: Add CSS variables, keep old API (non-breaking)
- v4.0.0: Default to new themes, deprecate old API
- v5.0.0: Remove old style string API
7. Benefits Analysis
7.1 User Benefits
✅ Consistent visual experience across all Solid apps
✅ Modern appearance competitive with centralized apps
✅ Personalization via theme selection
✅ Better accessibility with proper contrast ratios
✅ Mobile-friendly responsive design
7.2 Developer Benefits
✅ Easier maintenance - CSS variables vs JS strings
✅ Better tooling - CSS can use SASS, PostCSS, etc.
✅ Faster development - Pre-built theme components
✅ Clear patterns - Documentation and examples
✅ Performance - CSS over inline styles
7.3 Ecosystem Benefits
✅ Unified branding for Solid platform
✅ Professional appearance aids adoption
✅ Theme marketplace potential - community themes
✅ Cross-app consistency improves UX
✅ Attracts designers - easier to contribute
8. Risk Assessment & Mitigation
8.1 Technical Risks
| Risk | Severity | Mitigation |
|---|---|---|
| Breaking changes | High | Maintain backward compatibility layer |
| Performance impact | Low | CSS variables are fast, test thoroughly |
| Browser compatibility | Low | CSS variables well-supported, provide fallbacks |
| Bundle size increase | Medium | Tree-shake unused themes, lazy load |
| Testing coverage | Medium | Visual regression testing, automated tests |
8.2 Adoption Risks
| Risk | Severity | Mitigation |
|---|---|---|
| User confusion | Low | Default to familiar look (classic theme) |
| Developer resistance | Medium | Clear migration guide, gradual rollout |
| App breakage | Medium | Extensive testing, beta period |
| Documentation gap | Medium | Comprehensive docs before release |
8.3 Mitigation Timeline
- Weeks 1-2: Internal testing with classic theme
- Week 3: Beta release to early adopters
- Week 4: Gather feedback, iterate
- Weeks 5-6: Full rollout with documentation
- Week 7: Support and bug fixes
9. Open Questions & Decisions Needed
9.1 Version Strategy
Question: Should this be v4.0.0 (breaking) or v3.1.0 (compatible)?
Options:
-
A: v3.1.0 - Add themes but maintain full backward compatibility
- Pros: Safer, gradual adoption
- Cons: Carries technical debt longer
-
B: v4.0.0 - New themes default, deprecate old API
- Pros: Clean break, faster modernization
- Cons: Requires migration effort from apps
Recommendation: Start with v3.1.0, plan v4.0.0 for 6 months later
9.2 Default Theme
Question: What should be the default theme?
Options:
- Classic: Current solid-ui look (safest)
- Solid: Purple gradient (modern, solid-chat style)
- Wave: Green WhatsApp style (familiar to users)
Recommendation: Classic for v3.1.0, Solid for v4.0.0
9.3 Theme Scope
Question: Should themes be global or per-component?
Options:
-
Global: One theme for entire app
- Pros: Simpler, consistent
- Cons: Less flexible
-
Per-component: Different themes for different panes
- Pros: Maximum flexibility
Answer**: ✅ Already solved - Code review confirms automatic propagation
- Pros: Maximum flexibility
Findings from Code Review:
- All external panes import
solid-uiand useUI.style - No separate CSS files in pane packages
- Styling is centralized in solid-ui
- Changes to solid-ui CSS variables work immediately
Recommendation:
- Primary: Automatic theme injection via solid-ui (no pane changes needed)
- Optional: Panes can update hardcoded fallback strings to use CSS variables
- Future: Document best practices for pane developers
Action Items for Pane Packages (optional, non-breaking):
- chat-pane: Update
SIDEBAR_STYLEfallback to use CSS variables - folder-pane: Update
paneStylefallback to use CSS variables - All panes: Test visual appearance with new themes
- Document: Add theme customization guide for pane developers
Question: How do external pane packages (chat-pane, folder-pane) adopt themes?
Options:
- A: Require pane updates for theme support
- B: Provide automatic theme injection
- C: Both - automatic with opt-in for custom
Recommendation: Option C - Auto-inject base theme, allow customization
10. Success Metrics
10.1 Technical Metrics
- ✅ Zero breaking changes in v3.1.0 release
- ✅ <5% bundle size increase after theme system
- ✅ 100% visual parity with classic theme option
- ✅ All tests passing across solid-ui and solid-panes
- ✅ <100ms theme switch time
10.2 Adoption Metrics
- 📊 50% users try non-classic theme within 1 month
- 📊 80% apps migrate within 6 months
- 📊 3+ community themes created within 3 months
- 📊 Zero P0 bugs reported in first 2 weeks
- 📊 Positive feedback >80% in user surveys
10.3 Ecosystem Metrics
- 🌟 mashlib updated with theme support within 1 month
- 🌟 5+ pane packages updated for themes within 3 months
- 🌟 Documentation complete and published
- 🌟 Storybook updated with theme examples
- 🌟 Design system documented and accessible
- ⬜ Test with external panes - Verify chat-pane, contacts-pane, folder-pane work with themes
11. Next Steps & Action Items
Immediate (This Week)
- ✅ Get stakeholder feedback on this analysis
- ⬜ Make version decision (v3.1.0 vs v4.0.0)
- ⬜ Choose default theme
- ⬜ Create GitHub issues for solid-ui and solid-panes
- ⬜ Set up project board for tracking
ShoOptional: Update pane packages** - Update fallback strings in chat-pane, folder-pane
- ⬜ Test integration with mashlib and all pane packages
- ⬜ Write documentation including pane developer guide
- ⬜ Create Storybook examples
- ⬜ Implement foundation CSS variables
- ⬜ Create classic theme for backward compatibility
- ⬜ Port solid-chat themes to solid-ui format
- ⬜ Update style.js to hybrid mode
- ⬜ Write tests for theme system
Medium Term (Weeks 3-6)
- ⬜ Update components in solid-ui
- ⬜ Modernize solid-panes CSS files
- ⬜ Test integration with mashlib
- ⬜ Write documentation
- ⬜ Create Storybook examples
- ⬜ Beta testing with early adopters
Long Term (Weeks 7+)
- ⬜ Release v3.1.0 with themes
- ⬜ Gather feedback and iterate
- ⬜ Plan v4.0.0 breaking changes
- ⬜ Community themes submission process
- ⬜ Theme marketplace exploration
12. Resources & References
Documentation
- solid-chat theming docs
- solid-ui current styles
- solid-panes README
Theme Files
- solid.css - Purple theme
- wave.css - Green theme
- telegram.css - Blue theme
- signal.css - Signal theme
Related Issues
- solid-ui theme implementation issue
solid-chat panes:src/longChatPane.js,src/chatListPane.js - solid-ui styles:
src/style.js,src/styleConstants.js - solid-panes:
src/style/tabbedtab.css,src/microblogPane/mbStyle.css - chat-pane:
src/longChatPane.js(usesUI.style.sidebarComponentStyle) - contacts-pane:
src/contactsPane.js(imports and usesUI.style) - folder-pane:
src/folderPane.ts(usesUI.style.folderPaneStyle)
Package Dependencies Verified
- chat-pane v3.0.0: peer dep
solid-ui: ^3.0.0 - contacts-pane v3.0.0: peer dep
solid-ui: ^3.0.0 - folder-pane v3.0.0: peer dep
solid-ui: ^3.0.0 - solid-panes v4.0.0: depends on above packages + `solid-ui: ^3.0.0
- solid-ui styles:
src/style.js,src/styleConstants.js - solid-panes:
src/style/tabbedtab.css,src/microblogPane/mbStyle.css
13. Conclusion
Adapting solid-chat's modern theme system to solid-ui and solid-panes represents a significant but achievable modernization of the Solid ecosystem's visual design. By following a phased approach with strong backward compatibility, we can deliver:
- ✅ Modern, competitive UI that matches contemporary apps
- ✅ User customization via runtime theme switching
- ✅ Developer experience improvement with CSS variables
- ✅ Ecosystem consistency across all Solid applications
- ✅ Future flexibility for community themes and branding
The key to success is maintaining solid-ui backward compatibility while building the foundation for future improvements. Starting with v3.1.0 (compatible) and moving to v4.0.0 (modern default) provides a safe migration path.
Recommendation: Proceed with Phase 1 implementation, focusing on foundation and backward compatibility, with regular stakeholder check-ins.
Authors: AI Analysis based on codebase review
Status: Draft for Review
Last Updated: January 15, 2026
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading src/style.js and src/styleConstants.js, then compare the themes/ files from solid-chat with src/style/tabbedtab.css and src/microblogPane/mbStyle.css. Trace representative consumers such as src/chat/infinite.js and src/widgets/ to understand the shared styling surface. Done means the affected Solid UI and panes use the unified themes and their visual behavior is verified across the listed integrations.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- css, javascript, typescript
- Domain
- design, frontend, web-dev
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100