import { VNode, RefMap, A11yTreeShapeOptions } from './types'; import { ResolvedA11yConfig } from './config'; /** * 递归将 DOM 元素转换为 VNode 中间表示 * @param el 当前 DOM 元素 * @param refCounter 引用计数器(使用对象引用避免全局可变状态) * @param refMap ref 索引 → 元素映射 * @param blacklistSet 已解析的黑名单元素集合 * @param whitelistSet 已解析的白名单元素集合 * @param config 已与默认值合并的统一无障碍配置 * @param hoverPointerSet 只在 :hover/:focus/:active 下声明 cursor:pointer 的元素集合(静止态读不到手势,靠样式表扫描兜底) */ export declare function buildVNode(el: Element, refCounter: { value: number; }, refMap: RefMap, blacklistSet: Set, whitelistSet: Set, config: ResolvedA11yConfig, hoverPointerSet?: Set): VNode | null; /** * 判断 VNode 子树是否包含任何有价值的节点(有 ref 或有 accessible name) * 用于过滤空容器子树,避免输出无内容的嵌套层级 */ export declare function hasValue(vnode: VNode): boolean; /** * 判断节点是否需要透明穿透(跳过本节点但保留子节点) * * 统一规则:无 ref(非交互)且无 accessible name → 穿透 * 这样可以同时: * - 去掉 generic/list/listitem 等纯布局噪音(无 name 时穿透) * - 保留有 name 的 listitem(有 name 时保留,兼顾内容理解场景) */ export declare function shouldPassThrough(vnode: VNode, opts: A11yTreeShapeOptions): boolean; /** * 将 VNode 序列化为 YAML 行数组 * 穿透节点时,子节点在当前 depth 平铺输出(不增加缩进层级) * * 文本折叠规则(Static-Lift + Interactive-Keep,保字优先): * 1. 子树全静态 → 省略子节点,文字保留在父节点 * 2. 混合子树 → 静态文案上提到父 name(成功才省略静态子节点);交互分支递归保留; * 禁止把交互文案并入父 name;上提失败则静态子节点独立输出,绝不丢字 */ export declare function serializeVNode(vnode: VNode, depth: number, opts: A11yTreeShapeOptions): string[];