import type { URI } from '@difizen/mana-common';
import type { TreeNode, CompositeTreeNode } from '../tree/tree';
import type { ExpandableTreeNode } from '../tree/tree-expansion';
import { TreeImpl } from '../tree/tree-impl';
import type { SelectableTreeNode } from '../tree/tree-selection';
import type { FileSelection } from './file-selection';
import { FileService } from './file-service';
import type { URINode } from './file-tree-protocol';
import type { FileStat, FileType, Stat } from './files';
export declare class FileTree extends TreeImpl {
    protected readonly fileService: FileService;
    constructor(fileService: FileService);
    resolveChildren(raw: CompositeTreeNode): Promise<TreeNode[]>;
    protected resolveFileStat(node: FileStatNode): Promise<FileStat | undefined>;
    protected toNodes(fileStat: FileStat, parent: CompositeTreeNode): Promise<TreeNode[]>;
    protected toNode(fileStat: FileStat, parent: CompositeTreeNode): FileNode | DirNode;
    protected toNodeId(uri: URI, _parent: CompositeTreeNode): string;
}
export interface FileStatNode extends SelectableTreeNode, URINode, FileSelection {
}
export declare namespace FileStatNode {
    function is(node: object | undefined): node is FileStatNode;
    function getUri(node: TreeNode | undefined): string | undefined;
}
export type FileStatNodeData = Omit<FileStatNode, 'uri' | 'fileStat'> & {
    uri: string;
    stat?: Stat | ({
        type: FileType;
    } & Partial<Stat>);
    fileStat?: FileStat;
};
export declare namespace FileStatNodeData {
    function is(node: object | undefined): node is FileStatNodeData;
}
export type FileNode = FileStatNode;
export declare namespace FileNode {
    function is(node: Record<any, any> | undefined): node is FileNode;
}
export type DirNode = FileStatNode & ExpandableTreeNode;
export declare namespace DirNode {
    function is(node: Record<any, any> | undefined): node is DirNode;
    function compare(node: TreeNode, node2: TreeNode): number;
    function uriCompare(node: TreeNode, node2: TreeNode): number;
    function dirCompare(node: TreeNode, node2: TreeNode): number;
    function createRoot(fileStat: FileStat, rootVisible: boolean): DirNode;
    function getContainingDir(node: TreeNode | undefined): DirNode | undefined;
}
//# sourceMappingURL=file-tree.d.ts.map