From b81bfc7f32a461ce606928b2ed6f2a5430134c23 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Fri, 29 May 2026 13:59:01 +0200 Subject: [PATCH] feat(profile): add appearance preferences page Add a profile appearance section for theme, page width, and zoom preferences. Move changelog access into the sidebar and bump the Coolify version to 4.1.2. --- app/Livewire/Profile/Appearance.php | 13 ++ app/Livewire/SettingsDropdown.php | 2 + config/constants.php | 2 +- docker-compose.dev.yml | 2 +- other/nightly/versions.json | 2 +- resources/views/components/navbar.blade.php | 86 +++++++- .../views/components/profile/navbar.blade.php | 17 ++ .../livewire/profile/appearance.blade.php | 119 +++++++++++ .../views/livewire/profile/index.blade.php | 3 +- .../livewire/settings-dropdown.blade.php | 191 +++++++----------- routes/web.php | 2 + .../ProfileAppearanceNavigationTest.php | 43 ++++ .../SidebarNavigationPreferencesTest.php | 63 ++++++ versions.json | 2 +- 14 files changed, 417 insertions(+), 130 deletions(-) create mode 100644 app/Livewire/Profile/Appearance.php create mode 100644 resources/views/components/profile/navbar.blade.php create mode 100644 resources/views/livewire/profile/appearance.blade.php create mode 100644 tests/Feature/ProfileAppearanceNavigationTest.php create mode 100644 tests/Feature/SidebarNavigationPreferencesTest.php diff --git a/app/Livewire/Profile/Appearance.php b/app/Livewire/Profile/Appearance.php new file mode 100644 index 000000000..6a1b72f80 --- /dev/null +++ b/app/Livewire/Profile/Appearance.php @@ -0,0 +1,13 @@ +getUnreadChangelogCount(); diff --git a/config/constants.php b/config/constants.php index e5dcee3fe..ac3c89feb 100644 --- a/config/constants.php +++ b/config/constants.php @@ -2,7 +2,7 @@ return [ 'coolify' => [ - 'version' => '4.1.1', + 'version' => '4.1.2', 'helper_version' => '1.0.14', 'realtime_version' => '1.0.15', 'railpack_version' => '0.23.0', diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 50edc140f..9c93678af 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -129,7 +129,7 @@ services: networks: - coolify minio: - image: ghcr.io/coollabsio/maxio:latest + image: coollabsio/maxio:latest pull_policy: always container_name: coolify-minio ports: diff --git a/other/nightly/versions.json b/other/nightly/versions.json index 78b027918..0c2bf23a2 100644 --- a/other/nightly/versions.json +++ b/other/nightly/versions.json @@ -1,7 +1,7 @@ { "coolify": { "v4": { - "version": "4.1.1" + "version": "4.1.2" }, "nightly": { "version": "4.2.0" diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index 433102dcb..a8a9aaf76 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -49,23 +49,32 @@ localStorage.setItem('theme', type); this.queryTheme(); }, + cycleTheme() { + const themes = ['light', 'system', 'dark']; + const currentIndex = themes.indexOf(this.theme || localStorage.getItem('theme') || 'dark'); + this.setTheme(themes[(currentIndex + 1) % themes.length]); + }, queryTheme() { const darkModePreference = window.matchMedia('(prefers-color-scheme: dark)').matches; const userSettings = localStorage.getItem('theme') || 'dark'; localStorage.setItem('theme', userSettings); + let isDark = false; if (userSettings === 'dark') { document.documentElement.classList.add('dark'); this.theme = 'dark'; + isDark = true; } else if (userSettings === 'light') { document.documentElement.classList.remove('dark'); this.theme = 'light'; } else if (darkModePreference) { this.theme = 'system'; document.documentElement.classList.add('dark'); + isDark = true; } else if (!darkModePreference) { this.theme = 'system'; document.documentElement.classList.remove('dark'); } + document.querySelector('meta[name=theme-color]')?.setAttribute('content', isDark ? '#101010' : '#ffffff'); }, checkZoom() { if (this.zoom === null) { @@ -92,9 +101,9 @@ } } }"> -