첫 사용 안내
새 워크스페이스 · 새 멤버가 처음 해야 할 일을 체크리스트로 보이고, 필요할 때만 화면의 한 곳을 코치마크로 짚습니다.
안내는 일을 막지 않습니다. 언제든 건너뛰고, 숨긴 뒤에도 사이드바 바닥(런처)과 도움말 메뉴에서 다시 엽니다. 기능을 차례로 설명하는 투어보다 빈 화면에서 첫 동작을 바로 하게 하는 것을 먼저 씁니다. 진행 상태(마친 것 · 숨긴 것 · 본 코치마크)는 앱이 저장합니다.
- import
- import { OnboardingChecklist, OnboardingLauncher, FirstSteps } from "@uyoolabs/ui/ui"; import { Coachmark } from "@uyoolabs/ui/overlay";
- 쓰는 경우
- 체크리스트는 새 워크스페이스 · 새 멤버의 처음 할 일 3~6개에, 항목마다 바로 하는 버튼과 함께 씁니다. 코치마크는 화면 밖에서 시작한 일(초대 메일 → 첫 진입)이 가리키는 한 곳, 새로 생긴 기능 한 곳에 씁니다. 빈 화면은 Empty first-use 와 FirstSteps 로 엽니다.
- 쓰지 않는 경우
- 첫 진입에 가림막 투어를 저절로 띄우지 않습니다(가림막은 사람이 [둘러보기]를 누른 투어에만). 코치마크를 네 단계 넘게 잇지 않습니다. 화살표로 대상을 가리키지 않습니다. 마친 항목에 취소선 · 축하 효과를 두지 않습니다. 오류 · 경고 색으로 '아직 안 함'을 재촉하지 않습니다. 닫으면 진행이 사라지게 하지 않습니다.
- 저장 · 첫 방문
- 저절로 뜨는 코치마크는 그 화면의 첫 방문에 한 번만, 비모달로만 띄웁니다. 마침 · 건너뛰기 · Esc 모두 '봤음'으로 저장하고, 다시 보기는 도움말 메뉴에 둡니다.
- 접근성
- 체크리스트는 제목이 이름인 section 안의 APG Disclosure 이고, 완료 · 건너뜀은 이름 뒤 숨은 글자로 읽힙니다. 진행 글이 바뀌면 role=status 로 한 번 알립니다. 코치마크는 비모달 dialog 로 대상에 aria-describedby 로 본문을 잇고, 대상이 없는(권한 · 화면 크기) 단계는 건너뜁니다.
체크리스트 · 런처
다음 할 일 하나만 펼칩니다. 숨기면 진행은 남고 런처로 다시 엽니다.
워크스페이스 시작하기
팀과 일을 시작하는 데 필요한 다섯 가지입니다.
5개 중 2개 완료
이메일이나 초대 링크로 팀을 부릅니다.
저장소를 연결하면 커밋이 작업에 이어집니다.
멘션 · 초대 · 승인 요청을 어디서 받을지 고릅니다.
숨겨도 사이드바 바닥 · 도움말 메뉴에서 다시 엽니다.
코치마크
대상 둘레 링(primary 2 · 4 띄움 · 틴트 후광) + 뜬 팝오버. 지붕 · 화살표 없음, 가림막은 기본 끔.
홈
빈 화면 — 첫 동작 세 걸음
투어 대신 빈 자리에서 첫 동작을 바로 하게 합니다.
아직 프로젝트가 없습니다
프로젝트는 작업 · 문서 · 회의를 한곳에 모읍니다.
- 프로젝트를 만듭니다이름과 공개 범위만 정합니다
- 멤버를 더합니다워크스페이스 멤버에서 고릅니다
- 첫 작업을 적습니다보드에서 바로 적습니다
키보드
| 키 | 동작 |
|---|---|
| TabShift+Tab | 체크리스트: 항목 머리 → 펼친 항목의 버튼. 코치마크: 팝오버 안 버튼(비모달이라 밖으로도 나갑니다). |
| EnterSpace | 항목 머리를 펼치고 접습니다. 한 번에 하나만 펼칩니다. 조합 중 Enter 는 무시합니다. |
| ←→ | 코치마크의 이전 · 다음 단계로 옮깁니다. 새 제목으로 포커스가 갑니다. |
| Esc | 코치마크를 건너뜁니다(onSkip). 닫히면 투어를 시작한 요소로 포커스가 돌아갑니다. 체크리스트는 Esc 에 반응하지 않습니다. |
props
소스의 타입과 JSDoc 에서 생성한 표입니다. 컴포넌트를 고치면 pnpm gen 으로 다시 만듭니다.
OnboardingChecklist
| prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
| title필수 | ReactNode | — | 카드 제목(h2). 카드의 이름(aria-labelledby)이 된다 |
| description | ReactNode | — | |
| items필수 | ChecklistItem[] | — | 항목 상태는 늘 앱이 준다. 진행 저장(사용자 설정 · 서버)도 앱이 한다 |
| openId | string | null | — | 제어: 펼친 항목. null 이면 모두 접힘 |
| defaultOpenId | string | null | — | 비제어 첫 값. 없으면 첫 할 일 |
| onOpenChange | (id: string | null) => void | — | |
| onSkip | (id: string) => void | — | 항목 하나 건너뛰기. 없으면 [건너뛰기] 를 그리지 않는다 |
| onSkipAll | () => void | — | |
| onDismiss | () => void | — | × — 숨기기. 진행은 남는다. 숨긴 뒤 포커스는 화면의 런처(OnboardingLauncher)로 간다 |
| completeContent | ReactNode | — | 모두 끝났을 때의 카드 내용을 바꿀 때 |
| lang | "ko" | "en" | "ja" | — | |
| labels | Partial<OnboardingLabels> | — | |
| className | string | — |
OnboardingLauncher
| prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
| done필수 | number | — | |
| total필수 | number | — | |
| onOpen필수 | () => void | — | |
| lang | "ko" | "en" | "ja" | — | |
| labels | Partial<OnboardingLabels> | — | |
| className | string | — |
FirstSteps
| prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
| steps필수 | ReadonlyArray<{ title: ReactNode; description?: ReactNode }> | — | 세 걸음이 알맞다. 걸음마다 굵은 제목 한 줄 + 짧은 설명 |
| label | string | — | 목록의 접근성 이름. 보통 위 빈 상태 제목이 맥락을 주므로 없어도 된다 |
| className | string | — |
Coachmark
| prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
| steps필수 | CoachmarkStep[] | — | 넷까지. 다섯 이상이면 개발 중 경고 |
| open필수 | boolean | — | |
| onOpenChange필수 | (open: boolean) => void | — | |
| step | number | — | 제어: 지금 단계(0부터) |
| defaultStep | number | 0 | |
| onStepChange | (step: number) => void | — | |
| onFinish | () => void | — | 마지막 단계의 [마침] |
| onSkip | () => void | — | [건너뛰기] · Esc. 다시 보기는 도움말 메뉴에 둔다 |
| modal | boolean | false | 가림막 + 오려 낸 자리 + 포커스 가두기. 기본 false — 사람이 [둘러보기]를 눌러 시작한 투어에만 켠다(W3 결정 #19) |
| lang | "ko" | "en" | "ja" | — | |
| labels | Partial<CoachmarkLabels> | — |