From dcfd0965889e2c6a92d617c6c05c15aec4d3646b Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 12 Nov 2025 21:07:01 +0100 Subject: [PATCH] feat: allow setting dark custom logo Resolves https://github.com/go-vikunja/vikunja/issues/1799 --- config-raw.json | 5 +++++ frontend/src/components/home/Logo.vue | 23 ++++++++++++++++++----- frontend/src/main.ts | 1 + pkg/config/config.go | 1 + pkg/routes/static.go | 2 ++ 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/config-raw.json b/config-raw.json index e3ecc9a49..68b8767c3 100644 --- a/config-raw.json +++ b/config-raw.json @@ -123,6 +123,11 @@ "default_value": "", "comment": "Allow using a custom logo via external URL." }, + { + "key": "customlogourldark", + "default_value": "", + "comment": "Allow using a custom logo for dark mode via external URL. If not set, the regular logo will be used for both light and dark modes." + }, { "key": "enablepublicteams", "default_value": "false", diff --git a/frontend/src/components/home/Logo.vue b/frontend/src/components/home/Logo.vue index d0b28f42d..f49bced86 100644 --- a/frontend/src/components/home/Logo.vue +++ b/frontend/src/components/home/Logo.vue @@ -2,6 +2,7 @@ import { computed } from 'vue' import { useNow } from '@vueuse/core' import { useAuthStore } from '@/stores/auth' +import { useColorScheme } from '@/composables/useColorScheme' import LogoFull from '@/assets/logo-full.svg?component' import LogoFullPride from '@/assets/logo-full-pride.svg?component' @@ -12,12 +13,24 @@ const now = useNow({ }) const authStore = useAuthStore() -const Logo = computed(() => window.ALLOW_ICON_CHANGES - && authStore.settings.frontendSettings.allowIconChanges - && now.value.getMonth() === 5 - ? LogoFullPride +const { isDark } = useColorScheme() + +const Logo = computed(() => window.ALLOW_ICON_CHANGES + && authStore.settings.frontendSettings.allowIconChanges + && now.value.getMonth() === 5 + ? LogoFullPride : LogoFull) -const CustomLogo = computed(() => window.CUSTOM_LOGO_URL) + +const CustomLogo = computed(() => { + const lightLogo = window.CUSTOM_LOGO_URL + const darkLogo = window.CUSTOM_LOGO_URL_DARK + + if (!lightLogo && !darkLogo) return '' + if (!darkLogo) return lightLogo + if (!lightLogo) return darkLogo + + return isDark.value ? darkLogo : lightLogo +})