@progress/kendo-angular-charts 18.1.0-develop.8 → 18.1.0

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.
@@ -2,6 +2,7 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
+ import { OnDestroy } from '@angular/core';
5
6
  import { IntlService } from '@progress/kendo-angular-intl';
6
7
  import { CollectionItemComponent } from '../common/collection-item.component';
7
8
  import { CollectionService } from '../common/collection.service';
@@ -13,9 +14,10 @@ import * as i0 from "@angular/core";
13
14
  /**
14
15
  * The configuration component for a category axis ([see example]({% slug axes_chart_charts %})).
15
16
  */
16
- export declare class CategoryAxisItemComponent extends CollectionItemComponent implements CategoryAxis {
17
+ export declare class CategoryAxisItemComponent extends CollectionItemComponent implements CategoryAxis, OnDestroy {
17
18
  protected configurationService: ConfigurationService;
18
19
  protected collectionService: CollectionService;
20
+ private intl;
19
21
  autoBaseUnitSteps: AutoBaseUnitSteps;
20
22
  axisCrossingValue: any | any[];
21
23
  background: string;
@@ -86,7 +88,9 @@ export declare class CategoryAxisItemComponent extends CollectionItemComponent i
86
88
  select: CategoryAxisSelect;
87
89
  title: CategoryAxisTitle;
88
90
  rangeLabels: CategoryAxisRangeLabels;
91
+ private intlSubscription;
89
92
  constructor(configurationService: ConfigurationService, collectionService: CollectionService, intl: IntlService, localeId: string);
93
+ ngOnDestroy(): void;
90
94
  static ɵfac: i0.ɵɵFactoryDeclaration<CategoryAxisItemComponent, never>;
91
95
  static ɵcmp: i0.ɵɵComponentDeclaration<CategoryAxisItemComponent, "kendo-chart-category-axis-item", never, { "autoBaseUnitSteps": { "alias": "autoBaseUnitSteps"; "required": false; }; "axisCrossingValue": { "alias": "axisCrossingValue"; "required": false; }; "background": { "alias": "background"; "required": false; }; "baseUnit": { "alias": "baseUnit"; "required": false; }; "baseUnitStep": { "alias": "baseUnitStep"; "required": false; }; "categories": { "alias": "categories"; "required": false; }; "color": { "alias": "color"; "required": false; }; "justified": { "alias": "justified"; "required": false; }; "line": { "alias": "line"; "required": false; }; "majorGridLines": { "alias": "majorGridLines"; "required": false; }; "majorTicks": { "alias": "majorTicks"; "required": false; }; "max": { "alias": "max"; "required": false; }; "maxDateGroups": { "alias": "maxDateGroups"; "required": false; }; "maxDivisions": { "alias": "maxDivisions"; "required": false; }; "min": { "alias": "min"; "required": false; }; "minorGridLines": { "alias": "minorGridLines"; "required": false; }; "minorTicks": { "alias": "minorTicks"; "required": false; }; "name": { "alias": "name"; "required": false; }; "pane": { "alias": "pane"; "required": false; }; "plotBands": { "alias": "plotBands"; "required": false; }; "reverse": { "alias": "reverse"; "required": false; }; "roundToBaseUnit": { "alias": "roundToBaseUnit"; "required": false; }; "startAngle": { "alias": "startAngle"; "required": false; }; "type": { "alias": "type"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "weekStartDay": { "alias": "weekStartDay"; "required": false; }; "crosshair": { "alias": "crosshair"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "notes": { "alias": "notes"; "required": false; }; "select": { "alias": "select"; "required": false; }; "title": { "alias": "title"; "required": false; }; "rangeLabels": { "alias": "rangeLabels"; "required": false; }; }, {}, never, never, true, never>;
92
96
  }
@@ -2,6 +2,7 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
+ import { OnDestroy } from '@angular/core';
5
6
  import { IntlService } from '@progress/kendo-angular-intl';
6
7
  import { CollectionItemComponent } from '../common/collection-item.component';
7
8
  import { CollectionService } from '../common/collection.service';
@@ -13,7 +14,7 @@ import * as i0 from "@angular/core";
13
14
  * The configuration component for an X axis
14
15
  * ([see example]({% slug api_charts_xaxiscomponent %})).
15
16
  */
16
- export declare class XAxisItemComponent extends CollectionItemComponent implements XAxis {
17
+ export declare class XAxisItemComponent extends CollectionItemComponent implements XAxis, OnDestroy {
17
18
  protected configurationService: ConfigurationService;
18
19
  protected collectionService: CollectionService;
19
20
  protected intl: IntlService;
@@ -57,7 +58,9 @@ export declare class XAxisItemComponent extends CollectionItemComponent implemen
57
58
  labels: XAxisLabels;
58
59
  notes: XAxisNotes;
59
60
  title: XAxisTitle;
61
+ private intlSubscription;
60
62
  constructor(configurationService: ConfigurationService, collectionService: CollectionService, intl: IntlService, localeId: string);
63
+ ngOnDestroy(): void;
61
64
  static ɵfac: i0.ɵɵFactoryDeclaration<XAxisItemComponent, never>;
62
65
  static ɵcmp: i0.ɵɵComponentDeclaration<XAxisItemComponent, "kendo-chart-x-axis-item", never, { "axisCrossingValue": { "alias": "axisCrossingValue"; "required": false; }; "background": { "alias": "background"; "required": false; }; "baseUnit": { "alias": "baseUnit"; "required": false; }; "categories": { "alias": "categories"; "required": false; }; "color": { "alias": "color"; "required": false; }; "line": { "alias": "line"; "required": false; }; "majorGridLines": { "alias": "majorGridLines"; "required": false; }; "majorTicks": { "alias": "majorTicks"; "required": false; }; "majorUnit": { "alias": "majorUnit"; "required": false; }; "max": { "alias": "max"; "required": false; }; "min": { "alias": "min"; "required": false; }; "minorGridLines": { "alias": "minorGridLines"; "required": false; }; "minorTicks": { "alias": "minorTicks"; "required": false; }; "minorUnit": { "alias": "minorUnit"; "required": false; }; "name": { "alias": "name"; "required": false; }; "narrowRange": { "alias": "narrowRange"; "required": false; }; "pane": { "alias": "pane"; "required": false; }; "plotBands": { "alias": "plotBands"; "required": false; }; "reverse": { "alias": "reverse"; "required": false; }; "startAngle": { "alias": "startAngle"; "required": false; }; "type": { "alias": "type"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "weekStartDay": { "alias": "weekStartDay"; "required": false; }; "crosshair": { "alias": "crosshair"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "notes": { "alias": "notes"; "required": false; }; "title": { "alias": "title"; "required": false; }; }, {}, never, never, true, never>;
63
66
  }
@@ -2,7 +2,6 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { NgZone } from '@angular/core';
6
5
  import { ConfigurationService } from './configuration.service';
7
6
  import * as i0 from "@angular/core";
8
7
  /**
@@ -10,22 +9,12 @@ import * as i0 from "@angular/core";
10
9
  */
11
10
  export declare class ThemeService extends ConfigurationService {
12
11
  private loaded;
13
- private element;
14
- constructor(ngZone: NgZone);
12
+ protected element: HTMLElement;
15
13
  loadTheme(): void;
16
14
  reset(): void;
17
- private readTheme;
18
- private readDefaultTheme;
15
+ protected readTheme(): void;
19
16
  private createElement;
20
17
  private destroyElement;
21
- private setStyle;
22
- private setColors;
23
- private setInactiveOpacity;
24
- private setFonts;
25
- private setSeriesColors;
26
- private mapColor;
27
- private queryColor;
28
- private queryStyle;
29
18
  static ɵfac: i0.ɵɵFactoryDeclaration<ThemeService, never>;
30
19
  static ɵprov: i0.ɵɵInjectableDeclaration<ThemeService>;
31
20
  }
@@ -18,6 +18,7 @@ import * as i3 from "@progress/kendo-angular-intl";
18
18
  export class CategoryAxisItemComponent extends CollectionItemComponent {
19
19
  configurationService;
20
20
  collectionService;
21
+ intl;
21
22
  autoBaseUnitSteps;
22
23
  axisCrossingValue;
23
24
  background;
@@ -89,11 +90,22 @@ export class CategoryAxisItemComponent extends CollectionItemComponent {
89
90
  select;
90
91
  title;
91
92
  rangeLabels;
93
+ intlSubscription;
92
94
  constructor(configurationService, collectionService, intl, localeId) {
93
95
  super(configurationService, collectionService);
94
96
  this.configurationService = configurationService;
95
97
  this.collectionService = collectionService;
96
- this.notifyChanges({ weekStartDay: intl.firstDay(localeId) });
98
+ this.intl = intl;
99
+ intl.localeId = localeId;
100
+ this.notifyChanges({ weekStartDay: intl.firstDay(intl.localeId) });
101
+ this.intlSubscription = intl.changes.subscribe(() => {
102
+ this.notifyChanges({ weekStartDay: intl.firstDay(intl.localeId) });
103
+ });
104
+ }
105
+ ngOnDestroy() {
106
+ if (this.intlSubscription) {
107
+ this.intlSubscription.unsubscribe();
108
+ }
97
109
  }
98
110
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CategoryAxisItemComponent, deps: [{ token: i1.ConfigurationService }, { token: i2.CollectionService }, { token: i3.IntlService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });
99
111
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CategoryAxisItemComponent, isStandalone: true, selector: "kendo-chart-category-axis-item", inputs: { autoBaseUnitSteps: "autoBaseUnitSteps", axisCrossingValue: "axisCrossingValue", background: "background", baseUnit: "baseUnit", baseUnitStep: "baseUnitStep", categories: "categories", color: "color", justified: "justified", line: "line", majorGridLines: "majorGridLines", majorTicks: "majorTicks", max: "max", maxDateGroups: "maxDateGroups", maxDivisions: "maxDivisions", min: "min", minorGridLines: "minorGridLines", minorTicks: "minorTicks", name: "name", pane: "pane", plotBands: "plotBands", reverse: "reverse", roundToBaseUnit: "roundToBaseUnit", startAngle: "startAngle", type: "type", visible: "visible", weekStartDay: "weekStartDay", crosshair: "crosshair", labels: "labels", notes: "notes", select: "select", title: "title", rangeLabels: "rangeLabels" }, providers: [ConfigurationService], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -61,12 +61,22 @@ export class XAxisItemComponent extends CollectionItemComponent {
61
61
  labels;
62
62
  notes;
63
63
  title;
64
+ intlSubscription;
64
65
  constructor(configurationService, collectionService, intl, localeId) {
65
66
  super(configurationService, collectionService);
66
67
  this.configurationService = configurationService;
67
68
  this.collectionService = collectionService;
68
69
  this.intl = intl;
69
- this.notifyChanges({ weekStartDay: intl.firstDay(localeId) });
70
+ intl.localeId = localeId;
71
+ this.notifyChanges({ weekStartDay: intl.firstDay(intl.localeId) });
72
+ this.intlSubscription = intl.changes.subscribe(() => {
73
+ this.notifyChanges({ weekStartDay: intl.firstDay(intl.localeId) });
74
+ });
75
+ }
76
+ ngOnDestroy() {
77
+ if (this.intlSubscription) {
78
+ this.intlSubscription.unsubscribe();
79
+ }
70
80
  }
71
81
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: XAxisItemComponent, deps: [{ token: i1.ConfigurationService }, { token: i2.CollectionService }, { token: i3.IntlService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });
72
82
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: XAxisItemComponent, isStandalone: true, selector: "kendo-chart-x-axis-item", inputs: { axisCrossingValue: "axisCrossingValue", background: "background", baseUnit: "baseUnit", categories: "categories", color: "color", line: "line", majorGridLines: "majorGridLines", majorTicks: "majorTicks", majorUnit: "majorUnit", max: "max", min: "min", minorGridLines: "minorGridLines", minorTicks: "minorTicks", minorUnit: "minorUnit", name: "name", narrowRange: "narrowRange", pane: "pane", plotBands: "plotBands", reverse: "reverse", startAngle: "startAngle", type: "type", visible: "visible", weekStartDay: "weekStartDay", crosshair: "crosshair", labels: "labels", notes: "notes", title: "title" }, providers: [ConfigurationService], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -2,94 +2,25 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Injectable, NgZone } from '@angular/core';
5
+ import { Injectable } from '@angular/core';
6
6
  import { ConfigurationService } from './configuration.service';
7
- import { chartBaseTheme } from '@progress/kendo-charts';
7
+ import { chartBaseTheme, chartTheme, deepExtend } from '@progress/kendo-charts';
8
8
  import { chartDefaultTheme } from './chart-default-theme';
9
9
  import { isDocumentAvailable } from '@progress/kendo-angular-common';
10
10
  import * as i0 from "@angular/core";
11
- const font = (style) => `${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;
12
- const computedBackgroundColor = (element) => window.getComputedStyle(element).backgroundColor;
13
- const letterPos = (letter) => letter.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0);
14
- const seriesPos = (name) => {
15
- const alpha = name.match(/series-([a-z])$/);
16
- if (alpha !== null) {
17
- return letterPos(alpha[1]);
18
- }
19
- const num = name.split('--series-')[1];
20
- return parseInt(num, 10) - 1;
21
- };
22
- const SERIES_COLORS = 30;
23
- const seriesTemplate = () => {
24
- let template = `
25
- <div class="k-var--series-a"></div>
26
- <div class="k-var--series-b"></div>
27
- <div class="k-var--series-c"></div>
28
- <div class="k-var--series-d"></div>
29
- <div class="k-var--series-e"></div>
30
- <div class="k-var--series-f"></div>
31
- `;
32
- for (let i = 0; i < SERIES_COLORS; i++) {
33
- template += `
34
- <div class="k-var--series-${i + 1}"></div>`;
35
- }
36
- return template;
37
- };
38
- const template = () => `
39
- <div class="k-var--primary"></div>
40
- <div class="k-var--primary-contrast"></div>
41
- <div class="k-var--base"></div>
42
- <div class="k-var--background"></div>
43
-
44
- <div class="k-var--kendo-color-subtle"></div>
45
-
46
- <div class="k-var--normal-background"></div>
47
- <div class="k-var--normal-text-color"></div>
48
- <div class="k-var--hover-background"></div>
49
- <div class="k-var--hover-text-color"></div>
50
- <div class="k-var--selected-background"></div>
51
- <div class="k-var--selected-text-color"></div>
52
- <div class="k-var--chart-error-bars-background"></div>
53
- <div class="k-var--chart-notes-background"></div>
54
- <div class="k-var--chart-notes-border"></div>
55
- <div class="k-var--chart-notes-lines"></div>
56
- <div class="k-var--chart-crosshair-background"></div>
57
-
58
- <div class="k-var--chart-inactive"></div>
59
- <div class="k-var--chart-major-lines"></div>
60
- <div class="k-var--chart-minor-lines"></div>
61
- <div class="k-var--chart-area-opacity"></div>
62
- <div class="k-var--chart-area-inactive-opacity"></div>
63
- <div class="k-var--chart-line-inactive-opacity"></div>
64
-
65
- <div class="k-widget k-chart">
66
- <div class="k-var--chart-font"></div>
67
- <div class="k-var--chart-title-font"></div>
68
- <div class="k-var--chart-pane-title-font"></div>
69
- <div class="k-var--chart-label-font"></div>
70
- </div>
71
-
72
- <div class="k-var--series-unset"></div>
73
- <div class="k-var--series">
74
- ${seriesTemplate()}
75
- </div>
76
- `;
77
11
  /**
78
12
  * @hidden
79
13
  */
80
14
  export class ThemeService extends ConfigurationService {
81
15
  loaded = false;
82
16
  element;
83
- constructor(ngZone) {
84
- super(ngZone);
85
- }
86
17
  loadTheme() {
87
18
  if (this.loaded || !isDocumentAvailable()) {
88
19
  return;
89
20
  }
90
- if (!this.readTheme()) {
91
- this.readDefaultTheme();
92
- }
21
+ this.createElement();
22
+ this.readTheme();
23
+ this.destroyElement();
93
24
  this.loaded = true;
94
25
  this.next();
95
26
  }
@@ -99,29 +30,21 @@ export class ThemeService extends ConfigurationService {
99
30
  this.loadTheme();
100
31
  }
101
32
  readTheme() {
102
- this.createElement();
103
- const available = this.queryColor('primary') !==
104
- this.queryColor('primary-contrast');
33
+ let theme = {};
105
34
  try {
106
- if (available) {
107
- this.push(chartBaseTheme());
108
- this.setColors();
109
- this.setFonts();
110
- this.setSeriesColors();
111
- }
35
+ theme = chartTheme(this.element);
112
36
  }
113
- finally {
114
- this.destroyElement();
37
+ catch {
38
+ theme = {};
115
39
  }
116
- return available;
117
- }
118
- readDefaultTheme() {
119
- this.push(chartDefaultTheme());
40
+ const available = Boolean(theme.chartArea && theme.chartArea.background);
41
+ const result = available ? deepExtend(chartBaseTheme(), theme) : chartDefaultTheme();
42
+ this.push(result);
120
43
  }
121
44
  createElement() {
122
45
  const container = this.element = document.createElement('div');
46
+ container.className = 'k-chart';
123
47
  container.style.display = 'none';
124
- container.innerHTML = template();
125
48
  document.body.appendChild(container);
126
49
  }
127
50
  destroyElement() {
@@ -130,113 +53,7 @@ export class ThemeService extends ConfigurationService {
130
53
  this.element = undefined;
131
54
  }
132
55
  }
133
- setStyle(key, value) {
134
- this.set(key, value);
135
- }
136
- setColors() {
137
- this.mapColor('axisDefaults.crosshair.color', 'chart-crosshair-background');
138
- this.mapColor('axisDefaults.labels.color', 'normal-text-color');
139
- this.mapColor('axisDefaults.line.color', 'chart-major-lines');
140
- this.mapColor('axisDefaults.majorGridLines.color', 'chart-major-lines');
141
- this.mapColor('axisDefaults.minorGridLines.color', 'chart-minor-lines');
142
- this.mapColor('axisDefaults.notes.icon.background', 'chart-notes-background');
143
- this.mapColor('axisDefaults.notes.icon.border.color', 'chart-notes-border');
144
- this.mapColor('axisDefaults.notes.line.color', 'chart-notes-lines');
145
- this.mapColor('axisDefaults.title.color', 'normal-text-color');
146
- this.mapColor('chartArea.background', 'background');
147
- this.mapColor('legend.inactiveItems.labels.color', 'chart-inactive');
148
- this.mapColor('legend.inactiveItems.markers.color', 'chart-inactive');
149
- this.mapColor('legend.labels.color', 'normal-text-color');
150
- this.mapColor('legend.title.color', 'normal-text-color');
151
- this.mapColor('seriesDefaults.boxPlot.downColor', 'chart-major-lines');
152
- this.mapColor('seriesDefaults.boxPlot.mean.color', 'base');
153
- this.mapColor('seriesDefaults.boxPlot.median.color', 'base');
154
- this.mapColor('seriesDefaults.boxPlot.whiskers.color', 'primary');
155
- this.mapColor('seriesDefaults.bullet.target.color', 'normal-text-color');
156
- this.mapColor('seriesDefaults.candlestick.downColor', 'normal-text-color');
157
- this.mapColor('seriesDefaults.candlestick.line.color', 'normal-text-color');
158
- this.mapColor('seriesDefaults.errorBars.color', 'chart-error-bars-background');
159
- this.mapColor('seriesDefaults.horizontalWaterfall.line.color', 'chart-major-lines');
160
- this.mapColor('seriesDefaults.icon.border.color', 'chart-major-lines');
161
- this.mapColor('seriesDefaults.labels.background', 'background');
162
- this.mapColor('seriesDefaults.labels.color', 'normal-text-color');
163
- this.mapColor('seriesDefaults.notes.icon.background', 'chart-notes-background');
164
- this.mapColor('seriesDefaults.notes.icon.border.color', 'chart-notes-border');
165
- this.mapColor('seriesDefaults.notes.line.color', 'chart-notes-lines');
166
- this.mapColor('seriesDefaults.verticalBoxPlot.downColor', 'chart-major-lines');
167
- this.mapColor('seriesDefaults.verticalBoxPlot.mean.color', 'base');
168
- this.mapColor('seriesDefaults.verticalBoxPlot.median.color', 'base');
169
- this.mapColor('seriesDefaults.verticalBoxPlot.whiskers.color', 'primary');
170
- this.mapColor('seriesDefaults.verticalBullet.target.color', 'normal-text-color');
171
- this.mapColor('seriesDefaults.waterfall.line.color', 'chart-major-lines');
172
- this.mapColor('title.color', 'normal-text-color');
173
- this.mapColor('subtitle.color', 'normal-text-color');
174
- // Sankey diagram
175
- this.mapColor('labels.color', 'normal-text-color');
176
- this.mapColor('labels.stroke.color', 'background');
177
- // 'k-var--kendo-color-subtle' class does not contain the --kendo-color-subtle variable style
178
- const element = this.element?.querySelector('.k-var--kendo-color-subtle');
179
- element && (element.style.color = 'var(--kendo-color-subtle)');
180
- this.mapColor('links.color', 'kendo-color-subtle', 'color');
181
- const opacity = parseFloat(this.queryStyle('chart-area-opacity').opacity);
182
- if (!isNaN(opacity)) {
183
- this.setStyle('seriesDefaults.area.opacity', opacity);
184
- this.setStyle('seriesDefaults.radarArea.opacity', opacity);
185
- this.setStyle('seriesDefaults.verticalArea.opacity', opacity);
186
- this.setStyle('seriesDefaults.labels.opacity', opacity);
187
- }
188
- this.setInactiveOpacity(['area', 'verticalArea'], 'chart-area-inactive-opacity');
189
- this.setInactiveOpacity(['line', 'verticalLine'], 'chart-line-inactive-opacity');
190
- }
191
- setInactiveOpacity(seriesTypes, selector) {
192
- const inactiveOpacity = parseFloat(this.queryStyle(selector).opacity);
193
- if (!isNaN(inactiveOpacity) && inactiveOpacity < 1) {
194
- seriesTypes.forEach(type => this.setStyle(`seriesDefaults.${type}.highlight.inactiveOpacity`, inactiveOpacity));
195
- }
196
- }
197
- setFonts() {
198
- const defaultFont = font(this.queryStyle('chart-font'));
199
- const titleFont = font(this.queryStyle('chart-title-font'));
200
- const paneTitleFont = font(this.queryStyle('chart-pane-title-font'));
201
- const labelFont = font(this.queryStyle('chart-label-font'));
202
- this.setStyle('axisDefaults.labels.font', labelFont);
203
- this.setStyle('axisDefaults.notes.label.font', defaultFont);
204
- this.setStyle('axisDefaults.title.font', defaultFont);
205
- this.setStyle('legend.labels.font', defaultFont);
206
- this.setStyle('seriesDefaults.labels.font', labelFont);
207
- this.setStyle('seriesDefaults.notes.label.font', defaultFont);
208
- this.setStyle('title.font', titleFont);
209
- this.setStyle('subtitle.font', paneTitleFont);
210
- this.setStyle('paneDefaults.title.font', paneTitleFont);
211
- // Sankey diagram
212
- this.setStyle('labels.font', defaultFont);
213
- }
214
- setSeriesColors() {
215
- const element = this.element;
216
- const series = [].slice.call(element.querySelectorAll('.k-var--series div'));
217
- const unsetColor = computedBackgroundColor(element.querySelector('.k-var--series-unset'));
218
- const seriesColors = series.reduce((arr, el) => {
219
- const pos = seriesPos(el.className);
220
- const color = computedBackgroundColor(el);
221
- if (color !== unsetColor) {
222
- arr[pos] = color;
223
- }
224
- return arr;
225
- }, [] // Will populate the series colors in this array
226
- );
227
- this.setStyle('seriesColors', seriesColors);
228
- }
229
- mapColor(key, varName, styleKey = 'backgroundColor') {
230
- this.setStyle(key, this.queryStyle(varName)[styleKey]);
231
- }
232
- queryColor(varName) {
233
- return this.queryStyle(varName).backgroundColor;
234
- }
235
- queryStyle(varName) {
236
- const element = this.element.querySelector(`.k-var--${varName}`);
237
- return window.getComputedStyle(element);
238
- }
239
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ThemeService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ThemeService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
240
57
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ThemeService, providedIn: 'root' });
241
58
  }
242
59
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ThemeService, decorators: [{
@@ -244,4 +61,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
244
61
  args: [{
245
62
  providedIn: 'root'
246
63
  }]
247
- }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
64
+ }] });
@@ -10,7 +10,7 @@ export const packageMetadata = {
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCode: 'KENDOUIANGULAR',
12
12
  productCodes: ['KENDOUIANGULAR'],
13
- publishDate: 1738337500,
14
- version: '18.1.0-develop.8',
13
+ publishDate: 1739287295,
14
+ version: '18.1.0',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };
@@ -0,0 +1,25 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { Injectable } from '@angular/core';
6
+ import { sankeyTheme } from '@progress/kendo-charts';
7
+ import { ThemeService } from '../common/theme.service';
8
+ import * as i0 from "@angular/core";
9
+ /**
10
+ * @hidden
11
+ */
12
+ export class SankeyThemeService extends ThemeService {
13
+ readTheme() {
14
+ const theme = sankeyTheme(this.element);
15
+ this.push(theme);
16
+ }
17
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SankeyThemeService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
18
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SankeyThemeService, providedIn: 'root' });
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SankeyThemeService, decorators: [{
21
+ type: Injectable,
22
+ args: [{
23
+ providedIn: 'root'
24
+ }]
25
+ }] });
@@ -11,7 +11,7 @@ import { combineLatest } from 'rxjs';
11
11
  import { auditTime, tap } from 'rxjs/operators';
12
12
  import { ConfigurationService, THROTTLE_MS } from './common/configuration.service';
13
13
  import { copyChanges } from './common/copy-changes';
14
- import { ThemeService } from './common/theme.service';
14
+ import { SankeyThemeService } from './sankey/theme.service';
15
15
  import { toSimpleChanges } from './common/to-simple-changes';
16
16
  import { packageMetadata } from './package-metadata';
17
17
  import { InstanceEventService } from './sankey/events';
@@ -24,7 +24,7 @@ import { LocalizedMessagesDirective } from './sankey/localization/localized-mess
24
24
  import { IntlService } from '@progress/kendo-angular-intl';
25
25
  import * as i0 from "@angular/core";
26
26
  import * as i1 from "./common/configuration.service";
27
- import * as i2 from "./common/theme.service";
27
+ import * as i2 from "./sankey/theme.service";
28
28
  import * as i3 from "@progress/kendo-angular-l10n";
29
29
  import * as i4 from "./sankey/events";
30
30
  import * as i5 from "@progress/kendo-angular-intl";
@@ -324,19 +324,13 @@ export class SankeyComponent {
324
324
  this.optionsChange = combineLatest([this.configurationService.onChange$, this.themeService.onChange$])
325
325
  .pipe(tap((result) => {
326
326
  this.options = result[0];
327
- this.theme = this.loadTheme(result[1]);
327
+ this.theme = result[1];
328
328
  }), auditTime(THROTTLE_MS))
329
329
  .subscribe(() => {
330
330
  this.refresh();
331
331
  });
332
332
  });
333
333
  }
334
- loadTheme(chartTheme) {
335
- return {
336
- ...chartTheme,
337
- nodeColors: chartTheme.seriesColors,
338
- };
339
- }
340
334
  run(callback, inZone = true, detectChanges) {
341
335
  if (inZone) {
342
336
  if (detectChanges) {
@@ -375,7 +369,7 @@ export class SankeyComponent {
375
369
  get isRTL() {
376
370
  return Boolean(this.localizationService.rtl);
377
371
  }
378
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SankeyComponent, deps: [{ token: i0.ElementRef }, { token: i1.ConfigurationService }, { token: i2.ThemeService }, { token: i3.LocalizationService }, { token: i4.InstanceEventService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i5.IntlService }], target: i0.ɵɵFactoryTarget.Component });
372
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SankeyComponent, deps: [{ token: i0.ElementRef }, { token: i1.ConfigurationService }, { token: i2.SankeyThemeService }, { token: i3.LocalizationService }, { token: i4.InstanceEventService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i5.IntlService }], target: i0.ɵɵFactoryTarget.Component });
379
373
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SankeyComponent, isStandalone: true, selector: "kendo-sankey", inputs: { data: "data", links: "links", nodes: "nodes", labels: "labels", title: "title", legend: "legend", tooltip: "tooltip", disableAutoLayout: "disableAutoLayout", navigable: "navigable", popupSettings: "popupSettings" }, outputs: { nodeEnter: "nodeEnter", nodeLeave: "nodeLeave", nodeClick: "nodeClick", linkEnter: "linkEnter", linkLeave: "linkLeave", linkClick: "linkClick" }, providers: [
380
374
  ConfigurationService,
381
375
  LocalizationService,
@@ -433,7 +427,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
433
427
  standalone: true,
434
428
  imports: [LocalizedMessagesDirective, SankeyTooltipPopupComponent, NgIf, WatermarkOverlayComponent]
435
429
  }]
436
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ConfigurationService }, { type: i2.ThemeService }, { type: i3.LocalizationService }, { type: i4.InstanceEventService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i5.IntlService }]; }, propDecorators: { data: [{
430
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ConfigurationService }, { type: i2.SankeyThemeService }, { type: i3.LocalizationService }, { type: i4.InstanceEventService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i5.IntlService }]; }, propDecorators: { data: [{
437
431
  type: Input
438
432
  }], links: [{
439
433
  type: Input
@@ -8,7 +8,7 @@ import { isDocumentAvailable, shouldShowValidationUI, ResizeSensorComponent, Wat
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';
11
- import { DateCategoryAxis, DateValueAxis, InstanceObserver, chartBaseTheme, Chart, StockChart, Sparkline, Sankey, createSankeyData } from '@progress/kendo-charts';
11
+ import { DateCategoryAxis, DateValueAxis, InstanceObserver, chartBaseTheme, chartTheme, deepExtend, Chart, StockChart, Sparkline, sankeyTheme, Sankey, createSankeyData } from '@progress/kendo-charts';
12
12
  import { exportImage, exportSVG } from '@progress/kendo-drawing';
13
13
  import { validatePackage } from '@progress/kendo-licensing';
14
14
  import { Subject, BehaviorSubject, combineLatest, Subscription } from 'rxjs';
@@ -1937,88 +1937,19 @@ const chartDefaultTheme = () => Object.assign({}, chartBaseTheme(), {
1937
1937
  ]
1938
1938
  });
1939
1939
 
1940
- const font = (style) => `${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;
1941
- const computedBackgroundColor = (element) => window.getComputedStyle(element).backgroundColor;
1942
- const letterPos = (letter) => letter.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0);
1943
- const seriesPos = (name) => {
1944
- const alpha = name.match(/series-([a-z])$/);
1945
- if (alpha !== null) {
1946
- return letterPos(alpha[1]);
1947
- }
1948
- const num = name.split('--series-')[1];
1949
- return parseInt(num, 10) - 1;
1950
- };
1951
- const SERIES_COLORS = 30;
1952
- const seriesTemplate = () => {
1953
- let template = `
1954
- <div class="k-var--series-a"></div>
1955
- <div class="k-var--series-b"></div>
1956
- <div class="k-var--series-c"></div>
1957
- <div class="k-var--series-d"></div>
1958
- <div class="k-var--series-e"></div>
1959
- <div class="k-var--series-f"></div>
1960
- `;
1961
- for (let i = 0; i < SERIES_COLORS; i++) {
1962
- template += `
1963
- <div class="k-var--series-${i + 1}"></div>`;
1964
- }
1965
- return template;
1966
- };
1967
- const template = () => `
1968
- <div class="k-var--primary"></div>
1969
- <div class="k-var--primary-contrast"></div>
1970
- <div class="k-var--base"></div>
1971
- <div class="k-var--background"></div>
1972
-
1973
- <div class="k-var--kendo-color-subtle"></div>
1974
-
1975
- <div class="k-var--normal-background"></div>
1976
- <div class="k-var--normal-text-color"></div>
1977
- <div class="k-var--hover-background"></div>
1978
- <div class="k-var--hover-text-color"></div>
1979
- <div class="k-var--selected-background"></div>
1980
- <div class="k-var--selected-text-color"></div>
1981
- <div class="k-var--chart-error-bars-background"></div>
1982
- <div class="k-var--chart-notes-background"></div>
1983
- <div class="k-var--chart-notes-border"></div>
1984
- <div class="k-var--chart-notes-lines"></div>
1985
- <div class="k-var--chart-crosshair-background"></div>
1986
-
1987
- <div class="k-var--chart-inactive"></div>
1988
- <div class="k-var--chart-major-lines"></div>
1989
- <div class="k-var--chart-minor-lines"></div>
1990
- <div class="k-var--chart-area-opacity"></div>
1991
- <div class="k-var--chart-area-inactive-opacity"></div>
1992
- <div class="k-var--chart-line-inactive-opacity"></div>
1993
-
1994
- <div class="k-widget k-chart">
1995
- <div class="k-var--chart-font"></div>
1996
- <div class="k-var--chart-title-font"></div>
1997
- <div class="k-var--chart-pane-title-font"></div>
1998
- <div class="k-var--chart-label-font"></div>
1999
- </div>
2000
-
2001
- <div class="k-var--series-unset"></div>
2002
- <div class="k-var--series">
2003
- ${seriesTemplate()}
2004
- </div>
2005
- `;
2006
1940
  /**
2007
1941
  * @hidden
2008
1942
  */
2009
1943
  class ThemeService extends ConfigurationService {
2010
1944
  loaded = false;
2011
1945
  element;
2012
- constructor(ngZone) {
2013
- super(ngZone);
2014
- }
2015
1946
  loadTheme() {
2016
1947
  if (this.loaded || !isDocumentAvailable()) {
2017
1948
  return;
2018
1949
  }
2019
- if (!this.readTheme()) {
2020
- this.readDefaultTheme();
2021
- }
1950
+ this.createElement();
1951
+ this.readTheme();
1952
+ this.destroyElement();
2022
1953
  this.loaded = true;
2023
1954
  this.next();
2024
1955
  }
@@ -2028,29 +1959,21 @@ class ThemeService extends ConfigurationService {
2028
1959
  this.loadTheme();
2029
1960
  }
2030
1961
  readTheme() {
2031
- this.createElement();
2032
- const available = this.queryColor('primary') !==
2033
- this.queryColor('primary-contrast');
1962
+ let theme = {};
2034
1963
  try {
2035
- if (available) {
2036
- this.push(chartBaseTheme());
2037
- this.setColors();
2038
- this.setFonts();
2039
- this.setSeriesColors();
2040
- }
1964
+ theme = chartTheme(this.element);
2041
1965
  }
2042
- finally {
2043
- this.destroyElement();
1966
+ catch {
1967
+ theme = {};
2044
1968
  }
2045
- return available;
2046
- }
2047
- readDefaultTheme() {
2048
- this.push(chartDefaultTheme());
1969
+ const available = Boolean(theme.chartArea && theme.chartArea.background);
1970
+ const result = available ? deepExtend(chartBaseTheme(), theme) : chartDefaultTheme();
1971
+ this.push(result);
2049
1972
  }
2050
1973
  createElement() {
2051
1974
  const container = this.element = document.createElement('div');
1975
+ container.className = 'k-chart';
2052
1976
  container.style.display = 'none';
2053
- container.innerHTML = template();
2054
1977
  document.body.appendChild(container);
2055
1978
  }
2056
1979
  destroyElement() {
@@ -2059,113 +1982,7 @@ class ThemeService extends ConfigurationService {
2059
1982
  this.element = undefined;
2060
1983
  }
2061
1984
  }
2062
- setStyle(key, value) {
2063
- this.set(key, value);
2064
- }
2065
- setColors() {
2066
- this.mapColor('axisDefaults.crosshair.color', 'chart-crosshair-background');
2067
- this.mapColor('axisDefaults.labels.color', 'normal-text-color');
2068
- this.mapColor('axisDefaults.line.color', 'chart-major-lines');
2069
- this.mapColor('axisDefaults.majorGridLines.color', 'chart-major-lines');
2070
- this.mapColor('axisDefaults.minorGridLines.color', 'chart-minor-lines');
2071
- this.mapColor('axisDefaults.notes.icon.background', 'chart-notes-background');
2072
- this.mapColor('axisDefaults.notes.icon.border.color', 'chart-notes-border');
2073
- this.mapColor('axisDefaults.notes.line.color', 'chart-notes-lines');
2074
- this.mapColor('axisDefaults.title.color', 'normal-text-color');
2075
- this.mapColor('chartArea.background', 'background');
2076
- this.mapColor('legend.inactiveItems.labels.color', 'chart-inactive');
2077
- this.mapColor('legend.inactiveItems.markers.color', 'chart-inactive');
2078
- this.mapColor('legend.labels.color', 'normal-text-color');
2079
- this.mapColor('legend.title.color', 'normal-text-color');
2080
- this.mapColor('seriesDefaults.boxPlot.downColor', 'chart-major-lines');
2081
- this.mapColor('seriesDefaults.boxPlot.mean.color', 'base');
2082
- this.mapColor('seriesDefaults.boxPlot.median.color', 'base');
2083
- this.mapColor('seriesDefaults.boxPlot.whiskers.color', 'primary');
2084
- this.mapColor('seriesDefaults.bullet.target.color', 'normal-text-color');
2085
- this.mapColor('seriesDefaults.candlestick.downColor', 'normal-text-color');
2086
- this.mapColor('seriesDefaults.candlestick.line.color', 'normal-text-color');
2087
- this.mapColor('seriesDefaults.errorBars.color', 'chart-error-bars-background');
2088
- this.mapColor('seriesDefaults.horizontalWaterfall.line.color', 'chart-major-lines');
2089
- this.mapColor('seriesDefaults.icon.border.color', 'chart-major-lines');
2090
- this.mapColor('seriesDefaults.labels.background', 'background');
2091
- this.mapColor('seriesDefaults.labels.color', 'normal-text-color');
2092
- this.mapColor('seriesDefaults.notes.icon.background', 'chart-notes-background');
2093
- this.mapColor('seriesDefaults.notes.icon.border.color', 'chart-notes-border');
2094
- this.mapColor('seriesDefaults.notes.line.color', 'chart-notes-lines');
2095
- this.mapColor('seriesDefaults.verticalBoxPlot.downColor', 'chart-major-lines');
2096
- this.mapColor('seriesDefaults.verticalBoxPlot.mean.color', 'base');
2097
- this.mapColor('seriesDefaults.verticalBoxPlot.median.color', 'base');
2098
- this.mapColor('seriesDefaults.verticalBoxPlot.whiskers.color', 'primary');
2099
- this.mapColor('seriesDefaults.verticalBullet.target.color', 'normal-text-color');
2100
- this.mapColor('seriesDefaults.waterfall.line.color', 'chart-major-lines');
2101
- this.mapColor('title.color', 'normal-text-color');
2102
- this.mapColor('subtitle.color', 'normal-text-color');
2103
- // Sankey diagram
2104
- this.mapColor('labels.color', 'normal-text-color');
2105
- this.mapColor('labels.stroke.color', 'background');
2106
- // 'k-var--kendo-color-subtle' class does not contain the --kendo-color-subtle variable style
2107
- const element = this.element?.querySelector('.k-var--kendo-color-subtle');
2108
- element && (element.style.color = 'var(--kendo-color-subtle)');
2109
- this.mapColor('links.color', 'kendo-color-subtle', 'color');
2110
- const opacity = parseFloat(this.queryStyle('chart-area-opacity').opacity);
2111
- if (!isNaN(opacity)) {
2112
- this.setStyle('seriesDefaults.area.opacity', opacity);
2113
- this.setStyle('seriesDefaults.radarArea.opacity', opacity);
2114
- this.setStyle('seriesDefaults.verticalArea.opacity', opacity);
2115
- this.setStyle('seriesDefaults.labels.opacity', opacity);
2116
- }
2117
- this.setInactiveOpacity(['area', 'verticalArea'], 'chart-area-inactive-opacity');
2118
- this.setInactiveOpacity(['line', 'verticalLine'], 'chart-line-inactive-opacity');
2119
- }
2120
- setInactiveOpacity(seriesTypes, selector) {
2121
- const inactiveOpacity = parseFloat(this.queryStyle(selector).opacity);
2122
- if (!isNaN(inactiveOpacity) && inactiveOpacity < 1) {
2123
- seriesTypes.forEach(type => this.setStyle(`seriesDefaults.${type}.highlight.inactiveOpacity`, inactiveOpacity));
2124
- }
2125
- }
2126
- setFonts() {
2127
- const defaultFont = font(this.queryStyle('chart-font'));
2128
- const titleFont = font(this.queryStyle('chart-title-font'));
2129
- const paneTitleFont = font(this.queryStyle('chart-pane-title-font'));
2130
- const labelFont = font(this.queryStyle('chart-label-font'));
2131
- this.setStyle('axisDefaults.labels.font', labelFont);
2132
- this.setStyle('axisDefaults.notes.label.font', defaultFont);
2133
- this.setStyle('axisDefaults.title.font', defaultFont);
2134
- this.setStyle('legend.labels.font', defaultFont);
2135
- this.setStyle('seriesDefaults.labels.font', labelFont);
2136
- this.setStyle('seriesDefaults.notes.label.font', defaultFont);
2137
- this.setStyle('title.font', titleFont);
2138
- this.setStyle('subtitle.font', paneTitleFont);
2139
- this.setStyle('paneDefaults.title.font', paneTitleFont);
2140
- // Sankey diagram
2141
- this.setStyle('labels.font', defaultFont);
2142
- }
2143
- setSeriesColors() {
2144
- const element = this.element;
2145
- const series = [].slice.call(element.querySelectorAll('.k-var--series div'));
2146
- const unsetColor = computedBackgroundColor(element.querySelector('.k-var--series-unset'));
2147
- const seriesColors = series.reduce((arr, el) => {
2148
- const pos = seriesPos(el.className);
2149
- const color = computedBackgroundColor(el);
2150
- if (color !== unsetColor) {
2151
- arr[pos] = color;
2152
- }
2153
- return arr;
2154
- }, [] // Will populate the series colors in this array
2155
- );
2156
- this.setStyle('seriesColors', seriesColors);
2157
- }
2158
- mapColor(key, varName, styleKey = 'backgroundColor') {
2159
- this.setStyle(key, this.queryStyle(varName)[styleKey]);
2160
- }
2161
- queryColor(varName) {
2162
- return this.queryStyle(varName).backgroundColor;
2163
- }
2164
- queryStyle(varName) {
2165
- const element = this.element.querySelector(`.k-var--${varName}`);
2166
- return window.getComputedStyle(element);
2167
- }
2168
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ThemeService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
1985
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ThemeService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
2169
1986
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ThemeService, providedIn: 'root' });
2170
1987
  }
2171
1988
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ThemeService, decorators: [{
@@ -2173,7 +1990,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2173
1990
  args: [{
2174
1991
  providedIn: 'root'
2175
1992
  }]
2176
- }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
1993
+ }] });
2177
1994
 
2178
1995
  /**
2179
1996
  * @hidden
@@ -2909,8 +2726,8 @@ const packageMetadata = {
2909
2726
  productName: 'Kendo UI for Angular',
2910
2727
  productCode: 'KENDOUIANGULAR',
2911
2728
  productCodes: ['KENDOUIANGULAR'],
2912
- publishDate: 1738337500,
2913
- version: '18.1.0-develop.8',
2729
+ publishDate: 1739287295,
2730
+ version: '18.1.0',
2914
2731
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
2915
2732
  };
2916
2733
 
@@ -4193,12 +4010,22 @@ class XAxisItemComponent extends CollectionItemComponent {
4193
4010
  labels;
4194
4011
  notes;
4195
4012
  title;
4013
+ intlSubscription;
4196
4014
  constructor(configurationService, collectionService, intl, localeId) {
4197
4015
  super(configurationService, collectionService);
4198
4016
  this.configurationService = configurationService;
4199
4017
  this.collectionService = collectionService;
4200
4018
  this.intl = intl;
4201
- this.notifyChanges({ weekStartDay: intl.firstDay(localeId) });
4019
+ intl.localeId = localeId;
4020
+ this.notifyChanges({ weekStartDay: intl.firstDay(intl.localeId) });
4021
+ this.intlSubscription = intl.changes.subscribe(() => {
4022
+ this.notifyChanges({ weekStartDay: intl.firstDay(intl.localeId) });
4023
+ });
4024
+ }
4025
+ ngOnDestroy() {
4026
+ if (this.intlSubscription) {
4027
+ this.intlSubscription.unsubscribe();
4028
+ }
4202
4029
  }
4203
4030
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: XAxisItemComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }, { token: i3.IntlService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });
4204
4031
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: XAxisItemComponent, isStandalone: true, selector: "kendo-chart-x-axis-item", inputs: { axisCrossingValue: "axisCrossingValue", background: "background", baseUnit: "baseUnit", categories: "categories", color: "color", line: "line", majorGridLines: "majorGridLines", majorTicks: "majorTicks", majorUnit: "majorUnit", max: "max", min: "min", minorGridLines: "minorGridLines", minorTicks: "minorTicks", minorUnit: "minorUnit", name: "name", narrowRange: "narrowRange", pane: "pane", plotBands: "plotBands", reverse: "reverse", startAngle: "startAngle", type: "type", visible: "visible", weekStartDay: "weekStartDay", crosshair: "crosshair", labels: "labels", notes: "notes", title: "title" }, providers: [ConfigurationService], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -5785,6 +5612,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
5785
5612
  class CategoryAxisItemComponent extends CollectionItemComponent {
5786
5613
  configurationService;
5787
5614
  collectionService;
5615
+ intl;
5788
5616
  autoBaseUnitSteps;
5789
5617
  axisCrossingValue;
5790
5618
  background;
@@ -5856,11 +5684,22 @@ class CategoryAxisItemComponent extends CollectionItemComponent {
5856
5684
  select;
5857
5685
  title;
5858
5686
  rangeLabels;
5687
+ intlSubscription;
5859
5688
  constructor(configurationService, collectionService, intl, localeId) {
5860
5689
  super(configurationService, collectionService);
5861
5690
  this.configurationService = configurationService;
5862
5691
  this.collectionService = collectionService;
5863
- this.notifyChanges({ weekStartDay: intl.firstDay(localeId) });
5692
+ this.intl = intl;
5693
+ intl.localeId = localeId;
5694
+ this.notifyChanges({ weekStartDay: intl.firstDay(intl.localeId) });
5695
+ this.intlSubscription = intl.changes.subscribe(() => {
5696
+ this.notifyChanges({ weekStartDay: intl.firstDay(intl.localeId) });
5697
+ });
5698
+ }
5699
+ ngOnDestroy() {
5700
+ if (this.intlSubscription) {
5701
+ this.intlSubscription.unsubscribe();
5702
+ }
5864
5703
  }
5865
5704
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CategoryAxisItemComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }, { token: i3.IntlService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });
5866
5705
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CategoryAxisItemComponent, isStandalone: true, selector: "kendo-chart-category-axis-item", inputs: { autoBaseUnitSteps: "autoBaseUnitSteps", axisCrossingValue: "axisCrossingValue", background: "background", baseUnit: "baseUnit", baseUnitStep: "baseUnitStep", categories: "categories", color: "color", justified: "justified", line: "line", majorGridLines: "majorGridLines", majorTicks: "majorTicks", max: "max", maxDateGroups: "maxDateGroups", maxDivisions: "maxDivisions", min: "min", minorGridLines: "minorGridLines", minorTicks: "minorTicks", name: "name", pane: "pane", plotBands: "plotBands", reverse: "reverse", roundToBaseUnit: "roundToBaseUnit", startAngle: "startAngle", type: "type", visible: "visible", weekStartDay: "weekStartDay", crosshair: "crosshair", labels: "labels", notes: "notes", select: "select", title: "title", rangeLabels: "rangeLabels" }, providers: [ConfigurationService], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -10654,6 +10493,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
10654
10493
  args: ['breadcrumb', { static: true }]
10655
10494
  }] } });
10656
10495
 
10496
+ /**
10497
+ * @hidden
10498
+ */
10499
+ class SankeyThemeService extends ThemeService {
10500
+ readTheme() {
10501
+ const theme = sankeyTheme(this.element);
10502
+ this.push(theme);
10503
+ }
10504
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SankeyThemeService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
10505
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SankeyThemeService, providedIn: 'root' });
10506
+ }
10507
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SankeyThemeService, decorators: [{
10508
+ type: Injectable,
10509
+ args: [{
10510
+ providedIn: 'root'
10511
+ }]
10512
+ }] });
10513
+
10657
10514
  /**
10658
10515
  * @hidden
10659
10516
  */
@@ -11547,19 +11404,13 @@ class SankeyComponent {
11547
11404
  this.optionsChange = combineLatest([this.configurationService.onChange$, this.themeService.onChange$])
11548
11405
  .pipe(tap((result) => {
11549
11406
  this.options = result[0];
11550
- this.theme = this.loadTheme(result[1]);
11407
+ this.theme = result[1];
11551
11408
  }), auditTime(THROTTLE_MS))
11552
11409
  .subscribe(() => {
11553
11410
  this.refresh();
11554
11411
  });
11555
11412
  });
11556
11413
  }
11557
- loadTheme(chartTheme) {
11558
- return {
11559
- ...chartTheme,
11560
- nodeColors: chartTheme.seriesColors,
11561
- };
11562
- }
11563
11414
  run(callback, inZone = true, detectChanges) {
11564
11415
  if (inZone) {
11565
11416
  if (detectChanges) {
@@ -11598,7 +11449,7 @@ class SankeyComponent {
11598
11449
  get isRTL() {
11599
11450
  return Boolean(this.localizationService.rtl);
11600
11451
  }
11601
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SankeyComponent, deps: [{ token: i0.ElementRef }, { token: ConfigurationService }, { token: ThemeService }, { token: i1$1.LocalizationService }, { token: InstanceEventService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i3.IntlService }], target: i0.ɵɵFactoryTarget.Component });
11452
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SankeyComponent, deps: [{ token: i0.ElementRef }, { token: ConfigurationService }, { token: SankeyThemeService }, { token: i1$1.LocalizationService }, { token: InstanceEventService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i3.IntlService }], target: i0.ɵɵFactoryTarget.Component });
11602
11453
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SankeyComponent, isStandalone: true, selector: "kendo-sankey", inputs: { data: "data", links: "links", nodes: "nodes", labels: "labels", title: "title", legend: "legend", tooltip: "tooltip", disableAutoLayout: "disableAutoLayout", navigable: "navigable", popupSettings: "popupSettings" }, outputs: { nodeEnter: "nodeEnter", nodeLeave: "nodeLeave", nodeClick: "nodeClick", linkEnter: "linkEnter", linkLeave: "linkLeave", linkClick: "linkClick" }, providers: [
11603
11454
  ConfigurationService,
11604
11455
  LocalizationService,
@@ -11656,7 +11507,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
11656
11507
  standalone: true,
11657
11508
  imports: [LocalizedMessagesDirective, SankeyTooltipPopupComponent, NgIf, WatermarkOverlayComponent]
11658
11509
  }]
11659
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ConfigurationService }, { type: ThemeService }, { type: i1$1.LocalizationService }, { type: InstanceEventService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i3.IntlService }]; }, propDecorators: { data: [{
11510
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ConfigurationService }, { type: SankeyThemeService }, { type: i1$1.LocalizationService }, { type: InstanceEventService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i3.IntlService }]; }, propDecorators: { data: [{
11660
11511
  type: Input
11661
11512
  }], links: [{
11662
11513
  type: Input
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-charts",
3
- "version": "18.1.0-develop.8",
3
+ "version": "18.1.0",
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",
@@ -42,7 +42,7 @@
42
42
  "package": {
43
43
  "productName": "Kendo UI for Angular",
44
44
  "productCode": "KENDOUIANGULAR",
45
- "publishDate": 1738337500,
45
+ "publishDate": 1739287295,
46
46
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
47
47
  }
48
48
  },
@@ -52,19 +52,19 @@
52
52
  "@angular/core": "16 - 19",
53
53
  "@angular/platform-browser": "16 - 19",
54
54
  "@progress/kendo-drawing": "^1.21.0",
55
- "@progress/kendo-licensing": "^1.0.2",
56
- "@progress/kendo-angular-common": "18.1.0-develop.8",
57
- "@progress/kendo-angular-intl": "18.1.0-develop.8",
58
- "@progress/kendo-angular-icons": "18.1.0-develop.8",
59
- "@progress/kendo-angular-l10n": "18.1.0-develop.8",
60
- "@progress/kendo-angular-popup": "18.1.0-develop.8",
61
- "@progress/kendo-angular-navigation": "18.1.0-develop.8",
55
+ "@progress/kendo-licensing": "^1.4.0",
56
+ "@progress/kendo-angular-common": "18.1.0",
57
+ "@progress/kendo-angular-intl": "18.1.0",
58
+ "@progress/kendo-angular-icons": "18.1.0",
59
+ "@progress/kendo-angular-l10n": "18.1.0",
60
+ "@progress/kendo-angular-popup": "18.1.0",
61
+ "@progress/kendo-angular-navigation": "18.1.0",
62
62
  "rxjs": "^6.5.3 || ^7.0.0"
63
63
  },
64
64
  "dependencies": {
65
65
  "tslib": "^2.3.1",
66
- "@progress/kendo-angular-schematics": "18.1.0-develop.8",
67
- "@progress/kendo-charts": "2.7.0",
66
+ "@progress/kendo-angular-schematics": "18.1.0",
67
+ "@progress/kendo-charts": "2.7.1",
68
68
  "@progress/kendo-svg-icons": "^4.0.0"
69
69
  },
70
70
  "schematics": "./schematics/collection.json",
@@ -0,0 +1,14 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { ThemeService } from '../common/theme.service';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * @hidden
9
+ */
10
+ export declare class SankeyThemeService extends ThemeService {
11
+ protected readTheme(): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<SankeyThemeService, never>;
13
+ static ɵprov: i0.ɵɵInjectableDeclaration<SankeyThemeService>;
14
+ }
@@ -7,7 +7,7 @@ import { LocalizationService } from '@progress/kendo-angular-l10n';
7
7
  import { Group, ImageExportOptions, SVGExportOptions } from '@progress/kendo-drawing';
8
8
  import { Subscription } from 'rxjs';
9
9
  import { ConfigurationService } from './common/configuration.service';
10
- import { ThemeService } from './common/theme.service';
10
+ import { SankeyThemeService } from './sankey/theme.service';
11
11
  import { InstanceEventService, SankeyLinkEvent, SankeyNodeEvent } from './sankey/events';
12
12
  import { Sankey, SankeyEvent, SankeyTooltipEvent } from '@progress/kendo-charts';
13
13
  import { SankeyExportVisualOptions, SankeyLabelDefaults, SankeyLinkDefaults, SankeyNodeDefaults, SankeyTooltip } from './sankey/api-types';
@@ -50,7 +50,7 @@ import * as i0 from "@angular/core";
50
50
  export declare class SankeyComponent implements AfterViewInit, OnChanges, OnDestroy {
51
51
  protected element: ElementRef;
52
52
  configurationService: ConfigurationService;
53
- themeService: ThemeService;
53
+ themeService: SankeyThemeService;
54
54
  protected localizationService: LocalizationService;
55
55
  protected instanceEventService: InstanceEventService;
56
56
  protected ngZone: NgZone;
@@ -141,7 +141,7 @@ export declare class SankeyComponent implements AfterViewInit, OnChanges, OnDest
141
141
  protected destroyed: boolean;
142
142
  protected subscriptions: Subscription;
143
143
  protected rtl: boolean;
144
- constructor(element: ElementRef, configurationService: ConfigurationService, themeService: ThemeService, localizationService: LocalizationService, instanceEventService: InstanceEventService, ngZone: NgZone, changeDetector: ChangeDetectorRef, renderer: Renderer2, intlService: IntlService);
144
+ constructor(element: ElementRef, configurationService: ConfigurationService, themeService: SankeyThemeService, localizationService: LocalizationService, instanceEventService: InstanceEventService, ngZone: NgZone, changeDetector: ChangeDetectorRef, renderer: Renderer2, intlService: IntlService);
145
145
  ngAfterViewInit(): void;
146
146
  ngOnChanges(changes: {
147
147
  [propertyName: string]: SimpleChange;
@@ -203,7 +203,6 @@ export declare class SankeyComponent implements AfterViewInit, OnChanges, OnDest
203
203
  protected get instanceOptions(): any;
204
204
  protected activeEmitter(name: string): any;
205
205
  protected refreshWait(): void;
206
- protected loadTheme(chartTheme: any): any;
207
206
  protected run(callback: any, inZone?: boolean, detectChanges?: boolean): void;
208
207
  protected detectChanges(): void;
209
208
  protected intlChange(): void;