xdesign-vue-next
Version:
XDesign Component for vue-next
435 lines (428 loc) • 17.3 kB
JavaScript
/**
* xdesign v1.0.6
* (c) 2023 xdesign
* @license MIT
*/
import { openBlock, createElementBlock, createElementVNode, defineComponent, inject, ref, reactive, computed, createVNode, mergeProps, isVNode, h } from 'vue';
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import isFunction from 'lodash/isFunction';
import isBoolean from 'lodash/isBoolean';
import { Checkbox } from '../checkbox/index.js';
import { Loading } from '../loading/index.js';
import { getTNode } from './util.js';
import { injectKey, useCLASSNAMES } from './constants.js';
import useRipple from '../hooks/useRipple.js';
import { usePrefixClass } from '../hooks/useConfig.js';
import useDraggable from './hooks/useDraggable.js';
import { useConfig } from '../config-provider/useConfig.js';
import '../checkbox/checkbox.js';
import '@babel/runtime/helpers/slicedToArray';
import '../checkbox/props.js';
import '../hooks/useVModel.js';
import 'lodash/kebabCase';
import '../hooks/tnode.js';
import 'lodash/camelCase';
import '../utils/render-tnode.js';
import 'lodash/isEmpty';
import 'lodash/isString';
import 'lodash/isObject';
import '../checkbox/constants.js';
import '../checkbox/hooks/useCheckboxLazyLoad.js';
import '../_common/js/utils/observe.js';
import '../checkbox/hooks/useKeyboard.js';
import '../hooks/useDisabled.js';
import '../hooks/useKeepAnimation.js';
import '../config-provider/context.js';
import 'lodash/mergeWith';
import 'lodash/merge';
import '../_common/js/global-config/default-config.js';
import '../_common/js/global-config/locale/en_US.js';
import '../_chunks/dep-3a1cce9f.js';
import 'lodash/isArray';
import 'lodash/cloneDeep';
import '../utils/set-style.js';
import '../checkbox/group.js';
import '@babel/runtime/helpers/typeof';
import '@babel/runtime/helpers/toConsumableArray';
import 'lodash/intersection';
import 'lodash/isUndefined';
import '../checkbox/checkbox-group-props.js';
import '../hooks/slot.js';
import '../utils/withInstall.js';
import '../loading/directive.js';
import '../loading/plugin.js';
import '../loading/loading.js';
import '../loading/icon/gradient.js';
import '../_common/js/loading/circle-adapter.js';
import '../_common/js/utils/set-style.js';
import '../_common/js/utils/helper.js';
import '@babel/runtime/helpers/objectWithoutProperties';
import 'lodash/isNull';
import 'lodash/isNumber';
import '../utils/dom.js';
import '../utils/easing.js';
import '../loading/props.js';
import '../hooks/useTeleport.js';
import 'lodash/pick';
import 'lodash/throttle';
const _hoisted_1 = {
class: "x-icon",
viewBox: "0 0 24 24",
width: "1.1em",
height: "1.1em"
};
const _hoisted_2 = /*#__PURE__*/createElementVNode("path", {
fill: "currentColor",
d: "m16 12l-6 6V6l6 6Z"
}, null, -1 /* HOISTED */);
const _hoisted_3 = [
_hoisted_2
];
function render(_ctx, _cache) {
return (openBlock(), createElementBlock("svg", _hoisted_1, _hoisted_3))
}
var __unplugin_components_0 = { name: 'ri-arrow-right-s-fill', render };
/* vite-plugin-components disabled */
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _isSlot(s) {
return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !isVNode(s);
}
var TreeItem = defineComponent({
name: "XTreeNode",
props: {
node: {
type: Object
},
onClick: Function,
onChange: Function,
onDrop: Function,
onDragStart: Function,
expandOnClickNode: Boolean
},
setup: function setup(props) {
var treeScope = inject(injectKey);
var isClicked = ref(false);
var label = ref();
useRipple(label);
var CLASS_NAMES = useCLASSNAMES();
var _useConfig = useConfig("tree"),
globalConfig = _useConfig.globalConfig;
var classPrefix = usePrefixClass();
var handleClick = function handleClick(evt) {
var _srcTarget$className, _srcTarget$className$, _props$onClick;
var node = props.node,
expandOnClickNode = props.expandOnClickNode;
var state = {
mouseEvent: evt,
event: evt,
node: node,
path: node.getPath()
};
var srcTarget = evt.target;
var isBranchTrigger = node.children && props.expandOnClickNode && (srcTarget.className === "".concat(classPrefix.value, "-checkbox__input") || srcTarget.tagName.toLowerCase() === "input");
if (isClicked.value || isBranchTrigger) return;
if (expandOnClickNode && node.children && ((_srcTarget$className = srcTarget.className) === null || _srcTarget$className === void 0 || (_srcTarget$className$ = _srcTarget$className.indexOf) === null || _srcTarget$className$ === void 0 ? void 0 : _srcTarget$className$.call(_srcTarget$className, "".concat(classPrefix.value, "-tree__label"))) !== -1) evt.preventDefault();
isClicked.value = true;
setTimeout(function () {
isClicked.value = false;
});
(_props$onClick = props.onClick) === null || _props$onClick === void 0 ? void 0 : _props$onClick.call(props, state);
};
var nodeRef = ref();
var _useDraggable = useDraggable(reactive({
nodeRef: nodeRef,
node: props.node
})),
isDragOver = _useDraggable.isDragOver,
isDragging = _useDraggable.isDragging,
dropPosition = _useDraggable.dropPosition,
setDragStatus = _useDraggable.setDragStatus;
var handleDragStart = function handleDragStart(evt) {
var _props$onDragStart;
var node = props.node;
if (!node.isDraggable()) return;
evt.stopPropagation();
setDragStatus("dragStart", evt);
evt.dataTransfer.effectAllowed = "move";
try {
var _evt$dataTransfer;
(_evt$dataTransfer = evt.dataTransfer) === null || _evt$dataTransfer === void 0 ? void 0 : _evt$dataTransfer.setData("text/plain", "");
} catch (e) {}
(_props$onDragStart = props.onDragStart) === null || _props$onDragStart === void 0 ? void 0 : _props$onDragStart.call(props, node, evt);
};
var handleDragEnd = function handleDragEnd(evt) {
var node = props.node;
if (!node.isDraggable()) return;
evt.stopPropagation();
setDragStatus("dragEnd", evt);
};
var handleDragOver = function handleDragOver(evt) {
var node = props.node;
if (!node.isDraggable()) return;
evt.stopPropagation();
evt.preventDefault();
setDragStatus("dragOver", evt);
};
var handleDragLeave = function handleDragLeave(evt) {
var node = props.node;
if (!node.isDraggable()) return;
evt.stopPropagation();
setDragStatus("dragLeave", evt);
};
var handleDrop = function handleDrop(evt) {
var _props$onDrop;
var node = props.node;
if (!node.isDraggable()) return;
evt.stopPropagation();
evt.preventDefault();
setDragStatus("drop", evt);
(_props$onDrop = props.onDrop) === null || _props$onDrop === void 0 ? void 0 : _props$onDrop.call(props, node, dropPosition.value, evt);
};
var handleChange = function handleChange() {
var _props$onChange;
var node = props.node;
var event = new Event("change");
var state = {
event: event,
node: node
};
(_props$onChange = props.onChange) === null || _props$onChange === void 0 ? void 0 : _props$onChange.call(props, state);
};
var itemStyles = computed(function () {
var level = props.node.level;
var styles = "--level: ".concat(level, ";");
return styles;
});
var itemClassList = computed(function () {
var _list$push, _list$push2;
var node = props.node;
var list = [];
list.push(CLASS_NAMES.value.treeNode);
list.push((_list$push = {}, _defineProperty(_list$push, CLASS_NAMES.value.treeNodeOpen, node.expanded), _defineProperty(_list$push, CLASS_NAMES.value.actived, node.isActivable() ? node.actived : false), _defineProperty(_list$push, CLASS_NAMES.value.disabled, node.isDisabled()), _list$push));
list.push((_list$push2 = {}, _defineProperty(_list$push2, CLASS_NAMES.value.treeNodeDraggable, node.isDraggable()), _defineProperty(_list$push2, CLASS_NAMES.value.treeNodeDragging, isDragging.value), _defineProperty(_list$push2, CLASS_NAMES.value.treeNodeDragTipTop, isDragOver.value && dropPosition.value < 0), _defineProperty(_list$push2, CLASS_NAMES.value.treeNodeDragTipBottom, isDragOver.value && dropPosition.value > 0), _defineProperty(_list$push2, CLASS_NAMES.value.treeNodeDragTipHighlight, !isDragging.value && isDragOver.value && dropPosition.value === 0), _list$push2));
return list;
});
var renderLine = function renderLine() {
var node = props.node;
var _treeScope$value = treeScope.value,
line = _treeScope$value.line,
scopedSlots = _treeScope$value.scopedSlots;
var iconVisible = !!treeScope.value.icon;
var lineNode = null;
if (line === true) {
if (scopedSlots !== null && scopedSlots !== void 0 && scopedSlots.line) {
lineNode = scopedSlots.line({
node: node === null || node === void 0 ? void 0 : node.getModel()
});
} else if (node.parent && node.tree) {
var vmIsLeaf = node.vmIsLeaf,
vmIsFirst = node.vmIsFirst,
level = node.level;
var lineClasses = [];
lineClasses.push(CLASS_NAMES.value.line);
if (vmIsLeaf || !iconVisible) {
lineClasses.push(CLASS_NAMES.value.lineIsLeaf);
}
if (vmIsFirst && iconVisible) {
lineClasses.push(CLASS_NAMES.value.lineIsFirst);
}
var shadowStyles = [];
var parents = node.getParents();
parents.pop();
parents.forEach(function (pNode, index) {
if (!pNode.vmIsLast) {
shadowStyles.push("calc(-".concat(index + 1, " * var(--space)) 0 var(--color)"));
}
});
var styles = {
"--level": level,
"box-shadow": shadowStyles.join(",")
};
lineNode = createVNode("span", {
"class": lineClasses,
"style": styles
}, null);
}
} else {
lineNode = getTNode(line, {
node: node
});
}
return lineNode;
};
var renderIcon = function renderIcon() {
var getFolderIcon = function getFolderIcon() {
if (isFunction(globalConfig.value.folderIcon)) {
return globalConfig.value.folderIcon(h);
}
return createVNode(__unplugin_components_0, null, null);
};
var node = props.node;
var _treeScope$value2 = treeScope.value,
icon = _treeScope$value2.icon,
scopedSlots = _treeScope$value2.scopedSlots;
var isDefaultIcon = false;
var iconNode = null;
if (icon === true) {
if (scopedSlots !== null && scopedSlots !== void 0 && scopedSlots.icon) {
iconNode = scopedSlots.icon({
node: node === null || node === void 0 ? void 0 : node.getModel()
});
} else if (!node.vmIsLeaf) {
isDefaultIcon = true;
iconNode = getFolderIcon();
if (node.loading && node.expanded) {
iconNode = createVNode(Loading, null, null);
}
} else {
iconNode = "";
}
} else {
iconNode = getTNode(icon, {
node: node
});
}
iconNode = createVNode("span", {
"class": [CLASS_NAMES.value.treeIcon, CLASS_NAMES.value.folderIcon, isDefaultIcon ? CLASS_NAMES.value.treeIconDefault : ""],
"trigger": "expand",
"ignore": "active"
}, [iconNode]);
return iconNode;
};
var renderLabel = function renderLabel() {
var node = props.node;
var _treeScope$value3 = treeScope.value,
label2 = _treeScope$value3.label,
scopedSlots = _treeScope$value3.scopedSlots,
disableCheck = _treeScope$value3.disableCheck;
var checkProps = treeScope.value.checkProps || {};
var labelNode = null;
if (label2 === true) {
if (scopedSlots.label) {
labelNode = scopedSlots.label({
node: node.getModel()
});
} else {
labelNode = node.label || "";
}
} else {
labelNode = getTNode(label2, {
node: node
});
}
var labelClasses = [CLASS_NAMES.value.treeLabel, CLASS_NAMES.value.treeLabelStrictly, _defineProperty({}, CLASS_NAMES.value.actived, node.isActivable() ? node.actived : false)];
if (node.vmCheckable) {
var checkboxDisabled = false;
if (isFunction(disableCheck)) {
checkboxDisabled = disableCheck(node);
} else {
var _node$data;
checkboxDisabled = !!disableCheck || ((_node$data = node.data) === null || _node$data === void 0 ? void 0 : _node$data.checkable) === false;
}
if (node.isDisabled()) {
checkboxDisabled = true;
}
var itemCheckProps = _objectSpread(_objectSpread({}, checkProps), {}, {
disabled: checkboxDisabled
});
var shouldStopLabelTrigger = computed(function () {
var _node$children;
var isNormalBranchNode = Array.isArray(node.children) && ((_node$children = node.children) === null || _node$children === void 0 ? void 0 : _node$children.length) > 0;
var isLazyLoadChildBranchNode = isBoolean(node.children) && node.children;
var isBranchNode = isNormalBranchNode || isLazyLoadChildBranchNode;
return props.expandOnClickNode && isBranchNode;
});
var _labelNode = function () {
return labelNode;
}();
labelNode = createVNode(Checkbox, mergeProps({
"class": labelClasses,
"checked": node.checked,
"indeterminate": node.indeterminate,
"disabled": node.isDisabled(),
"name": node.value.toString(),
"onChange": function onChange() {
return handleChange();
},
"ignore": "expand",
"stopLabelTrigger": shouldStopLabelTrigger.value,
"needRipple": true
}, itemCheckProps), _isSlot(labelNode) ? labelNode : {
"default": function _default() {
return [_labelNode];
}
});
} else {
var inner = createVNode("span", {
"style": "position: relative"
}, [labelNode]);
labelNode = node.isActivable() ? createVNode("span", {
"key": "1",
"ref": "label",
"class": labelClasses,
"title": node.label
}, [inner]) : createVNode("span", {
"key": "2",
"class": labelClasses,
"title": node.label
}, [inner]);
}
return labelNode;
};
var renderOperations = function renderOperations() {
var node = props.node;
var _treeScope$value4 = treeScope.value,
operations = _treeScope$value4.operations,
scopedSlots = _treeScope$value4.scopedSlots;
var opNode = null;
if (scopedSlots !== null && scopedSlots !== void 0 && scopedSlots.operations) {
opNode = scopedSlots.operations({
node: node === null || node === void 0 ? void 0 : node.getModel()
});
} else {
opNode = getTNode(operations, {
node: node
});
}
if (opNode) {
opNode = createVNode("span", {
"class": CLASS_NAMES.value.treeOperations,
"ignore": "active,expand"
}, [opNode]);
}
return opNode;
};
return function () {
var node = props.node;
return createVNode("div", {
"ref": nodeRef,
"class": itemClassList.value,
"data-value": node.value,
"data-level": node.level,
"style": itemStyles.value,
"onClick": function onClick(evt) {
return handleClick(evt);
},
"draggable": node.isDraggable(),
"onDragstart": function onDragstart(evt) {
return handleDragStart(evt);
},
"onDragend": function onDragend(evt) {
return handleDragEnd(evt);
},
"onDragover": function onDragover(evt) {
return handleDragOver(evt);
},
"onDragleave": function onDragleave(evt) {
return handleDragLeave(evt);
},
"onDrop": function onDrop(evt) {
return handleDrop(evt);
}
}, [renderLine(), renderIcon(), renderLabel(), renderOperations()]);
};
}
});
export { TreeItem as default };
//# sourceMappingURL=tree-item.js.map