@progress/kendo-angular-grid 23.0.1 → 23.1.0-develop.1
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/columns/column-base.d.ts +3 -0
- package/databinding.directive.d.ts +1 -0
- package/editing/form/models.d.ts +3 -0
- package/fesm2022/progress-kendo-angular-grid.mjs +284 -35
- package/grid.component.d.ts +10 -1
- package/navigation/focusable.directive.d.ts +1 -0
- package/package-metadata.mjs +2 -2
- package/package.json +24 -24
- package/rendering/list.component.d.ts +13 -0
- package/rendering/toolbar/toolbar-focusable.directive.d.ts +3 -0
- package/rendering/toolbar/tools/smartbox/search.service.d.ts +8 -0
- package/rendering/toolbar/tools/smartbox/segmented-control/segmented-control.component.d.ts +1 -1
- package/rendering/toolbar/tools/smartbox/smartbox-component/smartbox.component.d.ts +2 -0
- package/schematics/ngAdd/index.js +7 -7
- package/state-management/grid-state.models.d.ts +6 -2
package/columns/column-base.d.ts
CHANGED
|
@@ -168,6 +168,9 @@ export declare class ColumnBase implements AfterViewInit {
|
|
|
168
168
|
/**
|
|
169
169
|
* Sets the `role` attribute for the table cells (excluding footer and header) of the column.
|
|
170
170
|
* @default "gridcell"
|
|
171
|
+
*
|
|
172
|
+
* @remarks
|
|
173
|
+
* This property is related to accessibility.
|
|
171
174
|
*/
|
|
172
175
|
tableCellsRole: string;
|
|
173
176
|
/**
|
|
@@ -68,6 +68,7 @@ export declare class DataBindingDirective implements OnInit, OnDestroy, DoCheck,
|
|
|
68
68
|
protected originalData: any[];
|
|
69
69
|
protected dataChanged: boolean;
|
|
70
70
|
private stateChangeSubscription;
|
|
71
|
+
private gridStateChangeSubscription;
|
|
71
72
|
private dataChangedSubscription;
|
|
72
73
|
private rowReorderSubscription;
|
|
73
74
|
private searchSubscription;
|
package/editing/form/models.d.ts
CHANGED
|
@@ -120,6 +120,9 @@ export interface FormDialogSettings {
|
|
|
120
120
|
animation?: boolean | DialogAnimation;
|
|
121
121
|
/**
|
|
122
122
|
* Sets the HTML attributes of the Dialog wrapper element. Accepts string key-value pairs.
|
|
123
|
+
*
|
|
124
|
+
* @remarks
|
|
125
|
+
* This option is related to accessibility.
|
|
123
126
|
*/
|
|
124
127
|
htmlAttributes?: {
|
|
125
128
|
[key: string]: string;
|
|
@@ -912,6 +912,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
912
912
|
* </kendo-grid>
|
|
913
913
|
* ```
|
|
914
914
|
* @remarks
|
|
915
|
+
* This directive is related to accessibility.
|
|
915
916
|
* Applied to: {@link ButtonComponent}, {@link TextBoxComponent}, {@link NumericTextBoxComponent}, {@link DateInputComponent}, {@link DatePickerComponent}, {@link DateTimePicker}, {@link TextAreaComponent}, {@link ColorPickerComponent}, {@link DropDownListComponent}, {@link ComboBoxComponent}, {@link AutoCompleteComponent}.
|
|
916
917
|
*/
|
|
917
918
|
class FocusableDirective {
|
|
@@ -2399,6 +2400,9 @@ class ColumnBase {
|
|
|
2399
2400
|
/**
|
|
2400
2401
|
* Sets the `role` attribute for the table cells (excluding footer and header) of the column.
|
|
2401
2402
|
* @default "gridcell"
|
|
2403
|
+
*
|
|
2404
|
+
* @remarks
|
|
2405
|
+
* This property is related to accessibility.
|
|
2402
2406
|
*/
|
|
2403
2407
|
tableCellsRole = 'gridcell';
|
|
2404
2408
|
/**
|
|
@@ -3768,6 +3772,17 @@ class NavigationService {
|
|
|
3768
3772
|
el !== cell.element;
|
|
3769
3773
|
if (focusInCell) {
|
|
3770
3774
|
this.mode = 2 /* NavigationMode.Content */;
|
|
3775
|
+
// Skip cursor.reset when clicking focusable children in detail template cells
|
|
3776
|
+
// to prevent scroll and focus stealing - let the browser handle focus naturally
|
|
3777
|
+
// Use cursor.assume to update position without announcing (which triggers scroll)
|
|
3778
|
+
// Only apply to detail cells (k-detail-cell), not filter cells or nested grids
|
|
3779
|
+
const isDetailCell = cell.element.classList.contains('k-detail-cell');
|
|
3780
|
+
if (isDetailCell && el !== cell.element && isInSameGrid(el, this.meta.gridElement.nativeElement)) {
|
|
3781
|
+
this.cursor.assume(cell.rowIndex, cell.colIndex);
|
|
3782
|
+
this.activeRowIndex = cell.rowIndex;
|
|
3783
|
+
this.activateRow();
|
|
3784
|
+
return;
|
|
3785
|
+
}
|
|
3771
3786
|
this.cursor.reset(cell.rowIndex, cell.colIndex);
|
|
3772
3787
|
this.activateRow();
|
|
3773
3788
|
}
|
|
@@ -4197,6 +4212,24 @@ class NavigationService {
|
|
|
4197
4212
|
}
|
|
4198
4213
|
// on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
|
|
4199
4214
|
const code = normalizeKeys(args);
|
|
4215
|
+
// Check if we're in a detail template cell (k-detail-cell)
|
|
4216
|
+
// For detail cells, only handle Escape to return focus to cell, let other keys fall through naturally
|
|
4217
|
+
const cellElement = gridCell(document.activeElement, this.meta.gridElement.nativeElement);
|
|
4218
|
+
const isDetailCell = cellElement?.classList.contains('k-detail-cell');
|
|
4219
|
+
if (isDetailCell) {
|
|
4220
|
+
if (code === Keys.Escape && document.activeElement instanceof HTMLElement) {
|
|
4221
|
+
this.leaveCell();
|
|
4222
|
+
const cellElement = gridCell(document.activeElement, this.meta.gridElement.nativeElement);
|
|
4223
|
+
if (cellElement) {
|
|
4224
|
+
const cell = targetCell(cellElement, this.meta.gridElement.nativeElement);
|
|
4225
|
+
if (cell) {
|
|
4226
|
+
this.cursor.reset(cell.rowIndex, cell.colIndex);
|
|
4227
|
+
args.stopPropagation();
|
|
4228
|
+
}
|
|
4229
|
+
}
|
|
4230
|
+
}
|
|
4231
|
+
return;
|
|
4232
|
+
}
|
|
4200
4233
|
const confirm = !args.defaultPrevented && code === Keys.Enter && isTextInput(args.target);
|
|
4201
4234
|
if (code === Keys.Escape || code === Keys.F2 || confirm) {
|
|
4202
4235
|
if (this.tableCellEntered && code === Keys.F2 && this.activeRow.dataRowIndex > -1) {
|
|
@@ -4210,7 +4243,7 @@ class NavigationService {
|
|
|
4210
4243
|
this.cursor.reset();
|
|
4211
4244
|
args.stopPropagation();
|
|
4212
4245
|
}
|
|
4213
|
-
else if (isNavigationKey(code) && this.cursor.cell
|
|
4246
|
+
else if (isNavigationKey(code) && this.cursor.cell?.focusGroup?.isNavigable()) {
|
|
4214
4247
|
this.onCursorKeydown(args);
|
|
4215
4248
|
if (args.defaultPrevented) {
|
|
4216
4249
|
this.leaveCell();
|
|
@@ -24136,7 +24169,7 @@ const packageMetadata = {
|
|
|
24136
24169
|
productCode: 'KENDOUIANGULAR',
|
|
24137
24170
|
productCodes: ['KENDOUIANGULAR'],
|
|
24138
24171
|
publishDate: 0,
|
|
24139
|
-
version: '23.0.1',
|
|
24172
|
+
version: '23.1.0-develop.1',
|
|
24140
24173
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
|
|
24141
24174
|
};
|
|
24142
24175
|
|
|
@@ -26851,6 +26884,15 @@ class ScrollerService {
|
|
|
26851
26884
|
this.firstToLoad = Math.max(firstItemIndex - nonVisibleBuffer, 0);
|
|
26852
26885
|
this.loadPage(observer);
|
|
26853
26886
|
}
|
|
26887
|
+
else if (up && this.ctx.grid?.pageable && firstItemIndex < this.virtualSkip) {
|
|
26888
|
+
// Handle rapid scroll to top: sync virtualSkip and offset when scrolled above current virtual position
|
|
26889
|
+
// This prevents blank grid when virtualSkip/offset are out of sync with actual scroll position
|
|
26890
|
+
const nonVisibleBuffer = Math.max(Math.floor((this.virtualPageSize || this.take) * 0.3) - overflow, 0);
|
|
26891
|
+
this.firstToLoad = Math.max(firstItemIndex - nonVisibleBuffer, 0);
|
|
26892
|
+
this.virtualPageChange(this.firstToLoad, observer);
|
|
26893
|
+
this.translate(this.rowHeightService.offset(this.firstToLoad));
|
|
26894
|
+
observer.next(new ScrollAction(this.rowHeightService.offset(this.firstToLoad)));
|
|
26895
|
+
}
|
|
26854
26896
|
}
|
|
26855
26897
|
loadPage(observer) {
|
|
26856
26898
|
if (!this.rowHeightService) {
|
|
@@ -27334,6 +27376,7 @@ class ListComponent {
|
|
|
27334
27376
|
table;
|
|
27335
27377
|
resizeSensors = new QueryList();
|
|
27336
27378
|
scroller;
|
|
27379
|
+
scrollerFactory;
|
|
27337
27380
|
subscriptions;
|
|
27338
27381
|
scrollerSubscription;
|
|
27339
27382
|
dispatcher = new Subject();
|
|
@@ -27398,6 +27441,7 @@ class ListComponent {
|
|
|
27398
27441
|
this.pdfService = pdfService;
|
|
27399
27442
|
this.columnInfo = columnInfo;
|
|
27400
27443
|
this.dataMappingService = dataMappingService;
|
|
27444
|
+
this.scrollerFactory = scrollerFactory;
|
|
27401
27445
|
this.scroller = this.ctx.scroller = scrollerFactory(this.dispatcher, this.ctx);
|
|
27402
27446
|
this.subscriptions = detailsService.changes.subscribe(() => this.detailExpand());
|
|
27403
27447
|
this.subscriptions.add(scrollRequestService.requests.subscribe(req => isPresent(req.adjustIndex) ? this.scrollTo(req.request, req.adjustIndex) : this.scrollToItem(req.request)));
|
|
@@ -27476,10 +27520,18 @@ class ListComponent {
|
|
|
27476
27520
|
}
|
|
27477
27521
|
const shouldCalculatePageSize = isDocumentAvailable() && this.isVirtual && !isPresent(this.virtualPageSize) && (!isPresent(this.ctx.grid?.pageSize) || this.ctx.grid?.pageable);
|
|
27478
27522
|
const previousTotal = this.allItems.length;
|
|
27523
|
+
const previousFirstDataItem = this.allItems[0]?.data;
|
|
27479
27524
|
this.allItems = this.dataMappingService.dataMapper(this.data, this.nonLockedColumnsToRender, this.lockedLeafColumns, this.detailTemplate, this.showFooter);
|
|
27480
27525
|
const totalChanged = previousTotal !== this.allItems.length;
|
|
27481
27526
|
const totalIncreased = this.allItems.length > previousTotal;
|
|
27482
|
-
|
|
27527
|
+
const dataContentChanged = this.allItems.length > 0 && this.allItems[0]?.data !== previousFirstDataItem;
|
|
27528
|
+
// For virtual + pageable without grouping: update itemsToRender when data content changes
|
|
27529
|
+
// This handles remote data scenarios where data arrives asynchronously after page change
|
|
27530
|
+
if (dataContentChanged && this.isVirtual && this.ctx.grid?.pageable && !this.ctx.grid?.group?.length && this.virtualPageSize) {
|
|
27531
|
+
this.scroller.virtualSkip = 0;
|
|
27532
|
+
this.itemsToRender = this.allItems.slice(0, this.virtualPageSize);
|
|
27533
|
+
}
|
|
27534
|
+
else if (this.totalIsAllItems && totalChanged) {
|
|
27483
27535
|
this.scroller.reset(this.skipScroll);
|
|
27484
27536
|
this.scroller.total = this.allItems.length;
|
|
27485
27537
|
this.itemsToRender = this.allItems.slice(this.scroller.virtualSkip, this.scroller.virtualSkip + this.virtualPageSize);
|
|
@@ -27623,6 +27675,52 @@ class ListComponent {
|
|
|
27623
27675
|
}
|
|
27624
27676
|
}
|
|
27625
27677
|
}
|
|
27678
|
+
/**
|
|
27679
|
+
* Resets all virtual scrolling state when the data source changes.
|
|
27680
|
+
* Recreates everything as if the grid was just initialized for the first time.
|
|
27681
|
+
* @hidden
|
|
27682
|
+
*/
|
|
27683
|
+
resetVirtualScroll(newTotal) {
|
|
27684
|
+
if (!this.isVirtual) {
|
|
27685
|
+
return;
|
|
27686
|
+
}
|
|
27687
|
+
this.skip = 0;
|
|
27688
|
+
this.skipScroll = false;
|
|
27689
|
+
this.containerScrollTop = 0;
|
|
27690
|
+
this.rebind = false;
|
|
27691
|
+
this.scroller.destroy();
|
|
27692
|
+
this.scroller = this.ctx.scroller = this.scrollerFactory(this.dispatcher, this.ctx);
|
|
27693
|
+
if (!this.virtualPageSize) {
|
|
27694
|
+
this.virtualPageSize = this.calcVirtualPageSize();
|
|
27695
|
+
}
|
|
27696
|
+
const rowHeightTotal = this.ctx.grid?.pageable ? this.ctx.grid.pageSize : newTotal;
|
|
27697
|
+
this.rowHeightService = this.scroller.rowHeightService = new RowHeightService(rowHeightTotal, this.rowHeight || this.minRowHeight);
|
|
27698
|
+
if (this.container?.nativeElement) {
|
|
27699
|
+
this.container.nativeElement.scrollTop = 0;
|
|
27700
|
+
}
|
|
27701
|
+
if (this.lockedContainer?.nativeElement) {
|
|
27702
|
+
this.lockedContainer.nativeElement.scrollTop = 0;
|
|
27703
|
+
}
|
|
27704
|
+
if (this.table?.nativeElement) {
|
|
27705
|
+
this.table.nativeElement.style.transform = 'translateY(0px)';
|
|
27706
|
+
}
|
|
27707
|
+
if (this.lockedTable?.nativeElement) {
|
|
27708
|
+
this.lockedTable.nativeElement.style.transform = 'translateY(0px)';
|
|
27709
|
+
}
|
|
27710
|
+
this.setScrollerOptions();
|
|
27711
|
+
this.ngZone.runOutsideAngular(this.createScroller.bind(this));
|
|
27712
|
+
}
|
|
27713
|
+
/**
|
|
27714
|
+
* Checks if the virtual scroll state is out of sync with the expected position.
|
|
27715
|
+
* Used to determine if resetVirtualScroll should be called.
|
|
27716
|
+
* @hidden
|
|
27717
|
+
*/
|
|
27718
|
+
isVirtualScrollOutOfSync() {
|
|
27719
|
+
if (!this.isVirtual || !this.scroller) {
|
|
27720
|
+
return false;
|
|
27721
|
+
}
|
|
27722
|
+
return this.scroller.virtualSkip > 0 || this.scroller.tableTransformOffset > 0;
|
|
27723
|
+
}
|
|
27626
27724
|
lockedScroll() {
|
|
27627
27725
|
if (!this.suspendService.scroll) {
|
|
27628
27726
|
const lockedScrollTop = this.lockedContainer.nativeElement.scrollTop;
|
|
@@ -27786,6 +27884,25 @@ class ListComponent {
|
|
|
27786
27884
|
if (this.lockedContainer) {
|
|
27787
27885
|
this.lockedContainer.nativeElement.scrollTop = scrollTop;
|
|
27788
27886
|
}
|
|
27887
|
+
// Sync translateY offset during rapid scrolling with virtual+paging to prevent blank grid
|
|
27888
|
+
if (this.isVirtual && this.ctx.grid?.pageable && this.scroller.rowHeightService) {
|
|
27889
|
+
const expectedFirstIndex = this.scroller.rowHeightService.index(scrollTop);
|
|
27890
|
+
const expectedOffset = this.scroller.rowHeightService.offset(expectedFirstIndex);
|
|
27891
|
+
const currentOffset = this.scroller.tableTransformOffset;
|
|
27892
|
+
// If the offset is significantly out of sync (more than one row height difference), resync
|
|
27893
|
+
const rowHeight = this.rowHeight || this.minRowHeight || 36;
|
|
27894
|
+
if (Math.abs(currentOffset - expectedOffset) > rowHeight) {
|
|
27895
|
+
this.scroller.virtualSkip = expectedFirstIndex;
|
|
27896
|
+
this.scroller.tableTransformOffset = expectedOffset;
|
|
27897
|
+
[
|
|
27898
|
+
maybeNativeElement(this.table),
|
|
27899
|
+
maybeNativeElement(this.lockedTable)
|
|
27900
|
+
].filter(isPresent).forEach(translateY(this.renderer, expectedOffset));
|
|
27901
|
+
if (this.virtualPageSize) {
|
|
27902
|
+
this.ngZone.run(() => this.itemsToRender = this.allItems.slice(expectedFirstIndex, expectedFirstIndex + this.virtualPageSize));
|
|
27903
|
+
}
|
|
27904
|
+
}
|
|
27905
|
+
}
|
|
27789
27906
|
}
|
|
27790
27907
|
handleRowSync() {
|
|
27791
27908
|
const isLocked = () => isPresent(this.lockedContainer);
|
|
@@ -32060,12 +32177,28 @@ class SearchService {
|
|
|
32060
32177
|
* Fires when the search descriptor is set.
|
|
32061
32178
|
*/
|
|
32062
32179
|
changes = new Subject();
|
|
32180
|
+
/**
|
|
32181
|
+
* The descriptor used for searching.
|
|
32182
|
+
*/
|
|
32183
|
+
searchFilter;
|
|
32184
|
+
/**
|
|
32185
|
+
* The value used for searching.
|
|
32186
|
+
*/
|
|
32187
|
+
searchValue;
|
|
32063
32188
|
/**
|
|
32064
32189
|
* Sets the search descriptor.
|
|
32065
32190
|
*
|
|
32066
32191
|
* @param {CompositeFilterDescriptor} value - The search descriptor to set.
|
|
32067
32192
|
*/
|
|
32068
32193
|
search(value) {
|
|
32194
|
+
if (!value) {
|
|
32195
|
+
this.searchValue = '';
|
|
32196
|
+
}
|
|
32197
|
+
else {
|
|
32198
|
+
const flattenDescriptors = flatten(value);
|
|
32199
|
+
this.searchValue = flattenDescriptors[0] ? flattenDescriptors[0].value : '';
|
|
32200
|
+
}
|
|
32201
|
+
this.searchFilter = value;
|
|
32069
32202
|
this.changes.next(value);
|
|
32070
32203
|
}
|
|
32071
32204
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -32159,6 +32292,7 @@ class GridComponent {
|
|
|
32159
32292
|
dataMappingService;
|
|
32160
32293
|
aiRequestResponseService;
|
|
32161
32294
|
idService;
|
|
32295
|
+
searchService;
|
|
32162
32296
|
/**
|
|
32163
32297
|
* Sets the data of the Grid. If you provide an array, the Grid gets the total count automatically.
|
|
32164
32298
|
* ([more information and example](https://www.telerik.com/kendo-angular-ui/components/grid/data-binding/basics)).
|
|
@@ -32453,6 +32587,9 @@ class GridComponent {
|
|
|
32453
32587
|
/**
|
|
32454
32588
|
* By default, navigation is enabled. To disable, set to `false`.
|
|
32455
32589
|
* To enable navigation for specific sections, provide a [`GridNavigableSection`](https://www.telerik.com/kendo-angular-ui/components/grid/api/gridnavigablesection).
|
|
32590
|
+
*
|
|
32591
|
+
* @remarks
|
|
32592
|
+
* This property is related to accessibility.
|
|
32456
32593
|
*/
|
|
32457
32594
|
set navigable(value) {
|
|
32458
32595
|
if (typeof value === 'boolean') {
|
|
@@ -32573,7 +32710,8 @@ class GridComponent {
|
|
|
32573
32710
|
skip: this.skip,
|
|
32574
32711
|
take: this.pageSize,
|
|
32575
32712
|
columnsState: this.columns.toArray().flatMap(recursiveColumnsFlatMap),
|
|
32576
|
-
currentData: structuredClone(this.data)
|
|
32713
|
+
currentData: structuredClone(this.data),
|
|
32714
|
+
searchFilter: this.searchService?.searchFilter
|
|
32577
32715
|
};
|
|
32578
32716
|
}
|
|
32579
32717
|
/**
|
|
@@ -33125,7 +33263,7 @@ class GridComponent {
|
|
|
33125
33263
|
rowReorderSubscription;
|
|
33126
33264
|
rtl = false;
|
|
33127
33265
|
_rowSticky;
|
|
33128
|
-
constructor(supportService, selectionService, cellSelectionService, wrapper, groupInfoService, groupsService, changeNotification, detailsService, editService, filterService, pdfService, responsiveService, renderer, excelService, csvService, ngZone, scrollSyncService, domEvents, columnResizingService, changeDetectorRef, columnReorderService, columnInfoService, navigationService, sortService, scrollRequestService, localization, ctx, sizingService, adaptiveGridService, rowReorderService, dataMappingService, aiRequestResponseService, idService) {
|
|
33266
|
+
constructor(supportService, selectionService, cellSelectionService, wrapper, groupInfoService, groupsService, changeNotification, detailsService, editService, filterService, pdfService, responsiveService, renderer, excelService, csvService, ngZone, scrollSyncService, domEvents, columnResizingService, changeDetectorRef, columnReorderService, columnInfoService, navigationService, sortService, scrollRequestService, localization, ctx, sizingService, adaptiveGridService, rowReorderService, dataMappingService, aiRequestResponseService, idService, searchService) {
|
|
33129
33267
|
this.supportService = supportService;
|
|
33130
33268
|
this.selectionService = selectionService;
|
|
33131
33269
|
this.cellSelectionService = cellSelectionService;
|
|
@@ -33159,6 +33297,7 @@ class GridComponent {
|
|
|
33159
33297
|
this.dataMappingService = dataMappingService;
|
|
33160
33298
|
this.aiRequestResponseService = aiRequestResponseService;
|
|
33161
33299
|
this.idService = idService;
|
|
33300
|
+
this.searchService = searchService;
|
|
33162
33301
|
const isValid = validatePackage(packageMetadata);
|
|
33163
33302
|
this.licenseMessage = getLicenseMessage(packageMetadata);
|
|
33164
33303
|
this.showLicenseWatermark = shouldShowValidationUI(isValid);
|
|
@@ -33298,6 +33437,12 @@ class GridComponent {
|
|
|
33298
33437
|
const leafColumns = this.columnInfoService.leafNamedColumns || [];
|
|
33299
33438
|
this.aiRequestResponseService.processCommands(response.commands || [], columns, leafColumns);
|
|
33300
33439
|
}
|
|
33440
|
+
/**
|
|
33441
|
+
* Clears the search operation applied through the SmartBox tool.
|
|
33442
|
+
*/
|
|
33443
|
+
clearSearch() {
|
|
33444
|
+
this.searchService?.search(undefined);
|
|
33445
|
+
}
|
|
33301
33446
|
/**
|
|
33302
33447
|
* @hidden
|
|
33303
33448
|
*/
|
|
@@ -33319,6 +33464,12 @@ class GridComponent {
|
|
|
33319
33464
|
ngOnChanges(changes) {
|
|
33320
33465
|
if (isChanged$1("data", changes)) {
|
|
33321
33466
|
this.onDataChange();
|
|
33467
|
+
if (this.isVirtual && this.pageable && this.listComponent && this.skip === 0) {
|
|
33468
|
+
if (this.listComponent.isVirtualScrollOutOfSync()) {
|
|
33469
|
+
const total = this._data?.total ?? this._data?.length ?? 0;
|
|
33470
|
+
this.listComponent.resetVirtualScroll(total);
|
|
33471
|
+
}
|
|
33472
|
+
}
|
|
33322
33473
|
}
|
|
33323
33474
|
if (this.lockedLeafColumns.length && anyChanged(["pageSize", "skip", "sort", "group"], changes)) {
|
|
33324
33475
|
this.changeNotification.notify();
|
|
@@ -33682,6 +33833,9 @@ class GridComponent {
|
|
|
33682
33833
|
this.filter = state.filter;
|
|
33683
33834
|
this.skip = state.skip;
|
|
33684
33835
|
this.pageSize = state.take;
|
|
33836
|
+
if (this.searchService && !areObjectsEqual(state.searchFilter || {}, this.searchService.searchFilter || {})) {
|
|
33837
|
+
this.searchService.search(state.searchFilter);
|
|
33838
|
+
}
|
|
33685
33839
|
if (state.currentData) {
|
|
33686
33840
|
this.data = state.currentData;
|
|
33687
33841
|
}
|
|
@@ -34178,6 +34332,11 @@ class GridComponent {
|
|
|
34178
34332
|
this.listComponent?.resetNavigationViewport();
|
|
34179
34333
|
}
|
|
34180
34334
|
})));
|
|
34335
|
+
if (this.searchService) {
|
|
34336
|
+
this.stateChangeSubscription.add(this.searchService.changes.subscribe(() => this.ngZone.run(() => {
|
|
34337
|
+
hasObservers(this.gridStateChange) && this.gridStateChange.emit(this.currentState);
|
|
34338
|
+
})));
|
|
34339
|
+
}
|
|
34181
34340
|
}
|
|
34182
34341
|
attachEditHandlers() {
|
|
34183
34342
|
if (!this.editService) {
|
|
@@ -34485,7 +34644,7 @@ class GridComponent {
|
|
|
34485
34644
|
this.dragTargetContainer?.notify();
|
|
34486
34645
|
this.dropTargetContainer?.notify();
|
|
34487
34646
|
}
|
|
34488
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: GridComponent, deps: [{ token: BrowserSupportService }, { token: SelectionService }, { token: CellSelectionService }, { token: i0.ElementRef }, { token: GroupInfoService }, { token: GroupsService }, { token: ChangeNotificationService }, { token: DetailsService }, { token: EditService }, { token: FilterService }, { token: PDFService }, { token: ResponsiveService }, { token: i0.Renderer2 }, { token: ExcelService }, { token: CSVService }, { token: i0.NgZone }, { token: ScrollSyncService }, { token: DomEventsService }, { token: ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: ColumnReorderService }, { token: ColumnInfoService }, { token: NavigationService }, { token: SortService }, { token: ScrollRequestService }, { token: i1$2.LocalizationService }, { token: ContextService }, { token: SizingOptionsService }, { token: AdaptiveGridService }, { token: RowReorderService }, { token: DataMappingService }, { token: GridAIRequestResponseService }, { token: IdService }], target: i0.ɵɵFactoryTarget.Component });
|
|
34647
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: GridComponent, deps: [{ token: BrowserSupportService }, { token: SelectionService }, { token: CellSelectionService }, { token: i0.ElementRef }, { token: GroupInfoService }, { token: GroupsService }, { token: ChangeNotificationService }, { token: DetailsService }, { token: EditService }, { token: FilterService }, { token: PDFService }, { token: ResponsiveService }, { token: i0.Renderer2 }, { token: ExcelService }, { token: CSVService }, { token: i0.NgZone }, { token: ScrollSyncService }, { token: DomEventsService }, { token: ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: ColumnReorderService }, { token: ColumnInfoService }, { token: NavigationService }, { token: SortService }, { token: ScrollRequestService }, { token: i1$2.LocalizationService }, { token: ContextService }, { token: SizingOptionsService }, { token: AdaptiveGridService }, { token: RowReorderService }, { token: DataMappingService }, { token: GridAIRequestResponseService }, { token: IdService }, { token: SearchService }], target: i0.ɵɵFactoryTarget.Component });
|
|
34489
34648
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: GridComponent, isStandalone: true, selector: "kendo-grid", inputs: { data: "data", pageSize: "pageSize", height: "height", rowHeight: "rowHeight", adaptiveMode: "adaptiveMode", detailRowHeight: "detailRowHeight", skip: "skip", scrollable: "scrollable", selectable: "selectable", sort: "sort", size: "size", trackBy: "trackBy", filter: "filter", group: "group", virtualColumns: "virtualColumns", filterable: "filterable", sortable: "sortable", pageable: "pageable", groupable: "groupable", gridResizable: "gridResizable", rowReorderable: "rowReorderable", navigable: "navigable", autoSize: "autoSize", rowClass: "rowClass", rowSticky: "rowSticky", rowSelected: "rowSelected", isRowSelectable: "isRowSelectable", cellSelected: "cellSelected", resizable: "resizable", reorderable: "reorderable", loading: "loading", columnMenu: "columnMenu", hideHeader: "hideHeader", showInactiveTools: "showInactiveTools", isDetailExpanded: "isDetailExpanded", isGroupExpanded: "isGroupExpanded", dataLayoutMode: "dataLayoutMode" }, outputs: { filterChange: "filterChange", pageChange: "pageChange", groupChange: "groupChange", sortChange: "sortChange", selectionChange: "selectionChange", rowReorder: "rowReorder", dataStateChange: "dataStateChange", gridStateChange: "gridStateChange", groupExpand: "groupExpand", groupCollapse: "groupCollapse", detailExpand: "detailExpand", detailCollapse: "detailCollapse", edit: "edit", cancel: "cancel", save: "save", remove: "remove", add: "add", cellClose: "cellClose", cellClick: "cellClick", pdfExport: "pdfExport", excelExport: "excelExport", csvExport: "csvExport", columnResize: "columnResize", columnReorder: "columnReorder", columnVisibilityChange: "columnVisibilityChange", columnLockedChange: "columnLockedChange", columnStickyChange: "columnStickyChange", scrollBottom: "scrollBottom", contentScroll: "contentScroll" }, host: { properties: { "attr.dir": "this.dir", "class.k-grid": "this.hostClass", "class.k-grid-sm": "this.sizeSmallClass", "class.k-grid-md": "this.sizeMediumClass", "class.k-grid-stack": "this.stackedClass", "class.k-grid-lockedcolumns": "this.lockedClasses", "class.k-grid-virtual": "this.virtualClasses", "class.k-grid-no-scrollbar": "this.noScrollbarClass", "class.k-grid-resizable": "this.isResizable", "style.minWidth": "this.minWidth", "style.maxWidth": "this.maxWidth", "style.minHeight": "this.minHeight", "style.maxHeight": "this.maxHeight" } }, providers: [
|
|
34490
34649
|
BrowserSupportService,
|
|
34491
34650
|
LocalizationService,
|
|
@@ -36465,7 +36624,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
36465
36624
|
ResizeSensorComponent
|
|
36466
36625
|
]
|
|
36467
36626
|
}]
|
|
36468
|
-
}], ctorParameters: () => [{ type: BrowserSupportService }, { type: SelectionService }, { type: CellSelectionService }, { type: i0.ElementRef }, { type: GroupInfoService }, { type: GroupsService }, { type: ChangeNotificationService }, { type: DetailsService }, { type: EditService }, { type: FilterService }, { type: PDFService }, { type: ResponsiveService }, { type: i0.Renderer2 }, { type: ExcelService }, { type: CSVService }, { type: i0.NgZone }, { type: ScrollSyncService }, { type: DomEventsService }, { type: ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: ColumnReorderService }, { type: ColumnInfoService }, { type: NavigationService }, { type: SortService }, { type: ScrollRequestService }, { type: i1$2.LocalizationService }, { type: ContextService }, { type: SizingOptionsService }, { type: AdaptiveGridService }, { type: RowReorderService }, { type: DataMappingService }, { type: GridAIRequestResponseService }, { type: IdService }], propDecorators: { data: [{
|
|
36627
|
+
}], ctorParameters: () => [{ type: BrowserSupportService }, { type: SelectionService }, { type: CellSelectionService }, { type: i0.ElementRef }, { type: GroupInfoService }, { type: GroupsService }, { type: ChangeNotificationService }, { type: DetailsService }, { type: EditService }, { type: FilterService }, { type: PDFService }, { type: ResponsiveService }, { type: i0.Renderer2 }, { type: ExcelService }, { type: CSVService }, { type: i0.NgZone }, { type: ScrollSyncService }, { type: DomEventsService }, { type: ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: ColumnReorderService }, { type: ColumnInfoService }, { type: NavigationService }, { type: SortService }, { type: ScrollRequestService }, { type: i1$2.LocalizationService }, { type: ContextService }, { type: SizingOptionsService }, { type: AdaptiveGridService }, { type: RowReorderService }, { type: DataMappingService }, { type: GridAIRequestResponseService }, { type: IdService }, { type: SearchService }], propDecorators: { data: [{
|
|
36469
36628
|
type: Input
|
|
36470
36629
|
}], pageSize: [{
|
|
36471
36630
|
type: Input
|
|
@@ -36820,6 +36979,7 @@ class DataBindingDirective {
|
|
|
36820
36979
|
originalData = [];
|
|
36821
36980
|
dataChanged;
|
|
36822
36981
|
stateChangeSubscription;
|
|
36982
|
+
gridStateChangeSubscription;
|
|
36823
36983
|
dataChangedSubscription;
|
|
36824
36984
|
rowReorderSubscription;
|
|
36825
36985
|
searchSubscription;
|
|
@@ -36843,6 +37003,9 @@ class DataBindingDirective {
|
|
|
36843
37003
|
this.stateChangeSubscription = this.grid
|
|
36844
37004
|
.dataStateChange
|
|
36845
37005
|
.subscribe(this.onStateChange.bind(this));
|
|
37006
|
+
this.gridStateChangeSubscription = this.grid
|
|
37007
|
+
.gridStateChange
|
|
37008
|
+
.subscribe(this.onStateChange.bind(this));
|
|
36846
37009
|
if (this.rowReorderService) {
|
|
36847
37010
|
this.rowReorderSubscription = this.grid
|
|
36848
37011
|
.rowReorder
|
|
@@ -36872,9 +37035,17 @@ class DataBindingDirective {
|
|
|
36872
37035
|
if (this.searchSubscription) {
|
|
36873
37036
|
this.searchSubscription.unsubscribe();
|
|
36874
37037
|
}
|
|
37038
|
+
if (this.gridStateChangeSubscription) {
|
|
37039
|
+
this.gridStateChangeSubscription.unsubscribe();
|
|
37040
|
+
}
|
|
36875
37041
|
}
|
|
36876
37042
|
ngOnChanges(changes) {
|
|
36877
37043
|
if (anyChanged(["pageSize", "skip", "sort", "group", "filter"], changes)) {
|
|
37044
|
+
// Reset skip to 0 when filter changes to avoid showing stale data
|
|
37045
|
+
if (isChanged$1("filter", changes)) {
|
|
37046
|
+
this.state.skip = 0;
|
|
37047
|
+
this.grid.skip = 0;
|
|
37048
|
+
}
|
|
36878
37049
|
this.rebind();
|
|
36879
37050
|
}
|
|
36880
37051
|
}
|
|
@@ -36902,9 +37073,17 @@ class DataBindingDirective {
|
|
|
36902
37073
|
*/
|
|
36903
37074
|
onSearch(searchFilter) {
|
|
36904
37075
|
this.searchFilter = searchFilter;
|
|
37076
|
+
this.state.skip = 0;
|
|
37077
|
+
this.grid.skip = 0;
|
|
36905
37078
|
const combinedFilter = this.combineFilters();
|
|
36906
37079
|
const state = { ...this.state, filter: combinedFilter };
|
|
36907
|
-
|
|
37080
|
+
const result = this.process(state);
|
|
37081
|
+
this.grid.data = result;
|
|
37082
|
+
if (this.grid.isVirtual && this.grid.pageable && this.grid.listComponent) {
|
|
37083
|
+
if (this.grid.listComponent.isVirtualScrollOutOfSync()) {
|
|
37084
|
+
this.grid.listComponent.resetVirtualScroll(result.total);
|
|
37085
|
+
}
|
|
37086
|
+
}
|
|
36908
37087
|
this.grid.updateNavigationMetadata();
|
|
36909
37088
|
this.grid.ngDoCheck();
|
|
36910
37089
|
this.dataChanged = false;
|
|
@@ -36915,12 +37094,32 @@ class DataBindingDirective {
|
|
|
36915
37094
|
rebind() {
|
|
36916
37095
|
this.data = this.originalData;
|
|
36917
37096
|
this.updateGridData();
|
|
36918
|
-
this.
|
|
37097
|
+
if (this.grid.isVirtual && this.grid.pageable && this.grid.listComponent && this.state.skip === 0) {
|
|
37098
|
+
if (this.grid.listComponent.isVirtualScrollOutOfSync()) {
|
|
37099
|
+
const result = this.grid.data;
|
|
37100
|
+
this.grid.listComponent.resetVirtualScroll(result?.total ?? 0);
|
|
37101
|
+
}
|
|
37102
|
+
}
|
|
37103
|
+
this.grid.onDataChange();
|
|
37104
|
+
if (this.changeDetector) {
|
|
37105
|
+
this.changeDetector.markForCheck();
|
|
37106
|
+
}
|
|
36919
37107
|
}
|
|
36920
37108
|
/**
|
|
36921
37109
|
* Notifies the Grid that its data has changed.
|
|
36922
37110
|
*/
|
|
36923
37111
|
notifyDataChange() {
|
|
37112
|
+
// Reset virtual scroll state completely when data changes
|
|
37113
|
+
if (this.grid.isVirtual && this.grid.listComponent) {
|
|
37114
|
+
this.state.skip = 0;
|
|
37115
|
+
this.grid.skip = 0;
|
|
37116
|
+
this.updateGridData();
|
|
37117
|
+
const newTotal = this.originalData?.length || 0;
|
|
37118
|
+
this.grid.listComponent.resetVirtualScroll(newTotal);
|
|
37119
|
+
}
|
|
37120
|
+
else if (this.dataChanged) {
|
|
37121
|
+
this.updateGridData();
|
|
37122
|
+
}
|
|
36924
37123
|
this.grid.onDataChange();
|
|
36925
37124
|
if (this.changeDetector) {
|
|
36926
37125
|
this.changeDetector.markForCheck();
|
|
@@ -36955,9 +37154,8 @@ class DataBindingDirective {
|
|
|
36955
37154
|
this.state.take = this.grid.pageSize;
|
|
36956
37155
|
}
|
|
36957
37156
|
}
|
|
36958
|
-
let combinedFilter = null;
|
|
36959
37157
|
if (this.searchFilter) {
|
|
36960
|
-
combinedFilter = this.combineFilters();
|
|
37158
|
+
const combinedFilter = this.combineFilters();
|
|
36961
37159
|
const state = { ...this.state, filter: combinedFilter };
|
|
36962
37160
|
this.grid.data = this.process(state);
|
|
36963
37161
|
}
|
|
@@ -37992,6 +38190,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
37992
38190
|
* <button kendoGridToolbarFocusable>Button</button>
|
|
37993
38191
|
* </kendo-toolbar>
|
|
37994
38192
|
* ```
|
|
38193
|
+
*
|
|
38194
|
+
* @remarks
|
|
38195
|
+
* This directive is related to accessibility.
|
|
37995
38196
|
*/
|
|
37996
38197
|
class GridToolbarFocusableDirective {
|
|
37997
38198
|
host;
|
|
@@ -38792,7 +38993,8 @@ class UndoRedoDirective {
|
|
|
38792
38993
|
take: state.take,
|
|
38793
38994
|
sort: state.sort,
|
|
38794
38995
|
filter: state.filter,
|
|
38795
|
-
group: state.group
|
|
38996
|
+
group: state.group,
|
|
38997
|
+
searchFilter: state.searchFilter
|
|
38796
38998
|
},
|
|
38797
38999
|
gridState: state
|
|
38798
39000
|
});
|
|
@@ -38865,7 +39067,13 @@ class UndoRedoDirective {
|
|
|
38865
39067
|
this.localDataChangesService?.changes.emit();
|
|
38866
39068
|
}
|
|
38867
39069
|
else {
|
|
38868
|
-
this.
|
|
39070
|
+
this.addToState = false;
|
|
39071
|
+
try {
|
|
39072
|
+
this.host.loadState({ ...this.stack.current.gridState, currentData: null });
|
|
39073
|
+
}
|
|
39074
|
+
finally {
|
|
39075
|
+
this.addToState = true;
|
|
39076
|
+
}
|
|
38869
39077
|
if (this.isDataStateChangeEvent(event.originalEvent)) {
|
|
38870
39078
|
const { skip, take, sort, filter, group } = event.gridState;
|
|
38871
39079
|
this.host.dataStateChange.emit({ skip, take, sort, filter, group });
|
|
@@ -38881,7 +39089,8 @@ class UndoRedoDirective {
|
|
|
38881
39089
|
take: this.host.pageSize,
|
|
38882
39090
|
sort: this.host.sort,
|
|
38883
39091
|
filter: this.host.filter,
|
|
38884
|
-
group: this.host.group
|
|
39092
|
+
group: this.host.group,
|
|
39093
|
+
searchFilter: this.host.currentState.searchFilter
|
|
38885
39094
|
}, gridState: this.host.currentState
|
|
38886
39095
|
});
|
|
38887
39096
|
}
|
|
@@ -38896,7 +39105,13 @@ class UndoRedoDirective {
|
|
|
38896
39105
|
redo() {
|
|
38897
39106
|
if (this.stack.canRedo) {
|
|
38898
39107
|
this.stack.redo();
|
|
38899
|
-
this.
|
|
39108
|
+
this.addToState = false;
|
|
39109
|
+
try {
|
|
39110
|
+
this.host.loadState(this.stack.current.gridState);
|
|
39111
|
+
}
|
|
39112
|
+
finally {
|
|
39113
|
+
this.addToState = true;
|
|
39114
|
+
}
|
|
38900
39115
|
if (!this.stack.canRedo) {
|
|
38901
39116
|
this.undoRedoService.stackEndReached.next('end');
|
|
38902
39117
|
}
|
|
@@ -38908,7 +39123,13 @@ class UndoRedoDirective {
|
|
|
38908
39123
|
undo() {
|
|
38909
39124
|
if (this.stack.canUndo) {
|
|
38910
39125
|
this.stack.undo();
|
|
38911
|
-
this.
|
|
39126
|
+
this.addToState = false;
|
|
39127
|
+
try {
|
|
39128
|
+
this.host.loadState(this.stack.current.gridState);
|
|
39129
|
+
}
|
|
39130
|
+
finally {
|
|
39131
|
+
this.addToState = true;
|
|
39132
|
+
}
|
|
38912
39133
|
if (!this.stack.canUndo) {
|
|
38913
39134
|
this.undoRedoService.stackEndReached.next('start');
|
|
38914
39135
|
}
|
|
@@ -40841,7 +41062,6 @@ class GridSmartBoxSearchEvent extends SmartBoxSearchEvent {
|
|
|
40841
41062
|
}
|
|
40842
41063
|
}
|
|
40843
41064
|
|
|
40844
|
-
const DEFAULT_SIZE$1 = 'medium';
|
|
40845
41065
|
const SIZES_MAP = {
|
|
40846
41066
|
small: 'sm',
|
|
40847
41067
|
medium: 'md',
|
|
@@ -40865,10 +41085,10 @@ class SegmentedControlComponent {
|
|
|
40865
41085
|
/**
|
|
40866
41086
|
* Sets the padding of the control.
|
|
40867
41087
|
*
|
|
40868
|
-
* @default
|
|
41088
|
+
* @default undefined
|
|
40869
41089
|
*/
|
|
40870
41090
|
set size(size) {
|
|
40871
|
-
const newSize = size
|
|
41091
|
+
const newSize = size;
|
|
40872
41092
|
this.handleSizeClass(newSize, this._size);
|
|
40873
41093
|
this._size = newSize;
|
|
40874
41094
|
}
|
|
@@ -40916,14 +41136,14 @@ class SegmentedControlComponent {
|
|
|
40916
41136
|
this.renderer.setStyle(selectionIndicator, 'right', `${right}px`);
|
|
40917
41137
|
}
|
|
40918
41138
|
selectedButtonIndex = 0;
|
|
40919
|
-
_size
|
|
41139
|
+
_size;
|
|
40920
41140
|
handleSizeClass(newValue, prevValue) {
|
|
40921
41141
|
if (!this.wrapper) {
|
|
40922
41142
|
return;
|
|
40923
41143
|
}
|
|
40924
41144
|
const elem = this.wrapper.nativeElement;
|
|
40925
41145
|
const classToRemove = prevValue ? `k-segmented-control-${SIZES_MAP[prevValue]}` : null;
|
|
40926
|
-
const classToAdd = newValue ? `k-segmented-control-${SIZES_MAP[newValue]}` :
|
|
41146
|
+
const classToAdd = newValue ? `k-segmented-control-${SIZES_MAP[newValue]}` : null;
|
|
40927
41147
|
classToRemove && this.renderer.removeClass(elem, classToRemove);
|
|
40928
41148
|
classToAdd && this.renderer.addClass(elem, classToAdd);
|
|
40929
41149
|
}
|
|
@@ -41344,11 +41564,23 @@ class SmartBoxComponent {
|
|
|
41344
41564
|
this.handleSizeClass(this._size);
|
|
41345
41565
|
this.updateSearchListData();
|
|
41346
41566
|
this.updateSelectedView();
|
|
41567
|
+
this.searchSubscription = this.searchService.changes.subscribe((descriptor) => {
|
|
41568
|
+
if (!isPresent$1(descriptor)) {
|
|
41569
|
+
this.input.nativeElement.value = '';
|
|
41570
|
+
}
|
|
41571
|
+
else if (!this.input.nativeElement.value || this.input.nativeElement.value !== this.searchService.searchValue) {
|
|
41572
|
+
this.input.nativeElement.value = this.searchService.searchValue || '';
|
|
41573
|
+
}
|
|
41574
|
+
});
|
|
41347
41575
|
}
|
|
41348
41576
|
ngOnDestroy() {
|
|
41349
41577
|
this.destroyPopup();
|
|
41350
41578
|
this.clearTypingTimeout();
|
|
41351
41579
|
this.unsubscribeCurrentRequest();
|
|
41580
|
+
if (this.searchSubscription) {
|
|
41581
|
+
this.searchSubscription.unsubscribe();
|
|
41582
|
+
this.searchSubscription = null;
|
|
41583
|
+
}
|
|
41352
41584
|
}
|
|
41353
41585
|
focusableId = `k-${guid()}`;
|
|
41354
41586
|
selectedView;
|
|
@@ -41437,7 +41669,12 @@ class SmartBoxComponent {
|
|
|
41437
41669
|
this.selectedView = 'aiAssistant';
|
|
41438
41670
|
}
|
|
41439
41671
|
this.modeChange.emit(this.selectedView);
|
|
41440
|
-
this.
|
|
41672
|
+
if (this.selectedView === 'search') {
|
|
41673
|
+
this.input.nativeElement.value = this.lastSearchValue || '';
|
|
41674
|
+
}
|
|
41675
|
+
else {
|
|
41676
|
+
this.input.nativeElement.value = '';
|
|
41677
|
+
}
|
|
41441
41678
|
this.cdr.detectChanges();
|
|
41442
41679
|
}
|
|
41443
41680
|
onSearchItemClick(item) {
|
|
@@ -41445,8 +41682,13 @@ class SmartBoxComponent {
|
|
|
41445
41682
|
this.searchListData.forEach(i => i.selected = false);
|
|
41446
41683
|
this.searchListData.find(i => i.text === item.text).selected = true;
|
|
41447
41684
|
this.selectedView = item.text === 'Search' ? 'search' : 'semanticSearch';
|
|
41685
|
+
if (this.selectedView === 'search') {
|
|
41686
|
+
this.input.nativeElement.value = this.lastSearchValue || '';
|
|
41687
|
+
}
|
|
41688
|
+
else {
|
|
41689
|
+
this.input.nativeElement.value = '';
|
|
41690
|
+
}
|
|
41448
41691
|
this.modeChange.emit(this.selectedView);
|
|
41449
|
-
this.clearValue();
|
|
41450
41692
|
this.cdr.markForCheck();
|
|
41451
41693
|
}
|
|
41452
41694
|
onListItemClick(item) {
|
|
@@ -41479,16 +41721,17 @@ class SmartBoxComponent {
|
|
|
41479
41721
|
ev = Object.assign(new SmartBoxSearchEvent(), eventArgs);
|
|
41480
41722
|
}
|
|
41481
41723
|
else if (this.selectedView === 'semanticSearch') {
|
|
41482
|
-
ev =
|
|
41724
|
+
ev = eventArgs;
|
|
41483
41725
|
}
|
|
41484
41726
|
this[this.selectedView].emit(ev);
|
|
41485
41727
|
if (this.selectedView === 'search' && !ev.isDefaultPrevented()) {
|
|
41728
|
+
this.lastSearchValue = this.input.nativeElement.value;
|
|
41486
41729
|
this.zone.run(() => {
|
|
41487
41730
|
if (this.input.nativeElement.value === '' || !this.input.nativeElement.value) {
|
|
41488
|
-
this.searchService.
|
|
41731
|
+
this.searchService.search(undefined);
|
|
41489
41732
|
}
|
|
41490
41733
|
else {
|
|
41491
|
-
this.searchService.
|
|
41734
|
+
this.searchService.search({ filters: ev.filters, logic: ev.logic });
|
|
41492
41735
|
}
|
|
41493
41736
|
});
|
|
41494
41737
|
}
|
|
@@ -41565,12 +41808,13 @@ class SmartBoxComponent {
|
|
|
41565
41808
|
this[this.selectedView].emit(ev);
|
|
41566
41809
|
});
|
|
41567
41810
|
if (this.selectedView === 'search' && !ev.isDefaultPrevented()) {
|
|
41811
|
+
this.lastSearchValue = inputValue;
|
|
41568
41812
|
this.zone.run(() => {
|
|
41569
41813
|
if (inputValue === '' || !inputValue) {
|
|
41570
|
-
this.searchService.
|
|
41814
|
+
this.searchService.search(undefined);
|
|
41571
41815
|
}
|
|
41572
41816
|
else {
|
|
41573
|
-
this.searchService.
|
|
41817
|
+
this.searchService.search({ filters: ev.filters, logic: ev.logic });
|
|
41574
41818
|
}
|
|
41575
41819
|
});
|
|
41576
41820
|
}
|
|
@@ -41651,9 +41895,11 @@ class SmartBoxComponent {
|
|
|
41651
41895
|
popupMouseDownHandler = (event) => event.preventDefault();
|
|
41652
41896
|
requestData;
|
|
41653
41897
|
currentRequestSubscription = null;
|
|
41898
|
+
searchSubscription = null;
|
|
41654
41899
|
columns = [];
|
|
41655
41900
|
leafColumns = [];
|
|
41656
41901
|
searchTypingTimeout;
|
|
41902
|
+
lastSearchValue = '';
|
|
41657
41903
|
togglePopup(open) {
|
|
41658
41904
|
const sameState = this.isOpen === open;
|
|
41659
41905
|
if (sameState) {
|
|
@@ -41887,6 +42133,7 @@ class SmartBoxComponent {
|
|
|
41887
42133
|
}
|
|
41888
42134
|
if (this.searchMode?.enabled) {
|
|
41889
42135
|
this.selectedView = 'search';
|
|
42136
|
+
isPresent$1(this.lastSearchValue) && (this.input.nativeElement.value = this.lastSearchValue);
|
|
41890
42137
|
}
|
|
41891
42138
|
else if (this.semanticSearchMode?.enabled) {
|
|
41892
42139
|
this.selectedView = 'semanticSearch';
|
|
@@ -41929,7 +42176,7 @@ class SmartBoxComponent {
|
|
|
41929
42176
|
this.aiAssistantResponseError.emit(responseErrorEvent);
|
|
41930
42177
|
}
|
|
41931
42178
|
clearValue() {
|
|
41932
|
-
this.input.nativeElement.value = '';
|
|
42179
|
+
this.input.nativeElement.value = this.lastSearchValue = '';
|
|
41933
42180
|
this.input.nativeElement.focus();
|
|
41934
42181
|
}
|
|
41935
42182
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SmartBoxComponent, deps: [{ token: i2.PopupService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1$4.IntlService }, { token: ContextService }, { token: GridAIRequestResponseService }, { token: i1$8.HttpClient }, { token: i0.Renderer2 }, { token: ColumnInfoService }, { token: SearchService }], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -42026,10 +42273,11 @@ class SmartBoxComponent {
|
|
|
42026
42273
|
@if (segmentedControlButtons.length > 0) {
|
|
42027
42274
|
<kendo-segmented-control
|
|
42028
42275
|
[buttons]="segmentedControlButtons"
|
|
42029
|
-
(buttonClick)="onModeChange($event)"
|
|
42276
|
+
(buttonClick)="onModeChange($event)"
|
|
42277
|
+
size="small">
|
|
42030
42278
|
</kendo-segmented-control>
|
|
42031
42279
|
}
|
|
42032
|
-
<div class="k-list
|
|
42280
|
+
<div class="k-list">
|
|
42033
42281
|
<div class="k-list-content">
|
|
42034
42282
|
<ul class="k-list-ul">
|
|
42035
42283
|
@if ((selectedView === 'search' || selectedView === 'semanticSearch') && searchListData.length > 0) {
|
|
@@ -42038,7 +42286,7 @@ class SmartBoxComponent {
|
|
|
42038
42286
|
(click)="onSearchItemClick(item)">
|
|
42039
42287
|
@if (item.selected) {
|
|
42040
42288
|
<kendo-icon-wrapper
|
|
42041
|
-
innerCssClass="k-list-item-icon"
|
|
42289
|
+
innerCssClass="k-list-item-icon k-smart-box-check-icon"
|
|
42042
42290
|
name="check"
|
|
42043
42291
|
[svgIcon]="checkIcon"
|
|
42044
42292
|
class="k-list-item-icon-wrapper">
|
|
@@ -42299,10 +42547,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
42299
42547
|
@if (segmentedControlButtons.length > 0) {
|
|
42300
42548
|
<kendo-segmented-control
|
|
42301
42549
|
[buttons]="segmentedControlButtons"
|
|
42302
|
-
(buttonClick)="onModeChange($event)"
|
|
42550
|
+
(buttonClick)="onModeChange($event)"
|
|
42551
|
+
size="small">
|
|
42303
42552
|
</kendo-segmented-control>
|
|
42304
42553
|
}
|
|
42305
|
-
<div class="k-list
|
|
42554
|
+
<div class="k-list">
|
|
42306
42555
|
<div class="k-list-content">
|
|
42307
42556
|
<ul class="k-list-ul">
|
|
42308
42557
|
@if ((selectedView === 'search' || selectedView === 'semanticSearch') && searchListData.length > 0) {
|
|
@@ -42311,7 +42560,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
42311
42560
|
(click)="onSearchItemClick(item)">
|
|
42312
42561
|
@if (item.selected) {
|
|
42313
42562
|
<kendo-icon-wrapper
|
|
42314
|
-
innerCssClass="k-list-item-icon"
|
|
42563
|
+
innerCssClass="k-list-item-icon k-smart-box-check-icon"
|
|
42315
42564
|
name="check"
|
|
42316
42565
|
[svgIcon]="checkIcon"
|
|
42317
42566
|
class="k-list-item-icon-wrapper">
|
package/grid.component.d.ts
CHANGED
|
@@ -95,6 +95,7 @@ import { AdaptiveRendererComponent } from './adaptiveness/adaptive-renderer.comp
|
|
|
95
95
|
import { DataMappingService } from './data/data-mapping.service';
|
|
96
96
|
import { DataLayoutMode, DataLayoutModeSettings } from './common/data-layout-mode';
|
|
97
97
|
import { GridColSize } from './common/grid-col-size';
|
|
98
|
+
import { SearchService } from './rendering/toolbar/tools/smartbox/search.service';
|
|
98
99
|
import * as i0 from "@angular/core";
|
|
99
100
|
/**
|
|
100
101
|
* Represents the Kendo UI for Angular Data Grid component.
|
|
@@ -165,6 +166,7 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
|
|
|
165
166
|
private dataMappingService;
|
|
166
167
|
private aiRequestResponseService;
|
|
167
168
|
private idService;
|
|
169
|
+
private searchService;
|
|
168
170
|
/**
|
|
169
171
|
* Sets the data of the Grid. If you provide an array, the Grid gets the total count automatically.
|
|
170
172
|
* ([more information and example](https://www.telerik.com/kendo-angular-ui/components/grid/data-binding/basics)).
|
|
@@ -356,6 +358,9 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
|
|
|
356
358
|
/**
|
|
357
359
|
* By default, navigation is enabled. To disable, set to `false`.
|
|
358
360
|
* To enable navigation for specific sections, provide a [`GridNavigableSection`](https://www.telerik.com/kendo-angular-ui/components/grid/api/gridnavigablesection).
|
|
361
|
+
*
|
|
362
|
+
* @remarks
|
|
363
|
+
* This property is related to accessibility.
|
|
359
364
|
*/
|
|
360
365
|
set navigable(value: GridNavigableSettings);
|
|
361
366
|
get navigable(): GridNavigableSettings;
|
|
@@ -756,7 +761,7 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
|
|
|
756
761
|
private rowReorderSubscription;
|
|
757
762
|
private rtl;
|
|
758
763
|
private _rowSticky;
|
|
759
|
-
constructor(supportService: BrowserSupportService, selectionService: SelectionService, cellSelectionService: CellSelectionService, wrapper: ElementRef, groupInfoService: GroupInfoService, groupsService: GroupsService, changeNotification: ChangeNotificationService, detailsService: DetailsService, editService: EditService, filterService: FilterService, pdfService: PDFService, responsiveService: ResponsiveService, renderer: Renderer2, excelService: ExcelService, csvService: CSVService, ngZone: NgZone, scrollSyncService: ScrollSyncService, domEvents: DomEventsService, columnResizingService: ColumnResizingService, changeDetectorRef: ChangeDetectorRef, columnReorderService: ColumnReorderService, columnInfoService: ColumnInfoService, navigationService: NavigationService, sortService: SortService, scrollRequestService: ScrollRequestService, localization: LocalizationService, ctx: ContextService, sizingService: SizingOptionsService, adaptiveGridService: AdaptiveGridService, rowReorderService: RowReorderService, dataMappingService: DataMappingService, aiRequestResponseService: GridAIRequestResponseService, idService: IdService);
|
|
764
|
+
constructor(supportService: BrowserSupportService, selectionService: SelectionService, cellSelectionService: CellSelectionService, wrapper: ElementRef, groupInfoService: GroupInfoService, groupsService: GroupsService, changeNotification: ChangeNotificationService, detailsService: DetailsService, editService: EditService, filterService: FilterService, pdfService: PDFService, responsiveService: ResponsiveService, renderer: Renderer2, excelService: ExcelService, csvService: CSVService, ngZone: NgZone, scrollSyncService: ScrollSyncService, domEvents: DomEventsService, columnResizingService: ColumnResizingService, changeDetectorRef: ChangeDetectorRef, columnReorderService: ColumnReorderService, columnInfoService: ColumnInfoService, navigationService: NavigationService, sortService: SortService, scrollRequestService: ScrollRequestService, localization: LocalizationService, ctx: ContextService, sizingService: SizingOptionsService, adaptiveGridService: AdaptiveGridService, rowReorderService: RowReorderService, dataMappingService: DataMappingService, aiRequestResponseService: GridAIRequestResponseService, idService: IdService, searchService: SearchService);
|
|
760
765
|
/**
|
|
761
766
|
* Expands the master row at the specified data row index ([see example](https://www.telerik.com/kendo-angular-ui/components/grid/master-detail)).
|
|
762
767
|
*
|
|
@@ -835,6 +840,10 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
|
|
|
835
840
|
* ```
|
|
836
841
|
*/
|
|
837
842
|
handleAIResponse(response: any): void;
|
|
843
|
+
/**
|
|
844
|
+
* Clears the search operation applied through the SmartBox tool.
|
|
845
|
+
*/
|
|
846
|
+
clearSearch(): void;
|
|
838
847
|
/**
|
|
839
848
|
* @hidden
|
|
840
849
|
*/
|
|
@@ -24,6 +24,7 @@ import * as i0 from "@angular/core";
|
|
|
24
24
|
* </kendo-grid>
|
|
25
25
|
* ```
|
|
26
26
|
* @remarks
|
|
27
|
+
* This directive is related to accessibility.
|
|
27
28
|
* Applied to: {@link ButtonComponent}, {@link TextBoxComponent}, {@link NumericTextBoxComponent}, {@link DateInputComponent}, {@link DatePickerComponent}, {@link DateTimePicker}, {@link TextAreaComponent}, {@link ColorPickerComponent}, {@link DropDownListComponent}, {@link ComboBoxComponent}, {@link AutoCompleteComponent}.
|
|
28
29
|
*/
|
|
29
30
|
export declare class FocusableDirective implements FocusableElement, AfterViewInit, OnDestroy {
|
package/package-metadata.mjs
CHANGED
|
@@ -7,7 +7,7 @@ export const packageMetadata = {
|
|
|
7
7
|
"productCodes": [
|
|
8
8
|
"KENDOUIANGULAR"
|
|
9
9
|
],
|
|
10
|
-
"publishDate":
|
|
11
|
-
"version": "23.0.1",
|
|
10
|
+
"publishDate": 1771342428,
|
|
11
|
+
"version": "23.1.0-develop.1",
|
|
12
12
|
"licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
|
|
13
13
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@progress/kendo-angular-grid",
|
|
3
|
-
"version": "23.0.1",
|
|
3
|
+
"version": "23.1.0-develop.1",
|
|
4
4
|
"description": "Kendo UI Grid for Angular - high performance data grid with paging, filtering, virtualization, CRUD, and more.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"author": "Progress",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"package": {
|
|
74
74
|
"productName": "Kendo UI for Angular",
|
|
75
75
|
"productCode": "KENDOUIANGULAR",
|
|
76
|
-
"publishDate":
|
|
76
|
+
"publishDate": 1771342428,
|
|
77
77
|
"licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
|
|
78
78
|
}
|
|
79
79
|
},
|
|
@@ -86,32 +86,32 @@
|
|
|
86
86
|
"@progress/kendo-data-query": "^1.7.3",
|
|
87
87
|
"@progress/kendo-drawing": "^1.24.0",
|
|
88
88
|
"@progress/kendo-licensing": "^1.10.0",
|
|
89
|
-
"@progress/kendo-angular-buttons": "23.0.1",
|
|
90
|
-
"@progress/kendo-angular-common": "23.0.1",
|
|
91
|
-
"@progress/kendo-angular-dateinputs": "23.0.1",
|
|
92
|
-
"@progress/kendo-angular-layout": "23.0.1",
|
|
93
|
-
"@progress/kendo-angular-navigation": "23.0.1",
|
|
94
|
-
"@progress/kendo-angular-dropdowns": "23.0.1",
|
|
95
|
-
"@progress/kendo-angular-excel-export": "23.0.1",
|
|
96
|
-
"@progress/kendo-angular-icons": "23.0.1",
|
|
97
|
-
"@progress/kendo-angular-indicators": "23.0.1",
|
|
98
|
-
"@progress/kendo-angular-inputs": "23.0.1",
|
|
99
|
-
"@progress/kendo-angular-conversational-ui": "23.0.1",
|
|
100
|
-
"@progress/kendo-angular-intl": "23.0.1",
|
|
101
|
-
"@progress/kendo-angular-l10n": "23.0.1",
|
|
102
|
-
"@progress/kendo-angular-label": "23.0.1",
|
|
103
|
-
"@progress/kendo-angular-menu": "23.0.1",
|
|
104
|
-
"@progress/kendo-angular-pager": "23.0.1",
|
|
105
|
-
"@progress/kendo-angular-pdf-export": "23.0.1",
|
|
106
|
-
"@progress/kendo-angular-popup": "23.0.1",
|
|
107
|
-
"@progress/kendo-angular-toolbar": "23.0.1",
|
|
108
|
-
"@progress/kendo-angular-upload": "23.0.1",
|
|
109
|
-
"@progress/kendo-angular-utils": "23.0.1",
|
|
89
|
+
"@progress/kendo-angular-buttons": "23.1.0-develop.1",
|
|
90
|
+
"@progress/kendo-angular-common": "23.1.0-develop.1",
|
|
91
|
+
"@progress/kendo-angular-dateinputs": "23.1.0-develop.1",
|
|
92
|
+
"@progress/kendo-angular-layout": "23.1.0-develop.1",
|
|
93
|
+
"@progress/kendo-angular-navigation": "23.1.0-develop.1",
|
|
94
|
+
"@progress/kendo-angular-dropdowns": "23.1.0-develop.1",
|
|
95
|
+
"@progress/kendo-angular-excel-export": "23.1.0-develop.1",
|
|
96
|
+
"@progress/kendo-angular-icons": "23.1.0-develop.1",
|
|
97
|
+
"@progress/kendo-angular-indicators": "23.1.0-develop.1",
|
|
98
|
+
"@progress/kendo-angular-inputs": "23.1.0-develop.1",
|
|
99
|
+
"@progress/kendo-angular-conversational-ui": "23.1.0-develop.1",
|
|
100
|
+
"@progress/kendo-angular-intl": "23.1.0-develop.1",
|
|
101
|
+
"@progress/kendo-angular-l10n": "23.1.0-develop.1",
|
|
102
|
+
"@progress/kendo-angular-label": "23.1.0-develop.1",
|
|
103
|
+
"@progress/kendo-angular-menu": "23.1.0-develop.1",
|
|
104
|
+
"@progress/kendo-angular-pager": "23.1.0-develop.1",
|
|
105
|
+
"@progress/kendo-angular-pdf-export": "23.1.0-develop.1",
|
|
106
|
+
"@progress/kendo-angular-popup": "23.1.0-develop.1",
|
|
107
|
+
"@progress/kendo-angular-toolbar": "23.1.0-develop.1",
|
|
108
|
+
"@progress/kendo-angular-upload": "23.1.0-develop.1",
|
|
109
|
+
"@progress/kendo-angular-utils": "23.1.0-develop.1",
|
|
110
110
|
"rxjs": "^6.5.3 || ^7.0.0"
|
|
111
111
|
},
|
|
112
112
|
"dependencies": {
|
|
113
113
|
"tslib": "^2.3.1",
|
|
114
|
-
"@progress/kendo-angular-schematics": "23.0.1",
|
|
114
|
+
"@progress/kendo-angular-schematics": "23.1.0-develop.1",
|
|
115
115
|
"@progress/kendo-common": "^1.0.1",
|
|
116
116
|
"@progress/kendo-file-saver": "^1.0.0",
|
|
117
117
|
"@progress/kendo-csv": "^1.0.0"
|
|
@@ -101,6 +101,7 @@ export declare class ListComponent implements OnInit, OnDestroy, AfterViewInit,
|
|
|
101
101
|
table: ElementRef;
|
|
102
102
|
resizeSensors: QueryList<ResizeSensorComponent>;
|
|
103
103
|
private scroller;
|
|
104
|
+
private scrollerFactory;
|
|
104
105
|
private subscriptions;
|
|
105
106
|
private scrollerSubscription;
|
|
106
107
|
private dispatcher;
|
|
@@ -141,6 +142,18 @@ export declare class ListComponent implements OnInit, OnDestroy, AfterViewInit,
|
|
|
141
142
|
syncRowsHeight(): void;
|
|
142
143
|
ngOnDestroy(): void;
|
|
143
144
|
init(): void;
|
|
145
|
+
/**
|
|
146
|
+
* Resets all virtual scrolling state when the data source changes.
|
|
147
|
+
* Recreates everything as if the grid was just initialized for the first time.
|
|
148
|
+
* @hidden
|
|
149
|
+
*/
|
|
150
|
+
resetVirtualScroll(newTotal: number): void;
|
|
151
|
+
/**
|
|
152
|
+
* Checks if the virtual scroll state is out of sync with the expected position.
|
|
153
|
+
* Used to determine if resetVirtualScroll should be called.
|
|
154
|
+
* @hidden
|
|
155
|
+
*/
|
|
156
|
+
isVirtualScrollOutOfSync(): boolean;
|
|
144
157
|
lockedScroll(): void;
|
|
145
158
|
lockedMousewheel(args: any): void;
|
|
146
159
|
lockedKeydown(args: any): void;
|
|
@@ -17,6 +17,9 @@ import * as i0 from "@angular/core";
|
|
|
17
17
|
* <button kendoGridToolbarFocusable>Button</button>
|
|
18
18
|
* </kendo-toolbar>
|
|
19
19
|
* ```
|
|
20
|
+
*
|
|
21
|
+
* @remarks
|
|
22
|
+
* This directive is related to accessibility.
|
|
20
23
|
*/
|
|
21
24
|
export declare class GridToolbarFocusableDirective {
|
|
22
25
|
private host;
|
|
@@ -13,6 +13,14 @@ export declare class SearchService {
|
|
|
13
13
|
* Fires when the search descriptor is set.
|
|
14
14
|
*/
|
|
15
15
|
changes: Subject<CompositeFilterDescriptor>;
|
|
16
|
+
/**
|
|
17
|
+
* The descriptor used for searching.
|
|
18
|
+
*/
|
|
19
|
+
searchFilter: CompositeFilterDescriptor;
|
|
20
|
+
/**
|
|
21
|
+
* The value used for searching.
|
|
22
|
+
*/
|
|
23
|
+
searchValue: string;
|
|
16
24
|
/**
|
|
17
25
|
* Sets the search descriptor.
|
|
18
26
|
*
|
|
@@ -122,9 +122,11 @@ export declare class SmartBoxComponent implements AfterViewInit, OnChanges, OnDe
|
|
|
122
122
|
private popupMouseDownHandler;
|
|
123
123
|
private requestData;
|
|
124
124
|
private currentRequestSubscription;
|
|
125
|
+
private searchSubscription;
|
|
125
126
|
private columns;
|
|
126
127
|
private leafColumns;
|
|
127
128
|
private searchTypingTimeout;
|
|
129
|
+
private lastSearchValue;
|
|
128
130
|
togglePopup(open: boolean): void;
|
|
129
131
|
onPromptSubmit(): void;
|
|
130
132
|
onSpeechToTextResult(event: any): void;
|
|
@@ -9,19 +9,19 @@ const schematics_1 = require("@angular-devkit/schematics");
|
|
|
9
9
|
function default_1(options) {
|
|
10
10
|
const finalOptions = Object.assign(Object.assign({}, options), { mainNgModule: 'GridModule', package: 'grid', peerDependencies: {
|
|
11
11
|
// peer deps of the dropdowns
|
|
12
|
-
'@progress/kendo-angular-treeview': '23.0.1',
|
|
13
|
-
'@progress/kendo-angular-navigation': '23.0.1',
|
|
12
|
+
'@progress/kendo-angular-treeview': '23.1.0-develop.1',
|
|
13
|
+
'@progress/kendo-angular-navigation': '23.1.0-develop.1',
|
|
14
14
|
// peer dependency of kendo-angular-inputs
|
|
15
|
-
'@progress/kendo-angular-dialog': '23.0.1',
|
|
15
|
+
'@progress/kendo-angular-dialog': '23.1.0-develop.1',
|
|
16
16
|
// peer dependency of kendo-angular-icons
|
|
17
17
|
'@progress/kendo-svg-icons': '^4.0.0',
|
|
18
18
|
// peer dependency of kendo-angular-layout
|
|
19
|
-
'@progress/kendo-angular-progressbar': '23.0.1',
|
|
19
|
+
'@progress/kendo-angular-progressbar': '23.1.0-develop.1',
|
|
20
20
|
// transitive peer dependencies from toolbar
|
|
21
|
-
'@progress/kendo-angular-indicators': '23.0.1',
|
|
21
|
+
'@progress/kendo-angular-indicators': '23.1.0-develop.1',
|
|
22
22
|
// transitive peer dependencies from conversational-ui
|
|
23
|
-
'@progress/kendo-angular-menu': '23.0.1',
|
|
24
|
-
'@progress/kendo-angular-upload': '23.0.1'
|
|
23
|
+
'@progress/kendo-angular-menu': '23.1.0-develop.1',
|
|
24
|
+
'@progress/kendo-angular-upload': '23.1.0-develop.1'
|
|
25
25
|
} });
|
|
26
26
|
return (0, schematics_1.externalSchematic)('@progress/kendo-angular-schematics', 'ng-add', finalOptions);
|
|
27
27
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
3
|
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
4
|
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { State } from "@progress/kendo-data-query";
|
|
5
|
+
import { CompositeFilterDescriptor, State } from "@progress/kendo-data-query";
|
|
6
6
|
import { GridDataResult } from "../data/data.collection";
|
|
7
7
|
import { PreventableEvent } from "@progress/kendo-angular-common";
|
|
8
8
|
/**
|
|
@@ -36,7 +36,7 @@ export interface ColumnState {
|
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
38
|
* Describes the state of the Grid component.
|
|
39
|
-
* Includes the current `State`, data, and
|
|
39
|
+
* Includes the current `State`, data, columns and search state.
|
|
40
40
|
*/
|
|
41
41
|
export interface GridState extends State {
|
|
42
42
|
/**
|
|
@@ -47,6 +47,10 @@ export interface GridState extends State {
|
|
|
47
47
|
* The current data in the Grid.
|
|
48
48
|
*/
|
|
49
49
|
currentData?: Array<any> | GridDataResult | null;
|
|
50
|
+
/**
|
|
51
|
+
* The descriptors used for searching.
|
|
52
|
+
*/
|
|
53
|
+
searchFilter?: CompositeFilterDescriptor;
|
|
50
54
|
}
|
|
51
55
|
/**
|
|
52
56
|
* Provides arguments for the `undo` and `redo` events.
|