import type { VNodeChild } from "vue"; import type { XyOverlayPlacement, XySemanticClassNames, XySemanticStyles } from "../core"; import type { XyMenuClassNames, XyMenuEntry, XyMenuLinkComponent, XyMenuStyles, XyMenuTheme, XyMenuTriggerSubMenuAction, XyMenuVariant } from "../menu"; export type XyDropdownPlacement = XyOverlayPlacement; export type XyDropdownTrigger = "click" | "contextMenu" | "contextmenu" | "focus" | "hover"; export interface XyDropdownArrowOptions { pointAtCenter?: boolean; } export type XyDropdownArrow = boolean | XyDropdownArrowOptions; export type XyDropdownOpenChangeSource = "menu" | "trigger"; export interface XyDropdownOpenChangeInfo { source: XyDropdownOpenChangeSource; } export interface XyDropdownMenu { accordion?: boolean; classNames?: XyMenuClassNames; defaultOpenKeys?: readonly string[]; defaultSelectedKeys?: readonly string[]; items: readonly XyMenuEntry[]; linkComponent?: XyMenuLinkComponent; multiple?: boolean; openKeys?: readonly string[]; selectable?: boolean; selectedKeys?: readonly string[]; styles?: XyMenuStyles; theme?: XyMenuTheme; triggerSubMenuAction?: XyMenuTriggerSubMenuAction; variant?: XyMenuVariant; } export type XyDropdownSemanticDom = "arrow" | "menu" | "popup" | "root"; export interface XyDropdownSemanticProps { arrow: boolean; disabled: boolean; hasPopup: boolean; open: boolean; placement: XyDropdownPlacement; triggers: readonly Exclude[]; } export type XyDropdownClassNames = XySemanticClassNames; export type XyDropdownStyles = XySemanticStyles; export interface XyDropdownProps { arrow?: XyDropdownArrow; autoAdjustOverflow?: boolean; block?: boolean; classNames?: XyDropdownClassNames; closeOnSelect?: boolean; defaultOpen?: boolean; destroyOnHidden?: boolean; disabled?: boolean; getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement | null | undefined; menu?: XyDropdownMenu; minWidth?: number | string; mouseEnterDelay?: number; mouseLeaveDelay?: number; open?: boolean; placement?: XyDropdownPlacement; styles?: XyDropdownStyles; teleport?: boolean; trigger?: XyDropdownTrigger | readonly XyDropdownTrigger[]; zIndex?: number; } export interface XyDropdownPopupSlotProps { close: (event?: Event) => void; menu: XyDropdownMenu; open: boolean; } export interface XyDropdownSlots { default?: () => VNodeChild; popup?: (props: XyDropdownPopupSlotProps) => VNodeChild; } export interface XyDropdownExpose { focus: () => boolean; hide: (event?: Event) => void; show: (event?: Event) => void; }