import { Component, CSSProperties } from 'vue'
import type { FormItemRule } from 'element-plus'
declare global {
    /**
     * input可用attr,用于代码提示,渲染不同输入组件时,需要的attr是不一样的
     * https://element-plus.org/zh-CN/component/input.html#input-属性
     */
    interface InputAttr {
        id?: string
        name?: string
        type?: string
        placeholder?: string
        maxlength?: string | number
        minlength?: string | number
        'show-word-limit'?: boolean
        clearable?: boolean
        'show-password'?: boolean
        disabled?: boolean
        size?: 'large' | 'default' | 'small'
        'prefix-icon'?: string | Component
        'suffix-icon'?: string | Component
        rows?: number
        border?: boolean
        autosize?: boolean | anyObj
        autocomplete?: string
        readonly?: boolean
        max?: string | number
        min?: string | number
        step?: string | number
        resize?: 'none' | 'both' | 'horizontal' | 'vertical'
        autofocus?: boolean
        form?: string
        label?: string
        tabindex?: string | number
        'validate-event'?: boolean
        'input-style'?: anyObj
        // DateTimePicker属性
        editable?: boolean
        'start-placeholder'?: string
        'end-placeholder'?: string
        'time-arrow-control'?: boolean
        format?: string
        'popper-class'?: string
        'range-separator'?: string
        'default-value'?: Date
        'default-time'?: Date | Date[]
        'value-format'?: string
        'unlink-panels'?: boolean
        'clear-icon'?: string | Component
        shortcuts?: { text: string; value: Date | Function }[]
        disabledDate?: Function
        cellClassName?: Function
        teleported?: boolean
        // select属性
        multiple?: boolean
        'value-key'?: string
        'collapse-tags'?: string
        'collapse-tags-tooltip'?: boolean
        'multiple-limit'?: number
        effect?: 'dark' | 'light'
        filterable?: boolean
        'allow-create'?: boolean
        'filter-method'?: Function
        remote?: false // 禁止使用远程搜索,如需使用请使用单独封装好的 remoteSelect 组件
        'remote-method'?: false
        'no-match-text'?: string
        'no-data-text'?: string
        'reserve-keyword'?: boolean
        'default-first-option'?: boolean
        'popper-append-to-body'?: boolean
        persistent?: boolean
        'automatic-dropdown'?: boolean
        'fit-input-width'?: boolean
        'tag-type'?: 'success' | 'info' | 'warning' | 'danger'
        params?: anyObj
        // 远程select属性
        pk?: string
        field?: string
        'remote-url'?: string
        showRefresh?:boolean
        // 图标选择器属性
        'show-icon-name'?: boolean
        placement?: string
        title?: string
        // 图片文件上传属性
        action?: string
        headers?: anyObj
        method?: string
        data?: anyObj
        'with-credentials'?: boolean
        'show-file-list'?: boolean
        drag?: boolean
        accept?: boolean
        'list-type'?: string
        'auto-upload'?: boolean
        limit?: number
        // editor属性
        height?: string
        mode?: string
        editorStyle?: CSSProperties
        style?: CSSProperties
        toolbarConfig?: anyObj
        editorConfig?: anyObj
        // 返回数据类型
        'data-type'?: string
        // 事件
        onPreview?: Function
        onRemove?: Function
        onSuccess?: Function
        onError?: Function
        onProgress?: Function
        onExceed?: Function
        onBeforeUpload?: Function
        onBeforeRemove?: Function
        onChange?: Function
        onInput?: Function
        onVisibleChange?: Function
        onRemoveTag?: Function
        onClear?: Function
        onBlur?: Function
        onFocus?: Function
        onCalendarChange?: Function
        onPanelChange?: Function
    }

    interface FormItemAttr {
        id?: string
        class?: string
        prop?: string | string[]
        'label-width'?: string | number
        required?: boolean
        rules?: FormItemRule | FormItemRule[]
        error?: string
        'show-message'?: boolean
        'inline-message'?: boolean
        size?: 'large' | 'default' | 'small'
        style?: CSSProperties
        'block-help'?: string
    }
}
