import { DomSource } from '@motorcycle/dom'; import { VNode } from 'mostly-dom'; import { IOComponent, Stream } from '@motorcycle/types'; /** * Sources type expected by a DOM component. * @name DomSources * @example * export type DomSources = { readonly dom: DomSource } * @type */ export declare type DomSources = { readonly dom: DomSource; }; /** * Sinks type returns by a DOM component. * @name DomSinks * @example * export type DomSinks = { readonly view$: Stream } * @type */ export declare type DomSinks = { readonly view$: Stream; }; /** * Takes an element and returns a DOM component function. * * @name makeDomComponent(element: Element): (sinks: DomSinks) => DomSources * @example * import { * makeDomComponent, * DomSources, * DomSinks, * VNode, * events, * query, * div, * h1, * button * } from '@motorcycle/mostly-dom' * import { run } from '@motorcycle/run' * * const element = document.querySelector('#app') * * if (!element) throw new Error('unable to find element') * * run(Main, makeDomComponent(element)) * * function Main(sources: DomSources): DomSinks { * const { dom } = sources * * const click$: Stream = events('click', query('button')) * * const amount$: Stream = scan(x => x + 1, 0, click$) * * const view$: Stream = map(view, amount$) * * return { view$ } * } * * function view(amount: number) { * return div([ * h1(`Clicked ${amount} times`), * button(`Click me`) * ]) * } */ export declare function makeDomComponent(element: Element): IOComponent;