본문으로 건너뛰기

아바타

사람 · 조직의 그림입니다. 판지에서 오려 낸 평평한 원이라 두께가 없습니다.

이니셜은 seed(사람 id)의 아이덴티티 색 면에 남색 글자입니다. 한국어 · 일본어는 표시 이름의 첫 글자(대개 성), 영어는 이름 · 성의 머리글자 둘입니다. 첫 글자가 같은 두 사람은 색이 가릅니다. 조직 · 프로젝트는 네모(shape="square")에 아이덴티콘을 그립니다.

이미지 불러오기 상태(불러오는 중 · 실패 → 이니셜)가 필요한 아바타는 radix 를 쓰는 ./avatar 의 Avatar, radix 가 없는 소비자 · 서버 컴포넌트의 정적 아바타는 ./ui 의 AvatarMark 입니다.

import
import { Avatar, AvatarGroup } from "@uyoolabs/ui/avatar";
쓰는 경우
표의 담당 셀(xs) · 칩(xs) · 메시지(md) · 채널 머리 묶음(sm) · 프로필(xl) · 조직 · 프로젝트 전환기(square)에 씁니다. 사람 이름과 함께 놓을 때는 Person 을 씁니다.
쓰지 않는 경우
사람에게 아이덴티콘(square)을, 조직 · 프로젝트에 이니셜을 쓰지 않습니다. seed 에 이름 · 슬러그를 넘기지 않습니다(id). 아바타에 두께 · 그림자를 더하지 않습니다(avatar-clay-shadow 는 폐기합니다). 비활성 · 탈퇴를 opacity 로 나타내지 않습니다.
정적 · 사람
import { AvatarMark, Person } from "@uyoolabs/ui/ui";

Avatar

xs 20 · sm 24 · md 32(기본) · lg 40 · xl 64. v1 의 default 는 md 별칭입니다.

자리 비움
자리 비움
자리 비움
자리 비움
자리 비움

AvatarGroup

왼쪽이 위입니다. onOpen 을 주면 묶음 전체가 '참여자 N명' 버튼입니다.

외 12명

Person · AvatarMark

아바타 + 이름. 이름이 글자로 늘 있으니 아바타는 장식입니다.

이서연이도윤김민지Seoyun Han佐藤 陽菜박지민(비활성)탈퇴한 사용자AvatarMark

키보드

키동작
Tab누를 수 있는 아바타 묶음(onOpen) · 사람(asChild 버튼)만 포커스를 받습니다. 정적 아바타는 건너뜁니다.
EnterSpace묶음을 엽니다(참여자 목록). 닫으면 포커스가 묶음으로 돌아옵니다(O-Popover).

IdentityAvatar

로고가 없는 조직 · 프로젝트에 자동으로 생성되는 아바타(아이덴티콘)입니다. 같은 seed 는 항상 같은 이미지를 만듭니다.

이니셜을 쓰지 않습니다. 사용자는 이름으로 식별하지만 조직 · 프로젝트는 목록에서 위치로 찾습니다. 이름이 모두 같은 글자로 시작하면 이니셜로는 구별되지 않습니다. 색은 --uyoo-identity-1..12 안에서만 고릅니다.

형태는 7×7 좌우 대칭 격자입니다. 이웃이 없는 칸은 지우고, 중심에서 멀수록 덜 채워 형태가 가운데로 모이게 합니다. 난수를 쓰지 않아 서버와 클라이언트가 같은 그림을 그립니다.

IdentityCover

엔티티 상세 화면의 헤더와 링크 미리보기(OG 이미지)에 쓰는 커버 이미지입니다. 가운데 7×7 은 같은 seed 의 IdentityAvatar 와 같은 패턴이고, 바깥으로 갈수록 셀이 줄고 옅어집니다.

아이덴티콘을 가운데에 그대로 두고 같은 seed 로 패턴을 바깥까지 확장합니다. 아바타와 커버가 같은 패턴 · 같은 아이덴티티 컬러라서 목록에서 본 엔티티를 상세 화면에서도 바로 알아볼 수 있습니다. 남는 영역은 아이덴티티 컬러 10% 틴트로 채웁니다.

쓰는 경우
조직 · 프로젝트 · 팀 · 워크스페이스처럼 로고가 없는 엔티티의 상세 화면 헤더와, 그 엔티티 링크를 공유할 때의 OG 이미지에 씁니다.
쓰지 않는 경우
목록 · 테이블 행에는 IdentityAvatar 만 씁니다. 로고나 이미지를 올린 엔티티는 올린 이미지를 우선합니다. 사람에게는 쓰지 않습니다(사진 또는 이니셜 아바타).
seed
엔티티 id 를 넘깁니다. 이름이나 슬러그가 바뀌어도 패턴이 유지됩니다. 같은 엔티티의 IdentityAvatar 와 같은 값이어야 합니다.
크기
기본 41×7 은 헤더용 가로 띠입니다. 정사각형 영역에는 cols={13} rows={13} 을 줍니다. 높이를 정하면 가로는 가운데 정렬됩니다. CSS 변수를 쓸 수 없는 OG 이미지 렌더러에서는 identityPattern 으로 셀 목록을 받아 직접 그립니다.

프로젝트

결제 개선

멤버 4 · 최근 수정 오늘

조직

Acme

멤버 32 · 팀 5

링크 미리보기(OG 이미지 1200×630). 로고 자리만 제품마다 다릅니다.

제품 로고 자리

프로젝트

결제 개선

멤버 4 · 최근 수정 오늘

props

소스의 타입과 JSDoc 에서 생성한 표입니다. 컴포넌트를 고치면 pnpm gen 으로 다시 만듭니다.

Avatar

prop타입기본값설명
shape"circle" | "square""circle"square = 조직 · 프로젝트(반경 4 · md 이상 6). 이니셜 대신 아이덴티콘을 그린다
altstring—이름. 옆에 이름 글자가 있으면 "" 로 두거나 주지 않는다(그림은 장식이 된다)
namestring—이니셜을 만든다(한 · 일은 첫 글자, 영어는 이름 · 성 두 글자)
initialsstring—이니셜을 직접 줄 때
seedstring—사람 · 대상의 id(슬러그가 아니다). 아이덴티티 색을 고른다
deletedboolean—파인 면 + 사람 아이콘
presence"online" | "away" | "dnd" | "offline"—오른쪽 아래 접속 점. 이름 뒤에 sr 문장이 붙는다
lang"ko" | "en" | "ja"—
labelsPartial<AvatarLabels>—
classNamestring—
size"xs" | "sm" | "md" | "lg" | "xl" | "default""md"xs 20 · sm 24 · md 32 · lg 40 · xl 64. v1 의 default 는 md 별칭이다
srcstring—
childrenReactNode—조각(AvatarImage · AvatarFallback)을 직접 짤 때. 주면 src · name · seed 로 만드는 내용 대신 쓴다

이 밖에 Radix Avatar.Root props(children 제외)를 그대로 받습니다.

AvatarGroup

prop타입기본값설명
maxnumber4넘으면 +N. 기본 4
totalnumber—실제 인원(children 보다 많을 때)
size"xs" | "sm" | "md""sm"겹침 xs · sm 6 · md 8
onOpen() => void—주면 묶음 전체가 버튼이다
lang"ko" | "en" | "ja"—
labelsPartial<AvatarGroupLabels>—
classNamestring—
children필수ReactNode—<Avatar>

AvatarMark

prop타입기본값설명
size"xs" | "sm" | "md" | "lg" | "xl""md"xs 20 · sm 24 · md 32 · lg 40 · xl 64. 기본 md
shape"circle" | "square""circle"square = 조직 · 프로젝트(반경 4 · md 이상 6). 이니셜 대신 아이덴티콘을 그린다
altstring—이름. 옆에 이름 글자가 있으면 "" 로 두거나 주지 않는다(그림은 장식이 된다)
namestring—이니셜을 만든다(한 · 일은 첫 글자, 영어는 이름 · 성 두 글자)
initialsstring—이니셜을 직접 줄 때
seedstring—사람 · 대상의 id(슬러그가 아니다). 아이덴티티 색을 고른다
deletedboolean—파인 면 + 사람 아이콘
presence"online" | "away" | "dnd" | "offline"—오른쪽 아래 접속 점. 이름 뒤에 sr 문장이 붙는다
lang"ko" | "en" | "ja"—
labelsPartial<AvatarLabels>—
classNamestring—
srcstring—

Person

prop타입기본값설명
name필수string—
seedstring—
srcstring—
metaReactNode—(나) · (비활성) 같은 꼬리
inactiveboolean—이름을 보조색으로(opacity 없음)
deletedboolean—탈퇴한 사람. 이름 자리에 labels.deleted 를 쓴다
size"xs" | "sm""xs"xs 20 · sm 24
asChildboolean—누를 수 있게: <Person asChild><button type="button" /></Person>
lang"ko" | "en" | "ja"—
labelsPartial<AvatarLabels>—
classNamestring—
childrenReactElement—