@progress/kendo-angular-spreadsheet 21.4.1-develop.1 → 22.0.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.
Files changed (87) hide show
  1. package/fesm2022/progress-kendo-angular-spreadsheet.mjs +183 -183
  2. package/package.json +22 -30
  3. package/schematics/ngAdd/index.js +2 -2
  4. package/tools/shared/spreadsheet-command-base.d.ts +1 -1
  5. package/tools/shared/spreadsheet-dropdown-tools-base.d.ts +1 -1
  6. package/tools/shared/spreadsheet-dropdownlist.base.d.ts +1 -1
  7. package/esm2022/action-bar/formula-input.directive.mjs +0 -183
  8. package/esm2022/action-bar/list.component.mjs +0 -91
  9. package/esm2022/action-bar/namebox.component.mjs +0 -134
  10. package/esm2022/common/calendar-editor.component.mjs +0 -48
  11. package/esm2022/common/error-handling.service.mjs +0 -99
  12. package/esm2022/common/list-editor.component.mjs +0 -146
  13. package/esm2022/common/main-menu.directive.mjs +0 -30
  14. package/esm2022/common/sheet-changes.mjs +0 -5
  15. package/esm2022/common/spreadsheet.service.mjs +0 -49
  16. package/esm2022/directives.mjs +0 -94
  17. package/esm2022/filter-menu/filter-menu-item-content-template.directive.mjs +0 -26
  18. package/esm2022/filter-menu/filter-menu-item.component.mjs +0 -271
  19. package/esm2022/index.mjs +0 -14
  20. package/esm2022/localization/custom-messages.component.mjs +0 -52
  21. package/esm2022/localization/localized-messages.directive.mjs +0 -35
  22. package/esm2022/localization/messages.mjs +0 -884
  23. package/esm2022/localization/spreadsheet-localization.service.mjs +0 -31
  24. package/esm2022/models/cell-editor-action-args.mjs +0 -5
  25. package/esm2022/models/cell-editor-options.mjs +0 -5
  26. package/esm2022/models/events.mjs +0 -5
  27. package/esm2022/models/filter-menu-item.mjs +0 -5
  28. package/esm2022/models/index.mjs +0 -11
  29. package/esm2022/models/main-menu-item.mjs +0 -5
  30. package/esm2022/models/range-filter-value.mjs +0 -5
  31. package/esm2022/models/sheet-info.mjs +0 -5
  32. package/esm2022/package-metadata.mjs +0 -16
  33. package/esm2022/progress-kendo-angular-spreadsheet.mjs +0 -8
  34. package/esm2022/sheets-bar/action-dialog.component.mjs +0 -78
  35. package/esm2022/sheets-bar/sheets-bar.component.mjs +0 -433
  36. package/esm2022/sheets-bar/utils.mjs +0 -49
  37. package/esm2022/spreadsheet.component.mjs +0 -2408
  38. package/esm2022/spreadsheet.module.mjs +0 -72
  39. package/esm2022/tools/align/align-tool.directive.mjs +0 -62
  40. package/esm2022/tools/align/horizontal-align-tool.directive.mjs +0 -62
  41. package/esm2022/tools/align/vertical-align-tool.directive.mjs +0 -62
  42. package/esm2022/tools/colorpicker/spreadsheet-backcolor.component.mjs +0 -142
  43. package/esm2022/tools/colorpicker/spreadsheet-forecolor.component.mjs +0 -142
  44. package/esm2022/tools/data-validation-dialog.component.mjs +0 -481
  45. package/esm2022/tools/data-validation-tool.directive.mjs +0 -156
  46. package/esm2022/tools/decrease-decimal-tool.directive.mjs +0 -41
  47. package/esm2022/tools/filter-sort/filter-tool.directive.mjs +0 -89
  48. package/esm2022/tools/filter-sort/sort-tool.directive.mjs +0 -62
  49. package/esm2022/tools/font-family/font-family-dropdownlist.component.mjs +0 -59
  50. package/esm2022/tools/font-family/spreadsheet-fontfamily-tool.component.mjs +0 -114
  51. package/esm2022/tools/font-size/decrease-font-tool.directive.mjs +0 -52
  52. package/esm2022/tools/font-size/font-size-dropdownlist.component.mjs +0 -46
  53. package/esm2022/tools/font-size/increase-font-tool.directive.mjs +0 -52
  54. package/esm2022/tools/font-size/spreadsheet-fontsize-tool.component.mjs +0 -114
  55. package/esm2022/tools/format-tool.directive.mjs +0 -65
  56. package/esm2022/tools/gridlines-tool.directive.mjs +0 -47
  57. package/esm2022/tools/history/redo-tool.mjs +0 -37
  58. package/esm2022/tools/history/undo-tool.mjs +0 -37
  59. package/esm2022/tools/increase-decimal-tool.directive.mjs +0 -41
  60. package/esm2022/tools/index.mjs +0 -30
  61. package/esm2022/tools/insert/insert-link-dialog.component.mjs +0 -53
  62. package/esm2022/tools/insert/insert-link-tool.directive.mjs +0 -97
  63. package/esm2022/tools/load-file.component.mjs +0 -226
  64. package/esm2022/tools/save-file-tool.directive.mjs +0 -58
  65. package/esm2022/tools/shared/command-icons.mjs +0 -121
  66. package/esm2022/tools/shared/commands.mjs +0 -5
  67. package/esm2022/tools/shared/constants.mjs +0 -77
  68. package/esm2022/tools/shared/dialog-content.component.mjs +0 -130
  69. package/esm2022/tools/shared/spreadsheet-command-base.mjs +0 -73
  70. package/esm2022/tools/shared/spreadsheet-command-button.mjs +0 -31
  71. package/esm2022/tools/shared/spreadsheet-dropdown-tools-base.mjs +0 -194
  72. package/esm2022/tools/shared/spreadsheet-dropdownlist.base.mjs +0 -54
  73. package/esm2022/tools/tables/add-column-left-button.directive.mjs +0 -37
  74. package/esm2022/tools/tables/add-column-right-button.directive.mjs +0 -37
  75. package/esm2022/tools/tables/add-row-above-button.directive.mjs +0 -37
  76. package/esm2022/tools/tables/add-row-below-button.directive.mjs +0 -37
  77. package/esm2022/tools/tables/delete-column-button.directive.mjs +0 -35
  78. package/esm2022/tools/tables/delete-row-button.directive.mjs +0 -35
  79. package/esm2022/tools/tables/index.mjs +0 -11
  80. package/esm2022/tools/tables/merge-tool.directive.mjs +0 -72
  81. package/esm2022/tools/text-wrap-tool.directive.mjs +0 -48
  82. package/esm2022/tools/tools.service.mjs +0 -61
  83. package/esm2022/tools/typographical-emphasis/bold-tool.directive.mjs +0 -37
  84. package/esm2022/tools/typographical-emphasis/italic-tool.directive.mjs +0 -37
  85. package/esm2022/tools/typographical-emphasis/underline-tool.directive.mjs +0 -37
  86. package/esm2022/tools/utils.mjs +0 -35
  87. package/esm2022/utils.mjs +0 -32
@@ -1,2408 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Component, ElementRef, EventEmitter, HostBinding, Input, NgZone, Output, ViewChild, ViewContainerRef, TemplateRef, ChangeDetectorRef } from '@angular/core';
6
- import { Subscription } from 'rxjs';
7
- import { take } from 'rxjs/operators';
8
- import { validatePackage } from '@progress/kendo-licensing';
9
- import { packageMetadata } from './package-metadata';
10
- import { SpreadsheetWidget, registerEditor, Matrix, dateToSerial, serialToDate, validation, calc, formatting } from '@progress/kendo-spreadsheet-common';
11
- import { localeData, IntlService } from '@progress/kendo-angular-intl';
12
- import { calendarIcon, caretAltDownIcon, downloadIcon, folderOpenIcon, formulaFxIcon, sortDescSmallIcon, sortAscSmallIcon, searchIcon } from '@progress/kendo-svg-icons';
13
- import { L10N_PREFIX, LocalizationService } from '@progress/kendo-angular-l10n';
14
- import { PopupService } from '@progress/kendo-angular-popup';
15
- import { ContextMenuComponent, MenuItemComponent, MenuComponent } from '@progress/kendo-angular-menu';
16
- import { Keys, hasObservers, isDocumentAvailable, isPresent, shouldShowValidationUI, getLicenseMessage, WatermarkOverlayComponent, normalizeKeys } from '@progress/kendo-angular-common';
17
- import { DialogService } from '@progress/kendo-angular-dialog';
18
- import { IconWrapperComponent } from '@progress/kendo-angular-icons';
19
- import { ToolBarDropDownButtonComponent, ToolBarSeparatorComponent, ToolBarButtonGroupComponent, ToolBarButtonComponent, ToolBarComponent } from '@progress/kendo-angular-toolbar';
20
- import { SpreadsheetService } from './common/spreadsheet.service';
21
- import { SpreadsheetToolsService } from './tools/tools.service';
22
- import { SpreadsheetLocalizationService } from './localization/spreadsheet-localization.service';
23
- import { mapToSheetDescriptor, rowAndColPresent } from './utils';
24
- import { FormulaInputDirective } from './action-bar/formula-input.directive';
25
- import { getSheetActions } from './sheets-bar/utils';
26
- import { ErrorHandlingService } from './common/error-handling.service';
27
- import { commandIcons, commandSVGIcons } from './tools/shared/command-icons';
28
- import { InsertLinkDialogComponent } from './tools/insert/insert-link-dialog.component';
29
- import { SheetsBarComponent } from './sheets-bar/sheets-bar.component';
30
- import { NameBoxComponent } from './action-bar/namebox.component';
31
- import { SpreadsheetGridLinesDirective } from './tools/gridlines-tool.directive';
32
- import { SpreadsheetMergeDirective } from './tools/tables/merge-tool.directive';
33
- import { SpreadsheetIncreaseDecimalDirective } from './tools/increase-decimal-tool.directive';
34
- import { SpreadsheetDecreaseDecimalDirective } from './tools/decrease-decimal-tool.directive';
35
- import { SpreadsheetDeleteRowButtonDirective } from './tools/tables/delete-row-button.directive';
36
- import { SpreadsheetDeleteColumnButtonDirective } from './tools/tables/delete-column-button.directive';
37
- import { SpreadsheetAddRowAboveButtonDirective } from './tools/tables/add-row-above-button.directive';
38
- import { SpreadsheetAddRowBelowButtonDirective } from './tools/tables/add-row-below-button.directive';
39
- import { SpreadsheetAddColumnRightButtonDirective } from './tools/tables/add-column-right-button.directive';
40
- import { SpreadsheetAddColumnLeftButtonDirective } from './tools/tables/add-column-left-button.directive';
41
- import { SpreadsheetInsertLinkDirective } from './tools/insert/insert-link-tool.directive';
42
- import { SpreadsheetFormatDirective } from './tools/format-tool.directive';
43
- import { SpreadsheetTextWrapDirective } from './tools/text-wrap-tool.directive';
44
- import { SpreadsheetVerticalTextAlignDirective } from './tools/align/vertical-align-tool.directive';
45
- import { SpreadsheetHorizontalTextAlignDirective } from './tools/align/horizontal-align-tool.directive';
46
- import { SpreadsheetBackColorComponent } from './tools/colorpicker/spreadsheet-backcolor.component';
47
- import { SpreadsheetForeColorComponent } from './tools/colorpicker/spreadsheet-forecolor.component';
48
- import { SpreadsheetUnderlineDirective } from './tools/typographical-emphasis/underline-tool.directive';
49
- import { SpreadsheetItalicDirective } from './tools/typographical-emphasis/italic-tool.directive';
50
- import { SpreadsheetBoldDirective } from './tools/typographical-emphasis/bold-tool.directive';
51
- import { SpreadsheetDecreaseFontSizeDirective } from './tools/font-size/decrease-font-tool.directive';
52
- import { SpreadsheetIncreaseFontSizeDirective } from './tools/font-size/increase-font-tool.directive';
53
- import { SpreadsheetFontSizeComponent } from './tools/font-size/spreadsheet-fontsize-tool.component';
54
- import { SpreadsheetFontFamilyComponent } from './tools/font-family/spreadsheet-fontfamily-tool.component';
55
- import { SpreadsheetRedoDirective } from './tools/history/redo-tool';
56
- import { SpreadsheetUndoDirective } from './tools/history/undo-tool';
57
- import { SpreadsheetSaveFileDirective } from './tools/save-file-tool.directive';
58
- import { SpreadsheetLoadFileComponent } from './tools/load-file.component';
59
- import { MainMenuDirective } from './common/main-menu.directive';
60
- import { LocalizedMessagesDirective } from './localization/localized-messages.directive';
61
- import { SpreadsheetDataValidationDirective } from './tools/data-validation-tool.directive';
62
- import { ListEditorComponent } from './common/list-editor.component';
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';
73
- import * as i0 from "@angular/core";
74
- import * as i1 from "@progress/kendo-angular-intl";
75
- import * as i2 from "@progress/kendo-angular-l10n";
76
- import * as i3 from "./common/spreadsheet.service";
77
- import * as i4 from "./tools/tools.service";
78
- import * as i5 from "./common/error-handling.service";
79
- import * as i6 from "@progress/kendo-angular-dialog";
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";
83
- /**
84
- * Represents the [Kendo UI Spreadsheet component for Angular]({% slug overview_spreadsheet %}).
85
- *
86
- * @example
87
- * ```html
88
- * <kendo-spreadsheet [sheets]="sheets"></kendo-spreadsheet>
89
- * ```
90
- *
91
- * @remarks
92
- * Supported children components are: {@link CustomMessagesComponent}
93
- */
94
- export class SpreadsheetComponent {
95
- ngZone;
96
- intl;
97
- host;
98
- localization;
99
- spreadsheetService;
100
- toolsService;
101
- errorService;
102
- dialogService;
103
- popupService;
104
- container;
105
- cdr;
106
- formulaBarInputRef;
107
- formulaCellInputRef;
108
- nameBoxRef;
109
- dialogContainer;
110
- contextMenu;
111
- filterMenuTemplate;
112
- hostClass = true;
113
- role = 'application';
114
- /**
115
- * The menu items configuration.
116
- */
117
- set menuItems(items) {
118
- this._menuItems = [];
119
- this.ngZone.onStable.pipe(take(1)).subscribe(() => {
120
- const normalizedItems = items.map(item => ({
121
- active: item.active,
122
- text: item.id === 'format' || item.id === 'data' ? this.messageFor(`${item.id}Tab`) : this.messageFor(item.id),
123
- cssClass: item.active ? 'k-active' : null,
124
- id: item.id
125
- }));
126
- this._menuItems = normalizedItems;
127
- const activeItemIndex = this.menuItems.findIndex(item => item.active);
128
- this.selectedMenuItem = this.menuItems[activeItemIndex > -1 ? activeItemIndex : 0];
129
- });
130
- }
131
- get menuItems() {
132
- return this._menuItems;
133
- }
134
- /**
135
- * Sets the overflow option of the built-in Toolbar components.
136
- * @default false
137
- */
138
- overflow = false;
139
- /**
140
- * Sets the height of the formula list container.
141
- * Accepts same values as the CSS [`style.height`](https://developer.mozilla.org/en-US/docs/Web/CSS/height) property.
142
- *
143
- * @default '300px'
144
- */
145
- formulaListMaxHeight = '300px';
146
- /**
147
- * The name of the currently active sheet. Must match one of the sheet names.
148
- */
149
- set activeSheet(value) {
150
- this._activeSheet = value;
151
- this.spreadsheetService.spreadsheet?.view?.sheetsbar.onSheetSelect(this.activeSheet);
152
- }
153
- get activeSheet() {
154
- return this._activeSheet || this.spreadsheetService.spreadsheet?.activeSheet()?.name();
155
- }
156
- /**
157
- * An array of `SheetDescriptor` objects that describe the sheets in the Spreadsheet.
158
- */
159
- set sheets(value) {
160
- const items = value.map((item, index, items) => ({
161
- ...item,
162
- state: item.state || 'visible',
163
- inEdit: false,
164
- first: index === 0,
165
- last: index === items.length - 1,
166
- text: item.name,
167
- active: (item.name === this.activeSheet) || items.length === 1,
168
- index
169
- }));
170
- this._sheetsInfo = items;
171
- }
172
- get sheetsInfo() {
173
- return this._sheetsInfo;
174
- }
175
- /**
176
- * @hidden
177
- */
178
- expandedKeys = ['0'];
179
- /**
180
- * @hidden
181
- */
182
- checkedKeys = [];
183
- /**
184
- * The number of columns in the document.
185
- *
186
- * @default 50
187
- */
188
- columns = 50;
189
- /**
190
- * The initial column width in pixels.
191
- *
192
- * @default 100
193
- */
194
- columnWidth = 100;
195
- /**
196
- * The initial styles applies to the sheet cells.
197
- */
198
- defaultCellStyle;
199
- /**
200
- * The height of the header row in pixels.
201
- *
202
- * @default 30
203
- */
204
- headerHeight = 30;
205
- /**
206
- * The width of the header column in pixels.
207
- *
208
- * @default 32
209
- */
210
- headerWidth = 32;
211
- /**
212
- * The initial row height in pixels.
213
- *
214
- * @default 30
215
- */
216
- rowHeight = 30;
217
- /**
218
- * The number of rows in the document.
219
- *
220
- * @default 200
221
- */
222
- rows = 200;
223
- /**
224
- * Sets the custom cell editors for the Spreadsheet.
225
- * Accepts an array of `SpreadsheetCellEditorOptions` objects that define custom editors.
226
- */
227
- cellEditors;
228
- /**
229
- * An object containing any images used in the Spreadsheet. The keys should be image IDs (they are referenced by this ID in `sheets.drawings`),
230
- * and the values should be image URLs. The image URLs can be either [`data URLs`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs)
231
- * (in which case the images are fully contained by the JSON), or external URLs.
232
- */
233
- images;
234
- /**
235
- * Configures the Excel export settings of the Spreadsheet.
236
- */
237
- excel;
238
- /**
239
- * Fires when a value in the Spreadsheet is changed. Exposes the `SpreadsheetWidget` instance and the selected `Range` as event data.
240
- */
241
- change = new EventEmitter();
242
- /**
243
- * Fires when the selected range format is changed from the UI. Exposes the `SpreadsheetWidget` instance and the selected `Range` as event data.
244
- */
245
- formatChange = new EventEmitter();
246
- /**
247
- * Fires when the selection is changed by the end user. Exposes the `SpreadsheetWidget` instance and the selected `Range` as event data.
248
- */
249
- selectionChange = new EventEmitter();
250
- /**
251
- * Fires when the end user clicks the Export to Excel toolbar button.
252
- * The event is preventable and exposes the `Workbook` object, a `preventDefault` method
253
- * (if invoked, the generated file will not be saved), and the `SpreadsheetWidget` instance.
254
- */
255
- excelExport = new EventEmitter();
256
- /**
257
- * Fires when the end user clicks the Open toolbar button.
258
- * The event is preventable and exposes the selected `File` or `Blob`, a `preventDefault` method
259
- * (if invoked, the selected file will not be loaded), and the `SpreadsheetWidget` instance.
260
- */
261
- excelImport = new EventEmitter();
262
- /**
263
- * Fires when the active sheet is about to change.
264
- * The event exposes the new active `Sheet` and the `SpreadsheetWidget` instance.
265
- */
266
- activeSheetChange = new EventEmitter();
267
- /**
268
- * Fires when a clipboard action (cut, copy, or paste) occurs in the Spreadsheet.
269
- */
270
- clipboard = new EventEmitter();
271
- formulaFxIcon = formulaFxIcon;
272
- folderOpenIcon = folderOpenIcon;
273
- downloadIcon = downloadIcon;
274
- searchIcon = searchIcon;
275
- selectedMenuItem;
276
- rangeFilterValuesList = [];
277
- sortAscSmallIcon = sortAscSmallIcon;
278
- sortDescSmallIcon = sortDescSmallIcon;
279
- get spreadsheetWidget() {
280
- return this.spreadsheetService.spreadsheet;
281
- }
282
- /**
283
- * @hidden
284
- */
285
- showLicenseWatermark = false;
286
- /**
287
- * @hidden
288
- */
289
- licenseMessage;
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
- /**
306
- * @hidden
307
- */
308
- currentFilterOptions = null;
309
- _selectedCondition;
310
- _sheetsInfo;
311
- _activeSheet;
312
- _menuItems;
313
- currentRange;
314
- subs = new Subscription();
315
- filterMenuOpened = false;
316
- popupRef;
317
- popupPositionChangeSub;
318
- constructor(ngZone, intl, host, localization, spreadsheetService, toolsService, errorService, dialogService, popupService, container, cdr) {
319
- this.ngZone = ngZone;
320
- this.intl = intl;
321
- this.host = host;
322
- this.localization = localization;
323
- this.spreadsheetService = spreadsheetService;
324
- this.toolsService = toolsService;
325
- this.errorService = errorService;
326
- this.dialogService = dialogService;
327
- this.popupService = popupService;
328
- this.container = container;
329
- this.cdr = cdr;
330
- const isValid = validatePackage(packageMetadata);
331
- this.licenseMessage = getLicenseMessage(packageMetadata);
332
- this.showLicenseWatermark = shouldShowValidationUI(isValid);
333
- ngZone.onStable.pipe(take(1)).subscribe(() => {
334
- if (!this.menuItems) {
335
- this._menuItems = [{
336
- id: 'file',
337
- text: this.messageFor('file')
338
- }, {
339
- id: 'home',
340
- text: this.messageFor('home'),
341
- active: true,
342
- cssClass: 'k-active'
343
- }, {
344
- id: 'insert',
345
- text: this.messageFor('insert')
346
- }, {
347
- id: 'format',
348
- text: this.messageFor('formatTab')
349
- }, {
350
- id: 'data',
351
- text: this.messageFor('dataTab')
352
- }, {
353
- id: 'view',
354
- text: this.messageFor('view')
355
- }];
356
- }
357
- this.selectedMenuItem = this.menuItems[1];
358
- });
359
- }
360
- ngAfterViewInit() {
361
- if (!isDocumentAvailable()) {
362
- return;
363
- }
364
- this.ngZone.runOutsideAngular(() => {
365
- setTimeout(() => {
366
- const spreadsheet = this.spreadsheetService.spreadsheet = new SpreadsheetWidget(this.host.nativeElement, this.options);
367
- spreadsheet.bind('select', this.onSelectionChange);
368
- spreadsheet.bind('change', this.onChange);
369
- spreadsheet.bind('changeFormat', this.onChangeFormat);
370
- spreadsheet.bind('excelImport', this.onExcelImport);
371
- spreadsheet.bind('excelExport', this.onExcelExport);
372
- spreadsheet.bind('keydown', this.onKeyDown);
373
- spreadsheet.view.bind('update', this.updateState);
374
- spreadsheet.view.bind('message', this.onMessage);
375
- spreadsheet.bind('contextmenu', this.onContextMenu.bind(this));
376
- spreadsheet.bind('copy', (e) => { this.onClipboardEvent(e, 'copy'); });
377
- spreadsheet.bind('cut', (e) => { this.onClipboardEvent(e, 'cut'); });
378
- spreadsheet.bind('paste', (e) => { this.onClipboardEvent(e, 'paste'); });
379
- const sheet = spreadsheet.activeSheet();
380
- if (sheet) {
381
- this.updateState({ range: sheet.range(sheet.activeCell()) });
382
- }
383
- this.updateActiveSheet(this.activeSheet || spreadsheet?.activeSheet()?.name());
384
- this.configureSheets(spreadsheet);
385
- this.spreadsheetService.componentInitialized.next();
386
- });
387
- this.subs.add(this.spreadsheetService.sheetsChanged.subscribe(this.onSheetsChanged.bind(this)));
388
- this.subs.add(this.spreadsheetService.activeSheetChanged.subscribe(this.onActiveSheetChanged.bind(this)));
389
- this.subs.add(this.spreadsheetService.selectionChanged.subscribe(range => {
390
- this.currentRange = range;
391
- this.closePopup();
392
- }));
393
- this.spreadsheetService.dialogContainer = this.dialogContainer;
394
- });
395
- this.registerEditors();
396
- this.spreadsheetService.spreadsheetComponent = this;
397
- this.sortMenuItems = [{
398
- text: this.messageFor('sortAsc'),
399
- svgIcon: this.sortAscSmallIcon,
400
- icon: 'sort-asc-small'
401
- }, {
402
- text: this.messageFor('sortDesc'),
403
- svgIcon: this.sortDescSmallIcon,
404
- icon: 'sort-desc-small'
405
- }];
406
- }
407
- ngOnChanges(changes) {
408
- const dynamicOptions = [
409
- 'columns',
410
- 'columnWidth',
411
- 'defaultCellStyle',
412
- 'excel',
413
- 'headerHeight',
414
- 'headerWidth',
415
- 'images',
416
- 'names',
417
- 'rowHeight',
418
- 'rows',
419
- 'sheets'
420
- ];
421
- const changedDynamicOptions = dynamicOptions.filter(o => isPresent(changes[o] && !changes[o].firstChange));
422
- if (this.spreadsheetWidget && changedDynamicOptions.length) {
423
- const newOptions = this.spreadsheetWidget.toJSON();
424
- changedDynamicOptions.forEach(o => newOptions[o] = changes[o].currentValue);
425
- this.spreadsheetWidget.fromJSON(newOptions);
426
- }
427
- if (changes['cellEditors'] && !changes['cellEditors'].firstChange) {
428
- this.registerCustomEditors();
429
- }
430
- }
431
- ngOnDestroy() {
432
- this.subs.unsubscribe();
433
- }
434
- /**
435
- * @hidden
436
- */
437
- onContextMenu(e) {
438
- if (e.targetType === 'topcorner') {
439
- return;
440
- }
441
- const selection = this.spreadsheetWidget.activeSheet().select();
442
- const { topLeft, bottomRight } = selection;
443
- const isRange = e.targetType === 'cell' && (topLeft.row !== bottomRight.row || topLeft.col !== bottomRight.col);
444
- const targetType = isRange ? 'range' : e.targetType;
445
- this.contextMenuItems = this.contextMenuItemsForTarget(targetType, e.showUnhide, e.showUnmerge);
446
- this.contextMenu.show({ top: e.originalEvent.pageY, left: e.originalEvent.pageX });
447
- }
448
- /**
449
- * @hidden
450
- */
451
- isChecked = (dataItem) => {
452
- if (this.containsItem(dataItem)) {
453
- return "checked";
454
- }
455
- if (this.isIndeterminate(dataItem.items)) {
456
- return "indeterminate";
457
- }
458
- return "none";
459
- };
460
- /**
461
- * @hidden
462
- */
463
- onContextMenuSelect(e) {
464
- let command;
465
- switch (e.item.id) {
466
- case 'cut':
467
- command = { command: 'ToolbarCutCommand', options: { workbook: this.spreadsheetWidget.workbook } };
468
- break;
469
- case 'copy':
470
- command = { command: 'ToolbarCopyCommand', options: { workbook: this.spreadsheetWidget.workbook } };
471
- break;
472
- case 'unmerge':
473
- command = { command: 'MergeCellCommand', options: { value: 'unmerge' } };
474
- break;
475
- case 'mergeAll':
476
- command = { command: 'MergeCellCommand', options: { value: 'cells' } };
477
- break;
478
- case 'mergeHorizontally':
479
- command = { command: 'MergeCellCommand', options: { value: 'horizontally' } };
480
- break;
481
- case 'mergeVertically':
482
- command = { command: 'MergeCellCommand', options: { value: 'vertically' } };
483
- break;
484
- case 'hideRow':
485
- command = { command: 'HideLineCommand', options: { axis: 'row' } };
486
- break;
487
- case 'hideColumn':
488
- command = { command: 'HideLineCommand', options: { axis: 'column' } };
489
- break;
490
- case 'unhideRow':
491
- command = { command: 'UnHideLineCommand', options: { axis: 'row' } };
492
- break;
493
- case 'unhideColumn':
494
- command = { command: 'UnHideLineCommand', options: { axis: 'column' } };
495
- break;
496
- case 'deleteRow':
497
- command = { command: 'DeleteRowCommand' };
498
- break;
499
- case 'deleteColumn':
500
- command = { command: 'DeleteColumnCommand' };
501
- break;
502
- case 'insertLink':
503
- this.openLinkDialog();
504
- break;
505
- case 'addRowAbove':
506
- command = { command: 'AddRowCommand', options: { value: 'above' } };
507
- break;
508
- case 'addRowBelow':
509
- command = { command: 'AddRowCommand', options: { value: 'below' } };
510
- break;
511
- case 'addColumnLeft':
512
- command = { command: 'AddColumnCommand', options: { value: 'left' } };
513
- break;
514
- case 'addColumnRight':
515
- command = { command: 'AddColumnCommand', options: { value: 'right' } };
516
- break;
517
- }
518
- if (command) {
519
- this.spreadsheetWidget.executeCommand(command);
520
- }
521
- }
522
- /**
523
- * @hidden
524
- */
525
- onKeyDown = (e) => {
526
- const isCtrl = e.ctrlKey || e.metaKey;
527
- const shift = e.shiftKey;
528
- const altKey = e.altKey;
529
- const code = normalizeKeys(e);
530
- if (isCtrl && shift && code === Keys.KeyS) {
531
- this.spreadsheetService.onSheetsBarFocus.next(undefined);
532
- }
533
- if (altKey) {
534
- const currentSheet = e.sender.activeSheet();
535
- const validation = currentSheet.range(currentSheet.activeCell()).validation();
536
- if (isPresent(validation) && validation.dataType === 'list') {
537
- if (code === Keys.ArrowDown) {
538
- this.spreadsheetWidget.view.openCustomEditor();
539
- }
540
- }
541
- }
542
- };
543
- /**
544
- * @hidden
545
- */
546
- messageFor(key) {
547
- return this.localization.get(key);
548
- }
549
- /**
550
- * @hidden
551
- */
552
- onMenuItemSelect(e) {
553
- const selectedMenuItem = this.menuItems.find(item => item.text === e.item.text);
554
- const previousSelectedItem = this.menuItems.find(item => item.active);
555
- if (selectedMenuItem !== previousSelectedItem) {
556
- this._menuItems.forEach((item, idx) => {
557
- item.active = idx === +e.index;
558
- item.cssClass = idx === +e.index ? 'k-active' : null;
559
- });
560
- this.selectedMenuItem = this.menuItems.find(item => item.active);
561
- }
562
- }
563
- /**
564
- * @hidden
565
- */
566
- onToggle(expanded, filterType) {
567
- this[`${filterType}Expanded`] = expanded;
568
- if (expanded) {
569
- const otherFilterType = filterType === 'condition' ? 'value' : 'condition';
570
- this[`${otherFilterType}Expanded`] = false;
571
- }
572
- this.cdr.detectChanges();
573
- }
574
- /**
575
- * @hidden
576
- */
577
- filterApply(filterType) {
578
- if (!this.currentFilterOptions) {
579
- return;
580
- }
581
- let filterData;
582
- if (filterType === 'value') {
583
- const checkedValues = this.checkedKeys
584
- .filter(key => key !== this.messageFor('filterMenuAll'))
585
- .map(key => {
586
- const item = this.findItemByText(this.rangeFilterValuesList, key);
587
- return item ? item.unformattedValue : key;
588
- });
589
- const hasBlanks = checkedValues.some(v => v === undefined || v === null);
590
- const nonBlankValues = checkedValues.filter(v => v !== undefined && v !== null);
591
- filterData = {
592
- blanks: hasBlanks,
593
- values: nonBlankValues.length > 0 ? nonBlankValues : undefined
594
- };
595
- }
596
- else if (this.selectedCondition?.comparer !== 'none' && this.conditionValue !== null && this.conditionValue !== undefined) {
597
- filterData = {
598
- criteria: [{
599
- operator: this.selectedCondition.comparer,
600
- value: this.conditionValue
601
- }]
602
- };
603
- }
604
- else if (this.selectedCondition?.comparer === 'none') {
605
- this.spreadsheetWidget.executeCommand({
606
- command: 'ClearFilterCommand',
607
- options: { column: this.currentFilterOptions?.column }
608
- });
609
- this.closePopup();
610
- return;
611
- }
612
- if (filterData) {
613
- const commandOptions = {
614
- column: this.currentFilterOptions.column,
615
- operatingRange: this.currentFilterOptions.range
616
- };
617
- if (filterType === 'value') {
618
- commandOptions.valueFilter = filterData;
619
- }
620
- else {
621
- commandOptions.customFilter = filterData;
622
- }
623
- this.spreadsheetWidget.executeCommand({
624
- command: 'ApplyFilterCommand',
625
- options: commandOptions
626
- });
627
- }
628
- this.closePopup();
629
- }
630
- /**
631
- * @hidden
632
- */
633
- filterClear() {
634
- this.spreadsheetWidget.executeCommand({
635
- command: 'ClearFilterCommand',
636
- options: { column: this.currentFilterOptions?.column }
637
- });
638
- this.closePopup();
639
- }
640
- /**
641
- * @hidden
642
- */
643
- onSortItemClick(item) {
644
- const dir = item.text === this.messageFor('sortAsc') ? 'asc' : 'desc';
645
- const noHeaderRange = this.currentFilterOptions?.range?.resize({ top: 1 });
646
- const options = {
647
- value: dir,
648
- sheet: false,
649
- operatingRange: noHeaderRange,
650
- column: this.currentFilterOptions?.column
651
- };
652
- this.spreadsheetWidget.executeCommand({ command: 'SortCommand', options });
653
- }
654
- /**
655
- * @hidden
656
- */
657
- closePopup() {
658
- if (this.popupRef) {
659
- this.popupRef.close();
660
- this.popupRef = null;
661
- }
662
- if (this.popupPositionChangeSub) {
663
- this.popupPositionChangeSub.unsubscribe();
664
- this.popupPositionChangeSub = null;
665
- }
666
- }
667
- onChange = (e) => {
668
- hasObservers(this.change) && this.change.emit(e);
669
- this.spreadsheetService.selectionChanged.next(e.range);
670
- };
671
- onSelectionChange = (e) => {
672
- this.closePopup();
673
- hasObservers(this.selectionChange) && this.selectionChange.emit(e);
674
- this.spreadsheetService.selectionChanged.next(e.range);
675
- };
676
- onChangeFormat = (e) => {
677
- hasObservers(this.formatChange) && this.formatChange.emit(e);
678
- this.spreadsheetService.selectionChanged.next(e.range);
679
- };
680
- onExcelExport = (e) => hasObservers(this.excelExport) && this.excelExport.emit(e);
681
- onExcelImport = (e) => hasObservers(this.excelImport) && this.excelImport.emit(e);
682
- onActiveSheetChanged = (sheet) => {
683
- const eventArgs = { sender: this.spreadsheetService.spreadsheet, sheet };
684
- hasObservers(this.activeSheetChange) && this.activeSheetChange.emit(eventArgs);
685
- const range = sheet.range(sheet.activeCell());
686
- this.spreadsheetService.selectionChanged.next(range);
687
- };
688
- updateState = (e) => {
689
- this.toolsService.updateTools(e);
690
- if (e.reason?.sheetSelection) {
691
- this.sheets = mapToSheetDescriptor(this.spreadsheetService.spreadsheet.sheets());
692
- }
693
- };
694
- onMessage = (e) => {
695
- this.ngZone.run(() => {
696
- this.errorService.handleErrorMessage(e);
697
- });
698
- };
699
- updateActiveSheet(name) {
700
- this.ngZone.run(() => this.spreadsheetService.currentActiveSheet = name);
701
- }
702
- onSheetsChanged(e) {
703
- this.ngZone.run(() => {
704
- this.sheets = mapToSheetDescriptor(e.sheets);
705
- this.updateActiveSheet(this.spreadsheetService.activeSheet);
706
- });
707
- }
708
- onClipboardEvent(event, type) {
709
- if (hasObservers(this.clipboard)) {
710
- this.ngZone.runOutsideAngular(() => {
711
- setTimeout(() => {
712
- const { preventDefault, isDefaultPrevented, clipboardContent, range, sender } = event;
713
- const workbookClipboardContent = clipboardContent || this.spreadsheetWidget.workbook._clipboard._internalContent;
714
- const eventArgs = {
715
- type,
716
- clipboardContent: { data: workbookClipboardContent.data, mergedCells: workbookClipboardContent.mergedCells },
717
- range,
718
- sender,
719
- preventDefault: preventDefault.bind(event),
720
- isDefaultPrevented: isDefaultPrevented.bind(event)
721
- };
722
- this.ngZone.run(() => this.clipboard.emit(eventArgs));
723
- });
724
- });
725
- }
726
- }
727
- get options() {
728
- return {
729
- activeSheet: this.activeSheet,
730
- ...{
731
- sheets: this.sheetsInfo && structuredClone(this.sheetsInfo),
732
- intl: {
733
- localeInfo: () => localeData(this.intl.localeId),
734
- parseDate: (value, fmt) => this.intl.parseDate(value, fmt),
735
- toString: (value, fmt) => this.intl.toString(value, fmt),
736
- format: (fmt, ...values) => this.intl.format(fmt, ...values)
737
- }
738
- },
739
- columns: this.columns,
740
- columnWidth: this.columnWidth,
741
- defaultCellStyle: this.defaultCellStyle,
742
- excel: this.excel,
743
- headerHeight: this.headerHeight,
744
- headerWidth: this.headerWidth,
745
- images: this.images,
746
- rowHeight: this.rowHeight,
747
- rows: this.rows,
748
- formulaBarInputRef: { current: this.formulaBarInputRef.current },
749
- formulaCellInputRef: { current: this.formulaCellInputRef.current },
750
- nameBoxRef: { current: this.nameBoxRef.current },
751
- getIconHTMLString: (options) => {
752
- if (typeof options === 'string' && options === 'k-i-caret-alt-down') {
753
- //the caret-alt-down filter button icon has different config coming from the common package and has to be handled separately
754
- options = { iconName: 'caret-alt-down', svgIcon: caretAltDownIcon };
755
- }
756
- const iconWrapper = this.container.createComponent(IconWrapperComponent);
757
- iconWrapper.instance.name = options.iconName;
758
- iconWrapper.instance.svgIcon = options.svgIcon;
759
- iconWrapper.changeDetectorRef.detectChanges();
760
- return iconWrapper.instance.element.nativeElement;
761
- },
762
- createFilterMenu: this.createFilterMenu.bind(this)
763
- };
764
- }
765
- contextMenuItemsForTarget(target, unhide, unmerge) {
766
- const commonItems = [{
767
- text: this.messageFor('copy'),
768
- icon: commandIcons.copy,
769
- svgIcon: commandSVGIcons.copy,
770
- id: 'copy'
771
- }, {
772
- text: this.messageFor('cut'),
773
- icon: commandIcons.cut,
774
- svgIcon: commandSVGIcons.cut,
775
- id: 'cut'
776
- }, {
777
- text: this.messageFor('paste'),
778
- icon: commandIcons.paste,
779
- svgIcon: commandSVGIcons.paste,
780
- id: 'paste',
781
- disabled: true
782
- }, {
783
- separator: true
784
- }, {
785
- text: this.messageFor('mergeAll'),
786
- icon: commandIcons.mergeAll,
787
- svgIcon: commandSVGIcons.mergeAll,
788
- id: 'mergeAll',
789
- }, {
790
- text: this.messageFor('mergeHorizontally'),
791
- icon: commandIcons.mergeHorizontally,
792
- svgIcon: commandSVGIcons.mergeHorizontally,
793
- id: 'mergeHorizontally',
794
- }, {
795
- text: this.messageFor('mergeVertically'),
796
- icon: commandIcons.mergeVertically,
797
- svgIcon: commandSVGIcons.mergeVertically,
798
- id: 'mergeVertically',
799
- }, {
800
- text: this.messageFor('unmerge'),
801
- icon: commandIcons.unmerge,
802
- svgIcon: commandSVGIcons.unmerge,
803
- id: 'unmerge',
804
- disabled: !unmerge
805
- }, {
806
- separator: true
807
- }, {
808
- text: this.messageFor('insertLink'),
809
- icon: commandIcons.insertLink,
810
- svgIcon: commandSVGIcons.insertLink,
811
- id: 'insertLink'
812
- }];
813
- if (target === 'rowheader') {
814
- commonItems.push({
815
- separator: true
816
- }, {
817
- text: this.messageFor('addRowAbove'),
818
- icon: commandIcons.addRowAbove,
819
- svgIcon: commandSVGIcons.addRowAbove,
820
- id: 'addRowAbove',
821
- }, {
822
- text: this.messageFor('addRowBelow'),
823
- icon: commandIcons.addRowBelow,
824
- svgIcon: commandSVGIcons.addRowBelow,
825
- id: 'addRowBelow',
826
- }, {
827
- text: this.messageFor('deleteRow'),
828
- icon: commandIcons.deleteRow,
829
- svgIcon: commandSVGIcons.deleteRow,
830
- id: 'deleteRow',
831
- }, {
832
- text: this.messageFor('hideRow'),
833
- icon: commandIcons.hideRow,
834
- svgIcon: commandSVGIcons.hideRow,
835
- id: 'hideRow',
836
- }, {
837
- text: this.messageFor('unhideRow'),
838
- icon: commandIcons.unhideRow,
839
- svgIcon: commandSVGIcons.unhideRow,
840
- id: 'unhideRow',
841
- disabled: !unhide
842
- });
843
- }
844
- if (target === 'columnheader') {
845
- commonItems.push({
846
- separator: true
847
- }, {
848
- text: this.messageFor('addColumnLeft'),
849
- icon: commandIcons.addColumnLeft,
850
- svgIcon: commandSVGIcons.addColumnLeft,
851
- id: 'addColumnLeft',
852
- }, {
853
- text: this.messageFor('addColumnRight'),
854
- icon: commandIcons.addColumnRight,
855
- svgIcon: commandSVGIcons.addColumnRight,
856
- id: 'addColumnRight',
857
- }, {
858
- text: this.messageFor('deleteColumn'),
859
- icon: commandIcons.deleteColumn,
860
- svgIcon: commandSVGIcons.deleteColumn,
861
- id: 'deleteColumn',
862
- }, {
863
- text: this.messageFor('hideColumn'),
864
- icon: commandIcons.hideColumn,
865
- svgIcon: commandSVGIcons.hideColumn,
866
- id: 'hideColumn',
867
- }, {
868
- text: this.messageFor('unhideColumn'),
869
- icon: commandIcons.unhideColumn,
870
- svgIcon: commandSVGIcons.unhideColumn,
871
- id: 'unhideColumn',
872
- disabled: !unhide
873
- });
874
- }
875
- return commonItems;
876
- }
877
- openLinkDialog() {
878
- const hasLink = isPresent(this.currentRange?.link());
879
- const dialogSettings = {
880
- appendTo: this.spreadsheetService.dialogContainer,
881
- title: this.localization.get('insertLink'),
882
- content: InsertLinkDialogComponent,
883
- actions: [{
884
- text: this.localization.get('dialogInsert'),
885
- themeColor: 'primary'
886
- }, {
887
- text: this.localization.get('dialogCancel')
888
- },
889
- 'spacer', {
890
- text: this.localization.get('dialogRemoveLink'),
891
- themeColor: 'primary',
892
- fillMode: 'clear',
893
- cssClass: hasLink ? '' : 'k-disabled'
894
- }],
895
- actionsLayout: 'start',
896
- width: 400,
897
- autoFocusedElement: '.k-textbox > .k-input-inner'
898
- };
899
- const dialog = this.dialogService.open(dialogSettings);
900
- const dialogInstance = dialog.dialog.instance;
901
- const dialogContent = dialog.content.instance;
902
- if (hasLink) {
903
- dialogContent.setData({ link: this.currentRange?.link() });
904
- }
905
- dialogInstance.action.pipe(take(1)).subscribe((event) => {
906
- if (event.text === this.localization.get('dialogCancel')) {
907
- return;
908
- }
909
- let link = null;
910
- if (event.text === this.localization.get('dialogInsert')) {
911
- link = dialogContent.urlLink || null;
912
- }
913
- this.spreadsheetService.spreadsheet.executeCommand({
914
- command: 'HyperlinkCommand',
915
- options: { link }
916
- });
917
- });
918
- }
919
- configureSheets = (spreadsheet) => {
920
- if (!this.sheetsInfo) {
921
- this.ngZone.run(() => {
922
- const defaultSheetDescriptors = mapToSheetDescriptor([spreadsheet?.activeSheet()]);
923
- this._sheetsInfo = [{
924
- text: this.spreadsheetService.currentActiveSheet,
925
- first: true, last: true,
926
- state: 'visible',
927
- ...defaultSheetDescriptors,
928
- sheetActions: getSheetActions(defaultSheetDescriptors).map(item => ({ ...item, text: this.messageFor(item.messageKey) }))
929
- }];
930
- });
931
- }
932
- };
933
- registerEditors() {
934
- registerEditor('_validation_list', () => {
935
- return {
936
- edit: (options) => {
937
- this.closePopup();
938
- this.popupRef = this.popupService.open({
939
- anchor: options.view.element.querySelector('.k-spreadsheet-editor-button'),
940
- content: ListEditorComponent,
941
- popupAlign: options.alignLeft ? { horizontal: 'right', vertical: 'top' } : { horizontal: 'left', vertical: 'top' },
942
- anchorAlign: options.alignLeft ? { horizontal: 'right', vertical: 'bottom' } : { horizontal: 'left', vertical: 'bottom' },
943
- popupClass: 'k-spreadsheet-list-popup'
944
- });
945
- const list = this.popupRef.content.instance;
946
- list.itemSelect.subscribe((item) => {
947
- this.closePopup();
948
- const itemValue = item.value;
949
- if (isPresent(itemValue)) {
950
- options.callback(itemValue);
951
- }
952
- });
953
- list.close.subscribe(() => {
954
- this.closePopup();
955
- });
956
- const items = options.validation.from.value;
957
- const data = [];
958
- const add = (el) => { data.push({ value: el }); };
959
- if (items instanceof Matrix) {
960
- items.each(add, false);
961
- }
962
- else {
963
- (items + "").split(/\s*,\s*/).forEach(add);
964
- }
965
- list.data = data;
966
- },
967
- icon: { iconName: 'caret-alt-down', svgIcon: caretAltDownIcon }
968
- };
969
- });
970
- registerEditor('_validation_date', () => {
971
- return {
972
- edit: (options) => {
973
- this.closePopup();
974
- this.popupRef = this.popupService.open({
975
- anchor: options.view.element.querySelector('.k-spreadsheet-editor-button'),
976
- content: CalendarComponent,
977
- popupAlign: options.alignLeft ? { horizontal: 'right', vertical: 'top' } : { horizontal: 'left', vertical: 'top' },
978
- anchorAlign: options.alignLeft ? { horizontal: 'right', vertical: 'bottom' } : { horizontal: 'left', vertical: 'bottom' }
979
- });
980
- const calendar = this.popupRef.content.instance;
981
- calendar.valueChange.subscribe((value) => {
982
- this.closePopup();
983
- if (!options.range.format()) {
984
- options.range.format('yyyy-mm-dd');
985
- }
986
- options.callback(dateToSerial(value));
987
- });
988
- const date = options.range.value();
989
- calendar.value = this.createDate(date);
990
- const sheet = options.range.sheet();
991
- const currenValidation = options.validation;
992
- if (currenValidation) {
993
- let min = calendar.min;
994
- let max = calendar.max;
995
- const fromValidation = currenValidation.from;
996
- const toValidation = currenValidation.to;
997
- if (/^(?:greaterThan|between)/.test(currenValidation.comparerType)) {
998
- if (this.isValidFormula(fromValidation)) {
999
- min = this.createDate(fromValidation, sheet);
1000
- }
1001
- else {
1002
- min = this.createDate(fromValidation.value);
1003
- }
1004
- }
1005
- if (currenValidation.comparerType === 'between') {
1006
- if (this.isValidFormula(toValidation)) {
1007
- max = this.createDate(toValidation, sheet);
1008
- }
1009
- else {
1010
- max = this.createDate(currenValidation.to.value);
1011
- }
1012
- }
1013
- if (currenValidation.comparerType === 'lessThan' || currenValidation.comparerType === 'lessThanOrEqualTo') {
1014
- if (this.isValidFormula(fromValidation)) {
1015
- max = this.createDate(fromValidation, sheet);
1016
- }
1017
- else {
1018
- max = this.createDate(currenValidation.from.value);
1019
- }
1020
- }
1021
- calendar.disabledDates = (date) => {
1022
- let from;
1023
- let to;
1024
- if (fromValidation && this.isValidFormula(fromValidation)) {
1025
- from = sheet.range(fromValidation.value.row, fromValidation.value.col).value();
1026
- }
1027
- else {
1028
- from = fromValidation ? fromValidation.value | 0 : 0;
1029
- }
1030
- if (toValidation && this.isValidFormula(toValidation)) {
1031
- to = sheet.range(toValidation.value.row, toValidation.value.col).value();
1032
- }
1033
- else {
1034
- to = toValidation ? toValidation.value | 0 : 0;
1035
- }
1036
- date = dateToSerial(date) || 0;
1037
- return !validation.validationComparers[currenValidation.comparerType](date, from, to);
1038
- };
1039
- calendar.min = min;
1040
- calendar.max = max;
1041
- }
1042
- else {
1043
- calendar.disabledDates = null;
1044
- calendar.min = calendar.max = null;
1045
- }
1046
- },
1047
- icon: { iconName: 'calendar', svgIcon: calendarIcon }
1048
- };
1049
- });
1050
- this.registerCustomEditors();
1051
- }
1052
- registerCustomEditors() {
1053
- if (!this.cellEditors?.length) {
1054
- return;
1055
- }
1056
- this.cellEditors.forEach((editor) => this.registerCustomEditor(editor));
1057
- }
1058
- registerCustomEditor(editor) {
1059
- registerEditor(editor.name, () => ({
1060
- edit: (options) => this.openCustomEditorPopup(editor, options),
1061
- icon: { iconName: editor.icon, svgIcon: editor.svgIcon }
1062
- }));
1063
- }
1064
- openCustomEditorPopup(editor, options) {
1065
- this.closePopup();
1066
- this.popupRef = this.popupService.open({
1067
- anchor: options.view.element.querySelector('.k-spreadsheet-editor-button'),
1068
- content: editor.component,
1069
- popupAlign: options.alignLeft ? { horizontal: 'right', vertical: 'top' } : { horizontal: 'left', vertical: 'top' },
1070
- anchorAlign: options.alignLeft ? { horizontal: 'right', vertical: 'bottom' } : { horizontal: 'left', vertical: 'bottom' }
1071
- });
1072
- const componentInstance = this.popupRef.content.instance;
1073
- editor.actions.forEach(action => {
1074
- const actionStream = componentInstance[action.name];
1075
- actionStream?.subscribe((args) => {
1076
- const eventArgs = { originalEvent: args, ...options };
1077
- action.handler?.apply(componentInstance, [eventArgs]);
1078
- });
1079
- });
1080
- }
1081
- isValidFormula(validation) {
1082
- const formula = calc.runtime.Formula;
1083
- return validation instanceof formula && rowAndColPresent(validation.value);
1084
- }
1085
- createDate(validation, sheet) {
1086
- return new Date(serialToDate(isPresent(sheet) ? sheet.range(validation.value.row, validation.value.col).value() : validation));
1087
- }
1088
- createFilterMenu(options) {
1089
- this.closePopup();
1090
- this.currentFilterOptions = options;
1091
- if (this.filterMenuOpened) {
1092
- this.filterMenuOpened = false;
1093
- return {
1094
- bind: () => { },
1095
- openFor: () => { },
1096
- close: () => { },
1097
- destroy: () => { }
1098
- };
1099
- }
1100
- this.ngZone.onStable.pipe(take(1)).subscribe(() => {
1101
- const childItems = this.extractColumnFilterValues(options.range, options.column);
1102
- const parentItem = {
1103
- text: this.messageFor('filterMenuAll'),
1104
- value: null,
1105
- checked: childItems.every(i => i.checked),
1106
- items: childItems
1107
- };
1108
- this.rangeFilterValuesList = [parentItem];
1109
- this.checkedKeys = [parentItem, ...childItems].filter(i => i.checked).map(i => i.text);
1110
- });
1111
- this.filterConditionsList = [
1112
- { type: 'none', comparerType: 'none', comparer: 'none', text: this.messageFor('filterNoneOperator') },
1113
- { type: 'string', comparerType: 'string_contains', comparer: 'contains', text: this.messageFor('filterContainsOperator') },
1114
- { type: 'string', comparerType: 'string_doesnotcontain', comparer: 'doesnotcontain', text: this.messageFor('filterNotContainsOperator') },
1115
- { type: 'string', comparerType: 'string_startswith', comparer: 'startswith', text: this.messageFor('filterStartsWithOperator') },
1116
- { type: 'string', comparerType: 'string_endswith', comparer: 'endswith', text: this.messageFor('filterEndsWithOperator') },
1117
- { type: 'string', comparerType: 'string_matches', comparer: 'eq', text: this.messageFor('filterMatchesOperator') },
1118
- { type: 'string', comparerType: 'string_doesnotmatch', comparer: 'neq', text: this.messageFor('filterNotMatchesOperator') },
1119
- { type: 'date', comparerType: 'date_eq', comparer: 'eq', text: this.messageFor('filterDateEqOperator') },
1120
- { type: 'date', comparerType: 'date_neq', comparer: 'neq', text: this.messageFor('filterDateNotEqOperator') },
1121
- { type: 'date', comparerType: 'date_lt', comparer: 'lt', text: this.messageFor('filterBeforeOperator') },
1122
- { type: 'date', comparerType: 'date_gt', comparer: 'gt', text: this.messageFor('filterAfterOperator') },
1123
- { type: 'number', comparerType: 'number_eq', comparer: 'eq', text: this.messageFor('filterEqOperator') },
1124
- { type: 'number', comparerType: 'number_neq', comparer: 'neq', text: this.messageFor('filterNotEqOperator') },
1125
- { type: 'number', comparerType: 'number_gte', comparer: 'gte', text: this.messageFor('filterGteOperator') },
1126
- { type: 'number', comparerType: 'number_gt', comparer: 'gt', text: this.messageFor('filterGtOperator') },
1127
- { type: 'number', comparerType: 'number_lte', comparer: 'lte', text: this.messageFor('filterLteOperator') },
1128
- { type: 'number', comparerType: 'number_lt', comparer: 'lt', text: this.messageFor('filterLtOperator') }
1129
- ];
1130
- const currentSheetFilter = this.spreadsheetWidget.activeSheet().filter();
1131
- const columnFilter = currentSheetFilter?.columns?.find((col) => col.index === options.column);
1132
- if (columnFilter) {
1133
- const filter = columnFilter.filter.toJSON();
1134
- if (filter.filter === 'custom') {
1135
- const valueType = typeof filter.criteria[0].value === 'object' ? 'date' : typeof filter.criteria[0].value;
1136
- this.selectedCondition = this.filterConditionsList.find(c => (c.comparer === filter?.criteria?.[0]?.operator) && (c.type === valueType));
1137
- this.conditionValue = filter?.criteria?.[0]?.value;
1138
- }
1139
- else {
1140
- this.checkedKeys = filter.values;
1141
- }
1142
- }
1143
- else {
1144
- this.selectedCondition = this.filterConditionsList[0];
1145
- }
1146
- return {
1147
- bind: (_eventName, _handler) => { },
1148
- openFor: (anchor) => {
1149
- this.popupRef = this.popupService.open({
1150
- anchor,
1151
- content: this.filterMenuTemplate,
1152
- popupAlign: { horizontal: 'left', vertical: 'top' },
1153
- anchorAlign: { horizontal: 'left', vertical: 'bottom' },
1154
- popupClass: 'k-spreadsheet-filter-menu k-column-menu k-group k-reset'
1155
- });
1156
- this.popupPositionChangeSub = this.popupRef.popupPositionChange.subscribe(({ offset }) => {
1157
- if (offset.top === 0 && offset.left === 0) {
1158
- this.closePopup();
1159
- this.filterMenuOpened = false;
1160
- }
1161
- });
1162
- this.filterMenuOpened = true;
1163
- },
1164
- close: () => { this.closePopup(); this.filterMenuOpened = false; },
1165
- destroy: () => { this.closePopup(); this.filterMenuOpened = false; }
1166
- };
1167
- }
1168
- extractColumnFilterValues(range, column) {
1169
- const results = [];
1170
- const sheet = range.sheet();
1171
- const columnRange = range.column(column).resize({ top: 1 });
1172
- const blanksMessage = this.localization.get('blankValues');
1173
- columnRange.forEachCell((rowIndex, _colIndex, cellData) => {
1174
- const isVisible = !sheet.isHiddenRow(rowIndex);
1175
- let cellValue = cellData.value;
1176
- const unformattedValue = cellValue;
1177
- let displayText;
1178
- let valueType;
1179
- if (cellValue === undefined) {
1180
- valueType = 'blank';
1181
- }
1182
- else if (cellData.format) {
1183
- valueType = formatting.type(cellValue, cellData.format);
1184
- }
1185
- else {
1186
- valueType = typeof cellValue;
1187
- }
1188
- if (cellValue !== null && cellData.format) {
1189
- displayText = formatting.text(cellValue, cellData.format);
1190
- }
1191
- else {
1192
- displayText = valueType === 'blank' ? blanksMessage : cellValue;
1193
- }
1194
- if (valueType === 'percent' || valueType === 'currency') {
1195
- valueType = 'number';
1196
- }
1197
- if (valueType === 'date') {
1198
- cellValue = serialToDate(cellValue);
1199
- }
1200
- results.push({
1201
- dataType: valueType,
1202
- value: cellValue,
1203
- text: displayText,
1204
- checked: isVisible,
1205
- unformattedValue
1206
- });
1207
- });
1208
- const uniqueValuesSorted = this.removeDuplicateValues(results).sort(this.compareFilterValues);
1209
- return uniqueValuesSorted;
1210
- }
1211
- removeDuplicateValues(values) {
1212
- const hash = new Map();
1213
- const result = [];
1214
- for (const item of values) {
1215
- const existingItem = hash.get(item.value);
1216
- if (!existingItem) {
1217
- hash.set(item.value, item);
1218
- result.push(item);
1219
- }
1220
- else if (!existingItem.checked && item.checked) {
1221
- existingItem.checked = true;
1222
- }
1223
- }
1224
- return result;
1225
- }
1226
- compareFilterValues(a, b) {
1227
- if (a.dataType === b.dataType) {
1228
- switch (a.dataType) {
1229
- case 'number':
1230
- return a.value - b.value;
1231
- case 'date':
1232
- return a.value.getTime() - b.value.getTime();
1233
- case 'blank':
1234
- return 0;
1235
- default:
1236
- return String(a.value).localeCompare(String(b.value));
1237
- }
1238
- }
1239
- if (a.dataType === 'blank')
1240
- return -1;
1241
- if (b.dataType === 'blank')
1242
- return 1;
1243
- if (a.dataType === 'number')
1244
- return -1;
1245
- if (b.dataType === 'number')
1246
- return 1;
1247
- if (a.dataType === 'date')
1248
- return -1;
1249
- if (b.dataType === 'date')
1250
- return 1;
1251
- return 0;
1252
- }
1253
- containsItem(item) {
1254
- return this.checkedKeys.indexOf(item.text) > -1;
1255
- }
1256
- findItemByText(items, text) {
1257
- for (const item of items) {
1258
- if (item.text === text) {
1259
- return item;
1260
- }
1261
- if (item.items && item.items.length > 0) {
1262
- const found = this.findItemByText(item.items, text);
1263
- if (found) {
1264
- return found;
1265
- }
1266
- }
1267
- }
1268
- return null;
1269
- }
1270
- isIndeterminate(items = []) {
1271
- let idx = 0;
1272
- let item;
1273
- while ((item = items[idx])) {
1274
- if (this.isIndeterminate(item.items) || this.containsItem(item)) {
1275
- return true;
1276
- }
1277
- idx += 1;
1278
- }
1279
- return false;
1280
- }
1281
- 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 });
1282
- 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: [
1283
- SpreadsheetLocalizationService,
1284
- SpreadsheetService,
1285
- {
1286
- provide: LocalizationService,
1287
- useExisting: SpreadsheetLocalizationService
1288
- },
1289
- {
1290
- provide: L10N_PREFIX,
1291
- useValue: 'kendo.spreadsheet'
1292
- },
1293
- SpreadsheetToolsService,
1294
- PopupService,
1295
- ErrorHandlingService
1296
- ], 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: `
1297
- <ng-container
1298
- kendoSpreadsheetLocalizedMessages
1299
- i18n-background="kendo.spreadsheet.background|The title of the tool that changes the text background color."
1300
- background="Background color"
1301
- i18n-color="kendo.spreadsheet.color|The title of the tool that changes the text font color."
1302
- color="Font color"
1303
- i18n-bold="kendo.spreadsheet.bold|The title of the Bold tool."
1304
- bold="Bold"
1305
- i18n-dataValidation="kendo.spreadsheet.dataValidation|The title of the Data Validation tool."
1306
- dataValidation="Data Validation"
1307
- i18n-filter="kendo.spreadsheet.filter|The title of the Filter tool."
1308
- filter="Filter"
1309
- i18n-validationCellRange="kendo.spreadsheet.validationCellRange|The text of the Cell Range label in the data validation dialog."
1310
- validationCellRange="Cell Range"
1311
- i18n-validationCriteria="kendo.spreadsheet.validationCriteria|The text of the Criteria dropdown list label in the data validation dialog."
1312
- validationCriteria="Criteria"
1313
- i18n-validationMinValue="kendo.spreadsheet.validationMinValue|The text of the Min value label in the data validation dialog."
1314
- validationMinValue="Min"
1315
- i18n-validationMaxValue="kendo.spreadsheet.validationMaxValue|The text of the Max value label in the data validation dialog."
1316
- validationMaxValue="Max"
1317
- i18n-validationStartValue="kendo.spreadsheet.validationStartValue|The text of the Start value label in the data validation dialog."
1318
- validationStartValue="Start"
1319
- i18n-validationEndValue="kendo.spreadsheet.validationEndValue|The text of the End value label in the data validation dialog."
1320
- validationEndValue="End"
1321
- i18n-validationValue="kendo.spreadsheet.validationValue|The text of the Value label in the data validation dialog."
1322
- validationValue="Text"
1323
- i18n-validationShowListButtonCheckbox="kendo.spreadsheet.validationShowListButtonCheckbox|The text for the Show list button checkbox label in the data validation dialog."
1324
- validationShowListButtonCheckbox="Display button to show list"
1325
- i18n-validationOnInvalidData="kendo.spreadsheet.validationOnInvalidData|The text for the On invalid data label in the data validation dialog."
1326
- validationOnInvalidData="On invalid data"
1327
- i18n-validationShowDateButtonCheckbox="kendo.spreadsheet.validationShowDateButtonCheckbox|The text for the Show date button checkbox label in the data validation dialog."
1328
- validationShowDateButtonCheckbox="Display button to show Calendar"
1329
- i18n-validationRejectInput="kendo.spreadsheet.validationRejectInput|The text for the Reject input radio button label in the data validation dialog."
1330
- validationRejectInput="Reject input"
1331
- i18n-validationShowWarning="kendo.spreadsheet.validationShowWarning|The text for the Show warning radio button label in the data validation dialog."
1332
- validationShowWarning="Show warning"
1333
- i18n-validationHintTitle="kendo.spreadsheet.validationHintTitle|The text for the Custom hint title input label in the data validation dialog."
1334
- validationHintTitle="Custom hint title"
1335
- i18n-validationHintMessage="kendo.spreadsheet.validationHintMessage|The text for the Custom hint input label in the data validation dialog."
1336
- validationHintMessage="Custom hint"
1337
- i18n-validationShowHint="kendo.spreadsheet.validationShowHint|The text for the Show hint radio button label in the data validation dialog."
1338
- validationShowHint="Show hint"
1339
- i18n-validationIgnoreBlankCheckbox="kendo.spreadsheet.validationIgnoreBlankCheckbox|The text for the Ignore blank checkbox label in the data validation dialog."
1340
- validationIgnoreBlankCheckbox="Ignore blank"
1341
- i18n-validationComparer="kendo.spreadsheet.validationComparer|The text of the Comparer dropdown list label in the data validation dialog."
1342
- validationComparer="Comparer"
1343
- i18n-anyValueValidationCriteria="kendo.spreadsheet.anyValueValidationCriteria|The text of the Any value validation criteria"
1344
- anyValueValidationCriteria="Any value"
1345
- i18n-numberValidationCriteria="kendo.spreadsheet.numberValidationCriteria|The text of the Number validation criteria"
1346
- numberValidationCriteria="Number"
1347
- i18n-textValidationCriteria="kendo.spreadsheet.textValidationCriteria|The text of the Text validation criteria"
1348
- textValidationCriteria="Text"
1349
- i18n-dateValidationCriteria="kendo.spreadsheet.dateValidationCriteria|The text of the Date validation criteria"
1350
- dateValidationCriteria="Date"
1351
- i18n-customFormulaValidationCriteria="kendo.spreadsheet.customFormulaValidationCriteria|The text of the Custom formula validation criteria"
1352
- customFormulaValidationCriteria="Custom Formula"
1353
- i18n-listValidationCriteria="kendo.spreadsheet.listValidationCriteria|The text of the List validation criteria"
1354
- listValidationCriteria="List"
1355
- i18n-greaterThanValidationComparer="kendo.spreadsheet.greaterThanValidationComparer|The text of the greater than validation comparer"
1356
- greaterThanValidationComparer="greater than"
1357
- i18n-lessThanValidationComparer="kendo.spreadsheet.lessThanValidationComparer|The text of the less than validation comparer"
1358
- lessThanValidationComparer="less than"
1359
- i18n-betweenValidationComparer="kendo.spreadsheet.betweenValidationComparer|The text of the between validation comparer"
1360
- betweenValidationComparer="between"
1361
- i18n-notBetweenValidationComparer="kendo.spreadsheet.notBetweenValidationComparer|The text of the not between validation comparer"
1362
- notBetweenValidationComparer="not between"
1363
- i18n-equalToValidationComparer="kendo.spreadsheet.equalToValidationComparer|The text of the equal to validation comparer"
1364
- equalToValidationComparer="equal to"
1365
- i18n-notEqualToValidationComparer="kendo.spreadsheet.notEqualToValidationComparer|The text of the not equal to validation comparer"
1366
- notEqualToValidationComparer="not equal to"
1367
- i18n-greaterThanOrEqualToValidationComparer="kendo.spreadsheet.greaterThanOrEqualToValidationComparer|The text of the greater than on equal to validation comparer"
1368
- greaterThanOrEqualToValidationComparer="greater than or equal to"
1369
- i18n-lessThanOrEqualToValidationComparer="kendo.spreadsheet.lessThanOrEqualToValidationComparer|The text of the less than on equal to validation comparer"
1370
- lessThanOrEqualToValidationComparer="less than or equal to"
1371
- i18n-italic="kendo.spreadsheet.italic|The title of the Italic tool."
1372
- italic="Italic"
1373
- i18n-underline="kendo.spreadsheet.underline|The title of the Underline tool."
1374
- underline="Underline"
1375
- i18n-loadFile="kendo.spreadsheet.loadFile|The title of the Load File tool."
1376
- loadFile="Open..."
1377
- i18n-saveFile="kendo.spreadsheet.saveFile|The title of the Save File tool."
1378
- saveFile="Export..."
1379
- i18n-format="kendo.spreadsheet.format|The text of the Format tool."
1380
- format="Custom format..."
1381
- i18n-fontFamily="kendo.spreadsheet.fontFamily|The text of the Font Family tool."
1382
- fontFamily="Font"
1383
- i18n-fontSize="kendo.spreadsheet.fontSize|The text of the Font Size tool."
1384
- fontSize="Font size"
1385
- i18n-home="kendo.spreadsheet.home|The text of the Home toolbar tab."
1386
- home="Home"
1387
- i18n-file="kendo.spreadsheet.file|The text of the File toolbar tab."
1388
- file="File"
1389
- i18n-insert="kendo.spreadsheet.insert|The text of the Insert toolbar tab."
1390
- insert="Insert"
1391
- i18n-formatTab="kendo.spreadsheet.formatTab|The text of the Format toolbar tab."
1392
- formatTab="Format"
1393
- i18n-dataTab="kendo.spreadsheet.dataTab|The text of the Data toolbar tab."
1394
- dataTab="Data"
1395
- i18n-view="kendo.spreadsheet.view|The text of the View toolbar tab."
1396
- view="View"
1397
- i18n-undo="kendo.spreadsheet.undo|The title of the Undo tool."
1398
- undo="Undo"
1399
- i18n-redo="kendo.spreadsheet.redo|The title of the Redo tool."
1400
- redo="Redo"
1401
- i18n-gridLines="kendo.spreadsheet.gridLines|The title of the Grid Lines tool."
1402
- gridLines="Toggle grid lines"
1403
- i18n-addColumnLeft="kendo.spreadsheet.addColumnLeft|The title of the tool that adds new column before currently selected column."
1404
- addColumnLeft="Add column left"
1405
- i18n-addColumnRight="kendo.spreadsheet.addColumnRight|The title of the tool that adds new column after currently selected column."
1406
- addColumnRight="Add column right"
1407
- i18n-addRowBelow="kendo.spreadsheet.addRowBelow|The title of the tool that adds new row below currently selected row."
1408
- addRowBelow="Add row below"
1409
- i18n-addRowAbove="kendo.spreadsheet.addRowAbove|The title of the tool that adds new row above currently selected row."
1410
- addRowAbove="Add row above"
1411
- i18n-deleteColumn="kendo.spreadsheet.deleteColumn|The title of the tool that deletes a column."
1412
- deleteColumn="Delete column"
1413
- i18n-deleteRow="kendo.spreadsheet.deleteRow|The title of the tool that deletes a row."
1414
- deleteRow="Delete row"
1415
- i18n-wrap="kendo.spreadsheet.wrap|The title of the Text Wrap tool."
1416
- wrap="Text wrap"
1417
- i18n-align="kendo.spreadsheet.align|The title of the Text Align tool."
1418
- align="Align"
1419
- i18n-alignHorizontal="kendo.spreadsheet.alignHorizontal|The title of the Text Align Horizontal tool."
1420
- alignHorizontal="Align horizontally"
1421
- i18n-alignVertical="kendo.spreadsheet.alignVertical|The title of the Text Align Vertical tool."
1422
- alignVertical="Align vertically"
1423
- i18n-alignLeft="kendo.spreadsheet.alignLeft|The title of the Text Align Left tool."
1424
- alignLeft="Align Left"
1425
- i18n-alignCenter="kendo.spreadsheet.alignCenter|The title of the Text Align Center tool."
1426
- alignCenter="Align Center"
1427
- i18n-alignRight="kendo.spreadsheet.alignRight|The title of the Text Align Right tool."
1428
- alignRight="Align Right"
1429
- i18n-alignJustify="kendo.spreadsheet.alignJustify|The title of the Text Align Justify tool."
1430
- alignJustify="Align Justify"
1431
- i18n-alignTop="kendo.spreadsheet.alignTop|The title of the Text Align Top tool."
1432
- alignTop="Align Top"
1433
- i18n-alignMiddle="kendo.spreadsheet.alignMiddle|The title of the Text Align Middle tool."
1434
- alignMiddle="Align Middle"
1435
- i18n-alignBottom="kendo.spreadsheet.alignBottom|The title of the Text Align Bottom tool."
1436
- alignBottom="Align Bottom"
1437
- i18n-merge="kendo.spreadsheet.merge|The title of the Cells Merge tool."
1438
- merge="Merge"
1439
- i18n-mergeAll="kendo.spreadsheet.mergeAll|The title of the Merge all tool."
1440
- mergeAll="Merge all"
1441
- i18n-mergeHorizontally="kendo.spreadsheet.mergeHorizontally|The title of the Merge horizontally tool."
1442
- mergeHorizontally="Merge horizontally"
1443
- i18n-mergeVertically="kendo.spreadsheet.mergeVertically|The title of the Merge vertically tool."
1444
- mergeVertically="Merge vertically"
1445
- i18n-unmerge="kendo.spreadsheet.unmerge|The title of the Unmerge tool."
1446
- unmerge="Unmerge"
1447
- i18n-insertLink="kendo.spreadsheet.insertLink|The title of the tool that inserts a link."
1448
- insertLink="Insert link"
1449
- i18n-decreaseDecimal="kendo.spreadsheet.decreaseDecimal|The title of the tool that decreases decimals."
1450
- decreaseDecimal="Decrease decimal"
1451
- i18n-increaseDecimal="kendo.spreadsheet.increaseDecimal|The title of the tool that increases decimals."
1452
- increaseDecimal="Increase decimal"
1453
- i18n-increaseFontSize="kendo.spreadsheet.increaseFontSize|The title of the tool that increases the cell font size."
1454
- increaseFontSize="Increase font size"
1455
- i18n-decreaseFontSize="kendo.spreadsheet.decreaseFontSize|The title of the tool that decreases the cell font size."
1456
- decreaseFontSize="Decrease font size"
1457
- i18n-dialogApply="kendo.spreadsheet.dialogApply|The text of the **Apply** button in all Spreadsheet dialogs."
1458
- dialogApply="Apply"
1459
- i18n-dialogCancel="kendo.spreadsheet.dialogCancel|The text of the **Cancel** button in all Spreadsheet dialogs."
1460
- dialogCancel="Cancel"
1461
- i18n-dialogDelete="kendo.spreadsheet.dialogDelete|The text of the **Delete** button in the Delete sheet dialog."
1462
- dialogDelete="Delete"
1463
- i18n-dialogRename="kendo.spreadsheet.dialogRename|The text of the **Rename** button in the Rename sheet dialog."
1464
- dialogRename="Rename"
1465
- i18n-dialogInsert="kendo.spreadsheet.dialogInsert|The text of the **Insert** button in all Spreadsheet dialogs."
1466
- dialogInsert="Insert"
1467
- i18n-dialogRemove="kendo.spreadsheet.dialogRemove|The text of the **Remove** button in all Spreadsheet dialogs."
1468
- dialogRemove="Remove"
1469
- i18n-dialogRemoveLink="kendo.spreadsheet.dialogRemoveLink|The text of the **Remove link** button in the Link tool dialog."
1470
- dialogRemoveLink="Remove link"
1471
- i18n-rename="kendo.spreadsheet.rename|The title of the Rename sheet dialog."
1472
- rename="Rename Sheet"
1473
- i18n-delete="kendo.spreadsheet.delete|The title of the Delete sheet dialog."
1474
- delete="Delete Sheet"
1475
- i18n-nameBox="kendo.spreadsheet.nameBox|The title of the Name Box input."
1476
- nameBox="Name Box"
1477
- i18n-formulaInput="kendo.spreadsheet.formulaInput|The title of the Formula input."
1478
- formulaInput="Formula Input"
1479
- i18n-addSheet="kendo.spreadsheet.addSheet|The title of the Add new sheet button."
1480
- addSheet="Add New Sheet"
1481
- i18n-sheetsMenu="kendo.spreadsheet.sheetsMenu|The title of the Sheets menu button."
1482
- sheetsMenu="All Sheets"
1483
- i18n-openUnsupported="kendo.spreadsheet.openUnsupported|The content of the dialog that warns about an unsupported file type."
1484
- openUnsupported="Unsupported format. Please select an .xlsx file."
1485
- i18n-modifyMerged="kendo.spreadsheet.modifyMerged|The content of the dialog that warns about modifying a merged cell."
1486
- modifyMerged="Cannot change part of a merged cell."
1487
- i18n-cannotModifyDisabled="kendo.spreadsheet.cannotModifyDisabled|The content of the dialog that warns about modifying a disabled cell."
1488
- cannotModifyDisabled="Cannot modify disabled cells."
1489
- i18n-dialogOk="kendo.spreadsheet.dialogOk|The text of the **OK** dialog button."
1490
- dialogOk="OK"
1491
- i18n-dialogError="kendo.spreadsheet.dialogError|The title of an error dialog."
1492
- dialogError="Error"
1493
- i18n-duplicateSheetName="kendo.spreadsheet.duplicateSheetName|The content of the dialog that warns about duplicated sheet name."
1494
- duplicateSheetName="There is an existing sheet with this name. Please enter another name."
1495
- i18n-copy="kendo.spreadsheet.copy|The Copy command text."
1496
- copy="Copy"
1497
- i18n-cut="kendo.spreadsheet.cut|The Cut command text."
1498
- cut="Cut"
1499
- i18n-paste="kendo.spreadsheet.paste|The Paste command text."
1500
- paste="Paste (use Ctrl/⌘ + V)"
1501
- i18n-hideRow="kendo.spreadsheet.hideRow|The Hide row command text."
1502
- hideRow="Hide"
1503
- i18n-unhideRow="kendo.spreadsheet.unhideRow|The Unhide row command text."
1504
- unhideRow="Unhide"
1505
- i18n-hideColumn="kendo.spreadsheet.hideColumn|The Hide column command text."
1506
- hideColumn="Hide"
1507
- i18n-unhideColumn="kendo.spreadsheet.unhideColumn|The Unhide column command text."
1508
- unhideColumn="Unhide"
1509
- i18n-sheetDelete="kendo.spreadsheet.sheetDelete|The text of the Sheet menu Delete option."
1510
- sheetDelete="Delete"
1511
- i18n-sheetRename="kendo.spreadsheet.sheetRename|The text of the Sheet menu Rename option."
1512
- sheetRename="Rename"
1513
- i18n-sheetDuplicate="kendo.spreadsheet.sheetDuplicate|The text of the Sheet menu Duplicate option."
1514
- sheetDuplicate="Duplicate"
1515
- i18n-sheetHide="kendo.spreadsheet.sheetHide|The text of the Sheet menu Hide option."
1516
- sheetHide="Hide"
1517
- i18n-sheetMoveLeft="kendo.spreadsheet.sheetMoveLeft|The text of the Sheet menu Move Left option."
1518
- sheetMoveLeft="Move Left"
1519
- i18n-sheetMoveRight="kendo.spreadsheet.sheetMoveRight|The text of the Sheet menu Move Right option."
1520
- sheetMoveRight="Move Right"
1521
- i18n-invalidNameError="kendo.spreadsheet.invalidNameError|The content of the dialog that warns about invalid name input."
1522
- invalidNameError="{{ 'Invalid name: {inputValue}' }}"
1523
- i18n-cantSortMixedCells="kendo.spreadsheet.cantSortMixedCells|The content of the dialog that warns about sorting range containing cells of mixed shapes."
1524
- cantSortMixedCells="Cannot sort range containing cells of mixed shapes"
1525
- i18n-cantSortNullRef="kendo.spreadsheet.cantSortNullRef|The content of the dialog that warns about sorting incorrect (empty) range."
1526
- cantSortNullRef="Cannot sort empty selection"
1527
- i18n-cantSortMultipleSelection="kendo.spreadsheet.cantSortMultipleSelection|The content of the dialog that warns about sorting multiple range selection."
1528
- cantSortMultipleSelection="Cannot sort multiple selection"
1529
- i18n-filterApply="kendo.spreadsheet.filterApply|The text of the **Apply** button in the filter menu."
1530
- filterApply="Apply"
1531
- i18n-filterClear="kendo.spreadsheet.filterClear|The text of the **Clear** button in the filter menu."
1532
- filterClear="Clear"
1533
- i18n-filterMenuAll="kendo.spreadsheet.filterMenuAll|The text of the **All** grouping item in the filter menu."
1534
- filterMenuAll="All"
1535
- i18n-blankValues="kendo.spreadsheet.blankValues|The text for the blank (empty) values."
1536
- blankValues="Blank"
1537
- i18n-filterNoneOperator="kendo.spreadsheet.filterNoneOperator|The text for the **none** filter operator."
1538
- filterNoneOperator="None"
1539
- i18n-filterContainsOperator="kendo.spreadsheet.filterContainsOperator|The text of the **contains** filter operator"
1540
- filterContainsOperator="Text contains"
1541
- i18n-filterNotContainsOperator="kendo.spreadsheet.filterNotContainsOperator|The text of the **does not contain** filter operator"
1542
- filterNotContainsOperator="Text does not contain"
1543
- i18n-filterStartsWithOperator="kendo.spreadsheet.filterStartsWithOperator|The text of the **starts with** filter operator"
1544
- filterStartsWithOperator="Text starts with"
1545
- i18n-filterEndsWithOperator="kendo.spreadsheet.filterEndsWithOperator|The text of the **ends with** filter operator"
1546
- filterEndsWithOperator="Text ends with"
1547
- i18n-filterMatchesOperator="kendo.spreadsheet.filterMatchesOperator|The text of the **matches** filter operator"
1548
- filterMatchesOperator="Text matches"
1549
- i18n-filterNotMatchesOperator="kendo.spreadsheet.filterNotMatchesOperator|The text of the **does not match** filter operator"
1550
- filterNotMatchesOperator="Text does not match"
1551
- i18n-filterDateEqOperator="kendo.spreadsheet.filterDateEqOperator|The text of the **Date is** filter operator"
1552
- filterDateEqOperator="Date is"
1553
- i18n-filterDateNotEqOperator="kendo.spreadsheet.filterDateNotEqOperator|The text of the **Date is not** filter operator"
1554
- filterDateNotEqOperator="Date is not"
1555
- i18n-filterBeforeOperator="kendo.spreadsheet.filterBeforeOperator|The text of the **Date is before** filter operator"
1556
- filterBeforeOperator="Date is before"
1557
- i18n-filterAfterOperator="kendo.spreadsheet.filterAfterOperator|The text of the **Date is after** filter operator"
1558
- filterAfterOperator="Date is after"
1559
- i18n-filterEqOperator="kendo.spreadsheet.filterEqOperator|Sets the text for the **Equal (Is equal to)** filter operator."
1560
- filterEqOperator="Is equal to"
1561
- i18n-filterNotEqOperator="kendo.spreadsheet.filterNotEqOperator|Sets the text for the **Not equal (Is not equal to)** filter operator."
1562
- filterNotEqOperator="Is not equal to"
1563
- i18n-filterGteOperator="kendo.spreadsheet.filterGteOperator|The text of the **greater than or equal to** filter operator"
1564
- filterGteOperator="Is greater than or equal to"
1565
- i18n-filterGtOperator="kendo.spreadsheet.filterGtOperator|The text of the **greater than** filter operator"
1566
- filterGtOperator="Is greater than"
1567
- i18n-filterLteOperator="kendo.spreadsheet.filterLteOperator|The text of the **less than or equal to** filter operator"
1568
- filterLteOperator="Is less than or equal to"
1569
- i18n-filterLtOperator="kendo.spreadsheet.filterLtOperator|The text of the **less than** filter operator"
1570
- filterLtOperator="Is less than"
1571
- i18n-filterMenuConditionItem="kendo.spreadsheet.filterMenuConditionItem|The text of the **Filter by condition** menu item."
1572
- filterMenuConditionItem="Filter by condition"
1573
- i18n-filterMenuValueItem="kendo.spreadsheet.filterMenuValueItem|The text of the **Filter by value** menu item."
1574
- filterMenuValueItem="Filter by value"
1575
- i18n-sort="kendo.spreadsheet.sort|The title of the Sort ToolBar tool."
1576
- sort="Sort"
1577
- i18n-sortAsc="kendo.spreadsheet.sortAsc|The text of the **Sort range A to Z** option."
1578
- sortAsc="Sort range A to Z"
1579
- i18n-sortDesc="kendo.spreadsheet.sortDesc|The text of the **Sort range Z to A** option."
1580
- sortDesc="Sort range Z to A"
1581
- i18n-unsort="kendo.spreadsheet.unsort|The text of the **Unsort** option."
1582
- unsort="Unsort">
1583
- </ng-container>
1584
- <div class="k-spreadsheet-header">
1585
- <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
1586
- @for (item of menuItems; track item) {
1587
- <kendo-menu-item [text]="item.text" [cssClass]="item.cssClass"></kendo-menu-item>
1588
- }
1589
- </kendo-menu>
1590
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'file') {
1591
- <kendo-toolbar
1592
- [attr.aria-label]="messageFor('file')"
1593
- fillMode="flat"
1594
- class="k-spreadsheet-toolbar"
1595
- [overflow]="overflow">
1596
- <kendo-spreadsheet-load-file-tool></kendo-spreadsheet-load-file-tool>
1597
- <kendo-toolbar-button kendoSpreadsheetSaveFile></kendo-toolbar-button>
1598
- </kendo-toolbar>
1599
- }
1600
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'home') {
1601
- <kendo-toolbar
1602
- [attr.aria-label]="messageFor('home')"
1603
- class="k-spreadsheet-toolbar"
1604
- fillMode="flat"
1605
- [overflow]="overflow">
1606
- <kendo-toolbar-button kendoSpreadsheetUndo></kendo-toolbar-button>
1607
- <kendo-toolbar-button kendoSpreadsheetRedo></kendo-toolbar-button>
1608
- <kendo-toolbar-separator></kendo-toolbar-separator>
1609
- <kendo-toolbar-dropdownlist kendoSpreadsheetFontFamily></kendo-toolbar-dropdownlist>
1610
- <kendo-toolbar-dropdownlist kendoSpreadsheetFontSize></kendo-toolbar-dropdownlist>
1611
- <kendo-toolbar-buttongroup fillMode="flat">
1612
- <kendo-toolbar-button kendoSpreadsheetIncreaseFontSize></kendo-toolbar-button>
1613
- <kendo-toolbar-button kendoSpreadsheetDecreaseFontSize></kendo-toolbar-button>
1614
- </kendo-toolbar-buttongroup>
1615
- <kendo-toolbar-separator></kendo-toolbar-separator>
1616
- <kendo-toolbar-buttongroup fillMode="flat">
1617
- <kendo-toolbar-button kendoSpreadsheetBold></kendo-toolbar-button>
1618
- <kendo-toolbar-button kendoSpreadsheetItalic></kendo-toolbar-button>
1619
- <kendo-toolbar-button kendoSpreadsheetUnderline></kendo-toolbar-button>
1620
- </kendo-toolbar-buttongroup>
1621
- <kendo-spreadsheet-forecolor-tool></kendo-spreadsheet-forecolor-tool>
1622
- <kendo-toolbar-separator></kendo-toolbar-separator>
1623
- <kendo-spreadsheet-backcolor-tool></kendo-spreadsheet-backcolor-tool>
1624
- <kendo-toolbar-separator></kendo-toolbar-separator>
1625
- <kendo-toolbar-dropdownbutton kendoSpreadsheetHorizontalTextAlign></kendo-toolbar-dropdownbutton>
1626
- <kendo-toolbar-dropdownbutton kendoSpreadsheetVerticalTextAlign></kendo-toolbar-dropdownbutton>
1627
- <kendo-toolbar-button kendoSpreadsheetTextWrap></kendo-toolbar-button>
1628
- <kendo-toolbar-separator></kendo-toolbar-separator>
1629
- <kendo-toolbar-dropdownbutton kendoSpreadsheetFormat></kendo-toolbar-dropdownbutton>
1630
- </kendo-toolbar>
1631
- }
1632
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'insert') {
1633
- <kendo-toolbar
1634
- [attr.aria-label]="messageFor('insert')"
1635
- fillMode="flat"
1636
- class="k-spreadsheet-toolbar"
1637
- [overflow]="overflow">
1638
- <kendo-toolbar-button kendoSpreadsheetInsertLink></kendo-toolbar-button>
1639
- <kendo-toolbar-separator></kendo-toolbar-separator>
1640
- <kendo-toolbar-button kendoSpreadsheetAddColumnLeftButton></kendo-toolbar-button>
1641
- <kendo-toolbar-button kendoSpreadsheetAddColumnRightButton></kendo-toolbar-button>
1642
- <kendo-toolbar-button kendoSpreadsheetAddRowBelowButton></kendo-toolbar-button>
1643
- <kendo-toolbar-button kendoSpreadsheetAddRowAboveButton></kendo-toolbar-button>
1644
- <kendo-toolbar-separator></kendo-toolbar-separator>
1645
- <kendo-toolbar-button kendoSpreadsheetDeleteColumnButton></kendo-toolbar-button>
1646
- <kendo-toolbar-button kendoSpreadsheetDeleteRowButton></kendo-toolbar-button>
1647
- </kendo-toolbar>
1648
- }
1649
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'format') {
1650
- <kendo-toolbar
1651
- [attr.aria-label]="messageFor('formatTab')"
1652
- fillMode="flat"
1653
- class="k-spreadsheet-toolbar"
1654
- [overflow]="overflow">
1655
- <kendo-toolbar-button kendoSpreadsheetDecreaseDecimal></kendo-toolbar-button>
1656
- <kendo-toolbar-button kendoSpreadsheetIncreaseDecimal></kendo-toolbar-button>
1657
- </kendo-toolbar>
1658
- }
1659
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'view') {
1660
- <kendo-toolbar
1661
- [attr.aria-label]="messageFor('view')"
1662
- fillMode="flat"
1663
- class="k-spreadsheet-toolbar"
1664
- [overflow]="overflow">
1665
- <kendo-toolbar-dropdownbutton kendoSpreadsheetMerge></kendo-toolbar-dropdownbutton>
1666
- <kendo-toolbar-separator></kendo-toolbar-separator>
1667
- <kendo-toolbar-button kendoSpreadsheetGridLines></kendo-toolbar-button>
1668
- </kendo-toolbar>
1669
- }
1670
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'data') {
1671
- <kendo-toolbar
1672
- [attr.aria-label]="messageFor('dataTab')"
1673
- fillMode="flat"
1674
- class="k-spreadsheet-toolbar"
1675
- [overflow]="overflow">
1676
- <kendo-toolbar-button kendoSpreadsheetDataValidation></kendo-toolbar-button>
1677
- <kendo-toolbar-separator></kendo-toolbar-separator>
1678
- <kendo-toolbar-button kendoSpreadsheetFilter></kendo-toolbar-button>
1679
- <kendo-toolbar-separator></kendo-toolbar-separator>
1680
- <kendo-toolbar-dropdownbutton kendoSpreadsheetSort></kendo-toolbar-dropdownbutton>
1681
- </kendo-toolbar>
1682
- }
1683
- </div>
1684
- <div class="k-spreadsheet-action-bar">
1685
- <div #nameBox kendoSpreadsheetNameBox [spreadsheetWidget]="spreadsheetWidget"></div>
1686
- <div class="k-spreadsheet-formula-bar">
1687
- <span class="k-separator k-separator-vertical"></span>
1688
- <kendo-icon-wrapper
1689
- name="formula-fx"
1690
- [svgIcon]="formulaFxIcon">
1691
- </kendo-icon-wrapper>
1692
- <span class="k-separator k-separator-vertical"></span>
1693
- <div
1694
- #formulaBar
1695
- kendoSpreadsheetFormulaInput
1696
- [formulaListMaxHeight]="formulaListMaxHeight"
1697
- class="k-textbox k-input k-input-md k-input-flat k-rounded-md"></div>
1698
- </div>
1699
- </div>
1700
- <div class="k-spreadsheet-view">
1701
- <div class="k-spreadsheet-fixed-container"></div>
1702
- <div class="k-spreadsheet-scroller">
1703
- <div class="k-spreadsheet-view-size"></div>
1704
- </div>
1705
- <div tabIndex="0" class="k-spreadsheet-clipboard" contentEditable="true"></div>
1706
- <div #formulaCell kendoSpreadsheetFormulaInput class="k-spreadsheet-cell-editor" data-role="formulainput"></div>
1707
- </div>
1708
- <div class="k-spreadsheet-sheets-bar"
1709
- kendoSpreadsheetSheetsBar
1710
- [sheets]="sheetsInfo"
1711
- [sheetDescriptors]="sheets">
1712
- </div>
1713
- <ng-container #dialogContainer></ng-container>
1714
-
1715
- <kendo-contextmenu #contextMenu
1716
- [items]="contextMenuItems"
1717
- (select)="onContextMenuSelect($event)">
1718
- </kendo-contextmenu>
1719
-
1720
- <ng-template #filterMenuTemplate>
1721
- <kendo-spreadsheet-filtermenu-item
1722
- [innerMenuItems]="sortMenuItems"
1723
- (itemClick)="onSortItemClick($event)">
1724
- </kendo-spreadsheet-filtermenu-item>
1725
- <kendo-spreadsheet-filtermenu-item
1726
- [expandable]="true"
1727
- [expanded]="conditionExpanded"
1728
- expanderClass="k-spreadsheet-condition-filter"
1729
- [innerMenuItems]="[{text: messageFor('filterMenuConditionItem')}]"
1730
- (collapse)="onToggle(false, 'condition')"
1731
- (expand)="onToggle(true, 'condition')">
1732
- <ng-template kendoSpreadsheetFilterMenuItemContentTemplate>
1733
- <div class="k-details-content">
1734
- <kendo-dropdownlist
1735
- [data]="filterConditionsList"
1736
- textField="text"
1737
- valueField="comparerType"
1738
- [(value)]="selectedCondition">
1739
- </kendo-dropdownlist>
1740
- @if (selectedCondition?.type === 'string') {
1741
- <kendo-textbox [(value)]="conditionValue"></kendo-textbox>
1742
- } @else if (selectedCondition?.type === 'number') {
1743
- <kendo-numerictextbox [(value)]="conditionValue"></kendo-numerictextbox>
1744
- } @else if (selectedCondition?.type === 'date') {
1745
- <kendo-datepicker [(value)]="conditionValue"></kendo-datepicker>
1746
- }
1747
- </div>
1748
- <div class="k-actions k-actions-stretched k-actions-horizontal">
1749
- <button
1750
- kendoButton
1751
- themeColor="primary"
1752
- (click)="filterApply('condition')">
1753
- {{ messageFor('filterApply') }}
1754
- </button>
1755
- <button
1756
- kendoButton
1757
- (click)="filterClear()">
1758
- {{ messageFor('filterClear') }}
1759
- </button>
1760
- </div>
1761
- </ng-template>
1762
- </kendo-spreadsheet-filtermenu-item>
1763
- <kendo-spreadsheet-filtermenu-item
1764
- [expandable]="true"
1765
- [expanded]="valueExpanded"
1766
- [innerMenuItems]="[{text: messageFor('filterMenuValueItem')}]"
1767
- (collapse)="onToggle(false, 'value')"
1768
- (expand)="onToggle(true, 'value')">
1769
- <ng-template kendoSpreadsheetFilterMenuItemContentTemplate>
1770
- <div class="k-spreadsheet-value-treeview-wrapper">
1771
- <kendo-treeview #treeview
1772
- kendoTreeViewHierarchyBinding
1773
- childrenField="items"
1774
- textField="text"
1775
- [nodes]="rangeFilterValuesList"
1776
- kendoTreeViewExpandable
1777
- [(expandedKeys)]="expandedKeys"
1778
- [filterable]="true"
1779
- [kendoTreeViewCheckable]="{checkOnClick: true}"
1780
- [(checkedKeys)]="checkedKeys"
1781
- checkBy="text"
1782
- [isChecked]="isChecked">
1783
- </kendo-treeview>
1784
- </div>
1785
- <div class="k-actions k-actions-stretched k-actions-horizontal">
1786
- <button
1787
- kendoButton
1788
- themeColor="primary"
1789
- (click)="filterApply('value')">
1790
- {{ messageFor('filterApply') }}
1791
- </button>
1792
- <button
1793
- kendoButton
1794
- (click)="filterClear()">
1795
- {{ messageFor('filterClear') }}
1796
- </button>
1797
- </div>
1798
- </ng-template>
1799
- </kendo-spreadsheet-filtermenu-item>
1800
- </ng-template>
1801
-
1802
- @if (showLicenseWatermark) {
1803
- <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
1804
- }
1805
- `, 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]" }] });
1806
- }
1807
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpreadsheetComponent, decorators: [{
1808
- type: Component,
1809
- args: [{
1810
- exportAs: 'kendo-spreadsheet',
1811
- selector: 'kendo-spreadsheet',
1812
- providers: [
1813
- SpreadsheetLocalizationService,
1814
- SpreadsheetService,
1815
- {
1816
- provide: LocalizationService,
1817
- useExisting: SpreadsheetLocalizationService
1818
- },
1819
- {
1820
- provide: L10N_PREFIX,
1821
- useValue: 'kendo.spreadsheet'
1822
- },
1823
- SpreadsheetToolsService,
1824
- PopupService,
1825
- ErrorHandlingService
1826
- ],
1827
- template: `
1828
- <ng-container
1829
- kendoSpreadsheetLocalizedMessages
1830
- i18n-background="kendo.spreadsheet.background|The title of the tool that changes the text background color."
1831
- background="Background color"
1832
- i18n-color="kendo.spreadsheet.color|The title of the tool that changes the text font color."
1833
- color="Font color"
1834
- i18n-bold="kendo.spreadsheet.bold|The title of the Bold tool."
1835
- bold="Bold"
1836
- i18n-dataValidation="kendo.spreadsheet.dataValidation|The title of the Data Validation tool."
1837
- dataValidation="Data Validation"
1838
- i18n-filter="kendo.spreadsheet.filter|The title of the Filter tool."
1839
- filter="Filter"
1840
- i18n-validationCellRange="kendo.spreadsheet.validationCellRange|The text of the Cell Range label in the data validation dialog."
1841
- validationCellRange="Cell Range"
1842
- i18n-validationCriteria="kendo.spreadsheet.validationCriteria|The text of the Criteria dropdown list label in the data validation dialog."
1843
- validationCriteria="Criteria"
1844
- i18n-validationMinValue="kendo.spreadsheet.validationMinValue|The text of the Min value label in the data validation dialog."
1845
- validationMinValue="Min"
1846
- i18n-validationMaxValue="kendo.spreadsheet.validationMaxValue|The text of the Max value label in the data validation dialog."
1847
- validationMaxValue="Max"
1848
- i18n-validationStartValue="kendo.spreadsheet.validationStartValue|The text of the Start value label in the data validation dialog."
1849
- validationStartValue="Start"
1850
- i18n-validationEndValue="kendo.spreadsheet.validationEndValue|The text of the End value label in the data validation dialog."
1851
- validationEndValue="End"
1852
- i18n-validationValue="kendo.spreadsheet.validationValue|The text of the Value label in the data validation dialog."
1853
- validationValue="Text"
1854
- i18n-validationShowListButtonCheckbox="kendo.spreadsheet.validationShowListButtonCheckbox|The text for the Show list button checkbox label in the data validation dialog."
1855
- validationShowListButtonCheckbox="Display button to show list"
1856
- i18n-validationOnInvalidData="kendo.spreadsheet.validationOnInvalidData|The text for the On invalid data label in the data validation dialog."
1857
- validationOnInvalidData="On invalid data"
1858
- i18n-validationShowDateButtonCheckbox="kendo.spreadsheet.validationShowDateButtonCheckbox|The text for the Show date button checkbox label in the data validation dialog."
1859
- validationShowDateButtonCheckbox="Display button to show Calendar"
1860
- i18n-validationRejectInput="kendo.spreadsheet.validationRejectInput|The text for the Reject input radio button label in the data validation dialog."
1861
- validationRejectInput="Reject input"
1862
- i18n-validationShowWarning="kendo.spreadsheet.validationShowWarning|The text for the Show warning radio button label in the data validation dialog."
1863
- validationShowWarning="Show warning"
1864
- i18n-validationHintTitle="kendo.spreadsheet.validationHintTitle|The text for the Custom hint title input label in the data validation dialog."
1865
- validationHintTitle="Custom hint title"
1866
- i18n-validationHintMessage="kendo.spreadsheet.validationHintMessage|The text for the Custom hint input label in the data validation dialog."
1867
- validationHintMessage="Custom hint"
1868
- i18n-validationShowHint="kendo.spreadsheet.validationShowHint|The text for the Show hint radio button label in the data validation dialog."
1869
- validationShowHint="Show hint"
1870
- i18n-validationIgnoreBlankCheckbox="kendo.spreadsheet.validationIgnoreBlankCheckbox|The text for the Ignore blank checkbox label in the data validation dialog."
1871
- validationIgnoreBlankCheckbox="Ignore blank"
1872
- i18n-validationComparer="kendo.spreadsheet.validationComparer|The text of the Comparer dropdown list label in the data validation dialog."
1873
- validationComparer="Comparer"
1874
- i18n-anyValueValidationCriteria="kendo.spreadsheet.anyValueValidationCriteria|The text of the Any value validation criteria"
1875
- anyValueValidationCriteria="Any value"
1876
- i18n-numberValidationCriteria="kendo.spreadsheet.numberValidationCriteria|The text of the Number validation criteria"
1877
- numberValidationCriteria="Number"
1878
- i18n-textValidationCriteria="kendo.spreadsheet.textValidationCriteria|The text of the Text validation criteria"
1879
- textValidationCriteria="Text"
1880
- i18n-dateValidationCriteria="kendo.spreadsheet.dateValidationCriteria|The text of the Date validation criteria"
1881
- dateValidationCriteria="Date"
1882
- i18n-customFormulaValidationCriteria="kendo.spreadsheet.customFormulaValidationCriteria|The text of the Custom formula validation criteria"
1883
- customFormulaValidationCriteria="Custom Formula"
1884
- i18n-listValidationCriteria="kendo.spreadsheet.listValidationCriteria|The text of the List validation criteria"
1885
- listValidationCriteria="List"
1886
- i18n-greaterThanValidationComparer="kendo.spreadsheet.greaterThanValidationComparer|The text of the greater than validation comparer"
1887
- greaterThanValidationComparer="greater than"
1888
- i18n-lessThanValidationComparer="kendo.spreadsheet.lessThanValidationComparer|The text of the less than validation comparer"
1889
- lessThanValidationComparer="less than"
1890
- i18n-betweenValidationComparer="kendo.spreadsheet.betweenValidationComparer|The text of the between validation comparer"
1891
- betweenValidationComparer="between"
1892
- i18n-notBetweenValidationComparer="kendo.spreadsheet.notBetweenValidationComparer|The text of the not between validation comparer"
1893
- notBetweenValidationComparer="not between"
1894
- i18n-equalToValidationComparer="kendo.spreadsheet.equalToValidationComparer|The text of the equal to validation comparer"
1895
- equalToValidationComparer="equal to"
1896
- i18n-notEqualToValidationComparer="kendo.spreadsheet.notEqualToValidationComparer|The text of the not equal to validation comparer"
1897
- notEqualToValidationComparer="not equal to"
1898
- i18n-greaterThanOrEqualToValidationComparer="kendo.spreadsheet.greaterThanOrEqualToValidationComparer|The text of the greater than on equal to validation comparer"
1899
- greaterThanOrEqualToValidationComparer="greater than or equal to"
1900
- i18n-lessThanOrEqualToValidationComparer="kendo.spreadsheet.lessThanOrEqualToValidationComparer|The text of the less than on equal to validation comparer"
1901
- lessThanOrEqualToValidationComparer="less than or equal to"
1902
- i18n-italic="kendo.spreadsheet.italic|The title of the Italic tool."
1903
- italic="Italic"
1904
- i18n-underline="kendo.spreadsheet.underline|The title of the Underline tool."
1905
- underline="Underline"
1906
- i18n-loadFile="kendo.spreadsheet.loadFile|The title of the Load File tool."
1907
- loadFile="Open..."
1908
- i18n-saveFile="kendo.spreadsheet.saveFile|The title of the Save File tool."
1909
- saveFile="Export..."
1910
- i18n-format="kendo.spreadsheet.format|The text of the Format tool."
1911
- format="Custom format..."
1912
- i18n-fontFamily="kendo.spreadsheet.fontFamily|The text of the Font Family tool."
1913
- fontFamily="Font"
1914
- i18n-fontSize="kendo.spreadsheet.fontSize|The text of the Font Size tool."
1915
- fontSize="Font size"
1916
- i18n-home="kendo.spreadsheet.home|The text of the Home toolbar tab."
1917
- home="Home"
1918
- i18n-file="kendo.spreadsheet.file|The text of the File toolbar tab."
1919
- file="File"
1920
- i18n-insert="kendo.spreadsheet.insert|The text of the Insert toolbar tab."
1921
- insert="Insert"
1922
- i18n-formatTab="kendo.spreadsheet.formatTab|The text of the Format toolbar tab."
1923
- formatTab="Format"
1924
- i18n-dataTab="kendo.spreadsheet.dataTab|The text of the Data toolbar tab."
1925
- dataTab="Data"
1926
- i18n-view="kendo.spreadsheet.view|The text of the View toolbar tab."
1927
- view="View"
1928
- i18n-undo="kendo.spreadsheet.undo|The title of the Undo tool."
1929
- undo="Undo"
1930
- i18n-redo="kendo.spreadsheet.redo|The title of the Redo tool."
1931
- redo="Redo"
1932
- i18n-gridLines="kendo.spreadsheet.gridLines|The title of the Grid Lines tool."
1933
- gridLines="Toggle grid lines"
1934
- i18n-addColumnLeft="kendo.spreadsheet.addColumnLeft|The title of the tool that adds new column before currently selected column."
1935
- addColumnLeft="Add column left"
1936
- i18n-addColumnRight="kendo.spreadsheet.addColumnRight|The title of the tool that adds new column after currently selected column."
1937
- addColumnRight="Add column right"
1938
- i18n-addRowBelow="kendo.spreadsheet.addRowBelow|The title of the tool that adds new row below currently selected row."
1939
- addRowBelow="Add row below"
1940
- i18n-addRowAbove="kendo.spreadsheet.addRowAbove|The title of the tool that adds new row above currently selected row."
1941
- addRowAbove="Add row above"
1942
- i18n-deleteColumn="kendo.spreadsheet.deleteColumn|The title of the tool that deletes a column."
1943
- deleteColumn="Delete column"
1944
- i18n-deleteRow="kendo.spreadsheet.deleteRow|The title of the tool that deletes a row."
1945
- deleteRow="Delete row"
1946
- i18n-wrap="kendo.spreadsheet.wrap|The title of the Text Wrap tool."
1947
- wrap="Text wrap"
1948
- i18n-align="kendo.spreadsheet.align|The title of the Text Align tool."
1949
- align="Align"
1950
- i18n-alignHorizontal="kendo.spreadsheet.alignHorizontal|The title of the Text Align Horizontal tool."
1951
- alignHorizontal="Align horizontally"
1952
- i18n-alignVertical="kendo.spreadsheet.alignVertical|The title of the Text Align Vertical tool."
1953
- alignVertical="Align vertically"
1954
- i18n-alignLeft="kendo.spreadsheet.alignLeft|The title of the Text Align Left tool."
1955
- alignLeft="Align Left"
1956
- i18n-alignCenter="kendo.spreadsheet.alignCenter|The title of the Text Align Center tool."
1957
- alignCenter="Align Center"
1958
- i18n-alignRight="kendo.spreadsheet.alignRight|The title of the Text Align Right tool."
1959
- alignRight="Align Right"
1960
- i18n-alignJustify="kendo.spreadsheet.alignJustify|The title of the Text Align Justify tool."
1961
- alignJustify="Align Justify"
1962
- i18n-alignTop="kendo.spreadsheet.alignTop|The title of the Text Align Top tool."
1963
- alignTop="Align Top"
1964
- i18n-alignMiddle="kendo.spreadsheet.alignMiddle|The title of the Text Align Middle tool."
1965
- alignMiddle="Align Middle"
1966
- i18n-alignBottom="kendo.spreadsheet.alignBottom|The title of the Text Align Bottom tool."
1967
- alignBottom="Align Bottom"
1968
- i18n-merge="kendo.spreadsheet.merge|The title of the Cells Merge tool."
1969
- merge="Merge"
1970
- i18n-mergeAll="kendo.spreadsheet.mergeAll|The title of the Merge all tool."
1971
- mergeAll="Merge all"
1972
- i18n-mergeHorizontally="kendo.spreadsheet.mergeHorizontally|The title of the Merge horizontally tool."
1973
- mergeHorizontally="Merge horizontally"
1974
- i18n-mergeVertically="kendo.spreadsheet.mergeVertically|The title of the Merge vertically tool."
1975
- mergeVertically="Merge vertically"
1976
- i18n-unmerge="kendo.spreadsheet.unmerge|The title of the Unmerge tool."
1977
- unmerge="Unmerge"
1978
- i18n-insertLink="kendo.spreadsheet.insertLink|The title of the tool that inserts a link."
1979
- insertLink="Insert link"
1980
- i18n-decreaseDecimal="kendo.spreadsheet.decreaseDecimal|The title of the tool that decreases decimals."
1981
- decreaseDecimal="Decrease decimal"
1982
- i18n-increaseDecimal="kendo.spreadsheet.increaseDecimal|The title of the tool that increases decimals."
1983
- increaseDecimal="Increase decimal"
1984
- i18n-increaseFontSize="kendo.spreadsheet.increaseFontSize|The title of the tool that increases the cell font size."
1985
- increaseFontSize="Increase font size"
1986
- i18n-decreaseFontSize="kendo.spreadsheet.decreaseFontSize|The title of the tool that decreases the cell font size."
1987
- decreaseFontSize="Decrease font size"
1988
- i18n-dialogApply="kendo.spreadsheet.dialogApply|The text of the **Apply** button in all Spreadsheet dialogs."
1989
- dialogApply="Apply"
1990
- i18n-dialogCancel="kendo.spreadsheet.dialogCancel|The text of the **Cancel** button in all Spreadsheet dialogs."
1991
- dialogCancel="Cancel"
1992
- i18n-dialogDelete="kendo.spreadsheet.dialogDelete|The text of the **Delete** button in the Delete sheet dialog."
1993
- dialogDelete="Delete"
1994
- i18n-dialogRename="kendo.spreadsheet.dialogRename|The text of the **Rename** button in the Rename sheet dialog."
1995
- dialogRename="Rename"
1996
- i18n-dialogInsert="kendo.spreadsheet.dialogInsert|The text of the **Insert** button in all Spreadsheet dialogs."
1997
- dialogInsert="Insert"
1998
- i18n-dialogRemove="kendo.spreadsheet.dialogRemove|The text of the **Remove** button in all Spreadsheet dialogs."
1999
- dialogRemove="Remove"
2000
- i18n-dialogRemoveLink="kendo.spreadsheet.dialogRemoveLink|The text of the **Remove link** button in the Link tool dialog."
2001
- dialogRemoveLink="Remove link"
2002
- i18n-rename="kendo.spreadsheet.rename|The title of the Rename sheet dialog."
2003
- rename="Rename Sheet"
2004
- i18n-delete="kendo.spreadsheet.delete|The title of the Delete sheet dialog."
2005
- delete="Delete Sheet"
2006
- i18n-nameBox="kendo.spreadsheet.nameBox|The title of the Name Box input."
2007
- nameBox="Name Box"
2008
- i18n-formulaInput="kendo.spreadsheet.formulaInput|The title of the Formula input."
2009
- formulaInput="Formula Input"
2010
- i18n-addSheet="kendo.spreadsheet.addSheet|The title of the Add new sheet button."
2011
- addSheet="Add New Sheet"
2012
- i18n-sheetsMenu="kendo.spreadsheet.sheetsMenu|The title of the Sheets menu button."
2013
- sheetsMenu="All Sheets"
2014
- i18n-openUnsupported="kendo.spreadsheet.openUnsupported|The content of the dialog that warns about an unsupported file type."
2015
- openUnsupported="Unsupported format. Please select an .xlsx file."
2016
- i18n-modifyMerged="kendo.spreadsheet.modifyMerged|The content of the dialog that warns about modifying a merged cell."
2017
- modifyMerged="Cannot change part of a merged cell."
2018
- i18n-cannotModifyDisabled="kendo.spreadsheet.cannotModifyDisabled|The content of the dialog that warns about modifying a disabled cell."
2019
- cannotModifyDisabled="Cannot modify disabled cells."
2020
- i18n-dialogOk="kendo.spreadsheet.dialogOk|The text of the **OK** dialog button."
2021
- dialogOk="OK"
2022
- i18n-dialogError="kendo.spreadsheet.dialogError|The title of an error dialog."
2023
- dialogError="Error"
2024
- i18n-duplicateSheetName="kendo.spreadsheet.duplicateSheetName|The content of the dialog that warns about duplicated sheet name."
2025
- duplicateSheetName="There is an existing sheet with this name. Please enter another name."
2026
- i18n-copy="kendo.spreadsheet.copy|The Copy command text."
2027
- copy="Copy"
2028
- i18n-cut="kendo.spreadsheet.cut|The Cut command text."
2029
- cut="Cut"
2030
- i18n-paste="kendo.spreadsheet.paste|The Paste command text."
2031
- paste="Paste (use Ctrl/⌘ + V)"
2032
- i18n-hideRow="kendo.spreadsheet.hideRow|The Hide row command text."
2033
- hideRow="Hide"
2034
- i18n-unhideRow="kendo.spreadsheet.unhideRow|The Unhide row command text."
2035
- unhideRow="Unhide"
2036
- i18n-hideColumn="kendo.spreadsheet.hideColumn|The Hide column command text."
2037
- hideColumn="Hide"
2038
- i18n-unhideColumn="kendo.spreadsheet.unhideColumn|The Unhide column command text."
2039
- unhideColumn="Unhide"
2040
- i18n-sheetDelete="kendo.spreadsheet.sheetDelete|The text of the Sheet menu Delete option."
2041
- sheetDelete="Delete"
2042
- i18n-sheetRename="kendo.spreadsheet.sheetRename|The text of the Sheet menu Rename option."
2043
- sheetRename="Rename"
2044
- i18n-sheetDuplicate="kendo.spreadsheet.sheetDuplicate|The text of the Sheet menu Duplicate option."
2045
- sheetDuplicate="Duplicate"
2046
- i18n-sheetHide="kendo.spreadsheet.sheetHide|The text of the Sheet menu Hide option."
2047
- sheetHide="Hide"
2048
- i18n-sheetMoveLeft="kendo.spreadsheet.sheetMoveLeft|The text of the Sheet menu Move Left option."
2049
- sheetMoveLeft="Move Left"
2050
- i18n-sheetMoveRight="kendo.spreadsheet.sheetMoveRight|The text of the Sheet menu Move Right option."
2051
- sheetMoveRight="Move Right"
2052
- i18n-invalidNameError="kendo.spreadsheet.invalidNameError|The content of the dialog that warns about invalid name input."
2053
- invalidNameError="{{ 'Invalid name: {inputValue}' }}"
2054
- i18n-cantSortMixedCells="kendo.spreadsheet.cantSortMixedCells|The content of the dialog that warns about sorting range containing cells of mixed shapes."
2055
- cantSortMixedCells="Cannot sort range containing cells of mixed shapes"
2056
- i18n-cantSortNullRef="kendo.spreadsheet.cantSortNullRef|The content of the dialog that warns about sorting incorrect (empty) range."
2057
- cantSortNullRef="Cannot sort empty selection"
2058
- i18n-cantSortMultipleSelection="kendo.spreadsheet.cantSortMultipleSelection|The content of the dialog that warns about sorting multiple range selection."
2059
- cantSortMultipleSelection="Cannot sort multiple selection"
2060
- i18n-filterApply="kendo.spreadsheet.filterApply|The text of the **Apply** button in the filter menu."
2061
- filterApply="Apply"
2062
- i18n-filterClear="kendo.spreadsheet.filterClear|The text of the **Clear** button in the filter menu."
2063
- filterClear="Clear"
2064
- i18n-filterMenuAll="kendo.spreadsheet.filterMenuAll|The text of the **All** grouping item in the filter menu."
2065
- filterMenuAll="All"
2066
- i18n-blankValues="kendo.spreadsheet.blankValues|The text for the blank (empty) values."
2067
- blankValues="Blank"
2068
- i18n-filterNoneOperator="kendo.spreadsheet.filterNoneOperator|The text for the **none** filter operator."
2069
- filterNoneOperator="None"
2070
- i18n-filterContainsOperator="kendo.spreadsheet.filterContainsOperator|The text of the **contains** filter operator"
2071
- filterContainsOperator="Text contains"
2072
- i18n-filterNotContainsOperator="kendo.spreadsheet.filterNotContainsOperator|The text of the **does not contain** filter operator"
2073
- filterNotContainsOperator="Text does not contain"
2074
- i18n-filterStartsWithOperator="kendo.spreadsheet.filterStartsWithOperator|The text of the **starts with** filter operator"
2075
- filterStartsWithOperator="Text starts with"
2076
- i18n-filterEndsWithOperator="kendo.spreadsheet.filterEndsWithOperator|The text of the **ends with** filter operator"
2077
- filterEndsWithOperator="Text ends with"
2078
- i18n-filterMatchesOperator="kendo.spreadsheet.filterMatchesOperator|The text of the **matches** filter operator"
2079
- filterMatchesOperator="Text matches"
2080
- i18n-filterNotMatchesOperator="kendo.spreadsheet.filterNotMatchesOperator|The text of the **does not match** filter operator"
2081
- filterNotMatchesOperator="Text does not match"
2082
- i18n-filterDateEqOperator="kendo.spreadsheet.filterDateEqOperator|The text of the **Date is** filter operator"
2083
- filterDateEqOperator="Date is"
2084
- i18n-filterDateNotEqOperator="kendo.spreadsheet.filterDateNotEqOperator|The text of the **Date is not** filter operator"
2085
- filterDateNotEqOperator="Date is not"
2086
- i18n-filterBeforeOperator="kendo.spreadsheet.filterBeforeOperator|The text of the **Date is before** filter operator"
2087
- filterBeforeOperator="Date is before"
2088
- i18n-filterAfterOperator="kendo.spreadsheet.filterAfterOperator|The text of the **Date is after** filter operator"
2089
- filterAfterOperator="Date is after"
2090
- i18n-filterEqOperator="kendo.spreadsheet.filterEqOperator|Sets the text for the **Equal (Is equal to)** filter operator."
2091
- filterEqOperator="Is equal to"
2092
- i18n-filterNotEqOperator="kendo.spreadsheet.filterNotEqOperator|Sets the text for the **Not equal (Is not equal to)** filter operator."
2093
- filterNotEqOperator="Is not equal to"
2094
- i18n-filterGteOperator="kendo.spreadsheet.filterGteOperator|The text of the **greater than or equal to** filter operator"
2095
- filterGteOperator="Is greater than or equal to"
2096
- i18n-filterGtOperator="kendo.spreadsheet.filterGtOperator|The text of the **greater than** filter operator"
2097
- filterGtOperator="Is greater than"
2098
- i18n-filterLteOperator="kendo.spreadsheet.filterLteOperator|The text of the **less than or equal to** filter operator"
2099
- filterLteOperator="Is less than or equal to"
2100
- i18n-filterLtOperator="kendo.spreadsheet.filterLtOperator|The text of the **less than** filter operator"
2101
- filterLtOperator="Is less than"
2102
- i18n-filterMenuConditionItem="kendo.spreadsheet.filterMenuConditionItem|The text of the **Filter by condition** menu item."
2103
- filterMenuConditionItem="Filter by condition"
2104
- i18n-filterMenuValueItem="kendo.spreadsheet.filterMenuValueItem|The text of the **Filter by value** menu item."
2105
- filterMenuValueItem="Filter by value"
2106
- i18n-sort="kendo.spreadsheet.sort|The title of the Sort ToolBar tool."
2107
- sort="Sort"
2108
- i18n-sortAsc="kendo.spreadsheet.sortAsc|The text of the **Sort range A to Z** option."
2109
- sortAsc="Sort range A to Z"
2110
- i18n-sortDesc="kendo.spreadsheet.sortDesc|The text of the **Sort range Z to A** option."
2111
- sortDesc="Sort range Z to A"
2112
- i18n-unsort="kendo.spreadsheet.unsort|The text of the **Unsort** option."
2113
- unsort="Unsort">
2114
- </ng-container>
2115
- <div class="k-spreadsheet-header">
2116
- <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
2117
- @for (item of menuItems; track item) {
2118
- <kendo-menu-item [text]="item.text" [cssClass]="item.cssClass"></kendo-menu-item>
2119
- }
2120
- </kendo-menu>
2121
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'file') {
2122
- <kendo-toolbar
2123
- [attr.aria-label]="messageFor('file')"
2124
- fillMode="flat"
2125
- class="k-spreadsheet-toolbar"
2126
- [overflow]="overflow">
2127
- <kendo-spreadsheet-load-file-tool></kendo-spreadsheet-load-file-tool>
2128
- <kendo-toolbar-button kendoSpreadsheetSaveFile></kendo-toolbar-button>
2129
- </kendo-toolbar>
2130
- }
2131
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'home') {
2132
- <kendo-toolbar
2133
- [attr.aria-label]="messageFor('home')"
2134
- class="k-spreadsheet-toolbar"
2135
- fillMode="flat"
2136
- [overflow]="overflow">
2137
- <kendo-toolbar-button kendoSpreadsheetUndo></kendo-toolbar-button>
2138
- <kendo-toolbar-button kendoSpreadsheetRedo></kendo-toolbar-button>
2139
- <kendo-toolbar-separator></kendo-toolbar-separator>
2140
- <kendo-toolbar-dropdownlist kendoSpreadsheetFontFamily></kendo-toolbar-dropdownlist>
2141
- <kendo-toolbar-dropdownlist kendoSpreadsheetFontSize></kendo-toolbar-dropdownlist>
2142
- <kendo-toolbar-buttongroup fillMode="flat">
2143
- <kendo-toolbar-button kendoSpreadsheetIncreaseFontSize></kendo-toolbar-button>
2144
- <kendo-toolbar-button kendoSpreadsheetDecreaseFontSize></kendo-toolbar-button>
2145
- </kendo-toolbar-buttongroup>
2146
- <kendo-toolbar-separator></kendo-toolbar-separator>
2147
- <kendo-toolbar-buttongroup fillMode="flat">
2148
- <kendo-toolbar-button kendoSpreadsheetBold></kendo-toolbar-button>
2149
- <kendo-toolbar-button kendoSpreadsheetItalic></kendo-toolbar-button>
2150
- <kendo-toolbar-button kendoSpreadsheetUnderline></kendo-toolbar-button>
2151
- </kendo-toolbar-buttongroup>
2152
- <kendo-spreadsheet-forecolor-tool></kendo-spreadsheet-forecolor-tool>
2153
- <kendo-toolbar-separator></kendo-toolbar-separator>
2154
- <kendo-spreadsheet-backcolor-tool></kendo-spreadsheet-backcolor-tool>
2155
- <kendo-toolbar-separator></kendo-toolbar-separator>
2156
- <kendo-toolbar-dropdownbutton kendoSpreadsheetHorizontalTextAlign></kendo-toolbar-dropdownbutton>
2157
- <kendo-toolbar-dropdownbutton kendoSpreadsheetVerticalTextAlign></kendo-toolbar-dropdownbutton>
2158
- <kendo-toolbar-button kendoSpreadsheetTextWrap></kendo-toolbar-button>
2159
- <kendo-toolbar-separator></kendo-toolbar-separator>
2160
- <kendo-toolbar-dropdownbutton kendoSpreadsheetFormat></kendo-toolbar-dropdownbutton>
2161
- </kendo-toolbar>
2162
- }
2163
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'insert') {
2164
- <kendo-toolbar
2165
- [attr.aria-label]="messageFor('insert')"
2166
- fillMode="flat"
2167
- class="k-spreadsheet-toolbar"
2168
- [overflow]="overflow">
2169
- <kendo-toolbar-button kendoSpreadsheetInsertLink></kendo-toolbar-button>
2170
- <kendo-toolbar-separator></kendo-toolbar-separator>
2171
- <kendo-toolbar-button kendoSpreadsheetAddColumnLeftButton></kendo-toolbar-button>
2172
- <kendo-toolbar-button kendoSpreadsheetAddColumnRightButton></kendo-toolbar-button>
2173
- <kendo-toolbar-button kendoSpreadsheetAddRowBelowButton></kendo-toolbar-button>
2174
- <kendo-toolbar-button kendoSpreadsheetAddRowAboveButton></kendo-toolbar-button>
2175
- <kendo-toolbar-separator></kendo-toolbar-separator>
2176
- <kendo-toolbar-button kendoSpreadsheetDeleteColumnButton></kendo-toolbar-button>
2177
- <kendo-toolbar-button kendoSpreadsheetDeleteRowButton></kendo-toolbar-button>
2178
- </kendo-toolbar>
2179
- }
2180
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'format') {
2181
- <kendo-toolbar
2182
- [attr.aria-label]="messageFor('formatTab')"
2183
- fillMode="flat"
2184
- class="k-spreadsheet-toolbar"
2185
- [overflow]="overflow">
2186
- <kendo-toolbar-button kendoSpreadsheetDecreaseDecimal></kendo-toolbar-button>
2187
- <kendo-toolbar-button kendoSpreadsheetIncreaseDecimal></kendo-toolbar-button>
2188
- </kendo-toolbar>
2189
- }
2190
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'view') {
2191
- <kendo-toolbar
2192
- [attr.aria-label]="messageFor('view')"
2193
- fillMode="flat"
2194
- class="k-spreadsheet-toolbar"
2195
- [overflow]="overflow">
2196
- <kendo-toolbar-dropdownbutton kendoSpreadsheetMerge></kendo-toolbar-dropdownbutton>
2197
- <kendo-toolbar-separator></kendo-toolbar-separator>
2198
- <kendo-toolbar-button kendoSpreadsheetGridLines></kendo-toolbar-button>
2199
- </kendo-toolbar>
2200
- }
2201
- @if (selectedMenuItem?.active && selectedMenuItem.id === 'data') {
2202
- <kendo-toolbar
2203
- [attr.aria-label]="messageFor('dataTab')"
2204
- fillMode="flat"
2205
- class="k-spreadsheet-toolbar"
2206
- [overflow]="overflow">
2207
- <kendo-toolbar-button kendoSpreadsheetDataValidation></kendo-toolbar-button>
2208
- <kendo-toolbar-separator></kendo-toolbar-separator>
2209
- <kendo-toolbar-button kendoSpreadsheetFilter></kendo-toolbar-button>
2210
- <kendo-toolbar-separator></kendo-toolbar-separator>
2211
- <kendo-toolbar-dropdownbutton kendoSpreadsheetSort></kendo-toolbar-dropdownbutton>
2212
- </kendo-toolbar>
2213
- }
2214
- </div>
2215
- <div class="k-spreadsheet-action-bar">
2216
- <div #nameBox kendoSpreadsheetNameBox [spreadsheetWidget]="spreadsheetWidget"></div>
2217
- <div class="k-spreadsheet-formula-bar">
2218
- <span class="k-separator k-separator-vertical"></span>
2219
- <kendo-icon-wrapper
2220
- name="formula-fx"
2221
- [svgIcon]="formulaFxIcon">
2222
- </kendo-icon-wrapper>
2223
- <span class="k-separator k-separator-vertical"></span>
2224
- <div
2225
- #formulaBar
2226
- kendoSpreadsheetFormulaInput
2227
- [formulaListMaxHeight]="formulaListMaxHeight"
2228
- class="k-textbox k-input k-input-md k-input-flat k-rounded-md"></div>
2229
- </div>
2230
- </div>
2231
- <div class="k-spreadsheet-view">
2232
- <div class="k-spreadsheet-fixed-container"></div>
2233
- <div class="k-spreadsheet-scroller">
2234
- <div class="k-spreadsheet-view-size"></div>
2235
- </div>
2236
- <div tabIndex="0" class="k-spreadsheet-clipboard" contentEditable="true"></div>
2237
- <div #formulaCell kendoSpreadsheetFormulaInput class="k-spreadsheet-cell-editor" data-role="formulainput"></div>
2238
- </div>
2239
- <div class="k-spreadsheet-sheets-bar"
2240
- kendoSpreadsheetSheetsBar
2241
- [sheets]="sheetsInfo"
2242
- [sheetDescriptors]="sheets">
2243
- </div>
2244
- <ng-container #dialogContainer></ng-container>
2245
-
2246
- <kendo-contextmenu #contextMenu
2247
- [items]="contextMenuItems"
2248
- (select)="onContextMenuSelect($event)">
2249
- </kendo-contextmenu>
2250
-
2251
- <ng-template #filterMenuTemplate>
2252
- <kendo-spreadsheet-filtermenu-item
2253
- [innerMenuItems]="sortMenuItems"
2254
- (itemClick)="onSortItemClick($event)">
2255
- </kendo-spreadsheet-filtermenu-item>
2256
- <kendo-spreadsheet-filtermenu-item
2257
- [expandable]="true"
2258
- [expanded]="conditionExpanded"
2259
- expanderClass="k-spreadsheet-condition-filter"
2260
- [innerMenuItems]="[{text: messageFor('filterMenuConditionItem')}]"
2261
- (collapse)="onToggle(false, 'condition')"
2262
- (expand)="onToggle(true, 'condition')">
2263
- <ng-template kendoSpreadsheetFilterMenuItemContentTemplate>
2264
- <div class="k-details-content">
2265
- <kendo-dropdownlist
2266
- [data]="filterConditionsList"
2267
- textField="text"
2268
- valueField="comparerType"
2269
- [(value)]="selectedCondition">
2270
- </kendo-dropdownlist>
2271
- @if (selectedCondition?.type === 'string') {
2272
- <kendo-textbox [(value)]="conditionValue"></kendo-textbox>
2273
- } @else if (selectedCondition?.type === 'number') {
2274
- <kendo-numerictextbox [(value)]="conditionValue"></kendo-numerictextbox>
2275
- } @else if (selectedCondition?.type === 'date') {
2276
- <kendo-datepicker [(value)]="conditionValue"></kendo-datepicker>
2277
- }
2278
- </div>
2279
- <div class="k-actions k-actions-stretched k-actions-horizontal">
2280
- <button
2281
- kendoButton
2282
- themeColor="primary"
2283
- (click)="filterApply('condition')">
2284
- {{ messageFor('filterApply') }}
2285
- </button>
2286
- <button
2287
- kendoButton
2288
- (click)="filterClear()">
2289
- {{ messageFor('filterClear') }}
2290
- </button>
2291
- </div>
2292
- </ng-template>
2293
- </kendo-spreadsheet-filtermenu-item>
2294
- <kendo-spreadsheet-filtermenu-item
2295
- [expandable]="true"
2296
- [expanded]="valueExpanded"
2297
- [innerMenuItems]="[{text: messageFor('filterMenuValueItem')}]"
2298
- (collapse)="onToggle(false, 'value')"
2299
- (expand)="onToggle(true, 'value')">
2300
- <ng-template kendoSpreadsheetFilterMenuItemContentTemplate>
2301
- <div class="k-spreadsheet-value-treeview-wrapper">
2302
- <kendo-treeview #treeview
2303
- kendoTreeViewHierarchyBinding
2304
- childrenField="items"
2305
- textField="text"
2306
- [nodes]="rangeFilterValuesList"
2307
- kendoTreeViewExpandable
2308
- [(expandedKeys)]="expandedKeys"
2309
- [filterable]="true"
2310
- [kendoTreeViewCheckable]="{checkOnClick: true}"
2311
- [(checkedKeys)]="checkedKeys"
2312
- checkBy="text"
2313
- [isChecked]="isChecked">
2314
- </kendo-treeview>
2315
- </div>
2316
- <div class="k-actions k-actions-stretched k-actions-horizontal">
2317
- <button
2318
- kendoButton
2319
- themeColor="primary"
2320
- (click)="filterApply('value')">
2321
- {{ messageFor('filterApply') }}
2322
- </button>
2323
- <button
2324
- kendoButton
2325
- (click)="filterClear()">
2326
- {{ messageFor('filterClear') }}
2327
- </button>
2328
- </div>
2329
- </ng-template>
2330
- </kendo-spreadsheet-filtermenu-item>
2331
- </ng-template>
2332
-
2333
- @if (showLicenseWatermark) {
2334
- <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
2335
- }
2336
- `,
2337
- standalone: true,
2338
- 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]
2339
- }]
2340
- }], 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: [{
2341
- type: ViewChild,
2342
- args: ['formulaBar', { read: FormulaInputDirective }]
2343
- }], formulaCellInputRef: [{
2344
- type: ViewChild,
2345
- args: ['formulaCell', { read: FormulaInputDirective }]
2346
- }], nameBoxRef: [{
2347
- type: ViewChild,
2348
- args: ['nameBox']
2349
- }], dialogContainer: [{
2350
- type: ViewChild,
2351
- args: ['dialogContainer', { read: ViewContainerRef }]
2352
- }], contextMenu: [{
2353
- type: ViewChild,
2354
- args: ['contextMenu']
2355
- }], filterMenuTemplate: [{
2356
- type: ViewChild,
2357
- args: ['filterMenuTemplate']
2358
- }], hostClass: [{
2359
- type: HostBinding,
2360
- args: ['class.k-spreadsheet']
2361
- }], role: [{
2362
- type: HostBinding,
2363
- args: ['attr.role']
2364
- }], menuItems: [{
2365
- type: Input
2366
- }], overflow: [{
2367
- type: Input
2368
- }], formulaListMaxHeight: [{
2369
- type: Input
2370
- }], activeSheet: [{
2371
- type: Input
2372
- }], sheets: [{
2373
- type: Input
2374
- }], columns: [{
2375
- type: Input
2376
- }], columnWidth: [{
2377
- type: Input
2378
- }], defaultCellStyle: [{
2379
- type: Input
2380
- }], headerHeight: [{
2381
- type: Input
2382
- }], headerWidth: [{
2383
- type: Input
2384
- }], rowHeight: [{
2385
- type: Input
2386
- }], rows: [{
2387
- type: Input
2388
- }], cellEditors: [{
2389
- type: Input
2390
- }], images: [{
2391
- type: Input
2392
- }], excel: [{
2393
- type: Input
2394
- }], change: [{
2395
- type: Output
2396
- }], formatChange: [{
2397
- type: Output
2398
- }], selectionChange: [{
2399
- type: Output
2400
- }], excelExport: [{
2401
- type: Output
2402
- }], excelImport: [{
2403
- type: Output
2404
- }], activeSheetChange: [{
2405
- type: Output
2406
- }], clipboard: [{
2407
- type: Output
2408
- }] } });