@syncfusion/ej2-filemanager 26.2.11 → 27.1.50

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 (156) 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 +164 -20
  6. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  7. package/dist/es6/ej2-filemanager.es5.js +165 -20
  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 +10 -1
  14. package/src/file-manager/base/file-manager.d.ts +25 -0
  15. package/src/file-manager/base/file-manager.js +145 -1
  16. package/src/file-manager/base/interface.d.ts +1 -0
  17. package/src/file-manager/common/operations.js +1 -0
  18. package/src/file-manager/layout/details-view.js +11 -2
  19. package/src/file-manager/layout/large-icons-view.d.ts +0 -1
  20. package/src/file-manager/layout/large-icons-view.js +5 -17
  21. package/src/file-manager/pop-up/context-menu.js +4 -1
  22. package/styles/bootstrap-dark-lite.css +1058 -0
  23. package/styles/bootstrap-dark-lite.scss +16 -0
  24. package/styles/bootstrap-dark.css +201 -161
  25. package/styles/bootstrap-dark.scss +1 -0
  26. package/styles/bootstrap-lite.css +1040 -0
  27. package/styles/bootstrap-lite.scss +16 -0
  28. package/styles/bootstrap.css +183 -143
  29. package/styles/bootstrap.scss +1 -0
  30. package/styles/bootstrap4-lite.css +1068 -0
  31. package/styles/bootstrap4-lite.scss +16 -0
  32. package/styles/bootstrap4.css +211 -171
  33. package/styles/bootstrap4.scss +1 -0
  34. package/styles/bootstrap5-dark-lite.css +1078 -0
  35. package/styles/bootstrap5-dark-lite.scss +16 -0
  36. package/styles/bootstrap5-dark.css +220 -186
  37. package/styles/bootstrap5-dark.scss +1 -0
  38. package/styles/bootstrap5-lite.css +1078 -0
  39. package/styles/bootstrap5-lite.scss +16 -0
  40. package/styles/bootstrap5.3-lite.css +1035 -0
  41. package/styles/bootstrap5.3-lite.scss +16 -0
  42. package/styles/bootstrap5.3.css +1603 -0
  43. package/styles/bootstrap5.3.scss +17 -0
  44. package/styles/bootstrap5.css +220 -186
  45. package/styles/bootstrap5.scss +1 -0
  46. package/styles/fabric-dark-lite.css +1039 -0
  47. package/styles/fabric-dark-lite.scss +16 -0
  48. package/styles/fabric-dark.css +184 -144
  49. package/styles/fabric-dark.scss +1 -0
  50. package/styles/fabric-lite.css +1039 -0
  51. package/styles/fabric-lite.scss +16 -0
  52. package/styles/fabric.css +183 -143
  53. package/styles/fabric.scss +1 -0
  54. package/styles/file-manager/_bds-definition.scss +2 -0
  55. package/styles/file-manager/_bigger.scss +758 -0
  56. package/styles/file-manager/_bootstrap-dark-definition.scss +2 -0
  57. package/styles/file-manager/_bootstrap-definition.scss +2 -0
  58. package/styles/file-manager/_bootstrap4-definition.scss +2 -0
  59. package/styles/file-manager/_bootstrap5-definition.scss +2 -0
  60. package/styles/file-manager/_bootstrap5.3-definition.scss +22 -20
  61. package/styles/file-manager/_fabric-dark-definition.scss +2 -0
  62. package/styles/file-manager/_fabric-definition.scss +2 -0
  63. package/styles/file-manager/_fluent-definition.scss +2 -0
  64. package/styles/file-manager/_fluent2-definition.scss +15 -9
  65. package/styles/file-manager/_fusionnew-definition.scss +2 -0
  66. package/styles/file-manager/_highcontrast-definition.scss +2 -0
  67. package/styles/file-manager/_highcontrast-light-definition.scss +2 -0
  68. package/styles/file-manager/_layout.scss +45 -663
  69. package/styles/file-manager/_material-dark-definition.scss +2 -0
  70. package/styles/file-manager/_material-definition.scss +2 -0
  71. package/styles/file-manager/_material3-definition.scss +2 -0
  72. package/styles/file-manager/_tailwind-definition.scss +2 -0
  73. package/styles/file-manager/_theme.scss +38 -7
  74. package/styles/file-manager/bootstrap-dark.css +201 -161
  75. package/styles/file-manager/bootstrap-dark.scss +1 -0
  76. package/styles/file-manager/bootstrap.css +183 -143
  77. package/styles/file-manager/bootstrap.scss +1 -0
  78. package/styles/file-manager/bootstrap4.css +211 -171
  79. package/styles/file-manager/bootstrap4.scss +1 -0
  80. package/styles/file-manager/bootstrap5-dark.css +220 -186
  81. package/styles/file-manager/bootstrap5-dark.scss +1 -0
  82. package/styles/file-manager/bootstrap5.3.css +1603 -0
  83. package/styles/file-manager/bootstrap5.3.scss +17 -0
  84. package/styles/file-manager/bootstrap5.css +220 -186
  85. package/styles/file-manager/bootstrap5.scss +1 -0
  86. package/styles/file-manager/fabric-dark.css +184 -144
  87. package/styles/file-manager/fabric-dark.scss +1 -0
  88. package/styles/file-manager/fabric.css +183 -143
  89. package/styles/file-manager/fabric.scss +1 -0
  90. package/styles/file-manager/fluent-dark.css +187 -147
  91. package/styles/file-manager/fluent-dark.scss +1 -0
  92. package/styles/file-manager/fluent.css +186 -146
  93. package/styles/file-manager/fluent.scss +1 -0
  94. package/styles/file-manager/fluent2.css +204 -158
  95. package/styles/file-manager/fluent2.scss +1 -0
  96. package/styles/file-manager/highcontrast-light.css +184 -144
  97. package/styles/file-manager/highcontrast-light.scss +1 -0
  98. package/styles/file-manager/highcontrast.css +207 -167
  99. package/styles/file-manager/highcontrast.scss +1 -0
  100. package/styles/file-manager/material-dark.css +198 -158
  101. package/styles/file-manager/material-dark.scss +1 -0
  102. package/styles/file-manager/material.css +183 -143
  103. package/styles/file-manager/material.scss +1 -0
  104. package/styles/file-manager/material3-dark.css +185 -145
  105. package/styles/file-manager/material3-dark.scss +1 -0
  106. package/styles/file-manager/material3.css +185 -145
  107. package/styles/file-manager/material3.scss +1 -0
  108. package/styles/file-manager/tailwind-dark.css +198 -164
  109. package/styles/file-manager/tailwind-dark.scss +1 -0
  110. package/styles/file-manager/tailwind.css +198 -164
  111. package/styles/file-manager/tailwind.scss +1 -0
  112. package/styles/fluent-dark-lite.css +1037 -0
  113. package/styles/fluent-dark-lite.scss +16 -0
  114. package/styles/fluent-dark.css +187 -147
  115. package/styles/fluent-dark.scss +1 -0
  116. package/styles/fluent-lite.css +1036 -0
  117. package/styles/fluent-lite.scss +16 -0
  118. package/styles/fluent.css +186 -146
  119. package/styles/fluent.scss +1 -0
  120. package/styles/fluent2-lite.css +1272 -0
  121. package/styles/fluent2-lite.scss +16 -0
  122. package/styles/fluent2.css +204 -158
  123. package/styles/fluent2.scss +1 -0
  124. package/styles/highcontrast-light-lite.css +1039 -0
  125. package/styles/highcontrast-light-lite.scss +16 -0
  126. package/styles/highcontrast-light.css +184 -144
  127. package/styles/highcontrast-light.scss +1 -0
  128. package/styles/highcontrast-lite.css +1059 -0
  129. package/styles/highcontrast-lite.scss +16 -0
  130. package/styles/highcontrast.css +207 -167
  131. package/styles/highcontrast.scss +1 -0
  132. package/styles/material-dark-lite.css +1092 -0
  133. package/styles/material-dark-lite.scss +16 -0
  134. package/styles/material-dark.css +198 -158
  135. package/styles/material-dark.scss +1 -0
  136. package/styles/material-lite.css +1097 -0
  137. package/styles/material-lite.scss +16 -0
  138. package/styles/material.css +183 -143
  139. package/styles/material.scss +1 -0
  140. package/styles/material3-dark-lite.css +1090 -0
  141. package/styles/material3-dark-lite.scss +16 -0
  142. package/styles/material3-dark.css +185 -145
  143. package/styles/material3-dark.scss +1 -0
  144. package/styles/material3-lite.css +1092 -0
  145. package/styles/material3-lite.scss +16 -0
  146. package/styles/material3.css +185 -145
  147. package/styles/material3.scss +1 -0
  148. package/styles/tailwind-dark-lite.css +1060 -0
  149. package/styles/tailwind-dark-lite.scss +16 -0
  150. package/styles/tailwind-dark.css +198 -164
  151. package/styles/tailwind-dark.scss +1 -0
  152. package/styles/tailwind-lite.css +1060 -0
  153. package/styles/tailwind-lite.scss +16 -0
  154. package/styles/tailwind.css +198 -164
  155. package/styles/tailwind.scss +1 -0
  156. package/tslint.json +0 -111
@@ -2840,6 +2840,7 @@ function triggerSearchOperation(parent, data, eventArgs) {
2840
2840
  showHiddenItems: getValue('showHiddenItems', data)
2841
2841
  };
2842
2842
  parent.trigger('search', searchEventArgs, function (args) {
2843
+ setValue('data', args.searchResults, data);
2843
2844
  if (args.cancel) {
2844
2845
  eventArgs.cancel = true;
2845
2846
  }
@@ -4656,9 +4657,6 @@ class LargeIconsView {
4656
4657
  }
4657
4658
  iconsView.classList.remove(DISPLAY_NONE);
4658
4659
  if (this.parent.enableVirtualization && this.allItems.length > 0) {
4659
- if (!this.element.style.height) {
4660
- this.adjustHeight();
4661
- }
4662
4660
  this.parent.virtualizationModule.setUIVirtualization();
4663
4661
  }
4664
4662
  this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj);
@@ -4696,7 +4694,6 @@ class LargeIconsView {
4696
4694
  for (let i = 0; i < activeEle.length; i++) {
4697
4695
  activeEle[i].setAttribute('aria-selected', 'true');
4698
4696
  }
4699
- this.adjustHeight();
4700
4697
  this.element.style.maxHeight = '100%';
4701
4698
  this.getItemCount();
4702
4699
  this.addEventListener();
@@ -4802,11 +4799,6 @@ class LargeIconsView {
4802
4799
  getModuleName() {
4803
4800
  return 'largeiconsview';
4804
4801
  }
4805
- adjustHeight() {
4806
- const pane = select('#' + this.parent.element.id + CONTENT_ID, this.parent.element);
4807
- const bar = select('#' + this.parent.element.id + BREADCRUMBBAR_ID, this.parent.element);
4808
- this.element.style.height = (pane.offsetHeight - bar.offsetHeight) + 'px';
4809
- }
4810
4802
  onItemCreated(args) {
4811
4803
  args.item.removeAttribute('aria-level');
4812
4804
  if (!this.parent.showFileExtension && getValue('isFile', args.curData)) {
@@ -5006,7 +4998,6 @@ class LargeIconsView {
5006
4998
  if (this.parent.view !== 'LargeIcons') {
5007
4999
  return;
5008
5000
  }
5009
- this.adjustHeight();
5010
5001
  }
5011
5002
  onUpdateSelectionData() {
5012
5003
  if (this.parent.view !== 'LargeIcons') {
@@ -5134,7 +5125,8 @@ class LargeIconsView {
5134
5125
  onpasteEnd(args) {
5135
5126
  if (this.parent.view === 'LargeIcons') {
5136
5127
  this.isPasteOperation = true;
5137
- if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {
5128
+ if (this.parent.path === this.parent.destinationPath ||
5129
+ this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {
5138
5130
  this.onPathChanged(args);
5139
5131
  }
5140
5132
  }
@@ -5155,9 +5147,6 @@ class LargeIconsView {
5155
5147
  case 'allowDragAndDrop':
5156
5148
  this.createDragObj();
5157
5149
  break;
5158
- case 'height':
5159
- this.adjustHeight();
5160
- break;
5161
5150
  case 'selectedItems':
5162
5151
  this.isInteraction = false;
5163
5152
  this.isInteracted = false;
@@ -5618,6 +5607,9 @@ class LargeIconsView {
5618
5607
  case 'ctrlD':
5619
5608
  this.doDownload();
5620
5609
  break;
5610
+ case 'back':
5611
+ this.parent.traverseBackward();
5612
+ break;
5621
5613
  }
5622
5614
  }
5623
5615
  doDownload() {
@@ -5910,9 +5902,6 @@ class LargeIconsView {
5910
5902
  }
5911
5903
  resizeHandler() {
5912
5904
  this.getItemCount();
5913
- if (!isNullOrUndefined(this.listObj)) {
5914
- this.adjustHeight();
5915
- }
5916
5905
  }
5917
5906
  splitterResizeHandler() {
5918
5907
  this.getItemCount();
@@ -6943,8 +6932,11 @@ class ContextMenu {
6943
6932
  if (this.menuType === 'folder') {
6944
6933
  if (this.parent.activeModule === 'navigationpane') {
6945
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);
6946
6939
  }
6947
- this.parent.folderPath = getFullPath(this.parent, this.menuItemData, this.parent.path);
6948
6940
  }
6949
6941
  else {
6950
6942
  this.parent.folderPath = '';
@@ -7371,6 +7363,7 @@ let FileManager = FileManager_1 = class FileManager extends Component {
7371
7363
  this.uploadedCount = 0;
7372
7364
  //Specifies whether the operating system is MAC or not
7373
7365
  this.isMac = false;
7366
+ this.dragSelectedItems = [];
7374
7367
  FileManager_1.Inject(BreadCrumbBar, LargeIconsView, ContextMenu);
7375
7368
  }
7376
7369
  /**
@@ -7493,6 +7486,9 @@ let FileManager = FileManager_1 = class FileManager extends Component {
7493
7486
  this.setRtl(this.enableRtl);
7494
7487
  this.addEventListeners();
7495
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
+ }
7496
7492
  this.adjustHeight();
7497
7493
  if (isNullOrUndefined(this.navigationpaneModule)) {
7498
7494
  this.splitterObj.collapse(this.enableRtl ? 1 : 0);
@@ -7929,7 +7925,33 @@ let FileManager = FileManager_1 = class FileManager extends Component {
7929
7925
  break;
7930
7926
  }
7931
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
+ }
7932
7951
  wireEvents() {
7952
+ if (this.enableRangeSelection) {
7953
+ this.wireSelectOnDragEvent(true);
7954
+ }
7933
7955
  EventHandler.add(window, 'resize', this.resizeHandler, this);
7934
7956
  this.keyboardModule = new KeyboardEvents(this.element, {
7935
7957
  keyAction: this.keyActionHandler.bind(this),
@@ -7938,9 +7960,93 @@ let FileManager = FileManager_1 = class FileManager extends Component {
7938
7960
  });
7939
7961
  }
7940
7962
  unWireEvents() {
7963
+ this.wireSelectOnDragEvent(false);
7941
7964
  EventHandler.remove(window, 'resize', this.resizeHandler);
7942
7965
  this.keyboardModule.destroy();
7943
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
+ }
7944
8050
  setPath() {
7945
8051
  this.setProperties({ selectedItems: [] }, true);
7946
8052
  this.ensurePath();
@@ -7986,6 +8092,12 @@ let FileManager = FileManager_1 = class FileManager extends Component {
7986
8092
  case 'detailsViewSettings':
7987
8093
  this.notify(modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });
7988
8094
  break;
8095
+ case 'enableRangeSelection':
8096
+ this.wireSelectOnDragEvent(false);
8097
+ if (newProp.enableRangeSelection) {
8098
+ this.wireSelectOnDragEvent(true);
8099
+ }
8100
+ break;
7989
8101
  case 'enableRtl':
7990
8102
  this.enableRtl = newProp.enableRtl;
7991
8103
  this.refresh();
@@ -8166,6 +8278,9 @@ let FileManager = FileManager_1 = class FileManager extends Component {
8166
8278
  this.largeiconsviewModule = null;
8167
8279
  this.detailsviewModule = null;
8168
8280
  this.breadcrumbbarModule = null;
8281
+ this.viewElem = null;
8282
+ this.dragSelectElement = null;
8283
+ this.dragSelectedItems = null;
8169
8284
  }
8170
8285
  /**
8171
8286
  * Creates a new folder in file manager.
@@ -8354,6 +8469,23 @@ let FileManager = FileManager_1 = class FileManager extends Component {
8354
8469
  selectAll() {
8355
8470
  this.notify(methodCall, { action: 'selectAll' });
8356
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
+ }
8357
8489
  /**
8358
8490
  * Deselects the currently selected folders and files in current path.
8359
8491
  *
@@ -8490,6 +8622,9 @@ __decorate$8([
8490
8622
  __decorate$8([
8491
8623
  Property(null)
8492
8624
  ], FileManager.prototype, "sortComparer", void 0);
8625
+ __decorate$8([
8626
+ Property(false)
8627
+ ], FileManager.prototype, "enableRangeSelection", void 0);
8493
8628
  __decorate$8([
8494
8629
  Complex({}, ToolbarSettings)
8495
8630
  ], FileManager.prototype, "toolbarSettings", void 0);
@@ -10399,7 +10534,8 @@ class DetailsView {
10399
10534
  ctrlD: 'ctrl+d',
10400
10535
  f2: 'f2',
10401
10536
  ctrlA: 'ctrl+a',
10402
- enter: 'enter'
10537
+ enter: 'enter',
10538
+ back: 'backspace'
10403
10539
  };
10404
10540
  }
10405
10541
  /* istanbul ignore next */
@@ -10570,6 +10706,10 @@ class DetailsView {
10570
10706
  for (let i = 0, len = columns.length; i < len; i++) {
10571
10707
  columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;
10572
10708
  }
10709
+ if (this.parent.enableRangeSelection) {
10710
+ const HiddenName = { field: 'name', visible: false, customAttributes: { class: 'e-drag-text' } };
10711
+ columns.push(HiddenName);
10712
+ }
10573
10713
  return columns;
10574
10714
  }
10575
10715
  adjustHeight() {
@@ -11393,7 +11533,8 @@ class DetailsView {
11393
11533
  onpasteEnd(args) {
11394
11534
  if (this.parent.view === 'Details') {
11395
11535
  this.isPasteOperation = true;
11396
- if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {
11536
+ if (this.parent.path === this.parent.destinationPath ||
11537
+ this.parent.path === getDirectoryPath(this.parent, args) || this.parent.hasId) {
11397
11538
  this.onPathChanged(args);
11398
11539
  }
11399
11540
  }
@@ -11829,6 +11970,9 @@ class DetailsView {
11829
11970
  this.parent.setProperties({ selectedItems: lastItem }, true);
11830
11971
  this.selectRecords(lastItem);
11831
11972
  break;
11973
+ case 'back':
11974
+ this.parent.traverseBackward();
11975
+ break;
11832
11976
  }
11833
11977
  }
11834
11978
  gridSelectNodes() {