mirror of
https://seed.radicle.dev/rad:z4D5UCArafTzTQpDZNQRuqswh3ury.git
synced 2026-11-15 16:10:38 +08:00
Redesign the entire app with a new UI kit. Typography, colors, icons, avatars, and border radii have all been updated for a more polished, consistent appearance that matches our other products like radicle-explorer. - Replace blockies-based avatars with a new DID-based avatar system - Move Settings and Create Issue into fullscreen modals - Change the default theme to follow the system theme - Remove window decorations on macOS for a cleaner, more native feel - Update the app icon - Fix popovers and tooltips Navigation: - Rewrite app navigation and layouts - Add a sidebar that gives you access to all your repos - Change the startup screen to open directly to the notification inbox - Add a getting started guide shown to new users on first launch Settings: - Add a setting to disable the notification badge - Add a code font setting Bug fixes: - Fix reactions and edits incorrectly targeting the root comment instead of the intended reply - Restrict issue/patch state, labels and assignees to delegates only
79 lines
1.7 KiB
Svelte
79 lines
1.7 KiB
Svelte
<script lang="ts" module>
|
|
import { writable } from "svelte/store";
|
|
|
|
type Theme = "dark" | "light";
|
|
|
|
export function loadTheme(): Theme {
|
|
const { matches } = window.matchMedia("(prefers-color-scheme: dark)");
|
|
return matches ? "dark" : "light";
|
|
}
|
|
|
|
function initTheme(): Theme {
|
|
const storedTheme = localStorage ? localStorage.getItem("theme") : null;
|
|
if (storedTheme === "dark" || storedTheme === "light") {
|
|
return storedTheme;
|
|
}
|
|
return loadTheme();
|
|
}
|
|
|
|
export const followSystemTheme = writable<boolean>(
|
|
typeof localStorage !== "undefined"
|
|
? !localStorage.getItem("theme")
|
|
: false,
|
|
);
|
|
|
|
export const theme = writable<Theme>(initTheme());
|
|
|
|
export function storeTheme(newTheme: Theme): void {
|
|
followSystemTheme.set(false);
|
|
theme.set(newTheme);
|
|
if (localStorage) {
|
|
localStorage.setItem("theme", newTheme);
|
|
}
|
|
}
|
|
|
|
export function setSystemTheme(): void {
|
|
followSystemTheme.set(true);
|
|
theme.set(loadTheme());
|
|
if (localStorage) {
|
|
localStorage.removeItem("theme");
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<script lang="ts">
|
|
import Button from "@app/components/Button.svelte";
|
|
</script>
|
|
|
|
<style>
|
|
.container {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
</style>
|
|
|
|
<div class="container">
|
|
<Button
|
|
variant="ghost"
|
|
flatRight
|
|
active={$followSystemTheme}
|
|
onclick={setSystemTheme}>
|
|
System
|
|
</Button>
|
|
<Button
|
|
variant="ghost"
|
|
flatLeft
|
|
flatRight
|
|
active={!$followSystemTheme && $theme === "light"}
|
|
onclick={() => storeTheme("light")}>
|
|
Light
|
|
</Button>
|
|
<Button
|
|
variant="ghost"
|
|
flatLeft
|
|
active={!$followSystemTheme && $theme === "dark"}
|
|
onclick={() => storeTheme("dark")}>
|
|
Dark
|
|
</Button>
|
|
</div>
|