Adam пре 2 месеци
родитељ
комит
dec304a273
1 измењених фајлова са 12 додато и 1 уклоњено
  1. 12 1
      packages/ui/src/components/avatar.tsx

+ 12 - 1
packages/ui/src/components/avatar.tsx

@@ -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>