import type { VNodeChild } from "vue"; import type { XyControlStatus, XyControlVariant, XyOptionValue, XyOverlayPlacement, XySemanticClassNames, XySemanticStyles, XySize } from "../core"; export interface XyTreeSelectNode { [key: string]: unknown; checkable?: boolean; children?: XyTreeSelectNode[]; disableCheckbox?: boolean; disabled?: boolean; isLeaf?: boolean; label: string; loading?: boolean; selectable?: boolean; value: XyOptionValue; } export type XyTreeSelectValue = string | number | boolean | XyOptionValue[]; export type XyTreeSelectCheckedStrategy = "all" | "child" | "parent"; export type XyTreeSelectFilterNode = (search: string, node: XyTreeSelectNode) => boolean; export type XyTreeSelectLoadData = (node: XyTreeSelectNode, path: XyTreeSelectNode[]) => Promise | void; export type XyTreeSelectSemanticDom = "arrow" | "checkbox" | "clear" | "dropdown" | "empty" | "loading" | "node" | "nodeContent" | "root" | "search" | "selection" | "switcher" | "tag" | "tree" | "trigger" | "value"; export interface XyTreeSelectProps { allowClear?: boolean; ariaLabel?: string; autoClearSearchValue?: boolean; autofocus?: boolean; classNames?: XyTreeSelectClassNames; defaultOpen?: boolean; disabled?: boolean; error?: string; filterTreeNode?: boolean | XyTreeSelectFilterNode; id?: string; label?: string; loadData?: XyTreeSelectLoadData; loading?: boolean; maxCount?: number; maxTagCount?: number; maxTagTextLength?: number; modelValue?: XyTreeSelectValue; multiple?: boolean; notFoundContent?: string; open?: boolean; placeholder?: string; placement?: XyOverlayPlacement; popupMatchSelectWidth?: boolean | number; readonly?: boolean; searchable?: boolean; searchPlaceholder?: string; showCheckedStrategy?: XyTreeSelectCheckedStrategy; showSearch?: boolean; size?: XySize; status?: XyControlStatus; styles?: XyTreeSelectStyles; treeCheckable?: boolean; treeCheckStrictly?: boolean; treeData?: XyTreeSelectNode[]; treeDefaultExpandAll?: boolean; treeDefaultExpandedKeys?: XyOptionValue[]; treeExpandedKeys?: XyOptionValue[]; treeLine?: boolean; variant?: XyControlVariant; } export type XyTreeSelectClassNames = XySemanticClassNames; export type XyTreeSelectStyles = XySemanticStyles; export interface XyTreeSelectNodeSlotProps { active: boolean; checked: boolean; disabled: boolean; expanded: boolean; halfChecked: boolean; loading: boolean; node: XyTreeSelectNode; path: XyTreeSelectNode[]; selected: boolean; } export interface XyTreeSelectSelectionSlotProps { label: string; multiple: boolean; node?: XyTreeSelectNode; remove?: () => void; value: XyOptionValue; } export interface XyTreeSelectSlots { empty?: () => VNodeChild; loading?: () => VNodeChild; node?: (props: XyTreeSelectNodeSlotProps) => VNodeChild; selection?: (props: XyTreeSelectSelectionSlotProps) => VNodeChild; suffix?: () => VNodeChild; switcher?: (props: XyTreeSelectNodeSlotProps) => VNodeChild; } export interface XyTreeSelectExpose { blur: () => void; focus: (options?: FocusOptions) => void; nativeElement: HTMLElement | undefined; }