import * as React from "react"; import * as Immutable from "immutable"; import * as Option from "./option"; import { C, Mode, Context } from './core'; export declare type UrlElement = string | { kind: "int"; name: K; }; export declare type UrlTemplate = Array>; export declare let parse_url: (template: UrlElement[]) => (url: string) => Option.Option; export declare let instantiate_url: (template: UrlElement[]) => (t: T) => string; export declare type Url = PartialRetraction; export declare let make_url: (template: UrlElement[]) => PartialRetraction; export declare let fallback_url: () => PartialRetraction; export declare type PartialRetraction = { in: (_: A) => Option.Option; out: (_: B) => A; }; export declare type Route = { url: Url; page: (_: A) => C; }; export declare type ApplicationProps = { mode: Mode; base_url: string; slug: string; routes: () => Promise>>; }; export declare type ApplicationState = { kind: "loading routes"; } | { kind: "running"; context: Context; routes: Immutable.List>; }; export declare class Application extends React.Component { constructor(props: ApplicationProps, context: any); load(): void; componentDidMount(): void; history: Immutable.Stack; context_from_props(props: ApplicationProps, p: C): Context; render(): JSX.Element; } export declare let application: (mode: Mode, base_url: string, slug: string, routes: () => Promise[]>) => JSX.Element; export declare let get_context: (key?: string, dbg?: () => string) => C; export declare let link_to_route: (label: string, x: T, r: Route, key?: string, className?: string) => C;