{"version":3,"file":"vnode.cjs","sources":["../../../../../packages/utils/vue/vnode.ts"],"sourcesContent":["import type { Slots, VNode, VNodeArrayChildren, VNodeProps } from 'vue';\nimport type { RefObject } from './createRef';\nimport { cloneVNode, Comment, Fragment, isVNode, render as VueRender } from 'vue';\nimport { devWarning } from '../log';\nimport { filterEmpty } from './props';\n\ntype NodeProps = Record<string, any> &\n  Omit<VNodeProps, 'ref'> & { ref?: VNodeProps['ref'] | RefObject };\n\nexport function cloneElement<T, U>(\n  vnode: VNode<T, U> | Array<VNode<T, U>>,\n  nodeProps: NodeProps = {},\n  override = true,\n  mergeRef = false,\n): VNode<T, U> {\n  let ele = vnode;\n  if (Array.isArray(vnode))\n    ele = filterEmpty(vnode)[0];\n\n  if (!ele)\n    return null;\n\n  const node = cloneVNode(ele as VNode<T, U>, nodeProps as any, mergeRef);\n\n  // cloneVNode内部是合并属性，这里改成覆盖属性\n  node.props = (override ? { ...node.props, ...nodeProps } : node.props) as any;\n  devWarning(typeof node.props.class !== 'object', 'class must be string');\n  return node;\n}\n\nexport function cloneVNodes(vnodes, nodeProps = {}, override = true) {\n  return vnodes.map(vnode => cloneElement(vnode, nodeProps, override));\n}\n\nexport function deepCloneElement<T, U>(\n  vnode: VNode<T, U> | Array<VNode<T, U>>,\n  nodeProps: NodeProps = {},\n  override = true,\n  mergeRef = false,\n) {\n  if (Array.isArray(vnode)) {\n    return vnode.map(item => deepCloneElement(item, nodeProps, override, mergeRef));\n  } else {\n    // 需要判断是否为vnode方可进行clone操作\n    if (!isVNode(vnode))\n      return vnode;\n\n    const cloned = cloneElement(vnode, nodeProps, override, mergeRef);\n    if (Array.isArray(cloned.children))\n      cloned.children = deepCloneElement(cloned.children as Array<VNode<T, U>>);\n\n    return cloned;\n  }\n}\n\nexport function triggerVNodeUpdate(vm: VNode, attrs: Record<string, any>, dom: any) {\n  VueRender(cloneVNode(vm, { ...attrs }), dom);\n}\n\nfunction ensureValidVNode(slot: VNodeArrayChildren | null) {\n  return (slot || []).some((child) => {\n    if (!isVNode(child)) return true;\n    if (child.type === Comment) return false;\n    if (child.type === Fragment && !ensureValidVNode(child.children as VNodeArrayChildren))\n      return false;\n    return true;\n  })\n    ? slot\n    : null;\n}\n\nexport function customRenderSlot(\n  slots: Slots,\n  name: string,\n  props: Record<string, unknown>,\n  fallback?: () => VNodeArrayChildren,\n) {\n  const slot = slots[name]?.(props);\n  if (ensureValidVNode(slot))\n    return slot;\n\n  return fallback?.();\n}\n"],"names":["filterEmpty","cloneVNode","devWarning","isVNode","VueRender","Comment","Fragment"],"mappings":"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"}