import { placements } from '@popperjs/core' import { definePropType, isValidComponentSize } from '@element-plus/utils' import { useTooltipContentProps } from '@element-plus/components/tooltip' import { CircleClose } from '@element-plus/icons-vue' import type { Component, PropType } from 'vue' import type { ComponentSize } from '@element-plus/constants' import type { OptionType } from './select.types' import type { Options, Placement } from '@element-plus/components/popper' export const SelectProps = { allowCreate: Boolean, autocomplete: { type: String as PropType<'none' | 'both' | 'list' | 'inline'>, default: 'none', }, automaticDropdown: Boolean, clearable: Boolean, clearIcon: { type: [String, Object] as PropType, default: CircleClose, }, effect: { type: String as PropType<'light' | 'dark' | string>, default: 'light', }, collapseTags: Boolean, collapseTagsTooltip: { type: Boolean, default: false, }, defaultFirstOption: Boolean, disabled: Boolean, estimatedOptionHeight: { type: Number, default: undefined, }, filterable: Boolean, filterMethod: Function, height: { type: Number, default: 170, // 5 items by default }, itemHeight: { type: Number, default: 34, }, id: String, loading: Boolean, loadingText: String, label: String, modelValue: [Array, String, Number, Boolean, Object] as PropType< any[] | string | number | boolean | Record | any >, multiple: Boolean, multipleLimit: { type: Number, default: 0, }, name: String, noDataText: String, noMatchText: String, remoteMethod: Function, reserveKeyword: { type: Boolean, default: true, }, options: { type: Array as PropType, required: true, }, placeholder: { type: String, }, teleported: useTooltipContentProps.teleported, persistent: { type: Boolean, default: true, }, popperClass: { type: String, default: '', }, popperOptions: { type: Object as PropType>, default: () => ({} as Partial), }, remote: Boolean, size: { type: String as PropType, validator: isValidComponentSize, }, valueKey: { type: String, default: 'value', }, scrollbarAlwaysOn: { type: Boolean, default: false, }, validateEvent: { type: Boolean, default: true, }, placement: { type: definePropType(String), values: placements, default: 'bottom-start', }, } export const OptionProps = { data: Array, disabled: Boolean, hovering: Boolean, item: Object, index: Number, style: Object, selected: Boolean, created: Boolean, }