@v-c/tree 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Tree.cjs DELETED
@@ -1,1109 +0,0 @@
1
- Object.defineProperties(exports, {
2
- __esModule: { value: true },
3
- [Symbol.toStringTag]: { value: "Module" }
4
- });
5
- const require_rolldown_runtime = require("./_virtual/rolldown_runtime.cjs");
6
- const require_DropIndicator = require("./DropIndicator.cjs");
7
- const require_contextTypes = require("./contextTypes.cjs");
8
- const require_keyUtil = require("./utils/keyUtil.cjs");
9
- const require_treeUtil = require("./utils/treeUtil.cjs");
10
- const require_NodeList = require("./NodeList.cjs");
11
- const require_util = require("./util.cjs");
12
- const require_conductUtil = require("./utils/conductUtil.cjs");
13
- let vue = require("vue");
14
- let _v_c_util = require("@v-c/util");
15
- let _v_c_util_dist_pickAttrs = require("@v-c/util/dist/pickAttrs");
16
- _v_c_util_dist_pickAttrs = require_rolldown_runtime.__toESM(_v_c_util_dist_pickAttrs);
17
- let _v_c_util_dist_warning = require("@v-c/util/dist/warning");
18
- _v_c_util_dist_warning = require_rolldown_runtime.__toESM(_v_c_util_dist_warning);
19
- let _v_c_util_dist_hooks_useMergedState = require("@v-c/util/dist/hooks/useMergedState");
20
- _v_c_util_dist_hooks_useMergedState = require_rolldown_runtime.__toESM(_v_c_util_dist_hooks_useMergedState);
21
- let _v_c_util_dist_KeyCode = require("@v-c/util/dist/KeyCode");
22
- _v_c_util_dist_KeyCode = require_rolldown_runtime.__toESM(_v_c_util_dist_KeyCode);
23
- var MAX_RETRY_TIMES = 10;
24
- var defaultProps = {
25
- prefixCls: "vc-tree",
26
- showLine: false,
27
- showIcon: true,
28
- selectable: true,
29
- multiple: false,
30
- checkable: false,
31
- disabled: false,
32
- checkStrictly: false,
33
- draggable: false,
34
- defaultExpandParent: true,
35
- autoExpandParent: false,
36
- defaultExpandAll: false,
37
- defaultExpandedKeys: [],
38
- defaultCheckedKeys: [],
39
- defaultSelectedKeys: [],
40
- allowDrop: () => true,
41
- expandAction: false,
42
- focusable: true,
43
- tabIndex: 0,
44
- virtual: true
45
- };
46
- var Tree = /* @__PURE__ */ (0, vue.defineComponent)((props, { slots, attrs, expose }) => {
47
- const mergedPrefixCls = (0, vue.computed)(() => props.prefixCls);
48
- const mergedShowLine = (0, vue.computed)(() => props.showLine);
49
- const mergedShowIcon = (0, vue.computed)(() => props.showIcon);
50
- const mergedSelectable = (0, vue.computed)(() => props.selectable);
51
- const mergedMultiple = (0, vue.computed)(() => props.multiple);
52
- const mergedCheckable = (0, vue.computed)(() => props.checkable);
53
- const mergedCheckStrictly = (0, vue.computed)(() => props.checkStrictly);
54
- const mergedDisabled = (0, vue.computed)(() => props.disabled);
55
- const mergedFocusable = (0, vue.computed)(() => props.focusable);
56
- const mergedTabIndex = (0, vue.computed)(() => props.tabIndex);
57
- const mergedVirtual = (0, vue.computed)(() => props.virtual);
58
- const mergedAllowDrop = (0, vue.computed)(() => props.allowDrop);
59
- const mergedFieldNames = (0, vue.computed)(() => require_treeUtil.fillFieldNames(props.fieldNames));
60
- const slotTreeData = (0, vue.shallowRef)([]);
61
- const slotTreeDataSignature = (0, vue.ref)("");
62
- const mergedTreeData = (0, vue.computed)(() => props.treeData || slotTreeData.value);
63
- const getTreeDataSignature = (data) => {
64
- const dig = (list) => {
65
- return (list || []).map((node) => {
66
- const key = String(node?.key);
67
- const children = node?.children;
68
- return `${key}{${children?.length ? dig(children) : ""}}`;
69
- }).join("|");
70
- };
71
- return dig(data);
72
- };
73
- (0, vue.watchEffect)(() => {
74
- require_treeUtil.warningWithoutKey(mergedTreeData.value, mergedFieldNames.value);
75
- });
76
- const entities = (0, vue.computed)(() => {
77
- return require_treeUtil.convertDataToEntities(mergedTreeData.value, { fieldNames: mergedFieldNames.value });
78
- });
79
- const keyEntities = (0, vue.computed)(() => ({
80
- [require_NodeList.MOTION_KEY]: require_NodeList.MotionEntity,
81
- ...entities.value.keyEntities
82
- }));
83
- const getInitExpandedKeys = () => {
84
- let keys = [];
85
- const defaultExpandAll = props.defaultExpandAll;
86
- const defaultExpandParent = props.defaultExpandParent;
87
- if (defaultExpandAll) keys = Object.values(keyEntities.value).filter((entity) => entity.key !== require_NodeList.MOTION_KEY).map((entity) => entity.key);
88
- else keys = props?.expandedKeys || props.defaultExpandedKeys || [];
89
- if (defaultExpandParent) keys = require_util.conductExpandParent(keys, keyEntities.value);
90
- return keys;
91
- };
92
- const expandedKeys = (0, vue.shallowRef)(getInitExpandedKeys());
93
- const setExpandedKeys = (keys) => {
94
- expandedKeys.value = keys;
95
- };
96
- (0, vue.watch)(() => props.expandedKeys, () => {
97
- if (props.expandedKeys === void 0) return;
98
- const keys = props.expandedKeys || [];
99
- if (props.autoExpandParent) {
100
- expandedKeys.value = require_util.conductExpandParent(keys, keyEntities.value);
101
- return;
102
- }
103
- expandedKeys.value = keys;
104
- });
105
- const flattenNodes = (0, vue.computed)(() => require_treeUtil.flattenTreeData(mergedTreeData.value, expandedKeys.value, mergedFieldNames.value));
106
- const selectedKeys = (0, vue.shallowRef)(require_util.calcSelectedKeys(props?.selectedKeys || props.defaultSelectedKeys || [], { multiple: mergedMultiple.value }) || []);
107
- (0, vue.watch)(() => props.selectedKeys, () => {
108
- if (props.selectedKeys === void 0) return;
109
- selectedKeys.value = require_util.calcSelectedKeys(props.selectedKeys, { multiple: mergedMultiple.value }) || [];
110
- });
111
- const setSelectedKeys = (keys) => {
112
- selectedKeys.value = keys;
113
- };
114
- const getDefaultCheckedKeyEntity = () => {
115
- const parsed = require_util.parseCheckedKeys(props?.checkedKeys);
116
- if (parsed) return {
117
- checkedKeys: parsed.checkedKeys || [],
118
- halfCheckedKeys: parsed.halfCheckedKeys || []
119
- };
120
- return {
121
- checkedKeys: props?.defaultCheckedKeys || [],
122
- halfCheckedKeys: []
123
- };
124
- };
125
- const defaultCheckedKeyEntity = getDefaultCheckedKeyEntity();
126
- const rawCheckedKeys = (0, vue.shallowRef)(defaultCheckedKeyEntity.checkedKeys);
127
- const setRawCheckedKeys = (keys) => {
128
- rawCheckedKeys.value = keys;
129
- };
130
- (0, vue.watch)(() => props.checkedKeys, () => {
131
- if (props.checkedKeys === void 0) return;
132
- rawCheckedKeys.value = require_util.parseCheckedKeys(props.checkedKeys)?.checkedKeys || [];
133
- });
134
- const rawHalfCheckedKeys = (0, vue.shallowRef)(defaultCheckedKeyEntity.halfCheckedKeys);
135
- const setRawHalfCheckedKeys = (keys) => {
136
- rawHalfCheckedKeys.value = keys;
137
- };
138
- (0, vue.watch)(() => props.checkedKeys, () => {
139
- if (props.checkedKeys === void 0) return;
140
- rawHalfCheckedKeys.value = require_util.parseCheckedKeys(props.checkedKeys)?.halfCheckedKeys || [];
141
- });
142
- const mergedChecked = (0, vue.computed)(() => {
143
- if (!mergedCheckable.value) return {
144
- checkedKeys: [],
145
- halfCheckedKeys: []
146
- };
147
- let checkedKeysValue = rawCheckedKeys.value || [];
148
- let halfCheckedKeysValue = rawHalfCheckedKeys.value || [];
149
- if (!mergedCheckStrictly.value) {
150
- if (Object.keys(keyEntities.value || {}).some((key) => key !== require_NodeList.MOTION_KEY)) {
151
- const conductKeys = require_conductUtil.conductCheck(checkedKeysValue, true, keyEntities.value);
152
- checkedKeysValue = conductKeys.checkedKeys;
153
- halfCheckedKeysValue = conductKeys.halfCheckedKeys;
154
- }
155
- }
156
- return {
157
- checkedKeys: checkedKeysValue,
158
- halfCheckedKeys: halfCheckedKeysValue
159
- };
160
- });
161
- const [loadedKeys, setLoadedKeys] = (0, _v_c_util_dist_hooks_useMergedState.default)(() => [], { value: (0, vue.computed)(() => props.loadedKeys === void 0 ? void 0 : props.loadedKeys) });
162
- const loadingKeys = (0, vue.ref)([]);
163
- const focused = (0, vue.ref)(false);
164
- const listChanging = (0, vue.ref)(false);
165
- const [activeKey, setActiveKey] = (0, _v_c_util_dist_hooks_useMergedState.default)(null, { value: (0, vue.computed)(() => props.activeKey === void 0 ? void 0 : props.activeKey) });
166
- function onListChangeStart() {
167
- listChanging.value = true;
168
- }
169
- function onListChangeEnd() {
170
- setTimeout(() => {
171
- listChanging.value = false;
172
- });
173
- }
174
- const draggingNodeKey = (0, vue.ref)(null);
175
- const dragChildrenKeys = (0, vue.ref)([]);
176
- const indent = (0, vue.ref)(null);
177
- const dropTargetKey = (0, vue.ref)(null);
178
- const dropPosition = (0, vue.ref)(null);
179
- const dropContainerKey = (0, vue.ref)(null);
180
- const dropLevelOffset = (0, vue.ref)(null);
181
- const dropTargetPos = (0, vue.ref)(null);
182
- const dropAllowed = (0, vue.ref)(true);
183
- const dragOverNodeKey = (0, vue.ref)(null);
184
- let dragNodeProps = null;
185
- let dragStartMousePosition = null;
186
- let currentMouseOverDroppableNodeKey = null;
187
- const delayedDragEnterLogic = {};
188
- const loadingRetryTimes = {};
189
- const listRef = (0, vue.ref)();
190
- const getTreeNodeRequiredProps = (0, vue.computed)(() => ({
191
- expandedKeys: expandedKeys.value || [],
192
- selectedKeys: selectedKeys.value || [],
193
- loadedKeys: loadedKeys.value || [],
194
- loadingKeys: loadingKeys.value || [],
195
- checkedKeys: mergedChecked.value.checkedKeys || [],
196
- halfCheckedKeys: mergedChecked.value.halfCheckedKeys || [],
197
- dragOverNodeKey: dragOverNodeKey.value,
198
- dropPosition: dropPosition.value,
199
- keyEntities: keyEntities.value
200
- }));
201
- const getActiveItem = (0, vue.computed)(() => {
202
- if (activeKey.value === null) return null;
203
- return flattenNodes.value.find(({ key }) => key === activeKey.value) || null;
204
- });
205
- const scrollTo = (scroll) => {
206
- listRef.value?.scrollTo(scroll);
207
- };
208
- expose({
209
- scrollTo,
210
- onKeyDown
211
- });
212
- function onActiveChange(newActiveKey) {
213
- if (activeKey.value === newActiveKey) return;
214
- setActiveKey(newActiveKey);
215
- if (newActiveKey !== null) scrollTo({
216
- key: newActiveKey,
217
- offset: props.itemScrollOffset || 0
218
- });
219
- props.onActiveChange?.(newActiveKey);
220
- }
221
- function offsetActiveKey(offset) {
222
- const nodes = flattenNodes.value;
223
- const currentActiveKey = activeKey.value;
224
- let index = nodes.findIndex(({ key }) => key === currentActiveKey);
225
- if (index === -1 && offset < 0) index = nodes.length;
226
- index = (index + offset + nodes.length) % nodes.length;
227
- const item = nodes[index];
228
- onActiveChange(item ? item.key : null);
229
- }
230
- function onFocus(e) {
231
- focused.value = true;
232
- props.onFocus?.(e);
233
- }
234
- function onBlur(e) {
235
- focused.value = false;
236
- onActiveChange(null);
237
- props.onBlur?.(e);
238
- }
239
- function onNodeLoad(treeNode) {
240
- const key = treeNode.key;
241
- if (require_keyUtil.default(keyEntities.value, key)?.children?.length) return;
242
- const loadData = props.loadData;
243
- if (!loadData || loadedKeys.value.includes(key) || loadingKeys.value.includes(key)) return;
244
- loadingKeys.value = require_util.arrAdd(loadingKeys.value, key);
245
- const promise = loadData(treeNode);
246
- const wrapped = Promise.resolve(promise).then(() => {
247
- const newLoadedKeys = require_util.arrAdd(loadedKeys.value, key);
248
- props.onLoad?.(newLoadedKeys, {
249
- event: "load",
250
- node: treeNode
251
- });
252
- setLoadedKeys(newLoadedKeys);
253
- loadingKeys.value = require_util.arrDel(loadingKeys.value, key);
254
- }).catch((err) => {
255
- loadingKeys.value = require_util.arrDel(loadingKeys.value, key);
256
- loadingRetryTimes[String(key)] = (loadingRetryTimes[String(key)] || 0) + 1;
257
- if (loadingRetryTimes[String(key)] >= MAX_RETRY_TIMES) {
258
- (0, _v_c_util_dist_warning.default)(false, "Retry for `loadData` many times but still failed. No more retry.");
259
- setLoadedKeys(require_util.arrAdd(loadedKeys.value, key));
260
- return;
261
- }
262
- throw err;
263
- });
264
- wrapped.catch(() => {});
265
- return wrapped;
266
- }
267
- function onNodeExpand(e, treeNode) {
268
- const expanded = treeNode.expanded;
269
- const key = treeNode[mergedFieldNames.value.key];
270
- if (listChanging.value) return;
271
- const targetExpanded = !expanded;
272
- const certain = expandedKeys.value.includes(key);
273
- (0, _v_c_util_dist_warning.default)(expanded && certain || !expanded && !certain, "Expand state not sync with index check");
274
- const nextExpandedKeys = targetExpanded ? require_util.arrAdd(expandedKeys.value, key) : require_util.arrDel(expandedKeys.value, key);
275
- setExpandedKeys(nextExpandedKeys);
276
- props.onExpand?.(nextExpandedKeys, {
277
- node: treeNode,
278
- expanded: targetExpanded,
279
- nativeEvent: e
280
- });
281
- if (targetExpanded && props.loadData) {
282
- const loadPromise = onNodeLoad(treeNode);
283
- if (loadPromise) loadPromise.catch(() => {
284
- setExpandedKeys(require_util.arrDel(expandedKeys.value, key));
285
- });
286
- }
287
- }
288
- function triggerExpandActionExpand(e, treeNode) {
289
- const expanded = treeNode.expanded;
290
- const key = treeNode.key;
291
- if (treeNode.isLeaf || e.shiftKey || e.metaKey || e.ctrlKey) return;
292
- const node = flattenNodes.value.find((nodeItem) => nodeItem.key === key);
293
- if (!node) return;
294
- const eventNode = require_treeUtil.convertNodePropsToEventData({
295
- ...require_treeUtil.getTreeNodeProps(key, getTreeNodeRequiredProps.value),
296
- data: node.data
297
- });
298
- setExpandedKeys(expanded ? require_util.arrDel(expandedKeys.value, key) : require_util.arrAdd(expandedKeys.value, key));
299
- onNodeExpand(e, eventNode);
300
- }
301
- const onNodeClick = (e, treeNode) => {
302
- if (props.expandAction === "click") triggerExpandActionExpand(e, treeNode);
303
- props.onClick?.(e, treeNode);
304
- };
305
- const onNodeDoubleClick = (e, treeNode) => {
306
- if (props.expandAction === "doubleClick") triggerExpandActionExpand(e, treeNode);
307
- props.onDoubleClick?.(e, treeNode);
308
- };
309
- const onNodeSelect = (e, treeNode) => {
310
- const selected = treeNode.selected;
311
- const key = treeNode[mergedFieldNames.value.key];
312
- const targetSelected = !selected;
313
- let nextSelectedKeys = selectedKeys.value;
314
- if (!targetSelected) nextSelectedKeys = require_util.arrDel(nextSelectedKeys, key);
315
- else if (!mergedMultiple.value) nextSelectedKeys = [key];
316
- else nextSelectedKeys = require_util.arrAdd(nextSelectedKeys, key);
317
- const selectedNodes = nextSelectedKeys.map((selectedKey) => {
318
- const entity = require_keyUtil.default(keyEntities.value, selectedKey);
319
- return entity ? entity.node : null;
320
- }).filter(Boolean);
321
- setSelectedKeys(nextSelectedKeys);
322
- props.onSelect?.(nextSelectedKeys, {
323
- event: "select",
324
- selected: targetSelected,
325
- node: treeNode,
326
- selectedNodes,
327
- nativeEvent: e
328
- });
329
- };
330
- function onNodeCheck(e, treeNode, checked) {
331
- const { checkedKeys: oriCheckedKeys, halfCheckedKeys: oriHalfCheckedKeys } = mergedChecked.value;
332
- const key = treeNode.key;
333
- let checkedObj;
334
- const eventObj = {
335
- event: "check",
336
- node: treeNode,
337
- checked,
338
- nativeEvent: e
339
- };
340
- if (mergedCheckStrictly.value) {
341
- const nextCheckedKeys = checked ? require_util.arrAdd(oriCheckedKeys, key) : require_util.arrDel(oriCheckedKeys, key);
342
- const nextHalfCheckedKeys = require_util.arrDel(oriHalfCheckedKeys, key);
343
- checkedObj = {
344
- checked: nextCheckedKeys,
345
- halfChecked: nextHalfCheckedKeys
346
- };
347
- eventObj.checkedNodes = nextCheckedKeys.map((checkedKey) => require_keyUtil.default(keyEntities.value, checkedKey)).filter(Boolean).map((entity) => entity.node);
348
- setRawCheckedKeys(nextCheckedKeys);
349
- setRawHalfCheckedKeys(nextHalfCheckedKeys);
350
- } else {
351
- let { checkedKeys: nextCheckedKeys, halfCheckedKeys: nextHalfCheckedKeys } = require_conductUtil.conductCheck([...oriCheckedKeys, key], true, keyEntities.value);
352
- if (!checked) {
353
- const keySet = new Set(nextCheckedKeys);
354
- keySet.delete(key);
355
- ({checkedKeys: nextCheckedKeys, halfCheckedKeys: nextHalfCheckedKeys} = require_conductUtil.conductCheck(Array.from(keySet), {
356
- checked: false,
357
- halfCheckedKeys: nextHalfCheckedKeys
358
- }, keyEntities.value));
359
- }
360
- checkedObj = nextCheckedKeys;
361
- eventObj.checkedNodes = [];
362
- eventObj.checkedNodesPositions = [];
363
- eventObj.halfCheckedKeys = nextHalfCheckedKeys;
364
- nextCheckedKeys.forEach((checkedKey) => {
365
- const entity = require_keyUtil.default(keyEntities.value, checkedKey);
366
- if (!entity) return;
367
- const { node, pos } = entity;
368
- eventObj.checkedNodes.push(node);
369
- eventObj.checkedNodesPositions.push({
370
- node,
371
- pos
372
- });
373
- });
374
- setRawCheckedKeys(nextCheckedKeys);
375
- setRawHalfCheckedKeys(nextHalfCheckedKeys);
376
- }
377
- props.onCheck?.(checkedObj, eventObj);
378
- }
379
- const onNodeMouseEnter = (e, node) => {
380
- props.onMouseEnter?.({
381
- event: e,
382
- node
383
- });
384
- };
385
- const onNodeMouseLeave = (e, node) => {
386
- props.onMouseLeave?.({
387
- event: e,
388
- node
389
- });
390
- };
391
- const onNodeContextMenu = (e, node) => {
392
- if (props.onRightClick) {
393
- e.preventDefault();
394
- props.onRightClick({
395
- event: e,
396
- node
397
- });
398
- }
399
- };
400
- function resetDragState() {
401
- dragOverNodeKey.value = null;
402
- dropPosition.value = null;
403
- dropLevelOffset.value = null;
404
- dropTargetKey.value = null;
405
- dropContainerKey.value = null;
406
- dropTargetPos.value = null;
407
- dropAllowed.value = false;
408
- }
409
- function cleanDragState() {
410
- if (draggingNodeKey.value !== null) {
411
- draggingNodeKey.value = null;
412
- dropPosition.value = null;
413
- dropContainerKey.value = null;
414
- dropTargetKey.value = null;
415
- dropLevelOffset.value = null;
416
- dropAllowed.value = true;
417
- dragOverNodeKey.value = null;
418
- }
419
- dragStartMousePosition = null;
420
- currentMouseOverDroppableNodeKey = null;
421
- dragChildrenKeys.value = [];
422
- indent.value = null;
423
- }
424
- const onWindowDragEnd = (event) => {
425
- onNodeDragEnd(event, null, true);
426
- window.removeEventListener("dragend", onWindowDragEnd);
427
- };
428
- (0, vue.onBeforeUnmount)(() => {
429
- window.removeEventListener("dragend", onWindowDragEnd);
430
- Object.keys(delayedDragEnterLogic).forEach((key) => {
431
- clearTimeout(delayedDragEnterLogic[key]);
432
- });
433
- });
434
- const onNodeDragStart = (event, nodeProps) => {
435
- dragNodeProps = nodeProps;
436
- dragStartMousePosition = {
437
- x: event.clientX,
438
- y: event.clientY
439
- };
440
- const newExpandedKeys = require_util.arrDel(expandedKeys.value, nodeProps.eventKey);
441
- draggingNodeKey.value = nodeProps.eventKey;
442
- dragChildrenKeys.value = require_util.getDragChildrenKeys(nodeProps.eventKey, keyEntities.value);
443
- indent.value = listRef.value?.getIndentWidth() || 0;
444
- setExpandedKeys(newExpandedKeys);
445
- window.addEventListener("dragend", onWindowDragEnd);
446
- props.onDragStart?.({
447
- event,
448
- node: require_treeUtil.convertNodePropsToEventData(nodeProps)
449
- });
450
- };
451
- const onNodeDragEnter = (event, nodeProps) => {
452
- const { pos, eventKey } = nodeProps;
453
- if (currentMouseOverDroppableNodeKey !== eventKey) currentMouseOverDroppableNodeKey = eventKey;
454
- if (!dragNodeProps || !dragStartMousePosition) {
455
- resetDragState();
456
- return;
457
- }
458
- const { dropPosition: nextDropPosition, dropLevelOffset: nextDropLevelOffset, dropTargetKey: nextDropTargetKey, dropContainerKey: nextDropContainerKey, dropTargetPos: nextDropTargetPos, dropAllowed: nextDropAllowed, dragOverNodeKey: nextDragOverNodeKey } = require_util.calcDropPosition(event, dragNodeProps, nodeProps, indent.value || 0, dragStartMousePosition, mergedAllowDrop.value, flattenNodes.value, keyEntities.value, expandedKeys.value, props.direction);
459
- if (dragChildrenKeys.value.includes(nextDropTargetKey) || !nextDropAllowed) {
460
- resetDragState();
461
- return;
462
- }
463
- Object.keys(delayedDragEnterLogic).forEach((key) => {
464
- clearTimeout(delayedDragEnterLogic[key]);
465
- });
466
- if (dragNodeProps.eventKey !== nodeProps.eventKey) delayedDragEnterLogic[pos] = window.setTimeout(() => {
467
- if (draggingNodeKey.value === null) return;
468
- let newExpandedKeys = [...expandedKeys.value];
469
- const entity = require_keyUtil.default(keyEntities.value, nodeProps.eventKey);
470
- if (entity && (entity.children || []).length) newExpandedKeys = require_util.arrAdd(expandedKeys.value, nodeProps.eventKey);
471
- if (props.expandedKeys === void 0) setExpandedKeys(newExpandedKeys);
472
- props.onExpand?.(newExpandedKeys, {
473
- node: require_treeUtil.convertNodePropsToEventData(nodeProps),
474
- expanded: true,
475
- nativeEvent: event
476
- });
477
- }, 800);
478
- if (dragNodeProps.eventKey === nextDropTargetKey && nextDropLevelOffset === 0) {
479
- resetDragState();
480
- return;
481
- }
482
- dragOverNodeKey.value = nextDragOverNodeKey;
483
- dropPosition.value = nextDropPosition;
484
- dropLevelOffset.value = nextDropLevelOffset;
485
- dropTargetKey.value = nextDropTargetKey;
486
- dropContainerKey.value = nextDropContainerKey;
487
- dropTargetPos.value = nextDropTargetPos;
488
- dropAllowed.value = nextDropAllowed;
489
- props.onDragEnter?.({
490
- event,
491
- node: require_treeUtil.convertNodePropsToEventData(nodeProps),
492
- expandedKeys: expandedKeys.value
493
- });
494
- };
495
- const onNodeDragOver = (event, nodeProps) => {
496
- if (!dragNodeProps || !dragStartMousePosition) return;
497
- const { dropPosition: nextDropPosition, dropLevelOffset: nextDropLevelOffset, dropTargetKey: nextDropTargetKey, dropContainerKey: nextDropContainerKey, dropTargetPos: nextDropTargetPos, dropAllowed: nextDropAllowed, dragOverNodeKey: nextDragOverNodeKey } = require_util.calcDropPosition(event, dragNodeProps, nodeProps, indent.value || 0, dragStartMousePosition, mergedAllowDrop.value, flattenNodes.value, keyEntities.value, expandedKeys.value, props.direction);
498
- if (dragChildrenKeys.value.includes(nextDropTargetKey) || !nextDropAllowed) return;
499
- if (dragNodeProps.eventKey === nextDropTargetKey && nextDropLevelOffset === 0) {
500
- if (!(dropPosition.value === null && dropLevelOffset.value === null && dropTargetKey.value === null && dropContainerKey.value === null && dropTargetPos.value === null && dropAllowed.value === false && dragOverNodeKey.value === null)) resetDragState();
501
- } else if (!(nextDropPosition === dropPosition.value && nextDropLevelOffset === dropLevelOffset.value && nextDropTargetKey === dropTargetKey.value && nextDropContainerKey === dropContainerKey.value && nextDropTargetPos === dropTargetPos.value && nextDropAllowed === dropAllowed.value && nextDragOverNodeKey === dragOverNodeKey.value)) {
502
- dropPosition.value = nextDropPosition;
503
- dropLevelOffset.value = nextDropLevelOffset;
504
- dropTargetKey.value = nextDropTargetKey;
505
- dropContainerKey.value = nextDropContainerKey;
506
- dropTargetPos.value = nextDropTargetPos;
507
- dropAllowed.value = nextDropAllowed;
508
- dragOverNodeKey.value = nextDragOverNodeKey;
509
- }
510
- props.onDragOver?.({
511
- event,
512
- node: require_treeUtil.convertNodePropsToEventData(nodeProps)
513
- });
514
- };
515
- const onNodeDragLeave = (event, nodeProps) => {
516
- const target = event.currentTarget;
517
- const related = event.relatedTarget;
518
- if (currentMouseOverDroppableNodeKey === nodeProps.eventKey && target && related && !target.contains(related)) {
519
- resetDragState();
520
- currentMouseOverDroppableNodeKey = null;
521
- } else if (currentMouseOverDroppableNodeKey === nodeProps.eventKey && target && !related) {
522
- resetDragState();
523
- currentMouseOverDroppableNodeKey = null;
524
- }
525
- props.onDragLeave?.({
526
- event,
527
- node: require_treeUtil.convertNodePropsToEventData(nodeProps)
528
- });
529
- };
530
- function onNodeDragEnd(event, nodeProps, _outsideTree) {
531
- dragOverNodeKey.value = null;
532
- cleanDragState();
533
- if (nodeProps) props.onDragEnd?.({
534
- event,
535
- node: require_treeUtil.convertNodePropsToEventData(nodeProps)
536
- });
537
- dragNodeProps = null;
538
- window.removeEventListener("dragend", onWindowDragEnd);
539
- }
540
- const onNodeDrop = (event, _nodeProps, outsideTree = false) => {
541
- const dropAllowedValue = dropAllowed.value;
542
- const dropPositionValue = dropPosition.value;
543
- const dropTargetKeyValue = dropTargetKey.value;
544
- const dropTargetPosValue = dropTargetPos.value;
545
- const dragChildrenKeysValue = dragChildrenKeys.value;
546
- const dragNodePropsValue = dragNodeProps;
547
- if (!dropAllowedValue) return;
548
- dragOverNodeKey.value = null;
549
- cleanDragState();
550
- if (dropTargetKeyValue === null) return;
551
- const abstractDropNodeProps = {
552
- ...require_treeUtil.getTreeNodeProps(dropTargetKeyValue, getTreeNodeRequiredProps.value),
553
- active: getActiveItem.value?.key === dropTargetKeyValue,
554
- data: require_keyUtil.default(keyEntities.value, dropTargetKeyValue)?.node
555
- };
556
- (0, _v_c_util_dist_warning.default)(!dragChildrenKeysValue.includes(dropTargetKeyValue), "Can not drop to dragNode's children node. This is a bug of vc-tree. Please report an issue.");
557
- const posArr = require_util.posToArr(dropTargetPosValue || "0");
558
- const dropResult = {
559
- event,
560
- node: require_treeUtil.convertNodePropsToEventData(abstractDropNodeProps),
561
- dragNode: dragNodePropsValue ? require_treeUtil.convertNodePropsToEventData(dragNodePropsValue) : null,
562
- dragNodesKeys: dragNodePropsValue ? [dragNodePropsValue.eventKey].concat(dragChildrenKeysValue) : dragChildrenKeysValue,
563
- dropToGap: dropPositionValue !== 0,
564
- dropPosition: (dropPositionValue || 0) + Number(posArr[posArr.length - 1])
565
- };
566
- if (!outsideTree) props.onDrop?.(dropResult);
567
- dragNodeProps = null;
568
- };
569
- function onKeyDown(e) {
570
- switch (e.which || e.keyCode) {
571
- case _v_c_util_dist_KeyCode.default.UP:
572
- offsetActiveKey(-1);
573
- e.preventDefault();
574
- break;
575
- case _v_c_util_dist_KeyCode.default.DOWN:
576
- offsetActiveKey(1);
577
- e.preventDefault();
578
- break;
579
- }
580
- const activeItem = getActiveItem.value;
581
- if (activeItem && activeItem.data) {
582
- const required = getTreeNodeRequiredProps.value;
583
- const expandable = activeItem.data.isLeaf === false || !!(activeItem.data[mergedFieldNames.value.children] || []).length;
584
- const eventNode = require_treeUtil.convertNodePropsToEventData({
585
- ...require_treeUtil.getTreeNodeProps(activeKey.value, required),
586
- data: activeItem.data,
587
- active: true
588
- });
589
- switch (e.which || e.keyCode) {
590
- case _v_c_util_dist_KeyCode.default.LEFT:
591
- if (expandable && expandedKeys.value.includes(activeKey.value)) onNodeExpand({}, eventNode);
592
- else if (activeItem.parent) onActiveChange(activeItem.parent.key);
593
- e.preventDefault();
594
- break;
595
- case _v_c_util_dist_KeyCode.default.RIGHT:
596
- if (expandable && !expandedKeys.value.includes(activeKey.value)) onNodeExpand({}, eventNode);
597
- else if (activeItem.children && activeItem.children.length) onActiveChange(activeItem.children[0].key);
598
- e.preventDefault();
599
- break;
600
- case _v_c_util_dist_KeyCode.default.ENTER:
601
- case _v_c_util_dist_KeyCode.default.SPACE:
602
- if (mergedCheckable.value && !eventNode.disabled && eventNode.checkable !== false && !eventNode.disableCheckbox) onNodeCheck({}, eventNode, !mergedChecked.value.checkedKeys.includes(activeKey.value));
603
- else if (!mergedCheckable.value && mergedSelectable.value && !eventNode.disabled && eventNode.selectable !== false) onNodeSelect({}, eventNode);
604
- break;
605
- }
606
- }
607
- props.onKeyDown?.(e);
608
- }
609
- const draggableConfig = (0, vue.computed)(() => {
610
- const draggable = props.draggable ?? defaultProps.draggable;
611
- if (!draggable) return void 0;
612
- if (typeof draggable === "object") return draggable;
613
- if (typeof draggable === "function") return { nodeDraggable: draggable };
614
- return {};
615
- });
616
- const contextValue = (0, vue.reactive)({
617
- prefixCls: mergedPrefixCls.value,
618
- selectable: mergedSelectable.value,
619
- showIcon: mergedShowIcon.value,
620
- icon: props.icon,
621
- switcherIcon: props.switcherIcon,
622
- draggable: draggableConfig.value,
623
- draggingNodeKey: draggingNodeKey.value,
624
- checkable: mergedCheckable.value,
625
- checkStrictly: mergedCheckStrictly.value,
626
- disabled: mergedDisabled.value,
627
- keyEntities: keyEntities.value,
628
- dropLevelOffset: dropLevelOffset.value,
629
- dropContainerKey: dropContainerKey.value,
630
- dropTargetKey: dropTargetKey.value,
631
- dropPosition: dropPosition.value,
632
- indent: indent.value,
633
- dropIndicatorRender: (diProps) => {
634
- if (props.dropIndicatorRender) return props.dropIndicatorRender(diProps);
635
- return (0, vue.createVNode)(require_DropIndicator.default, {
636
- "dropPosition": diProps.dropPosition,
637
- "dropLevelOffset": diProps.dropLevelOffset,
638
- "indent": diProps.indent
639
- }, null);
640
- },
641
- dragOverNodeKey: dragOverNodeKey.value,
642
- direction: props.direction,
643
- loadData: props.loadData,
644
- filterTreeNode: props.filterTreeNode,
645
- titleRender: props.titleRender,
646
- allowDrop: mergedAllowDrop.value,
647
- styles: props.styles,
648
- classNames: props.classNames,
649
- onNodeClick,
650
- onNodeDoubleClick,
651
- onNodeExpand,
652
- onNodeSelect,
653
- onNodeCheck,
654
- onNodeLoad,
655
- onNodeMouseEnter,
656
- onNodeMouseLeave,
657
- onNodeContextMenu,
658
- onNodeDragStart,
659
- onNodeDragEnter,
660
- onNodeDragOver,
661
- onNodeDragLeave,
662
- onNodeDragEnd,
663
- onNodeDrop
664
- });
665
- (0, vue.watchEffect)(() => {
666
- contextValue.prefixCls = mergedPrefixCls.value;
667
- contextValue.selectable = mergedSelectable.value;
668
- contextValue.showIcon = mergedShowIcon.value;
669
- contextValue.icon = props.icon;
670
- contextValue.switcherIcon = props.switcherIcon;
671
- contextValue.draggable = draggableConfig.value;
672
- contextValue.draggingNodeKey = draggingNodeKey.value;
673
- contextValue.checkable = mergedCheckable.value;
674
- contextValue.checkStrictly = mergedCheckStrictly.value;
675
- contextValue.disabled = mergedDisabled.value;
676
- contextValue.keyEntities = keyEntities.value;
677
- contextValue.dropLevelOffset = dropLevelOffset.value;
678
- contextValue.dropContainerKey = dropContainerKey.value;
679
- contextValue.dropTargetKey = dropTargetKey.value;
680
- contextValue.dropPosition = dropPosition.value;
681
- contextValue.indent = indent.value;
682
- contextValue.dragOverNodeKey = dragOverNodeKey.value;
683
- contextValue.direction = props.direction;
684
- contextValue.loadData = props.loadData;
685
- contextValue.filterTreeNode = props.filterTreeNode;
686
- contextValue.titleRender = props.titleRender;
687
- contextValue.styles = props.styles;
688
- contextValue.classNames = props.classNames;
689
- contextValue.allowDrop = mergedAllowDrop.value;
690
- });
691
- (0, vue.provide)(require_contextTypes.TreeContextKey, contextValue);
692
- return () => {
693
- const { treeData } = props;
694
- if (!treeData) {
695
- const parsed = require_treeUtil.convertTreeToData(slots.default?.());
696
- const signature = getTreeDataSignature(parsed);
697
- if (signature !== slotTreeDataSignature.value) {
698
- slotTreeDataSignature.value = signature;
699
- slotTreeData.value = parsed;
700
- }
701
- }
702
- const domProps = (0, _v_c_util_dist_pickAttrs.default)(attrs, {
703
- aria: true,
704
- data: true
705
- });
706
- return (0, vue.createVNode)("div", {
707
- "class": (0, _v_c_util.clsx)(mergedPrefixCls.value, props.className, props.rootClassName, {
708
- [`${mergedPrefixCls.value}-show-line`]: mergedShowLine.value,
709
- [`${mergedPrefixCls.value}-focused`]: focused.value,
710
- [`${mergedPrefixCls.value}-active-focused`]: activeKey.value !== null
711
- }),
712
- "style": props.rootStyle
713
- }, [(0, vue.createVNode)(require_NodeList.default, (0, vue.mergeProps)({
714
- "ref": listRef,
715
- "prefixCls": mergedPrefixCls.value,
716
- "style": props.style,
717
- "data": flattenNodes.value,
718
- "disabled": mergedDisabled.value,
719
- "selectable": mergedSelectable.value,
720
- "checkable": !!mergedCheckable.value,
721
- "dragging": draggingNodeKey.value !== null,
722
- "motion": props.motion,
723
- "height": props.height,
724
- "itemHeight": props.itemHeight,
725
- "virtual": mergedVirtual.value,
726
- "focusable": mergedFocusable.value,
727
- "tabIndex": mergedTabIndex.value,
728
- "activeItem": getActiveItem.value,
729
- "onFocus": onFocus,
730
- "onBlur": onBlur,
731
- "onKeyDown": onKeyDown,
732
- "onActiveChange": onActiveChange,
733
- "onListChangeStart": onListChangeStart,
734
- "onListChangeEnd": onListChangeEnd,
735
- "onContextmenu": props.onContextMenu,
736
- "onScroll": props.onScroll,
737
- "scrollWidth": props.scrollWidth
738
- }, getTreeNodeRequiredProps.value, domProps), null)]);
739
- };
740
- }, {
741
- props: /* @__PURE__ */ (0, vue.mergeDefaults)({
742
- prefixCls: {
743
- type: String,
744
- required: false,
745
- default: void 0
746
- },
747
- className: {
748
- type: String,
749
- required: false,
750
- default: void 0
751
- },
752
- style: {
753
- type: Object,
754
- required: false,
755
- default: void 0
756
- },
757
- styles: {
758
- type: Object,
759
- required: false,
760
- default: void 0
761
- },
762
- classNames: {
763
- type: Object,
764
- required: false,
765
- default: void 0
766
- },
767
- focusable: {
768
- type: Boolean,
769
- required: false,
770
- default: void 0
771
- },
772
- activeKey: {
773
- type: [
774
- String,
775
- Number,
776
- null
777
- ],
778
- required: false,
779
- default: void 0
780
- },
781
- tabIndex: {
782
- type: Number,
783
- required: false,
784
- default: void 0
785
- },
786
- treeData: {
787
- type: Array,
788
- required: false,
789
- default: void 0
790
- },
791
- fieldNames: {
792
- type: Object,
793
- required: false,
794
- default: void 0
795
- },
796
- showLine: {
797
- type: Boolean,
798
- required: false,
799
- default: void 0
800
- },
801
- showIcon: {
802
- type: Boolean,
803
- required: false,
804
- default: void 0
805
- },
806
- icon: {
807
- type: [
808
- Object,
809
- Function,
810
- String,
811
- Number,
812
- null,
813
- Boolean,
814
- Array
815
- ],
816
- required: false,
817
- default: void 0
818
- },
819
- selectable: {
820
- type: Boolean,
821
- required: false,
822
- default: void 0
823
- },
824
- expandAction: {
825
- type: [Boolean, String],
826
- required: false,
827
- default: void 0
828
- },
829
- disabled: {
830
- type: Boolean,
831
- required: false,
832
- default: void 0
833
- },
834
- multiple: {
835
- type: Boolean,
836
- required: false,
837
- default: void 0
838
- },
839
- checkable: {
840
- type: [
841
- Boolean,
842
- Object,
843
- Function,
844
- String,
845
- Number,
846
- null,
847
- Array
848
- ],
849
- required: false,
850
- default: void 0
851
- },
852
- checkStrictly: {
853
- type: Boolean,
854
- required: false,
855
- default: void 0
856
- },
857
- draggable: {
858
- type: [
859
- Function,
860
- Boolean,
861
- Object
862
- ],
863
- required: false,
864
- default: void 0
865
- },
866
- defaultExpandParent: {
867
- type: Boolean,
868
- required: false,
869
- default: void 0
870
- },
871
- autoExpandParent: {
872
- type: Boolean,
873
- required: false,
874
- default: void 0
875
- },
876
- defaultExpandAll: {
877
- type: Boolean,
878
- required: false,
879
- default: void 0
880
- },
881
- defaultExpandedKeys: {
882
- type: Array,
883
- required: false,
884
- default: void 0
885
- },
886
- expandedKeys: {
887
- type: Array,
888
- required: false,
889
- default: void 0
890
- },
891
- defaultCheckedKeys: {
892
- type: Array,
893
- required: false,
894
- default: void 0
895
- },
896
- checkedKeys: {
897
- type: [Array, Object],
898
- required: false,
899
- default: void 0
900
- },
901
- defaultSelectedKeys: {
902
- type: Array,
903
- required: false,
904
- default: void 0
905
- },
906
- selectedKeys: {
907
- type: Array,
908
- required: false,
909
- default: void 0
910
- },
911
- allowDrop: {
912
- type: Function,
913
- required: false,
914
- default: void 0
915
- },
916
- titleRender: {
917
- type: Function,
918
- required: false,
919
- default: void 0
920
- },
921
- dropIndicatorRender: {
922
- type: Function,
923
- required: false,
924
- default: void 0
925
- },
926
- onFocus: {
927
- type: Function,
928
- required: false,
929
- default: void 0
930
- },
931
- onBlur: {
932
- type: Function,
933
- required: false,
934
- default: void 0
935
- },
936
- onKeyDown: {
937
- type: Function,
938
- required: false,
939
- default: void 0
940
- },
941
- onContextMenu: {
942
- type: Function,
943
- required: false,
944
- default: void 0
945
- },
946
- onClick: {
947
- type: Function,
948
- required: false,
949
- default: void 0
950
- },
951
- onDoubleClick: {
952
- type: Function,
953
- required: false,
954
- default: void 0
955
- },
956
- onScroll: {
957
- type: Function,
958
- required: false,
959
- default: void 0
960
- },
961
- onExpand: {
962
- type: Function,
963
- required: false,
964
- default: void 0
965
- },
966
- onCheck: {
967
- type: Function,
968
- required: false,
969
- default: void 0
970
- },
971
- onSelect: {
972
- type: Function,
973
- required: false,
974
- default: void 0
975
- },
976
- onLoad: {
977
- type: Function,
978
- required: false,
979
- default: void 0
980
- },
981
- loadData: {
982
- type: Function,
983
- required: false,
984
- default: void 0
985
- },
986
- loadedKeys: {
987
- type: Array,
988
- required: false,
989
- default: void 0
990
- },
991
- onMouseEnter: {
992
- type: Function,
993
- required: false,
994
- default: void 0
995
- },
996
- onMouseLeave: {
997
- type: Function,
998
- required: false,
999
- default: void 0
1000
- },
1001
- onRightClick: {
1002
- type: Function,
1003
- required: false,
1004
- default: void 0
1005
- },
1006
- onDragStart: {
1007
- type: Function,
1008
- required: false,
1009
- default: void 0
1010
- },
1011
- onDragEnter: {
1012
- type: Function,
1013
- required: false,
1014
- default: void 0
1015
- },
1016
- onDragOver: {
1017
- type: Function,
1018
- required: false,
1019
- default: void 0
1020
- },
1021
- onDragLeave: {
1022
- type: Function,
1023
- required: false,
1024
- default: void 0
1025
- },
1026
- onDragEnd: {
1027
- type: Function,
1028
- required: false,
1029
- default: void 0
1030
- },
1031
- onDrop: {
1032
- type: Function,
1033
- required: false,
1034
- default: void 0
1035
- },
1036
- onActiveChange: {
1037
- type: Function,
1038
- required: false,
1039
- default: void 0
1040
- },
1041
- filterTreeNode: {
1042
- type: Function,
1043
- required: false,
1044
- default: void 0
1045
- },
1046
- motion: {
1047
- type: Object,
1048
- required: false,
1049
- default: void 0
1050
- },
1051
- switcherIcon: {
1052
- type: [
1053
- Object,
1054
- Function,
1055
- String,
1056
- Number,
1057
- null,
1058
- Boolean,
1059
- Array
1060
- ],
1061
- required: false,
1062
- default: void 0
1063
- },
1064
- height: {
1065
- type: Number,
1066
- required: false,
1067
- default: void 0
1068
- },
1069
- itemHeight: {
1070
- type: Number,
1071
- required: false,
1072
- default: void 0
1073
- },
1074
- scrollWidth: {
1075
- type: Number,
1076
- required: false,
1077
- default: void 0
1078
- },
1079
- itemScrollOffset: {
1080
- type: Number,
1081
- required: false,
1082
- default: void 0
1083
- },
1084
- virtual: {
1085
- type: Boolean,
1086
- required: false,
1087
- default: void 0
1088
- },
1089
- direction: {
1090
- type: [String, null],
1091
- required: false,
1092
- default: void 0
1093
- },
1094
- rootClassName: {
1095
- type: String,
1096
- required: false,
1097
- default: void 0
1098
- },
1099
- rootStyle: {
1100
- type: Object,
1101
- required: false,
1102
- default: void 0
1103
- }
1104
- }, defaultProps),
1105
- name: "Tree",
1106
- inheritAttrs: false
1107
- });
1108
- var Tree_default = Tree;
1109
- exports.default = Tree_default;