add color theme

This commit is contained in:
Yusur 2025-10-18 11:28:20 +02:00
parent c33ab48225
commit ddb07a651e
6 changed files with 40 additions and 22 deletions

View file

@ -1,7 +1,7 @@
{ {
"name": "@yusurko/vigil", "name": "@yusurko/vigil",
"private": true, "private": true,
"version": "0.1.0-dev40", "version": "0.1.0-dev41",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite dev", "dev": "vite dev",

View file

@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { RiHome2Line } from 'svelte-remixicon'; import { RiHome2Line, RiSettings2Line, RiSettingsLine } from 'svelte-remixicon';
</script> </script>
@ -7,4 +7,7 @@
<li> <li>
<a href="/"><RiHome2Line /> Home</a> <a href="/"><RiHome2Line /> Home</a>
</li> </li>
<li>
<a href="/settings"><RiSettings2Line /> Settings</a>
</li>
</ul> </ul>

View file

@ -39,7 +39,8 @@ export type ServerHealth = {
post_count: number, post_count: number,
user_count: number, user_count: number,
me: string | null, me: string | null,
csrf_token?: string csrf_token?: string,
color_theme?: number
}; };

View file

@ -3,21 +3,23 @@ import type { ServerHealth, UserEntry } from "$lib/backend";
let health : { let health : {
app_name: string, version: string, post_count: number, app_name: string, version: string, post_count: number,
user_count: number, me: null | UserEntry user_count: number, me: null | UserEntry, color_theme: number
} = $state({ } = $state({
app_name: 'app_name', app_name: 'app_name',
version: "?.?", version: "?.?",
post_count: NaN, post_count: NaN,
user_count: NaN, user_count: NaN,
me: null me: null,
color_theme: 0
}); });
export function setHealth ({ name, version, post_count, user_count }: ServerHealth) { export function setHealth ({ name, version, post_count, user_count, color_theme = 0 }: ServerHealth) {
health.app_name = name; health.app_name = name;
health.version = version; health.version = version;
health.post_count = post_count; health.post_count = post_count;
health.user_count = user_count; health.user_count = user_count;
health.color_theme = color_theme;
} }
@ -50,3 +52,7 @@ export function activeUserCount (): number{
export async function sleep (ms: number): Promise<void> { export async function sleep (ms: number): Promise<void> {
return new Promise(resolve => setTimeout(resolve, ms)); return new Promise(resolve => setTimeout(resolve, ms));
} }
export function getColorThemeCode (): number {
return health.color_theme;
}

View file

@ -1,4 +1,5 @@
<script lang="ts"> <script lang="ts">
import { getColorThemeCode } from '$lib/globals.svelte';
import { version } from '$app/environment'; import { version } from '$app/environment';
import type { Snippet } from 'svelte'; import type { Snippet } from 'svelte';
import type { ServerHealth, UserEntry } from '$lib/backend'; import type { ServerHealth, UserEntry } from '$lib/backend';
@ -17,6 +18,11 @@ let { data, children } : {
let {me} = $derived(data); let {me} = $derived(data);
const flash = getFlash(page); const flash = getFlash(page);
let colorThemeCode = $derived(getColorThemeCode());
let colorSchemeCode = $derived(Math.floor(colorThemeCode / 256));
let colorScheme = $derived(colorSchemeCode == 1? 'dark': colorSchemeCode == 2? 'light': 'system');
let colorThemeCls = $derived(`color-scheme-${colorScheme} color-theme-${colorThemeCode % 256}`);
</script> </script>
<svelte:head> <svelte:head>
@ -30,6 +36,7 @@ const flash = getFlash(page);
<!-- end SEO tags --> <!-- end SEO tags -->
</svelte:head> </svelte:head>
<global-wrapper class={colorThemeCls}>
<header> <header>
<h1> <h1>
<a href="/">{appName()}</a> <a href="/">{appName()}</a>
@ -47,6 +54,8 @@ const flash = getFlash(page);
</main> </main>
<MobileFooter /> <MobileFooter />
</global-wrapper>
<style> <style>
header { header {

View file

@ -33,7 +33,6 @@ async function loadTopGuilds (event: LoadEvent): Promise<GuildEntry[] | null> {
const respJ = await resp.json(); const respJ = await resp.json();
const { has: top_guilds } : { has: GuildEntry[] } = respJ; const { has: top_guilds } : { has: GuildEntry[] } = respJ;
console.log('top_guilds is', top_guilds);
return top_guilds; return top_guilds;
} catch (e) { } catch (e) {
return null; return null;