import type { UmbTreeItemModel, UmbTreeRootModel } from '../types.js';
import type { UmbTreeStore } from './tree-store.interface.js';
import type { UmbTreeRepository } from './tree-repository.interface.js';
import type { UmbTreeDataSource, UmbTreeDataSourceConstructor } from './tree-data-source.interface.js';
import type { UmbTreeAncestorsOfRequestArgs, UmbTreeChildrenOfRequestArgs, UmbTreeRootItemsRequestArgs } from './types.js';
import { UmbRepositoryBase, type UmbRepositoryResponse } from '../../repository/index.js';
import type { UmbControllerHost } from '../../../../libs/controller-api/index.js';
import type { UmbApi } from '../../../../libs/extension-api/index.js';
import type { UmbContextToken } from '../../../../libs/context-api/index.js';
/**
 * Base class for a tree repository.
 * @abstract
 * @class UmbTreeRepositoryBase
 * @augments {UmbRepositoryBase}
 * @implements {UmbTreeRepository}
 * @implements {UmbApi}
 * @template TreeItemType
 * @template TreeRootType
 */
export declare abstract class UmbTreeRepositoryBase<TreeItemType extends UmbTreeItemModel, TreeRootType extends UmbTreeRootModel, TreeRootItemsRequestArgsType extends UmbTreeRootItemsRequestArgs = UmbTreeRootItemsRequestArgs, TreeChildrenOfRequestArgsType extends UmbTreeChildrenOfRequestArgs = UmbTreeChildrenOfRequestArgs, TreeAncestorsOfRequestArgsType extends UmbTreeAncestorsOfRequestArgs = UmbTreeAncestorsOfRequestArgs> extends UmbRepositoryBase implements UmbTreeRepository<TreeItemType, TreeRootType, TreeRootItemsRequestArgsType, TreeChildrenOfRequestArgsType, TreeAncestorsOfRequestArgsType>, UmbApi {
    protected _init: Promise<unknown>;
    protected _treeStore?: UmbTreeStore<TreeItemType>;
    protected _treeSource: UmbTreeDataSource<TreeItemType>;
    /**
     * Creates an instance of UmbTreeRepositoryBase.
     * @param {UmbControllerHost} host - The controller host for this controller to be appended to
     * @param {UmbTreeDataSourceConstructor<TreeItemType>} treeSourceConstructor - The constructor for the tree data source
     * @param {(string | UmbContextToken<any, any> | undefined)} treeStoreContextAlias - The context alias for the tree store, if any
     * @memberof UmbTreeRepositoryBase
     */
    constructor(host: UmbControllerHost, treeSourceConstructor: UmbTreeDataSourceConstructor<TreeItemType>, treeStoreContextAlias?: string | UmbContextToken<any, any>);
    /**
     * Request the tree root item
     * @returns {*}
     * @memberof UmbTreeRepositoryBase
     */
    abstract requestTreeRoot(): Promise<UmbRepositoryResponse<TreeRootType>>;
    /**
     * Requests root items of a tree
     * @param args
     * @returns {*}
     * @memberof UmbTreeRepositoryBase
     */
    requestTreeRootItems(args: TreeRootItemsRequestArgsType): Promise<{
        data: import("../../repository/index.js").UmbTargetPagedModel<TreeItemType> | undefined;
        error: Error | import("../../resources/umb-error.js").UmbApiError | import("../../resources/umb-error.js").UmbCancelError | import("../../resources/umb-error.js").UmbError | undefined;
        asObservable: () => import("rxjs").Observable<TreeItemType[]> | undefined;
    }>;
    /**
     * Requests tree items of a given parent
     * @param {(string | null)} parentUnique
     * @param args
     * @returns {*}
     * @memberof UmbTreeRepositoryBase
     */
    requestTreeItemsOf(args: TreeChildrenOfRequestArgsType): Promise<{
        data: import("../../repository/index.js").UmbTargetPagedModel<TreeItemType> | undefined;
        error: Error | import("../../resources/umb-error.js").UmbApiError | import("../../resources/umb-error.js").UmbCancelError | import("../../resources/umb-error.js").UmbError | undefined;
        asObservable: () => import("rxjs").Observable<TreeItemType[]> | undefined;
    }>;
    /**
     * Requests ancestors of a given item
     * @param {UmbTreeAncestorsOfRequestArgs} args
     * @returns {*}
     * @memberof UmbTreeRepositoryBase
     */
    requestTreeItemAncestors(args: TreeAncestorsOfRequestArgsType): Promise<{
        data: TreeItemType[] | undefined;
        error: any;
    }>;
    /**
     * Returns a promise with an observable of tree root items
     * @returns {*}
     * @memberof UmbTreeRepositoryBase
     * @deprecated Use `requestTreeRootItems` instead. This method requires the tree store to be available, which is not always the case. It will be removed in Umbraco 18.
     */
    rootTreeItems(): Promise<import("rxjs").Observable<TreeItemType[]>>;
    /**
     * Returns a promise with an observable of children items of a given parent
     * @param {(string | null)} parentUnique
     * @returns {*}
     * @memberof UmbTreeRepositoryBase
     * @deprecated Use `requestTreeItemsOf` instead. This method requires the tree store to be available, which is not always the case. It will be removed in Umbraco 18.
     */
    treeItemsOf(parentUnique: string | null): Promise<import("rxjs").Observable<TreeItemType[]>>;
}
