import type { VNodeChild } from "vue"; import type { XyOptionValue, XySemanticClassNames, XySemanticStyles } from "../core"; export type XyTreeKey = XyOptionValue; export interface XyTreeNode { [key: string]: unknown; checkable?: boolean; children?: XyTreeNode[]; disableCheckbox?: boolean; disabled?: boolean; icon?: string; isLeaf?: boolean; key?: XyTreeKey; selectable?: boolean; title?: number | string; } export interface XyTreeFieldNames { children: string; key: string; title: string; } export type XyTreeFilterNode = (node: XyTreeNode) => boolean; export type XyTreeLoadData = (node: XyTreeNode) => Promise | void; export type XyTreeDraggable = boolean | ((node: XyTreeNode) => boolean); export type XyTreeDropPosition = -1 | 0 | 1; export interface XyTreeDropInfo { dragNode: XyTreeNode; dropNode: XyTreeNode; dropPosition: XyTreeDropPosition; } export type XyTreeAllowDrop = (info: XyTreeDropInfo) => boolean; export type XyTreeSemanticDom = "checkbox" | "dragHandle" | "empty" | "icon" | "loading" | "node" | "nodeContent" | "root" | "switcher"; export interface XyTreeProps { allowDrop?: XyTreeAllowDrop; ariaLabel?: string; autoExpandParent?: boolean; blockNode?: boolean; checkable?: boolean; checkStrictly?: boolean; checkedKeys?: XyTreeKey[]; classNames?: XyTreeClassNames; defaultCheckedKeys?: XyTreeKey[]; defaultExpandAll?: boolean; defaultExpandedKeys?: XyTreeKey[]; defaultSelectedKeys?: XyTreeKey[]; disabled?: boolean; draggable?: XyTreeDraggable; expandedKeys?: XyTreeKey[]; fieldNames?: Partial; filterTreeNode?: XyTreeFilterNode; height?: number; loadData?: XyTreeLoadData; loadedKeys?: XyTreeKey[]; multiple?: boolean; selectable?: boolean; selectedKeys?: XyTreeKey[]; showIcon?: boolean; showLine?: boolean; styles?: XyTreeStyles; treeData?: XyTreeNode[]; virtual?: boolean; } export type XyTreeClassNames = XySemanticClassNames; export type XyTreeStyles = XySemanticStyles; export interface XyTreeNodeSlotProps { checked: boolean; disabled: boolean; expanded: boolean; halfChecked: boolean; loading: boolean; node: XyTreeNode; selected: boolean; } export interface XyTreeSlots { empty?: () => VNodeChild; icon?: (props: XyTreeNodeSlotProps) => VNodeChild; node?: (props: XyTreeNodeSlotProps) => VNodeChild; switcher?: (props: XyTreeNodeSlotProps) => VNodeChild; } export interface XyTreeExpose { nativeElement: HTMLElement | undefined; scrollTo: (options: { align?: "auto" | "bottom" | "center" | "top"; key: XyTreeKey; offset?: number; }) => void; }