import type { ViewModel, PageParams } from '../main/index.js';
import type { ViewRenderer } from './view.js';
import { Dictionary } from './dict.js';
import { Observer } from './observer.js';
import { type RawViewConfig } from './view.js';
export type PageOptionName = keyof PageOptions;
export type PageOptionRender = RawViewConfig | Page['render'];
export type PageOptions = {
    reuseEl: boolean;
    init(newPageEl: HTMLElement): void;
    render: PageOptionRender;
    keepScrollOffset: boolean;
    encodeParams(params: PageParams): [string, any][] | string;
    decodeParams(params: [string, string | boolean][]): Record<string, unknown>;
};
export type PageOptionsWithoutRender = Exclude<PageOptions, 'render'>;
export type Page = {
    name: string;
    render(el: HTMLElement, data: any, context: any): any;
    options?: Partial<PageOptions>;
    [CONFIG]?: any;
};
declare const CONFIG: unique symbol;
export declare class PageRenderer extends Dictionary<Page> {
    #private;
    lastPage: string | null;
    lastPageRef: string | number | null;
    pageOverscrolled: Observer<boolean>;
    setPageOverscroll: (el: HTMLElement) => void;
    constructor(host: ViewModel, view: ViewRenderer);
    define(name: string, options: PageOptions): Readonly<Page>;
    define(name: string, render: PageOptionRender, options?: PageOptionsWithoutRender): Readonly<Page>;
    render(prevPageEl: HTMLElement, name: string, data: any, context: any): {
        pageEl: HTMLElement;
        config: any;
        renderState: Promise<void>;
    };
}
export {};
