interface TreeTableProps {
  
  parentId?: string
  
  children?: string
  
  disabled?: string[] | Function[]
  
  hidden?: string | Function
  
  isLeaf?: string
  
  class?: string
}

export type LinkageType = 'first' | 'two' | 'three' | 'four' | 'five' | 'custom'

export interface Props {
  
  virtual?: boolean

  
  linkageType?: LinkageType

  
  keyword?: string

  
  loading?: boolean

  
  nodeKey?: string

  
  title?: string

  
  height?: string | number

  
  border?: boolean

  
  data: any[]

  
  fistLabel?: string

  
  checkboxLabels?: string[]

  
  allCheckboxNames?: string[]

  
  allCheckboxDisabled?: boolean[]

  
  checkboxNames?: string[]

  
  checkboxWidth?: string[]

  
  defaultExpandAll?: boolean

  
  props?: TreeTableProps

  
  isView?: boolean

  
  checkNum?: number

  
  twoLinkFirstCheck?: boolean

  
  emptyText?: string
}

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

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

  
  (e: 'all-check', value: any, index: number): void

  
  (e: 'item-check', value: any, data: any, index: number): void
}

export type Exposes = {
  $treeTableBody

  
  getTreeNodesMap: () => Record<any, any>

  
  setAllCheck: (val: any, index: number) => void

  
  setCheck: (val: any, data: any, index: number) => void

  
  linkAllCheck: (trueNum: number, falseNum: number, index: number) => void
}

export interface Slots {
  
  headerLeft: {}

  
  headerRight: {}

  
  icon: {}

  
  title: {}

  
  bodyLeft: {}

  
  bodyRight: {}
}
