summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-11 15:39:38 -0600
committerAdam <[email protected]>2025-12-11 15:39:41 -0600
commite149b7c1e276281b37a47997bf98d8954a4674ba (patch)
treecc860068652d24767393fec4e3ff53ad21cdda11 /packages/desktop/src
parent55957b2ac7edab619dc447d49bb05777ff0fb044 (diff)
downloadopencode-e149b7c1e276281b37a47997bf98d8954a4674ba.tar.gz
opencode-e149b7c1e276281b37a47997bf98d8954a4674ba.zip
fix: avatar colors
Diffstat (limited to 'packages/desktop/src')
-rw-r--r--packages/desktop/src/context/layout.tsx40
-rw-r--r--packages/desktop/src/pages/layout.tsx8
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