import { ChangeEvent, MouseEvent, FocusEvent, FocusEventHandler } from 'react'; import { ConfiguredComponent } from '@befe/brick-core'; import { Input, InputProps } from '@befe/brick-comp-input'; type PropsFromInput = Pick; export interface NumInputProps extends PropsFromInput { /** * 自定义 class */ className?: string; /** * 控制值 */ value?: number | null; /** * 默认值 */ defaultValue?: number | null; /** * 值变化回调 */ onChange?: (value: number | null, e?: ChangeEvent | MouseEvent | FocusEvent) => void; /** * 步进操作的步长,优先级小于 stairStep * - undefined 时默认为 1,不推导 precision 的默认值 * - number,推导 precision 的默认值 */ step?: number; /** * 阶梯步进模式步长,优先级大于 step * * - step: 5 * - value: 8 step up 为 10 * - value: 8 step down 为 5 */ stairStep?: number; /** * 精度(小数位数) * * (暂定)参考原生 input * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number#Allowing_decimal_values * `props.precision` 如为 `undefined`,则根据 `props.step` / `props.stairStep` 的值进行推导 * - stairStep / step 为小数 -> precision 为小数位数 * - stairStep / step 为整数 -> precision 为 0 * - stairStep / step 为 undefined -> precision 不限制 */ precision?: number; /** * 最大值 * @default `Number.MAX_SAFE_INTEGER` */ max?: number; /** * 最小值 * @default `Number.MIN_SAFE_INTEGER` */ min?: number; /** * 千分分隔符,如不需要可设置为 `''` */ thousandSeparator?: string; /** * 类型 */ type?: 'normal' | 'intensive'; /** * 前缀 */ prefix?: string; /** * 后缀 */ suffix?: string; /** * 聚焦回调 */ onFocus?: FocusEventHandler; /** * 失焦回调 */ onBlur?: (e: FocusEvent, value: number | null) => void; /** * 开始显示 “数字单位” 的位数, * 0 为一直不显示 */ unitTipFrom?: number; } interface NumInputState { value: number | null; inputValue: string; pressingStep: boolean; } export declare function getValidValue(num: unknown, options?: { min?: number; max?: number; }): number | null; export declare class NumInput extends ConfiguredComponent { static displayName: string; static defaultProps: { className: string; defaultValue: null; type: string; thousandSeparator: string; max: number; min: number; unitTipFrom: number; }; static getDerivedStateFromProps(props: NumInputProps): { value: number | null; } | null; componentLocale: import("@befe/brick-core").ComponentLocale<{ zh_cn: { unit: (digit: number) => string; }; en_us: { unit: string; }; }>; state: NumInputState; refInput: import("react").RefObject; inFocus: boolean; inCompositing: boolean; rawInput: string; lastKeyDown: string | null; cursorSelectionStart: number | null; cursorSelectionEnd: number | null; cursorValue?: string; cursorBefore?: string; cursorAfter?: string; constructor(props: NumInputProps); get className(): string; get disabled(): boolean | undefined; get size(): "sm" | "md" | "xs" | "lg" | "xl"; get elemInput(): HTMLInputElement; get inputValue(): string; get inputProps(): { status: "normal" | "error" | undefined; value: string; onChange: ((e: ChangeEvent | FocusEvent) => void) | undefined; onFocus: FocusEventHandler | undefined; onBlur: FocusEventHandler | undefined; onCompositionStart: () => void; onCompositionEnd: () => void; onKeyDown: ((e: import("react").KeyboardEvent) => void) | undefined; onKeyUp: import("react").KeyboardEventHandler | undefined; suffix: import("react/jsx-runtime").JSX.Element; prefix: import("react/jsx-runtime").JSX.Element | null; prefixInnerPadding: number | undefined; suffixInnerPadding: number | undefined; size: "sm" | "md" | "xs" | "lg" | "xl"; ref: import("react").RefObject; disabled?: boolean | undefined; placeholder?: string | undefined; autoFocus?: boolean | undefined; readOnly?: boolean | undefined; }; get outOfRange(): boolean; get inputStatus(): "normal" | "error" | undefined; get step(): number | undefined; get precision(): number | undefined; get unit(): string; stepUp: (e: MouseEvent) => void; stepDown: (e: MouseEvent) => void; handleMouseDownStep: (e: MouseEvent) => void; handleMouseUpStep: (e: MouseEvent) => void; handleKeyDown: InputProps['onKeyDown']; handleKeyUp: InputProps['onKeyUp']; handleFocus: InputProps['onFocus']; handleBlur: InputProps['onBlur']; handleCompositionStart: () => void; handleCompositionEnd: () => void; handleChangeInput: InputProps['onChange']; parseNumber(value: string): string; getValidValue(value?: number | null): number | null; toPrecision(value?: number | null, precision?: number | undefined): string; changeValueByStep(direction: 1 | -1, e: MouseEvent): void; changeValue(value: number | null, e: ChangeEvent | MouseEvent | FocusEvent): void; setInFocus(inFocus: boolean): void; setInCompositing(inCompositing: boolean): void; saveCursor(): void; getPrecision(value?: number | null): number; toNumber(num: string): number | null; updateInputValueIfUnfocused(): void; setCursor(start: number, end: number): void; rePositionCursorByAfter(cursorAfter: string): boolean; rePositionCursor(): void; setInputAutoFocus(): void; renderInputSuffix(): import("react/jsx-runtime").JSX.Element; renderInputPrefix(): import("react/jsx-runtime").JSX.Element | null; componentDidUpdate(): void; render(): import("react/jsx-runtime").JSX.Element; } export {};