@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,7 +12,7 @@ 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';
@@ -21,19 +21,21 @@ import { PopupModule } from '@progress/kendo-angular-popup';
21
21
  import * as i1$2 from '@angular/platform-browser';
22
22
  import * as i3 from '@progress/kendo-angular-icons';
23
23
  import { IconsModule } from '@progress/kendo-angular-icons';
24
- import { plusIcon, cancelIcon, lockIcon, unlockIcon, filterIcon, sortAscSmallIcon, sortDescSmallIcon, columnsIcon, moreVerticalIcon, filterClearIcon, caretAltDownIcon, caretAltRightIcon, caretAltLeftIcon, caretAltToLeftIcon, caretAltToRightIcon } from '@progress/kendo-svg-icons';
24
+ import { plusIcon, cancelIcon, lockIcon, unlockIcon, insertMiddleIcon, filterIcon, sortAscSmallIcon, sortDescSmallIcon, columnsIcon, moreVerticalIcon, filterClearIcon, caretAltDownIcon, caretAltRightIcon, reorderIcon, caretAltLeftIcon, caretAltToLeftIcon, caretAltToRightIcon } from '@progress/kendo-svg-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
 
@@ -272,6 +274,10 @@ const isSpanColumn = column => column.isSpanColumn;
272
274
  * @hidden
273
275
  */
274
276
  const isCheckboxColumn = column => column.isCheckboxColumn;
277
+ /**
278
+ * @hidden
279
+ */
280
+ const isRowReorderColumn = column => column.isRowReorderColumn;
275
281
  const isColumnContainer = column => column.isColumnGroup || isSpanColumn(column);
276
282
  /**
277
283
  * The base class for the column components of the TreeList.
@@ -2981,17 +2987,17 @@ const append = (element) => {
2981
2987
  /**
2982
2988
  * @hidden
2983
2989
  */
2984
- const getDocument = element => element.ownerDocument.documentElement;
2990
+ const getDocument$1 = element => element.ownerDocument.documentElement;
2985
2991
  /**
2986
2992
  * @hidden
2987
2993
  */
2988
- const getWindow = element => element.ownerDocument.defaultView;
2994
+ const getWindow$1 = element => element.ownerDocument.defaultView;
2989
2995
  /**
2990
2996
  * @hidden
2991
2997
  */
2992
2998
  const offset = element => {
2993
- const { clientTop, clientLeft } = getDocument(element);
2994
- const { pageYOffset, pageXOffset } = getWindow(element);
2999
+ const { clientTop, clientLeft } = getDocument$1(element);
3000
+ const { pageYOffset, pageXOffset } = getWindow$1(element);
2995
3001
  const { top, left } = element.getBoundingClientRect();
2996
3002
  return {
2997
3003
  top: top + pageYOffset - clientTop,
@@ -5143,6 +5149,344 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5143
5149
  type: Injectable
5144
5150
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
5145
5151
 
5152
+ /**
5153
+ * @hidden
5154
+ */
5155
+ const isNextSibling = (dropTarget, dragTarget) => dropTarget === dragTarget.nextElementSibling;
5156
+ /**
5157
+ * @hidden
5158
+ */
5159
+ const isPreviousSibling = (dropTarget, dragTarget) => dropTarget === dragTarget.previousElementSibling;
5160
+ /**
5161
+ * @hidden
5162
+ */
5163
+ function getOffset(element) {
5164
+ const { clientTop, clientLeft } = getDocument(element);
5165
+ const { pageYOffset, pageXOffset } = getWindow(element);
5166
+ const { top, left } = element.getBoundingClientRect();
5167
+ return {
5168
+ top: top + pageYOffset - clientTop,
5169
+ left: left + pageXOffset - clientLeft
5170
+ };
5171
+ }
5172
+ ;
5173
+ /**
5174
+ * @hidden
5175
+ */
5176
+ const hintIcons = {
5177
+ forbidden: 'cancel',
5178
+ before: 'insert-middle',
5179
+ after: 'insert-middle',
5180
+ over: 'plus'
5181
+ };
5182
+ /**
5183
+ * @hidden
5184
+ */
5185
+ const hintSVGIcons = {
5186
+ forbidden: cancelIcon,
5187
+ before: insertMiddleIcon,
5188
+ after: insertMiddleIcon,
5189
+ over: plusIcon
5190
+ };
5191
+ /**
5192
+ * @hidden
5193
+ */
5194
+ const dropPosition = {
5195
+ forbidden: 'forbidden',
5196
+ before: 'before',
5197
+ after: 'after',
5198
+ over: 'over'
5199
+ };
5200
+ /**
5201
+ * @hidden
5202
+ */
5203
+ const hintStyles = {
5204
+ zIndex: '20000',
5205
+ display: 'flex',
5206
+ position: 'fixed'
5207
+ };
5208
+ /**
5209
+ * @hidden
5210
+ */
5211
+ const hintClasses = ['k-drag-clue', 'k-reorder-clue'];
5212
+ /**
5213
+ * @hidden
5214
+ */
5215
+ const dropIndicatorStyles = {
5216
+ zIndex: '19000',
5217
+ position: 'absolute'
5218
+ };
5219
+ /**
5220
+ * @hidden
5221
+ */
5222
+ const dropIndicatorClasses = ['k-drop-hint', 'k-drop-hint-h'];
5223
+ /**
5224
+ * @hidden
5225
+ */
5226
+ const defaultSelectors = {
5227
+ handle: '.k-table-td.k-drag-cell',
5228
+ dragTarget: '.k-table-row[data-treelist-view-index]',
5229
+ dropTarget: '.k-table-row[data-treelist-view-index]'
5230
+ };
5231
+ /**
5232
+ * @hidden
5233
+ */
5234
+ const rowIndexAttr = 'data-treelist-view-index';
5235
+ /**
5236
+ * @hidden
5237
+ */
5238
+ const findParent$1 = (collection, searchItem, field) => {
5239
+ let parent = null;
5240
+ for (const item of collection) {
5241
+ if (searchItem === item) {
5242
+ return null;
5243
+ }
5244
+ const checked = [];
5245
+ const queue = [];
5246
+ queue.push(item);
5247
+ while (queue.length !== 0) {
5248
+ const current = queue.shift();
5249
+ if (!current) {
5250
+ continue;
5251
+ }
5252
+ checked.push(current);
5253
+ if (current === searchItem) {
5254
+ return item;
5255
+ }
5256
+ if (current.hasOwnProperty(field)) {
5257
+ current[field].forEach(node => {
5258
+ if (checked.indexOf(node) === -1) {
5259
+ checked.push(node);
5260
+ queue.push(node);
5261
+ if (node === searchItem) {
5262
+ parent = current;
5263
+ return;
5264
+ }
5265
+ }
5266
+ });
5267
+ }
5268
+ if (parent) {
5269
+ return parent;
5270
+ }
5271
+ }
5272
+ }
5273
+ };
5274
+ const getDocument = element => element?.ownerDocument.documentElement;
5275
+ const getWindow = element => element?.ownerDocument.defaultView;
5276
+
5277
+ /**
5278
+ * @hidden
5279
+ */
5280
+ class RowReorderService {
5281
+ constructor(renderer) {
5282
+ this.renderer = renderer;
5283
+ this.defaultSelectors = defaultSelectors;
5284
+ this.dragTarget = null;
5285
+ this.dropTarget = null;
5286
+ this.lastDropPosition = dropPosition.forbidden;
5287
+ this.hintElement = null;
5288
+ this.rowReorder = new EventEmitter();
5289
+ }
5290
+ press(ev) {
5291
+ this.dragTarget = ev.dragTarget;
5292
+ this.offsetY = ev.dragEvent.offsetY;
5293
+ }
5294
+ dragStart() {
5295
+ this.createDropIndicator();
5296
+ }
5297
+ drag(ev) {
5298
+ if (isPresent$1(ev.hintElement) && !isPresent$1(this.hintElement)) {
5299
+ this.hintElement = ev.hintElement;
5300
+ this.decorateHint();
5301
+ }
5302
+ const position = {
5303
+ x: ev.dragEvent.clientX,
5304
+ y: ev.dragEvent.clientY - this.offsetY
5305
+ };
5306
+ if (isPresent$1(this.hintElement)) {
5307
+ this.renderer.setStyle(this.hintElement, 'left', `${position.x}px`);
5308
+ this.renderer.setStyle(this.hintElement, 'top', `${position.y}px`);
5309
+ }
5310
+ this.positionDropIndicator(ev);
5311
+ }
5312
+ dragEnter(ev) {
5313
+ this.dropTarget = ev.dropTarget;
5314
+ this.view = ev.dragData;
5315
+ }
5316
+ dragLeave() {
5317
+ this.dropTarget = null;
5318
+ this.lastDropPosition === dropPosition.forbidden && this.hide();
5319
+ }
5320
+ dragEnd() {
5321
+ this.destroyDropIndicator();
5322
+ this.dragTarget = null;
5323
+ this.dropTarget = null;
5324
+ this.hintElement = null;
5325
+ }
5326
+ drop() {
5327
+ this.destroyDropIndicator();
5328
+ const rowReorderArgs = this.rowReorderArgs(this.dragTarget, this.dropTarget, this.view);
5329
+ this.rowReorder.emit(rowReorderArgs);
5330
+ }
5331
+ get hintIcon() {
5332
+ return hintIcons[this.lastDropPosition];
5333
+ }
5334
+ get hintSVGIcon() {
5335
+ return hintSVGIcons[this.lastDropPosition];
5336
+ }
5337
+ getDefaultHintText(columns, data) {
5338
+ let hintText = '';
5339
+ const columnFieldsArray = columns
5340
+ .toArray()
5341
+ .filter(column => !column.hidden && isPresent$1(column.field))
5342
+ .map(column => column.field);
5343
+ const draggedDragRow = this.getDragRowPerElement(this.dragTarget, data);
5344
+ const draggedDataItem = draggedDragRow?.dataItem;
5345
+ isPresent$1(draggedDataItem) && columnFieldsArray.forEach(column => {
5346
+ const columnValue = draggedDataItem[column];
5347
+ isPresent$1(columnValue) ? hintText += `${columnValue} ` : null;
5348
+ });
5349
+ return hintText.trim();
5350
+ }
5351
+ rowReorderArgs(dragRow, dropRow, data) {
5352
+ const dragRowData = this.getDragRowPerElement(dragRow, data);
5353
+ const dropRowData = this.getDragRowPerElement(dropRow, data);
5354
+ return {
5355
+ draggedRows: [dragRowData],
5356
+ dropTargetRow: dropRowData,
5357
+ dropPosition: this.lastDropPosition
5358
+ };
5359
+ }
5360
+ isOverChild(_item) { return false; }
5361
+ reorderRows(_ev, _collection, _field) { }
5362
+ get parentIdField() {
5363
+ return this.bindingDirective.parentIdField;
5364
+ }
5365
+ get idField() {
5366
+ return this.bindingDirective.idField;
5367
+ }
5368
+ get childrenField() {
5369
+ return this.bindingDirective.childrenField;
5370
+ }
5371
+ get data() {
5372
+ return this.bindingDirective.data;
5373
+ }
5374
+ getDragRowPerElement(row, data) {
5375
+ let rowIndex = row?.getAttribute(rowIndexAttr);
5376
+ rowIndex = rowIndex ? parseInt(rowIndex, 10) : -1;
5377
+ const dataItem = rowIndex === -1 ? null : data?.at(rowIndex)?.data;
5378
+ return {
5379
+ dataItem,
5380
+ rowIndex,
5381
+ element: row
5382
+ };
5383
+ }
5384
+ createDropIndicator() {
5385
+ if (!isDocumentAvailable()) {
5386
+ return;
5387
+ }
5388
+ this.dropIndicator = document.createElement('div');
5389
+ this.decorateDropIndicator();
5390
+ this.dropIndicator.innerHTML = `
5391
+ <div class="k-drop-hint-start"></div>
5392
+ <div class="k-drop-hint-line"></div>
5393
+ `;
5394
+ document.body.appendChild(this.dropIndicator);
5395
+ this.hide();
5396
+ }
5397
+ destroyDropIndicator() {
5398
+ if (!isDocumentAvailable()) {
5399
+ return;
5400
+ }
5401
+ ;
5402
+ if (this.dropIndicator && this.dropIndicator.parentElement) {
5403
+ document.body.removeChild(this.dropIndicator);
5404
+ this.dropIndicator = null;
5405
+ }
5406
+ }
5407
+ decorateHint() {
5408
+ hintClasses.forEach(className => this.renderer.addClass(this.hintElement, className));
5409
+ Object.keys(hintStyles)
5410
+ .forEach(style => this.renderer.setStyle(this.hintElement, style, hintStyles[style]));
5411
+ }
5412
+ positionDropIndicator(ev) {
5413
+ this.lastDropPosition = this.getDropPosition(ev.dragEvent);
5414
+ this.updateDropIndicatorPosition();
5415
+ }
5416
+ decorateDropIndicator() {
5417
+ dropIndicatorClasses.forEach(className => this.renderer.addClass(this.dropIndicator, className));
5418
+ Object.keys(dropIndicatorStyles)
5419
+ .forEach(style => this.renderer.setStyle(this.dropIndicator, style, dropIndicatorStyles[style]));
5420
+ }
5421
+ getDropPosition(e) {
5422
+ if (this.dropTarget === this.dragTarget || !isPresent$1(this.dropTarget)) {
5423
+ return dropPosition.forbidden;
5424
+ }
5425
+ ;
5426
+ const itemViewPortCoords = this.dropTarget.getBoundingClientRect();
5427
+ const itemDivisionsCount = 3;
5428
+ const itemDivisionHeight = itemViewPortCoords.height / itemDivisionsCount;
5429
+ const { dropTargetRow } = this.rowReorderArgs(this.dragTarget, this.dropTarget, this.view);
5430
+ const pointerPosition = e.clientY;
5431
+ const itemTop = itemViewPortCoords.top;
5432
+ let currentDropPosition = null;
5433
+ if (pointerPosition <= itemTop + itemDivisionHeight) {
5434
+ currentDropPosition = dropPosition.before;
5435
+ }
5436
+ else if (pointerPosition >= itemTop + itemViewPortCoords.height - itemDivisionHeight) {
5437
+ currentDropPosition = dropPosition.after;
5438
+ }
5439
+ else {
5440
+ currentDropPosition = dropPosition.over;
5441
+ }
5442
+ if (currentDropPosition === dropPosition.before && isNextSibling(this.dropTarget, this.dragTarget)) {
5443
+ currentDropPosition = dropPosition.forbidden;
5444
+ }
5445
+ else if (currentDropPosition === dropPosition.after && isPreviousSibling(this.dropTarget, this.dragTarget)) {
5446
+ currentDropPosition = dropPosition.forbidden;
5447
+ }
5448
+ if (this.isOverChild(dropTargetRow.dataItem)) {
5449
+ currentDropPosition = dropPosition.forbidden;
5450
+ }
5451
+ return currentDropPosition;
5452
+ }
5453
+ updateDropIndicatorPosition() {
5454
+ if (this.shouldHideDropIndicator() || !this.dropTarget) {
5455
+ this.hide();
5456
+ return;
5457
+ }
5458
+ this.show();
5459
+ const destinationItemOffset = getOffset(this.dropTarget);
5460
+ let indicatorOffsetTop = destinationItemOffset.top;
5461
+ const indicatorOffsetLeft = destinationItemOffset.left + this.dropIndicator.offsetWidth / 2;
5462
+ if (this.lastDropPosition === dropPosition.after) {
5463
+ indicatorOffsetTop += this.dropTarget.offsetHeight;
5464
+ }
5465
+ this.renderer.setStyle(this.dropIndicator, 'left', `${indicatorOffsetLeft}px`);
5466
+ this.renderer.setStyle(this.dropIndicator, 'top', `${indicatorOffsetTop}px`);
5467
+ }
5468
+ shouldHideDropIndicator() {
5469
+ return this.lastDropPosition === dropPosition.forbidden || this.lastDropPosition === dropPosition.over;
5470
+ }
5471
+ hide() {
5472
+ if (isPresent$1(this.dropIndicator)) {
5473
+ this.renderer.setStyle(this.dropIndicator, 'display', 'none');
5474
+ }
5475
+ }
5476
+ show() {
5477
+ if (isPresent$1(this.dropIndicator)) {
5478
+ this.renderer.removeStyle(this.dropIndicator, 'display');
5479
+ }
5480
+ }
5481
+ }
5482
+ RowReorderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RowReorderService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
5483
+ RowReorderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RowReorderService });
5484
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RowReorderService, decorators: [{
5485
+ type: Injectable
5486
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { rowReorder: [{
5487
+ type: Output
5488
+ }] } });
5489
+
5146
5490
  /* eslint-disable @typescript-eslint/no-inferrable-types */
5147
5491
  /**
5148
5492
  * @hidden
@@ -6038,7 +6382,7 @@ StringFilterMenuInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
6038
6382
  [filterDelay]="0"
6039
6383
  [ngModel]="currentFilter?.value" />
6040
6384
  </kendo-treelist-filter-menu-input-wrapper>
6041
- `, 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"] }] });
6385
+ `, 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"] }] });
6042
6386
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: StringFilterMenuInputComponent, decorators: [{
6043
6387
  type: Component,
6044
6388
  args: [{
@@ -6336,7 +6680,7 @@ NumericFilterMenuInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
6336
6680
  [step]="step">
6337
6681
  </kendo-numerictextbox>
6338
6682
  </kendo-treelist-filter-menu-input-wrapper>
6339
- `, 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"] }] });
6683
+ `, 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"] }] });
6340
6684
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterMenuInputComponent, decorators: [{
6341
6685
  type: Component,
6342
6686
  args: [{
@@ -7094,7 +7438,7 @@ BooleanFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
7094
7438
  <label class="k-radio-label" [attr.for]="radioId(item.value)">{{item.text}}</label>
7095
7439
  </li>
7096
7440
  </ul>
7097
- `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$1.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }] });
7441
+ `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }] });
7098
7442
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BooleanFilterMenuComponent, decorators: [{
7099
7443
  type: Component,
7100
7444
  args: [{
@@ -8586,7 +8930,7 @@ FilterCellOperatorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
8586
8930
  (click)="clearClick()"
8587
8931
  (keydown)="clearKeydown($event)">
8588
8932
  </button>
8589
- `, 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"] }] });
8933
+ `, 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"] }] });
8590
8934
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterCellOperatorsComponent, decorators: [{
8591
8935
  type: Component,
8592
8936
  args: [{
@@ -8831,7 +9175,7 @@ NumericFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
8831
9175
  [step]="step">
8832
9176
  </kendo-numerictextbox>
8833
9177
  </kendo-treelist-filter-wrapper-cell>
8834
- `, 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"] }] });
9178
+ `, 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"] }] });
8835
9179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterCellComponent, decorators: [{
8836
9180
  type: Component,
8837
9181
  args: [{
@@ -10653,6 +10997,10 @@ const ICON_CLASS = 'k-icon k-svg-icon';
10653
10997
  * @hidden
10654
10998
  */
10655
10999
  const IGNORE_CONTAINER_CLASSES = 'k-treelist-ignore-click';
11000
+ /**
11001
+ * @hidden
11002
+ */
11003
+ const DRAG_HANDLE_CLASS = 'k-drag-cell';
10656
11004
 
10657
11005
  /* eslint-disable @angular-eslint/pipe-prefix */
10658
11006
  /**
@@ -10719,13 +11067,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10719
11067
  * @hidden
10720
11068
  */
10721
11069
  class CellComponent {
10722
- constructor(editService, focusGroup) {
11070
+ constructor(editService, localization, focusGroup) {
10723
11071
  this.editService = editService;
11072
+ this.localization = localization;
10724
11073
  this.focusGroup = focusGroup;
10725
11074
  this.isNew = false;
10726
11075
  this.level = 0;
10727
11076
  this.caretAltDownIcon = caretAltDownIcon;
10728
11077
  this.caretAltRightIcon = caretAltRightIcon;
11078
+ this.reorderIcon = reorderIcon;
10729
11079
  this.cellContext = {};
10730
11080
  this._templateContext = {};
10731
11081
  this._editTemplateContext = {};
@@ -10741,6 +11091,12 @@ class CellComponent {
10741
11091
  get textNoWrapClass() {
10742
11092
  return this.column.expandable;
10743
11093
  }
11094
+ get dragHandleCellClass() {
11095
+ return isRowReorderColumn(this.column);
11096
+ }
11097
+ get dragRowHandleLabel() {
11098
+ return isRowReorderColumn(this.column) ? this.localization.get('dragRowHandleLabel') : undefined;
11099
+ }
10744
11100
  set viewItem(value) {
10745
11101
  this._viewItem = value;
10746
11102
  this.cellContext.viewItem = this.viewItem;
@@ -10808,8 +11164,8 @@ class CellComponent {
10808
11164
  context.rowIndex = this.viewItem.rowIndex;
10809
11165
  }
10810
11166
  }
10811
- 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 });
10812
- 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: `
11167
+ 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 });
11168
+ 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: `
10813
11169
  <ng-container [ngSwitch]="isEdited">
10814
11170
  <ng-container *ngSwitchCase="false">
10815
11171
  <ng-container *ngIf="column.expandable">
@@ -10838,6 +11194,12 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
10838
11194
  class="k-checkbox k-checkbox-md k-rounded-md"
10839
11195
  [checked]="selected" />
10840
11196
  </ng-template>
11197
+ <ng-container *ngIf="column.isRowReorderColumn && !isNew">
11198
+ <kendo-icon-wrapper
11199
+ name="reorder"
11200
+ [svgIcon]="reorderIcon">
11201
+ </kendo-icon-wrapper>
11202
+ </ng-container>
10841
11203
  </ng-container>
10842
11204
  <ng-container *ngSwitchCase="true">
10843
11205
  <ng-container
@@ -10878,7 +11240,7 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
10878
11240
  </ng-container>
10879
11241
  </ng-container>
10880
11242
  </ng-container>
10881
- `, 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 } });
11243
+ `, 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 } });
10882
11244
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CellComponent, decorators: [{
10883
11245
  type: Component,
10884
11246
  args: [{
@@ -10912,6 +11274,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10912
11274
  class="k-checkbox k-checkbox-md k-rounded-md"
10913
11275
  [checked]="selected" />
10914
11276
  </ng-template>
11277
+ <ng-container *ngIf="column.isRowReorderColumn && !isNew">
11278
+ <kendo-icon-wrapper
11279
+ name="reorder"
11280
+ [svgIcon]="reorderIcon">
11281
+ </kendo-icon-wrapper>
11282
+ </ng-container>
10915
11283
  </ng-container>
10916
11284
  <ng-container *ngSwitchCase="true">
10917
11285
  <ng-container
@@ -10954,7 +11322,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10954
11322
  </ng-container>
10955
11323
  `
10956
11324
  }]
10957
- }], ctorParameters: function () { return [{ type: EditService }, { type: FocusGroup }]; }, propDecorators: { commandCellClass: [{
11325
+ }], ctorParameters: function () { return [{ type: EditService }, { type: i1$1.LocalizationService }, { type: FocusGroup }]; }, propDecorators: { commandCellClass: [{
10958
11326
  type: HostBinding,
10959
11327
  args: ['class.k-command-cell']
10960
11328
  }], isCheckboxColumn: [{
@@ -10963,6 +11331,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10963
11331
  }], textNoWrapClass: [{
10964
11332
  type: HostBinding,
10965
11333
  args: ['class.k-text-nowrap']
11334
+ }], dragHandleCellClass: [{
11335
+ type: HostBinding,
11336
+ args: ['class.k-drag-cell']
11337
+ }, {
11338
+ type: HostBinding,
11339
+ args: ['class.k-touch-action-none']
11340
+ }], dragRowHandleLabel: [{
11341
+ type: HostBinding,
11342
+ args: ['attr.aria-label']
10966
11343
  }], column: [{
10967
11344
  type: Input
10968
11345
  }], columnIndex: [{
@@ -11167,8 +11544,10 @@ class TableBodyComponent {
11167
11544
  clickHandler(eventArg) {
11168
11545
  const target = eventArg.target;
11169
11546
  const { cell, row } = this.targetElements(target);
11170
- if (cell && !hasClasses(cell, NON_DATA_CELL_CLASSES) &&
11171
- !hasClasses(row, NON_DATA_ROW_CLASSES)) {
11547
+ const forbiddenCellClasses = NON_DATA_CELL_CLASSES.concat(` ${DRAG_HANDLE_CLASS}`);
11548
+ const isValidCell = cell ? !hasClasses(cell, forbiddenCellClasses) : false;
11549
+ const isValidRow = row ? !hasClasses(row, NON_DATA_ROW_CLASSES) : false;
11550
+ if (isValidRow && isValidCell) {
11172
11551
  if (this.expandClick(eventArg, row) || this.checkboxClick(cell, row, eventArg)) {
11173
11552
  return;
11174
11553
  }
@@ -12580,7 +12959,7 @@ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
12580
12959
  [attr.aria-label]="textFor('pagerPreviousPage')"
12581
12960
  (click)="onButtonClick('prevPage')">
12582
12961
  </button>
12583
- `, 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 });
12962
+ `, 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 });
12584
12963
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
12585
12964
  type: Component,
12586
12965
  args: [{
@@ -12765,7 +13144,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
12765
13144
  [attr.title]="pageLabel(end + 1)"
12766
13145
  (click)="changePage(end)">...</button>
12767
13146
  </div>
12768
- `, 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 });
13147
+ `, 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 });
12769
13148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNumericButtonsComponent, decorators: [{
12770
13149
  type: Component,
12771
13150
  args: [{
@@ -12934,7 +13313,7 @@ PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
12934
13313
  </kendo-numerictextbox>
12935
13314
  {{textFor('pagerOf')}} {{totalPages}}
12936
13315
  </span>
12937
- `, 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"] }] });
13316
+ `, 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"] }] });
12938
13317
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInputComponent, decorators: [{
12939
13318
  type: Component,
12940
13319
  args: [{
@@ -13040,7 +13419,7 @@ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
13040
13419
  [attr.aria-label]="textFor('pagerLastPage')"
13041
13420
  (click)="onButtonClick('lastPage')">
13042
13421
  </button>
13043
- `, 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 });
13422
+ `, 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 });
13044
13423
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
13045
13424
  type: Component,
13046
13425
  args: [{
@@ -13240,7 +13619,7 @@ PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
13240
13619
  [attr.aria-label]="textFor('pagerItemsPerPage')"
13241
13620
  (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
13242
13621
  <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
13243
- `, 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 });
13622
+ `, 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 });
13244
13623
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
13245
13624
  type: Component,
13246
13625
  args: [{
@@ -13642,7 +14021,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13642
14021
  class Messages extends ComponentMessages {
13643
14022
  }
13644
14023
  Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
13645
- 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 });
14024
+ 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 });
13646
14025
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, decorators: [{
13647
14026
  type: Directive,
13648
14027
  args: [{}]
@@ -13754,6 +14133,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13754
14133
  type: Input
13755
14134
  }], bottomToolbarLabel: [{
13756
14135
  type: Input
14136
+ }], dragRowHandleLabel: [{
14137
+ type: Input
13757
14138
  }] } });
13758
14139
 
13759
14140
  /**
@@ -14076,7 +14457,7 @@ const isInEditedCell = (element, treelistElement) => closest(element, matchesCla
14076
14457
  * {% endmeta %}
14077
14458
  */
14078
14459
  class TreeListComponent {
14079
- 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) {
14460
+ 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) {
14080
14461
  this.supportService = supportService;
14081
14462
  this.wrapper = wrapper;
14082
14463
  this.changeNotification = changeNotification;
@@ -14101,6 +14482,7 @@ class TreeListComponent {
14101
14482
  this.selectionService = selectionService;
14102
14483
  this.localization = localization;
14103
14484
  this.ctx = ctx;
14485
+ this.rowReorderService = rowReorderService;
14104
14486
  /**
14105
14487
  * Defines the page size used by the TreeList when [paging]({% slug paging_treelist %}) is enabled.
14106
14488
  *
@@ -14336,6 +14718,11 @@ class TreeListComponent {
14336
14718
  * Used by the expand directive and the Gantt component.
14337
14719
  */
14338
14720
  this.expandStateChange = new EventEmitter();
14721
+ /**
14722
+ * Fires when the user drops the dragged row and reordering is performed.
14723
+ * Emits the [RowReorderEvent]({% slug api_treelist_rowreorderevent %}).
14724
+ */
14725
+ this.rowReorder = new EventEmitter();
14339
14726
  /**
14340
14727
  * @hidden
14341
14728
  */
@@ -14365,6 +14752,11 @@ class TreeListComponent {
14365
14752
  this._sort = new Array();
14366
14753
  this._skip = 0;
14367
14754
  this.cachedWindowWidth = 0;
14755
+ this._rowReorderable = false;
14756
+ /**
14757
+ * @hidden
14758
+ */
14759
+ this.treeListData = () => { return this.view; };
14368
14760
  this._rowClass = () => null;
14369
14761
  validatePackage(packageMetadata);
14370
14762
  this.subscriptions.add(localization.changes.subscribe(({ rtl }) => {
@@ -14427,6 +14819,11 @@ class TreeListComponent {
14427
14819
  this.view.clear();
14428
14820
  this.expandStateChange.emit(args);
14429
14821
  }
14822
+ if (this.rowReorderable) {
14823
+ this.ngZone.onStable.pipe(take(2)).subscribe(() => {
14824
+ this.notifyReorderContainers();
14825
+ });
14826
+ }
14430
14827
  }));
14431
14828
  this.subscriptions.add(this.view.childrenLoaded.subscribe(() => {
14432
14829
  this.changeDetectorRef.detectChanges();
@@ -14625,6 +15022,26 @@ class TreeListComponent {
14625
15022
  }
14626
15023
  this.selectionService.isSelected = value;
14627
15024
  }
15025
+ /**
15026
+ * Enables the [row reordering]({% slug treelist_row_reordering %}) of the TreeList.
15027
+ * @default false
15028
+ */
15029
+ set rowReorderable(value) {
15030
+ this._rowReorderable = value;
15031
+ if (value) {
15032
+ this.rowReorderSubscription = this.rowReorderService.rowReorder.subscribe(args => {
15033
+ hasObservers(this.rowReorder) && this.ngZone.run(() => {
15034
+ this.rowReorder.emit(args);
15035
+ });
15036
+ });
15037
+ }
15038
+ else {
15039
+ this.rowReorderSubscription?.unsubscribe();
15040
+ }
15041
+ }
15042
+ get rowReorderable() {
15043
+ return this._rowReorderable;
15044
+ }
14628
15045
  /**
14629
15046
  * @hidden
14630
15047
  */
@@ -14886,6 +15303,30 @@ class TreeListComponent {
14886
15303
  this.ngZone = null;
14887
15304
  clearTimeout(this.pageChangeTimeout);
14888
15305
  }
15306
+ /**
15307
+ * @hidden
15308
+ */
15309
+ handleReorderEvents(ev, evType) {
15310
+ this.rowReorderService[evType](ev);
15311
+ }
15312
+ /**
15313
+ * @hidden
15314
+ */
15315
+ getDefaultSelectors(type) {
15316
+ return this.rowReorderService.defaultSelectors[type];
15317
+ }
15318
+ /**
15319
+ * @hidden
15320
+ */
15321
+ getHintSettings(setting) {
15322
+ return this.rowReorderService[setting];
15323
+ }
15324
+ /**
15325
+ * @hidden
15326
+ */
15327
+ get hintText() {
15328
+ return this.rowReorderService.getDefaultHintText(this.columnList, this.view);
15329
+ }
14889
15330
  /**
14890
15331
  * @hidden
14891
15332
  */
@@ -15577,6 +16018,7 @@ class TreeListComponent {
15577
16018
  this.closeCell();
15578
16019
  this.cancelCell();
15579
16020
  this.dataStateChange.emit(x);
16021
+ this.rowReorderable && this.notifyReorderContainers();
15580
16022
  }));
15581
16023
  }
15582
16024
  attachEditHandlers() {
@@ -15841,9 +16283,13 @@ class TreeListComponent {
15841
16283
  this.columns.reset(columns.toArray());
15842
16284
  this.columns.notifyOnChanges();
15843
16285
  }
16286
+ notifyReorderContainers() {
16287
+ this.dragTargetContainer?.notify();
16288
+ this.dropTargetContainer?.notify();
16289
+ }
15844
16290
  }
15845
- 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 });
15846
- 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: [
16291
+ 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 });
16292
+ 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: [
15847
16293
  BrowserSupportService,
15848
16294
  LocalizationService,
15849
16295
  ColumnInfoService,
@@ -15884,8 +16330,9 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15884
16330
  provide: ExpandableTreeComponent,
15885
16331
  useExisting: forwardRef(() => TreeListComponent)
15886
16332
  },
15887
- ContextService
15888
- ], 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: `
16333
+ ContextService,
16334
+ RowReorderService
16335
+ ], 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: `
15889
16336
  <ng-container kendoTreeListLocalizedMessages
15890
16337
 
15891
16338
  i18n-noRecords="kendo.treelist.noRecords|The label visible in the TreeList when there are no records"
@@ -16046,6 +16493,8 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
16046
16493
 
16047
16494
  i18n-bottomToolbarLabel="kendo.treelist.bottomToolbarLabel|The label of the TreeList bottom toolbar"
16048
16495
  bottomToolbarLabel="Bottom toolbar"
16496
+ i18n-dragRowHandleLabel="kendo.treelist.dragRowHandleLabel|The label for the TreeList drag row handle"
16497
+ dragRowHandleLabel="Drag row"
16049
16498
  >
16050
16499
  </ng-container>
16051
16500
  <kendo-treelist-toolbar
@@ -16063,7 +16512,24 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
16063
16512
  [attr.aria-rowcount]="ariaRowCount"
16064
16513
  [attr.aria-colcount]="ariaColCount"
16065
16514
  [attr.aria-multiselectable]="ariaMultiselectable"
16066
- [attr.aria-label]="ariaLabel">
16515
+ [attr.aria-label]="ariaLabel"
16516
+ kendoDragTargetContainer
16517
+ kendoDropTargetContainer
16518
+ mode="manual"
16519
+ [dragDisabled]="!rowReorderable"
16520
+ [dropDisabled]="!rowReorderable"
16521
+ [dragTargetFilter]="getDefaultSelectors('dragTarget')"
16522
+ [dropTargetFilter]="getDefaultSelectors('dropTarget')"
16523
+ [dragHandle]="getDefaultSelectors('handle')"
16524
+ [hint]="{hintTemplate: defaultHint}"
16525
+ (onPress)="handleReorderEvents($event, 'press')"
16526
+ (onDragStart)="handleReorderEvents($event, 'dragStart')"
16527
+ (onDrag)="handleReorderEvents($event, 'drag')"
16528
+ (onDragEnter)="handleReorderEvents($event, 'dragEnter')"
16529
+ (onDragLeave)="handleReorderEvents($event, 'dragLeave')"
16530
+ (onDragEnd)="handleReorderEvents($event, 'dragEnd')"
16531
+ (onDrop)="handleReorderEvents($event, 'drop')"
16532
+ [dragData]="treeListData">
16067
16533
  <ng-template [ngIf]="isScrollable">
16068
16534
  <div *ngIf="!hideHeader"
16069
16535
  class="k-grid-header"
@@ -16215,7 +16681,16 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
16215
16681
  [attr.aria-label]="messageFor('bottomToolbarLabel')"
16216
16682
  [attr.aria-controls]="ariaRootId">
16217
16683
  </kendo-treelist-toolbar>
16218
- `, 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 });
16684
+
16685
+ <ng-template #defaultHint>
16686
+ <kendo-icon-wrapper
16687
+ [name]="getHintSettings('hintIcon')"
16688
+ [svgIcon]="getHintSettings('hintSVGIcon')"
16689
+ innerCssClass="k-drag-status">
16690
+ </kendo-icon-wrapper>
16691
+ {{hintText}}
16692
+ </ng-template>
16693
+ `, 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 });
16219
16694
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListComponent, decorators: [{
16220
16695
  type: Component,
16221
16696
  args: [{
@@ -16263,7 +16738,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16263
16738
  provide: ExpandableTreeComponent,
16264
16739
  useExisting: forwardRef(() => TreeListComponent)
16265
16740
  },
16266
- ContextService
16741
+ ContextService,
16742
+ RowReorderService
16267
16743
  ],
16268
16744
  selector: 'kendo-treelist',
16269
16745
  template: `
@@ -16427,6 +16903,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16427
16903
 
16428
16904
  i18n-bottomToolbarLabel="kendo.treelist.bottomToolbarLabel|The label of the TreeList bottom toolbar"
16429
16905
  bottomToolbarLabel="Bottom toolbar"
16906
+ i18n-dragRowHandleLabel="kendo.treelist.dragRowHandleLabel|The label for the TreeList drag row handle"
16907
+ dragRowHandleLabel="Drag row"
16430
16908
  >
16431
16909
  </ng-container>
16432
16910
  <kendo-treelist-toolbar
@@ -16444,7 +16922,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16444
16922
  [attr.aria-rowcount]="ariaRowCount"
16445
16923
  [attr.aria-colcount]="ariaColCount"
16446
16924
  [attr.aria-multiselectable]="ariaMultiselectable"
16447
- [attr.aria-label]="ariaLabel">
16925
+ [attr.aria-label]="ariaLabel"
16926
+ kendoDragTargetContainer
16927
+ kendoDropTargetContainer
16928
+ mode="manual"
16929
+ [dragDisabled]="!rowReorderable"
16930
+ [dropDisabled]="!rowReorderable"
16931
+ [dragTargetFilter]="getDefaultSelectors('dragTarget')"
16932
+ [dropTargetFilter]="getDefaultSelectors('dropTarget')"
16933
+ [dragHandle]="getDefaultSelectors('handle')"
16934
+ [hint]="{hintTemplate: defaultHint}"
16935
+ (onPress)="handleReorderEvents($event, 'press')"
16936
+ (onDragStart)="handleReorderEvents($event, 'dragStart')"
16937
+ (onDrag)="handleReorderEvents($event, 'drag')"
16938
+ (onDragEnter)="handleReorderEvents($event, 'dragEnter')"
16939
+ (onDragLeave)="handleReorderEvents($event, 'dragLeave')"
16940
+ (onDragEnd)="handleReorderEvents($event, 'dragEnd')"
16941
+ (onDrop)="handleReorderEvents($event, 'drop')"
16942
+ [dragData]="treeListData">
16448
16943
  <ng-template [ngIf]="isScrollable">
16449
16944
  <div *ngIf="!hideHeader"
16450
16945
  class="k-grid-header"
@@ -16596,9 +17091,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16596
17091
  [attr.aria-label]="messageFor('bottomToolbarLabel')"
16597
17092
  [attr.aria-controls]="ariaRootId">
16598
17093
  </kendo-treelist-toolbar>
17094
+
17095
+ <ng-template #defaultHint>
17096
+ <kendo-icon-wrapper
17097
+ [name]="getHintSettings('hintIcon')"
17098
+ [svgIcon]="getHintSettings('hintSVGIcon')"
17099
+ innerCssClass="k-drag-status">
17100
+ </kendo-icon-wrapper>
17101
+ {{hintText}}
17102
+ </ng-template>
16599
17103
  `
16600
17104
  }]
16601
- }], 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: [{
17105
+ }], 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: [{
16602
17106
  type: Input,
16603
17107
  args: ['aria-label']
16604
17108
  }], data: [{
@@ -16651,6 +17155,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16651
17155
  type: Input
16652
17156
  }], isSelected: [{
16653
17157
  type: Input
17158
+ }], rowReorderable: [{
17159
+ type: Input
16654
17160
  }], selectionChange: [{
16655
17161
  type: Output
16656
17162
  }], filterChange: [{
@@ -16699,6 +17205,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16699
17205
  args: ['collapse']
16700
17206
  }], expandStateChange: [{
16701
17207
  type: Output
17208
+ }], rowReorder: [{
17209
+ type: Output
16702
17210
  }], columnsRef: [{
16703
17211
  type: Input,
16704
17212
  args: ['columns']
@@ -16750,6 +17258,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16750
17258
  }], ariaRoot: [{
16751
17259
  type: ViewChild,
16752
17260
  args: ['ariaRoot', { static: true }]
17261
+ }], dragTargetContainer: [{
17262
+ type: ViewChild,
17263
+ args: [DragTargetContainerDirective]
17264
+ }], dropTargetContainer: [{
17265
+ type: ViewChild,
17266
+ args: [DropTargetContainerDirective]
16753
17267
  }], fetchChildren: [{
16754
17268
  type: Input
16755
17269
  }], hasChildren: [{
@@ -16927,6 +17441,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16927
17441
  args: [CellTemplateDirective, { static: false }]
16928
17442
  }] } });
16929
17443
 
17444
+ /**
17445
+ * Represents the drag handle for reordering rows in the TreeList.
17446
+ */
17447
+ class RowReorderColumnComponent extends ColumnBase {
17448
+ constructor(parent) {
17449
+ super(parent);
17450
+ this.parent = parent;
17451
+ /**
17452
+ * @hidden
17453
+ */
17454
+ this.isRowReorderColumn = true;
17455
+ }
17456
+ }
17457
+ 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 });
17458
+ RowReorderColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: RowReorderColumnComponent, selector: "kendo-treelist-rowreorder-column", providers: [
17459
+ {
17460
+ provide: ColumnBase,
17461
+ useExisting: forwardRef(() => RowReorderColumnComponent)
17462
+ }
17463
+ ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
17464
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RowReorderColumnComponent, decorators: [{
17465
+ type: Component,
17466
+ args: [{
17467
+ providers: [
17468
+ {
17469
+ provide: ColumnBase,
17470
+ useExisting: forwardRef(() => RowReorderColumnComponent)
17471
+ }
17472
+ ],
17473
+ selector: 'kendo-treelist-rowreorder-column',
17474
+ template: ``
17475
+ }]
17476
+ }], ctorParameters: function () { return [{ type: ColumnBase, decorators: [{
17477
+ type: SkipSelf
17478
+ }, {
17479
+ type: Host
17480
+ }, {
17481
+ type: Optional
17482
+ }] }]; } });
17483
+
16930
17484
  const exportedModules$3 = [
16931
17485
  ColumnComponent,
16932
17486
  ColumnGroupComponent,
@@ -16940,7 +17494,8 @@ const exportedModules$3 = [
16940
17494
  SpanColumnComponent,
16941
17495
  TableDirective,
16942
17496
  LoadingComponent,
16943
- CheckboxColumnComponent
17497
+ CheckboxColumnComponent,
17498
+ RowReorderColumnComponent
16944
17499
  ];
16945
17500
  /**
16946
17501
  * @hidden
@@ -16951,6 +17506,7 @@ class SharedModule {
16951
17506
  ColumnComponent,
16952
17507
  SpanColumnComponent,
16953
17508
  CheckboxColumnComponent,
17509
+ RowReorderColumnComponent,
16954
17510
  ColumnGroupComponent,
16955
17511
  FocusableDirective
16956
17512
  ];
@@ -16969,7 +17525,8 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
16969
17525
  SpanColumnComponent,
16970
17526
  TableDirective,
16971
17527
  LoadingComponent,
16972
- CheckboxColumnComponent], imports: [CommonModule, IconsModule], exports: [ColumnComponent,
17528
+ CheckboxColumnComponent,
17529
+ RowReorderColumnComponent], imports: [CommonModule, IconsModule], exports: [ColumnComponent,
16973
17530
  ColumnGroupComponent,
16974
17531
  LogicalCellDirective,
16975
17532
  LogicalRowDirective,
@@ -16981,7 +17538,8 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
16981
17538
  SpanColumnComponent,
16982
17539
  TableDirective,
16983
17540
  LoadingComponent,
16984
- CheckboxColumnComponent, DraggableModule, IconsModule] });
17541
+ CheckboxColumnComponent,
17542
+ RowReorderColumnComponent, DraggableModule, IconsModule] });
16985
17543
  SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SharedModule, imports: [[CommonModule, IconsModule], DraggableModule, IconsModule] });
16986
17544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SharedModule, decorators: [{
16987
17545
  type: NgModule,
@@ -18052,7 +18610,7 @@ ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
18052
18610
  (columnChange)="onChange($event)">
18053
18611
  </kendo-treelist-columnlist>
18054
18612
  </ng-template>
18055
- `, 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"] }] });
18613
+ `, 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"] }] });
18056
18614
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
18057
18615
  type: Component,
18058
18616
  args: [{
@@ -19158,8 +19716,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
19158
19716
  }] } });
19159
19717
 
19160
19718
  class BaseBindingDirective {
19161
- constructor(component) {
19719
+ constructor(component, rowReorderService) {
19162
19720
  this.component = component;
19721
+ this.rowReorderService = rowReorderService;
19163
19722
  this.state = {};
19164
19723
  this.cache = new Map();
19165
19724
  this.originalData = [];
@@ -19192,6 +19751,8 @@ class BaseBindingDirective {
19192
19751
  this.applyState(this.state);
19193
19752
  this.subscriptions.add(this.component.dataStateChange
19194
19753
  .subscribe(this.onStateChange.bind(this)));
19754
+ this.component.rowReorderable && this.subscriptions.add(this.rowReorderService.rowReorder
19755
+ .subscribe(this.onRowReorder.bind(this)));
19195
19756
  }
19196
19757
  /**
19197
19758
  * @hidden
@@ -19232,6 +19793,7 @@ class BaseBindingDirective {
19232
19793
  this.cache.clear();
19233
19794
  this.component.data = this.fetchChildren();
19234
19795
  }
19796
+ onRowReorder(_event) { }
19235
19797
  applyState({ sort, filter }) {
19236
19798
  this.sort = sort;
19237
19799
  this.filter = filter;
@@ -19300,12 +19862,12 @@ class BaseBindingDirective {
19300
19862
  this.dataChanged = true;
19301
19863
  }
19302
19864
  }
19303
- BaseBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseBindingDirective, deps: [{ token: DataBoundTreeComponent }], target: i0.ɵɵFactoryTarget.Directive });
19865
+ 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 });
19304
19866
  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 });
19305
19867
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseBindingDirective, decorators: [{
19306
19868
  type: Directive,
19307
19869
  args: [{}]
19308
- }], ctorParameters: function () { return [{ type: DataBoundTreeComponent }]; }, propDecorators: { sort: [{
19870
+ }], ctorParameters: function () { return [{ type: DataBoundTreeComponent }, { type: RowReorderService }]; }, propDecorators: { sort: [{
19309
19871
  type: Input
19310
19872
  }], filter: [{
19311
19873
  type: Input
@@ -19355,6 +19917,53 @@ class HierarchyEditService extends LocalEditService {
19355
19917
  }
19356
19918
  }
19357
19919
 
19920
+ /**
19921
+ * @hidden
19922
+ */
19923
+ class HierarchicalRowReorderService extends RowReorderService {
19924
+ isOverChild(targetItem) {
19925
+ const { draggedRows } = this.rowReorderArgs(this.dragTarget, this.dropTarget, this.view);
19926
+ const draggedItem = draggedRows[0].dataItem;
19927
+ const hasChildren = isPresent(draggedItem[this.childrenField]) && draggedItem[this.childrenField].length > 0;
19928
+ if (!hasChildren) {
19929
+ return false;
19930
+ }
19931
+ if (targetItem && draggedItem.hasOwnProperty(this.childrenField)) {
19932
+ if (draggedItem[this.childrenField].includes(targetItem)) {
19933
+ return true;
19934
+ }
19935
+ const parent = findParent$1(this.data, targetItem, this.childrenField);
19936
+ if (parent) {
19937
+ return this.isOverChild(parent);
19938
+ }
19939
+ }
19940
+ return false;
19941
+ }
19942
+ reorderRows(ev, collection, field) {
19943
+ const draggedItem = ev.draggedRows[0].dataItem;
19944
+ const dropTargetItem = ev.dropTargetRow.dataItem;
19945
+ const draggedItemParent = findParent$1(collection, draggedItem, field);
19946
+ const dropTargetParent = findParent$1(collection, dropTargetItem, field);
19947
+ const draggedItemIdx = draggedItemParent ? draggedItemParent[field].indexOf(draggedItem) : collection.indexOf(draggedItem);
19948
+ let dropTargetItemIdx = dropTargetParent ? dropTargetParent[field].indexOf(dropTargetItem) : collection.indexOf(dropTargetItem);
19949
+ if (ev.dropPosition === dropPosition.after && dropTargetItemIdx < draggedItemIdx) {
19950
+ dropTargetItemIdx++;
19951
+ }
19952
+ draggedItemParent ? draggedItemParent[field].splice(draggedItemIdx, 1) : collection.splice(draggedItemIdx, 1);
19953
+ if (ev.dropPosition !== dropPosition.over) {
19954
+ dropTargetParent ? dropTargetParent[field].splice(dropTargetItemIdx, 0, draggedItem) : collection.splice(dropTargetItemIdx, 0, draggedItem);
19955
+ }
19956
+ else {
19957
+ dropTargetItem[field].unshift(draggedItem);
19958
+ }
19959
+ }
19960
+ }
19961
+ HierarchicalRowReorderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchicalRowReorderService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
19962
+ HierarchicalRowReorderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchicalRowReorderService });
19963
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchicalRowReorderService, decorators: [{
19964
+ type: Injectable
19965
+ }] });
19966
+
19358
19967
  /**
19359
19968
  * A directive which binds the TreeList to a tree of objects.
19360
19969
  *
@@ -19363,12 +19972,16 @@ class HierarchyEditService extends LocalEditService {
19363
19972
  * and [filtering]({% slug filtering_treelist %}) ([more information and examples](slug:databinding_treelist#toc-binding-to-hierarchical-data)).
19364
19973
  */
19365
19974
  class HierarchyBindingDirective extends BaseBindingDirective {
19366
- constructor(component) {
19975
+ constructor(component, rowReorderService) {
19367
19976
  super(component);
19368
19977
  this.component = component;
19978
+ this.rowReorderService = rowReorderService;
19369
19979
  this.childrenGetter = getter('items');
19370
19980
  this.childrenSetter = setter('items');
19371
19981
  component.localEditService = new HierarchyEditService(this);
19982
+ if (this.rowReorderService) {
19983
+ this.rowReorderService.bindingDirective = this;
19984
+ }
19372
19985
  }
19373
19986
  /**
19374
19987
  * The name of the field which holds the child data items of the node.
@@ -19376,23 +19989,56 @@ class HierarchyBindingDirective extends BaseBindingDirective {
19376
19989
  set childrenField(value) {
19377
19990
  this.childrenGetter = getter(value);
19378
19991
  this.childrenSetter = setter(value);
19992
+ this._childrenField = value;
19379
19993
  }
19994
+ get childrenField() {
19995
+ return this._childrenField;
19996
+ }
19997
+ /**
19998
+ * @hidden
19999
+ */
19380
20000
  getChildren(item) {
19381
20001
  return item ? this.childrenGetter(item) || [] : this.originalData;
19382
20002
  }
19383
20003
  itemKey(item) {
19384
20004
  return item;
19385
20005
  }
20006
+ onRowReorder(ev) {
20007
+ if (ev.dropPosition === 'forbidden') {
20008
+ return;
20009
+ }
20010
+ const dropTargetItem = ev.dropTargetRow.dataItem;
20011
+ if (ev.dropPosition === 'over') {
20012
+ if (!dropTargetItem.hasOwnProperty(this.childrenField)) {
20013
+ dropTargetItem[this.childrenField] = [];
20014
+ }
20015
+ }
20016
+ this.rowReorderService.reorderRows(ev, this.originalData, this.childrenField);
20017
+ this.rebind();
20018
+ }
19386
20019
  }
19387
- HierarchyBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchyBindingDirective, deps: [{ token: DataBoundTreeComponent }], target: i0.ɵɵFactoryTarget.Directive });
19388
- 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 });
20020
+ 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 });
20021
+ HierarchyBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: HierarchyBindingDirective, selector: "[kendoTreeListHierarchyBinding]", inputs: { childrenField: "childrenField", data: ["kendoTreeListHierarchyBinding", "data"] }, providers: [
20022
+ {
20023
+ provide: RowReorderService,
20024
+ useClass: HierarchicalRowReorderService
20025
+ }
20026
+ ], exportAs: ["kendoTreeListHierarchyBinding"], usesInheritance: true, ngImport: i0 });
19389
20027
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HierarchyBindingDirective, decorators: [{
19390
20028
  type: Directive,
19391
20029
  args: [{
19392
20030
  exportAs: 'kendoTreeListHierarchyBinding',
19393
- selector: '[kendoTreeListHierarchyBinding]'
20031
+ selector: '[kendoTreeListHierarchyBinding]',
20032
+ providers: [
20033
+ {
20034
+ provide: RowReorderService,
20035
+ useClass: HierarchicalRowReorderService
20036
+ }
20037
+ ]
19394
20038
  }]
19395
- }], ctorParameters: function () { return [{ type: DataBoundTreeComponent }]; }, propDecorators: { childrenField: [{
20039
+ }], ctorParameters: function () { return [{ type: DataBoundTreeComponent }, { type: RowReorderService, decorators: [{
20040
+ type: Optional
20041
+ }] }]; }, propDecorators: { childrenField: [{
19396
20042
  type: Input
19397
20043
  }], data: [{
19398
20044
  type: Input,
@@ -19443,6 +20089,47 @@ class FlatEditService extends LocalEditService {
19443
20089
  }
19444
20090
  }
19445
20091
 
20092
+ /**
20093
+ * @hidden
20094
+ */
20095
+ class FlatRowReorderService extends RowReorderService {
20096
+ isOverChild(targetItem) {
20097
+ const { draggedRows } = this.rowReorderArgs(this.dragTarget, this.dropTarget, this.view);
20098
+ const draggedItem = draggedRows[0].dataItem;
20099
+ const hasParent = isPresent(targetItem[this.parentIdField]);
20100
+ const sameParents = draggedItem[this.parentIdField] === targetItem[this.parentIdField];
20101
+ if (!hasParent || sameParents) {
20102
+ return false;
20103
+ }
20104
+ if (targetItem && targetItem.hasOwnProperty(this.parentIdField)) {
20105
+ if (draggedItem[this.idField] === targetItem[this.parentIdField]) {
20106
+ return true;
20107
+ }
20108
+ const parent = this.data.find(i => i[this.idField] === targetItem[this.parentIdField]);
20109
+ if (parent) {
20110
+ return this.isOverChild(parent);
20111
+ }
20112
+ }
20113
+ }
20114
+ reorderRows(ev, collection) {
20115
+ const { draggedRows, dropTargetRow } = ev;
20116
+ const draggedDataItem = draggedRows[0].dataItem;
20117
+ const dropTargetDataItem = dropTargetRow.dataItem;
20118
+ let dropTargetIdx = collection.indexOf(dropTargetDataItem);
20119
+ const draggedItemIdx = collection.indexOf(draggedDataItem);
20120
+ collection.splice(draggedItemIdx, 1);
20121
+ if (ev.dropPosition === 'after' && dropTargetIdx < draggedItemIdx) {
20122
+ dropTargetIdx++;
20123
+ }
20124
+ collection.splice(dropTargetIdx, 0, draggedDataItem);
20125
+ }
20126
+ }
20127
+ FlatRowReorderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatRowReorderService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
20128
+ FlatRowReorderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatRowReorderService });
20129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatRowReorderService, decorators: [{
20130
+ type: Injectable
20131
+ }] });
20132
+
19446
20133
  const ROOT_ID = null;
19447
20134
  /**
19448
20135
  * A directive which binds the TreeList to an array of objects by using
@@ -19453,14 +20140,18 @@ const ROOT_ID = null;
19453
20140
  * and [filtering]({% slug filtering_treelist %}) ([more information and examples]({% slug databinding_treelist %})).
19454
20141
  */
19455
20142
  class FlatBindingDirective extends BaseBindingDirective {
19456
- constructor(component) {
20143
+ constructor(component, rowReorderService) {
19457
20144
  super(component);
19458
20145
  this.component = component;
20146
+ this.rowReorderService = rowReorderService;
19459
20147
  this.idGetter = getter('id');
19460
20148
  this.idSetter = setter('id');
19461
20149
  this.parentIdGetter = getter('parentId');
19462
20150
  this.parentIdSetter = setter('parentId');
19463
20151
  component.localEditService = new FlatEditService(this);
20152
+ if (this.rowReorderService) {
20153
+ this.rowReorderService.bindingDirective = this;
20154
+ }
19464
20155
  }
19465
20156
  /**
19466
20157
  * The name of the field which contains the identifier of the parent node.
@@ -19468,6 +20159,10 @@ class FlatBindingDirective extends BaseBindingDirective {
19468
20159
  set parentIdField(value) {
19469
20160
  this.parentIdGetter = getter(value);
19470
20161
  this.parentIdSetter = setter(value);
20162
+ this._parentIdField = value;
20163
+ }
20164
+ get parentIdField() {
20165
+ return this._parentIdField;
19471
20166
  }
19472
20167
  /**
19473
20168
  * The name of the field which contains the unique identifier of the node.
@@ -19475,7 +20170,14 @@ class FlatBindingDirective extends BaseBindingDirective {
19475
20170
  set idField(value) {
19476
20171
  this.idGetter = getter(value);
19477
20172
  this.idSetter = setter(value);
20173
+ this._idField = value;
20174
+ }
20175
+ get idField() {
20176
+ return this._idField;
19478
20177
  }
20178
+ /**
20179
+ * @hidden
20180
+ */
19479
20181
  getChildren(item) {
19480
20182
  const id = this.itemKey(item);
19481
20183
  const children = id === ROOT_ID ?
@@ -19486,16 +20188,48 @@ class FlatBindingDirective extends BaseBindingDirective {
19486
20188
  itemKey(item) {
19487
20189
  return item ? this.idGetter(item) : ROOT_ID;
19488
20190
  }
20191
+ onRowReorder(ev) {
20192
+ if (ev.dropPosition === 'forbidden') {
20193
+ return;
20194
+ }
20195
+ const draggedItem = ev.draggedRows[0].dataItem;
20196
+ const dropTargetItem = ev.dropTargetRow.dataItem;
20197
+ if (ev.dropPosition === 'over') {
20198
+ const dropItemId = this.itemKey(dropTargetItem);
20199
+ if (draggedItem[this.parentIdField] !== dropItemId) {
20200
+ draggedItem[this.parentIdField] = dropItemId;
20201
+ }
20202
+ }
20203
+ else {
20204
+ const dropItemParentId = dropTargetItem[this.parentIdField];
20205
+ draggedItem[this.parentIdField] = dropItemParentId;
20206
+ this.rowReorderService.reorderRows(ev, this.originalData);
20207
+ }
20208
+ this.rebind();
20209
+ }
19489
20210
  }
19490
- FlatBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatBindingDirective, deps: [{ token: DataBoundTreeComponent }], target: i0.ɵɵFactoryTarget.Directive });
19491
- 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 });
20211
+ 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 });
20212
+ 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: [
20213
+ {
20214
+ provide: RowReorderService,
20215
+ useClass: FlatRowReorderService
20216
+ }
20217
+ ], exportAs: ["kendoTreeListFlatBinding"], usesInheritance: true, ngImport: i0 });
19492
20218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FlatBindingDirective, decorators: [{
19493
20219
  type: Directive,
19494
20220
  args: [{
19495
20221
  exportAs: 'kendoTreeListFlatBinding',
19496
- selector: '[kendoTreeListFlatBinding]'
20222
+ selector: '[kendoTreeListFlatBinding]',
20223
+ providers: [
20224
+ {
20225
+ provide: RowReorderService,
20226
+ useClass: FlatRowReorderService
20227
+ }
20228
+ ]
19497
20229
  }]
19498
- }], ctorParameters: function () { return [{ type: DataBoundTreeComponent }]; }, propDecorators: { parentIdField: [{
20230
+ }], ctorParameters: function () { return [{ type: DataBoundTreeComponent }, { type: RowReorderService, decorators: [{
20231
+ type: Optional
20232
+ }] }]; }, propDecorators: { parentIdField: [{
19499
20233
  type: Input
19500
20234
  }], idField: [{
19501
20235
  type: Input
@@ -19907,7 +20641,8 @@ TreeListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
19907
20641
  RowFilterModule,
19908
20642
  FilterMenuModule,
19909
20643
  ResizeSensorModule,
19910
- ColumnMenuModule], exports: [TreeListComponent,
20644
+ ColumnMenuModule,
20645
+ DragAndDropModule$1], exports: [TreeListComponent,
19911
20646
  ToolbarTemplateDirective,
19912
20647
  ToolbarComponent,
19913
20648
  TreeListSpacerComponent,
@@ -19919,7 +20654,7 @@ TreeListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
19919
20654
  FlatBindingDirective,
19920
20655
  ExpandableDirective,
19921
20656
  SelectableDirective,
19922
- 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] });
20657
+ 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] });
19923
20658
  TreeListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListModule, imports: [[
19924
20659
  CommonModule,
19925
20660
  SharedModule,
@@ -19929,7 +20664,8 @@ TreeListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
19929
20664
  RowFilterModule,
19930
20665
  FilterMenuModule,
19931
20666
  ResizeSensorModule,
19932
- ColumnMenuModule
20667
+ ColumnMenuModule,
20668
+ DragAndDropModule$1
19933
20669
  ]] });
19934
20670
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListModule, decorators: [{
19935
20671
  type: NgModule,
@@ -19945,7 +20681,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
19945
20681
  RowFilterModule,
19946
20682
  FilterMenuModule,
19947
20683
  ResizeSensorModule,
19948
- ColumnMenuModule
20684
+ ColumnMenuModule,
20685
+ DragAndDropModule$1
19949
20686
  ]
19950
20687
  }]
19951
20688
  }] });
@@ -20822,5 +21559,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
20822
21559
  * Generated bundle index. Do not edit.
20823
21560
  */
20824
21561
 
20825
- 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 };
21562
+ 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 };
20826
21563