@progress/kendo-angular-treelist 13.0.0-develop.3 → 13.0.0-develop.5

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 (41) hide show
  1. package/binding-directives/base-binding.directive.d.ts +5 -1
  2. package/binding-directives/data-bound-tree-component.d.ts +9 -0
  3. package/binding-directives/flat-binding.directive.d.ts +14 -3
  4. package/binding-directives/hierarchy-binding.directive.d.ts +12 -3
  5. package/columns/column-base.d.ts +4 -0
  6. package/columns/rowreorder-column.component.d.ts +19 -0
  7. package/esm2020/binding-directives/base-binding.directive.mjs +9 -3
  8. package/esm2020/binding-directives/flat-binding.directive.mjs +56 -6
  9. package/esm2020/binding-directives/hierarchy-binding.directive.mjs +46 -6
  10. package/esm2020/columns/column-base.mjs +4 -0
  11. package/esm2020/columns/rowreorder-column.component.mjs +47 -0
  12. package/esm2020/index.mjs +2 -0
  13. package/esm2020/localization/messages.mjs +3 -1
  14. package/esm2020/package-metadata.mjs +2 -2
  15. package/esm2020/rendering/cell.component.mjs +47 -16
  16. package/esm2020/rendering/constants.mjs +4 -0
  17. package/esm2020/rendering/table-body.component.mjs +5 -3
  18. package/esm2020/row-reordering/flat-reorder.service.mjs +48 -0
  19. package/esm2020/row-reordering/hierarchical-reorder.service.mjs +55 -0
  20. package/esm2020/row-reordering/row-reorder.service.mjs +220 -0
  21. package/esm2020/row-reordering/types.mjs +5 -0
  22. package/esm2020/row-reordering/utils.mjs +129 -0
  23. package/esm2020/shared.module.mjs +8 -3
  24. package/esm2020/treelist.component.mjs +161 -23
  25. package/esm2020/treelist.module.mjs +71 -66
  26. package/fesm2015/progress-kendo-angular-treelist.mjs +808 -62
  27. package/fesm2020/progress-kendo-angular-treelist.mjs +799 -62
  28. package/index.d.ts +2 -0
  29. package/localization/messages.d.ts +5 -1
  30. package/package.json +16 -15
  31. package/rendering/cell.component.d.ts +6 -1
  32. package/rendering/constants.d.ts +4 -0
  33. package/row-reordering/flat-reorder.service.d.ts +16 -0
  34. package/row-reordering/hierarchical-reorder.service.d.ts +16 -0
  35. package/row-reordering/row-reorder.service.d.ts +61 -0
  36. package/row-reordering/types.d.ts +39 -0
  37. package/row-reordering/utils.d.ts +85 -0
  38. package/schematics/ngAdd/index.js +3 -3
  39. package/shared.module.d.ts +5 -4
  40. package/treelist.component.d.ts +42 -2
  41. package/treelist.module.d.ts +68 -66
@@ -3,7 +3,7 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
- import { Directive, Optional, EventEmitter, Injectable, QueryList, Input, ContentChildren, ContentChild, InjectionToken, forwardRef, Component, SkipSelf, Host, isDevMode, SecurityContext, Inject, HostBinding, Output, Self, ViewChild, HostListener, ViewChildren, Pipe, ChangeDetectionStrategy, ViewEncapsulation, NgModule } from '@angular/core';
6
+ import { Directive, Optional, EventEmitter, Injectable, QueryList, Input, ContentChildren, ContentChild, InjectionToken, forwardRef, Component, SkipSelf, Host, isDevMode, SecurityContext, Inject, Output, HostBinding, Self, ViewChild, HostListener, ViewChildren, Pipe, ChangeDetectionStrategy, ViewEncapsulation, NgModule } from '@angular/core';
7
7
  import * as i4 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
9
9
  import * as i3$2 from '@angular/forms';
@@ -12,28 +12,30 @@ import { merge, of, fromEvent, isObservable, BehaviorSubject, Subscription, Subj
12
12
  import { auditTime, take, switchMap, map, distinctUntilChanged, filter, tap, throttleTime, takeUntil, switchMapTo, debounceTime, delay, bufferCount } from 'rxjs/operators';
13
13
  import { validatePackage } from '@progress/kendo-licensing';
14
14
  import * as i1$3 from '@progress/kendo-angular-common';
15
- import { isDocumentAvailable, Keys, anyChanged, isChanged as isChanged$1, guid, ResizeSensorComponent, hasObservers, DraggableModule, ResizeSensorModule, EventsModule } from '@progress/kendo-angular-common';
15
+ import { isDocumentAvailable, Keys, isPresent as isPresent$1, anyChanged, isChanged as isChanged$1, guid, ResizeSensorComponent, hasObservers, DraggableModule, ResizeSensorModule, EventsModule } from '@progress/kendo-angular-common';
16
16
  import { orderBy, isCompositeFilterDescriptor, process, aggregateBy } from '@progress/kendo-data-query';
17
17
  import * as i1$1 from '@progress/kendo-angular-l10n';
18
18
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
19
19
  import * as i1 from '@progress/kendo-angular-popup';
20
20
  import { PopupModule } from '@progress/kendo-angular-popup';
21
- import { plusIcon, cancelIcon, lockIcon, unlockIcon, filterIcon, sortAscSmallIcon, sortDescSmallIcon, columnsIcon, moreVerticalIcon, filterClearIcon, caretAltDownIcon, caretAltRightIcon, caretAltLeftIcon, caretAltToLeftIcon, caretAltToRightIcon } from '@progress/kendo-svg-icons';
21
+ import { plusIcon, cancelIcon, lockIcon, unlockIcon, insertMiddleIcon, filterIcon, sortAscSmallIcon, sortDescSmallIcon, columnsIcon, moreVerticalIcon, filterClearIcon, caretAltDownIcon, caretAltRightIcon, reorderIcon, caretAltLeftIcon, caretAltToLeftIcon, caretAltToRightIcon } from '@progress/kendo-svg-icons';
22
22
  import * as i1$2 from '@angular/platform-browser';
23
23
  import * as i3 from '@progress/kendo-angular-icons';
24
24
  import { IconsModule } from '@progress/kendo-angular-icons';
25
25
  import { getter, setter } from '@progress/kendo-common';
26
+ import * as i32 from '@progress/kendo-angular-utils';
27
+ import { DragTargetContainerDirective, DropTargetContainerDirective, DragAndDropModule as DragAndDropModule$1 } from '@progress/kendo-angular-utils';
26
28
  import * as i3$1 from '@progress/kendo-angular-dropdowns';
27
29
  import { DropDownListModule, AutoCompleteModule, DropDownsModule } from '@progress/kendo-angular-dropdowns';
28
- import * as i4$1 from '@progress/kendo-angular-inputs';
30
+ import * as i2 from '@progress/kendo-angular-inputs';
29
31
  import { NumericTextBoxComponent, InputsModule, NumericTextBoxModule } from '@progress/kendo-angular-inputs';
30
32
  import * as i3$3 from '@progress/kendo-angular-dateinputs';
31
33
  import { DatePickerModule } from '@progress/kendo-angular-dateinputs';
32
34
  import { trigger, state, style, transition, animate } from '@angular/animations';
33
- import * as i4$2 from '@progress/kendo-angular-buttons';
35
+ import * as i4$1 from '@progress/kendo-angular-buttons';
34
36
  import { ButtonModule, Button } from '@progress/kendo-angular-buttons';
35
37
  import * as i1$4 from '@progress/kendo-angular-intl';
36
- import * as i4$3 from '@progress/kendo-angular-label';
38
+ import * as i4$2 from '@progress/kendo-angular-label';
37
39
  import { LabelModule } from '@progress/kendo-angular-label';
38
40
  import { PDFExportMarginComponent, PDFExportTemplateDirective, PDFExportComponent } from '@progress/kendo-angular-pdf-export';
39
41
  import { saveAs } from '@progress/kendo-file-saver';
@@ -46,8 +48,8 @@ const packageMetadata = {
46
48
  name: '@progress/kendo-angular-treelist',
47
49
  productName: 'Kendo UI for Angular',
48
50
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
49
- publishDate: 1684848378,
50
- version: '13.0.0-develop.3',
51
+ publishDate: 1685016622,
52
+ version: '13.0.0-develop.5',
51
53
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
52
54
  };
53
55
 
@@ -282,6 +284,10 @@ const isSpanColumn = column => column.isSpanColumn;
282
284
  * @hidden
283
285
  */
284
286
  const isCheckboxColumn = column => column.isCheckboxColumn;
287
+ /**
288
+ * @hidden
289
+ */
290
+ const isRowReorderColumn = column => column.isRowReorderColumn;
285
291
  const isColumnContainer = column => column.isColumnGroup || isSpanColumn(column);
286
292
  /**
287
293
  * The base class for the column components of the TreeList.
@@ -3007,17 +3013,17 @@ const append = (element) => {
3007
3013
  /**
3008
3014
  * @hidden
3009
3015
  */
3010
- const getDocument = element => element.ownerDocument.documentElement;
3016
+ const getDocument$1 = element => element.ownerDocument.documentElement;
3011
3017
  /**
3012
3018
  * @hidden
3013
3019
  */
3014
- const getWindow = element => element.ownerDocument.defaultView;
3020
+ const getWindow$1 = element => element.ownerDocument.defaultView;
3015
3021
  /**
3016
3022
  * @hidden
3017
3023
  */
3018
3024
  const offset = element => {
3019
- const { clientTop, clientLeft } = getDocument(element);
3020
- const { pageYOffset, pageXOffset } = getWindow(element);
3025
+ const { clientTop, clientLeft } = getDocument$1(element);
3026
+ const { pageYOffset, pageXOffset } = getWindow$1(element);
3021
3027
  const { top, left } = element.getBoundingClientRect();
3022
3028
  return {
3023
3029
  top: top + pageYOffset - clientTop,
@@ -5177,6 +5183,345 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5177
5183
  type: Injectable
5178
5184
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
5179
5185
 
5186
+ /**
5187
+ * @hidden
5188
+ */
5189
+ const isNextSibling = (dropTarget, dragTarget) => dropTarget === dragTarget.nextElementSibling;
5190
+ /**
5191
+ * @hidden
5192
+ */
5193
+ const isPreviousSibling = (dropTarget, dragTarget) => dropTarget === dragTarget.previousElementSibling;
5194
+ /**
5195
+ * @hidden
5196
+ */
5197
+ function getOffset(element) {
5198
+ const { clientTop, clientLeft } = getDocument(element);
5199
+ const { pageYOffset, pageXOffset } = getWindow(element);
5200
+ const { top, left } = element.getBoundingClientRect();
5201
+ return {
5202
+ top: top + pageYOffset - clientTop,
5203
+ left: left + pageXOffset - clientLeft
5204
+ };
5205
+ }
5206
+ ;
5207
+ /**
5208
+ * @hidden
5209
+ */
5210
+ const hintIcons = {
5211
+ forbidden: 'cancel',
5212
+ before: 'insert-middle',
5213
+ after: 'insert-middle',
5214
+ over: 'plus'
5215
+ };
5216
+ /**
5217
+ * @hidden
5218
+ */
5219
+ const hintSVGIcons = {
5220
+ forbidden: cancelIcon,
5221
+ before: insertMiddleIcon,
5222
+ after: insertMiddleIcon,
5223
+ over: plusIcon
5224
+ };
5225
+ /**
5226
+ * @hidden
5227
+ */
5228
+ const dropPosition = {
5229
+ forbidden: 'forbidden',
5230
+ before: 'before',
5231
+ after: 'after',
5232
+ over: 'over'
5233
+ };
5234
+ /**
5235
+ * @hidden
5236
+ */
5237
+ const hintStyles = {
5238
+ zIndex: '20000',
5239
+ display: 'flex',
5240
+ position: 'fixed'
5241
+ };
5242
+ /**
5243
+ * @hidden
5244
+ */
5245
+ const hintClasses = ['k-drag-clue', 'k-reorder-clue'];
5246
+ /**
5247
+ * @hidden
5248
+ */
5249
+ const dropIndicatorStyles = {
5250
+ zIndex: '19000',
5251
+ position: 'absolute'
5252
+ };
5253
+ /**
5254
+ * @hidden
5255
+ */
5256
+ const dropIndicatorClasses = ['k-drop-hint', 'k-drop-hint-h'];
5257
+ /**
5258
+ * @hidden
5259
+ */
5260
+ const defaultSelectors = {
5261
+ handle: '.k-table-td.k-drag-cell',
5262
+ dragTarget: '.k-table-row[data-treelist-view-index]',
5263
+ dropTarget: '.k-table-row[data-treelist-view-index]'
5264
+ };
5265
+ /**
5266
+ * @hidden
5267
+ */
5268
+ const rowIndexAttr = 'data-treelist-view-index';
5269
+ /**
5270
+ * @hidden
5271
+ */
5272
+ const findParent$1 = (collection, searchItem, field) => {
5273
+ let parent = null;
5274
+ for (const item of collection) {
5275
+ if (searchItem === item) {
5276
+ return null;
5277
+ }
5278
+ const checked = [];
5279
+ const queue = [];
5280
+ queue.push(item);
5281
+ while (queue.length !== 0) {
5282
+ const current = queue.shift();
5283
+ if (!current) {
5284
+ continue;
5285
+ }
5286
+ checked.push(current);
5287
+ if (current === searchItem) {
5288
+ return item;
5289
+ }
5290
+ if (current.hasOwnProperty(field)) {
5291
+ current[field].forEach(node => {
5292
+ if (checked.indexOf(node) === -1) {
5293
+ checked.push(node);
5294
+ queue.push(node);
5295
+ if (node === searchItem) {
5296
+ parent = current;
5297
+ return;
5298
+ }
5299
+ }
5300
+ });
5301
+ }
5302
+ if (parent) {
5303
+ return parent;
5304
+ }
5305
+ }
5306
+ }
5307
+ };
5308
+ const getDocument = element => element === null || element === void 0 ? void 0 : element.ownerDocument.documentElement;
5309
+ const getWindow = element => element === null || element === void 0 ? void 0 : element.ownerDocument.defaultView;
5310
+
5311
+ /**
5312
+ * @hidden
5313
+ */
5314
+ class RowReorderService {
5315
+ constructor(renderer) {
5316
+ this.renderer = renderer;
5317
+ this.defaultSelectors = defaultSelectors;
5318
+ this.dragTarget = null;
5319
+ this.dropTarget = null;
5320
+ this.lastDropPosition = dropPosition.forbidden;
5321
+ this.hintElement = null;
5322
+ this.rowReorder = new EventEmitter();
5323
+ }
5324
+ press(ev) {
5325
+ this.dragTarget = ev.dragTarget;
5326
+ this.offsetY = ev.dragEvent.offsetY;
5327
+ }
5328
+ dragStart() {
5329
+ this.createDropIndicator();
5330
+ }
5331
+ drag(ev) {
5332
+ if (isPresent$1(ev.hintElement) && !isPresent$1(this.hintElement)) {
5333
+ this.hintElement = ev.hintElement;
5334
+ this.decorateHint();
5335
+ }
5336
+ const position = {
5337
+ x: ev.dragEvent.clientX,
5338
+ y: ev.dragEvent.clientY - this.offsetY
5339
+ };
5340
+ if (isPresent$1(this.hintElement)) {
5341
+ this.renderer.setStyle(this.hintElement, 'left', `${position.x}px`);
5342
+ this.renderer.setStyle(this.hintElement, 'top', `${position.y}px`);
5343
+ }
5344
+ this.positionDropIndicator(ev);
5345
+ }
5346
+ dragEnter(ev) {
5347
+ this.dropTarget = ev.dropTarget;
5348
+ this.view = ev.dragData;
5349
+ }
5350
+ dragLeave() {
5351
+ this.dropTarget = null;
5352
+ this.lastDropPosition === dropPosition.forbidden && this.hide();
5353
+ }
5354
+ dragEnd() {
5355
+ this.destroyDropIndicator();
5356
+ this.dragTarget = null;
5357
+ this.dropTarget = null;
5358
+ this.hintElement = null;
5359
+ }
5360
+ drop() {
5361
+ this.destroyDropIndicator();
5362
+ const rowReorderArgs = this.rowReorderArgs(this.dragTarget, this.dropTarget, this.view);
5363
+ this.rowReorder.emit(rowReorderArgs);
5364
+ }
5365
+ get hintIcon() {
5366
+ return hintIcons[this.lastDropPosition];
5367
+ }
5368
+ get hintSVGIcon() {
5369
+ return hintSVGIcons[this.lastDropPosition];
5370
+ }
5371
+ getDefaultHintText(columns, data) {
5372
+ let hintText = '';
5373
+ const columnFieldsArray = columns
5374
+ .toArray()
5375
+ .filter(column => !column.hidden && isPresent$1(column.field))
5376
+ .map(column => column.field);
5377
+ const draggedDragRow = this.getDragRowPerElement(this.dragTarget, data);
5378
+ const draggedDataItem = draggedDragRow === null || draggedDragRow === void 0 ? void 0 : draggedDragRow.dataItem;
5379
+ isPresent$1(draggedDataItem) && columnFieldsArray.forEach(column => {
5380
+ const columnValue = draggedDataItem[column];
5381
+ isPresent$1(columnValue) ? hintText += `${columnValue} ` : null;
5382
+ });
5383
+ return hintText.trim();
5384
+ }
5385
+ rowReorderArgs(dragRow, dropRow, data) {
5386
+ const dragRowData = this.getDragRowPerElement(dragRow, data);
5387
+ const dropRowData = this.getDragRowPerElement(dropRow, data);
5388
+ return {
5389
+ draggedRows: [dragRowData],
5390
+ dropTargetRow: dropRowData,
5391
+ dropPosition: this.lastDropPosition
5392
+ };
5393
+ }
5394
+ isOverChild(_item) { return false; }
5395
+ reorderRows(_ev, _collection, _field) { }
5396
+ get parentIdField() {
5397
+ return this.bindingDirective.parentIdField;
5398
+ }
5399
+ get idField() {
5400
+ return this.bindingDirective.idField;
5401
+ }
5402
+ get childrenField() {
5403
+ return this.bindingDirective.childrenField;
5404
+ }
5405
+ get data() {
5406
+ return this.bindingDirective.data;
5407
+ }
5408
+ getDragRowPerElement(row, data) {
5409
+ var _a;
5410
+ let rowIndex = row === null || row === void 0 ? void 0 : row.getAttribute(rowIndexAttr);
5411
+ rowIndex = rowIndex ? parseInt(rowIndex, 10) : -1;
5412
+ const dataItem = rowIndex === -1 ? null : (_a = data === null || data === void 0 ? void 0 : data.at(rowIndex)) === null || _a === void 0 ? void 0 : _a.data;
5413
+ return {
5414
+ dataItem,
5415
+ rowIndex,
5416
+ element: row
5417
+ };
5418
+ }
5419
+ createDropIndicator() {
5420
+ if (!isDocumentAvailable()) {
5421
+ return;
5422
+ }
5423
+ this.dropIndicator = document.createElement('div');
5424
+ this.decorateDropIndicator();
5425
+ this.dropIndicator.innerHTML = `
5426
+ <div class="k-drop-hint-start"></div>
5427
+ <div class="k-drop-hint-line"></div>
5428
+ `;
5429
+ document.body.appendChild(this.dropIndicator);
5430
+ this.hide();
5431
+ }
5432
+ destroyDropIndicator() {
5433
+ if (!isDocumentAvailable()) {
5434
+ return;
5435
+ }
5436
+ ;
5437
+ if (this.dropIndicator && this.dropIndicator.parentElement) {
5438
+ document.body.removeChild(this.dropIndicator);
5439
+ this.dropIndicator = null;
5440
+ }
5441
+ }
5442
+ decorateHint() {
5443
+ hintClasses.forEach(className => this.renderer.addClass(this.hintElement, className));
5444
+ Object.keys(hintStyles)
5445
+ .forEach(style => this.renderer.setStyle(this.hintElement, style, hintStyles[style]));
5446
+ }
5447
+ positionDropIndicator(ev) {
5448
+ this.lastDropPosition = this.getDropPosition(ev.dragEvent);
5449
+ this.updateDropIndicatorPosition();
5450
+ }
5451
+ decorateDropIndicator() {
5452
+ dropIndicatorClasses.forEach(className => this.renderer.addClass(this.dropIndicator, className));
5453
+ Object.keys(dropIndicatorStyles)
5454
+ .forEach(style => this.renderer.setStyle(this.dropIndicator, style, dropIndicatorStyles[style]));
5455
+ }
5456
+ getDropPosition(e) {
5457
+ if (this.dropTarget === this.dragTarget || !isPresent$1(this.dropTarget)) {
5458
+ return dropPosition.forbidden;
5459
+ }
5460
+ ;
5461
+ const itemViewPortCoords = this.dropTarget.getBoundingClientRect();
5462
+ const itemDivisionsCount = 3;
5463
+ const itemDivisionHeight = itemViewPortCoords.height / itemDivisionsCount;
5464
+ const { dropTargetRow } = this.rowReorderArgs(this.dragTarget, this.dropTarget, this.view);
5465
+ const pointerPosition = e.clientY;
5466
+ const itemTop = itemViewPortCoords.top;
5467
+ let currentDropPosition = null;
5468
+ if (pointerPosition <= itemTop + itemDivisionHeight) {
5469
+ currentDropPosition = dropPosition.before;
5470
+ }
5471
+ else if (pointerPosition >= itemTop + itemViewPortCoords.height - itemDivisionHeight) {
5472
+ currentDropPosition = dropPosition.after;
5473
+ }
5474
+ else {
5475
+ currentDropPosition = dropPosition.over;
5476
+ }
5477
+ if (currentDropPosition === dropPosition.before && isNextSibling(this.dropTarget, this.dragTarget)) {
5478
+ currentDropPosition = dropPosition.forbidden;
5479
+ }
5480
+ else if (currentDropPosition === dropPosition.after && isPreviousSibling(this.dropTarget, this.dragTarget)) {
5481
+ currentDropPosition = dropPosition.forbidden;
5482
+ }
5483
+ if (this.isOverChild(dropTargetRow.dataItem)) {
5484
+ currentDropPosition = dropPosition.forbidden;
5485
+ }
5486
+ return currentDropPosition;
5487
+ }
5488
+ updateDropIndicatorPosition() {
5489
+ if (this.shouldHideDropIndicator() || !this.dropTarget) {
5490
+ this.hide();
5491
+ return;
5492
+ }
5493
+ this.show();
5494
+ const destinationItemOffset = getOffset(this.dropTarget);
5495
+ let indicatorOffsetTop = destinationItemOffset.top;
5496
+ const indicatorOffsetLeft = destinationItemOffset.left + this.dropIndicator.offsetWidth / 2;
5497
+ if (this.lastDropPosition === dropPosition.after) {
5498
+ indicatorOffsetTop += this.dropTarget.offsetHeight;
5499
+ }
5500
+ this.renderer.setStyle(this.dropIndicator, 'left', `${indicatorOffsetLeft}px`);
5501
+ this.renderer.setStyle(this.dropIndicator, 'top', `${indicatorOffsetTop}px`);
5502
+ }
5503
+ shouldHideDropIndicator() {
5504
+ return this.lastDropPosition === dropPosition.forbidden || this.lastDropPosition === dropPosition.over;
5505
+ }
5506
+ hide() {
5507
+ if (isPresent$1(this.dropIndicator)) {
5508
+ this.renderer.setStyle(this.dropIndicator, 'display', 'none');
5509
+ }
5510
+ }
5511
+ show() {
5512
+ if (isPresent$1(this.dropIndicator)) {
5513
+ this.renderer.removeStyle(this.dropIndicator, 'display');
5514
+ }
5515
+ }
5516
+ }
5517
+ RowReorderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RowReorderService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
5518
+ RowReorderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RowReorderService });
5519
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RowReorderService, decorators: [{
5520
+ type: Injectable
5521
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { rowReorder: [{
5522
+ type: Output
5523
+ }] } });
5524
+
5180
5525
  /* eslint-disable @typescript-eslint/no-inferrable-types */
5181
5526
  /**
5182
5527
  * @hidden
@@ -6077,7 +6422,7 @@ StringFilterMenuInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
6077
6422
  [filterDelay]="0"
6078
6423
  [ngModel]="currentFilter?.value" />
6079
6424
  </kendo-treelist-filter-menu-input-wrapper>
6080
- `, isInline: true, components: [{ type: FilterMenuInputWrapperComponent, selector: "kendo-treelist-filter-menu-input-wrapper", inputs: ["filterService", "currentFilter"] }], directives: [{ type: i4$1.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i3$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }, { type: i3$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
6425
+ `, isInline: true, components: [{ type: FilterMenuInputWrapperComponent, selector: "kendo-treelist-filter-menu-input-wrapper", inputs: ["filterService", "currentFilter"] }], directives: [{ type: i2.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i3$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }, { type: i3$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
6081
6426
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: StringFilterMenuInputComponent, decorators: [{
6082
6427
  type: Component,
6083
6428
  args: [{
@@ -6375,7 +6720,7 @@ NumericFilterMenuInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
6375
6720
  [step]="step">
6376
6721
  </kendo-numerictextbox>
6377
6722
  </kendo-treelist-filter-menu-input-wrapper>
6378
- `, isInline: true, components: [{ type: FilterMenuInputWrapperComponent, selector: "kendo-treelist-filter-menu-input-wrapper", inputs: ["filterService", "currentFilter"] }, { type: i4$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }] });
6723
+ `, isInline: true, components: [{ type: FilterMenuInputWrapperComponent, selector: "kendo-treelist-filter-menu-input-wrapper", inputs: ["filterService", "currentFilter"] }, { type: i2.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }] });
6379
6724
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterMenuInputComponent, decorators: [{
6380
6725
  type: Component,
6381
6726
  args: [{
@@ -7133,7 +7478,7 @@ BooleanFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
7133
7478
  <label class="k-radio-label" [attr.for]="radioId(item.value)">{{item.text}}</label>
7134
7479
  </li>
7135
7480
  </ul>
7136
- `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$1.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }] });
7481
+ `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }] });
7137
7482
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BooleanFilterMenuComponent, decorators: [{
7138
7483
  type: Component,
7139
7484
  args: [{
@@ -8629,7 +8974,7 @@ FilterCellOperatorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
8629
8974
  (click)="clearClick()"
8630
8975
  (keydown)="clearKeydown($event)">
8631
8976
  </button>
8632
- `, isInline: true, components: [{ type: i3$1.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i4$2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }] });
8977
+ `, isInline: true, components: [{ type: i3$1.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i4$1.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }] });
8633
8978
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterCellOperatorsComponent, decorators: [{
8634
8979
  type: Component,
8635
8980
  args: [{
@@ -8874,7 +9219,7 @@ NumericFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
8874
9219
  [step]="step">
8875
9220
  </kendo-numerictextbox>
8876
9221
  </kendo-treelist-filter-wrapper-cell>
8877
- `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-treelist-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i4$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }] });
9222
+ `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-treelist-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i2.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }] });
8878
9223
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterCellComponent, decorators: [{
8879
9224
  type: Component,
8880
9225
  args: [{
@@ -10700,6 +11045,10 @@ const ICON_CLASS = 'k-icon k-svg-icon';
10700
11045
  * @hidden
10701
11046
  */
10702
11047
  const IGNORE_CONTAINER_CLASSES = 'k-treelist-ignore-click';
11048
+ /**
11049
+ * @hidden
11050
+ */
11051
+ const DRAG_HANDLE_CLASS = 'k-drag-cell';
10703
11052
 
10704
11053
  /* eslint-disable @angular-eslint/pipe-prefix */
10705
11054
  /**
@@ -10766,13 +11115,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10766
11115
  * @hidden
10767
11116
  */
10768
11117
  class CellComponent {
10769
- constructor(editService, focusGroup) {
11118
+ constructor(editService, localization, focusGroup) {
10770
11119
  this.editService = editService;
11120
+ this.localization = localization;
10771
11121
  this.focusGroup = focusGroup;
10772
11122
  this.isNew = false;
10773
11123
  this.level = 0;
10774
11124
  this.caretAltDownIcon = caretAltDownIcon;
10775
11125
  this.caretAltRightIcon = caretAltRightIcon;
11126
+ this.reorderIcon = reorderIcon;
10776
11127
  this.cellContext = {};
10777
11128
  this._templateContext = {};
10778
11129
  this._editTemplateContext = {};
@@ -10788,6 +11139,12 @@ class CellComponent {
10788
11139
  get textNoWrapClass() {
10789
11140
  return this.column.expandable;
10790
11141
  }
11142
+ get dragHandleCellClass() {
11143
+ return isRowReorderColumn(this.column);
11144
+ }
11145
+ get dragRowHandleLabel() {
11146
+ return isRowReorderColumn(this.column) ? this.localization.get('dragRowHandleLabel') : undefined;
11147
+ }
10791
11148
  set viewItem(value) {
10792
11149
  this._viewItem = value;
10793
11150
  this.cellContext.viewItem = this.viewItem;
@@ -10855,8 +11212,8 @@ class CellComponent {
10855
11212
  context.rowIndex = this.viewItem.rowIndex;
10856
11213
  }
10857
11214
  }
10858
- CellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CellComponent, deps: [{ token: EditService }, { token: FocusGroup }], target: i0.ɵɵFactoryTarget.Component });
10859
- CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: CellComponent, selector: "[kendoTreeListCell]", inputs: { column: "column", columnIndex: "columnIndex", isNew: "isNew", level: "level", hasChildren: "hasChildren", isExpanded: "isExpanded", loading: "loading", expandIcons: "expandIcons", selected: "selected", dataItem: "dataItem", viewItem: "viewItem" }, host: { properties: { "class.k-command-cell": "this.commandCellClass", "class.k-checkbox-cell": "this.isCheckboxColumn", "class.k-text-nowrap": "this.textNoWrapClass" } }, ngImport: i0, template: `
11215
+ CellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CellComponent, deps: [{ token: EditService }, { token: i1$1.LocalizationService }, { token: FocusGroup }], target: i0.ɵɵFactoryTarget.Component });
11216
+ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: CellComponent, selector: "[kendoTreeListCell]", inputs: { column: "column", columnIndex: "columnIndex", isNew: "isNew", level: "level", hasChildren: "hasChildren", isExpanded: "isExpanded", loading: "loading", expandIcons: "expandIcons", selected: "selected", dataItem: "dataItem", viewItem: "viewItem" }, host: { properties: { "class.k-command-cell": "this.commandCellClass", "class.k-checkbox-cell": "this.isCheckboxColumn", "class.k-text-nowrap": "this.textNoWrapClass", "class.k-drag-cell": "this.dragHandleCellClass", "class.k-touch-action-none": "this.dragHandleCellClass", "attr.aria-label": "this.dragRowHandleLabel" } }, ngImport: i0, template: `
10860
11217
  <ng-container [ngSwitch]="isEdited">
10861
11218
  <ng-container *ngSwitchCase="false">
10862
11219
  <ng-container *ngIf="column.expandable">
@@ -10885,6 +11242,12 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
10885
11242
  class="k-checkbox k-checkbox-md k-rounded-md"
10886
11243
  [checked]="selected" />
10887
11244
  </ng-template>
11245
+ <ng-container *ngIf="column.isRowReorderColumn && !isNew">
11246
+ <kendo-icon-wrapper
11247
+ name="reorder"
11248
+ [svgIcon]="reorderIcon">
11249
+ </kendo-icon-wrapper>
11250
+ </ng-container>
10888
11251
  </ng-container>
10889
11252
  <ng-container *ngSwitchCase="true">
10890
11253
  <ng-container
@@ -10925,7 +11288,7 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
10925
11288
  </ng-container>
10926
11289
  </ng-container>
10927
11290
  </ng-container>
10928
- `, isInline: true, components: [{ type: i3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i4$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i3$3.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "title", "subtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }], directives: [{ type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i3$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3$2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], pipes: { "levelItems": LevelItemsPipe, "valueOf": FieldAccessorPipe } });
11291
+ `, isInline: true, components: [{ type: i3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i2.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i3$3.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "title", "subtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }], directives: [{ type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i3$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3$2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], pipes: { "levelItems": LevelItemsPipe, "valueOf": FieldAccessorPipe } });
10929
11292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CellComponent, decorators: [{
10930
11293
  type: Component,
10931
11294
  args: [{
@@ -10959,6 +11322,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10959
11322
  class="k-checkbox k-checkbox-md k-rounded-md"
10960
11323
  [checked]="selected" />
10961
11324
  </ng-template>
11325
+ <ng-container *ngIf="column.isRowReorderColumn && !isNew">
11326
+ <kendo-icon-wrapper
11327
+ name="reorder"
11328
+ [svgIcon]="reorderIcon">
11329
+ </kendo-icon-wrapper>
11330
+ </ng-container>
10962
11331
  </ng-container>
10963
11332
  <ng-container *ngSwitchCase="true">
10964
11333
  <ng-container
@@ -11001,7 +11370,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11001
11370
  </ng-container>
11002
11371
  `
11003
11372
  }]
11004
- }], ctorParameters: function () { return [{ type: EditService }, { type: FocusGroup }]; }, propDecorators: { commandCellClass: [{
11373
+ }], ctorParameters: function () { return [{ type: EditService }, { type: i1$1.LocalizationService }, { type: FocusGroup }]; }, propDecorators: { commandCellClass: [{
11005
11374
  type: HostBinding,
11006
11375
  args: ['class.k-command-cell']
11007
11376
  }], isCheckboxColumn: [{
@@ -11010,6 +11379,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11010
11379
  }], textNoWrapClass: [{
11011
11380
  type: HostBinding,
11012
11381
  args: ['class.k-text-nowrap']
11382
+ }], dragHandleCellClass: [{
11383
+ type: HostBinding,
11384
+ args: ['class.k-drag-cell']
11385
+ }, {
11386
+ type: HostBinding,
11387
+ args: ['class.k-touch-action-none']
11388
+ }], dragRowHandleLabel: [{
11389
+ type: HostBinding,
11390
+ args: ['attr.aria-label']
11013
11391
  }], column: [{
11014
11392
  type: Input
11015
11393
  }], columnIndex: [{
@@ -11214,8 +11592,10 @@ class TableBodyComponent {
11214
11592
  clickHandler(eventArg) {
11215
11593
  const target = eventArg.target;
11216
11594
  const { cell, row } = this.targetElements(target);
11217
- if (cell && !hasClasses(cell, NON_DATA_CELL_CLASSES) &&
11218
- !hasClasses(row, NON_DATA_ROW_CLASSES)) {
11595
+ const forbiddenCellClasses = NON_DATA_CELL_CLASSES.concat(` ${DRAG_HANDLE_CLASS}`);
11596
+ const isValidCell = cell ? !hasClasses(cell, forbiddenCellClasses) : false;
11597
+ const isValidRow = row ? !hasClasses(row, NON_DATA_ROW_CLASSES) : false;
11598
+ if (isValidRow && isValidCell) {
11219
11599
  if (this.expandClick(eventArg, row) || this.checkboxClick(cell, row, eventArg)) {
11220
11600
  return;
11221
11601
  }
@@ -12629,7 +13009,7 @@ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
12629
13009
  [attr.aria-label]="textFor('pagerPreviousPage')"
12630
13010
  (click)="onButtonClick('prevPage')">
12631
13011
  </button>
12632
- `, isInline: true, components: [{ type: i4$2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13012
+ `, isInline: true, components: [{ type: i4$1.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12633
13013
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
12634
13014
  type: Component,
12635
13015
  args: [{
@@ -12814,7 +13194,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
12814
13194
  [attr.title]="pageLabel(end + 1)"
12815
13195
  (click)="changePage(end)">...</button>
12816
13196
  </div>
12817
- `, isInline: true, components: [{ type: i4$2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13197
+ `, isInline: true, components: [{ type: i4$1.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12818
13198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNumericButtonsComponent, decorators: [{
12819
13199
  type: Component,
12820
13200
  args: [{
@@ -12983,7 +13363,7 @@ PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
12983
13363
  </kendo-numerictextbox>
12984
13364
  {{textFor('pagerOf')}} {{totalPages}}
12985
13365
  </span>
12986
- `, isInline: true, components: [{ type: i4$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i1$3.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
13366
+ `, isInline: true, components: [{ type: i2.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i1$3.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
12987
13367
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInputComponent, decorators: [{
12988
13368
  type: Component,
12989
13369
  args: [{
@@ -13089,7 +13469,7 @@ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
13089
13469
  [attr.aria-label]="textFor('pagerLastPage')"
13090
13470
  (click)="onButtonClick('lastPage')">
13091
13471
  </button>
13092
- `, isInline: true, components: [{ type: i4$2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13472
+ `, isInline: true, components: [{ type: i4$1.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13093
13473
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
13094
13474
  type: Component,
13095
13475
  args: [{
@@ -13289,7 +13669,7 @@ PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
13289
13669
  [attr.aria-label]="textFor('pagerItemsPerPage')"
13290
13670
  (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
13291
13671
  <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
13292
- `, isInline: true, components: [{ type: i3$1.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i4$3.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional"], exportAs: ["kendoLabel"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13672
+ `, isInline: true, components: [{ type: i3$1.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i4$2.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional"], exportAs: ["kendoLabel"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13293
13673
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
13294
13674
  type: Component,
13295
13675
  args: [{
@@ -13691,7 +14071,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13691
14071
  class Messages extends ComponentMessages {
13692
14072
  }
13693
14073
  Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
13694
- Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: Messages, inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItemsTotal: "pagerItemsTotal", selectPage: "selectPage", filter: "filter", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterGteOperator: "filterGteOperator", filterGtOperator: "filterGtOperator", filterLteOperator: "filterLteOperator", filterLtOperator: "filterLtOperator", filterIsTrue: "filterIsTrue", filterIsFalse: "filterIsFalse", filterBooleanAll: "filterBooleanAll", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", loading: "loading", columnMenu: "columnMenu", columns: "columns", lock: "lock", unlock: "unlock", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", columnsApply: "columnsApply", columnsReset: "columnsReset", topToolbarLabel: "topToolbarLabel", bottomToolbarLabel: "bottomToolbarLabel" }, usesInheritance: true, ngImport: i0 });
14074
+ Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: Messages, inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItemsTotal: "pagerItemsTotal", selectPage: "selectPage", filter: "filter", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterGteOperator: "filterGteOperator", filterGtOperator: "filterGtOperator", filterLteOperator: "filterLteOperator", filterLtOperator: "filterLtOperator", filterIsTrue: "filterIsTrue", filterIsFalse: "filterIsFalse", filterBooleanAll: "filterBooleanAll", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", loading: "loading", columnMenu: "columnMenu", columns: "columns", lock: "lock", unlock: "unlock", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", columnsApply: "columnsApply", columnsReset: "columnsReset", topToolbarLabel: "topToolbarLabel", bottomToolbarLabel: "bottomToolbarLabel", dragRowHandleLabel: "dragRowHandleLabel" }, usesInheritance: true, ngImport: i0 });
13695
14075
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, decorators: [{
13696
14076
  type: Directive,
13697
14077
  args: [{}]
@@ -13803,6 +14183,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13803
14183
  type: Input
13804
14184
  }], bottomToolbarLabel: [{
13805
14185
  type: Input
14186
+ }], dragRowHandleLabel: [{
14187
+ type: Input
13806
14188
  }] } });
13807
14189
 
13808
14190
  /**
@@ -14125,7 +14507,7 @@ const isInEditedCell = (element, treelistElement) => closest(element, matchesCla
14125
14507
  * {% endmeta %}
14126
14508
  */
14127
14509
  class TreeListComponent {
14128
- constructor(supportService, wrapper, changeNotification, editService, filterService, pdfService, responsiveService, renderer, excelService, ngZone, scrollSyncService, domEvents, columnResizingService, changeDetectorRef, columnReorderService, columnInfoService, navigationService, sortService, scrollRequestService, expandStateService, optionChanges, selectionService, localization, ctx) {
14510
+ constructor(supportService, wrapper, changeNotification, editService, filterService, pdfService, responsiveService, renderer, excelService, ngZone, scrollSyncService, domEvents, columnResizingService, changeDetectorRef, columnReorderService, columnInfoService, navigationService, sortService, scrollRequestService, expandStateService, optionChanges, selectionService, localization, ctx, rowReorderService) {
14129
14511
  this.supportService = supportService;
14130
14512
  this.wrapper = wrapper;
14131
14513
  this.changeNotification = changeNotification;
@@ -14150,6 +14532,7 @@ class TreeListComponent {
14150
14532
  this.selectionService = selectionService;
14151
14533
  this.localization = localization;
14152
14534
  this.ctx = ctx;
14535
+ this.rowReorderService = rowReorderService;
14153
14536
  /**
14154
14537
  * Defines the page size used by the TreeList when [paging]({% slug paging_treelist %}) is enabled.
14155
14538
  *
@@ -14385,6 +14768,11 @@ class TreeListComponent {
14385
14768
  * Used by the expand directive and the Gantt component.
14386
14769
  */
14387
14770
  this.expandStateChange = new EventEmitter();
14771
+ /**
14772
+ * Fires when the user drops the dragged row and reordering is performed.
14773
+ * Emits the [RowReorderEvent]({% slug api_treelist_rowreorderevent %}).
14774
+ */
14775
+ this.rowReorder = new EventEmitter();
14388
14776
  /**
14389
14777
  * @hidden
14390
14778
  */
@@ -14414,6 +14802,11 @@ class TreeListComponent {
14414
14802
  this._sort = new Array();
14415
14803
  this._skip = 0;
14416
14804
  this.cachedWindowWidth = 0;
14805
+ this._rowReorderable = false;
14806
+ /**
14807
+ * @hidden
14808
+ */
14809
+ this.treeListData = () => { return this.view; };
14417
14810
  this._rowClass = () => null;
14418
14811
  validatePackage(packageMetadata);
14419
14812
  this.subscriptions.add(localization.changes.subscribe(({ rtl }) => {
@@ -14476,6 +14869,11 @@ class TreeListComponent {
14476
14869
  this.view.clear();
14477
14870
  this.expandStateChange.emit(args);
14478
14871
  }
14872
+ if (this.rowReorderable) {
14873
+ this.ngZone.onStable.pipe(take(2)).subscribe(() => {
14874
+ this.notifyReorderContainers();
14875
+ });
14876
+ }
14479
14877
  }));
14480
14878
  this.subscriptions.add(this.view.childrenLoaded.subscribe(() => {
14481
14879
  this.changeDetectorRef.detectChanges();
@@ -14674,6 +15072,27 @@ class TreeListComponent {
14674
15072
  }
14675
15073
  this.selectionService.isSelected = value;
14676
15074
  }
15075
+ /**
15076
+ * Enables the [row reordering]({% slug treelist_row_reordering %}) of the TreeList.
15077
+ * @default false
15078
+ */
15079
+ set rowReorderable(value) {
15080
+ var _a;
15081
+ this._rowReorderable = value;
15082
+ if (value) {
15083
+ this.rowReorderSubscription = this.rowReorderService.rowReorder.subscribe(args => {
15084
+ hasObservers(this.rowReorder) && this.ngZone.run(() => {
15085
+ this.rowReorder.emit(args);
15086
+ });
15087
+ });
15088
+ }
15089
+ else {
15090
+ (_a = this.rowReorderSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
15091
+ }
15092
+ }
15093
+ get rowReorderable() {
15094
+ return this._rowReorderable;
15095
+ }
14677
15096
  /**
14678
15097
  * @hidden
14679
15098
  */
@@ -14935,6 +15354,30 @@ class TreeListComponent {
14935
15354
  this.ngZone = null;
14936
15355
  clearTimeout(this.pageChangeTimeout);
14937
15356
  }
15357
+ /**
15358
+ * @hidden
15359
+ */
15360
+ handleReorderEvents(ev, evType) {
15361
+ this.rowReorderService[evType](ev);
15362
+ }
15363
+ /**
15364
+ * @hidden
15365
+ */
15366
+ getDefaultSelectors(type) {
15367
+ return this.rowReorderService.defaultSelectors[type];
15368
+ }
15369
+ /**
15370
+ * @hidden
15371
+ */
15372
+ getHintSettings(setting) {
15373
+ return this.rowReorderService[setting];
15374
+ }
15375
+ /**
15376
+ * @hidden
15377
+ */
15378
+ get hintText() {
15379
+ return this.rowReorderService.getDefaultHintText(this.columnList, this.view);
15380
+ }
14938
15381
  /**
14939
15382
  * @hidden
14940
15383
  */
@@ -15626,6 +16069,7 @@ class TreeListComponent {
15626
16069
  this.closeCell();
15627
16070
  this.cancelCell();
15628
16071
  this.dataStateChange.emit(x);
16072
+ this.rowReorderable && this.notifyReorderContainers();
15629
16073
  }));
15630
16074
  }
15631
16075
  attachEditHandlers() {
@@ -15890,9 +16334,14 @@ class TreeListComponent {
15890
16334
  this.columns.reset(columns.toArray());
15891
16335
  this.columns.notifyOnChanges();
15892
16336
  }
16337
+ notifyReorderContainers() {
16338
+ var _a, _b;
16339
+ (_a = this.dragTargetContainer) === null || _a === void 0 ? void 0 : _a.notify();
16340
+ (_b = this.dropTargetContainer) === null || _b === void 0 ? void 0 : _b.notify();
16341
+ }
15893
16342
  }
15894
- TreeListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListComponent, deps: [{ token: BrowserSupportService }, { token: i0.ElementRef }, { token: ChangeNotificationService }, { token: EditService }, { token: FilterService }, { token: PDFService }, { token: ResponsiveService }, { token: i0.Renderer2 }, { token: ExcelService }, { token: i0.NgZone }, { token: ScrollSyncService }, { token: DomEventsService }, { token: ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: ColumnReorderService }, { token: ColumnInfoService }, { token: NavigationService }, { token: SortService }, { token: ScrollRequestService }, { token: ExpandStateService }, { token: OptionChangesService }, { token: SelectionService }, { token: i1$1.LocalizationService }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
15895
- TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TreeListComponent, selector: "kendo-treelist", inputs: { ariaLabel: ["aria-label", "ariaLabel"], data: "data", pageSize: "pageSize", height: "height", rowHeight: "rowHeight", skip: "skip", scrollable: "scrollable", sort: "sort", trackBy: "trackBy", filter: "filter", virtualColumns: "virtualColumns", filterable: "filterable", sortable: "sortable", pageable: "pageable", navigable: "navigable", navigatable: "navigatable", autoSize: "autoSize", rowClass: "rowClass", resizable: "resizable", reorderable: "reorderable", loading: "loading", columnMenu: "columnMenu", hideHeader: "hideHeader", idField: "idField", selectable: "selectable", isSelected: "isSelected", columnsRef: ["columns", "columnsRef"], fetchChildren: "fetchChildren", hasChildren: "hasChildren", isExpanded: "isExpanded" }, outputs: { selectionChange: "selectionChange", filterChange: "filterChange", pageChange: "pageChange", sortChange: "sortChange", dataStateChange: "dataStateChange", edit: "edit", cancel: "cancel", save: "save", remove: "remove", add: "add", cellClose: "cellClose", cellClick: "cellClick", pdfExport: "pdfExport", excelExport: "excelExport", columnResize: "columnResize", columnReorder: "columnReorder", columnVisibilityChange: "columnVisibilityChange", columnLockedChange: "columnLockedChange", scrollBottom: "scrollBottom", contentScroll: "contentScroll", expandEvent: "expand", collapseEvent: "collapse", expandStateChange: "expandStateChange" }, host: { properties: { "attr.dir": "this.dir", "class.k-grid": "this.hostClasses", "class.k-grid-md": "this.hostClasses", "class.k-treelist": "this.hostClasses", "class.k-grid-lockedcolumns": "this.lockedClasses", "class.k-grid-virtual": "this.virtualClasses", "class.k-grid-no-scrollbar": "this.noScrollbarClass" } }, providers: [
16343
+ TreeListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListComponent, deps: [{ token: BrowserSupportService }, { token: i0.ElementRef }, { token: ChangeNotificationService }, { token: EditService }, { token: FilterService }, { token: PDFService }, { token: ResponsiveService }, { token: i0.Renderer2 }, { token: ExcelService }, { token: i0.NgZone }, { token: ScrollSyncService }, { token: DomEventsService }, { token: ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: ColumnReorderService }, { token: ColumnInfoService }, { token: NavigationService }, { token: SortService }, { token: ScrollRequestService }, { token: ExpandStateService }, { token: OptionChangesService }, { token: SelectionService }, { token: i1$1.LocalizationService }, { token: ContextService }, { token: RowReorderService }], target: i0.ɵɵFactoryTarget.Component });
16344
+ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TreeListComponent, selector: "kendo-treelist", inputs: { ariaLabel: ["aria-label", "ariaLabel"], data: "data", pageSize: "pageSize", height: "height", rowHeight: "rowHeight", skip: "skip", scrollable: "scrollable", sort: "sort", trackBy: "trackBy", filter: "filter", virtualColumns: "virtualColumns", filterable: "filterable", sortable: "sortable", pageable: "pageable", navigable: "navigable", navigatable: "navigatable", autoSize: "autoSize", rowClass: "rowClass", resizable: "resizable", reorderable: "reorderable", loading: "loading", columnMenu: "columnMenu", hideHeader: "hideHeader", idField: "idField", selectable: "selectable", isSelected: "isSelected", rowReorderable: "rowReorderable", columnsRef: ["columns", "columnsRef"], fetchChildren: "fetchChildren", hasChildren: "hasChildren", isExpanded: "isExpanded" }, outputs: { selectionChange: "selectionChange", filterChange: "filterChange", pageChange: "pageChange", sortChange: "sortChange", dataStateChange: "dataStateChange", edit: "edit", cancel: "cancel", save: "save", remove: "remove", add: "add", cellClose: "cellClose", cellClick: "cellClick", pdfExport: "pdfExport", excelExport: "excelExport", columnResize: "columnResize", columnReorder: "columnReorder", columnVisibilityChange: "columnVisibilityChange", columnLockedChange: "columnLockedChange", scrollBottom: "scrollBottom", contentScroll: "contentScroll", expandEvent: "expand", collapseEvent: "collapse", expandStateChange: "expandStateChange", rowReorder: "rowReorder" }, host: { properties: { "attr.dir": "this.dir", "class.k-grid": "this.hostClasses", "class.k-grid-md": "this.hostClasses", "class.k-treelist": "this.hostClasses", "class.k-grid-lockedcolumns": "this.lockedClasses", "class.k-grid-virtual": "this.virtualClasses", "class.k-grid-no-scrollbar": "this.noScrollbarClass" } }, providers: [
15896
16345
  BrowserSupportService,
15897
16346
  LocalizationService,
15898
16347
  ColumnInfoService,
@@ -15933,8 +16382,9 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15933
16382
  provide: ExpandableTreeComponent,
15934
16383
  useExisting: forwardRef(() => TreeListComponent)
15935
16384
  },
15936
- ContextService
15937
- ], queries: [{ propertyName: "columns", predicate: ColumnBase }, { propertyName: "noRecordsTemplateChildren", predicate: NoRecordsTemplateDirective }, { propertyName: "pagerTemplateChildren", predicate: PagerTemplateDirective }, { propertyName: "toolbarTemplateChildren", predicate: ToolbarTemplateDirective }, { propertyName: "columnMenuTemplates", predicate: ColumnMenuTemplateDirective }], viewQueries: [{ propertyName: "lockedHeader", first: true, predicate: ["lockedHeader"], descendants: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "ariaRoot", first: true, predicate: ["ariaRoot"], descendants: true, static: true }, { propertyName: "footer", predicate: ["footer"], descendants: true }], exportAs: ["kendoTreeList"], usesOnChanges: true, ngImport: i0, template: `
16385
+ ContextService,
16386
+ RowReorderService
16387
+ ], queries: [{ propertyName: "columns", predicate: ColumnBase }, { propertyName: "noRecordsTemplateChildren", predicate: NoRecordsTemplateDirective }, { propertyName: "pagerTemplateChildren", predicate: PagerTemplateDirective }, { propertyName: "toolbarTemplateChildren", predicate: ToolbarTemplateDirective }, { propertyName: "columnMenuTemplates", predicate: ColumnMenuTemplateDirective }], viewQueries: [{ propertyName: "lockedHeader", first: true, predicate: ["lockedHeader"], descendants: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "ariaRoot", first: true, predicate: ["ariaRoot"], descendants: true, static: true }, { propertyName: "dragTargetContainer", first: true, predicate: DragTargetContainerDirective, descendants: true }, { propertyName: "dropTargetContainer", first: true, predicate: DropTargetContainerDirective, descendants: true }, { propertyName: "footer", predicate: ["footer"], descendants: true }], exportAs: ["kendoTreeList"], usesOnChanges: true, ngImport: i0, template: `
15938
16388
  <ng-container kendoTreeListLocalizedMessages
15939
16389
 
15940
16390
  i18n-noRecords="kendo.treelist.noRecords|The label visible in the TreeList when there are no records"
@@ -16095,6 +16545,8 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
16095
16545
 
16096
16546
  i18n-bottomToolbarLabel="kendo.treelist.bottomToolbarLabel|The label of the TreeList bottom toolbar"
16097
16547
  bottomToolbarLabel="Bottom toolbar"
16548
+ i18n-dragRowHandleLabel="kendo.treelist.dragRowHandleLabel|The label for the TreeList drag row handle"
16549
+ dragRowHandleLabel="Drag row"
16098
16550
  >
16099
16551
  </ng-container>
16100
16552
  <kendo-treelist-toolbar
@@ -16112,7 +16564,24 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
16112
16564
  [attr.aria-rowcount]="ariaRowCount"
16113
16565
  [attr.aria-colcount]="ariaColCount"
16114
16566
  [attr.aria-multiselectable]="ariaMultiselectable"
16115
- [attr.aria-label]="ariaLabel">
16567
+ [attr.aria-label]="ariaLabel"
16568
+ kendoDragTargetContainer
16569
+ kendoDropTargetContainer
16570
+ mode="manual"
16571
+ [dragDisabled]="!rowReorderable"
16572
+ [dropDisabled]="!rowReorderable"
16573
+ [dragTargetFilter]="getDefaultSelectors('dragTarget')"
16574
+ [dropTargetFilter]="getDefaultSelectors('dropTarget')"
16575
+ [dragHandle]="getDefaultSelectors('handle')"
16576
+ [hint]="{hintTemplate: defaultHint}"
16577
+ (onPress)="handleReorderEvents($event, 'press')"
16578
+ (onDragStart)="handleReorderEvents($event, 'dragStart')"
16579
+ (onDrag)="handleReorderEvents($event, 'drag')"
16580
+ (onDragEnter)="handleReorderEvents($event, 'dragEnter')"
16581
+ (onDragLeave)="handleReorderEvents($event, 'dragLeave')"
16582
+ (onDragEnd)="handleReorderEvents($event, 'dragEnd')"
16583
+ (onDrop)="handleReorderEvents($event, 'drop')"
16584
+ [dragData]="treeListData">
16116
16585
  <ng-template [ngIf]="isScrollable">
16117
16586
  <div *ngIf="!hideHeader"
16118
16587
  class="k-grid-header"
@@ -16264,7 +16733,16 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
16264
16733
  [attr.aria-label]="messageFor('bottomToolbarLabel')"
16265
16734
  [attr.aria-controls]="ariaRootId">
16266
16735
  </kendo-treelist-toolbar>
16267
- `, isInline: true, components: [{ type: ToolbarComponent, selector: "kendo-treelist-toolbar", inputs: ["position", "navigable"] }, { type: ColGroupComponent, selector: "[kendoTreeListColGroup]", inputs: ["columns"] }, { type: HeaderComponent, selector: "[kendoTreeListHeader]", inputs: ["totalColumnLevels", "columns", "scrollable", "filterable", "sort", "filter", "sortable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount"] }, { type: ListComponent, selector: "kendo-treelist-list", inputs: ["view", "total", "rowHeight", "take", "skip", "columns", "noRecordsTemplate", "filterable", "rowClass", "loading", "trackBy", "virtualColumns", "isVirtual", "expandIcons"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { type: TableBodyComponent, selector: "[kendoTreeListTableBody]", inputs: ["columns", "allColumns", "noRecordsTemplate", "view", "skip", "filterable", "noRecordsText", "isLocked", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "expandIcons", "trackBy", "rowClass"] }, { type: LoadingComponent, selector: "[kendoTreeListLoading]" }, { type: PagerComponent, selector: "kendo-treelist-pager", inputs: ["allCount", "total", "skip", "navigable", "pageSize", "options", "template"], outputs: ["pageChange"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoTreeListLocalizedMessages]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TableDirective, selector: "table", inputs: ["locked", "virtualColumns"] }, { type: ResizableContainerDirective, selector: "[kendoTreeListResizableContainer]", inputs: ["lockedWidth", "kendoTreeListResizableContainer"] }, { type: i1$3.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: MarqueeDirective, selector: "[kendoTreeListSelectionMarquee]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
16736
+
16737
+ <ng-template #defaultHint>
16738
+ <kendo-icon-wrapper
16739
+ [name]="getHintSettings('hintIcon')"
16740
+ [svgIcon]="getHintSettings('hintSVGIcon')"
16741
+ innerCssClass="k-drag-status">
16742
+ </kendo-icon-wrapper>
16743
+ {{hintText}}
16744
+ </ng-template>
16745
+ `, isInline: true, components: [{ type: ToolbarComponent, selector: "kendo-treelist-toolbar", inputs: ["position", "navigable"] }, { type: ColGroupComponent, selector: "[kendoTreeListColGroup]", inputs: ["columns"] }, { type: HeaderComponent, selector: "[kendoTreeListHeader]", inputs: ["totalColumnLevels", "columns", "scrollable", "filterable", "sort", "filter", "sortable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount"] }, { type: ListComponent, selector: "kendo-treelist-list", inputs: ["view", "total", "rowHeight", "take", "skip", "columns", "noRecordsTemplate", "filterable", "rowClass", "loading", "trackBy", "virtualColumns", "isVirtual", "expandIcons"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { type: TableBodyComponent, selector: "[kendoTreeListTableBody]", inputs: ["columns", "allColumns", "noRecordsTemplate", "view", "skip", "filterable", "noRecordsText", "isLocked", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "expandIcons", "trackBy", "rowClass"] }, { type: LoadingComponent, selector: "[kendoTreeListLoading]" }, { type: PagerComponent, selector: "kendo-treelist-pager", inputs: ["allCount", "total", "skip", "navigable", "pageSize", "options", "template"], outputs: ["pageChange"] }, { type: i3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoTreeListLocalizedMessages]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i32.DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { type: i32.DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { type: TableDirective, selector: "table", inputs: ["locked", "virtualColumns"] }, { type: ResizableContainerDirective, selector: "[kendoTreeListResizableContainer]", inputs: ["lockedWidth", "kendoTreeListResizableContainer"] }, { type: i1$3.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: MarqueeDirective, selector: "[kendoTreeListSelectionMarquee]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
16268
16746
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListComponent, decorators: [{
16269
16747
  type: Component,
16270
16748
  args: [{
@@ -16312,7 +16790,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16312
16790
  provide: ExpandableTreeComponent,
16313
16791
  useExisting: forwardRef(() => TreeListComponent)
16314
16792
  },
16315
- ContextService
16793
+ ContextService,
16794
+ RowReorderService
16316
16795
  ],
16317
16796
  selector: 'kendo-treelist',
16318
16797
  template: `
@@ -16476,6 +16955,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16476
16955
 
16477
16956
  i18n-bottomToolbarLabel="kendo.treelist.bottomToolbarLabel|The label of the TreeList bottom toolbar"
16478
16957
  bottomToolbarLabel="Bottom toolbar"
16958
+ i18n-dragRowHandleLabel="kendo.treelist.dragRowHandleLabel|The label for the TreeList drag row handle"
16959
+ dragRowHandleLabel="Drag row"
16479
16960
  >
16480
16961
  </ng-container>
16481
16962
  <kendo-treelist-toolbar
@@ -16493,7 +16974,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16493
16974
  [attr.aria-rowcount]="ariaRowCount"
16494
16975
  [attr.aria-colcount]="ariaColCount"
16495
16976
  [attr.aria-multiselectable]="ariaMultiselectable"
16496
- [attr.aria-label]="ariaLabel">
16977
+ [attr.aria-label]="ariaLabel"
16978
+ kendoDragTargetContainer
16979
+ kendoDropTargetContainer
16980
+ mode="manual"
16981
+ [dragDisabled]="!rowReorderable"
16982
+ [dropDisabled]="!rowReorderable"
16983
+ [dragTargetFilter]="getDefaultSelectors('dragTarget')"
16984
+ [dropTargetFilter]="getDefaultSelectors('dropTarget')"
16985
+ [dragHandle]="getDefaultSelectors('handle')"
16986
+ [hint]="{hintTemplate: defaultHint}"
16987
+ (onPress)="handleReorderEvents($event, 'press')"
16988
+ (onDragStart)="handleReorderEvents($event, 'dragStart')"
16989
+ (onDrag)="handleReorderEvents($event, 'drag')"
16990
+ (onDragEnter)="handleReorderEvents($event, 'dragEnter')"
16991
+ (onDragLeave)="handleReorderEvents($event, 'dragLeave')"
16992
+ (onDragEnd)="handleReorderEvents($event, 'dragEnd')"
16993
+ (onDrop)="handleReorderEvents($event, 'drop')"
16994
+ [dragData]="treeListData">
16497
16995
  <ng-template [ngIf]="isScrollable">
16498
16996
  <div *ngIf="!hideHeader"
16499
16997
  class="k-grid-header"
@@ -16645,9 +17143,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16645
17143
  [attr.aria-label]="messageFor('bottomToolbarLabel')"
16646
17144
  [attr.aria-controls]="ariaRootId">
16647
17145
  </kendo-treelist-toolbar>
17146
+
17147
+ <ng-template #defaultHint>
17148
+ <kendo-icon-wrapper
17149
+ [name]="getHintSettings('hintIcon')"
17150
+ [svgIcon]="getHintSettings('hintSVGIcon')"
17151
+ innerCssClass="k-drag-status">
17152
+ </kendo-icon-wrapper>
17153
+ {{hintText}}
17154
+ </ng-template>
16648
17155
  `
16649
17156
  }]
16650
- }], ctorParameters: function () { return [{ type: BrowserSupportService }, { type: i0.ElementRef }, { type: ChangeNotificationService }, { type: EditService }, { type: FilterService }, { type: PDFService }, { type: ResponsiveService }, { type: i0.Renderer2 }, { type: ExcelService }, { type: i0.NgZone }, { type: ScrollSyncService }, { type: DomEventsService }, { type: ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: ColumnReorderService }, { type: ColumnInfoService }, { type: NavigationService }, { type: SortService }, { type: ScrollRequestService }, { type: ExpandStateService }, { type: OptionChangesService }, { type: SelectionService }, { type: i1$1.LocalizationService }, { type: ContextService }]; }, propDecorators: { ariaLabel: [{
17157
+ }], ctorParameters: function () { return [{ type: BrowserSupportService }, { type: i0.ElementRef }, { type: ChangeNotificationService }, { type: EditService }, { type: FilterService }, { type: PDFService }, { type: ResponsiveService }, { type: i0.Renderer2 }, { type: ExcelService }, { type: i0.NgZone }, { type: ScrollSyncService }, { type: DomEventsService }, { type: ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: ColumnReorderService }, { type: ColumnInfoService }, { type: NavigationService }, { type: SortService }, { type: ScrollRequestService }, { type: ExpandStateService }, { type: OptionChangesService }, { type: SelectionService }, { type: i1$1.LocalizationService }, { type: ContextService }, { type: RowReorderService }]; }, propDecorators: { ariaLabel: [{
16651
17158
  type: Input,
16652
17159
  args: ['aria-label']
16653
17160
  }], data: [{
@@ -16700,6 +17207,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16700
17207
  type: Input
16701
17208
  }], isSelected: [{
16702
17209
  type: Input
17210
+ }], rowReorderable: [{
17211
+ type: Input
16703
17212
  }], selectionChange: [{
16704
17213
  type: Output
16705
17214
  }], filterChange: [{
@@ -16748,6 +17257,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16748
17257
  args: ['collapse']
16749
17258
  }], expandStateChange: [{
16750
17259
  type: Output
17260
+ }], rowReorder: [{
17261
+ type: Output
16751
17262
  }], columnsRef: [{
16752
17263
  type: Input,
16753
17264
  args: ['columns']
@@ -16799,6 +17310,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16799
17310
  }], ariaRoot: [{
16800
17311
  type: ViewChild,
16801
17312
  args: ['ariaRoot', { static: true }]
17313
+ }], dragTargetContainer: [{
17314
+ type: ViewChild,
17315
+ args: [DragTargetContainerDirective]
17316
+ }], dropTargetContainer: [{
17317
+ type: ViewChild,
17318
+ args: [DropTargetContainerDirective]
16802
17319
  }], fetchChildren: [{
16803
17320
  type: Input
16804
17321
  }], hasChildren: [{
@@ -16978,6 +17495,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16978
17495
  args: [CellTemplateDirective, { static: false }]
16979
17496
  }] } });
16980
17497
 
17498
+ /**
17499
+ * Represents the drag handle for reordering rows in the TreeList.
17500
+ */
17501
+ class RowReorderColumnComponent extends ColumnBase {
17502
+ constructor(parent) {
17503
+ super(parent);
17504
+ this.parent = parent;
17505
+ /**
17506
+ * @hidden
17507
+ */
17508
+ this.isRowReorderColumn = true;
17509
+ }
17510
+ }
17511
+ RowReorderColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RowReorderColumnComponent, deps: [{ token: ColumnBase, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
17512
+ RowReorderColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: RowReorderColumnComponent, selector: "kendo-treelist-rowreorder-column", providers: [
17513
+ {
17514
+ provide: ColumnBase,
17515
+ useExisting: forwardRef(() => RowReorderColumnComponent)
17516
+ }
17517
+ ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
17518
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RowReorderColumnComponent, decorators: [{
17519
+ type: Component,
17520
+ args: [{
17521
+ providers: [
17522
+ {
17523
+ provide: ColumnBase,
17524
+ useExisting: forwardRef(() => RowReorderColumnComponent)
17525
+ }
17526
+ ],
17527
+ selector: 'kendo-treelist-rowreorder-column',
17528
+ template: ``
17529
+ }]
17530
+ }], ctorParameters: function () {
17531
+ return [{ type: ColumnBase, decorators: [{
17532
+ type: SkipSelf
17533
+ }, {
17534
+ type: Host
17535
+ }, {
17536
+ type: Optional
17537
+ }] }];
17538
+ } });
17539
+
16981
17540
  const exportedModules$3 = [
16982
17541
  ColumnComponent,
16983
17542
  ColumnGroupComponent,
@@ -16991,7 +17550,8 @@ const exportedModules$3 = [
16991
17550
  SpanColumnComponent,
16992
17551
  TableDirective,
16993
17552
  LoadingComponent,
16994
- CheckboxColumnComponent
17553
+ CheckboxColumnComponent,
17554
+ RowReorderColumnComponent
16995
17555
  ];
16996
17556
  /**
16997
17557
  * @hidden
@@ -17002,6 +17562,7 @@ class SharedModule {
17002
17562
  ColumnComponent,
17003
17563
  SpanColumnComponent,
17004
17564
  CheckboxColumnComponent,
17565
+ RowReorderColumnComponent,
17005
17566
  ColumnGroupComponent,
17006
17567
  FocusableDirective
17007
17568
  ];
@@ -17020,7 +17581,8 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
17020
17581
  SpanColumnComponent,
17021
17582
  TableDirective,
17022
17583
  LoadingComponent,
17023
- CheckboxColumnComponent], imports: [CommonModule, IconsModule], exports: [ColumnComponent,
17584
+ CheckboxColumnComponent,
17585
+ RowReorderColumnComponent], imports: [CommonModule, IconsModule], exports: [ColumnComponent,
17024
17586
  ColumnGroupComponent,
17025
17587
  LogicalCellDirective,
17026
17588
  LogicalRowDirective,
@@ -17032,7 +17594,8 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
17032
17594
  SpanColumnComponent,
17033
17595
  TableDirective,
17034
17596
  LoadingComponent,
17035
- CheckboxColumnComponent, DraggableModule, IconsModule] });
17597
+ CheckboxColumnComponent,
17598
+ RowReorderColumnComponent, DraggableModule, IconsModule] });
17036
17599
  SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SharedModule, imports: [[CommonModule, IconsModule], DraggableModule, IconsModule] });
17037
17600
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SharedModule, decorators: [{
17038
17601
  type: NgModule,
@@ -18103,7 +18666,7 @@ ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
18103
18666
  (columnChange)="onChange($event)">
18104
18667
  </kendo-treelist-columnlist>
18105
18668
  </ng-template>
18106
- `, isInline: true, components: [{ type: i4$2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: ColumnListComponent, selector: "kendo-treelist-columnlist", inputs: ["columns", "autoSync", "allowHideAll", "applyText", "resetText", "actionsClass"], outputs: ["reset", "apply", "columnChange"] }] });
18669
+ `, isInline: true, components: [{ type: i4$1.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: ColumnListComponent, selector: "kendo-treelist-columnlist", inputs: ["columns", "autoSync", "allowHideAll", "applyText", "resetText", "actionsClass"], outputs: ["reset", "apply", "columnChange"] }] });
18107
18670
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
18108
18671
  type: Component,
18109
18672
  args: [{
@@ -19213,8 +19776,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
19213
19776
  }] } });
19214
19777
 
19215
19778
  class BaseBindingDirective {
19216
- constructor(component) {
19779
+ constructor(component, rowReorderService) {
19217
19780
  this.component = component;
19781
+ this.rowReorderService = rowReorderService;
19218
19782
  this.state = {};
19219
19783
  this.cache = new Map();
19220
19784
  this.originalData = [];
@@ -19247,6 +19811,8 @@ class BaseBindingDirective {
19247
19811
  this.applyState(this.state);
19248
19812
  this.subscriptions.add(this.component.dataStateChange
19249
19813
  .subscribe(this.onStateChange.bind(this)));
19814
+ this.component.rowReorderable && this.subscriptions.add(this.rowReorderService.rowReorder
19815
+ .subscribe(this.onRowReorder.bind(this)));
19250
19816
  }
19251
19817
  /**
19252
19818
  * @hidden
@@ -19287,6 +19853,7 @@ class BaseBindingDirective {
19287
19853
  this.cache.clear();
19288
19854
  this.component.data = this.fetchChildren();
19289
19855
  }
19856
+ onRowReorder(_event) { }
19290
19857
  applyState({ sort, filter }) {
19291
19858
  this.sort = sort;
19292
19859
  this.filter = filter;
@@ -19355,12 +19922,12 @@ class BaseBindingDirective {
19355
19922
  this.dataChanged = true;
19356
19923
  }
19357
19924
  }
19358
- BaseBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseBindingDirective, deps: [{ token: DataBoundTreeComponent }], target: i0.ɵɵFactoryTarget.Directive });
19925
+ BaseBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseBindingDirective, deps: [{ token: DataBoundTreeComponent }, { token: RowReorderService }], target: i0.ɵɵFactoryTarget.Directive });
19359
19926
  BaseBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: BaseBindingDirective, inputs: { sort: "sort", filter: "filter", aggregate: "aggregate" }, usesOnChanges: true, ngImport: i0 });
19360
19927
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseBindingDirective, decorators: [{
19361
19928
  type: Directive,
19362
19929
  args: [{}]
19363
- }], ctorParameters: function () { return [{ type: DataBoundTreeComponent }]; }, propDecorators: { sort: [{
19930
+ }], ctorParameters: function () { return [{ type: DataBoundTreeComponent }, { type: RowReorderService }]; }, propDecorators: { sort: [{
19364
19931
  type: Input
19365
19932
  }], filter: [{
19366
19933
  type: Input
@@ -19410,6 +19977,53 @@ class HierarchyEditService extends LocalEditService {
19410
19977
  }
19411
19978
  }
19412
19979
 
19980
+ /**
19981
+ * @hidden
19982
+ */
19983
+ class HierarchicalRowReorderService extends RowReorderService {
19984
+ isOverChild(targetItem) {
19985
+ const { draggedRows } = this.rowReorderArgs(this.dragTarget, this.dropTarget, this.view);
19986
+ const draggedItem = draggedRows[0].dataItem;
19987
+ const hasChildren = isPresent(draggedItem[this.childrenField]) && draggedItem[this.childrenField].length > 0;
19988
+ if (!hasChildren) {
19989
+ return false;
19990
+ }
19991
+ if (targetItem && draggedItem.hasOwnProperty(this.childrenField)) {
19992
+ if (draggedItem[this.childrenField].includes(targetItem)) {
19993
+ return true;
19994
+ }
19995
+ const parent = findParent$1(this.data, targetItem, this.childrenField);
19996
+ if (parent) {
19997
+ return this.isOverChild(parent);
19998
+ }
19999
+ }
20000
+ return false;
20001
+ }
20002
+ reorderRows(ev, collection, field) {
20003
+ const draggedItem = ev.draggedRows[0].dataItem;
20004
+ const dropTargetItem = ev.dropTargetRow.dataItem;
20005
+ const draggedItemParent = findParent$1(collection, draggedItem, field);
20006
+ const dropTargetParent = findParent$1(collection, dropTargetItem, field);
20007
+ const draggedItemIdx = draggedItemParent ? draggedItemParent[field].indexOf(draggedItem) : collection.indexOf(draggedItem);
20008
+ let dropTargetItemIdx = dropTargetParent ? dropTargetParent[field].indexOf(dropTargetItem) : collection.indexOf(dropTargetItem);
20009
+ if (ev.dropPosition === dropPosition.after && dropTargetItemIdx < draggedItemIdx) {
20010
+ dropTargetItemIdx++;
20011
+ }
20012
+ draggedItemParent ? draggedItemParent[field].splice(draggedItemIdx, 1) : collection.splice(draggedItemIdx, 1);
20013
+ if (ev.dropPosition !== dropPosition.over) {
20014
+ dropTargetParent ? dropTargetParent[field].splice(dropTargetItemIdx, 0, draggedItem) : collection.splice(dropTargetItemIdx, 0, draggedItem);
20015
+ }
20016
+ else {
20017
+ dropTargetItem[field].unshift(draggedItem);
20018
+ }
20019
+ }
20020
+ }
20021
+ HierarchicalRowReorderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchicalRowReorderService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
20022
+ HierarchicalRowReorderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchicalRowReorderService });
20023
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchicalRowReorderService, decorators: [{
20024
+ type: Injectable
20025
+ }] });
20026
+
19413
20027
  /**
19414
20028
  * A directive which binds the TreeList to a tree of objects.
19415
20029
  *
@@ -19418,12 +20032,16 @@ class HierarchyEditService extends LocalEditService {
19418
20032
  * and [filtering]({% slug filtering_treelist %}) ([more information and examples](slug:databinding_treelist#toc-binding-to-hierarchical-data)).
19419
20033
  */
19420
20034
  class HierarchyBindingDirective extends BaseBindingDirective {
19421
- constructor(component) {
20035
+ constructor(component, rowReorderService) {
19422
20036
  super(component);
19423
20037
  this.component = component;
20038
+ this.rowReorderService = rowReorderService;
19424
20039
  this.childrenGetter = getter('items');
19425
20040
  this.childrenSetter = setter('items');
19426
20041
  component.localEditService = new HierarchyEditService(this);
20042
+ if (this.rowReorderService) {
20043
+ this.rowReorderService.bindingDirective = this;
20044
+ }
19427
20045
  }
19428
20046
  /**
19429
20047
  * The name of the field which holds the child data items of the node.
@@ -19431,23 +20049,58 @@ class HierarchyBindingDirective extends BaseBindingDirective {
19431
20049
  set childrenField(value) {
19432
20050
  this.childrenGetter = getter(value);
19433
20051
  this.childrenSetter = setter(value);
20052
+ this._childrenField = value;
19434
20053
  }
20054
+ get childrenField() {
20055
+ return this._childrenField;
20056
+ }
20057
+ /**
20058
+ * @hidden
20059
+ */
19435
20060
  getChildren(item) {
19436
20061
  return item ? this.childrenGetter(item) || [] : this.originalData;
19437
20062
  }
19438
20063
  itemKey(item) {
19439
20064
  return item;
19440
20065
  }
20066
+ onRowReorder(ev) {
20067
+ if (ev.dropPosition === 'forbidden') {
20068
+ return;
20069
+ }
20070
+ const dropTargetItem = ev.dropTargetRow.dataItem;
20071
+ if (ev.dropPosition === 'over') {
20072
+ if (!dropTargetItem.hasOwnProperty(this.childrenField)) {
20073
+ dropTargetItem[this.childrenField] = [];
20074
+ }
20075
+ }
20076
+ this.rowReorderService.reorderRows(ev, this.originalData, this.childrenField);
20077
+ this.rebind();
20078
+ }
19441
20079
  }
19442
- HierarchyBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchyBindingDirective, deps: [{ token: DataBoundTreeComponent }], target: i0.ɵɵFactoryTarget.Directive });
19443
- HierarchyBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: HierarchyBindingDirective, selector: "[kendoTreeListHierarchyBinding]", inputs: { childrenField: "childrenField", data: ["kendoTreeListHierarchyBinding", "data"] }, exportAs: ["kendoTreeListHierarchyBinding"], usesInheritance: true, ngImport: i0 });
20080
+ HierarchyBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchyBindingDirective, deps: [{ token: DataBoundTreeComponent }, { token: RowReorderService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
20081
+ HierarchyBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: HierarchyBindingDirective, selector: "[kendoTreeListHierarchyBinding]", inputs: { childrenField: "childrenField", data: ["kendoTreeListHierarchyBinding", "data"] }, providers: [
20082
+ {
20083
+ provide: RowReorderService,
20084
+ useClass: HierarchicalRowReorderService
20085
+ }
20086
+ ], exportAs: ["kendoTreeListHierarchyBinding"], usesInheritance: true, ngImport: i0 });
19444
20087
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchyBindingDirective, decorators: [{
19445
20088
  type: Directive,
19446
20089
  args: [{
19447
20090
  exportAs: 'kendoTreeListHierarchyBinding',
19448
- selector: '[kendoTreeListHierarchyBinding]'
20091
+ selector: '[kendoTreeListHierarchyBinding]',
20092
+ providers: [
20093
+ {
20094
+ provide: RowReorderService,
20095
+ useClass: HierarchicalRowReorderService
20096
+ }
20097
+ ]
19449
20098
  }]
19450
- }], ctorParameters: function () { return [{ type: DataBoundTreeComponent }]; }, propDecorators: { childrenField: [{
20099
+ }], ctorParameters: function () {
20100
+ return [{ type: DataBoundTreeComponent }, { type: RowReorderService, decorators: [{
20101
+ type: Optional
20102
+ }] }];
20103
+ }, propDecorators: { childrenField: [{
19451
20104
  type: Input
19452
20105
  }], data: [{
19453
20106
  type: Input,
@@ -19498,6 +20151,47 @@ class FlatEditService extends LocalEditService {
19498
20151
  }
19499
20152
  }
19500
20153
 
20154
+ /**
20155
+ * @hidden
20156
+ */
20157
+ class FlatRowReorderService extends RowReorderService {
20158
+ isOverChild(targetItem) {
20159
+ const { draggedRows } = this.rowReorderArgs(this.dragTarget, this.dropTarget, this.view);
20160
+ const draggedItem = draggedRows[0].dataItem;
20161
+ const hasParent = isPresent(targetItem[this.parentIdField]);
20162
+ const sameParents = draggedItem[this.parentIdField] === targetItem[this.parentIdField];
20163
+ if (!hasParent || sameParents) {
20164
+ return false;
20165
+ }
20166
+ if (targetItem && targetItem.hasOwnProperty(this.parentIdField)) {
20167
+ if (draggedItem[this.idField] === targetItem[this.parentIdField]) {
20168
+ return true;
20169
+ }
20170
+ const parent = this.data.find(i => i[this.idField] === targetItem[this.parentIdField]);
20171
+ if (parent) {
20172
+ return this.isOverChild(parent);
20173
+ }
20174
+ }
20175
+ }
20176
+ reorderRows(ev, collection) {
20177
+ const { draggedRows, dropTargetRow } = ev;
20178
+ const draggedDataItem = draggedRows[0].dataItem;
20179
+ const dropTargetDataItem = dropTargetRow.dataItem;
20180
+ let dropTargetIdx = collection.indexOf(dropTargetDataItem);
20181
+ const draggedItemIdx = collection.indexOf(draggedDataItem);
20182
+ collection.splice(draggedItemIdx, 1);
20183
+ if (ev.dropPosition === 'after' && dropTargetIdx < draggedItemIdx) {
20184
+ dropTargetIdx++;
20185
+ }
20186
+ collection.splice(dropTargetIdx, 0, draggedDataItem);
20187
+ }
20188
+ }
20189
+ FlatRowReorderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatRowReorderService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
20190
+ FlatRowReorderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatRowReorderService });
20191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatRowReorderService, decorators: [{
20192
+ type: Injectable
20193
+ }] });
20194
+
19501
20195
  const ROOT_ID = null;
19502
20196
  /**
19503
20197
  * A directive which binds the TreeList to an array of objects by using
@@ -19508,14 +20202,18 @@ const ROOT_ID = null;
19508
20202
  * and [filtering]({% slug filtering_treelist %}) ([more information and examples]({% slug databinding_treelist %})).
19509
20203
  */
19510
20204
  class FlatBindingDirective extends BaseBindingDirective {
19511
- constructor(component) {
20205
+ constructor(component, rowReorderService) {
19512
20206
  super(component);
19513
20207
  this.component = component;
20208
+ this.rowReorderService = rowReorderService;
19514
20209
  this.idGetter = getter('id');
19515
20210
  this.idSetter = setter('id');
19516
20211
  this.parentIdGetter = getter('parentId');
19517
20212
  this.parentIdSetter = setter('parentId');
19518
20213
  component.localEditService = new FlatEditService(this);
20214
+ if (this.rowReorderService) {
20215
+ this.rowReorderService.bindingDirective = this;
20216
+ }
19519
20217
  }
19520
20218
  /**
19521
20219
  * The name of the field which contains the identifier of the parent node.
@@ -19523,6 +20221,10 @@ class FlatBindingDirective extends BaseBindingDirective {
19523
20221
  set parentIdField(value) {
19524
20222
  this.parentIdGetter = getter(value);
19525
20223
  this.parentIdSetter = setter(value);
20224
+ this._parentIdField = value;
20225
+ }
20226
+ get parentIdField() {
20227
+ return this._parentIdField;
19526
20228
  }
19527
20229
  /**
19528
20230
  * The name of the field which contains the unique identifier of the node.
@@ -19530,7 +20232,14 @@ class FlatBindingDirective extends BaseBindingDirective {
19530
20232
  set idField(value) {
19531
20233
  this.idGetter = getter(value);
19532
20234
  this.idSetter = setter(value);
20235
+ this._idField = value;
19533
20236
  }
20237
+ get idField() {
20238
+ return this._idField;
20239
+ }
20240
+ /**
20241
+ * @hidden
20242
+ */
19534
20243
  getChildren(item) {
19535
20244
  const id = this.itemKey(item);
19536
20245
  const children = id === ROOT_ID ?
@@ -19541,16 +20250,50 @@ class FlatBindingDirective extends BaseBindingDirective {
19541
20250
  itemKey(item) {
19542
20251
  return item ? this.idGetter(item) : ROOT_ID;
19543
20252
  }
20253
+ onRowReorder(ev) {
20254
+ if (ev.dropPosition === 'forbidden') {
20255
+ return;
20256
+ }
20257
+ const draggedItem = ev.draggedRows[0].dataItem;
20258
+ const dropTargetItem = ev.dropTargetRow.dataItem;
20259
+ if (ev.dropPosition === 'over') {
20260
+ const dropItemId = this.itemKey(dropTargetItem);
20261
+ if (draggedItem[this.parentIdField] !== dropItemId) {
20262
+ draggedItem[this.parentIdField] = dropItemId;
20263
+ }
20264
+ }
20265
+ else {
20266
+ const dropItemParentId = dropTargetItem[this.parentIdField];
20267
+ draggedItem[this.parentIdField] = dropItemParentId;
20268
+ this.rowReorderService.reorderRows(ev, this.originalData);
20269
+ }
20270
+ this.rebind();
20271
+ }
19544
20272
  }
19545
- FlatBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatBindingDirective, deps: [{ token: DataBoundTreeComponent }], target: i0.ɵɵFactoryTarget.Directive });
19546
- FlatBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: FlatBindingDirective, selector: "[kendoTreeListFlatBinding]", inputs: { parentIdField: "parentIdField", idField: "idField", data: ["kendoTreeListFlatBinding", "data"] }, exportAs: ["kendoTreeListFlatBinding"], usesInheritance: true, ngImport: i0 });
20273
+ FlatBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatBindingDirective, deps: [{ token: DataBoundTreeComponent }, { token: RowReorderService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
20274
+ FlatBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: FlatBindingDirective, selector: "[kendoTreeListFlatBinding]", inputs: { parentIdField: "parentIdField", idField: "idField", data: ["kendoTreeListFlatBinding", "data"] }, providers: [
20275
+ {
20276
+ provide: RowReorderService,
20277
+ useClass: FlatRowReorderService
20278
+ }
20279
+ ], exportAs: ["kendoTreeListFlatBinding"], usesInheritance: true, ngImport: i0 });
19547
20280
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatBindingDirective, decorators: [{
19548
20281
  type: Directive,
19549
20282
  args: [{
19550
20283
  exportAs: 'kendoTreeListFlatBinding',
19551
- selector: '[kendoTreeListFlatBinding]'
20284
+ selector: '[kendoTreeListFlatBinding]',
20285
+ providers: [
20286
+ {
20287
+ provide: RowReorderService,
20288
+ useClass: FlatRowReorderService
20289
+ }
20290
+ ]
19552
20291
  }]
19553
- }], ctorParameters: function () { return [{ type: DataBoundTreeComponent }]; }, propDecorators: { parentIdField: [{
20292
+ }], ctorParameters: function () {
20293
+ return [{ type: DataBoundTreeComponent }, { type: RowReorderService, decorators: [{
20294
+ type: Optional
20295
+ }] }];
20296
+ }, propDecorators: { parentIdField: [{
19554
20297
  type: Input
19555
20298
  }], idField: [{
19556
20299
  type: Input
@@ -19962,7 +20705,8 @@ TreeListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
19962
20705
  RowFilterModule,
19963
20706
  FilterMenuModule,
19964
20707
  ResizeSensorModule,
19965
- ColumnMenuModule], exports: [TreeListComponent,
20708
+ ColumnMenuModule,
20709
+ DragAndDropModule$1], exports: [TreeListComponent,
19966
20710
  ToolbarTemplateDirective,
19967
20711
  ToolbarComponent,
19968
20712
  TreeListSpacerComponent,
@@ -19974,7 +20718,7 @@ TreeListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
19974
20718
  FlatBindingDirective,
19975
20719
  ExpandableDirective,
19976
20720
  SelectableDirective,
19977
- TreeListToolbarFocusableDirective, ColumnComponent, SpanColumnComponent, CheckboxColumnComponent, ColumnGroupComponent, FocusableDirective, CommandColumnComponent, CellTemplateDirective, NoRecordsTemplateDirective, EditTemplateDirective, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, FooterTemplateDirective, HeaderTemplateDirective, PagerComponent, PagerPrevButtonsComponent, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerInfoComponent, PagerPageSizesComponent, PagerTemplateDirective, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, FilterCellOperatorsComponent, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, DateFilterCellComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, DateFilterMenuComponent, BooleanFilterMenuComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, ColumnChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuComponent] });
20721
+ TreeListToolbarFocusableDirective, ColumnComponent, SpanColumnComponent, CheckboxColumnComponent, RowReorderColumnComponent, ColumnGroupComponent, FocusableDirective, CommandColumnComponent, CellTemplateDirective, NoRecordsTemplateDirective, EditTemplateDirective, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, FooterTemplateDirective, HeaderTemplateDirective, PagerComponent, PagerPrevButtonsComponent, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerInfoComponent, PagerPageSizesComponent, PagerTemplateDirective, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, FilterCellOperatorsComponent, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, DateFilterCellComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, DateFilterMenuComponent, BooleanFilterMenuComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, ColumnChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuComponent] });
19978
20722
  TreeListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListModule, imports: [[
19979
20723
  CommonModule,
19980
20724
  SharedModule,
@@ -19984,7 +20728,8 @@ TreeListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
19984
20728
  RowFilterModule,
19985
20729
  FilterMenuModule,
19986
20730
  ResizeSensorModule,
19987
- ColumnMenuModule
20731
+ ColumnMenuModule,
20732
+ DragAndDropModule$1
19988
20733
  ]] });
19989
20734
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListModule, decorators: [{
19990
20735
  type: NgModule,
@@ -20000,7 +20745,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
20000
20745
  RowFilterModule,
20001
20746
  FilterMenuModule,
20002
20747
  ResizeSensorModule,
20003
- ColumnMenuModule
20748
+ ColumnMenuModule,
20749
+ DragAndDropModule$1
20004
20750
  ]
20005
20751
  }]
20006
20752
  }] });
@@ -20879,5 +21625,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
20879
21625
  * Generated bundle index. Do not edit.
20880
21626
  */
20881
21627
 
20882
- export { AddCommandDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseCommandDirective, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BodyModule, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, CancelCommandDirective, CellCloseEvent, CellComponent, CellTemplateDirective, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuLockComponent, ColumnMenuSortComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, CustomMessagesComponent, DataBoundTreeComponent, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DoesNotContainFilterOperatorComponent, EditCommandDirective, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandEvent, ExpandableDirective, ExpandableTreeComponent, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuModule, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FlatBindingDirective, FocusableDirective, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, HeaderComponent, HeaderModule, HeaderTemplateDirective, HierarchyBindingDirective, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, LevelItemsPipe, ListComponent, LoadingComponent, LogicalCellDirective, LogicalRowDirective, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PagerComponent, PagerInfoComponent, PagerInputComponent, PagerModule, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerPageSizesComponent, PagerPrevButtonsComponent, PagerTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RemoveCommandDirective, ResizableContainerDirective, RowEditingDirectiveBase, RowFilterModule, SaveCommandDirective, SelectableDirective, SelectionChangeEvent, SharedFilterModule, SharedModule, SinglePopupService, Skip, SpanColumnComponent, StartsWithFilterOperatorComponent, StringFilterCellComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateContextDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, TreeListComponent, TreeListModule, TreeListSpacerComponent, TreeListToolbarFocusableDirective };
21628
+ export { AddCommandDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseCommandDirective, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BodyModule, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, CancelCommandDirective, CellCloseEvent, CellComponent, CellTemplateDirective, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuLockComponent, ColumnMenuSortComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, CustomMessagesComponent, DataBoundTreeComponent, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DoesNotContainFilterOperatorComponent, EditCommandDirective, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandEvent, ExpandableDirective, ExpandableTreeComponent, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuModule, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FlatBindingDirective, FocusableDirective, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, HeaderComponent, HeaderModule, HeaderTemplateDirective, HierarchyBindingDirective, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, LevelItemsPipe, ListComponent, LoadingComponent, LogicalCellDirective, LogicalRowDirective, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PagerComponent, PagerInfoComponent, PagerInputComponent, PagerModule, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerPageSizesComponent, PagerPrevButtonsComponent, PagerTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RemoveCommandDirective, ResizableContainerDirective, RowEditingDirectiveBase, RowFilterModule, RowReorderColumnComponent, SaveCommandDirective, SelectableDirective, SelectionChangeEvent, SharedFilterModule, SharedModule, SinglePopupService, Skip, SpanColumnComponent, StartsWithFilterOperatorComponent, StringFilterCellComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateContextDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, TreeListComponent, TreeListModule, TreeListSpacerComponent, TreeListToolbarFocusableDirective };
20883
21629