export interface Props {
  
  type?: 'index' | 'selection' | 'custom-selection' | 'expand' | 'table-column'

  
  align?: string

  
  index?: ((index: number) => number) | number

  
  contentType?: 'span' | 'link' | Record<'statusColor', any>

  
  cellName?: string

  
  width?: string | number

  
  disabled?: string | ((row: any, column: any, index: number) => boolean)

  
  fixed?: 'left' | 'right' | boolean

  
  showOverflowTooltip?: boolean

  
  placeholder?: string

  
  required?: boolean

  
  columnFilter?: boolean

  
  columnFilterMultiple?: boolean

  
  columnFilterMode?: 'select' | 'input'

  
  filterDefaultVal?: any[]

  
  filterVal?: any[]

  
  filterKeywords?: string

  
  columnFilterAllowSearch?: boolean

  
  columnFilterAutoClearSearch?: boolean

  
  columnFilterOptions?: Array<{ text: string; value: any }> | (() => Promise<Array<{ text: string; value: any }>>)

  
  columnFilterLoaded?: boolean

  
  headerTips?: string
}

export interface Emits {
  
  (e: 'update:filterVal', val: any[]): void

  
  (e: 'update:filterKeywords', val: string): void

  
  (e: 'filter-visible-change', val: boolean): void

  
  (e: 'filter-confirm', val: any[] | Record<'value' | 'custom', any>, btnType: 'confirm' | 'reset'): void

  
  (e: 'click-link', row: any, column: any, $index: number): void
}
