@syncfusion/ej2-filemanager 26.2.10 → 27.1.48

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 (158) hide show
  1. package/.eslintrc.json +2 -4
  2. package/dist/ej2-filemanager.min.js +2 -2
  3. package/dist/ej2-filemanager.umd.min.js +2 -2
  4. package/dist/ej2-filemanager.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-filemanager.es2015.js +190 -21
  6. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  7. package/dist/es6/ej2-filemanager.es5.js +191 -21
  8. package/dist/es6/ej2-filemanager.es5.js.map +1 -1
  9. package/dist/global/ej2-filemanager.min.js +2 -2
  10. package/dist/global/ej2-filemanager.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +16 -16
  13. package/src/file-manager/base/file-manager-model.d.ts +17 -1
  14. package/src/file-manager/base/file-manager.d.ts +32 -1
  15. package/src/file-manager/base/file-manager.js +148 -1
  16. package/src/file-manager/base/interface.d.ts +38 -0
  17. package/src/file-manager/common/operations.js +1 -0
  18. package/src/file-manager/common/utility.js +3 -0
  19. package/src/file-manager/layout/details-view.js +11 -2
  20. package/src/file-manager/layout/large-icons-view.d.ts +0 -1
  21. package/src/file-manager/layout/large-icons-view.js +5 -17
  22. package/src/file-manager/pop-up/context-menu.d.ts +1 -1
  23. package/src/file-manager/pop-up/context-menu.js +24 -2
  24. package/styles/bootstrap-dark-lite.css +1058 -0
  25. package/styles/bootstrap-dark-lite.scss +16 -0
  26. package/styles/bootstrap-dark.css +201 -161
  27. package/styles/bootstrap-dark.scss +1 -0
  28. package/styles/bootstrap-lite.css +1040 -0
  29. package/styles/bootstrap-lite.scss +16 -0
  30. package/styles/bootstrap.css +183 -143
  31. package/styles/bootstrap.scss +1 -0
  32. package/styles/bootstrap4-lite.css +1068 -0
  33. package/styles/bootstrap4-lite.scss +16 -0
  34. package/styles/bootstrap4.css +211 -171
  35. package/styles/bootstrap4.scss +1 -0
  36. package/styles/bootstrap5-dark-lite.css +1078 -0
  37. package/styles/bootstrap5-dark-lite.scss +16 -0
  38. package/styles/bootstrap5-dark.css +220 -186
  39. package/styles/bootstrap5-dark.scss +1 -0
  40. package/styles/bootstrap5-lite.css +1078 -0
  41. package/styles/bootstrap5-lite.scss +16 -0
  42. package/styles/bootstrap5.3-lite.css +1035 -0
  43. package/styles/bootstrap5.3-lite.scss +16 -0
  44. package/styles/bootstrap5.3.css +1603 -0
  45. package/styles/bootstrap5.3.scss +17 -0
  46. package/styles/bootstrap5.css +220 -186
  47. package/styles/bootstrap5.scss +1 -0
  48. package/styles/fabric-dark-lite.css +1039 -0
  49. package/styles/fabric-dark-lite.scss +16 -0
  50. package/styles/fabric-dark.css +184 -144
  51. package/styles/fabric-dark.scss +1 -0
  52. package/styles/fabric-lite.css +1039 -0
  53. package/styles/fabric-lite.scss +16 -0
  54. package/styles/fabric.css +183 -143
  55. package/styles/fabric.scss +1 -0
  56. package/styles/file-manager/_bds-definition.scss +2 -0
  57. package/styles/file-manager/_bigger.scss +758 -0
  58. package/styles/file-manager/_bootstrap-dark-definition.scss +2 -0
  59. package/styles/file-manager/_bootstrap-definition.scss +2 -0
  60. package/styles/file-manager/_bootstrap4-definition.scss +2 -0
  61. package/styles/file-manager/_bootstrap5-definition.scss +2 -0
  62. package/styles/file-manager/_bootstrap5.3-definition.scss +22 -20
  63. package/styles/file-manager/_fabric-dark-definition.scss +2 -0
  64. package/styles/file-manager/_fabric-definition.scss +2 -0
  65. package/styles/file-manager/_fluent-definition.scss +2 -0
  66. package/styles/file-manager/_fluent2-definition.scss +15 -9
  67. package/styles/file-manager/_fusionnew-definition.scss +2 -0
  68. package/styles/file-manager/_highcontrast-definition.scss +2 -0
  69. package/styles/file-manager/_highcontrast-light-definition.scss +2 -0
  70. package/styles/file-manager/_layout.scss +45 -663
  71. package/styles/file-manager/_material-dark-definition.scss +2 -0
  72. package/styles/file-manager/_material-definition.scss +2 -0
  73. package/styles/file-manager/_material3-definition.scss +2 -0
  74. package/styles/file-manager/_tailwind-definition.scss +2 -0
  75. package/styles/file-manager/_theme.scss +38 -7
  76. package/styles/file-manager/bootstrap-dark.css +201 -161
  77. package/styles/file-manager/bootstrap-dark.scss +1 -0
  78. package/styles/file-manager/bootstrap.css +183 -143
  79. package/styles/file-manager/bootstrap.scss +1 -0
  80. package/styles/file-manager/bootstrap4.css +211 -171
  81. package/styles/file-manager/bootstrap4.scss +1 -0
  82. package/styles/file-manager/bootstrap5-dark.css +220 -186
  83. package/styles/file-manager/bootstrap5-dark.scss +1 -0
  84. package/styles/file-manager/bootstrap5.3.css +1603 -0
  85. package/styles/file-manager/bootstrap5.3.scss +17 -0
  86. package/styles/file-manager/bootstrap5.css +220 -186
  87. package/styles/file-manager/bootstrap5.scss +1 -0
  88. package/styles/file-manager/fabric-dark.css +184 -144
  89. package/styles/file-manager/fabric-dark.scss +1 -0
  90. package/styles/file-manager/fabric.css +183 -143
  91. package/styles/file-manager/fabric.scss +1 -0
  92. package/styles/file-manager/fluent-dark.css +187 -147
  93. package/styles/file-manager/fluent-dark.scss +1 -0
  94. package/styles/file-manager/fluent.css +186 -146
  95. package/styles/file-manager/fluent.scss +1 -0
  96. package/styles/file-manager/fluent2.css +204 -158
  97. package/styles/file-manager/fluent2.scss +1 -0
  98. package/styles/file-manager/highcontrast-light.css +184 -144
  99. package/styles/file-manager/highcontrast-light.scss +1 -0
  100. package/styles/file-manager/highcontrast.css +207 -167
  101. package/styles/file-manager/highcontrast.scss +1 -0
  102. package/styles/file-manager/material-dark.css +198 -158
  103. package/styles/file-manager/material-dark.scss +1 -0
  104. package/styles/file-manager/material.css +183 -143
  105. package/styles/file-manager/material.scss +1 -0
  106. package/styles/file-manager/material3-dark.css +185 -145
  107. package/styles/file-manager/material3-dark.scss +1 -0
  108. package/styles/file-manager/material3.css +185 -145
  109. package/styles/file-manager/material3.scss +1 -0
  110. package/styles/file-manager/tailwind-dark.css +198 -164
  111. package/styles/file-manager/tailwind-dark.scss +1 -0
  112. package/styles/file-manager/tailwind.css +198 -164
  113. package/styles/file-manager/tailwind.scss +1 -0
  114. package/styles/fluent-dark-lite.css +1037 -0
  115. package/styles/fluent-dark-lite.scss +16 -0
  116. package/styles/fluent-dark.css +187 -147
  117. package/styles/fluent-dark.scss +1 -0
  118. package/styles/fluent-lite.css +1036 -0
  119. package/styles/fluent-lite.scss +16 -0
  120. package/styles/fluent.css +186 -146
  121. package/styles/fluent.scss +1 -0
  122. package/styles/fluent2-lite.css +1272 -0
  123. package/styles/fluent2-lite.scss +16 -0
  124. package/styles/fluent2.css +204 -158
  125. package/styles/fluent2.scss +1 -0
  126. package/styles/highcontrast-light-lite.css +1039 -0
  127. package/styles/highcontrast-light-lite.scss +16 -0
  128. package/styles/highcontrast-light.css +184 -144
  129. package/styles/highcontrast-light.scss +1 -0
  130. package/styles/highcontrast-lite.css +1059 -0
  131. package/styles/highcontrast-lite.scss +16 -0
  132. package/styles/highcontrast.css +207 -167
  133. package/styles/highcontrast.scss +1 -0
  134. package/styles/material-dark-lite.css +1092 -0
  135. package/styles/material-dark-lite.scss +16 -0
  136. package/styles/material-dark.css +198 -158
  137. package/styles/material-dark.scss +1 -0
  138. package/styles/material-lite.css +1097 -0
  139. package/styles/material-lite.scss +16 -0
  140. package/styles/material.css +183 -143
  141. package/styles/material.scss +1 -0
  142. package/styles/material3-dark-lite.css +1090 -0
  143. package/styles/material3-dark-lite.scss +16 -0
  144. package/styles/material3-dark.css +185 -145
  145. package/styles/material3-dark.scss +1 -0
  146. package/styles/material3-lite.css +1092 -0
  147. package/styles/material3-lite.scss +16 -0
  148. package/styles/material3.css +185 -145
  149. package/styles/material3.scss +1 -0
  150. package/styles/tailwind-dark-lite.css +1060 -0
  151. package/styles/tailwind-dark-lite.scss +16 -0
  152. package/styles/tailwind-dark.css +198 -164
  153. package/styles/tailwind-dark.scss +1 -0
  154. package/styles/tailwind-lite.css +1060 -0
  155. package/styles/tailwind-lite.scss +16 -0
  156. package/styles/tailwind.css +198 -164
  157. package/styles/tailwind.scss +1 -0
  158. package/tslint.json +0 -111
@@ -1559,6 +1559,9 @@ function pasteHandler(parent) {
1559
1559
  parent.isDragDrop = false;
1560
1560
  if (parent.selectedNodes.length !== 0 && parent.enablePaste) {
1561
1561
  const path = (parent.folderPath === '') ? parent.path : parent.folderPath;
1562
+ if (parent.activeModule === 'navigationpane' && !parent.selectedNodes[0].includes('/')) {
1563
+ parent.targetPath = getValue('filterPath', parent.actionRecords[0]).replace(/\\/g, '/');
1564
+ }
1562
1565
  const subFolder = validateSubFolder(parent, parent.actionRecords, path, parent.path);
1563
1566
  if (!subFolder) {
1564
1567
  if ((parent.fileAction === 'move' && parent.targetPath !== path) || parent.fileAction === 'copy') {
@@ -2837,6 +2840,7 @@ function triggerSearchOperation(parent, data, eventArgs) {
2837
2840
  showHiddenItems: getValue('showHiddenItems', data)
2838
2841
  };
2839
2842
  parent.trigger('search', searchEventArgs, function (args) {
2843
+ setValue('data', args.searchResults, data);
2840
2844
  if (args.cancel) {
2841
2845
  eventArgs.cancel = true;
2842
2846
  }
@@ -4653,9 +4657,6 @@ class LargeIconsView {
4653
4657
  }
4654
4658
  iconsView.classList.remove(DISPLAY_NONE);
4655
4659
  if (this.parent.enableVirtualization && this.allItems.length > 0) {
4656
- if (!this.element.style.height) {
4657
- this.adjustHeight();
4658
- }
4659
4660
  this.parent.virtualizationModule.setUIVirtualization();
4660
4661
  }
4661
4662
  this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj);
@@ -4693,7 +4694,6 @@ class LargeIconsView {
4693
4694
  for (let i = 0; i < activeEle.length; i++) {
4694
4695
  activeEle[i].setAttribute('aria-selected', 'true');
4695
4696
  }
4696
- this.adjustHeight();
4697
4697
  this.element.style.maxHeight = '100%';
4698
4698
  this.getItemCount();
4699
4699
  this.addEventListener();
@@ -4799,11 +4799,6 @@ class LargeIconsView {
4799
4799
  getModuleName() {
4800
4800
  return 'largeiconsview';
4801
4801
  }
4802
- adjustHeight() {
4803
- const pane = select('#' + this.parent.element.id + CONTENT_ID, this.parent.element);
4804
- const bar = select('#' + this.parent.element.id + BREADCRUMBBAR_ID, this.parent.element);
4805
- this.element.style.height = (pane.offsetHeight - bar.offsetHeight) + 'px';
4806
- }
4807
4802
  onItemCreated(args) {
4808
4803
  args.item.removeAttribute('aria-level');
4809
4804
  if (!this.parent.showFileExtension && getValue('isFile', args.curData)) {
@@ -5003,7 +4998,6 @@ class LargeIconsView {
5003
4998
  if (this.parent.view !== 'LargeIcons') {
5004
4999
  return;
5005
5000
  }
5006
- this.adjustHeight();
5007
5001
  }
5008
5002
  onUpdateSelectionData() {
5009
5003
  if (this.parent.view !== 'LargeIcons') {
@@ -5131,7 +5125,8 @@ class LargeIconsView {
5131
5125
  onpasteEnd(args) {
5132
5126
  if (this.parent.view === 'LargeIcons') {
5133
5127
  this.isPasteOperation = true;
5134
- if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args)) {
5128
+ if (this.parent.path === this.parent.destinationPath ||
5129
+ this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {
5135
5130
  this.onPathChanged(args);
5136
5131
  }
5137
5132
  }
@@ -5152,9 +5147,6 @@ class LargeIconsView {
5152
5147
  case 'allowDragAndDrop':
5153
5148
  this.createDragObj();
5154
5149
  break;
5155
- case 'height':
5156
- this.adjustHeight();
5157
- break;
5158
5150
  case 'selectedItems':
5159
5151
  this.isInteraction = false;
5160
5152
  this.isInteracted = false;
@@ -5615,6 +5607,9 @@ class LargeIconsView {
5615
5607
  case 'ctrlD':
5616
5608
  this.doDownload();
5617
5609
  break;
5610
+ case 'back':
5611
+ this.parent.traverseBackward();
5612
+ break;
5618
5613
  }
5619
5614
  }
5620
5615
  doDownload() {
@@ -5907,9 +5902,6 @@ class LargeIconsView {
5907
5902
  }
5908
5903
  resizeHandler() {
5909
5904
  this.getItemCount();
5910
- if (!isNullOrUndefined(this.listObj)) {
5911
- this.adjustHeight();
5912
- }
5913
5905
  }
5914
5906
  splitterResizeHandler() {
5915
5907
  this.getItemCount();
@@ -6588,7 +6580,23 @@ class ContextMenu {
6588
6580
  iconSpan.setAttribute('class', ICON_GRID + ' ' + MENU_ICON);
6589
6581
  }
6590
6582
  }
6591
- onBeforeClose() {
6583
+ onBeforeClose(args) {
6584
+ const eventArgs = {
6585
+ cancel: false,
6586
+ element: args.element,
6587
+ event: args.event,
6588
+ isFocused: args.isFocused,
6589
+ fileDetails: [this.menuItemData],
6590
+ items: args.items,
6591
+ parentItem: args.parentItem,
6592
+ menuType: this.menuType
6593
+ };
6594
+ this.parent.trigger('menuClose', eventArgs, (menuCloseArgs) => {
6595
+ if (menuCloseArgs.cancel) {
6596
+ args.cancel = menuCloseArgs.cancel;
6597
+ return;
6598
+ }
6599
+ });
6592
6600
  this.menuTarget = null;
6593
6601
  if (!this.isMenuItemClicked && this.parent.pathId.length > 1 && this.parent.activeModule === 'navigationpane') {
6594
6602
  this.parent.pathId.pop();
@@ -6922,7 +6930,13 @@ class ContextMenu {
6922
6930
  break;
6923
6931
  case 'paste':
6924
6932
  if (this.menuType === 'folder') {
6925
- this.parent.folderPath = getFullPath(this.parent, this.menuItemData, this.parent.path);
6933
+ if (this.parent.activeModule === 'navigationpane') {
6934
+ this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(this.targetNodeElement, 'li'));
6935
+ this.parent.folderPath = this.parent.path;
6936
+ }
6937
+ else {
6938
+ this.parent.folderPath = getFullPath(this.parent, this.menuItemData, this.parent.path);
6939
+ }
6926
6940
  }
6927
6941
  else {
6928
6942
  this.parent.folderPath = '';
@@ -7349,6 +7363,7 @@ let FileManager = FileManager_1 = class FileManager extends Component {
7349
7363
  this.uploadedCount = 0;
7350
7364
  //Specifies whether the operating system is MAC or not
7351
7365
  this.isMac = false;
7366
+ this.dragSelectedItems = [];
7352
7367
  FileManager_1.Inject(BreadCrumbBar, LargeIconsView, ContextMenu);
7353
7368
  }
7354
7369
  /**
@@ -7471,6 +7486,9 @@ let FileManager = FileManager_1 = class FileManager extends Component {
7471
7486
  this.setRtl(this.enableRtl);
7472
7487
  this.addEventListeners();
7473
7488
  read(this, (this.path !== this.originalPath) ? initialEnd : finalizeEnd, this.path);
7489
+ if (this.fileView === 'Details') {
7490
+ this.largeiconsviewModule.element.classList.add(DISPLAY_NONE);
7491
+ }
7474
7492
  this.adjustHeight();
7475
7493
  if (isNullOrUndefined(this.navigationpaneModule)) {
7476
7494
  this.splitterObj.collapse(this.enableRtl ? 1 : 0);
@@ -7907,7 +7925,33 @@ let FileManager = FileManager_1 = class FileManager extends Component {
7907
7925
  break;
7908
7926
  }
7909
7927
  }
7928
+ wireSelectOnDragEvent(isBind) {
7929
+ if (isNullOrUndefined(this.view)) {
7930
+ return;
7931
+ }
7932
+ if (isBind) {
7933
+ this.viewElem = this.view === 'LargeIcons' ? this.largeiconsviewModule.element : this.element.querySelector('.e-gridcontent');
7934
+ }
7935
+ if (!this.viewElem) {
7936
+ return;
7937
+ }
7938
+ if (isBind) {
7939
+ if (this.allowMultiSelection) {
7940
+ EventHandler.add(this.viewElem, 'mousedown', this.onDragStart, this);
7941
+ this.on(layoutChange, this.onLayoutChange, this);
7942
+ this.on(selectionChanged, this.onLayoutChange, this);
7943
+ }
7944
+ }
7945
+ else {
7946
+ EventHandler.remove(this.viewElem, 'mousedown', this.onDragStart);
7947
+ this.off(layoutChange, this.onLayoutChange);
7948
+ this.off(selectionChanged, this.onLayoutChange);
7949
+ }
7950
+ }
7910
7951
  wireEvents() {
7952
+ if (this.enableRangeSelection) {
7953
+ this.wireSelectOnDragEvent(true);
7954
+ }
7911
7955
  EventHandler.add(window, 'resize', this.resizeHandler, this);
7912
7956
  this.keyboardModule = new KeyboardEvents(this.element, {
7913
7957
  keyAction: this.keyActionHandler.bind(this),
@@ -7916,9 +7960,93 @@ let FileManager = FileManager_1 = class FileManager extends Component {
7916
7960
  });
7917
7961
  }
7918
7962
  unWireEvents() {
7963
+ this.wireSelectOnDragEvent(false);
7919
7964
  EventHandler.remove(window, 'resize', this.resizeHandler);
7920
7965
  this.keyboardModule.destroy();
7921
7966
  }
7967
+ onDragStart(event) {
7968
+ if (this.viewElem) {
7969
+ if (this.allowDragAndDrop) {
7970
+ const targetElement = closest(event.target, this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-fe-text');
7971
+ if (targetElement) {
7972
+ return;
7973
+ }
7974
+ }
7975
+ event.preventDefault();
7976
+ this.dragX = event.pageX;
7977
+ this.dragY = event.pageY;
7978
+ if (!this.dragSelectElement) {
7979
+ this.dragSelectElement = createElement('div', {
7980
+ id: this.element.id + '_drag',
7981
+ className: 'e-filemanager e-drag-select',
7982
+ styles: 'left: ' + this.dragX + 'px;top: ' + this.dragY + 'px;'
7983
+ });
7984
+ document.body.append(this.dragSelectElement);
7985
+ }
7986
+ EventHandler.add(document, 'mouseup', this.onDragStop, this);
7987
+ EventHandler.add(this.viewElem, 'mousemove', this.onDrag, this);
7988
+ EventHandler.add(this.dragSelectElement, 'mousemove', this.onDrag, this);
7989
+ }
7990
+ }
7991
+ onDrag(event) {
7992
+ event.stopPropagation();
7993
+ if (this.dragSelectElement) {
7994
+ const diffX = event.pageX - this.dragX;
7995
+ const diffY = event.pageY - this.dragY;
7996
+ setStyleAttribute(this.dragSelectElement, {
7997
+ 'left': diffX < 0 ? this.dragX + diffX + 'px' : this.dragX + 'px', 'top': diffY < 0 ? this.dragY + diffY + 'px' : this.dragY + 'px',
7998
+ 'height': Math.abs(diffY) + 'px', 'width': Math.abs(diffX) + 'px'
7999
+ });
8000
+ this.selectItems();
8001
+ }
8002
+ else {
8003
+ EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);
8004
+ }
8005
+ }
8006
+ onDragStop() {
8007
+ if (this.viewElem) {
8008
+ EventHandler.remove(document, 'mouseup', this.onDragStop);
8009
+ EventHandler.remove(this.viewElem, 'mousemove', this.onDrag);
8010
+ }
8011
+ if (this.dragSelectElement) {
8012
+ EventHandler.remove(this.dragSelectElement, 'mousemove', this.onDrag);
8013
+ if (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 0) {
8014
+ this.setProperties({ selectedItems: this.dragSelectedItems });
8015
+ }
8016
+ this.dragSelectedItems = [];
8017
+ detach(this.dragSelectElement);
8018
+ this.dragSelectElement = null;
8019
+ }
8020
+ }
8021
+ selectItems() {
8022
+ this.dragSelectedItems = [];
8023
+ const dragRect = this.dragSelectElement.getBoundingClientRect();
8024
+ const allItems = selectAll(this.viewElem.classList.contains('e-large-icons') ? '.e-list-item' : '.e-row', this.viewElem);
8025
+ removeClass(selectAll('.e-active', this.viewElem), ['e-active', 'e-focus']);
8026
+ removeClass(selectAll('.e-check', this.viewElem), ['e-check']);
8027
+ for (const item of allItems) {
8028
+ const itemRect = item.getBoundingClientRect();
8029
+ if (!(dragRect.right < itemRect.left || dragRect.left > itemRect.right
8030
+ || dragRect.bottom < itemRect.top || dragRect.top > itemRect.bottom)
8031
+ && (this.dragSelectElement.clientHeight > 0 && this.dragSelectElement.clientWidth > 0)) {
8032
+ if (this.viewElem.classList.contains('e-large-icons')) {
8033
+ item.classList.add('e-active');
8034
+ this.dragSelectedItems.push(item.getAttribute('title'));
8035
+ }
8036
+ else {
8037
+ addClass(selectAll('.e-rowcell', item), ['e-active']);
8038
+ this.dragSelectedItems.push(item.querySelector('.e-drag-text').textContent);
8039
+ }
8040
+ item.querySelector('.e-frame').classList.add('e-check');
8041
+ }
8042
+ }
8043
+ }
8044
+ onLayoutChange() {
8045
+ if (this.enableRangeSelection) {
8046
+ this.unWireEvents();
8047
+ this.wireEvents();
8048
+ }
8049
+ }
7922
8050
  setPath() {
7923
8051
  this.setProperties({ selectedItems: [] }, true);
7924
8052
  this.ensurePath();
@@ -7964,6 +8092,12 @@ let FileManager = FileManager_1 = class FileManager extends Component {
7964
8092
  case 'detailsViewSettings':
7965
8093
  this.notify(modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });
7966
8094
  break;
8095
+ case 'enableRangeSelection':
8096
+ this.wireSelectOnDragEvent(false);
8097
+ if (newProp.enableRangeSelection) {
8098
+ this.wireSelectOnDragEvent(true);
8099
+ }
8100
+ break;
7967
8101
  case 'enableRtl':
7968
8102
  this.enableRtl = newProp.enableRtl;
7969
8103
  this.refresh();
@@ -8144,6 +8278,9 @@ let FileManager = FileManager_1 = class FileManager extends Component {
8144
8278
  this.largeiconsviewModule = null;
8145
8279
  this.detailsviewModule = null;
8146
8280
  this.breadcrumbbarModule = null;
8281
+ this.viewElem = null;
8282
+ this.dragSelectElement = null;
8283
+ this.dragSelectedItems = null;
8147
8284
  }
8148
8285
  /**
8149
8286
  * Creates a new folder in file manager.
@@ -8332,6 +8469,23 @@ let FileManager = FileManager_1 = class FileManager extends Component {
8332
8469
  selectAll() {
8333
8470
  this.notify(methodCall, { action: 'selectAll' });
8334
8471
  }
8472
+ /**
8473
+ * Specifies the method that must be invoked to traverse the path backwards in the file manager.
8474
+ *
8475
+ * @returns {void}
8476
+ */
8477
+ traverseBackward() {
8478
+ if (this.pathNames.length > 1 && this.breadcrumbbarModule.searchObj.element.value === '' && !this.isFiltered) {
8479
+ this.pathId.pop();
8480
+ this.pathNames.pop();
8481
+ let newPath = this.pathNames.slice(1).join('/');
8482
+ newPath = newPath === '' ? '/' : '/' + newPath + '/';
8483
+ this.setProperties({ path: newPath }, true);
8484
+ read(this, pathChanged, this.path);
8485
+ const treeNodeId = this.pathId[this.pathId.length - 1];
8486
+ this.notify(updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });
8487
+ }
8488
+ }
8335
8489
  /**
8336
8490
  * Deselects the currently selected folders and files in current path.
8337
8491
  *
@@ -8468,6 +8622,9 @@ __decorate$8([
8468
8622
  __decorate$8([
8469
8623
  Property(null)
8470
8624
  ], FileManager.prototype, "sortComparer", void 0);
8625
+ __decorate$8([
8626
+ Property(false)
8627
+ ], FileManager.prototype, "enableRangeSelection", void 0);
8471
8628
  __decorate$8([
8472
8629
  Complex({}, ToolbarSettings)
8473
8630
  ], FileManager.prototype, "toolbarSettings", void 0);
@@ -8558,6 +8715,9 @@ __decorate$8([
8558
8715
  __decorate$8([
8559
8716
  Event()
8560
8717
  ], FileManager.prototype, "menuOpen", void 0);
8718
+ __decorate$8([
8719
+ Event()
8720
+ ], FileManager.prototype, "menuClose", void 0);
8561
8721
  __decorate$8([
8562
8722
  Event()
8563
8723
  ], FileManager.prototype, "failure", void 0);
@@ -10374,7 +10534,8 @@ class DetailsView {
10374
10534
  ctrlD: 'ctrl+d',
10375
10535
  f2: 'f2',
10376
10536
  ctrlA: 'ctrl+a',
10377
- enter: 'enter'
10537
+ enter: 'enter',
10538
+ back: 'backspace'
10378
10539
  };
10379
10540
  }
10380
10541
  /* istanbul ignore next */
@@ -10545,6 +10706,10 @@ class DetailsView {
10545
10706
  for (let i = 0, len = columns.length; i < len; i++) {
10546
10707
  columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;
10547
10708
  }
10709
+ if (this.parent.enableRangeSelection) {
10710
+ const HiddenName = { field: 'name', visible: false, customAttributes: { class: 'e-drag-text' } };
10711
+ columns.push(HiddenName);
10712
+ }
10548
10713
  return columns;
10549
10714
  }
10550
10715
  adjustHeight() {
@@ -11368,7 +11533,8 @@ class DetailsView {
11368
11533
  onpasteEnd(args) {
11369
11534
  if (this.parent.view === 'Details') {
11370
11535
  this.isPasteOperation = true;
11371
- if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args)) {
11536
+ if (this.parent.path === this.parent.destinationPath ||
11537
+ this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {
11372
11538
  this.onPathChanged(args);
11373
11539
  }
11374
11540
  }
@@ -11804,6 +11970,9 @@ class DetailsView {
11804
11970
  this.parent.setProperties({ selectedItems: lastItem }, true);
11805
11971
  this.selectRecords(lastItem);
11806
11972
  break;
11973
+ case 'back':
11974
+ this.parent.traverseBackward();
11975
+ break;
11807
11976
  }
11808
11977
  }
11809
11978
  gridSelectNodes() {