primevue 4.4.0 → 4.5.0

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.
Files changed (97) hide show
  1. package/accordioncontent/AccordionContent.vue +5 -3
  2. package/accordioncontent/index.d.ts +4 -0
  3. package/accordioncontent/index.mjs +4 -2
  4. package/accordioncontent/index.mjs.map +1 -1
  5. package/accordioncontent/style/index.mjs +1 -0
  6. package/accordioncontent/style/index.mjs.map +1 -1
  7. package/autocomplete/AutoComplete.vue +2 -2
  8. package/autocomplete/index.mjs +2 -2
  9. package/autocomplete/index.mjs.map +1 -1
  10. package/cascadeselect/CascadeSelect.vue +2 -2
  11. package/cascadeselect/index.mjs +2 -2
  12. package/cascadeselect/index.mjs.map +1 -1
  13. package/colorpicker/ColorPicker.vue +1 -1
  14. package/colorpicker/index.mjs +1 -1
  15. package/colorpicker/index.mjs.map +1 -1
  16. package/confirmpopup/ConfirmPopup.vue +1 -1
  17. package/confirmpopup/index.mjs +1 -1
  18. package/confirmpopup/index.mjs.map +1 -1
  19. package/contextmenu/ContextMenu.vue +1 -1
  20. package/contextmenu/index.mjs +1 -1
  21. package/contextmenu/index.mjs.map +1 -1
  22. package/datatable/ColumnFilter.vue +2 -2
  23. package/datatable/index.mjs +2 -2
  24. package/datatable/index.mjs.map +1 -1
  25. package/datepicker/DatePicker.vue +28 -26
  26. package/datepicker/index.d.ts +19 -3
  27. package/datepicker/index.mjs +47 -38
  28. package/datepicker/index.mjs.map +1 -1
  29. package/drawer/Drawer.vue +1 -1
  30. package/drawer/index.mjs +3 -3
  31. package/drawer/index.mjs.map +1 -1
  32. package/fieldset/Fieldset.vue +5 -3
  33. package/fieldset/index.d.ts +4 -0
  34. package/fieldset/index.mjs +4 -2
  35. package/fieldset/index.mjs.map +1 -1
  36. package/fieldset/style/index.mjs +1 -0
  37. package/fieldset/style/index.mjs.map +1 -1
  38. package/menu/Menu.vue +3 -3
  39. package/menu/index.mjs +2 -2
  40. package/menu/index.mjs.map +1 -1
  41. package/message/Message.vue +17 -14
  42. package/message/index.d.ts +4 -0
  43. package/message/index.mjs +7 -4
  44. package/message/index.mjs.map +1 -1
  45. package/message/style/index.mjs +1 -0
  46. package/message/style/index.mjs.map +1 -1
  47. package/multiselect/MultiSelect.vue +2 -2
  48. package/multiselect/index.mjs +2 -2
  49. package/multiselect/index.mjs.map +1 -1
  50. package/package.json +6 -6
  51. package/panel/Panel.vue +10 -18
  52. package/panel/index.d.ts +4 -0
  53. package/panel/index.mjs +4 -2
  54. package/panel/index.mjs.map +1 -1
  55. package/panel/style/index.mjs +1 -0
  56. package/panel/style/index.mjs.map +1 -1
  57. package/panelmenu/PanelMenu.vue +14 -12
  58. package/panelmenu/PanelMenuSub.vue +19 -17
  59. package/panelmenu/index.mjs +14 -6
  60. package/panelmenu/index.mjs.map +1 -1
  61. package/panelmenu/style/index.mjs +1 -0
  62. package/panelmenu/style/index.mjs.map +1 -1
  63. package/password/Password.vue +3 -2
  64. package/password/index.mjs +4 -3
  65. package/password/index.mjs.map +1 -1
  66. package/popover/Popover.vue +1 -1
  67. package/popover/index.mjs +1 -1
  68. package/popover/index.mjs.map +1 -1
  69. package/select/Select.vue +2 -2
  70. package/select/index.mjs +2 -2
  71. package/select/index.mjs.map +1 -1
  72. package/speeddial/SpeedDial.vue +1 -1
  73. package/speeddial/index.mjs +1 -1
  74. package/speeddial/index.mjs.map +1 -1
  75. package/splitbutton/SplitButton.vue +1 -1
  76. package/splitbutton/index.mjs +1 -1
  77. package/splitbutton/index.mjs.map +1 -1
  78. package/steppanel/StepPanel.vue +6 -4
  79. package/steppanel/index.d.ts +4 -0
  80. package/steppanel/index.mjs +6 -4
  81. package/steppanel/index.mjs.map +1 -1
  82. package/steppanel/style/index.mjs +1 -0
  83. package/steppanel/style/index.mjs.map +1 -1
  84. package/tieredmenu/TieredMenu.vue +1 -1
  85. package/tieredmenu/index.mjs +1 -1
  86. package/tieredmenu/index.mjs.map +1 -1
  87. package/tree/BaseTree.vue +5 -1
  88. package/tree/Tree.vue +88 -31
  89. package/tree/TreeNode.vue +103 -33
  90. package/tree/index.d.ts +78 -3
  91. package/tree/index.mjs +229 -96
  92. package/tree/index.mjs.map +1 -1
  93. package/treeselect/TreeSelect.vue +3 -2
  94. package/treeselect/index.mjs +6 -5
  95. package/treeselect/index.mjs.map +1 -1
  96. package/umd/primevue.min.js +1 -1
  97. package/web-types.json +1 -1
package/tree/BaseTree.vue CHANGED
@@ -70,7 +70,11 @@ export default {
70
70
  type: Number,
71
71
  default: 0
72
72
  },
73
- dragdrop: {
73
+ draggableNodes: {
74
+ type: Boolean,
75
+ default: null
76
+ },
77
+ droppableNodes: {
74
78
  type: Boolean,
75
79
  default: null
76
80
  },
package/tree/Tree.vue CHANGED
@@ -35,15 +35,19 @@
35
35
  :selectionKeys="selectionKeys"
36
36
  @checkbox-change="onCheckboxChange"
37
37
  :loadingMode="loadingMode"
38
+ :draggableNodes="draggableNodes"
39
+ :droppableNodes="droppableNodes"
38
40
  :draggableScope="draggableScope"
39
- :dragdrop="dragdrop"
40
41
  :validateDrop="validateDrop"
41
42
  @node-drop="onNodeDrop"
43
+ @node-dragenter="onNodeDragEnter"
44
+ @node-dragleave="onNodeDragLeave"
45
+ @value-change="onValueChanged"
42
46
  :unstyled="unstyled"
43
47
  :pt="pt"
44
48
  ></TreeNode>
45
49
  </ul>
46
- <div v-else :class="cx('emptyMessage')" v-bind="ptm('emptyMessage')">
50
+ <div v-else-if="empty && !$pcTreeSelect" :class="cx('emptyMessage')" v-bind="ptm('emptyMessage')">
47
51
  <slot name="empty">
48
52
  {{ emptyMessageText }}
49
53
  </slot>
@@ -69,7 +73,7 @@ export default {
69
73
  name: 'Tree',
70
74
  extends: BaseTree,
71
75
  inheritAttrs: false,
72
- emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect', 'filter', 'node-drop', 'update:value'],
76
+ emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect', 'filter', 'node-drop', 'node-dragenter', 'node-dragleave', 'update:value', 'drag-enter', 'drag-leave'],
73
77
  data() {
74
78
  return {
75
79
  d_expandedKeys: this.expandedKeys || {},
@@ -81,6 +85,9 @@ export default {
81
85
  dragHover: null
82
86
  };
83
87
  },
88
+ inject: {
89
+ $pcTreeSelect: { default: null }
90
+ },
84
91
  dragDropService: null,
85
92
  dragStartCleanup: null,
86
93
  dragStopCleanup: null,
@@ -90,7 +97,7 @@ export default {
90
97
  }
91
98
  },
92
99
  mounted() {
93
- if (this.dragdrop) {
100
+ if (this.droppableNodes) {
94
101
  this.dragDropService = useTreeDragDropService();
95
102
 
96
103
  this.dragStartCleanup = this.dragDropService.onDragStart((event) => {
@@ -272,6 +279,16 @@ export default {
272
279
  onNodeDrop(event) {
273
280
  this.$emit('node-drop', event);
274
281
  },
282
+ onNodeDragEnter(event) {
283
+ this.$emit('node-dragenter', event);
284
+ },
285
+ onNodeDragLeave(event) {
286
+ this.$emit('node-dragleave', event);
287
+ },
288
+ onValueChanged(event) {
289
+ this.dragNodeSubNodes.splice(this.dragNodeIndex, 1);
290
+ this.$emit('update:value', event.nodes);
291
+ },
275
292
  allowDrop(dragNode, dropNode, dragNodeScope) {
276
293
  if (!dragNode) {
277
294
  //prevent random html elements to be dragged
@@ -305,49 +322,79 @@ export default {
305
322
  allowNodeDrop(dropNode) {
306
323
  return this.allowDrop(this.dragNode, dropNode, this.dragNodeScope);
307
324
  },
308
- isValidDragScope(dragScope) {
309
- let dropScope = this.droppableScope;
310
-
311
- if (dropScope !== null) {
312
- if (typeof dropScope === 'string') {
313
- if (typeof dragScope === 'string') return dropScope === dragScope;
314
- else if (Array.isArray(dragScope)) return dragScope.indexOf(dropScope) != -1;
315
- } else if (Array.isArray(dropScope)) {
316
- if (typeof dragScope === 'string') {
317
- return dropScope.indexOf(dragScope) != -1;
318
- } else if (Array.isArray(dragScope)) {
319
- for (let s of dropScope) {
320
- for (let ds of dragScope) {
321
- if (s === ds) {
322
- return true;
323
- }
324
- }
325
+ hasCommonScope(dragScope, dropScope) {
326
+ if (dragScope === null && dropScope === null) {
327
+ return true;
328
+ } else if (dragScope === null || dropScope === null) {
329
+ return false;
330
+ }
331
+
332
+ if (typeof dropScope === 'string') {
333
+ if (typeof dragScope === 'string') {
334
+ return dragScope === dropScope;
335
+ } else if (Array.isArray(dragScope)) {
336
+ return dragScope.indexOf(dropScope) !== -1;
337
+ }
338
+ } else if (Array.isArray(dropScope)) {
339
+ if (typeof dragScope === 'string') {
340
+ return dropScope.indexOf(dragScope) !== -1;
341
+ } else if (Array.isArray(dragScope)) {
342
+ for (let ds of dragScope) {
343
+ if (dropScope.indexOf(ds) !== -1) {
344
+ return true;
325
345
  }
326
346
  }
347
+ return false;
327
348
  }
328
- return false;
329
- } else {
349
+ }
350
+
351
+ return false;
352
+ },
353
+ isValidDragScope(dragScope) {
354
+ if (this.droppableScope === null) {
330
355
  return true;
331
356
  }
357
+
358
+ return this.hasCommonScope(dragScope, this.droppableScope);
359
+ },
360
+ isSameTreeScope(dragScope) {
361
+ return this.hasCommonScope(dragScope, this.draggableScope);
332
362
  },
333
363
  onDragOver(event) {
334
- if (this.dragdrop && (!this.value || this.value.length === 0)) {
335
- event.dataTransfer.dropEffect = 'move';
336
- event.preventDefault();
364
+ if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
365
+ event.dataTransfer.dropEffect = 'copy';
366
+ } else {
367
+ event.dataTransfer.dropEffect = 'none';
337
368
  }
369
+
370
+ event.preventDefault();
338
371
  },
339
- onDragEnter() {
340
- if (this.dragdrop && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
372
+ onDragEnter(event) {
373
+ if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
341
374
  this.dragHover = true;
375
+
376
+ this.$emit('drag-enter', {
377
+ originalEvent: event,
378
+ value: this.value,
379
+ dragNode: this.dragNode,
380
+ dragNodeScope: this.dragNodeScope
381
+ });
342
382
  }
343
383
  },
344
384
  onDragLeave(event) {
345
- if (this.dragdrop) {
385
+ if (this.droppableNodes) {
346
386
  let rect = event.currentTarget.getBoundingClientRect();
347
387
 
348
- if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {
388
+ if (event.x >= parseInt(rect.right) || event.x <= parseInt(rect.left) || event.y >= parseInt(rect.bottom) || event.y <= parseInt(rect.top)) {
349
389
  this.dragHover = false;
350
390
  }
391
+
392
+ this.$emit('drag-leave', {
393
+ originalEvent: event,
394
+ value: this.value,
395
+ dragNode: this.dragNode,
396
+ dragNodeScope: this.dragNodeScope
397
+ });
351
398
  }
352
399
  },
353
400
  processTreeDrop(dragNode, dragNodeIndex) {
@@ -360,16 +407,25 @@ export default {
360
407
  });
361
408
  },
362
409
  onDrop(event) {
363
- if (this.dragdrop && (!this.value || this.value.length === 0)) {
410
+ if (this.droppableNodes) {
364
411
  event.preventDefault();
365
412
  let dragNode = this.dragNode;
366
413
 
367
414
  if (this.allowDrop(dragNode, null, this.dragNodeScope)) {
368
415
  let dragNodeIndex = this.dragNodeIndex;
369
416
 
417
+ if (this.isSameTreeScope(this.dragNodeScope)) {
418
+ this.dragDropService.stopDrag({
419
+ node: dragNode
420
+ });
421
+
422
+ return;
423
+ }
424
+
370
425
  if (this.validateDrop) {
371
426
  this.$emit('node-drop', {
372
427
  originalEvent: event,
428
+ value: this.value,
373
429
  dragNode: dragNode,
374
430
  dropNode: null,
375
431
  index: dragNodeIndex,
@@ -380,6 +436,7 @@ export default {
380
436
  } else {
381
437
  this.$emit('node-drop', {
382
438
  originalEvent: event,
439
+ value: this.value,
383
440
  dragNode: dragNode,
384
441
  dropNode: null,
385
442
  index: dragNodeIndex
package/tree/TreeNode.vue CHANGED
@@ -23,6 +23,7 @@
23
23
  @touchend="onTouchEnd"
24
24
  @dragstart="onNodeDragStart"
25
25
  @dragover="onNodeDragOver"
26
+ @dragenter="onNodeDragEnter"
26
27
  @dragleave="onNodeDragLeave"
27
28
  @dragend="onNodeDragEnd"
28
29
  @drop="onNodeDrop"
@@ -84,9 +85,13 @@
84
85
  :selectionKeys="selectionKeys"
85
86
  @checkbox-change="propagateUp"
86
87
  :draggableScope="draggableScope"
87
- :dragdrop="dragdrop"
88
+ :draggableNodes="draggableNodes"
89
+ :droppableNodes="droppableNodes"
88
90
  :validateDrop="validateDrop"
89
- @node-drop="onChildNodeDrop"
91
+ @node-drop="$emit('node-drop', $event)"
92
+ @node-dragenter="$emit('node-dragenter', $event)"
93
+ @node-dragleave="$emit('node-dragleave', $event)"
94
+ @value-change="$emit('value-change', $event)"
90
95
  :unstyled="unstyled"
91
96
  :pt="pt"
92
97
  />
@@ -109,7 +114,7 @@ export default {
109
114
  name: 'TreeNode',
110
115
  hostName: 'Tree',
111
116
  extends: BaseComponent,
112
- emits: ['node-toggle', 'node-click', 'checkbox-change', 'node-drop'],
117
+ emits: ['node-toggle', 'node-click', 'checkbox-change', 'node-drop', 'value-change', 'node-dragenter', 'node-dragleave'],
113
118
  props: {
114
119
  node: {
115
120
  type: null,
@@ -151,7 +156,11 @@ export default {
151
156
  type: [String, Array],
152
157
  default: null
153
158
  },
154
- dragdrop: {
159
+ draggableNodes: {
160
+ type: Boolean,
161
+ default: null
162
+ },
163
+ droppableNodes: {
155
164
  type: Boolean,
156
165
  default: null
157
166
  },
@@ -342,46 +351,85 @@ export default {
342
351
  onTabKey() {
343
352
  this.setAllNodesTabIndexes();
344
353
  },
345
- onChildNodeDrop(event) {
346
- this.$emit('node-click', event);
354
+ removeNodeFromTree(nodes, nodeToRemove) {
355
+ return nodes.reduce((acc, node) => {
356
+ if (node.key === nodeToRemove.key) {
357
+ return acc;
358
+ }
359
+ if (node.children && node.children.length > 0) {
360
+ const updatedChildren = this.removeNodeFromTree(node.children, nodeToRemove);
361
+ acc.push({ ...node, children: updatedChildren });
362
+ } else {
363
+ acc.push(node);
364
+ }
365
+
366
+ return acc;
367
+ }, []);
368
+ },
369
+ insertNodeInSiblings(nodes, targetKey, nodeToInsert, offset) {
370
+ const targetIndex = nodes.findIndex((n) => n.key === targetKey);
371
+
372
+ if (targetIndex !== -1) {
373
+ return nodes.toSpliced(targetIndex + offset, 0, nodeToInsert);
374
+ }
375
+
376
+ return nodes.map((node) => {
377
+ if (node.children && node.children.length > 0) {
378
+ return { ...node, children: this.insertNodeInSiblings(node.children, targetKey, nodeToInsert, offset) };
379
+ }
380
+
381
+ return node;
382
+ });
383
+ },
384
+ addNodeAsChild(nodes, parentKey, nodeToInsert) {
385
+ return nodes.map((node) => {
386
+ if (node.key === parentKey) {
387
+ return { ...node, children: [...(node.children || []), nodeToInsert] };
388
+ }
389
+
390
+ if (node.children && node.children.length > 0) {
391
+ return { ...node, children: this.addNodeAsChild(node.children, parentKey, nodeToInsert) };
392
+ }
393
+
394
+ return node;
395
+ });
347
396
  },
348
397
  insertNodeOnDrop() {
349
398
  const { dragNode, dragNodeIndex, dragNodeSubNodes, dragDropService } = this.$pcTree;
350
399
 
351
400
  if (!this.node || dragNodeIndex == null || !dragNode || !dragNodeSubNodes) {
352
- return;
401
+ return null;
353
402
  }
354
403
 
355
404
  const position = this.dropPosition;
356
- const subNodes = this.subNodes || [];
357
- const index = this.index || 0;
358
- const dropIndex = dragNodeSubNodes === subNodes ? (dragNodeIndex > index ? index : index - 1) : index;
359
-
360
- dragNodeSubNodes.splice(dragNodeIndex, 1);
405
+ let updatedNodes = this.removeNodeFromTree(this.rootNodes, dragNode);
361
406
 
362
407
  if (position < 0) {
363
408
  // insert before a Node
364
- subNodes.splice(dropIndex, 0, dragNode);
409
+ updatedNodes = this.insertNodeInSiblings(updatedNodes, this.node.key, dragNode, 0);
365
410
  } else if (position > 0) {
366
411
  // insert after a Node
367
- subNodes.splice(dropIndex + 1, 0, dragNode);
412
+ updatedNodes = this.insertNodeInSiblings(updatedNodes, this.node.key, dragNode, 1);
368
413
  } else {
369
414
  // insert as child of a Node
370
- this.node.children = this.node.children || [];
371
- this.node.children.push(dragNode);
415
+ updatedNodes = this.addNodeAsChild(updatedNodes, this.node.key, dragNode);
372
416
  }
373
417
 
418
+ this.$emit('value-change', { nodes: updatedNodes });
419
+
374
420
  dragDropService.stopDrag({
375
421
  node: dragNode,
376
- subNodes,
422
+ subNodes: updatedNodes,
377
423
  index: dragNodeIndex
378
424
  });
425
+
426
+ return updatedNodes;
379
427
  },
380
428
  onNodeDrop(event) {
381
- event.preventDefault();
382
- event.stopPropagation();
383
-
384
429
  if (this.isDroppable) {
430
+ event.preventDefault();
431
+ event.stopPropagation();
432
+
385
433
  const { dragNode } = this.$pcTree;
386
434
  const position = this.dropPosition;
387
435
  const isValidDrop = position !== 0 || (position === 0 && this.isNodeDroppable);
@@ -390,32 +438,44 @@ export default {
390
438
  if (this.validateDrop) {
391
439
  this.$emit('node-drop', {
392
440
  originalEvent: event,
441
+ value: this.rootNodes,
393
442
  dragNode: dragNode,
394
443
  dropNode: this.node,
395
444
  index: this.index,
396
445
  accept: () => {
397
- this.insertNodeOnDrop();
446
+ const updatedNodes = this.insertNodeOnDrop();
447
+
448
+ this.$emit('node-drop', {
449
+ originalEvent: event,
450
+ value: updatedNodes,
451
+ dragNode: dragNode,
452
+ dropNode: this.node,
453
+ index: this.index
454
+ });
398
455
  }
399
456
  });
400
457
  } else {
401
- this.insertNodeOnDrop();
458
+ const updatedNodes = this.insertNodeOnDrop();
459
+
402
460
  this.$emit('node-drop', {
403
461
  originalEvent: event,
462
+ value: updatedNodes,
404
463
  dragNode: dragNode,
405
464
  dropNode: this.node,
406
465
  index: this.index
407
466
  });
408
467
  }
409
468
  }
410
- }
411
469
 
412
- this.isPrevDropPointHovered = false;
413
- this.isNextDropPointHovered = false;
414
- this.isNodeDropHovered = false;
470
+ this.isPrevDropPointHovered = false;
471
+ this.isNextDropPointHovered = false;
472
+ this.isNodeDropHovered = false;
473
+ }
415
474
  },
416
475
  onNodeDragStart(event) {
417
476
  if (this.isNodeDraggable) {
418
- event.dataTransfer?.setData('text', 'data');
477
+ event.dataTransfer.effectAllowed = 'all';
478
+ event.dataTransfer.setData('text', 'data');
419
479
 
420
480
  const target = event.currentTarget;
421
481
  const dragEl = target.cloneNode(true);
@@ -429,7 +489,7 @@ export default {
429
489
  toggler.style.visibility = 'hidden';
430
490
  checkbox?.remove();
431
491
  document.body.appendChild(dragEl);
432
- event.dataTransfer?.setDragImage(dragEl, 0, 0);
492
+ event.dataTransfer.setDragImage(dragEl, 0, 0);
433
493
 
434
494
  setTimeout(() => document.body.removeChild(dragEl), 0);
435
495
 
@@ -444,9 +504,8 @@ export default {
444
504
  }
445
505
  },
446
506
  onNodeDragOver(event) {
447
- event.dataTransfer.dropEffect = 'move';
448
-
449
507
  if (this.isDroppable) {
508
+ event.dataTransfer.dropEffect = 'copy';
450
509
  const nodeElement = event.currentTarget;
451
510
  const rect = nodeElement.getBoundingClientRect();
452
511
  const y = event.clientY - rect.top;
@@ -462,14 +521,25 @@ export default {
462
521
  } else if (this.isNodeDroppable) {
463
522
  this.isNodeDropHovered = true;
464
523
  }
524
+ } else {
525
+ event.dataTransfer.dropEffect = 'none';
465
526
  }
466
527
 
467
- if (this.dragdrop) {
528
+ if (this.droppableNodes) {
468
529
  event.preventDefault();
469
530
  event.stopPropagation();
470
531
  }
471
532
  },
533
+ onNodeDragEnter() {
534
+ this.$emit('node-dragenter', {
535
+ node: this.node
536
+ });
537
+ },
472
538
  onNodeDragLeave() {
539
+ this.$emit('node-dragleave', {
540
+ node: this.node
541
+ });
542
+
473
543
  this.isPrevDropPointHovered = false;
474
544
  this.isNextDropPointHovered = false;
475
545
  this.isNodeDropHovered = false;
@@ -667,10 +737,10 @@ export default {
667
737
  return this.parentNode ? this.parentNode.children : this.rootNodes;
668
738
  },
669
739
  isDraggable() {
670
- return this.dragdrop;
740
+ return this.draggableNodes;
671
741
  },
672
742
  isDroppable() {
673
- return this.dragdrop && this.$pcTree.allowNodeDrop(this.node);
743
+ return this.droppableNodes && this.$pcTree.allowNodeDrop(this.node);
674
744
  },
675
745
  isNodeDraggable() {
676
746
  return this.node?.draggable !== false && this.isDraggable;
package/tree/index.d.ts CHANGED
@@ -106,6 +106,10 @@ export interface TreeNodeDropEvent {
106
106
  * Original event
107
107
  */
108
108
  originalEvent: Event;
109
+ /**
110
+ * New tree value state
111
+ */
112
+ value: TreeNode[];
109
113
  /**
110
114
  * Dragged node
111
115
  */
@@ -120,6 +124,52 @@ export interface TreeNodeDropEvent {
120
124
  index: number;
121
125
  }
122
126
 
127
+ /**
128
+ * Custom tree drag enter event.
129
+ * @see {@link TreeEmitsOptions.drag-enter}
130
+ */
131
+ export interface TreeDragEnterEvent {
132
+ /**
133
+ * Original event
134
+ */
135
+ originalEvent: Event;
136
+ /**
137
+ * Current tree value state
138
+ */
139
+ value: TreeNode[];
140
+ /**
141
+ * Dragged node
142
+ */
143
+ dragNode: TreeNode;
144
+ /**
145
+ * Dragged node's scope
146
+ */
147
+ dragNodeScope: string;
148
+ }
149
+
150
+ /**
151
+ * Custom tree drag leave event.
152
+ * @see {@link TreeEmitsOptions.drag-leave}
153
+ */
154
+ export interface TreeDragLeaveEvent {
155
+ /**
156
+ * Original event
157
+ */
158
+ originalEvent: Event;
159
+ /**
160
+ * Current tree value state
161
+ */
162
+ value: TreeNode[];
163
+ /**
164
+ * Dragged node
165
+ */
166
+ dragNode: TreeNode;
167
+ /**
168
+ * Dragged node's scope
169
+ */
170
+ dragNodeScope: string;
171
+ }
172
+
123
173
  /**
124
174
  * Custom passthrough(pt) options.
125
175
  * @see {@link TreeProps.pt}
@@ -344,10 +394,15 @@ export interface TreeProps {
344
394
  */
345
395
  scrollHeight?: HintedString<'flex'> | undefined;
346
396
  /**
347
- * Whether the nodes are draggable and droppable.
397
+ * Whether the nodes are draggable.
348
398
  * @defaultValue null
349
399
  */
350
- dragdrop?: boolean | undefined;
400
+ draggableNodes?: boolean | undefined;
401
+ /**
402
+ * Whether the nodes are droppable.
403
+ * @defaultValue null
404
+ */
405
+ droppableNodes?: boolean | undefined;
351
406
  /**
352
407
  * Scope of the draggable nodes to match a droppableScope.
353
408
  * @defaultValue null
@@ -604,14 +659,34 @@ export interface TreeEmitsOptions {
604
659
  'node-collapse'(node: TreeNode): void;
605
660
  /**
606
661
  * Callback to invoke when a node is collapsed.
662
+ * @param {TreeNode} event
663
+ */
664
+ 'node-drop'(event: TreeNodeDropEvent): void;
665
+ /**
666
+ * Callback to invoke when a dragged element enters a node.
607
667
  * @param {TreeNode} node - Node instance.
608
668
  */
609
- 'node-drop'(node: TreeNodeDropEvent): void;
669
+ 'node-dragenter'(node: TreeNode): void;
670
+ /**
671
+ * Callback to invoke when a dragged element leaves a node.
672
+ * @param {TreeNode} node - Node instance.
673
+ */
674
+ 'node-dragleave'(node: TreeNode): void;
610
675
  /**
611
676
  * Callback to invoke on filter input.
612
677
  * @param {TreeFilterEvent} event - Custom filter event.
613
678
  */
614
679
  'filter'(event: TreeFilterEvent): void;
680
+ /**
681
+ * Callback to invoke on drag enter.
682
+ * @param {TreeDragEnterEvent} event - Custom drag enter event.
683
+ */
684
+ 'drag-enter'(event: TreeDragEnterEvent): void;
685
+ /**
686
+ * Callback to invoke on drag leave.
687
+ * @param {TreeDragLeaveEvent} event - Custom drag leave event.
688
+ */
689
+ 'drag-leave'(event: TreeDragLeaveEvent): void;
615
690
  }
616
691
 
617
692
  export declare type TreeEmits = EmitFn<TreeEmitsOptions>;