import { EventEmitter } from '../../stencil-public-runtime';
export interface CascaderOption {
    value: string | number;
    label: string;
    children?: CascaderOption[];
    disabled?: boolean;
    leaf?: boolean;
}
/**
 * Cascader 级联选择器组件
 * 当一个数据集合有清晰的层级结构时，可通过级联选择器逐级查看并选择
 */
export declare class Cascader {
    el: HTMLElement;
    /**
     * 选中项绑定值
     */
    modelValue?: (string | number)[];
    /**
     * 可选项数据源
     */
    options: CascaderOption[];
    /**
     * 输入框占位文本
     */
    placeholder: string;
    /**
     * 是否禁用
     * @default false
     */
    disabled: boolean;
    /**
     * 输入框尺寸
     */
    size: 'large' | 'default' | 'small';
    /**
     * 是否可清空
     * @default false
     */
    clearable: boolean;
    /**
     * 是否显示完整路径
     * @default true
     */
    showAllLevels: boolean;
    /**
     * 输入框的原生属性
     */
    name?: string;
    /**
     * 输入框的原生属性
     */
    inputId?: string;
    /**
     * 分隔符
     * @default ' / '
     */
    separator: string;
    /**
     * 是否动态加载子节点
     * @default true
     */
    emitPath: boolean;
    /**
     * 是否可搜索（filterable）
     * 开启后下拉顶部渲染搜索输入框，输入时按 label（含所有子级）扁平化过滤，
     * 匹配项以完整路径展示，点击即选中其完整路径。
     * @default false
     */
    filterable: boolean;
    /**
     * 是否开启动态加载（lazy load）。开启后，展开含 children=undefined 的节点时，
     * 调用 load(node) 获取其子级并填充进 options，加载中显示 loading 态。
     * @default false
     */
    lazy: boolean;
    /**
     * 动态加载子节点的函数（仅在 lazy=true 时生效）。
     * 接收被展开的节点，返回其子节点数组（Promise）。
     * 加载结果会以不可变方式合并进 options 树（替换该节点 children）。
     */
    load?: (node: CascaderOption) => Promise<CascaderOption[]>;
    isOpen: boolean;
    inputValue: string;
    searchValue: string;
    /**
     * 正在动态加载子级的节点 value 集合（用于渲染 loading 态）。
     */
    loadingKeys: Set<string | number>;
    /**
     * 扁平化搜索结果：每一项是一个从根到匹配节点的完整路径（用于点击选中）。
     * 仅在 filterable 且 searchValue 非空时使用。
     */
    filteredPaths: CascaderOption[][];
    activePath: (string | number)[];
    /**
     * 值改变事件
     */
    hbChange: EventEmitter<(string | number)[] | undefined>;
    /**
     * 展开节点发生变化时触发
     */
    hbExpandChange: EventEmitter<(string | number)[]>;
    private clickOutside;
    componentDidLoad(): void;
    /** 关闭下拉并清空搜索态（filterable 模式下避免重开时残留搜索结果） */
    private closeAndClearSearch;
    disconnectedCallback(): void;
    handleValueChange(): void;
    private updateInputValue;
    private findOptionByValue;
    private handleInputClick;
    /** 搜索输入：仅更新 searchValue，过滤在 render 前的 @State 派生 */
    private handleSearchInput;
    /**
     * 扁平化全树搜索：把 options 深度遍历，收集所有「节点 label 含关键字」的完整路径。
     * 一个节点的完整路径 = 从根到该节点（含自身）的 CascaderOption 数组。
     * 关键字为空时返回空数组（交由正常级联视图渲染）。
     *
     * 注意：这里按 label 子串匹配（大小写不敏感），匹配任意层级的节点，
     * 并保留其祖先链以便点击时还原完整路径。
     */
    private collectFilteredPaths;
    /** 从扁平搜索结果路径中点击叶子（或非叶子）项：直接以该路径的 value 数组作为选中值 */
    private handleSearchSelect;
    private handleClear;
    private handleSelect;
    /**
     * 动态加载某节点的子级。不可变地合并进 options 树（替换该节点 children）。
     * 加载中：把节点 value 加入 loadingKeys（渲染 loading 态）；
     * 加载完成：写入 children（新数组，触发 @Watch/重渲染），移出 loadingKeys。
     * 若 load 返回空数组，把 children 设为 [] 以标记该节点为叶子（避免重复加载）。
     */
    private loadChildren;
    /**
     * 不可变地替换 options 树中 value===targetValue 节点的 children 字段。
     * 返回一棵全新的 options 树（不修改原数组与原节点对象）。
     */
    private replaceOptionChildren;
    render(): any;
    private renderCascaderMenus;
    /** lazy 加载中渲染的面板：一个 loading 占位提示 */
    private renderLoadingMenu;
    /**
     * 渲染扁平化搜索结果：每一项展示完整路径（label 用 separator 连接），点击选中完整路径。
     * 无匹配时渲染空状态。
     */
    private renderSearchResults;
    private renderMenu;
}
