import { EventEmitter } from '../../stencil-public-runtime';
export interface TreeNode {
    /** 节点唯一标识 */
    key: string;
    /** 节点标题 */
    title: string;
    /** 子节点 */
    children?: TreeNode[];
    /** 是否禁用 */
    disabled?: boolean;
}
/**
 * Tree 树形组件
 * 文件夹、组织架构、分类导航等层级结构的展示与选择
 */
export declare class Tree {
    el: HTMLElement;
    /**
     * 可选项数据源（递归树结构）
     */
    data: TreeNode[];
    /**
     * （受控）展开的节点 key 集合
     */
    expandedKeys: string[];
    /**
     * （受控）选中的节点 key 集合
     */
    selectedKeys: string[];
    /**
     * 是否显示 checkbox 复选框
     * @default false
     */
    checkable: boolean;
    /**
     * （受控）勾选的节点 key 集合
     */
    checkedKeys: string[];
    /**
     * 是否默认展开全部节点
     * @default false
     */
    defaultExpandAll: boolean;
    /**
     * 是否显示连接线
     * @default false
     */
    showLine: boolean;
    internalExpanded: string[] | null;
    internalSelected: string[] | null;
    internalChecked: string[] | null;
    /**
     * 选中节点变化事件（detail: 选中节点 key 数组）
     */
    hbSelect: EventEmitter<string[]>;
    /**
     * 展开节点变化事件（detail: 展开节点 key 数组）
     */
    hbExpand: EventEmitter<string[]>;
    /**
     * 勾选节点变化事件（detail: 勾选节点 key 数组）
     */
    hbCheck: EventEmitter<string[]>;
    componentWillLoad(): void;
    /**
     * data 变化时，若 defaultExpandAll=true，把所有含 children 的节点 key
     * 合并进 expandedKeys（保留用户已手动展开的节点，不收起任何已展开项）。
     * 解决「先 mount 再赋 data」时 componentWillLoad 基于空数据计算导致不展开的问题。
     */
    handleDataChange(): void;
    handleExpandedKeysChange(): void;
    handleSelectedKeysChange(): void;
    handleCheckedKeysChange(): void;
    private collectExpandableKeys;
    private getExpandedKeys;
    private getSelectedKeys;
    private getCheckedKeys;
    private isExpanded;
    private isSelected;
    private isChecked;
    private handleToggleExpand;
    private handleSelect;
    private handleCheck;
    /**
     * 从集合中移除某节点所有后代 key（含禁用项），用于取消父级时级联取消。
     * 不可变：仅修改传入的 Set 副本，不修改树本身。
     */
    private removeDescendantKeys;
    /**
     * 收集某节点所有「可勾选（非禁用）」后代 key，用于勾选父级时级联勾选。
     * 注意：禁用子节点本身不可手动勾选，但若其下还有非禁用后代，仍应被级联勾选。
     */
    private collectCheckableDescendantKeys;
    /**
     * 自底向上修正 checkedKeys 中某节点的所有祖先勾选状态。
     * 规则：一个祖先节点，当且仅当其所有「非禁用子节点」均被勾选时，自身才被勾选；
     * 否则移出 checkedKeys（部分选情况由 indeterminate 集合在渲染层暴露，不进入 checkedKeys）。
     */
    private reconcileAncestors;
    /**
     * 递归查找某 key 的祖先链（不含自身），返回从直接父到根的数组。
     * 找不到返回空数组（key 为根节点或不存在时）。
     */
    private findAncestors;
    /**
     * 计算当前 checkedKeys 下处于「部分选中（indeterminate）」的节点 key 集合。
     * 一个节点为 indeterminate 当：其本身不在 checkedKeys，但其下（递归）存在被勾选的后代。
     * 用于渲染层暴露三方态（aria-checked="mixed" + class）。
     */
    private computeIndeterminateKeys;
    private renderNode;
    render(): any;
}
