Skip to content

Commit c8e4b15

Browse files
author
pipeline
committed
v25.1.38 is released
1 parent 52a9671 commit c8e4b15

File tree

152 files changed

+2791
-699
lines changed

Some content is hidden

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

152 files changed

+2791
-699
lines changed

README.md

+3-9
Original file line numberDiff line numberDiff line change
@@ -1361,14 +1361,8 @@ The Syncfusion JavaScript UI controls library is the only suite that you will ev
13611361
## Release Notes
13621362
Please refer this [link](https://ej2.syncfusion.com/documentation/release-notes/index/)
13631363

1364-
## Support
1365-
For any questions or assistance, you can:
1366-
* Visit the [Syncfusion support portal](https://support.syncfusion.com/).
1367-
* Post your queries on the [community forums](https://www.syncfusion.com/forums).
1368-
* Renew your subscription by clicking [here](https://www.syncfusion.com/sales/products?utm_source=github&utm_medium=listing&utm_campaign=ej2-javascript-ui-controls) or contacting our sales team at <[email protected]>.
1369-
* If you have specific feature requests or suggestions, please submit them through our [feedback portal](https://www.syncfusion.com/feedback/javascript).
1370-
13711364
## License
1372-
For detailed information about the Syncfusion Essential Studio license and copyright, please refer to the [license](https://github.com/syncfusion/ej2-javascript-ui-controls/blob/master/license).
1373-
© Copyright 2024 Syncfusion, Inc. All Rights Reserved.
1365+
This is a commercial product and requires a paid license for possession or use. Syncfusion’s licensed software, including this component, is subject to the terms and conditions of Syncfusion's EULA (https://www.syncfusion.com/eula/es/). To acquire a license, you can purchase one at https://www.syncfusion.com/sales/products or start a free 30-day trial here (https://www.syncfusion.com/account/manage-trials/start-trials).
1366+
A free community license (https://www.syncfusion.com/products/communitylicense) is also available for companies and individuals whose organizations have less than $1 million USD in annual gross revenue and five or fewer developers.
1367+
© Copyright 2021 Syncfusion, Inc. All Rights Reserved.
13741368
The Syncfusion Essential Studio license and copyright applies to this distribution.

controls/barcodegenerator/CHANGELOG.md

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

33
## [Unreleased]
44

5-
## 25.1.37 (2024-03-26)
5+
## 25.1.38 (2024-04-02)
66

77
### Barcode
88

controls/calendars/CHANGELOG.md

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

33
## [Unreleased]
44

5+
## 25.1.37 (2024-03-26)
6+
7+
### DateTimePicker
8+
9+
#### Bug Fixes
10+
11+
- `#I15615` - Fixed console error that occurred when using the format property while opening the time popup.
12+
513
## 19.3.46 (2021-10-19)
614

715
### TimePicker

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": "18.32.5",
3+
"version": "25.1.37",
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/src/datepicker/datepicker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ export class DatePicker extends Calendar implements IInput {
471471
public render(): void {
472472
this.initialize();
473473
this.bindEvents();
474-
if (this.floatLabelType === 'Auto') {
474+
if (this.floatLabelType !== 'Never') {
475475
Input.calculateWidth(this.inputElement, this.inputWrapper.container);
476476
}
477477
if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {

controls/calendars/src/daterangepicker/daterangepicker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,7 @@ export class DateRangePicker extends CalendarBase {
748748
if (this.element.hasAttribute('data-val')) {
749749
this.element.setAttribute('data-val', 'false');
750750
}
751-
if (this.floatLabelType === 'Auto') {
751+
if (this.floatLabelType !== 'Never') {
752752
Input.calculateWidth(this.inputElement, this.inputWrapper.container);
753753
}
754754
if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {

controls/calendars/src/datetimepicker/datetimepicker.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,7 @@ export class DateTimePicker extends DatePicker {
723723
this.inputElement.tabIndex = -1;
724724
}
725725
}
726-
if (this.floatLabelType === 'Auto') {
726+
if (this.floatLabelType !== 'Never') {
727727
Input.calculateWidth(this.inputElement, this.inputWrapper.container);
728728
}
729729
if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
@@ -984,6 +984,9 @@ export class DateTimePicker extends DatePicker {
984984
let dateObject: Date;
985985
if (this.calendarMode === 'Gregorian') {
986986
this.cldrDateTimeFormat().replace(this.formatRegex, this.TimePopupFormat())
987+
if (this.dateFormatString === '') {
988+
this.dateFormatString = this.cldrDateTimeFormat();
989+
}
987990
dateObject = this.globalize.parseDate(this.inputElement.value, {
988991
format: this.dateFormatString, type: 'datetime'
989992
});

controls/calendars/styles/calendar/_theme.scss

+1-1
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@
475475
}
476476
}
477477

478-
.e-zoomin {
478+
.e-calendar .e-zoomin {
479479
animation: animatezoom .3s;
480480
}
481481

controls/charts/CHANGELOG.md

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

33
## [Unreleased]
44

5-
## 25.1.37 (2024-03-26)
5+
## 25.1.38 (2024-04-02)
66

77
### AccumulationChart
88

controls/circulargauge/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
## [Unreleased]
66

7-
## 25.1.37 (2024-03-26)
7+
## 25.1.38 (2024-04-02)
88

99
### Circular Gauge
1010

controls/diagrams/CHANGELOG.md

+10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
## [Unreleased]
44

5+
## 25.1.38 (2024-04-02)
6+
7+
### Diagram
8+
9+
#### Bug Fixes
10+
11+
- `#I562564` - Now, the connector connected properly to the node while moving the node to another layer.
12+
- `#F187022` - Now, Connection change event changed state is triggered for port change within same node.
13+
- `#I566420` - Now, the annotation aligns properly while setting text align as Justify with text overflow as Ellipsis.
14+
515
## 25.1.37 (2024-03-26)
616

717
### 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": "25.1.35",
3+
"version": "25.1.37",
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",

controls/diagrams/spec/diagram/interaction/layer.spec.ts

+69
Original file line numberDiff line numberDiff line change
@@ -1173,3 +1173,72 @@ describe('872106: Layer object in diagram doesnot removed in clear method', () =
11731173
done();
11741174
});
11751175
});
1176+
1177+
describe('875087: Connector disappears when moved to another layer with Node connected', () => {
1178+
let diagram: Diagram;
1179+
let ele: HTMLElement;
1180+
beforeAll((): void => {
1181+
ele = createElement('div', { id: 'diagram_Layers_Con' });
1182+
document.body.appendChild(ele);
1183+
let connector: ConnectorModel = {
1184+
id: 'connector1', sourceID:'node1',targetID:'node2',annotations: [ {content: 'Connector'}],type:'Orthogonal'
1185+
};
1186+
let node: NodeModel = {
1187+
id: 'node1', width: 150, height: 100, offsetX: 100, offsetY: 100, annotations: [ { content: 'Node1'}]
1188+
};
1189+
let node2: NodeModel = {
1190+
id: 'node2', width: 80, height: 130, offsetX: 400, offsetY: 200, annotations: [ { content: 'Node2'}]
1191+
};
1192+
let node3: NodeModel = {
1193+
id: 'node3', width: 50, height: 50, offsetX: 600, offsetY: 200, annotations: [ { content: 'Node3'}]
1194+
};
1195+
let node4: NodeModel = {
1196+
id: 'node4', width: 50, height: 50, offsetX: 700, offsetY: 200, annotations: [ { content: 'Node4'}]
1197+
};
1198+
let group: NodeModel = {
1199+
id: 'group',children:['node3','node4'],padding:{left:10,right:10,top:10,bottom:10},style:{strokeColor:'black'}
1200+
};
1201+
1202+
diagram = new Diagram({
1203+
width: '1000px', height: '600px',
1204+
nodes: [node, node2,node3,node4,group], connectors: [connector],
1205+
});
1206+
diagram.appendTo("#diagram_Layers_Con");
1207+
});
1208+
afterAll((): void => {
1209+
diagram.destroy();
1210+
ele.remove();
1211+
});
1212+
it('Add node to new layer', (done: Function) => {
1213+
let layer: any = {
1214+
id: 'layer1',
1215+
visible: false,
1216+
objects: ['node13'],
1217+
lock: false,
1218+
};
1219+
1220+
diagram.addLayer(layer);
1221+
let node = {
1222+
id: 'node13',
1223+
height: 75,
1224+
width: 75,
1225+
offsetX: 250,
1226+
offsetY: 350,
1227+
annotations: [{ content: 'Node on Layer1' }],
1228+
};
1229+
diagram.add(node);
1230+
expect(diagram.nodes.length === 6).toBe(true);
1231+
done();
1232+
});
1233+
it('Move connected node to new layer', (done: Function) => {
1234+
diagram.moveObjects(['node1', 'connector1'], 'layer1');
1235+
expect(diagram.connectors.length === 1 && diagram.connectors[0].sourceID === 'node1').toBe(true);
1236+
done();
1237+
});
1238+
it('Move group node to new layer', (done: Function) => {
1239+
diagram.moveObjects(['group'], 'layer1');
1240+
let group = diagram.nameTable['group'];
1241+
expect(diagram.nodes.length === 6 && group.children.length === 2).toBe(true);
1242+
done();
1243+
});
1244+
});

controls/diagrams/spec/diagram/objects/annotation.spec.ts

+124
Original file line numberDiff line numberDiff line change
@@ -1408,4 +1408,128 @@ describe('Annotation Alignment Issue in virtualisation', () => {
14081408
done();
14091409
});
14101410

1411+
});
1412+
1413+
describe('Text alignment to justify in annotations does not function properly when the textOverflow', () => {
1414+
let diagram: Diagram;
1415+
let ele: HTMLElement;
1416+
1417+
beforeAll((): void => {
1418+
const isDef = (o: any) => o !== undefined && o !== null;
1419+
if (!isDef(window.performance)) {
1420+
console.log("Unsupported environment, window.performance.memory is unavailable");
1421+
this.skip(); //Skips test (in Chai)
1422+
return;
1423+
}
1424+
ele = createElement('div', { id: 'diagramAnnotationTestAlign' });
1425+
document.body.appendChild(ele);
1426+
let nodes: NodeModel[] = [
1427+
{
1428+
id: 'node1', width: 100, height: 100, offsetX: 200, offsetY: 200,
1429+
annotations: [{ content: 'Ellipsis WrapWithOverflow CollapseSpace Justify annotation', style: {
1430+
textOverflow: 'Ellipsis',
1431+
textWrapping: 'WrapWithOverflow',
1432+
whiteSpace: 'CollapseSpace',
1433+
textAlign: 'Justify',
1434+
} ,offset:{x:0.5,y:0.5}}],
1435+
},
1436+
]
1437+
1438+
diagram = new Diagram({ width: 1000, height: 1000, nodes: nodes,});
1439+
diagram.appendTo('#diagramAnnotationTestAlign');
1440+
1441+
});
1442+
1443+
afterAll((): void => {
1444+
diagram.destroy();
1445+
ele.remove();
1446+
});
1447+
1448+
it('Rendering node with annotation text align justify and WrapWithOverflow', (done: Function) => {
1449+
1450+
let node = diagram.nodes[0];
1451+
let textBounds = node.wrapper.children[1].bounds;
1452+
expect(textBounds.x === 150).toBe(true);
1453+
done();
1454+
});
1455+
it('Changing the annotation offset and checking bounds', (done: Function) => {
1456+
let node = diagram.nodes[0];
1457+
node.annotations[0].offset = {x:0.5,y:1};
1458+
diagram.dataBind();
1459+
let textBounds = node.wrapper.children[1].bounds;
1460+
expect(textBounds.x === 150 && textBounds.y > 220).toBe(true);
1461+
done();
1462+
});
1463+
it('Changing the annotation textOverflow and checking bounds', (done: Function) => {
1464+
let node = diagram.nodes[0];
1465+
node.annotations[0].style.textOverflow = 'Clip';
1466+
diagram.dataBind();
1467+
let textBounds = node.wrapper.children[1].bounds;
1468+
expect(textBounds.x === 150 && textBounds.y > 220).toBe(true);
1469+
done();
1470+
});
1471+
it('Changing the annotation text align to right', (done: Function) => {
1472+
let node = diagram.nodes[0];
1473+
node.annotations[0].style.textAlign = 'Right';
1474+
diagram.dataBind();
1475+
let textBounds = node.wrapper.children[1].bounds;
1476+
expect(textBounds.x === 150 && textBounds.y > 220).toBe(true);
1477+
done();
1478+
});
1479+
1480+
});
1481+
1482+
describe('Checking hyperlink for connector', () => {
1483+
let diagram: Diagram;
1484+
let ele: HTMLElement;
1485+
beforeAll((): void => {
1486+
const isDef = (o: any) => o !== undefined && o !== null;
1487+
if (!isDef(window.performance)) {
1488+
console.log("Unsupported environment, window.performance.memory is unavailable");
1489+
this.skip(); //Skips test (in Chai)
1490+
return;
1491+
}
1492+
ele = createElement('div', { id: 'diagram53' });
1493+
document.body.appendChild(ele);
1494+
let nodes:any = [{
1495+
// Position of the node
1496+
offsetX: 100,
1497+
offsetY: 100,
1498+
// Size of the node
1499+
width: 100,
1500+
height: 100,
1501+
style: { fill: '#6BA5D7', strokeColor: 'white' },
1502+
annotations: [{ hyperlink: { link: 'https://hr.syncfusion.com/home' } }]
1503+
}]
1504+
1505+
let connectors :any =[
1506+
{
1507+
id:"connector",
1508+
sourcePoint:{x:300,y:300},
1509+
targetPoint:{x:500,y:500},
1510+
annotations: [{ hyperlink: { link: 'https://hr.syncfusion.com/home' } }]
1511+
}
1512+
]
1513+
1514+
diagram = new Diagram({ mode: 'SVG', width: 800, height: 500, nodes: nodes, connectors: connectors });
1515+
diagram.appendTo('#diagram53');
1516+
});
1517+
1518+
afterAll((): void => {
1519+
diagram.destroy();
1520+
ele.remove();
1521+
});
1522+
1523+
it('checking hyperlink rendering in connector', (done: Function) => {
1524+
let mouseEvents: MouseEvents = new MouseEvents();
1525+
let diagramCanvas: HTMLElement = document.getElementById(diagram.element.id + 'content');
1526+
let element: HTMLElement = document.getElementById('diagram53content');
1527+
mouseEvents.mouseMoveEvent(diagramCanvas, 400, 200, true);
1528+
mouseEvents.mouseUpEvent(diagramCanvas, 400, 200, true);
1529+
expect(element.style.cursor !== 'pointer').toBe(true);
1530+
mouseEvents.mouseMoveEvent(diagramCanvas, 451, 406, true);
1531+
mouseEvents.mouseUpEvent(diagramCanvas, 451, 406, true);
1532+
expect(element.style.cursor === 'pointer').toBe(true);
1533+
done();
1534+
});
14111535
});

0 commit comments

Comments
 (0)