# Theme Domain

Manages the theming engine: CSS variable injection, layout grid, theme library persistence, element picker for live editing, and schema validation. Drives the theme settings UI and the `ThemeNodeDirective` used across the app.

## Module map

```
theme/
├── application/
│   └── services/
│       ├── element-picker.service.ts        DOM element picker for live theme editing
│       ├── layout-sync.service.ts           Syncs grid layout state between editor and theme document
│       ├── theme-library.service.ts         Saved-theme CRUD via Electron file system
│       ├── theme-registry.service.ts        Wraps static registry/container lookups as signals
│       └── theme.service.ts                 Core orchestrator: CSS injection, draft/active, validation
│
├── domain/
│   ├── constants/
│   │   └── theme-llm-guide.constants.ts     LLM prompt context for AI-assisted theme editing
│   ├── logic/
│   │   ├── theme-defaults.logic.ts          Default theme document, JSON template, legacy detection
│   │   ├── theme-registry.logic.ts          Static registry of themeable elements and layout containers
│   │   ├── theme-schema.logic.ts            Schema field definitions, animation starters, suggested defaults
│   │   └── theme-validation.logic.ts        Theme document validation against registry + schema
│   └── models/
│       └── theme.model.ts                   All domain types (ThemeDocument, ThemeElementStyles, etc.)
│
├── infrastructure/
│   ├── services/
│   │   └── theme-library-storage.service.ts Electron bridge for saving/loading theme files
│   └── util/
│       └── theme-storage.util.ts            localStorage read/write for active + draft theme text
│
├── feature/
│   ├── settings/
│   │   ├── theme-grid-editor.component.*    Visual grid layout editor
│   │   ├── theme-json-code-editor.component.* CodeMirror JSON editor
│   │   └── theme-settings.component.*       Main theme settings page
│   ├── theme-node.directive.ts              Applies theme styles + picker interaction to host elements
│   └── theme-picker-overlay.component.*     Floating overlay showing picked element info
│
└── index.ts                                 Barrel exports
```

## Layer composition

```mermaid
graph TD
    ThemeService[ThemeService]
    Registry[ThemeRegistryService]
    Library[ThemeLibraryService]
    Layout[LayoutSyncService]
    Picker[ElementPickerService]
    LibStorage[ThemeLibraryStorageService]
    Storage[theme-storage.util]
    Defaults[theme-defaults.logic]
    Validation[theme-validation.logic]
    Schema[theme-schema.logic]
    RegistryLogic[theme-registry.logic]
    Models[theme.model]

    ThemeService --> Defaults
    ThemeService --> Schema
    ThemeService --> RegistryLogic
    ThemeService --> Validation
    ThemeService --> Storage
    Library --> LibStorage
    Library --> ThemeService
    Layout --> ThemeService
    Layout --> Registry
    Layout --> Defaults
    Registry --> RegistryLogic
    Picker --> Registry
    Validation --> Defaults
    Validation --> RegistryLogic
    Defaults --> RegistryLogic
    Defaults --> Models

    click ThemeService "application/services/theme.service.ts" "Core orchestrator" _blank
    click Registry "application/services/theme-registry.service.ts" "Registry wrapper" _blank
    click Library "application/services/theme-library.service.ts" "Theme library CRUD" _blank
    click Layout "application/services/layout-sync.service.ts" "Grid layout sync" _blank
    click Picker "application/services/element-picker.service.ts" "Element picker" _blank
    click LibStorage "infrastructure/services/theme-library-storage.service.ts" "Electron file I/O" _blank
    click Storage "infrastructure/util/theme-storage.util.ts" "localStorage" _blank
    click Defaults "domain/logic/theme-defaults.logic.ts" "Default theme" _blank
    click Validation "domain/logic/theme-validation.logic.ts" "Validation" _blank
    click Schema "domain/logic/theme-schema.logic.ts" "Schema fields" _blank
    click RegistryLogic "domain/logic/theme-registry.logic.ts" "Static registry" _blank
    click Models "domain/models/theme.model.ts" "Domain types" _blank
```
