diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html
index 2deb2e40a..a52a26290 100644
--- a/Document-Processing-toc.html
+++ b/Document-Processing-toc.html
@@ -5081,6 +5081,7 @@
Create a object structure
Changing the active sheet while importing a file
Identify the context menu opened
+ Prevent Actions Without Read-Only and Sheet Protection
Mobile Responsiveness
@@ -5131,6 +5132,7 @@
Create a object structure
Changing the active sheet while importing a file
Identify the context menu opened
+ Prevent Actions Without Read-Only and Sheet Protection
Mobile Responsiveness
@@ -5183,6 +5185,7 @@
Create a object structure
Changing the active sheet while importing a file
Identify the context menu opened
+ Prevent Actions Without Read-Only and Sheet Protection
Mobile Responsiveness
@@ -5280,6 +5283,7 @@
Create a object structure
Changing the active sheet while importing a file
Identify the context menu opened
+ Prevent Actions Without Read-Only and Sheet Protection
Mobile Responsiveness
@@ -5329,6 +5333,7 @@
Create a JSON structure
Changing the active sheet while importing a file
Identify the context menu opened
+ Prevent Actions Without Read-Only and Sheet Protection
Mobile Responsiveness
@@ -5377,6 +5382,7 @@
Create a JSON structure
Changing the active sheet while importing a file
Identify the context menu opened
+ Prevent Actions Without Read-Only and Sheet Protection
Mobile Responsiveness
diff --git a/Document-Processing/Excel/Spreadsheet/ASP-NET-CORE/how-to/prevent-actions.md b/Document-Processing/Excel/Spreadsheet/ASP-NET-CORE/how-to/prevent-actions.md
new file mode 100644
index 000000000..ea0fdf589
--- /dev/null
+++ b/Document-Processing/Excel/Spreadsheet/ASP-NET-CORE/how-to/prevent-actions.md
@@ -0,0 +1,51 @@
+---
+layout: post
+title: Prevent actions without read-only and sheet protection | Syncfusion
+description: Learn here all about to prevent actions without read-only and sheet protection in ASP.NET Core Spreadsheet of Syncfusion Essential JS 2 and more.
+control: Spreadsheet
+platform: document-processing
+documentation: ug
+---
+
+# Prevent actions without read-only and protection in Spreadsheet
+
+In Syncfusion ASP.NET Core Spreadsheet, the [**read-only**](https://help.syncfusion.com/document-processing/excel/spreadsheet/asp-net-core/protect-sheet#make-cells-read-only-without-protecting-worksheet) feature makes a range of cells, rows, or columns completely non-editable and restricts all spreadsheet actions on those cells. Similarly, the [**sheet protection**](https://help.syncfusion.com/document-processing/excel/spreadsheet/asp-net-core/protect-sheet#protect-sheet) feature locks the entire sheet and restricts all spreadsheet actions on the sheet. It does not allow actions such as formatting cells, rows, or columns, selecting cells, or inserting hyperlinks—unless these options are explicitly enabled in the [`protectSettings`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/protectsettingsmodel).
+
+If your requirement is to prevent actions (such as cut, paste, autofill, formatting, and validation) without locking the entire sheet using the [`protectSheet`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/index-default#protectsheet) method or making the cells read-only via the [`setRangeReadOnly`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/index-default#setrangereadonly) method, you can achieve this through event-based customization. This approach allows you to restrict specific actions on selected cells while keeping the rest of the sheet fully interactive.
+
+**Events to Use**
+To achieve this requirement, the following events can be used:
+
+* [`cellEdit`](https://help.syncfusion.com/cr/aspnetcore-js2/syncfusion.ej2.spreadsheet.spreadsheet.html#Syncfusion_EJ2_Spreadsheet_Spreadsheet_CellEdit) → To prevent editing for specific cells.
+* [`actionBegin`](https://help.syncfusion.com/cr/aspnetcore-js2/syncfusion.ej2.spreadsheet.spreadsheet.html#Syncfusion_EJ2_Spreadsheet_Spreadsheet_ActionBegin)→ To prevent spreadsheet actions such as cut, paste, autofill, formatting, etc.
+
+**Step 1: Prevent editing for specific cells**
+
+To prevent editing for specific cells, use the [`cellEdit`](https://help.syncfusion.com/cr/aspnetcore-js2/syncfusion.ej2.spreadsheet.spreadsheet.html#Syncfusion_EJ2_Spreadsheet_Spreadsheet_CellEdit) event, which triggers whenever a cell enters edit mode. By checking the column index and setting `args.cancel = true`, you can prevent editing for those columns. This ensures that users cannot modify the cell content in those columns.
+
+**Step 2: Prevent specific spreadsheet actions**
+
+To prevent specific action after preventing the cell editing, you need to use the [`actionBegin`](https://help.syncfusion.com/cr/aspnetcore-js2/syncfusion.ej2.spreadsheet.spreadsheet.html#Syncfusion_EJ2_Spreadsheet_Spreadsheet_ActionBegin) event. This event triggers before any action starts (such as cut, paste, autofill, formatting, etc.). In this event:
+
+* Fetch the target address based on the type of action being performed using `args.action` property.
+* Verify if the target range includes the restricted columns.
+* If the column is in the restricted list, cancel the action by setting `args.cancel = true`.
+
+This approach ensures that spreadsheet actions such as cut, paste, autofill, formatting, validation, and conditional formatting are prevented for specific cells without protecting the sheet or making the cells read-only.
+
+ > **Note:** In this example, we use column indexes to restrict actions. You can also use row indexes or cell addresses for the same purpose.
+
+The following example demonstrates how to prevent actions such as cut, paste, autofill, formatting, validation, and conditional formatting for specific cells(in the first and third columns) in the spreadsheet without protecting the sheet or making the cells read-only. You can also restrict additional actions by following the same approach.
+
+{% tabs %}
+{% highlight cshtml tabtitle="CSHTML" %}
+{% include code-snippet/spreadsheet/asp-net-core/prevent-actions-cs1/tagHelper %}
+{% endhighlight %}
+{% highlight c# tabtitle="PreventActionController.cs" %}
+{% include code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/PreventActionController.cs %}
+{% endhighlight %}
+{% endtabs %}
+
+## See Also
+
+* [Protection](https://help.syncfusion.com/document-processing/excel/spreadsheet/asp-net-core/protect-sheet)
\ No newline at end of file
diff --git a/Document-Processing/Excel/Spreadsheet/ASP-NET-MVC/how-to/prevent-actions.md b/Document-Processing/Excel/Spreadsheet/ASP-NET-MVC/how-to/prevent-actions.md
new file mode 100644
index 000000000..562f8fcb1
--- /dev/null
+++ b/Document-Processing/Excel/Spreadsheet/ASP-NET-MVC/how-to/prevent-actions.md
@@ -0,0 +1,51 @@
+---
+layout: post
+title: Prevent actions without read-only and sheet protection | Syncfusion
+description: Learn here all about to prevent actions without read-only and sheet protection in ASP.NET MVC Spreadsheet of Syncfusion Essential JS 2 and more.
+control: Spreadsheet
+platform: document-processing
+documentation: ug
+---
+
+# Prevent actions without read-only and protection in Spreadsheet
+
+In Syncfusion ASP.NET MVC Spreadsheet, the [**read-only**](https://help.syncfusion.com/document-processing/excel/spreadsheet/asp-net-mvc/protect-sheet#make-cells-read-only-without-protecting-worksheet) feature makes a range of cells, rows, or columns completely non-editable and restricts all spreadsheet actions on those cells. Similarly, the [**sheet protection**](https://help.syncfusion.com/document-processing/excel/spreadsheet/asp-net-mvc/protect-sheet#protect-sheet) feature locks the entire sheet and restricts all spreadsheet actions on the sheet. It does not allow actions such as formatting cells, rows, or columns, selecting cells, or inserting hyperlinks—unless these options are explicitly enabled in the [`protectSettings`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/protectsettingsmodel).
+
+If your requirement is to prevent actions (such as cut, paste, autofill, formatting, and validation) without locking the entire sheet using the [`protectSheet`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/index-default#protectsheet) method or making the cells read-only via the [`setRangeReadOnly`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/index-default#setrangereadonly) method, you can achieve this through event-based customization. This approach allows you to restrict specific actions on selected cells while keeping the rest of the sheet fully interactive.
+
+**Events to Use**
+To achieve this requirement, the following events can be used:
+
+* [`cellEdit`](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.spreadsheet.spreadsheet.html#Syncfusion_EJ2_Spreadsheet_Spreadsheet_CellEdit) → To prevent editing for specific cells.
+* [`actionBegin`](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.spreadsheet.spreadsheet.html#Syncfusion_EJ2_Spreadsheet_Spreadsheet_ActionBegin)→ To prevent spreadsheet actions such as cut, paste, autofill, formatting, etc.
+
+**Step 1: Prevent editing for specific cells**
+
+To prevent editing for specific cells, use the [`cellEdit`](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.spreadsheet.spreadsheet.html#Syncfusion_EJ2_Spreadsheet_Spreadsheet_CellEdit) event, which triggers whenever a cell enters edit mode. By checking the column index and setting `args.cancel = true`, you can prevent editing for those columns. This ensures that users cannot modify the cell content in those columns.
+
+**Step 2: Prevent specific spreadsheet actions**
+
+To prevent specific action after preventing the cell editing, you need to use the [`actionBegin`](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.spreadsheet.spreadsheet.html#Syncfusion_EJ2_Spreadsheet_Spreadsheet_ActionBegin) event. This event triggers before any action starts (such as cut, paste, autofill, formatting, etc.). In this event:
+
+* Fetch the target address based on the type of action being performed using `args.action` property.
+* Verify if the target range includes the restricted columns.
+* If the column is in the restricted list, cancel the action by setting `args.cancel = true`.
+
+This approach ensures that spreadsheet actions such as cut, paste, autofill, formatting, validation, and conditional formatting are prevented for specific cells without protecting the sheet or making the cells read-only.
+
+ > **Note:** In this example, we use column indexes to restrict actions. You can also use row indexes or cell addresses for the same purpose.
+
+The following example demonstrates how to prevent actions such as cut, paste, autofill, formatting, validation, and conditional formatting for specific cells(in the first and third columns) in the spreadsheet without protecting the sheet or making the cells read-only. You can also restrict additional actions by following the same approach.
+
+{% tabs %}
+{% highlight cshtml tabtitle="CSHTML" %}
+{% include code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/razor %}
+{% endhighlight %}
+{% highlight c# tabtitle="PreventActionController.cs" %}
+{% include code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/PreventActionController.cs %}
+{% endhighlight %}
+{% endtabs %}
+
+## See Also
+
+* [Protection](https://help.syncfusion.com/document-processing/excel/spreadsheet/asp-net-mvc/protect-sheet)
\ No newline at end of file
diff --git a/Document-Processing/Excel/Spreadsheet/Angular/how-to/prevent-actions.md b/Document-Processing/Excel/Spreadsheet/Angular/how-to/prevent-actions.md
new file mode 100644
index 000000000..379edddda
--- /dev/null
+++ b/Document-Processing/Excel/Spreadsheet/Angular/how-to/prevent-actions.md
@@ -0,0 +1,54 @@
+---
+layout: post
+title: Prevent actions without read-only and sheet protection | Syncfusion
+description: Learn here all about to prevent actions without read-only and sheet protection in Angular Spreadsheet component of Syncfusion Essential JS 2 and more.
+control: Spreadsheet
+platform: document-processing
+documentation: ug
+---
+
+# Prevent actions without read-only and protection in Spreadsheet
+
+In Syncfusion Angular Spreadsheet, the [**read-only**](https://help.syncfusion.com/document-processing/excel/spreadsheet/angular/protect-sheet#make-cells-read-only-without-protecting-worksheet) feature makes a range of cells, rows, or columns completely non-editable and restricts all spreadsheet actions on those cells. Similarly, the [**sheet protection**](https://help.syncfusion.com/document-processing/excel/spreadsheet/angular/protect-sheet#protect-sheet) feature locks the entire sheet and restricts all spreadsheet actions on the sheet. It does not allow actions such as formatting cells, rows, or columns, selecting cells, or inserting hyperlinks—unless these options are explicitly enabled in the [`protectSettings`](https://ej2.syncfusion.com/angular/documentation/api/spreadsheet/protectsettingsmodel).
+
+If your requirement is to prevent actions (such as cut, paste, autofill, formatting, and validation) without locking the entire sheet using the [`protectSheet`](https://ej2.syncfusion.com/angular/documentation/api/spreadsheet/index-default#protectsheet) method or making the cells read-only via the [`setRangeReadOnly`](https://ej2.syncfusion.com/angular/documentation/api/spreadsheet/index-default#setrangereadonly) method, you can achieve this through event-based customization. This approach allows you to restrict specific actions on selected cells while keeping the rest of the sheet fully interactive.
+
+**Events to Use**
+To achieve this requirement, the following events can be used:
+
+* [`cellEdit`](https://ej2.syncfusion.com/angular/documentation/api/spreadsheet/index-default#celledit) → To prevent editing for specific cells.
+* [`actionBegin`](https://ej2.syncfusion.com/angular/documentation/api/spreadsheet/index-default#actionbegin)→ To prevent spreadsheet actions such as cut, paste, autofill, formatting, etc.
+
+**Step 1: Prevent editing for specific cells**
+
+To prevent editing for specific cells, use the [`cellEdit`](https://ej2.syncfusion.com/angular/documentation/api/spreadsheet/index-default#celledit) event, which triggers whenever a cell enters edit mode. By checking the column index and setting `args.cancel = true`, you can prevent editing for those columns. This ensures that users cannot modify the cell content in those columns.
+
+**Step 2: Prevent specific spreadsheet actions**
+
+To prevent specific action after preventing the cell editing, you need to use the [`actionBegin`](https://ej2.syncfusion.com/angular/documentation/api/spreadsheet/index-default#actionbegin) event. This event triggers before any action starts (such as cut, paste, autofill, formatting, etc.). In this event:
+
+* Fetch the target address based on the type of action being performed using `args.action` property.
+* Verify if the target range includes the restricted columns.
+* If the column is in the restricted list, cancel the action by setting `args.cancel = true`.
+
+This approach ensures that spreadsheet actions such as cut, paste, autofill, formatting, validation, and conditional formatting are prevented for specific cells without protecting the sheet or making the cells read-only.
+
+ > **Note:** In this example, we use column indexes to restrict actions. You can also use row indexes or cell addresses for the same purpose.
+
+The following example demonstrates how to prevent actions such as cut, paste, autofill, formatting, validation, and conditional formatting for specific cells(in the first and third columns) in the spreadsheet without protecting the sheet or making the cells read-only. You can also restrict additional actions by following the same approach.
+
+{% tabs %}
+{% highlight ts tabtitle="app.component.ts" %}
+{% include code-snippet/spreadsheet/angular/prevent-actions-cs1/src/app.component.ts %}
+{% endhighlight %}
+{% highlight ts tabtitle="main.ts" %}
+{% include code-snippet/spreadsheet/angular/prevent-actions-cs1/src/main.ts %}
+{% endhighlight %}
+{% endtabs %}
+
+
+{% previewsample "/document-processing/code-snippet/spreadsheet/angular/prevent-actions-cs1" %}
+
+## See Also
+
+* [Protection](https://help.syncfusion.com/document-processing/excel/spreadsheet/angular/protect-sheet)
\ No newline at end of file
diff --git a/Document-Processing/Excel/Spreadsheet/Javascript-ES5/how-to/prevent-actions.md b/Document-Processing/Excel/Spreadsheet/Javascript-ES5/how-to/prevent-actions.md
new file mode 100644
index 000000000..d9ef62378
--- /dev/null
+++ b/Document-Processing/Excel/Spreadsheet/Javascript-ES5/how-to/prevent-actions.md
@@ -0,0 +1,53 @@
+---
+layout: post
+title: Prevent actions without read-only and sheet protection | Syncfusion
+description: Learn here all about to prevent actions without read-only and sheet protection in JavaScript Spreadsheet component of Syncfusion Essential JS 2 and more.
+control: Spreadsheet
+platform: document-processing
+documentation: ug
+---
+
+# Prevent actions without read-only and protection in Spreadsheet
+
+In Syncfusion JavaScript Spreadsheet, the [**read-only**](https://help.syncfusion.com/document-processing/excel/spreadsheet/javascript-es5/protect-sheet#make-cells-read-only-without-protecting-worksheet) feature makes a range of cells, rows, or columns completely non-editable and restricts all spreadsheet actions on those cells. Similarly, the [**sheet protection**](https://help.syncfusion.com/document-processing/excel/spreadsheet/javascript-es5/protect-sheet#protect-sheet) feature locks the entire sheet and restricts all spreadsheet actions on the sheet. It does not allow actions such as formatting cells, rows, or columns, selecting cells, or inserting hyperlinks—unless these options are explicitly enabled in the [`protectSettings`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/protectsettingsmodel).
+
+If your requirement is to prevent actions (such as cut, paste, autofill, formatting, and validation) without locking the entire sheet using the [`protectSheet`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/index-default#protectsheet) method or making the cells read-only via the [`setRangeReadOnly`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/index-default#setrangereadonly) method, you can achieve this through event-based customization. This approach allows you to restrict specific actions on selected cells while keeping the rest of the sheet fully interactive.
+
+**Events to Use**
+To achieve this requirement, the following events can be used:
+
+* [`cellEdit`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/index-default#celledit) → To prevent editing for specific cells.
+* [`actionBegin`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/index-default#actionbegin)→ To prevent spreadsheet actions such as cut, paste, autofill, formatting, etc.
+
+**Step 1: Prevent editing for specific cells**
+
+To prevent editing for specific cells, use the [`cellEdit`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/index-default#celledit) event, which triggers whenever a cell enters edit mode. By checking the column index and setting `args.cancel = true`, you can prevent editing for those columns. This ensures that users cannot modify the cell content in those columns.
+
+**Step 2: Prevent specific spreadsheet actions**
+
+To prevent specific action after preventing the cell editing, you need to use the [`actionBegin`](https://ej2.syncfusion.com/javascript/documentation/api/spreadsheet/index-default#actionbegin) event. This event triggers before any action starts (such as cut, paste, autofill, formatting, etc.). In this event:
+
+* Fetch the target address based on the type of action being performed using `args.action` property.
+* Verify if the target range includes the restricted columns.
+* If the column is in the restricted list, cancel the action by setting `args.cancel = true`.
+
+This approach ensures that spreadsheet actions such as cut, paste, autofill, formatting, validation, and conditional formatting are prevented for specific cells without protecting the sheet or making the cells read-only.
+
+ > **Note:** In this example, we use column indexes to restrict actions. You can also use row indexes or cell addresses for the same purpose.
+
+The following example demonstrates how to prevent actions such as cut, paste, autofill, formatting, validation, and conditional formatting for specific cells(in the first and third columns) in the spreadsheet without protecting the sheet or making the cells read-only. You can also restrict additional actions by following the same approach.
+
+{% tabs %}
+{% highlight js tabtitle="index.js" %}
+{% include code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.js %}
+{% endhighlight %}
+{% highlight html tabtitle="index.html" %}
+{% include code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.html %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "/document-processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1" %}
+
+## See Also
+
+* [Protection](https://help.syncfusion.com/document-processing/excel/spreadsheet/javascript-es5/protect-sheet)
\ No newline at end of file
diff --git a/Document-Processing/Excel/Spreadsheet/Javascript-ES6/how-to/prevent-actions.md b/Document-Processing/Excel/Spreadsheet/Javascript-ES6/how-to/prevent-actions.md
new file mode 100644
index 000000000..d3ee77c03
--- /dev/null
+++ b/Document-Processing/Excel/Spreadsheet/Javascript-ES6/how-to/prevent-actions.md
@@ -0,0 +1,53 @@
+---
+layout: post
+title: Prevent actions without read-only and sheet protection | Syncfusion
+description: Learn here all about to prevent actions without read-only and sheet protection in TypeScript Spreadsheet component of Syncfusion Essential JS 2 and more.
+control: Spreadsheet
+platform: document-processing
+documentation: ug
+---
+
+# Prevent actions without read-only and protection in Spreadsheet
+
+In Syncfusion TypeScript Spreadsheet, the [**read-only**](https://help.syncfusion.com/document-processing/excel/spreadsheet/javascript-es6/protect-sheet#make-cells-read-only-without-protecting-worksheet) feature makes a range of cells, rows, or columns completely non-editable and restricts all spreadsheet actions on those cells. Similarly, the [**sheet protection**](https://help.syncfusion.com/document-processing/excel/spreadsheet/javascript-es6/protect-sheet#protect-sheet) feature locks the entire sheet and restricts all spreadsheet actions on the sheet. It does not allow actions such as formatting cells, rows, or columns, selecting cells, or inserting hyperlinks—unless these options are explicitly enabled in the [`protectSettings`](https://ej2.syncfusion.com/documentation/api/spreadsheet/protectsettingsmodel).
+
+If your requirement is to prevent actions (such as cut, paste, autofill, formatting, and validation) without locking the entire sheet using the [`protectSheet`](https://ej2.syncfusion.com/documentation/api/spreadsheet/index-default#protectsheet) method or making the cells read-only via the [`setRangeReadOnly`](https://ej2.syncfusion.com/documentation/api/spreadsheet/index-default#setrangereadonly) method, you can achieve this through event-based customization. This approach allows you to restrict specific actions on selected cells while keeping the rest of the sheet fully interactive.
+
+**Events to Use**
+To achieve this requirement, the following events can be used:
+
+* [`cellEdit`](https://ej2.syncfusion.com/documentation/api/spreadsheet/index-default#celledit) → To prevent editing for specific cells.
+* [`actionBegin`](https://ej2.syncfusion.com/documentation/api/spreadsheet/index-default#actionbegin)→ To prevent spreadsheet actions such as cut, paste, autofill, formatting, etc.
+
+**Step 1: Prevent editing for specific cells**
+
+To prevent editing for specific cells, use the [`cellEdit`](https://ej2.syncfusion.com/documentation/api/spreadsheet/index-default#celledit) event, which triggers whenever a cell enters edit mode. By checking the column index and setting `args.cancel = true`, you can prevent editing for those columns. This ensures that users cannot modify the cell content in those columns.
+
+**Step 2: Prevent specific spreadsheet actions**
+
+To prevent specific action after preventing the cell editing, you need to use the [`actionBegin`](https://ej2.syncfusion.com/documentation/api/spreadsheet/index-default#actionbegin) event. This event triggers before any action starts (such as cut, paste, autofill, formatting, etc.). In this event:
+
+* Fetch the target address based on the type of action being performed using `args.action` property.
+* Verify if the target range includes the restricted columns.
+* If the column is in the restricted list, cancel the action by setting `args.cancel = true`.
+
+This approach ensures that spreadsheet actions such as cut, paste, autofill, formatting, validation, and conditional formatting are prevented for specific cells without protecting the sheet or making the cells read-only.
+
+ > **Note:** In this example, we use column indexes to restrict actions. You can also use row indexes or cell addresses for the same purpose.
+
+The following example demonstrates how to prevent actions such as cut, paste, autofill, formatting, validation, and conditional formatting for specific cells(in the first and third columns) in the spreadsheet without protecting the sheet or making the cells read-only. You can also restrict additional actions by following the same approach.
+
+{% tabs %}
+{% highlight ts tabtitle="index.ts" %}
+{% include code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.ts %}
+{% endhighlight %}
+{% highlight html tabtitle="index.html" %}
+{% include code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.html %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "/document-processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1" %}
+
+## See Also
+
+* [Protection](https://help.syncfusion.com/document-processing/excel/spreadsheet/javascript-es6/protect-sheet)
\ No newline at end of file
diff --git a/Document-Processing/Excel/Spreadsheet/Vue/how-to/prevent-actions.md b/Document-Processing/Excel/Spreadsheet/Vue/how-to/prevent-actions.md
new file mode 100644
index 000000000..90a90d4df
--- /dev/null
+++ b/Document-Processing/Excel/Spreadsheet/Vue/how-to/prevent-actions.md
@@ -0,0 +1,53 @@
+---
+layout: post
+title: Prevent actions without read-only and sheet protection | Syncfusion
+description: Learn here all about to prevent actions without read-only and sheet protection in Vue Spreadsheet component of Syncfusion Essential JS 2 and more.
+control: Spreadsheet
+platform: document-processing
+documentation: ug
+---
+
+# Prevent actions without read-only and protection in Vue Spreadsheet
+
+In Syncfusion Vue Spreadsheet, the [**read-only**](https://help.syncfusion.com/document-processing/excel/spreadsheet/vue/protect-sheet#make-cells-read-only-without-protecting-worksheet) feature makes a range of cells, rows, or columns completely non-editable and restricts all spreadsheet actions on those cells. Similarly, the [**sheet protection**](https://help.syncfusion.com/document-processing/excel/spreadsheet/vue/protect-sheet#protect-sheet) feature locks the entire sheet and restricts all spreadsheet actions on the sheet. It does not allow actions such as formatting cells, rows, or columns, selecting cells, or inserting hyperlinks—unless these options are explicitly enabled in the [`protectSettings`](https://ej2.syncfusion.com/vue/documentation/api/spreadsheet/protectsettingsmodel).
+
+If your requirement is to prevent actions (such as cut, paste, autofill, formatting, and validation) without locking the entire sheet using the [`protectSheet`](https://ej2.syncfusion.com/vue/documentation/api/spreadsheet/index-default#protectsheet) method or making the cells read-only via the [`setRangeReadOnly`](https://ej2.syncfusion.com/vue/documentation/api/spreadsheet/index-default#setrangereadonly) method, you can achieve this through event-based customization. This approach allows you to restrict specific actions on selected cells while keeping the rest of the sheet fully interactive.
+
+**Events to Use**
+To achieve this requirement, the following events can be used:
+
+* [`cellEdit`](https://ej2.syncfusion.com/vue/documentation/api/spreadsheet/index-default#celledit) → To prevent editing for specific cells.
+* [`actionBegin`](https://ej2.syncfusion.com/vue/documentation/api/spreadsheet/index-default#actionbegin)→ To prevent spreadsheet actions such as cut, paste, autofill, formatting, etc.
+
+**Step 1: Prevent editing for specific cells**
+
+To prevent editing for specific cells, use the [`cellEdit`](https://ej2.syncfusion.com/vue/documentation/api/spreadsheet/index-default#celledit) event, which triggers whenever a cell enters edit mode. By checking the column index and setting `args.cancel = true`, you can prevent editing for those columns. This ensures that users cannot modify the cell content in those columns.
+
+**Step 2: Prevent specific spreadsheet actions**
+
+To prevent specific action after preventing the cell editing, you need to use the [`actionBegin`](https://ej2.syncfusion.com/vue/documentation/api/spreadsheet/index-default#actionbegin) event. This event triggers before any action starts (such as cut, paste, autofill, formatting, etc.). In this event:
+
+* Fetch the target address based on the type of action being performed using `args.action` property.
+* Verify if the target range includes the restricted columns.
+* If the column is in the restricted list, cancel the action by setting `args.cancel = true`.
+
+This approach ensures that spreadsheet actions such as cut, paste, autofill, formatting, validation, and conditional formatting are prevented for specific cells without protecting the sheet or making the cells read-only.
+
+ > **Note:** In this example, we use column indexes to restrict actions. You can also use row indexes or cell addresses for the same purpose.
+
+The following example demonstrates how to prevent actions such as cut, paste, autofill, formatting, validation, and conditional formatting for specific cells(in the first and third columns) in the spreadsheet without protecting the sheet or making the cells read-only. You can also restrict additional actions by following the same approach.
+
+{% tabs %}
+{% highlight html tabtitle="Composition API (~/src/App.vue)" %}
+{% include code-snippet/spreadsheet/vue/prevent-actions-cs1/app-composition.vue %}
+{% endhighlight %}
+{% highlight html tabtitle="Options API (~/src/App.vue)" %}
+{% include code-snippet/spreadsheet/vue/prevent-actions-cs1/app.vue %}
+{% endhighlight %}
+{% endtabs %}
+
+{% previewsample "/document-processing/code-snippet/spreadsheet/vue/prevent-actions-cs1" %}
+
+## See Also
+
+* [Protection](https://help.syncfusion.com/document-processing/excel/spreadsheet/vue/protect-sheet)
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/angular.json b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/angular.json
new file mode 100644
index 000000000..9e4e688ef
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/angular.json
@@ -0,0 +1,74 @@
+{
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "version": 1,
+ "cli": {
+ "packageManager": "npm"
+ },
+ "newProjectRoot": "projects",
+ "projects": {
+ "my-app": {
+ "projectType": "application",
+ "schematics": {},
+ "root": "",
+ "sourceRoot": "src",
+ "prefix": "app",
+ "architect": {
+ "build": {
+ "builder": "@angular/build:application",
+ "options": {
+ "browser": "src/main.ts",
+ "index": "index.html",
+ "tsConfig": "tsconfig.app.json",
+ "assets": [
+ {
+ "glob": "**/*",
+ "input": "public"
+ }
+ ],
+ "styles": [
+ "src/styles.css"
+ ]
+ },
+ "configurations": {
+ "production": {
+ "budgets": [
+ {
+ "type": "initial",
+ "maximumWarning": "500kB",
+ "maximumError": "1MB"
+ },
+ {
+ "type": "anyComponentStyle",
+ "maximumWarning": "4kB",
+ "maximumError": "8kB"
+ }
+ ],
+ "outputHashing": "all"
+ },
+ "development": {
+ "optimization": false,
+ "extractLicenses": false,
+ "sourceMap": true
+ }
+ },
+ "defaultConfiguration": "production"
+ },
+ "serve": {
+ "builder": "@angular/build:dev-server",
+ "configurations": {
+ "production": {
+ "buildTarget": "my-app:build:production"
+ },
+ "development": {
+ "buildTarget": "my-app:build:development"
+ }
+ },
+ "defaultConfiguration": "development"
+ },
+ "test": {
+ "builder": "@angular/build:unit-test"
+ }
+ }
+ }
+ }
+}
diff --git a/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/index.html b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/index.html
new file mode 100644
index 000000000..ace26b00a
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+ MyApp
+
+
+
+
+
+
+
+
diff --git a/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/app.component.ts b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/app.component.ts
new file mode 100644
index 000000000..208b88e8e
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/app.component.ts
@@ -0,0 +1,93 @@
+import { NgModule } from '@angular/core'
+import { BrowserModule } from '@angular/platform-browser'
+import { getCellIndexes, getRangeIndexes, SpreadsheetAllModule } from '@syncfusion/ej2-angular-spreadsheet'
+
+
+
+import { Component, ViewChild } from '@angular/core';
+import { SpreadsheetComponent } from '@syncfusion/ej2-angular-spreadsheet';
+import { enableRipple } from '@syncfusion/ej2-base';
+import { defaultData } from './datasource';
+
+enableRipple(true);
+
+@Component({
+imports: [
+
+ SpreadsheetAllModule
+ ],
+
+
+standalone: true,
+ selector: 'app-container',
+ template: `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
`
+})
+export class AppComponent {
+ @ViewChild('spreadsheet')
+ spreadsheetObj: SpreadsheetComponent | undefined;
+
+ defaultData: object[] = defaultData;
+
+
+ created() {
+ this.spreadsheetObj!.cellFormat({fontWeight: 'bold', textAlign: 'center' }, 'A1:H1');
+ }
+ // Columns to be prevented editing.
+ public readOnlyColumns = [0,2];
+
+ // Triggers when cell editing starts in the spreadsheet.
+ cellEdit = (args: any) =>{
+ var addressRange = getCellIndexes(args.address.split('!')[1]);
+ // preventing cellEditing from the readOnly columns
+ if (this.readOnlyColumns.includes(addressRange[1])) {
+ args.cancel = true;
+ }
+ }
+
+ // Triggers whenever any action begins in spreadsheet.
+ actionBegin = (args: any) =>{
+ var address: any;
+ if (args.action == "clipboard") {
+ address = args.args.eventArgs.pastedRange;
+ }
+ else if (args.action == "autofill") {
+ address = args.args.eventArgs.fillRange;
+ }
+ else if (args.action == "format" || args.action == "validation" || args.action == "conditionalFormat") {
+ address = args.args.eventArgs.range;
+ }
+ else if (args.action == "cut") {
+ address = args.args.copiedRange
+ }
+ if (address) {
+ var addressRange = getRangeIndexes(address);
+ var colStart = addressRange[1];
+ var colEnd = addressRange[3];
+ // preventing other actions from the readOnly columns
+ for (var col = colStart; col <= colEnd; col++) {
+ if (this.readOnlyColumns.includes(col)) {
+ if (args.args.action == "cut") {
+ args.args.cancel = true;
+ } else {
+ args.args.eventArgs.cancel = true;
+ }
+ break;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/datasource.ts b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/datasource.ts
new file mode 100644
index 000000000..e4f83eda4
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/datasource.ts
@@ -0,0 +1,12 @@
+export let defaultData: Object[] = [
+ { 'Item Name': 'Casual Shoes', Date: '02/14/2014', Time: '11:34:32 AM', Quantity: 10, Price: 20, Amount: 200, Discount: 1, Profit: 10 },
+ { 'Item Name': 'Sports Shoes', Date: '06/11/2014', Time: '05:56:32 AM', Quantity: 20, Price: 30, Amount: 600, Discount: 5, Profit: 50 },
+ { 'Item Name': 'Formal Shoes', Date: '07/27/2014', Time: '03:32:44 AM', Quantity: 20, Price: 15, Amount: 300, Discount: 7, Profit: 27 },
+ { 'Item Name': 'Sandals & Floaters', Date: '11/21/2014', Time: '06:23:54 AM', Quantity: 15, Price: 20, Amount: 300, Discount: 11, Profit: 67 },
+ { 'Item Name': 'Flip- Flops & Slippers', Date: '06/23/2014', Time: '12:43:59 AM', Quantity: 30, Price: 10, Amount: 300, Discount: 10, Profit: 70 },
+ { 'Item Name': 'Sneakers', Date: '07/22/2014', Time: '10:55:53 AM', Quantity: 40, Price: 20, Amount: 800, Discount: 13, Profit: 66 },
+ { 'Item Name': 'Running Shoes', Date: '02/04/2014', Time: '03:44:34 AM', Quantity: 20, Price: 10, Amount: 200, Discount: 3, Profit: 14 },
+ { 'Item Name': 'Loafers', Date: '11/30/2014', Time: '03:12:52 AM', Quantity: 31, Price: 10, Amount: 310, Discount: 6, Profit: 29 },
+ { 'Item Name': 'Cricket Shoes', Date: '07/09/2014', Time: '11:32:14 AM', Quantity: 41, Price: 30, Amount: 1210, Discount: 12, Profit: 166 },
+ { 'Item Name': 'T-Shirts', Date: '10/31/2014', Time: '12:01:44 AM', Quantity: 50, Price: 10, Amount: 500, Discount: 9, Profit: 55 },
+];
diff --git a/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/main.ts b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/main.ts
new file mode 100644
index 000000000..54c6b6a26
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/main.ts
@@ -0,0 +1,6 @@
+import { bootstrapApplication } from '@angular/platform-browser';
+
+import { AppComponent } from './app.component';
+
+bootstrapApplication(AppComponent)
+ .catch((err) => console.error(err));
diff --git a/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/styles.css b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/styles.css
new file mode 100644
index 000000000..5101d1f08
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/src/styles.css
@@ -0,0 +1,10 @@
+@import '@syncfusion/ej2-base/styles/material.css';
+@import '@syncfusion/ej2-inputs/styles/material.css';
+@import '@syncfusion/ej2-buttons/styles/material.css';
+@import '@syncfusion/ej2-splitbuttons/styles/material.css';
+@import '@syncfusion/ej2-lists/styles/material.css';
+@import '@syncfusion/ej2-navigations/styles/material.css';
+@import '@syncfusion/ej2-popups/styles/material.css';
+@import '@syncfusion/ej2-dropdowns/styles/material.css';
+@import '@syncfusion/ej2-spreadsheet/styles/material.css';
+@import '@syncfusion/ej2-grids/styles/material.css';
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/tsconfig.json b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/tsconfig.json
new file mode 100644
index 000000000..725006390
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/angular/prevent-actions-cs1/tsconfig.json
@@ -0,0 +1,32 @@
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "baseUrl": "./",
+ "outDir": "./dist/out-tsc",
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "sourceMap": true,
+ "declaration": false,
+ "downlevelIteration": true,
+ "experimentalDecorators": true,
+ "moduleResolution": "bundler",
+ "importHelpers": true,
+ "target": "ES2022",
+ "module": "ES2022",
+ "useDefineForClassFields": false,
+ "lib": [
+ "ES2022",
+ "dom"
+ ]
+ },
+ "angularCompilerOptions": {
+ "enableI18nLegacyMessageIdFormat": false,
+ "strictInjectionParameters": true,
+ "strictInputAccessModifiers": true,
+ "strictTemplates": true
+ }
+}
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/asp-net-core/prevent-actions-cs1/PreventActionController.cs b/Document-Processing/code-snippet/spreadsheet/asp-net-core/prevent-actions-cs1/PreventActionController.cs
new file mode 100644
index 000000000..f93524540
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/asp-net-core/prevent-actions-cs1/PreventActionController.cs
@@ -0,0 +1,22 @@
+ public IActionResult Index()
+ {
+ List data = new List()
+ {
+ new { CustomerName= "Romona Heaslip", Model= "Taurus", Color= "Aquamarine", PaymentMode= "Debit Card", DeliveryDate= "07/11/2015", Amount= "8529.22" },
+ new { CustomerName= "Clare Batterton", Model= "Sparrow", Color= "Pink", PaymentMode= "Cash On Delivery", DeliveryDate= "7/13/2016", Amount= "17866.19" },
+ new { CustomerName= "Eamon Traise", Model= "Grand Cherokee", Color= "Blue", PaymentMode= "Net Banking", DeliveryDate= "09/04/2015", Amount= "13853.09" },
+ new { CustomerName= "Julius Gorner", Model= "GTO", Color= "Aquamarine", PaymentMode= "Credit Card", DeliveryDate= "12/15/2017", Amount= "2338.74" },
+ new { CustomerName= "Jenna Schoolfield", Model= "LX", Color= "Yellow", PaymentMode= "Credit Card", DeliveryDate= "10/08/2014", Amount= "9578.45" },
+ new { CustomerName= "Marylynne Harring", Model= "Catera", Color= "Green", PaymentMode= "Cash On Delivery", DeliveryDate= "7/01/2017", Amount= "19141.62" },
+ new { CustomerName= "Vilhelmina Leipelt", Model= "7 Series", Color= "Goldenrod", PaymentMode= "Credit Card", DeliveryDate= "12/20/2015", Amount= "6543.30" },
+ new { CustomerName= "Barby Heisler", Model= "Corvette", Color= "Red", PaymentMode= "Credit Card", DeliveryDate= "11/24/2014", Amount= "13035.06" },
+ new { CustomerName= "Karyn Boik", Model= "Regal", Color= "Indigo", PaymentMode= "Debit Card", DeliveryDate= "05/12/2014", Amount= "18488.80" },
+ new { CustomerName= "Jeanette Pamplin", Model= "S4", Color= "Fuscia", PaymentMode= "Net Banking", DeliveryDate= "12/30/2014", Amount= "12317.04" },
+ new { CustomerName= "Cristi Espinos", Model= "TL", Color= "Aquamarine", PaymentMode= "Credit Card", DeliveryDate= "12/18/2013", Amount= "6230.13" },
+ new { CustomerName= "Issy Humm", Model= "Club Wagon", Color= "Pink", PaymentMode= "Cash On Delivery", DeliveryDate= "02/02/2015", Amount= "9709.49" },
+ new { CustomerName= "Tuesday Fautly", Model= "V8 Vantage", Color= "Crimson", PaymentMode= "Debit Card", DeliveryDate= "11/19/2014", Amount= "9766.10" },
+ new { CustomerName= "Rosemaria Thomann", Model= "Caravan", Color= "Violet", PaymentMode= "Net Banking", DeliveryDate= "02/08/2014", Amount= "7685.49" },
+ };
+ ViewBag.DefaultData = data;
+ return View();
+ }
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/asp-net-core/prevent-actions-cs1/razor b/Document-Processing/code-snippet/spreadsheet/asp-net-core/prevent-actions-cs1/razor
new file mode 100644
index 000000000..c6bb1a100
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/asp-net-core/prevent-actions-cs1/razor
@@ -0,0 +1,69 @@
+@Html.EJS().Spreadsheet("spreadsheet").Created("created").CellEdit("cellEdit").ActionBegin("actionBegin").Sheets(sheet =>
+{
+ sheet.Ranges(ranges =>
+ {
+ ranges.DataSource((IEnumerable)ViewBag.DefaultData).Add();
+
+ }).Columns(column =>
+ {
+ column.Width(130).Add();
+ column.Width(220).Add();
+ column.Width(90).Add();
+ column.Width(140).Add();
+ column.Width(90).Add();
+ column.Width(100).Add();
+ column.Width(100).Add();
+ }).Add();
+}).Render()
+
+
+
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/asp-net-core/prevent-actions-cs1/tagHelper b/Document-Processing/code-snippet/spreadsheet/asp-net-core/prevent-actions-cs1/tagHelper
new file mode 100644
index 000000000..cee2d0bd7
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/asp-net-core/prevent-actions-cs1/tagHelper
@@ -0,0 +1,66 @@
+@{
+ ViewData["Title"] = "Home Page";
+}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/PreventActionController.cs b/Document-Processing/code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/PreventActionController.cs
new file mode 100644
index 000000000..b55151457
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/PreventActionController.cs
@@ -0,0 +1,22 @@
+ public ActionResult Index()
+ {
+ List data = new List()
+ {
+ new { CustomerName= "Romona Heaslip", Model= "Taurus", Color= "Aquamarine", PaymentMode= "Debit Card", DeliveryDate= "07/11/2015", Amount= "8529.22" },
+ new { CustomerName= "Clare Batterton", Model= "Sparrow", Color= "Pink", PaymentMode= "Cash On Delivery", DeliveryDate= "7/13/2016", Amount= "17866.19" },
+ new { CustomerName= "Eamon Traise", Model= "Grand Cherokee", Color= "Blue", PaymentMode= "Net Banking", DeliveryDate= "09/04/2015", Amount= "13853.09" },
+ new { CustomerName= "Julius Gorner", Model= "GTO", Color= "Aquamarine", PaymentMode= "Credit Card", DeliveryDate= "12/15/2017", Amount= "2338.74" },
+ new { CustomerName= "Jenna Schoolfield", Model= "LX", Color= "Yellow", PaymentMode= "Credit Card", DeliveryDate= "10/08/2014", Amount= "9578.45" },
+ new { CustomerName= "Marylynne Harring", Model= "Catera", Color= "Green", PaymentMode= "Cash On Delivery", DeliveryDate= "7/01/2017", Amount= "19141.62" },
+ new { CustomerName= "Vilhelmina Leipelt", Model= "7 Series", Color= "Goldenrod", PaymentMode= "Credit Card", DeliveryDate= "12/20/2015", Amount= "6543.30" },
+ new { CustomerName= "Barby Heisler", Model= "Corvette", Color= "Red", PaymentMode= "Credit Card", DeliveryDate= "11/24/2014", Amount= "13035.06" },
+ new { CustomerName= "Karyn Boik", Model= "Regal", Color= "Indigo", PaymentMode= "Debit Card", DeliveryDate= "05/12/2014", Amount= "18488.80" },
+ new { CustomerName= "Jeanette Pamplin", Model= "S4", Color= "Fuscia", PaymentMode= "Net Banking", DeliveryDate= "12/30/2014", Amount= "12317.04" },
+ new { CustomerName= "Cristi Espinos", Model= "TL", Color= "Aquamarine", PaymentMode= "Credit Card", DeliveryDate= "12/18/2013", Amount= "6230.13" },
+ new { CustomerName= "Issy Humm", Model= "Club Wagon", Color= "Pink", PaymentMode= "Cash On Delivery", DeliveryDate= "02/02/2015", Amount= "9709.49" },
+ new { CustomerName= "Tuesday Fautly", Model= "V8 Vantage", Color= "Crimson", PaymentMode= "Debit Card", DeliveryDate= "11/19/2014", Amount= "9766.10" },
+ new { CustomerName= "Rosemaria Thomann", Model= "Caravan", Color= "Violet", PaymentMode= "Net Banking", DeliveryDate= "02/08/2014", Amount= "7685.49" },
+ };
+ ViewBag.DefaultData = data;
+ return View();
+ }
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/razor b/Document-Processing/code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/razor
new file mode 100644
index 000000000..c6bb1a100
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/razor
@@ -0,0 +1,69 @@
+@Html.EJS().Spreadsheet("spreadsheet").Created("created").CellEdit("cellEdit").ActionBegin("actionBegin").Sheets(sheet =>
+{
+ sheet.Ranges(ranges =>
+ {
+ ranges.DataSource((IEnumerable)ViewBag.DefaultData).Add();
+
+ }).Columns(column =>
+ {
+ column.Width(130).Add();
+ column.Width(220).Add();
+ column.Width(90).Add();
+ column.Width(140).Add();
+ column.Width(90).Add();
+ column.Width(100).Add();
+ column.Width(100).Add();
+ }).Add();
+}).Render()
+
+
+
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/tagHelper b/Document-Processing/code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/tagHelper
new file mode 100644
index 000000000..cee2d0bd7
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/asp-net-mvc/prevent-actions-cs1/tagHelper
@@ -0,0 +1,66 @@
+@{
+ ViewData["Title"] = "Home Page";
+}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/datasource.ts b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/datasource.ts
new file mode 100644
index 000000000..e4f83eda4
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/datasource.ts
@@ -0,0 +1,12 @@
+export let defaultData: Object[] = [
+ { 'Item Name': 'Casual Shoes', Date: '02/14/2014', Time: '11:34:32 AM', Quantity: 10, Price: 20, Amount: 200, Discount: 1, Profit: 10 },
+ { 'Item Name': 'Sports Shoes', Date: '06/11/2014', Time: '05:56:32 AM', Quantity: 20, Price: 30, Amount: 600, Discount: 5, Profit: 50 },
+ { 'Item Name': 'Formal Shoes', Date: '07/27/2014', Time: '03:32:44 AM', Quantity: 20, Price: 15, Amount: 300, Discount: 7, Profit: 27 },
+ { 'Item Name': 'Sandals & Floaters', Date: '11/21/2014', Time: '06:23:54 AM', Quantity: 15, Price: 20, Amount: 300, Discount: 11, Profit: 67 },
+ { 'Item Name': 'Flip- Flops & Slippers', Date: '06/23/2014', Time: '12:43:59 AM', Quantity: 30, Price: 10, Amount: 300, Discount: 10, Profit: 70 },
+ { 'Item Name': 'Sneakers', Date: '07/22/2014', Time: '10:55:53 AM', Quantity: 40, Price: 20, Amount: 800, Discount: 13, Profit: 66 },
+ { 'Item Name': 'Running Shoes', Date: '02/04/2014', Time: '03:44:34 AM', Quantity: 20, Price: 10, Amount: 200, Discount: 3, Profit: 14 },
+ { 'Item Name': 'Loafers', Date: '11/30/2014', Time: '03:12:52 AM', Quantity: 31, Price: 10, Amount: 310, Discount: 6, Profit: 29 },
+ { 'Item Name': 'Cricket Shoes', Date: '07/09/2014', Time: '11:32:14 AM', Quantity: 41, Price: 30, Amount: 1210, Discount: 12, Profit: 166 },
+ { 'Item Name': 'T-Shirts', Date: '10/31/2014', Time: '12:01:44 AM', Quantity: 50, Price: 10, Amount: 500, Discount: 9, Profit: 55 },
+];
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/es5-datasource.js b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/es5-datasource.js
new file mode 100644
index 000000000..764f50949
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/es5-datasource.js
@@ -0,0 +1,12 @@
+var defaultData = [
+ { 'Item Name': 'Casual Shoes', Date: '02/14/2014', Time: '11:34:32 AM', Quantity: 10, Price: 20, Amount: 200, Discount: 1, Profit: 10 },
+ { 'Item Name': 'Sports Shoes', Date: '06/11/2014', Time: '05:56:32 AM', Quantity: 20, Price: 30, Amount: 600, Discount: 5, Profit: 50 },
+ { 'Item Name': 'Formal Shoes', Date: '07/27/2014', Time: '03:32:44 AM', Quantity: 20, Price: 15, Amount: 300, Discount: 7, Profit: 27 },
+ { 'Item Name': 'Sandals & Floaters', Date: '11/21/2014', Time: '06:23:54 AM', Quantity: 15, Price: 20, Amount: 300, Discount: 11, Profit: 67 },
+ { 'Item Name': 'Flip- Flops & Slippers', Date: '06/23/2014', Time: '12:43:59 AM', Quantity: 30, Price: 10, Amount: 300, Discount: 10, Profit: 70 },
+ { 'Item Name': 'Sneakers', Date: '07/22/2014', Time: '10:55:53 AM', Quantity: 40, Price: 20, Amount: 800, Discount: 13, Profit: 66 },
+ { 'Item Name': 'Running Shoes', Date: '02/04/2014', Time: '03:44:34 AM', Quantity: 20, Price: 10, Amount: 200, Discount: 3, Profit: 14 },
+ { 'Item Name': 'Loafers', Date: '11/30/2014', Time: '03:12:52 AM', Quantity: 31, Price: 10, Amount: 310, Discount: 6, Profit: 29 },
+ { 'Item Name': 'Cricket Shoes', Date: '07/09/2014', Time: '11:32:14 AM', Quantity: 41, Price: 30, Amount: 1210, Discount: 12, Profit: 166 },
+ { 'Item Name': 'T-Shirts', Date: '10/31/2014', Time: '12:01:44 AM', Quantity: 50, Price: 10, Amount: 500, Discount: 9, Profit: 55 },
+];
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.html b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.html
new file mode 100644
index 000000000..c9941886e
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.html
@@ -0,0 +1,43 @@
+
+
+
+
+ EJ2 SpreadSheet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.js b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.js
new file mode 100644
index 000000000..5dec35c29
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.js
@@ -0,0 +1,62 @@
+var sheets = [
+ {
+ name: 'Price Details',
+ ranges: [{ dataSource: defaultData, startCell: 'A1' }],
+ rows: [
+ {
+ height: 30
+ }
+ ],
+ rowCount: 200,
+ columns: [
+ { width: 130 }, { width: 100 }, { width: 100 }
+ ]
+ }
+];
+
+// Columns to be prevented editing.
+var readOnlyColumns = [0, 2];
+
+var spreadsheet = new ej.spreadsheet.Spreadsheet({
+ sheets: sheets,
+ cellEdit: function (args) {
+ var addressRange = ej.spreadsheet.getCellIndexes(args.address.split('!')[1]);
+ // preventing cellEditing from the readOnly columns
+ if (readOnlyColumns.includes(addressRange[1])) {
+ args.cancel = true;
+ }
+ },
+ actionBegin: function (args) {
+ var address;
+ if (args.action == "clipboard") {
+ address = args.args.eventArgs.pastedRange;
+ }
+ else if (args.action == "autofill") {
+ address = args.args.eventArgs.fillRange;
+ }
+ else if (args.action == "format" || args.action == "validation" || args.action == "conditionalFormat") {
+ address = args.args.eventArgs.range;
+ }
+ else if (args.action == "cut") {
+ address = args.args.copiedRange
+ }
+ if (address) {
+ var addressRange = ej.spreadsheet.getRangeIndexes(address);
+ var colStart = addressRange[1];
+ var colEnd = addressRange[3];
+ // preventing other actions from the readOnly columns
+ for (var col = colStart; col <= colEnd; col++) {
+ if (readOnlyColumns.includes(col)) {
+ if (args.args.action == "cut") {
+ args.args.cancel = true;
+ } else {
+ args.args.eventArgs.cancel = true;
+ }
+ break;
+ }
+ }
+ }
+ }
+});
+
+spreadsheet.appendTo('#spreadsheet');
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.ts b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.ts
new file mode 100644
index 000000000..eec4d48d4
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/index.ts
@@ -0,0 +1,67 @@
+
+
+import { Spreadsheet, SheetModel, getCellIndexes, getRangeIndexes } from '@syncfusion/ej2-spreadsheet';
+import { defaultData } from './datasource.ts';
+
+let sheets: SheetModel[] = [
+ {
+ name: 'Price Details',
+ ranges: [{ dataSource: defaultData, startCell: 'A1' }],
+ rows: [
+ {
+ height: 30
+ }
+ ],
+ rowCount: 200,
+ columns: [
+ { width: 130 }, { width: 100 }, { width: 100 }
+ ]
+ }
+];
+
+// Columns to be prevented editing.
+let readOnlyColumns = [0, 2];
+
+let spreadsheet: Spreadsheet = new Spreadsheet({
+ sheets: sheets,
+ cellEdit: (args: any) => {
+ let addressRange = getCellIndexes(args.address.split('!')[1]);
+ // preventing cellEditing from the readOnly columns
+ if (readOnlyColumns.includes(addressRange[1])) {
+ args.cancel = true;
+ }
+ },
+ actionBegin: (args: any) => {
+ let address;
+ if (args.action == "clipboard") {
+ address = args.args.eventArgs.pastedRange;
+ }
+ else if (args.action == "autofill") {
+ address = args.args.eventArgs.fillRange;
+ }
+ else if (args.action == "format" || args.action == "validation" || args.action == "conditionalFormat") {
+ address = args.args.eventArgs.range;
+ }
+ else if (args.action == "cut") {
+ address = args.args.copiedRange
+ }
+ if (address) {
+ let addressRange = getRangeIndexes(address);
+ let colStart = addressRange[1];
+ let colEnd = addressRange[3];
+ // preventing other actions from the readOnly columns
+ for (let col = colStart; col <= colEnd; col++) {
+ if (readOnlyColumns.includes(col)) {
+ if (args.args.action == "cut") {
+ args.args.cancel = true;
+ } else {
+ args.args.eventArgs.cancel = true;
+ }
+ break;
+ }
+ }
+ }
+ }
+});
+
+spreadsheet.appendTo('#spreadsheet');
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/styles.css b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/styles.css
new file mode 100644
index 000000000..b0a0c6827
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/styles.css
@@ -0,0 +1,19 @@
+#container {
+ visibility: hidden;
+}
+
+#spreadsheet_sheet_panel {
+ height: 380px;
+}
+
+#loader {
+ color: #008cff;
+ height: 40px;
+ left: 45%;
+ position: absolute;
+ top: 45%;
+ width: 30%;
+}
+body {
+ height: 475px;
+}
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/system.config.js b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/system.config.js
new file mode 100644
index 000000000..074c2c140
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es5/prevent-actions-cs1/system.config.js
@@ -0,0 +1,44 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/23.1.36/"
+ },
+ map: {
+ main: "index.ts",
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+ //Syncfusion packages mapping
+ "@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-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.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-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-charts": "syncfusion:ej2-charts/dist/ej2-charts.umd.min.js",
+ "@syncfusion/ej2-svg-base": "syncfusion:ej2-svg-base/dist/ej2-svg-base.umd.min.js",
+ "@syncfusion/ej2-spreadsheet": "syncfusion:ej2-spreadsheet/dist/ej2-spreadsheet.umd.min.js"
+ }
+});
+
+System.import('index.ts').catch(console.error.bind(console)).then(function () {
+ document.getElementById('loader').style.display = "none";
+ document.getElementById('container').style.visibility = "visible";
+});
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/datasource.ts b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/datasource.ts
new file mode 100644
index 000000000..e4f83eda4
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/datasource.ts
@@ -0,0 +1,12 @@
+export let defaultData: Object[] = [
+ { 'Item Name': 'Casual Shoes', Date: '02/14/2014', Time: '11:34:32 AM', Quantity: 10, Price: 20, Amount: 200, Discount: 1, Profit: 10 },
+ { 'Item Name': 'Sports Shoes', Date: '06/11/2014', Time: '05:56:32 AM', Quantity: 20, Price: 30, Amount: 600, Discount: 5, Profit: 50 },
+ { 'Item Name': 'Formal Shoes', Date: '07/27/2014', Time: '03:32:44 AM', Quantity: 20, Price: 15, Amount: 300, Discount: 7, Profit: 27 },
+ { 'Item Name': 'Sandals & Floaters', Date: '11/21/2014', Time: '06:23:54 AM', Quantity: 15, Price: 20, Amount: 300, Discount: 11, Profit: 67 },
+ { 'Item Name': 'Flip- Flops & Slippers', Date: '06/23/2014', Time: '12:43:59 AM', Quantity: 30, Price: 10, Amount: 300, Discount: 10, Profit: 70 },
+ { 'Item Name': 'Sneakers', Date: '07/22/2014', Time: '10:55:53 AM', Quantity: 40, Price: 20, Amount: 800, Discount: 13, Profit: 66 },
+ { 'Item Name': 'Running Shoes', Date: '02/04/2014', Time: '03:44:34 AM', Quantity: 20, Price: 10, Amount: 200, Discount: 3, Profit: 14 },
+ { 'Item Name': 'Loafers', Date: '11/30/2014', Time: '03:12:52 AM', Quantity: 31, Price: 10, Amount: 310, Discount: 6, Profit: 29 },
+ { 'Item Name': 'Cricket Shoes', Date: '07/09/2014', Time: '11:32:14 AM', Quantity: 41, Price: 30, Amount: 1210, Discount: 12, Profit: 166 },
+ { 'Item Name': 'T-Shirts', Date: '10/31/2014', Time: '12:01:44 AM', Quantity: 50, Price: 10, Amount: 500, Discount: 9, Profit: 55 },
+];
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/es5-datasource.js b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/es5-datasource.js
new file mode 100644
index 000000000..764f50949
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/es5-datasource.js
@@ -0,0 +1,12 @@
+var defaultData = [
+ { 'Item Name': 'Casual Shoes', Date: '02/14/2014', Time: '11:34:32 AM', Quantity: 10, Price: 20, Amount: 200, Discount: 1, Profit: 10 },
+ { 'Item Name': 'Sports Shoes', Date: '06/11/2014', Time: '05:56:32 AM', Quantity: 20, Price: 30, Amount: 600, Discount: 5, Profit: 50 },
+ { 'Item Name': 'Formal Shoes', Date: '07/27/2014', Time: '03:32:44 AM', Quantity: 20, Price: 15, Amount: 300, Discount: 7, Profit: 27 },
+ { 'Item Name': 'Sandals & Floaters', Date: '11/21/2014', Time: '06:23:54 AM', Quantity: 15, Price: 20, Amount: 300, Discount: 11, Profit: 67 },
+ { 'Item Name': 'Flip- Flops & Slippers', Date: '06/23/2014', Time: '12:43:59 AM', Quantity: 30, Price: 10, Amount: 300, Discount: 10, Profit: 70 },
+ { 'Item Name': 'Sneakers', Date: '07/22/2014', Time: '10:55:53 AM', Quantity: 40, Price: 20, Amount: 800, Discount: 13, Profit: 66 },
+ { 'Item Name': 'Running Shoes', Date: '02/04/2014', Time: '03:44:34 AM', Quantity: 20, Price: 10, Amount: 200, Discount: 3, Profit: 14 },
+ { 'Item Name': 'Loafers', Date: '11/30/2014', Time: '03:12:52 AM', Quantity: 31, Price: 10, Amount: 310, Discount: 6, Profit: 29 },
+ { 'Item Name': 'Cricket Shoes', Date: '07/09/2014', Time: '11:32:14 AM', Quantity: 41, Price: 30, Amount: 1210, Discount: 12, Profit: 166 },
+ { 'Item Name': 'T-Shirts', Date: '10/31/2014', Time: '12:01:44 AM', Quantity: 50, Price: 10, Amount: 500, Discount: 9, Profit: 55 },
+];
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.html b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.html
new file mode 100644
index 000000000..c9941886e
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.html
@@ -0,0 +1,43 @@
+
+
+
+
+ EJ2 SpreadSheet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.js b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.js
new file mode 100644
index 000000000..5dec35c29
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.js
@@ -0,0 +1,62 @@
+var sheets = [
+ {
+ name: 'Price Details',
+ ranges: [{ dataSource: defaultData, startCell: 'A1' }],
+ rows: [
+ {
+ height: 30
+ }
+ ],
+ rowCount: 200,
+ columns: [
+ { width: 130 }, { width: 100 }, { width: 100 }
+ ]
+ }
+];
+
+// Columns to be prevented editing.
+var readOnlyColumns = [0, 2];
+
+var spreadsheet = new ej.spreadsheet.Spreadsheet({
+ sheets: sheets,
+ cellEdit: function (args) {
+ var addressRange = ej.spreadsheet.getCellIndexes(args.address.split('!')[1]);
+ // preventing cellEditing from the readOnly columns
+ if (readOnlyColumns.includes(addressRange[1])) {
+ args.cancel = true;
+ }
+ },
+ actionBegin: function (args) {
+ var address;
+ if (args.action == "clipboard") {
+ address = args.args.eventArgs.pastedRange;
+ }
+ else if (args.action == "autofill") {
+ address = args.args.eventArgs.fillRange;
+ }
+ else if (args.action == "format" || args.action == "validation" || args.action == "conditionalFormat") {
+ address = args.args.eventArgs.range;
+ }
+ else if (args.action == "cut") {
+ address = args.args.copiedRange
+ }
+ if (address) {
+ var addressRange = ej.spreadsheet.getRangeIndexes(address);
+ var colStart = addressRange[1];
+ var colEnd = addressRange[3];
+ // preventing other actions from the readOnly columns
+ for (var col = colStart; col <= colEnd; col++) {
+ if (readOnlyColumns.includes(col)) {
+ if (args.args.action == "cut") {
+ args.args.cancel = true;
+ } else {
+ args.args.eventArgs.cancel = true;
+ }
+ break;
+ }
+ }
+ }
+ }
+});
+
+spreadsheet.appendTo('#spreadsheet');
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.ts b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.ts
new file mode 100644
index 000000000..eec4d48d4
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/index.ts
@@ -0,0 +1,67 @@
+
+
+import { Spreadsheet, SheetModel, getCellIndexes, getRangeIndexes } from '@syncfusion/ej2-spreadsheet';
+import { defaultData } from './datasource.ts';
+
+let sheets: SheetModel[] = [
+ {
+ name: 'Price Details',
+ ranges: [{ dataSource: defaultData, startCell: 'A1' }],
+ rows: [
+ {
+ height: 30
+ }
+ ],
+ rowCount: 200,
+ columns: [
+ { width: 130 }, { width: 100 }, { width: 100 }
+ ]
+ }
+];
+
+// Columns to be prevented editing.
+let readOnlyColumns = [0, 2];
+
+let spreadsheet: Spreadsheet = new Spreadsheet({
+ sheets: sheets,
+ cellEdit: (args: any) => {
+ let addressRange = getCellIndexes(args.address.split('!')[1]);
+ // preventing cellEditing from the readOnly columns
+ if (readOnlyColumns.includes(addressRange[1])) {
+ args.cancel = true;
+ }
+ },
+ actionBegin: (args: any) => {
+ let address;
+ if (args.action == "clipboard") {
+ address = args.args.eventArgs.pastedRange;
+ }
+ else if (args.action == "autofill") {
+ address = args.args.eventArgs.fillRange;
+ }
+ else if (args.action == "format" || args.action == "validation" || args.action == "conditionalFormat") {
+ address = args.args.eventArgs.range;
+ }
+ else if (args.action == "cut") {
+ address = args.args.copiedRange
+ }
+ if (address) {
+ let addressRange = getRangeIndexes(address);
+ let colStart = addressRange[1];
+ let colEnd = addressRange[3];
+ // preventing other actions from the readOnly columns
+ for (let col = colStart; col <= colEnd; col++) {
+ if (readOnlyColumns.includes(col)) {
+ if (args.args.action == "cut") {
+ args.args.cancel = true;
+ } else {
+ args.args.eventArgs.cancel = true;
+ }
+ break;
+ }
+ }
+ }
+ }
+});
+
+spreadsheet.appendTo('#spreadsheet');
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/styles.css b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/styles.css
new file mode 100644
index 000000000..b0a0c6827
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/styles.css
@@ -0,0 +1,19 @@
+#container {
+ visibility: hidden;
+}
+
+#spreadsheet_sheet_panel {
+ height: 380px;
+}
+
+#loader {
+ color: #008cff;
+ height: 40px;
+ left: 45%;
+ position: absolute;
+ top: 45%;
+ width: 30%;
+}
+body {
+ height: 475px;
+}
diff --git a/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/system.config.js b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/system.config.js
new file mode 100644
index 000000000..074c2c140
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/javascript-es6/prevent-actions-cs1/system.config.js
@@ -0,0 +1,44 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/23.1.36/"
+ },
+ map: {
+ main: "index.ts",
+ typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js",
+ //Syncfusion packages mapping
+ "@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-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js",
+ "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js",
+ "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js",
+ "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.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-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-charts": "syncfusion:ej2-charts/dist/ej2-charts.umd.min.js",
+ "@syncfusion/ej2-svg-base": "syncfusion:ej2-svg-base/dist/ej2-svg-base.umd.min.js",
+ "@syncfusion/ej2-spreadsheet": "syncfusion:ej2-spreadsheet/dist/ej2-spreadsheet.umd.min.js"
+ }
+});
+
+System.import('index.ts').catch(console.error.bind(console)).then(function () {
+ document.getElementById('loader').style.display = "none";
+ document.getElementById('container').style.visibility = "visible";
+});
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/app-composition.vue b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/app-composition.vue
new file mode 100644
index 000000000..222da5652
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/app-composition.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/app.vue b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/app.vue
new file mode 100644
index 000000000..674d04247
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/app.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/data.js b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/data.js
new file mode 100644
index 000000000..087650b46
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/data.js
@@ -0,0 +1,238 @@
+define(["require", "exports"], function (require, exports) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.defaultData = [
+ {
+ "Customer Name": "Romona Heaslip",
+ "Model": "Taurus",
+ "Color": "Aquamarine",
+ "Payment Mode": "Debit Card",
+ "Delivery Date": "07/11/2015",
+ "Amount": "8529.22"
+ },
+ {
+ "Customer Name": "Clare Batterton",
+ "Model": "Sparrow",
+ "Color": "Pink",
+ "Payment Mode": "Cash On Delivery",
+ "Delivery Date": "7/13/2016",
+ "Amount": "17866.19"
+ },
+ {
+ "Customer Name": "Eamon Traise",
+ "Model": "Grand Cherokee",
+ "Color": "Blue",
+ "Payment Mode": "Net Banking",
+ "Delivery Date": "09/04/2015",
+ "Amount": "13853.09"
+ },
+ {
+ "Customer Name": "Julius Gorner",
+ "Model": "GTO",
+ "Color": "Aquamarine",
+ "Payment Mode": "Credit Card",
+ "Delivery Date": "12/15/2017",
+ "Amount": "2338.74"
+ },
+ {
+ "Customer Name": "Jenna Schoolfield",
+ "Model": "LX",
+ "Color": "Yellow",
+ "Payment Mode": "Credit Card",
+ "Delivery Date": "10/08/2014",
+ "Amount": "9578.45"
+ },
+ {
+ "Customer Name": "Marylynne Harring",
+ "Model": "Catera",
+ "Color": "Green",
+ "Payment Mode": "Cash On Delivery",
+ "Delivery Date": "7/01/2017",
+ "Amount": "19141.62"
+ },
+ {
+ "Customer Name": "Vilhelmina Leipelt",
+ "Model": "7 Series",
+ "Color": "Goldenrod",
+ "Payment Mode": "Credit Card",
+ "Delivery Date": "12/20/2015",
+ "Amount": "6543.30"
+ },
+ {
+ "Customer Name": "Barby Heisler",
+ "Model": "Corvette",
+ "Color": "Red",
+ "Payment Mode": "Credit Card",
+ "Delivery Date": "11/24/2014",
+ "Amount": "13035.06"
+ },
+ {
+ "Customer Name": "Karyn Boik",
+ "Model": "Regal",
+ "Color": "Indigo",
+ "Payment Mode": "Debit Card",
+ "Delivery Date": "05/12/2014",
+ "Amount": "18488.80"
+ },
+ {
+ "Customer Name": "Jeanette Pamplin",
+ "Model": "S4",
+ "Color": "Fuscia",
+ "Payment Mode": "Net Banking",
+ "Delivery Date": "12/30/2014",
+ "Amount": "12317.04"
+ },
+ {
+ "Customer Name": "Cristi Espinos",
+ "Model": "TL",
+ "Color": "Aquamarine",
+ "Payment Mode": "Credit Card",
+ "Delivery Date": "12/18/2013",
+ "Amount": "6230.13"
+ },
+ {
+ "Customer Name": "Issy Humm",
+ "Model": "Club Wagon",
+ "Color": "Pink",
+ "Payment Mode": "Cash On Delivery",
+ "Delivery Date": "02/02/2015",
+ "Amount": "9709.49"
+ },
+ {
+ "Customer Name": "Tuesday Fautly",
+ "Model": "V8 Vantage",
+ "Color": "Crimson",
+ "Payment Mode": "Debit Card",
+ "Delivery Date": "11/19/2014",
+ "Amount": "9766.10"
+ },
+ {
+ "Customer Name": "Rosemaria Thomann",
+ "Model": "Caravan",
+ "Color": "Violet",
+ "Payment Mode": "Net Banking",
+ "Delivery Date": "02/08/2014",
+ "Amount": "7685.49"
+ },
+ {
+ "Customer Name": "Lyell Fuentez",
+ "Model": "Bravada",
+ "Color": "Violet",
+ "Payment Mode": "Debit Card",
+ "Delivery Date": "08/05/2016",
+ "Amount": "18012.45"
+ },
+ {
+ "Customer Name": "Raynell Layne",
+ "Model": "Colorado",
+ "Color": "Pink",
+ "Payment Mode": "Credit Card",
+ "Delivery Date": "05/30/2016",
+ "Amount": "2785.49"
+ },
+ {
+ "Customer Name": "Raye Whines",
+ "Model": "4Runner",
+ "Color": "Red",
+ "Payment Mode": "Debit Card",
+ "Delivery Date": "12/10/2016",
+ "Amount": "9967.74"
+ },
+ {
+ "Customer Name": "Virgina Aharoni",
+ "Model": "TSX",
+ "Color": "Pink",
+ "Payment Mode": "Cash On Delivery",
+ "Delivery Date": "10/23/2014",
+ "Amount": "5584.33"
+ },
+ {
+ "Customer Name": "Peta Cheshir",
+ "Model": "Pathfinder",
+ "Color": "Red",
+ "Payment Mode": "Net Banking",
+ "Delivery Date": "12/24/2015",
+ "Amount": "5286.53"
+ },
+ {
+ "Customer Name": "Jule Urion",
+ "Model": "Charger",
+ "Color": "Violet",
+ "Payment Mode": "Debit Card",
+ "Delivery Date": "11/20/2013",
+ "Amount": "13511.91"
+ },
+ {
+ "Customer Name": "Lew Gilyatt",
+ "Model": "Bonneville",
+ "Color": "Crimson",
+ "Payment Mode": "Credit Card",
+ "Delivery Date": "11/19/2013",
+ "Amount": "6498.19"
+ },
+ {
+ "Customer Name": "Jobey Fortun",
+ "Model": "B-Series",
+ "Color": "Blue",
+ "Payment Mode": "Net Banking",
+ "Delivery Date": "10/30/2014",
+ "Amount": "10359.67"
+ },
+ {
+ "Customer Name": "Blondie Crump",
+ "Model": "Voyager",
+ "Color": "Turquoise",
+ "Payment Mode": "Credit Card",
+ "Delivery Date": "04/06/2018",
+ "Amount": "8118.39"
+ },
+ {
+ "Customer Name": "Florentia Binns",
+ "Model": "Grand Prix",
+ "Color": "Orange",
+ "Payment Mode": "Cash On Delivery",
+ "Delivery Date": "10/13/2016",
+ "Amount": "10204.37"
+ },
+ {
+ "Customer Name": "Jaquelin Galtone",
+ "Model": "Sunbird",
+ "Color": "Red",
+ "Payment Mode": "Net Banking",
+ "Delivery Date": "10/22/2013",
+ "Amount": "6528.06"
+ },
+ {
+ "Customer Name": "Hakeem Easseby",
+ "Model": "Mirage",
+ "Color": "Crimson",
+ "Payment Mode": "Debit Card",
+ "Delivery Date": "9/12/2014",
+ "Amount": "5619.25"
+ },
+ {
+ "Customer Name": "Nickolaus Gidman",
+ "Model": "XK",
+ "Color": "Orange",
+ "Payment Mode": "Debit Card",
+ "Delivery Date": "05/12/2016",
+ "Amount": "5091.43"
+ },
+ {
+ "Customer Name": "Jenine Iglesia",
+ "Model": "Accord",
+ "Color": "Orange",
+ "Payment Mode": "Debit Card",
+ "Delivery Date": "09/03/2018",
+ "Amount": "14566.08"
+ },
+ {
+ "Customer Name": "Fax Witherspoon",
+ "Model": "Range Rover Sport",
+ "Color": "Orange",
+ "Payment Mode": "Credit Card",
+ "Delivery Date": "2/22/2018",
+ "Amount": "5284.87"
+ }
+ ]
+});
diff --git a/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/index.css b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/index.css
new file mode 100644
index 000000000..3d6092a83
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/index.css
@@ -0,0 +1,3 @@
+.custom-btn {
+ margin: 0 0 10px 0;
+}
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/index.html b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/index.html
new file mode 100644
index 000000000..161613118
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/index.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+ EJ2 Vue Sample
+
+
+
+
+
+
+
+
+
+
+
+ Loading....
+
+
+
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/index.js b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/index.js
new file mode 100644
index 000000000..a63d97ff7
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/index.js
@@ -0,0 +1,82 @@
+
+import Vue from "vue";
+import { SpreadsheetPlugin, getRangeIndexes, getCellIndexes } from "@syncfusion/ej2-vue-spreadsheet";
+import { defaultData } from './data.js';
+Vue.use(SpreadsheetPlugin);
+
+new Vue({
+ el: '#app',
+ template: `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`,
+
+ data: () => {
+ return {
+ dataSource: defaultData,
+ width1: 180,
+ width2: 130,
+ width3: 120,
+ readOnlyColumns: [0, 2]
+ }
+ },
+ methods: {
+ created: function () {
+ var spreadsheet = this.$refs.spreadsheet;
+ spreadsheet.cellFormat({ fontWeight: 'bold', textAlign: 'center', verticalAlign: 'middle' }, 'A1:F1');
+ },
+ cellEdit: function (args) {
+ var addressRange = getCellIndexes(args.address.split('!')[1]);
+ // preventing cellEditing from the readOnly columns
+ if (this.readOnlyColumns.includes(addressRange[1])) {
+ args.cancel = true;
+ }
+ },
+ actionBegin: function (args) {
+ var address;
+ if (args.action == "clipboard") {
+ address = args.args.eventArgs.pastedRange;
+ }
+ else if (args.action == "autofill") {
+ address = args.args.eventArgs.fillRange;
+ }
+ else if (args.action == "format" || args.action == "validation" || args.action == "conditionalFormat") {
+ address = args.args.eventArgs.range;
+ }
+ else if (args.action == "cut") {
+ address = args.args.copiedRange
+ }
+ if (address) {
+ var addressRange = getRangeIndexes(address);
+ var colStart = addressRange[1];
+ var colEnd = addressRange[3];
+ // preventing other actions from the readOnly columns
+ for (var col = colStart; col <= colEnd; col++) {
+ if (readOnlyColumns.includes(col)) {
+ if (args.args.action == "cut") {
+ args.args.cancel = true;
+ } else {
+ args.args.eventArgs.cancel = true;
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+});
\ No newline at end of file
diff --git a/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/systemjs.config.js b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/systemjs.config.js
new file mode 100644
index 000000000..c93a70c67
--- /dev/null
+++ b/Document-Processing/code-snippet/spreadsheet/vue/prevent-actions-cs1/systemjs.config.js
@@ -0,0 +1,43 @@
+System.config({
+ transpiler: "typescript",
+ typescriptOptions: {
+ compilerOptions: {
+ target: "umd",
+ module: "commonjs",
+ moduleResolution: "node",
+ emitDecoratorMetadata: true,
+ experimentalDecorators: true
+ }
+ },
+ paths: {
+ "syncfusion:": "https://cdn.syncfusion.com/ej2/26.1.35/"
+ },
+ 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-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js",
+ "@syncfusion/ej2-spreadsheet": "syncfusion:ej2-spreadsheet/dist/ej2-spreadsheet.umd.min.js",
+ "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js",
+ "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js",
+ "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js",
+ "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js",
+ "@syncfusion/ej2-notifications": "syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js",
+ "@syncfusion/ej2-dropdowns":"syncfusion:ej2-dropdowns/dist/ej2-dropdowns.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-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.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-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js",
+ "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js",
+ "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js",
+ "@syncfusion/ej2-charts": "syncfusion:ej2-charts/dist/ej2-charts.umd.min.js",
+ "@syncfusion/ej2-svg-base": "syncfusion:ej2-svg-base/dist/ej2-svg-base.umd.min.js",
+ "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js",
+ "@syncfusion/ej2-vue-spreadsheet": "syncfusion:ej2-vue-spreadsheet/dist/ej2-vue-spreadsheet.umd.min.js"
+ }
+});
+
+System.import('index.js');
diff --git a/Document-Processing/samples/spreadsheet/angular/prevent-actions-cs1/3rdpartylicenses.txt b/Document-Processing/samples/spreadsheet/angular/prevent-actions-cs1/3rdpartylicenses.txt
new file mode 100644
index 000000000..e30063ef1
--- /dev/null
+++ b/Document-Processing/samples/spreadsheet/angular/prevent-actions-cs1/3rdpartylicenses.txt
@@ -0,0 +1,544 @@
+
+--------------------------------------------------------------------------------
+Package: @angular/core
+License: "MIT"
+
+The MIT License
+
+Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+Package: rxjs
+License: "Apache-2.0"
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+--------------------------------------------------------------------------------
+Package: tslib
+License: "0BSD"
+
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+--------------------------------------------------------------------------------
+Package: @angular/common
+License: "MIT"
+
+The MIT License
+
+Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+Package: @angular/platform-browser
+License: "MIT"
+
+The MIT License
+
+Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-base
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-angular-base
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+
+
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-data
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-buttons
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-popups
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-lists
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-splitbuttons
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-inputs
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-navigations
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-notifications
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-dropdowns
+License: "SEE LICENSE IN license"
+
+Licensing information is available in the following link
+
+https://www.syncfusion.com/sales/licensing
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-calendars
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-grids
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-svg-base
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-charts
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances can you use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-spreadsheet
+License: "SEE LICENSE IN license"
+
+Essential JS 2 library is available under the Syncfusion Essential Studio program, and can be licensed either under the Syncfusion Community License Program or the Syncfusion commercial license.
+
+To be qualified for the Syncfusion Community License Program you must have a gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and have less than five (5) developers in your organization, and agree to be bound by Syncfusion’s terms and conditions.
+
+Customers who do not qualify for the community license can contact sales@syncfusion.com for commercial licensing options.
+
+Under no circumstances you can use this product without (1) either a Community License or a commercial license and (2) without agreeing and abiding by Syncfusion’s license containing all terms and conditions.
+
+The Syncfusion license that contains the terms and conditions can be found at
+https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
+--------------------------------------------------------------------------------
+Package: @syncfusion/ej2-angular-spreadsheet
+License: "SEE LICENSE IN license"
+
+
+--------------------------------------------------------------------------------
diff --git a/Document-Processing/samples/spreadsheet/angular/prevent-actions-cs1/index.html b/Document-Processing/samples/spreadsheet/angular/prevent-actions-cs1/index.html
new file mode 100644
index 000000000..fee548ef6
--- /dev/null
+++ b/Document-Processing/samples/spreadsheet/angular/prevent-actions-cs1/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+ MyApp
+
+
+
+
+
+
+
+
diff --git a/Document-Processing/samples/spreadsheet/angular/prevent-actions-cs1/main-TLHKQK36.js b/Document-Processing/samples/spreadsheet/angular/prevent-actions-cs1/main-TLHKQK36.js
new file mode 100644
index 000000000..405859759
--- /dev/null
+++ b/Document-Processing/samples/spreadsheet/angular/prevent-actions-cs1/main-TLHKQK36.js
@@ -0,0 +1,260 @@
+var PP=Object.defineProperty,zP=Object.defineProperties;var BP=Object.getOwnPropertyDescriptors;var pE=Object.getOwnPropertySymbols;var jP=Object.prototype.hasOwnProperty,HP=Object.prototype.propertyIsEnumerable;var fE=(o,e,t)=>e in o?PP(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,oa=(o,e)=>{for(var t in e||={})jP.call(e,t)&&fE(o,t,e[t]);if(pE)for(var t of pE(e))HP.call(e,t)&&fE(o,t,e[t]);return o},bo=(o,e)=>zP(o,BP(e));var W0=null;var gE=1;var eu=Symbol("SIGNAL");function ui(o){let e=W0;return W0=o,e}function _g(){return W0}var Y0={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:"unknown",producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function vE(o){if(!(Wg(o)&&!o.dirty)&&!(!o.dirty&&o.lastCleanEpoch===gE)){if(!o.producerMustRecompute(o)&&!Q0(o)){q0(o);return}o.producerRecomputeValue(o),q0(o)}}function q0(o){o.dirty=!1,o.lastCleanEpoch=gE}function G0(o){return o&&mE(o),ui(o)}function mE(o){o.producersTail=void 0,o.recomputing=!0}function yE(o,e){ui(e),o&&bE(o)}function bE(o){o.recomputing=!1;let e=o.producersTail,t=e!==void 0?e.nextProducer:o.producers;if(t!==void 0){if(Wg(o))do t=K0(t);while(t!==void 0);e!==void 0?e.nextProducer=void 0:o.producers=void 0}}function Q0(o){for(let e=o.producers;e!==void 0;e=e.nextProducer){let t=e.producer,i=e.lastReadVersion;if(i!==t.version||(vE(t),i!==t.version))return!0}return!1}function Ug(o){if(Wg(o)){let e=o.producers;for(;e!==void 0;)e=K0(e)}o.producers=void 0,o.producersTail=void 0,o.consumers=void 0,o.consumersTail=void 0}function K0(o){let e=o.producer,t=o.nextProducer,i=o.nextConsumer,r=o.prevConsumer;if(o.nextConsumer=void 0,o.prevConsumer=void 0,i!==void 0?i.prevConsumer=r:e.consumersTail=r,r!==void 0)r.nextConsumer=i;else if(e.consumers=i,!Wg(e)){let n=e.producers;for(;n!==void 0;)n=K0(n)}return t}function Wg(o){return o.consumerIsAlwaysLive||o.consumers!==void 0}function VP(){throw new Error}var _P=VP;function X0(o){_P=o}function Ms(o){return typeof o=="function"}function qg(o){let t=o(i=>{Error.call(i),i.stack=new Error().stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var Yg=qg(o=>function(t){o(this),this.message=t?`${t.length} errors occurred during unsubscription:
+${t.map((i,r)=>`${r+1}) ${i.toString()}`).join(`
+ `)}`:"",this.name="UnsubscriptionError",this.errors=t});function lp(o,e){if(o){let t=o.indexOf(e);0<=t&&o.splice(t,1)}}var us=class o{constructor(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let e;if(!this.closed){this.closed=!0;let{_parentage:t}=this;if(t)if(this._parentage=null,Array.isArray(t))for(let n of t)n.remove(this);else t.remove(this);let{initialTeardown:i}=this;if(Ms(i))try{i()}catch(n){e=n instanceof Yg?n.errors:[n]}let{_finalizers:r}=this;if(r){this._finalizers=null;for(let n of r)try{CE(n)}catch(s){e=e??[],s instanceof Yg?e=[...e,...s.errors]:e.push(s)}}if(e)throw new Yg(e)}}add(e){var t;if(e&&e!==this)if(this.closed)CE(e);else{if(e instanceof o){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(t=this._finalizers)!==null&&t!==void 0?t:[]).push(e)}}_hasParent(e){let{_parentage:t}=this;return t===e||Array.isArray(t)&&t.includes(e)}_addParent(e){let{_parentage:t}=this;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e}_removeParent(e){let{_parentage:t}=this;t===e?this._parentage=null:Array.isArray(t)&&lp(t,e)}remove(e){let{_finalizers:t}=this;t&&lp(t,e),e instanceof o&&e._removeParent(this)}};us.EMPTY=(()=>{let o=new us;return o.closed=!0,o})();var $0=us.EMPTY;function Gg(o){return o instanceof us||o&&"closed"in o&&Ms(o.remove)&&Ms(o.add)&&Ms(o.unsubscribe)}function CE(o){Ms(o)?o():o.unsubscribe()}var Ba={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var tu={setTimeout(o,e,...t){let{delegate:i}=tu;return i?.setTimeout?i.setTimeout(o,e,...t):setTimeout(o,e,...t)},clearTimeout(o){let{delegate:e}=tu;return(e?.clearTimeout||clearTimeout)(o)},delegate:void 0};function SE(o){tu.setTimeout(()=>{let{onUnhandledError:e}=Ba;if(e)e(o);else throw o})}function Z0(){}var wE=J0("C",void 0,void 0);function xE(o){return J0("E",void 0,o)}function IE(o){return J0("N",o,void 0)}function J0(o,e,t){return{kind:o,value:e,error:t}}var Rh=null;function iu(o){if(Ba.useDeprecatedSynchronousErrorHandling){let e=!Rh;if(e&&(Rh={errorThrown:!1,error:null}),o(),e){let{errorThrown:t,error:i}=Rh;if(Rh=null,t)throw i}}else o()}function ME(o){Ba.useDeprecatedSynchronousErrorHandling&&Rh&&(Rh.errorThrown=!0,Rh.error=o)}var Oh=class extends us{constructor(e){super(),this.isStopped=!1,e?(this.destination=e,Gg(e)&&e.add(this)):this.destination=qP}static create(e,t,i){return new ru(e,t,i)}next(e){this.isStopped?tC(IE(e),this):this._next(e)}error(e){this.isStopped?tC(xE(e),this):(this.isStopped=!0,this._error(e))}complete(){this.isStopped?tC(wE,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(e){this.destination.next(e)}_error(e){try{this.destination.error(e)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}},UP=Function.prototype.bind;function eC(o,e){return UP.call(o,e)}var iC=class{constructor(e){this.partialObserver=e}next(e){let{partialObserver:t}=this;if(t.next)try{t.next(e)}catch(i){Qg(i)}}error(e){let{partialObserver:t}=this;if(t.error)try{t.error(e)}catch(i){Qg(i)}else Qg(e)}complete(){let{partialObserver:e}=this;if(e.complete)try{e.complete()}catch(t){Qg(t)}}},ru=class extends Oh{constructor(e,t,i){super();let r;if(Ms(e)||!e)r={next:e??void 0,error:t??void 0,complete:i??void 0};else{let n;this&&Ba.useDeprecatedNextContext?(n=Object.create(e),n.unsubscribe=()=>this.unsubscribe(),r={next:e.next&&eC(e.next,n),error:e.error&&eC(e.error,n),complete:e.complete&&eC(e.complete,n)}):r=e}this.destination=new iC(r)}};function Qg(o){Ba.useDeprecatedSynchronousErrorHandling?ME(o):SE(o)}function WP(o){throw o}function tC(o,e){let{onStoppedNotification:t}=Ba;t&&tu.setTimeout(()=>t(o,e))}var qP={closed:!0,next:Z0,error:WP,complete:Z0};var DE=typeof Symbol=="function"&&Symbol.observable||"@@observable";function EE(o){return o}function TE(o){return o.length===0?EE:o.length===1?o[0]:function(t){return o.reduce((i,r)=>r(i),t)}}var nu=(()=>{class o{constructor(t){t&&(this._subscribe=t)}lift(t){let i=new o;return i.source=this,i.operator=t,i}subscribe(t,i,r){let n=GP(t)?t:new ru(t,i,r);return iu(()=>{let{operator:s,source:a}=this;n.add(s?s.call(n,a):a?this._subscribe(n):this._trySubscribe(n))}),n}_trySubscribe(t){try{return this._subscribe(t)}catch(i){t.error(i)}}forEach(t,i){return i=AE(i),new i((r,n)=>{let s=new ru({next:a=>{try{t(a)}catch(l){n(l),s.unsubscribe()}},error:n,complete:r});this.subscribe(s)})}_subscribe(t){var i;return(i=this.source)===null||i===void 0?void 0:i.subscribe(t)}[DE](){return this}pipe(...t){return TE(t)(this)}toPromise(t){return t=AE(t),new t((i,r)=>{let n;this.subscribe(s=>n=s,s=>r(s),()=>i(n))})}}return o.create=e=>new o(e),o})();function AE(o){var e;return(e=o??Ba.Promise)!==null&&e!==void 0?e:Promise}function YP(o){return o&&Ms(o.next)&&Ms(o.error)&&Ms(o.complete)}function GP(o){return o&&o instanceof Oh||YP(o)&&Gg(o)}function QP(o){return Ms(o?.lift)}function LE(o){return e=>{if(QP(e))return e.lift(function(t){try{return o(t,this)}catch(i){this.error(i)}});throw new TypeError("Unable to lift unknown Observable type")}}function NE(o,e,t,i,r){return new rC(o,e,t,i,r)}var rC=class extends Oh{constructor(e,t,i,r,n,s){super(e),this.onFinalize=n,this.shouldUnsubscribe=s,this._next=t?function(a){try{t(a)}catch(l){e.error(l)}}:super._next,this._error=r?function(a){try{r(a)}catch(l){e.error(l)}finally{this.unsubscribe()}}:super._error,this._complete=i?function(){try{i()}catch(a){e.error(a)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var e;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){let{closed:t}=this;super.unsubscribe(),!t&&((e=this.onFinalize)===null||e===void 0||e.call(this))}}};var kE=qg(o=>function(){o(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var Zo=(()=>{class o extends nu{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(t){let i=new Kg(this,this);return i.operator=t,i}_throwIfClosed(){if(this.closed)throw new kE}next(t){iu(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let i of this.currentObservers)i.next(t)}})}error(t){iu(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=t;let{observers:i}=this;for(;i.length;)i.shift().error(t)}})}complete(){iu(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:t}=this;for(;t.length;)t.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var t;return((t=this.observers)===null||t===void 0?void 0:t.length)>0}_trySubscribe(t){return this._throwIfClosed(),super._trySubscribe(t)}_subscribe(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)}_innerSubscribe(t){let{hasError:i,isStopped:r,observers:n}=this;return i||r?$0:(this.currentObservers=null,n.push(t),new us(()=>{this.currentObservers=null,lp(n,t)}))}_checkFinalizedStatuses(t){let{hasError:i,thrownError:r,isStopped:n}=this;i?t.error(r):n&&t.complete()}asObservable(){let t=new nu;return t.source=this,t}}return o.create=(e,t)=>new Kg(e,t),o})(),Kg=class extends Zo{constructor(e,t){super(),this.destination=e,this.source=t}next(e){var t,i;(i=(t=this.destination)===null||t===void 0?void 0:t.next)===null||i===void 0||i.call(t,e)}error(e){var t,i;(i=(t=this.destination)===null||t===void 0?void 0:t.error)===null||i===void 0||i.call(t,e)}complete(){var e,t;(t=(e=this.destination)===null||e===void 0?void 0:e.complete)===null||t===void 0||t.call(e)}_subscribe(e){var t,i;return(i=(t=this.source)===null||t===void 0?void 0:t.subscribe(e))!==null&&i!==void 0?i:$0}};var hp=class extends Zo{constructor(e){super(),this._value=e}get value(){return this.getValue()}_subscribe(e){let t=super._subscribe(e);return!t.closed&&e.next(this._value),t}getValue(){let{hasError:e,thrownError:t,_value:i}=this;if(e)throw t;return this._throwIfClosed(),i}next(e){super.next(this._value=e)}};function Xg(o,e,t,i){var r=arguments.length,n=r<3?e:i===null?i=Object.getOwnPropertyDescriptor(e,t):i,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,i);else for(var a=o.length-1;a>=0;a--)(s=o[a])&&(n=(r<3?s(n):r>3?s(e,t,n):s(e,t))||n);return r>3&&n&&Object.defineProperty(e,t,n),n}function nC(o,e){return LE((t,i)=>{let r=0;t.subscribe(NE(i,n=>{i.next(o.call(e,n,r++))}))})}var sC;function $g(){return sC}function Co(o){let e=sC;return sC=o,e}var FE=Symbol("NotFound");function su(o){return o===FE||o?.name==="\u0275NotFound"}var Ci=class extends Error{code;constructor(e,t){super(SC(e,t)),this.code=e}};function ez(o){return`NG0${Math.abs(o)}`}function SC(o,e){return`${ez(o)}${e?": "+e:""}`}function Xi(o){for(let e in o)if(o[e]===Xi)return e;throw Error("")}function BE(o,e){for(let t in e)e.hasOwnProperty(t)&&!o.hasOwnProperty(t)&&(o[t]=e[t])}function zh(o){if(typeof o=="string")return o;if(Array.isArray(o))return`[${o.map(zh).join(", ")}]`;if(o==null)return""+o;let e=o.overriddenName||o.name;if(e)return`${e}`;let t=o.toString();if(t==null)return""+t;let i=t.indexOf(`
+`);return i>=0?t.slice(0,i):t}function wC(o,e){return o?e?`${o} ${e}`:o:e||""}var tz=Xi({__forward_ref__:Xi});function rv(o){return o.__forward_ref__=rv,o.toString=function(){return zh(this())},o}function Ws(o){return jE(o)?o():o}function jE(o){return typeof o=="function"&&o.hasOwnProperty(tz)&&o.__forward_ref__===rv}function en(o){return{token:o.token,providedIn:o.providedIn||null,factory:o.factory,value:void 0}}function jl(o){return{providers:o.providers||[],imports:o.imports||[]}}function nv(o){return iz(o,sv)}function iz(o,e){return o.hasOwnProperty(e)&&o[e]||null}function rz(o){let e=o?.[sv]??null;return e||null}function oC(o){return o&&o.hasOwnProperty(Jg)?o[Jg]:null}var sv=Xi({\u0275prov:Xi}),Jg=Xi({\u0275inj:Xi}),ji=class{_desc;ngMetadataName="InjectionToken";\u0275prov;constructor(e,t){this._desc=e,this.\u0275prov=void 0,typeof t=="number"?this.__NG_ELEMENT_ID__=t:t!==void 0&&(this.\u0275prov=en({token:this,providedIn:t.providedIn||"root",factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function xC(o){return o&&!!o.\u0275providers}var IC=Xi({\u0275cmp:Xi}),MC=Xi({\u0275dir:Xi}),DC=Xi({\u0275pipe:Xi});var lC=Xi({\u0275fac:Xi}),Hh=Xi({__NG_ELEMENT_ID__:Xi}),RE=Xi({__NG_ENV_ID__:Xi});function Vh(o){return TC(o,"@Component"),o[IC]||null}function EC(o){return TC(o,"@Directive"),o[MC]||null}function HE(o){return TC(o,"@Pipe"),o[DC]||null}function TC(o,e){if(o==null)throw new Ci(-919,!1)}function VE(o){return typeof o=="string"?o:o==null?"":String(o)}function _E(o){return typeof o=="function"?o.name||o.toString():typeof o=="object"&&o!=null&&typeof o.type=="function"?o.type.name||o.type.toString():VE(o)}var UE=Xi({ngErrorCode:Xi}),nz=Xi({ngErrorMessage:Xi}),sz=Xi({ngTokenPath:Xi});function AC(o,e){return WE("",-200,e)}function av(o,e){throw new Ci(-201,!1)}function WE(o,e,t){let i=new Ci(e,o);return i[UE]=e,i[nz]=o,t&&(i[sz]=t),i}function az(o){return o[UE]}var hC;function qE(){return hC}function Us(o){let e=hC;return hC=o,e}function LC(o,e,t){let i=nv(o);if(i&&i.providedIn=="root")return i.value===void 0?i.value=i.factory():i.value;if(t&8)return null;if(e!==void 0)return e;av(o,"")}var oz={},Ph=oz,lz="__NG_DI_FLAG__",cC=class{injector;constructor(e){this.injector=e}retrieve(e,t){let i=Bh(t)||0;try{return this.injector.get(e,i&8?null:Ph,i)}catch(r){if(su(r))return r;throw r}}};function hz(o,e=0){let t=$g();if(t===void 0)throw new Ci(-203,!1);if(t===null)return LC(o,void 0,e);{let i=cz(e),r=t.retrieve(o,i);if(su(r)){if(i.optional)return null;throw r}return r}}function Ui(o,e=0){return(qE()||hz)(Ws(o),e)}function vr(o,e){return Ui(o,Bh(e))}function Bh(o){return typeof o>"u"||typeof o=="number"?o:0|(o.optional&&8)|(o.host&&1)|(o.self&&2)|(o.skipSelf&&4)}function cz(o){return{optional:!!(o&8),host:!!(o&1),self:!!(o&2),skipSelf:!!(o&4)}}function uC(o){let e=[];for(let t=0;tArray.isArray(t)?ov(t,e):e(t))}function NC(o,e,t){e>=o.length?o.push(t):o.splice(e,0,t)}function fp(o,e){return e>=o.length-1?o.pop():o.splice(e,1)[0]}var Hl={},la=[],gp=new ji(""),kC=new ji("",-1),FC=new ji(""),up=class{get(e,t=Ph){if(t===Ph){let r=WE("",-201);throw r.name="\u0275NotFound",r}return t}};function QE(...o){return{\u0275providers:RC(!0,o),\u0275fromNgModule:!0}}function RC(o,...e){let t=[],i=new Set,r,n=s=>{t.push(s)};return ov(e,s=>{let a=s;ev(a,n,[],i)&&(r||=[],r.push(a))}),r!==void 0&&KE(r,n),t}function KE(o,e){for(let t=0;t{e(n,i)})}}function ev(o,e,t,i){if(o=Ws(o),!o)return!1;let r=null,n=oC(o),s=!n&&Vh(o);if(!n&&!s){let l=o.ngModule;if(n=oC(l),n)r=l;else return!1}else{if(s&&!s.standalone)return!1;r=o}let a=i.has(r);if(s){if(a)return!1;if(i.add(r),s.dependencies){let l=typeof s.dependencies=="function"?s.dependencies():s.dependencies;for(let h of l)ev(h,e,t,i)}}else if(n){if(n.imports!=null&&!a){i.add(r);let h;try{ov(n.imports,c=>{ev(c,e,t,i)&&(h||=[],h.push(c))})}finally{}h!==void 0&&KE(h,e)}if(!a){let h=ou(r)||(()=>new r);e({provide:r,useFactory:h,deps:la},r),e({provide:FC,useValue:r,multi:!0},r),e({provide:gp,useValue:()=>Ui(r),multi:!0},r)}let l=n.providers;if(l!=null&&!a){let h=o;OC(l,c=>{e(c,h)})}}else return!1;return r!==o&&o.providers!==void 0}function OC(o,e){for(let t of o)xC(t)&&(t=t.\u0275providers),Array.isArray(t)?OC(t,e):e(t)}var dz=Xi({provide:String,useValue:Xi});function XE(o){return o!==null&&typeof o=="object"&&dz in o}function pz(o){return!!(o&&o.useExisting)}function fz(o){return!!(o&&o.useFactory)}function tv(o){return typeof o=="function"}var vp=new ji(""),Zg={},OE={},aC;function mp(){return aC===void 0&&(aC=new up),aC}var ha=class{},jh=class extends ha{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(e,t,i,r){super(),this.parent=t,this.source=i,this.scopes=r,pC(e,s=>this.processProvider(s)),this.records.set(kC,au(void 0,this)),r.has("environment")&&this.records.set(ha,au(void 0,this));let n=this.records.get(vp);n!=null&&typeof n.value=="string"&&this.scopes.add(n.value),this.injectorDefTypes=new Set(this.get(FC,la,{self:!0}))}retrieve(e,t){let i=Bh(t)||0;try{return this.get(e,Ph,i)}catch(r){if(su(r))return r;throw r}}destroy(){cp(this),this._destroyed=!0;let e=ui(null);try{for(let i of this._ngOnDestroyHooks)i.ngOnDestroy();let t=this._onDestroyHooks;this._onDestroyHooks=[];for(let i of t)i()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),ui(e)}}onDestroy(e){return cp(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){cp(this);let t=Co(this),i=Us(void 0),r;try{return e()}finally{Co(t),Us(i)}}get(e,t=Ph,i){if(cp(this),e.hasOwnProperty(RE))return e[RE](this);let r=Bh(i),n,s=Co(this),a=Us(void 0);try{if(!(r&4)){let h=this.records.get(e);if(h===void 0){let c=bz(e)&&nv(e);c&&this.injectableDefInScope(c)?h=au(dC(e),Zg):h=null,this.records.set(e,h)}if(h!=null)return this.hydrate(e,h,r)}let l=r&2?mp():this.parent;return t=r&8&&t===Ph?null:t,l.get(e,t)}catch(l){let h=az(l);throw h===-200||h===-201?new Ci(h,null):l}finally{Us(a),Co(s)}}resolveInjectorInitializers(){let e=ui(null),t=Co(this),i=Us(void 0),r;try{let n=this.get(gp,la,{self:!0});for(let s of n)s()}finally{Co(t),Us(i),ui(e)}}toString(){let e=[],t=this.records;for(let i of t.keys())e.push(zh(i));return`R3Injector[${e.join(", ")}]`}processProvider(e){e=Ws(e);let t=tv(e)?e:Ws(e&&e.provide),i=vz(e);if(!tv(e)&&e.multi===!0){let r=this.records.get(t);r||(r=au(void 0,Zg,!0),r.factory=()=>uC(r.multi),this.records.set(t,r)),t=e,r.multi.push(e)}this.records.set(t,i)}hydrate(e,t,i){let r=ui(null);try{if(t.value===OE)throw AC(zh(e));return t.value===Zg&&(t.value=OE,t.value=t.factory(void 0,i)),typeof t.value=="object"&&t.value&&yz(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{ui(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=Ws(e.providedIn);return typeof t=="string"?t==="any"||this.scopes.has(t):this.injectorDefTypes.has(t)}removeOnDestroy(e){let t=this._onDestroyHooks.indexOf(e);t!==-1&&this._onDestroyHooks.splice(t,1)}};function dC(o){let e=nv(o),t=e!==null?e.factory:ou(o);if(t!==null)return t;if(o instanceof ji)throw new Ci(204,!1);if(o instanceof Function)return gz(o);throw new Ci(204,!1)}function gz(o){if(o.length>0)throw new Ci(204,!1);let t=rz(o);return t!==null?()=>t.factory(o):()=>new o}function vz(o){if(XE(o))return au(void 0,o.useValue);{let e=$E(o);return au(e,Zg)}}function $E(o,e,t){let i;if(tv(o)){let r=Ws(o);return ou(r)||dC(r)}else if(XE(o))i=()=>Ws(o.useValue);else if(fz(o))i=()=>o.useFactory(...uC(o.deps||[]));else if(pz(o))i=(r,n)=>Ui(Ws(o.useExisting),n!==void 0&&n&8?8:void 0);else{let r=Ws(o&&(o.useClass||o.provide));if(mz(o))i=()=>new r(...uC(o.deps));else return ou(r)||dC(r)}return i}function cp(o){if(o.destroyed)throw new Ci(205,!1)}function au(o,e,t=!1){return{factory:o,value:e,multi:t?[]:void 0}}function mz(o){return!!o.deps}function yz(o){return o!==null&&typeof o=="object"&&typeof o.ngOnDestroy=="function"}function bz(o){return typeof o=="function"||typeof o=="object"&&o.ngMetadataName==="InjectionToken"}function pC(o,e){for(let t of o)Array.isArray(t)?pC(t,e):t&&xC(t)?pC(t.\u0275providers,e):e(t)}function lv(o,e){let t;o instanceof jh?(cp(o),t=o):t=new cC(o);let i,r=Co(t),n=Us(void 0);try{return e()}finally{Co(r),Us(n)}}function ZE(){return qE()!==void 0||$g()!=null}var ja=0,Gt=1,Yt=2,Mn=3,ua=4,da=5,yp=6,hu=7,ds=8,Vl=9,il=10,ps=11,cu=12,PC=13,uu=14,Ha=15,_l=16,_h=17,So=18,bp=19,zC=20,Jo=21,hv=22,Cp=23,qs=24,cv=25,Sp=26,wo=27,JE=1;var Ul=7,wp=8,Uh=9,fs=10;function xo(o){return Array.isArray(o)&&typeof o[JE]=="object"}function Va(o){return Array.isArray(o)&&o[JE]===!0}function BC(o){return(o.flags&4)!==0}function Wh(o){return o.componentOffset>-1}function uv(o){return(o.flags&1)===1}function rl(o){return!!o.template}function du(o){return(o[Yt]&512)!==0}function qh(o){return(o[Yt]&256)===256}var eT="svg",tT="math";function _a(o){for(;Array.isArray(o);)o=o[ja];return o}function Io(o,e){return _a(e[o.index])}function dv(o,e){return o.data[e]}function Ua(o,e){let t=e[o];return xo(t)?t:t[ja]}function iT(o){return(o[Yt]&4)===4}function pv(o){return(o[Yt]&128)===128}function rT(o){return Va(o[Mn])}function jC(o,e){return e==null?null:o[e]}function HC(o){o[_h]=0}function VC(o){o[Yt]&1024||(o[Yt]|=1024,pv(o)&&Ip(o))}function xp(o){return!!(o[Yt]&9216||o[qs]?.dirty)}function fv(o){o[il].changeDetectionScheduler?.notify(8),o[Yt]&64&&(o[Yt]|=1024),xp(o)&&Ip(o)}function Ip(o){o[il].changeDetectionScheduler?.notify(0);let e=Bl(o);for(;e!==null&&!(e[Yt]&8192||(e[Yt]|=8192,!pv(e)));)e=Bl(e)}function _C(o,e){if(qh(o))throw new Ci(911,!1);o[Jo]===null&&(o[Jo]=[]),o[Jo].push(e)}function nT(o,e){if(o[Jo]===null)return;let t=o[Jo].indexOf(e);t!==-1&&o[Jo].splice(t,1)}function Bl(o){let e=o[Mn];return Va(e)?e[Mn]:e}function UC(o){return o[hu]??=[]}function WC(o){return o.cleanup??=[]}function sT(o,e,t,i){let r=UC(e);r.push(t),o.firstCreatePass&&WC(o).push(i,r.length-1)}var xi={lFrame:ST(null),bindingsEnabled:!0,skipHydrationRootTNode:null};var fC=!1;function aT(){return xi.lFrame.elementDepthCount}function oT(){xi.lFrame.elementDepthCount++}function lT(){xi.lFrame.elementDepthCount--}function hT(){return xi.bindingsEnabled}function cT(){return xi.skipHydrationRootTNode!==null}function uT(o){return xi.skipHydrationRootTNode===o}function dT(){xi.skipHydrationRootTNode=null}function hn(){return xi.lFrame.lView}function Wl(){return xi.lFrame.tView}function pu(o){return xi.lFrame.contextLView=o,o[ds]}function fu(o){return xi.lFrame.contextLView=null,o}function Wa(){let o=qC();for(;o!==null&&o.type===64;)o=o.parent;return o}function qC(){return xi.lFrame.currentTNode}function pT(){let o=xi.lFrame,e=o.currentTNode;return o.isParent?e:e.parent}function gv(o,e){let t=xi.lFrame;t.currentTNode=o,t.isParent=e}function YC(){return xi.lFrame.isParent}function fT(){xi.lFrame.isParent=!1}function GC(){return fC}function QC(o){let e=fC;return fC=o,e}function gT(o){return xi.lFrame.bindingIndex=o}function vT(){return xi.lFrame.bindingIndex++}function mT(){return xi.lFrame.inI18n}function yT(o,e){let t=xi.lFrame;t.bindingIndex=t.bindingRootIndex=o,vv(e)}function bT(){return xi.lFrame.currentDirectiveIndex}function vv(o){xi.lFrame.currentDirectiveIndex=o}function KC(){return xi.lFrame.currentQueryIndex}function mv(o){xi.lFrame.currentQueryIndex=o}function Cz(o){let e=o[Gt];return e.type===2?e.declTNode:e.type===1?o[da]:null}function XC(o,e,t){if(t&4){let r=e,n=o;for(;r=r.parent,r===null&&!(t&1);)if(r=Cz(n),r===null||(n=n[uu],r.type&10))break;if(r===null)return!1;e=r,o=n}let i=xi.lFrame=CT();return i.currentTNode=e,i.lView=o,!0}function yv(o){let e=CT(),t=o[Gt];xi.lFrame=e,e.currentTNode=t.firstChild,e.lView=o,e.tView=t,e.contextLView=o,e.bindingIndex=t.bindingStartIndex,e.inI18n=!1}function CT(){let o=xi.lFrame,e=o===null?null:o.child;return e===null?ST(o):e}function ST(o){let e={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:o,child:null,inI18n:!1};return o!==null&&(o.child=e),e}function wT(){let o=xi.lFrame;return xi.lFrame=o.parent,o.currentTNode=null,o.lView=null,o}var $C=wT;function bv(){let o=wT();o.isParent=!0,o.tView=null,o.selectedIndex=-1,o.contextLView=null,o.elementDepthCount=0,o.currentDirectiveIndex=-1,o.currentNamespace=null,o.bindingRootIndex=-1,o.bindingIndex=-1,o.currentQueryIndex=0}function ZC(){return xi.lFrame.selectedIndex}function ql(o){xi.lFrame.selectedIndex=o}function xT(){let o=xi.lFrame;return dv(o.tView,o.selectedIndex)}function IT(){return xi.lFrame.currentNamespace}var MT=!0;function DT(){return MT}function ET(o){MT=o}function gC(o,e=null,t=null,i){let r=TT(o,e,t,i);return r.resolveInjectorInitializers(),r}function TT(o,e=null,t=null,i,r=new Set){let n=[t||la,QE(o)];return i=i||(typeof o=="object"?void 0:zh(o)),new jh(n,e||mp(),i||null,r)}var el=class o{static THROW_IF_NOT_FOUND=Ph;static NULL=new up;static create(e,t){if(Array.isArray(e))return gC({name:""},t,e,"");{let i=e.name??"";return gC({name:i},e.parent,e.providers,i)}}static \u0275prov=en({token:o,providedIn:"any",factory:()=>Ui(kC)});static __NG_ELEMENT_ID__=-1},qa=new ji(""),Cv=(()=>{class o{static __NG_ELEMENT_ID__=Sz;static __NG_ENV_ID__=t=>t}return o})(),vC=class extends Cv{_lView;constructor(e){super(),this._lView=e}get destroyed(){return qh(this._lView)}onDestroy(e){let t=this._lView;return _C(t,e),()=>nT(t,e)}};function Sz(){return new vC(hn())}var AT=!1,gu=(()=>{class o{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new hp(!1);get hasPendingTasks(){return this.destroyed?!1:this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new nu(t=>{t.next(!1),t.complete()}):this.pendingTask}add(){!this.hasPendingTasks&&!this.destroyed&&this.pendingTask.next(!0);let t=this.taskId++;return this.pendingTasks.add(t),t}has(t){return this.pendingTasks.has(t)}remove(t){this.pendingTasks.delete(t),this.pendingTasks.size===0&&this.hasPendingTasks&&this.pendingTask.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks&&this.pendingTask.next(!1),this.destroyed=!0,this.pendingTask.unsubscribe()}static \u0275prov=en({token:o,providedIn:"root",factory:()=>new o})}return o})(),mC=class extends Zo{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,ZE()&&(this.destroyRef=vr(Cv,{optional:!0})??void 0,this.pendingTasks=vr(gu,{optional:!0})??void 0)}emit(e){let t=ui(null);try{super.next(e)}finally{ui(t)}}subscribe(e,t,i){let r=e,n=t||(()=>null),s=i;if(e&&typeof e=="object"){let l=e;r=l.next?.bind(l),n=l.error?.bind(l),s=l.complete?.bind(l)}this.__isAsync&&(n=this.wrapInTimeout(n),r&&(r=this.wrapInTimeout(r)),s&&(s=this.wrapInTimeout(s)));let a=super.subscribe({next:r,error:n,complete:s});return e instanceof us&&e.add(a),a}wrapInTimeout(e){return t=>{let i=this.pendingTasks?.add();setTimeout(()=>{try{e(t)}finally{i!==void 0&&this.pendingTasks?.remove(i)}})}}},Ds=mC;function iv(...o){}function JC(o){let e,t;function i(){o=iv;try{t!==void 0&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(t),e!==void 0&&clearTimeout(e)}catch{}}return e=setTimeout(()=>{o(),i()}),typeof requestAnimationFrame=="function"&&(t=requestAnimationFrame(()=>{o(),i()})),()=>i()}function eS(o){return queueMicrotask(()=>o()),()=>{o=iv}}var tS="isAngularZone",dp=tS+"_ID",wz=0,ca=class o{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new Ds(!1);onMicrotaskEmpty=new Ds(!1);onStable=new Ds(!1);onError=new Ds(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:i=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:n=AT}=e;if(typeof Zone>"u")throw new Ci(908,!1);Zone.assertZonePatched();let s=this;s._nesting=0,s._outer=s._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(s._inner=s._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(s._inner=s._inner.fork(Zone.longStackTraceZoneSpec)),s.shouldCoalesceEventChangeDetection=!r&&i,s.shouldCoalesceRunChangeDetection=r,s.callbackScheduled=!1,s.scheduleInRootZone=n,Mz(s)}static isInAngularZone(){return typeof Zone<"u"&&Zone.current.get(tS)===!0}static assertInAngularZone(){if(!o.isInAngularZone())throw new Ci(909,!1)}static assertNotInAngularZone(){if(o.isInAngularZone())throw new Ci(909,!1)}run(e,t,i){return this._inner.run(e,t,i)}runTask(e,t,i,r){let n=this._inner,s=n.scheduleEventTask("NgZoneEvent: "+r,e,xz,iv,iv);try{return n.runTask(s,t,i)}finally{n.cancelTask(s)}}runGuarded(e,t,i){return this._inner.runGuarded(e,t,i)}runOutsideAngular(e){return this._outer.run(e)}},xz={};function iS(o){if(o._nesting==0&&!o.hasPendingMicrotasks&&!o.isStable)try{o._nesting++,o.onMicrotaskEmpty.emit(null)}finally{if(o._nesting--,!o.hasPendingMicrotasks)try{o.runOutsideAngular(()=>o.onStable.emit(null))}finally{o.isStable=!0}}}function Iz(o){if(o.isCheckStableRunning||o.callbackScheduled)return;o.callbackScheduled=!0;function e(){JC(()=>{o.callbackScheduled=!1,yC(o),o.isCheckStableRunning=!0,iS(o),o.isCheckStableRunning=!1})}o.scheduleInRootZone?Zone.root.run(()=>{e()}):o._outer.run(()=>{e()}),yC(o)}function Mz(o){let e=()=>{Iz(o)},t=wz++;o._inner=o._inner.fork({name:"angular",properties:{[tS]:!0,[dp]:t,[dp+t]:!0},onInvokeTask:(i,r,n,s,a,l)=>{if(Dz(l))return i.invokeTask(n,s,a,l);try{return PE(o),i.invokeTask(n,s,a,l)}finally{(o.shouldCoalesceEventChangeDetection&&s.type==="eventTask"||o.shouldCoalesceRunChangeDetection)&&e(),zE(o)}},onInvoke:(i,r,n,s,a,l,h)=>{try{return PE(o),i.invoke(n,s,a,l,h)}finally{o.shouldCoalesceRunChangeDetection&&!o.callbackScheduled&&!Ez(l)&&e(),zE(o)}},onHasTask:(i,r,n,s)=>{i.hasTask(n,s),r===n&&(s.change=="microTask"?(o._hasPendingMicrotasks=s.microTask,yC(o),iS(o)):s.change=="macroTask"&&(o.hasPendingMacrotasks=s.macroTask))},onHandleError:(i,r,n,s)=>(i.handleError(n,s),o.runOutsideAngular(()=>o.onError.emit(s)),!1)})}function yC(o){o._hasPendingMicrotasks||(o.shouldCoalesceEventChangeDetection||o.shouldCoalesceRunChangeDetection)&&o.callbackScheduled===!0?o.hasPendingMicrotasks=!0:o.hasPendingMicrotasks=!1}function PE(o){o._nesting++,o.isStable&&(o.isStable=!1,o.onUnstable.emit(null))}function zE(o){o._nesting--,iS(o)}var pp=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new Ds;onMicrotaskEmpty=new Ds;onStable=new Ds;onError=new Ds;run(e,t,i){return e.apply(t,i)}runGuarded(e,t,i){return e.apply(t,i)}runOutsideAngular(e){return e()}runTask(e,t,i,r){return e.apply(t,i)}};function Dz(o){return LT(o,"__ignore_ng_zone__")}function Ez(o){return LT(o,"__scheduler_tick__")}function LT(o,e){return!Array.isArray(o)||o.length!==1?!1:o[0]?.data?.[e]===!0}var tl=class{_console=console;handleError(e){this._console.error("ERROR",e)}},vu=new ji("",{factory:()=>{let o=vr(ca),e=vr(ha),t;return i=>{o.runOutsideAngular(()=>{e.destroyed&&!t?setTimeout(()=>{throw i}):(t??=e.get(tl),t.handleError(i))})}}}),NT={provide:gp,useValue:()=>{let o=vr(tl,{optional:!0})},multi:!0};var lu=class{},Mp=new ji("",{factory:()=>!0});var rS=new ji("");var nS=(()=>{class o{static \u0275prov=en({token:o,providedIn:"root",factory:()=>new bC})}return o})(),bC=class{dirtyEffectCount=0;queues=new Map;add(e){this.enqueue(e),this.schedule(e)}schedule(e){e.dirty&&this.dirtyEffectCount++}remove(e){let t=e.zone,i=this.queues.get(t);i.has(e)&&(i.delete(e),e.dirty&&this.dirtyEffectCount--)}enqueue(e){let t=e.zone;this.queues.has(t)||this.queues.set(t,new Set);let i=this.queues.get(t);i.has(e)||i.add(e)}flush(){for(;this.dirtyEffectCount>0;){let e=!1;for(let[t,i]of this.queues)t===null?e||=this.flushQueue(i):e||=t.run(()=>this.flushQueue(i));e||(this.dirtyEffectCount=0)}}flushQueue(e){let t=!1;for(let i of e)i.dirty&&(this.dirtyEffectCount--,t=!0,i.run());return t}},CC=class{[eu];constructor(e){this[eu]=e}destroy(){this[eu].destroy()}};function Ov(o){return{toString:o}.toString()}function Wz(o){return typeof o=="function"}function nA(o,e,t,i){e!==null?e.applyValueToInputSignal(e,i):o[t]=i}var Mv=class{previousValue;currentValue;firstChange;constructor(e,t,i){this.previousValue=e,this.currentValue=t,this.firstChange=i}isFirstChange(){return this.firstChange}};function qz(o){return o.type.prototype.ngOnChanges&&(o.setInput=Gz),Yz}function Yz(){let o=aA(this),e=o?.current;if(e){let t=o.previous;if(t===Hl)o.previous=e;else for(let i in e)t[i]=e[i];o.current=null,this.ngOnChanges(e)}}function Gz(o,e,t,i,r){let n=this.declaredInputs[i],s=aA(o)||Qz(o,{previous:Hl,current:null}),a=s.current||(s.current={}),l=s.previous,h=l[n];a[n]=new Mv(h&&h.currentValue,t,l===Hl),nA(o,e,r,t)}var sA="__ngSimpleChanges__";function aA(o){return o[sA]||null}function Qz(o,e){return o[sA]=e}var kT=[];var $i=function(o,e=null,t){for(let i=0;i=i)break}else e[l]<0&&(o[_h]+=65536),(a>14>16&&(o[Yt]&3)===e&&(o[Yt]+=16384,FT(a,n)):FT(a,n)}var yu=-1,Tp=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(e,t,i,r){this.factory=e,this.name=r,this.canSeeViewProviders=t,this.injectImpl=i}};function Zz(o){return(o.flags&8)!==0}function Jz(o){return(o.flags&16)!==0}function eB(o,e,t){let i=0;for(;ie){s=n-1;break}}}for(;n>16}function Tv(o,e){let t=rB(o),i=e;for(;t>0;)i=i[uu],t--;return i}var uS=!0;function OT(o){let e=uS;return uS=o,e}var nB=256,hA=nB-1,cA=5,sB=0,Mo={};function aB(o,e,t){let i;typeof t=="string"?i=t.charCodeAt(0)||0:t.hasOwnProperty(Hh)&&(i=t[Hh]),i==null&&(i=t[Hh]=sB++);let r=i&hA,n=1<>cA)]|=n}function uA(o,e){let t=dA(o,e);if(t!==-1)return t;let i=e[Gt];i.firstCreatePass&&(o.injectorIndex=e.length,aS(i.data,o),aS(e,null),aS(i.blueprint,null));let r=ES(o,e),n=o.injectorIndex;if(lA(r)){let s=Ev(r),a=Tv(r,e),l=a[Gt].data;for(let h=0;h<8;h++)e[n+h]=a[s+h]|l[s+h]}return e[n+8]=r,n}function aS(o,e){o.push(0,0,0,0,0,0,0,0,e)}function dA(o,e){return o.injectorIndex===-1||o.parent&&o.parent.injectorIndex===o.injectorIndex||e[o.injectorIndex+8]===null?-1:o.injectorIndex}function ES(o,e){if(o.parent&&o.parent.injectorIndex!==-1)return o.parent.injectorIndex;let t=0,i=null,r=e;for(;r!==null;){if(i=mA(r),i===null)return yu;if(t++,r=r[uu],i.injectorIndex!==-1)return i.injectorIndex|t<<16}return yu}function oB(o,e,t){aB(o,e,t)}function pA(o,e,t){if(t&8||o!==void 0)return o;av(e,"NodeInjector")}function fA(o,e,t,i){if(t&8&&i===void 0&&(i=null),(t&3)===0){let r=o[Vl],n=Us(void 0);try{return r?r.get(e,i,t&8):LC(e,i,t&8)}finally{Us(n)}}return pA(i,e,t)}function gA(o,e,t,i=0,r){if(o!==null){if(e[Yt]&2048&&!(i&2)){let s=uB(o,e,t,i,Mo);if(s!==Mo)return s}let n=vA(o,e,t,i,Mo);if(n!==Mo)return n}return fA(e,t,i,r)}function vA(o,e,t,i,r){let n=hB(t);if(typeof n=="function"){if(!XC(e,o,i))return i&1?pA(r,t,i):fA(e,t,i,r);try{let s;if(s=n(i),s==null&&!(i&8))av(t);else return s}finally{$C()}}else if(typeof n=="number"){let s=null,a=dA(o,e),l=yu,h=i&1?e[Ha][da]:null;for((a===-1||i&4)&&(l=a===-1?ES(o,e):e[a+8],l===yu||!zT(i,!1)?a=-1:(s=e[Gt],a=Ev(l),e=Tv(l,e)));a!==-1;){let c=e[Gt];if(PT(n,a,c.data)){let u=lB(a,e,t,s,i,h);if(u!==Mo)return u}l=e[a+8],l!==yu&&zT(i,e[Gt].data[a+8]===h)&&PT(n,a,e)?(s=c,a=Ev(l),e=Tv(l,e)):a=-1}}return r}function lB(o,e,t,i,r,n){let s=e[Gt],a=s.data[o+8],l=i==null?Wh(a)&&uS:i!=s&&(a.type&3)!==0,h=r&1&&n===a,c=xv(a,s,t,l,h);return c!==null?Av(e,s,c,a,r):Mo}function xv(o,e,t,i,r){let n=o.providerIndexes,s=e.data,a=n&1048575,l=o.directiveStart,h=o.directiveEnd,c=n>>20,u=i?a:a+c,d=r?a+c:h;for(let p=u;p=l&&f.type===t)return p}if(r){let p=s[l];if(p&&rl(p)&&p.type===t)return l}return null}function Av(o,e,t,i,r){let n=o[t],s=e.data;if(n instanceof Tp){let a=n;if(a.resolving){let p=_E(s[t]);throw AC(p)}let l=OT(a.canSeeViewProviders);a.resolving=!0;let h=s[t].type||s[t],c,u=a.injectImpl?Us(a.injectImpl):null,d=XC(o,i,0);try{n=o[t]=a.factory(void 0,r,s,o,i),e.firstCreatePass&&t>=i.directiveStart&&Kz(t,s[t],e)}finally{u!==null&&Us(u),OT(l),a.resolving=!1,$C()}}return n}function hB(o){if(typeof o=="string")return o.charCodeAt(0)||0;let e=o.hasOwnProperty(Hh)?o[Hh]:void 0;return typeof e=="number"?e>=0?e&hA:cB:e}function PT(o,e,t){let i=1<>cA)]&i)}function zT(o,e){return!(o&2)&&!(o&1&&e)}var Yh=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,i){return gA(this._tNode,this._lView,e,Bh(i),t)}};function cB(){return new Yh(Wa(),hn())}function uB(o,e,t,i,r){let n=o,s=e;for(;n!==null&&s!==null&&s[Yt]&2048&&!du(s);){let a=vA(n,s,t,i|2,Mo);if(a!==Mo)return a;let l=n.parent;if(!l){let h=s[zC];if(h){let c=h.get(t,Mo,i);if(c!==Mo)return c}l=mA(s),s=s[uu]}n=l}return r}function mA(o){let e=o[Gt],t=e.type;return t===2?e.declTNode:t===1?o[da]:null}function dB(){return wu(Wa(),hn())}function wu(o,e){return new Yl(Io(o,e))}var Yl=(()=>{class o{nativeElement;constructor(t){this.nativeElement=t}static __NG_ELEMENT_ID__=dB}return o})();function pB(o){return o instanceof Yl?o.nativeElement:o}function fB(){return this._results[Symbol.iterator]()}var Lv=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new Zo}constructor(e=!1){this._emitDistinctChangesOnly=e}get(e){return this._results[e]}map(e){return this._results.map(e)}filter(e){return this._results.filter(e)}find(e){return this._results.find(e)}reduce(e,t){return this._results.reduce(e,t)}forEach(e){this._results.forEach(e)}some(e){return this._results.some(e)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(e,t){this.dirty=!1;let i=GE(e);(this._changesDetected=!YE(this._results,i,t))&&(this._results=i,this.length=i.length,this.last=i[this.length-1],this.first=i[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(e){this._onDirty=e}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=fB};function yA(o){return(o.flags&128)===128}var TS=(function(o){return o[o.OnPush=0]="OnPush",o[o.Default=1]="Default",o})(TS||{}),bA=new Map,gB=0;function vB(){return gB++}function mB(o){bA.set(o[bp],o)}function dS(o){bA.delete(o[bp])}var BT="__ngContext__";function Ap(o,e){xo(e)?(o[BT]=e[bp],mB(e)):o[BT]=e}function CA(o){return wA(o[cu])}function SA(o){return wA(o[ua])}function wA(o){for(;o!==null&&!Va(o);)o=o[ua];return o}var yB;function AS(o){yB=o}var Pv=new ji("",{factory:()=>bB}),bB="ng";var zv=new ji(""),Fp=new ji("",{providedIn:"platform",factory:()=>"unknown"});var Bv=new ji("",{factory:()=>vr(qa).body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});var xA=!1,IA=new ji("",{factory:()=>xA});var CB=(o,e,t,i)=>{};function SB(o,e,t,i){CB(o,e,t,i)}function LS(o){return(o.flags&32)===32}var wB=()=>null;function MA(o,e,t=!1){return wB(o,e,t)}function DA(o,e){let t=o.contentQueries;if(t!==null){let i=ui(null);try{for(let r=0;r-1){let n;for(;++rn?u="":u=r[c+1].toLowerCase(),i&2&&h!==u){if(Ya(i))return!1;s=!0}}}}return Ya(i)||s}function Ya(o){return(o&1)===0}function LB(o,e,t,i){if(e===null)return-1;let r=0;if(i||!t){let n=!1;for(;r-1)for(t++;t0?'="'+a+'"':"")+"]"}else i&8?r+="."+s:i&4&&(r+=" "+s);else r!==""&&!Ya(s)&&(e+=HT(n,r),r=""),i=s,n=n||!Ya(i);t++}return r!==""&&(e+=HT(n,r)),e}function OB(o){return o.map(RB).join(",")}function PB(o){let e=[],t=[],i=1,r=2;for(;i{class o{impl=null;execute(){this.impl?.execute()}static \u0275prov=en({token:o,providedIn:"root",factory:()=>new o})}return o})();var VB=new ji("",{factory:()=>({queue:new Set,isScheduled:!1,scheduler:null,injector:vr(ha)})});function jA(o,e,t){let i=o.get(VB);if(Array.isArray(e))for(let r of e)i.queue.add(r),t?.detachedLeaveAnimationFns?.push(r);else i.queue.add(e),t?.detachedLeaveAnimationFns?.push(e);i.scheduler&&i.scheduler(o)}function _B(o,e){for(let[t,i]of e)jA(o,i.animateFns)}function _T(o,e,t,i){let r=o?.[Sp]?.enter;e!==null&&r&&r.has(t.index)&&_B(i,r)}function mu(o,e,t,i,r,n,s,a){if(r!=null){let l,h=!1;Va(r)?l=r:xo(r)&&(h=!0,r=r[ja]);let c=_a(r);o===0&&i!==null?(_T(a,i,n,t),s==null?AA(e,i,c):Nv(e,i,c,s||null,!0)):o===1&&i!==null?(_T(a,i,n,t),Nv(e,i,c,s||null,!0)):o===2?UT(a,n,t,u=>{xB(e,c,h,u)}):o===3&&UT(a,n,t,()=>{e.destroyNode(c)}),l!=null&&i2(e,o,t,l,n,i,s)}}function UB(o,e){HA(o,e),e[ja]=null,e[da]=null}function WB(o,e,t,i,r,n){i[ja]=r,i[da]=e,Vv(o,i,t,1,r,n)}function HA(o,e){e[il].changeDetectionScheduler?.notify(9),Vv(o,e,e[ps],2,null,null)}function qB(o){let e=o[cu];if(!e)return oS(o[Gt],o);for(;e;){let t=null;if(xo(e))t=e[cu];else{let i=e[fs];i&&(t=i)}if(!t){for(;e&&!e[ua]&&e!==o;)xo(e)&&oS(e[Gt],e),e=e[Mn];e===null&&(e=o),xo(e)&&oS(e[Gt],e),t=e&&e[ua]}e=t}}function OS(o,e){let t=o[Uh],i=t.indexOf(e);t.splice(i,1)}function VA(o,e){if(qh(e))return;let t=e[ps];t.destroyNode&&Vv(o,e,t,3,null,null),qB(e)}function oS(o,e){if(qh(e))return;let t=ui(null);try{e[Yt]&=-129,e[Yt]|=256,e[qs]&&Ug(e[qs]),QB(o,e),GB(o,e),e[Gt].type===1&&e[ps].destroy();let i=e[_l];if(i!==null&&Va(e[Mn])){i!==e[Mn]&&OS(i,e);let r=e[So];r!==null&&r.detachView(o)}dS(e)}finally{ui(t)}}function UT(o,e,t,i){let r=o?.[Sp];if(r==null||r.leave==null||!r.leave.has(e.index))return i(!1);o&&bu.add(o),jA(t,()=>{if(r.leave&&r.leave.has(e.index)){let s=r.leave.get(e.index),a=[];if(s){for(let l=0;l{o[Sp].running=void 0,bu.delete(o),e(!0)});return}e(!1)}function GB(o,e){let t=o.cleanup,i=e[hu];if(t!==null)for(let s=0;s=0?i[a]():i[-a].unsubscribe(),s+=2}else{let a=i[t[s+1]];t[s].call(a)}i!==null&&(e[hu]=null);let r=e[Jo];if(r!==null){e[Jo]=null;for(let s=0;swo&&PA(o,e,wo,!1);let a=s?Fi.TemplateUpdateStart:Fi.TemplateCreateStart;$i(a,r,t),t(i,r)}finally{ql(n);let a=s?Fi.TemplateUpdateEnd:Fi.TemplateCreateEnd;$i(a,r,t)}}function WA(o,e,t){u2(o,e,t),(t.flags&64)===64&&d2(o,e,t)}function r2(o,e,t=Io){let i=e.localNames;if(i!==null){let r=e.index+1;for(let n=0;nnull;function o2(o){return o==="class"?"className":o==="for"?"htmlFor":o==="formaction"?"formAction":o==="innerHtml"?"innerHTML":o==="readonly"?"readOnly":o==="tabindex"?"tabIndex":o}function l2(o,e,t,i,r,n){let s=e[Gt];if(zS(o,s,e,t,i)){Wh(o)&&c2(e,o.index);return}o.type&3&&(t=o2(t)),h2(o,e,t,i,r,n)}function h2(o,e,t,i,r,n){if(o.type&3){let s=Io(o,e);i=n!=null?n(i,o.value||"",t):i,r.setProperty(s,t,i)}else o.type&12}function c2(o,e){let t=Ua(e,o);t[Yt]&16||(t[Yt]|=64)}function u2(o,e,t){let i=t.directiveStart,r=t.directiveEnd;Wh(t)&&jB(e,t,o.data[i+t.componentOffset]),o.firstCreatePass||uA(t,e);let n=t.initialInputs;for(let s=i;s{Ip(o.lView)},consumerOnSignalRead(){this.lView[qs]=this}});function E2(o){let e=o[qs]??Object.create(T2);return e.lView=o,e}var T2=bo(oa({},Y0),{consumerIsAlwaysLive:!0,kind:"template",consumerMarkedDirty:o=>{let e=Bl(o.lView);for(;e&&!QA(e[Gt]);)e=Bl(e);e&&VC(e)},consumerOnSignalRead(){this.lView[qs]=this}});function QA(o){return o.type!==2}function KA(o){if(o[Cp]===null)return;let e=!0;for(;e;){let t=!1;for(let i of o[Cp])i.dirty&&(t=!0,i.zone===null||Zone.current===i.zone?i.run():i.zone.run(()=>i.run()));e=t&&!!(o[Yt]&8192)}}var A2=100;function XA(o,e=0){let i=o[il].rendererFactory,r=!1;r||i.begin?.();try{L2(o,e)}finally{r||i.end?.()}}function L2(o,e){let t=GC();try{QC(!0),vS(o,e);let i=0;for(;xp(o);){if(i===A2)throw new Ci(103,!1);i++,vS(o,1)}}finally{QC(t)}}function N2(o,e,t,i){if(qh(e))return;let r=e[Yt],n=!1,s=!1;yv(e);let a=!0,l=null,h=null;n||(QA(o)?(h=x2(e),l=G0(h)):_g()===null?(a=!1,h=E2(e),l=G0(h)):e[qs]&&(Ug(e[qs]),e[qs]=null));try{HC(e),gT(o.bindingStartIndex),t!==null&&UA(o,e,t,2,i);let c=(r&3)===3;if(!n)if(c){let p=o.preOrderCheckHooks;p!==null&&Sv(e,p,null)}else{let p=o.preOrderHooks;p!==null&&wv(e,p,0,null),sS(e,0)}if(s||k2(e),KA(e),$A(e,0),o.contentQueries!==null&&DA(o,e),!n)if(c){let p=o.contentCheckHooks;p!==null&&Sv(e,p)}else{let p=o.contentHooks;p!==null&&wv(e,p,1),sS(e,1)}R2(o,e);let u=o.components;u!==null&&JA(e,u,0);let d=o.viewQuery;if(d!==null&&pS(2,d,i),!n)if(c){let p=o.viewCheckHooks;p!==null&&Sv(e,p)}else{let p=o.viewHooks;p!==null&&wv(e,p,2),sS(e,2)}if(o.firstUpdatePass===!0&&(o.firstUpdatePass=!1),e[hv]){for(let p of e[hv])p();e[hv]=null}n||(YA(e),e[Yt]&=-73)}catch(c){throw n||Ip(e),c}finally{h!==null&&(yE(h,l),a&&M2(h)),bv()}}function $A(o,e){for(let t=CA(o);t!==null;t=SA(t))for(let i=fs;i0&&(o[t-1][ua]=i[ua]);let n=fp(o,fs+e);UB(i[Gt],i);let s=n[So];s!==null&&s.detachView(n[Gt]),i[Mn]=null,i[ua]=null,i[Yt]&=-129}return i}function z2(o,e,t,i){let r=fs+i,n=t.length;i>0&&(t[r-1][ua]=e),i-1&&(mS(e,i),fp(t,i))}this._attachedToViewContainer=!1}VA(this._lView[Gt],this._lView)}onDestroy(e){_C(this._lView,e)}markForCheck(){jS(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[Yt]&=-129}reattach(){fv(this._lView),this._lView[Yt]|=128}detectChanges(){this._lView[Yt]|=1024,XA(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new Ci(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=du(this._lView),t=this._lView[_l];t!==null&&!e&&OS(t,this._lView),HA(this._lView[Gt],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new Ci(902,!1);this._appRef=e;let t=du(this._lView),i=this._lView[_l];i!==null&&!t&&e1(i,this._lView),fv(this._lView)}};var Su=(()=>{class o{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=B2;constructor(t,i,r){this._declarationLView=t,this._declarationTContainer=i,this.elementRef=r}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(t,i){return this.createEmbeddedViewImpl(t,i)}createEmbeddedViewImpl(t,i,r){let n=w2(this._declarationLView,this._declarationTContainer,t,{embeddedViewInjector:i,dehydratedView:r});return new Cu(n)}}return o})();function B2(){return HS(Wa(),hn())}function HS(o,e){return o.type&4?new Su(e,o,wu(o,e)):null}function j2(o,e,t,i,r){let n=o.data[e];if(n===null)n=H2(o,e,t,i,r),mT()&&(n.flags|=32);else if(n.type&64){n.type=t,n.value=i,n.attrs=r;let s=pT();n.injectorIndex=s===null?-1:s.injectorIndex}return gv(n,!0),n}function H2(o,e,t,i,r){let n=qC(),s=YC(),a=s?n:n&&n.parent,l=o.data[e]=_2(o,a,t,e,i,r);return V2(o,l,n,s),l}function V2(o,e,t,i){o.firstChild===null&&(o.firstChild=e),t!==null&&(i?t.child==null&&e.parent!==null&&(t.child=e):t.next===null&&(t.next=e,e.prev=t))}function _2(o,e,t,i,r,n){let s=e?e.injectorIndex:-1,a=0;return cT()&&(a|=128),{type:t,index:i,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,fieldIndex:-1,customControlIndex:-1,propertyBindings:null,flags:a,providerIndexes:0,value:r,attrs:n,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:e,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}var U2=()=>null;function YT(o,e){return U2(o,e)}var t1=class{},_v=class{},yS=class{resolveComponentFactory(e){throw new Ci(917,!1)}},Uv=class{static NULL=new yS},Gh=class{},Wv=(()=>{class o{destroyNode=null;static __NG_ELEMENT_ID__=()=>W2()}return o})();function W2(){let o=hn(),e=Wa(),t=Ua(e.index,o);return(xo(t)?t:o)[ps]}var i1=(()=>{class o{static \u0275prov=en({token:o,providedIn:"root",factory:()=>null})}return o})();var Iv={},bS=class{injector;parentInjector;constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,i){let r=this.injector.get(e,Iv,i);return r!==Iv||t===Iv?r:this.parentInjector.get(e,t,i)}};function GT(o,e,t){let i=t?o.styles:null,r=t?o.classes:null,n=0;if(e!==null)for(let s=0;s0&&(t.directiveToIndex=new Map);for(let d=0;d0;){let t=o[--e];if(typeof t=="number"&&t<0)return t}return 0}function J2(o,e,t){if(t){if(e.exportAs)for(let i=0;ii(_a(v[o.index])):o.index;a1(f,e,t,n,a,p,!1)}}return h}function rj(o){return o.startsWith("animation")||o.startsWith("transition")}function nj(o,e,t,i){let r=o.cleanup;if(r!=null)for(let n=0;nl?a[l]:null}typeof s=="string"&&(n+=2)}return null}function a1(o,e,t,i,r,n,s){let a=e.firstCreatePass?WC(e):null,l=UC(t),h=l.length;l.push(r,n),a&&a.push(i,o,h,(h+1)*(s?-1:1))}function ZT(o,e,t,i,r,n){let s=e[t],a=e[Gt],h=a.data[t].outputs[i],u=s[h].subscribe(n);a1(o.index,a,e,r,n,u,!0)}var CS=Symbol("BINDING");var SS=class extends Uv{ngModule;constructor(e){super(),this.ngModule=e}resolveComponentFactory(e){let t=Vh(e);return new Np(t,this.ngModule)}};function sj(o){return Object.keys(o).map(e=>{let[t,i,r]=o[e],n={propName:t,templateName:e,isSignal:(i&Hv.SignalBased)!==0};return r&&(n.transform=r),n})}function aj(o){return Object.keys(o).map(e=>({propName:o[e],templateName:e}))}function oj(o,e,t){let i=e instanceof ha?e:e?.injector;return i&&o.getStandaloneInjector!==null&&(i=o.getStandaloneInjector(i)||i),i?new bS(t,i):t}function lj(o){let e=o.get(Gh,null);if(e===null)throw new Ci(407,!1);let t=o.get(i1,null),i=o.get(lu,null);return{rendererFactory:e,sanitizer:t,changeDetectionScheduler:i,ngReflect:!1}}function hj(o,e){let t=o1(o);return TA(e,t,t==="svg"?eT:t==="math"?tT:null)}function o1(o){return(o.selectors[0][0]||"div").toLowerCase()}var Np=class extends _v{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=sj(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=aj(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){super(),this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=OB(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,i,r,n,s){$i(Fi.DynamicComponentStart);let a=ui(null);try{let l=this.componentDef,h=cj(i,l,s,n),c=oj(l,r||this.ngModule,e),u=lj(c),d=u.rendererFactory.createRenderer(null,l),p=i?n2(d,i,l.encapsulation,c):hj(l,d),f=s?.some(JT)||n?.some(y=>typeof y!="function"&&y.bindings.some(JT)),v=kS(null,h,null,512|FA(l),null,null,u,d,c,null,MA(p,c,!0));v[wo]=p,yv(v);let m=null;try{let y=n1(wo,v,2,"#host",()=>h.directiveRegistry,!0,0);LA(d,p,y),Ap(p,v),WA(h,v,y),EA(h,y,v),s1(h,y),t!==void 0&&dj(y,this.ngContentSelectors,t),m=Ua(y.index,v),v[ds]=m[ds],BS(h,v,null)}catch(y){throw m!==null&&dS(m),dS(v),y}finally{$i(Fi.DynamicComponentEnd),bv()}return new kv(this.componentType,v,!!f)}finally{ui(a)}}};function cj(o,e,t,i){let r=o?["ng-version","21.0.6"]:PB(e.selectors[0]),n=null,s=null,a=0;if(t)for(let c of t)a+=c[CS].requiredVars,c.create&&(c.targetIdx=0,(n??=[]).push(c)),c.update&&(c.targetIdx=0,(s??=[]).push(c));if(i)for(let c=0;c{if(t&1&&o)for(let i of o)i.create();if(t&2&&e)for(let i of e)i.update()}}function JT(o){let e=o[CS].kind;return e==="input"||e==="twoWay"}var kv=class extends t1{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,i){super(),this._rootLView=t,this._hasInputBindings=i,this._tNode=dv(t[Gt],wo),this.location=wu(this._tNode,t),this.instance=Ua(this._tNode.index,t)[ds],this.hostView=this.changeDetectorRef=new Cu(t,void 0),this.componentType=e}setInput(e,t){this._hasInputBindings;let i=this._tNode;if(this.previousInputValues??=new Map,this.previousInputValues.has(e)&&Object.is(this.previousInputValues.get(e),t))return;let r=this._rootLView,n=zS(i,r[Gt],r,e,t);this.previousInputValues.set(e,t);let s=Ua(i.index,r);jS(s,1)}get injector(){return new Yh(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function dj(o,e,t){let i=o.projection=[];for(let r=0;r{class o{static __NG_ELEMENT_ID__=pj}return o})();function pj(){let o=Wa();return h1(o,hn())}var fj=Jn,l1=class extends fj{_lContainer;_hostTNode;_hostLView;constructor(e,t,i){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=i}get element(){return wu(this._hostTNode,this._hostLView)}get injector(){return new Yh(this._hostTNode,this._hostLView)}get parentInjector(){let e=ES(this._hostTNode,this._hostLView);if(lA(e)){let t=Tv(e,this._hostLView),i=Ev(e),r=t[Gt].data[i+8];return new Yh(r,t)}else return new Yh(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){let t=eA(this._lContainer);return t!==null&&t[e]||null}get length(){return this._lContainer.length-fs}createEmbeddedView(e,t,i){let r,n;typeof i=="number"?r=i:i!=null&&(r=i.index,n=i.injector);let s=YT(this._lContainer,e.ssrId),a=e.createEmbeddedViewImpl(t||{},n,s);return this.insertImpl(a,r,qT(this._hostTNode,s)),a}createComponent(e,t,i,r,n,s,a){let l=e&&!Wz(e),h;if(l)h=t;else{let m=t||{};h=m.index,i=m.injector,r=m.projectableNodes,n=m.environmentInjector||m.ngModuleRef,s=m.directives,a=m.bindings}let c=l?e:new Np(Vh(e)),u=i||this.parentInjector;if(!n&&c.ngModule==null){let y=(l?u:this.parentInjector).get(ha,null);y&&(n=y)}let d=Vh(c.componentType??{}),p=YT(this._lContainer,d?.id??null),f=p?.firstChild??null,v=c.create(u,r,f,n,s,a);return this.insertImpl(v.hostView,h,qT(this._hostTNode,p)),v}insert(e,t){return this.insertImpl(e,t,!0)}insertImpl(e,t,i){let r=e._lView;if(rT(r)){let a=this.indexOf(e);if(a!==-1)this.detach(a);else{let l=r[Mn],h=new l1(l,l[da],l[Mn]);h.detach(h.indexOf(e))}}let n=this._adjustIndex(t),s=this._lContainer;return P2(s,r,n,i),e.attachToViewContainerRef(),NC(hS(s),n,e),e}move(e,t){return this.insert(e,t)}indexOf(e){let t=eA(this._lContainer);return t!==null?t.indexOf(e):-1}remove(e){let t=this._adjustIndex(e,-1),i=mS(this._lContainer,t);i&&(fp(hS(this._lContainer),t),VA(i[Gt],i))}detach(e){let t=this._adjustIndex(e,-1),i=mS(this._lContainer,t);return i&&fp(hS(this._lContainer),t)!=null?new Cu(i):null}_adjustIndex(e,t=0){return e??this.length+t}};function eA(o){return o[wp]}function hS(o){return o[wp]||(o[wp]=[])}function h1(o,e){let t,i=e[o.index];return Va(i)?t=i:(t=O2(i,e,null,o),e[o.index]=t,OA(e,t)),vj(t,e,o,i),new l1(t,o,e)}function gj(o,e){let t=o[ps],i=t.createComment(""),r=Io(e,o),n=t.parentNode(r);return Nv(t,n,i,t.nextSibling(r),!1),i}var vj=mj;function mj(o,e,t,i){if(o[Ul])return;let r;t.type&8?r=_a(i):r=gj(e,t),o[Ul]=r}var wS=class o{queryList;matches=null;constructor(e){this.queryList=e}clone(){return new o(this.queryList)}setDirty(){this.queryList.setDirty()}},xS=class o{queries;constructor(e=[]){this.queries=e}createEmbeddedView(e){let t=e.queries;if(t!==null){let i=e.contentQueries!==null?e.contentQueries[0]:t.length,r=[];for(let n=0;n0)i.push(s[a/2]);else{let h=n[a+1],c=e[-l];for(let u=fs;ue.trim())}function d1(o,e,t){o.queries===null&&(o.queries=new IS),o.queries.track(new MS(e,t))}function Dj(o,e){let t=o.contentQueries||(o.contentQueries=[]),i=t.length?t[t.length-1]:-1;e!==i&&t.push(o.queries.length-1,e)}function VS(o,e){return o.queries.getByIndex(e)}function Ej(o,e){let t=o[Gt],i=VS(t,e);return i.crossesNgTemplate?DS(t,o,e,[]):c1(t,o,i,e)}var Rv=class{};var kp=class extends Rv{injector;componentFactoryResolver=new SS(this);instance=null;constructor(e){super();let t=new jh([...e.providers,{provide:Rv,useValue:this},{provide:Uv,useValue:this.componentFactoryResolver}],e.parent||mp(),e.debugName,new Set(["environment"]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function p1(o,e,t=null){return new kp({providers:o,parent:e,debugName:t,runEnvironmentInitializers:!0}).injector}var Tj=(()=>{class o{_injector;cachedInjectors=new Map;constructor(t){this._injector=t}getOrCreateStandaloneInjector(t){if(!t.standalone)return null;if(!this.cachedInjectors.has(t)){let i=RC(!1,t.type),r=i.length>0?p1([i],this._injector,""):null;this.cachedInjectors.set(t,r)}return this.cachedInjectors.get(t)}ngOnDestroy(){try{for(let t of this.cachedInjectors.values())t!==null&&t.destroy()}finally{this.cachedInjectors.clear()}}static \u0275prov=en({token:o,providedIn:"environment",factory:()=>new o(Ui(ha))})}return o})();function Op(o){return Ov(()=>{let e=f1(o),t=bo(oa({},e),{decls:o.decls,vars:o.vars,template:o.template,consts:o.consts||null,ngContentSelectors:o.ngContentSelectors,onPush:o.changeDetection===TS.OnPush,directiveDefs:null,pipeDefs:null,dependencies:e.standalone&&o.dependencies||null,getStandaloneInjector:e.standalone?r=>r.get(Tj).getOrCreateStandaloneInjector(t):null,getExternalStyles:null,signals:o.signals??!1,data:o.data||{},encapsulation:o.encapsulation||Ga.Emulated,styles:o.styles||la,_:null,schemas:o.schemas||null,tView:null,id:""});e.standalone&&zA("NgStandalone"),g1(t);let i=o.dependencies;return t.directiveDefs=tA(i,Aj),t.pipeDefs=tA(i,HE),t.id=kj(t),t})}function Aj(o){return Vh(o)||EC(o)}function Kh(o){return Ov(()=>({type:o.type,bootstrap:o.bootstrap||la,declarations:o.declarations||la,imports:o.imports||la,exports:o.exports||la,transitiveCompileScopes:null,schemas:o.schemas||null,id:o.id||null}))}function Lj(o,e){if(o==null)return Hl;let t={};for(let i in o)if(o.hasOwnProperty(i)){let r=o[i],n,s,a,l;Array.isArray(r)?(a=r[0],n=r[1],s=r[2]??n,l=r[3]||null):(n=r,s=r,a=Hv.None,l=null),t[n]=[i,a,l],e[n]=s}return t}function Nj(o){if(o==null)return Hl;let e={};for(let t in o)o.hasOwnProperty(t)&&(e[o[t]]=t);return e}function tn(o){return Ov(()=>{let e=f1(o);return g1(e),e})}function f1(o){let e={};return{type:o.type,providersResolver:null,viewProvidersResolver:null,factory:null,hostBindings:o.hostBindings||null,hostVars:o.hostVars||0,hostAttrs:o.hostAttrs||null,contentQueries:o.contentQueries||null,declaredInputs:e,inputConfig:o.inputs||Hl,exportAs:o.exportAs||null,standalone:o.standalone??!0,signals:o.signals===!0,selectors:o.selectors||la,viewQuery:o.viewQuery||null,features:o.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,inputs:Lj(o.inputs,e),outputs:Nj(o.outputs),debugInfo:null}}function g1(o){o.features?.forEach(e=>e(o))}function tA(o,e){return o?()=>{let t=typeof o=="function"?o():o,i=[];for(let r of t){let n=e(r);n!==null&&i.push(n)}return i}:null}function kj(o){let e=0,t=typeof o.consts=="function"?"":o.consts,i=[o.selectors,o.ngContentSelectors,o.hostVars,o.hostAttrs,t,o.vars,o.decls,o.encapsulation,o.standalone,o.signals,o.exportAs,JSON.stringify(o.inputs),JSON.stringify(o.outputs),Object.getOwnPropertyNames(o.type.prototype),!!o.contentQueries,!!o.viewQuery];for(let n of i.join("|"))e=Math.imul(31,e)+n.charCodeAt(0)<<0;return e+=2147483648,"c"+e}function Fj(o){return Object.getPrototypeOf(o.prototype).constructor}function Qr(o){let e=Fj(o.type),t=!0,i=[o];for(;e;){let r;if(rl(o))r=e.\u0275cmp||e.\u0275dir;else{if(e.\u0275cmp)throw new Ci(903,!1);r=e.\u0275dir}if(r){if(t){i.push(r);let s=o;s.inputs=cS(o.inputs),s.declaredInputs=cS(o.declaredInputs),s.outputs=cS(o.outputs);let a=r.hostBindings;a&&Bj(o,a);let l=r.viewQuery,h=r.contentQueries;if(l&&Pj(o,l),h&&zj(o,h),Rj(o,r),BE(o.outputs,r.outputs),rl(r)&&r.data.animation){let c=o.data;c.animation=(c.animation||[]).concat(r.data.animation)}}let n=r.features;if(n)for(let s=0;s=0;i--){let r=o[i];r.hostVars=e+=r.hostVars,r.hostAttrs=Dv(r.hostAttrs,t=Dv(t,r.hostAttrs))}}function cS(o){return o===Hl?{}:o===la?[]:o}function Pj(o,e){let t=o.viewQuery;t?o.viewQuery=(i,r)=>{e(i,r),t(i,r)}:o.viewQuery=e}function zj(o,e){let t=o.contentQueries;t?o.contentQueries=(i,r,n)=>{e(i,r,n),t(i,r,n)}:o.contentQueries=e}function Bj(o,e){let t=o.hostBindings;t?o.hostBindings=(i,r)=>{e(i,r),t(i,r)}:o.hostBindings=e}var _S=new ji("");function US(o){return!!o&&typeof o.then=="function"}function v1(o){return!!o&&typeof o.subscribe=="function"}var m1=new ji("");var WS=(()=>{class o{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((t,i)=>{this.resolve=t,this.reject=i});appInits=vr(m1,{optional:!0})??[];injector=vr(el);constructor(){}runInitializers(){if(this.initialized)return;let t=[];for(let r of this.appInits){let n=lv(this.injector,r);if(US(n))t.push(n);else if(v1(n)){let s=new Promise((a,l)=>{n.subscribe({complete:a,error:l})});t.push(s)}}let i=()=>{this.done=!0,this.resolve()};Promise.all(t).then(()=>{i()}).catch(r=>{this.reject(r)}),t.length===0&&i(),this.initialized=!0}static \u0275fac=function(i){return new(i||o)};static \u0275prov=en({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})(),y1=new ji("");function b1(){X0(()=>{let o="";throw new Ci(600,o)})}function C1(o){return o.isBoundToModule}var jj=10;var qv=(()=>{class o{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=vr(vu);afterRenderManager=vr(BA);zonelessEnabled=vr(Mp);rootEffectScheduler=vr(nS);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new Zo;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=vr(gu);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(nC(t=>!t))}constructor(){vr(Rp,{optional:!0})}whenStable(){let t;return new Promise(i=>{t=this.isStable.subscribe({next:r=>{r&&i()}})}).finally(()=>{t.unsubscribe()})}_injector=vr(ha);_rendererFactory=null;get injector(){return this._injector}bootstrap(t,i){return this.bootstrapImpl(t,i)}bootstrapImpl(t,i,r=el.NULL){return this._injector.get(ca).run(()=>{$i(Fi.BootstrapComponentStart);let s=t instanceof _v;if(!this._injector.get(WS).done){let f="";throw new Ci(405,f)}let l;s?l=t:l=this._injector.get(Uv).resolveComponentFactory(t),this.componentTypes.push(l.componentType);let h=C1(l)?void 0:this._injector.get(Rv),c=i||l.selector,u=l.create(r,[],c,h),d=u.location.nativeElement,p=u.injector.get(_S,null);return p?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),Ep(this.components,u),p?.unregisterApplication(d)}),this._loadComponent(u),$i(Fi.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){$i(Fi.ChangeDetectionStart),this.tracingSnapshot!==null?this.tracingSnapshot.run(RS.CHANGE_DETECTION,this.tickImpl):this.tickImpl()}tickImpl=()=>{if(this._runningTick)throw $i(Fi.ChangeDetectionEnd),new Ci(101,!1);let t=ui(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,ui(t),this.afterTick.next(),$i(Fi.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(Gh,null,{optional:!0}));let t=0;for(;this.dirtyFlags!==0&&t++xp(t))){this.dirtyFlags|=2;return}else this.dirtyFlags&=-8}attachView(t){let i=t;this._views.push(i),i.attachToAppRef(this)}detachView(t){let i=t;Ep(this._views,i),i.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView);try{this.tick()}catch(r){this.internalErrorHandler(r)}this.components.push(t),this._injector.get(y1,[]).forEach(r=>r(t))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(t=>t()),this._views.slice().forEach(t=>t.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(t){return this._destroyListeners.push(t),()=>Ep(this._destroyListeners,t)}destroy(){if(this._destroyed)throw new Ci(406,!1);let t=this._injector;t.destroy&&!t.destroyed&&t.destroy()}get viewCount(){return this._views.length}static \u0275fac=function(i){return new(i||o)};static \u0275prov=en({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})();function Ep(o,e){let t=o.indexOf(e);t>-1&&o.splice(t,1)}var sQ=typeof document<"u"&&typeof document?.documentElement?.getAnimations=="function";function Xh(o,e,t){let i=hn(),r=vT();if(tj(i,r,e)){let n=Wl(),s=xT();l2(s,i,o,e,i[ps],t)}return Xh}function iA(o,e,t,i,r){zS(e,o,t,r?"class":"style",i)}function $h(o,e,t,i){let r=hn(),n=r[Gt],s=o+wo,a=n.firstCreatePass?n1(s,r,2,e,f2,hT(),t,i):n.data[s];if(v2(a,r,o,e,Hj),uv(a)){let l=r[Gt];WA(l,r,a),EA(l,a,r)}return i!=null&&r2(r,a),$h}function Iu(){let o=Wl(),e=Wa(),t=m2(e);return o.firstCreatePass&&s1(o,t),uT(t)&&dT(),lT(),t.classesWithoutHost!=null&&Zz(t)&&iA(o,t,hn(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&Jz(t)&&iA(o,t,hn(),t.stylesWithoutHost,!1),Iu}function Pp(o,e,t,i){return $h(o,e,t,i),Iu(),Pp}var Hj=(o,e,t,i,r)=>(ET(!0),TA(e[ps],i,IT()));function qS(){return hn()}var zp="en-US";var Vj=zp;function S1(o){typeof o=="string"&&(Vj=o.toLowerCase().replace(/_/g,"-"))}function Yv(o,e,t){let i=hn(),r=Wl(),n=Wa();return _j(r,i,i[ps],n,o,e,t),Yv}function _j(o,e,t,i,r,n,s){let a=!0,l=null;if((i.type&3||s)&&(l??=lS(i,e,n),ij(i,o,e,s,t,r,n,l)&&(a=!1)),a){let h=i.outputs?.[r],c=i.hostDirectiveOutputs?.[r];if(c&&c.length)for(let u=0;u{class o{applicationErrorHandler=vr(vu);appRef=vr(qv);taskService=vr(gu);ngZone=vr(ca);zonelessEnabled=vr(Mp);tracing=vr(Rp,{optional:!0});zoneIsDefined=typeof Zone<"u"&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new us;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(dp):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(vr(rS,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{this.runningTick||this.cleanup()})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()}))}notify(t){if(!this.zonelessEnabled&&t===5)return;switch(t){case 0:{this.appRef.dirtyFlags|=2;break}case 3:case 2:case 4:case 5:case 1:{this.appRef.dirtyFlags|=4;break}case 6:{this.appRef.dirtyFlags|=2;break}case 12:{this.appRef.dirtyFlags|=16;break}case 13:{this.appRef.dirtyFlags|=2;break}case 11:break;case 9:case 8:case 7:case 10:default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick())return;let i=this.useMicrotaskScheduler?eS:JC;this.pendingRenderTaskId=this.taskService.add(),this.scheduleInRootZone?this.cancelScheduledCallback=Zone.root.run(()=>i(()=>this.tick())):this.cancelScheduledCallback=this.ngZone.runOutsideAngular(()=>i(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(dp+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let t=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(i){this.taskService.remove(t),this.applicationErrorHandler(i)}finally{this.cleanup()}this.useMicrotaskScheduler=!0,eS(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(t)})}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let t=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(t)}}static \u0275fac=function(i){return new(i||o)};static \u0275prov=en({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})();function x1(){return[{provide:lu,useExisting:w1},{provide:ca,useClass:pp},{provide:Mp,useValue:!0}]}function Uj(){return typeof $localize<"u"&&$localize.locale||zp}var YS=new ji("",{factory:()=>vr(YS,{optional:!0,skipSelf:!0})||Uj()});var GS=new ji(""),$j=new ji("");function Bp(o){return!o.moduleRef}function Zj(o){let e=Bp(o)?o.r3Injector:o.moduleRef.injector,t=e.get(ca);return t.run(()=>{Bp(o)?o.r3Injector.resolveInjectorInitializers():o.moduleRef.resolveInjectorInitializers();let i=e.get(vu),r;if(t.runOutsideAngular(()=>{r=t.onError.subscribe({next:i})}),Bp(o)){let n=()=>e.destroy(),s=o.platformInjector.get(GS);s.add(n),e.onDestroy(()=>{r.unsubscribe(),s.delete(n)})}else{let n=()=>o.moduleRef.destroy(),s=o.platformInjector.get(GS);s.add(n),o.moduleRef.onDestroy(()=>{Ep(o.allPlatformModules,o.moduleRef),r.unsubscribe(),s.delete(n)})}return eH(i,t,()=>{let n=e.get(gu),s=n.add(),a=e.get(WS);return a.runInitializers(),a.donePromise.then(()=>{let l=e.get(YS,zp);if(S1(l||zp),!e.get($j,!0))return Bp(o)?e.get(qv):(o.allPlatformModules.push(o.moduleRef),o.moduleRef);if(Bp(o)){let c=e.get(qv);return o.rootComponent!==void 0&&c.bootstrap(o.rootComponent),c}else return Jj?.(o.moduleRef,o.allPlatformModules),o.moduleRef}).finally(()=>void n.remove(s))})})}var Jj;function eH(o,e,t){try{let i=t();return US(i)?i.catch(r=>{throw e.runOutsideAngular(()=>o(r)),r}):i}catch(i){throw e.runOutsideAngular(()=>o(i)),i}}var Qv=null;function tH(o=[],e){return el.create({name:e,providers:[{provide:vp,useValue:"platform"},{provide:GS,useValue:new Set([()=>Qv=null])},...o]})}function iH(o=[]){if(Qv)return Qv;let e=tH(o);return Qv=e,b1(),rH(e),e}function rH(o){let e=o.get(zv,null);lv(o,()=>{e?.forEach(t=>t())})}function I1(o){let{rootComponent:e,appProviders:t,platformProviders:i,platformRef:r}=o;$i(Fi.BootstrapApplicationStart);try{let n=r?.injector??iH(i),s=[x1(),NT,...t||[]],a=new kp({providers:s,parent:n,debugName:"",runEnvironmentInitializers:!1});return Zj({r3Injector:a.injector,platformInjector:n,rootComponent:e})}catch(n){return Promise.reject(n)}finally{$i(Fi.BootstrapApplicationEnd)}}var M1=null;function Vp(){return M1}function QS(o){M1??=o}var Hp=class{};var _p=(()=>{class o{static \u0275fac=function(i){return new(i||o)};static \u0275mod=Kh({type:o});static \u0275inj=jl({})}return o})();function KS(o,e){e=encodeURIComponent(e);for(let t of o.split(";")){let i=t.indexOf("="),[r,n]=i==-1?[t,""]:[t.slice(0,i),t.slice(i+1)];if(r.trim()===e)return decodeURIComponent(n)}return null}var Up=class{};var D1="browser";var Wp=class{_doc;constructor(e){this._doc=e}manager},Kv=(()=>{class o extends Wp{constructor(t){super(t)}supports(t){return!0}addEventListener(t,i,r,n){return t.addEventListener(i,r,n),()=>this.removeEventListener(t,i,r,n)}removeEventListener(t,i,r,n){return t.removeEventListener(i,r,n)}static \u0275fac=function(i){return new(i||o)(Ui(qa))};static \u0275prov=en({token:o,factory:o.\u0275fac})}return o})(),Zv=new ji(""),JS=(()=>{class o{_zone;_plugins;_eventNameToPlugin=new Map;constructor(t,i){this._zone=i,t.forEach(s=>{s.manager=this});let r=t.filter(s=>!(s instanceof Kv));this._plugins=r.slice().reverse();let n=t.find(s=>s instanceof Kv);n&&this._plugins.push(n)}addEventListener(t,i,r,n){return this._findPluginFor(i).addEventListener(t,i,r,n)}getZone(){return this._zone}_findPluginFor(t){let i=this._eventNameToPlugin.get(t);if(i)return i;if(i=this._plugins.find(n=>n.supports(t)),!i)throw new Ci(5101,!1);return this._eventNameToPlugin.set(t,i),i}static \u0275fac=function(i){return new(i||o)(Ui(Zv),Ui(ca))};static \u0275prov=en({token:o,factory:o.\u0275fac})}return o})(),XS="ng-app-id";function E1(o){for(let e of o)e.remove()}function T1(o,e){let t=e.createElement("style");return t.textContent=o,t}function sH(o,e,t,i){let r=o.head?.querySelectorAll(`style[${XS}="${e}"],link[${XS}="${e}"]`);if(r)for(let n of r)n.removeAttribute(XS),n instanceof HTMLLinkElement?i.set(n.href.slice(n.href.lastIndexOf("/")+1),{usage:0,elements:[n]}):n.textContent&&t.set(n.textContent,{usage:0,elements:[n]})}function ZS(o,e){let t=e.createElement("link");return t.setAttribute("rel","stylesheet"),t.setAttribute("href",o),t}var ew=(()=>{class o{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;constructor(t,i,r,n={}){this.doc=t,this.appId=i,this.nonce=r,sH(t,i,this.inline,this.external),this.hosts.add(t.head)}addStyles(t,i){for(let r of t)this.addUsage(r,this.inline,T1);i?.forEach(r=>this.addUsage(r,this.external,ZS))}removeStyles(t,i){for(let r of t)this.removeUsage(r,this.inline);i?.forEach(r=>this.removeUsage(r,this.external))}addUsage(t,i,r){let n=i.get(t);n?n.usage++:i.set(t,{usage:1,elements:[...this.hosts].map(s=>this.addElement(s,r(t,this.doc)))})}removeUsage(t,i){let r=i.get(t);r&&(r.usage--,r.usage<=0&&(E1(r.elements),i.delete(t)))}ngOnDestroy(){for(let[,{elements:t}]of[...this.inline,...this.external])E1(t);this.hosts.clear()}addHost(t){this.hosts.add(t);for(let[i,{elements:r}]of this.inline)r.push(this.addElement(t,T1(i,this.doc)));for(let[i,{elements:r}]of this.external)r.push(this.addElement(t,ZS(i,this.doc)))}removeHost(t){this.hosts.delete(t)}addElement(t,i){return this.nonce&&i.setAttribute("nonce",this.nonce),t.appendChild(i)}static \u0275fac=function(i){return new(i||o)(Ui(qa),Ui(Pv),Ui(Bv,8),Ui(Fp))};static \u0275prov=en({token:o,factory:o.\u0275fac})}return o})(),$S={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/Math/MathML"},tw=/%COMP%/g;var L1="%COMP%",aH=`_nghost-${L1}`,oH=`_ngcontent-${L1}`,lH=!0,hH=new ji("",{factory:()=>lH});function cH(o){return oH.replace(tw,o)}function uH(o){return aH.replace(tw,o)}function N1(o,e){return e.map(t=>t.replace(tw,o))}var iw=(()=>{class o{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;ngZone;nonce;tracingService;rendererByCompId=new Map;defaultRenderer;constructor(t,i,r,n,s,a,l=null,h=null){this.eventManager=t,this.sharedStylesHost=i,this.appId=r,this.removeStylesOnCompDestroy=n,this.doc=s,this.ngZone=a,this.nonce=l,this.tracingService=h,this.defaultRenderer=new qp(t,s,a,this.tracingService)}createRenderer(t,i){if(!t||!i)return this.defaultRenderer;let r=this.getOrCreateRenderer(t,i);return r instanceof $v?r.applyToHost(t):r instanceof Yp&&r.applyStyles(),r}getOrCreateRenderer(t,i){let r=this.rendererByCompId,n=r.get(i.id);if(!n){let s=this.doc,a=this.ngZone,l=this.eventManager,h=this.sharedStylesHost,c=this.removeStylesOnCompDestroy,u=this.tracingService;switch(i.encapsulation){case Ga.Emulated:n=new $v(l,h,i,this.appId,c,s,a,u);break;case Ga.ShadowDom:return new Xv(l,t,i,s,a,this.nonce,u,h);case Ga.ExperimentalIsolatedShadowDom:return new Xv(l,t,i,s,a,this.nonce,u);default:n=new Yp(l,h,i,c,s,a,u);break}r.set(i.id,n)}return n}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(t){this.rendererByCompId.delete(t)}static \u0275fac=function(i){return new(i||o)(Ui(JS),Ui(ew),Ui(Pv),Ui(hH),Ui(qa),Ui(ca),Ui(Bv),Ui(Rp,8))};static \u0275prov=en({token:o,factory:o.\u0275fac})}return o})(),qp=class{eventManager;doc;ngZone;tracingService;data=Object.create(null);throwOnSyntheticProps=!0;constructor(e,t,i,r){this.eventManager=e,this.doc=t,this.ngZone=i,this.tracingService=r}destroy(){}destroyNode=null;createElement(e,t){return t?this.doc.createElementNS($S[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(A1(e)?e.content:e).appendChild(t)}insertBefore(e,t,i){e&&(A1(e)?e.content:e).insertBefore(t,i)}removeChild(e,t){t.remove()}selectRootElement(e,t){let i=typeof e=="string"?this.doc.querySelector(e):e;if(!i)throw new Ci(-5104,!1);return t||(i.textContent=""),i}parentNode(e){return e.parentNode}nextSibling(e){return e.nextSibling}setAttribute(e,t,i,r){if(r){t=r+":"+t;let n=$S[r];n?e.setAttributeNS(n,t,i):e.setAttribute(t,i)}else e.setAttribute(t,i)}removeAttribute(e,t,i){if(i){let r=$S[i];r?e.removeAttributeNS(r,t):e.removeAttribute(`${i}:${t}`)}else e.removeAttribute(t)}addClass(e,t){e.classList.add(t)}removeClass(e,t){e.classList.remove(t)}setStyle(e,t,i,r){r&(Qh.DashCase|Qh.Important)?e.style.setProperty(t,i,r&Qh.Important?"important":""):e.style[t]=i}removeStyle(e,t,i){i&Qh.DashCase?e.style.removeProperty(t):e.style[t]=""}setProperty(e,t,i){e!=null&&(e[t]=i)}setValue(e,t){e.nodeValue=t}listen(e,t,i,r){if(typeof e=="string"&&(e=Vp().getGlobalEventTarget(this.doc,e),!e))throw new Ci(5102,!1);let n=this.decoratePreventDefault(i);return this.tracingService?.wrapEventListener&&(n=this.tracingService.wrapEventListener(e,t,n)),this.eventManager.addEventListener(e,t,n,r)}decoratePreventDefault(e){return t=>{if(t==="__ngUnwrap__")return e;e(t)===!1&&t.preventDefault()}}};function A1(o){return o.tagName==="TEMPLATE"&&o.content!==void 0}var Xv=class extends qp{hostEl;sharedStylesHost;shadowRoot;constructor(e,t,i,r,n,s,a,l){super(e,r,n,a),this.hostEl=t,this.sharedStylesHost=l,this.shadowRoot=t.attachShadow({mode:"open"}),this.sharedStylesHost&&this.sharedStylesHost.addHost(this.shadowRoot);let h=i.styles;h=N1(i.id,h);for(let u of h){let d=document.createElement("style");s&&d.setAttribute("nonce",s),d.textContent=u,this.shadowRoot.appendChild(d)}let c=i.getExternalStyles?.();if(c)for(let u of c){let d=ZS(u,r);s&&d.setAttribute("nonce",s),this.shadowRoot.appendChild(d)}}nodeOrShadowRoot(e){return e===this.hostEl?this.shadowRoot:e}appendChild(e,t){return super.appendChild(this.nodeOrShadowRoot(e),t)}insertBefore(e,t,i){return super.insertBefore(this.nodeOrShadowRoot(e),t,i)}removeChild(e,t){return super.removeChild(null,t)}parentNode(e){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(e)))}destroy(){this.sharedStylesHost&&this.sharedStylesHost.removeHost(this.shadowRoot)}},Yp=class extends qp{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(e,t,i,r,n,s,a,l){super(e,n,s,a),this.sharedStylesHost=t,this.removeStylesOnCompDestroy=r;let h=i.styles;this.styles=l?N1(l,h):h,this.styleUrls=i.getExternalStyles?.(l)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){this.removeStylesOnCompDestroy&&bu.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},$v=class extends Yp{contentAttr;hostAttr;constructor(e,t,i,r,n,s,a,l){let h=r+"-"+i.id;super(e,t,i,n,s,a,l,h),this.contentAttr=cH(h),this.hostAttr=uH(h)}applyToHost(e){this.applyStyles(),this.setAttribute(e,this.hostAttr,"")}createElement(e,t){let i=super.createElement(e,t);return super.setAttribute(i,this.contentAttr,""),i}};var Jv=class o extends Hp{supportsDOMEvents=!0;static makeCurrent(){QS(new o)}onAndCancel(e,t,i,r){return e.addEventListener(t,i,r),()=>{e.removeEventListener(t,i,r)}}dispatchEvent(e,t){e.dispatchEvent(t)}remove(e){e.remove()}createElement(e,t){return t=t||this.getDefaultDocument(),t.createElement(e)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(e){return e.nodeType===Node.ELEMENT_NODE}isShadowRoot(e){return e instanceof DocumentFragment}getGlobalEventTarget(e,t){return t==="window"?window:t==="document"?e:t==="body"?e.body:null}getBaseHref(e){let t=dH();return t==null?null:pH(t)}resetBaseElement(){Gp=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return KS(document.cookie,e)}},Gp=null;function dH(){return Gp=Gp||document.head.querySelector("base"),Gp?Gp.getAttribute("href"):null}function pH(o){return new URL(o,document.baseURI).pathname}var fH=(()=>{class o{build(){return new XMLHttpRequest}static \u0275fac=function(i){return new(i||o)};static \u0275prov=en({token:o,factory:o.\u0275fac})}return o})(),k1=["alt","control","meta","shift"],gH={"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},vH={alt:o=>o.altKey,control:o=>o.ctrlKey,meta:o=>o.metaKey,shift:o=>o.shiftKey},F1=(()=>{class o extends Wp{constructor(t){super(t)}supports(t){return o.parseEventName(t)!=null}addEventListener(t,i,r,n){let s=o.parseEventName(i),a=o.eventCallback(s.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Vp().onAndCancel(t,s.domEventName,a,n))}static parseEventName(t){let i=t.toLowerCase().split("."),r=i.shift();if(i.length===0||!(r==="keydown"||r==="keyup"))return null;let n=o._normalizeKey(i.pop()),s="",a=i.indexOf("code");if(a>-1&&(i.splice(a,1),s="code."),k1.forEach(h=>{let c=i.indexOf(h);c>-1&&(i.splice(c,1),s+=h+".")}),s+=n,i.length!=0||n.length===0)return null;let l={};return l.domEventName=r,l.fullKey=s,l}static matchEventFullKeyCode(t,i){let r=gH[t.key]||t.key,n="";return i.indexOf("code.")>-1&&(r=t.code,n="code."),r==null||!r?!1:(r=r.toLowerCase(),r===" "?r="space":r==="."&&(r="dot"),k1.forEach(s=>{if(s!==r){let a=vH[s];a(t)&&(n+=s+".")}}),n+=r,n===i)}static eventCallback(t,i,r){return n=>{o.matchEventFullKeyCode(n,t)&&r.runGuarded(()=>i(n))}}static _normalizeKey(t){return t==="esc"?"escape":t}static \u0275fac=function(i){return new(i||o)(Ui(qa))};static \u0275prov=en({token:o,factory:o.\u0275fac})}return o})();function rw(o,e,t){let i=oa({rootComponent:o,platformRef:t?.platformRef},mH(e));return I1(i)}function mH(o){return{appProviders:[...wH,...o?.providers??[]],platformProviders:SH}}function yH(){Jv.makeCurrent()}function bH(){return new tl}function CH(){return AS(document),document}var SH=[{provide:Fp,useValue:D1},{provide:zv,useValue:yH,multi:!0},{provide:qa,useFactory:CH}];var wH=[{provide:vp,useValue:"root"},{provide:tl,useFactory:bH},{provide:Zv,useClass:Kv,multi:!0},{provide:Zv,useClass:F1,multi:!0},iw,ew,JS,{provide:Gh,useExisting:iw},{provide:Up,useClass:fH},[]];var R1="ej2_instances",xH=0,IH=!1;function im(o,e){var t=e;return t.unshift(void 0),new(Function.prototype.bind.apply(o,t))}function MH(o){var e,t=new Uint16Array(5),i=window.msCrypto||window.crypto;i.getRandomValues(t);var r="ej2"+EH(t),n=function(a){a.source===window&&typeof a.data=="string"&&a.data.length<=32&&a.data===r&&(o(),e())};window.addEventListener("message",n,!1);var s=window.location.origin.indexOf("file://")===0?"*":window.location.origin;return window.postMessage(r,s),e=function(){window.removeEventListener("message",n),o=n=r=void 0}}function Y(o,e){for(var t=e,i=o.replace(/\[/g,".").replace(/\]/g,"").split("."),r=0;r"u"}function ft(o){return o+"_"+xH++}function rm(o,e){var t;return function(){for(var i=this,r=[],n=0;n "+a+""+t.innerHTML+"