import { ReactNode, TextareaHTMLAttributes, ChangeEvent } from 'react';
import { EventListenerHandler } from '@befe/brick-utils';
import { BaseSize, ConfiguredComponent } from '@befe/brick-core';
import { ResizeObserver } from '@juggle/resize-observer';
export declare const TEXTAREA_SIZES: readonly ["sm", "md"];
type TextareaSize = BaseSize;
type NativeTextareaProps = Omit, 'style' | 'defaultValue'>;
interface NodeStyleType {
boxSizing: string;
paddingSize: number;
borderSize: number;
sizingStyle: string;
}
export declare function getNodeStyle(node?: Element): NodeStyleType;
export interface TextareaProps extends NativeTextareaProps {
/**
* 自定义 class
*/
className?: string;
/**
* 输入值
*/
value?: string;
/**
* 默认值
*/
defaultValue?: string;
/**
* 尺寸
* use config context `baseSize` as default
*/
size?: TextareaSize;
/**
* 是否禁用
*/
disabled?: boolean;
/**
* 是否只读
*/
readOnly?: boolean;
/**
* 文本框状态
*/
status?: 'normal' | 'error';
/**
* @todo
* 提示内容,基本样式会跟随 status
*/
hint?: ReactNode;
/**
* 行数
*/
rows?: number;
/**
* 不提供列数
*/
/**
* 最小行数
*
* **注意** 设置了最小行数,即启用了高度自适应
*/
minRows?: number;
/**
* 最大行数
*/
maxRows?: number;
/**
* 最大输入长度,
*
* **注意** 仅做字数提示
*/
maxLength?: number;
/**
* 字数计数函数
*/
textCounter?: (value: string) => number;
/**
* @private 无提供必要性
* 是否允许溢出输入
*/
/**
* 值变化时的回调
*/
onChange?: (e: ChangeEvent) => void;
}
export declare class Textarea extends ConfiguredComponent {
static displayName: string;
static defaultProps: {
className: string;
defaultValue: string;
status: string;
rows: number;
};
elemTextarea: HTMLTextAreaElement;
shadowTextarea: HTMLTextAreaElement;
windowResizeHandler: EventListenerHandler | null;
textareaWrap: import("react").RefObject;
state: {
value: string | undefined;
singleRowHeight: number;
paddingSize: number;
borderSize: number;
minHeight: number;
maxHeight: number;
height: string;
overflowY: string;
};
resizeObserver: ResizeObserver;
static getDerivedStateFromProps(nextProps: TextareaProps): Partial | null;
get className(): string;
get size(): BaseSize;
get textCounter(): TextareaProps['textCounter'];
get currentCount(): number;
get remainingContent(): string;
componentDidMount(): void;
componentDidUpdate(prevProps: Readonly): void;
componentWillUnmount(): void;
refTextarea: (node: HTMLTextAreaElement) => void;
refShadowTextarea: (node: HTMLTextAreaElement) => void;
calculateNodeHeight: () => void;
resize(): void;
handleChange: (e: ChangeEvent, callback?: () => void) => void;
/**
* focus textarea element
* @public
*/
focus(): void;
/**
* blur textarea element
* @public
*/
blur(): void;
/**
* select textarea element
* @public
*/
select(): void;
renderTextarea(): import("react/jsx-runtime").JSX.Element;
renderShadowTextarea(): import("react/jsx-runtime").JSX.Element | null;
renderTextareaWrap(): import("react/jsx-runtime").JSX.Element;
renderWordCount(): import("react/jsx-runtime").JSX.Element | null;
renderHint(): import("react/jsx-runtime").JSX.Element;
render(): import("react/jsx-runtime").JSX.Element;
}
export {};