/**
 * A basic virtual-node representing a primitive type (typically text-nodes)
 * @typedef {(string|number)} VNodePrimitive
 * @category VDOM
 */

/**
 * Type of a virtual node, this is usally the string-tag but may refer to the CustomElement class, or a function
 * @typedef {string|null|Object|Function} VNodeType
 * @category VDOM
 **/

/**
 * Properties of a virtual-node.
 * @typedef {Object.<string, any>} VNodeProps
 * @category VDOM
 **/

/**
 * A tree of virtual-nodes (e.g, type,props,attr and nested children)
 * @typedef VNodeTree
 * @interface
 * @category VDOM
 * @property {VNodeType} type - TagName or CustomElement of the html-element
 * @property {VNodeProps} props - Properties to set on the element
 * @property {VNodeChildren} children - Children of the element
 **/

/**
 * Children a VNode tree (these may contain nested VNode-arrays)
 * @typedef {Array.<VNode|VNodeChildren>} VNodeChildren
 * @category VDOM
 **/

/**
 * Any virtual-node that may be rendered to DOM
 * @typedef {VNodeTree|VNodePrimitive|undefined|Element} VNode
 * @category VDOM
 **/