import type { ArkmeSourceItem } from '../types.js'; export type ArkmeSourceTreeSort = 'latest' | 'most' | 'custom'; export interface ArkmeSourceTreeNode { source: ArkmeSourceItem; children: ArkmeSourceTreeNode[]; } export interface ArkmeSourceTreeRow { source: ArkmeSourceItem; depth: number; hasChildren: boolean; expanded: boolean; } /** Return the complete visible hierarchy for a topic, from its root to itself. */ export declare function arkmeTopicPathNames(selectedSource: ArkmeSourceItem | undefined, sources: readonly ArkmeSourceItem[]): string[]; /** A hierarchy move may not create a cycle or exceed the five-level topic limit. */ export declare function canMoveArkmeTopicToParent(source: ArkmeSourceItem, nextParent: ArkmeSourceItem | undefined, sources: readonly ArkmeSourceItem[]): boolean; /** Build a stable tree while keeping paged children hidden until their known parent arrives. */ export declare function buildArkmeSourceTree(sources: ArkmeSourceItem[]): ArkmeSourceTreeNode[]; /** * Sort peers only, preserving every parent-child relationship. `custom` uses * the server's persisted sibling order, with the legacy name order as fallback. */ export declare function sortArkmeSourceTree(roots: readonly ArkmeSourceTreeNode[], sort: ArkmeSourceTreeSort): ArkmeSourceTreeNode[]; /** Total every topic from its direct records plus every descendant exactly once. */ export declare function aggregateArkmeSourceTreeRecordCounts(roots: readonly ArkmeSourceTreeNode[]): ReadonlyMap; export declare function flattenVisibleArkmeSourceTree(roots: ArkmeSourceTreeNode[], collapsedSourceRefs: ReadonlySet): ArkmeSourceTreeRow[]; //# sourceMappingURL=source-tree.d.ts.map