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

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 * as i2 from '@progress/kendo-angular-l10n';
13
13
  import { LocalizationService, L10N_PREFIX, RTL, ComponentMessages } from '@progress/kendo-angular-l10n';
14
14
  import * as i3 from '@progress/kendo-angular-common';
@@ -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: 1702298332,
51
+ version: '14.3.0-develop.10',
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
 
@@ -150,10 +150,15 @@ const mapToSheetDescriptor = (sheetsArray) => {
150
150
  name: sheet.name(),
151
151
  rows: sheet._rows,
152
152
  selection: sheet.selection(),
153
- showGridLines: sheet.showGridLines
153
+ showGridLines: sheet.showGridLines,
154
+ state: sheet.state()
154
155
  };
155
156
  });
156
157
  };
158
+ /**
159
+ * @hidden
160
+ */
161
+ const replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`\{\\s*${name}\\s*\}`, 'g'), value);
157
162
 
158
163
  let spreadsheetCounter = 0;
159
164
  /**
@@ -162,6 +167,7 @@ let spreadsheetCounter = 0;
162
167
  class SpreadsheetService {
163
168
  constructor() {
164
169
  this.sheetsChanged = new Subject();
170
+ this.onSheetsBarFocus = new Subject();
165
171
  this.activeSheetChanged = new Subject();
166
172
  this.selectionChanged = new Subject();
167
173
  spreadsheetCounter++;
@@ -212,10 +218,12 @@ class FormulaListComponent {
212
218
  }
213
219
  }
214
220
  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 });
215
- 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: `
221
+ 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: `
216
222
  <ul #ulRef
217
223
  class="k-spreadsheet-formula-list k-list-ul k-list-md k-group k-reset"
218
224
  role="menu"
225
+ [style.overflowY]="'auto'"
226
+ [style.maxHeight]="maxHeight"
219
227
  [kendoEventsOutsideAngular]="{mousedown: handleMouseDown}">
220
228
  <li *ngFor="let item of data"
221
229
  (click)="itemClick(item.text)"
@@ -237,6 +245,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
237
245
  <ul #ulRef
238
246
  class="k-spreadsheet-formula-list k-list-ul k-list-md k-group k-reset"
239
247
  role="menu"
248
+ [style.overflowY]="'auto'"
249
+ [style.maxHeight]="maxHeight"
240
250
  [kendoEventsOutsideAngular]="{mousedown: handleMouseDown}">
241
251
  <li *ngFor="let item of data"
242
252
  (click)="itemClick(item.text)"
@@ -254,6 +264,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
254
264
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: SpreadsheetService }]; }, propDecorators: { id: [{
255
265
  type: HostBinding,
256
266
  args: ['attr.id']
267
+ }], maxHeight: [{
268
+ type: Input
257
269
  }], data: [{
258
270
  type: Input
259
271
  }], itemClick: [{
@@ -296,6 +308,23 @@ class FormulaInputDirective {
296
308
  }
297
309
  if (next) {
298
310
  next.classList.add('k-focus');
311
+ const { offsetTop, offsetHeight, parentElement } = next;
312
+ if (dir > 0) {
313
+ if (offsetTop + offsetHeight >= parentElement.offsetHeight + parentElement.scrollTop) {
314
+ parentElement.scrollTop = Math.min(parentElement.scrollTop + offsetHeight, parentElement.scrollHeight - parentElement.offsetHeight);
315
+ }
316
+ if (next === items[0]) {
317
+ next.scrollIntoView();
318
+ }
319
+ }
320
+ else {
321
+ if (offsetTop <= parentElement.scrollTop) {
322
+ parentElement.scrollTop = Math.max(parentElement.scrollTop - offsetHeight, 0);
323
+ }
324
+ if (next === items[items.length - 1]) {
325
+ next.scrollIntoView();
326
+ }
327
+ }
299
328
  }
300
329
  };
301
330
  }
@@ -363,6 +392,7 @@ class FormulaInputDirective {
363
392
  this.list = list;
364
393
  list.data = this.data;
365
394
  list.itemClick = this.handler;
395
+ list.maxHeight = this.formulaListMaxHeight;
366
396
  this.ariaExpanded = 'true';
367
397
  },
368
398
  close: () => {
@@ -381,7 +411,7 @@ class FormulaInputDirective {
381
411
  }
382
412
  }
383
413
  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 });
384
- 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 });
414
+ 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 });
385
415
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormulaInputDirective, decorators: [{
386
416
  type: Directive,
387
417
  args: [{
@@ -405,46 +435,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
405
435
  }], ariaControls: [{
406
436
  type: HostBinding,
407
437
  args: ['attr.aria-controls']
438
+ }], formulaListMaxHeight: [{
439
+ type: Input
408
440
  }] } });
409
441
 
410
442
  /**
411
443
  * @hidden
412
444
  */
413
- const getSheetActions = (index, items) => {
445
+ const getSheetActions = (items, item) => {
446
+ const visibleItems = items.filter(item => item.state === 'visible');
447
+ const itemIndex = item ? visibleItems.findIndex(i => i === item) : 0;
414
448
  return [{
415
- text: 'Delete',
449
+ messageKey: 'sheetDelete',
416
450
  icon: 'trash',
417
451
  svgIcon: trashIcon,
418
452
  commandName: 'delete',
419
453
  dialogButton: 'dialogDelete',
420
- disabled: items.length === 1
421
- },
422
- {
423
- text: 'Duplicate',
454
+ disabled: visibleItems.length === 1
455
+ }, {
456
+ messageKey: 'sheetDuplicate',
424
457
  icon: 'copy',
425
458
  svgIcon: copyIcon,
426
459
  commandName: 'copy'
427
- },
428
- {
429
- text: 'Rename',
460
+ }, {
461
+ messageKey: 'sheetRename',
430
462
  icon: 'pencil',
431
463
  svgIcon: pencilIcon,
432
464
  commandName: 'rename',
433
465
  dialogButton: 'dialogRename'
434
- },
435
- {
436
- text: 'Move Right',
466
+ }, {
467
+ messageKey: 'sheetHide',
468
+ icon: 'eye-slash',
469
+ svgIcon: eyeSlashIcon,
470
+ commandName: 'hide',
471
+ disabled: visibleItems.length === 1
472
+ }, {
473
+ messageKey: 'sheetMoveRight',
437
474
  icon: 'arrow-right',
438
475
  svgIcon: arrowRightIcon,
439
476
  commandName: 'move',
440
- disabled: index === items.length - 1
441
- },
442
- {
443
- text: 'Move Left',
477
+ disabled: visibleItems.length === 1 || itemIndex === visibleItems.length - 1
478
+ }, {
479
+ messageKey: 'sheetMoveLeft',
444
480
  icon: 'arrow-left',
445
481
  svgIcon: arrowLeftIcon,
446
482
  commandName: 'move',
447
- disabled: index === 0
483
+ disabled: visibleItems.length === 1 || itemIndex === 0
448
484
  }];
449
485
  };
450
486
 
@@ -479,10 +515,22 @@ class ErrorHandlingService {
479
515
  }
480
516
  openDialog(messageData) {
481
517
  var _a;
518
+ let dialogContent;
519
+ if (messageData.name === 'message') {
520
+ const localizationMsg = this.messageFor('invalidNameError');
521
+ let inputValue = messageData.text.split(' ').pop();
522
+ if (messageData.text.startsWith('Parse')) {
523
+ inputValue = inputValue.substring(0, inputValue.length - 1);
524
+ }
525
+ dialogContent = replaceMessagePlaceholder(localizationMsg, 'inputValue', inputValue);
526
+ }
527
+ else {
528
+ dialogContent = this.messageFor(messageData.name);
529
+ }
482
530
  const dialogSettings = {
483
531
  appendTo: this.spreadsheetService.dialogContainer,
484
532
  title: this.messageFor('dialogError'),
485
- content: this.messageFor(messageData.name),
533
+ content: dialogContent,
486
534
  actions: [{
487
535
  text: this.messageFor('dialogOk'),
488
536
  themeColor: 'primary'
@@ -639,7 +687,7 @@ InsertLinkDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
639
687
  </kendo-textbox>
640
688
  </div>
641
689
  </form>
642
- `, 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"] }] });
690
+ `, 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"] }] });
643
691
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InsertLinkDialogComponent, decorators: [{
644
692
  type: Component,
645
693
  args: [{
@@ -1761,7 +1809,7 @@ ActionDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
1761
1809
  </div>
1762
1810
  </div>
1763
1811
  </form>
1764
- `, 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"] }] });
1812
+ `, 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"] }] });
1765
1813
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActionDialogComponent, decorators: [{
1766
1814
  type: Component,
1767
1815
  args: [{
@@ -1799,14 +1847,23 @@ class SheetsBarComponent {
1799
1847
  this.dialogService = dialogService;
1800
1848
  this.ngZone = ngZone;
1801
1849
  this.hostClasses = true;
1850
+ this.subs = new Subscription();
1802
1851
  this.plusIcon = plusIcon;
1803
1852
  this.menuIcon = menuIcon;
1804
1853
  this.caretAltDownIcon = caretAltDownIcon;
1805
1854
  this.caretAltLeftIcon = caretAltLeftIcon;
1806
1855
  this.caretAltRightIcon = caretAltRightIcon;
1807
1856
  this.selected = false;
1857
+ this.sheetsMenuList = [];
1808
1858
  this.openedDdb = null;
1809
- this.eyeIcon = eyeIcon;
1859
+ this.hiddenStateIcons = {
1860
+ hidden: 'eye-slash',
1861
+ visible: 'eye'
1862
+ };
1863
+ this.hiddenStateSVGIcons = {
1864
+ hidden: eyeSlashIcon,
1865
+ visible: eyeIcon
1866
+ };
1810
1867
  this.onAddClick = () => {
1811
1868
  if (this.spreadsheetService.spreadsheet) {
1812
1869
  this.spreadsheetService.spreadsheet.view.sheetsbar.onAddSelect();
@@ -1828,23 +1885,55 @@ class SheetsBarComponent {
1828
1885
  this.spreadsheetService.spreadsheet.insertSheet({ data: Object.assign(Object.assign({}, sheetToCopy.toJSON()), { name: newName }), index: sheetInfo.index + 1 });
1829
1886
  this.selectSheet(newName);
1830
1887
  },
1831
- move: (sheetInfo, itemText) => {
1832
- const oldIndex = this.spreadsheetService.spreadsheet.sheets().findIndex(sheet => sheet.name() === sheetInfo.text);
1833
- const newIndex = itemText === 'Move Right' ? oldIndex + 1 : oldIndex - 1;
1888
+ move: (sheetInfo, itemKey) => {
1889
+ const isMoveRight = itemKey === 'sheetMoveRight';
1890
+ let oldIndex = -1;
1891
+ let newIndex = -1;
1892
+ const sheets = this.spreadsheetService.spreadsheet.sheets();
1893
+ if (isMoveRight) {
1894
+ for (let i = 0; i < sheets.length; i++) {
1895
+ if (sheets[i].name() === sheetInfo.text) {
1896
+ oldIndex = i;
1897
+ }
1898
+ if (oldIndex > -1 && i > oldIndex && sheets[i]._state() === 'visible') {
1899
+ newIndex = i;
1900
+ break;
1901
+ }
1902
+ }
1903
+ }
1904
+ else {
1905
+ for (let i = sheets.length - 1; i >= 0; i--) {
1906
+ if (sheets[i].name() === sheetInfo.text) {
1907
+ oldIndex = i;
1908
+ }
1909
+ if (oldIndex > -1 && (i < oldIndex) && sheets[i]._state() === 'visible') {
1910
+ newIndex = i;
1911
+ break;
1912
+ }
1913
+ }
1914
+ }
1834
1915
  const sheetsBar = this.spreadsheetService.spreadsheet.view.sheetsbar;
1835
1916
  sheetsBar.onSheetReorderEnd({ oldIndex, newIndex });
1917
+ this.selectSheet(sheetInfo.text);
1918
+ this.notifySheetsChange();
1919
+ },
1920
+ hide: (sheet) => {
1921
+ sheet.state = 'hidden';
1922
+ const sheets = this.spreadsheetService.spreadsheet.sheets();
1923
+ const sheetIndex = sheets.findIndex(s => s.name() === sheet.text);
1924
+ sheets[sheetIndex]._state('hidden');
1925
+ const newSelectedIndex = sheetIndex < sheets.length - 1 ? sheetIndex + 1 : 0;
1926
+ const sheetToSelect = sheets[newSelectedIndex].name();
1927
+ this.selectSheet(sheetToSelect);
1836
1928
  this.notifySheetsChange();
1837
1929
  }
1838
1930
  };
1931
+ this.subs.add(spreadsheetService.onSheetsBarFocus.subscribe(() => ngZone.run(() => this.tabstrip.selectTab(this.sheets.findIndex(sh => sh.text === spreadsheetService.currentActiveSheet)))));
1839
1932
  }
1840
1933
  get activeSheet() {
1841
1934
  var _a, _b;
1842
1935
  return (_b = (_a = this.spreadsheetService.spreadsheet) === null || _a === void 0 ? void 0 : _a.activeSheet()) === null || _b === void 0 ? void 0 : _b.name();
1843
1936
  }
1844
- get sheetsMenuList() {
1845
- var _a;
1846
- return (_a = this.sheets) === null || _a === void 0 ? void 0 : _a.map(sheet => ({ text: sheet.text, icon: 'eye', svgIcon: this.eyeIcon }));
1847
- }
1848
1937
  get tablistId() {
1849
1938
  return this.spreadsheetService.tablistId;
1850
1939
  }
@@ -1860,10 +1949,24 @@ class SheetsBarComponent {
1860
1949
  this.renderer.setAttribute(tablist, 'id', this.tablistId);
1861
1950
  this.tabListSub = this.renderer.listen(tablist, 'keydown', this.onTabListKeyDown.bind(this));
1862
1951
  }
1952
+ ngOnChanges(changes) {
1953
+ var _a, _b;
1954
+ if (changes['sheets']) {
1955
+ this.sheetsMenuList = (_a = this.sheets) === null || _a === void 0 ? void 0 : _a.map(sheet => ({
1956
+ text: sheet.text,
1957
+ icon: this.hiddenStateIcons[sheet.state],
1958
+ svgIcon: this.hiddenStateSVGIcons[sheet.state]
1959
+ }));
1960
+ this.sheets = (_b = changes['sheets'].currentValue) === null || _b === void 0 ? void 0 : _b.map((sheet, _, items) => (Object.assign(Object.assign({}, sheet), { sheetActions: getSheetActions(items, sheet)
1961
+ .map(item => (Object.assign(Object.assign({}, item), { text: this.messageFor(item.messageKey) }))) })));
1962
+ }
1963
+ ;
1964
+ }
1863
1965
  ngOnDestroy() {
1864
1966
  if (this.tabListSub) {
1865
1967
  this.tabListSub();
1866
1968
  }
1969
+ this.subs.unsubscribe();
1867
1970
  }
1868
1971
  onTabSelect(ev) {
1869
1972
  if (ev.title !== this.activeSheet) {
@@ -1889,11 +1992,13 @@ class SheetsBarComponent {
1889
1992
  this.openDialog(dataItem, sheet);
1890
1993
  }
1891
1994
  else {
1892
- this.actionsCallback[dataItem.commandName](sheet, dataItem.text);
1995
+ this.actionsCallback[dataItem.commandName](sheet, dataItem.messageKey);
1893
1996
  }
1894
1997
  }
1895
1998
  onMenuItemClick(item) {
1896
1999
  const sheet = this.sheets.find(s => s.text === item.text);
2000
+ sheet.state = 'visible';
2001
+ this.spreadsheetService.spreadsheet.sheets().find(sh => sh.name() === sheet.text)._state('visible');
1897
2002
  this.selectSheet(sheet.text);
1898
2003
  }
1899
2004
  messageFor(key) {
@@ -1920,7 +2025,9 @@ class SheetsBarComponent {
1920
2025
  if (event.text === this.messageFor(dataItem.dialogButton)) {
1921
2026
  const sheetsBar = this.spreadsheetService.spreadsheet.view.sheetsbar;
1922
2027
  if (sheetsBar) {
1923
- dataItem.commandName === 'delete' ? sheetsBar.onSheetRemove(sheet.text) : sheetsBar.onSheetRename(dialogContent.value, this.sheets.indexOf(sheet));
2028
+ const allSheets = this.spreadsheetService.spreadsheet.sheets();
2029
+ const sheetIndex = allSheets.findIndex(s => s.name() === sheet.text);
2030
+ dataItem.commandName === 'delete' ? sheetsBar.onSheetRemove(sheet.text) : sheetsBar.onSheetRename(dialogContent.value, sheetIndex);
1924
2031
  this.notifySheetsChange();
1925
2032
  }
1926
2033
  }
@@ -1960,14 +2067,23 @@ class SheetsBarComponent {
1960
2067
  }
1961
2068
  notifySheetsChange() {
1962
2069
  this.ngZone.run(() => {
2070
+ var _a;
1963
2071
  const newSheets = this.spreadsheetService.spreadsheet.sheets();
1964
2072
  const sheetDesc = mapToSheetDescriptor(newSheets);
1965
- this.sheets = sheetDesc.map((item, index, items) => (Object.assign(Object.assign({}, item), { inEdit: false, first: index === 0, last: index === items.length - 1, text: item.name, active: (item.name === this.activeSheet) || items.length === 1, index, sheetActions: getSheetActions(index, items) })));
2073
+ this.sheets = sheetDesc
2074
+ .flatMap((item, index, items) => item.state === 'visible' ? [Object.assign(Object.assign({}, item), { inEdit: false, first: index === 0, last: index === items.length - 1, text: item.name, active: (item.name === this.activeSheet) || items.length === 1, index, sheetActions: getSheetActions(items, item)
2075
+ .map(item => (Object.assign(Object.assign({}, item), { text: this.messageFor(item.messageKey) }))) })] : []);
2076
+ this.sheetsMenuList = (_a = this.sheets) === null || _a === void 0 ? void 0 : _a.map(sheet => ({
2077
+ text: sheet.text,
2078
+ icon: this.hiddenStateIcons[sheet.state],
2079
+ svgIcon: this.hiddenStateSVGIcons[sheet.state]
2080
+ }));
1966
2081
  });
2082
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => this.spreadsheetService.spreadsheet.view.clipboard.focus());
1967
2083
  }
1968
2084
  }
1969
2085
  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 });
1970
- 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: `
2086
+ 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: `
1971
2087
  <button kendoButton #addButton
1972
2088
  [title]="messageFor('addSheet')"
1973
2089
  type="button"
@@ -1995,27 +2111,30 @@ SheetsBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
1995
2111
  [scrollable]="{prevButtonIcon: 'caret-alt-left', prevSVGButtonIcon: caretAltLeftIcon, nextButtonIcon: 'caret-alt-right', nextSVGButtonIcon: caretAltRightIcon}"
1996
2112
  class="k-spreadsheet-sheets k-overflow-hidden"
1997
2113
  (tabSelect)="onTabSelect($event)">
1998
- <kendo-tabstrip-tab *ngFor="let sheet of sheets"
1999
- [title]="sheet.text"
2000
- [selected]="sheet.text === activeSheet">
2001
- <ng-template kendoTabTemplate>
2002
- <span class="k-link">{{sheet.text}}</span>
2003
- <kendo-dropdownbutton #sheetDdb
2004
- fillMode="flat"
2005
- icon="caret-alt-down"
2006
- [svgIcon]="caretAltDownIcon"
2007
- buttonClass="k-menu-button"
2008
- [data]="sheet.sheetActions"
2009
- [buttonAttributes]="{'aria-hidden': 'true', 'tabindex': '-1', role: 'presentation'}"
2010
- (open)="onOpen(sheetDdb)"
2011
- (close)="onClose()"
2012
- (click)="$event.stopPropagation()"
2013
- (itemClick)="onActionClick($event, sheet)">
2014
- </kendo-dropdownbutton>
2015
- </ng-template>
2016
- </kendo-tabstrip-tab>
2114
+ <ng-container *ngFor="let sheet of sheets">
2115
+ <kendo-tabstrip-tab
2116
+ *ngIf="sheet.state === 'visible'"
2117
+ [title]="sheet.text"
2118
+ [selected]="sheet.text === activeSheet">
2119
+ <ng-template kendoTabTemplate>
2120
+ <span class="k-link">{{sheet.text}}</span>
2121
+ <kendo-dropdownbutton #sheetDdb
2122
+ fillMode="flat"
2123
+ icon="caret-alt-down"
2124
+ [svgIcon]="caretAltDownIcon"
2125
+ buttonClass="k-menu-button"
2126
+ [data]="sheet.sheetActions"
2127
+ [buttonAttributes]="{'aria-hidden': 'true', 'tabindex': '-1', role: 'presentation'}"
2128
+ (open)="onOpen(sheetDdb)"
2129
+ (close)="onClose()"
2130
+ (click)="$event.stopPropagation()"
2131
+ (itemClick)="onActionClick($event, sheet)">
2132
+ </kendo-dropdownbutton>
2133
+ </ng-template>
2134
+ </kendo-tabstrip-tab>
2135
+ </ng-container>
2017
2136
  </kendo-tabstrip>
2018
- `, 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]" }] });
2137
+ `, 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]" }] });
2019
2138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SheetsBarComponent, decorators: [{
2020
2139
  type: Component,
2021
2140
  args: [{
@@ -2048,25 +2167,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2048
2167
  [scrollable]="{prevButtonIcon: 'caret-alt-left', prevSVGButtonIcon: caretAltLeftIcon, nextButtonIcon: 'caret-alt-right', nextSVGButtonIcon: caretAltRightIcon}"
2049
2168
  class="k-spreadsheet-sheets k-overflow-hidden"
2050
2169
  (tabSelect)="onTabSelect($event)">
2051
- <kendo-tabstrip-tab *ngFor="let sheet of sheets"
2052
- [title]="sheet.text"
2053
- [selected]="sheet.text === activeSheet">
2054
- <ng-template kendoTabTemplate>
2055
- <span class="k-link">{{sheet.text}}</span>
2056
- <kendo-dropdownbutton #sheetDdb
2057
- fillMode="flat"
2058
- icon="caret-alt-down"
2059
- [svgIcon]="caretAltDownIcon"
2060
- buttonClass="k-menu-button"
2061
- [data]="sheet.sheetActions"
2062
- [buttonAttributes]="{'aria-hidden': 'true', 'tabindex': '-1', role: 'presentation'}"
2063
- (open)="onOpen(sheetDdb)"
2064
- (close)="onClose()"
2065
- (click)="$event.stopPropagation()"
2066
- (itemClick)="onActionClick($event, sheet)">
2067
- </kendo-dropdownbutton>
2068
- </ng-template>
2069
- </kendo-tabstrip-tab>
2170
+ <ng-container *ngFor="let sheet of sheets">
2171
+ <kendo-tabstrip-tab
2172
+ *ngIf="sheet.state === 'visible'"
2173
+ [title]="sheet.text"
2174
+ [selected]="sheet.text === activeSheet">
2175
+ <ng-template kendoTabTemplate>
2176
+ <span class="k-link">{{sheet.text}}</span>
2177
+ <kendo-dropdownbutton #sheetDdb
2178
+ fillMode="flat"
2179
+ icon="caret-alt-down"
2180
+ [svgIcon]="caretAltDownIcon"
2181
+ buttonClass="k-menu-button"
2182
+ [data]="sheet.sheetActions"
2183
+ [buttonAttributes]="{'aria-hidden': 'true', 'tabindex': '-1', role: 'presentation'}"
2184
+ (open)="onOpen(sheetDdb)"
2185
+ (close)="onClose()"
2186
+ (click)="$event.stopPropagation()"
2187
+ (itemClick)="onActionClick($event, sheet)">
2188
+ </kendo-dropdownbutton>
2189
+ </ng-template>
2190
+ </kendo-tabstrip-tab>
2191
+ </ng-container>
2070
2192
  </kendo-tabstrip>
2071
2193
  `
2072
2194
  }]
@@ -2100,7 +2222,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2100
2222
  class MessagesDirective extends ComponentMessages {
2101
2223
  }
2102
2224
  MessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessagesDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2103
- 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 });
2225
+ 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 });
2104
2226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessagesDirective, decorators: [{
2105
2227
  type: Directive,
2106
2228
  args: [{
@@ -2246,6 +2368,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2246
2368
  type: Input
2247
2369
  }], unhideColumn: [{
2248
2370
  type: Input
2371
+ }], sheetDelete: [{
2372
+ type: Input
2373
+ }], sheetRename: [{
2374
+ type: Input
2375
+ }], sheetHide: [{
2376
+ type: Input
2377
+ }], sheetDuplicate: [{
2378
+ type: Input
2379
+ }], sheetMoveLeft: [{
2380
+ type: Input
2381
+ }], sheetMoveRight: [{
2382
+ type: Input
2383
+ }], invalidNameError: [{
2384
+ type: Input
2249
2385
  }] } });
2250
2386
 
2251
2387
  /**
@@ -2594,9 +2730,7 @@ class SpreadsheetHorizontalTextAlignDirective {
2594
2730
  host.icon = commandIcons[this.commandName];
2595
2731
  host.arrowIcon = true;
2596
2732
  host.fillMode = 'flat';
2597
- host.data = ALIGNS
2598
- .filter(value => value.commandName === 'textAlign')
2599
- .map(item => (Object.assign(Object.assign({}, item), { textKey: localization.get(item.commandId) })));
2733
+ host.data = ALIGNS.flatMap(item => item.commandName === 'textAlign' ? [Object.assign(Object.assign({}, item), { textKey: localization.get(item.commandId) })] : []);
2600
2734
  this.subs.add(host.itemClick.subscribe((e) => this.onItemClick(e)));
2601
2735
  host.title = localization.get(this.commandName);
2602
2736
  host.textField = 'textKey';
@@ -2638,9 +2772,7 @@ class SpreadsheetVerticalTextAlignDirective {
2638
2772
  host.icon = commandIcons[this.commandName];
2639
2773
  host.arrowIcon = true;
2640
2774
  host.fillMode = 'flat';
2641
- host.data = ALIGNS
2642
- .filter(value => value.commandName === 'verticalAlign')
2643
- .map(item => (Object.assign(Object.assign({}, item), { textKey: localization.get(item.commandId) })));
2775
+ host.data = ALIGNS.flatMap(item => item.commandName === 'verticalAlign' ? [Object.assign(Object.assign({}, item), { textKey: localization.get(item.commandId) })] : []);
2644
2776
  this.subs.add(host.itemClick.subscribe((e) => this.onItemClick(e)));
2645
2777
  host.title = localization.get(this.commandName);
2646
2778
  host.textField = 'textKey';
@@ -3108,6 +3240,13 @@ class SpreadsheetComponent {
3108
3240
  * @default false
3109
3241
  */
3110
3242
  this.overflow = false;
3243
+ /**
3244
+ * Sets the height of the formula list container.
3245
+ * Accepts same values as the CSS [`style.height`](https://developer.mozilla.org/en-US/docs/Web/CSS/height) property.
3246
+ *
3247
+ * @default '300px'
3248
+ */
3249
+ this.formulaListMaxHeight = '300px';
3111
3250
  /**
3112
3251
  * The number of columns in the document.
3113
3252
  *
@@ -3179,6 +3318,16 @@ class SpreadsheetComponent {
3179
3318
  this.showLicenseWatermark = false;
3180
3319
  this.contextMenuItems = [];
3181
3320
  this.subs = new Subscription();
3321
+ /**
3322
+ * @hidden
3323
+ */
3324
+ this.onKeyDown = (e) => {
3325
+ const isCtrl = e.ctrlKey || e.metaKey;
3326
+ const shift = e.shiftKey;
3327
+ if (isCtrl && shift && e.keyCode === Keys.KeyS) {
3328
+ this.spreadsheetService.onSheetsBarFocus.next();
3329
+ }
3330
+ };
3182
3331
  this.onChange = (e) => {
3183
3332
  hasObservers(this.change) && this.change.emit(e);
3184
3333
  this.spreadsheetService.selectionChanged.next(e.range);
@@ -3273,7 +3422,7 @@ class SpreadsheetComponent {
3273
3422
  * An array which defines the document sheets and their content.
3274
3423
  */
3275
3424
  set sheets(value) {
3276
- const items = value.map((item, index, items) => (Object.assign(Object.assign({}, item), { inEdit: false, first: index === 0, last: index === items.length - 1, text: item.name, active: (item.name === this.activeSheet) || items.length === 1, index, sheetActions: getSheetActions(index, items) })));
3425
+ const items = value.map((item, index, items) => (Object.assign(Object.assign({}, item), { state: item.state || 'visible', inEdit: false, first: index === 0, last: index === items.length - 1, text: item.name, active: (item.name === this.activeSheet) || items.length === 1, index })));
3277
3426
  this._sheetsInfo = items;
3278
3427
  }
3279
3428
  get sheetsInfo() {
@@ -3295,6 +3444,7 @@ class SpreadsheetComponent {
3295
3444
  spreadsheet.bind('changeFormat', this.onChangeFormat);
3296
3445
  spreadsheet.bind('excelImport', this.onExcelImport);
3297
3446
  spreadsheet.bind('excelExport', this.onExcelExport);
3447
+ spreadsheet.bind('keydown', this.onKeyDown);
3298
3448
  spreadsheet.view.bind('update', this.updateState);
3299
3449
  spreadsheet.view.bind('message', this.onMessage);
3300
3450
  spreadsheet.bind('contextmenu', this.onContextMenu.bind(this));
@@ -3306,7 +3456,7 @@ class SpreadsheetComponent {
3306
3456
  if (!this.sheetsInfo) {
3307
3457
  this.ngZone.run(() => {
3308
3458
  const defaultSheetDescriptors = mapToSheetDescriptor([spreadsheet === null || spreadsheet === void 0 ? void 0 : spreadsheet.activeSheet()]);
3309
- this._sheetsInfo = [Object.assign(Object.assign({ text: this.spreadsheetService.currentActiveSheet, first: true, last: true }, defaultSheetDescriptors), { sheetActions: getSheetActions(0, defaultSheetDescriptors) })];
3459
+ this._sheetsInfo = [Object.assign(Object.assign({ text: this.spreadsheetService.currentActiveSheet, first: true, last: true, state: 'visible' }, defaultSheetDescriptors), { sheetActions: getSheetActions(defaultSheetDescriptors).map(item => (Object.assign(Object.assign({}, item), { text: this.messageFor(item.messageKey) }))) })];
3310
3460
  });
3311
3461
  }
3312
3462
  });
@@ -3612,7 +3762,7 @@ class SpreadsheetComponent {
3612
3762
  }
3613
3763
  }
3614
3764
  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 });
3615
- 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: [
3765
+ 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: [
3616
3766
  SpreadsheetLocalizationService,
3617
3767
  {
3618
3768
  provide: LocalizationService,
@@ -3767,7 +3917,21 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3767
3917
  i18n-hideColumn="kendo.spreadsheet.hideColumn|The Hide column command text."
3768
3918
  hideColumn="Hide"
3769
3919
  i18n-unhideColumn="kendo.spreadsheet.unhideColumn|The Unhide column command text."
3770
- unhideColumn="Unhide">
3920
+ unhideColumn="Unhide"
3921
+ i18n-sheetDelete="kendo.spreadsheet.sheetDelete|The text of the Sheet menu Delete option."
3922
+ sheetDelete="Delete"
3923
+ i18n-sheetRename="kendo.spreadsheet.sheetRename|The text of the Sheet menu Rename option."
3924
+ sheetRename="Rename"
3925
+ i18n-sheetDuplicate="kendo.spreadsheet.sheetDuplicate|The text of the Sheet menu Duplicate option."
3926
+ sheetDuplicate="Duplicate"
3927
+ i18n-sheetHide="kendo.spreadsheet.sheetHide|The text of the Sheet menu Hide option."
3928
+ sheetHide="Hide"
3929
+ i18n-sheetMoveLeft="kendo.spreadsheet.sheetMoveLeft|The text of the Sheet menu Move Left option."
3930
+ sheetMoveLeft="Move Left"
3931
+ i18n-sheetMoveRight="kendo.spreadsheet.sheetMoveRight|The text of the Sheet menu Move Right option."
3932
+ sheetMoveRight="Move Right"
3933
+ i18n-invalidNameError="kendo.spreadsheet.invalidNameError|The content of the dialog that warns about invalid name input."
3934
+ invalidNameError="{{ 'Invalid name: {inputValue}' }}">
3771
3935
  </ng-container>
3772
3936
  <div class="k-spreadsheet-header">
3773
3937
  <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
@@ -3848,7 +4012,11 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3848
4012
  [svgIcon]="formulaFxIcon">
3849
4013
  </kendo-icon-wrapper>
3850
4014
  <span class="k-separator k-separator-vertical"></span>
3851
- <div #formulaBar kendoSpreadsheetFormulaInput class="k-textbox k-input k-input-md k-input-flat k-rounded-md"></div>
4015
+ <div
4016
+ #formulaBar
4017
+ kendoSpreadsheetFormulaInput
4018
+ [formulaListMaxHeight]="formulaListMaxHeight"
4019
+ class="k-textbox k-input k-input-md k-input-flat k-rounded-md"></div>
3852
4020
  </div>
3853
4021
  </div>
3854
4022
  <div class="k-spreadsheet-view">
@@ -3872,7 +4040,7 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3872
4040
  (select)="onContextMenuSelect($event)"></kendo-contextmenu>
3873
4041
 
3874
4042
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3875
- `, 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]" }] });
4043
+ `, 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"] }] });
3876
4044
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SpreadsheetComponent, decorators: [{
3877
4045
  type: Component,
3878
4046
  args: [{
@@ -4034,7 +4202,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4034
4202
  i18n-hideColumn="kendo.spreadsheet.hideColumn|The Hide column command text."
4035
4203
  hideColumn="Hide"
4036
4204
  i18n-unhideColumn="kendo.spreadsheet.unhideColumn|The Unhide column command text."
4037
- unhideColumn="Unhide">
4205
+ unhideColumn="Unhide"
4206
+ i18n-sheetDelete="kendo.spreadsheet.sheetDelete|The text of the Sheet menu Delete option."
4207
+ sheetDelete="Delete"
4208
+ i18n-sheetRename="kendo.spreadsheet.sheetRename|The text of the Sheet menu Rename option."
4209
+ sheetRename="Rename"
4210
+ i18n-sheetDuplicate="kendo.spreadsheet.sheetDuplicate|The text of the Sheet menu Duplicate option."
4211
+ sheetDuplicate="Duplicate"
4212
+ i18n-sheetHide="kendo.spreadsheet.sheetHide|The text of the Sheet menu Hide option."
4213
+ sheetHide="Hide"
4214
+ i18n-sheetMoveLeft="kendo.spreadsheet.sheetMoveLeft|The text of the Sheet menu Move Left option."
4215
+ sheetMoveLeft="Move Left"
4216
+ i18n-sheetMoveRight="kendo.spreadsheet.sheetMoveRight|The text of the Sheet menu Move Right option."
4217
+ sheetMoveRight="Move Right"
4218
+ i18n-invalidNameError="kendo.spreadsheet.invalidNameError|The content of the dialog that warns about invalid name input."
4219
+ invalidNameError="{{ 'Invalid name: {inputValue}' }}">
4038
4220
  </ng-container>
4039
4221
  <div class="k-spreadsheet-header">
4040
4222
  <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
@@ -4115,7 +4297,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4115
4297
  [svgIcon]="formulaFxIcon">
4116
4298
  </kendo-icon-wrapper>
4117
4299
  <span class="k-separator k-separator-vertical"></span>
4118
- <div #formulaBar kendoSpreadsheetFormulaInput class="k-textbox k-input k-input-md k-input-flat k-rounded-md"></div>
4300
+ <div
4301
+ #formulaBar
4302
+ kendoSpreadsheetFormulaInput
4303
+ [formulaListMaxHeight]="formulaListMaxHeight"
4304
+ class="k-textbox k-input k-input-md k-input-flat k-rounded-md"></div>
4119
4305
  </div>
4120
4306
  </div>
4121
4307
  <div class="k-spreadsheet-view">
@@ -4166,6 +4352,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4166
4352
  type: Input
4167
4353
  }], overflow: [{
4168
4354
  type: Input
4355
+ }], formulaListMaxHeight: [{
4356
+ type: Input
4169
4357
  }], activeSheet: [{
4170
4358
  type: Input
4171
4359
  }], sheets: [{