import { type MouseEvent, type ReactElement, type ReactNode } from 'react'; import { type SListProps } from '../SList'; export interface SDraggableListRenderState { onDragHandleMouseDown: (event: MouseEvent) => void; selected: boolean; } export interface SDraggableListProps extends Omit { /** 현재 순서대로 렌더링할 아이템 목록 */ items: T[]; /** 아이템을 식별할 안정적인 key */ getKey: (item: T, index: number) => string; /** 아이템 렌더링 함수 */ renderItem: (item: T, index: number, state: SDraggableListRenderState) => ReactNode; /** 단독 리스트에서 드래그가 끝난 뒤 변경된 순서 */ onChange?: (items: T[]) => void; /** 외부에서 제어하는 selected 아이템 key */ selectedKey?: string; /** 초기 selected 아이템 key */ defaultSelectedKey?: string; /** selected 아이템이 변경될 때 호출 */ onSelectedKeyChange?: (key: string) => void; /** disabled 아이템은 선택 및 드래그에서 제외 */ getDisabled?: (item: T, index: number) => boolean; /** Provider 안에서 사용할 리스트 식별자 */ listId?: string; /** 같은 group 값을 가진 리스트끼리 드래그 이벤트를 공유 */ group?: string; } export declare const SDraggableList: (props: SDraggableListProps & { ref?: React.ForwardedRef; }) => ReactElement | null;