diff options
| author | Adam <[email protected]> | 2025-12-11 15:39:38 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-11 15:39:41 -0600 |
| commit | e149b7c1e276281b37a47997bf98d8954a4674ba (patch) | |
| tree | cc860068652d24767393fec4e3ff53ad21cdda11 /packages/desktop/src | |
| parent | 55957b2ac7edab619dc447d49bb05777ff0fb044 (diff) | |
| download | opencode-e149b7c1e276281b37a47997bf98d8954a4674ba.tar.gz opencode-e149b7c1e276281b37a47997bf98d8954a4674ba.zip | |
fix: avatar colors
Diffstat (limited to 'packages/desktop/src')
| -rw-r--r-- | packages/desktop/src/context/layout.tsx | 40 | ||||
| -rw-r--r-- | packages/desktop/src/pages/layout.tsx | 8 |
2 files changed, 28 insertions, 20 deletions
diff --git a/packages/desktop/src/context/layout.tsx b/packages/desktop/src/context/layout.tsx index ea5962b40..9cafdce96 100644 --- a/packages/desktop/src/context/layout.tsx +++ b/packages/desktop/src/context/layout.tsx @@ -6,18 +6,26 @@ import { useGlobalSync } from "./global-sync" import { useGlobalSDK } from "./global-sdk" import { Project } from "@opencode-ai/sdk/v2" -const PASTEL_COLORS = [ - "#FCEAFD", // pastel pink - "#FFDFBA", // pastel peach - "#FFFFBA", // pastel yellow - "#BAFFC9", // pastel green - "#EAF6FD", // pastel blue - "#EFEAFD", // pastel lavender - "#FEC8D8", // pastel rose - "#D4F0F0", // pastel cyan - "#FDF0EA", // pastel coral - "#C1E1C1", // pastel mint -] +const AVATAR_COLOR_KEYS = ["pink", "mint", "orange", "purple", "cyan", "lime"] as const + +export type AvatarColorKey = (typeof AVATAR_COLOR_KEYS)[number] + +export function isAvatarColorKey(value: string): value is AvatarColorKey { + return AVATAR_COLOR_KEYS.includes(value as AvatarColorKey) +} + +export function getAvatarColors(key?: string) { + if (key && isAvatarColorKey(key)) { + return { + background: `var(--avatar-background-${key})`, + foreground: `var(--avatar-text-${key})`, + } + } + return { + background: "var(--surface-info-base)", + foreground: "var(--text-base)", + } +} type Dialog = "provider" | "model" | "connect" @@ -58,11 +66,11 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( connect: {}, dialog: {}, }) - const usedColors = new Set<string>() + const usedColors = new Set<AvatarColorKey>() - function pickAvailableColor() { - const available = PASTEL_COLORS.filter((c) => !usedColors.has(c)) - if (available.length === 0) return PASTEL_COLORS[Math.floor(Math.random() * PASTEL_COLORS.length)] + function pickAvailableColor(): AvatarColorKey { + const available = AVATAR_COLOR_KEYS.filter((c) => !usedColors.has(c)) + if (available.length === 0) return AVATAR_COLOR_KEYS[Math.floor(Math.random() * AVATAR_COLOR_KEYS.length)] return available[Math.floor(Math.random() * available.length)] } diff --git a/packages/desktop/src/pages/layout.tsx b/packages/desktop/src/pages/layout.tsx index 05386c1fb..70764292f 100644 --- a/packages/desktop/src/pages/layout.tsx +++ b/packages/desktop/src/pages/layout.tsx @@ -1,7 +1,7 @@ import { createEffect, createMemo, For, Match, onCleanup, onMount, ParentProps, Show, Switch, type JSX } from "solid-js" import { DateTime } from "luxon" import { A, useNavigate, useParams } from "@solidjs/router" -import { useLayout } from "@/context/layout" +import { useLayout, getAvatarColors } from "@/context/layout" import { useGlobalSync } from "@/context/global-sync" import { base64Decode, base64Encode } from "@opencode-ai/util/encode" import { Mark } from "@opencode-ai/ui/logo" @@ -180,7 +180,7 @@ export default function Layout(props: ParentProps) { <Avatar fallback={name()} src={props.project.icon?.url} - background={props.project.icon?.color ?? "var(--surface-info-base)"} + {...getAvatarColors(props.project.icon?.color)} class="size-full" /> </div> @@ -200,7 +200,7 @@ export default function Layout(props: ParentProps) { <Avatar fallback={name()} src={props.project.icon?.url} - background={props.project.icon?.color ?? "var(--surface-info-base)"} + {...getAvatarColors(props.project.icon?.color)} class="size-full" /> </div> @@ -231,7 +231,7 @@ export default function Layout(props: ParentProps) { <Avatar fallback={name()} src={props.project.icon?.url} - background={props.project.icon?.color ?? "var(--surface-info-base)"} + {...getAvatarColors(props.project.icon?.color)} class="size-full group-hover/session:hidden" /> <Icon |
