UNPKG

wetrade-design

Version:

一款多语言支持Vue3的UI框架

61 lines 2.63 kB
import _typeof from "@babel/runtime/helpers/esm/typeof"; import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import { filterEmpty } from './props-util'; import { cloneVNode, Comment, Fragment, isVNode } from 'vue'; import warning from './warning'; export function cloneElement(vnode) { var nodeProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var mergeRef = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var ele = vnode; if (Array.isArray(vnode)) { ele = filterEmpty(vnode)[0]; } if (!ele) { return null; } var node = cloneVNode(ele, nodeProps, mergeRef); // cloneVNode内部是合并属性,这里改成覆盖属性 node.props = override ? _objectSpread(_objectSpread({}, node.props), nodeProps) : node.props; warning(_typeof(node.props.class) !== 'object', 'class must be string'); return node; } export function cloneVNodes(vnodes) { var nodeProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; return vnodes.map(function (vnode) { return cloneElement(vnode, nodeProps, override); }); } export function deepCloneElement(vnode) { var nodeProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var mergeRef = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; if (Array.isArray(vnode)) { return vnode.map(function (item) { return deepCloneElement(item, nodeProps, override, mergeRef); }); } else { var cloned = cloneElement(vnode, nodeProps, override, mergeRef); if (Array.isArray(cloned.children)) { cloned.children = deepCloneElement(cloned.children); } return cloned; } } var ensureValidVNode = function ensureValidVNode(slot) { return (slot || []).some(function (child) { if (!isVNode(child)) return true; if (child.type === Comment) return false; if (child.type === Fragment && !ensureValidVNode(child.children)) return false; return true; }) ? slot : null; }; export function customRenderSlot(slots, name, props, fallback) { var _slots$name; var slot = (_slots$name = slots[name]) === null || _slots$name === void 0 ? void 0 : _slots$name.call(slots, props); if (ensureValidVNode(slot)) { return slot; } return fallback === null || fallback === void 0 ? void 0 : fallback(); }