fix(app): emoji as avatar
This commit is contained in:
@@ -1,5 +1,16 @@
|
|||||||
import { type ComponentProps, splitProps, Show } from "solid-js"
|
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"> {
|
export interface AvatarProps extends ComponentProps<"div"> {
|
||||||
fallback: string
|
fallback: string
|
||||||
src?: string
|
src?: string
|
||||||
@@ -36,7 +47,7 @@ export function Avatar(props: AvatarProps) {
|
|||||||
...(!src && split.foreground ? { "--avatar-fg": split.foreground } : {}),
|
...(!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" />}
|
{(src) => <img src={src()} draggable={false} data-slot="avatar-image" />}
|
||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user