@progress/kendo-angular-grid 21.0.0-develop.2 → 21.0.0-develop.20
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.
- package/codemods/utils.js +485 -327
- package/codemods/v20/grid-kendogridgroupbinding.js +6 -6
- package/codemods/v21/grid-gridtoolbaraiopenevent.js +14 -0
- package/codemods/v21/grid-gridtoolbaraipromptrequestevent.js +14 -0
- package/codemods/v21/grid-gridtoolbaraipromptsettings.js +14 -0
- package/codemods/v21/grid-gridtoolbarairequestoptions.js +14 -0
- package/codemods/v21/grid-gridtoolbarairesponseerrorevent.js +14 -0
- package/codemods/v21/grid-gridtoolbaraiwindowsettings.js +14 -0
- package/column-menu/column-chooser.component.d.ts +0 -1
- package/column-resizing/column-resizing.service.d.ts +1 -0
- package/common/id.service.d.ts +1 -0
- package/common/provider.service.d.ts +4 -0
- package/esm2022/column-menu/column-chooser.component.mjs +2 -7
- package/esm2022/column-resizing/column-resizing.service.mjs +55 -1
- package/esm2022/columns/column-base.mjs +1 -1
- package/esm2022/common/id.service.mjs +3 -0
- package/esm2022/common/provider.service.mjs +2 -0
- package/esm2022/excel/excel.component.mjs +4 -0
- package/esm2022/grid.component.mjs +36 -0
- package/esm2022/localization/messages.mjs +19 -1
- package/esm2022/navigation/navigation.service.mjs +48 -2
- package/esm2022/package-metadata.mjs +2 -2
- package/esm2022/pdf/pdf.component.mjs +6 -0
- package/esm2022/rendering/toolbar/tools/ai-assistant/ai-assistant.component.mjs +510 -25
- package/esm2022/rendering/toolbar/tools/ai-assistant/models.mjs +2 -2
- package/esm2022/row-reordering/row-reorder.service.mjs +28 -0
- package/esm2022/selection/selection-checkbox.directive.mjs +1 -1
- package/fesm2022/progress-kendo-angular-grid.mjs +715 -40
- package/grid.component.d.ts +8 -0
- package/localization/messages.d.ts +13 -1
- package/navigation/navigation.service.d.ts +1 -0
- package/package.json +58 -25
- package/rendering/toolbar/tools/ai-assistant/ai-assistant.component.d.ts +22 -3
- package/rendering/toolbar/tools/ai-assistant/ai-tool.directive.d.ts +8 -8
- package/rendering/toolbar/tools/ai-assistant/models.d.ts +65 -33
- package/row-reordering/row-reorder.service.d.ts +10 -1
- package/schematics/ngAdd/index.js +7 -7
|
@@ -872,6 +872,8 @@ class ContextService {
|
|
|
872
872
|
scroller;
|
|
873
873
|
dataBindingDirective;
|
|
874
874
|
highlightDirective;
|
|
875
|
+
excelComponent;
|
|
876
|
+
pdfComponent;
|
|
875
877
|
constructor(renderer, localization) {
|
|
876
878
|
this.renderer = renderer;
|
|
877
879
|
this.localization = localization;
|
|
@@ -2118,6 +2120,9 @@ class IdService {
|
|
|
2118
2120
|
selectAllCheckboxId() {
|
|
2119
2121
|
return `${this.prefix}-select-all`;
|
|
2120
2122
|
}
|
|
2123
|
+
columnId(colIndex) {
|
|
2124
|
+
return `${this.prefix}-col${colIndex}`;
|
|
2125
|
+
}
|
|
2121
2126
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IdService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2122
2127
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IdService });
|
|
2123
2128
|
}
|
|
@@ -2530,7 +2535,7 @@ class ColumnBase {
|
|
|
2530
2535
|
if (parent && idService && parent.idService.gridId() === idService.gridId() && !isColumnContainer(parent)) {
|
|
2531
2536
|
throw new Error(ColumnConfigurationErrorMessages.columnNested);
|
|
2532
2537
|
}
|
|
2533
|
-
this._id =
|
|
2538
|
+
this._id = this.idService?.columnId(columnId++);
|
|
2534
2539
|
}
|
|
2535
2540
|
ngAfterViewInit() {
|
|
2536
2541
|
this.initialMinResizableWidth = this.minResizableWidth || 10;
|
|
@@ -3251,6 +3256,21 @@ const resizeArgs = (column, extra) => Object.assign({
|
|
|
3251
3256
|
columns: leafColumns([column]),
|
|
3252
3257
|
locked: isLocked(column)
|
|
3253
3258
|
}, extra);
|
|
3259
|
+
/**
|
|
3260
|
+
* @hidden
|
|
3261
|
+
*/
|
|
3262
|
+
const measure = (col, gridEl) => {
|
|
3263
|
+
const rowIndex = col.level + 1;
|
|
3264
|
+
const selector = `tr[aria-rowindex="${rowIndex}"] > th[aria-colindex="${col.leafIndex + 1}"], tr[aria-rowindex="${rowIndex}"] > th[data-kendo-grid-column-index="${col.leafIndex}"]`;
|
|
3265
|
+
const headerCell = gridEl.querySelector(selector);
|
|
3266
|
+
if (headerCell) {
|
|
3267
|
+
const headerCellWidth = headerCell.offsetWidth;
|
|
3268
|
+
if (headerCellWidth > 0) {
|
|
3269
|
+
return headerCellWidth;
|
|
3270
|
+
}
|
|
3271
|
+
}
|
|
3272
|
+
return 0;
|
|
3273
|
+
};
|
|
3254
3274
|
/**
|
|
3255
3275
|
* @hidden
|
|
3256
3276
|
*/
|
|
@@ -3333,6 +3353,45 @@ class ColumnResizingService {
|
|
|
3333
3353
|
}
|
|
3334
3354
|
});
|
|
3335
3355
|
}
|
|
3356
|
+
autoFitToGrid(gridEl, scrollbarWidth, ...columns) {
|
|
3357
|
+
const gridWidth = gridEl.clientWidth - scrollbarWidth - 1;
|
|
3358
|
+
if (gridWidth <= 0) {
|
|
3359
|
+
return;
|
|
3360
|
+
}
|
|
3361
|
+
const columnsWidths = columns.map(c => measure(c, gridEl));
|
|
3362
|
+
const totalColumnsWidth = columnsWidths.reduce((sum, w) => sum + w, 0);
|
|
3363
|
+
if (totalColumnsWidth === 0 || Math.abs(totalColumnsWidth - gridWidth) <= 1) {
|
|
3364
|
+
return;
|
|
3365
|
+
}
|
|
3366
|
+
this.start(columns[0]);
|
|
3367
|
+
const calculateNewWidths = (columnsWidths) => {
|
|
3368
|
+
const totalWidth = columnsWidths.reduce((s, w) => s + w, 0);
|
|
3369
|
+
const nonZeroColumns = columnsWidths.filter(w => w > 0).length;
|
|
3370
|
+
const diff = (gridWidth - totalWidth) / nonZeroColumns;
|
|
3371
|
+
const newWidths = columnsWidths.slice();
|
|
3372
|
+
newWidths.forEach((w, i) => {
|
|
3373
|
+
newWidths[i] = Math.max(0, w + diff);
|
|
3374
|
+
});
|
|
3375
|
+
return newWidths;
|
|
3376
|
+
};
|
|
3377
|
+
let newWidths = calculateNewWidths(columnsWidths);
|
|
3378
|
+
const newTotal = newWidths.reduce((s, w) => s + w, 0);
|
|
3379
|
+
if (newTotal !== gridWidth) {
|
|
3380
|
+
newWidths = calculateNewWidths(newWidths);
|
|
3381
|
+
}
|
|
3382
|
+
columns.forEach((col, idx) => {
|
|
3383
|
+
const oldWidth = columnsWidths[idx];
|
|
3384
|
+
const newWidth = newWidths[idx];
|
|
3385
|
+
col.width = newWidth;
|
|
3386
|
+
this.resizedColumn({ column: col, oldWidth, newWidth });
|
|
3387
|
+
});
|
|
3388
|
+
const totalNew = newWidths.reduce((s, w) => s + w, 0);
|
|
3389
|
+
const tableDelta = totalNew - totalColumnsWidth;
|
|
3390
|
+
if (tableDelta < 0) {
|
|
3391
|
+
this.resizeTable(columns[0], tableDelta);
|
|
3392
|
+
}
|
|
3393
|
+
this.end();
|
|
3394
|
+
}
|
|
3336
3395
|
trackColumns(column) {
|
|
3337
3396
|
this.resizedColumns = [];
|
|
3338
3397
|
this.column = column;
|
|
@@ -3872,6 +3931,13 @@ class NavigationService {
|
|
|
3872
3931
|
const row = this.cursor.row;
|
|
3873
3932
|
// on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
|
|
3874
3933
|
const code = normalizeNumpadKeys(args);
|
|
3934
|
+
// Handle row reordering keyboard shortcuts (Ctrl/Cmd + Shift + Up/Down Arrow)
|
|
3935
|
+
if (modifier && args.shiftKey && (code === Keys.ArrowUp || code === Keys.ArrowDown)) {
|
|
3936
|
+
if (this.handleRowReorderKeyboard(args, code, row)) {
|
|
3937
|
+
args.preventDefault();
|
|
3938
|
+
return;
|
|
3939
|
+
}
|
|
3940
|
+
}
|
|
3875
3941
|
const dir = code === Keys.ArrowDown ? 'Down' : 'Up';
|
|
3876
3942
|
const right = code === Keys.ArrowRight;
|
|
3877
3943
|
const isArrowKey = code === Keys.ArrowDown || code === Keys.ArrowUp || code === Keys.ArrowLeft || code === Keys.ArrowRight;
|
|
@@ -3879,6 +3945,9 @@ class NavigationService {
|
|
|
3879
3945
|
startNewSelection = true;
|
|
3880
3946
|
this.isShiftPressed = true;
|
|
3881
3947
|
}
|
|
3948
|
+
const cellElement = args.target;
|
|
3949
|
+
const isDragCell = cellElement ? closest(cellElement, (el) => hasClasses$1(el, 'k-drag-cell')) : false;
|
|
3950
|
+
const isRowReorderable = this.ctx.grid.rowReorderable;
|
|
3882
3951
|
switch (code) {
|
|
3883
3952
|
case Keys.ArrowDown:
|
|
3884
3953
|
case Keys.ArrowUp:
|
|
@@ -3886,7 +3955,7 @@ class NavigationService {
|
|
|
3886
3955
|
rowspanOffset = this.calculateRowspanOffset(dir, rowspan);
|
|
3887
3956
|
step += rowspanOffset;
|
|
3888
3957
|
}
|
|
3889
|
-
if (args.shiftKey) {
|
|
3958
|
+
if (args.shiftKey && !(isDragCell && isRowReorderable)) {
|
|
3890
3959
|
if (this.ctx.grid.blockArrowSelection) {
|
|
3891
3960
|
return;
|
|
3892
3961
|
}
|
|
@@ -4153,7 +4222,7 @@ class NavigationService {
|
|
|
4153
4222
|
onTabout() {
|
|
4154
4223
|
// Tabbed out of the last focusable content element
|
|
4155
4224
|
// reset to cursor mode and recapture focus.
|
|
4156
|
-
if (this.cursor.cell
|
|
4225
|
+
if (this.cursor.cell?.focusGroup.isNavigable()) {
|
|
4157
4226
|
// Unless the cell has a single focusable element,
|
|
4158
4227
|
// otherwise we'd return to Content mode and enter an endless loop
|
|
4159
4228
|
return;
|
|
@@ -4234,6 +4303,42 @@ class NavigationService {
|
|
|
4234
4303
|
get isStackedMode() {
|
|
4235
4304
|
return this.ctx?.grid?.isStacked;
|
|
4236
4305
|
}
|
|
4306
|
+
handleRowReorderKeyboard(args, code, row) {
|
|
4307
|
+
if (!this.ctx.grid.rowReorderable || !this.activeCell) {
|
|
4308
|
+
return false;
|
|
4309
|
+
}
|
|
4310
|
+
const cell = this.activeCell;
|
|
4311
|
+
const cellElement = args.target;
|
|
4312
|
+
if (!cellElement) {
|
|
4313
|
+
return false;
|
|
4314
|
+
}
|
|
4315
|
+
const dragCell = closest(cellElement, (el) => hasClasses$1(el, 'k-drag-cell'));
|
|
4316
|
+
if (!dragCell || row.dataRowIndex < 0 || !row.dataItem) {
|
|
4317
|
+
return false;
|
|
4318
|
+
}
|
|
4319
|
+
const isUpArrow = code === Keys.ArrowUp;
|
|
4320
|
+
const currentRowIndex = row.dataRowIndex;
|
|
4321
|
+
const data = this.ctx.grid.flatData;
|
|
4322
|
+
if (!data || data.length === 0) {
|
|
4323
|
+
return false;
|
|
4324
|
+
}
|
|
4325
|
+
const targetRowIndex = currentRowIndex + (isUpArrow ? -1 : 1);
|
|
4326
|
+
if (targetRowIndex < 0 || targetRowIndex >= data.length) {
|
|
4327
|
+
return false;
|
|
4328
|
+
}
|
|
4329
|
+
const dropPosition = isUpArrow ? 'before' : 'after';
|
|
4330
|
+
this.zone.run(() => {
|
|
4331
|
+
const skip = this.ctx.grid.skip || 0;
|
|
4332
|
+
this.ctx.grid.rowReorderService.reorderViaKeyboard(currentRowIndex + skip, targetRowIndex + skip, dropPosition, data);
|
|
4333
|
+
// Move focus to follow the reordered row
|
|
4334
|
+
// After reordering, the row will be at the target position
|
|
4335
|
+
this.zone.onStable.pipe(take(1)).subscribe(() => {
|
|
4336
|
+
const newRowIndex = this.meta.headerRows + targetRowIndex;
|
|
4337
|
+
this.cursor.reset(newRowIndex, cell.colIndex);
|
|
4338
|
+
});
|
|
4339
|
+
});
|
|
4340
|
+
return true;
|
|
4341
|
+
}
|
|
4237
4342
|
handleStackedKeydown(args) {
|
|
4238
4343
|
const target = args.target;
|
|
4239
4344
|
const stackedCell = closest(target, (el) => hasClasses$1(el, 'k-grid-stack-cell'));
|
|
@@ -13329,7 +13434,6 @@ class ColumnChooserComponent {
|
|
|
13329
13434
|
*/
|
|
13330
13435
|
allowHideAll = true;
|
|
13331
13436
|
anchor;
|
|
13332
|
-
columnList;
|
|
13333
13437
|
get columns() {
|
|
13334
13438
|
return this.columnInfoService.leafNamedColumns;
|
|
13335
13439
|
}
|
|
@@ -13424,7 +13528,7 @@ class ColumnChooserComponent {
|
|
|
13424
13528
|
}
|
|
13425
13529
|
}
|
|
13426
13530
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ColumnChooserComponent, deps: [{ token: ContextService }, { token: ColumnInfoService }, { token: i2.PopupService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
13427
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ColumnChooserComponent, isStandalone: true, selector: "kendo-grid-column-chooser", inputs: { autoSync: "autoSync", filterable: "filterable", showSelectAll: "showSelectAll", allowHideAll: "allowHideAll" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true }
|
|
13531
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ColumnChooserComponent, isStandalone: true, selector: "kendo-grid-column-chooser", inputs: { autoSync: "autoSync", filterable: "filterable", showSelectAll: "showSelectAll", allowHideAll: "allowHideAll" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true }], ngImport: i0, template: `
|
|
13428
13532
|
<button #anchor
|
|
13429
13533
|
kendoButton
|
|
13430
13534
|
type="button"
|
|
@@ -13482,7 +13586,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
13482
13586
|
</ng-template>
|
|
13483
13587
|
`,
|
|
13484
13588
|
standalone: true,
|
|
13485
|
-
imports: [ButtonComponent,
|
|
13589
|
+
imports: [ButtonComponent, ColumnChooserContentComponent]
|
|
13486
13590
|
}]
|
|
13487
13591
|
}], ctorParameters: () => [{ type: ContextService }, { type: ColumnInfoService }, { type: i2.PopupService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { autoSync: [{
|
|
13488
13592
|
type: Input
|
|
@@ -13495,9 +13599,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
13495
13599
|
}], anchor: [{
|
|
13496
13600
|
type: ViewChild,
|
|
13497
13601
|
args: ['anchor']
|
|
13498
|
-
}], columnList: [{
|
|
13499
|
-
type: ViewChild,
|
|
13500
|
-
args: ['columnList']
|
|
13501
13602
|
}] } });
|
|
13502
13603
|
|
|
13503
13604
|
/**
|
|
@@ -16318,12 +16419,16 @@ class ExcelComponent {
|
|
|
16318
16419
|
this.ctx = ctx;
|
|
16319
16420
|
this.zone = zone;
|
|
16320
16421
|
this.saveSubscription = excelService.saveToExcel.subscribe(this.save.bind(this));
|
|
16422
|
+
this.ctx.excelComponent = this;
|
|
16321
16423
|
}
|
|
16322
16424
|
ngOnDestroy() {
|
|
16323
16425
|
this.saveSubscription.unsubscribe();
|
|
16324
16426
|
if (this.dataSubscription) {
|
|
16325
16427
|
this.dataSubscription.unsubscribe();
|
|
16326
16428
|
}
|
|
16429
|
+
if (this.ctx.excelComponent === this) {
|
|
16430
|
+
this.ctx.excelComponent = undefined;
|
|
16431
|
+
}
|
|
16327
16432
|
}
|
|
16328
16433
|
save(component) {
|
|
16329
16434
|
const data = (this.fetchData || fetchComponentData)(component);
|
|
@@ -16838,11 +16943,17 @@ class PDFComponent extends PDFExportComponent {
|
|
|
16838
16943
|
this.drawSubscription = pdfService.drawPDF.subscribe(this.drawPDF.bind(this));
|
|
16839
16944
|
this.reset = this.reset.bind(this);
|
|
16840
16945
|
this.draw = this.draw.bind(this);
|
|
16946
|
+
if (this.ctx) {
|
|
16947
|
+
this.ctx.pdfComponent = this;
|
|
16948
|
+
}
|
|
16841
16949
|
}
|
|
16842
16950
|
ngOnDestroy() {
|
|
16843
16951
|
this.saveSubscription.unsubscribe();
|
|
16844
16952
|
this.drawSubscription.unsubscribe();
|
|
16845
16953
|
this.reset();
|
|
16954
|
+
if (this.ctx?.pdfComponent === this) {
|
|
16955
|
+
this.ctx.pdfComponent = undefined;
|
|
16956
|
+
}
|
|
16846
16957
|
}
|
|
16847
16958
|
/**
|
|
16848
16959
|
* @hidden
|
|
@@ -20181,7 +20292,7 @@ class SelectionCheckboxDirective {
|
|
|
20181
20292
|
}
|
|
20182
20293
|
onClick(event) {
|
|
20183
20294
|
const nonSelectableRow = this.selectionService.nonSelectableRows.has(this.itemIndex) || this.cellSelectionService.nonSelectableRows.has(this.itemIndex);
|
|
20184
|
-
if (nonSelectableRow || this.cellSelectionService.
|
|
20295
|
+
if (nonSelectableRow || this.cellSelectionService.active) {
|
|
20185
20296
|
event.preventDefault();
|
|
20186
20297
|
return;
|
|
20187
20298
|
}
|
|
@@ -22842,8 +22953,8 @@ const packageMetadata = {
|
|
|
22842
22953
|
productName: 'Kendo UI for Angular',
|
|
22843
22954
|
productCode: 'KENDOUIANGULAR',
|
|
22844
22955
|
productCodes: ['KENDOUIANGULAR'],
|
|
22845
|
-
publishDate:
|
|
22846
|
-
version: '21.0.0-develop.
|
|
22956
|
+
publishDate: 1762335615,
|
|
22957
|
+
version: '21.0.0-develop.20',
|
|
22847
22958
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
|
|
22848
22959
|
};
|
|
22849
22960
|
|
|
@@ -24015,6 +24126,34 @@ class RowReorderService {
|
|
|
24015
24126
|
getDraggedRow(data) {
|
|
24016
24127
|
return this.getDragRowPerElement(this.dragTarget, data);
|
|
24017
24128
|
}
|
|
24129
|
+
/**
|
|
24130
|
+
* Triggers row reordering programmatically via keyboard shortcut.
|
|
24131
|
+
* @param dragRowIndex - The index of the row to move
|
|
24132
|
+
* @param dropRowIndex - The index of the target row
|
|
24133
|
+
* @param dropPosition - The position relative to the target row ('before' or 'after')
|
|
24134
|
+
* @param data - The data array
|
|
24135
|
+
*/
|
|
24136
|
+
reorderViaKeyboard(dragRowIndex, dropRowIndex, dropPosition, data) {
|
|
24137
|
+
if (dropPosition === 'forbidden') {
|
|
24138
|
+
return;
|
|
24139
|
+
}
|
|
24140
|
+
const dragRow = this.createVirtualRowElement(dragRowIndex);
|
|
24141
|
+
const dropRow = this.createVirtualRowElement(dropRowIndex);
|
|
24142
|
+
this.lastDropPosition = dropPosition;
|
|
24143
|
+
const rowReorderArgs = this.rowReorderArgs(dragRow, dropRow, data);
|
|
24144
|
+
this.rowReorder.emit(rowReorderArgs);
|
|
24145
|
+
}
|
|
24146
|
+
createVirtualRowElement(rowIndex) {
|
|
24147
|
+
const virtualElement = {
|
|
24148
|
+
getAttribute: (attr) => {
|
|
24149
|
+
if (attr === 'data-kendo-grid-item-index') {
|
|
24150
|
+
return String(rowIndex);
|
|
24151
|
+
}
|
|
24152
|
+
return null;
|
|
24153
|
+
}
|
|
24154
|
+
};
|
|
24155
|
+
return virtualElement;
|
|
24156
|
+
}
|
|
24018
24157
|
rowReorderArgs(dragRow, dropRow, data) {
|
|
24019
24158
|
const dragRowData = this.getDragRowPerElement(dragRow, data);
|
|
24020
24159
|
const dropRowData = this.getDragRowPerElement(dropRow, data);
|
|
@@ -26575,6 +26714,18 @@ class GridMessages extends ComponentMessages {
|
|
|
26575
26714
|
* The success message dispayed in the AI Assistant Prompt Output Card's body.
|
|
26576
26715
|
*/
|
|
26577
26716
|
aiAssistantOutputCardBodyContent;
|
|
26717
|
+
/**
|
|
26718
|
+
* The message shown when AI selection requires the Grid selectable option.
|
|
26719
|
+
*/
|
|
26720
|
+
aiAssistantSelectionNotEnabled;
|
|
26721
|
+
/**
|
|
26722
|
+
* The message shown when AI selection requires row selection mode.
|
|
26723
|
+
*/
|
|
26724
|
+
aiAssistantSelectionRowModeRequired;
|
|
26725
|
+
/**
|
|
26726
|
+
* The message shown when AI selection requires cell selection mode.
|
|
26727
|
+
*/
|
|
26728
|
+
aiAssistantSelectionCellModeRequired;
|
|
26578
26729
|
/**
|
|
26579
26730
|
* The title of the AI Assistant Window maximize button.
|
|
26580
26731
|
*/
|
|
@@ -27013,7 +27164,7 @@ class GridMessages extends ComponentMessages {
|
|
|
27013
27164
|
*/
|
|
27014
27165
|
multiCheckboxFilterSelectedItemsCount;
|
|
27015
27166
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
27016
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", 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", columnChooserSelectedColumnsCount: "columnChooserSelectedColumnsCount", 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", multiCheckboxFilterSearchPlaceholder: "multiCheckboxFilterSearchPlaceholder", multiCheckboxFilterSelectAllLabel: "multiCheckboxFilterSelectAllLabel", multiCheckboxFilterSelectedItemsCount: "multiCheckboxFilterSelectedItemsCount" }, usesInheritance: true, ngImport: i0 });
|
|
27167
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", 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", aiAssistantSelectionNotEnabled: "aiAssistantSelectionNotEnabled", aiAssistantSelectionRowModeRequired: "aiAssistantSelectionRowModeRequired", aiAssistantSelectionCellModeRequired: "aiAssistantSelectionCellModeRequired", 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", columnChooserSelectedColumnsCount: "columnChooserSelectedColumnsCount", 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", multiCheckboxFilterSearchPlaceholder: "multiCheckboxFilterSearchPlaceholder", multiCheckboxFilterSelectAllLabel: "multiCheckboxFilterSelectAllLabel", multiCheckboxFilterSelectedItemsCount: "multiCheckboxFilterSelectedItemsCount" }, usesInheritance: true, ngImport: i0 });
|
|
27017
27168
|
}
|
|
27018
27169
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GridMessages, decorators: [{
|
|
27019
27170
|
type: Directive,
|
|
@@ -27075,6 +27226,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
27075
27226
|
type: Input
|
|
27076
27227
|
}], aiAssistantOutputCardBodyContent: [{
|
|
27077
27228
|
type: Input
|
|
27229
|
+
}], aiAssistantSelectionNotEnabled: [{
|
|
27230
|
+
type: Input
|
|
27231
|
+
}], aiAssistantSelectionRowModeRequired: [{
|
|
27232
|
+
type: Input
|
|
27233
|
+
}], aiAssistantSelectionCellModeRequired: [{
|
|
27234
|
+
type: Input
|
|
27078
27235
|
}], aiAssistantWindowMaximizeTitle: [{
|
|
27079
27236
|
type: Input
|
|
27080
27237
|
}], aiAssistantWindowMinimizeTitle: [{
|
|
@@ -31220,6 +31377,24 @@ class GridComponent {
|
|
|
31220
31377
|
}
|
|
31221
31378
|
this.columnResizingService.autoFit(...cols);
|
|
31222
31379
|
}
|
|
31380
|
+
/**
|
|
31381
|
+
* Adjusts the width of the Grid columns to fit the entire Grid width.
|
|
31382
|
+
* - when the sum of all columns widths is less than the available Grid width—the available space is distributed evenly between all columns.
|
|
31383
|
+
* - when the sum of all columns widths is greater than the available Grid width—the columns are shrinked equally to fit the Grid width.
|
|
31384
|
+
*
|
|
31385
|
+
* Run this method after the Grid is populated with data.
|
|
31386
|
+
*/
|
|
31387
|
+
autoFitColumnsToGrid() {
|
|
31388
|
+
const gridElement = this.wrapper.nativeElement;
|
|
31389
|
+
if (!gridElement) {
|
|
31390
|
+
return;
|
|
31391
|
+
}
|
|
31392
|
+
const leafColumns = this.columnsContainer.leafColumns.toArray();
|
|
31393
|
+
if (!leafColumns.length || leafColumns.length === 0) {
|
|
31394
|
+
return;
|
|
31395
|
+
}
|
|
31396
|
+
this.columnResizingService.autoFitToGrid(gridElement, this.scrollbarWidth, ...leafColumns);
|
|
31397
|
+
}
|
|
31223
31398
|
/**
|
|
31224
31399
|
* @hidden
|
|
31225
31400
|
*/
|
|
@@ -32393,6 +32568,15 @@ class GridComponent {
|
|
|
32393
32568
|
i18n-aiAssistantOutputCardBodyContent="kendo.grid.aiAssistantOutputCardBodyContent|The success message dispayed in the AI Assistant Prompt Output Card's body"
|
|
32394
32569
|
aiAssistantOutputCardBodyContent="Operation is successful. Data is:"
|
|
32395
32570
|
|
|
32571
|
+
i18n-aiAssistantSelectionNotEnabled="kendo.grid.aiAssistantSelectionNotEnabled|The message shown when AI selection requires the Grid selectable option"
|
|
32572
|
+
aiAssistantSelectionNotEnabled="Selection can be applied only when the Grid selectable option is enabled."
|
|
32573
|
+
|
|
32574
|
+
i18n-aiAssistantSelectionRowModeRequired="kendo.grid.aiAssistantSelectionRowModeRequired|The message shown when AI selection requires row selection mode"
|
|
32575
|
+
aiAssistantSelectionRowModeRequired="Selection can be applied only when row selection mode is enabled."
|
|
32576
|
+
|
|
32577
|
+
i18n-aiAssistantSelectionCellModeRequired="kendo.grid.aiAssistantSelectionCellModeRequired|The message shown when AI selection requires cell selection mode"
|
|
32578
|
+
aiAssistantSelectionCellModeRequired="Selection can be applied only when cell selection mode is enabled."
|
|
32579
|
+
|
|
32396
32580
|
i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
|
|
32397
32581
|
columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
|
|
32398
32582
|
|
|
@@ -33262,6 +33446,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
33262
33446
|
i18n-aiAssistantOutputCardBodyContent="kendo.grid.aiAssistantOutputCardBodyContent|The success message dispayed in the AI Assistant Prompt Output Card's body"
|
|
33263
33447
|
aiAssistantOutputCardBodyContent="Operation is successful. Data is:"
|
|
33264
33448
|
|
|
33449
|
+
i18n-aiAssistantSelectionNotEnabled="kendo.grid.aiAssistantSelectionNotEnabled|The message shown when AI selection requires the Grid selectable option"
|
|
33450
|
+
aiAssistantSelectionNotEnabled="Selection can be applied only when the Grid selectable option is enabled."
|
|
33451
|
+
|
|
33452
|
+
i18n-aiAssistantSelectionRowModeRequired="kendo.grid.aiAssistantSelectionRowModeRequired|The message shown when AI selection requires row selection mode"
|
|
33453
|
+
aiAssistantSelectionRowModeRequired="Selection can be applied only when row selection mode is enabled."
|
|
33454
|
+
|
|
33455
|
+
i18n-aiAssistantSelectionCellModeRequired="kendo.grid.aiAssistantSelectionCellModeRequired|The message shown when AI selection requires cell selection mode"
|
|
33456
|
+
aiAssistantSelectionCellModeRequired="Selection can be applied only when cell selection mode is enabled."
|
|
33457
|
+
|
|
33265
33458
|
i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
|
|
33266
33459
|
columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
|
|
33267
33460
|
|
|
@@ -37315,7 +37508,7 @@ const DEFAULT_AI_REQUEST_OPTIONS = {
|
|
|
37315
37508
|
/**
|
|
37316
37509
|
* Represents the event data when the AI Assistant request completes successfully.
|
|
37317
37510
|
*/
|
|
37318
|
-
class
|
|
37511
|
+
class GridAIAssistantResponseSuccessEvent extends PreventableEvent$1 {
|
|
37319
37512
|
/**
|
|
37320
37513
|
* The HTTP response from the AI service.
|
|
37321
37514
|
*/
|
|
@@ -37328,7 +37521,7 @@ class GridToolbarAIResponseSuccessEvent extends PreventableEvent$1 {
|
|
|
37328
37521
|
/**
|
|
37329
37522
|
* Represents the event data when the AI Assistant request completes with an error.
|
|
37330
37523
|
*/
|
|
37331
|
-
class
|
|
37524
|
+
class GridAIAssistantResponseErrorEvent extends PreventableEvent$1 {
|
|
37332
37525
|
/**
|
|
37333
37526
|
* The HTTP error response from the AI service.
|
|
37334
37527
|
*/
|
|
@@ -37446,7 +37639,11 @@ class AiAssistantComponent {
|
|
|
37446
37639
|
currentRequestSubscription = null;
|
|
37447
37640
|
//Remove this when the AI Assistant has a built-in loading indicator
|
|
37448
37641
|
loadingOutput = { id: 'k-loading-item', output: '', prompt: '' };
|
|
37642
|
+
// flat columns used for highlight utilities (expects { field })
|
|
37449
37643
|
columns = [];
|
|
37644
|
+
leafColumns = [];
|
|
37645
|
+
// nested tree representing the actual Grid column components sent to the AI service
|
|
37646
|
+
columnsTree = [];
|
|
37450
37647
|
idCounter = 0;
|
|
37451
37648
|
constructor(http, ctx, columnInfoService) {
|
|
37452
37649
|
this.http = http;
|
|
@@ -37454,7 +37651,36 @@ class AiAssistantComponent {
|
|
|
37454
37651
|
this.columnInfoService = columnInfoService;
|
|
37455
37652
|
}
|
|
37456
37653
|
ngAfterViewInit() {
|
|
37457
|
-
|
|
37654
|
+
// Build a nested GridColumnDescriptor tree based on the actual Grid columns structure.
|
|
37655
|
+
// This includes root columns and their nested children (for ColumnGroup and SpanColumn).
|
|
37656
|
+
const rootColumns = this.ctx?.grid?.columnList?.rootColumns() || [];
|
|
37657
|
+
const buildDescriptor = (col) => {
|
|
37658
|
+
const hasChildren = Boolean(col.hasChildren && col.childrenArray?.length);
|
|
37659
|
+
const descriptor = {
|
|
37660
|
+
id: col.id,
|
|
37661
|
+
field: col.field
|
|
37662
|
+
};
|
|
37663
|
+
if (hasChildren) {
|
|
37664
|
+
descriptor.header = col.displayTitle;
|
|
37665
|
+
descriptor.columns = col.childrenArray.map((c) => buildDescriptor(c));
|
|
37666
|
+
}
|
|
37667
|
+
// For special columns that don't have a field, emit an optional type token
|
|
37668
|
+
// so the AI service knows how to treat them (checkbox/command/reorder)
|
|
37669
|
+
if (!col.field) {
|
|
37670
|
+
if (isCheckboxColumn(col)) {
|
|
37671
|
+
descriptor.type = 'checkbox';
|
|
37672
|
+
}
|
|
37673
|
+
else if (col instanceof CommandColumnComponent) {
|
|
37674
|
+
descriptor.type = 'command';
|
|
37675
|
+
}
|
|
37676
|
+
}
|
|
37677
|
+
return descriptor;
|
|
37678
|
+
};
|
|
37679
|
+
this.columnsTree = rootColumns.map((col) => buildDescriptor(col));
|
|
37680
|
+
// Preserve a flat columns array (fields) for highlight utilities.
|
|
37681
|
+
// Use leafNamedColumns as the canonical list of leaf columns with display titles.
|
|
37682
|
+
this.leafColumns = this.columnInfoService.leafNamedColumns || [];
|
|
37683
|
+
this.columns = this.leafColumns.map((col) => ({ field: col.field }));
|
|
37458
37684
|
}
|
|
37459
37685
|
ngOnDestroy() {
|
|
37460
37686
|
this.unsubscribeCurrentRequest();
|
|
@@ -37478,7 +37704,8 @@ class AiAssistantComponent {
|
|
|
37478
37704
|
this.lastMessage = ev.prompt;
|
|
37479
37705
|
}
|
|
37480
37706
|
this.requestData = {
|
|
37481
|
-
|
|
37707
|
+
// send nested tree to AI service
|
|
37708
|
+
columns: this.columnsTree,
|
|
37482
37709
|
promptMessage: ev.prompt,
|
|
37483
37710
|
url: this.requestUrl,
|
|
37484
37711
|
requestOptions: {
|
|
@@ -37522,30 +37749,22 @@ class AiAssistantComponent {
|
|
|
37522
37749
|
this.aiToolDirective.emitOpenClose = true;
|
|
37523
37750
|
this.aiToolDirective.toggleWindow();
|
|
37524
37751
|
}
|
|
37525
|
-
const responseBody = response.body;
|
|
37526
|
-
const responseSuccessEvent = new
|
|
37752
|
+
const responseBody = response.body || { commands: [] };
|
|
37753
|
+
const responseSuccessEvent = new GridAIAssistantResponseSuccessEvent(response);
|
|
37527
37754
|
this.aiToolDirective.responseSuccess.emit(responseSuccessEvent);
|
|
37528
37755
|
if (responseSuccessEvent.isDefaultPrevented()) {
|
|
37529
37756
|
this.deleteLoadingOutput();
|
|
37530
37757
|
return;
|
|
37531
37758
|
}
|
|
37532
|
-
const
|
|
37533
|
-
|
|
37534
|
-
|
|
37535
|
-
|
|
37536
|
-
this.processFilterResponse(responseBody.filter);
|
|
37537
|
-
}
|
|
37538
|
-
if (isSortable && responseBody.sort) {
|
|
37539
|
-
this.processArrayResponse(responseBody.sort, this.ctx.grid.currentState.sort || [], (item) => item.field, (mergedArray) => this.ctx.grid.sortChange.next(mergedArray));
|
|
37540
|
-
}
|
|
37541
|
-
if (isGroupable && responseBody.group) {
|
|
37542
|
-
this.processArrayResponse(responseBody.group, this.ctx.grid.currentState.group || [], (item) => item.field, (mergedArray) => this.ctx.grid.groupChange.next(mergedArray));
|
|
37543
|
-
}
|
|
37544
|
-
if (this.ctx.highlightDirective && responseBody.highlight) {
|
|
37545
|
-
this.processHighlightResponse(responseBody.highlight);
|
|
37759
|
+
const messages = [];
|
|
37760
|
+
// Include optional top-level message from the response
|
|
37761
|
+
if (responseBody.message) {
|
|
37762
|
+
messages.push(responseBody.message);
|
|
37546
37763
|
}
|
|
37764
|
+
// Execute received commands sequentially and collect messages.
|
|
37765
|
+
this.processCommands(responseBody.commands || [], messages);
|
|
37547
37766
|
const responseContentStart = [`${this.ctx.localization.get('aiAssistantOutputCardBodyContent')} \n`];
|
|
37548
|
-
const responseContentBody =
|
|
37767
|
+
const responseContentBody = messages
|
|
37549
37768
|
.map((output, idx) => `${idx + 1} ${output}`)
|
|
37550
37769
|
.join('\n');
|
|
37551
37770
|
const output = {
|
|
@@ -37558,7 +37777,7 @@ class AiAssistantComponent {
|
|
|
37558
37777
|
this.aiToolDirective.promptOutputs.unshift(output);
|
|
37559
37778
|
}
|
|
37560
37779
|
handleError(error) {
|
|
37561
|
-
const responseErrorEvent = new
|
|
37780
|
+
const responseErrorEvent = new GridAIAssistantResponseErrorEvent(error);
|
|
37562
37781
|
this.aiToolDirective.responseError.emit(responseErrorEvent);
|
|
37563
37782
|
if (responseErrorEvent.isDefaultPrevented()) {
|
|
37564
37783
|
this.deleteLoadingOutput();
|
|
@@ -37595,12 +37814,468 @@ class AiAssistantComponent {
|
|
|
37595
37814
|
updateGrid(mergedArray);
|
|
37596
37815
|
}
|
|
37597
37816
|
}
|
|
37598
|
-
|
|
37599
|
-
if (
|
|
37600
|
-
|
|
37817
|
+
processCommands(commands, messages) {
|
|
37818
|
+
if (!commands?.length) {
|
|
37819
|
+
return;
|
|
37820
|
+
}
|
|
37821
|
+
const isFilterable = Boolean(this.ctx.grid.filterable);
|
|
37822
|
+
const isSortable = Boolean(this.ctx.grid.sortable);
|
|
37823
|
+
const isGroupable = Boolean(this.ctx.grid.groupable);
|
|
37824
|
+
const findColumnById = (id) => this.ctx.grid.columnList.toArray().find((c) => c.id === id);
|
|
37825
|
+
const updateColumnHierarchy = (column, updater) => {
|
|
37826
|
+
const changed = [];
|
|
37827
|
+
const queue = [column];
|
|
37828
|
+
while (queue.length) {
|
|
37829
|
+
const current = queue.shift();
|
|
37830
|
+
if (!current) {
|
|
37831
|
+
continue;
|
|
37832
|
+
}
|
|
37833
|
+
const didChange = updater(current);
|
|
37834
|
+
if (didChange) {
|
|
37835
|
+
changed.push(current);
|
|
37836
|
+
}
|
|
37837
|
+
if (current.hasChildren && current.childrenArray?.length) {
|
|
37838
|
+
queue.push(...current.childrenArray);
|
|
37839
|
+
}
|
|
37840
|
+
}
|
|
37841
|
+
return changed;
|
|
37842
|
+
};
|
|
37843
|
+
commands.forEach((cmd) => {
|
|
37844
|
+
let displayMessage = cmd.message || '';
|
|
37845
|
+
if (this.isColumnCommand(cmd.type)) {
|
|
37846
|
+
if (cmd.id) {
|
|
37847
|
+
const column = findColumnById(cmd.id);
|
|
37848
|
+
const replacement = this.getColumnReplacement(column);
|
|
37849
|
+
displayMessage = this.replaceQuotedColumnId(displayMessage, replacement);
|
|
37850
|
+
}
|
|
37851
|
+
}
|
|
37852
|
+
messages.push(displayMessage);
|
|
37853
|
+
switch (cmd.type) {
|
|
37854
|
+
case 'GridSort':
|
|
37855
|
+
if (!isSortable) {
|
|
37856
|
+
break;
|
|
37857
|
+
}
|
|
37858
|
+
// cmd.sort is a SortDescriptor - replace or merge with existing sort
|
|
37859
|
+
this.processArrayResponse([cmd.sort], this.ctx.grid.currentState.sort || [], (item) => item.field, (mergedArray) => this.ctx.grid.sortChange.next(mergedArray));
|
|
37860
|
+
break;
|
|
37861
|
+
case 'GridClearSort':
|
|
37862
|
+
if (!isSortable) {
|
|
37863
|
+
break;
|
|
37864
|
+
}
|
|
37865
|
+
this.ctx.grid.sortChange.next([]);
|
|
37866
|
+
break;
|
|
37867
|
+
case 'GridFilter':
|
|
37868
|
+
if (!isFilterable) {
|
|
37869
|
+
break;
|
|
37870
|
+
}
|
|
37871
|
+
this.processFilterResponse(cmd.filter);
|
|
37872
|
+
break;
|
|
37873
|
+
case 'GridClearFilter':
|
|
37874
|
+
if (!isFilterable) {
|
|
37875
|
+
break;
|
|
37876
|
+
}
|
|
37877
|
+
this.ctx.grid.filterChange.next(undefined);
|
|
37878
|
+
break;
|
|
37879
|
+
case 'GridGroup':
|
|
37880
|
+
if (!isGroupable) {
|
|
37881
|
+
break;
|
|
37882
|
+
}
|
|
37883
|
+
this.processArrayResponse([cmd.group], this.ctx.grid.currentState.group || [], (item) => item.field, (mergedArray) => this.ctx.grid.groupChange.next(mergedArray));
|
|
37884
|
+
break;
|
|
37885
|
+
case 'GridClearGroup':
|
|
37886
|
+
if (!isGroupable) {
|
|
37887
|
+
break;
|
|
37888
|
+
}
|
|
37889
|
+
this.ctx.grid.groupChange.next([]);
|
|
37890
|
+
break;
|
|
37891
|
+
case 'GridHighlight':
|
|
37892
|
+
if (!this.ctx.highlightDirective) {
|
|
37893
|
+
break;
|
|
37894
|
+
}
|
|
37895
|
+
this.processHighlightResponse([cmd.highlight]);
|
|
37896
|
+
break;
|
|
37897
|
+
case 'GridClearHighlight':
|
|
37898
|
+
if (!this.ctx.highlightDirective) {
|
|
37899
|
+
break;
|
|
37900
|
+
}
|
|
37901
|
+
this.ctx.highlightDirective['setState']([]);
|
|
37902
|
+
break;
|
|
37903
|
+
case 'GridSelect': {
|
|
37904
|
+
this.processSelectionResponse([cmd.select], messages);
|
|
37905
|
+
break;
|
|
37906
|
+
}
|
|
37907
|
+
case 'GridClearSelect': {
|
|
37908
|
+
const selectionInstance = this.getSelectionInstance();
|
|
37909
|
+
if (!selectionInstance) {
|
|
37910
|
+
this.updateLastMessage(messages, this.ctx.localization?.get('aiAssistantSelectionNotEnabled'));
|
|
37911
|
+
break;
|
|
37912
|
+
}
|
|
37913
|
+
this.applySelectionState(selectionInstance, []);
|
|
37914
|
+
break;
|
|
37915
|
+
}
|
|
37916
|
+
case 'GridColumnResize': {
|
|
37917
|
+
const col = findColumnById(cmd.id);
|
|
37918
|
+
if (!col) {
|
|
37919
|
+
break;
|
|
37920
|
+
}
|
|
37921
|
+
// parse size (accept numeric or strings like '200px')
|
|
37922
|
+
let newWidth;
|
|
37923
|
+
if (typeof cmd.size === 'number') {
|
|
37924
|
+
newWidth = cmd.size;
|
|
37925
|
+
}
|
|
37926
|
+
else if (typeof cmd.size === 'string') {
|
|
37927
|
+
const numericPart = parseFloat(cmd.size);
|
|
37928
|
+
if (!isNaN(numericPart)) {
|
|
37929
|
+
newWidth = numericPart;
|
|
37930
|
+
}
|
|
37931
|
+
}
|
|
37932
|
+
if (typeof newWidth === 'number') {
|
|
37933
|
+
const oldWidth = col.width;
|
|
37934
|
+
// set the column width (ColumnBase.width setter handles string -> number)
|
|
37935
|
+
col.width = newWidth;
|
|
37936
|
+
// emit columnResize event with ColumnResizeArgs[]
|
|
37937
|
+
const args = [{ column: col, oldWidth: oldWidth, newWidth: newWidth }];
|
|
37938
|
+
this.ctx.grid.columnResize.emit(args);
|
|
37939
|
+
}
|
|
37940
|
+
break;
|
|
37941
|
+
}
|
|
37942
|
+
case 'GridColumnReorder': {
|
|
37943
|
+
const col = findColumnById(cmd.id);
|
|
37944
|
+
if (!col) {
|
|
37945
|
+
break;
|
|
37946
|
+
}
|
|
37947
|
+
const newIndex = Number(cmd.position);
|
|
37948
|
+
if (!isNaN(newIndex)) {
|
|
37949
|
+
// call grid API to reorder the column - this will trigger columnReorder event internally
|
|
37950
|
+
this.ctx.grid.reorderColumn(col, newIndex, { before: true });
|
|
37951
|
+
}
|
|
37952
|
+
break;
|
|
37953
|
+
}
|
|
37954
|
+
case 'GridColumnShow':
|
|
37955
|
+
case 'GridColumnHide': {
|
|
37956
|
+
const col = findColumnById(cmd.id);
|
|
37957
|
+
if (!col) {
|
|
37958
|
+
break;
|
|
37959
|
+
}
|
|
37960
|
+
const targetHidden = cmd.type === 'GridColumnHide';
|
|
37961
|
+
const changed = updateColumnHierarchy(col, (current) => {
|
|
37962
|
+
if (current.hidden === targetHidden) {
|
|
37963
|
+
return false;
|
|
37964
|
+
}
|
|
37965
|
+
current.hidden = targetHidden;
|
|
37966
|
+
return true;
|
|
37967
|
+
});
|
|
37968
|
+
if (changed.length) {
|
|
37969
|
+
this.columnInfoService.changeVisibility(changed);
|
|
37970
|
+
}
|
|
37971
|
+
break;
|
|
37972
|
+
}
|
|
37973
|
+
case 'GridColumnLock':
|
|
37974
|
+
case 'GridColumnUnlock': {
|
|
37975
|
+
const col = findColumnById(cmd.id);
|
|
37976
|
+
if (!col) {
|
|
37977
|
+
break;
|
|
37978
|
+
}
|
|
37979
|
+
const targetLocked = cmd.type === 'GridColumnLock';
|
|
37980
|
+
const changed = updateColumnHierarchy(col, (current) => {
|
|
37981
|
+
if (current.locked === targetLocked) {
|
|
37982
|
+
return false;
|
|
37983
|
+
}
|
|
37984
|
+
current.locked = targetLocked;
|
|
37985
|
+
return true;
|
|
37986
|
+
});
|
|
37987
|
+
if (changed.length) {
|
|
37988
|
+
this.columnInfoService.changeLocked(changed);
|
|
37989
|
+
}
|
|
37990
|
+
break;
|
|
37991
|
+
}
|
|
37992
|
+
case 'GridPage': {
|
|
37993
|
+
this.processPageCommand(cmd);
|
|
37994
|
+
break;
|
|
37995
|
+
}
|
|
37996
|
+
case 'GridPageSize': {
|
|
37997
|
+
this.processPageSizeCommand(cmd);
|
|
37998
|
+
break;
|
|
37999
|
+
}
|
|
38000
|
+
case 'GridExportExcel': {
|
|
38001
|
+
this.runExportWithFileName(this.ctx.excelComponent, cmd.fileName, () => this.ctx.grid.saveAsExcel());
|
|
38002
|
+
break;
|
|
38003
|
+
}
|
|
38004
|
+
case 'GridExportPDF': {
|
|
38005
|
+
this.runExportWithFileName(this.ctx.pdfComponent, cmd.fileName, () => this.ctx.grid.saveAsPDF());
|
|
38006
|
+
break;
|
|
38007
|
+
}
|
|
38008
|
+
default:
|
|
38009
|
+
// Unknown command - ignore
|
|
38010
|
+
break;
|
|
38011
|
+
}
|
|
38012
|
+
});
|
|
38013
|
+
}
|
|
38014
|
+
runExportWithFileName(component, fileName, action) {
|
|
38015
|
+
if (!component) {
|
|
38016
|
+
action();
|
|
38017
|
+
return;
|
|
38018
|
+
}
|
|
38019
|
+
const hasComponentFileName = isPresent$1(component.fileName) && component.fileName !== '';
|
|
38020
|
+
if (hasComponentFileName || !fileName) {
|
|
38021
|
+
action();
|
|
38022
|
+
return;
|
|
38023
|
+
}
|
|
38024
|
+
const previousFileName = component.fileName;
|
|
38025
|
+
component.fileName = fileName;
|
|
38026
|
+
try {
|
|
38027
|
+
action();
|
|
38028
|
+
}
|
|
38029
|
+
finally {
|
|
38030
|
+
component.fileName = previousFileName;
|
|
38031
|
+
}
|
|
38032
|
+
}
|
|
38033
|
+
processPageCommand(command) {
|
|
38034
|
+
const pageSize = this.getCurrentPageSizeValue();
|
|
38035
|
+
if (!isPresent$1(pageSize) || pageSize <= 0) {
|
|
38036
|
+
return;
|
|
38037
|
+
}
|
|
38038
|
+
const total = this.getTotalItemsCount();
|
|
38039
|
+
const requestedPage = Number(command.page);
|
|
38040
|
+
let targetPage = Number.isFinite(requestedPage) ? Math.floor(requestedPage) : 1;
|
|
38041
|
+
if (targetPage < 1) {
|
|
38042
|
+
targetPage = 1;
|
|
38043
|
+
}
|
|
38044
|
+
if (isPresent$1(total) && pageSize > 0) {
|
|
38045
|
+
const maxPage = Math.max(1, Math.ceil(total / pageSize));
|
|
38046
|
+
targetPage = Math.min(targetPage, maxPage);
|
|
38047
|
+
}
|
|
38048
|
+
const skip = (targetPage - 1) * pageSize;
|
|
38049
|
+
this.emitGridPageChange(skip, pageSize);
|
|
38050
|
+
}
|
|
38051
|
+
processPageSizeCommand(command) {
|
|
38052
|
+
const rawPageSize = Number(command.pageSize);
|
|
38053
|
+
if (!Number.isFinite(rawPageSize)) {
|
|
38054
|
+
return;
|
|
38055
|
+
}
|
|
38056
|
+
const newPageSize = Math.max(1, Math.floor(rawPageSize));
|
|
38057
|
+
const skip = Math.max(0, this.ctx.grid?.skip ?? 0);
|
|
38058
|
+
this.ensurePageSizeOption(newPageSize);
|
|
38059
|
+
this.emitGridPageChange(skip, newPageSize);
|
|
38060
|
+
}
|
|
38061
|
+
emitGridPageChange(skip, take) {
|
|
38062
|
+
const grid = this.ctx.grid;
|
|
38063
|
+
const normalizedSkip = Math.max(0, Math.floor(skip));
|
|
38064
|
+
const normalizedTake = Math.max(1, Math.floor(take));
|
|
38065
|
+
grid.skip = normalizedSkip;
|
|
38066
|
+
grid.pageSize = normalizedTake;
|
|
38067
|
+
grid.pageChange.emit({ skip: normalizedSkip, take: normalizedTake });
|
|
38068
|
+
}
|
|
38069
|
+
ensurePageSizeOption(pageSize) {
|
|
38070
|
+
const grid = this.ctx.grid;
|
|
38071
|
+
if (!grid) {
|
|
37601
38072
|
return;
|
|
37602
38073
|
}
|
|
37603
|
-
const
|
|
38074
|
+
const pageable = grid.pageable;
|
|
38075
|
+
if (!pageable || typeof pageable === 'boolean') {
|
|
38076
|
+
return;
|
|
38077
|
+
}
|
|
38078
|
+
const pageSizes = pageable.pageSizes;
|
|
38079
|
+
if (!Array.isArray(pageSizes) || pageSizes.length === 0) {
|
|
38080
|
+
return;
|
|
38081
|
+
}
|
|
38082
|
+
if (pageSizes.includes(pageSize)) {
|
|
38083
|
+
return;
|
|
38084
|
+
}
|
|
38085
|
+
const uniqueSizes = [pageSize, ...pageSizes.filter(size => size !== pageSize)];
|
|
38086
|
+
grid.pageable = {
|
|
38087
|
+
...pageable,
|
|
38088
|
+
pageSizes: uniqueSizes
|
|
38089
|
+
};
|
|
38090
|
+
const changeDetector = grid?.changeDetectorRef;
|
|
38091
|
+
if (changeDetector && typeof changeDetector.markForCheck === 'function') {
|
|
38092
|
+
changeDetector.markForCheck();
|
|
38093
|
+
}
|
|
38094
|
+
}
|
|
38095
|
+
getCurrentPageSizeValue() {
|
|
38096
|
+
const grid = this.ctx.grid;
|
|
38097
|
+
if (!grid) {
|
|
38098
|
+
return null;
|
|
38099
|
+
}
|
|
38100
|
+
const candidates = [grid.pageSize, grid.currentState?.take, this.ctx.dataBindingDirective?.['state']?.take];
|
|
38101
|
+
for (const candidate of candidates) {
|
|
38102
|
+
if (typeof candidate === 'number' && candidate > 0) {
|
|
38103
|
+
return candidate;
|
|
38104
|
+
}
|
|
38105
|
+
}
|
|
38106
|
+
const pageable = grid.pageable;
|
|
38107
|
+
if (pageable && typeof pageable === 'object' && Array.isArray(pageable.pageSizes)) {
|
|
38108
|
+
const numericSize = pageable.pageSizes.find(size => typeof size === 'number' && size > 0);
|
|
38109
|
+
if (numericSize) {
|
|
38110
|
+
return numericSize;
|
|
38111
|
+
}
|
|
38112
|
+
}
|
|
38113
|
+
const originalData = this.ctx.dataBindingDirective?.['originalData'];
|
|
38114
|
+
if (Array.isArray(originalData) && originalData.length > 0) {
|
|
38115
|
+
return originalData.length;
|
|
38116
|
+
}
|
|
38117
|
+
return null;
|
|
38118
|
+
}
|
|
38119
|
+
getTotalItemsCount() {
|
|
38120
|
+
const grid = this.ctx.grid;
|
|
38121
|
+
if (!grid) {
|
|
38122
|
+
return null;
|
|
38123
|
+
}
|
|
38124
|
+
const gridData = grid.data;
|
|
38125
|
+
if (gridData && typeof gridData.total === 'number') {
|
|
38126
|
+
return gridData.total;
|
|
38127
|
+
}
|
|
38128
|
+
const view = grid.view;
|
|
38129
|
+
if (view && typeof view.total === 'number') {
|
|
38130
|
+
return view.total;
|
|
38131
|
+
}
|
|
38132
|
+
const originalData = this.ctx.dataBindingDirective?.['originalData'];
|
|
38133
|
+
if (Array.isArray(originalData)) {
|
|
38134
|
+
return originalData.length;
|
|
38135
|
+
}
|
|
38136
|
+
return null;
|
|
38137
|
+
}
|
|
38138
|
+
getSelectionInstance() {
|
|
38139
|
+
const selectionDirective = this.ctx.grid?.selectionDirective;
|
|
38140
|
+
if (selectionDirective && typeof selectionDirective === 'object') {
|
|
38141
|
+
return selectionDirective;
|
|
38142
|
+
}
|
|
38143
|
+
const defaultSelection = this.ctx.grid?.defaultSelection;
|
|
38144
|
+
if (defaultSelection && typeof defaultSelection === 'object') {
|
|
38145
|
+
return defaultSelection;
|
|
38146
|
+
}
|
|
38147
|
+
return null;
|
|
38148
|
+
}
|
|
38149
|
+
updateLastMessage(messages, newMessage) {
|
|
38150
|
+
if (!messages.length) {
|
|
38151
|
+
return;
|
|
38152
|
+
}
|
|
38153
|
+
messages[messages.length - 1] = newMessage;
|
|
38154
|
+
}
|
|
38155
|
+
getHighlightItems(descriptors) {
|
|
38156
|
+
if (!descriptors?.length) {
|
|
38157
|
+
return [];
|
|
38158
|
+
}
|
|
38159
|
+
const data = this.ctx.dataBindingDirective?.['originalData'] || [];
|
|
38160
|
+
return highlightBy(data, descriptors, this.columns);
|
|
38161
|
+
}
|
|
38162
|
+
processSelectionResponse(selection, messages) {
|
|
38163
|
+
const selectionInstance = this.getSelectionInstance();
|
|
38164
|
+
if (!selectionInstance) {
|
|
38165
|
+
this.updateLastMessage(messages, this.ctx.localization?.get('aiAssistantSelectionNotEnabled'));
|
|
38166
|
+
return;
|
|
38167
|
+
}
|
|
38168
|
+
const descriptors = (selection || []).filter((descriptor) => Boolean(descriptor));
|
|
38169
|
+
if (descriptors.length === 0) {
|
|
38170
|
+
this.applySelectionState(selectionInstance, []);
|
|
38171
|
+
return;
|
|
38172
|
+
}
|
|
38173
|
+
const highlightItems = this.getHighlightItems(descriptors);
|
|
38174
|
+
if (!highlightItems.length) {
|
|
38175
|
+
this.applySelectionState(selectionInstance, []);
|
|
38176
|
+
return;
|
|
38177
|
+
}
|
|
38178
|
+
const hasCellSelections = highlightItems.some(item => isPresent$1(item.columnKey));
|
|
38179
|
+
const hasRowSelections = highlightItems.some(item => !isPresent$1(item.columnKey));
|
|
38180
|
+
const isCellMode = selectionInstance.isCellSelectionMode;
|
|
38181
|
+
if ((!isCellMode && hasCellSelections) || (isCellMode && hasRowSelections)) {
|
|
38182
|
+
const key = isCellMode ? 'aiAssistantSelectionCellModeRequired' : 'aiAssistantSelectionRowModeRequired';
|
|
38183
|
+
this.updateLastMessage(messages, this.ctx.localization?.get(key));
|
|
38184
|
+
return;
|
|
38185
|
+
}
|
|
38186
|
+
const selectionState = this.mapHighlightItemsToSelection(selectionInstance, highlightItems, isCellMode);
|
|
38187
|
+
this.applySelectionState(selectionInstance, selectionState);
|
|
38188
|
+
}
|
|
38189
|
+
mapHighlightItemsToSelection(selectionInstance, highlightItems, isCellMode) {
|
|
38190
|
+
const data = this.ctx.dataBindingDirective?.['originalData'] || [];
|
|
38191
|
+
if (isCellMode) {
|
|
38192
|
+
const mapped = highlightItems
|
|
38193
|
+
.filter(item => isPresent$1(item.itemKey) && isPresent$1(item.columnKey))
|
|
38194
|
+
.map(item => {
|
|
38195
|
+
const rowIndex = item.itemKey;
|
|
38196
|
+
const columnIndex = item.columnKey;
|
|
38197
|
+
const dataItem = data[rowIndex];
|
|
38198
|
+
if (!isPresent$1(dataItem)) {
|
|
38199
|
+
return null;
|
|
38200
|
+
}
|
|
38201
|
+
if (typeof selectionInstance['getSelectionItem'] === 'function') {
|
|
38202
|
+
const columnComponent = this.leafColumns[columnIndex];
|
|
38203
|
+
const selectionItem = selectionInstance['getSelectionItem']({ dataItem, index: rowIndex }, columnComponent, columnIndex);
|
|
38204
|
+
if (selectionItem && isPresent$1(selectionItem.itemKey) && isPresent$1(selectionItem.columnKey)) {
|
|
38205
|
+
return selectionItem;
|
|
38206
|
+
}
|
|
38207
|
+
return null;
|
|
38208
|
+
}
|
|
38209
|
+
const itemKey = typeof selectionInstance.getItemKey === 'function'
|
|
38210
|
+
? selectionInstance.getItemKey({ dataItem, index: rowIndex })
|
|
38211
|
+
: rowIndex;
|
|
38212
|
+
return isPresent$1(itemKey) ? { itemKey, columnKey: columnIndex } : null;
|
|
38213
|
+
})
|
|
38214
|
+
.filter((item) => isPresent$1(item));
|
|
38215
|
+
return mapped.filter((item, index, self) => self.findIndex(other => other.itemKey === item.itemKey && other.columnKey === item.columnKey) === index);
|
|
38216
|
+
}
|
|
38217
|
+
const rowKeys = highlightItems
|
|
38218
|
+
.filter(item => isPresent$1(item.itemKey))
|
|
38219
|
+
.map(item => {
|
|
38220
|
+
const rowIndex = item.itemKey;
|
|
38221
|
+
const dataItem = data[rowIndex];
|
|
38222
|
+
if (!isPresent$1(dataItem)) {
|
|
38223
|
+
return null;
|
|
38224
|
+
}
|
|
38225
|
+
if (typeof selectionInstance.getItemKey === 'function') {
|
|
38226
|
+
return selectionInstance.getItemKey({ dataItem, index: rowIndex });
|
|
38227
|
+
}
|
|
38228
|
+
return rowIndex;
|
|
38229
|
+
})
|
|
38230
|
+
.filter(isPresent$1);
|
|
38231
|
+
return Array.from(new Set(rowKeys));
|
|
38232
|
+
}
|
|
38233
|
+
applySelectionState(selectionInstance, selectionState) {
|
|
38234
|
+
selectionInstance.selectedKeys = selectionState;
|
|
38235
|
+
if (typeof selectionInstance['setState'] === 'function') {
|
|
38236
|
+
selectionInstance['setState'](selectionState);
|
|
38237
|
+
}
|
|
38238
|
+
const changeDetector = selectionInstance['cd'];
|
|
38239
|
+
if (changeDetector && typeof changeDetector.markForCheck === 'function') {
|
|
38240
|
+
changeDetector.markForCheck();
|
|
38241
|
+
}
|
|
38242
|
+
if (typeof selectionInstance['notifyChange'] === 'function') {
|
|
38243
|
+
selectionInstance['notifyChange']();
|
|
38244
|
+
}
|
|
38245
|
+
}
|
|
38246
|
+
replaceQuotedColumnId(message, replacement) {
|
|
38247
|
+
if (!replacement) {
|
|
38248
|
+
const columnIdPattern = /(?:"|")(k-grid\d+-col\d+)(?:"|")\s*/g;
|
|
38249
|
+
return message.replace(columnIdPattern, '').replace(/\s{2,}/g, ' ').trim();
|
|
38250
|
+
}
|
|
38251
|
+
const columnIdPattern = /(?:"|")(k-grid\d+-col\d+)(?:"|")/g;
|
|
38252
|
+
return message.replace(columnIdPattern, (match) => {
|
|
38253
|
+
const isEncoded = match.startsWith('"');
|
|
38254
|
+
return isEncoded ? `"${replacement}"` : `"${replacement}"`;
|
|
38255
|
+
});
|
|
38256
|
+
}
|
|
38257
|
+
isColumnCommand(type) {
|
|
38258
|
+
return type === 'GridColumnResize' ||
|
|
38259
|
+
type === 'GridColumnReorder' ||
|
|
38260
|
+
type === 'GridColumnShow' ||
|
|
38261
|
+
type === 'GridColumnHide' ||
|
|
38262
|
+
type === 'GridColumnLock' ||
|
|
38263
|
+
type === 'GridColumnUnlock';
|
|
38264
|
+
}
|
|
38265
|
+
getColumnReplacement(column) {
|
|
38266
|
+
if (!column) {
|
|
38267
|
+
return '';
|
|
38268
|
+
}
|
|
38269
|
+
if (column.title && String(column.title).trim()) {
|
|
38270
|
+
return String(column.title).trim();
|
|
38271
|
+
}
|
|
38272
|
+
if (column.field && String(column.field).trim()) {
|
|
38273
|
+
return String(column.field).trim();
|
|
38274
|
+
}
|
|
38275
|
+
return '';
|
|
38276
|
+
}
|
|
38277
|
+
processHighlightResponse(highlight) {
|
|
38278
|
+
const highlightedItems = this.getHighlightItems(highlight);
|
|
37604
38279
|
this.ctx.highlightDirective['setState'](highlightedItems);
|
|
37605
38280
|
}
|
|
37606
38281
|
processFilterResponse(filter) {
|
|
@@ -38557,5 +39232,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
38557
39232
|
* Generated bundle index. Do not edit.
|
|
38558
39233
|
*/
|
|
38559
39234
|
|
|
38560
|
-
export { AIAssistantToolbarDirective, AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CancelCommandToolbarDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnListComponent, ColumnLockedChangeEvent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuContainerComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuPositionComponent, ColumnMenuService, ColumnMenuSortComponent, ColumnMenuStickComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnReorderService, ColumnResizingService, ColumnStickyChangeEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, ContextService, CustomMessagesComponent, DEFAULT_AI_REQUEST_OPTIONS, DEFAULT_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditCommandToolbarDirective, EditService as EditServiceClass, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterCommandToolbarDirective, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective,
|
|
39235
|
+
export { AIAssistantToolbarDirective, AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CancelCommandToolbarDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnListComponent, ColumnLockedChangeEvent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuContainerComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuPositionComponent, ColumnMenuService, ColumnMenuSortComponent, ColumnMenuStickComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnReorderService, ColumnResizingService, ColumnStickyChangeEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, ContextService, CustomMessagesComponent, DEFAULT_AI_REQUEST_OPTIONS, DEFAULT_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditCommandToolbarDirective, EditService as EditServiceClass, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterCommandToolbarDirective, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridAIAssistantResponseErrorEvent, GridAIAssistantResponseSuccessEvent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarFocusableDirective, GridToolbarNavigationService, GroupCommandToolbarDirective, GroupFooterTemplateDirective, GroupHeaderColumnTemplateDirective, GroupHeaderComponent, GroupHeaderTemplateDirective, GroupInfoService, GroupPanelComponent, GroupsService, HeaderComponent, HeaderTemplateDirective, HighlightDirective, IdService, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, KENDO_GRID, KENDO_GRID_BODY_EXPORTS, KENDO_GRID_COLUMN_DRAGANDDROP, KENDO_GRID_COLUMN_MENU_DECLARATIONS, KENDO_GRID_COLUMN_MENU_EXPORTS, KENDO_GRID_DECLARATIONS, KENDO_GRID_EXCEL_EXPORT, KENDO_GRID_EXPORTS, KENDO_GRID_FILTER_MENU, KENDO_GRID_FILTER_MENU_EXPORTS, KENDO_GRID_FILTER_OPERATORS, KENDO_GRID_FILTER_ROW, KENDO_GRID_FILTER_ROW_EXPORTS, KENDO_GRID_FILTER_SHARED, KENDO_GRID_FOOTER_EXPORTS, KENDO_GRID_GROUP_EXPORTS, KENDO_GRID_HEADER_EXPORTS, KENDO_GRID_PDF_EXPORT, KENDO_GRID_SHARED, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, ListComponent, LoadingComponent, LoadingTemplateDirective, LocalDataChangesService, LogicalCellDirective, LogicalRowDirective, MenuTabbingService, MultiCheckboxFilterComponent, NavigationService, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFCommandToolbarDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RedoCommandToolbarDirective, RemoveCommandDirective, RemoveCommandToolbarDirective, ResizableContainerDirective, ResizeService, ResponsiveService, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, RowEditingDirectiveBase, RowReorderColumnComponent, RowReorderService, SaveCommandDirective, SaveCommandToolbarDirective, ScrollRequestService, ScrollSyncService, SelectAllCheckboxDirective, SelectAllToolbarToolComponent, SelectionCheckboxDirective, SelectionDirective, SelectionService, SinglePopupService, SizingOptionsService, Skip, SortCommandToolbarDirective, SortService, SpanColumnComponent, StartsWithFilterOperatorComponent, StatusBarTemplateDirective, StringFilterCellComponent, StringFilterComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, UndoCommandToolbarDirective, UndoRedoDirective, UndoRedoEvent, defaultTrackBy, hasFilterMenu, hasFilterRow, isFilterable };
|
|
38561
39236
|
|