import { Modal } from 'sud-ui';새로운 페이지로 넘어가지 않고 사용자가 상호작용해야하는 경우
현재 페이지 위에 새로운 콘텐츠를 표시할 때
확인 대화 상자 또는 경고 메시지를 표시할 때
import { useState } from "react";
import { Modal, Button } from "sud-ui";
export default function Example() {
const [open, setOpen] = useState(false);
return (
<div>
<Button colorType="primary" onClick={() => setOpen(true)}>
Open Modal
</Button>
<Modal
open={open}
onClose={() => setOpen(false)}
title="Modal"
>
<div>Modal Content</div>
</Modal>
</div>
);
}import { useState } from "react";
import { Modal, Button, Typography } from "sud-ui";
export default function Example() {
const [open, setOpen] = useState(false);
return (
<div>
<Button colorType="primary" onClick={() => setOpen(true)}>
Open Modal
</Button>
<Modal
open={open}
onClose={() => setOpen(false)}
title="Modal"
divider={true}
footer={
<div className="flex gap-[10px] items-center justify-center">
<Button
colorType="primary"
size="md"
onClick={() => setOpen(false)}
>
Ok
</Button>
</div>
}
>
<div>
<Typography as="h2" size="lg">
Use Divider Modal
</Typography>
<Typography as="p" size="md">
With Title && Footer
</Typography>
</div>
</Modal>
</div>
);
}import { useState } from "react";
import { Modal, Button } from "sud-ui";
export default function Example() {
const [open, setOpen] = useState(false);
return (
<div>
<Button colorType="primary" onClick={() => setOpen(true)}>
Open Modal
</Button>
<Modal
open={open}
onClose={() => setOpen(false)}
title="Modal"
footer={
<div className="flex gap-[10px] items-center justify-center">
<Button
className="w-[90px]"
colorType="primary"
size="md"
onClick={() => setOpen(false)}
>
Ok
</Button>
<Button
className="w-[90px]"
colorType="danger"
size="md"
onClick={() => setOpen(false)}
>
Cancel
</Button>
</div>
}
>
<div>With Footer Modal</div>
</Modal>
</div>
);
}import { useState } from "react";
import { Modal, Button, Typography, Div } from "sud-ui";
export default function Example() {
const [open, setOpen] = useState(false);
return (
<div>
<Button colorType="primary" onClick={() => setOpen(true)}>
Open Modal
</Button>
<Modal
open={open}
onClose={() => setOpen(false)}
colorType="mint"
color="navy-7"
title="Custom Modal"
divider={true}
dividerColor="gold-1"
borderType="dashed"
borderWeight={3}
shape="square"
footer={
<div className="flex gap-[10px] items-center justify-center">
<Button
colorType="forest"
size="md"
onClick={() => setOpen(false)}
>
Ok
</Button>
</div>
}
>
<Div color="cool-gray-8">
<Typography as="h2">Custom Modal</Typography>
<Typography as="p">With Title && Footer</Typography>
</Div>
</Modal>
</div>
);
}속성 이름 | 설명 | 타입 | 기본값 |
|---|
| open | 모달의 열림/닫힘 상태 | boolean | false |
| onClose | 모달을 닫는 콜백 함수 (() => void) | () => void | - |
| onEsc | ESC 키로 모달 닫기 활성화 여부 | boolean | true |
| title | 모달 상단에 표시되는 제목 (ReactNode) | ReactNode | - |
| children | 모달 내부에 표시할 내용 (ReactNode) | ReactNode | - |
| footer | 모달 하단에 표시할 내용 (ReactNode) | ReactNode | - |
| colorType | 색상 타입 | default | primary | success | warning | danger | info | red | rose | coral | orange | volcano | apricot | yellow | gold | amber | green | lime | mint | blue | sky | cerulean | indigo | cobalt | navy | purple | plum | orchid | forest | sage | warm-gray | cool-gray | neutral | text | ghost | default |
| background | 모달 배경색(palette값 또는 HEX code) | string | - |
| color | 모달 텍스트 색상(palette값 또는 HEX code) | string | - |
| border | 테두리 표시 여부 | boolean | true |
| borderColor | 테두리 색상(palette값 또는 HEX code) | string | - |
| borderType | 테두리 스타일 | solid | dashed | dotted | double | groove | ridge | inset | outset | none | solid |
| borderWeight | 테두리 두께 | number | 1 |
| shape | 모서리 형태 | square | circle | rounded | capsule | rounded |
| shadow | 그림자 크기 | none | sm | md | lg | lg |
| width | 모달의 너비 (px 또는 %) | number | string | 480 |
| height | 모달의 높이 (px 또는 %) | number | string | - |
| divider | 타이틀/푸터 구분선 표시 여부 | boolean | false |
| dividerColor | 구분선 색상(palette값 또는 HEX code) | string | - |
| className | 추가 클래스명 | string | - |
| style | 추가 스타일 | CSSProperties | {} |
| ariaLabel | 접근성 레이블 | string | - |
| ariaDescribedby | 접근성 설명 ID | string | - |