fix: theme reverts to light on reload when system preference stored (#61)

This commit is contained in:
Ulas Kalayci
2026-04-20 10:08:07 +02:00
parent e48d249fbe
commit 30d3d6cd13
4 changed files with 15 additions and 5 deletions
+5
View File
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
## [0.20.25] - 2026-04-20
### Fixed
- Theme selection no longer reverts to light mode on page reload when "System" is chosen; the init script now correctly resolves the `system` preference to the OS dark/light state instead of treating it as a literal `data-theme` value
## [0.20.24] - 2026-04-20 ## [0.20.24] - 2026-04-20
### Added ### Added
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "oikos", "name": "oikos",
"version": "0.20.24", "version": "0.20.25",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "oikos", "name": "oikos",
"version": "0.20.24", "version": "0.20.25",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"bcrypt": "^6.0.0", "bcrypt": "^6.0.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "oikos", "name": "oikos",
"version": "0.20.24", "version": "0.20.25",
"description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.", "description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.",
"main": "server/index.js", "main": "server/index.js",
"type": "module", "type": "module",
+7 -2
View File
@@ -47,9 +47,14 @@
(function() { (function() {
var stored = localStorage.getItem('oikos-theme'); var stored = localStorage.getItem('oikos-theme');
var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
document.documentElement.setAttribute('data-theme', stored || (prefersDark ? 'dark' : 'light')); if (stored === 'dark' || stored === 'light') {
document.documentElement.setAttribute('data-theme', stored);
} else {
document.documentElement.setAttribute('data-theme', prefersDark ? 'dark' : 'light');
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) { window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) {
if (!localStorage.getItem('oikos-theme')) { var current = localStorage.getItem('oikos-theme');
if (!current || current === 'system') {
document.documentElement.setAttribute('data-theme', e.matches ? 'dark' : 'light'); document.documentElement.setAttribute('data-theme', e.matches ? 'dark' : 'light');
} }
}); });