summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-12 20:05:45 -0600
committerAdam <[email protected]>2026-02-12 20:05:58 -0600
commitdec304a2737b7accb3bf8b199fb58e81d65026e9 (patch)
treedf476bcdcbfc6f1242bd054e08fe1a5de8b8f8dc
parentc9719dff7223aa1fc19540f3cd627c7f40e4bf36 (diff)
downloadopencode-dec304a2737b7accb3bf8b199fb58e81d65026e9.tar.gz
opencode-dec304a2737b7accb3bf8b199fb58e81d65026e9.zip
fix(app): emoji as avatar
-rw-r--r--packages/ui/src/components/avatar.tsx13
1 files changed, 12 insertions, 1 deletions
diff --git a/packages/ui/src/components/avatar.tsx b/packages/ui/src/components/avatar.tsx
index 76bde1e15..c1617b265 100644
--- a/packages/ui/src/components/avatar.tsx
+++ b/packages/ui/src/components/avatar.tsx
@@ -1,5 +1,16 @@
import { type ComponentProps, splitProps, Show } from "solid-js"
+const segmenter =
+ typeof Intl !== "undefined" && "Segmenter" in Intl
+ ? new Intl.Segmenter(undefined, { granularity: "grapheme" })
+ : undefined
+
+function first(value: string) {
+ if (!value) return ""
+ if (!segmenter) return Array.from(value)[0] ?? ""
+ return segmenter.segment(value)[Symbol.iterator]().next().value?.segment ?? Array.from(value)[0] ?? ""
+}
+
export interface AvatarProps extends ComponentProps<"div"> {
fallback: string
src?: string
@@ -36,7 +47,7 @@ export function Avatar(props: AvatarProps) {
...(!src && split.foreground ? { "--avatar-fg": split.foreground } : {}),
}}
>
- <Show when={src} fallback={split.fallback?.[0]}>
+ <Show when={src} fallback={first(split.fallback)}>
{(src) => <img src={src()} draggable={false} data-slot="avatar-image" />}
</Show>
</div>