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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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, plusIcon, menuIcon, caretAltDownIcon, caretAltLeftIcon, caretAltRightIcon, eyeIcon } from '@progress/kendo-svg-icons';
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';
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';
@@ -23,18 +23,18 @@ import { CommonModule } from '@angular/common';
23
23
  import { take, map } from 'rxjs/operators';
24
24
  import * as i1$1 from '@progress/kendo-angular-dialog';
25
25
  import { DialogContentBase, DialogModule } from '@progress/kendo-angular-dialog';
26
- import * as i6$1 from '@progress/kendo-angular-menu';
27
- import { MenuModule } from '@progress/kendo-angular-menu';
26
+ import * as i7$1 from '@progress/kendo-angular-menu';
27
+ import { MenusModule } from '@progress/kendo-angular-menu';
28
+ import * as i2$1 from '@progress/kendo-angular-label';
29
+ import { LabelModule } from '@progress/kendo-angular-label';
30
+ import * as i5 from '@progress/kendo-angular-inputs';
31
+ import { InputsModule } from '@progress/kendo-angular-inputs';
28
32
  import * as i1$2 from '@progress/kendo-angular-toolbar';
29
33
  import { ToolBarToolComponent, ToolBarComponent, ToolBarModule } from '@progress/kendo-angular-toolbar';
30
34
  import * as i4 from '@progress/kendo-angular-buttons';
31
35
  import { ButtonsModule } from '@progress/kendo-angular-buttons';
32
36
  import * as i1$3 from '@progress/kendo-angular-dropdowns';
33
37
  import { DropDownListComponent, ComboBoxModule, DropDownListModule } from '@progress/kendo-angular-dropdowns';
34
- import * as i5 from '@progress/kendo-angular-inputs';
35
- import { InputsModule } from '@progress/kendo-angular-inputs';
36
- import * as i2$1 from '@progress/kendo-angular-label';
37
- import { LabelModule } from '@progress/kendo-angular-label';
38
38
  import * as i5$1 from '@progress/kendo-angular-layout';
39
39
  import { TabStripModule } from '@progress/kendo-angular-layout';
40
40
  import { saveAs } from '@progress/kendo-file-saver';
@@ -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: 1701270719,
51
- version: '14.2.0',
50
+ publishDate: 1701695065,
51
+ version: '14.3.0-develop.1',
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
 
@@ -261,11 +261,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
261
261
  * @hidden
262
262
  */
263
263
  class FormulaInputDirective {
264
- constructor(element, popupService, spreadsheetService) {
264
+ constructor(element, popupService, spreadsheetService, localization) {
265
265
  this.element = element;
266
266
  this.popupService = popupService;
267
267
  this.spreadsheetService = spreadsheetService;
268
+ this.localization = localization;
268
269
  this.hostClasses = true;
270
+ this.role = 'combobox';
269
271
  this.ariaHasPopup = 'menu';
270
272
  this.ariaExpanded = 'false';
271
273
  this.focusedItem = () => this.list?.element.nativeElement.querySelector('.k-focus');
@@ -293,6 +295,9 @@ class FormulaInputDirective {
293
295
  }
294
296
  };
295
297
  }
298
+ get title() {
299
+ return this.localization.get('formulaInput');
300
+ }
296
301
  get ariaControls() {
297
302
  return this.ariaExpanded === 'true' ? this.spreadsheetService.formulaListId : null;
298
303
  }
@@ -368,16 +373,22 @@ class FormulaInputDirective {
368
373
  };
369
374
  }
370
375
  }
371
- 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 }], target: i0.ɵɵFactoryTarget.Directive });
372
- 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.aria-haspopup": "this.ariaHasPopup", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-controls": "this.ariaControls" } }, ngImport: i0 });
376
+ 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 });
373
378
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormulaInputDirective, decorators: [{
374
379
  type: Directive,
375
380
  args: [{
376
381
  selector: '[kendoSpreadsheetFormulaInput]',
377
382
  }]
378
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.PopupService }, { type: SpreadsheetService }]; }, propDecorators: { hostClasses: [{
383
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.PopupService }, { type: SpreadsheetService }, { type: SpreadsheetLocalizationService }]; }, propDecorators: { hostClasses: [{
379
384
  type: HostBinding,
380
385
  args: ['class.k-spreadsheet-formula-input']
386
+ }], title: [{
387
+ type: HostBinding,
388
+ args: ['attr.title']
389
+ }], role: [{
390
+ type: HostBinding,
391
+ args: ['attr.role']
381
392
  }], ariaHasPopup: [{
382
393
  type: HostBinding,
383
394
  args: ['attr.aria-haspopup']
@@ -534,7 +545,14 @@ const commandIcons = {
534
545
  increaseFontSize: 'font-grow',
535
546
  decreaseFontSize: 'font-shrink',
536
547
  increaseDecimal: 'decimal-increase',
537
- decreaseDecimal: 'decimal-decrease'
548
+ decreaseDecimal: 'decimal-decrease',
549
+ copy: 'copy',
550
+ cut: 'cut',
551
+ paste: 'clipboard',
552
+ hideRow: 'eye-slash',
553
+ unhideRow: 'eye',
554
+ hideColumn: 'eye-slash',
555
+ unhideColumn: 'eye'
538
556
  };
539
557
  /**
540
558
  * @hidden
@@ -579,9 +597,56 @@ const commandSVGIcons = {
579
597
  increaseFontSize: fontGrowIcon,
580
598
  decreaseFontSize: fontShrinkIcon,
581
599
  decreaseDecimal: decimalDecreaseIcon,
582
- increaseDecimal: decimalIncreaseIcon
600
+ increaseDecimal: decimalIncreaseIcon,
601
+ copy: copyIcon,
602
+ cut: cutIcon,
603
+ paste: clipboardIcon,
604
+ hideRow: eyeSlashIcon,
605
+ unhideRow: eyeIcon,
606
+ hideColumn: eyeSlashIcon,
607
+ unhideColumn: eyeIcon
583
608
  };
584
609
 
610
+ /**
611
+ * @hidden
612
+ */
613
+ class InsertLinkDialogComponent extends DialogContentBase {
614
+ constructor(dialog) {
615
+ super(dialog);
616
+ this.dialog = dialog;
617
+ this.urlLink = '';
618
+ }
619
+ setData(args) {
620
+ this.urlLink = args.link;
621
+ }
622
+ }
623
+ InsertLinkDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InsertLinkDialogComponent, deps: [{ token: i1$1.DialogRef }], target: i0.ɵɵFactoryTarget.Component });
624
+ InsertLinkDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: InsertLinkDialogComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
625
+ <form class="k-form k-form-md" method="dialog">
626
+ <div class="k-form-field">
627
+ <kendo-label [for]="textbox" text="URL"></kendo-label>
628
+ <kendo-textbox #textbox
629
+ [(value)]="urlLink">
630
+ </kendo-textbox>
631
+ </div>
632
+ </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"] }] });
634
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InsertLinkDialogComponent, decorators: [{
635
+ type: Component,
636
+ args: [{
637
+ template: `
638
+ <form class="k-form k-form-md" method="dialog">
639
+ <div class="k-form-field">
640
+ <kendo-label [for]="textbox" text="URL"></kendo-label>
641
+ <kendo-textbox #textbox
642
+ [(value)]="urlLink">
643
+ </kendo-textbox>
644
+ </div>
645
+ </form>
646
+ `
647
+ }]
648
+ }], ctorParameters: function () { return [{ type: i1$1.DialogRef }]; } });
649
+
585
650
  /**
586
651
  * @hidden
587
652
  */
@@ -1399,7 +1464,7 @@ SpreadsheetForeColorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "1
1399
1464
  [tabindex]="tabindex"
1400
1465
  role="menuitem"
1401
1466
  class="k-item k-menu-item"
1402
- (click)="openDialog();">
1467
+ (click)="openDialog()">
1403
1468
  <span
1404
1469
  class="k-link k-menu-link">
1405
1470
  <kendo-icon-wrapper [name]="icon" [svgIcon]="svgIcon"></kendo-icon-wrapper>
@@ -1433,7 +1498,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1433
1498
  [tabindex]="tabindex"
1434
1499
  role="menuitem"
1435
1500
  class="k-item k-menu-item"
1436
- (click)="openDialog();">
1501
+ (click)="openDialog()">
1437
1502
  <span
1438
1503
  class="k-link k-menu-link">
1439
1504
  <kendo-icon-wrapper [name]="icon" [svgIcon]="svgIcon"></kendo-icon-wrapper>
@@ -1478,7 +1543,7 @@ SpreadsheetBackColorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "1
1478
1543
  [tabindex]="tabindex"
1479
1544
  role="menuitem"
1480
1545
  class="k-item k-menu-item"
1481
- (click)="openDialog();">
1546
+ (click)="openDialog()">
1482
1547
  <span
1483
1548
  class="k-link k-menu-link">
1484
1549
  <kendo-icon-wrapper [name]="icon" [svgIcon]="svgIcon"></kendo-icon-wrapper>
@@ -1512,7 +1577,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1512
1577
  [tabindex]="tabindex"
1513
1578
  role="menuitem"
1514
1579
  class="k-item k-menu-item"
1515
- (click)="openDialog();">
1580
+ (click)="openDialog()">
1516
1581
  <span
1517
1582
  class="k-link k-menu-link">
1518
1583
  <kendo-icon-wrapper [name]="icon" [svgIcon]="svgIcon"></kendo-icon-wrapper>
@@ -1531,20 +1596,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1531
1596
  * @hidden
1532
1597
  */
1533
1598
  class NameBoxComponent {
1534
- constructor(ngZone, host, localization) {
1599
+ constructor(ngZone, host, localization, renderer) {
1535
1600
  this.ngZone = ngZone;
1536
1601
  this.host = host;
1537
1602
  this.localization = localization;
1603
+ this.renderer = renderer;
1538
1604
  this.hostClass = true;
1539
1605
  this.valueNormalizer = (text) => text.pipe(map((content) => ({ name: content })));
1540
1606
  }
1541
1607
  keyDownHandler() {
1542
1608
  const editor = this.spreadsheetWidget.view.nameEditor;
1543
1609
  if (editor) {
1544
- const name = this.host.nativeElement.querySelector('.k-input-inner').value;
1610
+ const name = this.inputElement.value;
1545
1611
  editor.trigger('enter', { value: name });
1546
1612
  }
1547
1613
  }
1614
+ ngAfterViewInit() {
1615
+ this.renderer.setAttribute(this.inputElement, 'title', this.title);
1616
+ this.renderer.setAttribute(this.inputElement, 'aria-label', this.title);
1617
+ }
1618
+ get inputElement() {
1619
+ return this.host.nativeElement.querySelector('.k-input-inner');
1620
+ }
1548
1621
  get current() {
1549
1622
  return {
1550
1623
  value: (val) => {
@@ -1581,7 +1654,7 @@ class NameBoxComponent {
1581
1654
  }
1582
1655
  ;
1583
1656
  }
1584
- NameBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NameBoxComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: SpreadsheetLocalizationService }], target: i0.ɵɵFactoryTarget.Component });
1657
+ NameBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NameBoxComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: SpreadsheetLocalizationService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
1585
1658
  NameBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: NameBoxComponent, selector: "[kendoSpreadsheetNameBox]", inputs: { data: "data", spreadsheetWidget: "spreadsheetWidget" }, host: { listeners: { "keydown.enter": "keyDownHandler()" }, properties: { "class.k-spreadsheet-name-editor": "this.hostClass" } }, viewQueries: [{ propertyName: "combobox", first: true, predicate: ["combobox"], descendants: true }], ngImport: i0, template: `
1586
1659
  <kendo-combobox #combobox
1587
1660
  [popupSettings]="{popupClass: 'k-spreadsheet-names-popup'}"
@@ -1619,7 +1692,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1619
1692
  ></kendo-combobox>
1620
1693
  `
1621
1694
  }]
1622
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: SpreadsheetLocalizationService }]; }, propDecorators: { hostClass: [{
1695
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: SpreadsheetLocalizationService }, { type: i0.Renderer2 }]; }, propDecorators: { hostClass: [{
1623
1696
  type: HostBinding,
1624
1697
  args: ['class.k-spreadsheet-name-editor']
1625
1698
  }], keyDownHandler: [{
@@ -2013,7 +2086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2013
2086
  class MessagesDirective extends ComponentMessages {
2014
2087
  }
2015
2088
  MessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessagesDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2016
- 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", 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" }, usesInheritance: true, ngImport: i0 });
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 });
2017
2090
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessagesDirective, decorators: [{
2018
2091
  type: Directive,
2019
2092
  args: [{
@@ -2105,6 +2178,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2105
2178
  type: Input
2106
2179
  }], nameBox: [{
2107
2180
  type: Input
2181
+ }], formulaInput: [{
2182
+ type: Input
2108
2183
  }], addSheet: [{
2109
2184
  type: Input
2110
2185
  }], sheetsMenu: [{
@@ -2143,6 +2218,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2143
2218
  type: Input
2144
2219
  }], duplicateSheetName: [{
2145
2220
  type: Input
2221
+ }], copy: [{
2222
+ type: Input
2223
+ }], cut: [{
2224
+ type: Input
2225
+ }], paste: [{
2226
+ type: Input
2227
+ }], hideRow: [{
2228
+ type: Input
2229
+ }], unhideRow: [{
2230
+ type: Input
2231
+ }], hideColumn: [{
2232
+ type: Input
2233
+ }], unhideColumn: [{
2234
+ type: Input
2146
2235
  }] } });
2147
2236
 
2148
2237
  /**
@@ -2644,46 +2733,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2644
2733
  }]
2645
2734
  }], ctorParameters: function () { return [{ type: i1$2.ToolBarDropDownButtonComponent }, { type: SpreadsheetLocalizationService }, { type: SpreadsheetService }, { type: SpreadsheetToolsService }]; } });
2646
2735
 
2647
- /**
2648
- * @hidden
2649
- */
2650
- class InsertLinkDialogComponent extends DialogContentBase {
2651
- constructor(dialog) {
2652
- super(dialog);
2653
- this.dialog = dialog;
2654
- this.urlLink = '';
2655
- }
2656
- setData(args) {
2657
- this.urlLink = args.link;
2658
- }
2659
- }
2660
- InsertLinkDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InsertLinkDialogComponent, deps: [{ token: i1$1.DialogRef }], target: i0.ɵɵFactoryTarget.Component });
2661
- InsertLinkDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: InsertLinkDialogComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
2662
- <form class="k-form k-form-md" method="dialog">
2663
- <div class="k-form-field">
2664
- <kendo-label [for]="textbox" text="URL"></kendo-label>
2665
- <kendo-textbox #textbox
2666
- [(value)]="urlLink">
2667
- </kendo-textbox>
2668
- </div>
2669
- </form>
2670
- `, 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"] }] });
2671
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InsertLinkDialogComponent, decorators: [{
2672
- type: Component,
2673
- args: [{
2674
- template: `
2675
- <form class="k-form k-form-md" method="dialog">
2676
- <div class="k-form-field">
2677
- <kendo-label [for]="textbox" text="URL"></kendo-label>
2678
- <kendo-textbox #textbox
2679
- [(value)]="urlLink">
2680
- </kendo-textbox>
2681
- </div>
2682
- </form>
2683
- `
2684
- }]
2685
- }], ctorParameters: function () { return [{ type: i1$1.DialogRef }]; } });
2686
-
2687
2736
  /**
2688
2737
  * @hidden
2689
2738
  */
@@ -2693,7 +2742,10 @@ class SpreadsheetInsertLinkDirective extends SpreadsheetCommandButton {
2693
2742
  command: 'HyperlinkCommand'
2694
2743
  });
2695
2744
  this.dialogService = dialogService;
2696
- spreadsheetService.selectionChanged.subscribe(range => this.currentRange = range);
2745
+ this.subs.add(spreadsheetService.selectionChanged.subscribe(range => this.currentRange = range));
2746
+ }
2747
+ ngOnDestroy() {
2748
+ this.subs.unsubscribe();
2697
2749
  }
2698
2750
  clickHandler() {
2699
2751
  const sheet = this.spreadsheetService.spreadsheet.activeSheet();
@@ -3026,7 +3078,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3026
3078
  * Represents the [Kendo UI Spreadsheet component for Angular]({% slug overview_spreadsheet %}).
3027
3079
  */
3028
3080
  class SpreadsheetComponent {
3029
- constructor(ngZone, intl, host, localization, spreadsheetService, toolsService, errorService) {
3081
+ constructor(ngZone, intl, host, localization, spreadsheetService, toolsService, errorService, dialogService) {
3030
3082
  this.ngZone = ngZone;
3031
3083
  this.intl = intl;
3032
3084
  this.host = host;
@@ -3034,6 +3086,7 @@ class SpreadsheetComponent {
3034
3086
  this.spreadsheetService = spreadsheetService;
3035
3087
  this.toolsService = toolsService;
3036
3088
  this.errorService = errorService;
3089
+ this.dialogService = dialogService;
3037
3090
  this.hostClass = true;
3038
3091
  this.role = 'application';
3039
3092
  /**
@@ -3109,10 +3162,9 @@ class SpreadsheetComponent {
3109
3162
  this.formulaFxIcon = formulaFxIcon;
3110
3163
  this.folderOpenIcon = folderOpenIcon;
3111
3164
  this.downloadIcon = downloadIcon;
3112
- /**
3113
- * @hidden
3114
- */
3115
3165
  this.showLicenseWatermark = false;
3166
+ this.contextMenuItems = [];
3167
+ this.subs = new Subscription();
3116
3168
  this.onChange = (e) => {
3117
3169
  hasObservers(this.change) && this.change.emit(e);
3118
3170
  this.spreadsheetService.selectionChanged.next(e.range);
@@ -3178,7 +3230,7 @@ class SpreadsheetComponent {
3178
3230
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
3179
3231
  const normalizedItems = items.map(item => ({
3180
3232
  active: item.active,
3181
- text: this.messageFor(item.id),
3233
+ text: item.id === 'format' ? this.messageFor('formatTab') : this.messageFor(item.id),
3182
3234
  cssClass: item.active ? 'k-active' : null,
3183
3235
  id: item.id
3184
3236
  }));
@@ -3236,6 +3288,7 @@ class SpreadsheetComponent {
3236
3288
  spreadsheet.bind('excelExport', this.onExcelExport);
3237
3289
  spreadsheet.view.bind('update', this.updateState);
3238
3290
  spreadsheet.view.bind('message', this.onMessage);
3291
+ spreadsheet.bind('contextmenu', this.onContextMenu.bind(this));
3239
3292
  const sheet = spreadsheet.activeSheet();
3240
3293
  if (sheet) {
3241
3294
  this.updateState({ range: sheet.range(sheet.activeCell()) });
@@ -3248,8 +3301,9 @@ class SpreadsheetComponent {
3248
3301
  });
3249
3302
  }
3250
3303
  });
3251
- this.spreadsheetService.sheetsChanged.subscribe(this.onSheetsChanged.bind(this));
3252
- this.spreadsheetService.activeSheetChanged.subscribe(this.onActiveSheetChanged.bind(this));
3304
+ this.subs.add(this.spreadsheetService.sheetsChanged.subscribe(this.onSheetsChanged.bind(this)));
3305
+ this.subs.add(this.spreadsheetService.activeSheetChanged.subscribe(this.onActiveSheetChanged.bind(this)));
3306
+ this.subs.add(this.spreadsheetService.selectionChanged.subscribe(range => this.currentRange = range));
3253
3307
  this.spreadsheetService.dialogContainer = this.dialogContainer;
3254
3308
  });
3255
3309
  }
@@ -3273,6 +3327,85 @@ class SpreadsheetComponent {
3273
3327
  this.spreadsheetWidget.fromJSON(newOptions);
3274
3328
  }
3275
3329
  }
3330
+ ngOnDestroy() {
3331
+ this.subs.unsubscribe();
3332
+ }
3333
+ /**
3334
+ * @hidden
3335
+ */
3336
+ onContextMenu(e) {
3337
+ if (e.targetType === 'topcorner') {
3338
+ return;
3339
+ }
3340
+ const selection = this.spreadsheetWidget.activeSheet().select();
3341
+ const { topLeft, bottomRight } = selection;
3342
+ const isRange = e.targetType === 'cell' && (topLeft.row !== bottomRight.row || topLeft.col !== bottomRight.col);
3343
+ const targetType = isRange ? 'range' : e.targetType;
3344
+ this.contextMenuItems = this.contextMenuItemsForTarget(targetType, e.showUnhide, e.showUnmerge);
3345
+ this.contextMenu.show({ top: e.originalEvent.pageY, left: e.originalEvent.pageX });
3346
+ }
3347
+ /**
3348
+ * @hidden
3349
+ */
3350
+ onContextMenuSelect(e) {
3351
+ let command;
3352
+ switch (e.item.id) {
3353
+ case 'cut':
3354
+ command = { command: 'ToolbarCutCommand', options: { workbook: this.spreadsheetWidget.workbook } };
3355
+ break;
3356
+ case 'copy':
3357
+ command = { command: 'ToolbarCopyCommand', options: { workbook: this.spreadsheetWidget.workbook } };
3358
+ break;
3359
+ case 'unmerge':
3360
+ command = { command: 'MergeCellCommand', options: { value: 'unmerge' } };
3361
+ break;
3362
+ case 'mergeAll':
3363
+ command = { command: 'MergeCellCommand', options: { value: 'cells' } };
3364
+ break;
3365
+ case 'mergeHorizontally':
3366
+ command = { command: 'MergeCellCommand', options: { value: 'horizontally' } };
3367
+ break;
3368
+ case 'mergeVertically':
3369
+ command = { command: 'MergeCellCommand', options: { value: 'vertically' } };
3370
+ break;
3371
+ case 'hideRow':
3372
+ command = { command: 'HideLineCommand', options: { axis: 'row' } };
3373
+ break;
3374
+ case 'hideColumn':
3375
+ command = { command: 'HideLineCommand', options: { axis: 'column' } };
3376
+ break;
3377
+ case 'unhideRow':
3378
+ command = { command: 'UnHideLineCommand', options: { axis: 'row' } };
3379
+ break;
3380
+ case 'unhideColumn':
3381
+ command = { command: 'UnHideLineCommand', options: { axis: 'column' } };
3382
+ break;
3383
+ case 'deleteRow':
3384
+ command = { command: 'DeleteRowCommand' };
3385
+ break;
3386
+ case 'deleteColumn':
3387
+ command = { command: 'DeleteColumnCommand' };
3388
+ break;
3389
+ case 'insertLink':
3390
+ this.openLinkDialog();
3391
+ break;
3392
+ case 'addRowAbove':
3393
+ command = { command: 'AddRowCommand', options: { value: 'above' } };
3394
+ break;
3395
+ case 'addRowBelow':
3396
+ command = { command: 'AddRowCommand', options: { value: 'below' } };
3397
+ break;
3398
+ case 'addColumnLeft':
3399
+ command = { command: 'AddColumnCommand', options: { value: 'left' } };
3400
+ break;
3401
+ case 'addColumnRight':
3402
+ command = { command: 'AddColumnCommand', options: { value: 'right' } };
3403
+ break;
3404
+ }
3405
+ if (command) {
3406
+ this.spreadsheetWidget.executeCommand(command);
3407
+ }
3408
+ }
3276
3409
  /**
3277
3410
  * @hidden
3278
3411
  */
@@ -3328,8 +3461,162 @@ class SpreadsheetComponent {
3328
3461
  nameBoxRef: { current: this.nameBoxRef.current }
3329
3462
  };
3330
3463
  }
3464
+ contextMenuItemsForTarget(target, unhide, unmerge) {
3465
+ const commonItems = [{
3466
+ text: this.messageFor('copy'),
3467
+ icon: commandIcons.copy,
3468
+ svgIcon: commandSVGIcons.copy,
3469
+ id: 'copy'
3470
+ }, {
3471
+ text: this.messageFor('cut'),
3472
+ icon: commandIcons.cut,
3473
+ svgIcon: commandSVGIcons.cut,
3474
+ id: 'cut'
3475
+ }, {
3476
+ text: this.messageFor('paste'),
3477
+ icon: commandIcons.paste,
3478
+ svgIcon: commandSVGIcons.paste,
3479
+ id: 'paste',
3480
+ disabled: true
3481
+ }, {
3482
+ separator: true
3483
+ }, {
3484
+ text: this.messageFor('mergeAll'),
3485
+ icon: commandIcons.mergeAll,
3486
+ svgIcon: commandSVGIcons.mergeAll,
3487
+ id: 'mergeAll',
3488
+ }, {
3489
+ text: this.messageFor('mergeHorizontally'),
3490
+ icon: commandIcons.mergeHorizontally,
3491
+ svgIcon: commandSVGIcons.mergeHorizontally,
3492
+ id: 'mergeHorizontally',
3493
+ }, {
3494
+ text: this.messageFor('mergeVertically'),
3495
+ icon: commandIcons.mergeVertically,
3496
+ svgIcon: commandSVGIcons.mergeVertically,
3497
+ id: 'mergeVertically',
3498
+ }, {
3499
+ text: this.messageFor('unmerge'),
3500
+ icon: commandIcons.unmerge,
3501
+ svgIcon: commandSVGIcons.unmerge,
3502
+ id: 'unmerge',
3503
+ disabled: !unmerge
3504
+ }, {
3505
+ separator: true
3506
+ }, {
3507
+ text: this.messageFor('insertLink'),
3508
+ icon: commandIcons.insertLink,
3509
+ svgIcon: commandSVGIcons.insertLink,
3510
+ id: 'insertLink'
3511
+ }];
3512
+ if (target === 'rowheader') {
3513
+ commonItems.push({
3514
+ separator: true
3515
+ }, {
3516
+ text: this.messageFor('addRowAbove'),
3517
+ icon: commandIcons.addRowAbove,
3518
+ svgIcon: commandSVGIcons.addRowAbove,
3519
+ id: 'addRowAbove',
3520
+ }, {
3521
+ text: this.messageFor('addRowBelow'),
3522
+ icon: commandIcons.addRowBelow,
3523
+ svgIcon: commandSVGIcons.addRowBelow,
3524
+ id: 'addRowBelow',
3525
+ }, {
3526
+ text: this.messageFor('deleteRow'),
3527
+ icon: commandIcons.deleteRow,
3528
+ svgIcon: commandSVGIcons.deleteRow,
3529
+ id: 'deleteRow',
3530
+ }, {
3531
+ text: this.messageFor('hideRow'),
3532
+ icon: commandIcons.hideRow,
3533
+ svgIcon: commandSVGIcons.hideRow,
3534
+ id: 'hideRow',
3535
+ }, {
3536
+ text: this.messageFor('unhideRow'),
3537
+ icon: commandIcons.unhideRow,
3538
+ svgIcon: commandSVGIcons.unhideRow,
3539
+ id: 'unhideRow',
3540
+ disabled: !unhide
3541
+ });
3542
+ }
3543
+ if (target === 'columnheader') {
3544
+ commonItems.push({
3545
+ separator: true
3546
+ }, {
3547
+ text: this.messageFor('addColumnLeft'),
3548
+ icon: commandIcons.addColumnLeft,
3549
+ svgIcon: commandSVGIcons.addColumnLeft,
3550
+ id: 'addColumnLeft',
3551
+ }, {
3552
+ text: this.messageFor('addColumnRight'),
3553
+ icon: commandIcons.addColumnRight,
3554
+ svgIcon: commandSVGIcons.addColumnRight,
3555
+ id: 'addColumnRight',
3556
+ }, {
3557
+ text: this.messageFor('deleteColumn'),
3558
+ icon: commandIcons.deleteColumn,
3559
+ svgIcon: commandSVGIcons.deleteColumn,
3560
+ id: 'deleteColumn',
3561
+ }, {
3562
+ text: this.messageFor('hideColumn'),
3563
+ icon: commandIcons.hideColumn,
3564
+ svgIcon: commandSVGIcons.hideColumn,
3565
+ id: 'hideColumn',
3566
+ }, {
3567
+ text: this.messageFor('unhideColumn'),
3568
+ icon: commandIcons.unhideColumn,
3569
+ svgIcon: commandSVGIcons.unhideColumn,
3570
+ id: 'unhideColumn',
3571
+ disabled: !unhide
3572
+ });
3573
+ }
3574
+ return commonItems;
3575
+ }
3576
+ openLinkDialog() {
3577
+ const hasLink = isPresent(this.currentRange?.link());
3578
+ const dialogSettings = {
3579
+ appendTo: this.spreadsheetService.dialogContainer,
3580
+ title: this.localization.get('insertLink'),
3581
+ content: InsertLinkDialogComponent,
3582
+ actions: [{
3583
+ text: this.localization.get('dialogInsert'),
3584
+ themeColor: 'primary'
3585
+ }, {
3586
+ text: this.localization.get('dialogCancel')
3587
+ },
3588
+ 'spacer', {
3589
+ text: this.localization.get('dialogRemoveLink'),
3590
+ themeColor: 'primary',
3591
+ fillMode: 'clear',
3592
+ cssClass: hasLink ? '' : 'k-disabled'
3593
+ }],
3594
+ actionsLayout: 'start',
3595
+ width: 400,
3596
+ autoFocusedElement: '.k-textbox > .k-input-inner'
3597
+ };
3598
+ const dialog = this.dialogService.open(dialogSettings);
3599
+ const dialogInstance = dialog.dialog.instance;
3600
+ const dialogContent = dialog.content.instance;
3601
+ if (hasLink) {
3602
+ dialogContent.setData({ link: this.currentRange?.link() });
3603
+ }
3604
+ dialogInstance.action.pipe(take(1)).subscribe((event) => {
3605
+ if (event.text === this.localization.get('dialogCancel')) {
3606
+ return;
3607
+ }
3608
+ let link = null;
3609
+ if (event.text === this.localization.get('dialogInsert')) {
3610
+ link = dialogContent.urlLink || null;
3611
+ }
3612
+ this.spreadsheetService.spreadsheet.executeCommand({
3613
+ command: 'HyperlinkCommand',
3614
+ options: { link }
3615
+ });
3616
+ });
3617
+ }
3331
3618
  }
3332
- 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 }], target: i0.ɵɵFactoryTarget.Component });
3619
+ 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 });
3333
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: [
3334
3621
  SpreadsheetLocalizationService,
3335
3622
  {
@@ -3343,7 +3630,7 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3343
3630
  SpreadsheetToolsService,
3344
3631
  PopupService,
3345
3632
  ErrorHandlingService
3346
- ], viewQueries: [{ propertyName: "formulaBarInputRef", first: true, predicate: ["formulaBar"], descendants: true, read: FormulaInputDirective }, { propertyName: "formulaCellInputRef", first: true, predicate: ["formulaCell"], descendants: true, read: FormulaInputDirective }, { propertyName: "nameBoxRef", first: true, predicate: ["nameBox"], descendants: true }, { propertyName: "dialogContainer", first: true, predicate: ["dialogContainer"], descendants: true, read: ViewContainerRef }], exportAs: ["kendo-spreadsheet"], usesOnChanges: true, ngImport: i0, template: `
3633
+ ], viewQueries: [{ propertyName: "formulaBarInputRef", first: true, predicate: ["formulaBar"], descendants: true, read: FormulaInputDirective }, { propertyName: "formulaCellInputRef", first: true, predicate: ["formulaCell"], descendants: true, read: FormulaInputDirective }, { propertyName: "nameBoxRef", first: true, predicate: ["nameBox"], descendants: true }, { propertyName: "dialogContainer", first: true, predicate: ["dialogContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true }], exportAs: ["kendo-spreadsheet"], usesOnChanges: true, ngImport: i0, template: `
3347
3634
  <ng-container
3348
3635
  kendoSpreadsheetLocalizedMessages
3349
3636
  i18n-background="kendo.spreadsheet.background|The title of the tool that changes the text background color."
@@ -3454,6 +3741,8 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3454
3741
  delete="Delete Sheet"
3455
3742
  i18n-nameBox="kendo.spreadsheet.nameBox|The title of the Name Box input."
3456
3743
  nameBox="Name Box"
3744
+ i18n-formulaInput="kendo.spreadsheet.formulaInput|The title of the Formula input."
3745
+ formulaInput="Formula Input"
3457
3746
  i18n-addSheet="kendo.spreadsheet.addSheet|The title of the Add new sheet button."
3458
3747
  addSheet="Add New Sheet"
3459
3748
  i18n-sheetsMenu="kendo.spreadsheet.sheetsMenu|The title of the Sheets menu button."
@@ -3470,7 +3759,20 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3470
3759
  dialogError="Error"
3471
3760
  i18n-duplicateSheetName="kendo.spreadsheet.duplicateSheetName|The content of the dialog that warns about duplicated sheet name."
3472
3761
  duplicateSheetName="There is an existing sheet with this name. Please enter another name."
3473
- >
3762
+ i18n-copy="kendo.spreadsheet.copy|The Copy command text."
3763
+ copy="Copy"
3764
+ i18n-cut="kendo.spreadsheet.cut|The Cut command text."
3765
+ cut="Cut"
3766
+ i18n-paste="kendo.spreadsheet.paste|The Paste command text."
3767
+ paste="Paste (use Ctrl/⌘ + V)"
3768
+ i18n-hideRow="kendo.spreadsheet.hideRow|The Hide row command text."
3769
+ hideRow="Hide"
3770
+ i18n-unhideRow="kendo.spreadsheet.unhideRow|The Unhide row command text."
3771
+ unhideRow="Unhide"
3772
+ i18n-hideColumn="kendo.spreadsheet.hideColumn|The Hide column command text."
3773
+ hideColumn="Hide"
3774
+ i18n-unhideColumn="kendo.spreadsheet.unhideColumn|The Unhide column command text."
3775
+ unhideColumn="Unhide">
3474
3776
  </ng-container>
3475
3777
  <div class="k-spreadsheet-header">
3476
3778
  <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
@@ -3569,8 +3871,13 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3569
3871
  </div>
3570
3872
  <ng-container #dialogContainer></ng-container>
3571
3873
 
3874
+ <kendo-contextmenu
3875
+ #contextMenu
3876
+ [items]="contextMenuItems"
3877
+ (select)="onContextMenuSelect($event)"></kendo-contextmenu>
3878
+
3572
3879
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3573
- `, isInline: true, components: [{ type: i6$1.MenuComponent, selector: "kendo-menu", inputs: ["menuItemTemplate", "ariaRole", "menuItemLinkTemplate"], outputs: ["select", "open", "close"], exportAs: ["kendoMenu"] }, { type: i6$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: 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]" }] });
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]" }] });
3574
3881
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SpreadsheetComponent, decorators: [{
3575
3882
  type: Component,
3576
3883
  args: [{
@@ -3701,6 +4008,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3701
4008
  delete="Delete Sheet"
3702
4009
  i18n-nameBox="kendo.spreadsheet.nameBox|The title of the Name Box input."
3703
4010
  nameBox="Name Box"
4011
+ i18n-formulaInput="kendo.spreadsheet.formulaInput|The title of the Formula input."
4012
+ formulaInput="Formula Input"
3704
4013
  i18n-addSheet="kendo.spreadsheet.addSheet|The title of the Add new sheet button."
3705
4014
  addSheet="Add New Sheet"
3706
4015
  i18n-sheetsMenu="kendo.spreadsheet.sheetsMenu|The title of the Sheets menu button."
@@ -3717,7 +4026,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3717
4026
  dialogError="Error"
3718
4027
  i18n-duplicateSheetName="kendo.spreadsheet.duplicateSheetName|The content of the dialog that warns about duplicated sheet name."
3719
4028
  duplicateSheetName="There is an existing sheet with this name. Please enter another name."
3720
- >
4029
+ i18n-copy="kendo.spreadsheet.copy|The Copy command text."
4030
+ copy="Copy"
4031
+ i18n-cut="kendo.spreadsheet.cut|The Cut command text."
4032
+ cut="Cut"
4033
+ i18n-paste="kendo.spreadsheet.paste|The Paste command text."
4034
+ paste="Paste (use Ctrl/⌘ + V)"
4035
+ i18n-hideRow="kendo.spreadsheet.hideRow|The Hide row command text."
4036
+ hideRow="Hide"
4037
+ i18n-unhideRow="kendo.spreadsheet.unhideRow|The Unhide row command text."
4038
+ unhideRow="Unhide"
4039
+ i18n-hideColumn="kendo.spreadsheet.hideColumn|The Hide column command text."
4040
+ hideColumn="Hide"
4041
+ i18n-unhideColumn="kendo.spreadsheet.unhideColumn|The Unhide column command text."
4042
+ unhideColumn="Unhide">
3721
4043
  </ng-container>
3722
4044
  <div class="k-spreadsheet-header">
3723
4045
  <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
@@ -3816,10 +4138,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3816
4138
  </div>
3817
4139
  <ng-container #dialogContainer></ng-container>
3818
4140
 
4141
+ <kendo-contextmenu
4142
+ #contextMenu
4143
+ [items]="contextMenuItems"
4144
+ (select)="onContextMenuSelect($event)"></kendo-contextmenu>
4145
+
3819
4146
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3820
4147
  `,
3821
4148
  }]
3822
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1$4.IntlService }, { type: i0.ElementRef }, { type: i2.LocalizationService }, { type: SpreadsheetService }, { type: SpreadsheetToolsService }, { type: ErrorHandlingService }]; }, propDecorators: { formulaBarInputRef: [{
4149
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1$4.IntlService }, { type: i0.ElementRef }, { type: i2.LocalizationService }, { type: SpreadsheetService }, { type: SpreadsheetToolsService }, { type: ErrorHandlingService }, { type: i1$1.DialogService }]; }, propDecorators: { formulaBarInputRef: [{
3823
4150
  type: ViewChild,
3824
4151
  args: ['formulaBar', { read: FormulaInputDirective }]
3825
4152
  }], formulaCellInputRef: [{
@@ -3831,6 +4158,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3831
4158
  }], dialogContainer: [{
3832
4159
  type: ViewChild,
3833
4160
  args: ['dialogContainer', { read: ViewContainerRef }]
4161
+ }], contextMenu: [{
4162
+ type: ViewChild,
4163
+ args: ['contextMenu']
3834
4164
  }], hostClass: [{
3835
4165
  type: HostBinding,
3836
4166
  args: ['class.k-spreadsheet']
@@ -4088,7 +4418,7 @@ SpreadsheetModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
4088
4418
  EventsModule,
4089
4419
  IconsModule,
4090
4420
  IntlModule,
4091
- MenuModule,
4421
+ MenusModule,
4092
4422
  PopupModule,
4093
4423
  TabStripModule,
4094
4424
  ToolBarModule,
@@ -4134,7 +4464,7 @@ SpreadsheetModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
4134
4464
  EventsModule,
4135
4465
  IconsModule,
4136
4466
  IntlModule,
4137
- MenuModule,
4467
+ MenusModule,
4138
4468
  PopupModule,
4139
4469
  TabStripModule,
4140
4470
  ToolBarModule,
@@ -4156,7 +4486,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4156
4486
  EventsModule,
4157
4487
  IconsModule,
4158
4488
  IntlModule,
4159
- MenuModule,
4489
+ MenusModule,
4160
4490
  PopupModule,
4161
4491
  TabStripModule,
4162
4492
  ToolBarModule,