import { type HTMLAttributes, type InputTypeHTMLAttribute } from 'vue';
import { type DefaultProps } from '../config';
export type InputType = InputTypeHTMLAttribute | 'textarea' | 'digit';
export type InputAutoHeight = boolean | {
minHeight?: number;
maxHeight?: number;
};
export type InputTargetElement = HTMLInputElement | HTMLTextAreaElement;
export type InputModelModifiers = {
lazy?: true;
number?: true;
trim?: true;
};
export interface InputProps {
modelValue?: string | number | null;
modelModifiers?: InputModelModifiers;
clearable?: boolean;
showClearOnlyFocus?: boolean;
showCount?: boolean;
inlaid?: boolean;
borderless?: boolean;
focused?: boolean;
autoHeight?: InputAutoHeight;
validateEvent?: boolean;
showEye?: boolean;
precision?: number;
formatter?: (value: string, trigger: 'input' | 'change') => string;
type?: InputType;
disabled?: boolean;
readonly?: boolean;
maxlength?: number | string;
min?: number;
max?: number;
rows?: string | number;
placeholder?: string;
autofocus?: boolean;
autocomplete?: string;
inputmode?: HTMLAttributes['inputmode'];
enterkeyhint?: HTMLAttributes['enterkeyhint'];
spellcheck?: HTMLAttributes['spellcheck'];
autocorrect?: string;
autocapitalize?: string;
}
export declare const defaultInputProps: DefaultProps;
export interface InputSlots {
prepend?(props: Record): any;
append?(props: Record): any;
}
export interface InputEmits {
(e: 'input', value: string | number): void;
(e: 'update:modelValue', value: string | number): void;
(e: 'change', value: string | number): void;
(e: 'clear'): void;
(e: 'blur', event: FocusEvent): void;
(e: 'focus', event: FocusEvent): void;
(e: 'compositionstart', event: CompositionEvent): void;
(e: 'compositionupdate', event: CompositionEvent): void;
(e: 'compositionend', event: CompositionEvent): void;
}
export interface InputExpose {
focus: () => void;
blur: () => void;
}