diff --git a/ej2-react/Release-notes/32.1.19.md b/ej2-react/Release-notes/32.1.19.md
new file mode 100644
index 000000000..e5553b89c
--- /dev/null
+++ b/ej2-react/Release-notes/32.1.19.md
@@ -0,0 +1,98 @@
+---
+title: Essential Studio for React Release Notes
+description: Learn here about the controls in the Essential Studio for React 2025 Volume 4 Main Release - Release Notes
+platform: ej2-react
+documentation: ug
+---
+
+# Essential Studio for React - v32.1.19 Release Notes
+
+{% include release-info.html date="December 15, 2025" version="v32.1.19" passed="68209" failed="0" %}
+
+{% directory path: _includes/release-notes/v32.1.19 %}
+
+{% include {{file.url}} %}
+
+{% enddirectory %}
+
+## Test Results
+
+| Component Name | Test Cases | Passed | Failed | Remarks |
+|---------------|------------|--------|--------|---------|
+| 3D Chart | 232 | 232 | 0 | All Passed |
+| 3D Circular Chart | 374 | 374 | 0 | All Passed |
+| Accordion | 208 | 208 | 0 | All Passed |
+| AI Assist View | 432 | 432 | 0 | All Passed |
+| App Bar | 67 | 67 | 0 | All Passed |
+| AutoComplete | 200 | 200 | 0 | All Passed |
+| Breadcrumb | 160 | 160 | 0 | All Passed |
+| Bullet Chart | 169 | 169 | 0 | All Passed |
+| Button | 145 | 145 | 0 | All Passed |
+| ButtonGroup | 120 | 120 | 0 | All Passed |
+| calendar | 177 | 177 | 0 | All Passed |
+| Carousel | 61 | 61 | 0 | All Passed |
+| Chart | 5025 | 5025 | 0 | All Passed |
+| Chat UI | 500 | 500 | 0 | All Passed |
+| Checkbox | 37 | 37 | 0 | All Passed |
+| CircularGauge | 429 | 429 | 0 | All Passed |
+| ColorPicker | 130 | 130 | 0 | All Passed |
+| Combo Box | 139 | 139 | 0 | All Passed |
+| Common | 906 | 906 | 0 | All Passed |
+| Context Menu | 105 | 105 | 0 | All Passed |
+| Data Grid | 3697 | 3697 | 0 | All Passed |
+| Date Picker | 427 | 427 | 0 | All Passed |
+| Date Range Picker | 515 | 515 | 0 | All Passed |
+| Date Time Picker | 325 | 325 | 0 | All Passed |
+| Diagram | 16255 | 16255 | 0 | All Passed |
+| Dialog | 63 | 63 | 0 | All Passed |
+| DropDown Button | 132 | 132 | 0 | All Passed |
+| Dropdown List | 203 | 203 | 0 | All Passed |
+| Dropdown Tree | 104 | 104 | 0 | All Passed |
+| File Manager | 2188 | 2188 | 0 | All Passed |
+| Floating Action Button | 174 | 174 | 0 | All Passed |
+| Gantt | 4368 | 4368 | 0 | All Passed |
+| HeatMap Chart | 478 | 478 | 0 | All Passed |
+| Image Editor | 1653 | 1653 | 0 | All Passed |
+| In-place Editor | 643 | 643 | 0 | All Passed |
+| Kanban | 268 | 268 | 0 | All Passed |
+| LinearGauge | 426 | 426 | 0 | All Passed |
+| Listbox | 115 | 115 | 0 | All Passed |
+| ListView | 84 | 84 | 0 | All Passed |
+| Maps | 1244 | 1244 | 0 | All Passed |
+| Mention | 45 | 45 | 0 | All Passed |
+| Menu | 187 | 187 | 0 | All Passed |
+| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
+| Multiselect Dropdown | 442 | 442 | 0 | All Passed |
+| OTP Input | 240 | 240 | 0 | All Passed |
+| Pivot Table | 5348 | 5348 | 0 | All Passed |
+| Progress Bar | 83 | 83 | 0 | All Passed |
+| Progress Button | 132 | 132 | 0 | All Passed |
+| Query Builder | 480 | 480 | 0 | All Passed |
+| RadioButton | 45 | 45 | 0 | All Passed |
+| RangeNavigator | 140 | 140 | 0 | All Passed |
+| Rating | 198 | 198 | 0 | All Passed |
+| Ribbon | 625 | 625 | 0 | All Passed |
+| Rich Text Editor | 5135 | 5135 | 0 | All Passed |
+| schedule | 4645 | 4645 | 0 | All Passed |
+| sidebar | 88 | 88 | 0 | All Passed |
+| Signature | 105 | 105 | 0 | All Passed |
+| Skeleton | 144 | 144 | 0 | All Passed |
+| Slider | 147 | 147 | 0 | All Passed |
+| SmithChart | 49 | 49 | 0 | All Passed |
+| Sparkline | 57 | 57 | 0 | All Passed |
+| Speech To Text | 200 | 200 | 0 | All Passed |
+| Speed Dial | 366 | 366 | 0 | All Passed |
+| Split Button | 144 | 144 | 0 | All Passed |
+| Stepper | 91 | 91 | 0 | All Passed |
+| Stock Chart | 379 | 379 | 0 | All Passed |
+| Tab | 69 | 69 | 0 | All Passed |
+| Text Area | 107 | 107 | 0 | All Passed |
+| TextBox | 58 | 58 | 0 | All Passed |
+| Time Picker | 180 | 180 | 0 | All Passed |
+| Timeline | 213 | 213 | 0 | All Passed |
+| Toast | 139 | 139 | 0 | All Passed |
+| Toolbar | 135 | 135 | 0 | All Passed |
+| ToolTip | 136 | 136 | 0 | All Passed |
+| TreeGrid | 3791 | 3791 | 0 | All Passed |
+| Treemap | 264 | 264 | 0 | All Passed |
+| Treeview | 370 | 370 | 0 | All Passed |
\ No newline at end of file
diff --git a/ej2-react/ai-coding-assistant/prompt-library.md b/ej2-react/ai-coding-assistant/prompt-library.md
index 8b45f8da6..3728c11ea 100644
--- a/ej2-react/ai-coding-assistant/prompt-library.md
+++ b/ej2-react/ai-coding-assistant/prompt-library.md
@@ -1,14 +1,14 @@
---
layout: post
title: Syncfusion AI Coding Assistant Prompt Library | Syncfusion
-description: Explore the Syncfusion AI Coding Assistant Prompt Library to enhance React development productivity with intelligent code generation, configuration examples, and contextual guidance.
+description: Explore the AI Coding Assistant Prompt Library to enhance React development productivity with code generation, configuration examples, and contextual guidance.
control: Syncfusion AI Coding Assistant Prompt Library
platform: ej2-react
documentation: ug
domainurl: ##DomainURL##
---
-# Prompt Library
+# Prompt Library - AI Coding Assistant
Speed up your React projects using these ready-made prompts for popular Syncfusion components. Each prompt is short, easy to understand, and focused on real tasks—like quick setups, tweaks, and fixes.
@@ -26,383 +26,258 @@ Before starting, make sure your MCP Server is set up and running.
### Grid
-The Syncfusion React Grid delivers flexible, performant data tables for handling extensive records with built-in interactivity.
+The Syncfusion React Data Grid delivers fast, flexible tables for large datasets with built-in interactivity.
-Paging and Sorting
-```
+{% promptcards %}
+{% promptcard Paging and Sorting %}
#SyncfusionReactAssistant How do I enable paging and sorting in the Syncfusion React Grid?
-```
-
-Grouping and Filtering
-```
+{% endpromptcard %}
+{% promptcard Grouping and Filtering %}
#SyncfusionReactAssistant Show me an example of grouping and filtering data in the Grid component.
-```
-
-CRUD Operations
-```
+{% endpromptcard %}
+{% promptcard CRUD Operations %}
#SyncfusionReactAssistant What’s the code to implement full CRUD operations in Syncfusion React Grid?
-```
-
-Grid Export to PDF and Excel
-```
+{% endpromptcard %}
+{% promptcard Grid Export to PDF and Excel %}
#SyncfusionReactAssistant How can I add PDF and Excel export options to the Grid toolbar?
-```
-
-Virtual Scrolling
-```
+{% endpromptcard %}
+{% promptcard Virtual Scrolling %}
#SyncfusionReactAssistant How do I configure virtual scrolling for large datasets in the Grid?
-```
-
-Multicolumn Grid Setup
-```
+{% endpromptcard %}
+{% promptcard Multicolumn Grid Setup %}
#SyncfusionReactAssistant Create a multicolumn Grid to display product details with sorting and filtering.
-```
-
-Chat Integration
-```
+{% endpromptcard %}
+{% promptcard Chat Integration %}
#SyncfusionReactAssistant How can I integrate a chat widget inside each row of the Syncfusion Grid?
-```
-
-Advanced Grid Features
-```
-#SyncfusionReactAssistant
-Show me a Grid with paging, sorting, grouping, filtering, and virtual scrolling
-```
-
-Troubleshooting Grid Export
-```
+{% endpromptcard %}
+{% promptcard Advanced Grid Features %}
+#SyncfusionReactAssistant Show me a Grid with paging, sorting, grouping, filtering, and virtual scrolling
+{% endpromptcard %}
+{% promptcard Troubleshooting Grid Export %}
#SyncfusionReactAssistant Why isn’t my Grid exporting to PDF and Excel correctly?
-```
-
-Inline Editing
-```
+{% endpromptcard %}
+{% promptcard Inline Editing %}
#SyncfusionReactAssistant How do I enable inline editing for CRUD operations in the Grid?
-```
-
-Custom Toolbar
-```
+{% endpromptcard %}
+{% promptcard Custom Toolbar %}
#SyncfusionReactAssistant Add custom toolbar buttons for PDF and Excel export in the Grid.
-```
-
-Dynamic Column Configuration
-```
+{% endpromptcard %}
+{% promptcard Dynamic Column Configuration %}
#SyncfusionReactAssistant How can I dynamically configure multicolumn layout with filtering and sorting?
-```
+{% endpromptcard %}
+{% endpromptcards %}
### Chart
The Syncfusion React Chart suite offers versatile visualization tools across various series types for insightful data representation.
-Local and Remote Data
-```
+{% promptcards %}
+{% promptcard Local and Remote Data %}
#SyncfusionReactAssistant How do I bind both local and remote data sources to a Syncfusion Chart?
-```
-
-Range Selection
-```
+{% endpromptcard %}
+{% promptcard Range Selection %}
#SyncfusionReactAssistant Show me how to enable range selection in a Syncfusion React Chart.
-```
-
-Chart Types Overview
-```
+{% endpromptcard %}
+{% promptcard Chart Types Overview %}
#SyncfusionReactAssistant What chart types are available in Syncfusion React Chart and how to configure them?
-```
-
-Markers and Data Labels
-```
+{% endpromptcard %}
+{% promptcard Markers and Data Labels %}
#SyncfusionReactAssistant How can I display markers and data labels on a line chart?
-```
-
-Annotations
-```
+{% endpromptcard %}
+{% promptcard Annotations %}
#SyncfusionReactAssistant Add custom annotations to highlight specific data points in a chart.
-```
-
-Chart Export to Image or PDF
-```
+{% endpromptcard %}
+{% promptcard Chart Export to Image or PDF %}
#SyncfusionReactAssistant How do I export a Syncfusion Chart to PDF or image format?
-```
-
-Print Support
-```
+{% endpromptcard %}
+{% promptcard Print Support %}
#SyncfusionReactAssistant Enable print functionality for a Syncfusion React Chart component.
-```
-
-Dynamic Chart with Remote Data
-```
+{% endpromptcard %}
+{% promptcard Dynamic Chart with Remote Data %}
#SyncfusionReactAssistant Create a chart that updates dynamically with remote API data.
-```
-
-Multiple Series Types
-```
+{% endpromptcard %}
+{% promptcard Multiple Series Types %}
#SyncfusionReactAssistant How do I combine bar and line chart types in a single Syncfusion Chart?
-```
-
-Troubleshooting Chart Data Binding
-```
+{% endpromptcard %}
+{% promptcard Troubleshooting Chart Data Binding %}
#SyncfusionReactAssistant Why isn’t my remote data showing up in the Syncfusion Chart?
-```
-
-Interactive Range Selector
-```
+{% endpromptcard %}
+{% promptcard Interactive Range Selector %}
#SyncfusionReactAssistant Configure a range selector for zooming and filtering in a time-series chart.
-```
-
-Custom Markers and Labels
-```
+{% endpromptcard %}
+{% promptcard Custom Markers and Labels %}
#SyncfusionReactAssistant Show me an example of customizing chart markers and data label styles.
-```
+{% endpromptcard %}
+{% endpromptcards %}
### Schedule
The Syncfusion React Schedule component helps manage events, resources, and timelines with powerful views and customization.
-Module Injection
-```
+{% promptcards %}
+{% promptcard Module Injection %}
#SyncfusionReactAssistant How do I inject required modules into the Syncfusion React Schedule component?
-```
-
-Remote Data Binding
-```
+{% endpromptcard %}
+{% promptcard Remote Data Binding %}
#SyncfusionReactAssistant Bind the Schedule component to a remote API for dynamic event loading.
-```
-
-CRUD Actions
-```
+{% endpromptcard %}
+{% promptcard CRUD Actions %}
#SyncfusionReactAssistant Show me how to implement full CRUD operations in the Schedule component.
-```
-
-Virtual Scrolling
-```
+{% endpromptcard %}
+{% promptcard Virtual Scrolling %}
#SyncfusionReactAssistant Enable virtual scrolling for large event datasets in the Schedule view.
-```
-
-Timezone Support
-```
+{% endpromptcard %}
+{% promptcard Timezone Support %}
#SyncfusionReactAssistant How can I configure timezone support in the Syncfusion React Schedule?
-```
-
-Export Schedule to PDF or Excel
-```
+{% endpromptcard %}
+{% promptcard Export Schedule to PDF or Excel %}
#SyncfusionReactAssistant Add export functionality to download the Schedule view as PDF or Excel.
-```
-
-Timeline Header Rows
-```
+{% endpromptcard %}
+{% promptcard Timeline Header Rows %}
#SyncfusionReactAssistant How do I customize timeline header rows in the Schedule component?
-```
-
-Multiple Module Injection
-```
+{% endpromptcard %}
+{% promptcard Multiple Module Injection %}
#SyncfusionReactAssistant Inject multiple modules like Day, Week, and Timeline views into Schedule.
-```
-
-Troubleshooting Schedule CRUD
-```
+{% endpromptcard %}
+{% promptcard Troubleshooting Schedule CRUD %}
#SyncfusionReactAssistant Why aren’t my CRUD actions working correctly in the Schedule component?
-```
-
-Local and Remote Data
-```
+{% endpromptcard %}
+{% promptcard Local and Remote Data %}
#SyncfusionReactAssistant Bind both local and remote event data to the Schedule component.
-```
-
-Export and Timezone
-```
+{% endpromptcard %}
+{% promptcard Export and Timezone %}
#SyncfusionReactAssistant Configure timezone-aware exporting for the Schedule view.
-```
-
-Advanced Schedule Setup
-```
+{% endpromptcard %}
+{% promptcard Advanced Schedule Setup %}
#SyncfusionReactAssistant Create a Schedule with module injection, CRUD, virtual scrolling, and exporting.
-```
+{% endpromptcard %}
+{% endpromptcards %}
### Kanban
The Syncfusion React Kanban organizes tasks in columns with drag-and-drop, swimlanes, and templating for agile workflows.
-Data Binding
-```
+{% promptcards %}
+{% promptcard Data Binding %}
#SyncfusionReactAssistant How do I bind local or remote data to the Syncfusion React Kanban board?
-```
-
-Sorting
-```
+{% endpromptcard %}
+{% promptcard Sorting %}
#SyncfusionReactAssistant Enable sorting of cards within columns in the Kanban component.
-```
-
-Swimlane View
-```
+{% endpromptcard %}
+{% promptcard Swimlane View %}
#SyncfusionReactAssistant Show me how to group Kanban cards using swimlane headers.
-```
-
-Kanban Card Editing
-```
+{% endpromptcard %}
+{% promptcard Kanban Card Editing %}
#SyncfusionReactAssistant How can I enable inline editing of Kanban cards?
-```
-
-Virtualization
-```
+{% endpromptcard %}
+{% promptcard Virtualization %}
#SyncfusionReactAssistant Configure virtualization for performance with large Kanban datasets.
-```
-
-Localization
-```
+{% endpromptcard %}
+{% promptcard Localization %}
#SyncfusionReactAssistant How do I localize labels and messages in the Kanban component?
-```
-
-Drag and Drop
-```
+{% endpromptcard %}
+{% promptcard Drag and Drop %}
#SyncfusionReactAssistant Enable drag-and-drop functionality for moving cards between columns.
-```
-
-Sorting and Swimlane
-```
+{% endpromptcard %}
+{% promptcard Sorting and Swimlane %}
#SyncfusionReactAssistant Create a Kanban board with swimlane grouping and sortable cards.
-```
-
-Editable Cards and Localization
-```
+{% endpromptcard %}
+{% promptcard Editable Cards and Localization %}
#SyncfusionReactAssistant Show me how to edit cards and apply localization in Kanban.
-```
-
-Troubleshooting Kanban Drag and Drop
-```
+{% endpromptcard %}
+{% promptcard Troubleshooting Kanban Drag and Drop %}
#SyncfusionReactAssistant Why isn’t drag-and-drop working correctly in my Kanban board?
-```
-
-Remote Data and Virtualization
-```
+{% endpromptcard %}
+{% promptcard Remote Data and Virtualization %}
#SyncfusionReactAssistant Bind remote data to Kanban and enable virtualization for performance.
-```
-
-Advanced Kanban Setup
-```
+{% endpromptcard %}
+{% promptcard Advanced Kanban Setup %}
#SyncfusionReactAssistant Create a Kanban board with data binding, swimlane, card editing, and drag-and-drop.
-```
+{% endpromptcard %}
+{% endpromptcards %}
### RichTextEditor
The Syncfusion React RichTextEditor offers a modern WYSIWYG editor with extensive formatting, media, and integration features.
-Toolbar Configuration
-```
+{% promptcards %}
+{% promptcard Toolbar Configuration %}
#SyncfusionReactAssistant How do I customize the toolbar options in the Syncfusion RichTextEditor?
-```
-
-Link Manipulation
-```
+{% endpromptcard %}
+{% promptcard Link Manipulation %}
#SyncfusionReactAssistant Show me how to add, edit, and remove hyperlinks in RichTextEditor content.
-```
-
-Iframe Mode
-```
+{% endpromptcard %}
+{% promptcard Iframe Mode %}
#SyncfusionReactAssistant How can I render the RichTextEditor inside an iframe for isolated styling?
-```
-
-Module Injection
-```
+{% endpromptcard %}
+{% promptcard Module Injection %}
#SyncfusionReactAssistant Inject feature modules like toolbar, link, and image into RichTextEditor.
-```
-
-Undo and Redo
-```
+{% endpromptcard %}
+{% promptcard Undo and Redo %}
#SyncfusionReactAssistant Enable undo and redo functionality in the RichTextEditor toolbar.
-```
-
-Forms Integration
-```
+{% endpromptcard %}
+{% promptcard Forms Integration %}
#SyncfusionReactAssistant How do I integrate a React form and validate input?
-```
-
-Content Import and Export
-```
+{% endpromptcard %}
+{% promptcard Content Import and Export %}
#SyncfusionReactAssistant Export RichTextEditor content to HTML or import existing HTML content.
-```
-
-Advanced Toolbar
-```
+{% endpromptcard %}
+{% promptcard Advanced Toolbar %}
#SyncfusionReactAssistant Create a RichTextEditor with toolbar options for formatting, links, and undo/redo.
-```
-
-Iframe and Forms Support
-```
+{% endpromptcard %}
+{% promptcard Iframe and Forms Support %}
#SyncfusionReactAssistant Use RichTextEditor in iframe mode and bind it to a form for submission.
-```
-
-Undo/Redo and Export
-```
+{% endpromptcard %}
+{% promptcard Undo/Redo and Export %}
#SyncfusionReactAssistant Enable undo/redo and export content to HTML in RichTextEditor.
-```
-
-Module Injection and Link Editing
-```
+{% endpromptcard %}
+{% promptcard Module Injection and Link Editing %}
#SyncfusionReactAssistant Inject toolbar and link modules to enable rich link editing in the editor.
-```
+{% endpromptcard %}
+{% endpromptcards %}
### Calendar
The Syncfusion React Calendar supports flexible date selection, localization, and custom rendering.
-Date Range Selection
-```
+{% promptcards %}
+{% promptcard Date Range Selection %}
#SyncfusionReactAssistant How do I enable date range selection in the Syncfusion React Calendar?
-```
-
-Globalization Support
-```
+{% endpromptcard %}
+{% promptcard Globalization Support %}
#SyncfusionReactAssistant Configure the Calendar to support multiple cultures and languages.
-```
-
-Multi-Date Selection
-```
+{% endpromptcard %}
+{% promptcard Multi-Date Selection %}
#SyncfusionReactAssistant Show me how to allow users to select multiple dates in the Calendar.
-```
-
-Islamic Calendar Support
-```
+{% endpromptcard %}
+{% promptcard Islamic Calendar Support %}
#SyncfusionReactAssistant How can I switch the Calendar to use the Islamic calendar system?
-```
-
-Skip Months Feature
-```
+{% endpromptcard %}
+{% promptcard Skip Months Feature %}
#SyncfusionReactAssistant Enable skipping months in the Calendar navigation for faster browsing.
-```
-
-Calendar Showing Other Month Days
-```
+{% endpromptcard %}
+{% promptcard Calendar Showing Other Month Days %}
#SyncfusionReactAssistant How do I show days from adjacent months in the current Calendar view?
-```
-
-Custom Day Cell Format
-```
+{% endpromptcard %}
+{% promptcard Custom Day Cell Format %}
#SyncfusionReactAssistant Customize the day cell format in the Calendar to show short weekday names.
-```
-
-Calendar Highlighting Weekends
-```
+{% endpromptcard %}
+{% promptcard Calendar Highlighting Weekends %}
#SyncfusionReactAssistant Highlight weekends in the Calendar with a different background color.
-```
-
-Globalization and Islamic Calendar
-```
+{% endpromptcard %}
+{% promptcard Globalization and Islamic Calendar %}
#SyncfusionReactAssistant Configure the Calendar for Arabic culture using Islamic calendar and localization.
-```
-
-Multi-Selection and Range
-```
+{% endpromptcard %}
+{% promptcard Multi-Selection and Range %}
#SyncfusionReactAssistant Enable both multi-date selection and range selection in the Calendar.
-```
-
-Troubleshooting Calendar Date Range
-```
+{% endpromptcard %}
+{% promptcard Troubleshooting Calendar Date Range %}
#SyncfusionReactAssistant Why isn’t my Calendar selecting the correct date range?
-```
-
-Advanced Calendar Setup
-```
+{% endpromptcard %}
+{% promptcard Advanced Calendar Setup %}
#SyncfusionReactAssistant Create a Calendar with date range, multi-selection, globalization, and weekend highlights.
-```
+{% endpromptcard %}
+{% endpromptcards %}
## See also
diff --git a/ej2-react/chart/chart-appearance.md b/ej2-react/chart/chart-appearance.md
index 1a2d0255c..2c88d12d7 100644
--- a/ej2-react/chart/chart-appearance.md
+++ b/ej2-react/chart/chart-appearance.md
@@ -12,7 +12,7 @@ domainurl: ##DomainURL##
## Custom color palette
-You can customize the default color of series or points by providing a custom color palette of your choice by using the [`palettes`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#palettes) property.
+You can customize the default color of series or points by providing a custom color palette of your choice by using the [`palettes`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#palettes) property.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -37,7 +37,7 @@ The color of individual data point or data points within a range can be customiz
### Point color mapping
-You can bind the color for the points from [`dataSource`](https://ej2.syncfusion.com/react/documentation/api/chart/series/#datasource) for the series using [`pointColorMapping`](https://ej2.syncfusion.com/react/documentation/api/chart/series/#pointcolormapping) property.
+You can bind the color for the points from [`dataSource`](https://ej2.syncfusion.com/react/documentation/api/chart/series#datasource) for the series using [`pointColorMapping`](https://ej2.syncfusion.com/react/documentation/api/chart/series#pointcolormapping) property.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -58,7 +58,7 @@ You can bind the color for the points from [`dataSource`](https://ej2.syncfusion
### Range color mapping
-You can differentiate data points based on their y values using [`rangeColorSettings`](https://ej2.syncfusion.com/react/documentation/api/chart/rangeColorSetting/) in the chart.
+You can differentiate data points based on their y values using [`rangeColorSettings`](https://ej2.syncfusion.com/react/documentation/api/chart/rangeColorSetting) in the chart.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -79,7 +79,7 @@ You can differentiate data points based on their y values using [`rangeColorSett
## Point level customization
-Marker, datalabel and fill color of each data point can be customized with [`pointRender`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#pointrender) and [`textRender`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#textrender) event.
+Marker, datalabel and fill color of each data point can be customized with [`pointRender`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#pointrender) and [`textRender`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#textrender) event.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -107,7 +107,7 @@ Marker, datalabel and fill color of each data point can be customized with [`poi
**Customize the chart background**
-Using [`background`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#background) and [`border`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#border) properties, you can change the background color and border of the chart.
+Using [`background`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#background) and [`border`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#border) properties, you can change the background color and border of the chart.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -128,7 +128,7 @@ Using [`background`](https://ej2.syncfusion.com/react/documentation/api/chart/ch
**Chart margin**
-You can set margin for chart from its container through [`margin`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#margin) property.
+You can set margin for chart from its container through [`margin`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#margin) property.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -149,7 +149,7 @@ You can set margin for chart from its container through [`margin`](https://ej2.s
**Chart area customization**
-Using [`background`](https://ej2.syncfusion.com/react/documentation/api/chart/chartAreaModel/#background) and [`border`](https://ej2.syncfusion.com/react/documentation/api/chart/chartAreaModel/border/) properties, you can change the background color and border of the chart area. Width for the chart area can be customized using [`width`](https://ej2.syncfusion.com/react/documentation/api/chart/chartAreaModel/width/) property.
+Using [`background`](https://ej2.syncfusion.com/react/documentation/api/chart/chartAreaModel#background) and [`border`](https://ej2.syncfusion.com/react/documentation/api/chart/chartareamodel#border) properties, you can change the background color and border of the chart area. Width for the chart area can be customized using [`width`](https://ej2.syncfusion.com/react/documentation/api/chart/chartAreaModel#width) property.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -170,7 +170,7 @@ Using [`background`](https://ej2.syncfusion.com/react/documentation/api/chart/ch
**Chart area margin**
-You can customize the space between the chart area from its chart container through [`margin`](https://ej2.syncfusion.com/react/documentation/api/chart/chartAreaModel/#margin) property.
+You can customize the space between the chart area from its chart container through [`margin`](https://ej2.syncfusion.com/react/documentation/api/chart/chartAreaModel#margin) property.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -191,7 +191,7 @@ You can customize the space between the chart area from its chart container thro
## Animation
-You can customize animation for a particular series using [`animation`](https://ej2.syncfusion.com/react/documentation/api/chart/animationModel/) property. You can enable or disable animation of the series using `enable` property, `duration` specifies the duration of an animation and `delay` allows us to start the animation at desire time.
+You can customize animation for a particular series using [`animation`](https://ej2.syncfusion.com/react/documentation/api/chart/animationModel) property. You can enable or disable animation of the series using `enable` property, `duration` specifies the duration of an animation and `delay` allows us to start the animation at desire time.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -231,129 +231,6 @@ Fluid animation used to animate series with updated dataSource continues animati
{% previewsample "page.domainurl/code-snippet/chart/series/column-cs6" %}
-## Chart title
-
-Chart can be given a title using [`title`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#title) property, to show the information about the data plotted.
-
-{% tabs %}
-{% highlight js tabtitle="index.jsx" %}
-{% include code-snippet/chart/chart-title-cs5/app/index.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="index.tsx" %}
-{% include code-snippet/chart/chart-title-cs5/app/index.tsx %}
-{% endhighlight %}
-{% highlight js tabtitle="datasource.jsx" %}
-{% include code-snippet/chart/chart-title-cs5/app/datasource.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="datasource.tsx" %}
-{% include code-snippet/chart/chart-title-cs5/app/datasource.tsx %}
-{% endhighlight %}
-{% endtabs %}
-
-{% previewsample "page.domainurl/code-snippet/chart/chart-title-cs5" %}
-
-### Title position
-
-By using the [`position`](https://ej2.syncfusion.com/react/documentation/api/chart/titleSettingsModel/#position) property in [`titleStyle`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#titlestyle), you can position the [`title`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#title) at left, right, top or bottom of the chart. The title is positioned at the top of the chart, by default.
-
-{% tabs %}
-{% highlight js tabtitle="index.jsx" %}
-{% include code-snippet/chart/chart-title-cs7/app/index.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="index.tsx" %}
-{% include code-snippet/chart/chart-title-cs7/app/index.tsx %}
-{% endhighlight %}
-{% highlight js tabtitle="datasource.jsx" %}
-{% include code-snippet/chart/chart-title-cs7/app/datasource.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="datasource.tsx" %}
-{% include code-snippet/chart/chart-title-cs7/app/datasource.tsx %}
-{% endhighlight %}
-{% endtabs %}
-
-{% previewsample "page.domainurl/code-snippet/chart/chart-title-cs7" %}
-
-The custom option helps you to position the title anywhere in the chart using [`x`](https://ej2.syncfusion.com/react/documentation/api/chart/titleSettingsModel/#x) and [`y`](https://ej2.syncfusion.com/react/documentation/api/chart/titleSettingsModel/#y) coordinates.
-
-{% tabs %}
-{% highlight js tabtitle="index.jsx" %}
-{% include code-snippet/chart/chart-title-cs8/app/index.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="index.tsx" %}
-{% include code-snippet/chart/chart-title-cs8/app/index.tsx %}
-{% endhighlight %}
-{% highlight js tabtitle="datasource.jsx" %}
-{% include code-snippet/chart/chart-title-cs8/app/datasource.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="datasource.tsx" %}
-{% include code-snippet/chart/chart-title-cs8/app/datasource.tsx %}
-{% endhighlight %}
-{% endtabs %}
-
-{% previewsample "page.domainurl/code-snippet/chart/chart-title-cs8" %}
-
-### Title alignment
-
-You can align the title to the near, far, or center of the chart using the [`textAlignment`](https://ej2.syncfusion.com/react/documentation/api/chart/titleSettingsModel/#textalignment) property.
-
-{% tabs %}
-{% highlight js tabtitle="index.jsx" %}
-{% include code-snippet/chart/chart-title-cs9/app/index.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="index.tsx" %}
-{% include code-snippet/chart/chart-title-cs9/app/index.tsx %}
-{% endhighlight %}
-{% highlight js tabtitle="datasource.jsx" %}
-{% include code-snippet/chart/chart-title-cs9/app/datasource.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="datasource.tsx" %}
-{% include code-snippet/chart/chart-title-cs9/app/datasource.tsx %}
-{% endhighlight %}
-{% endtabs %}
-
-{% previewsample "page.domainurl/code-snippet/chart/chart-title-cs9" %}
-
-### Title wrap
-
-The `textStyle` property of chart title provides options to customize the `size`, `color`, `fontFamily`, `fontWeight`, `fontStyle`, `opacity`, `textAlignment` and `textOverflow`.
-
-{% tabs %}
-{% highlight js tabtitle="index.jsx" %}
-{% include code-snippet/chart/series/column-cs7/app/index.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="index.tsx" %}
-{% include code-snippet/chart/series/column-cs7/app/index.tsx %}
-{% endhighlight %}
-{% highlight js tabtitle="datasource.jsx" %}
-{% include code-snippet/chart/series/column-cs7/app/datasource.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="datasource.tsx" %}
-{% include code-snippet/chart/series/column-cs7/app/datasource.tsx %}
-{% endhighlight %}
-{% endtabs %}
-
-{% previewsample "page.domainurl/code-snippet/chart/series/column-cs7" %}
-
-## Chart subtitle
-
-Chart can be given a subtitle using [`subTitle`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#subtitle) property, to show the information about the data plotted.
-
-{% tabs %}
-{% highlight js tabtitle="index.jsx" %}
-{% include code-snippet/chart/chart-title-cs6/app/index.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="index.tsx" %}
-{% include code-snippet/chart/chart-title-cs6/app/index.tsx %}
-{% endhighlight %}
-{% highlight js tabtitle="datasource.jsx" %}
-{% include code-snippet/chart/chart-title-cs6/app/datasource.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="datasource.tsx" %}
-{% include code-snippet/chart/chart-title-cs6/app/datasource.tsx %}
-{% endhighlight %}
-{% endtabs %}
-
-{% previewsample "page.domainurl/code-snippet/chart/chart-title-cs6" %}
## See also
diff --git a/ej2-react/chart/data-labels.md b/ej2-react/chart/data-labels.md
index 2ae94c627..43f6049d6 100644
--- a/ej2-react/chart/data-labels.md
+++ b/ej2-react/chart/data-labels.md
@@ -10,7 +10,7 @@ domainurl: ##DomainURL##
# Data labels in React Chart component
-Data label can be added to a chart series by enabling the [`visible`](https://ej2.syncfusion.com/react/documentation/api/chart/dataLabelSettings/#visible)option in the dataLabel. By default, the labels will arrange smartly without overlapping.
+Data label can be added to a chart series by enabling the [`visible`](https://ej2.syncfusion.com/react/documentation/api/chart/dataLabelSettings#visible)option in the dataLabel. By default, the labels will arrange smartly without overlapping.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -33,7 +33,7 @@ Data label can be added to a chart series by enabling the [`visible`](https://e
## Position
-Using [`position`](https://ej2.syncfusion.com/react/documentation/api/chart/dataLabelSettings/#position) property, you can place the label either on `Top`, `Middle`,`Bottom` or `Outer` (outer is applicable for column and bar type series).
+Using [`position`](https://ej2.syncfusion.com/react/documentation/api/chart/dataLabelSettings#position) property, you can place the label either on `Top`, `Middle`,`Bottom` or `Outer` (outer is applicable for column and bar type series).
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -56,7 +56,7 @@ Using [`position`](https://ej2.syncfusion.com/react/documentation/api/chart/data
## Data Label Template
-Label content can be formatted by using the template option. Inside the template, you can add the placeholder text `${point.x}` and `${point.x}` to display corresponding data points x & y value. Using [`template`](https://ej2.syncfusion.com/react/documentation/api/chart/dataLabelSettings/#template) property, you can set data label template in chart.
+Label content can be formatted by using the template option. Inside the template, you can add the placeholder text `${point.x}` and `${point.x}` to display corresponding data points x & y value. Using [`template`](https://ej2.syncfusion.com/react/documentation/api/chart/dataLabelSettings#template) property, you can set data label template in chart.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -98,7 +98,7 @@ Text from the data source can be mapped using `name` property.
## Format
-Data label for the chart can be formatted using [`format`](https://ej2.syncfusion.com/react/documentation/api/chart/dataLabelSettings/#format) property. You can use the global formatting options, such as 'n', 'p', and 'c'.
+Data label for the chart can be formatted using [`format`](https://ej2.syncfusion.com/react/documentation/api/chart/dataLabelSettings#format) property. You can use the global formatting options, such as 'n', 'p', and 'c'.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -240,7 +240,7 @@ Using `angle` property, you can rotate the data label by its given angle.
## Customizing Specific Point
-You can also customize the specific marker and label using [`pointRender`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#pointrender) and [`textRender`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#textrender/) event. `pointRender` event allows you to change the shape, color and border for a point, whereas the `textRender` event allows you to change the text for the point.
+You can also customize the specific marker and label using [`pointRender`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#pointrender) and [`textRender`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#textrender) event. `pointRender` event allows you to change the shape, color and border for a point, whereas the `textRender` event allows you to change the text for the point.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -280,8 +280,56 @@ You can calculate the percentage value based on the sum for each series using th
{% previewsample "page.domainurl/code-snippet/chart/data-marker/datalabel-cs6" %}
+## Last value label
+
+The `lastValueLabel` in a chart allows you to easily display the value of the last data point in a series. This feature provides an intuitive way to highlight the most recent or last data value in a series on your chart.
+
+### Enable last value label
+
+To show the last value label, make sure the `enable` property inside the `lastValueLabel` settings is set to `true` within the series configuration.
+
+{% tabs %}
+{% highlight js tabtitle="index.jsx" %}
+{% include code-snippet/chart/last-value-label/app/index.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="index.tsx" %}
+{% include code-snippet/chart/last-value-label/app/index.tsx %}
+{% endhighlight %}
+{% highlight js tabtitle="datasource.jsx" %}
+{% include code-snippet/chart/last-value-label/app/datasource.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.tsx" %}
+{% include code-snippet/chart/last-value-label/app/datasource.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/chart/last-value-label" %}
+
+>Note: To use the last value label feature, we need to inject `LastValueLabel` module into the `services`.
+
+### Customization
+
+The appearance of the last value label can be customized using style properties such as `font`, `background`, `border`, `dashArray`, `lineWidth`, `lineColor`, `rx`, and `ry` in the lastValueLabel property of the chart series. These settings allow you to tailor the label’s look to align with your desired visual presentation.
+
+{% tabs %}
+{% highlight js tabtitle="index.jsx" %}
+{% include code-snippet/chart/last-value-label-customization/app/index.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="index.tsx" %}
+{% include code-snippet/chart/last-value-label-customization/app/index.tsx %}
+{% endhighlight %}
+{% highlight js tabtitle="datasource.jsx" %}
+{% include code-snippet/chart/last-value-label-customization/app/datasource.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.tsx" %}
+{% include code-snippet/chart/last-value-label-customization/app/datasource.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/chart/last-value-label-customization" %}
+
## See Also
-* [Show total stacking values in data label](./how-to/#show-the-total-value-for-stacking-series-in-data-label)
-* [Prevent the data label when the data value is 0](./how-to/#prevent-the-data-label-when-the-data-value-is-0)
+* [Show total stacking values in data label](./how-to#show-the-total-value-for-stacking-series-in-data-label)
+* [Prevent the data label when the data value is 0](./how-to#prevent-the-data-label-when-the-data-value-is-0)
* [Display Data Labels in Lakh](https://support.syncfusion.com/kb/article/21250/how-to-display-data-labels-in-lakh-in-react-accumulation-chart)
\ No newline at end of file
diff --git a/ej2-react/chart/lastvaluelabel.md b/ej2-react/chart/lastvaluelabel.md
deleted file mode 100644
index a5a065dc5..000000000
--- a/ej2-react/chart/lastvaluelabel.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-layout: post
-title: Last value label in React Chart component | Syncfusion
-description: Learn here all about Last value label in Syncfusion React Chart component of Syncfusion Essential JS 2 and more.
-platform: ej2-react
-control: Last value label
-documentation: ug
-domainurl: ##DomainURL##
----
-
-# Last value label in React Chart component
-
-The `lastValueLabel` in a chart allows you to easily display the value of the last data point in a series. This feature provides an intuitive way to highlight the most recent or last data value in a series on your chart.
-
-## Enable last value label
-
-To show the last value label, make sure the `enable` property inside the `lastValueLabel` settings is set to `true` within the series configuration.
-
-{% tabs %}
-{% highlight js tabtitle="index.jsx" %}
-{% include code-snippet/chart/last-value-label/app/index.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="index.tsx" %}
-{% include code-snippet/chart/last-value-label/app/index.tsx %}
-{% endhighlight %}
-{% highlight js tabtitle="datasource.jsx" %}
-{% include code-snippet/chart/last-value-label/app/datasource.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="datasource.tsx" %}
-{% include code-snippet/chart/last-value-label/app/datasource.tsx %}
-{% endhighlight %}
-{% endtabs %}
-
-{% previewsample "page.domainurl/code-snippet/chart/last-value-label" %}
-
->Note: To use the last value label feature, we need to inject `LastValueLabel` module into the `services`.
-
-## Customization
-
-The appearance of the last value label can be customized using style properties such as `font`, `background`, `border`, `dashArray`, `lineWidth`, `lineColor`, `rx`, and `ry` in the lastValueLabel property of the chart series. These settings allow you to tailor the label’s look to align with your desired visual presentation.
-
-{% tabs %}
-{% highlight js tabtitle="index.jsx" %}
-{% include code-snippet/chart/last-value-label-customization/app/index.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="index.tsx" %}
-{% include code-snippet/chart/last-value-label-customization/app/index.tsx %}
-{% endhighlight %}
-{% highlight js tabtitle="datasource.jsx" %}
-{% include code-snippet/chart/last-value-label-customization/app/datasource.jsx %}
-{% endhighlight %}
-{% highlight ts tabtitle="datasource.tsx" %}
-{% include code-snippet/chart/last-value-label-customization/app/datasource.tsx %}
-{% endhighlight %}
-{% endtabs %}
-
-{% previewsample "page.domainurl/code-snippet/chart/last-value-label-customization" %}
\ No newline at end of file
diff --git a/ej2-react/chart/selection.md b/ej2-react/chart/selection.md
index c17ee45a7..d85c94931 100644
--- a/ej2-react/chart/selection.md
+++ b/ej2-react/chart/selection.md
@@ -98,7 +98,7 @@ To fetch the collection of data under a particular region, you have to set `sele
* DragX - Allows us to select data with respect to horizontal axis.
* DragY - Allows us to select data with respect to vertical axis.
-The selected data’s are returned as an array collection in the [`dragComplete`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#dragcomplete) event.
+The selected data’s are returned as an array collection in the [`dragComplete`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#dragcomplete) event.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -161,7 +161,7 @@ To select multiple region on the chart, set the `allowMultiSelection` property t
## Selection Type
-You can select multiple points or series, by enabling the [`isMultiSelect`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#ismultiselect) property.
+You can select multiple points or series, by enabling the [`isMultiSelect`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#ismultiselect) property.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -182,7 +182,7 @@ You can select multiple points or series, by enabling the [`isMultiSelect`](http
## Selection on Load
-You can able to select a point or series programmatically on a chart using [`selectedDataIndexes`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel/#selecteddataindexes) property.
+You can able to select a point or series programmatically on a chart using [`selectedDataIndexes`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#selecteddataindexes) property.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -203,7 +203,9 @@ You can able to select a point or series programmatically on a chart using [`sel
## Selection through on legend
-You can able to select a point or series through on legend using [`toggleVisibility`](https://ej2.syncfusion.com/react/documentation/api/chart/legendSettingsModel/#toggleVisibility) property. Also, use [`enableHighlight`](https://ej2.syncfusion.com/react/documentation/api/chart/legendSettings/#enableHighlight) property for highlighting the series through legend.
+You can able to select a point or series through on legend using [`toggleVisibility`](https://ej2.syncfusion.com/react/documentation/api/chart/legendSettingsModel#toggleVisibility) property. Also, use [`enableHighlight`](https://ej2.syncfusion.com/react/documentation/api/chart/legendSettings#enableHighlight) property for highlighting the series through legend.
+
+>When [`highlightMode`](https://ej2.syncfusion.com/react/documentation/api/chart/highlightmode) is set to 'Series', 'Cluster' or 'Point', legend highlighting will still occur even when [`enableHighlight`](https://ej2.syncfusion.com/react/documentation/api/chart/legendSettings#enableHighlight) is set to false. This is because, the [`highlightMode`](https://ej2.syncfusion.com/react/documentation/api/chart/highlightmode) takes precedence, so hovering over legend items will trigger highlighting of the corresponding series regardless of the legend’s [`enableHighlight`](https://ej2.syncfusion.com/react/documentation/api/chart/legendSettings#enableHighlight) setting.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -224,7 +226,7 @@ You can able to select a point or series through on legend using [`toggleVisibil
## Customization for selection
-You can apply custom style to selected points or series with [`selectionStyle`](https://ej2.syncfusion.com/react/documentation/api/chart/series/#selectionstyle) property.
+You can apply custom style to selected points or series with [`selectionStyle`](https://ej2.syncfusion.com/react/documentation/api/chart/series#selectionstyle) property.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -247,4 +249,4 @@ You can apply custom style to selected points or series with [`selectionStyle`](
## See Also
-* [Display selected data for range selection](./how-to/#display-selected-data-for-range-selection)
+* [Display selected data for range selection](./how-to#display-selected-data-for-range-selection)
diff --git a/ej2-react/chart/title-subtitle.md b/ej2-react/chart/title-subtitle.md
new file mode 100644
index 000000000..d7c6e6992
--- /dev/null
+++ b/ej2-react/chart/title-subtitle.md
@@ -0,0 +1,135 @@
+---
+layout: post
+title: Title and subtitle in React Chart component | Syncfusion
+description: Learn here all about Title and subtitle in Syncfusion React Chart component of Syncfusion Essential JS 2 and more.
+control: Title and subtitle
+platform: ej2-react
+documentation: ug
+domainurl: ##DomainURL##
+---
+
+# Title and Subtitle in React Chart component
+
+## Chart title
+
+Chart can be given a title using [`title`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#title) property, to show the information about the data plotted.
+
+{% tabs %}
+{% highlight js tabtitle="index.jsx" %}
+{% include code-snippet/chart/chart-title-cs5/app/index.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="index.tsx" %}
+{% include code-snippet/chart/chart-title-cs5/app/index.tsx %}
+{% endhighlight %}
+{% highlight js tabtitle="datasource.jsx" %}
+{% include code-snippet/chart/chart-title-cs5/app/datasource.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.tsx" %}
+{% include code-snippet/chart/chart-title-cs5/app/datasource.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/chart/chart-title-cs5" %}
+
+### Title position
+
+By using the [`position`](https://ej2.syncfusion.com/react/documentation/api/chart/titleSettingsModel#position) property in [`titleStyle`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#titlestyle), you can position the [`title`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#title) at left, right, top or bottom of the chart. The title is positioned at the top of the chart, by default.
+
+{% tabs %}
+{% highlight js tabtitle="index.jsx" %}
+{% include code-snippet/chart/chart-title-cs7/app/index.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="index.tsx" %}
+{% include code-snippet/chart/chart-title-cs7/app/index.tsx %}
+{% endhighlight %}
+{% highlight js tabtitle="datasource.jsx" %}
+{% include code-snippet/chart/chart-title-cs7/app/datasource.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.tsx" %}
+{% include code-snippet/chart/chart-title-cs7/app/datasource.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/chart/chart-title-cs7" %}
+
+The custom option helps you to position the title anywhere in the chart using [`x`](https://ej2.syncfusion.com/react/documentation/api/chart/titleSettingsModel#x) and [`y`](https://ej2.syncfusion.com/react/documentation/api/chart/titleSettingsModel#y) coordinates.
+
+{% tabs %}
+{% highlight js tabtitle="index.jsx" %}
+{% include code-snippet/chart/chart-title-cs8/app/index.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="index.tsx" %}
+{% include code-snippet/chart/chart-title-cs8/app/index.tsx %}
+{% endhighlight %}
+{% highlight js tabtitle="datasource.jsx" %}
+{% include code-snippet/chart/chart-title-cs8/app/datasource.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.tsx" %}
+{% include code-snippet/chart/chart-title-cs8/app/datasource.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/chart/chart-title-cs8" %}
+
+### Title alignment
+
+You can align the title to the near, far, or center of the chart using the [`textAlignment`](https://ej2.syncfusion.com/react/documentation/api/chart/titleSettingsModel#textalignment) property.
+
+{% tabs %}
+{% highlight js tabtitle="index.jsx" %}
+{% include code-snippet/chart/chart-title-cs9/app/index.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="index.tsx" %}
+{% include code-snippet/chart/chart-title-cs9/app/index.tsx %}
+{% endhighlight %}
+{% highlight js tabtitle="datasource.jsx" %}
+{% include code-snippet/chart/chart-title-cs9/app/datasource.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.tsx" %}
+{% include code-snippet/chart/chart-title-cs9/app/datasource.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/chart/chart-title-cs9" %}
+
+### Title wrap
+
+The `textStyle` property of chart title provides options to customize the `size`, `color`, `fontFamily`, `fontWeight`, `fontStyle`, `opacity`, `textAlignment` and `textOverflow`.
+
+{% tabs %}
+{% highlight js tabtitle="index.jsx" %}
+{% include code-snippet/chart/series/column-cs7/app/index.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="index.tsx" %}
+{% include code-snippet/chart/series/column-cs7/app/index.tsx %}
+{% endhighlight %}
+{% highlight js tabtitle="datasource.jsx" %}
+{% include code-snippet/chart/series/column-cs7/app/datasource.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.tsx" %}
+{% include code-snippet/chart/series/column-cs7/app/datasource.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/chart/series/column-cs7" %}
+
+## Chart subtitle
+
+Chart can be given a subtitle using [`subTitle`](https://ej2.syncfusion.com/react/documentation/api/chart/chartModel#subtitle) property, to show the information about the data plotted.
+
+{% tabs %}
+{% highlight js tabtitle="index.jsx" %}
+{% include code-snippet/chart/chart-title-cs6/app/index.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="index.tsx" %}
+{% include code-snippet/chart/chart-title-cs6/app/index.tsx %}
+{% endhighlight %}
+{% highlight js tabtitle="datasource.jsx" %}
+{% include code-snippet/chart/chart-title-cs6/app/datasource.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.tsx" %}
+{% include code-snippet/chart/chart-title-cs6/app/datasource.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/chart/chart-title-cs6" %}
\ No newline at end of file
diff --git a/ej2-react/chart/understanding-chart.md b/ej2-react/chart/understanding-chart.md
new file mode 100644
index 000000000..fe7245eb8
--- /dev/null
+++ b/ej2-react/chart/understanding-chart.md
@@ -0,0 +1,41 @@
+---
+
+layout: post
+title: Understanding React Chart component | Syncfusion
+description: Explore and understand the Syncfusion React Chart component in Essential JS 2 and discover its powerful features.
+platform: ej2-react
+control: Understanding
+documentation: ug
+domainurl: ##DomainURL##
+
+---
+
+# Understanding of React Chart
+
+To understand how Syncfusion React Chart works, it is important to learn about the various parts of a chart.
+The image below illustrates the main elements of the chart.
+
+
+
+## Title
+
+The title is the text that explains what the chart represents. It is usually displayed at the top of the chart.
+For more details, see [Title and Subtitle](./title-subtitle.md).
+
+## Series
+
+Each series represents a set of data values plotted on the chart. For more details, see [Series](./chart-types/line.md).
+
+## Tooltip
+
+Tooltips provide quick insights by showing value details when you hover over a data point or series on the chart.
+For more details, see [Tooltip](./tool-tip.md).
+
+## Legend
+
+A legend identifies each data series in the chart and provides options to toggle them on or off.
+For more details, see [Legend](./legend.md).
+
+## Axes
+
+Charts typically rely on axes to organize data. Standard Cartesian charts have two: an x-axis (horizontal) and a y-axis (vertical). Three-dimensional charts add a z-axis for depth, and polar charts feature one axis that wraps around the chart’s perimeter.
\ No newline at end of file
diff --git a/ej2-react/code-snippet/gantt/contextmenu-cs1/app/datasource.jsx b/ej2-react/code-snippet/gantt/contextmenu-cs1/app/datasource.jsx
index ea05cc22b..8debced1d 100644
--- a/ej2-react/code-snippet/gantt/contextmenu-cs1/app/datasource.jsx
+++ b/ej2-react/code-snippet/gantt/contextmenu-cs1/app/datasource.jsx
@@ -1,41 +1,41 @@
export let data = [
- { TaskId: 1, TaskName: 'Product Concept', StartDate: new Date('04/02/2019'), EndDate: new Date('04/21/2019'), },
- { TaskId: 2, TaskName: 'Defining the product and its usage', StartDate: new Date('04/02/2019'), Duration: 3, Progress: 30, ParentId: 1 },
- { TaskId: 3, TaskName: 'Defining target audience', StartDate: new Date('04/02/2019'), Duration: 3, ParentId: 1 },
- { TaskId: 4, TaskName: 'Prepare product sketch and notes', StartDate: new Date('04/02/2019'), Duration: 3, Predecessor: "2", Progress: 30, ParentId: 1 },
- { TaskId: 5, TaskName: 'Concept Approval', StartDate: new Date('04/02/2019'), Duration: 0, Predecessor: "3,4" },
- { TaskId: 6, TaskName: 'Market Research', StartDate: new Date('04/02/2019'), EndDate: new Date('04/21/2019'), },
- { TaskId: 7, TaskName: 'Demand Analysis', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentId: 6, },
- { TaskId: 8, TaskName: 'Customer strength', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "5", Progress: 30, ParentId: 7 },
- { TaskId: 9, TaskName: 'Market opportunity analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "5", ParentId: 7 },
- { TaskId: 10, TaskName: 'Competitor Analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "7,8", Progress: 30, ParentId: 6, },
- { TaskId: 11, TaskName: 'Product strength analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "9", ParentId: 6, },
- { TaskId: 12, TaskName: 'Research complete', StartDate: new Date('04/04/2019'), Duration: 0, Predecessor: "10", ParentId: 6, },
- { TaskId: 13, TaskName: 'Product Design and Development', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), },
- { TaskId: 14, TaskName: 'Functionality design', StartDate: new Date('04/04/2019'), Duration: 7, Progress: 30, ParentId: 13 },
- { TaskId: 15, TaskName: 'Quality design', StartDate: new Date('04/04/2019'), Duration: 5, ParentId: 13 },
- { TaskId: 16, TaskName: 'Define Reliability', StartDate: new Date('04/04/2019'), Duration: 5, Progress: 30, ParentId: 13 },
- { TaskId: 17, TaskName: 'Identifying raw materials ', StartDate: new Date('04/04/2019'), Duration: 4, ParentId: 13 },
- { TaskId: 18, TaskName: 'Define cost plan', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentId: 13, },
- { TaskId: 19, TaskName: 'Manufacturing cost', StartDate: new Date('04/04/2019'), Duration: 1, Progress: 30, ParentId: 18 },
- { TaskId: 20, TaskName: 'Selling cost', StartDate: new Date('04/04/2019'), Duration: 1, ParentId: 18 },
- { TaskId: 21, TaskName: 'Development of the final design', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentId: 13, },
- { TaskId: 22, TaskName: 'Defining dimensions and package volume', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentId: 21 },
- { TaskId: 23, TaskName: 'Develop design to meet industry standards', StartDate: new Date('04/04/2019'), Duration: 3, ParentId: 21 },
- { TaskId: 24, TaskName: 'Include all the details', StartDate: new Date('04/04/2019'), Duration: 5, ParentId: 21 },
- { TaskId: 25, TaskName: 'CAD Computer-aided design', StartDate: new Date('04/04/2019'), Duration: 10, Progress: 30, ParentId: 13 },
- { TaskId: 26, TaskName: 'CAM Computer-aided manufacturing', StartDate: new Date('04/04/2019'), Duration: 10, ParentId: 13 },
- { TaskId: 27, TaskName: 'Prototype Testing', StartDate: new Date('04/04/2019'), Duration: 12, Progress: 30 },
- { TaskId: 28, TaskName: 'Include feedback', StartDate: new Date('04/04/2019'), Duration: 5 },
- { TaskId: 29, TaskName: 'Manufacturing', StartDate: new Date('04/04/2019'), Duration: 9, Progress: 30 },
- { TaskId: 30, TaskName: 'Assembling materials to finished goods', StartDate: new Date('04/04/2019'), Duration: 12 },
- { TaskId: 31, TaskName: 'Feedback and Testing', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), },
- { TaskId: 32, TaskName: 'Internal testing and feedback', StartDate: new Date('04/04/2019'), Duration: 5, Progress: 30, ParentId: 31 },
- { TaskId: 33, TaskName: 'Customer testing and feedback', StartDate: new Date('04/04/2019'), Duration: 7, Progress: 30, ParentId: 31 },
- { TaskId: 34, TaskName: 'Product Development', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), },
- { TaskId: 35, TaskName: 'Important improvements', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentId: 34 },
- { TaskId: 36, TaskName: 'Address any unforeseen issues', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentId: 34 },
- { TaskId: 37, TaskName: 'Final Product', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019') },
- { TaskId: 38, TaskName: 'Branding product', StartDate: new Date('04/04/2019'), Duration: 5, ParentId: 37 },
- { TaskId: 39, TaskName: 'Marketing and pre-sales', StartDate: new Date('04/04/2019'), Duration: 10, Progress: 30, ParentId: 37 }
+ { TaskID: 1, TaskName: 'Product Concept', StartDate: new Date('04/02/2019'), EndDate: new Date('04/21/2019'), },
+ { TaskID: 2, TaskName: 'Defining the product and its usage', StartDate: new Date('04/02/2019'), Duration: 3, Progress: 30, ParentID: 1 },
+ { TaskID: 3, TaskName: 'Defining target audience', StartDate: new Date('04/02/2019'), Duration: 3, ParentID: 1 },
+ { TaskID: 4, TaskName: 'Prepare product sketch and notes', StartDate: new Date('04/02/2019'), Duration: 3, Predecessor: "2", Progress: 30, ParentID: 1 },
+ { TaskID: 5, TaskName: 'Concept Approval', StartDate: new Date('04/02/2019'), Duration: 0, Predecessor: "3,4" },
+ { TaskID: 6, TaskName: 'Market Research', StartDate: new Date('04/02/2019'), EndDate: new Date('04/21/2019'), },
+ { TaskID: 7, TaskName: 'Demand Analysis', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentID: 6, },
+ { TaskID: 8, TaskName: 'Customer strength', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "5", Progress: 30, ParentID: 7 },
+ { TaskID: 9, TaskName: 'Market opportunity analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "5", ParentID: 7 },
+ { TaskID: 10, TaskName: 'Competitor Analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "7,8", Progress: 30, ParentID: 6, },
+ { TaskID: 11, TaskName: 'Product strength analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "9", ParentID: 6, },
+ { TaskID: 12, TaskName: 'Research complete', StartDate: new Date('04/04/2019'), Duration: 0, Predecessor: "10", ParentID: 6, },
+ { TaskID: 13, TaskName: 'Product Design and Development', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), },
+ { TaskID: 14, TaskName: 'Functionality design', StartDate: new Date('04/04/2019'), Duration: 7, Progress: 30, ParentID: 13 },
+ { TaskID: 15, TaskName: 'Quality design', StartDate: new Date('04/04/2019'), Duration: 5, ParentID: 13 },
+ { TaskID: 16, TaskName: 'Define Reliability', StartDate: new Date('04/04/2019'), Duration: 5, Progress: 30, ParentID: 13 },
+ { TaskID: 17, TaskName: 'Identifying raw materials ', StartDate: new Date('04/04/2019'), Duration: 4, ParentID: 13 },
+ { TaskID: 18, TaskName: 'Define cost plan', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentID: 13, },
+ { TaskID: 19, TaskName: 'Manufacturing cost', StartDate: new Date('04/04/2019'), Duration: 1, Progress: 30, ParentID: 18 },
+ { TaskID: 20, TaskName: 'Selling cost', StartDate: new Date('04/04/2019'), Duration: 1, ParentID: 18 },
+ { TaskID: 21, TaskName: 'Development of the final design', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentID: 13, },
+ { TaskID: 22, TaskName: 'Defining dimensions and package volume', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentID: 21 },
+ { TaskID: 23, TaskName: 'Develop design to meet industry standards', StartDate: new Date('04/04/2019'), Duration: 3, ParentID: 21 },
+ { TaskID: 24, TaskName: 'Include all the details', StartDate: new Date('04/04/2019'), Duration: 5, ParentID: 21 },
+ { TaskID: 25, TaskName: 'CAD Computer-aided design', StartDate: new Date('04/04/2019'), Duration: 10, Progress: 30, ParentID: 13 },
+ { TaskID: 26, TaskName: 'CAM Computer-aided manufacturing', StartDate: new Date('04/04/2019'), Duration: 10, ParentID: 13 },
+ { TaskID: 27, TaskName: 'Prototype Testing', StartDate: new Date('04/04/2019'), Duration: 12, Progress: 30 },
+ { TaskID: 28, TaskName: 'Include feedback', StartDate: new Date('04/04/2019'), Duration: 5 },
+ { TaskID: 29, TaskName: 'Manufacturing', StartDate: new Date('04/04/2019'), Duration: 9, Progress: 30 },
+ { TaskID: 30, TaskName: 'Assembling materials to finished goods', StartDate: new Date('04/04/2019'), Duration: 12 },
+ { TaskID: 31, TaskName: 'Feedback and Testing', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), },
+ { TaskID: 32, TaskName: 'Internal testing and feedback', StartDate: new Date('04/04/2019'), Duration: 5, Progress: 30, ParentID: 31 },
+ { TaskID: 33, TaskName: 'Customer testing and feedback', StartDate: new Date('04/04/2019'), Duration: 7, Progress: 30, ParentID: 31 },
+ { TaskID: 34, TaskName: 'Product Development', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), },
+ { TaskID: 35, TaskName: 'Important improvements', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentID: 34 },
+ { TaskID: 36, TaskName: 'Address any unforeseen issues', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentID: 34 },
+ { TaskID: 37, TaskName: 'Final Product', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019') },
+ { TaskID: 38, TaskName: 'Branding product', StartDate: new Date('04/04/2019'), Duration: 5, ParentID: 37 },
+ { TaskID: 39, TaskName: 'Marketing and pre-sales', StartDate: new Date('04/04/2019'), Duration: 10, Progress: 30, ParentID: 37 }
];
diff --git a/ej2-react/code-snippet/gantt/contextmenu-cs1/app/datasource.tsx b/ej2-react/code-snippet/gantt/contextmenu-cs1/app/datasource.tsx
index 9088420b1..bb99b30b9 100644
--- a/ej2-react/code-snippet/gantt/contextmenu-cs1/app/datasource.tsx
+++ b/ej2-react/code-snippet/gantt/contextmenu-cs1/app/datasource.tsx
@@ -1,41 +1,41 @@
export let data: Object[] = [
{ TaskID: 1, TaskName: 'Product Concept', StartDate: new Date('04/02/2019'), EndDate: new Date('04/21/2019'), },
- { TaskID: 2, TaskName: 'Defining the product and its usage', StartDate: new Date('04/02/2019'), Duration: 3, Progress: 30, ParentId: 1 },
- { TaskID: 3, TaskName: 'Defining target audience', StartDate: new Date('04/02/2019'), Duration: 3, ParentId: 1 },
- { TaskID: 4, TaskName: 'Prepare product sketch and notes', StartDate: new Date('04/02/2019'), Duration: 3, Predecessor: "2", Progress: 30, ParentId: 1 },
+ { TaskID: 2, TaskName: 'Defining the product and its usage', StartDate: new Date('04/02/2019'), Duration: 3, Progress: 30, ParentID: 1 },
+ { TaskID: 3, TaskName: 'Defining target audience', StartDate: new Date('04/02/2019'), Duration: 3, ParentID: 1 },
+ { TaskID: 4, TaskName: 'Prepare product sketch and notes', StartDate: new Date('04/02/2019'), Duration: 3, Predecessor: "2", Progress: 30, ParentID: 1 },
{ TaskID: 5, TaskName: 'Concept Approval', StartDate: new Date('04/02/2019'), Duration: 0, Predecessor: "3,4" },
{ TaskID: 6, TaskName: 'Market Research', StartDate: new Date('04/02/2019'), EndDate: new Date('04/21/2019'), },
- { TaskID: 7, TaskName: 'Demand Analysis', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentId: 6, },
- { TaskID: 8, TaskName: 'Customer strength', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "5", Progress: 30, ParentId: 7 },
- { TaskID: 9, TaskName: 'Market opportunity analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "5", ParentId: 7 },
- { TaskID: 10, TaskName: 'Competitor Analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "7,8", Progress: 30, ParentId: 6, },
- { TaskID: 11, TaskName: 'Product strength analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "9", ParentId: 6, },
- { TaskID: 12, TaskName: 'Research complete', StartDate: new Date('04/04/2019'), Duration: 0, Predecessor: "10", ParentId: 6, },
+ { TaskID: 7, TaskName: 'Demand Analysis', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentID: 6, },
+ { TaskID: 8, TaskName: 'Customer strength', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "5", Progress: 30, ParentID: 7 },
+ { TaskID: 9, TaskName: 'Market opportunity analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "5", ParentID: 7 },
+ { TaskID: 10, TaskName: 'Competitor Analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "7,8", Progress: 30, ParentID: 6, },
+ { TaskID: 11, TaskName: 'Product strength analysis', StartDate: new Date('04/04/2019'), Duration: 4, Predecessor: "9", ParentID: 6, },
+ { TaskID: 12, TaskName: 'Research complete', StartDate: new Date('04/04/2019'), Duration: 0, Predecessor: "10", ParentID: 6, },
{ TaskID: 13, TaskName: 'Product Design and Development', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), },
- { TaskID: 14, TaskName: 'Functionality design', StartDate: new Date('04/04/2019'), Duration: 7, Progress: 30, ParentId: 13 },
- { TaskID: 15, TaskName: 'Quality design', StartDate: new Date('04/04/2019'), Duration: 5, ParentId: 13 },
- { TaskID: 16, TaskName: 'Define Reliability', StartDate: new Date('04/04/2019'), Duration: 5, Progress: 30, ParentId: 13 },
- { TaskID: 17, TaskName: 'Identifying raw materials ', StartDate: new Date('04/04/2019'), Duration: 4, ParentId: 13 },
- { TaskID: 18, TaskName: 'Define cost plan', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentId: 13, },
- { TaskID: 19, TaskName: 'Manufacturing cost', StartDate: new Date('04/04/2019'), Duration: 1, Progress: 30, ParentId: 18 },
- { TaskID: 20, TaskName: 'Selling cost', StartDate: new Date('04/04/2019'), Duration: 1, ParentId: 18 },
- { TaskID: 21, TaskName: 'Development of the final design', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentId: 13, },
- { TaskID: 22, TaskName: 'Defining dimensions and package volume', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentId: 21 },
- { TaskID: 23, TaskName: 'Develop design to meet industry standards', StartDate: new Date('04/04/2019'), Duration: 3, ParentId: 21 },
- { TaskID: 24, TaskName: 'Include all the details', StartDate: new Date('04/04/2019'), Duration: 5, ParentId: 21 },
- { TaskID: 25, TaskName: 'CAD Computer-aided design', StartDate: new Date('04/04/2019'), Duration: 10, Progress: 30, ParentId: 13 },
- { TaskID: 26, TaskName: 'CAM Computer-aided manufacturing', StartDate: new Date('04/04/2019'), Duration: 10, ParentId: 13 },
+ { TaskID: 14, TaskName: 'Functionality design', StartDate: new Date('04/04/2019'), Duration: 7, Progress: 30, ParentID: 13 },
+ { TaskID: 15, TaskName: 'Quality design', StartDate: new Date('04/04/2019'), Duration: 5, ParentID: 13 },
+ { TaskID: 16, TaskName: 'Define Reliability', StartDate: new Date('04/04/2019'), Duration: 5, Progress: 30, ParentID: 13 },
+ { TaskID: 17, TaskName: 'Identifying raw materials ', StartDate: new Date('04/04/2019'), Duration: 4, ParentID: 13 },
+ { TaskID: 18, TaskName: 'Define cost plan', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentID: 13, },
+ { TaskID: 19, TaskName: 'Manufacturing cost', StartDate: new Date('04/04/2019'), Duration: 1, Progress: 30, ParentID: 18 },
+ { TaskID: 20, TaskName: 'Selling cost', StartDate: new Date('04/04/2019'), Duration: 1, ParentID: 18 },
+ { TaskID: 21, TaskName: 'Development of the final design', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), ParentID: 13, },
+ { TaskID: 22, TaskName: 'Defining dimensions and package volume', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentID: 21 },
+ { TaskID: 23, TaskName: 'Develop design to meet industry standards', StartDate: new Date('04/04/2019'), Duration: 3, ParentID: 21 },
+ { TaskID: 24, TaskName: 'Include all the details', StartDate: new Date('04/04/2019'), Duration: 5, ParentID: 21 },
+ { TaskID: 25, TaskName: 'CAD Computer-aided design', StartDate: new Date('04/04/2019'), Duration: 10, Progress: 30, ParentID: 13 },
+ { TaskID: 26, TaskName: 'CAM Computer-aided manufacturing', StartDate: new Date('04/04/2019'), Duration: 10, ParentID: 13 },
{ TaskID: 27, TaskName: 'Prototype Testing', StartDate: new Date('04/04/2019'), Duration: 12, Progress: 30 },
{ TaskID: 28, TaskName: 'Include feedback', StartDate: new Date('04/04/2019'), Duration: 5 },
{ TaskID: 29, TaskName: 'Manufacturing', StartDate: new Date('04/04/2019'), Duration: 9, Progress: 30 },
{ TaskID: 30, TaskName: 'Assembling materials to finished goods', StartDate: new Date('04/04/2019'), Duration: 12 },
{ TaskID: 31, TaskName: 'Feedback and Testing', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), },
- { TaskID: 32, TaskName: 'Internal testing and feedback', StartDate: new Date('04/04/2019'), Duration: 5, Progress: 30, ParentId: 31 },
- { TaskID: 33, TaskName: 'Customer testing and feedback', StartDate: new Date('04/04/2019'), Duration: 7, Progress: 30, ParentId: 31 },
+ { TaskID: 32, TaskName: 'Internal testing and feedback', StartDate: new Date('04/04/2019'), Duration: 5, Progress: 30, ParentID: 31 },
+ { TaskID: 33, TaskName: 'Customer testing and feedback', StartDate: new Date('04/04/2019'), Duration: 7, Progress: 30, ParentID: 31 },
{ TaskID: 34, TaskName: 'Product Development', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019'), },
- { TaskID: 35, TaskName: 'Important improvements', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentId: 34 },
- { TaskID: 36, TaskName: 'Address any unforeseen issues', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentId: 34 },
+ { TaskID: 35, TaskName: 'Important improvements', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentID: 34 },
+ { TaskID: 36, TaskName: 'Address any unforeseen issues', StartDate: new Date('04/04/2019'), Duration: 2, Progress: 30, ParentID: 34 },
{ TaskID: 37, TaskName: 'Final Product', StartDate: new Date('04/04/2019'), EndDate: new Date('04/21/2019') },
- { TaskID: 38, TaskName: 'Branding product', StartDate: new Date('04/04/2019'), Duration: 5, ParentId: 37 },
- { TaskID: 39, TaskName: 'Marketing and pre-sales', StartDate: new Date('04/04/2019'), Duration: 10, Progress: 30, ParentId: 37 }
+ { TaskID: 38, TaskName: 'Branding product', StartDate: new Date('04/04/2019'), Duration: 5, ParentID: 37 },
+ { TaskID: 39, TaskName: 'Marketing and pre-sales', StartDate: new Date('04/04/2019'), Duration: 10, Progress: 30, ParentID: 37 }
];
\ No newline at end of file
diff --git a/ej2-react/code-snippet/gantt/contextmenu-cs1/app/index.jsx b/ej2-react/code-snippet/gantt/contextmenu-cs1/app/index.jsx
index 32cc82c6a..a1c2f4c73 100644
--- a/ej2-react/code-snippet/gantt/contextmenu-cs1/app/index.jsx
+++ b/ej2-react/code-snippet/gantt/contextmenu-cs1/app/index.jsx
@@ -4,7 +4,7 @@ import { GanttComponent, Inject, Edit, Selection, ContextMenu, Sort, Resize } fr
import { data } from './datasource';
function App(){
const taskFields = {
- id: 'TaskId',
+ id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
diff --git a/ej2-react/code-snippet/gantt/contextmenu-cs1/app/index.tsx b/ej2-react/code-snippet/gantt/contextmenu-cs1/app/index.tsx
index 00439dce8..5e87642bb 100644
--- a/ej2-react/code-snippet/gantt/contextmenu-cs1/app/index.tsx
+++ b/ej2-react/code-snippet/gantt/contextmenu-cs1/app/index.tsx
@@ -4,13 +4,13 @@ import { GanttComponent, Inject, Edit, Selection, ContextMenu, Sort, Resize, Edi
import { data } from './datasource';
function App(){
const taskFields: any = {
- id: 'TaskId',
+ id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
- parentID: 'parentId'
+ parentID: 'ParentID'
};
const editSettings: EditSettingsModel = {
allowAdding: true,
diff --git a/ej2-react/code-snippet/gantt/contextmenu-cs1/index.html b/ej2-react/code-snippet/gantt/contextmenu-cs1/index.html
index 46cfdd2c2..c425b4a69 100644
--- a/ej2-react/code-snippet/gantt/contextmenu-cs1/index.html
+++ b/ej2-react/code-snippet/gantt/contextmenu-cs1/index.html
@@ -7,7 +7,7 @@
-
+
diff --git a/ej2-react/code-snippet/gantt/contextmenu-cs1/systemjs.config.js b/ej2-react/code-snippet/gantt/contextmenu-cs1/systemjs.config.js
index d020a62a2..398abac63 100644
--- a/ej2-react/code-snippet/gantt/contextmenu-cs1/systemjs.config.js
+++ b/ej2-react/code-snippet/gantt/contextmenu-cs1/systemjs.config.js
@@ -14,7 +14,7 @@ System.config({
}
},
paths: {
- "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/31.2.2/"
},
map: {
app: 'app',
diff --git a/ej2-react/code-snippet/gantt/pdf-multiple-export-cs1/app/index.jsx b/ej2-react/code-snippet/gantt/pdf-multiple-export-cs1/app/index.jsx
index 19341bbce..78fb63ee6 100644
--- a/ej2-react/code-snippet/gantt/pdf-multiple-export-cs1/app/index.jsx
+++ b/ej2-react/code-snippet/gantt/pdf-multiple-export-cs1/app/index.jsx
@@ -17,7 +17,7 @@ function App () {
let secondGantt;
function toolbarClick(args) {
if (args.item.text === 'PDF export') {
- const firstGanttExport = this.firstGantt.pdfExport({}, true);
+ const firstGanttExport = firstGantt.pdfExport({}, true);
firstGanttExport.then((pdfData) => {
secondGantt.pdfExport({}, false, pdfData);
});
diff --git a/ej2-react/code-snippet/gantt/pdf-multiple-export-cs1/app/index.tsx b/ej2-react/code-snippet/gantt/pdf-multiple-export-cs1/app/index.tsx
index 9aa6c78a1..2ca631cb4 100644
--- a/ej2-react/code-snippet/gantt/pdf-multiple-export-cs1/app/index.tsx
+++ b/ej2-react/code-snippet/gantt/pdf-multiple-export-cs1/app/index.tsx
@@ -3,35 +3,35 @@ import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Toolbar, PdfExport, Selection } from '@syncfusion/ej2-react-gantt';
import { ClickEventArgs } from '@syncfusion/ej2-navigations/src/toolbar/toolbar';
import { data } from './datasource';
-function App () {
- const taskFields = {
- id: 'TaskID',
- name: 'TaskName',
- startDate: 'StartDate',
- duration: 'Duration',
- progress: 'Progress',
- child: 'subtasks'
- };
- const toolbarOptions = ['PdfExport'];
- let firstGantt:any;
- let secondGantt:any;
- function toolbarClick(args) {
+function App() {
+ const taskFields = {
+ id: 'TaskID',
+ name: 'TaskName',
+ startDate: 'StartDate',
+ duration: 'Duration',
+ progress: 'Progress',
+ child: 'subtasks'
+ };
+ const toolbarOptions = ['PdfExport'];
+ let firstGantt: any;
+ let secondGantt: any;
+ function toolbarClick(args: ClickEventArgs) {
if (args.item.text === 'PDF export') {
- const firstGanttExport = this.firstGantt.pdfExport({}, true);
+ const firstGanttExport = firstGantt.pdfExport({}, true);
firstGanttExport.then((pdfData) => {
- secondGantt.pdfExport({}, false, pdfData);
+ secondGantt.pdfExport({}, false, pdfData);
});
}
};
- return (
+ )
+}
+
+export default App
diff --git a/ej2-react/code-snippet/grid/anomaly-detection/anomaly-detection.tsx b/ej2-react/code-snippet/grid/anomaly-detection/anomaly-detection.tsx
new file mode 100644
index 000000000..d76e13362
--- /dev/null
+++ b/ej2-react/code-snippet/grid/anomaly-detection/anomaly-detection.tsx
@@ -0,0 +1,91 @@
+import React, { useEffect, useRef, useState } from 'react';
+import { GridComponent, ColumnsDirective, ColumnDirective } from '@syncfusion/ej2-react-grids';
+import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
+import { isNullOrUndefined } from '@syncfusion/ej2-base';
+import { machineDataList, type MachineData } from './datasource.ts';
+import { getAzureChatAIRequest } from './openai-model.ts';
+import './App.css'
+
+const AnomalyDetectionGrid: React.FC = () => {
+ const gridRef = useRef(null);
+ const [AIgeneratedData, setAIgeneratedData] = useState([]);
+
+ const handleDetectAnomaly = async () => {
+ if (!gridRef.current) return;
+ gridRef.current.showSpinner();
+
+ const gridReportJson = JSON.stringify(gridRef.current.dataSource);
+ const userInput = generatePrompt(gridReportJson);
+
+ try {
+ const aiOutput = await getAzureChatAIRequest({ messages: [{ role: 'user', content: userInput }] });
+ const cleanedOutput = aiOutput.replace('```json', '').replace('```', '');
+ const parsedData: MachineData[] = JSON.parse(cleanedOutput);
+
+ gridRef.current.hideSpinner();
+ setAIgeneratedData(parsedData);
+ } catch (error) {
+ console.error('Error detecting anomaly:', error);
+ gridRef.current.hideSpinner();
+ }
+ };
+
+ const generatePrompt = (data: string): string => {
+ return `Given the following datasource are bounded in the Grid table\n\n${data}.\n Return the anomaly data rows (ie. pick the ir-relevant datas mentioned in the corresponding table) present in the table mentioned above as like in the same format provided do not change the format. Example: Watch out the production rate count and the factors that is used to acheive the mentioned production rate(Temprature, Pressure, Motor Speed) If the production rate is not relevant to the concern factors mark it as anomaly Data. If it is anomaly data then due to which column data it is marked as anomaly that particular column name should be updated in the AnomalyFieldName. Also Update the AnomalyDescription stating that due to which reason it is marked as anomaly a short description. Example if the data is marked as anomaly due to the Temperature column, Since the mentioned temperature is too high than expected, it is marked as anomaly data.\n\nGenerate an output in JSON format only and Should not include any additional information or contents in response`;
+ };
+
+ const customizeCell = (args: any) => {
+ if (!isNullOrUndefined(AIgeneratedData) && AIgeneratedData.length > 0) {
+ let isAnomalyData = false;
+ AIgeneratedData.forEach(e => {
+ if (!isNullOrUndefined(e.AnomalyFieldName) &&
+ e.MachineID === args.data.MachineID &&
+ (e.AnomalyFieldName === args.column.field || args.column.field === 'AnomalyDescription')) {
+ isAnomalyData = true;
+ }
+ });
+ if (isAnomalyData) {
+ args.cell.classList.add('anomaly-cell');
+ args.cell.classList.remove('normal-cell');
+ } else if (args.column.field === 'AnomalyDescription') {
+ args.cell.classList.add('normal-cell');
+ args.cell.classList.remove('anomaly-cell');
+ }
+ } else if (args.column.field === 'AnomalyDescription') {
+ args.cell.classList.add('normal-cell');
+ args.cell.classList.remove('anomaly-cell');
+ }
+ };
+
+ useEffect(() => {
+ if (AIgeneratedData.length > 0 && gridRef.current) {
+ gridRef.current.showColumns(['Anomaly Description']);
+ AIgeneratedData.forEach(item => {
+ gridRef.current?.setRowData(item.MachineID, item);
+ });
+ gridRef.current.refresh();
+ }
+ }, [AIgeneratedData]);
+
+ return (
+
+
+ Detect Anomaly Data
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default AnomalyDetectionGrid;
\ No newline at end of file
diff --git a/ej2-react/code-snippet/grid/anomaly-detection/datasource.ts b/ej2-react/code-snippet/grid/anomaly-detection/datasource.ts
new file mode 100644
index 000000000..cad456513
--- /dev/null
+++ b/ej2-react/code-snippet/grid/anomaly-detection/datasource.ts
@@ -0,0 +1,104 @@
+export interface MachineData {
+ MachineID: string;
+ Temperature: number;
+ Pressure: number;
+ Voltage: number;
+ MotorSpeed: number;
+ ProductionRate: number;
+ AnomalyDescription?: string;
+};
+
+let description: string = "The factors that supporting the Production rate is relevant to the count produced, hence the row data is marked as normal data.";
+
+export let machineDataList: MachineData[] = [
+ {
+ MachineID: "M001",
+ Temperature: 85,
+ Pressure: 120,
+ Voltage: 220,
+ MotorSpeed: 1500,
+ ProductionRate: 100,
+ AnomalyDescription: description,
+ },
+ {
+ MachineID: "M002",
+ Temperature: 788,
+ Pressure: 115,
+ Voltage: 230,
+ MotorSpeed: 1520,
+ ProductionRate: 105,
+ AnomalyDescription: description,
+ },
+ {
+ MachineID: "M003",
+ Temperature: 90,
+ Pressure: 118,
+ Voltage: 225,
+ MotorSpeed: 1480,
+ ProductionRate: 95,
+ AnomalyDescription: description,
+ },
+ {
+ MachineID: "M004",
+ Temperature: 87,
+ Pressure: 122,
+ Voltage: 228,
+ MotorSpeed: 1515,
+ ProductionRate: 110,
+ AnomalyDescription: description,
+ },
+ {
+ MachineID: "M005",
+ Temperature: 92,
+ Pressure: 116,
+ Voltage: 222,
+ MotorSpeed: 21475,
+ ProductionRate: 980,
+ AnomalyDescription: description,
+ },
+ {
+ MachineID: "M006",
+ Temperature: 85,
+ Pressure: 119,
+ Voltage: 220,
+ MotorSpeed: 1490,
+ ProductionRate: 102,
+ AnomalyDescription: description,
+ },
+ {
+ MachineID: "M007",
+ Temperature: 88,
+ Pressure: 114,
+ Voltage: 230,
+ MotorSpeed: 1500,
+ ProductionRate: 104,
+ AnomalyDescription: description,
+ },
+ {
+ MachineID: "M008",
+ Temperature: 90,
+ Pressure: 1120,
+ Voltage: 225,
+ MotorSpeed: 1470,
+ ProductionRate: 89,
+ AnomalyDescription: description,
+ },
+ {
+ MachineID: "M009",
+ Temperature: 87,
+ Pressure: 121,
+ Voltage: 228,
+ MotorSpeed: 1505,
+ ProductionRate: 108,
+ AnomalyDescription: description,
+ },
+ {
+ MachineID: "M010",
+ Temperature: 92,
+ Pressure: 117,
+ Voltage: 222,
+ MotorSpeed: 1480,
+ ProductionRate: 100,
+ AnomalyDescription: description,
+ }
+];
\ No newline at end of file
diff --git a/ej2-react/code-snippet/grid/anomaly-detection/openai-model.ts b/ej2-react/code-snippet/grid/anomaly-detection/openai-model.ts
new file mode 100644
index 000000000..8a1a7e0cf
--- /dev/null
+++ b/ej2-react/code-snippet/grid/anomaly-detection/openai-model.ts
@@ -0,0 +1,45 @@
+import OpenAI from "openai";
+
+const OPENAI_API_KEY = "YOUR_API_KEY";
+
+const openAi = new OpenAI({
+ apiKey: OPENAI_API_KEY, dangerouslyAllowBrowser: true
+});
+
+export async function getAzureChatAIRequest(options: any) {
+ try {
+ const completion = await openAi.chat.completions.create({
+ model: "gpt-4o-mini",
+ messages: options.messages,
+ temperature: options.temperature ?? 0.7,
+ max_tokens: options.maxTokens ?? 1000
+ });
+ return completion.choices[0].message.content;
+ } catch (err) {
+ console.error("Error occurred:", err);
+ return null;
+ }
+}
+
+export async function OpenAiModel(description: string) {
+ const chatCompletion = await getOpenAiModel(description);
+ return chatCompletion.choices[0].message.content;
+}
+
+export async function getOpenAiModel(query: string) {
+ return await openAi.chat.completions.create({
+ messages: [{ role: "user", content: query }],
+ model: "gpt-3.5-turbo",
+ });
+}
+
+// Open AI Embedding.
+
+export async function OpenAiEmbeddingModel(description: string) {
+ const embedding = await openAi.embeddings.create({
+ model: "text-embedding-ada-002",
+ input: description,
+ encoding_format: "float",
+ });
+ return embedding;
+}
\ No newline at end of file
diff --git a/ej2-react/code-snippet/grid/detail-row-events/app/App.jsx b/ej2-react/code-snippet/grid/detail-row-events/app/App.jsx
new file mode 100644
index 000000000..7e05393b8
--- /dev/null
+++ b/ej2-react/code-snippet/grid/detail-row-events/app/App.jsx
@@ -0,0 +1,39 @@
+import { ColumnDirective, ColumnsDirective, GridComponent } from '@syncfusion/ej2-react-grids';
+import { DetailRow, Inject } from '@syncfusion/ej2-react-grids';
+import * as React from 'react';
+import { data, employeeData } from './datasource';
+function App() {
+ // Prevent expanding detail row.
+ const detailExpand = (args) =>{
+ if (args.data.FirstName === 'Nancy') {
+ args.cancel = true;
+ }
+ }
+ // Prevent collapsing detail row.
+ const detailCollapse = (args) =>{
+ if (args.data.FirstName === 'Andrew') {
+ args.cancel = true;
+ }
+ }
+ const childGridOptions = {
+ columns: [
+ { field: 'OrderID', headerText: 'Order ID', textAlign: 'Right', width: 120 },
+ { field: 'CustomerID', headerText: 'Customer ID', width: 150 },
+ { field: 'ShipCity', headerText: 'Ship City', width: 150 },
+ { field: 'ShipName', headerText: 'Ship Name', width: 150 }
+ ],
+ dataSource: data,
+ queryString: 'EmployeeID'
+ };
+ return (
+
+
+
+
+
+
+
+ );
+}
+;
+export default App;
diff --git a/ej2-react/code-snippet/grid/detail-row-events/app/App.tsx b/ej2-react/code-snippet/grid/detail-row-events/app/App.tsx
new file mode 100644
index 000000000..9a4c209e5
--- /dev/null
+++ b/ej2-react/code-snippet/grid/detail-row-events/app/App.tsx
@@ -0,0 +1,43 @@
+
+
+import { ColumnDirective, ColumnsDirective, GridComponent } from '@syncfusion/ej2-react-grids';
+import { DetailRow, GridModel, Inject } from '@syncfusion/ej2-react-grids';
+import * as React from 'react';
+import { data, employeeData } from './datasource';
+
+function App() {
+ // Prevent expanding detail row.
+ const detailExpand = (args: any) =>{
+ if (args.data.FirstName === 'Nancy') {
+ args.cancel = true;
+ }
+ }
+ // Prevent collapsing detail row.
+ const detailCollapse = (args: any) =>{
+ if (args.data.FirstName === 'Andrew') {
+ args.cancel = true;
+ }
+ }
+ const childGridOptions : GridModel = {
+ columns: [
+ { field: 'OrderID', headerText: 'Order ID', textAlign: 'Right', width: 120 },
+ { field: 'CustomerID', headerText: 'Customer ID', width: 150 },
+ { field: 'ShipCity', headerText: 'Ship City', width: 150 },
+ { field: 'ShipName', headerText: 'Ship Name', width: 150 }
+ ],
+ dataSource: data,
+ queryString: 'EmployeeID'
+ };
+ return (
+
+
+
+
+
+
+
+ )
+};
+export default App;
+
+
diff --git a/ej2-react/code-snippet/grid/detail-row-events/app/datasource.jsx b/ej2-react/code-snippet/grid/detail-row-events/app/datasource.jsx
new file mode 100644
index 000000000..2e63d604c
--- /dev/null
+++ b/ej2-react/code-snippet/grid/detail-row-events/app/datasource.jsx
@@ -0,0 +1,271 @@
+export let employeeData = [{
+ 'EmployeeID': 1,
+ 'LastName': 'Davolio',
+ 'FirstName': 'Nancy',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Ms.',
+ 'BirthDate': new Date(-664743600000),
+ 'HireDate': new Date(704692800000),
+ 'Address': '507 - 20th Ave. E.\r\nApt. 2A',
+ 'City': 'Seattle',
+ 'Region': 'WA',
+ 'PostalCode': '98122',
+ 'Country': 'USA',
+ 'HomePhone': '(206) 555-9857',
+ 'Extension': '5467',
+ 'Photo': { 'Length': 21626 },
+ 'Notes': 'Education includes a BA in psychology from Colorado State University in 1970. She also completed\
+\'The Art of the Cold Call.\' Nancy is a member of Toastmasters International.',
+ 'ReportsTo': 2,
+ 'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
+},
+{
+ 'EmployeeID': 2,
+ 'LastName': 'Fuller',
+ 'FirstName': 'Andrew',
+ 'Title': 'Vice President, Sales',
+ 'TitleOfCourtesy': 'Dr.',
+ 'BirthDate': new Date(-563828400000),
+ 'HireDate': new Date(713764800000),
+ 'Address': '908 W. Capital Way',
+ 'City': 'Tacoma',
+ 'Region': 'WA',
+ 'PostalCode': '98401',
+ 'Country': 'USA',
+ 'HomePhone': '(206) 555-9482',
+ 'Extension': '3457',
+ 'Photo': { 'Length': 21626 },
+ 'Notes': 'Andrew received his BTS commercial in 1974 and a Ph.D. in international marketing from the University of \
+Dallas in 1981. He is fluent in French and Italian and reads German. He joined the company as a sales representative, \
+was promoted to sales manager in January 1992 and to vice president of sales in March 1993. Andrew is a member of the \
+Sales Management Roundtable, the Seattle Chamber of Commerce, and the Pacific Rim Importers Association.',
+ 'ReportsTo': 0,
+ 'PhotoPath': 'http://accweb/emmployees/fuller.bmp'
+},
+{
+ 'EmployeeID': 3,
+ 'LastName': 'Leverling',
+ 'FirstName': 'Janet',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Ms.',
+ 'BirthDate': new Date(-200088000000),
+ 'HireDate': new Date(702104400000),
+ 'Address': '722 Moss Bay Blvd.',
+ 'City': 'Kirkland',
+ 'Region': 'WA',
+ 'PostalCode': '98033',
+ 'Country': 'USA',
+ 'HomePhone': '(206) 555-3412',
+ 'Extension': '3355',
+ 'Photo': { 'Length': 21722 },
+ 'Notes': 'Janet has a BS degree in chemistry from Boston College (1984). \
+ She has also completed a certificate program in food retailing management.\
+ Janet was hired as a sales associate in 1991 and promoted to sales representative in February 1992.',
+ 'ReportsTo': 2,
+ 'PhotoPath': 'http://accweb/emmployees/leverling.bmp'
+},
+{
+ 'EmployeeID': 4,
+ 'LastName': 'Peacock',
+ 'FirstName': 'Margaret',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Mrs.',
+ 'BirthDate': new Date(-1018814400000),
+ 'HireDate': new Date(736401600000),
+ 'Address': '4110 Old Redmond Rd.',
+ 'City': 'Redmond',
+ 'Region': 'WA',
+ 'PostalCode': '98052',
+ 'Country': 'USA',
+ 'HomePhone': '(206) 555-8122',
+ 'Extension': '5176',
+ 'Photo': { 'Length': 21626 },
+ 'Notes': 'Margaret holds a BA in English literature from Concordia College (1958) and an MA from the American \
+Institute of Culinary Arts (1966). She was assigned to the London office temporarily from July through November 1992.',
+ 'ReportsTo': 2,
+ 'PhotoPath': 'http://accweb/emmployees/peacock.bmp'
+},
+{
+ 'EmployeeID': 5,
+ 'LastName': 'Buchanan',
+ 'FirstName': 'Steven',
+ 'Title': 'Sales Manager',
+ 'TitleOfCourtesy': 'Mr.',
+ 'BirthDate': new Date(-468010800000),
+ 'HireDate': new Date(750830400000),
+ 'Address': '14 Garrett Hill',
+ 'City': 'London',
+ 'Region': null,
+ 'PostalCode': 'SW1 8JR',
+ 'Country': 'UK',
+ 'HomePhone': '(71) 555-4848',
+ 'Extension': '3453',
+ 'Photo': { 'Length': 21626 },
+ 'Notes': 'Steven Buchanan graduated from St. Andrews University, Scotland, with a BSC degree in 1976. Upon joining the company as \
+a sales representative in 1992, he spent 6 months in an orientation program at the Seattle office and then returned to his permanent \
+post in London. He was promoted to sales manager in March 1993. Mr. Buchanan has completed the courses \'Successful \
+Telemarketing\' and \'International Sales Management.\' He is fluent in French.',
+ 'ReportsTo': 2,
+ 'PhotoPath': 'http://accweb/emmployees/buchanan.bmp'
+},
+{
+ 'EmployeeID': 6,
+ 'LastName': 'Suyama',
+ 'FirstName': 'Michael',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Mr.',
+ 'BirthDate': new Date(-205185600000),
+ 'HireDate': new Date(750830400000),
+ 'Address': 'Coventry House\r\nMiner Rd.',
+ 'City': 'London',
+ 'Region': null,
+ 'PostalCode': 'EC2 7JR',
+ 'Country': 'UK',
+ 'HomePhone': '(71) 555-7773',
+ 'Extension': '428',
+ 'Photo': { 'Length': 21626 },
+ 'Notes': 'Michael is a graduate of Sussex University (MA, economics, 1983) and the University of California at Los Angeles \
+(MBA, marketing, 1986). He has also taken the courses \'Multi-Cultural Selling\' and \'Time Management for the Sales Professional.\' \
+He is fluent in Japanese and can read and write French, Portuguese, and Spanish.',
+ 'ReportsTo': 5,
+ 'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
+},
+{
+ 'EmployeeID': 7,
+ 'LastName': 'King',
+ 'FirstName': 'Robert',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Mr.',
+ 'BirthDate': new Date(-302731200000),
+ 'HireDate': new Date(757486800000),
+ 'Address': 'Edgeham Hollow\r\nWinchester Way',
+ 'City': 'London',
+ 'Region': null,
+ 'PostalCode': 'RG1 9SP',
+ 'Country': 'UK',
+ 'HomePhone': '(71) 555-5598',
+ 'Extension': '465',
+ 'Photo': { 'Length': 21626 },
+ 'Notes': 'Robert King served in the Peace Corps and traveled extensively before completing his degree in English at the \
+University of Michigan in 1992, the year he joined the company. After completing a course entitled \'Selling in Europe,\' \
+he was transferred to the London office in March 1993.',
+ 'ReportsTo': 5,
+ 'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
+},
+{
+ 'EmployeeID': 8,
+ 'LastName': 'Callahan',
+ 'FirstName': 'Laura',
+ 'Title': 'Inside Sales Coordinator',
+ 'TitleOfCourtesy': 'Ms.',
+ 'BirthDate': new Date(-377982000000),
+ 'HireDate': new Date(762843600000),
+ 'Address': '4726 - 11th Ave. N.E.',
+ 'City': 'Seattle',
+ 'Region': 'WA',
+ 'PostalCode': '98105',
+ 'Country': 'USA',
+ 'HomePhone': '(206) 555-1189',
+ 'Extension': '2344',
+ 'Photo': { 'Length': 21626 },
+ 'Notes': 'Laura received a BA in psychology from the University of Washington. She has also completed a course in business \
+French. She reads and writes French.',
+ 'ReportsTo': 2,
+ 'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
+},
+{
+ 'EmployeeID': 9,
+ 'LastName': 'Dodsworth',
+ 'FirstName': 'Anne',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Ms.',
+ 'BirthDate': new Date(-123966000000),
+ 'HireDate': new Date(784875600000),
+ 'Address': '7 Houndstooth Rd.',
+ 'City': 'London',
+ 'Region': null,
+ 'PostalCode': 'WG2 7LT',
+ 'Country': 'UK',
+ 'HomePhone': '(71) 555-4444',
+ 'Extension': '452',
+ 'Photo': { 'Length': 21626 },
+ 'Notes': 'Anne has a BA degree in English from St. Lawrence College. She is fluent in French and German.',
+ 'ReportsTo': 5,
+ 'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
+}];
+export let data = [
+ {
+ OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5, OrderDate: new Date(8364186e5),
+ ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims', ShipAddress: '59 rue de l Abbaye',
+ ShipRegion: 'CJ', Mask: '1111',ShipPostalCode: '51100', ShipCountry: 'France', Freight: 32.38, Verified: !0
+ },
+ {
+ OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6, OrderDate: new Date(836505e6),
+ ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress: 'Luisenstr. 48',
+ ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry: 'Germany', Freight: 11.61, Verified: !1
+ },
+ {
+ OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4, OrderDate: new Date(8367642e5),
+ ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress: 'Rua do Paço, 67',
+ ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876', ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
+ },
+ {
+ OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3, OrderDate: new Date(8367642e5),
+ ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2, rue du Commerce',
+ ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004', ShipCountry: 'France', Freight: 41.34, Verified: !0
+ },
+ {
+ OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 2, OrderDate: new Date(8368506e5),
+ ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress: 'Boulevard Tirou, 255',
+ ShipRegion: 'CJ', Mask: '5555', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium', Freight: 51.3, Verified: !0
+ },
+ {
+ OrderID: 10253, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 7, OrderDate: new Date(836937e6),
+ ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress: 'Rua do Paço, 67',
+ ShipRegion: 'RJ', Mask: '6666', ShipPostalCode: '05454-876', ShipCountry: 'Brazil', Freight: 58.17, Verified: !0
+ },
+ {
+ OrderID: 10254, CustomerID: 'CHOPS', Role: 'Employee', EmployeeID: 5, OrderDate: new Date(8370234e5),
+ ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress: 'Hauptstr. 31',
+ ShipRegion: 'CJ', Mask: '7777', ShipPostalCode: '3012', ShipCountry: 'Switzerland', Freight: 22.98, Verified: !1
+ },
+ {
+ OrderID: 10255, CustomerID: 'RICSU', Role: 'Admin', EmployeeID: 9, OrderDate: new Date(8371098e5),
+ ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress: 'Starenweg 5',
+ ShipRegion: 'CJ', Mask: '8888', ShipPostalCode: '1204', ShipCountry: 'Switzerland', Freight: 148.33, Verified: !0
+ },
+ {
+ OrderID: 10256, CustomerID: 'WELLI', Role: 'Employee', EmployeeID: 3, OrderDate: new Date(837369e6),
+ ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress: 'Rua do Mercado, 12',
+ ShipRegion: 'SP', Mask: '9999', ShipPostalCode: '08737-363', ShipCountry: 'Brazil', Freight: 13.97, Verified: !1
+ },
+ {
+ OrderID: 10257, CustomerID: 'HILAA', Role: 'Admin', EmployeeID: 4, OrderDate: new Date(8374554e5),
+ ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
+ ShipRegion: 'Táchira', Mask: '1234', ShipPostalCode: '5022', ShipCountry: 'Venezuela', Freight: 81.91, Verified: !0
+ },
+ {
+ OrderID: 10258, CustomerID: 'ERNSH', Role: 'Manager', EmployeeID: 1, OrderDate: new Date(8375418e5),
+ ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse 6',
+ ShipRegion: 'CJ', Mask: '2345', ShipPostalCode: '8010', ShipCountry: 'Austria', Freight: 140.51, Verified: !0
+ },
+ {
+ OrderID: 10259, CustomerID: 'CENTC', Role: 'Admin', EmployeeID: 4, OrderDate: new Date(8376282e5),
+ ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.', ShipAddress: 'Sierras de Granada 9993',
+ ShipRegion: 'CJ', Mask: '3456', ShipPostalCode: '05022', ShipCountry: 'Mexico', Freight: 3.25, Verified: !1
+ },
+ {
+ OrderID: 10260, CustomerID: 'OTTIK', Role: 'Admin', EmployeeID: 4, OrderDate: new Date(8377146e5),
+ ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress: 'Mehrheimerstr. 369',
+ ShipRegion: 'CJ', Mask: '4567', ShipPostalCode: '50739', ShipCountry: 'Germany', Freight: 55.09, Verified: !0
+ },
+ {
+ OrderID: 10261, CustomerID: 'QUEDE', Role: 'Manager', EmployeeID: 4, OrderDate: new Date(8377146e5),
+ ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress: 'Rua da Panificadora, 12',
+ ShipRegion: 'RJ', Mask: '5678', ShipPostalCode: '02389-673', ShipCountry: 'Brazil', Freight: 3.05, Verified: !1
+ },
+ {
+ OrderID: 10262, CustomerID: 'RATTC', Role: 'Employee', EmployeeID: 8, OrderDate: new Date(8379738e5),
+ ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque', ShipAddress: '2817 Milton Dr.',
+ ShipRegion: 'NM', Mask: '6789', ShipPostalCode: '87110', ShipCountry: 'USA', Freight: 48.29, Verified: !0
+ }];
\ No newline at end of file
diff --git a/ej2-react/code-snippet/grid/detail-row-events/app/datasource.tsx b/ej2-react/code-snippet/grid/detail-row-events/app/datasource.tsx
new file mode 100644
index 000000000..542b4aca0
--- /dev/null
+++ b/ej2-react/code-snippet/grid/detail-row-events/app/datasource.tsx
@@ -0,0 +1,284 @@
+export let employeeData: Object[] = [{
+ 'EmployeeID': 1,
+ 'LastName': 'Davolio',
+ 'FirstName': 'Nancy',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Ms.',
+ 'BirthDate': new Date(-664743600000),
+ 'HireDate': new Date(704692800000),
+ 'Address': '507 - 20th Ave. E.\r\nApt. 2A',
+ 'City': 'Seattle',
+ 'Region': 'WA',
+ 'PostalCode': '98122',
+ 'Country': 'USA',
+ 'HomePhone': '(206) 555-9857',
+ 'Extension': '5467',
+ 'Photo': { 'Length': 21626 },
+
+ 'Notes': 'Education includes a BA in psychology from Colorado State University in 1970. She also completed\
+ \'The Art of the Cold Call.\' Nancy is a member of Toastmasters International.',
+ 'ReportsTo': 2,
+ 'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
+},
+{
+ 'EmployeeID': 2,
+ 'LastName': 'Fuller',
+ 'FirstName': 'Andrew',
+ 'Title': 'Vice President, Sales',
+ 'TitleOfCourtesy': 'Dr.',
+ 'BirthDate': new Date(-563828400000),
+ 'HireDate': new Date(713764800000),
+ 'Address': '908 W. Capital Way',
+ 'City': 'Tacoma',
+ 'Region': 'WA',
+ 'PostalCode': '98401',
+ 'Country': 'USA',
+ 'HomePhone': '(206) 555-9482',
+ 'Extension': '3457',
+ 'Photo': { 'Length': 21626 },
+
+ 'Notes': 'Andrew received his BTS commercial in 1974 and a Ph.D. in international marketing from the University of \
+ Dallas in 1981. He is fluent in French and Italian and reads German. He joined the company as a sales representative, \
+ was promoted to sales manager in January 1992 and to vice president of sales in March 1993. Andrew is a member of the \
+ Sales Management Roundtable, the Seattle Chamber of Commerce, and the Pacific Rim Importers Association.',
+ 'ReportsTo': 0,
+ 'PhotoPath': 'http://accweb/emmployees/fuller.bmp'
+},
+{
+ 'EmployeeID': 3,
+ 'LastName': 'Leverling',
+ 'FirstName': 'Janet',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Ms.',
+ 'BirthDate': new Date(-200088000000),
+ 'HireDate': new Date(702104400000),
+ 'Address': '722 Moss Bay Blvd.',
+ 'City': 'Kirkland',
+ 'Region': 'WA',
+ 'PostalCode': '98033',
+ 'Country': 'USA',
+ 'HomePhone': '(206) 555-3412',
+ 'Extension': '3355',
+ 'Photo': { 'Length': 21722 },
+
+ 'Notes': 'Janet has a BS degree in chemistry from Boston College (1984). \
+ She has also completed a certificate program in food retailing management.\
+ Janet was hired as a sales associate in 1991 and promoted to sales representative in February 1992.',
+ 'ReportsTo': 2,
+ 'PhotoPath': 'http://accweb/emmployees/leverling.bmp'
+},
+{
+ 'EmployeeID': 4,
+ 'LastName': 'Peacock',
+ 'FirstName': 'Margaret',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Mrs.',
+ 'BirthDate': new Date(-1018814400000),
+ 'HireDate': new Date(736401600000),
+ 'Address': '4110 Old Redmond Rd.',
+ 'City': 'Redmond',
+ 'Region': 'WA',
+ 'PostalCode': '98052',
+ 'Country': 'USA',
+ 'HomePhone': '(206) 555-8122',
+ 'Extension': '5176',
+ 'Photo': { 'Length': 21626 },
+
+ 'Notes': 'Margaret holds a BA in English literature from Concordia College (1958) and an MA from the American \
+ Institute of Culinary Arts (1966). She was assigned to the London office temporarily from July through November 1992.',
+ 'ReportsTo': 2,
+ 'PhotoPath': 'http://accweb/emmployees/peacock.bmp'
+},
+{
+ 'EmployeeID': 5,
+ 'LastName': 'Buchanan',
+ 'FirstName': 'Steven',
+ 'Title': 'Sales Manager',
+ 'TitleOfCourtesy': 'Mr.',
+ 'BirthDate': new Date(-468010800000),
+ 'HireDate': new Date(750830400000),
+ 'Address': '14 Garrett Hill',
+ 'City': 'London',
+ 'Region': null,
+ 'PostalCode':
+ 'SW1 8JR',
+ 'Country': 'UK',
+ 'HomePhone': '(71) 555-4848',
+ 'Extension': '3453',
+ 'Photo': { 'Length': 21626 },
+
+ 'Notes': 'Steven Buchanan graduated from St. Andrews University, Scotland, with a BSC degree in 1976. Upon joining the company as \
+ a sales representative in 1992, he spent 6 months in an orientation program at the Seattle office and then returned to his permanent \
+ post in London. He was promoted to sales manager in March 1993. Mr. Buchanan has completed the courses \'Successful \
+ Telemarketing\' and \'International Sales Management.\' He is fluent in French.',
+ 'ReportsTo': 2,
+ 'PhotoPath': 'http://accweb/emmployees/buchanan.bmp'
+},
+{
+ 'EmployeeID': 6,
+ 'LastName': 'Suyama',
+ 'FirstName': 'Michael',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Mr.',
+ 'BirthDate': new Date(-205185600000),
+ 'HireDate': new Date(750830400000),
+ 'Address': 'Coventry House\r\nMiner Rd.',
+ 'City': 'London',
+ 'Region': null,
+ 'PostalCode': 'EC2 7JR',
+ 'Country': 'UK',
+ 'HomePhone': '(71) 555-7773',
+ 'Extension': '428',
+ 'Photo': { 'Length': 21626 },
+
+ 'Notes': 'Michael is a graduate of Sussex University (MA, economics, 1983) and the University of California at Los Angeles \
+ (MBA, marketing, 1986). He has also taken the courses \'Multi-Cultural Selling\' and \'Time Management for the Sales Professional.\' \
+ He is fluent in Japanese and can read and write French, Portuguese, and Spanish.',
+ 'ReportsTo': 5,
+ 'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
+},
+{
+ 'EmployeeID': 7,
+ 'LastName': 'King',
+ 'FirstName': 'Robert',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Mr.',
+ 'BirthDate': new Date(-302731200000),
+ 'HireDate': new Date(757486800000),
+ 'Address': 'Edgeham Hollow\r\nWinchester Way',
+ 'City': 'London',
+ 'Region': null,
+ 'PostalCode': 'RG1 9SP',
+ 'Country': 'UK',
+ 'HomePhone': '(71) 555-5598',
+ 'Extension': '465',
+ 'Photo': { 'Length': 21626 },
+
+ 'Notes': 'Robert King served in the Peace Corps and traveled extensively before completing his degree in English at the \
+ University of Michigan in 1992, the year he joined the company. After completing a course entitled \'Selling in Europe,\' \
+ he was transferred to the London office in March 1993.',
+ 'ReportsTo': 5,
+ 'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
+},
+{
+ 'EmployeeID': 8,
+ 'LastName': 'Callahan',
+ 'FirstName': 'Laura',
+ 'Title': 'Inside Sales Coordinator',
+ 'TitleOfCourtesy': 'Ms.',
+ 'BirthDate': new Date(-377982000000),
+ 'HireDate': new Date(762843600000),
+ 'Address': '4726 - 11th Ave. N.E.',
+ 'City': 'Seattle',
+ 'Region': 'WA',
+ 'PostalCode': '98105',
+ 'Country': 'USA',
+ 'HomePhone': '(206) 555-1189',
+ 'Extension': '2344',
+ 'Photo': { 'Length': 21626 },
+
+ 'Notes': 'Laura received a BA in psychology from the University of Washington. She has also completed a course in business \
+ French. She reads and writes French.',
+ 'ReportsTo': 2,
+ 'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
+},
+{
+ 'EmployeeID': 9,
+ 'LastName': 'Dodsworth',
+ 'FirstName': 'Anne',
+ 'Title': 'Sales Representative',
+ 'TitleOfCourtesy': 'Ms.',
+ 'BirthDate': new Date(-123966000000),
+ 'HireDate': new Date(784875600000),
+ 'Address': '7 Houndstooth Rd.',
+ 'City': 'London',
+ 'Region': null,
+ 'PostalCode': 'WG2 7LT',
+ 'Country': 'UK',
+ 'HomePhone': '(71) 555-4444',
+ 'Extension': '452',
+ 'Photo': { 'Length': 21626 },
+
+ 'Notes': 'Anne has a BA degree in English from St. Lawrence College. She is fluent in French and German.',
+ 'ReportsTo': 5,
+ 'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
+}];
+
+
+export let data: Object[] = [
+ {
+ OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5, OrderDate: new Date(8364186e5),
+ ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims', ShipAddress: '59 rue de l Abbaye',
+ ShipRegion: 'CJ', Mask: '1111',ShipPostalCode: '51100', ShipCountry: 'France', Freight: 32.38, Verified: !0
+ },
+ {
+ OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6, OrderDate: new Date(836505e6),
+ ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress: 'Luisenstr. 48',
+ ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry: 'Germany', Freight: 11.61, Verified: !1
+ },
+ {
+ OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4, OrderDate: new Date(8367642e5),
+ ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress: 'Rua do Paço, 67',
+ ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876', ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
+ },
+ {
+ OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3, OrderDate: new Date(8367642e5),
+ ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2, rue du Commerce',
+ ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004', ShipCountry: 'France', Freight: 41.34, Verified: !0
+ },
+ {
+ OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 2, OrderDate: new Date(8368506e5),
+ ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress: 'Boulevard Tirou, 255',
+ ShipRegion: 'CJ', Mask: '5555', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium', Freight: 51.3, Verified: !0
+ },
+ {
+ OrderID: 10253, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 7, OrderDate: new Date(836937e6),
+ ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress: 'Rua do Paço, 67',
+ ShipRegion: 'RJ', Mask: '6666', ShipPostalCode: '05454-876', ShipCountry: 'Brazil', Freight: 58.17, Verified: !0
+ },
+ {
+ OrderID: 10254, CustomerID: 'CHOPS', Role: 'Employee', EmployeeID: 5, OrderDate: new Date(8370234e5),
+ ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress: 'Hauptstr. 31',
+ ShipRegion: 'CJ', Mask: '7777', ShipPostalCode: '3012', ShipCountry: 'Switzerland', Freight: 22.98, Verified: !1
+ },
+ {
+ OrderID: 10255, CustomerID: 'RICSU', Role: 'Admin', EmployeeID: 9, OrderDate: new Date(8371098e5),
+ ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress: 'Starenweg 5',
+ ShipRegion: 'CJ', Mask: '8888', ShipPostalCode: '1204', ShipCountry: 'Switzerland', Freight: 148.33, Verified: !0
+ },
+ {
+ OrderID: 10256, CustomerID: 'WELLI', Role: 'Employee', EmployeeID: 3, OrderDate: new Date(837369e6),
+ ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress: 'Rua do Mercado, 12',
+ ShipRegion: 'SP', Mask: '9999', ShipPostalCode: '08737-363', ShipCountry: 'Brazil', Freight: 13.97, Verified: !1
+ },
+ {
+ OrderID: 10257, CustomerID: 'HILAA', Role: 'Admin', EmployeeID: 4, OrderDate: new Date(8374554e5),
+ ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
+ ShipRegion: 'Táchira', Mask: '1234', ShipPostalCode: '5022', ShipCountry: 'Venezuela', Freight: 81.91, Verified: !0
+ },
+ {
+ OrderID: 10258, CustomerID: 'ERNSH', Role: 'Manager', EmployeeID: 1, OrderDate: new Date(8375418e5),
+ ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse 6',
+ ShipRegion: 'CJ', Mask: '2345', ShipPostalCode: '8010', ShipCountry: 'Austria', Freight: 140.51, Verified: !0
+ },
+ {
+ OrderID: 10259, CustomerID: 'CENTC', Role: 'Admin', EmployeeID: 4, OrderDate: new Date(8376282e5),
+ ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.', ShipAddress: 'Sierras de Granada 9993',
+ ShipRegion: 'CJ', Mask: '3456', ShipPostalCode: '05022', ShipCountry: 'Mexico', Freight: 3.25, Verified: !1
+ },
+ {
+ OrderID: 10260, CustomerID: 'OTTIK', Role: 'Admin', EmployeeID: 4, OrderDate: new Date(8377146e5),
+ ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress: 'Mehrheimerstr. 369',
+ ShipRegion: 'CJ', Mask: '4567', ShipPostalCode: '50739', ShipCountry: 'Germany', Freight: 55.09, Verified: !0
+ },
+ {
+ OrderID: 10261, CustomerID: 'QUEDE', Role: 'Manager', EmployeeID: 4, OrderDate: new Date(8377146e5),
+ ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress: 'Rua da Panificadora, 12',
+ ShipRegion: 'RJ', Mask: '5678', ShipPostalCode: '02389-673', ShipCountry: 'Brazil', Freight: 3.05, Verified: !1
+ },
+ {
+ OrderID: 10262, CustomerID: 'RATTC', Role: 'Employee', EmployeeID: 8, OrderDate: new Date(8379738e5),
+ ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque', ShipAddress: '2817 Milton Dr.',
+ ShipRegion: 'NM', Mask: '6789', ShipPostalCode: '87110', ShipCountry: 'USA', Freight: 48.29, Verified: !0
+ }
+];
\ No newline at end of file
diff --git a/ej2-react/code-snippet/grid/detail-row-events/app/index.tsx b/ej2-react/code-snippet/grid/detail-row-events/app/index.tsx
new file mode 100644
index 000000000..80b1b6ab0
--- /dev/null
+++ b/ej2-react/code-snippet/grid/detail-row-events/app/index.tsx
@@ -0,0 +1,5 @@
+import * as React from 'react';
+import * as ReactDOM from 'react-dom';
+import App from './App';
+
+ReactDOM.render(, document.getElementById('root'));
\ No newline at end of file
diff --git a/ej2-react/code-snippet/grid/detail-row-events/index.css b/ej2-react/code-snippet/grid/detail-row-events/index.css
new file mode 100644
index 000000000..e69de29bb
diff --git a/ej2-react/code-snippet/grid/detail-row-events/index.html b/ej2-react/code-snippet/grid/detail-row-events/index.html
new file mode 100644
index 000000000..944dacbb3
--- /dev/null
+++ b/ej2-react/code-snippet/grid/detail-row-events/index.html
@@ -0,0 +1,68 @@
+
+
+
+
+ Syncfusion React Grid
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The Rich Text Editor allows users to apply line-height (line-spacing) to elements like paragraphs, lists, headings, and table cells. You can set line height using a dedicated dropdown in the toolbar, and it is applied as inline style to the selected blocks. This feature makes text easier to read and gives better control over content layout.
Key features:
Provides a Line Height dropdown in the toolbar for easy access.
Supports applying line-height to paragraphs, headings, lists, and table cells.
Applies line-height as inline styles for consistent and precise text rendering.
Ensures consistent appearance across devices and print layouts.
Improves text readability and overall document aesthetics.
The Rich Text Editor allows users to apply line-height (line-spacing) to elements like paragraphs, lists, headings, and table cells. You can set line height using a dedicated dropdown in the toolbar, and it is applied as inline style to the selected blocks. This feature makes text easier to read and gives better control over content layout.
Key features:
Provides a Line Height dropdown in the toolbar for easy access.
Supports applying line-height to paragraphs, headings, lists, and table cells.
Applies line-height as inline styles for consistent and precise text rendering.
Ensures consistent appearance across devices and print layouts.
Improves text readability and overall document aesthetics.
The Rich Text Editor allows users to apply line-height (line-spacing) to elements like paragraphs, lists, headings, and table cells. You can set line height using a dedicated dropdown in the toolbar, and it is applied as inline style to the selected blocks. This feature makes text easier to read and gives better control over content layout.
Key features:
Provides a Line Height dropdown in the toolbar for easy access.
Supports applying line-height to paragraphs, headings, lists, and table cells.
Applies line-height as inline styles for consistent and precise text rendering.
Ensures consistent appearance across devices and print layouts.
Improves text readability and overall document aesthetics.
The Rich Text Editor allows users to apply line-height (line-spacing) to elements like paragraphs, lists, headings, and table cells. You can set line height using a dedicated dropdown in the toolbar, and it is applied as inline style to the selected blocks. This feature makes text easier to read and gives better control over content layout.
Key features:
Provides a Line Height dropdown in the toolbar for easy access.
Supports applying line-height to paragraphs, headings, lists, and table cells.
Applies line-height as inline styles for consistent and precise text rendering.
Ensures consistent appearance across devices and print layouts.
Improves text readability and overall document aesthetics.
";
+
+ private toolbarSettings: object = {
+ items: ['LineHeight']
+ }
+
+ public render() {
+ return (
+
+
+
+ );
+ }
+}
+
+export default App;
\ No newline at end of file
diff --git a/ej2-react/code-snippet/rich-text-editor/line-height/app/index.tsx b/ej2-react/code-snippet/rich-text-editor/line-height/app/index.tsx
new file mode 100644
index 000000000..4b54648bc
--- /dev/null
+++ b/ej2-react/code-snippet/rich-text-editor/line-height/app/index.tsx
@@ -0,0 +1,5 @@
+import * as React from 'react';
+import * as ReactDOM from 'react-dom';
+import App from './App';
+
+ReactDOM.render(, document.getElementById('sample'));
\ No newline at end of file
diff --git a/ej2-react/code-snippet/rich-text-editor/line-height/index.html b/ej2-react/code-snippet/rich-text-editor/line-height/index.html
new file mode 100644
index 000000000..3a2a71125
--- /dev/null
+++ b/ej2-react/code-snippet/rich-text-editor/line-height/index.html
@@ -0,0 +1,40 @@
+
+
+
+
+ Syncfusion React Rich Text Editor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
We are thrilled to have you with us! Your unique promotional code for this month is: {{PromoCode}}.
-
Your current subscription plan is: {{SubscriptionPlan}}.
-
Your customer ID is: {{CustomerID}}.
-
Your promotional code expires on: {{ExpirationDate}}.
-
Feel free to browse our latest offerings and updates. If you need any assistance, don't hesitate to contact us at {{SupportEmail}} or call us at {{SupportPhoneNumber}}.
We are thrilled to have you with us! Your unique promotional code for this month is: {{PromoCode}}.
+
Your current subscription plan is: {{SubscriptionPlan}}.
+
Your customer ID is: {{CustomerID}}.
+
Your promotional code expires on: {{ExpirationDate}}.
+
Feel free to browse our latest offerings and updates. If you need any assistance, don't hesitate to contact us at {{SupportEmail}} or call us at {{SupportPhoneNumber}}.
We are thrilled to have you with us! Your unique promotional code for this month is: {{PromoCode}}.
+
Your current subscription plan is: {{SubscriptionPlan}}.
+
Your customer ID is: {{CustomerID}}.
+
Your promotional code expires on: {{ExpirationDate}}.
+
Feel free to browse our latest offerings and updates. If you need any assistance, don't hesitate to contact us at {{SupportEmail}} or call us at {{SupportPhoneNumber}}.
+ );
+ }
+}
+
+export default App;
\ No newline at end of file
diff --git a/ej2-react/code-snippet/rich-text-editor/mail-merge-cs3/app/App.tsx b/ej2-react/code-snippet/rich-text-editor/mail-merge-cs3/app/App.tsx
new file mode 100644
index 000000000..2adb969fd
--- /dev/null
+++ b/ej2-react/code-snippet/rich-text-editor/mail-merge-cs3/app/App.tsx
@@ -0,0 +1,181 @@
+{% raw %}
+import { RichTextEditorComponent, Inject, IToolbarItems, HtmlEditor, Toolbar, ToolbarSettingsModel, Image, Link, NodeSelection, QuickToolbar, ActionCompleteEventArgs, ActionBeginEventArgs, Table, PasteCleanup } from '@syncfusion/ej2-react-richtexteditor';
+import { DropDownButtonComponent } from '@syncfusion/ej2-react-splitbuttons';
+import { MentionComponent, FieldsModel } from '@syncfusion/ej2-react-dropdowns';
+import * as React from 'react';
+
+class App extends React.Component<{}, {}> {
+ private rteObj: RichTextEditorComponent | null = null;
+ private mentionObj: MentionComponent | null = null;
+ private range: Range = new Range();
+ private selection: NodeSelection = new NodeSelection();
+ private saveSelection: any = null;
+
+ private value: string = `
Dear {{FirstName}}{{LastName}},
+
We are thrilled to have you with us! Your unique promotional code for this month is: {{PromoCode}}.
+
Your current subscription plan is: {{SubscriptionPlan}}.
+
Your customer ID is: {{CustomerID}}.
+
Your promotional code expires on: {{ExpirationDate}}.
+
Feel free to browse our latest offerings and updates. If you need any assistance, don't hesitate to contact us at {{SupportEmail}} or call us at {{SupportPhoneNumber}}.
We are thrilled to have you with us! Your unique promotional code for this month is: {{PromoCode}}.
+
Your current subscription plan is: {{SubscriptionPlan}}.
+
Your customer ID is: {{CustomerID}}.
+
Your promotional code expires on: {{ExpirationDate}}.
+
Feel free to browse our latest offerings and updates. If you need any assistance, don't hesitate to contact us at {{SupportEmail}} or call us at {{SupportPhoneNumber}}.
);
+}
+export default App;
\ No newline at end of file
diff --git a/ej2-react/code-snippet/rich-text-editor/mail-merge-cs4/app/App.tsx b/ej2-react/code-snippet/rich-text-editor/mail-merge-cs4/app/App.tsx
new file mode 100644
index 000000000..7ac98b976
--- /dev/null
+++ b/ej2-react/code-snippet/rich-text-editor/mail-merge-cs4/app/App.tsx
@@ -0,0 +1,179 @@
+import { HtmlEditor, Image, Inject, IToolbarItems, Link, QuickToolbar, RichTextEditorComponent, ToolbarSettingsModel, Toolbar, NodeSelection, ActionCompleteEventArgs, ActionBeginEventArgs, Table, PasteCleanup } from '@syncfusion/ej2-react-richtexteditor';
+import * as React from 'react';
+import { DropDownButtonComponent, MenuEventArgs } from '@syncfusion/ej2-react-splitbuttons';
+import { MentionComponent } from '@syncfusion/ej2-react-dropdowns';
+
+function App() {
+ let value: string = `
Dear {{FirstName}}{{LastName}},
+
We are thrilled to have you with us! Your unique promotional code for this month is: {{PromoCode}}.
+
Your current subscription plan is: {{SubscriptionPlan}}.
+
Your customer ID is: {{CustomerID}}.
+
Your promotional code expires on: {{ExpirationDate}}.
+
Feel free to browse our latest offerings and updates. If you need any assistance, don't hesitate to contact us at {{SupportEmail}} or call us at {{SupportPhoneNumber}}.
The Markdown Auto-Format feature automatically converts Markdown syntax into clean, semantic HTML within the Rich Text Editor. This capability streamlines content creation by allowing you to write using familiar Markdown patterns while ensuring consistent HTML output.
+
When enabled, the editor supports both inline formatting (such as bold and italic) and block-level elements (such as headings and lists). As you type, Markdown syntax is instantly transformed into its corresponding HTML tags, delivering a smooth and efficient editing experience.
+
It also supports checklists and to-do lists, allowing you to create interactive task lists using simple Markdown syntax.
The Markdown Auto-Format feature automatically converts Markdown syntax into clean, semantic HTML within the Rich Text Editor. This capability streamlines content creation by allowing you to write using familiar Markdown patterns while ensuring consistent HTML output.
+
When enabled, the editor supports both inline formatting (such as bold and italic) and block-level elements (such as headings and lists). As you type, Markdown syntax is instantly transformed into its corresponding HTML tags, delivering a smooth and efficient editing experience.
+
It also supports checklists and to-do lists, allowing you to create interactive task lists using simple Markdown syntax.
`;
+
+ public render() {
+ return (
+
+
+
+ );
+ }
+}
+
+export default App;
\ No newline at end of file
diff --git a/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs1/app/index.tsx b/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs1/app/index.tsx
new file mode 100644
index 000000000..4b54648bc
--- /dev/null
+++ b/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs1/app/index.tsx
@@ -0,0 +1,5 @@
+import * as React from 'react';
+import * as ReactDOM from 'react-dom';
+import App from './App';
+
+ReactDOM.render(, document.getElementById('sample'));
\ No newline at end of file
diff --git a/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs1/index.html b/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs1/index.html
new file mode 100644
index 000000000..727a3d4ed
--- /dev/null
+++ b/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs1/index.html
@@ -0,0 +1,46 @@
+
+
+
+
+ Syncfusion React RichTextEditor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The Markdown Auto-Format feature automatically converts Markdown syntax into clean, semantic HTML within the Rich Text Editor. This capability streamlines content creation by allowing you to write using familiar Markdown patterns while ensuring consistent HTML output.
+
When enabled, the editor supports both inline formatting (such as bold and italic) and block-level elements (such as headings and lists). As you type, Markdown syntax is instantly transformed into its corresponding HTML tags, delivering a smooth and efficient editing experience.
+
It also supports checklists and to-do lists, allowing you to create interactive task lists using simple Markdown syntax.
`;
+
+ return (
+
+ );
+}
+export default App;
diff --git a/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs2/app/App.tsx b/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs2/app/App.tsx
new file mode 100644
index 000000000..bc28069a8
--- /dev/null
+++ b/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs2/app/App.tsx
@@ -0,0 +1,19 @@
+import { HtmlEditor, Image, Inject, Link, QuickToolbar, RichTextEditorComponent, Toolbar, AutoFormat } from '@syncfusion/ej2-react-richtexteditor';
+import * as React from 'react';
+
+function App() {
+
+ let rteValue:string = `
Markdown Auto-Format
+
The Markdown Auto-Format feature automatically converts Markdown syntax into clean, semantic HTML within the Rich Text Editor. This capability streamlines content creation by allowing you to write using familiar Markdown patterns while ensuring consistent HTML output.
+
When enabled, the editor supports both inline formatting (such as bold and italic) and block-level elements (such as headings and lists). As you type, Markdown syntax is instantly transformed into its corresponding HTML tags, delivering a smooth and efficient editing experience.
+
It also supports checklists and to-do lists, allowing you to create interactive task lists using simple Markdown syntax.
`;
+
+ return (
+
+
+
+ );
+
+}
+
+export default App;
\ No newline at end of file
diff --git a/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs2/app/index.tsx b/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs2/app/index.tsx
new file mode 100644
index 000000000..4b54648bc
--- /dev/null
+++ b/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs2/app/index.tsx
@@ -0,0 +1,5 @@
+import * as React from 'react';
+import * as ReactDOM from 'react-dom';
+import App from './App';
+
+ReactDOM.render(, document.getElementById('sample'));
\ No newline at end of file
diff --git a/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs2/index.html b/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs2/index.html
new file mode 100644
index 000000000..727a3d4ed
--- /dev/null
+++ b/ej2-react/code-snippet/rich-text-editor/markdown-autoformat-cs2/index.html
@@ -0,0 +1,46 @@
+
+
+
+
+ Syncfusion React RichTextEditor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-react/code-snippet/treegrid/selection-cs10/systemjs.config.js b/ej2-react/code-snippet/treegrid/selection-cs10/systemjs.config.js
new file mode 100644
index 000000000..a39a70d4a
--- /dev/null
+++ b/ej2-react/code-snippet/treegrid/selection-cs10/systemjs.config.js
@@ -0,0 +1,58 @@
+System.config({
+ transpiler: "ts",
+ typescriptOptions: {
+ target: "es5",
+ module: "system",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true,
+ "jsx": "react"
+ },
+ meta: {
+ 'typescript': {
+ "exports": "ts"
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ app: 'app',
+ ts: "https://unpkg.com/plugin-typescript@4.0.10/lib/plugin.js",
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+ "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-treegrid": "syncfusion:ej2-treegrid/dist/ej2-treegrid.umd.min.js",
+ "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js",
+ "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-pdf-export": "syncfusion:ej2-pdf-export/dist/ej2-pdf-export.umd.min.js",
+ "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.umd.min.js",
+ "@syncfusion/ej2-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-react-base": "syncfusion:ej2-react-base/dist/ej2-react-base.umd.min.js",
+ "@syncfusion/ej2-react-grids": "syncfusion:ej2-react-grids/dist/ej2-react-grids.umd.min.js",
+ "@syncfusion/ej2-react-buttons": "syncfusion:ej2-react-buttons/dist/ej2-react-buttons.umd.min.js",
+ "@syncfusion/ej2-react-treegrid": "syncfusion:ej2-react-treegrid/dist/ej2-react-treegrid.umd.min.js",
+ "@syncfusion/ej2-react-inputs": "syncfusion:ej2-react-inputs/dist/ej2-react-inputs.umd.min.js",
+"react-dom":"https://unpkg.com/react-dom@16.3.1/umd/react-dom.development.js",
+"react":"https://unpkg.com/react@16.3.1/umd/react.development.js",
+
+ },
+ packages: {
+ 'app': { main: 'index', defaultExtension: 'tsx' },
+ }
+
+});
+
+System.import('app');
+
+
+
diff --git a/ej2-react/code-snippet/uploader/external-click-cs1/app/index.jsx b/ej2-react/code-snippet/uploader/external-click-cs1/app/index.jsx
index fb8881cfc..b379c7aa2 100644
--- a/ej2-react/code-snippet/uploader/external-click-cs1/app/index.jsx
+++ b/ej2-react/code-snippet/uploader/external-click-cs1/app/index.jsx
@@ -1,4 +1,3 @@
-{% raw %}
import { select } from '@syncfusion/ej2-base';
import { UploaderComponent } from '@syncfusion/ej2-react-inputs';
import * as React from 'react';
@@ -22,5 +21,4 @@ export default class App extends React.Component {
);
}
}
-ReactDOM.render(, document.getElementById('fileupload'));
-{% endraw %}
\ No newline at end of file
+ReactDOM.render(, document.getElementById('fileupload'));
\ No newline at end of file
diff --git a/ej2-react/code-snippet/uploader/external-click-cs1/app/index.tsx b/ej2-react/code-snippet/uploader/external-click-cs1/app/index.tsx
index 7fabebcbb..ac5ea2724 100644
--- a/ej2-react/code-snippet/uploader/external-click-cs1/app/index.tsx
+++ b/ej2-react/code-snippet/uploader/external-click-cs1/app/index.tsx
@@ -1,6 +1,3 @@
-{% raw %}
-
-
import { select } from '@syncfusion/ej2-base';
import { UploaderComponent } from '@syncfusion/ej2-react-inputs';
import * as React from 'react';
@@ -28,7 +25,4 @@ export default class App extends React.Component<{}, {}> {
}
}
-ReactDOM.render(, document.getElementById('fileupload'));
-
-
-{% endraw %}
\ No newline at end of file
+ReactDOM.render(, document.getElementById('fileupload'));
\ No newline at end of file
diff --git a/ej2-react/gantt/columns/column-headers.md b/ej2-react/gantt/columns/column-headers.md
index 5bc5e6b4e..a206fce05 100644
--- a/ej2-react/gantt/columns/column-headers.md
+++ b/ej2-react/gantt/columns/column-headers.md
@@ -14,7 +14,7 @@ The React Gantt component provides flexible options to manage and customize colu
## Set custom header text
-By default, column headers in the Gantt chart display the value defined in the [field](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#field) property. To customize the header title, use the [headerText](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#headertext) property within the column configuration. This allows you to define meaningful labels for each column as needed.
+By default, column headers in the Gantt chart display the value defined in the [field](https://ej2.syncfusion.com/react/documentation/api/gantt/column#field) property. To customize the header title, use the [headerText](https://ej2.syncfusion.com/react/documentation/api/gantt/column#headertext) property within the column configuration. This allows you to define meaningful labels for each column as needed.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -31,11 +31,11 @@ By default, column headers in the Gantt chart display the value defined in the [
{% previewsample "page.domainurl/code-snippet/gantt/columnheader-cs1" %}
> * The `headerText` property is optional. If not defined, the column's field value will be used as the header text by default.
-> * To apply custom HTML content to the header cell, use the [headerTemplate](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#headertemplate) property.
+> * To apply custom HTML content to the header cell, use the [headerTemplate](https://ej2.syncfusion.com/react/documentation/api/gantt/column#headertemplate) property.
## Customize header using template
-You can customize the column header in the Gantt chart using the [headerTemplate](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#headertemplate) property. This allows rendering custom HTML or React components within the header.
+You can customize the column header in the Gantt chart using the [headerTemplate](https://ej2.syncfusion.com/react/documentation/api/gantt/column#headertemplate) property. This allows rendering custom HTML or React components within the header.
In this example, custom elements are applied to both the **TaskName** and **Duration** column headers.
@@ -57,7 +57,7 @@ In this example, custom elements are applied to both the **TaskName** and **Dura
## Align header text
-You can align the column header text in the Syncfusion® React Gantt component using the [headerTextAlign](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#headertextalign) property. By default, the text is aligned to the **left**. The available alignment options are:
+You can align the column header text in the Syncfusion® React Gantt component using the [headerTextAlign](https://ej2.syncfusion.com/react/documentation/api/gantt/column#headertextalign) property. By default, the text is aligned to the **left**. The available alignment options are:
- **Left:** Aligns text to the left (default).
- **Center:** Aligns text to the center.
@@ -78,11 +78,11 @@ You can align the column header text in the Syncfusion* The `headerTextAlign` property only changes the alignment of the text in the column header, and not the content of the column. If you want to align both the column header and content, you can use the [textAlign](https://ej2.syncfusion.com/documentation/api/gantt/column/#textalign) property.
+>* The `headerTextAlign` property only changes the alignment of the text in the column header, and not the content of the column. If you want to align both the column header and content, you can use the [textAlign](https://ej2.syncfusion.com/documentation/api/gantt/column#textalign) property.
## Enable header text wrapping
-You can enable autowrap in the Syncfusion React Gantt component to allow cell content to wrap onto the next line when it exceeds the defined column width. This wrapping behavior is based on the whitespace between words. To activate this feature, set the `allowTextWrap` property to **true** and specify an appropriate column [width](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#width).
+You can enable autowrap in the Syncfusion React Gantt component to allow cell content to wrap onto the next line when it exceeds the defined column width. This wrapping behavior is based on the whitespace between words. To activate this feature, set the `allowTextWrap` property to **true** and specify an appropriate column [width](https://ej2.syncfusion.com/react/documentation/api/gantt/column#width).
The wrapping behavior is defined using the `textWrapSettings.wrapMode` property of the `treeGrid` object. Available options include:
@@ -92,7 +92,7 @@ The wrapping behavior is defined using the `textWrapSettings.wrapMode` property
> * If column width is not defined, autowrap adjusts based on the overall Gantt chart width.
> * Header text without white space may not wrap.
-> * If cell content includes HTML tags, autowrap may not function as expected. In such cases, use [headerTemplate](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#headertemplate) and [template](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#template) properties to customize the header and cell layout.
+> * If cell content includes HTML tags, autowrap may not function as expected. In such cases, use [headerTemplate](https://ej2.syncfusion.com/react/documentation/api/gantt/column#headertemplate) and [template](https://ej2.syncfusion.com/react/documentation/api/gantt/column#template) properties to customize the header and cell layout.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -151,7 +151,7 @@ Here is an example of how to change the header text of a column using the `getCo
**Changing the header text of all columns:**
-To modify the header text of all columns in the Gantt component, iterate through the columns collection and set the [headerText](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#headertext) property for each column. This approach ensures consistent customization across all headers.
+To modify the header text of all columns in the Gantt component, iterate through the columns collection and set the [headerText](https://ej2.syncfusion.com/react/documentation/api/gantt/column#headertext) property for each column. This approach ensures consistent customization across all headers.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
@@ -169,7 +169,7 @@ To modify the header text of all columns in the Gantt component, iterate through
## Rotate header text
-By default, header text in the Syncfusion® Gantt component is displayed horizontally. To rotate it vertically, diagonally, or at a custom angle, follow the steps below using the [customAttributes](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#customattributes) property of the column.
+By default, header text in the Syncfusion® Gantt component is displayed horizontally. To rotate it vertically, diagonally, or at a custom angle, follow the steps below using the [customAttributes](https://ej2.syncfusion.com/react/documentation/api/gantt/column#customattributes) property of the column.
**Step 1**: Create a CSS class with rotation styles.
@@ -219,7 +219,7 @@ By default, header text in the Syncfusion®
## Add custom tooltip to header
-You can display additional information in the Syncfusion® React Gantt component by adding custom tooltips to column headers. This is especially helpful when space is limited or when extra context is needed. To implement this, use the [beforeRender](https://ej2.syncfusion.com/react/documentation/api/gantt/#beforeRender) event of the `Tooltip` component. This event triggers before each header cell is rendered, allowing you to assign a custom tooltip dynamically.
+You can display additional information in the Syncfusion® React Gantt component by adding custom tooltips to column headers. This is especially helpful when space is limited or when extra context is needed. To implement this, use the [beforeRender](https://ej2.syncfusion.com/react/documentation/api/gantt#beforeRender) event of the `Tooltip` component. This event triggers before each header cell is rendered, allowing you to assign a custom tooltip dynamically.
The following example demonstrates how to use the `beforeRender` event to add a tooltip to a header cell:
@@ -237,7 +237,7 @@ The following example demonstrates how to use the `beforeRender` event to add a
{% previewsample "page.domainurl/code-snippet/gantt/columnheader-cs9" %}
-> * The [headerCellInfo](https://ej2.syncfusion.com/react/documentation/api/gantt/#headercellinfo) event can also be used to customize the header tooltip. This event is triggered for each header cell after it is rendered.
+> * The [headerCellInfo](https://ej2.syncfusion.com/react/documentation/api/gantt#headercellinfo) event can also be used to customize the header tooltip. This event is triggered for each header cell after it is rendered.
## Style header text
@@ -270,7 +270,7 @@ You can apply styles to Gantt component header cells using the **.e-headercell**
### Using property
-To customize the appearance of column headers in the Gantt component, use the [customAttributes](https://ej2.syncfusion.com/react/documentation/api/gantt/column/#customattributes) property. It accepts an object containing CSS class names that apply styles directly to header cells.
+To customize the appearance of column headers in the Gantt component, use the [customAttributes](https://ej2.syncfusion.com/react/documentation/api/gantt/column#customattributes) property. It accepts an object containing CSS class names that apply styles directly to header cells.
**Step 1:** Define a CSS class with the desired styles.
@@ -283,8 +283,10 @@ To customize the appearance of column headers in the Gantt component, use the [c
**Step 2:** Assign the class using `customAttributes` in the column definition.
-```ts
+```js
+{% raw %}
+{% endraw %}
```
{% tabs %}
diff --git a/ej2-react/gantt/columns/column-spanning.md b/ej2-react/gantt/columns/column-spanning.md
index d55d11b46..084ab9c05 100644
--- a/ej2-react/gantt/columns/column-spanning.md
+++ b/ej2-react/gantt/columns/column-spanning.md
@@ -12,7 +12,7 @@ domainurl: ##DomainURL##
The Syncfusion® React Gantt component supports **column spanning**, allowing adjacent cells to merge horizontally for improved layout clarity. This feature is useful for grouping related data or enhancing visual structure.
-To enable column spanning, use the [queryCellInfo](https://ej2.syncfusion.com/react/documentation/gantt/events#querycellinfo) event and set the [colSpan](https://ej2.syncfusion.com/react/documentation/api/gantt/queryCellInfoEventArgs/#colspan) property to define how many columns a cell should span.
+To enable column spanning, use the [queryCellInfo](https://ej2.syncfusion.com/react/documentation/gantt/events#querycellinfo) event and set the [colSpan](https://ej2.syncfusion.com/react/documentation/api/gantt/queryCellInfoEventArgs#colspan) property to define how many columns a cell should span.
In the following example, **Work** cells are spanned to improve visual clarity:
@@ -37,20 +37,18 @@ You can customize the border color of spanned cells using the [queryCellInfo](ht
The following example demonstrates how to change the border color of spanned cells:
{% tabs %}
-{% highlight ts tabtitle="app.component.ts" %}
-{% include code-snippet/gantt/columns/columnspan-cs2/src/app.component.ts %}
+{% highlight js tabtitle="index.jsx" %}
+{% include code-snippet/gantt/column-span-cs2/app/index.jsx %}
{% endhighlight %}
-
-{% highlight ts tabtitle="main.ts" %}
-{% include code-snippet/gantt/columns/columnspan-cs2/src/main.ts %}
+{% highlight ts tabtitle="index.tsx" %}
+{% include code-snippet/gantt/column-span-cs2/app/index.tsx %}
{% endhighlight %}
-
-{% highlight ts tabtitle="datasource.ts" %}
-{% include code-snippet/gantt/columns/columntype-cs1/src/data.ts %}
+{% highlight html tabtitle="index.html" %}
+{% include code-snippet/gantt/column-span-cs2/index.html %}
{% endhighlight %}
{% endtabs %}
-
-{% previewsample "page.domainurl/samples/gantt/columns/columnspan-cs2" %}
+
+{% previewsample "page.domainurl/code-snippet/gantt/column-span-cs2" %}
## Limitations
diff --git a/ej2-react/gantt/columns/wbs-column.md b/ej2-react/gantt/columns/wbs-column.md
index c1cd9c885..b294242c8 100644
--- a/ej2-react/gantt/columns/wbs-column.md
+++ b/ej2-react/gantt/columns/wbs-column.md
@@ -16,22 +16,22 @@ The Work Breakdown Structure (WBS) organizes project tasks hierarchically by ass
To enable WBS in the Gantt component:
-- **Enable WBS Codes**: Set [enableWBS](https://ej2.syncfusion.com/react/documentation/api/gantt/#enablewbs) to **true** to automatically generate unique task codes and define their predecessors.
-- **Auto-Update Codes**: Set [enableAutoWbsUpdate](https://ej2.syncfusion.com/react/documentation/api/gantt/#enableautowbsupdate) to **true** to maintain accurate WBS codes during operations such as sorting, editing, or drag-and-drop.
+- **Enable WBS Codes**: Set [enableWBS](https://ej2.syncfusion.com/react/documentation/api/gantt#enablewbs) to **true** to automatically generate unique task codes and define their predecessors.
+- **Auto-Update Codes**: Set [enableAutoWbsUpdate](https://ej2.syncfusion.com/react/documentation/api/gantt#enableautowbsupdate) to **true** to maintain accurate WBS codes during operations such as sorting, editing, or drag-and-drop.
{% tabs %}
{% highlight js tabtitle="index.jsx" %}
-{% include code-snippet/gantt/wbscolumn-cs1/app/index.jsx %}
+{% include code-snippet/gantt/wbs-column-cs1/app/index.jsx %}
{% endhighlight %}
{% highlight ts tabtitle="index.tsx" %}
-{% include code-snippet/gantt/wbscolumn-cs1/app/index.tsx %}
+{% include code-snippet/gantt/wbs-column-cs1/app/index.tsx %}
{% endhighlight %}
{% highlight html tabtitle="index.html" %}
-{% include code-snippet/gantt/wbscolumn-cs1/index.html %}
+{% include code-snippet/gantt/wbs-column-cs1/index.html %}
{% endhighlight %}
{% endtabs %}
-{% previewsample "page.domainurl/code-snippet/gantt/wbscolumn-cs1" %}
+{% previewsample "page.domainurl/code-snippet/gantt/wbs-column-cs1" %}
## Managing WBS code updates
diff --git a/ej2-react/grid/aggregates/group-and-caption-aggregate.md b/ej2-react/grid/aggregates/group-and-caption-aggregate.md
index c2e1d4cfe..dfdb001c4 100644
--- a/ej2-react/grid/aggregates/group-and-caption-aggregate.md
+++ b/ej2-react/grid/aggregates/group-and-caption-aggregate.md
@@ -10,10 +10,10 @@ domainurl: ##DomainURL##
# Group and caption aggregate in React Grid component
-Group footer and caption aggregates in the Syncfusion® React Grid component allow you to calculate aggregate values based on the current group items. These aggregate values can be displayed in the group footer cells and group caption cells, respectively. To achieve this, you can use the [groupFooterTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/aggregateColumn/#groupfootertemplate) and [groupCaptionTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/aggregateColumn/#groupcaptiontemplate) properties of the [AggregateColumnDirective](https://helpej2.syncfusion.com/react/documentation/api/grid/aggregateColumn).
+Group footer and caption aggregates in the Syncfusion® React Grid component allow you to calculate aggregate values based on the current group items. These aggregate values can be displayed in the group footer cells and group caption cells, respectively. To achieve this, you can use the [groupFooterTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/aggregateColumn#groupfootertemplate) and [groupCaptionTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/aggregateColumn#groupcaptiontemplate) properties of the [AggregateColumnDirective](https://helpej2.syncfusion.com/react/documentation/api/grid/aggregateColumn).
-> When working with group aggregates in Syncfusion® Grid, it is important to set the property [allowGrouping](https://helpej2.syncfusion.com/react/documentation/api/grid/column/#allowgrouping) of the [column](https://helpej2.syncfusion.com/react/documentation/api/grid/column) to **true**.
-> To maintain grouped columns in the grid after grouping, set [showGroupedColumn](https://helpej2.syncfusion.com/react/documentation/api/grid/groupSettings/#showgroupedcolumn) to **true**.
+> When working with group aggregates in Syncfusion® Grid, it is important to set the property [allowGrouping](https://helpej2.syncfusion.com/react/documentation/api/grid/column#allowgrouping) of the [column](https://helpej2.syncfusion.com/react/documentation/api/grid/column) to **true**.
+> To maintain grouped columns in the grid after grouping, set [showGroupedColumn](https://helpej2.syncfusion.com/react/documentation/api/grid/groupSettings#showgroupedcolumn) to **true**.
## Group footer aggregates
@@ -39,11 +39,11 @@ Here's an example that demonstrates how to use group footer aggregates in the Sy
{% previewsample "page.domainurl/code-snippet/grid/aggregate-group-cs1" %}
> * Use the template reference variable name as **#groupFooterTemplate** to specify the group footer template and as **#groupCaptionTemplate** to specify the group caption template.
-> * The aggregate values must be accessed inside the template using their corresponding [type](https://ej2.syncfusion.com/react/documentation/api/grid/aggregateColumn/#type) name.
+> * The aggregate values must be accessed inside the template using their corresponding [type](https://ej2.syncfusion.com/react/documentation/api/grid/aggregateColumn#type) name.
## Group caption aggregates
-Group caption aggregates are displayed in the caption cells of each group. These cells appear at the top of each group and provide a summary of the grouped data. To display group caption aggregates, you can use the [groupCaptionTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/aggregateColumn/#groupcaptiontemplate) property. This property allows you to define a template that will be used to display the aggregate values in the group caption cells.
+Group caption aggregates are displayed in the caption cells of each group. These cells appear at the top of each group and provide a summary of the grouped data. To display group caption aggregates, you can use the [groupCaptionTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/aggregateColumn#groupcaptiontemplate) property. This property allows you to define a template that will be used to display the aggregate values in the group caption cells.
Here's an example that demonstrates how to use group and caption aggregates in the Syncfusion® React Grid component:
@@ -65,11 +65,11 @@ Here's an example that demonstrates how to use group and caption aggregates in t
{% previewsample "page.domainurl/code-snippet/grid/aggregate-group-cs2" %}
> The group total summary in Syncfusion® Grid is calculated based on the current page records for each group by default.
-> If you require aggregates for all the data in the grid, you can enable the [disablePageWiseAggregates](https://helpej2.syncfusion.com/documentation/api/grid/groupSettings/#disablepagewiseaggregates) property.
+> If you require aggregates for all the data in the grid, you can enable the [disablePageWiseAggregates](https://helpej2.syncfusion.com/documentation/api/grid/groupSettings#disablepagewiseaggregates) property.
## Disable page wise aggregates for grouping
-In some cases, you may want to disable the page-wise aggregates for grouping in the Syncfusion® React Grid component. By default, when grouping is enabled with paging, the grid calculates the aggregates for each page separately. However, you can choose to disable this behavior and calculate aggregates for the entire grouped data instead. This can be achieved by setting the [disablePageWiseAggregates](https://helpej2.syncfusion.com/documentation/api/grid/groupSettings/#disablepagewiseaggregates) property to **true**.
+In some cases, you may want to disable the page-wise aggregates for grouping in the Syncfusion® React Grid component. By default, when grouping is enabled with paging, the grid calculates the aggregates for each page separately. However, you can choose to disable this behavior and calculate aggregates for the entire grouped data instead. This can be achieved by setting the [disablePageWiseAggregates](https://helpej2.syncfusion.com/documentation/api/grid/groupSettings#disablepagewiseaggregates) property to **true**.
{% tabs %}
{% highlight js tabtitle="App.jsx" %}
@@ -90,4 +90,4 @@ In some cases, you may want to disable the page-wise aggregates for grouping in
## See also
-* [How to format aggregate value in React grid](footer-aggregate.md#format-the-aggregate-value)
\ No newline at end of file
+* [How to format aggregate value in React grid](footer-aggregate#format-the-aggregate-value)
\ No newline at end of file
diff --git a/ej2-react/grid/global-local.md b/ej2-react/grid/global-local.md
index 5a82b0316..f39f4f68f 100644
--- a/ej2-react/grid/global-local.md
+++ b/ej2-react/grid/global-local.md
@@ -596,7 +596,7 @@ function App() {
(grid as GridComponent).enableRtl = !args.checked;
}
return (
-
+
grid = g} dataSource={data} locale='ar-AE' allowPaging={true} pageSettings={pageOptions} allowGrouping={true} allowSorting={true} allowReordering={true}
allowFiltering={true} editSettings={editSettings} toolbar={toolbar} enableRtl={true} showColumnChooser={true} showColumnMenu={true}>
diff --git a/ej2-react/grid/hierarchy-grid.md b/ej2-react/grid/hierarchy-grid.md
index b02344d50..5283684e5 100644
--- a/ej2-react/grid/hierarchy-grid.md
+++ b/ej2-react/grid/hierarchy-grid.md
@@ -12,7 +12,7 @@ domainurl: ##DomainURL##
The Hierarchy Grid in an React Grid component is typically used when you need to display hierarchical data in a tabular format with expandable and collapsible rows. It allows you to represent parent and child relationships within the grid, making it easier for you to navigate and understand the data.
-This feature can be enabled by utilizing the [childGrid](https://ej2.syncfusion.com/react/documentation/api/grid/#childgrid) and [childGrid.queryString](https://ej2.syncfusion.com/react/documentation/api/grid/#querystring) properties of the grid component.
+This feature can be enabled by utilizing the [childGrid](https://ej2.syncfusion.com/react/documentation/api/grid#childgrid) and [childGrid.queryString](https://ej2.syncfusion.com/react/documentation/api/grid#querystring) properties of the grid component.
To enable the Hierarchy Grid feature:
@@ -42,13 +42,13 @@ The following example demonstrates how to enable the hierarchy feature in the gr
{% previewsample "page.domainurl/code-snippet/grid/hierarchy-grid-cs1" %}
> * Grid supports n level of child grids.
-> * Hierarchical binding is not supported when [DetailTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/#detailtemplate) is enabled.
+> * Hierarchical binding is not supported when [DetailTemplate](https://ej2.syncfusion.com/react/documentation/api/grid#detailtemplate) is enabled.
## Bind hierarchy grid with different field
By default, the parent and child grids have the same field name to map and render a hierarchical grid. However, the component supports establishing a parent-child relationship between grids with different field names. This feature is beneficial when you want to create a parent-child relationship between grids but need to use distinct field names for mapping the data. As a result, you can easily establish the desired relationship between the parent and child grids, even with different field names for data mapping.
-By default, the parent and child grid relation is maintained using the [queryString](https://ej2.syncfusion.com/react/documentation/api/grid/#querystring) property, which requires the same field name for both grids. However, to achieve the parent and child relation with different fields, you need to modify the mapping value in the [load](https://ej2.syncfusion.com/react/documentation/api/grid/#load) event of child grid.
+By default, the parent and child grid relation is maintained using the [queryString](https://ej2.syncfusion.com/react/documentation/api/grid#querystring) property, which requires the same field name for both grids. However, to achieve the parent and child relation with different fields, you need to modify the mapping value in the [load](https://ej2.syncfusion.com/react/documentation/api/grid#load) event of child grid.
In the following example, the `load` event is utilized to customize the mapping value for the child grid. By accessing the `parentDetails` property and its **parentKeyFieldValue**, you can set the desired mapping value. The `parentRowData` property contains the data of the parent row, and by using the **EmployeeID** field name, you can extract the corresponding value from the parent row data.
@@ -100,7 +100,7 @@ The following example demonstrates how to render aggregates in a child grid to d
Expanding the child grid initially in the Syncfusion® React Grid component is helpful when you want to display the child rows of the hierarchical grid expanded by default upon grid load. This can be beneficial in scenarios where you want to provide immediate visibility into the hierarchical data without requiring you to manually expand each child row.
-To achieve this, you can use the [expand](https://ej2.syncfusion.com/react/documentation/api/grid/detailRow/#expand) method with the desired target index (number) in the [dataBound](https://ej2.syncfusion.com/react/documentation/api/grid/#databound) event of the grid.
+To achieve this, you can use the [expand](https://ej2.syncfusion.com/react/documentation/api/grid/detailRow#expand) method with the desired target index (number) in the [dataBound](https://ej2.syncfusion.com/react/documentation/api/grid#databound) event of the grid.
In the provided example, expand the third record of the grid by utilizing the `expand` method within the `dataBound` event.
@@ -127,7 +127,7 @@ In the provided example, expand the third record of the grid by utilizing the `e
Dynamically load child grid data in Syncfusion® React Grid helps improve performance, optimize data transmission, and enhance the your experience by providing on-demand access to relevant information. Additionally, it offers flexibility in data presentation, which helps improve the overall efficiency of your application.
-To dynamically load the `dataSource` of a child grid in the Grid, you can utilize the [load](https://ej2.syncfusion.com/react/documentation/api/grid/#load) event of parent grid. This event allows you to customize the loading behavior of the child grid based on the data of parent grid.
+To dynamically load the `dataSource` of a child grid in the Grid, you can utilize the [load](https://ej2.syncfusion.com/react/documentation/api/grid#load) event of parent grid. This event allows you to customize the loading behavior of the child grid based on the data of parent grid.
The following example demonstrates how to dynamically load child grid data using the `load` event.
@@ -152,7 +152,7 @@ The following example demonstrates how to dynamically load child grid data using
Dynamically binding data to a child grid based on the parent row data in the Syncfusion® React Grid component is useful when you want to display child grid data that is specific to each parent row. This feature allows for a dynamic and contextual representation of data within the child grid.
-To dynamically bind data to the child grid based on the parent row data instead of using the [queryString](https://ej2.syncfusion.com/react/documentation/api/grid/#querystring) property, you can utilize the [detailDataBound](https://ej2.syncfusion.com/react/documentation/api/grid/#detaildatabound) event of the grid. This event is triggered when expanding the child grid.
+To dynamically bind data to the child grid based on the parent row data instead of using the [queryString](https://ej2.syncfusion.com/react/documentation/api/grid#querystring) property, you can utilize the [detailDataBound](https://ej2.syncfusion.com/react/documentation/api/grid#detaildatabound) event of the grid. This event is triggered when expanding the child grid.
In the `detailDataBound` event handler, you can filter the child grid's dataSource based on the **EmployeeID** column value of the parent row data. This can be achieved by using the `DataManager` plugin and applying a filter to the child grid's dataSource. The filtered data can be assigned as the new dataSource for the child grid. This can be demonstrated by the following sample.
@@ -177,7 +177,7 @@ In the `detailDataBound` event handler, you can filter the child grid's dataSour
Adding a record in a child grid within the Syncfusion® React Grid component is useful when you want to provide the ability to add new records to the child grid. This feature allows you to input and save additional data specific to each parent row.
-To maintain the parent-child relationship in the Grid when adding a record to the child grid, you need to set the value for the `queryString` in the added data. This can be done using the [actionBegin](https://ej2.syncfusion.com/react/documentation/api/grid/#actionbegin) event.
+To maintain the parent-child relationship in the Grid when adding a record to the child grid, you need to set the value for the `queryString` in the added data. This can be done using the [actionBegin](https://ej2.syncfusion.com/react/documentation/api/grid#actionbegin) event.
In the following example, the parent and child grids are related by the **EmployeeID** field. To add a new record in the child grid, the **EmployeeID** field needs to be set with the value of the parent record's `queryString` in the `actionBegin` event.
@@ -202,9 +202,9 @@ In the following example, the parent and child grids are related by the **Employ
A template column in a child grid within the Syncfusion® React Grid component is valuable when you want to customize the appearance and functionality of specific columns in the child grid. It is useful for incorporating interactive elements, custom formatting, or complex data representation within specific columns of the child grid.
-To achieve this, you can utilize the [template](https://ej2.syncfusion.com/react/documentation/api/grid/column/#template) property of a column to display a custom element instead of a field value in the Grid. Template columns defined in the child grid will be null in the **ngOnInit** method, which means they will not be shown in the UI. They will be rendered after the entire HTML view rendering process, and you can access and utilize them in the **ngAfterViewInit** method to display the template columns in the child grid.
+To achieve this, you can utilize the [template](https://ej2.syncfusion.com/react/documentation/api/grid/column#template) property of a column to display a custom element instead of a field value in the Grid. Template columns defined in the child grid will be null in the **ngOnInit** method, which means they will not be shown in the UI. They will be rendered after the entire HTML view rendering process, and you can access and utilize them in the **ngAfterViewInit** method to display the template columns in the child grid.
-During the [load](https://ej2.syncfusion.com/react/documentation/api/grid/#load) event of the child grid, it is necessary to set the 'registeredTemplate' to empty. This action will remove any previously existing templates. By doing so, you gain the flexibility to dynamically apply templates to the grid's cells based on different conditions or requirements.
+During the [load](https://ej2.syncfusion.com/react/documentation/api/grid#load) event of the child grid, it is necessary to set the 'registeredTemplate' to empty. This action will remove any previously existing templates. By doing so, you gain the flexibility to dynamically apply templates to the grid's cells based on different conditions or requirements.
The following example demonstrates, how to show a custom image in the **Employee Image** column of the child grid by utilizing the `template` property of the column.
@@ -229,7 +229,7 @@ The following example demonstrates, how to show a custom image in the **Employee
Getting parent details in a child grid in an React Grid component is useful when you want to display and utilize information from the parent row within the child grid. This can be beneficial in scenarios where you need to provide additional context or perform calculations based on the parent row's data
-To achieve this, you can utilize the [created](https://ej2.syncfusion.com/react/documentation/api/grid/#created) event. This event is triggered when the child grid is created and can be used to handle the child grid.
+To achieve this, you can utilize the [created](https://ej2.syncfusion.com/react/documentation/api/grid#created) event. This event is triggered when the child grid is created and can be used to handle the child grid.
The following example demonstrates how to obtain parent details in a child grid using the `created` event. Within the `created` event, you can access the parent row data using `this.parentDetails.parentRowData` and display the desired details in the message.
@@ -331,7 +331,7 @@ export default App;
The Hierarchy Grid in the Syncfusion® React Grid component allows you to expand all child grid rows using an external button. This feature provides you with a convenient overview of all the hierarchical data within the grid, eliminating the need to manually expand each row individually.
-By default, Grid renders all child grid rows in collapsed state. To expand all child grid rows in the Grid using an external button, you can utilize the [expandAll](https://ej2.syncfusion.com/react/documentation/api/grid/detailRow/#expandall) method provided by the DetailRow module. Similarly, to collapse all grid rows, you can use the [collapseAll](https://ej2.syncfusion.com/react/documentation/api/grid/detailRow/#collapseall) method.
+By default, Grid renders all child grid rows in collapsed state. To expand all child grid rows in the Grid using an external button, you can utilize the [expandAll](https://ej2.syncfusion.com/react/documentation/api/grid/detailRow#expandall) method provided by the DetailRow module. Similarly, to collapse all grid rows, you can use the [collapseAll](https://ej2.syncfusion.com/react/documentation/api/grid/detailRow#collapseall) method.
The following example demonstrates how to expand and collapse the hierarchy grid using an external button click function.
@@ -359,7 +359,7 @@ The following example demonstrates how to expand and collapse the hierarchy grid
The Syncfusion® React Grid allows you to hide the expand/collapse icon in the parent row when there are no records in the child grid. However, in certain scenarios, you may want to hide the expand/collapse icon for parent rows that do not have any child records, providing a cleaner and more intuitive interface by eliminating unnecessary icons in empty parent rows.
-To achieve this, you can utilize the [rowDataBound](https://ej2.syncfusion.com/react/documentation/api/grid/#rowdatabound) event to hide the icon when there are no records in the child grid.
+To achieve this, you can utilize the [rowDataBound](https://ej2.syncfusion.com/react/documentation/api/grid#rowdatabound) event to hide the icon when there are no records in the child grid.
To hide the expand/collapse icon in parent row when no records in child grid, follow the given steps:
@@ -446,6 +446,35 @@ In the demo below, the expand/collapse icons have been changed to arrow-down and
{% previewsample "page.domainurl/code-snippet/grid/hierarchy-grid-icon" %}
+## Detail row events
+
+The Grid component provides the `detailExpand` and `detailCollapse` events, which are triggered when a detail row is about to expand or collapse. These events fire before the detail row actually expands or collapses, allowing you to control whether the action should proceed.
+
+`detailExpand` – This event is triggered before a detail row begins to expand. You can access the expansion details through the event arguments and optionally prevent the expansion by setting:
+`args.cancel = true`;
+
+`detailCollapse` – This event is triggered before a detail row begins to collapse. You can access the collapse details through the event arguments and optionally prevent the collapse by setting:
+`args.cancel = true`;
+
+In the example below, expansion is prevented for the **Nancy** row, and collapse is prevented for the **Andrew** row.
+
+{% tabs %}
+{% highlight js tabtitle="App.jsx" %}
+{% include code-snippet/grid/detail-row-events/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="App.tsx" %}
+{% include code-snippet/grid/detail-row-events/app/App.tsx %}
+{% endhighlight %}
+{% highlight js tabtitle="datasource.jsx" %}
+{% include code-snippet/grid/detail-row-events/app/datasource.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.tsx" %}
+{% include code-snippet/grid/detail-row-events/app/datasource.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/grid/detail-row-events" %}
+
## Customize the child grid
The Syncfusion® React Grid component offers various ways to customize the child grid appearance using both default CSS and custom themes. To access the child grid elements, you can use the **.e-detailcell** class selector, which targets the child grid.
diff --git a/ej2-react/grid/images/anomaly-detection.gif b/ej2-react/grid/images/anomaly-detection.gif
new file mode 100644
index 000000000..f01fc6204
Binary files /dev/null and b/ej2-react/grid/images/anomaly-detection.gif differ
diff --git a/ej2-react/grid/images/predictive-data.gif b/ej2-react/grid/images/predictive-data.gif
new file mode 100644
index 000000000..8a9c4b671
Binary files /dev/null and b/ej2-react/grid/images/predictive-data.gif differ
diff --git a/ej2-react/grid/images/semantic-search.gif b/ej2-react/grid/images/semantic-search.gif
new file mode 100644
index 000000000..8a721b7a9
Binary files /dev/null and b/ej2-react/grid/images/semantic-search.gif differ
diff --git a/ej2-react/grid/images/smart-grid-action.gif b/ej2-react/grid/images/smart-grid-action.gif
new file mode 100644
index 000000000..88fa6e064
Binary files /dev/null and b/ej2-react/grid/images/smart-grid-action.gif differ
diff --git a/ej2-react/grid/row/detail-template.md b/ej2-react/grid/row/detail-template.md
index e7e04bbe2..52f13ac2b 100644
--- a/ej2-react/grid/row/detail-template.md
+++ b/ej2-react/grid/row/detail-template.md
@@ -10,7 +10,7 @@ domainurl: ##DomainURL##
# Detail template in React Grid component
-The detail template in the Grid component allows you to display additional information about a specific row in the grid by expanding or collapsing detail content. This feature is useful when you need to show additional data or custom content that is specific to each row in the grid. You can use the [detailTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/#detailtemplate) property to define an HTML template for the detail row. This template can include any HTML element or React component that you want to display as detail content.
+The detail template in the Grid component allows you to display additional information about a specific row in the grid by expanding or collapsing detail content. This feature is useful when you need to show additional data or custom content that is specific to each row in the grid. You can use the [detailTemplate](https://ej2.syncfusion.com/react/documentation/api/grid#detailtemplate) property to define an HTML template for the detail row. This template can include any HTML element or React component that you want to display as detail content.
Here's an example of using the `detailTemplate` property in the grid component:
@@ -185,9 +185,9 @@ export default App;
The Grid component provides a powerful feature that allows you to render custom components inside the detail row. This feature is helpful when you need to add additional information or functionality for a specific row in the grid.
-To render a custom component inside the detail row, you need to define a template using the[detailTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/#detailtemplate) property and handle the [detailDataBound](https://ej2.syncfusion.com/react/documentation/api/grid/#detaildatabound) event.This template can include any HTML element or React component that you want to display as the detail content.
+To render a custom component inside the detail row, you need to define a template using the[detailTemplate](https://ej2.syncfusion.com/react/documentation/api/grid#detailtemplate) property and handle the [detailDataBound](https://ej2.syncfusion.com/react/documentation/api/grid#detaildatabound) event.This template can include any HTML element or React component that you want to display as the detail content.
-The `detailDataBound` event is an event that is triggered after a detail row is bound to data. This event provides an object of type [DetailDataBoundEventArgs](https://ej2.syncfusion.com/react/documentation/api/grid/detaildataboundeventargs/) as a parameter.
+The `detailDataBound` event is an event that is triggered after a detail row is bound to data. This event provides an object of type [DetailDataBoundEventArgs](https://ej2.syncfusion.com/react/documentation/api/grid/detaildataboundeventargs) as a parameter.
For example, to render grid inside the detail row, place an HTML div element as the `detailTemplate` and render the DIV element as grid component in the `detailDataBound` event.
@@ -212,7 +212,7 @@ For example, to render grid inside the detail row, place an HTML div element as
The Grid provides a feature that allows users to expand the detail row of a grid using an external button. By default, detail rows render in a collapsed state, but this feature enables users to view additional details associated with a particular row.
-To achieve expanding the detail row of a grid using an external button, you need to invoke the [expand](https://ej2.syncfusion.com/react/documentation/api/grid/detailRow/#expand) method provided by the **detailRowModule** object of the Syncfusion® Grid library. This method will expand the detail row of a specific grid row.
+To achieve expanding the detail row of a grid using an external button, you need to invoke the [expand](https://ej2.syncfusion.com/react/documentation/api/grid/detailRow#expand) method provided by the **detailRowModule** object of the Syncfusion® Grid library. This method will expand the detail row of a specific grid row.
Here is an example of how to use the `expand` method to expand a detail row:
@@ -602,4 +602,8 @@ Detail template is not supported with the following features:
* Row spanning
* Column spanning
* Lazy load grouping
-* State persistence
\ No newline at end of file
+* State persistence
+
+## See also
+
+* [Detail row events](../hierarchy-grid#detail-row-events)
\ No newline at end of file
diff --git a/ej2-react/grid/selection/check-box-selection.md b/ej2-react/grid/selection/check-box-selection.md
index bba6475ac..3bf8097de 100644
--- a/ej2-react/grid/selection/check-box-selection.md
+++ b/ej2-react/grid/selection/check-box-selection.md
@@ -12,7 +12,7 @@ domainurl: ##DomainURL##
Checkbox selection in the Grid component allows you to provide an option to select multiple records by using a checkbox in each row. This feature is particularly useful when you need to perform bulk actions or operations on selected records within the Grid.
-To render checkbox in each grid row, you need to use checkbox column with type as **checkbox** using column [type](https://ej2.syncfusion.com/react/documentation/api/grid/column/#type) property.
+To render checkbox in each grid row, you need to use checkbox column with type as **checkbox** using column [type](https://ej2.syncfusion.com/react/documentation/api/grid/column#type) property.
Here's an example of how to enable check box selection using `type` property in the Grid component:
@@ -33,12 +33,12 @@ Here's an example of how to enable check box selection using `type` property in
{% previewsample "page.domainurl/code-snippet/grid/selection-cs3" %}
-> By default selection is allowed by clicking a grid row or checkbox in that row. To allow selection only through checkbox, you can set [selectionSettings.checkboxOnly](https://ej2.syncfusion.com/react/documentation/api/grid/selectionSettings/#checkboxonly) property to **true**.
-> Selection can be persisted on all the operations using [selectionSettings.persistSelection](https://ej2.syncfusion.com/react/documentation/api/grid/selectionSettings/#persistselection) property. For persisting selection on the Grid, any one of the column should be defined as a primary key using [isPrimaryKey](https://ej2.syncfusion.com/react/documentation/api/grid/column/#isprimarykey) property.
+> By default selection is allowed by clicking a grid row or checkbox in that row. To allow selection only through checkbox, you can set [selectionSettings.checkboxOnly](https://ej2.syncfusion.com/react/documentation/api/grid/selectionSettings#checkboxonly) property to **true**.
+> Selection can be persisted on all the operations using [selectionSettings.persistSelection](https://ej2.syncfusion.com/react/documentation/api/grid/selectionSettings#persistselection) property. For persisting selection on the Grid, any one of the column should be defined as a primary key using [isPrimaryKey](https://ej2.syncfusion.com/react/documentation/api/grid/column#isprimarykey) property.
## Checkbox selection mode
-The checkbox selection mode in the Grid allows you to select rows either by clicking on checkboxes or by clicking on the rows themselves. This feature provides two types of checkbox selection modes that can be set using the [selectionSettings.checkboxMode](https://ej2.syncfusion.com/react/documentation/api/grid/selectionSettings/#checkboxmode) property. The available modes are:
+The checkbox selection mode in the Grid allows you to select rows either by clicking on checkboxes or by clicking on the rows themselves. This feature provides two types of checkbox selection modes that can be set using the [selectionSettings.checkboxMode](https://ej2.syncfusion.com/react/documentation/api/grid/selectionSettings#checkboxmode) property. The available modes are:
* **Default**: This is the default value of the `checkboxMode`. In this mode, you can select multiple rows by clicking rows one by one. When you click on a row, the checkbox associated with that row also switches to the 'checked' state.
* **ResetOnRowClick**: In `ResetOnRowClick` mode, when clicking on row it will reset previously selected row. Also you can perform multiple-selection in this mode by press and hold CTRL key and click the desired rows. To select range of rows, press and hold the SHIFT key and click the rows.
@@ -126,7 +126,7 @@ export default App;
You can hide the select all checkbox in the column header of the Syncfusion® Grid. This is a useful feature in various scenarios where you want to customize the appearance and behavior of the checkboxes within the grid.
-By default, when you set the column type as [checkbox](https://ej2.syncfusion.com/react/documentation/api/grid/column/#type), it renders a column with checkboxes for selection purposes. However, if you want to hide the header checkbox, you can achieve this by defining an empty [HeaderTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/column/#headertemplate) directive in the grid Column.
+By default, when you set the column type as [checkbox](https://ej2.syncfusion.com/react/documentation/api/grid/column#type), it renders a column with checkboxes for selection purposes. However, if you want to hide the header checkbox, you can achieve this by defining an empty [HeaderTemplate](https://ej2.syncfusion.com/react/documentation/api/grid/column#headertemplate) directive in the grid Column.
Here's an example of how to hide selectall checkbox in column header using empty `HeaderTemplate` directive in the Grid component:
@@ -151,7 +151,7 @@ Here's an example of how to hide selectall checkbox in column header using empty
The checkbox selection mode allows you to select rows either by clicking on checkboxes or by clicking on the rows themselves. However, there might be scenarios where you want to prevent specific rows from being selected based on certain conditions or business requirements.
-To achieve this, you can use the [rowDataBound](https://ej2.syncfusion.com/react/documentation/api/grid/#rowdatabound) event of the Grid. The `rowDataBound` event is triggered for each row after it is bound to the data source. In this event, you can check the row data and determine whether the row should be selectable or not. If you want to prevent the row from being selected, you can set the [isSelectable](https://ej2.syncfusion.com/react/documentation/api/grid/rowDataBoundEventArgs/#isselectable) argument of the event to **false**.
+To achieve this, you can use the [rowDataBound](https://ej2.syncfusion.com/react/documentation/api/grid#rowdatabound) event of the Grid. The `rowDataBound` event is triggered for each row after it is bound to the data source. In this event, you can check the row data and determine whether the row should be selectable or not. If you want to prevent the row from being selected, you can set the [isSelectable](https://ej2.syncfusion.com/react/documentation/api/grid/rowDataBoundEventArgs#isselectable) argument of the event to **false**.
In the following sample, the selection of specific rows has been prevented based on the `isSelectable` argument in the `rowDataBound` event.
@@ -236,13 +236,38 @@ export default App;
{% previewsample "page.domainurl/code-snippet/grid/selection-cs5" %}
+## Partial selection using isRowSelectable
+
+The `isRowSelectable` callback in Syncfusion's EJ2 Grid allows control over which rows users can select. It uses a simple callback that runs before the grid loads the data. This callback checks each row data and returns **true** if the row can be selected, or **false** for non-selectable rows.
+
+For local data, the callback checks all items just once when the grid first loads. For remote data, it only checks the rows shown on the current page when the grid first appears. It re-checks them every time an action occurs, such as changing pages, filtering, or sorting.
+
+In the example below, it prevents selection of rows with canceled orders.
+
+{% tabs %}
+{% highlight js tabtitle="App.jsx" %}
+{% include code-snippet/grid/prevent-checkbox-selection/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="App.tsx" %}
+{% include code-snippet/grid/prevent-checkbox-selection/app/App.tsx %}
+{% endhighlight %}
+{% highlight js tabtitle="datasource.jsx" %}
+{% include code-snippet/grid/prevent-checkbox-selection/app/datasource.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.tsx" %}
+{% include code-snippet/grid/prevent-checkbox-selection/app/datasource.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/grid/prevent-checkbox-selection" %}
+
## How to select single row in checkbox selection mode
The React Grid allows you to select only one row at a time within the Grid. This feature is particularly useful when you want to ensure that only a single row is selected, and any previous selections are cleared when a new row is selected.
-To achieve single-row selection in checkbox selection mode within the Grid, you can handle the [rowSelecting](https://ej2.syncfusion.com/react/documentation/api/grid/#rowselecting) event and use the [clearSelection](https://ej2.syncfusion.com/react/documentation/api/grid/#clearselection) method to clear any previous selections before selecting a new row. This ensures that only one row is selected at a time, and any prior selections are deselected when a new row is chosen.
+To achieve single-row selection in checkbox selection mode within the Grid, you can handle the [rowSelecting](https://ej2.syncfusion.com/react/documentation/api/grid#rowselecting) event and use the [clearSelection](https://ej2.syncfusion.com/react/documentation/api/grid#clearselection) method to clear any previous selections before selecting a new row. This ensures that only one row is selected at a time, and any prior selections are deselected when a new row is chosen.
-> When you set the [checkboxMode](https://ej2.syncfusion.com/react/documentation/api/grid/selectionSettings/#checkboxmode) property to **ResetOnRowClick**, it will reset the previously selected row when you click on a new row. Please note that this behavior applies to rows and not checkboxes, and it is the default behavior of the grid.
+> When you set the [checkboxMode](https://ej2.syncfusion.com/react/documentation/api/grid/selectionSettings#checkboxmode) property to **ResetOnRowClick**, it will reset the previously selected row when you click on a new row. Please note that this behavior applies to rows and not checkboxes, and it is the default behavior of the grid.
Here's an example of how to select a single row in checkbox selection mode using the `clearSelection` method along with the `rowSelecting` event:
@@ -265,7 +290,7 @@ Here's an example of how to select a single row in checkbox selection mode using
## Allow selection only through checkbox click
-By default, the Grid component allows selection by clicking either a grid row or the checkbox within that row. If you want to restrict selection so that it can only be done by clicking the checkboxes, you can set the [selectionSettings.checkboxOnly](https://ej2.syncfusion.com/react/documentation/api/grid/selectionSettings/#checkboxonly) property to **true**.
+By default, the Grid component allows selection by clicking either a grid row or the checkbox within that row. If you want to restrict selection so that it can only be done by clicking the checkboxes, you can set the [selectionSettings.checkboxOnly](https://ej2.syncfusion.com/react/documentation/api/grid/selectionSettings#checkboxonly) property to **true**.
Here's an example of how to enable selection only through checkbox click using `checkboxOnly` property:
diff --git a/ej2-react/grid/smart-grid/advanced-features.md b/ej2-react/grid/smart-grid/advanced-features.md
new file mode 100644
index 000000000..f0551b427
--- /dev/null
+++ b/ej2-react/grid/smart-grid/advanced-features.md
@@ -0,0 +1,94 @@
+---
+layout: post
+title: Smart Advanced Features in React Grid component | Syncfusion
+description: Learn here all about Smart Grid with Advanced Features in Syncfusion React Grid component of Syncfusion Essential JS 2 and more.
+control: Smart Grid
+platform: ej2-react
+documentation: ug
+domainurl: ##DomainURL##
+---
+
+# Smart AI with Syncfusion React Grid
+
+Easily integrate Syncfusion EJ2 React Grid with AI models (e.g., **OpenAI GPT-4o-mini**, **Azure OpenAI**) to enable predictive analysis, anomaly detection, and semantic filtering via natural language or data-driven prompts. This toolkit transforms your grid into an intelligent data explorer, predicting future values, spotting irregularities, and enabling semantic searches without exact keywords.
+
+## Predictive analysis
+
+Predictive analysis computes and fills missing or future values based on existing data patterns. To enable predictive analysis, add a button labeled **Calculate Grade** above the grid. When the user clicks this button, capture the grid's [dataSource](https://ej2.syncfusion.com/react/documentation/api/grid/index-default#datasource) and send it to your backend for predictive computation. The backend returns JSON object with predicted values for columns such as **Final Year GPA**, **Total GPA**, and **Total Grade**. Reveal these hidden columns using [showColumns](https://ej2.syncfusion.com/react/documentation/api/grid/index-default#showcolumns) and update rows using [setRowData](https://ej2.syncfusion.com/react/documentation/api/grid/index-default#setrowdata) with smooth animation for a better user experience. Apply conditional styling through the [queryCellInfo](https://ej2.syncfusion.com/react/documentation/api/grid/index-default#querycellinfo) event to highlight predicted values.
+
+{% tabs %}
+{% highlight ts tabtitle="Predictive-Data.tsx" %}
+{% include code-snippet/grid/predictive-data/predictive-data.tsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="App.tsx" %}
+{% include code-snippet/grid/predictive-data/App.tsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="Openai-Model.ts" %}
+{% include code-snippet/grid/predictive-data/openai-model.ts %}
+{% endhighlight %}
+{% highlight css tabtitle="App.css" %}
+{% include code-snippet/grid/predictive-data/App.css %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.ts" %}
+{% include code-snippet/grid/predictive-data/datasource.ts %}
+{% endhighlight %}
+{% endtabs %}
+
+The following screenshot represents the predictive analysis,
+
+
+
+## Anomaly detection using AI
+
+Anomaly detection identifies irregular or illogical entries and provides explanations for flagged records. To integrate anomaly detection, add a button labeled **Detect Anomaly Data**. When clicked, send the full dataset to the backend for anomaly detection. The backend returns JSON object containing **Anomaly FieldName** and **Anomaly Description**. Reveal the hidden **Anomaly Description** column using [showColumns](https://ej2.syncfusion.com/react/documentation/api/grid/index-default#showcolumns) and update affected rows using [setRowData](https://ej2.syncfusion.com/react/documentation/api/grid/index-default#setrowdata). Highlight flagged cells in red and display anomaly descriptions using the [queryCellInfo](https://ej2.syncfusion.com/react/documentation/api/grid/index-default#querycellinfo) event for clarity.
+
+{% tabs %}
+{% highlight ts tabtitle="Anomaly-Detection.tsx" %}
+{% include code-snippet/grid/anomaly-detection/anomaly-detection.tsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="App.tsx" %}
+{% include code-snippet/grid/anomaly-detection/App.tsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="Openai-Model.ts" %}
+{% include code-snippet/grid/anomaly-detection/openai-model.ts %}
+{% endhighlight %}
+{% highlight css tabtitle="App.css" %}
+{% include code-snippet/grid/anomaly-detection/App.css %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.ts" %}
+{% include code-snippet/grid/anomaly-detection/datasource.ts %}
+{% endhighlight %}
+{% endtabs %}
+
+The following screenshot represents the anomaly detection,
+
+
+
+## Semantic filtering
+
+Semantic filtering enables natural language search for semantically related records. To enable semantic filtering, compute text embeddings in advance for all records during component mount, either locally or via a backend service. Add a search input and a **Smart Search** button to the UI. When the user clicks the button, generate an embedding for the search term and compute similarity against stored vectors. Select records above a similarity threshold, build a dynamic OR predicate using `Predicate`, and apply it through `grid.query`.
+
+{% tabs %}
+{% highlight ts tabtitle="Semantic-Search.tsx" %}
+{% include code-snippet/grid/semantic-search/semantic-search.tsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="App.tsx" %}
+{% include code-snippet/grid/semantic-search/App.tsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="Embedding-Model.ts" %}
+{% include code-snippet/grid/semantic-search/embedding-model.ts %}
+{% endhighlight %}
+{% highlight ts tabtitle="Cosine-Similarity.ts" %}
+{% include code-snippet/grid/semantic-search/cosine-similarity.ts %}
+{% endhighlight %}
+{% highlight ts tabtitle="Openai-Model.ts" %}
+{% include code-snippet/grid/semantic-search/openai-model.ts %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.ts" %}
+{% include code-snippet/grid/semantic-search/datasource.ts %}
+{% endhighlight %}
+{% endtabs %}
+
+The following screenshot represents the semantic filtering,
+
+
\ No newline at end of file
diff --git a/ej2-react/grid/smart-grid/smart-grid.md b/ej2-react/grid/smart-grid/smart-grid.md
new file mode 100644
index 000000000..1bf3e672e
--- /dev/null
+++ b/ej2-react/grid/smart-grid/smart-grid.md
@@ -0,0 +1,173 @@
+---
+layout: post
+title: Smart Grid in React Grid component | Syncfusion
+description: Learn here all about Smart Grid in Syncfusion React Grid component of Syncfusion Essential JS 2 and more.
+control: Smart Grid
+platform: ej2-react
+documentation: ug
+domainurl: ##DomainURL##
+---
+
+# Smart AI with Syncfusion React Grid
+
+The AI Toolkit integrates natural language interaction into the EJ2 React Grid. By connecting the grid to a Large Language Model (LLM) such as **OpenAI GPT‑4o‑mini**, users can execute grid operations such as filtering, sorting, grouping, and pagination through simple text commands. Examples of grid operations:
+
+* "Find iPhone 15 Pro"
+* "Sort the Amount column from low to high"
+* "Group by Status column"
+* "Go to page 3"
+
+This feature is particularly valuable for enterprise applications where efficient and user-friendly data manipulation is essential.
+
+## How it works?
+
+The AI Toolkit uses a **strict prompt** and **JSON output** strategy to ensure reliable and secure grid manipulation. Here's the workflow:
+
+1. **User input:** The user enters a natural language query in the AI Assist panel.
+2. **Prompt construction:** The client builds a strong prompt that combines the user query, column metadata (including field names and known values), and strict rules enforcing JSON-only output.
+3. **LLM request:** The prompt is sent to a secure backend proxy (api/chat), which calls the LLM (e.g., GPT-4o-mini).
+4. **Response processing:** The LLM returns a JSON object containing operations like:
+```typescript
+{
+ "filter": [{ "field": "status", "operator": "equal", "value": "Pending" }],
+ "sort": [{ "field": "amount", "direction": "Ascending" }],
+ "group": [{ "field": "quantity" }],
+ "message": "Filtered by status = Pending, sorted by amount ascending and group by quantity."
+}
+```
+
+5. **Apply changes:** The grid state can be updated either by modifying properties directly or by using Syncfusion Grid APIs, based on the JSON response. After applying the changes, the grid should be refreshed to reflect the updated state. The following example demonstrates how to update the grid state using properties:
+
+```typescript
+ gridInstance.setProperties({
+ filterSettings: { columns: data.filter },
+ sortSettings = { columns: data.sort },
+ groupSettings = { columns: data.group },
+ pageSettings = { currentPage: data.page.pageNumber }
+ }, true);
+ gridInstance.refresh();
+```
+
+**Handle grid features**
+
+AI is capable of performing a wide range of data operations and manipulations based on the provided input. The following features are handled in this user guide for executing actions using AI:
+
+* Filtering – All Excel-style operators supported.
+* Sorting – Multi-column, ascending/descending.
+* Grouping – Group by one or more fields.
+* Paging – Navigate to specific pages.
+* Clearing – Remove filters, sorting, or grouping.
+
+## Integrate AI with grid
+
+To enable the AI Toolkit in your Syncfusion React Grid project, the following prerequisites must be satisfied:
+
+Step 1: Syncfusion React Grid installed and configured
+
+Follow the [getting started](https://ej2.syncfusion.com/react/documentation/grid/getting-started) to set up the grid in your application.
+
+Step 2: Include Syncfusion's AI assist toolbar
+
+Add the AI Assist toolbar component to your grid UI for AI interactions.
+
+```typescript
+ assistInstance = assist} toolbarSettings={toolbarSettings} promptRequest={onPromptRequest} promptSuggestionsHeader='Suggestions' responseItemTemplate={responseTemplate} >
+
+
+
+
+```
+
+Step 3: LLM API key
+
+Obtain an API key from your preferred Large Language Model provider, such as **OpenAI**, **Azure OpenAI**, or **Google Gemini**.
+
+Step 4: Backend proxy
+
+Implement a secure backend service to handle requests to the LLM API. This ensures your API key remains protected and allows you to apply rate limiting and security measures.
+
+Step 5: Basic HTTP knowledge
+
+Familiarity with making HTTP requests using fetch or axios is required for client-server communication.
+
+## Build the prompt
+
+The following prompt includes predefined rules to handle grid actions such as filtering, sorting, grouping, and pagination using **OpenAI GPT-4o-mini**. Similarly, you can create your own predefined rules to manage grid operations. To ensure consistency and machine-readability, use a strict template that enforces JSON-only output.
+
+```typescript
+Convert the following natural language query into a JSON object representing Syncfusion Query operations.
+
+ Rules:
+ - Output only the JSON object, with no extra text.
+ - Available columns: ${JSON.stringify(columns)}.
+ - Sort direction must be either "Ascending" or "Descending".
+
+ Action Handling:
+ - Include only actions explicitly mentioned in the query: filter, sort, page, group, clearFilter, clearSort, clearGroup.
+ - Supported filter operators: startswith, endswith, contains, doesnotstartwith, doesnotendwith, doesnotcontain, equal, notequal, greaterthan, greaterthanorequal, lessthan, lessthanorequal, isnull, isnotnull, isempty, isnotempty, between, in, notin.
+ - If the query involves only filtering, include only the "filter" key.
+ - If the query involves only sorting, include only the "sort" key.
+ - For clear actions:
+ - Use clearFilter: [] to clear all filters.
+ - Use clearSort: [] to clear all sorting.
+ - Use clearGroup: [] to clear all grouping.
+ - To clear specific fields, include them as arrays: clearFilter: ["field1"], clearSort: ["field2"], clearGroup: ["field3"].
+
+ Supported Operations:
+ - filter: [{ field, operator, value (array for "in"/"notin", otherwise single value), ignoreCase }]
+ - sort: [{ field, direction }] // columns not available return [].
+ - page: { pageNumber } // for page navigation not pagesize.
+ - group: [fields] - return group: [] if the columns not available.
+
+ Additional Requirement:
+ - sort/group/filter only by available columns.
+ - Include a "message" field describing the interpreted query action and expected behavior.
+ - Handled actions: paging, filtering, sorting, grouping.
+ - If the action is not handled by this schema, need to clearly explain the action not handled in this schema and how to achieve it in Syncfusion React Grid. Dont explain the JSON structure.
+ User Input: ${text}
+```
+
+## Apply grid actions
+
+Convert the AI-generated prompt result into JSON format and execute the grid action based on that result. When using your own prompt, ensure the response is returned in JSON format. Parse the JSON and apply the action to the grid as shown below:
+
+```typescript
+ let jsonResult = result;
+ if (result.indexOf("```json") !== -1) {
+ jsonResult = result.split("```json")[1].split("```")[0].trim();
+ }
+ let data;
+ data = JSON.parse(jsonResult);
+ executeGridAction(data, gridInstance);
+ assistInstance.addPromptResponse({ prompt: text, response: data });
+```
+
+The following code example demonstrates how to create a assistive grid to perform grid action using natural language.
+
+{% tabs %}
+{% highlight ts tabtitle="Grid.tsx" %}
+{% include code-snippet/grid/smart-grid/Grid.tsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="GridAction.tsx" %}
+{% include code-snippet/grid/smart-grid/GridAction.tsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="App.tsx" %}
+{% include code-snippet/grid/smart-grid/App.tsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="Service.tsx" %}
+{% include code-snippet/grid/smart-grid/Ai-service.ts %}
+{% endhighlight %}
+{% highlight ts tabtitle="Model.tsx" %}
+{% include code-snippet/grid/smart-grid/AIModel.tsx %}
+{% endhighlight %}
+{% highlight css tabtitle="App.css" %}
+{% include code-snippet/grid/smart-grid/App.css %}
+{% endhighlight %}
+{% highlight ts tabtitle="datasource.ts" %}
+{% include code-snippet/grid/smart-grid/datasource.ts %}
+{% endhighlight %}
+{% endtabs %}
+
+The following screenshot represents the assistive grid action,
+
+
\ No newline at end of file
diff --git a/ej2-react/image-editor/how-to/fit-to-width-and-height.md b/ej2-react/image-editor/how-to/fit-to-width-and-height.md
new file mode 100644
index 000000000..7c1925717
--- /dev/null
+++ b/ej2-react/image-editor/how-to/fit-to-width-and-height.md
@@ -0,0 +1,29 @@
+---
+layout: post
+title: Fit Image to Editor Width and Height in Image editor | Syncfusion
+description: Learn here all about How to Fit Image to Editor Width and Height in Image editor Component of Syncfusion Essential JS 2 and more.
+control: Fit Image to Editor Width and Height
+platform: ej2-react
+documentation: ug
+domainurl: ##DomainURL##
+---
+
+# Fit Image to Editor Width and Height
+
+The Image Editor's [`zoom`](https://ej2.syncfusion.com/react/documentation/api/image-editor/index-default#zoom) method to fit an image to the editor by width or height. Programmatically increase the zoom level until the image dimension matches the editor container's width or height.
+
+This example demonstrates scenarios that include buttons for fitting the image to its width (Fit Width) or height (Fit Height).
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/image-editor/default-cs11/app/app.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/image-editor/default-cs11/app/app.tsx %}
+{% endhighlight %}
+{% highlight html tabtitle="index.html" %}
+{% include code-snippet/image-editor/default-cs11/index.html %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/image-editor/default-cs11" %}
\ No newline at end of file
diff --git a/ej2-react/images/chart_elements.png b/ej2-react/images/chart_elements.png
new file mode 100644
index 000000000..b0492c47c
Binary files /dev/null and b/ej2-react/images/chart_elements.png differ
diff --git a/ej2-react/kanban/drag-and-drop.md b/ej2-react/kanban/drag-and-drop.md
index abef90867..2036c2426 100644
--- a/ej2-react/kanban/drag-and-drop.md
+++ b/ej2-react/kanban/drag-and-drop.md
@@ -21,7 +21,7 @@ The following drag and drop types are available in the Kanban board.
* Kanban to Kanban
* Kanban to External source and vice versa.
-> Dropped card position varies based on the [sortSettings](https://ej2.syncfusion.com/react/documentation/api/kanban/#sortsettings) property.
+> Dropped card position varies based on the [sortSettings](https://ej2.syncfusion.com/react/documentation/api/kanban#sortsettings) property.
## Internal drag and drop
@@ -32,7 +32,7 @@ Allows the user to drag and drop the cards within the kanban board. Based on thi
### Column drag and drop
-By default, all cards can be dragged and dropped across the columns and within the columns. You cannot drag and drop the cards when disabling the [allowDragAndDrop](https://ej2.syncfusion.com/react/documentation/api/kanban/#allowdraganddrop) property.
+By default, all cards can be dragged and dropped across the columns and within the columns. You cannot drag and drop the cards when disabling the [allowDragAndDrop](https://ej2.syncfusion.com/react/documentation/api/kanban#allowdraganddrop) property.
> You can prevent the drag or drop behavior of the particular column by disabling the `allowDrag` or `allowDrop` property.
> You can also control the flow of transition cards between the columns by using the `transitionColumns` property.
@@ -75,7 +75,7 @@ In the following example, disable the drag and drop behavior on the Kanban board
By default, Swimlane allows drag and drop across the columns within the swimlane row. Kanban does not allow dragging the cards across the swimlane rows.
-Enabling the [dragAndDrop](https://ej2.syncfusion.com/react/documentation/api/kanban/#allowdraganddrop) property allows you to drag the cards across the swimlane rows, which is specified inside the [swimlaneSettings](https://ej2.syncfusion.com/react/documentation/api/kanban/#swimlanesettings) property.
+Enabling the [dragAndDrop](https://ej2.syncfusion.com/react/documentation/api/kanban#allowdraganddrop) property allows you to drag the cards across the swimlane rows, which is specified inside the [swimlaneSettings](https://ej2.syncfusion.com/react/documentation/api/kanban#swimlanesettings) property.
`[Class-component]`
@@ -115,11 +115,11 @@ Allows the user to drag and drop the cards from one kanban to another kanban or
### Kanban to kanban
-Drag and drop the card from one kanban to another kanban and vice versa. This can be achieved by specifying the `externalDropId` property which is used to specify the id of the dropped kanban element and the [dragStop](https://ej2.syncfusion.com/react/documentation/api/kanban/#dragstop) event which is used to delete the card on dragged Kanban and add the card on dropped Kanban using the [deleteCard](https://ej2.syncfusion.com/react/documentation/api/kanban/#deletecard) and [addCard](https://ej2.syncfusion.com/react/documentation/api/kanban/#addcard) public methods.
+Drag and drop the card from one kanban to another kanban and vice versa. This can be achieved by specifying the `externalDropId` property which is used to specify the id of the dropped kanban element and the [dragStop](https://ej2.syncfusion.com/react/documentation/api/kanban#dragstop) event which is used to delete the card on dragged Kanban and add the card on dropped Kanban using the [deleteCard](https://ej2.syncfusion.com/react/documentation/api/kanban#deletecard) and [addCard](https://ej2.syncfusion.com/react/documentation/api/kanban#addcard) public methods.
> Before adding a card to dropped kanban, you can manually change the card data `headerField` when the same card data `headerField` is dropped to another Kanban.
-In the following example, Drag the card from one Kanban and drop it into another kanban using the [dragStop](https://ej2.syncfusion.com/react/documentation/api/kanban/#dragstop) event. In this event, remove the card from the dragged Kanban by using the [deleteCard](https://ej2.syncfusion.com/react/documentation/api/kanban/#deletecard) public method and add the card to the dropped Kanban by using the [addCard](https://ej2.syncfusion.com/react/documentation/api/kanban/#addcard) public method.
+In the following example, Drag the card from one Kanban and drop it into another kanban using the [dragStop](https://ej2.syncfusion.com/react/documentation/api/kanban#dragstop) event. In this event, remove the card from the dragged Kanban by using the [deleteCard](https://ej2.syncfusion.com/react/documentation/api/kanban#deletecard) public method and add the card to the dropped Kanban by using the [addCard](https://ej2.syncfusion.com/react/documentation/api/kanban#addcard) public method.
`[Class-component]`
@@ -157,7 +157,7 @@ In the following example, Drag the card from one Kanban and drop it into another
Drag the card from the Kanban board and drop it to the Treeview component and vice versa.
-In the following sample, remove the data from the Kanban board using the [deleteCard](https://ej2.syncfusion.com/react/documentation/api/kanban/#deletecard) public method and add to the Treeview component using the `addNodes` public method at Kanban [dragStop](https://ej2.syncfusion.com/react/documentation/api/kanban/#dragstop) event when dragging the card and dropping it to the Treeview component. Remove the data from Treeview using the `removeNodes` public method and add to Kanban board using the [openDialog](https://ej2.syncfusion.com/react/documentation/api/kanban/#opendialog) public method when dragging the list from the Treeview component and dropping it to the kanban board.
+In the following sample, remove the data from the Kanban board using the [deleteCard](https://ej2.syncfusion.com/react/documentation/api/kanban#deletecard) public method and add to the Treeview component using the `addNodes` public method at Kanban [dragStop](https://ej2.syncfusion.com/react/documentation/api/kanban#dragstop) event when dragging the card and dropping it to the Treeview component. Remove the data from Treeview using the `removeNodes` public method and add to Kanban board using the [openDialog](https://ej2.syncfusion.com/react/documentation/api/kanban#opendialog) public method when dragging the list from the Treeview component and dropping it to the kanban board.
`[Class-component]`
@@ -195,7 +195,7 @@ In the following sample, remove the data from the Kanban board using the [delete
Drag the card from the Kanban board and drop it to the Schedule component and vice versa.
-In the following sample, remove the data from the Kanban board using the [deleteCard](https://ej2.syncfusion.com/react/documentation/api/kanban/#deletecard) public method and add to the schedule component using the `addNodes` public method at Kanban [dragStop](https://ej2.syncfusion.com/react/documentation/api/kanban/#dragstop) event when dragging the card and dropping it to the Treeview component. Remove the data from Treeview using the `removeNodes` public method and add to Kanban board using the [addCard](https://ej2.syncfusion.com/react/documentation/api/kanban/#addcard) public method when dragging the list from the Treeview component and dropping it to the kanban board.
+In the following sample, remove the data from the Kanban board using the [deleteCard](https://ej2.syncfusion.com/react/documentation/api/kanban#deletecard) public method and add to the schedule component using the `addNodes` public method at Kanban [dragStop](https://ej2.syncfusion.com/react/documentation/api/kanban#dragstop) event when dragging the card and dropping it to the Treeview component. Remove the data from Treeview using the `removeNodes` public method and add to Kanban board using the [addCard](https://ej2.syncfusion.com/react/documentation/api/kanban#addcard) public method when dragging the list from the Treeview component and dropping it to the kanban board.
`[Class-component]`
@@ -211,7 +211,7 @@ In the following sample, remove the data from the Kanban board using the [delete
{% endhighlight %}
{% endtabs %}
-{% previewsample "page.domainurl/code-snippet/kanban/kanban-to-schedule-cs1" %}
+{% previewsample "page.domainurl/code-snippet/kanban/kanban-to-schedule-cs3" %}
`[Functional-component]`
@@ -227,4 +227,4 @@ In the following sample, remove the data from the Kanban board using the [delete
{% endhighlight %}
{% endtabs %}
-{% previewsample "page.domainurl/code-snippet/kanban/kanban-to-schedule-cs2" %}
\ No newline at end of file
+{% previewsample "page.domainurl/code-snippet/kanban/kanban-to-schedule-cs4" %}
\ No newline at end of file
diff --git a/ej2-react/kanban/virtual-scrolling.md b/ej2-react/kanban/virtual-scrolling.md
index 96dab224a..3f5a2c713 100644
--- a/ej2-react/kanban/virtual-scrolling.md
+++ b/ej2-react/kanban/virtual-scrolling.md
@@ -10,11 +10,11 @@ domainurl: ##DomainURL##
# Virtualization in React Kanban Component
-Kanban allows you to load a large amount of data without any performance degradation. This feature can be enabled by setting the [enableVirtualization](../api/kanban/#enablevirtualization) property in the Kanban to `true`.
+Kanban allows you to load a large amount of data without any performance degradation. This feature can be enabled by setting the [enableVirtualization](../api/kanban#enablevirtualization) property in the Kanban to `true`.
## Virtual scrolling
-Virtual scrolling optimizes data rendering within each column when using large datasets. Only a subset of cards that are visible and about to be loaded on the screen are rendered. The number of records displayed in the Kanban is determined implicitly by the height of the Kanban area and the card height. The [cardHeight](../api/kanban/#cardheight) property of Kanban can be used to set the cards' height in pixel value. By default, the card height will be `auto`.
+Virtual scrolling optimizes data rendering within each column when using large datasets. Only a subset of cards that are visible and about to be loaded on the screen are rendered. The number of records displayed in the Kanban is determined implicitly by the height of the Kanban area and the card height. The [cardHeight](../api/kanban#cardheight) property of Kanban can be used to set the cards' height in pixel value. By default, the card height will be `auto`.
When the Kanban column is scrolled, the virtual scrolling feature dynamically loads additional data on demand into view and unloads the data that is no longer visible.
@@ -32,7 +32,7 @@ When the Kanban column is scrolled, the virtual scrolling feature dynamically lo
{% endhighlight %}
{% endtabs %}
-{% previewsample "page.domainurl/code-snippet/kanban/virtual-scrolling-cs1" %}
+{% previewsample "page.domainurl/code-snippet/kanban/virtual-scrolling-cs3" %}
`[Functional-component]`
@@ -48,11 +48,11 @@ When the Kanban column is scrolled, the virtual scrolling feature dynamically lo
{% endhighlight %}
{% endtabs %}
-{% previewsample "page.domainurl/code-snippet/kanban/virtual-scrolling-cs2" %}
+{% previewsample "page.domainurl/code-snippet/kanban/virtual-scrolling-cs4" %}
### Configure the remote data service
-When the remote data is configured for the [dataSource](../api/kanban/#datasource), the service method will receive an additional `KanbanVirtualization` parameter to handle the initial data load for Kanban Virtualization.
+When the remote data is configured for the [dataSource](../api/kanban#datasource), the service method will receive an additional `KanbanVirtualization` parameter to handle the initial data load for Kanban Virtualization.
To handle Kanban virtual scrolling, the server-side code needs to handle the `Where` and `Take` queries differently using the `KanbanVirtualization` parameter. The following is the example code for handling Kanban virtualization's initial data load using the `KanbanVirtualization` parameter.
diff --git a/ej2-react/rich-text-editor/clipboard-cleanup.md b/ej2-react/rich-text-editor/clipboard-cleanup.md
new file mode 100644
index 000000000..c8e76c4a9
--- /dev/null
+++ b/ej2-react/rich-text-editor/clipboard-cleanup.md
@@ -0,0 +1,90 @@
+---
+layout: post
+title: Clipboard Cleanup in React Rich Text Editor component | Syncfusion
+description: Learn how to configure Clipboard Cleanup in the Syncfusion React Rich Text Editor component of Syncfusion Essential JS 2 and more.
+control: Clipboard cleanup
+platform: ej2-react
+documentation: ug
+domainurl: ##DomainURL##
+---
+
+# Clipboard Cleanup in React Rich Text Editor Component
+
+The Rich Text Editor supports automatic cleanup of clipboard content during copy (`Ctrl + C`) and cut (`Ctrl + X`) operations. When this feature is enabled, unwanted inline styles are automatically removed from the clipboard content while preserving important structural elements such as tables, lists, and images. You can enable this behavior using the [enableClipboardCleanup](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor#enableClipboardCleanup) property.
+
+> To use ClipboardCleanup feature, inject link module using the ``.
+
+When `enableClipboardCleanup` is set to `true`, copy and cut operations are intercepted to remove unwanted inline styles. When set to `false` the browser’s default copy and cut behavior applies.
+
+> For a cleaner editing experience, `enableClipboardCleanup` is `true` by default.
+
+`[Class-component]`
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/rich-text-editor/clipboard-cleanup-cs1/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/rich-text-editor/clipboard-cleanup-cs1/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/clipboard-cleanup-cs1" %}
+
+`[Functional-component]`
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/rich-text-editor/clipboard-cleanup-cs2/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/rich-text-editor/clipboard-cleanup-cs2/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/clipboard-cleanup-cs2" %}
+
+## Customizing Copied/Cut Content
+
+You can use the [beforeClipboardWrite](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor#beforeClipboardWrite) event, which fires before content is written to the clipboard during copy or cut operations. This event lets you to modify the HTML and plain-text representations of the content and also determine whether the action is a copy or a cut.
+
+In this example, the `beforeClipboardWrite` event is used to customize the selected content only during a copy operation, while the cut operation remains unaffected. To observe this behavior, try copying any text within the Rich Text Editor.
+
+`[Class-component]`
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/rich-text-editor/clipboard-cleanup-customize-cs1/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/rich-text-editor/clipboard-cleanup-customize-cs1/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/clipboard-cleanup-customize-cs1" %}
+
+`[Functional-component]`
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/rich-text-editor/clipboard-cleanup-customize-cs2/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/rich-text-editor/clipboard-cleanup-customize-cs2/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/clipboard-cleanup-customize-cs2" %}
+
+## Best Practices & Troubleshooting
+
+### Best Practices
+
+- Always include `ClipboardCleanup` in production application - it’s the #1 way to prevent style explosion.
+- Combine with Paste Cleanup module for even stricter incoming paste handling.
+- Use `beforeClipboardWrite` sparingly — heavy processing can slightly delay `Ctrl+C`.
+
+### Common Issues
+
+- “Copied content still has inline styles” → Confirm `ClipboardCleanup` is in providers.
+- “Event not firing” → Make sure you’re using the correct event name `beforeClipboardWrite` (camelCase in React).
diff --git a/ej2-react/rich-text-editor/import-and-export.md b/ej2-react/rich-text-editor/import-and-export.md
index 9e11045dd..d0e941473 100644
--- a/ej2-react/rich-text-editor/import-and-export.md
+++ b/ej2-react/rich-text-editor/import-and-export.md
@@ -14,7 +14,7 @@ domainurl: ##DomainURL##
The Rich Text Editor provides functionality to import content directly from Microsoft Word documents, preserving the original formatting and structure. This feature ensures a smooth transition of content from Word to the editor, maintaining elements such as headings, lists, tables, and text styles.
-To integrate an `ImportWord` option into the Rich Text Editor toolbar, you can add it as a custom toolbar [toolbarSettings.items](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor/toolbarSettings/#items) using the items property in toolbarSettings.
+To integrate an `ImportWord` option into the Rich Text Editor toolbar, you can add it as a custom toolbar [toolbarSettings.items](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor/toolbarSettings#items) using the items property in toolbarSettings.
The following example shows how to configure `ImportWord`:
@@ -44,7 +44,101 @@ The following example shows how to configure `ImportWord`:
{% previewsample "page.domainurl/code-snippet/rich-text-editor/import-cs2" %}
-Here’s how to handle the server-side action for importing content from Word.
+## Secure importing with authentication
+
+The Rich Text Editor provides functionality to import Word documents with authentication for secure importing.
+
+The [wordImporting](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor/index-default#wordimporting) event provides [UploadingEventArgs](https://ej2.syncfusion.com/react/documentation/api/uploader/uploadingeventargs) for secure Word file import. Use `currentRequest` to add authentication headers and `customFormData` to include extra parameters in the POST body along with the uploaded file. On the server, read headers and form data from the request to validate and process the import securely.
+
+`[Class-component]`
+
+```html
+import * as React from 'react';
+import { RichTextEditorComponent, Toolbar, Inject, Image, Link, HtmlEditor, QuickToolbar, Table, PasteCleanup, ImportExport, UploadingEventArgs } from '@syncfusion/ej2-react-richtexteditor';
+import { ToolbarSettingsModel, ImportWordModel } from '@syncfusion/ej2-react-richtexteditor';
+
+class App extends React.Component<{},{}> {
+ private hostUrl: string = 'https://services.syncfusion.com/react/production/';
+ private items: any = ['ImportWord']
+ private insertImageSettings: any = {
+ saveUrl: this.hostUrl + 'api/RichTextEditor/SaveFile',
+ removeUrl: this.hostUrl + 'api/RichTextEditor/DeleteFile',
+ path: this.hostUrl + 'RichTextEditor/'
+ }
+ private toolbarSettings: ToolbarSettingsModel = {
+ items: this.items
+ };
+ private importWord: ImportWordModel = {
+ serviceUrl: this.hostUrl + 'api/RichTextEditor/ImportFromWord',
+ };
+ private onWordImport = (args: UploadingEventArgs) => {
+ let accessToken = "Authorization_token";
+ // adding authorization header
+ args.currentRequest.setRequestHeader('Authorization', accessToken)
+ // adding custom form Data
+ args.customFormData = [{'userId': '1234'}];
+ };
+
+ render() {
+ return (
+
+ );
+}
+export default App;
+```
+Here’s how to handle the server-side action for importing content from Word with authentication.
```csharp
@@ -58,6 +152,10 @@ public class RichTextEditorController : Controller
[Route("ImportFromWord")]
public IActionResult ImportFromWord(IList UploadFiles)
{
+ // Read headers (e.g., Authorization)
+ var authorization = Request.Headers["Authorization"].ToString();
+ // Read custom form data (from args.customFormData)
+ var formData = Request.Form("userId").ToString();
string HtmlString = string.Empty;
if (UploadFiles != null)
{
@@ -114,7 +212,7 @@ public class RichTextEditorController : Controller
The Rich Text Editor's export functionality allows users to convert their edited content into PDF or Word documents with a single click, preserving all text styles, images, tables, and other formatting elements.
-You can add `ExportWord` and `ExportPdf` tools to the Rich Text Editor toolbar using the toolbarSettings [toolbarSettings.items](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor/toolbarSettings/#items) property.
+You can add `ExportWord` and `ExportPdf` tools to the Rich Text Editor toolbar using the toolbarSettings [toolbarSettings.items](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor/toolbarSettings#items) property.
The following example demonstrates how to configure the `ExportWord` and `ExportPdf` tools in the Rich Text Editor, facilitating the export of content into Word or PDF documents:
@@ -144,7 +242,157 @@ The following example demonstrates how to configure the `ExportWord` and `Export
{% previewsample "page.domainurl/code-snippet/rich-text-editor/export-cs2" %}
-Here’s how to handle the server-side action for exporting content to PDF and Microsoft Word
+## Secure exporting with authentication
+
+The Rich Text Editor provides functionality to export Word or PDF documents with authentication for secure exporting.
+
+The [documentExporting](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor/index-default#documentexporting) event provides `ExportingEventArgs` for secure export of Word or PDF files. Use `exportType` to identify the format, `currentRequest` to add authentication headers, and `customFormData` to send extra parameters in the POST body. On the server, read headers and custom data to validate and process the export securely.
+
+The following example demonstrates how to configure `documentExporting` for secure exporting:
+
+`[Class-component]`
+
+```html
+import * as React from 'react';
+import { RichTextEditorComponent, Toolbar, Inject, Image, Link, HtmlEditor, QuickToolbar, Table, PasteCleanup, ImportExport, UploadingEventArgs } from '@syncfusion/ej2-react-richtexteditor';
+import { ToolbarSettingsModel, ExportWordModel, ExportPdfModel } from '@syncfusion/ej2-react-richtexteditor';
+
+class App extends React.Component<{},{}> {
+
+ private hostUrl: string = 'https://services.syncfusion.com/react/production/';
+
+ // Rich Text Editor items list
+ private items: any = ['ExportWord', 'ExportPdf'];
+
+ private insertImageSettings: any = {
+ saveUrl: this.hostUrl + 'api/RichTextEditor/SaveFile',
+ removeUrl: this.hostUrl + 'api/RichTextEditor/DeleteFile',
+ path: this.hostUrl + 'RichTextEditor/'
+ }
+
+ //Rich Text Editor ToolbarSettings
+ private toolbarSettings: ToolbarSettingsModel = {
+ items: this.items
+ };
+
+ private exportWord: ExportWordModel = {
+ serviceUrl: this.hostUrl + 'api/RichTextEditor/ExportToDocx',
+ fileName: 'RichTextEditor.docx',
+ stylesheet: `
+ .e-rte-content {
+ font-size: 1em;
+ font-weight: 400;
+ margin: 0;
+ }
+ `
+ };
+
+ private exportPdf: ExportPdfModel = {
+ serviceUrl: 'https://ej2services.syncfusion.com/react/development/api/RichTextEditor/ExportToPdf',
+ fileName: 'RichTextEditor.pdf',
+ stylesheet: `
+ .e-rte-content{
+ font-size: 1em;
+ font-weight: 400;
+ margin: 0;
+ }
+ `
+ };
+
+ public onDocumentExporting = (args: ExportingEventArgs) => {
+ const accessToken = "Authorization_token";
+ // Specify export type (e.g., 'Pdf' or 'Word')
+ args.exportType = 'Pdf';
+ // Add authentication header
+ args.currentRequest = [{ Authorization: accessToken }];
+ // Add custom form data
+ args.customFormData = [{ userId: '1234' }, { exportMode: 'secure' }];
+ };
+
+ render() {
+ return (
+
+ );
+}
+export default App;
+```
+Here’s how to handle the server-side action for exporting content to PDF and Microsoft Word with authentication
```csharp
@@ -158,6 +406,10 @@ public class RichTextEditorController : Controller
[Route("ExportToPdf")]
public ActionResult ExportToPdf([FromBody] ExportParam args)
{
+ // Read headers (e.g., Authorization)
+ var authorization = Request.Headers["Authorization"].ToString();
+ // Read custom form data (from args.customFormData)
+ var formData = args.CustomFormData;
string htmlString = args.html;
if (htmlString == null && htmlString == "")
{
@@ -232,6 +484,8 @@ public class RichTextEditorController : Controller
public class ExportParam
{
public string html { get; set; }
+ // For receiving custom form data
+ public List> CustomFormData { get; set; }
}
}
diff --git a/ej2-react/rich-text-editor/module.md b/ej2-react/rich-text-editor/module.md
index 797029608..09f99f809 100644
--- a/ej2-react/rich-text-editor/module.md
+++ b/ej2-react/rich-text-editor/module.md
@@ -74,7 +74,9 @@ The following example demonstrates how to import and inject modules.
| `SlashMenu` | Injecting this module allows users to apply formats, open dialogs by typing "/" in the Rich Text Editor. |
| `ImportExport` | Injecting this module allows users to import content from Word documents into the Rich Text Editor and export the Rich Text Editor's content into Word and PDF files |
| `CodeBlock` | Injecting this module allows users to format the selected text as inline code, highlighting code snippets within the text in the Rich Text Editor. |
+| `AutoFormat` | Injecting this module automatically converts Markdown syntax into HTML as you type, supporting inline and block-level formatting for a seamless editing experience. |
| `Audio` | Injecting this module allows users to insert and manage audios in the Rich Text Editor. |
| `Video` | Injecting this module allows users to insert and manage videos in the Rich Text Editor. |
+| `ClipboardCleanup` | Injecting this module allows to automatically clean clipboard content during copy and cut—removing unwanted inline styles while preserving structure. |
These modules should be injected using the `` component inside the Rich Text Editor component.
\ No newline at end of file
diff --git a/ej2-react/rich-text-editor/selection.md b/ej2-react/rich-text-editor/selection.md
index 543d80d3b..81ae3d2a8 100644
--- a/ej2-react/rich-text-editor/selection.md
+++ b/ej2-react/rich-text-editor/selection.md
@@ -1,6 +1,6 @@
---
layout: post
-title: Text Selection Using Slider in React Rich Text Editor component | Syncfusion
+title: Selection in React Rich Text Editor component | Syncfusion
description: Learn how to select a character range using React Rich Text Editor component of Syncfusion Essential JS 2 and more.
platform: ej2-react
control: Text Selection
@@ -14,7 +14,129 @@ domainurl: ##DomainURL##
The Rich Text Editor supports character range-based text selection using the **Syncfusion Slider** component. This feature allows users to select a specific range of characters (e.g., 33–45) within the editor content, which is then automatically highlighted.
-This functionality is useful for scenarios where precise text selection is needed for operations such as copying, formatting, or analysis.
+### Adding a Slider for character range selection
+
+The Rich Text Editor can be integrated with the **Slider** component to enable precise character range-based text selection. The slider is configured in `range` type, allowing users to select a start and end index within the editor content. When the slider values change, the corresponding text range is highlighted automatically.
+
+This approach is particularly useful for scenarios where exact character-level selection is required for operations such as copying, formatting, or analysis.
+
+```ts
+function App() {
+ const [sliderValue, setSliderValue] = useState<[number, number]>([0, 50]);
+ const [maxLength, setMaxLength] = useState(400);
+ return (
+
+ );
+}
+
+export default App;
+```
+### Dynamic range adjustment based on content
+
+When the editor is created, the actual length of the text content is calculated, and the slider’s maximum value is updated dynamically to match this length. This ensures that the slider range always reflects the current content size. The editor is also focused programmatically to make the selection visible, and an initial selection is applied based on the slider’s default values.
+
+```ts
+function App() {
+ const rteContent = `
The Syncfusion Rich Text Editor, a WYSIWYG ("what you see is what you get") editor, is a user interface that allows you to create, edit, and format rich text content. You can try out a demo of this editor here. Key features: Provides IFRAME and DIV modes. Bulleted and numbered lists. Handles images, hyperlinks, videos, uploads, etc. Contains undo/redo manager.
`;
+
+ useEffect(() => {
+ setTimeout(() => {
+ const rte = rteRef.current;
+ if (!rte) return;
+
+ const panel = rte.contentModule.getEditPanel();
+ const realLength = panel.textContent?.length ?? 0;
+
+ setMaxLength(realLength);
+ if (sliderRef.current) {
+ sliderRef.current.max = realLength;
+ sliderRef.current.dataBind();
+ }
+
+ panel.focus();
+ onSliderChange({ value: sliderValue } as ChangeEventArgs);
+ }, 100);
+ }, []);
+ return (
+
+
+
+ );
+}
+
+export default App;
+```
+
+### Precise selection using DOM range
+
+The selection logic is implemented in the [change](https://ej2.syncfusion.com/react/documentation/api/slider/index-default#change) event of the slider. It retrieves the start and end positions from the slider and ensures they are within valid bounds. The code then uses a helper function, `getTextNodeAtOffset()`, which employs a `TreeWalker` to traverse text nodes and locate the exact node and offset for the given character positions.
+
+A Range object is created using these offsets and applied to the current selection using the browser’s `Selection` API. This guarantees accurate highlighting even when the content spans multiple text nodes.
+
+```ts
+function App() {
+ const [sliderValue, setSliderValue] = useState<[number, number]>([0, 50]);
+ const [maxLength, setMaxLength] = useState(400);
+
+ const onSliderChange = (args: ChangeEventArgs) => {
+ const [start, end] = args.value as [number, number];
+ const rte = rteRef.current;
+ if (!rte) return;
+
+ const panel = rte.contentModule.getEditPanel();
+ const max = panel.textContent?.length ?? 0;
+ const safeStart = Math.min(start, max);
+ const safeEnd = Math.min(end, max);
+
+ const startInfo = getTextNodeAtOffset(panel, safeStart);
+ const endInfo = getTextNodeAtOffset(panel, safeEnd);
+
+ if (startInfo && endInfo) {
+ const range = document.createRange();
+ range.setStart(startInfo.node, startInfo.offset);
+ range.setEnd(endInfo.node, endInfo.offset);
+ const selection = window.getSelection();
+ if (selection) {
+ selection.removeAllRanges();
+ selection.addRange(range);
+ }
+ }
+ setSliderValue([safeStart, safeEnd]);
+ };
+
+ return (
+
+ );
+}
+
+export default App;
+```
+
+### Helper function for accurate offset calculation
+
+The `getTextNodeAtOffset()` function uses a `TreeWalker` to traverse text nodes inside the editor and determine the exact node and offset for a given character index. This ensures that even complex content structures are handled correctly.
+
+```ts
+function App() {
+ const getTextNodeAtOffset = (root: Node, offset: number) => {
+ let current = 0;
+ const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);
+ let node: Text;
+ while ((node = walker.nextNode() as Text)) {
+ const len = node.textContent?.length ?? 0;
+ if (current + len >= offset) {
+ return { node, offset: offset - current };
+ }
+ current += len;
+ }
+ return null;
+ };
+ return()
+}
+
+export default App;
+```
`[Class-component]`
diff --git a/ej2-react/rich-text-editor/smart-editing/mail-merge.md b/ej2-react/rich-text-editor/smart-editing/mail-merge.md
index a52ff3ba1..89401dbce 100644
--- a/ej2-react/rich-text-editor/smart-editing/mail-merge.md
+++ b/ej2-react/rich-text-editor/smart-editing/mail-merge.md
@@ -8,12 +8,160 @@ documentation: ug
domainurl: ##DomainURL##
---
-# Mail Merge in React Rich Text Editor Component
+# Mail merge in React Rich Text Editor component
The Rich Text Editor can be customized to implement **Mail Merge** functionality by inserting placeholders into the editor using custom toolbar items. These placeholders are later replaced with actual data to generate personalized content such as letters, invoices, and reports.
This feature simplifies the creation of dynamic documents by allowing users to insert merge fields that are automatically populated with real data during content generation.
+## Adding custom toolbar items for inserting merge fields
+
+To enable mail merge functionality, the Rich Text Editor toolbar is extended with two custom buttons: `Insert Field` and `Merge Data`. These buttons are added using the `template` property in [toolbarSettings.items](https://helpej2.syncfusion.com/react/documentation/api/rich-text-editor/toolbarSettingsModel#items), which points to custom HTML elements (#insertField and #merge_data).
+
+- **Insert Field:** Opens a dropdown list of merge fields for inserting placeholders like `{{FirstName}}` into the editor.
+- **Merge Data:** Replaces all placeholders in the editor with actual values from a predefined data source.
+
+```ts
+{% raw %}
+function App() {
+ const items: (string | IToolbarItems)[] = ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments', 'OrderedList', 'UnorderedList', '|',
+ 'CreateLink', 'Image', 'CreateTable', '|',
+ { tooltipText: 'Merge Data', template: '#merge_data', command: 'Custom' },
+ { tooltipText: 'Insert Field', template: '#insertField', command: 'Custom' },
+ 'SourceCode', '|', 'Undo', 'Redo'
+ ]
+ //Rich Text Editor ToolbarSettings
+ const toolbarSettings: ToolbarSettingsModel = {
+ items: items
+ };
+ return (
+
+ );
+}
+
+export default App;
+
+{% endraw %}
+```
+
+## Using DropDownButton for selecting placeholders
+
+The **DropDownButton** component displays a list of merge fields such as First Name, Last Name, and Company Name. When a user selects an item, the corresponding placeholder (e.g., {{FirstName}}) is inserted at the current cursor position using the `insertHTML` command.
+
+```ts
+{% raw %}
+function App() {
+ let itemsName: { text: string }[] = [
+ { text: 'First Name' },
+ { text: 'Last Name' },
+ { text: 'Support Email' },
+ { text: 'Company Name' },
+ { text: 'Promo Code' },
+ { text: 'Support Phone Number' },
+ { text: 'Customer ID' },
+ { text: 'Expiration Date' },
+ { text: 'Subscription Plan' },
+ ];
+ function onItemSelect(args: { item: { text: string } }) {
+ if (args.item.text != null) {
+ const value = textToValueMap[args.item.text];
+ const trimmedValue = value.trim();
+ rteObj.formatter.editorManager.nodeSelection.restore();
+ rteObj.executeCommand(
+ 'insertHTML',
+ `{{${trimmedValue}}} `,
+ { undo: true }
+ );
+ }
+ }
+ return (
+ );
+}
+
+export default App;
+
+{% endraw %}
+```
+
+## Populating merge fields using Mention
+
+The **Mention** component provides an alternative way to insert placeholders by typing the {{ character inside the editor. A popup list of merge fields appears, allowing quick selection without using the toolbar.
+
+```ts
+{% raw %}
+function App() {
+ const fieldsData: { text: string; value: string } = { text: 'text', value: 'value' };
+ const data: { text: string; value: string }[] = [
+ { text: 'First Name', value: 'FirstName' },
+ { text: 'Last Name', value: 'LastName' },
+ { text: 'Support Email', value: 'SupportEmail' },
+ { text: 'Company Name', value: 'CompanyName' },
+ { text: 'Promo Code', value: 'PromoCode' },
+ { text: 'Support Phone Number', value: 'SupportPhoneNumber' },
+ { text: 'Customer ID', value: 'CustomerID' },
+ { text: 'Expiration Date', value: 'ExpirationDate' },
+ { text: 'Subscription Plan', value: 'SubscriptionPlan' },
+ ];
+ function displayTemplate(data: { value: string }) {
+ return (
+ {data.value}}}
+ );
+ }
+
+ return (
+
+ );
+}
+
+export default App;
+{% endraw %}
+```
+
+## Replacing placeholders with actual data dynamically
+
+When the **Merge Data** button is clicked, the editor content is processed to replace all placeholders with actual values from the `placeholderData` object. This is done using a regular expression in the `replacePlaceholders()` function.
+
+```ts
+{% raw %}
+function App() {
+ function onClickHandler(args: any): void {
+ if (rteObj) {
+ let editorContent: string = rteObj.value;
+ let mergedContent: string = replacePlaceholders(editorContent, placeholderData);
+ if (rteObj.formatter.getUndoRedoStack().length === 0) {
+ rteObj.formatter.saveData();
+ }
+ rteObj.value = mergedContent;
+ rteObj.formatter.saveData();
+ } else {
+ console.log('MailMergeEditor is not initialized.');
+ }
+ };
+
+ function replacePlaceholders(template: string, data: { [key: string]: string }): string {
+ return template.replace(/{{\s*(\w+)\s*}}/g, (match, key) => {
+ const value = data[key.trim()];
+ return value !== undefined ? value : match;
+ });
+ };
+
+ return (
+
+ );
+}
+{% endraw %}
+```
+
`[Class-component]`
{% tabs %}
@@ -25,7 +173,7 @@ This feature simplifies the creation of dynamic documents by allowing users to i
{% endhighlight %}
{% endtabs %}
- {% previewsample "page.domainurl/code-snippet/rich-text-editor/mail-merge-cs1" %}
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/mail-merge-cs3" %}
`[Functional-component]`
@@ -38,4 +186,4 @@ This feature simplifies the creation of dynamic documents by allowing users to i
{% endhighlight %}
{% endtabs %}
- {% previewsample "page.domainurl/code-snippet/rich-text-editor/mail-merge-cs2" %}
\ No newline at end of file
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/mail-merge-cs4" %}
\ No newline at end of file
diff --git a/ej2-react/rich-text-editor/tools/text-formatting.md b/ej2-react/rich-text-editor/tools/text-formatting.md
index a4dae29cd..a378ba29f 100644
--- a/ej2-react/rich-text-editor/tools/text-formatting.md
+++ b/ej2-react/rich-text-editor/tools/text-formatting.md
@@ -496,6 +496,74 @@ While the toolbar does not provide a direct method to apply blockquote formattin
{% previewsample "page.domainurl/code-snippet/rich-text-editor/nested-blockquote-cs2" %}
+## Line Height
+
+The Rich Text Editor supports line height feature which allows users to adjust the vertical spacing between lines of text. To change the line height, select the text you want to modify and click the Line Height icon in the toolbar. Choose from the available spacing options to apply the desired vertical spacing. This feature is especially useful for creating visually appealing paragraphs and ensuring consistent formatting across your document.
+
+### Built-in line height
+
+You can add the `LineHeight` tool to the toolbar in the Rich Text Editor using [toolbarSettings.items](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor/toolbarSettings#items) property.
+
+`[Class-component]`
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/rich-text-editor/line-height/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/rich-text-editor/line-height/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/line-height" %}
+
+`[Functional-component]`
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/rich-text-editor/line-height/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/rich-text-editor/line-height/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/line-height" %}
+
+The Rich Text Editor comes with a pre-configured set of [`lineHeight`](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor#lineheight) property.
+
+### Custom line height
+
+The Rich Text Editor supports custom line height along with the existing line height dropdown list. To add additional line height to the line height dropdown, you can configure the items field of the [`lineHeight`](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor#lineheight) property. This allows you to extend the available line height options beyond the default selection.
+
+The [`supportAllValues`](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor#supportAllValues) setting enables the line height dropdown to display and retain line-height values that are not part of the predefined options. When `supportAllValues` property is turned on, the dropdown will show the current line-height value from the selection, even if that value is not present in the configured lineHeights array. By default, `supportAllValues` will be set to false.
+
+`[Class-component]`
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/rich-text-editor/line-height-cs1/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/rich-text-editor/line-height-cs1/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/line-height-cs1" %}
+
+`[Functional-component]`
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/rich-text-editor/line-height-cs1/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/rich-text-editor/line-height-cs1/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/line-height-cs1" %}
+
## Horizontal line
The Rich Text Editor enables users to insert horizontal dividers using the `HorizontalLine` tool available in the toolbar. Horizontal lines () help visually separate sections of content, enhancing readability and structural clarity.
@@ -698,4 +766,68 @@ Using `Clear Format` makes it easy to undo styling changes and keep your text lo
{% endhighlight %}
{% endtabs %}
- {% previewsample "page.domainurl/code-snippet/rich-text-editor/remove-formatting-cs4" %}
\ No newline at end of file
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/remove-formatting-cs4" %}
+
+## Markdown Auto Format
+
+The Rich Text Editor supports automatic conversion of Markdown syntax into HTML using the [enableMarkdownAutoFormat](https://ej2.syncfusion.com/react/documentation/api/rich-text-editor/index-default#enablemarkdownautoformat)
+property. This feature simplifies content creation by transforming Markdown elements into their corresponding HTML tags, ensuring consistency and improving efficiency.
+
+By default, Markdown Auto-Format is enabled. The editor supports both inline formatting and block-level elements. As you type, Markdown syntax is automatically converted into semantic HTML tags, ensuring a smooth and efficient editing experience.
+
+|Commands|Syntax Example| Description |
+|--------|------------------------------------------|------------|
+| Bold | `**`Bold Text`**` or `__`Bold Text`__` | Makes text bold by wrapping it with `**` or `__`. |
+| Italic | `*`Italic Text`*` or `_`Italic Text`_` | Makes text italic by wrapping it with `*` or `_`. |
+| Bold and Italics | `***`bold and Italic text`***`. | Combines bold and italic by wrapping text with `***`. |
+| Strike Through | `~~`Strikethrough`~~` | Adds a strikethrough effect by wrapping text with `~~`. |
+| Inline Code (Single line) | \`Inline Code\` | Displays inline code by wrapping text with \`. |
+| Heading 1 | `#` Heading 1 | Creates an H1 heading by starting the line with `#`. |
+| Heading 2 | `##` Heading 2 | Creates an H2 heading by starting the line with `##`. |
+| Heading 3 | `###` Heading 3 | Creates an H2 heading by starting the line with `###`. |
+| Heading 4 | `####` Heading 4 | Creates an H2 heading by starting the line with `####` |
+| Heading 5 | `#####` Heading 5 | Creates an H2 heading by starting the line with `#####` |
+| Heading 6 | `######` Heading 6 | Creates an H2 heading by starting the line with `######` |
+| Blockquotes | `>` Blockquotes text | Adds a blockquote by starting the line with `>`. |
+| Code block (Multi Line) | \`\`\` Multi line code text Multi line code text \`\`\` | Creates a code block by starting the line with \`\`\` |
+| Ordered List | `1.` First `1.` Second | Creates a numbered list by starting lines with `1.` or `i.`. |
+| Unordered List | `*` First `*` second | Creates a bulleted list by starting lines with `*` or `-`. |
+| Check List | `[]` Task `[x]` Completed Task | Creates a checklist using `[]` for check list and `[x]` for checked checklist.|
+| Horizontal Line | `---` or `___` | Inserts a horizontal line using `---` or `___` on a new line.|
+
+
+### How Markdown auto-formatting works
+
+#### Inline Formats
+Elements such as **bold**, *italic*, ~~strikethrough~~, and `inline code` are converted **immediately after the closing marker is typed**.
+**Example:** Typing `**bold**` will render as **bold** the moment you enter the second `*`.
+
+#### Block Formats
+Elements such as headings, lists, blockquotes, and code block are converted **only after a space is typed following the marker**.
+**Example:** Typing `# Title` will render as a heading only after you type the space following `#`.
+
+`[Class-component]`
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/rich-text-editor/markdown-autoformat-cs1/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/rich-text-editor/markdown-autoformat-cs1/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/markdown-autoformat-cs1" %}
+
+`[Functional-component]`
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/rich-text-editor/markdown-autoformat-cs2/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/rich-text-editor/markdown-autoformat-cs2/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/rich-text-editor/markdown-autoformat-cs2" %}
\ No newline at end of file
diff --git a/ej2-react/treegrid/columns/column-spanning.md b/ej2-react/treegrid/columns/column-spanning.md
new file mode 100644
index 000000000..14c394068
--- /dev/null
+++ b/ej2-react/treegrid/columns/column-spanning.md
@@ -0,0 +1,74 @@
+---
+layout: post
+title: Column spanning in React TreeGrid | Syncfusion
+description: Learn here all about Column spanning in Syncfusion React TreeGrid of Syncfusion Essential JS 2 and more.
+control: Column spanning
+platform: ej2-react
+documentation: ug
+domainurl: ##DomainURL##
+---
+
+# Column spanning in React TreeGrid
+
+The column spanning feature in the Syncfusion® React TreeGrid allows merging adjacent cells horizontally, creating a visually appealing and informative layout. By defining the `colSpan` attribute in the [queryCellInfo](https://ej2.syncfusion.com/react/documentation/api/treegrid/index-default#querycellinfo) event, cells can be easily spanned and the appearance of the TreeGrid can be customized.
+
+In the following example, Employee **Davolio** is scheduled for analysis from "9.00 AM" to "10.00 AM", so those cells have been spanned.
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/treegrid/column-spanning-cs1/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/treegrid/column-spanning-cs1/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/treegrid/column-spanning-cs1" %}
+
+## Limitations
+
+Column spanning in the React TreeGrid has the following limitations:
+
+* The [updateCell](https://ej2.syncfusion.com/react/documentation/api/treegrid/index-default#updatecell) method does not support column spanning.
+* Column spanning is not compatible with the following features:
+ 1. Virtual scrolling
+ 2. Infinite scrolling
+
+> When using column spanning, ensure that the spanned cells do not interfere with TreeGrid operations such as sorting, filtering, or editing, as this may lead to unexpected behavior.
+
+## Column spanning using enableColumnSpan property
+
+The Syncfusion React TreeGrid introduces a simplified approach to horizontally merge cells with identical values in the same row across adjacent columns.
+
+The column spanning feature in the Syncfusion React TreeGrid can be enabled using `enableColumnSpan` property which significantly enhances readability and delivers a clean, professional look by eliminating repetitive data in columns such as "Status", "Permit Status", "Inspection Status" and "Punch List Status".
+
+To enable column spanning, set the `enableColumnSpan` property to **true** in the TreeGrid configuration.
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/treegrid/column-spanning-cs2/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/treegrid/column-spanning-cs2/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/treegrid/column-spanning-cs2" %}
+
+> In the sample, column spanning is disabled at the column level for the price based columns such as "Planned Budget" and "Actual Spend" by setting each column's `enableColumnSpan` property to **false**.
+
+### Limitations
+
+Column spanning feature is not compatible with all the features which are available in TreeGrid and it has limited features support. Here we have listed out the features which are not compatible with column spanning feature.
+
+* Virtualization
+* Infinite Scrolling
+* Row Drag and Drop
+* Column Virtualization
+* Detail Template
+* Editing
+* Export
+
+## See Also
+
+* [Row spanning in Syncfusion® TreeGrid](https://ej2.syncfusion.com/react/documentation/treegrid/row/row-spanning)
\ No newline at end of file
diff --git a/ej2-react/treegrid/row/row-spanning.md b/ej2-react/treegrid/row/row-spanning.md
new file mode 100644
index 000000000..d175aa17a
--- /dev/null
+++ b/ej2-react/treegrid/row/row-spanning.md
@@ -0,0 +1,74 @@
+---
+layout: post
+title: Row spanning in React TreeGrid | Syncfusion
+description: Learn here all about Row spanning in Syncfusion React TreeGrid of Syncfusion Essential JS 2 and more.
+control: Row spanning
+platform: ej2-react
+documentation: ug
+domainurl: ##DomainURL##
+---
+
+# Row spanning in React TreeGrid
+
+The row spanning feature in the Syncfusion® React TreeGrid allows merging cells in the same column vertically, creating a visually appealing and informative layout. By defining the `rowSpan` attribute in the [queryCellInfo](https://ej2.syncfusion.com/react/documentation/api/treegrid/index-default#querycellinfo) event, cells can be easily spanned and the appearance of the TreeGrid can be customized.
+
+In the following demo, the **Lunch Break** cell spans multiple rows in the "1:00 PM" column.
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/treegrid/row-spanning-cs1/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/treegrid/row-spanning-cs1/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/treegrid/row-spanning-cs1" %}
+
+## Limitations
+
+Row spanning in the React TreeGrid has the following limitations:
+
+* The [updateCell](https://ej2.syncfusion.com/react/documentation/api/treegrid/index-default#updatecell) method does not support row spanning.
+* Rowx spanning is not compatible with the following features:
+ 1. Virtual scrolling
+ 2. Infinite scrolling
+
+> When using row spanning, ensure that the spanned cells do not interfere with TreeGrid operations such as sorting, filtering, or editing, as this may lead to unexpected behavior.
+
+## Row spanning using enableRowSpan property
+
+The Syncfusion React TreeGrid introduces a simplified approach to vertically merge cells with identical values in the same column across consecutive rows.
+
+The row spanning feature in the Syncfusion React TreeGrid can be enabled using `enableRowSpan` property which significantly enhances readability and delivers a clean, professional look by eliminating repetitive data in columns such as "Status", "Permit Status", "Inspection Status" and "Punch List Status".
+
+To enable row spanning, set the `enableRowSpan` property to **true** in the TreeGrid configuration.
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/treegrid/row-spanning-cs2/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/treegrid/row-spanning-cs2/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/treegrid/row-spanning-cs2" %}
+
+> In the sample, row spanning is disabled at the column level for the price based columns such as "Planned Budget" and "Actual Spend" by setting each column's `enableRowSpan` property to **false**.
+
+### Limitations
+
+Row spanning feature is not compatible with all the features which are available in TreeGrid and it has limited features support. Here we have listed out the features which are not compatible with row spanning feature.
+
+* Virtualization
+* Infinite Scrolling
+* Row Drag and Drop
+* Column Virtualization
+* Detail Template
+* Editing
+* Export
+
+## See Also
+
+* [Column spanning in Syncfusion® TreeGrid](https://ej2.syncfusion.com/react/documentation/treegrid/columns/column-spanning)
\ No newline at end of file
diff --git a/ej2-react/treegrid/selection/check-box-selection.md b/ej2-react/treegrid/selection/check-box-selection.md
index 993716fa1..90a3a545f 100644
--- a/ej2-react/treegrid/selection/check-box-selection.md
+++ b/ej2-react/treegrid/selection/check-box-selection.md
@@ -48,4 +48,87 @@ In checkbox selection, rows can also be selected by clicking anywhere on the row
{% previewsample "page.domainurl/code-snippet/treegrid/selection-cs3" %}
-> Checkbox selection applies to row selection only and is not compatible with cell selection mode.
\ No newline at end of file
+> Checkbox selection applies to row selection only and is not compatible with cell selection mode.
+
+## Conditional row selection using isRowSelectable
+
+The TreeGrid supports conditional row selection through the [isRowSelectable](https://ej2.syncfusion.com/react/documentation/api/treegrid/#isRowSelectable) property. This feature enables dynamic business logic to determine which rows can be selected, ensuring that only rows meeting specific conditions are selectable. The `isRowSelectable` property accepts a function that evaluates each row’s data and returns **true** to enable selection or **false** to disable it. The function is executed for the entire data source before rendering, making it suitable for scenarios where selection must be restricted based on criteria.
+
+{% tabs %}
+{% highlight js tabtitle="app.jsx" %}
+{% include code-snippet/treegrid/selection-cs10/app/App.jsx %}
+{% endhighlight %}
+{% highlight ts tabtitle="app.tsx" %}
+{% include code-snippet/treegrid/selection-cs10/app/App.tsx %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/treegrid/selection-cs10" %}
+
+In this sample, we have disabled checkbox selection for rows where the "Progress" column has the value **"Completed"**.
+
+## Interactive Checkbox Selection via showCheckbox
+
+1. ### Enable Checkboxes in Columns
+
+ To render checkboxes in existing column, you need to set [`columns.showCheckbox`] property as `true`.
+
+ It is also possible to select the rows hierarchically using checkboxes in TreeGrid by enabling [`autoCheckHierarchy`] property. When we check on any parent record checkbox then the child record checkboxes will get checked.
+
+ {% if page.publishingplatform == "typescript" %}
+
+ {% tabs %}
+ {% highlight ts tabtitle="index.ts" %}
+ {% include code-snippet/treegrid/columns-cs10/index.ts %}
+ {% endhighlight %}
+ {% highlight html tabtitle="index.html" %}
+ {% include code-snippet/treegrid/columns-cs10/index.html %}
+ {% endhighlight %}
+ {% endtabs %}
+
+ {% previewsample"page.domainurl/code-snippet/treegrid/columns-cs10" %}
+
+ {% elsif page.publishingplatform == "javascript" %}
+
+ {% tabs %}
+ {% highlight js tabtitle="index.js" %}
+ {% include code-snippet/treegrid/columns-cs10/index.js %}
+ {% endhighlight %}
+ {% highlight html tabtitle="index.html" %}
+ {% include code-snippet/treegrid/columns-cs10/index.html %}
+ {% endhighlight %}
+ {% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/treegrid/columns-cs10" %}
+ {% endif %}
+
+2. ### Column cell checkbox support for checkbox selection in virtualization
+
+ The TreeGrid component is designed to efficiently manage large datasets while offering flexible row selection interactions. The [`showCheckbox`](../../api/treegrid/columnmodel#showcheckbox) property displays checkboxes in column cells, allowing rows to be selected or deselected through direct interaction, and this functionality is enabled by setting the property to **"true"**. The [`enableVirtualization`](../../api/treegrid/#enablevirtualization) property improves performance by rendering only visible rows and columns during scrolling, and this feature is activated by setting the property to "**true**". When both properties are applied together, the Data Grid component supports checkbox‑based row selection seamlessly within a virtualized environment, ensuring usability and efficiency even with extensive data.
+
+ {% if page.publishingplatform == "typescript" %}
+
+ {% tabs %}
+ {% highlight ts tabtitle="index.ts" %}
+ {% include code-snippet/treegrid/selection-cs11/index.ts %}
+ {% endhighlight %}
+ {% highlight html tabtitle="index.html" %}
+ {% include code-snippet/treegrid/selection-cs11/index.html %}
+ {% endhighlight %}
+ {% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/treegrid/selection-cs11" %}
+
+ {% elsif page.publishingplatform == "javascript" %}
+
+ {% tabs %}
+ {% highlight js tabtitle="index.js" %}
+ {% include code-snippet/treegrid/selection-cs11/index.js %}
+ {% endhighlight %}
+ {% highlight html tabtitle="index.html" %}
+ {% include code-snippet/treegrid/selection-cs11/index.html %}
+ {% endhighlight %}
+ {% endtabs %}
+
+ {% previewsample "page.domainurl/code-snippet/treegrid/selection-cs11" %}
+ {% endif %}
\ No newline at end of file
diff --git a/ej2-react/visual-studio-code-integration/create-project.md b/ej2-react/visual-studio-code-integration/create-project.md
index 254fe5110..3d653a56d 100644
--- a/ej2-react/visual-studio-code-integration/create-project.md
+++ b/ej2-react/visual-studio-code-integration/create-project.md
@@ -1,6 +1,6 @@
---
layout: post
-title: Create project in React Visual studio code integration component | Syncfusion
+title: Create React project in Visual studio code | Syncfusion
description: Learn here all about Create project in Syncfusion React Visual studio code integration component of Syncfusion Essential JS 2 and more.
control: Create project
platform: ej2-react
@@ -22,12 +22,13 @@ The steps below help you to create **Syncfusion®<

-2. Select **Syncfusion® Web Template Studio: Launch** and then press enter, Template Studio wizard for configuring the Syncfusion® Web app will appear. Provide the require Project Name and Path to create the new Syncfusion® Web application along with any one of the Framework (React, Angular, and Vue).
+2. Select **Syncfusion® Web Template Studio: Launch** and then press enter, Template Studio wizard for configuring the Syncfusion® Web app will appear. Provide the require Project Name and Path to create the new Syncfusion® Web application along with any one of the Framework (React, Pure React, Angular, and Vue).

3. Click either **Next** or **Framework** tab, and the Framework types will be appears. Choose any one of the Framework:
* React
+ * Pure React
* Angular
* Vue
@@ -64,4 +65,4 @@ We have showcased the Chart, Grid and Schedule component in Syncfusion® web app, it install the npm packages with latest version. If you want to use your existing project in future, you can update the npm packages without uninstalling it. Refer to the [update npm packages](https://ej2.syncfusion.com/react/documentation/common/how-to/update-npm-package/) section for upgrading the package.
\ No newline at end of file
+While creating the new Syncfusion® web app, it install the npm packages with latest version. If you want to use your existing project in future, you can update the npm packages without uninstalling it. Refer to the [update npm packages](https://ej2.syncfusion.com/react/documentation/upgrade/update-npm-package) section for upgrading the package.
\ No newline at end of file
diff --git a/ej2-react/visual-studio-code-integration/download-and-installation.md b/ej2-react/visual-studio-code-integration/download-and-installation.md
index 5a74e256c..c4d19d22a 100644
--- a/ej2-react/visual-studio-code-integration/download-and-installation.md
+++ b/ej2-react/visual-studio-code-integration/download-and-installation.md
@@ -1,6 +1,6 @@
---
layout: post
-title: Download and installation in React Visual studio code integration component | Syncfusion
+title: Download and installation in Visual studio code | Syncfusion
description: Learn here all about Download and installation in Syncfusion React Visual studio code integration component of Syncfusion Essential JS 2 and more.
control: Download and installation
platform: ej2-react
@@ -8,7 +8,7 @@ documentation: ug
domainurl: ##DomainURL##
---
-# Download and Installation
+# Download and Installation Guide
Syncfusion® publishes its Visual Studio Code extension in the [Visual Studio Code marketplace](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Web-VSCode-Extensions). You can install the extension directly within Visual Studio Code or download it from the marketplace and then install it.
diff --git a/ej2-react/visual-studio-code-integration/images/Extension.png b/ej2-react/visual-studio-code-integration/images/Extension.png
index 56fa06e8a..34675b28b 100644
Binary files a/ej2-react/visual-studio-code-integration/images/Extension.png and b/ej2-react/visual-studio-code-integration/images/Extension.png differ
diff --git a/ej2-react/visual-studio-code-integration/images/frameworktype.png b/ej2-react/visual-studio-code-integration/images/frameworktype.png
index f09771678..515afffd9 100644
Binary files a/ej2-react/visual-studio-code-integration/images/frameworktype.png and b/ej2-react/visual-studio-code-integration/images/frameworktype.png differ
diff --git a/ej2-react/visual-studio-code-integration/images/react-npm-install.png b/ej2-react/visual-studio-code-integration/images/react-npm-install.png
index 091d46e69..1f576fb31 100644
Binary files a/ej2-react/visual-studio-code-integration/images/react-npm-install.png and b/ej2-react/visual-studio-code-integration/images/react-npm-install.png differ
diff --git a/ej2-react/visual-studio-code-integration/images/react-styles.png b/ej2-react/visual-studio-code-integration/images/react-styles.png
index b0cb9928e..730264ad5 100644
Binary files a/ej2-react/visual-studio-code-integration/images/react-styles.png and b/ej2-react/visual-studio-code-integration/images/react-styles.png differ
diff --git a/ej2-react/visual-studio-code-integration/images/reactframework.png b/ej2-react/visual-studio-code-integration/images/reactframework.png
index 6dba2bf7a..c8147ac0e 100644
Binary files a/ej2-react/visual-studio-code-integration/images/reactframework.png and b/ej2-react/visual-studio-code-integration/images/reactframework.png differ
diff --git a/ej2-react/visual-studio-code-integration/overview.md b/ej2-react/visual-studio-code-integration/overview.md
index d779ad55f..a1b3eae2c 100644
--- a/ej2-react/visual-studio-code-integration/overview.md
+++ b/ej2-react/visual-studio-code-integration/overview.md
@@ -1,6 +1,6 @@
---
layout: post
-title: Overview in React Visual studio code integration component | Syncfusion
+title: Overview in React Visual studio code integration | Syncfusion
description: Learn here all about Overview in Syncfusion React Visual studio code integration component of Syncfusion Essential JS 2 and more.
control: Overview
platform: ej2-react
@@ -12,7 +12,7 @@ domainurl: ##DomainURL##
## Overview
-The Syncfusion® Essential Studio® Web extension for Visual Studio Code allows you to use the Syncfusion® JavaScript components(React, Angular, and Vue) easily by configuring the Syncfusion® NPM packages and themes.
+The Syncfusion® Essential Studio® Web extension for Visual Studio Code allows you to use the Syncfusion® JavaScript components(React, Pure React, Angular, and Vue) easily by configuring the Syncfusion® NPM packages and themes.
The Syncfusion® Web Extension provides the following support in Visual Studio Code:
diff --git a/ej2-react/visual-studio-code-integration/visual-studio-code-extensions/create-project.md b/ej2-react/visual-studio-code-integration/visual-studio-code-extensions/create-project.md
deleted file mode 100644
index 4e7cc6774..000000000
--- a/ej2-react/visual-studio-code-integration/visual-studio-code-extensions/create-project.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-layout: post
-title: Create project in React Visual studio code integration component | Syncfusion
-description: Learn here all about Create project in Syncfusion React Visual studio code integration component of Syncfusion Essential JS 2 and more.
-control: Create project
-platform: ej2-react
-documentation: ug
-domainurl: ##DomainURL##
----
-
-# Visual Studio Code Extensions
-
-## Create project
-
-Syncfusion® provides **project templates** for **Visual Studio Code** to create Syncfusion® Web applications. The Syncfusion® Web Project template creates applications with the selected Framework (React, Angular, and Vue), required Syncfusion® NPM packages, component render code for the Grid, Chart, and Scheduler components, and a style to make development with Syncfusion® components easier.
-
- > The Syncfusion® Visual Studio Code project template provides support for Web project templates from v18.3.0.47.
-
-The steps below help you to create **Syncfusion® Web Applications** through the **Visual Studio Code:**
-
-1. In Visual Studio Code, open the command palette by pressing **Ctrl+Shift+P**. The Visual Studio Code palette opens, search the word **Syncfusion®**, so you can get the templates provided.
-
- 
-
-2. Select **Syncfusion® Web Template Studio: Launch** and then press enter, Template Studio wizard for configuring the Syncfusion® Web app will appear. Provide the require Project Name and Path to create the new Syncfusion® Web application along with any one of the Framework (React, Angular, and Vue).
-
- 
-
-3. Click either **Next** or **Framework** tab, and the Framework types will be appears. Choose any one of the Framework:
- * React
- * Angular
- * Vue
-
- 
-
- If you choose the Vue framework, the **Select Vue Version** option will appear in the **Project Details** section. You can create the Vue application using either the Vue 3 or Vue 2 versions.
-
- 
-
-4. Click either **Next** or the **Configuration** tab, and the Configuration section will be loaded. Choose the preferred theme and then click **Create**. The project will be created.
- 
-
-5. The created Syncfusion® Web App is configured with the Syncfusion® NPM packages, styles, and the component render code for the Syncfusion® component added.
-
- 
-
- 
-
- 
-
-## Run the application
-
-1. Click on **F5** or navigate to **Run>Start debugging**
-
- 
-
-2. After compilation process completed, open the local host link in browser to see the output.
-
- 
\ No newline at end of file
diff --git a/ej2-react/visual-studio-code-integration/visual-studio-code-extensions/download-and-installation.md b/ej2-react/visual-studio-code-integration/visual-studio-code-extensions/download-and-installation.md
deleted file mode 100644
index f8873dbdc..000000000
--- a/ej2-react/visual-studio-code-integration/visual-studio-code-extensions/download-and-installation.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-layout: post
-title: Download and installation in React Visual studio code integration component | Syncfusion
-description: Learn here all about Download and installation in Syncfusion React Visual studio code integration component of Syncfusion Essential JS 2 and more.
-control: Download and installation
-platform: ej2-react
-documentation: ug
-domainurl: ##DomainURL##
----
-
-# Download and Installation
-
-Syncfusion® publishes the Visual Studio Code extension in [Visual Studio Code marketplace](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Web-VSCode-Extensions). You can either install it from Visual Studio Code or download and install it from the Visual Studio Code marketplace.
-
-## Prerequisites
-
-The following prerequisites software needs to be installed for the Syncfusion® Web extension installation and for creating the Syncfusion® Web applications along with any one of the Framework(React, Angular, and Vue).
-
-* [Visual Studio Code](https://code.visualstudio.com/download)
-
- > The minimum version of the Visual Studio Code is 1.38.0 to use the Syncfusion® Web Extension.
-
-* [C# Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp)
-
-* [Node.js](https://nodejs.org/en/download/)
-
-## Install through the Visual Studio Code Extensions
-
-The following steps explain how to install the Syncfusion® Web extensions from Visual Studio Code Extensions.
-
-1. Open Visual Studio Code.
-
-2. Go to **View > Extensions**, and open Manage Extensions.
-
-3. Type **“Syncfusion® Web** in the search box.
-
- 
-
-4. Click the Install button on the **"Web VSCode Extensions - Syncfusion®"** extension.
-
-5. After the installation, reload the Visual Studio Code using the **Reload Required** in Visual Studio Code palette.
-
-6. Now, use the Syncfusion® Web extensions from the Visual Studio Code palette.
-
- 
-
-## Install from the Visual Studio Code Marketplace
-
-The following steps explain how to download Syncfusion® Web applications from the Visual Studio Code Marketplace and install them.
-
-1. Open the [Syncfusion® Web Extension](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Web-VSCode-Extensions)
-
-2. Click Install from Visual Studio Code Marketplace. The browser opens the popup with the information like **“Open Visual Studio Code”**. Click Open Visual Studio Code, then [Syncfusion® Web Extension](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Angular-VSCode-Extensions) will open in Visual Studio Code.
-
-3. Click the Install button in the **"Web VSCode Extensions - Syncfusion®"** extension.
-
-4. After the installation, reload the Visual Studio Code using the Reload Required in Visual Studio Code palette.
-
-5. Now, use the Syncfusion® Web extensions from the Visual Studio Code palette.
-
- 
\ No newline at end of file