diff --git a/.github/workflows/auto-pr.yml b/.github/workflows/auto-pr.yml
index d4cd30c876..533fbb878e 100644
--- a/.github/workflows/auto-pr.yml
+++ b/.github/workflows/auto-pr.yml
@@ -1,10 +1,10 @@
-name: Merge branch dev with rel-4.4
+name: Merge branch dev with rel-5.0
on:
push:
branches:
- - rel-4.4
+ - rel-5.0
jobs:
- merge-dev-with-rel-4-4:
+ merge-dev-with-rel-5-0:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
@@ -12,13 +12,13 @@ jobs:
ref: dev
- name: Reset promotion branch
run: |
- git fetch origin rel-4.4:rel-4.4
- git reset --hard rel-4.4
+ git fetch origin rel-5.0:rel-5.0
+ git reset --hard rel-5.0
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
- branch: auto-merge/rel-4-4/${{github.run_number}}
- title: Merge branch dev with rel-4.4
- body: This PR generated automatically to merge dev with rel-4.4. Please review the changed files before merging to prevent any errors that may occur.
+ branch: auto-merge/rel-5-0/${{github.run_number}}
+ title: Merge branch dev with rel-5.0
+ body: This PR generated automatically to merge dev with rel-5.0. Please review the changed files before merging to prevent any errors that may occur.
reviewers: ${{github.actor}}
token: ${{ github.token }}
diff --git a/Directory.Build.props b/Directory.Build.props
index e14b4c3bc4..261be160a9 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -5,7 +5,7 @@
6.0.0-rc.*
- 16.9.1
+ 16.11.04.2.2
@@ -23,7 +23,7 @@
2.4.3
- 3.1.1
+ 3.1.3
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
index e23ed3fe5b..9410a7813f 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
@@ -310,6 +310,45 @@
"DeleteInvoice" : "Delete Invoice",
"SuccessfullyDeleted": "Successfully deleted!",
"PaymentStateSetTo" : "Payment state set to {0}",
- "ChangeState": "Change State"
+ "ChangeState": "Change State",
+ "Permission:TrialLicense" : "Trial License",
+ "Menu:TrialLicenses": "Trial Licenses",
+ "TrialLicenses": "Trial Licenses",
+ "UserNameFilter": "Username",
+ "TrialLicenseStatusFilter": "Status",
+ "TrialLicenseStartDateFilter": "Start date",
+ "TrialLicenseEndDateFilter": "End date",
+ "FirsName": "First name",
+ "LastName": "Last name",
+ "Status": "Status",
+ "StartDate": "Start date",
+ "EndDate": "End date",
+ "CompanyName": "Company name",
+ "PurchasedDate": "Purchased date",
+ "OrganizationDetail": "Organization Detail",
+ "SendActivationMail": "Send Activation Mail",
+ "ActivationMailSentSuccessfully": "Activation mail sent successfully!",
+ "TrialLicenseStatus": "Trial license status",
+ "TrialLicenseDetail": "Trial License Detail",
+ "AcceptsMarketingCommunications": "Marketing Communications",
+ "PurposeOfUsage": "Purpose of usage",
+ "CountryName": "Country name",
+ "CompanySize": "Company size",
+ "DetailTrialLicense": "Details",
+ "Requested": "Requested",
+ "Activated": "Activated",
+ "PurchasedToNormalLicense": "Purchased",
+ "Expired": "Expired",
+ "TrialLicenseDeletionWarningMessage": "Are you sure you want to delete the trial license? Trial license, organization, support accounts will be deleted!",
+ "LicenseCategoryFilter": "License category",
+ "Volo.AbpIo.Commercial:030000": "You already used your trial period.",
+ "Volo.AbpIo.Commercial:030001": "This organization name already exists.",
+ "Volo.AbpIo.Commercial:030002": "Once activated, trial license cannot be set to requested!",
+ "Volo.AbpIo.Commercial:030003": "There is no such status!",
+ "Volo.AbpIo.Commercial:030004": "Status could not be changed due to an unexpected error!",
+ "Volo.AbpIo.Commercial:030005": "Start date and end date cannot be given when the trial license is in the requested state!",
+ "Volo.AbpIo.Commercial:030006": "End date must always be greater than start date!",
+ "Volo.AbpIo.Commercial:030007": "This trial license has already been activated once!",
+ "Volo.AbpIo.Commercial:030008": "Purchase date can be set only when status is Purchased!",
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
index 7be579f1fb..2da4a62481 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "en",
"texts": {
"Permission:CommunityArticle": "Community Article",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json
index 7b93754482..4c78f15d99 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "ro-RO",
"texts": {
"Permission:CommunityArticle": "Articol comunitar",
diff --git a/common.props b/common.props
index ea1df61a0f..753259efb2 100644
--- a/common.props
+++ b/common.props
@@ -1,7 +1,7 @@
latest
- 5.0.0
+ 5.0.0-beta.1$(NoWarn);CS1591;CS0436https://abp.io/assets/abp_nupkg.pnghttps://abp.io/
diff --git a/configureawait.props b/configureawait.props
index 8b0b7f5933..b0cf9ef298 100644
--- a/configureawait.props
+++ b/configureawait.props
@@ -1,7 +1,7 @@
-
+ Allruntime; build; native; contentfiles; analyzers
diff --git a/docs/cs/Entity-Framework-Core-PostgreSQL.md b/docs/cs/Entity-Framework-Core-PostgreSQL.md
index e09880c37c..dc50c8a742 100644
--- a/docs/cs/Entity-Framework-Core-PostgreSQL.md
+++ b/docs/cs/Entity-Framework-Core-PostgreSQL.md
@@ -1,4 +1,4 @@
-# Přepnutí na EF Core PostgreSQL providera
+# Přepnutí na EF Core PostgreSQL providera
Tento dokument vysvětluje, jak přepnout na poskytovatele databáze **PostgreSQL** pro **[spouštěcí šablonu aplikace](Startup-Templates/Application.md)**, která je dodávána s předem nakonfigurovaným SQL poskytovatelem.
diff --git a/docs/cs/Getting-Started-AspNetCore-Application.md b/docs/cs/Getting-Started-AspNetCore-Application.md
index 877976d037..e269a08ba2 100644
--- a/docs/cs/Getting-Started-AspNetCore-Application.md
+++ b/docs/cs/Getting-Started-AspNetCore-Application.md
@@ -1,4 +1,4 @@
-# Začínáme s ASP.NET Core MVC aplikací
+# Začínáme s ASP.NET Core MVC aplikací
Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**.
diff --git a/docs/cs/Getting-Started-Console-Application.md b/docs/cs/Getting-Started-Console-Application.md
index dc822ec297..a6ee50dbe6 100644
--- a/docs/cs/Getting-Started-Console-Application.md
+++ b/docs/cs/Getting-Started-Console-Application.md
@@ -1,4 +1,4 @@
-# Začínáme s konzolovou aplikací
+# Začínáme s konzolovou aplikací
Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**.
diff --git a/docs/cs/Index.md b/docs/cs/Index.md
index 0424c7120b..875f4e066e 100644
--- a/docs/cs/Index.md
+++ b/docs/cs/Index.md
@@ -1,4 +1,4 @@
-# ABP dokumentace
+# ABP dokumentace
ABP je **open source aplikační framework** se zaměřením na vývoj webových aplikací založených na ASP.NET Core, zároveň ho však lze využít i k vývoji jiných typů aplikací.
diff --git a/docs/en/API/Application-Configuration.md b/docs/en/API/Application-Configuration.md
index 3aea468f8c..8441459e02 100644
--- a/docs/en/API/Application-Configuration.md
+++ b/docs/en/API/Application-Configuration.md
@@ -1,4 +1,4 @@
-# Application Configuration Endpoint
+# Application Configuration Endpoint
ABP Framework provides a pre-built and standard endpoint that contains some useful information about the application/service. Here, the list of some fundamental information at this endpoint:
diff --git a/docs/en/API/Swagger-Integration.md b/docs/en/API/Swagger-Integration.md
index 48ce252940..2e7b331cfc 100644
--- a/docs/en/API/Swagger-Integration.md
+++ b/docs/en/API/Swagger-Integration.md
@@ -1,4 +1,4 @@
-# Swagger Integration
+# Swagger Integration
[Swagger (OpenAPI)](https://swagger.io/) is a language-agnostic specification for describing REST APIs. It allows both computers and humans to understand the capabilities of a REST API without direct access to the source code. Its main goals are to:
diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md
index 67aee58dac..2076764345 100644
--- a/docs/en/Audit-Logging.md
+++ b/docs/en/Audit-Logging.md
@@ -1,4 +1,4 @@
-# Audit Logging
+# Audit Logging
[Wikipedia](https://en.wikipedia.org/wiki/Audit_trail): "*An audit trail (also called **audit log**) is a security-relevant chronological record, set of records, and/or destination and source of records that provide documentary evidence of the sequence of activities that have affected at any time a specific operation, procedure, or event*".
diff --git a/docs/en/Best-Practices/Application-Services.md b/docs/en/Best-Practices/Application-Services.md
index ff8afe81d2..309b264522 100644
--- a/docs/en/Best-Practices/Application-Services.md
+++ b/docs/en/Best-Practices/Application-Services.md
@@ -1,4 +1,4 @@
-## Application Services Best Practices & Conventions
+## Application Services Best Practices & Conventions
* **Do** create an application service for each **aggregate root**.
diff --git a/docs/en/Best-Practices/Data-Transfer-Objects.md b/docs/en/Best-Practices/Data-Transfer-Objects.md
index 0fca0e86f2..5d6409af7d 100644
--- a/docs/en/Best-Practices/Data-Transfer-Objects.md
+++ b/docs/en/Best-Practices/Data-Transfer-Objects.md
@@ -1,4 +1,4 @@
-## Data Transfer Objects Best Practices & Conventions
+## Data Transfer Objects Best Practices & Conventions
* **Do** define DTOs in the **application contracts** package.
* **Do** inherit from the pre-built **base DTO classes** where possible and necessary (like `EntityDto`, `CreationAuditedEntityDto`, `AuditedEntityDto`, `FullAuditedEntityDto` and so on).
diff --git a/docs/en/Best-Practices/Domain-Services.md b/docs/en/Best-Practices/Domain-Services.md
index f8b7c31797..e651086673 100644
--- a/docs/en/Best-Practices/Domain-Services.md
+++ b/docs/en/Best-Practices/Domain-Services.md
@@ -1,4 +1,4 @@
-## Domain Services Best Practices & Conventions
+## Domain Services Best Practices & Conventions
> **This document is not ready yet. Please see the [Domain Services](../Domain-Services.md) document.**
diff --git a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md
index 90d62698de..bae484af27 100644
--- a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md
+++ b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md
@@ -1,4 +1,4 @@
-## Entity Framework Core Integration Best Practices
+## Entity Framework Core Integration Best Practices
> See [Entity Framework Core Integration document](../Entity-Framework-Core.md) for the basics of the EF Core integration.
diff --git a/docs/en/Best-Practices/Index.md b/docs/en/Best-Practices/Index.md
index 5c21b5b9ec..3cc10a17cc 100644
--- a/docs/en/Best-Practices/Index.md
+++ b/docs/en/Best-Practices/Index.md
@@ -1,4 +1,4 @@
-## Module Development Best Practices & Conventions
+## Module Development Best Practices & Conventions
### Introduction
diff --git a/docs/en/Best-Practices/Module-Architecture.md b/docs/en/Best-Practices/Module-Architecture.md
index d9f833726f..b7e0d03db9 100644
--- a/docs/en/Best-Practices/Module-Architecture.md
+++ b/docs/en/Best-Practices/Module-Architecture.md
@@ -1,4 +1,4 @@
-## Module Architecture Best Practices & Conventions
+## Module Architecture Best Practices & Conventions
### Solution Structure
diff --git a/docs/en/Best-Practices/MongoDB-Integration.md b/docs/en/Best-Practices/MongoDB-Integration.md
index 216468b71e..594244443e 100644
--- a/docs/en/Best-Practices/MongoDB-Integration.md
+++ b/docs/en/Best-Practices/MongoDB-Integration.md
@@ -1,4 +1,4 @@
-## MongoDB Integration
+## MongoDB Integration
* Do define a separated `MongoDbContext` interface and class for each module.
diff --git a/docs/en/CLI.md b/docs/en/CLI.md
index 0638543e44..4b575ac6f6 100644
--- a/docs/en/CLI.md
+++ b/docs/en/CLI.md
@@ -1,4 +1,4 @@
-# ABP CLI
+# ABP CLI
ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions.
diff --git a/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/1.png b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/1.png
new file mode 100644
index 0000000000..adb430b2ce
Binary files /dev/null and b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/1.png differ
diff --git a/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/2.png b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/2.png
new file mode 100644
index 0000000000..8d617c0367
Binary files /dev/null and b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/2.png differ
diff --git a/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/POST.md b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/POST.md
new file mode 100644
index 0000000000..cb1b21d7fd
--- /dev/null
+++ b/docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/POST.md
@@ -0,0 +1,88 @@
+# How to override localization strings of depending modules
+
+## Source Code
+
+You can find the source of the example solution used in this article [here](https://github.com/abpframework/abp-samples/tree/master/DocumentationSamples/ExtendLocalizationResource).
+
+## Getting Started
+
+This example is based on the following document
+https://docs.abp.io/en/abp/latest/Localization#extending-existing-resource
+
+We will change the default `DisplayName:Abp.Timing.Timezone` and `Description:Abp.Timing.Timezone` of [`AbpTimingResource`](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/AbpTimingResource.cs) and add localized text in [Russian language(`ru`)](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/en.json).
+
+I created the `AbpTiming` folder in the `Localization` directory of the `ExtendLocalizationResource.Domain.Shared` project.
+
+Create `en.json` and `ru.json` in its directory.
+
+`en.json`
+```json
+{
+ "culture": "en",
+ "texts": {
+ "DisplayName:Abp.Timing.Timezone": "My Time zone",
+ "Description:Abp.Timing.Timezone": "My Application time zone"
+ }
+}
+```
+
+`ru.json`
+```json
+{
+ "culture": "ru",
+ "texts": {
+ "DisplayName:Abp.Timing.Timezone": "Часовой пояс",
+ "Description:Abp.Timing.Timezone": "Часовой пояс приложения"
+ }
+}
+```
+
+
+
+We have below content in `ExtendLocalizationResource.Domain.Shared.csproj` file, See [Virtual-File-System](https://docs.abp.io/en/abp/latest/Virtual-File-System#working-with-the-embedded-files) understand how it works.
+
+```xml
+
+
+
+
+
+
+
+
+```
+
+Change the code of the `ConfigureServices` method in `ExtendLocalizationResourceDomainSharedModule`.
+
+```cs
+Configure(options =>
+{
+ options.Resources
+ .Add("en")
+ .AddBaseTypes(typeof(AbpValidationResource))
+ .AddVirtualJson("/Localization/ExtendLocalizationResource");
+
+ //add following code
+ options.Resources
+ .Get()
+ .AddVirtualJson("/Localization/AbpTiming");
+
+ options.DefaultResourceType = typeof(ExtendLocalizationResourceResource);
+});
+```
+
+Execute `ExtendLocalizationResource.DbMigrator` to migrate the database and run `ExtendLocalizationResource.Web`.
+
+We have changed the English localization text and added Russian localization.
+
+### Index page
+
+```cs
+
+}
+```
+
+
\ No newline at end of file
diff --git a/docs/en/Configuration.md b/docs/en/Configuration.md
index 6e638f7814..30d881c06e 100644
--- a/docs/en/Configuration.md
+++ b/docs/en/Configuration.md
@@ -1,3 +1,3 @@
-# Configuration
+# Configuration
ASP.NET Core has an flexible and extensible key-value based configuration system. In fact, the configuration system is a part of Microsoft.Extensions libraries and it is independent from ASP.NET Core. That means it can be used in any type of application. See [Microsoft's documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/) to learn the configuration infrastructure. ABP framework is 100% compatible with the configuration system.
\ No newline at end of file
diff --git a/docs/en/Dependency-Injection.md b/docs/en/Dependency-Injection.md
index f4398488e5..f347dc1dd7 100644
--- a/docs/en/Dependency-Injection.md
+++ b/docs/en/Dependency-Injection.md
@@ -1,4 +1,4 @@
-# Dependency Injection
+# Dependency Injection
ABP's Dependency Injection system is developed based on Microsoft's [dependency injection extension](https://medium.com/volosoft/asp-net-core-dependency-injection-best-practices-tips-tricks-c6e9c67f9d96) library (Microsoft.Extensions.DependencyInjection nuget package). So, it's documentation is valid in ABP too.
diff --git a/docs/en/Domain-Services.md b/docs/en/Domain-Services.md
index 5a4f6393e1..6ad9b78cf0 100644
--- a/docs/en/Domain-Services.md
+++ b/docs/en/Domain-Services.md
@@ -1,4 +1,4 @@
-# Domain Services
+# Domain Services
## Introduction
diff --git a/docs/en/Emailing.md b/docs/en/Emailing.md
index 50e7afc213..bfb3058862 100644
--- a/docs/en/Emailing.md
+++ b/docs/en/Emailing.md
@@ -1,4 +1,4 @@
-# Email Sending
+# Email Sending
ABP Framework provides various services, settings and integrations for sending emails;
diff --git a/docs/en/Entity-Framework-Core-Migrations.md b/docs/en/Entity-Framework-Core-Migrations.md
index 5d8ca01854..716038d412 100644
--- a/docs/en/Entity-Framework-Core-Migrations.md
+++ b/docs/en/Entity-Framework-Core-Migrations.md
@@ -1,4 +1,4 @@
-# EF Core Database Migrations
+# EF Core Database Migrations
This document begins by **introducing the default structure** provided by [the application startup template](Startup-Templates/Application.md) and **discusses various scenarios** you may want to implement for your own application.
diff --git a/docs/en/Entity-Framework-Core-MySQL.md b/docs/en/Entity-Framework-Core-MySQL.md
index 92a9cfb36e..91e3ce986d 100644
--- a/docs/en/Entity-Framework-Core-MySQL.md
+++ b/docs/en/Entity-Framework-Core-MySQL.md
@@ -1,4 +1,4 @@
-# Switch to EF Core MySQL Provider
+# Switch to EF Core MySQL Provider
This document explains how to switch to the **MySQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Entity-Framework-Core-Oracle-Devart.md b/docs/en/Entity-Framework-Core-Oracle-Devart.md
index 95e05db427..ecd4f65e0c 100644
--- a/docs/en/Entity-Framework-Core-Oracle-Devart.md
+++ b/docs/en/Entity-Framework-Core-Oracle-Devart.md
@@ -1,4 +1,4 @@
-# Switch to EF Core Oracle Devart Provider
+# Switch to EF Core Oracle Devart Provider
This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Entity-Framework-Core-Oracle-Official.md b/docs/en/Entity-Framework-Core-Oracle-Official.md
index d983dc5e41..b273515ac1 100644
--- a/docs/en/Entity-Framework-Core-Oracle-Official.md
+++ b/docs/en/Entity-Framework-Core-Oracle-Official.md
@@ -1,4 +1,4 @@
-# Switch to EF Core Oracle Provider
+# Switch to EF Core Oracle Provider
This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Entity-Framework-Core-Oracle.md b/docs/en/Entity-Framework-Core-Oracle.md
index 8c265149ba..1e340302dc 100644
--- a/docs/en/Entity-Framework-Core-Oracle.md
+++ b/docs/en/Entity-Framework-Core-Oracle.md
@@ -1,4 +1,4 @@
-# Switch to EF Core Oracle Provider
+# Switch to EF Core Oracle Provider
This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Entity-Framework-Core-Other-DBMS.md b/docs/en/Entity-Framework-Core-Other-DBMS.md
index 8c9078583d..9739dbdd02 100644
--- a/docs/en/Entity-Framework-Core-Other-DBMS.md
+++ b/docs/en/Entity-Framework-Core-Other-DBMS.md
@@ -1,4 +1,4 @@
-# Switch to Another DBMS for Entity Framework Core
+# Switch to Another DBMS for Entity Framework Core
**[The application startup template](Startup-Templates/Application.md)** comes with **SQL Server provider pre-configured** for the Entity Framework Core. However, EF Core supports [many other DBMSs](https://docs.microsoft.com/en-us/ef/core/providers/) and you can use any of them within your ABP based applications.
diff --git a/docs/en/Entity-Framework-Core-PostgreSQL.md b/docs/en/Entity-Framework-Core-PostgreSQL.md
index f6a0c26806..4ddd3dd22a 100644
--- a/docs/en/Entity-Framework-Core-PostgreSQL.md
+++ b/docs/en/Entity-Framework-Core-PostgreSQL.md
@@ -1,4 +1,4 @@
-# Switch to EF Core PostgreSQL Provider
+# Switch to EF Core PostgreSQL Provider
This document explains how to switch to the **PostgreSQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Entity-Framework-Core-SQLite.md b/docs/en/Entity-Framework-Core-SQLite.md
index 81d4b72de2..cbacf3baa5 100644
--- a/docs/en/Entity-Framework-Core-SQLite.md
+++ b/docs/en/Entity-Framework-Core-SQLite.md
@@ -1,4 +1,4 @@
-# Switch to EF Core SQLite Provider
+# Switch to EF Core SQLite Provider
This document explains how to switch to the **SQLite** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
diff --git a/docs/en/Getting-Started-AspNetCore-Application.md b/docs/en/Getting-Started-AspNetCore-Application.md
index 9202ed29f1..5eca211810 100644
--- a/docs/en/Getting-Started-AspNetCore-Application.md
+++ b/docs/en/Getting-Started-AspNetCore-Application.md
@@ -1,4 +1,4 @@
-# Getting Started ABP With AspNet Core MVC Web Application
+# Getting Started ABP With AspNet Core MVC Web Application
This tutorial explains how to start ABP from scratch with minimal dependencies. You generally want to start with the **[startup template](Getting-Started-AspNetCore-MVC-Template.md)**.
diff --git a/docs/en/Getting-Started-React-Native.md b/docs/en/Getting-Started-React-Native.md
index 08faac3608..9199d370dc 100644
--- a/docs/en/Getting-Started-React-Native.md
+++ b/docs/en/Getting-Started-React-Native.md
@@ -1,4 +1,4 @@
-# Getting Started with the React Native
+# Getting Started with the React Native
````json
//[doc-params]
diff --git a/docs/en/Getting-Started-With-Startup-Templates.md b/docs/en/Getting-Started-With-Startup-Templates.md
index be2bb201b8..9beb84bcef 100644
--- a/docs/en/Getting-Started-With-Startup-Templates.md
+++ b/docs/en/Getting-Started-With-Startup-Templates.md
@@ -1,4 +1,4 @@
-# Getting Started with the Startup Templates
+# Getting Started with the Startup Templates
See the following tutorials to learn how to get started with the ABP Framework using the pre-built application startup templates:
diff --git a/docs/en/Index.md b/docs/en/Index.md
index 8483d61612..84e1155b9c 100644
--- a/docs/en/Index.md
+++ b/docs/en/Index.md
@@ -1,4 +1,4 @@
-# ABP Documentation
+# ABP Documentation
ABP Framework is a complete **infrastructure** based on the **ASP.NET Core** to create **modern web applications** and **APIs** by following the software development **best practices** and the **latest technologies**.
diff --git a/docs/en/Integration-Tests.md b/docs/en/Integration-Tests.md
index 35d66171a6..9ad4741822 100644
--- a/docs/en/Integration-Tests.md
+++ b/docs/en/Integration-Tests.md
@@ -1 +1 @@
-This document has been [moved to here](Testing.md).
\ No newline at end of file
+This document has been [moved to here](Testing.md).
\ No newline at end of file
diff --git a/docs/en/Json-Serialization.md b/docs/en/Json-Serialization.md
index f0082ea9d6..7d6072c041 100644
--- a/docs/en/Json-Serialization.md
+++ b/docs/en/Json-Serialization.md
@@ -1,3 +1,3 @@
-# JSON
+# JSON
TODO
\ No newline at end of file
diff --git a/docs/en/MailKit.md b/docs/en/MailKit.md
index de4b653f4d..b05a28f9ba 100644
--- a/docs/en/MailKit.md
+++ b/docs/en/MailKit.md
@@ -1,4 +1,4 @@
-# MailKit Integration
+# MailKit Integration
[MailKit](http://www.mimekit.net/) is a cross-platform, popular open source mail client library for .net. ABP Framework provides an integration package to use the MailKit as the [email sender](Emailing.md).
diff --git a/docs/en/Migration-Guides/Abp-5_0-Angular.md b/docs/en/Migration-Guides/Abp-5_0-Angular.md
new file mode 100644
index 0000000000..1188e68556
--- /dev/null
+++ b/docs/en/Migration-Guides/Abp-5_0-Angular.md
@@ -0,0 +1,101 @@
+# Angular UI v4.x to v5.0 Migration Guide
+
+## Breaking Changes
+
+### Overall
+
+See the overall list of breaking changes:
+
+- Bootstrap 5 implementation [#10067](https://github.com/abpframework/abp/issues/10067)
+- Remove NGXS dependency & states [#9952](https://github.com/abpframework/abp/issues/9952)
+- Install @angular/localize package to startup templates [#10099](https://github.com/abpframework/abp/issues/10099)
+- Create new secondary entrypoints and move the related proxies to there [#10060](https://github.com/abpframework/abp/issues/10060)
+- Move SettingTabsService to @abp/ng.setting-management/config package from @abp/ng.core [#10061](https://github.com/abpframework/abp/issues/10061)
+- Make the @abp/ng.account dependent on @abp/ng.identity [#10059](https://github.com/abpframework/abp/issues/10059)
+- Set default abp-modal size medium [#10118](https://github.com/abpframework/abp/issues/10118)
+- Update all dependency versions to the latest [#9806](https://github.com/abpframework/abp/issues/9806)
+- Chart.js big include with CommonJS warning [#7472](https://github.com/abpframework/abp/issues/7472)
+
+### Angular v12
+
+The new ABP Angular UI is based on Angular v12. We started to compile Angular UI packages with the Ivy compilation. Therefore, **new packages only work with Angular v12**. If you are still on the older version of Angular v12, you have to update to Angular v12. The update is usually very easy. See [Angular Update Guide](https://update.angular.io/?l=2&v=11.0-12.0) for further information.
+
+### Bootstrap 5
+
+TODO
+
+### NGXS has been removed
+
+We aim to make the ABP Framework free of any state-management solutions. ABP developers should be able to use the ABP Framework with any library/framework of their choice. So, we decided to remove NGXS from ABP packages.
+
+If you'd like to use NGXS after upgrading to v5.0, you have to install the NGXS to your project. The package can be installed with the following command:
+
+```bash
+npm install @ngxs/store
+
+# or
+
+yarn add @ngxs/store
+```
+
+NGXS states and actions, some namespaces have been removed. See [this issue](https://github.com/abpframework/abp/issues/9952) for the details.
+
+If you don't want to use the NGXS, you should remove all NGXS related imports, injections, etc., from your project.
+
+### @angular/localize package
+
+[`@angular/localize`](https://angular.io/api/localize) dependency has been removed from `@abp/ng.core` package. The package must be installed in your app. Run the following command to install:
+
+```bash
+npm install @angular/localize
+
+# or
+
+yarn add @angular/localize
+```
+
+> ABP Angular UI packages are not dependent on the `@angular/localize` package. However, some packages (like `@ng-bootstrap/ng-bootstrap`) depend on the package. Thus, this package needs to be installed in your project.
+
+### Proxy endpoints
+
+New endpoints named proxy have been created, related proxies have moved.
+For example; before v5.0, `IdentityUserService` could be imported from `@abp/ng.identity`. As of v5.0, the service can be imported from `@abp/ng.identity/proxy`. See an example:
+
+```ts
+import { IdentityUserService } from '@abp/ng.identity/proxy';
+
+@Component({})
+export class YourComponent {
+ constructor(private identityUserService: IdentityUserService) {}
+}
+```
+
+Following proxies have been affected:
+
+- `@abp/ng.account` to `@abp/ng.account.core/proxy`
+- `@abp/ng.feature-management` to `@abp/ng.feature-management/proxy`
+- `@abp/ng.identity` to `@abp/ng.identity/proxy`
+- `@abp/ng.permission-management` to `@abp/ng.permission-management/proxy`
+- `@abp/ng.tenant-management` to `@abp/ng.tenant-management/proxy`
+- **ProfileService** is deleted from `@abp/ng.core`. Instead, you can import it from `@abp/ng.identity/proxy`
+
+### SettingTabsService
+
+**SettingTabsService** has moved from `@abp/ng.core` to `@abp/ng.setting-management/config`.
+
+### ChartComponent
+
+[`ChartComponent`](../UI/Angular/Chart-Component.md) has moved from `@abp/ng.theme.shared` to `@abp/ng.components/chart.js`. To use the component, you need to import the `ChartModule` to your module as follows:
+
+```ts
+import { ChartModule } from '@abp/ng.components/chart.js';
+
+@NgModule({
+ imports: [
+ ChartModule,
+ // ...
+ ],
+ // ...
+})
+export class YourFeatureModule {}
+```
diff --git a/docs/en/Migration-Guides/Abp-5_0.md b/docs/en/Migration-Guides/Abp-5_0.md
new file mode 100644
index 0000000000..2dc880be3b
--- /dev/null
+++ b/docs/en/Migration-Guides/Abp-5_0.md
@@ -0,0 +1,51 @@
+# ABP Framework v4.x to v5.0 Migration Guide
+
+## IdentityUser
+
+`IsActive ` property is added to the `IdentityUser`. This flag will be checked during the authentication of the users. See the related [PR](https://github.com/abpframework/abp/pull/10185).
+**After the migration, set this property to `true` for the existing users: `UPDATE AbpUsers SET IsActive=1`**
+
+For EFCore you can set `defaultValue` to `true` in the migration class:
+(This will add the column with `true` value for the existing records.)
+
+```cs
+public partial class AddIsActiveToIdentityUser : Migration
+{
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "IsActive",
+ table: "AbpUsers",
+ type: "bit",
+ nullable: false,
+ defaultValue: true); // Default is false.
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "IsActive",
+ table: "AbpUsers");
+ }
+}
+```
+
+For document base databases like MongoDB, you need to manually update the `IsActive` field for the existing user records.
+
+## MongoDB
+
+ABP Framework will serialize the datetime based on [AbpClockOptions](https://docs.abp.io/en/abp/latest/Timing#clock-options) starting from ABP v5.0. It was saving `DateTime` values as UTC in MongoDB. Check out [MongoDB Datetime Serialization Options](https://mongodb.github.io/mongo-csharp-driver/2.13/reference/bson/mapping/#datetime-serialization-options).
+
+To revert back this feature, set `UseAbpClockHandleDateTime = false` in `AbpMongoDbOptions`:
+
+```cs
+services.Configure(x => x.UseAbpClockHandleDateTime = false);
+```
+
+## IApiScopeRepository
+
+`GetByNameAsync` method renamed as `FindByNameAsync`.
+
+## Angular UI
+
+See the [Angular UI 5.0 Migration Guide](Abp-5_0-Angular.md).
diff --git a/docs/en/Migration-Guides/Index.md b/docs/en/Migration-Guides/Index.md
index c7bee5a82a..909f6c0998 100644
--- a/docs/en/Migration-Guides/Index.md
+++ b/docs/en/Migration-Guides/Index.md
@@ -1,7 +1,7 @@
# ABP Framework Migration Guides
-* [4.2 to 4.3](Abp-4_3.md)
-* [4.x to 4.2](Abp-4_2.md)
-* [3.3.x to 4.0](Abp-4_0.md)
-* [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md)
-
+- [4.x to 5.0](Abp-5_0.md)
+- [4.2 to 4.3](Abp-4_3.md)
+- [4.x to 4.2](Abp-4_2.md)
+- [3.3.x to 4.0](Abp-4_0.md)
+- [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md)
diff --git a/docs/en/Module-Development-Basics.md b/docs/en/Module-Development-Basics.md
index 4b76465a3e..63cbc31893 100644
--- a/docs/en/Module-Development-Basics.md
+++ b/docs/en/Module-Development-Basics.md
@@ -1,4 +1,4 @@
-# Modularity
+# Modularity
## Introduction
diff --git a/docs/en/Modules/Cms-Kit/Index.md b/docs/en/Modules/Cms-Kit/Index.md
index eb08a0c53c..4c422b0bf3 100644
--- a/docs/en/Modules/Cms-Kit/Index.md
+++ b/docs/en/Modules/Cms-Kit/Index.md
@@ -20,11 +20,16 @@ All features are individually usable. If you disable a feature, it completely di
## How to Install
+> This module is depends on [BlobStoring](../../Blob-Storing.md) module, please install `BlobStoring` module first and add a provider. For more information, check the [documentation](../../Blob-Storing.md).
+
[ABP CLI](../../CLI.md) allows installing a module to a solution using the `add-module` command. You can install the CMS Kit module in a command-line terminal with the following command:
```bash
abp add-module Volo.CmsKit
```
+
+> By default, Cms-Kit is disabled by `GlobalFeature`. Because of that the initial migration will be empty. So you can skip the migration by adding `--skip-db-migrations` to command when installing if you are using Entity Framework Core. After enabling Cms-Kit global feture, please add new migration.
+
After the installation process, open the `GlobalFeatureConfigurator` class in the `Domain.Shared` project of your solution and place the following code into the `Configure` method to enable all the features in the CMS Kit module.
```csharp
diff --git a/docs/en/Modules/Setting-Management.md b/docs/en/Modules/Setting-Management.md
index 4eedcc969d..68b06372eb 100644
--- a/docs/en/Modules/Setting-Management.md
+++ b/docs/en/Modules/Setting-Management.md
@@ -278,7 +278,7 @@ Open the `app.component.ts` and modify the file as shown below:
```js
import { Component } from '@angular/core';
-import { SettingTabsService } from '@abp/ng.core'; // imported SettingTabsService
+import { SettingTabsService } from '@abp/ng.setting-management/config'; // imported SettingTabsService
import { MySettingsComponent } from './my-settings/my-settings.component'; // imported MySettingsComponent
@Component(/* component metadata */)
diff --git a/docs/en/Object-Extensions.md b/docs/en/Object-Extensions.md
index 72265b2690..4c2b1b5454 100644
--- a/docs/en/Object-Extensions.md
+++ b/docs/en/Object-Extensions.md
@@ -1,4 +1,4 @@
-# Object Extensions
+# Object Extensions
ABP Framework provides an **object extension system** to allow you to **add extra properties** to an existing object **without modifying** the related class. This allows to extend functionalities implemented by a depended [application module](Modules/Index.md), especially when you want to [extend entities](Customizing-Application-Modules-Extending-Entities.md) and [DTOs](Customizing-Application-Modules-Overriding-Services.md) defined by the module.
diff --git a/docs/en/Options.md b/docs/en/Options.md
index b4f4f09140..76616aca28 100644
--- a/docs/en/Options.md
+++ b/docs/en/Options.md
@@ -1,4 +1,4 @@
-# Options
+# Options
Microsoft has introduced [the options pattern](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options) that is used to configure a group of settings used by the framework services. This pattern is implemented by the [Microsoft.Extensions.Options](https://www.nuget.org/packages/Microsoft.Extensions.Options) NuGet package, so it is usable by any type of applications in addition to ASP.NET Core based applications.
diff --git a/docs/en/RabbitMq.md b/docs/en/RabbitMq.md
index 11dc305b41..9fc04aa5d6 100644
--- a/docs/en/RabbitMq.md
+++ b/docs/en/RabbitMq.md
@@ -1,3 +1,3 @@
-# RabbitMQ
+# RabbitMQ
TODO!
\ No newline at end of file
diff --git a/docs/en/Road-Map.md b/docs/en/Road-Map.md
index 215f017a47..de0a45ffbb 100644
--- a/docs/en/Road-Map.md
+++ b/docs/en/Road-Map.md
@@ -1,4 +1,4 @@
-# ABP Framework Road Map
+# ABP Framework Road Map
This document provides a road map, release schedule and planned features for the ABP Framework.
diff --git a/docs/en/SMS-Sending.md b/docs/en/SMS-Sending.md
index bf37814100..0dca487a69 100644
--- a/docs/en/SMS-Sending.md
+++ b/docs/en/SMS-Sending.md
@@ -1,4 +1,4 @@
-# SMS Sending
+# SMS Sending
The ABP Framework provides an abstraction to sending SMS. Having such an abstraction has some benefits;
diff --git a/docs/en/Settings.md b/docs/en/Settings.md
index 567cb02c4c..61c55f99b4 100644
--- a/docs/en/Settings.md
+++ b/docs/en/Settings.md
@@ -1,4 +1,4 @@
-# Settings
+# Settings
[Configuration system](Configuration.md) is a good way to configure the application on startup. In addition to the configurations, ABP provides another way to set and get some application settings.
diff --git a/docs/en/SignalR-Integration.md b/docs/en/SignalR-Integration.md
index 7ebf4f6539..35f109b8e6 100644
--- a/docs/en/SignalR-Integration.md
+++ b/docs/en/SignalR-Integration.md
@@ -52,15 +52,15 @@ Client side installation depends on your UI framework / client type.
Run the following command in the root folder of your web project:
-````bash
+```bash
yarn add @abp/signalr
-````
+```
> This requires to [install yarn](https://yarnpkg.com/) if you haven't install before.
This will add the `@abp/signalr` to the dependencies in the `package.json` of your project:
-````json
+```json
{
...
"dependencies": {
@@ -68,25 +68,25 @@ This will add the `@abp/signalr` to the dependencies in the `package.json` of yo
"@abp/signalr": "~2.7.0"
}
}
-````
+```
Run the following [ABP CLI](CLI.md) command in the root folder of your web project:
-````bash
+```bash
abp install-libs
-````
+```
This will copy the SignalR JavaScript files into your project:

-Finally, add the following code to your page/view to include the `signalr.js` file
+Finally, add the following code to your page/view to include the `signalr.js` file
-````xml
+```xml
@section scripts {
}
-````
+```
It requires to add `@using Volo.Abp.AspNetCore.Mvc.UI.Packages.SignalR` to your page/view.
@@ -108,27 +108,27 @@ ABP automatically registers all the hubs to the [dependency injection](Dependenc
Example:
-````csharp
+```csharp
public class MessagingHub : Hub
{
//...
}
-````
+```
The hub route will be `/signalr-hubs/messaging` for the `MessagingHub`:
-* Adding a standard `/signalr-hubs/` prefix
-* Continue with the **camel case** hub name, without the `Hub` suffix.
+- Adding a standard `/signalr-hubs/` prefix
+- Continue with the **kebab-case** hub name, without the `Hub` suffix.
If you want to specify the route, you can use the `HubRoute` attribute:
-````csharp
+```csharp
[HubRoute("/my-messaging-hub")]
public class MessagingHub : Hub
{
//...
}
-````
+```
### AbpHub Base Classes
@@ -136,7 +136,7 @@ Instead of the standard `Hub` and `Hub` classes, you can inherit from the `Ab
Example:
-````csharp
+```csharp
public class MessagingHub : AbpHub
{
public async Task SendMessage(string targetUserName, string message)
@@ -145,7 +145,7 @@ public class MessagingHub : AbpHub
var txt = L["MyText"]; //Localization
}
}
-````
+```
> While you could inject the same properties into your hub constructor, this way simplifies your hub class.
@@ -153,9 +153,9 @@ public class MessagingHub : AbpHub
ABP automatically registers all the hubs to the [dependency injection](Dependency-Injection.md) as a **transient service**. If you want to **disable auto dependency injection** registration for your hub class, just add a `DisableConventionalRegistration` attribute. You can still register your hub class to dependency injection in the `ConfigureServices` method of your module if you like:
-````csharp
+```csharp
context.Services.AddTransient();
-````
+```
When **you or ABP** register the class to the dependency injection, it is automatically mapped to the endpoint route configuration just as described in the previous sections. You can use `DisableAutoHubMap` attribute if you want to manually map your hub class.
@@ -163,7 +163,7 @@ For manual mapping, you have two options:
1. Use the `AbpSignalROptions` to add your map configuration (in the `ConfigureServices` method of your [module](Module-Development-Basics.md)), so ABP still performs the endpoint mapping for your hub:
-````csharp
+```csharp
Configure(options =>
{
options.Hubs.Add(
@@ -178,13 +178,13 @@ Configure(options =>
)
);
});
-````
+```
This is a good way to provide additional SignalR options.
If you don't want to disable auto hub map, but still want to perform additional SignalR configuration, use the `options.Hubs.AddOrUpdate(...)` method:
-````csharp
+```csharp
Configure(options =>
{
options.Hubs.AddOrUpdate(
@@ -200,13 +200,13 @@ Configure(options =>
}
);
});
-````
+```
This is the way you can modify the options of a hub class defined in a depended module (where you don't have the source code access).
2. Change `app.UseConfiguredEndpoints` in the `OnApplicationInitialization` method of your [module](Module-Development-Basics.md) as shown below (added a lambda method as the parameter).
-````csharp
+```csharp
app.UseConfiguredEndpoints(endpoints =>
{
endpoints.MapHub("/my-messaging-hub", options =>
@@ -214,7 +214,7 @@ app.UseConfiguredEndpoints(endpoints =>
options.LongPolling.PollTimeout = TimeSpan.FromSeconds(30);
});
});
-````
+```
### UserIdProvider
@@ -234,5 +234,5 @@ Refer to the Microsoft's documentation to [host and scale](https://docs.microsof
## See Also
-* [Microsoft SignalR documentation](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction)
-* [Real-Time Messaging In A Distributed Architecture Using ABP, SingalR & RabbitMQ](https://volosoft.com/blog/RealTime-Messaging-Distributed-Architecture-Abp-SingalR-RabbitMQ)
+- [Microsoft SignalR documentation](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction)
+- [Real-Time Messaging In A Distributed Architecture Using ABP, SingalR & RabbitMQ](https://volosoft.com/blog/RealTime-Messaging-Distributed-Architecture-Abp-SingalR-RabbitMQ)
diff --git a/docs/en/Specifications.md b/docs/en/Specifications.md
index bfe1d031d3..a9aeb2b050 100644
--- a/docs/en/Specifications.md
+++ b/docs/en/Specifications.md
@@ -1,4 +1,4 @@
-# Specifications
+# Specifications
Specification Pattern is used to define **named, reusable, combinable and testable filters** for entities and other business objects.
diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md
index 1fdf980ddc..5ad2dde24b 100644
--- a/docs/en/Startup-Templates/Application.md
+++ b/docs/en/Startup-Templates/Application.md
@@ -1,4 +1,4 @@
-# Application Startup Template
+# Application Startup Template
## Introduction
diff --git a/docs/en/Startup-Templates/Index.md b/docs/en/Startup-Templates/Index.md
index b73779ecb8..09755151db 100644
--- a/docs/en/Startup-Templates/Index.md
+++ b/docs/en/Startup-Templates/Index.md
@@ -1,4 +1,4 @@
-# Startup Templates
+# Startup Templates
While you can start with an empty project and add needed packages manually, startup templates make easy and comfortable to start a new solution with the ABP framework. Click the name from the list below to see the documentation of the related startup template:
diff --git a/docs/en/Startup-Templates/Module.md b/docs/en/Startup-Templates/Module.md
index cdcb964bef..c9ac6ccd48 100644
--- a/docs/en/Startup-Templates/Module.md
+++ b/docs/en/Startup-Templates/Module.md
@@ -1,4 +1,4 @@
-# Module Startup Template
+# Module Startup Template
This template can be used to create a **reusable [application module](../Modules/Index.md)** based on the [module development best practices & conventions](../Best-Practices/Index.md). It is also suitable for creating **microservices** (with or without UI).
diff --git a/docs/en/Testing.md b/docs/en/Testing.md
index 0a617174ed..e248ed51a6 100644
--- a/docs/en/Testing.md
+++ b/docs/en/Testing.md
@@ -1,4 +1,4 @@
-# Automated Testing
+# Automated Testing
## Introduction
diff --git a/docs/en/Timing.md b/docs/en/Timing.md
index 790721e7a8..fce17de4cf 100644
--- a/docs/en/Timing.md
+++ b/docs/en/Timing.md
@@ -1,4 +1,4 @@
-# Timing
+# Timing
Working with times & [time zones](https://en.wikipedia.org/wiki/Time_zone) is always tricky, especially if you need to build a **global system** that is used by users in **different time zones**.
diff --git a/docs/en/UI/Angular/Chart-Component.md b/docs/en/UI/Angular/Chart-Component.md
new file mode 100644
index 0000000000..a1cea80b52
--- /dev/null
+++ b/docs/en/UI/Angular/Chart-Component.md
@@ -0,0 +1,249 @@
+# Chart Component
+
+ABP Chart component exposed by `@abp/ng.components/chart.js` is based on [`charts.js`](https://www.chartjs.org/) v3+. You don't need to install the `chart.js` package. Since the `@abp/ng.components` is dependent on the `chart.js`, the package is already installed in your project.
+
+> Chart component loads `chart.js` script lazy. So it does not increase the bundle size.
+
+## How to Use
+
+First of all, need to import the `ChartModule` to your feature module as follows:
+
+```ts
+// your-feature.module.ts
+
+import { ChartModule } from '@abp/ng.components/chart.js';
+import { ChartDemoComponent } from './chart-demo.component';
+
+@NgModule({
+ imports: [
+ ChartModule,
+ // ...
+ ],
+ declarations: [ChartDemoComponent],
+ // ...
+})
+export class YourFeatureModule {}
+```
+
+Then, `abp-chart` component can be used. See an example:
+
+```ts
+// chart-demo.component.ts
+
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-chart-demo',
+ template: ` `,
+})
+export class ChartDemoComponent {
+ data = {
+ labels: ['Data 1', 'Data 2', 'Data 3'],
+ datasets: [
+ {
+ label: 'Dataset 1',
+ data: [40, 15, 45],
+ backgroundColor: ['#ff7675', '#fdcb6e', '#0984e3'],
+ },
+ ],
+ };
+}
+```
+
+> **Important Note**: Changing the chart data without creating a new data instance does not trigger change detection. In order to chart to redraw itself, a new data object needs to be created.
+
+See the result:
+
+
+
+## Examples
+
+### Doughnut
+
+```ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-chart-demo',
+ template: `
+
+ `,
+})
+export class ChartDemoComponent {
+ data = {
+ labels: ['Data 1', 'Data 2', 'Data 3'],
+ datasets: [
+ {
+ label: 'Dataset 1',
+ data: [40, 15, 45],
+ backgroundColor: ['#a0e6c3', '#f0ea4c', '#5b9dc3'],
+ },
+ ],
+ };
+
+ options = {
+ plugins: {
+ title: {
+ display: true,
+ text: 'Doughnut Chart',
+ fontSize: 16,
+ },
+ legend: {
+ position: 'bottom',
+ },
+ },
+ };
+}
+```
+
+Result:
+
+
+
+### Bar
+
+```ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-chart-demo',
+ template: `
+
+ `,
+})
+export class ChartDemoComponent {
+ data = {
+ labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
+ datasets: [
+ {
+ label: 'First dataset',
+ backgroundColor: '#42A5F5',
+ data: [65, 59, 80, 81, 56, 55, 40],
+ },
+ {
+ label: 'Second dataset',
+ backgroundColor: '#FFA726',
+ data: [28, 48, 40, 19, 86, 27, 90],
+ },
+ ],
+ };
+}
+```
+
+Result:
+
+
+
+### Radar
+
+```ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-chart-demo',
+ template: `
+
+
+
+ `,
+})
+export class ChartDemoComponent {
+ data = {
+ labels: [
+ 'January',
+ 'February',
+ 'March',
+ 'April',
+ 'May',
+ 'June',
+ 'July',
+ 'August',
+ 'September',
+ 'October',
+ 'November',
+ 'December',
+ ],
+ datasets: [
+ {
+ label: 'Dataset 1',
+ backgroundColor: 'rgba(179,181,198,0.2)',
+ borderColor: 'rgba(179,181,198,1)',
+ data: [65, 59, 90, 81, 56, 55, 40, 35, 82, 51, 62, 95],
+ },
+ {
+ label: 'Dataset 2',
+ backgroundColor: 'rgba(255,99,132,0.2)',
+ borderColor: 'rgba(255,99,132,1)',
+ data: [28, 48, 40, 58, 96, 27, 100, 44, 85, 77, 71, 39],
+ },
+ ],
+ };
+
+ addDataset() {
+ this.data = {
+ ...this.data,
+ datasets: [
+ ...this.data.datasets,
+ {
+ label: 'Dataset 3',
+ backgroundColor: 'rgba(54,162,235,0.2)',
+ borderColor: 'rgba(54, 162, 235, 1)',
+ data: [90, 95, 98, 91, 99, 96, 89, 95, 98, 93, 92, 90],
+ },
+ ],
+ };
+ }
+}
+```
+
+Result:
+
+
+
+See the [`chart.js` samples](https://www.chartjs.org/docs/latest/samples) for more examples.
+
+## API
+
+### `abp-chart`
+
+#### Properties
+
+| Name | Description | Type | Default |
+| --------------- | ---------------------------------------------------------------- | ----------------------- | ------- |
+| `[type]` | Type of the chart. | `string` | null |
+| `[data]` | Chart data to display | `any` | null |
+| `[options]` | Chart options to customize | `any` | null |
+| `[plugins]` | Chart plugins to customize behaviour | `any` | null |
+| `[width]` | Witdh of the chart | `string` | null |
+| `[height]` | Height of the chart | `string` | null |
+| `[responsive]` | Whether the chart is responsive | `boolean` | true |
+| `(dataSelect)` | A callback that executes when an element on the chart is clicked | `EventEmitter` | - |
+| `(initialized)` | A callback that executes when the chart is initialized | `EventEmitter` | - |
+
+#### Methods
+
+| Name | Description | Parameters |
+| ---------------- | ------------------------------------------------------------------- | ---------- |
+| `refresh` | Redraws the chart | - |
+| `reinit` | Destroys the chart then creates it again | - |
+| `getBase64Image` | Returns a base 64 encoded string of the chart in it's current state | - |
+| `generateLegend` | Returns an HTML string of a legend for the chart | - |
+| `getCanvas` | Returns the canvas HTML element | - |
diff --git a/docs/en/UI/Angular/Content-Strategy.md b/docs/en/UI/Angular/Content-Strategy.md
index 8544042c32..cb06ecf044 100644
--- a/docs/en/UI/Angular/Content-Strategy.md
+++ b/docs/en/UI/Angular/Content-Strategy.md
@@ -11,13 +11,15 @@
constructor(
public content: string,
protected domStrategy?: DomStrategy,
- protected contentSecurityStrategy?: ContentSecurityStrategy
+ protected contentSecurityStrategy?: ContentSecurityStrategy,
+ protected options?: ElementOptions = {},
)
```
- `content` is set to `