import type { VNodeChild } from "vue"; import type { XyControlStatus, XyControlVariant, XyOverlayPlacement, XySemanticClassNames, XySemanticStyles, XySize } from "../core"; export interface XyAutoCompleteOption { [key: string]: unknown; disabled?: boolean; group?: string; label: string; value: string; } export type XyAutoCompleteFilterOption = (search: string, option: XyAutoCompleteOption) => boolean; export type XyAutoCompleteSemanticDom = "clear" | "dropdown" | "empty" | "input" | "loading" | "option" | "root"; export interface XyAutoCompleteSemanticProps { disabled: boolean; loading: boolean; open: boolean; readonly: boolean; size: XySize; status?: XyControlStatus; variant: XyControlVariant; } export type XyAutoCompleteClassNames = XySemanticClassNames; export type XyAutoCompleteStyles = XySemanticStyles; export interface XyAutoCompleteProps { allowClear?: boolean; ariaLabel?: string; autocomplete?: string; autofocus?: boolean; classNames?: XyAutoCompleteClassNames; defaultActiveFirstOption?: boolean; defaultOpen?: boolean; disabled?: boolean; filterOption?: boolean | XyAutoCompleteFilterOption; id?: string; loading?: boolean; maxlength?: number; minlength?: number; modelValue?: string; name?: string; open?: boolean; openOnFocus?: boolean; options?: readonly XyAutoCompleteOption[]; placeholder?: string; placement?: XyOverlayPlacement; popupMatchInputWidth?: boolean | number; readonly?: boolean; size?: XySize; status?: XyControlStatus; styles?: XyAutoCompleteStyles; variant?: XyControlVariant; } export interface XyAutoCompleteOptionSlotProps { active: boolean; disabled: boolean; option: XyAutoCompleteOption; selected: boolean; } export interface XyAutoCompleteSlots { empty?: () => VNodeChild; loading?: () => VNodeChild; option?: (props: XyAutoCompleteOptionSlotProps) => VNodeChild; prefix?: () => VNodeChild; suffix?: () => VNodeChild; } export interface XyAutoCompleteExpose { blur: () => void; focus: (options?: FocusOptions) => void; input: HTMLInputElement | undefined; }