@progress/kendo-angular-spreadsheet 14.2.1-develop.1 → 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 * 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';
@@ -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 i2$1 from '@progress/kendo-angular-label';
27
+ import { LabelModule } from '@progress/kendo-angular-label';
28
+ import * as i5 from '@progress/kendo-angular-inputs';
29
+ import { InputsModule } from '@progress/kendo-angular-inputs';
30
+ import * as i7$1 from '@progress/kendo-angular-menu';
31
+ import { MenusModule } from '@progress/kendo-angular-menu';
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: 1701342735,
51
- version: '14.2.1-develop.1',
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
 
@@ -554,7 +554,14 @@ const commandIcons = {
554
554
  increaseFontSize: 'font-grow',
555
555
  decreaseFontSize: 'font-shrink',
556
556
  increaseDecimal: 'decimal-increase',
557
- decreaseDecimal: 'decimal-decrease'
557
+ decreaseDecimal: 'decimal-decrease',
558
+ copy: 'copy',
559
+ cut: 'cut',
560
+ paste: 'clipboard',
561
+ hideRow: 'eye-slash',
562
+ unhideRow: 'eye',
563
+ hideColumn: 'eye-slash',
564
+ unhideColumn: 'eye'
558
565
  };
559
566
  /**
560
567
  * @hidden
@@ -599,9 +606,56 @@ const commandSVGIcons = {
599
606
  increaseFontSize: fontGrowIcon,
600
607
  decreaseFontSize: fontShrinkIcon,
601
608
  decreaseDecimal: decimalDecreaseIcon,
602
- increaseDecimal: decimalIncreaseIcon
609
+ increaseDecimal: decimalIncreaseIcon,
610
+ copy: copyIcon,
611
+ cut: cutIcon,
612
+ paste: clipboardIcon,
613
+ hideRow: eyeSlashIcon,
614
+ unhideRow: eyeIcon,
615
+ hideColumn: eyeSlashIcon,
616
+ unhideColumn: eyeIcon
603
617
  };
604
618
 
619
+ /**
620
+ * @hidden
621
+ */
622
+ class InsertLinkDialogComponent extends DialogContentBase {
623
+ constructor(dialog) {
624
+ super(dialog);
625
+ this.dialog = dialog;
626
+ this.urlLink = '';
627
+ }
628
+ setData(args) {
629
+ this.urlLink = args.link;
630
+ }
631
+ }
632
+ 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 });
633
+ InsertLinkDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: InsertLinkDialogComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
634
+ <form class="k-form k-form-md" method="dialog">
635
+ <div class="k-form-field">
636
+ <kendo-label [for]="textbox" text="URL"></kendo-label>
637
+ <kendo-textbox #textbox
638
+ [(value)]="urlLink">
639
+ </kendo-textbox>
640
+ </div>
641
+ </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"] }] });
643
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InsertLinkDialogComponent, decorators: [{
644
+ type: Component,
645
+ args: [{
646
+ template: `
647
+ <form class="k-form k-form-md" method="dialog">
648
+ <div class="k-form-field">
649
+ <kendo-label [for]="textbox" text="URL"></kendo-label>
650
+ <kendo-textbox #textbox
651
+ [(value)]="urlLink">
652
+ </kendo-textbox>
653
+ </div>
654
+ </form>
655
+ `
656
+ }]
657
+ }], ctorParameters: function () { return [{ type: i1$1.DialogRef }]; } });
658
+
605
659
  /**
606
660
  * @hidden
607
661
  */
@@ -2046,7 +2100,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2046
2100
  class MessagesDirective extends ComponentMessages {
2047
2101
  }
2048
2102
  MessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessagesDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2049
- 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" }, usesInheritance: true, ngImport: i0 });
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 });
2050
2104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessagesDirective, decorators: [{
2051
2105
  type: Directive,
2052
2106
  args: [{
@@ -2178,6 +2232,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2178
2232
  type: Input
2179
2233
  }], duplicateSheetName: [{
2180
2234
  type: Input
2235
+ }], copy: [{
2236
+ type: Input
2237
+ }], cut: [{
2238
+ type: Input
2239
+ }], paste: [{
2240
+ type: Input
2241
+ }], hideRow: [{
2242
+ type: Input
2243
+ }], unhideRow: [{
2244
+ type: Input
2245
+ }], hideColumn: [{
2246
+ type: Input
2247
+ }], unhideColumn: [{
2248
+ type: Input
2181
2249
  }] } });
2182
2250
 
2183
2251
  /**
@@ -2678,46 +2746,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2678
2746
  }]
2679
2747
  }], ctorParameters: function () { return [{ type: i1$2.ToolBarDropDownButtonComponent }, { type: SpreadsheetLocalizationService }, { type: SpreadsheetService }, { type: SpreadsheetToolsService }]; } });
2680
2748
 
2681
- /**
2682
- * @hidden
2683
- */
2684
- class InsertLinkDialogComponent extends DialogContentBase {
2685
- constructor(dialog) {
2686
- super(dialog);
2687
- this.dialog = dialog;
2688
- this.urlLink = '';
2689
- }
2690
- setData(args) {
2691
- this.urlLink = args.link;
2692
- }
2693
- }
2694
- 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 });
2695
- InsertLinkDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: InsertLinkDialogComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
2696
- <form class="k-form k-form-md" method="dialog">
2697
- <div class="k-form-field">
2698
- <kendo-label [for]="textbox" text="URL"></kendo-label>
2699
- <kendo-textbox #textbox
2700
- [(value)]="urlLink">
2701
- </kendo-textbox>
2702
- </div>
2703
- </form>
2704
- `, 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"] }] });
2705
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InsertLinkDialogComponent, decorators: [{
2706
- type: Component,
2707
- args: [{
2708
- template: `
2709
- <form class="k-form k-form-md" method="dialog">
2710
- <div class="k-form-field">
2711
- <kendo-label [for]="textbox" text="URL"></kendo-label>
2712
- <kendo-textbox #textbox
2713
- [(value)]="urlLink">
2714
- </kendo-textbox>
2715
- </div>
2716
- </form>
2717
- `
2718
- }]
2719
- }], ctorParameters: function () { return [{ type: i1$1.DialogRef }]; } });
2720
-
2721
2749
  /**
2722
2750
  * @hidden
2723
2751
  */
@@ -2727,7 +2755,10 @@ class SpreadsheetInsertLinkDirective extends SpreadsheetCommandButton {
2727
2755
  command: 'HyperlinkCommand'
2728
2756
  });
2729
2757
  this.dialogService = dialogService;
2730
- spreadsheetService.selectionChanged.subscribe(range => this.currentRange = range);
2758
+ this.subs.add(spreadsheetService.selectionChanged.subscribe(range => this.currentRange = range));
2759
+ }
2760
+ ngOnDestroy() {
2761
+ this.subs.unsubscribe();
2731
2762
  }
2732
2763
  clickHandler() {
2733
2764
  const sheet = this.spreadsheetService.spreadsheet.activeSheet();
@@ -3061,7 +3092,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3061
3092
  * Represents the [Kendo UI Spreadsheet component for Angular]({% slug overview_spreadsheet %}).
3062
3093
  */
3063
3094
  class SpreadsheetComponent {
3064
- constructor(ngZone, intl, host, localization, spreadsheetService, toolsService, errorService) {
3095
+ constructor(ngZone, intl, host, localization, spreadsheetService, toolsService, errorService, dialogService) {
3065
3096
  this.ngZone = ngZone;
3066
3097
  this.intl = intl;
3067
3098
  this.host = host;
@@ -3069,6 +3100,7 @@ class SpreadsheetComponent {
3069
3100
  this.spreadsheetService = spreadsheetService;
3070
3101
  this.toolsService = toolsService;
3071
3102
  this.errorService = errorService;
3103
+ this.dialogService = dialogService;
3072
3104
  this.hostClass = true;
3073
3105
  this.role = 'application';
3074
3106
  /**
@@ -3144,10 +3176,9 @@ class SpreadsheetComponent {
3144
3176
  this.formulaFxIcon = formulaFxIcon;
3145
3177
  this.folderOpenIcon = folderOpenIcon;
3146
3178
  this.downloadIcon = downloadIcon;
3147
- /**
3148
- * @hidden
3149
- */
3150
3179
  this.showLicenseWatermark = false;
3180
+ this.contextMenuItems = [];
3181
+ this.subs = new Subscription();
3151
3182
  this.onChange = (e) => {
3152
3183
  hasObservers(this.change) && this.change.emit(e);
3153
3184
  this.spreadsheetService.selectionChanged.next(e.range);
@@ -3266,6 +3297,7 @@ class SpreadsheetComponent {
3266
3297
  spreadsheet.bind('excelExport', this.onExcelExport);
3267
3298
  spreadsheet.view.bind('update', this.updateState);
3268
3299
  spreadsheet.view.bind('message', this.onMessage);
3300
+ spreadsheet.bind('contextmenu', this.onContextMenu.bind(this));
3269
3301
  const sheet = spreadsheet.activeSheet();
3270
3302
  if (sheet) {
3271
3303
  this.updateState({ range: sheet.range(sheet.activeCell()) });
@@ -3278,8 +3310,9 @@ class SpreadsheetComponent {
3278
3310
  });
3279
3311
  }
3280
3312
  });
3281
- this.spreadsheetService.sheetsChanged.subscribe(this.onSheetsChanged.bind(this));
3282
- this.spreadsheetService.activeSheetChanged.subscribe(this.onActiveSheetChanged.bind(this));
3313
+ this.subs.add(this.spreadsheetService.sheetsChanged.subscribe(this.onSheetsChanged.bind(this)));
3314
+ this.subs.add(this.spreadsheetService.activeSheetChanged.subscribe(this.onActiveSheetChanged.bind(this)));
3315
+ this.subs.add(this.spreadsheetService.selectionChanged.subscribe(range => this.currentRange = range));
3283
3316
  this.spreadsheetService.dialogContainer = this.dialogContainer;
3284
3317
  });
3285
3318
  }
@@ -3303,6 +3336,85 @@ class SpreadsheetComponent {
3303
3336
  this.spreadsheetWidget.fromJSON(newOptions);
3304
3337
  }
3305
3338
  }
3339
+ ngOnDestroy() {
3340
+ this.subs.unsubscribe();
3341
+ }
3342
+ /**
3343
+ * @hidden
3344
+ */
3345
+ onContextMenu(e) {
3346
+ if (e.targetType === 'topcorner') {
3347
+ return;
3348
+ }
3349
+ const selection = this.spreadsheetWidget.activeSheet().select();
3350
+ const { topLeft, bottomRight } = selection;
3351
+ const isRange = e.targetType === 'cell' && (topLeft.row !== bottomRight.row || topLeft.col !== bottomRight.col);
3352
+ const targetType = isRange ? 'range' : e.targetType;
3353
+ this.contextMenuItems = this.contextMenuItemsForTarget(targetType, e.showUnhide, e.showUnmerge);
3354
+ this.contextMenu.show({ top: e.originalEvent.pageY, left: e.originalEvent.pageX });
3355
+ }
3356
+ /**
3357
+ * @hidden
3358
+ */
3359
+ onContextMenuSelect(e) {
3360
+ let command;
3361
+ switch (e.item.id) {
3362
+ case 'cut':
3363
+ command = { command: 'ToolbarCutCommand', options: { workbook: this.spreadsheetWidget.workbook } };
3364
+ break;
3365
+ case 'copy':
3366
+ command = { command: 'ToolbarCopyCommand', options: { workbook: this.spreadsheetWidget.workbook } };
3367
+ break;
3368
+ case 'unmerge':
3369
+ command = { command: 'MergeCellCommand', options: { value: 'unmerge' } };
3370
+ break;
3371
+ case 'mergeAll':
3372
+ command = { command: 'MergeCellCommand', options: { value: 'cells' } };
3373
+ break;
3374
+ case 'mergeHorizontally':
3375
+ command = { command: 'MergeCellCommand', options: { value: 'horizontally' } };
3376
+ break;
3377
+ case 'mergeVertically':
3378
+ command = { command: 'MergeCellCommand', options: { value: 'vertically' } };
3379
+ break;
3380
+ case 'hideRow':
3381
+ command = { command: 'HideLineCommand', options: { axis: 'row' } };
3382
+ break;
3383
+ case 'hideColumn':
3384
+ command = { command: 'HideLineCommand', options: { axis: 'column' } };
3385
+ break;
3386
+ case 'unhideRow':
3387
+ command = { command: 'UnHideLineCommand', options: { axis: 'row' } };
3388
+ break;
3389
+ case 'unhideColumn':
3390
+ command = { command: 'UnHideLineCommand', options: { axis: 'column' } };
3391
+ break;
3392
+ case 'deleteRow':
3393
+ command = { command: 'DeleteRowCommand' };
3394
+ break;
3395
+ case 'deleteColumn':
3396
+ command = { command: 'DeleteColumnCommand' };
3397
+ break;
3398
+ case 'insertLink':
3399
+ this.openLinkDialog();
3400
+ break;
3401
+ case 'addRowAbove':
3402
+ command = { command: 'AddRowCommand', options: { value: 'above' } };
3403
+ break;
3404
+ case 'addRowBelow':
3405
+ command = { command: 'AddRowCommand', options: { value: 'below' } };
3406
+ break;
3407
+ case 'addColumnLeft':
3408
+ command = { command: 'AddColumnCommand', options: { value: 'left' } };
3409
+ break;
3410
+ case 'addColumnRight':
3411
+ command = { command: 'AddColumnCommand', options: { value: 'right' } };
3412
+ break;
3413
+ }
3414
+ if (command) {
3415
+ this.spreadsheetWidget.executeCommand(command);
3416
+ }
3417
+ }
3306
3418
  /**
3307
3419
  * @hidden
3308
3420
  */
@@ -3343,8 +3455,163 @@ class SpreadsheetComponent {
3343
3455
  }
3344
3456
  }), { columns: this.columns, columnWidth: this.columnWidth, defaultCellStyle: this.defaultCellStyle, excel: this.excel, headerHeight: this.headerHeight, headerWidth: this.headerWidth, images: this.images, rowHeight: this.rowHeight, rows: this.rows, formulaBarInputRef: { current: this.formulaBarInputRef.current }, formulaCellInputRef: { current: this.formulaCellInputRef.current }, nameBoxRef: { current: this.nameBoxRef.current } });
3345
3457
  }
3458
+ contextMenuItemsForTarget(target, unhide, unmerge) {
3459
+ const commonItems = [{
3460
+ text: this.messageFor('copy'),
3461
+ icon: commandIcons.copy,
3462
+ svgIcon: commandSVGIcons.copy,
3463
+ id: 'copy'
3464
+ }, {
3465
+ text: this.messageFor('cut'),
3466
+ icon: commandIcons.cut,
3467
+ svgIcon: commandSVGIcons.cut,
3468
+ id: 'cut'
3469
+ }, {
3470
+ text: this.messageFor('paste'),
3471
+ icon: commandIcons.paste,
3472
+ svgIcon: commandSVGIcons.paste,
3473
+ id: 'paste',
3474
+ disabled: true
3475
+ }, {
3476
+ separator: true
3477
+ }, {
3478
+ text: this.messageFor('mergeAll'),
3479
+ icon: commandIcons.mergeAll,
3480
+ svgIcon: commandSVGIcons.mergeAll,
3481
+ id: 'mergeAll',
3482
+ }, {
3483
+ text: this.messageFor('mergeHorizontally'),
3484
+ icon: commandIcons.mergeHorizontally,
3485
+ svgIcon: commandSVGIcons.mergeHorizontally,
3486
+ id: 'mergeHorizontally',
3487
+ }, {
3488
+ text: this.messageFor('mergeVertically'),
3489
+ icon: commandIcons.mergeVertically,
3490
+ svgIcon: commandSVGIcons.mergeVertically,
3491
+ id: 'mergeVertically',
3492
+ }, {
3493
+ text: this.messageFor('unmerge'),
3494
+ icon: commandIcons.unmerge,
3495
+ svgIcon: commandSVGIcons.unmerge,
3496
+ id: 'unmerge',
3497
+ disabled: !unmerge
3498
+ }, {
3499
+ separator: true
3500
+ }, {
3501
+ text: this.messageFor('insertLink'),
3502
+ icon: commandIcons.insertLink,
3503
+ svgIcon: commandSVGIcons.insertLink,
3504
+ id: 'insertLink'
3505
+ }];
3506
+ if (target === 'rowheader') {
3507
+ commonItems.push({
3508
+ separator: true
3509
+ }, {
3510
+ text: this.messageFor('addRowAbove'),
3511
+ icon: commandIcons.addRowAbove,
3512
+ svgIcon: commandSVGIcons.addRowAbove,
3513
+ id: 'addRowAbove',
3514
+ }, {
3515
+ text: this.messageFor('addRowBelow'),
3516
+ icon: commandIcons.addRowBelow,
3517
+ svgIcon: commandSVGIcons.addRowBelow,
3518
+ id: 'addRowBelow',
3519
+ }, {
3520
+ text: this.messageFor('deleteRow'),
3521
+ icon: commandIcons.deleteRow,
3522
+ svgIcon: commandSVGIcons.deleteRow,
3523
+ id: 'deleteRow',
3524
+ }, {
3525
+ text: this.messageFor('hideRow'),
3526
+ icon: commandIcons.hideRow,
3527
+ svgIcon: commandSVGIcons.hideRow,
3528
+ id: 'hideRow',
3529
+ }, {
3530
+ text: this.messageFor('unhideRow'),
3531
+ icon: commandIcons.unhideRow,
3532
+ svgIcon: commandSVGIcons.unhideRow,
3533
+ id: 'unhideRow',
3534
+ disabled: !unhide
3535
+ });
3536
+ }
3537
+ if (target === 'columnheader') {
3538
+ commonItems.push({
3539
+ separator: true
3540
+ }, {
3541
+ text: this.messageFor('addColumnLeft'),
3542
+ icon: commandIcons.addColumnLeft,
3543
+ svgIcon: commandSVGIcons.addColumnLeft,
3544
+ id: 'addColumnLeft',
3545
+ }, {
3546
+ text: this.messageFor('addColumnRight'),
3547
+ icon: commandIcons.addColumnRight,
3548
+ svgIcon: commandSVGIcons.addColumnRight,
3549
+ id: 'addColumnRight',
3550
+ }, {
3551
+ text: this.messageFor('deleteColumn'),
3552
+ icon: commandIcons.deleteColumn,
3553
+ svgIcon: commandSVGIcons.deleteColumn,
3554
+ id: 'deleteColumn',
3555
+ }, {
3556
+ text: this.messageFor('hideColumn'),
3557
+ icon: commandIcons.hideColumn,
3558
+ svgIcon: commandSVGIcons.hideColumn,
3559
+ id: 'hideColumn',
3560
+ }, {
3561
+ text: this.messageFor('unhideColumn'),
3562
+ icon: commandIcons.unhideColumn,
3563
+ svgIcon: commandSVGIcons.unhideColumn,
3564
+ id: 'unhideColumn',
3565
+ disabled: !unhide
3566
+ });
3567
+ }
3568
+ return commonItems;
3569
+ }
3570
+ openLinkDialog() {
3571
+ var _a, _b;
3572
+ const hasLink = isPresent((_a = this.currentRange) === null || _a === void 0 ? void 0 : _a.link());
3573
+ const dialogSettings = {
3574
+ appendTo: this.spreadsheetService.dialogContainer,
3575
+ title: this.localization.get('insertLink'),
3576
+ content: InsertLinkDialogComponent,
3577
+ actions: [{
3578
+ text: this.localization.get('dialogInsert'),
3579
+ themeColor: 'primary'
3580
+ }, {
3581
+ text: this.localization.get('dialogCancel')
3582
+ },
3583
+ 'spacer', {
3584
+ text: this.localization.get('dialogRemoveLink'),
3585
+ themeColor: 'primary',
3586
+ fillMode: 'clear',
3587
+ cssClass: hasLink ? '' : 'k-disabled'
3588
+ }],
3589
+ actionsLayout: 'start',
3590
+ width: 400,
3591
+ autoFocusedElement: '.k-textbox > .k-input-inner'
3592
+ };
3593
+ const dialog = this.dialogService.open(dialogSettings);
3594
+ const dialogInstance = dialog.dialog.instance;
3595
+ const dialogContent = dialog.content.instance;
3596
+ if (hasLink) {
3597
+ dialogContent.setData({ link: (_b = this.currentRange) === null || _b === void 0 ? void 0 : _b.link() });
3598
+ }
3599
+ dialogInstance.action.pipe(take(1)).subscribe((event) => {
3600
+ if (event.text === this.localization.get('dialogCancel')) {
3601
+ return;
3602
+ }
3603
+ let link = null;
3604
+ if (event.text === this.localization.get('dialogInsert')) {
3605
+ link = dialogContent.urlLink || null;
3606
+ }
3607
+ this.spreadsheetService.spreadsheet.executeCommand({
3608
+ command: 'HyperlinkCommand',
3609
+ options: { link }
3610
+ });
3611
+ });
3612
+ }
3346
3613
  }
3347
- 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 });
3614
+ 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 });
3348
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: [
3349
3616
  SpreadsheetLocalizationService,
3350
3617
  {
@@ -3358,7 +3625,7 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3358
3625
  SpreadsheetToolsService,
3359
3626
  PopupService,
3360
3627
  ErrorHandlingService
3361
- ], 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: `
3628
+ ], 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: `
3362
3629
  <ng-container
3363
3630
  kendoSpreadsheetLocalizedMessages
3364
3631
  i18n-background="kendo.spreadsheet.background|The title of the tool that changes the text background color."
@@ -3487,7 +3754,20 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3487
3754
  dialogError="Error"
3488
3755
  i18n-duplicateSheetName="kendo.spreadsheet.duplicateSheetName|The content of the dialog that warns about duplicated sheet name."
3489
3756
  duplicateSheetName="There is an existing sheet with this name. Please enter another name."
3490
- >
3757
+ i18n-copy="kendo.spreadsheet.copy|The Copy command text."
3758
+ copy="Copy"
3759
+ i18n-cut="kendo.spreadsheet.cut|The Cut command text."
3760
+ cut="Cut"
3761
+ i18n-paste="kendo.spreadsheet.paste|The Paste command text."
3762
+ paste="Paste (use Ctrl/⌘ + V)"
3763
+ i18n-hideRow="kendo.spreadsheet.hideRow|The Hide row command text."
3764
+ hideRow="Hide"
3765
+ i18n-unhideRow="kendo.spreadsheet.unhideRow|The Unhide row command text."
3766
+ unhideRow="Unhide"
3767
+ i18n-hideColumn="kendo.spreadsheet.hideColumn|The Hide column command text."
3768
+ hideColumn="Hide"
3769
+ i18n-unhideColumn="kendo.spreadsheet.unhideColumn|The Unhide column command text."
3770
+ unhideColumn="Unhide">
3491
3771
  </ng-container>
3492
3772
  <div class="k-spreadsheet-header">
3493
3773
  <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
@@ -3586,8 +3866,13 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3586
3866
  </div>
3587
3867
  <ng-container #dialogContainer></ng-container>
3588
3868
 
3869
+ <kendo-contextmenu
3870
+ #contextMenu
3871
+ [items]="contextMenuItems"
3872
+ (select)="onContextMenuSelect($event)"></kendo-contextmenu>
3873
+
3589
3874
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3590
- `, 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]" }] });
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]" }] });
3591
3876
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SpreadsheetComponent, decorators: [{
3592
3877
  type: Component,
3593
3878
  args: [{
@@ -3736,7 +4021,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3736
4021
  dialogError="Error"
3737
4022
  i18n-duplicateSheetName="kendo.spreadsheet.duplicateSheetName|The content of the dialog that warns about duplicated sheet name."
3738
4023
  duplicateSheetName="There is an existing sheet with this name. Please enter another name."
3739
- >
4024
+ i18n-copy="kendo.spreadsheet.copy|The Copy command text."
4025
+ copy="Copy"
4026
+ i18n-cut="kendo.spreadsheet.cut|The Cut command text."
4027
+ cut="Cut"
4028
+ i18n-paste="kendo.spreadsheet.paste|The Paste command text."
4029
+ paste="Paste (use Ctrl/⌘ + V)"
4030
+ i18n-hideRow="kendo.spreadsheet.hideRow|The Hide row command text."
4031
+ hideRow="Hide"
4032
+ i18n-unhideRow="kendo.spreadsheet.unhideRow|The Unhide row command text."
4033
+ unhideRow="Unhide"
4034
+ i18n-hideColumn="kendo.spreadsheet.hideColumn|The Hide column command text."
4035
+ hideColumn="Hide"
4036
+ i18n-unhideColumn="kendo.spreadsheet.unhideColumn|The Unhide column command text."
4037
+ unhideColumn="Unhide">
3740
4038
  </ng-container>
3741
4039
  <div class="k-spreadsheet-header">
3742
4040
  <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
@@ -3835,10 +4133,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3835
4133
  </div>
3836
4134
  <ng-container #dialogContainer></ng-container>
3837
4135
 
4136
+ <kendo-contextmenu
4137
+ #contextMenu
4138
+ [items]="contextMenuItems"
4139
+ (select)="onContextMenuSelect($event)"></kendo-contextmenu>
4140
+
3838
4141
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3839
4142
  `,
3840
4143
  }]
3841
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1$4.IntlService }, { type: i0.ElementRef }, { type: i2.LocalizationService }, { type: SpreadsheetService }, { type: SpreadsheetToolsService }, { type: ErrorHandlingService }]; }, propDecorators: { formulaBarInputRef: [{
4144
+ }], 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: [{
3842
4145
  type: ViewChild,
3843
4146
  args: ['formulaBar', { read: FormulaInputDirective }]
3844
4147
  }], formulaCellInputRef: [{
@@ -3850,6 +4153,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3850
4153
  }], dialogContainer: [{
3851
4154
  type: ViewChild,
3852
4155
  args: ['dialogContainer', { read: ViewContainerRef }]
4156
+ }], contextMenu: [{
4157
+ type: ViewChild,
4158
+ args: ['contextMenu']
3853
4159
  }], hostClass: [{
3854
4160
  type: HostBinding,
3855
4161
  args: ['class.k-spreadsheet']
@@ -4107,7 +4413,7 @@ SpreadsheetModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
4107
4413
  EventsModule,
4108
4414
  IconsModule,
4109
4415
  IntlModule,
4110
- MenuModule,
4416
+ MenusModule,
4111
4417
  PopupModule,
4112
4418
  TabStripModule,
4113
4419
  ToolBarModule,
@@ -4153,7 +4459,7 @@ SpreadsheetModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
4153
4459
  EventsModule,
4154
4460
  IconsModule,
4155
4461
  IntlModule,
4156
- MenuModule,
4462
+ MenusModule,
4157
4463
  PopupModule,
4158
4464
  TabStripModule,
4159
4465
  ToolBarModule,
@@ -4175,7 +4481,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4175
4481
  EventsModule,
4176
4482
  IconsModule,
4177
4483
  IntlModule,
4178
- MenuModule,
4484
+ MenusModule,
4179
4485
  PopupModule,
4180
4486
  TabStripModule,
4181
4487
  ToolBarModule,