Skip to content

Commit a7766da

Browse files
author
pipeline
committed
v30.2.4 is released
1 parent 5914ec8 commit a7766da

File tree

292 files changed

+31356
-3706
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

292 files changed

+31356
-3706
lines changed

controls/base/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 30.1.42 (2025-07-29)
5+
## 30.2.4 (2025-08-07)
66

77
### Common
88

controls/charts/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 30.1.42 (2025-07-29)
5+
## 30.2.4 (2025-08-07)
66

77
### Accumulation Chart
88

controls/charts/spec/chart/scrollbar/scrollbar-horizontal.spec.ts

Lines changed: 43 additions & 43 deletions
Large diffs are not rendered by default.

controls/charts/spec/chart/scrollbar/scrollbar-multiple.spec.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,11 @@ describe('Scrollbar Chart', () => {
7777
let scrollEle = document.getElementById('container_scrollBar_svgprimaryXAxis');
7878
expect(scrollEle.parentElement.id == 'container_scrollElement').toBe(true);
7979
expect(scrollEle != null).toBe(true);
80-
expect(scrollEle.getAttribute("width") == '816.5' || scrollEle.getAttribute("width") == '820.5').toBe(true);
80+
81+
expect(scrollEle.getAttribute("width") == '816.5' || scrollEle.getAttribute("width") == '870.5').toBe(true);
8182
expect(scrollEle.getAttribute("height") == '16').toBe(true);
8283
expect(scrollEle.style.top == '374.5px' || scrollEle.style.top == '378px').toBe(true);
83-
expect(scrollEle.style.left == '73.5px' || scrollEle.style.left == '69.5px').toBe(true);
84+
expect(scrollEle.style.left == '73.5px' || scrollEle.style.left == '44.5px').toBe(true);
8485
done();
8586
};
8687
chartObj.loaded = loaded;
@@ -96,7 +97,7 @@ describe('Scrollbar Chart', () => {
9697
trigger.draganddropEvent(ele, 200, 200, 350, 350);
9798
let svgChildEleX: Element = document.getElementById('container_scrollBar_svgprimaryXAxis').children[0];
9899
let thumbRectEleX: Element = svgChildEleX.children[1].children[0];
99-
expect(parseInt(thumbRectEleX.getAttribute('x'), 10) === 158
100+
expect(parseInt(thumbRectEleX.getAttribute('x'), 10) === 183
100101
|| parseInt(thumbRectEleX.getAttribute('x'), 10) === 160
101102
|| parseInt(thumbRectEleX.getAttribute('x'), 10) === 161).toBe(true);
102103
expect(thumbRectEleX.getAttribute('y') === '0').toBe(true);
@@ -120,7 +121,7 @@ describe('Scrollbar Chart', () => {
120121
let svgChildEleX: Element = document.getElementById('container_scrollBar_svgprimaryXAxis').children[0];
121122
let thumbRectEleX: Element = svgChildEleX.children[1].children[0];
122123
let xAxisThumbX: string = thumbRectEleX.getAttribute('x');
123-
expect(parseInt(xAxisThumbX, 10) === 158 || parseInt(xAxisThumbX, 10) === 161
124+
expect(parseInt(xAxisThumbX, 10) === 183 || parseInt(xAxisThumbX, 10) === 161
124125
|| parseInt(xAxisThumbX, 10) === 162).toBe(true);
125126
expect(thumbRectEleX.getAttribute('y') === '0').toBe(true);
126127
expect(thumbRectEleX.getAttribute('height') === '16').toBe(true);
@@ -210,7 +211,7 @@ describe('Scrollbar Chart', () => {
210211
trigger.draganddropEvent(ele, 200, 200, 350, 350);
211212
let svgChildEleX: Element = document.getElementById('container_scrollBar_svgprimaryXAxis').children[0];
212213
let thumbRectEleX: Element = svgChildEleX.children[1].children[0];
213-
expect(thumbRectEleX.getAttribute('x') === '153.26636636636636' ||
214+
expect(thumbRectEleX.getAttribute('x') === '182.81739390316795' ||
214215
thumbRectEleX.getAttribute('x') === '157.81739390316795').toBe(true);
215216
expect(thumbRectEleX.getAttribute('y') === '0').toBe(true);
216217
expect(thumbRectEleX.getAttribute('height') === '16').toBe(true);
@@ -309,7 +310,7 @@ describe('Scrollbar Chart', () => {
309310
let svgChildEleX: Element = document.getElementById('container_scrollBar_svgprimaryXAxis').children[0];
310311
let thumbRectEleX: Element = svgChildEleX.children[1].children[0];
311312
expect(thumbRectEleX.getAttribute('x') === '45.47308910257471' ||
312-
thumbRectEleX.getAttribute('x') === '46.82589219466939').toBe(true);
313+
thumbRectEleX.getAttribute('x') === '71.8258921946694').toBe(true);
313314
expect(thumbRectEleX.getAttribute('y') === '0').toBe(true);
314315
expect(thumbRectEleX.getAttribute('height') === '16').toBe(true);
315316
expect(thumbRectEleX.getAttribute('width') === '40').toBe(true);
@@ -322,13 +323,13 @@ describe('Scrollbar Chart', () => {
322323
thumbRectEleY.getAttribute('width') === '42.19409282700422').toBe(true);
323324
let svg3: Element = document.getElementById('container_scrollBar_svgxAxis').children[0];
324325
let thumbRectEle3: Element = svg3.children[1].children[0];
325-
expect(thumbRectEle3.getAttribute('x') === '45.47308910257471' || thumbRectEle3.getAttribute('x') === '46.82589219466939').toBe(true);
326+
expect(thumbRectEle3.getAttribute('x') === '45.47308910257471' || thumbRectEle3.getAttribute('x') === '71.8258921946694').toBe(true);
326327
expect(thumbRectEle3.getAttribute('y') === '0').toBe(true);
327328
expect(thumbRectEle3.getAttribute('height') === '16').toBe(true);
328329
expect(thumbRectEle3.getAttribute('width') === '40').toBe(true);
329330
let svg4: Element = document.getElementById('container_scrollBar_svgxAxis2').children[0];
330331
let thumbRectEle4: Element = svg4.children[1].children[0];
331-
expect(thumbRectEle4.getAttribute('x') === '60.63078547009961' || thumbRectEle4.getAttribute('x') === '62.43452292622585').toBe(true);
332+
expect(thumbRectEle4.getAttribute('x') === '60.63078547009961' || thumbRectEle4.getAttribute('x') === '87.43452292622585').toBe(true);
332333
expect(thumbRectEle4.getAttribute('y') === '0').toBe(true);
333334
expect(thumbRectEle4.getAttribute('height') === '16').toBe(true);
334335
expect(thumbRectEle4.getAttribute('width') === '40').toBe(true);

controls/charts/src/accumulation-chart/accumulation.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1201,7 +1201,6 @@ export class AccumulationChart extends Component<HTMLElement> implements INotify
12011201
element.style.webkitUserSelect = 'none';
12021202
element.style.position = 'relative';
12031203
element.style.display = 'block';
1204-
element.style.overflow = 'hidden';
12051204
element.style.height = (element.style.height || (this.height && this.height.indexOf('%') === -1)) ? element.style.height : 'inherit';
12061205
let tabColor: string = '';
12071206
switch (this.theme) {

controls/charts/src/accumulation-chart/model/acc-base.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1274,14 +1274,14 @@ export class AccumulationSeries extends ChildProperty<AccumulationSeries> {
12741274
visiblePoints.push((this.resultData as object[])[i as number]);
12751275
}
12761276
}
1277+
this.findSumOfPoints(visiblePoints);
12771278
this.accumulation.redraw = this.borderRadius ? false : this.accumulation.enableAnimation;
12781279
this.accumulation.animateSeries = false;
12791280
const chartDuration: number = this.accumulation.duration;
12801281
this.accumulation.duration = isNullOrUndefined(duration) ? 500 : duration;
12811282
this.accumulation[(firstToLowerCase(this.type) + 'SeriesModule')].initProperties(this.accumulation, this);
12821283
this.renderPoints(this.accumulation, getElement(this.accumulation.element.id + '_Series_' + this.index), this.accumulation.redraw, null,
12831284
null, true);
1284-
this.findSumOfPoints(visiblePoints);
12851285
if (this.accumulation.centerLabel.text) {
12861286
this.accumulation.renderCenterLabel(true, true);
12871287
}

controls/charts/src/chart/axis/cartesian-panel.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,8 @@ export class CartesianAxisLayoutPanel {
597597
let topOffset: number = (axis.isAxisOpposedPosition && axis.orientation === 'Horizontal' ? -16 : 0)
598598
+ axis.rect.y + Math.max(0.5, axis.lineStyle.width / 2);
599599
let leftOffset: number = (axis.isAxisOpposedPosition && axis.orientation !== 'Horizontal' ? 16 : 0)
600-
+ axis.rect.x - (axis.orientation === 'Vertical' ? axis.scrollbarSettings.height : 0);
600+
+ (axis.rect.x - (axis.orientation === 'Horizontal' && axis.scrollbarSettings.enableZoom ? axis.zoomingScrollBar.svgExtraWidth / 2 : 0))
601+
- (axis.orientation === 'Vertical' ? axis.scrollbarSettings.height : 0);
601602
if (axis.orientation !== 'Horizontal' && (axis.scrollbarSettings.position === 'Left' || axis.scrollbarSettings.position === 'Right')) {
602603
leftOffset = calculateScrollbarOffset(axis.zoomingScrollBar, false);
603604
}

controls/charts/src/chart/series/scatter-series.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ export class ScatterSeries {
5656
height: series.marker.height, width: series.marker.width, shape: series.marker.shape
5757
};
5858
series.chart.trigger(pointRender, argsData);
59+
argsData.border = {
60+
width: this.isLineShapeMarker(argsData.shape) ? series.width : series.border.width,
61+
color: this.isLineShapeMarker(argsData.shape) ? series.interior : series.border.color
62+
};
5963
if (!argsData.cancel) {
6064
point.symbolLocations.push(
6165
getCoordinate(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted, series)
@@ -87,7 +91,7 @@ export class ScatterSeries {
8791

8892
private isLineShapeMarker(shape: ChartShape): boolean
8993
{
90-
return shape === 'HorizontalLine' || shape === 'VerticalLine' || shape === 'Cross';
94+
return shape.indexOf('Line') > -1 || shape === 'Plus' || shape === 'Cross';
9195
}
9296

9397
/**

controls/charts/src/common/scrollbar/scrollbar-elements.ts

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@ export function createScrollSvg(scrollbar: ScrollBar, renderer: SvgRenderer): vo
4545
}
4646
scrollbar.svgObject = renderer.createSvg({
4747
id: scrollbar.component.element.id + '_' + 'scrollBar_svg' + scrollbar.axis.name,
48-
width: scrollbar.isVertical ? scrollbar.height : scrollbar.width,
48+
width: scrollbar.isVertical ? scrollbar.height : (scrollbar.axis.scrollbarSettings.enableZoom ?
49+
(scrollbar.width + scrollbar.svgExtraWidth) : scrollbar.width),
4950
height: scrollbar.isVertical ? scrollbar.width : scrollbar.height,
50-
style: 'position: absolute;top: ' + topOffset + 'px;left: ' + leftOffset + 'px;cursor:auto;'
51+
style: 'position: absolute;top: ' + topOffset + 'px;left: ' + (leftOffset - (!scrollbar.isVertical && scrollbar.axis.scrollbarSettings.enableZoom ? scrollbar.svgExtraWidth / 2 : 0)) + 'px;cursor:auto;'
5152
});
5253
scrollbar.elements.push(scrollbar.svgObject);
5354
}
@@ -134,7 +135,8 @@ export class ScrollElements {
134135
const style: IScrollbarThemeStyle = scroll.scrollbarThemeStyle;
135136
const backRectEle: Element = renderer.drawRectangle(new RectOption(
136137
this.chartId + 'scrollBarBackRect_' + scroll.axis.name, scrollBar.trackColor || style.backRect, { width: 1, color: scrollBar.trackColor || style.backRect }, 1, new Rect(
137-
0, 0, scroll.width, scroll.height
138+
(scrollBar.enableZoom && !scroll.isVertical ? scroll.svgExtraWidth / 2 : 0),
139+
0, scroll.width, scroll.height
138140
),
139141
scrollBar.trackRadius, scrollBar.trackRadius)
140142
) as HTMLElement;
@@ -158,7 +160,10 @@ export class ScrollElements {
158160
this.leftArrowEle = renderer.drawPath(option);
159161
option.id = this.chartId + 'scrollBar_rightArrow_' + scroll.axis.name;
160162
this.rightArrowEle = renderer.drawPath(option);
161-
this.setArrowDirection(this.thumbRectX, this.thumbRectWidth, scroll.height);
163+
this.setArrowDirection((this.thumbRectX + (!scroll.isVertical && scroll.axis.scrollbarSettings.enableZoom ?
164+
scroll.svgExtraWidth / 2 : 0)), (this.thumbRectWidth - (!scroll.isVertical &&
165+
(this.thumbRectWidth + this.thumbRectX > scroll.width) ?
166+
scroll.svgExtraWidth / 2 : 0)), scroll.height);
162167
if (scrollBar.enableZoom) {
163168
parent.appendChild(this.leftArrowEle);
164169
parent.appendChild(this.rightArrowEle);
@@ -196,8 +201,10 @@ export class ScrollElements {
196201
this.slider = renderer.drawRectangle(new RectOption(
197202
this.chartId + 'scrollBarThumb_' + scroll.axis.name,
198203
scrollBar.scrollbarColor || style.thumb, { width: 1, color: scrollBar.scrollbarColor || style.thumb }, 1, new Rect(
199-
scrollBar.enableZoom ? this.thumbRectX : this.thumbRectX - scroll.height / 2, 0, scrollBar.enableZoom ?
200-
this.thumbRectWidth : this.thumbRectWidth + scroll.height / 2, scroll.height
204+
scrollBar.enableZoom ? (this.thumbRectX + (!scroll.isVertical && scroll.axis.scrollbarSettings.enableZoom ?
205+
scroll.svgExtraWidth / 2 : 0)) : this.thumbRectX - scroll.height / 2, 0, scrollBar.enableZoom ?
206+
this.thumbRectWidth - (!scroll.isVertical && (this.thumbRectWidth + this.thumbRectX > scroll.width) ?
207+
scroll.svgExtraWidth / 2 : 0) : this.thumbRectWidth + scroll.height / 2, scroll.height
201208
), scrollBar.scrollbarRadius, scrollBar.scrollbarRadius
202209
));
203210
parent.appendChild(this.slider);
@@ -214,7 +221,8 @@ export class ScrollElements {
214221
const style: IScrollbarThemeStyle = scroll.scrollbarThemeStyle;
215222
const option: CircleOption = new CircleOption(
216223
this.chartId + 'scrollBar_leftCircle_' + scroll.axis.name, style.circle, { width: 1, color: style.circle },
217-
1, this.thumbRectX, scroll.height / 2, scroll.height / 2
224+
1, this.thumbRectX + (!scroll.isVertical && scroll.axis.scrollbarSettings.enableZoom ? scroll.svgExtraWidth / 2 : 0),
225+
scroll.height / 2, scroll.height / 2
218226
);
219227
const scrollShadowEle: string = '<filter x="-25.0%" y="-20.0%" width="150.0%" height="150.0%" filterUnits="objectBoundingBox"' +
220228
'id="scrollbar_shadow"><feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>' +
@@ -233,7 +241,9 @@ export class ScrollElements {
233241
this.chartId + 'scrollBar_rightCircle_' + scroll.axis.name + '"></use>';
234242
this.leftCircleEle = renderer.drawCircle(option);
235243
option.id = this.chartId + 'scrollBar_rightCircle_' + scroll.axis.name;
236-
option.cx = this.thumbRectX + this.thumbRectWidth;
244+
option.cx = (this.thumbRectX + (!scroll.isVertical && scroll.axis.scrollbarSettings.enableZoom ? scroll.svgExtraWidth / 2 : 0))
245+
+ (this.thumbRectWidth - (!scroll.isVertical && (this.thumbRectWidth + this.thumbRectX > scroll.width) ?
246+
scroll.svgExtraWidth / 2 : 0));
237247
this.rightCircleEle = renderer.drawCircle(option);
238248
parent.appendChild(defElement);
239249
if (scrollBar.enableZoom) {
@@ -263,7 +273,7 @@ export class ScrollElements {
263273
);
264274
this.gripCircle = renderer.createGroup({
265275
id: this.chartId + 'scrollBar_gripCircle_' + scroll.axis.name,
266-
transform: 'translate(' + (!scrollBar.enableZoom ? ((this.thumbRectX + this.thumbRectWidth / 2) + ((scroll.isVertical ? 2 : 0) * padding) - scrollBar.height / 2) : (this.thumbRectX + this.thumbRectWidth / 2) + ((scroll.isVertical ? 1 : -1) * padding)) +
276+
transform: 'translate(' + (!scrollBar.enableZoom ? ((this.thumbRectX + this.thumbRectWidth / 2) + ((scroll.isVertical ? 2 : 0) * padding) - scrollBar.height / 2) : ((this.thumbRectX + (!scroll.isVertical && scroll.axis.scrollbarSettings.enableZoom ? scroll.svgExtraWidth / 2 : 0)) + (this.thumbRectWidth - (!scroll.isVertical && scroll.axis.scrollbarSettings.enableZoom && this.thumbRectWidth + this.thumbRectX > scroll.width ? scroll.svgExtraWidth / 2 : 0)) / 2) + ((scroll.isVertical ? 1 : -1) * padding)) +
267277
',' + (scroll.isVertical ? (scroll.height / 2 + padding / 2) - 0.5 : (scroll.height / 2 - padding / 2) - 0.5) + ') rotate(' + (scroll.isVertical ? '180' : '0') + ')'
268278
});
269279
for (let i: number = 1; i <= (scroll.component.theme.indexOf('Fluent2') > -1 || (scroll.component.theme.indexOf('Bootstrap5')) > -1 || scroll.component.theme.indexOf('Tailwind3') > -1 ? 10 : 6); i++) {

controls/charts/src/common/scrollbar/scrollbar.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export class ScrollBar {
2828

2929
public svgObject: Element;
3030

31+
public svgExtraWidth: number = 50;
32+
3133
public width: number;
3234

3335
public height: number;
@@ -246,8 +248,8 @@ export class ScrollBar {
246248

247249
private isWithIn(currentX: number): boolean {
248250
const circleRadius: number = this.axis.scrollbarSettings.height / 2;
249-
return (currentX - circleRadius >= 0 &&
250-
currentX + this.scrollElements.thumbRectWidth + circleRadius <= this.width);
251+
return ((currentX - (this.axis.scrollbarSettings.enableZoom && this.axis.orientation === 'Horizontal' ? this.svgExtraWidth / 2 : 0)) - circleRadius >= 0 &&
252+
currentX + this.scrollElements.thumbRectWidth + circleRadius <= (this.width + (this.axis.scrollbarSettings.enableZoom && this.axis.orientation === 'Horizontal' ? this.svgExtraWidth / 2 : 0)));
251253
}
252254

253255
/**
@@ -280,6 +282,10 @@ export class ScrollBar {
280282
const axis: Axis = this.axis;
281283
const circleRadius: number = this.axis.scrollbarSettings.height / 2;
282284
const circleWidth: number = 1;
285+
if (axis.scrollbarSettings.enableZoom && !this.isVertical) {
286+
currentX -= (this.svgExtraWidth / 2);
287+
currentWidth += (this.svgExtraWidth / 2);
288+
}
283289
const currentScrollWidth: number = currentX + currentWidth + circleRadius + circleWidth;
284290
const currentZPWidth: number = circleRadius + (circleWidth / 2);
285291
const axisSize: number = this.isVertical ? axis.rect.height : this.width;
@@ -339,7 +345,7 @@ export class ScrollBar {
339345
this.axis.zoomPosition = this.zoomPosition < 0 ? 0 : this.zoomPosition > 0.9 ? 1 : this.zoomPosition;
340346
}
341347
this.component.trigger(scrollChanged, this.getArgs(scrollChanged, range, zoomPosition, zoomFactor, currentRange));
342-
} else if (this.isResizeLeft || this.isResizeRight) {
348+
} else if ((this.isResizeLeft && (this.axis.orientation === 'Horizontal' ? (mouseXY > (this.svgExtraWidth / 2 + this.axis.scrollbarSettings.height / 2)) : true)) || (this.isResizeRight && (this.axis.orientation === 'Horizontal' ? (mouseXY < (this.width + this.svgExtraWidth)) : true))) {
343349
this.resizeThumb();
344350
}
345351
}
@@ -722,7 +728,7 @@ export class ScrollBar {
722728
}
723729
}
724730
} else if (this.isResizeRight) {
725-
currentWidth = mouseXY >= minThumbWidth + this.scrollElements.thumbRectX && mouseXY <= this.width - circleRadius ?
731+
currentWidth = mouseXY >= minThumbWidth + this.scrollElements.thumbRectX && mouseXY <= (this.width + (this.axis.orientation === 'Horizontal' ? this.svgExtraWidth / 2 : 0)) - circleRadius ?
726732
mouseXY - this.scrollElements.thumbRectX : this.previousWidth;
727733
this.scrollElements.thumbRectWidth = this.previousWidth = currentWidth;
728734
this.previousXY = mouseXY;

0 commit comments

Comments
 (0)