import { type CSSProperties, type ReactNode } from 'react'; import { type SFooterButton } from '../SFooter'; export type SDrawerButton = SFooterButton; export interface SDrawerProps { /** 표시 여부 */ open?: boolean; /** 표시 상태 변경 */ onOpenChange?: (open: boolean) => void; /** 닫기(X) 버튼 클릭 */ onClose?: () => void; /** * backdrop·ESC로 닫히지 않고 흔들림 효과를 준다. * **기본값 true** — Drawer는 내용을 작성·구성하는 곳이라 임의 닫힘을 막는 것이 기본이다. * 닫기 경로는 X 버튼과 footer 버튼뿐이다. false로 주면 backdrop·ESC 닫기가 열린다. */ persistent?: boolean; /** 접근성 제목 및 헤더 제목 */ title?: string; /** * Drawer 너비. 기본값은 Figma drawer 기준 572px이다. * 창이 이보다 좁으면 창 폭까지만 넓어진다 — 드로어가 화면 밖으로 나가지 않는다. * `resizable` 로 조절한 폭은 이 값이 바뀔 때 되돌아간다 — 앱이 폭을 저장해 두었다가 * 다시 열 때 넘겨주면 그 폭으로 열린다. */ width?: number | string; /** * 왼쪽 테두리를 끌어 너비를 조절할 수 있게 한다. 조절선은 패널 왼쪽 경계 전체이며 * 평소엔 보이지 않다가 hover·포커스·조절 중에만 드러난다(SSplitter·SGnb 와 같은 선). * 포커스를 받아 방향키(Shift 는 크게)·Home·End 로도 조절된다. */ resizable?: boolean; /** 리사이즈 가능한 최소 너비(px, %, vw, vh). % 는 viewport 기준이며, 창 폭보다 클 수 없다 */ minWidth?: number | string; /** 리사이즈 가능한 최대 너비(px, %, vw, vh). % 는 viewport 기준이며, 주지 않으면 창 폭이 상한이다 */ maxWidth?: number | string; /** 너비가 확정될 때(드래그를 놓거나 방향키 조작). 드래그하는 동안에는 오지 않는다 */ onWidthChange?: (width: number) => void; /** footer 좌측 슬롯 */ footerLeft?: ReactNode; /** 우측 기본 액션 버튼 */ button?: SDrawerButton; children?: ReactNode; className?: string; style?: CSSProperties; } /** * SDrawer — Figma drawer 포팅. * * 모달과 동일한 전역 modal host와 stack을 공유한다. 따라서 Drawer가 열린 상태에서 * 모달을 추가로 열면 새 모달이 Drawer 위에 쌓이고, Drawer 내부 floating은 전용 portal * container를 통해 Drawer의 backdrop 위에 표시된다. */ export declare function SDrawer({ open, onOpenChange, onClose, persistent, title, width, resizable, minWidth, maxWidth, onWidthChange, footerLeft, button, children, className, style, }: SDrawerProps): import("react").JSX.Element;