import { StyleValue } from 'vue'


export interface ItemProps {
  [key: string]: any
}


export interface SelectOptionProps {
  disabled: string | ((data: ItemProps) => boolean)
}

export interface Props {
  
  width: string

  
  height: string

  
  modelValue: ItemProps[]

  
  selectdValue?: string | number

  
  valueKey?: string

  
  labelKey?: string

  
  customStyle?: any

  
  dragSort?: boolean

  
  isView?: boolean

  
  closeable?: boolean | ((item: ItemProps) => boolean)

  
  clearable?: boolean

  
  customTitle?: string

  
  selectedNum?: string

  
  props?: any

  
  virtual?: boolean

  
  itemHeight?: number

  
  infiniteScroll?: () => Promise<any>

  
  infiniteDisabled?: boolean

  
  hideHeader?: boolean
}

export interface Emits {
  
  (e: 'update:modelValue', value: ItemProps[]): void

  
  (e: 'update:selectdValue', value: string | number): void

  
  (e: 'select-item', value: ItemProps): void

  
  (e: 'item-remove', value: ItemProps): void

  
  (e: 'remove-all', value: ItemProps[]): void

  
  (e: 'sortEnd', oldData: any[], newData: any[], oldIndex: number, newIndex: number): void

  
  (e: 'update:infiniteDisabled', value: boolean): void
}

export interface Slots {
  
  header: {}

  
  default: {
    
    item: object
  }
}
