type DateType = 'date' | 'dateTime' | 'week' | 'month' | 'quarter' | 'year' | 'time'
type DateRangeType = 'dateRange' | 'dateTimeRange' | 'weekRange' | 'monthRange' | 'yearRange' | 'timeRange'
export type FormType =
  | 'input'
  | 'textarea'
  | 'password'
  | 'select'
  | 'treeSelect'
  | 'radio'
  | 'checkbox'
  | 'switch'
  | 'custom'
  | DateType
  | DateRangeType
  | 'cascader'
  | 'colorPicker'
  | 'selectInput'
  | 'inputDialogSelect'
  | 'inputNumber'


export interface Props {
  
  labelLength?: number | string

  
  label?: string

  
  labelPosition?: 'left' | 'right' | 'top'

  
  modelValue?: any

  
  optionValue?: any

  
  type?: FormType

  
  required?: boolean

  
  isView?: boolean

  
  disabled?: boolean

  
  contentWidth?: number | string

  
  alignItems?: string

  
  marginBottom?: string

  
  marginRight?: string

  
  options?: any

  
  optionsLabelKey?: string | number | object

  
  optionsValueKey?: string | number

  
  error?: string

  
  errorMode?: 'default' | 'overlay'

  
  helpMessage?: string

  
  col?: number

  
  rules?: any

  
  tooltipAttrs?: any

  
  labelMarginRight?: string

  
  showColon?: boolean

  
  errorModelZIndex?: number
}

export interface Slots {
  
  default: {}

  
  helpContent: {}

  
  suffix: {}

  
  prefix: {}

  
  prepend: {}

  
  append: {}
}

export interface Emits {
  
  (e: 'update:modelValue', value: any): void

  
  (e: 'update:optionValue', value: any): void

  
  (e: 'update:error', value: string): void

  
  (e: 'change', value: any, value2?: any): void

  
  (e: 'input', value: any): void

  
  (e: 'select-change', value: any): void
}

export type Exposes = {
  
  $treeSelect: {}
  
  $cascader: {}
}


export interface FormProps {
  
  labelLength?: number | string

  
  contentWidth?: number | string

  
  labelPosition?: 'left' | 'right' | 'top'

  
  alignType?: 'vertical' | 'horizontal'

  
  alignItems?: string

  
  marginBottom?: string

  
  marginRight?: string

  
  cols?: number

  
  rules?: any

  
  labelMarginRight?: string

  
  isSearchForm?: boolean

  
  errorMode?: 'default' | 'overlay'
}
