import { Component, ContextType, ReactNode, HTMLAttributes, MouseEvent, KeyboardEvent, KeyboardEventHandler } from 'react';
import { ConfigContext } from '@befe/brick-core';
export declare const SWITCH_SISES: readonly ["xs", "sm", "md"];
type SwitchSize = (typeof SWITCH_SISES)[number];
type SwitchPropsFromButton = Pick, 'onClick' | 'onMouseDown' | 'onBlur' | 'onFocus'>;
export interface SwitchProps extends SwitchPropsFromButton {
/**
* 自定义 class
*/
className?: string;
/**
* 尺寸
* use config context `baseSize` as default
*/
size?: SwitchSize;
/**
* on/off 状态控制值
*/
checked?: boolean;
/**
* on/off 状态默认值
*/
defaultChecked?: boolean;
/**
* 是否使用内建的 icon label
*/
iconLabel?: boolean;
/**
* on 状态的内容
*/
checkedLabel?: ReactNode;
/**
* off 状态的内容
*/
uncheckedLabel?: ReactNode;
/**
* 是否禁用
*/
disabled?: boolean;
/**
* 控制是否处于 loading 状态
* - loading spin icon 会根据 loadingDelay 延迟显示
* - loading 状态 click 立刻无效,但无 disabled 样式
*/
loading?: boolean;
/**
* loading 图标的延迟响应时间
* 单位 ms
* 0 为立即显示
*/
loadingDelay?: number;
/**
* checked 变化前的回调,根据返回值进行 checked 的变化
* - promise,当 promise resolve 后进行
* - false,visible 不进行
* - true | void,立即进行
*/
beforeChange?: (checked: boolean, e?: MouseEvent | KeyboardEvent) => Promise | boolean | void;
/**
* checked 变化时的回调
*/
onChange?: (checked: boolean, e?: MouseEvent | KeyboardEvent) => void;
}
interface SwitchState {
checked: boolean;
showLoading: boolean;
asyncLoading: boolean;
}
export declare class Switch extends Component {
static displayName: string;
static defaultProps: {
className: string;
defaultChecked: boolean;
loadingDelay: number;
};
static contextType: import("react").Context;
static getDerivedStateFromProps(nextProps: SwitchProps): Partial | null;
refButton: import("react").RefObject;
context: ContextType;
state: SwitchState;
showLoadingHandler: import("@befe/brick-utils").DelayHandler<[], void>;
get className(): string;
get size(): "xs" | "sm" | "md";
get checkedLabel(): {} | null;
get uncheckedLabel(): {} | null;
get isUncontrolledLoading(): boolean;
get isClickDisabled(): boolean;
handlerClick: (e: MouseEvent) => void;
handleKeyDown: KeyboardEventHandler;
changeChecked(checked: boolean, e?: MouseEvent | KeyboardEvent): void;
setAsyncLoading(loading: boolean): void;
setShowLoading(showLoading: boolean): void;
renderLabel(): import("react/jsx-runtime").JSX.Element | null;
renderLoading(): import("react/jsx-runtime").JSX.Element | null;
componentDidUpdate(prevProps: Readonly): void;
componentWillUnmount(): void;
render(): import("react/jsx-runtime").JSX.Element;
}
export {};