import * as React from 'react' import { Stream, Subject, Subscription } from './xs' import { $ } from './fantasy/typeclasses' import * as PropTypes from 'prop-types'; export const XREACT_ENGINE = '@reactive-react/xreact.engine'; export interface Actions { [propName: string]: (...v: any[]) => T } export interface Plan { (intent: Subject, props?: Xprops): Machine } export interface Update { (current: S): Partial } export interface Machine { actions?: Actions, update$: $> } export interface ConfiguredMachine { actions?: Actions, update$: $> } export interface Xprops { actions?: Actions history?: boolean [propName: string]: any; } export class Xcomponent extends React.PureComponent, S> { machine: ConfiguredMachine subscription: Subscription context: ContextEngine } export interface XcomponentClass { displayName: string contextTypes?: ContextType defaultProps?: any new(props: Xprops, context: ContextEngine): Xcomponent; } export interface History { path: Subject number> history: $ } export interface Stamp { value: S time: number } export interface Engine { intent$: Subject history$: Subject } export interface ContextEngine { [name: string]: Engine } export interface ContextType { [name: string]: PropTypes.Requireable> }