// Type definitions for iview 3.3.1
// Project: https://github.com/iview/iview
// Definitions by: yangdan
// Definitions: https://github.com/yangdan8/iview.git
import Vue, { VNode } from 'vue';

export declare class Select extends Vue {
  /**
   * 指定选中项目的 value 值，可以使用 v-model 双向绑定数据。
   * 单选时只接受 String 或 Number，多选时只接受 Array
   * @default 空
   */
  value?: string | number | string[] | number[];
  /**
   * 是否支持多选
   * @default false
   */
  multiple?: boolean;
  /**
   * 是否禁用
   * @default false
   */
  disabled?: boolean;
  /**
   * 是否可以清空选项，只在单选时有效
   * @default false
   */
  clearable?: boolean;
  /**
   * 是否支持搜索
   * @default false
   */
  filterable?: boolean;
  /**
   * 是否使用远程搜索
   * @default false
   */
  remote?: boolean;
  /**
   * 远程搜索的方法
   */
  'remote-method'?: () => void;
  /**
   * 当前是否正在远程搜索
   * @default false
   */
  loading?: boolean;
  /**
   * 远程搜索中的文字提示
   * @default 加载中
   */
  'loading-text'?: string;
  /**
   * 仅在 remote 模式下，初始化时使用。因为仅通过 value 无法得知选项的 label，需手动设置。默认值空
   */
  label?: string | number | string[] | number[];
  /**
   * 选择框大小，可选值为large、small、default或者不填
   */
  size?: '' | 'large' | 'small' | 'default';
  /**
   * 选择框默认文字
   * @default 请选择
   */
  placeholder?: string;
  /**
   * 当下拉列表为空时显示的内容
   * @default 无匹配数据
   */
  'not-found-text'?: string;
  /**
   * 在返回选项时，是否将 label 和 value 一并返回，默认只返回
   * @default false
   */
  'label-in-value'?: boolean;
  /**
   * 弹窗的展开方向，可选值为 top、bottom、top-start、bottom-start、top-end、bottom-end
   * @default bottom-start
   */
  placement?: 'bottom' | 'top' | 'top-start' | 'bottom-start' | 'top-end' | 'bottom-end';
  /**
   * 是否将弹层放置于 body 内，在 Tabs、带有 fixed 的 Table 列内使用时，
   * 建议添加此属性，它将不受父级样式影响，从而达到更好的效果
   * @default false
   */
  transfer?: boolean;
  /**
   * 给表单元素设置 id，详见 Form 用法。
   */
  'element-id'?: string;
  /**
   * 开启 transfer 时，给浮层添加额外的 class 名称
   */
  'transfer-class-name'?: string;
  /**
   * 在 Select 内显示图标
   */
  prefix?: string;
  /**
   * 多选时最多显示多少个 tag
   */
  'max-tag-count'?: number;
  /**
   * 隐藏 tag 时显示的内容，参数是剩余项数量
   */
  'max-tag-placeholder'?: () => any;
  /**
   * 选中的Option变化时触发，默认返回 value，如需返回 label，详见 label-in-value 属性	当前选中项
   */
  $emit(eventName: 'on-change'): this;
  /**
   * 搜索词改变时触发,query
   */
  $emit(eventName: 'on-query-change', query: string): this;
  /**
   * 搜索词改变时触发,query
   */
  $emit(eventName: 'on-clear'): this;
  /**
   * 搜索词改变时触发,query
   */
  $emit(eventName: 'on-open-change', params: boolean): this;
  /**
   * 设置搜索词，为空时清空，仅在 filterable="true" 时有效
   */
  setQuery(query: string): void;
  /**
   * 清空单选项，仅在 clearable="true" 时有效
   */
  clearSingleSelect(): void;
  /**
   * slot插槽对象
   */
  $slots: {
    /**
     * 自定义 Select 内头部图标
     */
    prefix: VNode[];
  };
}

export declare class Option extends Vue {
  /**
   * 选项值，默认根据此属性值进行筛选，必填
   */
  value?: string | number;
  /**
   * 选项显示的内容，默认会读取 slot，无 slot 时，优先读取该 label 值，
   * 无 label 时，读取 value。当选中时，选择器会显示 label 为已选文案。
   * 大部分情况不需要配置此项，直接写入 slot 即可，在自定义选项时，该属性非常有用。
   */
  label?: string;
  /**
   * 是否禁用当前项
   * @default false
   */
  disabled?: boolean;
}

export declare class OptionGroup extends Vue {
  /**
   * 分组的组名
   * @default 空
   */
  label?: string;
}