Skip to content

Commit 75bc151

Browse files
Merge remote-tracking branch 'remotes/origin/IN-211558-2025-vol3-SP2-dev-to-master-branch-merging-conflicts'
2 parents 0bac68e + de6d7bd commit 75bc151

File tree

16 files changed

+622
-27
lines changed

16 files changed

+622
-27
lines changed

ej2-javascript-toc.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,7 @@
567567
<li><a href="/ej2-javascript/chat-ui/header">Header</a></li>
568568
<li><a href="/ej2-javascript/chat-ui/footer">Footer</a></li>
569569
<li><a href="/ej2-javascript/chat-ui/templates">Templates</a></li>
570+
<li><a href="/ej2-javascript/chat-ui/es5-speech-to-text">Speech to Text</a></li>
570571
<li><a href="/ej2-javascript/chat-ui/appearance">Appearance</a></li>
571572
<li><a href="/ej2-javascript/chat-ui/globalization">Globalization</a></li>
572573
<li><a href="/ej2-javascript/chat-ui/accessibility">Accessibility</a></li>
@@ -2914,6 +2915,7 @@
29142915
<li><a href="/ej2-javascript/release-notes/31.1.18">31.1.18</a></li>
29152916
</ul>
29162917
</li>
2918+
<li><a href="/ej2-javascript/release-notes/31.2.12">31.2.12 Service Pack Release</a></li>
29172919
<li><a href="/ej2-javascript/release-notes/31.2.2">31.2.2 Service Pack Release</a></li>
29182920
<li><a href="/ej2-javascript/release-notes/31.1.17">31.1.17 Main Release</a></li>
29192921
</ul>
@@ -3394,4 +3396,4 @@
33943396
</li>
33953397
</ul>
33963398
</li>
3397-
</ul>
3399+
</ul>
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
---
2+
title: Essential Studio for ##Platform_Name## Release Notes
3+
description: Learn here about the controls in the Essential Studio for ##Platform_Name## 2025 Volume 3 SP Release - Release Notes
4+
platform: ej2-javascript
5+
documentation: ug
6+
---
7+
8+
# Essential Studio for ##Platform_Name## - v31.2.12 Release Notes
9+
10+
{% include release-info.html date="November 18, 2025" version="v31.2.12" passed="64043" failed="0" %}
11+
12+
{% directory path: _includes/release-notes/v31.2.12 %}
13+
14+
{% include {{file.url}} %}
15+
16+
{% enddirectory %}
17+
18+
## Test Results
19+
20+
| Component Name | Test Cases | Passed | Failed | Remarks |
21+
|---------------|------------|--------|--------|---------|
22+
| 3D Chart | 232 | 232 | 0 | All Passed |
23+
| 3D Circular Chart | 374 | 374 | 0 | All Passed |
24+
| Accordion | 205 | 205 | 0 | All Passed |
25+
| AI Assist View | 432 | 432 | 0 | All Passed |
26+
| App Bar | 67 | 67 | 0 | All Passed |
27+
| AutoComplete | 200 | 200 | 0 | All Passed |
28+
| Breadcrumb | 160 | 160 | 0 | All Passed |
29+
| Bullet Chart | 168 | 168 | 0 | All Passed |
30+
| Button | 145 | 145 | 0 | All Passed |
31+
| ButtonGroup | 120 | 120 | 0 | All Passed |
32+
| calendar | 177 | 177 | 0 | All Passed |
33+
| Carousel | 61 | 61 | 0 | All Passed |
34+
| Chart | 4958 | 4958 | 0 | All Passed |
35+
| Chat UI | 500 | 500 | 0 | All Passed |
36+
| Checkbox | 37 | 37 | 0 | All Passed |
37+
| CircularGauge | 429 | 429 | 0 | All Passed |
38+
| ColorPicker | 130 | 130 | 0 | All Passed |
39+
| Combo Box | 139 | 139 | 0 | All Passed |
40+
| Common | 904 | 904 | 0 | All Passed |
41+
| Context Menu | 105 | 105 | 0 | All Passed |
42+
| Data Grid | 3670 | 3670 | 0 | All Passed |
43+
| Date Picker | 426 | 426 | 0 | All Passed |
44+
| Date Range Picker | 519 | 519 | 0 | All Passed |
45+
| Date Time Picker | 324 | 324 | 0 | All Passed |
46+
| Diagram | 12813 | 12813 | 0 | All Passed |
47+
| Dialog | 63 | 63 | 0 | All Passed |
48+
| DropDown Button | 132 | 132 | 0 | All Passed |
49+
| Dropdown List | 194 | 194 | 0 | All Passed |
50+
| Dropdown Tree | 104 | 104 | 0 | All Passed |
51+
| File Manager | 2188 | 2188 | 0 | All Passed |
52+
| Floating Action Button | 174 | 174 | 0 | All Passed |
53+
| Gantt | 3530 | 3530 | 0 | All Passed |
54+
| HeatMap Chart | 635 | 635 | 0 | All Passed |
55+
| Image Editor | 1653 | 1653 | 0 | All Passed |
56+
| In-place Editor | 642 | 642 | 0 | All Passed |
57+
| Kanban | 268 | 268 | 0 | All Passed |
58+
| LinearGauge | 426 | 426 | 0 | All Passed |
59+
| Listbox | 115 | 115 | 0 | All Passed |
60+
| ListView | 84 | 84 | 0 | All Passed |
61+
| Maps | 1368 | 1368 | 0 | All Passed |
62+
| Mention | 35 | 35 | 0 | All Passed |
63+
| Menu | 187 | 187 | 0 | All Passed |
64+
| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
65+
| Multiselect Dropdown | 437 | 437 | 0 | All Passed |
66+
| OTP Input | 240 | 240 | 0 | All Passed |
67+
| Pivot Table | 5303 | 5303 | 0 | All Passed |
68+
| Progress Bar | 81 | 81 | 0 | All Passed |
69+
| Progress Button | 132 | 132 | 0 | All Passed |
70+
| Query Builder | 480 | 480 | 0 | All Passed |
71+
| RadioButton | 45 | 45 | 0 | All Passed |
72+
| RangeNavigator | 140 | 140 | 0 | All Passed |
73+
| Rating | 198 | 198 | 0 | All Passed |
74+
| Ribbon | 623 | 623 | 0 | All Passed |
75+
| Rich Text Editor | 5100 | 5100 | 0 | All Passed |
76+
| schedule | 4644 | 4644 | 0 | All Passed |
77+
| sidebar | 88 | 88 | 0 | All Passed |
78+
| Signature | 105 | 105 | 0 | All Passed |
79+
| Skeleton | 144 | 144 | 0 | All Passed |
80+
| Slider | 147 | 147 | 0 | All Passed |
81+
| SmithChart | 49 | 49 | 0 | All Passed |
82+
| Sparkline | 58 | 58 | 0 | All Passed |
83+
| Speech To Text | 200 | 200 | 0 | All Passed |
84+
| Speed Dial | 366 | 366 | 0 | All Passed |
85+
| Split Button | 144 | 144 | 0 | All Passed |
86+
| Stepper | 91 | 91 | 0 | All Passed |
87+
| Stock Chart | 379 | 379 | 0 | All Passed |
88+
| Tab | 69 | 69 | 0 | All Passed |
89+
| Text Area | 107 | 107 | 0 | All Passed |
90+
| TextBox | 58 | 58 | 0 | All Passed |
91+
| Time Picker | 180 | 180 | 0 | All Passed |
92+
| Timeline | 213 | 213 | 0 | All Passed |
93+
| Toast | 139 | 139 | 0 | All Passed |
94+
| Toolbar | 117 | 117 | 0 | All Passed |
95+
| ToolTip | 136 | 136 | 0 | All Passed |
96+
| TreeGrid | 3787 | 3787 | 0 | All Passed |
97+
| Treemap | 326 | 326 | 0 | All Passed |
98+
| Treeview | 370 | 370 | 0 | All Passed |

ej2-javascript/Release-notes/31.2.9.md

Lines changed: 0 additions & 16 deletions
This file was deleted.

ej2-javascript/code-snippet/rich-text-editor/mail-merge/index.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
{% raw %}
21
var rteValue =
32
'<p>Dear <span contenteditable="false" class="e-mention-chip"><span>{{FirstName}}</span></span> ' +
43
'<span contenteditable="false" class="e-mention-chip"><span>{{LastName}}</span></span>,</p>' +
@@ -189,12 +188,10 @@ var mergeObj = new ej.dropdowns.Mention({
189188
dataSource: mergeData,
190189
fields: { text: 'Name', value: 'Field' },
191190
displayTemplate: '<span>{{${Field}}}</span>',
192-
193191
popupWidth: '250px',
194192
popupHeight: '200px',
195193
target: mailMergeEditor.inputElement,
196-
mentionChar: '{{',
194+
mentionChar: '@',
197195
allowSpaces: true,
198196
});
199-
mergeObj.appendTo('#mentionField');
200-
{% endraw %}
197+
mergeObj.appendTo('#mentionField');

ej2-javascript/code-snippet/rich-text-editor/mail-merge/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% raw %}
1+
22
import {RichTextEditor,Toolbar,Link,Image,HtmlEditor,QuickToolbar,Table,PasteCleanup, ActionCompleteEventArgs, ActionBeginEventArgs} from '@syncfusion/ej2-richtexteditor';
33
import { DropDownButton, MenuEventArgs } from '@syncfusion/ej2-splitbuttons';
44
import { Mention } from '@syncfusion/ej2-dropdowns';
@@ -169,12 +169,11 @@ document.getElementById('merge_data')?.addEventListener('click', onClickHandler)
169169
const mentionObj: Mention = new Mention({
170170
dataSource: mergeData,
171171
target: '#mailMergeEditor',
172-
mentionChar: '{{',
172+
mentionChar: '@',
173173
fields: { text: 'text' },
174174
allowSpaces: true,
175175
popupWidth: '250px',
176176
popupHeight: '200px',
177177
displayTemplate: '<span> {{${value}}} </span>',
178178
});
179179
mentionObj.appendTo('#mentionField');
180-
{% endraw %}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
interface Task {
2+
TaskID: number;
3+
ParentID: number | null;
4+
Task: string;
5+
AssignedTo: string;
6+
StartDate: string;
7+
DueDate: string;
8+
Priority: string;
9+
Progress: string;
10+
Status: number;
11+
}
12+
13+
let NUM_ROOTS = 60;
14+
let CHILDREN_PER_ROOT = 8;
15+
let TOTAL_RECORDS = NUM_ROOTS + NUM_ROOTS * CHILDREN_PER_ROOT;
16+
17+
console.log(`Generating ${TOTAL_RECORDS} records (last 2 years)`);
18+
19+
let employees: string[] = [
20+
'Nancy Davolio','Andrew Fuller','Janet Leverling','Margaret Peacock','Steven Buchanan',
21+
'Michael Suyama','Robert King','Anne Dodsworth','John Heart','Robert Reagan',
22+
'Wally Hobbs','Arnie Schwartz','Stu Pizaro','Sandra Johnson','Karen Goodson',
23+
'Hannah Brookly','Ed Holmes','Victor Norris','Maggie Boxter','Samantha Bright',
24+
'Robin Cosworth','Samantha Piper','Clark Morgan','Brad Farkus','Taylor Riley',
25+
'Brett Wade','Cynthia Stanwick','Greta Sims','Olivia Peyton'
26+
];
27+
28+
let priorities: string[] = ['Low','Normal','High','Urgent'];
29+
let progressStates: string[] = ['Not Started', 'In Progress', 'Completed'];
30+
31+
let rootTasks: string[] = [
32+
'Planning Phase','Design Sprint','Development Cycle','Testing & QA','Deployment Rollout',
33+
'Marketing Campaign','Sales Pipeline','Customer Support','Content Strategy','Product Launch',
34+
'Budget Review','Team Training','Compliance Audit','Vendor Negotiation','Performance Review',
35+
'Infrastructure Upgrade','Security Assessment','User Feedback Analysis','Analytics Dashboard',
36+
'API Integration','Mobile App Update','Backend Optimization','Frontend Redesign',
37+
'Database Migration','Cloud Migration','DevOps Pipeline','Quality Assurance','Documentation Update',
38+
'Training Materials','Onboarding Process','Offboarding Process','HR Policy Review',
39+
'Finance Reporting','Legal Compliance','Risk Management','Crisis Response Plan',
40+
'Innovation Workshop','R&D Project','Prototype Development','Market Research',
41+
'Competitor Analysis','SWOT Analysis','Strategic Planning','Goal Setting','KPI Definition',
42+
'Quarterly Review','Annual Audit','Succession Planning','Talent Acquisition'
43+
];
44+
45+
let childTasks: string[] = [
46+
'Define Scope','Gather Requirements','Wireframe Design','Code Implementation','Unit Testing',
47+
'Integration Testing','Bug Fixes','User Acceptance','Deploy to Staging','Go-Live Prep',
48+
'Post-Launch Review','Metrics Analysis','Stakeholder Meeting','Resource Allocation',
49+
'Risk Assessment','Budget Approval','Timeline Update','Progress Report','Feedback Collection',
50+
'Revision Cycle','Final Approval','Documentation','Training Session','Handover Meeting'
51+
];
52+
53+
let START_DATE = new Date('2023-11-10T00:00:00');
54+
let END_DATE = new Date('2025-11-10T00:00:00');
55+
56+
function randomDate(start: Date, end: Date): string {
57+
let d = new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
58+
return d.toISOString().split('T')[0];
59+
}
60+
61+
let taskData: Task[] = [];
62+
let id = 1;
63+
64+
for (let i = 0; i < NUM_ROOTS; i++) {
65+
let start = randomDate(START_DATE, END_DATE);
66+
let due = randomDate(new Date(start), END_DATE);
67+
let state = progressStates[Math.floor(Math.random() * progressStates.length)];
68+
69+
taskData.push({
70+
TaskID: id,
71+
ParentID: null,
72+
Task: rootTasks[i % rootTasks.length] + (i >= rootTasks.length ? ` ${i + 1}` : ''),
73+
AssignedTo: employees[Math.floor(Math.random() * employees.length)],
74+
StartDate: start,
75+
DueDate: due,
76+
Priority: priorities[Math.floor(Math.random() * priorities.length)],
77+
Progress: state,
78+
Status: state === 'Completed' ? 100 : (state === 'In Progress' ? 50 : 0)
79+
});
80+
81+
let rootId = id;
82+
id++;
83+
84+
for (let c = 0; c < CHILDREN_PER_ROOT; c++) {
85+
let cStart = randomDate(new Date(start), new Date(due));
86+
let cDue = randomDate(new Date(cStart), new Date(due));
87+
let cState = progressStates[Math.floor(Math.random() * progressStates.length)];
88+
89+
taskData.push({
90+
TaskID: id,
91+
ParentID: rootId,
92+
Task: childTasks[c % childTasks.length] + (c >= childTasks.length ? ` ${c + 1}` : ''),
93+
AssignedTo: employees[Math.floor(Math.random() * employees.length)],
94+
StartDate: cStart,
95+
DueDate: cDue,
96+
Priority: priorities[Math.floor(Math.random() * priorities.length)],
97+
Progress: cState,
98+
Status: cState === 'Completed' ? 100 : (cState === 'In Progress' ? 50 : 0)
99+
});
100+
101+
id++;
102+
}
103+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
2+
3+
var NUM_ROOTS = 60;
4+
var CHILDREN_PER_ROOT = 8;
5+
var TOTAL_RECORDS = NUM_ROOTS + NUM_ROOTS * CHILDREN_PER_ROOT;
6+
7+
console.log(`Generating ${TOTAL_RECORDS} records (last 2 years)`);
8+
9+
var employees= [
10+
'Nancy Davolio','Andrew Fuller','Janet Leverling','Margaret Peacock','Steven Buchanan',
11+
'Michael Suyama','Robert King','Anne Dodsworth','John Heart','Robert Reagan',
12+
'Wally Hobbs','Arnie Schwartz','Stu Pizaro','Sandra Johnson','Karen Goodson',
13+
'Hannah Brookly','Ed Holmes','Victor Norris','Maggie Boxter','Samantha Bright',
14+
'Robin Cosworth','Samantha Piper','Clark Morgan','Brad Farkus','Taylor Riley',
15+
'Brett Wade','Cynthia Stanwick','Greta Sims','Olivia Peyton'
16+
];
17+
18+
var priorities= ['Low','Normal','High','Urgent'];
19+
var progressStates= ['Not Started', 'In Progress', 'Completed'];
20+
21+
var rootTasks= [
22+
'Planning Phase','Design Sprint','Development Cycle','Testing & QA','Deployment Rollout',
23+
'Marketing Campaign','Sales Pipeline','Customer Support','Content Strategy','Product Launch',
24+
'Budget Review','Team Training','Compliance Audit','Vendor Negotiation','Performance Review',
25+
'Infrastructure Upgrade','Security Assessment','User Feedback Analysis','Analytics Dashboard',
26+
'API Integration','Mobile App Update','Backend Optimization','Frontend Redesign',
27+
'Database Migration','Cloud Migration','DevOps Pipeline','Quality Assurance','Documentation Update',
28+
'Training Materials','Onboarding Process','Offboarding Process','HR Policy Review',
29+
'Finance Reporting','Legal Compliance','Risk Management','Crisis Response Plan',
30+
'Innovation Workshop','R&D Project','Prototype Development','Market Research',
31+
'Competitor Analysis','SWOT Analysis','Strategic Planning','Goal Setting','KPI Definition',
32+
'Quarterly Review','Annual Audit','Succession Planning','Talent Acquisition'
33+
];
34+
35+
var childTasks= [
36+
'Define Scope','Gather Requirements','Wireframe Design','Code Implementation','Unit Testing',
37+
'Integration Testing','Bug Fixes','User Acceptance','Deploy to Staging','Go-Live Prep',
38+
'Post-Launch Review','Metrics Analysis','Stakeholder Meeting','Resource Allocation',
39+
'Risk Assessment','Budget Approval','Timeline Update','Progress Report','Feedback Collection',
40+
'Revision Cycle','Final Approval','Documentation','Training Session','Handover Meeting'
41+
];
42+
43+
var START_DATE = new Date('2023-11-10T00:00:00');
44+
var END_DATE = new Date('2025-11-10T00:00:00');
45+
46+
function randomDate(start, end) {
47+
var d = new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
48+
return d.toISOString().split('T')[0];
49+
}
50+
51+
var taskData= [];
52+
let id = 1;
53+
54+
for (let i = 0; i < NUM_ROOTS; i++) {
55+
var start = randomDate(START_DATE, END_DATE);
56+
var due = randomDate(new Date(start), END_DATE);
57+
var state = progressStates[Math.floor(Math.random() * progressStates.length)];
58+
59+
taskData.push({
60+
TaskID: id,
61+
ParentID: null,
62+
Task: rootTasks[i % rootTasks.length] + (i >= rootTasks.length ? ` ${i + 1}` : ''),
63+
AssignedTo: employees[Math.floor(Math.random() * employees.length)],
64+
StartDate: start,
65+
DueDate: due,
66+
Priority: priorities[Math.floor(Math.random() * priorities.length)],
67+
Progress: state,
68+
Status: state === 'Completed' ? 100 : (state === 'In Progress' ? 50 : 0)
69+
});
70+
71+
var rootId = id;
72+
id++;
73+
74+
for (let c = 0; c < CHILDREN_PER_ROOT; c++) {
75+
var cStart = randomDate(new Date(start), new Date(due));
76+
var cDue = randomDate(new Date(cStart), new Date(due));
77+
var cState = progressStates[Math.floor(Math.random() * progressStates.length)];
78+
79+
taskData.push({
80+
TaskID: id,
81+
ParentID: rootId,
82+
Task: childTasks[c % childTasks.length] + (c >= childTasks.length ? ` ${c + 1}` : ''),
83+
AssignedTo: employees[Math.floor(Math.random() * employees.length)],
84+
StartDate: cStart,
85+
DueDate: cDue,
86+
Priority: priorities[Math.floor(Math.random() * priorities.length)],
87+
Progress: cState,
88+
Status: cState === 'Completed' ? 100 : (cState === 'In Progress' ? 50 : 0)
89+
});
90+
91+
id++;
92+
}
93+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#container {
2+
visibility: hidden;
3+
}
4+
5+
#loader {
6+
color: #008cff;
7+
font-family: 'Helvetica Neue','calibiri';
8+
font-size: 14px;
9+
height: 40px;
10+
left: 45%;
11+
position: absolute;
12+
top: 45%;
13+
width: 30%;
14+
}

0 commit comments

Comments
 (0)