import * as React from 'react'; import { ReactNode } from 'react'; import { Cmd, Dispatcher, Sub } from 'tea-cup-fp'; export declare class DispatchBridge { private d?; subscribe(d: Dispatcher): void; dispatch(msg: Msg): void; } export type SetModelFunc = (model: Model) => void; export declare class SetModelBridge { private sm; subscribe(sm: SetModelFunc): void; setModel(model: Model): void; } export type ProgramListener = (e: ProgramEvent) => void; export type ProgramEvent = { tag: 'init'; count: number; mac: [Model, Cmd]; } | { tag: 'update'; count: number; msg: Msg; mac: [Model, Cmd]; }; export interface ProgramInterop { dispatchBridge?: DispatchBridge; setModelBridge?: SetModelBridge; listener?: ProgramListener; paused?: () => boolean; } /** * The program props : asks for init, view, update and subs in order * to start the TEA MVU loop. */ export interface ProgramProps extends ProgramInterop { init: () => [Model, Cmd]; view: (dispatch: Dispatcher, model: Model) => ReactNode; update: (msg: Msg, model: Model) => [Model, Cmd]; subscriptions: (model: Model) => Sub; flushSyncDefault?: boolean; } /** * A React component that holds a TEA "program", implementing the MVU loop. */ export declare function Program(props: ProgramProps): React.ReactNode; export declare function needsFlush(defaultValue: boolean | undefined, flush: boolean | undefined): boolean;