export interface VNodeData { // modules - use any because Object type is useless props?: any; attrs?: any; class?: any; style?: any; dataset?: any; on?: any; hero?: any; // end of modules hook?: Hooks; key?: string | number; ns?: string; // for SVGs fn?: () => VNode; // for thunks args?: Array; // for thunks } export interface VNode { sel: string; data?: VNodeData; children?: Array; elm?: Element | Text; text?: string; key?: string | number; } export interface ThunkData extends VNodeData { fn: () => VNode; args: Array; } export interface Thunk extends VNode { data: ThunkData; } export type PreHook = () => any; export type InitHook = (vNode: VNode) => any; export type CreateHook = (emptyVNode: VNode, vNode: VNode) => any; export type InsertHook = (vNode: VNode) => any; export type PrePatchHook = (oldVNode: VNode, vNode: VNode) => any; export type UpdateHook = (oldVNode: VNode, vNode: VNode) => any; export type PostPatchHook = (oldVNode: VNode, vNode: VNode) => any; export type DestroyHook = (vNode: VNode) => any; export type RemoveHook = (vNode: VNode, removeCallback: () => void) => any; export type PostHook = () => any; export interface Hooks { pre?: PreHook; init?: InitHook; create?: CreateHook; insert?: InsertHook; prepatch?: PrePatchHook; update?: UpdateHook; postpatch?: PostPatchHook; destroy?: DestroyHook; remove?: RemoveHook; post?: PostHook; } export interface Module { pre?: PreHook; create?: CreateHook; update?: UpdateHook; destroy?: DestroyHook; remove?: RemoveHook; post?: PostHook; } export interface SnabbdomAPI { createElement(tagName: string): T; createElementNS(namespaceURI: string, qualifiedName: string): T; createTextNode(text: string): T; insertBefore(parentNode: T, newNode: T, referenceNode: T): void; removeChild(node: T, child: T): void; appendChild(node: T, child: T): void; parentNode(node: T): T; nextSibling(node: T): T; tagName(node: T): string; setTextContent(node: T, text: string): void; } declare module "snabbdom" { export interface PatchFunction { (oldVNode: VNode, vnode: VNode): VNode; } export function init(modules: Object, api?: SnabbdomAPI): PatchFunction; } declare module "snabbdom/vnode" { export default function vnode(sel: string, data: VNodeData, children: Array, text: string, elm: any): VNode; } declare module "snabbdom/is" { export function array(x: any): boolean; export function primitive(x: any): boolean; } declare module "snabbdom/thunk" { export default function thunk(sel: string, key: string, render: (...state: Array) => VNode, ...state: Array): Thunk; } declare module "snabbdom/htmldomapi" { let api: SnabbdomAPI; export = api; } declare module "snabbdom/modules/class" { let ClassModule: Module; export = ClassModule; } declare module "snabbdom/modules/props" { let PropsModule: Module; export = PropsModule; } declare module "snabbdom/modules/attributes" { let AttrsModule: Module; export = AttrsModule; } declare module "snabbdom/modules/eventlisteners" { let EventsModule: Module; export = EventsModule; } declare module "snabbdom/modules/hero" { let HeroModule: Module; export = HeroModule; } declare module "snabbdom/modules/style" { let StyleModule: Module; export = StyleModule; } declare module "snabbdom/modules/dataset" { let DatasetModule: Module; export = DatasetModule; }