/// <reference types="hoist-non-react-statics" />
import React from 'react';
import { RendererProps } from '../factory';
export interface ButtonSchema extends BaseSchema {
    /**
     * 是否为块状展示，默认为内联。
     */
    block?: boolean;
    /**
     * 禁用时的文案提示。
     */
    disabledTip?: string;
    /**
     * 按钮图标， iconfont 的类名
     */
    icon?: SchemaIcon;
    /**
     * icon 上的css 类名
     */
    iconClassName?: SchemaClassName;
    /**
     * 按钮文字
     */
    label?: string;
    /**
     * 按钮样式
     */
    level?: 'info' | 'success' | 'warning' | 'danger' | 'link' | 'primary' | 'dark';
    /**
     * @deprecated 通过 level 来配置
     */
    primary?: boolean;
    /**
     * 按钮大小
     */
    size?: 'xs' | 'sm' | 'md' | 'lg';
    tooltip?: SchemaTooltip;
    tooltipPlacement?: 'top' | 'right' | 'bottom' | 'left';
    /**
     * 指定按钮类型，支持 button、submit或者reset三种类型。
     */
    type: 'button' | 'submit' | 'reset';
    /**
     * 提示文字，配置了操作前会要求用户确认。
     */
    confirmText?: string;
    /**
     * 如果按钮在form中，配置此属性会要求用户把指定的字段通过验证后才会触发行为。
     */
    required?: Array<string>;
    /**
     * 激活状态时的样式
     */
    activeLevel?: string;
    /**
     * 激活状态时的类名
     */
    activeClassName?: string;
    /**
     * 如果按钮在弹框中，可以配置这个动作完成后是否关闭弹窗，或者指定关闭目标弹框。
     */
    close?: boolean | string;
    /**
     * 当按钮时批量操作按钮时，默认必须有勾选元素才能可点击，如果此属性配置成 false，则没有点选成员也能点击。
     */
    requireSelected?: boolean;
    /**
     * 是否将弹框中数据 merge 到父级作用域。
     */
    mergeData?: boolean;
    /**
     * 可以指定让谁来触发这个动作。
     */
    target?: string;
}
export interface AjaxActionSchema extends ButtonSchema {
    /**
     * 指定为发送 ajax 的行为。
     */
    actionType: 'ajax';
    /**
     * 配置 ajax 发送地址
     */
    api: SchemaApi;
    feedback?: DialogSchemaBase;
    reload?: SchemaReload;
    redirect?: string;
}
export interface UrlActionSchema extends ButtonSchema {
    /**
     * 指定为打开链接
     */
    actionType: 'url';
    /**
     * 是否新窗口打开
     */
    blank?: boolean;
    /**
     * 打开的目标地址
     */
    url: string;
}
export interface DialogActionSchema extends ButtonSchema {
    /**
     * 指定为打开弹窗
     */
    actionType: 'dialog';
    /**
     * 弹框详情
     * 文档：https://baidu.gitee.io/amis/docs/components/dialog
     */
    dialog: DialogSchemaBase;
    /**
     * 是否有下一个的表达式，正常可以不用配置，如果想要刷掉某些数据可以配置这个。
     */
    nextCondition?: SchemaExpression;
    reload?: SchemaReload;
    redirect?: string;
}
export interface DrawerActionSchema extends ButtonSchema {
    /**
     * 指定为打开弹窗，抽出式弹窗
     */
    actionType: 'drawer';
    /**
     * 抽出式弹框详情
     * 文档：https://baidu.gitee.io/amis/docs/components/drawer
     */
    drawer: DrawerSchemaBase;
    /**
     * 是否有下一个的表达式，正常可以不用配置，如果想要刷掉某些数据可以配置这个。
     */
    nextCondition?: SchemaExpression;
    reload?: SchemaReload;
    redirect?: string;
}
export interface CopyActionSchema extends ButtonSchema {
    /**
     * 指定为复制内容行为
     */
    actionType: 'copy';
    /**
     * 复制啥内容由此配置，支持模板语法。
     */
    copy: SchemaTpl;
}
export interface LinkActionSchema extends ButtonSchema {
    /**
     * 指定为打开链接行为，跟 url 不同的时这个行为为单页模式。
     */
    actionType: 'link';
    /**
     * 跳转到哪？支持配置相对路径。
     */
    link: string;
}
export interface ReloadActionSchema extends ButtonSchema {
    /**
     * 指定为刷新目标组件。
     */
    actionType: 'reload';
    /**
     * 指定目标组件。
     */
    target?: SchemaReload;
}
export interface OtherActionSchema extends ButtonSchema {
    actionType: 'prev' | 'next' | 'cancel' | 'close' | 'submit' | 'confirm' | 'add';
    [propName: string]: any;
}
export interface VanillaAction extends ButtonSchema {
    actionType?: string;
}
/**
 * 按钮动作渲染器。
 * 文档：https://baidu.gitee.io/amis/docs/components/action
 */
export declare type ActionSchema = AjaxActionSchema | UrlActionSchema | LinkActionSchema | DialogActionSchema | DrawerActionSchema | CopyActionSchema | ReloadActionSchema | OtherActionSchema | VanillaAction;
import { ClassNamesFn, ThemeProps } from '../theme';
import { BaseSchema, SchemaApi, SchemaClassName, SchemaExpression, SchemaIcon, SchemaReload, SchemaTooltip, SchemaTpl } from '../Schema';
import { DialogSchemaBase } from './Dialog';
import { DrawerSchemaBase } from './Drawer';
export interface ActionProps extends ButtonSchema, ThemeProps, AjaxActionSchema, UrlActionSchema, LinkActionSchema, DialogActionSchema, DrawerActionSchema, CopyActionSchema, ReloadActionSchema, OtherActionSchema {
    actionType: any;
    onAction?: (e: React.MouseEvent<any> | void | null, action: ActionSchema) => void;
    isCurrentUrl?: (link: string) => boolean;
    onClick?: (e: React.MouseEvent<any>, props: any) => void;
    componentClass: React.ReactType;
    tooltipContainer?: any;
    data?: any;
    isMenuItem?: boolean;
    active?: boolean;
}
export declare class Action extends React.Component<ActionProps> {
    static defaultProps: {
        type: "button";
        componentClass: React.ElementType<any>;
        tooltipPlacement: "bottom";
        activeClassName: string;
    };
    dom: any;
    handleAction(e: React.MouseEvent<any>): void;
    render(): JSX.Element;
}
declare const _default: {
    new (props: (Pick<ActionProps, string | number> & {
        theme?: string | undefined;
        className?: string | undefined;
        classPrefix?: string | undefined;
        classnames?: ClassNamesFn | undefined;
    }) | Readonly<Pick<ActionProps, string | number> & {
        theme?: string | undefined;
        className?: string | undefined;
        classPrefix?: string | undefined;
        classnames?: ClassNamesFn | undefined;
    }>): {
        render(): JSX.Element;
        context: any;
        setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
        forceUpdate(callback?: (() => void) | undefined): void;
        readonly props: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }> & Readonly<{
            children?: React.ReactNode;
        }>;
        state: Readonly<{}>;
        refs: {
            [key: string]: React.ReactInstance;
        };
        componentDidMount?(): void;
        shouldComponentUpdate?(nextProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, nextState: Readonly<{}>, nextContext: any): boolean;
        componentWillUnmount?(): void;
        componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
        getSnapshotBeforeUpdate?(prevProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, prevState: Readonly<{}>): any;
        componentDidUpdate?(prevProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, prevState: Readonly<{}>, snapshot?: any): void;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, nextState: Readonly<{}>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, nextState: Readonly<{}>, nextContext: any): void;
    };
    new (props: Pick<ActionProps, string | number> & {
        theme?: string | undefined;
        className?: string | undefined;
        classPrefix?: string | undefined;
        classnames?: ClassNamesFn | undefined;
    }, context: any): {
        render(): JSX.Element;
        context: any;
        setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
        forceUpdate(callback?: (() => void) | undefined): void;
        readonly props: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }> & Readonly<{
            children?: React.ReactNode;
        }>;
        state: Readonly<{}>;
        refs: {
            [key: string]: React.ReactInstance;
        };
        componentDidMount?(): void;
        shouldComponentUpdate?(nextProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, nextState: Readonly<{}>, nextContext: any): boolean;
        componentWillUnmount?(): void;
        componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
        getSnapshotBeforeUpdate?(prevProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, prevState: Readonly<{}>): any;
        componentDidUpdate?(prevProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, prevState: Readonly<{}>, snapshot?: any): void;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, nextState: Readonly<{}>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<Pick<ActionProps, string | number> & {
            theme?: string | undefined;
            className?: string | undefined;
            classPrefix?: string | undefined;
            classnames?: ClassNamesFn | undefined;
        }>, nextState: Readonly<{}>, nextContext: any): void;
    };
    displayName: string;
    contextType: React.Context<string>;
    ComposedComponent: typeof Action;
} & import("hoist-non-react-statics").NonReactStatics<typeof Action, {}> & {
    ComposedComponent: typeof Action;
};
export default _default;
export declare class ActionRenderer extends React.Component<RendererProps & Omit<ActionProps, 'onAction' | 'isCurrentUrl' | 'tooltipContainer'> & {
    onAction: (e: React.MouseEvent<any> | void | null, action: object, data: any) => void;
    btnDisabled?: boolean;
}> {
    handleAction(e: React.MouseEvent<any> | void | null, action: any): void;
    isCurrentAction(link: string): boolean;
    render(): JSX.Element;
}
export declare class ButtonRenderer extends ActionRenderer {
}
export declare class SubmitRenderer extends ActionRenderer {
}
export declare class ResetRenderer extends ActionRenderer {
}
