You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import {Hooks} from './hooks';
|
|
|
|
export type Key = string | number;
|
|
|
|
export interface VNode {
|
|
sel: string | undefined;
|
|
data: VNodeData | undefined;
|
|
children: Array<VNode | string> | undefined;
|
|
elm: Node | undefined;
|
|
text: string | undefined;
|
|
key: Key;
|
|
}
|
|
|
|
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;
|
|
attachData?: any;
|
|
hook?: Hooks;
|
|
key?: Key;
|
|
ns?: string; // for SVGs
|
|
fn?: () => VNode; // for thunks
|
|
args?: Array<any>; // for thunks
|
|
[key: string]: any; // for any other 3rd party module
|
|
// end of modules
|
|
}
|
|
|
|
export function vnode(sel: string,
|
|
data: any | undefined,
|
|
children: Array<VNode | string> | undefined,
|
|
text: string | undefined,
|
|
elm: Element | Text | undefined): VNode {
|
|
let key = data === undefined ? undefined : data.key;
|
|
return {sel: sel, data: data, children: children,
|
|
text: text, elm: elm, key: key};
|
|
}
|
|
|
|
export default vnode;
|