SettingsGroup
설정 화면의 목록이다. 작은 구역 이름, 행이 든 흰 패널, 아래 안내 글로 이루어진다.
- 분류
- 면과 목록
- 가져오기
import { SettingsGroup, SettingsCard, SettingsIcon, SettingsRow } from '@/ui/SettingsList'- 코드 위치
apps/mobile/src/ui/SettingsList.tsx:22
미리보기#
실제 컴포넌트를 화면에 그린 것이다. 화면 아래의 서비스 색 선택기로 색을 바꿔 볼 수 있다. 버튼과 입력 칸은 직접 눌러 볼 수 있다.
일반
복습 알림
로그아웃
알림을 끄면 복습 시간을 알려 주지 않아요.
언제 쓰는가#
쓴다
- 설정과 그 하위 화면의 모든 목록에 쓴다.
- 행 하나는 아이콘 · 제목 · 현재 값 · 화살표다. 누르면 하위 화면이나 시트로 간다.
- 숫자 입력기 같은 자유로운 내용은
SettingsCard에 넣는다.
쓰지 않는다
- 설정이 아닌 목록에는 쓰지 않는다.
WellRow를 쓴다. - 삭제처럼 위험한 행이 아니면 아이콘에 색을 주지 않는다. 아이콘 타일은 모두 중립색이다. 빨강은 위험한 행(
danger)만 쓴다.
종류#
| 이름 | 설명 |
|---|---|
| SettingsGroup | 행 목록. 행 사이에 얇은 구분선이 자동으로 들어간다. |
| SettingsCard | 자유로운 내용을 담는 같은 모양의 패널(안쪽 여백 18). |
| SettingsRow | 행. onPress가 있으면 버튼이고 ChevronRight가 붙는다. right에 스위치를 넣을 수 있다. |
| SettingsIcon | 행 앞의 34 × 34 중립 아이콘 타일. danger면 빨간 타일. |
크기#
| 이름 | 값 | 설명 |
|---|---|---|
| 행 | 최소 높이 58 | 좌우 18, 위아래 12, 요소 사이 12. 구분선은 아이콘이 있으면 왼쪽에서 64, 없으면 18 들여 시작한다. |
상태#
| 상태 | 모습과 동작 |
|---|---|
| 기본 | surface 바탕, 모서리 22, shadow(1)(다크는 1px cardBorder). |
| 누름 | 행 배경이 pressed 색으로 바뀐다. |
| 값이 긴 행 | 제목은 폭을 지키고 값이 먼저 …으로 줄어든다(값은 행 폭의 58%까지). |
사용 방법#
기본
기본
import { SettingsGroup, SettingsIcon, SettingsRow, SettingsSwitch } from '@/ui/SettingsList';
<SettingsGroup title="일반" footer="알림을 끄면 복습 시간을 알려 주지 않아요.">
<SettingsRow icon={<SettingsIcon Icon={Bell} />} title="복습 알림" chevron={false}
right={<SettingsSwitch label="복습 알림" value={on} onChange={setOn} />} />
<SettingsRow icon={<SettingsIcon Icon={Globe} />} title="언어" value="한국어" onPress={openLanguage} />
<SettingsRow icon={<SettingsIcon Icon={LogOut} danger />} title="로그아웃" tone={color.danger} onPress={logout} />
</SettingsGroup>속성(props)#
SettingsGroup
| 이름 | 타입 | 기본값 | 필수 | 설명 |
|---|---|---|---|---|
children | ReactNode | — | 필수 | 행들. 행 사이에 구분선이 자동으로 들어간다. |
title | string | — | 선택 | 패널 위의 작은 구역 이름(smallStrong, textSecondary). |
footer | string | — | 선택 | 패널 아래 안내 글(caption). |
SettingsCard
| 이름 | 타입 | 기본값 | 필수 | 설명 |
|---|---|---|---|---|
children | ReactNode | — | 필수 | 자유로운 내용. |
title | string | — | 선택 | 패널 위의 작은 구역 이름. |
footer | string | — | 선택 | 패널 아래 안내 글. |
SettingsIcon
| 이름 | 타입 | 기본값 | 필수 | 설명 |
|---|---|---|---|---|
Icon | Icon | — | 필수 | 그릴 아이콘 컴포넌트. |
danger | boolean | — | 선택 | true이면 dangerSoft 타일에 danger 아이콘. |
SettingsRow
| 이름 | 타입 | 기본값 | 필수 | 설명 |
|---|---|---|---|---|
icon | ReactNode | — | 선택 | 앞 요소. 보통 SettingsIcon. |
title | string | — | 필수 | 제목(bodyStrong). |
subtitle | string | — | 선택 | 제목 아래 보조 글(small). |
value | string | — | 선택 | 현재 값. 길면 …으로 줄어든다. |
onPress | () => void | — | 선택 | 있으면 행이 버튼이 된다. |
right | ReactNode | — | 선택 | 뒤 요소. 스위치 등. |
tone | string | color.text | 선택 | 제목 글자색. 위험한 행은 color.danger. |
chevron | boolean | true | 선택 | false이면 화살표를 숨긴다. 기본 true(onPress가 있을 때). |
accessibilityHint | string | — | 선택 | 화면 읽기 프로그램이 읽는 설명. |
치수와 토큰#
- 패널
surface, 모서리 22,shadow(1)(다크는 1pxcardBorder)- 행
- 최소 58, 좌우 18, 위아래 12, 사이 12
- 구분선
- 헤어라인
line, 시작 위치 18(아이콘 있으면 64) - 아이콘 타일
- 34 × 34, 모서리 11,
well바탕, 아이콘 18 선 2.1textSecondary - 구역 이름
smallStrong,textSecondary, 아래 8, 왼쪽 4
접근성#
onPress가 있는 행은button이고 이름은 "제목, 보조 글, 값"을 이어 읽는다.- 화살표(ChevronRight)가 눌리는 행임을 보여 준다.
- 위험한 행은 빨간 글자와 아이콘으로, 글자(로그아웃 등)로도 알린다.
글자 색 대비
글자 크기별 기준: 작은 글자는 4.5:1 이상, 큰 글자(굵은 18.66px 이상)는 3:1 이상이다. 값은 선택한 서비스와 모드의 토큰으로 계산했다.
| 쓰임 | 글자색 | 바탕 | 대비 | 기준 |
|---|---|---|---|---|
| 행 제목 | text | surface | 17.15:1 통과15.25:1 통과16.13:1 통과10.92:1 통과 | 4.5:1 (작은 글자) |
| 현재 값 (13px) | textSecondary | surface | 4.23:1 미달6.95:1 통과4.88:1 통과7.11:1 통과 | 4.5:1 (작은 글자) |
| 위험한 행 제목 | danger | surface | 4.55:1 통과5.76:1 통과5.04:1 통과7.11:1 통과 | 4.5:1 (작은 글자) |
잘한 예와 잘못한 예#
탈퇴
함께 보는 컴포넌트#
- SettingsSwitch: 켜고 끄는 스위치다. 설정 행의 오른쪽에 놓는다.
- WellRow: 패널 안의 목록 한 줄이다. 옅은 홈(
well)에 앞 아이콘 타일, 제목, 보조 줄, 뒤 요소가 놓인다. - Panel: 회색 바탕(
canvas) 위에 놓는 흰 패널이다. 제목 줄(제목, 설명 아이콘, 오른쪽 링크)과 내용을 담는다. 리포트와 시험 계획 화면의 기본 면이다.