import type { ComputedRef } from "vue"; export type XyCollectionKey = string; export interface XyCollectionNode { children: Array>; index: number; indexPath: number[]; item: T; key: XyCollectionKey; keyPath: XyCollectionKey[]; level: number; parentKey: XyCollectionKey; } export interface XyCollectionOptions { getChildren?: (item: T) => readonly T[] | null | undefined; getKey?: (item: T, context: XyCollectionWalkContext) => string | undefined; isNode?: (item: T, context: XyCollectionWalkContext) => boolean; } export interface XyCollectionWalkContext { index: number; indexPath: number[]; level: number; parentKey: XyCollectionKey; parentKeyPath: XyCollectionKey[]; } export interface XyCollection { getChildrenKeys: (key: XyCollectionKey) => XyCollectionKey[]; getDescendantKeys: (key: XyCollectionKey) => XyCollectionKey[]; getKeyPath: (key: XyCollectionKey) => XyCollectionKey[]; getNode: (key: XyCollectionKey) => XyCollectionNode | undefined; getParentKey: (key: XyCollectionKey) => XyCollectionKey | undefined; getSiblingKeys: (key: XyCollectionKey) => XyCollectionKey[]; nodeMap: Map>; nodes: Array>; parentKeyMap: Map; rootNodes: Array>; } export interface XyCollectionRegistryNode { index?: number; item: T; key: XyCollectionKey; parentKey?: XyCollectionKey; } export interface XyCollectionRegistry { collection: ComputedRef>; nodes: ComputedRef>>; registerNode: (node: XyCollectionRegistryNode) => () => void; } export declare function createCollectionKeyPath(key: XyCollectionKey, parentKeyPath?: readonly XyCollectionKey[]): string[]; export declare function createCollection(items: readonly T[], options?: XyCollectionOptions): XyCollection; export declare function createCollectionRegistry(): XyCollectionRegistry;