@progress/kendo-angular-charts 24.0.0-develop.37 → 24.0.0-develop.39

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.
@@ -0,0 +1,23 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ "use strict";
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.aiInstructions = exports.aiInstructionsSurfaceElement = void 0;
8
+ exports.default = default_1;
9
+ const codemods_1 = require("@progress/kendo-angular-common/codemods");
10
+ exports.aiInstructionsSurfaceElement = `Charts and Sankey — redundant internal surface wrapper element removed.
11
+ If you have CSS rules or test assertions that target a wrapper element between the chart container and the SVG surface, update them to account for the removed intermediate element.`;
12
+ exports.aiInstructions = `Review your stylesheets, test files, and any code that may reference the Charts internal surface element:
13
+
14
+ ${exports.aiInstructionsSurfaceElement}`;
15
+ const patternSurface = (0, codemods_1.makePattern)(['k-chart-surface']);
16
+ function default_1(fileInfo) {
17
+ if ((0, codemods_1.isRenderingChangeTarget)(fileInfo.path)) {
18
+ if (patternSurface.test(fileInfo.source)) {
19
+ (0, codemods_1.writeInstructionMarker)(exports.aiInstructionsSurfaceElement, __filename, fileInfo.path);
20
+ }
21
+ }
22
+ return fileInfo.source;
23
+ }
@@ -4,7 +4,7 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  "use strict";
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.tsInterfaceTransformer = exports.tsPropertyValueTransformer = exports.tsPropertyTransformer = exports.tsComponentPropertyRemoval = exports.attributeRemoval = exports.attributeValueUpdate = exports.attributeNameValueUpdate = exports.attributeNameUpdate = exports.eventUpdate = exports.htmlTransformer = exports.blockTextElements = void 0;
7
+ exports.tsInterfaceTransformer = exports.tsPropertyValueTransformer = exports.tsPropertyTransformer = exports.tsComponentPropertyRemoval = exports.attributeConditionalRemoval = exports.attributeRemoval = exports.attributeValueUpdate = exports.attributeNameValueUpdate = exports.attributeNameUpdate = exports.eventUpdate = exports.htmlTransformer = exports.blockTextElements = void 0;
8
8
  exports.hasKendoInTemplate = hasKendoInTemplate;
9
9
  exports.isImportedFromPackage = isImportedFromPackage;
10
10
  exports.tsPropertyRemoval = tsPropertyRemoval;
@@ -345,6 +345,34 @@ const attributeRemoval = (templateContent, tagName, attributeName, propertyToRem
345
345
  });
346
346
  };
347
347
  exports.attributeRemoval = attributeRemoval;
348
+ /**
349
+ * Removes an attribute from a tag only when its value matches one of the specified values.
350
+ * Handles both static (`attr="value"`) and bound (`[attr]="'value'"`) forms.
351
+ *
352
+ * @param templateContent - The template string content to transform
353
+ * @param tagName - The HTML tag name to target (e.g., 'kendo-button')
354
+ * @param attributeName - The attribute name to conditionally remove
355
+ * @param values - The attribute values that trigger removal
356
+ * @returns The transformed template content
357
+ */
358
+ const attributeConditionalRemoval = (templateContent, tagName, attributeName, values) => {
359
+ const escapeRegex = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
360
+ const escapedTag = escapeRegex(tagName);
361
+ const escapedAttr = escapeRegex(attributeName);
362
+ // Remove bound attributes [attribute]="value"
363
+ const boundAttributePattern = new RegExp(`(<${escapedTag}[^>]*?)\\s+\\[${escapedAttr}\\]\\s*=\\s*("(?:[^"\\\\]|\\\\.)*?"|'(?:[^'\\\\]|\\\\.)*?'|[^\\s>]+)([^>]*?>)`, 'gi');
364
+ // Remove static attributes attribute="value"
365
+ const staticAttributePattern = new RegExp(`(<${escapedTag}[^>]*?)\\s+${escapedAttr}\\s*=\\s*("(?:[^"\\\\]|\\\\.)*?"|'(?:[^'\\\\]|\\\\.)*?'|[^\\s>]+)([^>]*?>)`, 'gi');
366
+ // Strip outer and inner quotes to extract the raw value for comparison
367
+ const matchesValue = (raw) => {
368
+ const inner = raw.replace(/^["']|["']$/g, '').replace(/^['"]|['"]$/g, '');
369
+ return values.includes(inner);
370
+ };
371
+ let result = templateContent.replace(boundAttributePattern, (match, prefix, value, suffix) => matchesValue(value) ? prefix + suffix : match);
372
+ result = result.replace(staticAttributePattern, (match, prefix, value, suffix) => matchesValue(value) ? prefix + suffix : match);
373
+ return result;
374
+ };
375
+ exports.attributeConditionalRemoval = attributeConditionalRemoval;
348
376
  function tsPropertyRemoval(source, rootSource, j, packageName, typeName, propertyName) {
349
377
  if (source.includes(typeName)) {
350
378
  if (!isImportedFromPackage(rootSource, j, packageName, typeName)) {
@@ -441,8 +469,31 @@ function tsPropertyRemoval(source, rootSource, j, packageName, typeName, propert
441
469
  }
442
470
  }
443
471
  });
444
- // Handle return statements with object literals
472
+ // Handle return statements with object literals, but only when the enclosing
473
+ // function's declared return type matches typeName. This prevents removing
474
+ // unrelated propertyName keys from object literals returned in other functions.
475
+ const enclosingFunctionReturnsType = (nodePath) => {
476
+ let current = nodePath.parent;
477
+ while (current) {
478
+ const node = current.node;
479
+ if (node.type === 'FunctionDeclaration' ||
480
+ node.type === 'FunctionExpression' ||
481
+ node.type === 'ArrowFunctionExpression' ||
482
+ node.type === 'ClassMethod' ||
483
+ node.type === 'ObjectMethod') {
484
+ return !!(node.returnType &&
485
+ node.returnType.typeAnnotation?.type === 'TSTypeReference' &&
486
+ node.returnType.typeAnnotation.typeName?.type === 'Identifier' &&
487
+ node.returnType.typeAnnotation.typeName.name === typeName);
488
+ }
489
+ current = current.parent;
490
+ }
491
+ return false;
492
+ };
445
493
  rootSource.find(j.ReturnStatement).forEach((path) => {
494
+ if (!enclosingFunctionReturnsType(path)) {
495
+ return;
496
+ }
446
497
  if (path.node.argument && path.node.argument.type === 'ObjectExpression') {
447
498
  const properties = path.node.argument.properties;
448
499
  const propIndex = properties.findIndex((p) => p.type === 'ObjectProperty' &&
@@ -491,22 +542,6 @@ function tsPropertyRemoval(source, rootSource, j, packageName, typeName, propert
491
542
  statement.remove();
492
543
  }
493
544
  });
494
- // Handle nested member expressions like chatConfig.chat.modelFields.pinnedByField
495
- rootSource
496
- .find(j.AssignmentExpression, {
497
- left: {
498
- type: 'MemberExpression',
499
- object: {
500
- type: 'MemberExpression',
501
- },
502
- property: {
503
- name: propertyName,
504
- },
505
- },
506
- })
507
- .forEach((path) => {
508
- j(path).closest(j.ExpressionStatement).remove();
509
- });
510
545
  return rootSource;
511
546
  }
512
547
  }
@@ -4,7 +4,7 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
6
  import { Optional, Directive, Injectable, SimpleChange, TemplateRef, ContentChild, Input, ChangeDetectionStrategy, Component, ElementRef, ViewChild, ViewChildren, EventEmitter, Output, ContentChildren, forwardRef, LOCALE_ID, Inject, isDevMode, InjectionToken, HostBinding, NgModule } from '@angular/core';
7
- import { isDocumentAvailable, getLicenseMessage, shouldShowValidationUI, ResizeSensorComponent, WatermarkOverlayComponent, PreventableEvent as PreventableEvent$1, isChanged, ResizeBatchService } from '@progress/kendo-angular-common';
7
+ import { isDocumentAvailable, getLicenseMessage, shouldShowValidationUI, ResizeSensorComponent, WatermarkOverlayComponent, KENDO_WEBMCP_HOST, PreventableEvent as PreventableEvent$1, isChanged, ResizeBatchService } from '@progress/kendo-angular-common';
8
8
  import * as i3 from '@progress/kendo-angular-intl';
9
9
  import * as i1$1 from '@progress/kendo-angular-l10n';
10
10
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
@@ -2944,8 +2944,8 @@ const packageMetadata = {
2944
2944
  productName: 'Kendo UI for Angular',
2945
2945
  productCode: 'KENDOUIANGULAR',
2946
2946
  productCodes: ['KENDOUIANGULAR'],
2947
- publishDate: 1779188642,
2948
- version: '24.0.0-develop.37',
2947
+ publishDate: 1779209779,
2948
+ version: '24.0.0-develop.39',
2949
2949
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
2950
2950
  };
2951
2951
 
@@ -3981,7 +3981,8 @@ class ChartComponent {
3981
3981
  {
3982
3982
  provide: L10N_PREFIX,
3983
3983
  useValue: 'kendo.chart'
3984
- }
3984
+ },
3985
+ { provide: KENDO_WEBMCP_HOST, useExisting: forwardRef(() => ChartComponent) }
3985
3986
  ], queries: [{ propertyName: "donutCenterTemplate", first: true, predicate: DonutCenterTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: "seriesCollectionComponent", predicate: SeriesComponent }, { propertyName: "seriesComponents", predicate: SeriesItemComponent, descendants: true }], viewQueries: [{ propertyName: "tooltipInstance", first: true, predicate: TooltipPopupComponent, descendants: true, static: true }, { propertyName: "crossahirTooltips", first: true, predicate: CrosshairTooltipsContainerComponent, descendants: true, static: true }], exportAs: ["kendoChart"], usesOnChanges: true, ngImport: i0, template: `
3986
3987
  <ng-container
3987
3988
  kendoChartLocalizedMessages
@@ -4028,7 +4029,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
4028
4029
  {
4029
4030
  provide: L10N_PREFIX,
4030
4031
  useValue: 'kendo.chart'
4031
- }
4032
+ },
4033
+ { provide: KENDO_WEBMCP_HOST, useExisting: forwardRef(() => ChartComponent) }
4032
4034
  ],
4033
4035
  selector: 'kendo-chart',
4034
4036
  template: `
@@ -7,7 +7,7 @@ export const packageMetadata = {
7
7
  "productCodes": [
8
8
  "KENDOUIANGULAR"
9
9
  ],
10
- "publishDate": 1779188642,
11
- "version": "24.0.0-develop.37",
10
+ "publishDate": 1779209779,
11
+ "version": "24.0.0-develop.39",
12
12
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
13
13
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-charts",
3
- "version": "24.0.0-develop.37",
3
+ "version": "24.0.0-develop.39",
4
4
  "description": "Kendo UI Charts for Angular - A comprehensive package for creating beautiful and interactive data visualization. Every chart type, stock charts, and sparklines are included.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -64,6 +64,11 @@
64
64
  {
65
65
  "description": "The `style` property of the `Series` interface has been renamed to `lineStyle`.",
66
66
  "file": "codemods/v24/series-interface-style.js"
67
+ },
68
+ {
69
+ "description": "Charts and Sankey redundant internal surface element has been removed.",
70
+ "file": "codemods/v24/charts-rendering-changes.js",
71
+ "instructionsOnly": true
67
72
  }
68
73
  ]
69
74
  }
@@ -71,7 +76,7 @@
71
76
  "package": {
72
77
  "productName": "Kendo UI for Angular",
73
78
  "productCode": "KENDOUIANGULAR",
74
- "publishDate": 1779188642,
79
+ "publishDate": 1779209779,
75
80
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
76
81
  }
77
82
  },
@@ -82,17 +87,17 @@
82
87
  "@angular/platform-browser": "19 - 21",
83
88
  "@progress/kendo-drawing": "^1.25.0",
84
89
  "@progress/kendo-licensing": "^1.11.0",
85
- "@progress/kendo-angular-common": "24.0.0-develop.37",
86
- "@progress/kendo-angular-intl": "24.0.0-develop.37",
87
- "@progress/kendo-angular-icons": "24.0.0-develop.37",
88
- "@progress/kendo-angular-l10n": "24.0.0-develop.37",
89
- "@progress/kendo-angular-popup": "24.0.0-develop.37",
90
- "@progress/kendo-angular-navigation": "24.0.0-develop.37",
90
+ "@progress/kendo-angular-common": "24.0.0-develop.39",
91
+ "@progress/kendo-angular-intl": "24.0.0-develop.39",
92
+ "@progress/kendo-angular-icons": "24.0.0-develop.39",
93
+ "@progress/kendo-angular-l10n": "24.0.0-develop.39",
94
+ "@progress/kendo-angular-popup": "24.0.0-develop.39",
95
+ "@progress/kendo-angular-navigation": "24.0.0-develop.39",
91
96
  "rxjs": "^6.5.3 || ^7.0.0"
92
97
  },
93
98
  "dependencies": {
94
99
  "tslib": "^2.3.1",
95
- "@progress/kendo-angular-schematics": "24.0.0-develop.37",
100
+ "@progress/kendo-angular-schematics": "24.0.0-develop.39",
96
101
  "@progress/kendo-charts": "2.12.2",
97
102
  "@progress/kendo-svg-icons": "^4.0.0"
98
103
  },