import { CSSProperties } from 'react';
import { IMakeSelect } from './make-select';
import { IMakeInput } from './make-input';
import { IMakeTextarea } from './make-textarea';
import { IMakeToggle } from './make-toggle';
import { IMakeDescription } from './make-description';
import { IMakeFieldGroup } from './make-field-group';
import { IMakeUpload } from './make-upload';
import { IOption } from './option';
import { IMakeButton } from './make-button';
import { IMakeCustomUpload } from './make-custom-upload';
import { IMakeWatcher } from './make-watcher';
import { IMakeTable } from './make-table';
export type IModalField = IMakeSelect | IMakeInput | IMakeFieldGroup | IMakeTextarea | IMakeToggle | IMakeDescription | IMakeUpload | IMakeCustomUpload | IMakeWatcher | IMakeButton | IMakeTable;
export type IFormField = IMakeSelect | IMakeInput | IMakeTextarea | IMakeToggle;
export interface IModalRenderAction {
    action: (data: string, ...args: any[]) => Promise<boolean>;
    condition: Array<string>;
}
export type IModalRenderCriteria = Record<string, Array<string | number | boolean> | undefined>;
export type IModalRenderCondition = IModalRenderAction | IModalRenderCriteria;
export type IModalLiveDataCondition = {
    action: (data: string, ...args: any[]) => Promise<Array<IOption>>;
    condition: Array<string>;
};
export interface IModalSectionStyleConfig {
    className?: string;
    style?: CSSProperties;
}
export interface IModalLayoutConfig {
    container?: IModalSectionStyleConfig;
    header?: IModalSectionStyleConfig & {
        showDivider?: boolean;
    };
    title?: IModalSectionStyleConfig;
    body?: IModalSectionStyleConfig;
    footer?: IModalSectionStyleConfig & {
        showDivider?: boolean;
    };
}
export interface IModalConfigProps {
    reservedData?: Record<string, any>;
    title: string;
    layout?: IModalLayoutConfig;
    fields: Array<IModalField>;
    out: (data: any) => void;
    onClose?: () => void;
    style?: CSSProperties;
    overFlowBody?: string | number;
    minHeightBody?: string | number;
    useSubmit?: boolean;
    useBlur?: boolean;
    actions: {
        containerStyle?: CSSProperties;
        cancel?: Omit<IMakeButton, 'elementType'>;
        action: Omit<IMakeButton, 'elementType'>;
    };
}
export type IModalConfigLoader<T = any, D = any> = (props: T, action: (modalResult: D) => void) => IModalConfigProps;
export interface IModal {
    open: boolean;
    close: () => void;
    config: IModalConfigProps;
}
