React

Bottom Sheet

화면 하단에서 올라오는 모달 컴포넌트입니다. 추가 정보나 액션 목록을 제공하면서도 현재 컨텍스트를 유지할 때 사용됩니다.

Stackflow

Stackflow와 Bottom Sheet를 함께 사용하는 방법에 대해 알아보세요.

Installation

npx @seed-design/cli@latest add ui:bottom-sheet

Props

BottomSheetRoot

Prop

Type

children?React.ReactNode
activeSnapPoint?string | number | null | undefined
setActiveSnapPoint?((snapPoint: number | string | null) => void) | undefined
open?boolean | undefined
onOpenChange?((open: boolean, details?: DrawerChangeDetails) => void) | undefined
onDrag?((event: React.PointerEvent<HTMLDivElement>, percentageDragged: number) => void) | undefined
onRelease?((event: React.PointerEvent<HTMLDivElement>, open: boolean) => void) | undefined
nested?boolean | undefined
onClose?(() => void) | undefined
container?HTMLElement | null | undefined
autoFocus?boolean | undefined

BottomSheetTrigger

Prop

Type

BottomSheetContent

Prop

Type

title?React.ReactNode
description?React.ReactNode
layerIndex?number | undefined

BottomSheetBody

Prop

Type

paddingX?ResponsiveValue<0 | (string & {}) | Dimension | "spacingX.betweenChips" | "spacingX.globalGutter" | "spacingY.componentDefault" | "spacingY.navToTitle" | "spacingY.screenBottom" | "spacingY.betweenText"> | undefined
height?ResponsiveValue<(string & {}) | Dimension | "spacingX.betweenChips" | "spacingX.globalGutter" | "spacingY.componentDefault" | "spacingY.navToTitle" | "spacingY.screenBottom" | "spacingY.betweenText" | "full"> | undefined
maxHeight?ResponsiveValue<(string & {}) | Dimension | "spacingX.betweenChips" | "spacingX.globalGutter" | "spacingY.componentDefault" | "spacingY.navToTitle" | "spacingY.screenBottom" | "spacingY.betweenText" | "full"> | undefined
minHeight?ResponsiveValue<(string & {}) | Dimension | "spacingX.betweenChips" | "spacingX.globalGutter" | "spacingY.componentDefault" | "spacingY.navToTitle" | "spacingY.screenBottom" | "spacingY.betweenText" | "full"> | undefined
justifyContent?"center" | "flex-start" | "flex-end" | "space-between" | "space-around" | undefined
alignItems?"center" | "flex-start" | "flex-end" | "stretch" | undefined

BottomSheetFooter

Prop

Type

Examples

Trigger

<BottomSheetTrigger>asChild 패턴을 사용해 자식 요소가 BottomSheet를 열 수 있도록 합니다.

<BottomSheetTrigger>aria-haspopup="dialog" 속성을 설정하고, BottomSheetopen 상태에 따라 aria-expanded 속성을 자동으로 설정합니다. 이 속성은 스크린 리더와 같은 보조 기술에 유용합니다.

Controlled

Trigger 외의 방식으로 BottomSheet를 열고 닫을 수 있습니다. 이 경우 open prop을 사용하여 BottomSheet의 상태를 제어합니다.

onOpenChange Details

onOpenChange 두 번째 인자로 details가 제공됩니다.

reason

열릴 때 (open: true)

  • "trigger": BottomSheetTrigger (BottomSheet.Trigger)로 열림

닫힐 때 (open: false)

  • "closeButton": BottomSheet.CloseButton으로 닫힘
  • "escapeKeyDown": ESC 키 사용
  • "interactOutside": 외부 영역 클릭
  • "drag": 드래그로 닫힘
  • "handleClickOnLastSnapPoint": 마지막 스냅 포인트에서 핸들 클릭으로 닫힘

Header Align

<BottomSheetRoot>headerAlign prop을 설정하여 title과 description의 정렬을 설정할 수 있습니다.

Max Height

<BottomSheetBody>maxHeight prop을 전달하여 BottomSheet의 최대 높이를 설정할 수 있습니다.

Snap Points

snapPoints prop을 사용하여 BottomSheet의 커스텀 스냅 포인트를 설정할 수 있습니다.

Fade From Index

<BottomSheetRoot>fadeFromIndex prop을 전달하여 뒷 배경이 어두워지는 시작 인덱스를 설정할 수 있습니다.

Show Handle

<BottomSheetContent>showHandle prop을 전달하여 Handle을 표시할 수 있습니다. 기본 값은 false입니다.

Show Close Button

<BottomSheetContent>showCloseButton prop을 전달하여 닫기 버튼을 표시할 수 있습니다. 기본 값은 true입니다.

showCloseButton을 false로 설정하면 닫기 버튼이 표시되지 않습니다. 이 경우 유저가 BottomSheet를 닫을 수 있는 방법을 제공해야 합니다.

Dismissible

dismissible prop을 false로 설정하면 closeOnEscape, closeOnInteractOutside, draggable 기능이 비활성화됩니다. 의도적으로 BottomSheet를 닫을 수 없게 하고 싶을 때 사용합니다. 이외에는 유저가 BottomSheet를 닫을 수 있는 방법을 제공해야 합니다.

With Scroll Fog

<BottomSheetBody>Scroll Fog를 사용하여 스크롤 힌트 효과를 적용할 수 있습니다.

ScrollFog는 항상 효과를 표시하므로, 충분한 padding을 제공해야 합니다. 권장 padding인 하단 80px, 상단 20px을 유지해야 합니다.

Bottom Inset

<BottomSheetContent>style prop을 전달하여 아래 여백을 주기 위해 사용합니다.

Handle Only

<BottomSheetRoot>handleOnly prop을 제공하는 경우 쓸어서(swipe) Bottom Sheet를 움직일 수 있는 영역이 핸들 부분으로 제한됩니다.

이 옵션은 <BottomSheetContent showHandle={true}>와 함께 사용할 때만 작동합니다.

Skip Animation

skipAnimation prop을 사용하여 BottomSheet의 enter/exit 애니메이션을 건너뛸 수 있습니다.

Last updated on

On this page