Lynx

Alert Dialog

사용자의 확인이 반드시 필요한 경우 강력한 표현 및 경고 수단으로 활용하는 컴포넌트입니다.

Engine ≥ 3.6<overlay>
사용 가능 버전@seed-design/[email protected], @seed-design/[email protected]
Lynx 예제를 불러오는 중입니다.

Installation

npx @seed-design/cli add ui:alert-dialog

Usage

import { ActionButton } from "@seed-design/lynx-react";
import {
  AlertDialogAction,
  AlertDialogContent,
  AlertDialogDescription,
  AlertDialogFooter,
  AlertDialogHeader,
  AlertDialogRoot,
  AlertDialogTitle,
  AlertDialogTrigger,
} from "@/components/ui/alert-dialog";

export function App() {
  return (
    <AlertDialogRoot>
      <AlertDialogTrigger>
        <ActionButton variant="neutralSolid">열기</ActionButton>
      </AlertDialogTrigger>
      <AlertDialogContent>
        <AlertDialogHeader>
          <AlertDialogTitle>주의</AlertDialogTitle>
          <AlertDialogDescription>이 작업은 되돌릴 수 없습니다.</AlertDialogDescription>
        </AlertDialogHeader>
        <AlertDialogFooter>
          <AlertDialogAction variant="neutralWeak">취소</AlertDialogAction>
          <AlertDialogAction variant="neutralSolid">확인</AlertDialogAction>
        </AlertDialogFooter>
      </AlertDialogContent>
    </AlertDialogRoot>
  );
}

AlertDialogTrigger는 자식을 native view로 감쌉니다. 문자열 children에서 접근성 이름을 만들며, accessibility-label을 직접 지정하면 그 값을 사용합니다. raw <text>처럼 이름을 만들 수 없는 자식에는 이름을 명시하세요.

AlertDialogAction은 탭하면 Alert Dialog를 닫지만, disabled 또는 loading 상태에서는 닫지 않습니다. 사용자의 확인이 필요한 흐름을 위해 Backdrop 탭으로는 닫히지 않습니다.

Props

AlertDialogRoot

Prop

Type

open, defaultOpen, onOpenChange로 상태를 제어할 수 있으며 skipAnimation으로 열림·닫힘 transition을 건너뛸 수 있습니다.

AlertDialogTrigger

고유 prop이 없습니다.

AlertDialogContent

Prop

Type

children?React.ReactNode
container?string | undefined
overlayLevel?1 | 2 | 3 | 4 | undefined

container와 overlayLevel로 native overlay의 위치와 표시 순서를 지정합니다.

AlertDialogHeader

고유 prop이 없습니다. className, style, children과 padding·gap 같은 스타일 prop을 받습니다.

AlertDialogTitle

Prop

Type

AlertDialogDescription

고유 prop이 없습니다. className, style, children과 padding·gap 같은 스타일 prop을 받습니다.

AlertDialogFooter

고유 prop이 없습니다. className, style, children과 padding·gap 같은 스타일 prop을 받습니다.

AlertDialogAction

Prop

Type

flexGrow?boolean | Property.FlexGrow | undefined
bleed?BleedValue | undefined
bleedX?BleedValue | undefined
bleedY?BleedValue | undefined

Examples

Responsive Wrapping

React의 ResponsivePair 대신 Footer 안에 명시적인 세로 action layout을 구성합니다. Lynx에서는 native view의 flex-direction 등을 사용해 긴 버튼 레이블이 세로로 배치되도록 조정합니다.

Lynx 예제를 불러오는 중입니다.

Long Content

내용이 최대 높이를 넘으면 AlertDialogContent 안에서 스크롤되고, 끝까지 스크롤하면 Footer의 버튼이 보입니다. Content는 위아래 safe area inset과 recipe의 위아래 margin을 뺀 높이를 넘지 않습니다.

Lynx 예제를 불러오는 중입니다.

Single Action

확인 또는 닫기처럼 하나의 action만 제공하는 Alert Dialog입니다.

Lynx 예제를 불러오는 중입니다.

Neutral Secondary Action

보조 action에 neutralWeak를 사용하고, 주요 action과 시각적 우선순위를 구분합니다.

Lynx 예제를 불러오는 중입니다.

Nonpreferred

주요 흐름에서 권장하지 않는 action 조합을 표현하는 예제입니다.

Lynx 예제를 불러오는 중입니다.

Critical Action

삭제처럼 되돌리기 어렵거나 위험한 action에는 criticalSolid를 사용합니다.

Lynx 예제를 불러오는 중입니다.

Controlled

Trigger 외의 방식으로 Alert Dialog를 열고 닫으려면 open과 boolean을 받는 onOpenChange로 상태를 제어합니다.

Lynx 예제를 불러오는 중입니다.

Prevent Close

Lynx의 AlertDialogAction에는 React 이벤트의 preventDefault() 방식이 없습니다. controlled Root에서 onOpenChange(false) 요청을 조건에 따라 무시하면 닫힘을 막을 수 있습니다.

Lynx 예제를 불러오는 중입니다.

Portalled

AlertDialogContent의 container를 지정하면 native overlay 레이어에 렌더링됩니다. overlayLevel로 overlay 레이어의 표시 순서를 지정할 수 있습니다.

Lynx 예제를 불러오는 중입니다.

Skip Animation

AlertDialogRoot의 skipAnimation prop을 사용하여 Alert Dialog의 enter/exit transition을 건너뛸 수 있습니다.

Lynx 예제를 불러오는 중입니다.

웹 버전과의 차이

  • onOpenChange는 변경된 boolean 값만 전달합니다. 닫힌 원인이 필요하면 Trigger와 action의 이벤트 핸들러에서 별도 상태로 기록하세요.
  • Backdrop 탭과 ESC 키로 닫히지 않습니다. 필요한 닫기 흐름은 버튼과 controlled 상태로 구성하세요.
  • Trigger는 자식을 native view로 감싸며 asChild를 제공하지 않습니다.
  • DOM ref forwarding과 웹의 자동 focus 관리 API를 제공하지 않습니다.
  • container와 overlayLevel로 native overlay의 위치와 표시 순서를 지정합니다.
  • ResponsivePair는 제공하지 않습니다. Footer 안에서 action의 방향과 간격을 직접 지정하세요.

Last updated on

목차