@progress/kendo-angular-grid 19.3.0-develop.4 → 19.3.0-develop.41

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 (120) hide show
  1. package/columns/columns-container.d.ts +2 -0
  2. package/common/data-layout-mode.d.ts +21 -0
  3. package/common/grid-col-size.d.ts +13 -0
  4. package/common/provider.service.d.ts +2 -0
  5. package/common/toolbar-tool-base.directive.d.ts +1 -0
  6. package/data/data-mapping.service.d.ts +3 -1
  7. package/directives.d.ts +7 -4
  8. package/editing/toolbar-editing-tool-base.directive.d.ts +3 -2
  9. package/editing-directives/editing-directive-base.d.ts +3 -0
  10. package/editing-directives/in-cell-editing.directive.d.ts +1 -1
  11. package/editing-directives/reactive-editing.directive.d.ts +1 -1
  12. package/editing-directives/template-editing.directive.d.ts +1 -1
  13. package/esm2022/adaptiveness/adaptive-renderer.component.mjs +1 -2
  14. package/esm2022/column-menu/column-chooser.component.mjs +1 -1
  15. package/esm2022/column-menu/column-list.component.mjs +8 -7
  16. package/esm2022/column-menu/column-menu-item.directive.mjs +1 -1
  17. package/esm2022/column-menu/column-menu.component.mjs +1 -1
  18. package/esm2022/columns/column-base.mjs +4 -4
  19. package/esm2022/columns/column.component.mjs +1 -1
  20. package/esm2022/columns/columns-container.mjs +3 -0
  21. package/esm2022/common/column-info.service.mjs +1 -1
  22. package/esm2022/common/data-layout-mode.mjs +5 -0
  23. package/esm2022/common/grid-col-size.mjs +5 -0
  24. package/esm2022/common/provider.service.mjs +1 -0
  25. package/esm2022/common/toolbar-tool-base.directive.mjs +6 -2
  26. package/esm2022/data/data-mapping.service.mjs +14 -3
  27. package/esm2022/directives.mjs +8 -1
  28. package/esm2022/editing/form/form-formfield.component.mjs +2 -2
  29. package/esm2022/editing/toolbar-editing-tool-base.directive.mjs +5 -0
  30. package/esm2022/editing-directives/editing-directive-base.mjs +17 -2
  31. package/esm2022/editing-directives/in-cell-editing.directive.mjs +5 -3
  32. package/esm2022/editing-directives/reactive-editing.directive.mjs +1 -1
  33. package/esm2022/editing-directives/template-editing.directive.mjs +1 -1
  34. package/esm2022/filtering/cell/boolean-filter-cell.component.mjs +1 -1
  35. package/esm2022/filtering/cell/date-filter-cell.component.mjs +1 -1
  36. package/esm2022/filtering/cell/filter-cell-operators.component.mjs +3 -4
  37. package/esm2022/filtering/cell/numeric-filter-cell.component.mjs +1 -1
  38. package/esm2022/filtering/cell/string-filter-cell.component.mjs +1 -1
  39. package/esm2022/filtering/filter-row.component.mjs +6 -3
  40. package/esm2022/filtering/menu/boolean-filter-menu.component.mjs +1 -2
  41. package/esm2022/filtering/menu/date-filter-menu-input.component.mjs +1 -1
  42. package/esm2022/filtering/menu/date-filter-menu.component.mjs +1 -1
  43. package/esm2022/filtering/menu/filter-menu-dropdownlist.directive.mjs +1 -1
  44. package/esm2022/filtering/menu/filter-menu-input-wrapper.component.mjs +1 -1
  45. package/esm2022/filtering/menu/filter-menu.component.mjs +1 -1
  46. package/esm2022/filtering/menu/numeric-filter-menu-input.component.mjs +1 -1
  47. package/esm2022/filtering/menu/numeric-filter-menu.component.mjs +1 -1
  48. package/esm2022/filtering/menu/string-filter-menu-input.component.mjs +1 -1
  49. package/esm2022/filtering/menu/string-filter-menu.component.mjs +1 -1
  50. package/esm2022/grid.component.mjs +191 -39
  51. package/esm2022/grid.module.mjs +103 -100
  52. package/esm2022/grouping/group-header.component.mjs +39 -4
  53. package/esm2022/grouping/group-panel.component.mjs +13 -8
  54. package/esm2022/highlight/highlight-item.mjs +5 -0
  55. package/esm2022/highlight/highlight.directive.mjs +132 -0
  56. package/esm2022/index.mjs +4 -0
  57. package/esm2022/localization/messages.mjs +57 -3
  58. package/esm2022/navigation/navigation-cursor.mjs +7 -1
  59. package/esm2022/navigation/navigation-metadata.mjs +3 -1
  60. package/esm2022/navigation/navigation.service.mjs +162 -16
  61. package/esm2022/navigation/toolbar-tool-name.mjs +2 -1
  62. package/esm2022/package-metadata.mjs +2 -2
  63. package/esm2022/pdf/export-element.mjs +14 -5
  64. package/esm2022/pdf/pdf.component.mjs +3 -1
  65. package/esm2022/rendering/cell.component.mjs +466 -188
  66. package/esm2022/rendering/common/col-group.component.mjs +21 -7
  67. package/esm2022/rendering/details-expand.directive.mjs +5 -2
  68. package/esm2022/rendering/footer/footer.component.mjs +117 -54
  69. package/esm2022/rendering/header/header.component.mjs +13 -9
  70. package/esm2022/rendering/list.component.mjs +19 -12
  71. package/esm2022/rendering/loading-template.directive.mjs +1 -0
  72. package/esm2022/rendering/table-body.component.mjs +394 -174
  73. package/esm2022/rendering/toolbar/tools/ai-assistant/ai-assistant.component.mjs +305 -0
  74. package/esm2022/rendering/toolbar/tools/ai-assistant/ai-tool.directive.mjs +269 -0
  75. package/esm2022/rendering/toolbar/tools/ai-assistant/utils.mjs +74 -0
  76. package/esm2022/rendering/toolbar/tools/column-chooser-tool.directive.mjs +0 -3
  77. package/esm2022/rendering/toolbar/tools/group-toolbar-tool.component.mjs +11 -9
  78. package/esm2022/rendering/toolbar/tools/select-all-command-tool.directive.mjs +93 -0
  79. package/esm2022/row-reordering/row-reorder.service.mjs +2 -2
  80. package/esm2022/row-reordering/utils.mjs +6 -4
  81. package/esm2022/selection/cell-selection.service.mjs +6 -3
  82. package/esm2022/selection/pair-set.mjs +87 -10
  83. package/esm2022/selection/selection-checkbox.directive.mjs +1 -1
  84. package/esm2022/selection/selection.directive.mjs +1 -1
  85. package/esm2022/utils.mjs +0 -4
  86. package/fesm2022/progress-kendo-angular-grid.mjs +2568 -642
  87. package/filtering/filter-row.component.d.ts +1 -0
  88. package/grid.component.d.ts +29 -1
  89. package/grid.module.d.ts +102 -99
  90. package/grouping/group-header.component.d.ts +1 -0
  91. package/grouping/group-panel.component.d.ts +1 -1
  92. package/highlight/highlight-item.d.ts +17 -0
  93. package/highlight/highlight.directive.d.ts +56 -0
  94. package/index.d.ts +8 -1
  95. package/localization/messages.d.ts +39 -3
  96. package/navigation/focus-group.d.ts +1 -1
  97. package/navigation/navigation-metadata.d.ts +2 -1
  98. package/navigation/navigation.service.d.ts +6 -0
  99. package/navigation/toolbar-tool-name.d.ts +1 -0
  100. package/package.json +22 -21
  101. package/rendering/cell.component.d.ts +30 -15
  102. package/rendering/common/col-group.component.d.ts +5 -0
  103. package/rendering/details-expand.directive.d.ts +5 -2
  104. package/rendering/footer/footer.component.d.ts +4 -1
  105. package/rendering/header/header.component.d.ts +1 -0
  106. package/rendering/list.component.d.ts +4 -1
  107. package/rendering/loading-template.directive.d.ts +1 -0
  108. package/rendering/table-body.component.d.ts +3 -1
  109. package/rendering/toolbar/tools/ai-assistant/ai-assistant.component.d.ts +49 -0
  110. package/rendering/toolbar/tools/ai-assistant/ai-tool.directive.d.ts +115 -0
  111. package/rendering/toolbar/tools/ai-assistant/utils.d.ts +124 -0
  112. package/rendering/toolbar/tools/column-chooser-tool.directive.d.ts +0 -1
  113. package/rendering/toolbar/tools/select-all-command-tool.directive.d.ts +36 -0
  114. package/row-reordering/row-reorder.service.d.ts +1 -1
  115. package/row-reordering/utils.d.ts +1 -1
  116. package/schematics/ngAdd/index.js +4 -4
  117. package/selection/cell-selection.service.d.ts +1 -0
  118. package/selection/pair-set.d.ts +36 -8
  119. package/selection/selection.directive.d.ts +1 -1
  120. package/utils.d.ts +0 -4
@@ -142,6 +142,42 @@ export class GridMessages extends ComponentMessages {
142
142
  * [See example](slug:globalization_grid#toc-custom-messages).
143
143
  */
144
144
  booleanFilterCellLabel;
145
+ /**
146
+ * The text of the AI Assistant Apply button.
147
+ */
148
+ aiAssistantApplyButtonText;
149
+ /**
150
+ * The text of the AI Assistant toolbar tool.
151
+ */
152
+ aiAssistantToolbarToolText;
153
+ /**
154
+ * The text of the AI Assistant Window title.
155
+ */
156
+ aiAssistantWindowTitle;
157
+ /**
158
+ * The title of the AI Assistant Window close button.
159
+ */
160
+ aiAssistantWindowCloseTitle;
161
+ /**
162
+ * The title of the AI Assistant Prompt Output Card.
163
+ */
164
+ aiAssistantOutputCardTitle;
165
+ /**
166
+ * The success message dispayed in the AI Assistant Prompt Output Card's body.
167
+ */
168
+ aiAssistantOutputCardBodyContent;
169
+ /**
170
+ * The title of the AI Assistant Window maximize button.
171
+ */
172
+ aiAssistantWindowMaximizeTitle;
173
+ /**
174
+ * The title of the AI Assistant Window minimize button.
175
+ */
176
+ aiAssistantWindowMinimizeTitle;
177
+ /**
178
+ * The title of the AI Assistant Window restore button.
179
+ */
180
+ aiAssistantWindowRestoreTitle;
145
181
  /**
146
182
  * Sets the text for the `Equal` (**Is equal to**) filter operator.
147
183
  */
@@ -383,11 +419,11 @@ export class GridMessages extends ComponentMessages {
383
419
  */
384
420
  columnsReset;
385
421
  /**
386
- * Sets the title for the expand icon of detail rows.
422
+ * Sets the title for the expand icon of detail rows. Applies also to the expand button text in stacked mode.
387
423
  */
388
424
  detailExpand;
389
425
  /**
390
- * Sets the title for the collapse icon of detail rows.
426
+ * Sets the title for the collapse icon of detail rows. Applies also to the collapse button text in stacked mode.
391
427
  */
392
428
  detailCollapse;
393
429
  /**
@@ -538,7 +574,7 @@ export class GridMessages extends ComponentMessages {
538
574
  */
539
575
  externalEditingCancelText;
540
576
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
541
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: GridMessages, selector: "kendo-grid-messages-base", inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItems: "pagerItems", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", pagerInputLabel: "pagerInputLabel", pagerSelectPage: "pagerSelectPage", filter: "filter", filterInputLabel: "filterInputLabel", filterMenuTitle: "filterMenuTitle", filterMenuOperatorsDropDownLabel: "filterMenuOperatorsDropDownLabel", filterMenuLogicDropDownLabel: "filterMenuLogicDropDownLabel", filterCellOperatorLabel: "filterCellOperatorLabel", booleanFilterCellLabel: "booleanFilterCellLabel", 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", adaptiveFilterOperatorsTitle: "adaptiveFilterOperatorsTitle", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", adaptiveCloseButtonTitle: "adaptiveCloseButtonTitle", adaptiveBackButtonTitle: "adaptiveBackButtonTitle", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", filterToolbarToolText: "filterToolbarToolText", loading: "loading", gridLabel: "gridLabel", columnMenu: "columnMenu", setColumnPosition: "setColumnPosition", columns: "columns", columnsSubtitle: "columnsSubtitle", adaptiveFilterTitle: "adaptiveFilterTitle", adaptiveSortTitle: "adaptiveSortTitle", adaptiveGroupTitle: "adaptiveGroupTitle", filterClearAllButton: "filterClearAllButton", groupClearButton: "groupClearButton", sortClearButton: "sortClearButton", sortDoneButton: "sortDoneButton", groupDoneButton: "groupDoneButton", lock: "lock", unlock: "unlock", stick: "stick", unstick: "unstick", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", autosizeThisColumn: "autosizeThisColumn", autosizeAllColumns: "autosizeAllColumns", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", sortToolbarToolText: "sortToolbarToolText", columnsApply: "columnsApply", columnsReset: "columnsReset", detailExpand: "detailExpand", detailCollapse: "detailCollapse", filterDateToday: "filterDateToday", filterDateToggle: "filterDateToggle", filterNumericDecrement: "filterNumericDecrement", filterNumericIncrement: "filterNumericIncrement", selectionCheckboxLabel: "selectionCheckboxLabel", selectAllCheckboxLabel: "selectAllCheckboxLabel", groupCollapse: "groupCollapse", groupExpand: "groupExpand", topToolbarLabel: "topToolbarLabel", bottomToolbarLabel: "bottomToolbarLabel", editToolbarToolText: "editToolbarToolText", saveToolbarToolText: "saveToolbarToolText", addToolbarToolText: "addToolbarToolText", cancelToolbarToolText: "cancelToolbarToolText", removeToolbarToolText: "removeToolbarToolText", excelExportToolbarToolText: "excelExportToolbarToolText", pdfExportToolbarToolText: "pdfExportToolbarToolText", groupPanelLabel: "groupPanelLabel", dragRowHandleLabel: "dragRowHandleLabel", columnMenuFilterTabTitle: "columnMenuFilterTabTitle", columnMenuGeneralTabTitle: "columnMenuGeneralTabTitle", columnMenuColumnsTabTitle: "columnMenuColumnsTabTitle", groupChipMenuPrevious: "groupChipMenuPrevious", groupChipMenuNext: "groupChipMenuNext", groupToolbarToolText: "groupToolbarToolText", formValidationErrorText: "formValidationErrorText", removeConfirmationDialogTitle: "removeConfirmationDialogTitle", removeConfirmationDialogContent: "removeConfirmationDialogContent", removeConfirmationDialogConfirmText: "removeConfirmationDialogConfirmText", removeConfirmationDialogRejectText: "removeConfirmationDialogRejectText", externalEditingTitle: "externalEditingTitle", externalEditingAddTitle: "externalEditingAddTitle", externalEditingSaveText: "externalEditingSaveText", externalEditingCancelText: "externalEditingCancelText" }, usesInheritance: true, ngImport: i0 });
577
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: GridMessages, selector: "kendo-grid-messages-base", inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItems: "pagerItems", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", pagerInputLabel: "pagerInputLabel", pagerSelectPage: "pagerSelectPage", filter: "filter", filterInputLabel: "filterInputLabel", filterMenuTitle: "filterMenuTitle", filterMenuOperatorsDropDownLabel: "filterMenuOperatorsDropDownLabel", filterMenuLogicDropDownLabel: "filterMenuLogicDropDownLabel", filterCellOperatorLabel: "filterCellOperatorLabel", booleanFilterCellLabel: "booleanFilterCellLabel", aiAssistantApplyButtonText: "aiAssistantApplyButtonText", aiAssistantToolbarToolText: "aiAssistantToolbarToolText", aiAssistantWindowTitle: "aiAssistantWindowTitle", aiAssistantWindowCloseTitle: "aiAssistantWindowCloseTitle", aiAssistantOutputCardTitle: "aiAssistantOutputCardTitle", aiAssistantOutputCardBodyContent: "aiAssistantOutputCardBodyContent", aiAssistantWindowMaximizeTitle: "aiAssistantWindowMaximizeTitle", aiAssistantWindowMinimizeTitle: "aiAssistantWindowMinimizeTitle", aiAssistantWindowRestoreTitle: "aiAssistantWindowRestoreTitle", 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", adaptiveFilterOperatorsTitle: "adaptiveFilterOperatorsTitle", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", adaptiveCloseButtonTitle: "adaptiveCloseButtonTitle", adaptiveBackButtonTitle: "adaptiveBackButtonTitle", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", filterToolbarToolText: "filterToolbarToolText", loading: "loading", gridLabel: "gridLabel", columnMenu: "columnMenu", setColumnPosition: "setColumnPosition", columns: "columns", columnsSubtitle: "columnsSubtitle", adaptiveFilterTitle: "adaptiveFilterTitle", adaptiveSortTitle: "adaptiveSortTitle", adaptiveGroupTitle: "adaptiveGroupTitle", filterClearAllButton: "filterClearAllButton", groupClearButton: "groupClearButton", sortClearButton: "sortClearButton", sortDoneButton: "sortDoneButton", groupDoneButton: "groupDoneButton", lock: "lock", unlock: "unlock", stick: "stick", unstick: "unstick", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", autosizeThisColumn: "autosizeThisColumn", autosizeAllColumns: "autosizeAllColumns", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", sortToolbarToolText: "sortToolbarToolText", columnsApply: "columnsApply", columnsReset: "columnsReset", detailExpand: "detailExpand", detailCollapse: "detailCollapse", filterDateToday: "filterDateToday", filterDateToggle: "filterDateToggle", filterNumericDecrement: "filterNumericDecrement", filterNumericIncrement: "filterNumericIncrement", selectionCheckboxLabel: "selectionCheckboxLabel", selectAllCheckboxLabel: "selectAllCheckboxLabel", groupCollapse: "groupCollapse", groupExpand: "groupExpand", topToolbarLabel: "topToolbarLabel", bottomToolbarLabel: "bottomToolbarLabel", editToolbarToolText: "editToolbarToolText", saveToolbarToolText: "saveToolbarToolText", addToolbarToolText: "addToolbarToolText", cancelToolbarToolText: "cancelToolbarToolText", removeToolbarToolText: "removeToolbarToolText", excelExportToolbarToolText: "excelExportToolbarToolText", pdfExportToolbarToolText: "pdfExportToolbarToolText", groupPanelLabel: "groupPanelLabel", dragRowHandleLabel: "dragRowHandleLabel", columnMenuFilterTabTitle: "columnMenuFilterTabTitle", columnMenuGeneralTabTitle: "columnMenuGeneralTabTitle", columnMenuColumnsTabTitle: "columnMenuColumnsTabTitle", groupChipMenuPrevious: "groupChipMenuPrevious", groupChipMenuNext: "groupChipMenuNext", groupToolbarToolText: "groupToolbarToolText", formValidationErrorText: "formValidationErrorText", removeConfirmationDialogTitle: "removeConfirmationDialogTitle", removeConfirmationDialogContent: "removeConfirmationDialogContent", removeConfirmationDialogConfirmText: "removeConfirmationDialogConfirmText", removeConfirmationDialogRejectText: "removeConfirmationDialogRejectText", externalEditingTitle: "externalEditingTitle", externalEditingAddTitle: "externalEditingAddTitle", externalEditingSaveText: "externalEditingSaveText", externalEditingCancelText: "externalEditingCancelText" }, usesInheritance: true, ngImport: i0 });
542
578
  }
543
579
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridMessages, decorators: [{
544
580
  type: Directive,
@@ -588,6 +624,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
588
624
  type: Input
589
625
  }], booleanFilterCellLabel: [{
590
626
  type: Input
627
+ }], aiAssistantApplyButtonText: [{
628
+ type: Input
629
+ }], aiAssistantToolbarToolText: [{
630
+ type: Input
631
+ }], aiAssistantWindowTitle: [{
632
+ type: Input
633
+ }], aiAssistantWindowCloseTitle: [{
634
+ type: Input
635
+ }], aiAssistantOutputCardTitle: [{
636
+ type: Input
637
+ }], aiAssistantOutputCardBodyContent: [{
638
+ type: Input
639
+ }], aiAssistantWindowMaximizeTitle: [{
640
+ type: Input
641
+ }], aiAssistantWindowMinimizeTitle: [{
642
+ type: Input
643
+ }], aiAssistantWindowRestoreTitle: [{
644
+ type: Input
591
645
  }], filterEqOperator: [{
592
646
  type: Input
593
647
  }], filterNotEqOperator: [{
@@ -13,7 +13,7 @@ export class NavigationCursor {
13
13
  set metadata(value) {
14
14
  this._metadata = value;
15
15
  if (isPresent(value)) {
16
- const newActiveCol = value.hasDetailTemplate ? 1 : 0;
16
+ const newActiveCol = value.hasDetailTemplate && !this.metadata.isStacked ? 1 : 0;
17
17
  const shouldChange = this.activeRow < value.headerRows && this.activeCol === 0;
18
18
  if (shouldChange && newActiveCol !== this.activeCol) {
19
19
  this.activeCol = newActiveCol;
@@ -133,6 +133,9 @@ export class NavigationCursor {
133
133
  (this.metadata.hasDetailTemplate && (!row || !row.groupItem) ? 1 : 0);
134
134
  }
135
135
  offsetCol(offset) {
136
+ if (this.metadata.isStacked) {
137
+ return false;
138
+ }
136
139
  const prevRow = this.model.findRow(this.virtualRow);
137
140
  const lastIndex = this.lastCellIndex(prevRow);
138
141
  const virtualCol = this.virtualCol;
@@ -212,6 +215,9 @@ export class NavigationCursor {
212
215
  if (!cell && (this.metadata.virtualColumns || this.metadata.hasDetailTemplate)) {
213
216
  return this.activate(this.virtualRow + offset, this.virtualCol);
214
217
  }
218
+ if (!cell) {
219
+ return false;
220
+ }
215
221
  this.virtualRow = cell.rowIndex;
216
222
  return this.activate(this.virtualRow, cell.colIndex);
217
223
  }
@@ -14,11 +14,12 @@ export class NavigationMetadata {
14
14
  gridElement;
15
15
  virtualColumns;
16
16
  columns;
17
+ isStacked;
17
18
  get maxLogicalRowIndex() {
18
19
  const dataRows = this.hasDetailTemplate ? this.dataRows * 2 : this.dataRows;
19
20
  return this.headerRows + dataRows - 1;
20
21
  }
21
- constructor(dataRows, headerRows, isVirtual, hasPager, hasDetailTemplate, gridElement, virtualColumns, columns) {
22
+ constructor(dataRows, headerRows, isVirtual, hasPager, hasDetailTemplate, gridElement, virtualColumns, columns, isStacked) {
22
23
  this.dataRows = dataRows;
23
24
  this.headerRows = headerRows;
24
25
  this.isVirtual = isVirtual;
@@ -27,5 +28,6 @@ export class NavigationMetadata {
27
28
  this.gridElement = gridElement;
28
29
  this.virtualColumns = virtualColumns;
29
30
  this.columns = columns;
31
+ this.isStacked = isStacked;
30
32
  }
31
33
  }
@@ -11,7 +11,7 @@ import { GridFocusableElement } from './grid-focusable-element';
11
11
  import { NavigationCursor } from './navigation-cursor';
12
12
  import { NavigationModel } from './navigation-model';
13
13
  import { DomEventsService } from '../common/dom-events.service';
14
- import { isDocumentAvailable, isPresent, Keys } from '@progress/kendo-angular-common';
14
+ import { hasClasses, isDocumentAvailable, isPresent, Keys, normalizeNumpadKeys } from '@progress/kendo-angular-common';
15
15
  import { EditService } from '../editing/edit.service';
16
16
  import { GroupsService } from '../grouping/groups.service';
17
17
  import { PagerContextService } from '@progress/kendo-angular-pager';
@@ -212,7 +212,12 @@ export class NavigationService {
212
212
  // Closing the editor will not always trigger focusout in Firefox.
213
213
  // To get around this, we ensure that the cell is closed after editing.
214
214
  this.editService.changes.pipe(filter(e => e.action !== 'edit' && this.mode === 2 /* NavigationMode.Content */), filter((e) => e.action === 'cellClose' && !e.prevented), switchMap(onStable))
215
- .subscribe(() => this.leaveCell()));
215
+ .subscribe((e) => {
216
+ const isInStackedCell = closest(e.originalEvent?.target, (el) => hasClasses(el, 'k-grid-stack-content'));
217
+ if (!isInStackedCell) {
218
+ this.leaveCell();
219
+ }
220
+ }));
216
221
  this.subs.add(this.pagerContextService.pageChange
217
222
  .subscribe(() => this.cursor.reset(0, 0)));
218
223
  this.subs.add(this.domEvents.keydown
@@ -221,10 +226,18 @@ export class NavigationService {
221
226
  .subscribe(() => {
222
227
  this.isShiftPressed = false;
223
228
  }));
224
- this.subs.add(this.domEvents.keydown.pipe(filter(args => args.keyCode === Keys.Tab && this.mode === 2 /* NavigationMode.Content */), switchMapTo(this.domEvents.focusOut.pipe(takeUntil(
229
+ this.subs.add(this.domEvents.keydown.pipe(filter(args => args.code === Keys.Tab && this.mode === 2 /* NavigationMode.Content */), switchMapTo(this.domEvents.focusOut.pipe(takeUntil(
225
230
  // Timeout if focusOut doesn't fire very soon
226
231
  interval(0).pipe(take(1))))))
227
232
  .subscribe(() => this.onTabout()));
233
+ this.subs.add(this.domEvents.cellClick
234
+ .subscribe(() => {
235
+ if (this.isStackedMode) {
236
+ const stackedCells = this.activeCell.focusGroup.focusableChildren;
237
+ const currFocusedIndex = stackedCells.findIndex(el => el.hasFocus() || el.hostElement?.nativeElement === document.activeElement);
238
+ currFocusedIndex > -1 && (this.stackedFocusedCellIndex = currFocusedIndex);
239
+ }
240
+ }));
228
241
  if (this.focusableParent) {
229
242
  const element = new GridFocusableElement(this);
230
243
  this.focusableParent.registerElement(element);
@@ -394,7 +407,7 @@ export class NavigationService {
394
407
  success = fwd ? this.cursor.moveDown(1) : this.cursor.moveUp(1);
395
408
  if (success) {
396
409
  const row = this.cursor.row;
397
- const colIdx = fwd ? 0 : this.cursor.lastCellIndex(row);
410
+ const colIdx = fwd || this.isStackedMode ? 0 : this.cursor.lastCellIndex(row);
398
411
  this.cursor.reset(row.index, colIdx);
399
412
  }
400
413
  }
@@ -412,6 +425,12 @@ export class NavigationService {
412
425
  if (!cell) {
413
426
  return;
414
427
  }
428
+ if (this.tableCellEntered && this.isStackedMode) {
429
+ this.stackedCellEntered = true;
430
+ }
431
+ else {
432
+ this.tableCellEntered = true;
433
+ }
415
434
  const group = cell.focusGroup;
416
435
  const focusable = group && group.canFocus();
417
436
  this.mode = focusable ? 2 /* NavigationMode.Content */ : 1 /* NavigationMode.Cursor */;
@@ -419,6 +438,9 @@ export class NavigationService {
419
438
  if (focusable) {
420
439
  this.activateRow();
421
440
  group.focus();
441
+ if (this.isStackedMode && this.stackedFocusedCellIndex === -1) {
442
+ this.stackedFocusedCellIndex = 0;
443
+ }
422
444
  }
423
445
  }
424
446
  leaveCell() {
@@ -426,11 +448,22 @@ export class NavigationService {
426
448
  if (!cell) {
427
449
  return;
428
450
  }
451
+ if (this.tableCellEntered) {
452
+ if (this.stackedCellEntered) {
453
+ this.stackedCellEntered = false;
454
+ }
455
+ else {
456
+ this.tableCellEntered = false;
457
+ }
458
+ }
429
459
  const group = cell.focusGroup;
430
460
  const focusable = group && group.canFocus();
431
461
  if (!focusable) {
432
462
  this.deactivateElements();
433
463
  }
464
+ if (this.isStackedMode && this.stackedFocusedCellIndex > -1) {
465
+ this.stackedFocusedCellIndex = -1;
466
+ }
434
467
  this.mode = 1 /* NavigationMode.Cursor */;
435
468
  this.cursor.announce();
436
469
  }
@@ -445,11 +478,11 @@ export class NavigationService {
445
478
  .forEach(cell => cell.focusGroup && cell.focusGroup.activate());
446
479
  }
447
480
  moveCursorFwd() {
448
- this.lastCellRowIndex = this.activeCell.rowIndex;
481
+ this.lastCellRowIndex = this.activeCell?.rowIndex;
449
482
  return this.ctx.localization.rtl ? this.cursor.moveLeft() : this.cursor.moveRight();
450
483
  }
451
484
  moveCursorBwd() {
452
- this.lastCellRowIndex = this.activeCell.rowIndex;
485
+ this.lastCellRowIndex = this.activeCell?.rowIndex;
453
486
  return this.ctx.localization.rtl ? this.cursor.moveRight() : this.cursor.moveLeft();
454
487
  }
455
488
  onCursorKeydown(args) {
@@ -468,14 +501,16 @@ export class NavigationService {
468
501
  return;
469
502
  }
470
503
  const row = this.cursor.row;
471
- const dir = args.keyCode === Keys.ArrowDown ? 'Down' : 'Up';
472
- const right = args.keyCode === Keys.ArrowRight;
473
- const isArrowKey = args.code === 'ArrowDown' || args.code === 'ArrowUp' || args.code === 'ArrowLeft' || args.code === 'ArrowRight';
504
+ // on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
505
+ const code = normalizeNumpadKeys(args);
506
+ const dir = code === Keys.ArrowDown ? 'Down' : 'Up';
507
+ const right = code === Keys.ArrowRight;
508
+ const isArrowKey = code === Keys.ArrowDown || code === Keys.ArrowUp || code === Keys.ArrowLeft || code === Keys.ArrowRight;
474
509
  if (!this.isShiftPressed && args.shiftKey && isArrowKey) {
475
510
  startNewSelection = true;
476
511
  this.isShiftPressed = true;
477
512
  }
478
- switch (args.keyCode) {
513
+ switch (code) {
479
514
  case Keys.ArrowDown:
480
515
  case Keys.ArrowUp:
481
516
  if (rowspan > 1) {
@@ -589,6 +624,15 @@ export class NavigationService {
589
624
  break;
590
625
  case Keys.Enter:
591
626
  case Keys.F2: {
627
+ if (this.stackedCellEntered) {
628
+ if (code === Keys.F2 && row.dataRowIndex > -1) {
629
+ this.zone.run(() => {
630
+ this.editService.beginEdit(row.dataRowIndex);
631
+ });
632
+ this.enterCell();
633
+ }
634
+ break;
635
+ }
592
636
  const groupItem = row.groupItem;
593
637
  if (groupItem) {
594
638
  this.zone.run(() => this.groupsService.toggleRow(groupItem));
@@ -597,6 +641,11 @@ export class NavigationService {
597
641
  this.zone.run(() => this.detailsService.toggleRow(row.dataRowIndex, row.dataItem));
598
642
  }
599
643
  else {
644
+ if (code === Keys.F2 && row.dataRowIndex > -1) {
645
+ this.zone.run(() => {
646
+ this.editService.beginEdit(row.dataRowIndex);
647
+ });
648
+ }
600
649
  this.enterCell();
601
650
  if (!this.cursor.cell.focusGroup.isNavigable()) {
602
651
  preventDefault = true;
@@ -604,6 +653,17 @@ export class NavigationService {
604
653
  }
605
654
  break;
606
655
  }
656
+ case Keys.Backspace:
657
+ case Keys.Delete:
658
+ if (this.activeRow && this.activeRow.dataRowIndex >= 0 && this.activeRow.dataItem) {
659
+ if (!row.groupItem && !this.cursor.cell.detailExpandCell) {
660
+ this.zone.run(() => {
661
+ this.editService.remove(this.activeRow.dataRowIndex);
662
+ });
663
+ preventDefault = true;
664
+ }
665
+ }
666
+ break;
607
667
  default:
608
668
  if (!args.ctrlKey && !args.altKey && isPrintableCharacter(args.key)) {
609
669
  this.enterCell();
@@ -625,13 +685,22 @@ export class NavigationService {
625
685
  if (!this.onCellKeydown(args)) {
626
686
  return;
627
687
  }
628
- const confirm = !args.defaultPrevented && args.keyCode === Keys.Enter && isTextInput(args.target);
629
- if (args.keyCode === Keys.Escape || args.keyCode === Keys.F2 || confirm) {
688
+ // on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
689
+ const code = normalizeNumpadKeys(args);
690
+ const confirm = !args.defaultPrevented && code === Keys.Enter && isTextInput(args.target);
691
+ if (code === Keys.Escape || code === Keys.F2 || confirm) {
692
+ if (this.tableCellEntered && code === Keys.F2 && this.activeRow.dataRowIndex > -1) {
693
+ this.zone.run(() => {
694
+ this.editService.beginEdit(this.activeRow.dataRowIndex);
695
+ });
696
+ this.enterCell();
697
+ return;
698
+ }
630
699
  this.leaveCell();
631
700
  this.cursor.reset();
632
701
  args.stopPropagation();
633
702
  }
634
- else if (isNavigationKey(args.keyCode) && this.cursor.cell.focusGroup.isNavigable()) {
703
+ else if (isNavigationKey(code) && this.cursor.cell.focusGroup.isNavigable()) {
635
704
  this.onCursorKeydown(args);
636
705
  if (args.defaultPrevented) {
637
706
  this.leaveCell();
@@ -640,9 +709,11 @@ export class NavigationService {
640
709
  }
641
710
  onCellKeydown(args) {
642
711
  if (this.editService.isEditingCell()) {
643
- const confirm = args.keyCode === Keys.Enter;
644
- const cancel = args.keyCode === Keys.Escape;
645
- const navigate = isNavigationKey(args.keyCode);
712
+ // on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
713
+ const code = normalizeNumpadKeys(args);
714
+ const confirm = code === Keys.Enter;
715
+ const cancel = code === Keys.Escape;
716
+ const navigate = isNavigationKey(code);
646
717
  if (confirm) {
647
718
  this.editService.closeCell(args);
648
719
  }
@@ -695,6 +766,12 @@ export class NavigationService {
695
766
  this.cursor.announce();
696
767
  }
697
768
  onKeydown(args) {
769
+ if (this.isStackedMode) {
770
+ this.handleStackedKeydown(args);
771
+ if (args.defaultPrevented) {
772
+ return;
773
+ }
774
+ }
698
775
  if (this.mode === 1 /* NavigationMode.Cursor */) {
699
776
  this.onCursorKeydown(args);
700
777
  }
@@ -783,6 +860,75 @@ export class NavigationService {
783
860
  const offset = direction === 'Up' ? Math.abs(this.lastCellRowIndex - this.activeRowIndex) : (this.activeRowIndex + cellRowspan - this.lastCellRowIndex - 1);
784
861
  return offset;
785
862
  }
863
+ get isStackedMode() {
864
+ return this.ctx?.grid?.isStacked;
865
+ }
866
+ handleStackedKeydown(args) {
867
+ const target = args.target;
868
+ const stackedCell = closest(target, (el) => hasClasses(el, 'k-grid-stack-cell'));
869
+ const tableCell = closest(target, (el) => hasClasses(el, 'k-table-td'));
870
+ const isInStackedCell = closest(target, (el) => hasClasses(el, 'k-grid-stack-content'));
871
+ const isInCommandCell = closest(target, (el) => hasClasses(el, 'k-command-cell'));
872
+ if (!stackedCell || !tableCell) {
873
+ return;
874
+ }
875
+ if (args.code === Keys.Tab) {
876
+ this.handleStackedTabNavigation(args);
877
+ }
878
+ else if (args.code === Keys.Backspace || args.code === Keys.Delete) {
879
+ if (this.stackedCellEntered || this.editService.isEditing()) {
880
+ return;
881
+ }
882
+ if (this.activeRow && this.activeRow.dataRowIndex >= 0 && this.activeRow.dataItem) {
883
+ const row = this.cursor.row;
884
+ if (!row.groupItem && !this.cursor.cell.detailExpandCell) {
885
+ this.zone.run(() => {
886
+ this.editService.remove(this.activeRow.dataRowIndex);
887
+ });
888
+ args.preventDefault();
889
+ }
890
+ }
891
+ }
892
+ else if (isInStackedCell && (args.code === Keys.Enter || args.code === Keys.NumpadEnter || args.code === Keys.Escape)) {
893
+ this.editService.closeCell(args);
894
+ this.activeCell.focusGroup.activate();
895
+ this.activeCell.focusGroup.focusableChildren[this.stackedFocusedCellIndex]?.focus();
896
+ if (!isInCommandCell) {
897
+ args.preventDefault();
898
+ }
899
+ }
900
+ }
901
+ stackedFocusedCellIndex = -1;
902
+ tableCellEntered = false;
903
+ stackedCellEntered = false;
904
+ handleStackedTabNavigation(args) {
905
+ if (!isPresent(this.activeCell.focusGroup)) {
906
+ return;
907
+ }
908
+ if (this.stackedFocusedCellIndex === -1) {
909
+ return;
910
+ }
911
+ const stackedCells = this.activeCell.focusGroup.focusableChildren;
912
+ const currFocusedIndex = stackedCells.findIndex(el => el.hasFocus() || el.hostElement?.nativeElement === document.activeElement);
913
+ if (args.shiftKey) {
914
+ if (currFocusedIndex === 0) {
915
+ args.stopImmediatePropagation();
916
+ args.preventDefault();
917
+ }
918
+ else {
919
+ this.stackedFocusedCellIndex = currFocusedIndex - 1;
920
+ }
921
+ }
922
+ else {
923
+ if (currFocusedIndex === stackedCells.length - 1) {
924
+ args.stopImmediatePropagation();
925
+ args.preventDefault();
926
+ }
927
+ else {
928
+ this.stackedFocusedCellIndex = currFocusedIndex + 1;
929
+ }
930
+ }
931
+ }
786
932
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavigationService, deps: [{ token: i0.NgZone }, { token: i1.DomEventsService }, { token: i2.PagerContextService }, { token: i3.ScrollRequestService }, { token: i4.GroupsService }, { token: i5.DetailsService }, { token: i6.FocusRoot }, { token: i7.EditService }, { token: i0.ChangeDetectorRef }, { token: i8.ContextService }, { token: i9.ColumnResizingService }, { token: i10.FocusableDirective, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
787
933
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavigationService });
788
934
  }
@@ -13,5 +13,6 @@ export const ToolbarToolName = {
13
13
  add: 'add',
14
14
  columns: 'columns',
15
15
  excelExport: 'excelExport',
16
- pdfExport: 'pdfExport'
16
+ pdfExport: 'pdfExport',
17
+ aiAssistant: 'aiAssistant'
17
18
  };
@@ -10,7 +10,7 @@ export const packageMetadata = {
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCode: 'KENDOUIANGULAR',
12
12
  productCodes: ['KENDOUIANGULAR'],
13
- publishDate: 1752065531,
14
- version: '19.3.0-develop.4',
13
+ publishDate: 1754998719,
14
+ version: '19.3.0-develop.41',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };
@@ -80,11 +80,14 @@ const createTable = (colGroups, headers, bodies, footers, size) => {
80
80
  for (let idx = 1; idx < colGroups.length; idx++) {
81
81
  appendNodes(colGroup, colGroups[idx].querySelectorAll('col'));
82
82
  }
83
- const header = createTableElement(headers);
84
83
  const body = createTableElement(bodies);
85
- setFirstCellClass(header, headers);
84
+ let header;
85
+ if (headers.length > 0) {
86
+ header = createTableElement(headers);
87
+ setFirstCellClass(header, headers);
88
+ }
86
89
  table.appendChild(colGroup);
87
- table.appendChild(header);
90
+ header && table.appendChild(header);
88
91
  table.appendChild(body);
89
92
  if (footers.length) {
90
93
  const footer = createTableElement(footers);
@@ -101,17 +104,23 @@ export const exportElement = (wrapper, size) => {
101
104
  let result;
102
105
  if (content) {
103
106
  const colGroups = [content.querySelector('colgroup')];
104
- const headers = [query.header().querySelector('thead')];
105
107
  const bodies = [content.querySelector('tbody')];
108
+ const header = query.header();
106
109
  const footer = query.footer();
110
+ const headers = [];
107
111
  const footers = [];
112
+ if (header) {
113
+ headers.push(header.querySelector('thead'));
114
+ }
108
115
  if (footer) {
109
116
  footers.push(footer.querySelector('tfoot'));
110
117
  }
111
118
  const lockedContent = query.content(true);
112
119
  if (lockedContent) {
120
+ if (headers.length > 0) {
121
+ headers.unshift(query.header(true).querySelector('thead'));
122
+ }
113
123
  colGroups.unshift(lockedContent.querySelector('colgroup'));
114
- headers.unshift(query.header(true).querySelector('thead'));
115
124
  bodies.unshift(lockedContent.querySelector('tbody'));
116
125
  if (footer) {
117
126
  footers.unshift(query.footer(true).querySelector('tfoot'));
@@ -164,7 +164,9 @@ export class PDFComponent extends PDFExportComponent {
164
164
  const overlayContent = overlayQuery.content();
165
165
  overlayContent.scrollTop = content.scrollTop;
166
166
  overlayContent.scrollLeft = content.scrollLeft;
167
- overlayQuery.header().scrollLeft = query.header().scrollLeft;
167
+ if (!this.ctx?.grid?.isStacked) {
168
+ overlayQuery.header().scrollLeft = query.header().scrollLeft;
169
+ }
168
170
  const footer = query.footer();
169
171
  if (footer) {
170
172
  overlayQuery.footer().scrollLeft = footer.scrollLeft;