@progress/kendo-angular-spreadsheet 14.3.0-develop.1 → 14.3.0-develop.11

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.
@@ -8,7 +8,7 @@ import { validatePackage } from '@progress/kendo-licensing';
8
8
  import { SpreadsheetWidget } from '@progress/kendo-spreadsheet-common';
9
9
  import * as i1$4 from '@progress/kendo-angular-intl';
10
10
  import { localeData, IntlModule } from '@progress/kendo-angular-intl';
11
- import { formulaFxIcon, trashIcon, copyIcon, pencilIcon, arrowRightIcon, arrowLeftIcon, alignCenterIcon, alignJustifyIcon, alignLeftIcon, alignRightIcon, alignTopIcon, alignMiddleIcon, alignBottomIcon, dropletIcon, boldIcon, foregroundColorIcon, italicIcon, arrowRotateCwIcon, underlineIcon, arrowRotateCcwIcon, textWrapIcon, tableColumnInsertLeftIcon, tableColumnInsertRightIcon, tableRowInsertAboveIcon, tableRowInsertBelowIcon, tableRowDeleteIcon, tableColumnDeleteIcon, bordersNoneIcon, folderOpenIcon, downloadIcon, customFormatIcon, fontSizeIcon, fontFamilyIcon, cellsMergeIcon, cellsMergeHorizontallyIcon, cellsMergeVerticallyIcon, tableUnmergeIcon, linkIcon, fontGrowIcon, fontShrinkIcon, decimalDecreaseIcon, decimalIncreaseIcon, cutIcon, clipboardIcon, eyeSlashIcon, eyeIcon, plusIcon, menuIcon, caretAltDownIcon, caretAltLeftIcon, caretAltRightIcon } from '@progress/kendo-svg-icons';
11
+ import { formulaFxIcon, trashIcon, copyIcon, pencilIcon, eyeSlashIcon, arrowRightIcon, arrowLeftIcon, alignCenterIcon, alignJustifyIcon, alignLeftIcon, alignRightIcon, alignTopIcon, alignMiddleIcon, alignBottomIcon, dropletIcon, boldIcon, foregroundColorIcon, italicIcon, arrowRotateCwIcon, underlineIcon, arrowRotateCcwIcon, textWrapIcon, tableColumnInsertLeftIcon, tableColumnInsertRightIcon, tableRowInsertAboveIcon, tableRowInsertBelowIcon, tableRowDeleteIcon, tableColumnDeleteIcon, bordersNoneIcon, folderOpenIcon, downloadIcon, customFormatIcon, fontSizeIcon, fontFamilyIcon, cellsMergeIcon, cellsMergeHorizontallyIcon, cellsMergeVerticallyIcon, tableUnmergeIcon, linkIcon, fontGrowIcon, fontShrinkIcon, decimalDecreaseIcon, decimalIncreaseIcon, cutIcon, clipboardIcon, eyeIcon, plusIcon, menuIcon, caretAltDownIcon, caretAltLeftIcon, caretAltRightIcon } from '@progress/kendo-svg-icons';
12
12
  import { Subject, Subscription } from 'rxjs';
13
13
  import * as i2 from '@progress/kendo-angular-l10n';
14
14
  import { LocalizationService, L10N_PREFIX, RTL, ComponentMessages } from '@progress/kendo-angular-l10n';
@@ -47,8 +47,8 @@ const packageMetadata = {
47
47
  name: '@progress/kendo-angular-spreadsheet',
48
48
  productName: 'Kendo UI for Angular',
49
49
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
50
- publishDate: 1701695065,
51
- version: '14.3.0-develop.1',
50
+ publishDate: 1702311309,
51
+ version: '14.3.0-develop.11',
52
52
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning',
53
53
  };
54
54
 
@@ -59,6 +59,7 @@ let spreadsheetCounter = 0;
59
59
  class SpreadsheetService {
60
60
  constructor() {
61
61
  this.sheetsChanged = new Subject();
62
+ this.onSheetsBarFocus = new Subject();
62
63
  this.activeSheetChanged = new Subject();
63
64
  this.selectionChanged = new Subject();
64
65
  spreadsheetCounter++;
@@ -188,10 +189,15 @@ const mapToSheetDescriptor = (sheetsArray) => {
188
189
  name: sheet.name(),
189
190
  rows: sheet._rows,
190
191
  selection: sheet.selection(),
191
- showGridLines: sheet.showGridLines
192
+ showGridLines: sheet.showGridLines,
193
+ state: sheet.state()
192
194
  };
193
195
  });
194
196
  };
197
+ /**
198
+ * @hidden
199
+ */
200
+ const replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`\{\\s*${name}\\s*\}`, 'g'), value);
195
201
 
196
202
  /**
197
203
  * @hidden
@@ -209,10 +215,12 @@ class FormulaListComponent {
209
215
  }
210
216
  }
211
217
  FormulaListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormulaListComponent, deps: [{ token: i0.ElementRef }, { token: SpreadsheetService }], target: i0.ɵɵFactoryTarget.Component });
212
- FormulaListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FormulaListComponent, selector: "kendo-spreadsheet-formula-list", inputs: { data: "data", itemClick: "itemClick" }, host: { properties: { "attr.id": "this.id" } }, ngImport: i0, template: `
218
+ FormulaListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FormulaListComponent, selector: "kendo-spreadsheet-formula-list", inputs: { maxHeight: "maxHeight", data: "data", itemClick: "itemClick" }, host: { properties: { "attr.id": "this.id" } }, ngImport: i0, template: `
213
219
  <ul #ulRef
214
220
  class="k-spreadsheet-formula-list k-list-ul k-list-md k-group k-reset"
215
221
  role="menu"
222
+ [style.overflowY]="'auto'"
223
+ [style.maxHeight]="maxHeight"
216
224
  [kendoEventsOutsideAngular]="{mousedown: handleMouseDown}">
217
225
  <li *ngFor="let item of data"
218
226
  (click)="itemClick(item.text)"
@@ -234,6 +242,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
234
242
  <ul #ulRef
235
243
  class="k-spreadsheet-formula-list k-list-ul k-list-md k-group k-reset"
236
244
  role="menu"
245
+ [style.overflowY]="'auto'"
246
+ [style.maxHeight]="maxHeight"
237
247
  [kendoEventsOutsideAngular]="{mousedown: handleMouseDown}">
238
248
  <li *ngFor="let item of data"
239
249
  (click)="itemClick(item.text)"
@@ -251,6 +261,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
251
261
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: SpreadsheetService }]; }, propDecorators: { id: [{
252
262
  type: HostBinding,
253
263
  args: ['attr.id']
264
+ }], maxHeight: [{
265
+ type: Input
254
266
  }], data: [{
255
267
  type: Input
256
268
  }], itemClick: [{
@@ -292,6 +304,23 @@ class FormulaInputDirective {
292
304
  }
293
305
  if (next) {
294
306
  next.classList.add('k-focus');
307
+ const { offsetTop, offsetHeight, parentElement } = next;
308
+ if (dir > 0) {
309
+ if (offsetTop + offsetHeight >= parentElement.offsetHeight + parentElement.scrollTop) {
310
+ parentElement.scrollTop = Math.min(parentElement.scrollTop + offsetHeight, parentElement.scrollHeight - parentElement.offsetHeight);
311
+ }
312
+ if (next === items[0]) {
313
+ next.scrollIntoView();
314
+ }
315
+ }
316
+ else {
317
+ if (offsetTop <= parentElement.scrollTop) {
318
+ parentElement.scrollTop = Math.max(parentElement.scrollTop - offsetHeight, 0);
319
+ }
320
+ if (next === items[items.length - 1]) {
321
+ next.scrollIntoView();
322
+ }
323
+ }
295
324
  }
296
325
  };
297
326
  }
@@ -356,6 +385,7 @@ class FormulaInputDirective {
356
385
  this.list = list;
357
386
  list.data = this.data;
358
387
  list.itemClick = this.handler;
388
+ list.maxHeight = this.formulaListMaxHeight;
359
389
  this.ariaExpanded = 'true';
360
390
  },
361
391
  close: () => {
@@ -374,7 +404,7 @@ class FormulaInputDirective {
374
404
  }
375
405
  }
376
406
  FormulaInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormulaInputDirective, deps: [{ token: i0.ElementRef }, { token: i1.PopupService }, { token: SpreadsheetService }, { token: SpreadsheetLocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
377
- FormulaInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: FormulaInputDirective, selector: "[kendoSpreadsheetFormulaInput]", host: { properties: { "class.k-spreadsheet-formula-input": "this.hostClasses", "attr.title": "this.title", "attr.role": "this.role", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-controls": "this.ariaControls" } }, ngImport: i0 });
407
+ FormulaInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: FormulaInputDirective, selector: "[kendoSpreadsheetFormulaInput]", inputs: { formulaListMaxHeight: "formulaListMaxHeight" }, host: { properties: { "class.k-spreadsheet-formula-input": "this.hostClasses", "attr.title": "this.title", "attr.role": "this.role", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-controls": "this.ariaControls" } }, ngImport: i0 });
378
408
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormulaInputDirective, decorators: [{
379
409
  type: Directive,
380
410
  args: [{
@@ -398,46 +428,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
398
428
  }], ariaControls: [{
399
429
  type: HostBinding,
400
430
  args: ['attr.aria-controls']
431
+ }], formulaListMaxHeight: [{
432
+ type: Input
401
433
  }] } });
402
434
 
403
435
  /**
404
436
  * @hidden
405
437
  */
406
- const getSheetActions = (index, items) => {
438
+ const getSheetActions = (items, item) => {
439
+ const visibleItems = items.filter(item => item.state === 'visible');
440
+ const itemIndex = item ? visibleItems.findIndex(i => i === item) : 0;
407
441
  return [{
408
- text: 'Delete',
442
+ messageKey: 'sheetDelete',
409
443
  icon: 'trash',
410
444
  svgIcon: trashIcon,
411
445
  commandName: 'delete',
412
446
  dialogButton: 'dialogDelete',
413
- disabled: items.length === 1
414
- },
415
- {
416
- text: 'Duplicate',
447
+ disabled: visibleItems.length === 1
448
+ }, {
449
+ messageKey: 'sheetDuplicate',
417
450
  icon: 'copy',
418
451
  svgIcon: copyIcon,
419
452
  commandName: 'copy'
420
- },
421
- {
422
- text: 'Rename',
453
+ }, {
454
+ messageKey: 'sheetRename',
423
455
  icon: 'pencil',
424
456
  svgIcon: pencilIcon,
425
457
  commandName: 'rename',
426
458
  dialogButton: 'dialogRename'
427
- },
428
- {
429
- text: 'Move Right',
459
+ }, {
460
+ messageKey: 'sheetHide',
461
+ icon: 'eye-slash',
462
+ svgIcon: eyeSlashIcon,
463
+ commandName: 'hide',
464
+ disabled: visibleItems.length === 1
465
+ }, {
466
+ messageKey: 'sheetMoveRight',
430
467
  icon: 'arrow-right',
431
468
  svgIcon: arrowRightIcon,
432
469
  commandName: 'move',
433
- disabled: index === items.length - 1
434
- },
435
- {
436
- text: 'Move Left',
470
+ disabled: visibleItems.length === 1 || itemIndex === visibleItems.length - 1
471
+ }, {
472
+ messageKey: 'sheetMoveLeft',
437
473
  icon: 'arrow-left',
438
474
  svgIcon: arrowLeftIcon,
439
475
  commandName: 'move',
440
- disabled: index === 0
476
+ disabled: visibleItems.length === 1 || itemIndex === 0
441
477
  }];
442
478
  };
443
479
 
@@ -470,10 +506,22 @@ class ErrorHandlingService {
470
506
  this.openDialog(messageData);
471
507
  }
472
508
  openDialog(messageData) {
509
+ let dialogContent;
510
+ if (messageData.name === 'message') {
511
+ const localizationMsg = this.messageFor('invalidNameError');
512
+ let inputValue = messageData.text.split(' ').pop();
513
+ if (messageData.text.startsWith('Parse')) {
514
+ inputValue = inputValue.substring(0, inputValue.length - 1);
515
+ }
516
+ dialogContent = replaceMessagePlaceholder(localizationMsg, 'inputValue', inputValue);
517
+ }
518
+ else {
519
+ dialogContent = this.messageFor(messageData.name);
520
+ }
473
521
  const dialogSettings = {
474
522
  appendTo: this.spreadsheetService.dialogContainer,
475
523
  title: this.messageFor('dialogError'),
476
- content: this.messageFor(messageData.name),
524
+ content: dialogContent,
477
525
  actions: [{
478
526
  text: this.messageFor('dialogOk'),
479
527
  themeColor: 'primary'
@@ -630,7 +678,7 @@ InsertLinkDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
630
678
  </kendo-textbox>
631
679
  </div>
632
680
  </form>
633
- `, isInline: true, components: [{ type: i2$1.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }] });
681
+ `, isInline: true, components: [{ type: i2$1.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { type: i5.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"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }] });
634
682
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InsertLinkDialogComponent, decorators: [{
635
683
  type: Component,
636
684
  args: [{
@@ -1740,7 +1788,7 @@ ActionDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
1740
1788
  </div>
1741
1789
  </div>
1742
1790
  </form>
1743
- `, isInline: true, components: [{ type: i2$1.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1791
+ `, isInline: true, components: [{ type: i2$1.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { type: i5.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"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1744
1792
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActionDialogComponent, decorators: [{
1745
1793
  type: Component,
1746
1794
  args: [{
@@ -1778,14 +1826,23 @@ class SheetsBarComponent {
1778
1826
  this.dialogService = dialogService;
1779
1827
  this.ngZone = ngZone;
1780
1828
  this.hostClasses = true;
1829
+ this.subs = new Subscription();
1781
1830
  this.plusIcon = plusIcon;
1782
1831
  this.menuIcon = menuIcon;
1783
1832
  this.caretAltDownIcon = caretAltDownIcon;
1784
1833
  this.caretAltLeftIcon = caretAltLeftIcon;
1785
1834
  this.caretAltRightIcon = caretAltRightIcon;
1786
1835
  this.selected = false;
1836
+ this.sheetsMenuList = [];
1787
1837
  this.openedDdb = null;
1788
- this.eyeIcon = eyeIcon;
1838
+ this.hiddenStateIcons = {
1839
+ hidden: 'eye-slash',
1840
+ visible: 'eye'
1841
+ };
1842
+ this.hiddenStateSVGIcons = {
1843
+ hidden: eyeSlashIcon,
1844
+ visible: eyeIcon
1845
+ };
1789
1846
  this.onAddClick = () => {
1790
1847
  if (this.spreadsheetService.spreadsheet) {
1791
1848
  this.spreadsheetService.spreadsheet.view.sheetsbar.onAddSelect();
@@ -1807,21 +1864,54 @@ class SheetsBarComponent {
1807
1864
  this.spreadsheetService.spreadsheet.insertSheet({ data: { ...sheetToCopy.toJSON(), name: newName }, index: sheetInfo.index + 1 });
1808
1865
  this.selectSheet(newName);
1809
1866
  },
1810
- move: (sheetInfo, itemText) => {
1811
- const oldIndex = this.spreadsheetService.spreadsheet.sheets().findIndex(sheet => sheet.name() === sheetInfo.text);
1812
- const newIndex = itemText === 'Move Right' ? oldIndex + 1 : oldIndex - 1;
1867
+ move: (sheetInfo, itemKey) => {
1868
+ const isMoveRight = itemKey === 'sheetMoveRight';
1869
+ let oldIndex = -1;
1870
+ let newIndex = -1;
1871
+ const sheets = this.spreadsheetService.spreadsheet.sheets();
1872
+ if (isMoveRight) {
1873
+ for (let i = 0; i < sheets.length; i++) {
1874
+ if (sheets[i].name() === sheetInfo.text) {
1875
+ oldIndex = i;
1876
+ }
1877
+ if (oldIndex > -1 && i > oldIndex && sheets[i]._state() === 'visible') {
1878
+ newIndex = i;
1879
+ break;
1880
+ }
1881
+ }
1882
+ }
1883
+ else {
1884
+ for (let i = sheets.length - 1; i >= 0; i--) {
1885
+ if (sheets[i].name() === sheetInfo.text) {
1886
+ oldIndex = i;
1887
+ }
1888
+ if (oldIndex > -1 && (i < oldIndex) && sheets[i]._state() === 'visible') {
1889
+ newIndex = i;
1890
+ break;
1891
+ }
1892
+ }
1893
+ }
1813
1894
  const sheetsBar = this.spreadsheetService.spreadsheet.view.sheetsbar;
1814
1895
  sheetsBar.onSheetReorderEnd({ oldIndex, newIndex });
1896
+ this.selectSheet(sheetInfo.text);
1897
+ this.notifySheetsChange();
1898
+ },
1899
+ hide: (sheet) => {
1900
+ sheet.state = 'hidden';
1901
+ const sheets = this.spreadsheetService.spreadsheet.sheets();
1902
+ const sheetIndex = sheets.findIndex(s => s.name() === sheet.text);
1903
+ sheets[sheetIndex]._state('hidden');
1904
+ const newSelectedIndex = sheetIndex < sheets.length - 1 ? sheetIndex + 1 : 0;
1905
+ const sheetToSelect = sheets[newSelectedIndex].name();
1906
+ this.selectSheet(sheetToSelect);
1815
1907
  this.notifySheetsChange();
1816
1908
  }
1817
1909
  };
1910
+ this.subs.add(spreadsheetService.onSheetsBarFocus.subscribe(() => ngZone.run(() => this.tabstrip.selectTab(this.sheets.findIndex(sh => sh.text === spreadsheetService.currentActiveSheet)))));
1818
1911
  }
1819
1912
  get activeSheet() {
1820
1913
  return this.spreadsheetService.spreadsheet?.activeSheet()?.name();
1821
1914
  }
1822
- get sheetsMenuList() {
1823
- return this.sheets?.map(sheet => ({ text: sheet.text, icon: 'eye', svgIcon: this.eyeIcon }));
1824
- }
1825
1915
  get tablistId() {
1826
1916
  return this.spreadsheetService.tablistId;
1827
1917
  }
@@ -1837,10 +1927,26 @@ class SheetsBarComponent {
1837
1927
  this.renderer.setAttribute(tablist, 'id', this.tablistId);
1838
1928
  this.tabListSub = this.renderer.listen(tablist, 'keydown', this.onTabListKeyDown.bind(this));
1839
1929
  }
1930
+ ngOnChanges(changes) {
1931
+ if (changes['sheets']) {
1932
+ this.sheetsMenuList = this.sheets?.map(sheet => ({
1933
+ text: sheet.text,
1934
+ icon: this.hiddenStateIcons[sheet.state],
1935
+ svgIcon: this.hiddenStateSVGIcons[sheet.state]
1936
+ }));
1937
+ this.sheets = changes['sheets'].currentValue?.map((sheet, _, items) => ({
1938
+ ...sheet,
1939
+ sheetActions: getSheetActions(items, sheet)
1940
+ .map(item => ({ ...item, text: this.messageFor(item.messageKey) }))
1941
+ }));
1942
+ }
1943
+ ;
1944
+ }
1840
1945
  ngOnDestroy() {
1841
1946
  if (this.tabListSub) {
1842
1947
  this.tabListSub();
1843
1948
  }
1949
+ this.subs.unsubscribe();
1844
1950
  }
1845
1951
  onTabSelect(ev) {
1846
1952
  if (ev.title !== this.activeSheet) {
@@ -1866,11 +1972,13 @@ class SheetsBarComponent {
1866
1972
  this.openDialog(dataItem, sheet);
1867
1973
  }
1868
1974
  else {
1869
- this.actionsCallback[dataItem.commandName](sheet, dataItem.text);
1975
+ this.actionsCallback[dataItem.commandName](sheet, dataItem.messageKey);
1870
1976
  }
1871
1977
  }
1872
1978
  onMenuItemClick(item) {
1873
1979
  const sheet = this.sheets.find(s => s.text === item.text);
1980
+ sheet.state = 'visible';
1981
+ this.spreadsheetService.spreadsheet.sheets().find(sh => sh.name() === sheet.text)._state('visible');
1874
1982
  this.selectSheet(sheet.text);
1875
1983
  }
1876
1984
  messageFor(key) {
@@ -1897,7 +2005,9 @@ class SheetsBarComponent {
1897
2005
  if (event.text === this.messageFor(dataItem.dialogButton)) {
1898
2006
  const sheetsBar = this.spreadsheetService.spreadsheet.view.sheetsbar;
1899
2007
  if (sheetsBar) {
1900
- dataItem.commandName === 'delete' ? sheetsBar.onSheetRemove(sheet.text) : sheetsBar.onSheetRename(dialogContent.value, this.sheets.indexOf(sheet));
2008
+ const allSheets = this.spreadsheetService.spreadsheet.sheets();
2009
+ const sheetIndex = allSheets.findIndex(s => s.name() === sheet.text);
2010
+ dataItem.commandName === 'delete' ? sheetsBar.onSheetRemove(sheet.text) : sheetsBar.onSheetRename(dialogContent.value, sheetIndex);
1901
2011
  this.notifySheetsChange();
1902
2012
  }
1903
2013
  }
@@ -1939,21 +2049,29 @@ class SheetsBarComponent {
1939
2049
  this.ngZone.run(() => {
1940
2050
  const newSheets = this.spreadsheetService.spreadsheet.sheets();
1941
2051
  const sheetDesc = mapToSheetDescriptor(newSheets);
1942
- this.sheets = sheetDesc.map((item, index, items) => ({
1943
- ...item,
1944
- inEdit: false,
1945
- first: index === 0,
1946
- last: index === items.length - 1,
1947
- text: item.name,
1948
- active: (item.name === this.activeSheet) || items.length === 1,
1949
- index,
1950
- sheetActions: getSheetActions(index, items)
2052
+ this.sheets = sheetDesc
2053
+ .flatMap((item, index, items) => item.state === 'visible' ? [{
2054
+ ...item,
2055
+ inEdit: false,
2056
+ first: index === 0,
2057
+ last: index === items.length - 1,
2058
+ text: item.name,
2059
+ active: (item.name === this.activeSheet) || items.length === 1,
2060
+ index,
2061
+ sheetActions: getSheetActions(items, item)
2062
+ .map(item => ({ ...item, text: this.messageFor(item.messageKey) }))
2063
+ }] : []);
2064
+ this.sheetsMenuList = this.sheets?.map(sheet => ({
2065
+ text: sheet.text,
2066
+ icon: this.hiddenStateIcons[sheet.state],
2067
+ svgIcon: this.hiddenStateSVGIcons[sheet.state]
1951
2068
  }));
1952
2069
  });
2070
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => this.spreadsheetService.spreadsheet.view.clipboard.focus());
1953
2071
  }
1954
2072
  }
1955
2073
  SheetsBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SheetsBarComponent, deps: [{ token: SpreadsheetService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: SpreadsheetLocalizationService }, { token: i1$1.DialogService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
1956
- SheetsBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SheetsBarComponent, selector: "[kendoSpreadsheetSheetsBar]", inputs: { sheets: "sheets", sheetDescriptors: "sheetDescriptors" }, host: { properties: { "class.k-spreadsheet-sheets-bar": "this.hostClasses" } }, viewQueries: [{ propertyName: "addButton", first: true, predicate: ["addButton"], descendants: true }, { propertyName: "menuButton", first: true, predicate: ["menuButton"], descendants: true }, { propertyName: "tabstrip", first: true, predicate: ["tabstrip"], descendants: true }, { propertyName: "actionDdbs", predicate: ["sheetDdb"], descendants: true }, { propertyName: "actionDdbRefs", predicate: ["sheetDdb"], descendants: true, read: ElementRef }], ngImport: i0, template: `
2074
+ SheetsBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SheetsBarComponent, selector: "[kendoSpreadsheetSheetsBar]", inputs: { sheets: "sheets", sheetDescriptors: "sheetDescriptors" }, host: { properties: { "class.k-spreadsheet-sheets-bar": "this.hostClasses" } }, viewQueries: [{ propertyName: "addButton", first: true, predicate: ["addButton"], descendants: true }, { propertyName: "menuButton", first: true, predicate: ["menuButton"], descendants: true }, { propertyName: "tabstrip", first: true, predicate: ["tabstrip"], descendants: true }, { propertyName: "actionDdbs", predicate: ["sheetDdb"], descendants: true }, { propertyName: "actionDdbRefs", predicate: ["sheetDdb"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
1957
2075
  <button kendoButton #addButton
1958
2076
  [title]="messageFor('addSheet')"
1959
2077
  type="button"
@@ -1981,27 +2099,30 @@ SheetsBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
1981
2099
  [scrollable]="{prevButtonIcon: 'caret-alt-left', prevSVGButtonIcon: caretAltLeftIcon, nextButtonIcon: 'caret-alt-right', nextSVGButtonIcon: caretAltRightIcon}"
1982
2100
  class="k-spreadsheet-sheets k-overflow-hidden"
1983
2101
  (tabSelect)="onTabSelect($event)">
1984
- <kendo-tabstrip-tab *ngFor="let sheet of sheets"
1985
- [title]="sheet.text"
1986
- [selected]="sheet.text === activeSheet">
1987
- <ng-template kendoTabTemplate>
1988
- <span class="k-link">{{sheet.text}}</span>
1989
- <kendo-dropdownbutton #sheetDdb
1990
- fillMode="flat"
1991
- icon="caret-alt-down"
1992
- [svgIcon]="caretAltDownIcon"
1993
- buttonClass="k-menu-button"
1994
- [data]="sheet.sheetActions"
1995
- [buttonAttributes]="{'aria-hidden': 'true', 'tabindex': '-1', role: 'presentation'}"
1996
- (open)="onOpen(sheetDdb)"
1997
- (close)="onClose()"
1998
- (click)="$event.stopPropagation()"
1999
- (itemClick)="onActionClick($event, sheet)">
2000
- </kendo-dropdownbutton>
2001
- </ng-template>
2002
- </kendo-tabstrip-tab>
2102
+ <ng-container *ngFor="let sheet of sheets">
2103
+ <kendo-tabstrip-tab
2104
+ *ngIf="sheet.state === 'visible'"
2105
+ [title]="sheet.text"
2106
+ [selected]="sheet.text === activeSheet">
2107
+ <ng-template kendoTabTemplate>
2108
+ <span class="k-link">{{sheet.text}}</span>
2109
+ <kendo-dropdownbutton #sheetDdb
2110
+ fillMode="flat"
2111
+ icon="caret-alt-down"
2112
+ [svgIcon]="caretAltDownIcon"
2113
+ buttonClass="k-menu-button"
2114
+ [data]="sheet.sheetActions"
2115
+ [buttonAttributes]="{'aria-hidden': 'true', 'tabindex': '-1', role: 'presentation'}"
2116
+ (open)="onOpen(sheetDdb)"
2117
+ (close)="onClose()"
2118
+ (click)="$event.stopPropagation()"
2119
+ (itemClick)="onActionClick($event, sheet)">
2120
+ </kendo-dropdownbutton>
2121
+ </ng-template>
2122
+ </kendo-tabstrip-tab>
2123
+ </ng-container>
2003
2124
  </kendo-tabstrip>
2004
- `, isInline: true, components: [{ type: i4.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: i4.DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { type: i5$1.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { type: i5$1.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }], directives: [{ type: i3.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5$1.TabTemplateDirective, selector: "[kendoTabTemplate]" }] });
2125
+ `, isInline: true, components: [{ type: i4.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: i4.DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { type: i5$1.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { type: i5$1.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }], directives: [{ type: i3.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5$1.TabTemplateDirective, selector: "[kendoTabTemplate]" }] });
2005
2126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SheetsBarComponent, decorators: [{
2006
2127
  type: Component,
2007
2128
  args: [{
@@ -2034,25 +2155,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2034
2155
  [scrollable]="{prevButtonIcon: 'caret-alt-left', prevSVGButtonIcon: caretAltLeftIcon, nextButtonIcon: 'caret-alt-right', nextSVGButtonIcon: caretAltRightIcon}"
2035
2156
  class="k-spreadsheet-sheets k-overflow-hidden"
2036
2157
  (tabSelect)="onTabSelect($event)">
2037
- <kendo-tabstrip-tab *ngFor="let sheet of sheets"
2038
- [title]="sheet.text"
2039
- [selected]="sheet.text === activeSheet">
2040
- <ng-template kendoTabTemplate>
2041
- <span class="k-link">{{sheet.text}}</span>
2042
- <kendo-dropdownbutton #sheetDdb
2043
- fillMode="flat"
2044
- icon="caret-alt-down"
2045
- [svgIcon]="caretAltDownIcon"
2046
- buttonClass="k-menu-button"
2047
- [data]="sheet.sheetActions"
2048
- [buttonAttributes]="{'aria-hidden': 'true', 'tabindex': '-1', role: 'presentation'}"
2049
- (open)="onOpen(sheetDdb)"
2050
- (close)="onClose()"
2051
- (click)="$event.stopPropagation()"
2052
- (itemClick)="onActionClick($event, sheet)">
2053
- </kendo-dropdownbutton>
2054
- </ng-template>
2055
- </kendo-tabstrip-tab>
2158
+ <ng-container *ngFor="let sheet of sheets">
2159
+ <kendo-tabstrip-tab
2160
+ *ngIf="sheet.state === 'visible'"
2161
+ [title]="sheet.text"
2162
+ [selected]="sheet.text === activeSheet">
2163
+ <ng-template kendoTabTemplate>
2164
+ <span class="k-link">{{sheet.text}}</span>
2165
+ <kendo-dropdownbutton #sheetDdb
2166
+ fillMode="flat"
2167
+ icon="caret-alt-down"
2168
+ [svgIcon]="caretAltDownIcon"
2169
+ buttonClass="k-menu-button"
2170
+ [data]="sheet.sheetActions"
2171
+ [buttonAttributes]="{'aria-hidden': 'true', 'tabindex': '-1', role: 'presentation'}"
2172
+ (open)="onOpen(sheetDdb)"
2173
+ (close)="onClose()"
2174
+ (click)="$event.stopPropagation()"
2175
+ (itemClick)="onActionClick($event, sheet)">
2176
+ </kendo-dropdownbutton>
2177
+ </ng-template>
2178
+ </kendo-tabstrip-tab>
2179
+ </ng-container>
2056
2180
  </kendo-tabstrip>
2057
2181
  `
2058
2182
  }]
@@ -2086,7 +2210,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2086
2210
  class MessagesDirective extends ComponentMessages {
2087
2211
  }
2088
2212
  MessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessagesDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2089
- MessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: MessagesDirective, selector: "[kendoSpreadsheetMessages]", inputs: { home: "home", file: "file", insert: "insert", formatTab: "formatTab", saveFile: "saveFile", loadFile: "loadFile", bold: "bold", italic: "italic", underline: "underline", format: "format", fontFamily: "fontFamily", fontSize: "fontSize", undo: "undo", redo: "redo", background: "background", color: "color", gridLines: "gridLines", addColumnLeft: "addColumnLeft", addColumnRight: "addColumnRight", addRowBelow: "addRowBelow", addRowAbove: "addRowAbove", deleteColumn: "deleteColumn", deleteRow: "deleteRow", wrap: "wrap", align: "align", alignHorizontal: "alignHorizontal", alignVertical: "alignVertical", alignLeft: "alignLeft", alignCenter: "alignCenter", alignRight: "alignRight", alignJustify: "alignJustify", alignTop: "alignTop", alignMiddle: "alignMiddle", alignBottom: "alignBottom", dialogApply: "dialogApply", dialogCancel: "dialogCancel", dialogDelete: "dialogDelete", dialogRename: "dialogRename", dialogInsert: "dialogInsert", dialogRemoveLink: "dialogRemoveLink", delete: "delete", rename: "rename", nameBox: "nameBox", formulaInput: "formulaInput", addSheet: "addSheet", sheetsMenu: "sheetsMenu", view: "view", merge: "merge", mergeHorizontally: "mergeHorizontally", mergeVertically: "mergeVertically", mergeAll: "mergeAll", unmerge: "unmerge", insertLink: "insertLink", increaseDecimal: "increaseDecimal", decreaseDecimal: "decreaseDecimal", increaseFontSize: "increaseFontSize", decreaseFontSize: "decreaseFontSize", openUnsupported: "openUnsupported", modifyMerged: "modifyMerged", cannotModifyDisabled: "cannotModifyDisabled", dialogOk: "dialogOk", dialogError: "dialogError", duplicateSheetName: "duplicateSheetName", copy: "copy", cut: "cut", paste: "paste", hideRow: "hideRow", unhideRow: "unhideRow", hideColumn: "hideColumn", unhideColumn: "unhideColumn" }, usesInheritance: true, ngImport: i0 });
2213
+ MessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: MessagesDirective, selector: "[kendoSpreadsheetMessages]", inputs: { home: "home", file: "file", insert: "insert", formatTab: "formatTab", saveFile: "saveFile", loadFile: "loadFile", bold: "bold", italic: "italic", underline: "underline", format: "format", fontFamily: "fontFamily", fontSize: "fontSize", undo: "undo", redo: "redo", background: "background", color: "color", gridLines: "gridLines", addColumnLeft: "addColumnLeft", addColumnRight: "addColumnRight", addRowBelow: "addRowBelow", addRowAbove: "addRowAbove", deleteColumn: "deleteColumn", deleteRow: "deleteRow", wrap: "wrap", align: "align", alignHorizontal: "alignHorizontal", alignVertical: "alignVertical", alignLeft: "alignLeft", alignCenter: "alignCenter", alignRight: "alignRight", alignJustify: "alignJustify", alignTop: "alignTop", alignMiddle: "alignMiddle", alignBottom: "alignBottom", dialogApply: "dialogApply", dialogCancel: "dialogCancel", dialogDelete: "dialogDelete", dialogRename: "dialogRename", dialogInsert: "dialogInsert", dialogRemoveLink: "dialogRemoveLink", delete: "delete", rename: "rename", nameBox: "nameBox", formulaInput: "formulaInput", addSheet: "addSheet", sheetsMenu: "sheetsMenu", view: "view", merge: "merge", mergeHorizontally: "mergeHorizontally", mergeVertically: "mergeVertically", mergeAll: "mergeAll", unmerge: "unmerge", insertLink: "insertLink", increaseDecimal: "increaseDecimal", decreaseDecimal: "decreaseDecimal", increaseFontSize: "increaseFontSize", decreaseFontSize: "decreaseFontSize", openUnsupported: "openUnsupported", modifyMerged: "modifyMerged", cannotModifyDisabled: "cannotModifyDisabled", dialogOk: "dialogOk", dialogError: "dialogError", duplicateSheetName: "duplicateSheetName", copy: "copy", cut: "cut", paste: "paste", hideRow: "hideRow", unhideRow: "unhideRow", hideColumn: "hideColumn", unhideColumn: "unhideColumn", sheetDelete: "sheetDelete", sheetRename: "sheetRename", sheetHide: "sheetHide", sheetDuplicate: "sheetDuplicate", sheetMoveLeft: "sheetMoveLeft", sheetMoveRight: "sheetMoveRight", invalidNameError: "invalidNameError" }, usesInheritance: true, ngImport: i0 });
2090
2214
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessagesDirective, decorators: [{
2091
2215
  type: Directive,
2092
2216
  args: [{
@@ -2232,6 +2356,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2232
2356
  type: Input
2233
2357
  }], unhideColumn: [{
2234
2358
  type: Input
2359
+ }], sheetDelete: [{
2360
+ type: Input
2361
+ }], sheetRename: [{
2362
+ type: Input
2363
+ }], sheetHide: [{
2364
+ type: Input
2365
+ }], sheetDuplicate: [{
2366
+ type: Input
2367
+ }], sheetMoveLeft: [{
2368
+ type: Input
2369
+ }], sheetMoveRight: [{
2370
+ type: Input
2371
+ }], invalidNameError: [{
2372
+ type: Input
2235
2373
  }] } });
2236
2374
 
2237
2375
  /**
@@ -2581,9 +2719,7 @@ class SpreadsheetHorizontalTextAlignDirective {
2581
2719
  host.icon = commandIcons[this.commandName];
2582
2720
  host.arrowIcon = true;
2583
2721
  host.fillMode = 'flat';
2584
- host.data = ALIGNS
2585
- .filter(value => value.commandName === 'textAlign')
2586
- .map(item => ({ ...item, textKey: localization.get(item.commandId) }));
2722
+ host.data = ALIGNS.flatMap(item => item.commandName === 'textAlign' ? [{ ...item, textKey: localization.get(item.commandId) }] : []);
2587
2723
  this.subs.add(host.itemClick.subscribe((e) => this.onItemClick(e)));
2588
2724
  host.title = localization.get(this.commandName);
2589
2725
  host.textField = 'textKey';
@@ -2625,9 +2761,7 @@ class SpreadsheetVerticalTextAlignDirective {
2625
2761
  host.icon = commandIcons[this.commandName];
2626
2762
  host.arrowIcon = true;
2627
2763
  host.fillMode = 'flat';
2628
- host.data = ALIGNS
2629
- .filter(value => value.commandName === 'verticalAlign')
2630
- .map(item => ({ ...item, textKey: localization.get(item.commandId) }));
2764
+ host.data = ALIGNS.flatMap(item => item.commandName === 'verticalAlign' ? [{ ...item, textKey: localization.get(item.commandId) }] : []);
2631
2765
  this.subs.add(host.itemClick.subscribe((e) => this.onItemClick(e)));
2632
2766
  host.title = localization.get(this.commandName);
2633
2767
  host.textField = 'textKey';
@@ -3094,6 +3228,13 @@ class SpreadsheetComponent {
3094
3228
  * @default false
3095
3229
  */
3096
3230
  this.overflow = false;
3231
+ /**
3232
+ * Sets the height of the formula list container.
3233
+ * Accepts same values as the CSS [`style.height`](https://developer.mozilla.org/en-US/docs/Web/CSS/height) property.
3234
+ *
3235
+ * @default '300px'
3236
+ */
3237
+ this.formulaListMaxHeight = '300px';
3097
3238
  /**
3098
3239
  * The number of columns in the document.
3099
3240
  *
@@ -3165,6 +3306,16 @@ class SpreadsheetComponent {
3165
3306
  this.showLicenseWatermark = false;
3166
3307
  this.contextMenuItems = [];
3167
3308
  this.subs = new Subscription();
3309
+ /**
3310
+ * @hidden
3311
+ */
3312
+ this.onKeyDown = (e) => {
3313
+ const isCtrl = e.ctrlKey || e.metaKey;
3314
+ const shift = e.shiftKey;
3315
+ if (isCtrl && shift && e.keyCode === Keys.KeyS) {
3316
+ this.spreadsheetService.onSheetsBarFocus.next();
3317
+ }
3318
+ };
3168
3319
  this.onChange = (e) => {
3169
3320
  hasObservers(this.change) && this.change.emit(e);
3170
3321
  this.spreadsheetService.selectionChanged.next(e.range);
@@ -3258,13 +3409,13 @@ class SpreadsheetComponent {
3258
3409
  set sheets(value) {
3259
3410
  const items = value.map((item, index, items) => ({
3260
3411
  ...item,
3412
+ state: item.state || 'visible',
3261
3413
  inEdit: false,
3262
3414
  first: index === 0,
3263
3415
  last: index === items.length - 1,
3264
3416
  text: item.name,
3265
3417
  active: (item.name === this.activeSheet) || items.length === 1,
3266
- index,
3267
- sheetActions: getSheetActions(index, items)
3418
+ index
3268
3419
  }));
3269
3420
  this._sheetsInfo = items;
3270
3421
  }
@@ -3286,6 +3437,7 @@ class SpreadsheetComponent {
3286
3437
  spreadsheet.bind('changeFormat', this.onChangeFormat);
3287
3438
  spreadsheet.bind('excelImport', this.onExcelImport);
3288
3439
  spreadsheet.bind('excelExport', this.onExcelExport);
3440
+ spreadsheet.bind('keydown', this.onKeyDown);
3289
3441
  spreadsheet.view.bind('update', this.updateState);
3290
3442
  spreadsheet.view.bind('message', this.onMessage);
3291
3443
  spreadsheet.bind('contextmenu', this.onContextMenu.bind(this));
@@ -3297,7 +3449,13 @@ class SpreadsheetComponent {
3297
3449
  if (!this.sheetsInfo) {
3298
3450
  this.ngZone.run(() => {
3299
3451
  const defaultSheetDescriptors = mapToSheetDescriptor([spreadsheet?.activeSheet()]);
3300
- this._sheetsInfo = [{ text: this.spreadsheetService.currentActiveSheet, first: true, last: true, ...defaultSheetDescriptors, sheetActions: getSheetActions(0, defaultSheetDescriptors) }];
3452
+ this._sheetsInfo = [{
3453
+ text: this.spreadsheetService.currentActiveSheet,
3454
+ first: true, last: true,
3455
+ state: 'visible',
3456
+ ...defaultSheetDescriptors,
3457
+ sheetActions: getSheetActions(defaultSheetDescriptors).map(item => ({ ...item, text: this.messageFor(item.messageKey) }))
3458
+ }];
3301
3459
  });
3302
3460
  }
3303
3461
  });
@@ -3617,7 +3775,7 @@ class SpreadsheetComponent {
3617
3775
  }
3618
3776
  }
3619
3777
  SpreadsheetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SpreadsheetComponent, deps: [{ token: i0.NgZone }, { token: i1$4.IntlService }, { token: i0.ElementRef }, { token: i2.LocalizationService }, { token: SpreadsheetService }, { token: SpreadsheetToolsService }, { token: ErrorHandlingService }, { token: i1$1.DialogService }], target: i0.ɵɵFactoryTarget.Component });
3620
- SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SpreadsheetComponent, selector: "kendo-spreadsheet", inputs: { menuItems: "menuItems", overflow: "overflow", activeSheet: "activeSheet", sheets: "sheets", columns: "columns", columnWidth: "columnWidth", defaultCellStyle: "defaultCellStyle", headerHeight: "headerHeight", headerWidth: "headerWidth", rowHeight: "rowHeight", rows: "rows", images: "images", excel: "excel" }, outputs: { change: "change", formatChange: "formatChange", selectionChange: "selectionChange", excelExport: "excelExport", excelImport: "excelImport", activeSheetChange: "activeSheetChange" }, host: { properties: { "class.k-spreadsheet": "this.hostClass", "attr.role": "this.role" } }, providers: [
3778
+ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SpreadsheetComponent, 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", images: "images", excel: "excel" }, outputs: { change: "change", formatChange: "formatChange", selectionChange: "selectionChange", excelExport: "excelExport", excelImport: "excelImport", activeSheetChange: "activeSheetChange" }, host: { properties: { "class.k-spreadsheet": "this.hostClass", "attr.role": "this.role" } }, providers: [
3621
3779
  SpreadsheetLocalizationService,
3622
3780
  {
3623
3781
  provide: LocalizationService,
@@ -3772,7 +3930,21 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3772
3930
  i18n-hideColumn="kendo.spreadsheet.hideColumn|The Hide column command text."
3773
3931
  hideColumn="Hide"
3774
3932
  i18n-unhideColumn="kendo.spreadsheet.unhideColumn|The Unhide column command text."
3775
- unhideColumn="Unhide">
3933
+ unhideColumn="Unhide"
3934
+ i18n-sheetDelete="kendo.spreadsheet.sheetDelete|The text of the Sheet menu Delete option."
3935
+ sheetDelete="Delete"
3936
+ i18n-sheetRename="kendo.spreadsheet.sheetRename|The text of the Sheet menu Rename option."
3937
+ sheetRename="Rename"
3938
+ i18n-sheetDuplicate="kendo.spreadsheet.sheetDuplicate|The text of the Sheet menu Duplicate option."
3939
+ sheetDuplicate="Duplicate"
3940
+ i18n-sheetHide="kendo.spreadsheet.sheetHide|The text of the Sheet menu Hide option."
3941
+ sheetHide="Hide"
3942
+ i18n-sheetMoveLeft="kendo.spreadsheet.sheetMoveLeft|The text of the Sheet menu Move Left option."
3943
+ sheetMoveLeft="Move Left"
3944
+ i18n-sheetMoveRight="kendo.spreadsheet.sheetMoveRight|The text of the Sheet menu Move Right option."
3945
+ sheetMoveRight="Move Right"
3946
+ i18n-invalidNameError="kendo.spreadsheet.invalidNameError|The content of the dialog that warns about invalid name input."
3947
+ invalidNameError="{{ 'Invalid name: {inputValue}' }}">
3776
3948
  </ng-container>
3777
3949
  <div class="k-spreadsheet-header">
3778
3950
  <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
@@ -3853,7 +4025,11 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3853
4025
  [svgIcon]="formulaFxIcon">
3854
4026
  </kendo-icon-wrapper>
3855
4027
  <span class="k-separator k-separator-vertical"></span>
3856
- <div #formulaBar kendoSpreadsheetFormulaInput class="k-textbox k-input k-input-md k-input-flat k-rounded-md"></div>
4028
+ <div
4029
+ #formulaBar
4030
+ kendoSpreadsheetFormulaInput
4031
+ [formulaListMaxHeight]="formulaListMaxHeight"
4032
+ class="k-textbox k-input k-input-md k-input-flat k-rounded-md"></div>
3857
4033
  </div>
3858
4034
  </div>
3859
4035
  <div class="k-spreadsheet-view">
@@ -3877,7 +4053,7 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3877
4053
  (select)="onContextMenuSelect($event)"></kendo-contextmenu>
3878
4054
 
3879
4055
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3880
- `, isInline: true, components: [{ type: i7$1.MenuComponent, selector: "kendo-menu", inputs: ["menuItemTemplate", "ariaRole", "menuItemLinkTemplate"], outputs: ["select", "open", "close"], exportAs: ["kendoMenu"] }, { type: i7$1.MenuItemComponent, selector: "kendo-menu-item", inputs: ["text", "url", "disabled", "cssClass", "cssStyle", "icon", "svgIcon", "data", "separator"] }, { type: i1$2.ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "tabindex", "size", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { type: SpreadsheetLoadFileComponent, selector: "kendo-spreadsheet-load-file-tool" }, { type: i1$2.ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { type: i1$2.ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { type: i1$2.ToolBarSeparatorComponent, selector: "kendo-toolbar-separator", exportAs: ["kendoToolBarSeparator"] }, { type: SpreadsheetFontFamilyComponent, selector: "kendo-toolbar-dropdownlist[kendoSpreadsheetFontFamily]" }, { type: SpreadsheetFontSizeComponent, selector: "kendo-toolbar-dropdownlist[kendoSpreadsheetFontSize]" }, { type: SpreadsheetForeColorComponent, selector: "kendo-spreadsheet-forecolor-tool" }, { type: SpreadsheetBackColorComponent, selector: "kendo-spreadsheet-backcolor-tool" }, { type: i1$2.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"] }, { type: NameBoxComponent, selector: "[kendoSpreadsheetNameBox]", inputs: ["data", "spreadsheetWidget"] }, { type: i6.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { type: SheetsBarComponent, selector: "[kendoSpreadsheetSheetsBar]", inputs: ["sheets", "sheetDescriptors"] }, { type: i7$1.ContextMenuComponent, selector: "kendo-contextmenu", inputs: ["showOn", "target", "filter", "alignToAnchor", "vertical", "popupAnimate", "popupAlign", "anchorAlign", "collision", "appendTo", "ariaLabel"], outputs: ["popupOpen", "popupClose", "select", "open", "close"], exportAs: ["kendoContextMenu"] }, { type: i3.WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoSpreadsheetLocalizedMessages]" }, { type: MainMenuDirective, selector: "[kendoSpreadsheetMenu]" }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: SpreadsheetSaveFileDirective, selector: "[kendoSpreadsheetSaveFile]" }, { type: SpreadsheetUndoDirective, selector: "kendo-toolbar-button[kendoSpreadsheetUndo]" }, { type: SpreadsheetRedoDirective, selector: "kendo-toolbar-button[kendoSpreadsheetRedo]" }, { type: SpreadsheetIncreaseFontSizeDirective, selector: "kendo-toolbar-button[kendoSpreadsheetIncreaseFontSize]" }, { type: SpreadsheetDecreaseFontSizeDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDecreaseFontSize]" }, { type: SpreadsheetBoldDirective, selector: "kendo-toolbar-button[kendoSpreadsheetBold]" }, { type: SpreadsheetItalicDirective, selector: "kendo-toolbar-button[kendoSpreadsheetItalic]" }, { type: SpreadsheetUnderlineDirective, selector: "kendo-toolbar-button[kendoSpreadsheetUnderline]" }, { type: SpreadsheetHorizontalTextAlignDirective, selector: "[kendoSpreadsheetHorizontalTextAlign]" }, { type: SpreadsheetVerticalTextAlignDirective, selector: "[kendoSpreadsheetVerticalTextAlign]" }, { type: SpreadsheetTextWrapDirective, selector: "kendo-toolbar-button[kendoSpreadsheetTextWrap]" }, { type: SpreadsheetFormatDirective, selector: "[kendoSpreadsheetFormat]" }, { type: SpreadsheetInsertLinkDirective, selector: "kendo-toolbar-button[kendoSpreadsheetInsertLink]" }, { type: SpreadsheetAddColumnLeftButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddColumnLeftButton]" }, { type: SpreadsheetAddColumnRightButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddColumnRightButton]" }, { type: SpreadsheetAddRowBelowButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddRowBelowButton]" }, { type: SpreadsheetAddRowAboveButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddRowAboveButton]" }, { type: SpreadsheetDeleteColumnButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDeleteColumnButton]" }, { type: SpreadsheetDeleteRowButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDeleteRowButton]" }, { type: SpreadsheetDecreaseDecimalDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDecreaseDecimal]" }, { type: SpreadsheetIncreaseDecimalDirective, selector: "kendo-toolbar-button[kendoSpreadsheetIncreaseDecimal]" }, { type: SpreadsheetMergeDirective, selector: "[kendoSpreadsheetMerge]" }, { type: SpreadsheetGridLinesDirective, selector: "kendo-toolbar-button[kendoSpreadsheetGridLines]" }, { type: FormulaInputDirective, selector: "[kendoSpreadsheetFormulaInput]" }] });
4056
+ `, isInline: true, components: [{ type: i7$1.MenuComponent, selector: "kendo-menu", inputs: ["menuItemTemplate", "ariaRole", "menuItemLinkTemplate"], outputs: ["select", "open", "close"], exportAs: ["kendoMenu"] }, { type: i7$1.MenuItemComponent, selector: "kendo-menu-item", inputs: ["text", "url", "disabled", "cssClass", "cssStyle", "icon", "svgIcon", "data", "separator"] }, { type: i1$2.ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "tabindex", "size", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { type: SpreadsheetLoadFileComponent, selector: "kendo-spreadsheet-load-file-tool" }, { type: i1$2.ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { type: i1$2.ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { type: i1$2.ToolBarSeparatorComponent, selector: "kendo-toolbar-separator", exportAs: ["kendoToolBarSeparator"] }, { type: SpreadsheetFontFamilyComponent, selector: "kendo-toolbar-dropdownlist[kendoSpreadsheetFontFamily]" }, { type: SpreadsheetFontSizeComponent, selector: "kendo-toolbar-dropdownlist[kendoSpreadsheetFontSize]" }, { type: SpreadsheetForeColorComponent, selector: "kendo-spreadsheet-forecolor-tool" }, { type: SpreadsheetBackColorComponent, selector: "kendo-spreadsheet-backcolor-tool" }, { type: i1$2.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"] }, { type: NameBoxComponent, selector: "[kendoSpreadsheetNameBox]", inputs: ["data", "spreadsheetWidget"] }, { type: i6.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { type: SheetsBarComponent, selector: "[kendoSpreadsheetSheetsBar]", inputs: ["sheets", "sheetDescriptors"] }, { type: i7$1.ContextMenuComponent, selector: "kendo-contextmenu", inputs: ["showOn", "target", "filter", "alignToAnchor", "vertical", "popupAnimate", "popupAlign", "anchorAlign", "collision", "appendTo", "ariaLabel"], outputs: ["popupOpen", "popupClose", "select", "open", "close"], exportAs: ["kendoContextMenu"] }, { type: i3.WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoSpreadsheetLocalizedMessages]" }, { type: MainMenuDirective, selector: "[kendoSpreadsheetMenu]" }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: SpreadsheetSaveFileDirective, selector: "[kendoSpreadsheetSaveFile]" }, { type: SpreadsheetUndoDirective, selector: "kendo-toolbar-button[kendoSpreadsheetUndo]" }, { type: SpreadsheetRedoDirective, selector: "kendo-toolbar-button[kendoSpreadsheetRedo]" }, { type: SpreadsheetIncreaseFontSizeDirective, selector: "kendo-toolbar-button[kendoSpreadsheetIncreaseFontSize]" }, { type: SpreadsheetDecreaseFontSizeDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDecreaseFontSize]" }, { type: SpreadsheetBoldDirective, selector: "kendo-toolbar-button[kendoSpreadsheetBold]" }, { type: SpreadsheetItalicDirective, selector: "kendo-toolbar-button[kendoSpreadsheetItalic]" }, { type: SpreadsheetUnderlineDirective, selector: "kendo-toolbar-button[kendoSpreadsheetUnderline]" }, { type: SpreadsheetHorizontalTextAlignDirective, selector: "[kendoSpreadsheetHorizontalTextAlign]" }, { type: SpreadsheetVerticalTextAlignDirective, selector: "[kendoSpreadsheetVerticalTextAlign]" }, { type: SpreadsheetTextWrapDirective, selector: "kendo-toolbar-button[kendoSpreadsheetTextWrap]" }, { type: SpreadsheetFormatDirective, selector: "[kendoSpreadsheetFormat]" }, { type: SpreadsheetInsertLinkDirective, selector: "kendo-toolbar-button[kendoSpreadsheetInsertLink]" }, { type: SpreadsheetAddColumnLeftButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddColumnLeftButton]" }, { type: SpreadsheetAddColumnRightButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddColumnRightButton]" }, { type: SpreadsheetAddRowBelowButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddRowBelowButton]" }, { type: SpreadsheetAddRowAboveButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetAddRowAboveButton]" }, { type: SpreadsheetDeleteColumnButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDeleteColumnButton]" }, { type: SpreadsheetDeleteRowButtonDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDeleteRowButton]" }, { type: SpreadsheetDecreaseDecimalDirective, selector: "kendo-toolbar-button[kendoSpreadsheetDecreaseDecimal]" }, { type: SpreadsheetIncreaseDecimalDirective, selector: "kendo-toolbar-button[kendoSpreadsheetIncreaseDecimal]" }, { type: SpreadsheetMergeDirective, selector: "[kendoSpreadsheetMerge]" }, { type: SpreadsheetGridLinesDirective, selector: "kendo-toolbar-button[kendoSpreadsheetGridLines]" }, { type: FormulaInputDirective, selector: "[kendoSpreadsheetFormulaInput]", inputs: ["formulaListMaxHeight"] }] });
3881
4057
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SpreadsheetComponent, decorators: [{
3882
4058
  type: Component,
3883
4059
  args: [{
@@ -4039,7 +4215,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4039
4215
  i18n-hideColumn="kendo.spreadsheet.hideColumn|The Hide column command text."
4040
4216
  hideColumn="Hide"
4041
4217
  i18n-unhideColumn="kendo.spreadsheet.unhideColumn|The Unhide column command text."
4042
- unhideColumn="Unhide">
4218
+ unhideColumn="Unhide"
4219
+ i18n-sheetDelete="kendo.spreadsheet.sheetDelete|The text of the Sheet menu Delete option."
4220
+ sheetDelete="Delete"
4221
+ i18n-sheetRename="kendo.spreadsheet.sheetRename|The text of the Sheet menu Rename option."
4222
+ sheetRename="Rename"
4223
+ i18n-sheetDuplicate="kendo.spreadsheet.sheetDuplicate|The text of the Sheet menu Duplicate option."
4224
+ sheetDuplicate="Duplicate"
4225
+ i18n-sheetHide="kendo.spreadsheet.sheetHide|The text of the Sheet menu Hide option."
4226
+ sheetHide="Hide"
4227
+ i18n-sheetMoveLeft="kendo.spreadsheet.sheetMoveLeft|The text of the Sheet menu Move Left option."
4228
+ sheetMoveLeft="Move Left"
4229
+ i18n-sheetMoveRight="kendo.spreadsheet.sheetMoveRight|The text of the Sheet menu Move Right option."
4230
+ sheetMoveRight="Move Right"
4231
+ i18n-invalidNameError="kendo.spreadsheet.invalidNameError|The content of the dialog that warns about invalid name input."
4232
+ invalidNameError="{{ 'Invalid name: {inputValue}' }}">
4043
4233
  </ng-container>
4044
4234
  <div class="k-spreadsheet-header">
4045
4235
  <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
@@ -4120,7 +4310,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4120
4310
  [svgIcon]="formulaFxIcon">
4121
4311
  </kendo-icon-wrapper>
4122
4312
  <span class="k-separator k-separator-vertical"></span>
4123
- <div #formulaBar kendoSpreadsheetFormulaInput class="k-textbox k-input k-input-md k-input-flat k-rounded-md"></div>
4313
+ <div
4314
+ #formulaBar
4315
+ kendoSpreadsheetFormulaInput
4316
+ [formulaListMaxHeight]="formulaListMaxHeight"
4317
+ class="k-textbox k-input k-input-md k-input-flat k-rounded-md"></div>
4124
4318
  </div>
4125
4319
  </div>
4126
4320
  <div class="k-spreadsheet-view">
@@ -4171,6 +4365,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4171
4365
  type: Input
4172
4366
  }], overflow: [{
4173
4367
  type: Input
4368
+ }], formulaListMaxHeight: [{
4369
+ type: Input
4174
4370
  }], activeSheet: [{
4175
4371
  type: Input
4176
4372
  }], sheets: [{