feat: theme - 01

This commit is contained in:
kodi
2026-03-12 18:49:13 +01:00
parent ab83ee3f20
commit 09c3e14dea
17 changed files with 852 additions and 82 deletions
+247
View File
@@ -0,0 +1,247 @@
# Built-in Themes v1.1
## 1. Theme families voor v1
Aanbevolen built-in theme families voor v1.1:
- `default`
- `macos-soft`
- `midnight`
- `graphite`
- `windows11`
Deze set is klein genoeg om beheersbaar te blijven en groot genoeg om visueel zinvolle keuze te bieden zonder een theme-explosie te veroorzaken.
## 2. LCARS
`lcars` hoort expliciet niet in v1.1.
Aanbevolen behandeling:
- niet opnemen in deze slice
- later als aparte v2 onderzoeken
Reden:
- `lcars` is visueel extreem uitgesproken
- hoger risico op regressie in leesbaarheid, functiebalkgebruik, row states, modals en paneelcontrast
- grotere kans dat componentstructuur visueel gaat knellen tegen de huidige dual-pane workflow
Conclusie:
- `lcars` beter behandelen als aparte latere theme-slice met eigen UX-validatie
## 3. Theme-model
Het bestaande model blijft leidend:
- `selected_theme` = theme family
- `selected_color_mode` = `dark` of `light`
Beide blijven persistent opgeslagen in SQLite settings.
Voorbeelden van effectieve combinaties:
- `default-dark`
- `default-light`
- `macos-soft-dark`
- `macos-soft-light`
- `midnight-dark`
- `graphite-light`
- `windows11-dark`
Belangrijk:
- theme family en color mode blijven twee gescheiden concepten
- de hoofdinterface-toggle blijft alleen `selected_color_mode` wisselen
- `Settings > Interface` blijft alleen `selected_theme` beheren
## 4. CSS-architectuur
Voorkeursrichting voor v1.1:
- één gedeelde `base.css` voor:
- layout
- spacing
- componentstructuur
- modals
- panelen
- functiebalk
- lijst/tabelstructuur
- algemene componentbasis
- aparte CSS-bestanden per theme-family:
- `theme-default.css`
- `theme-macos-soft.css`
- `theme-midnight.css`
- `theme-graphite.css`
- `theme-windows11.css`
- light/dark binnen dezelfde family geregeld via selectors of tokens
Dus expliciet niet:
- één enorm all-in-one CSS-bestand met alles door elkaar
- per `theme+mode` een volledig apart layoutbestand
Aanbevolen structuur:
- `base.css`
- `theme-default.css`
- `theme-macos-soft.css`
- `theme-midnight.css`
- `theme-graphite.css`
- `theme-windows11.css`
Binnen elk theme-family bestand:
- alleen tokens en beperkte theme-afwerking
- geen duplicatie van layoutregels
- geen alternatieve componentstructuur
Voorbeeldselector-richting:
- `:root[data-theme-family="macos-soft"][data-color-mode="dark"] { ... }`
- `:root[data-theme-family="macos-soft"][data-color-mode="light"] { ... }`
Of equivalent via custom properties.
## 5. Waarom deze architectuur onderhoudbaarder is
Deze architectuur is onderhoudbaarder omdat hij drie dingen schoon van elkaar scheidt:
- wat de UI is: layout en componentstructuur in `base.css`
- welke stijl-family actief is: family-bestand
- welke kleurmodus actief is: dark/light tokens binnen die family
Voordelen:
- layout-CSS staat op één plek
- theme-bestanden blijven klein en thematisch leesbaar
- regressies zijn makkelijker te isoleren per family
- nieuwe family toevoegen vereist minder risico op breken van bestaande layout
- dark/light binnen één family blijft samenhangend beheerd
Hoe duplicatie van layout-CSS voorkomen wordt:
- `base.css` bevat alle structurele regels
- family-bestanden overschrijven alleen tokens en kleine visuele accenten
- geen herhaling van paneelgrid, modal layout, functiebalkstructuur of lijstlayout per family
Hoe theme switching schoon blijft:
- frontend hoeft alleen `selected_theme` en `selected_color_mode` te lezen
- die waarden vertalen naar theme-attributen op `document.documentElement`
- CSS doet de rest via selectors/custom properties
- geen runtime CSS-generatie nodig
- geen vrije bestandsselectie
- geen ingewikkelde asset-resolutie
## 6. Visuele richting per theme
Alle themes behouden exact dezelfde layout en informatiearchitectuur. Alleen visuele stijl verschilt.
### `default`
Doel:
- neutrale baseline
- functioneel
- rustig
- compact
Karakter:
- de huidige standaardstijl, iets verfijnd maar niet uitgesproken
### `macos-soft`
Doel:
- zacht
- verfijnd
- vriendelijk
Karakter:
- subtiele surfaces
- zachte grijstinten
- lichte premium desktop-app indruk
- iets vriendelijkere rounding/shadows, zonder layout te veranderen
### `midnight`
Doel:
- donker
- gefocust
- rustig
Karakter:
- diepere donkere panelen
- koele accenten
- sterke maar nette current/selected contrasten
- geschikt voor langdurig gebruik in dark mode
### `graphite`
Doel:
- sober
- professioneel
- bijna monochroom
Karakter:
- grijs-gedreven palette
- minimale accentkleur
- contrast via luminantie in plaats van felle tinten
### `windows11`
Doel:
- helder
- modern
- clean desktop-app gevoel
Karakter:
- lichtere surfaces
- subtiele border/surface scheiding
- iets luchtiger accentgebruik
- behoud van compacte file-manager ergonomie
## 7. Settings UI
`Settings > Interface` toont een dropdown/select met de theme families:
- `default`
- `macos-soft`
- `midnight`
- `graphite`
- `windows11`
Dark/light blijft via de bestaande toggle in de hoofdinterface.
Dus:
- Interface tab = keuze van style family
- Main interface toggle = keuze van color mode
Geen extra theme-complexiteit in v1.1:
- geen preview gallery
- geen import/export
- geen vrije CSS-keuze
- geen uploads
## 8. Backend-impact
Backend-aanpassing blijft klein:
- whitelist van `selected_theme` uitbreiden met:
- `default`
- `macos-soft`
- `midnight`
- `graphite`
- `windows11`
- `selected_color_mode` blijft bestaan zoals nu
- geen vrije css-bestandskeuze
- geen uploadmechanisme
- geen nieuwe dependencies
De bestaande settings-opslag en settings-API kunnen verder hetzelfde model blijven gebruiken.
## 9. Regressierisico
Belangrijkste risicos:
- leesbaarheid per theme/mode
- current row / selected row contrast te zwak of te hard
- modals die in bepaalde families te vlak worden
- functiebalk die visueel wegvalt
- editor/viewers die niet goed mee themen
- thumbnail/icon-slot met te weinig contrast
- CSS-fragmentatie als family-bestanden toch structurele regels gaan bevatten
- duplicatie als layout-regels alsnog in family-bestanden belanden
Belangrijk mitigatieprincipe:
- family-bestanden beperken tot visuele tokens en kleine afwerkingsregels
- geen layout-overrides per family
- consistent regressietesten van dezelfde states in alle families
## 10. Aanbeveling
Aanbevolen richting voor deze app:
- ja, `base.css` + aparte CSS per theme-family is de juiste richting
Waarom:
- laag regressierisico
- duidelijke scheiding tussen structuur en uiterlijk
- onderhoudbaar bij toekomstige uitbreiding
- sluit aan op het bestaande model van `selected_theme` + `selected_color_mode`
- voorkomt zowel een gigantisch all-in-one stylesheet als onnodige duplicatie per `theme+mode`
Expliciete aanbevelingen:
- gebruik gedeelde basis-CSS voor layout/componentstructuur
- gebruik aparte CSS per theme-family
- regel dark/light binnen dezelfde family via selectors/tokens
- behandel `lcars` expliciet als aparte latere slice
Conclusie:
- deze architectuur is de juiste basis voor built-in themes in deze app
- `lcars` moet niet worden meegetrokken in v1.1, maar apart worden ontworpen en gevalideerd