/// <reference types="react" />
import { C, Cont, CmdCommon, Context } from './core';
export declare type RepeatProps<A> = {
    kind: "repeat";
    value: A;
    p: (_: A) => C<A>;
} & CmdCommon<A>;
export declare type AllProps<A> = {
    kind: "all";
    ps: Array<C<A>>;
} & CmdCommon<Array<A>>;
export declare type AnyProps<A, B> = {
    kind: "any";
    value: A;
    ps: Array<(_: A) => C<B>>;
    className: string;
} & CmdCommon<B>;
export declare type NeverProps<A, B> = {
    kind: "never";
    p: C<A>;
} & CmdCommon<B>;
export declare type RetractProps<A, B> = {
    kind: "retract";
    inb: (_: A) => B;
    out: (_: A) => (_: B) => A;
    p: (_: B) => C<B>;
    value: A;
} & CmdCommon<A>;
export declare type DelayProps<A> = {
    kind: "delay";
    dt: number;
    value: A;
    p: (_: A) => C<A>;
} & CmdCommon<A>;
export declare type WaitProps<A> = {
    kind: "wait";
    dt: number;
    value: A;
    p: (_: A) => C<A>;
} & CmdCommon<A>;
export declare type RetryStrategy<A> = "never" | "semi exponential" | {
    kind: "retry then show failure";
    times: number;
    on_failure: C<A>;
} | {
    kind: "never";
    on_failure: C<A>;
};
export declare type LiftPromiseProps<A, B> = {
    kind: "lift promise";
    p: (_: B) => Promise<A>;
    retry_strategy: RetryStrategy<A>;
    value: B;
} & CmdCommon<A>;
export declare type SimpleMenuType = "side menu" | {
    kind: "tabs";
    max_tabs: number;
};
export declare let repeat: <A>(key?: string, dbg?: () => string) => (p: (_: A) => C<A>) => (_: A) => C<A>;
export declare let any: <A, B>(key?: string, className?: string, dbg?: () => string) => (ps: ((_: A) => C<B>)[]) => (_: A) => C<B>;
export declare let never: <A, B>(p: C<A>, key?: string) => C<B>;
export declare let all: <A>(ps: C<A>[], key?: string, dbg?: () => string) => C<A[]>;
export declare let retract: <A, B>(key?: string, dbg?: () => string) => (inb: (_: A) => B, out: (_: A) => (_: B) => A, p: (_: B) => C<B>) => (_: A) => C<A>;
export declare let lift_promise: <A, B>(p: (_: A) => Promise<B>, retry_strategy: RetryStrategy<B>, key?: string, dbg?: () => string) => (_: A) => C<B>;
export declare let delay: <A>(dt: number, key?: string, dbg?: () => string) => (p: (_: A) => C<A>) => (_: A) => C<A>;
export declare let waiting: <A>(dt: number, key?: string, dbg?: () => string) => (p: (_: A) => C<A>) => (_: A) => C<A>;
export declare let mk_submenu_entry: <A>(label: string, children: MenuEntryValue<A>[]) => MenuEntrySubMenu<A>;
export declare let mk_menu_entry: <A>(v: A) => MenuEntryValue<A>;
export declare type MenuEntryValue<A> = {
    kind: "item";
    value: A;
};
export declare type MenuEntrySubMenu<A> = {
    kind: "sub menu";
    label: string;
    children: Array<MenuEntryValue<A>>;
};
export declare type MenuEntry<A> = MenuEntryValue<A> | MenuEntrySubMenu<A>;
export declare let simple_menu: <A, B>(type: SimpleMenuType, to_string: (_: A) => string, key?: string, dbg?: () => string) => (items: MenuEntry<A>[], p: (_: A) => C<B>, selected_item?: A, selected_sub_menu?: string) => C<B>;
export declare let custom: <A>(key?: string, dbg?: () => string) => (render: (ctxt: () => Context) => (_: Cont<A>) => JSX.Element) => C<A>;
export declare let hide: (f_name: string, f: C<void>) => C<void>;
