import { default as React } from 'react';
import { ButtonProps } from '../Button';
/** ---------------------------------------------
 * 보조 타입: 버튼 그룹 정의
 * - `buttons` 필드에서 사용된다.
 * - Button 컴포넌트와 호환되는 onClick/variant/disabled 속성을 그대로 연결.
 * --------------------------------------------- */
type Buttons = {
    title?: string;
    onClick?: ButtonProps["onClick"];
    variant?: ButtonProps["variant"] | string;
    disabled?: ButtonProps["disabled"];
};
/** ---------------------------------------------
 * 보조 타입: colspan 정의
 * - span: 합칠 칸 수
 * - target: "th" | "td" (어느 쪽에 적용할지)
 * --------------------------------------------- */
type ColSpan = {
    span: number;
    target: "th" | "td" | string;
};
/** ---------------------------------------------
 * 외부에서 내려주는 필드(아이템) 정의
 * - 각 항목은 제목 셀(th) + 값 셀(td) 한 쌍으로 렌더된다.
 * - type에 따라 입력/선택/버튼/텍스트 등 다양한 UI로 확장 가능.
 * - colSpan.target으로 th/td 각각의 span을 독립적으로 제어할 수 있다.
 * --------------------------------------------- */
export type FieldRow = {
    accessorKey: string;
    title: string;
    value?: string | React.ReactNode;
    type?: "input" | "inputNum" | "inputEng" | "select" | "checkbox" | "checkboxN" | "datepicker" | "dateRangePicker" | "modal" | "button" | "date" | "text" | string;
    required?: boolean;
    textAlign?: "left" | "center" | "right";
    buttons?: Buttons[];
    colSpan?: ColSpan;
    menuItems?: {
        label: string;
        value: string;
    }[];
    onClick?: () => void;
    startIcon?: {
        icon: React.ReactNode;
        onClick: () => void;
    };
    endIcon?: {
        icon: React.ReactNode;
        onClick: () => void;
    };
    disabled?: boolean;
    readOnly?: boolean;
    maxLength?: number;
};
/** ---------------------------------------------
 * 컴포넌트 외부에서 받는 props
 * - data: 렌더/초기화에 사용할 원본 데이터
 * - items: 테이블을 구성할 필드 정의 목록(FieldRow[])
 * - totalColumns: 한 행을 구성하는 총 칸 수(th+td 합의 기준). 각 항목의 th span + td span 합이 누적되어 정확히 일치할 때 줄바꿈한다.
 * - colGroup: <colgroup> 용 폭 배열 등(옵션)
 * - title: 상단 타이틀(옵션)
 * - onSave: 상단 TitleContainer에서 저장 액션 등으로 연결
 * - onTableChange: 폼 데이터 변경을 100ms 디바운스로 통지
 * --------------------------------------------- */
export interface VerticalTableProps {
    items: FieldRow[];
    totalColumns: number;
    data?: {
        [key: string]: any;
    };
    colGroup?: string[];
    title?: string;
    onSave?: (e: any) => void;
    onTableChange?: (data: any) => void;
}
/** ---------------------------------------------
 * 내부 전용 셀 타입
 * - 렌더링 단계에서 th/td 역할을 구분하기 위해 kind("title" | "value")로 나눈다.
 * - span은 해당 셀의 colspan, required 등 렌더링을 위한 메타 데이터 포함.
 * --------------------------------------------- */
export type TitleCell = {
    kind: "title";
    accessorKey: string;
    title: string;
    span?: ColSpan["span"];
    required?: FieldRow["required"];
};
export type ValueCell = {
    kind: "value";
    accessorKey: string;
    type?: FieldRow["type"];
    value: string;
    span?: ColSpan["span"];
    required?: FieldRow["required"];
    textAlign?: FieldRow["textAlign"];
    buttons?: FieldRow["buttons"];
    menuItems?: FieldRow["menuItems"];
    onClick?: FieldRow["onClick"];
    startIcon?: FieldRow["startIcon"];
    endIcon?: FieldRow["endIcon"];
    disabled?: FieldRow["disabled"];
    readOnly?: FieldRow["readOnly"];
    maxLength?: FieldRow["maxLength"];
};
declare const VerticalTable: React.ForwardRefExoticComponent<VerticalTableProps & React.RefAttributes<HTMLTableElement>>;
export default VerticalTable;
