Alert Dialog
이 문서는 정리 중이에요. 문의 내용은 #_design_core 채널을 찾아주세요.
import { ResponsivePair } from "@seed-design/react";
import { ActionButton } from "seed-design/ui/action-button";
import {
AlertDialogAction,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogRoot,
AlertDialogTitle,
AlertDialogTrigger,
} from "seed-design/ui/alert-dialog";
const AlertDialogSingle = () => {
return (
// You can set z-index dialog with "--layer-index" custom property. useful for stackflow integration.
<AlertDialogRoot>
<AlertDialogTrigger asChild>
<ActionButton>열기</ActionButton>
</AlertDialogTrigger>
<AlertDialogContent layerIndex={50}>
<AlertDialogHeader>
<AlertDialogTitle>주의</AlertDialogTitle>
<AlertDialogDescription>이 작업은 되돌릴 수 없습니다.</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<ResponsivePair gap="x2">
<AlertDialogAction variant="neutralWeak">취소</AlertDialogAction>
<AlertDialogAction variant="neutralSolid">확인</AlertDialogAction>
</ResponsivePair>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialogRoot>
);
};
export default AlertDialogSingle;
Installation
npx @seed-design/cli@latest add alert-dialog
pnpm dlx @seed-design/cli@latest add alert-dialog
yarn dlx @seed-design/cli@latest add alert-dialog
bun x @seed-design/cli@latest add alert-dialog
Props
Prop | Type | Default |
---|---|---|
onOpenChange? | ((open: boolean) => void) | - |
defaultOpen? | boolean | - |
open? | boolean | - |
unmountOnExit? | boolean | false |
lazyMount? | boolean | false |
closeOnEscape? | boolean | true |
closeOnInteractOutside? | boolean | true |
role? | "dialog" | "alertdialog" | "dialog" |
children? | ReactNode | - |
Examples
Responsive Wrapping
<ResponsivePair>
컴포넌트를 사용해 버튼 컨텐츠가 길어지는 경우 레이아웃을 세로로 접을 수 있습니다.
import { PrefixIcon, ResponsivePair } from "@seed-design/react";
import { IconCheckFill } from "@seed-design/react-icon";
import { ActionButton } from "seed-design/ui/action-button";
import {
AlertDialogAction,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogRoot,
AlertDialogTitle,
AlertDialogTrigger,
} from "seed-design/ui/alert-dialog";
const AlertDialogWrap = () => {
return (
// You can set z-index dialog with "--layer-index" custom property. useful for stackflow integration.
<AlertDialogRoot>
<AlertDialogTrigger asChild>
<ActionButton>열기</ActionButton>
</AlertDialogTrigger>
<AlertDialogContent layerIndex={50}>
<AlertDialogHeader>
<AlertDialogTitle>Wrapping</AlertDialogTitle>
<AlertDialogDescription>
ResponsivePair 컴포넌트를 사용해 버튼 컨텐츠가 길어지는 경우 레이아웃을 세로로 접을 수
있습니다.
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<ResponsivePair gap="x2">
<AlertDialogAction variant="neutralWeak">취소</AlertDialogAction>
<AlertDialogAction variant="neutralSolid">
<PrefixIcon svg={<IconCheckFill />} />긴 레이블 예시
</AlertDialogAction>
</ResponsivePair>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialogRoot>
);
};
export default AlertDialogWrap;
Single Action
import { ActionButton } from "seed-design/ui/action-button";
import {
AlertDialogAction,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogRoot,
AlertDialogTitle,
AlertDialogTrigger,
} from "seed-design/ui/alert-dialog";
const AlertDialogSingle = () => {
// You can set z-index dialog with "--layer-index" custom property. useful for stackflow integration.
return (
<AlertDialogRoot>
<AlertDialogTrigger asChild>
<ActionButton>열기</ActionButton>
</AlertDialogTrigger>
<AlertDialogContent layerIndex={50}>
<AlertDialogHeader>
<AlertDialogTitle>제목</AlertDialogTitle>
<AlertDialogDescription>단일 선택지를 제공합니다.</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogAction variant="neutralSolid">확인</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialogRoot>
);
};
export default AlertDialogSingle;
Neutral Secondary Action
import { ResponsivePair } from "@seed-design/react";
import { ActionButton } from "seed-design/ui/action-button";
import {
AlertDialogAction,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogRoot,
AlertDialogTitle,
AlertDialogTrigger,
} from "seed-design/ui/alert-dialog";
const AlertDialogNeutral = () => {
return (
// You can set z-index dialog with "--layer-index" custom property. useful for stackflow integration.
<AlertDialogRoot>
<AlertDialogTrigger asChild>
<ActionButton>열기</ActionButton>
</AlertDialogTrigger>
<AlertDialogContent layerIndex={50}>
<AlertDialogHeader>
<AlertDialogTitle>제목</AlertDialogTitle>
<AlertDialogDescription>중립적인 선택지를 제공합니다.</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
{/* ResponsivePair component wraps layout if button content is too long. */}
<ResponsivePair gap="x2">
<AlertDialogAction variant="neutralWeak">취소</AlertDialogAction>
<AlertDialogAction variant="neutralSolid">확인</AlertDialogAction>
</ResponsivePair>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialogRoot>
);
};
export default AlertDialogNeutral;
Critical Action
import { ResponsivePair } from "@seed-design/react";
import { ActionButton } from "seed-design/ui/action-button";
import {
AlertDialogAction,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogRoot,
AlertDialogTitle,
AlertDialogTrigger,
} from "seed-design/ui/alert-dialog";
const AlertDialogCritical = () => {
return (
// You can set z-index dialog with "--layer-index" custom property. useful for stackflow integration.
<AlertDialogRoot>
<AlertDialogTrigger asChild>
<ActionButton>열기</ActionButton>
</AlertDialogTrigger>
<AlertDialogContent layerIndex={50}>
<AlertDialogHeader>
<AlertDialogTitle>제목</AlertDialogTitle>
<AlertDialogDescription>파괴적, 비가역적 작업을 경고합니다.</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
{/* ResponsivePair component wraps layout if button content is too long. */}
<ResponsivePair gap="x2">
<AlertDialogAction variant="neutralWeak">취소</AlertDialogAction>
<AlertDialogAction variant="criticalSolid">확인</AlertDialogAction>
</ResponsivePair>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialogRoot>
);
};
export default AlertDialogCritical;
Controlled
Trigger 외의 방식으로 AlertDialog를 열고 닫을 수 있습니다. 이 경우 open
prop을 사용하여 AlertDialog의 상태를 제어합니다.
import { ResponsivePair } from "@seed-design/react";
import { useState } from "react";
import { ActionButton } from "seed-design/ui/action-button";
import {
AlertDialogAction,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogRoot,
AlertDialogTitle,
} from "seed-design/ui/alert-dialog";
const AlertDialogControlled = () => {
const [open, setOpen] = useState(false);
return (
<>
<ActionButton onClick={() => setOpen(true)}>열기</ActionButton>
<AlertDialogRoot open={open} onOpenChange={setOpen}>
<AlertDialogContent>
<AlertDialogHeader>
<AlertDialogTitle>주의</AlertDialogTitle>
<AlertDialogDescription>이 작업은 되돌릴 수 없습니다.</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<ResponsivePair gap="x2">
<AlertDialogAction variant="neutralWeak" onClick={() => setOpen(false)}>
취소
</AlertDialogAction>
<AlertDialogAction variant="neutralSolid" onClick={() => setOpen(false)}>
확인
</AlertDialogAction>
</ResponsivePair>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialogRoot>
</>
);
};
export default AlertDialogControlled;
Portalled
Portal은 기본적으로 document.body
에 렌더링됩니다.
import { ResponsivePair, Portal } from "@seed-design/react";
import { ActionButton } from "seed-design/ui/action-button";
import {
AlertDialogAction,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogRoot,
AlertDialogTitle,
AlertDialogTrigger,
} from "seed-design/ui/alert-dialog";
const AlertDialogPortalled = () => {
return (
// You can set z-index dialog with "--layer-index" custom property. useful for stackflow integration.
<AlertDialogRoot>
<AlertDialogTrigger asChild>
<ActionButton>열기</ActionButton>
</AlertDialogTrigger>
<Portal>
<AlertDialogContent layerIndex={50}>
<AlertDialogHeader>
<AlertDialogTitle>주의</AlertDialogTitle>
<AlertDialogDescription>이 작업은 되돌릴 수 없습니다.</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<ResponsivePair gap="x2">
<AlertDialogAction variant="neutralWeak">취소</AlertDialogAction>
<AlertDialogAction variant="neutralSolid">확인</AlertDialogAction>
</ResponsivePair>
</AlertDialogFooter>
</AlertDialogContent>
</Portal>
</AlertDialogRoot>
);
};
export default AlertDialogPortalled;
Stackflow
import { useActivity } from "@stackflow/react";
import { ActivityComponentType, useFlow } from "@stackflow/react/future";
import {
AlertDialogAction,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogRoot,
AlertDialogTitle,
} from "seed-design/ui/alert-dialog";
declare module "@stackflow/config" {
interface Register {
"alert-dialog-stackflow": unknown;
}
}
const AlertDialogStackflow: ActivityComponentType<"alert-dialog-stackflow"> = () => {
const activity = useActivity();
const { pop } = useFlow();
return (
<AlertDialogRoot defaultOpen onOpenChange={(open) => !open && pop()}>
<AlertDialogContent layerIndex={activity.zIndex * 5}>
<AlertDialogHeader>
<AlertDialogTitle>제목</AlertDialogTitle>
<AlertDialogDescription>Stackflow</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogAction variant="neutralSolid">확인</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialogRoot>
);
};
export default AlertDialogStackflow;
Last updated on