@syncfusion/ej2-filemanager 33.2.10 → 34.1.29

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 (291) hide show
  1. package/dist/ej2-filemanager.min.js +2 -2
  2. package/dist/ej2-filemanager.umd.min.js +2 -2
  3. package/dist/ej2-filemanager.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-filemanager.es2015.js +297 -13
  5. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  6. package/dist/es6/ej2-filemanager.es5.js +297 -13
  7. package/dist/es6/ej2-filemanager.es5.js.map +1 -1
  8. package/dist/global/ej2-filemanager.min.js +2 -2
  9. package/dist/global/ej2-filemanager.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +11 -11
  12. package/src/file-manager/common/operations.js +1 -1
  13. package/src/file-manager/layout/details-view.d.ts +10 -0
  14. package/src/file-manager/layout/details-view.js +295 -11
  15. package/src/file-manager/layout/large-icons-view.js +1 -1
  16. package/styles/bds-lite.css +11 -347
  17. package/styles/bds-lite.scss +1 -13
  18. package/styles/bds.css +15 -362
  19. package/styles/bds.scss +2 -14
  20. package/styles/bootstrap-dark-lite.css +14 -58
  21. package/styles/bootstrap-dark-lite.scss +1 -13
  22. package/styles/bootstrap-dark.css +18 -65
  23. package/styles/bootstrap-dark.scss +2 -14
  24. package/styles/bootstrap-lite.css +8 -59
  25. package/styles/bootstrap-lite.scss +1 -13
  26. package/styles/bootstrap.css +12 -66
  27. package/styles/bootstrap.scss +2 -14
  28. package/styles/bootstrap4-lite.css +16 -64
  29. package/styles/bootstrap4-lite.scss +1 -13
  30. package/styles/bootstrap4.css +20 -71
  31. package/styles/bootstrap4.scss +2 -14
  32. package/styles/bootstrap5-dark-lite.css +17 -67
  33. package/styles/bootstrap5-dark-lite.scss +1 -13
  34. package/styles/bootstrap5-dark.css +21 -74
  35. package/styles/bootstrap5-dark.scss +2 -14
  36. package/styles/bootstrap5-lite.css +17 -67
  37. package/styles/bootstrap5-lite.scss +1 -14
  38. package/styles/bootstrap5.3-lite.css +8 -228
  39. package/styles/bootstrap5.3-lite.scss +1 -14
  40. package/styles/bootstrap5.3.css +12 -403
  41. package/styles/bootstrap5.3.scss +2 -15
  42. package/styles/bootstrap5.css +21 -74
  43. package/styles/bootstrap5.scss +2 -15
  44. package/styles/fabric-dark-lite.css +12 -60
  45. package/styles/fabric-dark-lite.scss +1 -14
  46. package/styles/fabric-dark.css +16 -67
  47. package/styles/fabric-dark.scss +2 -15
  48. package/styles/fabric-lite.css +12 -61
  49. package/styles/fabric-lite.scss +1 -14
  50. package/styles/fabric.css +16 -68
  51. package/styles/fabric.scss +2 -15
  52. package/styles/file-manager/_all.scss +2 -2
  53. package/styles/file-manager/_bds-definition.scss +1 -2
  54. package/styles/file-manager/_bigger.scss +14 -2
  55. package/styles/file-manager/_bootstrap-dark-definition.scss +1 -2
  56. package/styles/file-manager/_bootstrap-definition.scss +1 -2
  57. package/styles/file-manager/_bootstrap4-definition.scss +1 -2
  58. package/styles/file-manager/_bootstrap5-dark-definition.scss +1 -2
  59. package/styles/file-manager/_bootstrap5-definition.scss +1 -2
  60. package/styles/file-manager/_bootstrap5.3-definition.scss +1 -2
  61. package/styles/file-manager/_fabric-dark-definition.scss +1 -2
  62. package/styles/file-manager/_fabric-definition.scss +1 -2
  63. package/styles/file-manager/_fluent-dark-definition.scss +1 -2
  64. package/styles/file-manager/_fluent-definition.scss +1 -2
  65. package/styles/file-manager/_fluent2-definition.scss +1 -2
  66. package/styles/file-manager/_fusionnew-definition.scss +1 -2
  67. package/styles/file-manager/_highcontrast-definition.scss +1 -2
  68. package/styles/file-manager/_highcontrast-light-definition.scss +1 -2
  69. package/styles/file-manager/_layout.scss +7 -3
  70. package/styles/file-manager/_material-dark-definition.scss +1 -2
  71. package/styles/file-manager/_material-definition.scss +1 -2
  72. package/styles/file-manager/_material3-dark-definition.scss +2 -2
  73. package/styles/file-manager/_material3-definition.scss +2 -2
  74. package/styles/file-manager/_tailwind-dark-definition.scss +1 -2
  75. package/styles/file-manager/_tailwind-definition.scss +1 -2
  76. package/styles/file-manager/_tailwind3-definition.scss +1 -2
  77. package/styles/file-manager/_theme.scss +1 -1
  78. package/styles/file-manager/_variables.scss +2 -0
  79. package/styles/file-manager/bds.css +15 -362
  80. package/styles/file-manager/bds.scss +2 -15
  81. package/styles/file-manager/bootstrap-dark.css +18 -65
  82. package/styles/file-manager/bootstrap-dark.scss +2 -15
  83. package/styles/file-manager/bootstrap.css +12 -66
  84. package/styles/file-manager/bootstrap.scss +2 -15
  85. package/styles/file-manager/bootstrap4.css +20 -71
  86. package/styles/file-manager/bootstrap4.scss +2 -15
  87. package/styles/file-manager/bootstrap5-dark.css +21 -74
  88. package/styles/file-manager/bootstrap5-dark.scss +2 -15
  89. package/styles/file-manager/bootstrap5.3.css +12 -403
  90. package/styles/file-manager/bootstrap5.3.scss +2 -15
  91. package/styles/file-manager/bootstrap5.css +21 -74
  92. package/styles/file-manager/bootstrap5.scss +2 -15
  93. package/styles/file-manager/fabric-dark.css +16 -67
  94. package/styles/file-manager/fabric-dark.scss +2 -15
  95. package/styles/file-manager/fabric.css +16 -68
  96. package/styles/file-manager/fabric.scss +2 -15
  97. package/styles/file-manager/fluent-dark.css +12 -66
  98. package/styles/file-manager/fluent-dark.scss +2 -15
  99. package/styles/file-manager/fluent.css +12 -66
  100. package/styles/file-manager/fluent.scss +2 -15
  101. package/styles/file-manager/fluent2.css +19 -650
  102. package/styles/file-manager/fluent2.scss +2 -15
  103. package/styles/file-manager/highcontrast-light.css +12 -65
  104. package/styles/file-manager/highcontrast-light.scss +2 -15
  105. package/styles/file-manager/highcontrast.css +20 -74
  106. package/styles/file-manager/highcontrast.scss +2 -15
  107. package/styles/file-manager/icons/_bds.scss +1 -1
  108. package/styles/file-manager/icons/_bootstrap-dark.scss +1 -1
  109. package/styles/file-manager/icons/_bootstrap.scss +1 -1
  110. package/styles/file-manager/icons/_bootstrap4.scss +1 -1
  111. package/styles/file-manager/icons/_bootstrap5.3.scss +1 -1
  112. package/styles/file-manager/icons/_bootstrap5.scss +1 -1
  113. package/styles/file-manager/icons/_fabric-dark.scss +1 -1
  114. package/styles/file-manager/icons/_fabric.scss +1 -1
  115. package/styles/file-manager/icons/_fluent.scss +1 -1
  116. package/styles/file-manager/icons/_fluent2.scss +1 -1
  117. package/styles/file-manager/icons/_fusionnew.scss +1 -1
  118. package/styles/file-manager/icons/_highcontrast-light.scss +1 -1
  119. package/styles/file-manager/icons/_highcontrast.scss +1 -1
  120. package/styles/file-manager/icons/_material-dark.scss +1 -1
  121. package/styles/file-manager/icons/_material.scss +1 -1
  122. package/styles/file-manager/icons/_material3.scss +1 -1
  123. package/styles/file-manager/icons/_tailwind.scss +1 -1
  124. package/styles/file-manager/icons/_tailwind3.scss +1 -1
  125. package/styles/file-manager/material-dark.css +12 -101
  126. package/styles/file-manager/material-dark.scss +2 -15
  127. package/styles/file-manager/material.css +12 -123
  128. package/styles/file-manager/material.scss +2 -15
  129. package/styles/file-manager/material3-dark.css +15 -424
  130. package/styles/file-manager/material3-dark.scss +2 -15
  131. package/styles/file-manager/material3.css +15 -432
  132. package/styles/file-manager/material3.scss +2 -15
  133. package/styles/file-manager/tailwind-dark.css +15 -67
  134. package/styles/file-manager/tailwind-dark.scss +2 -15
  135. package/styles/file-manager/tailwind.css +15 -67
  136. package/styles/file-manager/tailwind.scss +2 -15
  137. package/styles/file-manager/tailwind3.css +14 -425
  138. package/styles/file-manager/tailwind3.scss +2 -15
  139. package/styles/fluent-dark-lite.css +8 -59
  140. package/styles/fluent-dark-lite.scss +1 -14
  141. package/styles/fluent-dark.css +12 -66
  142. package/styles/fluent-dark.scss +2 -15
  143. package/styles/fluent-lite.css +8 -59
  144. package/styles/fluent-lite.scss +1 -14
  145. package/styles/fluent.css +12 -66
  146. package/styles/fluent.scss +2 -15
  147. package/styles/fluent2-lite.css +15 -471
  148. package/styles/fluent2-lite.scss +1 -14
  149. package/styles/fluent2.css +19 -650
  150. package/styles/fluent2.scss +2 -15
  151. package/styles/highcontrast-light-lite.css +8 -58
  152. package/styles/highcontrast-light-lite.scss +1 -14
  153. package/styles/highcontrast-light.css +12 -65
  154. package/styles/highcontrast-light.scss +2 -15
  155. package/styles/highcontrast-lite.css +16 -67
  156. package/styles/highcontrast-lite.scss +1 -14
  157. package/styles/highcontrast.css +20 -74
  158. package/styles/highcontrast.scss +2 -15
  159. package/styles/material-dark-lite.css +8 -94
  160. package/styles/material-dark-lite.scss +1 -14
  161. package/styles/material-dark.css +12 -101
  162. package/styles/material-dark.scss +2 -15
  163. package/styles/material-lite.css +8 -116
  164. package/styles/material-lite.scss +1 -13
  165. package/styles/material.css +12 -123
  166. package/styles/material.scss +2 -14
  167. package/styles/material3-dark-lite.css +11 -255
  168. package/styles/material3-dark-lite.scss +1 -14
  169. package/styles/material3-dark.css +15 -424
  170. package/styles/material3-dark.scss +2 -15
  171. package/styles/material3-lite.css +11 -259
  172. package/styles/material3-lite.scss +1 -14
  173. package/styles/material3.css +15 -432
  174. package/styles/material3.scss +2 -15
  175. package/styles/tailwind-dark-lite.css +11 -60
  176. package/styles/tailwind-dark-lite.scss +1 -14
  177. package/styles/tailwind-dark.css +15 -67
  178. package/styles/tailwind-dark.scss +2 -15
  179. package/styles/tailwind-lite.css +11 -60
  180. package/styles/tailwind-lite.scss +1 -14
  181. package/styles/tailwind.css +15 -67
  182. package/styles/tailwind.scss +2 -15
  183. package/styles/tailwind3-lite.css +10 -270
  184. package/styles/tailwind3-lite.scss +1 -14
  185. package/styles/tailwind3.css +14 -425
  186. package/styles/tailwind3.scss +2 -15
  187. package/styles/file-manager/_all.bds.scss +0 -2
  188. package/styles/file-manager/_all.bootstrap-dark.scss +0 -2
  189. package/styles/file-manager/_all.bootstrap.scss +0 -2
  190. package/styles/file-manager/_all.bootstrap4.scss +0 -2
  191. package/styles/file-manager/_all.bootstrap5-dark.scss +0 -2
  192. package/styles/file-manager/_all.bootstrap5.3.scss +0 -2
  193. package/styles/file-manager/_all.bootstrap5.scss +0 -2
  194. package/styles/file-manager/_all.fabric-dark.scss +0 -2
  195. package/styles/file-manager/_all.fabric.scss +0 -2
  196. package/styles/file-manager/_all.fluent-dark.scss +0 -2
  197. package/styles/file-manager/_all.fluent.scss +0 -2
  198. package/styles/file-manager/_all.fluent2.scss +0 -2
  199. package/styles/file-manager/_all.highcontrast-light.scss +0 -2
  200. package/styles/file-manager/_all.highcontrast.scss +0 -2
  201. package/styles/file-manager/_all.material-dark.scss +0 -2
  202. package/styles/file-manager/_all.material.scss +0 -2
  203. package/styles/file-manager/_all.material3-dark.scss +0 -2
  204. package/styles/file-manager/_all.material3.scss +0 -2
  205. package/styles/file-manager/_all.tailwind-dark.scss +0 -2
  206. package/styles/file-manager/_all.tailwind.scss +0 -2
  207. package/styles/file-manager/_all.tailwind3.scss +0 -2
  208. package/styles/file-manager/_bigger.bds.scss +0 -4
  209. package/styles/file-manager/_bigger.bootstrap-dark.scss +0 -4
  210. package/styles/file-manager/_bigger.bootstrap.scss +0 -4
  211. package/styles/file-manager/_bigger.bootstrap4.scss +0 -4
  212. package/styles/file-manager/_bigger.bootstrap5-dark.scss +0 -4
  213. package/styles/file-manager/_bigger.bootstrap5.3.scss +0 -4
  214. package/styles/file-manager/_bigger.bootstrap5.scss +0 -4
  215. package/styles/file-manager/_bigger.fabric-dark.scss +0 -4
  216. package/styles/file-manager/_bigger.fabric.scss +0 -4
  217. package/styles/file-manager/_bigger.fluent-dark.scss +0 -4
  218. package/styles/file-manager/_bigger.fluent.scss +0 -4
  219. package/styles/file-manager/_bigger.fluent2.scss +0 -4
  220. package/styles/file-manager/_bigger.highcontrast-light.scss +0 -4
  221. package/styles/file-manager/_bigger.highcontrast.scss +0 -4
  222. package/styles/file-manager/_bigger.material-dark.scss +0 -4
  223. package/styles/file-manager/_bigger.material.scss +0 -4
  224. package/styles/file-manager/_bigger.material3-dark.scss +0 -4
  225. package/styles/file-manager/_bigger.material3.scss +0 -4
  226. package/styles/file-manager/_bigger.tailwind-dark.scss +0 -4
  227. package/styles/file-manager/_bigger.tailwind.scss +0 -4
  228. package/styles/file-manager/_bigger.tailwind3.scss +0 -4
  229. package/styles/file-manager/_layout.bds.scss +0 -3
  230. package/styles/file-manager/_layout.bootstrap-dark.scss +0 -3
  231. package/styles/file-manager/_layout.bootstrap.scss +0 -3
  232. package/styles/file-manager/_layout.bootstrap4.scss +0 -3
  233. package/styles/file-manager/_layout.bootstrap5-dark.scss +0 -3
  234. package/styles/file-manager/_layout.bootstrap5.3.scss +0 -3
  235. package/styles/file-manager/_layout.bootstrap5.scss +0 -3
  236. package/styles/file-manager/_layout.fabric-dark.scss +0 -3
  237. package/styles/file-manager/_layout.fabric.scss +0 -3
  238. package/styles/file-manager/_layout.fluent-dark.scss +0 -3
  239. package/styles/file-manager/_layout.fluent.scss +0 -3
  240. package/styles/file-manager/_layout.fluent2.scss +0 -3
  241. package/styles/file-manager/_layout.highcontrast-light.scss +0 -3
  242. package/styles/file-manager/_layout.highcontrast.scss +0 -3
  243. package/styles/file-manager/_layout.material-dark.scss +0 -3
  244. package/styles/file-manager/_layout.material.scss +0 -3
  245. package/styles/file-manager/_layout.material3-dark.scss +0 -3
  246. package/styles/file-manager/_layout.material3.scss +0 -3
  247. package/styles/file-manager/_layout.tailwind-dark.scss +0 -3
  248. package/styles/file-manager/_layout.tailwind.scss +0 -3
  249. package/styles/file-manager/_layout.tailwind3.scss +0 -3
  250. package/styles/file-manager/_theme-variables.bds.scss +0 -1
  251. package/styles/file-manager/_theme-variables.bootstrap-dark.scss +0 -1
  252. package/styles/file-manager/_theme-variables.bootstrap.scss +0 -1
  253. package/styles/file-manager/_theme-variables.bootstrap4.scss +0 -1
  254. package/styles/file-manager/_theme-variables.bootstrap5-dark.scss +0 -1
  255. package/styles/file-manager/_theme-variables.bootstrap5.3.scss +0 -1
  256. package/styles/file-manager/_theme-variables.bootstrap5.scss +0 -1
  257. package/styles/file-manager/_theme-variables.fabric-dark.scss +0 -1
  258. package/styles/file-manager/_theme-variables.fabric.scss +0 -1
  259. package/styles/file-manager/_theme-variables.fluent-dark.scss +0 -1
  260. package/styles/file-manager/_theme-variables.fluent.scss +0 -1
  261. package/styles/file-manager/_theme-variables.fluent2.scss +0 -1
  262. package/styles/file-manager/_theme-variables.highcontrast-light.scss +0 -1
  263. package/styles/file-manager/_theme-variables.highcontrast.scss +0 -1
  264. package/styles/file-manager/_theme-variables.material-dark.scss +0 -1
  265. package/styles/file-manager/_theme-variables.material.scss +0 -1
  266. package/styles/file-manager/_theme-variables.material3-dark.scss +0 -1
  267. package/styles/file-manager/_theme-variables.material3.scss +0 -1
  268. package/styles/file-manager/_theme-variables.tailwind-dark.scss +0 -1
  269. package/styles/file-manager/_theme-variables.tailwind.scss +0 -1
  270. package/styles/file-manager/_theme-variables.tailwind3.scss +0 -1
  271. package/styles/file-manager/_theme.bds.scss +0 -4
  272. package/styles/file-manager/_theme.bootstrap-dark.scss +0 -4
  273. package/styles/file-manager/_theme.bootstrap.scss +0 -4
  274. package/styles/file-manager/_theme.bootstrap4.scss +0 -4
  275. package/styles/file-manager/_theme.bootstrap5-dark.scss +0 -4
  276. package/styles/file-manager/_theme.bootstrap5.3.scss +0 -4
  277. package/styles/file-manager/_theme.bootstrap5.scss +0 -4
  278. package/styles/file-manager/_theme.fabric-dark.scss +0 -4
  279. package/styles/file-manager/_theme.fabric.scss +0 -4
  280. package/styles/file-manager/_theme.fluent-dark.scss +0 -4
  281. package/styles/file-manager/_theme.fluent.scss +0 -4
  282. package/styles/file-manager/_theme.fluent2.scss +0 -4
  283. package/styles/file-manager/_theme.highcontrast-light.scss +0 -4
  284. package/styles/file-manager/_theme.highcontrast.scss +0 -4
  285. package/styles/file-manager/_theme.material-dark.scss +0 -4
  286. package/styles/file-manager/_theme.material.scss +0 -4
  287. package/styles/file-manager/_theme.material3-dark.scss +0 -4
  288. package/styles/file-manager/_theme.material3.scss +0 -4
  289. package/styles/file-manager/_theme.tailwind-dark.scss +0 -4
  290. package/styles/file-manager/_theme.tailwind.scss +0 -4
  291. package/styles/file-manager/_theme.tailwind3.scss +0 -4
@@ -3189,7 +3189,7 @@ function performReadOperation(parent, result, fn, data, event, operation, target
3189
3189
  setValue('location', location, result.details);
3190
3190
  }
3191
3191
  fn(parent, result, event, operation, targetPath);
3192
- if (!isNullOrUndefined(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path')) {
3192
+ if (!isNullOrUndefined(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end' || event === 'drop-path' || event === 'delete-end')) {
3193
3193
  parent.notify(searchTextChange, result);
3194
3194
  }
3195
3195
  if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {
@@ -6027,7 +6027,7 @@ class LargeIconsView {
6027
6027
  * @hidden
6028
6028
  */
6029
6029
  getFirstItem() {
6030
- return this.itemList[0];
6030
+ return !isNullOrUndefined(this.itemList) && this.itemList.length > 0 ? this.itemList[0] : null;
6031
6031
  }
6032
6032
  getLastItem() {
6033
6033
  return this.itemList[this.itemList.length - 1];
@@ -11144,6 +11144,7 @@ class DetailsView {
11144
11144
  this.dragObj = null;
11145
11145
  this.startIndex = null;
11146
11146
  this.firstItemIndex = null;
11147
+ this.currentColumnIndex = 0;
11147
11148
  this.isSelectionUpdate = false;
11148
11149
  this.currentSelectedItem = [];
11149
11150
  this.count = 0;
@@ -11151,6 +11152,7 @@ class DetailsView {
11151
11152
  this.isLoaded = false;
11152
11153
  this.isNameWidth = false;
11153
11154
  this.isMultiSelect = false;
11155
+ this.isTabKeypressed = false;
11154
11156
  this.pasteOperation = false;
11155
11157
  this.uploadOperation = false;
11156
11158
  this.nextFocusIndex = null;
@@ -11162,6 +11164,7 @@ class DetailsView {
11162
11164
  altEnter: 'alt+enter',
11163
11165
  esc: 'escape',
11164
11166
  tab: 'tab',
11167
+ shiftTab: 'shift+tab',
11165
11168
  moveDown: 'downarrow',
11166
11169
  ctrlEnd: 'ctrl+end',
11167
11170
  ctrlHome: 'ctrl+home',
@@ -11184,6 +11187,8 @@ class DetailsView {
11184
11187
  end: 'end',
11185
11188
  home: 'home',
11186
11189
  moveUp: 'uparrow',
11190
+ moveLeft: 'leftarrow',
11191
+ moveRight: 'rightarrow',
11187
11192
  del: 'delete',
11188
11193
  ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',
11189
11194
  ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',
@@ -11397,6 +11402,9 @@ class DetailsView {
11397
11402
  const pane = select('#' + this.parent.element.id + CONTENT_ID, this.parent.element);
11398
11403
  const bar = select('#' + this.parent.element.id + BREADCRUMBBAR_ID, this.parent.element);
11399
11404
  const gridHeader = select('.' + GRID_HEADER, this.parent.element);
11405
+ if (isNullOrUndefined(pane) || isNullOrUndefined(bar) || isNullOrUndefined(gridHeader)) {
11406
+ return;
11407
+ }
11400
11408
  const height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);
11401
11409
  this.gridObj.height = height;
11402
11410
  this.gridObj.dataBind();
@@ -11605,9 +11613,11 @@ class DetailsView {
11605
11613
  }
11606
11614
  }
11607
11615
  if (typeof this.nextFocusIndex === 'number') {
11608
- const rowCount = this.gridObj.getRows().length;
11609
- if (rowCount > 0) {
11610
- this.addFocus(this.nextFocusIndex >= rowCount ? rowCount : this.nextFocusIndex);
11616
+ if (!isNullOrUndefined(this.gridObj.getRows())) {
11617
+ const rowCount = this.gridObj.getRows().length;
11618
+ if (rowCount > 0) {
11619
+ this.addFocus(this.nextFocusIndex >= rowCount ? rowCount : this.nextFocusIndex);
11620
+ }
11611
11621
  }
11612
11622
  this.nextFocusIndex = null;
11613
11623
  }
@@ -12363,7 +12373,7 @@ class DetailsView {
12363
12373
  this.openContent(args.data);
12364
12374
  }
12365
12375
  }
12366
- this.parent.visitedItem = args.row;
12376
+ this.parent.visitedItem = (Array.isArray(args.row) ? args.row[args.row.length - 1] : args.row);
12367
12377
  if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {
12368
12378
  this.addFocus(this.gridObj.selectedRowIndex);
12369
12379
  }
@@ -12509,8 +12519,21 @@ class DetailsView {
12509
12519
  }
12510
12520
  }
12511
12521
  getFocusedItemIndex() {
12512
- return (!isNullOrUndefined(this.getFocusedItem())) ?
12513
- parseInt(this.getFocusedItem().getAttribute('aria-rowindex'), 10) - 1 : null;
12522
+ const focusedItem = this.getFocusedItem();
12523
+ if (isNullOrUndefined(focusedItem)) {
12524
+ return null;
12525
+ }
12526
+ if (focusedItem.classList.contains('e-rowcell')) {
12527
+ return this.getRowIndexFromParent(focusedItem);
12528
+ }
12529
+ return parseInt(focusedItem.getAttribute('aria-rowindex'), 10) - 1;
12530
+ }
12531
+ getRowIndexFromParent(focusedItem) {
12532
+ const parentRow = focusedItem.parentElement;
12533
+ if (parentRow && parentRow.classList.contains('e-row')) {
12534
+ return parseInt(parentRow.getAttribute('aria-rowindex'), 10) - 1;
12535
+ }
12536
+ return null;
12514
12537
  }
12515
12538
  /* istanbul ignore next */
12516
12539
  keydownHandler(e) {
@@ -12539,6 +12562,8 @@ class DetailsView {
12539
12562
  case 'ctrlLeft':
12540
12563
  case 'shiftLeft':
12541
12564
  case 'csLeft':
12565
+ case 'tab':
12566
+ case 'shiftTab':
12542
12567
  case 'esc':
12543
12568
  case 'del':
12544
12569
  case 'shiftdel':
@@ -12548,6 +12573,8 @@ class DetailsView {
12548
12573
  case 'f2':
12549
12574
  case 'moveDown':
12550
12575
  case 'moveUp':
12576
+ case 'moveLeft':
12577
+ case 'moveRight':
12551
12578
  case 'ctrlD':
12552
12579
  e.preventDefault();
12553
12580
  break;
@@ -12628,12 +12655,18 @@ class DetailsView {
12628
12655
  break;
12629
12656
  case 'ctrlHome':
12630
12657
  case 'tab':
12658
+ case 'shiftTab':
12631
12659
  if (!isNullOrUndefined(gridItems[0])) {
12632
12660
  if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {
12633
12661
  this.gridObj.selectRow(0);
12634
12662
  }
12635
- else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {
12636
- return;
12663
+ else if (e.action === 'shiftTab') {
12664
+ this.handleReverseTabNavigation(e);
12665
+ }
12666
+ else if (e.action === 'tab') {
12667
+ this.isTabKeypressed = true;
12668
+ this.addHeaderFocus(e);
12669
+ this.isTabKeypressed = false;
12637
12670
  }
12638
12671
  else {
12639
12672
  this.addHeaderFocus(e);
@@ -12703,6 +12736,10 @@ class DetailsView {
12703
12736
  case 'moveDown':
12704
12737
  this.moveFunction(gridItems, e, selIndex);
12705
12738
  break;
12739
+ case 'moveLeft':
12740
+ case 'moveRight':
12741
+ this.moveColumn(e);
12742
+ break;
12706
12743
  case 'end':
12707
12744
  lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];
12708
12745
  this.parent.setProperties({ selectedItems: lastItem }, true);
@@ -12833,6 +12870,72 @@ class DetailsView {
12833
12870
  }
12834
12871
  this.addFocus(nextItem);
12835
12872
  }
12873
+ moveColumn(e) {
12874
+ const focusedItem = this.getFocusedItem();
12875
+ if (isNullOrUndefined(focusedItem)) {
12876
+ return;
12877
+ }
12878
+ const isHeaderFocused = focusedItem.classList.contains('e-headercell');
12879
+ const isRowFocused = focusedItem.classList.contains('e-row');
12880
+ const isCellFocused = focusedItem.classList.contains('e-rowcell');
12881
+ if (!isHeaderFocused && !isRowFocused && !isCellFocused) {
12882
+ return;
12883
+ }
12884
+ if (isHeaderFocused) {
12885
+ const headers = Array.from(this.element.querySelectorAll('th.e-headercell:not(.e-fe-checkbox)'));
12886
+ const currentIndex = headers.indexOf(focusedItem);
12887
+ if (currentIndex === -1) {
12888
+ return;
12889
+ }
12890
+ const nextIndex = this.getNextColumnIndex(currentIndex, headers.length, e.action === 'moveRight');
12891
+ // eslint-disable-next-line security/detect-object-injection
12892
+ const headerElement = headers[nextIndex];
12893
+ focusedItem.setAttribute('tabindex', '-1');
12894
+ removeClass([focusedItem], [FOCUS, FOCUSED]);
12895
+ headerElement.setAttribute('tabindex', '0');
12896
+ headerElement.focus();
12897
+ addClass([headerElement], [FOCUS, FOCUSED]);
12898
+ }
12899
+ else if (isRowFocused || isCellFocused) {
12900
+ const row = (isRowFocused ? focusedItem : focusedItem.parentElement);
12901
+ if (!isRowFocused && (!row || !row.classList.contains('e-row'))) {
12902
+ return;
12903
+ }
12904
+ const cells = Array.from(row.querySelectorAll('.e-rowcell'));
12905
+ if (cells.length === 0) {
12906
+ return;
12907
+ }
12908
+ const currentCellIndex = this.currentColumnIndex || 0;
12909
+ const nextColumnIndex = this.getNextColumnIndex(currentCellIndex, cells.length, e.action === 'moveRight');
12910
+ this.currentColumnIndex = nextColumnIndex;
12911
+ if (isRowFocused) {
12912
+ removeClass([row], [FOCUS, FOCUSED]);
12913
+ row.setAttribute('tabindex', '-1');
12914
+ }
12915
+ else {
12916
+ removeClass([focusedItem], [FOCUS, FOCUSED]);
12917
+ focusedItem.setAttribute('tabindex', '-1');
12918
+ }
12919
+ this.clearCellFocus(cells);
12920
+ // eslint-disable-next-line security/detect-object-injection
12921
+ const nextCell = cells[nextColumnIndex];
12922
+ nextCell.setAttribute('tabindex', '0');
12923
+ addClass([nextCell], [FOCUS, FOCUSED]);
12924
+ nextCell.focus();
12925
+ }
12926
+ }
12927
+ clearCellFocus(cells) {
12928
+ for (let i = 0; i < cells.length; i++) {
12929
+ cells[i].setAttribute('tabindex', '-1');
12930
+ removeClass([cells[i]], [FOCUS, FOCUSED]);
12931
+ }
12932
+ }
12933
+ getNextColumnIndex(currentIndex, maxLength, isRight) {
12934
+ if (isRight) {
12935
+ return Math.min(currentIndex + 1, maxLength - 1);
12936
+ }
12937
+ return Math.max(currentIndex - 1, 0);
12938
+ }
12836
12939
  checkRowsKey(items, indexValue, focIndex, e) {
12837
12940
  if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {
12838
12941
  if (e.action !== 'csHome' && e.action !== 'csEnd') {
@@ -12918,18 +13021,58 @@ class DetailsView {
12918
13021
  if (fItem) {
12919
13022
  fItem.removeAttribute('tabindex');
12920
13023
  removeClass([fItem], [FOCUS, FOCUSED]);
13024
+ if (fItem.classList.contains('e-rowcell')) {
13025
+ const parentRow = fItem.parentElement;
13026
+ if (parentRow) {
13027
+ removeClass([parentRow], [FOCUS, FOCUSED]);
13028
+ parentRow.removeAttribute('tabindex');
13029
+ }
13030
+ }
13031
+ if (fItem.classList.contains('e-row')) {
13032
+ const focusedCells = fItem.querySelectorAll('.e-rowcell');
13033
+ for (let i = 0; i < focusedCells.length; i++) {
13034
+ if (focusedCells[i].classList.contains('e-focus') || focusedCells[i].classList.contains('e-focused')) {
13035
+ focusedCells[i].removeAttribute('tabindex');
13036
+ removeClass([focusedCells[i]], [FOCUS, FOCUSED]);
13037
+ }
13038
+ }
13039
+ }
12921
13040
  }
12922
13041
  if (!isNullOrUndefined(itemElement)) {
12923
13042
  this.gridObj.element.setAttribute('tabindex', '-1');
12924
- itemElement.setAttribute('tabindex', '0');
12925
- itemElement.focus();
12926
- addClass([itemElement], [FOCUS, FOCUSED]);
13043
+ const targetRow = itemElement;
13044
+ targetRow.setAttribute('tabindex', '0');
13045
+ const cells = targetRow.querySelectorAll('.e-rowcell');
13046
+ this.clearCellFocus(Array.from(cells));
13047
+ targetRow.focus();
13048
+ addClass([targetRow], [FOCUS, FOCUSED]);
13049
+ this.currentColumnIndex = 0;
12927
13050
  }
12928
13051
  }
12929
13052
  addHeaderFocus(e) {
12930
13053
  const treeFocus = select('.e-row', this.element);
12931
13054
  this.gridObj.element.setAttribute('tabindex', '-1');
13055
+ const isHeaderFocused = this.getFocusedItem();
12932
13056
  let nameFocus;
13057
+ const focusedRow = select('.e-row.e-focus', this.element);
13058
+ let gridIconCell;
13059
+ if (!isNullOrUndefined(focusedRow) && this.isTabKeypressed) {
13060
+ gridIconCell = select('.e-rowcell.e-fe-grid-icon', focusedRow);
13061
+ }
13062
+ else {
13063
+ if (this.isTabKeypressed) {
13064
+ const activeCell = this.getFocusedItem();
13065
+ if (activeCell && activeCell.classList.contains('e-rowcell')) {
13066
+ gridIconCell = select('.e-rowcell.e-fe-grid-icon', activeCell.closest('.e-row'));
13067
+ }
13068
+ else {
13069
+ gridIconCell = select('.e-rowcell.e-fe-grid-icon', this.element);
13070
+ }
13071
+ }
13072
+ }
13073
+ if (this.tryNavigateToNextCellInRow(focusedRow, gridIconCell, isHeaderFocused)) {
13074
+ return;
13075
+ }
12933
13076
  if (!isNullOrUndefined(e.target) && e.target.classList.contains('e-defaultcursor')) {
12934
13077
  this.addFocus(0);
12935
13078
  nameFocus = e.target.nextElementSibling;
@@ -12951,6 +13094,147 @@ class DetailsView {
12951
13094
  }
12952
13095
  }
12953
13096
  }
13097
+ tryNavigateToNextCellInRow(focusedRow, gridIconCell, isHeaderFocused) {
13098
+ if ((!isNullOrUndefined(focusedRow) || !isNullOrUndefined(gridIconCell)) && (!isNullOrUndefined(isHeaderFocused) && !isHeaderFocused.classList.contains('e-headercell'))) {
13099
+ if (!isNullOrUndefined(gridIconCell)) {
13100
+ const activeCell = this.getFocusedItem();
13101
+ if (activeCell && activeCell.classList.contains('e-rowcell')) {
13102
+ const row = activeCell.parentElement;
13103
+ const cells = row ? Array.from(row.querySelectorAll('.e-rowcell')) : [];
13104
+ const currentIndex = cells.indexOf(activeCell);
13105
+ const nextIndex = currentIndex + 1;
13106
+ if (nextIndex < cells.length) {
13107
+ this.currentColumnIndex = nextIndex;
13108
+ activeCell.setAttribute('tabindex', '-1');
13109
+ removeClass([activeCell], [FOCUS, FOCUSED]);
13110
+ // eslint-disable-next-line security/detect-object-injection
13111
+ const nextCell = cells[nextIndex];
13112
+ nextCell.setAttribute('tabindex', '0');
13113
+ addClass([nextCell], [FOCUS, FOCUSED]);
13114
+ nextCell.focus();
13115
+ return true;
13116
+ }
13117
+ else {
13118
+ const currentRow = activeCell.parentElement;
13119
+ const rows = this.gridObj.getRows();
13120
+ const currentRowIndex = rows.indexOf(currentRow);
13121
+ if (currentRowIndex !== -1) {
13122
+ const nextRow = this.gridObj.getRowByIndex(currentRowIndex + 1);
13123
+ if (!isNullOrUndefined(nextRow)) {
13124
+ activeCell.setAttribute('tabindex', '-1');
13125
+ removeClass([activeCell], [FOCUS, FOCUSED]);
13126
+ this.addFocus(currentRowIndex + 1);
13127
+ return true;
13128
+ }
13129
+ else {
13130
+ activeCell.setAttribute('tabindex', '-1');
13131
+ removeClass([activeCell], [FOCUS, FOCUSED]);
13132
+ activeCell.blur();
13133
+ return true;
13134
+ }
13135
+ }
13136
+ return false;
13137
+ }
13138
+ }
13139
+ const focusedRow = this.getFocusedItem();
13140
+ if (!isNullOrUndefined(focusedRow) && focusedRow.classList.contains('e-row')) {
13141
+ focusedRow.setAttribute('tabindex', '-1');
13142
+ removeClass([focusedRow], [FOCUS, FOCUSED]);
13143
+ }
13144
+ gridIconCell.setAttribute('tabindex', '0');
13145
+ addClass([gridIconCell], [FOCUS, FOCUSED]);
13146
+ gridIconCell.focus();
13147
+ return true;
13148
+ }
13149
+ }
13150
+ return false;
13151
+ }
13152
+ handleReverseTabNavigation(e) {
13153
+ e.preventDefault();
13154
+ const focusedItem = this.getFocusedItem();
13155
+ const headers = Array.from(this.element.querySelectorAll('th.e-headercell:not(.e-fe-checkbox)'));
13156
+ if (headers.length === 0) {
13157
+ return;
13158
+ }
13159
+ if (!isNullOrUndefined(focusedItem) && focusedItem.classList.contains('e-rowcell')) {
13160
+ const row = focusedItem.parentElement;
13161
+ const cells = row ? Array.from(row.querySelectorAll('.e-rowcell:not(.e-gridchkbox)')) : [];
13162
+ const currentTargetIndex = cells.indexOf(focusedItem);
13163
+ const prevIndex = currentTargetIndex - 1;
13164
+ // eslint-disable-next-line security/detect-object-injection
13165
+ const targetElement = prevIndex >= 0 ? cells[prevIndex] : row;
13166
+ focusedItem.setAttribute('tabindex', '-1');
13167
+ removeClass([focusedItem], [FOCUS, FOCUSED]);
13168
+ targetElement.setAttribute('tabindex', '0');
13169
+ addClass([targetElement], [FOCUS, FOCUSED]);
13170
+ targetElement.focus();
13171
+ return;
13172
+ }
13173
+ if (!isNullOrUndefined(focusedItem) && focusedItem.classList.contains('e-row')) {
13174
+ const rows = this.gridObj.getRows();
13175
+ const currentRowIndex = rows.indexOf(focusedItem);
13176
+ if (currentRowIndex > 0) {
13177
+ const previousRow = rows[currentRowIndex - 1];
13178
+ const previousRowCells = Array.from(previousRow.querySelectorAll('.e-rowcell:not(.e-gridchkbox)'));
13179
+ const lastCell = previousRowCells[previousRowCells.length - 1];
13180
+ focusedItem.setAttribute('tabindex', '-1');
13181
+ removeClass([focusedItem], [FOCUS, FOCUSED]);
13182
+ lastCell.setAttribute('tabindex', '0');
13183
+ addClass([lastCell], [FOCUS, FOCUSED]);
13184
+ lastCell.focus();
13185
+ return;
13186
+ }
13187
+ focusedItem.setAttribute('tabindex', '-1');
13188
+ removeClass([focusedItem], [FOCUS, FOCUSED]);
13189
+ this.moveFocusToHeader(headers[headers.length - 1]);
13190
+ return;
13191
+ }
13192
+ if (!isNullOrUndefined(focusedItem) && focusedItem.classList.contains('e-headercell')) {
13193
+ const currentIndex = headers.indexOf(focusedItem);
13194
+ if (currentIndex > 0) {
13195
+ this.moveFocusToHeader(headers[currentIndex - 1]);
13196
+ }
13197
+ else if (currentIndex === 0) {
13198
+ this.clearDetailsFocus();
13199
+ }
13200
+ return;
13201
+ }
13202
+ if (!isNullOrUndefined(focusedItem)) {
13203
+ this.moveFocusToHeader(headers[headers.length - 1]);
13204
+ }
13205
+ }
13206
+ moveFocusToHeader(header) {
13207
+ const focusedItem = this.getFocusedItem();
13208
+ if (!isNullOrUndefined(focusedItem)) {
13209
+ focusedItem.setAttribute('tabindex', '-1');
13210
+ removeClass([focusedItem], [FOCUS, FOCUSED]);
13211
+ }
13212
+ header.setAttribute('tabindex', '0');
13213
+ header.focus();
13214
+ addClass([header], [FOCUS, FOCUSED]);
13215
+ }
13216
+ clearDetailsFocus() {
13217
+ const focusedItem = this.getFocusedItem();
13218
+ if (!isNullOrUndefined(focusedItem)) {
13219
+ focusedItem.setAttribute('tabindex', '-1');
13220
+ removeClass([focusedItem], [FOCUS, FOCUSED]);
13221
+ }
13222
+ const breadcrumbBar = select('.' + BREADCRUMBS, this.parent.element);
13223
+ if (!isNullOrUndefined(breadcrumbBar)) {
13224
+ const searchInput = breadcrumbBar.querySelector('input[aria-label="Search"]');
13225
+ if (!isNullOrUndefined(searchInput)) {
13226
+ searchInput.setAttribute('tabindex', '0');
13227
+ searchInput.focus();
13228
+ }
13229
+ else {
13230
+ const lastBreadcrumb = breadcrumbBar.querySelector('.e-address-list-item:last-child');
13231
+ if (!isNullOrUndefined(lastBreadcrumb)) {
13232
+ lastBreadcrumb.setAttribute('tabindex', '0');
13233
+ lastBreadcrumb.focus();
13234
+ }
13235
+ }
13236
+ }
13237
+ }
12954
13238
  getFocusedItem() {
12955
13239
  return select('.' + FOCUSED, this.element);
12956
13240
  }