import { VNode } from 'vue'; import { Placement } from '@floating-ui/vue'; export interface SelectOption { label: string; value: string; disabled?: boolean; green?: boolean; } export type RenderLabelFunc = (option: SelectOption) => VNode; export type CustomFilterFunc = (value: string) => SelectOption[]; export type CustomFilterRemoteFunc = (value: string) => Promise; export interface SelectProps { modelValue: string; options?: SelectOption[]; placement?: Placement; placeholder?: string; disabled?: boolean; green?: boolean; clearable?: boolean; renderLabel?: RenderLabelFunc; filterable?: boolean; filterMethod?: CustomFilterFunc; remote?: boolean; remoteMethod?: CustomFilterRemoteFunc; } export interface SelectStates { inputValue: string; selectedOption: null | SelectOption; mouseHover: boolean; loading: boolean; highlightIndex: number; } export interface SelectEmits { (e: 'change', value: string): void; (e: 'update:modelValue', value: string): void; (e: 'visible-change', value: boolean): void; (e: 'clear'): void; }