BottomSheet
BottomSheet 컴포넌트는 화면의 하단에서 슬라이드 되어 나타나는 패널이에요.
페이지를 벗어나지 않고 사용자에게 추가적인 상세 설명을 보여주거나, 특정 액션을 유도하고 싶을 때 유용해요.
사용 예제
제목 붙이기
BottomSheet에 제목을 붙이려면 header 속성을 사용하세요. 일반적으로 BottomSheet.Header 컴포넌트를 넣어 사용해요.
부제목 붙이기
BottomSheet에 제목을 붙이려면 headerDescription 속성을 사용하세요. 일반적으로 BottomSheet.HeaderDescription 컴포넌트를 넣어 사용해요.
CTA 붙이기
BottomSheet에 CTA를 붙이려면 cta 속성을 사용하세요. 일반적으로 BottomSheet.CTA 컴포넌트를 넣어 사용해요.
Double CTA 붙이기
BottomSheet.DoubleCTA 컴포넌트를 사용하면 버튼이 좌우로 나누어진 형태의 CTA도 사용할 수 있어요.
선택지 보여주기
BottomSheet.Select 컴포넌트를 사용하면 사용자에게 선택지를 보여줄 수 있어요.
페이지 포커스 유지하기
BottomSheet이 열린 상태에서도 페이지에 포커스를 유지해야 하는 경우에는 UNSAFE_disableFocusLock 속성을 사용하세요.
disableDimmer 속성을 함께 사용해서 딤 해제도 할 수 있어요.
인터페이스
BottomSheetProps
| 속성 | 기본값 | 타입 |
|---|---|---|
| open* | - | false|true`BottomSheet`이 열렸는지 여부예요. |
| className | - | string`BottomSheet` 영역의 className을 설정해요. |
| dimmerClassName | - | string딤 영역에 전달할 className이에요. |
| disableDimmer | false | false|true이 값이 `true`일 때 딤 영역을 표시하지 않아요. |
| hasTextField | false | false|true이 값이 `true`일 때 `BottomSheet`을 키보드 위로 올려줘요. `BottomSheet` 내부에 키보드를 활성화할 수 있는 컴포넌트가 있을 때 사용되어요. |
| header | - | any`BottomSheet` 제목 영역이에요. |
| headerDescription | - | any`BottomSheet` 부제목 영역이에요. |
| cta | - | React.ReactNode`BottomSheet` CTA 영역이에요. |
| children | - | React.ReactNode`BottomSheet`의 메인 컨텐츠 영역이에요. |
| ariaLabelledBy | - | stringHTML의 `aria-labelledby` 속성에 전달할 값이에요. 스크린 리더가 `BottomSheet`의 제목을 읽을 때 사용할 요소의 `ID`를 지정해요. `ID`를 전달하여 `BottomSheet`의 목적을 설명해요. 참고↗ |
| ariaDescribedBy | - | stringHTML의 `aria-labelledby` 속성에 전달할 값이에요. 스크린 리더가 BottomSheet의 상세 내용을 읽을 때 사용할 요소의 `ID`를 지정해요. `ID`를 전달하여 BottomSheet의 자세한 설명을 제공해요. 참고↗ |
| disableChildrenDragging | false | false|trueBottomSheet 내부 컨텐츠의 드래그 동작을 제어해요. 이 값이 `true`라면 컨텐츠 영역에서 드래그해도 BottomSheet이 움직이지 않아요. |
| expandBottomSheet | false | false|true`BottomSheet` 내부에 스크롤이 있을 때, `BottomSheet`을 위로 10px 드래그하면 화면 전체 높이로 확장되도록 설정해요. |
| maxHeight | - | number`BottomSheet`이 확장되지 않았을 때의 `BottomSheet` 높이를 설정해요. 단위는 `px`예요. |
| expandedMaxHeight | - | number`BottomSheet`이 확장되었을 때의 높이를 지정해요. 단위는 `px`예요. |
| expandBottomSheetWhenScroll | false | false|true`expandBottomSheet`와 `expandBottomSheetWhenScroll`이 모두 `true`일 때, `BottomSheet` 내부에서 스크롤을 내리면 `BottomSheet`이 화면 전체 높이로 확장돼요. |
| onClose | - | () => void`BottomSheet`이 닫힐 때 실행할 함수예요. |
| onExpanded | - | () => void`BottomSheet`이 확장되었을 때 호출되는 함수예요. |
| onHandlerTouchStart | - | (event: React.TouchEvent) => void`BottomSheet`의 상단의 핸들러에 터치가 시작되었을 때 실행되는 함수예요. |
| onHandlerTouchEnd | - | (event: React.TouchEvent) => void`BottomSheet`의 상단의 핸들러에 터치가 끝났을 때 실행되는 함수예요. |
| onDimmerClick | - | () => void딤 영역을 클릭 했을 때 실행되는 함수예요. |
| onEntered | - | () => void`BottomSheet`이 열리기 시작할 때 실행되는 함수예요. |
| onExited | - | () => void`BottomSheet`이 닫히고 완전히 사라진 후 실행되는 함수예요. |
| portalContainer | document.body | HTMLElement`BottomSheet`을 렌더링할 HTML 요소를 지정해요. `UNSAFE_disabledFocusLock`이 `true`일 때는 무시돼요. |
| ctaContentGap | 34px | number`BottomSheet`컴포넌트 내부의 `BottomSheet.CTA` 컴포넌트와 `children`의 간격을 조정해요. `BottomSheet.Gradient`의 높이와 동일해요. |
| UNSAFE_disableFocusLock | - | false|true`BottomSheet`이 열려도 기존 페이지에 포커스 잠금과 스크린 리더 잠금이 적용되지 않도록 설정해요. 이 속성을 사용하면 접근성 대응이 되지 않으므로 직접 접근성을 대응해야 해요. |
| UNSAFE_ignoreDimmerClick | - | false|true바텀시트 외부의 어두운 배경을 클릭해도 `onClose`가 호출되지 않게 해요. **주의: 바텀시트 외부 영역 클릭 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** |
| UNSAFE_ignoreBackEvent | - | false|true앱에서 제공하는 뒤로가기 이벤트를 무시할지 설정해요. `true`로 설정하면 뒤로가기 동작이 발생해도 바텀시트가 닫히지 않아요. **주의: 뒤로가기 동작 발생 시 사용자의 액션을 취소하고 바텀시트가 닫히는 것이 권장되는 동작이에요.** 이 API는 곧 지원이 중단될 수 있어요. 따라서 취소 동작을 구현하는 것이 기술적으로 어려운 상황에서만 이 속성을 사용하세요. |
| a11yIncludeHeaderInScroll | true | false|true더큰텍스트 160% 이상일 때, 헤더를 스크롤 영역에 포함합니다. |
BottomSheetHeaderProps
| 속성 | 기본값 | 타입 |
|---|---|---|
| children* | - | React.ReactNode제목 영역에 전달할 자식 요소에요. 문자열을 넣으면 `h1` 태그로 감싸고, `t4` 텍스트 스타일을 적용해요. |
| className | - | string제목 영역에 전달할 `className`이에요. |
BottomSheetHeaderDescriptionProps
| 속성 | 기본값 | 타입 |
|---|---|---|
| children* | - | React.ReactNode부제목 영역에 전달할 자식 요소에요. 부제목은 기본적으로 `t6` 텍스트로 감싸져요. |
| className | - | string부제목 영역에 전달할 `className`이에요. |
BottomSheetSelectProps
| 속성 | 기본값 | 타입 |
|---|---|---|
| options* | - | 각 선택 옵션에 대한 정보예요. |
| onChange* | - | (event: React.ChangeEvent<HTMLInputElement>) => void값이 변경되었을 때 실행할 함수에요. 변경된 값은 `event.target.value`로 확인할 수 있어요. |
| value | - | string현재 선택된 값이에요. |
| className | - | string셀렉트 박스에 전달할 `className`이에요. |
| animation | true | false|true`BottomSheet`이 열릴 때 슬라이드 업 애니메이션을 적용할 지 여부예요. |
| animationDelay | - | number애니메이션이 활성화됐을 때, 애니메이션의 지연 시간을 설정해요. 단위는 밀리초(ms)예요. |
SelectOption
| 속성 | 기본값 | 타입 |
|---|---|---|
| name* | - | string선택 옵션의 이름이에요. UI에 이 이름이 표시돼요. |
| value* | - | string선택 옵션의 값이에요. `onChange` 함수에서 `e.target.value`로 전달되는 값이에요. |
| className | - | string선택 옵션에 전달할 `className`이에요. |
| disabled | - | false|true선택 옵션을 비활성화할지 여부에요. |
| hideUnCheckedCheckBox | - | false|true옵션이 선택되지 않았을 때 체크박스를 숨길 지 여부에요. |