import { ControllerDecorator, Dispatcher, Window, type UnknownPromiseParameters, type RouteOptions, type Settings } from '@ima/core';
import * as Helpers from '@ima/helpers';
import { ComponentType } from 'react';
import { AbstractPageRenderer, PageData } from './AbstractPageRenderer';
import { PageRendererFactory } from './PageRendererFactory';
/**
 * Client-side page renderer. The renderer attempts to reuse the markup sent by
 * server if possible.
 */
export declare abstract class AbstractClientPageRenderer extends AbstractPageRenderer {
    private _hydrated;
    private _mounted;
    private _syncMounted;
    private _renderedOnChange;
    private _lastRendered;
    /**
     * Flag signalling that the page is being rendered for the first time.
     */
    private _window;
    /**
     * The HTML element containing the current application view for the
     * current route.
     */
    protected _viewContainer?: Element;
    /**
     * Initializes the client-side page renderer.
     *
     * @param factory Factory for receive $Utils to view.
     * @param helpers The IMA.js helper methods.
     * @param dispatcher Dispatcher fires events to app.
     * @param settings The application setting for the
     *        current application environment.
     * @param window Helper for manipulating the global object
     *        (`window`) regardless of the client/server-side
     *        environment.
     */
    constructor(factory: PageRendererFactory, helpers: typeof Helpers, dispatcher: Dispatcher, settings: Settings, window: Window);
    /**
     * @inheritDoc
     */
    mount(controller: ControllerDecorator, pageView: ComponentType, pageResources: {
        [key: string]: Promise<unknown>;
    }, routeOptions: RouteOptions): Promise<void | PageData>;
    /**
     * @inheritDoc
     */
    update(controller: ControllerDecorator, pageView: ComponentType, resourcesUpdate: UnknownPromiseParameters): Promise<void | PageData>;
    unmount(): void;
    setState(pageState?: {}): Promise<void>;
    protected _getHydrateCallback(): () => Dispatcher;
    protected _getRenderCallback(): () => Dispatcher;
    protected _getUpdateCallback(pageState: unknown): () => void;
    /**
     * Show error to console in $Debug mode and re-throw that error
     * for other error handler.
     *
     * @throws {Error} Re-throws the handled error.
     */
    private _handleError;
    protected abstract _hydrateViewAdapter(): void;
    private _createMountedPromise;
    private _createRenderPromise;
    /**
     * Patch promise values to controller state.
     */
    private _patchPromisesToState;
    protected _runUnmountCallback(): void;
    /**
     * Batch patch promise values to controller state.
     */
    private _startBatchTransactions;
    protected abstract _renderViewAdapter(callback?: () => void, props?: unknown): void;
    /**
     * Renders the current route to DOM.
     *
     * @param routeOptions The current route options.
     */
    private _renderPageViewToDOM;
    /**
     * Separate promises and values from provided data map. Values will be use
     * for default page state. Promises will be patched to state after their
     * resolve.
     *
     * @param dataMap A map of data.
     * @return Return separated promises and other values.
     */
    private _separatePromisesAndValues;
}
//# sourceMappingURL=AbstractClientPageRenderer.d.ts.map