import { Hooks } from './hooks'; import { AttachData } from './helpers/attachto' import { VNodeStyle } from './modules/style' import { On } from './modules/eventlisteners' import { Attrs } from './modules/attributes' import { Classes } from './modules/class' import { Props } from './modules/props' import { Dataset } from './modules/dataset' import { Hero } from './modules/hero' export type Key = string | number; export interface VNode { sel: string | undefined; data: VNodeData | undefined; children: Array | undefined; elm: Node | undefined; text: string | undefined; key: Key | undefined; } export interface VNodeData { props?: Props; attrs?: Attrs; class?: Classes; style?: VNodeStyle; dataset?: Dataset; on?: On; hero?: Hero; attachData?: AttachData; hook?: Hooks; key?: Key; ns?: string; // for SVGs fn?: () => VNode; // for thunks args?: any[]; // for thunks [key: string]: any; // for any other 3rd party module } export function vnode (sel: string | undefined, data: any | undefined, children: Array | undefined, text: string | undefined, elm: Element | Text | undefined): VNode { const key = data === undefined ? undefined : data.key; return { sel, data, children, text, elm, key }; } export default vnode;