본문으로 건너뛰기
TDSMoring 디자인 시스템

Sheet

화면 아래에서 올라오는 시트다. 위쪽 두 모서리가 둥글고, 손잡이와 제목 줄, 닫기 버튼이 있다.

이 페이지의 목차
분류
알림과 안내
가져오기
import { Sheet } from '@/ui/feedback'
코드 위치
apps/mobile/src/ui/feedback.tsx:80

미리보기#

실제 컴포넌트를 화면에 그린 것이다. 화면 아래의 서비스 색 선택기로 색을 바꿔 볼 수 있다. 버튼과 입력 칸은 직접 눌러 볼 수 있다.

내 시험
닫았다가 다시 열어 보기

언제 쓰는가#

쓴다

  • 짧은 선택, 한 가지 입력, 작은 양식을 현재 화면 위에서 처리할 때 쓴다.
  • 제목(title)을 주면 제목 줄과 ✕ 닫기가 생긴다. 모든 시트의 제목 줄은 같은 모양이다.
  • 아래로 끌거나 바깥을 누르거나 뒤로 가기를 눌러 닫는다.

쓰지 않는다

  • 긴 양식이나 여러 단계에는 쓰지 않는다. 전체 화면으로 만든다.
  • 꼭 답해야 하는 확인에는 쓰지 않는다. dialog를 쓴다.
  • 시트 위에 시트를 겹치지 않는다.

종류#

Sheet 종류
이름설명
제목 있음제목 headline 20과 ✕ 버튼(36 원, well 바탕).
제목 없음손잡이만 있다. 내용이 스스로 제목을 가질 때.

크기#

Sheet 크기
이름값설명
기본폭 전체, 높이는 내용좌우 20(gutter), 아래는 안전 영역과 16 중 큰 값. 모서리 radius.sheet(24).

상태#

Sheet 상태
상태모습과 동작
열림어둠막이 나타나고(scrim) 시트가 240ms 동안 올라온다.
닫힘180ms 동안 내려간다.
끄는 중손잡이 줄을 아래로 끌면 따라 내려간다. 100 넘게 끌거나 빠르게(속도 900 초과) 끌고 놓으면 닫힌다. 아니면 160ms 동안 제자리로 돌아온다.
위로 끄는 중onPullUp을 넘겼을 때만 가능하다. 위로 끌고 놓으면 onPullUp이 호출되고, 짧게 끌면 제자리로 돌아온다.
키보드키보드가 올라오면 시트가 그 위로 올라간다.

사용 방법#

기본

기본
import { Sheet } from '@/ui/feedback';

<Sheet visible={open} onClose={() => setOpen(false)} title="시험 선택">
  {/* 내용 */}
</Sheet>

속성(props)#

Sheet 속성
이름타입기본값필수설명
visibleboolean—필수열려 있는지.
onClose() => void—필수닫을 때 호출된다(끌기, 바깥 누르기, 뒤로 가기, ✕).
childrenReactNode—필수시트 안의 내용.
titlestring—선택제목. 있으면 제목 줄과 ✕가 생긴다.
onPullUp() => void—선택손잡이 줄을 위로 70 넘게(또는 빠르게) 끌고 놓으면 호출된다. 더 큰 화면(전체 화면 편집기)을 여는 데 쓴다. 넘기면 시트가 위로도 최대 160까지 따라 올라간다(위 방향은 40%만 따라온다).

치수와 토큰#

시트
surface, 위쪽 모서리 24, 좌우 20, 아래 max(안전 영역, 16)
손잡이
40 × 4, 모서리 2, lineStrong, 아래 12
제목 줄
제목 headline 20, ✕ 36 원(well), 아래 16
어둠막
scrim
움직임
열림 240ms(out), 닫힘 180ms(in), 되돌림 160ms

접근성#

  • 시트는 모달이라 뒤 내용은 읽히지 않는다(accessibilityViewIsModal).
  • 바깥 눌림 영역과 ✕의 이름은 "닫기"다.
  • 웹에서는 시트가 열리면 초점이 시트 안으로 들어가고 Esc로 닫혀야 한다.

잘한 예와 잘못한 예#

시험 선택
잘한 예제목을 주면 무엇을 고르는 시트인지 알 수 있다.
입력 칸 10개가 든 시트
잘못한 예긴 양식을 시트에 넣지 않는다. 전체 화면으로 만든다.
  • OptionSheet: 시트 안에서 목록 중 하나를 고르는 컴포넌트다. 행마다 라디오 표시가 있고, 고르면 바로 닫힌다.
  • dialog: 화면 가운데 뜨는 확인 대화상자와 아래에서 올라오는 메뉴를 함수 호출 하나로 여는 도구다. 결과(눌린 버튼)를 약속(Promise)으로 돌려준다.
  • TimeSheet: 아래에서 올라오는 시트에서 시각을 고른다. 오전/오후, 시, 분(5분 단위) 세 줄 바퀴를 돌려서 고른다.