import { MutableRefObject, PropsWithChildren } from "react";
import { T_d_input_possible_all } from "../input";
import { DInputProps, T_DInputProps_enum_type } from "../..";
interface omit_dGrid_input extends Omit<DInputProps, "className" | "wrapperClassName" | "size" | "labelType" | "labelVaraint" | "labelTextPosition" | "labelAlignSelf" | "showLabel" | "variant" | "border" | "borderVariant" | "value" | "onChange" | "onValueChange" | "type" | "isLazy" | "lazyMs"> {
    colSpan?: number;
    rowSpan?: number;
    verticalAlign?: "top" | "middle" | "bottom";
    textAlign?: "start" | "center" | "end";
    labelColumnLetter?: number;
    editable?: boolean;
    sortable?: boolean;
    moveable?: boolean;
}
export interface DGridProps_columns<T extends Record<string, T_d_input_possible_all>> extends omit_dGrid_input {
    name?: keyof T;
    type?: T_DInputProps_enum_type | ((data?: T, index?: number) => React.ReactNode);
}
export interface DGridProps_options {
    /**
     * @description 그리드 헤더의 수직 텍스트 기본 위치
     * @member
     * - top : 윗부분
     * - middle : 가운데
     * - bottom : 바닥 부분
     */
    headerVerticalAlign?: "top" | "middle" | "bottom";
    /**
     * @description 그리드 헤더의 수평 텍스트 기본 위치
     * @member
     * - start : 왼쪽 끝
     * - center : 가운데
     * - end : 오른쪽 끝
     */
    headerTextAlign?: "start" | "center" | "end";
    bodyVerticalAlign?: "top" | "middle" | "bottom";
    bodyTextAlign?: "start" | "center" | "end";
    dataEmptyMessage?: string;
    /**
     * @description 그리드의 row - cell의 기본 너비 길이 ( rem unit )
     */
    labelColumnLetter?: number;
    editable?: boolean;
    sortable?: boolean;
    moveable?: boolean;
    fixColumnIndex?: number;
    isLazy?: boolean;
    lazyMs?: number;
    onKeyEnter?: () => void;
}
export type DGridRefProps<T = Record<string, T_d_input_possible_all>> = {
    /** @description 그리드의 선택행을 전부다 clear 한다.  */
    clearSelect: () => void;
    /** @description 그리드의 선택행을 가져온다.  */
    getSelectRows: () => T[] | undefined | null;
};
export interface DGridProps<T extends Record<string, T_d_input_possible_all>> extends PropsWithChildren {
    dataRows: T[];
    setDataRows: React.Dispatch<React.SetStateAction<T[]>>;
    options?: DGridProps_options;
    columns?: DGridProps_columns<T>[] | DGridProps_columns<T>[][];
    height?: number | string;
    className?: string;
    tableFill?: boolean;
    rowSelectMode?: "single" | "multiple" | "unused" | undefined;
    rowSelectType?: "row" | "checkbox";
    tableRef?: MutableRefObject<DGridRefProps<T> | null>;
    onRowsSelect?: (selectedArray?: T[], selectedIndexes?: number[]) => void;
    onCurrentSelect?: (selectedData?: T, selectedIndex?: number) => void;
    onCurrentUnSelect?: (selectedData?: T, selectedIndex?: number) => void;
    variant?: string;
}
export type T_controller_record_object = {
    __selected?: boolean;
    __realIndex?: number;
};
/**
 * todo type render always render problem..
 */
export declare const DGrid: <T extends Record<string, any>>({ columns, options, className, dataRows, setDataRows, height, tableFill, rowSelectMode, rowSelectType, tableRef, onRowsSelect, onCurrentSelect, onCurrentUnSelect, variant }: DGridProps<T>) => import("react").JSX.Element;
export default DGrid;
