import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue'
export type CalendarType =
  | 'date'
  | 'dates'
  | 'datetime'
  | 'week'
  | 'month'
  | 'daterange'
  | 'datetimerange'
  | 'weekrange'
  | 'monthrange'
export declare const calendarViewProps: {
  /**
   * 选中值，为 13 位时间戳或时间戳数组
   */
  modelValue: {
    type: PropType<number | number[] | null>
    required: true
  }
  /**
   * 日期类型
   */
  type: {
    type: PropType<CalendarType>
    default: CalendarType
  }
  /**
   * 最小日期，为 13 位时间戳
   */
  minDate: {
    type: NumberConstructor
    default: number
  }
  /**
   * 最大日期，为 13 位时间戳
   */
  maxDate: {
    type: NumberConstructor
    default: number
  }
  /**
   * 周起始天
   */
  firstDayOfWeek: {
    type: NumberConstructor
    default: number
  }
  /**
   * 日期格式化函数
   */
  formatter: PropType<CalendarFormatter>
  /**
   * type 为范围选择时有效，最大日期范围
   */
  maxRange: NumberConstructor
  /**
   * type 为范围选择时有效，选择超出最大日期范围时的错误提示文案
   */
  rangePrompt: StringConstructor
  /**
   * type 为范围选择时有效，是否允许选择同一天
   */
  allowSameDay: {
    type: BooleanConstructor
    default: boolean
  }
  showPanelTitle: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 选中日期所使用的当日内具体时刻
   */
  defaultTime: {
    type: PropType<string | string[]>
    default: string
  }
  /**
   * 可滚动面板的高度
   */
  panelHeight: {
    type: NumberConstructor
    default: number
  }
  /**
   * type 为 'datetime' 或 'datetimerange' 时有效，用于过滤时间选择器的数据
   */
  timeFilter: PropType<CalendarTimeFilter>
  /**
   * type 为 'datetime' 或 'datetimerange' 时有效，是否不展示秒修改
   */
  hideSecond: {
    type: BooleanConstructor
    default: boolean
  }
  /**
   * 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件，1.2.25版本起提供，仅微信小程序和支付宝小程序支持。
   */
  immediateChange: {
    type: BooleanConstructor
    default: boolean
  }
  customStyle: {
    type: PropType<string>
    default: string
  }
  customClass: {
    type: PropType<string>
    default: string
  }
}
export type CalendarViewProps = ExtractPropTypes<typeof calendarViewProps>
export type CalendarDayType = '' | 'start' | 'middle' | 'end' | 'selected' | 'same' | 'current'
export type CalendarDayItem = {
  date: number
  text?: number | string
  restFlag?: boolean
  topInfo?: string
  bottomInfo?: string
  floorText?: string
  type?: CalendarDayType
  disabled?: boolean
  day?: number | string
}
export type CalendarFormatter = (day: CalendarDayItem) => CalendarDayItem
export type CalendarTimeFilterOptionType = 'hour' | 'minute' | 'second'
export type CalendarTimeFilterOption = {
  type: CalendarTimeFilterOptionType
  values: CalendarItem[]
}
export type CalendarTimeFilter = (option: CalendarTimeFilterOption) => CalendarItem[]
export type CalendarItem = {
  label: string
  value: number
  disabled: boolean
}
export type CalendarViewExpose = {
  /**
   * 使当前日期或者选中日期滚动到可视区域
   */
  scrollIntoView: () => void
}
export type CalendarViewInstance = ComponentPublicInstance<CalendarViewExpose, CalendarViewProps>
