Learnify - Edgeless Theme Behavior Analysis
Learnify - Edgeless Theme Behavior Analysis
Problem Description
Edgeless background color behaves inconsistently between edit mode and preview mode:
- Edit Mode: When users create an edgeless in light mode and switch to dark mode, the background remains white
- Preview Mode: Shared read-only preview correctly follows the current theme color
Root Cause
1. Different Theme Extension Implementations
Edit Mode - AffineThemeExtension (/packages/frontend/core/src/blocksuite/view-extensions/theme/theme.ts):
1 | getEdgelessTheme(docId?: string) { |
Preview Mode - AffinePagePreviewThemeExtension (/packages/frontend/core/src/blocksuite/view-extensions/theme/preview-theme.ts):
1 | getEdgelessTheme() { |
2. Theme Settings During Document Creation
EditorSettingDocCreateMiddleware (/packages/frontend/core/src/modules/editor-setting/impls/doc-create-middleware.ts):
- When creating new documents, the
edgelessColorThemeproperty is set based onedgelessDefaultThemesetting - If set to 'specified', it sets to 'light' or 'dark' based on current app theme
- This causes the document theme to be "locked" to the theme at creation time
3. CSS Variable Application
Edgeless background uses CSS variables:
--affine-background-primary-color: Primary background color--affine-edgeless-grid-color: Grid color
Theme values:
- Light Theme: Background is white (255,255,255), grid is light gray (230,230,230)
- Dark Theme: Background is dark gray (20,20,20), grid is transparent dark gray (49,49,49,0.35)
Key File Locations
Edgeless Components:
- Edit mode:
/blocksuite/affine/blocks/root/src/edgeless/edgeless-root-block.ts - Preview mode:
/blocksuite/affine/blocks/root/src/preview/edgeless-root-preview-block.ts
- Edit mode:
Theme Services:
/packages/frontend/core/src/blocksuite/view-extensions/theme/theme.ts/packages/frontend/core/src/blocksuite/view-extensions/theme/preview-theme.ts
Document Creation Middleware:
/packages/frontend/core/src/modules/editor-setting/impls/doc-create-middleware.ts
Share Page:
/packages/frontend/core/src/desktop/pages/workspace/share/share-page.tsx
Solution Suggestions
- Short-term Solution: Modify document's
edgelessColorThemeproperty to 'system' - Long-term Solutions:
- Unify theme behavior between edit mode and preview mode
- Consider adding user option to let users decide whether to lock document theme
- Or modify default settings to make new documents use 'system' theme by default
Related Properties and Configuration
edgelessColorTheme: Document-level theme setting ('light' | 'dark' | 'system')edgelessDefaultTheme: Default theme preference in user settings ('auto' | 'light' | 'dark' | 'specified')AppThemeService: Global application theme service
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.


