2023 Volume 2 - 22.*
diff --git a/ej2-vue/Release-notes/31.1.18.md b/ej2-vue/Release-notes/31.1.18.md
new file mode 100644
index 000000000..12f996f3f
--- /dev/null
+++ b/ej2-vue/Release-notes/31.1.18.md
@@ -0,0 +1,99 @@
+---
+title: Essential Studio® for Vue Release Notes - v31.1.18
+description: Essential Studio® for Vue Weekly Release - Release Notes - v31.1.18
+platform: ej2-vue
+documentation: ug
+---
+
+# Essential Studio® for Vue - v31.1.18 Release Notes
+
+{% include release-info.html date="September 10, 2025" version="v31.1.18" passed="96429" failed="0" %}
+
+{% directory path: _includes/release-notes/v31.1.18 %}
+
+{% 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 | 106 | 106 | 0 | All Passed |
+| AI Assist View | 429 | 429 | 0 | All Passed |
+| App Bar | 67 | 67 | 0 | All Passed |
+| AutoComplete | 200 | 200 | 0 | All Passed |
+| Breadcrumb | 160 | 160 | 0 | All Passed |
+| Bullet Chart | 165 | 165 | 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 | 4080 | 4080 | 0 | All Passed |
+| Chat UI | 184 | 184 | 0 | All Passed |
+| Checkbox | 37 | 37 | 0 | All Passed |
+| CircularGauge | 429 | 429 | 0 | All Passed |
+| ColorPicker | 130 | 130 | 0 | All Passed |
+| Combo Box | 137 | 137 | 0 | All Passed |
+| Common | 849 | 849 | 0 | All Passed |
+| Context Menu | 105 | 105 | 0 | All Passed |
+| Data Grid | 2754 | 2754 | 0 | All Passed |
+| Date Picker | 425 | 425 | 0 | All Passed |
+| Date Range Picker | 420 | 420 | 0 | All Passed |
+| Date Time Picker | 323 | 323 | 0 | All Passed |
+| Diagram | 19893 | 19893 | 0 | All Passed |
+| DropDown Button | 132 | 132 | 0 | All Passed |
+| Dropdown List | 191 | 191 | 0 | All Passed |
+| Dropdown Tree | 106 | 106 | 0 | All Passed |
+| File Manager | 2196 | 2196 | 0 | All Passed |
+| Floating Action Button | 174 | 174 | 0 | All Passed |
+| Gantt | 3468 | 3468 | 0 | All Passed |
+| HeatMap Chart | 478 | 478 | 0 | All Passed |
+| Image Editor | 1653 | 1653 | 0 | All Passed |
+| In-place Editor | 642 | 642 | 0 | All Passed |
+| Kanban | 268 | 268 | 0 | All Passed |
+| LinearGauge | 426 | 426 | 0 | All Passed |
+| Listbox | 115 | 115 | 0 | All Passed |
+| ListView | 83 | 83 | 0 | All Passed |
+| Maps | 1244 | 1244 | 0 | All Passed |
+| Mention | 39 | 39 | 0 | All Passed |
+| Menu | 187 | 187 | 0 | All Passed |
+| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
+| Multiselect Dropdown | 373 | 373 | 0 | All Passed |
+| OTP Input | 240 | 240 | 0 | All Passed |
+| PDF Viewer | 18612 | 18612 | 0 | All Passed |
+| Pivot Table | 5297 | 5297 | 0 | All Passed |
+| Progress Bar | 81 | 81 | 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 | 197 | 197 | 0 | All Passed |
+| Ribbon | 496 | 496 | 0 | All Passed |
+| Rich Text Editor | 4591 | 4591 | 0 | All Passed |
+| schedule | 4609 | 4609 | 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 | 56 | 56 | 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 |
+| Spreadsheet | 10393 | 10393 | 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 | 54 | 54 | 0 | All Passed |
+| Time Picker | 180 | 180 | 0 | All Passed |
+| Timeline | 213 | 213 | 0 | All Passed |
+| Toast | 139 | 139 | 0 | All Passed |
+| Toolbar | 132 | 132 | 0 | All Passed |
+| ToolTip | 131 | 131 | 0 | All Passed |
+| TreeGrid | 3656 | 3656 | 0 | All Passed |
+| Treemap | 264 | 264 | 0 | All Passed |
+| Treeview | 371 | 371 | 0 | All Passed |
\ No newline at end of file
diff --git a/ej2-vue/Release-notes/31.1.20.md b/ej2-vue/Release-notes/31.1.20.md
new file mode 100644
index 000000000..943ad5b12
--- /dev/null
+++ b/ej2-vue/Release-notes/31.1.20.md
@@ -0,0 +1,99 @@
+---
+title: Essential Studio® for Vue Release Notes - v31.1.20
+description: Essential Studio® for Vue Weekly Release - Release Notes - v31.1.20
+platform: ej2-vue
+documentation: ug
+---
+
+# Essential Studio® for Vue - v31.1.20 Release Notes
+
+{% include release-info.html date="September 17, 2025" version="v31.1.20" passed="98403" failed="0" %}
+
+{% directory path: _includes/release-notes/v31.1.20 %}
+
+{% 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 | 106 | 106 | 0 | All Passed |
+| AI Assist View | 429 | 429 | 0 | All Passed |
+| App Bar | 67 | 67 | 0 | All Passed |
+| AutoComplete | 200 | 200 | 0 | All Passed |
+| Breadcrumb | 160 | 160 | 0 | All Passed |
+| Bullet Chart | 165 | 165 | 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 | 4080 | 4080 | 0 | All Passed |
+| Chat UI | 184 | 184 | 0 | All Passed |
+| Checkbox | 37 | 37 | 0 | All Passed |
+| CircularGauge | 429 | 429 | 0 | All Passed |
+| ColorPicker | 130 | 130 | 0 | All Passed |
+| Combo Box | 137 | 137 | 0 | All Passed |
+| Common | 2436 | 2436 | 0 | All Passed |
+| Context Menu | 105 | 105 | 0 | All Passed |
+| Data Grid | 2756 | 2756 | 0 | All Passed |
+| Date Picker | 425 | 425 | 0 | All Passed |
+| Date Range Picker | 420 | 420 | 0 | All Passed |
+| Date Time Picker | 323 | 323 | 0 | All Passed |
+| Diagram | 19893 | 19893 | 0 | All Passed |
+| DropDown Button | 132 | 132 | 0 | All Passed |
+| Dropdown List | 191 | 191 | 0 | All Passed |
+| Dropdown Tree | 106 | 106 | 0 | All Passed |
+| File Manager | 2196 | 2196 | 0 | All Passed |
+| Floating Action Button | 174 | 174 | 0 | All Passed |
+| Gantt | 3513 | 3513 | 0 | All Passed |
+| HeatMap Chart | 635 | 635 | 0 | All Passed |
+| Image Editor | 1653 | 1653 | 0 | All Passed |
+| In-place Editor | 642 | 642 | 0 | All Passed |
+| Kanban | 268 | 268 | 0 | All Passed |
+| LinearGauge | 426 | 426 | 0 | All Passed |
+| Listbox | 115 | 115 | 0 | All Passed |
+| ListView | 83 | 83 | 0 | All Passed |
+| Maps | 1365 | 1365 | 0 | All Passed |
+| Mention | 39 | 39 | 0 | All Passed |
+| Menu | 187 | 187 | 0 | All Passed |
+| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
+| Multiselect Dropdown | 373 | 373 | 0 | All Passed |
+| OTP Input | 240 | 240 | 0 | All Passed |
+| PDF Viewer | 18612 | 18612 | 0 | All Passed |
+| Pivot Table | 5297 | 5297 | 0 | All Passed |
+| Progress Bar | 81 | 81 | 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 | 197 | 197 | 0 | All Passed |
+| Ribbon | 496 | 496 | 0 | All Passed |
+| Rich Text Editor | 4591 | 4591 | 0 | All Passed |
+| schedule | 4609 | 4609 | 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 | 56 | 56 | 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 |
+| Spreadsheet | 10393 | 10393 | 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 | 54 | 54 | 0 | All Passed |
+| Time Picker | 180 | 180 | 0 | All Passed |
+| Timeline | 213 | 213 | 0 | All Passed |
+| Toast | 139 | 139 | 0 | All Passed |
+| Toolbar | 132 | 132 | 0 | All Passed |
+| ToolTip | 131 | 131 | 0 | All Passed |
+| TreeGrid | 3656 | 3656 | 0 | All Passed |
+| Treemap | 326 | 326 | 0 | All Passed |
+| Treeview | 371 | 371 | 0 | All Passed |
\ No newline at end of file
diff --git a/ej2-vue/Release-notes/31.1.21.md b/ej2-vue/Release-notes/31.1.21.md
new file mode 100644
index 000000000..6bc0aeead
--- /dev/null
+++ b/ej2-vue/Release-notes/31.1.21.md
@@ -0,0 +1,100 @@
+---
+title: Essential Studio® for Vue Release Notes - v31.1.21
+description: Learn here about the controls in the Essential Studio® for Vue Weekly Release - Release Notes - v31.1.21
+platform: ej2-vue
+documentation: ug
+---
+
+# Essential Studio® for Vue - v31.1.21 Release Notes
+
+{% include release-info.html date="September 23, 2025" version="v31.1.21" passed="103560" failed="0" %}
+
+{% directory path: _includes/release-notes/v31.1.21 %}
+
+{% 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 | 205 | 205 | 0 | All Passed |
+| AI Assist View | 431 | 431 | 0 | All Passed |
+| App Bar | 67 | 67 | 0 | All Passed |
+| AutoComplete | 200 | 200 | 0 | All Passed |
+| Breadcrumb | 160 | 160 | 0 | All Passed |
+| Bullet Chart | 164 | 164 | 0 | All Passed |
+| Button | 144 | 144 | 0 | All Passed |
+| ButtonGroup | 120 | 120 | 0 | All Passed |
+| calendar | 177 | 177 | 0 | All Passed |
+| Carousel | 61 | 61 | 0 | All Passed |
+| Chart | 4597 | 4597 | 0 | All Passed |
+| Chat UI | 184 | 184 | 0 | All Passed |
+| CircularGauge | 429 | 429 | 0 | All Passed |
+| ColorPicker | 130 | 130 | 0 | All Passed |
+| Combo Box | 136 | 136 | 0 | All Passed |
+| Common | 2506 | 2506 | 0 | All Passed |
+| Context Menu | 105 | 105 | 0 | All Passed |
+| Data Grid | 2799 | 2799 | 0 | All Passed |
+| Date Picker | 425 | 425 | 0 | All Passed |
+| Date Range Picker | 420 | 420 | 0 | All Passed |
+| Date Time Picker | 323 | 323 | 0 | All Passed |
+| Diagram | 18967 | 18967 | 0 | All Passed |
+| Dialog | 58 | 58 | 0 | All Passed |
+| Document Editor | 4997 | 4997 | 0 | All Passed |
+| DropDown Button | 132 | 132 | 0 | All Passed |
+| Dropdown List | 191 | 191 | 0 | All Passed |
+| Dropdown Tree | 105 | 105 | 0 | All Passed |
+| File Manager | 2187 | 2187 | 0 | All Passed |
+| Floating Action Button | 132 | 132 | 0 | All Passed |
+| Gantt | 3513 | 3513 | 0 | All Passed |
+| HeatMap Chart | 635 | 635 | 0 | All Passed |
+| Image Editor | 1653 | 1653 | 0 | All Passed |
+| In-place Editor | 642 | 642 | 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 | 1368 | 1368 | 0 | All Passed |
+| Mention | 35 | 35 | 0 | All Passed |
+| Menu | 187 | 187 | 0 | All Passed |
+| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
+| Multiselect Dropdown | 390 | 390 | 0 | All Passed |
+| OTP Input | 240 | 240 | 0 | All Passed |
+| PDF Viewer | 19130 | 19130 | 0 | All Passed |
+| Pivot Table | 5298 | 5298 | 0 | All Passed |
+| Progress Bar | 79 | 79 | 0 | All Passed |
+| Progress Button | 132 | 132 | 0 | All Passed |
+| Query Builder | 480 | 480 | 0 | All Passed |
+| RadioButton | 36 | 36 | 0 | All Passed |
+| RangeNavigator | 140 | 140 | 0 | All Passed |
+| Rating | 197 | 197 | 0 | All Passed |
+| Ribbon | 496 | 496 | 0 | All Passed |
+| Rich Text Editor | 4564 | 4564 | 0 | All Passed |
+| schedule | 4609 | 4609 | 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 | 122 | 122 | 0 | All Passed |
+| Split Button | 144 | 144 | 0 | All Passed |
+| Spreadsheet | 10393 | 10393 | 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 | 54 | 54 | 0 | All Passed |
+| Time Picker | 180 | 180 | 0 | All Passed |
+| Timeline | 213 | 213 | 0 | All Passed |
+| Toast | 139 | 139 | 0 | All Passed |
+| Toolbar | 132 | 132 | 0 | All Passed |
+| ToolTip | 136 | 136 | 0 | All Passed |
+| TreeGrid | 3786 | 3786 | 0 | All Passed |
+| Treemap | 326 | 326 | 0 | All Passed |
+| Treeview | 370 | 370 | 0 | All Passed |
\ No newline at end of file
diff --git a/ej2-vue/Release-notes/31.1.22.md b/ej2-vue/Release-notes/31.1.22.md
new file mode 100644
index 000000000..9035518bd
--- /dev/null
+++ b/ej2-vue/Release-notes/31.1.22.md
@@ -0,0 +1,97 @@
+---
+title: Essential Studio® for Vue Release Notes - v31.1.22
+description: Learn here about the controls in the Essential Studio® for Vue Weekly Release - Release Notes - v31.1.22
+platform: ej2-vue
+documentation: ug
+---
+
+# Essential Studio® for Vue - v31.1.22 Release Notes
+
+{% include release-info.html date="October 01, 2025" version="v31.1.22" passed="61802" failed="0" %}
+
+{% directory path: _includes/release-notes/v31.1.22 %}
+
+{% 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 | 205 | 205 | 0 | All Passed |
+| AI Assist View | 431 | 431 | 0 | All Passed |
+| App Bar | 67 | 67 | 0 | All Passed |
+| AutoComplete | 200 | 200 | 0 | All Passed |
+| Breadcrumb | 160 | 160 | 0 | All Passed |
+| Bullet Chart | 164 | 164 | 0 | All Passed |
+| Button | 144 | 144 | 0 | All Passed |
+| ButtonGroup | 120 | 120 | 0 | All Passed |
+| calendar | 177 | 177 | 0 | All Passed |
+| Carousel | 61 | 61 | 0 | All Passed |
+| Chart | 4605 | 4605 | 0 | All Passed |
+| Chat UI | 184 | 184 | 0 | All Passed |
+| CircularGauge | 429 | 429 | 0 | All Passed |
+| ColorPicker | 130 | 130 | 0 | All Passed |
+| Combo Box | 136 | 136 | 0 | All Passed |
+| Common | 904 | 904 | 0 | All Passed |
+| Context Menu | 105 | 105 | 0 | All Passed |
+| Data Grid | 2800 | 2800 | 0 | All Passed |
+| Date Picker | 426 | 426 | 0 | All Passed |
+| Date Range Picker | 519 | 519 | 0 | All Passed |
+| Date Time Picker | 324 | 324 | 0 | All Passed |
+| Diagram | 12813 | 12813 | 0 | All Passed |
+| Dialog | 58 | 58 | 0 | All Passed |
+| DropDown Button | 132 | 132 | 0 | All Passed |
+| Dropdown List | 191 | 191 | 0 | All Passed |
+| Dropdown Tree | 105 | 105 | 0 | All Passed |
+| File Manager | 2187 | 2187 | 0 | All Passed |
+| Floating Action Button | 132 | 132 | 0 | All Passed |
+| Gantt | 3515 | 3515 | 0 | All Passed |
+| HeatMap Chart | 635 | 635 | 0 | All Passed |
+| Image Editor | 1653 | 1653 | 0 | All Passed |
+| In-place Editor | 642 | 642 | 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 | 1368 | 1368 | 0 | All Passed |
+| Mention | 35 | 35 | 0 | All Passed |
+| Menu | 187 | 187 | 0 | All Passed |
+| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
+| Multiselect Dropdown | 390 | 390 | 0 | All Passed |
+| OTP Input | 240 | 240 | 0 | All Passed |
+| Pivot Table | 5298 | 5298 | 0 | All Passed |
+| Progress Bar | 79 | 79 | 0 | All Passed |
+| Progress Button | 132 | 132 | 0 | All Passed |
+| Query Builder | 480 | 480 | 0 | All Passed |
+| RadioButton | 36 | 36 | 0 | All Passed |
+| RangeNavigator | 140 | 140 | 0 | All Passed |
+| Rating | 198 | 198 | 0 | All Passed |
+| Ribbon | 623 | 623 | 0 | All Passed |
+| Rich Text Editor | 4564 | 4564 | 0 | All Passed |
+| schedule | 4609 | 4609 | 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 | 122 | 122 | 0 | All Passed |
+| Split Button | 144 | 144 | 0 | All Passed |
+| Stepper | 91 | 91 | 0 | All Passed |
+| Stock Chart | 677 | 677 | 0 | All Passed |
+| Tab | 69 | 69 | 0 | All Passed |
+| Text Area | 107 | 107 | 0 | All Passed |
+| TextBox | 54 | 54 | 0 | All Passed |
+| Time Picker | 180 | 180 | 0 | All Passed |
+| Timeline | 213 | 213 | 0 | All Passed |
+| Toast | 139 | 139 | 0 | All Passed |
+| Toolbar | 112 | 112 | 0 | All Passed |
+| ToolTip | 136 | 136 | 0 | All Passed |
+| TreeGrid | 3786 | 3786 | 0 | All Passed |
+| Treemap | 326 | 326 | 0 | All Passed |
+| Treeview | 370 | 370 | 0 | All Passed |
\ No newline at end of file
diff --git a/ej2-vue/Release-notes/31.2.10.md b/ej2-vue/Release-notes/31.2.10.md
new file mode 100644
index 000000000..132daffff
--- /dev/null
+++ b/ej2-vue/Release-notes/31.2.10.md
@@ -0,0 +1,98 @@
+---
+title: Essential Studio for Vue Release Notes - v31.2.10
+description: Learn here about the controls in the Essential Studio for Vue Weekly Release - Release Notes - v31.2.10
+platform: ej2-vue
+documentation: ug
+---
+
+# Essential Studio for Vue - v31.2.10 Release Notes
+
+{% include release-info.html date="November 12, 2025" version="v31.2.10" passed="64195" failed="0" %}
+
+{% directory path: _includes/release-notes/v31.2.10 %}
+
+{% 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 | 205 | 205 | 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 | 168 | 168 | 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 | 4958 | 4958 | 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 | 904 | 904 | 0 | All Passed |
+| Context Menu | 105 | 105 | 0 | All Passed |
+| Data Grid | 3670 | 3670 | 0 | All Passed |
+| Date Picker | 426 | 426 | 0 | All Passed |
+| Date Range Picker | 519 | 519 | 0 | All Passed |
+| Date Time Picker | 324 | 324 | 0 | All Passed |
+| Diagram | 12813 | 12813 | 0 | All Passed |
+| Dialog | 63 | 63 | 0 | All Passed |
+| DropDown Button | 132 | 132 | 0 | All Passed |
+| Dropdown List | 194 | 194 | 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 | 3530 | 3530 | 0 | All Passed |
+| HeatMap Chart | 635 | 635 | 0 | All Passed |
+| Image Editor | 1653 | 1653 | 0 | All Passed |
+| In-place Editor | 642 | 642 | 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 | 1368 | 1368 | 0 | All Passed |
+| Mention | 35 | 35 | 0 | All Passed |
+| Menu | 187 | 187 | 0 | All Passed |
+| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
+| Multiselect Dropdown | 437 | 437 | 0 | All Passed |
+| OTP Input | 240 | 240 | 0 | All Passed |
+| Pivot Table | 5303 | 5303 | 0 | All Passed |
+| Progress Bar | 81 | 81 | 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 | 623 | 623 | 0 | All Passed |
+| Rich Text Editor | 5100 | 5100 | 0 | All Passed |
+| schedule | 4644 | 4644 | 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 | 58 | 58 | 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 | 533 | 533 | 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 | 115 | 115 | 0 | All Passed |
+| ToolTip | 136 | 136 | 0 | All Passed |
+| TreeGrid | 3787 | 3787 | 0 | All Passed |
+| Treemap | 326 | 326 | 0 | All Passed |
+| Treeview | 370 | 370 | 0 | All Passed |
\ No newline at end of file
diff --git a/ej2-vue/Release-notes/31.2.12.md b/ej2-vue/Release-notes/31.2.12.md
new file mode 100644
index 000000000..db2e7a5aa
--- /dev/null
+++ b/ej2-vue/Release-notes/31.2.12.md
@@ -0,0 +1,98 @@
+---
+title: Essential Studio for Vue Release Notes
+description: Learn here about the controls in the Essential Studio for Vue 2025 Volume 3 SP Release - Release Notes
+platform: ej2-vue
+documentation: ug
+---
+
+# Essential Studio for Vue - v31.2.12 Release Notes
+
+{% include release-info.html date="November 18, 2025" version="v31.2.12" passed="64043" failed="0" %}
+
+{% directory path: _includes/release-notes/v31.2.12 %}
+
+{% 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 | 205 | 205 | 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 | 168 | 168 | 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 | 4958 | 4958 | 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 | 904 | 904 | 0 | All Passed |
+| Context Menu | 105 | 105 | 0 | All Passed |
+| Data Grid | 3670 | 3670 | 0 | All Passed |
+| Date Picker | 426 | 426 | 0 | All Passed |
+| Date Range Picker | 519 | 519 | 0 | All Passed |
+| Date Time Picker | 324 | 324 | 0 | All Passed |
+| Diagram | 12813 | 12813 | 0 | All Passed |
+| Dialog | 63 | 63 | 0 | All Passed |
+| DropDown Button | 132 | 132 | 0 | All Passed |
+| Dropdown List | 194 | 194 | 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 | 3530 | 3530 | 0 | All Passed |
+| HeatMap Chart | 635 | 635 | 0 | All Passed |
+| Image Editor | 1653 | 1653 | 0 | All Passed |
+| In-place Editor | 642 | 642 | 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 | 1368 | 1368 | 0 | All Passed |
+| Mention | 35 | 35 | 0 | All Passed |
+| Menu | 187 | 187 | 0 | All Passed |
+| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
+| Multiselect Dropdown | 437 | 437 | 0 | All Passed |
+| OTP Input | 240 | 240 | 0 | All Passed |
+| Pivot Table | 5303 | 5303 | 0 | All Passed |
+| Progress Bar | 81 | 81 | 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 | 623 | 623 | 0 | All Passed |
+| Rich Text Editor | 5100 | 5100 | 0 | All Passed |
+| schedule | 4644 | 4644 | 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 | 58 | 58 | 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 | 117 | 117 | 0 | All Passed |
+| ToolTip | 136 | 136 | 0 | All Passed |
+| TreeGrid | 3787 | 3787 | 0 | All Passed |
+| Treemap | 326 | 326 | 0 | All Passed |
+| Treeview | 370 | 370 | 0 | All Passed |
\ No newline at end of file
diff --git a/ej2-vue/Release-notes/31.2.2.md b/ej2-vue/Release-notes/31.2.2.md
index f69756da3..a13b6d518 100644
--- a/ej2-vue/Release-notes/31.2.2.md
+++ b/ej2-vue/Release-notes/31.2.2.md
@@ -7,7 +7,7 @@ documentation: ug
# Essential Studio for Vue - v31.2.2 Release Notes
-{% include release-info.html date="October 14, 2025" version="v31.2.2" passed="63079" failed="0" %}
+{% include release-info.html date="October 15, 2025" version="v31.2.2" passed="63079" failed="0" %}
{% directory path: _includes/release-notes/v31.2.2 %}
diff --git a/ej2-vue/Release-notes/31.2.3.md b/ej2-vue/Release-notes/31.2.3.md
new file mode 100644
index 000000000..3fbcc896f
--- /dev/null
+++ b/ej2-vue/Release-notes/31.2.3.md
@@ -0,0 +1,97 @@
+---
+title: Essential Studio for Vue Release Notes - v31.2.3
+description: Learn here about the controls in the Essential Studio for Vue Weekly Release - Release Notes - v31.2.3
+platform: ej2-vue
+documentation: ug
+---
+
+# Essential Studio for Vue - v31.2.3 Release Notes
+
+{% include release-info.html date="October 22, 2025" version="v31.2.3" passed="63245" failed="0" %}
+
+{% directory path: _includes/release-notes/v31.2.3 %}
+
+{% 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 | 205 | 205 | 0 | All Passed |
+| AI Assist View | 431 | 431 | 0 | All Passed |
+| App Bar | 67 | 67 | 0 | All Passed |
+| AutoComplete | 200 | 200 | 0 | All Passed |
+| Breadcrumb | 160 | 160 | 0 | All Passed |
+| Bullet Chart | 168 | 168 | 0 | All Passed |
+| Button | 144 | 144 | 0 | All Passed |
+| ButtonGroup | 120 | 120 | 0 | All Passed |
+| calendar | 177 | 177 | 0 | All Passed |
+| Carousel | 61 | 61 | 0 | All Passed |
+| Chart | 4905 | 4905 | 0 | All Passed |
+| Chat UI | 184 | 184 | 0 | All Passed |
+| CircularGauge | 429 | 429 | 0 | All Passed |
+| ColorPicker | 130 | 130 | 0 | All Passed |
+| Combo Box | 139 | 139 | 0 | All Passed |
+| Common | 904 | 904 | 0 | All Passed |
+| Context Menu | 105 | 105 | 0 | All Passed |
+| Data Grid | 3662 | 3662 | 0 | All Passed |
+| Date Picker | 426 | 426 | 0 | All Passed |
+| Date Range Picker | 519 | 519 | 0 | All Passed |
+| Date Time Picker | 324 | 324 | 0 | All Passed |
+| Diagram | 12813 | 12813 | 0 | All Passed |
+| Dialog | 58 | 58 | 0 | All Passed |
+| DropDown Button | 132 | 132 | 0 | All Passed |
+| Dropdown List | 193 | 193 | 0 | All Passed |
+| Dropdown Tree | 105 | 105 | 0 | All Passed |
+| File Manager | 2187 | 2187 | 0 | All Passed |
+| Floating Action Button | 132 | 132 | 0 | All Passed |
+| Gantt | 3515 | 3515 | 0 | All Passed |
+| HeatMap Chart | 635 | 635 | 0 | All Passed |
+| Image Editor | 1653 | 1653 | 0 | All Passed |
+| In-place Editor | 642 | 642 | 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 | 1368 | 1368 | 0 | All Passed |
+| Mention | 35 | 35 | 0 | All Passed |
+| Menu | 187 | 187 | 0 | All Passed |
+| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
+| Multiselect Dropdown | 422 | 422 | 0 | All Passed |
+| OTP Input | 240 | 240 | 0 | All Passed |
+| Pivot Table | 5303 | 5303 | 0 | All Passed |
+| Progress Bar | 81 | 81 | 0 | All Passed |
+| Progress Button | 132 | 132 | 0 | All Passed |
+| Query Builder | 480 | 480 | 0 | All Passed |
+| RadioButton | 36 | 36 | 0 | All Passed |
+| RangeNavigator | 140 | 140 | 0 | All Passed |
+| Rating | 198 | 198 | 0 | All Passed |
+| Ribbon | 623 | 623 | 0 | All Passed |
+| Rich Text Editor | 5095 | 5095 | 0 | All Passed |
+| schedule | 4608 | 4608 | 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 | 58 | 58 | 0 | All Passed |
+| Speech To Text | 200 | 200 | 0 | All Passed |
+| Speed Dial | 122 | 122 | 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 | 54 | 54 | 0 | All Passed |
+| Time Picker | 180 | 180 | 0 | All Passed |
+| Timeline | 213 | 213 | 0 | All Passed |
+| Toast | 139 | 139 | 0 | All Passed |
+| Toolbar | 112 | 112 | 0 | All Passed |
+| ToolTip | 136 | 136 | 0 | All Passed |
+| TreeGrid | 3786 | 3786 | 0 | All Passed |
+| Treemap | 326 | 326 | 0 | All Passed |
+| Treeview | 370 | 370 | 0 | All Passed |
\ No newline at end of file
diff --git a/ej2-vue/Release-notes/31.2.4.md b/ej2-vue/Release-notes/31.2.4.md
new file mode 100644
index 000000000..c82b818b5
--- /dev/null
+++ b/ej2-vue/Release-notes/31.2.4.md
@@ -0,0 +1,97 @@
+---
+title: Essential Studio for Vue Release Notes - v31.2.4
+description: Learn here about the controls in the Essential Studio for Vue Weekly Release - Release Notes - v31.2.4
+platform: ej2-vue
+documentation: ug
+---
+
+# Essential Studio for Vue - v31.2.4 Release Notes
+
+{% include release-info.html date="October 28, 2025" version="v31.2.4" passed="63272" failed="0" %}
+
+{% directory path: _includes/release-notes/v31.2.4 %}
+
+{% 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 | 205 | 205 | 0 | All Passed |
+| AI Assist View | 431 | 431 | 0 | All Passed |
+| App Bar | 67 | 67 | 0 | All Passed |
+| AutoComplete | 200 | 200 | 0 | All Passed |
+| Breadcrumb | 160 | 160 | 0 | All Passed |
+| Bullet Chart | 168 | 168 | 0 | All Passed |
+| Button | 144 | 144 | 0 | All Passed |
+| ButtonGroup | 120 | 120 | 0 | All Passed |
+| calendar | 177 | 177 | 0 | All Passed |
+| Carousel | 61 | 61 | 0 | All Passed |
+| Chart | 4919 | 4919 | 0 | All Passed |
+| Chat UI | 184 | 184 | 0 | All Passed |
+| CircularGauge | 429 | 429 | 0 | All Passed |
+| ColorPicker | 130 | 130 | 0 | All Passed |
+| Combo Box | 139 | 139 | 0 | All Passed |
+| Common | 904 | 904 | 0 | All Passed |
+| Context Menu | 105 | 105 | 0 | All Passed |
+| Data Grid | 3662 | 3662 | 0 | All Passed |
+| Date Picker | 426 | 426 | 0 | All Passed |
+| Date Range Picker | 519 | 519 | 0 | All Passed |
+| Date Time Picker | 324 | 324 | 0 | All Passed |
+| Diagram | 12813 | 12813 | 0 | All Passed |
+| Dialog | 63 | 63 | 0 | All Passed |
+| DropDown Button | 132 | 132 | 0 | All Passed |
+| Dropdown List | 194 | 194 | 0 | All Passed |
+| Dropdown Tree | 105 | 105 | 0 | All Passed |
+| File Manager | 2187 | 2187 | 0 | All Passed |
+| Floating Action Button | 132 | 132 | 0 | All Passed |
+| Gantt | 3522 | 3522 | 0 | All Passed |
+| HeatMap Chart | 635 | 635 | 0 | All Passed |
+| Image Editor | 1653 | 1653 | 0 | All Passed |
+| In-place Editor | 642 | 642 | 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 | 1368 | 1368 | 0 | All Passed |
+| Mention | 35 | 35 | 0 | All Passed |
+| Menu | 187 | 187 | 0 | All Passed |
+| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
+| Multiselect Dropdown | 422 | 422 | 0 | All Passed |
+| OTP Input | 240 | 240 | 0 | All Passed |
+| Pivot Table | 5303 | 5303 | 0 | All Passed |
+| Progress Bar | 81 | 81 | 0 | All Passed |
+| Progress Button | 132 | 132 | 0 | All Passed |
+| Query Builder | 480 | 480 | 0 | All Passed |
+| RadioButton | 36 | 36 | 0 | All Passed |
+| RangeNavigator | 140 | 140 | 0 | All Passed |
+| Rating | 198 | 198 | 0 | All Passed |
+| Ribbon | 623 | 623 | 0 | All Passed |
+| Rich Text Editor | 5095 | 5095 | 0 | All Passed |
+| schedule | 4608 | 4608 | 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 | 58 | 58 | 0 | All Passed |
+| Speech To Text | 200 | 200 | 0 | All Passed |
+| Speed Dial | 122 | 122 | 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 | 54 | 54 | 0 | All Passed |
+| Time Picker | 180 | 180 | 0 | All Passed |
+| Timeline | 213 | 213 | 0 | All Passed |
+| Toast | 139 | 139 | 0 | All Passed |
+| Toolbar | 112 | 112 | 0 | All Passed |
+| ToolTip | 136 | 136 | 0 | All Passed |
+| TreeGrid | 3786 | 3786 | 0 | All Passed |
+| Treemap | 326 | 326 | 0 | All Passed |
+| Treeview | 370 | 370 | 0 | All Passed |
\ No newline at end of file
diff --git a/ej2-vue/Release-notes/31.2.5.md b/ej2-vue/Release-notes/31.2.5.md
new file mode 100644
index 000000000..23bdadb97
--- /dev/null
+++ b/ej2-vue/Release-notes/31.2.5.md
@@ -0,0 +1,98 @@
+---
+title: Essential Studio for Vue Release Notes - v31.2.5
+description: Learn here about the controls in the Essential Studio for Vue Weekly Release - Release Notes - v31.2.5
+platform: ej2-vue
+documentation: ug
+---
+
+# Essential Studio for Vue - v31.2.5 Release Notes
+
+{% include release-info.html date="November 04, 2025" version="v31.2.5" passed="63682" failed="0" %}
+
+{% directory path: _includes/release-notes/v31.2.5 %}
+
+{% 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 | 205 | 205 | 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 | 168 | 168 | 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 | 4957 | 4957 | 0 | All Passed |
+| Chat UI | 184 | 184 | 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 | 904 | 904 | 0 | All Passed |
+| Context Menu | 105 | 105 | 0 | All Passed |
+| Data Grid | 3663 | 3663 | 0 | All Passed |
+| Date Picker | 426 | 426 | 0 | All Passed |
+| Date Range Picker | 519 | 519 | 0 | All Passed |
+| Date Time Picker | 324 | 324 | 0 | All Passed |
+| Diagram | 12813 | 12813 | 0 | All Passed |
+| Dialog | 63 | 63 | 0 | All Passed |
+| DropDown Button | 132 | 132 | 0 | All Passed |
+| Dropdown List | 194 | 194 | 0 | All Passed |
+| Dropdown Tree | 105 | 105 | 0 | All Passed |
+| File Manager | 2188 | 2188 | 0 | All Passed |
+| Floating Action Button | 174 | 174 | 0 | All Passed |
+| Gantt | 3522 | 3522 | 0 | All Passed |
+| HeatMap Chart | 635 | 635 | 0 | All Passed |
+| Image Editor | 1653 | 1653 | 0 | All Passed |
+| In-place Editor | 642 | 642 | 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 | 1368 | 1368 | 0 | All Passed |
+| Mention | 35 | 35 | 0 | All Passed |
+| Menu | 187 | 187 | 0 | All Passed |
+| Multicolumn Combo Box | 254 | 254 | 0 | All Passed |
+| Multiselect Dropdown | 422 | 422 | 0 | All Passed |
+| OTP Input | 240 | 240 | 0 | All Passed |
+| Pivot Table | 5303 | 5303 | 0 | All Passed |
+| Progress Bar | 81 | 81 | 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 | 623 | 623 | 0 | All Passed |
+| Rich Text Editor | 5095 | 5095 | 0 | All Passed |
+| schedule | 4644 | 4644 | 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 | 58 | 58 | 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 | 54 | 54 | 0 | All Passed |
+| Time Picker | 180 | 180 | 0 | All Passed |
+| Timeline | 213 | 213 | 0 | All Passed |
+| Toast | 139 | 139 | 0 | All Passed |
+| Toolbar | 112 | 112 | 0 | All Passed |
+| ToolTip | 136 | 136 | 0 | All Passed |
+| TreeGrid | 3786 | 3786 | 0 | All Passed |
+| Treemap | 326 | 326 | 0 | All Passed |
+| Treeview | 370 | 370 | 0 | All Passed |
\ No newline at end of file
diff --git a/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md b/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md
index 52d07bc54..33b13d583 100644
--- a/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md
+++ b/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md
@@ -8,58 +8,63 @@ documentation: ug
domainurl: ##DomainURL##
---
+# Integrate Gemini AI with Vue AI AssistView component
-# Gemini AI with Vue AI AssistView component
+The AI AssistView component integrates with Google’s [Gemini](https://ai.google.dev/gemini-api/docs) API to deliver intelligent conversational interfaces. It leverages advanced natural language understanding to interpret user input, maintain context throughout interactions, and provide accurate, relevant responses. By configuring secure authentication and data handling, developers can unlock powerful AI-driven communication features that elevate user engagement and streamline support experiences.
-The Syncfusion AI AssistView supports integration with [Gemini](https://ai.google.dev/gemini-api/docs), enabling advanced conversational AI features in your Vue applications.
+## Prerequisites
-## Getting Started with the AI AssistView component
+* **Node.js**: Version 16 or higher with npm.
-Before integrating Gemini AI, ensure that the Syncfusion AI AssistView component is correctly rendered in your Vue app:
+* **Google Account**: For generating a Gemini API key.
-[Vue Getting Started Guide](../getting-started)
+* **Syncfusion AI AssistView**: Package [@syncfusion/ej2-vue-interactive-chat](https://www.npmjs.com/package/@syncfusion/ej2-vue-interactive-chat) installed.
-## Prerequisites
+* **Marked Library**: For parsing Markdown responses (`npm install marked --save`).
-* Requires `Node.js` (v16 or higher) and `npm`.
-* Google account to generate API key on accessing [Gemini](https://ai.google.dev/gemini-api/docs).
-* Syncfusion AI AssistView for Vue `@syncfusion/ej2-vue-interactive-chat` installed in your project.
+## Set Up the Vue Environment
+
+Follow the [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your Vue application.
## Install Dependencies
-Install the Syncfusion AI AssistView in your project
+Install the required packages:
+
+* Google Generative AI SDK:
-```bash
+```bash
-npm install @syncfusion/ej2-vue-interactive-chat --save
+npm install @google/generative-ai
```
-Install the Gemini AI dependencies
+* Marked Library:
```bash
-npm install @google/generative-ai
+npm install marked --save
```
## Generate API Key
-1. Go to [Google AI Studio](https://aistudio.google.com/app/apikey) and sign in with your google account. If you don’t have one, create a new account.
+1. **Access Google AI Studio**: Instructs users to sign into [Google AI Studio](https://aistudio.google.com/app/apikey) with a Google account or create a new account if needed.
-2. Once logged in, click on `Get API Key` from the left-hand menu or the top-right corner of the dashboard.
+2. **Navigate to API Key Creation**: Go to the `Get API Key` option in the left-hand menu or top-right corner of the dashboard. Click the `Create API Key` button.
-3. Click the `Create API Key` button. You’ll be prompted to either select an existing Google Cloud project or create a new one. Choose the appropriate option and proceed.
+3. **Project Selection**: Choose an existing Google Cloud project or create a new one.
-4. After selecting or creating a project, your API key will be generated and displayed. Copy the key and store it securely, as it will only be shown once.
+4. **API Key Generation**: After project selection, the API key is generated. Users are instructed to copy and store the key securely, as it is shown only once.
-> `Security Note`: Never commit the API key to version control. Use environment variables or a secret manager for production.
+> `Security Note`: Advises against committing the API key to version control and recommends using environment variables or a secret manager in production.
## Configure Gemini AI with AI AssistView
-Create `src/App.Vue` to integrate the Gemini AI with AI AssistView component
+To integrate Gemini AI with the Syncfusion AI AssistView component in your application:
+
+* Modify the `src/App.Vue` file to host the integration logic.
-* Add your generated `API Key` at the line
+* Add your Gemini API key securely in the configuration:
```bash
@@ -77,15 +82,3 @@ const geminiApiKey = 'Place your API key here';
{% endtabs %}
{% previewsample "page.domainurl/code-snippet/ai-assistview/ai-integrations/gemini-ai" %}
-
-## Run and Test
-
-Run the application in the browser using the following command.
-
-```bash
-
-npm run dev
-
-```
-
-Open the hosted link to interact with the Gemini AI for dynamic response
diff --git a/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md b/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md
index c94687b0f..b674d58f4 100644
--- a/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md
+++ b/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md
@@ -8,31 +8,33 @@ documentation: ug
domainurl: ##DomainURL##
---
-# LLM via Ollama with Vue AI AssistView component
+# Integrate LLM via Ollama with Vue AI AssistView component
-The Syncfusion AI AssistView supports integration with [LLM via Ollama](https://ollama.com), enabling advanced conversational AI features in your applications. The component acts as a UI for a support bot, where user prompts are sent to the selected AI service via API calls.
+The AI AssistView component integrates with [LLM via Ollama](https://ollama.com) to enable advanced conversational AI features in your Vue application. The component acts as a user interface where user prompts are sent to the selected LLM model via API calls, providing natural language understanding and context-aware responses.
## Prerequisites
-* Requires `Node.js` (v16 or higher) and `npm`.
-* [Ollama](https://ollama.com) application should be installed to run and manage LLM models locally.
-* Syncfusion AI AssistView for Vue `@syncfusion/ej2-vue-interactive-chat` installed in your react project.
+Before starting, ensure you have the following:
-## Step 1: Getting Started with the AI AssistView component
+* **Node.js**: Version 16 or higher with npm.
-Before integrating LLM model, ensure that the Syncfusion AI AssistView component is correctly rendered in your application:
+* [Ollama](https://ollama.com) installed to run and manage LLM models locally.
-[ Vue Getting Started Guide](../getting-started)
+* **Syncfusion AI AssistView**: Package [@syncfusion/ej2-vue-interactive-chat](https://www.npmjs.com/package/@syncfusion/ej2-vue-interactive-chat) installed.
-## Step 2: Install Dependencies
+* **Marked Library**: For parsing Markdown responses (`npm install marked --save`).
-* Install the Syncfusion AI AssistView in your project
+## Set Up the Vue Environment
-```bash
+Follow the [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your vue application.
-npm install @syncfusion/ej2-vue-interactive-chat --save
+## Install Dependency
-```
+To install the marked library, run `npm install marked --save` in your project directory to add it as a dependency in your package.json file.
+
+## Configuring Ollama
+
+Install Ollama for your operating system:
* Download and install `Ollama` based on your operating system:
@@ -45,7 +47,7 @@ npm install @syncfusion/ej2-vue-interactive-chat --save
{% endhighlight %}
-{% highlight ts tabtitle="MAC" %}
+{% highlight ts tabtitle="macOS" %}
1. Visit [macOS](https://ollama.com/download/mac)
2. Click `Download for macOS` to get `.dmg file`
@@ -67,9 +69,9 @@ curl -fSSL https://ollama.com/install.sh | sh
{% endhighlight %}
{% endtabs %}
-## Step 3: Install and Run an Ollama Model
+## Download and run an Ollama model
-1. Download and run a model using the following command. Replace with your preferred model (e.g., `llama3`, `phi4`). See the [Ollama model](https://ollama.com/search) library for available models
+* Download and run a model using the following command. Replace with your preferred model (e.g., `llama3`, `phi4`). See the [Ollama model](https://ollama.com/search) library for available models.
```bash
@@ -77,7 +79,7 @@ ollama run deepseek-r1
```
-2. Once the model download is complete, start the Ollama server to make the model accessible:
+* After the model download completes, start the Ollama server to make the model accessible:
```bash
@@ -85,9 +87,9 @@ ollama serve
```
-## Step 4: Configure AI AssistView in React
+## Configure AI AssistView with Ollama
-Create `src/App.js` to connect the Syncfusion AI AssistView to the LLM model:
+Modify the `src/App.js` file to connect the Syncfusion AI AssistView to the LLM model:
{% tabs %}
{% highlight html tabtitle="Composition API (~/src/App.vue)" %}
@@ -99,15 +101,3 @@ Create `src/App.js` to connect the Syncfusion AI AssistView to the LLM model:
{% endtabs %}
{% previewsample "page.domainurl/code-snippet/ai-assistview/ai-integrations/llm-model" %}
-
-## Step 5: Run and Test
-
-Run the application in the browser using the following command.
-
-```bash
-
-npm run dev
-
-```
-
-Open the hosted link to interact with your AI model where you can enter prompts and receive responses from the Ollama model.
\ No newline at end of file
diff --git a/ej2-vue/ai-assistview/ai-integrations/openai-integration.md b/ej2-vue/ai-assistview/ai-integrations/openai-integration.md
index 57bf1f9e5..e93724bf9 100644
--- a/ej2-vue/ai-assistview/ai-integrations/openai-integration.md
+++ b/ej2-vue/ai-assistview/ai-integrations/openai-integration.md
@@ -1,56 +1,56 @@
---
layout: post
-title: Azure Open AI With Vue AI AssistView component | Syncfusion
-description: Checkout and learn about Integration of Azure Open AI With Vue AI AssistView component of Syncfusion Essential JS 2 and more details.
+title: Azure OpenAI With Vue AI AssistView component | Syncfusion
+description: Checkout and learn about Integration of Azure OpenAI With Vue AI AssistView component of Syncfusion Essential JS 2 and more details.
platform: ej2-vue
control: AI AssistView
documentation: ug
domainurl: ##DomainURL##
---
-# Azure Open AI with Vue AI AssistView component
+# Integrate Azure OpenAI with Vue AI AssistView component
-The Syncfusion AI AssistView supports integration with [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai), enabling advanced conversational AI features in your Vue applications.
+The AI AssistView component integrates with [Azure OpenAI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai) to enable advanced conversational AI features in your applications. The component acts as a user interface, where user prompts are sent to the Azure OpenAI service via API calls, providing natural language understanding and context-aware responses.
-## Getting Started with the AI AssistView component
-
-Before integrating Azure Open AI, ensure that the Syncfusion AI AssistView component is correctly rendered in your Vue app:
+## Prerequisites
-[Vue Getting Started Guide](../getting-started)
+* **Node.js**: Version 16 or higher with npm.
-## Prerequisites
+* **Azure Account**: With access to Azure OpenAI services and a generated API key.
-* Requires `Node.js` (v16 or higher) and `npm`.
-* An Azure account with access to [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai) services and a generated API key.I
-* Syncfusion AI AssistView for Vue `@syncfusion/ej2-vue-interactive-chat` installed in your project.
+* **Syncfusion AI AssistView**: Package [@syncfusion/ej2-vue-interactive-chat](https://www.npmjs.com/package/@syncfusion/ej2-vue-interactive-chat) installed.
-## Install Dependencies
+* **Marked Library**: For parsing Markdown responses (`npm install marked --save`).
-Install the Syncfusion AI AssistView in your project
+## Set Up the vue Environment
-```bash
+Follow the [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your vue application.
-npm install @syncfusion/ej2-vue-interactive-chat --save
+## Install Dependency
-```
+To install the marked library, run `npm install marked --save` in your project directory to add it as a dependency in your package.json file.
-## Generate Azure API Key
+## Configure Azure OpenAI
-1. Log in to the [Azure Portal](https://portal.azure.com/#home) and navigate to your Azure Open AI resource.
+1. Log in to the [Azure Portal](https://portal.azure.com/#home) and navigate to your Azure OpenAI resource.
-2. Under Resource Management, select Keys and Endpoint to retrieve your API key and endpoint URL.
+2. Under resource Management, select keys and endpoint to retrieve your API key and endpoint URL.
-3. Copy the API key, endpoint, and deployment name (e.g., gpt-4o-mini). Ensure the API version matches your resource configuration.
+3. Note the following values:
+ - API key
+ - Endpoint
+ - API version (must be supported by your resource)
+ - Deployment name (for example, gpt-4o-mini)
4. Store these values securely, as they will be used in your application.
> `Security Note`: Never expose your API key in client-side code for production applications. Use a server-side proxy or environment variables to manage sensitive information securely.
-## Configure Open AI with AI AssistView
+## Configure AI AssistView with Azure OpenAI
-Create `src/App.js` to integrate the Azure Open AI with AI AssistView component
+Modify the `src/App.js` file to integrate the Azure OpenAI with AI AssistView component
-* Update the following configuration values with your Azure Open AI details:
+* Update the following configuration values with Azure OpenAI details:
```bash
@@ -71,15 +71,3 @@ const azureDeploymentName = 'Your_Deployment_Name';
{% endtabs %}
{% previewsample "page.domainurl/code-snippet/ai-assistview/ai-integrations/open-ai" %}
-
-## Run and Test
-
-Run the application in the browser using the following command.
-
-```bash
-
-npm run dev
-
-```
-
-Open the hosted link to interact with your Azure Open AI for dynamic response.
diff --git a/ej2-vue/ai-assistview/speech/speech-to-text.md b/ej2-vue/ai-assistview/speech/speech-to-text.md
index 15b0c6587..7f8f3c42a 100644
--- a/ej2-vue/ai-assistview/speech/speech-to-text.md
+++ b/ej2-vue/ai-assistview/speech/speech-to-text.md
@@ -10,7 +10,7 @@ domainurl: ##DomainURL##
# Speech-to-Text in Vue AI AssistView
-The Syncfusion Vue AI AssistView component supports `Speech-to-Text` functionality through the browser's [Web Speech API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API), enabling conversion of spoken words into text using the device's microphone.
+The Syncfusion Vue AI AssistView component integrates `Speech-to-Text` functionality through the browser's [Web Speech API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API). This enables the conversion of spoken words into text using the device's microphone, allowing users to interact with the AI AssistView through voice input.
## Prerequisites
@@ -24,7 +24,18 @@ Before integrating `Speech-to-Text`, ensure the following:
## Configure Speech-to-Text
-To enable Speech-to-Text functionality, modify the `App.vue` file to incorporate the Web Speech API. The [SpeechToText](https://ej2.syncfusion.com/vue/documentation/speech-to-text/getting-started) component listens for microphone input, transcribes spoken words, and updates the AI AssistView's editable footer with the transcribed text. The transcribed text is then sent as a prompt to the Azure OpenAI service via the AI AssistView component.
+To enable Speech-to-Text functionality in the Vue AI AssistView component, update the `App.vue` file to incorporate the Web Speech API.
+
+The [SpeechToText](https://ej2.syncfusion.com/vue/documentation/speech-to-text/getting-started) component listens to audio input from the device’s microphone, transcribes spoken words into text, and updates the AI AssistView’s editable footer using the [footerTemplate](https://ej2.syncfusion.com/vue/documentation/api/ai-assistview/#footertemplate) property to display the transcribed text. The transcribed text is then sent as a prompt to the Azure OpenAI service via the AI AssistView component.
+
+### Configuration Options
+
+* **[`lang`](https://ej2.syncfusion.com/vue/documentation/api/speech-to-text/#lang)**: Specifies the language for speech recognition. For example:
+
+ * `en-US` for American English
+ * `fr-FR` for French
+
+* **[`allowInterimResults`](https://ej2.syncfusion.com/vue/documentation/api/speech-to-text/#allowInterimResults)**: Set to `true` to receive real-time (interim) recognition results, or `false` to receive only final results.
{% tabs %}
{% highlight html tabtitle="Composition API (~/src/App.vue)" %}
@@ -37,6 +48,14 @@ To enable Speech-to-Text functionality, modify the `App.vue` file to incorporate
{% previewsample "page.domainurl/code-snippet/ai-assistview/speech/stt" %}
+## Error Handling
+
+The `SpeechToText` component provides events to handle errors that may occur during speech recognition. For more information, refer to the [Error Handling](https://ej2.syncfusion.com/vue/documentation/speech-to-text/speech-recognition#error-handling) section in the documentation.
+
+## Browser Compatibility
+
+The `SpeechToText` component relies on the [Speech Recognition API](https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition), which has limited browser support. Refer to the [Browser Compatibility](https://ej2.syncfusion.com/vue/documentation/speech-to-text/speech-recognition#browser-support) section for detailed information.
+
## See Also
* [Text-to-Speech](./text-to-speech.md)
diff --git a/ej2-vue/ai-assistview/speech/text-to-speech.md b/ej2-vue/ai-assistview/speech/text-to-speech.md
index 1102bcaca..a37f84768 100644
--- a/ej2-vue/ai-assistview/speech/text-to-speech.md
+++ b/ej2-vue/ai-assistview/speech/text-to-speech.md
@@ -10,7 +10,7 @@ domainurl: ##DomainURL##
# Text-to-Speech in Vue AI AssistView
-The Syncfusion Vue AI AssistView component supports `Text-to-Speech` (TTS) functionality using the browser's Web Speech API specifically using the [SpeechSynthesisUtterance](https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance) interface to convert AI-generated response into spoken audio.
+The Syncfusion Vue AI AssistView component integrates `Text-to-Speech` (TTS) functionality using the browser's Web Speech API, specifically the [SpeechSynthesisUtterance](https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance) interface. This allows AI-generated responses to be converted into spoken audio, enhancing accessibility and user interaction.
## Prerequisites
diff --git a/ej2-vue/ai-coding-assistant/mcp-server.md b/ej2-vue/ai-coding-assistant/mcp-server.md
new file mode 100644
index 000000000..692547e97
--- /dev/null
+++ b/ej2-vue/ai-coding-assistant/mcp-server.md
@@ -0,0 +1,213 @@
+---
+layout: post
+title: SyncfusionVueAssistant MCP Server | Syncfusion
+description: Learn how to configure and use SyncfusionVueAssistant MCP server for intelligent code generation, documentation, and troubleshooting in Vue apps.
+control: Getting started with SyncfusionVueAssistant MCP Server
+platform: ej2-vue
+documentation: ug
+domainurl: ##DomainURL##
+---
+
+# SyncfusionVueAssistant MCP Server
+
+## Overview
+
+The [SyncfusionVueAssistant](https://www.npmjs.com/package/@syncfusion/vue-assistant) is a specialized [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro) server that provides intelligent assistance for developers using Syncfusion's Vue component libraries. This tool seamlessly integrates with compatible [MCP clients](https://modelcontextprotocol.io/clients) to enhance your development workflow when building Vue applications with Syncfusion® components.
+
+### Key Benefits
+
+* Intelligent code generation for Syncfusion® Vue components.
+* Detailed component documentation and usage examples.
+* Troubleshooting assistance for common integration challenges.
+
+## Prerequisites
+
+Before using [SyncfusionVueAssistant](https://www.npmjs.com/package/@syncfusion/vue-assistant), ensure you have:
+
+* Required [node](https://nodejs.org/en/) version >= 18
+* A [compatible MCP client](https://modelcontextprotocol.io/clients) (VS Code with GitHub Copilot, [Syncfusion® CodeStudio](https://www.syncfusion.com/code-studio/), etc.)
+* An active Syncfusion® license (any of the following):
+ - [Commercial License](https://www.syncfusion.com/sales/unlimitedlicense)
+ - [Free Community License](https://www.syncfusion.com/products/communitylicense)
+ - [Free Trial](https://www.syncfusion.com/account/manage-trials/start-trials)
+* An active [API KEY](https://syncfusion.com/account/api-key)
+
+## Unlimited Access
+
+Syncfusion® offers unlimited access to this MCP server. There are no restrictions on:
+
+* Number of requests
+* Components usage
+* Query caps
+* Usage duration
+
+This ensures users can fully leverage Syncfusion® components to enhance their development experience without limitations.
+
+## Installation and setup
+
+Before you can invoke the `SyncfusionVueAssistant` MCP server, you need to configure your MCP client with these core settings. The **Generic MCP Server Settings** shown below are identical across all clients:
+
+### Generic MCP Server Settings
+
+- **npm package name**: `@syncfusion/vue-assistant`
+- **Type**: stdio (standard input/output transport)
+- **Command**: npx
+- **Arguments**: -y
+- **Server name**: SyncfusionVueAssistant
+
+You need to add your [Syncfusion API key](https://syncfusion.com/account/api-key) as an env parameter in the configuration file:
+
+```json
+"env": {
+ "Syncfusion_API_Key": "YOUR_API_KEY"
+}
+```
+
+Below are setup instructions for popular MCP clients:
+
+### Syncfusion® Code Studio
+
+* In [Code Studio](https://www.syncfusion.com/code-studio/), open MCP Marketplace and navigate to the `Custom Servers` tab.
+* Enter the Server Name as `vue-mcp`, choose Server Type as npm package, and set the NPM Package name to `@syncfusion/vue-assistant`.
+* Add an environment variable as `Syncfusion_API_Key` and value as your [Syncfusion API key](https://syncfusion.com/account/api-key), then click **Install Server**.
+* Once installed, the server will appear in the User Installed Server list, and will be added to the **config.yaml** file.
+* The server is now ready for use in Code Studio. For more details, refer to the [Code Studio documentation](https://help.syncfusion.com/code-studio/reference/configure-properties/mcp/customservers#npm-server).
+
+### VS Code (GitHub Copilot MCP)
+
+* To configure an MCP server for a specific workspace, you can create a `.vscode/mcp.json` file in your workspace folder.
+
+```json
+{
+ "servers": {
+ "syncfusion-vue-assistant": {
+ "type": "stdio",
+ "command": "npx",
+ "args": [
+ "-y",
+ "@syncfusion/vue-assistant@latest"
+ ],
+ "env": {
+ "Syncfusion_API_Key": "YOUR_API_KEY"
+ }
+ }
+ }
+}
+```
+
+* After updating the configuration in settings.json, you'll notice a "Start" option at the top of the config. This allows you to easily start the [SyncfusionVueAssistant](https://www.npmjs.com/package/@syncfusion/vue-assistant) server directly from the settings interface without additional commands.
+
+* Confirm the server is active by checking for a message like: `SyncfusionVueAssistant is running...` in the output.
+
+* For additional guidance, refer to the [VS Code documentation](https://code.visualstudio.com/docs/copilot/customization/mcp-servers#_add-an-mcp-server).
+
+### Cursor
+
+To configure an MCP server for a specific workspace, you can create a `.cursor/mcp.json` file in your workspace folder.
+
+```json
+{
+ "mcpServers": {
+ "syncfusion-vue-assistant": {
+ "type": "stdio",
+ "command": "npx",
+ "args": [
+ "-y",
+ "@syncfusion/vue-assistant@latest"
+ ],
+ "env": {
+ "Syncfusion_API_Key": "YOUR_API_KEY"
+ }
+ }
+ }
+}
+```
+
+For more details, refer to the [Cursor documentation](https://cursor.com/docs/context/mcp#using-mcp-json).
+
+### JetBrains IDEs
+
+* Go to Settings -> Tools -> AI Assistant -> Model Context Protocol (MCP).
+* Click + Add to add a new MCP server configuration.
+* In the New MCP Server dialog, switch the dropdown as `As JSON` and add the following config:
+
+```json
+{
+ "mcpServers": {
+ "syncfusion-vue-assistant": {
+ "command": "npx.cmd",
+ "args": [
+ "-y",
+ "@syncfusion/vue-assistant@latest"
+ ],
+ "env": {
+ "Syncfusion_API_Key": "YOUR_API_KEY"
+ }
+ }
+ }
+}
+```
+
+* Click OK and Apply.
+
+For further assistance, see the [JetBrains documentation](https://www.jetbrains.com/help/ai-assistant/mcp.html#connect-to-an-mcp-server).
+
+> For more detailed information about configuring MCP servers in various clients, refer to the official documentations, e.g., [Windsurf](https://docs.windsurf.com/windsurf/cascade/mcp#mcp-config-json)
+
+## Usage
+
+To activate the SyncfusionVueAssistant MCP server:
+
+1. Start your prompt with one of the following:
+ * 'SyncfusionVueAssistant'
+ * '/syncfusion-vue-assistant'
+ * '/syncfusion-vue'
+ * '@syncfusion-vue'
+ * '@ask_syncfusion_vue'
+ * 'ej2-vue'
+
+ In VS Code, use `#SyncfusionVueAssistant` for direct invocation.
+
+2. Grant permission for the server to run (for the session, workspace, or always).
+3. For best results, start a new chat for each new topic to maintain clean context.
+
+### Mode availability
+
+Syncfusion® MCP Servers provide full access to all AI interaction modes — Ask/Chat, Edit, and Agent — across supported MCP clients.
+
+### Best Practices for Effective Usage
+
+1. `Be specific`: Mention both platform and component (e.g., "How do I create a Syncfusion Vue Grid with paging and filtering?").
+2. `Provide context`: Include details about your use case for more targeted solutions.
+3. `Use descriptive queries`: Avoid vague questions that lack necessary context.
+4. `Start fresh for new topics`: Begin a new chat session when switching components or topics.
+
+### Example Queries
+
+Here are some effective ways to use [SyncfusionVueAssistant](https://www.npmjs.com/package/@syncfusion/vue-assistant):
+
+ * "Create a Syncfusion Vue Grid component with paging, sorting and filtering."
+ * "How do I implement data binding with Syncfusion Vue scheduler?"
+ * "Show me how to create a dashboard with multiple Syncfusion components."
+
+## Troubleshooting
+
+If you encounter issues:
+
+ * Verify your API key is correctly configured.
+ * Ensure the MCP server is enabled in your client's tools selection.
+ * Check that you're using a compatible MCP client version.
+ * Try restarting your development environment.
+
+## Support
+
+Product support is available through the following mediums.
+
+* [Support ticket](https://support.syncfusion.com/support/tickets/create) - Guaranteed Response in 24 hours \| Unlimited tickets \| Holiday support
+* [Community forum](https://www.syncfusion.com/forums/essential-js2)
+* [Request feature or report bug](https://www.syncfusion.com/feedback/javascript)
+* Live chat
+
+## See also
+
+* [Syncfusion Vue Documentation](https://ej2.syncfusion.com/vue/documentation)
diff --git a/ej2-vue/ai-coding-assistant/overview.md b/ej2-vue/ai-coding-assistant/overview.md
new file mode 100644
index 000000000..52815a623
--- /dev/null
+++ b/ej2-vue/ai-coding-assistant/overview.md
@@ -0,0 +1,70 @@
+---
+layout: post
+title: Syncfusion AI Coding Assistant Overview | Syncfusion
+description: Learn how Syncfusion AI Coding Assistant boost Vue productivity by generating accurate code snippets, configuration examples, and contextual guidance.
+control: Syncfusion AI Coding Assistant Overview
+platform: ej2-vue
+documentation: ug
+domainurl: ##DomainURL##
+---
+
+# Syncfusion® AI Coding Assistant Overview
+
+The **Syncfusion® AI Coding Assistant** are designed to streamline your development workflow when building Vue applications with Syncfusion® components. It uses contextual knowledge of the Syncfusion® component library to generate accurate code snippets, configuration examples, and guided explanations—minimizing documentation searches and maximizing productivity.
+
+AI Coding Assistant:
+
+* **The SyncfusionVueAssistant MCP Server**
+ Processes advanced prompts and returns tailored code suggestions via [MCP-compatible clients](https://modelcontextprotocol.io/clients).
+
+## Getting Started
+
+To use the AI Coding Assistant, you need:
+
+* A [Syncfusion® user account](https://www.syncfusion.com/account)
+* An active Syncfusion® license (any of the following):
+ - [Commercial License](https://www.syncfusion.com/sales/unlimitedlicense)
+ - [Free Community License](https://www.syncfusion.com/products/communitylicense)
+ - [Free Trial](https://www.syncfusion.com/account/manage-trials/start-trials)
+* An active [API KEY](https://syncfusion.com/account/api-key)
+* A [Vue application that includes SyncfusionVue](https://ej2.syncfusion.com/vue/documentation/getting-started/vue-3-js-composition)
+
+## Unlimited Access
+
+Syncfusion® offers unlimited access to the AI Coding Assistant, with no limitations on:
+
+* Number of requests
+* Components usage
+* Query caps
+* Usage duration
+
+This ensures users can fully leverage Syncfusion® components to enhance their development experience without limitations.
+
+## Best Practices
+
+* Initial Setup: Use the tools to quickly add and configure Syncfusion® components in your Vue application.
+* Feature Tuning: Enable or disable component features through prompt-based configuration for tailored functionality.
+* Data Binding: Generate sample data for testing and prototyping. Avoid using sensitive or production data to ensure security.
+* Step-by-step explanations: Use annotated code to understand component behavior. Note that the level of detail may vary depending on the tool, mode, and AI model used. Refer to the [Syncfusion® Vue Documentation](https://ej2.syncfusion.com/vue/documentation) for in-depth information.
+* Troubleshooting: Resolve common issues with AI-generated suggestions. For complex problems, refer to [documentation](https://ej2.syncfusion.com/vue/documentation) or [support](https://support.syncfusion.com/support/tickets/create).
+
+> Always check AI-generated content and code for accuracy before using it.
+
+## Recommendations
+
+* Session Management: Start new sessions when switching tasks to ensure prompt relevance and maintain content focus.
+* Model Compatibility: For optimal performance, use the tools with advanced AI models such as GPT-5 or Claude Sonnet 4.
+
+## Privacy & Data Handling
+
+The Syncfusion® AI Coding Assistant is designed with privacy in mind:
+
+* The tools do not access your project files or workspace directly.
+* User prompts are not stored by any of the tools or used for any other purpose.
+* Prompts are not used to train Syncfusion® models.
+* The assistant generates context, while the final output is handled by your selected AI model.
+
+## See also
+
+* Add the [SyncfusionVueAssistant MCP Server](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistant/mcp-server) to an MCP-enabled client
+* [Syncfusion® Vue Documentation](https://ej2.syncfusion.com/vue/documentation)
diff --git a/ej2-vue/chart/getting-started.md b/ej2-vue/chart/getting-started.md
index 90e1e2f21..d4dbcaa30 100644
--- a/ej2-vue/chart/getting-started.md
+++ b/ej2-vue/chart/getting-started.md
@@ -12,13 +12,15 @@ domainurl: ##DomainURL##
This article provides a step-by-step guide for setting up a Vue 2 project using [Vue-CLI](https://cli.vuejs.org/) and integrating the Syncfusion® Vue Chart component.
+> **Ready to streamline your Syncfusion® Vue development?** Discover the full potential of Syncfusion® Vue components with Syncfusion® AI Coding Assistant. Effortlessly integrate, configure, and enhance your projects with intelligent, context-aware code suggestions, streamlined setups, and real-time insights—all seamlessly integrated into your preferred AI-powered IDEs like VS Code, Cursor, Syncfusion® CodeStudio and more. [Explore Syncfusion® AI Coding Assistant](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistant/overview)
+
To get start quickly with Vue Charts, you can check on this video:
{% youtube "https://www.youtube.com/watch?v=RplZL-3B1G4&t=3s" %}
## Prerequisites
-[System requirements for Syncfusion® Vue UI components](https://ej2.syncfusion.com/vue/documentation/system-requirements/)
+[System requirements for Syncfusion® Vue UI components](https://ej2.syncfusion.com/vue/documentation/system-requirements)
## Dependencies
diff --git a/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md b/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md
index a7a3cb0c6..6a1e17492 100644
--- a/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md
+++ b/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md
@@ -8,34 +8,34 @@ documentation: ug
domainurl: ##DomainURL##
---
-# Microsoft Bot Framework with Vue Chat UI component
+# Integrate Microsoft Bot Framework with Vue Chat UI component
-The Syncfusion vue Chat UI supports integration with a [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0) bot hosted on Azure, enabling a custom chat interface for seamless user interaction. The process involves setting up a secure backend token server, configuring the bot in Azure, and integrating the Syncfusion Chat UI in a vue application.
+The Chat UI component integrates with a [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0) bot hosted on Azure, enabling a custom chat interface for seamless user interaction. The process involves setting up a secure backend token server, configuring Direct Line in Azure, and integrating the Chat UI in the application.
-## Getting Started with the Chat UI Component
-
-Before integrating Microsoft Bot Framework, ensure that the Syncfusion Chat UI component is correctly rendered in your vue app:
+## Prerequisites
-[Vue Getting Started Guide](../getting-started)
+Before starting, ensure you have the following:
-## Prerequisites
+* **Node.js**: Version 16 or higher with npm.
* [Microsoft Azure Account](https://portal.azure.com/#home): Required to create and host the bot.
-* Node.js Environment: The backend portion requires Node.js and npm.
-* Syncfusion Chat UI for Vue: Install `@syncfusion/ej2-vue-interactive-chat` in your Vue project.
-* Deployed Azure Bot: A bot should be created and published using the Bot Framework, which is accessible via an Azure App Service. Refer to Microsoft's Bot Creation Guide.
+
+* **Syncfusion Chat UI**: Package [@syncfusion/ej2-vue-interactive-chat](https://www.npmjs.com/package/@syncfusion/ej2-vue-interactive-chat) installed.
+
+* **Deployed Azure Bot**: A bot should be created and published using the [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0), which is accessible via an Azure App Service. Refer to Microsoft's Bot Creation Guide.
+
+## Set Up the vue Environment
+
+Follow the [Getting Started](../getting-started) guide to configure and render the Chat UI component in your vue application.
## Install Dependencies
-* Install `frontend` dependencies for bot communication and the Syncfusion Chat UI:
+Install the required packages:
- * Install `directline-js` package to handle communication with the Bot Framework.
-
- * Install `axios` for the HTTP requests.
+* Install `frontend` dependencies for bot communication and the Syncfusion Chat UI:
```bash
-npm install @syncfusion/ej2-vue-interactive-chat --save
npm install directline-js axios --save
```
@@ -112,7 +112,7 @@ app.listen(port, () => console.log(`Token server running on http://localhost:${p
## Configure ChatUI
-Create `src/App.vue` to connect the Syncfusion Chat UI to the bot via the direct line API:
+Modify the `src/App.vue` file to connect the Chat UI to the bot via the direct line API:
{% tabs %}
{% highlight html tabtitle="Options API (~/src/App.vue)" %}
@@ -209,14 +209,14 @@ const messageSend = (args) => {
### Start the Token Server
-Navigate to the token-server folder and run the following command to start the server:
+Navigate to the `token-server` folder and run the following command to start the server:
```bash
node index.js
```
-## Start the Vue frontend
+### Start the Vue frontend
In a separate terminal window, navigate to your Vue project folder and start the development server:
diff --git a/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md b/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md
index 5f6dddc29..d8cd6ce88 100644
--- a/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md
+++ b/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md
@@ -8,46 +8,41 @@ documentation: ug
domainurl: ##DomainURL##
---
-# Google Dialogflow With Vue Chat UI component
+# Integrate Google Dialogflow With Vue Chat UI component
-The Syncfusion Chat UI supports integration with Google Dialogflow, enabling advanced conversational AI features in your Vue applications.
+The Chat UI component integrates with [Google Dialogflow](https://cloud.google.com/dialogflow/docs) to enable advanced conversational AI features in your vue applications. The component acts as a user interface for a support bot, where user prompts are sent to the Dialogflow service via API calls, providing natural language understanding and context-aware responses.
-## Getting Started With the ChatUI Component
+## Prerequisites
-Before integrating Dialogflow, ensure that the Syncfusion Chat UI component is correctly rendered in your Vue app:
+* **Node.js**: Version 16 or higher with npm.
-[Vue Getting Started Guide](../getting-started)
+* **Google Account**: To access [Google Dialogflow](https://cloud.google.com/dialogflow/docs) and [Google Cloud Console](https://console.cloud.google.com/).
-## Prerequisites
+* **Syncfusion Chat UI**: Package [@syncfusion/ej2-vue-interactive-chat](https://www.npmjs.com/package/@syncfusion/ej2-vue-interactive-chat) installed.
-* Google account to access [Google Dialogflow](https://cloud.google.com/dialogflow/docs) and [Google Cloud Console](https://console.cloud.google.com/).
-* Backend requires `Node.js` (v16 or higher) and `npm`.
-* Syncfusion Chat UI for Vue `@syncfusion/ej2-vue-interactive-chat` installed in your Vue project.
* Dialogflow Service Account with the `Dialogflow API Client` role and its JSON key file.
-## Install Dependencies
+## Set Up the vue Environment
-* Install `backend` dependencies for Dialogflow and server setup:
+Follow the [Getting Started](../getting-started) guide to configure and render the Chat UI component in your vue application.
-```bash
+## Install Dependency
-npm install express body-parser dialogflow cors
-
-```
-* Install the Syncfusion Chat UI in your Vue project:
+`Backend` dependencies for Dialogflow and server setup:
```bash
-npm install @syncfusion/ej2-vue-interactive-chat --save
+npm install express body-parser dialogflow cors
```
+
## Set Up the Dialogflow Agent
1. In the dialogflow console, create an [agent](https://cloud.google.com/agent-assist/docs), set a name (e.g., `MyChatBot`), and configure the default language (e.g., English - `en`).
2. Add intents with training phrases and responses (e.g., greetings, FAQs). Test using the dialogflow simulator.
-3. In the Google Cloud Console, go to `APIs & Services` > `Credentials`, create a Service Account with the dialogflow API client role, and download the JSON key file.
+3. In the Google Cloud Console, go to `APIs & Services` > `Credentials`, create a service account with the dialogflow API client role, and download the JSON key file.
> `Security Note`: Never commit the JSON key file to version control. Use environment variables or a secret manager (e.g., Google Cloud Secret Manager) for production.
@@ -122,7 +117,8 @@ app.listen(5000, () => console.log('Backend running on http://localhost:5000'));
> Use a unique `sessionId` (e.g., UUID) for each user to maintain conversation context.
## Configure message send
-Use the Chat UI `messageSend` event to exchanges message. Each time a user sends a message, this event will be invoked with details of the sent message.
+
+Use the Chat UI [messageSend](../api/chat-ui/#messagesend) event to exchanges message. Each time a user sends a message, this event will be invoked with details of the sent message.
### Forward Message to backend:
@@ -130,7 +126,7 @@ Upon message submission, a POST request is sent to your backend API endpoint (`/
### Displaying Bot response:
-Create `src/App.vue` to integrate the Syncfusion Chat UI with the dialogflow backend:
+Modify the `src/App.vue` file to integrate the Chat UI with the dialogflow backend:
{% tabs %}
{% highlight html tabtitle="Options API (~/src/App.vue)" %}
diff --git a/ej2-vue/chat-ui/speech-to-text.md b/ej2-vue/chat-ui/speech-to-text.md
new file mode 100644
index 000000000..1118f1586
--- /dev/null
+++ b/ej2-vue/chat-ui/speech-to-text.md
@@ -0,0 +1,51 @@
+---
+layout: post
+title: Speech-to-Text With Vue Chat UI component | Syncfusion
+description: Checkout and learn about configuration of Speech-to-Text with Vue Chat UI component of Syncfusion Essential JS 2 and more details.
+platform: ej2-vue
+control: Chat UI
+documentation: ug
+domainurl: ##DomainURL##
+---
+
+# Speech-to-Text in Vue Chat UI
+
+The Syncfusion Vue Chat UI component integrates `Speech-to-Text` functionality through the browser's [Web Speech API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API). This enables the conversion of spoken words into text using the device's microphone, allowing users to interact with the Chat UI through voice input.
+
+## Configure Speech-to-Text
+
+To enable Speech-to-Text functionality in the Vue Chat UI component, update the `App.vue` file to incorporate the Web Speech API.
+
+The [SpeechToText](https://ej2.syncfusion.com/vue/documentation/speech-to-text/getting-started) component listens to audio input from the device’s microphone, transcribes spoken words into text, and updates the Chat UI’s editable footer using the [footerTemplate](https://ej2.syncfusion.com/vue/documentation/api/chat-ui/#footertemplate) property to display the transcribed text. Once the transcription appears in the footer, users can send it as a message to others.
+
+### Configuration Options
+
+* **[`lang`](https://ej2.syncfusion.com/vue/documentation/api/speech-to-text/#lang)**: Specifies the language for speech recognition. For example:
+
+ * `en-US` for American English
+ * `fr-FR` for French
+
+* **[`allowInterimResults`](https://ej2.syncfusion.com/vue/documentation/api/speech-to-text/#allowInterimResults)**: Set to `true` to receive real-time (interim) recognition results, or `false` to receive only final results.
+
+{% tabs %}
+{% highlight html tabtitle="Composition API (~/src/App.vue)" %}
+{% include code-snippet/chat-ui/stt/app-composition.vue %}
+{% endhighlight %}
+{% highlight html tabtitle="Options API (~/src/App.vue)" %}
+{% include code-snippet/chat-ui/stt/app.vue %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "page.domainurl/code-snippet/chat-ui/stt" %}
+
+## Error Handling
+
+The `SpeechToText` component provides events to handle errors that may occur during speech recognition. For more information, refer to the [Error Handling](https://ej2.syncfusion.com/vue/documentation/speech-to-text/speech-recognition#error-handling) section in the documentation.
+
+## Browser Compatibility
+
+The `SpeechToText` component relies on the [Speech Recognition API](https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition), which has limited browser support. Refer to the [Browser Compatibility](https://ej2.syncfusion.com/vue/documentation/speech-to-text/speech-recognition#browser-support) section for detailed information.
+
+## See Also
+
+* [Messages](./messages)
diff --git a/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app-composition.vue b/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app-composition.vue
index 8a2893559..2c54781e0 100644
--- a/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app-composition.vue
+++ b/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app-composition.vue
@@ -1,21 +1,21 @@
-
-
-
-
-
-
How can I help you?
-
-
-
-
+
+
+
+
+
+
How can I help you?
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app.vue b/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app.vue
index c170d22dd..0dd1d413c 100644
--- a/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app.vue
+++ b/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app.vue
@@ -93,9 +93,11 @@ methods: {
diff --git a/ej2-vue/code-snippet/ai-assistview/ai-integrations/open-ai/app-composition.vue b/ej2-vue/code-snippet/ai-assistview/ai-integrations/open-ai/app-composition.vue
index 07e5e858c..2046bb026 100644
--- a/ej2-vue/code-snippet/ai-assistview/ai-integrations/open-ai/app-composition.vue
+++ b/ej2-vue/code-snippet/ai-assistview/ai-integrations/open-ai/app-composition.vue
@@ -21,7 +21,6 @@
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/ai-assistview/speech/stt/app.vue b/ej2-vue/code-snippet/ai-assistview/speech/stt/app.vue
index 08a577345..2a09af700 100644
--- a/ej2-vue/code-snippet/ai-assistview/speech/stt/app.vue
+++ b/ej2-vue/code-snippet/ai-assistview/speech/stt/app.vue
@@ -100,6 +100,7 @@ export default {
});
},
methods: {
+ // Streams the AI response character by character to create a typing effect
async streamResponse(response) {
let lastResponse = '';
const responseUpdateRate = 10;
@@ -120,6 +121,7 @@ export default {
}
this.toggleButtons();
},
+ // Handles prompt requests by sending them to the Azure OpenAI API and streaming the response
onPromptRequest(args) {
if (!args?.prompt?.trim() || !this.$refs.aiAssist.ej2Instances) return;
this.stopStreaming = false;
@@ -158,25 +160,31 @@ export default {
toggleButtons();
});
},
+ // Stops the ongoing streaming response and toggles button visibility
stopRespondingClick() {
this.stopStreaming = true;
this.toggleButtons();
},
+ // Updates the footer input with the latest speech transcript
onTranscriptChange(args) {
this.$refs.assistviewFooter.innerText = args.transcript;
},
+ // Toggles button visibility when speech-to-text listening stops
onListeningStop() {
this.toggleButtons();
},
+ // Initializes button visibility when the speech-to-text component is created
created() {
this.toggleButtons();
},
+ // Handles Enter key press in the input to send the prompt without Shift
handleEvent(e) {
if (e.key === 'Enter' && !e.shiftKey) {
this.sendIconClicked();
e.preventDefault();
}
},
+ // Toggles visibility of send and speech buttons based on whether the input has text
toggleButtons() {
const assistviewFooter = this.$refs.assistviewFooter;
const sendButton = this.$refs.assistviewSendButton?.$el;
@@ -191,6 +199,7 @@ export default {
assistviewFooter.innerHTML = '';
}
},
+ // Executes the current prompt from the footer input and clears it
sendIconClicked(args) {
this.$refs.aiAssist.ej2Instances.executePrompt(this.$refs.assistviewFooter.innerText);
this.$refs.assistviewFooter.innerText = '';
@@ -199,9 +208,13 @@ export default {
};
+
+@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-inputs/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-buttons/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-popups/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-notifications/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-interactive-chat/styles/material.css";
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/ai-assistview/speech/tts/app-composition.vue b/ej2-vue/code-snippet/ai-assistview/speech/tts/app-composition.vue
index 033e80f52..6dfd04cc3 100644
--- a/ej2-vue/code-snippet/ai-assistview/speech/tts/app-composition.vue
+++ b/ej2-vue/code-snippet/ai-assistview/speech/tts/app-composition.vue
@@ -24,10 +24,10 @@ import { ref } from 'vue';
import { AIAssistViewComponent as EjsAiassistview } from '@syncfusion/ej2-vue-interactive-chat';
import { marked } from 'marked';
-const azureOpenAIApiKey: '', // YOUR_AZURE_OPENAI_API_KEY
-const azureOpenAIEndpoint: '', // YOUR_AZURE_OPENAI_API_ENDPOINT
-const azureOpenAIApiVersion: '', // YOUR_AZURE_OPENAI_API_VERSION
-const azureDeploymentName: '', // YOUR_DEPLOYMENT_NAME
+const azureOpenAIApiKey = ''; // YOUR_AZURE_OPENAI_API_KEY
+const azureOpenAIEndpoint = ''; // YOUR_AZURE_OPENAI_API_ENDPOINT
+const azureOpenAIApiVersion = ''; // YOUR_AZURE_OPENAI_API_VERSION
+const azureDeploymentName = ''; // YOUR_DEPLOYMENT_NAME // YOUR_DEPLOYMENT_NAME
const stopStreaming = false;
const currentUtterance = null;
@@ -52,10 +52,11 @@ const responseToolbarSettings = {
{ type: 'Button', iconCss: 'e-icons e-assist-dislike', tooltip: 'Need Improvement' },
],
itemClicked: (args) => onResponseToolbarItemClicked(args)
-},
+};
-const aiAssist = ref(null);
+ const aiAssist = ref(null);
+// Streams the AI response character by character to create a typing effect
const streamResponse = async (response) => {
let lastResponse = '';
const responseUpdateRate = 10;
@@ -75,6 +76,8 @@ const streamResponse = async (response) => {
await new Promise((resolve) => setTimeout(resolve, 15)); // Delay for streaming effect
}
};
+
+// Handles prompt requests by sending them to the Azure OpenAI API and streaming the response
const onPromptRequest = (args) => {
const url= azureOpenAIEndpoint.replace(/\/$/, '') +
`/openai/deployments/${encodeURIComponent(azureDeploymentName)}/chat/completions` +
@@ -104,9 +107,13 @@ const onPromptRequest = (args) => {
stopStreaming.value = true;
});
};
+
+// Stops the ongoing streaming response
const stopRespondingClick = () => {
stopStreaming.value = true;
};
+
+// Handles clicks on response toolbar items, such as copying, reading aloud, liking, or disliking the response
const onResponseToolbarItemClicked = (args) => {
const responseHtml = aiAssist.value.ej2Instances.prompts[args.dataIndex].response;
if (responseHtml) {
@@ -137,9 +144,13 @@ const onResponseToolbarItemClicked = (args) => {
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/ai-assistview/speech/tts/app.vue b/ej2-vue/code-snippet/ai-assistview/speech/tts/app.vue
index b34165484..bc8922ad3 100644
--- a/ej2-vue/code-snippet/ai-assistview/speech/tts/app.vue
+++ b/ej2-vue/code-snippet/ai-assistview/speech/tts/app.vue
@@ -60,6 +60,7 @@ export default {
};
},
methods: {
+ // Streams the AI response character by character to create a typing effect
async streamResponse(response) {
let lastResponse = '';
const responseUpdateRate = 10;
@@ -79,6 +80,7 @@ export default {
await new Promise((resolve) => setTimeout(resolve, 15)); // Delay for streaming effect
}
},
+ // Handles prompt requests by sending them to the Azure OpenAI API and streaming the response
onPromptRequest(args) {
if (!args?.prompt?.trim() || !this.$refs.aiAssist.ej2Instances) return;
this.stopStreaming = false;
@@ -116,9 +118,11 @@ export default {
this.stopStreaming = true;
});
},
+ // Stops the ongoing streaming response
stopRespondingClick() {
this.stopStreaming = true;
},
+ // Handles clicks on response toolbar items, such as copying, reading aloud, liking, or disliking the response
onResponseToolbarItemClicked(args) {
const responseHtml = this.$refs.aiAssist.ej2Instances.prompts[args.dataIndex].response;
if (responseHtml) {
@@ -149,10 +153,15 @@ export default {
},
};
+
+
+@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-inputs/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-buttons/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-popups/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-notifications/styles/material.css";
+@import "../node_modules/@syncfusion/ej2-interactive-chat/styles/material.css";
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/chat-ui/stt/app-composition.vue b/ej2-vue/code-snippet/chat-ui/stt/app-composition.vue
new file mode 100644
index 000000000..af31c2926
--- /dev/null
+++ b/ej2-vue/code-snippet/chat-ui/stt/app-composition.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/chat-ui/stt/app.vue b/ej2-vue/code-snippet/chat-ui/stt/app.vue
new file mode 100644
index 000000000..cb756458a
--- /dev/null
+++ b/ej2-vue/code-snippet/chat-ui/stt/app.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/chat-ui/stt/index.css b/ej2-vue/code-snippet/chat-ui/stt/index.css
new file mode 100644
index 000000000..88ae03492
--- /dev/null
+++ b/ej2-vue/code-snippet/chat-ui/stt/index.css
@@ -0,0 +1,74 @@
+.integration-speechtotext-section {
+ height: 350px;
+ width: 650px;
+ margin: 0 auto;
+}
+
+.integration-speechtotext-section .e-view-container {
+ margin: auto;
+}
+.integration-speechtotext-section .e-banner-view {
+ margin-left: 0;
+}
+.integration-speechtotext-section .banner-content .e-listen-icon:before {
+ font-size: 25px;
+}
+
+.integration-speechtotext-section .banner-content {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ text-align: center;
+}
+
+.integration-speechtotext-section #assistview-sendButton {
+ width: 40px;
+ height: 40px;
+ font-size: 20px;
+ border: none;
+ background: none;
+ cursor: pointer;
+}
+
+.integration-speechtotext-section #speechToText.visible,
+.integration-speechtotext-section #assistview-sendButton.visible {
+ display: inline-block;
+}
+
+.integration-speechtotext-section #speechToText,
+.integration-speechtotext-section #assistview-sendButton {
+ display: none;
+}
+
+@media only screen and (max-width: 750px) {
+ .integration-speechtotext-section {
+ width: 100%;
+ }
+}
+
+.integration-speechtotext-section .e-footer-wrapper {
+ display: flex;
+ border: 1px solid #c1c1c1;
+ padding: 5px 5px 5px 10px;
+ margin: 5px 5px 0 5px;
+ border-radius: 30px;
+}
+
+.integration-speechtotext-section .content-editor {
+ width: 100%;
+ overflow-y: auto;
+ font-size: 14px;
+ min-height: 25px;
+ max-height: 200px;
+ padding: 10px;
+}
+
+.integration-speechtotext-section .content-editor[contentEditable='true']:empty:before {
+ content: attr(placeholder);
+ color: #6b7280;
+ font-style: italic;
+}
+
+.integration-speechtotext-section .option-container {
+ align-self: flex-end;
+}
diff --git a/ej2-vue/code-snippet/chat-ui/stt/index.html b/ej2-vue/code-snippet/chat-ui/stt/index.html
new file mode 100644
index 000000000..0d0e060ee
--- /dev/null
+++ b/ej2-vue/code-snippet/chat-ui/stt/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/chat-ui/stt/index.js b/ej2-vue/code-snippet/chat-ui/stt/index.js
new file mode 100644
index 000000000..d0a03905b
--- /dev/null
+++ b/ej2-vue/code-snippet/chat-ui/stt/index.js
@@ -0,0 +1,127 @@
+import Vue from 'vue';
+import { ChatUIPlugin } from "@syncfusion/ej2-vue-interactive-chat";
+Vue.use(ChatUIPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`,
+
+ data: function () {
+ return {
+ currentUser: {
+ id: "user1",
+ user: "Albert"
+ },
+ michaleUser: {
+ id: "user2",
+ user: "Michale Suyama"
+ }
+ };
+ },
+ mounted() {
+ // Defer initial toggleButtons call until after mount
+ this.$nextTick(() => {
+ this.toggleButtons();
+ });
+ },
+ methods: {
+ // Updates the footer input with the latest speech transcript
+ onTranscriptChange(args) {
+ this.$refs.chatUIFooter.innerText = args.transcript;
+ },
+ // Toggles button visibility when speech-to-text listening stops
+ onListeningStop() {
+ this.toggleButtons();
+ },
+ // Initializes button visibility when the speech-to-text component is created
+ created() {
+ this.toggleButtons();
+ },
+ // Handles Enter key press in the input to send the prompt without Shift
+ handleEvent(e) {
+ if (e.key === 'Enter' && !e.shiftKey) {
+ this.sendIconClicked();
+ e.preventDefault();
+ }
+ },
+ // Toggles visibility of send and speech buttons based on whether the input has text
+ toggleButtons() {
+ const chatUIFooter = this.$refs.chatUIFooter;
+ const sendButton = this.$refs.chatUISendButton?.$el;
+ const speechButton = this.$refs.speechToTextObj?.$el;
+ if (!chatUIFooter || !sendButton || !speechButton) {
+ return;
+ }
+ const hasText = chatUIFooter.innerText.trim() !== '';
+ sendButton.classList.toggle('visible', hasText);
+ speechButton.classList.toggle('visible', !hasText);
+ if (
+ !hasText &&
+ (chatUIFooter.innerHTML === ' ' ||
+ chatUIFooter.innerHTML.trim() === '')
+ ) {
+ chatUIFooter.innerHTML = '';
+ }
+ },
+ // Executes the current prompt from the footer input and clears it
+ sendIconClicked() {
+ const editor = this.$refs.chatUIFooter;
+ const messageContent = editor?.innerText || '';
+ if (messageContent.trim()) {
+ this.$refs.chatUIInstance.addMessage({
+ author: this.currentUserModel,
+ text: messageContent
+ });
+ editor.innerText = '';
+ this.toggleButtons();
+ }
+ }
+ },
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/chat-ui/stt/systemjs.config.js b/ej2-vue/code-snippet/chat-ui/stt/systemjs.config.js
new file mode 100644
index 000000000..ddac8ee2e
--- /dev/null
+++ b/ej2-vue/code-snippet/chat-ui/stt/systemjs.config.js
@@ -0,0 +1,39 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+ vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js",
+ "@syncfusion/ej2-interactive-chat": "syncfusion:ej2-interactive-chat/dist/ej2-interactive-chat.umd.min.js",
+ "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.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-notifications": "syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-interactive-chat": "syncfusion:ej2-vue-interactive-chat/dist/ej2-vue-interactive-chat.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js",
+ "@syncfusion/ej2-vue-notifications": "syncfusion:ej2-vue-notifications/dist/ej2-vue-notifications.umd.min.js",
+ "marked": "https://cdn.jsdelivr.net/npm/marked/marked.min.js",
+ "@google/generative-ai": "https://cdn.jsdelivr.net/npm/@google/generative-ai@0.24.1/dist/index.min.js"
+ }
+});
+
+System.import('index.js');
diff --git a/ej2-vue/code-snippet/dialog/getting-started-cs2/app-composition.vue b/ej2-vue/code-snippet/dialog/getting-started-cs2/app-composition.vue
new file mode 100644
index 000000000..01a3c7b6c
--- /dev/null
+++ b/ej2-vue/code-snippet/dialog/getting-started-cs2/app-composition.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/dialog/getting-started-cs2/app.vue b/ej2-vue/code-snippet/dialog/getting-started-cs2/app.vue
new file mode 100644
index 000000000..f2f33d81a
--- /dev/null
+++ b/ej2-vue/code-snippet/dialog/getting-started-cs2/app.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/dialog/getting-started-cs2/index.css b/ej2-vue/code-snippet/dialog/getting-started-cs2/index.css
new file mode 100644
index 000000000..e826847ca
--- /dev/null
+++ b/ej2-vue/code-snippet/dialog/getting-started-cs2/index.css
@@ -0,0 +1,6 @@
+
+
+ .control-section {
+ height: 100%;
+ min-height: 200px;
+ }
diff --git a/ej2-vue/code-snippet/dialog/getting-started-cs2/index.html b/ej2-vue/code-snippet/dialog/getting-started-cs2/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/dialog/getting-started-cs2/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/dialog/getting-started-cs2/index.js b/ej2-vue/code-snippet/dialog/getting-started-cs2/index.js
new file mode 100644
index 000000000..324e62e1b
--- /dev/null
+++ b/ej2-vue/code-snippet/dialog/getting-started-cs2/index.js
@@ -0,0 +1,26 @@
+
+import Vue from "vue";
+import { DialogPlugin } from '@syncfusion/ej2-vue-popups';
+Vue.use(DialogPlugin);
+
+
+new Vue({
+ el: '#app',
+ template: `
+
+`,
+
+ data: function() {
+ return {
+ target: "#target",
+ width: '335px',
+ content: 'This is a Dialog with content.'
+ }
+ }
+
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/dialog/getting-started-cs2/systemjs.config.js b/ej2-vue/code-snippet/dialog/getting-started-cs2/systemjs.config.js
new file mode 100644
index 000000000..034c3182f
--- /dev/null
+++ b/ej2-vue/code-snippet/dialog/getting-started-cs2/systemjs.config.js
@@ -0,0 +1,28 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/file-manager/flat-data-cs1/app.vue b/ej2-vue/code-snippet/file-manager/flat-data-cs1/app.vue
index f3e66372b..081c521ad 100644
--- a/ej2-vue/code-snippet/file-manager/flat-data-cs1/app.vue
+++ b/ej2-vue/code-snippet/file-manager/flat-data-cs1/app.vue
@@ -14,13 +14,15 @@
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/cell-selection/app.vue b/ej2-vue/code-snippet/rich-text-editor/cell-selection/app.vue
new file mode 100644
index 000000000..5522da524
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/cell-selection/app.vue
@@ -0,0 +1,94 @@
+
+
+
+ Select Cell
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/cell-selection/index.css b/ej2-vue/code-snippet/rich-text-editor/cell-selection/index.css
new file mode 100644
index 000000000..e3c0074c9
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/cell-selection/index.css
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/cell-selection/index.html b/ej2-vue/code-snippet/rich-text-editor/cell-selection/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/cell-selection/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/cell-selection/index.js b/ej2-vue/code-snippet/rich-text-editor/cell-selection/index.js
new file mode 100644
index 000000000..7c2f51d0e
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/cell-selection/index.js
@@ -0,0 +1,71 @@
+import Vue from 'vue';
+import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar } from '@syncfusion/ej2-vue-richtexteditor';
+
+Vue.use(RichTextEditorPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+
+ Select Cell
+
+
+
+
`,
+
+ data() {
+ return {
+ rteValue: `
+
+
+ Product
+ Price
+ Stock
+
+
+
+
+ Product A
+ $25
+ Available
+
+
+ Product B
+ $40
+ Out of Stock
+
+
+
`,
+ }
+ },
+ provide: {
+ richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar]
+ },
+ methods: {
+ selectCell() {
+ const panel =
+ this.$refs.defaultRTE.ej2Instances.contentModule.getEditPanel();
+ const cells = panel.querySelectorAll('td');
+
+ if (cells.length > 2) {
+ const cell = cells[2]; // Third cell
+ const range = document.createRange();
+ range.selectNode(cell);
+
+ const selection = window.getSelection();
+ if (selection) {
+ selection.removeAllRanges();
+ selection.addRange(range);
+ }
+
+ cell.style.backgroundColor = '#cce5ff';
+ cell.classList.add('e-cell-select');
+ }
+
+ }
+ },
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/cell-selection/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/cell-selection/systemjs.config.js
new file mode 100644
index 000000000..7f1950c45
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/cell-selection/systemjs.config.js
@@ -0,0 +1,50 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.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-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js",
+ "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js",
+ "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app-composition.vue
new file mode 100644
index 000000000..fe16633f1
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app-composition.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app.vue b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app.vue
new file mode 100644
index 000000000..655e5c690
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.css b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.css
new file mode 100644
index 000000000..e3c0074c9
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.css
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.html b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.js b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.js
new file mode 100644
index 000000000..6b04cdd20
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.js
@@ -0,0 +1,22 @@
+import Vue from 'vue';
+import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar } from '@syncfusion/ej2-vue-richtexteditor';
+
+Vue.use(RichTextEditorPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+ `,
+
+ data() {
+ return {
+ toolbarSettings: {
+ items: ['FullScreen']
+ },
+ rteValue: `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, hyperlinks, uploads, etc.
Contains undo/redo manager.
`,
+ }
+ },
+ provide: {
+ richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar]
+ }
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/systemjs.config.js
new file mode 100644
index 000000000..7f1950c45
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/systemjs.config.js
@@ -0,0 +1,50 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.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-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js",
+ "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js",
+ "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/mail-merge/app-composition.vue
new file mode 100644
index 000000000..5423cae35
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/app-composition.vue
@@ -0,0 +1,170 @@
+{% raw %}
+
+
+
+
+
+
+
+
+ Merge Data
+
+
+
+
+
+
+
+ {{ formatMentionTemplate(data.value) }}
+
+
+
+
+
+
+
+
+{% endraw %}
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/app.vue b/ej2-vue/code-snippet/rich-text-editor/mail-merge/app.vue
new file mode 100644
index 000000000..37bf5d829
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/app.vue
@@ -0,0 +1,179 @@
+{% raw %}
+
+
+
+
+
+
+
+ Merge Data
+
+
+
+
+
+ {{ formatMentionTemplate(data.value) }}
+
+
+
+
+
+
+
+
+{% endraw %}
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.css b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.css
new file mode 100644
index 000000000..e3c0074c9
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.css
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.html b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.js b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.js
new file mode 100644
index 000000000..b2de4e57c
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.js
@@ -0,0 +1,161 @@
+import Vue from 'vue';
+import { RichTextEditorPlugin, Toolbar, Link, Image, QuickToolbar, HtmlEditor, Table, Video, NodeSelection, Audio, PasteCleanup } from '@syncfusion/ej2-vue-richtexteditor';
+import { MentionPlugin } from '@syncfusion/ej2-vue-dropdowns';
+import { DropDownButtonPlugin } from '@syncfusion/ej2-vue-splitbuttons';
+Vue.use(RichTextEditorPlugin);
+Vue.use(MentionPlugin);
+Vue.use(DropDownButtonPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+
+
+
+
+
+ Merge Data
+
+
+
+
+
+ {{ formatMentionTemplate(data.value) }}
+
+
+
+
+
`,
+
+ data() {
+ return {
+ selection: new NodeSelection(),
+ saveInterval: 1,
+ ranges: null,
+ saveSelection: null,
+ value: `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}} .
+Best regards, The {{CompanyName}} Team
`,
+ dropdownContent: `Insert Field `,
+ itemsName: [
+ { 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' },
+ ],
+ placeholderData: {
+ FirstName: 'John',
+ LastName: 'Doe',
+ PromoCode: 'ABC123',
+ SubscriptionPlan: 'Premium',
+ CustomerID: '123456',
+ ExpirationDate: '2024-12-31',
+ SupportEmail: 'support@example.com',
+ SupportPhoneNumber: '+1-800-555-5555',
+ CompanyName: 'Example Inc.',
+ },
+ textToValueMap: {
+ 'First Name': 'FirstName',
+ 'Last Name': 'LastName',
+ 'Support Email': 'SupportEmail',
+ 'Company Name': 'CompanyName',
+ 'Promo Code': 'PromoCode',
+ 'Support Phone Number': 'SupportPhoneNumber',
+ 'Customer ID': 'CustomerID',
+ 'Expiration Date': 'ExpirationDate',
+ 'Subscription Plan': 'SubscriptionPlan',
+ },
+ mergeData: [
+ { 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' },
+ ],
+ fieldsData: { text: 'text', value: 'value' },
+ mentionChar: '{{',
+ toolbarSettings: {
+ items: [
+ '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',
+ ],
+ },
+ }
+ },
+ provide: {
+ richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar]
+ },
+ methods: {
+ onDropDownClose() {
+ if (this.$refs.rteObj && this.$refs.rteObj.ej2Instances) {
+ this.$refs.rteObj.ej2Instances.focusIn();
+}
+ },
+ formatMentionTemplate(value) {
+ return `{{${value}}}`;
+ },
+ displayTemplate(data) {
+ return `${data.value}`;
+ },
+ onItemSelect: function(args) {
+ if (args && args.item && args.item.text) {
+ const value = this.textToValueMap[args.item.text.trim()];
+ if (value && this.$refs.rteObj && this.$refs.rteObj.ej2Instances) {
+ this.$refs.rteObj.ej2Instances.formatter.editorManager.nodeSelection.restore();
+ this.$refs.rteObj.ej2Instances.executeCommand('insertHTML', `{{${value}}} `, { undo: true });
+ } else {
+ console.log('No matching value found in textToValueMap or RichTextEditor is not initialized.');
+ }
+ }
+ },
+ onActionBegin(args) {
+ if (args.requestType === 'EnterAction' && this.$refs.mentionObj && this.$refs.mentionObj.ej2Instances && this.$refs.mentionObj.ej2Instances.element.classList.contains('e-popup-open')) {
+ args.cancel = true;
+ }
+ },
+ OnActionComplete(e) {
+ if (e.requestType === 'SourceCode') {
+ this.$refs.rteObj.ej2Instances.getToolbar().querySelector('#merge_data').parentElement.classList.add('e-overlay');
+ this.$refs.rteObj.ej2Instances.getToolbar().querySelector('#insertField').parentElement.classList.add('e-overlay');
+ } else if (e.requestType === 'Preview') {
+ this.$refs.rteObj.ej2Instances.getToolbar().querySelector('#merge_data').parentElement.classList.remove('e-overlay');
+ this.$refs.rteObj.ej2Instances.getToolbar().querySelector('#insertField').parentElement.classList.remove('e-overlay');
+ }
+ },
+ onClickHandler() {
+ if (this.$refs.rteObj && this.$refs.rteObj.ej2Instances) {
+ let editorContent = this.$refs.rteObj.ej2Instances.value || '';
+ let mergedContent = this.replacePlaceholders(editorContent, this.placeholderData);
+ if (this.$refs.rteObj.ej2Instances.formatter.getUndoRedoStack() && this.$refs.rteObj.ej2Instances.formatter.getUndoRedoStack().length === 0) {
+ this.$refs.rteObj.ej2Instances.formatter.saveData();
+ }
+ this.value = mergedContent;
+ this.$refs.rteObj.ej2Instances.formatter.saveData();
+ this.$refs.rteObj.trigger('change');
+ } else {
+ console.log('MailMergeEditor is not initialized.');
+ }
+ },
+ replacePlaceholders(template, data) {
+ return template.replace(/{{\s*(\w+)\s*}}/g, (match, key) => {
+ const value = data[key.trim()];
+ return value !== undefined ? value : match;
+ });
+ },
+ }
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/mail-merge/systemjs.config.js
new file mode 100644
index 000000000..7f1950c45
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/systemjs.config.js
@@ -0,0 +1,50 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.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-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js",
+ "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js",
+ "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app-composition.vue
new file mode 100644
index 000000000..83d689c09
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app-composition.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app.vue b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app.vue
new file mode 100644
index 000000000..7e5f4f732
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.css b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.css
new file mode 100644
index 000000000..e6b747476
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.css
@@ -0,0 +1,47 @@
+#mention-TemplateList {
+ position: relative;
+ display: inline-block;
+ padding: 2px;
+}
+.mentionNameList .person, .mentionNameList.email {
+ display: block;
+ line-height: 20px;
+ text-indent: 5px;
+}
+.mentionNameList .person {
+ font-size: 16px;
+}
+.mentionEmpImage {
+ display: inline-block;
+ width: 46px;
+ height: 46px;
+ padding: 3px;
+ border-radius: 25px;
+}
+#mention-TemplateList .e-badge-success {
+ left: 76%;
+ bottom: 4px;
+ top: auto;
+}
+#mention_integration_rte-edit-view_popup .e-dropdownbase .e-list-item {
+ line-height: 8px;
+}
+#mention-TemplateList .e-badge-success {
+ background-color: #4d841d;
+ color: #fff;
+}
+#mention-TemplateList .e-badge-success.away {
+ background-color: #fedd2d;
+ color: #fff;
+}
+#mention-TemplateList .e-badge-success.busy {
+ background-color: #de1a1a;
+ color: #fff;
+}
+#mention-TemplateList .e-badge.e-badge-dot {
+ height: 10px;
+ width: 10px;
+}
+#mention_integration .e-mention-chip{
+ cursor: pointer;
+}
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.html b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.js b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.js
new file mode 100644
index 000000000..fa4aceb2f
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.js
@@ -0,0 +1,34 @@
+import Vue from "vue";
+import { RichTextEditorPlugin, Toolbar, Link, Image, QuickToolbar, HtmlEditor } from "@syncfusion/ej2-vue-richtexteditor";
+import { MentionPlugin } from "@syncfusion/ej2-vue-dropdowns";
+
+Vue.use(MentionPlugin);
+Vue.use(RichTextEditorPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+
+
+
+
+`,
+
+ data: function() {
+ return {
+ rteValue: `Hello @Maria
Welcome to the mention integration with rich text editor demo. Type @ character and tag user from the suggestion list.
`,
+ data: [
+ { Name: "Selma Rose", EmailId: "selma@gmail.com" },
+ { Name: "Maria", EmailId: "maria@gmail.com" },
+ { Name: "Russo Kay", EmailId: "russo@gmail.com" },
+ { Name: "Camden Kate", EmailId: "camden@gmail.com" },
+ { Name: "Robert", EmailId: "robert@gmail.com" },
+ { Name: "Garth", EmailId: "garth@gmail.com" },
+ ],
+ fieldsData: { text: 'Name' }
+ };
+ },
+ provide:{
+ richtexteditor:[Toolbar, Link, Image, QuickToolbar, HtmlEditor]
+ },
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/systemjs.config.js
new file mode 100644
index 000000000..5adcc2fdb
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/systemjs.config.js
@@ -0,0 +1,48 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js",
+ "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js",
+ "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js",
+ "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app-composition.vue
new file mode 100644
index 000000000..dae83c2c1
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app-composition.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app.vue b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app.vue
new file mode 100644
index 000000000..76c4634a0
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.css b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.css
new file mode 100644
index 000000000..e6b747476
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.css
@@ -0,0 +1,47 @@
+#mention-TemplateList {
+ position: relative;
+ display: inline-block;
+ padding: 2px;
+}
+.mentionNameList .person, .mentionNameList.email {
+ display: block;
+ line-height: 20px;
+ text-indent: 5px;
+}
+.mentionNameList .person {
+ font-size: 16px;
+}
+.mentionEmpImage {
+ display: inline-block;
+ width: 46px;
+ height: 46px;
+ padding: 3px;
+ border-radius: 25px;
+}
+#mention-TemplateList .e-badge-success {
+ left: 76%;
+ bottom: 4px;
+ top: auto;
+}
+#mention_integration_rte-edit-view_popup .e-dropdownbase .e-list-item {
+ line-height: 8px;
+}
+#mention-TemplateList .e-badge-success {
+ background-color: #4d841d;
+ color: #fff;
+}
+#mention-TemplateList .e-badge-success.away {
+ background-color: #fedd2d;
+ color: #fff;
+}
+#mention-TemplateList .e-badge-success.busy {
+ background-color: #de1a1a;
+ color: #fff;
+}
+#mention-TemplateList .e-badge.e-badge-dot {
+ height: 10px;
+ width: 10px;
+}
+#mention_integration .e-mention-chip{
+ cursor: pointer;
+}
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.html b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.js b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.js
new file mode 100644
index 000000000..aa0425f69
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.js
@@ -0,0 +1,35 @@
+import Vue from "vue";
+import { RichTextEditorPlugin, Toolbar, Link, Image, QuickToolbar, HtmlEditor } from "@syncfusion/ej2-vue-richtexteditor";
+import { MentionPlugin } from "@syncfusion/ej2-vue-dropdowns";
+
+Vue.use(MentionPlugin);
+Vue.use(RichTextEditorPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+
+
+
+
+`,
+
+ data: function() {
+ return {
+ rteValue: `Hello @Maria
Welcome to the mention integration with rich text editor demo. Type @ character and tag user from the suggestion list.
`,
+ data: [
+ { Name: "Selma Rose", EmailId: "selma@gmail.com" },
+ { Name: "Maria", EmailId: "maria@gmail.com" },
+ { Name: "Russo Kay", EmailId: "russo@gmail.com" },
+ { Name: "Camden Kate", EmailId: "camden@gmail.com" },
+ { Name: "Robert", EmailId: "robert@gmail.com" },
+ { Name: "Garth", EmailId: "garth@gmail.com" },
+ ],
+ fieldsData: { text: 'Name' }
+ };
+ },
+ provide:{
+ richtexteditor:[Toolbar, Link, Image, QuickToolbar, HtmlEditor]
+ },
+
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/systemjs.config.js
new file mode 100644
index 000000000..5adcc2fdb
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/systemjs.config.js
@@ -0,0 +1,48 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js",
+ "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js",
+ "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js",
+ "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app-composition.vue
new file mode 100644
index 000000000..fcf5da57d
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app-composition.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app.vue b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app.vue
new file mode 100644
index 000000000..05b023618
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.css b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.css
new file mode 100644
index 000000000..e3c0074c9
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.css
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.html b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.js b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.js
new file mode 100644
index 000000000..c0e643bee
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.js
@@ -0,0 +1,19 @@
+import Vue from 'vue';
+import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar } from '@syncfusion/ej2-vue-richtexteditor';
+
+Vue.use(RichTextEditorPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+ `,
+
+ data() {
+ return {
+ rteValue: `Outer Quote: The Rich Text Editor provides a flexible way to format quotations.
Inner Quote: You can even nest blockquotes to represent quoted replies or layered citations.
Deep Quote: This is useful in forums, emails, or academic writing where multiple levels of quoting are needed.
`,
+ }
+ },
+ provide: {
+ richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar]
+ }
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/systemjs.config.js
new file mode 100644
index 000000000..7f1950c45
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/systemjs.config.js
@@ -0,0 +1,50 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.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-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js",
+ "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js",
+ "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/nesting-table/app-composition.vue
new file mode 100644
index 000000000..b8ac1353a
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/app-composition.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/app.vue b/ej2-vue/code-snippet/rich-text-editor/nesting-table/app.vue
new file mode 100644
index 000000000..a97f91923
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/app.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.css b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.css
new file mode 100644
index 000000000..e3c0074c9
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.css
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.html b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.js b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.js
new file mode 100644
index 000000000..c84fb9e27
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.js
@@ -0,0 +1,55 @@
+import Vue from 'vue';
+import { RichTextEditorPlugin, Toolbar, Link, Image, Table, HtmlEditor, QuickToolbar } from '@syncfusion/ej2-vue-richtexteditor';
+
+Vue.use(RichTextEditorPlugin);
+
+new Vue({
+ el: '#app',
+ template: ` `,
+
+ data() {
+ return {
+ toolbarSettings: {
+ items: ['Bold', 'Italic', 'Underline', 'StrikeThrough',
+ 'FontName', 'FontSize', 'FontColor', 'BackgroundColor',
+ 'LowerCase', 'UpperCase', '|',
+ 'Formats', 'Alignments', 'OrderedList', 'UnorderedList',
+ 'Outdent', 'Indent', '|',
+ 'CreateLink', 'Image','CreateTable', '|', 'ClearFormat',
+ 'SourceCode', 'FullScreen', '|', 'Undo', 'Redo']
+ },
+ rteValue: `
+
+ Department
+ Details
+
+
+ Sales
+
+
+
+ Employee
+ Target
+
+
+ John Doe
+ $50,000
+
+
+ Jane Smith
+ $60,000
+
+
+
+
+
+ Marketing
+ Campaign planning in progress
+
+
`,
+ }
+ },
+ provide: {
+ richtexteditor: [Toolbar, Link, Image, Table, HtmlEditor, QuickToolbar]
+ }
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/nesting-table/systemjs.config.js
new file mode 100644
index 000000000..7f1950c45
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/systemjs.config.js
@@ -0,0 +1,50 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.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-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js",
+ "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js",
+ "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/node-selection/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/node-selection/app-composition.vue
new file mode 100644
index 000000000..a08b83a51
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/node-selection/app-composition.vue
@@ -0,0 +1,54 @@
+
+
+
+ Select Paragraph
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/node-selection/app.vue b/ej2-vue/code-snippet/rich-text-editor/node-selection/app.vue
new file mode 100644
index 000000000..89ddf53ba
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/node-selection/app.vue
@@ -0,0 +1,69 @@
+
+
+
+ Select Paragraph
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/node-selection/index.css b/ej2-vue/code-snippet/rich-text-editor/node-selection/index.css
new file mode 100644
index 000000000..e3c0074c9
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/node-selection/index.css
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/node-selection/index.html b/ej2-vue/code-snippet/rich-text-editor/node-selection/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/node-selection/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/node-selection/index.js b/ej2-vue/code-snippet/rich-text-editor/node-selection/index.js
new file mode 100644
index 000000000..3bf7006fe
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/node-selection/index.js
@@ -0,0 +1,43 @@
+import Vue from 'vue';
+import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar } from '@syncfusion/ej2-vue-richtexteditor';
+
+Vue.use(RichTextEditorPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+ Select Paragraph
+
+
+
`,
+
+ data() {
+ return {
+ rteValue: `This is paragraph one.
This is paragraph two.
`,
+ }
+ },
+ provide: {
+ richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar]
+ },
+ methods: {
+ selectSecondParagraph() {
+ const panel =
+ this.$refs.defaultRTE.ej2Instances.contentModule.getEditPanel();
+ const paragraphs = panel.querySelectorAll('p');
+
+ if (paragraphs.length > 1) {
+ const range = document.createRange();
+ range.selectNode(paragraphs[1]); // Select second paragraph
+
+ const selection = window.getSelection();
+ if (selection) {
+ selection.removeAllRanges();
+ selection.addRange(range);
+ }
+ }
+ },
+ },
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/node-selection/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/node-selection/systemjs.config.js
new file mode 100644
index 000000000..7f1950c45
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/node-selection/systemjs.config.js
@@ -0,0 +1,50 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.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-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js",
+ "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js",
+ "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/richtexteditor-inside-dialog/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/richtexteditor-inside-dialog/app-composition.vue
index 883fa130b..f5ecd5ec8 100644
--- a/ej2-vue/code-snippet/rich-text-editor/richtexteditor-inside-dialog/app-composition.vue
+++ b/ej2-vue/code-snippet/rich-text-editor/richtexteditor-inside-dialog/app-composition.vue
@@ -18,17 +18,9 @@
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/select-all-content/app.vue b/ej2-vue/code-snippet/rich-text-editor/select-all-content/app.vue
new file mode 100644
index 000000000..e4cab9fff
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/select-all-content/app.vue
@@ -0,0 +1,53 @@
+
+
+
+ Select All
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/select-all-content/index.css b/ej2-vue/code-snippet/rich-text-editor/select-all-content/index.css
new file mode 100644
index 000000000..e3c0074c9
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/select-all-content/index.css
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/select-all-content/index.html b/ej2-vue/code-snippet/rich-text-editor/select-all-content/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/select-all-content/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/select-all-content/index.js b/ej2-vue/code-snippet/rich-text-editor/select-all-content/index.js
new file mode 100644
index 000000000..0c42afd75
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/select-all-content/index.js
@@ -0,0 +1,29 @@
+import Vue from 'vue';
+import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar } from '@syncfusion/ej2-vue-richtexteditor';
+
+Vue.use(RichTextEditorPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+
+ Select All
+
+
+
+
`,
+
+ data() {
+ return {
+ rteValue: `The Rich Text Editor component is WYSIWYG ("what you see is what you get") editor that provides the best user experience to create and update the content. Users can format their content using standard toolbar commands.
Key features:
Provides <IFRAME> and <DIV> modes
Capable of handling markdown editing.
Contains a modular library to load the necessary functionality on demand.
Provides a fully customizable toolbar.
Provides HTML view to edit the source directly for developers.
Supports third-party library integration.
Allows preview of modified content before saving it.
Handles images, hyperlinks, video, hyperlinks, uploads, etc.
Contains undo/redo manager.
Creates bulleted and numbered lists.
`,
+ }
+ },
+ provide: {
+ richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar]
+ },
+ methods: {
+ selectAllContent() {
+ this.$refs.defaultRTE.ej2Instances.selectAll();
+ },
+ },
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/select-all-content/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/select-all-content/systemjs.config.js
new file mode 100644
index 000000000..7f1950c45
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/select-all-content/systemjs.config.js
@@ -0,0 +1,50 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.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-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js",
+ "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js",
+ "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/selection/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/selection/app-composition.vue
new file mode 100644
index 000000000..e8eecca0e
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/selection/app-composition.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/selection/app.vue b/ej2-vue/code-snippet/rich-text-editor/selection/app.vue
new file mode 100644
index 000000000..53c301255
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/selection/app.vue
@@ -0,0 +1,114 @@
+
+
+
+ Range Slider
+
+
+
+
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/selection/index.css b/ej2-vue/code-snippet/rich-text-editor/selection/index.css
new file mode 100644
index 000000000..e3c0074c9
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/selection/index.css
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/selection/index.html b/ej2-vue/code-snippet/rich-text-editor/selection/index.html
new file mode 100644
index 000000000..303d777bf
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/selection/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
+
diff --git a/ej2-vue/code-snippet/rich-text-editor/selection/index.js b/ej2-vue/code-snippet/rich-text-editor/selection/index.js
new file mode 100644
index 000000000..c241e3bee
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/selection/index.js
@@ -0,0 +1,101 @@
+import Vue from "vue";
+import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar, Table, CodeBlock } from "@syncfusion/ej2-vue-richtexteditor";
+import { SliderPlugin } from "@syncfusion/ej2-vue-inputs";
+Vue.use(RichTextEditorPlugin);
+Vue.use(RichTextEditorPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+
+ Range Slider
+
+
+
+
+
`,
+
+ data: function() {
+ return {
+ rteValue: `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.
`,
+ sliderValue: [0, 50],
+ maxLength: 400,
+ };
+ },
+ provide:{
+ richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar, Table]
+ },
+ methods: {
+ onEditorCreated() {
+ const panel = this.$refs.rteObj.ej2Instances.contentModule.getEditPanel();
+ const realLength = panel?.textContent?.length ?? 0;
+ this.maxLength = realLength;
+ panel.focus();
+ // Initial selection based on sliderValue
+ this.onSliderChange({ value: this.sliderValue });
+ },
+
+ getTextNodeAtOffset(root, offset) {
+ let currentOffset = 0;
+ const walker = document.createTreeWalker(
+ root,
+ NodeFilter.SHOW_TEXT,
+ null
+ );
+
+ while (walker.nextNode()) {
+ const node = walker.currentNode;
+ const nodeLength = node.textContent.length;
+
+ if (currentOffset + nodeLength >= offset) {
+ return {
+ node,
+ offset: offset - currentOffset,
+ };
+ }
+
+ currentOffset += nodeLength;
+ }
+
+ null;
+ },
+ onSliderChange(args) {
+ const [start, end] = args.value;
+ const panel = this.$refs.rteObj.ej2Instances.contentModule.getEditPanel();
+ const maxLen = panel?.textContent?.length ?? 0;
+
+ const safeStart = Math.min(start, maxLen);
+ const safeEnd = Math.min(end, maxLen);
+
+ const startInfo = this.getTextNodeAtOffset(panel, safeStart);
+ const endInfo = this.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);
+ }
+ }
+
+ this.sliderValue = [safeStart, safeEnd];
+ },
+ },
+});
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/selection/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/selection/systemjs.config.js
new file mode 100644
index 000000000..7f1950c45
--- /dev/null
+++ b/ej2-vue/code-snippet/rich-text-editor/selection/systemjs.config.js
@@ -0,0 +1,50 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/"
+ },
+ map: {
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js",
+ "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.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-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js",
+ "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js",
+ "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js",
+ "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js",
+ "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js",
+ "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js",
+ "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js",
+ "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js",
+ "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js",
+ "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js",
+ "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js"
+ }
+});
+
+System.import('index.js');
\ No newline at end of file
diff --git a/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/app-composition.vue
index 905b7b3bb..326c04379 100644
--- a/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/app-composition.vue
+++ b/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/app-composition.vue
@@ -34,15 +34,35 @@ items: [
iconCss: 'e-icons e-signature',
type: 'Custom',
command: 'Signature'
+ },
+ {
+ text: 'HorizontalLine',
+ description: 'Insert a horizontal line',
+ iconCss: 'e-icons e-horizontal-line',
+ type: 'Custom',
+ command: 'HorizontalLine',
+ },
+ {
+ text: 'CheckList',
+ description: 'Insert a check list',
+ iconCss: 'e-icons e-checklist',
+ type: 'Custom',
+ command: 'CheckList',
}
]
};
const onSlashMenuItemSelect = (args) => {
if (args.itemData.command === 'MeetingNotes') {
- smartEditor.value.ej2Instances.executeCommand('insertHTML', meetingNotes, { undo: true });
+ smartEditor.value.ej2Instances.executeCommand('insertHTML', meetingNotes, { undo: true });
}
if (args.itemData.command === 'Signature') {
- smartEditor.value.ej2Instances.executeCommand('insertHTML', signature, { undo: true });
+ smartEditor.value.ej2Instances.executeCommand('insertHTML', signature, { undo: true });
+ }
+ if (args.itemData.command === 'HorizontalLine') {
+ smartEditor.value.ej2Instances.executeCommand('insertHTML', ' ');
+ }
+ if (args.itemData.command === 'CheckList') {
+ smartEditor.value.ej2Instances.executeCommand('insertHTML',``);
}
};
provide('richtexteditor', [SlashMenu, Toolbar, Link, Image, Audio, Table, Video, QuickToolbar, HtmlEditor, EmojiPicker, PasteCleanup, FormatPainter]);
diff --git a/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/app.vue b/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/app.vue
index 9c141ed60..fe998a19b 100644
--- a/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/app.vue
+++ b/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/app.vue
@@ -39,6 +39,20 @@ export default {
iconCss: 'e-icons e-signature',
type: 'Custom',
command: 'Signature'
+ },
+ {
+ text: 'HorizontalLine',
+ description: 'Insert a horizontal line',
+ iconCss: 'e-icons e-horizontal-line',
+ type: 'Custom',
+ command: 'HorizontalLine',
+ },
+ {
+ text: 'CheckList',
+ description: 'Insert a check list',
+ iconCss: 'e-icons e-checklist',
+ type: 'Custom',
+ command: 'CheckList',
}
]
}
@@ -55,6 +69,12 @@ export default {
if (args.itemData.command === 'Signature') {
this.$refs.smartEditor.ej2Instances.executeCommand('insertHTML', this.signature, { undo: true });
}
+ if (args.itemData.command === 'HorizontalLine') {
+ this.$refs.smartEditor.ej2Instances.executeCommand('insertHTML', ' ');
+ }
+ if (args.itemData.command === 'CheckList') {
+ this.$refs.smartEditor.ej2Instances.executeCommand('insertHTML',``);
+ }
}
}
}
diff --git a/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/index.js b/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/index.js
index 3b7fb1c8c..ffe48cdd7 100644
--- a/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/index.js
+++ b/ej2-vue/code-snippet/rich-text-editor/slash-menu-cs1/index.js
@@ -48,6 +48,20 @@ new Vue({
iconCss: 'e-icons e-signature',
type: 'Custom',
command: 'Signature'
+ },
+ {
+ text: 'HorizontalLine',
+ description: 'Insert a horizontal line',
+ iconCss: 'e-icons e-horizontal-line',
+ type: 'Custom',
+ command: 'HorizontalLine',
+ },
+ {
+ text: 'CheckList',
+ description: 'Insert a check list',
+ iconCss: 'e-icons e-checklist',
+ type: 'Custom',
+ command: 'CheckList',
}
]
}
@@ -65,6 +79,12 @@ new Vue({
if (args.itemData.command === 'Signature') {
this.$refs.smartEditor.ej2Instances.executeCommand('insertHTML', this.signature, { undo: true });
}
+ if (args.itemData.command === 'HorizontalLine') {
+ this.$refs.smartEditor.ej2Instances.executeCommand('insertHTML', ' ');
+ }
+ if (args.itemData.command === 'CheckList') {
+ this.$refs.smartEditor.ej2Instances.executeCommand('insertHTML',``);
+ }
}
}
diff --git a/ej2-vue/diagram/getting-started.md b/ej2-vue/diagram/getting-started.md
index bb048e6e1..aef95180c 100644
--- a/ej2-vue/diagram/getting-started.md
+++ b/ej2-vue/diagram/getting-started.md
@@ -12,6 +12,8 @@ domainurl: ##DomainURL##
This article provides a step-by-step guide for setting up a Vue 2 project using [Vue-CLI](https://cli.vuejs.org/) and integrating the Syncfusion® Vue Diagram component
+> **Ready to streamline your Syncfusion® Vue development?** Discover the full potential of Syncfusion® Vue components with Syncfusion® AI Coding Assistant. Effortlessly integrate, configure, and enhance your projects with intelligent, context-aware code suggestions, streamlined setups, and real-time insights—all seamlessly integrated into your preferred AI-powered IDEs like VS Code, Cursor, Syncfusion® CodeStudio and more. [Explore Syncfusion® AI Coding Assistant](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistant/overview)
+
## Prerequisites
[System requirements for Syncfusion® Vue UI components](https://ej2.syncfusion.com/vue/documentation/system-requirements)
diff --git a/ej2-vue/dialog/vue3-getting-started.md b/ej2-vue/dialog/vue3-getting-started.md
index e53b0969d..e6709345a 100644
--- a/ej2-vue/dialog/vue3-getting-started.md
+++ b/ej2-vue/dialog/vue3-getting-started.md
@@ -18,7 +18,7 @@ The `Options API` is the traditional way of writing Vue.js components, where the
## Prerequisites
-[System requirements for Syncfusion® Vue UI components](https://ej2.syncfusion.com/vue/documentation/system-requirements/)
+[System requirements for Syncfusion® Vue UI components](https://ej2.syncfusion.com/vue/documentation/system-requirements)
## Set up the Vite project
@@ -99,7 +99,7 @@ yarn add @syncfusion/ej2-vue-popups
## Import Syncfusion® CSS styles
-You can import themes for the Syncfusion® Vue component in various ways, such as using CSS or SASS styles from npm packages, CDN, [CRG](https://ej2.syncfusion.com/javascript/documentation/common/custom-resource-generator/) and [Theme Studio](https://ej2.syncfusion.com/vue/documentation/appearance/theme-studio/). Refer to [themes topic](https://ej2.syncfusion.com/vue/documentation/appearance/theme/) to know more about built-in themes and different ways to refer to themes in a Vue project.
+You can import themes for the Syncfusion® Vue component in various ways, such as using CSS or SASS styles from npm packages, CDN, [CRG](https://ej2.syncfusion.com/javascript/documentation/common/custom-resource-generator) and [Theme Studio](https://ej2.syncfusion.com/vue/documentation/appearance/theme-studio). Refer to [themes topic](https://ej2.syncfusion.com/vue/documentation/appearance/theme) to know more about built-in themes and different ways to refer to themes in a Vue project.
In this article, `Material` theme is applied using CSS styles, which are available in installed packages. The necessary `Material` CSS styles for the Dialog component and its dependents were imported into the `