import type { TextChipVariant } from "~shared/components/info/TextChip.vue";
export declare const enum TreeNodeRightLabelVariant {
    PRIMARY = "primary",
    PLAIN = "plain"
}
export interface TreeAction {
    id: string;
    icon: string;
    disabled?: boolean;
    showOnHover?: boolean;
    tooltip?: string;
    onClick?: () => void;
}
export interface TreeChip {
    label: string;
    variant?: TextChipVariant;
    border?: boolean;
    size?: "xs" | "sm" | "md";
    onClick?: () => void;
}
export interface TreeRightLabel {
    label: string;
    variant?: TreeNodeRightLabelVariant;
    onClick?: () => void;
}
export interface TreeNode<MetaT = any> {
    id: string;
    icon?: string;
    label: string;
    chips?: TreeChip[];
    rightLabel?: TreeRightLabel;
    actions?: TreeAction[];
    highlightedStrings?: string[];
    /**
     * if disabled, unable to click on main body, unable to expand/collapse, but can click on action buttons
     */
    disabled?: boolean;
    /**
     * if false, the node cannot be dragged
     */
    draggable?: boolean;
    /**
     * add padding to the left, so that can align with draggable node, should be used with undraggable node
     */
    alignDrag?: boolean;
    onClick?: () => void;
    meta?: MetaT;
}
export interface TreeNodeProps {
    node: TreeNode;
    expanded?: boolean;
    selected?: boolean;
}
export interface TreeNodeWithChildren<MetaT = any> extends TreeNode<MetaT> {
    parent?: TreeNodeWithChildren<MetaT>;
    children?: TreeNodeWithChildren<MetaT>[];
}
export interface TreeData {
    nodes: TreeNodeWithChildren[];
    selectedNodeId: string | null | undefined;
    expandedNodeIds?: string[];
    /**
     * if provided, will use this function to determine if the node can be dropped
     * @param draggedNodeId
     * @param targetNodeId
     * @param dragPosition
     * @returns
     */
    canDropFn?: (draggedNodeId: string, targetNodeId: string, dragPosition: "before" | "after" | "inside") => boolean;
}
export interface DragDropEvent {
    draggedNodeId: string;
    targetNodeId: string;
    dragPosition: "before" | "after" | "inside";
}
