import { Controller, Dispatcher, MetaManager, PageRenderer, type Utils, type UnknownParameters, type UnknownPromiseParameters, type PageData as BasePageData, type RouteOptions, type Settings } from '@ima/core';
import * as Helpers from '@ima/helpers';
import { ComponentType, ReactElement } from 'react';
import * as react from 'react';
import * as reactDOM from 'react-dom/server';
import { PageRendererFactory } from './PageRendererFactory';
import { ViewAdapterProps } from '../component/ViewAdapter';
export type PageData = {
    documentView?: ComponentType;
    documentViewProps?: {
        $Utils: Utils;
        metaManager: MetaManager;
    };
    react?: typeof react;
    reactDOM?: typeof reactDOM;
    viewAdapter?: ReactElement;
} & BasePageData;
/**
 * Base class for implementations of the {@linkcode PageRenderer} interface.
 */
export declare abstract class AbstractPageRenderer extends PageRenderer {
    protected _dispatcher: Dispatcher;
    protected _factory: PageRendererFactory;
    protected _helpers: typeof Helpers;
    protected _settings: Settings;
    protected _viewAdapter?: ComponentType;
    protected _viewAdapterProps: UnknownParameters;
    /**
     * Initializes the abstract page renderer.
     *
     * @param factory Factory for receive $Utils to view.
     * @param helpers The IMA.js helper methods.
     *        to render the page.
     * @param dispatcher Dispatcher fires events to app.
     * @param settings Application settings for the current
     *        application environment.
     */
    constructor(factory: PageRendererFactory, helpers: typeof Helpers, dispatcher: Dispatcher, settings: Settings);
    /**
     * @inheritDoc
     */
    abstract mount(controller: Controller, pageView: ComponentType, pageResources: UnknownPromiseParameters, routeOptions: RouteOptions): Promise<void | PageData>;
    /**
     * @inheritDoc
     */
    abstract update(controller: Controller, pageView: ComponentType, pageResources: UnknownPromiseParameters): Promise<void | PageData>;
    /**
     * @inheritDoc
     */
    abstract unmount(): void;
    /**
     * @inheritDoc
     */
    abstract setState(pageState: UnknownParameters): Promise<void>;
    /**
     * @inheritDoc
     */
    _getViewAdapterElement(props?: {}): ReactElement<{}, string | react.JSXElementConstructor<any>> | undefined;
    /**
     * Generate properties for view from state.
     *
     * @param view The page view React component to wrap.
     */
    protected _generateViewAdapterProps(managedRootView: ComponentType, pageView: ComponentType, state?: UnknownParameters): ViewAdapterProps;
    /**
     * Returns wrapped page view component with managed root view and view adapter.
     *
     * @param routeOptions The current route options.
     */
    protected _prepareViewAdapter(controller: Controller, pageView: ComponentType, routeOptions: RouteOptions): void;
    /**
     * Returns the class constructor of the specified document view component.
     *
     * @param routeOptions The current route options.
     * @return The constructor of the document view component.
     */
    protected _getDocumentView(routeOptions: RouteOptions): ComponentType;
}
//# sourceMappingURL=AbstractPageRenderer.d.ts.map