122 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
import type { ExtractPropTypes, PropType } from 'vue';
 | 
						|
import PropTypes from '../_util/vue-types';
 | 
						|
import type { SizeType } from '../config-provider';
 | 
						|
import type { VueNode } from '../_util/type';
 | 
						|
import { stringType } from '../_util/type';
 | 
						|
import type {
 | 
						|
  ChangeEventHandler,
 | 
						|
  CompositionEventHandler,
 | 
						|
  FocusEventHandler,
 | 
						|
  KeyboardEventHandler,
 | 
						|
  MouseEventHandler,
 | 
						|
} from '../_util/EventInterface';
 | 
						|
import type { InputStatus } from '../_util/statusUtils';
 | 
						|
import type { InputFocusOptions } from './utils/commonUtils';
 | 
						|
export const inputDefaultValue = Symbol() as unknown as string;
 | 
						|
export const commonInputProps = () => {
 | 
						|
  return {
 | 
						|
    addonBefore: PropTypes.any,
 | 
						|
    addonAfter: PropTypes.any,
 | 
						|
    prefix: PropTypes.any,
 | 
						|
    suffix: PropTypes.any,
 | 
						|
    clearIcon: PropTypes.any,
 | 
						|
    affixWrapperClassName: String,
 | 
						|
    groupClassName: String,
 | 
						|
    wrapperClassName: String,
 | 
						|
    inputClassName: String,
 | 
						|
    allowClear: { type: Boolean, default: undefined },
 | 
						|
  };
 | 
						|
};
 | 
						|
export const baseInputProps = () => {
 | 
						|
  return {
 | 
						|
    ...commonInputProps(),
 | 
						|
    value: {
 | 
						|
      type: [String, Number, Symbol] as PropType<string | number>,
 | 
						|
      default: undefined,
 | 
						|
    },
 | 
						|
    defaultValue: {
 | 
						|
      type: [String, Number, Symbol] as PropType<string | number>,
 | 
						|
      default: undefined,
 | 
						|
    },
 | 
						|
    inputElement: PropTypes.any,
 | 
						|
    prefixCls: String,
 | 
						|
    disabled: { type: Boolean, default: undefined },
 | 
						|
    focused: { type: Boolean, default: undefined },
 | 
						|
    triggerFocus: Function as PropType<() => void>,
 | 
						|
    readonly: { type: Boolean, default: undefined },
 | 
						|
    handleReset: Function as PropType<MouseEventHandler>,
 | 
						|
    hidden: { type: Boolean, default: undefined },
 | 
						|
  };
 | 
						|
};
 | 
						|
export const inputProps = () => ({
 | 
						|
  ...baseInputProps(),
 | 
						|
  id: String,
 | 
						|
  placeholder: {
 | 
						|
    type: [String, Number] as PropType<string | number>,
 | 
						|
  },
 | 
						|
  autocomplete: String,
 | 
						|
  type: stringType<
 | 
						|
    | 'button'
 | 
						|
    | 'checkbox'
 | 
						|
    | 'color'
 | 
						|
    | 'date'
 | 
						|
    | 'datetime-local'
 | 
						|
    | 'email'
 | 
						|
    | 'file'
 | 
						|
    | 'hidden'
 | 
						|
    | 'image'
 | 
						|
    | 'month'
 | 
						|
    | 'number'
 | 
						|
    | 'password'
 | 
						|
    | 'radio'
 | 
						|
    | 'range'
 | 
						|
    | 'reset'
 | 
						|
    | 'search'
 | 
						|
    | 'submit'
 | 
						|
    | 'tel'
 | 
						|
    | 'text'
 | 
						|
    | 'time'
 | 
						|
    | 'url'
 | 
						|
    | 'week'
 | 
						|
  >('text'),
 | 
						|
  name: String,
 | 
						|
  size: { type: String as PropType<SizeType> },
 | 
						|
  autofocus: { type: Boolean, default: undefined },
 | 
						|
  lazy: { type: Boolean, default: true },
 | 
						|
  maxlength: Number,
 | 
						|
  loading: { type: Boolean, default: undefined },
 | 
						|
  bordered: { type: Boolean, default: undefined },
 | 
						|
  showCount: { type: [Boolean, Object] as PropType<boolean | ShowCountProps> },
 | 
						|
  htmlSize: Number,
 | 
						|
  onPressEnter: Function as PropType<KeyboardEventHandler>,
 | 
						|
  onKeydown: Function as PropType<KeyboardEventHandler>,
 | 
						|
  onKeyup: Function as PropType<KeyboardEventHandler>,
 | 
						|
  onFocus: Function as PropType<FocusEventHandler>,
 | 
						|
  onBlur: Function as PropType<FocusEventHandler>,
 | 
						|
  onChange: Function as PropType<ChangeEventHandler>,
 | 
						|
  onInput: Function as PropType<ChangeEventHandler>,
 | 
						|
  'onUpdate:value': Function as PropType<(val: string) => void>,
 | 
						|
  onCompositionstart: Function as PropType<CompositionEventHandler>,
 | 
						|
  onCompositionend: Function as PropType<CompositionEventHandler>,
 | 
						|
  valueModifiers: Object,
 | 
						|
  hidden: { type: Boolean, default: undefined },
 | 
						|
  status: String as PropType<InputStatus>,
 | 
						|
});
 | 
						|
export type InputProps = Partial<ExtractPropTypes<ReturnType<typeof inputProps>>>;
 | 
						|
 | 
						|
export interface ShowCountProps {
 | 
						|
  formatter: (args: { count: number; maxlength?: number; value?: string }) => VueNode;
 | 
						|
}
 | 
						|
 | 
						|
export interface InputRef {
 | 
						|
  focus: (options?: InputFocusOptions) => void;
 | 
						|
  blur: () => void;
 | 
						|
  setSelectionRange: (
 | 
						|
    start: number,
 | 
						|
    end: number,
 | 
						|
    direction?: 'forward' | 'backward' | 'none',
 | 
						|
  ) => void;
 | 
						|
  select: () => void;
 | 
						|
  input: HTMLInputElement | null;
 | 
						|
}
 |