primevue 4.3.9 → 4.4.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 (88) hide show
  1. package/autocomplete/AutoComplete.vue +18 -3
  2. package/autocomplete/BaseAutoComplete.vue +4 -0
  3. package/autocomplete/index.d.ts +20 -0
  4. package/autocomplete/index.mjs +34 -7
  5. package/autocomplete/index.mjs.map +1 -1
  6. package/autocomplete/style/index.d.ts +4 -0
  7. package/autocomplete/style/index.mjs +3 -1
  8. package/autocomplete/style/index.mjs.map +1 -1
  9. package/checkbox/Checkbox.vue +15 -2
  10. package/checkbox/index.mjs +14 -2
  11. package/checkbox/index.mjs.map +1 -1
  12. package/colorpicker/ColorPicker.vue +3 -4
  13. package/colorpicker/index.mjs +3 -3
  14. package/colorpicker/index.mjs.map +1 -1
  15. package/confirmdialog/ConfirmDialog.vue +1 -1
  16. package/confirmdialog/index.d.ts +5 -0
  17. package/confirmdialog/index.mjs +3 -2
  18. package/confirmdialog/index.mjs.map +1 -1
  19. package/datatable/DataTable.vue +2 -2
  20. package/datatable/HeaderCheckbox.vue +3 -3
  21. package/datatable/index.mjs +12 -3
  22. package/datatable/index.mjs.map +1 -1
  23. package/datepicker/BaseDatePicker.vue +8 -0
  24. package/datepicker/DatePicker.vue +199 -81
  25. package/datepicker/index.d.ts +25 -0
  26. package/datepicker/index.mjs +258 -150
  27. package/datepicker/index.mjs.map +1 -1
  28. package/datepicker/style/index.d.ts +4 -0
  29. package/datepicker/style/index.mjs +5 -2
  30. package/datepicker/style/index.mjs.map +1 -1
  31. package/drawer/BaseDrawer.vue +4 -0
  32. package/drawer/Drawer.vue +4 -4
  33. package/drawer/index.d.ts +5 -0
  34. package/drawer/index.mjs +8 -4
  35. package/drawer/index.mjs.map +1 -1
  36. package/editor/Editor.vue +5 -1
  37. package/editor/index.mjs +5 -0
  38. package/editor/index.mjs.map +1 -1
  39. package/image/index.d.ts +5 -11
  40. package/inputmask/InputMask.vue +1 -2
  41. package/inputmask/index.mjs +1 -1
  42. package/inputmask/index.mjs.map +1 -1
  43. package/inputnumber/BaseInputNumber.vue +4 -0
  44. package/inputnumber/InputNumber.vue +30 -5
  45. package/inputnumber/index.d.ts +20 -0
  46. package/inputnumber/index.mjs +45 -7
  47. package/inputnumber/index.mjs.map +1 -1
  48. package/inputnumber/style/index.mjs +1 -0
  49. package/inputnumber/style/index.mjs.map +1 -1
  50. package/inputotp/InputOtp.vue +7 -3
  51. package/inputotp/index.mjs +6 -3
  52. package/inputotp/index.mjs.map +1 -1
  53. package/listbox/Listbox.vue +1 -1
  54. package/listbox/index.mjs +1 -1
  55. package/listbox/index.mjs.map +1 -1
  56. package/multiselect/MultiSelect.vue +9 -5
  57. package/multiselect/index.mjs +14 -10
  58. package/multiselect/index.mjs.map +1 -1
  59. package/package.json +5 -5
  60. package/panel/Panel.vue +1 -1
  61. package/panel/index.d.ts +4 -0
  62. package/panel/index.mjs +2 -1
  63. package/panel/index.mjs.map +1 -1
  64. package/password/BasePassword.vue +4 -0
  65. package/password/Password.vue +12 -1
  66. package/password/index.d.ts +20 -0
  67. package/password/index.mjs +23 -1
  68. package/password/index.mjs.map +1 -1
  69. package/password/style/index.d.ts +4 -0
  70. package/password/style/index.mjs +1 -0
  71. package/password/style/index.mjs.map +1 -1
  72. package/select/Select.vue +1 -0
  73. package/select/index.mjs +1 -0
  74. package/select/index.mjs.map +1 -1
  75. package/tree/BaseTree.vue +16 -0
  76. package/tree/Tree.vue +179 -4
  77. package/tree/TreeNode.vue +225 -3
  78. package/tree/index.d.ts +65 -0
  79. package/tree/index.mjs +499 -22
  80. package/tree/index.mjs.map +1 -1
  81. package/tree/style/index.mjs +9 -4
  82. package/tree/style/index.mjs.map +1 -1
  83. package/treenode/index.d.ts +12 -0
  84. package/treeselect/TreeSelect.vue +1 -1
  85. package/treeselect/index.mjs +1 -1
  86. package/treeselect/index.mjs.map +1 -1
  87. package/umd/primevue.min.js +1 -1
  88. package/web-types.json +1 -1
package/tree/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { cn } from '@primeuix/utils';
1
+ import { getAttribute, findSingle, find, getOuterWidth, getOuterHeight, cn } from '@primeuix/utils';
2
2
  import { isFunction, resolveFieldData } from '@primeuix/utils/object';
3
3
  import SearchIcon from '@primevue/icons/search';
4
4
  import SpinnerIcon from '@primevue/icons/spinner';
@@ -7,14 +7,13 @@ import InputIcon from 'primevue/inputicon';
7
7
  import InputText from 'primevue/inputtext';
8
8
  import BaseComponent from '@primevue/core/basecomponent';
9
9
  import TreeStyle from 'primevue/tree/style';
10
- import { getAttribute, findSingle, find } from '@primeuix/utils/dom';
10
+ import { reactive, resolveComponent, resolveDirective, createElementBlock, openBlock, mergeProps, createCommentVNode, createElementVNode, normalizeClass, withDirectives, createBlock, Fragment, resolveDynamicComponent, withCtx, withModifiers, createTextVNode, toDisplayString, renderList, renderSlot, createVNode } from 'vue';
11
11
  import CheckIcon from '@primevue/icons/check';
12
12
  import ChevronDownIcon from '@primevue/icons/chevrondown';
13
13
  import ChevronRightIcon from '@primevue/icons/chevronright';
14
14
  import MinusIcon from '@primevue/icons/minus';
15
15
  import Checkbox from 'primevue/checkbox';
16
16
  import Ripple from 'primevue/ripple';
17
- import { resolveComponent, resolveDirective, createElementBlock, openBlock, mergeProps, createElementVNode, createCommentVNode, withDirectives, createBlock, Fragment, resolveDynamicComponent, normalizeClass, withCtx, withModifiers, createTextVNode, toDisplayString, renderList, renderSlot, createVNode } from 'vue';
18
17
 
19
18
  var script$2 = {
20
19
  name: 'BaseTree',
@@ -84,6 +83,22 @@ var script$2 = {
84
83
  type: Number,
85
84
  "default": 0
86
85
  },
86
+ dragdrop: {
87
+ type: Boolean,
88
+ "default": null
89
+ },
90
+ draggableScope: {
91
+ type: [String, Array],
92
+ "default": null
93
+ },
94
+ droppableScope: {
95
+ type: [String, Array],
96
+ "default": null
97
+ },
98
+ validateDrop: {
99
+ type: Boolean,
100
+ "default": false
101
+ },
87
102
  ariaLabelledby: {
88
103
  type: String,
89
104
  "default": null
@@ -102,6 +117,51 @@ var script$2 = {
102
117
  }
103
118
  };
104
119
 
120
+ var dragState = reactive({
121
+ isDragging: false,
122
+ dragNode: null,
123
+ dragScope: null
124
+ });
125
+ var dragStartHandlers = new Set();
126
+ var dragStopHandlers = new Set();
127
+ function useTreeDragDropService() {
128
+ var startDrag = function startDrag(event) {
129
+ dragState.isDragging = true;
130
+ dragState.dragNode = event.node;
131
+ dragState.dragScope = event.scope;
132
+ dragStartHandlers.forEach(function (handler) {
133
+ return handler(event);
134
+ });
135
+ };
136
+ var stopDrag = function stopDrag(event) {
137
+ dragState.isDragging = false;
138
+ dragState.dragNode = null;
139
+ dragState.dragScope = null;
140
+ dragStopHandlers.forEach(function (handler) {
141
+ return handler(event);
142
+ });
143
+ };
144
+ var onDragStart = function onDragStart(handler) {
145
+ dragStartHandlers.add(handler);
146
+ return function () {
147
+ return dragStartHandlers["delete"](handler);
148
+ };
149
+ };
150
+ var onDragStop = function onDragStop(handler) {
151
+ dragStopHandlers.add(handler);
152
+ return function () {
153
+ return dragStopHandlers["delete"](handler);
154
+ };
155
+ };
156
+ return {
157
+ dragState: dragState,
158
+ startDrag: startDrag,
159
+ stopDrag: stopDrag,
160
+ onDragStart: onDragStart,
161
+ onDragStop: onDragStop
162
+ };
163
+ }
164
+
105
165
  function _typeof$2(o) { "@babel/helpers - typeof"; return _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$2(o); }
106
166
  function _createForOfIteratorHelper$1(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(r)) || e) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: true } : { done: false, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = true, u = false; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = true, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
107
167
  function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -119,12 +179,20 @@ var script$1 = {
119
179
  name: 'TreeNode',
120
180
  hostName: 'Tree',
121
181
  "extends": BaseComponent,
122
- emits: ['node-toggle', 'node-click', 'checkbox-change'],
182
+ emits: ['node-toggle', 'node-click', 'checkbox-change', 'node-drop'],
123
183
  props: {
124
184
  node: {
125
185
  type: null,
126
186
  "default": null
127
187
  },
188
+ parentNode: {
189
+ type: null,
190
+ "default": null
191
+ },
192
+ rootNodes: {
193
+ type: Array,
194
+ "default": null
195
+ },
128
196
  expandedKeys: {
129
197
  type: null,
130
198
  "default": null
@@ -149,10 +217,34 @@ var script$1 = {
149
217
  type: Number,
150
218
  "default": null
151
219
  },
220
+ draggableScope: {
221
+ type: [String, Array],
222
+ "default": null
223
+ },
224
+ dragdrop: {
225
+ type: Boolean,
226
+ "default": null
227
+ },
228
+ validateDrop: {
229
+ type: Boolean,
230
+ "default": false
231
+ },
152
232
  index: null
153
233
  },
154
234
  nodeTouched: false,
155
235
  toggleClicked: false,
236
+ inject: {
237
+ $pcTree: {
238
+ "default": undefined
239
+ }
240
+ },
241
+ data: function data() {
242
+ return {
243
+ isPrevDropPointHovered: false,
244
+ isNextDropPointHovered: false,
245
+ isNodeDropHovered: false
246
+ };
247
+ },
156
248
  mounted: function mounted() {
157
249
  this.setAllNodesTabIndexes();
158
250
  },
@@ -289,6 +381,139 @@ var script$1 = {
289
381
  onTabKey: function onTabKey() {
290
382
  this.setAllNodesTabIndexes();
291
383
  },
384
+ onChildNodeDrop: function onChildNodeDrop(event) {
385
+ this.$emit('node-click', event);
386
+ },
387
+ insertNodeOnDrop: function insertNodeOnDrop() {
388
+ var _this$$pcTree = this.$pcTree,
389
+ dragNode = _this$$pcTree.dragNode,
390
+ dragNodeIndex = _this$$pcTree.dragNodeIndex,
391
+ dragNodeSubNodes = _this$$pcTree.dragNodeSubNodes,
392
+ dragDropService = _this$$pcTree.dragDropService;
393
+ if (!this.node || dragNodeIndex == null || !dragNode || !dragNodeSubNodes) {
394
+ return;
395
+ }
396
+ var position = this.dropPosition;
397
+ var subNodes = this.subNodes || [];
398
+ var index = this.index || 0;
399
+ var dropIndex = dragNodeSubNodes === subNodes ? dragNodeIndex > index ? index : index - 1 : index;
400
+ dragNodeSubNodes.splice(dragNodeIndex, 1);
401
+ if (position < 0) {
402
+ // insert before a Node
403
+ subNodes.splice(dropIndex, 0, dragNode);
404
+ } else if (position > 0) {
405
+ // insert after a Node
406
+ subNodes.splice(dropIndex + 1, 0, dragNode);
407
+ } else {
408
+ // insert as child of a Node
409
+ this.node.children = this.node.children || [];
410
+ this.node.children.push(dragNode);
411
+ }
412
+ dragDropService.stopDrag({
413
+ node: dragNode,
414
+ subNodes: subNodes,
415
+ index: dragNodeIndex
416
+ });
417
+ },
418
+ onNodeDrop: function onNodeDrop(event) {
419
+ var _this2 = this;
420
+ event.preventDefault();
421
+ event.stopPropagation();
422
+ if (this.isDroppable) {
423
+ var dragNode = this.$pcTree.dragNode;
424
+ var position = this.dropPosition;
425
+ var isValidDrop = position !== 0 || position === 0 && this.isNodeDroppable;
426
+ if (isValidDrop) {
427
+ if (this.validateDrop) {
428
+ this.$emit('node-drop', {
429
+ originalEvent: event,
430
+ dragNode: dragNode,
431
+ dropNode: this.node,
432
+ index: this.index,
433
+ accept: function accept() {
434
+ _this2.insertNodeOnDrop();
435
+ }
436
+ });
437
+ } else {
438
+ this.insertNodeOnDrop();
439
+ this.$emit('node-drop', {
440
+ originalEvent: event,
441
+ dragNode: dragNode,
442
+ dropNode: this.node,
443
+ index: this.index
444
+ });
445
+ }
446
+ }
447
+ }
448
+ this.isPrevDropPointHovered = false;
449
+ this.isNextDropPointHovered = false;
450
+ this.isNodeDropHovered = false;
451
+ },
452
+ onNodeDragStart: function onNodeDragStart(event) {
453
+ if (this.isNodeDraggable) {
454
+ var _event$dataTransfer, _event$dataTransfer2;
455
+ (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 || _event$dataTransfer.setData('text', 'data');
456
+ var target = event.currentTarget;
457
+ var dragEl = target.cloneNode(true);
458
+ var toggler = dragEl.querySelector('[data-pc-section="nodetogglebutton"]');
459
+ var checkbox = dragEl.querySelector('[data-pc-name="pcnodecheckbox"]');
460
+ target.setAttribute('data-p-dragging', 'true');
461
+ dragEl.style.width = getOuterWidth(target) + 'px';
462
+ dragEl.style.height = getOuterHeight(target) + 'px';
463
+ dragEl.setAttribute('data-pc-section', 'drag-image');
464
+ toggler.style.visibility = 'hidden';
465
+ checkbox === null || checkbox === void 0 || checkbox.remove();
466
+ document.body.appendChild(dragEl);
467
+ (_event$dataTransfer2 = event.dataTransfer) === null || _event$dataTransfer2 === void 0 || _event$dataTransfer2.setDragImage(dragEl, 0, 0);
468
+ setTimeout(function () {
469
+ return document.body.removeChild(dragEl);
470
+ }, 0);
471
+ this.$pcTree.dragDropService.startDrag({
472
+ node: this.node,
473
+ subNodes: this.subNodes,
474
+ index: this.index,
475
+ scope: this.draggableScope
476
+ });
477
+ } else {
478
+ event.preventDefault();
479
+ }
480
+ },
481
+ onNodeDragOver: function onNodeDragOver(event) {
482
+ event.dataTransfer.dropEffect = 'move';
483
+ if (this.isDroppable) {
484
+ var nodeElement = event.currentTarget;
485
+ var rect = nodeElement.getBoundingClientRect();
486
+ var y = event.clientY - rect.top;
487
+ this.isPrevDropPointHovered = false;
488
+ this.isNextDropPointHovered = false;
489
+ this.isNodeDropHovered = false;
490
+ if (y < rect.height * 0.25) {
491
+ this.isPrevDropPointHovered = true;
492
+ } else if (y > rect.height * 0.75) {
493
+ this.isNextDropPointHovered = true;
494
+ } else if (this.isNodeDroppable) {
495
+ this.isNodeDropHovered = true;
496
+ }
497
+ }
498
+ if (this.dragdrop) {
499
+ event.preventDefault();
500
+ event.stopPropagation();
501
+ }
502
+ },
503
+ onNodeDragLeave: function onNodeDragLeave() {
504
+ this.isPrevDropPointHovered = false;
505
+ this.isNextDropPointHovered = false;
506
+ this.isNodeDropHovered = false;
507
+ },
508
+ onNodeDragEnd: function onNodeDragEnd(event) {
509
+ var _event$currentTarget;
510
+ (_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 || _event$currentTarget.removeAttribute('data-p-dragging');
511
+ this.$pcTree.dragDropService.stopDrag({
512
+ node: this.node,
513
+ subNodes: this.subNodes,
514
+ index: this.index
515
+ });
516
+ },
292
517
  setAllNodesTabIndexes: function setAllNodesTabIndexes() {
293
518
  var nodes = find(this.$refs.currentNode.closest('[data-pc-section="rootchildren"]'), '[role="treeitem"]');
294
519
  var hasSelectedNode = _toConsumableArray$1(nodes).some(function (node) {
@@ -464,6 +689,35 @@ var script$1 = {
464
689
  },
465
690
  ariaSelected: function ariaSelected() {
466
691
  return this.checkboxMode ? this.checked : undefined;
692
+ },
693
+ isPrevDropPointActive: function isPrevDropPointActive() {
694
+ return this.isPrevDropPointHovered && this.isDroppable;
695
+ },
696
+ isNextDropPointActive: function isNextDropPointActive() {
697
+ return this.isNextDropPointHovered && this.isDroppable;
698
+ },
699
+ dropPosition: function dropPosition() {
700
+ return this.isPrevDropPointActive ? -1 : this.isNextDropPointActive ? 1 : 0;
701
+ },
702
+ subNodes: function subNodes() {
703
+ return this.parentNode ? this.parentNode.children : this.rootNodes;
704
+ },
705
+ isDraggable: function isDraggable() {
706
+ return this.dragdrop;
707
+ },
708
+ isDroppable: function isDroppable() {
709
+ return this.dragdrop && this.$pcTree.allowNodeDrop(this.node);
710
+ },
711
+ isNodeDraggable: function isNodeDraggable() {
712
+ var _this$node;
713
+ return ((_this$node = this.node) === null || _this$node === void 0 ? void 0 : _this$node.draggable) !== false && this.isDraggable;
714
+ },
715
+ isNodeDroppable: function isNodeDroppable() {
716
+ var _this$node2;
717
+ return ((_this$node2 = this.node) === null || _this$node2 === void 0 ? void 0 : _this$node2.droppable) !== false && this.isDroppable;
718
+ },
719
+ isNodeDropActive: function isNodeDropActive() {
720
+ return this.isNodeDropHovered && this.isNodeDroppable;
467
721
  }
468
722
  },
469
723
  components: {
@@ -480,7 +734,7 @@ var script$1 = {
480
734
  };
481
735
 
482
736
  var _hoisted_1$1 = ["aria-label", "aria-selected", "aria-expanded", "aria-setsize", "aria-posinset", "aria-level", "aria-checked", "tabindex"];
483
- var _hoisted_2$1 = ["data-p-selected", "data-p-selectable"];
737
+ var _hoisted_2$1 = ["draggable", "data-p-selected", "data-p-selectable"];
484
738
  var _hoisted_3$1 = ["data-p-leaf"];
485
739
  function render$1(_ctx, _cache, $props, $setup, $data, $options) {
486
740
  var _component_SpinnerIcon = resolveComponent("SpinnerIcon");
@@ -499,18 +753,38 @@ function render$1(_ctx, _cache, $props, $setup, $data, $options) {
499
753
  "aria-level": $props.level,
500
754
  "aria-checked": $options.ariaChecked,
501
755
  tabindex: $props.index === 0 ? 0 : -1,
502
- onKeydown: _cache[4] || (_cache[4] = function () {
756
+ onKeydown: _cache[9] || (_cache[9] = function () {
503
757
  return $options.onKeyDown && $options.onKeyDown.apply($options, arguments);
504
758
  })
505
- }, $options.getPTOptions('node')), [createElementVNode("div", mergeProps({
759
+ }, $options.getPTOptions('node')), [$options.isPrevDropPointActive ? (openBlock(), createElementBlock("div", {
760
+ key: 0,
761
+ "class": normalizeClass(_ctx.cx('dropPoint')),
762
+ "aria-hidden": "true"
763
+ }, null, 2)) : createCommentVNode("", true), createElementVNode("div", mergeProps({
506
764
  "class": _ctx.cx('nodeContent'),
765
+ style: $props.node.style,
766
+ draggable: $options.isDraggable,
507
767
  onClick: _cache[2] || (_cache[2] = function () {
508
768
  return $options.onClick && $options.onClick.apply($options, arguments);
509
769
  }),
510
770
  onTouchend: _cache[3] || (_cache[3] = function () {
511
771
  return $options.onTouchEnd && $options.onTouchEnd.apply($options, arguments);
512
772
  }),
513
- style: $props.node.style
773
+ onDragstart: _cache[4] || (_cache[4] = function () {
774
+ return $options.onNodeDragStart && $options.onNodeDragStart.apply($options, arguments);
775
+ }),
776
+ onDragover: _cache[5] || (_cache[5] = function () {
777
+ return $options.onNodeDragOver && $options.onNodeDragOver.apply($options, arguments);
778
+ }),
779
+ onDragleave: _cache[6] || (_cache[6] = function () {
780
+ return $options.onNodeDragLeave && $options.onNodeDragLeave.apply($options, arguments);
781
+ }),
782
+ onDragend: _cache[7] || (_cache[7] = function () {
783
+ return $options.onNodeDragEnd && $options.onNodeDragEnd.apply($options, arguments);
784
+ }),
785
+ onDrop: _cache[8] || (_cache[8] = function () {
786
+ return $options.onNodeDrop && $options.onNodeDrop.apply($options, arguments);
787
+ })
514
788
  }, $options.getPTOptions('nodeContent'), {
515
789
  "data-p-selected": $options.checkboxMode ? $options.checked : $options.selected,
516
790
  "data-p-selectable": $options.selectable
@@ -584,14 +858,20 @@ function render$1(_ctx, _cache, $props, $setup, $data, $options) {
584
858
  selected: $options.checkboxMode ? $options.checked : $options.selected
585
859
  }, null, 8, ["node", "expanded", "selected"])) : (openBlock(), createElementBlock(Fragment, {
586
860
  key: 1
587
- }, [createTextVNode(toDisplayString($options.label($props.node)), 1)], 64))], 16)], 16, _hoisted_2$1), $options.hasChildren && $options.expanded ? (openBlock(), createElementBlock("ul", mergeProps({
588
- key: 0,
861
+ }, [createTextVNode(toDisplayString($options.label($props.node)), 1)], 64))], 16)], 16, _hoisted_2$1), $options.isNextDropPointActive ? (openBlock(), createElementBlock("div", {
862
+ key: 1,
863
+ "class": normalizeClass(_ctx.cx('dropPoint')),
864
+ "aria-hidden": "true"
865
+ }, null, 2)) : createCommentVNode("", true), $options.hasChildren && $options.expanded ? (openBlock(), createElementBlock("ul", mergeProps({
866
+ key: 2,
589
867
  "class": _ctx.cx('nodeChildren'),
590
868
  role: "group"
591
869
  }, _ctx.ptm('nodeChildren')), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.node.children, function (childNode, index) {
592
870
  return openBlock(), createBlock(_component_TreeNode, {
593
871
  key: childNode.key,
594
872
  node: childNode,
873
+ parentNode: $props.node,
874
+ rootNodes: $props.rootNodes,
595
875
  templates: $props.templates,
596
876
  level: $props.level + 1,
597
877
  index: index,
@@ -602,9 +882,13 @@ function render$1(_ctx, _cache, $props, $setup, $data, $options) {
602
882
  selectionMode: $props.selectionMode,
603
883
  selectionKeys: $props.selectionKeys,
604
884
  onCheckboxChange: $options.propagateUp,
885
+ draggableScope: $props.draggableScope,
886
+ dragdrop: $props.dragdrop,
887
+ validateDrop: $props.validateDrop,
888
+ onNodeDrop: $options.onChildNodeDrop,
605
889
  unstyled: _ctx.unstyled,
606
890
  pt: _ctx.pt
607
- }, null, 8, ["node", "templates", "level", "index", "loadingMode", "expandedKeys", "onNodeToggle", "onNodeClick", "selectionMode", "selectionKeys", "onCheckboxChange", "unstyled", "pt"]);
891
+ }, null, 8, ["node", "parentNode", "rootNodes", "templates", "level", "index", "loadingMode", "expandedKeys", "onNodeToggle", "onNodeClick", "selectionMode", "selectionKeys", "onCheckboxChange", "draggableScope", "dragdrop", "validateDrop", "onNodeDrop", "unstyled", "pt"]);
608
892
  }), 128))], 16)) : createCommentVNode("", true)], 16, _hoisted_1$1);
609
893
  }
610
894
 
@@ -627,18 +911,53 @@ var script = {
627
911
  name: 'Tree',
628
912
  "extends": script$2,
629
913
  inheritAttrs: false,
630
- emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect', 'filter'],
914
+ emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect', 'filter', 'node-drop', 'update:value'],
631
915
  data: function data() {
632
916
  return {
633
917
  d_expandedKeys: this.expandedKeys || {},
634
- filterValue: null
918
+ filterValue: null,
919
+ dragNode: null,
920
+ dragNodeSubNodes: null,
921
+ dragNodeIndex: null,
922
+ dragNodeScope: null,
923
+ dragHover: null
635
924
  };
636
925
  },
926
+ dragDropService: null,
927
+ dragStartCleanup: null,
928
+ dragStopCleanup: null,
637
929
  watch: {
638
930
  expandedKeys: function expandedKeys(newValue) {
639
931
  this.d_expandedKeys = newValue;
640
932
  }
641
933
  },
934
+ mounted: function mounted() {
935
+ var _this = this;
936
+ if (this.dragdrop) {
937
+ this.dragDropService = useTreeDragDropService();
938
+ this.dragStartCleanup = this.dragDropService.onDragStart(function (event) {
939
+ _this.dragNode = event.node;
940
+ _this.dragNodeSubNodes = event.subNodes;
941
+ _this.dragNodeIndex = event.index;
942
+ _this.dragNodeScope = event.scope;
943
+ });
944
+ this.dragStopCleanup = this.dragDropService.onDragStop(function () {
945
+ _this.dragNode = null;
946
+ _this.dragNodeSubNodes = null;
947
+ _this.dragNodeIndex = null;
948
+ _this.dragNodeScope = null;
949
+ _this.dragHover = false;
950
+ });
951
+ }
952
+ },
953
+ beforeUnmount: function beforeUnmount() {
954
+ if (this.dragStartCleanup) {
955
+ this.dragStartCleanup();
956
+ }
957
+ if (this.dragStopCleanup) {
958
+ this.dragStopCleanup();
959
+ }
960
+ },
642
961
  methods: {
643
962
  onNodeToggle: function onNodeToggle(node) {
644
963
  var key = node.key;
@@ -794,6 +1113,134 @@ var script = {
794
1113
  }) || matched;
795
1114
  }
796
1115
  return matched;
1116
+ },
1117
+ onNodeDrop: function onNodeDrop(event) {
1118
+ this.$emit('node-drop', event);
1119
+ },
1120
+ allowDrop: function allowDrop(dragNode, dropNode, dragNodeScope) {
1121
+ if (!dragNode) {
1122
+ //prevent random html elements to be dragged
1123
+ return false;
1124
+ } else if (this.isValidDragScope(dragNodeScope)) {
1125
+ var allow = true;
1126
+ if (dropNode) {
1127
+ if (dragNode === dropNode) {
1128
+ allow = false;
1129
+ } else {
1130
+ var parent = dropNode.parent;
1131
+ while (parent != null) {
1132
+ if (parent === dragNode) {
1133
+ allow = false;
1134
+ break;
1135
+ }
1136
+ parent = parent.parent;
1137
+ }
1138
+ }
1139
+ }
1140
+ return allow;
1141
+ } else {
1142
+ return false;
1143
+ }
1144
+ },
1145
+ allowNodeDrop: function allowNodeDrop(dropNode) {
1146
+ return this.allowDrop(this.dragNode, dropNode, this.dragNodeScope);
1147
+ },
1148
+ isValidDragScope: function isValidDragScope(dragScope) {
1149
+ var dropScope = this.droppableScope;
1150
+ if (dropScope !== null) {
1151
+ if (typeof dropScope === 'string') {
1152
+ if (typeof dragScope === 'string') return dropScope === dragScope;else if (Array.isArray(dragScope)) return dragScope.indexOf(dropScope) != -1;
1153
+ } else if (Array.isArray(dropScope)) {
1154
+ if (typeof dragScope === 'string') {
1155
+ return dropScope.indexOf(dragScope) != -1;
1156
+ } else if (Array.isArray(dragScope)) {
1157
+ var _iterator3 = _createForOfIteratorHelper(dropScope),
1158
+ _step3;
1159
+ try {
1160
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
1161
+ var s = _step3.value;
1162
+ var _iterator4 = _createForOfIteratorHelper(dragScope),
1163
+ _step4;
1164
+ try {
1165
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
1166
+ var ds = _step4.value;
1167
+ if (s === ds) {
1168
+ return true;
1169
+ }
1170
+ }
1171
+ } catch (err) {
1172
+ _iterator4.e(err);
1173
+ } finally {
1174
+ _iterator4.f();
1175
+ }
1176
+ }
1177
+ } catch (err) {
1178
+ _iterator3.e(err);
1179
+ } finally {
1180
+ _iterator3.f();
1181
+ }
1182
+ }
1183
+ }
1184
+ return false;
1185
+ } else {
1186
+ return true;
1187
+ }
1188
+ },
1189
+ onDragOver: function onDragOver(event) {
1190
+ if (this.dragdrop && (!this.value || this.value.length === 0)) {
1191
+ event.dataTransfer.dropEffect = 'move';
1192
+ event.preventDefault();
1193
+ }
1194
+ },
1195
+ onDragEnter: function onDragEnter() {
1196
+ if (this.dragdrop && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
1197
+ this.dragHover = true;
1198
+ }
1199
+ },
1200
+ onDragLeave: function onDragLeave(event) {
1201
+ if (this.dragdrop) {
1202
+ var rect = event.currentTarget.getBoundingClientRect();
1203
+ if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {
1204
+ this.dragHover = false;
1205
+ }
1206
+ }
1207
+ },
1208
+ processTreeDrop: function processTreeDrop(dragNode, dragNodeIndex) {
1209
+ this.dragNodeSubNodes.splice(dragNodeIndex, 1);
1210
+ var newValue = [].concat(_toConsumableArray(this.value || []), [dragNode]);
1211
+ this.$emit('update:value', newValue);
1212
+ this.dragDropService.stopDrag({
1213
+ node: dragNode
1214
+ });
1215
+ },
1216
+ onDrop: function onDrop(event) {
1217
+ var _this2 = this;
1218
+ if (this.dragdrop && (!this.value || this.value.length === 0)) {
1219
+ event.preventDefault();
1220
+ var dragNode = this.dragNode;
1221
+ if (this.allowDrop(dragNode, null, this.dragNodeScope)) {
1222
+ var dragNodeIndex = this.dragNodeIndex;
1223
+ if (this.validateDrop) {
1224
+ this.$emit('node-drop', {
1225
+ originalEvent: event,
1226
+ dragNode: dragNode,
1227
+ dropNode: null,
1228
+ index: dragNodeIndex,
1229
+ accept: function accept() {
1230
+ _this2.processTreeDrop(dragNode, dragNodeIndex);
1231
+ }
1232
+ });
1233
+ } else {
1234
+ this.$emit('node-drop', {
1235
+ originalEvent: event,
1236
+ dragNode: dragNode,
1237
+ dropNode: null,
1238
+ index: dragNodeIndex
1239
+ });
1240
+ this.processTreeDrop(dragNode, dragNodeIndex);
1241
+ }
1242
+ }
1243
+ }
797
1244
  }
798
1245
  },
799
1246
  computed: {
@@ -802,11 +1249,11 @@ var script = {
802
1249
  var searchFields = isFunction(this.filterBy) ? [this.filterBy] : this.filterBy.split(',');
803
1250
  var filterText = this.filterValue.trim().toLocaleLowerCase(this.filterLocale);
804
1251
  var strict = this.filterMode === 'strict';
805
- var _iterator3 = _createForOfIteratorHelper(this.value),
806
- _step3;
1252
+ var _iterator5 = _createForOfIteratorHelper(this.value),
1253
+ _step5;
807
1254
  try {
808
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
809
- var node = _step3.value;
1255
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
1256
+ var node = _step5.value;
810
1257
  var _node = _objectSpread$1({}, node);
811
1258
  var paramsWithoutNode = {
812
1259
  searchFields: searchFields,
@@ -818,15 +1265,22 @@ var script = {
818
1265
  }
819
1266
  }
820
1267
  } catch (err) {
821
- _iterator3.e(err);
1268
+ _iterator5.e(err);
822
1269
  } finally {
823
- _iterator3.f();
1270
+ _iterator5.f();
824
1271
  }
825
1272
  return filteredNodes;
826
1273
  },
827
1274
  valueToRender: function valueToRender() {
828
1275
  if (this.filterValue && this.filterValue.trim().length > 0) return this.filteredValue;else return this.value;
829
1276
  },
1277
+ empty: function empty() {
1278
+ return !this.valueToRender || this.valueToRender.length === 0;
1279
+ },
1280
+ emptyMessageText: function emptyMessageText() {
1281
+ var _this$$primevue$confi;
1282
+ return ((_this$$primevue$confi = this.$primevue.config) === null || _this$$primevue$confi === void 0 || (_this$$primevue$confi = _this$$primevue$confi.locale) === null || _this$$primevue$confi === void 0 ? void 0 : _this$$primevue$confi.emptyMessage) || '';
1283
+ },
830
1284
  containerDataP: function containerDataP() {
831
1285
  return cn({
832
1286
  loading: this.loading,
@@ -867,6 +1321,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
867
1321
  var _component_TreeNode = resolveComponent("TreeNode");
868
1322
  return openBlock(), createElementBlock("div", mergeProps({
869
1323
  "class": _ctx.cx('root'),
1324
+ onDragover: _cache[1] || (_cache[1] = function () {
1325
+ return $options.onDragOver && $options.onDragOver.apply($options, arguments);
1326
+ }),
1327
+ onDragenter: _cache[2] || (_cache[2] = function () {
1328
+ return $options.onDragEnter && $options.onDragEnter.apply($options, arguments);
1329
+ }),
1330
+ onDragleave: _cache[3] || (_cache[3] = function () {
1331
+ return $options.onDragLeave && $options.onDragLeave.apply($options, arguments);
1332
+ }),
1333
+ onDrop: _cache[4] || (_cache[4] = function () {
1334
+ return $options.onDrop && $options.onDrop.apply($options, arguments);
1335
+ }),
870
1336
  "data-p": $options.containerDataP
871
1337
  }, _ctx.ptmi('root')), [_ctx.loading && _ctx.loadingMode === 'mask' ? (openBlock(), createElementBlock("div", mergeProps({
872
1338
  key: 0,
@@ -927,7 +1393,8 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
927
1393
  value: _ctx.value,
928
1394
  expandedKeys: _ctx.expandedKeys,
929
1395
  selectionKeys: _ctx.selectionKeys
930
- }), createElementVNode("ul", mergeProps({
1396
+ }), !$options.empty ? (openBlock(), createElementBlock("ul", mergeProps({
1397
+ key: 0,
931
1398
  "class": _ctx.cx('rootChildren'),
932
1399
  role: "tree",
933
1400
  "aria-labelledby": _ctx.ariaLabelledby,
@@ -936,6 +1403,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
936
1403
  return openBlock(), createBlock(_component_TreeNode, {
937
1404
  key: node.key,
938
1405
  node: node,
1406
+ rootNodes: $options.valueToRender,
939
1407
  templates: _ctx.$slots,
940
1408
  level: _ctx.level + 1,
941
1409
  index: index,
@@ -946,10 +1414,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
946
1414
  selectionKeys: _ctx.selectionKeys,
947
1415
  onCheckboxChange: $options.onCheckboxChange,
948
1416
  loadingMode: _ctx.loadingMode,
1417
+ draggableScope: _ctx.draggableScope,
1418
+ dragdrop: _ctx.dragdrop,
1419
+ validateDrop: _ctx.validateDrop,
1420
+ onNodeDrop: $options.onNodeDrop,
949
1421
  unstyled: _ctx.unstyled,
950
1422
  pt: _ctx.pt
951
- }, null, 8, ["node", "templates", "level", "index", "expandedKeys", "onNodeToggle", "onNodeClick", "selectionMode", "selectionKeys", "onCheckboxChange", "loadingMode", "unstyled", "pt"]);
952
- }), 128))], 16, _hoisted_3), renderSlot(_ctx.$slots, "footer", {
1423
+ }, null, 8, ["node", "rootNodes", "templates", "level", "index", "expandedKeys", "onNodeToggle", "onNodeClick", "selectionMode", "selectionKeys", "onCheckboxChange", "loadingMode", "draggableScope", "dragdrop", "validateDrop", "onNodeDrop", "unstyled", "pt"]);
1424
+ }), 128))], 16, _hoisted_3)) : (openBlock(), createElementBlock("div", mergeProps({
1425
+ key: 1,
1426
+ "class": _ctx.cx('emptyMessage')
1427
+ }, _ctx.ptm('emptyMessage')), [renderSlot(_ctx.$slots, "empty", {}, function () {
1428
+ return [createTextVNode(toDisplayString($options.emptyMessageText), 1)];
1429
+ })], 16)), renderSlot(_ctx.$slots, "footer", {
953
1430
  value: _ctx.value,
954
1431
  expandedKeys: _ctx.expandedKeys,
955
1432
  selectionKeys: _ctx.selectionKeys