import type { TreeNode } from "./types.js"; export type TreeIndex = { byId: Record; parentIds: Record; }; /** One DFS over the tree. Both records have null prototypes because ids * come from statelog content. */ export declare function buildTreeIndex(root: TreeNode): TreeIndex; /** Every node under `root`, root included, parents before children. */ export declare function walkNodes(root: TreeNode, descend?: (node: TreeNode) => boolean): TreeNode[]; export declare function findNode(roots: TreeNode[], id: string): TreeNode | undefined; /** Nearest first, the trace root last. */ export declare function ancestorsOf(node: TreeNode, index: TreeIndex): TreeNode[]; export declare function nearestAncestor(node: TreeNode, index: TreeIndex, matches: (ancestor: TreeNode) => boolean): TreeNode | undefined; export declare function rootOf(node: TreeNode, index: TreeIndex): TreeNode; export type PlacedNode = { node: TreeNode; parent: TreeNode; depth: number; }; /** Descendants in forest order, omitting a skipped node and its subtree. */ export declare function walkWithDepth(root: TreeNode, skip?: (node: TreeNode) => boolean): PlacedNode[];