@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 { 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: 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
 
@@ -545,7 +545,14 @@ const commandIcons = {
545
545
  increaseFontSize: 'font-grow',
546
546
  decreaseFontSize: 'font-shrink',
547
547
  increaseDecimal: 'decimal-increase',
548
- 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'
549
556
  };
550
557
  /**
551
558
  * @hidden
@@ -590,9 +597,56 @@ const commandSVGIcons = {
590
597
  increaseFontSize: fontGrowIcon,
591
598
  decreaseFontSize: fontShrinkIcon,
592
599
  decreaseDecimal: decimalDecreaseIcon,
593
- 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
594
608
  };
595
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
+
596
650
  /**
597
651
  * @hidden
598
652
  */
@@ -2032,7 +2086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2032
2086
  class MessagesDirective extends ComponentMessages {
2033
2087
  }
2034
2088
  MessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessagesDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2035
- 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 });
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 });
2036
2090
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MessagesDirective, decorators: [{
2037
2091
  type: Directive,
2038
2092
  args: [{
@@ -2164,6 +2218,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2164
2218
  type: Input
2165
2219
  }], duplicateSheetName: [{
2166
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
2167
2235
  }] } });
2168
2236
 
2169
2237
  /**
@@ -2665,46 +2733,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2665
2733
  }]
2666
2734
  }], ctorParameters: function () { return [{ type: i1$2.ToolBarDropDownButtonComponent }, { type: SpreadsheetLocalizationService }, { type: SpreadsheetService }, { type: SpreadsheetToolsService }]; } });
2667
2735
 
2668
- /**
2669
- * @hidden
2670
- */
2671
- class InsertLinkDialogComponent extends DialogContentBase {
2672
- constructor(dialog) {
2673
- super(dialog);
2674
- this.dialog = dialog;
2675
- this.urlLink = '';
2676
- }
2677
- setData(args) {
2678
- this.urlLink = args.link;
2679
- }
2680
- }
2681
- 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 });
2682
- InsertLinkDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: InsertLinkDialogComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
2683
- <form class="k-form k-form-md" method="dialog">
2684
- <div class="k-form-field">
2685
- <kendo-label [for]="textbox" text="URL"></kendo-label>
2686
- <kendo-textbox #textbox
2687
- [(value)]="urlLink">
2688
- </kendo-textbox>
2689
- </div>
2690
- </form>
2691
- `, 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"] }] });
2692
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InsertLinkDialogComponent, decorators: [{
2693
- type: Component,
2694
- args: [{
2695
- 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
- `
2705
- }]
2706
- }], ctorParameters: function () { return [{ type: i1$1.DialogRef }]; } });
2707
-
2708
2736
  /**
2709
2737
  * @hidden
2710
2738
  */
@@ -2714,7 +2742,10 @@ class SpreadsheetInsertLinkDirective extends SpreadsheetCommandButton {
2714
2742
  command: 'HyperlinkCommand'
2715
2743
  });
2716
2744
  this.dialogService = dialogService;
2717
- 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();
2718
2749
  }
2719
2750
  clickHandler() {
2720
2751
  const sheet = this.spreadsheetService.spreadsheet.activeSheet();
@@ -3047,7 +3078,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3047
3078
  * Represents the [Kendo UI Spreadsheet component for Angular]({% slug overview_spreadsheet %}).
3048
3079
  */
3049
3080
  class SpreadsheetComponent {
3050
- constructor(ngZone, intl, host, localization, spreadsheetService, toolsService, errorService) {
3081
+ constructor(ngZone, intl, host, localization, spreadsheetService, toolsService, errorService, dialogService) {
3051
3082
  this.ngZone = ngZone;
3052
3083
  this.intl = intl;
3053
3084
  this.host = host;
@@ -3055,6 +3086,7 @@ class SpreadsheetComponent {
3055
3086
  this.spreadsheetService = spreadsheetService;
3056
3087
  this.toolsService = toolsService;
3057
3088
  this.errorService = errorService;
3089
+ this.dialogService = dialogService;
3058
3090
  this.hostClass = true;
3059
3091
  this.role = 'application';
3060
3092
  /**
@@ -3130,10 +3162,9 @@ class SpreadsheetComponent {
3130
3162
  this.formulaFxIcon = formulaFxIcon;
3131
3163
  this.folderOpenIcon = folderOpenIcon;
3132
3164
  this.downloadIcon = downloadIcon;
3133
- /**
3134
- * @hidden
3135
- */
3136
3165
  this.showLicenseWatermark = false;
3166
+ this.contextMenuItems = [];
3167
+ this.subs = new Subscription();
3137
3168
  this.onChange = (e) => {
3138
3169
  hasObservers(this.change) && this.change.emit(e);
3139
3170
  this.spreadsheetService.selectionChanged.next(e.range);
@@ -3257,6 +3288,7 @@ class SpreadsheetComponent {
3257
3288
  spreadsheet.bind('excelExport', this.onExcelExport);
3258
3289
  spreadsheet.view.bind('update', this.updateState);
3259
3290
  spreadsheet.view.bind('message', this.onMessage);
3291
+ spreadsheet.bind('contextmenu', this.onContextMenu.bind(this));
3260
3292
  const sheet = spreadsheet.activeSheet();
3261
3293
  if (sheet) {
3262
3294
  this.updateState({ range: sheet.range(sheet.activeCell()) });
@@ -3269,8 +3301,9 @@ class SpreadsheetComponent {
3269
3301
  });
3270
3302
  }
3271
3303
  });
3272
- this.spreadsheetService.sheetsChanged.subscribe(this.onSheetsChanged.bind(this));
3273
- 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));
3274
3307
  this.spreadsheetService.dialogContainer = this.dialogContainer;
3275
3308
  });
3276
3309
  }
@@ -3294,6 +3327,85 @@ class SpreadsheetComponent {
3294
3327
  this.spreadsheetWidget.fromJSON(newOptions);
3295
3328
  }
3296
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
+ }
3297
3409
  /**
3298
3410
  * @hidden
3299
3411
  */
@@ -3349,8 +3461,162 @@ class SpreadsheetComponent {
3349
3461
  nameBoxRef: { current: this.nameBoxRef.current }
3350
3462
  };
3351
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
+ }
3352
3618
  }
3353
- 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 });
3354
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: [
3355
3621
  SpreadsheetLocalizationService,
3356
3622
  {
@@ -3364,7 +3630,7 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3364
3630
  SpreadsheetToolsService,
3365
3631
  PopupService,
3366
3632
  ErrorHandlingService
3367
- ], 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: `
3368
3634
  <ng-container
3369
3635
  kendoSpreadsheetLocalizedMessages
3370
3636
  i18n-background="kendo.spreadsheet.background|The title of the tool that changes the text background color."
@@ -3493,7 +3759,20 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3493
3759
  dialogError="Error"
3494
3760
  i18n-duplicateSheetName="kendo.spreadsheet.duplicateSheetName|The content of the dialog that warns about duplicated sheet name."
3495
3761
  duplicateSheetName="There is an existing sheet with this name. Please enter another name."
3496
- >
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">
3497
3776
  </ng-container>
3498
3777
  <div class="k-spreadsheet-header">
3499
3778
  <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
@@ -3592,8 +3871,13 @@ SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
3592
3871
  </div>
3593
3872
  <ng-container #dialogContainer></ng-container>
3594
3873
 
3874
+ <kendo-contextmenu
3875
+ #contextMenu
3876
+ [items]="contextMenuItems"
3877
+ (select)="onContextMenuSelect($event)"></kendo-contextmenu>
3878
+
3595
3879
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3596
- `, 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]" }] });
3597
3881
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SpreadsheetComponent, decorators: [{
3598
3882
  type: Component,
3599
3883
  args: [{
@@ -3742,7 +4026,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3742
4026
  dialogError="Error"
3743
4027
  i18n-duplicateSheetName="kendo.spreadsheet.duplicateSheetName|The content of the dialog that warns about duplicated sheet name."
3744
4028
  duplicateSheetName="There is an existing sheet with this name. Please enter another name."
3745
- >
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">
3746
4043
  </ng-container>
3747
4044
  <div class="k-spreadsheet-header">
3748
4045
  <kendo-menu kendoSpreadsheetMenu (select)="onMenuItemSelect($event)">
@@ -3841,10 +4138,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3841
4138
  </div>
3842
4139
  <ng-container #dialogContainer></ng-container>
3843
4140
 
4141
+ <kendo-contextmenu
4142
+ #contextMenu
4143
+ [items]="contextMenuItems"
4144
+ (select)="onContextMenuSelect($event)"></kendo-contextmenu>
4145
+
3844
4146
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3845
4147
  `,
3846
4148
  }]
3847
- }], 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: [{
3848
4150
  type: ViewChild,
3849
4151
  args: ['formulaBar', { read: FormulaInputDirective }]
3850
4152
  }], formulaCellInputRef: [{
@@ -3856,6 +4158,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3856
4158
  }], dialogContainer: [{
3857
4159
  type: ViewChild,
3858
4160
  args: ['dialogContainer', { read: ViewContainerRef }]
4161
+ }], contextMenu: [{
4162
+ type: ViewChild,
4163
+ args: ['contextMenu']
3859
4164
  }], hostClass: [{
3860
4165
  type: HostBinding,
3861
4166
  args: ['class.k-spreadsheet']
@@ -4113,7 +4418,7 @@ SpreadsheetModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
4113
4418
  EventsModule,
4114
4419
  IconsModule,
4115
4420
  IntlModule,
4116
- MenuModule,
4421
+ MenusModule,
4117
4422
  PopupModule,
4118
4423
  TabStripModule,
4119
4424
  ToolBarModule,
@@ -4159,7 +4464,7 @@ SpreadsheetModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
4159
4464
  EventsModule,
4160
4465
  IconsModule,
4161
4466
  IntlModule,
4162
- MenuModule,
4467
+ MenusModule,
4163
4468
  PopupModule,
4164
4469
  TabStripModule,
4165
4470
  ToolBarModule,
@@ -4181,7 +4486,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4181
4486
  EventsModule,
4182
4487
  IconsModule,
4183
4488
  IntlModule,
4184
- MenuModule,
4489
+ MenusModule,
4185
4490
  PopupModule,
4186
4491
  TabStripModule,
4187
4492
  ToolBarModule,