Skip to content

Modal

모달 컴포넌트는 사용자에게 집중된 콘텐츠를 오버레이로 표시합니다.

기본 사용법

tsx
import { useOverlay } from '@youngduck/yd-ui/Overlays'
import { Button } from '@youngduck/yd-ui'

function App() {
  const { modalOpen } = useOverlay()

  return (
    <Button
      onClick={() =>
        modalOpen({
          config: { size: 'md' },
          content: (
            <div>
              <h2>모달 제목</h2>
              <p>모달 내용</p>
            </div>
          ),
        })
      }
    >
      모달 열기
    </Button>
  )
}

함수형 Content (onClose 콜백)

content에 함수를 전달하면 onClose 콜백을 받아 내부에서 닫기 처리가 가능합니다.

tsx
modalOpen({
  config: { size: 'md' },
  content: (onClose) => (
    <div>
      <h2>모달 제목</h2>
      <p>onClose 콜백으로 내부에서 닫기 가능</p>
      <Button onClick={onClose}>닫기</Button>
    </div>
  ),
})

Sizes

config.size로 sm / md / lg / xl 사이즈를 선택할 수 있습니다.

tsx
modalOpen({ config: { size: 'sm' }, content: <div>Small</div> })
modalOpen({ config: { size: 'md' }, content: <div>Medium</div> })
modalOpen({ config: { size: 'lg' }, content: <div>Large</div> })
modalOpen({ config: { size: 'xl' }, content: <div>Extra Large</div> })

키보드 지원

  • ESC — 모달 닫기
  • Tab / Shift+Tab — 모달 내부 포커스 이동

닫기 방식

  • 배경(backdrop) 클릭
  • ESC 키
  • 함수형 content의 onClose 콜백 호출

API

modalOpen 옵션

옵션타입기본값설명
config.size'sm' | 'md' | 'lg' | 'xl'-모달 크기 (필수)
contentReactNode | ((onClose) => ReactNode)-모달 내용 (필수)

사이즈별 크기

사이즈너비높이최대 높이
sm320px400px400px
md480px600px600px
lg640px800px800px
xl800px900px900px

사전 조건

앱 최상단에 <OverlayProvider>가 감싸져 있어야 합니다.

tsx
import { OverlayProvider } from '@youngduck/yd-ui/Overlays'

function App() {
  return (
    <OverlayProvider>
      <MyApp />
    </OverlayProvider>
  )
}