아바타
사람 · 조직의 그림입니다. 판지에서 오려 낸 평평한 원이라 두께가 없습니다.
이니셜은 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명' 버튼입니다.
Person · 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). 이니셜 대신 아이덴티콘을 그린다 |
| alt | string | — | 이름. 옆에 이름 글자가 있으면 "" 로 두거나 주지 않는다(그림은 장식이 된다) |
| name | string | — | 이니셜을 만든다(한 · 일은 첫 글자, 영어는 이름 · 성 두 글자) |
| initials | string | — | 이니셜을 직접 줄 때 |
| seed | string | — | 사람 · 대상의 id(슬러그가 아니다). 아이덴티티 색을 고른다 |
| deleted | boolean | — | 파인 면 + 사람 아이콘 |
| presence | "online" | "away" | "dnd" | "offline" | — | 오른쪽 아래 접속 점. 이름 뒤에 sr 문장이 붙는다 |
| lang | "ko" | "en" | "ja" | — | |
| labels | Partial<AvatarLabels> | — | |
| className | string | — | |
| size | "xs" | "sm" | "md" | "lg" | "xl" | "default" | "md" | xs 20 · sm 24 · md 32 · lg 40 · xl 64. v1 의 default 는 md 별칭이다 |
| src | string | — | |
| children | ReactNode | — | 조각(AvatarImage · AvatarFallback)을 직접 짤 때. 주면 src · name · seed 로 만드는 내용 대신 쓴다 |
이 밖에 Radix Avatar.Root props(children 제외)를 그대로 받습니다.
AvatarGroup
| prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
| max | number | 4 | 넘으면 +N. 기본 4 |
| total | number | — | 실제 인원(children 보다 많을 때) |
| size | "xs" | "sm" | "md" | "sm" | 겹침 xs · sm 6 · md 8 |
| onOpen | () => void | — | 주면 묶음 전체가 버튼이다 |
| lang | "ko" | "en" | "ja" | — | |
| labels | Partial<AvatarGroupLabels> | — | |
| className | string | — | |
| 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). 이니셜 대신 아이덴티콘을 그린다 |
| alt | string | — | 이름. 옆에 이름 글자가 있으면 "" 로 두거나 주지 않는다(그림은 장식이 된다) |
| name | string | — | 이니셜을 만든다(한 · 일은 첫 글자, 영어는 이름 · 성 두 글자) |
| initials | string | — | 이니셜을 직접 줄 때 |
| seed | string | — | 사람 · 대상의 id(슬러그가 아니다). 아이덴티티 색을 고른다 |
| deleted | boolean | — | 파인 면 + 사람 아이콘 |
| presence | "online" | "away" | "dnd" | "offline" | — | 오른쪽 아래 접속 점. 이름 뒤에 sr 문장이 붙는다 |
| lang | "ko" | "en" | "ja" | — | |
| labels | Partial<AvatarLabels> | — | |
| className | string | — | |
| src | string | — |
Person
| prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
| name필수 | string | — | |
| seed | string | — | |
| src | string | — | |
| meta | ReactNode | — | (나) · (비활성) 같은 꼬리 |
| inactive | boolean | — | 이름을 보조색으로(opacity 없음) |
| deleted | boolean | — | 탈퇴한 사람. 이름 자리에 labels.deleted 를 쓴다 |
| size | "xs" | "sm" | "xs" | xs 20 · sm 24 |
| asChild | boolean | — | 누를 수 있게: <Person asChild><button type="button" /></Person> |
| lang | "ko" | "en" | "ja" | — | |
| labels | Partial<AvatarLabels> | — | |
| className | string | — | |
| children | ReactElement | — |