Theme Change

"/home/yossef/notes/git/projects/maplibra/flows/Theme Change.md"

path: maplibra/flows/Theme Change.md

- **fileName**: Theme Change
- **Created on**: 2026-06-16 00:48:42

Theme Change

Purpose: How the app switches between light and dark themes without recreating map layers.

Related: ../Home.md, ../Architecture.md, ../modules/Layer Management.md, ../modules/UI Components.md, ../modules/Path Renderer.md

Theme Architecture

Themes are defined in theme.js with:

Theme Change Flow

  1. User toggles theme (or Android dispatches theme-changed)
  2. ThemeController.handleThemeToggle()script.js handleThemeChange()
  3. map.setStyle(themeConfig.mapStyle, { diff: false })
  4. Wait for style.load event
  5. applyThemeToMap() — update background, building shell, labels
  6. LayerManager.reapplyThemeColors() — update all style layers
    • Background color
    • Building shell extrusion color
    • Label text and halo colors
    • Dynamic style layers (fill-extrusion with selected/hover states)
  7. LayerManager.addBuildingShell(floors) — rebuild building shell
  8. floorDataManager.loadAndRenderFloor(currentFloorId) — re-render current floor
  9. PathRenderer.setTheme() — update route line colors
  10. PathfindingController.renderer.updateFilters() — update route filters

Key Design

Important Files

How It Connects