function cloneElement(vnode, props, children) {
	let normalizedProps = assign({}, vnode.props),
		key,
		ref,
		i;

	for (i in props) {
		if (i == 'key') key = props[i];
		else if (i == 'ref' && typeof vnode.type != 'function') ref = props[i];
		else normalizedProps[i] = props[i];
	}

	if (arguments.length > 2) {
		normalizedProps.children =
			arguments.length > 3 ? slice.call(arguments, 2) : children;
	}

	return createVNode(
		vnode.type,
		normalizedProps,
		key || vnode.key,
		ref || vnode.ref,
		NULL
	);
}
Clones the given VNode, optionally adding attributes/props and replacing its
children.
@param {import('./internal').VNode} vnode The virtual DOM element to clone
@param {object} props Attributes/props to add when cloning
@param {Array<import('./internal').ComponentChildren>} rest Any additional arguments will be used
as replacement children.
@returns {import('./internal').VNode}