Skip to content

Commit 5330ec0

Browse files
author
pipeline
committed
v28.2.11 is released
1 parent 556c642 commit 5330ec0

File tree

189 files changed

+3283
-832
lines changed

Some content is hidden

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

189 files changed

+3283
-832
lines changed

controls/barcodegenerator/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 28.2.9 (2025-03-04)
5+
## 28.2.11 (2025-03-11)
66

77
### Barcode
88

controls/barcodegenerator/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ npm install @syncfusion/ej2-barcode-generator
3333

3434
Barcode control is also offered in the following list of frameworks.
3535

36-
| [<img src="https://ej2.syncfusion.com/github/images/angular.svg" height="50" />](https://www.syncfusion.com/angular-ui-components?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Angular](https://www.syncfusion.com/angular-ui-components?utm_medium=listing&utm_source=github)&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/react.svg" height="50" />](https://www.syncfusion.com/react-ui-components?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[React](https://www.syncfusion.com/react-ui-components?utm_medium=listing&utm_source=github)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/vue.svg" height="50" />](https://www.syncfusion.com/vue-ui-components?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Vue](https://www.syncfusion.com/vue-ui-components?utm_medium=listing&utm_source=github)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/netcore.svg" height="50" />](https://www.syncfusion.com/aspnet-core-ui-controls?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;[ASP.NET&nbsp;Core](https://www.syncfusion.com/aspnet-core-ui-controls?utm_medium=listing&utm_source=github)&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/netmvc.svg" height="50" />](https://www.syncfusion.com/aspnet-mvc-ui-controls?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;[ASP.NET&nbsp;MVC](https://www.syncfusion.com/aspnet-mvc-ui-controls?utm_medium=listing&utm_source=github)&nbsp;&nbsp; |
36+
| [<img src="https://ej2.syncfusion.com/github/images/angular-new.svg" height="50" />](https://www.syncfusion.com/angular-ui-components?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Angular](https://www.syncfusion.com/angular-ui-components?utm_medium=listing&utm_source=github)&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/react.svg" height="50" />](https://www.syncfusion.com/react-ui-components?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[React](https://www.syncfusion.com/react-ui-components?utm_medium=listing&utm_source=github)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/vue.svg" height="50" />](https://www.syncfusion.com/vue-ui-components?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Vue](https://www.syncfusion.com/vue-ui-components?utm_medium=listing&utm_source=github)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/netcore.svg" height="50" />](https://www.syncfusion.com/aspnet-core-ui-controls?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;[ASP.NET&nbsp;Core](https://www.syncfusion.com/aspnet-core-ui-controls?utm_medium=listing&utm_source=github)&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/netmvc.svg" height="50" />](https://www.syncfusion.com/aspnet-mvc-ui-controls?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;[ASP.NET&nbsp;MVC](https://www.syncfusion.com/aspnet-mvc-ui-controls?utm_medium=listing&utm_source=github)&nbsp;&nbsp; |
3737
| :-----: | :-----: | :-----: | :-----: | :-----: |
3838

3939
## Showcase samples

controls/base/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 28.2.9 (2025-03-04)
5+
## 28.2.11 (2025-03-11)
66

77
### Common
88

controls/buttons/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 28.2.9 (2025-03-04)
5+
## 28.2.11 (2025-03-11)
66

77
### Button
88

controls/calendars/CHANGELOG.md

+20
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,26 @@
22

33
## [Unreleased]
44

5+
## 28.2.11 (2025-03-11)
6+
7+
### TimePicker
8+
9+
#### Bug Fixes
10+
11+
- `#F196127` - Fixed an issue where the change event was not triggered correctly upon the second update of time using the keyboard.
12+
13+
### DatePicker
14+
15+
#### Bug Fixes
16+
17+
- `#FD65170` - Fixed an issue where the day of the week value was not displayed correctly when using `ccc` in the date format.
18+
19+
### DateTimePicker
20+
21+
#### Bug Fixes
22+
23+
- `#FD65170` - Fixed an issue where the day of the week value was not displayed correctly when using `ccc` in the date format.
24+
525
## 28.2.9 (2025-03-04)
626

727
### DateRangePicker

controls/calendars/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@syncfusion/ej2-calendars",
3-
"version": "28.2.7",
3+
"version": "28.2.9",
44
"description": "A complete package of date or time components with built-in features such as date formatting, inline editing, multiple (range) selection, range restriction, month and year selection, strict mode, and globalization.",
55
"author": "Syncfusion Inc.",
66
"license": "SEE LICENSE IN license",

controls/calendars/spec/datepicker/datepicker.spec.ts

+17-1
Original file line numberDiff line numberDiff line change
@@ -4430,6 +4430,22 @@ describe('Masked DatePicker', () => {
44304430
expect(datepicker.element.value).toBe('day/month/year day of the week');
44314431
expect(datepicker.value).toBe(null);
44324432
});
4433+
it('with format property - 6', () => {
4434+
let inputEle: HTMLElement = createElement('input', { id: 'datepicker' });
4435+
document.body.appendChild(inputEle);
4436+
datepicker = new DatePicker({enableMask: true , format: "dd'.'ccc'.'MMM'.'yyyy"});
4437+
datepicker.appendTo('#datepicker');
4438+
expect(datepicker.element.value).toBe('day.day of the week.month.year');
4439+
expect(datepicker.value).toBe(null);
4440+
});
4441+
it('with format property - 7', () => {
4442+
let inputEle: HTMLElement = createElement('input', { id: 'datepicker' });
4443+
document.body.appendChild(inputEle);
4444+
datepicker = new DatePicker({enableMask: true , format: "dd'.'cccc'.'MMM'.'yyyy"});
4445+
datepicker.appendTo('#datepicker');
4446+
expect(datepicker.element.value).toBe('day.day of the week.month.year');
4447+
expect(datepicker.value).toBe(null);
4448+
});
44334449
it('Focusing the component', () => {
44344450
let inputEle: HTMLElement = createElement('input', { id: 'datepicker' });
44354451
document.body.appendChild(inputEle);
@@ -5600,4 +5616,4 @@ describe('Null or undefined value testing', () => {
56005616
datepickerObj.destroy();
56015617
});
56025618
});
5603-
});
5619+
});

controls/calendars/spec/datetimepicker/datetimepicker.spec.ts

+16
Original file line numberDiff line numberDiff line change
@@ -3506,6 +3506,22 @@ describe('Datetimepicker', () => {
35063506
expect(datetimepicker.element.value).toBe('day/month/year day of the week');
35073507
expect(datetimepicker.value).toBe(null);
35083508
});
3509+
it('With format property - 6 ', () => {
3510+
let inputEle: HTMLElement = createElement('input', { id: 'datetimepicker' });
3511+
document.body.appendChild(inputEle);
3512+
datetimepicker = new DateTimePicker({enableMask: true , format: "dd'.'ccc'.'MMM'.'yyyy' 'HH':'mm':'ss"});
3513+
datetimepicker.appendTo('#datetimepicker');
3514+
expect(datetimepicker.element.value).toBe('day.day of the week.month.year hour:minute:second');
3515+
expect(datetimepicker.value).toBe(null);
3516+
});
3517+
it('with format property - 7', () => {
3518+
let inputEle: HTMLElement = createElement('input', { id: 'datetimepicker' });
3519+
document.body.appendChild(inputEle);
3520+
datetimepicker = new DateTimePicker({enableMask: true , format: "dd'.'cccc'.'MMM'.'yyyy' 'HH':'mm':'ss"});
3521+
datetimepicker.appendTo('#datetimepicker');
3522+
expect(datetimepicker.element.value).toBe('day.day of the week.month.year hour:minute:second');
3523+
expect(datetimepicker.value).toBe(null);
3524+
});
35093525
// it('Clear button', () => {
35103526
// let inputEle: HTMLElement = createElement('input', { id: 'datetimepicker' });
35113527
// document.body.appendChild(inputEle);

controls/calendars/src/daterangepicker/daterangepicker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1621,7 +1621,7 @@ export class DateRangePicker extends CalendarBase {
16211621
}
16221622

16231623
private getStartEndDate(date: Date, isEnd: boolean): Date {
1624-
if (this.currentView() === 'Year' && !isNullOrUndefined(date)) {
1624+
if ((this.currentView() === 'Year' && !isNullOrUndefined(date)) || this.depth === 'Year') {
16251625
return new Date(date.getFullYear(), date.getMonth() + (isEnd ? 1 : 0), isEnd ? 0 : 1);
16261626
} else if (this.currentView() === 'Decade' && !isNullOrUndefined(date)) {
16271627
return new Date(date.getFullYear(), isEnd ? 11 : 0, isEnd ? 31 : 1);

controls/calendars/src/maskbase/masked-date-time.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export class MaskedDateTime {
4848
private isNavigate : boolean = false;
4949
private navigated : boolean = false;
5050
private isBlur : boolean = false;
51-
private formatRegex : RegExp = /EEEEE|EEEE|EEE|EE|E|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yyy|yy|y|HH|H|hh|h|mm|m|fff|ff|f|aa|a|ss|s|zzzz|zzz|zz|z|'[^']*'|'[^']*'/g;
51+
private formatRegex : RegExp = /EEEEE|EEEE|EEE|EE|E|cccc|ccc|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yyy|yy|y|HH|H|hh|h|mm|m|fff|ff|f|aa|a|ss|s|zzzz|zzz|zz|z|'[^']*'|'[^']*'/g;
5252
private isDeletion: boolean = false;
5353
private isShortYear: boolean = false;
5454
private isDeleteKey: boolean = false;
@@ -576,9 +576,11 @@ export class MaskedDateTime {
576576
case 'E' :
577577
case 'EE':
578578
case 'EEE':
579+
case 'ccc':
579580
result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysAbbreviated[dayKeyAbbreviated[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();
580581
break;
581582
case 'EEEE':
583+
case 'cccc':
582584
result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysWide[dayKeyWide[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();
583585
break;
584586
case 'EEEEE':

controls/calendars/src/timepicker/timepicker.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1603,8 +1603,9 @@ export class TimePicker extends Component<HTMLElement> implements IInput {
16031603
}
16041604
} else {
16051605
if (!isNavigation) {
1606-
if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {
1607-
this.valueProcess(event, this.compareFormatChange(this.inputElement.value));
1606+
const value: Date = this.compareFormatChange(this.inputElement.value);
1607+
if ((+this.prevDate !== +value) || isNullOrUndefined(this.checkDateValue(this.value))) {
1608+
this.valueProcess(event, value);
16081609
}
16091610
} else {
16101611
const value: Date = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));

controls/charts/CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
## [Unreleased]
44

5+
## 28.2.11 (2025-03-11)
6+
7+
### Chart
8+
9+
#### Bug Fixes
10+
11+
- `#I696021` - Now, the chart SVG height and width are set correctly for the rotated axis label.
12+
513
## 28.2.9 (2025-03-04)
614

715
### Chart

controls/charts/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@syncfusion/ej2-charts",
3-
"version": "28.2.7",
3+
"version": "28.2.9",
44
"description": "Feature-rich chart control with built-in support for over 25 chart types, technical indictors, trendline, zooming, tooltip, selection, crosshair and trackball.",
55
"author": "Syncfusion Inc.",
66
"license": "SEE LICENSE IN license",

controls/charts/src/common/utils/helper.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,10 @@ export function rotateTextSize(font: FontModel, text: string, angle: number, cha
150150
htmlObject.appendChild(tspanElement);
151151
}
152152
}
153-
const axisSvgObject: Element = chart.svgRenderer.createSvg({ id: 'AxisLabelMax_svg' });
153+
const axisSvgObject: Element = chart.svgRenderer.createSvg({
154+
id: 'AxisLabelMax_svg', width: chart.availableSize.width,
155+
height: chart.availableSize.height
156+
});
154157
document.body.appendChild(axisSvgObject);
155158
axisSvgObject.appendChild(htmlObject);
156159
const box: ClientRect = htmlObject.getBoundingClientRect();

controls/data/CHANGELOG.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,15 @@
22

33
## [Unreleased]
44

5-
## 28.2.9 (2025-03-04)
5+
## 28.2.11 (2025-03-11)
6+
7+
### DataManager
8+
9+
#### Bug Fixes
10+
11+
- `#I679119` - The issue with filtering the `Date` column by month or day value has been resolved.
12+
13+
## 28.1.33 (2024-12-12)
614

715
### DataManager
816

controls/data/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@syncfusion/ej2-data",
3-
"version": "0.16.4",
3+
"version": "28.2.3",
44
"description": "Essential JS 2 DataManager",
55
"author": "Syncfusion Inc.",
66
"license": "SEE LICENSE IN license",

controls/data/src/util.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -661,8 +661,11 @@ export class DataUtil {
661661
private static getVal(array: Object[], index: number, field?: string): Object {
662662
return field ? this.getObject(field, array[index]) : array[index];
663663
}
664-
private static toLowerCase(val: string | number | boolean): string {
665-
return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';
664+
private static toLowerCase(val: string | number | boolean | Date): string {
665+
if (isNullOrUndefined(val)) return '';
666+
if (typeof val === 'string') return val.toLowerCase();
667+
if (val instanceof Date) return val.toString().toLowerCase();
668+
return val.toString();
666669
}
667670
/**
668671
* Specifies the Object with filter operators.

controls/diagrams/CHANGELOG.md

+9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@
22

33
## [Unreleased]
44

5+
## 28.2.11 (2025-03-11)
6+
7+
### Diagram
8+
9+
#### Bug Fixes
10+
11+
- `#I692003` - Undo and redo now working correctly for group nodes after `grouping`, `rotating`, and `ungrouping`.
12+
- `#I692517` - `excludeFromLayout` now works in complex hierarchical tree Layout.
13+
514
## 28.2.9 (2025-03-04)
615

716
### Diagram

controls/diagrams/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@syncfusion/ej2-diagrams",
3-
"version": "28.2.6",
3+
"version": "28.2.9",
44
"description": "Feature-rich diagram control to create diagrams like flow charts, organizational charts, mind maps, and BPMN diagrams. Its rich feature set includes built-in shapes, editing, serializing, exporting, printing, overview, data binding, and automatic layouts.",
55
"author": "Syncfusion Inc.",
66
"license": "SEE LICENSE IN license",

0 commit comments

Comments
 (0)