import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue'
import type { FormItemRule } from '../wd-form/types'
export declare const colPickerProps: {
  /**
   * 选中项
   */
  modelValue: {
    type: PropType<(string | number)[]>
    required: true
  }
  /**
   * 选择器数据，二维数组
   */
  columns: {
    type: PropType<Record<string, any>[][]>
    default: () => never[]
  }
  /**
   * 选择器左侧文案
   */
  label: StringConstructor
  /**
   * 设置左侧标题宽度
   */
  labelWidth: {
    type: PropType<string>
    default: string
  }
  /**
   * 使用 label 插槽时设置该选项
   */
  useLabelSlot: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 使用默认插槽时设置该选项
   */
  useDefaultSlot: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 禁用
   */
  disabled: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 只读
   */
  readonly: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 选择器占位符
   */
  placeholder: StringConstructor
  /**
   * 弹出层标题
   */
  title: StringConstructor
  /**
   * 接收当前列的选中项 item、当前列下标、当前列选中项下标下一列数据处理函数 resolve、结束选择 finish
   */
  columnChange: PropType<ColPickerColumnChange>
  /**
   * 自定义展示文案的格式化函数，返回一个字符串
   */
  displayFormat: PropType<ColPickerDisplayFormat>
  /**
   * 确定前校验函数，接收 (value, resolve) 参数，通过 resolve 继续执行 picker，resolve 接收 1 个 boolean 参数
   */
  beforeConfirm: PropType<ColPickerBeforeConfirm>
  /**
   * 选择器的值靠右展示
   */
  alignRight: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 是否为错误状态，错误状态时右侧内容为红色
   */
  error: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 是否必填
   */
  required: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 设置选择器大小，可选值：large
   */
  size: StringConstructor
  /**
   * 选项对象中，value 对应的 key
   */
  valueKey: {
    type: PropType<string>
    default: string
  }
  /**
   * 选项对象中，展示的文本对应的 key
   */
  labelKey: {
    type: PropType<string>
    default: string
  }
  /**
   * 选项对象中，提示文案对应的 key
   */
  tipKey: {
    type: PropType<string>
    default: string
  }
  /**
   * loading 图标的颜色
   */
  loadingColor: {
    type: PropType<string>
    default: string
  }
  /**
   * 点击遮罩是否关闭
   */
  closeOnClickModal: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 自动触发 column-change 事件来补全数据，当 columns 为空数组或者 columns 数组长度小于 value 数组长度时，会自动触发 column-change
   */
  autoComplete: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 弹窗层级
   */
  zIndex: {
    type: NumberConstructor
    default: number
  }
  /**
   * 弹出面板是否设置底部安全距离（iphone X 类型的机型）
   */
  safeAreaInsetBottom: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 是否超出隐藏
   */
  ellipsis: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 表单域 model 字段名，在使用表单校验功能的情况下，该属性是必填的
   */
  prop: StringConstructor
  /**
   * 表单验证规则，结合wd-form组件使用
   */
  rules: {
    type: PropType<FormItemRule[]>
    default: () => never[]
  }
  /**
   * 底部条宽度，单位像素
   */
  lineWidth: (NumberConstructor | StringConstructor)[]
  /**
   * 底部条高度，单位像素
   */
  lineHeight: (NumberConstructor | StringConstructor)[]
  /**
   * label 外部自定义样式
   */
  customViewClass: {
    type: PropType<string>
    default: string
  }
  /**
   * value 外部自定义样式
   */
  customLabelClass: {
    type: PropType<string>
    default: string
  }
  customValueClass: {
    type: PropType<string>
    default: string
  }
  customStyle: {
    type: PropType<string>
    default: string
  }
  customClass: {
    type: PropType<string>
    default: string
  }
}
export type ColPickerProps = ExtractPropTypes<typeof colPickerProps>
export type ColPickerColumnChangeOption = {
  selectedItem: Record<string, any>
  index: number
  rowIndex: number
  resolve: (nextColumn: Record<string, any>[]) => void
  finish: (isOk?: boolean) => void
}
export type ColPickerColumnChange = (option: ColPickerColumnChangeOption) => void
export type ColPickerDisplayFormat = (selectedItems: Record<string, any>[]) => string
export type ColPickerBeforeConfirm = (
  value: (string | number)[],
  selectedItems: Record<string, any>[],
  resolve: (isPass: boolean) => void,
) => void
export type ColPickerExpose = {
  close: () => void
  open: () => void
}
export type ColPickerInstance = ComponentPublicInstance<ColPickerExpose, ColPickerProps>
