@progress/kendo-angular-grid 14.4.0-develop.17 → 14.4.0-develop.19

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.
@@ -169,7 +169,7 @@ const replaceMessagePlaceholder = (message, name, value) => message.replace(new
169
169
  /**
170
170
  * @hidden
171
171
  */
172
- const recursiveFlatMap = (item) => isGroupResult(item) ? item.items.flatMap(recursiveFlatMap) : [item];
172
+ const recursiveFlatMap = (item) => isGroupResult(item) ? item.items.flatMap(recursiveFlatMap) : [{ ...item }];
173
173
  /**
174
174
  * @hidden
175
175
  */
@@ -2262,9 +2262,8 @@ const ColumnMenuErrorMessages = {
2262
2262
  * @hidden
2263
2263
  */
2264
2264
  const ClipboardErrorMessages = {
2265
- clipboardTarget: 'The "clipboardTarget" option must be set for the ClipboardDirective to function as designed.',
2266
2265
  activeCellNavigable: 'Grid must be navigable to use "activeCell" as clipboard target type.',
2267
- selectionStartSelectable: 'Grid must be selectable to use "selectionStart" as clipboard target type.'
2266
+ selectionSelectable: 'Grid must be selectable to use "selection" as clipboard target type.'
2268
2267
  };
2269
2268
  /**
2270
2269
  * @hidden
@@ -4328,19 +4327,15 @@ const offsets = {
4328
4327
  * @hidden
4329
4328
  */
4330
4329
  class GridMarqueeDirective {
4331
- constructor(draggable, selection, cellSelection, domEvents) {
4330
+ constructor(draggable, selection, cellSelection, domEvents, host, renderer) {
4332
4331
  this.draggable = draggable;
4333
4332
  this.selection = selection;
4334
4333
  this.cellSelection = cellSelection;
4335
4334
  this.domEvents = domEvents;
4335
+ this.host = host;
4336
+ this.renderer = renderer;
4336
4337
  this.selectionStarted = false;
4337
4338
  }
4338
- get webkitUserSelection() {
4339
- return (this.cellSelection.enableMarquee || this.selection.enableMarquee) ? 'none' : null;
4340
- }
4341
- get userSelection() {
4342
- return (this.cellSelection.enableMarquee || this.selection.enableMarquee);
4343
- }
4344
4339
  ngOnInit() {
4345
4340
  this.subscriptions = (this.draggable.kendoPress.subscribe(this.start.bind(this)));
4346
4341
  this.subscriptions.add(this.draggable.kendoDrag.subscribe(this.moveMarquee.bind(this)));
@@ -4371,6 +4366,8 @@ class GridMarqueeDirective {
4371
4366
  const distance = Math.sqrt((args.pageX - press.pageX) ** 2 + (args.pageY - press.pageY) ** 2);
4372
4367
  if (distance > MINIMAL_DRAG_DISTANCE) {
4373
4368
  this.selectionStarted = true;
4369
+ this.renderer.addClass(this.host.nativeElement, 'user-select-none');
4370
+ this.renderer.setStyle(this.host.nativeElement, 'user-select', 'none');
4374
4371
  this.dragEndSubscription = merge(this.domEvents.cellMouseup.pipe(take(1)), this.draggable.kendoRelease.pipe(delay(1), take(1)))
4375
4372
  .subscribe(this.endSelection.bind(this));
4376
4373
  }
@@ -4415,6 +4412,8 @@ class GridMarqueeDirective {
4415
4412
  if (this.dragEndSubscription) {
4416
4413
  this.dragEndSubscription.unsubscribe();
4417
4414
  }
4415
+ this.renderer.removeClass(this.host.nativeElement, 'user-select-none');
4416
+ this.renderer.removeStyle(this.host.nativeElement, 'user-select');
4418
4417
  this.dragEndSubscription = null;
4419
4418
  this.pressTarget = null;
4420
4419
  this.pressArgs = null;
@@ -4451,20 +4450,14 @@ class GridMarqueeDirective {
4451
4450
  return null;
4452
4451
  }
4453
4452
  }
4454
- GridMarqueeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridMarqueeDirective, deps: [{ token: i1$1.DraggableDirective }, { token: SelectionService }, { token: CellSelectionService }, { token: DomEventsService }], target: i0.ɵɵFactoryTarget.Directive });
4455
- GridMarqueeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]", host: { properties: { "style.-webkit-user-select": "this.webkitUserSelection", "class.user-select-none": "this.userSelection" } }, ngImport: i0 });
4453
+ GridMarqueeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridMarqueeDirective, deps: [{ token: i1$1.DraggableDirective }, { token: SelectionService }, { token: CellSelectionService }, { token: DomEventsService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
4454
+ GridMarqueeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]", ngImport: i0 });
4456
4455
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridMarqueeDirective, decorators: [{
4457
4456
  type: Directive,
4458
4457
  args: [{
4459
4458
  selector: '[kendoGridSelectionMarquee]'
4460
4459
  }]
4461
- }], ctorParameters: function () { return [{ type: i1$1.DraggableDirective }, { type: SelectionService }, { type: CellSelectionService }, { type: DomEventsService }]; }, propDecorators: { webkitUserSelection: [{
4462
- type: HostBinding,
4463
- args: ['style.-webkit-user-select']
4464
- }], userSelection: [{
4465
- type: HostBinding,
4466
- args: ['class.user-select-none']
4467
- }] } });
4460
+ }], ctorParameters: function () { return [{ type: i1$1.DraggableDirective }, { type: SelectionService }, { type: CellSelectionService }, { type: DomEventsService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; } });
4468
4461
 
4469
4462
  /**
4470
4463
  * @hidden
@@ -4507,8 +4500,8 @@ const packageMetadata = {
4507
4500
  name: '@progress/kendo-angular-grid',
4508
4501
  productName: 'Kendo UI for Angular',
4509
4502
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
4510
- publishDate: 1706192885,
4511
- version: '14.4.0-develop.17',
4503
+ publishDate: 1706287616,
4504
+ version: '14.4.0-develop.19',
4512
4505
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
4513
4506
  };
4514
4507
 
@@ -6836,12 +6829,12 @@ class ClipboardService {
6836
6829
  gridItems: [],
6837
6830
  dataString: ''
6838
6831
  };
6832
+ const fieldCols = columns.flatMap(c => c instanceof ColumnComponent && isPresent$1(c.field) ? [c] : []);
6833
+ const clipboardData = { items: [], dataStrings: [] };
6834
+ const colFields = fieldCols.map(c => c.field);
6839
6835
  if (options.wholeRow) {
6840
- const fieldCols = columns.flatMap(c => c instanceof ColumnComponent && isPresent$1(c.field) ? [c] : []);
6841
6836
  this.targetColField = fieldCols[0]?.field;
6842
6837
  this.targetRowIndex = data[0].dataRowIndex;
6843
- const clipboardData = { items: [], dataStrings: [] };
6844
- const colFields = fieldCols.map(c => c.field);
6845
6838
  data.forEach(item => {
6846
6839
  clipboardData.items.push({ dataItem: { ...item.dataItem }, fields: colFields });
6847
6840
  clipboardData.dataStrings.push(this.itemToString(item.dataItem, fieldCols));
@@ -6855,56 +6848,83 @@ class ClipboardService {
6855
6848
  };
6856
6849
  }
6857
6850
  else {
6858
- const { tabular, groups } = this.groupSelection();
6859
- const selectionDirective = this.contextService.grid.selectionDirective;
6860
- const colIdentifier = selectionDirective.columnKey;
6861
- if (tabular) {
6862
- const selectionKeys = groups[0].items.map(item => item.columnKey);
6863
- const selectedFieldCols = columns.flatMap((c, i) => (c instanceof ColumnComponent && c.field) && selectionKeys.find(k => typeof colIdentifier === 'function' ? k === colIdentifier(c, i) : k === i) ? [c] : []);
6864
- const selectedColFields = selectedFieldCols.map(c => c.field);
6865
- this.targetColField = selectedColFields[0];
6866
- result.dataString = data.flatMap(item => {
6867
- const itemString = this.itemToString(item.dataItem, selectedFieldCols);
6868
- const existingItem = isPresent$1(itemString);
6869
- if (!isPresent$1(this.targetRowIndex) && isPresent$1(itemString)) {
6870
- this.targetRowIndex = item.dataRowIndex;
6871
- }
6872
- result.gridItems.push({
6873
- dataItem: item.dataItem,
6874
- fields: selectedColFields
6875
- });
6876
- return existingItem ? [itemString] : [];
6877
- }).join(`\r\n`);
6878
- if (options.copyHeaders) {
6879
- result.dataString = this.addHeaders(result.dataString, selectedFieldCols);
6880
- }
6881
- }
6882
- else { // split per row (uneven rows)
6883
- const rowIdentifier = selectionDirective.selectionKey;
6884
- result.dataString = data.flatMap(item => {
6885
- // determine cols per item
6886
- const key = rowIdentifier ?
6887
- typeof rowIdentifier === 'string' ? item.dataItem[rowIdentifier] : rowIdentifier({ index: item.dataRowIndex, dataItem: item.dataItem }) :
6888
- item.dataRowIndex;
6889
- const selectionKeys = groups.find(gr => gr.value === key).items.map(item => item.columnKey);
6851
+ if (options.target === 'selection') {
6852
+ const { tabular, groups } = this.groupSelection();
6853
+ const selectionDirective = this.contextService.grid.selectionDirective;
6854
+ const colIdentifier = selectionDirective.columnKey;
6855
+ if (tabular) {
6856
+ const selectionKeys = groups[0].items.map(item => item.columnKey);
6890
6857
  const selectedFieldCols = columns.flatMap((c, i) => (c instanceof ColumnComponent && c.field) && selectionKeys.find(k => typeof colIdentifier === 'function' ? k === colIdentifier(c, i) : k === i) ? [c] : []);
6891
6858
  const selectedColFields = selectedFieldCols.map(c => c.field);
6892
- if (!this.targetColField) {
6893
- this.targetColField = selectedColFields[0];
6894
- }
6895
- const itemString = this.itemToString(item.dataItem, selectedFieldCols);
6896
- const existingItem = isPresent$1(itemString);
6897
- if (!isPresent$1(this.targetRowIndex) && existingItem) {
6898
- this.targetRowIndex = item.dataRowIndex;
6899
- }
6900
- if (existingItem) {
6859
+ this.targetColField = selectedColFields[0];
6860
+ result.dataString = data.flatMap(item => {
6861
+ const itemString = this.itemToString(item.dataItem, selectedFieldCols);
6862
+ const existingItem = isPresent$1(itemString);
6863
+ if (!isPresent$1(this.targetRowIndex) && isPresent$1(itemString)) {
6864
+ this.targetRowIndex = item.dataRowIndex;
6865
+ }
6866
+ if (options.operationType === 'cut') {
6867
+ selectedColFields.forEach(f => item.dataItem[f] = null);
6868
+ }
6901
6869
  result.gridItems.push({
6902
6870
  dataItem: item.dataItem,
6903
6871
  fields: selectedColFields
6904
6872
  });
6873
+ return existingItem ? [itemString] : [];
6874
+ }).join(`\r\n`);
6875
+ if (options.copyHeaders) {
6876
+ result.dataString = this.addHeaders(result.dataString, selectedFieldCols);
6905
6877
  }
6906
- return existingItem ? options.copyHeaders ? [this.addHeaders(itemString, selectedFieldCols)] : [itemString] : [];
6907
- }).join(`\r\n`);
6878
+ }
6879
+ else { // split per row (uneven rows)
6880
+ const rowIdentifier = selectionDirective.selectionKey;
6881
+ result.dataString = data.flatMap(item => {
6882
+ // determine cols per item
6883
+ const key = rowIdentifier ?
6884
+ typeof rowIdentifier === 'string' ? item.dataItem[rowIdentifier] : rowIdentifier({ index: item.dataRowIndex, dataItem: item.dataItem }) :
6885
+ item.dataRowIndex;
6886
+ const selectionKeys = groups.find(gr => gr.value === key).items.map(item => item.columnKey);
6887
+ const selectedFieldCols = columns.flatMap((c, i) => (c instanceof ColumnComponent && c.field) && selectionKeys.find(k => typeof colIdentifier === 'function' ? k === colIdentifier(c, i) : k === i) ? [c] : []);
6888
+ const selectedColFields = selectedFieldCols.map(c => c.field);
6889
+ if (!this.targetColField) {
6890
+ this.targetColField = selectedColFields[0];
6891
+ }
6892
+ const itemString = this.itemToString(item.dataItem, selectedFieldCols);
6893
+ const existingItem = isPresent$1(itemString);
6894
+ if (!isPresent$1(this.targetRowIndex) && existingItem) {
6895
+ this.targetRowIndex = item.dataRowIndex;
6896
+ }
6897
+ if (existingItem) {
6898
+ if (options.operationType === 'cut') {
6899
+ selectedColFields.forEach(f => item.dataItem[f] = null);
6900
+ }
6901
+ result.gridItems.push({
6902
+ dataItem: item.dataItem,
6903
+ fields: selectedColFields
6904
+ });
6905
+ }
6906
+ return existingItem ? options.copyHeaders ? [this.addHeaders(itemString, selectedFieldCols)] : [itemString] : [];
6907
+ }).join(`\r\n`);
6908
+ }
6909
+ }
6910
+ else {
6911
+ const item = data[0];
6912
+ const col = columns[item.colIndex];
6913
+ const colField = col.field;
6914
+ const title = col.title;
6915
+ const copiedData = item.dataItem[colField];
6916
+ this.targetRowIndex = item.dataRowIndex;
6917
+ this.targetColField = colField;
6918
+ if (options.operationType === 'cut' && colField) {
6919
+ item.dataItem[colField] = null;
6920
+ }
6921
+ result = {
6922
+ gridItems: [{
6923
+ dataItem: item.dataItem,
6924
+ fields: colField ? [colField] : []
6925
+ }],
6926
+ dataString: options.copyHeaders ? [title || colField, copiedData].join(`\r\n`) : colField ? copiedData : ``
6927
+ };
6908
6928
  }
6909
6929
  }
6910
6930
  return result;
@@ -7981,7 +8001,7 @@ PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
7981
8001
  </kendo-numerictextbox>
7982
8002
  {{textFor('pagerOf')}} {{totalPages}}
7983
8003
  </span>
7984
- `, isInline: true, components: [{ type: i3$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: PagerInputDirective, selector: "[kendoGridPagerInput]" }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: i1$1.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
8004
+ `, isInline: true, components: [{ type: i3$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: PagerInputDirective, selector: "[kendoGridPagerInput]" }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: i1$1.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
7985
8005
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInputComponent, decorators: [{
7986
8006
  type: Component,
7987
8007
  args: [{
@@ -10421,7 +10441,7 @@ NumericFilterMenuInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
10421
10441
  </kendo-numerictextbox-messages>
10422
10442
  </kendo-numerictextbox>
10423
10443
  </kendo-grid-filter-menu-input-wrapper>
10424
- `, isInline: true, components: [{ type: FilterMenuInputWrapperComponent, selector: "kendo-grid-filter-menu-input-wrapper", inputs: ["filterService", "isFirstDropDown", "menuTabbingService", "currentFilter"] }, { type: i3$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i3$1.NumericTextBoxCustomMessagesComponent, selector: "kendo-numerictextbox-messages" }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }] });
10444
+ `, isInline: true, components: [{ type: FilterMenuInputWrapperComponent, selector: "kendo-grid-filter-menu-input-wrapper", inputs: ["filterService", "isFirstDropDown", "menuTabbingService", "currentFilter"] }, { type: i3$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { type: i3$1.NumericTextBoxCustomMessagesComponent, selector: "kendo-numerictextbox-messages" }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }] });
10425
10445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterMenuInputComponent, decorators: [{
10426
10446
  type: Component,
10427
10447
  args: [{
@@ -14545,7 +14565,7 @@ NumericFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
14545
14565
  </kendo-numerictextbox-messages>
14546
14566
  </kendo-numerictextbox>
14547
14567
  </kendo-grid-filter-wrapper-cell>
14548
- `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i3$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i3$1.NumericTextBoxCustomMessagesComponent, selector: "kendo-numerictextbox-messages" }], directives: [{ type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }] });
14568
+ `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i3$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { type: i3$1.NumericTextBoxCustomMessagesComponent, selector: "kendo-numerictextbox-messages" }], directives: [{ type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }] });
14549
14569
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterCellComponent, decorators: [{
14550
14570
  type: Component,
14551
14571
  args: [{
@@ -17166,7 +17186,7 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
17166
17186
  </ng-container>
17167
17187
  </ng-container>
17168
17188
  </ng-container>
17169
- `, isInline: true, components: [{ type: i3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { type: i3$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i4$3.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "title", "subtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }], directives: [{ type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: SelectionCheckboxDirective, selector: "[kendoGridSelectionCheckbox]", inputs: ["kendoGridSelectionCheckbox"] }, { type: i4$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4$2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i4$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], pipes: { "valueOf": FieldAccessorPipe } });
17189
+ `, isInline: true, components: [{ type: i3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { type: i3$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { type: i4$3.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "title", "subtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }], directives: [{ type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: SelectionCheckboxDirective, selector: "[kendoGridSelectionCheckbox]", inputs: ["kendoGridSelectionCheckbox"] }, { type: i4$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4$2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i4$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], pipes: { "valueOf": FieldAccessorPipe } });
17170
17190
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CellComponent, decorators: [{
17171
17191
  type: Component,
17172
17192
  args: [{
@@ -23798,7 +23818,7 @@ AutoCompleteFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
23798
23818
  [value]="currentFilter?.value">
23799
23819
  </kendo-autocomplete>
23800
23820
  </kendo-grid-filter-wrapper-cell>
23801
- `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i1$4.AutoCompleteComponent, selector: "kendo-autocomplete", inputs: ["highlightFirst", "showStickyHeader", "focusableId", "data", "value", "valueField", "placeholder", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "loading", "clearButton", "suggest", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoAutoComplete"] }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }] });
23821
+ `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i1$4.AutoCompleteComponent, selector: "kendo-autocomplete", inputs: ["highlightFirst", "showStickyHeader", "focusableId", "data", "value", "valueField", "placeholder", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "loading", "clearButton", "suggest", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoAutoComplete"] }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }] });
23802
23822
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteFilterCellComponent, decorators: [{
23803
23823
  type: Component,
23804
23824
  args: [{
@@ -26595,6 +26615,7 @@ class GridClipboardDirective {
26595
26615
  * Fires when the user performs `cut`, `copy` or `paste` action within the Grid content area.
26596
26616
  */
26597
26617
  this.clipboard = new EventEmitter();
26618
+ this._target = 'selection';
26598
26619
  this._clipboardSettings = {
26599
26620
  wholeRow: false,
26600
26621
  copyHeaders: false,
@@ -26604,7 +26625,7 @@ class GridClipboardDirective {
26604
26625
  };
26605
26626
  this.subs = new Subscription();
26606
26627
  this.onClipboard = (operationType, args) => {
26607
- if (!this.inGrid(args) || !this.clipboardSettings[operationType]) {
26628
+ if (!this.clipboardSettings[operationType] || !this.inGrid(args)) {
26608
26629
  return;
26609
26630
  }
26610
26631
  const gridData = Array.isArray(this.host.data) ? this.host.data : this.host.data.data;
@@ -26618,10 +26639,10 @@ class GridClipboardDirective {
26618
26639
  case 'activeCell':
26619
26640
  {
26620
26641
  const targetCell = { ...this.host.activeCell };
26621
- clipboardData = targetCell && [{ dataItem: targetCell.dataItem, dataRowIndex: targetCell.dataRowIndex }];
26642
+ clipboardData = targetCell && [{ dataItem: targetCell.dataItem, dataRowIndex: targetCell.dataRowIndex, colIndex: targetCell.colIndex }];
26622
26643
  }
26623
26644
  break;
26624
- case 'selectionStart':
26645
+ case 'selection':
26625
26646
  {
26626
26647
  const identifier = selectionDirective.selectionKey;
26627
26648
  clipboardData = gridDataItems.flatMap((item, index) => {
@@ -26644,28 +26665,31 @@ class GridClipboardDirective {
26644
26665
  const data = isPaste ?
26645
26666
  {
26646
26667
  dataString: pastedData,
26647
- gridItems: this.clipboardService.getGridData(pastedData, visibleCols, this.clipboardTarget, clipboardData[0].dataRowIndex, {
26668
+ gridItems: this.clipboardService.getGridData(pastedData, visibleCols, this.clipboardTarget, clipboardData[0]?.dataRowIndex, {
26648
26669
  wholeRow: this.clipboardSettings.wholeRow,
26649
26670
  isCellSelection
26650
26671
  })
26651
26672
  } :
26652
26673
  this.clipboardService.createClipboardData(clipboardData || [], visibleCols, {
26653
- wholeRow: this.clipboardSettings.wholeRow || !isCellSelection,
26674
+ wholeRow: this.clipboardSettings.wholeRow || (this.clipboardTarget === 'selection' && !isCellSelection),
26675
+ target: this.clipboardTarget,
26654
26676
  copyHeaders: this.clipboardSettings.copyHeaders,
26655
26677
  operationType
26656
26678
  });
26657
26679
  !isPaste && navigator.clipboard.writeText(data.dataString);
26658
26680
  if (hasObservers(this.clipboard)) {
26659
- this.clipboard.emit({
26660
- type: operationType,
26661
- originalEvent: args,
26662
- clipboardData: data.dataString,
26663
- gridData: data.gridItems,
26664
- target: {
26665
- dataRowIndex: this.clipboardService.targetRowIndex,
26666
- colField: this.clipboardService.targetColField,
26667
- dataItem: clipboardData.find(item => item.dataRowIndex === this.clipboardService.targetRowIndex)?.dataItem
26668
- }
26681
+ this.zone.run(() => {
26682
+ this.clipboard.emit({
26683
+ type: operationType,
26684
+ originalEvent: args,
26685
+ clipboardData: data.dataString,
26686
+ gridData: data.gridItems,
26687
+ target: {
26688
+ dataRowIndex: this.clipboardService.targetRowIndex,
26689
+ colField: this.clipboardService.targetColField,
26690
+ dataItem: clipboardData.find(item => item.dataRowIndex === this.clipboardService.targetRowIndex)?.dataItem
26691
+ }
26692
+ });
26669
26693
  });
26670
26694
  }
26671
26695
  this.clipboardService.targetColField = this.clipboardService.targetRowIndex = null;
@@ -26678,14 +26702,11 @@ class GridClipboardDirective {
26678
26702
  };
26679
26703
  }
26680
26704
  /**
26681
- * Determines the target of the clipboard operation. The possible options are:
26682
- * - `activeCell`&mdash;Only the content of the current active cell or the row it is in will be copied to the clipboard.
26683
- * When pasting, the active cell will be the pivotal point for pasted content.
26684
- * - `selectionStart`&mdash;The content of all selected cells or rows from the current page will be copied to the clipboard.
26685
- * When pasting the first selected cell will be the pivotal point for pasted content.
26705
+ * Determines the target of the clipboard operation ([see example]({% slug clipboard_grid %}#toc-clipboard-target)). The possible options are:
26706
+ * - `activeCell`
26707
+ * - `selection`
26686
26708
  *
26687
- * This option must be set, and the Grid keyboard navigation and/or selection functionalities must be enabled
26688
- * for the Clipboard directive to function as designed.
26709
+ * @default 'selection'
26689
26710
  */
26690
26711
  set clipboardTarget(value) {
26691
26712
  if (isDevMode()) {
@@ -26693,11 +26714,8 @@ class GridClipboardDirective {
26693
26714
  if (value === 'activeCell' && !(this.host.navigable.length)) {
26694
26715
  console.warn(ClipboardErrorMessages.clipboardTarget.activeCellNavigable);
26695
26716
  }
26696
- else if (value === 'selectionStart' && !(this.host.selectable || this.host.selectionDirective)) {
26697
- console.warn(ClipboardErrorMessages.selectionStartSelectable);
26698
- }
26699
- else if (!isPresent(value)) {
26700
- console.warn(ClipboardErrorMessages.clipboardTarget);
26717
+ else if (value === 'selection' && !(this.host.selectable || this.host.selectionDirective)) {
26718
+ console.warn(ClipboardErrorMessages.selectionSelectable);
26701
26719
  }
26702
26720
  });
26703
26721
  }
@@ -26721,26 +26739,23 @@ class GridClipboardDirective {
26721
26739
  if (!isDocumentAvailable()) {
26722
26740
  return;
26723
26741
  }
26724
- if (isDevMode() && !isPresent(this.clipboardTarget)) {
26725
- console.warn(ClipboardErrorMessages.clipboardTarget);
26742
+ if (this.clipboardTarget === 'selection' && !(this.host.selectable || this.host.selectionDirective)) {
26743
+ console.warn(ClipboardErrorMessages.selectionSelectable);
26726
26744
  }
26727
26745
  // needed due to the following issue in Chrome
26728
26746
  // https://bugs.chromium.org/p/chromium/issues/detail?id=1156117&q=focus%20programmatically%20paste&can=2
26729
- this.subs.add(this.renderer.listen(document, 'copy', (args) => this.onClipboard('copy', args)));
26730
- this.subs.add(this.renderer.listen(document, 'cut', (args) => this.onClipboard('cut', args)));
26731
- this.subs.add(this.renderer.listen(document, 'paste', (args) => this.onClipboard('paste', args)));
26732
- }
26733
- ngOnChanges(changes) {
26734
- if (changes['clipboardTarget'] && isDevMode() && !isPresent(changes['clipboardTarget'].currentValue)) {
26735
- console.warn(ClipboardErrorMessages.clipboardTarget);
26736
- }
26747
+ this.zone.runOutsideAngular(() => {
26748
+ this.subs.add(this.renderer.listen(document, 'copy', (args) => this.onClipboard('copy', args)));
26749
+ this.subs.add(this.renderer.listen(document, 'cut', (args) => this.onClipboard('cut', args)));
26750
+ this.subs.add(this.renderer.listen(document, 'paste', (args) => this.onClipboard('paste', args)));
26751
+ });
26737
26752
  }
26738
26753
  ngOnDestroy() {
26739
26754
  this.subs.unsubscribe();
26740
26755
  }
26741
26756
  }
26742
26757
  GridClipboardDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridClipboardDirective, deps: [{ token: GridComponent }, { token: ClipboardService }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
26743
- GridClipboardDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: GridClipboardDirective, selector: "[kendoGridClipboard]", inputs: { clipboardTarget: "clipboardTarget", clipboardSettings: "clipboardSettings" }, outputs: { clipboard: "clipboard" }, providers: [ClipboardService], exportAs: ["kendoGridClipboard"], usesOnChanges: true, ngImport: i0 });
26758
+ GridClipboardDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: GridClipboardDirective, selector: "[kendoGridClipboard]", inputs: { clipboardTarget: "clipboardTarget", clipboardSettings: "clipboardSettings" }, outputs: { clipboard: "clipboard" }, providers: [ClipboardService], exportAs: ["kendoGridClipboard"], ngImport: i0 });
26744
26759
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridClipboardDirective, decorators: [{
26745
26760
  type: Directive,
26746
26761
  args: [{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-grid",
3
- "version": "14.4.0-develop.17",
3
+ "version": "14.4.0-develop.19",
4
4
  "description": "Kendo UI Grid for Angular - high performance data grid with paging, filtering, virtualization, CRUD, and more.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -33,25 +33,25 @@
33
33
  "@progress/kendo-data-query": "^1.0.0",
34
34
  "@progress/kendo-drawing": "^1.19.0",
35
35
  "@progress/kendo-licensing": "^1.0.2",
36
- "@progress/kendo-angular-buttons": "14.4.0-develop.17",
37
- "@progress/kendo-angular-common": "14.4.0-develop.17",
38
- "@progress/kendo-angular-dateinputs": "14.4.0-develop.17",
39
- "@progress/kendo-angular-layout": "14.4.0-develop.17",
40
- "@progress/kendo-angular-dropdowns": "14.4.0-develop.17",
41
- "@progress/kendo-angular-excel-export": "14.4.0-develop.17",
42
- "@progress/kendo-angular-icons": "14.4.0-develop.17",
43
- "@progress/kendo-angular-inputs": "14.4.0-develop.17",
44
- "@progress/kendo-angular-intl": "14.4.0-develop.17",
45
- "@progress/kendo-angular-l10n": "14.4.0-develop.17",
46
- "@progress/kendo-angular-label": "14.4.0-develop.17",
47
- "@progress/kendo-angular-pdf-export": "14.4.0-develop.17",
48
- "@progress/kendo-angular-popup": "14.4.0-develop.17",
49
- "@progress/kendo-angular-utils": "14.4.0-develop.17",
36
+ "@progress/kendo-angular-buttons": "14.4.0-develop.19",
37
+ "@progress/kendo-angular-common": "14.4.0-develop.19",
38
+ "@progress/kendo-angular-dateinputs": "14.4.0-develop.19",
39
+ "@progress/kendo-angular-layout": "14.4.0-develop.19",
40
+ "@progress/kendo-angular-dropdowns": "14.4.0-develop.19",
41
+ "@progress/kendo-angular-excel-export": "14.4.0-develop.19",
42
+ "@progress/kendo-angular-icons": "14.4.0-develop.19",
43
+ "@progress/kendo-angular-inputs": "14.4.0-develop.19",
44
+ "@progress/kendo-angular-intl": "14.4.0-develop.19",
45
+ "@progress/kendo-angular-l10n": "14.4.0-develop.19",
46
+ "@progress/kendo-angular-label": "14.4.0-develop.19",
47
+ "@progress/kendo-angular-pdf-export": "14.4.0-develop.19",
48
+ "@progress/kendo-angular-popup": "14.4.0-develop.19",
49
+ "@progress/kendo-angular-utils": "14.4.0-develop.19",
50
50
  "rxjs": "^6.5.3 || ^7.0.0"
51
51
  },
52
52
  "dependencies": {
53
53
  "tslib": "^2.3.1",
54
- "@progress/kendo-angular-schematics": "14.4.0-develop.17",
54
+ "@progress/kendo-angular-schematics": "14.4.0-develop.19",
55
55
  "@progress/kendo-common": "^0.2.0",
56
56
  "@progress/kendo-file-saver": "^1.0.0"
57
57
  },
@@ -4,13 +4,13 @@ const schematics_1 = require("@angular-devkit/schematics");
4
4
  function default_1(options) {
5
5
  const finalOptions = Object.assign(Object.assign({}, options), { mainNgModule: 'GridModule', package: 'grid', peerDependencies: {
6
6
  // peer dep of the dropdowns
7
- '@progress/kendo-angular-treeview': '14.4.0-develop.17',
7
+ '@progress/kendo-angular-treeview': '14.4.0-develop.19',
8
8
  // peer dependency of kendo-angular-inputs
9
- '@progress/kendo-angular-dialog': '14.4.0-develop.17',
9
+ '@progress/kendo-angular-dialog': '14.4.0-develop.19',
10
10
  // peer dependency of kendo-angular-icons
11
11
  '@progress/kendo-svg-icons': '^2.0.0',
12
12
  // peer dependency of kendo-angular-layout
13
- '@progress/kendo-angular-progressbar': '14.4.0-develop.17'
13
+ '@progress/kendo-angular-progressbar': '14.4.0-develop.19'
14
14
  } });
15
15
  return (0, schematics_1.externalSchematic)('@progress/kendo-angular-schematics', 'ng-add', finalOptions);
16
16
  }
@@ -3,6 +3,7 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { DomEventsService } from './../common/dom-events.service';
6
+ import { ElementRef, Renderer2 } from '@angular/core';
6
7
  import { DraggableDirective } from '@progress/kendo-angular-common';
7
8
  import { SelectionService } from './selection.service';
8
9
  import { CellSelectionService } from './cell-selection.service';
@@ -15,15 +16,15 @@ export declare class GridMarqueeDirective {
15
16
  private selection;
16
17
  private cellSelection;
17
18
  private domEvents;
18
- get webkitUserSelection(): string;
19
- get userSelection(): boolean;
19
+ private host;
20
+ private renderer;
20
21
  private pressArgs;
21
22
  private marqueeElement;
22
23
  private pressTarget;
23
24
  private subscriptions;
24
25
  private selectionStarted;
25
26
  private dragEndSubscription;
26
- constructor(draggable: DraggableDirective, selection: SelectionService, cellSelection: CellSelectionService, domEvents: DomEventsService);
27
+ constructor(draggable: DraggableDirective, selection: SelectionService, cellSelection: CellSelectionService, domEvents: DomEventsService, host: ElementRef, renderer: Renderer2);
27
28
  ngOnInit(): void;
28
29
  ngOnDestroy(): void;
29
30
  private start;