@progress/kendo-angular-spreadsheet 21.4.0-develop.2 → 21.4.0-develop.4
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/common/spreadsheet.service.d.ts +3 -0
- package/directives.d.ts +3 -1
- package/esm2022/common/error-handling.service.mjs +1 -0
- package/esm2022/common/spreadsheet.service.mjs +2 -0
- package/esm2022/directives.mjs +5 -1
- package/esm2022/filter-menu/filter-menu-item-content-template.directive.mjs +26 -0
- package/esm2022/filter-menu/filter-menu-item.component.mjs +271 -0
- package/esm2022/localization/messages.mjs +175 -1
- package/esm2022/models/filter-menu-item.mjs +5 -0
- package/esm2022/models/index.mjs +2 -0
- package/esm2022/models/range-filter-value.mjs +5 -0
- package/esm2022/package-metadata.mjs +2 -2
- package/esm2022/spreadsheet.component.mjs +717 -47
- package/esm2022/spreadsheet.module.mjs +3 -1
- package/esm2022/tools/filter-sort/filter-tool.directive.mjs +75 -0
- package/esm2022/tools/filter-sort/sort-tool.directive.mjs +57 -0
- package/esm2022/tools/index.mjs +2 -0
- package/esm2022/tools/shared/command-icons.mjs +13 -3
- package/esm2022/tools/shared/constants.mjs +7 -0
- package/fesm2022/progress-kendo-angular-spreadsheet.mjs +1301 -59
- package/filter-menu/filter-menu-item-content-template.directive.d.ts +15 -0
- package/filter-menu/filter-menu-item.component.d.ts +83 -0
- package/index.d.ts +1 -1
- package/localization/messages.d.ts +117 -1
- package/models/events.d.ts +49 -0
- package/models/filter-menu-item.d.ts +14 -0
- package/models/index.d.ts +2 -0
- package/models/range-filter-value.d.ts +15 -0
- package/package.json +18 -17
- package/schematics/ngAdd/index.js +2 -2
- package/spreadsheet.component.d.ts +73 -12
- package/spreadsheet.module.d.ts +3 -1
- package/tools/filter-sort/filter-tool.directive.d.ts +23 -0
- package/tools/filter-sort/sort-tool.directive.d.ts +21 -0
- package/tools/index.d.ts +2 -0
- package/tools/shared/commands.d.ts +1 -1
- package/tools/shared/constants.d.ts +12 -0
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* Copyright © 2025 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 { Component, ElementRef, EventEmitter, HostBinding, Input, NgZone, Output, ViewChild, ViewContainerRef } from '@angular/core';
|
|
5
|
+
import { Component, ElementRef, EventEmitter, HostBinding, Input, NgZone, Output, ViewChild, ViewContainerRef, TemplateRef, ChangeDetectorRef } from '@angular/core';
|
|
6
6
|
import { Subscription } from 'rxjs';
|
|
7
7
|
import { take } from 'rxjs/operators';
|
|
8
8
|
import { validatePackage } from '@progress/kendo-licensing';
|
|
9
9
|
import { packageMetadata } from './package-metadata';
|
|
10
|
-
import { SpreadsheetWidget, registerEditor, Matrix, dateToSerial, serialToDate, validation, calc } from '@progress/kendo-spreadsheet-common';
|
|
10
|
+
import { SpreadsheetWidget, registerEditor, Matrix, dateToSerial, serialToDate, validation, calc, formatting } from '@progress/kendo-spreadsheet-common';
|
|
11
11
|
import { localeData, IntlService } from '@progress/kendo-angular-intl';
|
|
12
|
-
import { calendarIcon, caretAltDownIcon, downloadIcon, folderOpenIcon, formulaFxIcon } from '@progress/kendo-svg-icons';
|
|
12
|
+
import { calendarIcon, caretAltDownIcon, downloadIcon, folderOpenIcon, formulaFxIcon, sortDescSmallIcon, sortAscSmallIcon, searchIcon } from '@progress/kendo-svg-icons';
|
|
13
13
|
import { L10N_PREFIX, LocalizationService } from '@progress/kendo-angular-l10n';
|
|
14
14
|
import { PopupService } from '@progress/kendo-angular-popup';
|
|
15
15
|
import { ContextMenuComponent, MenuItemComponent, MenuComponent } from '@progress/kendo-angular-menu';
|
|
@@ -61,6 +61,15 @@ import { LocalizedMessagesDirective } from './localization/localized-messages.di
|
|
|
61
61
|
import { SpreadsheetDataValidationDirective } from './tools/data-validation-tool.directive';
|
|
62
62
|
import { ListEditorComponent } from './common/list-editor.component';
|
|
63
63
|
import { CalendarComponent } from './common/calendar-editor.component';
|
|
64
|
+
import { SpreadsheetFilterDirective } from './tools/filter-sort/filter-tool.directive';
|
|
65
|
+
import { SpreadsheetFilterMenuItemComponent } from './filter-menu/filter-menu-item.component';
|
|
66
|
+
import { KENDO_TREEVIEW } from '@progress/kendo-angular-treeview';
|
|
67
|
+
import { FilterMenuItemContentTemplateDirective } from './filter-menu/filter-menu-item-content-template.directive';
|
|
68
|
+
import { ButtonComponent } from '@progress/kendo-angular-buttons';
|
|
69
|
+
import { DropDownListComponent } from "@progress/kendo-angular-dropdowns";
|
|
70
|
+
import { InputsModule } from "@progress/kendo-angular-inputs";
|
|
71
|
+
import { DatePickerComponent } from "@progress/kendo-angular-dateinputs";
|
|
72
|
+
import { SpreadsheetSortDirective } from './tools/filter-sort/sort-tool.directive';
|
|
64
73
|
import * as i0 from "@angular/core";
|
|
65
74
|
import * as i1 from "@progress/kendo-angular-intl";
|
|
66
75
|
import * as i2 from "@progress/kendo-angular-l10n";
|
|
@@ -69,6 +78,8 @@ import * as i4 from "./tools/tools.service";
|
|
|
69
78
|
import * as i5 from "./common/error-handling.service";
|
|
70
79
|
import * as i6 from "@progress/kendo-angular-dialog";
|
|
71
80
|
import * as i7 from "@progress/kendo-angular-popup";
|
|
81
|
+
import * as i8 from "@progress/kendo-angular-treeview";
|
|
82
|
+
import * as i9 from "@progress/kendo-angular-inputs";
|
|
72
83
|
/**
|
|
73
84
|
* Represents the [Kendo UI Spreadsheet component for Angular]({% slug overview_spreadsheet %}).
|
|
74
85
|
*
|
|
@@ -91,11 +102,13 @@ export class SpreadsheetComponent {
|
|
|
91
102
|
dialogService;
|
|
92
103
|
popupService;
|
|
93
104
|
container;
|
|
105
|
+
cdr;
|
|
94
106
|
formulaBarInputRef;
|
|
95
107
|
formulaCellInputRef;
|
|
96
108
|
nameBoxRef;
|
|
97
109
|
dialogContainer;
|
|
98
110
|
contextMenu;
|
|
111
|
+
filterMenuTemplate;
|
|
99
112
|
hostClass = true;
|
|
100
113
|
role = 'application';
|
|
101
114
|
/**
|
|
@@ -159,6 +172,14 @@ export class SpreadsheetComponent {
|
|
|
159
172
|
get sheetsInfo() {
|
|
160
173
|
return this._sheetsInfo;
|
|
161
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* @hidden
|
|
177
|
+
*/
|
|
178
|
+
expandedKeys = ['0'];
|
|
179
|
+
/**
|
|
180
|
+
* @hidden
|
|
181
|
+
*/
|
|
182
|
+
checkedKeys = [];
|
|
162
183
|
/**
|
|
163
184
|
* The number of columns in the document.
|
|
164
185
|
*
|
|
@@ -215,38 +236,46 @@ export class SpreadsheetComponent {
|
|
|
215
236
|
*/
|
|
216
237
|
excel;
|
|
217
238
|
/**
|
|
218
|
-
*
|
|
239
|
+
* Fires when a value in the Spreadsheet is changed. Exposes the `SpreadsheetWidget` instance and the selected `Range` as event data.
|
|
219
240
|
*/
|
|
220
241
|
change = new EventEmitter();
|
|
221
242
|
/**
|
|
222
|
-
*
|
|
243
|
+
* Fires when the selected range format is changed from the UI. Exposes the `SpreadsheetWidget` instance and the selected `Range` as event data.
|
|
223
244
|
*/
|
|
224
245
|
formatChange = new EventEmitter();
|
|
225
246
|
/**
|
|
226
|
-
*
|
|
247
|
+
* Fires when the selection is changed by the end user. Exposes the `SpreadsheetWidget` instance and the selected `Range` as event data.
|
|
227
248
|
*/
|
|
228
249
|
selectionChange = new EventEmitter();
|
|
229
250
|
/**
|
|
230
|
-
*
|
|
251
|
+
* Fires when the end user clicks the Export to Excel toolbar button.
|
|
231
252
|
* The event is preventable and exposes the `Workbook` object, a `preventDefault` method
|
|
232
253
|
* (if invoked, the generated file will not be saved), and the `SpreadsheetWidget` instance.
|
|
233
254
|
*/
|
|
234
255
|
excelExport = new EventEmitter();
|
|
235
256
|
/**
|
|
236
|
-
*
|
|
257
|
+
* Fires when the end user clicks the Open toolbar button.
|
|
237
258
|
* The event is preventable and exposes the selected `File` or `Blob`, a `preventDefault` method
|
|
238
259
|
* (if invoked, the selected file will not be loaded), and the `SpreadsheetWidget` instance.
|
|
239
260
|
*/
|
|
240
261
|
excelImport = new EventEmitter();
|
|
241
262
|
/**
|
|
242
|
-
*
|
|
263
|
+
* Fires when the active sheet is about to change.
|
|
243
264
|
* The event exposes the new active `Sheet` and the `SpreadsheetWidget` instance.
|
|
244
265
|
*/
|
|
245
266
|
activeSheetChange = new EventEmitter();
|
|
267
|
+
/**
|
|
268
|
+
* Fires when a clipboard action (cut, copy, or paste) occurs in the Spreadsheet.
|
|
269
|
+
*/
|
|
270
|
+
clipboard = new EventEmitter();
|
|
246
271
|
formulaFxIcon = formulaFxIcon;
|
|
247
272
|
folderOpenIcon = folderOpenIcon;
|
|
248
273
|
downloadIcon = downloadIcon;
|
|
274
|
+
searchIcon = searchIcon;
|
|
249
275
|
selectedMenuItem;
|
|
276
|
+
rangeFilterValuesList = [];
|
|
277
|
+
sortAscSmallIcon = sortAscSmallIcon;
|
|
278
|
+
sortDescSmallIcon = sortDescSmallIcon;
|
|
250
279
|
get spreadsheetWidget() {
|
|
251
280
|
return this.spreadsheetService.spreadsheet;
|
|
252
281
|
}
|
|
@@ -259,13 +288,31 @@ export class SpreadsheetComponent {
|
|
|
259
288
|
*/
|
|
260
289
|
licenseMessage;
|
|
261
290
|
contextMenuItems = [];
|
|
291
|
+
sortMenuItems = [];
|
|
292
|
+
conditionExpanded = false;
|
|
293
|
+
valueExpanded = false;
|
|
294
|
+
filterConditionsList = {};
|
|
295
|
+
conditionValue = '';
|
|
296
|
+
set selectedCondition(value) {
|
|
297
|
+
if (this._selectedCondition?.type !== value.type) {
|
|
298
|
+
this.conditionValue = '';
|
|
299
|
+
}
|
|
300
|
+
this._selectedCondition = value;
|
|
301
|
+
}
|
|
302
|
+
get selectedCondition() {
|
|
303
|
+
return this._selectedCondition;
|
|
304
|
+
}
|
|
305
|
+
_selectedCondition;
|
|
262
306
|
_sheetsInfo;
|
|
263
307
|
_activeSheet;
|
|
264
308
|
_menuItems;
|
|
265
309
|
currentRange;
|
|
266
310
|
subs = new Subscription();
|
|
311
|
+
filterMenuOpened = false;
|
|
312
|
+
currentFilterOptions = null;
|
|
267
313
|
popupRef;
|
|
268
|
-
|
|
314
|
+
popupPositionChangeSub;
|
|
315
|
+
constructor(ngZone, intl, host, localization, spreadsheetService, toolsService, errorService, dialogService, popupService, container, cdr) {
|
|
269
316
|
this.ngZone = ngZone;
|
|
270
317
|
this.intl = intl;
|
|
271
318
|
this.host = host;
|
|
@@ -276,6 +323,7 @@ export class SpreadsheetComponent {
|
|
|
276
323
|
this.dialogService = dialogService;
|
|
277
324
|
this.popupService = popupService;
|
|
278
325
|
this.container = container;
|
|
326
|
+
this.cdr = cdr;
|
|
279
327
|
const isValid = validatePackage(packageMetadata);
|
|
280
328
|
this.licenseMessage = getLicenseMessage(packageMetadata);
|
|
281
329
|
this.showLicenseWatermark = shouldShowValidationUI(isValid);
|
|
@@ -322,25 +370,36 @@ export class SpreadsheetComponent {
|
|
|
322
370
|
spreadsheet.view.bind('update', this.updateState);
|
|
323
371
|
spreadsheet.view.bind('message', this.onMessage);
|
|
324
372
|
spreadsheet.bind('contextmenu', this.onContextMenu.bind(this));
|
|
373
|
+
spreadsheet.bind('copy', (e) => { this.onClipboardEvent(e, 'copy'); });
|
|
374
|
+
spreadsheet.bind('cut', (e) => { this.onClipboardEvent(e, 'cut'); });
|
|
375
|
+
spreadsheet.bind('paste', (e) => { this.onClipboardEvent(e, 'paste'); });
|
|
325
376
|
const sheet = spreadsheet.activeSheet();
|
|
326
377
|
if (sheet) {
|
|
327
378
|
this.updateState({ range: sheet.range(sheet.activeCell()) });
|
|
328
379
|
}
|
|
329
380
|
this.updateActiveSheet(this.activeSheet || spreadsheet?.activeSheet()?.name());
|
|
330
381
|
this.configureSheets(spreadsheet);
|
|
382
|
+
this.spreadsheetService.componentInitialized.next();
|
|
331
383
|
});
|
|
332
384
|
this.subs.add(this.spreadsheetService.sheetsChanged.subscribe(this.onSheetsChanged.bind(this)));
|
|
333
385
|
this.subs.add(this.spreadsheetService.activeSheetChanged.subscribe(this.onActiveSheetChanged.bind(this)));
|
|
334
386
|
this.subs.add(this.spreadsheetService.selectionChanged.subscribe(range => {
|
|
335
387
|
this.currentRange = range;
|
|
336
|
-
|
|
337
|
-
this.popupRef.close();
|
|
338
|
-
this.popupRef = null;
|
|
339
|
-
}
|
|
388
|
+
this.closePopup();
|
|
340
389
|
}));
|
|
341
390
|
this.spreadsheetService.dialogContainer = this.dialogContainer;
|
|
342
391
|
});
|
|
343
392
|
this.registerEditors();
|
|
393
|
+
this.spreadsheetService.spreadsheetComponent = this;
|
|
394
|
+
this.sortMenuItems = [{
|
|
395
|
+
text: this.messageFor('sortAsc'),
|
|
396
|
+
svgIcon: this.sortAscSmallIcon,
|
|
397
|
+
icon: 'sort-asc-small'
|
|
398
|
+
}, {
|
|
399
|
+
text: this.messageFor('sortDesc'),
|
|
400
|
+
svgIcon: this.sortDescSmallIcon,
|
|
401
|
+
icon: 'sort-desc-small'
|
|
402
|
+
}];
|
|
344
403
|
}
|
|
345
404
|
ngOnChanges(changes) {
|
|
346
405
|
const dynamicOptions = [
|
|
@@ -383,6 +442,18 @@ export class SpreadsheetComponent {
|
|
|
383
442
|
this.contextMenuItems = this.contextMenuItemsForTarget(targetType, e.showUnhide, e.showUnmerge);
|
|
384
443
|
this.contextMenu.show({ top: e.originalEvent.pageY, left: e.originalEvent.pageX });
|
|
385
444
|
}
|
|
445
|
+
/**
|
|
446
|
+
* @hidden
|
|
447
|
+
*/
|
|
448
|
+
isChecked = (dataItem) => {
|
|
449
|
+
if (this.containsItem(dataItem)) {
|
|
450
|
+
return "checked";
|
|
451
|
+
}
|
|
452
|
+
if (this.isIndeterminate(dataItem.items)) {
|
|
453
|
+
return "indeterminate";
|
|
454
|
+
}
|
|
455
|
+
return "none";
|
|
456
|
+
};
|
|
386
457
|
/**
|
|
387
458
|
* @hidden
|
|
388
459
|
*/
|
|
@@ -486,11 +557,116 @@ export class SpreadsheetComponent {
|
|
|
486
557
|
this.selectedMenuItem = this.menuItems.find(item => item.active);
|
|
487
558
|
}
|
|
488
559
|
}
|
|
560
|
+
/**
|
|
561
|
+
* @hidden
|
|
562
|
+
*/
|
|
563
|
+
onToggle(expanded, filterType) {
|
|
564
|
+
this[`${filterType}Expanded`] = expanded;
|
|
565
|
+
if (expanded) {
|
|
566
|
+
const otherFilterType = filterType === 'condition' ? 'value' : 'condition';
|
|
567
|
+
this[`${otherFilterType}Expanded`] = false;
|
|
568
|
+
}
|
|
569
|
+
this.cdr.detectChanges();
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* @hidden
|
|
573
|
+
*/
|
|
574
|
+
filterApply(filterType) {
|
|
575
|
+
if (!this.currentFilterOptions) {
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
let filterData;
|
|
579
|
+
if (filterType === 'value') {
|
|
580
|
+
const checkedValues = this.checkedKeys
|
|
581
|
+
.filter(key => key !== this.messageFor('filterMenuAll'))
|
|
582
|
+
.map(key => {
|
|
583
|
+
const item = this.findItemByText(this.rangeFilterValuesList, key);
|
|
584
|
+
return item ? item.unformattedValue : key;
|
|
585
|
+
});
|
|
586
|
+
const hasBlanks = checkedValues.some(v => v === undefined || v === null);
|
|
587
|
+
const nonBlankValues = checkedValues.filter(v => v !== undefined && v !== null);
|
|
588
|
+
filterData = {
|
|
589
|
+
blanks: hasBlanks,
|
|
590
|
+
values: nonBlankValues.length > 0 ? nonBlankValues : undefined
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
else if (this.selectedCondition?.comparer !== 'none' && this.conditionValue !== null && this.conditionValue !== undefined) {
|
|
594
|
+
filterData = {
|
|
595
|
+
criteria: [{
|
|
596
|
+
operator: this.selectedCondition.comparer,
|
|
597
|
+
value: this.conditionValue
|
|
598
|
+
}]
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
else if (this.selectedCondition?.comparer === 'none') {
|
|
602
|
+
this.spreadsheetWidget.executeCommand({
|
|
603
|
+
command: 'ClearFilterCommand',
|
|
604
|
+
options: { column: this.currentFilterOptions?.column }
|
|
605
|
+
});
|
|
606
|
+
this.closePopup();
|
|
607
|
+
return;
|
|
608
|
+
}
|
|
609
|
+
if (filterData) {
|
|
610
|
+
const commandOptions = {
|
|
611
|
+
column: this.currentFilterOptions.column,
|
|
612
|
+
operatingRange: this.currentFilterOptions.range
|
|
613
|
+
};
|
|
614
|
+
if (filterType === 'value') {
|
|
615
|
+
commandOptions.valueFilter = filterData;
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
commandOptions.customFilter = filterData;
|
|
619
|
+
}
|
|
620
|
+
this.spreadsheetWidget.executeCommand({
|
|
621
|
+
command: 'ApplyFilterCommand',
|
|
622
|
+
options: commandOptions
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
this.closePopup();
|
|
626
|
+
}
|
|
627
|
+
/**
|
|
628
|
+
* @hidden
|
|
629
|
+
*/
|
|
630
|
+
filterClear() {
|
|
631
|
+
this.spreadsheetWidget.executeCommand({
|
|
632
|
+
command: 'ClearFilterCommand',
|
|
633
|
+
options: { column: this.currentFilterOptions?.column }
|
|
634
|
+
});
|
|
635
|
+
this.closePopup();
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* @hidden
|
|
639
|
+
*/
|
|
640
|
+
onSortItemClick(item) {
|
|
641
|
+
const dir = item.text === this.messageFor('sortAsc') ? 'asc' : 'desc';
|
|
642
|
+
const noHeaderRange = this.currentFilterOptions?.range?.resize({ top: 1 });
|
|
643
|
+
const options = {
|
|
644
|
+
value: dir,
|
|
645
|
+
sheet: false,
|
|
646
|
+
operatingRange: noHeaderRange,
|
|
647
|
+
column: this.currentFilterOptions?.column
|
|
648
|
+
};
|
|
649
|
+
this.spreadsheetWidget.executeCommand({ command: 'SortCommand', options });
|
|
650
|
+
}
|
|
651
|
+
/**
|
|
652
|
+
* @hidden
|
|
653
|
+
*/
|
|
654
|
+
closePopup() {
|
|
655
|
+
if (this.popupRef) {
|
|
656
|
+
this.popupRef.close();
|
|
657
|
+
this.popupRef = null;
|
|
658
|
+
}
|
|
659
|
+
if (this.popupPositionChangeSub) {
|
|
660
|
+
this.popupPositionChangeSub.unsubscribe();
|
|
661
|
+
this.popupPositionChangeSub = null;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
489
664
|
onChange = (e) => {
|
|
490
665
|
hasObservers(this.change) && this.change.emit(e);
|
|
491
666
|
this.spreadsheetService.selectionChanged.next(e.range);
|
|
492
667
|
};
|
|
493
668
|
onSelectionChange = (e) => {
|
|
669
|
+
this.closePopup();
|
|
494
670
|
hasObservers(this.selectionChange) && this.selectionChange.emit(e);
|
|
495
671
|
this.spreadsheetService.selectionChanged.next(e.range);
|
|
496
672
|
};
|
|
@@ -526,6 +702,25 @@ export class SpreadsheetComponent {
|
|
|
526
702
|
this.updateActiveSheet(this.spreadsheetService.activeSheet);
|
|
527
703
|
});
|
|
528
704
|
}
|
|
705
|
+
onClipboardEvent(event, type) {
|
|
706
|
+
if (hasObservers(this.clipboard)) {
|
|
707
|
+
this.ngZone.runOutsideAngular(() => {
|
|
708
|
+
setTimeout(() => {
|
|
709
|
+
const { preventDefault, isDefaultPrevented, clipboardContent, range, sender } = event;
|
|
710
|
+
const workbookClipboardContent = clipboardContent || this.spreadsheetWidget.workbook._clipboard._internalContent;
|
|
711
|
+
const eventArgs = {
|
|
712
|
+
type,
|
|
713
|
+
clipboardContent: { data: workbookClipboardContent.data, mergedCells: workbookClipboardContent.mergedCells },
|
|
714
|
+
range,
|
|
715
|
+
sender,
|
|
716
|
+
preventDefault: preventDefault.bind(event),
|
|
717
|
+
isDefaultPrevented: isDefaultPrevented.bind(event)
|
|
718
|
+
};
|
|
719
|
+
this.ngZone.run(() => this.clipboard.emit(eventArgs));
|
|
720
|
+
});
|
|
721
|
+
});
|
|
722
|
+
}
|
|
723
|
+
}
|
|
529
724
|
get options() {
|
|
530
725
|
return {
|
|
531
726
|
activeSheet: this.activeSheet,
|
|
@@ -551,12 +746,17 @@ export class SpreadsheetComponent {
|
|
|
551
746
|
formulaCellInputRef: { current: this.formulaCellInputRef.current },
|
|
552
747
|
nameBoxRef: { current: this.nameBoxRef.current },
|
|
553
748
|
getIconHTMLString: (options) => {
|
|
749
|
+
if (typeof options === 'string' && options === 'k-i-caret-alt-down') {
|
|
750
|
+
//the caret-alt-down filter button icon has different config coming from the common package and has to be handled separately
|
|
751
|
+
options = { iconName: 'caret-alt-down', svgIcon: caretAltDownIcon };
|
|
752
|
+
}
|
|
554
753
|
const iconWrapper = this.container.createComponent(IconWrapperComponent);
|
|
555
754
|
iconWrapper.instance.name = options.iconName;
|
|
556
755
|
iconWrapper.instance.svgIcon = options.svgIcon;
|
|
557
756
|
iconWrapper.changeDetectorRef.detectChanges();
|
|
558
757
|
return iconWrapper.instance.element.nativeElement;
|
|
559
|
-
}
|
|
758
|
+
},
|
|
759
|
+
createFilterMenu: this.createFilterMenu.bind(this)
|
|
560
760
|
};
|
|
561
761
|
}
|
|
562
762
|
contextMenuItemsForTarget(target, unhide, unmerge) {
|
|
@@ -731,8 +931,7 @@ export class SpreadsheetComponent {
|
|
|
731
931
|
registerEditor('_validation_list', () => {
|
|
732
932
|
return {
|
|
733
933
|
edit: (options) => {
|
|
734
|
-
this.
|
|
735
|
-
this.popupRef = null;
|
|
934
|
+
this.closePopup();
|
|
736
935
|
this.popupRef = this.popupService.open({
|
|
737
936
|
anchor: options.view.element.querySelector('.k-spreadsheet-editor-button'),
|
|
738
937
|
content: ListEditorComponent,
|
|
@@ -742,16 +941,14 @@ export class SpreadsheetComponent {
|
|
|
742
941
|
});
|
|
743
942
|
const list = this.popupRef.content.instance;
|
|
744
943
|
list.itemSelect.subscribe((item) => {
|
|
745
|
-
this.
|
|
746
|
-
this.popupRef = null;
|
|
944
|
+
this.closePopup();
|
|
747
945
|
const itemValue = item.value;
|
|
748
946
|
if (isPresent(itemValue)) {
|
|
749
947
|
options.callback(itemValue);
|
|
750
948
|
}
|
|
751
949
|
});
|
|
752
950
|
list.close.subscribe(() => {
|
|
753
|
-
this.
|
|
754
|
-
this.popupRef = null;
|
|
951
|
+
this.closePopup();
|
|
755
952
|
});
|
|
756
953
|
const items = options.validation.from.value;
|
|
757
954
|
const data = [];
|
|
@@ -770,8 +967,7 @@ export class SpreadsheetComponent {
|
|
|
770
967
|
registerEditor('_validation_date', () => {
|
|
771
968
|
return {
|
|
772
969
|
edit: (options) => {
|
|
773
|
-
this.
|
|
774
|
-
this.popupRef = null;
|
|
970
|
+
this.closePopup();
|
|
775
971
|
this.popupRef = this.popupService.open({
|
|
776
972
|
anchor: options.view.element.querySelector('.k-spreadsheet-editor-button'),
|
|
777
973
|
content: CalendarComponent,
|
|
@@ -780,8 +976,7 @@ export class SpreadsheetComponent {
|
|
|
780
976
|
});
|
|
781
977
|
const calendar = this.popupRef.content.instance;
|
|
782
978
|
calendar.valueChange.subscribe((value) => {
|
|
783
|
-
this.
|
|
784
|
-
this.popupRef = null;
|
|
979
|
+
this.closePopup();
|
|
785
980
|
if (!options.range.format()) {
|
|
786
981
|
options.range.format('yyyy-mm-dd');
|
|
787
982
|
}
|
|
@@ -880,12 +1075,6 @@ export class SpreadsheetComponent {
|
|
|
880
1075
|
});
|
|
881
1076
|
});
|
|
882
1077
|
}
|
|
883
|
-
closePopup() {
|
|
884
|
-
if (this.popupRef) {
|
|
885
|
-
this.popupRef.close();
|
|
886
|
-
this.popupRef = null;
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
1078
|
isValidFormula(validation) {
|
|
890
1079
|
const formula = calc.runtime.Formula;
|
|
891
1080
|
return validation instanceof formula && rowAndColPresent(validation.value);
|
|
@@ -893,8 +1082,196 @@ export class SpreadsheetComponent {
|
|
|
893
1082
|
createDate(validation, sheet) {
|
|
894
1083
|
return new Date(serialToDate(isPresent(sheet) ? sheet.range(validation.value.row, validation.value.col).value() : validation));
|
|
895
1084
|
}
|
|
896
|
-
|
|
897
|
-
|
|
1085
|
+
createFilterMenu(options) {
|
|
1086
|
+
this.closePopup();
|
|
1087
|
+
this.currentFilterOptions = options;
|
|
1088
|
+
if (this.filterMenuOpened) {
|
|
1089
|
+
this.filterMenuOpened = false;
|
|
1090
|
+
return {
|
|
1091
|
+
bind: () => { },
|
|
1092
|
+
openFor: () => { },
|
|
1093
|
+
close: () => { },
|
|
1094
|
+
destroy: () => { }
|
|
1095
|
+
};
|
|
1096
|
+
}
|
|
1097
|
+
this.ngZone.onStable.pipe(take(1)).subscribe(() => {
|
|
1098
|
+
const childItems = this.extractColumnFilterValues(options.range, options.column);
|
|
1099
|
+
const parentItem = {
|
|
1100
|
+
text: this.messageFor('filterMenuAll'),
|
|
1101
|
+
value: null,
|
|
1102
|
+
checked: childItems.every(i => i.checked),
|
|
1103
|
+
items: childItems
|
|
1104
|
+
};
|
|
1105
|
+
this.rangeFilterValuesList = [parentItem];
|
|
1106
|
+
this.checkedKeys = [parentItem, ...childItems].filter(i => i.checked).map(i => i.text);
|
|
1107
|
+
});
|
|
1108
|
+
this.filterConditionsList = [
|
|
1109
|
+
{ type: 'none', comparerType: 'none', comparer: 'none', text: this.messageFor('filterNoneOperator') },
|
|
1110
|
+
{ type: 'string', comparerType: 'string_contains', comparer: 'contains', text: this.messageFor('filterContainsOperator') },
|
|
1111
|
+
{ type: 'string', comparerType: 'string_doesnotcontain', comparer: 'doesnotcontain', text: this.messageFor('filterNotContainsOperator') },
|
|
1112
|
+
{ type: 'string', comparerType: 'string_startswith', comparer: 'startswith', text: this.messageFor('filterStartsWithOperator') },
|
|
1113
|
+
{ type: 'string', comparerType: 'string_endswith', comparer: 'endswith', text: this.messageFor('filterEndsWithOperator') },
|
|
1114
|
+
{ type: 'string', comparerType: 'string_matches', comparer: 'eq', text: this.messageFor('filterMatchesOperator') },
|
|
1115
|
+
{ type: 'string', comparerType: 'string_doesnotmatch', comparer: 'neq', text: this.messageFor('filterNotMatchesOperator') },
|
|
1116
|
+
{ type: 'date', comparerType: 'date_eq', comparer: 'eq', text: this.messageFor('filterDateEqOperator') },
|
|
1117
|
+
{ type: 'date', comparerType: 'date_neq', comparer: 'neq', text: this.messageFor('filterDateNotEqOperator') },
|
|
1118
|
+
{ type: 'date', comparerType: 'date_lt', comparer: 'lt', text: this.messageFor('filterBeforeOperator') },
|
|
1119
|
+
{ type: 'date', comparerType: 'date_gt', comparer: 'gt', text: this.messageFor('filterAfterOperator') },
|
|
1120
|
+
{ type: 'number', comparerType: 'number_eq', comparer: 'eq', text: this.messageFor('filterEqOperator') },
|
|
1121
|
+
{ type: 'number', comparerType: 'number_neq', comparer: 'neq', text: this.messageFor('filterNotEqOperator') },
|
|
1122
|
+
{ type: 'number', comparerType: 'number_gte', comparer: 'gte', text: this.messageFor('filterGteOperator') },
|
|
1123
|
+
{ type: 'number', comparerType: 'number_gt', comparer: 'gt', text: this.messageFor('filterGtOperator') },
|
|
1124
|
+
{ type: 'number', comparerType: 'number_lte', comparer: 'lte', text: this.messageFor('filterLteOperator') },
|
|
1125
|
+
{ type: 'number', comparerType: 'number_lt', comparer: 'lt', text: this.messageFor('filterLtOperator') }
|
|
1126
|
+
];
|
|
1127
|
+
const currentSheetFilter = this.spreadsheetWidget.activeSheet().filter();
|
|
1128
|
+
const columnFilter = currentSheetFilter?.columns?.find((col) => col.index === options.column);
|
|
1129
|
+
if (columnFilter) {
|
|
1130
|
+
const filter = columnFilter.filter.toJSON();
|
|
1131
|
+
if (filter.filter === 'custom') {
|
|
1132
|
+
const valueType = typeof filter.criteria[0].value === 'object' ? 'date' : typeof filter.criteria[0].value;
|
|
1133
|
+
this.selectedCondition = this.filterConditionsList.find(c => (c.comparer === filter?.criteria?.[0]?.operator) && (c.type === valueType));
|
|
1134
|
+
this.conditionValue = filter?.criteria?.[0]?.value;
|
|
1135
|
+
}
|
|
1136
|
+
else {
|
|
1137
|
+
this.checkedKeys = filter.values;
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
else {
|
|
1141
|
+
this.selectedCondition = this.filterConditionsList[0];
|
|
1142
|
+
}
|
|
1143
|
+
return {
|
|
1144
|
+
bind: (_eventName, _handler) => { },
|
|
1145
|
+
openFor: (anchor) => {
|
|
1146
|
+
this.popupRef = this.popupService.open({
|
|
1147
|
+
anchor,
|
|
1148
|
+
content: this.filterMenuTemplate,
|
|
1149
|
+
popupAlign: { horizontal: 'left', vertical: 'top' },
|
|
1150
|
+
anchorAlign: { horizontal: 'left', vertical: 'bottom' },
|
|
1151
|
+
popupClass: 'k-spreadsheet-filter-menu k-column-menu k-group k-reset'
|
|
1152
|
+
});
|
|
1153
|
+
this.popupPositionChangeSub = this.popupRef.popupPositionChange.subscribe(({ offset }) => {
|
|
1154
|
+
if (offset.top === 0 && offset.left === 0) {
|
|
1155
|
+
this.closePopup();
|
|
1156
|
+
this.filterMenuOpened = false;
|
|
1157
|
+
}
|
|
1158
|
+
});
|
|
1159
|
+
this.filterMenuOpened = true;
|
|
1160
|
+
},
|
|
1161
|
+
close: () => { this.closePopup(); this.filterMenuOpened = false; },
|
|
1162
|
+
destroy: () => { this.closePopup(); this.filterMenuOpened = false; }
|
|
1163
|
+
};
|
|
1164
|
+
}
|
|
1165
|
+
extractColumnFilterValues(range, column) {
|
|
1166
|
+
const results = [];
|
|
1167
|
+
const sheet = range.sheet();
|
|
1168
|
+
const columnRange = range.column(column).resize({ top: 1 });
|
|
1169
|
+
const blanksMessage = this.localization.get('blankValues');
|
|
1170
|
+
columnRange.forEachCell((rowIndex, _colIndex, cellData) => {
|
|
1171
|
+
const isVisible = !sheet.isHiddenRow(rowIndex);
|
|
1172
|
+
let cellValue = cellData.value;
|
|
1173
|
+
const unformattedValue = cellValue;
|
|
1174
|
+
let displayText;
|
|
1175
|
+
let valueType;
|
|
1176
|
+
if (cellValue === undefined) {
|
|
1177
|
+
valueType = 'blank';
|
|
1178
|
+
}
|
|
1179
|
+
else if (cellData.format) {
|
|
1180
|
+
valueType = formatting.type(cellValue, cellData.format);
|
|
1181
|
+
}
|
|
1182
|
+
else {
|
|
1183
|
+
valueType = typeof cellValue;
|
|
1184
|
+
}
|
|
1185
|
+
if (cellValue !== null && cellData.format) {
|
|
1186
|
+
displayText = formatting.text(cellValue, cellData.format);
|
|
1187
|
+
}
|
|
1188
|
+
else {
|
|
1189
|
+
displayText = valueType === 'blank' ? blanksMessage : cellValue;
|
|
1190
|
+
}
|
|
1191
|
+
if (valueType === 'percent' || valueType === 'currency') {
|
|
1192
|
+
valueType = 'number';
|
|
1193
|
+
}
|
|
1194
|
+
if (valueType === 'date') {
|
|
1195
|
+
cellValue = serialToDate(cellValue);
|
|
1196
|
+
}
|
|
1197
|
+
results.push({
|
|
1198
|
+
dataType: valueType,
|
|
1199
|
+
value: cellValue,
|
|
1200
|
+
text: displayText,
|
|
1201
|
+
checked: isVisible,
|
|
1202
|
+
unformattedValue
|
|
1203
|
+
});
|
|
1204
|
+
});
|
|
1205
|
+
const uniqueValuesSorted = this.removeDuplicateValues(results).sort(this.compareFilterValues);
|
|
1206
|
+
return uniqueValuesSorted;
|
|
1207
|
+
}
|
|
1208
|
+
removeDuplicateValues(values) {
|
|
1209
|
+
const uniqueMap = new Map();
|
|
1210
|
+
for (const item of values) {
|
|
1211
|
+
const key = `${item.dataType}:${item.value}`;
|
|
1212
|
+
if (!uniqueMap.has(key)) {
|
|
1213
|
+
uniqueMap.set(key, item);
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
return Array.from(uniqueMap.values());
|
|
1217
|
+
}
|
|
1218
|
+
compareFilterValues(a, b) {
|
|
1219
|
+
if (a.dataType === b.dataType) {
|
|
1220
|
+
switch (a.dataType) {
|
|
1221
|
+
case 'number':
|
|
1222
|
+
return a.value - b.value;
|
|
1223
|
+
case 'date':
|
|
1224
|
+
return a.value.getTime() - b.value.getTime();
|
|
1225
|
+
case 'blank':
|
|
1226
|
+
return 0;
|
|
1227
|
+
default:
|
|
1228
|
+
return String(a.value).localeCompare(String(b.value));
|
|
1229
|
+
}
|
|
1230
|
+
}
|
|
1231
|
+
if (a.dataType === 'blank')
|
|
1232
|
+
return -1;
|
|
1233
|
+
if (b.dataType === 'blank')
|
|
1234
|
+
return 1;
|
|
1235
|
+
if (a.dataType === 'number')
|
|
1236
|
+
return -1;
|
|
1237
|
+
if (b.dataType === 'number')
|
|
1238
|
+
return 1;
|
|
1239
|
+
if (a.dataType === 'date')
|
|
1240
|
+
return -1;
|
|
1241
|
+
if (b.dataType === 'date')
|
|
1242
|
+
return 1;
|
|
1243
|
+
return 0;
|
|
1244
|
+
}
|
|
1245
|
+
containsItem(item) {
|
|
1246
|
+
return this.checkedKeys.indexOf(item.text) > -1;
|
|
1247
|
+
}
|
|
1248
|
+
findItemByText(items, text) {
|
|
1249
|
+
for (const item of items) {
|
|
1250
|
+
if (item.text === text) {
|
|
1251
|
+
return item;
|
|
1252
|
+
}
|
|
1253
|
+
if (item.items && item.items.length > 0) {
|
|
1254
|
+
const found = this.findItemByText(item.items, text);
|
|
1255
|
+
if (found) {
|
|
1256
|
+
return found;
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
return null;
|
|
1261
|
+
}
|
|
1262
|
+
isIndeterminate(items = []) {
|
|
1263
|
+
let idx = 0;
|
|
1264
|
+
let item;
|
|
1265
|
+
while ((item = items[idx])) {
|
|
1266
|
+
if (this.isIndeterminate(item.items) || this.containsItem(item)) {
|
|
1267
|
+
return true;
|
|
1268
|
+
}
|
|
1269
|
+
idx += 1;
|
|
1270
|
+
}
|
|
1271
|
+
return false;
|
|
1272
|
+
}
|
|
1273
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpreadsheetComponent, deps: [{ token: i0.NgZone }, { token: i1.IntlService }, { token: i0.ElementRef }, { token: i2.LocalizationService }, { token: i3.SpreadsheetService }, { token: i4.SpreadsheetToolsService }, { token: i5.ErrorHandlingService }, { token: i6.DialogService }, { token: i7.PopupService }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1274
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SpreadsheetComponent, isStandalone: true, selector: "kendo-spreadsheet", inputs: { menuItems: "menuItems", overflow: "overflow", formulaListMaxHeight: "formulaListMaxHeight", activeSheet: "activeSheet", sheets: "sheets", columns: "columns", columnWidth: "columnWidth", defaultCellStyle: "defaultCellStyle", headerHeight: "headerHeight", headerWidth: "headerWidth", rowHeight: "rowHeight", rows: "rows", cellEditors: "cellEditors", images: "images", excel: "excel" }, outputs: { change: "change", formatChange: "formatChange", selectionChange: "selectionChange", excelExport: "excelExport", excelImport: "excelImport", activeSheetChange: "activeSheetChange", clipboard: "clipboard" }, host: { properties: { "class.k-spreadsheet": "this.hostClass", "attr.role": "this.role" } }, providers: [
|
|
898
1275
|
SpreadsheetLocalizationService,
|
|
899
1276
|
SpreadsheetService,
|
|
900
1277
|
{
|
|
@@ -908,7 +1285,7 @@ export class SpreadsheetComponent {
|
|
|
908
1285
|
SpreadsheetToolsService,
|
|
909
1286
|
PopupService,
|
|
910
1287
|
ErrorHandlingService
|
|
911
|
-
], viewQueries: [{ propertyName: "formulaBarInputRef", first: true, predicate: ["formulaBar"], descendants: true, read: FormulaInputDirective }, { propertyName: "formulaCellInputRef", first: true, predicate: ["formulaCell"], descendants: true, read: FormulaInputDirective }, { propertyName: "nameBoxRef", first: true, predicate: ["nameBox"], descendants: true }, { propertyName: "dialogContainer", first: true, predicate: ["dialogContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true }], exportAs: ["kendo-spreadsheet"], usesOnChanges: true, ngImport: i0, template: `
|
|
1288
|
+
], viewQueries: [{ propertyName: "formulaBarInputRef", first: true, predicate: ["formulaBar"], descendants: true, read: FormulaInputDirective }, { propertyName: "formulaCellInputRef", first: true, predicate: ["formulaCell"], descendants: true, read: FormulaInputDirective }, { propertyName: "nameBoxRef", first: true, predicate: ["nameBox"], descendants: true }, { propertyName: "dialogContainer", first: true, predicate: ["dialogContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true }, { propertyName: "filterMenuTemplate", first: true, predicate: ["filterMenuTemplate"], descendants: true }], exportAs: ["kendo-spreadsheet"], usesOnChanges: true, ngImport: i0, template: `
|
|
912
1289
|
<ng-container
|
|
913
1290
|
kendoSpreadsheetLocalizedMessages
|
|
914
1291
|
i18n-background="kendo.spreadsheet.background|The title of the tool that changes the text background color."
|
|
@@ -1132,7 +1509,65 @@ export class SpreadsheetComponent {
|
|
|
1132
1509
|
i18n-sheetMoveRight="kendo.spreadsheet.sheetMoveRight|The text of the Sheet menu Move Right option."
|
|
1133
1510
|
sheetMoveRight="Move Right"
|
|
1134
1511
|
i18n-invalidNameError="kendo.spreadsheet.invalidNameError|The content of the dialog that warns about invalid name input."
|
|
1135
|
-
invalidNameError="{{ 'Invalid name: {inputValue}' }}"
|
|
1512
|
+
invalidNameError="{{ 'Invalid name: {inputValue}' }}"
|
|
1513
|
+
i18n-cantSortMixedCells="kendo.spreadsheet.cantSortMixedCells|The content of the dialog that warns about sorting range containing cells of mixed shapes."
|
|
1514
|
+
cantSortMixedCells="Cannot sort range containing cells of mixed shapes"
|
|
1515
|
+
i18n-cantSortNullRef="kendo.spreadsheet.cantSortNullRef|The content of the dialog that warns about sorting incorrect (empty) range."
|
|
1516
|
+
cantSortNullRef="Cannot sort empty selection"
|
|
1517
|
+
i18n-filterApply="kendo.spreadsheet.filterApply|The text of the **Apply** button in the filter menu."
|
|
1518
|
+
filterApply="Apply"
|
|
1519
|
+
i18n-filterClear="kendo.spreadsheet.filterClear|The text of the **Clear** button in the filter menu."
|
|
1520
|
+
filterClear="Clear"
|
|
1521
|
+
i18n-filterMenuAll="kendo.spreadsheet.filterMenuAll|The text of the **All** grouping item in the filter menu."
|
|
1522
|
+
filterMenuAll="All"
|
|
1523
|
+
i18n-blankValues="kendo.spreadsheet.blankValues|The text for the blank (empty) values."
|
|
1524
|
+
blankValues="Blank"
|
|
1525
|
+
i18n-filterNoneOperator="kendo.spreadsheet.filterNoneOperator|The text for the **none** filter operator."
|
|
1526
|
+
filterNoneOperator="None"
|
|
1527
|
+
i18n-filterContainsOperator="kendo.spreadsheet.filterContainsOperator|The text of the **contains** filter operator"
|
|
1528
|
+
filterContainsOperator="Text contains"
|
|
1529
|
+
i18n-filterNotContainsOperator="kendo.spreadsheet.filterNotContainsOperator|The text of the **does not contain** filter operator"
|
|
1530
|
+
filterNotContainsOperator="Text does not contain"
|
|
1531
|
+
i18n-filterStartsWithOperator="kendo.spreadsheet.filterStartsWithOperator|The text of the **starts with** filter operator"
|
|
1532
|
+
filterStartsWithOperator="Text starts with"
|
|
1533
|
+
i18n-filterEndsWithOperator="kendo.spreadsheet.filterEndsWithOperator|The text of the **ends with** filter operator"
|
|
1534
|
+
filterEndsWithOperator="Text ends with"
|
|
1535
|
+
i18n-filterMatchesOperator="kendo.spreadsheet.filterMatchesOperator|The text of the **matches** filter operator"
|
|
1536
|
+
filterMatchesOperator="Text matches"
|
|
1537
|
+
i18n-filterNotMatchesOperator="kendo.spreadsheet.filterNotMatchesOperator|The text of the **does not match** filter operator"
|
|
1538
|
+
filterNotMatchesOperator="Text does not match"
|
|
1539
|
+
i18n-filterDateEqOperator="kendo.spreadsheet.filterDateEqOperator|The text of the **Date is** filter operator"
|
|
1540
|
+
filterDateEqOperator="Date is"
|
|
1541
|
+
i18n-filterDateNotEqOperator="kendo.spreadsheet.filterDateNotEqOperator|The text of the **Date is not** filter operator"
|
|
1542
|
+
filterDateNotEqOperator="Date is not"
|
|
1543
|
+
i18n-filterBeforeOperator="kendo.spreadsheet.filterBeforeOperator|The text of the **Date is before** filter operator"
|
|
1544
|
+
filterBeforeOperator="Date is before"
|
|
1545
|
+
i18n-filterAfterOperator="kendo.spreadsheet.filterAfterOperator|The text of the **Date is after** filter operator"
|
|
1546
|
+
filterAfterOperator="Date is after"
|
|
1547
|
+
i18n-filterEqOperator="kendo.spreadsheet.filterEqOperator|Sets the text for the **Equal (Is equal to)** filter operator."
|
|
1548
|
+
filterEqOperator="Is equal to"
|
|
1549
|
+
i18n-filterNotEqOperator="kendo.spreadsheet.filterNotEqOperator|Sets the text for the **Not equal (Is not equal to)** filter operator."
|
|
1550
|
+
filterNotEqOperator="Is not equal to"
|
|
1551
|
+
i18n-filterGteOperator="kendo.spreadsheet.filterGteOperator|The text of the **greater than or equal to** filter operator"
|
|
1552
|
+
filterGteOperator="Is greater than or equal to"
|
|
1553
|
+
i18n-filterGtOperator="kendo.spreadsheet.filterGtOperator|The text of the **greater than** filter operator"
|
|
1554
|
+
filterGtOperator="Is greater than"
|
|
1555
|
+
i18n-filterLteOperator="kendo.spreadsheet.filterLteOperator|The text of the **less than or equal to** filter operator"
|
|
1556
|
+
filterLteOperator="Is less than or equal to"
|
|
1557
|
+
i18n-filterLtOperator="kendo.spreadsheet.filterLtOperator|The text of the **less than** filter operator"
|
|
1558
|
+
filterLtOperator="Is less than"
|
|
1559
|
+
i18n-filterMenuConditionItem="kendo.spreadsheet.filterMenuConditionItem|The text of the **Filter by condition** menu item."
|
|
1560
|
+
filterMenuConditionItem="Filter by condition"
|
|
1561
|
+
i18n-filterMenuValueItem="kendo.spreadsheet.filterMenuValueItem|The text of the **Filter by value** menu item."
|
|
1562
|
+
filterMenuValueItem="Filter by value"
|
|
1563
|
+
i18n-sort="kendo.spreadsheet.sort|The title of the Sort ToolBar tool."
|
|
1564
|
+
sort="Sort"
|
|
1565
|
+
i18n-sortAsc="kendo.spreadsheet.sortAsc|The text of the **Sort range A to Z** option."
|
|
1566
|
+
sortAsc="Sort range A to Z"
|
|
1567
|
+
i18n-sortDesc="kendo.spreadsheet.sortDesc|The text of the **Sort range Z to A** option."
|
|
1568
|
+
sortDesc="Sort range Z to A"
|
|
1569
|
+
i18n-unsort="kendo.spreadsheet.unsort|The text of the **Unsort** option."
|
|
1570
|
+
unsort="Unsort">
|
|
1136
1571
|
</ng-container>
|
|
1137
1572
|
<div class="k-spreadsheet-header">
|
|
1138
1573
|
<kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
|
|
@@ -1227,6 +1662,10 @@ export class SpreadsheetComponent {
|
|
|
1227
1662
|
class="k-spreadsheet-toolbar"
|
|
1228
1663
|
[overflow]="overflow">
|
|
1229
1664
|
<kendo-toolbar-button kendoSpreadsheetDataValidation></kendo-toolbar-button>
|
|
1665
|
+
<kendo-toolbar-separator></kendo-toolbar-separator>
|
|
1666
|
+
<kendo-toolbar-button kendoSpreadsheetFilter></kendo-toolbar-button>
|
|
1667
|
+
<kendo-toolbar-separator></kendo-toolbar-separator>
|
|
1668
|
+
<kendo-toolbar-dropdownbutton kendoSpreadsheetSort></kendo-toolbar-dropdownbutton>
|
|
1230
1669
|
</kendo-toolbar>
|
|
1231
1670
|
}
|
|
1232
1671
|
</div>
|
|
@@ -1260,16 +1699,98 @@ export class SpreadsheetComponent {
|
|
|
1260
1699
|
[sheetDescriptors]="sheets">
|
|
1261
1700
|
</div>
|
|
1262
1701
|
<ng-container #dialogContainer></ng-container>
|
|
1263
|
-
|
|
1264
|
-
<kendo-contextmenu
|
|
1265
|
-
#contextMenu
|
|
1702
|
+
|
|
1703
|
+
<kendo-contextmenu #contextMenu
|
|
1266
1704
|
[items]="contextMenuItems"
|
|
1267
|
-
|
|
1705
|
+
(select)="onContextMenuSelect($event)">
|
|
1706
|
+
</kendo-contextmenu>
|
|
1268
1707
|
|
|
1708
|
+
<ng-template #filterMenuTemplate>
|
|
1709
|
+
<kendo-spreadsheet-filtermenu-item
|
|
1710
|
+
[innerMenuItems]="sortMenuItems"
|
|
1711
|
+
(itemClick)="onSortItemClick($event)">
|
|
1712
|
+
</kendo-spreadsheet-filtermenu-item>
|
|
1713
|
+
<kendo-spreadsheet-filtermenu-item
|
|
1714
|
+
[expandable]="true"
|
|
1715
|
+
[expanded]="conditionExpanded"
|
|
1716
|
+
expanderClass="k-spreadsheet-condition-filter"
|
|
1717
|
+
[innerMenuItems]="[{text: messageFor('filterMenuConditionItem')}]"
|
|
1718
|
+
(collapse)="onToggle(false, 'condition')"
|
|
1719
|
+
(expand)="onToggle(true, 'condition')">
|
|
1720
|
+
<ng-template kendoSpreadsheetFilterMenuItemContentTemplate>
|
|
1721
|
+
<div class="k-details-content">
|
|
1722
|
+
<kendo-dropdownlist
|
|
1723
|
+
[data]="filterConditionsList"
|
|
1724
|
+
textField="text"
|
|
1725
|
+
valueField="comparerType"
|
|
1726
|
+
[(value)]="selectedCondition">
|
|
1727
|
+
</kendo-dropdownlist>
|
|
1728
|
+
@if (selectedCondition?.type === 'string') {
|
|
1729
|
+
<kendo-textbox [(value)]="conditionValue"></kendo-textbox>
|
|
1730
|
+
} @else if (selectedCondition?.type === 'number') {
|
|
1731
|
+
<kendo-numerictextbox [(value)]="conditionValue"></kendo-numerictextbox>
|
|
1732
|
+
} @else if (selectedCondition?.type === 'date') {
|
|
1733
|
+
<kendo-datepicker [(value)]="conditionValue"></kendo-datepicker>
|
|
1734
|
+
}
|
|
1735
|
+
</div>
|
|
1736
|
+
<div class="k-actions k-actions-stretched k-actions-horizontal">
|
|
1737
|
+
<button
|
|
1738
|
+
kendoButton
|
|
1739
|
+
themeColor="primary"
|
|
1740
|
+
(click)="filterApply('condition')">
|
|
1741
|
+
{{ messageFor('filterApply') }}
|
|
1742
|
+
</button>
|
|
1743
|
+
<button
|
|
1744
|
+
kendoButton
|
|
1745
|
+
(click)="filterClear()">
|
|
1746
|
+
{{ messageFor('filterClear') }}
|
|
1747
|
+
</button>
|
|
1748
|
+
</div>
|
|
1749
|
+
</ng-template>
|
|
1750
|
+
</kendo-spreadsheet-filtermenu-item>
|
|
1751
|
+
<kendo-spreadsheet-filtermenu-item
|
|
1752
|
+
[expandable]="true"
|
|
1753
|
+
[expanded]="valueExpanded"
|
|
1754
|
+
[innerMenuItems]="[{text: messageFor('filterMenuValueItem')}]"
|
|
1755
|
+
(collapse)="onToggle(false, 'value')"
|
|
1756
|
+
(expand)="onToggle(true, 'value')">
|
|
1757
|
+
<ng-template kendoSpreadsheetFilterMenuItemContentTemplate>
|
|
1758
|
+
<div class="k-spreadsheet-value-treeview-wrapper">
|
|
1759
|
+
<kendo-treeview #treeview
|
|
1760
|
+
kendoTreeViewHierarchyBinding
|
|
1761
|
+
childrenField="items"
|
|
1762
|
+
textField="text"
|
|
1763
|
+
[nodes]="rangeFilterValuesList"
|
|
1764
|
+
kendoTreeViewExpandable
|
|
1765
|
+
[(expandedKeys)]="expandedKeys"
|
|
1766
|
+
[filterable]="true"
|
|
1767
|
+
[kendoTreeViewCheckable]="{checkOnClick: true}"
|
|
1768
|
+
[(checkedKeys)]="checkedKeys"
|
|
1769
|
+
checkBy="text"
|
|
1770
|
+
[isChecked]="isChecked">
|
|
1771
|
+
</kendo-treeview>
|
|
1772
|
+
</div>
|
|
1773
|
+
<div class="k-actions k-actions-stretched k-actions-horizontal">
|
|
1774
|
+
<button
|
|
1775
|
+
kendoButton
|
|
1776
|
+
themeColor="primary"
|
|
1777
|
+
(click)="filterApply('value')">
|
|
1778
|
+
{{ messageFor('filterApply') }}
|
|
1779
|
+
</button>
|
|
1780
|
+
<button
|
|
1781
|
+
kendoButton
|
|
1782
|
+
(click)="filterClear()">
|
|
1783
|
+
{{ messageFor('filterClear') }}
|
|
1784
|
+
</button>
|
|
1785
|
+
</div>
|
|
1786
|
+
</ng-template>
|
|
1787
|
+
</kendo-spreadsheet-filtermenu-item>
|
|
1788
|
+
</ng-template>
|
|
1789
|
+
|
|
1269
1790
|
@if (showLicenseWatermark) {
|
|
1270
1791
|
<div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
|
|
1271
1792
|
}
|
|
1272
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoSpreadsheetLocalizedMessages]" }, { kind: "component", type: MenuComponent, selector: "kendo-menu", inputs: ["appendTo", "menuItemTemplate", "ariaRole", "menuItemLinkTemplate"], outputs: ["select", "open", "close"], exportAs: ["kendoMenu"] }, { kind: "directive", type: MainMenuDirective, selector: "[kendoSpreadsheetMenu]" }, { kind: "component", type: MenuItemComponent, selector: "kendo-menu-item", inputs: ["text", "url", "disabled", "cssClass", "cssStyle", "icon", "svgIcon", "data", "separator"] }, { kind: "component", type: ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "fillMode", "tabindex", "size", "tabIndex", "showIcon", "showText"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { kind: "component", type: SpreadsheetLoadFileComponent, selector: "kendo-spreadsheet-load-file-tool" }, { kind: "component", type: ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "rounded", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { kind: "directive", type: SpreadsheetSaveFileDirective, selector: "[kendoSpreadsheetSaveFile]" }, { kind: "component", type: ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "fillMode", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { kind: "directive", type: SpreadsheetUndoDirective, selector: "kendo-toolbar-button[kendoSpreadsheetUndo]" }, { kind: "directive", type: SpreadsheetRedoDirective, selector: "kendo-toolbar-button[kendoSpreadsheetRedo]" }, { kind: "component", type: ToolBarSeparatorComponent, selector: "kendo-toolbar-separator", exportAs: ["kendoToolBarSeparator"] }, { kind: "component", type: SpreadsheetFontFamilyComponent, selector: "kendo-toolbar-dropdownlist[kendoSpreadsheetFontFamily]" }, { kind: "component", type: SpreadsheetFontSizeComponent, selector: "kendo-toolbar-dropdownlist[kendoSpreadsheetFontSize]" }, { kind: "directive", type: SpreadsheetIncreaseFontSizeDirective, selector: "kendo-toolbar-button[kendoSpreadsheetIncreaseFontSize]" }, { kind: "directive", type: SpreadsheetDecreaseFontSizeDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDecreaseFontSize]" }, { kind: "directive", type: SpreadsheetBoldDirective, selector: "kendo-toolbar-button[kendoSpreadsheetBold]" }, { kind: "directive", type: SpreadsheetItalicDirective, selector: "kendo-toolbar-button[kendoSpreadsheetItalic]" }, { kind: "directive", type: SpreadsheetUnderlineDirective, selector: "kendo-toolbar-button[kendoSpreadsheetUnderline]" }, { kind: "component", type: SpreadsheetForeColorComponent, selector: "kendo-spreadsheet-forecolor-tool" }, { kind: "component", type: SpreadsheetBackColorComponent, selector: "kendo-spreadsheet-backcolor-tool" }, { kind: "component", type: ToolBarDropDownButtonComponent, selector: "kendo-toolbar-dropdownbutton", inputs: ["arrowIcon", "title", "showText", "showIcon", "text", "icon", "svgIcon", "iconClass", "imageUrl", "popupSettings", "look", "primary", "fillMode", "themeColor", "buttonClass", "textField", "disabled", "data"], outputs: ["itemClick", "open", "close"], exportAs: ["kendoToolBarDropDownButton"] }, { kind: "directive", type: SpreadsheetHorizontalTextAlignDirective, selector: "[kendoSpreadsheetHorizontalTextAlign]" }, { kind: "directive", type: SpreadsheetVerticalTextAlignDirective, selector: "[kendoSpreadsheetVerticalTextAlign]" }, { kind: "directive", type: SpreadsheetTextWrapDirective, selector: "kendo-toolbar-button[kendoSpreadsheetTextWrap]" }, { kind: "directive", type: SpreadsheetFormatDirective, selector: "[kendoSpreadsheetFormat]" }, { kind: "directive", type: SpreadsheetInsertLinkDirective, selector: "kendo-toolbar-button[kendoSpreadsheetInsertLink]" }, { kind: "directive", type: SpreadsheetAddColumnLeftButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddColumnLeftButton]" }, { kind: "directive", type: SpreadsheetAddColumnRightButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddColumnRightButton]" }, { kind: "directive", type: SpreadsheetAddRowBelowButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddRowBelowButton]" }, { kind: "directive", type: SpreadsheetAddRowAboveButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddRowAboveButton]" }, { kind: "directive", type: SpreadsheetDeleteColumnButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDeleteColumnButton]" }, { kind: "directive", type: SpreadsheetDeleteRowButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDeleteRowButton]" }, { kind: "directive", type: SpreadsheetDecreaseDecimalDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDecreaseDecimal]" }, { kind: "directive", type: SpreadsheetIncreaseDecimalDirective, selector: "kendo-toolbar-button[kendoSpreadsheetIncreaseDecimal]" }, { kind: "directive", type: SpreadsheetMergeDirective, selector: "[kendoSpreadsheetMerge]" }, { kind: "directive", type: SpreadsheetGridLinesDirective, selector: "kendo-toolbar-button[kendoSpreadsheetGridLines]" }, { kind: "component", type: NameBoxComponent, selector: "[kendoSpreadsheetNameBox]", inputs: ["data", "spreadsheetWidget"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: FormulaInputDirective, selector: "[kendoSpreadsheetFormulaInput]", inputs: ["formulaListMaxHeight"] }, { kind: "component", type: SheetsBarComponent, selector: "[kendoSpreadsheetSheetsBar]", inputs: ["sheets", "sheetDescriptors"] }, { kind: "component", type: ContextMenuComponent, selector: "kendo-contextmenu", inputs: ["showOn", "target", "filter", "alignToAnchor", "vertical", "popupAnimate", "popupAlign", "anchorAlign", "collision", "appendTo", "ariaLabel"], outputs: ["popupOpen", "popupClose", "select", "open", "close"], exportAs: ["kendoContextMenu"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }, { kind: "directive", type: SpreadsheetDataValidationDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDataValidation]" }] });
|
|
1793
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoSpreadsheetLocalizedMessages]" }, { kind: "component", type: MenuComponent, selector: "kendo-menu", inputs: ["appendTo", "menuItemTemplate", "ariaRole", "menuItemLinkTemplate"], outputs: ["select", "open", "close"], exportAs: ["kendoMenu"] }, { kind: "directive", type: MainMenuDirective, selector: "[kendoSpreadsheetMenu]" }, { kind: "component", type: MenuItemComponent, selector: "kendo-menu-item", inputs: ["text", "url", "disabled", "cssClass", "cssStyle", "icon", "svgIcon", "data", "separator"] }, { kind: "component", type: ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "fillMode", "tabindex", "size", "tabIndex", "showIcon", "showText"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { kind: "component", type: SpreadsheetLoadFileComponent, selector: "kendo-spreadsheet-load-file-tool" }, { kind: "component", type: ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "rounded", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { kind: "directive", type: SpreadsheetSaveFileDirective, selector: "[kendoSpreadsheetSaveFile]" }, { kind: "component", type: ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "fillMode", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { kind: "directive", type: SpreadsheetUndoDirective, selector: "kendo-toolbar-button[kendoSpreadsheetUndo]" }, { kind: "directive", type: SpreadsheetRedoDirective, selector: "kendo-toolbar-button[kendoSpreadsheetRedo]" }, { kind: "component", type: ToolBarSeparatorComponent, selector: "kendo-toolbar-separator", exportAs: ["kendoToolBarSeparator"] }, { kind: "component", type: SpreadsheetFontFamilyComponent, selector: "kendo-toolbar-dropdownlist[kendoSpreadsheetFontFamily]" }, { kind: "component", type: SpreadsheetFontSizeComponent, selector: "kendo-toolbar-dropdownlist[kendoSpreadsheetFontSize]" }, { kind: "directive", type: SpreadsheetIncreaseFontSizeDirective, selector: "kendo-toolbar-button[kendoSpreadsheetIncreaseFontSize]" }, { kind: "directive", type: SpreadsheetDecreaseFontSizeDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDecreaseFontSize]" }, { kind: "directive", type: SpreadsheetBoldDirective, selector: "kendo-toolbar-button[kendoSpreadsheetBold]" }, { kind: "directive", type: SpreadsheetItalicDirective, selector: "kendo-toolbar-button[kendoSpreadsheetItalic]" }, { kind: "directive", type: SpreadsheetUnderlineDirective, selector: "kendo-toolbar-button[kendoSpreadsheetUnderline]" }, { kind: "component", type: SpreadsheetForeColorComponent, selector: "kendo-spreadsheet-forecolor-tool" }, { kind: "component", type: SpreadsheetBackColorComponent, selector: "kendo-spreadsheet-backcolor-tool" }, { kind: "component", type: ToolBarDropDownButtonComponent, selector: "kendo-toolbar-dropdownbutton", inputs: ["arrowIcon", "title", "showText", "showIcon", "text", "icon", "svgIcon", "iconClass", "imageUrl", "popupSettings", "look", "primary", "fillMode", "themeColor", "buttonClass", "textField", "disabled", "data"], outputs: ["itemClick", "open", "close"], exportAs: ["kendoToolBarDropDownButton"] }, { kind: "directive", type: SpreadsheetHorizontalTextAlignDirective, selector: "[kendoSpreadsheetHorizontalTextAlign]" }, { kind: "directive", type: SpreadsheetVerticalTextAlignDirective, selector: "[kendoSpreadsheetVerticalTextAlign]" }, { kind: "directive", type: SpreadsheetTextWrapDirective, selector: "kendo-toolbar-button[kendoSpreadsheetTextWrap]" }, { kind: "directive", type: SpreadsheetFormatDirective, selector: "[kendoSpreadsheetFormat]" }, { kind: "directive", type: SpreadsheetInsertLinkDirective, selector: "kendo-toolbar-button[kendoSpreadsheetInsertLink]" }, { kind: "directive", type: SpreadsheetAddColumnLeftButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddColumnLeftButton]" }, { kind: "directive", type: SpreadsheetAddColumnRightButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddColumnRightButton]" }, { kind: "directive", type: SpreadsheetAddRowBelowButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddRowBelowButton]" }, { kind: "directive", type: SpreadsheetAddRowAboveButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddRowAboveButton]" }, { kind: "directive", type: SpreadsheetDeleteColumnButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDeleteColumnButton]" }, { kind: "directive", type: SpreadsheetDeleteRowButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDeleteRowButton]" }, { kind: "directive", type: SpreadsheetDecreaseDecimalDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDecreaseDecimal]" }, { kind: "directive", type: SpreadsheetIncreaseDecimalDirective, selector: "kendo-toolbar-button[kendoSpreadsheetIncreaseDecimal]" }, { kind: "directive", type: SpreadsheetMergeDirective, selector: "[kendoSpreadsheetMerge]" }, { kind: "directive", type: SpreadsheetGridLinesDirective, selector: "kendo-toolbar-button[kendoSpreadsheetGridLines]" }, { kind: "component", type: NameBoxComponent, selector: "[kendoSpreadsheetNameBox]", inputs: ["data", "spreadsheetWidget"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: FormulaInputDirective, selector: "[kendoSpreadsheetFormulaInput]", inputs: ["formulaListMaxHeight"] }, { kind: "component", type: SheetsBarComponent, selector: "[kendoSpreadsheetSheetsBar]", inputs: ["sheets", "sheetDescriptors"] }, { kind: "component", type: ContextMenuComponent, selector: "kendo-contextmenu", inputs: ["showOn", "target", "filter", "alignToAnchor", "vertical", "popupAnimate", "popupAlign", "anchorAlign", "collision", "appendTo", "ariaLabel"], outputs: ["popupOpen", "popupClose", "select", "open", "close"], exportAs: ["kendoContextMenu"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }, { kind: "directive", type: SpreadsheetDataValidationDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDataValidation]" }, { kind: "directive", type: SpreadsheetFilterDirective, selector: "kendo-toolbar-button[kendoSpreadsheetFilter]" }, { kind: "component", type: SpreadsheetFilterMenuItemComponent, selector: "kendo-spreadsheet-filtermenu-item", inputs: ["text", "innerMenuItems", "icon", "expanderClass", "expandable", "svgIcon", "expanded"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: FilterMenuItemContentTemplateDirective, selector: "[kendoSpreadsheetFilterMenuItemContentTemplate]" }, { kind: "component", type: i8.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "hasCheckbox", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { kind: "directive", type: i8.CheckDirective, selector: "[kendoTreeViewCheckable]", inputs: ["isChecked", "checkBy", "checkedKeys", "kendoTreeViewCheckable"], outputs: ["checkedKeysChange"] }, { kind: "directive", type: i8.ExpandDirective, selector: "[kendoTreeViewExpandable]", inputs: ["isExpanded", "expandBy", "expandOnFilter", "expandedKeys"], outputs: ["expandedKeysChange"] }, { kind: "directive", type: i8.HierarchyBindingDirective, selector: "[kendoTreeViewHierarchyBinding]", inputs: ["childrenField", "nodes", "isVisible", "loadOnDemand"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i9.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i9.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "component", type: DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "clearButton", "inputAttributes", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "footer", "navigationItemTemplate", "weekDaysFormat", "showOtherMonthDays", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-datepicker"] }, { kind: "directive", type: SpreadsheetSortDirective, selector: "[kendoSpreadsheetSort]" }] });
|
|
1273
1794
|
}
|
|
1274
1795
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpreadsheetComponent, decorators: [{
|
|
1275
1796
|
type: Component,
|
|
@@ -1515,7 +2036,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1515
2036
|
i18n-sheetMoveRight="kendo.spreadsheet.sheetMoveRight|The text of the Sheet menu Move Right option."
|
|
1516
2037
|
sheetMoveRight="Move Right"
|
|
1517
2038
|
i18n-invalidNameError="kendo.spreadsheet.invalidNameError|The content of the dialog that warns about invalid name input."
|
|
1518
|
-
invalidNameError="{{ 'Invalid name: {inputValue}' }}"
|
|
2039
|
+
invalidNameError="{{ 'Invalid name: {inputValue}' }}"
|
|
2040
|
+
i18n-cantSortMixedCells="kendo.spreadsheet.cantSortMixedCells|The content of the dialog that warns about sorting range containing cells of mixed shapes."
|
|
2041
|
+
cantSortMixedCells="Cannot sort range containing cells of mixed shapes"
|
|
2042
|
+
i18n-cantSortNullRef="kendo.spreadsheet.cantSortNullRef|The content of the dialog that warns about sorting incorrect (empty) range."
|
|
2043
|
+
cantSortNullRef="Cannot sort empty selection"
|
|
2044
|
+
i18n-filterApply="kendo.spreadsheet.filterApply|The text of the **Apply** button in the filter menu."
|
|
2045
|
+
filterApply="Apply"
|
|
2046
|
+
i18n-filterClear="kendo.spreadsheet.filterClear|The text of the **Clear** button in the filter menu."
|
|
2047
|
+
filterClear="Clear"
|
|
2048
|
+
i18n-filterMenuAll="kendo.spreadsheet.filterMenuAll|The text of the **All** grouping item in the filter menu."
|
|
2049
|
+
filterMenuAll="All"
|
|
2050
|
+
i18n-blankValues="kendo.spreadsheet.blankValues|The text for the blank (empty) values."
|
|
2051
|
+
blankValues="Blank"
|
|
2052
|
+
i18n-filterNoneOperator="kendo.spreadsheet.filterNoneOperator|The text for the **none** filter operator."
|
|
2053
|
+
filterNoneOperator="None"
|
|
2054
|
+
i18n-filterContainsOperator="kendo.spreadsheet.filterContainsOperator|The text of the **contains** filter operator"
|
|
2055
|
+
filterContainsOperator="Text contains"
|
|
2056
|
+
i18n-filterNotContainsOperator="kendo.spreadsheet.filterNotContainsOperator|The text of the **does not contain** filter operator"
|
|
2057
|
+
filterNotContainsOperator="Text does not contain"
|
|
2058
|
+
i18n-filterStartsWithOperator="kendo.spreadsheet.filterStartsWithOperator|The text of the **starts with** filter operator"
|
|
2059
|
+
filterStartsWithOperator="Text starts with"
|
|
2060
|
+
i18n-filterEndsWithOperator="kendo.spreadsheet.filterEndsWithOperator|The text of the **ends with** filter operator"
|
|
2061
|
+
filterEndsWithOperator="Text ends with"
|
|
2062
|
+
i18n-filterMatchesOperator="kendo.spreadsheet.filterMatchesOperator|The text of the **matches** filter operator"
|
|
2063
|
+
filterMatchesOperator="Text matches"
|
|
2064
|
+
i18n-filterNotMatchesOperator="kendo.spreadsheet.filterNotMatchesOperator|The text of the **does not match** filter operator"
|
|
2065
|
+
filterNotMatchesOperator="Text does not match"
|
|
2066
|
+
i18n-filterDateEqOperator="kendo.spreadsheet.filterDateEqOperator|The text of the **Date is** filter operator"
|
|
2067
|
+
filterDateEqOperator="Date is"
|
|
2068
|
+
i18n-filterDateNotEqOperator="kendo.spreadsheet.filterDateNotEqOperator|The text of the **Date is not** filter operator"
|
|
2069
|
+
filterDateNotEqOperator="Date is not"
|
|
2070
|
+
i18n-filterBeforeOperator="kendo.spreadsheet.filterBeforeOperator|The text of the **Date is before** filter operator"
|
|
2071
|
+
filterBeforeOperator="Date is before"
|
|
2072
|
+
i18n-filterAfterOperator="kendo.spreadsheet.filterAfterOperator|The text of the **Date is after** filter operator"
|
|
2073
|
+
filterAfterOperator="Date is after"
|
|
2074
|
+
i18n-filterEqOperator="kendo.spreadsheet.filterEqOperator|Sets the text for the **Equal (Is equal to)** filter operator."
|
|
2075
|
+
filterEqOperator="Is equal to"
|
|
2076
|
+
i18n-filterNotEqOperator="kendo.spreadsheet.filterNotEqOperator|Sets the text for the **Not equal (Is not equal to)** filter operator."
|
|
2077
|
+
filterNotEqOperator="Is not equal to"
|
|
2078
|
+
i18n-filterGteOperator="kendo.spreadsheet.filterGteOperator|The text of the **greater than or equal to** filter operator"
|
|
2079
|
+
filterGteOperator="Is greater than or equal to"
|
|
2080
|
+
i18n-filterGtOperator="kendo.spreadsheet.filterGtOperator|The text of the **greater than** filter operator"
|
|
2081
|
+
filterGtOperator="Is greater than"
|
|
2082
|
+
i18n-filterLteOperator="kendo.spreadsheet.filterLteOperator|The text of the **less than or equal to** filter operator"
|
|
2083
|
+
filterLteOperator="Is less than or equal to"
|
|
2084
|
+
i18n-filterLtOperator="kendo.spreadsheet.filterLtOperator|The text of the **less than** filter operator"
|
|
2085
|
+
filterLtOperator="Is less than"
|
|
2086
|
+
i18n-filterMenuConditionItem="kendo.spreadsheet.filterMenuConditionItem|The text of the **Filter by condition** menu item."
|
|
2087
|
+
filterMenuConditionItem="Filter by condition"
|
|
2088
|
+
i18n-filterMenuValueItem="kendo.spreadsheet.filterMenuValueItem|The text of the **Filter by value** menu item."
|
|
2089
|
+
filterMenuValueItem="Filter by value"
|
|
2090
|
+
i18n-sort="kendo.spreadsheet.sort|The title of the Sort ToolBar tool."
|
|
2091
|
+
sort="Sort"
|
|
2092
|
+
i18n-sortAsc="kendo.spreadsheet.sortAsc|The text of the **Sort range A to Z** option."
|
|
2093
|
+
sortAsc="Sort range A to Z"
|
|
2094
|
+
i18n-sortDesc="kendo.spreadsheet.sortDesc|The text of the **Sort range Z to A** option."
|
|
2095
|
+
sortDesc="Sort range Z to A"
|
|
2096
|
+
i18n-unsort="kendo.spreadsheet.unsort|The text of the **Unsort** option."
|
|
2097
|
+
unsort="Unsort">
|
|
1519
2098
|
</ng-container>
|
|
1520
2099
|
<div class="k-spreadsheet-header">
|
|
1521
2100
|
<kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
|
|
@@ -1610,6 +2189,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1610
2189
|
class="k-spreadsheet-toolbar"
|
|
1611
2190
|
[overflow]="overflow">
|
|
1612
2191
|
<kendo-toolbar-button kendoSpreadsheetDataValidation></kendo-toolbar-button>
|
|
2192
|
+
<kendo-toolbar-separator></kendo-toolbar-separator>
|
|
2193
|
+
<kendo-toolbar-button kendoSpreadsheetFilter></kendo-toolbar-button>
|
|
2194
|
+
<kendo-toolbar-separator></kendo-toolbar-separator>
|
|
2195
|
+
<kendo-toolbar-dropdownbutton kendoSpreadsheetSort></kendo-toolbar-dropdownbutton>
|
|
1613
2196
|
</kendo-toolbar>
|
|
1614
2197
|
}
|
|
1615
2198
|
</div>
|
|
@@ -1643,20 +2226,102 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1643
2226
|
[sheetDescriptors]="sheets">
|
|
1644
2227
|
</div>
|
|
1645
2228
|
<ng-container #dialogContainer></ng-container>
|
|
1646
|
-
|
|
1647
|
-
<kendo-contextmenu
|
|
1648
|
-
#contextMenu
|
|
2229
|
+
|
|
2230
|
+
<kendo-contextmenu #contextMenu
|
|
1649
2231
|
[items]="contextMenuItems"
|
|
1650
|
-
|
|
2232
|
+
(select)="onContextMenuSelect($event)">
|
|
2233
|
+
</kendo-contextmenu>
|
|
1651
2234
|
|
|
2235
|
+
<ng-template #filterMenuTemplate>
|
|
2236
|
+
<kendo-spreadsheet-filtermenu-item
|
|
2237
|
+
[innerMenuItems]="sortMenuItems"
|
|
2238
|
+
(itemClick)="onSortItemClick($event)">
|
|
2239
|
+
</kendo-spreadsheet-filtermenu-item>
|
|
2240
|
+
<kendo-spreadsheet-filtermenu-item
|
|
2241
|
+
[expandable]="true"
|
|
2242
|
+
[expanded]="conditionExpanded"
|
|
2243
|
+
expanderClass="k-spreadsheet-condition-filter"
|
|
2244
|
+
[innerMenuItems]="[{text: messageFor('filterMenuConditionItem')}]"
|
|
2245
|
+
(collapse)="onToggle(false, 'condition')"
|
|
2246
|
+
(expand)="onToggle(true, 'condition')">
|
|
2247
|
+
<ng-template kendoSpreadsheetFilterMenuItemContentTemplate>
|
|
2248
|
+
<div class="k-details-content">
|
|
2249
|
+
<kendo-dropdownlist
|
|
2250
|
+
[data]="filterConditionsList"
|
|
2251
|
+
textField="text"
|
|
2252
|
+
valueField="comparerType"
|
|
2253
|
+
[(value)]="selectedCondition">
|
|
2254
|
+
</kendo-dropdownlist>
|
|
2255
|
+
@if (selectedCondition?.type === 'string') {
|
|
2256
|
+
<kendo-textbox [(value)]="conditionValue"></kendo-textbox>
|
|
2257
|
+
} @else if (selectedCondition?.type === 'number') {
|
|
2258
|
+
<kendo-numerictextbox [(value)]="conditionValue"></kendo-numerictextbox>
|
|
2259
|
+
} @else if (selectedCondition?.type === 'date') {
|
|
2260
|
+
<kendo-datepicker [(value)]="conditionValue"></kendo-datepicker>
|
|
2261
|
+
}
|
|
2262
|
+
</div>
|
|
2263
|
+
<div class="k-actions k-actions-stretched k-actions-horizontal">
|
|
2264
|
+
<button
|
|
2265
|
+
kendoButton
|
|
2266
|
+
themeColor="primary"
|
|
2267
|
+
(click)="filterApply('condition')">
|
|
2268
|
+
{{ messageFor('filterApply') }}
|
|
2269
|
+
</button>
|
|
2270
|
+
<button
|
|
2271
|
+
kendoButton
|
|
2272
|
+
(click)="filterClear()">
|
|
2273
|
+
{{ messageFor('filterClear') }}
|
|
2274
|
+
</button>
|
|
2275
|
+
</div>
|
|
2276
|
+
</ng-template>
|
|
2277
|
+
</kendo-spreadsheet-filtermenu-item>
|
|
2278
|
+
<kendo-spreadsheet-filtermenu-item
|
|
2279
|
+
[expandable]="true"
|
|
2280
|
+
[expanded]="valueExpanded"
|
|
2281
|
+
[innerMenuItems]="[{text: messageFor('filterMenuValueItem')}]"
|
|
2282
|
+
(collapse)="onToggle(false, 'value')"
|
|
2283
|
+
(expand)="onToggle(true, 'value')">
|
|
2284
|
+
<ng-template kendoSpreadsheetFilterMenuItemContentTemplate>
|
|
2285
|
+
<div class="k-spreadsheet-value-treeview-wrapper">
|
|
2286
|
+
<kendo-treeview #treeview
|
|
2287
|
+
kendoTreeViewHierarchyBinding
|
|
2288
|
+
childrenField="items"
|
|
2289
|
+
textField="text"
|
|
2290
|
+
[nodes]="rangeFilterValuesList"
|
|
2291
|
+
kendoTreeViewExpandable
|
|
2292
|
+
[(expandedKeys)]="expandedKeys"
|
|
2293
|
+
[filterable]="true"
|
|
2294
|
+
[kendoTreeViewCheckable]="{checkOnClick: true}"
|
|
2295
|
+
[(checkedKeys)]="checkedKeys"
|
|
2296
|
+
checkBy="text"
|
|
2297
|
+
[isChecked]="isChecked">
|
|
2298
|
+
</kendo-treeview>
|
|
2299
|
+
</div>
|
|
2300
|
+
<div class="k-actions k-actions-stretched k-actions-horizontal">
|
|
2301
|
+
<button
|
|
2302
|
+
kendoButton
|
|
2303
|
+
themeColor="primary"
|
|
2304
|
+
(click)="filterApply('value')">
|
|
2305
|
+
{{ messageFor('filterApply') }}
|
|
2306
|
+
</button>
|
|
2307
|
+
<button
|
|
2308
|
+
kendoButton
|
|
2309
|
+
(click)="filterClear()">
|
|
2310
|
+
{{ messageFor('filterClear') }}
|
|
2311
|
+
</button>
|
|
2312
|
+
</div>
|
|
2313
|
+
</ng-template>
|
|
2314
|
+
</kendo-spreadsheet-filtermenu-item>
|
|
2315
|
+
</ng-template>
|
|
2316
|
+
|
|
1652
2317
|
@if (showLicenseWatermark) {
|
|
1653
2318
|
<div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
|
|
1654
2319
|
}
|
|
1655
2320
|
`,
|
|
1656
2321
|
standalone: true,
|
|
1657
|
-
imports: [LocalizedMessagesDirective, MenuComponent, MainMenuDirective, MenuItemComponent, ToolBarComponent, SpreadsheetLoadFileComponent, ToolBarButtonComponent, SpreadsheetSaveFileDirective, ToolBarButtonGroupComponent, SpreadsheetUndoDirective, SpreadsheetRedoDirective, ToolBarSeparatorComponent, SpreadsheetFontFamilyComponent, SpreadsheetFontSizeComponent, SpreadsheetIncreaseFontSizeDirective, SpreadsheetDecreaseFontSizeDirective, SpreadsheetBoldDirective, SpreadsheetItalicDirective, SpreadsheetUnderlineDirective, SpreadsheetForeColorComponent, SpreadsheetBackColorComponent, ToolBarDropDownButtonComponent, SpreadsheetHorizontalTextAlignDirective, SpreadsheetVerticalTextAlignDirective, SpreadsheetTextWrapDirective, SpreadsheetFormatDirective, SpreadsheetInsertLinkDirective, SpreadsheetAddColumnLeftButtonDirective, SpreadsheetAddColumnRightButtonDirective, SpreadsheetAddRowBelowButtonDirective, SpreadsheetAddRowAboveButtonDirective, SpreadsheetDeleteColumnButtonDirective, SpreadsheetDeleteRowButtonDirective, SpreadsheetDecreaseDecimalDirective, SpreadsheetIncreaseDecimalDirective, SpreadsheetMergeDirective, SpreadsheetGridLinesDirective, NameBoxComponent, IconWrapperComponent, FormulaInputDirective, SheetsBarComponent, ContextMenuComponent, WatermarkOverlayComponent, SpreadsheetDataValidationDirective]
|
|
2322
|
+
imports: [LocalizedMessagesDirective, MenuComponent, MainMenuDirective, MenuItemComponent, ToolBarComponent, SpreadsheetLoadFileComponent, ToolBarButtonComponent, SpreadsheetSaveFileDirective, ToolBarButtonGroupComponent, SpreadsheetUndoDirective, SpreadsheetRedoDirective, ToolBarSeparatorComponent, SpreadsheetFontFamilyComponent, SpreadsheetFontSizeComponent, SpreadsheetIncreaseFontSizeDirective, SpreadsheetDecreaseFontSizeDirective, SpreadsheetBoldDirective, SpreadsheetItalicDirective, SpreadsheetUnderlineDirective, SpreadsheetForeColorComponent, SpreadsheetBackColorComponent, ToolBarDropDownButtonComponent, SpreadsheetHorizontalTextAlignDirective, SpreadsheetVerticalTextAlignDirective, SpreadsheetTextWrapDirective, SpreadsheetFormatDirective, SpreadsheetInsertLinkDirective, SpreadsheetAddColumnLeftButtonDirective, SpreadsheetAddColumnRightButtonDirective, SpreadsheetAddRowBelowButtonDirective, SpreadsheetAddRowAboveButtonDirective, SpreadsheetDeleteColumnButtonDirective, SpreadsheetDeleteRowButtonDirective, SpreadsheetDecreaseDecimalDirective, SpreadsheetIncreaseDecimalDirective, SpreadsheetMergeDirective, SpreadsheetGridLinesDirective, NameBoxComponent, IconWrapperComponent, FormulaInputDirective, SheetsBarComponent, ContextMenuComponent, WatermarkOverlayComponent, SpreadsheetDataValidationDirective, SpreadsheetFilterDirective, SpreadsheetFilterMenuItemComponent, FilterMenuItemContentTemplateDirective, KENDO_TREEVIEW, ButtonComponent, DropDownListComponent, InputsModule, DatePickerComponent, SpreadsheetSortDirective]
|
|
1658
2323
|
}]
|
|
1659
|
-
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.IntlService }, { type: i0.ElementRef }, { type: i2.LocalizationService }, { type: i3.SpreadsheetService }, { type: i4.SpreadsheetToolsService }, { type: i5.ErrorHandlingService }, { type: i6.DialogService }, { type: i7.PopupService }, { type: i0.ViewContainerRef }], propDecorators: { formulaBarInputRef: [{
|
|
2324
|
+
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.IntlService }, { type: i0.ElementRef }, { type: i2.LocalizationService }, { type: i3.SpreadsheetService }, { type: i4.SpreadsheetToolsService }, { type: i5.ErrorHandlingService }, { type: i6.DialogService }, { type: i7.PopupService }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }], propDecorators: { formulaBarInputRef: [{
|
|
1660
2325
|
type: ViewChild,
|
|
1661
2326
|
args: ['formulaBar', { read: FormulaInputDirective }]
|
|
1662
2327
|
}], formulaCellInputRef: [{
|
|
@@ -1671,6 +2336,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1671
2336
|
}], contextMenu: [{
|
|
1672
2337
|
type: ViewChild,
|
|
1673
2338
|
args: ['contextMenu']
|
|
2339
|
+
}], filterMenuTemplate: [{
|
|
2340
|
+
type: ViewChild,
|
|
2341
|
+
args: ['filterMenuTemplate']
|
|
1674
2342
|
}], hostClass: [{
|
|
1675
2343
|
type: HostBinding,
|
|
1676
2344
|
args: ['class.k-spreadsheet']
|
|
@@ -1719,4 +2387,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1719
2387
|
type: Output
|
|
1720
2388
|
}], activeSheetChange: [{
|
|
1721
2389
|
type: Output
|
|
2390
|
+
}], clipboard: [{
|
|
2391
|
+
type: Output
|
|
1722
2392
|
}] } });
|