mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-12 08:23:48 +02:00
dca01e6817
Fixes: https://github.com/woodpecker-ci/woodpecker/issues/1079 What do you think about using a consistent `woodpecker` color scheme? Right now, the `lime` color scheme from windicss is used that does not really fit the primary color used for the documentation website. I have used the primary color `#4CAF50` from the docs and created a color palette with https://palettte.app/: <details> <summary>JSON source</summary> ```Json [ { "paletteName": "New Palette", "swatches": [ { "name": "New Swatch", "color": "166E30" }, { "name": "New Swatch", "color": "248438" }, { "name": "New Swatch", "color": "369943" }, { "name": "New Swatch", "color": "4CAF50" }, { "name": "New Swatch", "color": "68C464" }, { "name": "New Swatch", "color": "8AD97F" } ] } ] ``` </details> ![image](https://github.com/woodpecker-ci/woodpecker/assets/3391958/a254f1e0-ce17-43a9-9e8b-72252296fd6f) I have added this color scheme to the windicss config and replaced the use of `lime` in the UI. While `woodpecker-300` would be the primary color that is used for the docs, I currently use `woodpecke-400` as primary color for the UI to fix some contrast issues. ![image](https://github.com/woodpecker-ci/woodpecker/assets/3391958/7bf751e1-f2a6-481c-bee7-a27d27cf8adb) ![image](https://github.com/woodpecker-ci/woodpecker/assets/3391958/e5673dc7-81c1-4fd4-bef9-14494bc5aa27) What do you think? If you would like to stay with the current colors, that's fine for me, I can just use the custom CSS feature in this case. --------- Co-authored-by: 6543 <6543@obermui.de>
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import { computed, ref, watch } from 'vue';
|
|
|
|
const LS_DARK_MODE = 'woodpecker:dark-mode';
|
|
const isDarkModeActive = ref(false);
|
|
|
|
watch(isDarkModeActive, (isActive) => {
|
|
if (isActive) {
|
|
document.documentElement.classList.remove('light');
|
|
document.documentElement.classList.add('dark');
|
|
document.documentElement.setAttribute('data-theme', 'dark');
|
|
document.querySelector('meta[name=theme-color]')?.setAttribute('content', '#2A2E3A'); // internal-wp-secondary-600 (see windi.config.ts)
|
|
} else {
|
|
document.documentElement.classList.remove('dark');
|
|
document.documentElement.classList.add('light');
|
|
document.documentElement.setAttribute('data-theme', 'light');
|
|
document.querySelector('meta[name=theme-color]')?.setAttribute('content', '#369943'); // internal-wp-primary-400
|
|
}
|
|
});
|
|
|
|
function setDarkMode(isActive: boolean) {
|
|
isDarkModeActive.value = isActive;
|
|
localStorage.setItem(LS_DARK_MODE, isActive ? 'dark' : 'light');
|
|
}
|
|
|
|
function load() {
|
|
const isActive = localStorage.getItem(LS_DARK_MODE) as 'dark' | 'light' | null;
|
|
if (isActive === null) {
|
|
setDarkMode(window.matchMedia('(prefers-color-scheme: dark)').matches);
|
|
} else {
|
|
setDarkMode(isActive === 'dark');
|
|
}
|
|
}
|
|
|
|
load();
|
|
|
|
export function useDarkMode() {
|
|
return {
|
|
darkMode: computed({
|
|
get() {
|
|
return isDarkModeActive.value;
|
|
},
|
|
set(isActive: boolean) {
|
|
setDarkMode(isActive);
|
|
},
|
|
}),
|
|
};
|
|
}
|